@workflow/builders 5.0.0-beta.17 → 5.0.0-beta.18

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.
@@ -5,6 +5,7 @@ export interface SwcPluginOptions {
5
5
  entriesToBundle?: string[];
6
6
  outdir?: string;
7
7
  projectRoot?: string;
8
+ moduleSpecifierRoot?: string;
8
9
  workflowManifest?: WorkflowManifest;
9
10
  /**
10
11
  * Rewrite TypeScript extensions (.ts, .tsx, .mts, .cts) to their JS
@@ -1 +1 @@
1
- {"version":3,"file":"swc-esbuild-plugin.d.ts","sourceRoot":"","sources":["../src/swc-esbuild-plugin.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAQlC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;OAOG;IACH,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAChD;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAkHD,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAuWjE"}
1
+ {"version":3,"file":"swc-esbuild-plugin.d.ts","sourceRoot":"","sources":["../src/swc-esbuild-plugin.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAQlC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;OAOG;IACH,qCAAqC,CAAC,EAAE,OAAO,CAAC;IAChD;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9B;AAkHD,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CA+WjE"}
@@ -181,6 +181,7 @@ export function createSwcPlugin(options) {
181
181
  const normalizedResolvedPath = normalizePath(resolvedPath);
182
182
  const workingDir = build.initialOptions.absWorkingDir || process.cwd();
183
183
  const projectRoot = options.projectRoot || workingDir;
184
+ const moduleSpecifierRoot = options.moduleSpecifierRoot || projectRoot;
184
185
  if (options.entriesToBundle &&
185
186
  normalizedResolvedPath.endsWith('.node')) {
186
187
  return {
@@ -214,7 +215,7 @@ export function createSwcPlugin(options) {
214
215
  // unless they are themselves in entriesToBundle or are parents
215
216
  // of a discovered workflow/step/serde file via the check above.
216
217
  if (options.bundleTransitiveLocalStepDependencies &&
217
- isProjectLocalFile(normalizedResolvedPath, projectRoot) &&
218
+ isProjectLocalFile(normalizedResolvedPath, moduleSpecifierRoot) &&
218
219
  parentHasChild(normalizedEntry, normalizedResolvedPath)) {
219
220
  shouldBundle = true;
220
221
  break;
@@ -292,6 +293,7 @@ export function createSwcPlugin(options) {
292
293
  // The filename parameter is used to generate workflowId/stepId, so it must be relative
293
294
  const workingDir = build.initialOptions.absWorkingDir || process.cwd();
294
295
  const projectRoot = options.projectRoot || workingDir;
296
+ const moduleSpecifierRoot = options.moduleSpecifierRoot || projectRoot;
295
297
  // Normalize paths: convert backslashes to forward slashes and remove trailing slashes
296
298
  const normalizedWorkingDir = workingDir
297
299
  .replace(/\\/g, '/')
@@ -338,7 +340,7 @@ export function createSwcPlugin(options) {
338
340
  relativeFilepath = normalizedPath.split('/').pop() || 'unknown.ts';
339
341
  }
340
342
  const { code: transformedCode, workflowManifest } = await applySwcTransform(relativeFilepath, normalizedSource, options.mode, args.path, // Pass absolute path for module specifier resolution
341
- projectRoot);
343
+ projectRoot, moduleSpecifierRoot);
342
344
  if (!options.workflowManifest) {
343
345
  options.workflowManifest = {};
344
346
  }
@@ -370,4 +372,4 @@ function isProjectLocalFile(filePath, projectRoot) {
370
372
  }
371
373
  return (resolveModuleSpecifier(filePath, projectRoot).moduleSpecifier === undefined);
372
374
  }
373
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3djLWVzYnVpbGQtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N3Yy1lc2J1aWxkLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sbUJBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsT0FBTyxFQUNMLGlCQUFpQixHQUVsQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsY0FBYyxHQUNmLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUF5Q3ZFLE1BQU0sb0JBQW9CLEdBQUc7SUFDM0IsY0FBYyxFQUFFLFVBQVU7SUFDMUIsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDO0lBQ3pCLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQztJQUMxQixhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFDMUIsY0FBYyxFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQztJQUNuQyxnQkFBZ0IsRUFBRSxDQUFDLGNBQWMsQ0FBQztJQUNsQyxVQUFVLEVBQUU7UUFDVixLQUFLO1FBQ0wsTUFBTTtRQUNOLE1BQU07UUFDTixNQUFNO1FBQ04sTUFBTTtRQUNOLE1BQU07UUFDTixLQUFLO1FBQ0wsTUFBTTtRQUNOLE9BQU87UUFDUCxPQUFPO0tBQ1I7SUFDRCxpQkFBaUIsRUFBRSxLQUFLO0lBQ3hCLFFBQVEsRUFBRSxJQUFJO0lBQ2Qs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QUM7Z0JBQ0osQ0FBQztnQkFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO29CQUNmLE1BQU0sWUFBWSxHQUNoQixLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3pELE9BQU8sQ0FBQyxLQUFLLENBQ1gsNEJBQTRCLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFDeEMsWUFBWSxDQUNiLENBQUM7b0JBQ0YsT0FBTzt3QkFDTCxNQUFNLEVBQUU7NEJBQ047Z0NBQ0UsSUFBSSxFQUFFLHlCQUF5QixZQUFZLEVBQUU7Z0NBQzdDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRTs2QkFDbEQ7eUJBQ0Y7cUJBQ0YsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLFFBQWdCLEVBQUUsV0FBbUI7SUFDL0QsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztRQUN2RCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxPQUFPLENBQ0wsc0JBQXNCLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDLGVBQWUsS0FBSyxTQUFTLENBQzVFLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IHJlbGF0aXZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ25vZGU6dXRpbCc7XG5pbXBvcnQgeyBXb3JrZmxvd0J1aWxkRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCBlbmhhbmNlZFJlc29sdmVPcmlnIGZyb20gJ2VuaGFuY2VkLXJlc29sdmUnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tICdlc2J1aWxkJztcbmltcG9ydCB7XG4gIGFwcGx5U3djVHJhbnNmb3JtLFxuICB0eXBlIFdvcmtmbG93TWFuaWZlc3QsXG59IGZyb20gJy4vYXBwbHktc3djLXRyYW5zZm9ybS5qcyc7XG5pbXBvcnQge1xuICBqc1RzUmVnZXgsXG4gIHBhcmVudEhhc0NoaWxkLFxufSBmcm9tICcuL2Rpc2NvdmVyLWVudHJpZXMtZXNidWlsZC1wbHVnaW4uanMnO1xuaW1wb3J0IHsgcmVzb2x2ZU1vZHVsZVNwZWNpZmllciB9IGZyb20gJy4vbW9kdWxlLXNwZWNpZmllci5qcyc7XG5pbXBvcnQgeyByZXNvbHZlV29ya2Zsb3dBbGlhc1JlbGF0aXZlUGF0aCB9IGZyb20gJy4vd29ya2Zsb3ctYWxpYXMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN3Y1BsdWdpbk9wdGlvbnMge1xuICBtb2RlOiAnc3RlcCcgfCAnd29ya2Zsb3cnO1xuICBlbnRyaWVzVG9CdW5kbGU/OiBzdHJpbmdbXTtcbiAgb3V0ZGlyPzogc3RyaW5nO1xuICBwcm9qZWN0Um9vdD86IHN0cmluZztcbiAgd29ya2Zsb3dNYW5pZmVzdD86IFdvcmtmbG93TWFuaWZlc3Q7XG4gIC8qKlxuICAgKiBSZXdyaXRlIFR5cGVTY3JpcHQgZXh0ZW5zaW9ucyAoLnRzLCAudHN4LCAubXRzLCAuY3RzKSB0byB0aGVpciBKU1xuICAgKiBlcXVpdmFsZW50cyAoLmpzLCAubWpzLCAuY2pzKSBpbiBleHRlcm5hbGl6ZWQgaW1wb3J0IHBhdGhzLlxuICAgKlxuICAgKiBFbmFibGUgdGhpcyB3aGVuIHRoZSBvdXRwdXQgYnVuZGxlIGlzIGNvbnN1bWVkIGRpcmVjdGx5IGJ5IE5vZGUncyBuYXRpdmVcbiAgICogRVNNIGxvYWRlciAoZS5nLiB2aXRlc3QpLCB3aGljaCBjYW5ub3QgcmVzb2x2ZSAudHMgZXh0ZW5zaW9ucy5cbiAgICpcbiAgICogTGVhdmUgZGlzYWJsZWQgKGRlZmF1bHQpIHdoZW4gYSBkb3duc3RyZWFtIGJ1bmRsZXIgKHdlYnBhY2ssIFZpdGUsIGV0Yy4pXG4gICAqIGhhbmRsZXMgcmVzb2x1dGlvbiDigJQgdGhvc2UgdG9vbHMgcmVzb2x2ZSAudHMgbmF0aXZlbHkgYW5kIHJld3JpdGluZ1xuICAgKiBicmVha3MgdGhlbSBiZWNhdXNlIHRoZSAuanMgZmlsZSBkb2Vzbid0IGV4aXN0IG9uIGRpc2suXG4gICAqL1xuICByZXdyaXRlVHNFeHRlbnNpb25zPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEJ1bmRsZSBwcm9qZWN0LWxvY2FsIGZpbGVzIHRoYXQgYXJlIHRyYW5zaXRpdmVseSBpbXBvcnRlZCBieSBzdGVwIGVudHJpZXMuXG4gICAqXG4gICAqIEtlZXAgdGhpcyBkaXNhYmxlZCB3aGVuIGEgZG93bnN0cmVhbSBidW5kbGVyIGNvbnN1bWVzIHRoZSBnZW5lcmF0ZWQgc3RlcFxuICAgKiBidW5kbGUgYmVjYXVzZSB0aGF0IGJ1bmRsZXIgY2FuIHJlc29sdmUgdGhlIGV4dGVybmFsaXplZCBsb2NhbCBpbXBvcnRzLlxuICAgKiBFbmFibGUgaXQgZm9yIGRpcmVjdCBydW50aW1lIGxvYWRpbmcsIHdoZXJlIE5vZGUgaW1wb3J0cyB0aGUgZ2VuZXJhdGVkIHN0ZXBcbiAgICogYnVuZGxlIGZyb20gZGlzayB3aXRob3V0IGEgbGF0ZXIgYnVuZGxpbmcgcGFzcy5cbiAgICovXG4gIGJ1bmRsZVRyYW5zaXRpdmVMb2NhbFN0ZXBEZXBlbmRlbmNpZXM/OiBib29sZWFuO1xuICAvKipcbiAgICogQWJzb2x1dGUgZmlsZSBwYXRocyBvZiBkaXNjb3ZlcmVkIHdvcmtmbG93L3N0ZXAvc2VyZGUgZW50cmllcyB3aG9zZVxuICAgKiBpbXBvcnRzIG11c3QgYmUgdHJlYXRlZCBhcyBzaWRlLWVmZmVjdGZ1bC5cbiAgICpcbiAgICogVGhlIFNXQyBjb21waWxlciB0cmFuc2Zvcm0gaW5qZWN0cyByZWdpc3RyYXRpb24gY2FsbHMgKHdvcmtmbG93IElEcyxcbiAgICogc3RlcCBJRHMsIGNsYXNzIHNlcmlhbGl6YXRpb24sIGV0Yy4pIGludG8gdGhlc2UgZmlsZXMuIFdpdGhvdXQgdGhpc1xuICAgKiBvdmVycmlkZSwgZXNidWlsZCBob25vdXJzIGBcInNpZGVFZmZlY3RzXCI6IGZhbHNlYCBmcm9tIHRoZSBwYWNrYWdlJ3NcbiAgICogYHBhY2thZ2UuanNvbmAgYW5kIHNpbGVudGx5IGRyb3BzIGJhcmUgaW1wb3J0cyBvZiB0aGVzZSBtb2R1bGVzLlxuICAgKi9cbiAgc2lkZUVmZmVjdEVudHJpZXM/OiBzdHJpbmdbXTtcbn1cblxuY29uc3QgTk9ERV9SRVNPTFZFX09QVElPTlMgPSB7XG4gIGRlcGVuZGVuY3lUeXBlOiAnY29tbW9uanMnLFxuICBtb2R1bGVzOiBbJ25vZGVfbW9kdWxlcyddLFxuICBleHBvcnRzRmllbGRzOiBbJ2V4cG9ydHMnXSxcbiAgaW1wb3J0c0ZpZWxkczogWydpbXBvcnRzJ10sXG4gIGNvbmRpdGlvbk5hbWVzOiBbJ25vZGUnLCAncmVxdWlyZSddLFxuICBkZXNjcmlwdGlvbkZpbGVzOiBbJ3BhY2thZ2UuanNvbiddLFxuICBleHRlbnNpb25zOiBbXG4gICAgJy50cycsXG4gICAgJy50c3gnLFxuICAgICcubXRzJyxcbiAgICAnLmN0cycsXG4gICAgJy5janMnLFxuICAgICcubWpzJyxcbiAgICAnLmpzJyxcbiAgICAnLmpzeCcsXG4gICAgJy5qc29uJyxcbiAgICAnLm5vZGUnLFxuICBdLFxuICBlbmZvcmNlRXh0ZW5zaW9uczogZmFsc2UsXG4gIHN5bWxpbmtzOiB0cnVlLFxuICBtYWluRmllbGRzOiBbJ21haW4nXSxcbiAgbWFpbkZpbGVzOiBbJ2luZGV4J10sXG4gIHJvb3RzOiBbXSxcbiAgZnVsbHlTcGVjaWZpZWQ6IGZhbHNlLFxuICBwcmVmZXJSZWxhdGl2ZTogZmFsc2UsXG4gIHByZWZlckFic29sdXRlOiBmYWxzZSxcbiAgcmVzdHJpY3Rpb25zOiBbXSxcbn07XG5cbmNvbnN0IE5PREVfRVNNX1JFU09MVkVfT1BUSU9OUyA9IHtcbiAgLi4uTk9ERV9SRVNPTFZFX09QVElPTlMsXG4gIGRlcGVuZGVuY3lUeXBlOiAnZXNtJyxcbiAgY29uZGl0aW9uTmFtZXM6IFsnbm9kZScsICdpbXBvcnQnXSxcbn07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xufVxuXG50eXBlIElkTG9jYXRpb24gPSB7XG4gIGZpbGVQYXRoOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIGZvcm1hdElkTG9jYXRpb24obG9jYXRpb246IElkTG9jYXRpb24pOiBzdHJpbmcge1xuICByZXR1cm4gYCR7bG9jYXRpb24uZmlsZVBhdGh9IyR7bG9jYXRpb24ubmFtZX1gO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRVbmlxdWVNYW5pZmVzdElkcyhcbiAgZW50cmllc0J5RmlsZTogV29ya2Zsb3dNYW5pZmVzdFsnc3RlcHMnXSB8IFdvcmtmbG93TWFuaWZlc3RbJ3dvcmtmbG93cyddLFxuICBpZHM6IE1hcDxzdHJpbmcsIElkTG9jYXRpb24+LFxuICBnZXRJZDogKGRhdGE6IHsgc3RlcElkOiBzdHJpbmcgfSB8IHsgd29ya2Zsb3dJZDogc3RyaW5nIH0pID0+IHN0cmluZyxcbiAgbGFiZWw6ICdzdGVwJyB8ICd3b3JrZmxvdydcbik6IHZvaWQge1xuICBjb25zdCBlbnRyaWVzQnlGaWxlTGlzdCA9IE9iamVjdC5lbnRyaWVzKGVudHJpZXNCeUZpbGUgfHwge30pIGFzIEFycmF5PFxuICAgIFtzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHsgc3RlcElkOiBzdHJpbmcgfSB8IHsgd29ya2Zsb3dJZDogc3RyaW5nIH0+XVxuICA+O1xuICBmb3IgKGNvbnN0IFtmaWxlUGF0aCwgZW50cmllc10gb2YgZW50cmllc0J5RmlsZUxpc3QpIHtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBkYXRhXSBvZiBPYmplY3QuZW50cmllcyhlbnRyaWVzKSkge1xuICAgICAgY29uc3QgaWQgPSBnZXRJZChkYXRhKTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gaWRzLmdldChpZCk7XG4gICAgICBjb25zdCBjdXJyZW50ID0geyBmaWxlUGF0aCwgbmFtZSB9O1xuICAgICAgaWYgKFxuICAgICAgICBleGlzdGluZyAmJlxuICAgICAgICAoZXhpc3RpbmcuZmlsZVBhdGggIT09IGN1cnJlbnQuZmlsZVBhdGggfHxcbiAgICAgICAgICBleGlzdGluZy5uYW1lICE9PSBjdXJyZW50Lm5hbWUpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgaWROYW1lID0gbGFiZWwgPT09ICdzdGVwJyA/ICd3b3JrZmxvdyBzdGVwIElEJyA6ICd3b3JrZmxvdyBJRCc7XG4gICAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGAke2xhYmVsfSBmdW5jdGlvbmA7XG4gICAgICAgIGNvbnN0IGNhcGl0YWxpemVkTGFiZWwgPSBsYWJlbCA9PT0gJ3N0ZXAnID8gJ1N0ZXAnIDogJ1dvcmtmbG93JztcbiAgICAgICAgdGhyb3cgbmV3IFdvcmtmbG93QnVpbGRFcnJvcihcbiAgICAgICAgICBgRHVwbGljYXRlICR7aWROYW1lfSBcIiR7aWR9XCIgZ2VuZXJhdGVkIGZvciAke2Zvcm1hdElkTG9jYXRpb24oZXhpc3RpbmcpfSBhbmQgJHtmb3JtYXRJZExvY2F0aW9uKGN1cnJlbnQpfS5gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhpbnQ6XG4gICAgICAgICAgICAgIGAke2NhcGl0YWxpemVkTGFiZWx9IElEcyBtdXN0IGJlIHVuaXF1ZSBhY3Jvc3MgYSBidWlsZC4gYCArXG4gICAgICAgICAgICAgIGBJZiB5b3Ugb3duIG9uZSBvZiB0aGUgY29sbGlkaW5nIGZpbGVzLCByZW5hbWUgdGhlICR7ZnVuY3Rpb25OYW1lfSBvciBleHBvcnQgYCArXG4gICAgICAgICAgICAgIGB0aGUgcGFja2FnZSBmaWxlIHRocm91Z2ggYSB1bmlxdWUgcGFja2FnZSBzdWJwYXRoLiBJZiB0aGUgY29sbGlzaW9uIGlzIGluIGEgYCArXG4gICAgICAgICAgICAgIGB0cmFuc2l0aXZlIGRlcGVuZGVuY3kgeW91IGRvbid0IGNvbnRyb2wsIGZpbGUgYW4gaXNzdWUgd2l0aCB0aGUgdXBzdHJlYW0gYCArXG4gICAgICAgICAgICAgIGBwYWNrYWdlIG9yIHBpbiB0byBhIG5vbi1jb2xsaWRpbmcgdmVyc2lvbi5gLFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlkcy5zZXQoaWQsIGN1cnJlbnQpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZVdvcmtmbG93TWFuaWZlc3QoXG4gIHRhcmdldDogV29ya2Zsb3dNYW5pZmVzdCxcbiAgaW5jb21pbmc6IFdvcmtmbG93TWFuaWZlc3QsXG4gIHN0ZXBJZHM6IE1hcDxzdHJpbmcsIElkTG9jYXRpb24+LFxuICB3b3JrZmxvd0lkczogTWFwPHN0cmluZywgSWRMb2NhdGlvbj5cbik6IHZvaWQge1xuICBhc3NlcnRVbmlxdWVNYW5pZmVzdElkcyhcbiAgICBpbmNvbWluZy5zdGVwcyxcbiAgICBzdGVwSWRzLFxuICAgIChkYXRhKSA9PiAoZGF0YSBhcyB7IHN0ZXBJZDogc3RyaW5nIH0pLnN0ZXBJZCxcbiAgICAnc3RlcCdcbiAgKTtcbiAgYXNzZXJ0VW5pcXVlTWFuaWZlc3RJZHMoXG4gICAgaW5jb21pbmcud29ya2Zsb3dzLFxuICAgIHdvcmtmbG93SWRzLFxuICAgIChkYXRhKSA9PiAoZGF0YSBhcyB7IHdvcmtmbG93SWQ6IHN0cmluZyB9KS53b3JrZmxvd0lkLFxuICAgICd3b3JrZmxvdydcbiAgKTtcblxuICB0YXJnZXQud29ya2Zsb3dzID0gT2JqZWN0LmFzc2lnbih0YXJnZXQud29ya2Zsb3dzIHx8IHt9LCBpbmNvbWluZy53b3JrZmxvd3MpO1xuICB0YXJnZXQuc3RlcHMgPSBPYmplY3QuYXNzaWduKHRhcmdldC5zdGVwcyB8fCB7fSwgaW5jb21pbmcuc3RlcHMpO1xuICB0YXJnZXQuY2xhc3NlcyA9IE9iamVjdC5hc3NpZ24odGFyZ2V0LmNsYXNzZXMgfHwge30sIGluY29taW5nLmNsYXNzZXMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3djUGx1Z2luKG9wdGlvbnM6IFN3Y1BsdWdpbk9wdGlvbnMpOiBQbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICdzd2Mtd29ya2Zsb3ctcGx1Z2luJyxcbiAgICBzZXR1cChidWlsZCkge1xuICAgICAgbGV0IHN0ZXBJZHNGb3JDdXJyZW50QnVpbGQgPSBuZXcgTWFwPHN0cmluZywgSWRMb2NhdGlvbj4oKTtcbiAgICAgIGxldCB3b3JrZmxvd0lkc0ZvckN1cnJlbnRCdWlsZCA9IG5ldyBNYXA8c3RyaW5nLCBJZExvY2F0aW9uPigpO1xuXG4gICAgICBidWlsZC5vblN0YXJ0KCgpID0+IHtcbiAgICAgICAgc3RlcElkc0ZvckN1cnJlbnRCdWlsZCA9IG5ldyBNYXAoKTtcbiAgICAgICAgd29ya2Zsb3dJZHNGb3JDdXJyZW50QnVpbGQgPSBuZXcgTWFwKCk7XG4gICAgICB9KTtcblxuICAgICAgLy8gZXZlcnl0aGluZyBpcyBleHRlcm5hbCB1bmxlc3MgZXhwbGljaXRseSBjb25maWd1cmVkXG4gICAgICAvLyB0byBiZSBidW5kbGVkXG4gICAgICBjb25zdCBjanNSZXNvbHZlciA9IHByb21pc2lmeShcbiAgICAgICAgZW5oYW5jZWRSZXNvbHZlT3JpZy5jcmVhdGUoTk9ERV9SRVNPTFZFX09QVElPTlMpXG4gICAgICApO1xuICAgICAgY29uc3QgZXNtUmVzb2x2ZXIgPSBwcm9taXNpZnkoXG4gICAgICAgIGVuaGFuY2VkUmVzb2x2ZU9yaWcuY3JlYXRlKE5PREVfRVNNX1JFU09MVkVfT1BUSU9OUylcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGVuaGFuY2VkUmVzb2x2ZSA9IGFzeW5jIChjb250ZXh0OiBzdHJpbmcsIHBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBlc21SZXNvbHZlcihjb250ZXh0LCBwYXRoKTtcbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIHJldHVybiBjanNSZXNvbHZlcihjb250ZXh0LCBwYXRoKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgLy8gUHJlLWNvbXB1dGUgdGhlIG5vcm1hbGl6ZWQgc2lkZS1lZmZlY3QgZW50cmllcyBzZXQgZm9yIE8oMSkgbG9va3Vwcy5cbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTaWRlRWZmZWN0RW50cmllcyA9IG5ldyBTZXQoXG4gICAgICAgIG9wdGlvbnMuc2lkZUVmZmVjdEVudHJpZXM/Lm1hcCgoZSkgPT4gZS5yZXBsYWNlKC9cXFxcL2csICcvJykpXG4gICAgICApO1xuXG4gICAgICBidWlsZC5vblJlc29sdmUoeyBmaWx0ZXI6IC8uKi8gfSwgYXN5bmMgKGFyZ3MpID0+IHtcbiAgICAgICAgaWYgKGFyZ3MucGx1Z2luRGF0YT8uc2tpcFN3Y1BsdWdpbikgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFvcHRpb25zLmVudHJpZXNUb0J1bmRsZSAmJlxuICAgICAgICAgIG5vcm1hbGl6ZWRTaWRlRWZmZWN0RW50cmllcy5zaXplID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2hlbiBvbmx5IHNpZGVFZmZlY3RFbnRyaWVzIGlzIHNldCAobm8gZW50cmllc1RvQnVuZGxlKSwgd2Ugb25seVxuICAgICAgICAvLyBuZWVkIHRvIG92ZXJyaWRlIHNpZGVFZmZlY3RzIGZvciB0b3AtbGV2ZWwgYmFyZSBpbXBvcnRzIOKAlCB0eXBpY2FsbHlcbiAgICAgICAgLy8gZnJvbSB0aGUgdmlydHVhbCBlbnRyeS4gU2tpcCByZXNvbHV0aW9uIGZvciB0cmFuc2l0aXZlIGltcG9ydHNcbiAgICAgICAgLy8gKGR5bmFtaWMgaW1wb3J0cywgcmVxdWlyZXMsIGV0Yy4pIHRvIGF2b2lkIHVubmVjZXNzYXJ5IG92ZXJoZWFkLlxuICAgICAgICBpZiAoIW9wdGlvbnMuZW50cmllc1RvQnVuZGxlICYmIGFyZ3Mua2luZCAhPT0gJ2ltcG9ydC1zdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNwZWNpZmllciA9IGFyZ3MucGF0aDtcbiAgICAgICAgICBjb25zdCBzcGVjaWZpZXJJc1BhdGggPVxuICAgICAgICAgICAgc3BlY2lmaWVyLnN0YXJ0c1dpdGgoJy4nKSB8fCBzcGVjaWZpZXIuc3RhcnRzV2l0aCgnLycpO1xuXG4gICAgICAgICAgbGV0IHJlc29sdmVkUGF0aDogc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgLy8gUGF0aC1zdHlsZSBzcGVjaWZpZXJzICguL2ZvbywgLi4vZm9vLCAvYWJzL3BhdGgpIGV4dGVybmFsaXplIGFzXG4gICAgICAgICAgLy8gcmVsYXRpdmUgcGF0aHMgZnJvbSBgb3V0ZGlyYC4gQmFyZSBzcGVjaWZpZXJzIChucG0gcGFja2FnZXMpXG4gICAgICAgICAgLy8gZXh0ZXJuYWxpemUgYXMtaXMgc28gTm9kZSBjYW4gcmVzb2x2ZSB0aGVtIGF0IHJ1bnRpbWUuXG4gICAgICAgICAgY29uc3Qgc2hvdWxkTWFrZVJlbGF0aXZlID0gc3BlY2lmaWVySXNQYXRoO1xuXG4gICAgICAgICAgaWYgKHNwZWNpZmllcklzUGF0aCkge1xuICAgICAgICAgICAgcmVzb2x2ZWRQYXRoID0gYXdhaXQgZW5oYW5jZWRSZXNvbHZlKGFyZ3MucmVzb2x2ZURpciwgc3BlY2lmaWVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVzb2x2ZSBmcm9tIHByb2plY3Qgcm9vdCBzbyBuZXN0ZWQgZGVwcyBhcmVuJ3QgZXh0ZXJuYWxpemVkXG4gICAgICAgICAgICByZXNvbHZlZFBhdGggPSBhd2FpdCBlbmhhbmNlZFJlc29sdmUoXG4gICAgICAgICAgICAgIGJ1aWxkLmluaXRpYWxPcHRpb25zLmFic1dvcmtpbmdEaXIgfHwgcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgICAgICAgc3BlY2lmaWVyXG4gICAgICAgICAgICApLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7IC8vIHN3YWxsb3cgc28gZXNidWlsZCBmYWxsYmFjayBiZWxvdyBjYW4gdHJ5XG5cbiAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byBlc2J1aWxkIGZvciBhbGlhc2VzL3RzY29uZmlnIHBhdGhzLlxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIElmIHRoZSBzcGVjaWZpZXIgcmVzb2x2ZXMgdG8gYSBwcm9qZWN0LWxvY2FsIGZpbGUgdmlhIGFuXG4gICAgICAgICAgICAvLyBhbGlhcy9wYXRoIG1hcHBpbmcgKGUuZy4gdHNjb25maWcgYHBhdGhzYCwgZXNidWlsZCBgYWxpYXNgLFxuICAgICAgICAgICAgLy8gc2VsZi1yZWZlcmVuY2luZyBwYWNrYWdlIG5hbWVzIGxpa2UgYEBteS1wa2cvbGliL2Zvb2ApLCB3ZVxuICAgICAgICAgICAgLy8gYnVuZGxlIGl0IGlubGluZSByYXRoZXIgdGhhbiBleHRlcm5hbGl6aW5nLlxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vIEV4dGVybmFsaXppbmcgc3VjaCBmaWxlcyBpcyB1bnNhZmU6IHdlJ2QgZW1pdCBhIHJlbGF0aXZlXG4gICAgICAgICAgICAvLyBpbXBvcnQgdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBvbiBkaXNrLCBidXQgdGhhdCBzb3VyY2UgY2FuXG4gICAgICAgICAgICAvLyBjb250YWluIGZ1cnRoZXIgYWxpYXMgaW1wb3J0cy4gQXQgcnVudGltZSwgTm9kZSdzIEVTTSBsb2FkZXJcbiAgICAgICAgICAgIC8vIGRvZXNuJ3Qga25vdyBhYm91dCB0c2NvbmZpZyBwYXRocyBvciBidWlsZC10aW1lIGFsaWFzZXMsIHNvXG4gICAgICAgICAgICAvLyB0aG9zZSB0cmFuc2l0aXZlIGltcG9ydHMgdGhyb3cgYEVSUl9NT0RVTEVfTk9UX0ZPVU5EYCAvXG4gICAgICAgICAgICAvLyBgUGFja2FnZSBzdWJwYXRoIC4uLiBpcyBub3QgZGVmaW5lZCBieSBcImV4cG9ydHNcImAuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gQnVuZGxpbmcgaW5saW5lIGVuc3VyZXMgYWxpYXMtYmFzZWQgaW1wb3J0cyBhcmUgcmVzb2x2ZWQgYXRcbiAgICAgICAgICAgIC8vIGJ1aWxkIHRpbWUgKHdoZXJlIHRoZSBhbGlhcyBtYXAgaXMga25vd24pIGFuZCB0aGUgcnVudGltZVxuICAgICAgICAgICAgLy8gbmV2ZXIgc2VlcyBhbiB1bnJlc29sdmFibGUgc3BlY2lmaWVyLlxuICAgICAgICAgICAgaWYgKCFyZXNvbHZlZFBhdGgpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXNidWlsZFJlc3VsdCA9IGF3YWl0IGJ1aWxkLnJlc29sdmUoc3BlY2lmaWVyLCB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZURpcjogYXJncy5yZXNvbHZlRGlyLFxuICAgICAgICAgICAgICAgIGtpbmQ6IGFyZ3Mua2luZCxcbiAgICAgICAgICAgICAgICBwbHVnaW5EYXRhOiB7IHNraXBTd2NQbHVnaW46IHRydWUgfSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNvbnN0IGRpZFJlc29sdmUgPVxuICAgICAgICAgICAgICAgICEhZXNidWlsZFJlc3VsdC5wYXRoICYmICFlc2J1aWxkUmVzdWx0LmVycm9ycy5sZW5ndGg7XG4gICAgICAgICAgICAgIGNvbnN0IGlzUHJvamVjdExvY2FsRmlsZSA9XG4gICAgICAgICAgICAgICAgZGlkUmVzb2x2ZSAmJlxuICAgICAgICAgICAgICAgICFlc2J1aWxkUmVzdWx0LmV4dGVybmFsICYmXG4gICAgICAgICAgICAgICAgIWVzYnVpbGRSZXN1bHQucGF0aFxuICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJy8nKVxuICAgICAgICAgICAgICAgICAgLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLycpO1xuICAgICAgICAgICAgICBpZiAoaXNQcm9qZWN0TG9jYWxGaWxlKSB7XG4gICAgICAgICAgICAgICAgLy8gTGV0IGVzYnVpbGQgYnVuZGxlIHRoaXMgYWxpYXNlZCBwcm9qZWN0LWxvY2FsIGZpbGUgaW5saW5lXG4gICAgICAgICAgICAgICAgLy8gKHJldHVybiBudWxsIHRvIGRlZmVyIHRvIGVzYnVpbGQncyBub3JtYWwgcGlwZWxpbmUpLiBUaGVcbiAgICAgICAgICAgICAgICAvLyBTV0MgYG9uTG9hZGAgaGFuZGxlciB3aWxsIHN0aWxsIHByb2Nlc3MgaXQuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5lbnRyaWVzVG9CdW5kbGUgJiZcbiAgICAgICAgICAgICAgICBlc2J1aWxkUmVzdWx0LnBhdGg/LmVuZHNXaXRoKCcubm9kZScpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBleHRlcm5hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHBhdGg6IHNwZWNpZmllcixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFyZXNvbHZlZFBhdGgpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgLy8gTm9ybWFsaXplIHRvIGZvcndhcmQgc2xhc2hlcyBmb3IgY3Jvc3MtcGxhdGZvcm0gY29tcGFyaXNvblxuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRSZXNvbHZlZFBhdGggPSBub3JtYWxpemVQYXRoKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgY29uc3Qgd29ya2luZ0RpciA9XG4gICAgICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5hYnNXb3JraW5nRGlyIHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgICAgICAgY29uc3QgcHJvamVjdFJvb3QgPSBvcHRpb25zLnByb2plY3RSb290IHx8IHdvcmtpbmdEaXI7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBvcHRpb25zLmVudHJpZXNUb0J1bmRsZSAmJlxuICAgICAgICAgICAgbm9ybWFsaXplZFJlc29sdmVkUGF0aC5lbmRzV2l0aCgnLm5vZGUnKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZXh0ZXJuYWw6IHRydWUsXG4gICAgICAgICAgICAgIHBhdGg6IHNwZWNpZmllcixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBtb2R1bGUgaXMgYSBkaXNjb3ZlcmVkIGVudHJ5IHdob3NlIFNXQy10cmFuc2Zvcm1lZFxuICAgICAgICAgIC8vIGNvZGUgY29udGFpbnMgc2lkZSBlZmZlY3RzICh3b3JrZmxvdy9zdGVwL2NsYXNzIHJlZ2lzdHJhdGlvbikuXG4gICAgICAgICAgLy8gT3ZlcnJpZGUgdGhlIHBhY2thZ2UuanNvbiBcInNpZGVFZmZlY3RzXCI6IGZhbHNlIHNvIGVzYnVpbGQgZG9lcyBub3RcbiAgICAgICAgICAvLyBkcm9wIGJhcmUgaW1wb3J0cyBvZiB0aGVzZSBtb2R1bGVzLlxuICAgICAgICAgIGNvbnN0IGhhc1NpZGVFZmZlY3RzID0gbm9ybWFsaXplZFNpZGVFZmZlY3RFbnRyaWVzLmhhcyhcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRSZXNvbHZlZFBhdGhcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKG9wdGlvbnMuZW50cmllc1RvQnVuZGxlKSB7XG4gICAgICAgICAgICBsZXQgc2hvdWxkQnVuZGxlID0gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5VG9CdW5kbGUgb2Ygb3B0aW9ucy5lbnRyaWVzVG9CdW5kbGUpIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEVudHJ5ID0gZW50cnlUb0J1bmRsZS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cbiAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRSZXNvbHZlZFBhdGggPT09IG5vcm1hbGl6ZWRFbnRyeSkge1xuICAgICAgICAgICAgICAgIHNob3VsZEJ1bmRsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBpZiB0aGUgY3VycmVudCBlbnRyeSBpbXBvcnRzIGEgY2hpbGQgdGhhdCBuZWVkc1xuICAgICAgICAgICAgICAvLyB0byBiZSBidW5kbGVkIHRoZW4gaXQgbmVlZHMgdG8gYWxzbyBiZSBidW5kbGVkIHNvXG4gICAgICAgICAgICAgIC8vIHRoYXQgdGhlIGNoaWxkIGNhbiBoYXZlIG91ciB0cmFuc2Zvcm0gYXBwbGllZFxuICAgICAgICAgICAgICBpZiAocGFyZW50SGFzQ2hpbGQobm9ybWFsaXplZFJlc29sdmVkUGF0aCwgbm9ybWFsaXplZEVudHJ5KSkge1xuICAgICAgICAgICAgICAgIHNob3VsZEJ1bmRsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBCdW5kbGUgcHJvamVjdC1sb2NhbCBzb3VyY2UgZmlsZXMgdGhhdCBhcmUgaW1wb3J0ZWQgYnkgYVxuICAgICAgICAgICAgICAvLyBzdGVwL3NlcmRlIGVudHJ5IHNvIGRpcmVjdCBydW50aW1lIGxvYWRlcnMgZG8gbm90IHNlZSByYXcgVFNcbiAgICAgICAgICAgICAgLy8gZXh0ZW5zaW9ubGVzcyBpbXBvcnRzLiBLZWVwIHBhY2thZ2UgZGVwZW5kZW5jaWVzIGV4dGVybmFsXG4gICAgICAgICAgICAgIC8vIHVubGVzcyB0aGV5IGFyZSB0aGVtc2VsdmVzIGluIGVudHJpZXNUb0J1bmRsZSBvciBhcmUgcGFyZW50c1xuICAgICAgICAgICAgICAvLyBvZiBhIGRpc2NvdmVyZWQgd29ya2Zsb3cvc3RlcC9zZXJkZSBmaWxlIHZpYSB0aGUgY2hlY2sgYWJvdmUuXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBvcHRpb25zLmJ1bmRsZVRyYW5zaXRpdmVMb2NhbFN0ZXBEZXBlbmRlbmNpZXMgJiZcbiAgICAgICAgICAgICAgICBpc1Byb2plY3RMb2NhbEZpbGUobm9ybWFsaXplZFJlc29sdmVkUGF0aCwgcHJvamVjdFJvb3QpICYmXG4gICAgICAgICAgICAgICAgcGFyZW50SGFzQ2hpbGQobm9ybWFsaXplZEVudHJ5LCBub3JtYWxpemVkUmVzb2x2ZWRQYXRoKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBzaG91bGRCdW5kbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaG91bGRCdW5kbGUpIHtcbiAgICAgICAgICAgICAgLy8gTGV0IGVzYnVpbGQgYnVuZGxlIHRoaXMgZW50cnksIGJ1dCBvdmVycmlkZSBzaWRlRWZmZWN0cyBpZiBuZWVkZWQuXG4gICAgICAgICAgICAgIC8vIFdlIG11c3QgcmV0dXJuIHRoZSByZXNvbHZlZCBgcGF0aGAgYWxvbmdzaWRlIGBzaWRlRWZmZWN0c2AgYmVjYXVzZVxuICAgICAgICAgICAgICAvLyByZXR1cm5pbmcgb25seSBgeyBzaWRlRWZmZWN0czogdHJ1ZSB9YCB3aXRob3V0IGEgcGF0aCBjYXVzZXMgZXNidWlsZFxuICAgICAgICAgICAgICAvLyB0byBmYWxsIHRocm91Z2ggdG8gaXRzIG93biByZXNvbHZlciwgd2hpY2ggcmUtcmVhZHMgdGhlIHBhY2thZ2UuanNvblxuICAgICAgICAgICAgICAvLyBhbmQgYXBwbGllcyBgXCJzaWRlRWZmZWN0c1wiOiBmYWxzZWAgZnJvbSB0aGVyZS5cbiAgICAgICAgICAgICAgcmV0dXJuIGhhc1NpZGVFZmZlY3RzXG4gICAgICAgICAgICAgICAgPyB7IHBhdGg6IHJlc29sdmVkUGF0aCwgc2lkZUVmZmVjdHM6IHRydWUgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGV4dGVybmFsUGF0aDogc3RyaW5nO1xuICAgICAgICAgICAgaWYgKHNob3VsZE1ha2VSZWxhdGl2ZSkge1xuICAgICAgICAgICAgICAvLyBXaGVuIHRoZSByZXNvbHZlZCBmaWxlIGxpdmVzIGluc2lkZSBub2RlX21vZHVsZXMsIGxldFxuICAgICAgICAgICAgICAvLyBlc2J1aWxkIGJ1bmRsZSBpdCByYXRoZXIgdGhhbiBleHRlcm5hbGl6aW5nIHdpdGggYSBkZWVwbHlcbiAgICAgICAgICAgICAgLy8gbmVzdGVkIHJlbGF0aXZlIHBhdGguIERvd25zdHJlYW0gYnVuZGxlcnMgKFJvbGx1cC9WaXRlKVxuICAgICAgICAgICAgICAvLyBjYW4ndCByZXdyaXRlIG9wYXF1ZSBgX19yZXF1aXJlKClgIGNhbGxzIGluIENKUyBzaGltcywgc29cbiAgICAgICAgICAgICAgLy8gcmVsYXRpdmUgcGF0aHMgY29tcHV0ZWQgZm9yIGBvdXRkaXJgIGJyZWFrIG9uY2UgdGhlIG91dHB1dFxuICAgICAgICAgICAgICAvLyBpcyByZWJ1bmRsZWQgdG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5LlxuICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZFJlc29sdmVkUGF0aC5pbmNsdWRlcygnL25vZGVfbW9kdWxlcy8nKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsOyAvLyBsZXQgZXNidWlsZCBidW5kbGUgaXRcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGV4dGVybmFsUGF0aCA9IHJlbGF0aXZlKFxuICAgICAgICAgICAgICAgIG9wdGlvbnMub3V0ZGlyIHx8IHByb2Nlc3MuY3dkKCksXG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRQYXRoXG4gICAgICAgICAgICAgICkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnJld3JpdGVUc0V4dGVuc2lvbnMpIHtcbiAgICAgICAgICAgICAgICAvLyBSZXdyaXRlIFR5cGVTY3JpcHQgZXh0ZW5zaW9ucyB0byB0aGVpciBKUyBlcXVpdmFsZW50cyBzbyB0aGVcbiAgICAgICAgICAgICAgICAvLyBleHRlcm5hbGl6ZWQgaW1wb3J0IGlzIGxvYWRhYmxlIGJ5IE5vZGUncyBuYXRpdmUgRVNNIGxvYWRlci5cbiAgICAgICAgICAgICAgICBleHRlcm5hbFBhdGggPSBleHRlcm5hbFBhdGhcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXC50c3g/JC8sICcuanMnKVxuICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcLm10cyQvLCAnLm1qcycpXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwuY3RzJC8sICcuY2pzJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGV4dGVybmFsUGF0aCA9IHNwZWNpZmllcjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZXh0ZXJuYWw6IHRydWUsXG4gICAgICAgICAgICAgIHBhdGg6IGV4dGVybmFsUGF0aCxcbiAgICAgICAgICAgICAgc2lkZUVmZmVjdHM6IGhhc1NpZGVFZmZlY3RzIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gTm8gZW50cmllc1RvQnVuZGxlIOKAlCBvbmx5IG92ZXJyaWRlIHNpZGVFZmZlY3RzIHdoZW4gbmVlZGVkLlxuICAgICAgICAgIC8vIFdlIG11c3QgcmV0dXJuIHRoZSByZXNvbHZlZCBgcGF0aGAgYWxvbmdzaWRlIGBzaWRlRWZmZWN0c2AgYmVjYXVzZVxuICAgICAgICAgIC8vIHJldHVybmluZyBvbmx5IGB7IHNpZGVFZmZlY3RzOiB0cnVlIH1gIHdpdGhvdXQgYSBwYXRoIGNhdXNlcyBlc2J1aWxkXG4gICAgICAgICAgLy8gdG8gZmFsbCB0aHJvdWdoIHRvIGl0cyBvd24gcmVzb2x2ZXIsIHdoaWNoIHJlLXJlYWRzIHRoZSBwYWNrYWdlLmpzb25cbiAgICAgICAgICAvLyBhbmQgYXBwbGllcyBgXCJzaWRlRWZmZWN0c1wiOiBmYWxzZWAgZnJvbSB0aGVyZS5cbiAgICAgICAgICByZXR1cm4gaGFzU2lkZUVmZmVjdHNcbiAgICAgICAgICAgID8geyBwYXRoOiByZXNvbHZlZFBhdGgsIHNpZGVFZmZlY3RzOiB0cnVlIH1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KTtcblxuICAgICAgLy8gSGFuZGxlIFR5cGVTY3JpcHQgYW5kIEphdmFTY3JpcHQgZmlsZXNcbiAgICAgIGJ1aWxkLm9uTG9hZCh7IGZpbHRlcjoganNUc1JlZ2V4IH0sIGFzeW5jIChhcmdzKSA9PiB7XG4gICAgICAgIC8vIERldGVybWluZSBpZiB0aGlzIGlzIGEgVHlwZVNjcmlwdCBmaWxlXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBsb2FkZXIgYmFzZWQgb24gdGhlIG91dHB1dFxuICAgICAgICAgIGxldCBsb2FkZXI6ICdqcycgfCAnanN4JyB8ICd0c3gnID0gJ2pzJztcbiAgICAgICAgICBpZiAoYXJncy5wYXRoLmVuZHNXaXRoKCcuanN4JykpIHtcbiAgICAgICAgICAgIGxvYWRlciA9ICdqc3gnO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYXJncy5wYXRoLmVuZHNXaXRoKCcudHN4JykpIHtcbiAgICAgICAgICAgIGxvYWRlciA9ICd0c3gnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzb3VyY2UgPSBhd2FpdCByZWFkRmlsZShhcmdzLnBhdGgsICd1dGY4Jyk7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFNvdXJjZSA9IHNvdXJjZVxuICAgICAgICAgICAgLnJlcGxhY2UoL3JlcXVpcmVcXChcXHMqKFsnXCJdKXNlcnZlci1vbmx5XFwxXFxzKlxcKS9nLCAndm9pZCAwJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9yZXF1aXJlXFwoXFxzKihbJ1wiXSljbGllbnQtb25seVxcMVxccypcXCkvZywgJ3ZvaWQgMCcpO1xuXG4gICAgICAgICAgLy8gQ2FsY3VsYXRlIHJlbGF0aXZlIHBhdGggZm9yIFNXQyBwbHVnaW5cbiAgICAgICAgICAvLyBUaGUgZmlsZW5hbWUgcGFyYW1ldGVyIGlzIHVzZWQgdG8gZ2VuZXJhdGUgd29ya2Zsb3dJZC9zdGVwSWQsIHNvIGl0IG11c3QgYmUgcmVsYXRpdmVcbiAgICAgICAgICBjb25zdCB3b3JraW5nRGlyID1cbiAgICAgICAgICAgIGJ1aWxkLmluaXRpYWxPcHRpb25zLmFic1dvcmtpbmdEaXIgfHwgcHJvY2Vzcy5jd2QoKTtcbiAgICAgICAgICBjb25zdCBwcm9qZWN0Um9vdCA9IG9wdGlvbnMucHJvamVjdFJvb3QgfHwgd29ya2luZ0RpcjtcbiAgICAgICAgICAvLyBOb3JtYWxpemUgcGF0aHM6IGNvbnZlcnQgYmFja3NsYXNoZXMgdG8gZm9yd2FyZCBzbGFzaGVzIGFuZCByZW1vdmUgdHJhaWxpbmcgc2xhc2hlc1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRXb3JraW5nRGlyID0gd29ya2luZ0RpclxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJy8nKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBhcmdzLnBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gICAgICAgICAgLy8gV2luZG93cyBmaXg6IEFsd2F5cyBkbyBjYXNlLWluc2Vuc2l0aXZlIHBhdGggY29tcGFyaXNvbiBhcyB0aGUgUFJJTUFSWSBsb2dpY1xuICAgICAgICAgIC8vIHRvIHdvcmsgYXJvdW5kIG5vZGU6cGF0aC5yZWxhdGl2ZSgpIG5vdCByZWNvZ25pemluZyBwYXRocyB3aXRoIGRpZmZlcmVudCBkcml2ZVxuICAgICAgICAgIC8vIGxldHRlciBjYXNpbmcgKGUuZy4sIEQ6IHZzIGQ6KSBhcyBiZWluZyBpbiB0aGUgc2FtZSB0cmVlXG4gICAgICAgICAgY29uc3QgbG93ZXJXZCA9IG5vcm1hbGl6ZWRXb3JraW5nRGlyLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgY29uc3QgbG93ZXJQYXRoID0gbm9ybWFsaXplZFBhdGgudG9Mb3dlckNhc2UoKTtcblxuICAgICAgICAgIGxldCByZWxhdGl2ZUZpbGVwYXRoOiBzdHJpbmc7XG4gICAgICAgICAgaWYgKGxvd2VyUGF0aC5zdGFydHNXaXRoKGxvd2VyV2QgKyAnLycpKSB7XG4gICAgICAgICAgICAvLyBGaWxlIGlzIHVuZGVyIHdvcmtpbmcgZGlyZWN0b3J5IC0gbWFudWFsbHkgY2FsY3VsYXRlIHJlbGF0aXZlIHBhdGhcbiAgICAgICAgICAgIC8vIFRoaXMgZW5zdXJlcyB3ZSBnZXQgYSByZWxhdGl2ZSBwYXRoIGV2ZW4gd2l0aCBkcml2ZSBsZXR0ZXIgY2FzaW5nIGlzc3Vlc1xuICAgICAgICAgICAgcmVsYXRpdmVGaWxlcGF0aCA9IG5vcm1hbGl6ZWRQYXRoLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgbm9ybWFsaXplZFdvcmtpbmdEaXIubGVuZ3RoICsgMVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGxvd2VyUGF0aCA9PT0gbG93ZXJXZCkge1xuICAgICAgICAgICAgLy8gRmlsZSBJUyB0aGUgd29ya2luZyBkaXJlY3RvcnlcbiAgICAgICAgICAgIHJlbGF0aXZlRmlsZXBhdGggPSAnLic7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpbGUgaXMgb3V0c2lkZSB3b3JraW5nIGRpcmVjdG9yeSAtIHVzZSByZWxhdGl2ZSgpIGFuZCBzdHJpcCAuLi8gcHJlZml4ZXMgaWYgbmVlZGVkXG4gICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoID0gcmVsYXRpdmUoXG4gICAgICAgICAgICAgIG5vcm1hbGl6ZWRXb3JraW5nRGlyLFxuICAgICAgICAgICAgICBub3JtYWxpemVkUGF0aFxuICAgICAgICAgICAgKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG5cbiAgICAgICAgICAgIC8vIEhhbmRsZSBmaWxlcyBkaXNjb3ZlcmVkIG91dHNpZGUgdGhlIHdvcmtpbmcgZGlyZWN0b3J5XG4gICAgICAgICAgICAvLyBUaGVzZSBjb21lIGJhY2sgYXMgLi4vcGF0aC90by9maWxlLCBidXQgd2Ugd2FudCBqdXN0IHBhdGgvdG8vZmlsZVxuICAgICAgICAgICAgaWYgKHJlbGF0aXZlRmlsZXBhdGguc3RhcnRzV2l0aCgnLi4vJykpIHtcbiAgICAgICAgICAgICAgY29uc3QgYWxpYXNlZFJlbGF0aXZlUGF0aCA9XG4gICAgICAgICAgICAgICAgYXdhaXQgcmVzb2x2ZVdvcmtmbG93QWxpYXNSZWxhdGl2ZVBhdGgoYXJncy5wYXRoLCB3b3JraW5nRGlyKTtcbiAgICAgICAgICAgICAgaWYgKGFsaWFzZWRSZWxhdGl2ZVBhdGgpIHtcbiAgICAgICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoID0gYWxpYXNlZFJlbGF0aXZlUGF0aDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoID0gcmVsYXRpdmVGaWxlcGF0aFxuICAgICAgICAgICAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKHBhcnQpID0+IHBhcnQgIT09ICcuLicpXG4gICAgICAgICAgICAgICAgICAuam9pbignLycpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRmluYWwgc2FmZXR5IGNoZWNrIC0gZW5zdXJlIHdlIG5ldmVyIHBhc3MgYW4gYWJzb2x1dGUgcGF0aCB0byBTV0NcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoLmluY2x1ZGVzKCc6JykgfHxcbiAgICAgICAgICAgIHJlbGF0aXZlRmlsZXBhdGguc3RhcnRzV2l0aCgnLycpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBpZiBpdCBkb2VzLCB1c2UganVzdCB0aGUgZmlsZW5hbWUgYXMgbGFzdCByZXNvcnRcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIGBbRVJST1JdIHJlbGF0aXZlRmlsZXBhdGggaXMgc3RpbGwgYWJzb2x1dGU6ICR7cmVsYXRpdmVGaWxlcGF0aH1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmVsYXRpdmVGaWxlcGF0aCA9IG5vcm1hbGl6ZWRQYXRoLnNwbGl0KCcvJykucG9wKCkgfHwgJ3Vua25vd24udHMnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHsgY29kZTogdHJhbnNmb3JtZWRDb2RlLCB3b3JrZmxvd01hbmlmZXN0IH0gPVxuICAgICAgICAgICAgYXdhaXQgYXBwbHlTd2NUcmFuc2Zvcm0oXG4gICAgICAgICAgICAgIHJlbGF0aXZlRmlsZXBhdGgsXG4gICAgICAgICAgICAgIG5vcm1hbGl6ZWRTb3VyY2UsXG4gICAgICAgICAgICAgIG9wdGlvbnMubW9kZSxcbiAgICAgICAgICAgICAgYXJncy5wYXRoLCAvLyBQYXNzIGFic29sdXRlIHBhdGggZm9yIG1vZHVsZSBzcGVjaWZpZXIgcmVzb2x1dGlvblxuICAgICAgICAgICAgICBwcm9qZWN0Um9vdFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICghb3B0aW9ucy53b3JrZmxvd01hbmlmZXN0KSB7XG4gICAgICAgICAgICBvcHRpb25zLndvcmtmbG93TWFuaWZlc3QgPSB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtZXJnZVdvcmtmbG93TWFuaWZlc3QoXG4gICAgICAgICAgICBvcHRpb25zLndvcmtmbG93TWFuaWZlc3QsXG4gICAgICAgICAgICB3b3JrZmxvd01hbmlmZXN0LFxuICAgICAgICAgICAgc3RlcElkc0ZvckN1cnJlbnRCdWlsZCxcbiAgICAgICAgICAgIHdvcmtmbG93SWRzRm9yQ3VycmVudEJ1aWxkXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50czogdHJhbnNmb3JtZWRDb2RlLFxuICAgICAgICAgICAgbG9hZGVyLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYOKdjCBTV0MgdHJhbnNmb3JtIGVycm9yIGluICR7YXJncy5wYXRofTpgLFxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyb3JzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBgU1dDIHRyYW5zZm9ybSBmYWlsZWQ6ICR7ZXJyb3JNZXNzYWdlfWAsXG4gICAgICAgICAgICAgICAgbG9jYXRpb246IHsgZmlsZTogYXJncy5wYXRoLCBsaW5lOiAwLCBjb2x1bW46IDAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNQcm9qZWN0TG9jYWxGaWxlKGZpbGVQYXRoOiBzdHJpbmcsIHByb2plY3RSb290OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKG5vcm1hbGl6ZVBhdGgoZmlsZVBhdGgpLmluY2x1ZGVzKCcvbm9kZV9tb2R1bGVzLycpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICByZXNvbHZlTW9kdWxlU3BlY2lmaWVyKGZpbGVQYXRoLCBwcm9qZWN0Um9vdCkubW9kdWxlU3BlY2lmaWVyID09PSB1bmRlZmluZWRcbiAgKTtcbn1cbiJdfQ==
375
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3djLWVzYnVpbGQtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N3Yy1lc2J1aWxkLXBsdWdpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sbUJBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsT0FBTyxFQUNMLGlCQUFpQixHQUVsQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFDTCxTQUFTLEVBQ1QsY0FBYyxHQUNmLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUEwQ3ZFLE1BQU0sb0JBQW9CLEdBQUc7SUFDM0IsY0FBYyxFQUFFLFVBQVU7SUFDMUIsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDO0lBQ3pCLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQztJQUMxQixhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUM7SUFDMUIsY0FBYyxFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQztJQUNuQyxnQkFBZ0IsRUFBRSxDQUFDLGNBQWMsQ0FBQztJQUNsQyxVQUFVLEVBQUU7UUFDVixLQUFLO1FBQ0wsTUFBTTtRQUNOLE1BQU07UUFDTixNQUFNO1FBQ04sTUFBTTtRQUNOLE1BQU07UUFDTixLQUFLO1FBQ0wsTUFBTTtRQUNOLE9BQU87UUFDUCxPQUFPO0tBQ1I7SUFDRCxpQkFBaUIsRUFBRSxLQUFLO0lBQ3hCLFFBQVEsRUFBRSxJQUFJO0lBQ2Qs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QkFBcUIsQ0FDbkIsT0FBTyxDQUFDLGdCQUFnQixFQUN4QixnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBQ3RCLDBCQUEwQixDQUMzQixDQUFDO29CQUVGLE9BQU87d0JBQ0wsUUFBUSxFQUFFLGVBQWU7d0JBQ3pCLE1BQU07cUJBQ1AsQ0FBQztnQkFDSixDQUFDO2dCQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7b0JBQ2YsTUFBTSxZQUFZLEdBQ2hCLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDekQsT0FBTyxDQUFDLEtBQUssQ0FDWCw0QkFBNEIsSUFBSSxDQUFDLElBQUksR0FBRyxFQUN4QyxZQUFZLENBQ2IsQ0FBQztvQkFDRixPQUFPO3dCQUNMLE1BQU0sRUFBRTs0QkFDTjtnQ0FDRSxJQUFJLEVBQUUseUJBQXlCLFlBQVksRUFBRTtnQ0FDN0MsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFOzZCQUNsRDt5QkFDRjtxQkFDRixDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsUUFBZ0IsRUFBRSxXQUFtQjtJQUMvRCxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1FBQ3ZELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE9BQU8sQ0FDTCxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUMsZUFBZSxLQUFLLFNBQVMsQ0FDNUUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkRmlsZSB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgcmVsYXRpdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCB7IFdvcmtmbG93QnVpbGRFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IGVuaGFuY2VkUmVzb2x2ZU9yaWcgZnJvbSAnZW5oYW5jZWQtcmVzb2x2ZSc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gJ2VzYnVpbGQnO1xuaW1wb3J0IHtcbiAgYXBwbHlTd2NUcmFuc2Zvcm0sXG4gIHR5cGUgV29ya2Zsb3dNYW5pZmVzdCxcbn0gZnJvbSAnLi9hcHBseS1zd2MtdHJhbnNmb3JtLmpzJztcbmltcG9ydCB7XG4gIGpzVHNSZWdleCxcbiAgcGFyZW50SGFzQ2hpbGQsXG59IGZyb20gJy4vZGlzY292ZXItZW50cmllcy1lc2J1aWxkLXBsdWdpbi5qcyc7XG5pbXBvcnQgeyByZXNvbHZlTW9kdWxlU3BlY2lmaWVyIH0gZnJvbSAnLi9tb2R1bGUtc3BlY2lmaWVyLmpzJztcbmltcG9ydCB7IHJlc29sdmVXb3JrZmxvd0FsaWFzUmVsYXRpdmVQYXRoIH0gZnJvbSAnLi93b3JrZmxvdy1hbGlhcy5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3djUGx1Z2luT3B0aW9ucyB7XG4gIG1vZGU6ICdzdGVwJyB8ICd3b3JrZmxvdyc7XG4gIGVudHJpZXNUb0J1bmRsZT86IHN0cmluZ1tdO1xuICBvdXRkaXI/OiBzdHJpbmc7XG4gIHByb2plY3RSb290Pzogc3RyaW5nO1xuICBtb2R1bGVTcGVjaWZpZXJSb290Pzogc3RyaW5nO1xuICB3b3JrZmxvd01hbmlmZXN0PzogV29ya2Zsb3dNYW5pZmVzdDtcbiAgLyoqXG4gICAqIFJld3JpdGUgVHlwZVNjcmlwdCBleHRlbnNpb25zICgudHMsIC50c3gsIC5tdHMsIC5jdHMpIHRvIHRoZWlyIEpTXG4gICAqIGVxdWl2YWxlbnRzICguanMsIC5tanMsIC5janMpIGluIGV4dGVybmFsaXplZCBpbXBvcnQgcGF0aHMuXG4gICAqXG4gICAqIEVuYWJsZSB0aGlzIHdoZW4gdGhlIG91dHB1dCBidW5kbGUgaXMgY29uc3VtZWQgZGlyZWN0bHkgYnkgTm9kZSdzIG5hdGl2ZVxuICAgKiBFU00gbG9hZGVyIChlLmcuIHZpdGVzdCksIHdoaWNoIGNhbm5vdCByZXNvbHZlIC50cyBleHRlbnNpb25zLlxuICAgKlxuICAgKiBMZWF2ZSBkaXNhYmxlZCAoZGVmYXVsdCkgd2hlbiBhIGRvd25zdHJlYW0gYnVuZGxlciAod2VicGFjaywgVml0ZSwgZXRjLilcbiAgICogaGFuZGxlcyByZXNvbHV0aW9uIOKAlCB0aG9zZSB0b29scyByZXNvbHZlIC50cyBuYXRpdmVseSBhbmQgcmV3cml0aW5nXG4gICAqIGJyZWFrcyB0aGVtIGJlY2F1c2UgdGhlIC5qcyBmaWxlIGRvZXNuJ3QgZXhpc3Qgb24gZGlzay5cbiAgICovXG4gIHJld3JpdGVUc0V4dGVuc2lvbnM/OiBib29sZWFuO1xuICAvKipcbiAgICogQnVuZGxlIHByb2plY3QtbG9jYWwgZmlsZXMgdGhhdCBhcmUgdHJhbnNpdGl2ZWx5IGltcG9ydGVkIGJ5IHN0ZXAgZW50cmllcy5cbiAgICpcbiAgICogS2VlcCB0aGlzIGRpc2FibGVkIHdoZW4gYSBkb3duc3RyZWFtIGJ1bmRsZXIgY29uc3VtZXMgdGhlIGdlbmVyYXRlZCBzdGVwXG4gICAqIGJ1bmRsZSBiZWNhdXNlIHRoYXQgYnVuZGxlciBjYW4gcmVzb2x2ZSB0aGUgZXh0ZXJuYWxpemVkIGxvY2FsIGltcG9ydHMuXG4gICAqIEVuYWJsZSBpdCBmb3IgZGlyZWN0IHJ1bnRpbWUgbG9hZGluZywgd2hlcmUgTm9kZSBpbXBvcnRzIHRoZSBnZW5lcmF0ZWQgc3RlcFxuICAgKiBidW5kbGUgZnJvbSBkaXNrIHdpdGhvdXQgYSBsYXRlciBidW5kbGluZyBwYXNzLlxuICAgKi9cbiAgYnVuZGxlVHJhbnNpdGl2ZUxvY2FsU3RlcERlcGVuZGVuY2llcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBYnNvbHV0ZSBmaWxlIHBhdGhzIG9mIGRpc2NvdmVyZWQgd29ya2Zsb3cvc3RlcC9zZXJkZSBlbnRyaWVzIHdob3NlXG4gICAqIGltcG9ydHMgbXVzdCBiZSB0cmVhdGVkIGFzIHNpZGUtZWZmZWN0ZnVsLlxuICAgKlxuICAgKiBUaGUgU1dDIGNvbXBpbGVyIHRyYW5zZm9ybSBpbmplY3RzIHJlZ2lzdHJhdGlvbiBjYWxscyAod29ya2Zsb3cgSURzLFxuICAgKiBzdGVwIElEcywgY2xhc3Mgc2VyaWFsaXphdGlvbiwgZXRjLikgaW50byB0aGVzZSBmaWxlcy4gV2l0aG91dCB0aGlzXG4gICAqIG92ZXJyaWRlLCBlc2J1aWxkIGhvbm91cnMgYFwic2lkZUVmZmVjdHNcIjogZmFsc2VgIGZyb20gdGhlIHBhY2thZ2Unc1xuICAgKiBgcGFja2FnZS5qc29uYCBhbmQgc2lsZW50bHkgZHJvcHMgYmFyZSBpbXBvcnRzIG9mIHRoZXNlIG1vZHVsZXMuXG4gICAqL1xuICBzaWRlRWZmZWN0RW50cmllcz86IHN0cmluZ1tdO1xufVxuXG5jb25zdCBOT0RFX1JFU09MVkVfT1BUSU9OUyA9IHtcbiAgZGVwZW5kZW5jeVR5cGU6ICdjb21tb25qcycsXG4gIG1vZHVsZXM6IFsnbm9kZV9tb2R1bGVzJ10sXG4gIGV4cG9ydHNGaWVsZHM6IFsnZXhwb3J0cyddLFxuICBpbXBvcnRzRmllbGRzOiBbJ2ltcG9ydHMnXSxcbiAgY29uZGl0aW9uTmFtZXM6IFsnbm9kZScsICdyZXF1aXJlJ10sXG4gIGRlc2NyaXB0aW9uRmlsZXM6IFsncGFja2FnZS5qc29uJ10sXG4gIGV4dGVuc2lvbnM6IFtcbiAgICAnLnRzJyxcbiAgICAnLnRzeCcsXG4gICAgJy5tdHMnLFxuICAgICcuY3RzJyxcbiAgICAnLmNqcycsXG4gICAgJy5tanMnLFxuICAgICcuanMnLFxuICAgICcuanN4JyxcbiAgICAnLmpzb24nLFxuICAgICcubm9kZScsXG4gIF0sXG4gIGVuZm9yY2VFeHRlbnNpb25zOiBmYWxzZSxcbiAgc3ltbGlua3M6IHRydWUsXG4gIG1haW5GaWVsZHM6IFsnbWFpbiddLFxuICBtYWluRmlsZXM6IFsnaW5kZXgnXSxcbiAgcm9vdHM6IFtdLFxuICBmdWxseVNwZWNpZmllZDogZmFsc2UsXG4gIHByZWZlclJlbGF0aXZlOiBmYWxzZSxcbiAgcHJlZmVyQWJzb2x1dGU6IGZhbHNlLFxuICByZXN0cmljdGlvbnM6IFtdLFxufTtcblxuY29uc3QgTk9ERV9FU01fUkVTT0xWRV9PUFRJT05TID0ge1xuICAuLi5OT0RFX1JFU09MVkVfT1BUSU9OUyxcbiAgZGVwZW5kZW5jeVR5cGU6ICdlc20nLFxuICBjb25kaXRpb25OYW1lczogWydub2RlJywgJ2ltcG9ydCddLFxufTtcblxuZnVuY3Rpb24gbm9ybWFsaXplUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG59XG5cbnR5cGUgSWRMb2NhdGlvbiA9IHtcbiAgZmlsZVBhdGg6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gZm9ybWF0SWRMb2NhdGlvbihsb2NhdGlvbjogSWRMb2NhdGlvbik6IHN0cmluZyB7XG4gIHJldHVybiBgJHtsb2NhdGlvbi5maWxlUGF0aH0jJHtsb2NhdGlvbi5uYW1lfWA7XG59XG5cbmZ1bmN0aW9uIGFzc2VydFVuaXF1ZU1hbmlmZXN0SWRzKFxuICBlbnRyaWVzQnlGaWxlOiBXb3JrZmxvd01hbmlmZXN0WydzdGVwcyddIHwgV29ya2Zsb3dNYW5pZmVzdFsnd29ya2Zsb3dzJ10sXG4gIGlkczogTWFwPHN0cmluZywgSWRMb2NhdGlvbj4sXG4gIGdldElkOiAoZGF0YTogeyBzdGVwSWQ6IHN0cmluZyB9IHwgeyB3b3JrZmxvd0lkOiBzdHJpbmcgfSkgPT4gc3RyaW5nLFxuICBsYWJlbDogJ3N0ZXAnIHwgJ3dvcmtmbG93J1xuKTogdm9pZCB7XG4gIGNvbnN0IGVudHJpZXNCeUZpbGVMaXN0ID0gT2JqZWN0LmVudHJpZXMoZW50cmllc0J5RmlsZSB8fCB7fSkgYXMgQXJyYXk8XG4gICAgW3N0cmluZywgUmVjb3JkPHN0cmluZywgeyBzdGVwSWQ6IHN0cmluZyB9IHwgeyB3b3JrZmxvd0lkOiBzdHJpbmcgfT5dXG4gID47XG4gIGZvciAoY29uc3QgW2ZpbGVQYXRoLCBlbnRyaWVzXSBvZiBlbnRyaWVzQnlGaWxlTGlzdCkge1xuICAgIGZvciAoY29uc3QgW25hbWUsIGRhdGFdIG9mIE9iamVjdC5lbnRyaWVzKGVudHJpZXMpKSB7XG4gICAgICBjb25zdCBpZCA9IGdldElkKGRhdGEpO1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSBpZHMuZ2V0KGlkKTtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB7IGZpbGVQYXRoLCBuYW1lIH07XG4gICAgICBpZiAoXG4gICAgICAgIGV4aXN0aW5nICYmXG4gICAgICAgIChleGlzdGluZy5maWxlUGF0aCAhPT0gY3VycmVudC5maWxlUGF0aCB8fFxuICAgICAgICAgIGV4aXN0aW5nLm5hbWUgIT09IGN1cnJlbnQubmFtZSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBpZE5hbWUgPSBsYWJlbCA9PT0gJ3N0ZXAnID8gJ3dvcmtmbG93IHN0ZXAgSUQnIDogJ3dvcmtmbG93IElEJztcbiAgICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID0gYCR7bGFiZWx9IGZ1bmN0aW9uYDtcbiAgICAgICAgY29uc3QgY2FwaXRhbGl6ZWRMYWJlbCA9IGxhYmVsID09PSAnc3RlcCcgPyAnU3RlcCcgOiAnV29ya2Zsb3cnO1xuICAgICAgICB0aHJvdyBuZXcgV29ya2Zsb3dCdWlsZEVycm9yKFxuICAgICAgICAgIGBEdXBsaWNhdGUgJHtpZE5hbWV9IFwiJHtpZH1cIiBnZW5lcmF0ZWQgZm9yICR7Zm9ybWF0SWRMb2NhdGlvbihleGlzdGluZyl9IGFuZCAke2Zvcm1hdElkTG9jYXRpb24oY3VycmVudCl9LmAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaGludDpcbiAgICAgICAgICAgICAgYCR7Y2FwaXRhbGl6ZWRMYWJlbH0gSURzIG11c3QgYmUgdW5pcXVlIGFjcm9zcyBhIGJ1aWxkLiBgICtcbiAgICAgICAgICAgICAgYElmIHlvdSBvd24gb25lIG9mIHRoZSBjb2xsaWRpbmcgZmlsZXMsIHJlbmFtZSB0aGUgJHtmdW5jdGlvbk5hbWV9IG9yIGV4cG9ydCBgICtcbiAgICAgICAgICAgICAgYHRoZSBwYWNrYWdlIGZpbGUgdGhyb3VnaCBhIHVuaXF1ZSBwYWNrYWdlIHN1YnBhdGguIElmIHRoZSBjb2xsaXNpb24gaXMgaW4gYSBgICtcbiAgICAgICAgICAgICAgYHRyYW5zaXRpdmUgZGVwZW5kZW5jeSB5b3UgZG9uJ3QgY29udHJvbCwgZmlsZSBhbiBpc3N1ZSB3aXRoIHRoZSB1cHN0cmVhbSBgICtcbiAgICAgICAgICAgICAgYHBhY2thZ2Ugb3IgcGluIHRvIGEgbm9uLWNvbGxpZGluZyB2ZXJzaW9uLmAsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWRzLnNldChpZCwgY3VycmVudCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlV29ya2Zsb3dNYW5pZmVzdChcbiAgdGFyZ2V0OiBXb3JrZmxvd01hbmlmZXN0LFxuICBpbmNvbWluZzogV29ya2Zsb3dNYW5pZmVzdCxcbiAgc3RlcElkczogTWFwPHN0cmluZywgSWRMb2NhdGlvbj4sXG4gIHdvcmtmbG93SWRzOiBNYXA8c3RyaW5nLCBJZExvY2F0aW9uPlxuKTogdm9pZCB7XG4gIGFzc2VydFVuaXF1ZU1hbmlmZXN0SWRzKFxuICAgIGluY29taW5nLnN0ZXBzLFxuICAgIHN0ZXBJZHMsXG4gICAgKGRhdGEpID0+IChkYXRhIGFzIHsgc3RlcElkOiBzdHJpbmcgfSkuc3RlcElkLFxuICAgICdzdGVwJ1xuICApO1xuICBhc3NlcnRVbmlxdWVNYW5pZmVzdElkcyhcbiAgICBpbmNvbWluZy53b3JrZmxvd3MsXG4gICAgd29ya2Zsb3dJZHMsXG4gICAgKGRhdGEpID0+IChkYXRhIGFzIHsgd29ya2Zsb3dJZDogc3RyaW5nIH0pLndvcmtmbG93SWQsXG4gICAgJ3dvcmtmbG93J1xuICApO1xuXG4gIHRhcmdldC53b3JrZmxvd3MgPSBPYmplY3QuYXNzaWduKHRhcmdldC53b3JrZmxvd3MgfHwge30sIGluY29taW5nLndvcmtmbG93cyk7XG4gIHRhcmdldC5zdGVwcyA9IE9iamVjdC5hc3NpZ24odGFyZ2V0LnN0ZXBzIHx8IHt9LCBpbmNvbWluZy5zdGVwcyk7XG4gIHRhcmdldC5jbGFzc2VzID0gT2JqZWN0LmFzc2lnbih0YXJnZXQuY2xhc3NlcyB8fCB7fSwgaW5jb21pbmcuY2xhc3Nlcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTd2NQbHVnaW4ob3B0aW9uczogU3djUGx1Z2luT3B0aW9ucyk6IFBsdWdpbiB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3N3Yy13b3JrZmxvdy1wbHVnaW4nLFxuICAgIHNldHVwKGJ1aWxkKSB7XG4gICAgICBsZXQgc3RlcElkc0ZvckN1cnJlbnRCdWlsZCA9IG5ldyBNYXA8c3RyaW5nLCBJZExvY2F0aW9uPigpO1xuICAgICAgbGV0IHdvcmtmbG93SWRzRm9yQ3VycmVudEJ1aWxkID0gbmV3IE1hcDxzdHJpbmcsIElkTG9jYXRpb24+KCk7XG5cbiAgICAgIGJ1aWxkLm9uU3RhcnQoKCkgPT4ge1xuICAgICAgICBzdGVwSWRzRm9yQ3VycmVudEJ1aWxkID0gbmV3IE1hcCgpO1xuICAgICAgICB3b3JrZmxvd0lkc0ZvckN1cnJlbnRCdWlsZCA9IG5ldyBNYXAoKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBldmVyeXRoaW5nIGlzIGV4dGVybmFsIHVubGVzcyBleHBsaWNpdGx5IGNvbmZpZ3VyZWRcbiAgICAgIC8vIHRvIGJlIGJ1bmRsZWRcbiAgICAgIGNvbnN0IGNqc1Jlc29sdmVyID0gcHJvbWlzaWZ5KFxuICAgICAgICBlbmhhbmNlZFJlc29sdmVPcmlnLmNyZWF0ZShOT0RFX1JFU09MVkVfT1BUSU9OUylcbiAgICAgICk7XG4gICAgICBjb25zdCBlc21SZXNvbHZlciA9IHByb21pc2lmeShcbiAgICAgICAgZW5oYW5jZWRSZXNvbHZlT3JpZy5jcmVhdGUoTk9ERV9FU01fUkVTT0xWRV9PUFRJT05TKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgZW5oYW5jZWRSZXNvbHZlID0gYXN5bmMgKGNvbnRleHQ6IHN0cmluZywgcGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGVzbVJlc29sdmVyKGNvbnRleHQsIHBhdGgpO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgcmV0dXJuIGNqc1Jlc29sdmVyKGNvbnRleHQsIHBhdGgpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBQcmUtY29tcHV0ZSB0aGUgbm9ybWFsaXplZCBzaWRlLWVmZmVjdCBlbnRyaWVzIHNldCBmb3IgTygxKSBsb29rdXBzLlxuICAgICAgY29uc3Qgbm9ybWFsaXplZFNpZGVFZmZlY3RFbnRyaWVzID0gbmV3IFNldChcbiAgICAgICAgb3B0aW9ucy5zaWRlRWZmZWN0RW50cmllcz8ubWFwKChlKSA9PiBlLnJlcGxhY2UoL1xcXFwvZywgJy8nKSlcbiAgICAgICk7XG5cbiAgICAgIGJ1aWxkLm9uUmVzb2x2ZSh7IGZpbHRlcjogLy4qLyB9LCBhc3luYyAoYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5wbHVnaW5EYXRhPy5za2lwU3djUGx1Z2luKSByZXR1cm4gbnVsbDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIW9wdGlvbnMuZW50cmllc1RvQnVuZGxlICYmXG4gICAgICAgICAgbm9ybWFsaXplZFNpZGVFZmZlY3RFbnRyaWVzLnNpemUgPT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXaGVuIG9ubHkgc2lkZUVmZmVjdEVudHJpZXMgaXMgc2V0IChubyBlbnRyaWVzVG9CdW5kbGUpLCB3ZSBvbmx5XG4gICAgICAgIC8vIG5lZWQgdG8gb3ZlcnJpZGUgc2lkZUVmZmVjdHMgZm9yIHRvcC1sZXZlbCBiYXJlIGltcG9ydHMg4oCUIHR5cGljYWxseVxuICAgICAgICAvLyBmcm9tIHRoZSB2aXJ0dWFsIGVudHJ5LiBTa2lwIHJlc29sdXRpb24gZm9yIHRyYW5zaXRpdmUgaW1wb3J0c1xuICAgICAgICAvLyAoZHluYW1pYyBpbXBvcnRzLCByZXF1aXJlcywgZXRjLikgdG8gYXZvaWQgdW5uZWNlc3Nhcnkgb3ZlcmhlYWQuXG4gICAgICAgIGlmICghb3B0aW9ucy5lbnRyaWVzVG9CdW5kbGUgJiYgYXJncy5raW5kICE9PSAnaW1wb3J0LXN0YXRlbWVudCcpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc3BlY2lmaWVyID0gYXJncy5wYXRoO1xuICAgICAgICAgIGNvbnN0IHNwZWNpZmllcklzUGF0aCA9XG4gICAgICAgICAgICBzcGVjaWZpZXIuc3RhcnRzV2l0aCgnLicpIHx8IHNwZWNpZmllci5zdGFydHNXaXRoKCcvJyk7XG5cbiAgICAgICAgICBsZXQgcmVzb2x2ZWRQYXRoOiBzdHJpbmcgfCBmYWxzZSB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAvLyBQYXRoLXN0eWxlIHNwZWNpZmllcnMgKC4vZm9vLCAuLi9mb28sIC9hYnMvcGF0aCkgZXh0ZXJuYWxpemUgYXNcbiAgICAgICAgICAvLyByZWxhdGl2ZSBwYXRocyBmcm9tIGBvdXRkaXJgLiBCYXJlIHNwZWNpZmllcnMgKG5wbSBwYWNrYWdlcylcbiAgICAgICAgICAvLyBleHRlcm5hbGl6ZSBhcy1pcyBzbyBOb2RlIGNhbiByZXNvbHZlIHRoZW0gYXQgcnVudGltZS5cbiAgICAgICAgICBjb25zdCBzaG91bGRNYWtlUmVsYXRpdmUgPSBzcGVjaWZpZXJJc1BhdGg7XG5cbiAgICAgICAgICBpZiAoc3BlY2lmaWVySXNQYXRoKSB7XG4gICAgICAgICAgICByZXNvbHZlZFBhdGggPSBhd2FpdCBlbmhhbmNlZFJlc29sdmUoYXJncy5yZXNvbHZlRGlyLCBzcGVjaWZpZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZXNvbHZlIGZyb20gcHJvamVjdCByb290IHNvIG5lc3RlZCBkZXBzIGFyZW4ndCBleHRlcm5hbGl6ZWRcbiAgICAgICAgICAgIHJlc29sdmVkUGF0aCA9IGF3YWl0IGVuaGFuY2VkUmVzb2x2ZShcbiAgICAgICAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuYWJzV29ya2luZ0RpciB8fCBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICAgICAgICBzcGVjaWZpZXJcbiAgICAgICAgICAgICkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTsgLy8gc3dhbGxvdyBzbyBlc2J1aWxkIGZhbGxiYWNrIGJlbG93IGNhbiB0cnlcblxuICAgICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIGVzYnVpbGQgZm9yIGFsaWFzZXMvdHNjb25maWcgcGF0aHMuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gSWYgdGhlIHNwZWNpZmllciByZXNvbHZlcyB0byBhIHByb2plY3QtbG9jYWwgZmlsZSB2aWEgYW5cbiAgICAgICAgICAgIC8vIGFsaWFzL3BhdGggbWFwcGluZyAoZS5nLiB0c2NvbmZpZyBgcGF0aHNgLCBlc2J1aWxkIGBhbGlhc2AsXG4gICAgICAgICAgICAvLyBzZWxmLXJlZmVyZW5jaW5nIHBhY2thZ2UgbmFtZXMgbGlrZSBgQG15LXBrZy9saWIvZm9vYCksIHdlXG4gICAgICAgICAgICAvLyBidW5kbGUgaXQgaW5saW5lIHJhdGhlciB0aGFuIGV4dGVybmFsaXppbmcuXG4gICAgICAgICAgICAvL1xuICAgICAgICAgICAgLy8gRXh0ZXJuYWxpemluZyBzdWNoIGZpbGVzIGlzIHVuc2FmZTogd2UnZCBlbWl0IGEgcmVsYXRpdmVcbiAgICAgICAgICAgIC8vIGltcG9ydCB0byB0aGUgb3JpZ2luYWwgc291cmNlIG9uIGRpc2ssIGJ1dCB0aGF0IHNvdXJjZSBjYW5cbiAgICAgICAgICAgIC8vIGNvbnRhaW4gZnVydGhlciBhbGlhcyBpbXBvcnRzLiBBdCBydW50aW1lLCBOb2RlJ3MgRVNNIGxvYWRlclxuICAgICAgICAgICAgLy8gZG9lc24ndCBrbm93IGFib3V0IHRzY29uZmlnIHBhdGhzIG9yIGJ1aWxkLXRpbWUgYWxpYXNlcywgc29cbiAgICAgICAgICAgIC8vIHRob3NlIHRyYW5zaXRpdmUgaW1wb3J0cyB0aHJvdyBgRVJSX01PRFVMRV9OT1RfRk9VTkRgIC9cbiAgICAgICAgICAgIC8vIGBQYWNrYWdlIHN1YnBhdGggLi4uIGlzIG5vdCBkZWZpbmVkIGJ5IFwiZXhwb3J0c1wiYC5cbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyBCdW5kbGluZyBpbmxpbmUgZW5zdXJlcyBhbGlhcy1iYXNlZCBpbXBvcnRzIGFyZSByZXNvbHZlZCBhdFxuICAgICAgICAgICAgLy8gYnVpbGQgdGltZSAod2hlcmUgdGhlIGFsaWFzIG1hcCBpcyBrbm93bikgYW5kIHRoZSBydW50aW1lXG4gICAgICAgICAgICAvLyBuZXZlciBzZWVzIGFuIHVucmVzb2x2YWJsZSBzcGVjaWZpZXIuXG4gICAgICAgICAgICBpZiAoIXJlc29sdmVkUGF0aCkge1xuICAgICAgICAgICAgICBjb25zdCBlc2J1aWxkUmVzdWx0ID0gYXdhaXQgYnVpbGQucmVzb2x2ZShzcGVjaWZpZXIsIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlRGlyOiBhcmdzLnJlc29sdmVEaXIsXG4gICAgICAgICAgICAgICAga2luZDogYXJncy5raW5kLFxuICAgICAgICAgICAgICAgIHBsdWdpbkRhdGE6IHsgc2tpcFN3Y1BsdWdpbjogdHJ1ZSB9LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY29uc3QgZGlkUmVzb2x2ZSA9XG4gICAgICAgICAgICAgICAgISFlc2J1aWxkUmVzdWx0LnBhdGggJiYgIWVzYnVpbGRSZXN1bHQuZXJyb3JzLmxlbmd0aDtcbiAgICAgICAgICAgICAgY29uc3QgaXNQcm9qZWN0TG9jYWxGaWxlID1cbiAgICAgICAgICAgICAgICBkaWRSZXNvbHZlICYmXG4gICAgICAgICAgICAgICAgIWVzYnVpbGRSZXN1bHQuZXh0ZXJuYWwgJiZcbiAgICAgICAgICAgICAgICAhZXNidWlsZFJlc3VsdC5wYXRoXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFxcXC9nLCAnLycpXG4gICAgICAgICAgICAgICAgICAuaW5jbHVkZXMoJy9ub2RlX21vZHVsZXMvJyk7XG4gICAgICAgICAgICAgIGlmIChpc1Byb2plY3RMb2NhbEZpbGUpIHtcbiAgICAgICAgICAgICAgICAvLyBMZXQgZXNidWlsZCBidW5kbGUgdGhpcyBhbGlhc2VkIHByb2plY3QtbG9jYWwgZmlsZSBpbmxpbmVcbiAgICAgICAgICAgICAgICAvLyAocmV0dXJuIG51bGwgdG8gZGVmZXIgdG8gZXNidWlsZCdzIG5vcm1hbCBwaXBlbGluZSkuIFRoZVxuICAgICAgICAgICAgICAgIC8vIFNXQyBgb25Mb2FkYCBoYW5kbGVyIHdpbGwgc3RpbGwgcHJvY2VzcyBpdC5cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBvcHRpb25zLmVudHJpZXNUb0J1bmRsZSAmJlxuICAgICAgICAgICAgICAgIGVzYnVpbGRSZXN1bHQucGF0aD8uZW5kc1dpdGgoJy5ub2RlJylcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGV4dGVybmFsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgcGF0aDogc3BlY2lmaWVyLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXJlc29sdmVkUGF0aCkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAvLyBOb3JtYWxpemUgdG8gZm9yd2FyZCBzbGFzaGVzIGZvciBjcm9zcy1wbGF0Zm9ybSBjb21wYXJpc29uXG4gICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFJlc29sdmVkUGF0aCA9IG5vcm1hbGl6ZVBhdGgocmVzb2x2ZWRQYXRoKTtcbiAgICAgICAgICBjb25zdCB3b3JraW5nRGlyID1cbiAgICAgICAgICAgIGJ1aWxkLmluaXRpYWxPcHRpb25zLmFic1dvcmtpbmdEaXIgfHwgcHJvY2Vzcy5jd2QoKTtcbiAgICAgICAgICBjb25zdCBwcm9qZWN0Um9vdCA9IG9wdGlvbnMucHJvamVjdFJvb3QgfHwgd29ya2luZ0RpcjtcbiAgICAgICAgICBjb25zdCBtb2R1bGVTcGVjaWZpZXJSb290ID1cbiAgICAgICAgICAgIG9wdGlvbnMubW9kdWxlU3BlY2lmaWVyUm9vdCB8fCBwcm9qZWN0Um9vdDtcblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG9wdGlvbnMuZW50cmllc1RvQnVuZGxlICYmXG4gICAgICAgICAgICBub3JtYWxpemVkUmVzb2x2ZWRQYXRoLmVuZHNXaXRoKCcubm9kZScpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBleHRlcm5hbDogdHJ1ZSxcbiAgICAgICAgICAgICAgcGF0aDogc3BlY2lmaWVyLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIG1vZHVsZSBpcyBhIGRpc2NvdmVyZWQgZW50cnkgd2hvc2UgU1dDLXRyYW5zZm9ybWVkXG4gICAgICAgICAgLy8gY29kZSBjb250YWlucyBzaWRlIGVmZmVjdHMgKHdvcmtmbG93L3N0ZXAvY2xhc3MgcmVnaXN0cmF0aW9uKS5cbiAgICAgICAgICAvLyBPdmVycmlkZSB0aGUgcGFja2FnZS5qc29uIFwic2lkZUVmZmVjdHNcIjogZmFsc2Ugc28gZXNidWlsZCBkb2VzIG5vdFxuICAgICAgICAgIC8vIGRyb3AgYmFyZSBpbXBvcnRzIG9mIHRoZXNlIG1vZHVsZXMuXG4gICAgICAgICAgY29uc3QgaGFzU2lkZUVmZmVjdHMgPSBub3JtYWxpemVkU2lkZUVmZmVjdEVudHJpZXMuaGFzKFxuICAgICAgICAgICAgbm9ybWFsaXplZFJlc29sdmVkUGF0aFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAob3B0aW9ucy5lbnRyaWVzVG9CdW5kbGUpIHtcbiAgICAgICAgICAgIGxldCBzaG91bGRCdW5kbGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnlUb0J1bmRsZSBvZiBvcHRpb25zLmVudHJpZXNUb0J1bmRsZSkge1xuICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkRW50cnkgPSBlbnRyeVRvQnVuZGxlLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZFJlc29sdmVkUGF0aCA9PT0gbm9ybWFsaXplZEVudHJ5KSB7XG4gICAgICAgICAgICAgICAgc2hvdWxkQnVuZGxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIGlmIHRoZSBjdXJyZW50IGVudHJ5IGltcG9ydHMgYSBjaGlsZCB0aGF0IG5lZWRzXG4gICAgICAgICAgICAgIC8vIHRvIGJlIGJ1bmRsZWQgdGhlbiBpdCBuZWVkcyB0byBhbHNvIGJlIGJ1bmRsZWQgc29cbiAgICAgICAgICAgICAgLy8gdGhhdCB0aGUgY2hpbGQgY2FuIGhhdmUgb3VyIHRyYW5zZm9ybSBhcHBsaWVkXG4gICAgICAgICAgICAgIGlmIChwYXJlbnRIYXNDaGlsZChub3JtYWxpemVkUmVzb2x2ZWRQYXRoLCBub3JtYWxpemVkRW50cnkpKSB7XG4gICAgICAgICAgICAgICAgc2hvdWxkQnVuZGxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIEJ1bmRsZSBwcm9qZWN0LWxvY2FsIHNvdXJjZSBmaWxlcyB0aGF0IGFyZSBpbXBvcnRlZCBieSBhXG4gICAgICAgICAgICAgIC8vIHN0ZXAvc2VyZGUgZW50cnkgc28gZGlyZWN0IHJ1bnRpbWUgbG9hZGVycyBkbyBub3Qgc2VlIHJhdyBUU1xuICAgICAgICAgICAgICAvLyBleHRlbnNpb25sZXNzIGltcG9ydHMuIEtlZXAgcGFja2FnZSBkZXBlbmRlbmNpZXMgZXh0ZXJuYWxcbiAgICAgICAgICAgICAgLy8gdW5sZXNzIHRoZXkgYXJlIHRoZW1zZWx2ZXMgaW4gZW50cmllc1RvQnVuZGxlIG9yIGFyZSBwYXJlbnRzXG4gICAgICAgICAgICAgIC8vIG9mIGEgZGlzY292ZXJlZCB3b3JrZmxvdy9zdGVwL3NlcmRlIGZpbGUgdmlhIHRoZSBjaGVjayBhYm92ZS5cbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuYnVuZGxlVHJhbnNpdGl2ZUxvY2FsU3RlcERlcGVuZGVuY2llcyAmJlxuICAgICAgICAgICAgICAgIGlzUHJvamVjdExvY2FsRmlsZShcbiAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRSZXNvbHZlZFBhdGgsXG4gICAgICAgICAgICAgICAgICBtb2R1bGVTcGVjaWZpZXJSb290XG4gICAgICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgICAgIHBhcmVudEhhc0NoaWxkKG5vcm1hbGl6ZWRFbnRyeSwgbm9ybWFsaXplZFJlc29sdmVkUGF0aClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgc2hvdWxkQnVuZGxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2hvdWxkQnVuZGxlKSB7XG4gICAgICAgICAgICAgIC8vIExldCBlc2J1aWxkIGJ1bmRsZSB0aGlzIGVudHJ5LCBidXQgb3ZlcnJpZGUgc2lkZUVmZmVjdHMgaWYgbmVlZGVkLlxuICAgICAgICAgICAgICAvLyBXZSBtdXN0IHJldHVybiB0aGUgcmVzb2x2ZWQgYHBhdGhgIGFsb25nc2lkZSBgc2lkZUVmZmVjdHNgIGJlY2F1c2VcbiAgICAgICAgICAgICAgLy8gcmV0dXJuaW5nIG9ubHkgYHsgc2lkZUVmZmVjdHM6IHRydWUgfWAgd2l0aG91dCBhIHBhdGggY2F1c2VzIGVzYnVpbGRcbiAgICAgICAgICAgICAgLy8gdG8gZmFsbCB0aHJvdWdoIHRvIGl0cyBvd24gcmVzb2x2ZXIsIHdoaWNoIHJlLXJlYWRzIHRoZSBwYWNrYWdlLmpzb25cbiAgICAgICAgICAgICAgLy8gYW5kIGFwcGxpZXMgYFwic2lkZUVmZmVjdHNcIjogZmFsc2VgIGZyb20gdGhlcmUuXG4gICAgICAgICAgICAgIHJldHVybiBoYXNTaWRlRWZmZWN0c1xuICAgICAgICAgICAgICAgID8geyBwYXRoOiByZXNvbHZlZFBhdGgsIHNpZGVFZmZlY3RzOiB0cnVlIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBleHRlcm5hbFBhdGg6IHN0cmluZztcbiAgICAgICAgICAgIGlmIChzaG91bGRNYWtlUmVsYXRpdmUpIHtcbiAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgcmVzb2x2ZWQgZmlsZSBsaXZlcyBpbnNpZGUgbm9kZV9tb2R1bGVzLCBsZXRcbiAgICAgICAgICAgICAgLy8gZXNidWlsZCBidW5kbGUgaXQgcmF0aGVyIHRoYW4gZXh0ZXJuYWxpemluZyB3aXRoIGEgZGVlcGx5XG4gICAgICAgICAgICAgIC8vIG5lc3RlZCByZWxhdGl2ZSBwYXRoLiBEb3duc3RyZWFtIGJ1bmRsZXJzIChSb2xsdXAvVml0ZSlcbiAgICAgICAgICAgICAgLy8gY2FuJ3QgcmV3cml0ZSBvcGFxdWUgYF9fcmVxdWlyZSgpYCBjYWxscyBpbiBDSlMgc2hpbXMsIHNvXG4gICAgICAgICAgICAgIC8vIHJlbGF0aXZlIHBhdGhzIGNvbXB1dGVkIGZvciBgb3V0ZGlyYCBicmVhayBvbmNlIHRoZSBvdXRwdXRcbiAgICAgICAgICAgICAgLy8gaXMgcmVidW5kbGVkIHRvIGEgZGlmZmVyZW50IGRpcmVjdG9yeS5cbiAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRSZXNvbHZlZFBhdGguaW5jbHVkZXMoJy9ub2RlX21vZHVsZXMvJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsgLy8gbGV0IGVzYnVpbGQgYnVuZGxlIGl0XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBleHRlcm5hbFBhdGggPSByZWxhdGl2ZShcbiAgICAgICAgICAgICAgICBvcHRpb25zLm91dGRpciB8fCBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICAgICAgICAgIHJlc29sdmVkUGF0aFxuICAgICAgICAgICAgICApLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5yZXdyaXRlVHNFeHRlbnNpb25zKSB7XG4gICAgICAgICAgICAgICAgLy8gUmV3cml0ZSBUeXBlU2NyaXB0IGV4dGVuc2lvbnMgdG8gdGhlaXIgSlMgZXF1aXZhbGVudHMgc28gdGhlXG4gICAgICAgICAgICAgICAgLy8gZXh0ZXJuYWxpemVkIGltcG9ydCBpcyBsb2FkYWJsZSBieSBOb2RlJ3MgbmF0aXZlIEVTTSBsb2FkZXIuXG4gICAgICAgICAgICAgICAgZXh0ZXJuYWxQYXRoID0gZXh0ZXJuYWxQYXRoXG4gICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwudHN4PyQvLCAnLmpzJylcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cXC5tdHMkLywgJy5tanMnKVxuICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcLmN0cyQvLCAnLmNqcycpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBleHRlcm5hbFBhdGggPSBzcGVjaWZpZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGV4dGVybmFsOiB0cnVlLFxuICAgICAgICAgICAgICBwYXRoOiBleHRlcm5hbFBhdGgsXG4gICAgICAgICAgICAgIHNpZGVFZmZlY3RzOiBoYXNTaWRlRWZmZWN0cyB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE5vIGVudHJpZXNUb0J1bmRsZSDigJQgb25seSBvdmVycmlkZSBzaWRlRWZmZWN0cyB3aGVuIG5lZWRlZC5cbiAgICAgICAgICAvLyBXZSBtdXN0IHJldHVybiB0aGUgcmVzb2x2ZWQgYHBhdGhgIGFsb25nc2lkZSBgc2lkZUVmZmVjdHNgIGJlY2F1c2VcbiAgICAgICAgICAvLyByZXR1cm5pbmcgb25seSBgeyBzaWRlRWZmZWN0czogdHJ1ZSB9YCB3aXRob3V0IGEgcGF0aCBjYXVzZXMgZXNidWlsZFxuICAgICAgICAgIC8vIHRvIGZhbGwgdGhyb3VnaCB0byBpdHMgb3duIHJlc29sdmVyLCB3aGljaCByZS1yZWFkcyB0aGUgcGFja2FnZS5qc29uXG4gICAgICAgICAgLy8gYW5kIGFwcGxpZXMgYFwic2lkZUVmZmVjdHNcIjogZmFsc2VgIGZyb20gdGhlcmUuXG4gICAgICAgICAgcmV0dXJuIGhhc1NpZGVFZmZlY3RzXG4gICAgICAgICAgICA/IHsgcGF0aDogcmVzb2x2ZWRQYXRoLCBzaWRlRWZmZWN0czogdHJ1ZSB9XG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEhhbmRsZSBUeXBlU2NyaXB0IGFuZCBKYXZhU2NyaXB0IGZpbGVzXG4gICAgICBidWlsZC5vbkxvYWQoeyBmaWx0ZXI6IGpzVHNSZWdleCB9LCBhc3luYyAoYXJncykgPT4ge1xuICAgICAgICAvLyBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhIFR5cGVTY3JpcHQgZmlsZVxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIERldGVybWluZSB0aGUgbG9hZGVyIGJhc2VkIG9uIHRoZSBvdXRwdXRcbiAgICAgICAgICBsZXQgbG9hZGVyOiAnanMnIHwgJ2pzeCcgfCAndHN4JyA9ICdqcyc7XG4gICAgICAgICAgaWYgKGFyZ3MucGF0aC5lbmRzV2l0aCgnLmpzeCcpKSB7XG4gICAgICAgICAgICBsb2FkZXIgPSAnanN4JztcbiAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3MucGF0aC5lbmRzV2l0aCgnLnRzeCcpKSB7XG4gICAgICAgICAgICBsb2FkZXIgPSAndHN4JztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc291cmNlID0gYXdhaXQgcmVhZEZpbGUoYXJncy5wYXRoLCAndXRmOCcpO1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTb3VyY2UgPSBzb3VyY2VcbiAgICAgICAgICAgIC5yZXBsYWNlKC9yZXF1aXJlXFwoXFxzKihbJ1wiXSlzZXJ2ZXItb25seVxcMVxccypcXCkvZywgJ3ZvaWQgMCcpXG4gICAgICAgICAgICAucmVwbGFjZSgvcmVxdWlyZVxcKFxccyooWydcIl0pY2xpZW50LW9ubHlcXDFcXHMqXFwpL2csICd2b2lkIDAnKTtcblxuICAgICAgICAgIC8vIENhbGN1bGF0ZSByZWxhdGl2ZSBwYXRoIGZvciBTV0MgcGx1Z2luXG4gICAgICAgICAgLy8gVGhlIGZpbGVuYW1lIHBhcmFtZXRlciBpcyB1c2VkIHRvIGdlbmVyYXRlIHdvcmtmbG93SWQvc3RlcElkLCBzbyBpdCBtdXN0IGJlIHJlbGF0aXZlXG4gICAgICAgICAgY29uc3Qgd29ya2luZ0RpciA9XG4gICAgICAgICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5hYnNXb3JraW5nRGlyIHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgICAgICAgY29uc3QgcHJvamVjdFJvb3QgPSBvcHRpb25zLnByb2plY3RSb290IHx8IHdvcmtpbmdEaXI7XG4gICAgICAgICAgY29uc3QgbW9kdWxlU3BlY2lmaWVyUm9vdCA9XG4gICAgICAgICAgICBvcHRpb25zLm1vZHVsZVNwZWNpZmllclJvb3QgfHwgcHJvamVjdFJvb3Q7XG4gICAgICAgICAgLy8gTm9ybWFsaXplIHBhdGhzOiBjb252ZXJ0IGJhY2tzbGFzaGVzIHRvIGZvcndhcmQgc2xhc2hlcyBhbmQgcmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXNcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkV29ya2luZ0RpciA9IHdvcmtpbmdEaXJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXFxcL2csICcvJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXC8kLywgJycpO1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gYXJncy5wYXRoLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcblxuICAgICAgICAgIC8vIFdpbmRvd3MgZml4OiBBbHdheXMgZG8gY2FzZS1pbnNlbnNpdGl2ZSBwYXRoIGNvbXBhcmlzb24gYXMgdGhlIFBSSU1BUlkgbG9naWNcbiAgICAgICAgICAvLyB0byB3b3JrIGFyb3VuZCBub2RlOnBhdGgucmVsYXRpdmUoKSBub3QgcmVjb2duaXppbmcgcGF0aHMgd2l0aCBkaWZmZXJlbnQgZHJpdmVcbiAgICAgICAgICAvLyBsZXR0ZXIgY2FzaW5nIChlLmcuLCBEOiB2cyBkOikgYXMgYmVpbmcgaW4gdGhlIHNhbWUgdHJlZVxuICAgICAgICAgIGNvbnN0IGxvd2VyV2QgPSBub3JtYWxpemVkV29ya2luZ0Rpci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGNvbnN0IGxvd2VyUGF0aCA9IG5vcm1hbGl6ZWRQYXRoLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgICBsZXQgcmVsYXRpdmVGaWxlcGF0aDogc3RyaW5nO1xuICAgICAgICAgIGlmIChsb3dlclBhdGguc3RhcnRzV2l0aChsb3dlcldkICsgJy8nKSkge1xuICAgICAgICAgICAgLy8gRmlsZSBpcyB1bmRlciB3b3JraW5nIGRpcmVjdG9yeSAtIG1hbnVhbGx5IGNhbGN1bGF0ZSByZWxhdGl2ZSBwYXRoXG4gICAgICAgICAgICAvLyBUaGlzIGVuc3VyZXMgd2UgZ2V0IGEgcmVsYXRpdmUgcGF0aCBldmVuIHdpdGggZHJpdmUgbGV0dGVyIGNhc2luZyBpc3N1ZXNcbiAgICAgICAgICAgIHJlbGF0aXZlRmlsZXBhdGggPSBub3JtYWxpemVkUGF0aC5zdWJzdHJpbmcoXG4gICAgICAgICAgICAgIG5vcm1hbGl6ZWRXb3JraW5nRGlyLmxlbmd0aCArIDFcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmIChsb3dlclBhdGggPT09IGxvd2VyV2QpIHtcbiAgICAgICAgICAgIC8vIEZpbGUgSVMgdGhlIHdvcmtpbmcgZGlyZWN0b3J5XG4gICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoID0gJy4nO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBGaWxlIGlzIG91dHNpZGUgd29ya2luZyBkaXJlY3RvcnkgLSB1c2UgcmVsYXRpdmUoKSBhbmQgc3RyaXAgLi4vIHByZWZpeGVzIGlmIG5lZWRlZFxuICAgICAgICAgICAgcmVsYXRpdmVGaWxlcGF0aCA9IHJlbGF0aXZlKFxuICAgICAgICAgICAgICBub3JtYWxpemVkV29ya2luZ0RpcixcbiAgICAgICAgICAgICAgbm9ybWFsaXplZFBhdGhcbiAgICAgICAgICAgICkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuXG4gICAgICAgICAgICAvLyBIYW5kbGUgZmlsZXMgZGlzY292ZXJlZCBvdXRzaWRlIHRoZSB3b3JraW5nIGRpcmVjdG9yeVxuICAgICAgICAgICAgLy8gVGhlc2UgY29tZSBiYWNrIGFzIC4uL3BhdGgvdG8vZmlsZSwgYnV0IHdlIHdhbnQganVzdCBwYXRoL3RvL2ZpbGVcbiAgICAgICAgICAgIGlmIChyZWxhdGl2ZUZpbGVwYXRoLnN0YXJ0c1dpdGgoJy4uLycpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFsaWFzZWRSZWxhdGl2ZVBhdGggPVxuICAgICAgICAgICAgICAgIGF3YWl0IHJlc29sdmVXb3JrZmxvd0FsaWFzUmVsYXRpdmVQYXRoKGFyZ3MucGF0aCwgd29ya2luZ0Rpcik7XG4gICAgICAgICAgICAgIGlmIChhbGlhc2VkUmVsYXRpdmVQYXRoKSB7XG4gICAgICAgICAgICAgICAgcmVsYXRpdmVGaWxlcGF0aCA9IGFsaWFzZWRSZWxhdGl2ZVBhdGg7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVsYXRpdmVGaWxlcGF0aCA9IHJlbGF0aXZlRmlsZXBhdGhcbiAgICAgICAgICAgICAgICAgIC5zcGxpdCgnLycpXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSAnLi4nKVxuICAgICAgICAgICAgICAgICAgLmpvaW4oJy8nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEZpbmFsIHNhZmV0eSBjaGVjayAtIGVuc3VyZSB3ZSBuZXZlciBwYXNzIGFuIGFic29sdXRlIHBhdGggdG8gU1dDXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVsYXRpdmVGaWxlcGF0aC5pbmNsdWRlcygnOicpIHx8XG4gICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoLnN0YXJ0c1dpdGgoJy8nKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgaWYgaXQgZG9lcywgdXNlIGp1c3QgdGhlIGZpbGVuYW1lIGFzIGxhc3QgcmVzb3J0XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBgW0VSUk9SXSByZWxhdGl2ZUZpbGVwYXRoIGlzIHN0aWxsIGFic29sdXRlOiAke3JlbGF0aXZlRmlsZXBhdGh9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJlbGF0aXZlRmlsZXBhdGggPSBub3JtYWxpemVkUGF0aC5zcGxpdCgnLycpLnBvcCgpIHx8ICd1bmtub3duLnRzJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB7IGNvZGU6IHRyYW5zZm9ybWVkQ29kZSwgd29ya2Zsb3dNYW5pZmVzdCB9ID1cbiAgICAgICAgICAgIGF3YWl0IGFwcGx5U3djVHJhbnNmb3JtKFxuICAgICAgICAgICAgICByZWxhdGl2ZUZpbGVwYXRoLFxuICAgICAgICAgICAgICBub3JtYWxpemVkU291cmNlLFxuICAgICAgICAgICAgICBvcHRpb25zLm1vZGUsXG4gICAgICAgICAgICAgIGFyZ3MucGF0aCwgLy8gUGFzcyBhYnNvbHV0ZSBwYXRoIGZvciBtb2R1bGUgc3BlY2lmaWVyIHJlc29sdXRpb25cbiAgICAgICAgICAgICAgcHJvamVjdFJvb3QsXG4gICAgICAgICAgICAgIG1vZHVsZVNwZWNpZmllclJvb3RcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoIW9wdGlvbnMud29ya2Zsb3dNYW5pZmVzdCkge1xuICAgICAgICAgICAgb3B0aW9ucy53b3JrZmxvd01hbmlmZXN0ID0ge307XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWVyZ2VXb3JrZmxvd01hbmlmZXN0KFxuICAgICAgICAgICAgb3B0aW9ucy53b3JrZmxvd01hbmlmZXN0LFxuICAgICAgICAgICAgd29ya2Zsb3dNYW5pZmVzdCxcbiAgICAgICAgICAgIHN0ZXBJZHNGb3JDdXJyZW50QnVpbGQsXG4gICAgICAgICAgICB3b3JrZmxvd0lkc0ZvckN1cnJlbnRCdWlsZFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGVudHM6IHRyYW5zZm9ybWVkQ29kZSxcbiAgICAgICAgICAgIGxvYWRlcixcbiAgICAgICAgICB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGDinYwgU1dDIHRyYW5zZm9ybSBlcnJvciBpbiAke2FyZ3MucGF0aH06YCxcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogYFNXQyB0cmFuc2Zvcm0gZmFpbGVkOiAke2Vycm9yTWVzc2FnZX1gLFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiB7IGZpbGU6IGFyZ3MucGF0aCwgbGluZTogMCwgY29sdW1uOiAwIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzUHJvamVjdExvY2FsRmlsZShmaWxlUGF0aDogc3RyaW5nLCBwcm9qZWN0Um9vdDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChub3JtYWxpemVQYXRoKGZpbGVQYXRoKS5pbmNsdWRlcygnL25vZGVfbW9kdWxlcy8nKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgcmVzb2x2ZU1vZHVsZVNwZWNpZmllcihmaWxlUGF0aCwgcHJvamVjdFJvb3QpLm1vZHVsZVNwZWNpZmllciA9PT0gdW5kZWZpbmVkXG4gICk7XG59XG4iXX0=