@datagrok-libraries/utils 3.0.0 → 3.0.1

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.
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "fullName": "Utils",
7
- "version": "3.0.0",
7
+ "version": "3.0.1",
8
8
  "description": "Common utilities",
9
9
  "dependencies": {
10
10
  "cash-dom": "^8.1.1",
@@ -1 +1 @@
1
- {"version":3,"file":"rich-function-view.d.ts","sourceRoot":"","sources":["rich-function-view.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAO7C,OAAO,+BAA+B,CAAC;AAkCvC,qBAAa,gBAAiB,SAAQ,YAAY;IAiBvC,OAAO,EAAE;QAAE,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAC;IAf/D,OAAO,CAAC,eAAe,CAAiB;IAGxC,OAAO,CAAC,SAAS,CAAS;IAE1B,MAAM,CAAC,YAAY,CACjB,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACrB,OAAO,GAAE;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KACb;gBAMvC,QAAQ,EAAE,MAAM,EACT,OAAO,GAAE;QAAE,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KACrB;IAOzB,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxD,OAAO,IAAI,WAAW;IA6BtB,eAAe,IAAI,WAAW;IAMrC,OAAO,CAAC,QAAQ,CAAmB;IAE5B,gBAAgB,IAAI,WAAW;IA+IzB,cAAc,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ;IAelD,OAAO,CAAC,iBAAiB,CAAoC;IAE7D,SAAS,KAAK,QAAQ,kBAKrB;IAED,SAAS,KAAK,cAAc,kBAE3B;IAED,SAAS,KAAK,oBAAoB,YAEjC;IAED,SAAS,KAAK,wBAAwB,aAIrC;IAED,SAAS,KAAK,gBAAgB,aAK7B;IAED,SAAS,KAAK,UAAU,aAEvB;IAED,SAAS,KAAK,kBAAkB,kCAmB/B;IAEqB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAY5B,KAAK;IAanB,OAAO,CAAC,gBAAgB;IAiHxB,SAAS,CAAC,aAAa,WAAkB,MAAM,mBAoI7C;IAEF,YAAY;;;yBAtI6B,MAAM;;MA2I7C;CACH"}
1
+ {"version":3,"file":"rich-function-view.d.ts","sourceRoot":"","sources":["rich-function-view.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACtC,OAAO,EAAC,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAO7C,OAAO,+BAA+B,CAAC;AAkCvC,qBAAa,gBAAiB,SAAQ,YAAY;IAiBvC,OAAO,EAAE;QAAE,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAC;IAf/D,OAAO,CAAC,eAAe,CAAiB;IAGxC,OAAO,CAAC,SAAS,CAAS;IAE1B,MAAM,CAAC,YAAY,CACjB,QAAQ,EAAE,EAAE,CAAC,QAAQ,EACrB,OAAO,GAAE;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KACb;gBAMvC,QAAQ,EAAE,MAAM,EACT,OAAO,GAAE;QAAE,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KACrB;IAOzB,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAWxD,OAAO,IAAI,WAAW;IA6BtB,eAAe,IAAI,WAAW;IAMrC,OAAO,CAAC,QAAQ,CAAmB;IAE5B,gBAAgB,IAAI,WAAW;IAgJzB,cAAc,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ;IAelD,OAAO,CAAC,iBAAiB,CAAoC;IAE7D,SAAS,KAAK,QAAQ,kBAKrB;IAED,SAAS,KAAK,cAAc,kBAE3B;IAED,SAAS,KAAK,oBAAoB,YAEjC;IAED,SAAS,KAAK,wBAAwB,aAIrC;IAED,SAAS,KAAK,gBAAgB,aAK7B;IAED,SAAS,KAAK,UAAU,aAEvB;IAED,SAAS,KAAK,kBAAkB,kCAmB/B;IAEqB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YAY5B,KAAK;IAanB,OAAO,CAAC,gBAAgB;IAiHxB,SAAS,CAAC,aAAa,WAAkB,MAAM,mBAoI7C;IAEF,YAAY;;;yBAtI6B,MAAM;;MA2I7C;CACH"}
@@ -125,7 +125,7 @@ export class RichFunctionView extends FunctionView {
125
125
  }
126
126
  else {
127
127
  for (const outputParam of outputParams.filter((outputParam) => outputParam.property.propertyType === DG.TYPE.DATA_FRAME &&
128
- ((tabLabel === 'Output' && outputParam.property.category === 'Misc') ||
128
+ ((tabLabel === 'Output' && outputParam.property.category === 'Misc' || outputParam.property.category === 'Output') ||
129
129
  (tabLabel !== 'Output' && outputParam.property.category === tabLabel)))) {
130
130
  const nonGridViewers = this.dfToViewerMapping[outputParam.property.name]
131
131
  .filter((viewer) => viewer.type !== DG.VIEWER.GRID)
@@ -276,11 +276,11 @@ export class RichFunctionView extends FunctionView {
276
276
  dfBlock
277
277
  ], { style: Object.assign({}, (fullBlockWidth > 0) ? { 'width': `${fullBlockWidth}%` } : { 'width': `100%` }) });
278
278
  });
279
- const generateScalarsTable = () => ui.tableFromMap(tabScalarProps.reduce((acc, scalar) => {
280
- var _a;
281
- acc[scalar.name] = (_a = this.funcCall) === null || _a === void 0 ? void 0 : _a.outputs[scalar.name];
282
- return acc;
283
- }, {}));
279
+ const generateScalarsTable = () => {
280
+ const table = DG.HtmlTable.create(tabScalarProps, (scalarProp) => { var _a; return [scalarProp.name, (_a = this.funcCall) === null || _a === void 0 ? void 0 : _a.outputs[scalarProp.name], scalarProp.options['units']]; }).root;
281
+ table.style.maxWidth = '400px';
282
+ return table;
283
+ };
284
284
  let scalarsTable = generateScalarsTable();
285
285
  tabScalarProps.forEach((tabScalarProp) => {
286
286
  const subscribeOnFcChanges = () => {
@@ -360,7 +360,7 @@ export class RichFunctionView extends FunctionView {
360
360
  get outputTabsLabels() {
361
361
  return [
362
362
  ...this.outUniqueParamCategories,
363
- ...this.outUniqueParamCategories.find((val) => val === 'Misc') ? ['Output'] : [], // if no categories are stated, the default category is added
363
+ ...this.outUniqueParamCategories.find((val) => val === 'Misc' || val === 'Output') ? ['Output'] : [], // if no categories are stated, the default category is added
364
364
  ];
365
365
  }
366
366
  get tabsLabels() {
@@ -561,4 +561,4 @@ const plotToSheet = (exportWb, sheet, plot, columnForImage, rowForImage = 0) =>
561
561
  ext: { width: canvas.width, height: canvas.height },
562
562
  });
563
563
  });
564
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaC1mdW5jdGlvbi12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmljaC1mdW5jdGlvbi12aWV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sV0FBVyxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxDQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3pCLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3JELE9BQU8sK0JBQStCLENBQUM7QUFFdkMsTUFBTSxrQkFBa0IsR0FBNEI7SUFDbEQsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVM7SUFDakMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVE7SUFDL0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVE7SUFDaEMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVM7SUFDakMsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVk7SUFDdkMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU87SUFDOUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUk7SUFDeEIsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUs7SUFDMUIsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVU7SUFDbkMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUk7SUFDeEIsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVE7SUFDL0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVM7SUFDbEMsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVU7SUFDbkMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU07SUFDNUIsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVc7SUFDckMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsZUFBZTtJQUM3QyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTztJQUM3QixDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUztJQUNqQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWTtJQUN2QyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsZUFBZTtJQUM1QyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUztJQUNqQyxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVTtJQUNwQyxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVztJQUNyQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUztJQUNsQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUTtJQUMvQixDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsWUFBWTtJQUN2QyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVTtDQUNwQyxDQUFDO0FBRUYsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDO0FBRS9CLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxZQUFZO0lBZWhELFlBQ0UsUUFBZ0IsRUFDVCxVQUNQLEVBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFDO1FBRXZDLEtBQUssQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFIbEIsWUFBTyxHQUFQLE9BQU8sQ0FDeUI7UUFqQnpDLHNEQUFzRDtRQUM5QyxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFeEMsMkJBQTJCO1FBQ25CLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFrRWxCLGFBQVEsR0FBRyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUM7UUFnSzNCLHNCQUFpQixHQUFpQyxFQUFFLENBQUM7UUFpTW5ELGtCQUFhLEdBQUcsQ0FBTyxNQUFjLEVBQUUsRUFBRTtZQUNqRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQy9CLElBQUksQ0FBQyxRQUFRO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztZQUUxRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxNQUFNLHFCQUFxQixDQUFDLENBQUM7WUFFbkgsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztZQUU5RSxNQUFNLFNBQVMsR0FBRyxpRkFBaUYsQ0FBQztZQUNwRyxNQUFNLGNBQWMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUU5QyxNQUFNLFlBQVksR0FBRyxDQUFDLElBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBRXBFLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRXJFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3JGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQzFGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3pGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBRTlGLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUF1QixDQUFDO1lBQzdFLE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUF1QixDQUFDO1lBRS9FLFFBQVEsQ0FBQyxPQUFPLENBQUMs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LEVBQUU7SUFDckosTUFBTSxNQUFNLEdBQUcsTUFBTSxXQUFXLENBQUMsSUFBbUIsRUFBRSxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFOUMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxNQUFNLEVBQUUsT0FBTztRQUNmLFNBQVMsRUFBRSxLQUFLO0tBQ2pCLENBQUMsQ0FBQztJQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO1FBQ3RCLEVBQUUsRUFBRSxFQUFDLEdBQUcsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBQztRQUMzQyxHQUFHLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBQztLQUNsRCxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQge0Z1bmN0aW9uVmlld30gZnJvbSAnLi9mdW5jdGlvbi12aWV3JztcbmltcG9ydCBFeGNlbEpTIGZyb20gJ2V4Y2VsanMnO1xuaW1wb3J0IGh0bWwyY2FudmFzIGZyb20gJ2h0bWwyY2FudmFzJztcbmltcG9ydCB3dSBmcm9tICd3dSc7XG5pbXBvcnQgJCBmcm9tICdjYXNoLWRvbSc7XG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtVaVV0aWxzfSBmcm9tICcuL3NoYXJlZC1jb21wb25lbnRzL3VpLXV0aWxzJztcbmltcG9ydCAnLi4vY3NzL3JpY2gtZnVuY3Rpb24tdmlldy5jc3MnO1xuXG5jb25zdCB2aWV3ZXJUeXBlc01hcHBpbmc6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge1xuICBbJ2JhcmNoYXJ0J106IERHLlZJRVdFUi5CQVJfQ0hBUlQsXG4gIFsnYm94cGxvdCddOiBERy5WSUVXRVIuQk9YX1BMT1QsXG4gIFsnY2FsZW5kYXInXTogREcuVklFV0VSLkNBTEVOREFSLFxuICBbJ2NvcnJwbG90J106IERHLlZJRVdFUi5DT1JSX1BMT1QsXG4gIFsnZGVuc2l0eXBsb3QnXTogREcuVklFV0VSLkRFTlNJVFlfUExPVCxcbiAgWydmaWx0ZXJzJ106IERHLlZJRVdFUi5GSUxURVJTLFxuICBbJ2Zvcm0nXTogREcuVklFV0VSLkZPUk0sXG4gIFsnZ2xvYmUnXTogREcuVklFV0VSLkdMT0JFLFxuICBbJ2dvb2dsZW1hcCddOiBERy5WSUVXRVIuR09PR0xFX01BUCxcbiAgWydncmlkJ106IERHLlZJRVdFUi5HUklELFxuICBbJ2hlYXRtYXAnXTogREcuVklFV0VSLkhFQVRfTUFQLFxuICBbJ2hpc3RvZ3JhbSddOiBERy5WSUVXRVIuSElTVE9HUkFNLFxuICBbJ2xpbmVjaGFydCddOiBERy5WSUVXRVIuTElORV9DSEFSVCxcbiAgWydtYXJrdXAnXTogREcuVklFV0VSLk1BUktVUCxcbiAgWydtYXRyaXhwbG90J106IERHLlZJRVdFUi5NQVRSSVhfUExPVCxcbiAgWyduZXR3b3JrZGlhZ3JhbSddOiBERy5WSUVXRVIuTkVUV09SS19ESUFHUkFNLFxuICBbJ3BjcGxvdCddOiBERy5WSUVXRVIuUENfUExPVCxcbiAgWydwaWVjaGFydCddOiBERy5WSUVXRVIuUElFX0NIQVJULFxuICBbJ3NjYXR0ZXJwbG90J106IERHLlZJRVdFUi5TQ0FUVEVSX1BMT1QsXG4gIFsnc2NhdHRlcnBsb3QzZCddOiBERy5WSUVXRVIuU0NBVFRFUl9QTE9UXzNELFxuICBbJ3NoYXBlbWFwJ106IERHLlZJRVdFUi5TSEFQRV9NQVAsXG4gIFsnc3RhdGlzdGljcyddOiBERy5WSUVXRVIuU1RBVElTVElDUyxcbiAgWyd0aWxldmlld2VyJ106IERHLlZJRVdFUi5USUxFX1ZJRVdFUixcbiAgWyd0aW1lbGluZXMnXTogREcuVklFV0VSLlRJTUVMSU5FUyxcbiAgWyd0cmVlbWFwJ106IERHLlZJRVdFUi5UUkVFX01BUCxcbiAgWyd0cmVsbGlzcGxvdCddOiBERy5WSUVXRVIuVFJFTExJU19QTE9ULFxuICBbJ3dvcmRjbG91ZCddOiBERy5WSUVXRVIuV09SRF9DTE9VRCxcbn07XG5cbmNvbnN0IEZJTEVfSU5QVVRfVFlQRSA9ICdmaWxlJztcblxuZXhwb3J0IGNsYXNzIFJpY2hGdW5jdGlvblZpZXcgZXh0ZW5kcyBGdW5jdGlvblZpZXcge1xuICAvLyBlbWl0dGVkIHdoZW4gcnVuQnV0dG9uIGRpc2FiaWxpdHkgc2hvdWxkIGJlIGNoZWNrZWRcbiAgcHJpdmF0ZSBjaGVja0Rpc2FiaWxpdHkgPSBuZXcgU3ViamVjdCgpO1xuXG4gIC8vIHN0b3JlcyB0aGUgcnVubmluZyBzdGF0ZVxuICBwcml2YXRlIGlzUnVubmluZyA9IGZhbHNlO1xuXG4gIHN0YXRpYyBmcm9tRnVuY0NhbGwoXG4gICAgZnVuY0NhbGw6IERHLkZ1bmNDYWxsLFxuICAgIG9wdGlvbnM6IHtoaXN0b3J5RW5hYmxlZDogYm9vbGVhbiwgaXNUYWJiZWQ6IGJvb2xlYW59ID1cbiAgICB7aGlzdG9yeUVuYWJsZWQ6IHRydWUsIGlzVGFiYmVkOiBmYWxzZX1cbiAgKSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKGZ1bmNDYWxsLmZ1bmMubnFOYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGZ1bmNOYW1lOiBzdHJpbmcsXG4gICAgcHVibGljIG9wdGlvbnM6IHsgaGlzdG9yeUVuYWJsZWQ6IGJvb2xlYW4sIGlzVGFiYmVkOiBib29sZWFufSA9XG4gICAge2hpc3RvcnlFbmFibGVkOiB0cnVlLCBpc1RhYmJlZDogZmFsc2V9XG4gICkge1xuICAgIHN1cGVyKGZ1bmNOYW1lLCBvcHRpb25zKTtcblxuICAgIHRoaXMuYmFzZVBhdGggPSBgc2NyaXB0cy8ke3RoaXMuZnVuY0NhbGwuZnVuYy5pZH0vdmlld2A7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgb25BZnRlclJ1bihydW5GdW5jOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMudGFic0VsZW0ucm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgIHRoaXMudGFic0VsZW0ucGFuZXMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICB0YWIuaGVhZGVyLnN0eWxlLnJlbW92ZVByb3BlcnR5KCdkaXNwbGF5Jyk7XG4gICAgfSk7XG4gICAgY29uc3QgZmlyc3RPdXRwdXRUYWIgPSB0aGlzLnRhYnNFbGVtLnBhbmVzLmZpbmQoKHRhYikgPT4gdGFiLm5hbWUgIT09ICdJbnB1dCcpO1xuICAgIGlmIChmaXJzdE91dHB1dFRhYikgdGhpcy50YWJzRWxlbS5jdXJyZW50UGFuZSA9IGZpcnN0T3V0cHV0VGFiO1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgcHVibGljIGJ1aWxkSU8oKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IGlucHV0QmxvY2sgPSB0aGlzLmJ1aWxkSW5wdXRCbG9jaygpO1xuXG4gICAgdWkudG9vbHMuaGFuZGxlUmVzaXplKGlucHV0QmxvY2ssICh3aWR0aCkgPT4ge1xuICAgICAgaWYgKHdpZHRoIDwgMzUwKVxuICAgICAgICAkKGlucHV0QmxvY2suZmlyc3RDaGlsZCEpLmFkZENsYXNzKCd1aS1mb3JtLWNvbmRlbnNlZCcpO1xuICAgICAgZWxzZVxuICAgICAgICAkKGlucHV0QmxvY2suZmlyc3RDaGlsZCEpLnJlbW92ZUNsYXNzKCd1aS1mb3JtLWNvbmRlbnNlZCcpO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgb3V0cHV0QmxvY2sgPSB0aGlzLmJ1aWxkT3V0cHV0QmxvY2soKTtcbiAgICBvdXRwdXRCbG9jay5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgb3V0cHV0QmxvY2suc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgdGhpcy50YWJzRWxlbS5yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICBpZiAoISF0aGlzLnRhYnNFbGVtLmdldFBhbmUoJ0lucHV0JykpIHtcbiAgICAgIHRoaXMudGFic0VsZW0ucGFuZXMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICAgIHRhYi5oZWFkZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG91dCA9IHVpLnNwbGl0SChbaW5wdXRCbG9jaywgdWkucGFuZWwoW291dHB1dEJsb2NrXSwge3N0eWxlOiB7J3BhZGRpbmctdG9wJzogJzBweCd9fSldLCBudWxsLCB0cnVlKTtcbiAgICBvdXQuc3R5bGUucGFkZGluZyA9ICcwIDEycHgnO1xuXG4gICAgaW5wdXRCbG9jay5wYXJlbnRFbGVtZW50IS5zdHlsZS5tYXhXaWR0aCA9ICc0NTBweCc7XG5cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgcHVibGljIGJ1aWxkSW5wdXRCbG9jaygpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgZm9ybURpdiA9IHRoaXMucmVuZGVyUnVuU2VjdGlvbigpO1xuXG4gICAgcmV0dXJuIGZvcm1EaXY7XG4gIH1cblxuICBwcml2YXRlIHRhYnNFbGVtID0gdWkudGFiQ29udHJvbCgpO1xuXG4gIHB1YmxpYyBidWlsZE91dHB1dEJsb2NrKCk6IEhUTUxFbGVtZW50IHtcbiAgICB0aGlzLnRhYnNFbGVtLnJvb3Quc3R5bGUud2lkdGggPSAnMTAwJSc7XG5cbiAgICB0aGlzLnRhYnNMYWJlbHMuZm9yRWFjaCgodGFiTGFiZWwpID0+IHtcbiAgICAgIGNvbnN0IHRhYkRmUHJvcHMgPSB0aGlzLmNhdGVnb3J5VG9QYXJhbU1hcFt0YWJMYWJlbF0uZmlsdGVyKChwKSA9PiBwLnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICAgIGNvbnN0IHRhYlNjYWxhclByb3BzID0gdGhpcy5jYXRlZ29yeVRvUGFyYW1NYXBbdGFiTGFiZWxdLmZpbHRlcigocCkgPT4gcC5wcm9wZXJ0eVR5cGUgIT09IERHLlRZUEUuREFUQV9GUkFNRSk7XG5cbiAgICAgIC8vIEVYUExBSU46IHVuZGVmaW5lZCBhbmQgSlNPTi5wYXJzZVxuICAgICAgY29uc3QgcGFyc2VkVGFiRGZQcm9wcyA9IHRhYkRmUHJvcHMubWFwKChkZlByb3ApID0+IChkZlByb3Aub3B0aW9uc1sndmlld2VyJ10gIT09IHVuZGVmaW5lZCkgP1xuICAgICAgICBKU09OLnBhcnNlKGRmUHJvcC5vcHRpb25zWyd2aWV3ZXInXSwgKF8sIHYpID0+IHYgPT09ICd0cnVlJyB8fCB2ID09PSAnZmFsc2UnID8gSlNPTi5wYXJzZSh2KTogdik6XG4gICAgICAgIFtdKTtcblxuICAgICAgY29uc3QgZGZCbG9ja3MgPSB0YWJEZlByb3BzLm1hcCgoZGZQcm9wLCBkZkluZGV4KSA9PiB7XG4gICAgICAgIGxldCBmdWxsQmxvY2tXaWR0aCA9IDA7XG4gICAgICAgIHBhcnNlZFRhYkRmUHJvcHNbZGZJbmRleF0uZm9yRWFjaCgoXzogYW55LCB2aWV3ZXJJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgYmxvY2tTaXplID0gcGFyc2VkVGFiRGZQcm9wc1tkZkluZGV4XVt2aWV3ZXJJbmRleF1bJ2Jsb2NrJ107XG5cbiAgICAgICAgICBmdWxsQmxvY2tXaWR0aCArPSBibG9ja1NpemUgPyBwYXJzZUludChibG9ja1NpemUpOiAwO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB2aWV3ZXJzOiBQcm9taXNlPERHLlZpZXdlcltdPiA9IFByb21pc2UuYWxsKHBhcnNlZFRhYkRmUHJvcHNbZGZJbmRleF0ubWFwKGFzeW5jICh2aWV3ZXJEZXNjOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZTogREcuRGF0YUZyYW1lID0gdGhpcy5mdW5jQ2FsbD8ub3V0cHV0c1tkZlByb3AubmFtZV0/LnZhbHVlID8/IHRoaXMuZnVuY0NhbGwhLmlucHV0UGFyYW1zW2RmUHJvcC5uYW1lXT8udmFsdWUgPz8gZ3Jvay5kYXRhLmRlbW8uZGVtb2coMSk7XG5cbiAgICAgICAgICBjb25zdCB2aWV3ZXIgPSB2aWV3ZXJUeXBlc01hcHBpbmdbdmlld2VyRGVzY1sndHlwZSddXSA/IERHLlZpZXdlci5mcm9tVHlwZSh2aWV3ZXJUeXBlc01hcHBpbmdbdmlld2VyRGVzY1sndHlwZSddXSwgaW5pdGlhbFZhbHVlKTogYXdhaXQgaW5pdGlhbFZhbHVlLnBsb3QuZnJvbVR5cGUodmlld2VyRGVzY1sndHlwZSddKSBhcyBERy5WaWV3ZXI7XG4gICAgICAgICAgdmlld2VyLnNldE9wdGlvbnModmlld2VyRGVzYyk7XG5cbiAgICAgICAgICBpZiAodGhpcy5kZlRvVmlld2VyTWFwcGluZ1tkZlByb3AubmFtZV0pIHRoaXMuZGZUb1ZpZXdlck1hcHBpbmdbZGZQcm9wLm5hbWVdLnB1c2godmlld2VyKTsgZWxzZSB0aGlzLmRmVG9WaWV3ZXJNYXBwaW5nW2RmUHJvcC5uYW1lXSA9IFt2aWV3ZXJdO1xuXG4gICAgICAgICAgcmV0dXJuIHZpZXdlcjtcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHZpZXdlcnMudGhlbigobG9hZGVkVmlld2VycykgPT4ge1xuICAgICAgICAgIGNvbnN0IHN1YnNjcmliZU9uRmNDaGFuZ2VzID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFBhcmFtOiBERy5GdW5jQ2FsbFBhcmFtID0gdGhpcy5mdW5jQ2FsbCEub3V0cHV0UGFyYW1zW2RmUHJvcC5uYW1lXSA/PyB0aGlzLmZ1bmNDYWxsIS5pbnB1dFBhcmFtc1tkZlByb3AubmFtZV07XG5cbiAgICAgICAgICAgIGN1cnJlbnRQYXJhbS5vbkNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgbG9hZGVkVmlld2Vycy5mb3JFYWNoKGFzeW5jICh2aWV3ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnZhbHVlcyh2aWV3ZXJUeXBlc01hcHBpbmcpLmluY2x1ZGVzKHZpZXdlci50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgdmlld2VyLmRhdGFGcmFtZSA9IGN1cnJlbnRQYXJhbS52YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gRVhQTEFJTiBXSFlcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZpZXdlciA9IGF3YWl0IGN1cnJlbnRQYXJhbS52YWx1ZS5wbG90LmZyb21UeXBlKHZpZXdlci50eXBlKSBhcyBERy5WaWV3ZXI7XG4gICAgICAgICAgICAgICAgICB2aWV3ZXIucm9vdC5yZXBsYWNlV2l0aChuZXdWaWV3ZXIucm9vdCk7XG4gICAgICAgICAgICAgICAgICB2aWV3ZXIgPSBuZXdWaWV3ZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBzdWJzY3JpYmVPbkZjQ2hhbmdlcygpO1xuICAgICAgICAgIHRoaXMuZnVuY0NhbGxSZXBsYWNlZC5zdWJzY3JpYmUoc3Vic2NyaWJlT25GY0NoYW5nZXMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBkZkJsb2NrVGl0bGU6IHN0cmluZyA9IGRmUHJvcC5vcHRpb25zWydjYXB0aW9uJ10gPz8gZGZQcm9wLm5hbWU7XG5cbiAgICAgICAgY29uc3QgZGZCbG9jayA9IHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxvYWRlZFZpZXdlcnMgPSBhd2FpdCB2aWV3ZXJzO1xuICAgICAgICAgIHJldHVybiB1aS5kaXZIKFxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgIGxvYWRlZFZpZXdlcnMubWFwKCh2aWV3ZXIpID0+IHZpZXdlci5yb290LCB7c3R5bGU6IHsnZmxleC13cmFwJzogJ3dyYXAnfX0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRhYkxhYmVsID09PSAnSW5wdXQnKSB7XG4gICAgICAgICAgY29uc3Qgc3Vic2NyaWJlT25GY0NoYW5nZXMgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UGFyYW06IERHLkZ1bmNDYWxsUGFyYW0gPSB0aGlzLmZ1bmNDYWxsIS5vdXRwdXRQYXJhbXNbZGZQcm9wLm5hbWVdID8/IHRoaXMuZnVuY0NhbGwhLmlucHV0UGFyYW1zW2RmUHJvcC5uYW1lXTtcblxuICAgICAgICAgICAgY3VycmVudFBhcmFtLm9uQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnRhYnNFbGVtLnJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2Rpc3BsYXknKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBzdWJzY3JpYmVPbkZjQ2hhbmdlcygpO1xuICAgICAgICAgIHRoaXMuZnVuY0NhbGxSZXBsYWNlZC5zdWJzY3JpYmUoc3Vic2NyaWJlT25GY0NoYW5nZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVpLmRpdlYoW1xuICAgICAgICAgIC8vIFJlbW92aW5nIHRpdGxlIG1hcmdpbiBvbiB0b3Agb2YgYmxvY2sgdGl0bGVzXG4gICAgICAgICAgdWkuaDIoZGZCbG9ja1RpdGxlLCB7Li4uKGRmSW5kZXggPiAwKSA/IHtzdHlsZTogeydtYXJnaW4tdG9wJzogJzBweCd9fSA6IHt9fSksXG4gICAgICAgICAgZGZCbG9ja1xuICAgICAgICBdLCB7c3R5bGU6IHsuLi4oZnVsbEJsb2NrV2lkdGggPiAwKSA/IHsnd2lkdGgnOiBgJHtmdWxsQmxvY2tXaWR0aH0lYH06IHsnd2lkdGgnOiBgMTAwJWB9fX0pO1xuICAgICAgfSk7XG5cblxuICAgICAgY29uc3QgZ2VuZXJhdGVTY2FsYXJzVGFibGUgPSAoKSA9PiB1aS50YWJsZUZyb21NYXAoXG4gICAgICAgIHRhYlNjYWxhclByb3BzLnJlZHVjZSgoYWNjLCBzY2FsYXIpID0+IHtcbiAgICAgICAgICBhY2Nbc2NhbGFyLm5hbWVdID0gdGhpcy5mdW5jQ2FsbD8ub3V0cHV0c1tzY2FsYXIubmFtZV07XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30gYXMge1trZXk6IHN0cmluZ106IHN0cmluZ30pXG4gICAgICApO1xuXG4gICAgICBsZXQgc2NhbGFyc1RhYmxlID0gZ2VuZXJhdGVTY2FsYXJzVGFibGUoKTtcblxuICAgICAgdGFiU2NhbGFyUHJvcHMuZm9yRWFjaCgodGFiU2NhbGFyUHJvcCkgPT4ge1xuICAgICAgICBjb25zdCBzdWJzY3JpYmVPbkZjQ2hhbmdlcyA9ICgpID0+IHtcbiAgICAgICAgICAodGhpcy5mdW5jQ2FsbCEub3V0cHV0UGFyYW1zW3RhYlNjYWxhclByb3AubmFtZV0gYXMgREcuRnVuY0NhbGxQYXJhbSkub25DaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdTY2FsYXJzVGFibGUgPSBnZW5lcmF0ZVNjYWxhcnNUYWJsZSgpO1xuICAgICAgICAgICAgc2NhbGFyc1RhYmxlLnJlcGxhY2VXaXRoKG5ld1NjYWxhcnNUYWJsZSk7XG4gICAgICAgICAgICBzY2FsYXJzVGFibGUgPSBuZXdTY2FsYXJzVGFibGU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc3Vic2NyaWJlT25GY0NoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5mdW5jQ2FsbFJlcGxhY2VkLnN1YnNjcmliZShzdWJzY3JpYmVPbkZjQ2hhbmdlcyk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZGZTZWN0aW9ucyA9IFtdIGFzIEhUTUxFbGVtZW50W107XG4gICAgICBsZXQgY3VycmVudFdpZHRoID0gMDtcbiAgICAgIGxldCBjdXJyZW50U2VjdGlvbiA9IHVpLmRpdkgoW10sIHtzdHlsZTogeydtYXJnaW4tYm90dG9tJzogJzI1cHgnfX0pOyAvLyBBZGRpbmcgc21hbGwgbWFyZ2luIGJldHdlZW4gc2VjdGlvbnNcbiAgICAgIGRmQmxvY2tzLmZvckVhY2goKGRmQmxvY2ssIGRmSW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgYmxvY2tXaWR0aCA9IHBhcnNlSW50KGRmQmxvY2suc3R5bGUud2lkdGgpO1xuXG4gICAgICAgIGlmIChjdXJyZW50V2lkdGggKyBibG9ja1dpZHRoID09PSAxMDApIHtcbiAgICAgICAgICBjdXJyZW50U2VjdGlvbi5hcHBlbmQoZGZCbG9jayk7XG4gICAgICAgICAgZGZTZWN0aW9ucy5wdXNoKGN1cnJlbnRTZWN0aW9uKTtcbiAgICAgICAgICBjdXJyZW50U2VjdGlvbiA9IHVpLmRpdkgoW10pO1xuICAgICAgICAgIGN1cnJlbnRXaWR0aCA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFdpZHRoICsgYmxvY2tXaWR0aCA8IDEwMCkge1xuICAgICAgICAgIGN1cnJlbnRTZWN0aW9uLmFwcGVuZChkZkJsb2NrKTtcbiAgICAgICAgICBjdXJyZW50V2lkdGggKz0gYmxvY2tXaWR0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZlNlY3Rpb25zLnB1c2goY3VycmVudFNlY3Rpb24pO1xuICAgICAgICAgIGN1cnJlbnRTZWN0aW9uID0gdWkuZGl2SChbXSk7XG4gICAgICAgICAgY3VycmVudFNlY3Rpb24uYXBwZW5kKGRmQmxvY2spO1xuICAgICAgICAgIGN1cnJlbnRXaWR0aCA9IGJsb2NrV2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGZJbmRleCA9PT0gZGZCbG9ja3MubGVuZ3RoIC0gMSlcbiAgICAgICAgICBkZlNlY3Rpb25zLnB1c2goY3VycmVudFNlY3Rpb24pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMudGFic0VsZW0uYWRkUGFuZSh0YWJMYWJlbCwgKCkgPT4ge1xuICAgICAgICByZXR1cm4gdWkuZGl2VihbLi4uZGZTZWN0aW9ucywgLi4udGFiU2NhbGFyUHJvcHMubGVuZ3RoID8gW3VpLmgyKCdTY2FsYXIgdmFsdWVzJyldOiBbXSwgc2NhbGFyc1RhYmxlXSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IG91dHB1dEJsb2NrID0gdWkuYm94KCk7XG4gICAgb3V0cHV0QmxvY2suYXBwZW5kKHRoaXMudGFic0VsZW0ucm9vdCk7XG5cbiAgICByZXR1cm4gb3V0cHV0QmxvY2s7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb25BZnRlckxvYWRSdW4obG9hZGVkUnVuOiBERy5GdW5jQ2FsbCkge1xuICAgIHd1KHRoaXMuZnVuY0NhbGwhLm91dHB1dFBhcmFtcy52YWx1ZXMoKSBhcyBERy5GdW5jQ2FsbFBhcmFtW10pLmZvckVhY2goKG91dCkgPT4ge1xuICAgICAgdGhpcy5mdW5jQ2FsbCEuc2V0UGFyYW1WYWx1ZShvdXQubmFtZSwgbG9hZGVkUnVuLm91dHB1dHNbb3V0Lm5hbWVdKTtcbiAgICB9KTtcblxuICAgIHd1KHRoaXMuZnVuY0NhbGwhLmlucHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSkuZm9yRWFjaCgoaW5wKSA9PiB7XG4gICAgICB0aGlzLmZ1bmNDYWxsIS5zZXRQYXJhbVZhbHVlKGlucC5uYW1lLCBsb2FkZWRSdW4uaW5wdXRzW2lucC5uYW1lXSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnRhYnNFbGVtLnJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2Rpc3BsYXknKTtcbiAgICB0aGlzLnRhYnNFbGVtLnBhbmVzLmZvckVhY2goKHRhYikgPT4ge1xuICAgICAgdGFiLmhlYWRlci5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBkZlRvVmlld2VyTWFwcGluZzoge1trZXk6IHN0cmluZ106IERHLlZpZXdlcltdfSA9IHt9O1xuXG4gIHByb3RlY3RlZCBnZXQgZGZQYXJhbXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLnRoaXMuZnVuYyEuaW5wdXRzLmZpbHRlcigocCkgPT4gcC5wcm9wZXJ0eVR5cGUgPT0gREcuVFlQRS5EQVRBX0ZSQU1FKSxcbiAgICAgIC4uLnRoaXMuZnVuYyEub3V0cHV0cy5maWx0ZXIoKHApID0+IHAucHJvcGVydHlUeXBlID09IERHLlRZUEUuREFUQV9GUkFNRSksXG4gICAgXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgZGZPdXRwdXRQYXJhbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnVuYyEub3V0cHV0cy5maWx0ZXIoKHApID0+IHAucHJvcGVydHlUeXBlID09IERHLlRZUEUuREFUQV9GUkFNRSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGlzSW5wdXRQYW5lbFJlcXVpcmVkKCkge1xuICAgIHJldHVybiB0aGlzLmZ1bmM/LmlucHV0cy5zb21lKChwKSA9PiBwLnByb3BlcnR5VHlwZSA9PSBERy5UWVBFLkRBVEFfRlJBTUUgJiYgcC5vcHRpb25zWyd2aWV3ZXInXSAhPSBudWxsKSB8fCBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgb3V0VW5pcXVlUGFyYW1DYXRlZ29yaWVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAuLi5uZXcgU2V0KHRoaXMuZnVuYyEub3V0cHV0cy5tYXAoKHApID0+IHAuY2F0ZWdvcnkpKSAvLyBnZXQgYWxsIG91dHB1dCBwYXJhbXMnIGNhdGVnb3JpZXNcbiAgICBdOyAvLyBrZWVwIG9ubHkgdW5pcXVlIG9mIHRoZW1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgb3V0cHV0VGFic0xhYmVscygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4udGhpcy5vdXRVbmlxdWVQYXJhbUNhdGVnb3JpZXMsXG4gICAgICAuLi50aGlzLm91dFVuaXF1ZVBhcmFtQ2F0ZWdvcmllcy5maW5kKCh2YWwpID0+IHZhbCA9PT0gJ01pc2MnKSA/IFsnT3V0cHV0J10gOiBbXSwgLy8gaWYgbm8gY2F0ZWdvcmllcyBhcmUgc3RhdGVkLCB0aGUgZGVmYXVsdCBjYXRlZ29yeSBpcyBhZGRlZFxuICAgIF07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRhYnNMYWJlbHMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY2F0ZWdvcnlUb1BhcmFtTWFwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgY2F0ZWdvcnlUb1BhcmFtTWFwKCkge1xuICAgIGNvbnN0IG1hcCA9IHt9IGFzIFJlY29yZDxzdHJpbmcsIERHLlByb3BlcnR5W10+O1xuXG4gICAgaWYgKHRoaXMuaXNJbnB1dFBhbmVsUmVxdWlyZWQpIHtcbiAgICAgIHRoaXMuZnVuYyEuaW5wdXRzLlxuICAgICAgICBmaWx0ZXIoKHApID0+IHAucHJvcGVydHlUeXBlID09IERHLlRZUEUuREFUQV9GUkFNRSAmJiBwLm9wdGlvbnNbJ3ZpZXdlciddICE9IG51bGwpLlxuICAgICAgICBmb3JFYWNoKChwKSA9PiBtYXBbJ0lucHV0J10gPyBtYXBbJ0lucHV0J10ucHVzaChwKTogbWFwWydJbnB1dCddID0gW3BdKTtcbiAgICB9XG5cbiAgICB0aGlzLmZ1bmMhLm91dHB1dHMuZm9yRWFjaCgocCkgPT4ge1xuICAgICAgY29uc3QgY2F0ZWdvcnkgPSBwLmNhdGVnb3J5ID09PSAnTWlzYycgPyAnT3V0cHV0JzogcC5jYXRlZ29yeTtcblxuICAgICAgaWYgKG1hcFtjYXRlZ29yeV0pXG4gICAgICAgIG1hcFtjYXRlZ29yeV0ucHVzaChwKTtcbiAgICAgIGVsc2VcbiAgICAgICAgbWFwW2NhdGVnb3J5XSA9IFtwXTtcbiAgICB9KTtcblxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5mdW5jQ2FsbCkgdGhyb3cgbmV3IEVycm9yKCdUaGUgY29ycmVzcG9kaW5nIGZ1bmN0aW9uIGlzIG5vdCBzcGVjaWZpZWQnKTtcblxuICAgIGF3YWl0IHRoaXMub25CZWZvcmVSdW4odGhpcy5mdW5jQ2FsbCk7XG4gICAgY29uc3QgcGkgPSBERy5UYXNrQmFyUHJvZ3Jlc3NJbmRpY2F0b3IuY3JlYXRlKCdDYWxjdWxhdGluZy4uLicpO1xuICAgIHRoaXMuZnVuY0NhbGwubmV3SWQoKTtcbiAgICBhd2FpdCB0aGlzLmZ1bmNDYWxsLmNhbGwoKTsgLy8gbXV0YXRlcyB0aGUgZnVuY0NhbGwgZmllbGRcbiAgICBwaS5jbG9zZSgpO1xuICAgIGF3YWl0IHRoaXMub25BZnRlclJ1bih0aGlzLmZ1bmNDYWxsKTtcbiAgICB0aGlzLmxhc3RDYWxsID0gdGhpcy5vcHRpb25zLmlzVGFiYmVkID8gdGhpcy5mdW5jQ2FsbC5jbG9uZSgpIDogYXdhaXQgdGhpcy5zYXZlUnVuKHRoaXMuZnVuY0NhbGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkb1J1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmlzUnVubmluZyA9IHRydWU7XG4gICAgdGhpcy5jaGVja0Rpc2FiaWxpdHkubmV4dCgpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnJ1bigpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgZ3Jvay5zaGVsbC5lcnJvcihlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc1J1bm5pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2hlY2tEaXNhYmlsaXR5Lm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclJ1blNlY3Rpb24oKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IHJ1bkJ1dHRvbiA9IHVpLmJpZ0J1dHRvbignUnVuJywgYXN5bmMgKCkgPT4gYXdhaXQgdGhpcy5kb1J1bigpKTtcbiAgICAvLyBSRVBMQUNFIEJZIFRZUEUgR1VBUkRcbiAgICBjb25zdCBpc0Z1bmNTY3JpcHQgPSAoKSA9PiB7XG4gICAgICAvL0B0cy1pZ25vcmVcbiAgICAgIHJldHVybiAhIXRoaXMuZnVuYy5zY3JpcHQ7XG4gICAgfTtcbiAgICAvLyBUTyBETzogbW92ZSBidXR0b24gc29tZXdoZXJlXG4gICAgY29uc3Qgb3BlblNjcmlwdEJ0biA9IHVpLmJ1dHRvbignT3BlbiBzY3JpcHQnLCBhc3luYyAoKSA9PiB7XG4gICAgICB3aW5kb3cub3BlbihgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufS9zY3JpcHQvJHsodGhpcy5mdW5jIGFzIERHLlNjcmlwdCkuaWR9YCwgJ19ibGFuaycpO1xuICAgIH0pO1xuICAgIC8vIGNvbnN0IGJ1dHRvbldyYXBwZXIgPSB1aS5kaXYoWy4uLnRoaXMub3B0aW9ucy5pc1RhYmJlZCAmJiBpc0Z1bmNTY3JpcHQoKSA/IFtvcGVuU2NyaXB0QnRuXTogW10sIHJ1bkJ1dHRvbl0pO1xuICAgIGNvbnN0IGJ1dHRvbldyYXBwZXIgPSB1aS5kaXYoW3J1bkJ1dHRvbl0pO1xuICAgIHVpLnRvb2x0aXAuYmluZChidXR0b25XcmFwcGVyLCAoKSA9PiBydW5CdXR0b24uZGlzYWJsZWQgPyAodGhpcy5pc1J1bm5pbmcgPyAnQ29tcHV0YXRpb25zIGFyZSBpbiBwcm9ncmVzcycgOiAnU29tZSBpbnB1dHMgYXJlIGludmFsaWQnKSA6ICcnKTtcblxuICAgIHRoaXMuY2hlY2tEaXNhYmlsaXR5LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gKHd1KHRoaXMuZnVuY0NhbGwhLmlucHV0cy52YWx1ZXMoKSkuZXZlcnkoKHYpID0+IHYgIT09IG51bGwgJiYgdiAhPT0gdW5kZWZpbmVkKSkgJiYgIXRoaXMuaXNSdW5uaW5nO1xuICAgICAgcnVuQnV0dG9uLmRpc2FibGVkID0gIWlzVmFsaWQ7XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnB1dHMgPSB1aS5kaXZWKFtdLCAndWktZm9ybScpO1xuICAgIGxldCBwcmV2Q2F0ZWdvcnkgPSAnTWlzYyc7XG4gICAgd3UodGhpcy5mdW5jQ2FsbCEuaW5wdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKVxuICAgICAgLmZpbHRlcigodmFsKSA9PiAhIXZhbClcbiAgICAgIC5mb3JFYWNoKCh2YWwpID0+IHtcbiAgICAgICAgY29uc3QgcHJvcCA9IHZhbC5wcm9wZXJ0eTtcbiAgICAgICAgaWYgKHByb3AucHJvcGVydHlUeXBlLnRvU3RyaW5nKCkgPT09IEZJTEVfSU5QVVRfVFlQRSkge1xuICAgICAgICAgIGNvbnN0IHQgPSBVaVV0aWxzLmZpbGVJbnB1dChwcm9wLmNhcHRpb24gPz8gcHJvcC5uYW1lLCBudWxsLCAoZmlsZTogRmlsZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mdW5jQ2FsbCEuaW5wdXRzW3Byb3AubmFtZV0gPSBmaWxlO1xuICAgICAgICAgICAgdGhpcy5jaGVja0Rpc2FiaWxpdHkubmV4dCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChwcm9wLmNhdGVnb3J5ICE9PSBwcmV2Q2F0ZWdvcnkpXG4gICAgICAgICAgICBpbnB1dHMuYXBwZW5kKHVpLmgyKHByb3AuY2F0ZWdvcnkpKTtcblxuICAgICAgICAgIHRoaXMuY2hlY2tEaXNhYmlsaXR5Lm5leHQoKTtcbiAgICAgICAgICBpbnB1dHMuYXBwZW5kKHQucm9vdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IHQgPSBwcm9wLnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FID9cbiAgICAgICAgICAgIHVpLnRhYmxlSW5wdXQocHJvcC5jYXB0aW9uID8/IHByb3AubmFtZSwgbnVsbCwgZ3Jvay5zaGVsbC50YWJsZXMpOlxuICAgICAgICAgICAgdWkuaW5wdXQuZm9yUHJvcGVydHkocHJvcCk7XG5cbiAgICAgICAgICB0LmlucHV0Lm9ua2V5ZG93biA9IGFzeW5jIChldikgPT4ge1xuICAgICAgICAgICAgaWYgKGV2LmtleSA9PSAnRW50ZXInKVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRvUnVuKCk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHQuY2FwdGlvbkxhYmVsLmZpcnN0Q2hpbGQhLnJlcGxhY2VXaXRoKHVpLnNwYW4oW3Byb3AuY2FwdGlvbiA/PyBwcm9wLm5hbWVdKSk7XG4gICAgICAgICAgaWYgKHByb3Aub3B0aW9uc1sndW5pdHMnXSkgdC5hZGRQb3N0Zml4KHByb3Aub3B0aW9uc1sndW5pdHMnXSk7XG5cbiAgICAgICAgICBjb25zdCBzdWJzY3JpYmVPbkZjQ2hhbmdlcyA9ICgpID0+IHtcbiAgICAgICAgICAgIHQudmFsdWUgPSB0aGlzLmZ1bmNDYWxsIS5pbnB1dHNbdmFsLm5hbWVdID8/IHByb3AuZGVmYXVsdFZhbHVlID8/IG51bGw7XG4gICAgICAgICAgICB0aGlzLmZ1bmNDYWxsIS5pbnB1dHNbdmFsLm5hbWVdID0gdGhpcy5mdW5jQ2FsbCEuaW5wdXRzW3ZhbC5uYW1lXSA/PyBwcm9wLmRlZmF1bHRWYWx1ZSA/PyBudWxsO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBzdWJzY3JpYmVPbkZjQ2hhbmdlcygpO1xuICAgICAgICAgIHRoaXMuZnVuY0NhbGxSZXBsYWNlZC5zdWJzY3JpYmUoc3Vic2NyaWJlT25GY0NoYW5nZXMpO1xuXG4gICAgICAgICAgdC5vbkNoYW5nZWQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gUmVzb2x2aW5nIGNhc2Ugb2YgcHJvcGVydHlUeXBlID0gREFUQUZSQU1FXG4gICAgICAgICAgICBpZiAoISF0LnByb3BlcnR5KSByZXR1cm47XG5cbiAgICAgICAgICAgIHRoaXMuZnVuY0NhbGwhLmlucHV0c1t2YWwubmFtZV0gPSB0LnZhbHVlO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdC5vbklucHV0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZnVuY0NhbGwhLmlucHV0c1t2YWwubmFtZV0gPSB0LnZhbHVlO1xuICAgICAgICAgICAgaWYgKHQudmFsdWUgPT09IG51bGwpIHNldFRpbWVvdXQoKCkgPT4gdC5pbnB1dC5jbGFzc0xpc3QuYWRkKCdkNC1pbnZhbGlkJyksIDEwMCk7IGVsc2UgdC5pbnB1dC5jbGFzc0xpc3QucmVtb3ZlKCdkNC1pbnZhbGlkJyk7IDtcblxuICAgICAgICAgICAgdGhpcy5jaGVja0Rpc2FiaWxpdHkubmV4dCgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdmFsLm9uQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmZ1bmNDYWxsIS5pbnB1dHNbdmFsLm5hbWVdO1xuXG4gICAgICAgICAgICBpZiAodmFsLnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKSB7XG4gICAgICAgICAgICAgIC8vIERFQUxJTkcgV0lUSCBCVUc6IGh0dHBzOi8vcmVkZGF0YS5hdGxhc3NpYW4ubmV0L2Jyb3dzZS9HUk9LLTEyMjIzXG4gICAgICAgICAgICAgIGNvbnN0IG5ld1RhYmxlSW5wdXQgPSB1aS50YWJsZUlucHV0KHByb3AuY2FwdGlvbiA/PyBwcm9wLm5hbWUsIG5ld1ZhbHVlLCBbLi4uZ3Jvay5zaGVsbC50YWJsZXMsIG5ld1ZhbHVlXSk7XG4gICAgICAgICAgICAgIHQucm9vdC5yZXBsYWNlV2l0aChuZXdUYWJsZUlucHV0LnJvb3QpO1xuICAgICAgICAgICAgICB0ID0gbmV3VGFibGVJbnB1dDtcblxuICAgICAgICAgICAgICB0Lm9uSW5wdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZnVuY0NhbGwhLmlucHV0c1t2YWwubmFtZV0gPSB0LnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh0LnZhbHVlID09PSBudWxsKSBzZXRUaW1lb3V0KCgpID0+IHQuaW5wdXQuY2xhc3NMaXN0LmFkZCgnZDQtaW52YWxpZCcpLCAxMDApOyBlbHNlIHQuaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSgnZDQtaW52YWxpZCcpOyA7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrRGlzYWJpbGl0eS5uZXh0KCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdC5ub3RpZnkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdC52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgICB0Lm5vdGlmeSA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2hlY2tEaXNhYmlsaXR5Lm5leHQoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChwcm9wLmNhdGVnb3J5ICE9PSBwcmV2Q2F0ZWdvcnkpXG4gICAgICAgICAgICBpbnB1dHMuYXBwZW5kKHVpLmgyKHByb3AuY2F0ZWdvcnkpKTtcblxuICAgICAgICAgIGlmICh0LnZhbHVlID09PSBudWxsKSBydW5CdXR0b24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgIGlucHV0cy5hcHBlbmQodC5yb290KTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2Q2F0ZWdvcnkgPSBwcm9wLmNhdGVnb3J5O1xuICAgICAgfSk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGJ1dHRvbnMgPSB1aS5idXR0b25zSW5wdXQoW2J1dHRvbldyYXBwZXJdKTtcbiAgICBpbnB1dHMuYXBwZW5kKGJ1dHRvbnMpO1xuICAgIGlucHV0cy5jbGFzc0xpc3QucmVtb3ZlKCd1aS1wYW5lbCcpO1xuICAgIGlucHV0cy5zdHlsZS5wYWRkaW5nVG9wID0gJzBweCc7XG4gICAgaW5wdXRzLnN0eWxlLnBhZGRpbmdMZWZ0ID0gJzBweCc7XG5cbiAgICByZXR1cm4gdWkuZGl2KFtpbnB1dHNdKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWZhdWx0RXhwb3J0ID0gYXN5bmMgKGZvcm1hdDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbGFzdENhbGwgPSB0aGlzLmxhc3RDYWxsO1xuICAgIGlmICghbGFzdENhbGwpIHRocm93IG5ldyBFcnJvcihgRnVuY3Rpb24gd2FzIG5vdCBjYWxsZWRgKTtcblxuICAgIGlmICghdGhpcy5leHBvcnRDb25maWchLnN1cHBvcnRlZEZvcm1hdHMuaW5jbHVkZXMoZm9ybWF0KSkgdGhyb3cgbmV3IEVycm9yKGBGb3JtYXQgXCIke2Zvcm1hdH1cIiBpcyBub3Qgc3VwcG9ydGVkLmApO1xuXG4gICAgaWYgKCF0aGlzLmZ1bmMpIHRocm93IG5ldyBFcnJvcignVGhlIGNvcnJlc3BvZGluZyBmdW5jdGlvbiBpcyBub3Qgc3BlY2lmaWVkJyk7XG5cbiAgICBjb25zdCBCTE9CX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCc7XG4gICAgY29uc3QgZXhwb3J0V29ya2Jvb2sgPSBuZXcgRXhjZWxKUy5Xb3JrYm9vaygpO1xuXG4gICAgY29uc3QgaXNTY2FsYXJUeXBlID0gKHR5cGU6IERHLlRZUEUpID0+IChERy5UWVBFU19TQ0FMQVIuaGFzKHR5cGUpKTtcblxuICAgIGNvbnN0IGlzRGF0YUZyYW1lID0gKHR5cGU6IERHLlRZUEUpID0+ICh0eXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpO1xuXG4gICAgY29uc3QgZGZJbnB1dHMgPSB0aGlzLmZ1bmMuaW5wdXRzLmZpbHRlcigoaW5wdXQpID0+IGlzRGF0YUZyYW1lKGlucHV0LnByb3BlcnR5VHlwZSkpO1xuICAgIGNvbnN0IHNjYWxhcklucHV0cyA9IHRoaXMuZnVuYy5pbnB1dHMuZmlsdGVyKChpbnB1dCkgPT4gaXNTY2FsYXJUeXBlKGlucHV0LnByb3BlcnR5VHlwZSkpO1xuICAgIGNvbnN0IGRmT3V0cHV0cyA9IHRoaXMuZnVuYy5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBpc0RhdGFGcmFtZShvdXRwdXQucHJvcGVydHlUeXBlKSk7XG4gICAgY29uc3Qgc2NhbGFyT3V0cHV0cyA9IHRoaXMuZnVuYy5vdXRwdXRzLmZpbHRlcigob3V0cHV0KSA9PiBpc1NjYWxhclR5cGUob3V0cHV0LnByb3BlcnR5VHlwZSkpO1xuXG4gICAgY29uc3QgaW5wdXRQYXJhbXMgPSBbLi4ubGFzdENhbGwuaW5wdXRQYXJhbXMudmFsdWVzKCldIGFzIERHLkZ1bmNDYWxsUGFyYW1bXTtcbiAgICBjb25zdCBvdXRwdXRQYXJhbXMgPSBbLi4ubGFzdENhbGwub3V0cHV0UGFyYW1zLnZhbHVlcygpXSBhcyBERy5GdW5jQ2FsbFBhcmFtW107XG5cbiAgICBkZklucHV0cy5mb3JFYWNoKChkZklucHV0KSA9PiB7XG4gICAgICBjb25zdCB2aXNpYmxlVGl0bGUgPSBkZklucHV0Lm9wdGlvbnMuY2FwdGlvbiB8fCBkZklucHV0Lm5hbWU7XG4gICAgICBjb25zdCBjdXJyZW50RGZTaGVldCA9IGV4cG9ydFdvcmtib29rLmFkZFdvcmtzaGVldChnZXRTaGVldE5hbWUodmlzaWJsZVRpdGxlLCBESVJFQ1RJT04uSU5QVVQpKTtcblxuICAgICAgY29uc3QgY3VycmVudERmID0gKGxhc3RDYWxsLmlucHV0c1tkZklucHV0Lm5hbWVdIGFzIERHLkRhdGFGcmFtZSk7XG4gICAgICBkZlRvU2hlZXQoY3VycmVudERmU2hlZXQsIGN1cnJlbnREZik7XG4gICAgfSk7XG5cbiAgICBpZiAoc2NhbGFySW5wdXRzLmxlbmd0aCkge1xuICAgICAgY29uc3QgaW5wdXRTY2FsYXJzU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoJ0lucHV0IHNjYWxhcnMnKTtcbiAgICAgIHNjYWxhcnNUb1NoZWV0KGlucHV0U2NhbGFyc1NoZWV0LCBzY2FsYXJJbnB1dHMubWFwKChzY2FsYXJJbnB1dCkgPT4gKHtcbiAgICAgICAgY2FwdGlvbjogc2NhbGFySW5wdXQub3B0aW9uc1snY2FwdGlvbiddIHx8IHNjYWxhcklucHV0Lm5hbWUsXG4gICAgICAgIHZhbHVlOiBsYXN0Q2FsbC5pbnB1dHNbc2NhbGFySW5wdXQubmFtZV0sXG4gICAgICAgIHVuaXRzOiBzY2FsYXJJbnB1dC5vcHRpb25zWyd1bml0cyddIHx8ICcnLFxuICAgICAgfSkpKTtcbiAgICB9XG5cbiAgICBkZk91dHB1dHMuZm9yRWFjaCgoZGZPdXRwdXQpID0+IHtcbiAgICAgIGNvbnN0IHZpc2libGVUaXRsZSA9IGRmT3V0cHV0Lm9wdGlvbnMuY2FwdGlvbiB8fCBkZk91dHB1dC5uYW1lO1xuICAgICAgY29uc3QgY3VycmVudERmU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLk9VVFBVVCkpO1xuXG4gICAgICBjb25zdCBjdXJyZW50RGYgPSAobGFzdENhbGwub3V0cHV0c1tkZk91dHB1dC5uYW1lXSBhcyBERy5EYXRhRnJhbWUpO1xuICAgICAgZGZUb1NoZWV0KGN1cnJlbnREZlNoZWV0LCBjdXJyZW50RGYpO1xuICAgIH0pO1xuXG5cbiAgICBpZiAoc2NhbGFyT3V0cHV0cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG91dHB1dFNjYWxhcnNTaGVldCA9IGV4cG9ydFdvcmtib29rLmFkZFdvcmtzaGVldCgnT3V0cHV0IHNjYWxhcnMnKTtcbiAgICAgIHNjYWxhcnNUb1NoZWV0KG91dHB1dFNjYWxhcnNTaGVldCwgc2NhbGFyT3V0cHV0cy5tYXAoKHNjYWxhck91dHB1dCkgPT4gKHtcbiAgICAgICAgY2FwdGlvbjogc2NhbGFyT3V0cHV0Lm9wdGlvbnNbJ2NhcHRpb24nXSB8fCBzY2FsYXJPdXRwdXQubmFtZSxcbiAgICAgICAgdmFsdWU6IGxhc3RDYWxsLm91dHB1dHNbc2NhbGFyT3V0cHV0Lm5hbWVdLFxuICAgICAgICB1bml0czogc2NhbGFyT3V0cHV0Lm9wdGlvbnNbJ3VuaXRzJ10gfHwgJycsXG4gICAgICB9KSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHRhYkNvbnRyb2wgPSB0aGlzLnRhYnNFbGVtO1xuICAgIGZvciAoY29uc3QgdGFiTGFiZWwgb2YgdGhpcy50YWJzTGFiZWxzKSB7XG4gICAgICB0YWJDb250cm9sLmN1cnJlbnRQYW5lID0gdGFiQ29udHJvbC5nZXRQYW5lKHRhYkxhYmVsKTtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyKSA9PiBzZXRUaW1lb3V0KHIsIDEwMCkpO1xuICAgICAgaWYgKHRhYkxhYmVsID09PSAnSW5wdXQnKSB7XG4gICAgICAgIGZvciAoY29uc3QgaW5wdXRQYXJhbSBvZiBpbnB1dFBhcmFtcy5maWx0ZXIoKGlucHV0UGFyYW0pID0+IGlucHV0UGFyYW0ucHJvcGVydHkucHJvcGVydHlUeXBlID09PSBERy5UWVBFLkRBVEFfRlJBTUUpKSB7XG4gICAgICAgICAgY29uc3Qgbm9uR3JpZFZpZXdlcnMgPSB0aGlzLmRmVG9WaWV3ZXJNYXBwaW5nW2lucHV0UGFyYW0ubmFtZV1cbiAgICAgICAgICAgIC5maWx0ZXIoKHZpZXdlcikgPT4gdmlld2VyLnR5cGUgIT09IERHLlZJRVdFUi5HUklEKVxuICAgICAgICAgICAgLmZpbHRlcigodmlld2VyKSA9PiBPYmplY3QudmFsdWVzKHZpZXdlclR5cGVzTWFwcGluZykuaW5jbHVkZXModmlld2VyLnR5cGUpKTtcblxuICAgICAgICAgIGNvbnN0IGRmSW5wdXQgPSBkZklucHV0cy5maW5kKChpbnB1dCkgPT4gaW5wdXQubmFtZSA9PT0gaW5wdXRQYXJhbS5uYW1lKTtcbiAgICAgICAgICBjb25zdCB2aXNpYmxlVGl0bGUgPSBkZklucHV0IS5vcHRpb25zLmNhcHRpb24gfHwgaW5wdXRQYXJhbS5uYW1lO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnREZiA9IChsYXN0Q2FsbC5pbnB1dHNbZGZJbnB1dCEubmFtZV0gYXMgREcuRGF0YUZyYW1lKTtcblxuICAgICAgICAgIGZvciAoY29uc3QgW2luZGV4LCB2aWV3ZXJdIG9mIG5vbkdyaWRWaWV3ZXJzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgYXdhaXQgcGxvdFRvU2hlZXQoXG4gICAgICAgICAgICAgIGV4cG9ydFdvcmtib29rLFxuICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vay5nZXRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLklOUFVUKSksXG4gICAgICAgICAgICAgIHZpZXdlci5yb290LFxuICAgICAgICAgICAgICBjdXJyZW50RGYuY29sdW1ucy5sZW5ndGggKyAyLFxuICAgICAgICAgICAgICAoaW5kZXggPiAwKSA/IE1hdGguY2VpbChub25HcmlkVmlld2Vyc1tpbmRleC0xXS5yb290LmNsaWVudEhlaWdodCAvIDIwKSArIDEgOiAwXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3Qgb3V0cHV0UGFyYW0gb2Ygb3V0cHV0UGFyYW1zLmZpbHRlcihcbiAgICAgICAgICAob3V0cHV0UGFyYW0pID0+IG91dHB1dFBhcmFtLnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FICYmXG4gICAgICAgICAgKFxuICAgICAgICAgICAgKHRhYkxhYmVsID09PSAnT3V0cHV0JyAmJiBvdXRwdXRQYXJhbS5wcm9wZXJ0eS5jYXRlZ29yeSA9PT0gJ01pc2MnKSB8fFxuICAgICAgICAgICAgKHRhYkxhYmVsICE9PSAnT3V0cHV0JyAmJiBvdXRwdXRQYXJhbS5wcm9wZXJ0eS5jYXRlZ29yeSA9PT0gdGFiTGFiZWwpXG4gICAgICAgICAgKVxuICAgICAgICApKSB7XG4gICAgICAgICAgY29uc3Qgbm9uR3JpZFZpZXdlcnMgPSB0aGlzLmRmVG9WaWV3ZXJNYXBwaW5nW291dHB1dFBhcmFtLnByb3BlcnR5Lm5hbWVdXG4gICAgICAgICAgICAuZmlsdGVyKCh2aWV3ZXIpID0+IHZpZXdlci50eXBlICE9PSBERy5WSUVXRVIuR1JJRClcbiAgICAgICAgICAgIC5maWx0ZXIoKHZpZXdlcikgPT4gT2JqZWN0LnZhbHVlcyh2aWV3ZXJUeXBlc01hcHBpbmcpLmluY2x1ZGVzKHZpZXdlci50eXBlKSk7XG5cbiAgICAgICAgICBjb25zdCBkZk91dHB1dCA9IGRmT3V0cHV0cy5maW5kKChvdXRwdXQpID0+IG91dHB1dC5uYW1lID09PSBvdXRwdXRQYXJhbS5wcm9wZXJ0eS5uYW1lKSE7XG4gICAgICAgICAgY29uc3QgdmlzaWJsZVRpdGxlID0gZGZPdXRwdXQub3B0aW9ucy5jYXB0aW9uIHx8IG91dHB1dFBhcmFtLnByb3BlcnR5Lm5hbWU7XG4gICAgICAgICAgY29uc3QgY3VycmVudERmID0gKGxhc3RDYWxsLm91dHB1dHNbZGZPdXRwdXQubmFtZV0gYXMgREcuRGF0YUZyYW1lKTtcblxuICAgICAgICAgIGZvciAoY29uc3QgW2luZGV4LCB2aWV3ZXJdIG9mIG5vbkdyaWRWaWV3ZXJzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgaWYgKHZpZXdlci50eXBlID09PSBERy5WSUVXRVIuU1RBVElTVElDUykge1xuICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSBjdXJyZW50RGYuY29sdW1ucy5sZW5ndGg7XG4gICAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtcbiAgICAgICAgICAgICAgICBERy5Db2x1bW4uc3RyaW5nKCdOYW1lJywgbGVuZ3RoKS5pbml0KChpOiBudW1iZXIpID0+IGN1cnJlbnREZi5jb2x1bW5zLmJ5SW5kZXgoaSkubmFtZSksXG4gICAgICAgICAgICAgICAgREcuQ29sdW1uLmludCgnVmFsdWVzJywgbGVuZ3RoKS5pbml0KChpOiBudW1iZXIpID0+IGN1cnJlbnREZi5jb2x1bW5zLmJ5SW5kZXgoaSkuc3RhdHMudmFsdWVDb3VudCksXG4gICAgICAgICAgICAgICAgREcuQ29sdW1uLmludCgnTnVsbHMnLCBsZW5ndGgpLmluaXQoKGk6IG51bWJlcikgPT4gY3VycmVudERmLmNvbHVtbnMuYnlJbmRleChpKS5zdGF0cy5taXNzaW5nVmFsdWVDb3VudCksXG4gICAgICAgICAgICAgICAgREcuQ29sdW1uLmZsb2F0KCdNaW4nLCBsZW5ndGgpLmluaXQoKGk6IG51bWJlcikgPT4gY3VycmVudERmLmNvbHVtbnMuYnlJbmRleChpKS5zdGF0cy5taW4pLFxuICAgICAgICAgICAgICAgIERHLkNvbHVtbi5mbG9hdCgnTWF4JywgbGVuZ3RoKS5pbml0KChpOiBudW1iZXIpID0+IGN1cnJlbnREZi5jb2x1bW5zLmJ5SW5kZXgoaSkuc3RhdHMubWF4KSxcbiAgICAgICAgICAgICAgICBERy5Db2x1bW4uZmxvYXQoJ0F2ZycsIGxlbmd0aCkuaW5pdCgoaTogbnVtYmVyKSA9PiBjdXJyZW50RGYuY29sdW1ucy5ieUluZGV4KGkpLnN0YXRzLmF2ZyksXG4gICAgICAgICAgICAgICAgREcuQ29sdW1uLmZsb2F0KCdTdGRldicsIGxlbmd0aCkuaW5pdCgoaTogbnVtYmVyKSA9PiBjdXJyZW50RGYuY29sdW1ucy5ieUluZGV4KGkpLnN0YXRzLnN0ZGV2KSxcbiAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgIGRmVG9TaGVldChcbiAgICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vay5nZXRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLk9VVFBVVCkpLFxuICAgICAgICAgICAgICAgIHN0YXRzLFxuICAgICAgICAgICAgICAgIGN1cnJlbnREZi5jb2x1bW5zLmxlbmd0aCArIDIsXG4gICAgICAgICAgICAgICAgKGluZGV4ID4gMCkgPyBNYXRoLmNlaWwobm9uR3JpZFZpZXdlcnNbaW5kZXgtMV0ucm9vdC5jbGllbnRIZWlnaHQgLyAyMCkgKyAxIDogMFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYXdhaXQgcGxvdFRvU2hlZXQoXG4gICAgICAgICAgICAgICAgZXhwb3J0V29ya2Jvb2ssXG4gICAgICAgICAgICAgICAgZXhwb3J0V29ya2Jvb2suZ2V0V29ya3NoZWV0KGdldFNoZWV0TmFtZSh2aXNpYmxlVGl0bGUsIERJUkVDVElPTi5PVVRQVVQpKSxcbiAgICAgICAgICAgICAgICB2aWV3ZXIucm9vdCxcbiAgICAgICAgICAgICAgICBjdXJyZW50RGYuY29sdW1ucy5sZW5ndGggKyAyLFxuICAgICAgICAgICAgICAgIChpbmRleCA+IDApID8gTWF0aC5jZWlsKG5vbkdyaWRWaWV3ZXJzW2luZGV4LTFdLnJvb3QuY2xpZW50SGVpZ2h0IC8gMjApICsgMSA6IDBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBleHBvcnRXb3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCk7XG5cbiAgICByZXR1cm4gbmV3IEJsb2IoW2J1ZmZlcl0sIHt0eXBlOiBCTE9CX1RZUEV9KTtcbiAgfTtcblxuICBleHBvcnRDb25maWcgPSB7XG4gICAgc3VwcG9ydGVkRXh0ZW5zaW9uczogdGhpcy5kZWZhdWx0U3VwcG9ydGVkRXhwb3J0RXh0ZW5zaW9ucygpLFxuICAgIHN1cHBvcnRlZEZvcm1hdHM6IHRoaXMuZGVmYXVsdFN1cHBvcnRlZEV4cG9ydEZvcm1hdHMoKSxcbiAgICBleHBvcnQ6IHRoaXMuZGVmYXVsdEV4cG9ydCxcbiAgICBmaWxlbmFtZTogdGhpcy5kZWZhdWx0RXhwb3J0RmlsZW5hbWUsXG4gIH07XG59XG5cbmNvbnN0IGdldFNoZWV0TmFtZSA9IChuYW1lOiBzdHJpbmcsIGRpcmVjdGlvbjogRElSRUNUSU9OKSA9PiB7XG4gIGNvbnN0IGlkZWFsTmFtZSA9IGAke2RpcmVjdGlvbn0gLSAke25hbWV9YDtcbiAgcmV0dXJuIChpZGVhbE5hbWUubGVuZ3RoID4gMzEpID8gbmFtZS5zdWJzdHJpbmcoMCwgMzIpIDogaWRlYWxOYW1lO1xufTtcblxuZW51bSBESVJFQ1RJT04ge1xuICBJTlBVVCA9ICdJbnB1dCcsXG4gIE9VVFBVVCA9ICdPdXRwdXQnXG59XG5cbmNvbnN0IHNjYWxhcnNUb1NoZWV0ID0gKHNoZWV0OiBFeGNlbEpTLldvcmtzaGVldCwgc2NhbGFyczogeyBjYXB0aW9uOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIHVuaXRzOiBzdHJpbmcgfVtdKSA9PiB7XG4gIHNoZWV0LmFkZFJvdyhbJ1BhcmFtZXRlcicsICdWYWx1ZScsICdVbml0cyddKS5mb250ID0ge2JvbGQ6IHRydWV9O1xuICBzY2FsYXJzLmZvckVhY2goKHNjYWxhcikgPT4ge1xuICAgIHNoZWV0LmFkZFJvdyhbc2NhbGFyLmNhcHRpb24sIHNjYWxhci52YWx1ZSwgc2NhbGFyLnVuaXRzXSk7XG4gIH0pO1xuXG4gIHNoZWV0LmdldENvbHVtbigxKS53aWR0aCA9IE1hdGgubWF4KFxuICAgIC4uLnNjYWxhcnMubWFwKChzY2FsYXIpID0+IHNjYWxhci5jYXB0aW9uLnRvU3RyaW5nKCkubGVuZ3RoKSwgJ1BhcmFtZXRlcicubGVuZ3RoXG4gICkgKiAxLjI7XG4gIHNoZWV0LmdldENvbHVtbigyKS53aWR0aCA9IE1hdGgubWF4KC4uLnNjYWxhcnMubWFwKChzY2FsYXIpID0+IHNjYWxhci52YWx1ZS50b1N0cmluZygpLmxlbmd0aCksICdWYWx1ZScubGVuZ3RoKSAqIDEuMjtcbiAgc2hlZXQuZ2V0Q29sdW1uKDMpLndpZHRoID0gTWF0aC5tYXgoLi4uc2NhbGFycy5tYXAoKHNjYWxhcikgPT4gc2NhbGFyLnVuaXRzLnRvU3RyaW5nKCkubGVuZ3RoKSwgJ1VuaXRzJy5sZW5ndGgpICogMS4yO1xufTtcblxuY29uc3QgZGZUb1NoZWV0ID0gKHNoZWV0OiBFeGNlbEpTLldvcmtzaGVldCwgZGY6IERHLkRhdGFGcmFtZSwgY29sdW1uOiBudW1iZXIgPSAwLCByb3c6IG51bWJlciA9IDApID0+IHtcbiAgZm9yIChsZXQgaT0gMDsgaSA8IGRmLmNvbHVtbnMubmFtZXMoKS5sZW5ndGg7IGkrKykge1xuICAgIHNoZWV0LmdldENlbGwoMSArIHJvdywgMSArIGkgKyBjb2x1bW4pLnZhbHVlID0gZGYuY29sdW1ucy5ieUluZGV4KGkpLm5hbWU7XG4gICAgc2hlZXQuZ2V0Q29sdW1uKDEgKyBpICsgY29sdW1uKS53aWR0aCA9IE1hdGgubWF4KFxuICAgICAgLi4uZGYuY29sdW1ucy5ieUluZGV4KGkpLmNhdGVnb3JpZXMubWFwKChjYXRlZ29yeSkgPT4gY2F0ZWdvcnkudG9TdHJpbmcoKS5sZW5ndGgpLFxuICAgICAgZGYuY29sdW1ucy5ieUluZGV4KGkpLm5hbWUubGVuZ3RoXG4gICAgKSAqIDEuMjtcbiAgfVxuICBmb3IgKGxldCBkZkNvbHVtbiA9IDA7IGRmQ29sdW1uIDwgZGYuY29sdW1ucy5sZW5ndGg7IGRmQ29sdW1uKyspIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRmLnJvd0NvdW50OyBpKyspXG4gICAgICBzaGVldC5nZXRDZWxsKGkgKyAyICsgcm93LCAxICsgY29sdW1uK2RmQ29sdW1uKS52YWx1ZSA9IGRmLmNvbHVtbnMuYnlJbmRleChkZkNvbHVtbikuZ2V0KGkpO1xuICB9XG59O1xuXG5jb25zdCBwbG90VG9TaGVldCA9IGFzeW5jIChleHBvcnRXYjogRXhjZWxKUy5Xb3JrYm9vaywgc2hlZXQ6IEV4Y2VsSlMuV29ya3NoZWV0LCBwbG90OiBIVE1MRWxlbWVudCwgY29sdW1uRm9ySW1hZ2U6IG51bWJlciwgcm93Rm9ySW1hZ2U6IG51bWJlciA9IDApID0+IHtcbiAgY29uc3QgY2FudmFzID0gYXdhaXQgaHRtbDJjYW52YXMocGxvdCBhcyBIVE1MRWxlbWVudCwge2xvZ2dpbmc6IGZhbHNlfSk7XG4gIGNvbnN0IGRhdGFVcmwgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcblxuICBjb25zdCBpbWFnZUlkID0gZXhwb3J0V2IuYWRkSW1hZ2Uoe1xuICAgIGJhc2U2NDogZGF0YVVybCxcbiAgICBleHRlbnNpb246ICdwbmcnLFxuICB9KTtcbiAgc2hlZXQuYWRkSW1hZ2UoaW1hZ2VJZCwge1xuICAgIHRsOiB7Y29sOiBjb2x1bW5Gb3JJbWFnZSwgcm93OiByb3dGb3JJbWFnZX0sXG4gICAgZXh0OiB7d2lkdGg6IGNhbnZhcy53aWR0aCwgaGVpZ2h0OiBjYW52YXMuaGVpZ2h0fSxcbiAgfSk7XG59O1xuIl19
564
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmljaC1mdW5jdGlvbi12aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmljaC1mdW5jdGlvbi12aWV3LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLDRCQUE0QjtBQUM1QixPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sV0FBVyxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEIsT0FBTyxDQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3pCLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3JELE9BQU8sK0JBQStCLENBQUM7QUFFdkMsTUFBTSxrQkFBa0IsR0FBNEI7SUFDbEQsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVM7SUFDakMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVE7SUFDL0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVE7SUFDaEMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVM7SUFDakMsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVk7SUFDdkMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU87SUFDOUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxD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QUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUU5QyxNQUFNLFlBQVksR0FBRyxDQUFDLElBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBRXBFLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRXJFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3JGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQzFGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ3pGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBRTlGLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUF1QixDQUFDO1lBQzdFLE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUF1QixDQUFDO1lBRS9FLFFBQVEsQ0FBQyxPQUFPLENBQUMs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Q0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDL0Y7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBRyxDQUFPLFFBQTBCLEVBQUUsS0FBd0IsRUFBRSxJQUFpQixFQUFFLGNBQXNCLEVBQUUsY0FBc0IsQ0FBQyxFQUFFLEVBQUU7SUFDckosTUFBTSxNQUFNLEdBQUcsTUFBTSxXQUFXLENBQUMsSUFBbUIsRUFBRSxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO0lBQ3hFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFOUMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxNQUFNLEVBQUUsT0FBTztRQUNmLFNBQVMsRUFBRSxLQUFLO0tBQ2pCLENBQUMsQ0FBQztJQUNILEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFO1FBQ3RCLEVBQUUsRUFBRSxFQUFDLEdBQUcsRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBQztRQUMzQyxHQUFHLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBQztLQUNsRCxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQge0Z1bmN0aW9uVmlld30gZnJvbSAnLi9mdW5jdGlvbi12aWV3JztcbmltcG9ydCBFeGNlbEpTIGZyb20gJ2V4Y2VsanMnO1xuaW1wb3J0IGh0bWwyY2FudmFzIGZyb20gJ2h0bWwyY2FudmFzJztcbmltcG9ydCB3dSBmcm9tICd3dSc7XG5pbXBvcnQgJCBmcm9tICdjYXNoLWRvbSc7XG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtVaVV0aWxzfSBmcm9tICcuL3NoYXJlZC1jb21wb25lbnRzL3VpLXV0aWxzJztcbmltcG9ydCAnLi4vY3NzL3JpY2gtZnVuY3Rpb24tdmlldy5jc3MnO1xuXG5jb25zdCB2aWV3ZXJUeXBlc01hcHBpbmc6IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9ID0ge1xuICBbJ2JhcmNoYXJ0J106IERHLlZJRVdFUi5CQVJfQ0hBUlQsXG4gIFsnYm94cGxvdCddOiBERy5WSUVXRVIuQk9YX1BMT1QsXG4gIFsnY2FsZW5kYXInXTogREcuVklFV0VSLkNBTEVOREFSLFxuICBbJ2NvcnJwbG90J106IERHLlZJRVdFUi5DT1JSX1BMT1QsXG4gIFsnZGVuc2l0eXBsb3QnXTogREcuVklFV0VSLkRFTlNJVFlfUExPVCxcbiAgWydmaWx0ZXJzJ106IERHLlZJRVdFUi5GSUxURVJTLFxuICBbJ2Zvcm0nXTogREcuVklFV0VSLkZPUk0sXG4gIFsnZ2xvYmUnXTogREcuVklFV0VSLkdMT0JFLFxuICBbJ2dvb2dsZW1hcCddOiBERy5WSUVXRVIuR09PR0xFX01BUCxcbiAgWydncmlkJ106IERHLlZJRVdFUi5HUklELFxuICBbJ2hlYXRtYXAnXTogREcuVklFV0VSLkhFQVRfTUFQLFxuICBbJ2hpc3RvZ3JhbSddOiBERy5WSUVXRVIuSElTVE9HUkFNLFxuICBbJ2xpbmVjaGFydCddOiBERy5WSUVXRVIuTElORV9DSEFSVCxcbiAgWydtYXJrdXAnXTogREcuVklFV0VSLk1BUktVUCxcbiAgWydtYXRyaXhwbG90J106IERHLlZJRVdFUi5NQVRSSVhfUExPVCxcbiAgWyduZXR3b3JrZGlhZ3JhbSddOiBERy5WSUVXRVIuTkVUV09SS19ESUFHUkFNLFxuICBbJ3BjcGxvdCddOiBERy5WSUVXRVIuUENfUExPVCxcbiAgWydwaWVjaGFydCddOiBERy5WSUVXRVIuUElFX0NIQVJULFxuICBbJ3NjYXR0ZXJwbG90J106IERHLlZJRVdFUi5TQ0FUVEVSX1BMT1QsXG4gIFsnc2NhdHRlcnBsb3QzZCddOiBERy5WSUVXRVIuU0NBVFRFUl9QTE9UXzNELFxuICBbJ3NoYXBlbWFwJ106IERHLlZJRVdFUi5TSEFQRV9NQVAsXG4gIFsnc3RhdGlzdGljcyddOiBERy5WSUVXRVIuU1RBVElTVElDUyxcbiAgWyd0aWxldmlld2VyJ106IERHLlZJRVdFUi5USUxFX1ZJRVdFUixcbiAgWyd0aW1lbGluZXMnXTogREcuVklFV0VSLlRJTUVMSU5FUyxcbiAgWyd0cmVlbWFwJ106IERHLlZJRVdFUi5UUkVFX01BUCxcbiAgWyd0cmVsbGlzcGxvdCddOiBERy5WSUVXRVIuVFJFTExJU19QTE9ULFxuICBbJ3dvcmRjbG91ZCddOiBERy5WSUVXRVIuV09SRF9DTE9VRCxcbn07XG5cbmNvbnN0IEZJTEVfSU5QVVRfVFlQRSA9ICdmaWxlJztcblxuZXhwb3J0IGNsYXNzIFJpY2hGdW5jdGlvblZpZXcgZXh0ZW5kcyBGdW5jdGlvblZpZXcge1xuICAvLyBlbWl0dGVkIHdoZW4gcnVuQnV0dG9uIGRpc2FiaWxpdHkgc2hvdWxkIGJlIGNoZWNrZWRcbiAgcHJpdmF0ZSBjaGVja0Rpc2FiaWxpdHkgPSBuZXcgU3ViamVjdCgpO1xuXG4gIC8vIHN0b3JlcyB0aGUgcnVubmluZyBzdGF0ZVxuICBwcml2YXRlIGlzUnVubmluZyA9IGZhbHNlO1xuXG4gIHN0YXRpYyBmcm9tRnVuY0NhbGwoXG4gICAgZnVuY0NhbGw6IERHLkZ1bmNDYWxsLFxuICAgIG9wdGlvbnM6IHtoaXN0b3J5RW5hYmxlZDogYm9vbGVhbiwgaXNUYWJiZWQ6IGJvb2xlYW59ID1cbiAgICB7aGlzdG9yeUVuYWJsZWQ6IHRydWUsIGlzVGFiYmVkOiBmYWxzZX1cbiAgKSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKGZ1bmNDYWxsLmZ1bmMubnFOYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGZ1bmNOYW1lOiBzdHJpbmcsXG4gICAgcHVibGljIG9wdGlvbnM6IHsgaGlzdG9yeUVuYWJsZWQ6IGJvb2xlYW4sIGlzVGFiYmVkOiBib29sZWFufSA9XG4gICAge2hpc3RvcnlFbmFibGVkOiB0cnVlLCBpc1RhYmJlZDogZmFsc2V9XG4gICkge1xuICAgIHN1cGVyKGZ1bmNOYW1lLCBvcHRpb25zKTtcblxuICAgIHRoaXMuYmFzZVBhdGggPSBgc2NyaXB0cy8ke3RoaXMuZnVuY0NhbGwuZnVuYy5pZH0vdmlld2A7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgb25BZnRlclJ1bihydW5GdW5jOiBERy5GdW5jQ2FsbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMudGFic0VsZW0ucm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgIHRoaXMudGFic0VsZW0ucGFuZXMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICB0YWIuaGVhZGVyLnN0eWxlLnJlbW92ZVByb3BlcnR5KCdkaXNwbGF5Jyk7XG4gICAgfSk7XG4gICAgY29uc3QgZmlyc3RPdXRwdXRUYWIgPSB0aGlzLnRhYnNFbGVtLnBhbmVzLmZpbmQoKHRhYikgPT4gdGFiLm5hbWUgIT09ICdJbnB1dCcpO1xuICAgIGlmIChmaXJzdE91dHB1dFRhYikgdGhpcy50YWJzRWxlbS5jdXJyZW50UGFuZSA9IGZpcnN0T3V0cHV0VGFiO1xuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgcHVibGljIGJ1aWxkSU8oKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IGlucHV0QmxvY2sgPSB0aGlzLmJ1aWxkSW5wdXRCbG9jaygpO1xuXG4gICAgdWkudG9vbHMuaGFuZGxlUmVzaXplKGlucHV0QmxvY2ssICh3aWR0aCkgPT4ge1xuICAgICAgaWYgKHdpZHRoIDwgMzUwKVxuICAgICAgICAkKGlucHV0QmxvY2suZmlyc3RDaGlsZCEpLmFkZENsYXNzKCd1aS1mb3JtLWNvbmRlbnNlZCcpO1xuICAgICAgZWxzZVxuICAgICAgICAkKGlucHV0QmxvY2suZmlyc3RDaGlsZCEpLnJlbW92ZUNsYXNzKCd1aS1mb3JtLWNvbmRlbnNlZCcpO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgb3V0cHV0QmxvY2sgPSB0aGlzLmJ1aWxkT3V0cHV0QmxvY2soKTtcbiAgICBvdXRwdXRCbG9jay5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgb3V0cHV0QmxvY2suc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgdGhpcy50YWJzRWxlbS5yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICBpZiAoISF0aGlzLnRhYnNFbGVtLmdldFBhbmUoJ0lucHV0JykpIHtcbiAgICAgIHRoaXMudGFic0VsZW0ucGFuZXMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICAgIHRhYi5oZWFkZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IG91dCA9IHVpLnNwbGl0SChbaW5wdXRCbG9jaywgdWkucGFuZWwoW291dHB1dEJsb2NrXSwge3N0eWxlOiB7J3BhZGRpbmctdG9wJzogJzBweCd9fSldLCBudWxsLCB0cnVlKTtcbiAgICBvdXQuc3R5bGUucGFkZGluZyA9ICcwIDEycHgnO1xuXG4gICAgaW5wdXRCbG9jay5wYXJlbnRFbGVtZW50IS5zdHlsZS5tYXhXaWR0aCA9ICc0NTBweCc7XG5cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgcHVibGljIGJ1aWxkSW5wdXRCbG9jaygpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgZm9ybURpdiA9IHRoaXMucmVuZGVyUnVuU2VjdGlvbigpO1xuXG4gICAgcmV0dXJuIGZvcm1EaXY7XG4gIH1cblxuICBwcml2YXRlIHRhYnNFbGVtID0gdWkudGFiQ29udHJvbCgpO1xuXG4gIHB1YmxpYyBidWlsZE91dHB1dEJsb2NrKCk6IEhUTUxFbGVtZW50IHtcbiAgICB0aGlzLnRhYnNFbGVtLnJvb3Quc3R5bGUud2lkdGggPSAnMTAwJSc7XG5cbiAgICB0aGlzLnRhYnNMYWJlbHMuZm9yRWFjaCgodGFiTGFiZWwpID0+IHtcbiAgICAgIGNvbnN0IHRhYkRmUHJvcHMgPSB0aGlzLmNhdGVnb3J5VG9QYXJhbU1hcFt0YWJMYWJlbF0uZmlsdGVyKChwKSA9PiBwLnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgICAgIGNvbnN0IHRhYlNjYWxhclByb3BzID0gdGhpcy5jYXRlZ29yeVRvUGFyYW1NYXBbdGFiTGFiZWxdLmZpbHRlcigocCkgPT4gcC5wcm9wZXJ0eVR5cGUgIT09IERHLlRZUEUuREFUQV9GUkFNRSk7XG5cbiAgICAgIC8vIEVYUExBSU46IHVuZGVmaW5lZCBhbmQgSlNPTi5wYXJzZVxuICAgICAgY29uc3QgcGFyc2VkVGFiRGZQcm9wcyA9IHRhYkRmUHJvcHMubWFwKChkZlByb3ApID0+IChkZlByb3Aub3B0aW9uc1sndmlld2VyJ10gIT09IHVuZGVmaW5lZCkgP1xuICAgICAgICBKU09OLnBhcnNlKGRmUHJvcC5vcHRpb25zWyd2aWV3ZXInXSwgKF8sIHYpID0+IHYgPT09ICd0cnVlJyB8fCB2ID09PSAnZmFsc2UnID8gSlNPTi5wYXJzZSh2KTogdik6XG4gICAgICAgIFtdKTtcblxuICAgICAgY29uc3QgZGZCbG9ja3MgPSB0YWJEZlByb3BzLm1hcCgoZGZQcm9wLCBkZkluZGV4KSA9PiB7XG4gICAgICAgIGxldCBmdWxsQmxvY2tXaWR0aCA9IDA7XG4gICAgICAgIHBhcnNlZFRhYkRmUHJvcHNbZGZJbmRleF0uZm9yRWFjaCgoXzogYW55LCB2aWV3ZXJJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3QgYmxvY2tTaXplID0gcGFyc2VkVGFiRGZQcm9wc1tkZkluZGV4XVt2aWV3ZXJJbmRleF1bJ2Jsb2NrJ107XG5cbiAgICAgICAgICBmdWxsQmxvY2tXaWR0aCArPSBibG9ja1NpemUgPyBwYXJzZUludChibG9ja1NpemUpOiAwO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB2aWV3ZXJzOiBQcm9taXNlPERHLlZpZXdlcltdPiA9IFByb21pc2UuYWxsKHBhcnNlZFRhYkRmUHJvcHNbZGZJbmRleF0ubWFwKGFzeW5jICh2aWV3ZXJEZXNjOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZTogREcuRGF0YUZyYW1lID0gdGhpcy5mdW5jQ2FsbD8ub3V0cHV0c1tkZlByb3AubmFtZV0/LnZhbHVlID8/IHRoaXMuZnVuY0NhbGwhLmlucHV0UGFyYW1zW2RmUHJvcC5uYW1lXT8udmFsdWUgPz8gZ3Jvay5kYXRhLmRlbW8uZGVtb2coMSk7XG5cbiAgICAgICAgICBjb25zdCB2aWV3ZXIgPSB2aWV3ZXJUeXBlc01hcHBpbmdbdmlld2VyRGVzY1sndHlwZSddXSA/IERHLlZpZXdlci5mcm9tVHlwZSh2aWV3ZXJUeXBlc01hcHBpbmdbdmlld2VyRGVzY1sndHlwZSddXSwgaW5pdGlhbFZhbHVlKTogYXdhaXQgaW5pdGlhbFZhbHVlLnBsb3QuZnJvbVR5cGUodmlld2VyRGVzY1sndHlwZSddKSBhcyBERy5WaWV3ZXI7XG4gICAgICAgICAgdmlld2VyLnNldE9wdGlvbnModmlld2VyRGVzYyk7XG5cbiAgICAgICAgICBpZiAodGhpcy5kZlRvVmlld2VyTWFwcGluZ1tkZlByb3AubmFtZV0pIHRoaXMuZGZUb1ZpZXdlck1hcHBpbmdbZGZQcm9wLm5hbWVdLnB1c2godmlld2VyKTsgZWxzZSB0aGlzLmRmVG9WaWV3ZXJNYXBwaW5nW2RmUHJvcC5uYW1lXSA9IFt2aWV3ZXJdO1xuXG4gICAgICAgICAgcmV0dXJuIHZpZXdlcjtcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHZpZXdlcnMudGhlbigobG9hZGVkVmlld2VycykgPT4ge1xuICAgICAgICAgIGNvbnN0IHN1YnNjcmliZU9uRmNDaGFuZ2VzID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFBhcmFtOiBERy5GdW5jQ2FsbFBhcmFtID0gdGhpcy5mdW5jQ2FsbCEub3V0cHV0UGFyYW1zW2RmUHJvcC5uYW1lXSA/PyB0aGlzLmZ1bmNDYWxsIS5pbnB1dFBhcmFtc1tkZlByb3AubmFtZV07XG5cbiAgICAgICAgICAgIGN1cnJlbnRQYXJhbS5vbkNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgbG9hZGVkVmlld2Vycy5mb3JFYWNoKGFzeW5jICh2aWV3ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnZhbHVlcyh2aWV3ZXJUeXBlc01hcHBpbmcpLmluY2x1ZGVzKHZpZXdlci50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgdmlld2VyLmRhdGFGcmFtZSA9IGN1cnJlbnRQYXJhbS52YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gRVhQTEFJTiBXSFlcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZpZXdlciA9IGF3YWl0IGN1cnJlbnRQYXJhbS52YWx1ZS5wbG90LmZyb21UeXBlKHZpZXdlci50eXBlKSBhcyBERy5WaWV3ZXI7XG4gICAgICAgICAgICAgICAgICB2aWV3ZXIucm9vdC5yZXBsYWNlV2l0aChuZXdWaWV3ZXIucm9vdCk7XG4gICAgICAgICAgICAgICAgICB2aWV3ZXIgPSBuZXdWaWV3ZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBzdWJzY3JpYmVPbkZjQ2hhbmdlcygpO1xuICAgICAgICAgIHRoaXMuZnVuY0NhbGxSZXBsYWNlZC5zdWJzY3JpYmUoc3Vic2NyaWJlT25GY0NoYW5nZXMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBkZkJsb2NrVGl0bGU6IHN0cmluZyA9IGRmUHJvcC5vcHRpb25zWydjYXB0aW9uJ10gPz8gZGZQcm9wLm5hbWU7XG5cbiAgICAgICAgY29uc3QgZGZCbG9jayA9IHVpLndhaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxvYWRlZFZpZXdlcnMgPSBhd2FpdCB2aWV3ZXJzO1xuICAgICAgICAgIHJldHVybiB1aS5kaXZIKFxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgIGxvYWRlZFZpZXdlcnMubWFwKCh2aWV3ZXIpID0+IHZpZXdlci5yb290LCB7c3R5bGU6IHsnZmxleC13cmFwJzogJ3dyYXAnfX0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRhYkxhYmVsID09PSAnSW5wdXQnKSB7XG4gICAgICAgICAgY29uc3Qgc3Vic2NyaWJlT25GY0NoYW5nZXMgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50UGFyYW06IERHLkZ1bmNDYWxsUGFyYW0gPSB0aGlzLmZ1bmNDYWxsIS5vdXRwdXRQYXJhbXNbZGZQcm9wLm5hbWVdID8/IHRoaXMuZnVuY0NhbGwhLmlucHV0UGFyYW1zW2RmUHJvcC5uYW1lXTtcblxuICAgICAgICAgICAgY3VycmVudFBhcmFtLm9uQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnRhYnNFbGVtLnJvb3Quc3R5bGUucmVtb3ZlUHJvcGVydHkoJ2Rpc3BsYXknKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBzdWJzY3JpYmVPbkZjQ2hhbmdlcygpO1xuICAgICAgICAgIHRoaXMuZnVuY0NhbGxSZXBsYWNlZC5zdWJzY3JpYmUoc3Vic2NyaWJlT25GY0NoYW5nZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVpLmRpdlYoW1xuICAgICAgICAgIC8vIFJlbW92aW5nIHRpdGxlIG1hcmdpbiBvbiB0b3Agb2YgYmxvY2sgdGl0bGVzXG4gICAgICAgICAgdWkuaDIoZGZCbG9ja1RpdGxlLCB7Li4uKGRmSW5kZXggPiAwKSA/IHtzdHlsZTogeydtYXJnaW4tdG9wJzogJzBweCd9fSA6IHt9fSksXG4gICAgICAgICAgZGZCbG9ja1xuICAgICAgICBdLCB7c3R5bGU6IHsuLi4oZnVsbEJsb2NrV2lkdGggPiAwKSA/IHsnd2lkdGgnOiBgJHtmdWxsQmxvY2tXaWR0aH0lYH06IHsnd2lkdGgnOiBgMTAwJWB9fX0pO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGdlbmVyYXRlU2NhbGFyc1RhYmxlID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IERHLkh0bWxUYWJsZS5jcmVhdGUoXG4gICAgICAgICAgdGFiU2NhbGFyUHJvcHMsXG4gICAgICAgICAgKHNjYWxhclByb3A6IERHLlByb3BlcnR5KSA9PiBbc2NhbGFyUHJvcC5uYW1lLCB0aGlzLmZ1bmNDYWxsPy5vdXRwdXRzW3NjYWxhclByb3AubmFtZV0sIHNjYWxhclByb3Aub3B0aW9uc1sndW5pdHMnXV1cbiAgICAgICAgKS5yb290O1xuICAgICAgICB0YWJsZS5zdHlsZS5tYXhXaWR0aCA9ICc0MDBweCc7XG4gICAgICAgIHJldHVybiB0YWJsZTtcbiAgICAgIH07XG5cbiAgICAgIGxldCBzY2FsYXJzVGFibGUgPSBnZW5lcmF0ZVNjYWxhcnNUYWJsZSgpO1xuXG4gICAgICB0YWJTY2FsYXJQcm9wcy5mb3JFYWNoKCh0YWJTY2FsYXJQcm9wKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmliZU9uRmNDaGFuZ2VzID0gKCkgPT4ge1xuICAgICAgICAgICh0aGlzLmZ1bmNDYWxsIS5vdXRwdXRQYXJhbXNbdGFiU2NhbGFyUHJvcC5uYW1lXSBhcyBERy5GdW5jQ2FsbFBhcmFtKS5vbkNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NjYWxhcnNUYWJsZSA9IGdlbmVyYXRlU2NhbGFyc1RhYmxlKCk7XG4gICAgICAgICAgICBzY2FsYXJzVGFibGUucmVwbGFjZVdpdGgobmV3U2NhbGFyc1RhYmxlKTtcbiAgICAgICAgICAgIHNjYWxhcnNUYWJsZSA9IG5ld1NjYWxhcnNUYWJsZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICBzdWJzY3JpYmVPbkZjQ2hhbmdlcygpO1xuICAgICAgICB0aGlzLmZ1bmNDYWxsUmVwbGFjZWQuc3Vic2NyaWJlKHN1YnNjcmliZU9uRmNDaGFuZ2VzKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBkZlNlY3Rpb25zID0gW10gYXMgSFRNTEVsZW1lbnRbXTtcbiAgICAgIGxldCBjdXJyZW50V2lkdGggPSAwO1xuICAgICAgbGV0IGN1cnJlbnRTZWN0aW9uID0gdWkuZGl2SChbXSwge3N0eWxlOiB7J21hcmdpbi1ib3R0b20nOiAnMjVweCd9fSk7IC8vIEFkZGluZyBzbWFsbCBtYXJnaW4gYmV0d2VlbiBzZWN0aW9uc1xuICAgICAgZGZCbG9ja3MuZm9yRWFjaCgoZGZCbG9jaywgZGZJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBibG9ja1dpZHRoID0gcGFyc2VJbnQoZGZCbG9jay5zdHlsZS53aWR0aCk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRXaWR0aCArIGJsb2NrV2lkdGggPT09IDEwMCkge1xuICAgICAgICAgIGN1cnJlbnRTZWN0aW9uLmFwcGVuZChkZkJsb2NrKTtcbiAgICAgICAgICBkZlNlY3Rpb25zLnB1c2goY3VycmVudFNlY3Rpb24pO1xuICAgICAgICAgIGN1cnJlbnRTZWN0aW9uID0gdWkuZGl2SChbXSk7XG4gICAgICAgICAgY3VycmVudFdpZHRoID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50V2lkdGggKyBibG9ja1dpZHRoIDwgMTAwKSB7XG4gICAgICAgICAgY3VycmVudFNlY3Rpb24uYXBwZW5kKGRmQmxvY2spO1xuICAgICAgICAgIGN1cnJlbnRXaWR0aCArPSBibG9ja1dpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRmU2VjdGlvbnMucHVzaChjdXJyZW50U2VjdGlvbik7XG4gICAgICAgICAgY3VycmVudFNlY3Rpb24gPSB1aS5kaXZIKFtdKTtcbiAgICAgICAgICBjdXJyZW50U2VjdGlvbi5hcHBlbmQoZGZCbG9jayk7XG4gICAgICAgICAgY3VycmVudFdpZHRoID0gYmxvY2tXaWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZkluZGV4ID09PSBkZkJsb2Nrcy5sZW5ndGggLSAxKVxuICAgICAgICAgIGRmU2VjdGlvbnMucHVzaChjdXJyZW50U2VjdGlvbik7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy50YWJzRWxlbS5hZGRQYW5lKHRhYkxhYmVsLCAoKSA9PiB7XG4gICAgICAgIHJldHVybiB1aS5kaXZWKFsuLi5kZlNlY3Rpb25zLCAuLi50YWJTY2FsYXJQcm9wcy5sZW5ndGggPyBbdWkuaDIoJ1NjYWxhciB2YWx1ZXMnKV06IFtdLCBzY2FsYXJzVGFibGVdKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgb3V0cHV0QmxvY2sgPSB1aS5ib3goKTtcbiAgICBvdXRwdXRCbG9jay5hcHBlbmQodGhpcy50YWJzRWxlbS5yb290KTtcblxuICAgIHJldHVybiBvdXRwdXRCbG9jaztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvbkFmdGVyTG9hZFJ1bihsb2FkZWRSdW46IERHLkZ1bmNDYWxsKSB7XG4gICAgd3UodGhpcy5mdW5jQ2FsbCEub3V0cHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSkuZm9yRWFjaCgob3V0KSA9PiB7XG4gICAgICB0aGlzLmZ1bmNDYWxsIS5zZXRQYXJhbVZhbHVlKG91dC5uYW1lLCBsb2FkZWRSdW4ub3V0cHV0c1tvdXQubmFtZV0pO1xuICAgIH0pO1xuXG4gICAgd3UodGhpcy5mdW5jQ2FsbCEuaW5wdXRQYXJhbXMudmFsdWVzKCkgYXMgREcuRnVuY0NhbGxQYXJhbVtdKS5mb3JFYWNoKChpbnApID0+IHtcbiAgICAgIHRoaXMuZnVuY0NhbGwhLnNldFBhcmFtVmFsdWUoaW5wLm5hbWUsIGxvYWRlZFJ1bi5pbnB1dHNbaW5wLm5hbWVdKTtcbiAgICB9KTtcblxuICAgIHRoaXMudGFic0VsZW0ucm9vdC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnZGlzcGxheScpO1xuICAgIHRoaXMudGFic0VsZW0ucGFuZXMuZm9yRWFjaCgodGFiKSA9PiB7XG4gICAgICB0YWIuaGVhZGVyLnN0eWxlLnJlbW92ZVByb3BlcnR5KCdkaXNwbGF5Jyk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGRmVG9WaWV3ZXJNYXBwaW5nOiB7W2tleTogc3RyaW5nXTogREcuVmlld2VyW119ID0ge307XG5cbiAgcHJvdGVjdGVkIGdldCBkZlBhcmFtcygpIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4udGhpcy5mdW5jIS5pbnB1dHMuZmlsdGVyKChwKSA9PiBwLnByb3BlcnR5VHlwZSA9PSBERy5UWVBFLkRBVEFfRlJBTUUpLFxuICAgICAgLi4udGhpcy5mdW5jIS5vdXRwdXRzLmZpbHRlcigocCkgPT4gcC5wcm9wZXJ0eVR5cGUgPT0gREcuVFlQRS5EQVRBX0ZSQU1FKSxcbiAgICBdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBkZk91dHB1dFBhcmFtcygpIHtcbiAgICByZXR1cm4gdGhpcy5mdW5jIS5vdXRwdXRzLmZpbHRlcigocCkgPT4gcC5wcm9wZXJ0eVR5cGUgPT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgaXNJbnB1dFBhbmVsUmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnVuYz8uaW5wdXRzLnNvbWUoKHApID0+IHAucHJvcGVydHlUeXBlID09IERHLlRZUEUuREFUQV9GUkFNRSAmJiBwLm9wdGlvbnNbJ3ZpZXdlciddICE9IG51bGwpIHx8IGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBvdXRVbmlxdWVQYXJhbUNhdGVnb3JpZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLm5ldyBTZXQodGhpcy5mdW5jIS5vdXRwdXRzLm1hcCgocCkgPT4gcC5jYXRlZ29yeSkpIC8vIGdldCBhbGwgb3V0cHV0IHBhcmFtcycgY2F0ZWdvcmllc1xuICAgIF07IC8vIGtlZXAgb25seSB1bmlxdWUgb2YgdGhlbVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldCBvdXRwdXRUYWJzTGFiZWxzKCkge1xuICAgIHJldHVybiBbXG4gICAgICAuLi50aGlzLm91dFVuaXF1ZVBhcmFtQ2F0ZWdvcmllcyxcbiAgICAgIC4uLnRoaXMub3V0VW5pcXVlUGFyYW1DYXRlZ29yaWVzLmZpbmQoKHZhbCkgPT4gdmFsID09PSAnTWlzYycgfHwgdmFsID09PSAnT3V0cHV0JykgPyBbJ091dHB1dCddIDogW10sIC8vIGlmIG5vIGNhdGVnb3JpZXMgYXJlIHN0YXRlZCwgdGhlIGRlZmF1bHQgY2F0ZWdvcnkgaXMgYWRkZWRcbiAgICBdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB0YWJzTGFiZWxzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmNhdGVnb3J5VG9QYXJhbU1hcCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGNhdGVnb3J5VG9QYXJhbU1hcCgpIHtcbiAgICBjb25zdCBtYXAgPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBERy5Qcm9wZXJ0eVtdPjtcblxuICAgIGlmICh0aGlzLmlzSW5wdXRQYW5lbFJlcXVpcmVkKSB7XG4gICAgICB0aGlzLmZ1bmMhLmlucHV0cy5cbiAgICAgICAgZmlsdGVyKChwKSA9PiBwLnByb3BlcnR5VHlwZSA9PSBERy5UWVBFLkRBVEFfRlJBTUUgJiYgcC5vcHRpb25zWyd2aWV3ZXInXSAhPSBudWxsKS5cbiAgICAgICAgZm9yRWFjaCgocCkgPT4gbWFwWydJbnB1dCddID8gbWFwWydJbnB1dCddLnB1c2gocCk6IG1hcFsnSW5wdXQnXSA9IFtwXSk7XG4gICAgfVxuXG4gICAgdGhpcy5mdW5jIS5vdXRwdXRzLmZvckVhY2goKHApID0+IHtcbiAgICAgIGNvbnN0IGNhdGVnb3J5ID0gcC5jYXRlZ29yeSA9PT0gJ01pc2MnID8gJ091dHB1dCc6IHAuY2F0ZWdvcnk7XG5cbiAgICAgIGlmIChtYXBbY2F0ZWdvcnldKVxuICAgICAgICBtYXBbY2F0ZWdvcnldLnB1c2gocCk7XG4gICAgICBlbHNlXG4gICAgICAgIG1hcFtjYXRlZ29yeV0gPSBbcF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWFwO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuZnVuY0NhbGwpIHRocm93IG5ldyBFcnJvcignVGhlIGNvcnJlc3BvZGluZyBmdW5jdGlvbiBpcyBub3Qgc3BlY2lmaWVkJyk7XG5cbiAgICBhd2FpdCB0aGlzLm9uQmVmb3JlUnVuKHRoaXMuZnVuY0NhbGwpO1xuICAgIGNvbnN0IHBpID0gREcuVGFza0JhclByb2dyZXNzSW5kaWNhdG9yLmNyZWF0ZSgnQ2FsY3VsYXRpbmcuLi4nKTtcbiAgICB0aGlzLmZ1bmNDYWxsLm5ld0lkKCk7XG4gICAgYXdhaXQgdGhpcy5mdW5jQ2FsbC5jYWxsKCk7IC8vIG11dGF0ZXMgdGhlIGZ1bmNDYWxsIGZpZWxkXG4gICAgcGkuY2xvc2UoKTtcbiAgICBhd2FpdCB0aGlzLm9uQWZ0ZXJSdW4odGhpcy5mdW5jQ2FsbCk7XG4gICAgdGhpcy5sYXN0Q2FsbCA9IHRoaXMub3B0aW9ucy5pc1RhYmJlZCA/IHRoaXMuZnVuY0NhbGwuY2xvbmUoKSA6IGF3YWl0IHRoaXMuc2F2ZVJ1bih0aGlzLmZ1bmNDYWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZG9SdW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pc1J1bm5pbmcgPSB0cnVlO1xuICAgIHRoaXMuY2hlY2tEaXNhYmlsaXR5Lm5leHQoKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5ydW4oKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGdyb2suc2hlbGwuZXJyb3IoZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuaXNSdW5uaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmNoZWNrRGlzYWJpbGl0eS5uZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJSdW5TZWN0aW9uKCk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBydW5CdXR0b24gPSB1aS5iaWdCdXR0b24oJ1J1bicsIGFzeW5jICgpID0+IGF3YWl0IHRoaXMuZG9SdW4oKSk7XG4gICAgLy8gUkVQTEFDRSBCWSBUWVBFIEdVQVJEXG4gICAgY29uc3QgaXNGdW5jU2NyaXB0ID0gKCkgPT4ge1xuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICByZXR1cm4gISF0aGlzLmZ1bmMuc2NyaXB0O1xuICAgIH07XG4gICAgLy8gVE8gRE86IG1vdmUgYnV0dG9uIHNvbWV3aGVyZVxuICAgIGNvbnN0IG9wZW5TY3JpcHRCdG4gPSB1aS5idXR0b24oJ09wZW4gc2NyaXB0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgd2luZG93Lm9wZW4oYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vc2NyaXB0LyR7KHRoaXMuZnVuYyBhcyBERy5TY3JpcHQpLmlkfWAsICdfYmxhbmsnKTtcbiAgICB9KTtcbiAgICAvLyBjb25zdCBidXR0b25XcmFwcGVyID0gdWkuZGl2KFsuLi50aGlzLm9wdGlvbnMuaXNUYWJiZWQgJiYgaXNGdW5jU2NyaXB0KCkgPyBbb3BlblNjcmlwdEJ0bl06IFtdLCBydW5CdXR0b25dKTtcbiAgICBjb25zdCBidXR0b25XcmFwcGVyID0gdWkuZGl2KFtydW5CdXR0b25dKTtcbiAgICB1aS50b29sdGlwLmJpbmQoYnV0dG9uV3JhcHBlciwgKCkgPT4gcnVuQnV0dG9uLmRpc2FibGVkID8gKHRoaXMuaXNSdW5uaW5nID8gJ0NvbXB1dGF0aW9ucyBhcmUgaW4gcHJvZ3Jlc3MnIDogJ1NvbWUgaW5wdXRzIGFyZSBpbnZhbGlkJykgOiAnJyk7XG5cbiAgICB0aGlzLmNoZWNrRGlzYWJpbGl0eS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3QgaXNWYWxpZCA9ICh3dSh0aGlzLmZ1bmNDYWxsIS5pbnB1dHMudmFsdWVzKCkpLmV2ZXJ5KCh2KSA9PiB2ICE9PSBudWxsICYmIHYgIT09IHVuZGVmaW5lZCkpICYmICF0aGlzLmlzUnVubmluZztcbiAgICAgIHJ1bkJ1dHRvbi5kaXNhYmxlZCA9ICFpc1ZhbGlkO1xuICAgIH0pO1xuXG4gICAgY29uc3QgaW5wdXRzID0gdWkuZGl2VihbXSwgJ3VpLWZvcm0nKTtcbiAgICBsZXQgcHJldkNhdGVnb3J5ID0gJ01pc2MnO1xuICAgIHd1KHRoaXMuZnVuY0NhbGwhLmlucHV0UGFyYW1zLnZhbHVlcygpIGFzIERHLkZ1bmNDYWxsUGFyYW1bXSlcbiAgICAgIC5maWx0ZXIoKHZhbCkgPT4gISF2YWwpXG4gICAgICAuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3AgPSB2YWwucHJvcGVydHk7XG4gICAgICAgIGlmIChwcm9wLnByb3BlcnR5VHlwZS50b1N0cmluZygpID09PSBGSUxFX0lOUFVUX1RZUEUpIHtcbiAgICAgICAgICBjb25zdCB0ID0gVWlVdGlscy5maWxlSW5wdXQocHJvcC5jYXB0aW9uID8/IHByb3AubmFtZSwgbnVsbCwgKGZpbGU6IEZpbGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZnVuY0NhbGwhLmlucHV0c1twcm9wLm5hbWVdID0gZmlsZTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tEaXNhYmlsaXR5Lm5leHQoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAocHJvcC5jYXRlZ29yeSAhPT0gcHJldkNhdGVnb3J5KVxuICAgICAgICAgICAgaW5wdXRzLmFwcGVuZCh1aS5oMihwcm9wLmNhdGVnb3J5KSk7XG5cbiAgICAgICAgICB0aGlzLmNoZWNrRGlzYWJpbGl0eS5uZXh0KCk7XG4gICAgICAgICAgaW5wdXRzLmFwcGVuZCh0LnJvb3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCB0ID0gcHJvcC5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSA/XG4gICAgICAgICAgICB1aS50YWJsZUlucHV0KHByb3AuY2FwdGlvbiA/PyBwcm9wLm5hbWUsIG51bGwsIGdyb2suc2hlbGwudGFibGVzKTpcbiAgICAgICAgICAgIHVpLmlucHV0LmZvclByb3BlcnR5KHByb3ApO1xuXG4gICAgICAgICAgdC5pbnB1dC5vbmtleWRvd24gPSBhc3luYyAoZXYpID0+IHtcbiAgICAgICAgICAgIGlmIChldi5rZXkgPT0gJ0VudGVyJylcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kb1J1bigpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0LmNhcHRpb25MYWJlbC5maXJzdENoaWxkIS5yZXBsYWNlV2l0aCh1aS5zcGFuKFtwcm9wLmNhcHRpb24gPz8gcHJvcC5uYW1lXSkpO1xuICAgICAgICAgIGlmIChwcm9wLm9wdGlvbnNbJ3VuaXRzJ10pIHQuYWRkUG9zdGZpeChwcm9wLm9wdGlvbnNbJ3VuaXRzJ10pO1xuXG4gICAgICAgICAgY29uc3Qgc3Vic2NyaWJlT25GY0NoYW5nZXMgPSAoKSA9PiB7XG4gICAgICAgICAgICB0LnZhbHVlID0gdGhpcy5mdW5jQ2FsbCEuaW5wdXRzW3ZhbC5uYW1lXSA/PyBwcm9wLmRlZmF1bHRWYWx1ZSA/PyBudWxsO1xuICAgICAgICAgICAgdGhpcy5mdW5jQ2FsbCEuaW5wdXRzW3ZhbC5uYW1lXSA9IHRoaXMuZnVuY0NhbGwhLmlucHV0c1t2YWwubmFtZV0gPz8gcHJvcC5kZWZhdWx0VmFsdWUgPz8gbnVsbDtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgc3Vic2NyaWJlT25GY0NoYW5nZXMoKTtcbiAgICAgICAgICB0aGlzLmZ1bmNDYWxsUmVwbGFjZWQuc3Vic2NyaWJlKHN1YnNjcmliZU9uRmNDaGFuZ2VzKTtcblxuICAgICAgICAgIHQub25DaGFuZ2VkKCgpID0+IHtcbiAgICAgICAgICAgIC8vIFJlc29sdmluZyBjYXNlIG9mIHByb3BlcnR5VHlwZSA9IERBVEFGUkFNRVxuICAgICAgICAgICAgaWYgKCEhdC5wcm9wZXJ0eSkgcmV0dXJuO1xuXG4gICAgICAgICAgICB0aGlzLmZ1bmNDYWxsIS5pbnB1dHNbdmFsLm5hbWVdID0gdC52YWx1ZTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHQub25JbnB1dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZ1bmNDYWxsIS5pbnB1dHNbdmFsLm5hbWVdID0gdC52YWx1ZTtcbiAgICAgICAgICAgIGlmICh0LnZhbHVlID09PSBudWxsKSBzZXRUaW1lb3V0KCgpID0+IHQuaW5wdXQuY2xhc3NMaXN0LmFkZCgnZDQtaW52YWxpZCcpLCAxMDApOyBlbHNlIHQuaW5wdXQuY2xhc3NMaXN0LnJlbW92ZSgnZDQtaW52YWxpZCcpOyA7XG5cbiAgICAgICAgICAgIHRoaXMuY2hlY2tEaXNhYmlsaXR5Lm5leHQoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHZhbC5vbkNoYW5nZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5mdW5jQ2FsbCEuaW5wdXRzW3ZhbC5uYW1lXTtcblxuICAgICAgICAgICAgaWYgKHZhbC5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSkge1xuICAgICAgICAgICAgICAvLyBERUFMSU5HIFdJVEggQlVHOiBodHRwczovL3JlZGRhdGEuYXRsYXNzaWFuLm5ldC9icm93c2UvR1JPSy0xMjIyM1xuICAgICAgICAgICAgICBjb25zdCBuZXdUYWJsZUlucHV0ID0gdWkudGFibGVJbnB1dChwcm9wLmNhcHRpb24gPz8gcHJvcC5uYW1lLCBuZXdWYWx1ZSwgWy4uLmdyb2suc2hlbGwudGFibGVzLCBuZXdWYWx1ZV0pO1xuICAgICAgICAgICAgICB0LnJvb3QucmVwbGFjZVdpdGgobmV3VGFibGVJbnB1dC5yb290KTtcbiAgICAgICAgICAgICAgdCA9IG5ld1RhYmxlSW5wdXQ7XG5cbiAgICAgICAgICAgICAgdC5vbklucHV0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZ1bmNDYWxsIS5pbnB1dHNbdmFsLm5hbWVdID0gdC52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodC52YWx1ZSA9PT0gbnVsbCkgc2V0VGltZW91dCgoKSA9PiB0LmlucHV0LmNsYXNzTGlzdC5hZGQoJ2Q0LWludmFsaWQnKSwgMTAwKTsgZWxzZSB0LmlucHV0LmNsYXNzTGlzdC5yZW1vdmUoJ2Q0LWludmFsaWQnKTsgO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0Rpc2FiaWxpdHkubmV4dCgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHQubm90aWZ5ID0gZmFsc2U7XG4gICAgICAgICAgICAgIHQudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgICAgdC5ub3RpZnkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNoZWNrRGlzYWJpbGl0eS5uZXh0KCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAocHJvcC5jYXRlZ29yeSAhPT0gcHJldkNhdGVnb3J5KVxuICAgICAgICAgICAgaW5wdXRzLmFwcGVuZCh1aS5oMihwcm9wLmNhdGVnb3J5KSk7XG5cbiAgICAgICAgICBpZiAodC52YWx1ZSA9PT0gbnVsbCkgcnVuQnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICBpbnB1dHMuYXBwZW5kKHQucm9vdCk7XG4gICAgICAgIH1cbiAgICAgICAgcHJldkNhdGVnb3J5ID0gcHJvcC5jYXRlZ29yeTtcbiAgICAgIH0pO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBidXR0b25zID0gdWkuYnV0dG9uc0lucHV0KFtidXR0b25XcmFwcGVyXSk7XG4gICAgaW5wdXRzLmFwcGVuZChidXR0b25zKTtcbiAgICBpbnB1dHMuY2xhc3NMaXN0LnJlbW92ZSgndWktcGFuZWwnKTtcbiAgICBpbnB1dHMuc3R5bGUucGFkZGluZ1RvcCA9ICcwcHgnO1xuICAgIGlucHV0cy5zdHlsZS5wYWRkaW5nTGVmdCA9ICcwcHgnO1xuXG4gICAgcmV0dXJuIHVpLmRpdihbaW5wdXRzXSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVmYXVsdEV4cG9ydCA9IGFzeW5jIChmb3JtYXQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGxhc3RDYWxsID0gdGhpcy5sYXN0Q2FsbDtcbiAgICBpZiAoIWxhc3RDYWxsKSB0aHJvdyBuZXcgRXJyb3IoYEZ1bmN0aW9uIHdhcyBub3QgY2FsbGVkYCk7XG5cbiAgICBpZiAoIXRoaXMuZXhwb3J0Q29uZmlnIS5zdXBwb3J0ZWRGb3JtYXRzLmluY2x1ZGVzKGZvcm1hdCkpIHRocm93IG5ldyBFcnJvcihgRm9ybWF0IFwiJHtmb3JtYXR9XCIgaXMgbm90IHN1cHBvcnRlZC5gKTtcblxuICAgIGlmICghdGhpcy5mdW5jKSB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBjb3JyZXNwb2RpbmcgZnVuY3Rpb24gaXMgbm90IHNwZWNpZmllZCcpO1xuXG4gICAgY29uc3QgQkxPQl9UWVBFID0gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O2NoYXJzZXQ9VVRGLTgnO1xuICAgIGNvbnN0IGV4cG9ydFdvcmtib29rID0gbmV3IEV4Y2VsSlMuV29ya2Jvb2soKTtcblxuICAgIGNvbnN0IGlzU2NhbGFyVHlwZSA9ICh0eXBlOiBERy5UWVBFKSA9PiAoREcuVFlQRVNfU0NBTEFSLmhhcyh0eXBlKSk7XG5cbiAgICBjb25zdCBpc0RhdGFGcmFtZSA9ICh0eXBlOiBERy5UWVBFKSA9PiAodHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKTtcblxuICAgIGNvbnN0IGRmSW5wdXRzID0gdGhpcy5mdW5jLmlucHV0cy5maWx0ZXIoKGlucHV0KSA9PiBpc0RhdGFGcmFtZShpbnB1dC5wcm9wZXJ0eVR5cGUpKTtcbiAgICBjb25zdCBzY2FsYXJJbnB1dHMgPSB0aGlzLmZ1bmMuaW5wdXRzLmZpbHRlcigoaW5wdXQpID0+IGlzU2NhbGFyVHlwZShpbnB1dC5wcm9wZXJ0eVR5cGUpKTtcbiAgICBjb25zdCBkZk91dHB1dHMgPSB0aGlzLmZ1bmMub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gaXNEYXRhRnJhbWUob3V0cHV0LnByb3BlcnR5VHlwZSkpO1xuICAgIGNvbnN0IHNjYWxhck91dHB1dHMgPSB0aGlzLmZ1bmMub3V0cHV0cy5maWx0ZXIoKG91dHB1dCkgPT4gaXNTY2FsYXJUeXBlKG91dHB1dC5wcm9wZXJ0eVR5cGUpKTtcblxuICAgIGNvbnN0IGlucHV0UGFyYW1zID0gWy4uLmxhc3RDYWxsLmlucHV0UGFyYW1zLnZhbHVlcygpXSBhcyBERy5GdW5jQ2FsbFBhcmFtW107XG4gICAgY29uc3Qgb3V0cHV0UGFyYW1zID0gWy4uLmxhc3RDYWxsLm91dHB1dFBhcmFtcy52YWx1ZXMoKV0gYXMgREcuRnVuY0NhbGxQYXJhbVtdO1xuXG4gICAgZGZJbnB1dHMuZm9yRWFjaCgoZGZJbnB1dCkgPT4ge1xuICAgICAgY29uc3QgdmlzaWJsZVRpdGxlID0gZGZJbnB1dC5vcHRpb25zLmNhcHRpb24gfHwgZGZJbnB1dC5uYW1lO1xuICAgICAgY29uc3QgY3VycmVudERmU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLklOUFVUKSk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnREZiA9IChsYXN0Q2FsbC5pbnB1dHNbZGZJbnB1dC5uYW1lXSBhcyBERy5EYXRhRnJhbWUpO1xuICAgICAgZGZUb1NoZWV0KGN1cnJlbnREZlNoZWV0LCBjdXJyZW50RGYpO1xuICAgIH0pO1xuXG4gICAgaWYgKHNjYWxhcklucHV0cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGlucHV0U2NhbGFyc1NoZWV0ID0gZXhwb3J0V29ya2Jvb2suYWRkV29ya3NoZWV0KCdJbnB1dCBzY2FsYXJzJyk7XG4gICAgICBzY2FsYXJzVG9TaGVldChpbnB1dFNjYWxhcnNTaGVldCwgc2NhbGFySW5wdXRzLm1hcCgoc2NhbGFySW5wdXQpID0+ICh7XG4gICAgICAgIGNhcHRpb246IHNjYWxhcklucHV0Lm9wdGlvbnNbJ2NhcHRpb24nXSB8fCBzY2FsYXJJbnB1dC5uYW1lLFxuICAgICAgICB2YWx1ZTogbGFzdENhbGwuaW5wdXRzW3NjYWxhcklucHV0Lm5hbWVdLFxuICAgICAgICB1bml0czogc2NhbGFySW5wdXQub3B0aW9uc1sndW5pdHMnXSB8fCAnJyxcbiAgICAgIH0pKSk7XG4gICAgfVxuXG4gICAgZGZPdXRwdXRzLmZvckVhY2goKGRmT3V0cHV0KSA9PiB7XG4gICAgICBjb25zdCB2aXNpYmxlVGl0bGUgPSBkZk91dHB1dC5vcHRpb25zLmNhcHRpb24gfHwgZGZPdXRwdXQubmFtZTtcbiAgICAgIGNvbnN0IGN1cnJlbnREZlNoZWV0ID0gZXhwb3J0V29ya2Jvb2suYWRkV29ya3NoZWV0KGdldFNoZWV0TmFtZSh2aXNpYmxlVGl0bGUsIERJUkVDVElPTi5PVVRQVVQpKTtcblxuICAgICAgY29uc3QgY3VycmVudERmID0gKGxhc3RDYWxsLm91dHB1dHNbZGZPdXRwdXQubmFtZV0gYXMgREcuRGF0YUZyYW1lKTtcbiAgICAgIGRmVG9TaGVldChjdXJyZW50RGZTaGVldCwgY3VycmVudERmKTtcbiAgICB9KTtcblxuXG4gICAgaWYgKHNjYWxhck91dHB1dHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBvdXRwdXRTY2FsYXJzU2hlZXQgPSBleHBvcnRXb3JrYm9vay5hZGRXb3Jrc2hlZXQoJ091dHB1dCBzY2FsYXJzJyk7XG4gICAgICBzY2FsYXJzVG9TaGVldChvdXRwdXRTY2FsYXJzU2hlZXQsIHNjYWxhck91dHB1dHMubWFwKChzY2FsYXJPdXRwdXQpID0+ICh7XG4gICAgICAgIGNhcHRpb246IHNjYWxhck91dHB1dC5vcHRpb25zWydjYXB0aW9uJ10gfHwgc2NhbGFyT3V0cHV0Lm5hbWUsXG4gICAgICAgIHZhbHVlOiBsYXN0Q2FsbC5vdXRwdXRzW3NjYWxhck91dHB1dC5uYW1lXSxcbiAgICAgICAgdW5pdHM6IHNjYWxhck91dHB1dC5vcHRpb25zWyd1bml0cyddIHx8ICcnLFxuICAgICAgfSkpKTtcbiAgICB9XG5cbiAgICBjb25zdCB0YWJDb250cm9sID0gdGhpcy50YWJzRWxlbTtcbiAgICBmb3IgKGNvbnN0IHRhYkxhYmVsIG9mIHRoaXMudGFic0xhYmVscykge1xuICAgICAgdGFiQ29udHJvbC5jdXJyZW50UGFuZSA9IHRhYkNvbnRyb2wuZ2V0UGFuZSh0YWJMYWJlbCk7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCAxMDApKTtcbiAgICAgIGlmICh0YWJMYWJlbCA9PT0gJ0lucHV0Jykge1xuICAgICAgICBmb3IgKGNvbnN0IGlucHV0UGFyYW0gb2YgaW5wdXRQYXJhbXMuZmlsdGVyKChpbnB1dFBhcmFtKSA9PiBpbnB1dFBhcmFtLnByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gREcuVFlQRS5EQVRBX0ZSQU1FKSkge1xuICAgICAgICAgIGNvbnN0IG5vbkdyaWRWaWV3ZXJzID0gdGhpcy5kZlRvVmlld2VyTWFwcGluZ1tpbnB1dFBhcmFtLm5hbWVdXG4gICAgICAgICAgICAuZmlsdGVyKCh2aWV3ZXIpID0+IHZpZXdlci50eXBlICE9PSBERy5WSUVXRVIuR1JJRClcbiAgICAgICAgICAgIC5maWx0ZXIoKHZpZXdlcikgPT4gT2JqZWN0LnZhbHVlcyh2aWV3ZXJUeXBlc01hcHBpbmcpLmluY2x1ZGVzKHZpZXdlci50eXBlKSk7XG5cbiAgICAgICAgICBjb25zdCBkZklucHV0ID0gZGZJbnB1dHMuZmluZCgoaW5wdXQpID0+IGlucHV0Lm5hbWUgPT09IGlucHV0UGFyYW0ubmFtZSk7XG4gICAgICAgICAgY29uc3QgdmlzaWJsZVRpdGxlID0gZGZJbnB1dCEub3B0aW9ucy5jYXB0aW9uIHx8IGlucHV0UGFyYW0ubmFtZTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50RGYgPSAobGFzdENhbGwuaW5wdXRzW2RmSW5wdXQhLm5hbWVdIGFzIERHLkRhdGFGcmFtZSk7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IFtpbmRleCwgdmlld2VyXSBvZiBub25HcmlkVmlld2Vycy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGF3YWl0IHBsb3RUb1NoZWV0KFxuICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vayxcbiAgICAgICAgICAgICAgZXhwb3J0V29ya2Jvb2suZ2V0V29ya3NoZWV0KGdldFNoZWV0TmFtZSh2aXNpYmxlVGl0bGUsIERJUkVDVElPTi5JTlBVVCkpLFxuICAgICAgICAgICAgICB2aWV3ZXIucm9vdCxcbiAgICAgICAgICAgICAgY3VycmVudERmLmNvbHVtbnMubGVuZ3RoICsgMixcbiAgICAgICAgICAgICAgKGluZGV4ID4gMCkgPyBNYXRoLmNlaWwobm9uR3JpZFZpZXdlcnNbaW5kZXgtMV0ucm9vdC5jbGllbnRIZWlnaHQgLyAyMCkgKyAxIDogMFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IG91dHB1dFBhcmFtIG9mIG91dHB1dFBhcmFtcy5maWx0ZXIoXG4gICAgICAgICAgKG91dHB1dFBhcmFtKSA9PiBvdXRwdXRQYXJhbS5wcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IERHLlRZUEUuREFUQV9GUkFNRSAmJlxuICAgICAgICAgIChcbiAgICAgICAgICAgICh0YWJMYWJlbCA9PT0gJ091dHB1dCcgJiYgb3V0cHV0UGFyYW0ucHJvcGVydHkuY2F0ZWdvcnkgPT09ICdNaXNjJyB8fCBvdXRwdXRQYXJhbS5wcm9wZXJ0eS5jYXRlZ29yeSA9PT0gJ091dHB1dCcpIHx8XG4gICAgICAgICAgICAodGFiTGFiZWwgIT09ICdPdXRwdXQnICYmIG91dHB1dFBhcmFtLnByb3BlcnR5LmNhdGVnb3J5ID09PSB0YWJMYWJlbClcbiAgICAgICAgICApXG4gICAgICAgICkpIHtcbiAgICAgICAgICBjb25zdCBub25HcmlkVmlld2VycyA9IHRoaXMuZGZUb1ZpZXdlck1hcHBpbmdbb3V0cHV0UGFyYW0ucHJvcGVydHkubmFtZV1cbiAgICAgICAgICAgIC5maWx0ZXIoKHZpZXdlcikgPT4gdmlld2VyLnR5cGUgIT09IERHLlZJRVdFUi5HUklEKVxuICAgICAgICAgICAgLmZpbHRlcigodmlld2VyKSA9PiBPYmplY3QudmFsdWVzKHZpZXdlclR5cGVzTWFwcGluZykuaW5jbHVkZXModmlld2VyLnR5cGUpKTtcblxuICAgICAgICAgIGNvbnN0IGRmT3V0cHV0ID0gZGZPdXRwdXRzLmZpbmQoKG91dHB1dCkgPT4gb3V0cHV0Lm5hbWUgPT09IG91dHB1dFBhcmFtLnByb3BlcnR5Lm5hbWUpITtcbiAgICAgICAgICBjb25zdCB2aXNpYmxlVGl0bGUgPSBkZk91dHB1dC5vcHRpb25zLmNhcHRpb24gfHwgb3V0cHV0UGFyYW0ucHJvcGVydHkubmFtZTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50RGYgPSAobGFzdENhbGwub3V0cHV0c1tkZk91dHB1dC5uYW1lXSBhcyBERy5EYXRhRnJhbWUpO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBbaW5kZXgsIHZpZXdlcl0gb2Ygbm9uR3JpZFZpZXdlcnMuZW50cmllcygpKSB7XG4gICAgICAgICAgICBpZiAodmlld2VyLnR5cGUgPT09IERHLlZJRVdFUi5TVEFUSVNUSUNTKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IGN1cnJlbnREZi5jb2x1bW5zLmxlbmd0aDtcbiAgICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW1xuICAgICAgICAgICAgICAgIERHLkNvbHVtbi5zdHJpbmcoJ05hbWUnLCBsZW5ndGgpLmluaXQoKGk6IG51bWJlcikgPT4gY3VycmVudERmLmNvbHVtbnMuYnlJbmRleChpKS5uYW1lKSxcbiAgICAgICAgICAgICAgICBERy5Db2x1bW4uaW50KCdWYWx1ZXMnLCBsZW5ndGgpLmluaXQoKGk6IG51bWJlcikgPT4gY3VycmVudERmLmNvbHVtbnMuYnlJbmRleChpKS5zdGF0cy52YWx1ZUNvdW50KSxcbiAgICAgICAgICAgICAgICBERy5Db2x1bW4uaW50KCdOdWxscycsIGxlbmd0aCkuaW5pdCgoaTogbnVtYmVyKSA9PiBjdXJyZW50RGYuY29sdW1ucy5ieUluZGV4KGkpLnN0YXRzLm1pc3NpbmdWYWx1ZUNvdW50KSxcbiAgICAgICAgICAgICAgICBERy5Db2x1bW4uZmxvYXQoJ01pbicsIGxlbmd0aCkuaW5pdCgoaTogbnVtYmVyKSA9PiBjdXJyZW50RGYuY29sdW1ucy5ieUluZGV4KGkpLnN0YXRzLm1pbiksXG4gICAgICAgICAgICAgICAgREcuQ29sdW1uLmZsb2F0KCdNYXgnLCBsZW5ndGgpLmluaXQoKGk6IG51bWJlcikgPT4gY3VycmVudERmLmNvbHVtbnMuYnlJbmRleChpKS5zdGF0cy5tYXgpLFxuICAgICAgICAgICAgICAgIERHLkNvbHVtbi5mbG9hdCgnQXZnJywgbGVuZ3RoKS5pbml0KChpOiBudW1iZXIpID0+IGN1cnJlbnREZi5jb2x1bW5zLmJ5SW5kZXgoaSkuc3RhdHMuYXZnKSxcbiAgICAgICAgICAgICAgICBERy5Db2x1bW4uZmxvYXQoJ1N0ZGV2JywgbGVuZ3RoKS5pbml0KChpOiBudW1iZXIpID0+IGN1cnJlbnREZi5jb2x1bW5zLmJ5SW5kZXgoaSkuc3RhdHMuc3RkZXYpLFxuICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgZGZUb1NoZWV0KFxuICAgICAgICAgICAgICAgIGV4cG9ydFdvcmtib29rLmdldFdvcmtzaGVldChnZXRTaGVldE5hbWUodmlzaWJsZVRpdGxlLCBESVJFQ1RJT04uT1VUUFVUKSksXG4gICAgICAgICAgICAgICAgc3RhdHMsXG4gICAgICAgICAgICAgICAgY3VycmVudERmLmNvbHVtbnMubGVuZ3RoICsgMixcbiAgICAgICAgICAgICAgICAoaW5kZXggPiAwKSA/IE1hdGguY2VpbChub25HcmlkVmlld2Vyc1tpbmRleC0xXS5yb290LmNsaWVudEhlaWdodCAvIDIwKSArIDEgOiAwXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhd2FpdCBwbG90VG9TaGVldChcbiAgICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vayxcbiAgICAgICAgICAgICAgICBleHBvcnRXb3JrYm9vay5nZXRXb3Jrc2hlZXQoZ2V0U2hlZXROYW1lKHZpc2libGVUaXRsZSwgRElSRUNUSU9OLk9VVFBVVCkpLFxuICAgICAgICAgICAgICAgIHZpZXdlci5yb290LFxuICAgICAgICAgICAgICAgIGN1cnJlbnREZi5jb2x1bW5zLmxlbmd0aCArIDIsXG4gICAgICAgICAgICAgICAgKGluZGV4ID4gMCkgPyBNYXRoLmNlaWwobm9uR3JpZFZpZXdlcnNbaW5kZXgtMV0ucm9vdC5jbGllbnRIZWlnaHQgLyAyMCkgKyAxIDogMFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IGV4cG9ydFdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKTtcblxuICAgIHJldHVybiBuZXcgQmxvYihbYnVmZmVyXSwge3R5cGU6IEJMT0JfVFlQRX0pO1xuICB9O1xuXG4gIGV4cG9ydENvbmZpZyA9IHtcbiAgICBzdXBwb3J0ZWRFeHRlbnNpb25zOiB0aGlzLmRlZmF1bHRTdXBwb3J0ZWRFeHBvcnRFeHRlbnNpb25zKCksXG4gICAgc3VwcG9ydGVkRm9ybWF0czogdGhpcy5kZWZhdWx0U3VwcG9ydGVkRXhwb3J0Rm9ybWF0cygpLFxuICAgIGV4cG9ydDogdGhpcy5kZWZhdWx0RXhwb3J0LFxuICAgIGZpbGVuYW1lOiB0aGlzLmRlZmF1bHRFeHBvcnRGaWxlbmFtZSxcbiAgfTtcbn1cblxuY29uc3QgZ2V0U2hlZXROYW1lID0gKG5hbWU6IHN0cmluZywgZGlyZWN0aW9uOiBESVJFQ1RJT04pID0+IHtcbiAgY29uc3QgaWRlYWxOYW1lID0gYCR7ZGlyZWN0aW9ufSAtICR7bmFtZX1gO1xuICByZXR1cm4gKGlkZWFsTmFtZS5sZW5ndGggPiAzMSkgPyBuYW1lLnN1YnN0cmluZygwLCAzMikgOiBpZGVhbE5hbWU7XG59O1xuXG5lbnVtIERJUkVDVElPTiB7XG4gIElOUFVUID0gJ0lucHV0JyxcbiAgT1VUUFVUID0gJ091dHB1dCdcbn1cblxuY29uc3Qgc2NhbGFyc1RvU2hlZXQgPSAoc2hlZXQ6IEV4Y2VsSlMuV29ya3NoZWV0LCBzY2FsYXJzOiB7IGNhcHRpb246IHN0cmluZywgdmFsdWU6IHN0cmluZywgdW5pdHM6IHN0cmluZyB9W10pID0+IHtcbiAgc2hlZXQuYWRkUm93KFsnUGFyYW1ldGVyJywgJ1ZhbHVlJywgJ1VuaXRzJ10pLmZvbnQgPSB7Ym9sZDogdHJ1ZX07XG4gIHNjYWxhcnMuZm9yRWFjaCgoc2NhbGFyKSA9PiB7XG4gICAgc2hlZXQuYWRkUm93KFtzY2FsYXIuY2FwdGlvbiwgc2NhbGFyLnZhbHVlLCBzY2FsYXIudW5pdHNdKTtcbiAgfSk7XG5cbiAgc2hlZXQuZ2V0Q29sdW1uKDEpLndpZHRoID0gTWF0aC5tYXgoXG4gICAgLi4uc2NhbGFycy5tYXAoKHNjYWxhcikgPT4gc2NhbGFyLmNhcHRpb24udG9TdHJpbmcoKS5sZW5ndGgpLCAnUGFyYW1ldGVyJy5sZW5ndGhcbiAgKSAqIDEuMjtcbiAgc2hlZXQuZ2V0Q29sdW1uKDIpLndpZHRoID0gTWF0aC5tYXgoLi4uc2NhbGFycy5tYXAoKHNjYWxhcikgPT4gc2NhbGFyLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoKSwgJ1ZhbHVlJy5sZW5ndGgpICogMS4yO1xuICBzaGVldC5nZXRDb2x1bW4oMykud2lkdGggPSBNYXRoLm1heCguLi5zY2FsYXJzLm1hcCgoc2NhbGFyKSA9PiBzY2FsYXIudW5pdHMudG9TdHJpbmcoKS5sZW5ndGgpLCAnVW5pdHMnLmxlbmd0aCkgKiAxLjI7XG59O1xuXG5jb25zdCBkZlRvU2hlZXQgPSAoc2hlZXQ6IEV4Y2VsSlMuV29ya3NoZWV0LCBkZjogREcuRGF0YUZyYW1lLCBjb2x1bW46IG51bWJlciA9IDAsIHJvdzogbnVtYmVyID0gMCkgPT4ge1xuICBmb3IgKGxldCBpPSAwOyBpIDwgZGYuY29sdW1ucy5uYW1lcygpLmxlbmd0aDsgaSsrKSB7XG4gICAgc2hlZXQuZ2V0Q2VsbCgxICsgcm93LCAxICsgaSArIGNvbHVtbikudmFsdWUgPSBkZi5jb2x1bW5zLmJ5SW5kZXgoaSkubmFtZTtcbiAgICBzaGVldC5nZXRDb2x1bW4oMSArIGkgKyBjb2x1bW4pLndpZHRoID0gTWF0aC5tYXgoXG4gICAgICAuLi5kZi5jb2x1bW5zLmJ5SW5kZXgoaSkuY2F0ZWdvcmllcy5tYXAoKGNhdGVnb3J5KSA9PiBjYXRlZ29yeS50b1N0cmluZygpLmxlbmd0aCksXG4gICAgICBkZi5jb2x1bW5zLmJ5SW5kZXgoaSkubmFtZS5sZW5ndGhcbiAgICApICogMS4yO1xuICB9XG4gIGZvciAobGV0IGRmQ29sdW1uID0gMDsgZGZDb2x1bW4gPCBkZi5jb2x1bW5zLmxlbmd0aDsgZGZDb2x1bW4rKykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGYucm93Q291bnQ7IGkrKylcbiAgICAgIHNoZWV0LmdldENlbGwoaSArIDIgKyByb3csIDEgKyBjb2x1bW4rZGZDb2x1bW4pLnZhbHVlID0gZGYuY29sdW1ucy5ieUluZGV4KGRmQ29sdW1uKS5nZXQoaSk7XG4gIH1cbn07XG5cbmNvbnN0IHBsb3RUb1NoZWV0ID0gYXN5bmMgKGV4cG9ydFdiOiBFeGNlbEpTLldvcmtib29rLCBzaGVldDogRXhjZWxKUy5Xb3Jrc2hlZXQsIHBsb3Q6IEhUTUxFbGVtZW50LCBjb2x1bW5Gb3JJbWFnZTogbnVtYmVyLCByb3dGb3JJbWFnZTogbnVtYmVyID0gMCkgPT4ge1xuICBjb25zdCBjYW52YXMgPSBhd2FpdCBodG1sMmNhbnZhcyhwbG90IGFzIEhUTUxFbGVtZW50LCB7bG9nZ2luZzogZmFsc2V9KTtcbiAgY29uc3QgZGF0YVVybCA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL3BuZycpO1xuXG4gIGNvbnN0IGltYWdlSWQgPSBleHBvcnRXYi5hZGRJbWFnZSh7XG4gICAgYmFzZTY0OiBkYXRhVXJsLFxuICAgIGV4dGVuc2lvbjogJ3BuZycsXG4gIH0pO1xuICBzaGVldC5hZGRJbWFnZShpbWFnZUlkLCB7XG4gICAgdGw6IHtjb2w6IGNvbHVtbkZvckltYWdlLCByb3c6IHJvd0ZvckltYWdlfSxcbiAgICBleHQ6IHt3aWR0aDogY2FudmFzLndpZHRoLCBoZWlnaHQ6IGNhbnZhcy5oZWlnaHR9LFxuICB9KTtcbn07XG4iXX0=