__vite_ssr_exportName__("ServerAuthPolicy", () => { try { return ServerAuthPolicy } catch {} });
__vite_ssr_exportName__("ServerAuthBootstrapMethod", () => { try { return ServerAuthBootstrapMethod } catch {} });
__vite_ssr_exportName__("ServerAuthSessionMethod", () => { try { return ServerAuthSessionMethod } catch {} });
__vite_ssr_exportName__("AuthOrchestrationReadScope", () => { try { return AuthOrchestrationReadScope } catch {} });
__vite_ssr_exportName__("AuthOrchestrationOperateScope", () => { try { return AuthOrchestrationOperateScope } catch {} });
__vite_ssr_exportName__("AuthSettingsWriteScope", () => { try { return AuthSettingsWriteScope } catch {} });
__vite_ssr_exportName__("AuthProvidersManageScope", () => { try { return AuthProvidersManageScope } catch {} });
__vite_ssr_exportName__("AuthEnvironmentMaintainScope", () => { try { return AuthEnvironmentMaintainScope } catch {} });
__vite_ssr_exportName__("AuthPreviewOperateScope", () => { try { return AuthPreviewOperateScope } catch {} });
__vite_ssr_exportName__("AuthDiagnosticsReadScope", () => { try { return AuthDiagnosticsReadScope } catch {} });
__vite_ssr_exportName__("AuthTerminalReadScope", () => { try { return AuthTerminalReadScope } catch {} });
__vite_ssr_exportName__("AuthTerminalOperateScope", () => { try { return AuthTerminalOperateScope } catch {} });
__vite_ssr_exportName__("AuthSourceControlWriteScope", () => { try { return AuthSourceControlWriteScope } catch {} });
__vite_ssr_exportName__("AuthFilesystemReadScope", () => { try { return AuthFilesystemReadScope } catch {} });
__vite_ssr_exportName__("AuthFilesystemWriteScope", () => { try { return AuthFilesystemWriteScope } catch {} });
__vite_ssr_exportName__("AuthAccessReadScope", () => { try { return AuthAccessReadScope } catch {} });
__vite_ssr_exportName__("AuthAccessWriteScope", () => { try { return AuthAccessWriteScope } catch {} });
__vite_ssr_exportName__("AuthRelayReadScope", () => { try { return AuthRelayReadScope } catch {} });
__vite_ssr_exportName__("AuthRelayWriteScope", () => { try { return AuthRelayWriteScope } catch {} });
__vite_ssr_exportName__("AuthEnvironmentScope", () => { try { return AuthEnvironmentScope } catch {} });
__vite_ssr_exportName__("AuthEnvironmentScopes", () => { try { return AuthEnvironmentScopes } catch {} });
__vite_ssr_exportName__("AuthGrantScope", () => { try { return AuthGrantScope } catch {} });
__vite_ssr_exportName__("AuthGrantScopes", () => { try { return AuthGrantScopes } catch {} });
__vite_ssr_exportName__("authScopeResponse", () => { try { return authScopeResponse } catch {} });
__vite_ssr_exportName__("authScopeRequiredResponse", () => { try { return authScopeRequiredResponse } catch {} });
__vite_ssr_exportName__("sessionGrantsScope", () => { try { return sessionGrantsScope } catch {} });
__vite_ssr_exportName__("sessionHasLegacyPermissions", () => { try { return sessionHasLegacyPermissions } catch {} });
__vite_ssr_exportName__("AuthStandardClientScopes", () => { try { return AuthStandardClientScopes } catch {} });
__vite_ssr_exportName__("AuthTokenExchangeGrantType", () => { try { return AuthTokenExchangeGrantType } catch {} });
__vite_ssr_exportName__("AuthAccessTokenType", () => { try { return AuthAccessTokenType } catch {} });
__vite_ssr_exportName__("AuthEnvironmentBootstrapTokenType", () => { try { return AuthEnvironmentBootstrapTokenType } catch {} });
__vite_ssr_exportName__("ServerAuthDescriptor", () => { try { return ServerAuthDescriptor } catch {} });
__vite_ssr_exportName__("AuthBrowserSessionRequest", () => { try { return AuthBrowserSessionRequest } catch {} });
__vite_ssr_exportName__("AuthBrowserSessionResult", () => { try { return AuthBrowserSessionResult } catch {} });
__vite_ssr_exportName__("AuthClientMetadataDeviceType", () => { try { return AuthClientMetadataDeviceType } catch {} });
__vite_ssr_exportName__("AuthClientPresentationMetadata", () => { try { return AuthClientPresentationMetadata } catch {} });
__vite_ssr_exportName__("AuthTokenExchangeRequest", () => { try { return AuthTokenExchangeRequest } catch {} });
__vite_ssr_exportName__("AuthAccessTokenResult", () => { try { return AuthAccessTokenResult } catch {} });
__vite_ssr_exportName__("AuthWebSocketTicketResult", () => { try { return AuthWebSocketTicketResult } catch {} });
__vite_ssr_exportName__("AuthWebSocketTicketUse", () => { try { return AuthWebSocketTicketUse } catch {} });
__vite_ssr_exportName__("AuthWebSocketTicketParams", () => { try { return AuthWebSocketTicketParams } catch {} });
__vite_ssr_exportName__("AuthPairingCredentialResult", () => { try { return AuthPairingCredentialResult } catch {} });
__vite_ssr_exportName__("AuthPairingLink", () => { try { return AuthPairingLink } catch {} });
__vite_ssr_exportName__("AuthClientMetadata", () => { try { return AuthClientMetadata } catch {} });
__vite_ssr_exportName__("AuthClientSession", () => { try { return AuthClientSession } catch {} });
__vite_ssr_exportName__("AuthAccessSnapshot", () => { try { return AuthAccessSnapshot } catch {} });
__vite_ssr_exportName__("AuthAccessStreamSnapshotEvent", () => { try { return AuthAccessStreamSnapshotEvent } catch {} });
__vite_ssr_exportName__("AuthAccessStreamPairingLinkUpsertedEvent", () => { try { return AuthAccessStreamPairingLinkUpsertedEvent } catch {} });
__vite_ssr_exportName__("AuthAccessStreamPairingLinkRemovedEvent", () => { try { return AuthAccessStreamPairingLinkRemovedEvent } catch {} });
__vite_ssr_exportName__("AuthAccessStreamError", () => { try { return AuthAccessStreamError } catch {} });
__vite_ssr_exportName__("EnvironmentAuthorizationError", () => { try { return EnvironmentAuthorizationError } catch {} });
__vite_ssr_exportName__("AuthAccessStreamClientUpsertedEvent", () => { try { return AuthAccessStreamClientUpsertedEvent } catch {} });
__vite_ssr_exportName__("AuthAccessStreamClientRemovedEvent", () => { try { return AuthAccessStreamClientRemovedEvent } catch {} });
__vite_ssr_exportName__("AuthAccessStreamEvent", () => { try { return AuthAccessStreamEvent } catch {} });
__vite_ssr_exportName__("AuthRevokePairingLinkInput", () => { try { return AuthRevokePairingLinkInput } catch {} });
__vite_ssr_exportName__("AuthRevokeClientSessionInput", () => { try { return AuthRevokeClientSessionInput } catch {} });
__vite_ssr_exportName__("AuthCreatePairingCredentialInput", () => { try { return AuthCreatePairingCredentialInput } catch {} });
__vite_ssr_exportName__("AuthSessionState", () => { try { return AuthSessionState } catch {} });
__vite_ssr_exportName__("AuthMcpClientAccess", () => { try { return AuthMcpClientAccess } catch {} });
__vite_ssr_exportName__("AuthMcpProtectedResourceMetadata", () => { try { return AuthMcpProtectedResourceMetadata } catch {} });
__vite_ssr_exportName__("AuthMcpAuthorizationServerMetadata", () => { try { return AuthMcpAuthorizationServerMetadata } catch {} });
__vite_ssr_exportName__("AuthMcpClientRegistration", () => { try { return AuthMcpClientRegistration } catch {} });
__vite_ssr_exportName__("AuthMcpRegisteredClient", () => { try { return AuthMcpRegisteredClient } catch {} });
__vite_ssr_exportName__("AuthMcpRegistrationError", () => { try { return AuthMcpRegistrationError } catch {} });
__vite_ssr_exportName__("AuthMcpAuthorizationRequest", () => { try { return AuthMcpAuthorizationRequest } catch {} });
__vite_ssr_exportName__("AuthMcpApprovalDetails", () => { try { return AuthMcpApprovalDetails } catch {} });
__vite_ssr_exportName__("AuthMcpApprovalRedirect", () => { try { return AuthMcpApprovalRedirect } catch {} });
__vite_ssr_exportName__("AuthMcpApprovalDecision", () => { try { return AuthMcpApprovalDecision } catch {} });
__vite_ssr_exportName__("AuthMcpApprovalDecisionRequest", () => { try { return AuthMcpApprovalDecisionRequest } catch {} });
__vite_ssr_exportName__("AuthMcpApprovalError", () => { try { return AuthMcpApprovalError } catch {} });
__vite_ssr_exportName__("AuthMcpTokenRequest", () => { try { return AuthMcpTokenRequest } catch {} });
__vite_ssr_exportName__("AuthMcpTokenResult", () => { try { return AuthMcpTokenResult } catch {} });
__vite_ssr_exportName__("AuthMcpTokenError", () => { try { return AuthMcpTokenError } 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/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/http-api/HttpApiSchema.js");
const __vite_ssr_import_2__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/baseSchemas.ts", {"importedNames":["AuthSessionId","ForwardCompatibleArray","ClientSurface","ClientWebDeployment","TrimmedNonEmptyString"]});



const ServerAuthPolicy = __vite_ssr_import_0__.Literals([
	"desktop-managed-local",
	"loopback-browser",
	"remote-reachable",
	"unsafe-no-auth"
]);
const ServerAuthBootstrapMethod = __vite_ssr_import_0__.Literals(["desktop-bootstrap", "one-time-token"]);
const ServerAuthSessionMethod = __vite_ssr_import_0__.Literals([
	"browser-session-cookie",
	"bearer-access-token",
	"dpop-access-token"
]);
const AuthOrchestrationReadScope = "orchestration:read";
const AuthOrchestrationOperateScope = "orchestration:operate";
const AuthSettingsWriteScope = "settings:write";
const AuthProvidersManageScope = "providers:manage";
const AuthEnvironmentMaintainScope = "environment:maintain";
const AuthPreviewOperateScope = "preview:operate";
const AuthDiagnosticsReadScope = "diagnostics:read";
const AuthTerminalReadScope = "terminal:read";
const AuthTerminalOperateScope = "terminal:operate";
const AuthSourceControlWriteScope = "source-control:write";
const AuthFilesystemReadScope = "filesystem:read";
const AuthFilesystemWriteScope = "filesystem:write";
/** Retained for decoding existing credentials; grants no current RPC access. */
const AuthReviewWriteScope = "review:write";
const AuthAccessReadScope = "access:read";
const AuthAccessWriteScope = "access:write";
const AuthRelayReadScope = "relay:read";
const AuthRelayWriteScope = "relay:write";
const AuthEnvironmentScope = __vite_ssr_import_0__.Literals([
	AuthOrchestrationReadScope,
	AuthOrchestrationOperateScope,
	AuthSettingsWriteScope,
	AuthProvidersManageScope,
	AuthEnvironmentMaintainScope,
	AuthPreviewOperateScope,
	AuthDiagnosticsReadScope,
	AuthTerminalReadScope,
	AuthTerminalOperateScope,
	AuthFilesystemReadScope,
	AuthFilesystemWriteScope,
	AuthReviewWriteScope,
	AuthSourceControlWriteScope,
	AuthAccessReadScope,
	AuthAccessWriteScope,
	AuthRelayReadScope,
	AuthRelayWriteScope
]);
const AuthEnvironmentScopes = __vite_ssr_import_0__.Array(AuthEnvironmentScope);
const AuthGrantScope = __vite_ssr_import_0__.Literals(AuthEnvironmentScope.literals.filter((scope) => scope !== AuthReviewWriteScope));
const AuthGrantScopes = __vite_ssr_import_0__.Array(AuthGrantScope);
const legacyScopes = new Set([
	AuthOrchestrationReadScope,
	AuthOrchestrationOperateScope,
	AuthTerminalOperateScope,
	AuthReviewWriteScope,
	AuthAccessReadScope,
	AuthAccessWriteScope,
	AuthRelayReadScope,
	AuthRelayWriteScope
]);
function authScopeResponse(scopes) {
	return {
		scopes: scopes.filter((scope) => legacyScopes.has(scope)),
		permissions: scopes
	};
};
const authScopeResponseFields = {
	scopes: AuthEnvironmentScopes,
	permissions: __vite_ssr_import_0__.optionalKey((0,__vite_ssr_import_2__.ForwardCompatibleArray)(AuthEnvironmentScope))
};
// Client-only fallback for old servers. Servers never expand grants; empty permissions grant nothing.
const legacyParents = {
	[AuthFilesystemReadScope]: AuthOrchestrationReadScope,
	[AuthDiagnosticsReadScope]: AuthOrchestrationReadScope,
	[AuthSettingsWriteScope]: AuthOrchestrationOperateScope,
	[AuthProvidersManageScope]: AuthOrchestrationOperateScope,
	[AuthEnvironmentMaintainScope]: AuthOrchestrationOperateScope,
	[AuthPreviewOperateScope]: AuthOrchestrationOperateScope,
	[AuthSourceControlWriteScope]: AuthOrchestrationOperateScope,
	[AuthFilesystemWriteScope]: AuthOrchestrationOperateScope,
	[AuthTerminalReadScope]: AuthTerminalOperateScope
};
/** Keep permission denials decodable by clients with the original scope enum. */
function authScopeRequiredResponse(requiredPermission) {
	return {
		requiredScope: legacyParents[requiredPermission] ?? requiredPermission,
		requiredPermission
	};
};
function sessionGrantsScope(session, scope) {
	if (!session.authenticated) return false;
	if (session.permissions !== undefined) return session.permissions.includes(scope);
	if (session.scopes?.includes(scope)) return true;
	if (session.auth?.serverUpdateScope !== undefined) return false;
	const parent = legacyParents[scope];
	return parent !== undefined && session.scopes?.includes(parent) === true;
};
function sessionHasLegacyPermissions(session) {
	const permissions = session.permissions;
	return session.authenticated && permissions !== undefined && permissions.every((scope) => legacyScopes.has(scope)) && Object.values(legacyParents).some((parent) => permissions.includes(parent));
};
// Shell and full-access agent scopes already confer access and relay authority.
const AuthStandardClientScopes = [
	AuthOrchestrationReadScope,
	AuthOrchestrationOperateScope,
	AuthSettingsWriteScope,
	AuthProvidersManageScope,
	AuthEnvironmentMaintainScope,
	AuthPreviewOperateScope,
	AuthDiagnosticsReadScope,
	AuthTerminalReadScope,
	AuthTerminalOperateScope,
	AuthSourceControlWriteScope,
	AuthFilesystemReadScope,
	AuthFilesystemWriteScope,
	AuthRelayReadScope,
	AuthAccessReadScope,
	AuthAccessWriteScope,
	AuthRelayWriteScope
];
const AuthTokenExchangeGrantType = "urn:ietf:params:oauth:grant-type:token-exchange";
const AuthAccessTokenType = "urn:ietf:params:oauth:token-type:access_token";
const AuthEnvironmentBootstrapTokenType = "urn:t3:params:oauth:token-type:environment-bootstrap";
const ServerAuthDescriptor = __vite_ssr_import_0__.Struct({
	policy: ServerAuthPolicy,
	bootstrapMethods: __vite_ssr_import_0__.Array(ServerAuthBootstrapMethod),
	sessionMethods: __vite_ssr_import_0__.Array(ServerAuthSessionMethod),
	sessionCookieName: __vite_ssr_import_2__.TrimmedNonEmptyString,
	/** Older servers omit this and authorize self-updates with orchestration:operate. */
	serverUpdateScope: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.Literal(AuthEnvironmentMaintainScope))
});
const AuthBrowserSessionRequest = __vite_ssr_import_0__.Struct({ credential: __vite_ssr_import_2__.TrimmedNonEmptyString });
const AuthBrowserSessionResult = __vite_ssr_import_0__.Struct({
	authenticated: __vite_ssr_import_0__.Literal(true),
	...authScopeResponseFields,
	sessionMethod: ServerAuthSessionMethod,
	expiresAt: __vite_ssr_import_0__.DateTimeUtc
});
const AuthClientMetadataDeviceType = __vite_ssr_import_0__.Literals([
	"desktop",
	"mobile",
	"tablet",
	"bot",
	"unknown"
]);
const AuthClientPresentationMetadata = __vite_ssr_import_0__.Struct({
	label: __vite_ssr_import_0__.optionalKey((0,__vite_ssr_import_2__.TrimmedNonEmptyString)),
	deviceType: __vite_ssr_import_0__.optionalKey(AuthClientMetadataDeviceType),
	os: __vite_ssr_import_0__.optionalKey((0,__vite_ssr_import_2__.TrimmedNonEmptyString)),
	osMajorVersion: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.Int),
	deviceModel: __vite_ssr_import_0__.optionalKey((0,__vite_ssr_import_2__.TrimmedNonEmptyString)),
	surface: __vite_ssr_import_0__.optionalKey((0,__vite_ssr_import_2__.ClientSurface)),
	webDeployment: __vite_ssr_import_0__.optionalKey((0,__vite_ssr_import_2__.ClientWebDeployment)),
	browser: __vite_ssr_import_0__.optionalKey((0,__vite_ssr_import_2__.TrimmedNonEmptyString)),
	appVersion: __vite_ssr_import_0__.optionalKey((0,__vite_ssr_import_2__.TrimmedNonEmptyString))
});
const AuthTokenExchangeRequest = __vite_ssr_import_0__.Struct({
	grant_type: __vite_ssr_import_0__.Literal(AuthTokenExchangeGrantType),
	subject_token: __vite_ssr_import_2__.TrimmedNonEmptyString,
	subject_token_type: __vite_ssr_import_0__.Literal(AuthEnvironmentBootstrapTokenType),
	requested_token_type: __vite_ssr_import_0__.Literal(AuthAccessTokenType),
	scope: __vite_ssr_import_0__.optionalKey((0,__vite_ssr_import_2__.TrimmedNonEmptyString)),
	client_label: __vite_ssr_import_0__.optionalKey((0,__vite_ssr_import_2__.TrimmedNonEmptyString)),
	client_device_type: __vite_ssr_import_0__.optionalKey(AuthClientMetadataDeviceType),
	client_os: __vite_ssr_import_0__.optionalKey((0,__vite_ssr_import_2__.TrimmedNonEmptyString))
}).pipe(__vite_ssr_import_1__.asFormUrlEncoded());
const AuthAccessTokenResult = __vite_ssr_import_0__.Struct({
	access_token: __vite_ssr_import_2__.TrimmedNonEmptyString,
	issued_token_type: __vite_ssr_import_0__.Literal(AuthAccessTokenType),
	token_type: __vite_ssr_import_0__.Literals(["Bearer", "DPoP"]),
	expires_in: __vite_ssr_import_0__.Number,
	scope: __vite_ssr_import_2__.TrimmedNonEmptyString
});
const AuthWebSocketTicketResult = __vite_ssr_import_0__.Struct({
	ticket: __vite_ssr_import_2__.TrimmedNonEmptyString,
	expiresAt: __vite_ssr_import_0__.DateTimeUtc
});
/**
* Media routes share a ticket across requests; RPC uses a separate ticket.
* Use a path segment so the DPoP mint proof covers it; `htu` excludes query parameters,
* which could be stripped to change the ticket's use.
* Older clients mint at the bare path and receive tickets valid for either use.
*/
const AuthWebSocketTicketUse = __vite_ssr_import_0__.Literals(["rpc", "media"]);
const AuthWebSocketTicketParams = __vite_ssr_import_0__.Struct({ use: AuthWebSocketTicketUse });
const AuthPairingCredentialResult = __vite_ssr_import_0__.Struct({
	id: __vite_ssr_import_2__.TrimmedNonEmptyString,
	credential: __vite_ssr_import_2__.TrimmedNonEmptyString,
	label: __vite_ssr_import_0__.optionalKey((0,__vite_ssr_import_2__.TrimmedNonEmptyString)),
	expiresAt: __vite_ssr_import_0__.DateTimeUtc
});
const AuthPairingLink = __vite_ssr_import_0__.Struct({
	id: __vite_ssr_import_2__.TrimmedNonEmptyString,
	...authScopeResponseFields,
	subject: __vite_ssr_import_2__.TrimmedNonEmptyString,
	label: __vite_ssr_import_0__.optionalKey((0,__vite_ssr_import_2__.TrimmedNonEmptyString)),
	createdAt: __vite_ssr_import_0__.DateTimeUtc,
	expiresAt: __vite_ssr_import_0__.DateTimeUtc
});
const AuthClientMetadata = __vite_ssr_import_0__.Struct({
	label: __vite_ssr_import_0__.optionalKey((0,__vite_ssr_import_2__.TrimmedNonEmptyString)),
	ipAddress: __vite_ssr_import_0__.optionalKey((0,__vite_ssr_import_2__.TrimmedNonEmptyString)),
	userAgent: __vite_ssr_import_0__.optionalKey((0,__vite_ssr_import_2__.TrimmedNonEmptyString)),
	deviceType: AuthClientMetadataDeviceType,
	os: __vite_ssr_import_0__.optionalKey((0,__vite_ssr_import_2__.TrimmedNonEmptyString)),
	browser: __vite_ssr_import_0__.optionalKey((0,__vite_ssr_import_2__.TrimmedNonEmptyString))
});
const AuthClientSession = __vite_ssr_import_0__.Struct({
	sessionId: __vite_ssr_import_2__.AuthSessionId,
	subject: __vite_ssr_import_2__.TrimmedNonEmptyString,
	...authScopeResponseFields,
	method: ServerAuthSessionMethod,
	client: AuthClientMetadata,
	issuedAt: __vite_ssr_import_0__.DateTimeUtc,
	expiresAt: __vite_ssr_import_0__.DateTimeUtc,
	lastConnectedAt: __vite_ssr_import_0__.NullOr(__vite_ssr_import_0__.DateTimeUtc),
	connected: __vite_ssr_import_0__.Boolean,
	current: __vite_ssr_import_0__.Boolean
});
const AuthAccessSnapshot = __vite_ssr_import_0__.Struct({
	pairingLinks: __vite_ssr_import_0__.Array(AuthPairingLink),
	clientSessions: __vite_ssr_import_0__.Array(AuthClientSession)
});
const AuthAccessStreamSnapshotEvent = __vite_ssr_import_0__.Struct({
	version: __vite_ssr_import_0__.Literal(1),
	revision: __vite_ssr_import_0__.Number,
	type: __vite_ssr_import_0__.Literal("snapshot"),
	payload: AuthAccessSnapshot
});
const AuthAccessStreamPairingLinkUpsertedEvent = __vite_ssr_import_0__.Struct({
	version: __vite_ssr_import_0__.Literal(1),
	revision: __vite_ssr_import_0__.Number,
	type: __vite_ssr_import_0__.Literal("pairingLinkUpserted"),
	payload: AuthPairingLink
});
const AuthAccessStreamPairingLinkRemovedEvent = __vite_ssr_import_0__.Struct({
	version: __vite_ssr_import_0__.Literal(1),
	revision: __vite_ssr_import_0__.Number,
	type: __vite_ssr_import_0__.Literal("pairingLinkRemoved"),
	payload: __vite_ssr_import_0__.Struct({ id: __vite_ssr_import_2__.TrimmedNonEmptyString })
});
class AuthAccessStreamError extends __vite_ssr_import_0__.TaggedError()("AuthAccessStreamError", { message: __vite_ssr_import_0__.String }) {};
class EnvironmentAuthorizationError extends __vite_ssr_import_0__.TaggedError()("EnvironmentAuthorizationError", {
	message: __vite_ssr_import_0__.String,
	requiredScope: AuthEnvironmentScope,
	requiredPermission: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.String)
}) {};
const AuthAccessStreamClientUpsertedEvent = __vite_ssr_import_0__.Struct({
	version: __vite_ssr_import_0__.Literal(1),
	revision: __vite_ssr_import_0__.Number,
	type: __vite_ssr_import_0__.Literal("clientUpserted"),
	payload: AuthClientSession
});
const AuthAccessStreamClientRemovedEvent = __vite_ssr_import_0__.Struct({
	version: __vite_ssr_import_0__.Literal(1),
	revision: __vite_ssr_import_0__.Number,
	type: __vite_ssr_import_0__.Literal("clientRemoved"),
	payload: __vite_ssr_import_0__.Struct({ sessionId: __vite_ssr_import_2__.AuthSessionId })
});
const AuthAccessStreamEvent = __vite_ssr_import_0__.Union([
	AuthAccessStreamSnapshotEvent,
	AuthAccessStreamPairingLinkUpsertedEvent,
	AuthAccessStreamPairingLinkRemovedEvent,
	AuthAccessStreamClientUpsertedEvent,
	AuthAccessStreamClientRemovedEvent
]);
const AuthRevokePairingLinkInput = __vite_ssr_import_0__.Struct({ id: __vite_ssr_import_2__.TrimmedNonEmptyString });
const AuthRevokeClientSessionInput = __vite_ssr_import_0__.Struct({ sessionId: __vite_ssr_import_2__.AuthSessionId });
const AuthCreatePairingCredentialInput = __vite_ssr_import_0__.Struct({
	label: __vite_ssr_import_0__.optionalKey((0,__vite_ssr_import_2__.TrimmedNonEmptyString)),
	scopes: __vite_ssr_import_0__.optionalKey(AuthGrantScopes)
});
const AuthSessionState = __vite_ssr_import_0__.Struct({
	authenticated: __vite_ssr_import_0__.Boolean,
	auth: ServerAuthDescriptor,
	scopes: __vite_ssr_import_0__.optionalKey(AuthEnvironmentScopes),
	permissions: authScopeResponseFields.permissions,
	sessionMethod: __vite_ssr_import_0__.optionalKey(ServerAuthSessionMethod),
	expiresAt: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.DateTimeUtc)
});
const AuthMcpClientAccess = __vite_ssr_import_0__.Literals([
	"read-only",
	"approval-required",
	"auto-accept-edits",
	"auto",
	"full-access"
]);
const AuthMcpProtectedResourceMetadata = __vite_ssr_import_0__.Struct({
	resource: __vite_ssr_import_0__.String,
	authorization_servers: __vite_ssr_import_0__.Array(__vite_ssr_import_0__.String),
	scopes_supported: __vite_ssr_import_0__.Array(AuthEnvironmentScope),
	bearer_methods_supported: __vite_ssr_import_0__.Array(__vite_ssr_import_0__.Literal("header")),
	resource_name: __vite_ssr_import_0__.String
});
const AuthMcpAuthorizationServerMetadata = __vite_ssr_import_0__.Struct({
	issuer: __vite_ssr_import_0__.String,
	authorization_endpoint: __vite_ssr_import_0__.String,
	token_endpoint: __vite_ssr_import_0__.String,
	registration_endpoint: __vite_ssr_import_0__.String,
	response_types_supported: __vite_ssr_import_0__.Array(__vite_ssr_import_0__.Literal("code")),
	grant_types_supported: __vite_ssr_import_0__.Array(__vite_ssr_import_0__.Literal("authorization_code")),
	code_challenge_methods_supported: __vite_ssr_import_0__.Array(__vite_ssr_import_0__.Literal("S256")),
	token_endpoint_auth_methods_supported: __vite_ssr_import_0__.Array(__vite_ssr_import_0__.Literal("none")),
	scopes_supported: __vite_ssr_import_0__.Array(AuthEnvironmentScope),
	authorization_response_iss_parameter_supported: __vite_ssr_import_0__.Boolean
});
const AuthMcpClientRegistration = __vite_ssr_import_0__.Struct({
	client_name: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.String),
	redirect_uris: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.Array(__vite_ssr_import_0__.String)),
	token_endpoint_auth_method: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.String)
});
const AuthMcpRegisteredClient = __vite_ssr_import_0__.Struct({
	client_id: __vite_ssr_import_0__.String,
	client_name: __vite_ssr_import_0__.String,
	redirect_uris: __vite_ssr_import_0__.Array(__vite_ssr_import_0__.String),
	grant_types: __vite_ssr_import_0__.Array(__vite_ssr_import_0__.Literal("authorization_code")),
	response_types: __vite_ssr_import_0__.Array(__vite_ssr_import_0__.Literal("code")),
	token_endpoint_auth_method: __vite_ssr_import_0__.Literal("none")
}).pipe(__vite_ssr_import_1__.status(201));
class AuthMcpRegistrationError extends __vite_ssr_import_0__.Error("AuthMcpRegistrationError")({
	error: __vite_ssr_import_0__.Literals(["invalid_client_metadata", "invalid_redirect_uri"]),
	error_description: __vite_ssr_import_0__.String
}, { httpApiStatus: 400 }) {
	get message() {
		return this.error_description;
	}
};
/** Fields are optional here because the server validates them. */
const AuthMcpAuthorizationRequest = __vite_ssr_import_0__.Struct({
	response_type: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.String),
	client_id: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.String),
	redirect_uri: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.String),
	code_challenge: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.String),
	code_challenge_method: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.String),
	state: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.String),
	resource: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.String)
});
/** Server-validated request details, trusted by the client only for display. */
const AuthMcpApprovalDetails = __vite_ssr_import_0__.Struct({
	/** Self-declared by the client, so shown as such. */
	clientName: __vite_ssr_import_0__.String,
	redirectHost: __vite_ssr_import_0__.String,
	environmentHost: __vite_ssr_import_0__.String,
	csrfToken: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.String),
	/** Only scopes held by this session qualify; others need a pairing code. Absent with `csrfToken`. */
	oneClickAccess: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.Array(AuthMcpClientAccess))
});
const AuthMcpApprovalRedirect = __vite_ssr_import_0__.Struct({ redirectTo: __vite_ssr_import_0__.String });
const AuthMcpApprovalDecision = __vite_ssr_import_0__.Union([
	__vite_ssr_import_0__.TaggedStruct("deny", {}),
	__vite_ssr_import_0__.TaggedStruct("pairing-code", {
		access: AuthMcpClientAccess,
		code: __vite_ssr_import_2__.TrimmedNonEmptyString
	}),
	__vite_ssr_import_0__.TaggedStruct("browser-session", {
		access: AuthMcpClientAccess,
		csrfToken: __vite_ssr_import_0__.String
	})
]);
const AuthMcpApprovalDecisionRequest = __vite_ssr_import_0__.Struct({
	authorization: AuthMcpAuthorizationRequest,
	decision: AuthMcpApprovalDecision
});
class AuthMcpApprovalError extends __vite_ssr_import_0__.TaggedError()("AuthMcpApprovalError", { message: __vite_ssr_import_0__.String }, { httpApiStatus: 400 }) {};
const AuthMcpTokenRequest = __vite_ssr_import_0__.Struct({
	grant_type: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.String),
	code: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.String),
	redirect_uri: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.String),
	client_id: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.String),
	code_verifier: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.String),
	resource: __vite_ssr_import_0__.optionalKey(__vite_ssr_import_0__.String)
}).pipe(__vite_ssr_import_1__.asFormUrlEncoded());
const AuthMcpTokenResult = __vite_ssr_import_0__.Struct({
	access_token: __vite_ssr_import_0__.String,
	token_type: __vite_ssr_import_0__.Literal("Bearer"),
	expires_in: __vite_ssr_import_0__.Number,
	scope: __vite_ssr_import_0__.String
});
class AuthMcpTokenError extends __vite_ssr_import_0__.Error("AuthMcpTokenError")({
	error: __vite_ssr_import_0__.Literals([
		"invalid_request",
		"invalid_client",
		"invalid_grant",
		"unsupported_grant_type"
	]),
	error_description: __vite_ssr_import_0__.String
}, { httpApiStatus: 400 }) {
	get message() {
		return this.error_description;
	}
}
//# sourceMappingSource=vite-generated
//# sourceMappingURL=data:application/json;base64,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Q0FDMUQsZUFBZTtDQUNmLFVBQVU7QUFDWixDQUFDO0FBR00sTUFBTSw2QkFBNkIsc0JBQU8sWUFBa0MsQ0FBQyxDQUNsRix3QkFDQSxFQUFFLFNBQVMsc0JBQU8sT0FBTyxHQUN6QixFQUFFLGVBQWUsSUFBSSxDQUN2QixDQUFDLENBQUMsQ0FBQztBQUVJLE1BQU0sc0JBQXNCLHNCQUFPLE9BQU87Q0FDL0MsWUFBWSxzQkFBTyxZQUFZLHNCQUFPLE1BQU07Q0FDNUMsTUFBTSxzQkFBTyxZQUFZLHNCQUFPLE1BQU07Q0FDdEMsY0FBYyxzQkFBTyxZQUFZLHNCQUFPLE1BQU07Q0FDOUMsV0FBVyxzQkFBTyxZQUFZLHNCQUFPLE1BQU07Q0FDM0MsZUFBZSxzQkFBTyxZQUFZLHNCQUFPLE1BQU07Q0FDL0MsVUFBVSxzQkFBTyxZQUFZLHNCQUFPLE1BQU07QUFDNUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxzQkFBYyxpQkFBaUIsQ0FBQztBQUdqQyxNQUFNLHFCQUFxQixzQkFBTyxPQUFPO0NBQzlDLGNBQWMsc0JBQU87Q0FDckIsWUFBWSxzQkFBTyxRQUFRLFFBQVE7Q0FDbkMsWUFBWSxzQkFBTztDQUNuQixPQUFPLHNCQUFPO0FBQ2hCLENBQUM7QUFHTSxNQUFNLDBCQUEwQixzQkFBTyxNQUF5QixtQkFBbUIsQ0FBQyxDQUN6RjtDQUNFLE9BQU8sc0JBQU8sU0FBUztFQUNyQjtFQUNBO0VBQ0E7RUFDQTtDQUNGLENBQUM7Q0FDRCxtQkFBbUIsc0JBQU87QUFDNUIsR0FDQSxFQUFFLGVBQWUsSUFBSSxDQUN2QixDQUFDLENBQUM7Q0FDQSxJQUFhLFVBQWtCO0VBQzdCLE9BQU8sS0FBSztDQUNkO0FBQ0YiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImF1dGgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgU2NoZW1hIGZyb20gXCJlZmZlY3QvU2NoZW1hXCI7XG5pbXBvcnQgKiBhcyBIdHRwQXBpU2NoZW1hIGZyb20gXCJlZmZlY3QvaHR0cC1hcGkvSHR0cEFwaVNjaGVtYVwiO1xuXG5pbXBvcnQge1xuICBBdXRoU2Vzc2lvbklkLFxuICBGb3J3YXJkQ29tcGF0aWJsZUFycmF5LFxuICBDbGllbnRTdXJmYWNlLFxuICBDbGllbnRXZWJEZXBsb3ltZW50LFxuICBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG59IGZyb20gXCIuL2Jhc2VTY2hlbWFzLnRzXCI7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJBdXRoUG9saWN5ID0gU2NoZW1hLkxpdGVyYWxzKFtcbiAgXCJkZXNrdG9wLW1hbmFnZWQtbG9jYWxcIixcbiAgXCJsb29wYmFjay1icm93c2VyXCIsXG4gIFwicmVtb3RlLXJlYWNoYWJsZVwiLFxuICBcInVuc2FmZS1uby1hdXRoXCIsXG5dKTtcbmV4cG9ydCB0eXBlIFNlcnZlckF1dGhQb2xpY3kgPSB0eXBlb2YgU2VydmVyQXV0aFBvbGljeS5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2VydmVyQXV0aEJvb3RzdHJhcE1ldGhvZCA9IFNjaGVtYS5MaXRlcmFscyhbXCJkZXNrdG9wLWJvb3RzdHJhcFwiLCBcIm9uZS10aW1lLXRva2VuXCJdKTtcbmV4cG9ydCB0eXBlIFNlcnZlckF1dGhCb290c3RyYXBNZXRob2QgPSB0eXBlb2YgU2VydmVyQXV0aEJvb3RzdHJhcE1ldGhvZC5UeXBlO1xuXG5leHBvcnQgY29uc3QgU2VydmVyQXV0aFNlc3Npb25NZXRob2QgPSBTY2hlbWEuTGl0ZXJhbHMoW1xuICBcImJyb3dzZXItc2Vzc2lvbi1jb29raWVcIixcbiAgXCJiZWFyZXItYWNjZXNzLXRva2VuXCIsXG4gIFwiZHBvcC1hY2Nlc3MtdG9rZW5cIixcbl0pO1xuZXhwb3J0IHR5cGUgU2VydmVyQXV0aFNlc3Npb25NZXRob2QgPSB0eXBlb2YgU2VydmVyQXV0aFNlc3Npb25NZXRob2QuVHlwZTtcblxuZXhwb3J0IGNvbnN0IEF1dGhPcmNoZXN0cmF0aW9uUmVhZFNjb3BlID0gXCJvcmNoZXN0cmF0aW9uOnJlYWRcIiBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBBdXRoT3JjaGVzdHJhdGlvbk9wZXJhdGVTY29wZSA9IFwib3JjaGVzdHJhdGlvbjpvcGVyYXRlXCIgYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgQXV0aFNldHRpbmdzV3JpdGVTY29wZSA9IFwic2V0dGluZ3M6d3JpdGVcIiBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBBdXRoUHJvdmlkZXJzTWFuYWdlU2NvcGUgPSBcInByb3ZpZGVyczptYW5hZ2VcIiBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBBdXRoRW52aXJvbm1lbnRNYWludGFpblNjb3BlID0gXCJlbnZpcm9ubWVudDptYWludGFpblwiIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IEF1dGhQcmV2aWV3T3BlcmF0ZVNjb3BlID0gXCJwcmV2aWV3Om9wZXJhdGVcIiBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBBdXRoRGlhZ25vc3RpY3NSZWFkU2NvcGUgPSBcImRpYWdub3N0aWNzOnJlYWRcIiBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBBdXRoVGVybWluYWxSZWFkU2NvcGUgPSBcInRlcm1pbmFsOnJlYWRcIiBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBBdXRoVGVybWluYWxPcGVyYXRlU2NvcGUgPSBcInRlcm1pbmFsOm9wZXJhdGVcIiBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBBdXRoU291cmNlQ29udHJvbFdyaXRlU2NvcGUgPSBcInNvdXJjZS1jb250cm9sOndyaXRlXCIgYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgQXV0aEZpbGVzeXN0ZW1SZWFkU2NvcGUgPSBcImZpbGVzeXN0ZW06cmVhZFwiIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IEF1dGhGaWxlc3lzdGVtV3JpdGVTY29wZSA9IFwiZmlsZXN5c3RlbTp3cml0ZVwiIGFzIGNvbnN0O1xuLyoqIFJldGFpbmVkIGZvciBkZWNvZGluZyBleGlzdGluZyBjcmVkZW50aWFsczsgZ3JhbnRzIG5vIGN1cnJlbnQgUlBDIGFjY2Vzcy4gKi9cbmNvbnN0IEF1dGhSZXZpZXdXcml0ZVNjb3BlID0gXCJyZXZpZXc6d3JpdGVcIiBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBBdXRoQWNjZXNzUmVhZFNjb3BlID0gXCJhY2Nlc3M6cmVhZFwiIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IEF1dGhBY2Nlc3NXcml0ZVNjb3BlID0gXCJhY2Nlc3M6d3JpdGVcIiBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBBdXRoUmVsYXlSZWFkU2NvcGUgPSBcInJlbGF5OnJlYWRcIiBhcyBjb25zdDtcbmV4cG9ydCBjb25zdCBBdXRoUmVsYXlXcml0ZVNjb3BlID0gXCJyZWxheTp3cml0ZVwiIGFzIGNvbnN0O1xuZXhwb3J0IGNvbnN0IEF1dGhFbnZpcm9ubWVudFNjb3BlID0gU2NoZW1hLkxpdGVyYWxzKFtcbiAgQXV0aE9yY2hlc3RyYXRpb25SZWFkU2NvcGUsXG4gIEF1dGhPcmNoZXN0cmF0aW9uT3BlcmF0ZVNjb3BlLFxuICBBdXRoU2V0dGluZ3NXcml0ZVNjb3BlLFxuICBBdXRoUHJvdmlkZXJzTWFuYWdlU2NvcGUsXG4gIEF1dGhFbnZpcm9ubWVudE1haW50YWluU2NvcGUsXG4gIEF1dGhQcmV2aWV3T3BlcmF0ZVNjb3BlLFxuICBBdXRoRGlhZ25vc3RpY3NSZWFkU2NvcGUsXG4gIEF1dGhUZXJtaW5hbFJlYWRTY29wZSxcbiAgQXV0aFRlcm1pbmFsT3BlcmF0ZVNjb3BlLFxuICBBdXRoRmlsZXN5c3RlbVJlYWRTY29wZSxcbiAgQXV0aEZpbGVzeXN0ZW1Xcml0ZVNjb3BlLFxuICBBdXRoUmV2aWV3V3JpdGVTY29wZSxcbiAgQXV0aFNvdXJjZUNvbnRyb2xXcml0ZVNjb3BlLFxuICBBdXRoQWNjZXNzUmVhZFNjb3BlLFxuICBBdXRoQWNjZXNzV3JpdGVTY29wZSxcbiAgQXV0aFJlbGF5UmVhZFNjb3BlLFxuICBBdXRoUmVsYXlXcml0ZVNjb3BlLFxuXSk7XG5leHBvcnQgdHlwZSBBdXRoRW52aXJvbm1lbnRTY29wZSA9IHR5cGVvZiBBdXRoRW52aXJvbm1lbnRTY29wZS5UeXBlO1xuZXhwb3J0IGNvbnN0IEF1dGhFbnZpcm9ubWVudFNjb3BlcyA9IFNjaGVtYS5BcnJheShBdXRoRW52aXJvbm1lbnRTY29wZSk7XG5leHBvcnQgdHlwZSBBdXRoRW52aXJvbm1lbnRTY29wZXMgPSB0eXBlb2YgQXV0aEVudmlyb25tZW50U2NvcGVzLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBBdXRoR3JhbnRTY29wZSA9IFNjaGVtYS5MaXRlcmFscyhcbiAgQXV0aEVudmlyb25tZW50U2NvcGUubGl0ZXJhbHMuZmlsdGVyKChzY29wZSkgPT4gc2NvcGUgIT09IEF1dGhSZXZpZXdXcml0ZVNjb3BlKSxcbik7XG5leHBvcnQgdHlwZSBBdXRoR3JhbnRTY29wZSA9IHR5cGVvZiBBdXRoR3JhbnRTY29wZS5UeXBlO1xuZXhwb3J0IGNvbnN0IEF1dGhHcmFudFNjb3BlcyA9IFNjaGVtYS5BcnJheShBdXRoR3JhbnRTY29wZSk7XG5leHBvcnQgdHlwZSBBdXRoR3JhbnRTY29wZXMgPSB0eXBlb2YgQXV0aEdyYW50U2NvcGVzLlR5cGU7XG5cbmNvbnN0IGxlZ2FjeVNjb3BlcyA9IG5ldyBTZXQ8QXV0aEVudmlyb25tZW50U2NvcGU+KFtcbiAgQXV0aE9yY2hlc3RyYXRpb25SZWFkU2NvcGUsXG4gIEF1dGhPcmNoZXN0cmF0aW9uT3BlcmF0ZVNjb3BlLFxuICBBdXRoVGVybWluYWxPcGVyYXRlU2NvcGUsXG4gIEF1dGhSZXZpZXdXcml0ZVNjb3BlLFxuICBBdXRoQWNjZXNzUmVhZFNjb3BlLFxuICBBdXRoQWNjZXNzV3JpdGVTY29wZSxcbiAgQXV0aFJlbGF5UmVhZFNjb3BlLFxuICBBdXRoUmVsYXlXcml0ZVNjb3BlLFxuXSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdXRoU2NvcGVSZXNwb25zZShzY29wZXM6IFJlYWRvbmx5QXJyYXk8QXV0aEVudmlyb25tZW50U2NvcGU+KSB7XG4gIHJldHVybiB7IHNjb3Blczogc2NvcGVzLmZpbHRlcigoc2NvcGUpID0+IGxlZ2FjeVNjb3Blcy5oYXMoc2NvcGUpKSwgcGVybWlzc2lvbnM6IHNjb3BlcyB9O1xufVxuXG5jb25zdCBhdXRoU2NvcGVSZXNwb25zZUZpZWxkcyA9IHtcbiAgc2NvcGVzOiBBdXRoRW52aXJvbm1lbnRTY29wZXMsXG4gIHBlcm1pc3Npb25zOiBTY2hlbWEub3B0aW9uYWxLZXkoRm9yd2FyZENvbXBhdGlibGVBcnJheShBdXRoRW52aXJvbm1lbnRTY29wZSkpLFxufTtcblxuLy8gQ2xpZW50LW9ubHkgZmFsbGJhY2sgZm9yIG9sZCBzZXJ2ZXJzLiBTZXJ2ZXJzIG5ldmVyIGV4cGFuZCBncmFudHM7IGVtcHR5IHBlcm1pc3Npb25zIGdyYW50IG5vdGhpbmcuXG5jb25zdCBsZWdhY3lQYXJlbnRzOiBQYXJ0aWFsPFJlY29yZDxBdXRoRW52aXJvbm1lbnRTY29wZSwgQXV0aEVudmlyb25tZW50U2NvcGU+PiA9IHtcbiAgW0F1dGhGaWxlc3lzdGVtUmVhZFNjb3BlXTogQXV0aE9yY2hlc3RyYXRpb25SZWFkU2NvcGUsXG4gIFtBdXRoRGlhZ25vc3RpY3NSZWFkU2NvcGVdOiBBdXRoT3JjaGVzdHJhdGlvblJlYWRTY29wZSxcbiAgW0F1dGhTZXR0aW5nc1dyaXRlU2NvcGVdOiBBdXRoT3JjaGVzdHJhdGlvbk9wZXJhdGVTY29wZSxcbiAgW0F1dGhQcm92aWRlcnNNYW5hZ2VTY29wZV06IEF1dGhPcmNoZXN0cmF0aW9uT3BlcmF0ZVNjb3BlLFxuICBbQXV0aEVudmlyb25tZW50TWFpbnRhaW5TY29wZV06IEF1dGhPcmNoZXN0cmF0aW9uT3BlcmF0ZVNjb3BlLFxuICBbQXV0aFByZXZpZXdPcGVyYXRlU2NvcGVdOiBBdXRoT3JjaGVzdHJhdGlvbk9wZXJhdGVTY29wZSxcbiAgW0F1dGhTb3VyY2VDb250cm9sV3JpdGVTY29wZV06IEF1dGhPcmNoZXN0cmF0aW9uT3BlcmF0ZVNjb3BlLFxuICBbQXV0aEZpbGVzeXN0ZW1Xcml0ZVNjb3BlXTogQXV0aE9yY2hlc3RyYXRpb25PcGVyYXRlU2NvcGUsXG4gIFtBdXRoVGVybWluYWxSZWFkU2NvcGVdOiBBdXRoVGVybWluYWxPcGVyYXRlU2NvcGUsXG59O1xuXG4vKiogS2VlcCBwZXJtaXNzaW9uIGRlbmlhbHMgZGVjb2RhYmxlIGJ5IGNsaWVudHMgd2l0aCB0aGUgb3JpZ2luYWwgc2NvcGUgZW51bS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdXRoU2NvcGVSZXF1aXJlZFJlc3BvbnNlKHJlcXVpcmVkUGVybWlzc2lvbjogQXV0aEVudmlyb25tZW50U2NvcGUpIHtcbiAgcmV0dXJuIHtcbiAgICByZXF1aXJlZFNjb3BlOiBsZWdhY3lQYXJlbnRzW3JlcXVpcmVkUGVybWlzc2lvbl0gPz8gcmVxdWlyZWRQZXJtaXNzaW9uLFxuICAgIHJlcXVpcmVkUGVybWlzc2lvbixcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uR3JhbnRJbnB1dCB7XG4gIHJlYWRvbmx5IGF1dGhlbnRpY2F0ZWQ6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNjb3Blcz86IFJlYWRvbmx5QXJyYXk8QXV0aEVudmlyb25tZW50U2NvcGU+IHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBwZXJtaXNzaW9ucz86IFJlYWRvbmx5QXJyYXk8QXV0aEVudmlyb25tZW50U2NvcGU+IHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBhdXRoPzogeyByZWFkb25seSBzZXJ2ZXJVcGRhdGVTY29wZT86IHN0cmluZyB8IHVuZGVmaW5lZCB9IHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2Vzc2lvbkdyYW50c1Njb3BlKFxuICBzZXNzaW9uOiBTZXNzaW9uR3JhbnRJbnB1dCxcbiAgc2NvcGU6IEF1dGhFbnZpcm9ubWVudFNjb3BlLFxuKTogYm9vbGVhbiB7XG4gIGlmICghc2Vzc2lvbi5hdXRoZW50aWNhdGVkKSByZXR1cm4gZmFsc2U7XG4gIGlmIChzZXNzaW9uLnBlcm1pc3Npb25zICE9PSB1bmRlZmluZWQpIHJldHVybiBzZXNzaW9uLnBlcm1pc3Npb25zLmluY2x1ZGVzKHNjb3BlKTtcbiAgaWYgKHNlc3Npb24uc2NvcGVzPy5pbmNsdWRlcyhzY29wZSkpIHJldHVybiB0cnVlO1xuICBpZiAoc2Vzc2lvbi5hdXRoPy5zZXJ2ZXJVcGRhdGVTY29wZSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHBhcmVudCA9IGxlZ2FjeVBhcmVudHNbc2NvcGVdO1xuICByZXR1cm4gcGFyZW50ICE9PSB1bmRlZmluZWQgJiYgc2Vzc2lvbi5zY29wZXM/LmluY2x1ZGVzKHBhcmVudCkgPT09IHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXNzaW9uSGFzTGVnYWN5UGVybWlzc2lvbnMoc2Vzc2lvbjogU2Vzc2lvbkdyYW50SW5wdXQpOiBib29sZWFuIHtcbiAgY29uc3QgcGVybWlzc2lvbnMgPSBzZXNzaW9uLnBlcm1pc3Npb25zO1xuICByZXR1cm4gKFxuICAgIHNlc3Npb24uYXV0aGVudGljYXRlZCAmJlxuICAgIHBlcm1pc3Npb25zICE9PSB1bmRlZmluZWQgJiZcbiAgICBwZXJtaXNzaW9ucy5ldmVyeSgoc2NvcGUpID0+IGxlZ2FjeVNjb3Blcy5oYXMoc2NvcGUpKSAmJlxuICAgIE9iamVjdC52YWx1ZXMobGVnYWN5UGFyZW50cykuc29tZSgocGFyZW50KSA9PiBwZXJtaXNzaW9ucy5pbmNsdWRlcyhwYXJlbnQpKVxuICApO1xufVxuXG4vLyBTaGVsbCBhbmQgZnVsbC1hY2Nlc3MgYWdlbnQgc2NvcGVzIGFscmVhZHkgY29uZmVyIGFjY2VzcyBhbmQgcmVsYXkgYXV0aG9yaXR5LlxuZXhwb3J0IGNvbnN0IEF1dGhTdGFuZGFyZENsaWVudFNjb3BlcyA9IFtcbiAgQXV0aE9yY2hlc3RyYXRpb25SZWFkU2NvcGUsXG4gIEF1dGhPcmNoZXN0cmF0aW9uT3BlcmF0ZVNjb3BlLFxuICBBdXRoU2V0dGluZ3NXcml0ZVNjb3BlLFxuICBBdXRoUHJvdmlkZXJzTWFuYWdlU2NvcGUsXG4gIEF1dGhFbnZpcm9ubWVudE1haW50YWluU2NvcGUsXG4gIEF1dGhQcmV2aWV3T3BlcmF0ZVNjb3BlLFxuICBBdXRoRGlhZ25vc3RpY3NSZWFkU2NvcGUsXG4gIEF1dGhUZXJtaW5hbFJlYWRTY29wZSxcbiAgQXV0aFRlcm1pbmFsT3BlcmF0ZVNjb3BlLFxuICBBdXRoU291cmNlQ29udHJvbFdyaXRlU2NvcGUsXG4gIEF1dGhGaWxlc3lzdGVtUmVhZFNjb3BlLFxuICBBdXRoRmlsZXN5c3RlbVdyaXRlU2NvcGUsXG4gIEF1dGhSZWxheVJlYWRTY29wZSxcbiAgQXV0aEFjY2Vzc1JlYWRTY29wZSxcbiAgQXV0aEFjY2Vzc1dyaXRlU2NvcGUsXG4gIEF1dGhSZWxheVdyaXRlU2NvcGUsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgQXV0aFRva2VuRXhjaGFuZ2VHcmFudFR5cGUgPVxuICBcInVybjppZXRmOnBhcmFtczpvYXV0aDpncmFudC10eXBlOnRva2VuLWV4Y2hhbmdlXCIgYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgQXV0aEFjY2Vzc1Rva2VuVHlwZSA9IFwidXJuOmlldGY6cGFyYW1zOm9hdXRoOnRva2VuLXR5cGU6YWNjZXNzX3Rva2VuXCIgYXMgY29uc3Q7XG5leHBvcnQgY29uc3QgQXV0aEVudmlyb25tZW50Qm9vdHN0cmFwVG9rZW5UeXBlID1cbiAgXCJ1cm46dDM6cGFyYW1zOm9hdXRoOnRva2VuLXR5cGU6ZW52aXJvbm1lbnQtYm9vdHN0cmFwXCIgYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBTZXJ2ZXJBdXRoRGVzY3JpcHRvciA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBwb2xpY3k6IFNlcnZlckF1dGhQb2xpY3ksXG4gIGJvb3RzdHJhcE1ldGhvZHM6IFNjaGVtYS5BcnJheShTZXJ2ZXJBdXRoQm9vdHN0cmFwTWV0aG9kKSxcbiAgc2Vzc2lvbk1ldGhvZHM6IFNjaGVtYS5BcnJheShTZXJ2ZXJBdXRoU2Vzc2lvbk1ldGhvZCksXG4gIHNlc3Npb25Db29raWVOYW1lOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG4gIC8qKiBPbGRlciBzZXJ2ZXJzIG9taXQgdGhpcyBhbmQgYXV0aG9yaXplIHNlbGYtdXBkYXRlcyB3aXRoIG9yY2hlc3RyYXRpb246b3BlcmF0ZS4gKi9cbiAgc2VydmVyVXBkYXRlU2NvcGU6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuTGl0ZXJhbChBdXRoRW52aXJvbm1lbnRNYWludGFpblNjb3BlKSksXG59KTtcbmV4cG9ydCB0eXBlIFNlcnZlckF1dGhEZXNjcmlwdG9yID0gdHlwZW9mIFNlcnZlckF1dGhEZXNjcmlwdG9yLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBBdXRoQnJvd3NlclNlc3Npb25SZXF1ZXN0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIGNyZWRlbnRpYWw6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbn0pO1xuZXhwb3J0IHR5cGUgQXV0aEJyb3dzZXJTZXNzaW9uUmVxdWVzdCA9IHR5cGVvZiBBdXRoQnJvd3NlclNlc3Npb25SZXF1ZXN0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBBdXRoQnJvd3NlclNlc3Npb25SZXN1bHQgPSBTY2hlbWEuU3RydWN0KHtcbiAgYXV0aGVudGljYXRlZDogU2NoZW1hLkxpdGVyYWwodHJ1ZSksXG4gIC4uLmF1dGhTY29wZVJlc3BvbnNlRmllbGRzLFxuICBzZXNzaW9uTWV0aG9kOiBTZXJ2ZXJBdXRoU2Vzc2lvbk1ldGhvZCxcbiAgZXhwaXJlc0F0OiBTY2hlbWEuRGF0ZVRpbWVVdGMsXG59KTtcbmV4cG9ydCB0eXBlIEF1dGhCcm93c2VyU2Vzc2lvblJlc3VsdCA9IHR5cGVvZiBBdXRoQnJvd3NlclNlc3Npb25SZXN1bHQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IEF1dGhDbGllbnRNZXRhZGF0YURldmljZVR5cGUgPSBTY2hlbWEuTGl0ZXJhbHMoW1xuICBcImRlc2t0b3BcIixcbiAgXCJtb2JpbGVcIixcbiAgXCJ0YWJsZXRcIixcbiAgXCJib3RcIixcbiAgXCJ1bmtub3duXCIsXG5dKTtcbmV4cG9ydCB0eXBlIEF1dGhDbGllbnRNZXRhZGF0YURldmljZVR5cGUgPSB0eXBlb2YgQXV0aENsaWVudE1ldGFkYXRhRGV2aWNlVHlwZS5UeXBlO1xuXG5leHBvcnQgY29uc3QgQXV0aENsaWVudFByZXNlbnRhdGlvbk1ldGFkYXRhID0gU2NoZW1hLlN0cnVjdCh7XG4gIGxhYmVsOiBTY2hlbWEub3B0aW9uYWxLZXkoVHJpbW1lZE5vbkVtcHR5U3RyaW5nKSxcbiAgZGV2aWNlVHlwZTogU2NoZW1hLm9wdGlvbmFsS2V5KEF1dGhDbGllbnRNZXRhZGF0YURldmljZVR5cGUpLFxuICBvczogU2NoZW1hLm9wdGlvbmFsS2V5KFRyaW1tZWROb25FbXB0eVN0cmluZyksXG4gIG9zTWFqb3JWZXJzaW9uOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkludCksXG4gIGRldmljZU1vZGVsOiBTY2hlbWEub3B0aW9uYWxLZXkoVHJpbW1lZE5vbkVtcHR5U3RyaW5nKSxcbiAgc3VyZmFjZTogU2NoZW1hLm9wdGlvbmFsS2V5KENsaWVudFN1cmZhY2UpLFxuICB3ZWJEZXBsb3ltZW50OiBTY2hlbWEub3B0aW9uYWxLZXkoQ2xpZW50V2ViRGVwbG95bWVudCksXG4gIGJyb3dzZXI6IFNjaGVtYS5vcHRpb25hbEtleShUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxuICBhcHBWZXJzaW9uOiBTY2hlbWEub3B0aW9uYWxLZXkoVHJpbW1lZE5vbkVtcHR5U3RyaW5nKSxcbn0pO1xuZXhwb3J0IHR5cGUgQXV0aENsaWVudFByZXNlbnRhdGlvbk1ldGFkYXRhID0gdHlwZW9mIEF1dGhDbGllbnRQcmVzZW50YXRpb25NZXRhZGF0YS5UeXBlO1xuXG5leHBvcnQgY29uc3QgQXV0aFRva2VuRXhjaGFuZ2VSZXF1ZXN0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIGdyYW50X3R5cGU6IFNjaGVtYS5MaXRlcmFsKEF1dGhUb2tlbkV4Y2hhbmdlR3JhbnRUeXBlKSxcbiAgc3ViamVjdF90b2tlbjogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBzdWJqZWN0X3Rva2VuX3R5cGU6IFNjaGVtYS5MaXRlcmFsKEF1dGhFbnZpcm9ubWVudEJvb3RzdHJhcFRva2VuVHlwZSksXG4gIHJlcXVlc3RlZF90b2tlbl90eXBlOiBTY2hlbWEuTGl0ZXJhbChBdXRoQWNjZXNzVG9rZW5UeXBlKSxcbiAgc2NvcGU6IFNjaGVtYS5vcHRpb25hbEtleShUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxuICBjbGllbnRfbGFiZWw6IFNjaGVtYS5vcHRpb25hbEtleShUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxuICBjbGllbnRfZGV2aWNlX3R5cGU6IFNjaGVtYS5vcHRpb25hbEtleShBdXRoQ2xpZW50TWV0YWRhdGFEZXZpY2VUeXBlKSxcbiAgY2xpZW50X29zOiBTY2hlbWEub3B0aW9uYWxLZXkoVHJpbW1lZE5vbkVtcHR5U3RyaW5nKSxcbn0pLnBpcGUoSHR0cEFwaVNjaGVtYS5hc0Zvcm1VcmxFbmNvZGVkKCkpO1xuZXhwb3J0IHR5cGUgQXV0aFRva2VuRXhjaGFuZ2VSZXF1ZXN0ID0gdHlwZW9mIEF1dGhUb2tlbkV4Y2hhbmdlUmVxdWVzdC5UeXBlO1xuXG5leHBvcnQgY29uc3QgQXV0aEFjY2Vzc1Rva2VuUmVzdWx0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIGFjY2Vzc190b2tlbjogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICBpc3N1ZWRfdG9rZW5fdHlwZTogU2NoZW1hLkxpdGVyYWwoQXV0aEFjY2Vzc1Rva2VuVHlwZSksXG4gIHRva2VuX3R5cGU6IFNjaGVtYS5MaXRlcmFscyhbXCJCZWFyZXJcIiwgXCJEUG9QXCJdKSxcbiAgZXhwaXJlc19pbjogU2NoZW1hLk51bWJlcixcbiAgc2NvcGU6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbn0pO1xuZXhwb3J0IHR5cGUgQXV0aEFjY2Vzc1Rva2VuUmVzdWx0ID0gdHlwZW9mIEF1dGhBY2Nlc3NUb2tlblJlc3VsdC5UeXBlO1xuXG5leHBvcnQgY29uc3QgQXV0aFdlYlNvY2tldFRpY2tldFJlc3VsdCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICB0aWNrZXQ6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgZXhwaXJlc0F0OiBTY2hlbWEuRGF0ZVRpbWVVdGMsXG59KTtcbmV4cG9ydCB0eXBlIEF1dGhXZWJTb2NrZXRUaWNrZXRSZXN1bHQgPSB0eXBlb2YgQXV0aFdlYlNvY2tldFRpY2tldFJlc3VsdC5UeXBlO1xuXG4vKipcbiAqIE1lZGlhIHJvdXRlcyBzaGFyZSBhIHRpY2tldCBhY3Jvc3MgcmVxdWVzdHM7IFJQQyB1c2VzIGEgc2VwYXJhdGUgdGlja2V0LlxuICogVXNlIGEgcGF0aCBzZWdtZW50IHNvIHRoZSBEUG9QIG1pbnQgcHJvb2YgY292ZXJzIGl0OyBgaHR1YCBleGNsdWRlcyBxdWVyeSBwYXJhbWV0ZXJzLFxuICogd2hpY2ggY291bGQgYmUgc3RyaXBwZWQgdG8gY2hhbmdlIHRoZSB0aWNrZXQncyB1c2UuXG4gKiBPbGRlciBjbGllbnRzIG1pbnQgYXQgdGhlIGJhcmUgcGF0aCBhbmQgcmVjZWl2ZSB0aWNrZXRzIHZhbGlkIGZvciBlaXRoZXIgdXNlLlxuICovXG5leHBvcnQgY29uc3QgQXV0aFdlYlNvY2tldFRpY2tldFVzZSA9IFNjaGVtYS5MaXRlcmFscyhbXCJycGNcIiwgXCJtZWRpYVwiXSk7XG5leHBvcnQgdHlwZSBBdXRoV2ViU29ja2V0VGlja2V0VXNlID0gdHlwZW9mIEF1dGhXZWJTb2NrZXRUaWNrZXRVc2UuVHlwZTtcblxuZXhwb3J0IGNvbnN0IEF1dGhXZWJTb2NrZXRUaWNrZXRQYXJhbXMgPSBTY2hlbWEuU3RydWN0KHsgdXNlOiBBdXRoV2ViU29ja2V0VGlja2V0VXNlIH0pO1xuXG5leHBvcnQgY29uc3QgQXV0aFBhaXJpbmdDcmVkZW50aWFsUmVzdWx0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIGlkOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG4gIGNyZWRlbnRpYWw6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgbGFiZWw6IFNjaGVtYS5vcHRpb25hbEtleShUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxuICBleHBpcmVzQXQ6IFNjaGVtYS5EYXRlVGltZVV0Yyxcbn0pO1xuZXhwb3J0IHR5cGUgQXV0aFBhaXJpbmdDcmVkZW50aWFsUmVzdWx0ID0gdHlwZW9mIEF1dGhQYWlyaW5nQ3JlZGVudGlhbFJlc3VsdC5UeXBlO1xuXG5leHBvcnQgY29uc3QgQXV0aFBhaXJpbmdMaW5rID0gU2NoZW1hLlN0cnVjdCh7XG4gIGlkOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG4gIC4uLmF1dGhTY29wZVJlc3BvbnNlRmllbGRzLFxuICBzdWJqZWN0OiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG4gIGxhYmVsOiBTY2hlbWEub3B0aW9uYWxLZXkoVHJpbW1lZE5vbkVtcHR5U3RyaW5nKSxcbiAgY3JlYXRlZEF0OiBTY2hlbWEuRGF0ZVRpbWVVdGMsXG4gIGV4cGlyZXNBdDogU2NoZW1hLkRhdGVUaW1lVXRjLFxufSk7XG5leHBvcnQgdHlwZSBBdXRoUGFpcmluZ0xpbmsgPSB0eXBlb2YgQXV0aFBhaXJpbmdMaW5rLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBBdXRoQ2xpZW50TWV0YWRhdGEgPSBTY2hlbWEuU3RydWN0KHtcbiAgbGFiZWw6IFNjaGVtYS5vcHRpb25hbEtleShUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxuICBpcEFkZHJlc3M6IFNjaGVtYS5vcHRpb25hbEtleShUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxuICB1c2VyQWdlbnQ6IFNjaGVtYS5vcHRpb25hbEtleShUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxuICBkZXZpY2VUeXBlOiBBdXRoQ2xpZW50TWV0YWRhdGFEZXZpY2VUeXBlLFxuICBvczogU2NoZW1hLm9wdGlvbmFsS2V5KFRyaW1tZWROb25FbXB0eVN0cmluZyksXG4gIGJyb3dzZXI6IFNjaGVtYS5vcHRpb25hbEtleShUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxufSk7XG5leHBvcnQgdHlwZSBBdXRoQ2xpZW50TWV0YWRhdGEgPSB0eXBlb2YgQXV0aENsaWVudE1ldGFkYXRhLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBBdXRoQ2xpZW50U2Vzc2lvbiA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBzZXNzaW9uSWQ6IEF1dGhTZXNzaW9uSWQsXG4gIHN1YmplY3Q6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgLi4uYXV0aFNjb3BlUmVzcG9uc2VGaWVsZHMsXG4gIG1ldGhvZDogU2VydmVyQXV0aFNlc3Npb25NZXRob2QsXG4gIGNsaWVudDogQXV0aENsaWVudE1ldGFkYXRhLFxuICBpc3N1ZWRBdDogU2NoZW1hLkRhdGVUaW1lVXRjLFxuICBleHBpcmVzQXQ6IFNjaGVtYS5EYXRlVGltZVV0YyxcbiAgbGFzdENvbm5lY3RlZEF0OiBTY2hlbWEuTnVsbE9yKFNjaGVtYS5EYXRlVGltZVV0YyksXG4gIGNvbm5lY3RlZDogU2NoZW1hLkJvb2xlYW4sXG4gIGN1cnJlbnQ6IFNjaGVtYS5Cb29sZWFuLFxufSk7XG5leHBvcnQgdHlwZSBBdXRoQ2xpZW50U2Vzc2lvbiA9IHR5cGVvZiBBdXRoQ2xpZW50U2Vzc2lvbi5UeXBlO1xuXG5leHBvcnQgY29uc3QgQXV0aEFjY2Vzc1NuYXBzaG90ID0gU2NoZW1hLlN0cnVjdCh7XG4gIHBhaXJpbmdMaW5rczogU2NoZW1hLkFycmF5KEF1dGhQYWlyaW5nTGluayksXG4gIGNsaWVudFNlc3Npb25zOiBTY2hlbWEuQXJyYXkoQXV0aENsaWVudFNlc3Npb24pLFxufSk7XG5leHBvcnQgdHlwZSBBdXRoQWNjZXNzU25hcHNob3QgPSB0eXBlb2YgQXV0aEFjY2Vzc1NuYXBzaG90LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBBdXRoQWNjZXNzU3RyZWFtU25hcHNob3RFdmVudCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICB2ZXJzaW9uOiBTY2hlbWEuTGl0ZXJhbCgxKSxcbiAgcmV2aXNpb246IFNjaGVtYS5OdW1iZXIsXG4gIHR5cGU6IFNjaGVtYS5MaXRlcmFsKFwic25hcHNob3RcIiksXG4gIHBheWxvYWQ6IEF1dGhBY2Nlc3NTbmFwc2hvdCxcbn0pO1xuZXhwb3J0IHR5cGUgQXV0aEFjY2Vzc1N0cmVhbVNuYXBzaG90RXZlbnQgPSB0eXBlb2YgQXV0aEFjY2Vzc1N0cmVhbVNuYXBzaG90RXZlbnQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IEF1dGhBY2Nlc3NTdHJlYW1QYWlyaW5nTGlua1Vwc2VydGVkRXZlbnQgPSBTY2hlbWEuU3RydWN0KHtcbiAgdmVyc2lvbjogU2NoZW1hLkxpdGVyYWwoMSksXG4gIHJldmlzaW9uOiBTY2hlbWEuTnVtYmVyLFxuICB0eXBlOiBTY2hlbWEuTGl0ZXJhbChcInBhaXJpbmdMaW5rVXBzZXJ0ZWRcIiksXG4gIHBheWxvYWQ6IEF1dGhQYWlyaW5nTGluayxcbn0pO1xuZXhwb3J0IHR5cGUgQXV0aEFjY2Vzc1N0cmVhbVBhaXJpbmdMaW5rVXBzZXJ0ZWRFdmVudCA9XG4gIHR5cGVvZiBBdXRoQWNjZXNzU3RyZWFtUGFpcmluZ0xpbmtVcHNlcnRlZEV2ZW50LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBBdXRoQWNjZXNzU3RyZWFtUGFpcmluZ0xpbmtSZW1vdmVkRXZlbnQgPSBTY2hlbWEuU3RydWN0KHtcbiAgdmVyc2lvbjogU2NoZW1hLkxpdGVyYWwoMSksXG4gIHJldmlzaW9uOiBTY2hlbWEuTnVtYmVyLFxuICB0eXBlOiBTY2hlbWEuTGl0ZXJhbChcInBhaXJpbmdMaW5rUmVtb3ZlZFwiKSxcbiAgcGF5bG9hZDogU2NoZW1hLlN0cnVjdCh7XG4gICAgaWQ6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgfSksXG59KTtcbmV4cG9ydCB0eXBlIEF1dGhBY2Nlc3NTdHJlYW1QYWlyaW5nTGlua1JlbW92ZWRFdmVudCA9XG4gIHR5cGVvZiBBdXRoQWNjZXNzU3RyZWFtUGFpcmluZ0xpbmtSZW1vdmVkRXZlbnQuVHlwZTtcblxuZXhwb3J0IGNsYXNzIEF1dGhBY2Nlc3NTdHJlYW1FcnJvciBleHRlbmRzIFNjaGVtYS5UYWdnZWRFcnJvcjxBdXRoQWNjZXNzU3RyZWFtRXJyb3I+KCkoXG4gIFwiQXV0aEFjY2Vzc1N0cmVhbUVycm9yXCIsXG4gIHtcbiAgICBtZXNzYWdlOiBTY2hlbWEuU3RyaW5nLFxuICB9LFxuKSB7fVxuXG5leHBvcnQgY2xhc3MgRW52aXJvbm1lbnRBdXRob3JpemF0aW9uRXJyb3IgZXh0ZW5kcyBTY2hlbWEuVGFnZ2VkRXJyb3I8RW52aXJvbm1lbnRBdXRob3JpemF0aW9uRXJyb3I+KCkoXG4gIFwiRW52aXJvbm1lbnRBdXRob3JpemF0aW9uRXJyb3JcIixcbiAge1xuICAgIG1lc3NhZ2U6IFNjaGVtYS5TdHJpbmcsXG4gICAgcmVxdWlyZWRTY29wZTogQXV0aEVudmlyb25tZW50U2NvcGUsXG4gICAgcmVxdWlyZWRQZXJtaXNzaW9uOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLlN0cmluZyksXG4gIH0sXG4pIHt9XG5cbmV4cG9ydCBjb25zdCBBdXRoQWNjZXNzU3RyZWFtQ2xpZW50VXBzZXJ0ZWRFdmVudCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICB2ZXJzaW9uOiBTY2hlbWEuTGl0ZXJhbCgxKSxcbiAgcmV2aXNpb246IFNjaGVtYS5OdW1iZXIsXG4gIHR5cGU6IFNjaGVtYS5MaXRlcmFsKFwiY2xpZW50VXBzZXJ0ZWRcIiksXG4gIHBheWxvYWQ6IEF1dGhDbGllbnRTZXNzaW9uLFxufSk7XG5leHBvcnQgdHlwZSBBdXRoQWNjZXNzU3RyZWFtQ2xpZW50VXBzZXJ0ZWRFdmVudCA9IHR5cGVvZiBBdXRoQWNjZXNzU3RyZWFtQ2xpZW50VXBzZXJ0ZWRFdmVudC5UeXBlO1xuXG5leHBvcnQgY29uc3QgQXV0aEFjY2Vzc1N0cmVhbUNsaWVudFJlbW92ZWRFdmVudCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICB2ZXJzaW9uOiBTY2hlbWEuTGl0ZXJhbCgxKSxcbiAgcmV2aXNpb246IFNjaGVtYS5OdW1iZXIsXG4gIHR5cGU6IFNjaGVtYS5MaXRlcmFsKFwiY2xpZW50UmVtb3ZlZFwiKSxcbiAgcGF5bG9hZDogU2NoZW1hLlN0cnVjdCh7XG4gICAgc2Vzc2lvbklkOiBBdXRoU2Vzc2lvbklkLFxuICB9KSxcbn0pO1xuZXhwb3J0IHR5cGUgQXV0aEFjY2Vzc1N0cmVhbUNsaWVudFJlbW92ZWRFdmVudCA9IHR5cGVvZiBBdXRoQWNjZXNzU3RyZWFtQ2xpZW50UmVtb3ZlZEV2ZW50LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBBdXRoQWNjZXNzU3RyZWFtRXZlbnQgPSBTY2hlbWEuVW5pb24oW1xuICBBdXRoQWNjZXNzU3RyZWFtU25hcHNob3RFdmVudCxcbiAgQXV0aEFjY2Vzc1N0cmVhbVBhaXJpbmdMaW5rVXBzZXJ0ZWRFdmVudCxcbiAgQXV0aEFjY2Vzc1N0cmVhbVBhaXJpbmdMaW5rUmVtb3ZlZEV2ZW50LFxuICBBdXRoQWNjZXNzU3RyZWFtQ2xpZW50VXBzZXJ0ZWRFdmVudCxcbiAgQXV0aEFjY2Vzc1N0cmVhbUNsaWVudFJlbW92ZWRFdmVudCxcbl0pO1xuZXhwb3J0IHR5cGUgQXV0aEFjY2Vzc1N0cmVhbUV2ZW50ID0gdHlwZW9mIEF1dGhBY2Nlc3NTdHJlYW1FdmVudC5UeXBlO1xuXG5leHBvcnQgY29uc3QgQXV0aFJldm9rZVBhaXJpbmdMaW5rSW5wdXQgPSBTY2hlbWEuU3RydWN0KHtcbiAgaWQ6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbn0pO1xuZXhwb3J0IHR5cGUgQXV0aFJldm9rZVBhaXJpbmdMaW5rSW5wdXQgPSB0eXBlb2YgQXV0aFJldm9rZVBhaXJpbmdMaW5rSW5wdXQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IEF1dGhSZXZva2VDbGllbnRTZXNzaW9uSW5wdXQgPSBTY2hlbWEuU3RydWN0KHtcbiAgc2Vzc2lvbklkOiBBdXRoU2Vzc2lvbklkLFxufSk7XG5leHBvcnQgdHlwZSBBdXRoUmV2b2tlQ2xpZW50U2Vzc2lvbklucHV0ID0gdHlwZW9mIEF1dGhSZXZva2VDbGllbnRTZXNzaW9uSW5wdXQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IEF1dGhDcmVhdGVQYWlyaW5nQ3JlZGVudGlhbElucHV0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIGxhYmVsOiBTY2hlbWEub3B0aW9uYWxLZXkoVHJpbW1lZE5vbkVtcHR5U3RyaW5nKSxcbiAgc2NvcGVzOiBTY2hlbWEub3B0aW9uYWxLZXkoQXV0aEdyYW50U2NvcGVzKSxcbn0pO1xuZXhwb3J0IHR5cGUgQXV0aENyZWF0ZVBhaXJpbmdDcmVkZW50aWFsSW5wdXQgPSB0eXBlb2YgQXV0aENyZWF0ZVBhaXJpbmdDcmVkZW50aWFsSW5wdXQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IEF1dGhTZXNzaW9uU3RhdGUgPSBTY2hlbWEuU3RydWN0KHtcbiAgYXV0aGVudGljYXRlZDogU2NoZW1hLkJvb2xlYW4sXG4gIGF1dGg6IFNlcnZlckF1dGhEZXNjcmlwdG9yLFxuICBzY29wZXM6IFNjaGVtYS5vcHRpb25hbEtleShBdXRoRW52aXJvbm1lbnRTY29wZXMpLFxuICBwZXJtaXNzaW9uczogYXV0aFNjb3BlUmVzcG9uc2VGaWVsZHMucGVybWlzc2lvbnMsXG4gIHNlc3Npb25NZXRob2Q6IFNjaGVtYS5vcHRpb25hbEtleShTZXJ2ZXJBdXRoU2Vzc2lvbk1ldGhvZCksXG4gIGV4cGlyZXNBdDogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5EYXRlVGltZVV0YyksXG59KTtcbmV4cG9ydCB0eXBlIEF1dGhTZXNzaW9uU3RhdGUgPSB0eXBlb2YgQXV0aFNlc3Npb25TdGF0ZS5UeXBlO1xuXG5leHBvcnQgY29uc3QgQXV0aE1jcENsaWVudEFjY2VzcyA9IFNjaGVtYS5MaXRlcmFscyhbXG4gIFwicmVhZC1vbmx5XCIsXG4gIFwiYXBwcm92YWwtcmVxdWlyZWRcIixcbiAgXCJhdXRvLWFjY2VwdC1lZGl0c1wiLFxuICBcImF1dG9cIixcbiAgXCJmdWxsLWFjY2Vzc1wiLFxuXSk7XG5leHBvcnQgdHlwZSBBdXRoTWNwQ2xpZW50QWNjZXNzID0gdHlwZW9mIEF1dGhNY3BDbGllbnRBY2Nlc3MuVHlwZTtcblxuZXhwb3J0IGNvbnN0IEF1dGhNY3BQcm90ZWN0ZWRSZXNvdXJjZU1ldGFkYXRhID0gU2NoZW1hLlN0cnVjdCh7XG4gIHJlc291cmNlOiBTY2hlbWEuU3RyaW5nLFxuICBhdXRob3JpemF0aW9uX3NlcnZlcnM6IFNjaGVtYS5BcnJheShTY2hlbWEuU3RyaW5nKSxcbiAgc2NvcGVzX3N1cHBvcnRlZDogU2NoZW1hLkFycmF5KEF1dGhFbnZpcm9ubWVudFNjb3BlKSxcbiAgYmVhcmVyX21ldGhvZHNfc3VwcG9ydGVkOiBTY2hlbWEuQXJyYXkoU2NoZW1hLkxpdGVyYWwoXCJoZWFkZXJcIikpLFxuICByZXNvdXJjZV9uYW1lOiBTY2hlbWEuU3RyaW5nLFxufSk7XG5leHBvcnQgdHlwZSBBdXRoTWNwUHJvdGVjdGVkUmVzb3VyY2VNZXRhZGF0YSA9IHR5cGVvZiBBdXRoTWNwUHJvdGVjdGVkUmVzb3VyY2VNZXRhZGF0YS5UeXBlO1xuXG5leHBvcnQgY29uc3QgQXV0aE1jcEF1dGhvcml6YXRpb25TZXJ2ZXJNZXRhZGF0YSA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBpc3N1ZXI6IFNjaGVtYS5TdHJpbmcsXG4gIGF1dGhvcml6YXRpb25fZW5kcG9pbnQ6IFNjaGVtYS5TdHJpbmcsXG4gIHRva2VuX2VuZHBvaW50OiBTY2hlbWEuU3RyaW5nLFxuICByZWdpc3RyYXRpb25fZW5kcG9pbnQ6IFNjaGVtYS5TdHJpbmcsXG4gIHJlc3BvbnNlX3R5cGVzX3N1cHBvcnRlZDogU2NoZW1hLkFycmF5KFNjaGVtYS5MaXRlcmFsKFwiY29kZVwiKSksXG4gIGdyYW50X3R5cGVzX3N1cHBvcnRlZDogU2NoZW1hLkFycmF5KFNjaGVtYS5MaXRlcmFsKFwiYXV0aG9yaXphdGlvbl9jb2RlXCIpKSxcbiAgY29kZV9jaGFsbGVuZ2VfbWV0aG9kc19zdXBwb3J0ZWQ6IFNjaGVtYS5BcnJheShTY2hlbWEuTGl0ZXJhbChcIlMyNTZcIikpLFxuICB0b2tlbl9lbmRwb2ludF9hdXRoX21ldGhvZHNfc3VwcG9ydGVkOiBTY2hlbWEuQXJyYXkoU2NoZW1hLkxpdGVyYWwoXCJub25lXCIpKSxcbiAgc2NvcGVzX3N1cHBvcnRlZDogU2NoZW1hLkFycmF5KEF1dGhFbnZpcm9ubWVudFNjb3BlKSxcbiAgYXV0aG9yaXphdGlvbl9yZXNwb25zZV9pc3NfcGFyYW1ldGVyX3N1cHBvcnRlZDogU2NoZW1hLkJvb2xlYW4sXG59KTtcbmV4cG9ydCB0eXBlIEF1dGhNY3BBdXRob3JpemF0aW9uU2VydmVyTWV0YWRhdGEgPSB0eXBlb2YgQXV0aE1jcEF1dGhvcml6YXRpb25TZXJ2ZXJNZXRhZGF0YS5UeXBlO1xuXG5leHBvcnQgY29uc3QgQXV0aE1jcENsaWVudFJlZ2lzdHJhdGlvbiA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBjbGllbnRfbmFtZTogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5TdHJpbmcpLFxuICByZWRpcmVjdF91cmlzOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkFycmF5KFNjaGVtYS5TdHJpbmcpKSxcbiAgdG9rZW5fZW5kcG9pbnRfYXV0aF9tZXRob2Q6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuU3RyaW5nKSxcbn0pO1xuZXhwb3J0IHR5cGUgQXV0aE1jcENsaWVudFJlZ2lzdHJhdGlvbiA9IHR5cGVvZiBBdXRoTWNwQ2xpZW50UmVnaXN0cmF0aW9uLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBBdXRoTWNwUmVnaXN0ZXJlZENsaWVudCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBjbGllbnRfaWQ6IFNjaGVtYS5TdHJpbmcsXG4gIGNsaWVudF9uYW1lOiBTY2hlbWEuU3RyaW5nLFxuICByZWRpcmVjdF91cmlzOiBTY2hlbWEuQXJyYXkoU2NoZW1hLlN0cmluZyksXG4gIGdyYW50X3R5cGVzOiBTY2hlbWEuQXJyYXkoU2NoZW1hLkxpdGVyYWwoXCJhdXRob3JpemF0aW9uX2NvZGVcIikpLFxuICByZXNwb25zZV90eXBlczogU2NoZW1hLkFycmF5KFNjaGVtYS5MaXRlcmFsKFwiY29kZVwiKSksXG4gIHRva2VuX2VuZHBvaW50X2F1dGhfbWV0aG9kOiBTY2hlbWEuTGl0ZXJhbChcIm5vbmVcIiksXG59KS5waXBlKEh0dHBBcGlTY2hlbWEuc3RhdHVzKDIwMSkpO1xuZXhwb3J0IHR5cGUgQXV0aE1jcFJlZ2lzdGVyZWRDbGllbnQgPSB0eXBlb2YgQXV0aE1jcFJlZ2lzdGVyZWRDbGllbnQuVHlwZTtcblxuZXhwb3J0IGNsYXNzIEF1dGhNY3BSZWdpc3RyYXRpb25FcnJvciBleHRlbmRzIFNjaGVtYS5FcnJvcjxBdXRoTWNwUmVnaXN0cmF0aW9uRXJyb3I+KFxuICBcIkF1dGhNY3BSZWdpc3RyYXRpb25FcnJvclwiLFxuKShcbiAge1xuICAgIGVycm9yOiBTY2hlbWEuTGl0ZXJhbHMoW1wiaW52YWxpZF9jbGllbnRfbWV0YWRhdGFcIiwgXCJpbnZhbGlkX3JlZGlyZWN0X3VyaVwiXSksXG4gICAgZXJyb3JfZGVzY3JpcHRpb246IFNjaGVtYS5TdHJpbmcsXG4gIH0sXG4gIHsgaHR0cEFwaVN0YXR1czogNDAwIH0sXG4pIHtcbiAgb3ZlcnJpZGUgZ2V0IG1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvcl9kZXNjcmlwdGlvbjtcbiAgfVxufVxuXG4vKiogRmllbGRzIGFyZSBvcHRpb25hbCBoZXJlIGJlY2F1c2UgdGhlIHNlcnZlciB2YWxpZGF0ZXMgdGhlbS4gKi9cbmV4cG9ydCBjb25zdCBBdXRoTWNwQXV0aG9yaXphdGlvblJlcXVlc3QgPSBTY2hlbWEuU3RydWN0KHtcbiAgcmVzcG9uc2VfdHlwZTogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5TdHJpbmcpLFxuICBjbGllbnRfaWQ6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuU3RyaW5nKSxcbiAgcmVkaXJlY3RfdXJpOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLlN0cmluZyksXG4gIGNvZGVfY2hhbGxlbmdlOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLlN0cmluZyksXG4gIGNvZGVfY2hhbGxlbmdlX21ldGhvZDogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5TdHJpbmcpLFxuICBzdGF0ZTogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5TdHJpbmcpLFxuICByZXNvdXJjZTogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5TdHJpbmcpLFxufSk7XG5leHBvcnQgdHlwZSBBdXRoTWNwQXV0aG9yaXphdGlvblJlcXVlc3QgPSB0eXBlb2YgQXV0aE1jcEF1dGhvcml6YXRpb25SZXF1ZXN0LlR5cGU7XG5cbi8qKiBTZXJ2ZXItdmFsaWRhdGVkIHJlcXVlc3QgZGV0YWlscywgdHJ1c3RlZCBieSB0aGUgY2xpZW50IG9ubHkgZm9yIGRpc3BsYXkuICovXG5leHBvcnQgY29uc3QgQXV0aE1jcEFwcHJvdmFsRGV0YWlscyA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICAvKiogU2VsZi1kZWNsYXJlZCBieSB0aGUgY2xpZW50LCBzbyBzaG93biBhcyBzdWNoLiAqL1xuICBjbGllbnROYW1lOiBTY2hlbWEuU3RyaW5nLFxuICByZWRpcmVjdEhvc3Q6IFNjaGVtYS5TdHJpbmcsXG4gIGVudmlyb25tZW50SG9zdDogU2NoZW1hLlN0cmluZyxcbiAgY3NyZlRva2VuOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLlN0cmluZyksXG4gIC8qKiBPbmx5IHNjb3BlcyBoZWxkIGJ5IHRoaXMgc2Vzc2lvbiBxdWFsaWZ5OyBvdGhlcnMgbmVlZCBhIHBhaXJpbmcgY29kZS4gQWJzZW50IHdpdGggYGNzcmZUb2tlbmAuICovXG4gIG9uZUNsaWNrQWNjZXNzOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLkFycmF5KEF1dGhNY3BDbGllbnRBY2Nlc3MpKSxcbn0pO1xuZXhwb3J0IHR5cGUgQXV0aE1jcEFwcHJvdmFsRGV0YWlscyA9IHR5cGVvZiBBdXRoTWNwQXBwcm92YWxEZXRhaWxzLlR5cGU7XG5cbmV4cG9ydCBjb25zdCBBdXRoTWNwQXBwcm92YWxSZWRpcmVjdCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICByZWRpcmVjdFRvOiBTY2hlbWEuU3RyaW5nLFxufSk7XG5leHBvcnQgdHlwZSBBdXRoTWNwQXBwcm92YWxSZWRpcmVjdCA9IHR5cGVvZiBBdXRoTWNwQXBwcm92YWxSZWRpcmVjdC5UeXBlO1xuXG5leHBvcnQgY29uc3QgQXV0aE1jcEFwcHJvdmFsRGVjaXNpb24gPSBTY2hlbWEuVW5pb24oW1xuICBTY2hlbWEuVGFnZ2VkU3RydWN0KFwiZGVueVwiLCB7fSksXG4gIFNjaGVtYS5UYWdnZWRTdHJ1Y3QoXCJwYWlyaW5nLWNvZGVcIiwge1xuICAgIGFjY2VzczogQXV0aE1jcENsaWVudEFjY2VzcyxcbiAgICBjb2RlOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG4gIH0pLFxuICBTY2hlbWEuVGFnZ2VkU3RydWN0KFwiYnJvd3Nlci1zZXNzaW9uXCIsIHtcbiAgICBhY2Nlc3M6IEF1dGhNY3BDbGllbnRBY2Nlc3MsXG4gICAgY3NyZlRva2VuOiBTY2hlbWEuU3RyaW5nLFxuICB9KSxcbl0pO1xuZXhwb3J0IHR5cGUgQXV0aE1jcEFwcHJvdmFsRGVjaXNpb24gPSB0eXBlb2YgQXV0aE1jcEFwcHJvdmFsRGVjaXNpb24uVHlwZTtcblxuZXhwb3J0IGNvbnN0IEF1dGhNY3BBcHByb3ZhbERlY2lzaW9uUmVxdWVzdCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBhdXRob3JpemF0aW9uOiBBdXRoTWNwQXV0aG9yaXphdGlvblJlcXVlc3QsXG4gIGRlY2lzaW9uOiBBdXRoTWNwQXBwcm92YWxEZWNpc2lvbixcbn0pO1xuZXhwb3J0IHR5cGUgQXV0aE1jcEFwcHJvdmFsRGVjaXNpb25SZXF1ZXN0ID0gdHlwZW9mIEF1dGhNY3BBcHByb3ZhbERlY2lzaW9uUmVxdWVzdC5UeXBlO1xuXG5leHBvcnQgY2xhc3MgQXV0aE1jcEFwcHJvdmFsRXJyb3IgZXh0ZW5kcyBTY2hlbWEuVGFnZ2VkRXJyb3I8QXV0aE1jcEFwcHJvdmFsRXJyb3I+KCkoXG4gIFwiQXV0aE1jcEFwcHJvdmFsRXJyb3JcIixcbiAgeyBtZXNzYWdlOiBTY2hlbWEuU3RyaW5nIH0sXG4gIHsgaHR0cEFwaVN0YXR1czogNDAwIH0sXG4pIHt9XG5cbmV4cG9ydCBjb25zdCBBdXRoTWNwVG9rZW5SZXF1ZXN0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIGdyYW50X3R5cGU6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuU3RyaW5nKSxcbiAgY29kZTogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5TdHJpbmcpLFxuICByZWRpcmVjdF91cmk6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuU3RyaW5nKSxcbiAgY2xpZW50X2lkOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLlN0cmluZyksXG4gIGNvZGVfdmVyaWZpZXI6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuU3RyaW5nKSxcbiAgcmVzb3VyY2U6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuU3RyaW5nKSxcbn0pLnBpcGUoSHR0cEFwaVNjaGVtYS5hc0Zvcm1VcmxFbmNvZGVkKCkpO1xuZXhwb3J0IHR5cGUgQXV0aE1jcFRva2VuUmVxdWVzdCA9IHR5cGVvZiBBdXRoTWNwVG9rZW5SZXF1ZXN0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBBdXRoTWNwVG9rZW5SZXN1bHQgPSBTY2hlbWEuU3RydWN0KHtcbiAgYWNjZXNzX3Rva2VuOiBTY2hlbWEuU3RyaW5nLFxuICB0b2tlbl90eXBlOiBTY2hlbWEuTGl0ZXJhbChcIkJlYXJlclwiKSxcbiAgZXhwaXJlc19pbjogU2NoZW1hLk51bWJlcixcbiAgc2NvcGU6IFNjaGVtYS5TdHJpbmcsXG59KTtcbmV4cG9ydCB0eXBlIEF1dGhNY3BUb2tlblJlc3VsdCA9IHR5cGVvZiBBdXRoTWNwVG9rZW5SZXN1bHQuVHlwZTtcblxuZXhwb3J0IGNsYXNzIEF1dGhNY3BUb2tlbkVycm9yIGV4dGVuZHMgU2NoZW1hLkVycm9yPEF1dGhNY3BUb2tlbkVycm9yPihcIkF1dGhNY3BUb2tlbkVycm9yXCIpKFxuICB7XG4gICAgZXJyb3I6IFNjaGVtYS5MaXRlcmFscyhbXG4gICAgICBcImludmFsaWRfcmVxdWVzdFwiLFxuICAgICAgXCJpbnZhbGlkX2NsaWVudFwiLFxuICAgICAgXCJpbnZhbGlkX2dyYW50XCIsXG4gICAgICBcInVuc3VwcG9ydGVkX2dyYW50X3R5cGVcIixcbiAgICBdKSxcbiAgICBlcnJvcl9kZXNjcmlwdGlvbjogU2NoZW1hLlN0cmluZyxcbiAgfSxcbiAgeyBodHRwQXBpU3RhdHVzOiA0MDAgfSxcbikge1xuICBvdmVycmlkZSBnZXQgbWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uO1xuICB9XG59XG4iXSwiZmlsZSI6Ii9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9hdXRoLnRzIn0=

//# vitestCache=W3siZmlsZSI6IjEiLCJpZCI6IjEiLCJ1cmwiOiIyIiwiaW1wb3J0cyI6IjMiLCJtYXBwaW5ncyI6ZmFsc2UsImRlcHMiOiI0IiwiZHluYW1pY0RlcHMiOiI1Iiwic3RhdGljTW9ja3MiOm51bGx9LCIvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9hdXRoLnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL2F1dGgudHMiLHsidXJscyI6IjYiLCJpZHMiOiI3In0sWyI4IiwiOSIsIjEwIl0sW10sWyI4IiwiOSIsIjEwIl0se30sIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvbm9kZV9tb2R1bGVzLy5wbnBtL2VmZmVjdEA0LjAuNS9ub2RlX21vZHVsZXMvZWZmZWN0L2Rpc3QvU2NoZW1hLmpzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9ub2RlX21vZHVsZXMvLnBucG0vZWZmZWN0QDQuMC41L25vZGVfbW9kdWxlcy9lZmZlY3QvZGlzdC9odHRwLWFwaS9IdHRwQXBpU2NoZW1hLmpzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL2Jhc2VTY2hlbWFzLnRzIl0=