__vite_ssr_exportName__("TimestampFormat", () => { try { return TimestampFormat } catch {} });
__vite_ssr_exportName__("DiffLayout", () => { try { return DiffLayout } catch {} });
__vite_ssr_exportName__("SidebarProjectSortOrder", () => { try { return SidebarProjectSortOrder } catch {} });
__vite_ssr_exportName__("DEFAULT_SIDEBAR_PROJECT_SORT_ORDER", () => { try { return DEFAULT_SIDEBAR_PROJECT_SORT_ORDER } catch {} });
__vite_ssr_exportName__("SidebarThreadSortOrder", () => { try { return SidebarThreadSortOrder } catch {} });
__vite_ssr_exportName__("SidebarProjectGroupingMode", () => { try { return SidebarProjectGroupingMode } catch {} });
__vite_ssr_exportName__("MIN_SIDEBAR_THREAD_PREVIEW_COUNT", () => { try { return MIN_SIDEBAR_THREAD_PREVIEW_COUNT } catch {} });
__vite_ssr_exportName__("MAX_SIDEBAR_THREAD_PREVIEW_COUNT", () => { try { return MAX_SIDEBAR_THREAD_PREVIEW_COUNT } catch {} });
__vite_ssr_exportName__("SidebarThreadPreviewCount", () => { try { return SidebarThreadPreviewCount } catch {} });
__vite_ssr_exportName__("MIN_SIDEBAR_AUTO_SETTLE_AFTER_DAYS", () => { try { return MIN_SIDEBAR_AUTO_SETTLE_AFTER_DAYS } catch {} });
__vite_ssr_exportName__("MAX_SIDEBAR_AUTO_SETTLE_AFTER_DAYS", () => { try { return MAX_SIDEBAR_AUTO_SETTLE_AFTER_DAYS } catch {} });
__vite_ssr_exportName__("SidebarAutoSettleAfterDays", () => { try { return SidebarAutoSettleAfterDays } catch {} });
__vite_ssr_exportName__("MIN_GLASS_OPACITY", () => { try { return MIN_GLASS_OPACITY } catch {} });
__vite_ssr_exportName__("MAX_GLASS_OPACITY", () => { try { return MAX_GLASS_OPACITY } catch {} });
__vite_ssr_exportName__("GlassOpacity", () => { try { return GlassOpacity } catch {} });
__vite_ssr_exportName__("MIN_APPEARANCE_CONTRAST", () => { try { return MIN_APPEARANCE_CONTRAST } catch {} });
__vite_ssr_exportName__("MAX_APPEARANCE_CONTRAST", () => { try { return MAX_APPEARANCE_CONTRAST } catch {} });
__vite_ssr_exportName__("AppearanceContrast", () => { try { return AppearanceContrast } catch {} });
__vite_ssr_exportName__("MIN_PANEL_ANIMATION_DURATION_MS", () => { try { return MIN_PANEL_ANIMATION_DURATION_MS } catch {} });
__vite_ssr_exportName__("MAX_PANEL_ANIMATION_DURATION_MS", () => { try { return MAX_PANEL_ANIMATION_DURATION_MS } catch {} });
__vite_ssr_exportName__("PanelAnimationDurationMs", () => { try { return PanelAnimationDurationMs } catch {} });
__vite_ssr_exportName__("MIN_INTERFACE_FONT_SIZE", () => { try { return MIN_INTERFACE_FONT_SIZE } catch {} });
__vite_ssr_exportName__("MAX_INTERFACE_FONT_SIZE", () => { try { return MAX_INTERFACE_FONT_SIZE } catch {} });
__vite_ssr_exportName__("InterfaceFontSize", () => { try { return InterfaceFontSize } catch {} });
__vite_ssr_exportName__("DEFAULT_INTERFACE_FONT_SIZE", () => { try { return DEFAULT_INTERFACE_FONT_SIZE } catch {} });
__vite_ssr_exportName__("MIN_PROMPT_FONT_SIZE", () => { try { return MIN_PROMPT_FONT_SIZE } catch {} });
__vite_ssr_exportName__("MAX_PROMPT_FONT_SIZE", () => { try { return MAX_PROMPT_FONT_SIZE } catch {} });
__vite_ssr_exportName__("PromptFontSize", () => { try { return PromptFontSize } catch {} });
__vite_ssr_exportName__("DEFAULT_PROMPT_FONT_SIZE", () => { try { return DEFAULT_PROMPT_FONT_SIZE } catch {} });
__vite_ssr_exportName__("MIN_CODE_FONT_SIZE", () => { try { return MIN_CODE_FONT_SIZE } catch {} });
__vite_ssr_exportName__("MAX_CODE_FONT_SIZE", () => { try { return MAX_CODE_FONT_SIZE } catch {} });
__vite_ssr_exportName__("CodeFontSize", () => { try { return CodeFontSize } catch {} });
__vite_ssr_exportName__("DEFAULT_CODE_FONT_SIZE", () => { try { return DEFAULT_CODE_FONT_SIZE } catch {} });
__vite_ssr_exportName__("MIN_TERMINAL_FONT_SIZE", () => { try { return MIN_TERMINAL_FONT_SIZE } catch {} });
__vite_ssr_exportName__("MAX_TERMINAL_FONT_SIZE", () => { try { return MAX_TERMINAL_FONT_SIZE } catch {} });
__vite_ssr_exportName__("TerminalFontSize", () => { try { return TerminalFontSize } catch {} });
__vite_ssr_exportName__("EnvironmentIdentificationMode", () => { try { return EnvironmentIdentificationMode } catch {} });
__vite_ssr_exportName__("DEFAULT_ENVIRONMENT_IDENTIFICATION_MODE", () => { try { return DEFAULT_ENVIRONMENT_IDENTIFICATION_MODE } catch {} });
__vite_ssr_exportName__("SnapShotKeyChord", () => { try { return SnapShotKeyChord } catch {} });
__vite_ssr_exportName__("SNAP_SHOT_MODIFIERS", () => { try { return SNAP_SHOT_MODIFIERS } catch {} });
__vite_ssr_exportName__("SnapShotModifier", () => { try { return SnapShotModifier } catch {} });
__vite_ssr_exportName__("SnapShotShortcut", () => { try { return SnapShotShortcut } catch {} });
__vite_ssr_exportName__("SnapShotSound", () => { try { return SnapShotSound } catch {} });
__vite_ssr_exportName__("isModifierPairShortcut", () => { try { return isModifierPairShortcut } catch {} });
__vite_ssr_exportName__("snapShotShortcutModifierPair", () => { try { return snapShotShortcutModifierPair } catch {} });
__vite_ssr_exportName__("snapShotModifierPairLabel", () => { try { return snapShotModifierPairLabel } catch {} });
__vite_ssr_exportName__("NotificationMode", () => { try { return NotificationMode } catch {} });
__vite_ssr_exportName__("QuitConfirmationMode", () => { try { return QuitConfirmationMode } catch {} });
__vite_ssr_exportName__("FontFamilyPreference", () => { try { return FontFamilyPreference } catch {} });
__vite_ssr_exportName__("DefaultThemePreference", () => { try { return DefaultThemePreference } catch {} });
__vite_ssr_exportName__("DEFAULT_BROWSER_VIEWPORT", () => { try { return DEFAULT_BROWSER_VIEWPORT } catch {} });
__vite_ssr_exportName__("DEFAULT_BROWSER_AUTO_SHOW_FLOATING_PREVIEW", () => { try { return DEFAULT_BROWSER_AUTO_SHOW_FLOATING_PREVIEW } catch {} });
__vite_ssr_exportName__("BROWSER_RECORDING_FRAME_RATES", () => { try { return __vite_ssr_import_19__.BROWSER_RECORDING_FRAME_RATES } catch {} });
__vite_ssr_exportName__("BrowserRecordingFrameRate", () => { try { return __vite_ssr_import_19__.BrowserRecordingFrameRate } catch {} });
__vite_ssr_exportName__("DEFAULT_BROWSER_RECORDING_FRAME_RATE", () => { try { return __vite_ssr_import_19__.DEFAULT_BROWSER_RECORDING_FRAME_RATE } catch {} });
__vite_ssr_exportName__("BrowserLinkTarget", () => { try { return BrowserLinkTarget } catch {} });
__vite_ssr_exportName__("DEFAULT_BROWSER_LINK_TARGET", () => { try { return DEFAULT_BROWSER_LINK_TARGET } catch {} });
__vite_ssr_exportName__("BrowserSearchEngine", () => { try { return BrowserSearchEngine } catch {} });
__vite_ssr_exportName__("DEFAULT_BROWSER_SEARCH_ENGINE", () => { try { return DEFAULT_BROWSER_SEARCH_ENGINE } catch {} });
__vite_ssr_exportName__("BROWSER_CUSTOM_SEARCH_URL_MAX_LENGTH", () => { try { return BROWSER_CUSTOM_SEARCH_URL_MAX_LENGTH } catch {} });
__vite_ssr_exportName__("BrowserCustomSearchUrl", () => { try { return BrowserCustomSearchUrl } catch {} });
__vite_ssr_exportName__("LoadBalancingWeights", () => { try { return LoadBalancingWeights } catch {} });
__vite_ssr_exportName__("DiffColorScheme", () => { try { return DiffColorScheme } catch {} });
__vite_ssr_exportName__("ChatWidth", () => { try { return ChatWidth } catch {} });
__vite_ssr_exportName__("ModelFavorite", () => { try { return ModelFavorite } catch {} });
__vite_ssr_exportName__("ModelFavorites", () => { try { return ModelFavorites } catch {} });
__vite_ssr_exportName__("ProviderModelPreferences", () => { try { return ProviderModelPreferences } catch {} });
__vite_ssr_exportName__("ClientSettingsSchema", () => { try { return ClientSettingsSchema } catch {} });
__vite_ssr_exportName__("DEFAULT_CLIENT_SETTINGS", () => { try { return DEFAULT_CLIENT_SETTINGS } catch {} });
__vite_ssr_exportName__("UsageModelPriceOverride", () => { try { return UsageModelPriceOverride } catch {} });
__vite_ssr_exportName__("makeBinaryPathSetting", () => { try { return makeBinaryPathSetting } catch {} });
__vite_ssr_exportName__("secretSettingsFields", () => { try { return secretSettingsFields } catch {} });
__vite_ssr_exportName__("secretSetting", () => { try { return secretSetting } catch {} });
__vite_ssr_exportName__("isSecretSetting", () => { try { return isSecretSetting } catch {} });
__vite_ssr_exportName__("makeProviderSettingsSchema", () => { try { return makeProviderSettingsSchema } catch {} });
__vite_ssr_exportName__("CodexSettings", () => { try { return CodexSettings } catch {} });
__vite_ssr_exportName__("IDLE_COMPACTION_MODES", () => { try { return IDLE_COMPACTION_MODES } catch {} });
__vite_ssr_exportName__("IdleCompactionMode", () => { try { return IdleCompactionMode } catch {} });
__vite_ssr_exportName__("ClaudeSettings", () => { try { return ClaudeSettings } catch {} });
__vite_ssr_exportName__("ANTIGRAVITY_AUTH_METHODS", () => { try { return ANTIGRAVITY_AUTH_METHODS } catch {} });
__vite_ssr_exportName__("AntigravityAuthMethod", () => { try { return AntigravityAuthMethod } catch {} });
__vite_ssr_exportName__("AntigravitySettings", () => { try { return AntigravitySettings } catch {} });
__vite_ssr_exportName__("UsageLimitSourceConfig", () => { try { return UsageLimitSourceConfig } catch {} });
__vite_ssr_exportName__("SourceControlHostSettings", () => { try { return SourceControlHostSettings } catch {} });
__vite_ssr_exportName__("ObservabilitySettings", () => { try { return ObservabilitySettings } catch {} });
__vite_ssr_exportName__("SourceControlWritingStyleMode", () => { try { return SourceControlWritingStyleMode } catch {} });
__vite_ssr_exportName__("SourceControlWritingStyleSettings", () => { try { return SourceControlWritingStyleSettings } catch {} });
__vite_ssr_exportName__("BranchNamingMode", () => { try { return BranchNamingMode } catch {} });
__vite_ssr_exportName__("DEFAULT_AUTOMATIC_GIT_FETCH_INTERVAL", () => { try { return DEFAULT_AUTOMATIC_GIT_FETCH_INTERVAL } catch {} });
__vite_ssr_exportName__("DEFAULT_PROVIDER_HEALTH_REFRESH_INTERVAL", () => { try { return DEFAULT_PROVIDER_HEALTH_REFRESH_INTERVAL } catch {} });
__vite_ssr_exportName__("BackgroundActivityProfile", () => { try { return BackgroundActivityProfile } catch {} });
__vite_ssr_exportName__("DEFAULT_BACKGROUND_ACTIVITY_PROFILE", () => { try { return DEFAULT_BACKGROUND_ACTIVITY_PROFILE } catch {} });
__vite_ssr_exportName__("BackgroundActivityProfileSelection", () => { try { return BackgroundActivityProfileSelection } catch {} });
__vite_ssr_exportName__("BackgroundActivityOverrides", () => { try { return BackgroundActivityOverrides } catch {} });
__vite_ssr_exportName__("BackgroundActivitySettings", () => { try { return BackgroundActivitySettings } catch {} });
__vite_ssr_exportName__("ResponseStreamingMode", () => { try { return ResponseStreamingMode } catch {} });
__vite_ssr_exportName__("WorktreeKeepWhen", () => { try { return WorktreeKeepWhen } catch {} });
__vite_ssr_exportName__("WorktreeCleanupRules", () => { try { return WorktreeCleanupRules } catch {} });
__vite_ssr_exportName__("WorktreeCleanup", () => { try { return WorktreeCleanup } catch {} });
__vite_ssr_exportName__("PROJECT_SCOPED_SERVER_SETTING_KEYS", () => { try { return PROJECT_SCOPED_SERVER_SETTING_KEYS } catch {} });
__vite_ssr_exportName__("ProjectProviderInstanceOverride", () => { try { return ProjectProviderInstanceOverride } catch {} });
__vite_ssr_exportName__("ProjectSettingsOverrides", () => { try { return ProjectSettingsOverrides } catch {} });
__vite_ssr_exportName__("isNullableProjectSettingsOverride", () => { try { return isNullableProjectSettingsOverride } catch {} });
__vite_ssr_exportName__("DATABASE_COMPACTION_RECOMMENDED_BYTES", () => { try { return DATABASE_COMPACTION_RECOMMENDED_BYTES } catch {} });
__vite_ssr_exportName__("DatabaseStorageStatus", () => { try { return DatabaseStorageStatus } catch {} });
__vite_ssr_exportName__("shouldRecommendDatabaseCompaction", () => { try { return shouldRecommendDatabaseCompaction } catch {} });
__vite_ssr_exportName__("StorageCleanupReportEntry", () => { try { return StorageCleanupReportEntry } catch {} });
__vite_ssr_exportName__("StorageCleanupReport", () => { try { return StorageCleanupReport } catch {} });
__vite_ssr_exportName__("StorageCleanupSettings", () => { try { return StorageCleanupSettings } catch {} });
__vite_ssr_exportName__("ServerSettings", () => { try { return ServerSettings } catch {} });
__vite_ssr_exportName__("DEFAULT_SERVER_SETTINGS", () => { try { return DEFAULT_SERVER_SETTINGS } catch {} });
__vite_ssr_exportName__("providerInstanceConfigEnabledFlag", () => { try { return providerInstanceConfigEnabledFlag } catch {} });
__vite_ssr_exportName__("isUnconfiguredDefaultInstanceEnabled", () => { try { return isUnconfiguredDefaultInstanceEnabled } catch {} });
__vite_ssr_exportName__("resolveProviderInstanceEnabled", () => { try { return resolveProviderInstanceEnabled } catch {} });
__vite_ssr_exportName__("resolveProjectProviderInstanceEnabled", () => { try { return resolveProjectProviderInstanceEnabled } catch {} });
__vite_ssr_exportName__("globalIdleCompaction", () => { try { return globalIdleCompaction } catch {} });
__vite_ssr_exportName__("withIdleCompaction", () => { try { return withIdleCompaction } catch {} });
__vite_ssr_exportName__("readsIdleCompactionModes", () => { try { return readsIdleCompactionModes } catch {} });
__vite_ssr_exportName__("idleCompactionPatch", () => { try { return idleCompactionPatch } catch {} });
__vite_ssr_exportName__("resolveIdleCompaction", () => { try { return resolveIdleCompaction } catch {} });
__vite_ssr_exportName__("ServerSettingsOperation", () => { try { return ServerSettingsOperation } catch {} });
__vite_ssr_exportName__("ServerSettingsError", () => { try { return ServerSettingsError } catch {} });
__vite_ssr_exportName__("DEFAULT_UNIFIED_SETTINGS", () => { try { return DEFAULT_UNIFIED_SETTINGS } catch {} });
__vite_ssr_exportName__("ServerSettingsPatch", () => { try { return ServerSettingsPatch } catch {} });
__vite_ssr_exportName__("requiredScopesForServerSettingsPatch", () => { try { return requiredScopesForServerSettingsPatch } catch {} });
__vite_ssr_exportName__("requiredScopesForProjectMutation", () => { try { return requiredScopesForProjectMutation } catch {} });
__vite_ssr_exportName__("ClientSettingsPatch", () => { try { return ClientSettingsPatch } catch {} });
const __vite_ssr_import_0__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/device.ts", {"importedNames":["EasDeviceHostConfigs","SshDeviceHostConfigs"]});
const __vite_ssr_import_1__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/auth.ts", {"importedNames":["AuthOrchestrationOperateScope","AuthSettingsWriteScope","AuthProvidersManageScope"]});
const __vite_ssr_import_2__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/Effect.js");
const __vite_ssr_import_3__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/Option.js");
const __vite_ssr_import_4__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/Duration.js");
const __vite_ssr_import_5__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/Schema.js");
const __vite_ssr_import_6__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/SchemaTransformation.js");
const __vite_ssr_import_7__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/baseSchemas.ts", {"importedNames":["ForwardCompatibleNullable","ForwardCompatibleOptional","OmittedWhenNull","ProjectId","ThreadId","TrimmedNonEmptyString","TrimmedString"]});
const __vite_ssr_import_8__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/usageLimitSourceId.ts", {"importedNames":["UsageLimitSourceId"]});
const __vite_ssr_import_9__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/environment.ts", {"importedNames":["EnvironmentMachineKind","ThreadEnvMode","WorktreeSubmodules"]});
const __vite_ssr_import_10__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/keybindings.ts", {"importedNames":["KeybindingShortcut"]});
const __vite_ssr_import_11__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/model.ts", {"importedNames":["CustomModelSetting","DEFAULT_TEXT_GENERATION_MODEL","DEFAULT_TEXT_GENERATION_REASONING_EFFORT","ProviderOptionSelections"]});
const __vite_ssr_import_12__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/modelSelection.ts", {"importedNames":["ModelSelection"]});
const __vite_ssr_import_13__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/project.ts", {"importedNames":["ProjectScript"]});
const __vite_ssr_import_14__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/providerPolicy.ts", {"importedNames":["DEFAULT_RUNTIME_MODE","RuntimeMode"]});
const __vite_ssr_import_15__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/browserProfile.ts", {"importedNames":["BrowserProfile","BrowserProfileId","DEFAULT_BROWSER_PROFILE_ID"]});
const __vite_ssr_import_16__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/preview.ts", {"importedNames":["BrowserRecordingFrameRate","DEFAULT_BROWSER_RECORDING_FRAME_RATE","DEFAULT_PREVIEW_APPEARANCE","DEFAULT_PREVIEW_ZOOM_FACTOR","FILL_PREVIEW_VIEWPORT","PreviewAppearancePreference","PreviewViewportSetting","PreviewZoomFactor"]});
const __vite_ssr_import_17__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/providerInstance.ts", {"importedNames":["ProviderInstanceConfig","ProviderInstanceId","ProviderDriverKind"]});
const __vite_ssr_import_18__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/pullRequest.ts", {"importedNames":["PullRequestMergeMethod"]});
const __vite_ssr_import_19__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/preview.ts", {"importedNames":["BROWSER_RECORDING_FRAME_RATES","BrowserRecordingFrameRate","DEFAULT_BROWSER_RECORDING_FRAME_RATE"]});



















const TimestampFormat = __vite_ssr_import_5__.Literals([
	"locale",
	"12-hour",
	"24-hour"
]);
const DEFAULT_TIMESTAMP_FORMAT = "locale";
const DiffLayout = __vite_ssr_import_5__.Literals(["stacked", "split"]);
const DEFAULT_DIFF_LAYOUT = "stacked";
const SidebarProjectSortOrder = __vite_ssr_import_5__.Literals([
	"updated_at",
	"created_at",
	"manual"
]);
const DEFAULT_SIDEBAR_PROJECT_SORT_ORDER = "updated_at";
const SidebarThreadSortOrder = __vite_ssr_import_5__.Literals(["updated_at", "created_at"]);
const DEFAULT_SIDEBAR_THREAD_SORT_ORDER = "updated_at";
const SidebarProjectGroupingMode = __vite_ssr_import_5__.Literals([
	"repository",
	"repository_path",
	"separate"
]);
const DEFAULT_SIDEBAR_PROJECT_GROUPING_MODE = "repository";
const MIN_SIDEBAR_THREAD_PREVIEW_COUNT = 1;
const MAX_SIDEBAR_THREAD_PREVIEW_COUNT = 15;
const SidebarThreadPreviewCount = __vite_ssr_import_5__.Int.check(__vite_ssr_import_5__.isBetween({
	minimum: MIN_SIDEBAR_THREAD_PREVIEW_COUNT,
	maximum: MAX_SIDEBAR_THREAD_PREVIEW_COUNT
}));
const DEFAULT_SIDEBAR_THREAD_PREVIEW_COUNT = 6;
const MIN_SIDEBAR_AUTO_SETTLE_AFTER_DAYS = 1;
const MAX_SIDEBAR_AUTO_SETTLE_AFTER_DAYS = 90;
const SidebarAutoSettleAfterDays = __vite_ssr_import_5__.Number.check(__vite_ssr_import_5__.isBetween({
	minimum: MIN_SIDEBAR_AUTO_SETTLE_AFTER_DAYS,
	maximum: MAX_SIDEBAR_AUTO_SETTLE_AFTER_DAYS
}));
const DEFAULT_SIDEBAR_AUTO_SETTLE_AFTER_DAYS = 3;
const MIN_GLASS_OPACITY = 40;
const MAX_GLASS_OPACITY = 100;
const GlassOpacity = __vite_ssr_import_5__.Int.check(__vite_ssr_import_5__.isBetween({
	minimum: MIN_GLASS_OPACITY,
	maximum: MAX_GLASS_OPACITY
}));
const DEFAULT_GLASS_OPACITY = 80;
const MIN_APPEARANCE_CONTRAST = 50;
const MAX_APPEARANCE_CONTRAST = 200;
const AppearanceContrast = __vite_ssr_import_5__.Int.check(__vite_ssr_import_5__.isBetween({
	minimum: MIN_APPEARANCE_CONTRAST,
	maximum: MAX_APPEARANCE_CONTRAST
}));
const DEFAULT_APPEARANCE_CONTRAST = 100;
const MIN_PANEL_ANIMATION_DURATION_MS = 0;
const MAX_PANEL_ANIMATION_DURATION_MS = 400;
const PanelAnimationDurationMs = __vite_ssr_import_5__.Int.check(__vite_ssr_import_5__.isBetween({
	minimum: MIN_PANEL_ANIMATION_DURATION_MS,
	maximum: MAX_PANEL_ANIMATION_DURATION_MS
}));
const DEFAULT_PANEL_ANIMATION_DURATION_MS = 0;
const MIN_INTERFACE_FONT_SIZE = 12;
const MAX_INTERFACE_FONT_SIZE = 20;
const InterfaceFontSize = __vite_ssr_import_5__.Int.check(__vite_ssr_import_5__.isBetween({
	minimum: MIN_INTERFACE_FONT_SIZE,
	maximum: MAX_INTERFACE_FONT_SIZE
}));
const DEFAULT_INTERFACE_FONT_SIZE = 16;
const MIN_PROMPT_FONT_SIZE = 12;
const MAX_PROMPT_FONT_SIZE = 20;
const PromptFontSize = __vite_ssr_import_5__.Int.check(__vite_ssr_import_5__.isBetween({
	minimum: MIN_PROMPT_FONT_SIZE,
	maximum: MAX_PROMPT_FONT_SIZE
}));
const DEFAULT_PROMPT_FONT_SIZE = 14;
const MIN_CODE_FONT_SIZE = 10;
const MAX_CODE_FONT_SIZE = 18;
const CodeFontSize = __vite_ssr_import_5__.Int.check(__vite_ssr_import_5__.isBetween({
	minimum: MIN_CODE_FONT_SIZE,
	maximum: MAX_CODE_FONT_SIZE
}));
const DEFAULT_CODE_FONT_SIZE = 13;
const MIN_TERMINAL_FONT_SIZE = 8;
const MAX_TERMINAL_FONT_SIZE = 20;
const TerminalFontSize = __vite_ssr_import_5__.Int.check(__vite_ssr_import_5__.isBetween({
	minimum: MIN_TERMINAL_FONT_SIZE,
	maximum: MAX_TERMINAL_FONT_SIZE
}));
const DEFAULT_TERMINAL_FONT_SIZE = 12;
const EnvironmentIdentificationMode = __vite_ssr_import_5__.Literals([
	"artwork",
	"pill",
	"none"
]);
const DEFAULT_ENVIRONMENT_IDENTIFICATION_MODE = "artwork";
const SnapShotKeyChord = __vite_ssr_import_10__.KeybindingShortcut.check(__vite_ssr_import_5__.makeFilter((shortcut) => shortcut.metaKey || shortcut.ctrlKey || shortcut.shiftKey || shortcut.altKey || shortcut.modKey || "Snapshot shortcut requires a modifier."));
const SNAP_SHOT_MODIFIERS = [
	"shift",
	"meta",
	"control",
	"alt"
];
const SnapShotModifier = __vite_ssr_import_5__.Literals(SNAP_SHOT_MODIFIERS);
const SnapShotShortcut = __vite_ssr_import_5__.Union([
	__vite_ssr_import_5__.Struct({ kind: __vite_ssr_import_5__.Literal("both-shift-keys") }),
	__vite_ssr_import_5__.Struct({
		kind: __vite_ssr_import_5__.Literal("modifier-pair"),
		modifier: SnapShotModifier
	}),
	SnapShotKeyChord
]);
const SnapShotSound = __vite_ssr_import_5__.Literals(["soft-pop", "camera-shutter"]);
const DEFAULT_SNAP_SHOT_SOUND = "soft-pop";
function isModifierPairShortcut(shortcut) {
	return "kind" in shortcut;
};
function snapShotShortcutModifierPair(shortcut) {
	return shortcut.kind === "both-shift-keys" ? "shift" : shortcut.modifier;
};
const APPLE_MODIFIER_LABELS = {
	shift: "Shift",
	meta: "Command",
	control: "Control",
	alt: "Option"
};
const OTHER_MODIFIER_LABELS = {
	shift: "Shift",
	meta: "Super",
	control: "Ctrl",
	alt: "Alt"
};
function snapShotModifierPairLabel(modifier, apple) {
	const label = (apple ? APPLE_MODIFIER_LABELS : OTHER_MODIFIER_LABELS)[modifier];
	return `${label} + ${label}`;
};
const DEFAULT_SNAP_SHOT_SHORTCUT = { kind: "both-shift-keys" };
const NotificationMode = __vite_ssr_import_5__.Literals([
	"off",
	"notifications",
	"sound",
	"notifications-and-sound"
]);
const QuitConfirmationMode = __vite_ssr_import_5__.Literals([
	"direct",
	"hold",
	"double-click"
]);
const DEFAULT_QUIT_CONFIRMATION_MODE = "hold";
const LegacyConfirmQuit = __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.decodeTo(QuitConfirmationMode, __vite_ssr_import_6__.transform({
	decode: (confirmQuit) => confirmQuit ? "hold" : "direct",
	encode: (mode) => mode === "hold"
})));
const QuitConfirmationModeSetting = __vite_ssr_import_5__.Union([QuitConfirmationMode, LegacyConfirmQuit]);
const FontFamilyPreference = __vite_ssr_import_5__.String.check(__vite_ssr_import_5__.isMaxLength(200));
/** Clients apply each environment theme set once; later local choices persist until the next set. Empty clears it. */
const DefaultThemePreference = __vite_ssr_import_5__.String.check(__vite_ssr_import_5__.isMaxLength(64));
const DEFAULT_BROWSER_VIEWPORT = __vite_ssr_import_16__.FILL_PREVIEW_VIEWPORT;
const DEFAULT_BROWSER_AUTO_SHOW_FLOATING_PREVIEW = true;

const BrowserLinkTarget = __vite_ssr_import_5__.Literals(["system", "app"]);
const DEFAULT_BROWSER_LINK_TARGET = "system";
/**
* What the address bar searches with when the input is not an address.
* "custom" uses `browserCustomSearchUrl`, a template with `%s` for the query.
*/
const BrowserSearchEngine = __vite_ssr_import_5__.Literals([
	"duckduckgo",
	"google",
	"bing",
	"brave",
	"kagi",
	"ecosia",
	"custom"
]);
const DEFAULT_BROWSER_SEARCH_ENGINE = "duckduckgo";
const BROWSER_CUSTOM_SEARCH_URL_MAX_LENGTH = 2048;
const BrowserCustomSearchUrl = __vite_ssr_import_5__.String.check(__vite_ssr_import_5__.isMaxLength(BROWSER_CUSTOM_SEARCH_URL_MAX_LENGTH));
const LoadBalancingWeights = __vite_ssr_import_5__.Record((0,__vite_ssr_import_7__.TrimmedNonEmptyString), __vite_ssr_import_5__.Int.check(__vite_ssr_import_5__.isBetween({
	minimum: 0,
	maximum: 100
})));
const DiffColorScheme = __vite_ssr_import_5__.Literals(["red-green", "blue-orange"]);
const ChatWidth = __vite_ssr_import_5__.Literals([
	"comfortable",
	"wide",
	"full"
]);
const ModelFavorite = __vite_ssr_import_5__.Struct({
	provider: __vite_ssr_import_17__.ProviderInstanceId,
	model: __vite_ssr_import_7__.TrimmedNonEmptyString
});
const ModelFavorites = __vite_ssr_import_5__.Array(ModelFavorite);
const ProviderModelPreferences = __vite_ssr_import_5__.Record((0,__vite_ssr_import_17__.ProviderInstanceId), __vite_ssr_import_5__.Struct({
	hiddenModels: __vite_ssr_import_5__.Array(__vite_ssr_import_5__.String).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed([]))),
	modelOrder: __vite_ssr_import_5__.Array(__vite_ssr_import_5__.String).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed([])))
}));
const ClientSettingsSchema = __vite_ssr_import_5__.Struct({
	notificationMode: NotificationMode.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("off"))),
	inAppNotificationsEnabled: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	diffColorScheme: DiffColorScheme.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("red-green"))),
	chatWidth: ChatWidth.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("comfortable"))),
	loadBalancingEnabled: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	loadBalancingWeights: LoadBalancingWeights.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed({}))),
	appearanceContrast: AppearanceContrast.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_APPEARANCE_CONTRAST))),
	// Zero avoids per-frame layout work from width/height transitions.
	panelAnimationDurationMs: PanelAnimationDurationMs.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_PANEL_ANIMATION_DURATION_MS))),
	browserDefaultViewport: __vite_ssr_import_16__.PreviewViewportSetting.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_BROWSER_VIEWPORT))),
	browserDefaultZoomFactor: __vite_ssr_import_16__.PreviewZoomFactor.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed((0,__vite_ssr_import_16__.DEFAULT_PREVIEW_ZOOM_FACTOR)))),
	browserDefaultAppearance: __vite_ssr_import_16__.PreviewAppearancePreference.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed((0,__vite_ssr_import_16__.DEFAULT_PREVIEW_APPEARANCE)))),
	browserRecordingFrameRate: __vite_ssr_import_16__.BrowserRecordingFrameRate.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed((0,__vite_ssr_import_16__.DEFAULT_BROWSER_RECORDING_FRAME_RATE)))),
	browserRecordingShowKeyPresses: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	browserRecordingShowMousePresses: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	browserLinkTarget: BrowserLinkTarget.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_BROWSER_LINK_TARGET))),
	browserSearchEngine: BrowserSearchEngine.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_BROWSER_SEARCH_ENGINE))),
	// Kept when the engine is switched away from "custom" so switching back restores it.
	browserCustomSearchUrl: BrowserCustomSearchUrl.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(""))),
	browserAutoShowFloatingPreview: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_BROWSER_AUTO_SHOW_FLOATING_PREVIEW))),
	browserProfiles: __vite_ssr_import_5__.Array((0,__vite_ssr_import_15__.BrowserProfile)).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed([]))),
	browserDefaultProfileId: __vite_ssr_import_15__.BrowserProfileId.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed((0,__vite_ssr_import_15__.DEFAULT_BROWSER_PROFILE_ID)))),
	confirmQuit: QuitConfirmationModeSetting.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_QUIT_CONFIRMATION_MODE))),
	confirmThreadArchive: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	confirmThreadDelete: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(true))),
	confirmThreadUnpin: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	dismissedProviderUpdateNotificationKeys: __vite_ssr_import_5__.Array((0,__vite_ssr_import_7__.TrimmedNonEmptyString)).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed([]))),
	diffFilesCollapsed: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(true))),
	diffIgnoreWhitespace: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(true))),
	diffLayout: DiffLayout.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_DIFF_LAYOUT))),
	environmentIdentificationMode: EnvironmentIdentificationMode.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_ENVIRONMENT_IDENTIFICATION_MODE))),
	glassOpacity: GlassOpacity.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_GLASS_OPACITY))),
	fontSizeInterface: InterfaceFontSize.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_INTERFACE_FONT_SIZE))),
	fontSizePrompt: PromptFontSize.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_PROMPT_FONT_SIZE))),
	fontSizeCode: CodeFontSize.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_CODE_FONT_SIZE))),
	fontSizeTerminal: TerminalFontSize.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_TERMINAL_FONT_SIZE))),
	fontFamilyCode: FontFamilyPreference.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(""))),
	fontFamilyComposer: FontFamilyPreference.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(""))),
	fontFamilySans: FontFamilyPreference.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(""))),
	fontFamilyTerminal: FontFamilyPreference.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(""))),
	fontSmoothing: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(true))),
	// Older installs also decode to null; onboarding must additionally require an empty workspace.
	onboardingCompletedAt: __vite_ssr_import_5__.NullOr(__vite_ssr_import_5__.String).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(null))),
	persistComposerContextStrip: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	favorites: ModelFavorites.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed([]))),
	providerModelPreferences: ProviderModelPreferences.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed({}))),
	pullRequestMergeMethodOverrides: __vite_ssr_import_5__.Record((0,__vite_ssr_import_7__.TrimmedNonEmptyString), (0,__vite_ssr_import_18__.PullRequestMergeMethod)).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed({}))),
	pullRequestLinksOpenInApp: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(true))),
	planModeEnabled: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	contextWindowMeterEnabled: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	composerCollapseOnScroll: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(true))),
	composerRichTextEnabled: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(true))),
	sendShortcut: __vite_ssr_import_5__.Literals([
		"enter",
		"mod-enter-multiline",
		"mod-enter"
	]).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("enter"))),
	followUpBehavior: __vite_ssr_import_5__.Literals(["queue", "steer"]).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("queue"))),
	proactivePanelsEnabled: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	showSkillsInSlashMenu: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(true))),
	legacySidebarEnabled: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	sidebarWorkingShelfEnabled: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	sidebarProjectGroupingMode: SidebarProjectGroupingMode.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_SIDEBAR_PROJECT_GROUPING_MODE))),
	sidebarProjectGroupingOverrides: __vite_ssr_import_5__.Record((0,__vite_ssr_import_7__.TrimmedNonEmptyString), SidebarProjectGroupingMode).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed({}))),
	sidebarProjectSortOrder: SidebarProjectSortOrder.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_SIDEBAR_PROJECT_SORT_ORDER))),
	sidebarThreadSortOrder: SidebarThreadSortOrder.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_SIDEBAR_THREAD_SORT_ORDER))),
	sidebarThreadPreviewCount: SidebarThreadPreviewCount.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_SIDEBAR_THREAD_PREVIEW_COUNT))),
	timestampFormat: TimestampFormat.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_TIMESTAMP_FORMAT))),
	snapShotEnabled: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	snapShotIncludeAccessibility: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(true))),
	snapShotShortcut: SnapShotShortcut.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_SNAP_SHOT_SHORTCUT))),
	snapShotPlaySound: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(true))),
	snapShotSound: SnapShotSound.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_SNAP_SHOT_SOUND))),
	snapShotFlash: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(true))),
	snapShotAnimations: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(true))),
	wordWrap: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(true))),
	// Opt-in TeX typesetting in rendered Markdown. Off keeps math parsing and
	// KaTeX out of the render path entirely.
	mathRenderingEnabled: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false)))
});
const DEFAULT_CLIENT_SETTINGS = __vite_ssr_import_5__.decodeSync(ClientSettingsSchema)({});
const UsageModelTokenPrice = __vite_ssr_import_5__.Number.check(__vite_ssr_import_5__.isFinite(), __vite_ssr_import_5__.isGreaterThanOrEqualTo(0));
/** Omitted cache rates use the input rate. */
const UsageModelPriceOverride = __vite_ssr_import_5__.Struct({
	inputCostPerMillionTokens: UsageModelTokenPrice,
	outputCostPerMillionTokens: UsageModelTokenPrice,
	cacheReadCostPerMillionTokens: __vite_ssr_import_5__.optionalKey(UsageModelTokenPrice),
	cacheWriteCostPerMillionTokens: __vite_ssr_import_5__.optionalKey(UsageModelTokenPrice)
});
const makeBinaryPathSetting = (fallback) => __vite_ssr_import_7__.TrimmedString.pipe(__vite_ssr_import_5__.decodeTo(__vite_ssr_import_5__.String, __vite_ssr_import_6__.transformEffect({
	decode: (value) => __vite_ssr_import_2__.succeed(value || fallback),
	encode: (value) => __vite_ssr_import_2__.succeed(value)
})), __vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(fallback)));
function secretSettingsFields(schema) {
	return Object.entries(schema.fields).flatMap(([field, fieldSchema]) => {
		return isSecretSetting(fieldSchema) ? [field] : [];
	});
};
function secretSetting(schema) {
	return schema.annotateKey({ settingsSecret: true });
};
/** A masked form field is a credential too, so none is saved or sent to clients as plain text. */
function isSecretSetting(schema) {
	const annotations = __vite_ssr_import_5__.resolveAnnotationsKey(schema) ?? __vite_ssr_import_5__.resolveAnnotations(schema);
	return annotations?.settingsSecret === true || annotations?.providerSettingsForm?.control === "password";
};
function makeProviderSettingsSchema(fields, options) {
	return __vite_ssr_import_5__.Struct(fields).pipe(__vite_ssr_import_5__.annotate({ providerSettingsFormSchema: options?.order === undefined ? undefined : { order: options.order } }));
};
const CodexSettings = makeProviderSettingsSchema({
	setupMode: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Literals(["managed", "existing"])).pipe(__vite_ssr_import_5__.annotateKey({ providerSettingsForm: { hidden: true } })),
	enabled: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(true)), __vite_ssr_import_5__.annotateKey({ providerSettingsForm: { hidden: true } })),
	binaryPath: makeBinaryPathSetting("codex").pipe(__vite_ssr_import_5__.annotateKey({
		title: "Binary path",
		description: "Path to the Codex binary used by this instance.",
		providerSettingsForm: {
			placeholder: "codex",
			clearWhenEmpty: "omit"
		}
	})),
	homePath: __vite_ssr_import_7__.TrimmedString.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("")), __vite_ssr_import_5__.annotateKey({
		title: "CODEX_HOME path",
		description: "Custom Codex home and config directory.",
		providerSettingsForm: {
			placeholder: "~/.codex",
			clearWhenEmpty: "omit"
		}
	})),
	shadowHomePath: __vite_ssr_import_7__.TrimmedString.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("")), __vite_ssr_import_5__.annotateKey({
		title: "Shadow home path",
		description: "Account-specific Codex home. Keeps auth.json separate while sharing state from CODEX_HOME.",
		providerSettingsForm: {
			placeholder: "~/.codex-t3/personal",
			clearWhenEmpty: "omit"
		}
	})),
	launchArgs: __vite_ssr_import_7__.TrimmedString.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("")), __vite_ssr_import_5__.annotateKey({
		title: "Launch arguments",
		description: "Additional CLI arguments passed to codex app-server on session start."
	})),
	customModels: __vite_ssr_import_5__.Array((0,__vite_ssr_import_11__.CustomModelSetting)).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed([])), __vite_ssr_import_5__.annotateKey({ providerSettingsForm: { hidden: true } }))
}, { order: [
	"binaryPath",
	"homePath",
	"shadowHomePath",
	"launchArgs"
] });
const CLAUDE_AUTO_COMPACT_WINDOW_PATTERN = /^(?:|[1-9]\d{5}|1000000)$/;
const IDLE_COMPACTION_MODES = [
	{
		value: "onReturn",
		label: "When you return"
	},
	{
		value: "beforeCacheExpires",
		label: "Before the cache expires (beta)"
	},
	{
		value: "off",
		label: "Never"
	}
];
const IdleCompactionMode = __vite_ssr_import_5__.Literals(IDLE_COMPACTION_MODES.map((mode) => mode.value));
// Shipped clients reject the whole server config unless `compactIdleThreads` is boolean.
// Keep the mode in `idleCompaction`, but accept strings from older servers.
const LegacyCompactIdleThreads = __vite_ssr_import_5__.Union([__vite_ssr_import_5__.Boolean, IdleCompactionMode]);
const INSTANCE_IDLE_COMPACTION_MODES = [{
	value: "default",
	label: "Use default"
}, ...IDLE_COMPACTION_MODES];
const InstanceIdleCompaction = __vite_ssr_import_5__.Literals(INSTANCE_IDLE_COMPACTION_MODES.map((mode) => mode.value));
const ClaudeSettings = makeProviderSettingsSchema({
	enabled: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(true)), __vite_ssr_import_5__.annotateKey({ providerSettingsForm: { hidden: true } })),
	binaryPath: makeBinaryPathSetting("claude").pipe(__vite_ssr_import_5__.annotateKey({
		title: "Binary path",
		description: "Path to the Claude binary used by this instance.",
		providerSettingsForm: {
			placeholder: "claude",
			clearWhenEmpty: "omit"
		}
	})),
	homePath: __vite_ssr_import_7__.TrimmedString.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("")), __vite_ssr_import_5__.annotateKey({
		title: "CLAUDE_CONFIG_DIR path",
		description: "Custom Claude home and config directory. Keeps .claude.json and .claude separate.",
		providerSettingsForm: {
			placeholder: "~/.claude",
			clearWhenEmpty: "omit"
		}
	})),
	customModels: __vite_ssr_import_5__.Array((0,__vite_ssr_import_11__.CustomModelSetting)).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed([])), __vite_ssr_import_5__.annotateKey({ providerSettingsForm: { hidden: true } })),
	launchArgs: __vite_ssr_import_5__.String.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("")), __vite_ssr_import_5__.annotateKey({
		title: "Launch arguments",
		description: "Additional CLI arguments passed on session start.",
		providerSettingsForm: {
			placeholder: "e.g. --chrome",
			clearWhenEmpty: "omit"
		}
	})),
	autoCompactWindow: __vite_ssr_import_7__.TrimmedString.check(__vite_ssr_import_5__.isPattern(CLAUDE_AUTO_COMPACT_WINDOW_PATTERN)).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("")), __vite_ssr_import_5__.annotateKey({
		title: "Auto-compact after",
		description: "Compact after 100,000 to 1,000,000 tokens. Leave empty to use Claude's default.",
		providerSettingsForm: {
			placeholder: "e.g. 300000",
			clearWhenEmpty: "omit"
		}
	})),
	idleCompaction: InstanceIdleCompaction.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("default")), __vite_ssr_import_5__.annotateKey({
		title: "Compact idle threads",
		description: "When to compact an idle thread over 200,000 tokens: after you return, just before its prompt cache expires, or never. Overrides the default in General settings.",
		providerSettingsForm: {
			control: "select",
			options: INSTANCE_IDLE_COMPACTION_MODES,
			clearWhenEmpty: "omit"
		}
	}))
}, { order: [
	"binaryPath",
	"homePath",
	"autoCompactWindow",
	"idleCompaction",
	"launchArgs"
] });
const ANTIGRAVITY_AUTH_METHODS = [
	{
		value: "oauth-personal",
		label: "Google account"
	},
	{
		value: "oauth-business",
		label: "Gemini Enterprise"
	},
	{
		value: "gemini-api-key",
		label: "Gemini API key"
	},
	{
		value: "agent-platform",
		label: "Agent Platform (Vertex AI)"
	}
];
const AntigravityAuthMethod = __vite_ssr_import_5__.Literals(ANTIGRAVITY_AUTH_METHODS.map((method) => method.value));
const AntigravitySettings = makeProviderSettingsSchema({
	enabled: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false)), __vite_ssr_import_5__.annotateKey({ providerSettingsForm: { hidden: true } })),
	authMethod: AntigravityAuthMethod.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("oauth-personal")), __vite_ssr_import_5__.annotateKey({
		title: "Sign-in method",
		description: "Google accounts use your subscription; API keys and Agent Platform bill usage.",
		providerSettingsForm: {
			control: "select",
			options: ANTIGRAVITY_AUTH_METHODS,
			clearWhenEmpty: "omit"
		}
	})),
	apiKey: __vite_ssr_import_7__.TrimmedString.pipe(secretSetting, __vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("")), __vite_ssr_import_5__.annotateKey({
		title: "API key",
		description: "Gemini or Vertex AI express key. Stored separately on the host.",
		providerSettingsForm: {
			control: "password",
			placeholder: "Optional",
			clearWhenEmpty: "omit"
		}
	})),
	gcpProject: __vite_ssr_import_7__.TrimmedString.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("")), __vite_ssr_import_5__.annotateKey({
		title: "GCP project",
		description: "Required for Gemini Enterprise. Agent Platform uses it when no API key is set.",
		providerSettingsForm: {
			placeholder: "my-project-id",
			clearWhenEmpty: "omit"
		}
	})),
	gcpLocation: __vite_ssr_import_7__.TrimmedString.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("")), __vite_ssr_import_5__.annotateKey({
		title: "GCP location",
		description: "Region for Gemini Enterprise or Agent Platform.",
		providerSettingsForm: {
			placeholder: "us-central1",
			clearWhenEmpty: "omit"
		}
	})),
	binaryPath: __vite_ssr_import_7__.TrimmedString.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("")), __vite_ssr_import_5__.annotateKey({
		title: "Binary path",
		description: "Custom ACP executable. Leave empty to select automatically.",
		providerSettingsForm: {
			placeholder: "Automatic",
			clearWhenEmpty: "persist"
		}
	})),
	customModels: __vite_ssr_import_5__.Array((0,__vite_ssr_import_11__.CustomModelSetting)).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed([])), __vite_ssr_import_5__.annotateKey({ providerSettingsForm: { hidden: true } }))
}, { order: [
	"authMethod",
	"apiKey",
	"gcpProject",
	"gcpLocation",
	"binaryPath"
] });
const UsageLimitSourceConfig = __vite_ssr_import_5__.Struct({
	kind: __vite_ssr_import_5__.Literal("cliproxy"),
	label: __vite_ssr_import_5__.optional((0,__vite_ssr_import_7__.TrimmedNonEmptyString)),
	url: __vite_ssr_import_7__.TrimmedNonEmptyString,
	managementKey: __vite_ssr_import_7__.TrimmedString.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("")), secretSetting),
	enabled: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(true)))
});
const SourceControlHostSettings = __vite_ssr_import_5__.Record(__vite_ssr_import_5__.String, __vite_ssr_import_5__.Unknown);
const ObservabilitySettings = __vite_ssr_import_5__.Struct({
	otlpTracesUrl: __vite_ssr_import_7__.TrimmedString.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(""))),
	otlpMetricsUrl: __vite_ssr_import_7__.TrimmedString.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(""))),
	otlpLogsUrl: __vite_ssr_import_7__.TrimmedString.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("")))
});
const SourceControlWritingStyleMode = __vite_ssr_import_5__.Literals([
	"repo_conventions",
	"conventional_commits",
	"custom"
]);
const SourceControlWritingStyleSettings = __vite_ssr_import_5__.Struct({
	mode: SourceControlWritingStyleMode.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("repo_conventions"))),
	customInstructions: __vite_ssr_import_7__.TrimmedString.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(""))),
	followChangeRequestTemplates: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(true)))
});
const LegacySourceControlWritingStyle = __vite_ssr_import_7__.TrimmedString.pipe(__vite_ssr_import_5__.decodeTo(__vite_ssr_import_5__.toType(SourceControlWritingStyleSettings), __vite_ssr_import_6__.transform({
	decode: (value) => ({
		mode: value.length > 0 ? "custom" : "repo_conventions",
		customInstructions: value,
		followChangeRequestTemplates: true
	}),
	encode: (value) => value.customInstructions
})));
// The struct member comes first so encoding uses its defaulted fields: the server strips
// default sub-fields before writing settings.json, and a toType target would reject them.
const SourceControlWritingStyleSetting = __vite_ssr_import_5__.Union([SourceControlWritingStyleSettings, LegacySourceControlWritingStyle]);
const BranchNamingMode = __vite_ssr_import_5__.Literals([
	"static",
	"semantic",
	"custom"
]);
const DEFAULT_AUTOMATIC_GIT_FETCH_INTERVAL = __vite_ssr_import_4__.seconds(30);
const DEFAULT_PROVIDER_HEALTH_REFRESH_INTERVAL = __vite_ssr_import_4__.minutes(5);
const BackgroundActivityProfile = __vite_ssr_import_5__.Literals([
	"balanced",
	"performance",
	"battery-saver"
]);
const DEFAULT_BACKGROUND_ACTIVITY_PROFILE = "balanced";
const BackgroundActivityProfileSelection = __vite_ssr_import_5__.Literals([
	"balanced",
	"performance",
	"battery-saver",
	"custom"
]);
const BackgroundActivityOverrides = __vite_ssr_import_5__.Struct({
	automaticGitFetchInterval: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.DurationFromMillis),
	providerHealthRefreshInterval: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.DurationFromMillis),
	hostPowerMonitorActiveInterval: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.DurationFromMillis),
	hostPowerMonitorIdleInterval: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.DurationFromMillis),
	idleClientTtl: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.DurationFromMillis),
	pauseWhenHostLocked: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	pauseWhenHostLowPower: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	pauseWhenClientLowPower: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	pauseWhenOnBattery: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean)
});
const BackgroundActivitySettings = __vite_ssr_import_5__.Struct({
	schemaVersion: __vite_ssr_import_5__.Literal(1).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(1))),
	profile: BackgroundActivityProfileSelection.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_BACKGROUND_ACTIVITY_PROFILE))),
	baseProfile: __vite_ssr_import_5__.optionalKey(BackgroundActivityProfile),
	overrides: BackgroundActivityOverrides.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed({})))
}).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed({})));
const ResponseStreamingMode = __vite_ssr_import_5__.Literals(["turn", "paragraph"]);
const StorageRetentionDays = __vite_ssr_import_5__.NullOr(__vite_ssr_import_5__.Int.check(__vite_ssr_import_5__.isBetween({
	minimum: 1,
	maximum: 3650
})));
const SettledWorktreeRetentionDays = __vite_ssr_import_5__.NullOr(__vite_ssr_import_5__.Int.check(__vite_ssr_import_5__.isBetween({
	minimum: 0,
	maximum: 3650
})));
const WorktreeKeepWhen = __vite_ssr_import_5__.Literals([
	"any-local-files",
	"uncommitted-changes",
	"tracked-changes"
]);
const WorktreeCleanupRules = __vite_ssr_import_5__.Struct({
	worktreeKeepWhen: WorktreeKeepWhen.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("uncommitted-changes"))),
	worktreeAfterDays: StorageRetentionDays,
	worktreeSettledAfterDays: SettledWorktreeRetentionDays.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(null))),
	worktreeOnMerge: __vite_ssr_import_5__.Boolean,
	worktreeOnDelete: __vite_ssr_import_5__.Boolean,
	worktreeUnchanged: __vite_ssr_import_5__.Boolean
});
const WorktreeCleanup = __vite_ssr_import_5__.NullOr(__vite_ssr_import_5__.Union([__vite_ssr_import_5__.Struct({ mode: __vite_ssr_import_5__.Literal("off") }), __vite_ssr_import_5__.Struct({
	mode: __vite_ssr_import_5__.Literal("custom"),
	rules: WorktreeCleanupRules
})]));
const PROJECT_SCOPED_SERVER_SETTING_KEYS = [
	"worktreeCleanup",
	"defaultModelSelection",
	"defaultRuntimeMode",
	"defaultThreadEnvMode",
	"newWorktreesStartFromOrigin",
	"worktreeSubmodules",
	"defaultAutoPull",
	"defaultProjectScripts",
	"enableAgentBrowserAccess",
	"enableAgentDeviceAccess",
	"textGenerationModelSelection",
	"threadTitleInstructions",
	"sourceControlWriterModelSelection",
	"reviewGuideModelSelection",
	"reviewGuideInstructions",
	"sourceControlWritingStyle",
	"removeAgentCreditsOnMerge",
	"branchNamingMode",
	"branchNamePrefix",
	"branchNameInstructions",
	"pullRequestMergeMethod",
	"sidebarAutoSettleOnMerge",
	"sidebarAutoSettleAfterDays",
	"sidebarAutoSettleKeepPullRequests",
	"continueThreadsAfterServerUpdate",
	"responseStreamingMode"
];
const ProjectProviderInstanceOverride = __vite_ssr_import_5__.Struct({ enabled: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean) });
/** Absent keys inherit; null is a value for nullable settings.
* providerInstances overrides fields per instance; other keys replace the whole setting. */
const ProjectSettingsOverrides = __vite_ssr_import_5__.Struct({
	worktreeCleanup: __vite_ssr_import_5__.optionalKey(WorktreeCleanup),
	defaultModelSelection: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.NullOr((0,__vite_ssr_import_12__.ModelSelection))),
	defaultRuntimeMode: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_14__.RuntimeMode)),
	defaultThreadEnvMode: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_9__.ThreadEnvMode)),
	newWorktreesStartFromOrigin: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	worktreeSubmodules: (0,__vite_ssr_import_7__.ForwardCompatibleOptional)((0,__vite_ssr_import_9__.WorktreeSubmodules)),
	defaultAutoPull: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	defaultProjectScripts: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Array((0,__vite_ssr_import_13__.ProjectScript))),
	enableAgentBrowserAccess: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	enableAgentDeviceAccess: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	textGenerationModelSelection: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_12__.ModelSelection)),
	threadTitleInstructions: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_7__.TrimmedString)),
	sourceControlWriterModelSelection: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.NullOr((0,__vite_ssr_import_12__.ModelSelection))),
	reviewGuideModelSelection: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.NullOr((0,__vite_ssr_import_12__.ModelSelection))),
	reviewGuideInstructions: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_7__.TrimmedString)),
	sourceControlWritingStyle: __vite_ssr_import_5__.optionalKey(SourceControlWritingStyleSetting),
	removeAgentCreditsOnMerge: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	branchNamingMode: __vite_ssr_import_5__.optionalKey(BranchNamingMode),
	branchNamePrefix: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_7__.TrimmedString)),
	branchNameInstructions: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_7__.TrimmedString)),
	pullRequestMergeMethod: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.NullOr((0,__vite_ssr_import_18__.PullRequestMergeMethod))),
	sidebarAutoSettleOnMerge: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	sidebarAutoSettleAfterDays: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.NullOr(SidebarAutoSettleAfterDays)),
	sidebarAutoSettleKeepPullRequests: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	continueThreadsAfterServerUpdate: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	responseStreamingMode: __vite_ssr_import_5__.optionalKey(ResponseStreamingMode),
	providerInstances: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Record((0,__vite_ssr_import_17__.ProviderInstanceId), ProjectProviderInstanceOverride))
});
/** True if null stores an override; otherwise null removes it. */
function isNullableProjectSettingsOverride(key) {
	return NULLABLE_PROJECT_SETTINGS_OVERRIDES.has(key);
};
const NULLABLE_PROJECT_SETTINGS_OVERRIDES = new Set([
	"defaultModelSelection",
	"sourceControlWriterModelSelection",
	"reviewGuideModelSelection",
	"pullRequestMergeMethod",
	"sidebarAutoSettleAfterDays"
]);
/** Reclaimable bytes from which the offline `t3 doctor` repair is worth suggesting. */
const DATABASE_COMPACTION_RECOMMENDED_BYTES = 1024 ** 3;
const DatabaseStorageStatus = __vite_ssr_import_5__.Struct({
	databaseBytes: __vite_ssr_import_5__.Number,
	/** Free pages inside the file that an offline VACUUM (or incremental auto_vacuum) returns to disk. */
	reclaimableBytes: __vite_ssr_import_5__.Number,
	/** False on databases created before incremental auto_vacuum; `t3 doctor` converts them. */
	incrementalVacuumEnabled: __vite_ssr_import_5__.Boolean,
	/** Run on the host while offline. */
	compactCommand: __vite_ssr_import_5__.String
});
function shouldRecommendDatabaseCompaction(status) {
	return !status.incrementalVacuumEnabled && status.reclaimableBytes >= DATABASE_COMPACTION_RECOMMENDED_BYTES;
};
const StorageCleanupReportEntry = __vite_ssr_import_5__.Struct({
	kind: __vite_ssr_import_5__.Literals([
		"worktree",
		"browser-artifacts",
		"logs"
	]),
	outcome: __vite_ssr_import_5__.Literals([
		"removed",
		"kept",
		"failed"
	]),
	reason: __vite_ssr_import_5__.String,
	path: __vite_ssr_import_5__.NullOr(__vite_ssr_import_5__.String),
	projectPath: __vite_ssr_import_5__.NullOr(__vite_ssr_import_5__.String).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(null))),
	threadId: __vite_ssr_import_5__.NullOr((0,__vite_ssr_import_7__.ThreadId)),
	threadTitle: __vite_ssr_import_5__.NullOr(__vite_ssr_import_5__.String),
	bytes: __vite_ssr_import_5__.NullOr(__vite_ssr_import_5__.Number).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(null))),
	files: __vite_ssr_import_5__.NullOr(__vite_ssr_import_5__.Number).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(null)))
});
const StorageCleanupReport = __vite_ssr_import_5__.Struct({
	trigger: __vite_ssr_import_5__.Literals(["automatic", "manual"]),
	startedAt: __vite_ssr_import_5__.String,
	finishedAt: __vite_ssr_import_5__.String,
	entries: __vite_ssr_import_5__.Array(StorageCleanupReportEntry),
	counts: __vite_ssr_import_5__.Struct({
		removed: __vite_ssr_import_5__.Number,
		kept: __vite_ssr_import_5__.Number,
		failed: __vite_ssr_import_5__.Number
	}),
	omittedCount: __vite_ssr_import_5__.Number,
	bytesFreed: __vite_ssr_import_5__.Number.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(0)))
});
const StorageCleanupSettings = __vite_ssr_import_5__.Struct({
	worktreeKeepWhen: WorktreeKeepWhen.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("uncommitted-changes"))),
	worktreeAfterDays: StorageRetentionDays.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(null))),
	worktreeSettledAfterDays: SettledWorktreeRetentionDays.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(null))),
	worktreeOnMerge: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	worktreeOnDelete: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	worktreeUnchanged: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	browserArtifactsAfterDays: StorageRetentionDays.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(null))),
	logsAfterDays: StorageRetentionDays.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(null)))
});
const ServerSettings = __vite_ssr_import_5__.Struct({
	// Null means unmigrated; empty is authoritative and must not resurrect cleared preferences.
	favorites: __vite_ssr_import_5__.NullOr(ModelFavorites).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(null))),
	providerModelPreferences: __vite_ssr_import_5__.NullOr(ProviderModelPreferences).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(null))),
	worktreeCleanup: WorktreeCleanup.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(null))),
	storageCleanup: StorageCleanupSettings.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(__vite_ssr_import_5__.decodeSync(StorageCleanupSettings)({})))),
	worktreesDirectory: __vite_ssr_import_7__.TrimmedString.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(""))),
	/** Server-maintained history keeps old worktrees eligible for cleanup and review diffs. */
	previousWorktreesDirectories: __vite_ssr_import_5__.Array((0,__vite_ssr_import_7__.TrimmedString)).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed([]))),
	responseStreamingMode: ResponseStreamingMode.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("paragraph"))),
	enableProviderUpdateChecks: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(true))),
	continueThreadsAfterServerUpdate: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(true))),
	enableAgentBrowserAccess: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(true))),
	projectAgentBrowserAccessOverrides: __vite_ssr_import_5__.Record((0,__vite_ssr_import_7__.ProjectId), __vite_ssr_import_5__.Boolean).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed({}))),
	defaultAutoPull: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	defaultProjectScripts: __vite_ssr_import_5__.Array((0,__vite_ssr_import_13__.ProjectScript)).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed([]))),
	projectScriptOverrides: __vite_ssr_import_5__.Record((0,__vite_ssr_import_7__.ProjectId), __vite_ssr_import_5__.NullOr(__vite_ssr_import_5__.Array((0,__vite_ssr_import_13__.ProjectScript)))).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed({}))),
	projectAutoPullOverrides: __vite_ssr_import_5__.Record((0,__vite_ssr_import_7__.ProjectId), __vite_ssr_import_5__.Boolean).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed({}))),
	defaultModelSelection: __vite_ssr_import_5__.NullOr((0,__vite_ssr_import_12__.ModelSelection)).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(null))),
	defaultRuntimeMode: __vite_ssr_import_14__.RuntimeMode.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed((0,__vite_ssr_import_14__.DEFAULT_RUNTIME_MODE)))),
	projectSettingsOverrides: __vite_ssr_import_5__.Record((0,__vite_ssr_import_7__.ProjectId), ProjectSettingsOverrides).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed({}))),
	/** Fold once so restarts cannot undo later UI resets. */
	projectSettingsFolded: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	enableAgentDeviceAccess: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	/** Enabling the Device panel must not grant providers device control. */
	enableDeviceSupport: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	deviceOnboardingCompleted: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	deviceHosts: __vite_ssr_import_0__.SshDeviceHostConfigs.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed([]))),
	easDeviceHosts: __vite_ssr_import_0__.EasDeviceHostConfigs.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed([]))),
	sidebarAutoSettleAfterDays: __vite_ssr_import_5__.NullOr(SidebarAutoSettleAfterDays).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_SIDEBAR_AUTO_SETTLE_AFTER_DAYS))),
	compactIdleThreads: LegacyCompactIdleThreads.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	idleCompaction: __vite_ssr_import_5__.optionalKey(IdleCompactionMode),
	snoozeLimitedThreads: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	autoResumeLimitedThreads: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	/** Beta: guest links for this machine's threads. Off refuses new links and pauses existing ones. */
	guestSharingEnabled: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	sidebarAutoSettleKeepPullRequests: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	sidebarAutoSettleOnMerge: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(true))),
	backgroundActivity: BackgroundActivitySettings,
	automaticGitFetchInterval: __vite_ssr_import_5__.DurationFromMillis.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(__vite_ssr_import_4__.toMillis(DEFAULT_AUTOMATIC_GIT_FETCH_INTERVAL)))),
	providerHealthRefreshInterval: __vite_ssr_import_5__.DurationFromMillis.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(__vite_ssr_import_4__.toMillis(DEFAULT_PROVIDER_HEALTH_REFRESH_INTERVAL)))),
	backgroundActivityProfile: BackgroundActivityProfile.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(DEFAULT_BACKGROUND_ACTIVITY_PROFILE))),
	defaultTheme: DefaultThemePreference.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(""))),
	/** Distinguishes repeated sets of the same theme so clients apply each one. */
	defaultThemeSetAt: __vite_ssr_import_5__.String.check(__vite_ssr_import_5__.isMaxLength(64)).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(""))),
	environmentIcon: (0,__vite_ssr_import_7__.ForwardCompatibleNullable)((0,__vite_ssr_import_9__.EnvironmentMachineKind)).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(null))),
	/** Null inherits t3.json, then local; omit it on the wire for older clients requiring a literal. */
	defaultThreadEnvMode: (0,__vite_ssr_import_7__.OmittedWhenNull)((0,__vite_ssr_import_9__.ThreadEnvMode)),
	newWorktreesStartFromOrigin: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(true))),
	/** Null inherits t3.json, then recursive; unknown values decode to null for older clients. */
	worktreeSubmodules: (0,__vite_ssr_import_7__.ForwardCompatibleNullable)((0,__vite_ssr_import_9__.WorktreeSubmodules)).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(null))),
	addProjectBaseDirectory: __vite_ssr_import_7__.TrimmedString.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(""))),
	textGenerationModelSelection: __vite_ssr_import_12__.ModelSelection.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed({
		instanceId: __vite_ssr_import_17__.ProviderInstanceId.make("codex"),
		model: __vite_ssr_import_11__.DEFAULT_TEXT_GENERATION_MODEL,
		options: [{
			id: "reasoningEffort",
			value: __vite_ssr_import_11__.DEFAULT_TEXT_GENERATION_REASONING_EFFORT
		}]
	}))),
	threadTitleInstructions: __vite_ssr_import_7__.TrimmedString.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(""))),
	branchNamingMode: BranchNamingMode.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("static"))),
	branchNamePrefix: __vite_ssr_import_7__.TrimmedString.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed("t3"))),
	branchNameInstructions: __vite_ssr_import_7__.TrimmedString.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(""))),
	removeAgentCreditsOnMerge: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	sourceControlWritingStyle: SourceControlWritingStyleSetting.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed({}))),
	sourceControlWriterModelSelection: __vite_ssr_import_5__.NullOr((0,__vite_ssr_import_12__.ModelSelection)).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(null))),
	reviewGuidesEnabled: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	reviewGuideModelSelection: __vite_ssr_import_5__.NullOr((0,__vite_ssr_import_12__.ModelSelection)).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(null))),
	reviewGuideInstructions: __vite_ssr_import_7__.TrimmedString.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(""))),
	pullRequestMergeMethod: __vite_ssr_import_5__.NullOr((0,__vite_ssr_import_18__.PullRequestMergeMethod)).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(null))),
	// Schema.Unknown preserves unknown-driver configs across versions; see providerInstance.ts.
	providerInstances: __vite_ssr_import_5__.Record((0,__vite_ssr_import_17__.ProviderInstanceId), (0,__vite_ssr_import_17__.ProviderInstanceConfig)).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed({}))),
	observability: ObservabilitySettings.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed({}))),
	sourceControlHosts: __vite_ssr_import_5__.Record(__vite_ssr_import_5__.String, SourceControlHostSettings).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed({}))),
	// User-chosen ids preserve rows across edits; undecodable entries round-trip untouched.
	usageLimitSources: __vite_ssr_import_5__.Record((0,__vite_ssr_import_8__.UsageLimitSourceId), UsageLimitSourceConfig).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed({}))),
	cursorKeychainUsageEnabled: __vite_ssr_import_5__.Boolean.pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed(false))),
	usagePriceOverrides: __vite_ssr_import_5__.Record((0,__vite_ssr_import_7__.TrimmedNonEmptyString), UsageModelPriceOverride).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed({}))),
	usageModelAliases: __vite_ssr_import_5__.Record((0,__vite_ssr_import_7__.TrimmedNonEmptyString), (0,__vite_ssr_import_7__.TrimmedNonEmptyString)).pipe(__vite_ssr_import_5__.withDecodingDefault(__vite_ssr_import_2__.succeed({})))
});
const DEFAULT_SERVER_SETTINGS = __vite_ssr_import_5__.decodeSync(ServerSettings)({});
const providerInstanceConfigEnabledFlag = (config) => {
	if (config === null || typeof config !== "object" || Array.isArray(config)) {
		return undefined;
	};
	const enabled = config.enabled;
	return typeof enabled === "boolean" ? enabled : undefined;
};
// Must match each driver's enabled decoding default.
const DEFAULT_DISABLED_PROVIDER_DRIVERS = new Set([
	"cursor",
	"grok",
	"muse",
	"pi",
	"opencode",
	"antigravity"
].map((driver) => __vite_ssr_import_17__.ProviderDriverKind.make(driver)));
const DEFAULT_ENABLED_DEFAULT_INSTANCES = new Set(["codex", "claudeAgent"].map((instanceId) => __vite_ssr_import_17__.ProviderInstanceId.make(instanceId)));
const isUnconfiguredDefaultInstanceEnabled = (instanceId) => DEFAULT_ENABLED_DEFAULT_INSTANCES.has(instanceId);
const defaultEnabledForDriver = (driver) => !DEFAULT_DISABLED_PROVIDER_DRIVERS.has(driver);
const resolveProviderInstanceEnabled = (instance) => {
	const configEnabled = providerInstanceConfigEnabledFlag(instance.config);
	if (instance.enabled === false || configEnabled === false) {
		return false;
	};
	return instance.enabled ?? configEnabled ?? defaultEnabledForDriver(instance.driver);
};
const resolveProjectProviderInstanceEnabled = (settings, projectId, instanceId) => {
	const override = projectId === null ? undefined : settings.projectSettingsOverrides[projectId]?.providerInstances?.[instanceId]?.enabled;
	if (override !== undefined) return override;
	const instanceConfig = Object.hasOwn(settings.providerInstances, instanceId) ? settings.providerInstances[instanceId] : undefined;
	return instanceConfig !== undefined ? resolveProviderInstanceEnabled(instanceConfig) : isUnconfiguredDefaultInstanceEnabled(instanceId);
};
const decodeClaudeSettings = __vite_ssr_import_5__.decodeUnknownOption(ClaudeSettings);
/** The environment-wide idle compaction mode, from whichever field the settings carry. */
const globalIdleCompaction = (settings) => settings.idleCompaction ?? (typeof settings.compactIdleThreads === "string" ? settings.compactIdleThreads : settings.compactIdleThreads ? "beforeCacheExpires" : "onReturn");
/** Sets the mode, and the legacy switch shipped clients still read alongside it. */
const withIdleCompaction = (settings, mode) => ({
	...settings,
	idleCompaction: mode,
	compactIdleThreads: mode === "beforeCacheExpires"
});
/** Whether a server reads modes, rather than only the boolean switch from before them. */
const readsIdleCompactionModes = (settings) => settings.idleCompaction !== undefined || typeof settings.compactIdleThreads === "string";
/**
* The patch that sets `mode` in the form the server's settings show it reads:
* the mode for a server that has `idleCompaction` or kept the mode in the legacy
* field, the boolean switch for a server from before modes.
*/
const idleCompactionPatch = (settings, mode) => settings.idleCompaction !== undefined ? { idleCompaction: mode } : readsIdleCompactionModes(settings) ? { compactIdleThreads: mode } : { compactIdleThreads: mode === "beforeCacheExpires" };
const resolveIdleCompaction = (settings, instanceId) => {
	const instance = Object.hasOwn(settings.providerInstances, instanceId) ? settings.providerInstances[instanceId] : undefined;
	const override = decodeClaudeSettings(instance?.config ?? {}).pipe(__vite_ssr_import_3__.map((config) => config.idleCompaction), __vite_ssr_import_3__.getOrElse(() => "default"));
	return override === "default" ? globalIdleCompaction(settings) : override;
};
const ServerSettingsOperation = __vite_ssr_import_5__.Literals([
	"normalize",
	"check-exists",
	"create-provider-instance",
	"read-file",
	"read-provider-history",
	"read-project-settings",
	"read-secret",
	"remove-secret",
	"remove-stale-secret",
	"write-secret",
	"write-file",
	"prepare-directory"
]);
class ServerSettingsError extends __vite_ssr_import_5__.TaggedError()("ServerSettingsError", {
	settingsPath: __vite_ssr_import_5__.String,
	operation: ServerSettingsOperation,
	providerInstanceId: __vite_ssr_import_5__.optional(__vite_ssr_import_5__.String),
	environmentVariable: __vite_ssr_import_5__.optional(__vite_ssr_import_5__.String),
	cause: __vite_ssr_import_5__.optional(__vite_ssr_import_5__.Defect())
}) {
	get message() {
		const provider = this.providerInstanceId === undefined ? "" : ` for provider ${this.providerInstanceId}`;
		const variable = this.environmentVariable === undefined ? "" : ` and environment variable ${this.environmentVariable}`;
		return `Server settings ${this.operation} failed${provider}${variable} at ${this.settingsPath}.`;
	}
};
const DEFAULT_UNIFIED_SETTINGS = {
	...DEFAULT_SERVER_SETTINGS,
	...DEFAULT_CLIENT_SETTINGS
};
const ModelSelectionPatch = __vite_ssr_import_5__.Struct({
	instanceId: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_17__.ProviderInstanceId)),
	model: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_7__.TrimmedNonEmptyString)),
	options: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_11__.ProviderOptionSelections))
});
const ServerSettingsPatch = __vite_ssr_import_5__.Struct({
	setModelFavorites: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Array(__vite_ssr_import_5__.Struct({
		...ModelFavorite.fields,
		favorite: __vite_ssr_import_5__.Boolean
	}))),
	setModelsHidden: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Array(__vite_ssr_import_5__.Struct({
		...ModelFavorite.fields,
		hidden: __vite_ssr_import_5__.Boolean
	}))),
	setProviderModelOrder: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Struct({
		provider: __vite_ssr_import_17__.ProviderInstanceId,
		modelOrder: __vite_ssr_import_5__.Array((0,__vite_ssr_import_7__.TrimmedString))
	})),
	favorites: __vite_ssr_import_5__.optionalKey(ModelFavorites),
	providerModelPreferences: __vite_ssr_import_5__.optionalKey(ProviderModelPreferences),
	// Applied under the settings service's write lock, only while still unset.
	migrateModelPreferences: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Struct({
		favorites: __vite_ssr_import_5__.optionalKey(ModelFavorites),
		providerModelPreferences: __vite_ssr_import_5__.optionalKey(ProviderModelPreferences)
	})),
	worktreeCleanup: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.NullOr(__vite_ssr_import_5__.Union([__vite_ssr_import_5__.Struct({ mode: __vite_ssr_import_5__.Literal("off") }), __vite_ssr_import_5__.Struct({
		mode: __vite_ssr_import_5__.Literal("custom"),
		rules: __vite_ssr_import_5__.Struct({
			worktreeKeepWhen: __vite_ssr_import_5__.optionalKey(WorktreeKeepWhen),
			worktreeAfterDays: __vite_ssr_import_5__.optionalKey(StorageRetentionDays),
			worktreeSettledAfterDays: __vite_ssr_import_5__.optionalKey(SettledWorktreeRetentionDays),
			worktreeOnMerge: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
			worktreeOnDelete: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
			worktreeUnchanged: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean)
		})
	})]))),
	storageCleanup: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Struct({
		worktreeKeepWhen: __vite_ssr_import_5__.optionalKey(WorktreeKeepWhen),
		worktreeAfterDays: __vite_ssr_import_5__.optionalKey(StorageRetentionDays),
		worktreeSettledAfterDays: __vite_ssr_import_5__.optionalKey(SettledWorktreeRetentionDays),
		worktreeOnMerge: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
		worktreeOnDelete: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
		worktreeUnchanged: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
		browserArtifactsAfterDays: __vite_ssr_import_5__.optionalKey(StorageRetentionDays),
		logsAfterDays: __vite_ssr_import_5__.optionalKey(StorageRetentionDays)
	})),
	worktreesDirectory: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_7__.TrimmedString)),
	responseStreamingMode: __vite_ssr_import_5__.optionalKey(ResponseStreamingMode),
	enableProviderUpdateChecks: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	continueThreadsAfterServerUpdate: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	enableAgentBrowserAccess: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	projectAgentBrowserAccessOverrides: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Record((0,__vite_ssr_import_7__.ProjectId), __vite_ssr_import_5__.NullOr(__vite_ssr_import_5__.Boolean))),
	defaultAutoPull: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	defaultProjectScripts: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Array((0,__vite_ssr_import_13__.ProjectScript))),
	projectScriptOverrides: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Record((0,__vite_ssr_import_7__.ProjectId), __vite_ssr_import_5__.NullOr(__vite_ssr_import_5__.Array((0,__vite_ssr_import_13__.ProjectScript))))),
	projectAutoPullOverrides: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Record((0,__vite_ssr_import_7__.ProjectId), __vite_ssr_import_5__.NullOr(__vite_ssr_import_5__.Boolean))),
	defaultModelSelection: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.NullOr((0,__vite_ssr_import_12__.ModelSelection))),
	defaultRuntimeMode: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_14__.RuntimeMode)),
	/** Replaces each project's override set; null removes it. Omitted providerInstances retains its stored value. */
	projectSettingsOverrides: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Record((0,__vite_ssr_import_7__.ProjectId), __vite_ssr_import_5__.NullOr(__vite_ssr_import_5__.Struct({
		...ProjectSettingsOverrides.fields,
		sourceControlWritingStyle: __vite_ssr_import_5__.optionalKey(SourceControlWritingStyleSettings)
	})))),
	enableAgentDeviceAccess: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	enableDeviceSupport: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	deviceOnboardingCompleted: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	deviceHosts: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_0__.SshDeviceHostConfigs)),
	easDeviceHosts: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_0__.EasDeviceHostConfigs)),
	sidebarAutoSettleAfterDays: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.NullOr(SidebarAutoSettleAfterDays)),
	compactIdleThreads: __vite_ssr_import_5__.optionalKey(LegacyCompactIdleThreads),
	idleCompaction: __vite_ssr_import_5__.optionalKey(IdleCompactionMode),
	sidebarAutoSettleKeepPullRequests: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	sidebarAutoSettleOnMerge: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	autoResumeLimitedThreads: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	snoozeLimitedThreads: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	guestSharingEnabled: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	backgroundActivity: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Struct({
		schemaVersion: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Literal(1)),
		profile: __vite_ssr_import_5__.optionalKey(BackgroundActivityProfileSelection),
		baseProfile: __vite_ssr_import_5__.optionalKey(BackgroundActivityProfile),
		overrides: __vite_ssr_import_5__.optionalKey(BackgroundActivityOverrides)
	})),
	automaticGitFetchInterval: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.DurationFromMillis),
	providerHealthRefreshInterval: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.DurationFromMillis),
	backgroundActivityProfile: __vite_ssr_import_5__.optionalKey(BackgroundActivityProfile),
	environmentIcon: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.NullOr((0,__vite_ssr_import_9__.EnvironmentMachineKind))),
	defaultThreadEnvMode: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.NullOr((0,__vite_ssr_import_9__.ThreadEnvMode))),
	newWorktreesStartFromOrigin: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	worktreeSubmodules: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.NullOr((0,__vite_ssr_import_9__.WorktreeSubmodules))),
	addProjectBaseDirectory: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_7__.TrimmedString)),
	textGenerationModelSelection: __vite_ssr_import_5__.optionalKey(ModelSelectionPatch),
	threadTitleInstructions: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_7__.TrimmedString)),
	branchNamingMode: __vite_ssr_import_5__.optionalKey(BranchNamingMode),
	branchNamePrefix: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_7__.TrimmedString)),
	branchNameInstructions: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_7__.TrimmedString)),
	removeAgentCreditsOnMerge: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	sourceControlWritingStyle: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Struct({
		mode: __vite_ssr_import_5__.optionalKey(SourceControlWritingStyleMode),
		customInstructions: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_7__.TrimmedString)),
		followChangeRequestTemplates: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean)
	})),
	sourceControlWriterModelSelection: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.NullOr((0,__vite_ssr_import_12__.ModelSelection))),
	reviewGuidesEnabled: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	reviewGuideModelSelection: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.NullOr((0,__vite_ssr_import_12__.ModelSelection))),
	reviewGuideInstructions: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_7__.TrimmedString)),
	pullRequestMergeMethod: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.NullOr((0,__vite_ssr_import_18__.PullRequestMergeMethod))),
	observability: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Struct({
		otlpTracesUrl: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_7__.TrimmedString)),
		otlpMetricsUrl: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_7__.TrimmedString)),
		otlpLogsUrl: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_7__.TrimmedString))
	})),
	/** Merges per host, replacing patched fields whole; redaction markers retain secrets, empty or omitted secrets remove them. */
	sourceControlHosts: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Record(__vite_ssr_import_5__.String, SourceControlHostSettings)),
	// Replace whole maps to avoid half-merged driver configs.
	providerInstances: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Record((0,__vite_ssr_import_17__.ProviderInstanceId), (0,__vite_ssr_import_17__.ProviderInstanceConfig))),
	// Merge per source to avoid racing other edits; null removes an entry.
	usageLimitSources: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Record((0,__vite_ssr_import_8__.UsageLimitSourceId), __vite_ssr_import_5__.NullOr(UsageLimitSourceConfig))),
	cursorKeychainUsageEnabled: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	usagePriceOverrides: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Record((0,__vite_ssr_import_7__.TrimmedNonEmptyString), __vite_ssr_import_5__.NullOr(UsageModelPriceOverride))),
	usageModelAliases: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Record((0,__vite_ssr_import_7__.TrimmedNonEmptyString), __vite_ssr_import_5__.NullOr((0,__vite_ssr_import_7__.TrimmedNonEmptyString))))
});
function requiredScopesForServerSettingsPatch(patch) {
	let changesProviders = false;
	let changesSettings = false;
	for (const [key, value] of Object.entries(patch)) {
		if (value === undefined) continue;
		if (key === "providers" || key === "providerInstances" || key === "usageLimitSources") {
			changesProviders = true;
		} else {
			changesSettings = true;
		}
	};
	return [...changesSettings || !changesProviders ? [__vite_ssr_import_1__.AuthSettingsWriteScope] : [], ...changesProviders ? [__vite_ssr_import_1__.AuthProvidersManageScope] : []];
};
/** Host-executed project scripts require settings-write authority in addition to orchestration:operate. */
function requiredScopesForProjectMutation(mutation) {
	if (mutation.type === "project.delete" || mutation.scripts === undefined) {
		return [__vite_ssr_import_1__.AuthOrchestrationOperateScope];
	};
	return [__vite_ssr_import_1__.AuthOrchestrationOperateScope, ...requiredScopesForServerSettingsPatch({ defaultProjectScripts: mutation.scripts })];
};
const ClientSettingsPatch = __vite_ssr_import_5__.Struct({
	notificationMode: __vite_ssr_import_5__.optionalKey(NotificationMode),
	inAppNotificationsEnabled: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	diffColorScheme: __vite_ssr_import_5__.optionalKey(DiffColorScheme),
	chatWidth: __vite_ssr_import_5__.optionalKey(ChatWidth),
	loadBalancingEnabled: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	loadBalancingWeights: __vite_ssr_import_5__.optionalKey(LoadBalancingWeights),
	appearanceContrast: __vite_ssr_import_5__.optionalKey(AppearanceContrast),
	panelAnimationDurationMs: __vite_ssr_import_5__.optionalKey(PanelAnimationDurationMs),
	browserDefaultViewport: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_16__.PreviewViewportSetting)),
	browserDefaultZoomFactor: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_16__.PreviewZoomFactor)),
	browserDefaultAppearance: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_16__.PreviewAppearancePreference)),
	browserRecordingFrameRate: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_16__.BrowserRecordingFrameRate)),
	browserRecordingShowKeyPresses: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	browserRecordingShowMousePresses: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	browserLinkTarget: __vite_ssr_import_5__.optionalKey(BrowserLinkTarget),
	browserSearchEngine: __vite_ssr_import_5__.optionalKey(BrowserSearchEngine),
	browserCustomSearchUrl: __vite_ssr_import_5__.optionalKey(BrowserCustomSearchUrl),
	browserAutoShowFloatingPreview: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	browserProfiles: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Array((0,__vite_ssr_import_15__.BrowserProfile))),
	browserDefaultProfileId: __vite_ssr_import_5__.optionalKey((0,__vite_ssr_import_15__.BrowserProfileId)),
	confirmQuit: __vite_ssr_import_5__.optionalKey(QuitConfirmationMode),
	confirmThreadArchive: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	confirmThreadDelete: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	confirmThreadUnpin: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	diffFilesCollapsed: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	diffIgnoreWhitespace: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	diffLayout: __vite_ssr_import_5__.optionalKey(DiffLayout),
	environmentIdentificationMode: __vite_ssr_import_5__.optionalKey(EnvironmentIdentificationMode),
	glassOpacity: __vite_ssr_import_5__.optionalKey(GlassOpacity),
	onboardingCompletedAt: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.NullOr(__vite_ssr_import_5__.String)),
	fontSizeInterface: __vite_ssr_import_5__.optionalKey(InterfaceFontSize),
	fontSizePrompt: __vite_ssr_import_5__.optionalKey(PromptFontSize),
	fontSizeCode: __vite_ssr_import_5__.optionalKey(CodeFontSize),
	fontSizeTerminal: __vite_ssr_import_5__.optionalKey(TerminalFontSize),
	fontFamilyCode: __vite_ssr_import_5__.optionalKey(FontFamilyPreference),
	fontFamilyComposer: __vite_ssr_import_5__.optionalKey(FontFamilyPreference),
	fontFamilySans: __vite_ssr_import_5__.optionalKey(FontFamilyPreference),
	fontFamilyTerminal: __vite_ssr_import_5__.optionalKey(FontFamilyPreference),
	fontSmoothing: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	persistComposerContextStrip: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	favorites: __vite_ssr_import_5__.optionalKey(ModelFavorites),
	providerModelPreferences: __vite_ssr_import_5__.optionalKey(ProviderModelPreferences),
	pullRequestMergeMethodOverrides: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Record((0,__vite_ssr_import_7__.TrimmedNonEmptyString), (0,__vite_ssr_import_18__.PullRequestMergeMethod))),
	pullRequestLinksOpenInApp: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	planModeEnabled: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	contextWindowMeterEnabled: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	composerCollapseOnScroll: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	composerRichTextEnabled: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	sendShortcut: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Literals([
		"enter",
		"mod-enter-multiline",
		"mod-enter"
	])),
	followUpBehavior: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Literals(["queue", "steer"])),
	proactivePanelsEnabled: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	showSkillsInSlashMenu: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	legacySidebarEnabled: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	sidebarWorkingShelfEnabled: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	sidebarProjectGroupingMode: __vite_ssr_import_5__.optionalKey(SidebarProjectGroupingMode),
	sidebarProjectGroupingOverrides: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Record((0,__vite_ssr_import_7__.TrimmedNonEmptyString), SidebarProjectGroupingMode)),
	sidebarProjectSortOrder: __vite_ssr_import_5__.optionalKey(SidebarProjectSortOrder),
	sidebarThreadSortOrder: __vite_ssr_import_5__.optionalKey(SidebarThreadSortOrder),
	sidebarThreadPreviewCount: __vite_ssr_import_5__.optionalKey(SidebarThreadPreviewCount),
	timestampFormat: __vite_ssr_import_5__.optionalKey(TimestampFormat),
	snapShotEnabled: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	snapShotIncludeAccessibility: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	snapShotShortcut: __vite_ssr_import_5__.optionalKey(SnapShotShortcut),
	snapShotPlaySound: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	snapShotSound: __vite_ssr_import_5__.optionalKey(SnapShotSound),
	snapShotFlash: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	snapShotAnimations: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	wordWrap: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean),
	mathRenderingEnabled: __vite_ssr_import_5__.optionalKey(__vite_ssr_import_5__.Boolean)
});
//# sourceMappingSource=vite-generated
//# sourceMappingURL=data:application/json;base64,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QVcsQ0FBQyxDQUFDO0NBQy9GLGtCQUFrQixzQkFBTyxZQUFZLHNCQUFPLFNBQVMsQ0FBQyxTQUFTLE9BQU8sQ0FBQyxDQUFDO0NBQ3hFLHdCQUF3QixzQkFBTyxZQUFZLHNCQUFPLE9BQU87Q0FDekQsdUJBQXVCLHNCQUFPLFlBQVksc0JBQU8sT0FBTztDQUN4RCxzQkFBc0Isc0JBQU8sWUFBWSxzQkFBTyxPQUFPO0NBQ3ZELDRCQUE0QixzQkFBTyxZQUFZLHNCQUFPLE9BQU87Q0FDN0QsNEJBQTRCLHNCQUFPLFlBQVksMEJBQTBCO0NBQ3pFLGlDQUFpQyxzQkFBTyxZQUN0QyxzQkFBTyxVQUFPLDhDQUF1QiwwQkFBMEIsQ0FDakU7Q0FDQSx5QkFBeUIsc0JBQU8sWUFBWSx1QkFBdUI7Q0FDbkUsd0JBQXdCLHNCQUFPLFlBQVksc0JBQXNCO0NBQ2pFLDJCQUEyQixzQkFBTyxZQUFZLHlCQUF5QjtDQUN2RSxpQkFBaUIsc0JBQU8sWUFBWSxlQUFlO0NBQ25ELGlCQUFpQixzQkFBTyxZQUFZLHNCQUFPLE9BQU87Q0FDbEQsOEJBQThCLHNCQUFPLFlBQVksc0JBQU8sT0FBTztDQUMvRCxrQkFBa0Isc0JBQU8sWUFBWSxnQkFBZ0I7Q0FDckQsbUJBQW1CLHNCQUFPLFlBQVksc0JBQU8sT0FBTztDQUNwRCxlQUFlLHNCQUFPLFlBQVksYUFBYTtDQUMvQyxlQUFlLHNCQUFPLFlBQVksc0JBQU8sT0FBTztDQUNoRCxvQkFBb0Isc0JBQU8sWUFBWSxzQkFBTyxPQUFPO0NBQ3JELFVBQVUsc0JBQU8sWUFBWSxzQkFBTyxPQUFPO0NBQzNDLHNCQUFzQixzQkFBTyxZQUFZLHNCQUFPLE9BQU87QUFDekQsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsic2V0dGluZ3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWFzRGV2aWNlSG9zdENvbmZpZ3MsIFNzaERldmljZUhvc3RDb25maWdzIH0gZnJvbSBcIi4vZGV2aWNlLnRzXCI7XG5pbXBvcnQge1xuICBBdXRoT3JjaGVzdHJhdGlvbk9wZXJhdGVTY29wZSxcbiAgQXV0aFNldHRpbmdzV3JpdGVTY29wZSxcbiAgQXV0aFByb3ZpZGVyc01hbmFnZVNjb3BlLFxuICB0eXBlIEF1dGhFbnZpcm9ubWVudFNjb3BlLFxufSBmcm9tIFwiLi9hdXRoLnRzXCI7XG5pbXBvcnQgKiBhcyBFZmZlY3QgZnJvbSBcImVmZmVjdC9FZmZlY3RcIjtcbmltcG9ydCAqIGFzIE9wdGlvbiBmcm9tIFwiZWZmZWN0L09wdGlvblwiO1xuaW1wb3J0ICogYXMgRHVyYXRpb24gZnJvbSBcImVmZmVjdC9EdXJhdGlvblwiO1xuaW1wb3J0ICogYXMgU2NoZW1hIGZyb20gXCJlZmZlY3QvU2NoZW1hXCI7XG5pbXBvcnQgKiBhcyBTY2hlbWFUcmFuc2Zvcm1hdGlvbiBmcm9tIFwiZWZmZWN0L1NjaGVtYVRyYW5zZm9ybWF0aW9uXCI7XG5pbXBvcnQge1xuICBGb3J3YXJkQ29tcGF0aWJsZU51bGxhYmxlLFxuICBGb3J3YXJkQ29tcGF0aWJsZU9wdGlvbmFsLFxuICBPbWl0dGVkV2hlbk51bGwsXG4gIFByb2plY3RJZCxcbiAgVGhyZWFkSWQsXG4gIFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgVHJpbW1lZFN0cmluZyxcbn0gZnJvbSBcIi4vYmFzZVNjaGVtYXMudHNcIjtcbmltcG9ydCB7IFVzYWdlTGltaXRTb3VyY2VJZCB9IGZyb20gXCIuL3VzYWdlTGltaXRTb3VyY2VJZC50c1wiO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRNYWNoaW5lS2luZCwgVGhyZWFkRW52TW9kZSwgV29ya3RyZWVTdWJtb2R1bGVzIH0gZnJvbSBcIi4vZW52aXJvbm1lbnQudHNcIjtcbmltcG9ydCB7IEtleWJpbmRpbmdTaG9ydGN1dCB9IGZyb20gXCIuL2tleWJpbmRpbmdzLnRzXCI7XG5pbXBvcnQge1xuICBDdXN0b21Nb2RlbFNldHRpbmcsXG4gIERFRkFVTFRfVEVYVF9HRU5FUkFUSU9OX01PREVMLFxuICBERUZBVUxUX1RFWFRfR0VORVJBVElPTl9SRUFTT05JTkdfRUZGT1JULFxuICBQcm92aWRlck9wdGlvblNlbGVjdGlvbnMsXG59IGZyb20gXCIuL21vZGVsLnRzXCI7XG5pbXBvcnQgeyBNb2RlbFNlbGVjdGlvbiB9IGZyb20gXCIuL21vZGVsU2VsZWN0aW9uLnRzXCI7XG5pbXBvcnQgeyBQcm9qZWN0U2NyaXB0LCB0eXBlIFByb2plY3RNdXRhdGlvbiB9IGZyb20gXCIuL3Byb2plY3QudHNcIjtcbmltcG9ydCB7IERFRkFVTFRfUlVOVElNRV9NT0RFLCBSdW50aW1lTW9kZSB9IGZyb20gXCIuL3Byb3ZpZGVyUG9saWN5LnRzXCI7XG5pbXBvcnQgeyBCcm93c2VyUHJvZmlsZSwgQnJvd3NlclByb2ZpbGVJZCwgREVGQVVMVF9CUk9XU0VSX1BST0ZJTEVfSUQgfSBmcm9tIFwiLi9icm93c2VyUHJvZmlsZS50c1wiO1xuaW1wb3J0IHtcbiAgQnJvd3NlclJlY29yZGluZ0ZyYW1lUmF0ZSxcbiAgREVGQVVMVF9CUk9XU0VSX1JFQ09SRElOR19GUkFNRV9SQVRFLFxuICBERUZBVUxUX1BSRVZJRVdfQVBQRUFSQU5DRSxcbiAgREVGQVVMVF9QUkVWSUVXX1pPT01fRkFDVE9SLFxuICBGSUxMX1BSRVZJRVdfVklFV1BPUlQsXG4gIFByZXZpZXdBcHBlYXJhbmNlUHJlZmVyZW5jZSxcbiAgUHJldmlld1ZpZXdwb3J0U2V0dGluZyxcbiAgUHJldmlld1pvb21GYWN0b3IsXG59IGZyb20gXCIuL3ByZXZpZXcudHNcIjtcbmltcG9ydCB7XG4gIFByb3ZpZGVySW5zdGFuY2VDb25maWcsXG4gIFByb3ZpZGVySW5zdGFuY2VJZCxcbiAgUHJvdmlkZXJEcml2ZXJLaW5kLFxufSBmcm9tIFwiLi9wcm92aWRlckluc3RhbmNlLnRzXCI7XG5pbXBvcnQgeyBQdWxsUmVxdWVzdE1lcmdlTWV0aG9kIH0gZnJvbSBcIi4vcHVsbFJlcXVlc3QudHNcIjtcblxuZXhwb3J0IGNvbnN0IFRpbWVzdGFtcEZvcm1hdCA9IFNjaGVtYS5MaXRlcmFscyhbXCJsb2NhbGVcIiwgXCIxMi1ob3VyXCIsIFwiMjQtaG91clwiXSk7XG5leHBvcnQgdHlwZSBUaW1lc3RhbXBGb3JtYXQgPSB0eXBlb2YgVGltZXN0YW1wRm9ybWF0LlR5cGU7XG5jb25zdCBERUZBVUxUX1RJTUVTVEFNUF9GT1JNQVQ6IFRpbWVzdGFtcEZvcm1hdCA9IFwibG9jYWxlXCI7XG5cbmV4cG9ydCBjb25zdCBEaWZmTGF5b3V0ID0gU2NoZW1hLkxpdGVyYWxzKFtcInN0YWNrZWRcIiwgXCJzcGxpdFwiXSk7XG5leHBvcnQgdHlwZSBEaWZmTGF5b3V0ID0gdHlwZW9mIERpZmZMYXlvdXQuVHlwZTtcbmNvbnN0IERFRkFVTFRfRElGRl9MQVlPVVQ6IERpZmZMYXlvdXQgPSBcInN0YWNrZWRcIjtcblxuZXhwb3J0IGNvbnN0IFNpZGViYXJQcm9qZWN0U29ydE9yZGVyID0gU2NoZW1hLkxpdGVyYWxzKFtcInVwZGF0ZWRfYXRcIiwgXCJjcmVhdGVkX2F0XCIsIFwibWFudWFsXCJdKTtcbmV4cG9ydCB0eXBlIFNpZGViYXJQcm9qZWN0U29ydE9yZGVyID0gdHlwZW9mIFNpZGViYXJQcm9qZWN0U29ydE9yZGVyLlR5cGU7XG5leHBvcnQgY29uc3QgREVGQVVMVF9TSURFQkFSX1BST0pFQ1RfU09SVF9PUkRFUjogU2lkZWJhclByb2plY3RTb3J0T3JkZXIgPSBcInVwZGF0ZWRfYXRcIjtcblxuZXhwb3J0IGNvbnN0IFNpZGViYXJUaHJlYWRTb3J0T3JkZXIgPSBTY2hlbWEuTGl0ZXJhbHMoW1widXBkYXRlZF9hdFwiLCBcImNyZWF0ZWRfYXRcIl0pO1xuZXhwb3J0IHR5cGUgU2lkZWJhclRocmVhZFNvcnRPcmRlciA9IHR5cGVvZiBTaWRlYmFyVGhyZWFkU29ydE9yZGVyLlR5cGU7XG5jb25zdCBERUZBVUxUX1NJREVCQVJfVEhSRUFEX1NPUlRfT1JERVI6IFNpZGViYXJUaHJlYWRTb3J0T3JkZXIgPSBcInVwZGF0ZWRfYXRcIjtcblxuZXhwb3J0IGNvbnN0IFNpZGViYXJQcm9qZWN0R3JvdXBpbmdNb2RlID0gU2NoZW1hLkxpdGVyYWxzKFtcbiAgXCJyZXBvc2l0b3J5XCIsXG4gIFwicmVwb3NpdG9yeV9wYXRoXCIsXG4gIFwic2VwYXJhdGVcIixcbl0pO1xuZXhwb3J0IHR5cGUgU2lkZWJhclByb2plY3RHcm91cGluZ01vZGUgPSB0eXBlb2YgU2lkZWJhclByb2plY3RHcm91cGluZ01vZGUuVHlwZTtcbmNvbnN0IERFRkFVTFRfU0lERUJBUl9QUk9KRUNUX0dST1VQSU5HX01PREU6IFNpZGViYXJQcm9qZWN0R3JvdXBpbmdNb2RlID0gXCJyZXBvc2l0b3J5XCI7XG5leHBvcnQgY29uc3QgTUlOX1NJREVCQVJfVEhSRUFEX1BSRVZJRVdfQ09VTlQgPSAxO1xuZXhwb3J0IGNvbnN0IE1BWF9TSURFQkFSX1RIUkVBRF9QUkVWSUVXX0NPVU5UID0gMTU7XG5leHBvcnQgY29uc3QgU2lkZWJhclRocmVhZFByZXZpZXdDb3VudCA9IFNjaGVtYS5JbnQuY2hlY2soXG4gIFNjaGVtYS5pc0JldHdlZW4oe1xuICAgIG1pbmltdW06IE1JTl9TSURFQkFSX1RIUkVBRF9QUkVWSUVXX0NPVU5ULFxuICAgIG1heGltdW06IE1BWF9TSURFQkFSX1RIUkVBRF9QUkVWSUVXX0NPVU5ULFxuICB9KSxcbik7XG5leHBvcnQgdHlwZSBTaWRlYmFyVGhyZWFkUHJldmlld0NvdW50ID0gdHlwZW9mIFNpZGViYXJUaHJlYWRQcmV2aWV3Q291bnQuVHlwZTtcbmNvbnN0IERFRkFVTFRfU0lERUJBUl9USFJFQURfUFJFVklFV19DT1VOVDogU2lkZWJhclRocmVhZFByZXZpZXdDb3VudCA9IDY7XG5leHBvcnQgY29uc3QgTUlOX1NJREVCQVJfQVVUT19TRVRUTEVfQUZURVJfREFZUyA9IDE7XG5leHBvcnQgY29uc3QgTUFYX1NJREVCQVJfQVVUT19TRVRUTEVfQUZURVJfREFZUyA9IDkwO1xuZXhwb3J0IGNvbnN0IFNpZGViYXJBdXRvU2V0dGxlQWZ0ZXJEYXlzID0gU2NoZW1hLk51bWJlci5jaGVjayhcbiAgU2NoZW1hLmlzQmV0d2Vlbih7XG4gICAgbWluaW11bTogTUlOX1NJREVCQVJfQVVUT19TRVRUTEVfQUZURVJfREFZUyxcbiAgICBtYXhpbXVtOiBNQVhfU0lERUJBUl9BVVRPX1NFVFRMRV9BRlRFUl9EQVlTLFxuICB9KSxcbik7XG5leHBvcnQgdHlwZSBTaWRlYmFyQXV0b1NldHRsZUFmdGVyRGF5cyA9IHR5cGVvZiBTaWRlYmFyQXV0b1NldHRsZUFmdGVyRGF5cy5UeXBlO1xuY29uc3QgREVGQVVMVF9TSURFQkFSX0FVVE9fU0VUVExFX0FGVEVSX0RBWVM6IFNpZGViYXJBdXRvU2V0dGxlQWZ0ZXJEYXlzID0gMztcbmV4cG9ydCBjb25zdCBNSU5fR0xBU1NfT1BBQ0lUWSA9IDQwO1xuZXhwb3J0IGNvbnN0IE1BWF9HTEFTU19PUEFDSVRZID0gMTAwO1xuZXhwb3J0IGNvbnN0IEdsYXNzT3BhY2l0eSA9IFNjaGVtYS5JbnQuY2hlY2soXG4gIFNjaGVtYS5pc0JldHdlZW4oe1xuICAgIG1pbmltdW06IE1JTl9HTEFTU19PUEFDSVRZLFxuICAgIG1heGltdW06IE1BWF9HTEFTU19PUEFDSVRZLFxuICB9KSxcbik7XG5leHBvcnQgdHlwZSBHbGFzc09wYWNpdHkgPSB0eXBlb2YgR2xhc3NPcGFjaXR5LlR5cGU7XG5jb25zdCBERUZBVUxUX0dMQVNTX09QQUNJVFk6IEdsYXNzT3BhY2l0eSA9IDgwO1xuXG5leHBvcnQgY29uc3QgTUlOX0FQUEVBUkFOQ0VfQ09OVFJBU1QgPSA1MDtcbmV4cG9ydCBjb25zdCBNQVhfQVBQRUFSQU5DRV9DT05UUkFTVCA9IDIwMDtcbmV4cG9ydCBjb25zdCBBcHBlYXJhbmNlQ29udHJhc3QgPSBTY2hlbWEuSW50LmNoZWNrKFxuICBTY2hlbWEuaXNCZXR3ZWVuKHsgbWluaW11bTogTUlOX0FQUEVBUkFOQ0VfQ09OVFJBU1QsIG1heGltdW06IE1BWF9BUFBFQVJBTkNFX0NPTlRSQVNUIH0pLFxuKTtcbmV4cG9ydCB0eXBlIEFwcGVhcmFuY2VDb250cmFzdCA9IHR5cGVvZiBBcHBlYXJhbmNlQ29udHJhc3QuVHlwZTtcbmNvbnN0IERFRkFVTFRfQVBQRUFSQU5DRV9DT05UUkFTVDogQXBwZWFyYW5jZUNvbnRyYXN0ID0gMTAwO1xuZXhwb3J0IGNvbnN0IE1JTl9QQU5FTF9BTklNQVRJT05fRFVSQVRJT05fTVMgPSAwO1xuZXhwb3J0IGNvbnN0IE1BWF9QQU5FTF9BTklNQVRJT05fRFVSQVRJT05fTVMgPSA0MDA7XG5leHBvcnQgY29uc3QgUGFuZWxBbmltYXRpb25EdXJhdGlvbk1zID0gU2NoZW1hLkludC5jaGVjayhcbiAgU2NoZW1hLmlzQmV0d2Vlbih7XG4gICAgbWluaW11bTogTUlOX1BBTkVMX0FOSU1BVElPTl9EVVJBVElPTl9NUyxcbiAgICBtYXhpbXVtOiBNQVhfUEFORUxfQU5JTUFUSU9OX0RVUkFUSU9OX01TLFxuICB9KSxcbik7XG5leHBvcnQgdHlwZSBQYW5lbEFuaW1hdGlvbkR1cmF0aW9uTXMgPSB0eXBlb2YgUGFuZWxBbmltYXRpb25EdXJhdGlvbk1zLlR5cGU7XG5jb25zdCBERUZBVUxUX1BBTkVMX0FOSU1BVElPTl9EVVJBVElPTl9NUzogUGFuZWxBbmltYXRpb25EdXJhdGlvbk1zID0gMDtcblxuZXhwb3J0IGNvbnN0IE1JTl9JTlRFUkZBQ0VfRk9OVF9TSVpFID0gMTI7XG5leHBvcnQgY29uc3QgTUFYX0lOVEVSRkFDRV9GT05UX1NJWkUgPSAyMDtcbmV4cG9ydCBjb25zdCBJbnRlcmZhY2VGb250U2l6ZSA9IFNjaGVtYS5JbnQuY2hlY2soXG4gIFNjaGVtYS5pc0JldHdlZW4oeyBtaW5pbXVtOiBNSU5fSU5URVJGQUNFX0ZPTlRfU0laRSwgbWF4aW11bTogTUFYX0lOVEVSRkFDRV9GT05UX1NJWkUgfSksXG4pO1xuZXhwb3J0IHR5cGUgSW50ZXJmYWNlRm9udFNpemUgPSB0eXBlb2YgSW50ZXJmYWNlRm9udFNpemUuVHlwZTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOVEVSRkFDRV9GT05UX1NJWkU6IEludGVyZmFjZUZvbnRTaXplID0gMTY7XG5cbmV4cG9ydCBjb25zdCBNSU5fUFJPTVBUX0ZPTlRfU0laRSA9IDEyO1xuZXhwb3J0IGNvbnN0IE1BWF9QUk9NUFRfRk9OVF9TSVpFID0gMjA7XG5leHBvcnQgY29uc3QgUHJvbXB0Rm9udFNpemUgPSBTY2hlbWEuSW50LmNoZWNrKFxuICBTY2hlbWEuaXNCZXR3ZWVuKHsgbWluaW11bTogTUlOX1BST01QVF9GT05UX1NJWkUsIG1heGltdW06IE1BWF9QUk9NUFRfRk9OVF9TSVpFIH0pLFxuKTtcbmV4cG9ydCB0eXBlIFByb21wdEZvbnRTaXplID0gdHlwZW9mIFByb21wdEZvbnRTaXplLlR5cGU7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QUk9NUFRfRk9OVF9TSVpFOiBQcm9tcHRGb250U2l6ZSA9IDE0O1xuXG5leHBvcnQgY29uc3QgTUlOX0NPREVfRk9OVF9TSVpFID0gMTA7XG5leHBvcnQgY29uc3QgTUFYX0NPREVfRk9OVF9TSVpFID0gMTg7XG5leHBvcnQgY29uc3QgQ29kZUZvbnRTaXplID0gU2NoZW1hLkludC5jaGVjayhcbiAgU2NoZW1hLmlzQmV0d2Vlbih7IG1pbmltdW06IE1JTl9DT0RFX0ZPTlRfU0laRSwgbWF4aW11bTogTUFYX0NPREVfRk9OVF9TSVpFIH0pLFxuKTtcbmV4cG9ydCB0eXBlIENvZGVGb250U2l6ZSA9IHR5cGVvZiBDb2RlRm9udFNpemUuVHlwZTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0NPREVfRk9OVF9TSVpFOiBDb2RlRm9udFNpemUgPSAxMztcblxuZXhwb3J0IGNvbnN0IE1JTl9URVJNSU5BTF9GT05UX1NJWkUgPSA4O1xuZXhwb3J0IGNvbnN0IE1BWF9URVJNSU5BTF9GT05UX1NJWkUgPSAyMDtcbmV4cG9ydCBjb25zdCBUZXJtaW5hbEZvbnRTaXplID0gU2NoZW1hLkludC5jaGVjayhcbiAgU2NoZW1hLmlzQmV0d2Vlbih7IG1pbmltdW06IE1JTl9URVJNSU5BTF9GT05UX1NJWkUsIG1heGltdW06IE1BWF9URVJNSU5BTF9GT05UX1NJWkUgfSksXG4pO1xuZXhwb3J0IHR5cGUgVGVybWluYWxGb250U2l6ZSA9IHR5cGVvZiBUZXJtaW5hbEZvbnRTaXplLlR5cGU7XG5jb25zdCBERUZBVUxUX1RFUk1JTkFMX0ZPTlRfU0laRTogVGVybWluYWxGb250U2l6ZSA9IDEyO1xuXG5leHBvcnQgY29uc3QgRW52aXJvbm1lbnRJZGVudGlmaWNhdGlvbk1vZGUgPSBTY2hlbWEuTGl0ZXJhbHMoW1wiYXJ0d29ya1wiLCBcInBpbGxcIiwgXCJub25lXCJdKTtcbmV4cG9ydCB0eXBlIEVudmlyb25tZW50SWRlbnRpZmljYXRpb25Nb2RlID0gdHlwZW9mIEVudmlyb25tZW50SWRlbnRpZmljYXRpb25Nb2RlLlR5cGU7XG5leHBvcnQgY29uc3QgREVGQVVMVF9FTlZJUk9OTUVOVF9JREVOVElGSUNBVElPTl9NT0RFOiBFbnZpcm9ubWVudElkZW50aWZpY2F0aW9uTW9kZSA9IFwiYXJ0d29ya1wiO1xuXG5leHBvcnQgY29uc3QgU25hcFNob3RLZXlDaG9yZCA9IEtleWJpbmRpbmdTaG9ydGN1dC5jaGVjayhcbiAgU2NoZW1hLm1ha2VGaWx0ZXIoXG4gICAgKHNob3J0Y3V0KSA9PlxuICAgICAgc2hvcnRjdXQubWV0YUtleSB8fFxuICAgICAgc2hvcnRjdXQuY3RybEtleSB8fFxuICAgICAgc2hvcnRjdXQuc2hpZnRLZXkgfHxcbiAgICAgIHNob3J0Y3V0LmFsdEtleSB8fFxuICAgICAgc2hvcnRjdXQubW9kS2V5IHx8XG4gICAgICBcIlNuYXBzaG90IHNob3J0Y3V0IHJlcXVpcmVzIGEgbW9kaWZpZXIuXCIsXG4gICksXG4pO1xuZXhwb3J0IHR5cGUgU25hcFNob3RLZXlDaG9yZCA9IHR5cGVvZiBTbmFwU2hvdEtleUNob3JkLlR5cGU7XG5leHBvcnQgY29uc3QgU05BUF9TSE9UX01PRElGSUVSUyA9IFtcInNoaWZ0XCIsIFwibWV0YVwiLCBcImNvbnRyb2xcIiwgXCJhbHRcIl0gYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgU25hcFNob3RNb2RpZmllciA9IFNjaGVtYS5MaXRlcmFscyhTTkFQX1NIT1RfTU9ESUZJRVJTKTtcbmV4cG9ydCB0eXBlIFNuYXBTaG90TW9kaWZpZXIgPSB0eXBlb2YgU25hcFNob3RNb2RpZmllci5UeXBlO1xuZXhwb3J0IGNvbnN0IFNuYXBTaG90U2hvcnRjdXQgPSBTY2hlbWEuVW5pb24oW1xuICBTY2hlbWEuU3RydWN0KHsga2luZDogU2NoZW1hLkxpdGVyYWwoXCJib3RoLXNoaWZ0LWtleXNcIikgfSksXG4gIFNjaGVtYS5TdHJ1Y3QoeyBraW5kOiBTY2hlbWEuTGl0ZXJhbChcIm1vZGlmaWVyLXBhaXJcIiksIG1vZGlmaWVyOiBTbmFwU2hvdE1vZGlmaWVyIH0pLFxuICBTbmFwU2hvdEtleUNob3JkLFxuXSk7XG5leHBvcnQgdHlwZSBTbmFwU2hvdFNob3J0Y3V0ID0gdHlwZW9mIFNuYXBTaG90U2hvcnRjdXQuVHlwZTtcbmV4cG9ydCBjb25zdCBTbmFwU2hvdFNvdW5kID0gU2NoZW1hLkxpdGVyYWxzKFtcInNvZnQtcG9wXCIsIFwiY2FtZXJhLXNodXR0ZXJcIl0pO1xuZXhwb3J0IHR5cGUgU25hcFNob3RTb3VuZCA9IHR5cGVvZiBTbmFwU2hvdFNvdW5kLlR5cGU7XG5jb25zdCBERUZBVUxUX1NOQVBfU0hPVF9TT1VORDogU25hcFNob3RTb3VuZCA9IFwic29mdC1wb3BcIjtcblxuZXhwb3J0IHR5cGUgU25hcFNob3RNb2RpZmllclBhaXJTaG9ydGN1dCA9IEV4dHJhY3Q8U25hcFNob3RTaG9ydGN1dCwgeyByZWFkb25seSBraW5kOiBzdHJpbmcgfT47XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01vZGlmaWVyUGFpclNob3J0Y3V0KFxuICBzaG9ydGN1dDogU25hcFNob3RTaG9ydGN1dCxcbik6IHNob3J0Y3V0IGlzIFNuYXBTaG90TW9kaWZpZXJQYWlyU2hvcnRjdXQge1xuICByZXR1cm4gXCJraW5kXCIgaW4gc2hvcnRjdXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzbmFwU2hvdFNob3J0Y3V0TW9kaWZpZXJQYWlyKFxuICBzaG9ydGN1dDogU25hcFNob3RNb2RpZmllclBhaXJTaG9ydGN1dCxcbik6IFNuYXBTaG90TW9kaWZpZXIge1xuICByZXR1cm4gc2hvcnRjdXQua2luZCA9PT0gXCJib3RoLXNoaWZ0LWtleXNcIiA/IFwic2hpZnRcIiA6IHNob3J0Y3V0Lm1vZGlmaWVyO1xufVxuXG5jb25zdCBBUFBMRV9NT0RJRklFUl9MQUJFTFM6IFJlY29yZDxTbmFwU2hvdE1vZGlmaWVyLCBzdHJpbmc+ID0ge1xuICBzaGlmdDogXCJTaGlmdFwiLFxuICBtZXRhOiBcIkNvbW1hbmRcIixcbiAgY29udHJvbDogXCJDb250cm9sXCIsXG4gIGFsdDogXCJPcHRpb25cIixcbn07XG5jb25zdCBPVEhFUl9NT0RJRklFUl9MQUJFTFM6IFJlY29yZDxTbmFwU2hvdE1vZGlmaWVyLCBzdHJpbmc+ID0ge1xuICBzaGlmdDogXCJTaGlmdFwiLFxuICBtZXRhOiBcIlN1cGVyXCIsXG4gIGNvbnRyb2w6IFwiQ3RybFwiLFxuICBhbHQ6IFwiQWx0XCIsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc25hcFNob3RNb2RpZmllclBhaXJMYWJlbChtb2RpZmllcjogU25hcFNob3RNb2RpZmllciwgYXBwbGU6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBjb25zdCBsYWJlbCA9IChhcHBsZSA/IEFQUExFX01PRElGSUVSX0xBQkVMUyA6IE9USEVSX01PRElGSUVSX0xBQkVMUylbbW9kaWZpZXJdO1xuICByZXR1cm4gYCR7bGFiZWx9ICsgJHtsYWJlbH1gO1xufVxuY29uc3QgREVGQVVMVF9TTkFQX1NIT1RfU0hPUlRDVVQ6IFNuYXBTaG90U2hvcnRjdXQgPSB7XG4gIGtpbmQ6IFwiYm90aC1zaGlmdC1rZXlzXCIsXG59O1xuXG5leHBvcnQgY29uc3QgTm90aWZpY2F0aW9uTW9kZSA9IFNjaGVtYS5MaXRlcmFscyhbXG4gIFwib2ZmXCIsXG4gIFwibm90aWZpY2F0aW9uc1wiLFxuICBcInNvdW5kXCIsXG4gIFwibm90aWZpY2F0aW9ucy1hbmQtc291bmRcIixcbl0pO1xuZXhwb3J0IHR5cGUgTm90aWZpY2F0aW9uTW9kZSA9IHR5cGVvZiBOb3RpZmljYXRpb25Nb2RlLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBRdWl0Q29uZmlybWF0aW9uTW9kZSA9IFNjaGVtYS5MaXRlcmFscyhbXCJkaXJlY3RcIiwgXCJob2xkXCIsIFwiZG91YmxlLWNsaWNrXCJdKTtcbmV4cG9ydCB0eXBlIFF1aXRDb25maXJtYXRpb25Nb2RlID0gdHlwZW9mIFF1aXRDb25maXJtYXRpb25Nb2RlLlR5cGU7XG5jb25zdCBERUZBVUxUX1FVSVRfQ09ORklSTUFUSU9OX01PREU6IFF1aXRDb25maXJtYXRpb25Nb2RlID0gXCJob2xkXCI7XG5cbmNvbnN0IExlZ2FjeUNvbmZpcm1RdWl0ID0gU2NoZW1hLkJvb2xlYW4ucGlwZShcbiAgU2NoZW1hLmRlY29kZVRvKFxuICAgIFF1aXRDb25maXJtYXRpb25Nb2RlLFxuICAgIFNjaGVtYVRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybSh7XG4gICAgICBkZWNvZGU6IChjb25maXJtUXVpdCk6IFF1aXRDb25maXJtYXRpb25Nb2RlID0+IChjb25maXJtUXVpdCA/IFwiaG9sZFwiIDogXCJkaXJlY3RcIiksXG4gICAgICBlbmNvZGU6IChtb2RlKSA9PiBtb2RlID09PSBcImhvbGRcIixcbiAgICB9KSxcbiAgKSxcbik7XG5cbmNvbnN0IFF1aXRDb25maXJtYXRpb25Nb2RlU2V0dGluZyA9IFNjaGVtYS5VbmlvbihbUXVpdENvbmZpcm1hdGlvbk1vZGUsIExlZ2FjeUNvbmZpcm1RdWl0XSk7XG5cbmV4cG9ydCBjb25zdCBGb250RmFtaWx5UHJlZmVyZW5jZSA9IFNjaGVtYS5TdHJpbmcuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDIwMCkpO1xuZXhwb3J0IHR5cGUgRm9udEZhbWlseVByZWZlcmVuY2UgPSB0eXBlb2YgRm9udEZhbWlseVByZWZlcmVuY2UuVHlwZTtcblxuLyoqIENsaWVudHMgYXBwbHkgZWFjaCBlbnZpcm9ubWVudCB0aGVtZSBzZXQgb25jZTsgbGF0ZXIgbG9jYWwgY2hvaWNlcyBwZXJzaXN0IHVudGlsIHRoZSBuZXh0IHNldC4gRW1wdHkgY2xlYXJzIGl0LiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRUaGVtZVByZWZlcmVuY2UgPSBTY2hlbWEuU3RyaW5nLmNoZWNrKFNjaGVtYS5pc01heExlbmd0aCg2NCkpO1xuLy8gRXhjbHVkZWQgZnJvbSBSUEMgcGF0Y2hlcyBzbyB0MyB0aGVtZSBzZXQgY2FuIHZhbGlkYXRlIHN5bnRheCBhbmQgcmVzb2x2YWJpbGl0eS5cbmV4cG9ydCB0eXBlIERlZmF1bHRUaGVtZVByZWZlcmVuY2UgPSB0eXBlb2YgRGVmYXVsdFRoZW1lUHJlZmVyZW5jZS5UeXBlO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9CUk9XU0VSX1ZJRVdQT1JUOiBQcmV2aWV3Vmlld3BvcnRTZXR0aW5nID0gRklMTF9QUkVWSUVXX1ZJRVdQT1JUO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfQlJPV1NFUl9BVVRPX1NIT1dfRkxPQVRJTkdfUFJFVklFVyA9IHRydWU7XG5leHBvcnQge1xuICBCUk9XU0VSX1JFQ09SRElOR19GUkFNRV9SQVRFUyxcbiAgQnJvd3NlclJlY29yZGluZ0ZyYW1lUmF0ZSxcbiAgREVGQVVMVF9CUk9XU0VSX1JFQ09SRElOR19GUkFNRV9SQVRFLFxufSBmcm9tIFwiLi9wcmV2aWV3LnRzXCI7XG5leHBvcnQgY29uc3QgQnJvd3NlckxpbmtUYXJnZXQgPSBTY2hlbWEuTGl0ZXJhbHMoW1wic3lzdGVtXCIsIFwiYXBwXCJdKTtcbmV4cG9ydCB0eXBlIEJyb3dzZXJMaW5rVGFyZ2V0ID0gdHlwZW9mIEJyb3dzZXJMaW5rVGFyZ2V0LlR5cGU7XG5leHBvcnQgY29uc3QgREVGQVVMVF9CUk9XU0VSX0xJTktfVEFSR0VUOiBCcm93c2VyTGlua1RhcmdldCA9IFwic3lzdGVtXCI7XG4vKipcbiAqIFdoYXQgdGhlIGFkZHJlc3MgYmFyIHNlYXJjaGVzIHdpdGggd2hlbiB0aGUgaW5wdXQgaXMgbm90IGFuIGFkZHJlc3MuXG4gKiBcImN1c3RvbVwiIHVzZXMgYGJyb3dzZXJDdXN0b21TZWFyY2hVcmxgLCBhIHRlbXBsYXRlIHdpdGggYCVzYCBmb3IgdGhlIHF1ZXJ5LlxuICovXG5leHBvcnQgY29uc3QgQnJvd3NlclNlYXJjaEVuZ2luZSA9IFNjaGVtYS5MaXRlcmFscyhbXG4gIFwiZHVja2R1Y2tnb1wiLFxuICBcImdvb2dsZVwiLFxuICBcImJpbmdcIixcbiAgXCJicmF2ZVwiLFxuICBcImthZ2lcIixcbiAgXCJlY29zaWFcIixcbiAgXCJjdXN0b21cIixcbl0pO1xuZXhwb3J0IHR5cGUgQnJvd3NlclNlYXJjaEVuZ2luZSA9IHR5cGVvZiBCcm93c2VyU2VhcmNoRW5naW5lLlR5cGU7XG5leHBvcnQgY29uc3QgREVGQVVMVF9CUk9XU0VSX1NFQVJDSF9FTkdJTkU6IEJyb3dzZXJTZWFyY2hFbmdpbmUgPSBcImR1Y2tkdWNrZ29cIjtcbmV4cG9ydCBjb25zdCBCUk9XU0VSX0NVU1RPTV9TRUFSQ0hfVVJMX01BWF9MRU5HVEggPSAyMDQ4O1xuZXhwb3J0IGNvbnN0IEJyb3dzZXJDdXN0b21TZWFyY2hVcmwgPSBTY2hlbWEuU3RyaW5nLmNoZWNrKFxuICBTY2hlbWEuaXNNYXhMZW5ndGgoQlJPV1NFUl9DVVNUT01fU0VBUkNIX1VSTF9NQVhfTEVOR1RIKSxcbik7XG5cbmV4cG9ydCBjb25zdCBMb2FkQmFsYW5jaW5nV2VpZ2h0cyA9IFNjaGVtYS5SZWNvcmQoXG4gIFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgU2NoZW1hLkludC5jaGVjayhTY2hlbWEuaXNCZXR3ZWVuKHsgbWluaW11bTogMCwgbWF4aW11bTogMTAwIH0pKSxcbik7XG5cbmV4cG9ydCBjb25zdCBEaWZmQ29sb3JTY2hlbWUgPSBTY2hlbWEuTGl0ZXJhbHMoW1wicmVkLWdyZWVuXCIsIFwiYmx1ZS1vcmFuZ2VcIl0pO1xuXG5leHBvcnQgY29uc3QgQ2hhdFdpZHRoID0gU2NoZW1hLkxpdGVyYWxzKFtcImNvbWZvcnRhYmxlXCIsIFwid2lkZVwiLCBcImZ1bGxcIl0pO1xuZXhwb3J0IHR5cGUgQ2hhdFdpZHRoID0gdHlwZW9mIENoYXRXaWR0aC5UeXBlO1xuXG5leHBvcnQgY29uc3QgTW9kZWxGYXZvcml0ZSA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBwcm92aWRlcjogUHJvdmlkZXJJbnN0YW5jZUlkLFxuICBtb2RlbDogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxufSk7XG5leHBvcnQgY29uc3QgTW9kZWxGYXZvcml0ZXMgPSBTY2hlbWEuQXJyYXkoTW9kZWxGYXZvcml0ZSk7XG5leHBvcnQgY29uc3QgUHJvdmlkZXJNb2RlbFByZWZlcmVuY2VzID0gU2NoZW1hLlJlY29yZChcbiAgUHJvdmlkZXJJbnN0YW5jZUlkLFxuICBTY2hlbWEuU3RydWN0KHtcbiAgICBoaWRkZW5Nb2RlbHM6IFNjaGVtYS5BcnJheShTY2hlbWEuU3RyaW5nKS5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKFtdKSkpLFxuICAgIG1vZGVsT3JkZXI6IFNjaGVtYS5BcnJheShTY2hlbWEuU3RyaW5nKS5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKFtdKSkpLFxuICB9KSxcbik7XG5leHBvcnQgdHlwZSBNb2RlbFByZWZlcmVuY2VzID0ge1xuICByZWFkb25seSBmYXZvcml0ZXM6IHR5cGVvZiBNb2RlbEZhdm9yaXRlcy5UeXBlO1xuICByZWFkb25seSBwcm92aWRlck1vZGVsUHJlZmVyZW5jZXM6IHR5cGVvZiBQcm92aWRlck1vZGVsUHJlZmVyZW5jZXMuVHlwZTtcbn07XG5cbmV4cG9ydCBjb25zdCBDbGllbnRTZXR0aW5nc1NjaGVtYSA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBub3RpZmljYXRpb25Nb2RlOiBOb3RpZmljYXRpb25Nb2RlLnBpcGUoXG4gICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoXCJvZmZcIiBhcyBjb25zdCkpLFxuICApLFxuICBpbkFwcE5vdGlmaWNhdGlvbnNFbmFibGVkOiBTY2hlbWEuQm9vbGVhbi5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKGZhbHNlKSkpLFxuICBkaWZmQ29sb3JTY2hlbWU6IERpZmZDb2xvclNjaGVtZS5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKFwicmVkLWdyZWVuXCIgYXMgY29uc3QpKSxcbiAgKSxcbiAgY2hhdFdpZHRoOiBDaGF0V2lkdGgucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChcImNvbWZvcnRhYmxlXCIgYXMgY29uc3QpKSksXG4gIGxvYWRCYWxhbmNpbmdFbmFibGVkOiBTY2hlbWEuQm9vbGVhbi5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKGZhbHNlKSkpLFxuICBsb2FkQmFsYW5jaW5nV2VpZ2h0czogTG9hZEJhbGFuY2luZ1dlaWdodHMucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZCh7fSkpKSxcbiAgYXBwZWFyYW5jZUNvbnRyYXN0OiBBcHBlYXJhbmNlQ29udHJhc3QucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChERUZBVUxUX0FQUEVBUkFOQ0VfQ09OVFJBU1QpKSxcbiAgKSxcbiAgLy8gWmVybyBhdm9pZHMgcGVyLWZyYW1lIGxheW91dCB3b3JrIGZyb20gd2lkdGgvaGVpZ2h0IHRyYW5zaXRpb25zLlxuICBwYW5lbEFuaW1hdGlvbkR1cmF0aW9uTXM6IFBhbmVsQW5pbWF0aW9uRHVyYXRpb25Ncy5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKERFRkFVTFRfUEFORUxfQU5JTUFUSU9OX0RVUkFUSU9OX01TKSksXG4gICksXG4gIGJyb3dzZXJEZWZhdWx0Vmlld3BvcnQ6IFByZXZpZXdWaWV3cG9ydFNldHRpbmcucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChERUZBVUxUX0JST1dTRVJfVklFV1BPUlQpKSxcbiAgKSxcbiAgYnJvd3NlckRlZmF1bHRab29tRmFjdG9yOiBQcmV2aWV3Wm9vbUZhY3Rvci5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKERFRkFVTFRfUFJFVklFV19aT09NX0ZBQ1RPUikpLFxuICApLFxuICBicm93c2VyRGVmYXVsdEFwcGVhcmFuY2U6IFByZXZpZXdBcHBlYXJhbmNlUHJlZmVyZW5jZS5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKERFRkFVTFRfUFJFVklFV19BUFBFQVJBTkNFKSksXG4gICksXG4gIGJyb3dzZXJSZWNvcmRpbmdGcmFtZVJhdGU6IEJyb3dzZXJSZWNvcmRpbmdGcmFtZVJhdGUucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChERUZBVUxUX0JST1dTRVJfUkVDT1JESU5HX0ZSQU1FX1JBVEUpKSxcbiAgKSxcbiAgYnJvd3NlclJlY29yZGluZ1Nob3dLZXlQcmVzc2VzOiBTY2hlbWEuQm9vbGVhbi5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKGZhbHNlKSksXG4gICksXG4gIGJyb3dzZXJSZWNvcmRpbmdTaG93TW91c2VQcmVzc2VzOiBTY2hlbWEuQm9vbGVhbi5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKGZhbHNlKSksXG4gICksXG5cbiAgYnJvd3NlckxpbmtUYXJnZXQ6IEJyb3dzZXJMaW5rVGFyZ2V0LnBpcGUoXG4gICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoREVGQVVMVF9CUk9XU0VSX0xJTktfVEFSR0VUKSksXG4gICksXG5cbiAgYnJvd3NlclNlYXJjaEVuZ2luZTogQnJvd3NlclNlYXJjaEVuZ2luZS5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKERFRkFVTFRfQlJPV1NFUl9TRUFSQ0hfRU5HSU5FKSksXG4gICksXG5cbiAgLy8gS2VwdCB3aGVuIHRoZSBlbmdpbmUgaXMgc3dpdGNoZWQgYXdheSBmcm9tIFwiY3VzdG9tXCIgc28gc3dpdGNoaW5nIGJhY2sgcmVzdG9yZXMgaXQuXG4gIGJyb3dzZXJDdXN0b21TZWFyY2hVcmw6IEJyb3dzZXJDdXN0b21TZWFyY2hVcmwucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChcIlwiKSksXG4gICksXG5cbiAgYnJvd3NlckF1dG9TaG93RmxvYXRpbmdQcmV2aWV3OiBTY2hlbWEuQm9vbGVhbi5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKERFRkFVTFRfQlJPV1NFUl9BVVRPX1NIT1dfRkxPQVRJTkdfUFJFVklFVykpLFxuICApLFxuXG4gIGJyb3dzZXJQcm9maWxlczogU2NoZW1hLkFycmF5KEJyb3dzZXJQcm9maWxlKS5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKFtdKSksXG4gICksXG5cbiAgYnJvd3NlckRlZmF1bHRQcm9maWxlSWQ6IEJyb3dzZXJQcm9maWxlSWQucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChERUZBVUxUX0JST1dTRVJfUFJPRklMRV9JRCkpLFxuICApLFxuXG4gIGNvbmZpcm1RdWl0OiBRdWl0Q29uZmlybWF0aW9uTW9kZVNldHRpbmcucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChERUZBVUxUX1FVSVRfQ09ORklSTUFUSU9OX01PREUpKSxcbiAgKSxcbiAgY29uZmlybVRocmVhZEFyY2hpdmU6IFNjaGVtYS5Cb29sZWFuLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoZmFsc2UpKSksXG4gIGNvbmZpcm1UaHJlYWREZWxldGU6IFNjaGVtYS5Cb29sZWFuLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQodHJ1ZSkpKSxcbiAgY29uZmlybVRocmVhZFVucGluOiBTY2hlbWEuQm9vbGVhbi5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKGZhbHNlKSkpLFxuICBkaXNtaXNzZWRQcm92aWRlclVwZGF0ZU5vdGlmaWNhdGlvbktleXM6IFNjaGVtYS5BcnJheShUcmltbWVkTm9uRW1wdHlTdHJpbmcpLnBpcGUoXG4gICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoW10pKSxcbiAgKSxcbiAgZGlmZkZpbGVzQ29sbGFwc2VkOiBTY2hlbWEuQm9vbGVhbi5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKHRydWUpKSksXG4gIGRpZmZJZ25vcmVXaGl0ZXNwYWNlOiBTY2hlbWEuQm9vbGVhbi5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKHRydWUpKSksXG4gIGRpZmZMYXlvdXQ6IERpZmZMYXlvdXQucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChERUZBVUxUX0RJRkZfTEFZT1VUKSkpLFxuICBlbnZpcm9ubWVudElkZW50aWZpY2F0aW9uTW9kZTogRW52aXJvbm1lbnRJZGVudGlmaWNhdGlvbk1vZGUucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChERUZBVUxUX0VOVklST05NRU5UX0lERU5USUZJQ0FUSU9OX01PREUpKSxcbiAgKSxcbiAgZ2xhc3NPcGFjaXR5OiBHbGFzc09wYWNpdHkucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChERUZBVUxUX0dMQVNTX09QQUNJVFkpKSxcbiAgKSxcbiAgZm9udFNpemVJbnRlcmZhY2U6IEludGVyZmFjZUZvbnRTaXplLnBpcGUoXG4gICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoREVGQVVMVF9JTlRFUkZBQ0VfRk9OVF9TSVpFKSksXG4gICksXG4gIGZvbnRTaXplUHJvbXB0OiBQcm9tcHRGb250U2l6ZS5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKERFRkFVTFRfUFJPTVBUX0ZPTlRfU0laRSkpLFxuICApLFxuICBmb250U2l6ZUNvZGU6IENvZGVGb250U2l6ZS5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKERFRkFVTFRfQ09ERV9GT05UX1NJWkUpKSxcbiAgKSxcbiAgZm9udFNpemVUZXJtaW5hbDogVGVybWluYWxGb250U2l6ZS5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKERFRkFVTFRfVEVSTUlOQUxfRk9OVF9TSVpFKSksXG4gICksXG4gIGZvbnRGYW1pbHlDb2RlOiBGb250RmFtaWx5UHJlZmVyZW5jZS5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKFwiXCIpKSksXG4gIGZvbnRGYW1pbHlDb21wb3NlcjogRm9udEZhbWlseVByZWZlcmVuY2UucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChcIlwiKSkpLFxuICBmb250RmFtaWx5U2FuczogRm9udEZhbWlseVByZWZlcmVuY2UucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChcIlwiKSkpLFxuICBmb250RmFtaWx5VGVybWluYWw6IEZvbnRGYW1pbHlQcmVmZXJlbmNlLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoXCJcIikpKSxcblxuICBmb250U21vb3RoaW5nOiBTY2hlbWEuQm9vbGVhbi5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKHRydWUpKSksXG4gIC8vIE9sZGVyIGluc3RhbGxzIGFsc28gZGVjb2RlIHRvIG51bGw7IG9uYm9hcmRpbmcgbXVzdCBhZGRpdGlvbmFsbHkgcmVxdWlyZSBhbiBlbXB0eSB3b3Jrc3BhY2UuXG4gIG9uYm9hcmRpbmdDb21wbGV0ZWRBdDogU2NoZW1hLk51bGxPcihTY2hlbWEuU3RyaW5nKS5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKG51bGwpKSxcbiAgKSxcbiAgcGVyc2lzdENvbXBvc2VyQ29udGV4dFN0cmlwOiBTY2hlbWEuQm9vbGVhbi5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKGZhbHNlKSksXG4gICksXG5cbiAgZmF2b3JpdGVzOiBNb2RlbEZhdm9yaXRlcy5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKFtdKSkpLFxuICBwcm92aWRlck1vZGVsUHJlZmVyZW5jZXM6IFByb3ZpZGVyTW9kZWxQcmVmZXJlbmNlcy5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKHt9KSksXG4gICksXG4gIHB1bGxSZXF1ZXN0TWVyZ2VNZXRob2RPdmVycmlkZXM6IFNjaGVtYS5SZWNvcmQoXG4gICAgVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICAgIFB1bGxSZXF1ZXN0TWVyZ2VNZXRob2QsXG4gICkucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZCh7fSkpKSxcblxuICBwdWxsUmVxdWVzdExpbmtzT3BlbkluQXBwOiBTY2hlbWEuQm9vbGVhbi5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKHRydWUpKSksXG5cbiAgcGxhbk1vZGVFbmFibGVkOiBTY2hlbWEuQm9vbGVhbi5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKGZhbHNlKSkpLFxuICBjb250ZXh0V2luZG93TWV0ZXJFbmFibGVkOiBTY2hlbWEuQm9vbGVhbi5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKGZhbHNlKSkpLFxuICBjb21wb3NlckNvbGxhcHNlT25TY3JvbGw6IFNjaGVtYS5Cb29sZWFuLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQodHJ1ZSkpKSxcbiAgY29tcG9zZXJSaWNoVGV4dEVuYWJsZWQ6IFNjaGVtYS5Cb29sZWFuLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQodHJ1ZSkpKSxcbiAgc2VuZFNob3J0Y3V0OiBTY2hlbWEuTGl0ZXJhbHMoW1wiZW50ZXJcIiwgXCJtb2QtZW50ZXItbXVsdGlsaW5lXCIsIFwibW9kLWVudGVyXCJdKS5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKFwiZW50ZXJcIikpLFxuICApLFxuICBmb2xsb3dVcEJlaGF2aW9yOiBTY2hlbWEuTGl0ZXJhbHMoW1wicXVldWVcIiwgXCJzdGVlclwiXSkucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChcInF1ZXVlXCIpKSxcbiAgKSxcbiAgcHJvYWN0aXZlUGFuZWxzRW5hYmxlZDogU2NoZW1hLkJvb2xlYW4ucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChmYWxzZSkpKSxcbiAgc2hvd1NraWxsc0luU2xhc2hNZW51OiBTY2hlbWEuQm9vbGVhbi5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKHRydWUpKSksXG4gIGxlZ2FjeVNpZGViYXJFbmFibGVkOiBTY2hlbWEuQm9vbGVhbi5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKGZhbHNlKSkpLFxuICBzaWRlYmFyV29ya2luZ1NoZWxmRW5hYmxlZDogU2NoZW1hLkJvb2xlYW4ucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChmYWxzZSkpLFxuICApLFxuICBzaWRlYmFyUHJvamVjdEdyb3VwaW5nTW9kZTogU2lkZWJhclByb2plY3RHcm91cGluZ01vZGUucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChERUZBVUxUX1NJREVCQVJfUFJPSkVDVF9HUk9VUElOR19NT0RFKSksXG4gICksXG4gIHNpZGViYXJQcm9qZWN0R3JvdXBpbmdPdmVycmlkZXM6IFNjaGVtYS5SZWNvcmQoXG4gICAgVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICAgIFNpZGViYXJQcm9qZWN0R3JvdXBpbmdNb2RlLFxuICApLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoe30pKSksXG4gIHNpZGViYXJQcm9qZWN0U29ydE9yZGVyOiBTaWRlYmFyUHJvamVjdFNvcnRPcmRlci5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKERFRkFVTFRfU0lERUJBUl9QUk9KRUNUX1NPUlRfT1JERVIpKSxcbiAgKSxcbiAgc2lkZWJhclRocmVhZFNvcnRPcmRlcjogU2lkZWJhclRocmVhZFNvcnRPcmRlci5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKERFRkFVTFRfU0lERUJBUl9USFJFQURfU09SVF9PUkRFUikpLFxuICApLFxuICBzaWRlYmFyVGhyZWFkUHJldmlld0NvdW50OiBTaWRlYmFyVGhyZWFkUHJldmlld0NvdW50LnBpcGUoXG4gICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoREVGQVVMVF9TSURFQkFSX1RIUkVBRF9QUkVWSUVXX0NPVU5UKSksXG4gICksXG4gIHRpbWVzdGFtcEZvcm1hdDogVGltZXN0YW1wRm9ybWF0LnBpcGUoXG4gICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoREVGQVVMVF9USU1FU1RBTVBfRk9STUFUKSksXG4gICksXG4gIHNuYXBTaG90RW5hYmxlZDogU2NoZW1hLkJvb2xlYW4ucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChmYWxzZSkpKSxcbiAgc25hcFNob3RJbmNsdWRlQWNjZXNzaWJpbGl0eTogU2NoZW1hLkJvb2xlYW4ucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZCh0cnVlKSksXG4gICksXG4gIHNuYXBTaG90U2hvcnRjdXQ6IFNuYXBTaG90U2hvcnRjdXQucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChERUZBVUxUX1NOQVBfU0hPVF9TSE9SVENVVCkpLFxuICApLFxuICBzbmFwU2hvdFBsYXlTb3VuZDogU2NoZW1hLkJvb2xlYW4ucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZCh0cnVlKSkpLFxuICBzbmFwU2hvdFNvdW5kOiBTbmFwU2hvdFNvdW5kLnBpcGUoXG4gICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoREVGQVVMVF9TTkFQX1NIT1RfU09VTkQpKSxcbiAgKSxcbiAgc25hcFNob3RGbGFzaDogU2NoZW1hLkJvb2xlYW4ucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZCh0cnVlKSkpLFxuICBzbmFwU2hvdEFuaW1hdGlvbnM6IFNjaGVtYS5Cb29sZWFuLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQodHJ1ZSkpKSxcbiAgd29yZFdyYXA6IFNjaGVtYS5Cb29sZWFuLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQodHJ1ZSkpKSxcbiAgLy8gT3B0LWluIFRlWCB0eXBlc2V0dGluZyBpbiByZW5kZXJlZCBNYXJrZG93bi4gT2ZmIGtlZXBzIG1hdGggcGFyc2luZyBhbmRcbiAgLy8gS2FUZVggb3V0IG9mIHRoZSByZW5kZXIgcGF0aCBlbnRpcmVseS5cbiAgbWF0aFJlbmRlcmluZ0VuYWJsZWQ6IFNjaGVtYS5Cb29sZWFuLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoZmFsc2UpKSksXG59KTtcbmV4cG9ydCB0eXBlIENsaWVudFNldHRpbmdzID0gdHlwZW9mIENsaWVudFNldHRpbmdzU2NoZW1hLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0NMSUVOVF9TRVRUSU5HUzogQ2xpZW50U2V0dGluZ3MgPSBTY2hlbWEuZGVjb2RlU3luYyhDbGllbnRTZXR0aW5nc1NjaGVtYSkoe30pO1xuXG5jb25zdCBVc2FnZU1vZGVsVG9rZW5QcmljZSA9IFNjaGVtYS5OdW1iZXIuY2hlY2soXG4gIFNjaGVtYS5pc0Zpbml0ZSgpLFxuICBTY2hlbWEuaXNHcmVhdGVyVGhhbk9yRXF1YWxUbygwKSxcbik7XG5cbi8qKiBPbWl0dGVkIGNhY2hlIHJhdGVzIHVzZSB0aGUgaW5wdXQgcmF0ZS4gKi9cbmV4cG9ydCBjb25zdCBVc2FnZU1vZGVsUHJpY2VPdmVycmlkZSA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBpbnB1dENvc3RQZXJNaWxsaW9uVG9rZW5zOiBVc2FnZU1vZGVsVG9rZW5QcmljZSxcbiAgb3V0cHV0Q29zdFBlck1pbGxpb25Ub2tlbnM6IFVzYWdlTW9kZWxUb2tlblByaWNlLFxuICBjYWNoZVJlYWRDb3N0UGVyTWlsbGlvblRva2VuczogU2NoZW1hLm9wdGlvbmFsS2V5KFVzYWdlTW9kZWxUb2tlblByaWNlKSxcbiAgY2FjaGVXcml0ZUNvc3RQZXJNaWxsaW9uVG9rZW5zOiBTY2hlbWEub3B0aW9uYWxLZXkoVXNhZ2VNb2RlbFRva2VuUHJpY2UpLFxufSk7XG5leHBvcnQgdHlwZSBVc2FnZU1vZGVsUHJpY2VPdmVycmlkZSA9IHR5cGVvZiBVc2FnZU1vZGVsUHJpY2VPdmVycmlkZS5UeXBlO1xuXG5leHBvcnQgY29uc3QgbWFrZUJpbmFyeVBhdGhTZXR0aW5nID0gKGZhbGxiYWNrOiBzdHJpbmcpID0+XG4gIFRyaW1tZWRTdHJpbmcucGlwZShcbiAgICBTY2hlbWEuZGVjb2RlVG8oXG4gICAgICBTY2hlbWEuU3RyaW5nLFxuICAgICAgU2NoZW1hVHJhbnNmb3JtYXRpb24udHJhbnNmb3JtRWZmZWN0KHtcbiAgICAgICAgZGVjb2RlOiAodmFsdWUpID0+IEVmZmVjdC5zdWNjZWVkKHZhbHVlIHx8IGZhbGxiYWNrKSxcbiAgICAgICAgZW5jb2RlOiAodmFsdWUpID0+IEVmZmVjdC5zdWNjZWVkKHZhbHVlKSxcbiAgICAgIH0pLFxuICAgICksXG4gICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoZmFsbGJhY2spKSxcbiAgKTtcblxuZXhwb3J0IHR5cGUgUHJvdmlkZXJTZXR0aW5nc0Zvcm1Db250cm9sID0gXCJ0ZXh0XCIgfCBcInBhc3N3b3JkXCIgfCBcInRleHRhcmVhXCIgfCBcInN3aXRjaFwiIHwgXCJzZWxlY3RcIjtcblxuZXhwb3J0IGludGVyZmFjZSBQcm92aWRlclNldHRpbmdzRm9ybU9wdGlvbiB7XG4gIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxhYmVsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvdmlkZXJTZXR0aW5nc0Zvcm1Bbm5vdGF0aW9uIHtcbiAgcmVhZG9ubHkgY29udHJvbD86IFByb3ZpZGVyU2V0dGluZ3NGb3JtQ29udHJvbCB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXI/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGhpZGRlbj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGNsZWFyV2hlbkVtcHR5PzogXCJvbWl0XCIgfCBcInBlcnNpc3RcIiB8IHVuZGVmaW5lZDtcblxuICByZWFkb25seSBvcHRpb25zPzogUmVhZG9ubHlBcnJheTxQcm92aWRlclNldHRpbmdzRm9ybU9wdGlvbj4gfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWNyZXRTZXR0aW5nc0ZpZWxkcyhzY2hlbWE6IHtcbiAgcmVhZG9ubHkgZmllbGRzOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBTY2hlbWEuVG9wPj47XG59KTogUmVhZG9ubHlBcnJheTxzdHJpbmc+IHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHNjaGVtYS5maWVsZHMpLmZsYXRNYXAoKFtmaWVsZCwgZmllbGRTY2hlbWFdKSA9PiB7XG4gICAgcmV0dXJuIGlzU2VjcmV0U2V0dGluZyhmaWVsZFNjaGVtYSkgPyBbZmllbGRdIDogW107XG4gIH0pO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3ZpZGVyU2V0dGluZ3NGb3JtU2NoZW1hQW5ub3RhdGlvbiB7XG4gIHJlYWRvbmx5IG9yZGVyPzogcmVhZG9ubHkgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG59XG5cbmRlY2xhcmUgbW9kdWxlIFwiZWZmZWN0L1NjaGVtYVwiIHtcbiAgbmFtZXNwYWNlIEFubm90YXRpb25zIHtcbiAgICBpbnRlcmZhY2UgQW5ub3RhdGlvbnMge1xuICAgICAgLyoqIFN0b3JlIHRoaXMgY3JlZGVudGlhbCBzZXBhcmF0ZWx5IGFuZCBleHBvc2Ugb25seSB3aGV0aGVyIGl0IGlzIGNvbmZpZ3VyZWQgdG8gY2xpZW50cy4gKi9cbiAgICAgIHJlYWRvbmx5IHNldHRpbmdzU2VjcmV0PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAgIHJlYWRvbmx5IHByb3ZpZGVyU2V0dGluZ3NGb3JtPzogUHJvdmlkZXJTZXR0aW5nc0Zvcm1Bbm5vdGF0aW9uIHwgdW5kZWZpbmVkO1xuICAgICAgcmVhZG9ubHkgcHJvdmlkZXJTZXR0aW5nc0Zvcm1TY2hlbWE/OiBQcm92aWRlclNldHRpbmdzRm9ybVNjaGVtYUFubm90YXRpb24gfCB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWNyZXRTZXR0aW5nPFMgZXh0ZW5kcyBTY2hlbWEuVG9wPihzY2hlbWE6IFMpOiBTW1wiUmVidWlsZFwiXSB7XG4gIHJldHVybiBzY2hlbWEuYW5ub3RhdGVLZXkoeyBzZXR0aW5nc1NlY3JldDogdHJ1ZSB9KTtcbn1cblxuLyoqIEEgbWFza2VkIGZvcm0gZmllbGQgaXMgYSBjcmVkZW50aWFsIHRvbywgc28gbm9uZSBpcyBzYXZlZCBvciBzZW50IHRvIGNsaWVudHMgYXMgcGxhaW4gdGV4dC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1NlY3JldFNldHRpbmcoc2NoZW1hOiBTY2hlbWEuVG9wKTogYm9vbGVhbiB7XG4gIGNvbnN0IGFubm90YXRpb25zID0gU2NoZW1hLnJlc29sdmVBbm5vdGF0aW9uc0tleShzY2hlbWEpID8/IFNjaGVtYS5yZXNvbHZlQW5ub3RhdGlvbnMoc2NoZW1hKTtcbiAgcmV0dXJuIChcbiAgICBhbm5vdGF0aW9ucz8uc2V0dGluZ3NTZWNyZXQgPT09IHRydWUgfHxcbiAgICBhbm5vdGF0aW9ucz8ucHJvdmlkZXJTZXR0aW5nc0Zvcm0/LmNvbnRyb2wgPT09IFwicGFzc3dvcmRcIlxuICApO1xufVxuXG5leHBvcnQgdHlwZSBQcm92aWRlclNldHRpbmdzT3JkZXI8RmllbGRzIGV4dGVuZHMgU2NoZW1hLlN0cnVjdC5GaWVsZHM+ID0gcmVhZG9ubHkgRXh0cmFjdDxcbiAga2V5b2YgRmllbGRzLFxuICBzdHJpbmdcbj5bXTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VQcm92aWRlclNldHRpbmdzU2NoZW1hPGNvbnN0IEZpZWxkcyBleHRlbmRzIFNjaGVtYS5TdHJ1Y3QuRmllbGRzPihcbiAgZmllbGRzOiBGaWVsZHMsXG4gIG9wdGlvbnM/OiB7XG4gICAgcmVhZG9ubHkgb3JkZXI/OiBQcm92aWRlclNldHRpbmdzT3JkZXI8RmllbGRzPiB8IHVuZGVmaW5lZDtcbiAgfSxcbik6IFNjaGVtYS5TdHJ1Y3Q8RmllbGRzPiB7XG4gIHJldHVybiBTY2hlbWEuU3RydWN0KGZpZWxkcykucGlwZShcbiAgICBTY2hlbWEuYW5ub3RhdGUoe1xuICAgICAgcHJvdmlkZXJTZXR0aW5nc0Zvcm1TY2hlbWE6XG4gICAgICAgIG9wdGlvbnM/Lm9yZGVyID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB7IG9yZGVyOiBvcHRpb25zLm9yZGVyIH0sXG4gICAgfSksXG4gICk7XG59XG5cbmV4cG9ydCBjb25zdCBDb2RleFNldHRpbmdzID0gbWFrZVByb3ZpZGVyU2V0dGluZ3NTY2hlbWEoXG4gIHtcbiAgICBzZXR1cE1vZGU6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuTGl0ZXJhbHMoW1wibWFuYWdlZFwiLCBcImV4aXN0aW5nXCJdKSkucGlwZShcbiAgICAgIFNjaGVtYS5hbm5vdGF0ZUtleSh7IHByb3ZpZGVyU2V0dGluZ3NGb3JtOiB7IGhpZGRlbjogdHJ1ZSB9IH0pLFxuICAgICksXG4gICAgZW5hYmxlZDogU2NoZW1hLkJvb2xlYW4ucGlwZShcbiAgICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKHRydWUpKSxcbiAgICAgIFNjaGVtYS5hbm5vdGF0ZUtleSh7IHByb3ZpZGVyU2V0dGluZ3NGb3JtOiB7IGhpZGRlbjogdHJ1ZSB9IH0pLFxuICAgICksXG4gICAgYmluYXJ5UGF0aDogbWFrZUJpbmFyeVBhdGhTZXR0aW5nKFwiY29kZXhcIikucGlwZShcbiAgICAgIFNjaGVtYS5hbm5vdGF0ZUtleSh7XG4gICAgICAgIHRpdGxlOiBcIkJpbmFyeSBwYXRoXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIlBhdGggdG8gdGhlIENvZGV4IGJpbmFyeSB1c2VkIGJ5IHRoaXMgaW5zdGFuY2UuXCIsXG4gICAgICAgIHByb3ZpZGVyU2V0dGluZ3NGb3JtOiB7IHBsYWNlaG9sZGVyOiBcImNvZGV4XCIsIGNsZWFyV2hlbkVtcHR5OiBcIm9taXRcIiB9LFxuICAgICAgfSksXG4gICAgKSxcbiAgICBob21lUGF0aDogVHJpbW1lZFN0cmluZy5waXBlKFxuICAgICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoXCJcIikpLFxuICAgICAgU2NoZW1hLmFubm90YXRlS2V5KHtcbiAgICAgICAgdGl0bGU6IFwiQ09ERVhfSE9NRSBwYXRoXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkN1c3RvbSBDb2RleCBob21lIGFuZCBjb25maWcgZGlyZWN0b3J5LlwiLFxuICAgICAgICBwcm92aWRlclNldHRpbmdzRm9ybToge1xuICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIn4vLmNvZGV4XCIsXG4gICAgICAgICAgY2xlYXJXaGVuRW1wdHk6IFwib21pdFwiLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgKSxcbiAgICBzaGFkb3dIb21lUGF0aDogVHJpbW1lZFN0cmluZy5waXBlKFxuICAgICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoXCJcIikpLFxuICAgICAgU2NoZW1hLmFubm90YXRlS2V5KHtcbiAgICAgICAgdGl0bGU6IFwiU2hhZG93IGhvbWUgcGF0aFwiLFxuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICBcIkFjY291bnQtc3BlY2lmaWMgQ29kZXggaG9tZS4gS2VlcHMgYXV0aC5qc29uIHNlcGFyYXRlIHdoaWxlIHNoYXJpbmcgc3RhdGUgZnJvbSBDT0RFWF9IT01FLlwiLFxuICAgICAgICBwcm92aWRlclNldHRpbmdzRm9ybToge1xuICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIn4vLmNvZGV4LXQzL3BlcnNvbmFsXCIsXG4gICAgICAgICAgY2xlYXJXaGVuRW1wdHk6IFwib21pdFwiLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgKSxcbiAgICBsYXVuY2hBcmdzOiBUcmltbWVkU3RyaW5nLnBpcGUoXG4gICAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChcIlwiKSksXG4gICAgICBTY2hlbWEuYW5ub3RhdGVLZXkoe1xuICAgICAgICB0aXRsZTogXCJMYXVuY2ggYXJndW1lbnRzXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkFkZGl0aW9uYWwgQ0xJIGFyZ3VtZW50cyBwYXNzZWQgdG8gY29kZXggYXBwLXNlcnZlciBvbiBzZXNzaW9uIHN0YXJ0LlwiLFxuICAgICAgfSksXG4gICAgKSxcbiAgICBjdXN0b21Nb2RlbHM6IFNjaGVtYS5BcnJheShDdXN0b21Nb2RlbFNldHRpbmcpLnBpcGUoXG4gICAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChbXSkpLFxuICAgICAgU2NoZW1hLmFubm90YXRlS2V5KHsgcHJvdmlkZXJTZXR0aW5nc0Zvcm06IHsgaGlkZGVuOiB0cnVlIH0gfSksXG4gICAgKSxcbiAgfSxcbiAge1xuICAgIG9yZGVyOiBbXCJiaW5hcnlQYXRoXCIsIFwiaG9tZVBhdGhcIiwgXCJzaGFkb3dIb21lUGF0aFwiLCBcImxhdW5jaEFyZ3NcIl0sXG4gIH0sXG4pO1xuZXhwb3J0IHR5cGUgQ29kZXhTZXR0aW5ncyA9IHR5cGVvZiBDb2RleFNldHRpbmdzLlR5cGU7XG5cbmNvbnN0IENMQVVERV9BVVRPX0NPTVBBQ1RfV0lORE9XX1BBVFRFUk4gPSAvXig/OnxbMS05XVxcZHs1fXwxMDAwMDAwKSQvO1xuXG5leHBvcnQgY29uc3QgSURMRV9DT01QQUNUSU9OX01PREVTID0gW1xuICB7IHZhbHVlOiBcIm9uUmV0dXJuXCIsIGxhYmVsOiBcIldoZW4geW91IHJldHVyblwiIH0sXG4gIHsgdmFsdWU6IFwiYmVmb3JlQ2FjaGVFeHBpcmVzXCIsIGxhYmVsOiBcIkJlZm9yZSB0aGUgY2FjaGUgZXhwaXJlcyAoYmV0YSlcIiB9LFxuICB7IHZhbHVlOiBcIm9mZlwiLCBsYWJlbDogXCJOZXZlclwiIH0sXG5dIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IElkbGVDb21wYWN0aW9uTW9kZSA9IFNjaGVtYS5MaXRlcmFscyhJRExFX0NPTVBBQ1RJT05fTU9ERVMubWFwKChtb2RlKSA9PiBtb2RlLnZhbHVlKSk7XG5leHBvcnQgdHlwZSBJZGxlQ29tcGFjdGlvbk1vZGUgPSB0eXBlb2YgSWRsZUNvbXBhY3Rpb25Nb2RlLlR5cGU7XG5cbi8vIFNoaXBwZWQgY2xpZW50cyByZWplY3QgdGhlIHdob2xlIHNlcnZlciBjb25maWcgdW5sZXNzIGBjb21wYWN0SWRsZVRocmVhZHNgIGlzIGJvb2xlYW4uXG4vLyBLZWVwIHRoZSBtb2RlIGluIGBpZGxlQ29tcGFjdGlvbmAsIGJ1dCBhY2NlcHQgc3RyaW5ncyBmcm9tIG9sZGVyIHNlcnZlcnMuXG5jb25zdCBMZWdhY3lDb21wYWN0SWRsZVRocmVhZHMgPSBTY2hlbWEuVW5pb24oW1NjaGVtYS5Cb29sZWFuLCBJZGxlQ29tcGFjdGlvbk1vZGVdKTtcblxuY29uc3QgSU5TVEFOQ0VfSURMRV9DT01QQUNUSU9OX01PREVTID0gW1xuICB7IHZhbHVlOiBcImRlZmF1bHRcIiwgbGFiZWw6IFwiVXNlIGRlZmF1bHRcIiB9LFxuICAuLi5JRExFX0NPTVBBQ1RJT05fTU9ERVMsXG5dIGFzIGNvbnN0O1xuY29uc3QgSW5zdGFuY2VJZGxlQ29tcGFjdGlvbiA9IFNjaGVtYS5MaXRlcmFscyhcbiAgSU5TVEFOQ0VfSURMRV9DT01QQUNUSU9OX01PREVTLm1hcCgobW9kZSkgPT4gbW9kZS52YWx1ZSksXG4pO1xuXG5leHBvcnQgY29uc3QgQ2xhdWRlU2V0dGluZ3MgPSBtYWtlUHJvdmlkZXJTZXR0aW5nc1NjaGVtYShcbiAge1xuICAgIGVuYWJsZWQ6IFNjaGVtYS5Cb29sZWFuLnBpcGUoXG4gICAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZCh0cnVlKSksXG4gICAgICBTY2hlbWEuYW5ub3RhdGVLZXkoeyBwcm92aWRlclNldHRpbmdzRm9ybTogeyBoaWRkZW46IHRydWUgfSB9KSxcbiAgICApLFxuICAgIGJpbmFyeVBhdGg6IG1ha2VCaW5hcnlQYXRoU2V0dGluZyhcImNsYXVkZVwiKS5waXBlKFxuICAgICAgU2NoZW1hLmFubm90YXRlS2V5KHtcbiAgICAgICAgdGl0bGU6IFwiQmluYXJ5IHBhdGhcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiUGF0aCB0byB0aGUgQ2xhdWRlIGJpbmFyeSB1c2VkIGJ5IHRoaXMgaW5zdGFuY2UuXCIsXG4gICAgICAgIHByb3ZpZGVyU2V0dGluZ3NGb3JtOiB7IHBsYWNlaG9sZGVyOiBcImNsYXVkZVwiLCBjbGVhcldoZW5FbXB0eTogXCJvbWl0XCIgfSxcbiAgICAgIH0pLFxuICAgICksXG4gICAgaG9tZVBhdGg6IFRyaW1tZWRTdHJpbmcucGlwZShcbiAgICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKFwiXCIpKSxcbiAgICAgIFNjaGVtYS5hbm5vdGF0ZUtleSh7XG4gICAgICAgIHRpdGxlOiBcIkNMQVVERV9DT05GSUdfRElSIHBhdGhcIixcbiAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgXCJDdXN0b20gQ2xhdWRlIGhvbWUgYW5kIGNvbmZpZyBkaXJlY3RvcnkuIEtlZXBzIC5jbGF1ZGUuanNvbiBhbmQgLmNsYXVkZSBzZXBhcmF0ZS5cIixcbiAgICAgICAgcHJvdmlkZXJTZXR0aW5nc0Zvcm06IHsgcGxhY2Vob2xkZXI6IFwifi8uY2xhdWRlXCIsIGNsZWFyV2hlbkVtcHR5OiBcIm9taXRcIiB9LFxuICAgICAgfSksXG4gICAgKSxcbiAgICBjdXN0b21Nb2RlbHM6IFNjaGVtYS5BcnJheShDdXN0b21Nb2RlbFNldHRpbmcpLnBpcGUoXG4gICAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChbXSkpLFxuICAgICAgU2NoZW1hLmFubm90YXRlS2V5KHsgcHJvdmlkZXJTZXR0aW5nc0Zvcm06IHsgaGlkZGVuOiB0cnVlIH0gfSksXG4gICAgKSxcbiAgICBsYXVuY2hBcmdzOiBTY2hlbWEuU3RyaW5nLnBpcGUoXG4gICAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChcIlwiKSksXG4gICAgICBTY2hlbWEuYW5ub3RhdGVLZXkoe1xuICAgICAgICB0aXRsZTogXCJMYXVuY2ggYXJndW1lbnRzXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkFkZGl0aW9uYWwgQ0xJIGFyZ3VtZW50cyBwYXNzZWQgb24gc2Vzc2lvbiBzdGFydC5cIixcbiAgICAgICAgcHJvdmlkZXJTZXR0aW5nc0Zvcm06IHtcbiAgICAgICAgICBwbGFjZWhvbGRlcjogXCJlLmcuIC0tY2hyb21lXCIsXG4gICAgICAgICAgY2xlYXJXaGVuRW1wdHk6IFwib21pdFwiLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgKSxcbiAgICBhdXRvQ29tcGFjdFdpbmRvdzogVHJpbW1lZFN0cmluZy5jaGVjayhcbiAgICAgIFNjaGVtYS5pc1BhdHRlcm4oQ0xBVURFX0FVVE9fQ09NUEFDVF9XSU5ET1dfUEFUVEVSTiksXG4gICAgKS5waXBlKFxuICAgICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoXCJcIikpLFxuICAgICAgU2NoZW1hLmFubm90YXRlS2V5KHtcbiAgICAgICAgdGl0bGU6IFwiQXV0by1jb21wYWN0IGFmdGVyXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgIFwiQ29tcGFjdCBhZnRlciAxMDAsMDAwIHRvIDEsMDAwLDAwMCB0b2tlbnMuIExlYXZlIGVtcHR5IHRvIHVzZSBDbGF1ZGUncyBkZWZhdWx0LlwiLFxuICAgICAgICBwcm92aWRlclNldHRpbmdzRm9ybToge1xuICAgICAgICAgIHBsYWNlaG9sZGVyOiBcImUuZy4gMzAwMDAwXCIsXG4gICAgICAgICAgY2xlYXJXaGVuRW1wdHk6IFwib21pdFwiLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgKSxcbiAgICBpZGxlQ29tcGFjdGlvbjogSW5zdGFuY2VJZGxlQ29tcGFjdGlvbi5waXBlKFxuICAgICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoXCJkZWZhdWx0XCIgYXMgY29uc3QpKSxcbiAgICAgIFNjaGVtYS5hbm5vdGF0ZUtleSh7XG4gICAgICAgIHRpdGxlOiBcIkNvbXBhY3QgaWRsZSB0aHJlYWRzXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgIFwiV2hlbiB0byBjb21wYWN0IGFuIGlkbGUgdGhyZWFkIG92ZXIgMjAwLDAwMCB0b2tlbnM6IGFmdGVyIHlvdSByZXR1cm4sIGp1c3QgYmVmb3JlIGl0cyBwcm9tcHQgY2FjaGUgZXhwaXJlcywgb3IgbmV2ZXIuIE92ZXJyaWRlcyB0aGUgZGVmYXVsdCBpbiBHZW5lcmFsIHNldHRpbmdzLlwiLFxuICAgICAgICBwcm92aWRlclNldHRpbmdzRm9ybToge1xuICAgICAgICAgIGNvbnRyb2w6IFwic2VsZWN0XCIsXG4gICAgICAgICAgb3B0aW9uczogSU5TVEFOQ0VfSURMRV9DT01QQUNUSU9OX01PREVTLFxuICAgICAgICAgIGNsZWFyV2hlbkVtcHR5OiBcIm9taXRcIixcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICksXG4gIH0sXG4gIHtcbiAgICBvcmRlcjogW1wiYmluYXJ5UGF0aFwiLCBcImhvbWVQYXRoXCIsIFwiYXV0b0NvbXBhY3RXaW5kb3dcIiwgXCJpZGxlQ29tcGFjdGlvblwiLCBcImxhdW5jaEFyZ3NcIl0sXG4gIH0sXG4pO1xuZXhwb3J0IHR5cGUgQ2xhdWRlU2V0dGluZ3MgPSB0eXBlb2YgQ2xhdWRlU2V0dGluZ3MuVHlwZTtcblxuZXhwb3J0IGNvbnN0IEFOVElHUkFWSVRZX0FVVEhfTUVUSE9EUyA9IFtcbiAgeyB2YWx1ZTogXCJvYXV0aC1wZXJzb25hbFwiLCBsYWJlbDogXCJHb29nbGUgYWNjb3VudFwiIH0sXG4gIHsgdmFsdWU6IFwib2F1dGgtYnVzaW5lc3NcIiwgbGFiZWw6IFwiR2VtaW5pIEVudGVycHJpc2VcIiB9LFxuICB7IHZhbHVlOiBcImdlbWluaS1hcGkta2V5XCIsIGxhYmVsOiBcIkdlbWluaSBBUEkga2V5XCIgfSxcbiAgeyB2YWx1ZTogXCJhZ2VudC1wbGF0Zm9ybVwiLCBsYWJlbDogXCJBZ2VudCBQbGF0Zm9ybSAoVmVydGV4IEFJKVwiIH0sXG5dIGFzIGNvbnN0IHNhdGlzZmllcyBSZWFkb25seUFycmF5PFByb3ZpZGVyU2V0dGluZ3NGb3JtT3B0aW9uPjtcbmV4cG9ydCBjb25zdCBBbnRpZ3Jhdml0eUF1dGhNZXRob2QgPSBTY2hlbWEuTGl0ZXJhbHMoXG4gIEFOVElHUkFWSVRZX0FVVEhfTUVUSE9EUy5tYXAoKG1ldGhvZCkgPT4gbWV0aG9kLnZhbHVlKSxcbik7XG5leHBvcnQgdHlwZSBBbnRpZ3Jhdml0eUF1dGhNZXRob2QgPSB0eXBlb2YgQW50aWdyYXZpdHlBdXRoTWV0aG9kLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBBbnRpZ3Jhdml0eVNldHRpbmdzID0gbWFrZVByb3ZpZGVyU2V0dGluZ3NTY2hlbWEoXG4gIHtcbiAgICBlbmFibGVkOiBTY2hlbWEuQm9vbGVhbi5waXBlKFxuICAgICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoZmFsc2UpKSxcbiAgICAgIFNjaGVtYS5hbm5vdGF0ZUtleSh7IHByb3ZpZGVyU2V0dGluZ3NGb3JtOiB7IGhpZGRlbjogdHJ1ZSB9IH0pLFxuICAgICksXG4gICAgYXV0aE1ldGhvZDogQW50aWdyYXZpdHlBdXRoTWV0aG9kLnBpcGUoXG4gICAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChcIm9hdXRoLXBlcnNvbmFsXCIgYXMgY29uc3QpKSxcbiAgICAgIFNjaGVtYS5hbm5vdGF0ZUtleSh7XG4gICAgICAgIHRpdGxlOiBcIlNpZ24taW4gbWV0aG9kXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgIFwiR29vZ2xlIGFjY291bnRzIHVzZSB5b3VyIHN1YnNjcmlwdGlvbjsgQVBJIGtleXMgYW5kIEFnZW50IFBsYXRmb3JtIGJpbGwgdXNhZ2UuXCIsXG4gICAgICAgIHByb3ZpZGVyU2V0dGluZ3NGb3JtOiB7XG4gICAgICAgICAgY29udHJvbDogXCJzZWxlY3RcIixcbiAgICAgICAgICBvcHRpb25zOiBBTlRJR1JBVklUWV9BVVRIX01FVEhPRFMsXG4gICAgICAgICAgY2xlYXJXaGVuRW1wdHk6IFwib21pdFwiLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgKSxcbiAgICBhcGlLZXk6IFRyaW1tZWRTdHJpbmcucGlwZShcbiAgICAgIHNlY3JldFNldHRpbmcsXG4gICAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChcIlwiKSksXG4gICAgICBTY2hlbWEuYW5ub3RhdGVLZXkoe1xuICAgICAgICB0aXRsZTogXCJBUEkga2V5XCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcIkdlbWluaSBvciBWZXJ0ZXggQUkgZXhwcmVzcyBrZXkuIFN0b3JlZCBzZXBhcmF0ZWx5IG9uIHRoZSBob3N0LlwiLFxuICAgICAgICBwcm92aWRlclNldHRpbmdzRm9ybToge1xuICAgICAgICAgIGNvbnRyb2w6IFwicGFzc3dvcmRcIixcbiAgICAgICAgICBwbGFjZWhvbGRlcjogXCJPcHRpb25hbFwiLFxuICAgICAgICAgIGNsZWFyV2hlbkVtcHR5OiBcIm9taXRcIixcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICksXG4gICAgZ2NwUHJvamVjdDogVHJpbW1lZFN0cmluZy5waXBlKFxuICAgICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoXCJcIikpLFxuICAgICAgU2NoZW1hLmFubm90YXRlS2V5KHtcbiAgICAgICAgdGl0bGU6IFwiR0NQIHByb2plY3RcIixcbiAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgXCJSZXF1aXJlZCBmb3IgR2VtaW5pIEVudGVycHJpc2UuIEFnZW50IFBsYXRmb3JtIHVzZXMgaXQgd2hlbiBubyBBUEkga2V5IGlzIHNldC5cIixcbiAgICAgICAgcHJvdmlkZXJTZXR0aW5nc0Zvcm06IHsgcGxhY2Vob2xkZXI6IFwibXktcHJvamVjdC1pZFwiLCBjbGVhcldoZW5FbXB0eTogXCJvbWl0XCIgfSxcbiAgICAgIH0pLFxuICAgICksXG4gICAgZ2NwTG9jYXRpb246IFRyaW1tZWRTdHJpbmcucGlwZShcbiAgICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKFwiXCIpKSxcbiAgICAgIFNjaGVtYS5hbm5vdGF0ZUtleSh7XG4gICAgICAgIHRpdGxlOiBcIkdDUCBsb2NhdGlvblwiLFxuICAgICAgICBkZXNjcmlwdGlvbjogXCJSZWdpb24gZm9yIEdlbWluaSBFbnRlcnByaXNlIG9yIEFnZW50IFBsYXRmb3JtLlwiLFxuICAgICAgICBwcm92aWRlclNldHRpbmdzRm9ybTogeyBwbGFjZWhvbGRlcjogXCJ1cy1jZW50cmFsMVwiLCBjbGVhcldoZW5FbXB0eTogXCJvbWl0XCIgfSxcbiAgICAgIH0pLFxuICAgICksXG4gICAgYmluYXJ5UGF0aDogVHJpbW1lZFN0cmluZy5waXBlKFxuICAgICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoXCJcIikpLFxuICAgICAgU2NoZW1hLmFubm90YXRlS2V5KHtcbiAgICAgICAgdGl0bGU6IFwiQmluYXJ5IHBhdGhcIixcbiAgICAgICAgZGVzY3JpcHRpb246IFwiQ3VzdG9tIEFDUCBleGVjdXRhYmxlLiBMZWF2ZSBlbXB0eSB0byBzZWxlY3QgYXV0b21hdGljYWxseS5cIixcbiAgICAgICAgcHJvdmlkZXJTZXR0aW5nc0Zvcm06IHsgcGxhY2Vob2xkZXI6IFwiQXV0b21hdGljXCIsIGNsZWFyV2hlbkVtcHR5OiBcInBlcnNpc3RcIiB9LFxuICAgICAgfSksXG4gICAgKSxcbiAgICBjdXN0b21Nb2RlbHM6IFNjaGVtYS5BcnJheShDdXN0b21Nb2RlbFNldHRpbmcpLnBpcGUoXG4gICAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChbXSkpLFxuICAgICAgU2NoZW1hLmFubm90YXRlS2V5KHsgcHJvdmlkZXJTZXR0aW5nc0Zvcm06IHsgaGlkZGVuOiB0cnVlIH0gfSksXG4gICAgKSxcbiAgfSxcbiAgeyBvcmRlcjogW1wiYXV0aE1ldGhvZFwiLCBcImFwaUtleVwiLCBcImdjcFByb2plY3RcIiwgXCJnY3BMb2NhdGlvblwiLCBcImJpbmFyeVBhdGhcIl0gfSxcbik7XG5leHBvcnQgdHlwZSBBbnRpZ3Jhdml0eVNldHRpbmdzID0gdHlwZW9mIEFudGlncmF2aXR5U2V0dGluZ3MuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFVzYWdlTGltaXRTb3VyY2VDb25maWcgPSBTY2hlbWEuU3RydWN0KHtcbiAga2luZDogU2NoZW1hLkxpdGVyYWwoXCJjbGlwcm94eVwiKSxcbiAgbGFiZWw6IFNjaGVtYS5vcHRpb25hbChUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxuICB1cmw6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgbWFuYWdlbWVudEtleTogVHJpbW1lZFN0cmluZy5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKFwiXCIpKSwgc2VjcmV0U2V0dGluZyksXG4gIGVuYWJsZWQ6IFNjaGVtYS5Cb29sZWFuLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQodHJ1ZSkpKSxcbn0pO1xuZXhwb3J0IHR5cGUgVXNhZ2VMaW1pdFNvdXJjZUNvbmZpZyA9IHR5cGVvZiBVc2FnZUxpbWl0U291cmNlQ29uZmlnLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTb3VyY2VDb250cm9sSG9zdFNldHRpbmdzID0gU2NoZW1hLlJlY29yZChTY2hlbWEuU3RyaW5nLCBTY2hlbWEuVW5rbm93bik7XG5leHBvcnQgdHlwZSBTb3VyY2VDb250cm9sSG9zdFNldHRpbmdzID0gdHlwZW9mIFNvdXJjZUNvbnRyb2xIb3N0U2V0dGluZ3MuVHlwZTtcblxuZXhwb3J0IGNvbnN0IE9ic2VydmFiaWxpdHlTZXR0aW5ncyA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBvdGxwVHJhY2VzVXJsOiBUcmltbWVkU3RyaW5nLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoXCJcIikpKSxcbiAgb3RscE1ldHJpY3NVcmw6IFRyaW1tZWRTdHJpbmcucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChcIlwiKSkpLFxuICBvdGxwTG9nc1VybDogVHJpbW1lZFN0cmluZy5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKFwiXCIpKSksXG59KTtcbmV4cG9ydCB0eXBlIE9ic2VydmFiaWxpdHlTZXR0aW5ncyA9IHR5cGVvZiBPYnNlcnZhYmlsaXR5U2V0dGluZ3MuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNvdXJjZUNvbnRyb2xXcml0aW5nU3R5bGVNb2RlID0gU2NoZW1hLkxpdGVyYWxzKFtcbiAgXCJyZXBvX2NvbnZlbnRpb25zXCIsXG4gIFwiY29udmVudGlvbmFsX2NvbW1pdHNcIixcbiAgXCJjdXN0b21cIixcbl0pO1xuZXhwb3J0IHR5cGUgU291cmNlQ29udHJvbFdyaXRpbmdTdHlsZU1vZGUgPSB0eXBlb2YgU291cmNlQ29udHJvbFdyaXRpbmdTdHlsZU1vZGUuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFNvdXJjZUNvbnRyb2xXcml0aW5nU3R5bGVTZXR0aW5ncyA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBtb2RlOiBTb3VyY2VDb250cm9sV3JpdGluZ1N0eWxlTW9kZS5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKFwicmVwb19jb252ZW50aW9uc1wiIGFzIGNvbnN0KSksXG4gICksXG4gIGN1c3RvbUluc3RydWN0aW9uczogVHJpbW1lZFN0cmluZy5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKFwiXCIpKSksXG4gIGZvbGxvd0NoYW5nZVJlcXVlc3RUZW1wbGF0ZXM6IFNjaGVtYS5Cb29sZWFuLnBpcGUoXG4gICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQodHJ1ZSkpLFxuICApLFxufSk7XG5leHBvcnQgdHlwZSBTb3VyY2VDb250cm9sV3JpdGluZ1N0eWxlU2V0dGluZ3MgPSB0eXBlb2YgU291cmNlQ29udHJvbFdyaXRpbmdTdHlsZVNldHRpbmdzLlR5cGU7XG5cbmNvbnN0IExlZ2FjeVNvdXJjZUNvbnRyb2xXcml0aW5nU3R5bGUgPSBUcmltbWVkU3RyaW5nLnBpcGUoXG4gIFNjaGVtYS5kZWNvZGVUbyhcbiAgICBTY2hlbWEudG9UeXBlKFNvdXJjZUNvbnRyb2xXcml0aW5nU3R5bGVTZXR0aW5ncyksXG4gICAgU2NoZW1hVHJhbnNmb3JtYXRpb24udHJhbnNmb3JtKHtcbiAgICAgIGRlY29kZTogKHZhbHVlKTogU291cmNlQ29udHJvbFdyaXRpbmdTdHlsZVNldHRpbmdzID0+ICh7XG4gICAgICAgIG1vZGU6IHZhbHVlLmxlbmd0aCA+IDAgPyBcImN1c3RvbVwiIDogXCJyZXBvX2NvbnZlbnRpb25zXCIsXG4gICAgICAgIGN1c3RvbUluc3RydWN0aW9uczogdmFsdWUsXG4gICAgICAgIGZvbGxvd0NoYW5nZVJlcXVlc3RUZW1wbGF0ZXM6IHRydWUsXG4gICAgICB9KSxcbiAgICAgIGVuY29kZTogKHZhbHVlKSA9PiB2YWx1ZS5jdXN0b21JbnN0cnVjdGlvbnMsXG4gICAgfSksXG4gICksXG4pO1xuXG4vLyBUaGUgc3RydWN0IG1lbWJlciBjb21lcyBmaXJzdCBzbyBlbmNvZGluZyB1c2VzIGl0cyBkZWZhdWx0ZWQgZmllbGRzOiB0aGUgc2VydmVyIHN0cmlwc1xuLy8gZGVmYXVsdCBzdWItZmllbGRzIGJlZm9yZSB3cml0aW5nIHNldHRpbmdzLmpzb24sIGFuZCBhIHRvVHlwZSB0YXJnZXQgd291bGQgcmVqZWN0IHRoZW0uXG5jb25zdCBTb3VyY2VDb250cm9sV3JpdGluZ1N0eWxlU2V0dGluZyA9IFNjaGVtYS5VbmlvbihbXG4gIFNvdXJjZUNvbnRyb2xXcml0aW5nU3R5bGVTZXR0aW5ncyxcbiAgTGVnYWN5U291cmNlQ29udHJvbFdyaXRpbmdTdHlsZSxcbl0pO1xuXG5leHBvcnQgY29uc3QgQnJhbmNoTmFtaW5nTW9kZSA9IFNjaGVtYS5MaXRlcmFscyhbXCJzdGF0aWNcIiwgXCJzZW1hbnRpY1wiLCBcImN1c3RvbVwiXSk7XG5leHBvcnQgdHlwZSBCcmFuY2hOYW1pbmdNb2RlID0gdHlwZW9mIEJyYW5jaE5hbWluZ01vZGUuVHlwZTtcblxuZXhwb3J0IGludGVyZmFjZSBCcmFuY2hOYW1pbmdPcHRpb25zIHtcbiAgbW9kZTogQnJhbmNoTmFtaW5nTW9kZTtcbiAgcHJlZml4OiBzdHJpbmc7XG4gIGluc3RydWN0aW9uczogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BVVRPTUFUSUNfR0lUX0ZFVENIX0lOVEVSVkFMID0gRHVyYXRpb24uc2Vjb25kcygzMCk7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QUk9WSURFUl9IRUFMVEhfUkVGUkVTSF9JTlRFUlZBTCA9IER1cmF0aW9uLm1pbnV0ZXMoNSk7XG5cbmV4cG9ydCBjb25zdCBCYWNrZ3JvdW5kQWN0aXZpdHlQcm9maWxlID0gU2NoZW1hLkxpdGVyYWxzKFtcbiAgXCJiYWxhbmNlZFwiLFxuICBcInBlcmZvcm1hbmNlXCIsXG4gIFwiYmF0dGVyeS1zYXZlclwiLFxuXSk7XG5leHBvcnQgdHlwZSBCYWNrZ3JvdW5kQWN0aXZpdHlQcm9maWxlID0gdHlwZW9mIEJhY2tncm91bmRBY3Rpdml0eVByb2ZpbGUuVHlwZTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0JBQ0tHUk9VTkRfQUNUSVZJVFlfUFJPRklMRTogQmFja2dyb3VuZEFjdGl2aXR5UHJvZmlsZSA9IFwiYmFsYW5jZWRcIjtcblxuZXhwb3J0IGNvbnN0IEJhY2tncm91bmRBY3Rpdml0eVByb2ZpbGVTZWxlY3Rpb24gPSBTY2hlbWEuTGl0ZXJhbHMoW1xuICBcImJhbGFuY2VkXCIsXG4gIFwicGVyZm9ybWFuY2VcIixcbiAgXCJiYXR0ZXJ5LXNhdmVyXCIsXG4gIFwiY3VzdG9tXCIsXG5dKTtcbmV4cG9ydCB0eXBlIEJhY2tncm91bmRBY3Rpdml0eVByb2ZpbGVTZWxlY3Rpb24gPSB0eXBlb2YgQmFja2dyb3VuZEFjdGl2aXR5UHJvZmlsZVNlbGVjdGlvbi5UeXBlO1xuXG5leHBvcnQgY29uc3QgQmFja2dyb3VuZEFjdGl2aXR5T3ZlcnJpZGVzID0gU2NoZW1hLlN0cnVjdCh7XG4gIGF1dG9tYXRpY0dpdEZldGNoSW50ZXJ2YWw6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuRHVyYXRpb25Gcm9tTWlsbGlzKSxcbiAgcHJvdmlkZXJIZWFsdGhSZWZyZXNoSW50ZXJ2YWw6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuRHVyYXRpb25Gcm9tTWlsbGlzKSxcbiAgaG9zdFBvd2VyTW9uaXRvckFjdGl2ZUludGVydmFsOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkR1cmF0aW9uRnJvbU1pbGxpcyksXG4gIGhvc3RQb3dlck1vbml0b3JJZGxlSW50ZXJ2YWw6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuRHVyYXRpb25Gcm9tTWlsbGlzKSxcbiAgaWRsZUNsaWVudFR0bDogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5EdXJhdGlvbkZyb21NaWxsaXMpLFxuICBwYXVzZVdoZW5Ib3N0TG9ja2VkOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkJvb2xlYW4pLFxuICBwYXVzZVdoZW5Ib3N0TG93UG93ZXI6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG4gIHBhdXNlV2hlbkNsaWVudExvd1Bvd2VyOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkJvb2xlYW4pLFxuICBwYXVzZVdoZW5PbkJhdHRlcnk6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG59KTtcbmV4cG9ydCB0eXBlIEJhY2tncm91bmRBY3Rpdml0eU92ZXJyaWRlcyA9IHR5cGVvZiBCYWNrZ3JvdW5kQWN0aXZpdHlPdmVycmlkZXMuVHlwZTtcblxuZXhwb3J0IGNvbnN0IEJhY2tncm91bmRBY3Rpdml0eVNldHRpbmdzID0gU2NoZW1hLlN0cnVjdCh7XG4gIHNjaGVtYVZlcnNpb246IFNjaGVtYS5MaXRlcmFsKDEpLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoMSBhcyBjb25zdCkpKSxcbiAgcHJvZmlsZTogQmFja2dyb3VuZEFjdGl2aXR5UHJvZmlsZVNlbGVjdGlvbi5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKERFRkFVTFRfQkFDS0dST1VORF9BQ1RJVklUWV9QUk9GSUxFKSksXG4gICksXG4gIGJhc2VQcm9maWxlOiBTY2hlbWEub3B0aW9uYWxLZXkoQmFja2dyb3VuZEFjdGl2aXR5UHJvZmlsZSksXG4gIG92ZXJyaWRlczogQmFja2dyb3VuZEFjdGl2aXR5T3ZlcnJpZGVzLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoe30pKSksXG59KS5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKHt9KSkpO1xuZXhwb3J0IHR5cGUgQmFja2dyb3VuZEFjdGl2aXR5U2V0dGluZ3MgPSB0eXBlb2YgQmFja2dyb3VuZEFjdGl2aXR5U2V0dGluZ3MuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFJlc3BvbnNlU3RyZWFtaW5nTW9kZSA9IFNjaGVtYS5MaXRlcmFscyhbXCJ0dXJuXCIsIFwicGFyYWdyYXBoXCJdKTtcbmV4cG9ydCB0eXBlIFJlc3BvbnNlU3RyZWFtaW5nTW9kZSA9IHR5cGVvZiBSZXNwb25zZVN0cmVhbWluZ01vZGUuVHlwZTtcblxuY29uc3QgU3RvcmFnZVJldGVudGlvbkRheXMgPSBTY2hlbWEuTnVsbE9yKFxuICBTY2hlbWEuSW50LmNoZWNrKFNjaGVtYS5pc0JldHdlZW4oeyBtaW5pbXVtOiAxLCBtYXhpbXVtOiAzNjUwIH0pKSxcbik7XG5jb25zdCBTZXR0bGVkV29ya3RyZWVSZXRlbnRpb25EYXlzID0gU2NoZW1hLk51bGxPcihcbiAgU2NoZW1hLkludC5jaGVjayhTY2hlbWEuaXNCZXR3ZWVuKHsgbWluaW11bTogMCwgbWF4aW11bTogMzY1MCB9KSksXG4pO1xuXG5leHBvcnQgY29uc3QgV29ya3RyZWVLZWVwV2hlbiA9IFNjaGVtYS5MaXRlcmFscyhbXG4gIFwiYW55LWxvY2FsLWZpbGVzXCIsXG4gIFwidW5jb21taXR0ZWQtY2hhbmdlc1wiLFxuICBcInRyYWNrZWQtY2hhbmdlc1wiLFxuXSk7XG5leHBvcnQgdHlwZSBXb3JrdHJlZUtlZXBXaGVuID0gdHlwZW9mIFdvcmt0cmVlS2VlcFdoZW4uVHlwZTtcblxuZXhwb3J0IGNvbnN0IFdvcmt0cmVlQ2xlYW51cFJ1bGVzID0gU2NoZW1hLlN0cnVjdCh7XG4gIHdvcmt0cmVlS2VlcFdoZW46IFdvcmt0cmVlS2VlcFdoZW4ucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChcInVuY29tbWl0dGVkLWNoYW5nZXNcIikpLFxuICApLFxuICB3b3JrdHJlZUFmdGVyRGF5czogU3RvcmFnZVJldGVudGlvbkRheXMsXG4gIHdvcmt0cmVlU2V0dGxlZEFmdGVyRGF5czogU2V0dGxlZFdvcmt0cmVlUmV0ZW50aW9uRGF5cy5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKG51bGwpKSxcbiAgKSxcbiAgd29ya3RyZWVPbk1lcmdlOiBTY2hlbWEuQm9vbGVhbixcbiAgd29ya3RyZWVPbkRlbGV0ZTogU2NoZW1hLkJvb2xlYW4sXG4gIHdvcmt0cmVlVW5jaGFuZ2VkOiBTY2hlbWEuQm9vbGVhbixcbn0pO1xuZXhwb3J0IHR5cGUgV29ya3RyZWVDbGVhbnVwUnVsZXMgPSB0eXBlb2YgV29ya3RyZWVDbGVhbnVwUnVsZXMuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFdvcmt0cmVlQ2xlYW51cCA9IFNjaGVtYS5OdWxsT3IoXG4gIFNjaGVtYS5VbmlvbihbXG4gICAgU2NoZW1hLlN0cnVjdCh7IG1vZGU6IFNjaGVtYS5MaXRlcmFsKFwib2ZmXCIpIH0pLFxuICAgIFNjaGVtYS5TdHJ1Y3QoeyBtb2RlOiBTY2hlbWEuTGl0ZXJhbChcImN1c3RvbVwiKSwgcnVsZXM6IFdvcmt0cmVlQ2xlYW51cFJ1bGVzIH0pLFxuICBdKSxcbik7XG5leHBvcnQgdHlwZSBXb3JrdHJlZUNsZWFudXAgPSB0eXBlb2YgV29ya3RyZWVDbGVhbnVwLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBQUk9KRUNUX1NDT1BFRF9TRVJWRVJfU0VUVElOR19LRVlTID0gW1xuICBcIndvcmt0cmVlQ2xlYW51cFwiLFxuICBcImRlZmF1bHRNb2RlbFNlbGVjdGlvblwiLFxuICBcImRlZmF1bHRSdW50aW1lTW9kZVwiLFxuICBcImRlZmF1bHRUaHJlYWRFbnZNb2RlXCIsXG4gIFwibmV3V29ya3RyZWVzU3RhcnRGcm9tT3JpZ2luXCIsXG4gIFwid29ya3RyZWVTdWJtb2R1bGVzXCIsXG4gIFwiZGVmYXVsdEF1dG9QdWxsXCIsXG4gIFwiZGVmYXVsdFByb2plY3RTY3JpcHRzXCIsXG4gIFwiZW5hYmxlQWdlbnRCcm93c2VyQWNjZXNzXCIsXG4gIFwiZW5hYmxlQWdlbnREZXZpY2VBY2Nlc3NcIixcbiAgXCJ0ZXh0R2VuZXJhdGlvbk1vZGVsU2VsZWN0aW9uXCIsXG4gIFwidGhyZWFkVGl0bGVJbnN0cnVjdGlvbnNcIixcbiAgXCJzb3VyY2VDb250cm9sV3JpdGVyTW9kZWxTZWxlY3Rpb25cIixcbiAgXCJyZXZpZXdHdWlkZU1vZGVsU2VsZWN0aW9uXCIsXG4gIFwicmV2aWV3R3VpZGVJbnN0cnVjdGlvbnNcIixcbiAgXCJzb3VyY2VDb250cm9sV3JpdGluZ1N0eWxlXCIsXG4gIFwicmVtb3ZlQWdlbnRDcmVkaXRzT25NZXJnZVwiLFxuICBcImJyYW5jaE5hbWluZ01vZGVcIixcbiAgXCJicmFuY2hOYW1lUHJlZml4XCIsXG4gIFwiYnJhbmNoTmFtZUluc3RydWN0aW9uc1wiLFxuICBcInB1bGxSZXF1ZXN0TWVyZ2VNZXRob2RcIixcbiAgXCJzaWRlYmFyQXV0b1NldHRsZU9uTWVyZ2VcIixcbiAgXCJzaWRlYmFyQXV0b1NldHRsZUFmdGVyRGF5c1wiLFxuICBcInNpZGViYXJBdXRvU2V0dGxlS2VlcFB1bGxSZXF1ZXN0c1wiLFxuICBcImNvbnRpbnVlVGhyZWFkc0FmdGVyU2VydmVyVXBkYXRlXCIsXG4gIFwicmVzcG9uc2VTdHJlYW1pbmdNb2RlXCIsXG5dIGFzIGNvbnN0O1xuZXhwb3J0IHR5cGUgUHJvamVjdFNjb3BlZFNlcnZlclNldHRpbmdLZXkgPSAodHlwZW9mIFBST0pFQ1RfU0NPUEVEX1NFUlZFUl9TRVRUSU5HX0tFWVMpW251bWJlcl07XG5cbmV4cG9ydCBjb25zdCBQcm9qZWN0UHJvdmlkZXJJbnN0YW5jZU92ZXJyaWRlID0gU2NoZW1hLlN0cnVjdCh7XG4gIGVuYWJsZWQ6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG59KTtcbmV4cG9ydCB0eXBlIFByb2plY3RQcm92aWRlckluc3RhbmNlT3ZlcnJpZGUgPSB0eXBlb2YgUHJvamVjdFByb3ZpZGVySW5zdGFuY2VPdmVycmlkZS5UeXBlO1xuXG4vKiogQWJzZW50IGtleXMgaW5oZXJpdDsgbnVsbCBpcyBhIHZhbHVlIGZvciBudWxsYWJsZSBzZXR0aW5ncy5cbiAqIHByb3ZpZGVySW5zdGFuY2VzIG92ZXJyaWRlcyBmaWVsZHMgcGVyIGluc3RhbmNlOyBvdGhlciBrZXlzIHJlcGxhY2UgdGhlIHdob2xlIHNldHRpbmcuICovXG5leHBvcnQgY29uc3QgUHJvamVjdFNldHRpbmdzT3ZlcnJpZGVzID0gU2NoZW1hLlN0cnVjdCh7XG4gIHdvcmt0cmVlQ2xlYW51cDogU2NoZW1hLm9wdGlvbmFsS2V5KFdvcmt0cmVlQ2xlYW51cCksXG4gIGRlZmF1bHRNb2RlbFNlbGVjdGlvbjogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5OdWxsT3IoTW9kZWxTZWxlY3Rpb24pKSxcbiAgZGVmYXVsdFJ1bnRpbWVNb2RlOiBTY2hlbWEub3B0aW9uYWxLZXkoUnVudGltZU1vZGUpLFxuICBkZWZhdWx0VGhyZWFkRW52TW9kZTogU2NoZW1hLm9wdGlvbmFsS2V5KFRocmVhZEVudk1vZGUpLFxuICBuZXdXb3JrdHJlZXNTdGFydEZyb21PcmlnaW46IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG4gIHdvcmt0cmVlU3VibW9kdWxlczogRm9yd2FyZENvbXBhdGlibGVPcHRpb25hbChXb3JrdHJlZVN1Ym1vZHVsZXMpLFxuICBkZWZhdWx0QXV0b1B1bGw6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG4gIGRlZmF1bHRQcm9qZWN0U2NyaXB0czogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5BcnJheShQcm9qZWN0U2NyaXB0KSksXG4gIGVuYWJsZUFnZW50QnJvd3NlckFjY2VzczogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgZW5hYmxlQWdlbnREZXZpY2VBY2Nlc3M6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG4gIHRleHRHZW5lcmF0aW9uTW9kZWxTZWxlY3Rpb246IFNjaGVtYS5vcHRpb25hbEtleShNb2RlbFNlbGVjdGlvbiksXG4gIHRocmVhZFRpdGxlSW5zdHJ1Y3Rpb25zOiBTY2hlbWEub3B0aW9uYWxLZXkoVHJpbW1lZFN0cmluZyksXG4gIHNvdXJjZUNvbnRyb2xXcml0ZXJNb2RlbFNlbGVjdGlvbjogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5OdWxsT3IoTW9kZWxTZWxlY3Rpb24pKSxcbiAgcmV2aWV3R3VpZGVNb2RlbFNlbGVjdGlvbjogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5OdWxsT3IoTW9kZWxTZWxlY3Rpb24pKSxcbiAgcmV2aWV3R3VpZGVJbnN0cnVjdGlvbnM6IFNjaGVtYS5vcHRpb25hbEtleShUcmltbWVkU3RyaW5nKSxcbiAgc291cmNlQ29udHJvbFdyaXRpbmdTdHlsZTogU2NoZW1hLm9wdGlvbmFsS2V5KFNvdXJjZUNvbnRyb2xXcml0aW5nU3R5bGVTZXR0aW5nKSxcbiAgcmVtb3ZlQWdlbnRDcmVkaXRzT25NZXJnZTogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgYnJhbmNoTmFtaW5nTW9kZTogU2NoZW1hLm9wdGlvbmFsS2V5KEJyYW5jaE5hbWluZ01vZGUpLFxuICBicmFuY2hOYW1lUHJlZml4OiBTY2hlbWEub3B0aW9uYWxLZXkoVHJpbW1lZFN0cmluZyksXG4gIGJyYW5jaE5hbWVJbnN0cnVjdGlvbnM6IFNjaGVtYS5vcHRpb25hbEtleShUcmltbWVkU3RyaW5nKSxcbiAgcHVsbFJlcXVlc3RNZXJnZU1ldGhvZDogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5OdWxsT3IoUHVsbFJlcXVlc3RNZXJnZU1ldGhvZCkpLFxuICBzaWRlYmFyQXV0b1NldHRsZU9uTWVyZ2U6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG4gIHNpZGViYXJBdXRvU2V0dGxlQWZ0ZXJEYXlzOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLk51bGxPcihTaWRlYmFyQXV0b1NldHRsZUFmdGVyRGF5cykpLFxuICBzaWRlYmFyQXV0b1NldHRsZUtlZXBQdWxsUmVxdWVzdHM6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG4gIGNvbnRpbnVlVGhyZWFkc0FmdGVyU2VydmVyVXBkYXRlOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkJvb2xlYW4pLFxuICByZXNwb25zZVN0cmVhbWluZ01vZGU6IFNjaGVtYS5vcHRpb25hbEtleShSZXNwb25zZVN0cmVhbWluZ01vZGUpLFxuICBwcm92aWRlckluc3RhbmNlczogU2NoZW1hLm9wdGlvbmFsS2V5KFxuICAgIFNjaGVtYS5SZWNvcmQoUHJvdmlkZXJJbnN0YW5jZUlkLCBQcm9qZWN0UHJvdmlkZXJJbnN0YW5jZU92ZXJyaWRlKSxcbiAgKSxcbn0gc2F0aXNmaWVzIFJlY29yZDxQcm9qZWN0U2NvcGVkU2VydmVyU2V0dGluZ0tleSB8IFwicHJvdmlkZXJJbnN0YW5jZXNcIiwgdW5rbm93bj4pO1xuZXhwb3J0IHR5cGUgUHJvamVjdFNldHRpbmdzT3ZlcnJpZGVzID0gdHlwZW9mIFByb2plY3RTZXR0aW5nc092ZXJyaWRlcy5UeXBlO1xuXG4vKiogVHJ1ZSBpZiBudWxsIHN0b3JlcyBhbiBvdmVycmlkZTsgb3RoZXJ3aXNlIG51bGwgcmVtb3ZlcyBpdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc051bGxhYmxlUHJvamVjdFNldHRpbmdzT3ZlcnJpZGUoa2V5OiBQcm9qZWN0U2NvcGVkU2VydmVyU2V0dGluZ0tleSk6IGJvb2xlYW4ge1xuICByZXR1cm4gTlVMTEFCTEVfUFJPSkVDVF9TRVRUSU5HU19PVkVSUklERVMuaGFzKGtleSk7XG59XG5jb25zdCBOVUxMQUJMRV9QUk9KRUNUX1NFVFRJTkdTX09WRVJSSURFUzogUmVhZG9ubHlTZXQ8UHJvamVjdFNjb3BlZFNlcnZlclNldHRpbmdLZXk+ID0gbmV3IFNldDxcbiAge1xuICAgIFtLIGluIFByb2plY3RTY29wZWRTZXJ2ZXJTZXR0aW5nS2V5XTogbnVsbCBleHRlbmRzIFByb2plY3RTZXR0aW5nc092ZXJyaWRlc1tLXSA/IEsgOiBuZXZlcjtcbiAgfVtQcm9qZWN0U2NvcGVkU2VydmVyU2V0dGluZ0tleV1cbj4oW1xuICBcImRlZmF1bHRNb2RlbFNlbGVjdGlvblwiLFxuICBcInNvdXJjZUNvbnRyb2xXcml0ZXJNb2RlbFNlbGVjdGlvblwiLFxuICBcInJldmlld0d1aWRlTW9kZWxTZWxlY3Rpb25cIixcbiAgXCJwdWxsUmVxdWVzdE1lcmdlTWV0aG9kXCIsXG4gIFwic2lkZWJhckF1dG9TZXR0bGVBZnRlckRheXNcIixcbl0pO1xuXG4vKiogUmVjbGFpbWFibGUgYnl0ZXMgZnJvbSB3aGljaCB0aGUgb2ZmbGluZSBgdDMgZG9jdG9yYCByZXBhaXIgaXMgd29ydGggc3VnZ2VzdGluZy4gKi9cbmV4cG9ydCBjb25zdCBEQVRBQkFTRV9DT01QQUNUSU9OX1JFQ09NTUVOREVEX0JZVEVTID0gMTAyNCAqKiAzO1xuXG5leHBvcnQgY29uc3QgRGF0YWJhc2VTdG9yYWdlU3RhdHVzID0gU2NoZW1hLlN0cnVjdCh7XG4gIGRhdGFiYXNlQnl0ZXM6IFNjaGVtYS5OdW1iZXIsXG4gIC8qKiBGcmVlIHBhZ2VzIGluc2lkZSB0aGUgZmlsZSB0aGF0IGFuIG9mZmxpbmUgVkFDVVVNIChvciBpbmNyZW1lbnRhbCBhdXRvX3ZhY3V1bSkgcmV0dXJucyB0byBkaXNrLiAqL1xuICByZWNsYWltYWJsZUJ5dGVzOiBTY2hlbWEuTnVtYmVyLFxuICAvKiogRmFsc2Ugb24gZGF0YWJhc2VzIGNyZWF0ZWQgYmVmb3JlIGluY3JlbWVudGFsIGF1dG9fdmFjdXVtOyBgdDMgZG9jdG9yYCBjb252ZXJ0cyB0aGVtLiAqL1xuICBpbmNyZW1lbnRhbFZhY3V1bUVuYWJsZWQ6IFNjaGVtYS5Cb29sZWFuLFxuICAvKiogUnVuIG9uIHRoZSBob3N0IHdoaWxlIG9mZmxpbmUuICovXG4gIGNvbXBhY3RDb21tYW5kOiBTY2hlbWEuU3RyaW5nLFxufSk7XG5leHBvcnQgdHlwZSBEYXRhYmFzZVN0b3JhZ2VTdGF0dXMgPSB0eXBlb2YgRGF0YWJhc2VTdG9yYWdlU3RhdHVzLlR5cGU7XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRSZWNvbW1lbmREYXRhYmFzZUNvbXBhY3Rpb24oc3RhdHVzOiBEYXRhYmFzZVN0b3JhZ2VTdGF0dXMpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICAhc3RhdHVzLmluY3JlbWVudGFsVmFjdXVtRW5hYmxlZCAmJlxuICAgIHN0YXR1cy5yZWNsYWltYWJsZUJ5dGVzID49IERBVEFCQVNFX0NPTVBBQ1RJT05fUkVDT01NRU5ERURfQllURVNcbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IFN0b3JhZ2VDbGVhbnVwUmVwb3J0RW50cnkgPSBTY2hlbWEuU3RydWN0KHtcbiAga2luZDogU2NoZW1hLkxpdGVyYWxzKFtcIndvcmt0cmVlXCIsIFwiYnJvd3Nlci1hcnRpZmFjdHNcIiwgXCJsb2dzXCJdKSxcbiAgb3V0Y29tZTogU2NoZW1hLkxpdGVyYWxzKFtcInJlbW92ZWRcIiwgXCJrZXB0XCIsIFwiZmFpbGVkXCJdKSxcbiAgcmVhc29uOiBTY2hlbWEuU3RyaW5nLFxuICBwYXRoOiBTY2hlbWEuTnVsbE9yKFNjaGVtYS5TdHJpbmcpLFxuICBwcm9qZWN0UGF0aDogU2NoZW1hLk51bGxPcihTY2hlbWEuU3RyaW5nKS5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKG51bGwpKSksXG4gIHRocmVhZElkOiBTY2hlbWEuTnVsbE9yKFRocmVhZElkKSxcbiAgdGhyZWFkVGl0bGU6IFNjaGVtYS5OdWxsT3IoU2NoZW1hLlN0cmluZyksXG4gIGJ5dGVzOiBTY2hlbWEuTnVsbE9yKFNjaGVtYS5OdW1iZXIpLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQobnVsbCkpKSxcbiAgZmlsZXM6IFNjaGVtYS5OdWxsT3IoU2NoZW1hLk51bWJlcikucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChudWxsKSkpLFxufSk7XG5leHBvcnQgdHlwZSBTdG9yYWdlQ2xlYW51cFJlcG9ydEVudHJ5ID0gdHlwZW9mIFN0b3JhZ2VDbGVhbnVwUmVwb3J0RW50cnkuVHlwZTtcbmV4cG9ydCBjb25zdCBTdG9yYWdlQ2xlYW51cFJlcG9ydCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICB0cmlnZ2VyOiBTY2hlbWEuTGl0ZXJhbHMoW1wiYXV0b21hdGljXCIsIFwibWFudWFsXCJdKSxcbiAgc3RhcnRlZEF0OiBTY2hlbWEuU3RyaW5nLFxuICBmaW5pc2hlZEF0OiBTY2hlbWEuU3RyaW5nLFxuICBlbnRyaWVzOiBTY2hlbWEuQXJyYXkoU3RvcmFnZUNsZWFudXBSZXBvcnRFbnRyeSksXG4gIGNvdW50czogU2NoZW1hLlN0cnVjdCh7IHJlbW92ZWQ6IFNjaGVtYS5OdW1iZXIsIGtlcHQ6IFNjaGVtYS5OdW1iZXIsIGZhaWxlZDogU2NoZW1hLk51bWJlciB9KSxcbiAgb21pdHRlZENvdW50OiBTY2hlbWEuTnVtYmVyLFxuICBieXRlc0ZyZWVkOiBTY2hlbWEuTnVtYmVyLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoMCkpKSxcbn0pO1xuZXhwb3J0IHR5cGUgU3RvcmFnZUNsZWFudXBSZXBvcnQgPSB0eXBlb2YgU3RvcmFnZUNsZWFudXBSZXBvcnQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFN0b3JhZ2VDbGVhbnVwU2V0dGluZ3MgPSBTY2hlbWEuU3RydWN0KHtcbiAgd29ya3RyZWVLZWVwV2hlbjogV29ya3RyZWVLZWVwV2hlbi5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKFwidW5jb21taXR0ZWQtY2hhbmdlc1wiKSksXG4gICksXG4gIHdvcmt0cmVlQWZ0ZXJEYXlzOiBTdG9yYWdlUmV0ZW50aW9uRGF5cy5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKG51bGwpKSksXG4gIHdvcmt0cmVlU2V0dGxlZEFmdGVyRGF5czogU2V0dGxlZFdvcmt0cmVlUmV0ZW50aW9uRGF5cy5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKG51bGwpKSxcbiAgKSxcbiAgd29ya3RyZWVPbk1lcmdlOiBTY2hlbWEuQm9vbGVhbi5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKGZhbHNlKSkpLFxuICB3b3JrdHJlZU9uRGVsZXRlOiBTY2hlbWEuQm9vbGVhbi5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKGZhbHNlKSkpLFxuICB3b3JrdHJlZVVuY2hhbmdlZDogU2NoZW1hLkJvb2xlYW4ucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChmYWxzZSkpKSxcbiAgYnJvd3NlckFydGlmYWN0c0FmdGVyRGF5czogU3RvcmFnZVJldGVudGlvbkRheXMucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChudWxsKSksXG4gICksXG4gIGxvZ3NBZnRlckRheXM6IFN0b3JhZ2VSZXRlbnRpb25EYXlzLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQobnVsbCkpKSxcbn0pO1xuZXhwb3J0IHR5cGUgU3RvcmFnZUNsZWFudXBTZXR0aW5ncyA9IHR5cGVvZiBTdG9yYWdlQ2xlYW51cFNldHRpbmdzLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJTZXR0aW5ncyA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICAvLyBOdWxsIG1lYW5zIHVubWlncmF0ZWQ7IGVtcHR5IGlzIGF1dGhvcml0YXRpdmUgYW5kIG11c3Qgbm90IHJlc3VycmVjdCBjbGVhcmVkIHByZWZlcmVuY2VzLlxuICBmYXZvcml0ZXM6IFNjaGVtYS5OdWxsT3IoTW9kZWxGYXZvcml0ZXMpLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQobnVsbCkpKSxcbiAgcHJvdmlkZXJNb2RlbFByZWZlcmVuY2VzOiBTY2hlbWEuTnVsbE9yKFByb3ZpZGVyTW9kZWxQcmVmZXJlbmNlcykucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChudWxsKSksXG4gICksXG4gIHdvcmt0cmVlQ2xlYW51cDogV29ya3RyZWVDbGVhbnVwLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQobnVsbCkpKSxcbiAgc3RvcmFnZUNsZWFudXA6IFN0b3JhZ2VDbGVhbnVwU2V0dGluZ3MucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChTY2hlbWEuZGVjb2RlU3luYyhTdG9yYWdlQ2xlYW51cFNldHRpbmdzKSh7fSkpKSxcbiAgKSxcblxuICB3b3JrdHJlZXNEaXJlY3Rvcnk6IFRyaW1tZWRTdHJpbmcucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChcIlwiKSkpLFxuICAvKiogU2VydmVyLW1haW50YWluZWQgaGlzdG9yeSBrZWVwcyBvbGQgd29ya3RyZWVzIGVsaWdpYmxlIGZvciBjbGVhbnVwIGFuZCByZXZpZXcgZGlmZnMuICovXG4gIHByZXZpb3VzV29ya3RyZWVzRGlyZWN0b3JpZXM6IFNjaGVtYS5BcnJheShUcmltbWVkU3RyaW5nKS5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKFtdKSksXG4gICksXG4gIHJlc3BvbnNlU3RyZWFtaW5nTW9kZTogUmVzcG9uc2VTdHJlYW1pbmdNb2RlLnBpcGUoXG4gICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoXCJwYXJhZ3JhcGhcIiBhcyBjb25zdCkpLFxuICApLFxuICBlbmFibGVQcm92aWRlclVwZGF0ZUNoZWNrczogU2NoZW1hLkJvb2xlYW4ucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZCh0cnVlKSkpLFxuICBjb250aW51ZVRocmVhZHNBZnRlclNlcnZlclVwZGF0ZTogU2NoZW1hLkJvb2xlYW4ucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZCh0cnVlKSksXG4gICksXG5cbiAgZW5hYmxlQWdlbnRCcm93c2VyQWNjZXNzOiBTY2hlbWEuQm9vbGVhbi5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKHRydWUpKSksXG4gIHByb2plY3RBZ2VudEJyb3dzZXJBY2Nlc3NPdmVycmlkZXM6IFNjaGVtYS5SZWNvcmQoUHJvamVjdElkLCBTY2hlbWEuQm9vbGVhbikucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZCh7fSkpLFxuICApLFxuICBkZWZhdWx0QXV0b1B1bGw6IFNjaGVtYS5Cb29sZWFuLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoZmFsc2UpKSksXG4gIGRlZmF1bHRQcm9qZWN0U2NyaXB0czogU2NoZW1hLkFycmF5KFByb2plY3RTY3JpcHQpLnBpcGUoXG4gICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoW10pKSxcbiAgKSxcbiAgcHJvamVjdFNjcmlwdE92ZXJyaWRlczogU2NoZW1hLlJlY29yZChQcm9qZWN0SWQsIFNjaGVtYS5OdWxsT3IoU2NoZW1hLkFycmF5KFByb2plY3RTY3JpcHQpKSkucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZCh7fSkpLFxuICApLFxuICBwcm9qZWN0QXV0b1B1bGxPdmVycmlkZXM6IFNjaGVtYS5SZWNvcmQoUHJvamVjdElkLCBTY2hlbWEuQm9vbGVhbikucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZCh7fSkpLFxuICApLFxuICBkZWZhdWx0TW9kZWxTZWxlY3Rpb246IFNjaGVtYS5OdWxsT3IoTW9kZWxTZWxlY3Rpb24pLnBpcGUoXG4gICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQobnVsbCkpLFxuICApLFxuICBkZWZhdWx0UnVudGltZU1vZGU6IFJ1bnRpbWVNb2RlLnBpcGUoXG4gICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoREVGQVVMVF9SVU5USU1FX01PREUpKSxcbiAgKSxcblxuICBwcm9qZWN0U2V0dGluZ3NPdmVycmlkZXM6IFNjaGVtYS5SZWNvcmQoUHJvamVjdElkLCBQcm9qZWN0U2V0dGluZ3NPdmVycmlkZXMpLnBpcGUoXG4gICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoe30pKSxcbiAgKSxcbiAgLyoqIEZvbGQgb25jZSBzbyByZXN0YXJ0cyBjYW5ub3QgdW5kbyBsYXRlciBVSSByZXNldHMuICovXG4gIHByb2plY3RTZXR0aW5nc0ZvbGRlZDogU2NoZW1hLkJvb2xlYW4ucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChmYWxzZSkpKSxcblxuICBlbmFibGVBZ2VudERldmljZUFjY2VzczogU2NoZW1hLkJvb2xlYW4ucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChmYWxzZSkpKSxcbiAgLyoqIEVuYWJsaW5nIHRoZSBEZXZpY2UgcGFuZWwgbXVzdCBub3QgZ3JhbnQgcHJvdmlkZXJzIGRldmljZSBjb250cm9sLiAqL1xuICBlbmFibGVEZXZpY2VTdXBwb3J0OiBTY2hlbWEuQm9vbGVhbi5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKGZhbHNlKSkpLFxuICBkZXZpY2VPbmJvYXJkaW5nQ29tcGxldGVkOiBTY2hlbWEuQm9vbGVhbi5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKGZhbHNlKSkpLFxuICBkZXZpY2VIb3N0czogU3NoRGV2aWNlSG9zdENvbmZpZ3MucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChbXSkpKSxcbiAgZWFzRGV2aWNlSG9zdHM6IEVhc0RldmljZUhvc3RDb25maWdzLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoW10pKSksXG4gIHNpZGViYXJBdXRvU2V0dGxlQWZ0ZXJEYXlzOiBTY2hlbWEuTnVsbE9yKFNpZGViYXJBdXRvU2V0dGxlQWZ0ZXJEYXlzKS5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKERFRkFVTFRfU0lERUJBUl9BVVRPX1NFVFRMRV9BRlRFUl9EQVlTKSksXG4gICksXG4gIGNvbXBhY3RJZGxlVGhyZWFkczogTGVnYWN5Q29tcGFjdElkbGVUaHJlYWRzLnBpcGUoXG4gICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoZmFsc2UpKSxcbiAgKSxcbiAgaWRsZUNvbXBhY3Rpb246IFNjaGVtYS5vcHRpb25hbEtleShJZGxlQ29tcGFjdGlvbk1vZGUpLFxuICBzbm9vemVMaW1pdGVkVGhyZWFkczogU2NoZW1hLkJvb2xlYW4ucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChmYWxzZSkpKSxcbiAgYXV0b1Jlc3VtZUxpbWl0ZWRUaHJlYWRzOiBTY2hlbWEuQm9vbGVhbi5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKGZhbHNlKSkpLFxuICAvKiogQmV0YTogZ3Vlc3QgbGlua3MgZm9yIHRoaXMgbWFjaGluZSdzIHRocmVhZHMuIE9mZiByZWZ1c2VzIG5ldyBsaW5rcyBhbmQgcGF1c2VzIGV4aXN0aW5nIG9uZXMuICovXG4gIGd1ZXN0U2hhcmluZ0VuYWJsZWQ6IFNjaGVtYS5Cb29sZWFuLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoZmFsc2UpKSksXG4gIHNpZGViYXJBdXRvU2V0dGxlS2VlcFB1bGxSZXF1ZXN0czogU2NoZW1hLkJvb2xlYW4ucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChmYWxzZSkpLFxuICApLFxuICBzaWRlYmFyQXV0b1NldHRsZU9uTWVyZ2U6IFNjaGVtYS5Cb29sZWFuLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQodHJ1ZSkpKSxcbiAgYmFja2dyb3VuZEFjdGl2aXR5OiBCYWNrZ3JvdW5kQWN0aXZpdHlTZXR0aW5ncyxcblxuICBhdXRvbWF0aWNHaXRGZXRjaEludGVydmFsOiBTY2hlbWEuRHVyYXRpb25Gcm9tTWlsbGlzLnBpcGUoXG4gICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoXG4gICAgICBFZmZlY3Quc3VjY2VlZChEdXJhdGlvbi50b01pbGxpcyhERUZBVUxUX0FVVE9NQVRJQ19HSVRfRkVUQ0hfSU5URVJWQUwpKSxcbiAgICApLFxuICApLFxuICBwcm92aWRlckhlYWx0aFJlZnJlc2hJbnRlcnZhbDogU2NoZW1hLkR1cmF0aW9uRnJvbU1pbGxpcy5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KFxuICAgICAgRWZmZWN0LnN1Y2NlZWQoRHVyYXRpb24udG9NaWxsaXMoREVGQVVMVF9QUk9WSURFUl9IRUFMVEhfUkVGUkVTSF9JTlRFUlZBTCkpLFxuICAgICksXG4gICksXG4gIGJhY2tncm91bmRBY3Rpdml0eVByb2ZpbGU6IEJhY2tncm91bmRBY3Rpdml0eVByb2ZpbGUucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChERUZBVUxUX0JBQ0tHUk9VTkRfQUNUSVZJVFlfUFJPRklMRSkpLFxuICApLFxuICBkZWZhdWx0VGhlbWU6IERlZmF1bHRUaGVtZVByZWZlcmVuY2UucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChcIlwiKSkpLFxuICAvKiogRGlzdGluZ3Vpc2hlcyByZXBlYXRlZCBzZXRzIG9mIHRoZSBzYW1lIHRoZW1lIHNvIGNsaWVudHMgYXBwbHkgZWFjaCBvbmUuICovXG4gIGRlZmF1bHRUaGVtZVNldEF0OiBTY2hlbWEuU3RyaW5nLmNoZWNrKFNjaGVtYS5pc01heExlbmd0aCg2NCkpLnBpcGUoXG4gICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoXCJcIikpLFxuICApLFxuICBlbnZpcm9ubWVudEljb246IEZvcndhcmRDb21wYXRpYmxlTnVsbGFibGUoRW52aXJvbm1lbnRNYWNoaW5lS2luZCkucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChudWxsKSksXG4gICksXG4gIC8qKiBOdWxsIGluaGVyaXRzIHQzLmpzb24sIHRoZW4gbG9jYWw7IG9taXQgaXQgb24gdGhlIHdpcmUgZm9yIG9sZGVyIGNsaWVudHMgcmVxdWlyaW5nIGEgbGl0ZXJhbC4gKi9cbiAgZGVmYXVsdFRocmVhZEVudk1vZGU6IE9taXR0ZWRXaGVuTnVsbChUaHJlYWRFbnZNb2RlKSxcbiAgbmV3V29ya3RyZWVzU3RhcnRGcm9tT3JpZ2luOiBTY2hlbWEuQm9vbGVhbi5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKHRydWUpKSxcbiAgKSxcbiAgLyoqIE51bGwgaW5oZXJpdHMgdDMuanNvbiwgdGhlbiByZWN1cnNpdmU7IHVua25vd24gdmFsdWVzIGRlY29kZSB0byBudWxsIGZvciBvbGRlciBjbGllbnRzLiAqL1xuICB3b3JrdHJlZVN1Ym1vZHVsZXM6IEZvcndhcmRDb21wYXRpYmxlTnVsbGFibGUoV29ya3RyZWVTdWJtb2R1bGVzKS5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKG51bGwpKSxcbiAgKSxcbiAgYWRkUHJvamVjdEJhc2VEaXJlY3Rvcnk6IFRyaW1tZWRTdHJpbmcucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChcIlwiKSkpLFxuICB0ZXh0R2VuZXJhdGlvbk1vZGVsU2VsZWN0aW9uOiBNb2RlbFNlbGVjdGlvbi5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KFxuICAgICAgRWZmZWN0LnN1Y2NlZWQoe1xuICAgICAgICBpbnN0YW5jZUlkOiBQcm92aWRlckluc3RhbmNlSWQubWFrZShcImNvZGV4XCIpLFxuICAgICAgICBtb2RlbDogREVGQVVMVF9URVhUX0dFTkVSQVRJT05fTU9ERUwsXG4gICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJyZWFzb25pbmdFZmZvcnRcIixcbiAgICAgICAgICAgIHZhbHVlOiBERUZBVUxUX1RFWFRfR0VORVJBVElPTl9SRUFTT05JTkdfRUZGT1JULFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApLFxuICApLFxuICB0aHJlYWRUaXRsZUluc3RydWN0aW9uczogVHJpbW1lZFN0cmluZy5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKFwiXCIpKSksXG4gIGJyYW5jaE5hbWluZ01vZGU6IEJyYW5jaE5hbWluZ01vZGUucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChcInN0YXRpY1wiIGFzIGNvbnN0KSksXG4gICksXG4gIGJyYW5jaE5hbWVQcmVmaXg6IFRyaW1tZWRTdHJpbmcucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChcInQzXCIpKSksXG4gIGJyYW5jaE5hbWVJbnN0cnVjdGlvbnM6IFRyaW1tZWRTdHJpbmcucGlwZShTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChcIlwiKSkpLFxuICByZW1vdmVBZ2VudENyZWRpdHNPbk1lcmdlOiBTY2hlbWEuQm9vbGVhbi5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKGZhbHNlKSkpLFxuICBzb3VyY2VDb250cm9sV3JpdGluZ1N0eWxlOiBTb3VyY2VDb250cm9sV3JpdGluZ1N0eWxlU2V0dGluZy5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKHt9KSksXG4gICksXG4gIHNvdXJjZUNvbnRyb2xXcml0ZXJNb2RlbFNlbGVjdGlvbjogU2NoZW1hLk51bGxPcihNb2RlbFNlbGVjdGlvbikucGlwZShcbiAgICBTY2hlbWEud2l0aERlY29kaW5nRGVmYXVsdChFZmZlY3Quc3VjY2VlZChudWxsKSksXG4gICksXG4gIHJldmlld0d1aWRlc0VuYWJsZWQ6IFNjaGVtYS5Cb29sZWFuLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoZmFsc2UpKSksXG4gIHJldmlld0d1aWRlTW9kZWxTZWxlY3Rpb246IFNjaGVtYS5OdWxsT3IoTW9kZWxTZWxlY3Rpb24pLnBpcGUoXG4gICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQobnVsbCkpLFxuICApLFxuICByZXZpZXdHdWlkZUluc3RydWN0aW9uczogVHJpbW1lZFN0cmluZy5waXBlKFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKFwiXCIpKSksXG5cbiAgcHVsbFJlcXVlc3RNZXJnZU1ldGhvZDogU2NoZW1hLk51bGxPcihQdWxsUmVxdWVzdE1lcmdlTWV0aG9kKS5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKG51bGwpKSxcbiAgKSxcblxuICAvLyBTY2hlbWEuVW5rbm93biBwcmVzZXJ2ZXMgdW5rbm93bi1kcml2ZXIgY29uZmlncyBhY3Jvc3MgdmVyc2lvbnM7IHNlZSBwcm92aWRlckluc3RhbmNlLnRzLlxuICBwcm92aWRlckluc3RhbmNlczogU2NoZW1hLlJlY29yZChQcm92aWRlckluc3RhbmNlSWQsIFByb3ZpZGVySW5zdGFuY2VDb25maWcpLnBpcGUoXG4gICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoe30pKSxcbiAgKSxcbiAgb2JzZXJ2YWJpbGl0eTogT2JzZXJ2YWJpbGl0eVNldHRpbmdzLnBpcGUoU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoe30pKSksXG4gIHNvdXJjZUNvbnRyb2xIb3N0czogU2NoZW1hLlJlY29yZChTY2hlbWEuU3RyaW5nLCBTb3VyY2VDb250cm9sSG9zdFNldHRpbmdzKS5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKHt9KSksXG4gICksXG4gIC8vIFVzZXItY2hvc2VuIGlkcyBwcmVzZXJ2ZSByb3dzIGFjcm9zcyBlZGl0czsgdW5kZWNvZGFibGUgZW50cmllcyByb3VuZC10cmlwIHVudG91Y2hlZC5cbiAgdXNhZ2VMaW1pdFNvdXJjZXM6IFNjaGVtYS5SZWNvcmQoVXNhZ2VMaW1pdFNvdXJjZUlkLCBVc2FnZUxpbWl0U291cmNlQ29uZmlnKS5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKHt9KSksXG4gICksXG4gIGN1cnNvcktleWNoYWluVXNhZ2VFbmFibGVkOiBTY2hlbWEuQm9vbGVhbi5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKGZhbHNlKSksXG4gICksXG5cbiAgdXNhZ2VQcmljZU92ZXJyaWRlczogU2NoZW1hLlJlY29yZChUcmltbWVkTm9uRW1wdHlTdHJpbmcsIFVzYWdlTW9kZWxQcmljZU92ZXJyaWRlKS5waXBlKFxuICAgIFNjaGVtYS53aXRoRGVjb2RpbmdEZWZhdWx0KEVmZmVjdC5zdWNjZWVkKHt9KSksXG4gICksXG5cbiAgdXNhZ2VNb2RlbEFsaWFzZXM6IFNjaGVtYS5SZWNvcmQoVHJpbW1lZE5vbkVtcHR5U3RyaW5nLCBUcmltbWVkTm9uRW1wdHlTdHJpbmcpLnBpcGUoXG4gICAgU2NoZW1hLndpdGhEZWNvZGluZ0RlZmF1bHQoRWZmZWN0LnN1Y2NlZWQoe30pKSxcbiAgKSxcbn0pO1xuZXhwb3J0IHR5cGUgU2VydmVyU2V0dGluZ3MgPSB0eXBlb2YgU2VydmVyU2V0dGluZ3MuVHlwZTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0VSVkVSX1NFVFRJTkdTOiBTZXJ2ZXJTZXR0aW5ncyA9IFNjaGVtYS5kZWNvZGVTeW5jKFNlcnZlclNldHRpbmdzKSh7fSk7XG5cbmV4cG9ydCBjb25zdCBwcm92aWRlckluc3RhbmNlQ29uZmlnRW5hYmxlZEZsYWcgPSAoY29uZmlnOiB1bmtub3duKTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChjb25maWcgPT09IG51bGwgfHwgdHlwZW9mIGNvbmZpZyAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGNvbmZpZykpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGVuYWJsZWQgPSAoY29uZmlnIGFzIHsgcmVhZG9ubHkgZW5hYmxlZD86IHVua25vd24gfSkuZW5hYmxlZDtcbiAgcmV0dXJuIHR5cGVvZiBlbmFibGVkID09PSBcImJvb2xlYW5cIiA/IGVuYWJsZWQgOiB1bmRlZmluZWQ7XG59O1xuXG4vLyBNdXN0IG1hdGNoIGVhY2ggZHJpdmVyJ3MgZW5hYmxlZCBkZWNvZGluZyBkZWZhdWx0LlxuY29uc3QgREVGQVVMVF9ESVNBQkxFRF9QUk9WSURFUl9EUklWRVJTOiBSZWFkb25seVNldDxQcm92aWRlckRyaXZlcktpbmQ+ID0gbmV3IFNldChcbiAgW1wiY3Vyc29yXCIsIFwiZ3Jva1wiLCBcIm11c2VcIiwgXCJwaVwiLCBcIm9wZW5jb2RlXCIsIFwiYW50aWdyYXZpdHlcIl0ubWFwKChkcml2ZXIpID0+XG4gICAgUHJvdmlkZXJEcml2ZXJLaW5kLm1ha2UoZHJpdmVyKSxcbiAgKSxcbik7XG5cbmNvbnN0IERFRkFVTFRfRU5BQkxFRF9ERUZBVUxUX0lOU1RBTkNFUzogUmVhZG9ubHlTZXQ8UHJvdmlkZXJJbnN0YW5jZUlkPiA9IG5ldyBTZXQoXG4gIFtcImNvZGV4XCIsIFwiY2xhdWRlQWdlbnRcIl0ubWFwKChpbnN0YW5jZUlkKSA9PiBQcm92aWRlckluc3RhbmNlSWQubWFrZShpbnN0YW5jZUlkKSksXG4pO1xuXG5leHBvcnQgY29uc3QgaXNVbmNvbmZpZ3VyZWREZWZhdWx0SW5zdGFuY2VFbmFibGVkID0gKGluc3RhbmNlSWQ6IFByb3ZpZGVySW5zdGFuY2VJZCk6IGJvb2xlYW4gPT5cbiAgREVGQVVMVF9FTkFCTEVEX0RFRkFVTFRfSU5TVEFOQ0VTLmhhcyhpbnN0YW5jZUlkKTtcblxuY29uc3QgZGVmYXVsdEVuYWJsZWRGb3JEcml2ZXIgPSAoZHJpdmVyOiBQcm92aWRlckRyaXZlcktpbmQpOiBib29sZWFuID0+XG4gICFERUZBVUxUX0RJU0FCTEVEX1BST1ZJREVSX0RSSVZFUlMuaGFzKGRyaXZlcik7XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlUHJvdmlkZXJJbnN0YW5jZUVuYWJsZWQgPSAoXG4gIGluc3RhbmNlOiBQaWNrPFByb3ZpZGVySW5zdGFuY2VDb25maWcsIFwiZHJpdmVyXCIgfCBcImVuYWJsZWRcIiB8IFwiY29uZmlnXCI+LFxuKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGNvbmZpZ0VuYWJsZWQgPSBwcm92aWRlckluc3RhbmNlQ29uZmlnRW5hYmxlZEZsYWcoaW5zdGFuY2UuY29uZmlnKTtcbiAgaWYgKGluc3RhbmNlLmVuYWJsZWQgPT09IGZhbHNlIHx8IGNvbmZpZ0VuYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBpbnN0YW5jZS5lbmFibGVkID8/IGNvbmZpZ0VuYWJsZWQgPz8gZGVmYXVsdEVuYWJsZWRGb3JEcml2ZXIoaW5zdGFuY2UuZHJpdmVyKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlUHJvamVjdFByb3ZpZGVySW5zdGFuY2VFbmFibGVkID0gKFxuICBzZXR0aW5nczogUGljazxTZXJ2ZXJTZXR0aW5ncywgXCJwcm92aWRlckluc3RhbmNlc1wiIHwgXCJwcm9qZWN0U2V0dGluZ3NPdmVycmlkZXNcIj4sXG4gIHByb2plY3RJZDogUHJvamVjdElkIHwgbnVsbCxcbiAgaW5zdGFuY2VJZDogUHJvdmlkZXJJbnN0YW5jZUlkLFxuKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IG92ZXJyaWRlID1cbiAgICBwcm9qZWN0SWQgPT09IG51bGxcbiAgICAgID8gdW5kZWZpbmVkXG4gICAgICA6IHNldHRpbmdzLnByb2plY3RTZXR0aW5nc092ZXJyaWRlc1twcm9qZWN0SWRdPy5wcm92aWRlckluc3RhbmNlcz8uW2luc3RhbmNlSWRdPy5lbmFibGVkO1xuICBpZiAob3ZlcnJpZGUgIT09IHVuZGVmaW5lZCkgcmV0dXJuIG92ZXJyaWRlO1xuICBjb25zdCBpbnN0YW5jZUNvbmZpZyA9IE9iamVjdC5oYXNPd24oc2V0dGluZ3MucHJvdmlkZXJJbnN0YW5jZXMsIGluc3RhbmNlSWQpXG4gICAgPyBzZXR0aW5ncy5wcm92aWRlckluc3RhbmNlc1tpbnN0YW5jZUlkXVxuICAgIDogdW5kZWZpbmVkO1xuICByZXR1cm4gaW5zdGFuY2VDb25maWcgIT09IHVuZGVmaW5lZFxuICAgID8gcmVzb2x2ZVByb3ZpZGVySW5zdGFuY2VFbmFibGVkKGluc3RhbmNlQ29uZmlnKVxuICAgIDogaXNVbmNvbmZpZ3VyZWREZWZhdWx0SW5zdGFuY2VFbmFibGVkKGluc3RhbmNlSWQpO1xufTtcblxuY29uc3QgZGVjb2RlQ2xhdWRlU2V0dGluZ3MgPSBTY2hlbWEuZGVjb2RlVW5rbm93bk9wdGlvbihDbGF1ZGVTZXR0aW5ncyk7XG5cbnR5cGUgSWRsZUNvbXBhY3Rpb25TZXR0aW5ncyA9IFBpY2s8U2VydmVyU2V0dGluZ3MsIFwiY29tcGFjdElkbGVUaHJlYWRzXCIgfCBcImlkbGVDb21wYWN0aW9uXCI+O1xuXG4vKiogVGhlIGVudmlyb25tZW50LXdpZGUgaWRsZSBjb21wYWN0aW9uIG1vZGUsIGZyb20gd2hpY2hldmVyIGZpZWxkIHRoZSBzZXR0aW5ncyBjYXJyeS4gKi9cbmV4cG9ydCBjb25zdCBnbG9iYWxJZGxlQ29tcGFjdGlvbiA9IChzZXR0aW5nczogSWRsZUNvbXBhY3Rpb25TZXR0aW5ncyk6IElkbGVDb21wYWN0aW9uTW9kZSA9PlxuICBzZXR0aW5ncy5pZGxlQ29tcGFjdGlvbiA/P1xuICAodHlwZW9mIHNldHRpbmdzLmNvbXBhY3RJZGxlVGhyZWFkcyA9PT0gXCJzdHJpbmdcIlxuICAgID8gc2V0dGluZ3MuY29tcGFjdElkbGVUaHJlYWRzXG4gICAgOiBzZXR0aW5ncy5jb21wYWN0SWRsZVRocmVhZHNcbiAgICAgID8gXCJiZWZvcmVDYWNoZUV4cGlyZXNcIlxuICAgICAgOiBcIm9uUmV0dXJuXCIpO1xuXG4vKiogU2V0cyB0aGUgbW9kZSwgYW5kIHRoZSBsZWdhY3kgc3dpdGNoIHNoaXBwZWQgY2xpZW50cyBzdGlsbCByZWFkIGFsb25nc2lkZSBpdC4gKi9cbmV4cG9ydCBjb25zdCB3aXRoSWRsZUNvbXBhY3Rpb24gPSA8UyBleHRlbmRzIElkbGVDb21wYWN0aW9uU2V0dGluZ3M+KFxuICBzZXR0aW5nczogUyxcbiAgbW9kZTogSWRsZUNvbXBhY3Rpb25Nb2RlLFxuKTogUyA9PiAoeyAuLi5zZXR0aW5ncywgaWRsZUNvbXBhY3Rpb246IG1vZGUsIGNvbXBhY3RJZGxlVGhyZWFkczogbW9kZSA9PT0gXCJiZWZvcmVDYWNoZUV4cGlyZXNcIiB9KTtcblxuLyoqIFdoZXRoZXIgYSBzZXJ2ZXIgcmVhZHMgbW9kZXMsIHJhdGhlciB0aGFuIG9ubHkgdGhlIGJvb2xlYW4gc3dpdGNoIGZyb20gYmVmb3JlIHRoZW0uICovXG5leHBvcnQgY29uc3QgcmVhZHNJZGxlQ29tcGFjdGlvbk1vZGVzID0gKHNldHRpbmdzOiBJZGxlQ29tcGFjdGlvblNldHRpbmdzKSA9PlxuICBzZXR0aW5ncy5pZGxlQ29tcGFjdGlvbiAhPT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBzZXR0aW5ncy5jb21wYWN0SWRsZVRocmVhZHMgPT09IFwic3RyaW5nXCI7XG5cbi8qKlxuICogVGhlIHBhdGNoIHRoYXQgc2V0cyBgbW9kZWAgaW4gdGhlIGZvcm0gdGhlIHNlcnZlcidzIHNldHRpbmdzIHNob3cgaXQgcmVhZHM6XG4gKiB0aGUgbW9kZSBmb3IgYSBzZXJ2ZXIgdGhhdCBoYXMgYGlkbGVDb21wYWN0aW9uYCBvciBrZXB0IHRoZSBtb2RlIGluIHRoZSBsZWdhY3lcbiAqIGZpZWxkLCB0aGUgYm9vbGVhbiBzd2l0Y2ggZm9yIGEgc2VydmVyIGZyb20gYmVmb3JlIG1vZGVzLlxuICovXG5leHBvcnQgY29uc3QgaWRsZUNvbXBhY3Rpb25QYXRjaCA9IChzZXR0aW5nczogSWRsZUNvbXBhY3Rpb25TZXR0aW5ncywgbW9kZTogSWRsZUNvbXBhY3Rpb25Nb2RlKSA9PlxuICBzZXR0aW5ncy5pZGxlQ29tcGFjdGlvbiAhPT0gdW5kZWZpbmVkXG4gICAgPyB7IGlkbGVDb21wYWN0aW9uOiBtb2RlIH1cbiAgICA6IHJlYWRzSWRsZUNvbXBhY3Rpb25Nb2RlcyhzZXR0aW5ncylcbiAgICAgID8geyBjb21wYWN0SWRsZVRocmVhZHM6IG1vZGUgfVxuICAgICAgOiB7IGNvbXBhY3RJZGxlVGhyZWFkczogbW9kZSA9PT0gXCJiZWZvcmVDYWNoZUV4cGlyZXNcIiB9O1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUlkbGVDb21wYWN0aW9uID0gKFxuICBzZXR0aW5nczogUGljazxTZXJ2ZXJTZXR0aW5ncywgXCJwcm92aWRlckluc3RhbmNlc1wiIHwgXCJjb21wYWN0SWRsZVRocmVhZHNcIiB8IFwiaWRsZUNvbXBhY3Rpb25cIj4sXG4gIGluc3RhbmNlSWQ6IFByb3ZpZGVySW5zdGFuY2VJZCxcbik6IElkbGVDb21wYWN0aW9uTW9kZSA9PiB7XG4gIGNvbnN0IGluc3RhbmNlID0gT2JqZWN0Lmhhc093bihzZXR0aW5ncy5wcm92aWRlckluc3RhbmNlcywgaW5zdGFuY2VJZClcbiAgICA/IHNldHRpbmdzLnByb3ZpZGVySW5zdGFuY2VzW2luc3RhbmNlSWRdXG4gICAgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IG92ZXJyaWRlID0gZGVjb2RlQ2xhdWRlU2V0dGluZ3MoaW5zdGFuY2U/LmNvbmZpZyA/PyB7fSkucGlwZShcbiAgICBPcHRpb24ubWFwKChjb25maWcpID0+IGNvbmZpZy5pZGxlQ29tcGFjdGlvbiksXG4gICAgT3B0aW9uLmdldE9yRWxzZSgoKSA9PiBcImRlZmF1bHRcIiBhcyBjb25zdCksXG4gICk7XG4gIHJldHVybiBvdmVycmlkZSA9PT0gXCJkZWZhdWx0XCIgPyBnbG9iYWxJZGxlQ29tcGFjdGlvbihzZXR0aW5ncykgOiBvdmVycmlkZTtcbn07XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJTZXR0aW5nc09wZXJhdGlvbiA9IFNjaGVtYS5MaXRlcmFscyhbXG4gIFwibm9ybWFsaXplXCIsXG4gIFwiY2hlY2stZXhpc3RzXCIsXG4gIFwiY3JlYXRlLXByb3ZpZGVyLWluc3RhbmNlXCIsXG4gIFwicmVhZC1maWxlXCIsXG4gIFwicmVhZC1wcm92aWRlci1oaXN0b3J5XCIsXG4gIFwicmVhZC1wcm9qZWN0LXNldHRpbmdzXCIsXG4gIFwicmVhZC1zZWNyZXRcIixcbiAgXCJyZW1vdmUtc2VjcmV0XCIsXG4gIFwicmVtb3ZlLXN0YWxlLXNlY3JldFwiLFxuICBcIndyaXRlLXNlY3JldFwiLFxuICBcIndyaXRlLWZpbGVcIixcbiAgXCJwcmVwYXJlLWRpcmVjdG9yeVwiLFxuXSk7XG5leHBvcnQgdHlwZSBTZXJ2ZXJTZXR0aW5nc09wZXJhdGlvbiA9IHR5cGVvZiBTZXJ2ZXJTZXR0aW5nc09wZXJhdGlvbi5UeXBlO1xuXG5leHBvcnQgY2xhc3MgU2VydmVyU2V0dGluZ3NFcnJvciBleHRlbmRzIFNjaGVtYS5UYWdnZWRFcnJvcjxTZXJ2ZXJTZXR0aW5nc0Vycm9yPigpKFxuICBcIlNlcnZlclNldHRpbmdzRXJyb3JcIixcbiAge1xuICAgIHNldHRpbmdzUGF0aDogU2NoZW1hLlN0cmluZyxcbiAgICBvcGVyYXRpb246IFNlcnZlclNldHRpbmdzT3BlcmF0aW9uLFxuICAgIHByb3ZpZGVySW5zdGFuY2VJZDogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5TdHJpbmcpLFxuICAgIGVudmlyb25tZW50VmFyaWFibGU6IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuU3RyaW5nKSxcbiAgICBjYXVzZTogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5EZWZlY3QoKSksXG4gIH0sXG4pIHtcbiAgb3ZlcnJpZGUgZ2V0IG1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwcm92aWRlciA9XG4gICAgICB0aGlzLnByb3ZpZGVySW5zdGFuY2VJZCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGAgZm9yIHByb3ZpZGVyICR7dGhpcy5wcm92aWRlckluc3RhbmNlSWR9YDtcbiAgICBjb25zdCB2YXJpYWJsZSA9XG4gICAgICB0aGlzLmVudmlyb25tZW50VmFyaWFibGUgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IFwiXCJcbiAgICAgICAgOiBgIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZSAke3RoaXMuZW52aXJvbm1lbnRWYXJpYWJsZX1gO1xuICAgIHJldHVybiBgU2VydmVyIHNldHRpbmdzICR7dGhpcy5vcGVyYXRpb259IGZhaWxlZCR7cHJvdmlkZXJ9JHt2YXJpYWJsZX0gYXQgJHt0aGlzLnNldHRpbmdzUGF0aH0uYDtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBVbmlmaWVkU2V0dGluZ3MgPSBPbWl0PFNlcnZlclNldHRpbmdzLCBrZXlvZiBNb2RlbFByZWZlcmVuY2VzPiAmIENsaWVudFNldHRpbmdzO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVU5JRklFRF9TRVRUSU5HUzogVW5pZmllZFNldHRpbmdzID0ge1xuICAuLi5ERUZBVUxUX1NFUlZFUl9TRVRUSU5HUyxcbiAgLi4uREVGQVVMVF9DTElFTlRfU0VUVElOR1MsXG59O1xuXG5jb25zdCBNb2RlbFNlbGVjdGlvblBhdGNoID0gU2NoZW1hLlN0cnVjdCh7XG4gIGluc3RhbmNlSWQ6IFNjaGVtYS5vcHRpb25hbEtleShQcm92aWRlckluc3RhbmNlSWQpLFxuICBtb2RlbDogU2NoZW1hLm9wdGlvbmFsS2V5KFRyaW1tZWROb25FbXB0eVN0cmluZyksXG4gIG9wdGlvbnM6IFNjaGVtYS5vcHRpb25hbEtleShQcm92aWRlck9wdGlvblNlbGVjdGlvbnMpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJTZXR0aW5nc1BhdGNoID0gU2NoZW1hLlN0cnVjdCh7XG4gIHNldE1vZGVsRmF2b3JpdGVzOiBTY2hlbWEub3B0aW9uYWxLZXkoXG4gICAgU2NoZW1hLkFycmF5KFNjaGVtYS5TdHJ1Y3QoeyAuLi5Nb2RlbEZhdm9yaXRlLmZpZWxkcywgZmF2b3JpdGU6IFNjaGVtYS5Cb29sZWFuIH0pKSxcbiAgKSxcbiAgc2V0TW9kZWxzSGlkZGVuOiBTY2hlbWEub3B0aW9uYWxLZXkoXG4gICAgU2NoZW1hLkFycmF5KFNjaGVtYS5TdHJ1Y3QoeyAuLi5Nb2RlbEZhdm9yaXRlLmZpZWxkcywgaGlkZGVuOiBTY2hlbWEuQm9vbGVhbiB9KSksXG4gICksXG4gIHNldFByb3ZpZGVyTW9kZWxPcmRlcjogU2NoZW1hLm9wdGlvbmFsS2V5KFxuICAgIFNjaGVtYS5TdHJ1Y3QoeyBwcm92aWRlcjogUHJvdmlkZXJJbnN0YW5jZUlkLCBtb2RlbE9yZGVyOiBTY2hlbWEuQXJyYXkoVHJpbW1lZFN0cmluZykgfSksXG4gICksXG4gIGZhdm9yaXRlczogU2NoZW1hLm9wdGlvbmFsS2V5KE1vZGVsRmF2b3JpdGVzKSxcbiAgcHJvdmlkZXJNb2RlbFByZWZlcmVuY2VzOiBTY2hlbWEub3B0aW9uYWxLZXkoUHJvdmlkZXJNb2RlbFByZWZlcmVuY2VzKSxcbiAgLy8gQXBwbGllZCB1bmRlciB0aGUgc2V0dGluZ3Mgc2VydmljZSdzIHdyaXRlIGxvY2ssIG9ubHkgd2hpbGUgc3RpbGwgdW5zZXQuXG4gIG1pZ3JhdGVNb2RlbFByZWZlcmVuY2VzOiBTY2hlbWEub3B0aW9uYWxLZXkoXG4gICAgU2NoZW1hLlN0cnVjdCh7XG4gICAgICBmYXZvcml0ZXM6IFNjaGVtYS5vcHRpb25hbEtleShNb2RlbEZhdm9yaXRlcyksXG4gICAgICBwcm92aWRlck1vZGVsUHJlZmVyZW5jZXM6IFNjaGVtYS5vcHRpb25hbEtleShQcm92aWRlck1vZGVsUHJlZmVyZW5jZXMpLFxuICAgIH0pLFxuICApLFxuICB3b3JrdHJlZUNsZWFudXA6IFNjaGVtYS5vcHRpb25hbEtleShcbiAgICBTY2hlbWEuTnVsbE9yKFxuICAgICAgU2NoZW1hLlVuaW9uKFtcbiAgICAgICAgU2NoZW1hLlN0cnVjdCh7IG1vZGU6IFNjaGVtYS5MaXRlcmFsKFwib2ZmXCIpIH0pLFxuICAgICAgICBTY2hlbWEuU3RydWN0KHtcbiAgICAgICAgICBtb2RlOiBTY2hlbWEuTGl0ZXJhbChcImN1c3RvbVwiKSxcbiAgICAgICAgICBydWxlczogU2NoZW1hLlN0cnVjdCh7XG4gICAgICAgICAgICB3b3JrdHJlZUtlZXBXaGVuOiBTY2hlbWEub3B0aW9uYWxLZXkoV29ya3RyZWVLZWVwV2hlbiksXG4gICAgICAgICAgICB3b3JrdHJlZUFmdGVyRGF5czogU2NoZW1hLm9wdGlvbmFsS2V5KFN0b3JhZ2VSZXRlbnRpb25EYXlzKSxcbiAgICAgICAgICAgIHdvcmt0cmVlU2V0dGxlZEFmdGVyRGF5czogU2NoZW1hLm9wdGlvbmFsS2V5KFNldHRsZWRXb3JrdHJlZVJldGVudGlvbkRheXMpLFxuICAgICAgICAgICAgd29ya3RyZWVPbk1lcmdlOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkJvb2xlYW4pLFxuICAgICAgICAgICAgd29ya3RyZWVPbkRlbGV0ZTogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgICAgICAgICAgIHdvcmt0cmVlVW5jaGFuZ2VkOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkJvb2xlYW4pLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9KSxcbiAgICAgIF0pLFxuICAgICksXG4gICksXG4gIHN0b3JhZ2VDbGVhbnVwOiBTY2hlbWEub3B0aW9uYWxLZXkoXG4gICAgU2NoZW1hLlN0cnVjdCh7XG4gICAgICB3b3JrdHJlZUtlZXBXaGVuOiBTY2hlbWEub3B0aW9uYWxLZXkoV29ya3RyZWVLZWVwV2hlbiksXG4gICAgICB3b3JrdHJlZUFmdGVyRGF5czogU2NoZW1hLm9wdGlvbmFsS2V5KFN0b3JhZ2VSZXRlbnRpb25EYXlzKSxcbiAgICAgIHdvcmt0cmVlU2V0dGxlZEFmdGVyRGF5czogU2NoZW1hLm9wdGlvbmFsS2V5KFNldHRsZWRXb3JrdHJlZVJldGVudGlvbkRheXMpLFxuICAgICAgd29ya3RyZWVPbk1lcmdlOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkJvb2xlYW4pLFxuICAgICAgd29ya3RyZWVPbkRlbGV0ZTogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgICAgIHdvcmt0cmVlVW5jaGFuZ2VkOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkJvb2xlYW4pLFxuICAgICAgYnJvd3NlckFydGlmYWN0c0FmdGVyRGF5czogU2NoZW1hLm9wdGlvbmFsS2V5KFN0b3JhZ2VSZXRlbnRpb25EYXlzKSxcbiAgICAgIGxvZ3NBZnRlckRheXM6IFNjaGVtYS5vcHRpb25hbEtleShTdG9yYWdlUmV0ZW50aW9uRGF5cyksXG4gICAgfSksXG4gICksXG4gIHdvcmt0cmVlc0RpcmVjdG9yeTogU2NoZW1hLm9wdGlvbmFsS2V5KFRyaW1tZWRTdHJpbmcpLFxuICByZXNwb25zZVN0cmVhbWluZ01vZGU6IFNjaGVtYS5vcHRpb25hbEtleShSZXNwb25zZVN0cmVhbWluZ01vZGUpLFxuICBlbmFibGVQcm92aWRlclVwZGF0ZUNoZWNrczogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgY29udGludWVUaHJlYWRzQWZ0ZXJTZXJ2ZXJVcGRhdGU6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG4gIGVuYWJsZUFnZW50QnJvd3NlckFjY2VzczogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgcHJvamVjdEFnZW50QnJvd3NlckFjY2Vzc092ZXJyaWRlczogU2NoZW1hLm9wdGlvbmFsS2V5KFxuICAgIFNjaGVtYS5SZWNvcmQoUHJvamVjdElkLCBTY2hlbWEuTnVsbE9yKFNjaGVtYS5Cb29sZWFuKSksXG4gICksXG4gIGRlZmF1bHRBdXRvUHVsbDogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgZGVmYXVsdFByb2plY3RTY3JpcHRzOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkFycmF5KFByb2plY3RTY3JpcHQpKSxcbiAgcHJvamVjdFNjcmlwdE92ZXJyaWRlczogU2NoZW1hLm9wdGlvbmFsS2V5KFxuICAgIFNjaGVtYS5SZWNvcmQoUHJvamVjdElkLCBTY2hlbWEuTnVsbE9yKFNjaGVtYS5BcnJheShQcm9qZWN0U2NyaXB0KSkpLFxuICApLFxuICBwcm9qZWN0QXV0b1B1bGxPdmVycmlkZXM6IFNjaGVtYS5vcHRpb25hbEtleShcbiAgICBTY2hlbWEuUmVjb3JkKFByb2plY3RJZCwgU2NoZW1hLk51bGxPcihTY2hlbWEuQm9vbGVhbikpLFxuICApLFxuICBkZWZhdWx0TW9kZWxTZWxlY3Rpb246IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuTnVsbE9yKE1vZGVsU2VsZWN0aW9uKSksXG4gIGRlZmF1bHRSdW50aW1lTW9kZTogU2NoZW1hLm9wdGlvbmFsS2V5KFJ1bnRpbWVNb2RlKSxcbiAgLyoqIFJlcGxhY2VzIGVhY2ggcHJvamVjdCdzIG92ZXJyaWRlIHNldDsgbnVsbCByZW1vdmVzIGl0LiBPbWl0dGVkIHByb3ZpZGVySW5zdGFuY2VzIHJldGFpbnMgaXRzIHN0b3JlZCB2YWx1ZS4gKi9cbiAgcHJvamVjdFNldHRpbmdzT3ZlcnJpZGVzOiBTY2hlbWEub3B0aW9uYWxLZXkoXG4gICAgU2NoZW1hLlJlY29yZChcbiAgICAgIFByb2plY3RJZCxcbiAgICAgIFNjaGVtYS5OdWxsT3IoXG4gICAgICAgIFNjaGVtYS5TdHJ1Y3Qoe1xuICAgICAgICAgIC4uLlByb2plY3RTZXR0aW5nc092ZXJyaWRlcy5maWVsZHMsXG4gICAgICAgICAgc291cmNlQ29udHJvbFdyaXRpbmdTdHlsZTogU2NoZW1hLm9wdGlvbmFsS2V5KFNvdXJjZUNvbnRyb2xXcml0aW5nU3R5bGVTZXR0aW5ncyksXG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICApLFxuICApLFxuICBlbmFibGVBZ2VudERldmljZUFjY2VzczogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgZW5hYmxlRGV2aWNlU3VwcG9ydDogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgZGV2aWNlT25ib2FyZGluZ0NvbXBsZXRlZDogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgZGV2aWNlSG9zdHM6IFNjaGVtYS5vcHRpb25hbEtleShTc2hEZXZpY2VIb3N0Q29uZmlncyksXG4gIGVhc0RldmljZUhvc3RzOiBTY2hlbWEub3B0aW9uYWxLZXkoRWFzRGV2aWNlSG9zdENvbmZpZ3MpLFxuICBzaWRlYmFyQXV0b1NldHRsZUFmdGVyRGF5czogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5OdWxsT3IoU2lkZWJhckF1dG9TZXR0bGVBZnRlckRheXMpKSxcbiAgY29tcGFjdElkbGVUaHJlYWRzOiBTY2hlbWEub3B0aW9uYWxLZXkoTGVnYWN5Q29tcGFjdElkbGVUaHJlYWRzKSxcbiAgaWRsZUNvbXBhY3Rpb246IFNjaGVtYS5vcHRpb25hbEtleShJZGxlQ29tcGFjdGlvbk1vZGUpLFxuICBzaWRlYmFyQXV0b1NldHRsZUtlZXBQdWxsUmVxdWVzdHM6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG4gIHNpZGViYXJBdXRvU2V0dGxlT25NZXJnZTogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgYXV0b1Jlc3VtZUxpbWl0ZWRUaHJlYWRzOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkJvb2xlYW4pLFxuICBzbm9vemVMaW1pdGVkVGhyZWFkczogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgZ3Vlc3RTaGFyaW5nRW5hYmxlZDogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgYmFja2dyb3VuZEFjdGl2aXR5OiBTY2hlbWEub3B0aW9uYWxLZXkoXG4gICAgU2NoZW1hLlN0cnVjdCh7XG4gICAgICBzY2hlbWFWZXJzaW9uOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkxpdGVyYWwoMSkpLFxuICAgICAgcHJvZmlsZTogU2NoZW1hLm9wdGlvbmFsS2V5KEJhY2tncm91bmRBY3Rpdml0eVByb2ZpbGVTZWxlY3Rpb24pLFxuICAgICAgYmFzZVByb2ZpbGU6IFNjaGVtYS5vcHRpb25hbEtleShCYWNrZ3JvdW5kQWN0aXZpdHlQcm9maWxlKSxcbiAgICAgIG92ZXJyaWRlczogU2NoZW1hLm9wdGlvbmFsS2V5KEJhY2tncm91bmRBY3Rpdml0eU92ZXJyaWRlcyksXG4gICAgfSksXG4gICksXG4gIGF1dG9tYXRpY0dpdEZldGNoSW50ZXJ2YWw6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuRHVyYXRpb25Gcm9tTWlsbGlzKSxcbiAgcHJvdmlkZXJIZWFsdGhSZWZyZXNoSW50ZXJ2YWw6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuRHVyYXRpb25Gcm9tTWlsbGlzKSxcbiAgYmFja2dyb3VuZEFjdGl2aXR5UHJvZmlsZTogU2NoZW1hLm9wdGlvbmFsS2V5KEJhY2tncm91bmRBY3Rpdml0eVByb2ZpbGUpLFxuICBlbnZpcm9ubWVudEljb246IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuTnVsbE9yKEVudmlyb25tZW50TWFjaGluZUtpbmQpKSxcbiAgZGVmYXVsdFRocmVhZEVudk1vZGU6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuTnVsbE9yKFRocmVhZEVudk1vZGUpKSxcbiAgbmV3V29ya3RyZWVzU3RhcnRGcm9tT3JpZ2luOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkJvb2xlYW4pLFxuICB3b3JrdHJlZVN1Ym1vZHVsZXM6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuTnVsbE9yKFdvcmt0cmVlU3VibW9kdWxlcykpLFxuICBhZGRQcm9qZWN0QmFzZURpcmVjdG9yeTogU2NoZW1hLm9wdGlvbmFsS2V5KFRyaW1tZWRTdHJpbmcpLFxuICB0ZXh0R2VuZXJhdGlvbk1vZGVsU2VsZWN0aW9uOiBTY2hlbWEub3B0aW9uYWxLZXkoTW9kZWxTZWxlY3Rpb25QYXRjaCksXG4gIHRocmVhZFRpdGxlSW5zdHJ1Y3Rpb25zOiBTY2hlbWEub3B0aW9uYWxLZXkoVHJpbW1lZFN0cmluZyksXG4gIGJyYW5jaE5hbWluZ01vZGU6IFNjaGVtYS5vcHRpb25hbEtleShCcmFuY2hOYW1pbmdNb2RlKSxcbiAgYnJhbmNoTmFtZVByZWZpeDogU2NoZW1hLm9wdGlvbmFsS2V5KFRyaW1tZWRTdHJpbmcpLFxuICBicmFuY2hOYW1lSW5zdHJ1Y3Rpb25zOiBTY2hlbWEub3B0aW9uYWxLZXkoVHJpbW1lZFN0cmluZyksXG4gIHJlbW92ZUFnZW50Q3JlZGl0c09uTWVyZ2U6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG4gIHNvdXJjZUNvbnRyb2xXcml0aW5nU3R5bGU6IFNjaGVtYS5vcHRpb25hbEtleShcbiAgICBTY2hlbWEuU3RydWN0KHtcbiAgICAgIG1vZGU6IFNjaGVtYS5vcHRpb25hbEtleShTb3VyY2VDb250cm9sV3JpdGluZ1N0eWxlTW9kZSksXG4gICAgICBjdXN0b21JbnN0cnVjdGlvbnM6IFNjaGVtYS5vcHRpb25hbEtleShUcmltbWVkU3RyaW5nKSxcbiAgICAgIGZvbGxvd0NoYW5nZVJlcXVlc3RUZW1wbGF0ZXM6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG4gICAgfSksXG4gICksXG4gIHNvdXJjZUNvbnRyb2xXcml0ZXJNb2RlbFNlbGVjdGlvbjogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5OdWxsT3IoTW9kZWxTZWxlY3Rpb24pKSxcbiAgcmV2aWV3R3VpZGVzRW5hYmxlZDogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgcmV2aWV3R3VpZGVNb2RlbFNlbGVjdGlvbjogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5OdWxsT3IoTW9kZWxTZWxlY3Rpb24pKSxcbiAgcmV2aWV3R3VpZGVJbnN0cnVjdGlvbnM6IFNjaGVtYS5vcHRpb25hbEtleShUcmltbWVkU3RyaW5nKSxcbiAgcHVsbFJlcXVlc3RNZXJnZU1ldGhvZDogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5OdWxsT3IoUHVsbFJlcXVlc3RNZXJnZU1ldGhvZCkpLFxuICBvYnNlcnZhYmlsaXR5OiBTY2hlbWEub3B0aW9uYWxLZXkoXG4gICAgU2NoZW1hLlN0cnVjdCh7XG4gICAgICBvdGxwVHJhY2VzVXJsOiBTY2hlbWEub3B0aW9uYWxLZXkoVHJpbW1lZFN0cmluZyksXG4gICAgICBvdGxwTWV0cmljc1VybDogU2NoZW1hLm9wdGlvbmFsS2V5KFRyaW1tZWRTdHJpbmcpLFxuICAgICAgb3RscExvZ3NVcmw6IFNjaGVtYS5vcHRpb25hbEtleShUcmltbWVkU3RyaW5nKSxcbiAgICB9KSxcbiAgKSxcbiAgLyoqIE1lcmdlcyBwZXIgaG9zdCwgcmVwbGFjaW5nIHBhdGNoZWQgZmllbGRzIHdob2xlOyByZWRhY3Rpb24gbWFya2VycyByZXRhaW4gc2VjcmV0cywgZW1wdHkgb3Igb21pdHRlZCBzZWNyZXRzIHJlbW92ZSB0aGVtLiAqL1xuICBzb3VyY2VDb250cm9sSG9zdHM6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuUmVjb3JkKFNjaGVtYS5TdHJpbmcsIFNvdXJjZUNvbnRyb2xIb3N0U2V0dGluZ3MpKSxcbiAgLy8gUmVwbGFjZSB3aG9sZSBtYXBzIHRvIGF2b2lkIGhhbGYtbWVyZ2VkIGRyaXZlciBjb25maWdzLlxuICBwcm92aWRlckluc3RhbmNlczogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5SZWNvcmQoUHJvdmlkZXJJbnN0YW5jZUlkLCBQcm92aWRlckluc3RhbmNlQ29uZmlnKSksXG4gIC8vIE1lcmdlIHBlciBzb3VyY2UgdG8gYXZvaWQgcmFjaW5nIG90aGVyIGVkaXRzOyBudWxsIHJlbW92ZXMgYW4gZW50cnkuXG4gIHVzYWdlTGltaXRTb3VyY2VzOiBTY2hlbWEub3B0aW9uYWxLZXkoXG4gICAgU2NoZW1hLlJlY29yZChVc2FnZUxpbWl0U291cmNlSWQsIFNjaGVtYS5OdWxsT3IoVXNhZ2VMaW1pdFNvdXJjZUNvbmZpZykpLFxuICApLFxuICBjdXJzb3JLZXljaGFpblVzYWdlRW5hYmxlZDogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcblxuICB1c2FnZVByaWNlT3ZlcnJpZGVzOiBTY2hlbWEub3B0aW9uYWxLZXkoXG4gICAgU2NoZW1hLlJlY29yZChUcmltbWVkTm9uRW1wdHlTdHJpbmcsIFNjaGVtYS5OdWxsT3IoVXNhZ2VNb2RlbFByaWNlT3ZlcnJpZGUpKSxcbiAgKSxcblxuICB1c2FnZU1vZGVsQWxpYXNlczogU2NoZW1hLm9wdGlvbmFsS2V5KFxuICAgIFNjaGVtYS5SZWNvcmQoVHJpbW1lZE5vbkVtcHR5U3RyaW5nLCBTY2hlbWEuTnVsbE9yKFRyaW1tZWROb25FbXB0eVN0cmluZykpLFxuICApLFxufSk7XG5leHBvcnQgdHlwZSBTZXJ2ZXJTZXR0aW5nc1BhdGNoID0gdHlwZW9mIFNlcnZlclNldHRpbmdzUGF0Y2guVHlwZTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVkU2NvcGVzRm9yU2VydmVyU2V0dGluZ3NQYXRjaChcbiAgcGF0Y2g6IFNlcnZlclNldHRpbmdzUGF0Y2gsXG4pOiBSZWFkb25seUFycmF5PEF1dGhFbnZpcm9ubWVudFNjb3BlPiB7XG4gIGxldCBjaGFuZ2VzUHJvdmlkZXJzID0gZmFsc2U7XG4gIGxldCBjaGFuZ2VzU2V0dGluZ3MgPSBmYWxzZTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocGF0Y2gpKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgIGlmIChrZXkgPT09IFwicHJvdmlkZXJzXCIgfHwga2V5ID09PSBcInByb3ZpZGVySW5zdGFuY2VzXCIgfHwga2V5ID09PSBcInVzYWdlTGltaXRTb3VyY2VzXCIpIHtcbiAgICAgIGNoYW5nZXNQcm92aWRlcnMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFuZ2VzU2V0dGluZ3MgPSB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW1xuICAgIC4uLihjaGFuZ2VzU2V0dGluZ3MgfHwgIWNoYW5nZXNQcm92aWRlcnMgPyBbQXV0aFNldHRpbmdzV3JpdGVTY29wZV0gOiBbXSksXG4gICAgLi4uKGNoYW5nZXNQcm92aWRlcnMgPyBbQXV0aFByb3ZpZGVyc01hbmFnZVNjb3BlXSA6IFtdKSxcbiAgXTtcbn1cblxuLyoqIEhvc3QtZXhlY3V0ZWQgcHJvamVjdCBzY3JpcHRzIHJlcXVpcmUgc2V0dGluZ3Mtd3JpdGUgYXV0aG9yaXR5IGluIGFkZGl0aW9uIHRvIG9yY2hlc3RyYXRpb246b3BlcmF0ZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlZFNjb3Blc0ZvclByb2plY3RNdXRhdGlvbihcbiAgbXV0YXRpb246IFByb2plY3RNdXRhdGlvbixcbik6IFJlYWRvbmx5QXJyYXk8QXV0aEVudmlyb25tZW50U2NvcGU+IHtcbiAgaWYgKG11dGF0aW9uLnR5cGUgPT09IFwicHJvamVjdC5kZWxldGVcIiB8fCBtdXRhdGlvbi5zY3JpcHRzID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gW0F1dGhPcmNoZXN0cmF0aW9uT3BlcmF0ZVNjb3BlXTtcbiAgfVxuICByZXR1cm4gW1xuICAgIEF1dGhPcmNoZXN0cmF0aW9uT3BlcmF0ZVNjb3BlLFxuICAgIC4uLnJlcXVpcmVkU2NvcGVzRm9yU2VydmVyU2V0dGluZ3NQYXRjaCh7IGRlZmF1bHRQcm9qZWN0U2NyaXB0czogbXV0YXRpb24uc2NyaXB0cyB9KSxcbiAgXTtcbn1cblxuZXhwb3J0IGNvbnN0IENsaWVudFNldHRpbmdzUGF0Y2ggPSBTY2hlbWEuU3RydWN0KHtcbiAgbm90aWZpY2F0aW9uTW9kZTogU2NoZW1hLm9wdGlvbmFsS2V5KE5vdGlmaWNhdGlvbk1vZGUpLFxuICBpbkFwcE5vdGlmaWNhdGlvbnNFbmFibGVkOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkJvb2xlYW4pLFxuICBkaWZmQ29sb3JTY2hlbWU6IFNjaGVtYS5vcHRpb25hbEtleShEaWZmQ29sb3JTY2hlbWUpLFxuICBjaGF0V2lkdGg6IFNjaGVtYS5vcHRpb25hbEtleShDaGF0V2lkdGgpLFxuICBsb2FkQmFsYW5jaW5nRW5hYmxlZDogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgbG9hZEJhbGFuY2luZ1dlaWdodHM6IFNjaGVtYS5vcHRpb25hbEtleShMb2FkQmFsYW5jaW5nV2VpZ2h0cyksXG4gIGFwcGVhcmFuY2VDb250cmFzdDogU2NoZW1hLm9wdGlvbmFsS2V5KEFwcGVhcmFuY2VDb250cmFzdCksXG4gIHBhbmVsQW5pbWF0aW9uRHVyYXRpb25NczogU2NoZW1hLm9wdGlvbmFsS2V5KFBhbmVsQW5pbWF0aW9uRHVyYXRpb25NcyksXG4gIGJyb3dzZXJEZWZhdWx0Vmlld3BvcnQ6IFNjaGVtYS5vcHRpb25hbEtleShQcmV2aWV3Vmlld3BvcnRTZXR0aW5nKSxcbiAgYnJvd3NlckRlZmF1bHRab29tRmFjdG9yOiBTY2hlbWEub3B0aW9uYWxLZXkoUHJldmlld1pvb21GYWN0b3IpLFxuICBicm93c2VyRGVmYXVsdEFwcGVhcmFuY2U6IFNjaGVtYS5vcHRpb25hbEtleShQcmV2aWV3QXBwZWFyYW5jZVByZWZlcmVuY2UpLFxuICBicm93c2VyUmVjb3JkaW5nRnJhbWVSYXRlOiBTY2hlbWEub3B0aW9uYWxLZXkoQnJvd3NlclJlY29yZGluZ0ZyYW1lUmF0ZSksXG4gIGJyb3dzZXJSZWNvcmRpbmdTaG93S2V5UHJlc3NlczogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgYnJvd3NlclJlY29yZGluZ1Nob3dNb3VzZVByZXNzZXM6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG4gIGJyb3dzZXJMaW5rVGFyZ2V0OiBTY2hlbWEub3B0aW9uYWxLZXkoQnJvd3NlckxpbmtUYXJnZXQpLFxuICBicm93c2VyU2VhcmNoRW5naW5lOiBTY2hlbWEub3B0aW9uYWxLZXkoQnJvd3NlclNlYXJjaEVuZ2luZSksXG4gIGJyb3dzZXJDdXN0b21TZWFyY2hVcmw6IFNjaGVtYS5vcHRpb25hbEtleShCcm93c2VyQ3VzdG9tU2VhcmNoVXJsKSxcbiAgYnJvd3NlckF1dG9TaG93RmxvYXRpbmdQcmV2aWV3OiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkJvb2xlYW4pLFxuICBicm93c2VyUHJvZmlsZXM6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQXJyYXkoQnJvd3NlclByb2ZpbGUpKSxcbiAgYnJvd3NlckRlZmF1bHRQcm9maWxlSWQ6IFNjaGVtYS5vcHRpb25hbEtleShCcm93c2VyUHJvZmlsZUlkKSxcbiAgY29uZmlybVF1aXQ6IFNjaGVtYS5vcHRpb25hbEtleShRdWl0Q29uZmlybWF0aW9uTW9kZSksXG4gIGNvbmZpcm1UaHJlYWRBcmNoaXZlOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkJvb2xlYW4pLFxuICBjb25maXJtVGhyZWFkRGVsZXRlOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkJvb2xlYW4pLFxuICBjb25maXJtVGhyZWFkVW5waW46IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG4gIGRpZmZGaWxlc0NvbGxhcHNlZDogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgZGlmZklnbm9yZVdoaXRlc3BhY2U6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG4gIGRpZmZMYXlvdXQ6IFNjaGVtYS5vcHRpb25hbEtleShEaWZmTGF5b3V0KSxcbiAgZW52aXJvbm1lbnRJZGVudGlmaWNhdGlvbk1vZGU6IFNjaGVtYS5vcHRpb25hbEtleShFbnZpcm9ubWVudElkZW50aWZpY2F0aW9uTW9kZSksXG4gIGdsYXNzT3BhY2l0eTogU2NoZW1hLm9wdGlvbmFsS2V5KEdsYXNzT3BhY2l0eSksXG4gIG9uYm9hcmRpbmdDb21wbGV0ZWRBdDogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5OdWxsT3IoU2NoZW1hLlN0cmluZykpLFxuICBmb250U2l6ZUludGVyZmFjZTogU2NoZW1hLm9wdGlvbmFsS2V5KEludGVyZmFjZUZvbnRTaXplKSxcbiAgZm9udFNpemVQcm9tcHQ6IFNjaGVtYS5vcHRpb25hbEtleShQcm9tcHRGb250U2l6ZSksXG4gIGZvbnRTaXplQ29kZTogU2NoZW1hLm9wdGlvbmFsS2V5KENvZGVGb250U2l6ZSksXG4gIGZvbnRTaXplVGVybWluYWw6IFNjaGVtYS5vcHRpb25hbEtleShUZXJtaW5hbEZvbnRTaXplKSxcbiAgZm9udEZhbWlseUNvZGU6IFNjaGVtYS5vcHRpb25hbEtleShGb250RmFtaWx5UHJlZmVyZW5jZSksXG4gIGZvbnRGYW1pbHlDb21wb3NlcjogU2NoZW1hLm9wdGlvbmFsS2V5KEZvbnRGYW1pbHlQcmVmZXJlbmNlKSxcbiAgZm9udEZhbWlseVNhbnM6IFNjaGVtYS5vcHRpb25hbEtleShGb250RmFtaWx5UHJlZmVyZW5jZSksXG4gIGZvbnRGYW1pbHlUZXJtaW5hbDogU2NoZW1hLm9wdGlvbmFsS2V5KEZvbnRGYW1pbHlQcmVmZXJlbmNlKSxcbiAgZm9udFNtb290aGluZzogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgcGVyc2lzdENvbXBvc2VyQ29udGV4dFN0cmlwOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkJvb2xlYW4pLFxuICBmYXZvcml0ZXM6IFNjaGVtYS5vcHRpb25hbEtleShNb2RlbEZhdm9yaXRlcyksXG4gIHByb3ZpZGVyTW9kZWxQcmVmZXJlbmNlczogU2NoZW1hLm9wdGlvbmFsS2V5KFByb3ZpZGVyTW9kZWxQcmVmZXJlbmNlcyksXG4gIHB1bGxSZXF1ZXN0TWVyZ2VNZXRob2RPdmVycmlkZXM6IFNjaGVtYS5vcHRpb25hbEtleShcbiAgICBTY2hlbWEuUmVjb3JkKFRyaW1tZWROb25FbXB0eVN0cmluZywgUHVsbFJlcXVlc3RNZXJnZU1ldGhvZCksXG4gICksXG4gIHB1bGxSZXF1ZXN0TGlua3NPcGVuSW5BcHA6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG4gIHBsYW5Nb2RlRW5hYmxlZDogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgY29udGV4dFdpbmRvd01ldGVyRW5hYmxlZDogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgY29tcG9zZXJDb2xsYXBzZU9uU2Nyb2xsOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkJvb2xlYW4pLFxuICBjb21wb3NlclJpY2hUZXh0RW5hYmxlZDogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgc2VuZFNob3J0Y3V0OiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkxpdGVyYWxzKFtcImVudGVyXCIsIFwibW9kLWVudGVyLW11bHRpbGluZVwiLCBcIm1vZC1lbnRlclwiXSkpLFxuICBmb2xsb3dVcEJlaGF2aW9yOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkxpdGVyYWxzKFtcInF1ZXVlXCIsIFwic3RlZXJcIl0pKSxcbiAgcHJvYWN0aXZlUGFuZWxzRW5hYmxlZDogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgc2hvd1NraWxsc0luU2xhc2hNZW51OiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkJvb2xlYW4pLFxuICBsZWdhY3lTaWRlYmFyRW5hYmxlZDogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgc2lkZWJhcldvcmtpbmdTaGVsZkVuYWJsZWQ6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG4gIHNpZGViYXJQcm9qZWN0R3JvdXBpbmdNb2RlOiBTY2hlbWEub3B0aW9uYWxLZXkoU2lkZWJhclByb2plY3RHcm91cGluZ01vZGUpLFxuICBzaWRlYmFyUHJvamVjdEdyb3VwaW5nT3ZlcnJpZGVzOiBTY2hlbWEub3B0aW9uYWxLZXkoXG4gICAgU2NoZW1hLlJlY29yZChUcmltbWVkTm9uRW1wdHlTdHJpbmcsIFNpZGViYXJQcm9qZWN0R3JvdXBpbmdNb2RlKSxcbiAgKSxcbiAgc2lkZWJhclByb2plY3RTb3J0T3JkZXI6IFNjaGVtYS5vcHRpb25hbEtleShTaWRlYmFyUHJvamVjdFNvcnRPcmRlciksXG4gIHNpZGViYXJUaHJlYWRTb3J0T3JkZXI6IFNjaGVtYS5vcHRpb25hbEtleShTaWRlYmFyVGhyZWFkU29ydE9yZGVyKSxcbiAgc2lkZWJhclRocmVhZFByZXZpZXdDb3VudDogU2NoZW1hLm9wdGlvbmFsS2V5KFNpZGViYXJUaHJlYWRQcmV2aWV3Q291bnQpLFxuICB0aW1lc3RhbXBGb3JtYXQ6IFNjaGVtYS5vcHRpb25hbEtleShUaW1lc3RhbXBGb3JtYXQpLFxuICBzbmFwU2hvdEVuYWJsZWQ6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG4gIHNuYXBTaG90SW5jbHVkZUFjY2Vzc2liaWxpdHk6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG4gIHNuYXBTaG90U2hvcnRjdXQ6IFNjaGVtYS5vcHRpb25hbEtleShTbmFwU2hvdFNob3J0Y3V0KSxcbiAgc25hcFNob3RQbGF5U291bmQ6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG4gIHNuYXBTaG90U291bmQ6IFNjaGVtYS5vcHRpb25hbEtleShTbmFwU2hvdFNvdW5kKSxcbiAgc25hcFNob3RGbGFzaDogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgc25hcFNob3RBbmltYXRpb25zOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkJvb2xlYW4pLFxuICB3b3JkV3JhcDogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5Cb29sZWFuKSxcbiAgbWF0aFJlbmRlcmluZ0VuYWJsZWQ6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuQm9vbGVhbiksXG59KTtcbmV4cG9ydCB0eXBlIENsaWVudFNldHRpbmdzUGF0Y2ggPSB0eXBlb2YgQ2xpZW50U2V0dGluZ3NQYXRjaC5UeXBlO1xuIl0sImZpbGUiOiIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvc2V0dGluZ3MudHMifQ==

//# vitestCache=W3siZmlsZSI6IjEiLCJpZCI6IjEiLCJ1cmwiOiIyIiwiaW1wb3J0cyI6IjMiLCJtYXBwaW5ncyI6ZmFsc2UsImRlcHMiOiI0IiwiZHluYW1pY0RlcHMiOiI1Iiwic3RhdGljTW9ja3MiOm51bGx9LCIvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9zZXR0aW5ncy50cyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9zZXR0aW5ncy50cyIseyJ1cmxzIjoiNiIsImlkcyI6IjcifSxbIjgiLCI5IiwiMTAiLCIxMSIsIjEyIiwiMTMiLCIxNCIsIjE1IiwiMTYiLCIxNyIsIjE4IiwiMTkiLCIyMCIsIjIxIiwiMjIiLCIyMyIsIjI0IiwiMjUiLCIyNiJdLFtdLFsiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3IiwiMTgiLCIxOSIsIjIwIiwiMjEiLCIyMiIsIjIzIiwiMjQiLCIyNSIsIjI2Il0se30sIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9kZXZpY2UudHMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvYXV0aC50cyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvbm9kZV9tb2R1bGVzLy5wbnBtL2VmZmVjdEA0LjAuNS9ub2RlX21vZHVsZXMvZWZmZWN0L2Rpc3QvRWZmZWN0LmpzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9ub2RlX21vZHVsZXMvLnBucG0vZWZmZWN0QDQuMC41L25vZGVfbW9kdWxlcy9lZmZlY3QvZGlzdC9PcHRpb24uanMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL25vZGVfbW9kdWxlcy8ucG5wbS9lZmZlY3RANC4wLjUvbm9kZV9tb2R1bGVzL2VmZmVjdC9kaXN0L0R1cmF0aW9uLmpzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9ub2RlX21vZHVsZXMvLnBucG0vZWZmZWN0QDQuMC41L25vZGVfbW9kdWxlcy9lZmZlY3QvZGlzdC9TY2hlbWEuanMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL25vZGVfbW9kdWxlcy8ucG5wbS9lZmZlY3RANC4wLjUvbm9kZV9tb2R1bGVzL2VmZmVjdC9kaXN0L1NjaGVtYVRyYW5zZm9ybWF0aW9uLmpzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL2Jhc2VTY2hlbWFzLnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL3VzYWdlTGltaXRTb3VyY2VJZC50cyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9lbnZpcm9ubWVudC50cyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9rZXliaW5kaW5ncy50cyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9tb2RlbC50cyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9tb2RlbFNlbGVjdGlvbi50cyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9wcm9qZWN0LnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL3Byb3ZpZGVyUG9saWN5LnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL2Jyb3dzZXJQcm9maWxlLnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL3ByZXZpZXcudHMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvcHJvdmlkZXJJbnN0YW5jZS50cyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9wdWxsUmVxdWVzdC50cyJd