@dollhousemcp/mcp-server 2.0.30 → 2.0.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -44,6 +44,9 @@ export function getPermissionHookScriptPath(homeDir = homedir()) {
44
44
  function getPermissionHookRunDir(homeDir = homedir()) {
45
45
  return join(homeDir, '.dollhouse', 'run');
46
46
  }
47
+ export function getPermissionHookDiagnosticsPath(homeDir = homedir()) {
48
+ return join(getPermissionHookRunDir(homeDir), 'permission-hook-diagnostics.jsonl');
49
+ }
47
50
  export function normalizeHookHost(host) {
48
51
  return UnicodeValidator.normalize(host).normalizedContent.trim().toLowerCase();
49
52
  }
@@ -122,6 +125,40 @@ export function supportsManagedHookAssets(host) {
122
125
  export function getPrimaryHookScriptPath(host, homeDir = homedir()) {
123
126
  return getHookWrapperPath(host, homeDir) ?? getPermissionHookScriptPath(homeDir);
124
127
  }
128
+ export async function readLastPermissionHookDiagnostic(homeDir = homedir()) {
129
+ const diagnosticsPath = getPermissionHookDiagnosticsPath(homeDir);
130
+ try {
131
+ const raw = await readFile(diagnosticsPath, 'utf-8');
132
+ const lines = raw
133
+ .split('\n')
134
+ .map((line) => line.trim())
135
+ .filter((line) => line.length > 0);
136
+ const lastLine = lines.at(-1);
137
+ if (!lastLine) {
138
+ return null;
139
+ }
140
+ let parsed;
141
+ try {
142
+ parsed = JSON.parse(lastLine);
143
+ }
144
+ catch (error) {
145
+ logger.warn(`[PermissionHooks] Failed to parse hook diagnostics JSON from ${diagnosticsPath}: ${error instanceof Error ? error.message : String(error)}`);
146
+ return null;
147
+ }
148
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
149
+ logger.warn(`[PermissionHooks] Ignoring malformed hook diagnostics entry from ${diagnosticsPath}: expected JSON object.`);
150
+ return null;
151
+ }
152
+ return parsed;
153
+ }
154
+ catch (error) {
155
+ if (isMissingFileError(error)) {
156
+ return null;
157
+ }
158
+ logger.warn(`[PermissionHooks] Failed to read hook diagnostics from ${diagnosticsPath}: ${error instanceof Error ? error.message : String(error)}`);
159
+ return null;
160
+ }
161
+ }
125
162
  export function getManagedHookAssets(host, homeDir = homedir(), sourceScriptPath) {
126
163
  const normalized = normalizeHookHost(host);
127
164
  const hooksDir = dirname(getPermissionHookScriptPath(homeDir));
@@ -385,4 +422,4 @@ export async function installHookAssetsForHost(client, homeDir, sourceScriptPath
385
422
  await copyHookAsset(wrapperSourcePath, wrapperTargetPath);
386
423
  return { scriptPath: wrapperTargetPath };
387
424
  }
388
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbkhvb2tTaGFyZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcGVybWlzc2lvbkhvb2tTaGFyZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBOEZyQyxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRztJQUM1QyxRQUFRLEVBQUUsc0JBQXNCO0lBQ2hDLFFBQVEsRUFBRSxzQkFBc0I7SUFDaEMsVUFBVSxFQUFFLHdCQUF3QjtJQUNwQyxZQUFZLEVBQUUsc0JBQXNCO0lBQ3BDLE9BQU8sRUFBRSxxQkFBcUI7Q0FDdEIsQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQXVELENBQUM7QUFFcEksTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxhQUFhLEVBQUUsR0FBRyxrQkFBa0IsQ0FBVSxDQUFDO0FBRTFGLFNBQVMsa0JBQWtCO0lBQ3pCLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsS0FBYztJQUMvQyxPQUFPLE9BQU8sQ0FDWixLQUFLO1dBQ0YsT0FBTyxLQUFLLEtBQUssUUFBUTtXQUN6QixNQUFNLElBQUksS0FBSztXQUNkLEtBQTJCLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FDbEQsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLEdBQVc7SUFDdEMsS0FBSyxNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQUUsU0FBUztRQUNoRixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdkMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ3JELElBQUksTUFBTSxJQUFJLENBQUM7Z0JBQUUsT0FBTyxNQUFNLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsT0FBTyxHQUFHLE9BQU8sRUFBRTtJQUM3RCxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxTQUFTLHVCQUF1QixDQUFDLE9BQU8sR0FBRyxPQUFPLEVBQUU7SUFDbEQsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLElBQVk7SUFDNUMsT0FBTyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakYsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsS0FBYTtJQUN6QyxPQUFPLEtBQUssQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsT0FBZSxFQUFFLElBQVk7SUFDdEUsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsMkJBQTJCLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDbEYsSUFBSSxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUM5QyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBQ0QsSUFBSSxVQUFVLEtBQUssYUFBYSxFQUFFLENBQUM7UUFDakMsT0FBTyxnQkFBZ0IsQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFDRCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQzlCLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsT0FBZTtJQUNwRCxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBUyxDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoRCxJQUFJLENBQUM7UUFDSCxLQUFLLE1BQU0sS0FBSyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3hDLElBQUksb0JBQW9CLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDdkMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1Asa0RBQWtEO0lBQ3BELENBQUM7SUFDRCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSwyQkFBMkIsQ0FBQyxPQUFlO0lBQy9ELE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxDQUFTLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sTUFBTSxHQUFHLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELElBQUksQ0FBQztRQUNILEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMxQyxJQUFJLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLGtEQUFrRDtJQUNwRCxDQUFDO0lBQ0QsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVELE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxXQUE2QjtJQUNuRSxJQUFJLFFBQVEsR0FBeUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDMUQsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNyQyxNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1QyxJQUFJLE1BQU0sQ0FBQyxTQUFTO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDLGNBQWM7WUFBRSxRQUFRLEdBQUcsTUFBTSxDQUFDO0lBQzNFLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLElBQVk7SUFDakQsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsT0FBTyw4QkFBOEIsQ0FBQyxjQUE2RCxDQUFDLElBQUksSUFBSSxDQUFDO0FBQy9HLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsSUFBWSxFQUFFLE9BQU8sR0FBRyxPQUFPLEVBQUU7SUFDbEUsTUFBTSxRQUFRLEdBQUcsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUMsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzFFLENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsSUFBWTtJQUM1QyxNQUFNLElBQUksR0FBRyxrQkFBa0IsRUFBRSxDQUFDO0lBQ2xDLE1BQU0sUUFBUSxHQUFHLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlDLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUseUJBQXlCLENBQUMsQ0FBQztBQUN2RyxDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUFDLElBQVk7SUFDcEQsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsT0FBTyxVQUFVLEtBQUssYUFBYSxJQUFJLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksQ0FBQztBQUNyRixDQUFDO0FBRUQsTUFBTSxVQUFVLHdCQUF3QixDQUFDLElBQVksRUFBRSxPQUFPLEdBQUcsT0FBTyxFQUFFO0lBQ3hFLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25GLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLElBQVksRUFDWixPQUFPLEdBQUcsT0FBTyxFQUFFLEVBQ25CLGdCQUF5QjtJQUV6QixNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMvRCxNQUFNLE1BQU0sR0FBMEI7UUFDcEM7WUFDRSxJQUFJLEVBQUUsUUFBUTtZQUNkLFVBQVUsRUFBRSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxTQUFTLEVBQUUseUJBQXlCLENBQUM7WUFDaEcsVUFBVSxFQUFFLDJCQUEyQixDQUFDLE9BQU8sQ0FBQztTQUNqRDtRQUNEO1lBQ0UsSUFBSSxFQUFFLGFBQWE7WUFDbkIsVUFBVSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLFNBQVMsRUFBRSw4QkFBOEIsQ0FBQztZQUNqRixVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSw4QkFBOEIsQ0FBQztTQUMzRDtRQUNEO1lBQ0UsSUFBSSxFQUFFLGVBQWU7WUFDckIsVUFBVSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLFNBQVMsRUFBRSwyQkFBMkIsQ0FBQztZQUM5RSxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSwyQkFBMkIsQ0FBQztTQUN4RDtLQUNGLENBQUM7SUFFRixNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNsRSxJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNWLElBQUksRUFBRSxTQUFTO1lBQ2YsVUFBVSxFQUFFLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztZQUN6QyxVQUFVLEVBQUUsaUJBQWlCO1NBQzlCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsS0FBSyxVQUFVLG9CQUFvQixDQUFDLFFBQWdCO0lBQ2xELElBQUksQ0FBQztRQUNILE9BQU8sTUFBTSxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzlCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxNQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlLENBQ25DLElBQVksRUFDWixPQUFPLEdBQUcsT0FBTyxFQUFFLEVBQ25CLGdCQUF5QjtJQUV6QixNQUFNLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDckUsTUFBTSxXQUFXLEdBQTBCLEVBQUUsQ0FBQztJQUM5QyxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFFMUIsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUMzQixNQUFNLFNBQVMsR0FBRyxNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVELE1BQU0sU0FBUyxHQUFHLE1BQU0sb0JBQW9CLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9ELElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzVCLGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDdkIsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QixTQUFTO1FBQ1gsQ0FBQztRQUNELElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzVCLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsY0FBYztRQUNkLGFBQWEsRUFBRSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUM7UUFDdkMsV0FBVztLQUNaLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLDJCQUEyQixDQUFDLE9BQU8sR0FBRyxPQUFPLEVBQUUsRUFBRSxJQUFhO0lBQzVFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxFQUFFLGtCQUFrQixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbEcsQ0FBQztBQUVELE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxPQUFPLEdBQUcsT0FBTyxFQUFFO0lBQzNELE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUVELE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxPQUFPLEdBQUcsT0FBTyxFQUFFO0lBQzNELE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLDRCQUE0QixDQUFDLENBQUM7QUFDMUUsQ0FBQztBQUVELE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxPQUFPLEdBQUcsT0FBTyxFQUFFO0lBQzNELE1BQU0sZUFBZSxHQUFHLFFBQVEsRUFBRSxDQUFDO0lBQ25DLElBQUksZUFBZSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBQ0QsSUFBSSxlQUFlLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDaEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDM0UsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUFDLE9BQU8sR0FBRyxPQUFPLEVBQUU7SUFDM0QsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUNuRCxDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUFDLE9BQU8sR0FBRyxPQUFPLEVBQUU7SUFDM0QsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRUQsTUFBTSxVQUFVLDJCQUEyQixDQUFDLE9BQU8sR0FBRyxPQUFPLEVBQUU7SUFDN0QsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxPQUFPLEdBQUcsT0FBTyxFQUFFO0lBQzFELE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxPQUFPLEdBQUcsT0FBTyxFQUFFO0lBQ3BELE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsR0FBeUI7SUFDdkQsSUFDRSxPQUFPLEdBQUcsQ0FBQyxJQUFJLEtBQUssUUFBUTtRQUM1QixPQUFPLEdBQUcsQ0FBQyxVQUFVLEtBQUssUUFBUSxFQUNsQyxDQUFDO1FBQ0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4RSxNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBRyxDQUFDLGVBQWUsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDM0csTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLENBQUMsY0FBYyxJQUFJLEdBQUcsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDO0lBQ3JGLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsSUFBSSxXQUFXLElBQUksYUFBYSxJQUFJLG9CQUFvQixDQUFDO0lBRXBHLE9BQU87UUFDTCxTQUFTLEVBQUUsVUFBVTtRQUNyQixVQUFVO1FBQ1YsY0FBYztRQUNkLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtRQUNkLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVTtRQUMxQixZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVk7UUFDOUIsZUFBZSxFQUFFLEdBQUcsQ0FBQyxlQUFlO0tBQ3JDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxVQUFrQjtJQUMxQyxJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLE9BQU8sc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQXlCLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsK0NBQStDLFVBQVUsS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdGLENBQUM7UUFDRCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQzlCLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQStCO0lBQ2hFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDaEMsSUFBSSxDQUFDLFVBQVUsSUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQy9FLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxLQUFrQyxDQUFDO0FBQ25ELENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLE1BQStCLEVBQy9CLFNBQWlCLEVBQ2pCLE9BQWUsRUFDZixPQUFlLEVBQ2Ysa0JBQTJDLEVBQUU7SUFFN0MsTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0MsTUFBTSxlQUFlLEdBQW1DLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pGLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFvQyxFQUFFLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUM7UUFDdkgsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNQLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxlQUFlLENBQUM7SUFFdkMsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ25ELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBdUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQy9GLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxFQUFFLE9BQU8sS0FBSyxPQUFPLENBQUMsQ0FBQztJQUNyRixDQUFDLENBQUMsQ0FBQztJQUNILElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQW9DLEVBQUUsQ0FDckYsQ0FBQyxLQUFLLEVBQUUsT0FBTyxLQUFLLE9BQU8sSUFBSSxLQUFLLEVBQUUsT0FBTyxLQUFLLFNBQVMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUM1RixDQUFDO0lBRUYsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUNsQixNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsS0FBdUMsQ0FBQztRQUNwRSxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ1QsSUFBSSxFQUFFLFNBQVM7WUFDZixPQUFPO1lBQ1AsR0FBRyxlQUFlO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUM7U0FBTSxDQUFDO1FBQ04sZUFBZSxDQUFDLElBQUksQ0FBQztZQUNuQixPQUFPO1lBQ1AsS0FBSyxFQUFFO2dCQUNMO29CQUNFLElBQUksRUFBRSxTQUFTO29CQUNmLE9BQU87b0JBQ1AsR0FBRyxlQUFlO2lCQUNuQjthQUNGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ25DLENBQUM7QUFFRCxLQUFLLFVBQVUsYUFBYSxDQUFDLFVBQWtCLEVBQUUsVUFBa0I7SUFDakUsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFdEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxRQUFRLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRXRELElBQUksU0FBNkIsQ0FBQztJQUNsQyxJQUFJLENBQUM7UUFDSCxTQUFTLEdBQUcsTUFBTSxRQUFRLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFHLFNBQVMsS0FBSyxTQUFTLElBQUksU0FBUyxLQUFLLFNBQVMsQ0FBQztJQUVuRSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ1osTUFBTSxRQUFRLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELE1BQU0sS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQixPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxRQUFnQixFQUFFLFFBQWdCO0lBQ3ZFLElBQUksQ0FBQztRQUNILE9BQU8sTUFBTSxRQUFRLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzlCLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxNQUFNLEtBQUssQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxRQUFnQixFQUFFLEdBQVc7SUFDdEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxHQUFHLFFBQVEsZ0JBQWdCLENBQUM7SUFDL0MsTUFBTSxTQUFTLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxQyxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlLENBQ25DLE9BQWUsRUFDZixNQUE0QjtJQUU1QixNQUFNLFVBQVUsR0FBRywyQkFBMkIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sU0FBUyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdFLE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLHdCQUF3QixDQUM1QyxNQUFjLEVBQ2QsT0FBZSxFQUNmLGdCQUF5QjtJQUV6QixNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQy9ELE1BQU0sZ0JBQWdCLEdBQUcsMkJBQTJCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUQsTUFBTSxnQkFBZ0IsR0FBRyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxTQUFTLEVBQUUseUJBQXlCLENBQUMsQ0FBQztJQUM5RyxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLFNBQVMsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO0lBQ25HLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsU0FBUyxFQUFFLDJCQUEyQixDQUFDLENBQUM7SUFDbEcsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLDJCQUEyQixDQUFDLENBQUM7SUFFM0UsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDOUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0RBQW9ELGdCQUFnQixLQUFLLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUN6RyxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUNELE1BQU0sYUFBYSxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFFeEQsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDdEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsdURBQXVELGdCQUFnQixLQUFLLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUNoSCxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUNELE1BQU0sYUFBYSxDQUFDLG9CQUFvQixFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFFaEUsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUMxRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLCtDQUErQyxnQkFBZ0IsS0FBSyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7UUFDMUcsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFDRCxNQUFNLGFBQWEsQ0FBQyxzQkFBc0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0lBRXBFLE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRCxNQUFNLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDOUQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMscURBQXFELGdCQUFnQixLQUFLLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUMzRyxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUNELE1BQU0sYUFBYSxDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDO0FBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMsIHJlYWRkaXJTeW5jLCBzdGF0U3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgYWNjZXNzLCBjaG1vZCwgY29weUZpbGUsIG1rZGlyLCByZWFkRmlsZSwgcmVhZGRpciwgd3JpdGVGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBob21lZGlyLCBwbGF0Zm9ybSB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvbkhvb2tNYXJrZXIge1xuICBob3N0OiBzdHJpbmc7XG4gIHNjcmlwdFBhdGg6IHN0cmluZztcbiAgc2V0dGluZ3NQYXRoPzogc3RyaW5nO1xuICBhZGRpdGlvbmFsUGF0aHM/OiBzdHJpbmdbXTtcbiAgY29uZmlndXJlZD86IGJvb2xlYW47XG4gIGFzc2V0c1ByZXBhcmVkPzogYm9vbGVhbjtcbiAgaW5zdGFsbGVkQXQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQZXJtaXNzaW9uSG9va1N0YXR1cyB7XG4gIGluc3RhbGxlZDogYm9vbGVhbjtcbiAgY29uZmlndXJlZD86IGJvb2xlYW47XG4gIGFzc2V0c1ByZXBhcmVkPzogYm9vbGVhbjtcbiAgYXNzZXRzQ3VycmVudD86IGJvb2xlYW47XG4gIGF1dG9SZXBhaXJlZD86IGJvb2xlYW47XG4gIG5lZWRzUmVwYWlyPzogYm9vbGVhbjtcbiAgcmVwYWlyRXJyb3I/OiBzdHJpbmc7XG4gIGhvc3Q/OiBzdHJpbmc7XG4gIHNjcmlwdFBhdGg/OiBzdHJpbmc7XG4gIHNldHRpbmdzUGF0aD86IHN0cmluZztcbiAgYWRkaXRpb25hbFBhdGhzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFsbFBlcm1pc3Npb25Ib29rUmVzdWx0IHtcbiAgc3VwcG9ydGVkOiBib29sZWFuO1xuICBpbnN0YWxsZWQ6IGJvb2xlYW47XG4gIGNvbmZpZ3VyZWQ6IGJvb2xlYW47XG4gIGFzc2V0c1ByZXBhcmVkPzogYm9vbGVhbjtcbiAgaG9zdDogc3RyaW5nO1xuICBzY3JpcHRQYXRoPzogc3RyaW5nO1xuICBzZXR0aW5nc1BhdGg/OiBzdHJpbmc7XG4gIGFkZGl0aW9uYWxQYXRocz86IHN0cmluZ1tdO1xuICBtYXJrZXJQYXRoPzogc3RyaW5nO1xuICBiYWNrdXBQYXRoPzogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFsbFBlcm1pc3Npb25Ib29rT3B0aW9ucyB7XG4gIGhvbWVEaXI/OiBzdHJpbmc7XG4gIHNvdXJjZVNjcmlwdFBhdGg/OiBzdHJpbmc7XG4gIG5vdz86IERhdGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb25jaWxlUGVybWlzc2lvbkhvb2tPcHRpb25zIHtcbiAgaG9tZURpcj86IHN0cmluZztcbiAgc291cmNlU2NyaXB0UGF0aD86IHN0cmluZztcbiAgYXV0b1JlcGFpcj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvbkhvb2tBdWRpdFN1bW1hcnkge1xuICBpbnN0YWxsZWRIb3N0czogc3RyaW5nW107XG4gIGN1cnJlbnRIb3N0czogc3RyaW5nW107XG4gIHJlcGFpcmVkSG9zdHM6IHN0cmluZ1tdO1xuICBuZWVkc1JlcGFpckhvc3RzOiBzdHJpbmdbXTtcbiAgbGFzdFN0YXJ0dXBSZXBhaXI6IFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBlcm1pc3Npb25Ib29rSGVhbHRoU3VtbWFyeSB7XG4gIHN0YXR1czogJ29rJyB8ICd3YXJuaW5nJyB8ICdlcnJvcic7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgcmVwYWlyZWRDb3VudDogbnVtYmVyO1xuICBuZWVkc1JlcGFpckNvdW50OiBudW1iZXI7XG4gIGxhc3RDaGVja2VkQXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlySG9zdFJlc3VsdCBleHRlbmRzIFBlcm1pc3Npb25Ib29rU3RhdHVzIHtcbiAgaG9zdDogc3RyaW5nO1xuICBvdXRjb21lOiAnY3VycmVudCcgfCAncmVwYWlyZWQnIHwgJ25lZWRzX3JlcGFpcicgfCAnbm90X2luc3RhbGxlZCcgfCAnZXJyb3InO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkge1xuICBzdGFydGVkQXQ6IHN0cmluZztcbiAgY29tcGxldGVkQXQ6IHN0cmluZztcbiAgZHVyYXRpb25NczogbnVtYmVyO1xuICByZXBhaXJlZENvdW50OiBudW1iZXI7XG4gIG5lZWRzUmVwYWlyQ291bnQ6IG51bWJlcjtcbiAgaG9zdFJlc3VsdHM6IFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpckhvc3RSZXN1bHRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIb29rQXNzZXREZXNjcmlwdG9yIHtcbiAga2luZDogJ2JyaWRnZScgfCAncG9ydC1oZWxwZXInIHwgJ2NvbmZpZy1oZWxwZXInIHwgJ3dyYXBwZXInO1xuICBzb3VyY2VQYXRoOiBzdHJpbmc7XG4gIHRhcmdldFBhdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIb29rQXNzZXRBdWRpdFJlc3VsdCB7XG4gIGFzc2V0c1ByZXBhcmVkOiBib29sZWFuO1xuICBhc3NldHNDdXJyZW50OiBib29sZWFuO1xuICBzdGFsZUFzc2V0czogSG9va0Fzc2V0RGVzY3JpcHRvcltdO1xufVxuXG5leHBvcnQgY29uc3QgTUFOQUdFRF9IT09LX1dSQVBQRVJfQkFTRU5BTUVTID0ge1xuICAndnNjb2RlJzogJ3ByZXRvb2x1c2UtdnNjb2RlLnNoJyxcbiAgJ2N1cnNvcic6ICdwcmV0b29sdXNlLWN1cnNvci5zaCcsXG4gICd3aW5kc3VyZic6ICdwcmV0b29sdXNlLXdpbmRzdXJmLnNoJyxcbiAgJ2dlbWluaS1jbGknOiAncHJldG9vbHVzZS1nZW1pbmkuc2gnLFxuICAnY29kZXgnOiAncHJldG9vbHVzZS1jb2RleC5zaCcsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgV1JBUFBFUl9IT09LX0hPU1RTID0gT2JqZWN0LmtleXMoTUFOQUdFRF9IT09LX1dSQVBQRVJfQkFTRU5BTUVTKSBhcyBBcnJheTxrZXlvZiB0eXBlb2YgTUFOQUdFRF9IT09LX1dSQVBQRVJfQkFTRU5BTUVTPjtcblxuZXhwb3J0IGNvbnN0IEFVVE9fUkVQQUlSQUJMRV9IT09LX0hPU1RTID0gWydjbGF1ZGUtY29kZScsIC4uLldSQVBQRVJfSE9PS19IT1NUU10gYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIHJlcG9Sb290RnJvbU1vZHVsZSgpOiBzdHJpbmcge1xuICBjb25zdCBjdXJyZW50RmlsZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKTtcbiAgcmV0dXJuIGRpcm5hbWUoZGlybmFtZShkaXJuYW1lKGN1cnJlbnRGaWxlKSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNaXNzaW5nRmlsZUVycm9yKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIGVycm9yXG4gICAgJiYgdHlwZW9mIGVycm9yID09PSAnb2JqZWN0J1xuICAgICYmICdjb2RlJyBpbiBlcnJvclxuICAgICYmIChlcnJvciBhcyB7IGNvZGU/OiBzdHJpbmcgfSkuY29kZSA9PT0gJ0VOT0VOVCcsXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RJbmRlbnQocmF3OiBzdHJpbmcpOiBudW1iZXIgfCBzdHJpbmcge1xuICBmb3IgKGNvbnN0IGxpbmUgb2YgcmF3LnNwbGl0KCdcXG4nKSkge1xuICAgIGlmIChsaW5lLmxlbmd0aCA9PT0gMCB8fCBsaW5lLnN0YXJ0c1dpdGgoJ3snKSB8fCBsaW5lLnN0YXJ0c1dpdGgoJ30nKSkgY29udGludWU7XG4gICAgaWYgKGxpbmUuc3RhcnRzV2l0aCgnXFx0JykpIHJldHVybiAnXFx0JztcbiAgICBpZiAobGluZS5zdGFydHNXaXRoKCcgJykpIHtcbiAgICAgIGNvbnN0IHNwYWNlcyA9IGxpbmUubGVuZ3RoIC0gbGluZS50cmltU3RhcnQoKS5sZW5ndGg7XG4gICAgICBpZiAoc3BhY2VzID49IDIpIHJldHVybiBzcGFjZXM7XG4gICAgfVxuICB9XG4gIHJldHVybiAyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGVybWlzc2lvbkhvb2tTY3JpcHRQYXRoKGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihob21lRGlyLCAnLmRvbGxob3VzZScsICdob29rcycsICdwcmV0b29sdXNlLWRvbGxob3VzZS5zaCcpO1xufVxuXG5mdW5jdGlvbiBnZXRQZXJtaXNzaW9uSG9va1J1bkRpcihob21lRGlyID0gaG9tZWRpcigpKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4oaG9tZURpciwgJy5kb2xsaG91c2UnLCAncnVuJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVIb29rSG9zdChob3N0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoaG9zdCkubm9ybWFsaXplZENvbnRlbnQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIGlzSG9va01hcmtlckZpbGVuYW1lKGVudHJ5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGVudHJ5LnN0YXJ0c1dpdGgoJ2hvb2staW5zdGFsbGVkLScpICYmIGVudHJ5LmVuZHNXaXRoKCcuanNvbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZEhvc3RTcGVjaWZpY0hvb2tTdGF0dXMoaG9tZURpcjogc3RyaW5nLCBob3N0OiBzdHJpbmcpOiBQZXJtaXNzaW9uSG9va1N0YXR1cyB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVIb29rSG9zdChob3N0KTtcbiAgY29uc3Qgc3RhdHVzID0gcmVhZE1hcmtlclN0YXR1cyhnZXRQZXJtaXNzaW9uSG9va01hcmtlclBhdGgoaG9tZURpciwgbm9ybWFsaXplZCkpO1xuICBpZiAoc3RhdHVzLmluc3RhbGxlZCB8fCBzdGF0dXMuYXNzZXRzUHJlcGFyZWQpIHtcbiAgICByZXR1cm4gc3RhdHVzO1xuICB9XG4gIGlmIChub3JtYWxpemVkID09PSAnY2xhdWRlLWNvZGUnKSB7XG4gICAgcmV0dXJuIHJlYWRNYXJrZXJTdGF0dXMoZ2V0UGVybWlzc2lvbkhvb2tNYXJrZXJQYXRoKGhvbWVEaXIpKTtcbiAgfVxuICByZXR1cm4geyBpbnN0YWxsZWQ6IGZhbHNlIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0SG9va01hcmtlclBhdGhzKGhvbWVEaXI6IHN0cmluZyk6IFNldDxzdHJpbmc+IHtcbiAgY29uc3QgbWFya2VyUGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oW2dldFBlcm1pc3Npb25Ib29rTWFya2VyUGF0aChob21lRGlyKV0pO1xuICBjb25zdCBydW5EaXIgPSBnZXRQZXJtaXNzaW9uSG9va1J1bkRpcihob21lRGlyKTtcbiAgdHJ5IHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlYWRkaXJTeW5jKHJ1bkRpcikpIHtcbiAgICAgIGlmIChpc0hvb2tNYXJrZXJGaWxlbmFtZShlbnRyeSkpIHtcbiAgICAgICAgbWFya2VyUGF0aHMuYWRkKGpvaW4ocnVuRGlyLCBlbnRyeSkpO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gTm8gcnVuIGRpciB5ZXQg4oCUIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0IGZhbHNlLlxuICB9XG4gIHJldHVybiBtYXJrZXJQYXRocztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvbGxlY3RIb29rTWFya2VyUGF0aHNBc3luYyhob21lRGlyOiBzdHJpbmcpOiBQcm9taXNlPFNldDxzdHJpbmc+PiB7XG4gIGNvbnN0IG1hcmtlclBhdGhzID0gbmV3IFNldDxzdHJpbmc+KFtnZXRQZXJtaXNzaW9uSG9va01hcmtlclBhdGgoaG9tZURpcildKTtcbiAgY29uc3QgcnVuRGlyID0gZ2V0UGVybWlzc2lvbkhvb2tSdW5EaXIoaG9tZURpcik7XG4gIHRyeSB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBhd2FpdCByZWFkZGlyKHJ1bkRpcikpIHtcbiAgICAgIGlmIChpc0hvb2tNYXJrZXJGaWxlbmFtZShlbnRyeSkpIHtcbiAgICAgICAgbWFya2VyUGF0aHMuYWRkKGpvaW4ocnVuRGlyLCBlbnRyeSkpO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gTm8gcnVuIGRpciB5ZXQg4oCUIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0IGZhbHNlLlxuICB9XG4gIHJldHVybiBtYXJrZXJQYXRocztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1bW1hcml6ZU1hcmtlclN0YXR1c2VzKG1hcmtlclBhdGhzOiBJdGVyYWJsZTxzdHJpbmc+KTogUGVybWlzc2lvbkhvb2tTdGF0dXMge1xuICBsZXQgZmFsbGJhY2s6IFBlcm1pc3Npb25Ib29rU3RhdHVzID0geyBpbnN0YWxsZWQ6IGZhbHNlIH07XG4gIGZvciAoY29uc3QgbWFya2VyUGF0aCBvZiBtYXJrZXJQYXRocykge1xuICAgIGNvbnN0IHN0YXR1cyA9IHJlYWRNYXJrZXJTdGF0dXMobWFya2VyUGF0aCk7XG4gICAgaWYgKHN0YXR1cy5pbnN0YWxsZWQpIHJldHVybiBzdGF0dXM7XG4gICAgaWYgKCFmYWxsYmFjay5hc3NldHNQcmVwYXJlZCAmJiBzdGF0dXMuYXNzZXRzUHJlcGFyZWQpIGZhbGxiYWNrID0gc3RhdHVzO1xuICB9XG4gIHJldHVybiBmYWxsYmFjaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhvb2tXcmFwcGVyQmFzZW5hbWUoaG9zdDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRIb3N0ID0gbm9ybWFsaXplSG9va0hvc3QoaG9zdCk7XG4gIHJldHVybiBNQU5BR0VEX0hPT0tfV1JBUFBFUl9CQVNFTkFNRVNbbm9ybWFsaXplZEhvc3QgYXMga2V5b2YgdHlwZW9mIE1BTkFHRURfSE9PS19XUkFQUEVSX0JBU0VOQU1FU10gPz8gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhvb2tXcmFwcGVyUGF0aChob3N0OiBzdHJpbmcsIGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBnZXRIb29rV3JhcHBlckJhc2VuYW1lKGhvc3QpO1xuICByZXR1cm4gYmFzZW5hbWUgPyBqb2luKGhvbWVEaXIsICcuZG9sbGhvdXNlJywgJ2hvb2tzJywgYmFzZW5hbWUpIDogbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhvb2tTb3VyY2VQYXRoKGhvc3Q6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHJvb3QgPSByZXBvUm9vdEZyb21Nb2R1bGUoKTtcbiAgY29uc3QgYmFzZW5hbWUgPSBnZXRIb29rV3JhcHBlckJhc2VuYW1lKGhvc3QpO1xuICByZXR1cm4gYmFzZW5hbWUgPyBqb2luKHJvb3QsICdzY3JpcHRzJywgYmFzZW5hbWUpIDogam9pbihyb290LCAnc2NyaXB0cycsICdwcmV0b29sdXNlLWRvbGxob3VzZS5zaCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNNYW5hZ2VkSG9va0Fzc2V0cyhob3N0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZUhvb2tIb3N0KGhvc3QpO1xuICByZXR1cm4gbm9ybWFsaXplZCA9PT0gJ2NsYXVkZS1jb2RlJyB8fCBnZXRIb29rV3JhcHBlckJhc2VuYW1lKG5vcm1hbGl6ZWQpICE9PSBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJpbWFyeUhvb2tTY3JpcHRQYXRoKGhvc3Q6IHN0cmluZywgaG9tZURpciA9IGhvbWVkaXIoKSk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRIb29rV3JhcHBlclBhdGgoaG9zdCwgaG9tZURpcikgPz8gZ2V0UGVybWlzc2lvbkhvb2tTY3JpcHRQYXRoKGhvbWVEaXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFuYWdlZEhvb2tBc3NldHMoXG4gIGhvc3Q6IHN0cmluZyxcbiAgaG9tZURpciA9IGhvbWVkaXIoKSxcbiAgc291cmNlU2NyaXB0UGF0aD86IHN0cmluZyxcbik6IEhvb2tBc3NldERlc2NyaXB0b3JbXSB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVIb29rSG9zdChob3N0KTtcbiAgY29uc3QgaG9va3NEaXIgPSBkaXJuYW1lKGdldFBlcm1pc3Npb25Ib29rU2NyaXB0UGF0aChob21lRGlyKSk7XG4gIGNvbnN0IGFzc2V0czogSG9va0Fzc2V0RGVzY3JpcHRvcltdID0gW1xuICAgIHtcbiAgICAgIGtpbmQ6ICdicmlkZ2UnLFxuICAgICAgc291cmNlUGF0aDogc291cmNlU2NyaXB0UGF0aCA/PyBqb2luKHJlcG9Sb290RnJvbU1vZHVsZSgpLCAnc2NyaXB0cycsICdwcmV0b29sdXNlLWRvbGxob3VzZS5zaCcpLFxuICAgICAgdGFyZ2V0UGF0aDogZ2V0UGVybWlzc2lvbkhvb2tTY3JpcHRQYXRoKGhvbWVEaXIpLFxuICAgIH0sXG4gICAge1xuICAgICAga2luZDogJ3BvcnQtaGVscGVyJyxcbiAgICAgIHNvdXJjZVBhdGg6IGpvaW4ocmVwb1Jvb3RGcm9tTW9kdWxlKCksICdzY3JpcHRzJywgJ3Blcm1pc3Npb24tcG9ydC1kaXNjb3Zlcnkuc2gnKSxcbiAgICAgIHRhcmdldFBhdGg6IGpvaW4oaG9va3NEaXIsICdwZXJtaXNzaW9uLXBvcnQtZGlzY292ZXJ5LnNoJyksXG4gICAgfSxcbiAgICB7XG4gICAgICBraW5kOiAnY29uZmlnLWhlbHBlcicsXG4gICAgICBzb3VyY2VQYXRoOiBqb2luKHJlcG9Sb290RnJvbU1vZHVsZSgpLCAnc2NyaXB0cycsICdwZXJtaXNzaW9uLWhvb2stY29uZmlnLnNoJyksXG4gICAgICB0YXJnZXRQYXRoOiBqb2luKGhvb2tzRGlyLCAncGVybWlzc2lvbi1ob29rLWNvbmZpZy5zaCcpLFxuICAgIH0sXG4gIF07XG5cbiAgY29uc3Qgd3JhcHBlclRhcmdldFBhdGggPSBnZXRIb29rV3JhcHBlclBhdGgobm9ybWFsaXplZCwgaG9tZURpcik7XG4gIGlmICh3cmFwcGVyVGFyZ2V0UGF0aCkge1xuICAgIGFzc2V0cy5wdXNoKHtcbiAgICAgIGtpbmQ6ICd3cmFwcGVyJyxcbiAgICAgIHNvdXJjZVBhdGg6IGdldEhvb2tTb3VyY2VQYXRoKG5vcm1hbGl6ZWQpLFxuICAgICAgdGFyZ2V0UGF0aDogd3JhcHBlclRhcmdldFBhdGgsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gYXNzZXRzO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkT3B0aW9uYWxVdGY4RmlsZShmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcmVhZEZpbGUoZmlsZVBhdGgsICd1dGYtOCcpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChpc01pc3NpbmdGaWxlRXJyb3IoZXJyb3IpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXVkaXRIb29rQXNzZXRzKFxuICBob3N0OiBzdHJpbmcsXG4gIGhvbWVEaXIgPSBob21lZGlyKCksXG4gIHNvdXJjZVNjcmlwdFBhdGg/OiBzdHJpbmcsXG4pOiBQcm9taXNlPEhvb2tBc3NldEF1ZGl0UmVzdWx0PiB7XG4gIGNvbnN0IGFzc2V0cyA9IGdldE1hbmFnZWRIb29rQXNzZXRzKGhvc3QsIGhvbWVEaXIsIHNvdXJjZVNjcmlwdFBhdGgpO1xuICBjb25zdCBzdGFsZUFzc2V0czogSG9va0Fzc2V0RGVzY3JpcHRvcltdID0gW107XG4gIGxldCBhc3NldHNQcmVwYXJlZCA9IHRydWU7XG5cbiAgZm9yIChjb25zdCBhc3NldCBvZiBhc3NldHMpIHtcbiAgICBjb25zdCBzb3VyY2VSYXcgPSBhd2FpdCByZWFkRmlsZShhc3NldC5zb3VyY2VQYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCB0YXJnZXRSYXcgPSBhd2FpdCByZWFkT3B0aW9uYWxVdGY4RmlsZShhc3NldC50YXJnZXRQYXRoKTtcbiAgICBpZiAodGFyZ2V0UmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFzc2V0c1ByZXBhcmVkID0gZmFsc2U7XG4gICAgICBzdGFsZUFzc2V0cy5wdXNoKGFzc2V0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAodGFyZ2V0UmF3ICE9PSBzb3VyY2VSYXcpIHtcbiAgICAgIHN0YWxlQXNzZXRzLnB1c2goYXNzZXQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYXNzZXRzUHJlcGFyZWQsXG4gICAgYXNzZXRzQ3VycmVudDogc3RhbGVBc3NldHMubGVuZ3RoID09PSAwLFxuICAgIHN0YWxlQXNzZXRzLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGVybWlzc2lvbkhvb2tNYXJrZXJQYXRoKGhvbWVEaXIgPSBob21lZGlyKCksIGhvc3Q/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIWhvc3QpIHtcbiAgICByZXR1cm4gam9pbihnZXRQZXJtaXNzaW9uSG9va1J1bkRpcihob21lRGlyKSwgJ2hvb2staW5zdGFsbGVkLmpzb24nKTtcbiAgfVxuICByZXR1cm4gam9pbihnZXRQZXJtaXNzaW9uSG9va1J1bkRpcihob21lRGlyKSwgYGhvb2staW5zdGFsbGVkLSR7bm9ybWFsaXplSG9va0hvc3QoaG9zdCl9Lmpzb25gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsYXVkZUhvb2tTZXR0aW5nc1BhdGgoaG9tZURpciA9IGhvbWVkaXIoKSk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKGhvbWVEaXIsICcuY2xhdWRlJywgJ3NldHRpbmdzLmpzb24nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZzQ29kZUhvb2tTZXR0aW5nc1BhdGgoaG9tZURpciA9IGhvbWVkaXIoKSk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKGhvbWVEaXIsICcuY29waWxvdCcsICdob29rcycsICdkb2xsaG91c2UtcGVybWlzc2lvbnMuanNvbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VnNDb2RlVXNlclNldHRpbmdzUGF0aChob21lRGlyID0gaG9tZWRpcigpKTogc3RyaW5nIHtcbiAgY29uc3QgY3VycmVudFBsYXRmb3JtID0gcGxhdGZvcm0oKTtcbiAgaWYgKGN1cnJlbnRQbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICByZXR1cm4gam9pbihob21lRGlyLCAnTGlicmFyeScsICdBcHBsaWNhdGlvbiBTdXBwb3J0JywgJ0NvZGUnLCAnVXNlcicsICdzZXR0aW5ncy5qc29uJyk7XG4gIH1cbiAgaWYgKGN1cnJlbnRQbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGNvbnN0IGFwcERhdGEgPSBwcm9jZXNzLmVudi5BUFBEQVRBIHx8IGpvaW4oaG9tZURpciwgJ0FwcERhdGEnLCAnUm9hbWluZycpO1xuICAgIHJldHVybiBqb2luKGFwcERhdGEsICdDb2RlJywgJ1VzZXInLCAnc2V0dGluZ3MuanNvbicpO1xuICB9XG4gIHJldHVybiBqb2luKGhvbWVEaXIsICcuY29uZmlnJywgJ0NvZGUnLCAnVXNlcicsICdzZXR0aW5ncy5qc29uJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRHZW1pbmlIb29rU2V0dGluZ3NQYXRoKGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihob21lRGlyLCAnLmdlbWluaScsICdzZXR0aW5ncy5qc29uJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXJzb3JIb29rU2V0dGluZ3NQYXRoKGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihob21lRGlyLCAnLmN1cnNvcicsICdob29rcy5qc29uJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRXaW5kc3VyZkhvb2tTZXR0aW5nc1BhdGgoaG9tZURpciA9IGhvbWVkaXIoKSk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKGhvbWVEaXIsICcuY29kZWl1bScsICd3aW5kc3VyZicsICdob29rcy5qc29uJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2RleEhvb2tTZXR0aW5nc1BhdGgoaG9tZURpciA9IGhvbWVkaXIoKSk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKGhvbWVEaXIsICcuY29kZXgnLCAnaG9va3MuanNvbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29kZXhDb25maWdQYXRoKGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihob21lRGlyLCAnLmNvZGV4JywgJ2NvbmZpZy50b21sJyk7XG59XG5cbmZ1bmN0aW9uIHRvUGVybWlzc2lvbkhvb2tTdGF0dXMocmF3OiBQZXJtaXNzaW9uSG9va01hcmtlcik6IFBlcm1pc3Npb25Ib29rU3RhdHVzIHtcbiAgaWYgKFxuICAgIHR5cGVvZiByYXcuaG9zdCAhPT0gJ3N0cmluZycgfHxcbiAgICB0eXBlb2YgcmF3LnNjcmlwdFBhdGggIT09ICdzdHJpbmcnXG4gICkge1xuICAgIHJldHVybiB7IGluc3RhbGxlZDogZmFsc2UgfTtcbiAgfVxuXG4gIGNvbnN0IHNjcmlwdFJlYWR5ID0gZXhpc3RzU3luYyhyYXcuc2NyaXB0UGF0aCk7XG4gIGNvbnN0IHNldHRpbmdzUmVhZHkgPSAhcmF3LnNldHRpbmdzUGF0aCB8fCBleGlzdHNTeW5jKHJhdy5zZXR0aW5nc1BhdGgpO1xuICBjb25zdCBhZGRpdGlvbmFsUGF0aHNSZWFkeSA9ICFyYXcuYWRkaXRpb25hbFBhdGhzIHx8IHJhdy5hZGRpdGlvbmFsUGF0aHMuZXZlcnkoKHBhdGgpID0+IGV4aXN0c1N5bmMocGF0aCkpO1xuICBjb25zdCBhc3NldHNQcmVwYXJlZCA9IChyYXcuYXNzZXRzUHJlcGFyZWQgPz8gcmF3LmNvbmZpZ3VyZWQgPz8gdHJ1ZSkgJiYgc2NyaXB0UmVhZHk7XG4gIGNvbnN0IGNvbmZpZ3VyZWQgPSAocmF3LmNvbmZpZ3VyZWQgPz8gdHJ1ZSkgJiYgc2NyaXB0UmVhZHkgJiYgc2V0dGluZ3NSZWFkeSAmJiBhZGRpdGlvbmFsUGF0aHNSZWFkeTtcblxuICByZXR1cm4ge1xuICAgIGluc3RhbGxlZDogY29uZmlndXJlZCxcbiAgICBjb25maWd1cmVkLFxuICAgIGFzc2V0c1ByZXBhcmVkLFxuICAgIGhvc3Q6IHJhdy5ob3N0LFxuICAgIHNjcmlwdFBhdGg6IHJhdy5zY3JpcHRQYXRoLFxuICAgIHNldHRpbmdzUGF0aDogcmF3LnNldHRpbmdzUGF0aCxcbiAgICBhZGRpdGlvbmFsUGF0aHM6IHJhdy5hZGRpdGlvbmFsUGF0aHMsXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlYWRNYXJrZXJTdGF0dXMobWFya2VyUGF0aDogc3RyaW5nKTogUGVybWlzc2lvbkhvb2tTdGF0dXMge1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IHJlYWRGaWxlU3luYyhtYXJrZXJQYXRoLCAndXRmLTgnKTtcbiAgICByZXR1cm4gdG9QZXJtaXNzaW9uSG9va1N0YXR1cyhKU09OLnBhcnNlKHJhdykgYXMgUGVybWlzc2lvbkhvb2tNYXJrZXIpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICghaXNNaXNzaW5nRmlsZUVycm9yKGVycm9yKSkge1xuICAgICAgbG9nZ2VyLndhcm4oYFtQZXJtaXNzaW9uc10gRmFpbGVkIHRvIHJlYWQgaG9vayBtYXJrZXIgYXQgJHttYXJrZXJQYXRofTogJHtTdHJpbmcoZXJyb3IpfWApO1xuICAgIH1cbiAgICByZXR1cm4geyBpbnN0YWxsZWQ6IGZhbHNlIH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUhvb2tzUm9vdChwYXJzZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bltdPiB7XG4gIGNvbnN0IGhvb2tzVmFsdWUgPSBwYXJzZWQuaG9va3M7XG4gIGlmICghaG9va3NWYWx1ZSB8fCB0eXBlb2YgaG9va3NWYWx1ZSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShob29rc1ZhbHVlKSkge1xuICAgIHBhcnNlZC5ob29rcyA9IHt9O1xuICB9XG4gIHJldHVybiBwYXJzZWQuaG9va3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bltdPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUNvbW1hbmRIb29rKFxuICBwYXJzZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBldmVudE5hbWU6IHN0cmluZyxcbiAgY29tbWFuZDogc3RyaW5nLFxuICBtYXRjaGVyOiBzdHJpbmcsXG4gIGV4dHJhSG9va0ZpZWxkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSxcbik6IHsgY2hhbmdlZDogYm9vbGVhbjsgcGFyc2VkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9IHtcbiAgY29uc3QgaG9va3NSb290ID0gbm9ybWFsaXplSG9va3NSb290KHBhcnNlZCk7XG4gIGNvbnN0IGV4aXN0aW5nRW50cmllczogQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0gQXJyYXkuaXNBcnJheShob29rc1Jvb3RbZXZlbnROYW1lXSlcbiAgICA/IGhvb2tzUm9vdFtldmVudE5hbWVdLmZpbHRlcigoZW50cnkpOiBlbnRyeSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB0eXBlb2YgZW50cnkgPT09ICdvYmplY3QnICYmIGVudHJ5ICE9PSBudWxsKVxuICAgIDogW107XG4gIGhvb2tzUm9vdFtldmVudE5hbWVdID0gZXhpc3RpbmdFbnRyaWVzO1xuXG4gIGNvbnN0IGNvbW1hbmRFeGlzdHMgPSBleGlzdGluZ0VudHJpZXMuc29tZSgoZW50cnkpID0+IHtcbiAgICBjb25zdCBob29rcyA9IEFycmF5LmlzQXJyYXkoZW50cnk/Lmhvb2tzKSA/IGVudHJ5Lmhvb2tzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA6IFtdO1xuICAgIHJldHVybiBob29rcy5zb21lKChob29rKSA9PiBob29rPy50eXBlID09PSAnY29tbWFuZCcgJiYgaG9vaz8uY29tbWFuZCA9PT0gY29tbWFuZCk7XG4gIH0pO1xuICBpZiAoY29tbWFuZEV4aXN0cykge1xuICAgIHJldHVybiB7IGNoYW5nZWQ6IGZhbHNlLCBwYXJzZWQgfTtcbiAgfVxuXG4gIGNvbnN0IHdpbGRjYXJkRW50cnkgPSBleGlzdGluZ0VudHJpZXMuZmluZCgoZW50cnkpOiBlbnRyeSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PlxuICAgIChlbnRyeT8ubWF0Y2hlciA9PT0gbWF0Y2hlciB8fCBlbnRyeT8ubWF0Y2hlciA9PT0gdW5kZWZpbmVkKSAmJiBBcnJheS5pc0FycmF5KGVudHJ5Py5ob29rcyksXG4gICk7XG5cbiAgaWYgKHdpbGRjYXJkRW50cnkpIHtcbiAgICBjb25zdCBob29rcyA9IHdpbGRjYXJkRW50cnkuaG9va3MgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICAgIGhvb2tzLnB1c2goe1xuICAgICAgdHlwZTogJ2NvbW1hbmQnLFxuICAgICAgY29tbWFuZCxcbiAgICAgIC4uLmV4dHJhSG9va0ZpZWxkcyxcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBleGlzdGluZ0VudHJpZXMucHVzaCh7XG4gICAgICBtYXRjaGVyLFxuICAgICAgaG9va3M6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdjb21tYW5kJyxcbiAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgIC4uLmV4dHJhSG9va0ZpZWxkcyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4geyBjaGFuZ2VkOiB0cnVlLCBwYXJzZWQgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29weUhvb2tBc3NldChzb3VyY2VQYXRoOiBzdHJpbmcsIHRhcmdldFBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBhd2FpdCBta2RpcihkaXJuYW1lKHRhcmdldFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBjb25zdCBzb3VyY2VSYXcgPSBhd2FpdCByZWFkRmlsZShzb3VyY2VQYXRoLCAndXRmLTgnKTtcblxuICBsZXQgdGFyZ2V0UmF3OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgdGFyZ2V0UmF3ID0gYXdhaXQgcmVhZEZpbGUodGFyZ2V0UGF0aCwgJ3V0Zi04Jyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCFpc01pc3NpbmdGaWxlRXJyb3IoZXJyb3IpKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbiAgY29uc3QgY2hhbmdlZCA9IHRhcmdldFJhdyA9PT0gdW5kZWZpbmVkIHx8IHNvdXJjZVJhdyAhPT0gdGFyZ2V0UmF3O1xuXG4gIGlmIChjaGFuZ2VkKSB7XG4gICAgYXdhaXQgY29weUZpbGUoc291cmNlUGF0aCwgdGFyZ2V0UGF0aCk7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgYWNjZXNzKHRhcmdldFBhdGgpO1xuICB9XG5cbiAgYXdhaXQgY2htb2QodGFyZ2V0UGF0aCwgMG83NTUpO1xuICByZXR1cm4gY2hhbmdlZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRPcHRpb25hbFV0ZjgoZmlsZVBhdGg6IHN0cmluZywgZmFsbGJhY2s6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHJlYWRGaWxlKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaXNNaXNzaW5nRmlsZUVycm9yKGVycm9yKSkge1xuICAgICAgcmV0dXJuIGZhbGxiYWNrO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVCYWNrdXBJZlByZXNlbnQoZmlsZVBhdGg6IHN0cmluZywgcmF3OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBpZiAoIWV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGJhY2t1cFBhdGggPSBgJHtmaWxlUGF0aH0uZG9sbGhvdXNlLmJha2A7XG4gIGF3YWl0IHdyaXRlRmlsZShiYWNrdXBQYXRoLCByYXcsICd1dGYtOCcpO1xuICByZXR1cm4gYmFja3VwUGF0aDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlSG9va01hcmtlcihcbiAgaG9tZURpcjogc3RyaW5nLFxuICBtYXJrZXI6IFBlcm1pc3Npb25Ib29rTWFya2VyLFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgbWFya2VyUGF0aCA9IGdldFBlcm1pc3Npb25Ib29rTWFya2VyUGF0aChob21lRGlyLCBtYXJrZXIuaG9zdCk7XG4gIGF3YWl0IG1rZGlyKGRpcm5hbWUobWFya2VyUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCB3cml0ZUZpbGUobWFya2VyUGF0aCwgSlNPTi5zdHJpbmdpZnkobWFya2VyLCBudWxsLCAyKSArICdcXG4nLCAndXRmLTgnKTtcbiAgcmV0dXJuIG1hcmtlclBhdGg7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnN0YWxsSG9va0Fzc2V0c0Zvckhvc3QoXG4gIGNsaWVudDogc3RyaW5nLFxuICBob21lRGlyOiBzdHJpbmcsXG4gIHNvdXJjZVNjcmlwdFBhdGg/OiBzdHJpbmcsXG4pOiBQcm9taXNlPHsgc2NyaXB0UGF0aDogc3RyaW5nIH0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZENsaWVudCA9IG5vcm1hbGl6ZUhvb2tIb3N0KGNsaWVudCk7XG4gIGNvbnN0IGhvb2tzRGlyID0gZGlybmFtZShnZXRQZXJtaXNzaW9uSG9va1NjcmlwdFBhdGgoaG9tZURpcikpO1xuICBjb25zdCBzaGFyZWRUYXJnZXRQYXRoID0gZ2V0UGVybWlzc2lvbkhvb2tTY3JpcHRQYXRoKGhvbWVEaXIpO1xuICBjb25zdCBzaGFyZWRTb3VyY2VQYXRoID0gc291cmNlU2NyaXB0UGF0aCA/PyBqb2luKHJlcG9Sb290RnJvbU1vZHVsZSgpLCAnc2NyaXB0cycsICdwcmV0b29sdXNlLWRvbGxob3VzZS5zaCcpO1xuICBjb25zdCBwb3J0SGVscGVyU291cmNlUGF0aCA9IGpvaW4ocmVwb1Jvb3RGcm9tTW9kdWxlKCksICdzY3JpcHRzJywgJ3Blcm1pc3Npb24tcG9ydC1kaXNjb3Zlcnkuc2gnKTtcbiAgY29uc3QgcG9ydEhlbHBlclRhcmdldFBhdGggPSBqb2luKGhvb2tzRGlyLCAncGVybWlzc2lvbi1wb3J0LWRpc2NvdmVyeS5zaCcpO1xuICBjb25zdCBjb25maWdIZWxwZXJTb3VyY2VQYXRoID0gam9pbihyZXBvUm9vdEZyb21Nb2R1bGUoKSwgJ3NjcmlwdHMnLCAncGVybWlzc2lvbi1ob29rLWNvbmZpZy5zaCcpO1xuICBjb25zdCBjb25maWdIZWxwZXJUYXJnZXRQYXRoID0gam9pbihob29rc0RpciwgJ3Blcm1pc3Npb24taG9vay1jb25maWcuc2gnKTtcblxuICBjb25zdCBzaGFyZWRTdGF0ID0gc3RhdFN5bmMoc2hhcmVkU291cmNlUGF0aCk7XG4gIGlmICghc2hhcmVkU3RhdC5pc0ZpbGUoKSkge1xuICAgIGxvZ2dlci53YXJuKGBbUGVybWlzc2lvbkhvb2tzXSBTaGFyZWQgaG9vayBicmlkZ2UgbWlzc2luZyBmb3IgJHtub3JtYWxpemVkQ2xpZW50fTogJHtzaGFyZWRTb3VyY2VQYXRofWApO1xuICAgIHRocm93IG5ldyBFcnJvcihgUGVybWlzc2lvbiBob29rIHNvdXJjZSBzY3JpcHQgbm90IGZvdW5kOiAke3NoYXJlZFNvdXJjZVBhdGh9YCk7XG4gIH1cbiAgYXdhaXQgY29weUhvb2tBc3NldChzaGFyZWRTb3VyY2VQYXRoLCBzaGFyZWRUYXJnZXRQYXRoKTtcblxuICBjb25zdCBwb3J0SGVscGVyU3RhdCA9IHN0YXRTeW5jKHBvcnRIZWxwZXJTb3VyY2VQYXRoKTtcbiAgaWYgKCFwb3J0SGVscGVyU3RhdC5pc0ZpbGUoKSkge1xuICAgIGxvZ2dlci53YXJuKGBbUGVybWlzc2lvbkhvb2tzXSBQb3J0IGRpc2NvdmVyeSBoZWxwZXIgbWlzc2luZyBmb3IgJHtub3JtYWxpemVkQ2xpZW50fTogJHtwb3J0SGVscGVyU291cmNlUGF0aH1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBlcm1pc3Npb24gaG9vayBoZWxwZXIgc2NyaXB0IG5vdCBmb3VuZDogJHtwb3J0SGVscGVyU291cmNlUGF0aH1gKTtcbiAgfVxuICBhd2FpdCBjb3B5SG9va0Fzc2V0KHBvcnRIZWxwZXJTb3VyY2VQYXRoLCBwb3J0SGVscGVyVGFyZ2V0UGF0aCk7XG5cbiAgY29uc3QgY29uZmlnSGVscGVyU3RhdCA9IHN0YXRTeW5jKGNvbmZpZ0hlbHBlclNvdXJjZVBhdGgpO1xuICBpZiAoIWNvbmZpZ0hlbHBlclN0YXQuaXNGaWxlKCkpIHtcbiAgICBsb2dnZXIud2FybihgW1Blcm1pc3Npb25Ib29rc10gQ29uZmlnIGhlbHBlciBtaXNzaW5nIGZvciAke25vcm1hbGl6ZWRDbGllbnR9OiAke2NvbmZpZ0hlbHBlclNvdXJjZVBhdGh9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQZXJtaXNzaW9uIGhvb2sgY29uZmlnIGhlbHBlciBub3QgZm91bmQ6ICR7Y29uZmlnSGVscGVyU291cmNlUGF0aH1gKTtcbiAgfVxuICBhd2FpdCBjb3B5SG9va0Fzc2V0KGNvbmZpZ0hlbHBlclNvdXJjZVBhdGgsIGNvbmZpZ0hlbHBlclRhcmdldFBhdGgpO1xuXG4gIGNvbnN0IHdyYXBwZXJUYXJnZXRQYXRoID0gZ2V0SG9va1dyYXBwZXJQYXRoKG5vcm1hbGl6ZWRDbGllbnQsIGhvbWVEaXIpO1xuICBpZiAoIXdyYXBwZXJUYXJnZXRQYXRoKSB7XG4gICAgcmV0dXJuIHsgc2NyaXB0UGF0aDogc2hhcmVkVGFyZ2V0UGF0aCB9O1xuICB9XG5cbiAgY29uc3Qgd3JhcHBlclNvdXJjZVBhdGggPSBnZXRIb29rU291cmNlUGF0aChub3JtYWxpemVkQ2xpZW50KTtcbiAgY29uc3Qgd3JhcHBlclN0YXQgPSBzdGF0U3luYyh3cmFwcGVyU291cmNlUGF0aCk7XG4gIGlmICghd3JhcHBlclN0YXQuaXNGaWxlKCkpIHtcbiAgICBsb2dnZXIud2FybihgW1Blcm1pc3Npb25Ib29rc10gV3JhcHBlciBob29rIHNjcmlwdCBtaXNzaW5nIGZvciAke25vcm1hbGl6ZWRDbGllbnR9OiAke3dyYXBwZXJTb3VyY2VQYXRofWApO1xuICAgIHRocm93IG5ldyBFcnJvcihgUGVybWlzc2lvbiBob29rIHdyYXBwZXIgc2NyaXB0IG5vdCBmb3VuZDogJHt3cmFwcGVyU291cmNlUGF0aH1gKTtcbiAgfVxuICBhd2FpdCBjb3B5SG9va0Fzc2V0KHdyYXBwZXJTb3VyY2VQYXRoLCB3cmFwcGVyVGFyZ2V0UGF0aCk7XG4gIHJldHVybiB7IHNjcmlwdFBhdGg6IHdyYXBwZXJUYXJnZXRQYXRoIH07XG59XG4iXX0=
425
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbkhvb2tTaGFyZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcGVybWlzc2lvbkhvb2tTaGFyZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBb0lyQyxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRztJQUM1QyxRQUFRLEVBQUUsc0JBQXNCO0lBQ2hDLFFBQVEsRUFBRSxzQkFBc0I7SUFDaEMsVUFBVSxFQUFFLHdCQUF3QjtJQUNwQyxZQUFZLEVBQUUsc0JBQXNCO0lBQ3BDLE9BQU8sRUFBRSxxQkFBcUI7Q0FDdEIsQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQXVELENBQUM7QUFFcEksTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxhQUFhLEVBQUUsR0FBRyxrQkFBa0IsQ0FBVSxDQUFDO0FBRTFGLFNBQVMsa0JBQWtCO0lBQ3pCLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMs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QUFNLGFBQWEsQ0FBQyxzQkFBc0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0lBRXBFLE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDeEUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRCxNQUFNLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDOUQsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMscURBQXFELGdCQUFnQixLQUFLLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUMzRyxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUNELE1BQU0sYUFBYSxDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxDQUFDO0FBQzNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMsIHJlYWRkaXJTeW5jLCBzdGF0U3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgYWNjZXNzLCBjaG1vZCwgY29weUZpbGUsIG1rZGlyLCByZWFkRmlsZSwgcmVhZGRpciwgd3JpdGVGaWxlIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBob21lZGlyLCBwbGF0Zm9ybSB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvbkhvb2tNYXJrZXIge1xuICBob3N0OiBzdHJpbmc7XG4gIHNjcmlwdFBhdGg6IHN0cmluZztcbiAgc2V0dGluZ3NQYXRoPzogc3RyaW5nO1xuICBhZGRpdGlvbmFsUGF0aHM/OiBzdHJpbmdbXTtcbiAgY29uZmlndXJlZD86IGJvb2xlYW47XG4gIGFzc2V0c1ByZXBhcmVkPzogYm9vbGVhbjtcbiAgaW5zdGFsbGVkQXQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQZXJtaXNzaW9uSG9va1N0YXR1cyB7XG4gIGluc3RhbGxlZDogYm9vbGVhbjtcbiAgY29uZmlndXJlZD86IGJvb2xlYW47XG4gIGFzc2V0c1ByZXBhcmVkPzogYm9vbGVhbjtcbiAgYXNzZXRzQ3VycmVudD86IGJvb2xlYW47XG4gIGF1dG9SZXBhaXJlZD86IGJvb2xlYW47XG4gIG5lZWRzUmVwYWlyPzogYm9vbGVhbjtcbiAgcmVwYWlyRXJyb3I/OiBzdHJpbmc7XG4gIGhvc3Q/OiBzdHJpbmc7XG4gIHNjcmlwdFBhdGg/OiBzdHJpbmc7XG4gIHNldHRpbmdzUGF0aD86IHN0cmluZztcbiAgYWRkaXRpb25hbFBhdGhzPzogc3RyaW5nW107XG59XG5cbi8qKiBMYXRlc3QgSlNPTkwgZGlhZ25vc3RpYyBldmVudCBlbWl0dGVkIGJ5IGEgbG9jYWwgcGVybWlzc2lvbiBob29rIHdyYXBwZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIFBlcm1pc3Npb25Ib29rRGlhZ25vc3RpY1JlY29yZCB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICBpbnZvY2F0aW9uSWQ6IHN0cmluZztcbiAgZXZlbnQ6IHN0cmluZztcbiAgcGxhdGZvcm06IHN0cmluZztcbiAgc3RhZ2U6IHN0cmluZztcbiAgb3V0Y29tZT86IHN0cmluZztcbiAgcmVhc29uPzogc3RyaW5nO1xuICBob29rUGF0aD86IHN0cmluZztcbiAgZGlhZ25vc3RpY3NMb2dQYXRoPzogc3RyaW5nO1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIHRvb2xOYW1lPzogc3RyaW5nO1xuICB0b29sSW5wdXQ/OiBzdHJpbmc7XG4gIHJhd0lucHV0Pzogc3RyaW5nO1xuICBhdXRob3JpdHlIb3N0Pzogc3RyaW5nO1xuICBhdXRob3JpdHlNb2RlPzogc3RyaW5nO1xuICBlbmRwb2ludD86IHN0cmluZztcbiAgcG9ydD86IHN0cmluZztcbiAgcGF5bG9hZD86IHN0cmluZztcbiAgcmVzcG9uc2U/OiBzdHJpbmc7XG4gIG5vcm1hbGl6ZWRSZXNwb25zZT86IHN0cmluZztcbiAgZW1pdHRlZFJlc3BvbnNlPzogc3RyaW5nO1xuICBhdHRlbXB0Pzogc3RyaW5nO1xuICBtYXhSZXRyaWVzPzogc3RyaW5nO1xuICB0aW1lb3V0U2Vjb25kcz86IHN0cmluZztcbiAgY3VybEV4aXQ/OiBzdHJpbmc7XG4gIHJhd0lucHV0TGVuZ3RoPzogbnVtYmVyO1xuICBub3JtYWxpemVkUmVzcG9uc2VMZW5ndGg/OiBudW1iZXI7XG4gIGVtaXR0ZWRSZXNwb25zZUxlbmd0aD86IG51bWJlcjtcbiAgcmVzcG9uc2VMZW5ndGg/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFsbFBlcm1pc3Npb25Ib29rUmVzdWx0IHtcbiAgc3VwcG9ydGVkOiBib29sZWFuO1xuICBpbnN0YWxsZWQ6IGJvb2xlYW47XG4gIGNvbmZpZ3VyZWQ6IGJvb2xlYW47XG4gIGFzc2V0c1ByZXBhcmVkPzogYm9vbGVhbjtcbiAgaG9zdDogc3RyaW5nO1xuICBzY3JpcHRQYXRoPzogc3RyaW5nO1xuICBzZXR0aW5nc1BhdGg/OiBzdHJpbmc7XG4gIGFkZGl0aW9uYWxQYXRocz86IHN0cmluZ1tdO1xuICBtYXJrZXJQYXRoPzogc3RyaW5nO1xuICBiYWNrdXBQYXRoPzogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5zdGFsbFBlcm1pc3Npb25Ib29rT3B0aW9ucyB7XG4gIGhvbWVEaXI/OiBzdHJpbmc7XG4gIHNvdXJjZVNjcmlwdFBhdGg/OiBzdHJpbmc7XG4gIG5vdz86IERhdGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb25jaWxlUGVybWlzc2lvbkhvb2tPcHRpb25zIHtcbiAgaG9tZURpcj86IHN0cmluZztcbiAgc291cmNlU2NyaXB0UGF0aD86IHN0cmluZztcbiAgYXV0b1JlcGFpcj86IGJvb2xlYW47XG59XG5cbi8qKiBBZ2dyZWdhdGUgaGVhbHRoIGFuZCByZXBhaXIgc3RhdGUgZm9yIGFsbCBtYW5hZ2VkIGxvY2FsIGhvb2sgaG9zdHMuICovXG5leHBvcnQgaW50ZXJmYWNlIFBlcm1pc3Npb25Ib29rQXVkaXRTdW1tYXJ5IHtcbiAgaW5zdGFsbGVkSG9zdHM6IHN0cmluZ1tdO1xuICBjdXJyZW50SG9zdHM6IHN0cmluZ1tdO1xuICByZXBhaXJlZEhvc3RzOiBzdHJpbmdbXTtcbiAgbmVlZHNSZXBhaXJIb3N0czogc3RyaW5nW107XG4gIGRpYWdub3N0aWNzUGF0aDogc3RyaW5nO1xuICBsYXN0RGlhZ25vc3RpYzogUGVybWlzc2lvbkhvb2tEaWFnbm9zdGljUmVjb3JkIHwgbnVsbDtcbiAgbGFzdFN0YXJ0dXBSZXBhaXI6IFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkgfCBudWxsO1xufVxuXG4vKiogQ29uZGVuc2VkIGhlYWx0aCB2aWV3IHN1cmZhY2VkIGluIHNldHVwLCBwZXJtaXNzaW9ucywgYW5kIGJ1aWxkIGluZm8uICovXG5leHBvcnQgaW50ZXJmYWNlIFBlcm1pc3Npb25Ib29rSGVhbHRoU3VtbWFyeSB7XG4gIHN0YXR1czogJ29rJyB8ICd3YXJuaW5nJyB8ICdlcnJvcic7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgcmVwYWlyZWRDb3VudDogbnVtYmVyO1xuICBuZWVkc1JlcGFpckNvdW50OiBudW1iZXI7XG4gIGxhc3RDaGVja2VkQXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlySG9zdFJlc3VsdCBleHRlbmRzIFBlcm1pc3Npb25Ib29rU3RhdHVzIHtcbiAgaG9zdDogc3RyaW5nO1xuICBvdXRjb21lOiAnY3VycmVudCcgfCAncmVwYWlyZWQnIHwgJ25lZWRzX3JlcGFpcicgfCAnbm90X2luc3RhbGxlZCcgfCAnZXJyb3InO1xufVxuXG4vKiogUmVzdWx0IHN1bW1hcnkgZm9yIHRoZSBtb3N0IHJlY2VudCBzdGFydHVwLXRpbWUgaG9vayBhc3NldCByZXBhaXIgcGFzcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlyU3VtbWFyeSB7XG4gIHN0YXJ0ZWRBdDogc3RyaW5nO1xuICBjb21wbGV0ZWRBdDogc3RyaW5nO1xuICBkdXJhdGlvbk1zOiBudW1iZXI7XG4gIHJlcGFpcmVkQ291bnQ6IG51bWJlcjtcbiAgbmVlZHNSZXBhaXJDb3VudDogbnVtYmVyO1xuICBob3N0UmVzdWx0czogUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlySG9zdFJlc3VsdFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhvb2tBc3NldERlc2NyaXB0b3Ige1xuICBraW5kOiAnYnJpZGdlJyB8ICdwb3J0LWhlbHBlcicgfCAnY29uZmlnLWhlbHBlcicgfCAnd3JhcHBlcic7XG4gIHNvdXJjZVBhdGg6IHN0cmluZztcbiAgdGFyZ2V0UGF0aDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhvb2tBc3NldEF1ZGl0UmVzdWx0IHtcbiAgYXNzZXRzUHJlcGFyZWQ6IGJvb2xlYW47XG4gIGFzc2V0c0N1cnJlbnQ6IGJvb2xlYW47XG4gIHN0YWxlQXNzZXRzOiBIb29rQXNzZXREZXNjcmlwdG9yW107XG59XG5cbmV4cG9ydCBjb25zdCBNQU5BR0VEX0hPT0tfV1JBUFBFUl9CQVNFTkFNRVMgPSB7XG4gICd2c2NvZGUnOiAncHJldG9vbHVzZS12c2NvZGUuc2gnLFxuICAnY3Vyc29yJzogJ3ByZXRvb2x1c2UtY3Vyc29yLnNoJyxcbiAgJ3dpbmRzdXJmJzogJ3ByZXRvb2x1c2Utd2luZHN1cmYuc2gnLFxuICAnZ2VtaW5pLWNsaSc6ICdwcmV0b29sdXNlLWdlbWluaS5zaCcsXG4gICdjb2RleCc6ICdwcmV0b29sdXNlLWNvZGV4LnNoJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBXUkFQUEVSX0hPT0tfSE9TVFMgPSBPYmplY3Qua2V5cyhNQU5BR0VEX0hPT0tfV1JBUFBFUl9CQVNFTkFNRVMpIGFzIEFycmF5PGtleW9mIHR5cGVvZiBNQU5BR0VEX0hPT0tfV1JBUFBFUl9CQVNFTkFNRVM+O1xuXG5leHBvcnQgY29uc3QgQVVUT19SRVBBSVJBQkxFX0hPT0tfSE9TVFMgPSBbJ2NsYXVkZS1jb2RlJywgLi4uV1JBUFBFUl9IT09LX0hPU1RTXSBhcyBjb25zdDtcblxuZnVuY3Rpb24gcmVwb1Jvb3RGcm9tTW9kdWxlKCk6IHN0cmluZyB7XG4gIGNvbnN0IGN1cnJlbnRGaWxlID0gZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpO1xuICByZXR1cm4gZGlybmFtZShkaXJuYW1lKGRpcm5hbWUoY3VycmVudEZpbGUpKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01pc3NpbmdGaWxlRXJyb3IoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgZXJyb3JcbiAgICAmJiB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnXG4gICAgJiYgJ2NvZGUnIGluIGVycm9yXG4gICAgJiYgKGVycm9yIGFzIHsgY29kZT86IHN0cmluZyB9KS5jb2RlID09PSAnRU5PRU5UJyxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEluZGVudChyYXc6IHN0cmluZyk6IG51bWJlciB8IHN0cmluZyB7XG4gIGZvciAoY29uc3QgbGluZSBvZiByYXcuc3BsaXQoJ1xcbicpKSB7XG4gICAgaWYgKGxpbmUubGVuZ3RoID09PSAwIHx8IGxpbmUuc3RhcnRzV2l0aCgneycpIHx8IGxpbmUuc3RhcnRzV2l0aCgnfScpKSBjb250aW51ZTtcbiAgICBpZiAobGluZS5zdGFydHNXaXRoKCdcXHQnKSkgcmV0dXJuICdcXHQnO1xuICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoJyAnKSkge1xuICAgICAgY29uc3Qgc3BhY2VzID0gbGluZS5sZW5ndGggLSBsaW5lLnRyaW1TdGFydCgpLmxlbmd0aDtcbiAgICAgIGlmIChzcGFjZXMgPj0gMikgcmV0dXJuIHNwYWNlcztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIDI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQZXJtaXNzaW9uSG9va1NjcmlwdFBhdGgoaG9tZURpciA9IGhvbWVkaXIoKSk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKGhvbWVEaXIsICcuZG9sbGhvdXNlJywgJ2hvb2tzJywgJ3ByZXRvb2x1c2UtZG9sbGhvdXNlLnNoJyk7XG59XG5cbmZ1bmN0aW9uIGdldFBlcm1pc3Npb25Ib29rUnVuRGlyKGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihob21lRGlyLCAnLmRvbGxob3VzZScsICdydW4nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBlcm1pc3Npb25Ib29rRGlhZ25vc3RpY3NQYXRoKGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihnZXRQZXJtaXNzaW9uSG9va1J1bkRpcihob21lRGlyKSwgJ3Blcm1pc3Npb24taG9vay1kaWFnbm9zdGljcy5qc29ubCcpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplSG9va0hvc3QoaG9zdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGhvc3QpLm5vcm1hbGl6ZWRDb250ZW50LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBpc0hvb2tNYXJrZXJGaWxlbmFtZShlbnRyeTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBlbnRyeS5zdGFydHNXaXRoKCdob29rLWluc3RhbGxlZC0nKSAmJiBlbnRyeS5lbmRzV2l0aCgnLmpzb24nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRIb3N0U3BlY2lmaWNIb29rU3RhdHVzKGhvbWVEaXI6IHN0cmluZywgaG9zdDogc3RyaW5nKTogUGVybWlzc2lvbkhvb2tTdGF0dXMge1xuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplSG9va0hvc3QoaG9zdCk7XG4gIGNvbnN0IHN0YXR1cyA9IHJlYWRNYXJrZXJTdGF0dXMoZ2V0UGVybWlzc2lvbkhvb2tNYXJrZXJQYXRoKGhvbWVEaXIsIG5vcm1hbGl6ZWQpKTtcbiAgaWYgKHN0YXR1cy5pbnN0YWxsZWQgfHwgc3RhdHVzLmFzc2V0c1ByZXBhcmVkKSB7XG4gICAgcmV0dXJuIHN0YXR1cztcbiAgfVxuICBpZiAobm9ybWFsaXplZCA9PT0gJ2NsYXVkZS1jb2RlJykge1xuICAgIHJldHVybiByZWFkTWFya2VyU3RhdHVzKGdldFBlcm1pc3Npb25Ib29rTWFya2VyUGF0aChob21lRGlyKSk7XG4gIH1cbiAgcmV0dXJuIHsgaW5zdGFsbGVkOiBmYWxzZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdEhvb2tNYXJrZXJQYXRocyhob21lRGlyOiBzdHJpbmcpOiBTZXQ8c3RyaW5nPiB7XG4gIGNvbnN0IG1hcmtlclBhdGhzID0gbmV3IFNldDxzdHJpbmc+KFtnZXRQZXJtaXNzaW9uSG9va01hcmtlclBhdGgoaG9tZURpcildKTtcbiAgY29uc3QgcnVuRGlyID0gZ2V0UGVybWlzc2lvbkhvb2tSdW5EaXIoaG9tZURpcik7XG4gIHRyeSB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiByZWFkZGlyU3luYyhydW5EaXIpKSB7XG4gICAgICBpZiAoaXNIb29rTWFya2VyRmlsZW5hbWUoZW50cnkpKSB7XG4gICAgICAgIG1hcmtlclBhdGhzLmFkZChqb2luKHJ1bkRpciwgZW50cnkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIE5vIHJ1biBkaXIgeWV0IOKAlCBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdCBmYWxzZS5cbiAgfVxuICByZXR1cm4gbWFya2VyUGF0aHM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb2xsZWN0SG9va01hcmtlclBhdGhzQXN5bmMoaG9tZURpcjogc3RyaW5nKTogUHJvbWlzZTxTZXQ8c3RyaW5nPj4ge1xuICBjb25zdCBtYXJrZXJQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPihbZ2V0UGVybWlzc2lvbkhvb2tNYXJrZXJQYXRoKGhvbWVEaXIpXSk7XG4gIGNvbnN0IHJ1bkRpciA9IGdldFBlcm1pc3Npb25Ib29rUnVuRGlyKGhvbWVEaXIpO1xuICB0cnkge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgYXdhaXQgcmVhZGRpcihydW5EaXIpKSB7XG4gICAgICBpZiAoaXNIb29rTWFya2VyRmlsZW5hbWUoZW50cnkpKSB7XG4gICAgICAgIG1hcmtlclBhdGhzLmFkZChqb2luKHJ1bkRpciwgZW50cnkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIE5vIHJ1biBkaXIgeWV0IOKAlCBmYWxsIHRocm91Z2ggdG8gZGVmYXVsdCBmYWxzZS5cbiAgfVxuICByZXR1cm4gbWFya2VyUGF0aHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdW1tYXJpemVNYXJrZXJTdGF0dXNlcyhtYXJrZXJQYXRoczogSXRlcmFibGU8c3RyaW5nPik6IFBlcm1pc3Npb25Ib29rU3RhdHVzIHtcbiAgbGV0IGZhbGxiYWNrOiBQZXJtaXNzaW9uSG9va1N0YXR1cyA9IHsgaW5zdGFsbGVkOiBmYWxzZSB9O1xuICBmb3IgKGNvbnN0IG1hcmtlclBhdGggb2YgbWFya2VyUGF0aHMpIHtcbiAgICBjb25zdCBzdGF0dXMgPSByZWFkTWFya2VyU3RhdHVzKG1hcmtlclBhdGgpO1xuICAgIGlmIChzdGF0dXMuaW5zdGFsbGVkKSByZXR1cm4gc3RhdHVzO1xuICAgIGlmICghZmFsbGJhY2suYXNzZXRzUHJlcGFyZWQgJiYgc3RhdHVzLmFzc2V0c1ByZXBhcmVkKSBmYWxsYmFjayA9IHN0YXR1cztcbiAgfVxuICByZXR1cm4gZmFsbGJhY2s7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIb29rV3JhcHBlckJhc2VuYW1lKGhvc3Q6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBub3JtYWxpemVkSG9zdCA9IG5vcm1hbGl6ZUhvb2tIb3N0KGhvc3QpO1xuICByZXR1cm4gTUFOQUdFRF9IT09LX1dSQVBQRVJfQkFTRU5BTUVTW25vcm1hbGl6ZWRIb3N0IGFzIGtleW9mIHR5cGVvZiBNQU5BR0VEX0hPT0tfV1JBUFBFUl9CQVNFTkFNRVNdID8/IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIb29rV3JhcHBlclBhdGgoaG9zdDogc3RyaW5nLCBob21lRGlyID0gaG9tZWRpcigpKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gZ2V0SG9va1dyYXBwZXJCYXNlbmFtZShob3N0KTtcbiAgcmV0dXJuIGJhc2VuYW1lID8gam9pbihob21lRGlyLCAnLmRvbGxob3VzZScsICdob29rcycsIGJhc2VuYW1lKSA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIb29rU291cmNlUGF0aChob3N0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByb290ID0gcmVwb1Jvb3RGcm9tTW9kdWxlKCk7XG4gIGNvbnN0IGJhc2VuYW1lID0gZ2V0SG9va1dyYXBwZXJCYXNlbmFtZShob3N0KTtcbiAgcmV0dXJuIGJhc2VuYW1lID8gam9pbihyb290LCAnc2NyaXB0cycsIGJhc2VuYW1lKSA6IGpvaW4ocm9vdCwgJ3NjcmlwdHMnLCAncHJldG9vbHVzZS1kb2xsaG91c2Uuc2gnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzTWFuYWdlZEhvb2tBc3NldHMoaG9zdDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVIb29rSG9zdChob3N0KTtcbiAgcmV0dXJuIG5vcm1hbGl6ZWQgPT09ICdjbGF1ZGUtY29kZScgfHwgZ2V0SG9va1dyYXBwZXJCYXNlbmFtZShub3JtYWxpemVkKSAhPT0gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByaW1hcnlIb29rU2NyaXB0UGF0aChob3N0OiBzdHJpbmcsIGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcge1xuICByZXR1cm4gZ2V0SG9va1dyYXBwZXJQYXRoKGhvc3QsIGhvbWVEaXIpID8/IGdldFBlcm1pc3Npb25Ib29rU2NyaXB0UGF0aChob21lRGlyKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRMYXN0UGVybWlzc2lvbkhvb2tEaWFnbm9zdGljKFxuICBob21lRGlyID0gaG9tZWRpcigpLFxuKTogUHJvbWlzZTxQZXJtaXNzaW9uSG9va0RpYWdub3N0aWNSZWNvcmQgfCBudWxsPiB7XG4gIGNvbnN0IGRpYWdub3N0aWNzUGF0aCA9IGdldFBlcm1pc3Npb25Ib29rRGlhZ25vc3RpY3NQYXRoKGhvbWVEaXIpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gYXdhaXQgcmVhZEZpbGUoZGlhZ25vc3RpY3NQYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCBsaW5lcyA9IHJhd1xuICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgLm1hcCgobGluZSkgPT4gbGluZS50cmltKCkpXG4gICAgICAuZmlsdGVyKChsaW5lKSA9PiBsaW5lLmxlbmd0aCA+IDApO1xuICAgIGNvbnN0IGxhc3RMaW5lID0gbGluZXMuYXQoLTEpO1xuICAgIGlmICghbGFzdExpbmUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBwYXJzZWQ6IHVua25vd247XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZCA9IEpTT04ucGFyc2UobGFzdExpbmUpIGFzIHVua25vd247XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICBgW1Blcm1pc3Npb25Ib29rc10gRmFpbGVkIHRvIHBhcnNlIGhvb2sgZGlhZ25vc3RpY3MgSlNPTiBmcm9tICR7ZGlhZ25vc3RpY3NQYXRofTogJHtcbiAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICAgICAgfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJzZWQgfHwgdHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XG4gICAgICBsb2dnZXIud2FybihcbiAgICAgICAgYFtQZXJtaXNzaW9uSG9va3NdIElnbm9yaW5nIG1hbGZvcm1lZCBob29rIGRpYWdub3N0aWNzIGVudHJ5IGZyb20gJHtkaWFnbm9zdGljc1BhdGh9OiBleHBlY3RlZCBKU09OIG9iamVjdC5gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZWQgYXMgUGVybWlzc2lvbkhvb2tEaWFnbm9zdGljUmVjb3JkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChpc01pc3NpbmdGaWxlRXJyb3IoZXJyb3IpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBsb2dnZXIud2FybihcbiAgICAgIGBbUGVybWlzc2lvbkhvb2tzXSBGYWlsZWQgdG8gcmVhZCBob29rIGRpYWdub3N0aWNzIGZyb20gJHtkaWFnbm9zdGljc1BhdGh9OiAke1xuICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcilcbiAgICAgIH1gLFxuICAgICk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1hbmFnZWRIb29rQXNzZXRzKFxuICBob3N0OiBzdHJpbmcsXG4gIGhvbWVEaXIgPSBob21lZGlyKCksXG4gIHNvdXJjZVNjcmlwdFBhdGg/OiBzdHJpbmcsXG4pOiBIb29rQXNzZXREZXNjcmlwdG9yW10ge1xuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplSG9va0hvc3QoaG9zdCk7XG4gIGNvbnN0IGhvb2tzRGlyID0gZGlybmFtZShnZXRQZXJtaXNzaW9uSG9va1NjcmlwdFBhdGgoaG9tZURpcikpO1xuICBjb25zdCBhc3NldHM6IEhvb2tBc3NldERlc2NyaXB0b3JbXSA9IFtcbiAgICB7XG4gICAgICBraW5kOiAnYnJpZGdlJyxcbiAgICAgIHNvdXJjZVBhdGg6IHNvdXJjZVNjcmlwdFBhdGggPz8gam9pbihyZXBvUm9vdEZyb21Nb2R1bGUoKSwgJ3NjcmlwdHMnLCAncHJldG9vbHVzZS1kb2xsaG91c2Uuc2gnKSxcbiAgICAgIHRhcmdldFBhdGg6IGdldFBlcm1pc3Npb25Ib29rU2NyaXB0UGF0aChob21lRGlyKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGtpbmQ6ICdwb3J0LWhlbHBlcicsXG4gICAgICBzb3VyY2VQYXRoOiBqb2luKHJlcG9Sb290RnJvbU1vZHVsZSgpLCAnc2NyaXB0cycsICdwZXJtaXNzaW9uLXBvcnQtZGlzY292ZXJ5LnNoJyksXG4gICAgICB0YXJnZXRQYXRoOiBqb2luKGhvb2tzRGlyLCAncGVybWlzc2lvbi1wb3J0LWRpc2NvdmVyeS5zaCcpLFxuICAgIH0sXG4gICAge1xuICAgICAga2luZDogJ2NvbmZpZy1oZWxwZXInLFxuICAgICAgc291cmNlUGF0aDogam9pbihyZXBvUm9vdEZyb21Nb2R1bGUoKSwgJ3NjcmlwdHMnLCAncGVybWlzc2lvbi1ob29rLWNvbmZpZy5zaCcpLFxuICAgICAgdGFyZ2V0UGF0aDogam9pbihob29rc0RpciwgJ3Blcm1pc3Npb24taG9vay1jb25maWcuc2gnKSxcbiAgICB9LFxuICBdO1xuXG4gIGNvbnN0IHdyYXBwZXJUYXJnZXRQYXRoID0gZ2V0SG9va1dyYXBwZXJQYXRoKG5vcm1hbGl6ZWQsIGhvbWVEaXIpO1xuICBpZiAod3JhcHBlclRhcmdldFBhdGgpIHtcbiAgICBhc3NldHMucHVzaCh7XG4gICAgICBraW5kOiAnd3JhcHBlcicsXG4gICAgICBzb3VyY2VQYXRoOiBnZXRIb29rU291cmNlUGF0aChub3JtYWxpemVkKSxcbiAgICAgIHRhcmdldFBhdGg6IHdyYXBwZXJUYXJnZXRQYXRoLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGFzc2V0cztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVhZE9wdGlvbmFsVXRmOEZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHJlYWRGaWxlKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaXNNaXNzaW5nRmlsZUVycm9yKGVycm9yKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGF1ZGl0SG9va0Fzc2V0cyhcbiAgaG9zdDogc3RyaW5nLFxuICBob21lRGlyID0gaG9tZWRpcigpLFxuICBzb3VyY2VTY3JpcHRQYXRoPzogc3RyaW5nLFxuKTogUHJvbWlzZTxIb29rQXNzZXRBdWRpdFJlc3VsdD4ge1xuICBjb25zdCBhc3NldHMgPSBnZXRNYW5hZ2VkSG9va0Fzc2V0cyhob3N0LCBob21lRGlyLCBzb3VyY2VTY3JpcHRQYXRoKTtcbiAgY29uc3Qgc3RhbGVBc3NldHM6IEhvb2tBc3NldERlc2NyaXB0b3JbXSA9IFtdO1xuICBsZXQgYXNzZXRzUHJlcGFyZWQgPSB0cnVlO1xuXG4gIGZvciAoY29uc3QgYXNzZXQgb2YgYXNzZXRzKSB7XG4gICAgY29uc3Qgc291cmNlUmF3ID0gYXdhaXQgcmVhZEZpbGUoYXNzZXQuc291cmNlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgdGFyZ2V0UmF3ID0gYXdhaXQgcmVhZE9wdGlvbmFsVXRmOEZpbGUoYXNzZXQudGFyZ2V0UGF0aCk7XG4gICAgaWYgKHRhcmdldFJhdyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhc3NldHNQcmVwYXJlZCA9IGZhbHNlO1xuICAgICAgc3RhbGVBc3NldHMucHVzaChhc3NldCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHRhcmdldFJhdyAhPT0gc291cmNlUmF3KSB7XG4gICAgICBzdGFsZUFzc2V0cy5wdXNoKGFzc2V0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFzc2V0c1ByZXBhcmVkLFxuICAgIGFzc2V0c0N1cnJlbnQ6IHN0YWxlQXNzZXRzLmxlbmd0aCA9PT0gMCxcbiAgICBzdGFsZUFzc2V0cyxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBlcm1pc3Npb25Ib29rTWFya2VyUGF0aChob21lRGlyID0gaG9tZWRpcigpLCBob3N0Pzogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFob3N0KSB7XG4gICAgcmV0dXJuIGpvaW4oZ2V0UGVybWlzc2lvbkhvb2tSdW5EaXIoaG9tZURpciksICdob29rLWluc3RhbGxlZC5qc29uJyk7XG4gIH1cbiAgcmV0dXJuIGpvaW4oZ2V0UGVybWlzc2lvbkhvb2tSdW5EaXIoaG9tZURpciksIGBob29rLWluc3RhbGxlZC0ke25vcm1hbGl6ZUhvb2tIb3N0KGhvc3QpfS5qc29uYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGF1ZGVIb29rU2V0dGluZ3NQYXRoKGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihob21lRGlyLCAnLmNsYXVkZScsICdzZXR0aW5ncy5qc29uJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWc0NvZGVIb29rU2V0dGluZ3NQYXRoKGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihob21lRGlyLCAnLmNvcGlsb3QnLCAnaG9va3MnLCAnZG9sbGhvdXNlLXBlcm1pc3Npb25zLmpzb24nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZzQ29kZVVzZXJTZXR0aW5nc1BhdGgoaG9tZURpciA9IGhvbWVkaXIoKSk6IHN0cmluZyB7XG4gIGNvbnN0IGN1cnJlbnRQbGF0Zm9ybSA9IHBsYXRmb3JtKCk7XG4gIGlmIChjdXJyZW50UGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuIGpvaW4oaG9tZURpciwgJ0xpYnJhcnknLCAnQXBwbGljYXRpb24gU3VwcG9ydCcsICdDb2RlJywgJ1VzZXInLCAnc2V0dGluZ3MuanNvbicpO1xuICB9XG4gIGlmIChjdXJyZW50UGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICBjb25zdCBhcHBEYXRhID0gcHJvY2Vzcy5lbnYuQVBQREFUQSB8fCBqb2luKGhvbWVEaXIsICdBcHBEYXRhJywgJ1JvYW1pbmcnKTtcbiAgICByZXR1cm4gam9pbihhcHBEYXRhLCAnQ29kZScsICdVc2VyJywgJ3NldHRpbmdzLmpzb24nKTtcbiAgfVxuICByZXR1cm4gam9pbihob21lRGlyLCAnLmNvbmZpZycsICdDb2RlJywgJ1VzZXInLCAnc2V0dGluZ3MuanNvbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2VtaW5pSG9va1NldHRpbmdzUGF0aChob21lRGlyID0gaG9tZWRpcigpKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4oaG9tZURpciwgJy5nZW1pbmknLCAnc2V0dGluZ3MuanNvbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3Vyc29ySG9va1NldHRpbmdzUGF0aChob21lRGlyID0gaG9tZWRpcigpKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4oaG9tZURpciwgJy5jdXJzb3InLCAnaG9va3MuanNvbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0V2luZHN1cmZIb29rU2V0dGluZ3NQYXRoKGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihob21lRGlyLCAnLmNvZGVpdW0nLCAnd2luZHN1cmYnLCAnaG9va3MuanNvbicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29kZXhIb29rU2V0dGluZ3NQYXRoKGhvbWVEaXIgPSBob21lZGlyKCkpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihob21lRGlyLCAnLmNvZGV4JywgJ2hvb2tzLmpzb24nKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvZGV4Q29uZmlnUGF0aChob21lRGlyID0gaG9tZWRpcigpKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4oaG9tZURpciwgJy5jb2RleCcsICdjb25maWcudG9tbCcpO1xufVxuXG5mdW5jdGlvbiB0b1Blcm1pc3Npb25Ib29rU3RhdHVzKHJhdzogUGVybWlzc2lvbkhvb2tNYXJrZXIpOiBQZXJtaXNzaW9uSG9va1N0YXR1cyB7XG4gIGlmIChcbiAgICB0eXBlb2YgcmF3Lmhvc3QgIT09ICdzdHJpbmcnIHx8XG4gICAgdHlwZW9mIHJhdy5zY3JpcHRQYXRoICE9PSAnc3RyaW5nJ1xuICApIHtcbiAgICByZXR1cm4geyBpbnN0YWxsZWQ6IGZhbHNlIH07XG4gIH1cblxuICBjb25zdCBzY3JpcHRSZWFkeSA9IGV4aXN0c1N5bmMocmF3LnNjcmlwdFBhdGgpO1xuICBjb25zdCBzZXR0aW5nc1JlYWR5ID0gIXJhdy5zZXR0aW5nc1BhdGggfHwgZXhpc3RzU3luYyhyYXcuc2V0dGluZ3NQYXRoKTtcbiAgY29uc3QgYWRkaXRpb25hbFBhdGhzUmVhZHkgPSAhcmF3LmFkZGl0aW9uYWxQYXRocyB8fCByYXcuYWRkaXRpb25hbFBhdGhzLmV2ZXJ5KChwYXRoKSA9PiBleGlzdHNTeW5jKHBhdGgpKTtcbiAgY29uc3QgYXNzZXRzUHJlcGFyZWQgPSAocmF3LmFzc2V0c1ByZXBhcmVkID8/IHJhdy5jb25maWd1cmVkID8/IHRydWUpICYmIHNjcmlwdFJlYWR5O1xuICBjb25zdCBjb25maWd1cmVkID0gKHJhdy5jb25maWd1cmVkID8/IHRydWUpICYmIHNjcmlwdFJlYWR5ICYmIHNldHRpbmdzUmVhZHkgJiYgYWRkaXRpb25hbFBhdGhzUmVhZHk7XG5cbiAgcmV0dXJuIHtcbiAgICBpbnN0YWxsZWQ6IGNvbmZpZ3VyZWQsXG4gICAgY29uZmlndXJlZCxcbiAgICBhc3NldHNQcmVwYXJlZCxcbiAgICBob3N0OiByYXcuaG9zdCxcbiAgICBzY3JpcHRQYXRoOiByYXcuc2NyaXB0UGF0aCxcbiAgICBzZXR0aW5nc1BhdGg6IHJhdy5zZXR0aW5nc1BhdGgsXG4gICAgYWRkaXRpb25hbFBhdGhzOiByYXcuYWRkaXRpb25hbFBhdGhzLFxuICB9O1xufVxuXG5mdW5jdGlvbiByZWFkTWFya2VyU3RhdHVzKG1hcmtlclBhdGg6IHN0cmluZyk6IFBlcm1pc3Npb25Ib29rU3RhdHVzIHtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSByZWFkRmlsZVN5bmMobWFya2VyUGF0aCwgJ3V0Zi04Jyk7XG4gICAgcmV0dXJuIHRvUGVybWlzc2lvbkhvb2tTdGF0dXMoSlNPTi5wYXJzZShyYXcpIGFzIFBlcm1pc3Npb25Ib29rTWFya2VyKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoIWlzTWlzc2luZ0ZpbGVFcnJvcihlcnJvcikpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBbUGVybWlzc2lvbnNdIEZhaWxlZCB0byByZWFkIGhvb2sgbWFya2VyIGF0ICR7bWFya2VyUGF0aH06ICR7U3RyaW5nKGVycm9yKX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgaW5zdGFsbGVkOiBmYWxzZSB9O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVIb29rc1Jvb3QocGFyc2VkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd25bXT4ge1xuICBjb25zdCBob29rc1ZhbHVlID0gcGFyc2VkLmhvb2tzO1xuICBpZiAoIWhvb2tzVmFsdWUgfHwgdHlwZW9mIGhvb2tzVmFsdWUgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoaG9va3NWYWx1ZSkpIHtcbiAgICBwYXJzZWQuaG9va3MgPSB7fTtcbiAgfVxuICByZXR1cm4gcGFyc2VkLmhvb2tzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd25bXT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVDb21tYW5kSG9vayhcbiAgcGFyc2VkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgZXZlbnROYW1lOiBzdHJpbmcsXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgbWF0Y2hlcjogc3RyaW5nLFxuICBleHRyYUhvb2tGaWVsZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30sXG4pOiB7IGNoYW5nZWQ6IGJvb2xlYW47IHBhcnNlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSB7XG4gIGNvbnN0IGhvb2tzUm9vdCA9IG5vcm1hbGl6ZUhvb2tzUm9vdChwYXJzZWQpO1xuICBjb25zdCBleGlzdGluZ0VudHJpZXM6IEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IEFycmF5LmlzQXJyYXkoaG9va3NSb290W2V2ZW50TmFtZV0pXG4gICAgPyBob29rc1Jvb3RbZXZlbnROYW1lXS5maWx0ZXIoKGVudHJ5KTogZW50cnkgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4gdHlwZW9mIGVudHJ5ID09PSAnb2JqZWN0JyAmJiBlbnRyeSAhPT0gbnVsbClcbiAgICA6IFtdO1xuICBob29rc1Jvb3RbZXZlbnROYW1lXSA9IGV4aXN0aW5nRW50cmllcztcblxuICBjb25zdCBjb21tYW5kRXhpc3RzID0gZXhpc3RpbmdFbnRyaWVzLnNvbWUoKGVudHJ5KSA9PiB7XG4gICAgY29uc3QgaG9va3MgPSBBcnJheS5pc0FycmF5KGVudHJ5Py5ob29rcykgPyBlbnRyeS5ob29rcyBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gOiBbXTtcbiAgICByZXR1cm4gaG9va3Muc29tZSgoaG9vaykgPT4gaG9vaz8udHlwZSA9PT0gJ2NvbW1hbmQnICYmIGhvb2s/LmNvbW1hbmQgPT09IGNvbW1hbmQpO1xuICB9KTtcbiAgaWYgKGNvbW1hbmRFeGlzdHMpIHtcbiAgICByZXR1cm4geyBjaGFuZ2VkOiBmYWxzZSwgcGFyc2VkIH07XG4gIH1cblxuICBjb25zdCB3aWxkY2FyZEVudHJ5ID0gZXhpc3RpbmdFbnRyaWVzLmZpbmQoKGVudHJ5KTogZW50cnkgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT5cbiAgICAoZW50cnk/Lm1hdGNoZXIgPT09IG1hdGNoZXIgfHwgZW50cnk/Lm1hdGNoZXIgPT09IHVuZGVmaW5lZCkgJiYgQXJyYXkuaXNBcnJheShlbnRyeT8uaG9va3MpLFxuICApO1xuXG4gIGlmICh3aWxkY2FyZEVudHJ5KSB7XG4gICAgY29uc3QgaG9va3MgPSB3aWxkY2FyZEVudHJ5Lmhvb2tzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbiAgICBob29rcy5wdXNoKHtcbiAgICAgIHR5cGU6ICdjb21tYW5kJyxcbiAgICAgIGNvbW1hbmQsXG4gICAgICAuLi5leHRyYUhvb2tGaWVsZHMsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZXhpc3RpbmdFbnRyaWVzLnB1c2goe1xuICAgICAgbWF0Y2hlcixcbiAgICAgIGhvb2tzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnY29tbWFuZCcsXG4gICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICAuLi5leHRyYUhvb2tGaWVsZHMsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHsgY2hhbmdlZDogdHJ1ZSwgcGFyc2VkIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvcHlIb29rQXNzZXQoc291cmNlUGF0aDogc3RyaW5nLCB0YXJnZXRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgYXdhaXQgbWtkaXIoZGlybmFtZSh0YXJnZXRQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgY29uc3Qgc291cmNlUmF3ID0gYXdhaXQgcmVhZEZpbGUoc291cmNlUGF0aCwgJ3V0Zi04Jyk7XG5cbiAgbGV0IHRhcmdldFJhdzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIHRhcmdldFJhdyA9IGF3YWl0IHJlYWRGaWxlKHRhcmdldFBhdGgsICd1dGYtOCcpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICghaXNNaXNzaW5nRmlsZUVycm9yKGVycm9yKSkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIGNvbnN0IGNoYW5nZWQgPSB0YXJnZXRSYXcgPT09IHVuZGVmaW5lZCB8fCBzb3VyY2VSYXcgIT09IHRhcmdldFJhdztcblxuICBpZiAoY2hhbmdlZCkge1xuICAgIGF3YWl0IGNvcHlGaWxlKHNvdXJjZVBhdGgsIHRhcmdldFBhdGgpO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGFjY2Vzcyh0YXJnZXRQYXRoKTtcbiAgfVxuXG4gIGF3YWl0IGNobW9kKHRhcmdldFBhdGgsIDBvNzU1KTtcbiAgcmV0dXJuIGNoYW5nZWQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkT3B0aW9uYWxVdGY4KGZpbGVQYXRoOiBzdHJpbmcsIGZhbGxiYWNrOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCByZWFkRmlsZShmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGlzTWlzc2luZ0ZpbGVFcnJvcihlcnJvcikpIHtcbiAgICAgIHJldHVybiBmYWxsYmFjaztcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlQmFja3VwSWZQcmVzZW50KGZpbGVQYXRoOiBzdHJpbmcsIHJhdzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCFleGlzdHNTeW5jKGZpbGVQYXRoKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBiYWNrdXBQYXRoID0gYCR7ZmlsZVBhdGh9LmRvbGxob3VzZS5iYWtgO1xuICBhd2FpdCB3cml0ZUZpbGUoYmFja3VwUGF0aCwgcmF3LCAndXRmLTgnKTtcbiAgcmV0dXJuIGJhY2t1cFBhdGg7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZUhvb2tNYXJrZXIoXG4gIGhvbWVEaXI6IHN0cmluZyxcbiAgbWFya2VyOiBQZXJtaXNzaW9uSG9va01hcmtlcixcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IG1hcmtlclBhdGggPSBnZXRQZXJtaXNzaW9uSG9va01hcmtlclBhdGgoaG9tZURpciwgbWFya2VyLmhvc3QpO1xuICBhd2FpdCBta2RpcihkaXJuYW1lKG1hcmtlclBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgd3JpdGVGaWxlKG1hcmtlclBhdGgsIEpTT04uc3RyaW5naWZ5KG1hcmtlciwgbnVsbCwgMikgKyAnXFxuJywgJ3V0Zi04Jyk7XG4gIHJldHVybiBtYXJrZXJQYXRoO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbEhvb2tBc3NldHNGb3JIb3N0KFxuICBjbGllbnQ6IHN0cmluZyxcbiAgaG9tZURpcjogc3RyaW5nLFxuICBzb3VyY2VTY3JpcHRQYXRoPzogc3RyaW5nLFxuKTogUHJvbWlzZTx7IHNjcmlwdFBhdGg6IHN0cmluZyB9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRDbGllbnQgPSBub3JtYWxpemVIb29rSG9zdChjbGllbnQpO1xuICBjb25zdCBob29rc0RpciA9IGRpcm5hbWUoZ2V0UGVybWlzc2lvbkhvb2tTY3JpcHRQYXRoKGhvbWVEaXIpKTtcbiAgY29uc3Qgc2hhcmVkVGFyZ2V0UGF0aCA9IGdldFBlcm1pc3Npb25Ib29rU2NyaXB0UGF0aChob21lRGlyKTtcbiAgY29uc3Qgc2hhcmVkU291cmNlUGF0aCA9IHNvdXJjZVNjcmlwdFBhdGggPz8gam9pbihyZXBvUm9vdEZyb21Nb2R1bGUoKSwgJ3NjcmlwdHMnLCAncHJldG9vbHVzZS1kb2xsaG91c2Uuc2gnKTtcbiAgY29uc3QgcG9ydEhlbHBlclNvdXJjZVBhdGggPSBqb2luKHJlcG9Sb290RnJvbU1vZHVsZSgpLCAnc2NyaXB0cycsICdwZXJtaXNzaW9uLXBvcnQtZGlzY292ZXJ5LnNoJyk7XG4gIGNvbnN0IHBvcnRIZWxwZXJUYXJnZXRQYXRoID0gam9pbihob29rc0RpciwgJ3Blcm1pc3Npb24tcG9ydC1kaXNjb3Zlcnkuc2gnKTtcbiAgY29uc3QgY29uZmlnSGVscGVyU291cmNlUGF0aCA9IGpvaW4ocmVwb1Jvb3RGcm9tTW9kdWxlKCksICdzY3JpcHRzJywgJ3Blcm1pc3Npb24taG9vay1jb25maWcuc2gnKTtcbiAgY29uc3QgY29uZmlnSGVscGVyVGFyZ2V0UGF0aCA9IGpvaW4oaG9va3NEaXIsICdwZXJtaXNzaW9uLWhvb2stY29uZmlnLnNoJyk7XG5cbiAgY29uc3Qgc2hhcmVkU3RhdCA9IHN0YXRTeW5jKHNoYXJlZFNvdXJjZVBhdGgpO1xuICBpZiAoIXNoYXJlZFN0YXQuaXNGaWxlKCkpIHtcbiAgICBsb2dnZXIud2FybihgW1Blcm1pc3Npb25Ib29rc10gU2hhcmVkIGhvb2sgYnJpZGdlIG1pc3NpbmcgZm9yICR7bm9ybWFsaXplZENsaWVudH06ICR7c2hhcmVkU291cmNlUGF0aH1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBlcm1pc3Npb24gaG9vayBzb3VyY2Ugc2NyaXB0IG5vdCBmb3VuZDogJHtzaGFyZWRTb3VyY2VQYXRofWApO1xuICB9XG4gIGF3YWl0IGNvcHlIb29rQXNzZXQoc2hhcmVkU291cmNlUGF0aCwgc2hhcmVkVGFyZ2V0UGF0aCk7XG5cbiAgY29uc3QgcG9ydEhlbHBlclN0YXQgPSBzdGF0U3luYyhwb3J0SGVscGVyU291cmNlUGF0aCk7XG4gIGlmICghcG9ydEhlbHBlclN0YXQuaXNGaWxlKCkpIHtcbiAgICBsb2dnZXIud2FybihgW1Blcm1pc3Npb25Ib29rc10gUG9ydCBkaXNjb3ZlcnkgaGVscGVyIG1pc3NpbmcgZm9yICR7bm9ybWFsaXplZENsaWVudH06ICR7cG9ydEhlbHBlclNvdXJjZVBhdGh9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQZXJtaXNzaW9uIGhvb2sgaGVscGVyIHNjcmlwdCBub3QgZm91bmQ6ICR7cG9ydEhlbHBlclNvdXJjZVBhdGh9YCk7XG4gIH1cbiAgYXdhaXQgY29weUhvb2tBc3NldChwb3J0SGVscGVyU291cmNlUGF0aCwgcG9ydEhlbHBlclRhcmdldFBhdGgpO1xuXG4gIGNvbnN0IGNvbmZpZ0hlbHBlclN0YXQgPSBzdGF0U3luYyhjb25maWdIZWxwZXJTb3VyY2VQYXRoKTtcbiAgaWYgKCFjb25maWdIZWxwZXJTdGF0LmlzRmlsZSgpKSB7XG4gICAgbG9nZ2VyLndhcm4oYFtQZXJtaXNzaW9uSG9va3NdIENvbmZpZyBoZWxwZXIgbWlzc2luZyBmb3IgJHtub3JtYWxpemVkQ2xpZW50fTogJHtjb25maWdIZWxwZXJTb3VyY2VQYXRofWApO1xuICAgIHRocm93IG5ldyBFcnJvcihgUGVybWlzc2lvbiBob29rIGNvbmZpZyBoZWxwZXIgbm90IGZvdW5kOiAke2NvbmZpZ0hlbHBlclNvdXJjZVBhdGh9YCk7XG4gIH1cbiAgYXdhaXQgY29weUhvb2tBc3NldChjb25maWdIZWxwZXJTb3VyY2VQYXRoLCBjb25maWdIZWxwZXJUYXJnZXRQYXRoKTtcblxuICBjb25zdCB3cmFwcGVyVGFyZ2V0UGF0aCA9IGdldEhvb2tXcmFwcGVyUGF0aChub3JtYWxpemVkQ2xpZW50LCBob21lRGlyKTtcbiAgaWYgKCF3cmFwcGVyVGFyZ2V0UGF0aCkge1xuICAgIHJldHVybiB7IHNjcmlwdFBhdGg6IHNoYXJlZFRhcmdldFBhdGggfTtcbiAgfVxuXG4gIGNvbnN0IHdyYXBwZXJTb3VyY2VQYXRoID0gZ2V0SG9va1NvdXJjZVBhdGgobm9ybWFsaXplZENsaWVudCk7XG4gIGNvbnN0IHdyYXBwZXJTdGF0ID0gc3RhdFN5bmMod3JhcHBlclNvdXJjZVBhdGgpO1xuICBpZiAoIXdyYXBwZXJTdGF0LmlzRmlsZSgpKSB7XG4gICAgbG9nZ2VyLndhcm4oYFtQZXJtaXNzaW9uSG9va3NdIFdyYXBwZXIgaG9vayBzY3JpcHQgbWlzc2luZyBmb3IgJHtub3JtYWxpemVkQ2xpZW50fTogJHt3cmFwcGVyU291cmNlUGF0aH1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFBlcm1pc3Npb24gaG9vayB3cmFwcGVyIHNjcmlwdCBub3QgZm91bmQ6ICR7d3JhcHBlclNvdXJjZVBhdGh9YCk7XG4gIH1cbiAgYXdhaXQgY29weUhvb2tBc3NldCh3cmFwcGVyU291cmNlUGF0aCwgd3JhcHBlclRhcmdldFBhdGgpO1xuICByZXR1cm4geyBzY3JpcHRQYXRoOiB3cmFwcGVyVGFyZ2V0UGF0aCB9O1xufVxuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"permissionHookStatus.d.ts","sourceRoot":"","sources":["../../src/utils/permissionHookStatus.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAGhC,KAAK,kCAAkC,EACvC,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EAWpC,MAAM,2BAA2B,CAAC;AAInC,wBAAgB,uBAAuB,CAAC,OAAO,SAAY,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,oBAAoB,CAMhG;AAED,wBAAsB,4BAA4B,CAAC,OAAO,SAAY,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAMpH;AA2FD,wBAAgB,yCAAyC,IAAI,kCAAkC,GAAG,IAAI,CAErG;AAED,wBAAgB,gDAAgD,IAAI,IAAI,CAEvE;AAED,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,8BAAmC,GAC3C,OAAO,CAAC,oBAAoB,CAAC,CAgC/B;AAED,wBAAsB,6BAA6B,CAAC,OAAO,SAAY,GAAG,OAAO,CAAC,0BAA0B,CAAC,CA4B5G;AA4CD,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,0BAA0B,GAClC,2BAA2B,CAmD7B;AAED,wBAAsB,8BAA8B,CAClD,OAAO,SAAY,EACnB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,kCAAkC,CAAC,CA0D7C"}
1
+ {"version":3,"file":"permissionHookStatus.d.ts","sourceRoot":"","sources":["../../src/utils/permissionHookStatus.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAGhC,KAAK,kCAAkC,EACvC,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EAapC,MAAM,2BAA2B,CAAC;AAInC,wBAAgB,uBAAuB,CAAC,OAAO,SAAY,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,oBAAoB,CAMhG;AAED,wBAAsB,4BAA4B,CAAC,OAAO,SAAY,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAMpH;AA2FD,wBAAgB,yCAAyC,IAAI,kCAAkC,GAAG,IAAI,CAErG;AAED,wBAAgB,gDAAgD,IAAI,IAAI,CAEvE;AAED,wBAAsB,6BAA6B,CACjD,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,8BAAmC,GAC3C,OAAO,CAAC,oBAAoB,CAAC,CAgC/B;AAED,wBAAsB,6BAA6B,CAAC,OAAO,SAAY,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAgC5G;AA4CD,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,0BAA0B,GAClC,2BAA2B,CAmD7B;AAED,wBAAsB,8BAA8B,CAClD,OAAO,SAAY,EACnB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,kCAAkC,CAAC,CA0D7C"}
@@ -1,6 +1,6 @@
1
1
  import { homedir } from 'node:os';
2
2
  import { logger } from './logger.js';
3
- import { AUTO_REPAIRABLE_HOOK_HOSTS, auditHookAssets, collectHookMarkerPaths, collectHookMarkerPathsAsync, getPrimaryHookScriptPath, installHookAssetsForHost, normalizeHookHost, readHostSpecificHookStatus, summarizeMarkerStatuses, supportsManagedHookAssets, } from './permissionHookShared.js';
3
+ import { AUTO_REPAIRABLE_HOOK_HOSTS, auditHookAssets, collectHookMarkerPaths, collectHookMarkerPathsAsync, getPermissionHookDiagnosticsPath, getPrimaryHookScriptPath, installHookAssetsForHost, normalizeHookHost, readLastPermissionHookDiagnostic, readHostSpecificHookStatus, summarizeMarkerStatuses, supportsManagedHookAssets, } from './permissionHookShared.js';
4
4
  let lastPermissionHookStartupRepairSummary = null;
5
5
  export function getPermissionHookStatus(homeDir = homedir(), host) {
6
6
  if (host) {
@@ -122,11 +122,15 @@ export async function getPermissionHookAuditSummary(homeDir = homedir()) {
122
122
  const needsRepairHosts = statuses
123
123
  .filter(({ status }) => status.needsRepair)
124
124
  .map(({ host }) => host);
125
+ const diagnosticsPath = getPermissionHookDiagnosticsPath(homeDir);
126
+ const lastDiagnostic = await readLastPermissionHookDiagnostic(homeDir);
125
127
  return {
126
128
  installedHosts,
127
129
  currentHosts,
128
130
  repairedHosts,
129
131
  needsRepairHosts,
132
+ diagnosticsPath,
133
+ lastDiagnostic,
130
134
  lastStartupRepair: getLastPermissionHookStartupRepairSummary(),
131
135
  };
132
136
  }
@@ -253,4 +257,4 @@ export async function repairPermissionHooksOnStartup(homeDir = homedir(), source
253
257
  `(repaired=${repairedCount}, needsRepair=${needsRepairCount})`);
254
258
  return summary;
255
259
  }
256
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbkhvb2tTdGF0dXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcGVybWlzc2lvbkhvb2tTdGF0dXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFRTCwwQkFBMEIsRUFDMUIsZUFBZSxFQUNmLHNCQUFzQixFQUN0QiwyQkFBMkIsRUFDM0Isd0JBQXdCLEVBQ3hCLHdCQUF3QixFQUN4QixpQkFBaUIsRUFDakIsMEJBQTBCLEVBQzFCLHVCQUF1QixFQUN2Qix5QkFBeUIsR0FDMUIsTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxJQUFJLHNDQUFzQyxHQUE4QyxJQUFJLENBQUM7QUFFN0YsTUFBTSxVQUFVLHVCQUF1QixDQUFDLE9BQU8sR0FBRyxPQUFPLEVBQUUsRUFBRSxJQUFhO0lBQ3hFLElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxPQUFPLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsT0FBTyx1QkFBdUIsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLDRCQUE0QixDQUFDLE9BQU8sR0FBRyxPQUFPLEVBQUUsRUFBRSxJQUFhO0lBQ25GLElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxPQUFPLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsT0FBTyx1QkFBdUIsQ0FBQyxNQUFNLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQUVELFNBQVMsNEJBQTRCLENBQ25DLE1BQTRCLEVBQzVCLEtBQTJCO0lBRTNCLE9BQU8sT0FBTyxD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QUFNLENBQUMsT0FBTyxLQUFLLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMzRixNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNyRCxNQUFNLENBQUMsT0FBTyxLQUFLLGNBQWMsSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMxRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDL0IsTUFBTSxPQUFPLEdBQXVDO1FBQ2xELFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxXQUFXLEVBQUU7UUFDaEQsVUFBVSxFQUFFLFdBQVcsR0FBRyxTQUFTO1FBQ25DLGFBQWE7UUFDYixnQkFBZ0I7UUFDaEIsV0FBVztLQUNaLENBQUM7SUFDRixzQ0FBc0MsR0FBRyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1RSxNQUFNLENBQUMsSUFBSSxDQUNULDJEQUEyRCxPQUFPLENBQUMsVUFBVSxLQUFLO1FBQ2xGLGFBQWEsYUFBYSxpQkFBaUIsZ0JBQWdCLEdBQUcsQ0FDL0QsQ0FBQztJQUNGLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5pbXBvcnQge1xuICB0eXBlIFBlcm1pc3Npb25Ib29rQXVkaXRTdW1tYXJ5LFxuICB0eXBlIFBlcm1pc3Npb25Ib29rSGVhbHRoU3VtbWFyeSxcbiAgdHlwZSBIb29rQXNzZXRBdWRpdFJlc3VsdCxcbiAgdHlwZSBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJIb3N0UmVzdWx0LFxuICB0eXBlIFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnksXG4gIHR5cGUgUGVybWlzc2lvbkhvb2tTdGF0dXMsXG4gIHR5cGUgUmVjb25jaWxlUGVybWlzc2lvbkhvb2tPcHRpb25zLFxuICBBVVRPX1JFUEFJUkFCTEVfSE9PS19IT1NUUyxcbiAgYXVkaXRIb29rQXNzZXRzLFxuICBjb2xsZWN0SG9va01hcmtlclBhdGhzLFxuICBjb2xsZWN0SG9va01hcmtlclBhdGhzQXN5bmMsXG4gIGdldFByaW1hcnlIb29rU2NyaXB0UGF0aCxcbiAgaW5zdGFsbEhvb2tBc3NldHNGb3JIb3N0LFxuICBub3JtYWxpemVIb29rSG9zdCxcbiAgcmVhZEhvc3RTcGVjaWZpY0hvb2tTdGF0dXMsXG4gIHN1bW1hcml6ZU1hcmtlclN0YXR1c2VzLFxuICBzdXBwb3J0c01hbmFnZWRIb29rQXNzZXRzLFxufSBmcm9tICcuL3Blcm1pc3Npb25Ib29rU2hhcmVkLmpzJztcblxubGV0IGxhc3RQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5OiBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5IHwgbnVsbCA9IG51bGw7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQZXJtaXNzaW9uSG9va1N0YXR1cyhob21lRGlyID0gaG9tZWRpcigpLCBob3N0Pzogc3RyaW5nKTogUGVybWlzc2lvbkhvb2tTdGF0dXMge1xuICBpZiAoaG9zdCkge1xuICAgIHJldHVybiByZWFkSG9zdFNwZWNpZmljSG9va1N0YXR1cyhob21lRGlyLCBob3N0KTtcbiAgfVxuXG4gIHJldHVybiBzdW1tYXJpemVNYXJrZXJTdGF0dXNlcyhjb2xsZWN0SG9va01hcmtlclBhdGhzKGhvbWVEaXIpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBlcm1pc3Npb25Ib29rU3RhdHVzQXN5bmMoaG9tZURpciA9IGhvbWVkaXIoKSwgaG9zdD86IHN0cmluZyk6IFByb21pc2U8UGVybWlzc2lvbkhvb2tTdGF0dXM+IHtcbiAgaWYgKGhvc3QpIHtcbiAgICByZXR1cm4gcmVhZEhvc3RTcGVjaWZpY0hvb2tTdGF0dXMoaG9tZURpciwgaG9zdCk7XG4gIH1cblxuICByZXR1cm4gc3VtbWFyaXplTWFya2VyU3RhdHVzZXMoYXdhaXQgY29sbGVjdEhvb2tNYXJrZXJQYXRoc0FzeW5jKGhvbWVEaXIpKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkQXR0ZW1wdEhvb2tBc3NldFJlcGFpcihcbiAgc3RhdHVzOiBQZXJtaXNzaW9uSG9va1N0YXR1cyxcbiAgYXVkaXQ6IEhvb2tBc3NldEF1ZGl0UmVzdWx0LFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIHN0YXR1cy5pbnN0YWxsZWRcbiAgICB8fCBzdGF0dXMuYXNzZXRzUHJlcGFyZWRcbiAgICB8fCBzdGF0dXMuc2NyaXB0UGF0aFxuICAgIHx8IGF1ZGl0LmFzc2V0c1ByZXBhcmVkXG4gICAgfHwgYXVkaXQuc3RhbGVBc3NldHMubGVuZ3RoID4gMCxcbiAgKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRGYWxsYmFja1Blcm1pc3Npb25Ib29rU3RhdHVzKFxuICBiYXNlU3RhdHVzOiBQZXJtaXNzaW9uSG9va1N0YXR1cyxcbiAgbm9ybWFsaXplZEhvc3Q6IHN0cmluZyxcbiAgaG9tZURpcjogc3RyaW5nLFxuKTogUGVybWlzc2lvbkhvb2tTdGF0dXMge1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VTdGF0dXMsXG4gICAgaG9zdDogYmFzZVN0YXR1cy5ob3N0ID8/IG5vcm1hbGl6ZWRIb3N0LFxuICAgIHNjcmlwdFBhdGg6IGJhc2VTdGF0dXMuc2NyaXB0UGF0aCA/PyBnZXRQcmltYXJ5SG9va1NjcmlwdFBhdGgobm9ybWFsaXplZEhvc3QsIGhvbWVEaXIpLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBhdWRpdEFuZE1heWJlUmVwYWlySG9va0Fzc2V0cyhcbiAgbm9ybWFsaXplZEhvc3Q6IHN0cmluZyxcbiAgaG9tZURpcjogc3RyaW5nLFxuICBzb3VyY2VTY3JpcHRQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGF1dG9SZXBhaXI6IGJvb2xlYW4sXG4gIGZhbGxiYWNrU3RhdHVzOiBQZXJtaXNzaW9uSG9va1N0YXR1cyxcbik6IFByb21pc2U8eyBhdWRpdDogSG9va0Fzc2V0QXVkaXRSZXN1bHQ7IGF1dG9SZXBhaXJlZDogYm9vbGVhbiB9PiB7XG4gIGxldCBhdWRpdCA9IGF3YWl0IGF1ZGl0SG9va0Fzc2V0cyhub3JtYWxpemVkSG9zdCwgaG9tZURpciwgc291cmNlU2NyaXB0UGF0aCk7XG4gIGxldCBhdXRvUmVwYWlyZWQgPSBmYWxzZTtcblxuICBpZiAoIWF1ZGl0LmFzc2V0c0N1cnJlbnQgJiYgYXV0b1JlcGFpciAmJiBzaG91bGRBdHRlbXB0SG9va0Fzc2V0UmVwYWlyKGZhbGxiYWNrU3RhdHVzLCBhdWRpdCkpIHtcbiAgICBhd2FpdCBpbnN0YWxsSG9va0Fzc2V0c0Zvckhvc3Qobm9ybWFsaXplZEhvc3QsIGhvbWVEaXIsIHNvdXJjZVNjcmlwdFBhdGgpO1xuICAgIGF1ZGl0ID0gYXdhaXQgYXVkaXRIb29rQXNzZXRzKG5vcm1hbGl6ZWRIb3N0LCBob21lRGlyLCBzb3VyY2VTY3JpcHRQYXRoKTtcbiAgICBhdXRvUmVwYWlyZWQgPSBhdWRpdC5hc3NldHNDdXJyZW50O1xuICB9XG5cbiAgcmV0dXJuIHsgYXVkaXQsIGF1dG9SZXBhaXJlZCB9O1xufVxuXG5mdW5jdGlvbiBidWlsZEhvb2tSZXBhaXJGYWlsdXJlU3RhdHVzKFxuICBmYWxsYmFja1N0YXR1czogUGVybWlzc2lvbkhvb2tTdGF0dXMsXG4gIGVycm9yOiB1bmtub3duLFxuKTogUGVybWlzc2lvbkhvb2tTdGF0dXMge1xuICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICBsb2dnZXIud2FybihgW1Blcm1pc3Npb25Ib29rc10gRmFpbGVkIHRvIHJlY29uY2lsZSBob29rIGFzc2V0cyBmb3IgJHtmYWxsYmFja1N0YXR1cy5ob3N0fTogJHttZXNzYWdlfWApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uZmFsbGJhY2tTdGF0dXMsXG4gICAgYXNzZXRzQ3VycmVudDogZmFsc2UsXG4gICAgYXV0b1JlcGFpcmVkOiBmYWxzZSxcbiAgICBuZWVkc1JlcGFpcjogdHJ1ZSxcbiAgICByZXBhaXJFcnJvcjogbWVzc2FnZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gdG9TdGFydHVwUmVwYWlyT3V0Y29tZShzdGF0dXM6IFBlcm1pc3Npb25Ib29rU3RhdHVzKTogUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlySG9zdFJlc3VsdFsnb3V0Y29tZSddIHtcbiAgaWYgKHN0YXR1cy5yZXBhaXJFcnJvcikgcmV0dXJuICdlcnJvcic7XG4gIGlmIChzdGF0dXMuYXV0b1JlcGFpcmVkKSByZXR1cm4gJ3JlcGFpcmVkJztcbiAgaWYgKHN0YXR1cy5uZWVkc1JlcGFpciAmJiAoc3RhdHVzLmluc3RhbGxlZCB8fCBzdGF0dXMuYXNzZXRzUHJlcGFyZWQpKSByZXR1cm4gJ25lZWRzX3JlcGFpcic7XG4gIGlmIChzdGF0dXMuYXNzZXRzQ3VycmVudCkgcmV0dXJuICdjdXJyZW50JztcbiAgcmV0dXJuICdub3RfaW5zdGFsbGVkJztcbn1cblxuZnVuY3Rpb24gdG9TdGFydHVwUmVwYWlySG9zdFJlc3VsdChcbiAgaG9zdDogc3RyaW5nLFxuICBzdGF0dXM6IFBlcm1pc3Npb25Ib29rU3RhdHVzLFxuKTogUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlySG9zdFJlc3VsdCB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdHVzLFxuICAgIGhvc3QsXG4gICAgb3V0Y29tZTogdG9TdGFydHVwUmVwYWlyT3V0Y29tZShzdGF0dXMpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjbG9uZVN0YXJ0dXBSZXBhaXJTdW1tYXJ5KFxuICBzdW1tYXJ5OiBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5IHwgbnVsbCxcbik6IFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkgfCBudWxsIHtcbiAgaWYgKCFzdW1tYXJ5KSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdW1tYXJ5LFxuICAgIGhvc3RSZXN1bHRzOiBzdW1tYXJ5Lmhvc3RSZXN1bHRzLm1hcCgocmVzdWx0KSA9PiAoeyAuLi5yZXN1bHQgfSkpLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkoKTogUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlyU3VtbWFyeSB8IG51bGwge1xuICByZXR1cm4gY2xvbmVTdGFydHVwUmVwYWlyU3VtbWFyeShsYXN0UGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlyU3VtbWFyeSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfcmVzZXRQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5Rm9yVGVzdHMoKTogdm9pZCB7XG4gIGxhc3RQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5ID0gbnVsbDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlY29uY2lsZVBlcm1pc3Npb25Ib29rU3RhdHVzKFxuICBob3N0OiBzdHJpbmcsXG4gIG9wdGlvbnM6IFJlY29uY2lsZVBlcm1pc3Npb25Ib29rT3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxQZXJtaXNzaW9uSG9va1N0YXR1cz4ge1xuICBjb25zdCBub3JtYWxpemVkSG9zdCA9IG5vcm1hbGl6ZUhvb2tIb3N0KGhvc3QpO1xuICBjb25zdCBob21lRGlyID0gb3B0aW9ucy5ob21lRGlyID8/IGhvbWVkaXIoKTtcbiAgY29uc3Qgc291cmNlU2NyaXB0UGF0aCA9IG9wdGlvbnMuc291cmNlU2NyaXB0UGF0aDtcbiAgY29uc3QgYXV0b1JlcGFpciA9IG9wdGlvbnMuYXV0b1JlcGFpciA/PyBmYWxzZTtcbiAgY29uc3QgYmFzZVN0YXR1cyA9IHJlYWRIb3N0U3BlY2lmaWNIb29rU3RhdHVzKGhvbWVEaXIsIG5vcm1hbGl6ZWRIb3N0KTtcblxuICBpZiAoIXN1cHBvcnRzTWFuYWdlZEhvb2tBc3NldHMobm9ybWFsaXplZEhvc3QpKSB7XG4gICAgcmV0dXJuIGJhc2VTdGF0dXM7XG4gIH1cblxuICBjb25zdCBmYWxsYmFja1N0YXR1cyA9IGJ1aWxkRmFsbGJhY2tQZXJtaXNzaW9uSG9va1N0YXR1cyhiYXNlU3RhdHVzLCBub3JtYWxpemVkSG9zdCwgaG9tZURpcik7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB7IGF1ZGl0LCBhdXRvUmVwYWlyZWQgfSA9IGF3YWl0IGF1ZGl0QW5kTWF5YmVSZXBhaXJIb29rQXNzZXRzKFxuICAgICAgbm9ybWFsaXplZEhvc3QsXG4gICAgICBob21lRGlyLFxuICAgICAgc291cmNlU2NyaXB0UGF0aCxcbiAgICAgIGF1dG9SZXBhaXIsXG4gICAgICBmYWxsYmFja1N0YXR1cyxcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmZhbGxiYWNrU3RhdHVzLFxuICAgICAgYXNzZXRzUHJlcGFyZWQ6IGF1ZGl0LmFzc2V0c1ByZXBhcmVkLFxuICAgICAgYXNzZXRzQ3VycmVudDogYXVkaXQuYXNzZXRzQ3VycmVudCxcbiAgICAgIGF1dG9SZXBhaXJlZCxcbiAgICAgIG5lZWRzUmVwYWlyOiAhYXVkaXQuYXNzZXRzQ3VycmVudCxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBidWlsZEhvb2tSZXBhaXJGYWlsdXJlU3RhdHVzKGZhbGxiYWNrU3RhdHVzLCBlcnJvcik7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBlcm1pc3Npb25Ib29rQXVkaXRTdW1tYXJ5KGhvbWVEaXIgPSBob21lZGlyKCkpOiBQcm9taXNlPFBlcm1pc3Npb25Ib29rQXVkaXRTdW1tYXJ5PiB7XG4gIGNvbnN0IHN0YXR1c2VzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQVVUT19SRVBBSVJBQkxFX0hPT0tfSE9TVFMubWFwKGFzeW5jIChob3N0KSA9PiAoe1xuICAgICAgaG9zdCxcbiAgICAgIHN0YXR1czogYXdhaXQgcmVjb25jaWxlUGVybWlzc2lvbkhvb2tTdGF0dXMoaG9zdCwgeyBob21lRGlyIH0pLFxuICAgIH0pKSxcbiAgKTtcblxuICBjb25zdCBpbnN0YWxsZWRIb3N0cyA9IHN0YXR1c2VzXG4gICAgLmZpbHRlcigoeyBzdGF0dXMgfSkgPT4gc3RhdHVzLmluc3RhbGxlZCB8fCBzdGF0dXMuYXNzZXRzUHJlcGFyZWQpXG4gICAgLm1hcCgoeyBob3N0IH0pID0+IGhvc3QpO1xuICBjb25zdCBjdXJyZW50SG9zdHMgPSBzdGF0dXNlc1xuICAgIC5maWx0ZXIoKHsgc3RhdHVzIH0pID0+IHN0YXR1cy5hc3NldHNDdXJyZW50KVxuICAgIC5tYXAoKHsgaG9zdCB9KSA9PiBob3N0KTtcbiAgY29uc3QgcmVwYWlyZWRIb3N0cyA9IHN0YXR1c2VzXG4gICAgLmZpbHRlcigoeyBzdGF0dXMgfSkgPT4gc3RhdHVzLmF1dG9SZXBhaXJlZClcbiAgICAubWFwKCh7IGhvc3QgfSkgPT4gaG9zdCk7XG4gIGNvbnN0IG5lZWRzUmVwYWlySG9zdHMgPSBzdGF0dXNlc1xuICAgIC5maWx0ZXIoKHsgc3RhdHVzIH0pID0+IHN0YXR1cy5uZWVkc1JlcGFpcilcbiAgICAubWFwKCh7IGhvc3QgfSkgPT4gaG9zdCk7XG5cbiAgcmV0dXJuIHtcbiAgICBpbnN0YWxsZWRIb3N0cyxcbiAgICBjdXJyZW50SG9zdHMsXG4gICAgcmVwYWlyZWRIb3N0cyxcbiAgICBuZWVkc1JlcGFpckhvc3RzLFxuICAgIGxhc3RTdGFydHVwUmVwYWlyOiBnZXRMYXN0UGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlyU3VtbWFyeSgpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRIb29rSG9zdExhYmVsKGNvdW50OiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7Y291bnR9IGhvb2sgaG9zdCR7Y291bnQgPT09IDEgPyAnJyA6ICdzJ31gO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRIb29rVmVyYihjb3VudDogbnVtYmVyLCBzaW5ndWxhcjogc3RyaW5nLCBwbHVyYWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBjb3VudCA9PT0gMSA/IHNpbmd1bGFyIDogcGx1cmFsO1xufVxuXG5mdW5jdGlvbiBidWlsZFBlcm1pc3Npb25Ib29rSGVhbHRoTWVzc2FnZShcbiAgc3VtbWFyeTogUGVybWlzc2lvbkhvb2tBdWRpdFN1bW1hcnksXG4gIGhhZEVycm9yczogYm9vbGVhbixcbiAgcmVwYWlyZWRDb3VudDogbnVtYmVyLFxuICBuZWVkc1JlcGFpckNvdW50OiBudW1iZXIsXG4pOiBzdHJpbmcge1xuICBpZiAoaGFkRXJyb3JzKSB7XG4gICAgaWYgKG5lZWRzUmVwYWlyQ291bnQgPiAwKSB7XG4gICAgICBjb25zdCBob3N0TGFiZWwgPSBmb3JtYXRIb29rSG9zdExhYmVsKG5lZWRzUmVwYWlyQ291bnQpO1xuICAgICAgY29uc3QgdmVyYiA9IGZvcm1hdEhvb2tWZXJiKG5lZWRzUmVwYWlyQ291bnQsICduZWVkcycsICduZWVkJyk7XG4gICAgICByZXR1cm4gYCR7aG9zdExhYmVsfSBzdGlsbCAke3ZlcmJ9IGF0dGVudGlvbiBhZnRlciBzdGFydHVwIHJlcGFpcmA7XG4gICAgfVxuXG4gICAgcmV0dXJuICdBIHN0YXJ0dXAgaG9vayByZXBhaXIgZmFpbGVkIGFuZCBuZWVkcyBhdHRlbnRpb24nO1xuICB9XG5cbiAgaWYgKG5lZWRzUmVwYWlyQ291bnQgPiAwKSB7XG4gICAgY29uc3QgaG9zdExhYmVsID0gZm9ybWF0SG9va0hvc3RMYWJlbChuZWVkc1JlcGFpckNvdW50KTtcbiAgICBjb25zdCB2ZXJiID0gZm9ybWF0SG9va1ZlcmIobmVlZHNSZXBhaXJDb3VudCwgJ25lZWRzJywgJ25lZWQnKTtcbiAgICByZXR1cm4gYCR7aG9zdExhYmVsfSBzdGlsbCAke3ZlcmJ9IHJlcGFpcmA7XG4gIH1cblxuICBpZiAocmVwYWlyZWRDb3VudCA+IDApIHtcbiAgICBjb25zdCBob3N0TGFiZWwgPSBmb3JtYXRIb29rSG9zdExhYmVsKHJlcGFpcmVkQ291bnQpO1xuICAgIHJldHVybiBgJHtob3N0TGFiZWx9IHJlcGFpcmVkIG9uIHN0YXJ0dXBgO1xuICB9XG5cbiAgaWYgKHN1bW1hcnkuY3VycmVudEhvc3RzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gJ01hbmFnZWQgaG9vayBhc3NldHMgYXJlIGN1cnJlbnQnO1xuICB9XG5cbiAgcmV0dXJuICdObyBtYW5hZ2VkIGhvb2sgYXNzZXRzIGN1cnJlbnRseSBpbnN0YWxsZWQnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VtbWFyaXplUGVybWlzc2lvbkhvb2tIZWFsdGgoXG4gIHN1bW1hcnk6IFBlcm1pc3Npb25Ib29rQXVkaXRTdW1tYXJ5LFxuKTogUGVybWlzc2lvbkhvb2tIZWFsdGhTdW1tYXJ5IHtcbiAgY29uc3QgbGFzdFN0YXJ0dXBSZXBhaXIgPSBzdW1tYXJ5Lmxhc3RTdGFydHVwUmVwYWlyO1xuICBjb25zdCBoYWRFcnJvcnMgPSBCb29sZWFuKFxuICAgIGxhc3RTdGFydHVwUmVwYWlyPy5ob3N0UmVzdWx0cy5zb21lKChyZXN1bHQpID0+IHJlc3VsdC5vdXRjb21lID09PSAnZXJyb3InKSxcbiAgKTtcbiAgY29uc3QgbmVlZHNSZXBhaXJDb3VudCA9IGxhc3RTdGFydHVwUmVwYWlyPy5uZWVkc1JlcGFpckNvdW50ID8/IHN1bW1hcnkubmVlZHNSZXBhaXJIb3N0cy5sZW5ndGg7XG4gIGNvbnN0IHJlcGFpcmVkQ291bnQgPSBsYXN0U3RhcnR1cFJlcGFpcj8ucmVwYWlyZWRDb3VudCA/PyBzdW1tYXJ5LnJlcGFpcmVkSG9zdHMubGVuZ3RoO1xuICBjb25zdCBtZXNzYWdlID0gYnVpbGRQZXJtaXNzaW9uSG9va0hlYWx0aE1lc3NhZ2UoXG4gICAgc3VtbWFyeSxcbiAgICBoYWRFcnJvcnMsXG4gICAgcmVwYWlyZWRDb3VudCxcbiAgICBuZWVkc1JlcGFpckNvdW50LFxuICApO1xuXG4gIGlmIChoYWRFcnJvcnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiAnZXJyb3InLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHJlcGFpcmVkQ291bnQsXG4gICAgICBuZWVkc1JlcGFpckNvdW50LFxuICAgICAgbGFzdENoZWNrZWRBdDogbGFzdFN0YXJ0dXBSZXBhaXI/LmNvbXBsZXRlZEF0LFxuICAgIH07XG4gIH1cblxuICBpZiAobmVlZHNSZXBhaXJDb3VudCA+IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiAnd2FybmluZycsXG4gICAgICBtZXNzYWdlLFxuICAgICAgcmVwYWlyZWRDb3VudCxcbiAgICAgIG5lZWRzUmVwYWlyQ291bnQsXG4gICAgICBsYXN0Q2hlY2tlZEF0OiBsYXN0U3RhcnR1cFJlcGFpcj8uY29tcGxldGVkQXQsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChyZXBhaXJlZENvdW50ID4gMCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6ICdvaycsXG4gICAgICBtZXNzYWdlLFxuICAgICAgcmVwYWlyZWRDb3VudCxcbiAgICAgIG5lZWRzUmVwYWlyQ291bnQsXG4gICAgICBsYXN0Q2hlY2tlZEF0OiBsYXN0U3RhcnR1cFJlcGFpcj8uY29tcGxldGVkQXQsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhdHVzOiAnb2snLFxuICAgIG1lc3NhZ2UsXG4gICAgcmVwYWlyZWRDb3VudCxcbiAgICBuZWVkc1JlcGFpckNvdW50LFxuICAgIGxhc3RDaGVja2VkQXQ6IGxhc3RTdGFydHVwUmVwYWlyPy5jb21wbGV0ZWRBdCxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGFpclBlcm1pc3Npb25Ib29rc09uU3RhcnR1cChcbiAgaG9tZURpciA9IGhvbWVkaXIoKSxcbiAgc291cmNlU2NyaXB0UGF0aD86IHN0cmluZyxcbik6IFByb21pc2U8UGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlyU3VtbWFyeT4ge1xuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICBjb25zdCBzdGFydGVkQXRJc28gPSBuZXcgRGF0ZShzdGFydGVkQXQpLnRvSVNPU3RyaW5nKCk7XG4gIGNvbnN0IGhvc3RSZXN1bHRzOiBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJIb3N0UmVzdWx0W10gPSBbXTtcblxuICAvLyBQcm9jZXNzIHNlcXVlbnRpYWxseSBiZWNhdXNlIHNldmVyYWwgaG9zdHMgc2hhcmUgdGhlIHNhbWUgYnJpZGdlL2hlbHBlclxuICAvLyB0YXJnZXRzIHVuZGVyIH4vLmRvbGxob3VzZS9ob29rcywgYW5kIGNvbmN1cnJlbnQgd3JpdGVzIGFyZSBmbGFreSBvbiBXaW5kb3dzLlxuICBmb3IgKGNvbnN0IGhvc3Qgb2YgQVVUT19SRVBBSVJBQkxFX0hPT0tfSE9TVFMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgcmVjb25jaWxlUGVybWlzc2lvbkhvb2tTdGF0dXMoaG9zdCwge1xuICAgICAgICBob21lRGlyLFxuICAgICAgICBhdXRvUmVwYWlyOiB0cnVlLFxuICAgICAgICBzb3VyY2VTY3JpcHRQYXRoLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChzdGF0dXMuYXV0b1JlcGFpcmVkKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBbUGVybWlzc2lvbkhvb2tzXSBSZWZyZXNoZWQgaW5zdGFsbGVkIGhvb2sgYXNzZXRzIGZvciAke2hvc3R9YCk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXR1cy5uZWVkc1JlcGFpciAmJiBzdGF0dXMuaW5zdGFsbGVkKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgIGBbUGVybWlzc2lvbkhvb2tzXSBIb29rIGFzc2V0cyBzdGlsbCBuZWVkIHJlcGFpciBmb3IgJHtob3N0fWAgK1xuICAgICAgICAgIChzdGF0dXMucmVwYWlyRXJyb3IgPyBgOiAke3N0YXR1cy5yZXBhaXJFcnJvcn1gIDogJycpLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBob3N0UmVzdWx0cy5wdXNoKHRvU3RhcnR1cFJlcGFpckhvc3RSZXN1bHQoaG9zdCwgc3RhdHVzKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBsb2dnZXIud2FybihgW1Blcm1pc3Npb25Ib29rc10gU3RhcnR1cCBob29rIHJlcGFpciBmYWlsZWQgZm9yICR7aG9zdH06ICR7bWVzc2FnZX1gKTtcbiAgICAgIGhvc3RSZXN1bHRzLnB1c2goe1xuICAgICAgICBob3N0LFxuICAgICAgICBpbnN0YWxsZWQ6IGZhbHNlLFxuICAgICAgICBhc3NldHNQcmVwYXJlZDogZmFsc2UsXG4gICAgICAgIGFzc2V0c0N1cnJlbnQ6IGZhbHNlLFxuICAgICAgICBhdXRvUmVwYWlyZWQ6IGZhbHNlLFxuICAgICAgICBuZWVkc1JlcGFpcjogdHJ1ZSxcbiAgICAgICAgcmVwYWlyRXJyb3I6IG1lc3NhZ2UsXG4gICAgICAgIG91dGNvbWU6ICdlcnJvcicsXG4gICAgICB9IHNhdGlzZmllcyBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJIb3N0UmVzdWx0KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcmVwYWlyZWRDb3VudCA9IGhvc3RSZXN1bHRzLmZpbHRlcigocmVzdWx0KSA9PiByZXN1bHQub3V0Y29tZSA9PT0gJ3JlcGFpcmVkJykubGVuZ3RoO1xuICBjb25zdCBuZWVkc1JlcGFpckNvdW50ID0gaG9zdFJlc3VsdHMuZmlsdGVyKChyZXN1bHQpID0+XG4gICAgcmVzdWx0Lm91dGNvbWUgPT09ICduZWVkc19yZXBhaXInIHx8IHJlc3VsdC5vdXRjb21lID09PSAnZXJyb3InKS5sZW5ndGg7XG4gIGNvbnN0IGNvbXBsZXRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgY29uc3Qgc3VtbWFyeTogUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlyU3VtbWFyeSA9IHtcbiAgICBzdGFydGVkQXQ6IHN0YXJ0ZWRBdElzbyxcbiAgICBjb21wbGV0ZWRBdDogbmV3IERhdGUoY29tcGxldGVkQXQpLnRvSVNPU3RyaW5nKCksXG4gICAgZHVyYXRpb25NczogY29tcGxldGVkQXQgLSBzdGFydGVkQXQsXG4gICAgcmVwYWlyZWRDb3VudCxcbiAgICBuZWVkc1JlcGFpckNvdW50LFxuICAgIGhvc3RSZXN1bHRzLFxuICB9O1xuICBsYXN0UGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlyU3VtbWFyeSA9IGNsb25lU3RhcnR1cFJlcGFpclN1bW1hcnkoc3VtbWFyeSk7XG4gIGxvZ2dlci5pbmZvKFxuICAgIGBbUGVybWlzc2lvbkhvb2tzXSBTdGFydHVwIGhvb2sgYXNzZXQgYXVkaXQgY29tcGxldGVkIGluICR7c3VtbWFyeS5kdXJhdGlvbk1zfW1zIGAgK1xuICAgIGAocmVwYWlyZWQ9JHtyZXBhaXJlZENvdW50fSwgbmVlZHNSZXBhaXI9JHtuZWVkc1JlcGFpckNvdW50fSlgLFxuICApO1xuICByZXR1cm4gc3VtbWFyeTtcbn1cbiJdfQ==
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbkhvb2tTdGF0dXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvcGVybWlzc2lvbkhvb2tTdGF0dXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNsQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFRTCwwQkFBMEIsRUFDMUIsZUFBZSxFQUNmLHNCQUFzQixFQUN0QiwyQkFBMkIsRUFDM0IsZ0NBQWdDLEVBQ2hDLHdCQUF3QixFQUN4Qix3QkFBd0IsRUFDeEIsaUJBQWlCLEVBQ2pCLGdDQUFnQyxFQUNoQywwQkFBMEIsRUFDMUIsdUJBQXVCLEVBQ3ZCLHlCQUF5QixHQUMxQixNQUFNLDJCQUEyQixDQUFDO0FBRW5DLElBQUksc0NBQXNDLEdBQThDLElBQUksQ0FBQztBQUU3RixNQUFNLFVBQVUsdUJBQXVCLENBQUMsT0FBTyxHQUFHLE9BQU8sRUFBRSxFQUFFLElBQWE7SUFDeEUsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULE9BQU8sMEJBQTBCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxPQUFPLHVCQUF1QixDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUVELE1BQU0sQ0FBQyxLQUFLLFVBQVUsNEJBQTRCLENBQUMsT0FBTyxHQUFHLE9BQU8sRUFBRSxFQUFFLElBQWE7SUFDbkYsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULE9BQU8sMEJBQTBCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxPQUFPLHVCQUF1QixDQUFDLE1BQU0sMkJBQTJCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUM3RSxDQUFDO0FBRUQsU0FBUyw0QkFBNEIsQ0FDbkMsTUFBNEIsRUFD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Z0JBQ2pCLFdBQVcsRUFBRSxPQUFPO2dCQUNwQixPQUFPLEVBQUUsT0FBTzthQUMrQixDQUFDLENBQUM7UUFDckQsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMzRixNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNyRCxNQUFNLENBQUMsT0FBTyxLQUFLLGNBQWMsSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUMxRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDL0IsTUFBTSxPQUFPLEdBQXVDO1FBQ2xELFNBQVMsRUFBRSxZQUFZO1FBQ3ZCLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxXQUFXLEVBQUU7UUFDaEQsVUFBVSxFQUFFLFdBQVcsR0FBRyxTQUFTO1FBQ25DLGFBQWE7UUFDYixnQkFBZ0I7UUFDaEIsV0FBVztLQUNaLENBQUM7SUFDRixzQ0FBc0MsR0FBRyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1RSxNQUFNLENBQUMsSUFBSSxDQUNULDJEQUEyRCxPQUFPLENBQUMsVUFBVSxLQUFLO1FBQ2xGLGFBQWEsYUFBYSxpQkFBaUIsZ0JBQWdCLEdBQUcsQ0FDL0QsQ0FBQztJQUNGLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5pbXBvcnQge1xuICB0eXBlIFBlcm1pc3Npb25Ib29rQXVkaXRTdW1tYXJ5LFxuICB0eXBlIFBlcm1pc3Npb25Ib29rSGVhbHRoU3VtbWFyeSxcbiAgdHlwZSBIb29rQXNzZXRBdWRpdFJlc3VsdCxcbiAgdHlwZSBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJIb3N0UmVzdWx0LFxuICB0eXBlIFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnksXG4gIHR5cGUgUGVybWlzc2lvbkhvb2tTdGF0dXMsXG4gIHR5cGUgUmVjb25jaWxlUGVybWlzc2lvbkhvb2tPcHRpb25zLFxuICBBVVRPX1JFUEFJUkFCTEVfSE9PS19IT1NUUyxcbiAgYXVkaXRIb29rQXNzZXRzLFxuICBjb2xsZWN0SG9va01hcmtlclBhdGhzLFxuICBjb2xsZWN0SG9va01hcmtlclBhdGhzQXN5bmMsXG4gIGdldFBlcm1pc3Npb25Ib29rRGlhZ25vc3RpY3NQYXRoLFxuICBnZXRQcmltYXJ5SG9va1NjcmlwdFBhdGgsXG4gIGluc3RhbGxIb29rQXNzZXRzRm9ySG9zdCxcbiAgbm9ybWFsaXplSG9va0hvc3QsXG4gIHJlYWRMYXN0UGVybWlzc2lvbkhvb2tEaWFnbm9zdGljLFxuICByZWFkSG9zdFNwZWNpZmljSG9va1N0YXR1cyxcbiAgc3VtbWFyaXplTWFya2VyU3RhdHVzZXMsXG4gIHN1cHBvcnRzTWFuYWdlZEhvb2tBc3NldHMsXG59IGZyb20gJy4vcGVybWlzc2lvbkhvb2tTaGFyZWQuanMnO1xuXG5sZXQgbGFzdFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnk6IFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkgfCBudWxsID0gbnVsbDtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBlcm1pc3Npb25Ib29rU3RhdHVzKGhvbWVEaXIgPSBob21lZGlyKCksIGhvc3Q/OiBzdHJpbmcpOiBQZXJtaXNzaW9uSG9va1N0YXR1cyB7XG4gIGlmIChob3N0KSB7XG4gICAgcmV0dXJuIHJlYWRIb3N0U3BlY2lmaWNIb29rU3RhdHVzKGhvbWVEaXIsIGhvc3QpO1xuICB9XG5cbiAgcmV0dXJuIHN1bW1hcml6ZU1hcmtlclN0YXR1c2VzKGNvbGxlY3RIb29rTWFya2VyUGF0aHMoaG9tZURpcikpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGVybWlzc2lvbkhvb2tTdGF0dXNBc3luYyhob21lRGlyID0gaG9tZWRpcigpLCBob3N0Pzogc3RyaW5nKTogUHJvbWlzZTxQZXJtaXNzaW9uSG9va1N0YXR1cz4ge1xuICBpZiAoaG9zdCkge1xuICAgIHJldHVybiByZWFkSG9zdFNwZWNpZmljSG9va1N0YXR1cyhob21lRGlyLCBob3N0KTtcbiAgfVxuXG4gIHJldHVybiBzdW1tYXJpemVNYXJrZXJTdGF0dXNlcyhhd2FpdCBjb2xsZWN0SG9va01hcmtlclBhdGhzQXN5bmMoaG9tZURpcikpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRBdHRlbXB0SG9va0Fzc2V0UmVwYWlyKFxuICBzdGF0dXM6IFBlcm1pc3Npb25Ib29rU3RhdHVzLFxuICBhdWRpdDogSG9va0Fzc2V0QXVkaXRSZXN1bHQsXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgc3RhdHVzLmluc3RhbGxlZFxuICAgIHx8IHN0YXR1cy5hc3NldHNQcmVwYXJlZFxuICAgIHx8IHN0YXR1cy5zY3JpcHRQYXRoXG4gICAgfHwgYXVkaXQuYXNzZXRzUHJlcGFyZWRcbiAgICB8fCBhdWRpdC5zdGFsZUFzc2V0cy5sZW5ndGggPiAwLFxuICApO1xufVxuXG5mdW5jdGlvbiBidWlsZEZhbGxiYWNrUGVybWlzc2lvbkhvb2tTdGF0dXMoXG4gIGJhc2VTdGF0dXM6IFBlcm1pc3Npb25Ib29rU3RhdHVzLFxuICBub3JtYWxpemVkSG9zdDogc3RyaW5nLFxuICBob21lRGlyOiBzdHJpbmcsXG4pOiBQZXJtaXNzaW9uSG9va1N0YXR1cyB7XG4gIHJldHVybiB7XG4gICAgLi4uYmFzZVN0YXR1cyxcbiAgICBob3N0OiBiYXNlU3RhdHVzLmhvc3QgPz8gbm9ybWFsaXplZEhvc3QsXG4gICAgc2NyaXB0UGF0aDogYmFzZVN0YXR1cy5zY3JpcHRQYXRoID8/IGdldFByaW1hcnlIb29rU2NyaXB0UGF0aChub3JtYWxpemVkSG9zdCwgaG9tZURpciksXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGF1ZGl0QW5kTWF5YmVSZXBhaXJIb29rQXNzZXRzKFxuICBub3JtYWxpemVkSG9zdDogc3RyaW5nLFxuICBob21lRGlyOiBzdHJpbmcsXG4gIHNvdXJjZVNjcmlwdFBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgYXV0b1JlcGFpcjogYm9vbGVhbixcbiAgZmFsbGJhY2tTdGF0dXM6IFBlcm1pc3Npb25Ib29rU3RhdHVzLFxuKTogUHJvbWlzZTx7IGF1ZGl0OiBIb29rQXNzZXRBdWRpdFJlc3VsdDsgYXV0b1JlcGFpcmVkOiBib29sZWFuIH0+IHtcbiAgbGV0IGF1ZGl0ID0gYXdhaXQgYXVkaXRIb29rQXNzZXRzKG5vcm1hbGl6ZWRIb3N0LCBob21lRGlyLCBzb3VyY2VTY3JpcHRQYXRoKTtcbiAgbGV0IGF1dG9SZXBhaXJlZCA9IGZhbHNlO1xuXG4gIGlmICghYXVkaXQuYXNzZXRzQ3VycmVudCAmJiBhdXRvUmVwYWlyICYmIHNob3VsZEF0dGVtcHRIb29rQXNzZXRSZXBhaXIoZmFsbGJhY2tTdGF0dXMsIGF1ZGl0KSkge1xuICAgIGF3YWl0IGluc3RhbGxIb29rQXNzZXRzRm9ySG9zdChub3JtYWxpemVkSG9zdCwgaG9tZURpciwgc291cmNlU2NyaXB0UGF0aCk7XG4gICAgYXVkaXQgPSBhd2FpdCBhdWRpdEhvb2tBc3NldHMobm9ybWFsaXplZEhvc3QsIGhvbWVEaXIsIHNvdXJjZVNjcmlwdFBhdGgpO1xuICAgIGF1dG9SZXBhaXJlZCA9IGF1ZGl0LmFzc2V0c0N1cnJlbnQ7XG4gIH1cblxuICByZXR1cm4geyBhdWRpdCwgYXV0b1JlcGFpcmVkIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkSG9va1JlcGFpckZhaWx1cmVTdGF0dXMoXG4gIGZhbGxiYWNrU3RhdHVzOiBQZXJtaXNzaW9uSG9va1N0YXR1cyxcbiAgZXJyb3I6IHVua25vd24sXG4pOiBQZXJtaXNzaW9uSG9va1N0YXR1cyB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gIGxvZ2dlci53YXJuKGBbUGVybWlzc2lvbkhvb2tzXSBGYWlsZWQgdG8gcmVjb25jaWxlIGhvb2sgYXNzZXRzIGZvciAke2ZhbGxiYWNrU3RhdHVzLmhvc3R9OiAke21lc3NhZ2V9YCk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5mYWxsYmFja1N0YXR1cyxcbiAgICBhc3NldHNDdXJyZW50OiBmYWxzZSxcbiAgICBhdXRvUmVwYWlyZWQ6IGZhbHNlLFxuICAgIG5lZWRzUmVwYWlyOiB0cnVlLFxuICAgIHJlcGFpckVycm9yOiBtZXNzYWdlLFxuICB9O1xufVxuXG5mdW5jdGlvbiB0b1N0YXJ0dXBSZXBhaXJPdXRjb21lKHN0YXR1czogUGVybWlzc2lvbkhvb2tTdGF0dXMpOiBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJIb3N0UmVzdWx0WydvdXRjb21lJ10ge1xuICBpZiAoc3RhdHVzLnJlcGFpckVycm9yKSByZXR1cm4gJ2Vycm9yJztcbiAgaWYgKHN0YXR1cy5hdXRvUmVwYWlyZWQpIHJldHVybiAncmVwYWlyZWQnO1xuICBpZiAoc3RhdHVzLm5lZWRzUmVwYWlyICYmIChzdGF0dXMuaW5zdGFsbGVkIHx8IHN0YXR1cy5hc3NldHNQcmVwYXJlZCkpIHJldHVybiAnbmVlZHNfcmVwYWlyJztcbiAgaWYgKHN0YXR1cy5hc3NldHNDdXJyZW50KSByZXR1cm4gJ2N1cnJlbnQnO1xuICByZXR1cm4gJ25vdF9pbnN0YWxsZWQnO1xufVxuXG5mdW5jdGlvbiB0b1N0YXJ0dXBSZXBhaXJIb3N0UmVzdWx0KFxuICBob3N0OiBzdHJpbmcsXG4gIHN0YXR1czogUGVybWlzc2lvbkhvb2tTdGF0dXMsXG4pOiBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJIb3N0UmVzdWx0IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0dXMsXG4gICAgaG9zdCxcbiAgICBvdXRjb21lOiB0b1N0YXJ0dXBSZXBhaXJPdXRjb21lKHN0YXR1cyksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsb25lU3RhcnR1cFJlcGFpclN1bW1hcnkoXG4gIHN1bW1hcnk6IFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkgfCBudWxsLFxuKTogUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlyU3VtbWFyeSB8IG51bGwge1xuICBpZiAoIXN1bW1hcnkpIHJldHVybiBudWxsO1xuICByZXR1cm4ge1xuICAgIC4uLnN1bW1hcnksXG4gICAgaG9zdFJlc3VsdHM6IHN1bW1hcnkuaG9zdFJlc3VsdHMubWFwKChyZXN1bHQpID0+ICh7IC4uLnJlc3VsdCB9KSksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0UGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlyU3VtbWFyeSgpOiBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5IHwgbnVsbCB7XG4gIHJldHVybiBjbG9uZVN0YXJ0dXBSZXBhaXJTdW1tYXJ5KGxhc3RQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9yZXNldFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnlGb3JUZXN0cygpOiB2b2lkIHtcbiAgbGFzdFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkgPSBudWxsO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVjb25jaWxlUGVybWlzc2lvbkhvb2tTdGF0dXMoXG4gIGhvc3Q6IHN0cmluZyxcbiAgb3B0aW9uczogUmVjb25jaWxlUGVybWlzc2lvbkhvb2tPcHRpb25zID0ge30sXG4pOiBQcm9taXNlPFBlcm1pc3Npb25Ib29rU3RhdHVzPiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRIb3N0ID0gbm9ybWFsaXplSG9va0hvc3QoaG9zdCk7XG4gIGNvbnN0IGhvbWVEaXIgPSBvcHRpb25zLmhvbWVEaXIgPz8gaG9tZWRpcigpO1xuICBjb25zdCBzb3VyY2VTY3JpcHRQYXRoID0gb3B0aW9ucy5zb3VyY2VTY3JpcHRQYXRoO1xuICBjb25zdCBhdXRvUmVwYWlyID0gb3B0aW9ucy5hdXRvUmVwYWlyID8/IGZhbHNlO1xuICBjb25zdCBiYXNlU3RhdHVzID0gcmVhZEhvc3RTcGVjaWZpY0hvb2tTdGF0dXMoaG9tZURpciwgbm9ybWFsaXplZEhvc3QpO1xuXG4gIGlmICghc3VwcG9ydHNNYW5hZ2VkSG9va0Fzc2V0cyhub3JtYWxpemVkSG9zdCkpIHtcbiAgICByZXR1cm4gYmFzZVN0YXR1cztcbiAgfVxuXG4gIGNvbnN0IGZhbGxiYWNrU3RhdHVzID0gYnVpbGRGYWxsYmFja1Blcm1pc3Npb25Ib29rU3RhdHVzKGJhc2VTdGF0dXMsIG5vcm1hbGl6ZWRIb3N0LCBob21lRGlyKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHsgYXVkaXQsIGF1dG9SZXBhaXJlZCB9ID0gYXdhaXQgYXVkaXRBbmRNYXliZVJlcGFpckhvb2tBc3NldHMoXG4gICAgICBub3JtYWxpemVkSG9zdCxcbiAgICAgIGhvbWVEaXIsXG4gICAgICBzb3VyY2VTY3JpcHRQYXRoLFxuICAgICAgYXV0b1JlcGFpcixcbiAgICAgIGZhbGxiYWNrU3RhdHVzLFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZmFsbGJhY2tTdGF0dXMsXG4gICAgICBhc3NldHNQcmVwYXJlZDogYXVkaXQuYXNzZXRzUHJlcGFyZWQsXG4gICAgICBhc3NldHNDdXJyZW50OiBhdWRpdC5hc3NldHNDdXJyZW50LFxuICAgICAgYXV0b1JlcGFpcmVkLFxuICAgICAgbmVlZHNSZXBhaXI6ICFhdWRpdC5hc3NldHNDdXJyZW50LFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGJ1aWxkSG9va1JlcGFpckZhaWx1cmVTdGF0dXMoZmFsbGJhY2tTdGF0dXMsIGVycm9yKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGVybWlzc2lvbkhvb2tBdWRpdFN1bW1hcnkoaG9tZURpciA9IGhvbWVkaXIoKSk6IFByb21pc2U8UGVybWlzc2lvbkhvb2tBdWRpdFN1bW1hcnk+IHtcbiAgY29uc3Qgc3RhdHVzZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBVVRPX1JFUEFJUkFCTEVfSE9PS19IT1NUUy5tYXAoYXN5bmMgKGhvc3QpID0+ICh7XG4gICAgICBob3N0LFxuICAgICAgc3RhdHVzOiBhd2FpdCByZWNvbmNpbGVQZXJtaXNzaW9uSG9va1N0YXR1cyhob3N0LCB7IGhvbWVEaXIgfSksXG4gICAgfSkpLFxuICApO1xuXG4gIGNvbnN0IGluc3RhbGxlZEhvc3RzID0gc3RhdHVzZXNcbiAgICAuZmlsdGVyKCh7IHN0YXR1cyB9KSA9PiBzdGF0dXMuaW5zdGFsbGVkIHx8IHN0YXR1cy5hc3NldHNQcmVwYXJlZClcbiAgICAubWFwKCh7IGhvc3QgfSkgPT4gaG9zdCk7XG4gIGNvbnN0IGN1cnJlbnRIb3N0cyA9IHN0YXR1c2VzXG4gICAgLmZpbHRlcigoeyBzdGF0dXMgfSkgPT4gc3RhdHVzLmFzc2V0c0N1cnJlbnQpXG4gICAgLm1hcCgoeyBob3N0IH0pID0+IGhvc3QpO1xuICBjb25zdCByZXBhaXJlZEhvc3RzID0gc3RhdHVzZXNcbiAgICAuZmlsdGVyKCh7IHN0YXR1cyB9KSA9PiBzdGF0dXMuYXV0b1JlcGFpcmVkKVxuICAgIC5tYXAoKHsgaG9zdCB9KSA9PiBob3N0KTtcbiAgY29uc3QgbmVlZHNSZXBhaXJIb3N0cyA9IHN0YXR1c2VzXG4gICAgLmZpbHRlcigoeyBzdGF0dXMgfSkgPT4gc3RhdHVzLm5lZWRzUmVwYWlyKVxuICAgIC5tYXAoKHsgaG9zdCB9KSA9PiBob3N0KTtcbiAgY29uc3QgZGlhZ25vc3RpY3NQYXRoID0gZ2V0UGVybWlzc2lvbkhvb2tEaWFnbm9zdGljc1BhdGgoaG9tZURpcik7XG4gIGNvbnN0IGxhc3REaWFnbm9zdGljID0gYXdhaXQgcmVhZExhc3RQZXJtaXNzaW9uSG9va0RpYWdub3N0aWMoaG9tZURpcik7XG5cbiAgcmV0dXJuIHtcbiAgICBpbnN0YWxsZWRIb3N0cyxcbiAgICBjdXJyZW50SG9zdHMsXG4gICAgcmVwYWlyZWRIb3N0cyxcbiAgICBuZWVkc1JlcGFpckhvc3RzLFxuICAgIGRpYWdub3N0aWNzUGF0aCxcbiAgICBsYXN0RGlhZ25vc3RpYyxcbiAgICBsYXN0U3RhcnR1cFJlcGFpcjogZ2V0TGFzdFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkoKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0SG9va0hvc3RMYWJlbChjb3VudDogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke2NvdW50fSBob29rIGhvc3Qke2NvdW50ID09PSAxID8gJycgOiAncyd9YDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0SG9va1ZlcmIoY291bnQ6IG51bWJlciwgc2luZ3VsYXI6IHN0cmluZywgcGx1cmFsOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY291bnQgPT09IDEgPyBzaW5ndWxhciA6IHBsdXJhbDtcbn1cblxuZnVuY3Rpb24gYnVpbGRQZXJtaXNzaW9uSG9va0hlYWx0aE1lc3NhZ2UoXG4gIHN1bW1hcnk6IFBlcm1pc3Npb25Ib29rQXVkaXRTdW1tYXJ5LFxuICBoYWRFcnJvcnM6IGJvb2xlYW4sXG4gIHJlcGFpcmVkQ291bnQ6IG51bWJlcixcbiAgbmVlZHNSZXBhaXJDb3VudDogbnVtYmVyLFxuKTogc3RyaW5nIHtcbiAgaWYgKGhhZEVycm9ycykge1xuICAgIGlmIChuZWVkc1JlcGFpckNvdW50ID4gMCkge1xuICAgICAgY29uc3QgaG9zdExhYmVsID0gZm9ybWF0SG9va0hvc3RMYWJlbChuZWVkc1JlcGFpckNvdW50KTtcbiAgICAgIGNvbnN0IHZlcmIgPSBmb3JtYXRIb29rVmVyYihuZWVkc1JlcGFpckNvdW50LCAnbmVlZHMnLCAnbmVlZCcpO1xuICAgICAgcmV0dXJuIGAke2hvc3RMYWJlbH0gc3RpbGwgJHt2ZXJifSBhdHRlbnRpb24gYWZ0ZXIgc3RhcnR1cCByZXBhaXJgO1xuICAgIH1cblxuICAgIHJldHVybiAnQSBzdGFydHVwIGhvb2sgcmVwYWlyIGZhaWxlZCBhbmQgbmVlZHMgYXR0ZW50aW9uJztcbiAgfVxuXG4gIGlmIChuZWVkc1JlcGFpckNvdW50ID4gMCkge1xuICAgIGNvbnN0IGhvc3RMYWJlbCA9IGZvcm1hdEhvb2tIb3N0TGFiZWwobmVlZHNSZXBhaXJDb3VudCk7XG4gICAgY29uc3QgdmVyYiA9IGZvcm1hdEhvb2tWZXJiKG5lZWRzUmVwYWlyQ291bnQsICduZWVkcycsICduZWVkJyk7XG4gICAgcmV0dXJuIGAke2hvc3RMYWJlbH0gc3RpbGwgJHt2ZXJifSByZXBhaXJgO1xuICB9XG5cbiAgaWYgKHJlcGFpcmVkQ291bnQgPiAwKSB7XG4gICAgY29uc3QgaG9zdExhYmVsID0gZm9ybWF0SG9va0hvc3RMYWJlbChyZXBhaXJlZENvdW50KTtcbiAgICByZXR1cm4gYCR7aG9zdExhYmVsfSByZXBhaXJlZCBvbiBzdGFydHVwYDtcbiAgfVxuXG4gIGlmIChzdW1tYXJ5LmN1cnJlbnRIb3N0cy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuICdNYW5hZ2VkIGhvb2sgYXNzZXRzIGFyZSBjdXJyZW50JztcbiAgfVxuXG4gIHJldHVybiAnTm8gbWFuYWdlZCBob29rIGFzc2V0cyBjdXJyZW50bHkgaW5zdGFsbGVkJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1bW1hcml6ZVBlcm1pc3Npb25Ib29rSGVhbHRoKFxuICBzdW1tYXJ5OiBQZXJtaXNzaW9uSG9va0F1ZGl0U3VtbWFyeSxcbik6IFBlcm1pc3Npb25Ib29rSGVhbHRoU3VtbWFyeSB7XG4gIGNvbnN0IGxhc3RTdGFydHVwUmVwYWlyID0gc3VtbWFyeS5sYXN0U3RhcnR1cFJlcGFpcjtcbiAgY29uc3QgaGFkRXJyb3JzID0gQm9vbGVhbihcbiAgICBsYXN0U3RhcnR1cFJlcGFpcj8uaG9zdFJlc3VsdHMuc29tZSgocmVzdWx0KSA9PiByZXN1bHQub3V0Y29tZSA9PT0gJ2Vycm9yJyksXG4gICk7XG4gIGNvbnN0IG5lZWRzUmVwYWlyQ291bnQgPSBsYXN0U3RhcnR1cFJlcGFpcj8ubmVlZHNSZXBhaXJDb3VudCA/PyBzdW1tYXJ5Lm5lZWRzUmVwYWlySG9zdHMubGVuZ3RoO1xuICBjb25zdCByZXBhaXJlZENvdW50ID0gbGFzdFN0YXJ0dXBSZXBhaXI/LnJlcGFpcmVkQ291bnQgPz8gc3VtbWFyeS5yZXBhaXJlZEhvc3RzLmxlbmd0aDtcbiAgY29uc3QgbWVzc2FnZSA9IGJ1aWxkUGVybWlzc2lvbkhvb2tIZWFsdGhNZXNzYWdlKFxuICAgIHN1bW1hcnksXG4gICAgaGFkRXJyb3JzLFxuICAgIHJlcGFpcmVkQ291bnQsXG4gICAgbmVlZHNSZXBhaXJDb3VudCxcbiAgKTtcblxuICBpZiAoaGFkRXJyb3JzKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICByZXBhaXJlZENvdW50LFxuICAgICAgbmVlZHNSZXBhaXJDb3VudCxcbiAgICAgIGxhc3RDaGVja2VkQXQ6IGxhc3RTdGFydHVwUmVwYWlyPy5jb21wbGV0ZWRBdCxcbiAgICB9O1xuICB9XG5cbiAgaWYgKG5lZWRzUmVwYWlyQ291bnQgPiAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogJ3dhcm5pbmcnLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHJlcGFpcmVkQ291bnQsXG4gICAgICBuZWVkc1JlcGFpckNvdW50LFxuICAgICAgbGFzdENoZWNrZWRBdDogbGFzdFN0YXJ0dXBSZXBhaXI/LmNvbXBsZXRlZEF0LFxuICAgIH07XG4gIH1cblxuICBpZiAocmVwYWlyZWRDb3VudCA+IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiAnb2snLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHJlcGFpcmVkQ291bnQsXG4gICAgICBuZWVkc1JlcGFpckNvdW50LFxuICAgICAgbGFzdENoZWNrZWRBdDogbGFzdFN0YXJ0dXBSZXBhaXI/LmNvbXBsZXRlZEF0LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXR1czogJ29rJyxcbiAgICBtZXNzYWdlLFxuICAgIHJlcGFpcmVkQ291bnQsXG4gICAgbmVlZHNSZXBhaXJDb3VudCxcbiAgICBsYXN0Q2hlY2tlZEF0OiBsYXN0U3RhcnR1cFJlcGFpcj8uY29tcGxldGVkQXQsXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXBhaXJQZXJtaXNzaW9uSG9va3NPblN0YXJ0dXAoXG4gIGhvbWVEaXIgPSBob21lZGlyKCksXG4gIHNvdXJjZVNjcmlwdFBhdGg/OiBzdHJpbmcsXG4pOiBQcm9taXNlPFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnk+IHtcbiAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgY29uc3Qgc3RhcnRlZEF0SXNvID0gbmV3IERhdGUoc3RhcnRlZEF0KS50b0lTT1N0cmluZygpO1xuICBjb25zdCBob3N0UmVzdWx0czogUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlySG9zdFJlc3VsdFtdID0gW107XG5cbiAgLy8gUHJvY2VzcyBzZXF1ZW50aWFsbHkgYmVjYXVzZSBzZXZlcmFsIGhvc3RzIHNoYXJlIHRoZSBzYW1lIGJyaWRnZS9oZWxwZXJcbiAgLy8gdGFyZ2V0cyB1bmRlciB+Ly5kb2xsaG91c2UvaG9va3MsIGFuZCBjb25jdXJyZW50IHdyaXRlcyBhcmUgZmxha3kgb24gV2luZG93cy5cbiAgZm9yIChjb25zdCBob3N0IG9mIEFVVE9fUkVQQUlSQUJMRV9IT09LX0hPU1RTKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IHJlY29uY2lsZVBlcm1pc3Npb25Ib29rU3RhdHVzKGhvc3QsIHtcbiAgICAgICAgaG9tZURpcixcbiAgICAgICAgYXV0b1JlcGFpcjogdHJ1ZSxcbiAgICAgICAgc291cmNlU2NyaXB0UGF0aCxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc3RhdHVzLmF1dG9SZXBhaXJlZCkge1xuICAgICAgICBsb2dnZXIuaW5mbyhgW1Blcm1pc3Npb25Ib29rc10gUmVmcmVzaGVkIGluc3RhbGxlZCBob29rIGFzc2V0cyBmb3IgJHtob3N0fWApO1xuICAgICAgfSBlbHNlIGlmIChzdGF0dXMubmVlZHNSZXBhaXIgJiYgc3RhdHVzLmluc3RhbGxlZCkge1xuICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICBgW1Blcm1pc3Npb25Ib29rc10gSG9vayBhc3NldHMgc3RpbGwgbmVlZCByZXBhaXIgZm9yICR7aG9zdH1gICtcbiAgICAgICAgICAoc3RhdHVzLnJlcGFpckVycm9yID8gYDogJHtzdGF0dXMucmVwYWlyRXJyb3J9YCA6ICcnKSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaG9zdFJlc3VsdHMucHVzaCh0b1N0YXJ0dXBSZXBhaXJIb3N0UmVzdWx0KGhvc3QsIHN0YXR1cykpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgbG9nZ2VyLndhcm4oYFtQZXJtaXNzaW9uSG9va3NdIFN0YXJ0dXAgaG9vayByZXBhaXIgZmFpbGVkIGZvciAke2hvc3R9OiAke21lc3NhZ2V9YCk7XG4gICAgICBob3N0UmVzdWx0cy5wdXNoKHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgaW5zdGFsbGVkOiBmYWxzZSxcbiAgICAgICAgYXNzZXRzUHJlcGFyZWQ6IGZhbHNlLFxuICAgICAgICBhc3NldHNDdXJyZW50OiBmYWxzZSxcbiAgICAgICAgYXV0b1JlcGFpcmVkOiBmYWxzZSxcbiAgICAgICAgbmVlZHNSZXBhaXI6IHRydWUsXG4gICAgICAgIHJlcGFpckVycm9yOiBtZXNzYWdlLFxuICAgICAgICBvdXRjb21lOiAnZXJyb3InLFxuICAgICAgfSBzYXRpc2ZpZXMgUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlySG9zdFJlc3VsdCk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHJlcGFpcmVkQ291bnQgPSBob3N0UmVzdWx0cy5maWx0ZXIoKHJlc3VsdCkgPT4gcmVzdWx0Lm91dGNvbWUgPT09ICdyZXBhaXJlZCcpLmxlbmd0aDtcbiAgY29uc3QgbmVlZHNSZXBhaXJDb3VudCA9IGhvc3RSZXN1bHRzLmZpbHRlcigocmVzdWx0KSA9PlxuICAgIHJlc3VsdC5vdXRjb21lID09PSAnbmVlZHNfcmVwYWlyJyB8fCByZXN1bHQub3V0Y29tZSA9PT0gJ2Vycm9yJykubGVuZ3RoO1xuICBjb25zdCBjb21wbGV0ZWRBdCA9IERhdGUubm93KCk7XG4gIGNvbnN0IHN1bW1hcnk6IFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkgPSB7XG4gICAgc3RhcnRlZEF0OiBzdGFydGVkQXRJc28sXG4gICAgY29tcGxldGVkQXQ6IG5ldyBEYXRlKGNvbXBsZXRlZEF0KS50b0lTT1N0cmluZygpLFxuICAgIGR1cmF0aW9uTXM6IGNvbXBsZXRlZEF0IC0gc3RhcnRlZEF0LFxuICAgIHJlcGFpcmVkQ291bnQsXG4gICAgbmVlZHNSZXBhaXJDb3VudCxcbiAgICBob3N0UmVzdWx0cyxcbiAgfTtcbiAgbGFzdFBlcm1pc3Npb25Ib29rU3RhcnR1cFJlcGFpclN1bW1hcnkgPSBjbG9uZVN0YXJ0dXBSZXBhaXJTdW1tYXJ5KHN1bW1hcnkpO1xuICBsb2dnZXIuaW5mbyhcbiAgICBgW1Blcm1pc3Npb25Ib29rc10gU3RhcnR1cCBob29rIGFzc2V0IGF1ZGl0IGNvbXBsZXRlZCBpbiAke3N1bW1hcnkuZHVyYXRpb25Nc31tcyBgICtcbiAgICBgKHJlcGFpcmVkPSR7cmVwYWlyZWRDb3VudH0sIG5lZWRzUmVwYWlyPSR7bmVlZHNSZXBhaXJDb3VudH0pYCxcbiAgKTtcbiAgcmV0dXJuIHN1bW1hcnk7XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- export { AUTO_REPAIRABLE_HOOK_HOSTS, MANAGED_HOOK_WRAPPER_BASENAMES, WRAPPER_HOOK_HOSTS, type HookAssetAuditResult, type HookAssetDescriptor, type InstallPermissionHookOptions, type InstallPermissionHookResult, type PermissionHookAuditSummary, type PermissionHookHealthSummary, type PermissionHookMarker, type PermissionHookStartupRepairHostResult, type PermissionHookStartupRepairSummary, type PermissionHookStatus, type ReconcilePermissionHookOptions, detectIndent, getClaudeHookSettingsPath, getCodexConfigPath, getCodexHookSettingsPath, getCursorHookSettingsPath, getGeminiHookSettingsPath, getHookSourcePath, getHookWrapperBasename, getHookWrapperPath, getManagedHookAssets, getPermissionHookMarkerPath, getPermissionHookScriptPath, getPrimaryHookScriptPath, getVsCodeHookSettingsPath, getVsCodeUserSettingsPath, getWindsurfHookSettingsPath, installHookAssetsForHost, isMissingFileError, normalizeHookHost, readOptionalUtf8, supportsManagedHookAssets, writeBackupIfPresent, } from './permissionHookShared.js';
1
+ export { AUTO_REPAIRABLE_HOOK_HOSTS, MANAGED_HOOK_WRAPPER_BASENAMES, WRAPPER_HOOK_HOSTS, type HookAssetAuditResult, type HookAssetDescriptor, type InstallPermissionHookOptions, type InstallPermissionHookResult, type PermissionHookAuditSummary, type PermissionHookDiagnosticRecord, type PermissionHookHealthSummary, type PermissionHookMarker, type PermissionHookStartupRepairHostResult, type PermissionHookStartupRepairSummary, type PermissionHookStatus, type ReconcilePermissionHookOptions, detectIndent, getClaudeHookSettingsPath, getCodexConfigPath, getPermissionHookDiagnosticsPath, getCodexHookSettingsPath, getCursorHookSettingsPath, getGeminiHookSettingsPath, getHookSourcePath, getHookWrapperBasename, getHookWrapperPath, getManagedHookAssets, getPermissionHookMarkerPath, getPermissionHookScriptPath, getPrimaryHookScriptPath, getVsCodeHookSettingsPath, getVsCodeUserSettingsPath, getWindsurfHookSettingsPath, installHookAssetsForHost, isMissingFileError, normalizeHookHost, readLastPermissionHookDiagnostic, readOptionalUtf8, supportsManagedHookAssets, writeBackupIfPresent, } from './permissionHookShared.js';
2
2
  export { ensureClaudePreToolUseHook, ensureCodexPreToolUseHook, ensureCursorPreToolUseHook, ensureGeminiBeforeToolHook, ensureVsCodePreToolUseHook, ensureWindsurfHooks, installPermissionHook, } from './permissionHookInstallers.js';
3
3
  export { _resetPermissionHookStartupRepairSummaryForTests, getLastPermissionHookStartupRepairSummary, getPermissionHookAuditSummary, getPermissionHookStatus, getPermissionHookStatusAsync, reconcilePermissionHookStatus, repairPermissionHooksOnStartup, summarizePermissionHookHealth, } from './permissionHookStatus.js';
4
4
  //# sourceMappingURL=permissionHooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"permissionHooks.d.ts","sourceRoot":"","sources":["../../src/utils/permissionHooks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,EAC9B,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EACzB,KAAK,qCAAqC,EAC1C,KAAK,kCAAkC,EACvC,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EACnC,YAAY,EACZ,yBAAyB,EACzB,kBAAkB,EAClB,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,2BAA2B,EAC3B,2BAA2B,EAC3B,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,gDAAgD,EAChD,yCAAyC,EACzC,6BAA6B,EAC7B,uBAAuB,EACvB,4BAA4B,EAC5B,6BAA6B,EAC7B,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"permissionHooks.d.ts","sourceRoot":"","sources":["../../src/utils/permissionHooks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,8BAA8B,EAC9B,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,8BAA8B,EACnC,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EACzB,KAAK,qCAAqC,EAC1C,KAAK,kCAAkC,EACvC,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EACnC,YAAY,EACZ,yBAAyB,EACzB,kBAAkB,EAClB,gCAAgC,EAChC,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,2BAA2B,EAC3B,2BAA2B,EAC3B,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,gCAAgC,EAChC,gBAAgB,EAChB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,0BAA0B,EAC1B,yBAAyB,EACzB,0BAA0B,EAC1B,0BAA0B,EAC1B,0BAA0B,EAC1B,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,gDAAgD,EAChD,yCAAyC,EACzC,6BAA6B,EAC7B,uBAAuB,EACvB,4BAA4B,EAC5B,6BAA6B,EAC7B,8BAA8B,EAC9B,6BAA6B,GAC9B,MAAM,2BAA2B,CAAC"}
@@ -1,4 +1,4 @@
1
- export { AUTO_REPAIRABLE_HOOK_HOSTS, MANAGED_HOOK_WRAPPER_BASENAMES, WRAPPER_HOOK_HOSTS, detectIndent, getClaudeHookSettingsPath, getCodexConfigPath, getCodexHookSettingsPath, getCursorHookSettingsPath, getGeminiHookSettingsPath, getHookSourcePath, getHookWrapperBasename, getHookWrapperPath, getManagedHookAssets, getPermissionHookMarkerPath, getPermissionHookScriptPath, getPrimaryHookScriptPath, getVsCodeHookSettingsPath, getVsCodeUserSettingsPath, getWindsurfHookSettingsPath, installHookAssetsForHost, isMissingFileError, normalizeHookHost, readOptionalUtf8, supportsManagedHookAssets, writeBackupIfPresent, } from './permissionHookShared.js';
1
+ export { AUTO_REPAIRABLE_HOOK_HOSTS, MANAGED_HOOK_WRAPPER_BASENAMES, WRAPPER_HOOK_HOSTS, detectIndent, getClaudeHookSettingsPath, getCodexConfigPath, getPermissionHookDiagnosticsPath, getCodexHookSettingsPath, getCursorHookSettingsPath, getGeminiHookSettingsPath, getHookSourcePath, getHookWrapperBasename, getHookWrapperPath, getManagedHookAssets, getPermissionHookMarkerPath, getPermissionHookScriptPath, getPrimaryHookScriptPath, getVsCodeHookSettingsPath, getVsCodeUserSettingsPath, getWindsurfHookSettingsPath, installHookAssetsForHost, isMissingFileError, normalizeHookHost, readLastPermissionHookDiagnostic, readOptionalUtf8, supportsManagedHookAssets, writeBackupIfPresent, } from './permissionHookShared.js';
2
2
  export { ensureClaudePreToolUseHook, ensureCodexPreToolUseHook, ensureCursorPreToolUseHook, ensureGeminiBeforeToolHook, ensureVsCodePreToolUseHook, ensureWindsurfHooks, installPermissionHook, } from './permissionHookInstallers.js';
3
3
  export { _resetPermissionHookStartupRepairSummaryForTests, getLastPermissionHookStartupRepairSummary, getPermissionHookAuditSummary, getPermissionHookStatus, getPermissionHookStatusAsync, reconcilePermissionHookStatus, repairPermissionHooksOnStartup, summarizePermissionHookHealth, } from './permissionHookStatus.js';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbkhvb2tzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3Blcm1pc3Npb25Ib29rcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLDhCQUE4QixFQUM5QixrQkFBa0IsRUFZbEIsWUFBWSxFQUNaLHlCQUF5QixFQUN6QixrQkFBa0IsRUFDbEIsd0JBQXdCLEVBQ3hCLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIsaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIsb0JBQW9CLEVBQ3BCLDJCQUEyQixFQUMzQiwyQkFBMkIsRUFDM0Isd0JBQXdCLEVBQ3hCLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIsMkJBQTJCLEVBQzNCLHdCQUF3QixFQUN4QixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQix5QkFBeUIsRUFDekIsb0JBQW9CLEdBQ3JCLE1BQU0sMkJBQTJCLENBQUM7QUFFbkMsT0FBTyxFQUNMLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIsMEJBQTBCLEVBQzFCLDBCQUEwQixFQUMxQiwwQkFBMEIsRUFDMUIsbUJBQW1CLEVBQ25CLHFCQUFxQixHQUN0QixNQUFNLCtCQUErQixDQUFDO0FBRXZDLE9BQU8sRUFDTCxnREFBZ0QsRUFDaEQseUNBQXlDLEVBQ3pDLDZCQUE2QixFQUM3Qix1QkFBdUIsRUFDdkIsNEJBQTRCLEVBQzVCLDZCQUE2QixFQUM3Qiw4QkFBOEIsRUFDOUIsNkJBQTZCLEdBQzlCLE1BQU0sMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge1xuICBBVVRPX1JFUEFJUkFCTEVfSE9PS19IT1NUUyxcbiAgTUFOQUdFRF9IT09LX1dSQVBQRVJfQkFTRU5BTUVTLFxuICBXUkFQUEVSX0hPT0tfSE9TVFMsXG4gIHR5cGUgSG9va0Fzc2V0QXVkaXRSZXN1bHQsXG4gIHR5cGUgSG9va0Fzc2V0RGVzY3JpcHRvcixcbiAgdHlwZSBJbnN0YWxsUGVybWlzc2lvbkhvb2tPcHRpb25zLFxuICB0eXBlIEluc3RhbGxQZXJtaXNzaW9uSG9va1Jlc3VsdCxcbiAgdHlwZSBQZXJtaXNzaW9uSG9va0F1ZGl0U3VtbWFyeSxcbiAgdHlwZSBQZXJtaXNzaW9uSG9va0hlYWx0aFN1bW1hcnksXG4gIHR5cGUgUGVybWlzc2lvbkhvb2tNYXJrZXIsXG4gIHR5cGUgUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlySG9zdFJlc3VsdCxcbiAgdHlwZSBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5LFxuICB0eXBlIFBlcm1pc3Npb25Ib29rU3RhdHVzLFxuICB0eXBlIFJlY29uY2lsZVBlcm1pc3Npb25Ib29rT3B0aW9ucyxcbiAgZGV0ZWN0SW5kZW50LFxuICBnZXRDbGF1ZGVIb29rU2V0dGluZ3NQYXRoLFxuICBnZXRDb2RleENvbmZpZ1BhdGgsXG4gIGdldENvZGV4SG9va1NldHRpbmdzUGF0aCxcbiAgZ2V0Q3Vyc29ySG9va1NldHRpbmdzUGF0aCxcbiAgZ2V0R2VtaW5pSG9va1NldHRpbmdzUGF0aCxcbiAgZ2V0SG9va1NvdXJjZVBhdGgsXG4gIGdldEhvb2tXcmFwcGVyQmFzZW5hbWUsXG4gIGdldEhvb2tXcmFwcGVyUGF0aCxcbiAgZ2V0TWFuYWdlZEhvb2tBc3NldHMsXG4gIGdldFBlcm1pc3Npb25Ib29rTWFya2VyUGF0aCxcbiAgZ2V0UGVybWlzc2lvbkhvb2tTY3JpcHRQYXRoLFxuICBnZXRQcmltYXJ5SG9va1NjcmlwdFBhdGgsXG4gIGdldFZzQ29kZUhvb2tTZXR0aW5nc1BhdGgsXG4gIGdldFZzQ29kZVVzZXJTZXR0aW5nc1BhdGgsXG4gIGdldFdpbmRzdXJmSG9va1NldHRpbmdzUGF0aCxcbiAgaW5zdGFsbEhvb2tBc3NldHNGb3JIb3N0LFxuICBpc01pc3NpbmdGaWxlRXJyb3IsXG4gIG5vcm1hbGl6ZUhvb2tIb3N0LFxuICByZWFkT3B0aW9uYWxVdGY4LFxuICBzdXBwb3J0c01hbmFnZWRIb29rQXNzZXRzLFxuICB3cml0ZUJhY2t1cElmUHJlc2VudCxcbn0gZnJvbSAnLi9wZXJtaXNzaW9uSG9va1NoYXJlZC5qcyc7XG5cbmV4cG9ydCB7XG4gIGVuc3VyZUNsYXVkZVByZVRvb2xVc2VIb29rLFxuICBlbnN1cmVDb2RleFByZVRvb2xVc2VIb29rLFxuICBlbnN1cmVDdXJzb3JQcmVUb29sVXNlSG9vayxcbiAgZW5zdXJlR2VtaW5pQmVmb3JlVG9vbEhvb2ssXG4gIGVuc3VyZVZzQ29kZVByZVRvb2xVc2VIb29rLFxuICBlbnN1cmVXaW5kc3VyZkhvb2tzLFxuICBpbnN0YWxsUGVybWlzc2lvbkhvb2ssXG59IGZyb20gJy4vcGVybWlzc2lvbkhvb2tJbnN0YWxsZXJzLmpzJztcblxuZXhwb3J0IHtcbiAgX3Jlc2V0UGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlyU3VtbWFyeUZvclRlc3RzLFxuICBnZXRMYXN0UGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlyU3VtbWFyeSxcbiAgZ2V0UGVybWlzc2lvbkhvb2tBdWRpdFN1bW1hcnksXG4gIGdldFBlcm1pc3Npb25Ib29rU3RhdHVzLFxuICBnZXRQZXJtaXNzaW9uSG9va1N0YXR1c0FzeW5jLFxuICByZWNvbmNpbGVQZXJtaXNzaW9uSG9va1N0YXR1cyxcbiAgcmVwYWlyUGVybWlzc2lvbkhvb2tzT25TdGFydHVwLFxuICBzdW1tYXJpemVQZXJtaXNzaW9uSG9va0hlYWx0aCxcbn0gZnJvbSAnLi9wZXJtaXNzaW9uSG9va1N0YXR1cy5qcyc7XG4iXX0=
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbkhvb2tzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3Blcm1pc3Npb25Ib29rcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLDhCQUE4QixFQUM5QixrQkFBa0IsRUFhbEIsWUFBWSxFQUNaLHlCQUF5QixFQUN6QixrQkFBa0IsRUFDbEIsZ0NBQWdDLEVBQ2hDLHdCQUF3QixFQUN4Qix5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsa0JBQWtCLEVBQ2xCLG9CQUFvQixFQUNwQiwyQkFBMkIsRUFDM0IsMkJBQTJCLEVBQzNCLHdCQUF3QixFQUN4Qix5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLDJCQUEyQixFQUMzQix3QkFBd0IsRUFDeEIsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixnQ0FBZ0MsRUFDaEMsZ0JBQWdCLEVBQ2hCLHlCQUF5QixFQUN6QixvQkFBb0IsR0FDckIsTUFBTSwyQkFBMkIsQ0FBQztBQUVuQyxPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLHlCQUF5QixFQUN6QiwwQkFBMEIsRUFDMUIsMEJBQTBCLEVBQzFCLDBCQUEwQixFQUMxQixtQkFBbUIsRUFDbkIscUJBQXFCLEdBQ3RCLE1BQU0sK0JBQStCLENBQUM7QUFFdkMsT0FBTyxFQUNMLGdEQUFnRCxFQUNoRCx5Q0FBeUMsRUFDekMsNkJBQTZCLEVBQzdCLHVCQUF1QixFQUN2Qiw0QkFBNEIsRUFDNUIsNkJBQTZCLEVBQzdCLDhCQUE4QixFQUM5Qiw2QkFBNkIsR0FDOUIsTUFBTSwyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7XG4gIEFVVE9fUkVQQUlSQUJMRV9IT09LX0hPU1RTLFxuICBNQU5BR0VEX0hPT0tfV1JBUFBFUl9CQVNFTkFNRVMsXG4gIFdSQVBQRVJfSE9PS19IT1NUUyxcbiAgdHlwZSBIb29rQXNzZXRBdWRpdFJlc3VsdCxcbiAgdHlwZSBIb29rQXNzZXREZXNjcmlwdG9yLFxuICB0eXBlIEluc3RhbGxQZXJtaXNzaW9uSG9va09wdGlvbnMsXG4gIHR5cGUgSW5zdGFsbFBlcm1pc3Npb25Ib29rUmVzdWx0LFxuICB0eXBlIFBlcm1pc3Npb25Ib29rQXVkaXRTdW1tYXJ5LFxuICB0eXBlIFBlcm1pc3Npb25Ib29rRGlhZ25vc3RpY1JlY29yZCxcbiAgdHlwZSBQZXJtaXNzaW9uSG9va0hlYWx0aFN1bW1hcnksXG4gIHR5cGUgUGVybWlzc2lvbkhvb2tNYXJrZXIsXG4gIHR5cGUgUGVybWlzc2lvbkhvb2tTdGFydHVwUmVwYWlySG9zdFJlc3VsdCxcbiAgdHlwZSBQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5LFxuICB0eXBlIFBlcm1pc3Npb25Ib29rU3RhdHVzLFxuICB0eXBlIFJlY29uY2lsZVBlcm1pc3Npb25Ib29rT3B0aW9ucyxcbiAgZGV0ZWN0SW5kZW50LFxuICBnZXRDbGF1ZGVIb29rU2V0dGluZ3NQYXRoLFxuICBnZXRDb2RleENvbmZpZ1BhdGgsXG4gIGdldFBlcm1pc3Npb25Ib29rRGlhZ25vc3RpY3NQYXRoLFxuICBnZXRDb2RleEhvb2tTZXR0aW5nc1BhdGgsXG4gIGdldEN1cnNvckhvb2tTZXR0aW5nc1BhdGgsXG4gIGdldEdlbWluaUhvb2tTZXR0aW5nc1BhdGgsXG4gIGdldEhvb2tTb3VyY2VQYXRoLFxuICBnZXRIb29rV3JhcHBlckJhc2VuYW1lLFxuICBnZXRIb29rV3JhcHBlclBhdGgsXG4gIGdldE1hbmFnZWRIb29rQXNzZXRzLFxuICBnZXRQZXJtaXNzaW9uSG9va01hcmtlclBhdGgsXG4gIGdldFBlcm1pc3Npb25Ib29rU2NyaXB0UGF0aCxcbiAgZ2V0UHJpbWFyeUhvb2tTY3JpcHRQYXRoLFxuICBnZXRWc0NvZGVIb29rU2V0dGluZ3NQYXRoLFxuICBnZXRWc0NvZGVVc2VyU2V0dGluZ3NQYXRoLFxuICBnZXRXaW5kc3VyZkhvb2tTZXR0aW5nc1BhdGgsXG4gIGluc3RhbGxIb29rQXNzZXRzRm9ySG9zdCxcbiAgaXNNaXNzaW5nRmlsZUVycm9yLFxuICBub3JtYWxpemVIb29rSG9zdCxcbiAgcmVhZExhc3RQZXJtaXNzaW9uSG9va0RpYWdub3N0aWMsXG4gIHJlYWRPcHRpb25hbFV0ZjgsXG4gIHN1cHBvcnRzTWFuYWdlZEhvb2tBc3NldHMsXG4gIHdyaXRlQmFja3VwSWZQcmVzZW50LFxufSBmcm9tICcuL3Blcm1pc3Npb25Ib29rU2hhcmVkLmpzJztcblxuZXhwb3J0IHtcbiAgZW5zdXJlQ2xhdWRlUHJlVG9vbFVzZUhvb2ssXG4gIGVuc3VyZUNvZGV4UHJlVG9vbFVzZUhvb2ssXG4gIGVuc3VyZUN1cnNvclByZVRvb2xVc2VIb29rLFxuICBlbnN1cmVHZW1pbmlCZWZvcmVUb29sSG9vayxcbiAgZW5zdXJlVnNDb2RlUHJlVG9vbFVzZUhvb2ssXG4gIGVuc3VyZVdpbmRzdXJmSG9va3MsXG4gIGluc3RhbGxQZXJtaXNzaW9uSG9vayxcbn0gZnJvbSAnLi9wZXJtaXNzaW9uSG9va0luc3RhbGxlcnMuanMnO1xuXG5leHBvcnQge1xuICBfcmVzZXRQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5Rm9yVGVzdHMsXG4gIGdldExhc3RQZXJtaXNzaW9uSG9va1N0YXJ0dXBSZXBhaXJTdW1tYXJ5LFxuICBnZXRQZXJtaXNzaW9uSG9va0F1ZGl0U3VtbWFyeSxcbiAgZ2V0UGVybWlzc2lvbkhvb2tTdGF0dXMsXG4gIGdldFBlcm1pc3Npb25Ib29rU3RhdHVzQXN5bmMsXG4gIHJlY29uY2lsZVBlcm1pc3Npb25Ib29rU3RhdHVzLFxuICByZXBhaXJQZXJtaXNzaW9uSG9va3NPblN0YXJ0dXAsXG4gIHN1bW1hcml6ZVBlcm1pc3Npb25Ib29rSGVhbHRoLFxufSBmcm9tICcuL3Blcm1pc3Npb25Ib29rU3RhdHVzLmpzJztcbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"healthRoutes.d.ts","sourceRoot":"","sources":["../../../src/web/routes/healthRoutes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,gCAAgC,CAAC;AAExC,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,aAAa,CAAC;IAC1B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B,kBAAkB,EAAE,MAAM,MAAM,CAAC;IACjC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,+BAA+B,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAC;CAC5F;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CA6CvE"}
1
+ {"version":3,"file":"healthRoutes.d.ts","sourceRoot":"","sources":["../../../src/web/routes/healthRoutes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAClF,OAAO,EAGL,KAAK,0BAA0B,EAChC,MAAM,gCAAgC,CAAC;AAExC,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,aAAa,CAAC;IAC1B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,cAAc,EAAE,MAAM,MAAM,CAAC;IAC7B,kBAAkB,EAAE,MAAM,MAAM,CAAC;IACjC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,+BAA+B,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,0BAA0B,CAAC,CAAC;CAC5F;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CA+CvE"}
@@ -31,6 +31,8 @@ export function createHealthRoutes(options) {
31
31
  installedHosts: permissionHookAudit.installedHosts,
32
32
  currentHosts: permissionHookAudit.currentHosts,
33
33
  needsRepairHosts: permissionHookAudit.needsRepairHosts,
34
+ diagnosticsPath: permissionHookAudit.diagnosticsPath,
35
+ lastDiagnostic: permissionHookAudit.lastDiagnostic,
34
36
  lastStartupRepair: permissionHookAudit.lastStartupRepair,
35
37
  };
36
38
  }
@@ -46,4 +48,4 @@ export function createHealthRoutes(options) {
46
48
  });
47
49
  return router;
48
50
  }
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoUm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dlYi9yb3V0ZXMvaGVhbHRoUm91dGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWpDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFHbEMsT0FBTyxFQUNMLDZCQUE2QixFQUM3Qiw2QkFBNkIsR0FFOUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQVd4QyxNQUFNLFVBQVUsa0JBQWtCLENBQUMsT0FBNEI7SUFDN0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUM7SUFDeEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBRTdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFhLEVBQUUsR0FBYSxFQUFFLEVBQUU7UUFDM0QsTUFBTSxNQUFNLEdBQTRCO1lBQ3RDLE1BQU0sRUFBRSxJQUFJO1lBQ1osTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ25ELElBQUksRUFBRTtnQkFDSixLQUFLLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3BDLFVBQVUsRUFBRSxPQUFPLENBQUMsY0FBYyxFQUFFO2FBQ3JDO1NBQ0YsQ0FBQztRQUVGLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRztnQkFDbEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO2dCQUNyQyxVQUFVLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixFQUFFO2FBQ3pDLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLCtCQUErQixJQUFJLDZCQUE2QixDQUFDLENBQzFHLE9BQU8sQ0FBQyxzQkFBc0IsSUFBSSxPQUFPLEVBQUUsQ0FDNUMsQ0FBQztZQUNGLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHO2dCQUMxQixHQUFHLDZCQUE2QixDQUFDLG1CQUFtQixDQUFDO2dCQUNyRCxjQUFjLEVBQUUsbUJBQW1CLENBQUMsY0FBYztnQkFDbEQsWUFBWSxFQUFFLG1CQUFtQixDQUFDLFlBQVk7Z0JBQzlDLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLGdCQUFnQjtnQkFDdEQsaUJBQWlCLEVBQUUsbUJBQW1CLENBQUMsaUJBQWlCO2FBQ3pELENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sT0FBTyxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2RSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsVUFBVSxDQUFDO1lBQzlCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHO2dCQUMxQixNQUFNLEVBQUUsT0FBTztnQkFDZixPQUFPLEVBQUUsMkNBQTJDLE9BQU8sRUFBRTthQUM5RCxDQUFDO1FBQ0osQ0FBQztRQUVELEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBIZWFsdGggQVBJIHJvdXRlIGZvciB0aGUgdW5pZmllZCBkZXYgY29uc29sZS5cbiAqXG4gKiBHRVQgL2FwaS9oZWFsdGgg4oCUIEFnZ3JlZ2F0ZWQgaGVhbHRoOiB1cHRpbWUsIHNpbmsgc3RhdHMsIFNTRSBjbGllbnQgY291bnRzXG4gKi9cblxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgdHlwZSB7IFJlcXVlc3QsIFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQgdHlwZSB7IE1lbW9yeUxvZ1NpbmsgfSBmcm9tICcuLi8uLi9sb2dnaW5nL3NpbmtzL01lbW9yeUxvZ1NpbmsuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlNZXRyaWNzU2luayB9IGZyb20gJy4uLy4uL21ldHJpY3Mvc2lua3MvTWVtb3J5TWV0cmljc1NpbmsuanMnO1xuaW1wb3J0IHtcbiAgZ2V0UGVybWlzc2lvbkhvb2tBdWRpdFN1bW1hcnksXG4gIHN1bW1hcml6ZVBlcm1pc3Npb25Ib29rSGVhbHRoLFxuICB0eXBlIFBlcm1pc3Npb25Ib29rQXVkaXRTdW1tYXJ5LFxufSBmcm9tICcuLi8uLi91dGlscy9wZXJtaXNzaW9uSG9va3MuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhlYWx0aFJvdXRlc09wdGlvbnMge1xuICBtZW1vcnlTaW5rOiBNZW1vcnlMb2dTaW5rO1xuICBtZXRyaWNzU2luaz86IE1lbW9yeU1ldHJpY3NTaW5rO1xuICBsb2dDbGllbnRDb3VudDogKCkgPT4gbnVtYmVyO1xuICBtZXRyaWNzQ2xpZW50Q291bnQ6ICgpID0+IG51bWJlcjtcbiAgcGVybWlzc2lvbkhvb2tzSG9tZURpcj86IHN0cmluZztcbiAgZ2V0UGVybWlzc2lvbkhvb2tBdWRpdFN1bW1hcnlGbj86IChob21lRGlyOiBzdHJpbmcpID0+IFByb21pc2U8UGVybWlzc2lvbkhvb2tBdWRpdFN1bW1hcnk+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSGVhbHRoUm91dGVzKG9wdGlvbnM6IEhlYWx0aFJvdXRlc09wdGlvbnMpOiBSb3V0ZXIge1xuICBjb25zdCByb3V0ZXIgPSBSb3V0ZXIoKTtcbiAgY29uc3Qgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICByb3V0ZXIuZ2V0KCcvaGVhbHRoJywgYXN5bmMgKF9yZXE6IFJlcXVlc3QsIHJlczogUmVzcG9uc2UpID0+IHtcbiAgICBjb25zdCBoZWFsdGg6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgICAgc3RhdHVzOiAnb2snLFxuICAgICAgdXB0aW1lOiBNYXRoLmZsb29yKChEYXRlLm5vdygpIC0gc3RhcnRUaW1lKSAvIDEwMDApLFxuICAgICAgbG9nczoge1xuICAgICAgICBzdGF0czogb3B0aW9ucy5tZW1vcnlTaW5rLmdldFN0YXRzKCksXG4gICAgICAgIHNzZUNsaWVudHM6IG9wdGlvbnMubG9nQ2xpZW50Q291bnQoKSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGlmIChvcHRpb25zLm1ldHJpY3NTaW5rKSB7XG4gICAgICBoZWFsdGhbJ21ldHJpY3MnXSA9IHtcbiAgICAgICAgc3RhdHM6IG9wdGlvbnMubWV0cmljc1NpbmsuZ2V0U3RhdHMoKSxcbiAgICAgICAgc3NlQ2xpZW50czogb3B0aW9ucy5tZXRyaWNzQ2xpZW50Q291bnQoKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBlcm1pc3Npb25Ib29rQXVkaXQgPSBhd2FpdCAob3B0aW9ucy5nZXRQZXJtaXNzaW9uSG9va0F1ZGl0U3VtbWFyeUZuID8/IGdldFBlcm1pc3Npb25Ib29rQXVkaXRTdW1tYXJ5KShcbiAgICAgICAgb3B0aW9ucy5wZXJtaXNzaW9uSG9va3NIb21lRGlyID8/IGhvbWVkaXIoKSxcbiAgICAgICk7XG4gICAgICBoZWFsdGhbJ3Blcm1pc3Npb25Ib29rcyddID0ge1xuICAgICAgICAuLi5zdW1tYXJpemVQZXJtaXNzaW9uSG9va0hlYWx0aChwZXJtaXNzaW9uSG9va0F1ZGl0KSxcbiAgICAgICAgaW5zdGFsbGVkSG9zdHM6IHBlcm1pc3Npb25Ib29rQXVkaXQuaW5zdGFsbGVkSG9zdHMsXG4gICAgICAgIGN1cnJlbnRIb3N0czogcGVybWlzc2lvbkhvb2tBdWRpdC5jdXJyZW50SG9zdHMsXG4gICAgICAgIG5lZWRzUmVwYWlySG9zdHM6IHBlcm1pc3Npb25Ib29rQXVkaXQubmVlZHNSZXBhaXJIb3N0cyxcbiAgICAgICAgbGFzdFN0YXJ0dXBSZXBhaXI6IHBlcm1pc3Npb25Ib29rQXVkaXQubGFzdFN0YXJ0dXBSZXBhaXIsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgaGVhbHRoWydzdGF0dXMnXSA9ICdkZWdyYWRlZCc7XG4gICAgICBoZWFsdGhbJ3Blcm1pc3Npb25Ib29rcyddID0ge1xuICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gYXVkaXQgcGVybWlzc2lvbiBob29rIHN0YXR1czogJHttZXNzYWdlfWAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJlcy5qc29uKGhlYWx0aCk7XG4gIH0pO1xuXG4gIHJldHVybiByb3V0ZXI7XG59XG4iXX0=
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhbHRoUm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3dlYi9yb3V0ZXMvaGVhbHRoUm91dGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWpDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFHbEMsT0FBTyxFQUNMLDZCQUE2QixFQUM3Qiw2QkFBNkIsR0FFOUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQVd4QyxNQUFNLFVBQVUsa0JBQWtCLENBQUMsT0FBNEI7SUFDN0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUM7SUFDeEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBRTdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFhLEVBQUUsR0FBYSxFQUFFLEVBQUU7UUFDM0QsTUFBTSxNQUFNLEdBQTRCO1lBQ3RDLE1BQU0sRUFBRSxJQUFJO1lBQ1osTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ25ELElBQUksRUFBRTtnQkFDSixLQUFLLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3BDLFVBQVUsRUFBRSxPQUFPLENBQUMsY0FBYyxFQUFFO2FBQ3JDO1NBQ0YsQ0FBQztRQUVGLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRztnQkFDbEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO2dCQUNyQyxVQUFVLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixFQUFFO2FBQ3pDLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLCtCQUErQixJQUFJLDZCQUE2QixDQUFDLENBQzFHLE9BQU8sQ0FBQyxzQkFBc0IsSUFBSSxPQUFPLEVBQUUsQ0FDNUMsQ0FBQztZQUNGLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHO2dCQUMxQixHQUFHLDZCQUE2QixDQUFDLG1CQUFtQixDQUFDO2dCQUNyRCxjQUFjLEVBQUUsbUJBQW1CLENBQUMsY0FBYztnQkFDbEQsWUFBWSxFQUFFLG1CQUFtQixDQUFDLFlBQVk7Z0JBQzlDLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLGdCQUFnQjtnQkFDdEQsZUFBZSxFQUFFLG1CQUFtQixDQUFDLGVBQWU7Z0JBQ3BELGNBQWMsRUFBRSxtQkFBbUIsQ0FBQyxjQUFjO2dCQUNsRCxpQkFBaUIsRUFBRSxtQkFBbUIsQ0FBQyxpQkFBaUI7YUFDekQsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxPQUFPLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZFLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxVQUFVLENBQUM7WUFDOUIsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUc7Z0JBQzFCLE1BQU0sRUFBRSxPQUFPO2dCQUNmLE9BQU8sRUFBRSwyQ0FBMkMsT0FBTyxFQUFFO2FBQzlELENBQUM7UUFDSixDQUFDO1FBRUQsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEhlYWx0aCBBUEkgcm91dGUgZm9yIHRoZSB1bmlmaWVkIGRldiBjb25zb2xlLlxuICpcbiAqIEdFVCAvYXBpL2hlYWx0aCDigJQgQWdncmVnYXRlZCBoZWFsdGg6IHVwdGltZSwgc2luayBzdGF0cywgU1NFIGNsaWVudCBjb3VudHNcbiAqL1xuXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB0eXBlIHsgUmVxdWVzdCwgUmVzcG9uc2UgfSBmcm9tICdleHByZXNzJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdub2RlOm9zJztcbmltcG9ydCB0eXBlIHsgTWVtb3J5TG9nU2luayB9IGZyb20gJy4uLy4uL2xvZ2dpbmcvc2lua3MvTWVtb3J5TG9nU2luay5qcyc7XG5pbXBvcnQgdHlwZSB7IE1lbW9yeU1ldHJpY3NTaW5rIH0gZnJvbSAnLi4vLi4vbWV0cmljcy9zaW5rcy9NZW1vcnlNZXRyaWNzU2luay5qcyc7XG5pbXBvcnQge1xuICBnZXRQZXJtaXNzaW9uSG9va0F1ZGl0U3VtbWFyeSxcbiAgc3VtbWFyaXplUGVybWlzc2lvbkhvb2tIZWFsdGgsXG4gIHR5cGUgUGVybWlzc2lvbkhvb2tBdWRpdFN1bW1hcnksXG59IGZyb20gJy4uLy4uL3V0aWxzL3Blcm1pc3Npb25Ib29rcy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGVhbHRoUm91dGVzT3B0aW9ucyB7XG4gIG1lbW9yeVNpbms6IE1lbW9yeUxvZ1Npbms7XG4gIG1ldHJpY3NTaW5rPzogTWVtb3J5TWV0cmljc1Npbms7XG4gIGxvZ0NsaWVudENvdW50OiAoKSA9PiBudW1iZXI7XG4gIG1ldHJpY3NDbGllbnRDb3VudDogKCkgPT4gbnVtYmVyO1xuICBwZXJtaXNzaW9uSG9va3NIb21lRGlyPzogc3RyaW5nO1xuICBnZXRQZXJtaXNzaW9uSG9va0F1ZGl0U3VtbWFyeUZuPzogKGhvbWVEaXI6IHN0cmluZykgPT4gUHJvbWlzZTxQZXJtaXNzaW9uSG9va0F1ZGl0U3VtbWFyeT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIZWFsdGhSb3V0ZXMob3B0aW9uczogSGVhbHRoUm91dGVzT3B0aW9ucyk6IFJvdXRlciB7XG4gIGNvbnN0IHJvdXRlciA9IFJvdXRlcigpO1xuICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gIHJvdXRlci5nZXQoJy9oZWFsdGgnLCBhc3luYyAoX3JlcTogUmVxdWVzdCwgcmVzOiBSZXNwb25zZSkgPT4ge1xuICAgIGNvbnN0IGhlYWx0aDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICBzdGF0dXM6ICdvaycsXG4gICAgICB1cHRpbWU6IE1hdGguZmxvb3IoKERhdGUubm93KCkgLSBzdGFydFRpbWUpIC8gMTAwMCksXG4gICAgICBsb2dzOiB7XG4gICAgICAgIHN0YXRzOiBvcHRpb25zLm1lbW9yeVNpbmsuZ2V0U3RhdHMoKSxcbiAgICAgICAgc3NlQ2xpZW50czogb3B0aW9ucy5sb2dDbGllbnRDb3VudCgpLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgaWYgKG9wdGlvbnMubWV0cmljc1NpbmspIHtcbiAgICAgIGhlYWx0aFsnbWV0cmljcyddID0ge1xuICAgICAgICBzdGF0czogb3B0aW9ucy5tZXRyaWNzU2luay5nZXRTdGF0cygpLFxuICAgICAgICBzc2VDbGllbnRzOiBvcHRpb25zLm1ldHJpY3NDbGllbnRDb3VudCgpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcGVybWlzc2lvbkhvb2tBdWRpdCA9IGF3YWl0IChvcHRpb25zLmdldFBlcm1pc3Npb25Ib29rQXVkaXRTdW1tYXJ5Rm4gPz8gZ2V0UGVybWlzc2lvbkhvb2tBdWRpdFN1bW1hcnkpKFxuICAgICAgICBvcHRpb25zLnBlcm1pc3Npb25Ib29rc0hvbWVEaXIgPz8gaG9tZWRpcigpLFxuICAgICAgKTtcbiAgICAgIGhlYWx0aFsncGVybWlzc2lvbkhvb2tzJ10gPSB7XG4gICAgICAgIC4uLnN1bW1hcml6ZVBlcm1pc3Npb25Ib29rSGVhbHRoKHBlcm1pc3Npb25Ib29rQXVkaXQpLFxuICAgICAgICBpbnN0YWxsZWRIb3N0czogcGVybWlzc2lvbkhvb2tBdWRpdC5pbnN0YWxsZWRIb3N0cyxcbiAgICAgICAgY3VycmVudEhvc3RzOiBwZXJtaXNzaW9uSG9va0F1ZGl0LmN1cnJlbnRIb3N0cyxcbiAgICAgICAgbmVlZHNSZXBhaXJIb3N0czogcGVybWlzc2lvbkhvb2tBdWRpdC5uZWVkc1JlcGFpckhvc3RzLFxuICAgICAgICBkaWFnbm9zdGljc1BhdGg6IHBlcm1pc3Npb25Ib29rQXVkaXQuZGlhZ25vc3RpY3NQYXRoLFxuICAgICAgICBsYXN0RGlhZ25vc3RpYzogcGVybWlzc2lvbkhvb2tBdWRpdC5sYXN0RGlhZ25vc3RpYyxcbiAgICAgICAgbGFzdFN0YXJ0dXBSZXBhaXI6IHBlcm1pc3Npb25Ib29rQXVkaXQubGFzdFN0YXJ0dXBSZXBhaXIsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgaGVhbHRoWydzdGF0dXMnXSA9ICdkZWdyYWRlZCc7XG4gICAgICBoZWFsdGhbJ3Blcm1pc3Npb25Ib29rcyddID0ge1xuICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gYXVkaXQgcGVybWlzc2lvbiBob29rIHN0YXR1czogJHttZXNzYWdlfWAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJlcy5qc29uKGhlYWx0aCk7XG4gIH0pO1xuXG4gIHJldHVybiByb3V0ZXI7XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"permissionRoutes.d.ts","sourceRoot":"","sources":["../../../src/web/routes/permissionRoutes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAG1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AA8V7E;;;GAGG;AACH,MAAM,WAAW,+BAA+B;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,+BAAoC,GAC5C,IAAI,CA6PN"}
1
+ {"version":3,"file":"permissionRoutes.d.ts","sourceRoot":"","sources":["../../../src/web/routes/permissionRoutes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAgB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAG1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAgW7E;;;GAGG;AACH,MAAM,WAAW,+BAA+B;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,+BAAoC,GAC5C,IAAI,CAqQN"}