__vite_ssr_exportName__("DEFAULT_TERMINAL_ID", () => { try { return DEFAULT_TERMINAL_ID } catch {} });
__vite_ssr_exportName__("DEFAULT_MAX_TERMINAL_BUFFER_BYTES", () => { try { return DEFAULT_MAX_TERMINAL_BUFFER_BYTES } catch {} });
__vite_ssr_exportName__("TerminalThreadInput", () => { try { return TerminalThreadInput } catch {} });
__vite_ssr_exportName__("TerminalOpenInput", () => { try { return TerminalOpenInput } catch {} });
__vite_ssr_exportName__("TerminalAttachInput", () => { try { return TerminalAttachInput } catch {} });
__vite_ssr_exportName__("TerminalObserveInput", () => { try { return TerminalObserveInput } catch {} });
__vite_ssr_exportName__("TerminalWriteInput", () => { try { return TerminalWriteInput } catch {} });
__vite_ssr_exportName__("TerminalResizeInput", () => { try { return TerminalResizeInput } catch {} });
__vite_ssr_exportName__("TerminalClearInput", () => { try { return TerminalClearInput } catch {} });
__vite_ssr_exportName__("TerminalRestartInput", () => { try { return TerminalRestartInput } catch {} });
__vite_ssr_exportName__("TerminalCloseInput", () => { try { return TerminalCloseInput } catch {} });
__vite_ssr_exportName__("TerminalSessionStatus", () => { try { return TerminalSessionStatus } catch {} });
__vite_ssr_exportName__("TerminalSessionSnapshot", () => { try { return TerminalSessionSnapshot } catch {} });
__vite_ssr_exportName__("TerminalSummary", () => { try { return TerminalSummary } catch {} });
__vite_ssr_exportName__("TerminalMetadataStreamEvent", () => { try { return TerminalMetadataStreamEvent } catch {} });
__vite_ssr_exportName__("TerminalEvent", () => { try { return TerminalEvent } catch {} });
__vite_ssr_exportName__("TerminalAttachStreamEvent", () => { try { return TerminalAttachStreamEvent } catch {} });
__vite_ssr_exportName__("TerminalCwdNotFoundError", () => { try { return TerminalCwdNotFoundError } catch {} });
__vite_ssr_exportName__("TerminalCwdNotDirectoryError", () => { try { return TerminalCwdNotDirectoryError } catch {} });
__vite_ssr_exportName__("TerminalCwdStatError", () => { try { return TerminalCwdStatError } catch {} });
__vite_ssr_exportName__("TerminalCwdError", () => { try { return TerminalCwdError } catch {} });
__vite_ssr_exportName__("TerminalHistoryError", () => { try { return TerminalHistoryError } catch {} });
__vite_ssr_exportName__("TerminalSessionLookupError", () => { try { return TerminalSessionLookupError } catch {} });
__vite_ssr_exportName__("TerminalProviderInstanceNotFoundError", () => { try { return TerminalProviderInstanceNotFoundError } catch {} });
__vite_ssr_exportName__("TerminalProviderEnvironmentError", () => { try { return TerminalProviderEnvironmentError } catch {} });
__vite_ssr_exportName__("TerminalNotRunningError", () => { try { return TerminalNotRunningError } catch {} });
__vite_ssr_exportName__("TerminalWriteError", () => { try { return TerminalWriteError } catch {} });
__vite_ssr_exportName__("TerminalResizeError", () => { try { return TerminalResizeError } catch {} });
__vite_ssr_exportName__("TerminalError", () => { try { return TerminalError } catch {} });
const __vite_ssr_import_0__ = 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_1__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/baseSchemas.ts", {"importedNames":["TrimmedNonEmptyString"]});
const __vite_ssr_import_2__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/providerInstance.ts", {"importedNames":["ProviderInstanceId"]});



const DEFAULT_TERMINAL_ID = "term-1";
const DEFAULT_MAX_TERMINAL_BUFFER_BYTES = 512 * 1024;
const TrimmedNonEmptyStringSchema = __vite_ssr_import_1__.TrimmedNonEmptyString;
const TerminalColsSchema = __vite_ssr_import_0__.Int.check(__vite_ssr_import_0__.isGreaterThanOrEqualTo(1)).check(__vite_ssr_import_0__.isLessThanOrEqualTo(1e3));
const TerminalRowsSchema = __vite_ssr_import_0__.Int.check(__vite_ssr_import_0__.isGreaterThanOrEqualTo(1)).check(__vite_ssr_import_0__.isLessThanOrEqualTo(500));
const TerminalIdSchema = TrimmedNonEmptyStringSchema.check(__vite_ssr_import_0__.isMaxLength(128));
const TerminalEnvKeySchema = __vite_ssr_import_0__.String.check(__vite_ssr_import_0__.isPattern(/^[A-Za-z_][A-Za-z0-9_]*$/)).check(__vite_ssr_import_0__.isMaxLength(128));
const TerminalEnvValueSchema = __vite_ssr_import_0__.String.check(__vite_ssr_import_0__.isMaxLength(8192));
const TerminalEnvSchema = __vite_ssr_import_0__.Record(TerminalEnvKeySchema, TerminalEnvValueSchema).check(__vite_ssr_import_0__.isMaxProperties(128));
const TerminalThreadInput = __vite_ssr_import_0__.Struct({ threadId: TrimmedNonEmptyStringSchema });
// Terminal ids are client-chosen; the server never allocates them.
const TerminalSessionInput = __vite_ssr_import_0__.Struct({
	...TerminalThreadInput.fields,
	terminalId: TerminalIdSchema
});
const TerminalOpenInput = __vite_ssr_import_0__.Struct({
	...TerminalSessionInput.fields,
	cwd: TrimmedNonEmptyStringSchema,
	worktreePath: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.NullOr(TrimmedNonEmptyStringSchema)),
	cols: __vite_ssr_import_0__.optional(TerminalColsSchema),
	rows: __vite_ssr_import_0__.optional(TerminalRowsSchema),
	env: __vite_ssr_import_0__.optional(TerminalEnvSchema),
	providerInstanceId: __vite_ssr_import_0__.optional((0,__vite_ssr_import_2__.ProviderInstanceId))
});
const TerminalAttachInput = __vite_ssr_import_0__.Struct({
	...TerminalSessionInput.fields,
	cwd: __vite_ssr_import_0__.optional(TrimmedNonEmptyStringSchema),
	worktreePath: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.NullOr(TrimmedNonEmptyStringSchema)),
	cols: __vite_ssr_import_0__.optional(TerminalColsSchema),
	rows: __vite_ssr_import_0__.optional(TerminalRowsSchema),
	env: __vite_ssr_import_0__.optional(TerminalEnvSchema),
	providerInstanceId: __vite_ssr_import_0__.optional((0,__vite_ssr_import_2__.ProviderInstanceId)),
	restartIfNotRunning: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Boolean),
	// Resubscriptions preserve stopped terminals; unknown IDs recover after a server restart.
	resume: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Boolean)
});
const TerminalObserveInput = TerminalSessionInput;
const TerminalWriteInput = __vite_ssr_import_0__.Struct({
	...TerminalSessionInput.fields,
	data: __vite_ssr_import_0__.String.check(__vite_ssr_import_0__.isNonEmpty()).check(__vite_ssr_import_0__.isMaxLength(65536))
});
const TerminalResizeInput = __vite_ssr_import_0__.Struct({
	...TerminalSessionInput.fields,
	cols: TerminalColsSchema,
	rows: TerminalRowsSchema
});
const TerminalClearInput = TerminalSessionInput;
const TerminalRestartInput = __vite_ssr_import_0__.Struct({
	...TerminalSessionInput.fields,
	cwd: TrimmedNonEmptyStringSchema,
	worktreePath: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.NullOr(TrimmedNonEmptyStringSchema)),
	cols: TerminalColsSchema,
	rows: TerminalRowsSchema,
	env: __vite_ssr_import_0__.optional(TerminalEnvSchema),
	providerInstanceId: __vite_ssr_import_0__.optional((0,__vite_ssr_import_2__.ProviderInstanceId))
});
const TerminalCloseInput = __vite_ssr_import_0__.Struct({
	...TerminalThreadInput.fields,
	terminalId: __vite_ssr_import_0__.optional(TerminalIdSchema),
	deleteHistory: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Boolean)
});
const TerminalSessionStatus = __vite_ssr_import_0__.Literals([
	"starting",
	"running",
	"exited",
	"error"
]);
const TerminalSessionSnapshot = __vite_ssr_import_0__.Struct({
	threadId: __vite_ssr_import_0__.String.check(__vite_ssr_import_0__.isNonEmpty()),
	terminalId: __vite_ssr_import_0__.String.check(__vite_ssr_import_0__.isNonEmpty()),
	cwd: __vite_ssr_import_0__.String.check(__vite_ssr_import_0__.isNonEmpty()),
	worktreePath: __vite_ssr_import_0__.NullOr(TrimmedNonEmptyStringSchema),
	status: TerminalSessionStatus,
	pid: __vite_ssr_import_0__.NullOr(__vite_ssr_import_0__.Int.check(__vite_ssr_import_0__.isGreaterThan(0))),
	history: __vite_ssr_import_0__.String,
	exitCode: __vite_ssr_import_0__.NullOr(__vite_ssr_import_0__.Int),
	exitSignal: __vite_ssr_import_0__.NullOr(__vite_ssr_import_0__.Int),
	label: __vite_ssr_import_0__.String.check(__vite_ssr_import_0__.isMaxLength(128)),
	updatedAt: __vite_ssr_import_0__.String,
	sequence: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Int.check(__vite_ssr_import_0__.isGreaterThanOrEqualTo(0)))
});
const TerminalSummary = __vite_ssr_import_0__.Struct({
	threadId: __vite_ssr_import_0__.String.check(__vite_ssr_import_0__.isNonEmpty()),
	terminalId: __vite_ssr_import_0__.String.check(__vite_ssr_import_0__.isNonEmpty()),
	cwd: __vite_ssr_import_0__.String.check(__vite_ssr_import_0__.isNonEmpty()),
	worktreePath: __vite_ssr_import_0__.NullOr(TrimmedNonEmptyStringSchema),
	status: TerminalSessionStatus,
	pid: __vite_ssr_import_0__.NullOr(__vite_ssr_import_0__.Int.check(__vite_ssr_import_0__.isGreaterThan(0))),
	exitCode: __vite_ssr_import_0__.NullOr(__vite_ssr_import_0__.Int),
	exitSignal: __vite_ssr_import_0__.NullOr(__vite_ssr_import_0__.Int),
	hasRunningSubprocess: __vite_ssr_import_0__.Boolean,
	label: __vite_ssr_import_0__.String.check(__vite_ssr_import_0__.isMaxLength(128)),
	updatedAt: __vite_ssr_import_0__.String
});
const TerminalMetadataSnapshotEvent = __vite_ssr_import_0__.Struct({
	type: __vite_ssr_import_0__.Literal("snapshot"),
	terminals: __vite_ssr_import_0__.Array(TerminalSummary)
});
const TerminalMetadataUpsertEvent = __vite_ssr_import_0__.Struct({
	type: __vite_ssr_import_0__.Literal("upsert"),
	terminal: TerminalSummary
});
const TerminalMetadataRemoveEvent = __vite_ssr_import_0__.Struct({
	type: __vite_ssr_import_0__.Literal("remove"),
	threadId: __vite_ssr_import_0__.String.check(__vite_ssr_import_0__.isNonEmpty()),
	terminalId: __vite_ssr_import_0__.String.check(__vite_ssr_import_0__.isNonEmpty())
});
const TerminalMetadataStreamEvent = __vite_ssr_import_0__.Union([
	TerminalMetadataSnapshotEvent,
	TerminalMetadataUpsertEvent,
	TerminalMetadataRemoveEvent
]);
const TerminalEventBaseSchema = __vite_ssr_import_0__.Struct({
	threadId: __vite_ssr_import_0__.String.check(__vite_ssr_import_0__.isNonEmpty()),
	terminalId: __vite_ssr_import_0__.String.check(__vite_ssr_import_0__.isNonEmpty()),
	sequence: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Int.check(__vite_ssr_import_0__.isGreaterThanOrEqualTo(0)))
});
const TerminalStartedEvent = __vite_ssr_import_0__.Struct({
	...TerminalEventBaseSchema.fields,
	type: __vite_ssr_import_0__.Literal("started"),
	snapshot: TerminalSessionSnapshot
});
const TerminalOutputEvent = __vite_ssr_import_0__.Struct({
	...TerminalEventBaseSchema.fields,
	type: __vite_ssr_import_0__.Literal("output"),
	data: __vite_ssr_import_0__.String
});
const TerminalExitedEvent = __vite_ssr_import_0__.Struct({
	...TerminalEventBaseSchema.fields,
	type: __vite_ssr_import_0__.Literal("exited"),
	exitCode: __vite_ssr_import_0__.NullOr(__vite_ssr_import_0__.Int),
	exitSignal: __vite_ssr_import_0__.NullOr(__vite_ssr_import_0__.Int)
});
const TerminalClosedEvent = __vite_ssr_import_0__.Struct({
	...TerminalEventBaseSchema.fields,
	type: __vite_ssr_import_0__.Literal("closed")
});
const TerminalErrorEvent = __vite_ssr_import_0__.Struct({
	...TerminalEventBaseSchema.fields,
	type: __vite_ssr_import_0__.Literal("error"),
	message: __vite_ssr_import_0__.String.check(__vite_ssr_import_0__.isNonEmpty())
});
const TerminalClearedEvent = __vite_ssr_import_0__.Struct({
	...TerminalEventBaseSchema.fields,
	type: __vite_ssr_import_0__.Literal("cleared")
});
const TerminalRestartedEvent = __vite_ssr_import_0__.Struct({
	...TerminalEventBaseSchema.fields,
	type: __vite_ssr_import_0__.Literal("restarted"),
	snapshot: TerminalSessionSnapshot
});
const TerminalActivityEvent = __vite_ssr_import_0__.Struct({
	...TerminalEventBaseSchema.fields,
	type: __vite_ssr_import_0__.Literal("activity"),
	hasRunningSubprocess: __vite_ssr_import_0__.Boolean,
	label: __vite_ssr_import_0__.String.check(__vite_ssr_import_0__.isMaxLength(128))
});
const TerminalEvent = __vite_ssr_import_0__.Union([
	TerminalStartedEvent,
	TerminalOutputEvent,
	TerminalExitedEvent,
	TerminalClosedEvent,
	TerminalErrorEvent,
	TerminalClearedEvent,
	TerminalRestartedEvent,
	TerminalActivityEvent
]);
const TerminalAttachSnapshotEvent = __vite_ssr_import_0__.Struct({
	type: __vite_ssr_import_0__.Literal("snapshot"),
	snapshot: TerminalSessionSnapshot
});
const TerminalAttachStreamEvent = __vite_ssr_import_0__.Union([
	TerminalAttachSnapshotEvent,
	TerminalOutputEvent,
	TerminalExitedEvent,
	TerminalClosedEvent,
	TerminalErrorEvent,
	TerminalClearedEvent,
	TerminalRestartedEvent,
	TerminalActivityEvent
]);
class TerminalCwdNotFoundError extends __vite_ssr_import_0__.TaggedError()("TerminalCwdNotFoundError", { cwd: __vite_ssr_import_0__.String }) {
	get message() {
		return `Terminal cwd does not exist: ${this.cwd}`;
	}
};
class TerminalCwdNotDirectoryError extends __vite_ssr_import_0__.TaggedError()("TerminalCwdNotDirectoryError", { cwd: __vite_ssr_import_0__.String }) {
	get message() {
		return `Terminal cwd is not a directory: ${this.cwd}`;
	}
};
class TerminalCwdStatError extends __vite_ssr_import_0__.TaggedError()("TerminalCwdStatError", {
	cwd: __vite_ssr_import_0__.String,
	cause: __vite_ssr_import_0__.Defect()
}) {
	get message() {
		return `Failed to access terminal cwd: ${this.cwd}`;
	}
};
const TerminalCwdError = __vite_ssr_import_0__.Union([
	TerminalCwdNotFoundError,
	TerminalCwdNotDirectoryError,
	TerminalCwdStatError
]);
class TerminalHistoryError extends __vite_ssr_import_0__.TaggedError()("TerminalHistoryError", {
	operation: __vite_ssr_import_0__.Literals([
		"read",
		"truncate",
		"migrate"
	]),
	threadId: __vite_ssr_import_0__.String,
	terminalId: __vite_ssr_import_0__.String,
	cause: __vite_ssr_import_0__.optional(__vite_ssr_import_0__.Defect())
}) {
	get message() {
		return `Failed to ${this.operation} terminal history for thread: ${this.threadId}, terminal: ${this.terminalId}`;
	}
};
class TerminalSessionLookupError extends __vite_ssr_import_0__.TaggedError()("TerminalSessionLookupError", {
	threadId: __vite_ssr_import_0__.String,
	terminalId: __vite_ssr_import_0__.String
}) {
	get message() {
		return `Unknown terminal thread: ${this.threadId}, terminal: ${this.terminalId}`;
	}
};
class TerminalProviderInstanceNotFoundError extends __vite_ssr_import_0__.TaggedError()("TerminalProviderInstanceNotFoundError", { providerInstanceId: __vite_ssr_import_2__.ProviderInstanceId }) {
	get message() {
		return `Provider instance is not available: ${this.providerInstanceId}`;
	}
};
class TerminalProviderEnvironmentError extends __vite_ssr_import_0__.TaggedError()("TerminalProviderEnvironmentError", {
	providerInstanceId: __vite_ssr_import_2__.ProviderInstanceId,
	cause: __vite_ssr_import_0__.Defect()
}) {
	get message() {
		return `Could not prepare the terminal environment for provider instance: ${this.providerInstanceId}`;
	}
};
class TerminalNotRunningError extends __vite_ssr_import_0__.TaggedError()("TerminalNotRunningError", {
	threadId: __vite_ssr_import_0__.String,
	terminalId: __vite_ssr_import_0__.String
}) {
	get message() {
		return `Terminal is not running for thread: ${this.threadId}, terminal: ${this.terminalId}`;
	}
};
class TerminalWriteError extends __vite_ssr_import_0__.TaggedError()("TerminalWriteError", {
	threadId: __vite_ssr_import_0__.String,
	terminalId: __vite_ssr_import_0__.String,
	terminalPid: __vite_ssr_import_0__.Number,
	cause: __vite_ssr_import_0__.Defect()
}) {
	get message() {
		return `Failed to write to terminal for thread: ${this.threadId}, terminal: ${this.terminalId}, PID: ${this.terminalPid}`;
	}
};
class TerminalResizeError extends __vite_ssr_import_0__.TaggedError()("TerminalResizeError", {
	threadId: __vite_ssr_import_0__.String,
	terminalId: __vite_ssr_import_0__.String,
	terminalPid: __vite_ssr_import_0__.Number,
	cols: TerminalColsSchema,
	rows: TerminalRowsSchema,
	cause: __vite_ssr_import_0__.Defect()
}) {
	get message() {
		return `Failed to resize terminal for thread: ${this.threadId}, terminal: ${this.terminalId}, PID: ${this.terminalPid} to ${this.cols}x${this.rows}`;
	}
};
const TerminalError = __vite_ssr_import_0__.Union([
	TerminalCwdError,
	TerminalHistoryError,
	TerminalSessionLookupError,
	TerminalProviderInstanceNotFoundError,
	TerminalProviderEnvironmentError,
	TerminalNotRunningError,
	TerminalWriteError,
	TerminalResizeError
]);
//# sourceMappingSource=vite-generated
//# sourceMappingURL=data:application/json;base64,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S0FBSztDQUNoSjtBQUNGO0FBRU8sTUFBTSxnQkFBZ0Isc0JBQU8sTUFBTTtDQUN4QztDQUNBO0NBQ0E7Q0FDQTtDQUNBO0NBQ0E7Q0FDQTtDQUNBO0FBQ0YsQ0FBQyIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsidGVybWluYWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgU2NoZW1hIGZyb20gXCJlZmZlY3QvU2NoZW1hXCI7XG5pbXBvcnQgeyBUcmltbWVkTm9uRW1wdHlTdHJpbmcgfSBmcm9tIFwiLi9iYXNlU2NoZW1hcy50c1wiO1xuaW1wb3J0IHsgUHJvdmlkZXJJbnN0YW5jZUlkIH0gZnJvbSBcIi4vcHJvdmlkZXJJbnN0YW5jZS50c1wiO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9URVJNSU5BTF9JRCA9IFwidGVybS0xXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVF9NQVhfVEVSTUlOQUxfQlVGRkVSX0JZVEVTID0gNTEyICogMTAyNDtcblxuY29uc3QgVHJpbW1lZE5vbkVtcHR5U3RyaW5nU2NoZW1hID0gVHJpbW1lZE5vbkVtcHR5U3RyaW5nO1xuY29uc3QgVGVybWluYWxDb2xzU2NoZW1hID0gU2NoZW1hLkludC5jaGVjayhTY2hlbWEuaXNHcmVhdGVyVGhhbk9yRXF1YWxUbygxKSkuY2hlY2soXG4gIFNjaGVtYS5pc0xlc3NUaGFuT3JFcXVhbFRvKDEwMDApLFxuKTtcbmNvbnN0IFRlcm1pbmFsUm93c1NjaGVtYSA9IFNjaGVtYS5JbnQuY2hlY2soU2NoZW1hLmlzR3JlYXRlclRoYW5PckVxdWFsVG8oMSkpLmNoZWNrKFxuICBTY2hlbWEuaXNMZXNzVGhhbk9yRXF1YWxUbyg1MDApLFxuKTtcbmNvbnN0IFRlcm1pbmFsSWRTY2hlbWEgPSBUcmltbWVkTm9uRW1wdHlTdHJpbmdTY2hlbWEuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDEyOCkpO1xuY29uc3QgVGVybWluYWxFbnZLZXlTY2hlbWEgPSBTY2hlbWEuU3RyaW5nLmNoZWNrKFxuICBTY2hlbWEuaXNQYXR0ZXJuKC9eW0EtWmEtel9dW0EtWmEtejAtOV9dKiQvKSxcbikuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDEyOCkpO1xuY29uc3QgVGVybWluYWxFbnZWYWx1ZVNjaGVtYSA9IFNjaGVtYS5TdHJpbmcuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDhfMTkyKSk7XG5jb25zdCBUZXJtaW5hbEVudlNjaGVtYSA9IFNjaGVtYS5SZWNvcmQoVGVybWluYWxFbnZLZXlTY2hlbWEsIFRlcm1pbmFsRW52VmFsdWVTY2hlbWEpLmNoZWNrKFxuICBTY2hlbWEuaXNNYXhQcm9wZXJ0aWVzKDEyOCksXG4pO1xuXG5leHBvcnQgY29uc3QgVGVybWluYWxUaHJlYWRJbnB1dCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICB0aHJlYWRJZDogVHJpbW1lZE5vbkVtcHR5U3RyaW5nU2NoZW1hLFxufSk7XG5leHBvcnQgdHlwZSBUZXJtaW5hbFRocmVhZElucHV0ID0gdHlwZW9mIFRlcm1pbmFsVGhyZWFkSW5wdXQuVHlwZTtcblxuLy8gVGVybWluYWwgaWRzIGFyZSBjbGllbnQtY2hvc2VuOyB0aGUgc2VydmVyIG5ldmVyIGFsbG9jYXRlcyB0aGVtLlxuY29uc3QgVGVybWluYWxTZXNzaW9uSW5wdXQgPSBTY2hlbWEuU3RydWN0KHtcbiAgLi4uVGVybWluYWxUaHJlYWRJbnB1dC5maWVsZHMsXG4gIHRlcm1pbmFsSWQ6IFRlcm1pbmFsSWRTY2hlbWEsXG59KTtcbmV4cG9ydCB0eXBlIFRlcm1pbmFsU2Vzc2lvbklucHV0ID0gU2NoZW1hLkNvZGVjLkVuY29kZWQ8dHlwZW9mIFRlcm1pbmFsU2Vzc2lvbklucHV0PjtcblxuZXhwb3J0IGNvbnN0IFRlcm1pbmFsT3BlbklucHV0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIC4uLlRlcm1pbmFsU2Vzc2lvbklucHV0LmZpZWxkcyxcbiAgY3dkOiBUcmltbWVkTm9uRW1wdHlTdHJpbmdTY2hlbWEsXG4gIHdvcmt0cmVlUGF0aDogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5OdWxsT3IoVHJpbW1lZE5vbkVtcHR5U3RyaW5nU2NoZW1hKSksXG4gIGNvbHM6IFNjaGVtYS5vcHRpb25hbChUZXJtaW5hbENvbHNTY2hlbWEpLFxuICByb3dzOiBTY2hlbWEub3B0aW9uYWwoVGVybWluYWxSb3dzU2NoZW1hKSxcbiAgZW52OiBTY2hlbWEub3B0aW9uYWwoVGVybWluYWxFbnZTY2hlbWEpLFxuICBwcm92aWRlckluc3RhbmNlSWQ6IFNjaGVtYS5vcHRpb25hbChQcm92aWRlckluc3RhbmNlSWQpLFxufSk7XG5leHBvcnQgdHlwZSBUZXJtaW5hbE9wZW5JbnB1dCA9IHR5cGVvZiBUZXJtaW5hbE9wZW5JbnB1dC5UeXBlO1xuXG5leHBvcnQgY29uc3QgVGVybWluYWxBdHRhY2hJbnB1dCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICAuLi5UZXJtaW5hbFNlc3Npb25JbnB1dC5maWVsZHMsXG4gIGN3ZDogU2NoZW1hLm9wdGlvbmFsKFRyaW1tZWROb25FbXB0eVN0cmluZ1NjaGVtYSksXG4gIHdvcmt0cmVlUGF0aDogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5OdWxsT3IoVHJpbW1lZE5vbkVtcHR5U3RyaW5nU2NoZW1hKSksXG4gIGNvbHM6IFNjaGVtYS5vcHRpb25hbChUZXJtaW5hbENvbHNTY2hlbWEpLFxuICByb3dzOiBTY2hlbWEub3B0aW9uYWwoVGVybWluYWxSb3dzU2NoZW1hKSxcbiAgZW52OiBTY2hlbWEub3B0aW9uYWwoVGVybWluYWxFbnZTY2hlbWEpLFxuICBwcm92aWRlckluc3RhbmNlSWQ6IFNjaGVtYS5vcHRpb25hbChQcm92aWRlckluc3RhbmNlSWQpLFxuICByZXN0YXJ0SWZOb3RSdW5uaW5nOiBTY2hlbWEub3B0aW9uYWwoU2NoZW1hLkJvb2xlYW4pLFxuICAvLyBSZXN1YnNjcmlwdGlvbnMgcHJlc2VydmUgc3RvcHBlZCB0ZXJtaW5hbHM7IHVua25vd24gSURzIHJlY292ZXIgYWZ0ZXIgYSBzZXJ2ZXIgcmVzdGFydC5cbiAgcmVzdW1lOiBTY2hlbWEub3B0aW9uYWwoU2NoZW1hLkJvb2xlYW4pLFxufSk7XG5leHBvcnQgdHlwZSBUZXJtaW5hbEF0dGFjaElucHV0ID0gdHlwZW9mIFRlcm1pbmFsQXR0YWNoSW5wdXQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFRlcm1pbmFsT2JzZXJ2ZUlucHV0ID0gVGVybWluYWxTZXNzaW9uSW5wdXQ7XG5leHBvcnQgdHlwZSBUZXJtaW5hbE9ic2VydmVJbnB1dCA9IFNjaGVtYS5Db2RlYy5FbmNvZGVkPHR5cGVvZiBUZXJtaW5hbE9ic2VydmVJbnB1dD47XG5cbmV4cG9ydCBjb25zdCBUZXJtaW5hbFdyaXRlSW5wdXQgPSBTY2hlbWEuU3RydWN0KHtcbiAgLi4uVGVybWluYWxTZXNzaW9uSW5wdXQuZmllbGRzLFxuICBkYXRhOiBTY2hlbWEuU3RyaW5nLmNoZWNrKFNjaGVtYS5pc05vbkVtcHR5KCkpLmNoZWNrKFNjaGVtYS5pc01heExlbmd0aCg2NV81MzYpKSxcbn0pO1xuZXhwb3J0IHR5cGUgVGVybWluYWxXcml0ZUlucHV0ID0gU2NoZW1hLkNvZGVjLkVuY29kZWQ8dHlwZW9mIFRlcm1pbmFsV3JpdGVJbnB1dD47XG5cbmV4cG9ydCBjb25zdCBUZXJtaW5hbFJlc2l6ZUlucHV0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIC4uLlRlcm1pbmFsU2Vzc2lvbklucHV0LmZpZWxkcyxcbiAgY29sczogVGVybWluYWxDb2xzU2NoZW1hLFxuICByb3dzOiBUZXJtaW5hbFJvd3NTY2hlbWEsXG59KTtcbmV4cG9ydCB0eXBlIFRlcm1pbmFsUmVzaXplSW5wdXQgPSBTY2hlbWEuQ29kZWMuRW5jb2RlZDx0eXBlb2YgVGVybWluYWxSZXNpemVJbnB1dD47XG5cbmV4cG9ydCBjb25zdCBUZXJtaW5hbENsZWFySW5wdXQgPSBUZXJtaW5hbFNlc3Npb25JbnB1dDtcbmV4cG9ydCB0eXBlIFRlcm1pbmFsQ2xlYXJJbnB1dCA9IFNjaGVtYS5Db2RlYy5FbmNvZGVkPHR5cGVvZiBUZXJtaW5hbENsZWFySW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgVGVybWluYWxSZXN0YXJ0SW5wdXQgPSBTY2hlbWEuU3RydWN0KHtcbiAgLi4uVGVybWluYWxTZXNzaW9uSW5wdXQuZmllbGRzLFxuICBjd2Q6IFRyaW1tZWROb25FbXB0eVN0cmluZ1NjaGVtYSxcbiAgd29ya3RyZWVQYXRoOiBTY2hlbWEub3B0aW9uYWwoU2NoZW1hLk51bGxPcihUcmltbWVkTm9uRW1wdHlTdHJpbmdTY2hlbWEpKSxcbiAgY29sczogVGVybWluYWxDb2xzU2NoZW1hLFxuICByb3dzOiBUZXJtaW5hbFJvd3NTY2hlbWEsXG4gIGVudjogU2NoZW1hLm9wdGlvbmFsKFRlcm1pbmFsRW52U2NoZW1hKSxcbiAgcHJvdmlkZXJJbnN0YW5jZUlkOiBTY2hlbWEub3B0aW9uYWwoUHJvdmlkZXJJbnN0YW5jZUlkKSxcbn0pO1xuZXhwb3J0IHR5cGUgVGVybWluYWxSZXN0YXJ0SW5wdXQgPSB0eXBlb2YgVGVybWluYWxSZXN0YXJ0SW5wdXQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IFRlcm1pbmFsQ2xvc2VJbnB1dCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICAuLi5UZXJtaW5hbFRocmVhZElucHV0LmZpZWxkcyxcbiAgdGVybWluYWxJZDogU2NoZW1hLm9wdGlvbmFsKFRlcm1pbmFsSWRTY2hlbWEpLFxuICBkZWxldGVIaXN0b3J5OiBTY2hlbWEub3B0aW9uYWwoU2NoZW1hLkJvb2xlYW4pLFxufSk7XG5leHBvcnQgdHlwZSBUZXJtaW5hbENsb3NlSW5wdXQgPSB0eXBlb2YgVGVybWluYWxDbG9zZUlucHV0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBUZXJtaW5hbFNlc3Npb25TdGF0dXMgPSBTY2hlbWEuTGl0ZXJhbHMoW1wic3RhcnRpbmdcIiwgXCJydW5uaW5nXCIsIFwiZXhpdGVkXCIsIFwiZXJyb3JcIl0pO1xuZXhwb3J0IHR5cGUgVGVybWluYWxTZXNzaW9uU3RhdHVzID0gdHlwZW9mIFRlcm1pbmFsU2Vzc2lvblN0YXR1cy5UeXBlO1xuXG5leHBvcnQgY29uc3QgVGVybWluYWxTZXNzaW9uU25hcHNob3QgPSBTY2hlbWEuU3RydWN0KHtcbiAgdGhyZWFkSWQ6IFNjaGVtYS5TdHJpbmcuY2hlY2soU2NoZW1hLmlzTm9uRW1wdHkoKSksXG4gIHRlcm1pbmFsSWQ6IFNjaGVtYS5TdHJpbmcuY2hlY2soU2NoZW1hLmlzTm9uRW1wdHkoKSksXG4gIGN3ZDogU2NoZW1hLlN0cmluZy5jaGVjayhTY2hlbWEuaXNOb25FbXB0eSgpKSxcbiAgd29ya3RyZWVQYXRoOiBTY2hlbWEuTnVsbE9yKFRyaW1tZWROb25FbXB0eVN0cmluZ1NjaGVtYSksXG4gIHN0YXR1czogVGVybWluYWxTZXNzaW9uU3RhdHVzLFxuICBwaWQ6IFNjaGVtYS5OdWxsT3IoU2NoZW1hLkludC5jaGVjayhTY2hlbWEuaXNHcmVhdGVyVGhhbigwKSkpLFxuICBoaXN0b3J5OiBTY2hlbWEuU3RyaW5nLFxuICBleGl0Q29kZTogU2NoZW1hLk51bGxPcihTY2hlbWEuSW50KSxcbiAgZXhpdFNpZ25hbDogU2NoZW1hLk51bGxPcihTY2hlbWEuSW50KSxcbiAgbGFiZWw6IFNjaGVtYS5TdHJpbmcuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDEyOCkpLFxuICB1cGRhdGVkQXQ6IFNjaGVtYS5TdHJpbmcsXG4gIHNlcXVlbmNlOiBTY2hlbWEub3B0aW9uYWwoU2NoZW1hLkludC5jaGVjayhTY2hlbWEuaXNHcmVhdGVyVGhhbk9yRXF1YWxUbygwKSkpLFxufSk7XG5leHBvcnQgdHlwZSBUZXJtaW5hbFNlc3Npb25TbmFwc2hvdCA9IHR5cGVvZiBUZXJtaW5hbFNlc3Npb25TbmFwc2hvdC5UeXBlO1xuXG5leHBvcnQgY29uc3QgVGVybWluYWxTdW1tYXJ5ID0gU2NoZW1hLlN0cnVjdCh7XG4gIHRocmVhZElkOiBTY2hlbWEuU3RyaW5nLmNoZWNrKFNjaGVtYS5pc05vbkVtcHR5KCkpLFxuICB0ZXJtaW5hbElkOiBTY2hlbWEuU3RyaW5nLmNoZWNrKFNjaGVtYS5pc05vbkVtcHR5KCkpLFxuICBjd2Q6IFNjaGVtYS5TdHJpbmcuY2hlY2soU2NoZW1hLmlzTm9uRW1wdHkoKSksXG4gIHdvcmt0cmVlUGF0aDogU2NoZW1hLk51bGxPcihUcmltbWVkTm9uRW1wdHlTdHJpbmdTY2hlbWEpLFxuICBzdGF0dXM6IFRlcm1pbmFsU2Vzc2lvblN0YXR1cyxcbiAgcGlkOiBTY2hlbWEuTnVsbE9yKFNjaGVtYS5JbnQuY2hlY2soU2NoZW1hLmlzR3JlYXRlclRoYW4oMCkpKSxcbiAgZXhpdENvZGU6IFNjaGVtYS5OdWxsT3IoU2NoZW1hLkludCksXG4gIGV4aXRTaWduYWw6IFNjaGVtYS5OdWxsT3IoU2NoZW1hLkludCksXG4gIGhhc1J1bm5pbmdTdWJwcm9jZXNzOiBTY2hlbWEuQm9vbGVhbixcbiAgbGFiZWw6IFNjaGVtYS5TdHJpbmcuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDEyOCkpLFxuICB1cGRhdGVkQXQ6IFNjaGVtYS5TdHJpbmcsXG59KTtcbmV4cG9ydCB0eXBlIFRlcm1pbmFsU3VtbWFyeSA9IHR5cGVvZiBUZXJtaW5hbFN1bW1hcnkuVHlwZTtcblxuY29uc3QgVGVybWluYWxNZXRhZGF0YVNuYXBzaG90RXZlbnQgPSBTY2hlbWEuU3RydWN0KHtcbiAgdHlwZTogU2NoZW1hLkxpdGVyYWwoXCJzbmFwc2hvdFwiKSxcbiAgdGVybWluYWxzOiBTY2hlbWEuQXJyYXkoVGVybWluYWxTdW1tYXJ5KSxcbn0pO1xuXG5jb25zdCBUZXJtaW5hbE1ldGFkYXRhVXBzZXJ0RXZlbnQgPSBTY2hlbWEuU3RydWN0KHtcbiAgdHlwZTogU2NoZW1hLkxpdGVyYWwoXCJ1cHNlcnRcIiksXG4gIHRlcm1pbmFsOiBUZXJtaW5hbFN1bW1hcnksXG59KTtcblxuY29uc3QgVGVybWluYWxNZXRhZGF0YVJlbW92ZUV2ZW50ID0gU2NoZW1hLlN0cnVjdCh7XG4gIHR5cGU6IFNjaGVtYS5MaXRlcmFsKFwicmVtb3ZlXCIpLFxuICB0aHJlYWRJZDogU2NoZW1hLlN0cmluZy5jaGVjayhTY2hlbWEuaXNOb25FbXB0eSgpKSxcbiAgdGVybWluYWxJZDogU2NoZW1hLlN0cmluZy5jaGVjayhTY2hlbWEuaXNOb25FbXB0eSgpKSxcbn0pO1xuXG5leHBvcnQgY29uc3QgVGVybWluYWxNZXRhZGF0YVN0cmVhbUV2ZW50ID0gU2NoZW1hLlVuaW9uKFtcbiAgVGVybWluYWxNZXRhZGF0YVNuYXBzaG90RXZlbnQsXG4gIFRlcm1pbmFsTWV0YWRhdGFVcHNlcnRFdmVudCxcbiAgVGVybWluYWxNZXRhZGF0YVJlbW92ZUV2ZW50LFxuXSk7XG5leHBvcnQgdHlwZSBUZXJtaW5hbE1ldGFkYXRhU3RyZWFtRXZlbnQgPSB0eXBlb2YgVGVybWluYWxNZXRhZGF0YVN0cmVhbUV2ZW50LlR5cGU7XG5cbmNvbnN0IFRlcm1pbmFsRXZlbnRCYXNlU2NoZW1hID0gU2NoZW1hLlN0cnVjdCh7XG4gIHRocmVhZElkOiBTY2hlbWEuU3RyaW5nLmNoZWNrKFNjaGVtYS5pc05vbkVtcHR5KCkpLFxuICB0ZXJtaW5hbElkOiBTY2hlbWEuU3RyaW5nLmNoZWNrKFNjaGVtYS5pc05vbkVtcHR5KCkpLFxuICBzZXF1ZW5jZTogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5JbnQuY2hlY2soU2NoZW1hLmlzR3JlYXRlclRoYW5PckVxdWFsVG8oMCkpKSxcbn0pO1xuXG5jb25zdCBUZXJtaW5hbFN0YXJ0ZWRFdmVudCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICAuLi5UZXJtaW5hbEV2ZW50QmFzZVNjaGVtYS5maWVsZHMsXG4gIHR5cGU6IFNjaGVtYS5MaXRlcmFsKFwic3RhcnRlZFwiKSxcbiAgc25hcHNob3Q6IFRlcm1pbmFsU2Vzc2lvblNuYXBzaG90LFxufSk7XG5cbmNvbnN0IFRlcm1pbmFsT3V0cHV0RXZlbnQgPSBTY2hlbWEuU3RydWN0KHtcbiAgLi4uVGVybWluYWxFdmVudEJhc2VTY2hlbWEuZmllbGRzLFxuICB0eXBlOiBTY2hlbWEuTGl0ZXJhbChcIm91dHB1dFwiKSxcbiAgZGF0YTogU2NoZW1hLlN0cmluZyxcbn0pO1xuXG5jb25zdCBUZXJtaW5hbEV4aXRlZEV2ZW50ID0gU2NoZW1hLlN0cnVjdCh7XG4gIC4uLlRlcm1pbmFsRXZlbnRCYXNlU2NoZW1hLmZpZWxkcyxcbiAgdHlwZTogU2NoZW1hLkxpdGVyYWwoXCJleGl0ZWRcIiksXG4gIGV4aXRDb2RlOiBTY2hlbWEuTnVsbE9yKFNjaGVtYS5JbnQpLFxuICBleGl0U2lnbmFsOiBTY2hlbWEuTnVsbE9yKFNjaGVtYS5JbnQpLFxufSk7XG5cbmNvbnN0IFRlcm1pbmFsQ2xvc2VkRXZlbnQgPSBTY2hlbWEuU3RydWN0KHtcbiAgLi4uVGVybWluYWxFdmVudEJhc2VTY2hlbWEuZmllbGRzLFxuICB0eXBlOiBTY2hlbWEuTGl0ZXJhbChcImNsb3NlZFwiKSxcbn0pO1xuXG5jb25zdCBUZXJtaW5hbEVycm9yRXZlbnQgPSBTY2hlbWEuU3RydWN0KHtcbiAgLi4uVGVybWluYWxFdmVudEJhc2VTY2hlbWEuZmllbGRzLFxuICB0eXBlOiBTY2hlbWEuTGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiBTY2hlbWEuU3RyaW5nLmNoZWNrKFNjaGVtYS5pc05vbkVtcHR5KCkpLFxufSk7XG5cbmNvbnN0IFRlcm1pbmFsQ2xlYXJlZEV2ZW50ID0gU2NoZW1hLlN0cnVjdCh7XG4gIC4uLlRlcm1pbmFsRXZlbnRCYXNlU2NoZW1hLmZpZWxkcyxcbiAgdHlwZTogU2NoZW1hLkxpdGVyYWwoXCJjbGVhcmVkXCIpLFxufSk7XG5cbmNvbnN0IFRlcm1pbmFsUmVzdGFydGVkRXZlbnQgPSBTY2hlbWEuU3RydWN0KHtcbiAgLi4uVGVybWluYWxFdmVudEJhc2VTY2hlbWEuZmllbGRzLFxuICB0eXBlOiBTY2hlbWEuTGl0ZXJhbChcInJlc3RhcnRlZFwiKSxcbiAgc25hcHNob3Q6IFRlcm1pbmFsU2Vzc2lvblNuYXBzaG90LFxufSk7XG5cbmNvbnN0IFRlcm1pbmFsQWN0aXZpdHlFdmVudCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICAuLi5UZXJtaW5hbEV2ZW50QmFzZVNjaGVtYS5maWVsZHMsXG4gIHR5cGU6IFNjaGVtYS5MaXRlcmFsKFwiYWN0aXZpdHlcIiksXG4gIGhhc1J1bm5pbmdTdWJwcm9jZXNzOiBTY2hlbWEuQm9vbGVhbixcbiAgbGFiZWw6IFNjaGVtYS5TdHJpbmcuY2hlY2soU2NoZW1hLmlzTWF4TGVuZ3RoKDEyOCkpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBUZXJtaW5hbEV2ZW50ID0gU2NoZW1hLlVuaW9uKFtcbiAgVGVybWluYWxTdGFydGVkRXZlbnQsXG4gIFRlcm1pbmFsT3V0cHV0RXZlbnQsXG4gIFRlcm1pbmFsRXhpdGVkRXZlbnQsXG4gIFRlcm1pbmFsQ2xvc2VkRXZlbnQsXG4gIFRlcm1pbmFsRXJyb3JFdmVudCxcbiAgVGVybWluYWxDbGVhcmVkRXZlbnQsXG4gIFRlcm1pbmFsUmVzdGFydGVkRXZlbnQsXG4gIFRlcm1pbmFsQWN0aXZpdHlFdmVudCxcbl0pO1xuZXhwb3J0IHR5cGUgVGVybWluYWxFdmVudCA9IHR5cGVvZiBUZXJtaW5hbEV2ZW50LlR5cGU7XG5cbmNvbnN0IFRlcm1pbmFsQXR0YWNoU25hcHNob3RFdmVudCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICB0eXBlOiBTY2hlbWEuTGl0ZXJhbChcInNuYXBzaG90XCIpLFxuICBzbmFwc2hvdDogVGVybWluYWxTZXNzaW9uU25hcHNob3QsXG59KTtcblxuZXhwb3J0IGNvbnN0IFRlcm1pbmFsQXR0YWNoU3RyZWFtRXZlbnQgPSBTY2hlbWEuVW5pb24oW1xuICBUZXJtaW5hbEF0dGFjaFNuYXBzaG90RXZlbnQsXG4gIFRlcm1pbmFsT3V0cHV0RXZlbnQsXG4gIFRlcm1pbmFsRXhpdGVkRXZlbnQsXG4gIFRlcm1pbmFsQ2xvc2VkRXZlbnQsXG4gIFRlcm1pbmFsRXJyb3JFdmVudCxcbiAgVGVybWluYWxDbGVhcmVkRXZlbnQsXG4gIFRlcm1pbmFsUmVzdGFydGVkRXZlbnQsXG4gIFRlcm1pbmFsQWN0aXZpdHlFdmVudCxcbl0pO1xuZXhwb3J0IHR5cGUgVGVybWluYWxBdHRhY2hTdHJlYW1FdmVudCA9IHR5cGVvZiBUZXJtaW5hbEF0dGFjaFN0cmVhbUV2ZW50LlR5cGU7XG5cbmV4cG9ydCBjbGFzcyBUZXJtaW5hbEN3ZE5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBTY2hlbWEuVGFnZ2VkRXJyb3I8VGVybWluYWxDd2ROb3RGb3VuZEVycm9yPigpKFxuICBcIlRlcm1pbmFsQ3dkTm90Rm91bmRFcnJvclwiLFxuICB7XG4gICAgY3dkOiBTY2hlbWEuU3RyaW5nLFxuICB9LFxuKSB7XG4gIG92ZXJyaWRlIGdldCBtZXNzYWdlKCkge1xuICAgIHJldHVybiBgVGVybWluYWwgY3dkIGRvZXMgbm90IGV4aXN0OiAke3RoaXMuY3dkfWA7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlcm1pbmFsQ3dkTm90RGlyZWN0b3J5RXJyb3IgZXh0ZW5kcyBTY2hlbWEuVGFnZ2VkRXJyb3I8VGVybWluYWxDd2ROb3REaXJlY3RvcnlFcnJvcj4oKShcbiAgXCJUZXJtaW5hbEN3ZE5vdERpcmVjdG9yeUVycm9yXCIsXG4gIHtcbiAgICBjd2Q6IFNjaGVtYS5TdHJpbmcsXG4gIH0sXG4pIHtcbiAgb3ZlcnJpZGUgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIGBUZXJtaW5hbCBjd2QgaXMgbm90IGEgZGlyZWN0b3J5OiAke3RoaXMuY3dkfWA7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlcm1pbmFsQ3dkU3RhdEVycm9yIGV4dGVuZHMgU2NoZW1hLlRhZ2dlZEVycm9yPFRlcm1pbmFsQ3dkU3RhdEVycm9yPigpKFxuICBcIlRlcm1pbmFsQ3dkU3RhdEVycm9yXCIsXG4gIHtcbiAgICBjd2Q6IFNjaGVtYS5TdHJpbmcsXG4gICAgY2F1c2U6IFNjaGVtYS5EZWZlY3QoKSxcbiAgfSxcbikge1xuICBvdmVycmlkZSBnZXQgbWVzc2FnZSgpIHtcbiAgICByZXR1cm4gYEZhaWxlZCB0byBhY2Nlc3MgdGVybWluYWwgY3dkOiAke3RoaXMuY3dkfWA7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFRlcm1pbmFsQ3dkRXJyb3IgPSBTY2hlbWEuVW5pb24oW1xuICBUZXJtaW5hbEN3ZE5vdEZvdW5kRXJyb3IsXG4gIFRlcm1pbmFsQ3dkTm90RGlyZWN0b3J5RXJyb3IsXG4gIFRlcm1pbmFsQ3dkU3RhdEVycm9yLFxuXSk7XG5leHBvcnQgdHlwZSBUZXJtaW5hbEN3ZEVycm9yID0gdHlwZW9mIFRlcm1pbmFsQ3dkRXJyb3IuVHlwZTtcblxuZXhwb3J0IGNsYXNzIFRlcm1pbmFsSGlzdG9yeUVycm9yIGV4dGVuZHMgU2NoZW1hLlRhZ2dlZEVycm9yPFRlcm1pbmFsSGlzdG9yeUVycm9yPigpKFxuICBcIlRlcm1pbmFsSGlzdG9yeUVycm9yXCIsXG4gIHtcbiAgICBvcGVyYXRpb246IFNjaGVtYS5MaXRlcmFscyhbXCJyZWFkXCIsIFwidHJ1bmNhdGVcIiwgXCJtaWdyYXRlXCJdKSxcbiAgICB0aHJlYWRJZDogU2NoZW1hLlN0cmluZyxcbiAgICB0ZXJtaW5hbElkOiBTY2hlbWEuU3RyaW5nLFxuICAgIGNhdXNlOiBTY2hlbWEub3B0aW9uYWwoU2NoZW1hLkRlZmVjdCgpKSxcbiAgfSxcbikge1xuICBvdmVycmlkZSBnZXQgbWVzc2FnZSgpIHtcbiAgICByZXR1cm4gYEZhaWxlZCB0byAke3RoaXMub3BlcmF0aW9ufSB0ZXJtaW5hbCBoaXN0b3J5IGZvciB0aHJlYWQ6ICR7dGhpcy50aHJlYWRJZH0sIHRlcm1pbmFsOiAke3RoaXMudGVybWluYWxJZH1gO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZXJtaW5hbFNlc3Npb25Mb29rdXBFcnJvciBleHRlbmRzIFNjaGVtYS5UYWdnZWRFcnJvcjxUZXJtaW5hbFNlc3Npb25Mb29rdXBFcnJvcj4oKShcbiAgXCJUZXJtaW5hbFNlc3Npb25Mb29rdXBFcnJvclwiLFxuICB7XG4gICAgdGhyZWFkSWQ6IFNjaGVtYS5TdHJpbmcsXG4gICAgdGVybWluYWxJZDogU2NoZW1hLlN0cmluZyxcbiAgfSxcbikge1xuICBvdmVycmlkZSBnZXQgbWVzc2FnZSgpIHtcbiAgICByZXR1cm4gYFVua25vd24gdGVybWluYWwgdGhyZWFkOiAke3RoaXMudGhyZWFkSWR9LCB0ZXJtaW5hbDogJHt0aGlzLnRlcm1pbmFsSWR9YDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGVybWluYWxQcm92aWRlckluc3RhbmNlTm90Rm91bmRFcnJvciBleHRlbmRzIFNjaGVtYS5UYWdnZWRFcnJvcjxUZXJtaW5hbFByb3ZpZGVySW5zdGFuY2VOb3RGb3VuZEVycm9yPigpKFxuICBcIlRlcm1pbmFsUHJvdmlkZXJJbnN0YW5jZU5vdEZvdW5kRXJyb3JcIixcbiAge1xuICAgIHByb3ZpZGVySW5zdGFuY2VJZDogUHJvdmlkZXJJbnN0YW5jZUlkLFxuICB9LFxuKSB7XG4gIG92ZXJyaWRlIGdldCBtZXNzYWdlKCkge1xuICAgIHJldHVybiBgUHJvdmlkZXIgaW5zdGFuY2UgaXMgbm90IGF2YWlsYWJsZTogJHt0aGlzLnByb3ZpZGVySW5zdGFuY2VJZH1gO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZXJtaW5hbFByb3ZpZGVyRW52aXJvbm1lbnRFcnJvciBleHRlbmRzIFNjaGVtYS5UYWdnZWRFcnJvcjxUZXJtaW5hbFByb3ZpZGVyRW52aXJvbm1lbnRFcnJvcj4oKShcbiAgXCJUZXJtaW5hbFByb3ZpZGVyRW52aXJvbm1lbnRFcnJvclwiLFxuICB7XG4gICAgcHJvdmlkZXJJbnN0YW5jZUlkOiBQcm92aWRlckluc3RhbmNlSWQsXG4gICAgY2F1c2U6IFNjaGVtYS5EZWZlY3QoKSxcbiAgfSxcbikge1xuICBvdmVycmlkZSBnZXQgbWVzc2FnZSgpIHtcbiAgICByZXR1cm4gYENvdWxkIG5vdCBwcmVwYXJlIHRoZSB0ZXJtaW5hbCBlbnZpcm9ubWVudCBmb3IgcHJvdmlkZXIgaW5zdGFuY2U6ICR7dGhpcy5wcm92aWRlckluc3RhbmNlSWR9YDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGVybWluYWxOb3RSdW5uaW5nRXJyb3IgZXh0ZW5kcyBTY2hlbWEuVGFnZ2VkRXJyb3I8VGVybWluYWxOb3RSdW5uaW5nRXJyb3I+KCkoXG4gIFwiVGVybWluYWxOb3RSdW5uaW5nRXJyb3JcIixcbiAge1xuICAgIHRocmVhZElkOiBTY2hlbWEuU3RyaW5nLFxuICAgIHRlcm1pbmFsSWQ6IFNjaGVtYS5TdHJpbmcsXG4gIH0sXG4pIHtcbiAgb3ZlcnJpZGUgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIGBUZXJtaW5hbCBpcyBub3QgcnVubmluZyBmb3IgdGhyZWFkOiAke3RoaXMudGhyZWFkSWR9LCB0ZXJtaW5hbDogJHt0aGlzLnRlcm1pbmFsSWR9YDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGVybWluYWxXcml0ZUVycm9yIGV4dGVuZHMgU2NoZW1hLlRhZ2dlZEVycm9yPFRlcm1pbmFsV3JpdGVFcnJvcj4oKShcbiAgXCJUZXJtaW5hbFdyaXRlRXJyb3JcIixcbiAge1xuICAgIHRocmVhZElkOiBTY2hlbWEuU3RyaW5nLFxuICAgIHRlcm1pbmFsSWQ6IFNjaGVtYS5TdHJpbmcsXG4gICAgdGVybWluYWxQaWQ6IFNjaGVtYS5OdW1iZXIsXG4gICAgY2F1c2U6IFNjaGVtYS5EZWZlY3QoKSxcbiAgfSxcbikge1xuICBvdmVycmlkZSBnZXQgbWVzc2FnZSgpIHtcbiAgICByZXR1cm4gYEZhaWxlZCB0byB3cml0ZSB0byB0ZXJtaW5hbCBmb3IgdGhyZWFkOiAke3RoaXMudGhyZWFkSWR9LCB0ZXJtaW5hbDogJHt0aGlzLnRlcm1pbmFsSWR9LCBQSUQ6ICR7dGhpcy50ZXJtaW5hbFBpZH1gO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZXJtaW5hbFJlc2l6ZUVycm9yIGV4dGVuZHMgU2NoZW1hLlRhZ2dlZEVycm9yPFRlcm1pbmFsUmVzaXplRXJyb3I+KCkoXG4gIFwiVGVybWluYWxSZXNpemVFcnJvclwiLFxuICB7XG4gICAgdGhyZWFkSWQ6IFNjaGVtYS5TdHJpbmcsXG4gICAgdGVybWluYWxJZDogU2NoZW1hLlN0cmluZyxcbiAgICB0ZXJtaW5hbFBpZDogU2NoZW1hLk51bWJlcixcbiAgICBjb2xzOiBUZXJtaW5hbENvbHNTY2hlbWEsXG4gICAgcm93czogVGVybWluYWxSb3dzU2NoZW1hLFxuICAgIGNhdXNlOiBTY2hlbWEuRGVmZWN0KCksXG4gIH0sXG4pIHtcbiAgb3ZlcnJpZGUgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIGBGYWlsZWQgdG8gcmVzaXplIHRlcm1pbmFsIGZvciB0aHJlYWQ6ICR7dGhpcy50aHJlYWRJZH0sIHRlcm1pbmFsOiAke3RoaXMudGVybWluYWxJZH0sIFBJRDogJHt0aGlzLnRlcm1pbmFsUGlkfSB0byAke3RoaXMuY29sc314JHt0aGlzLnJvd3N9YDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgVGVybWluYWxFcnJvciA9IFNjaGVtYS5VbmlvbihbXG4gIFRlcm1pbmFsQ3dkRXJyb3IsXG4gIFRlcm1pbmFsSGlzdG9yeUVycm9yLFxuICBUZXJtaW5hbFNlc3Npb25Mb29rdXBFcnJvcixcbiAgVGVybWluYWxQcm92aWRlckluc3RhbmNlTm90Rm91bmRFcnJvcixcbiAgVGVybWluYWxQcm92aWRlckVudmlyb25tZW50RXJyb3IsXG4gIFRlcm1pbmFsTm90UnVubmluZ0Vycm9yLFxuICBUZXJtaW5hbFdyaXRlRXJyb3IsXG4gIFRlcm1pbmFsUmVzaXplRXJyb3IsXG5dKTtcbmV4cG9ydCB0eXBlIFRlcm1pbmFsRXJyb3IgPSB0eXBlb2YgVGVybWluYWxFcnJvci5UeXBlO1xuIl0sImZpbGUiOiIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvdGVybWluYWwudHMifQ==

//# vitestCache=W3siZmlsZSI6IjEiLCJpZCI6IjEiLCJ1cmwiOiIyIiwiaW1wb3J0cyI6IjMiLCJtYXBwaW5ncyI6ZmFsc2UsImRlcHMiOiI0IiwiZHluYW1pY0RlcHMiOiI1Iiwic3RhdGljTW9ja3MiOm51bGx9LCIvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy90ZXJtaW5hbC50cyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy90ZXJtaW5hbC50cyIseyJ1cmxzIjoiNiIsImlkcyI6IjcifSxbIjgiLCI5IiwiMTAiXSxbXSxbIjgiLCI5IiwiMTAiXSx7fSwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9ub2RlX21vZHVsZXMvLnBucG0vZWZmZWN0QDQuMC41L25vZGVfbW9kdWxlcy9lZmZlY3QvZGlzdC9TY2hlbWEuanMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvYmFzZVNjaGVtYXMudHMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvcHJvdmlkZXJJbnN0YW5jZS50cyJd