slate-angular 17.4.0 → 17.4.2

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.
@@ -219,8 +219,10 @@ export class SlateEditable {
219
219
  else {
220
220
  domSelection.removeAllRanges();
221
221
  }
222
- newDomRange && this.scrollSelectionIntoView(this.editor, newDomRange);
223
222
  setTimeout(() => {
223
+ // handle scrolling in setTimeout because of
224
+ // dom should not have updated immediately after listRender's updating
225
+ newDomRange && this.scrollSelectionIntoView(this.editor, newDomRange);
224
226
  // COMPAT: In Firefox, it's not enough to create a range, you also need
225
227
  // to focus the contenteditable element too. (2016/11/16)
226
228
  if (newDomRange && IS_FIREFOX) {
@@ -1259,4 +1261,4 @@ const preventInsertFromComposition = (event, editor) => {
1259
1261
  textNode.splitText(textNode.length - insertText.length).remove();
1260
1262
  }
1261
1263
  };
1262
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvZWRpdGFibGUvZWRpdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvZWRpdGFibGUvZWRpdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFFVCxLQUFLLEVBQ0wsU0FBUyxFQUNULFdBQVcsRUFFWCxVQUFVLEVBQ1YsdUJBQXVCLEVBS3ZCLFVBQVUsRUFLVixNQUFNLEVBQ04sTUFBTSxFQUNOLGdCQUFnQixFQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsZUFBZSxFQUNmLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ25CLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFxQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFhLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNyRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sY0FBYyxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBR0gsU0FBUyxFQUdULFlBQVksRUFDWixvQkFBb0IsRUFFcEIsY0FBYyxFQUNqQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLHdCQUF3QixFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pI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LENBQUM7WUFDbkUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FDbEYsQ0FBQztBQUNOLENBQUMsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxLQUFZLEVBQUUsTUFBcUIsRUFBRSxFQUFFO0lBQ3pFLE1BQU0sS0FBSyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUMxRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM5QixPQUFPO0lBQ1gsQ0FBQztJQUNELE1BQU0sVUFBVSxHQUFJLEtBQTBCLENBQUMsSUFBSSxDQUFDO0lBQ3BELE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0MsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzNDLGlEQUFpRDtJQUNqRCxJQUFJLFVBQVUsSUFBSSxZQUFZLENBQUMsVUFBVSxZQUFZLElBQUksSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUNwSCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDO1FBQ3pDLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDckUsQ0FBQztBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIE9uSW5pdCxcbiAgICBJbnB1dCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgUmVuZGVyZXIyLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgT25EZXN0cm95LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIE5nWm9uZSxcbiAgICBJbmplY3RvcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgRG9DaGVjayxcbiAgICBJbmplY3QsXG4gICAgaW5qZWN0LFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIE5PREVfVE9fRUxFTUVOVCxcbiAgICBJU19GT0NVU0VELFxuICAgIEVESVRPUl9UT19FTEVNRU5ULFxuICAgIEVMRU1FTlRfVE9fTk9ERSxcbiAgICBJU19SRUFET05MWSxcbiAgICBFRElUT1JfVE9fT05fQ0hBTkdFLFxuICAgIEVESVRPUl9UT19XSU5ET1dcbn0gZnJvbSAnLi4vLi4vdXRpbHMvd2Vhay1tYXBzJztcbmltcG9ydCB7IFRleHQgYXMgU2xhdGVUZXh0LCBFbGVtZW50LCBUcmFuc2Zvcm1zLCBFZGl0b3IsIFJhbmdlLCBQYXRoLCBOb2RlRW50cnksIE5vZGUgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBkaXJlY3Rpb24gfSBmcm9tICdkaXJlY3Rpb24nO1xuaW1wb3J0IHNjcm9sbEludG9WaWV3IGZyb20gJ3Njcm9sbC1pbnRvLXZpZXctaWYtbmVlZGVkJztcbmltcG9ydCB7IEFuZ3VsYXJFZGl0b3IgfSBmcm9tICcuLi8uLi9wbHVnaW5zL2FuZ3VsYXItZWRpdG9yJztcbmltcG9ydCB7XG4gICAgRE9NRWxlbWVudCxcbiAgICBET01Ob2RlLFxuICAgIGlzRE9NTm9kZSxcbiAgICBET01TdGF0aWNSYW5nZSxcbiAgICBET01SYW5nZSxcbiAgICBpc0RPTUVsZW1lbnQsXG4gICAgaXNQbGFpblRleHRPbmx5UGFzdGUsXG4gICAgRE9NU2VsZWN0aW9uLFxuICAgIGdldERlZmF1bHRWaWV3XG59IGZyb20gJy4uLy4uL3V0aWxzL2RvbSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJU19GSVJFRk9YLCBJU19TQUZBUkksIElTX0NIUk9NRSwgSEFTX0JFRk9SRV9JTlBVVF9TVVBQT1JULCBJU19BTkRST0lEIH0gZnJvbSAnLi4vLi4vdXRpbHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IEhvdGtleXMgZnJvbSAnLi4vLi4vdXRpbHMvaG90a2V5cyc7XG5pbXBvcnQgeyBCZWZvcmVJbnB1dEV2ZW50LCBleHRyYWN0QmVmb3JlSW5wdXRFdmVudCB9IGZyb20gJy4uLy4uL2N1c3RvbS1ldmVudC9CZWZvcmVJbnB1dEV2ZW50UGx1Z2luJztcbmltcG9ydCB7IEJFRk9SRV9JTlBVVF9FVkVOVFMgfSBmcm9tICcuLi8uLi9jdXN0b20tZXZlbnQvYmVmb3JlLWlucHV0LXBvbHlmaWxsJztcbmltcG9ydCB7IFNsYXRlRXJyb3JDb2RlIH0gZnJvbSAnLi4vLi4vdHlwZXMvZXJyb3InO1xuaW1wb3J0IHsgU2xhdGVTdHJpbmdUZW1wbGF0ZSB9IGZyb20gJy4uL3N0cmluZy90ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTbGF0ZUNoaWxkcmVuQ29udGV4dCwgU2xhdGVWaWV3Q29udGV4dCB9IGZyb20gJy4uLy4uL3ZpZXcvY29udGV4dCc7XG5pbXBvcnQgeyBDb21wb25lbnRUeXBlLCBWaWV3VHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzL3ZpZXcnO1xuaW1wb3J0IHsgSGlzdG9yeUVkaXRvciB9IGZyb20gJ3NsYXRlLWhpc3RvcnknO1xuaW1wb3J0IHsgaXNEZWNvcmF0b3JSYW5nZUxpc3RFcXVhbCwgY2hlY2ssIG5vcm1hbGl6ZSB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IFNsYXRlUGxhY2Vob2xkZXIgfSBmcm9tICcuLi8uLi90eXBlcy9mZWF0dXJlJztcbmltcG9ydCB7IHJlc3RvcmVEb20gfSBmcm9tICcuLi8uLi91dGlscy9yZXN0b3JlLWRvbSc7XG5pbXBvcnQgeyBTbGF0ZUNoaWxkcmVuIH0gZnJvbSAnLi4vY2hpbGRyZW4vY2hpbGRyZW4uY29tcG9uZW50JztcbmltcG9ydCB7IFNMQVRFX0RFRkFVTFRfRUxFTUVOVF9DT01QT05FTlRfVE9LRU4gfSBmcm9tICcuLi9lbGVtZW50L2RlZmF1bHQtZWxlbWVudC5jb21wb25lbnQudG9rZW4nO1xuaW1wb3J0IHsgU0xBVEVfREVGQVVMVF9URVhUX0NPTVBPTkVOVF9UT0tFTiwgU0xBVEVfREVGQVVMVF9WT0lEX1RFWFRfQ09NUE9ORU5UX1RPS0VOIH0gZnJvbSAnLi4vdGV4dC90b2tlbic7XG5pbXBvcnQgeyBTbGF0ZVZvaWRUZXh0IH0gZnJvbSAnLi4vdGV4dC92b2lkLXRleHQuY29tcG9uZW50JztcbmltcG9ydCB7IFNsYXRlRGVmYXVsdFRleHQgfSBmcm9tICcuLi90ZXh0L2RlZmF1bHQtdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2xhdGVEZWZhdWx0RWxlbWVudCB9IGZyb20gJy4uL2VsZW1lbnQvZGVmYXVsdC1lbGVtZW50LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbGF0ZURlZmF1bHRMZWFmIH0gZnJvbSAnLi4vbGVhZi9kZWZhdWx0LWxlYWYuY29tcG9uZW50JztcbmltcG9ydCB7IFNMQVRFX0RFRkFVTFRfTEVBRl9DT01QT05FTlRfVE9LRU4gfSBmcm9tICcuLi9sZWFmL3Rva2VuJztcbmltcG9ydCB7IEJhc2VFbGVtZW50Q29tcG9uZW50LCBCYXNlTGVhZkNvbXBvbmVudCwgQmFzZVRleHRDb21wb25lbnQgfSBmcm9tICcuLi8uLi92aWV3L2Jhc2UnO1xuaW1wb3J0IHsgTGlzdFJlbmRlciB9IGZyb20gJy4uLy4uL3ZpZXcvcmVuZGVyL2xpc3QtcmVuZGVyJztcbmltcG9ydCB7IFRSSVBMRV9DTElDSyB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbnN0YW50cyc7XG5cbi8vIG5vdCBjb3JyZWN0bHkgY2xpcGJvYXJkRGF0YSBvbiBiZWZvcmVpbnB1dFxuY29uc3QgZm9yY2VPbkRPTVBhc3RlID0gSVNfU0FGQVJJO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NsYXRlLWVkaXRhYmxlJyxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnc2xhdGUtZWRpdGFibGUtY29udGFpbmVyJyxcbiAgICAgICAgJ1thdHRyLmNvbnRlbnRlZGl0YWJsZV0nOiAncmVhZG9ubHkgPyB1bmRlZmluZWQgOiB0cnVlJyxcbiAgICAgICAgJ1thdHRyLnJvbGVdJzogYHJlYWRvbmx5ID8gdW5kZWZpbmVkIDogJ3RleHRib3gnYCxcbiAgICAgICAgJ1thdHRyLnNwZWxsQ2hlY2tdJzogYCFoYXNCZWZvcmVJbnB1dFN1cHBvcnQgPyBmYWxzZSA6IHNwZWxsQ2hlY2tgLFxuICAgICAgICAnW2F0dHIuYXV0b0NvcnJlY3RdJzogYCFoYXNCZWZvcmVJbnB1dFN1cHBvcnQgPyAnZmFsc2UnIDogYXV0b0NvcnJlY3RgLFxuICAgICAgICAnW2F0dHIuYXV0b0NhcGl0YWxpemVdJzogYCFoYXNCZWZvcmVJbnB1dFN1cHBvcnQgPyAnZmFsc2UnIDogYXV0b0NhcGl0YWxpemVgXG4gICAgfSxcbiAgICB0ZW1wbGF0ZVVybDogJ2VkaXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTbGF0ZUVkaXRhYmxlKSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFNMQVRFX0RFRkFVTFRfRUxFTUVOVF9DT01QT05FTlRfVE9LRU4sXG4gICAgICAgICAgICB1c2VWYWx1ZTogU2xhdGVEZWZhdWx0RWxlbWVudFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBTTEFURV9ERUZBVUxUX1RFWFRfQ09NUE9ORU5UX1RPS0VOLFxuICAgICAgICAgICAgdXNlVmFsdWU6IFNsYXRlRGVmYXVsdFRleHRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogU0xBVEVfREVGQVVMVF9WT0lEX1RFWFRfQ09NUE9ORU5UX1RPS0VOLFxuICAgICAgICAgICAgdXNlVmFsdWU6IFNsYXRlVm9pZFRleHRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogU0xBVEVfREVGQVVMVF9MRUFGX0NPTVBPTkVOVF9UT0tFTixcbiAgICAgICAgICAgIHVzZVZhbHVlOiBTbGF0ZURlZmF1bHRMZWFmXG4gICAgICAgIH1cbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1NsYXRlQ2hpbGRyZW4sIFNsYXRlU3RyaW5nVGVtcGxhdGVdXG59KVxuZXhwb3J0IGNsYXNzIFNsYXRlRWRpdGFibGUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkLCBEb0NoZWNrIHtcbiAgICB2aWV3Q29udGV4dDogU2xhdGVWaWV3Q29udGV4dDtcbiAgICBjb250ZXh0OiBTbGF0ZUNoaWxkcmVuQ29udGV4dDtcblxuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgaXNDb21wb3NpbmcgPSBmYWxzZTtcbiAgICBpc0RyYWdnaW5nSW50ZXJuYWxseSA9IGZhbHNlO1xuICAgIGlzVXBkYXRpbmdTZWxlY3Rpb24gPSBmYWxzZTtcbiAgICBsYXRlc3RFbGVtZW50ID0gbnVsbCBhcyBET01FbGVtZW50IHwgbnVsbDtcblxuICAgIHByb3RlY3RlZCBtYW51YWxMaXN0ZW5lcnM6ICgoKSA9PiB2b2lkKVtdID0gW107XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVkOiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBvblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgcHJpdmF0ZSBvbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICBASW5wdXQoKSBlZGl0b3I6IEFuZ3VsYXJFZGl0b3I7XG5cbiAgICBASW5wdXQoKSByZW5kZXJFbGVtZW50OiAoZWxlbWVudDogRWxlbWVudCkgPT4gVmlld1R5cGUgfCBudWxsO1xuXG4gICAgQElucHV0KCkgcmVuZGVyTGVhZjogKHRleHQ6IFNsYXRlVGV4dCkgPT4gVmlld1R5cGUgfCBudWxsO1xuXG4gICAgQElucHV0KCkgcmVuZGVyVGV4dDogKHRleHQ6IFNsYXRlVGV4dCkgPT4gVmlld1R5cGUgfCBudWxsO1xuXG4gICAgQElucHV0KCkgZGVjb3JhdGU6IChlbnRyeTogTm9kZUVudHJ5KSA9PiBSYW5nZVtdID0gKCkgPT4gW107XG5cbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlckRlY29yYXRlOiAoZWRpdG9yOiBFZGl0b3IpID0+IFNsYXRlUGxhY2Vob2xkZXJbXTtcblxuICAgIEBJbnB1dCgpIHNjcm9sbFNlbGVjdGlvbkludG9WaWV3OiAoZWRpdG9yOiBBbmd1bGFyRWRpdG9yLCBkb21SYW5nZTogRE9NUmFuZ2UpID0+IHZvaWQgPSBkZWZhdWx0U2Nyb2xsU2VsZWN0aW9uSW50b1ZpZXc7XG5cbiAgICBASW5wdXQoKSBpc1N0cmljdERlY29yYXRlOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpIHRyYWNrQnk6IChub2RlOiBFbGVtZW50KSA9PiBhbnkgPSAoKSA9PiBudWxsO1xuXG4gICAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgICAvLyNyZWdpb24gaW5wdXQgZXZlbnQgaGFuZGxlclxuICAgIEBJbnB1dCgpIGJlZm9yZUlucHV0OiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xuICAgIEBJbnB1dCgpIGJsdXI6IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gICAgQElucHV0KCkgY2xpY2s6IChldmVudDogTW91c2VFdmVudCkgPT4gdm9pZDtcbiAgICBASW5wdXQoKSBjb21wb3NpdGlvbkVuZDogKGV2ZW50OiBDb21wb3NpdGlvbkV2ZW50KSA9PiB2b2lkO1xuICAgIEBJbnB1dCgpIGNvbXBvc2l0aW9uVXBkYXRlOiAoZXZlbnQ6IENvbXBvc2l0aW9uRXZlbnQpID0+IHZvaWQ7XG4gICAgQElucHV0KCkgY29tcG9zaXRpb25TdGFydDogKGV2ZW50OiBDb21wb3NpdGlvbkV2ZW50KSA9PiB2b2lkO1xuICAgIEBJbnB1dCgpIGNvcHk6IChldmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHZvaWQ7XG4gICAgQElucHV0KCkgY3V0OiAoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSA9PiB2b2lkO1xuICAgIEBJbnB1dCgpIGRyYWdPdmVyOiAoZXZlbnQ6IERyYWdFdmVudCkgPT4gdm9pZDtcbiAgICBASW5wdXQoKSBkcmFnU3RhcnQ6IChldmVudDogRHJhZ0V2ZW50KSA9PiB2b2lkO1xuICAgIEBJbnB1dCgpIGRyYWdFbmQ6IChldmVudDogRHJhZ0V2ZW50KSA9PiB2b2lkO1xuICAgIEBJbnB1dCgpIGRyb3A6IChldmVudDogRHJhZ0V2ZW50KSA9PiB2b2lkO1xuICAgIEBJbnB1dCgpIGZvY3VzOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xuICAgIEBJbnB1dCgpIGtleWRvd246IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZDtcbiAgICBASW5wdXQoKSBwYXN0ZTogKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkgPT4gdm9pZDtcbiAgICAvLyNlbmRyZWdpb25cblxuICAgIC8vI3JlZ2lvbiBET00gYXR0clxuICAgIEBJbnB1dCgpIHNwZWxsQ2hlY2sgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBhdXRvQ29ycmVjdCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGF1dG9DYXBpdGFsaXplID0gZmFsc2U7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1zbGF0ZS1lZGl0b3InKSBkYXRhU2xhdGVFZGl0b3IgPSB0cnVlO1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXNsYXRlLW5vZGUnKSBkYXRhU2xhdGVOb2RlID0gJ3ZhbHVlJztcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1ncmFtbScpIGRhdGFHcmFtbSA9IGZhbHNlO1xuXG4gICAgZ2V0IGhhc0JlZm9yZUlucHV0U3VwcG9ydCgpIHtcbiAgICAgICAgcmV0dXJuIEhBU19CRUZPUkVfSU5QVVRfU1VQUE9SVDtcbiAgICB9XG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICBAVmlld0NoaWxkKCd0ZW1wbGF0ZUNvbXBvbmVudCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgdGVtcGxhdGVDb21wb25lbnQ6IFNsYXRlU3RyaW5nVGVtcGxhdGU7XG5cbiAgICBAVmlld0NoaWxkKCd0ZW1wbGF0ZUNvbXBvbmVudCcsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgdGVtcGxhdGVFbGVtZW50UmVmOiBFbGVtZW50UmVmPGFueT47XG5cbiAgICB2aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuXG4gICAgZ2V0T3V0bGV0UGFyZW50ID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfTtcblxuICAgIGxpc3RSZW5kZXI6IExpc3RSZW5kZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHB1YmxpYyByZW5kZXJlcjI6IFJlbmRlcmVyMixcbiAgICAgICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBASW5qZWN0KFNMQVRFX0RFRkFVTFRfRUxFTUVOVF9DT01QT05FTlRfVE9LRU4pXG4gICAgICAgIHB1YmxpYyBkZWZhdWx0RWxlbWVudDogQ29tcG9uZW50VHlwZTxCYXNlRWxlbWVudENvbXBvbmVudD4sXG4gICAgICAgIEBJbmplY3QoU0xBVEVfREVGQVVMVF9URVhUX0NPTVBPTkVOVF9UT0tFTilcbiAgICAgICAgcHVibGljIGRlZmF1bHRUZXh0OiBDb21wb25lbnRUeXBlPEJhc2VUZXh0Q29tcG9uZW50PixcbiAgICAgICAgQEluamVjdChTTEFURV9ERUZBVUxUX1ZPSURfVEVYVF9DT01QT05FTlRfVE9LRU4pXG4gICAgICAgIHB1YmxpYyBkZWZhdWx0Vm9pZFRleHQ6IENvbXBvbmVudFR5cGU8QmFzZVRleHRDb21wb25lbnQ+LFxuICAgICAgICBASW5qZWN0KFNMQVRFX0RFRkFVTFRfTEVBRl9DT01QT05FTlRfVE9LRU4pXG4gICAgICAgIHB1YmxpYyBkZWZhdWx0TGVhZjogQ29tcG9uZW50VHlwZTxCYXNlTGVhZkNvbXBvbmVudD5cbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5lZGl0b3IuaW5qZWN0b3IgPSB0aGlzLmluamVjdG9yO1xuICAgICAgICB0aGlzLmVkaXRvci5jaGlsZHJlbiA9IFtdO1xuICAgICAgICBsZXQgd2luZG93ID0gZ2V0RGVmYXVsdFZpZXcodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBFRElUT1JfVE9fV0lORE9XLnNldCh0aGlzLmVkaXRvciwgd2luZG93KTtcbiAgICAgICAgRURJVE9SX1RPX0VMRU1FTlQuc2V0KHRoaXMuZWRpdG9yLCB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIE5PREVfVE9fRUxFTUVOVC5zZXQodGhpcy5lZGl0b3IsIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgRUxFTUVOVF9UT19OT0RFLnNldCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5lZGl0b3IpO1xuICAgICAgICBJU19SRUFET05MWS5zZXQodGhpcy5lZGl0b3IsIHRoaXMucmVhZG9ubHkpO1xuICAgICAgICBFRElUT1JfVE9fT05fQ0hBTkdFLnNldCh0aGlzLmVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplVmlld0NvbnRleHQoKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplQ29udGV4dCgpO1xuXG4gICAgICAgIC8vIHJlbW92ZSB1bnVzZWQgRE9NLCBqdXN0IGtlZXAgdGVtcGxhdGVDb21wb25lbnQgaW5zdGFuY2VcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmUoKTtcblxuICAgICAgICAvLyBhZGQgYnJvd3NlciBjbGFzc1xuICAgICAgICBsZXQgYnJvd3NlckNsYXNzID0gSVNfRklSRUZPWCA/ICdmaXJlZm94JyA6IElTX1NBRkFSSSA/ICdzYWZhcmknIDogJyc7XG4gICAgICAgIGJyb3dzZXJDbGFzcyAmJiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKGJyb3dzZXJDbGFzcyk7XG4gICAgICAgIHRoaXMubGlzdFJlbmRlciA9IG5ldyBMaXN0UmVuZGVyKHRoaXMudmlld0NvbnRleHQsIHRoaXMudmlld0NvbnRhaW5lclJlZiwgdGhpcy5nZXRPdXRsZXRQYXJlbnQsICgpID0+IG51bGwpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKHNpbXBsZUNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVjb3JhdGVDaGFuZ2UgPSBzaW1wbGVDaGFuZ2VzWydkZWNvcmF0ZSddO1xuICAgICAgICBpZiAoZGVjb3JhdGVDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuZm9yY2VSZW5kZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwbGFjZWhvbGRlckNoYW5nZSA9IHNpbXBsZUNoYW5nZXNbJ3BsYWNlaG9sZGVyJ107XG4gICAgICAgIGlmIChwbGFjZWhvbGRlckNoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWFkb25seUNoYW5nZSA9IHNpbXBsZUNoYW5nZXNbJ3JlYWRvbmx5J107XG4gICAgICAgIGlmIChyZWFkb25seUNoYW5nZSkge1xuICAgICAgICAgICAgSVNfUkVBRE9OTFkuc2V0KHRoaXMuZWRpdG9yLCB0aGlzLnJlYWRvbmx5KTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICAgICAgICB0aGlzLnRvU2xhdGVTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZTogRWxlbWVudFtdKSB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmNoaWxkcmVuID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVDb250ZXh0KCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMubGlzdFJlbmRlci5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdFJlbmRlci5pbml0aWFsaXplKHRoaXMuZWRpdG9yLmNoaWxkcmVuLCB0aGlzLmVkaXRvciwgdGhpcy5jb250ZXh0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0UmVuZGVyLnVwZGF0ZSh0aGlzLmVkaXRvci5jaGlsZHJlbiwgdGhpcy5lZGl0b3IsIHRoaXMuY29udGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXRpYWxpemUoKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCB3aW5kb3cgPSBBbmd1bGFyRWRpdG9yLmdldFdpbmRvdyh0aGlzLmVkaXRvcik7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgICdzZWxlY3Rpb25jaGFuZ2UnLFxuICAgICAgICAgICAgZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9TbGF0ZVNlbGVjdGlvbigpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudFxuICAgICAgICApO1xuICAgICAgICBpZiAoSEFTX0JFRk9SRV9JTlBVVF9TVVBQT1JUKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZWlucHV0JywgdGhpcy5vbkRPTUJlZm9yZUlucHV0LmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMub25ET01CbHVyLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkRPTUNsaWNrLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uZW5kJywgdGhpcy5vbkRPTUNvbXBvc2l0aW9uRW5kLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9udXBkYXRlJywgdGhpcy5vbkRPTUNvbXBvc2l0aW9uVXBkYXRlLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2NvbXBvc2l0aW9uc3RhcnQnLCB0aGlzLm9uRE9NQ29tcG9zaXRpb25TdGFydC5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdjb3B5JywgdGhpcy5vbkRPTUNvcHkuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY3V0JywgdGhpcy5vbkRPTUN1dC5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIHRoaXMub25ET01EcmFnT3Zlci5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdkcmFnc3RhcnQnLCB0aGlzLm9uRE9NRHJhZ1N0YXJ0LmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdlbmQnLCB0aGlzLm9uRE9NRHJhZ0VuZC5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgdGhpcy5vbkRPTURyb3AuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCB0aGlzLm9uRE9NRm9jdXMuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25ET01LZXlkb3duLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3Bhc3RlJywgdGhpcy5vbkRPTVBhc3RlLmJpbmQodGhpcykpO1xuICAgICAgICBCRUZPUkVfSU5QVVRfRVZFTlRTLmZvckVhY2goZXZlbnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50Lm5hbWUsICgpID0+IHt9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdG9OYXRpdmVTZWxlY3Rpb24oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gdGhpcy5lZGl0b3I7XG4gICAgICAgICAgICBjb25zdCByb290ID0gQW5ndWxhckVkaXRvci5maW5kRG9jdW1lbnRPclNoYWRvd1Jvb3QodGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgY29uc3QgeyBhY3RpdmVFbGVtZW50IH0gPSByb290O1xuICAgICAgICAgICAgY29uc3QgZG9tU2VsZWN0aW9uID0gKHJvb3QgYXMgRG9jdW1lbnQpLmdldFNlbGVjdGlvbigpO1xuXG4gICAgICAgICAgICBpZiAoKHRoaXMuaXNDb21wb3NpbmcgJiYgIUlTX0FORFJPSUQpIHx8ICFkb21TZWxlY3Rpb24gfHwgIUFuZ3VsYXJFZGl0b3IuaXNGb2N1c2VkKHRoaXMuZWRpdG9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaGFzRG9tU2VsZWN0aW9uID0gZG9tU2VsZWN0aW9uLnR5cGUgIT09ICdOb25lJztcblxuICAgICAgICAgICAgLy8gSWYgdGhlIERPTSBzZWxlY3Rpb24gaXMgcHJvcGVybHkgdW5zZXQsIHdlJ3JlIGRvbmUuXG4gICAgICAgICAgICBpZiAoIXNlbGVjdGlvbiAmJiAhaGFzRG9tU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB0aGUgRE9NIHNlbGVjdGlvbiBpcyBhbHJlYWR5IGNvcnJlY3QsIHdlJ3JlIGRvbmUuXG4gICAgICAgICAgICAvLyB2ZXJpZnkgdGhhdCB0aGUgZG9tIHNlbGVjdGlvbiBpcyBpbiB0aGUgZWRpdG9yXG4gICAgICAgICAgICBjb25zdCBlZGl0b3JFbGVtZW50ID0gRURJVE9SX1RPX0VMRU1FTlQuZ2V0KHRoaXMuZWRpdG9yKSE7XG4gICAgICAgICAgICBsZXQgaGFzRG9tU2VsZWN0aW9uSW5FZGl0b3IgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChlZGl0b3JFbGVtZW50LmNvbnRhaW5zKGRvbVNlbGVjdGlvbi5hbmNob3JOb2RlKSAmJiBlZGl0b3JFbGVtZW50LmNvbnRhaW5zKGRvbVNlbGVjdGlvbi5mb2N1c05vZGUpKSB7XG4gICAgICAgICAgICAgICAgaGFzRG9tU2VsZWN0aW9uSW5FZGl0b3IgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB0aGUgRE9NIHNlbGVjdGlvbiBpcyBpbiB0aGUgZWRpdG9yIGFuZCB0aGUgZWRpdG9yIHNlbGVjdGlvbiBpcyBhbHJlYWR5IGNvcnJlY3QsIHdlJ3JlIGRvbmUuXG4gICAgICAgICAgICBpZiAoaGFzRG9tU2VsZWN0aW9uICYmIGhhc0RvbVNlbGVjdGlvbkluRWRpdG9yICYmIHNlbGVjdGlvbiAmJiBoYXNTdHJpbmdUYXJnZXQoZG9tU2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlRnJvbURPTVNlbGVjdGlvbiA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZVJhbmdlKHRoaXMuZWRpdG9yLCBkb21TZWxlY3Rpb24sIHsgc3VwcHJlc3NUaHJvdzogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICBpZiAocmFuZ2VGcm9tRE9NU2VsZWN0aW9uICYmIFJhbmdlLmVxdWFscyhyYW5nZUZyb21ET01TZWxlY3Rpb24sIHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gcHJldmVudCB1cGRhdGluZyBuYXRpdmUgc2VsZWN0aW9uIHdoZW4gYWN0aXZlIGVsZW1lbnQgaXMgdm9pZCBlbGVtZW50XG4gICAgICAgICAgICBpZiAoaXNUYXJnZXRJbnNpZGVWb2lkKHRoaXMuZWRpdG9yLCBhY3RpdmVFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gd2hlbiA8RWRpdGFibGUvPiBpcyBiZWluZyBjb250cm9sbGVkIHRocm91Z2ggZXh0ZXJuYWwgdmFsdWVcbiAgICAgICAgICAgIC8vIHRoZW4gaXRzIGNoaWxkcmVuIG1pZ2h0IGp1c3QgY2hhbmdlIC0gRE9NIHJlc3BvbmRzIHRvIGl0IG9uIGl0cyBvd25cbiAgICAgICAgICAgIC8vIGJ1dCBTbGF0ZSdzIHZhbHVlIGlzIG5vdCBiZWluZyB1cGRhdGVkIHRocm91Z2ggYW55IG9wZXJhdGlvblxuICAgICAgICAgICAgLy8gYW5kIHRodXMgaXQgZG9lc24ndCB0cmFuc2Zvcm0gc2VsZWN0aW9uIG9uIGl0cyBvd25cbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24gJiYgIUFuZ3VsYXJFZGl0b3IuaGFzUmFuZ2UodGhpcy5lZGl0b3IsIHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5zZWxlY3Rpb24gPSBBbmd1bGFyRWRpdG9yLnRvU2xhdGVSYW5nZSh0aGlzLmVkaXRvciwgZG9tU2VsZWN0aW9uLCB7IHN1cHByZXNzVGhyb3c6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZSBET00gc2VsZWN0aW9uIGlzIG91dCBvZiBzeW5jLCBzbyB1cGRhdGUgaXQuXG4gICAgICAgICAgICBjb25zdCBlbCA9IEFuZ3VsYXJFZGl0b3IudG9ET01Ob2RlKHRoaXMuZWRpdG9yLCB0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdTZWxlY3Rpb24gPSB0cnVlO1xuXG4gICAgICAgICAgICBjb25zdCBuZXdEb21SYW5nZSA9IHNlbGVjdGlvbiAmJiBBbmd1bGFyRWRpdG9yLnRvRE9NUmFuZ2UodGhpcy5lZGl0b3IsIHNlbGVjdGlvbik7XG5cbiAgICAgICAgICAgIGlmIChuZXdEb21SYW5nZSkge1xuICAgICAgICAgICAgICAgIC8vIENPTVBBVDogU2luY2UgdGhlIERPTSByYW5nZSBoYXMgbm8gY29uY2VwdCBvZiBiYWNrd2FyZHMvZm9yd2FyZHNcbiAgICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGNoZWNrIGFuZCBkbyB0aGUgcmlnaHQgdGhpbmcgaGVyZS5cbiAgICAgICAgICAgICAgICBpZiAoUmFuZ2UuaXNCYWNrd2FyZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICAgICAgICAgICAgIGRvbVNlbGVjdGlvbi5zZXRCYXNlQW5kRXh0ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RG9tUmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RG9tUmFuZ2UuZW5kT2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RG9tUmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdEb21SYW5nZS5zdGFydE9mZnNldFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICAgICAgICAgICAgIGRvbVNlbGVjdGlvbi5zZXRCYXNlQW5kRXh0ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RG9tUmFuZ2Uuc3RhcnRDb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdEb21SYW5nZS5zdGFydE9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0RvbVJhbmdlLmVuZENvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0RvbVJhbmdlLmVuZE9mZnNldFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZG9tU2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXdEb21SYW5nZSAmJiB0aGlzLnNjcm9sbFNlbGVjdGlvbkludG9WaWV3KHRoaXMuZWRpdG9yLCBuZXdEb21SYW5nZSk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIENPTVBBVDogSW4gRmlyZWZveCwgaXQncyBub3QgZW5vdWdoIHRvIGNyZWF0ZSBhIHJhbmdlLCB5b3UgYWxzbyBuZWVkXG4gICAgICAgICAgICAgICAgLy8gdG8gZm9jdXMgdGhlIGNvbnRlbnRlZGl0YWJsZSBlbGVtZW50IHRvby4gKDIwMTYvMTEvMTYpXG4gICAgICAgICAgICAgICAgaWYgKG5ld0RvbVJhbmdlICYmIElTX0ZJUkVGT1gpIHtcbiAgICAgICAgICAgICAgICAgICAgZWwuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdTZWxlY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5lZGl0b3Iub25FcnJvcih7XG4gICAgICAgICAgICAgICAgY29kZTogU2xhdGVFcnJvckNvZGUuVG9OYXRpdmVTZWxlY3Rpb25FcnJvcixcbiAgICAgICAgICAgICAgICBuYXRpdmVFcnJvcjogZXJyb3JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5pc1VwZGF0aW5nU2VsZWN0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5mb3JjZVJlbmRlcigpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodGhpcy5lZGl0b3IuY2hpbGRyZW4pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHt9XG5cbiAgICBuZ0RvQ2hlY2soKSB7fVxuXG4gICAgZm9yY2VSZW5kZXIoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29udGV4dCgpO1xuICAgICAgICB0aGlzLmxpc3RSZW5kZXIudXBkYXRlKHRoaXMuZWRpdG9yLmNoaWxkcmVuLCB0aGlzLmVkaXRvciwgdGhpcy5jb250ZXh0KTtcbiAgICAgICAgLy8gcmVwYWlyIGNvbGxhYm9yYXRpdmUgZWRpdGluZyB3aGVuIENoaW5lc2UgaW5wdXQgaXMgaW50ZXJydXB0ZWQgYnkgb3RoZXIgdXNlcnMnIGN1cnNvcnNcbiAgICAgICAgLy8gd2hlbiB0aGUgRE9NRWxlbWVudCB3aGVyZSB0aGUgc2VsZWN0aW9uIGlzIGxvY2F0ZWQgaXMgcmVtb3ZlZFxuICAgICAgICAvLyB0aGUgY29tcG9zaXRpb251cGRhdGUgYW5kIGNvbXBvc2l0aW9uZW5kIGV2ZW50cyB3aWxsIG5vIGxvbmdlciBiZSBmaXJlZFxuICAgICAgICAvLyBzbyBpc0NvbXBvc2luZyBuZWVkcyB0byBiZSBjb3JyZWN0ZWRcbiAgICAgICAgLy8gbmVlZCBleGVjIGFmdGVyIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSB0byByZW5kZXIgSFRNTFxuICAgICAgICAvLyBuZWVkIGV4ZWMgYmVmb3JlIHRoaXMudG9OYXRpdmVTZWxlY3Rpb24oKSB0byBjb3JyZWN0IG5hdGl2ZSBzZWxlY3Rpb25cbiAgICAgICAgaWYgKHRoaXMuaXNDb21wb3NpbmcpIHtcbiAgICAgICAgICAgIC8vIENvbXBvc2l0aW9uIGlucHV0IHRleHQgYmUgbm90IHJlbmRlcmVkIHdoZW4gdXNlciBjb21wb3NpdGlvbiBpbnB1dCB3aXRoIHNlbGVjdGlvbiBpcyBleHBhbmRlZFxuICAgICAgICAgICAgLy8gQXQgdGhpcyB0aW1lLCB0aGUgZm9sbG93aW5nIG1hdGNoaW5nIGNvbmRpdGlvbnMgYXJlIG1ldCwgYXNzaWduIGlzQ29tcG9zaW5nIHRvIGZhbHNlLCBhbmQgdGhlIHN0YXR1cyBpcyB3cm9uZ1xuICAgICAgICAgICAgLy8gdGhpcyB0aW1lIGNvbmRpdGlvbiBpcyB0cnVlIGFuZCBpc0NvbXBvc2lpbmcgaXMgYXNzaWduZWQgZmFsc2VcbiAgICAgICAgICAgIC8vIFRoZXJlZm9yZSwgbmVlZCB0byB3YWl0IGZvciB0aGUgY29tcG9zaXRpb24gaW5wdXQgdGV4dCB0byBiZSByZW5kZXJlZCBiZWZvcmUgcGVyZm9ybWluZyBjb25kaXRpb24gbWF0Y2hpbmdcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gTm9kZS5nZXQodGhpcy5lZGl0b3IsIHRoaXMuZWRpdG9yLnNlbGVjdGlvbi5hbmNob3IucGF0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dERPTU5vZGUgPSBBbmd1bGFyRWRpdG9yLnRvRE9NTm9kZSh0aGlzLmVkaXRvciwgdGV4dE5vZGUpO1xuICAgICAgICAgICAgICAgIGxldCB0ZXh0Q29udGVudCA9ICcnO1xuICAgICAgICAgICAgICAgIC8vIHNraXAgZGVjb3JhdGUgdGV4dFxuICAgICAgICAgICAgICAgIHRleHRET01Ob2RlLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tlZGl0YWJsZS10ZXh0XScpLmZvckVhY2goc3RyaW5nRE9NTm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZXh0ID0gc3RyaW5nRE9NTm9kZS50ZXh0Q29udGVudDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgemVyb0NoYXIgPSAnXFx1RkVGRic7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB6ZXJvIHdpdGggY2hhclxuICAgICAgICAgICAgICAgICAgICBpZiAodGV4dC5zdGFydHNXaXRoKHplcm9DaGFyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRleHQuZW5kc1dpdGgoemVyb0NoYXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCB0ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50ICs9IHRleHQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKE5vZGUuc3RyaW5nKHRleHROb2RlKS5lbmRzV2l0aCh0ZXh0Q29udGVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NvbXBvc2luZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9OYXRpdmVTZWxlY3Rpb24oKTtcbiAgICB9XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLnVwZGF0ZUNvbnRleHQoKTtcbiAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdFJlbmRlci51cGRhdGUodGhpcy5lZGl0b3IuY2hpbGRyZW4sIHRoaXMuZWRpdG9yLCB0aGlzLmNvbnRleHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlQ29udGV4dCgpIHtcbiAgICAgICAgY29uc3QgZGVjb3JhdGlvbnMgPSB0aGlzLmdlbmVyYXRlRGVjb3JhdGlvbnMoKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnNlbGVjdGlvbiAhPT0gdGhpcy5lZGl0b3Iuc2VsZWN0aW9uIHx8XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGVjb3JhdGUgIT09IHRoaXMuZGVjb3JhdGUgfHxcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5yZWFkb25seSAhPT0gdGhpcy5yZWFkb25seSB8fFxuICAgICAgICAgICAgIWlzRGVjb3JhdG9yUmFuZ2VMaXN0RXF1YWwodGhpcy5jb250ZXh0LmRlY29yYXRpb25zLCBkZWNvcmF0aW9ucylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgcGFyZW50OiB0aGlzLmVkaXRvcixcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb246IHRoaXMuZWRpdG9yLnNlbGVjdGlvbixcbiAgICAgICAgICAgICAgICBkZWNvcmF0aW9uczogZGVjb3JhdGlvbnMsXG4gICAgICAgICAgICAgICAgZGVjb3JhdGU6IHRoaXMuZGVjb3JhdGUsXG4gICAgICAgICAgICAgICAgcmVhZG9ubHk6IHRoaXMucmVhZG9ubHlcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZUNvbnRleHQoKSB7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IHtcbiAgICAgICAgICAgIHBhcmVudDogdGhpcy5lZGl0b3IsXG4gICAgICAgICAgICBzZWxlY3Rpb246IHRoaXMuZWRpdG9yLnNlbGVjdGlvbixcbiAgICAgICAgICAgIGRlY29yYXRpb25zOiB0aGlzLmdlbmVyYXRlRGVjb3JhdGlvbnMoKSxcbiAgICAgICAgICAgIGRlY29yYXRlOiB0aGlzLmRlY29yYXRlLFxuICAgICAgICAgICAgcmVhZG9ubHk6IHRoaXMucmVhZG9ubHlcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpbml0aWFsaXplVmlld0NvbnRleHQoKSB7XG4gICAgICAgIHRoaXMudmlld0NvbnRleHQgPSB7XG4gICAgICAgICAgICBlZGl0b3I6IHRoaXMuZWRpdG9yLFxuICAgICAgICAgICAgcmVuZGVyRWxlbWVudDogdGhpcy5yZW5kZXJFbGVtZW50LFxuICAgICAgICAgICAgcmVuZGVyTGVhZjogdGhpcy5yZW5kZXJMZWFmLFxuICAgICAgICAgICAgcmVuZGVyVGV4dDogdGhpcy5yZW5kZXJUZXh0LFxuICAgICAgICAgICAgdHJhY2tCeTogdGhpcy50cmFja0J5LFxuICAgICAgICAgICAgaXNTdHJpY3REZWNvcmF0ZTogdGhpcy5pc1N0cmljdERlY29yYXRlLFxuICAgICAgICAgICAgdGVtcGxhdGVDb21wb25lbnQ6IHRoaXMudGVtcGxhdGVDb21wb25lbnQsXG4gICAgICAgICAgICBkZWZhdWx0RWxlbWVudDogdGhpcy5kZWZhdWx0RWxlbWVudCxcbiAgICAgICAgICAgIGRlZmF1bHRUZXh0OiB0aGlzLmRlZmF1bHRUZXh0LFxuICAgICAgICAgICAgZGVmYXVsdFZvaWRUZXh0OiB0aGlzLmRlZmF1bHRWb2lkVGV4dCxcbiAgICAgICAgICAgIGRlZmF1bHRMZWFmOiB0aGlzLmRlZmF1bHRMZWFmXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY29tcG9zZVBsYWNlaG9sZGVyRGVjb3JhdGUoZWRpdG9yOiBFZGl0b3IpIHtcbiAgICAgICAgaWYgKHRoaXMucGxhY2Vob2xkZXJEZWNvcmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGxhY2Vob2xkZXJEZWNvcmF0ZShlZGl0b3IpIHx8IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucGxhY2Vob2xkZXIgJiYgZWRpdG9yLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5mcm9tKE5vZGUudGV4dHMoZWRpdG9yKSkubGVuZ3RoID09PSAxICYmIE5vZGUuc3RyaW5nKGVkaXRvcikgPT09ICcnKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IEVkaXRvci5zdGFydChlZGl0b3IsIFtdKTtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgYW5jaG9yOiBzdGFydCxcbiAgICAgICAgICAgICAgICAgICAgZm9jdXM6IHN0YXJ0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdlbmVyYXRlRGVjb3JhdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGRlY29yYXRpb25zID0gdGhpcy5kZWNvcmF0ZShbdGhpcy5lZGl0b3IsIFtdXSk7XG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyRGVjb3JhdGlvbnMgPSB0aGlzLmlzQ29tcG9zaW5nID8gW10gOiB0aGlzLmNvbXBvc2VQbGFjZWhvbGRlckRlY29yYXRlKHRoaXMuZWRpdG9yKTtcbiAgICAgICAgZGVjb3JhdGlvbnMucHVzaCguLi5wbGFjZWhvbGRlckRlY29yYXRpb25zKTtcbiAgICAgICAgcmV0dXJuIGRlY29yYXRpb25zO1xuICAgIH1cblxuICAgIC8vI3JlZ2lvbiBldmVudCBwcm94eVxuICAgIHByaXZhdGUgYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWU6IHN0cmluZywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXIsIHRhcmdldDogSFRNTEVsZW1lbnQgfCBEb2N1bWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMubWFudWFsTGlzdGVuZXJzLnB1c2goXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyMi5saXN0ZW4odGFyZ2V0LCBldmVudE5hbWUsIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBiZWZvcmVJbnB1dEV2ZW50ID0gZXh0cmFjdEJlZm9yZUlucHV0RXZlbnQoZXZlbnQudHlwZSwgbnVsbCwgZXZlbnQsIGV2ZW50LnRhcmdldCk7XG4gICAgICAgICAgICAgICAgaWYgKGJlZm9yZUlucHV0RXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkZhbGxiYWNrQmVmb3JlSW5wdXQoYmVmb3JlSW5wdXRFdmVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxpc3RlbmVyKGV2ZW50KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b1NsYXRlU2VsZWN0aW9uKCkge1xuICAgICAgICBpZiAoKCF0aGlzLmlzQ29tcG9zaW5nIHx8IElTX0FORFJPSUQpICYmICF0aGlzLmlzVXBkYXRpbmdTZWxlY3Rpb24gJiYgIXRoaXMuaXNEcmFnZ2luZ0ludGVybmFsbHkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdCA9IEFuZ3VsYXJFZGl0b3IuZmluZERvY3VtZW50T3JTaGFkb3dSb290KHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGFjdGl2ZUVsZW1lbnQgfSA9IHJvb3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgZWwgPSBBbmd1bGFyRWRpdG9yLnRvRE9NTm9kZSh0aGlzLmVkaXRvciwgdGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvbVNlbGVjdGlvbiA9IChyb290IGFzIERvY3VtZW50KS5nZXRTZWxlY3Rpb24oKTtcblxuICAgICAgICAgICAgICAgIGlmIChhY3RpdmVFbGVtZW50ID09PSBlbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhdGVzdEVsZW1lbnQgPSBhY3RpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBJU19GT0NVU0VELnNldCh0aGlzLmVkaXRvciwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgSVNfRk9DVVNFRC5kZWxldGUodGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghZG9tU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1zLmRlc2VsZWN0KHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBlZGl0b3JFbGVtZW50ID0gRURJVE9SX1RPX0VMRU1FTlQuZ2V0KHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgICAgICBjb25zdCBoYXNEb21TZWxlY3Rpb25JbkVkaXRvciA9XG4gICAgICAgICAgICAgICAgICAgIGVkaXRvckVsZW1lbnQuY29udGFpbnMoZG9tU2VsZWN0aW9uLmFuY2hvck5vZGUpICYmIGVkaXRvckVsZW1lbnQuY29udGFpbnMoZG9tU2VsZWN0aW9uLmZvY3VzTm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNEb21TZWxlY3Rpb25JbkVkaXRvcikge1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLmRlc2VsZWN0KHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHRyeSB0byBnZXQgdGhlIHNlbGVjdGlvbiBkaXJlY3RseSwgYmVjYXVzZSBzb21lIHRlcnJpYmxlIGNhc2UgY2FuIGJlIG5vcm1hbGl6ZSBmb3Igbm9ybWFsaXplRE9NUG9pbnRcbiAgICAgICAgICAgICAgICAvLyBmb3IgZXhhbXBsZSwgZG91YmxlLWNsaWNrIHRoZSBsYXN0IGNlbGwgb2YgdGhlIHRhYmxlIHRvIHNlbGVjdCBhIG5vbi1lZGl0YWJsZSBET01cbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZVJhbmdlKHRoaXMuZWRpdG9yLCBkb21TZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvci5zZWxlY3Rpb24gJiYgUmFuZ2UuZXF1YWxzKHJhbmdlLCB0aGlzLmVkaXRvci5zZWxlY3Rpb24pICYmICFoYXNTdHJpbmdUYXJnZXQoZG9tU2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVGFyZ2V0SW5zaWRlVm9pZCh0aGlzLmVkaXRvciwgYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvcmNlIGFkanVzdCBET01TZWxlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9OYXRpdmVTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KHRoaXMuZWRpdG9yLCByYW5nZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5vbkVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogU2xhdGVFcnJvckNvZGUuVG9TbGF0ZVNlbGVjdGlvbkVycm9yLFxuICAgICAgICAgICAgICAgICAgICBuYXRpdmVFcnJvcjogZXJyb3JcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25ET01CZWZvcmVJbnB1dChcbiAgICAgICAgZXZlbnQ6IEV2ZW50ICYge1xuICAgICAgICAgICAgaW5wdXRUeXBlOiBzdHJpbmc7XG4gICAgICAgICAgICBpc0NvbXBvc2luZzogYm9vbGVhbjtcbiAgICAgICAgICAgIGRhdGE6IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICBkYXRhVHJhbnNmZXI6IERhdGFUcmFuc2ZlciB8IG51bGw7XG4gICAgICAgICAgICBnZXRUYXJnZXRSYW5nZXMoKTogRE9NU3RhdGljUmFuZ2VbXTtcbiAgICAgICAgfVxuICAgICkge1xuICAgICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICAgICAgY29uc3Qgcm9vdCA9IEFuZ3VsYXJFZGl0b3IuZmluZERvY3VtZW50T3JTaGFkb3dSb290KHRoaXMuZWRpdG9yKTtcbiAgICAgICAgY29uc3QgeyBhY3RpdmVFbGVtZW50IH0gPSByb290O1xuICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gZWRpdG9yO1xuICAgICAgICBjb25zdCB7IGlucHV0VHlwZTogdHlwZSB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBldmVudC5kYXRhVHJhbnNmZXIgfHwgZXZlbnQuZGF0YSB8fCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChJU19BTkRST0lEKSB7XG4gICAgICAgICAgICBsZXQgdGFyZ2V0UmFuZ2U6IFJhbmdlIHwgbnVsbCA9IG51bGw7XG4gICAgICAgICAgICBsZXQgW25hdGl2ZVRhcmdldFJhbmdlXSA9IGV2ZW50LmdldFRhcmdldFJhbmdlcygpO1xuICAgICAgICAgICAgaWYgKG5hdGl2ZVRhcmdldFJhbmdlKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0UmFuZ2UgPSBBbmd1bGFyRWRpdG9yLnRvU2xhdGVSYW5nZShlZGl0b3IsIG5hdGl2ZVRhcmdldFJhbmdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENPTVBBVDogU2VsZWN0aW9uQ2hhbmdlIGV2ZW50IGlzIGZpcmVkIGFmdGVyIHRoZSBhY3Rpb24gaXMgcGVyZm9ybWVkLCBzbyB3ZVxuICAgICAgICAgICAgLy8gaGF2ZSB0byBtYW51YWxseSBnZXQgdGhlIHNlbGVjdGlvbiBoZXJlIHRvIGVuc3VyZSBpdCdzIHVwLXRvLWRhdGUuXG4gICAgICAgICAgICBjb25zdCB3aW5kb3cgPSBBbmd1bGFyRWRpdG9yLmdldFdpbmRvdyhlZGl0b3IpO1xuICAgICAgICAgICAgY29uc3QgZG9tU2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgaWYgKCF0YXJnZXRSYW5nZSAmJiBkb21TZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRSYW5nZSA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZVJhbmdlKGVkaXRvciwgZG9tU2VsZWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhcmdldFJhbmdlID0gdGFyZ2V0UmFuZ2UgPz8gZWRpdG9yLnNlbGVjdGlvbjtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnaW5zZXJ0Q29tcG9zaXRpb25UZXh0Jykge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEudG9TdHJpbmcoKS5pbmNsdWRlcygnXFxuJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdG9yZURvbShlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5pbnNlcnRCcmVhayhlZGl0b3IpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0UmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZURvbShlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5pbnNlcnRUZXh0KGVkaXRvciwgZGF0YS50b1N0cmluZygpLCB7IGF0OiB0YXJnZXRSYW5nZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZURvbShlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5kZWxldGUoZWRpdG9yLCB7IGF0OiB0YXJnZXRSYW5nZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2RlbGV0ZUNvbnRlbnRCYWNrd2FyZCcpIHtcbiAgICAgICAgICAgICAgICAvLyBnYm9hcmQgY2FuIG5vdCBwcmV2ZW50IGRlZmF1bHQgYWN0aW9uLCBzbyBtdXN0IHVzZSByZXN0b3JlRG9tLFxuICAgICAgICAgICAgICAgIC8vIHNvdWdvdSBLZXlib2FyZCBjYW4gcHJldmVudCBkZWZhdWx0IGFjdGlvbu+8iG9ubHkgaW4gQ2hpbmVzZSBpbnB1dCBtb2Rl77yJLlxuICAgICAgICAgICAgICAgIC8vIEluIG9yZGVyIHRvIGF2b2lkIHdlaXJkIGFjdGlvbiBpbiBTb3Vnb3UgS2V5Ym9hcmQsIHVzZSByZXNvdHJlRG9tIG9ubHkgcmFuZ2UncyBpc0NvbGxhcHNlZCBpcyBmYWxzZSAocmVjb2duaXplIGdib2FyZClcbiAgICAgICAgICAgICAgICBpZiAoIVJhbmdlLmlzQ29sbGFwc2VkKHRhcmdldFJhbmdlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN0b3JlRG9tKGVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5kZWxldGUoZWRpdG9yLCB7IGF0OiB0YXJnZXRSYW5nZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2luc2VydFRleHQnKSB7XG4gICAgICAgICAgICAgICAgcmVzdG9yZURvbShlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmluc2VydFRleHQoZWRpdG9yLCBkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5yZWFkb25seSAmJlxuICAgICAgICAgICAgaGFzRWRpdGFibGVUYXJnZXQoZWRpdG9yLCBldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhaXNUYXJnZXRJbnNpZGVWb2lkKGVkaXRvciwgYWN0aXZlRWxlbWVudCkgJiZcbiAgICAgICAgICAgICF0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50LCB0aGlzLmJlZm9yZUlucHV0KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgIC8vIENPTVBBVDogSWYgdGhlIHNlbGVjdGlvbiBpcyBleHBhbmRlZCwgZXZlbiBpZiB0aGUgY29tbWFuZCBzZWVtcyBsaWtlXG4gICAgICAgICAgICAgICAgLy8gYSBkZWxldGUgZm9yd2FyZC9iYWNrd2FyZCBjb21tYW5kIGl0IHNob3VsZCBkZWxldGUgdGhlIHNlbGVjdGlvbi5cbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIFJhbmdlLmlzRXhwYW5kZWQoc2VsZWN0aW9uKSAmJiB0eXBlLnN0YXJ0c1dpdGgoJ2RlbGV0ZScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHR5cGUuZW5kc1dpdGgoJ0JhY2t3YXJkJykgPyAnYmFja3dhcmQnIDogJ2ZvcndhcmQnO1xuICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRnJhZ21lbnQoZWRpdG9yLCB7IGRpcmVjdGlvbiB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdkZWxldGVCeUNvbXBvc2l0aW9uJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlQnlDdXQnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkZWxldGVCeURyYWcnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRnJhZ21lbnQoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlQ29udGVudCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RlbGV0ZUNvbnRlbnRGb3J3YXJkJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZvcndhcmQoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlQ29udGVudEJhY2t3YXJkJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUJhY2t3YXJkKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RlbGV0ZUVudGlyZVNvZnRMaW5lJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUJhY2t3YXJkKGVkaXRvciwgeyB1bml0OiAnbGluZScgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRm9yd2FyZChlZGl0b3IsIHsgdW5pdDogJ2xpbmUnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkZWxldGVIYXJkTGluZUJhY2t3YXJkJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUJhY2t3YXJkKGVkaXRvciwgeyB1bml0OiAnYmxvY2snIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkZWxldGVTb2Z0TGluZUJhY2t3YXJkJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUJhY2t3YXJkKGVkaXRvciwgeyB1bml0OiAnbGluZScgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RlbGV0ZUhhcmRMaW5lRm9yd2FyZCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVGb3J3YXJkKGVkaXRvciwgeyB1bml0OiAnYmxvY2snIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkZWxldGVTb2Z0TGluZUZvcndhcmQnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRm9yd2FyZChlZGl0b3IsIHsgdW5pdDogJ2xpbmUnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkZWxldGVXb3JkQmFja3dhcmQnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlQmFja3dhcmQoZWRpdG9yLCB7IHVuaXQ6ICd3b3JkJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlV29yZEZvcndhcmQnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRm9yd2FyZChlZGl0b3IsIHsgdW5pdDogJ3dvcmQnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbnNlcnRMaW5lQnJlYWsnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbnNlcnRQYXJhZ3JhcGgnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuaW5zZXJ0QnJlYWsoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5zZXJ0RnJvbUNvbXBvc2l0aW9uJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ09NUEFUOiBpbiBzYWZhcmksIGBjb21wb3NpdGlvbmVuZGAgZXZlbnQgaXMgZGlzcGF0Y2hlZCBhZnRlclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGJlZm9yZWlucHV0IGV2ZW50IHdpdGggdGhlIGlucHV0VHlwZSBcImluc2VydEZyb21Db21wb3NpdGlvblwiIGhhcyBiZWVuIGRpc3BhdGNoZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvaW5wdXQtZXZlbnRzLTIvXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzbyB0aGUgZm9sbG93aW5nIGNvZGUgaXMgdGhlIHJpZ2h0IGxvZ2ljXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIERPTSBzZWxlY3Rpb24gaW4gc3luYyB3aWxsIGJlIGV4ZWMgYmVmb3JlIGBjb21wb3NpdGlvbmVuZGAgZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzQ29tcG9zaW5nIGlzIHRydWUgd2lsbCBwcmV2ZW50IERPTSBzZWxlY3Rpb24gYmVpbmcgdXBkYXRlIGNvcnJlY3RseS5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb21wb3NpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnRJbnNlcnRGcm9tQ29tcG9zaXRpb24oZXZlbnQsIHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbnNlcnRGcm9tRHJvcCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luc2VydEZyb21QYXN0ZSc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luc2VydEZyb21ZYW5rJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5zZXJ0UmVwbGFjZW1lbnRUZXh0JzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5zZXJ0VGV4dCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVzZSBhIHdlYWsgY29tcGFyaXNvbiBpbnN0ZWFkIG9mICdpbnN0YW5jZW9mJyB0byBhbGxvd1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJvZ3JhbW1hdGljIGFjY2VzcyBvZiBwYXN0ZSBldmVudHMgY29taW5nIGZyb20gZXh0ZXJuYWwgd2luZG93c1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGlrZSBjeXByZXNzIHdoZXJlIGN5LndpbmRvdyBkb2VzIG5vdCB3b3JrIHJlYWxpYmx5XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YT8uY29uc3RydWN0b3IubmFtZSA9PT0gJ0RhdGFUcmFuc2ZlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbmd1bGFyRWRpdG9yLmluc2VydERhdGEoZWRpdG9yLCBkYXRhIGFzIERhdGFUcmFuc2Zlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5pbnNlcnRUZXh0KGVkaXRvciwgZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3Iub25FcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFNsYXRlRXJyb3JDb2RlLk9uRE9NQmVmb3JlSW5wdXRFcnJvcixcbiAgICAgICAgICAgICAgICAgICAgbmF0aXZlRXJyb3I6IGVycm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRE9NQmx1cihldmVudDogRm9jdXNFdmVudCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnJlYWRvbmx5IHx8XG4gICAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdTZWxlY3Rpb24gfHxcbiAgICAgICAgICAgICFoYXNFZGl0YWJsZVRhcmdldCh0aGlzLmVkaXRvciwgZXZlbnQudGFyZ2V0KSB8fFxuICAgICAgICAgICAgdGhpcy5pc0RPTUV2ZW50SGFuZGxlZChldmVudCwgdGhpcy5ibHVyKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdpbmRvdyA9IEFuZ3VsYXJFZGl0b3IuZ2V0V2luZG93KHRoaXMuZWRpdG9yKTtcblxuICAgICAgICAvLyBDT01QQVQ6IElmIHRoZSBjdXJyZW50IGBhY3RpdmVFbGVtZW50YCBpcyBzdGlsbCB0aGUgcHJldmlvdXNcbiAgICAgICAgLy8gb25lLCB0aGlzIGlzIGR1ZSB0byB0aGUgd2luZG93IGJlaW5nIGJsdXJyZWQgd2hlbiB0aGUgdGFiXG4gICAgICAgIC8vIGl0c2VsZiBiZWNvbWVzIHVuZm9jdXNlZCwgc28gd2Ugd2FudCB0byBhYm9ydCBlYXJseSB0byBhbGxvdyB0b1xuICAgICAgICAvLyBlZGl0b3IgdG8gc3RheSBmb2N1c2VkIHdoZW4gdGhlIHRhYiBiZWNvbWVzIGZvY3VzZWQgYWdhaW4uXG4gICAgICAgIGNvbnN0IHJvb3QgPSBBbmd1bGFyRWRpdG9yLmZpbmREb2N1bWVudE9yU2hhZG93Um9vdCh0aGlzLmVkaXRvcik7XG4gICAgICAgIGlmICh0aGlzLmxhdGVzdEVsZW1lbnQgPT09IHJvb3QuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyByZWxhdGVkVGFyZ2V0IH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgZWwgPSBBbmd1bGFyRWRpdG9yLnRvRE9NTm9kZSh0aGlzLmVkaXRvciwgdGhpcy5lZGl0b3IpO1xuXG4gICAgICAgIC8vIENPTVBBVDogVGhlIGV2ZW50IHNob3VsZCBiZSBpZ25vcmVkIGlmIHRoZSBmb2N1cyBpcyByZXR1cm5pbmdcbiAgICAgICAgLy8gdG8gdGhlIGVkaXRvciBmcm9tIGFuIGVtYmVkZGVkIGVkaXRhYmxlIGVsZW1lbnQgKGVnLiBhbiA8aW5wdXQ+XG4gICAgICAgIC8vIGVsZW1lbnQgaW5zaWRlIGEgdm9pZCBub2RlKS5cbiAgICAgICAgaWYgKHJlbGF0ZWRUYXJnZXQgPT09IGVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDT01QQVQ6IFRoZSBldmVudCBzaG91bGQgYmUgaWdub3JlZCBpZiB0aGUgZm9jdXMgaXMgbW92aW5nIGZyb21cbiAgICAgICAgLy8gdGhlIGVkaXRvciB0byBpbnNpZGUgYSB2b2lkIG5vZGUncyBzcGFjZXIgZWxlbWVudC5cbiAgICAgICAgaWYgKGlzRE9NRWxlbWVudChyZWxhdGVkVGFyZ2V0KSAmJiByZWxhdGVkVGFyZ2V0Lmhhc0F0dHJpYnV0ZSgnZGF0YS1zbGF0ZS1zcGFjZXInKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ09NUEFUOiBUaGUgZXZlbnQgc2hvdWxkIGJlIGlnbm9yZWQgaWYgdGhlIGZvY3VzIGlzIG1vdmluZyB0byBhXG4gICAgICAgIC8vIG5vbi0gZWRpdGFibGUgc2VjdGlvbiBvZiBhbiBlbGVtZW50IHRoYXQgaXNuJ3QgYSB2b2lkIG5vZGUgKGVnLlxuICAgICAgICAvLyBhIGxpc3QgaXRlbSBvZiB0aGUgY2hlY2sgbGlzdCBleGFtcGxlKS5cbiAgICAgICAgaWYgKHJlbGF0ZWRUYXJnZXQgIT0gbnVsbCAmJiBpc0RPTU5vZGUocmVsYXRlZFRhcmdldCkgJiYgQW5ndWxhckVkaXRvci5oYXNET01Ob2RlKHRoaXMuZWRpdG9yLCByZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZU5vZGUodGhpcy5lZGl0b3IsIHJlbGF0ZWRUYXJnZXQpO1xuXG4gICAgICAgICAgICBpZiAoRWxlbWVudC5pc0VsZW1lbnQobm9kZSkgJiYgIXRoaXMuZWRpdG9yLmlzVm9pZChub2RlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIElTX0ZPQ1VTRUQuZGVsZXRlKHRoaXMuZWRpdG9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRE9NQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMucmVhZG9ubHkgJiZcbiAgICAgICAgICAgIGhhc1RhcmdldCh0aGlzLmVkaXRvciwgZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAgICAgIXRoaXMuaXNET01FdmVudEhhbmRsZWQoZXZlbnQsIHRoaXMuY2xpY2spICYmXG4gICAgICAgICAgICBpc0RPTU5vZGUoZXZlbnQudGFyZ2V0KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBBbmd1bGFyRWRpdG9yLnRvU2xhdGVOb2RlKHRoaXMuZWRpdG9yLCBldmVudC50YXJnZXQpO1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IEFuZ3VsYXJFZGl0b3IuZmluZFBhdGgodGhpcy5lZGl0b3IsIG5vZGUpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBFZGl0b3Iuc3RhcnQodGhpcy5lZGl0b3IsIHBhdGgpO1xuICAgICAgICAgICAgY29uc3QgZW5kID0gRWRpdG9yLmVuZCh0aGlzLmVkaXRvciwgcGF0aCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0Vm9pZCA9IEVkaXRvci52b2lkKHRoaXMuZWRpdG9yLCB7IGF0OiBzdGFydCB9KTtcbiAgICAgICAgICAgIGNvbnN0IGVuZFZvaWQgPSBFZGl0b3Iudm9pZCh0aGlzLmVkaXRvciwgeyBhdDogZW5kIH0pO1xuXG4gICAgICAgICAgICBpZiAoZXZlbnQuZGV0YWlsID09PSBUUklQTEVfQ0xJQ0sgJiYgcGF0aC5sZW5ndGggPj0gMSkge1xuICAgICAgICAgICAgICAgIGxldCBibG9ja1BhdGggPSBwYXRoO1xuICAgICAgICAgICAgICAgIGlmICghKEVsZW1lbnQuaXNFbGVtZW50KG5vZGUpICYmIEVkaXRvci5pc0Jsb2NrKHRoaXMuZWRpdG9yLCBub2RlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2sgPSBFZGl0b3IuYWJvdmUodGhpcy5lZGl0b3IsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoOiBuID0+IEVsZW1lbnQuaXNFbGVtZW50KG4pICYmIEVkaXRvci5pc0Jsb2NrKHRoaXMuZWRpdG9yLCBuKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0OiBwYXRoXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrUGF0aCA9IGJsb2NrPy5bMV0gPz8gcGF0aC5zbGljZSgwLCAxKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IEVkaXRvci5yYW5nZSh0aGlzLmVkaXRvciwgYmxvY2tQYXRoKTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdCh0aGlzLmVkaXRvciwgcmFuZ2UpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN0YXJ0Vm9pZCAmJlxuICAgICAgICAgICAgICAgIGVuZFZvaWQgJiZcbiAgICAgICAgICAgICAgICBQYXRoLmVxdWFscyhzdGFydFZvaWRbMV0sIGVuZFZvaWRbMV0pICYmXG4gICAgICAgICAgICAgICAgIShBbmd1bGFyRWRpdG9yLmlzQmxvY2tDYXJkTGVmdEN1cnNvcih0aGlzLmVkaXRvcikgfHwgQW5ndWxhckVkaXRvci5pc0Jsb2NrQ2FyZFJpZ2h0Q3Vyc29yKHRoaXMuZWRpdG9yKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gRWRpdG9yLnJhbmdlKHRoaXMuZWRpdG9yLCBzdGFydCk7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QodGhpcy5lZGl0b3IsIHJhbmdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25ET01Db21wb3NpdGlvblN0YXJ0KGV2ZW50OiBDb21wb3NpdGlvbkV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSB0aGlzLmVkaXRvcjtcbiAgICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICAgICAgLy8gc29sdmUgdGhlIHByb2JsZW0gb2YgY3Jvc3Mgbm9kZSBDaGluZXNlIGlucHV0XG4gICAgICAgICAgICBpZiAoUmFuZ2UuaXNFeHBhbmRlZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZyYWdtZW50KHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVuZGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc0VkaXRhYmxlVGFyZ2V0KHRoaXMuZWRpdG9yLCBldmVudC50YXJnZXQpICYmICF0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50LCB0aGlzLmNvbXBvc2l0aW9uU3RhcnQpKSB7XG4gICAgICAgICAgICB0aGlzLmlzQ29tcG9zaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25ET01Db21wb3NpdGlvblVwZGF0ZShldmVudDogQ29tcG9zaXRpb25FdmVudCkge1xuICAgICAgICB0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50LCB0aGlzLmNvbXBvc2l0aW9uVXBkYXRlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRE9NQ29tcG9zaXRpb25FbmQoZXZlbnQ6IENvbXBvc2l0aW9uRXZlbnQpIHtcbiAgICAgICAgaWYgKCFldmVudC5kYXRhICYmICFSYW5nZS5pc0NvbGxhcHNlZCh0aGlzLmVkaXRvci5zZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICBUcmFuc2Zvcm1zLmRlbGV0ZSh0aGlzLmVkaXRvcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc0VkaXRhYmxlVGFyZ2V0KHRoaXMuZWRpdG9yLCBldmVudC50YXJnZXQpICYmICF0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50LCB0aGlzLmNvbXBvc2l0aW9uRW5kKSkge1xuICAgICAgICAgICAgLy8gQ09NUEFUOiBJbiBDaHJvbWUvRmlyZWZveCwgYGJlZm9yZWlucHV0YCBldmVudHMgZm9yIGNvbXBvc2l0aW9uc1xuICAgICAgICAgICAgLy8gYXJlbid0IGNvcnJlY3QgYW5kIG5ldmVyIGZpcmUgdGhlIFwiaW5zZXJ0RnJvbUNvbXBvc2l0aW9uXCJcbiAgICAgICAgICAgIC8vIHR5cGUgdGhhdCB3ZSBuZWVkLiBTbyBpbnN0ZWFkLCBpbnNlcnQgd2hlbmV2ZXIgYSBjb21wb3NpdGlvblxuICAgICAgICAgICAgLy8gZW5kcyBzaW5jZSBpdCB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIGNvbW1pdHRlZCB0byB0aGUgRE9NLlxuICAgICAgICAgICAgaWYgKHRoaXMuaXNDb21wb3NpbmcgPT09IHRydWUgJiYgIUlTX1NBRkFSSSAmJiAhSVNfQU5EUk9JRCAmJiBldmVudC5kYXRhKSB7XG4gICAgICAgICAgICAgICAgcHJldmVudEluc2VydEZyb21Db21wb3NpdGlvbihldmVudCwgdGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgICAgIEVkaXRvci5pbnNlcnRUZXh0KHRoaXMuZWRpdG9yLCBldmVudC5kYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ09NUEFUOiBJbiBGaXJlZm94IDg3LjAgQ29tcG9zaXRpb25FbmQgZmlyZSB0d2ljZVxuICAgICAgICAgICAgLy8gc28gd2UgbmVlZCBhdm9pZCByZXBlYXQgaXNuZXJ0VGV4dCBieSBpc0NvbXBvc2luZyA9PT0gdHJ1ZSxcbiAgICAgICAgICAgIHRoaXMuaXNDb21wb3NpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25ET01Db3B5KGV2ZW50OiBDbGlwYm9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCB3aW5kb3cgPSBBbmd1bGFyRWRpdG9yLmdldFdpbmRvdyh0aGlzLmVkaXRvcik7XG4gICAgICAgIGNvbnN0IGlzT3V0c2lkZVNsYXRlID0gIWhhc1N0cmluZ1RhcmdldCh3aW5kb3cuZ2V0U2VsZWN0aW9uKCkpICYmIGlzVGFyZ2V0SW5zaWRlVm9pZCh0aGlzLmVkaXRvciwgZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgaWYgKCFpc091dHNpZGVTbGF0ZSAmJiBoYXNUYXJnZXQodGhpcy5lZGl0b3IsIGV2ZW50LnRhcmdldCkgJiYgIXRoaXMuaXNET01FdmVudEhhbmRsZWQoZXZlbnQsIHRoaXMuY29weSkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBBbmd1bGFyRWRpdG9yLnNldEZyYWdtZW50RGF0YSh0aGlzLmVkaXRvciwgZXZlbnQuY2xpcGJvYXJkRGF0YSwgJ2NvcHknKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25ET01DdXQoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5yZWFkb25seSAmJiBoYXNFZGl0YWJsZVRhcmdldCh0aGlzLmVkaXRvciwgZXZlbnQudGFyZ2V0KSAmJiAhdGhpcy5pc0RPTUV2ZW50SGFuZGxlZChldmVudCwgdGhpcy5jdXQpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgQW5ndWxhckVkaXRvci5zZXRGcmFnbWVudERhdGEodGhpcy5lZGl0b3IsIGV2ZW50LmNsaXBib2FyZERhdGEsICdjdXQnKTtcbiAgICAgICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSB0aGlzLmVkaXRvcjtcblxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIEFuZ3VsYXJFZGl0b3IuZGVsZXRlQ3V0RGF0YSh0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRE9NRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICAgICBpZiAoaGFzVGFyZ2V0KHRoaXMuZWRpdG9yLCBldmVudC50YXJnZXQpICYmICF0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50LCB0aGlzLmRyYWdPdmVyKSkge1xuICAgICAgICAgICAgLy8gT25seSB3aGVuIHRoZSB0YXJnZXQgaXMgdm9pZCwgY2FsbCBgcHJldmVudERlZmF1bHRgIHRvIHNpZ25hbFxuICAgICAgICAgICAgLy8gdGhhdCBkcm9wcyBhcmUgYWxsb3dlZC4gRWRpdGFibGUgY29udGVudCBpcyBkcm9wcGFibGUgYnlcbiAgICAgICAgICAgIC8vIGRlZmF1bHQsIGFuZCBjYWxsaW5nIGBwcmV2ZW50RGVmYXVsdGAgaGlkZXMgdGhlIGN1cnNvci5cbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBBbmd1bGFyRWRpdG9yLnRvU2xhdGVOb2RlKHRoaXMuZWRpdG9yLCBldmVudC50YXJnZXQpO1xuXG4gICAgICAgICAgICBpZiAoRWxlbWVudC5pc0VsZW1lbnQobm9kZSkgJiYgRWRpdG9yLmlzVm9pZCh0aGlzLmVkaXRvciwgbm9kZSkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRPTURyYWdTdGFydChldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5yZWFkb25seSAmJiBoYXNUYXJnZXQodGhpcy5lZGl0b3IsIGV2ZW50LnRhcmdldCkgJiYgIXRoaXMuaXNET01FdmVudEhhbmRsZWQoZXZlbnQsIHRoaXMuZHJhZ1N0YXJ0KSkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZU5vZGUodGhpcy5lZGl0b3IsIGV2ZW50LnRhcmdldCk7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gQW5ndWxhckVkaXRvci5maW5kUGF0aCh0aGlzLmVkaXRvciwgbm9kZSk7XG4gICAgICAgICAgICBjb25zdCB2b2lkTWF0Y2ggPVxuICAgICAgICAgICAgICAgIEVsZW1lbnQuaXNFbGVtZW50KG5vZGUpICYmIChFZGl0b3IuaXNWb2lkKHRoaXMuZWRpdG9yLCBub2RlKSB8fCBFZGl0b3Iudm9pZCh0aGlzLmVkaXRvciwgeyBhdDogcGF0aCwgdm9pZHM6IHRydWUgfSkpO1xuXG4gICAgICAgICAgICAvLyBJZiBzdGFydGluZyBhIGRyYWcgb24gYSB2b2lkIG5vZGUsIG1ha2Ugc3VyZSBpdCBpcyBzZWxlY3RlZFxuICAgICAgICAgICAgLy8gc28gdGhhdCBpdCBzaG93cyB1cCBpbiB0aGUgc2VsZWN0aW9uJ3MgZnJhZ21lbnQuXG4gICAgICAgICAgICBpZiAodm9pZE1hdGNoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBFZGl0b3IucmFuZ2UodGhpcy5lZGl0b3IsIHBhdGgpO1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KHRoaXMuZWRpdG9yLCByYW5nZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaXNEcmFnZ2luZ0ludGVybmFsbHkgPSB0cnVlO1xuXG4gICAgICAgICAgICBBbmd1bGFyRWRpdG9yLnNldEZyYWdtZW50RGF0YSh0aGlzLmVkaXRvciwgZXZlbnQuZGF0YVRyYW5zZmVyLCAnZHJhZycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRPTURyb3AoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICAgICAgaWYgKCF0aGlzLnJlYWRvbmx5ICYmIGhhc1RhcmdldCh0aGlzLmVkaXRvciwgZXZlbnQudGFyZ2V0KSAmJiAhdGhpcy5pc0RPTUV2ZW50SGFuZGxlZChldmVudCwgdGhpcy5kcm9wKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIC8vIEtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIGRyYWdnZWQgcmFuZ2UgYmVmb3JlIHVwZGF0aW5nIHNlbGVjdGlvblxuICAgICAgICAgICAgY29uc3QgZHJhZ2dlZFJhbmdlID0gZWRpdG9yLnNlbGVjdGlvbjtcblxuICAgICAgICAgICAgLy8gRmluZCB0aGUgcmFuZ2Ugd2hlcmUgdGhlIGRyb3AgaGFwcGVuZWRcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gQW5ndWxhckVkaXRvci5maW5kRXZlbnRSYW5nZShlZGl0b3IsIGV2ZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBldmVudC5kYXRhVHJhbnNmZXI7XG5cbiAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgcmFuZ2UpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pc0RyYWdnaW5nSW50ZXJuYWxseSkge1xuICAgICAgICAgICAgICAgIGlmIChkcmFnZ2VkUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5kZWxldGUoZWRpdG9yLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdDogZHJhZ2dlZFJhbmdlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuaXNEcmFnZ2luZ0ludGVybmFsbHkgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQW5ndWxhckVkaXRvci5pbnNlcnREYXRhKGVkaXRvciwgZGF0YSk7XG5cbiAgICAgICAgICAgIC8vIFdoZW4gZHJhZ2dpbmcgZnJvbSBhbm90aGVyIHNvdXJjZSBpbnRvIHRoZSBlZGl0b3IsIGl0J3MgcG9zc2libGVcbiAgICAgICAgICAgIC8vIHRoYXQgdGhlIGN1cnJlbnQgZWRpdG9yIGRvZXMgbm90IGhhdmUgZm9jdXMuXG4gICAgICAgICAgICBpZiAoIUFuZ3VsYXJFZGl0b3IuaXNGb2N1c2VkKGVkaXRvcikpIHtcbiAgICAgICAgICAgICAgICBBbmd1bGFyRWRpdG9yLmZvY3VzKGVkaXRvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRE9NRHJhZ0VuZChldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLnJlYWRvbmx5ICYmXG4gICAgICAgICAgICB0aGlzLmlzRHJhZ2dpbmdJbnRlcm5hbGx5ICYmXG4gICAgICAgICAgICBoYXNUYXJnZXQodGhpcy5lZGl0b3IsIGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICAgICAgICF0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50LCB0aGlzLmRyYWdFbmQpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5pc0RyYWdnaW5nSW50ZXJuYWxseSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRPTUZvY3VzKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5yZWFkb25seSAmJlxuICAgICAgICAgICAgIXRoaXMuaXNVcGRhdGluZ1NlbGVjdGlvbiAmJlxuICAgICAgICAgICAgaGFzRWRpdGFibGVUYXJnZXQodGhpcy5lZGl0b3IsIGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICAgICAgICF0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50LCB0aGlzLmZvY3VzKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGVsID0gQW5ndWxhckVkaXRvci50b0RPTU5vZGUodGhpcy5lZGl0b3IsIHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IHJvb3QgPSBBbmd1bGFyRWRpdG9yLmZpbmREb2N1bWVudE9yU2hhZG93Um9vdCh0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICB0aGlzLmxhdGVzdEVsZW1lbnQgPSByb290LmFjdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgICAgIC8vIENPTVBBVDogSWYgdGhlIGVkaXRvciBoYXMgbmVzdGVkIGVkaXRhYmxlIGVsZW1lbnRzLCB0aGUgZm9jdXNcbiAgICAgICAgICAgIC8vIGNhbiBnbyB0byB0aGVtLiBJbiBGaXJlZm94LCB0aGlzIG11c3QgYmUgcHJldmVudGVkIGJlY2F1c2UgaXRcbiAgICAgICAgICAgIC8vIHJlc3VsdHMgaW4gaXNzdWVzIHdpdGgga2V5Ym9hcmQgbmF2aWdhdGlvbi4gKDIwMTcvMDMvMzApXG4gICAgICAgICAgICBpZiAoSVNfRklSRUZPWCAmJiBldmVudC50YXJnZXQgIT09IGVsKSB7XG4gICAgICAgICAgICAgICAgZWwuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIElTX0ZPQ1VTRUQuc2V0KHRoaXMuZWRpdG9yLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25ET01LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yO1xuICAgICAgICBjb25zdCByb290ID0gQW5ndWxhckVkaXRvci5maW5kRG9jdW1lbnRPclNoYWRvd1Jvb3QodGhpcy5lZGl0b3IpO1xuICAgICAgICBjb25zdCB7IGFjdGl2ZUVsZW1lbnQgfSA9IHJvb3Q7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLnJlYWRvbmx5ICYmXG4gICAgICAgICAgICBoYXNFZGl0YWJsZVRhcmdldChlZGl0b3IsIGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICAgICAgICFpc1RhcmdldEluc2lkZVZvaWQoZWRpdG9yLCBhY3RpdmVFbGVtZW50KSAmJiAvLyBzdG9wIGZpcmUga2V5ZG93biBoYW5kbGUgd2hlbiBmb2N1cyB2b2lkIG5vZGVcbiAgICAgICAgICAgICF0aGlzLmlzQ29tcG9zaW5nICYmXG4gICAgICAgICAgICAhdGhpcy5pc0RPTUV2ZW50SGFuZGxlZChldmVudCwgdGhpcy5rZXlkb3duKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IG5hdGl2ZUV2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gZWRpdG9yO1xuXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZWRpdG9yLmNoaWxkcmVuW3NlbGVjdGlvbiAhPT0gbnVsbCA/IHNlbGVjdGlvbi5mb2N1cy5wYXRoWzBdIDogMF07XG4gICAgICAgICAgICBjb25zdCBpc1JUTCA9IGRpcmVjdGlvbihOb2RlLnN0cmluZyhlbGVtZW50KSkgPT09ICdydGwnO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIENPTVBBVDogU2luY2Ugd2UgcHJldmVudCB0aGUgZGVmYXVsdCBiZWhhdmlvciBvblxuICAgICAgICAgICAgICAgIC8vIGBiZWZvcmVpbnB1dGAgZXZlbnRzLCB0aGUgYnJvd3NlciBkb2Vzbid0IHRoaW5rIHRoZXJlJ3MgZXZlclxuICAgICAgICAgICAgICAgIC8vIGFueSBoaXN0b3J5IHN0YWNrIHRvIHVuZG8gb3IgcmVkbywgc28gd2UgaGF2ZSB0byBtYW5hZ2UgdGhlc2VcbiAgICAgICAgICAgICAgICAvLyBob3RrZXlzIG91cnNlbHZlcy4gKDIwMTkvMTEvMDYpXG4gICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNSZWRvKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChIaXN0b3J5RWRpdG9yLmlzSGlzdG9yeUVkaXRvcihlZGl0b3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3IucmVkbygpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChIb3RrZXlzLmlzVW5kbyhuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoSGlzdG9yeUVkaXRvci5pc0hpc3RvcnlFZGl0b3IoZWRpdG9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLnVuZG8oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBDT01QQVQ6IENlcnRhaW4gYnJvd3NlcnMgZG9uJ3QgaGFuZGxlIHRoZSBzZWxlY3Rpb24gdXBkYXRlc1xuICAgICAgICAgICAgICAgIC8vIHByb3Blcmx5LiBJbiBDaHJvbWUsIHRoZSBzZWxlY3Rpb24gaXNuJ3QgcHJvcGVybHkgZXh0ZW5kZWQuXG4gICAgICAgICAgICAgICAgLy8gQW5kIGluIEZpcmVmb3gsIHRoZSBzZWxlY3Rpb24gaXNuJ3QgcHJvcGVybHkgY29sbGFwc2VkLlxuICAgICAgICAgICAgICAgIC8vICgyMDE3LzEwLzE3KVxuICAgICAgICAgICAgICAgIGlmIChIb3RrZXlzLmlzTW92ZUxpbmVCYWNrd2FyZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5tb3ZlKGVkaXRvciwgeyB1bml0OiAnbGluZScsIHJldmVyc2U6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc01vdmVMaW5lRm9yd2FyZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5tb3ZlKGVkaXRvciwgeyB1bml0OiAnbGluZScgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc0V4dGVuZExpbmVCYWNrd2FyZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5tb3ZlKGVkaXRvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5pdDogJ2xpbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZWRnZTogJ2ZvY3VzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2U6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc0V4dGVuZExpbmVGb3J3YXJkKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLm1vdmUoZWRpdG9yLCB7IHVuaXQ6ICdsaW5lJywgZWRnZTogJ2ZvY3VzJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIENPTVBBVDogSWYgYSB2b2lkIG5vZGUgaXMgc2VsZWN0ZWQsIG9yIGEgemVyby13aWR0aCB0ZXh0IG5vZGVcbiAgICAgICAgICAgICAgICAvLyBhZGphY2VudCB0byBhbiBpbmxpbmUgaXMgc2VsZWN0ZWQsIHdlIG5lZWQgdG8gaGFuZGxlIHRoZXNlXG4gICAgICAgICAgICAgICAgLy8gaG90a2V5cyBtYW51YWxseSBiZWNhdXNlIGJyb3dzZXJzIHdvbid0IGJlIGFibGUgdG8gc2tpcCBvdmVyXG4gICAgICAgICAgICAgICAgLy8gdGhlIHZvaWQgbm9kZSB3aXRoIHRoZSB6ZXJvLXdpZHRoIHNwYWNlIG5vdCBiZWluZyBhbiBlbXB0eVxuICAgICAgICAgICAgICAgIC8vIHN0cmluZy5cbiAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc01vdmVCYWNrd2FyZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIFJhbmdlLmlzQ29sbGFwc2VkKHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMubW92ZShlZGl0b3IsIHsgcmV2ZXJzZTogIWlzUlRMIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5jb2xsYXBzZShlZGl0b3IsIHsgZWRnZTogJ3N0YXJ0JyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc01vdmVGb3J3YXJkKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb24gJiYgUmFuZ2UuaXNDb2xsYXBzZWQoc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5tb3ZlKGVkaXRvciwgeyByZXZlcnNlOiBpc1JUTCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuY29sbGFwc2UoZWRpdG9yLCB7IGVkZ2U6ICdlbmQnIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChIb3RrZXlzLmlzTW92ZVdvcmRCYWNrd2FyZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIFJhbmdlLmlzRXhwYW5kZWQoc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5jb2xsYXBzZShlZGl0b3IsIHsgZWRnZTogJ2ZvY3VzJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMubW92ZShlZGl0b3IsIHsgdW5pdDogJ3dvcmQnLCByZXZlcnNlOiAhaXNSVEwgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc01vdmVXb3JkRm9yd2FyZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIFJhbmdlLmlzRXhwYW5kZWQoc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5jb2xsYXBzZShlZGl0b3IsIHsgZWRnZTogJ2ZvY3VzJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMubW92ZShlZGl0b3IsIHsgdW5pdDogJ3dvcmQnLCByZXZlcnNlOiBpc1JUTCB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIENPTVBBVDogQ2VydGFpbiBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSBgYmVmb3JlaW5wdXRgIGV2ZW50LCBzbyB3ZVxuICAgICAgICAgICAgICAgIC8vIGZhbGwgYmFjayB0byBndWVzc2luZyBhdCB0aGUgaW5wdXQgaW50ZW50aW9uIGZvciBob3RrZXlzLlxuICAgICAgICAgICAgICAgIC8vIENPTVBBVDogSW4gaU9TLCBzb21lIG9mIHRoZXNlIGhvdGtleXMgYXJlIGhhbmRsZWQgaW4gdGhlXG4gICAgICAgICAgICAgICAgaWYgKCFIQVNfQkVGT1JFX0lOUFVUX1NVUFBPUlQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIGNvcmUgYmVoYXZpb3IgZm9yIHRoZXNlLCBidXQgdGhleSBjaGFuZ2UgdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIERPTSBpZiB3ZSBkb24ndCBwcmV2ZW50IHRoZW0sIHNvIHdlIGhhdmUgdG8uXG4gICAgICAgICAgICAgICAgICAgIGlmIChIb3RrZXlzLmlzQm9sZChuYXRpdmVFdmVudCkgfHwgSG90a2V5cy5pc0l0YWxpYyhuYXRpdmVFdmVudCkgfHwgSG90a2V5cy5pc1RyYW5zcG9zZUNoYXJhY3RlcihuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc1NwbGl0QmxvY2sobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmluc2VydEJyZWFrKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc0RlbGV0ZUJhY2t3YXJkKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBSYW5nZS5pc0V4cGFuZGVkKHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRnJhZ21lbnQoZWRpdG9yLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogJ2JhY2t3YXJkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlQmFja3dhcmQoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNEZWxldGVGb3J3YXJkKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBSYW5nZS5pc0V4cGFuZGVkKHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRnJhZ21lbnQoZWRpdG9yLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogJ2ZvcndhcmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVGb3J3YXJkKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChIb3RrZXlzLmlzRGVsZXRlTGluZUJhY2t3YXJkKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBSYW5nZS5pc0V4cGFuZGVkKHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRnJhZ21lbnQoZWRpdG9yLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogJ2JhY2t3YXJkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlQmFja3dhcmQoZWRpdG9yLCB7IHVuaXQ6ICdsaW5lJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNEZWxldGVMaW5lRm9yd2FyZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb24gJiYgUmFuZ2UuaXNFeHBhbmRlZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZyYWdtZW50KGVkaXRvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb246ICdmb3J3YXJkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRm9yd2FyZChlZGl0b3IsIHsgdW5pdDogJ2xpbmUnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc0RlbGV0ZVdvcmRCYWNrd2FyZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb24gJiYgUmFuZ2UuaXNFeHBhbmRlZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZyYWdtZW50KGVkaXRvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb246ICdiYWNrd2FyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUJhY2t3YXJkKGVkaXRvciwgeyB1bml0OiAnd29yZCcgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChIb3RrZXlzLmlzRGVsZXRlV29yZEZvcndhcmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIFJhbmdlLmlzRXhwYW5kZWQoc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVGcmFnbWVudChlZGl0b3IsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAnZm9yd2FyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZvcndhcmQoZWRpdG9yLCB7IHVuaXQ6ICd3b3JkJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKElTX0NIUk9NRSB8fCBJU19TQUZBUkkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENPTVBBVDogQ2hyb21lIGFuZCBTYWZhcmkgc3VwcG9ydCBgYmVmb3JlaW5wdXRgIGV2ZW50IGJ1dCBkbyBub3QgZmlyZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW4gZXZlbnQgd2hlbiBkZWxldGluZyBiYWNrd2FyZHMgaW4gYSBzZWxlY3RlZCB2b2lkIGlubGluZSBub2RlXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKEhvdGtleXMuaXNEZWxldGVCYWNrd2FyZChuYXRpdmVFdmVudCkgfHwgSG90a2V5cy5pc0RlbGV0ZUZvcndhcmQobmF0aXZlRXZlbnQpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhbmdlLmlzQ29sbGFwc2VkKHNlbGVjdGlvbilcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gTm9kZS5wYXJlbnQoZWRpdG9yLCBzZWxlY3Rpb24uYW5jaG9yLnBhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudC5pc0VsZW1lbnQoY3VycmVudE5vZGUpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5pc1ZvaWQoZWRpdG9yLCBjdXJyZW50Tm9kZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEVkaXRvci5pc0lubGluZShlZGl0b3IsIGN1cnJlbnROb2RlKSB8fCBFZGl0b3IuaXNCbG9jayhlZGl0b3IsIGN1cnJlbnROb2RlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUJhY2t3YXJkKGVkaXRvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdDogJ2Jsb2NrJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3Iub25FcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFNsYXRlRXJyb3JDb2RlLk9uRE9NS2V5ZG93bkVycm9yLFxuICAgICAgICAgICAgICAgICAgICBuYXRpdmVFcnJvcjogZXJyb3JcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25ET01QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcbiAgICAgICAgLy8gQ09NUEFUOiBDZXJ0YWluIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgdGhlIGBiZWZvcmVpbnB1dGAgZXZlbnQsIHNvIHdlXG4gICAgICAgIC8vIGZhbGwgYmFjayB0byBSZWFjdCdzIGBvblBhc3RlYCBoZXJlIGluc3RlYWQuXG4gICAgICAgIC8vIENPTVBBVDogRmlyZWZveCwgQ2hyb21lIGFuZCBTYWZhcmkgYXJlIG5vdCBlbWl0dGluZyBgYmVmb3JlaW5wdXRgIGV2ZW50c1xuICAgICAgICAvLyB3aGVuIFwicGFzdGUgd2l0aG91dCBmb3JtYXR0aW5nXCIgb3B0aW9uIGlzIHVzZWQuXG4gICAgICAgIC8vIFRoaXMgdW5mb3J0dW5hdGVseSBuZWVkcyB0byBiZSBoYW5kbGVkIHdpdGggcGFzdGUgZXZlbnRzIGluc3RlYWQuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50LCB0aGlzLnBhc3RlKSAmJlxuICAgICAgICAgICAgKCFIQVNfQkVGT1JFX0lOUFVUX1NVUFBPUlQgfHwgaXNQbGFpblRleHRPbmx5UGFzdGUoZXZlbnQpIHx8IGZvcmNlT25ET01QYXN0ZSkgJiZcbiAgICAgICAgICAgICF0aGlzLnJlYWRvbmx5ICYmXG4gICAgICAgICAgICBoYXNFZGl0YWJsZVRhcmdldCh0aGlzLmVkaXRvciwgZXZlbnQudGFyZ2V0KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBBbmd1bGFyRWRpdG9yLmluc2VydERhdGEodGhpcy5lZGl0b3IsIGV2ZW50LmNsaXBib2FyZERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkZhbGxiYWNrQmVmb3JlSW5wdXQoZXZlbnQ6IEJlZm9yZUlucHV0RXZlbnQpIHtcbiAgICAgICAgLy8gQ09NUEFUOiBDZXJ0YWluIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgdGhlIGBiZWZvcmVpbnB1dGAgZXZlbnQsIHNvIHdlXG4gICAgICAgIC8vIGZhbGwgYmFjayB0byBSZWFjdCdzIGxlYWt5IHBvbHlmaWxsIGluc3RlYWQganVzdCBmb3IgaXQuIEl0XG4gICAgICAgIC8vIG9ubHkgd29ya3MgZm9yIHRoZSBgaW5zZXJ0VGV4dGAgaW5wdXQgdHlwZS5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIUhBU19CRUZPUkVfSU5QVVRfU1VQUE9SVCAmJlxuICAgICAgICAgICAgIXRoaXMucmVhZG9ubHkgJiZcbiAgICAgICAgICAgICF0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50Lm5hdGl2ZUV2ZW50LCB0aGlzLmJlZm9yZUlucHV0KSAmJlxuICAgICAgICAgICAgaGFzRWRpdGFibGVUYXJnZXQodGhpcy5lZGl0b3IsIGV2ZW50Lm5hdGl2ZUV2ZW50LnRhcmdldClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBldmVudC5uYXRpdmVFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gZXZlbnQuZGF0YTtcbiAgICAgICAgICAgICAgICBpZiAoIVJhbmdlLmlzQ29sbGFwc2VkKHRoaXMuZWRpdG9yLnNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZyYWdtZW50KHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8ganVzdCBoYW5kbGUgTm9uLUlNRSBpbnB1dFxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0NvbXBvc2luZykge1xuICAgICAgICAgICAgICAgICAgICBFZGl0b3IuaW5zZXJ0VGV4dCh0aGlzLmVkaXRvciwgdGV4dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5vbkVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogU2xhdGVFcnJvckNvZGUuVG9OYXRpdmVTZWxlY3Rpb25FcnJvcixcbiAgICAgICAgICAgICAgICAgICAgbmF0aXZlRXJyb3I6IGVycm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50OiBFdmVudCwgaGFuZGxlcj86IChldmVudDogRXZlbnQpID0+IHZvaWQpIHtcbiAgICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlcihldmVudCk7XG4gICAgICAgIHJldHVybiBldmVudC5kZWZhdWx0UHJldmVudGVkO1xuICAgIH1cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBOT0RFX1RPX0VMRU1FTlQuZGVsZXRlKHRoaXMuZWRpdG9yKTtcbiAgICAgICAgdGhpcy5tYW51YWxMaXN0ZW5lcnMuZm9yRWFjaChtYW51YWxMaXN0ZW5lciA9PiB7XG4gICAgICAgICAgICBtYW51YWxMaXN0ZW5lcigpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICBFRElUT1JfVE9fT05fQ0hBTkdFLmRlbGV0ZSh0aGlzLmVkaXRvcik7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgZGVmYXVsdFNjcm9sbFNlbGVjdGlvbkludG9WaWV3ID0gKGVkaXRvcjogQW5ndWxhckVkaXRvciwgZG9tUmFuZ2U6IERPTVJhbmdlKSA9PiB7XG4gICAgLy8gVGhpcyB3YXMgYWZmZWN0aW5nIHRoZSBzZWxlY3Rpb24gb2YgbXVsdGlwbGUgYmxvY2tzIGFuZCBkcmFnZ2luZyBiZWhhdmlvcixcbiAgICAvLyBzbyBlbmFibGVkIG9ubHkgaWYgdGhlIHNlbGVjdGlvbiBoYXMgYmVlbiBjb2xsYXBzZWQuXG4gICAgaWYgKGRvbVJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAmJiAoIWVkaXRvci5zZWxlY3Rpb24gfHwgKGVkaXRvci5zZWxlY3Rpb24gJiYgUmFuZ2UuaXNDb2xsYXBzZWQoZWRpdG9yLnNlbGVjdGlvbikpKSkge1xuICAgICAgICBjb25zdCBsZWFmRWwgPSBkb21SYW5nZS5zdGFydENvbnRhaW5lci5wYXJlbnRFbGVtZW50ITtcbiAgICAgICAgbGVhZkVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9IGRvbVJhbmdlLmdldEJvdW5kaW5nQ2xpZW50UmVjdC5iaW5kKGRvbVJhbmdlKTtcbiAgICAgICAgc2Nyb2xsSW50b1ZpZXcobGVhZkVsLCB7XG4gICAgICAgICAgICBzY3JvbGxNb2RlOiAnaWYtbmVlZGVkJ1xuICAgICAgICB9KTtcbiAgICAgICAgZGVsZXRlIGxlYWZFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3Q7XG4gICAgfVxufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgdGFyZ2V0IGlzIGVkaXRhYmxlIGFuZCBpbiB0aGUgZWRpdG9yLlxuICovXG5cbmV4cG9ydCBjb25zdCBoYXNFZGl0YWJsZVRhcmdldCA9IChlZGl0b3I6IEFuZ3VsYXJFZGl0b3IsIHRhcmdldDogRXZlbnRUYXJnZXQgfCBudWxsKTogdGFyZ2V0IGlzIERPTU5vZGUgPT4ge1xuICAgIHJldHVybiBpc0RPTU5vZGUodGFyZ2V0KSAmJiBBbmd1bGFyRWRpdG9yLmhhc0RPTU5vZGUoZWRpdG9yLCB0YXJnZXQsIHsgZWRpdGFibGU6IHRydWUgfSk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHR3byBET00gcmFuZ2Ugb2JqZWN0cyBhcmUgZXF1YWwuXG4gKi9cbmNvbnN0IGlzUmFuZ2VFcXVhbCA9IChhOiBET01SYW5nZSwgYjogRE9NUmFuZ2UpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgICAoYS5zdGFydENvbnRhaW5lciA9PT0gYi5zdGFydENvbnRhaW5lciAmJlxuICAgICAgICAgICAgYS5zdGFydE9mZnNldCA9PT0gYi5zdGFydE9mZnNldCAmJlxuICAgICAgICAgICAgYS5lbmRDb250YWluZXIgPT09IGIuZW5kQ29udGFpbmVyICYmXG4gICAgICAgICAgICBhLmVuZE9mZnNldCA9PT0gYi5lbmRPZmZzZXQpIHx8XG4gICAgICAgIChhLnN0YXJ0Q29udGFpbmVyID09PSBiLmVuZENvbnRhaW5lciAmJlxuICAgICAgICAgICAgYS5zdGFydE9mZnNldCA9PT0gYi5lbmRPZmZzZXQgJiZcbiAgICAgICAgICAgIGEuZW5kQ29udGFpbmVyID09PSBiLnN0YXJ0Q29udGFpbmVyICYmXG4gICAgICAgICAgICBhLmVuZE9mZnNldCA9PT0gYi5zdGFydE9mZnNldClcbiAgICApO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgdGFyZ2V0IGlzIGluIHRoZSBlZGl0b3IuXG4gKi9cblxuY29uc3QgaGFzVGFyZ2V0ID0gKGVkaXRvcjogQW5ndWxhckVkaXRvciwgdGFyZ2V0OiBFdmVudFRhcmdldCB8IG51bGwpOiB0YXJnZXQgaXMgRE9NTm9kZSA9PiB7XG4gICAgcmV0dXJuIGlzRE9NTm9kZSh0YXJnZXQpICYmIEFuZ3VsYXJFZGl0b3IuaGFzRE9NTm9kZShlZGl0b3IsIHRhcmdldCk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSB0YXJnZXQgaXMgaW5zaWRlIHZvaWQgYW5kIGluIHRoZSBlZGl0b3IuXG4gKi9cblxuY29uc3QgaXNUYXJnZXRJbnNpZGVWb2lkID0gKGVkaXRvcjogQW5ndWxhckVkaXRvciwgdGFyZ2V0OiBFdmVudFRhcmdldCB8IG51bGwpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBzbGF0ZU5vZGUgPSBoYXNUYXJnZXQoZWRpdG9yLCB0YXJnZXQpICYmIEFuZ3VsYXJFZGl0b3IudG9TbGF0ZU5vZGUoZWRpdG9yLCB0YXJnZXQsIHsgc3VwcHJlc3NUaHJvdzogdHJ1ZSB9KTtcbiAgICByZXR1cm4gc2xhdGVOb2RlICYmIEVsZW1lbnQuaXNFbGVtZW50KHNsYXRlTm9kZSkgJiYgRWRpdG9yLmlzVm9pZChlZGl0b3IsIHNsYXRlTm9kZSk7XG59O1xuXG5jb25zdCBoYXNTdHJpbmdUYXJnZXQgPSAoZG9tU2VsZWN0aW9uOiBET01TZWxlY3Rpb24pID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgICAoZG9tU2VsZWN0aW9uLmFuY2hvck5vZGUucGFyZW50RWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2RhdGEtc2xhdGUtc3RyaW5nJykgfHxcbiAgICAgICAgICAgIGRvbVNlbGVjdGlvbi5hbmNob3JOb2RlLnBhcmVudEVsZW1lbnQuaGFzQXR0cmlidXRlKCdkYXRhLXNsYXRlLXplcm8td2lkdGgnKSkgJiZcbiAgICAgICAgKGRvbVNlbGVjdGlvbi5mb2N1c05vZGUucGFyZW50RWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2RhdGEtc2xhdGUtc3RyaW5nJykgfHxcbiAgICAgICAgICAgIGRvbVNlbGVjdGlvbi5mb2N1c05vZGUucGFyZW50RWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2RhdGEtc2xhdGUtemVyby13aWR0aCcpKVxuICAgICk7XG59O1xuXG4vKipcbiAqIHJlbW92ZSBkZWZhdWx0IGluc2VydCBmcm9tIGNvbXBvc2l0aW9uXG4gKiBAcGFyYW0gdGV4dFxuICovXG5jb25zdCBwcmV2ZW50SW5zZXJ0RnJvbUNvbXBvc2l0aW9uID0gKGV2ZW50OiBFdmVudCwgZWRpdG9yOiBBbmd1bGFyRWRpdG9yKSA9PiB7XG4gICAgY29uc3QgdHlwZXMgPSBbJ2NvbXBvc2l0aW9uZW5kJywgJ2luc2VydEZyb21Db21wb3NpdGlvbiddO1xuICAgIGlmICghdHlwZXMuaW5jbHVkZXMoZXZlbnQudHlwZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbnNlcnRUZXh0ID0gKGV2ZW50IGFzIENvbXBvc2l0aW9uRXZlbnQpLmRhdGE7XG4gICAgY29uc3Qgd2luZG93ID0gQW5ndWxhckVkaXRvci5nZXRXaW5kb3coZWRpdG9yKTtcbiAgICBjb25zdCBkb21TZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgLy8gZW5zdXJlIHRleHQgbm9kZSBpbnNlcnQgY29tcG9zaXRpb24gaW5wdXQgdGV4dFxuICAgIGlmIChpbnNlcnRUZXh0ICYmIGRvbVNlbGVjdGlvbi5hbmNob3JOb2RlIGluc3RhbmNlb2YgVGV4dCAmJiBkb21TZWxlY3Rpb24uYW5jaG9yTm9kZS50ZXh0Q29udGVudC5lbmRzV2l0aChpbnNlcnRUZXh0KSkge1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvbVNlbGVjdGlvbi5hbmNob3JOb2RlO1xuICAgICAgICB0ZXh0Tm9kZS5zcGxpdFRleHQodGV4dE5vZGUubGVuZ3RoIC0gaW5zZXJ0VGV4dC5sZW5ndGgpLnJlbW92ZSgpO1xuICAgIH1cbn07XG4iLCI8c2xhdGUtc3RyaW5nLXRlbXBsYXRlICN0ZW1wbGF0ZUNvbXBvbmVudD48L3NsYXRlLXN0cmluZy10ZW1wbGF0ZT5cbiJdfQ==
1264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvZWRpdGFibGUvZWRpdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL2NvbXBvbmVudHMvZWRpdGFibGUvZWRpdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFFVCxLQUFLLEVBQ0wsU0FBUyxFQUNULFdBQVcsRUFFWCxVQUFVLEVBQ1YsdUJBQXVCLEVBS3ZCLFVBQVUsRUFLVixNQUFNLEVBQ04sTUFBTSxFQUNOLGdCQUFnQixFQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsZUFBZSxFQUNmLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ25CLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFxQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFhLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNyRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sY0FBYyxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBR0gsU0FBUyxFQUdULFlBQVksRUFDWixvQkFBb0IsRUFFcEIsY0FBYyxFQUNqQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLHdCQUF3QixFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pI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QUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQztZQUNuRSxZQUFZLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUNsRixDQUFDO0FBQ04sQ0FBQyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSw0QkFBNEIsR0FBRyxDQUFDLEtBQVksRUFBRSxNQUFxQixFQUFFLEVBQUU7SUFDekUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0lBQzFELElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzlCLE9BQU87SUFDWCxDQUFDO0lBQ0QsTUFBTSxVQUFVLEdBQUksS0FBMEIsQ0FBQyxJQUFJLENBQUM7SUFDcEQsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDM0MsaURBQWlEO0lBQ2pELElBQUksVUFBVSxJQUFJLFlBQVksQ0FBQyxVQUFVLFlBQVksSUFBSSxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ3BILE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxVQUFVLENBQUM7UUFDekMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNyRSxDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT25Jbml0LFxuICAgIElucHV0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBIb3N0QmluZGluZyxcbiAgICBSZW5kZXJlcjIsXG4gICAgRWxlbWVudFJlZixcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBPbkRlc3Ryb3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgTmdab25lLFxuICAgIEluamVjdG9yLFxuICAgIGZvcndhcmRSZWYsXG4gICAgT25DaGFuZ2VzLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgICBEb0NoZWNrLFxuICAgIEluamVjdCxcbiAgICBpbmplY3QsXG4gICAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgTk9ERV9UT19FTEVNRU5ULFxuICAgIElTX0ZPQ1VTRUQsXG4gICAgRURJVE9SX1RPX0VMRU1FTlQsXG4gICAgRUxFTUVOVF9UT19OT0RFLFxuICAgIElTX1JFQURPTkxZLFxuICAgIEVESVRPUl9UT19PTl9DSEFOR0UsXG4gICAgRURJVE9SX1RPX1dJTkRPV1xufSBmcm9tICcuLi8uLi91dGlscy93ZWFrLW1hcHMnO1xuaW1wb3J0IHsgVGV4dCBhcyBTbGF0ZVRleHQsIEVsZW1lbnQsIFRyYW5zZm9ybXMsIEVkaXRvciwgUmFuZ2UsIFBhdGgsIE5vZGVFbnRyeSwgTm9kZSB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IGRpcmVjdGlvbiB9IGZyb20gJ2RpcmVjdGlvbic7XG5pbXBvcnQgc2Nyb2xsSW50b1ZpZXcgZnJvbSAnc2Nyb2xsLWludG8tdmlldy1pZi1uZWVkZWQnO1xuaW1wb3J0IHsgQW5ndWxhckVkaXRvciB9IGZyb20gJy4uLy4uL3BsdWdpbnMvYW5ndWxhci1lZGl0b3InO1xuaW1wb3J0IHtcbiAgICBET01FbGVtZW50LFxuICAgIERPTU5vZGUsXG4gICAgaXNET01Ob2RlLFxuICAgIERPTVN0YXRpY1JhbmdlLFxuICAgIERPTVJhbmdlLFxuICAgIGlzRE9NRWxlbWVudCxcbiAgICBpc1BsYWluVGV4dE9ubHlQYXN0ZSxcbiAgICBET01TZWxlY3Rpb24sXG4gICAgZ2V0RGVmYXVsdFZpZXdcbn0gZnJvbSAnLi4vLi4vdXRpbHMvZG9tJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElTX0ZJUkVGT1gsIElTX1NBRkFSSSwgSVNfQ0hST01FLCBIQVNfQkVGT1JFX0lOUFVUX1NVUFBPUlQsIElTX0FORFJPSUQgfSBmcm9tICcuLi8uLi91dGlscy9lbnZpcm9ubWVudCc7XG5pbXBvcnQgSG90a2V5cyBmcm9tICcuLi8uLi91dGlscy9ob3RrZXlzJztcbmltcG9ydCB7IEJlZm9yZUlucHV0RXZlbnQsIGV4dHJhY3RCZWZvcmVJbnB1dEV2ZW50IH0gZnJvbSAnLi4vLi4vY3VzdG9tLWV2ZW50L0JlZm9yZUlucHV0RXZlbnRQbHVnaW4nO1xuaW1wb3J0IHsgQkVGT1JFX0lOUFVUX0VWRU5UUyB9IGZyb20gJy4uLy4uL2N1c3RvbS1ldmVudC9iZWZvcmUtaW5wdXQtcG9seWZpbGwnO1xuaW1wb3J0IHsgU2xhdGVFcnJvckNvZGUgfSBmcm9tICcuLi8uLi90eXBlcy9lcnJvcic7XG5pbXBvcnQgeyBTbGF0ZVN0cmluZ1RlbXBsYXRlIH0gZnJvbSAnLi4vc3RyaW5nL3RlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNsYXRlQ2hpbGRyZW5Db250ZXh0LCBTbGF0ZVZpZXdDb250ZXh0IH0gZnJvbSAnLi4vLi4vdmlldy9jb250ZXh0JztcbmltcG9ydCB7IENvbXBvbmVudFR5cGUsIFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMvdmlldyc7XG5pbXBvcnQgeyBIaXN0b3J5RWRpdG9yIH0gZnJvbSAnc2xhdGUtaGlzdG9yeSc7XG5pbXBvcnQgeyBpc0RlY29yYXRvclJhbmdlTGlzdEVxdWFsLCBjaGVjaywgbm9ybWFsaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgU2xhdGVQbGFjZWhvbGRlciB9IGZyb20gJy4uLy4uL3R5cGVzL2ZlYXR1cmUnO1xuaW1wb3J0IHsgcmVzdG9yZURvbSB9IGZyb20gJy4uLy4uL3V0aWxzL3Jlc3RvcmUtZG9tJztcbmltcG9ydCB7IFNsYXRlQ2hpbGRyZW4gfSBmcm9tICcuLi9jaGlsZHJlbi9jaGlsZHJlbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU0xBVEVfREVGQVVMVF9FTEVNRU5UX0NPTVBPTkVOVF9UT0tFTiB9IGZyb20gJy4uL2VsZW1lbnQvZGVmYXVsdC1lbGVtZW50LmNvbXBvbmVudC50b2tlbic7XG5pbXBvcnQgeyBTTEFURV9ERUZBVUxUX1RFWFRfQ09NUE9ORU5UX1RPS0VOLCBTTEFURV9ERUZBVUxUX1ZPSURfVEVYVF9DT01QT05FTlRfVE9LRU4gfSBmcm9tICcuLi90ZXh0L3Rva2VuJztcbmltcG9ydCB7IFNsYXRlVm9pZFRleHQgfSBmcm9tICcuLi90ZXh0L3ZvaWQtdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2xhdGVEZWZhdWx0VGV4dCB9IGZyb20gJy4uL3RleHQvZGVmYXVsdC10ZXh0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTbGF0ZURlZmF1bHRFbGVtZW50IH0gZnJvbSAnLi4vZWxlbWVudC9kZWZhdWx0LWVsZW1lbnQuY29tcG9uZW50JztcbmltcG9ydCB7IFNsYXRlRGVmYXVsdExlYWYgfSBmcm9tICcuLi9sZWFmL2RlZmF1bHQtbGVhZi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU0xBVEVfREVGQVVMVF9MRUFGX0NPTVBPTkVOVF9UT0tFTiB9IGZyb20gJy4uL2xlYWYvdG9rZW4nO1xuaW1wb3J0IHsgQmFzZUVsZW1lbnRDb21wb25lbnQsIEJhc2VMZWFmQ29tcG9uZW50LCBCYXNlVGV4dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL3ZpZXcvYmFzZSc7XG5pbXBvcnQgeyBMaXN0UmVuZGVyIH0gZnJvbSAnLi4vLi4vdmlldy9yZW5kZXIvbGlzdC1yZW5kZXInO1xuaW1wb3J0IHsgVFJJUExFX0NMSUNLIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29uc3RhbnRzJztcblxuLy8gbm90IGNvcnJlY3RseSBjbGlwYm9hcmREYXRhIG9uIGJlZm9yZWlucHV0XG5jb25zdCBmb3JjZU9uRE9NUGFzdGUgPSBJU19TQUZBUkk7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2xhdGUtZWRpdGFibGUnLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdzbGF0ZS1lZGl0YWJsZS1jb250YWluZXInLFxuICAgICAgICAnW2F0dHIuY29udGVudGVkaXRhYmxlXSc6ICdyZWFkb25seSA/IHVuZGVmaW5lZCA6IHRydWUnLFxuICAgICAgICAnW2F0dHIucm9sZV0nOiBgcmVhZG9ubHkgPyB1bmRlZmluZWQgOiAndGV4dGJveCdgLFxuICAgICAgICAnW2F0dHIuc3BlbGxDaGVja10nOiBgIWhhc0JlZm9yZUlucHV0U3VwcG9ydCA/IGZhbHNlIDogc3BlbGxDaGVja2AsXG4gICAgICAgICdbYXR0ci5hdXRvQ29ycmVjdF0nOiBgIWhhc0JlZm9yZUlucHV0U3VwcG9ydCA/ICdmYWxzZScgOiBhdXRvQ29ycmVjdGAsXG4gICAgICAgICdbYXR0ci5hdXRvQ2FwaXRhbGl6ZV0nOiBgIWhhc0JlZm9yZUlucHV0U3VwcG9ydCA/ICdmYWxzZScgOiBhdXRvQ2FwaXRhbGl6ZWBcbiAgICB9LFxuICAgIHRlbXBsYXRlVXJsOiAnZWRpdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNsYXRlRWRpdGFibGUpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogU0xBVEVfREVGQVVMVF9FTEVNRU5UX0NPTVBPTkVOVF9UT0tFTixcbiAgICAgICAgICAgIHVzZVZhbHVlOiBTbGF0ZURlZmF1bHRFbGVtZW50XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IFNMQVRFX0RFRkFVTFRfVEVYVF9DT01QT05FTlRfVE9LRU4sXG4gICAgICAgICAgICB1c2VWYWx1ZTogU2xhdGVEZWZhdWx0VGV4dFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBTTEFURV9ERUZBVUxUX1ZPSURfVEVYVF9DT01QT05FTlRfVE9LRU4sXG4gICAgICAgICAgICB1c2VWYWx1ZTogU2xhdGVWb2lkVGV4dFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBTTEFURV9ERUZBVUxUX0xFQUZfQ09NUE9ORU5UX1RPS0VOLFxuICAgICAgICAgICAgdXNlVmFsdWU6IFNsYXRlRGVmYXVsdExlYWZcbiAgICAgICAgfVxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbU2xhdGVDaGlsZHJlbiwgU2xhdGVTdHJpbmdUZW1wbGF0ZV1cbn0pXG5leHBvcnQgY2xhc3MgU2xhdGVFZGl0YWJsZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQsIERvQ2hlY2sge1xuICAgIHZpZXdDb250ZXh0OiBTbGF0ZVZpZXdDb250ZXh0O1xuICAgIGNvbnRleHQ6IFNsYXRlQ2hpbGRyZW5Db250ZXh0O1xuXG4gICAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBpc0NvbXBvc2luZyA9IGZhbHNlO1xuICAgIGlzRHJhZ2dpbmdJbnRlcm5hbGx5ID0gZmFsc2U7XG4gICAgaXNVcGRhdGluZ1NlbGVjdGlvbiA9IGZhbHNlO1xuICAgIGxhdGVzdEVsZW1lbnQgPSBudWxsIGFzIERPTUVsZW1lbnQgfCBudWxsO1xuXG4gICAgcHJvdGVjdGVkIG1hbnVhbExpc3RlbmVyczogKCgpID0+IHZvaWQpW10gPSBbXTtcblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZWQ6IGJvb2xlYW47XG5cbiAgICBwcml2YXRlIG9uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICBwcml2YXRlIG9uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICAgIEBJbnB1dCgpIGVkaXRvcjogQW5ndWxhckVkaXRvcjtcblxuICAgIEBJbnB1dCgpIHJlbmRlckVsZW1lbnQ6IChlbGVtZW50OiBFbGVtZW50KSA9PiBWaWV3VHlwZSB8IG51bGw7XG5cbiAgICBASW5wdXQoKSByZW5kZXJMZWFmOiAodGV4dDogU2xhdGVUZXh0KSA9PiBWaWV3VHlwZSB8IG51bGw7XG5cbiAgICBASW5wdXQoKSByZW5kZXJUZXh0OiAodGV4dDogU2xhdGVUZXh0KSA9PiBWaWV3VHlwZSB8IG51bGw7XG5cbiAgICBASW5wdXQoKSBkZWNvcmF0ZTogKGVudHJ5OiBOb2RlRW50cnkpID0+IFJhbmdlW10gPSAoKSA9PiBbXTtcblxuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyRGVjb3JhdGU6IChlZGl0b3I6IEVkaXRvcikgPT4gU2xhdGVQbGFjZWhvbGRlcltdO1xuXG4gICAgQElucHV0KCkgc2Nyb2xsU2VsZWN0aW9uSW50b1ZpZXc6IChlZGl0b3I6IEFuZ3VsYXJFZGl0b3IsIGRvbVJhbmdlOiBET01SYW5nZSkgPT4gdm9pZCA9IGRlZmF1bHRTY3JvbGxTZWxlY3Rpb25JbnRvVmlldztcblxuICAgIEBJbnB1dCgpIGlzU3RyaWN0RGVjb3JhdGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KCkgdHJhY2tCeTogKG5vZGU6IEVsZW1lbnQpID0+IGFueSA9ICgpID0+IG51bGw7XG5cbiAgICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICAgIC8vI3JlZ2lvbiBpbnB1dCBldmVudCBoYW5kbGVyXG4gICAgQElucHV0KCkgYmVmb3JlSW5wdXQ6IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gICAgQElucHV0KCkgYmx1cjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcbiAgICBASW5wdXQoKSBjbGljazogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICAgIEBJbnB1dCgpIGNvbXBvc2l0aW9uRW5kOiAoZXZlbnQ6IENvbXBvc2l0aW9uRXZlbnQpID0+IHZvaWQ7XG4gICAgQElucHV0KCkgY29tcG9zaXRpb25VcGRhdGU6IChldmVudDogQ29tcG9zaXRpb25FdmVudCkgPT4gdm9pZDtcbiAgICBASW5wdXQoKSBjb21wb3NpdGlvblN0YXJ0OiAoZXZlbnQ6IENvbXBvc2l0aW9uRXZlbnQpID0+IHZvaWQ7XG4gICAgQElucHV0KCkgY29weTogKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkgPT4gdm9pZDtcbiAgICBASW5wdXQoKSBjdXQ6IChldmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHZvaWQ7XG4gICAgQElucHV0KCkgZHJhZ092ZXI6IChldmVudDogRHJhZ0V2ZW50KSA9PiB2b2lkO1xuICAgIEBJbnB1dCgpIGRyYWdTdGFydDogKGV2ZW50OiBEcmFnRXZlbnQpID0+IHZvaWQ7XG4gICAgQElucHV0KCkgZHJhZ0VuZDogKGV2ZW50OiBEcmFnRXZlbnQpID0+IHZvaWQ7XG4gICAgQElucHV0KCkgZHJvcDogKGV2ZW50OiBEcmFnRXZlbnQpID0+IHZvaWQ7XG4gICAgQElucHV0KCkgZm9jdXM6IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gICAgQElucHV0KCkga2V5ZG93bjogKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkO1xuICAgIEBJbnB1dCgpIHBhc3RlOiAoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSA9PiB2b2lkO1xuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgLy8jcmVnaW9uIERPTSBhdHRyXG4gICAgQElucHV0KCkgc3BlbGxDaGVjayA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGF1dG9Db3JyZWN0ID0gZmFsc2U7XG4gICAgQElucHV0KCkgYXV0b0NhcGl0YWxpemUgPSBmYWxzZTtcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXNsYXRlLWVkaXRvcicpIGRhdGFTbGF0ZUVkaXRvciA9IHRydWU7XG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtc2xhdGUtbm9kZScpIGRhdGFTbGF0ZU5vZGUgPSAndmFsdWUnO1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLWdyYW1tJykgZGF0YUdyYW1tID0gZmFsc2U7XG5cbiAgICBnZXQgaGFzQmVmb3JlSW5wdXRTdXBwb3J0KCkge1xuICAgICAgICByZXR1cm4gSEFTX0JFRk9SRV9JTlBVVF9TVVBQT1JUO1xuICAgIH1cbiAgICAvLyNlbmRyZWdpb25cblxuICAgIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlQ29tcG9uZW50JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICB0ZW1wbGF0ZUNvbXBvbmVudDogU2xhdGVTdHJpbmdUZW1wbGF0ZTtcblxuICAgIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlQ29tcG9uZW50JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICB0ZW1wbGF0ZUVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8YW55PjtcblxuICAgIHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG5cbiAgICBnZXRPdXRsZXRQYXJlbnQgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9O1xuXG4gICAgbGlzdFJlbmRlcjogTGlzdFJlbmRlcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHVibGljIHJlbmRlcmVyMjogUmVuZGVyZXIyLFxuICAgICAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIEBJbmplY3QoU0xBVEVfREVGQVVMVF9FTEVNRU5UX0NPTVBPTkVOVF9UT0tFTilcbiAgICAgICAgcHVibGljIGRlZmF1bHRFbGVtZW50OiBDb21wb25lbnRUeXBlPEJhc2VFbGVtZW50Q29tcG9uZW50PixcbiAgICAgICAgQEluamVjdChTTEFURV9ERUZBVUxUX1RFWFRfQ09NUE9ORU5UX1RPS0VOKVxuICAgICAgICBwdWJsaWMgZGVmYXVsdFRleHQ6IENvbXBvbmVudFR5cGU8QmFzZVRleHRDb21wb25lbnQ+LFxuICAgICAgICBASW5qZWN0KFNMQVRFX0RFRkFVTFRfVk9JRF9URVhUX0NPTVBPTkVOVF9UT0tFTilcbiAgICAgICAgcHVibGljIGRlZmF1bHRWb2lkVGV4dDogQ29tcG9uZW50VHlwZTxCYXNlVGV4dENvbXBvbmVudD4sXG4gICAgICAgIEBJbmplY3QoU0xBVEVfREVGQVVMVF9MRUFGX0NPTVBPTkVOVF9UT0tFTilcbiAgICAgICAgcHVibGljIGRlZmF1bHRMZWFmOiBDb21wb25lbnRUeXBlPEJhc2VMZWFmQ29tcG9uZW50PlxuICAgICkge31cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmVkaXRvci5pbmplY3RvciA9IHRoaXMuaW5qZWN0b3I7XG4gICAgICAgIHRoaXMuZWRpdG9yLmNoaWxkcmVuID0gW107XG4gICAgICAgIGxldCB3aW5kb3cgPSBnZXREZWZhdWx0Vmlldyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIEVESVRPUl9UT19XSU5ET1cuc2V0KHRoaXMuZWRpdG9yLCB3aW5kb3cpO1xuICAgICAgICBFRElUT1JfVE9fRUxFTUVOVC5zZXQodGhpcy5lZGl0b3IsIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgTk9ERV9UT19FTEVNRU5ULnNldCh0aGlzLmVkaXRvciwgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBFTEVNRU5UX1RPX05PREUuc2V0KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLmVkaXRvcik7XG4gICAgICAgIElTX1JFQURPTkxZLnNldCh0aGlzLmVkaXRvciwgdGhpcy5yZWFkb25seSk7XG4gICAgICAgIEVESVRPUl9UT19PTl9DSEFOR0Uuc2V0KHRoaXMuZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVWaWV3Q29udGV4dCgpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVDb250ZXh0KCk7XG5cbiAgICAgICAgLy8gcmVtb3ZlIHVudXNlZCBET00sIGp1c3Qga2VlcCB0ZW1wbGF0ZUNvbXBvbmVudCBpbnN0YW5jZVxuICAgICAgICB0aGlzLnRlbXBsYXRlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZSgpO1xuXG4gICAgICAgIC8vIGFkZCBicm93c2VyIGNsYXNzXG4gICAgICAgIGxldCBicm93c2VyQ2xhc3MgPSBJU19GSVJFRk9YID8gJ2ZpcmVmb3gnIDogSVNfU0FGQVJJID8gJ3NhZmFyaScgOiAnJztcbiAgICAgICAgYnJvd3NlckNsYXNzICYmIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoYnJvd3NlckNsYXNzKTtcbiAgICAgICAgdGhpcy5saXN0UmVuZGVyID0gbmV3IExpc3RSZW5kZXIodGhpcy52aWV3Q29udGV4dCwgdGhpcy52aWV3Q29udGFpbmVyUmVmLCB0aGlzLmdldE91dGxldFBhcmVudCwgKCkgPT4gbnVsbCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoc2ltcGxlQ2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWNvcmF0ZUNoYW5nZSA9IHNpbXBsZUNoYW5nZXNbJ2RlY29yYXRlJ107XG4gICAgICAgIGlmIChkZWNvcmF0ZUNoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5mb3JjZVJlbmRlcigpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyQ2hhbmdlID0gc2ltcGxlQ2hhbmdlc1sncGxhY2Vob2xkZXInXTtcbiAgICAgICAgaWYgKHBsYWNlaG9sZGVyQ2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlYWRvbmx5Q2hhbmdlID0gc2ltcGxlQ2hhbmdlc1sncmVhZG9ubHknXTtcbiAgICAgICAgaWYgKHJlYWRvbmx5Q2hhbmdlKSB7XG4gICAgICAgICAgICBJU19SRUFET05MWS5zZXQodGhpcy5lZGl0b3IsIHRoaXMucmVhZG9ubHkpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgICAgIHRoaXMudG9TbGF0ZVNlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuICAgIH1cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBFbGVtZW50W10pIHtcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5lZGl0b3IuY2hpbGRyZW4gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUNvbnRleHQoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5saXN0UmVuZGVyLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0UmVuZGVyLmluaXRpYWxpemUodGhpcy5lZGl0b3IuY2hpbGRyZW4sIHRoaXMuZWRpdG9yLCB0aGlzLmNvbnRleHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RSZW5kZXIudXBkYXRlKHRoaXMuZWRpdG9yLmNoaWxkcmVuLCB0aGlzLmVkaXRvciwgdGhpcy5jb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHdpbmRvdyA9IEFuZ3VsYXJFZGl0b3IuZ2V0V2luZG93KHRoaXMuZWRpdG9yKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgJ3NlbGVjdGlvbmNoYW5nZScsXG4gICAgICAgICAgICBldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b1NsYXRlU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50XG4gICAgICAgICk7XG4gICAgICAgIGlmIChIQVNfQkVGT1JFX0lOUFVUX1NVUFBPUlQpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JlaW5wdXQnLCB0aGlzLm9uRE9NQmVmb3JlSW5wdXQuYmluZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5vbkRPTUJsdXIuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uRE9NQ2xpY2suYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25lbmQnLCB0aGlzLm9uRE9NQ29tcG9zaXRpb25FbmQuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb251cGRhdGUnLCB0aGlzLm9uRE9NQ29tcG9zaXRpb25VcGRhdGUuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY29tcG9zaXRpb25zdGFydCcsIHRoaXMub25ET01Db21wb3NpdGlvblN0YXJ0LmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2NvcHknLCB0aGlzLm9uRE9NQ29weS5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdjdXQnLCB0aGlzLm9uRE9NQ3V0LmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdvdmVyJywgdGhpcy5vbkRPTURyYWdPdmVyLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIHRoaXMub25ET01EcmFnU3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZHJhZ2VuZCcsIHRoaXMub25ET01EcmFnRW5kLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Ryb3AnLCB0aGlzLm9uRE9NRHJvcC5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHRoaXMub25ET01Gb2N1cy5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbkRPTUtleWRvd24uYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncGFzdGUnLCB0aGlzLm9uRE9NUGFzdGUuYmluZCh0aGlzKSk7XG4gICAgICAgIEJFRk9SRV9JTlBVVF9FVkVOVFMuZm9yRWFjaChldmVudCA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQubmFtZSwgKCkgPT4ge30pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0b05hdGl2ZVNlbGVjdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSB0aGlzLmVkaXRvcjtcbiAgICAgICAgICAgIGNvbnN0IHJvb3QgPSBBbmd1bGFyRWRpdG9yLmZpbmREb2N1bWVudE9yU2hhZG93Um9vdCh0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICBjb25zdCB7IGFjdGl2ZUVsZW1lbnQgfSA9IHJvb3Q7XG4gICAgICAgICAgICBjb25zdCBkb21TZWxlY3Rpb24gPSAocm9vdCBhcyBEb2N1bWVudCkuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgICAgICAgICAgIGlmICgodGhpcy5pc0NvbXBvc2luZyAmJiAhSVNfQU5EUk9JRCkgfHwgIWRvbVNlbGVjdGlvbiB8fCAhQW5ndWxhckVkaXRvci5pc0ZvY3VzZWQodGhpcy5lZGl0b3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBoYXNEb21TZWxlY3Rpb24gPSBkb21TZWxlY3Rpb24udHlwZSAhPT0gJ05vbmUnO1xuXG4gICAgICAgICAgICAvLyBJZiB0aGUgRE9NIHNlbGVjdGlvbiBpcyBwcm9wZXJseSB1bnNldCwgd2UncmUgZG9uZS5cbiAgICAgICAgICAgIGlmICghc2VsZWN0aW9uICYmICFoYXNEb21TZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBET00gc2VsZWN0aW9uIGlzIGFscmVhZHkgY29ycmVjdCwgd2UncmUgZG9uZS5cbiAgICAgICAgICAgIC8vIHZlcmlmeSB0aGF0IHRoZSBkb20gc2VsZWN0aW9uIGlzIGluIHRoZSBlZGl0b3JcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvckVsZW1lbnQgPSBFRElUT1JfVE9fRUxFTUVOVC5nZXQodGhpcy5lZGl0b3IpITtcbiAgICAgICAgICAgIGxldCBoYXNEb21TZWxlY3Rpb25JbkVkaXRvciA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKGVkaXRvckVsZW1lbnQuY29udGFpbnMoZG9tU2VsZWN0aW9uLmFuY2hvck5vZGUpICYmIGVkaXRvckVsZW1lbnQuY29udGFpbnMoZG9tU2VsZWN0aW9uLmZvY3VzTm9kZSkpIHtcbiAgICAgICAgICAgICAgICBoYXNEb21TZWxlY3Rpb25JbkVkaXRvciA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBET00gc2VsZWN0aW9uIGlzIGluIHRoZSBlZGl0b3IgYW5kIHRoZSBlZGl0b3Igc2VsZWN0aW9uIGlzIGFscmVhZHkgY29ycmVjdCwgd2UncmUgZG9uZS5cbiAgICAgICAgICAgIGlmIChoYXNEb21TZWxlY3Rpb24gJiYgaGFzRG9tU2VsZWN0aW9uSW5FZGl0b3IgJiYgc2VsZWN0aW9uICYmIGhhc1N0cmluZ1RhcmdldChkb21TZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2VGcm9tRE9NU2VsZWN0aW9uID0gQW5ndWxhckVkaXRvci50b1NsYXRlUmFuZ2UodGhpcy5lZGl0b3IsIGRvbVNlbGVjdGlvbiwgeyBzdXBwcmVzc1Rocm93OiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIGlmIChyYW5nZUZyb21ET01TZWxlY3Rpb24gJiYgUmFuZ2UuZXF1YWxzKHJhbmdlRnJvbURPTVNlbGVjdGlvbiwgc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBwcmV2ZW50IHVwZGF0aW5nIG5hdGl2ZSBzZWxlY3Rpb24gd2hlbiBhY3RpdmUgZWxlbWVudCBpcyB2b2lkIGVsZW1lbnRcbiAgICAgICAgICAgIGlmIChpc1RhcmdldEluc2lkZVZvaWQodGhpcy5lZGl0b3IsIGFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB3aGVuIDxFZGl0YWJsZS8+IGlzIGJlaW5nIGNvbnRyb2xsZWQgdGhyb3VnaCBleHRlcm5hbCB2YWx1ZVxuICAgICAgICAgICAgLy8gdGhlbiBpdHMgY2hpbGRyZW4gbWlnaHQganVzdCBjaGFuZ2UgLSBET00gcmVzcG9uZHMgdG8gaXQgb24gaXRzIG93blxuICAgICAgICAgICAgLy8gYnV0IFNsYXRlJ3MgdmFsdWUgaXMgbm90IGJlaW5nIHVwZGF0ZWQgdGhyb3VnaCBhbnkgb3BlcmF0aW9uXG4gICAgICAgICAgICAvLyBhbmQgdGh1cyBpdCBkb2Vzbid0IHRyYW5zZm9ybSBzZWxlY3Rpb24gb24gaXRzIG93blxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiAhQW5ndWxhckVkaXRvci5oYXNSYW5nZSh0aGlzLmVkaXRvciwgc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLnNlbGVjdGlvbiA9IEFuZ3VsYXJFZGl0b3IudG9TbGF0ZVJhbmdlKHRoaXMuZWRpdG9yLCBkb21TZWxlY3Rpb24sIHsgc3VwcHJlc3NUaHJvdzogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UgdGhlIERPTSBzZWxlY3Rpb24gaXMgb3V0IG9mIHN5bmMsIHNvIHVwZGF0ZSBpdC5cbiAgICAgICAgICAgIGNvbnN0IGVsID0gQW5ndWxhckVkaXRvci50b0RPTU5vZGUodGhpcy5lZGl0b3IsIHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ1NlbGVjdGlvbiA9IHRydWU7XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld0RvbVJhbmdlID0gc2VsZWN0aW9uICYmIEFuZ3VsYXJFZGl0b3IudG9ET01SYW5nZSh0aGlzLmVkaXRvciwgc2VsZWN0aW9uKTtcblxuICAgICAgICAgICAgaWYgKG5ld0RvbVJhbmdlKSB7XG4gICAgICAgICAgICAgICAgLy8gQ09NUEFUOiBTaW5jZSB0aGUgRE9NIHJhbmdlIGhhcyBubyBjb25jZXB0IG9mIGJhY2t3YXJkcy9mb3J3YXJkc1xuICAgICAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gY2hlY2sgYW5kIGRvIHRoZSByaWdodCB0aGluZyBoZXJlLlxuICAgICAgICAgICAgICAgIGlmIChSYW5nZS5pc0JhY2t3YXJkKHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgICAgICAgICAgICAgZG9tU2VsZWN0aW9uLnNldEJhc2VBbmRFeHRlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdEb21SYW5nZS5lbmRDb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdEb21SYW5nZS5lbmRPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdEb21SYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0RvbVJhbmdlLnN0YXJ0T2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgICAgICAgICAgICAgZG9tU2VsZWN0aW9uLnNldEJhc2VBbmRFeHRlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdEb21SYW5nZS5zdGFydENvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0RvbVJhbmdlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RG9tUmFuZ2UuZW5kQ29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RG9tUmFuZ2UuZW5kT2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb21TZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBzY3JvbGxpbmcgaW4gc2V0VGltZW91dCBiZWNhdXNlIG9mXG4gICAgICAgICAgICAgICAgLy8gZG9tIHNob3VsZCBub3QgaGF2ZSB1cGRhdGVkIGltbWVkaWF0ZWx5IGFmdGVyIGxpc3RSZW5kZXIncyB1cGRhdGluZ1xuICAgICAgICAgICAgICAgIG5ld0RvbVJhbmdlICYmIHRoaXMuc2Nyb2xsU2VsZWN0aW9uSW50b1ZpZXcodGhpcy5lZGl0b3IsIG5ld0RvbVJhbmdlKTtcbiAgICAgICAgICAgICAgICAvLyBDT01QQVQ6IEluIEZpcmVmb3gsIGl0J3Mgbm90IGVub3VnaCB0byBjcmVhdGUgYSByYW5nZSwgeW91IGFsc28gbmVlZFxuICAgICAgICAgICAgICAgIC8vIHRvIGZvY3VzIHRoZSBjb250ZW50ZWRpdGFibGUgZWxlbWVudCB0b28uICgyMDE2LzExLzE2KVxuICAgICAgICAgICAgICAgIGlmIChuZXdEb21SYW5nZSAmJiBJU19GSVJFRk9YKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5pc1VwZGF0aW5nU2VsZWN0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLm9uRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGNvZGU6IFNsYXRlRXJyb3JDb2RlLlRvTmF0aXZlU2VsZWN0aW9uRXJyb3IsXG4gICAgICAgICAgICAgICAgbmF0aXZlRXJyb3I6IGVycm9yXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZ1NlbGVjdGlvbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuZm9yY2VSZW5kZXIoKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHRoaXMuZWRpdG9yLmNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7fVxuXG4gICAgbmdEb0NoZWNrKCkge31cblxuICAgIGZvcmNlUmVuZGVyKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbnRleHQoKTtcbiAgICAgICAgdGhpcy5saXN0UmVuZGVyLnVwZGF0ZSh0aGlzLmVkaXRvci5jaGlsZHJlbiwgdGhpcy5lZGl0b3IsIHRoaXMuY29udGV4dCk7XG4gICAgICAgIC8vIHJlcGFpciBjb2xsYWJvcmF0aXZlIGVkaXRpbmcgd2hlbiBDaGluZXNlIGlucHV0IGlzIGludGVycnVwdGVkIGJ5IG90aGVyIHVzZXJzJyBjdXJzb3JzXG4gICAgICAgIC8vIHdoZW4gdGhlIERPTUVsZW1lbnQgd2hlcmUgdGhlIHNlbGVjdGlvbiBpcyBsb2NhdGVkIGlzIHJlbW92ZWRcbiAgICAgICAgLy8gdGhlIGNvbXBvc2l0aW9udXBkYXRlIGFuZCBjb21wb3NpdGlvbmVuZCBldmVudHMgd2lsbCBubyBsb25nZXIgYmUgZmlyZWRcbiAgICAgICAgLy8gc28gaXNDb21wb3NpbmcgbmVlZHMgdG8gYmUgY29ycmVjdGVkXG4gICAgICAgIC8vIG5lZWQgZXhlYyBhZnRlciB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkgdG8gcmVuZGVyIEhUTUxcbiAgICAgICAgLy8gbmVlZCBleGVjIGJlZm9yZSB0aGlzLnRvTmF0aXZlU2VsZWN0aW9uKCkgdG8gY29ycmVjdCBuYXRpdmUgc2VsZWN0aW9uXG4gICAgICAgIGlmICh0aGlzLmlzQ29tcG9zaW5nKSB7XG4gICAgICAgICAgICAvLyBDb21wb3NpdGlvbiBpbnB1dCB0ZXh0IGJlIG5vdCByZW5kZXJlZCB3aGVuIHVzZXIgY29tcG9zaXRpb24gaW5wdXQgd2l0aCBzZWxlY3Rpb24gaXMgZXhwYW5kZWRcbiAgICAgICAgICAgIC8vIEF0IHRoaXMgdGltZSwgdGhlIGZvbGxvd2luZyBtYXRjaGluZyBjb25kaXRpb25zIGFyZSBtZXQsIGFzc2lnbiBpc0NvbXBvc2luZyB0byBmYWxzZSwgYW5kIHRoZSBzdGF0dXMgaXMgd3JvbmdcbiAgICAgICAgICAgIC8vIHRoaXMgdGltZSBjb25kaXRpb24gaXMgdHJ1ZSBhbmQgaXNDb21wb3NpaW5nIGlzIGFzc2lnbmVkIGZhbHNlXG4gICAgICAgICAgICAvLyBUaGVyZWZvcmUsIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGNvbXBvc2l0aW9uIGlucHV0IHRleHQgdG8gYmUgcmVuZGVyZWQgYmVmb3JlIHBlcmZvcm1pbmcgY29uZGl0aW9uIG1hdGNoaW5nXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IE5vZGUuZ2V0KHRoaXMuZWRpdG9yLCB0aGlzLmVkaXRvci5zZWxlY3Rpb24uYW5jaG9yLnBhdGgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHRET01Ob2RlID0gQW5ndWxhckVkaXRvci50b0RPTU5vZGUodGhpcy5lZGl0b3IsIHRleHROb2RlKTtcbiAgICAgICAgICAgICAgICBsZXQgdGV4dENvbnRlbnQgPSAnJztcbiAgICAgICAgICAgICAgICAvLyBza2lwIGRlY29yYXRlIHRleHRcbiAgICAgICAgICAgICAgICB0ZXh0RE9NTm9kZS5xdWVyeVNlbGVjdG9yQWxsKCdbZWRpdGFibGUtdGV4dF0nKS5mb3JFYWNoKHN0cmluZ0RPTU5vZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dCA9IHN0cmluZ0RPTU5vZGUudGV4dENvbnRlbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHplcm9DaGFyID0gJ1xcdUZFRkYnO1xuICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgemVybyB3aXRoIGNoYXJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRleHQuc3RhcnRzV2l0aCh6ZXJvQ2hhcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0LmVuZHNXaXRoKHplcm9DaGFyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgdGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudCArPSB0ZXh0O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChOb2RlLnN0cmluZyh0ZXh0Tm9kZSkuZW5kc1dpdGgodGV4dENvbnRlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb21wb3NpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvTmF0aXZlU2VsZWN0aW9uKCk7XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy51cGRhdGVDb250ZXh0KCk7XG4gICAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RSZW5kZXIudXBkYXRlKHRoaXMuZWRpdG9yLmNoaWxkcmVuLCB0aGlzLmVkaXRvciwgdGhpcy5jb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZUNvbnRleHQoKSB7XG4gICAgICAgIGNvbnN0IGRlY29yYXRpb25zID0gdGhpcy5nZW5lcmF0ZURlY29yYXRpb25zKCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5zZWxlY3Rpb24gIT09IHRoaXMuZWRpdG9yLnNlbGVjdGlvbiB8fFxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmRlY29yYXRlICE9PSB0aGlzLmRlY29yYXRlIHx8XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQucmVhZG9ubHkgIT09IHRoaXMucmVhZG9ubHkgfHxcbiAgICAgICAgICAgICFpc0RlY29yYXRvclJhbmdlTGlzdEVxdWFsKHRoaXMuY29udGV4dC5kZWNvcmF0aW9ucywgZGVjb3JhdGlvbnMpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgIHBhcmVudDogdGhpcy5lZGl0b3IsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uOiB0aGlzLmVkaXRvci5zZWxlY3Rpb24sXG4gICAgICAgICAgICAgICAgZGVjb3JhdGlvbnM6IGRlY29yYXRpb25zLFxuICAgICAgICAgICAgICAgIGRlY29yYXRlOiB0aGlzLmRlY29yYXRlLFxuICAgICAgICAgICAgICAgIHJlYWRvbmx5OiB0aGlzLnJlYWRvbmx5XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGluaXRpYWxpemVDb250ZXh0KCkge1xuICAgICAgICB0aGlzLmNvbnRleHQgPSB7XG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMuZWRpdG9yLFxuICAgICAgICAgICAgc2VsZWN0aW9uOiB0aGlzLmVkaXRvci5zZWxlY3Rpb24sXG4gICAgICAgICAgICBkZWNvcmF0aW9uczogdGhpcy5nZW5lcmF0ZURlY29yYXRpb25zKCksXG4gICAgICAgICAgICBkZWNvcmF0ZTogdGhpcy5kZWNvcmF0ZSxcbiAgICAgICAgICAgIHJlYWRvbmx5OiB0aGlzLnJlYWRvbmx5XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaW5pdGlhbGl6ZVZpZXdDb250ZXh0KCkge1xuICAgICAgICB0aGlzLnZpZXdDb250ZXh0ID0ge1xuICAgICAgICAgICAgZWRpdG9yOiB0aGlzLmVkaXRvcixcbiAgICAgICAgICAgIHJlbmRlckVsZW1lbnQ6IHRoaXMucmVuZGVyRWxlbWVudCxcbiAgICAgICAgICAgIHJlbmRlckxlYWY6IHRoaXMucmVuZGVyTGVhZixcbiAgICAgICAgICAgIHJlbmRlclRleHQ6IHRoaXMucmVuZGVyVGV4dCxcbiAgICAgICAgICAgIHRyYWNrQnk6IHRoaXMudHJhY2tCeSxcbiAgICAgICAgICAgIGlzU3RyaWN0RGVjb3JhdGU6IHRoaXMuaXNTdHJpY3REZWNvcmF0ZSxcbiAgICAgICAgICAgIHRlbXBsYXRlQ29tcG9uZW50OiB0aGlzLnRlbXBsYXRlQ29tcG9uZW50LFxuICAgICAgICAgICAgZGVmYXVsdEVsZW1lbnQ6IHRoaXMuZGVmYXVsdEVsZW1lbnQsXG4gICAgICAgICAgICBkZWZhdWx0VGV4dDogdGhpcy5kZWZhdWx0VGV4dCxcbiAgICAgICAgICAgIGRlZmF1bHRWb2lkVGV4dDogdGhpcy5kZWZhdWx0Vm9pZFRleHQsXG4gICAgICAgICAgICBkZWZhdWx0TGVhZjogdGhpcy5kZWZhdWx0TGVhZlxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbXBvc2VQbGFjZWhvbGRlckRlY29yYXRlKGVkaXRvcjogRWRpdG9yKSB7XG4gICAgICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyRGVjb3JhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBsYWNlaG9sZGVyRGVjb3JhdGUoZWRpdG9yKSB8fCBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyICYmIGVkaXRvci5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgQXJyYXkuZnJvbShOb2RlLnRleHRzKGVkaXRvcikpLmxlbmd0aCA9PT0gMSAmJiBOb2RlLnN0cmluZyhlZGl0b3IpID09PSAnJykge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBFZGl0b3Iuc3RhcnQoZWRpdG9yLCBbXSk7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICAgIGFuY2hvcjogc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgIGZvY3VzOiBzdGFydFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZW5lcmF0ZURlY29yYXRpb25zKCkge1xuICAgICAgICBjb25zdCBkZWNvcmF0aW9ucyA9IHRoaXMuZGVjb3JhdGUoW3RoaXMuZWRpdG9yLCBbXV0pO1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlckRlY29yYXRpb25zID0gdGhpcy5pc0NvbXBvc2luZyA/IFtdIDogdGhpcy5jb21wb3NlUGxhY2Vob2xkZXJEZWNvcmF0ZSh0aGlzLmVkaXRvcik7XG4gICAgICAgIGRlY29yYXRpb25zLnB1c2goLi4ucGxhY2Vob2xkZXJEZWNvcmF0aW9ucyk7XG4gICAgICAgIHJldHVybiBkZWNvcmF0aW9ucztcbiAgICB9XG5cbiAgICAvLyNyZWdpb24gZXZlbnQgcHJveHlcbiAgICBwcml2YXRlIGFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lOiBzdHJpbmcsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyLCB0YXJnZXQ6IEhUTUxFbGVtZW50IHwgRG9jdW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLm1hbnVhbExpc3RlbmVycy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlcjIubGlzdGVuKHRhcmdldCwgZXZlbnROYW1lLCAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmVmb3JlSW5wdXRFdmVudCA9IGV4dHJhY3RCZWZvcmVJbnB1dEV2ZW50KGV2ZW50LnR5cGUsIG51bGwsIGV2ZW50LCBldmVudC50YXJnZXQpO1xuICAgICAgICAgICAgICAgIGlmIChiZWZvcmVJbnB1dEV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25GYWxsYmFja0JlZm9yZUlucHV0KGJlZm9yZUlucHV0RXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsaXN0ZW5lcihldmVudCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9TbGF0ZVNlbGVjdGlvbigpIHtcbiAgICAgICAgaWYgKCghdGhpcy5pc0NvbXBvc2luZyB8fCBJU19BTkRST0lEKSAmJiAhdGhpcy5pc1VwZGF0aW5nU2VsZWN0aW9uICYmICF0aGlzLmlzRHJhZ2dpbmdJbnRlcm5hbGx5KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvb3QgPSBBbmd1bGFyRWRpdG9yLmZpbmREb2N1bWVudE9yU2hhZG93Um9vdCh0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBhY3RpdmVFbGVtZW50IH0gPSByb290O1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsID0gQW5ndWxhckVkaXRvci50b0RPTU5vZGUodGhpcy5lZGl0b3IsIHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkb21TZWxlY3Rpb24gPSAocm9vdCBhcyBEb2N1bWVudCkuZ2V0U2VsZWN0aW9uKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoYWN0aXZlRWxlbWVudCA9PT0gZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXRlc3RFbGVtZW50ID0gYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgSVNfRk9DVVNFRC5zZXQodGhpcy5lZGl0b3IsIHRydWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIElTX0ZPQ1VTRUQuZGVsZXRlKHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWRvbVNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJhbnNmb3Jtcy5kZXNlbGVjdCh0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdG9yRWxlbWVudCA9IEVESVRPUl9UT19FTEVNRU5ULmdldCh0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzRG9tU2VsZWN0aW9uSW5FZGl0b3IgPVxuICAgICAgICAgICAgICAgICAgICBlZGl0b3JFbGVtZW50LmNvbnRhaW5zKGRvbVNlbGVjdGlvbi5hbmNob3JOb2RlKSAmJiBlZGl0b3JFbGVtZW50LmNvbnRhaW5zKGRvbVNlbGVjdGlvbi5mb2N1c05vZGUpO1xuICAgICAgICAgICAgICAgIGlmICghaGFzRG9tU2VsZWN0aW9uSW5FZGl0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5kZXNlbGVjdCh0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyB0cnkgdG8gZ2V0IHRoZSBzZWxlY3Rpb24gZGlyZWN0bHksIGJlY2F1c2Ugc29tZSB0ZXJyaWJsZSBjYXNlIGNhbiBiZSBub3JtYWxpemUgZm9yIG5vcm1hbGl6ZURPTVBvaW50XG4gICAgICAgICAgICAgICAgLy8gZm9yIGV4YW1wbGUsIGRvdWJsZS1jbGljayB0aGUgbGFzdCBjZWxsIG9mIHRoZSB0YWJsZSB0byBzZWxlY3QgYSBub24tZWRpdGFibGUgRE9NXG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBBbmd1bGFyRWRpdG9yLnRvU2xhdGVSYW5nZSh0aGlzLmVkaXRvciwgZG9tU2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lZGl0b3Iuc2VsZWN0aW9uICYmIFJhbmdlLmVxdWFscyhyYW5nZSwgdGhpcy5lZGl0b3Iuc2VsZWN0aW9uKSAmJiAhaGFzU3RyaW5nVGFyZ2V0KGRvbVNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1RhcmdldEluc2lkZVZvaWQodGhpcy5lZGl0b3IsIGFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3JjZSBhZGp1c3QgRE9NU2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvTmF0aXZlU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdCh0aGlzLmVkaXRvciwgcmFuZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3Iub25FcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFNsYXRlRXJyb3JDb2RlLlRvU2xhdGVTZWxlY3Rpb25FcnJvcixcbiAgICAgICAgICAgICAgICAgICAgbmF0aXZlRXJyb3I6IGVycm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRE9NQmVmb3JlSW5wdXQoXG4gICAgICAgIGV2ZW50OiBFdmVudCAmIHtcbiAgICAgICAgICAgIGlucHV0VHlwZTogc3RyaW5nO1xuICAgICAgICAgICAgaXNDb21wb3Npbmc6IGJvb2xlYW47XG4gICAgICAgICAgICBkYXRhOiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgZGF0YVRyYW5zZmVyOiBEYXRhVHJhbnNmZXIgfCBudWxsO1xuICAgICAgICAgICAgZ2V0VGFyZ2V0UmFuZ2VzKCk6IERPTVN0YXRpY1JhbmdlW107XG4gICAgICAgIH1cbiAgICApIHtcbiAgICAgICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgICAgIGNvbnN0IHJvb3QgPSBBbmd1bGFyRWRpdG9yLmZpbmREb2N1bWVudE9yU2hhZG93Um9vdCh0aGlzLmVkaXRvcik7XG4gICAgICAgIGNvbnN0IHsgYWN0aXZlRWxlbWVudCB9ID0gcm9vdDtcbiAgICAgICAgY29uc3QgeyBzZWxlY3Rpb24gfSA9IGVkaXRvcjtcbiAgICAgICAgY29uc3QgeyBpbnB1dFR5cGU6IHR5cGUgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YVRyYW5zZmVyIHx8IGV2ZW50LmRhdGEgfHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoSVNfQU5EUk9JRCkge1xuICAgICAgICAgICAgbGV0IHRhcmdldFJhbmdlOiBSYW5nZSB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgbGV0IFtuYXRpdmVUYXJnZXRSYW5nZV0gPSBldmVudC5nZXRUYXJnZXRSYW5nZXMoKTtcbiAgICAgICAgICAgIGlmIChuYXRpdmVUYXJnZXRSYW5nZSkge1xuICAgICAgICAgICAgICAgIHRhcmdldFJhbmdlID0gQW5ndWxhckVkaXRvci50b1NsYXRlUmFuZ2UoZWRpdG9yLCBuYXRpdmVUYXJnZXRSYW5nZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDT01QQVQ6IFNlbGVjdGlvbkNoYW5nZSBldmVudCBpcyBmaXJlZCBhZnRlciB0aGUgYWN0aW9uIGlzIHBlcmZvcm1lZCwgc28gd2VcbiAgICAgICAgICAgIC8vIGhhdmUgdG8gbWFudWFsbHkgZ2V0IHRoZSBzZWxlY3Rpb24gaGVyZSB0byBlbnN1cmUgaXQncyB1cC10by1kYXRlLlxuICAgICAgICAgICAgY29uc3Qgd2luZG93ID0gQW5ndWxhckVkaXRvci5nZXRXaW5kb3coZWRpdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IGRvbVNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIGlmICghdGFyZ2V0UmFuZ2UgJiYgZG9tU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0UmFuZ2UgPSBBbmd1bGFyRWRpdG9yLnRvU2xhdGVSYW5nZShlZGl0b3IsIGRvbVNlbGVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YXJnZXRSYW5nZSA9IHRhcmdldFJhbmdlID8/IGVkaXRvci5zZWxlY3Rpb247XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2luc2VydENvbXBvc2l0aW9uVGV4dCcpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ1xcbicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3RvcmVEb20oZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuaW5zZXJ0QnJlYWsoZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldFJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RvcmVEb20oZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuaW5zZXJ0VGV4dChlZGl0b3IsIGRhdGEudG9TdHJpbmcoKSwgeyBhdDogdGFyZ2V0UmFuZ2UgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RvcmVEb20oZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuZGVsZXRlKGVkaXRvciwgeyBhdDogdGFyZ2V0UmFuZ2UgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdkZWxldGVDb250ZW50QmFja3dhcmQnKSB7XG4gICAgICAgICAgICAgICAgLy8gZ2JvYXJkIGNhbiBub3QgcHJldmVudCBkZWZhdWx0IGFjdGlvbiwgc28gbXVzdCB1c2UgcmVzdG9yZURvbSxcbiAgICAgICAgICAgICAgICAvLyBzb3Vnb3UgS2V5Ym9hcmQgY2FuIHByZXZlbnQgZGVmYXVsdCBhY3Rpb27vvIhvbmx5IGluIENoaW5lc2UgaW5wdXQgbW9kZe+8iS5cbiAgICAgICAgICAgICAgICAvLyBJbiBvcmRlciB0byBhdm9pZCB3ZWlyZCBhY3Rpb24gaW4gU291Z291IEtleWJvYXJkLCB1c2UgcmVzb3RyZURvbSBvbmx5IHJhbmdlJ3MgaXNDb2xsYXBzZWQgaXMgZmFsc2UgKHJlY29nbml6ZSBnYm9hcmQpXG4gICAgICAgICAgICAgICAgaWYgKCFSYW5nZS5pc0NvbGxhcHNlZCh0YXJnZXRSYW5nZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdG9yZURvbShlZGl0b3IsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuZGVsZXRlKGVkaXRvciwgeyBhdDogdGFyZ2V0UmFuZ2UgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdpbnNlcnRUZXh0Jykge1xuICAgICAgICAgICAgICAgIHJlc3RvcmVEb20oZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5pbnNlcnRUZXh0KGVkaXRvciwgZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMucmVhZG9ubHkgJiZcbiAgICAgICAgICAgIGhhc0VkaXRhYmxlVGFyZ2V0KGVkaXRvciwgZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAgICAgIWlzVGFyZ2V0SW5zaWRlVm9pZChlZGl0b3IsIGFjdGl2ZUVsZW1lbnQpICYmXG4gICAgICAgICAgICAhdGhpcy5pc0RPTUV2ZW50SGFuZGxlZChldmVudCwgdGhpcy5iZWZvcmVJbnB1dClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAvLyBDT01QQVQ6IElmIHRoZSBzZWxlY3Rpb24gaXMgZXhwYW5kZWQsIGV2ZW4gaWYgdGhlIGNvbW1hbmQgc2VlbXMgbGlrZVxuICAgICAgICAgICAgICAgIC8vIGEgZGVsZXRlIGZvcndhcmQvYmFja3dhcmQgY29tbWFuZCBpdCBzaG91bGQgZGVsZXRlIHRoZSBzZWxlY3Rpb24uXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBSYW5nZS5pc0V4cGFuZGVkKHNlbGVjdGlvbikgJiYgdHlwZS5zdGFydHNXaXRoKCdkZWxldGUnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSB0eXBlLmVuZHNXaXRoKCdCYWNrd2FyZCcpID8gJ2JhY2t3YXJkJyA6ICdmb3J3YXJkJztcbiAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZyYWdtZW50KGVkaXRvciwgeyBkaXJlY3Rpb24gfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlQnlDb21wb3NpdGlvbic6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RlbGV0ZUJ5Q3V0JzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlQnlEcmFnJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZyYWdtZW50KGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RlbGV0ZUNvbnRlbnQnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkZWxldGVDb250ZW50Rm9yd2FyZCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVGb3J3YXJkKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RlbGV0ZUNvbnRlbnRCYWNrd2FyZCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVCYWNrd2FyZChlZGl0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkZWxldGVFbnRpcmVTb2Z0TGluZSc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVCYWNrd2FyZChlZGl0b3IsIHsgdW5pdDogJ2xpbmUnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZvcndhcmQoZWRpdG9yLCB7IHVuaXQ6ICdsaW5lJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlSGFyZExpbmVCYWNrd2FyZCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVCYWNrd2FyZChlZGl0b3IsIHsgdW5pdDogJ2Jsb2NrJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlU29mdExpbmVCYWNrd2FyZCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVCYWNrd2FyZChlZGl0b3IsIHsgdW5pdDogJ2xpbmUnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdkZWxldGVIYXJkTGluZUZvcndhcmQnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRm9yd2FyZChlZGl0b3IsIHsgdW5pdDogJ2Jsb2NrJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlU29mdExpbmVGb3J3YXJkJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZvcndhcmQoZWRpdG9yLCB7IHVuaXQ6ICdsaW5lJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGVsZXRlV29yZEJhY2t3YXJkJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUJhY2t3YXJkKGVkaXRvciwgeyB1bml0OiAnd29yZCcgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RlbGV0ZVdvcmRGb3J3YXJkJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZvcndhcmQoZWRpdG9yLCB7IHVuaXQ6ICd3b3JkJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5zZXJ0TGluZUJyZWFrJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5zZXJ0UGFyYWdyYXBoJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmluc2VydEJyZWFrKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luc2VydEZyb21Db21wb3NpdGlvbic6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENPTVBBVDogaW4gc2FmYXJpLCBgY29tcG9zaXRpb25lbmRgIGV2ZW50IGlzIGRpc3BhdGNoZWQgYWZ0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBiZWZvcmVpbnB1dCBldmVudCB3aXRoIHRoZSBpbnB1dFR5cGUgXCJpbnNlcnRGcm9tQ29tcG9zaXRpb25cIiBoYXMgYmVlbiBkaXNwYXRjaGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2lucHV0LWV2ZW50cy0yL1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gdGhlIGZvbGxvd2luZyBjb2RlIGlzIHRoZSByaWdodCBsb2dpY1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBET00gc2VsZWN0aW9uIGluIHN5bmMgd2lsbCBiZSBleGVjIGJlZm9yZSBgY29tcG9zaXRpb25lbmRgIGV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpc0NvbXBvc2luZyBpcyB0cnVlIHdpbGwgcHJldmVudCBET00gc2VsZWN0aW9uIGJlaW5nIHVwZGF0ZSBjb3JyZWN0bHkuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQ29tcG9zaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50SW5zZXJ0RnJvbUNvbXBvc2l0aW9uKGV2ZW50LCB0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5zZXJ0RnJvbURyb3AnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbnNlcnRGcm9tUGFzdGUnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpbnNlcnRGcm9tWWFuayc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luc2VydFJlcGxhY2VtZW50VGV4dCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luc2VydFRleHQnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB1c2UgYSB3ZWFrIGNvbXBhcmlzb24gaW5zdGVhZCBvZiAnaW5zdGFuY2VvZicgdG8gYWxsb3dcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb2dyYW1tYXRpYyBhY2Nlc3Mgb2YgcGFzdGUgZXZlbnRzIGNvbWluZyBmcm9tIGV4dGVybmFsIHdpbmRvd3NcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpa2UgY3lwcmVzcyB3aGVyZSBjeS53aW5kb3cgZG9lcyBub3Qgd29yayByZWFsaWJseVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGE/LmNvbnN0cnVjdG9yLm5hbWUgPT09ICdEYXRhVHJhbnNmZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5ndWxhckVkaXRvci5pbnNlcnREYXRhKGVkaXRvciwgZGF0YSBhcyBEYXRhVHJhbnNmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuaW5zZXJ0VGV4dChlZGl0b3IsIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLm9uRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBTbGF0ZUVycm9yQ29kZS5PbkRPTUJlZm9yZUlucHV0RXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIG5hdGl2ZUVycm9yOiBlcnJvclxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRPTUJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5yZWFkb25seSB8fFxuICAgICAgICAgICAgdGhpcy5pc1VwZGF0aW5nU2VsZWN0aW9uIHx8XG4gICAgICAgICAgICAhaGFzRWRpdGFibGVUYXJnZXQodGhpcy5lZGl0b3IsIGV2ZW50LnRhcmdldCkgfHxcbiAgICAgICAgICAgIHRoaXMuaXNET01FdmVudEhhbmRsZWQoZXZlbnQsIHRoaXMuYmx1cilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3aW5kb3cgPSBBbmd1bGFyRWRpdG9yLmdldFdpbmRvdyh0aGlzLmVkaXRvcik7XG5cbiAgICAgICAgLy8gQ09NUEFUOiBJZiB0aGUgY3VycmVudCBgYWN0aXZlRWxlbWVudGAgaXMgc3RpbGwgdGhlIHByZXZpb3VzXG4gICAgICAgIC8vIG9uZSwgdGhpcyBpcyBkdWUgdG8gdGhlIHdpbmRvdyBiZWluZyBibHVycmVkIHdoZW4gdGhlIHRhYlxuICAgICAgICAvLyBpdHNlbGYgYmVjb21lcyB1bmZvY3VzZWQsIHNvIHdlIHdhbnQgdG8gYWJvcnQgZWFybHkgdG8gYWxsb3cgdG9cbiAgICAgICAgLy8gZWRpdG9yIHRvIHN0YXkgZm9jdXNlZCB3aGVuIHRoZSB0YWIgYmVjb21lcyBmb2N1c2VkIGFnYWluLlxuICAgICAgICBjb25zdCByb290ID0gQW5ndWxhckVkaXRvci5maW5kRG9jdW1lbnRPclNoYWRvd1Jvb3QodGhpcy5lZGl0b3IpO1xuICAgICAgICBpZiAodGhpcy5sYXRlc3RFbGVtZW50ID09PSByb290LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgcmVsYXRlZFRhcmdldCB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IGVsID0gQW5ndWxhckVkaXRvci50b0RPTU5vZGUodGhpcy5lZGl0b3IsIHRoaXMuZWRpdG9yKTtcblxuICAgICAgICAvLyBDT01QQVQ6IFRoZSBldmVudCBzaG91bGQgYmUgaWdub3JlZCBpZiB0aGUgZm9jdXMgaXMgcmV0dXJuaW5nXG4gICAgICAgIC8vIHRvIHRoZSBlZGl0b3IgZnJvbSBhbiBlbWJlZGRlZCBlZGl0YWJsZSBlbGVtZW50IChlZy4gYW4gPGlucHV0PlxuICAgICAgICAvLyBlbGVtZW50IGluc2lkZSBhIHZvaWQgbm9kZSkuXG4gICAgICAgIGlmIChyZWxhdGVkVGFyZ2V0ID09PSBlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ09NUEFUOiBUaGUgZXZlbnQgc2hvdWxkIGJlIGlnbm9yZWQgaWYgdGhlIGZvY3VzIGlzIG1vdmluZyBmcm9tXG4gICAgICAgIC8vIHRoZSBlZGl0b3IgdG8gaW5zaWRlIGEgdm9pZCBub2RlJ3Mgc3BhY2VyIGVsZW1lbnQuXG4gICAgICAgIGlmIChpc0RPTUVsZW1lbnQocmVsYXRlZFRhcmdldCkgJiYgcmVsYXRlZFRhcmdldC5oYXNBdHRyaWJ1dGUoJ2RhdGEtc2xhdGUtc3BhY2VyJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENPTVBBVDogVGhlIGV2ZW50IHNob3VsZCBiZSBpZ25vcmVkIGlmIHRoZSBmb2N1cyBpcyBtb3ZpbmcgdG8gYVxuICAgICAgICAvLyBub24tIGVkaXRhYmxlIHNlY3Rpb24gb2YgYW4gZWxlbWVudCB0aGF0IGlzbid0IGEgdm9pZCBub2RlIChlZy5cbiAgICAgICAgLy8gYSBsaXN0IGl0ZW0gb2YgdGhlIGNoZWNrIGxpc3QgZXhhbXBsZSkuXG4gICAgICAgIGlmIChyZWxhdGVkVGFyZ2V0ICE9IG51bGwgJiYgaXNET01Ob2RlKHJlbGF0ZWRUYXJnZXQpICYmIEFuZ3VsYXJFZGl0b3IuaGFzRE9NTm9kZSh0aGlzLmVkaXRvciwgcmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBBbmd1bGFyRWRpdG9yLnRvU2xhdGVOb2RlKHRoaXMuZWRpdG9yLCByZWxhdGVkVGFyZ2V0KTtcblxuICAgICAgICAgICAgaWYgKEVsZW1lbnQuaXNFbGVtZW50KG5vZGUpICYmICF0aGlzLmVkaXRvci5pc1ZvaWQobm9kZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBJU19GT0NVU0VELmRlbGV0ZSh0aGlzLmVkaXRvcik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRPTUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLnJlYWRvbmx5ICYmXG4gICAgICAgICAgICBoYXNUYXJnZXQodGhpcy5lZGl0b3IsIGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICAgICAgICF0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50LCB0aGlzLmNsaWNrKSAmJlxuICAgICAgICAgICAgaXNET01Ob2RlKGV2ZW50LnRhcmdldClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gQW5ndWxhckVkaXRvci50b1NsYXRlTm9kZSh0aGlzLmVkaXRvciwgZXZlbnQudGFyZ2V0KTtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBBbmd1bGFyRWRpdG9yLmZpbmRQYXRoKHRoaXMuZWRpdG9yLCBub2RlKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gRWRpdG9yLnN0YXJ0KHRoaXMuZWRpdG9yLCBwYXRoKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IEVkaXRvci5lbmQodGhpcy5lZGl0b3IsIHBhdGgpO1xuXG4gICAgICAgICAgICBjb25zdCBzdGFydFZvaWQgPSBFZGl0b3Iudm9pZCh0aGlzLmVkaXRvciwgeyBhdDogc3RhcnQgfSk7XG4gICAgICAgICAgICBjb25zdCBlbmRWb2lkID0gRWRpdG9yLnZvaWQodGhpcy5lZGl0b3IsIHsgYXQ6IGVuZCB9KTtcblxuICAgICAgICAgICAgaWYgKGV2ZW50LmRldGFpbCA9PT0gVFJJUExFX0NMSUNLICYmIHBhdGgubGVuZ3RoID49IDEpIHtcbiAgICAgICAgICAgICAgICBsZXQgYmxvY2tQYXRoID0gcGF0aDtcbiAgICAgICAgICAgICAgICBpZiAoIShFbGVtZW50LmlzRWxlbWVudChub2RlKSAmJiBFZGl0b3IuaXNCbG9jayh0aGlzLmVkaXRvciwgbm9kZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2NrID0gRWRpdG9yLmFib3ZlKHRoaXMuZWRpdG9yLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaDogbiA9PiBFbGVtZW50LmlzRWxlbWVudChuKSAmJiBFZGl0b3IuaXNCbG9jayh0aGlzLmVkaXRvciwgbiksXG4gICAgICAgICAgICAgICAgICAgICAgICBhdDogcGF0aFxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBibG9ja1BhdGggPSBibG9jaz8uWzFdID8/IHBhdGguc2xpY2UoMCwgMSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSBFZGl0b3IucmFuZ2UodGhpcy5lZGl0b3IsIGJsb2NrUGF0aCk7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QodGhpcy5lZGl0b3IsIHJhbmdlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdGFydFZvaWQgJiZcbiAgICAgICAgICAgICAgICBlbmRWb2lkICYmXG4gICAgICAgICAgICAgICAgUGF0aC5lcXVhbHMoc3RhcnRWb2lkWzFdLCBlbmRWb2lkWzFdKSAmJlxuICAgICAgICAgICAgICAgICEoQW5ndWxhckVkaXRvci5pc0Jsb2NrQ2FyZExlZnRDdXJzb3IodGhpcy5lZGl0b3IpIHx8IEFuZ3VsYXJFZGl0b3IuaXNCbG9ja0NhcmRSaWdodEN1cnNvcih0aGlzLmVkaXRvcikpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IEVkaXRvci5yYW5nZSh0aGlzLmVkaXRvciwgc3RhcnQpO1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KHRoaXMuZWRpdG9yLCByYW5nZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRE9NQ29tcG9zaXRpb25TdGFydChldmVudDogQ29tcG9zaXRpb25FdmVudCkge1xuICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gdGhpcy5lZGl0b3I7XG4gICAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIC8vIHNvbHZlIHRoZSBwcm9ibGVtIG9mIGNyb3NzIG5vZGUgQ2hpbmVzZSBpbnB1dFxuICAgICAgICAgICAgaWYgKFJhbmdlLmlzRXhwYW5kZWQoc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVGcmFnbWVudCh0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlbmRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNFZGl0YWJsZVRhcmdldCh0aGlzLmVkaXRvciwgZXZlbnQudGFyZ2V0KSAmJiAhdGhpcy5pc0RPTUV2ZW50SGFuZGxlZChldmVudCwgdGhpcy5jb21wb3NpdGlvblN0YXJ0KSkge1xuICAgICAgICAgICAgdGhpcy5pc0NvbXBvc2luZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRE9NQ29tcG9zaXRpb25VcGRhdGUoZXZlbnQ6IENvbXBvc2l0aW9uRXZlbnQpIHtcbiAgICAgICAgdGhpcy5pc0RPTUV2ZW50SGFuZGxlZChldmVudCwgdGhpcy5jb21wb3NpdGlvblVwZGF0ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRPTUNvbXBvc2l0aW9uRW5kKGV2ZW50OiBDb21wb3NpdGlvbkV2ZW50KSB7XG4gICAgICAgIGlmICghZXZlbnQuZGF0YSAmJiAhUmFuZ2UuaXNDb2xsYXBzZWQodGhpcy5lZGl0b3Iuc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5kZWxldGUodGhpcy5lZGl0b3IpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNFZGl0YWJsZVRhcmdldCh0aGlzLmVkaXRvciwgZXZlbnQudGFyZ2V0KSAmJiAhdGhpcy5pc0RPTUV2ZW50SGFuZGxlZChldmVudCwgdGhpcy5jb21wb3NpdGlvbkVuZCkpIHtcbiAgICAgICAgICAgIC8vIENPTVBBVDogSW4gQ2hyb21lL0ZpcmVmb3gsIGBiZWZvcmVpbnB1dGAgZXZlbnRzIGZvciBjb21wb3NpdGlvbnNcbiAgICAgICAgICAgIC8vIGFyZW4ndCBjb3JyZWN0IGFuZCBuZXZlciBmaXJlIHRoZSBcImluc2VydEZyb21Db21wb3NpdGlvblwiXG4gICAgICAgICAgICAvLyB0eXBlIHRoYXQgd2UgbmVlZC4gU28gaW5zdGVhZCwgaW5zZXJ0IHdoZW5ldmVyIGEgY29tcG9zaXRpb25cbiAgICAgICAgICAgIC8vIGVuZHMgc2luY2UgaXQgd2lsbCBhbHJlYWR5IGhhdmUgYmVlbiBjb21taXR0ZWQgdG8gdGhlIERPTS5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ29tcG9zaW5nID09PSB0cnVlICYmICFJU19TQUZBUkkgJiYgIUlTX0FORFJPSUQgJiYgZXZlbnQuZGF0YSkge1xuICAgICAgICAgICAgICAgIHByZXZlbnRJbnNlcnRGcm9tQ29tcG9zaXRpb24oZXZlbnQsIHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgICAgICBFZGl0b3IuaW5zZXJ0VGV4dCh0aGlzLmVkaXRvciwgZXZlbnQuZGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENPTVBBVDogSW4gRmlyZWZveCA4Ny4wIENvbXBvc2l0aW9uRW5kIGZpcmUgdHdpY2VcbiAgICAgICAgICAgIC8vIHNvIHdlIG5lZWQgYXZvaWQgcmVwZWF0IGlzbmVydFRleHQgYnkgaXNDb21wb3NpbmcgPT09IHRydWUsXG4gICAgICAgICAgICB0aGlzLmlzQ29tcG9zaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRE9NQ29weShldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3Qgd2luZG93ID0gQW5ndWxhckVkaXRvci5nZXRXaW5kb3codGhpcy5lZGl0b3IpO1xuICAgICAgICBjb25zdCBpc091dHNpZGVTbGF0ZSA9ICFoYXNTdHJpbmdUYXJnZXQod2luZG93LmdldFNlbGVjdGlvbigpKSAmJiBpc1RhcmdldEluc2lkZVZvaWQodGhpcy5lZGl0b3IsIGV2ZW50LnRhcmdldCk7XG4gICAgICAgIGlmICghaXNPdXRzaWRlU2xhdGUgJiYgaGFzVGFyZ2V0KHRoaXMuZWRpdG9yLCBldmVudC50YXJnZXQpICYmICF0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50LCB0aGlzLmNvcHkpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgQW5ndWxhckVkaXRvci5zZXRGcmFnbWVudERhdGEodGhpcy5lZGl0b3IsIGV2ZW50LmNsaXBib2FyZERhdGEsICdjb3B5Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRE9NQ3V0KGV2ZW50OiBDbGlwYm9hcmRFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMucmVhZG9ubHkgJiYgaGFzRWRpdGFibGVUYXJnZXQodGhpcy5lZGl0b3IsIGV2ZW50LnRhcmdldCkgJiYgIXRoaXMuaXNET01FdmVudEhhbmRsZWQoZXZlbnQsIHRoaXMuY3V0KSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIEFuZ3VsYXJFZGl0b3Iuc2V0RnJhZ21lbnREYXRhKHRoaXMuZWRpdG9yLCBldmVudC5jbGlwYm9hcmREYXRhLCAnY3V0Jyk7XG4gICAgICAgICAgICBjb25zdCB7IHNlbGVjdGlvbiB9ID0gdGhpcy5lZGl0b3I7XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBBbmd1bGFyRWRpdG9yLmRlbGV0ZUN1dERhdGEodGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRPTURyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAgICAgaWYgKGhhc1RhcmdldCh0aGlzLmVkaXRvciwgZXZlbnQudGFyZ2V0KSAmJiAhdGhpcy5pc0RPTUV2ZW50SGFuZGxlZChldmVudCwgdGhpcy5kcmFnT3ZlcikpIHtcbiAgICAgICAgICAgIC8vIE9ubHkgd2hlbiB0aGUgdGFyZ2V0IGlzIHZvaWQsIGNhbGwgYHByZXZlbnREZWZhdWx0YCB0byBzaWduYWxcbiAgICAgICAgICAgIC8vIHRoYXQgZHJvcHMgYXJlIGFsbG93ZWQuIEVkaXRhYmxlIGNvbnRlbnQgaXMgZHJvcHBhYmxlIGJ5XG4gICAgICAgICAgICAvLyBkZWZhdWx0LCBhbmQgY2FsbGluZyBgcHJldmVudERlZmF1bHRgIGhpZGVzIHRoZSBjdXJzb3IuXG4gICAgICAgICAgICBjb25zdCBub2RlID0gQW5ndWxhckVkaXRvci50b1NsYXRlTm9kZSh0aGlzLmVkaXRvciwgZXZlbnQudGFyZ2V0KTtcblxuICAgICAgICAgICAgaWYgKEVsZW1lbnQuaXNFbGVtZW50KG5vZGUpICYmIEVkaXRvci5pc1ZvaWQodGhpcy5lZGl0b3IsIG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25ET01EcmFnU3RhcnQoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMucmVhZG9ubHkgJiYgaGFzVGFyZ2V0KHRoaXMuZWRpdG9yLCBldmVudC50YXJnZXQpICYmICF0aGlzLmlzRE9NRXZlbnRIYW5kbGVkKGV2ZW50LCB0aGlzLmRyYWdTdGFydCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBBbmd1bGFyRWRpdG9yLnRvU2xhdGVOb2RlKHRoaXMuZWRpdG9yLCBldmVudC50YXJnZXQpO1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IEFuZ3VsYXJFZGl0b3IuZmluZFBhdGgodGhpcy5lZGl0b3IsIG5vZGUpO1xuICAgICAgICAgICAgY29uc3Qgdm9pZE1hdGNoID1cbiAgICAgICAgICAgICAgICBFbGVtZW50LmlzRWxlbWVudChub2RlKSAmJiAoRWRpdG9yLmlzVm9pZCh0aGlzLmVkaXRvciwgbm9kZSkgfHwgRWRpdG9yLnZvaWQodGhpcy5lZGl0b3IsIHsgYXQ6IHBhdGgsIHZvaWRzOiB0cnVlIH0pKTtcblxuICAgICAgICAgICAgLy8gSWYgc3RhcnRpbmcgYSBkcmFnIG9uIGEgdm9pZCBub2RlLCBtYWtlIHN1cmUgaXQgaXMgc2VsZWN0ZWRcbiAgICAgICAgICAgIC8vIHNvIHRoYXQgaXQgc2hvd3MgdXAgaW4gdGhlIHNlbGVjdGlvbidzIGZyYWdtZW50LlxuICAgICAgICAgICAgaWYgKHZvaWRNYXRjaCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gRWRpdG9yLnJhbmdlKHRoaXMuZWRpdG9yLCBwYXRoKTtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdCh0aGlzLmVkaXRvciwgcmFuZ2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmlzRHJhZ2dpbmdJbnRlcm5hbGx5ID0gdHJ1ZTtcblxuICAgICAgICAgICAgQW5ndWxhckVkaXRvci5zZXRGcmFnbWVudERhdGEodGhpcy5lZGl0b3IsIGV2ZW50LmRhdGFUcmFuc2ZlciwgJ2RyYWcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25ET01Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICAgICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgICAgIGlmICghdGhpcy5yZWFkb25seSAmJiBoYXNUYXJnZXQodGhpcy5lZGl0b3IsIGV2ZW50LnRhcmdldCkgJiYgIXRoaXMuaXNET01FdmVudEhhbmRsZWQoZXZlbnQsIHRoaXMuZHJvcCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAvLyBLZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBkcmFnZ2VkIHJhbmdlIGJlZm9yZSB1cGRhdGluZyBzZWxlY3Rpb25cbiAgICAgICAgICAgIGNvbnN0IGRyYWdnZWRSYW5nZSA9IGVkaXRvci5zZWxlY3Rpb247XG5cbiAgICAgICAgICAgIC8vIEZpbmQgdGhlIHJhbmdlIHdoZXJlIHRoZSBkcm9wIGhhcHBlbmVkXG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IEFuZ3VsYXJFZGl0b3IuZmluZEV2ZW50UmFuZ2UoZWRpdG9yLCBldmVudCk7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YVRyYW5zZmVyO1xuXG4gICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIHJhbmdlKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNEcmFnZ2luZ0ludGVybmFsbHkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZHJhZ2dlZFJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuZGVsZXRlKGVkaXRvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXQ6IGRyYWdnZWRSYW5nZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmlzRHJhZ2dpbmdJbnRlcm5hbGx5ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEFuZ3VsYXJFZGl0b3IuaW5zZXJ0RGF0YShlZGl0b3IsIGRhdGEpO1xuXG4gICAgICAgICAgICAvLyBXaGVuIGRyYWdnaW5nIGZyb20gYW5vdGhlciBzb3VyY2UgaW50byB0aGUgZWRpdG9yLCBpdCdzIHBvc3NpYmxlXG4gICAgICAgICAgICAvLyB0aGF0IHRoZSBjdXJyZW50IGVkaXRvciBkb2VzIG5vdCBoYXZlIGZvY3VzLlxuICAgICAgICAgICAgaWYgKCFBbmd1bGFyRWRpdG9yLmlzRm9jdXNlZChlZGl0b3IpKSB7XG4gICAgICAgICAgICAgICAgQW5ndWxhckVkaXRvci5mb2N1cyhlZGl0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkRPTURyYWdFbmQoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5yZWFkb25seSAmJlxuICAgICAgICAgICAgdGhpcy5pc0RyYWdnaW5nSW50ZXJuYWxseSAmJlxuICAgICAgICAgICAgaGFzVGFyZ2V0KHRoaXMuZWRpdG9yLCBldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdGhpcy5pc0RPTUV2ZW50SGFuZGxlZChldmVudCwgdGhpcy5kcmFnRW5kKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuaXNEcmFnZ2luZ0ludGVybmFsbHkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25ET01Gb2N1cyhldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMucmVhZG9ubHkgJiZcbiAgICAgICAgICAgICF0aGlzLmlzVXBkYXRpbmdTZWxlY3Rpb24gJiZcbiAgICAgICAgICAgIGhhc0VkaXRhYmxlVGFyZ2V0KHRoaXMuZWRpdG9yLCBldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdGhpcy5pc0RPTUV2ZW50SGFuZGxlZChldmVudCwgdGhpcy5mb2N1cylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBlbCA9IEFuZ3VsYXJFZGl0b3IudG9ET01Ob2RlKHRoaXMuZWRpdG9yLCB0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICBjb25zdCByb290ID0gQW5ndWxhckVkaXRvci5maW5kRG9jdW1lbnRPclNoYWRvd1Jvb3QodGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgdGhpcy5sYXRlc3RFbGVtZW50ID0gcm9vdC5hY3RpdmVFbGVtZW50O1xuXG4gICAgICAgICAgICAvLyBDT01QQVQ6IElmIHRoZSBlZGl0b3IgaGFzIG5lc3RlZCBlZGl0YWJsZSBlbGVtZW50cywgdGhlIGZvY3VzXG4gICAgICAgICAgICAvLyBjYW4gZ28gdG8gdGhlbS4gSW4gRmlyZWZveCwgdGhpcyBtdXN0IGJlIHByZXZlbnRlZCBiZWNhdXNlIGl0XG4gICAgICAgICAgICAvLyByZXN1bHRzIGluIGlzc3VlcyB3aXRoIGtleWJvYXJkIG5hdmlnYXRpb24uICgyMDE3LzAzLzMwKVxuICAgICAgICAgICAgaWYgKElTX0ZJUkVGT1ggJiYgZXZlbnQudGFyZ2V0ICE9PSBlbCkge1xuICAgICAgICAgICAgICAgIGVsLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBJU19GT0NVU0VELnNldCh0aGlzLmVkaXRvciwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRE9NS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICAgICAgY29uc3Qgcm9vdCA9IEFuZ3VsYXJFZGl0b3IuZmluZERvY3VtZW50T3JTaGFkb3dSb290KHRoaXMuZWRpdG9yKTtcbiAgICAgICAgY29uc3QgeyBhY3RpdmVFbGVtZW50IH0gPSByb290O1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5yZWFkb25seSAmJlxuICAgICAgICAgICAgaGFzRWRpdGFibGVUYXJnZXQoZWRpdG9yLCBldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhaXNUYXJnZXRJbnNpZGVWb2lkKGVkaXRvciwgYWN0aXZlRWxlbWVudCkgJiYgLy8gc3RvcCBmaXJlIGtleWRvd24gaGFuZGxlIHdoZW4gZm9jdXMgdm9pZCBub2RlXG4gICAgICAgICAgICAhdGhpcy5pc0NvbXBvc2luZyAmJlxuICAgICAgICAgICAgIXRoaXMuaXNET01FdmVudEhhbmRsZWQoZXZlbnQsIHRoaXMua2V5ZG93bilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBuYXRpdmVFdmVudCA9IGV2ZW50O1xuICAgICAgICAgICAgY29uc3QgeyBzZWxlY3Rpb24gfSA9IGVkaXRvcjtcblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGVkaXRvci5jaGlsZHJlbltzZWxlY3Rpb24gIT09IG51bGwgPyBzZWxlY3Rpb24uZm9jdXMucGF0aFswXSA6IDBdO1xuICAgICAgICAgICAgY29uc3QgaXNSVEwgPSBkaXJlY3Rpb24oTm9kZS5zdHJpbmcoZWxlbWVudCkpID09PSAncnRsJztcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBDT01QQVQ6IFNpbmNlIHdlIHByZXZlbnQgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb25cbiAgICAgICAgICAgICAgICAvLyBgYmVmb3JlaW5wdXRgIGV2ZW50cywgdGhlIGJyb3dzZXIgZG9lc24ndCB0aGluayB0aGVyZSdzIGV2ZXJcbiAgICAgICAgICAgICAgICAvLyBhbnkgaGlzdG9yeSBzdGFjayB0byB1bmRvIG9yIHJlZG8sIHNvIHdlIGhhdmUgdG8gbWFuYWdlIHRoZXNlXG4gICAgICAgICAgICAgICAgLy8gaG90a2V5cyBvdXJzZWx2ZXMuICgyMDE5LzExLzA2KVxuICAgICAgICAgICAgICAgIGlmIChIb3RrZXlzLmlzUmVkbyhuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoSGlzdG9yeUVkaXRvci5pc0hpc3RvcnlFZGl0b3IoZWRpdG9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yLnJlZG8oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc1VuZG8obmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKEhpc3RvcnlFZGl0b3IuaXNIaXN0b3J5RWRpdG9yKGVkaXRvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRvci51bmRvKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQ09NUEFUOiBDZXJ0YWluIGJyb3dzZXJzIGRvbid0IGhhbmRsZSB0aGUgc2VsZWN0aW9uIHVwZGF0ZXNcbiAgICAgICAgICAgICAgICAvLyBwcm9wZXJseS4gSW4gQ2hyb21lLCB0aGUgc2VsZWN0aW9uIGlzbid0IHByb3Blcmx5IGV4dGVuZGVkLlxuICAgICAgICAgICAgICAgIC8vIEFuZCBpbiBGaXJlZm94LCB0aGUgc2VsZWN0aW9uIGlzbid0IHByb3Blcmx5IGNvbGxhcHNlZC5cbiAgICAgICAgICAgICAgICAvLyAoMjAxNy8xMC8xNylcbiAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc01vdmVMaW5lQmFja3dhcmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMubW92ZShlZGl0b3IsIHsgdW5pdDogJ2xpbmUnLCByZXZlcnNlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNNb3ZlTGluZUZvcndhcmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMubW92ZShlZGl0b3IsIHsgdW5pdDogJ2xpbmUnIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNFeHRlbmRMaW5lQmFja3dhcmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMubW92ZShlZGl0b3IsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuaXQ6ICdsaW5lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2U6ICdmb2N1cycsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXZlcnNlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNFeHRlbmRMaW5lRm9yd2FyZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5tb3ZlKGVkaXRvciwgeyB1bml0OiAnbGluZScsIGVkZ2U6ICdmb2N1cycgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBDT01QQVQ6IElmIGEgdm9pZCBub2RlIGlzIHNlbGVjdGVkLCBvciBhIHplcm8td2lkdGggdGV4dCBub2RlXG4gICAgICAgICAgICAgICAgLy8gYWRqYWNlbnQgdG8gYW4gaW5saW5lIGlzIHNlbGVjdGVkLCB3ZSBuZWVkIHRvIGhhbmRsZSB0aGVzZVxuICAgICAgICAgICAgICAgIC8vIGhvdGtleXMgbWFudWFsbHkgYmVjYXVzZSBicm93c2VycyB3b24ndCBiZSBhYmxlIHRvIHNraXAgb3ZlclxuICAgICAgICAgICAgICAgIC8vIHRoZSB2b2lkIG5vZGUgd2l0aCB0aGUgemVyby13aWR0aCBzcGFjZSBub3QgYmVpbmcgYW4gZW1wdHlcbiAgICAgICAgICAgICAgICAvLyBzdHJpbmcuXG4gICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNNb3ZlQmFja3dhcmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBSYW5nZS5pc0NvbGxhcHNlZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLm1vdmUoZWRpdG9yLCB7IHJldmVyc2U6ICFpc1JUTCB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuY29sbGFwc2UoZWRpdG9yLCB7IGVkZ2U6ICdzdGFydCcgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNNb3ZlRm9yd2FyZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIFJhbmdlLmlzQ29sbGFwc2VkKHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMubW92ZShlZGl0b3IsIHsgcmV2ZXJzZTogaXNSVEwgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLmNvbGxhcHNlKGVkaXRvciwgeyBlZGdlOiAnZW5kJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc01vdmVXb3JkQmFja3dhcmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBSYW5nZS5pc0V4cGFuZGVkKHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuY29sbGFwc2UoZWRpdG9yLCB7IGVkZ2U6ICdmb2N1cycgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLm1vdmUoZWRpdG9yLCB7IHVuaXQ6ICd3b3JkJywgcmV2ZXJzZTogIWlzUlRMIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNNb3ZlV29yZEZvcndhcmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBSYW5nZS5pc0V4cGFuZGVkKHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuY29sbGFwc2UoZWRpdG9yLCB7IGVkZ2U6ICdmb2N1cycgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLm1vdmUoZWRpdG9yLCB7IHVuaXQ6ICd3b3JkJywgcmV2ZXJzZTogaXNSVEwgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBDT01QQVQ6IENlcnRhaW4gYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCB0aGUgYGJlZm9yZWlucHV0YCBldmVudCwgc28gd2VcbiAgICAgICAgICAgICAgICAvLyBmYWxsIGJhY2sgdG8gZ3Vlc3NpbmcgYXQgdGhlIGlucHV0IGludGVudGlvbiBmb3IgaG90a2V5cy5cbiAgICAgICAgICAgICAgICAvLyBDT01QQVQ6IEluIGlPUywgc29tZSBvZiB0aGVzZSBob3RrZXlzIGFyZSBoYW5kbGVkIGluIHRoZVxuICAgICAgICAgICAgICAgIGlmICghSEFTX0JFRk9SRV9JTlBVVF9TVVBQT1JUKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgYSBjb3JlIGJlaGF2aW9yIGZvciB0aGVzZSwgYnV0IHRoZXkgY2hhbmdlIHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyBET00gaWYgd2UgZG9uJ3QgcHJldmVudCB0aGVtLCBzbyB3ZSBoYXZlIHRvLlxuICAgICAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc0JvbGQobmF0aXZlRXZlbnQpIHx8IEhvdGtleXMuaXNJdGFsaWMobmF0aXZlRXZlbnQpIHx8IEhvdGtleXMuaXNUcmFuc3Bvc2VDaGFyYWN0ZXIobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNTcGxpdEJsb2NrKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5pbnNlcnRCcmVhayhlZGl0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNEZWxldGVCYWNrd2FyZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb24gJiYgUmFuZ2UuaXNFeHBhbmRlZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZyYWdtZW50KGVkaXRvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb246ICdiYWNrd2FyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUJhY2t3YXJkKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChIb3RrZXlzLmlzRGVsZXRlRm9yd2FyZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb24gJiYgUmFuZ2UuaXNFeHBhbmRlZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZyYWdtZW50KGVkaXRvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb246ICdmb3J3YXJkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRm9yd2FyZChlZGl0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc0RlbGV0ZUxpbmVCYWNrd2FyZChuYXRpdmVFdmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb24gJiYgUmFuZ2UuaXNFeHBhbmRlZChzZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZyYWdtZW50KGVkaXRvciwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb246ICdiYWNrd2FyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUJhY2t3YXJkKGVkaXRvciwgeyB1bml0OiAnbGluZScgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChIb3RrZXlzLmlzRGVsZXRlTGluZUZvcndhcmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIFJhbmdlLmlzRXhwYW5kZWQoc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVGcmFnbWVudChlZGl0b3IsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAnZm9yd2FyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmRlbGV0ZUZvcndhcmQoZWRpdG9yLCB7IHVuaXQ6ICdsaW5lJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKEhvdGtleXMuaXNEZWxldGVXb3JkQmFja3dhcmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uICYmIFJhbmdlLmlzRXhwYW5kZWQoc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVGcmFnbWVudChlZGl0b3IsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAnYmFja3dhcmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVCYWNrd2FyZChlZGl0b3IsIHsgdW5pdDogJ3dvcmQnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoSG90a2V5cy5pc0RlbGV0ZVdvcmRGb3J3YXJkKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBSYW5nZS5pc0V4cGFuZGVkKHNlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuZGVsZXRlRnJhZ21lbnQoZWRpdG9yLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogJ2ZvcndhcmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVGb3J3YXJkKGVkaXRvciwgeyB1bml0OiAnd29yZCcgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChJU19DSFJPTUUgfHwgSVNfU0FGQVJJKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDT01QQVQ6IENocm9tZSBhbmQgU2FmYXJpIHN1cHBvcnQgYGJlZm9yZWlucHV0YCBldmVudCBidXQgZG8gbm90IGZpcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuIGV2ZW50IHdoZW4gZGVsZXRpbmcgYmFja3dhcmRzIGluIGEgc2VsZWN0ZWQgdm9pZCBpbmxpbmUgbm9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChIb3RrZXlzLmlzRGVsZXRlQmFja3dhcmQobmF0aXZlRXZlbnQpIHx8IEhvdGtleXMuaXNEZWxldGVGb3J3YXJkKG5hdGl2ZUV2ZW50KSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYW5nZS5pc0NvbGxhcHNlZChzZWxlY3Rpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IE5vZGUucGFyZW50KGVkaXRvciwgc2VsZWN0aW9uLmFuY2hvci5wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQuaXNFbGVtZW50KGN1cnJlbnROb2RlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0b3IuaXNWb2lkKGVkaXRvciwgY3VycmVudE5vZGUpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChFZGl0b3IuaXNJbmxpbmUoZWRpdG9yLCBjdXJyZW50Tm9kZSkgfHwgRWRpdG9yLmlzQmxvY2soZWRpdG9yLCBjdXJyZW50Tm9kZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVCYWNrd2FyZChlZGl0b3IsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXQ6ICdibG9jaydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLm9uRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBTbGF0ZUVycm9yQ29kZS5PbkRPTUtleWRvd25FcnJvcixcbiAgICAgICAgICAgICAgICAgICAgbmF0aXZlRXJyb3I6IGVycm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRE9NUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XG4gICAgICAgIC8vIENPTVBBVDogQ2VydGFpbiBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSBgYmVmb3JlaW5wdXRgIGV2ZW50LCBzbyB3ZVxuICAgICAgICAvLyBmYWxsIGJhY2sgdG8gUmVhY3QncyBgb25QYXN0ZWAgaGVyZSBpbnN0ZWFkLlxuICAgICAgICAvLyBDT01QQVQ6IEZpcmVmb3gsIENocm9tZSBhbmQgU2FmYXJpIGFyZSBub3QgZW1pdHRpbmcgYGJlZm9yZWlucHV0YCBldmVudHNcbiAgICAgICAgLy8gd2hlbiBcInBhc3RlIHdpdGhvdXQgZm9ybWF0dGluZ1wiIG9wdGlvbiBpcyB1c2VkLlxuICAgICAgICAvLyBUaGlzIHVuZm9ydHVuYXRlbHkgbmVlZHMgdG8gYmUgaGFuZGxlZCB3aXRoIHBhc3RlIGV2ZW50cyBpbnN0ZWFkLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5pc0RPTUV2ZW50SGFuZGxlZChldmVudCwgdGhpcy5wYXN0ZSkgJiZcbiAgICAgICAgICAgICghSEFTX0JFRk9SRV9JTlBVVF9TVVBQT1JUIHx8IGlzUGxhaW5UZXh0T25seVBhc3RlKGV2ZW50KSB8fCBmb3JjZU9uRE9NUGFzdGUpICYmXG4gICAgICAgICAgICAhdGhpcy5yZWFkb25seSAmJlxuICAgICAgICAgICAgaGFzRWRpdGFibGVUYXJnZXQodGhpcy5lZGl0b3IsIGV2ZW50LnRhcmdldClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgQW5ndWxhckVkaXRvci5pbnNlcnREYXRhKHRoaXMuZWRpdG9yLCBldmVudC5jbGlwYm9hcmREYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25GYWxsYmFja0JlZm9yZUlucHV0KGV2ZW50OiBCZWZvcmVJbnB1dEV2ZW50KSB7XG4gICAgICAgIC8vIENPTVBBVDogQ2VydGFpbiBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSBgYmVmb3JlaW5wdXRgIGV2ZW50LCBzbyB3ZVxuICAgICAgICAvLyBmYWxsIGJhY2sgdG8gUmVhY3QncyBsZWFreSBwb2x5ZmlsbCBpbnN0ZWFkIGp1c3QgZm9yIGl0LiBJdFxuICAgICAgICAvLyBvbmx5IHdvcmtzIGZvciB0aGUgYGluc2VydFRleHRgIGlucHV0IHR5cGUuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFIQVNfQkVGT1JFX0lOUFVUX1NVUFBPUlQgJiZcbiAgICAgICAgICAgICF0aGlzLnJlYWRvbmx5ICYmXG4gICAgICAgICAgICAhdGhpcy5pc0RPTUV2ZW50SGFuZGxlZChldmVudC5uYXRpdmVFdmVudCwgdGhpcy5iZWZvcmVJbnB1dCkgJiZcbiAgICAgICAgICAgIGhhc0VkaXRhYmxlVGFyZ2V0KHRoaXMuZWRpdG9yLCBldmVudC5uYXRpdmVFdmVudC50YXJnZXQpXG4gICAgICAgICkge1xuICAgICAgICAgICAgZXZlbnQubmF0aXZlRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IGV2ZW50LmRhdGE7XG4gICAgICAgICAgICAgICAgaWYgKCFSYW5nZS5pc0NvbGxhcHNlZCh0aGlzLmVkaXRvci5zZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIEVkaXRvci5kZWxldGVGcmFnbWVudCh0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGp1c3QgaGFuZGxlIE5vbi1JTUUgaW5wdXRcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNDb21wb3NpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgRWRpdG9yLmluc2VydFRleHQodGhpcy5lZGl0b3IsIHRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3Iub25FcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFNsYXRlRXJyb3JDb2RlLlRvTmF0aXZlU2VsZWN0aW9uRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIG5hdGl2ZUVycm9yOiBlcnJvclxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0RPTUV2ZW50SGFuZGxlZChldmVudDogRXZlbnQsIGhhbmRsZXI/OiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkKSB7XG4gICAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZXIoZXZlbnQpO1xuICAgICAgICByZXR1cm4gZXZlbnQuZGVmYXVsdFByZXZlbnRlZDtcbiAgICB9XG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgTk9ERV9UT19FTEVNRU5ULmRlbGV0ZSh0aGlzLmVkaXRvcik7XG4gICAgICAgIHRoaXMubWFudWFsTGlzdGVuZXJzLmZvckVhY2gobWFudWFsTGlzdGVuZXIgPT4ge1xuICAgICAgICAgICAgbWFudWFsTGlzdGVuZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgRURJVE9SX1RPX09OX0NIQU5HRS5kZWxldGUodGhpcy5lZGl0b3IpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRTY3JvbGxTZWxlY3Rpb25JbnRvVmlldyA9IChlZGl0b3I6IEFuZ3VsYXJFZGl0b3IsIGRvbVJhbmdlOiBET01SYW5nZSkgPT4ge1xuICAgIC8vIFRoaXMgd2FzIGFmZmVjdGluZyB0aGUgc2VsZWN0aW9uIG9mIG11bHRpcGxlIGJsb2NrcyBhbmQgZHJhZ2dpbmcgYmVoYXZpb3IsXG4gICAgLy8gc28gZW5hYmxlZCBvbmx5IGlmIHRoZSBzZWxlY3Rpb24gaGFzIGJlZW4gY29sbGFwc2VkLlxuICAgIGlmIChkb21SYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QgJiYgKCFlZGl0b3Iuc2VsZWN0aW9uIHx8IChlZGl0b3Iuc2VsZWN0aW9uICYmIFJhbmdlLmlzQ29sbGFwc2VkKGVkaXRvci5zZWxlY3Rpb24pKSkpIHtcbiAgICAgICAgY29uc3QgbGVhZkVsID0gZG9tUmFuZ2Uuc3RhcnRDb250YWluZXIucGFyZW50RWxlbWVudCE7XG4gICAgICAgIGxlYWZFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QgPSBkb21SYW5nZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QuYmluZChkb21SYW5nZSk7XG4gICAgICAgIHNjcm9sbEludG9WaWV3KGxlYWZFbCwge1xuICAgICAgICAgICAgc2Nyb2xsTW9kZTogJ2lmLW5lZWRlZCdcbiAgICAgICAgfSk7XG4gICAgICAgIGRlbGV0ZSBsZWFmRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0O1xuICAgIH1cbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHRhcmdldCBpcyBlZGl0YWJsZSBhbmQgaW4gdGhlIGVkaXRvci5cbiAqL1xuXG5leHBvcnQgY29uc3QgaGFzRWRpdGFibGVUYXJnZXQgPSAoZWRpdG9yOiBBbmd1bGFyRWRpdG9yLCB0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCk6IHRhcmdldCBpcyBET01Ob2RlID0+IHtcbiAgICByZXR1cm4gaXNET01Ob2RlKHRhcmdldCkgJiYgQW5ndWxhckVkaXRvci5oYXNET01Ob2RlKGVkaXRvciwgdGFyZ2V0LCB7IGVkaXRhYmxlOiB0cnVlIH0pO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0d28gRE9NIHJhbmdlIG9iamVjdHMgYXJlIGVxdWFsLlxuICovXG5jb25zdCBpc1JhbmdlRXF1YWwgPSAoYTogRE9NUmFuZ2UsIGI6IERPTVJhbmdlKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKGEuc3RhcnRDb250YWluZXIgPT09IGIuc3RhcnRDb250YWluZXIgJiZcbiAgICAgICAgICAgIGEuc3RhcnRPZmZzZXQgPT09IGIuc3RhcnRPZmZzZXQgJiZcbiAgICAgICAgICAgIGEuZW5kQ29udGFpbmVyID09PSBiLmVuZENvbnRhaW5lciAmJlxuICAgICAgICAgICAgYS5lbmRPZmZzZXQgPT09IGIuZW5kT2Zmc2V0KSB8fFxuICAgICAgICAoYS5zdGFydENvbnRhaW5lciA9PT0gYi5lbmRDb250YWluZXIgJiZcbiAgICAgICAgICAgIGEuc3RhcnRPZmZzZXQgPT09IGIuZW5kT2Zmc2V0ICYmXG4gICAgICAgICAgICBhLmVuZENvbnRhaW5lciA9PT0gYi5zdGFydENvbnRhaW5lciAmJlxuICAgICAgICAgICAgYS5lbmRPZmZzZXQgPT09IGIuc3RhcnRPZmZzZXQpXG4gICAgKTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHRhcmdldCBpcyBpbiB0aGUgZWRpdG9yLlxuICovXG5cbmNvbnN0IGhhc1RhcmdldCA9IChlZGl0b3I6IEFuZ3VsYXJFZGl0b3IsIHRhcmdldDogRXZlbnRUYXJnZXQgfCBudWxsKTogdGFyZ2V0IGlzIERPTU5vZGUgPT4ge1xuICAgIHJldHVybiBpc0RPTU5vZGUodGFyZ2V0KSAmJiBBbmd1bGFyRWRpdG9yLmhhc0RPTU5vZGUoZWRpdG9yLCB0YXJnZXQpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgdGFyZ2V0IGlzIGluc2lkZSB2b2lkIGFuZCBpbiB0aGUgZWRpdG9yLlxuICovXG5cbmNvbnN0IGlzVGFyZ2V0SW5zaWRlVm9pZCA9IChlZGl0b3I6IEFuZ3VsYXJFZGl0b3IsIHRhcmdldDogRXZlbnRUYXJnZXQgfCBudWxsKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3Qgc2xhdGVOb2RlID0gaGFzVGFyZ2V0KGVkaXRvciwgdGFyZ2V0KSAmJiBBbmd1bGFyRWRpdG9yLnRvU2xhdGVOb2RlKGVkaXRvciwgdGFyZ2V0LCB7IHN1cHByZXNzVGhyb3c6IHRydWUgfSk7XG4gICAgcmV0dXJuIHNsYXRlTm9kZSAmJiBFbGVtZW50LmlzRWxlbWVudChzbGF0ZU5vZGUpICYmIEVkaXRvci5pc1ZvaWQoZWRpdG9yLCBzbGF0ZU5vZGUpO1xufTtcblxuY29uc3QgaGFzU3RyaW5nVGFyZ2V0ID0gKGRvbVNlbGVjdGlvbjogRE9NU2VsZWN0aW9uKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKGRvbVNlbGVjdGlvbi5hbmNob3JOb2RlLnBhcmVudEVsZW1lbnQuaGFzQXR0cmlidXRlKCdkYXRhLXNsYXRlLXN0cmluZycpIHx8XG4gICAgICAgICAgICBkb21TZWxlY3Rpb24uYW5jaG9yTm9kZS5wYXJlbnRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGF0YS1zbGF0ZS16ZXJvLXdpZHRoJykpICYmXG4gICAgICAgIChkb21TZWxlY3Rpb24uZm9jdXNOb2RlLnBhcmVudEVsZW1lbnQuaGFzQXR0cmlidXRlKCdkYXRhLXNsYXRlLXN0cmluZycpIHx8XG4gICAgICAgICAgICBkb21TZWxlY3Rpb24uZm9jdXNOb2RlLnBhcmVudEVsZW1lbnQuaGFzQXR0cmlidXRlKCdkYXRhLXNsYXRlLXplcm8td2lkdGgnKSlcbiAgICApO1xufTtcblxuLyoqXG4gKiByZW1vdmUgZGVmYXVsdCBpbnNlcnQgZnJvbSBjb21wb3NpdGlvblxuICogQHBhcmFtIHRleHRcbiAqL1xuY29uc3QgcHJldmVudEluc2VydEZyb21Db21wb3NpdGlvbiA9IChldmVudDogRXZlbnQsIGVkaXRvcjogQW5ndWxhckVkaXRvcikgPT4ge1xuICAgIGNvbnN0IHR5cGVzID0gWydjb21wb3NpdGlvbmVuZCcsICdpbnNlcnRGcm9tQ29tcG9zaXRpb24nXTtcbiAgICBpZiAoIXR5cGVzLmluY2x1ZGVzKGV2ZW50LnR5cGUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5zZXJ0VGV4dCA9IChldmVudCBhcyBDb21wb3NpdGlvbkV2ZW50KS5kYXRhO1xuICAgIGNvbnN0IHdpbmRvdyA9IEFuZ3VsYXJFZGl0b3IuZ2V0V2luZG93KGVkaXRvcik7XG4gICAgY29uc3QgZG9tU2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgIC8vIGVuc3VyZSB0ZXh0IG5vZGUgaW5zZXJ0IGNvbXBvc2l0aW9uIGlucHV0IHRleHRcbiAgICBpZiAoaW5zZXJ0VGV4dCAmJiBkb21TZWxlY3Rpb24uYW5jaG9yTm9kZSBpbnN0YW5jZW9mIFRleHQgJiYgZG9tU2VsZWN0aW9uLmFuY2hvck5vZGUudGV4dENvbnRlbnQuZW5kc1dpdGgoaW5zZXJ0VGV4dCkpIHtcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb21TZWxlY3Rpb24uYW5jaG9yTm9kZTtcbiAgICAgICAgdGV4dE5vZGUuc3BsaXRUZXh0KHRleHROb2RlLmxlbmd0aCAtIGluc2VydFRleHQubGVuZ3RoKS5yZW1vdmUoKTtcbiAgICB9XG59O1xuIiwiPHNsYXRlLXN0cmluZy10ZW1wbGF0ZSAjdGVtcGxhdGVDb21wb25lbnQ+PC9zbGF0ZS1zdHJpbmctdGVtcGxhdGU+XG4iXX0=