__vite_ssr_exportName__("EnvironmentRequestInvalidReason", () => { try { return EnvironmentRequestInvalidReason } catch {} });
__vite_ssr_exportName__("EnvironmentAuthInvalidReason", () => { try { return EnvironmentAuthInvalidReason } catch {} });
__vite_ssr_exportName__("EnvironmentOperationForbiddenReason", () => { try { return EnvironmentOperationForbiddenReason } catch {} });
__vite_ssr_exportName__("EnvironmentInternalErrorReason", () => { try { return EnvironmentInternalErrorReason } catch {} });
__vite_ssr_exportName__("EnvironmentRequestInvalidError", () => { try { return EnvironmentRequestInvalidError } catch {} });
__vite_ssr_exportName__("EnvironmentAuthInvalidError", () => { try { return EnvironmentAuthInvalidError } catch {} });
__vite_ssr_exportName__("EnvironmentScopeRequiredError", () => { try { return EnvironmentScopeRequiredError } catch {} });
__vite_ssr_exportName__("EnvironmentOperationForbiddenError", () => { try { return EnvironmentOperationForbiddenError } catch {} });
__vite_ssr_exportName__("EnvironmentInternalError", () => { try { return EnvironmentInternalError } catch {} });
__vite_ssr_exportName__("EnvironmentResourceNotFoundReason", () => { try { return EnvironmentResourceNotFoundReason } catch {} });
__vite_ssr_exportName__("EnvironmentResourceNotFoundError", () => { try { return EnvironmentResourceNotFoundError } catch {} });
__vite_ssr_exportName__("EnvironmentHttpCommonError", () => { try { return EnvironmentHttpCommonError } catch {} });
__vite_ssr_exportName__("EnvironmentHttpBadRequestError", () => { try { return EnvironmentHttpBadRequestError } catch {} });
__vite_ssr_exportName__("EnvironmentHttpUnauthorizedError", () => { try { return EnvironmentHttpUnauthorizedError } catch {} });
__vite_ssr_exportName__("EnvironmentHttpForbiddenError", () => { try { return EnvironmentHttpForbiddenError } catch {} });
__vite_ssr_exportName__("EnvironmentHttpInternalServerError", () => { try { return EnvironmentHttpInternalServerError } catch {} });
__vite_ssr_exportName__("EnvironmentHttpConflictError", () => { try { return EnvironmentHttpConflictError } catch {} });
__vite_ssr_exportName__("EnvironmentCloudEndpointUnavailableError", () => { try { return EnvironmentCloudEndpointUnavailableError } catch {} });
__vite_ssr_exportName__("EnvironmentAuthenticatedPrincipal", () => { try { return EnvironmentAuthenticatedPrincipal } catch {} });
__vite_ssr_exportName__("EnvironmentAuthenticatedAuth", () => { try { return EnvironmentAuthenticatedAuth } catch {} });
__vite_ssr_exportName__("EnvironmentCloudRelayConfigResult", () => { try { return EnvironmentCloudRelayConfigResult } catch {} });
__vite_ssr_exportName__("EnvironmentConnectReachabilityCause", () => { try { return EnvironmentConnectReachabilityCause } catch {} });
__vite_ssr_exportName__("EnvironmentConnectReachability", () => { try { return EnvironmentConnectReachability } catch {} });
__vite_ssr_exportName__("formatConnectReachable", () => { try { return formatConnectReachable } catch {} });
__vite_ssr_exportName__("T3_CONNECT_TROUBLESHOOTING_SECTIONS", () => { try { return T3_CONNECT_TROUBLESHOOTING_SECTIONS } catch {} });
__vite_ssr_exportName__("t3ConnectTroubleshootingUrl", () => { try { return t3ConnectTroubleshootingUrl } catch {} });
__vite_ssr_exportName__("connectReachabilityHelpUrl", () => { try { return connectReachabilityHelpUrl } catch {} });
__vite_ssr_exportName__("EnvironmentCloudLinkStateResult", () => { try { return EnvironmentCloudLinkStateResult } catch {} });
__vite_ssr_exportName__("EnvironmentCloudPreferencesRequest", () => { try { return EnvironmentCloudPreferencesRequest } catch {} });
__vite_ssr_exportName__("AuthPairingLinkRevokeResult", () => { try { return AuthPairingLinkRevokeResult } catch {} });
__vite_ssr_exportName__("AuthClientSessionRevokeResult", () => { try { return AuthClientSessionRevokeResult } catch {} });
__vite_ssr_exportName__("AuthOtherClientSessionsRevokeResult", () => { try { return AuthOtherClientSessionsRevokeResult } catch {} });
__vite_ssr_exportName__("EnvironmentHttpApi", () => { try { return EnvironmentHttpApi } 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/Context.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/Schema.js");
const __vite_ssr_import_2__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/http-api/HttpApi.js");
const __vite_ssr_import_3__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/http-api/HttpApiEndpoint.js");
const __vite_ssr_import_4__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/http-api/HttpApiGroup.js");
const __vite_ssr_import_5__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/http-api/HttpApiMiddleware.js");
const __vite_ssr_import_6__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/http-api/HttpApiSchema.js");
const __vite_ssr_import_7__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/http/HttpServerRespondable.js");
const __vite_ssr_import_8__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/node_modules/.pnpm/effect@4.0.5/node_modules/effect/dist/http/HttpServerResponse.js");
const __vite_ssr_import_9__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/auth.ts", {"importedNames":["AuthAccessTokenResult","AuthBrowserSessionRequest","AuthBrowserSessionResult","AuthClientSession","AuthCreatePairingCredentialInput","AuthMcpApprovalDecisionRequest","AuthMcpApprovalDetails","AuthMcpApprovalError","AuthMcpApprovalRedirect","AuthMcpAuthorizationRequest","AuthMcpAuthorizationServerMetadata","AuthMcpClientRegistration","AuthMcpProtectedResourceMetadata","AuthMcpRegisteredClient","AuthMcpRegistrationError","AuthMcpTokenError","AuthMcpTokenRequest","AuthMcpTokenResult","AuthPairingCredentialResult","AuthPairingLink","AuthRevokeClientSessionInput","AuthRevokePairingLinkInput","AuthEnvironmentScope","AuthTokenExchangeRequest","AuthSessionState","AuthWebSocketTicketParams","AuthWebSocketTicketResult","ServerAuthSessionMethod"]});
const __vite_ssr_import_10__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/environment.ts", {"importedNames":["ExecutionEnvironmentDescriptor","ORCHESTRATION_PROTOCOL_HEADER","ORCHESTRATION_PROTOCOL_VERSION_TEXT"]});
const __vite_ssr_import_11__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/baseSchemas.ts", {"importedNames":["DpopFailureReason","AuthSessionId","ThreadId","TrimmedNonEmptyString"]});
const __vite_ssr_import_12__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/orchestrationV2.ts", {"importedNames":["OrchestrationV2ShellSnapshot","OrchestrationV2ThreadBoundedSnapshot","OrchestrationV2ThreadDetailSnapshot","OrchestrationV2ThreadHistoryPage","OrchestrationV2ThreadTranscript"]});
const __vite_ssr_import_13__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/project.ts", {"importedNames":["Project","ProjectMutation","ProjectSnapshot"]});
const __vite_ssr_import_14__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/pullRequest.ts", {"importedNames":["PullRequestDiffInput","PullRequestDiffResult","PullRequestOperationError","PullRequestUnavailableError"]});
const __vite_ssr_import_15__ = await __vite_ssr_import__("/@fs/home/ubuntu/wt/pr-24263/packages/contracts/src/relay.ts", {"importedNames":["RelayCloudEnvironmentHealthRequest","RelayCloudMintCredentialRequest","RelayEnvironmentConfigRequest","RelayEnvironmentHealthResponse","RelayEnvironmentLinkProof","RelayEnvironmentMintResponse","RelayLinkProofRequest"]});
















const OptionalBearerHeaders = __vite_ssr_import_1__.Struct({
	authorization: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.String),
	dpop: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.String)
});
const OrchestrationProtocolHeaders = __vite_ssr_import_1__.Struct({
	authorization: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.String),
	dpop: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.String),
	[__vite_ssr_import_10__.ORCHESTRATION_PROTOCOL_HEADER]: __vite_ssr_import_1__.Literal((0,__vite_ssr_import_10__.ORCHESTRATION_PROTOCOL_VERSION_TEXT))
});
const OptionalDpopProofHeaders = __vite_ssr_import_1__.Struct({ dpop: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.String) });
const EnvironmentRequestInvalidReason = __vite_ssr_import_1__.Literals([
	"invalid_scope",
	"scope_not_granted",
	"invalid_command",
	"invalid_history_cursor",
	"thread_transcript_too_large"
]);
const EnvironmentAuthInvalidReason = __vite_ssr_import_1__.Literals(["missing_credential", "invalid_credential"]);
const EnvironmentOperationForbiddenReason = __vite_ssr_import_1__.Literals(["current_session_revoke_not_allowed"]);
const EnvironmentInternalErrorReason = __vite_ssr_import_1__.Literals([
	"bootstrap_validation_failed",
	"browser_session_issuance_failed",
	"browser_session_cookie_failed",
	"access_token_issuance_failed",
	"websocket_ticket_issuance_failed",
	"pairing_credential_issuance_failed",
	"pairing_links_load_failed",
	"pairing_link_revoke_failed",
	"client_sessions_load_failed",
	"client_session_revoke_failed",
	"project_snapshot_failed",
	"project_mutation_failed",
	"orchestration_snapshot_failed",
	"orchestration_thread_snapshot_failed",
	"orchestration_thread_bounded_snapshot_failed",
	"orchestration_thread_history_failed",
	"internal_error"
]);
class EnvironmentRequestInvalidError extends __vite_ssr_import_1__.TaggedError()("EnvironmentRequestInvalidError", {
	code: __vite_ssr_import_1__.Literal("invalid_request"),
	reason: EnvironmentRequestInvalidReason,
	traceId: __vite_ssr_import_11__.TrimmedNonEmptyString
}, { httpApiStatus: 400 }) {
	[__vite_ssr_import_7__.symbol]() {
		return __vite_ssr_import_8__.schemaJson(EnvironmentRequestInvalidError)(this, { status: 400 });
	}
	get message() {
		return `The environment rejected the request (${this.reason}).`;
	}
};
class EnvironmentAuthInvalidError extends __vite_ssr_import_1__.TaggedError()("EnvironmentAuthInvalidError", {
	code: __vite_ssr_import_1__.Literal("auth_invalid"),
	reason: EnvironmentAuthInvalidReason,
	dpopFailureReason: __vite_ssr_import_1__.optionalKey((0,__vite_ssr_import_11__.DpopFailureReason)),
	traceId: __vite_ssr_import_11__.TrimmedNonEmptyString
}, { httpApiStatus: 401 }) {
	[__vite_ssr_import_7__.symbol]() {
		return __vite_ssr_import_8__.schemaJson(EnvironmentAuthInvalidError)(this, { status: 401 });
	}
	get message() {
		return `The environment rejected this client's credentials (${this.reason}).`;
	}
};
class EnvironmentScopeRequiredError extends __vite_ssr_import_1__.TaggedError()("EnvironmentScopeRequiredError", {
	code: __vite_ssr_import_1__.Literal("insufficient_scope"),
	requiredScope: __vite_ssr_import_9__.AuthEnvironmentScope,
	requiredPermission: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.String),
	traceId: __vite_ssr_import_11__.TrimmedNonEmptyString
}, { httpApiStatus: 403 }) {
	[__vite_ssr_import_7__.symbol]() {
		return __vite_ssr_import_8__.schemaJson(EnvironmentScopeRequiredError)(this, { status: 403 });
	}
	get message() {
		return `This request needs the ${this.requiredPermission ?? this.requiredScope} scope, which this client does not have.`;
	}
};
class EnvironmentOperationForbiddenError extends __vite_ssr_import_1__.TaggedError()("EnvironmentOperationForbiddenError", {
	code: __vite_ssr_import_1__.Literal("operation_forbidden"),
	reason: EnvironmentOperationForbiddenReason,
	traceId: __vite_ssr_import_11__.TrimmedNonEmptyString
}, { httpApiStatus: 403 }) {
	[__vite_ssr_import_7__.symbol]() {
		return __vite_ssr_import_8__.schemaJson(EnvironmentOperationForbiddenError)(this, { status: 403 });
	}
	get message() {
		return `The environment refused this operation (${this.reason}).`;
	}
};
class EnvironmentInternalError extends __vite_ssr_import_1__.TaggedError()("EnvironmentInternalError", {
	code: __vite_ssr_import_1__.Literal("internal_error"),
	reason: EnvironmentInternalErrorReason,
	traceId: __vite_ssr_import_11__.TrimmedNonEmptyString
}, { httpApiStatus: 500 }) {
	[__vite_ssr_import_7__.symbol]() {
		return __vite_ssr_import_8__.schemaJson(EnvironmentInternalError)(this, { status: 500 });
	}
	get message() {
		return `The environment failed to answer this request (${this.reason}).`;
	}
};
const EnvironmentResourceNotFoundReason = __vite_ssr_import_1__.Literals(["thread_not_found"]);
class EnvironmentResourceNotFoundError extends __vite_ssr_import_1__.TaggedError()("EnvironmentResourceNotFoundError", {
	code: __vite_ssr_import_1__.Literal("not_found"),
	reason: EnvironmentResourceNotFoundReason,
	traceId: __vite_ssr_import_11__.TrimmedNonEmptyString
}, { httpApiStatus: 404 }) {
	[__vite_ssr_import_7__.symbol]() {
		return __vite_ssr_import_8__.schemaJson(EnvironmentResourceNotFoundError)(this, { status: 404 });
	}
	get message() {
		return `The environment could not find what this request named (${this.reason}).`;
	}
};
const EnvironmentHttpCommonError = __vite_ssr_import_1__.Union([
	EnvironmentRequestInvalidError,
	EnvironmentAuthInvalidError,
	EnvironmentScopeRequiredError,
	EnvironmentOperationForbiddenError,
	EnvironmentResourceNotFoundError,
	EnvironmentInternalError
]);
const EnvironmentAuthenticationErrors = [EnvironmentAuthInvalidError, EnvironmentInternalError];
class EnvironmentHttpBadRequestError extends __vite_ssr_import_1__.TaggedError()("EnvironmentHttpBadRequestError", { message: __vite_ssr_import_1__.String }, { httpApiStatus: 400 }) {
	[__vite_ssr_import_7__.symbol]() {
		return __vite_ssr_import_8__.schemaJson(EnvironmentHttpBadRequestError)(this, { status: 400 });
	}
};
class EnvironmentHttpUnauthorizedError extends __vite_ssr_import_1__.TaggedError()("EnvironmentHttpUnauthorizedError", { message: __vite_ssr_import_1__.String }, { httpApiStatus: 401 }) {
	[__vite_ssr_import_7__.symbol]() {
		return __vite_ssr_import_8__.schemaJson(EnvironmentHttpUnauthorizedError)(this, { status: 401 });
	}
};
class EnvironmentHttpForbiddenError extends __vite_ssr_import_1__.TaggedError()("EnvironmentHttpForbiddenError", { message: __vite_ssr_import_1__.String }, { httpApiStatus: 403 }) {
	[__vite_ssr_import_7__.symbol]() {
		return __vite_ssr_import_8__.schemaJson(EnvironmentHttpForbiddenError)(this, { status: 403 });
	}
};
class EnvironmentHttpInternalServerError extends __vite_ssr_import_1__.TaggedError()("EnvironmentHttpInternalServerError", { message: __vite_ssr_import_1__.String }, { httpApiStatus: 500 }) {
	[__vite_ssr_import_7__.symbol]() {
		return __vite_ssr_import_8__.schemaJson(EnvironmentHttpInternalServerError)(this, { status: 500 });
	}
};
class EnvironmentHttpConflictError extends __vite_ssr_import_1__.TaggedError()("EnvironmentHttpConflictError", { message: __vite_ssr_import_1__.String }, { httpApiStatus: 409 }) {
	[__vite_ssr_import_7__.symbol]() {
		return __vite_ssr_import_8__.schemaJson(EnvironmentHttpConflictError)(this, { status: 409 });
	}
};
class EnvironmentCloudEndpointUnavailableError extends __vite_ssr_import_1__.TaggedError()("EnvironmentCloudEndpointUnavailableError", {
	message: __vite_ssr_import_1__.String,
	endpointRuntimeStatus: __vite_ssr_import_1__.Unknown
}, { httpApiStatus: 503 }) {
	[__vite_ssr_import_7__.symbol]() {
		return __vite_ssr_import_8__.schemaJson(EnvironmentCloudEndpointUnavailableError)(this, { status: 503 });
	}
};
const EnvironmentSessionCreationErrors = [EnvironmentAuthInvalidError, EnvironmentInternalError];
const EnvironmentTokenExchangeErrors = [
	EnvironmentRequestInvalidError,
	EnvironmentAuthInvalidError,
	EnvironmentInternalError
];
const EnvironmentScopedOperationErrors = [EnvironmentScopeRequiredError, EnvironmentInternalError];
const EnvironmentPairingCredentialErrors = [EnvironmentRequestInvalidError, ...EnvironmentScopedOperationErrors];
const EnvironmentSessionRevokeErrors = [
	EnvironmentScopeRequiredError,
	EnvironmentOperationForbiddenError,
	EnvironmentInternalError
];
const EnvironmentProjectSnapshotErrors = [EnvironmentScopeRequiredError, EnvironmentInternalError];
const EnvironmentOrchestrationSnapshotErrors = [EnvironmentScopeRequiredError, EnvironmentInternalError];
const EnvironmentOrchestrationThreadSnapshotErrors = [
	EnvironmentScopeRequiredError,
	EnvironmentResourceNotFoundError,
	EnvironmentInternalError
];
const EnvironmentProjectMutationErrors = [
	EnvironmentRequestInvalidError,
	EnvironmentScopeRequiredError,
	EnvironmentInternalError
];
class EnvironmentAuthenticatedPrincipal extends __vite_ssr_import_0__.Service()("@t3tools/contracts/environmentHttp/EnvironmentAuthenticatedPrincipal") {};
class EnvironmentAuthenticatedAuth extends __vite_ssr_import_5__.Service()("EnvironmentAuthenticatedAuth", { error: EnvironmentAuthenticationErrors }) {};
const EnvironmentHttpCloudErrors = [
	EnvironmentHttpBadRequestError,
	EnvironmentHttpUnauthorizedError,
	EnvironmentHttpForbiddenError,
	EnvironmentHttpConflictError,
	EnvironmentHttpInternalServerError,
	EnvironmentScopeRequiredError
];
const EnvironmentCloudRelayConfigResult = __vite_ssr_import_1__.Struct({
	ok: __vite_ssr_import_1__.Boolean,
	endpointRuntimeStatus: __vite_ssr_import_1__.Unknown
});
const EnvironmentConnectReachabilityCause = __vite_ssr_import_1__.Literals([
	"not_linked",
	"connector_not_running",
	"connector_not_ready",
	"edge_unreachable",
	"no_connector",
	"origin_unreachable",
	"dns_failed",
	"timeout",
	"unexpected_response"
]);
/** Whether other devices can reach this environment through its T3 Connect tunnel. */
const EnvironmentConnectReachability = __vite_ssr_import_1__.Union([__vite_ssr_import_1__.Struct({
	status: __vite_ssr_import_1__.Literal("reachable"),
	checkedAt: __vite_ssr_import_1__.String,
	/** Null when cloudflared did not report a count. */
	readyConnections: __vite_ssr_import_1__.NullOr(__vite_ssr_import_1__.Int),
	protocol: __vite_ssr_import_1__.NullOr(__vite_ssr_import_1__.String)
}), __vite_ssr_import_1__.Struct({
	status: __vite_ssr_import_1__.Literal("unreachable"),
	checkedAt: __vite_ssr_import_1__.String,
	cause: EnvironmentConnectReachabilityCause,
	reason: __vite_ssr_import_1__.String,
	hint: __vite_ssr_import_1__.NullOr(__vite_ssr_import_1__.String),
	fix: __vite_ssr_import_1__.String
})]);
/** "Tunnel connected · 4 connections · QUIC" for a healthy check. */
function formatConnectReachable(result) {
	const count = result.readyConnections;
	return [
		"Tunnel connected",
		...count === null ? [] : [`${count} connection${count === 1 ? "" : "s"}`],
		...result.protocol ? [result.protocol.toUpperCase()] : []
	].join(" · ");
};
/**
* Sections of docs/user/t3-connect-troubleshooting.md. Each is the GitHub anchor of a
* heading there; the test fails when a heading is renamed without updating this list.
*/
const T3_CONNECT_TROUBLESHOOTING_SECTIONS = [
	"the-hosts-tunnel-is-offline",
	"port-7844-is-blocked-on-the-host",
	"the-tunnel-works-but-t3-code-does-not-answer",
	"the-t3-connect-address-does-not-resolve-or-answer",
	"this-device-cant-reach-t3-connect",
	"sign-in-account-or-link-problems",
	"the-clock-is-off",
	"the-host-runs-an-older-t3-code",
	"t3-connect-returned-an-error"
];
/** Clients, the CLI, and server logs link here as "More info". */
function t3ConnectTroubleshootingUrl(section) {
	return `https://github.com/pingdotgg/t3code/blob/main/docs/user/t3-connect-troubleshooting.md#${section}`;
};
const REACHABILITY_SECTION = {
	not_linked: "sign-in-account-or-link-problems",
	connector_not_running: "the-hosts-tunnel-is-offline",
	connector_not_ready: "the-hosts-tunnel-is-offline",
	no_connector: "the-hosts-tunnel-is-offline",
	edge_unreachable: "port-7844-is-blocked-on-the-host",
	origin_unreachable: "the-tunnel-works-but-t3-code-does-not-answer",
	unexpected_response: "the-tunnel-works-but-t3-code-does-not-answer",
	dns_failed: "the-t3-connect-address-does-not-resolve-or-answer",
	timeout: "the-t3-connect-address-does-not-resolve-or-answer"
};
function connectReachabilityHelpUrl(cause) {
	return t3ConnectTroubleshootingUrl(REACHABILITY_SECTION[cause]);
};
const EnvironmentCloudLinkStateResult = __vite_ssr_import_1__.Struct({
	linked: __vite_ssr_import_1__.Boolean,
	cloudUserId: __vite_ssr_import_1__.NullOr(__vite_ssr_import_1__.String),
	relayUrl: __vite_ssr_import_1__.NullOr(__vite_ssr_import_1__.String),
	relayIssuer: __vite_ssr_import_1__.NullOr(__vite_ssr_import_1__.String),
	managedTunnelActive: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean),
	publishAgentActivity: __vite_ssr_import_1__.Boolean,
	holdWebhooksWhileOffline: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean),
	linkRevoked: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean),
	/** The latest check the server ran on its own, absent until one finishes. */
	reachability: __vite_ssr_import_1__.optional(EnvironmentConnectReachability)
});
const EnvironmentCloudPreferencesRequest = __vite_ssr_import_1__.Struct({
	publishAgentActivity: __vite_ssr_import_1__.Boolean,
	holdWebhooksWhileOffline: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Boolean)
});
const AuthPairingLinkRevokeResult = __vite_ssr_import_1__.Struct({ revoked: __vite_ssr_import_1__.Boolean });
const AuthClientSessionRevokeResult = __vite_ssr_import_1__.Struct({ revoked: __vite_ssr_import_1__.Boolean });
const AuthOtherClientSessionsRevokeResult = __vite_ssr_import_1__.Struct({ revokedCount: __vite_ssr_import_1__.Number });
class EnvironmentMetadataHttpApi extends __vite_ssr_import_4__.make("metadata").add(__vite_ssr_import_3__.get("descriptor", "/.well-known/t3/environment", { success: __vite_ssr_import_10__.ExecutionEnvironmentDescriptor })) {}
class EnvironmentAuthHttpApi extends __vite_ssr_import_4__.make("auth").add(__vite_ssr_import_3__.get("session", "/api/auth/session", {
	headers: OptionalBearerHeaders,
	success: __vite_ssr_import_9__.AuthSessionState,
	error: [EnvironmentInternalError]
})).add(__vite_ssr_import_3__.post("browserSession", "/api/auth/browser-session", {
	payload: __vite_ssr_import_9__.AuthBrowserSessionRequest,
	success: __vite_ssr_import_9__.AuthBrowserSessionResult,
	error: EnvironmentSessionCreationErrors
})).add(__vite_ssr_import_3__.post("token", "/oauth/token", {
	headers: OptionalDpopProofHeaders,
	payload: __vite_ssr_import_9__.AuthTokenExchangeRequest,
	success: __vite_ssr_import_9__.AuthAccessTokenResult,
	error: EnvironmentTokenExchangeErrors
})).add(__vite_ssr_import_3__.post("webSocketTicket", "/api/auth/websocket-ticket", {
	headers: OptionalBearerHeaders,
	success: __vite_ssr_import_9__.AuthWebSocketTicketResult,
	error: [EnvironmentInternalError]
}).middleware(EnvironmentAuthenticatedAuth)).add(__vite_ssr_import_3__.post("webSocketTicketFor", "/api/auth/websocket-ticket/:use", {
	headers: OptionalBearerHeaders,
	params: __vite_ssr_import_9__.AuthWebSocketTicketParams,
	success: __vite_ssr_import_9__.AuthWebSocketTicketResult,
	error: [EnvironmentInternalError]
}).middleware(EnvironmentAuthenticatedAuth)).add(__vite_ssr_import_3__.post("pairingCredential", "/api/auth/pairing-token", {
	headers: OptionalBearerHeaders,
	payload: __vite_ssr_import_9__.AuthCreatePairingCredentialInput,
	success: __vite_ssr_import_9__.AuthPairingCredentialResult,
	error: EnvironmentPairingCredentialErrors
}).middleware(EnvironmentAuthenticatedAuth)).add(__vite_ssr_import_3__.get("pairingLinks", "/api/auth/pairing-links", {
	headers: OptionalBearerHeaders,
	success: __vite_ssr_import_1__.Array((0,__vite_ssr_import_9__.AuthPairingLink)),
	error: EnvironmentScopedOperationErrors
}).middleware(EnvironmentAuthenticatedAuth)).add(__vite_ssr_import_3__.post("revokePairingLink", "/api/auth/pairing-links/revoke", {
	headers: OptionalBearerHeaders,
	payload: __vite_ssr_import_9__.AuthRevokePairingLinkInput,
	success: AuthPairingLinkRevokeResult,
	error: EnvironmentScopedOperationErrors
}).middleware(EnvironmentAuthenticatedAuth)).add(__vite_ssr_import_3__.get("clients", "/api/auth/clients", {
	headers: OptionalBearerHeaders,
	success: __vite_ssr_import_1__.Array((0,__vite_ssr_import_9__.AuthClientSession)),
	error: EnvironmentScopedOperationErrors
}).middleware(EnvironmentAuthenticatedAuth)).add(__vite_ssr_import_3__.post("revokeClient", "/api/auth/clients/revoke", {
	headers: OptionalBearerHeaders,
	payload: __vite_ssr_import_9__.AuthRevokeClientSessionInput,
	success: AuthClientSessionRevokeResult,
	error: EnvironmentSessionRevokeErrors
}).middleware(EnvironmentAuthenticatedAuth)).add(__vite_ssr_import_3__.post("revokeOtherClients", "/api/auth/clients/revoke-others", {
	headers: OptionalBearerHeaders,
	success: AuthOtherClientSessionsRevokeResult,
	error: EnvironmentScopedOperationErrors
}).middleware(EnvironmentAuthenticatedAuth)) {}
class EnvironmentMcpOAuthHttpApi extends __vite_ssr_import_4__.make("mcpOAuth").add(__vite_ssr_import_3__.get("protectedResource", "/.well-known/oauth-protected-resource", { success: __vite_ssr_import_9__.AuthMcpProtectedResourceMetadata })).add(__vite_ssr_import_3__.get("mcpProtectedResource", "/.well-known/oauth-protected-resource/mcp", { success: __vite_ssr_import_9__.AuthMcpProtectedResourceMetadata })).add(__vite_ssr_import_3__.get("authorizationServer", "/.well-known/oauth-authorization-server", { success: __vite_ssr_import_9__.AuthMcpAuthorizationServerMetadata })).add(__vite_ssr_import_3__.post("register", "/oauth/mcp/register", {
	payload: __vite_ssr_import_9__.AuthMcpClientRegistration,
	success: __vite_ssr_import_9__.AuthMcpRegisteredClient,
	error: __vite_ssr_import_9__.AuthMcpRegistrationError
})).add(__vite_ssr_import_3__.get("authorize", "/oauth/mcp/authorize")).add(__vite_ssr_import_3__.post("approval", "/oauth/mcp/approval", {
	payload: __vite_ssr_import_9__.AuthMcpAuthorizationRequest,
	success: [__vite_ssr_import_9__.AuthMcpApprovalDetails, __vite_ssr_import_9__.AuthMcpApprovalRedirect],
	error: __vite_ssr_import_9__.AuthMcpApprovalError
})).add(__vite_ssr_import_3__.post("decision", "/oauth/mcp/decision", {
	payload: __vite_ssr_import_9__.AuthMcpApprovalDecisionRequest,
	success: __vite_ssr_import_9__.AuthMcpApprovalRedirect,
	error: __vite_ssr_import_9__.AuthMcpApprovalError
})).add(__vite_ssr_import_3__.post("token", "/oauth/mcp/token", {
	payload: __vite_ssr_import_9__.AuthMcpTokenRequest,
	success: __vite_ssr_import_9__.AuthMcpTokenResult,
	error: __vite_ssr_import_9__.AuthMcpTokenError
})) {}
const EnvironmentOrchestrationThreadSnapshotParams = __vite_ssr_import_1__.Struct({ threadId: __vite_ssr_import_11__.ThreadId });
const EnvironmentOrchestrationShellSnapshotQuery = __vite_ssr_import_1__.Struct({ omitIdleSubagents: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.String) });
const EnvironmentOrchestrationThreadBoundedSnapshotQuery = __vite_ssr_import_1__.Struct({
	compactTurnItems: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.String),
	dedupeBodies: __vite_ssr_import_1__.optionalKey(__vite_ssr_import_1__.String)
});
const EnvironmentOrchestrationThreadHistoryQuery = __vite_ssr_import_1__.Struct({
	cursor: __vite_ssr_import_11__.TrimmedNonEmptyString,
	throughEntryId: __vite_ssr_import_1__.optional((0,__vite_ssr_import_11__.TrimmedNonEmptyString)),
	view: __vite_ssr_import_1__.optional(__vite_ssr_import_1__.Literals(["conversation", "activity"]))
});
const EnvironmentOrchestrationThreadHistoryErrors = [
	EnvironmentRequestInvalidError,
	EnvironmentScopeRequiredError,
	EnvironmentResourceNotFoundError,
	EnvironmentInternalError
];
class EnvironmentOrchestrationHttpApi extends __vite_ssr_import_4__.make("orchestration").add(__vite_ssr_import_3__.get("shellSnapshot", "/api/orchestration/shell", {
	headers: OrchestrationProtocolHeaders,
	query: EnvironmentOrchestrationShellSnapshotQuery,
	success: __vite_ssr_import_12__.OrchestrationV2ShellSnapshot,
	error: EnvironmentOrchestrationSnapshotErrors
}).middleware(EnvironmentAuthenticatedAuth)).add(__vite_ssr_import_3__.get("threadSnapshot", "/api/orchestration/threads/:threadId", {
	headers: OrchestrationProtocolHeaders,
	params: EnvironmentOrchestrationThreadSnapshotParams,
	success: __vite_ssr_import_12__.OrchestrationV2ThreadDetailSnapshot,
	error: EnvironmentOrchestrationThreadSnapshotErrors
}).middleware(EnvironmentAuthenticatedAuth)).add(__vite_ssr_import_3__.get("threadTranscript", "/api/orchestration/threads/:threadId/transcript", {
	headers: OrchestrationProtocolHeaders,
	params: EnvironmentOrchestrationThreadSnapshotParams,
	success: __vite_ssr_import_12__.OrchestrationV2ThreadTranscript,
	error: [EnvironmentRequestInvalidError, ...EnvironmentOrchestrationThreadSnapshotErrors]
}).middleware(EnvironmentAuthenticatedAuth)).add(__vite_ssr_import_3__.get("threadBoundedSnapshot", "/api/orchestration/threads/:threadId/bounded", {
	headers: OrchestrationProtocolHeaders,
	params: EnvironmentOrchestrationThreadSnapshotParams,
	query: EnvironmentOrchestrationThreadBoundedSnapshotQuery,
	success: __vite_ssr_import_12__.OrchestrationV2ThreadBoundedSnapshot,
	error: EnvironmentOrchestrationThreadSnapshotErrors
}).middleware(EnvironmentAuthenticatedAuth)).add(__vite_ssr_import_3__.get("threadHistoryPage", "/api/orchestration/threads/:threadId/history", {
	headers: OrchestrationProtocolHeaders,
	params: EnvironmentOrchestrationThreadSnapshotParams,
	query: EnvironmentOrchestrationThreadHistoryQuery,
	success: __vite_ssr_import_12__.OrchestrationV2ThreadHistoryPage,
	error: EnvironmentOrchestrationThreadHistoryErrors
}).middleware(EnvironmentAuthenticatedAuth)) {}
class EnvironmentProjectsHttpApi extends __vite_ssr_import_4__.make("projects").add(__vite_ssr_import_3__.get("snapshot", "/api/projects", {
	headers: OptionalBearerHeaders,
	success: __vite_ssr_import_13__.ProjectSnapshot,
	error: EnvironmentProjectSnapshotErrors
}).middleware(EnvironmentAuthenticatedAuth)).add(__vite_ssr_import_3__.post("mutate", "/api/projects/mutate", {
	headers: OptionalBearerHeaders,
	payload: __vite_ssr_import_13__.ProjectMutation,
	success: __vite_ssr_import_13__.Project,
	error: EnvironmentProjectMutationErrors
}).middleware(EnvironmentAuthenticatedAuth)) {}
class EnvironmentPullRequestsHttpApi extends __vite_ssr_import_4__.make("pullRequests").add(__vite_ssr_import_3__.post("diff", "/api/pull-requests/diff", {
	headers: OptionalBearerHeaders,
	payload: __vite_ssr_import_14__.PullRequestDiffInput,
	success: __vite_ssr_import_14__.PullRequestDiffResult,
	error: [
		__vite_ssr_import_14__.PullRequestUnavailableError,
		__vite_ssr_import_14__.PullRequestOperationError,
		EnvironmentAuthInvalidError,
		EnvironmentScopeRequiredError,
		EnvironmentInternalError
	]
}).middleware(EnvironmentAuthenticatedAuth)) {}
class EnvironmentConnectHttpApi extends __vite_ssr_import_4__.make("connect").add(__vite_ssr_import_3__.post("linkProof", "/api/connect/link-proof", {
	headers: OptionalBearerHeaders,
	payload: __vite_ssr_import_15__.RelayLinkProofRequest,
	success: __vite_ssr_import_15__.RelayEnvironmentLinkProof,
	error: EnvironmentHttpCloudErrors
}).middleware(EnvironmentAuthenticatedAuth)).add(__vite_ssr_import_3__.post("relayConfig", "/api/connect/relay-config", {
	headers: OptionalBearerHeaders,
	payload: __vite_ssr_import_15__.RelayEnvironmentConfigRequest,
	success: EnvironmentCloudRelayConfigResult,
	error: [...EnvironmentHttpCloudErrors, EnvironmentCloudEndpointUnavailableError]
}).middleware(EnvironmentAuthenticatedAuth)).add(__vite_ssr_import_3__.get("linkState", "/api/connect/link-state", {
	headers: OptionalBearerHeaders,
	success: EnvironmentCloudLinkStateResult,
	error: EnvironmentHttpCloudErrors
}).middleware(EnvironmentAuthenticatedAuth)).add(__vite_ssr_import_3__.post("checkReachability", "/api/connect/reachability", {
	headers: OptionalBearerHeaders,
	success: EnvironmentConnectReachability,
	error: EnvironmentHttpCloudErrors
}).middleware(EnvironmentAuthenticatedAuth)).add(__vite_ssr_import_3__.post("unlink", "/api/connect/unlink", {
	headers: OptionalBearerHeaders,
	success: EnvironmentCloudRelayConfigResult,
	error: EnvironmentHttpCloudErrors
}).middleware(EnvironmentAuthenticatedAuth)).add(__vite_ssr_import_3__.post("preferences", "/api/connect/preferences", {
	headers: OptionalBearerHeaders,
	payload: EnvironmentCloudPreferencesRequest,
	success: EnvironmentCloudLinkStateResult,
	error: EnvironmentHttpCloudErrors
}).middleware(EnvironmentAuthenticatedAuth)).add(__vite_ssr_import_3__.post("health", "/api/t3-connect/health", {
	payload: __vite_ssr_import_15__.RelayCloudEnvironmentHealthRequest,
	success: __vite_ssr_import_15__.RelayEnvironmentHealthResponse,
	error: EnvironmentHttpCloudErrors
})).add(__vite_ssr_import_3__.post("mintCredential", "/api/connect/mint-credential", {
	payload: __vite_ssr_import_15__.RelayCloudMintCredentialRequest,
	success: __vite_ssr_import_15__.RelayEnvironmentMintResponse,
	error: EnvironmentHttpCloudErrors
})).add(__vite_ssr_import_3__.post("t3MintCredential", "/api/t3-connect/mint-credential", {
	payload: __vite_ssr_import_15__.RelayCloudMintCredentialRequest,
	success: __vite_ssr_import_15__.RelayEnvironmentMintResponse,
	error: EnvironmentHttpCloudErrors
})) {}
// Path tokens and optional body signatures authenticate webhooks; read raw bytes to verify signatures.
const WebhookParams = __vite_ssr_import_1__.Struct({
	hookId: __vite_ssr_import_11__.TrimmedNonEmptyString,
	token: __vite_ssr_import_11__.TrimmedNonEmptyString
});
const WebhookAccepted = __vite_ssr_import_1__.Struct({ deliveryId: __vite_ssr_import_11__.TrimmedNonEmptyString }).pipe(__vite_ssr_import_6__.status(202));
const webhookEndpoint = {
	params: WebhookParams,
	success: WebhookAccepted
};
const WEBHOOK_PATH = "/api/hooks/:hookId/:token";
class EnvironmentWebhooksHttpApi extends __vite_ssr_import_4__.make("webhooks").add(__vite_ssr_import_3__.post("webhookPost", WEBHOOK_PATH, webhookEndpoint)).add(__vite_ssr_import_3__.put("webhookPut", WEBHOOK_PATH, webhookEndpoint)).add(__vite_ssr_import_3__.patch("webhookPatch", WEBHOOK_PATH, webhookEndpoint)).add(__vite_ssr_import_3__.get("webhookGet", WEBHOOK_PATH, webhookEndpoint)) {}
class EnvironmentHttpApi extends __vite_ssr_import_2__.make("environment").add(EnvironmentMetadataHttpApi).add(EnvironmentAuthHttpApi).add(EnvironmentMcpOAuthHttpApi).add(EnvironmentOrchestrationHttpApi).add(EnvironmentPullRequestsHttpApi).add(EnvironmentProjectsHttpApi).add(EnvironmentConnectHttpApi).add(EnvironmentWebhooksHttpApi) {}
//# sourceMappingSource=vite-generated
//# sourceMappingURL=data:application/json;base64,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c0IsQ0FBQyxDQUFDLENBQUMsS0FDM0Usc0JBQWMsT0FBTyxHQUFHLENBQzFCO0FBQ0EsTUFBTSxrQkFBa0I7Q0FDdEIsUUFBUTtDQUNSLFNBQVM7QUFDWDtBQUNBLE1BQU0sZUFBZTtBQUVyQixNQUFNLG1DQUFtQyxzQkFBYSxLQUFLLFVBQVUsQ0FBQyxDQUNuRSxJQUFJLHNCQUFnQixLQUFLLGVBQWUsY0FBYyxlQUFlLENBQUMsQ0FBQyxDQUN2RSxJQUFJLHNCQUFnQixJQUFJLGNBQWMsY0FBYyxlQUFlLENBQUMsQ0FBQyxDQUNyRSxJQUFJLHNCQUFnQixNQUFNLGdCQUFnQixjQUFjLGVBQWUsQ0FBQyxDQUFDLENBQ3pFLElBQUksc0JBQWdCLElBQUksY0FBYyxjQUFjLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVuRSxNQUFNLDJCQUEyQixzQkFBUSxLQUFLLGFBQWEsQ0FBQyxDQUNoRSxJQUFJLDBCQUEwQixDQUFDLENBQy9CLElBQUksc0JBQXNCLENBQUMsQ0FDM0IsSUFBSSwwQkFBMEIsQ0FBQyxDQUMvQixJQUFJLCtCQUErQixDQUFDLENBQ3BDLElBQUksOEJBQThCLENBQUMsQ0FDbkMsSUFBSSwwQkFBMEIsQ0FBQyxDQUMvQixJQUFJLHlCQUF5QixDQUFDLENBQzlCLElBQUksMEJBQTBCLENBQUMsQ0FBQyxDQUFDIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJlbnZpcm9ubWVudEh0dHAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgQ29udGV4dCBmcm9tIFwiZWZmZWN0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlICogYXMgRGF0ZVRpbWUgZnJvbSBcImVmZmVjdC9EYXRlVGltZVwiO1xuaW1wb3J0ICogYXMgU2NoZW1hIGZyb20gXCJlZmZlY3QvU2NoZW1hXCI7XG5pbXBvcnQgKiBhcyBIdHRwQXBpIGZyb20gXCJlZmZlY3QvaHR0cC1hcGkvSHR0cEFwaVwiO1xuaW1wb3J0ICogYXMgSHR0cEFwaUVuZHBvaW50IGZyb20gXCJlZmZlY3QvaHR0cC1hcGkvSHR0cEFwaUVuZHBvaW50XCI7XG5pbXBvcnQgKiBhcyBIdHRwQXBpR3JvdXAgZnJvbSBcImVmZmVjdC9odHRwLWFwaS9IdHRwQXBpR3JvdXBcIjtcbmltcG9ydCAqIGFzIEh0dHBBcGlNaWRkbGV3YXJlIGZyb20gXCJlZmZlY3QvaHR0cC1hcGkvSHR0cEFwaU1pZGRsZXdhcmVcIjtcbmltcG9ydCAqIGFzIEh0dHBBcGlTY2hlbWEgZnJvbSBcImVmZmVjdC9odHRwLWFwaS9IdHRwQXBpU2NoZW1hXCI7XG5pbXBvcnQgKiBhcyBIdHRwU2VydmVyUmVzcG9uZGFibGUgZnJvbSBcImVmZmVjdC9odHRwL0h0dHBTZXJ2ZXJSZXNwb25kYWJsZVwiO1xuaW1wb3J0ICogYXMgSHR0cFNlcnZlclJlc3BvbnNlIGZyb20gXCJlZmZlY3QvaHR0cC9IdHRwU2VydmVyUmVzcG9uc2VcIjtcblxuaW1wb3J0IHtcbiAgQXV0aEFjY2Vzc1Rva2VuUmVzdWx0LFxuICBBdXRoQnJvd3NlclNlc3Npb25SZXF1ZXN0LFxuICBBdXRoQnJvd3NlclNlc3Npb25SZXN1bHQsXG4gIEF1dGhDbGllbnRTZXNzaW9uLFxuICBBdXRoQ3JlYXRlUGFpcmluZ0NyZWRlbnRpYWxJbnB1dCxcbiAgQXV0aE1jcEFwcHJvdmFsRGVjaXNpb25SZXF1ZXN0LFxuICBBdXRoTWNwQXBwcm92YWxEZXRhaWxzLFxuICBBdXRoTWNwQXBwcm92YWxFcnJvcixcbiAgQXV0aE1jcEFwcHJvdmFsUmVkaXJlY3QsXG4gIEF1dGhNY3BBdXRob3JpemF0aW9uUmVxdWVzdCxcbiAgQXV0aE1jcEF1dGhvcml6YXRpb25TZXJ2ZXJNZXRhZGF0YSxcbiAgQXV0aE1jcENsaWVudFJlZ2lzdHJhdGlvbixcbiAgQXV0aE1jcFByb3RlY3RlZFJlc291cmNlTWV0YWRhdGEsXG4gIEF1dGhNY3BSZWdpc3RlcmVkQ2xpZW50LFxuICBBdXRoTWNwUmVnaXN0cmF0aW9uRXJyb3IsXG4gIEF1dGhNY3BUb2tlbkVycm9yLFxuICBBdXRoTWNwVG9rZW5SZXF1ZXN0LFxuICBBdXRoTWNwVG9rZW5SZXN1bHQsXG4gIEF1dGhQYWlyaW5nQ3JlZGVudGlhbFJlc3VsdCxcbiAgQXV0aFBhaXJpbmdMaW5rLFxuICBBdXRoUmV2b2tlQ2xpZW50U2Vzc2lvbklucHV0LFxuICBBdXRoUmV2b2tlUGFpcmluZ0xpbmtJbnB1dCxcbiAgQXV0aEVudmlyb25tZW50U2NvcGUsXG4gIEF1dGhUb2tlbkV4Y2hhbmdlUmVxdWVzdCxcbiAgQXV0aFNlc3Npb25TdGF0ZSxcbiAgQXV0aFdlYlNvY2tldFRpY2tldFBhcmFtcyxcbiAgQXV0aFdlYlNvY2tldFRpY2tldFJlc3VsdCxcbiAgU2VydmVyQXV0aFNlc3Npb25NZXRob2QsXG59IGZyb20gXCIuL2F1dGgudHNcIjtcbmltcG9ydCB7XG4gIEV4ZWN1dGlvbkVudmlyb25tZW50RGVzY3JpcHRvcixcbiAgT1JDSEVTVFJBVElPTl9QUk9UT0NPTF9IRUFERVIsXG4gIE9SQ0hFU1RSQVRJT05fUFJPVE9DT0xfVkVSU0lPTl9URVhULFxufSBmcm9tIFwiLi9lbnZpcm9ubWVudC50c1wiO1xuaW1wb3J0IHtcbiAgRHBvcEZhaWx1cmVSZWFzb24sXG4gIEF1dGhTZXNzaW9uSWQsXG4gIFRocmVhZElkLFxuICBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG59IGZyb20gXCIuL2Jhc2VTY2hlbWFzLnRzXCI7XG5pbXBvcnQge1xuICBPcmNoZXN0cmF0aW9uVjJTaGVsbFNuYXBzaG90LFxuICBPcmNoZXN0cmF0aW9uVjJUaHJlYWRCb3VuZGVkU25hcHNob3QsXG4gIE9yY2hlc3RyYXRpb25WMlRocmVhZERldGFpbFNuYXBzaG90LFxuICBPcmNoZXN0cmF0aW9uVjJUaHJlYWRIaXN0b3J5UGFnZSxcbiAgT3JjaGVzdHJhdGlvblYyVGhyZWFkVHJhbnNjcmlwdCxcbn0gZnJvbSBcIi4vb3JjaGVzdHJhdGlvblYyLnRzXCI7XG5pbXBvcnQgeyBQcm9qZWN0LCBQcm9qZWN0TXV0YXRpb24sIFByb2plY3RTbmFwc2hvdCB9IGZyb20gXCIuL3Byb2plY3QudHNcIjtcbmltcG9ydCB7XG4gIFB1bGxSZXF1ZXN0RGlmZklucHV0LFxuICBQdWxsUmVxdWVzdERpZmZSZXN1bHQsXG4gIFB1bGxSZXF1ZXN0T3BlcmF0aW9uRXJyb3IsXG4gIFB1bGxSZXF1ZXN0VW5hdmFpbGFibGVFcnJvcixcbn0gZnJvbSBcIi4vcHVsbFJlcXVlc3QudHNcIjtcbmltcG9ydCB7XG4gIFJlbGF5Q2xvdWRFbnZpcm9ubWVudEhlYWx0aFJlcXVlc3QsXG4gIFJlbGF5Q2xvdWRNaW50Q3JlZGVudGlhbFJlcXVlc3QsXG4gIFJlbGF5RW52aXJvbm1lbnRDb25maWdSZXF1ZXN0LFxuICBSZWxheUVudmlyb25tZW50SGVhbHRoUmVzcG9uc2UsXG4gIFJlbGF5RW52aXJvbm1lbnRMaW5rUHJvb2YsXG4gIFJlbGF5RW52aXJvbm1lbnRNaW50UmVzcG9uc2UsXG4gIFJlbGF5TGlua1Byb29mUmVxdWVzdCxcbn0gZnJvbSBcIi4vcmVsYXkudHNcIjtcblxuY29uc3QgT3B0aW9uYWxCZWFyZXJIZWFkZXJzID0gU2NoZW1hLlN0cnVjdCh7XG4gIGF1dGhvcml6YXRpb246IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuU3RyaW5nKSxcbiAgZHBvcDogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5TdHJpbmcpLFxufSk7XG5cbmNvbnN0IE9yY2hlc3RyYXRpb25Qcm90b2NvbEhlYWRlcnMgPSBTY2hlbWEuU3RydWN0KHtcbiAgYXV0aG9yaXphdGlvbjogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5TdHJpbmcpLFxuICBkcG9wOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLlN0cmluZyksXG4gIFtPUkNIRVNUUkFUSU9OX1BST1RPQ09MX0hFQURFUl06IFNjaGVtYS5MaXRlcmFsKE9SQ0hFU1RSQVRJT05fUFJPVE9DT0xfVkVSU0lPTl9URVhUKSxcbn0pO1xuXG5jb25zdCBPcHRpb25hbERwb3BQcm9vZkhlYWRlcnMgPSBTY2hlbWEuU3RydWN0KHtcbiAgZHBvcDogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5TdHJpbmcpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBFbnZpcm9ubWVudFJlcXVlc3RJbnZhbGlkUmVhc29uID0gU2NoZW1hLkxpdGVyYWxzKFtcbiAgXCJpbnZhbGlkX3Njb3BlXCIsXG4gIFwic2NvcGVfbm90X2dyYW50ZWRcIixcbiAgXCJpbnZhbGlkX2NvbW1hbmRcIixcbiAgXCJpbnZhbGlkX2hpc3RvcnlfY3Vyc29yXCIsXG4gIFwidGhyZWFkX3RyYW5zY3JpcHRfdG9vX2xhcmdlXCIsXG5dKTtcbmV4cG9ydCB0eXBlIEVudmlyb25tZW50UmVxdWVzdEludmFsaWRSZWFzb24gPSB0eXBlb2YgRW52aXJvbm1lbnRSZXF1ZXN0SW52YWxpZFJlYXNvbi5UeXBlO1xuXG5leHBvcnQgY29uc3QgRW52aXJvbm1lbnRBdXRoSW52YWxpZFJlYXNvbiA9IFNjaGVtYS5MaXRlcmFscyhbXG4gIFwibWlzc2luZ19jcmVkZW50aWFsXCIsXG4gIFwiaW52YWxpZF9jcmVkZW50aWFsXCIsXG5dKTtcbmV4cG9ydCB0eXBlIEVudmlyb25tZW50QXV0aEludmFsaWRSZWFzb24gPSB0eXBlb2YgRW52aXJvbm1lbnRBdXRoSW52YWxpZFJlYXNvbi5UeXBlO1xuXG5leHBvcnQgY29uc3QgRW52aXJvbm1lbnRPcGVyYXRpb25Gb3JiaWRkZW5SZWFzb24gPSBTY2hlbWEuTGl0ZXJhbHMoW1xuICBcImN1cnJlbnRfc2Vzc2lvbl9yZXZva2Vfbm90X2FsbG93ZWRcIixcbl0pO1xuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnRPcGVyYXRpb25Gb3JiaWRkZW5SZWFzb24gPSB0eXBlb2YgRW52aXJvbm1lbnRPcGVyYXRpb25Gb3JiaWRkZW5SZWFzb24uVHlwZTtcblxuZXhwb3J0IGNvbnN0IEVudmlyb25tZW50SW50ZXJuYWxFcnJvclJlYXNvbiA9IFNjaGVtYS5MaXRlcmFscyhbXG4gIFwiYm9vdHN0cmFwX3ZhbGlkYXRpb25fZmFpbGVkXCIsXG4gIFwiYnJvd3Nlcl9zZXNzaW9uX2lzc3VhbmNlX2ZhaWxlZFwiLFxuICBcImJyb3dzZXJfc2Vzc2lvbl9jb29raWVfZmFpbGVkXCIsXG4gIFwiYWNjZXNzX3Rva2VuX2lzc3VhbmNlX2ZhaWxlZFwiLFxuICBcIndlYnNvY2tldF90aWNrZXRfaXNzdWFuY2VfZmFpbGVkXCIsXG4gIFwicGFpcmluZ19jcmVkZW50aWFsX2lzc3VhbmNlX2ZhaWxlZFwiLFxuICBcInBhaXJpbmdfbGlua3NfbG9hZF9mYWlsZWRcIixcbiAgXCJwYWlyaW5nX2xpbmtfcmV2b2tlX2ZhaWxlZFwiLFxuICBcImNsaWVudF9zZXNzaW9uc19sb2FkX2ZhaWxlZFwiLFxuICBcImNsaWVudF9zZXNzaW9uX3Jldm9rZV9mYWlsZWRcIixcbiAgXCJwcm9qZWN0X3NuYXBzaG90X2ZhaWxlZFwiLFxuICBcInByb2plY3RfbXV0YXRpb25fZmFpbGVkXCIsXG4gIFwib3JjaGVzdHJhdGlvbl9zbmFwc2hvdF9mYWlsZWRcIixcbiAgXCJvcmNoZXN0cmF0aW9uX3RocmVhZF9zbmFwc2hvdF9mYWlsZWRcIixcbiAgXCJvcmNoZXN0cmF0aW9uX3RocmVhZF9ib3VuZGVkX3NuYXBzaG90X2ZhaWxlZFwiLFxuICBcIm9yY2hlc3RyYXRpb25fdGhyZWFkX2hpc3RvcnlfZmFpbGVkXCIsXG4gIFwiaW50ZXJuYWxfZXJyb3JcIixcbl0pO1xuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnRJbnRlcm5hbEVycm9yUmVhc29uID0gdHlwZW9mIEVudmlyb25tZW50SW50ZXJuYWxFcnJvclJlYXNvbi5UeXBlO1xuXG5leHBvcnQgY2xhc3MgRW52aXJvbm1lbnRSZXF1ZXN0SW52YWxpZEVycm9yIGV4dGVuZHMgU2NoZW1hLlRhZ2dlZEVycm9yPEVudmlyb25tZW50UmVxdWVzdEludmFsaWRFcnJvcj4oKShcbiAgXCJFbnZpcm9ubWVudFJlcXVlc3RJbnZhbGlkRXJyb3JcIixcbiAge1xuICAgIGNvZGU6IFNjaGVtYS5MaXRlcmFsKFwiaW52YWxpZF9yZXF1ZXN0XCIpLFxuICAgIHJlYXNvbjogRW52aXJvbm1lbnRSZXF1ZXN0SW52YWxpZFJlYXNvbixcbiAgICB0cmFjZUlkOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG4gIH0sXG4gIHsgaHR0cEFwaVN0YXR1czogNDAwIH0sXG4pIHtcbiAgW0h0dHBTZXJ2ZXJSZXNwb25kYWJsZS5zeW1ib2xdKCkge1xuICAgIHJldHVybiBIdHRwU2VydmVyUmVzcG9uc2Uuc2NoZW1hSnNvbihFbnZpcm9ubWVudFJlcXVlc3RJbnZhbGlkRXJyb3IpKHRoaXMsIHsgc3RhdHVzOiA0MDAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBnZXQgbWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgVGhlIGVudmlyb25tZW50IHJlamVjdGVkIHRoZSByZXF1ZXN0ICgke3RoaXMucmVhc29ufSkuYDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRW52aXJvbm1lbnRBdXRoSW52YWxpZEVycm9yIGV4dGVuZHMgU2NoZW1hLlRhZ2dlZEVycm9yPEVudmlyb25tZW50QXV0aEludmFsaWRFcnJvcj4oKShcbiAgXCJFbnZpcm9ubWVudEF1dGhJbnZhbGlkRXJyb3JcIixcbiAge1xuICAgIGNvZGU6IFNjaGVtYS5MaXRlcmFsKFwiYXV0aF9pbnZhbGlkXCIpLFxuICAgIHJlYXNvbjogRW52aXJvbm1lbnRBdXRoSW52YWxpZFJlYXNvbixcbiAgICBkcG9wRmFpbHVyZVJlYXNvbjogU2NoZW1hLm9wdGlvbmFsS2V5KERwb3BGYWlsdXJlUmVhc29uKSxcbiAgICB0cmFjZUlkOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG4gIH0sXG4gIHsgaHR0cEFwaVN0YXR1czogNDAxIH0sXG4pIHtcbiAgW0h0dHBTZXJ2ZXJSZXNwb25kYWJsZS5zeW1ib2xdKCkge1xuICAgIHJldHVybiBIdHRwU2VydmVyUmVzcG9uc2Uuc2NoZW1hSnNvbihFbnZpcm9ubWVudEF1dGhJbnZhbGlkRXJyb3IpKHRoaXMsIHsgc3RhdHVzOiA0MDEgfSk7XG4gIH1cblxuICBvdmVycmlkZSBnZXQgbWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgVGhlIGVudmlyb25tZW50IHJlamVjdGVkIHRoaXMgY2xpZW50J3MgY3JlZGVudGlhbHMgKCR7dGhpcy5yZWFzb259KS5gO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudFNjb3BlUmVxdWlyZWRFcnJvciBleHRlbmRzIFNjaGVtYS5UYWdnZWRFcnJvcjxFbnZpcm9ubWVudFNjb3BlUmVxdWlyZWRFcnJvcj4oKShcbiAgXCJFbnZpcm9ubWVudFNjb3BlUmVxdWlyZWRFcnJvclwiLFxuICB7XG4gICAgY29kZTogU2NoZW1hLkxpdGVyYWwoXCJpbnN1ZmZpY2llbnRfc2NvcGVcIiksXG4gICAgcmVxdWlyZWRTY29wZTogQXV0aEVudmlyb25tZW50U2NvcGUsXG4gICAgcmVxdWlyZWRQZXJtaXNzaW9uOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLlN0cmluZyksXG4gICAgdHJhY2VJZDogVHJpbW1lZE5vbkVtcHR5U3RyaW5nLFxuICB9LFxuICB7IGh0dHBBcGlTdGF0dXM6IDQwMyB9LFxuKSB7XG4gIFtIdHRwU2VydmVyUmVzcG9uZGFibGUuc3ltYm9sXSgpIHtcbiAgICByZXR1cm4gSHR0cFNlcnZlclJlc3BvbnNlLnNjaGVtYUpzb24oRW52aXJvbm1lbnRTY29wZVJlcXVpcmVkRXJyb3IpKHRoaXMsIHsgc3RhdHVzOiA0MDMgfSk7XG4gIH1cblxuICBvdmVycmlkZSBnZXQgbWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgVGhpcyByZXF1ZXN0IG5lZWRzIHRoZSAke3RoaXMucmVxdWlyZWRQZXJtaXNzaW9uID8/IHRoaXMucmVxdWlyZWRTY29wZX0gc2NvcGUsIHdoaWNoIHRoaXMgY2xpZW50IGRvZXMgbm90IGhhdmUuYDtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRW52aXJvbm1lbnRPcGVyYXRpb25Gb3JiaWRkZW5FcnJvciBleHRlbmRzIFNjaGVtYS5UYWdnZWRFcnJvcjxFbnZpcm9ubWVudE9wZXJhdGlvbkZvcmJpZGRlbkVycm9yPigpKFxuICBcIkVudmlyb25tZW50T3BlcmF0aW9uRm9yYmlkZGVuRXJyb3JcIixcbiAge1xuICAgIGNvZGU6IFNjaGVtYS5MaXRlcmFsKFwib3BlcmF0aW9uX2ZvcmJpZGRlblwiKSxcbiAgICByZWFzb246IEVudmlyb25tZW50T3BlcmF0aW9uRm9yYmlkZGVuUmVhc29uLFxuICAgIHRyYWNlSWQ6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgfSxcbiAgeyBodHRwQXBpU3RhdHVzOiA0MDMgfSxcbikge1xuICBbSHR0cFNlcnZlclJlc3BvbmRhYmxlLnN5bWJvbF0oKSB7XG4gICAgcmV0dXJuIEh0dHBTZXJ2ZXJSZXNwb25zZS5zY2hlbWFKc29uKEVudmlyb25tZW50T3BlcmF0aW9uRm9yYmlkZGVuRXJyb3IpKHRoaXMsIHsgc3RhdHVzOiA0MDMgfSk7XG4gIH1cblxuICBvdmVycmlkZSBnZXQgbWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgVGhlIGVudmlyb25tZW50IHJlZnVzZWQgdGhpcyBvcGVyYXRpb24gKCR7dGhpcy5yZWFzb259KS5gO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudEludGVybmFsRXJyb3IgZXh0ZW5kcyBTY2hlbWEuVGFnZ2VkRXJyb3I8RW52aXJvbm1lbnRJbnRlcm5hbEVycm9yPigpKFxuICBcIkVudmlyb25tZW50SW50ZXJuYWxFcnJvclwiLFxuICB7XG4gICAgY29kZTogU2NoZW1hLkxpdGVyYWwoXCJpbnRlcm5hbF9lcnJvclwiKSxcbiAgICByZWFzb246IEVudmlyb25tZW50SW50ZXJuYWxFcnJvclJlYXNvbixcbiAgICB0cmFjZUlkOiBUcmltbWVkTm9uRW1wdHlTdHJpbmcsXG4gIH0sXG4gIHsgaHR0cEFwaVN0YXR1czogNTAwIH0sXG4pIHtcbiAgW0h0dHBTZXJ2ZXJSZXNwb25kYWJsZS5zeW1ib2xdKCkge1xuICAgIHJldHVybiBIdHRwU2VydmVyUmVzcG9uc2Uuc2NoZW1hSnNvbihFbnZpcm9ubWVudEludGVybmFsRXJyb3IpKHRoaXMsIHsgc3RhdHVzOiA1MDAgfSk7XG4gIH1cblxuICBvdmVycmlkZSBnZXQgbWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgVGhlIGVudmlyb25tZW50IGZhaWxlZCB0byBhbnN3ZXIgdGhpcyByZXF1ZXN0ICgke3RoaXMucmVhc29ufSkuYDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgRW52aXJvbm1lbnRSZXNvdXJjZU5vdEZvdW5kUmVhc29uID0gU2NoZW1hLkxpdGVyYWxzKFtcInRocmVhZF9ub3RfZm91bmRcIl0pO1xuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnRSZXNvdXJjZU5vdEZvdW5kUmVhc29uID0gdHlwZW9mIEVudmlyb25tZW50UmVzb3VyY2VOb3RGb3VuZFJlYXNvbi5UeXBlO1xuXG5leHBvcnQgY2xhc3MgRW52aXJvbm1lbnRSZXNvdXJjZU5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBTY2hlbWEuVGFnZ2VkRXJyb3I8RW52aXJvbm1lbnRSZXNvdXJjZU5vdEZvdW5kRXJyb3I+KCkoXG4gIFwiRW52aXJvbm1lbnRSZXNvdXJjZU5vdEZvdW5kRXJyb3JcIixcbiAge1xuICAgIGNvZGU6IFNjaGVtYS5MaXRlcmFsKFwibm90X2ZvdW5kXCIpLFxuICAgIHJlYXNvbjogRW52aXJvbm1lbnRSZXNvdXJjZU5vdEZvdW5kUmVhc29uLFxuICAgIHRyYWNlSWQ6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgfSxcbiAgeyBodHRwQXBpU3RhdHVzOiA0MDQgfSxcbikge1xuICBbSHR0cFNlcnZlclJlc3BvbmRhYmxlLnN5bWJvbF0oKSB7XG4gICAgcmV0dXJuIEh0dHBTZXJ2ZXJSZXNwb25zZS5zY2hlbWFKc29uKEVudmlyb25tZW50UmVzb3VyY2VOb3RGb3VuZEVycm9yKSh0aGlzLCB7IHN0YXR1czogNDA0IH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0IG1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFRoZSBlbnZpcm9ubWVudCBjb3VsZCBub3QgZmluZCB3aGF0IHRoaXMgcmVxdWVzdCBuYW1lZCAoJHt0aGlzLnJlYXNvbn0pLmA7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEVudmlyb25tZW50SHR0cENvbW1vbkVycm9yID0gU2NoZW1hLlVuaW9uKFtcbiAgRW52aXJvbm1lbnRSZXF1ZXN0SW52YWxpZEVycm9yLFxuICBFbnZpcm9ubWVudEF1dGhJbnZhbGlkRXJyb3IsXG4gIEVudmlyb25tZW50U2NvcGVSZXF1aXJlZEVycm9yLFxuICBFbnZpcm9ubWVudE9wZXJhdGlvbkZvcmJpZGRlbkVycm9yLFxuICBFbnZpcm9ubWVudFJlc291cmNlTm90Rm91bmRFcnJvcixcbiAgRW52aXJvbm1lbnRJbnRlcm5hbEVycm9yLFxuXSk7XG5leHBvcnQgdHlwZSBFbnZpcm9ubWVudEh0dHBDb21tb25FcnJvciA9IHR5cGVvZiBFbnZpcm9ubWVudEh0dHBDb21tb25FcnJvci5UeXBlO1xuXG5jb25zdCBFbnZpcm9ubWVudEF1dGhlbnRpY2F0aW9uRXJyb3JzID0gW1xuICBFbnZpcm9ubWVudEF1dGhJbnZhbGlkRXJyb3IsXG4gIEVudmlyb25tZW50SW50ZXJuYWxFcnJvcixcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudEh0dHBCYWRSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBTY2hlbWEuVGFnZ2VkRXJyb3I8RW52aXJvbm1lbnRIdHRwQmFkUmVxdWVzdEVycm9yPigpKFxuICBcIkVudmlyb25tZW50SHR0cEJhZFJlcXVlc3RFcnJvclwiLFxuICB7XG4gICAgbWVzc2FnZTogU2NoZW1hLlN0cmluZyxcbiAgfSxcbiAgeyBodHRwQXBpU3RhdHVzOiA0MDAgfSxcbikge1xuICBbSHR0cFNlcnZlclJlc3BvbmRhYmxlLnN5bWJvbF0oKSB7XG4gICAgcmV0dXJuIEh0dHBTZXJ2ZXJSZXNwb25zZS5zY2hlbWFKc29uKEVudmlyb25tZW50SHR0cEJhZFJlcXVlc3RFcnJvcikodGhpcywgeyBzdGF0dXM6IDQwMCB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRW52aXJvbm1lbnRIdHRwVW5hdXRob3JpemVkRXJyb3IgZXh0ZW5kcyBTY2hlbWEuVGFnZ2VkRXJyb3I8RW52aXJvbm1lbnRIdHRwVW5hdXRob3JpemVkRXJyb3I+KCkoXG4gIFwiRW52aXJvbm1lbnRIdHRwVW5hdXRob3JpemVkRXJyb3JcIixcbiAge1xuICAgIG1lc3NhZ2U6IFNjaGVtYS5TdHJpbmcsXG4gIH0sXG4gIHsgaHR0cEFwaVN0YXR1czogNDAxIH0sXG4pIHtcbiAgW0h0dHBTZXJ2ZXJSZXNwb25kYWJsZS5zeW1ib2xdKCkge1xuICAgIHJldHVybiBIdHRwU2VydmVyUmVzcG9uc2Uuc2NoZW1hSnNvbihFbnZpcm9ubWVudEh0dHBVbmF1dGhvcml6ZWRFcnJvcikodGhpcywgeyBzdGF0dXM6IDQwMSB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRW52aXJvbm1lbnRIdHRwRm9yYmlkZGVuRXJyb3IgZXh0ZW5kcyBTY2hlbWEuVGFnZ2VkRXJyb3I8RW52aXJvbm1lbnRIdHRwRm9yYmlkZGVuRXJyb3I+KCkoXG4gIFwiRW52aXJvbm1lbnRIdHRwRm9yYmlkZGVuRXJyb3JcIixcbiAge1xuICAgIG1lc3NhZ2U6IFNjaGVtYS5TdHJpbmcsXG4gIH0sXG4gIHsgaHR0cEFwaVN0YXR1czogNDAzIH0sXG4pIHtcbiAgW0h0dHBTZXJ2ZXJSZXNwb25kYWJsZS5zeW1ib2xdKCkge1xuICAgIHJldHVybiBIdHRwU2VydmVyUmVzcG9uc2Uuc2NoZW1hSnNvbihFbnZpcm9ubWVudEh0dHBGb3JiaWRkZW5FcnJvcikodGhpcywgeyBzdGF0dXM6IDQwMyB9KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRW52aXJvbm1lbnRIdHRwSW50ZXJuYWxTZXJ2ZXJFcnJvciBleHRlbmRzIFNjaGVtYS5UYWdnZWRFcnJvcjxFbnZpcm9ubWVudEh0dHBJbnRlcm5hbFNlcnZlckVycm9yPigpKFxuICBcIkVudmlyb25tZW50SHR0cEludGVybmFsU2VydmVyRXJyb3JcIixcbiAge1xuICAgIG1lc3NhZ2U6IFNjaGVtYS5TdHJpbmcsXG4gIH0sXG4gIHsgaHR0cEFwaVN0YXR1czogNTAwIH0sXG4pIHtcbiAgW0h0dHBTZXJ2ZXJSZXNwb25kYWJsZS5zeW1ib2xdKCkge1xuICAgIHJldHVybiBIdHRwU2VydmVyUmVzcG9uc2Uuc2NoZW1hSnNvbihFbnZpcm9ubWVudEh0dHBJbnRlcm5hbFNlcnZlckVycm9yKSh0aGlzLCB7IHN0YXR1czogNTAwIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudEh0dHBDb25mbGljdEVycm9yIGV4dGVuZHMgU2NoZW1hLlRhZ2dlZEVycm9yPEVudmlyb25tZW50SHR0cENvbmZsaWN0RXJyb3I+KCkoXG4gIFwiRW52aXJvbm1lbnRIdHRwQ29uZmxpY3RFcnJvclwiLFxuICB7XG4gICAgbWVzc2FnZTogU2NoZW1hLlN0cmluZyxcbiAgfSxcbiAgeyBodHRwQXBpU3RhdHVzOiA0MDkgfSxcbikge1xuICBbSHR0cFNlcnZlclJlc3BvbmRhYmxlLnN5bWJvbF0oKSB7XG4gICAgcmV0dXJuIEh0dHBTZXJ2ZXJSZXNwb25zZS5zY2hlbWFKc29uKEVudmlyb25tZW50SHR0cENvbmZsaWN0RXJyb3IpKHRoaXMsIHsgc3RhdHVzOiA0MDkgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVudmlyb25tZW50Q2xvdWRFbmRwb2ludFVuYXZhaWxhYmxlRXJyb3IgZXh0ZW5kcyBTY2hlbWEuVGFnZ2VkRXJyb3I8RW52aXJvbm1lbnRDbG91ZEVuZHBvaW50VW5hdmFpbGFibGVFcnJvcj4oKShcbiAgXCJFbnZpcm9ubWVudENsb3VkRW5kcG9pbnRVbmF2YWlsYWJsZUVycm9yXCIsXG4gIHtcbiAgICBtZXNzYWdlOiBTY2hlbWEuU3RyaW5nLFxuICAgIGVuZHBvaW50UnVudGltZVN0YXR1czogU2NoZW1hLlVua25vd24sXG4gIH0sXG4gIHsgaHR0cEFwaVN0YXR1czogNTAzIH0sXG4pIHtcbiAgW0h0dHBTZXJ2ZXJSZXNwb25kYWJsZS5zeW1ib2xdKCkge1xuICAgIHJldHVybiBIdHRwU2VydmVyUmVzcG9uc2Uuc2NoZW1hSnNvbihFbnZpcm9ubWVudENsb3VkRW5kcG9pbnRVbmF2YWlsYWJsZUVycm9yKSh0aGlzLCB7XG4gICAgICBzdGF0dXM6IDUwMyxcbiAgICB9KTtcbiAgfVxufVxuY29uc3QgRW52aXJvbm1lbnRTZXNzaW9uQ3JlYXRpb25FcnJvcnMgPSBbXG4gIEVudmlyb25tZW50QXV0aEludmFsaWRFcnJvcixcbiAgRW52aXJvbm1lbnRJbnRlcm5hbEVycm9yLFxuXSBhcyBjb25zdDtcbmNvbnN0IEVudmlyb25tZW50VG9rZW5FeGNoYW5nZUVycm9ycyA9IFtcbiAgRW52aXJvbm1lbnRSZXF1ZXN0SW52YWxpZEVycm9yLFxuICBFbnZpcm9ubWVudEF1dGhJbnZhbGlkRXJyb3IsXG4gIEVudmlyb25tZW50SW50ZXJuYWxFcnJvcixcbl0gYXMgY29uc3Q7XG5jb25zdCBFbnZpcm9ubWVudFNjb3BlZE9wZXJhdGlvbkVycm9ycyA9IFtcbiAgRW52aXJvbm1lbnRTY29wZVJlcXVpcmVkRXJyb3IsXG4gIEVudmlyb25tZW50SW50ZXJuYWxFcnJvcixcbl0gYXMgY29uc3Q7XG5jb25zdCBFbnZpcm9ubWVudFBhaXJpbmdDcmVkZW50aWFsRXJyb3JzID0gW1xuICBFbnZpcm9ubWVudFJlcXVlc3RJbnZhbGlkRXJyb3IsXG4gIC4uLkVudmlyb25tZW50U2NvcGVkT3BlcmF0aW9uRXJyb3JzLFxuXSBhcyBjb25zdDtcbmNvbnN0IEVudmlyb25tZW50U2Vzc2lvblJldm9rZUVycm9ycyA9IFtcbiAgRW52aXJvbm1lbnRTY29wZVJlcXVpcmVkRXJyb3IsXG4gIEVudmlyb25tZW50T3BlcmF0aW9uRm9yYmlkZGVuRXJyb3IsXG4gIEVudmlyb25tZW50SW50ZXJuYWxFcnJvcixcbl0gYXMgY29uc3Q7XG5jb25zdCBFbnZpcm9ubWVudFByb2plY3RTbmFwc2hvdEVycm9ycyA9IFtcbiAgRW52aXJvbm1lbnRTY29wZVJlcXVpcmVkRXJyb3IsXG4gIEVudmlyb25tZW50SW50ZXJuYWxFcnJvcixcbl0gYXMgY29uc3Q7XG5jb25zdCBFbnZpcm9ubWVudE9yY2hlc3RyYXRpb25TbmFwc2hvdEVycm9ycyA9IFtcbiAgRW52aXJvbm1lbnRTY29wZVJlcXVpcmVkRXJyb3IsXG4gIEVudmlyb25tZW50SW50ZXJuYWxFcnJvcixcbl0gYXMgY29uc3Q7XG5jb25zdCBFbnZpcm9ubWVudE9yY2hlc3RyYXRpb25UaHJlYWRTbmFwc2hvdEVycm9ycyA9IFtcbiAgRW52aXJvbm1lbnRTY29wZVJlcXVpcmVkRXJyb3IsXG4gIEVudmlyb25tZW50UmVzb3VyY2VOb3RGb3VuZEVycm9yLFxuICBFbnZpcm9ubWVudEludGVybmFsRXJyb3IsXG5dIGFzIGNvbnN0O1xuY29uc3QgRW52aXJvbm1lbnRQcm9qZWN0TXV0YXRpb25FcnJvcnMgPSBbXG4gIEVudmlyb25tZW50UmVxdWVzdEludmFsaWRFcnJvcixcbiAgRW52aXJvbm1lbnRTY29wZVJlcXVpcmVkRXJyb3IsXG4gIEVudmlyb25tZW50SW50ZXJuYWxFcnJvcixcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW52aXJvbm1lbnRTZXNzaW9uUHJpbmNpcGFsU2hhcGUge1xuICByZWFkb25seSBzZXNzaW9uSWQ6IEF1dGhTZXNzaW9uSWQ7XG4gIHJlYWRvbmx5IHN1YmplY3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgbWV0aG9kOiBTZXJ2ZXJBdXRoU2Vzc2lvbk1ldGhvZDtcbiAgcmVhZG9ubHkgc2NvcGVzOiBSZWFkb25seVNldDxBdXRoRW52aXJvbm1lbnRTY29wZT47XG4gIHJlYWRvbmx5IHByb29mS2V5VGh1bWJwcmludD86IHN0cmluZztcbiAgcmVhZG9ubHkgZXhwaXJlc0F0PzogRGF0ZVRpbWUuRGF0ZVRpbWU7XG59XG5cbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudEF1dGhlbnRpY2F0ZWRQcmluY2lwYWwgZXh0ZW5kcyBDb250ZXh0LlNlcnZpY2U8XG4gIEVudmlyb25tZW50QXV0aGVudGljYXRlZFByaW5jaXBhbCxcbiAgRW52aXJvbm1lbnRTZXNzaW9uUHJpbmNpcGFsU2hhcGVcbj4oKShcIkB0M3Rvb2xzL2NvbnRyYWN0cy9lbnZpcm9ubWVudEh0dHAvRW52aXJvbm1lbnRBdXRoZW50aWNhdGVkUHJpbmNpcGFsXCIpIHt9XG5cbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudEF1dGhlbnRpY2F0ZWRBdXRoIGV4dGVuZHMgSHR0cEFwaU1pZGRsZXdhcmUuU2VydmljZTxcbiAgRW52aXJvbm1lbnRBdXRoZW50aWNhdGVkQXV0aCxcbiAgeyBwcm92aWRlczogRW52aXJvbm1lbnRBdXRoZW50aWNhdGVkUHJpbmNpcGFsIH1cbj4oKShcIkVudmlyb25tZW50QXV0aGVudGljYXRlZEF1dGhcIiwge1xuICBlcnJvcjogRW52aXJvbm1lbnRBdXRoZW50aWNhdGlvbkVycm9ycyxcbn0pIHt9XG5cbmNvbnN0IEVudmlyb25tZW50SHR0cENsb3VkRXJyb3JzID0gW1xuICBFbnZpcm9ubWVudEh0dHBCYWRSZXF1ZXN0RXJyb3IsXG4gIEVudmlyb25tZW50SHR0cFVuYXV0aG9yaXplZEVycm9yLFxuICBFbnZpcm9ubWVudEh0dHBGb3JiaWRkZW5FcnJvcixcbiAgRW52aXJvbm1lbnRIdHRwQ29uZmxpY3RFcnJvcixcbiAgRW52aXJvbm1lbnRIdHRwSW50ZXJuYWxTZXJ2ZXJFcnJvcixcbiAgRW52aXJvbm1lbnRTY29wZVJlcXVpcmVkRXJyb3IsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgRW52aXJvbm1lbnRDbG91ZFJlbGF5Q29uZmlnUmVzdWx0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIG9rOiBTY2hlbWEuQm9vbGVhbixcbiAgZW5kcG9pbnRSdW50aW1lU3RhdHVzOiBTY2hlbWEuVW5rbm93bixcbn0pO1xuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnRDbG91ZFJlbGF5Q29uZmlnUmVzdWx0ID0gdHlwZW9mIEVudmlyb25tZW50Q2xvdWRSZWxheUNvbmZpZ1Jlc3VsdC5UeXBlO1xuXG5leHBvcnQgY29uc3QgRW52aXJvbm1lbnRDb25uZWN0UmVhY2hhYmlsaXR5Q2F1c2UgPSBTY2hlbWEuTGl0ZXJhbHMoW1xuICBcIm5vdF9saW5rZWRcIixcbiAgXCJjb25uZWN0b3Jfbm90X3J1bm5pbmdcIixcbiAgXCJjb25uZWN0b3Jfbm90X3JlYWR5XCIsXG4gIFwiZWRnZV91bnJlYWNoYWJsZVwiLFxuICBcIm5vX2Nvbm5lY3RvclwiLFxuICBcIm9yaWdpbl91bnJlYWNoYWJsZVwiLFxuICBcImRuc19mYWlsZWRcIixcbiAgXCJ0aW1lb3V0XCIsXG4gIFwidW5leHBlY3RlZF9yZXNwb25zZVwiLFxuXSk7XG5leHBvcnQgdHlwZSBFbnZpcm9ubWVudENvbm5lY3RSZWFjaGFiaWxpdHlDYXVzZSA9IHR5cGVvZiBFbnZpcm9ubWVudENvbm5lY3RSZWFjaGFiaWxpdHlDYXVzZS5UeXBlO1xuXG4vKiogV2hldGhlciBvdGhlciBkZXZpY2VzIGNhbiByZWFjaCB0aGlzIGVudmlyb25tZW50IHRocm91Z2ggaXRzIFQzIENvbm5lY3QgdHVubmVsLiAqL1xuZXhwb3J0IGNvbnN0IEVudmlyb25tZW50Q29ubmVjdFJlYWNoYWJpbGl0eSA9IFNjaGVtYS5VbmlvbihbXG4gIFNjaGVtYS5TdHJ1Y3Qoe1xuICAgIHN0YXR1czogU2NoZW1hLkxpdGVyYWwoXCJyZWFjaGFibGVcIiksXG4gICAgY2hlY2tlZEF0OiBTY2hlbWEuU3RyaW5nLFxuICAgIC8qKiBOdWxsIHdoZW4gY2xvdWRmbGFyZWQgZGlkIG5vdCByZXBvcnQgYSBjb3VudC4gKi9cbiAgICByZWFkeUNvbm5lY3Rpb25zOiBTY2hlbWEuTnVsbE9yKFNjaGVtYS5JbnQpLFxuICAgIHByb3RvY29sOiBTY2hlbWEuTnVsbE9yKFNjaGVtYS5TdHJpbmcpLFxuICB9KSxcbiAgU2NoZW1hLlN0cnVjdCh7XG4gICAgc3RhdHVzOiBTY2hlbWEuTGl0ZXJhbChcInVucmVhY2hhYmxlXCIpLFxuICAgIGNoZWNrZWRBdDogU2NoZW1hLlN0cmluZyxcbiAgICBjYXVzZTogRW52aXJvbm1lbnRDb25uZWN0UmVhY2hhYmlsaXR5Q2F1c2UsXG4gICAgcmVhc29uOiBTY2hlbWEuU3RyaW5nLFxuICAgIGhpbnQ6IFNjaGVtYS5OdWxsT3IoU2NoZW1hLlN0cmluZyksXG4gICAgZml4OiBTY2hlbWEuU3RyaW5nLFxuICB9KSxcbl0pO1xuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnRDb25uZWN0UmVhY2hhYmlsaXR5ID0gdHlwZW9mIEVudmlyb25tZW50Q29ubmVjdFJlYWNoYWJpbGl0eS5UeXBlO1xuXG4vKiogXCJUdW5uZWwgY29ubmVjdGVkIMK3IDQgY29ubmVjdGlvbnMgwrcgUVVJQ1wiIGZvciBhIGhlYWx0aHkgY2hlY2suICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Q29ubmVjdFJlYWNoYWJsZShcbiAgcmVzdWx0OiBFeHRyYWN0PEVudmlyb25tZW50Q29ubmVjdFJlYWNoYWJpbGl0eSwgeyBzdGF0dXM6IFwicmVhY2hhYmxlXCIgfT4sXG4pOiBzdHJpbmcge1xuICBjb25zdCBjb3VudCA9IHJlc3VsdC5yZWFkeUNvbm5lY3Rpb25zO1xuICByZXR1cm4gW1xuICAgIFwiVHVubmVsIGNvbm5lY3RlZFwiLFxuICAgIC4uLihjb3VudCA9PT0gbnVsbCA/IFtdIDogW2Ake2NvdW50fSBjb25uZWN0aW9uJHtjb3VudCA9PT0gMSA/IFwiXCIgOiBcInNcIn1gXSksXG4gICAgLi4uKHJlc3VsdC5wcm90b2NvbCA/IFtyZXN1bHQucHJvdG9jb2wudG9VcHBlckNhc2UoKV0gOiBbXSksXG4gIF0uam9pbihcIiDCtyBcIik7XG59XG5cbi8qKlxuICogU2VjdGlvbnMgb2YgZG9jcy91c2VyL3QzLWNvbm5lY3QtdHJvdWJsZXNob290aW5nLm1kLiBFYWNoIGlzIHRoZSBHaXRIdWIgYW5jaG9yIG9mIGFcbiAqIGhlYWRpbmcgdGhlcmU7IHRoZSB0ZXN0IGZhaWxzIHdoZW4gYSBoZWFkaW5nIGlzIHJlbmFtZWQgd2l0aG91dCB1cGRhdGluZyB0aGlzIGxpc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBUM19DT05ORUNUX1RST1VCTEVTSE9PVElOR19TRUNUSU9OUyA9IFtcbiAgXCJ0aGUtaG9zdHMtdHVubmVsLWlzLW9mZmxpbmVcIixcbiAgXCJwb3J0LTc4NDQtaXMtYmxvY2tlZC1vbi10aGUtaG9zdFwiLFxuICBcInRoZS10dW5uZWwtd29ya3MtYnV0LXQzLWNvZGUtZG9lcy1ub3QtYW5zd2VyXCIsXG4gIFwidGhlLXQzLWNvbm5lY3QtYWRkcmVzcy1kb2VzLW5vdC1yZXNvbHZlLW9yLWFuc3dlclwiLFxuICBcInRoaXMtZGV2aWNlLWNhbnQtcmVhY2gtdDMtY29ubmVjdFwiLFxuICBcInNpZ24taW4tYWNjb3VudC1vci1saW5rLXByb2JsZW1zXCIsXG4gIFwidGhlLWNsb2NrLWlzLW9mZlwiLFxuICBcInRoZS1ob3N0LXJ1bnMtYW4tb2xkZXItdDMtY29kZVwiLFxuICBcInQzLWNvbm5lY3QtcmV0dXJuZWQtYW4tZXJyb3JcIixcbl0gYXMgY29uc3Q7XG5leHBvcnQgdHlwZSBUM0Nvbm5lY3RUcm91Ymxlc2hvb3RpbmdTZWN0aW9uID0gKHR5cGVvZiBUM19DT05ORUNUX1RST1VCTEVTSE9PVElOR19TRUNUSU9OUylbbnVtYmVyXTtcblxuLyoqIENsaWVudHMsIHRoZSBDTEksIGFuZCBzZXJ2ZXIgbG9ncyBsaW5rIGhlcmUgYXMgXCJNb3JlIGluZm9cIi4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0M0Nvbm5lY3RUcm91Ymxlc2hvb3RpbmdVcmwoc2VjdGlvbjogVDNDb25uZWN0VHJvdWJsZXNob290aW5nU2VjdGlvbik6IHN0cmluZyB7XG4gIHJldHVybiBgaHR0cHM6Ly9naXRodWIuY29tL3Bpbmdkb3RnZy90M2NvZGUvYmxvYi9tYWluL2RvY3MvdXNlci90My1jb25uZWN0LXRyb3VibGVzaG9vdGluZy5tZCMke3NlY3Rpb259YDtcbn1cblxuY29uc3QgUkVBQ0hBQklMSVRZX1NFQ1RJT04gPSB7XG4gIG5vdF9saW5rZWQ6IFwic2lnbi1pbi1hY2NvdW50LW9yLWxpbmstcHJvYmxlbXNcIixcbiAgY29ubmVjdG9yX25vdF9ydW5uaW5nOiBcInRoZS1ob3N0cy10dW5uZWwtaXMtb2ZmbGluZVwiLFxuICBjb25uZWN0b3Jfbm90X3JlYWR5OiBcInRoZS1ob3N0cy10dW5uZWwtaXMtb2ZmbGluZVwiLFxuICBub19jb25uZWN0b3I6IFwidGhlLWhvc3RzLXR1bm5lbC1pcy1vZmZsaW5lXCIsXG4gIGVkZ2VfdW5yZWFjaGFibGU6IFwicG9ydC03ODQ0LWlzLWJsb2NrZWQtb24tdGhlLWhvc3RcIixcbiAgb3JpZ2luX3VucmVhY2hhYmxlOiBcInRoZS10dW5uZWwtd29ya3MtYnV0LXQzLWNvZGUtZG9lcy1ub3QtYW5zd2VyXCIsXG4gIHVuZXhwZWN0ZWRfcmVzcG9uc2U6IFwidGhlLXR1bm5lbC13b3Jrcy1idXQtdDMtY29kZS1kb2VzLW5vdC1hbnN3ZXJcIixcbiAgZG5zX2ZhaWxlZDogXCJ0aGUtdDMtY29ubmVjdC1hZGRyZXNzLWRvZXMtbm90LXJlc29sdmUtb3ItYW5zd2VyXCIsXG4gIHRpbWVvdXQ6IFwidGhlLXQzLWNvbm5lY3QtYWRkcmVzcy1kb2VzLW5vdC1yZXNvbHZlLW9yLWFuc3dlclwiLFxufSBzYXRpc2ZpZXMgUmVjb3JkPEVudmlyb25tZW50Q29ubmVjdFJlYWNoYWJpbGl0eUNhdXNlLCBUM0Nvbm5lY3RUcm91Ymxlc2hvb3RpbmdTZWN0aW9uPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbm5lY3RSZWFjaGFiaWxpdHlIZWxwVXJsKGNhdXNlOiBFbnZpcm9ubWVudENvbm5lY3RSZWFjaGFiaWxpdHlDYXVzZSk6IHN0cmluZyB7XG4gIHJldHVybiB0M0Nvbm5lY3RUcm91Ymxlc2hvb3RpbmdVcmwoUkVBQ0hBQklMSVRZX1NFQ1RJT05bY2F1c2VdKTtcbn1cblxuZXhwb3J0IGNvbnN0IEVudmlyb25tZW50Q2xvdWRMaW5rU3RhdGVSZXN1bHQgPSBTY2hlbWEuU3RydWN0KHtcbiAgbGlua2VkOiBTY2hlbWEuQm9vbGVhbixcbiAgY2xvdWRVc2VySWQ6IFNjaGVtYS5OdWxsT3IoU2NoZW1hLlN0cmluZyksXG4gIHJlbGF5VXJsOiBTY2hlbWEuTnVsbE9yKFNjaGVtYS5TdHJpbmcpLFxuICByZWxheUlzc3VlcjogU2NoZW1hLk51bGxPcihTY2hlbWEuU3RyaW5nKSxcbiAgbWFuYWdlZFR1bm5lbEFjdGl2ZTogU2NoZW1hLm9wdGlvbmFsKFNjaGVtYS5Cb29sZWFuKSxcbiAgcHVibGlzaEFnZW50QWN0aXZpdHk6IFNjaGVtYS5Cb29sZWFuLFxuICBob2xkV2ViaG9va3NXaGlsZU9mZmxpbmU6IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuQm9vbGVhbiksXG4gIGxpbmtSZXZva2VkOiBTY2hlbWEub3B0aW9uYWwoU2NoZW1hLkJvb2xlYW4pLFxuICAvKiogVGhlIGxhdGVzdCBjaGVjayB0aGUgc2VydmVyIHJhbiBvbiBpdHMgb3duLCBhYnNlbnQgdW50aWwgb25lIGZpbmlzaGVzLiAqL1xuICByZWFjaGFiaWxpdHk6IFNjaGVtYS5vcHRpb25hbChFbnZpcm9ubWVudENvbm5lY3RSZWFjaGFiaWxpdHkpLFxufSk7XG5leHBvcnQgdHlwZSBFbnZpcm9ubWVudENsb3VkTGlua1N0YXRlUmVzdWx0ID0gdHlwZW9mIEVudmlyb25tZW50Q2xvdWRMaW5rU3RhdGVSZXN1bHQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IEVudmlyb25tZW50Q2xvdWRQcmVmZXJlbmNlc1JlcXVlc3QgPSBTY2hlbWEuU3RydWN0KHtcbiAgcHVibGlzaEFnZW50QWN0aXZpdHk6IFNjaGVtYS5Cb29sZWFuLFxuICBob2xkV2ViaG9va3NXaGlsZU9mZmxpbmU6IFNjaGVtYS5vcHRpb25hbChTY2hlbWEuQm9vbGVhbiksXG59KTtcbmV4cG9ydCB0eXBlIEVudmlyb25tZW50Q2xvdWRQcmVmZXJlbmNlc1JlcXVlc3QgPSB0eXBlb2YgRW52aXJvbm1lbnRDbG91ZFByZWZlcmVuY2VzUmVxdWVzdC5UeXBlO1xuXG5leHBvcnQgY29uc3QgQXV0aFBhaXJpbmdMaW5rUmV2b2tlUmVzdWx0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIHJldm9rZWQ6IFNjaGVtYS5Cb29sZWFuLFxufSk7XG5leHBvcnQgdHlwZSBBdXRoUGFpcmluZ0xpbmtSZXZva2VSZXN1bHQgPSB0eXBlb2YgQXV0aFBhaXJpbmdMaW5rUmV2b2tlUmVzdWx0LlR5cGU7XG5cbmV4cG9ydCBjb25zdCBBdXRoQ2xpZW50U2Vzc2lvblJldm9rZVJlc3VsdCA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICByZXZva2VkOiBTY2hlbWEuQm9vbGVhbixcbn0pO1xuZXhwb3J0IHR5cGUgQXV0aENsaWVudFNlc3Npb25SZXZva2VSZXN1bHQgPSB0eXBlb2YgQXV0aENsaWVudFNlc3Npb25SZXZva2VSZXN1bHQuVHlwZTtcblxuZXhwb3J0IGNvbnN0IEF1dGhPdGhlckNsaWVudFNlc3Npb25zUmV2b2tlUmVzdWx0ID0gU2NoZW1hLlN0cnVjdCh7XG4gIHJldm9rZWRDb3VudDogU2NoZW1hLk51bWJlcixcbn0pO1xuZXhwb3J0IHR5cGUgQXV0aE90aGVyQ2xpZW50U2Vzc2lvbnNSZXZva2VSZXN1bHQgPSB0eXBlb2YgQXV0aE90aGVyQ2xpZW50U2Vzc2lvbnNSZXZva2VSZXN1bHQuVHlwZTtcblxuY2xhc3MgRW52aXJvbm1lbnRNZXRhZGF0YUh0dHBBcGkgZXh0ZW5kcyBIdHRwQXBpR3JvdXAubWFrZShcIm1ldGFkYXRhXCIpLmFkZChcbiAgSHR0cEFwaUVuZHBvaW50LmdldChcImRlc2NyaXB0b3JcIiwgXCIvLndlbGwta25vd24vdDMvZW52aXJvbm1lbnRcIiwge1xuICAgIHN1Y2Nlc3M6IEV4ZWN1dGlvbkVudmlyb25tZW50RGVzY3JpcHRvcixcbiAgfSksXG4pIHt9XG5cbmNsYXNzIEVudmlyb25tZW50QXV0aEh0dHBBcGkgZXh0ZW5kcyBIdHRwQXBpR3JvdXAubWFrZShcImF1dGhcIilcbiAgLmFkZChcbiAgICBIdHRwQXBpRW5kcG9pbnQuZ2V0KFwic2Vzc2lvblwiLCBcIi9hcGkvYXV0aC9zZXNzaW9uXCIsIHtcbiAgICAgIGhlYWRlcnM6IE9wdGlvbmFsQmVhcmVySGVhZGVycyxcbiAgICAgIHN1Y2Nlc3M6IEF1dGhTZXNzaW9uU3RhdGUsXG4gICAgICBlcnJvcjogW0Vudmlyb25tZW50SW50ZXJuYWxFcnJvcl0sXG4gICAgfSksXG4gIClcbiAgLmFkZChcbiAgICBIdHRwQXBpRW5kcG9pbnQucG9zdChcImJyb3dzZXJTZXNzaW9uXCIsIFwiL2FwaS9hdXRoL2Jyb3dzZXItc2Vzc2lvblwiLCB7XG4gICAgICBwYXlsb2FkOiBBdXRoQnJvd3NlclNlc3Npb25SZXF1ZXN0LFxuICAgICAgc3VjY2VzczogQXV0aEJyb3dzZXJTZXNzaW9uUmVzdWx0LFxuICAgICAgZXJyb3I6IEVudmlyb25tZW50U2Vzc2lvbkNyZWF0aW9uRXJyb3JzLFxuICAgIH0pLFxuICApXG4gIC5hZGQoXG4gICAgSHR0cEFwaUVuZHBvaW50LnBvc3QoXCJ0b2tlblwiLCBcIi9vYXV0aC90b2tlblwiLCB7XG4gICAgICBoZWFkZXJzOiBPcHRpb25hbERwb3BQcm9vZkhlYWRlcnMsXG4gICAgICBwYXlsb2FkOiBBdXRoVG9rZW5FeGNoYW5nZVJlcXVlc3QsXG4gICAgICBzdWNjZXNzOiBBdXRoQWNjZXNzVG9rZW5SZXN1bHQsXG4gICAgICBlcnJvcjogRW52aXJvbm1lbnRUb2tlbkV4Y2hhbmdlRXJyb3JzLFxuICAgIH0pLFxuICApXG4gIC5hZGQoXG4gICAgSHR0cEFwaUVuZHBvaW50LnBvc3QoXCJ3ZWJTb2NrZXRUaWNrZXRcIiwgXCIvYXBpL2F1dGgvd2Vic29ja2V0LXRpY2tldFwiLCB7XG4gICAgICBoZWFkZXJzOiBPcHRpb25hbEJlYXJlckhlYWRlcnMsXG4gICAgICBzdWNjZXNzOiBBdXRoV2ViU29ja2V0VGlja2V0UmVzdWx0LFxuICAgICAgZXJyb3I6IFtFbnZpcm9ubWVudEludGVybmFsRXJyb3JdLFxuICAgIH0pLm1pZGRsZXdhcmUoRW52aXJvbm1lbnRBdXRoZW50aWNhdGVkQXV0aCksXG4gIClcbiAgLmFkZChcbiAgICBIdHRwQXBpRW5kcG9pbnQucG9zdChcIndlYlNvY2tldFRpY2tldEZvclwiLCBcIi9hcGkvYXV0aC93ZWJzb2NrZXQtdGlja2V0Lzp1c2VcIiwge1xuICAgICAgaGVhZGVyczogT3B0aW9uYWxCZWFyZXJIZWFkZXJzLFxuICAgICAgcGFyYW1zOiBBdXRoV2ViU29ja2V0VGlja2V0UGFyYW1zLFxuICAgICAgc3VjY2VzczogQXV0aFdlYlNvY2tldFRpY2tldFJlc3VsdCxcbiAgICAgIGVycm9yOiBbRW52aXJvbm1lbnRJbnRlcm5hbEVycm9yXSxcbiAgICB9KS5taWRkbGV3YXJlKEVudmlyb25tZW50QXV0aGVudGljYXRlZEF1dGgpLFxuICApXG4gIC5hZGQoXG4gICAgSHR0cEFwaUVuZHBvaW50LnBvc3QoXCJwYWlyaW5nQ3JlZGVudGlhbFwiLCBcIi9hcGkvYXV0aC9wYWlyaW5nLXRva2VuXCIsIHtcbiAgICAgIGhlYWRlcnM6IE9wdGlvbmFsQmVhcmVySGVhZGVycyxcbiAgICAgIHBheWxvYWQ6IEF1dGhDcmVhdGVQYWlyaW5nQ3JlZGVudGlhbElucHV0LFxuICAgICAgc3VjY2VzczogQXV0aFBhaXJpbmdDcmVkZW50aWFsUmVzdWx0LFxuICAgICAgZXJyb3I6IEVudmlyb25tZW50UGFpcmluZ0NyZWRlbnRpYWxFcnJvcnMsXG4gICAgfSkubWlkZGxld2FyZShFbnZpcm9ubWVudEF1dGhlbnRpY2F0ZWRBdXRoKSxcbiAgKVxuICAuYWRkKFxuICAgIEh0dHBBcGlFbmRwb2ludC5nZXQoXCJwYWlyaW5nTGlua3NcIiwgXCIvYXBpL2F1dGgvcGFpcmluZy1saW5rc1wiLCB7XG4gICAgICBoZWFkZXJzOiBPcHRpb25hbEJlYXJlckhlYWRlcnMsXG4gICAgICBzdWNjZXNzOiBTY2hlbWEuQXJyYXkoQXV0aFBhaXJpbmdMaW5rKSxcbiAgICAgIGVycm9yOiBFbnZpcm9ubWVudFNjb3BlZE9wZXJhdGlvbkVycm9ycyxcbiAgICB9KS5taWRkbGV3YXJlKEVudmlyb25tZW50QXV0aGVudGljYXRlZEF1dGgpLFxuICApXG4gIC5hZGQoXG4gICAgSHR0cEFwaUVuZHBvaW50LnBvc3QoXCJyZXZva2VQYWlyaW5nTGlua1wiLCBcIi9hcGkvYXV0aC9wYWlyaW5nLWxpbmtzL3Jldm9rZVwiLCB7XG4gICAgICBoZWFkZXJzOiBPcHRpb25hbEJlYXJlckhlYWRlcnMsXG4gICAgICBwYXlsb2FkOiBBdXRoUmV2b2tlUGFpcmluZ0xpbmtJbnB1dCxcbiAgICAgIHN1Y2Nlc3M6IEF1dGhQYWlyaW5nTGlua1Jldm9rZVJlc3VsdCxcbiAgICAgIGVycm9yOiBFbnZpcm9ubWVudFNjb3BlZE9wZXJhdGlvbkVycm9ycyxcbiAgICB9KS5taWRkbGV3YXJlKEVudmlyb25tZW50QXV0aGVudGljYXRlZEF1dGgpLFxuICApXG4gIC5hZGQoXG4gICAgSHR0cEFwaUVuZHBvaW50LmdldChcImNsaWVudHNcIiwgXCIvYXBpL2F1dGgvY2xpZW50c1wiLCB7XG4gICAgICBoZWFkZXJzOiBPcHRpb25hbEJlYXJlckhlYWRlcnMsXG4gICAgICBzdWNjZXNzOiBTY2hlbWEuQXJyYXkoQXV0aENsaWVudFNlc3Npb24pLFxuICAgICAgZXJyb3I6IEVudmlyb25tZW50U2NvcGVkT3BlcmF0aW9uRXJyb3JzLFxuICAgIH0pLm1pZGRsZXdhcmUoRW52aXJvbm1lbnRBdXRoZW50aWNhdGVkQXV0aCksXG4gIClcbiAgLmFkZChcbiAgICBIdHRwQXBpRW5kcG9pbnQucG9zdChcInJldm9rZUNsaWVudFwiLCBcIi9hcGkvYXV0aC9jbGllbnRzL3Jldm9rZVwiLCB7XG4gICAgICBoZWFkZXJzOiBPcHRpb25hbEJlYXJlckhlYWRlcnMsXG4gICAgICBwYXlsb2FkOiBBdXRoUmV2b2tlQ2xpZW50U2Vzc2lvbklucHV0LFxuICAgICAgc3VjY2VzczogQXV0aENsaWVudFNlc3Npb25SZXZva2VSZXN1bHQsXG4gICAgICBlcnJvcjogRW52aXJvbm1lbnRTZXNzaW9uUmV2b2tlRXJyb3JzLFxuICAgIH0pLm1pZGRsZXdhcmUoRW52aXJvbm1lbnRBdXRoZW50aWNhdGVkQXV0aCksXG4gIClcbiAgLmFkZChcbiAgICBIdHRwQXBpRW5kcG9pbnQucG9zdChcInJldm9rZU90aGVyQ2xpZW50c1wiLCBcIi9hcGkvYXV0aC9jbGllbnRzL3Jldm9rZS1vdGhlcnNcIiwge1xuICAgICAgaGVhZGVyczogT3B0aW9uYWxCZWFyZXJIZWFkZXJzLFxuICAgICAgc3VjY2VzczogQXV0aE90aGVyQ2xpZW50U2Vzc2lvbnNSZXZva2VSZXN1bHQsXG4gICAgICBlcnJvcjogRW52aXJvbm1lbnRTY29wZWRPcGVyYXRpb25FcnJvcnMsXG4gICAgfSkubWlkZGxld2FyZShFbnZpcm9ubWVudEF1dGhlbnRpY2F0ZWRBdXRoKSxcbiAgKSB7fVxuXG5jbGFzcyBFbnZpcm9ubWVudE1jcE9BdXRoSHR0cEFwaSBleHRlbmRzIEh0dHBBcGlHcm91cC5tYWtlKFwibWNwT0F1dGhcIilcbiAgLmFkZChcbiAgICBIdHRwQXBpRW5kcG9pbnQuZ2V0KFwicHJvdGVjdGVkUmVzb3VyY2VcIiwgXCIvLndlbGwta25vd24vb2F1dGgtcHJvdGVjdGVkLXJlc291cmNlXCIsIHtcbiAgICAgIHN1Y2Nlc3M6IEF1dGhNY3BQcm90ZWN0ZWRSZXNvdXJjZU1ldGFkYXRhLFxuICAgIH0pLFxuICApXG4gIC5hZGQoXG4gICAgSHR0cEFwaUVuZHBvaW50LmdldChcIm1jcFByb3RlY3RlZFJlc291cmNlXCIsIFwiLy53ZWxsLWtub3duL29hdXRoLXByb3RlY3RlZC1yZXNvdXJjZS9tY3BcIiwge1xuICAgICAgc3VjY2VzczogQXV0aE1jcFByb3RlY3RlZFJlc291cmNlTWV0YWRhdGEsXG4gICAgfSksXG4gIClcbiAgLmFkZChcbiAgICBIdHRwQXBpRW5kcG9pbnQuZ2V0KFwiYXV0aG9yaXphdGlvblNlcnZlclwiLCBcIi8ud2VsbC1rbm93bi9vYXV0aC1hdXRob3JpemF0aW9uLXNlcnZlclwiLCB7XG4gICAgICBzdWNjZXNzOiBBdXRoTWNwQXV0aG9yaXphdGlvblNlcnZlck1ldGFkYXRhLFxuICAgIH0pLFxuICApXG4gIC5hZGQoXG4gICAgSHR0cEFwaUVuZHBvaW50LnBvc3QoXCJyZWdpc3RlclwiLCBcIi9vYXV0aC9tY3AvcmVnaXN0ZXJcIiwge1xuICAgICAgcGF5bG9hZDogQXV0aE1jcENsaWVudFJlZ2lzdHJhdGlvbixcbiAgICAgIHN1Y2Nlc3M6IEF1dGhNY3BSZWdpc3RlcmVkQ2xpZW50LFxuICAgICAgZXJyb3I6IEF1dGhNY3BSZWdpc3RyYXRpb25FcnJvcixcbiAgICB9KSxcbiAgKVxuICAuYWRkKEh0dHBBcGlFbmRwb2ludC5nZXQoXCJhdXRob3JpemVcIiwgXCIvb2F1dGgvbWNwL2F1dGhvcml6ZVwiKSlcbiAgLmFkZChcbiAgICBIdHRwQXBpRW5kcG9pbnQucG9zdChcImFwcHJvdmFsXCIsIFwiL29hdXRoL21jcC9hcHByb3ZhbFwiLCB7XG4gICAgICBwYXlsb2FkOiBBdXRoTWNwQXV0aG9yaXphdGlvblJlcXVlc3QsXG4gICAgICBzdWNjZXNzOiBbQXV0aE1jcEFwcHJvdmFsRGV0YWlscywgQXV0aE1jcEFwcHJvdmFsUmVkaXJlY3RdLFxuICAgICAgZXJyb3I6IEF1dGhNY3BBcHByb3ZhbEVycm9yLFxuICAgIH0pLFxuICApXG4gIC5hZGQoXG4gICAgSHR0cEFwaUVuZHBvaW50LnBvc3QoXCJkZWNpc2lvblwiLCBcIi9vYXV0aC9tY3AvZGVjaXNpb25cIiwge1xuICAgICAgcGF5bG9hZDogQXV0aE1jcEFwcHJvdmFsRGVjaXNpb25SZXF1ZXN0LFxuICAgICAgc3VjY2VzczogQXV0aE1jcEFwcHJvdmFsUmVkaXJlY3QsXG4gICAgICBlcnJvcjogQXV0aE1jcEFwcHJvdmFsRXJyb3IsXG4gICAgfSksXG4gIClcbiAgLmFkZChcbiAgICBIdHRwQXBpRW5kcG9pbnQucG9zdChcInRva2VuXCIsIFwiL29hdXRoL21jcC90b2tlblwiLCB7XG4gICAgICBwYXlsb2FkOiBBdXRoTWNwVG9rZW5SZXF1ZXN0LFxuICAgICAgc3VjY2VzczogQXV0aE1jcFRva2VuUmVzdWx0LFxuICAgICAgZXJyb3I6IEF1dGhNY3BUb2tlbkVycm9yLFxuICAgIH0pLFxuICApIHt9XG5cbmNvbnN0IEVudmlyb25tZW50T3JjaGVzdHJhdGlvblRocmVhZFNuYXBzaG90UGFyYW1zID0gU2NoZW1hLlN0cnVjdCh7XG4gIHRocmVhZElkOiBUaHJlYWRJZCxcbn0pO1xuXG5jb25zdCBFbnZpcm9ubWVudE9yY2hlc3RyYXRpb25TaGVsbFNuYXBzaG90UXVlcnkgPSBTY2hlbWEuU3RydWN0KHtcbiAgb21pdElkbGVTdWJhZ2VudHM6IFNjaGVtYS5vcHRpb25hbEtleShTY2hlbWEuU3RyaW5nKSxcbn0pO1xuXG5jb25zdCBFbnZpcm9ubWVudE9yY2hlc3RyYXRpb25UaHJlYWRCb3VuZGVkU25hcHNob3RRdWVyeSA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBjb21wYWN0VHVybkl0ZW1zOiBTY2hlbWEub3B0aW9uYWxLZXkoU2NoZW1hLlN0cmluZyksXG4gIGRlZHVwZUJvZGllczogU2NoZW1hLm9wdGlvbmFsS2V5KFNjaGVtYS5TdHJpbmcpLFxufSk7XG5cbmNvbnN0IEVudmlyb25tZW50T3JjaGVzdHJhdGlvblRocmVhZEhpc3RvcnlRdWVyeSA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBjdXJzb3I6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgdGhyb3VnaEVudHJ5SWQ6IFNjaGVtYS5vcHRpb25hbChUcmltbWVkTm9uRW1wdHlTdHJpbmcpLFxuICB2aWV3OiBTY2hlbWEub3B0aW9uYWwoU2NoZW1hLkxpdGVyYWxzKFtcImNvbnZlcnNhdGlvblwiLCBcImFjdGl2aXR5XCJdKSksXG59KTtcblxuY29uc3QgRW52aXJvbm1lbnRPcmNoZXN0cmF0aW9uVGhyZWFkSGlzdG9yeUVycm9ycyA9IFtcbiAgRW52aXJvbm1lbnRSZXF1ZXN0SW52YWxpZEVycm9yLFxuICBFbnZpcm9ubWVudFNjb3BlUmVxdWlyZWRFcnJvcixcbiAgRW52aXJvbm1lbnRSZXNvdXJjZU5vdEZvdW5kRXJyb3IsXG4gIEVudmlyb25tZW50SW50ZXJuYWxFcnJvcixcbl0gYXMgY29uc3Q7XG5cbmNsYXNzIEVudmlyb25tZW50T3JjaGVzdHJhdGlvbkh0dHBBcGkgZXh0ZW5kcyBIdHRwQXBpR3JvdXAubWFrZShcIm9yY2hlc3RyYXRpb25cIilcbiAgLmFkZChcbiAgICBIdHRwQXBpRW5kcG9pbnQuZ2V0KFwic2hlbGxTbmFwc2hvdFwiLCBcIi9hcGkvb3JjaGVzdHJhdGlvbi9zaGVsbFwiLCB7XG4gICAgICBoZWFkZXJzOiBPcmNoZXN0cmF0aW9uUHJvdG9jb2xIZWFkZXJzLFxuICAgICAgcXVlcnk6IEVudmlyb25tZW50T3JjaGVzdHJhdGlvblNoZWxsU25hcHNob3RRdWVyeSxcbiAgICAgIHN1Y2Nlc3M6IE9yY2hlc3RyYXRpb25WMlNoZWxsU25hcHNob3QsXG4gICAgICBlcnJvcjogRW52aXJvbm1lbnRPcmNoZXN0cmF0aW9uU25hcHNob3RFcnJvcnMsXG4gICAgfSkubWlkZGxld2FyZShFbnZpcm9ubWVudEF1dGhlbnRpY2F0ZWRBdXRoKSxcbiAgKVxuICAuYWRkKFxuICAgIEh0dHBBcGlFbmRwb2ludC5nZXQoXCJ0aHJlYWRTbmFwc2hvdFwiLCBcIi9hcGkvb3JjaGVzdHJhdGlvbi90aHJlYWRzLzp0aHJlYWRJZFwiLCB7XG4gICAgICBoZWFkZXJzOiBPcmNoZXN0cmF0aW9uUHJvdG9jb2xIZWFkZXJzLFxuICAgICAgcGFyYW1zOiBFbnZpcm9ubWVudE9yY2hlc3RyYXRpb25UaHJlYWRTbmFwc2hvdFBhcmFtcyxcbiAgICAgIHN1Y2Nlc3M6IE9yY2hlc3RyYXRpb25WMlRocmVhZERldGFpbFNuYXBzaG90LFxuICAgICAgZXJyb3I6IEVudmlyb25tZW50T3JjaGVzdHJhdGlvblRocmVhZFNuYXBzaG90RXJyb3JzLFxuICAgIH0pLm1pZGRsZXdhcmUoRW52aXJvbm1lbnRBdXRoZW50aWNhdGVkQXV0aCksXG4gIClcbiAgLmFkZChcbiAgICBIdHRwQXBpRW5kcG9pbnQuZ2V0KFwidGhyZWFkVHJhbnNjcmlwdFwiLCBcIi9hcGkvb3JjaGVzdHJhdGlvbi90aHJlYWRzLzp0aHJlYWRJZC90cmFuc2NyaXB0XCIsIHtcbiAgICAgIGhlYWRlcnM6IE9yY2hlc3RyYXRpb25Qcm90b2NvbEhlYWRlcnMsXG4gICAgICBwYXJhbXM6IEVudmlyb25tZW50T3JjaGVzdHJhdGlvblRocmVhZFNuYXBzaG90UGFyYW1zLFxuICAgICAgc3VjY2VzczogT3JjaGVzdHJhdGlvblYyVGhyZWFkVHJhbnNjcmlwdCxcbiAgICAgIGVycm9yOiBbRW52aXJvbm1lbnRSZXF1ZXN0SW52YWxpZEVycm9yLCAuLi5FbnZpcm9ubWVudE9yY2hlc3RyYXRpb25UaHJlYWRTbmFwc2hvdEVycm9yc10sXG4gICAgfSkubWlkZGxld2FyZShFbnZpcm9ubWVudEF1dGhlbnRpY2F0ZWRBdXRoKSxcbiAgKVxuICAuYWRkKFxuICAgIEh0dHBBcGlFbmRwb2ludC5nZXQoXCJ0aHJlYWRCb3VuZGVkU25hcHNob3RcIiwgXCIvYXBpL29yY2hlc3RyYXRpb24vdGhyZWFkcy86dGhyZWFkSWQvYm91bmRlZFwiLCB7XG4gICAgICBoZWFkZXJzOiBPcmNoZXN0cmF0aW9uUHJvdG9jb2xIZWFkZXJzLFxuICAgICAgcGFyYW1zOiBFbnZpcm9ubWVudE9yY2hlc3RyYXRpb25UaHJlYWRTbmFwc2hvdFBhcmFtcyxcbiAgICAgIHF1ZXJ5OiBFbnZpcm9ubWVudE9yY2hlc3RyYXRpb25UaHJlYWRCb3VuZGVkU25hcHNob3RRdWVyeSxcbiAgICAgIHN1Y2Nlc3M6IE9yY2hlc3RyYXRpb25WMlRocmVhZEJvdW5kZWRTbmFwc2hvdCxcbiAgICAgIGVycm9yOiBFbnZpcm9ubWVudE9yY2hlc3RyYXRpb25UaHJlYWRTbmFwc2hvdEVycm9ycyxcbiAgICB9KS5taWRkbGV3YXJlKEVudmlyb25tZW50QXV0aGVudGljYXRlZEF1dGgpLFxuICApXG4gIC5hZGQoXG4gICAgSHR0cEFwaUVuZHBvaW50LmdldChcInRocmVhZEhpc3RvcnlQYWdlXCIsIFwiL2FwaS9vcmNoZXN0cmF0aW9uL3RocmVhZHMvOnRocmVhZElkL2hpc3RvcnlcIiwge1xuICAgICAgaGVhZGVyczogT3JjaGVzdHJhdGlvblByb3RvY29sSGVhZGVycyxcbiAgICAgIHBhcmFtczogRW52aXJvbm1lbnRPcmNoZXN0cmF0aW9uVGhyZWFkU25hcHNob3RQYXJhbXMsXG4gICAgICBxdWVyeTogRW52aXJvbm1lbnRPcmNoZXN0cmF0aW9uVGhyZWFkSGlzdG9yeVF1ZXJ5LFxuICAgICAgc3VjY2VzczogT3JjaGVzdHJhdGlvblYyVGhyZWFkSGlzdG9yeVBhZ2UsXG4gICAgICBlcnJvcjogRW52aXJvbm1lbnRPcmNoZXN0cmF0aW9uVGhyZWFkSGlzdG9yeUVycm9ycyxcbiAgICB9KS5taWRkbGV3YXJlKEVudmlyb25tZW50QXV0aGVudGljYXRlZEF1dGgpLFxuICApIHt9XG5cbmNsYXNzIEVudmlyb25tZW50UHJvamVjdHNIdHRwQXBpIGV4dGVuZHMgSHR0cEFwaUdyb3VwLm1ha2UoXCJwcm9qZWN0c1wiKVxuICAuYWRkKFxuICAgIEh0dHBBcGlFbmRwb2ludC5nZXQoXCJzbmFwc2hvdFwiLCBcIi9hcGkvcHJvamVjdHNcIiwge1xuICAgICAgaGVhZGVyczogT3B0aW9uYWxCZWFyZXJIZWFkZXJzLFxuICAgICAgc3VjY2VzczogUHJvamVjdFNuYXBzaG90LFxuICAgICAgZXJyb3I6IEVudmlyb25tZW50UHJvamVjdFNuYXBzaG90RXJyb3JzLFxuICAgIH0pLm1pZGRsZXdhcmUoRW52aXJvbm1lbnRBdXRoZW50aWNhdGVkQXV0aCksXG4gIClcbiAgLmFkZChcbiAgICBIdHRwQXBpRW5kcG9pbnQucG9zdChcIm11dGF0ZVwiLCBcIi9hcGkvcHJvamVjdHMvbXV0YXRlXCIsIHtcbiAgICAgIGhlYWRlcnM6IE9wdGlvbmFsQmVhcmVySGVhZGVycyxcbiAgICAgIHBheWxvYWQ6IFByb2plY3RNdXRhdGlvbixcbiAgICAgIHN1Y2Nlc3M6IFByb2plY3QsXG4gICAgICBlcnJvcjogRW52aXJvbm1lbnRQcm9qZWN0TXV0YXRpb25FcnJvcnMsXG4gICAgfSkubWlkZGxld2FyZShFbnZpcm9ubWVudEF1dGhlbnRpY2F0ZWRBdXRoKSxcbiAgKSB7fVxuXG5jbGFzcyBFbnZpcm9ubWVudFB1bGxSZXF1ZXN0c0h0dHBBcGkgZXh0ZW5kcyBIdHRwQXBpR3JvdXAubWFrZShcInB1bGxSZXF1ZXN0c1wiKS5hZGQoXG4gIEh0dHBBcGlFbmRwb2ludC5wb3N0KFwiZGlmZlwiLCBcIi9hcGkvcHVsbC1yZXF1ZXN0cy9kaWZmXCIsIHtcbiAgICBoZWFkZXJzOiBPcHRpb25hbEJlYXJlckhlYWRlcnMsXG4gICAgcGF5bG9hZDogUHVsbFJlcXVlc3REaWZmSW5wdXQsXG4gICAgc3VjY2VzczogUHVsbFJlcXVlc3REaWZmUmVzdWx0LFxuICAgIGVycm9yOiBbXG4gICAgICBQdWxsUmVxdWVzdFVuYXZhaWxhYmxlRXJyb3IsXG4gICAgICBQdWxsUmVxdWVzdE9wZXJhdGlvbkVycm9yLFxuICAgICAgRW52aXJvbm1lbnRBdXRoSW52YWxpZEVycm9yLFxuICAgICAgRW52aXJvbm1lbnRTY29wZVJlcXVpcmVkRXJyb3IsXG4gICAgICBFbnZpcm9ubWVudEludGVybmFsRXJyb3IsXG4gICAgXSxcbiAgfSkubWlkZGxld2FyZShFbnZpcm9ubWVudEF1dGhlbnRpY2F0ZWRBdXRoKSxcbikge31cblxuY2xhc3MgRW52aXJvbm1lbnRDb25uZWN0SHR0cEFwaSBleHRlbmRzIEh0dHBBcGlHcm91cC5tYWtlKFwiY29ubmVjdFwiKVxuICAuYWRkKFxuICAgIEh0dHBBcGlFbmRwb2ludC5wb3N0KFwibGlua1Byb29mXCIsIFwiL2FwaS9jb25uZWN0L2xpbmstcHJvb2ZcIiwge1xuICAgICAgaGVhZGVyczogT3B0aW9uYWxCZWFyZXJIZWFkZXJzLFxuICAgICAgcGF5bG9hZDogUmVsYXlMaW5rUHJvb2ZSZXF1ZXN0LFxuICAgICAgc3VjY2VzczogUmVsYXlFbnZpcm9ubWVudExpbmtQcm9vZixcbiAgICAgIGVycm9yOiBFbnZpcm9ubWVudEh0dHBDbG91ZEVycm9ycyxcbiAgICB9KS5taWRkbGV3YXJlKEVudmlyb25tZW50QXV0aGVudGljYXRlZEF1dGgpLFxuICApXG4gIC5hZGQoXG4gICAgSHR0cEFwaUVuZHBvaW50LnBvc3QoXCJyZWxheUNvbmZpZ1wiLCBcIi9hcGkvY29ubmVjdC9yZWxheS1jb25maWdcIiwge1xuICAgICAgaGVhZGVyczogT3B0aW9uYWxCZWFyZXJIZWFkZXJzLFxuICAgICAgcGF5bG9hZDogUmVsYXlFbnZpcm9ubWVudENvbmZpZ1JlcXVlc3QsXG4gICAgICBzdWNjZXNzOiBFbnZpcm9ubWVudENsb3VkUmVsYXlDb25maWdSZXN1bHQsXG4gICAgICBlcnJvcjogWy4uLkVudmlyb25tZW50SHR0cENsb3VkRXJyb3JzLCBFbnZpcm9ubWVudENsb3VkRW5kcG9pbnRVbmF2YWlsYWJsZUVycm9yXSxcbiAgICB9KS5taWRkbGV3YXJlKEVudmlyb25tZW50QXV0aGVudGljYXRlZEF1dGgpLFxuICApXG4gIC5hZGQoXG4gICAgSHR0cEFwaUVuZHBvaW50LmdldChcImxpbmtTdGF0ZVwiLCBcIi9hcGkvY29ubmVjdC9saW5rLXN0YXRlXCIsIHtcbiAgICAgIGhlYWRlcnM6IE9wdGlvbmFsQmVhcmVySGVhZGVycyxcbiAgICAgIHN1Y2Nlc3M6IEVudmlyb25tZW50Q2xvdWRMaW5rU3RhdGVSZXN1bHQsXG4gICAgICBlcnJvcjogRW52aXJvbm1lbnRIdHRwQ2xvdWRFcnJvcnMsXG4gICAgfSkubWlkZGxld2FyZShFbnZpcm9ubWVudEF1dGhlbnRpY2F0ZWRBdXRoKSxcbiAgKVxuICAuYWRkKFxuICAgIEh0dHBBcGlFbmRwb2ludC5wb3N0KFwiY2hlY2tSZWFjaGFiaWxpdHlcIiwgXCIvYXBpL2Nvbm5lY3QvcmVhY2hhYmlsaXR5XCIsIHtcbiAgICAgIGhlYWRlcnM6IE9wdGlvbmFsQmVhcmVySGVhZGVycyxcbiAgICAgIHN1Y2Nlc3M6IEVudmlyb25tZW50Q29ubmVjdFJlYWNoYWJpbGl0eSxcbiAgICAgIGVycm9yOiBFbnZpcm9ubWVudEh0dHBDbG91ZEVycm9ycyxcbiAgICB9KS5taWRkbGV3YXJlKEVudmlyb25tZW50QXV0aGVudGljYXRlZEF1dGgpLFxuICApXG4gIC5hZGQoXG4gICAgSHR0cEFwaUVuZHBvaW50LnBvc3QoXCJ1bmxpbmtcIiwgXCIvYXBpL2Nvbm5lY3QvdW5saW5rXCIsIHtcbiAgICAgIGhlYWRlcnM6IE9wdGlvbmFsQmVhcmVySGVhZGVycyxcbiAgICAgIHN1Y2Nlc3M6IEVudmlyb25tZW50Q2xvdWRSZWxheUNvbmZpZ1Jlc3VsdCxcbiAgICAgIGVycm9yOiBFbnZpcm9ubWVudEh0dHBDbG91ZEVycm9ycyxcbiAgICB9KS5taWRkbGV3YXJlKEVudmlyb25tZW50QXV0aGVudGljYXRlZEF1dGgpLFxuICApXG4gIC5hZGQoXG4gICAgSHR0cEFwaUVuZHBvaW50LnBvc3QoXCJwcmVmZXJlbmNlc1wiLCBcIi9hcGkvY29ubmVjdC9wcmVmZXJlbmNlc1wiLCB7XG4gICAgICBoZWFkZXJzOiBPcHRpb25hbEJlYXJlckhlYWRlcnMsXG4gICAgICBwYXlsb2FkOiBFbnZpcm9ubWVudENsb3VkUHJlZmVyZW5jZXNSZXF1ZXN0LFxuICAgICAgc3VjY2VzczogRW52aXJvbm1lbnRDbG91ZExpbmtTdGF0ZVJlc3VsdCxcbiAgICAgIGVycm9yOiBFbnZpcm9ubWVudEh0dHBDbG91ZEVycm9ycyxcbiAgICB9KS5taWRkbGV3YXJlKEVudmlyb25tZW50QXV0aGVudGljYXRlZEF1dGgpLFxuICApXG4gIC5hZGQoXG4gICAgSHR0cEFwaUVuZHBvaW50LnBvc3QoXCJoZWFsdGhcIiwgXCIvYXBpL3QzLWNvbm5lY3QvaGVhbHRoXCIsIHtcbiAgICAgIHBheWxvYWQ6IFJlbGF5Q2xvdWRFbnZpcm9ubWVudEhlYWx0aFJlcXVlc3QsXG4gICAgICBzdWNjZXNzOiBSZWxheUVudmlyb25tZW50SGVhbHRoUmVzcG9uc2UsXG4gICAgICBlcnJvcjogRW52aXJvbm1lbnRIdHRwQ2xvdWRFcnJvcnMsXG4gICAgfSksXG4gIClcbiAgLmFkZChcbiAgICBIdHRwQXBpRW5kcG9pbnQucG9zdChcIm1pbnRDcmVkZW50aWFsXCIsIFwiL2FwaS9jb25uZWN0L21pbnQtY3JlZGVudGlhbFwiLCB7XG4gICAgICBwYXlsb2FkOiBSZWxheUNsb3VkTWludENyZWRlbnRpYWxSZXF1ZXN0LFxuICAgICAgc3VjY2VzczogUmVsYXlFbnZpcm9ubWVudE1pbnRSZXNwb25zZSxcbiAgICAgIGVycm9yOiBFbnZpcm9ubWVudEh0dHBDbG91ZEVycm9ycyxcbiAgICB9KSxcbiAgKVxuICAuYWRkKFxuICAgIEh0dHBBcGlFbmRwb2ludC5wb3N0KFwidDNNaW50Q3JlZGVudGlhbFwiLCBcIi9hcGkvdDMtY29ubmVjdC9taW50LWNyZWRlbnRpYWxcIiwge1xuICAgICAgcGF5bG9hZDogUmVsYXlDbG91ZE1pbnRDcmVkZW50aWFsUmVxdWVzdCxcbiAgICAgIHN1Y2Nlc3M6IFJlbGF5RW52aXJvbm1lbnRNaW50UmVzcG9uc2UsXG4gICAgICBlcnJvcjogRW52aXJvbm1lbnRIdHRwQ2xvdWRFcnJvcnMsXG4gICAgfSksXG4gICkge31cblxuLy8gUGF0aCB0b2tlbnMgYW5kIG9wdGlvbmFsIGJvZHkgc2lnbmF0dXJlcyBhdXRoZW50aWNhdGUgd2ViaG9va3M7IHJlYWQgcmF3IGJ5dGVzIHRvIHZlcmlmeSBzaWduYXR1cmVzLlxuY29uc3QgV2ViaG9va1BhcmFtcyA9IFNjaGVtYS5TdHJ1Y3Qoe1xuICBob29rSWQ6IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbiAgdG9rZW46IFRyaW1tZWROb25FbXB0eVN0cmluZyxcbn0pO1xuY29uc3QgV2ViaG9va0FjY2VwdGVkID0gU2NoZW1hLlN0cnVjdCh7IGRlbGl2ZXJ5SWQ6IFRyaW1tZWROb25FbXB0eVN0cmluZyB9KS5waXBlKFxuICBIdHRwQXBpU2NoZW1hLnN0YXR1cygyMDIpLFxuKTtcbmNvbnN0IHdlYmhvb2tFbmRwb2ludCA9IHtcbiAgcGFyYW1zOiBXZWJob29rUGFyYW1zLFxuICBzdWNjZXNzOiBXZWJob29rQWNjZXB0ZWQsXG59IGFzIGNvbnN0O1xuY29uc3QgV0VCSE9PS19QQVRIID0gXCIvYXBpL2hvb2tzLzpob29rSWQvOnRva2VuXCI7XG5cbmNsYXNzIEVudmlyb25tZW50V2ViaG9va3NIdHRwQXBpIGV4dGVuZHMgSHR0cEFwaUdyb3VwLm1ha2UoXCJ3ZWJob29rc1wiKVxuICAuYWRkKEh0dHBBcGlFbmRwb2ludC5wb3N0KFwid2ViaG9va1Bvc3RcIiwgV0VCSE9PS19QQVRILCB3ZWJob29rRW5kcG9pbnQpKVxuICAuYWRkKEh0dHBBcGlFbmRwb2ludC5wdXQoXCJ3ZWJob29rUHV0XCIsIFdFQkhPT0tfUEFUSCwgd2ViaG9va0VuZHBvaW50KSlcbiAgLmFkZChIdHRwQXBpRW5kcG9pbnQucGF0Y2goXCJ3ZWJob29rUGF0Y2hcIiwgV0VCSE9PS19QQVRILCB3ZWJob29rRW5kcG9pbnQpKVxuICAuYWRkKEh0dHBBcGlFbmRwb2ludC5nZXQoXCJ3ZWJob29rR2V0XCIsIFdFQkhPT0tfUEFUSCwgd2ViaG9va0VuZHBvaW50KSkge31cblxuZXhwb3J0IGNsYXNzIEVudmlyb25tZW50SHR0cEFwaSBleHRlbmRzIEh0dHBBcGkubWFrZShcImVudmlyb25tZW50XCIpXG4gIC5hZGQoRW52aXJvbm1lbnRNZXRhZGF0YUh0dHBBcGkpXG4gIC5hZGQoRW52aXJvbm1lbnRBdXRoSHR0cEFwaSlcbiAgLmFkZChFbnZpcm9ubWVudE1jcE9BdXRoSHR0cEFwaSlcbiAgLmFkZChFbnZpcm9ubWVudE9yY2hlc3RyYXRpb25IdHRwQXBpKVxuICAuYWRkKEVudmlyb25tZW50UHVsbFJlcXVlc3RzSHR0cEFwaSlcbiAgLmFkZChFbnZpcm9ubWVudFByb2plY3RzSHR0cEFwaSlcbiAgLmFkZChFbnZpcm9ubWVudENvbm5lY3RIdHRwQXBpKVxuICAuYWRkKEVudmlyb25tZW50V2ViaG9va3NIdHRwQXBpKSB7fVxuIl0sImZpbGUiOiIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvZW52aXJvbm1lbnRIdHRwLnRzIn0=

//# vitestCache=W3siZmlsZSI6IjEiLCJpZCI6IjEiLCJ1cmwiOiIyIiwiaW1wb3J0cyI6IjMiLCJtYXBwaW5ncyI6ZmFsc2UsImRlcHMiOiI0IiwiZHluYW1pY0RlcHMiOiI1Iiwic3RhdGljTW9ja3MiOm51bGx9LCIvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvcGFja2FnZXMvY29udHJhY3RzL3NyYy9lbnZpcm9ubWVudEh0dHAudHMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvZW52aXJvbm1lbnRIdHRwLnRzIix7InVybHMiOiI2IiwiaWRzIjoiNyJ9LFsiOCIsIjkiLCIxMCIsIjExIiwiMTIiLCIxMyIsIjE0IiwiMTUiLCIxNiIsIjE3IiwiMTgiLCIxOSIsIjIwIiwiMjEiLCIyMiIsIjIzIl0sW10sWyI4IiwiOSIsIjEwIiwiMTEiLCIxMiIsIjEzIiwiMTQiLCIxNSIsIjE2IiwiMTciLCIxOCIsIjE5IiwiMjAiLCIyMSIsIjIyIiwiMjMiXSx7fSwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9ub2RlX21vZHVsZXMvLnBucG0vZWZmZWN0QDQuMC41L25vZGVfbW9kdWxlcy9lZmZlY3QvZGlzdC9Db250ZXh0LmpzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9ub2RlX21vZHVsZXMvLnBucG0vZWZmZWN0QDQuMC41L25vZGVfbW9kdWxlcy9lZmZlY3QvZGlzdC9TY2hlbWEuanMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL25vZGVfbW9kdWxlcy8ucG5wbS9lZmZlY3RANC4wLjUvbm9kZV9tb2R1bGVzL2VmZmVjdC9kaXN0L2h0dHAtYXBpL0h0dHBBcGkuanMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL25vZGVfbW9kdWxlcy8ucG5wbS9lZmZlY3RANC4wLjUvbm9kZV9tb2R1bGVzL2VmZmVjdC9kaXN0L2h0dHAtYXBpL0h0dHBBcGlFbmRwb2ludC5qcyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvbm9kZV9tb2R1bGVzLy5wbnBtL2VmZmVjdEA0LjAuNS9ub2RlX21vZHVsZXMvZWZmZWN0L2Rpc3QvaHR0cC1hcGkvSHR0cEFwaUdyb3VwLmpzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9ub2RlX21vZHVsZXMvLnBucG0vZWZmZWN0QDQuMC41L25vZGVfbW9kdWxlcy9lZmZlY3QvZGlzdC9odHRwLWFwaS9IdHRwQXBpTWlkZGxld2FyZS5qcyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvbm9kZV9tb2R1bGVzLy5wbnBtL2VmZmVjdEA0LjAuNS9ub2RlX21vZHVsZXMvZWZmZWN0L2Rpc3QvaHR0cC1hcGkvSHR0cEFwaVNjaGVtYS5qcyIsIi9AZnMvaG9tZS91YnVudHUvd3QvcHItMjQyNjMvbm9kZV9tb2R1bGVzLy5wbnBtL2VmZmVjdEA0LjAuNS9ub2RlX21vZHVsZXMvZWZmZWN0L2Rpc3QvaHR0cC9IdHRwU2VydmVyUmVzcG9uZGFibGUuanMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL25vZGVfbW9kdWxlcy8ucG5wbS9lZmZlY3RANC4wLjUvbm9kZV9tb2R1bGVzL2VmZmVjdC9kaXN0L2h0dHAvSHR0cFNlcnZlclJlc3BvbnNlLmpzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL2F1dGgudHMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvZW52aXJvbm1lbnQudHMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvYmFzZVNjaGVtYXMudHMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvb3JjaGVzdHJhdGlvblYyLnRzIiwiL0Bmcy9ob21lL3VidW50dS93dC9wci0yNDI2My9wYWNrYWdlcy9jb250cmFjdHMvc3JjL3Byb2plY3QudHMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvcHVsbFJlcXVlc3QudHMiLCIvQGZzL2hvbWUvdWJ1bnR1L3d0L3ByLTI0MjYzL3BhY2thZ2VzL2NvbnRyYWN0cy9zcmMvcmVsYXkudHMiXQ==