@wizishop/wizi-block 4.2.33-beta → 4.2.34-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/wizishop-wizi-block.umd.js +202 -263
- package/bundles/wizishop-wizi-block.umd.js.map +1 -1
- package/bundles/wizishop-wizi-block.umd.min.js +1 -1
- package/bundles/wizishop-wizi-block.umd.min.js.map +1 -1
- package/esm2015/lib/services/blocks/images/images-banner.service.js +2 -2
- package/esm2015/lib/services/blocks/images/images-simple.service.js +2 -2
- package/esm2015/lib/services/blocks/text-backgrounds/text-backgrounds-simple.service.js +2 -2
- package/esm2015/lib/services/blocks/text-backgrounds/text-backgrounds-with-banner.service.js +2 -2
- package/esm2015/lib/services/blocks/text-backgrounds/text-backgrounds-with-txt.service.js +2 -2
- package/esm2015/lib/shared/components/editorjs/tools/inline/tool-type/inline-style-tool.component.js +7 -4
- package/esm2015/lib/shared/components/quill/quill.component.js +2 -1
- package/esm2015/lib/structures/map/background-form-left/map-background-form-left.component.js +32 -41
- package/esm2015/lib/structures/map/background-form-right/map-background-form-right.component.js +32 -41
- package/esm2015/lib/structures/map/fullpage/map-fullpage.component.js +32 -43
- package/esm2015/lib/structures/map/left-text/map-left-text.component.js +30 -41
- package/esm2015/lib/structures/map/right-text/map-right-text.component.js +30 -41
- package/esm2015/lib/structures/map/text-form/map-text-form.component.js +32 -43
- package/esm2015/lib/structures/structures.module.js +3 -1
- package/fesm2015/wizishop-wizi-block.js +197 -245
- package/fesm2015/wizishop-wizi-block.js.map +1 -1
- package/lib/structures/map/background-form-left/map-background-form-left.component.d.ts +8 -6
- package/lib/structures/map/background-form-right/map-background-form-right.component.d.ts +8 -6
- package/lib/structures/map/fullpage/map-fullpage.component.d.ts +7 -5
- package/lib/structures/map/left-text/map-left-text.component.d.ts +7 -5
- package/lib/structures/map/right-text/map-right-text.component.d.ts +7 -5
- package/lib/structures/map/text-form/map-text-form.component.d.ts +8 -6
- package/package.json +1 -5
- package/wizi-block.scss +35 -30
- package/wizishop-wizi-block.metadata.json +1 -1
package/esm2015/lib/shared/components/editorjs/tools/inline/tool-type/inline-style-tool.component.js
CHANGED
|
@@ -383,7 +383,9 @@ export class InlineStyleTool extends EditorJSTool {
|
|
|
383
383
|
const children = Array.from(parentContainer.childNodes);
|
|
384
384
|
if ((children === null || children === void 0 ? void 0 : children.length) > 0) {
|
|
385
385
|
for (var currentNode = children[0]; currentNode; currentNode = currentNode.nextSibling) {
|
|
386
|
-
if (
|
|
386
|
+
if (!currentNode.textContent ||
|
|
387
|
+
currentNode.textContent.length === 0 ||
|
|
388
|
+
(currentNode.nodeType === Node.ELEMENT_NODE && currentNode.innerText.length === 0)) {
|
|
387
389
|
let previousSibling = currentNode.previousSibling;
|
|
388
390
|
parentContainer.removeChild(currentNode);
|
|
389
391
|
currentNode = previousSibling;
|
|
@@ -455,9 +457,10 @@ export class InlineStyleTool extends EditorJSTool {
|
|
|
455
457
|
}
|
|
456
458
|
identicalAttributes(currentElement, nextElement) {
|
|
457
459
|
let currentElementAttributes = currentElement.getAttributeNames();
|
|
458
|
-
currentElementAttributes.forEach(attribute => {
|
|
460
|
+
currentElementAttributes.forEach((attribute) => {
|
|
459
461
|
if (attribute !== 'style') {
|
|
460
|
-
if (!nextElement.getAttribute(attribute) ||
|
|
462
|
+
if (!nextElement.getAttribute(attribute) ||
|
|
463
|
+
nextElement.getAttribute(attribute) !== currentElement.getAttribute(attribute)) {
|
|
461
464
|
return false;
|
|
462
465
|
}
|
|
463
466
|
}
|
|
@@ -597,4 +600,4 @@ export class InlineStyleTool extends EditorJSTool {
|
|
|
597
600
|
return element;
|
|
598
601
|
}
|
|
599
602
|
}
|
|
600
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLXN0eWxlLXRvb2wuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3BhdWxpbmUvRG9jdW1lbnRzL3dvcmtzcGFjZS93aXppLWJsb2NrL3Byb2plY3RzL3dpemktYmxvY2svc3JjLyIsInNvdXJjZXMiOlsibGliL3NoYXJlZC9jb21wb25lbnRzL2VkaXRvcmpzL3Rvb2xzL2lubGluZS90b29sLXR5cGUvaW5saW5lLXN0eWxlLXRvb2wuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQW1CLFlBQVksRUFBZSxNQUFNLHFDQUFxQyxDQUFDO0FBRWpHLE1BQU0sT0FBZ0IsZUFBZ0IsU0FBUSxZQUFZO0lBQTFEOztRQUdJLGNBQVMsR0FBRyxXQUFXLENBQUM7UUFJeEIsc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBRTlCLHFCQUFnQixHQUFXLENBQUMsQ0FBQztRQUU3QixvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUVqQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUVoQyxjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBTXRCLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBTWpDLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRTlCLGFBQVEsR0FBRztZQUNQLEdBQUcsRUFBRSxLQUFLO1lBQ1YsS0FBSyxFQUFFLEtBQUs7WUFDWixLQUFLLEVBQUUsS0FBSztZQUNaLFNBQVMsRUFBRSxLQUFLO1NBQ25CLENBQUM7SUErbkJOLENBQUM7SUE3bkJTLGdCQUFnQixDQUFDLE1BQWM7O1lBQ2pDLE1BQU0sU0FBUyxHQUFxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hHLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ1osT0FBTzthQUNWO1lBQ0QsSUFBSSxVQUFVLEdBQVMsU0FBUyxDQUFDLFVBQVUsQ0FBQztZQUM1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QUFFO3dCQUNsRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQzt3QkFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7d0JBQ3pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUM7cUJBQ3JDO29CQUNELElBQUksQ0FBQyxTQUFTLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7b0JBQzlDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztvQkFDdEQsSUFBSSxDQUFDLGdCQUFnQixJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO2lCQUN4RDtnQkFDRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLEVBQUU7b0JBQ3JCLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFjLFFBQVEsQ0FBQyxDQUFDO2lCQUMxRDtnQkFDRCxRQUFRLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQzthQUNuQztZQUNELElBQUksYUFBYSxFQUFFO2dCQUNmLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQzdCO1FBQ0wsQ0FBQztLQUFBO0lBRU8sc0JBQXNCLENBQUMsT0FBb0I7O1FBQy9DLE9BQU8sT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsU0FBUyxZQUFtQixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBRSwwQ0FBRSxTQUFTLENBQUEsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDN0gsT0FBTyxHQUFnQixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXR0cmlidXRlT2JqZWN0LCBFZGl0b3JKU1Rvb2wsIFN0eWxlT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvZWRpdG9yanMtdG9vbC5jb21wb25lbnQnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSW5saW5lU3R5bGVUb29sIGV4dGVuZHMgRWRpdG9ySlNUb29sIHtcbiAgICB0YWc6IHN0cmluZztcblxuICAgIG1vZGlmaWVycyA9ICdzdHJvbmcsZW0nO1xuXG4gICAgc3R5bGU/OiBTdHlsZU9iamVjdDtcblxuICAgIGZvdW5kQW5jaG9yT2Zmc2V0OiBudW1iZXIgPSAwO1xuXG4gICAgZm91bmRGb2N1c09mZnNldDogbnVtYmVyID0gMDtcblxuICAgIGZvdW5kQW5jaG9yTm9kZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgZm91bmRGb2N1c05vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHRtcE9mZnNldDogbnVtYmVyID0gMDtcblxuICAgIGNsYXNzVG9BcHBseT86IHN0cmluZztcblxuICAgIGNsYXNzZXM/OiBzdHJpbmc7XG5cbiAgICBtb2RpZmllZENvbnRlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGF0dHJpYnV0ZU5hbWU/OiBzdHJpbmc7XG5cbiAgICBhdHRyaWJ1dGVzVG9BcHBseT86IEFycmF5PEF0dHJpYnV0ZU9iamVjdD47XG5cbiAgICBsaW5rRGVsZXRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIG1vZGlmaWVzID0ge1xuICAgICAgICB0YWc6IGZhbHNlLFxuICAgICAgICBzdHlsZTogZmFsc2UsXG4gICAgICAgIGNsYXNzOiBmYWxzZSxcbiAgICAgICAgYXR0cmlidXRlOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgYXN5bmMgZXhlY0NvbW1hbmRTdHlsZShhY3Rpb246IHN0cmluZykge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb246IFNlbGVjdGlvbiB8IG51bGwgPSB0aGlzLmN1cnJlbnRTZWxlY3Rpb24gPyB0aGlzLmN1cnJlbnRTZWxlY3Rpb24gOiB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgICAgICBpZiAoIXNlbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhbmNob3JOb2RlOiBOb2RlID0gc2VsZWN0aW9uLmFuY2hvck5vZGU7XG4gICAgICAgIGlmICghdGhpcy5wYXJlbnRFZGl0b3IpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50RWRpdG9yID0gdGhpcy5maW5kUGFyZW50RWRpdG9yKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWFuY2hvck5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY29udGFpbmVyOiBIVE1MRWxlbWVudCA9XG4gICAgICAgICAgICBhbmNob3JOb2RlLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSAmJiBhbmNob3JOb2RlLm5vZGVUeXBlICE9PSBOb2RlLkNPTU1FTlRfTk9ERVxuICAgICAgICAgICAgICAgID8gKGFuY2hvck5vZGUgYXMgSFRNTEVsZW1lbnQpXG4gICAgICAgICAgICAgICAgOiBhbmNob3JOb2RlLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHNhbWVTZWxlY3Rpb246IGJvb2xlYW4gPSBjb250YWluZXIgJiYgY29udGFpbmVyLmlubmVyVGV4dCA9PT0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZUlubGluZVNlbGVjdGlvbihjb250YWluZXIsIHRydWUpO1xuICAgICAgICBjb25zb2xlLmxvZygnPT09IGlubGluZSB0b29sIGV4ZWNDb21tYW5kU3R5bGUgbWV0aG9kID09PScpO1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmhhc1N0eWxlKGNvbnRhaW5lcikpO1xuXG4gICAgICAgIC8vIExpbmsgZGVsZXRlIGV4Y2VwdGlvblxuICAgICAgICBpZiAodGhpcy5saW5rRGVsZXRpb24pIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVwbGFjZUxpbmsoc2VsZWN0aW9uLCB0aGlzLmhhc1N0eWxlKGNvbnRhaW5lcikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHNhbWVTZWxlY3Rpb24gJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5pc0NvbnRhaW5lcih0aGlzLnRleHRDb250YWluZXJzLCBjb250YWluZXIpICYmXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNTdHlsZShjb250YWluZXIpICYmXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLnRvU3RyaW5nKCkgPT09IHRoaXMuaGFzU3R5bGUoY29udGFpbmVyKS5pbm5lclRleHRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCctPiB1cGRhdGUgc2VsZWN0aW9uJyk7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZWxlY3Rpb24oc2VsZWN0aW9uLCB0aGlzLmhhc1N0eWxlKGNvbnRhaW5lciksIGFjdGlvbiwgdGhpcy50ZXh0Q29udGFpbmVycyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCctPiByZXBsYWNlIHNlbGVjdGlvbicpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVwbGFjZVNlbGVjdGlvbih0aGlzLmdldE1vc3REZXNjZW5kYW50Q2hpbGQoY29udGFpbmVyKSwgYWN0aW9uLCBzZWxlY3Rpb24sIHRoaXMudGV4dENvbnRhaW5lcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuY2xlYW51cENvbnRhaW5lcihzZWxlY3Rpb24sIGNvbnRhaW5lciwgdHJ1ZSk7XG4gICAgICAgIGlmICh0aGlzLm1vZGlmaWVkQ29udGVudCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNldElubGluZVNlbGVjdGlvbihjb250YWluZXIsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB1cGRhdGVTZWxlY3Rpb24oc2VsZWN0aW9uOiBTZWxlY3Rpb24sIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIGFjdGlvbjogc3RyaW5nLCBjb250YWluZXJzOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kaWZpZXMuc3R5bGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNzcyA9IHRoaXMuc3R5bGUucHJvcGVydHk7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBhd2FpdCB0aGlzLmdldFN0eWxlVmFsdWUoY29udGFpbmVyLCBhY3Rpb24sIGNvbnRhaW5lcnMpO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnN0eWxlLmRlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGVbY3NzXSA9IHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUucmVtb3ZlUHJvcGVydHkodGhpcy5zdHlsZS5wcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByYW5nZTogUmFuZ2UgPSB0aGlzLmdldFJhbmdlT2JqZWN0KHNlbGVjdGlvbik7XG4gICAgICAgICAgICBsZXQgbmV3RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5oYXNTdHlsZShjb250YWluZXIpID8gJ3NwYW4nIDogdGhpcy50YWcpO1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kaWZpZXMuY2xhc3MpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZUNoaWxkcmVuQ2xhc3NlcyhuZXdFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jbGFzc1RvQXBwbHkgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzVG9BcHBseSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubW9kaWZpZXMuYXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzVG9BcHBseS5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLm5hbWUsIGF0dHJpYnV0ZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdFbGVtZW50ID0gdGhpcy5zZXRJbmxpbmVTdHlsZShjb250YWluZXIsIG5ld0VsZW1lbnQpO1xuXG4gICAgICAgICAgICB3aGlsZSAoY29udGFpbmVyLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudENsb25lID0gY29udGFpbmVyLmZpcnN0Q2hpbGQuY2xvbmVOb2RlKHRydWUpO1xuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQoZWxlbWVudENsb25lKTtcbiAgICAgICAgICAgICAgICBjb250YWluZXIuZmlyc3RDaGlsZC5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGFpbmVyLnBhcmVudEVsZW1lbnQucmVwbGFjZUNoaWxkKG5ld0VsZW1lbnQsIGNvbnRhaW5lcik7XG5cbiAgICAgICAgICAgIHJhbmdlLmluc2VydE5vZGUobmV3RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJlcGxhY2VTZWxlY3Rpb24oY29udGFpbmVyOiBIVE1MRWxlbWVudCwgYWN0aW9uOiBzdHJpbmcsIHNlbGVjdGlvbjogU2VsZWN0aW9uLCBjb250YWluZXJzOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZm9jdXNOb2RlOiBOb2RlID0gc2VsZWN0aW9uLmZvY3VzTm9kZTtcbiAgICAgICAgbGV0IG9mZnNldENvbnRhaW5lcjogSFRNTEVsZW1lbnQgPVxuICAgICAgICAgICAgZm9jdXNOb2RlLm5vZGVUeXBlICE9PSBOb2RlLlRFWFRfTk9ERSAmJiBmb2N1c05vZGUubm9kZVR5cGUgIT09IE5vZGUuQ09NTUVOVF9OT0RFXG4gICAgICAgICAgICAgICAgPyAoZm9jdXNOb2RlIGFzIEhUTUxFbGVtZW50KVxuICAgICAgICAgICAgICAgIDogZm9jdXNOb2RlLnBhcmVudEVsZW1lbnQ7XG5cbiAgICAgICAgbGV0IHBhcmVudENvbnRhaW5lciA9IHRoaXMuaGFzU3R5bGUoY29udGFpbmVyKTtcbiAgICAgICAgbGV0IG9mZnNldFBhcmVudENvbnRhaW5lciA9IHRoaXMuaGFzU3R5bGUob2Zmc2V0Q29udGFpbmVyKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGFyZW50Q29udGFpbmVyICYmXG4gICAgICAgICAgICBwYXJlbnRDb250YWluZXIgPT09IG9mZnNldFBhcmVudENvbnRhaW5lciAmJlxuICAgICAgICAgICAgKChwYXJlbnRDb250YWluZXIuY2hpbGRyZW4ubGVuZ3RoID4gMCAmJiBwYXJlbnRDb250YWluZXIuaW5uZXJUZXh0ICE9PSBwYXJlbnRDb250YWluZXIuY2hpbGRyZW5bMF0udGV4dENvbnRlbnQpIHx8XG4gICAgICAgICAgICAgICAgcGFyZW50Q29udGFpbmVyLmlubmVyVGV4dCAhPT0gc2VsZWN0aW9uLnRvU3RyaW5nKCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2lmJyk7XG4gICAgICAgICAgICBjb25zdCByYW5nZTogUmFuZ2UgPSB0aGlzLmdldFJhbmdlT2JqZWN0KHNlbGVjdGlvbik7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RnJhZ21lbnQ6IERvY3VtZW50RnJhZ21lbnQgPSByYW5nZS5leHRyYWN0Q29udGVudHMoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50OiBIVE1MU3BhbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudC5hcHBlbmRDaGlsZChjdXJyZW50RnJhZ21lbnQpO1xuICAgICAgICAgICAgaWYgKHRoaXMubW9kaWZpZXMuc3R5bGUgJiYgdGhpcy5zdHlsZS52YWx1ZS5pbmRleE9mKCckMScpID4gLTEpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudC5zdHlsZVt0aGlzLnN0eWxlLnByb3BlcnR5XSA9IHRoaXMuc3R5bGUudmFsdWUucmVwbGFjZSgnJDEnLCB0aGlzLnN0eWxlLmlucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLmNsYXNzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVDaGlsZHJlbkNsYXNzZXMoY3VycmVudEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsYXNzVG9BcHBseSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzVG9BcHBseSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubW9kaWZpZXMuYXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzVG9BcHBseS5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZS5uYW1lLCBhdHRyaWJ1dGUudmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGN1cnJlbnRFbGVtZW50VG9BcHBlbmQgPSBjdXJyZW50RWxlbWVudDtcbiAgICAgICAgICAgIGxldCBjdXJyZW50UGFyZW50RWxlbWVudCA9IGNvbnRhaW5lcjtcbiAgICAgICAgICAgIGlmIChwYXJlbnRDb250YWluZXIuY29udGFpbnMoY3VycmVudFBhcmVudEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnRQYXJlbnRFbGVtZW50ICE9PSBwYXJlbnRDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRtcEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGN1cnJlbnRQYXJlbnRFbGVtZW50LnRhZ05hbWUpO1xuICAgICAgICAgICAgICAgICAgICB0bXBFbGVtZW50ID0gdGhpcy5zZXRJbmxpbmVTdHlsZShjdXJyZW50UGFyZW50RWxlbWVudCwgdG1wRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdG1wRWxlbWVudC5hcHBlbmRDaGlsZChjdXJyZW50RWxlbWVudFRvQXBwZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnRUb0FwcGVuZCA9IHRtcEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJlbnRFbGVtZW50ID0gY3VycmVudFBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGlzTFRSID0gdGhpcy5pc0FuY2hvckJlZm9yZUZvY3VzKFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGxldCBzZWxlY3Rpb25Gb2N1c09mZnNldCA9IGlzTFRSID8gc2VsZWN0aW9uLmFuY2hvck9mZnNldCA6IHNlbGVjdGlvbi5mb2N1c09mZnNldDtcbiAgICAgICAgICAgIGxldCBzZWxlY3Rpb25Gb2N1c05vZGUgPSBpc0xUUiA/IHNlbGVjdGlvbi5hbmNob3JOb2RlIDogc2VsZWN0aW9uLmZvY3VzTm9kZTtcblxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkuc2V0QmFzZUFuZEV4dGVudChwYXJlbnRDb250YWluZXIsIDAsIHNlbGVjdGlvbkZvY3VzTm9kZSwgc2VsZWN0aW9uRm9jdXNPZmZzZXQpO1xuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIGxldCBwcmVSYW5nZTogUmFuZ2UgPSB0aGlzLmdldFJhbmdlT2JqZWN0KG5ld1NlbGVjdGlvbik7XG5cbiAgICAgICAgICAgIGNvbnN0IHByZUZyYWdtZW50OiBEb2N1bWVudEZyYWdtZW50ID0gcHJlUmFuZ2UuZXh0cmFjdENvbnRlbnRzKCk7XG5cbiAgICAgICAgICAgIGxldCBuZXdFbGVtZW50OiBIVE1MRWxlbWVudCA9IDxIVE1MRWxlbWVudD5wYXJlbnRDb250YWluZXIuY2xvbmVOb2RlKCk7XG4gICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTCA9ICcnO1xuICAgICAgICAgICAgbmV3RWxlbWVudC5hcHBlbmRDaGlsZChwcmVGcmFnbWVudCk7XG5cbiAgICAgICAgICAgIHBhcmVudENvbnRhaW5lci5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShjdXJyZW50RWxlbWVudFRvQXBwZW5kLCBwYXJlbnRDb250YWluZXIpO1xuICAgICAgICAgICAgcGFyZW50Q29udGFpbmVyLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKG5ld0VsZW1lbnQsIGN1cnJlbnRFbGVtZW50VG9BcHBlbmQpO1xuICAgICAgICAgICAgaWYgKCFwYXJlbnRDb250YWluZXIudGV4dENvbnRlbnQgfHwgcGFyZW50Q29udGFpbmVyLnRleHRDb250ZW50Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHBhcmVudENvbnRhaW5lci5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHBhcmVudENvbnRhaW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxlY3Rpb24uc2VsZWN0QWxsQ2hpbGRyZW4oY3VycmVudEVsZW1lbnRUb0FwcGVuZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZWxzZScpO1xuICAgICAgICAgICAgY29uc3QgcmFuZ2U6IFJhbmdlID0gdGhpcy5nZXRSYW5nZU9iamVjdChzZWxlY3Rpb24pO1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnQ6IERvY3VtZW50RnJhZ21lbnQgPSByYW5nZS5leHRyYWN0Q29udGVudHMoKTtcbiAgICAgICAgICAgIGxldCBmcmFnbWVudEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgICAgICAgICAgbGV0IG5ld0VsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IGF3YWl0IHRoaXMuY3JlYXRlRWxlbWVudChjb250YWluZXIsIGFjdGlvbiwgY29udGFpbmVycyk7XG4gICAgICAgICAgICBsZXQgZWxlbWVudFRvQXBwZW5kID0gbmV3RWxlbWVudDtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG5ld0VsZW1lbnQpO1xuXG4gICAgICAgICAgICBmcmFnbWVudEVsZW1lbnQuYXBwZW5kKGZyYWdtZW50KTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBmcmFnbWVudEVsZW1lbnQuY2hpbGRyZW4/Lmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgICAgICAgIHRoaXMudGV4dENvbnRhaW5lcnMuc3BsaXQoJywnKS5pbmRleE9mKGZyYWdtZW50RWxlbWVudC5jaGlsZHJlblswXS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpID4gLTFcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnRUb0FwcGVuZCA9IDxIVE1MRWxlbWVudD5mcmFnbWVudEVsZW1lbnQuY2hpbGRyZW5bMF07XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUwgPSAoPEhUTUxFbGVtZW50PmZyYWdtZW50RWxlbWVudC5jaGlsZHJlblswXSkuaW5uZXJIVE1MO1xuICAgICAgICAgICAgICAgIGVsZW1lbnRUb0FwcGVuZC5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgICAgICAgICBlbGVtZW50VG9BcHBlbmQuYXBwZW5kKG5ld0VsZW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTCA9IGZyYWdtZW50RWxlbWVudC5pbm5lckhUTUw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RpZmllcy5jbGFzcykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlQ2hpbGRyZW5DbGFzc2VzKG5ld0VsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNsYXNzVG9BcHBseSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NUb0FwcGx5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RpZmllcy5hdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZXNUb0FwcGx5LmZvckVhY2goKGF0dHJpYnV0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUubmFtZSwgYXR0cmlidXRlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShlbGVtZW50VG9BcHBlbmQpO1xuICAgICAgICAgICAgc2VsZWN0aW9uLnNlbGVjdEFsbENoaWxkcmVuKGVsZW1lbnRUb0FwcGVuZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJlcGxhY2VMaW5rKHNlbGVjdGlvbjogU2VsZWN0aW9uLCBjb250YWluZXI6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGxldCBuZXdFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTCA9IGNvbnRhaW5lci5pbm5lckhUTUw7XG5cbiAgICAgICAgY29udGFpbmVyLnBhcmVudEVsZW1lbnQucmVwbGFjZUNoaWxkKG5ld0VsZW1lbnQsIGNvbnRhaW5lcik7XG4gICAgICAgIHNlbGVjdGlvbi5zZWxlY3RBbGxDaGlsZHJlbihuZXdFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQW5jaG9yQmVmb3JlRm9jdXMoYW5jaG9yTm9kZTogTm9kZSwgYW5jaG9yT2Zmc2V0OiBudW1iZXIsIGZvY3VzTm9kZTogTm9kZSwgZm9jdXNPZmZzZXQ6IG51bWJlcikge1xuICAgICAgICBsZXQgYW5jaG9yUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICBsZXQgZm9jdXNSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG4gICAgICAgIGFuY2hvclJhbmdlLnNldFN0YXJ0KGFuY2hvck5vZGUsIGFuY2hvck9mZnNldCk7XG4gICAgICAgIGFuY2hvclJhbmdlLnNldEVuZChhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQpO1xuICAgICAgICBmb2N1c1JhbmdlLnNldFN0YXJ0KGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpO1xuICAgICAgICBmb2N1c1JhbmdlLnNldEVuZChmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KTtcbiAgICAgICAgaWYgKGFuY2hvclJhbmdlLmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZS5TVEFSVF9UT19TVEFSVCwgZm9jdXNSYW5nZSkgPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaGFzU3R5bGUoZWxlbWVudDogSFRNTEVsZW1lbnQsIGZpcnN0VGltZUNhbGw6IGJvb2xlYW4gPSB0cnVlKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKGZpcnN0VGltZUNhbGwgJiYgZWxlbWVudC5jaGlsZHJlbikge1xuICAgICAgICAgICAgZWxlbWVudCA9IHRoaXMuZ2V0TW9zdERlc2NlbmRhbnRDaGlsZCg8SFRNTEVsZW1lbnQ+ZWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmb3VuZEVsZW1lbnQgd2FzIGFkZGVkIGJlY2F1c2Ugb2YgYSByZXR1cm4gaXNzdWUgd2hlbiBhIGNsYXNzIGlzIGFwcGxpZWRcbiAgICAgICAgbGV0IGZvdW5kRWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAgICAgICBpZiAoIWVsZW1lbnQgfHwgZWxlbWVudC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCdjZS1wYXJhZ3JhcGgnKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubW9kaWZpZXMuc3R5bGUpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlICYmXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZVt0aGlzLnN0eWxlLnByb3BlcnR5XSAmJlxuICAgICAgICAgICAgICAgICh0aGlzLnN0eWxlLnZhbHVlLmluZGV4T2YoJyQxJykgPiAtMSA/IHRydWUgOiBlbGVtZW50LnN0eWxlW3RoaXMuc3R5bGUucHJvcGVydHldID09PSB0aGlzLnN0eWxlLnZhbHVlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZm91bmRFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1vZGlmaWVzLmNsYXNzKSB7XG4gICAgICAgICAgICB0aGlzLmNsYXNzZXMuc3BsaXQoJywnKS5mb3JFYWNoKChjbGFzc05hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3Q/LmNvbnRhaW5zKGNsYXNzTmFtZSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZm91bmRFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RpZmllcy50YWcpIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCkgPT09IHRoaXMudGFnLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm1vZGlmaWVzLmF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgbGV0IGF0dHJpYnV0ZXMgPSB0aGlzLmF0dHJpYnV0ZU5hbWUuc3BsaXQoJywnKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cmlidXRlcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZWxlbWVudC5nZXRBdHRyaWJ1dGUgPT09ICdmdW5jdGlvbicgJiYgZWxlbWVudC5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlc1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZm91bmRFbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChmb3VuZEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3VuZEVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb3VuZEVsZW1lbnQgJiYgZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oYXNTdHlsZShlbGVtZW50LnBhcmVudEVsZW1lbnQsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldFN0eWxlVmFsdWUoY29udGFpbmVyOiBIVE1MRWxlbWVudCwgYWN0aW9uOiBzdHJpbmcsIGNvbnRhaW5lcnM6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgICAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUudmFsdWUuaW5kZXhPZignJDEnKSA+IC0xID8gdGhpcy5zdHlsZS52YWx1ZS5yZXBsYWNlKCckMScsIHRoaXMuc3R5bGUuaW5wdXQpIDogdGhpcy5zdHlsZS52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhhc1N0eWxlKGNvbnRhaW5lcikgJiYgdGhpcy5zdHlsZS52YWx1ZS5pbmRleE9mKCckMScpID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuZGVmYXVsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0eWxlOiBOb2RlIHwgbnVsbCA9IGF3YWl0IHRoaXMuZmluZFN0eWxlTm9kZShjb250YWluZXIsIGFjdGlvbiwgY29udGFpbmVycyk7XG4gICAgICAgIGlmIChzdHlsZSAmJiB0aGlzLmhhc1N0eWxlKHN0eWxlIGFzIEhUTUxFbGVtZW50KSAmJiB0aGlzLnN0eWxlLnZhbHVlLmluZGV4T2YoJyQxJykgPT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdHlsZS5kZWZhdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUudmFsdWUuaW5kZXhPZignJDEnKSA+IC0xID8gdGhpcy5zdHlsZS52YWx1ZS5yZXBsYWNlKCckMScsIHRoaXMuc3R5bGUuaW5wdXQpIDogdGhpcy5zdHlsZS52YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGZpbmRTdHlsZU5vZGUobm9kZTogTm9kZSwgc3R5bGU6IHN0cmluZywgY29udGFpbmVyczogc3RyaW5nKTogUHJvbWlzZTxOb2RlIHwgbnVsbD4ge1xuICAgICAgICBpZiAobm9kZS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnSFRNTCcgfHwgbm9kZS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpID09PSAnQk9EWScpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDb250YWluZXIoY29udGFpbmVycywgbm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaGFzU3R5bGU6IGJvb2xlYW4gPVxuICAgICAgICAgICAgKG5vZGUgYXMgSFRNTEVsZW1lbnQpLnN0eWxlW3N0eWxlXSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgKG5vZGUgYXMgSFRNTEVsZW1lbnQpLnN0eWxlW3N0eWxlXSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAobm9kZSBhcyBIVE1MRWxlbWVudCkuc3R5bGVbc3R5bGVdICE9PSAnJztcblxuICAgICAgICBpZiAoaGFzU3R5bGUpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZmluZFN0eWxlTm9kZShub2RlLnBhcmVudE5vZGUsIHN0eWxlLCBjb250YWluZXJzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGNyZWF0ZUVsZW1lbnQoY29udGFpbmVyOiBIVE1MRWxlbWVudCwgYWN0aW9uOiBzdHJpbmcsIGNvbnRhaW5lcnM6IHN0cmluZyk6IFByb21pc2U8SFRNTEVsZW1lbnQ+IHtcbiAgICAgICAgbGV0IG5ld0VsZW1lbnQ6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLnRhZyk7XG4gICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLnN0eWxlKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMuc3R5bGUucHJvcGVydHk7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBhd2FpdCB0aGlzLmdldFN0eWxlVmFsdWUoY29udGFpbmVyLCBhY3Rpb24sIGNvbnRhaW5lcnMpO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnN0eWxlLmRlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnN0eWxlW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnN0eWxlLnJlbW92ZVByb3BlcnR5KHByb3BlcnR5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXdFbGVtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcmVtb3ZlQ2hpbGRyZW5DbGFzc2VzKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2hpbGRyZW46IEhUTUxDb2xsZWN0aW9uID0gZWxlbWVudC5jaGlsZHJlbjtcbiAgICAgICAgZm9yICh2YXIgY3VycmVudEVsZW1lbnQgPSBjaGlsZHJlblswXTsgY3VycmVudEVsZW1lbnQ7IGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmNsYXNzZXMuc3BsaXQoJywnKS5mb3JFYWNoKChjbGFzc05hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQuY2xhc3NMaXN0Py5jb250YWlucyhjbGFzc05hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50RWxlbWVudC5jbGFzc0xpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzJyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50RWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVDaGlsZHJlbkNsYXNzZXMoPEhUTUxFbGVtZW50PmN1cnJlbnRFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHBhcmVudEhhc1N0eWxlKGN1cnJlbnRFbGVtZW50OiBIVE1MRWxlbWVudCwgcmVmZXJlbmNlRWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgLy8gTGluayBleGNlcHRpb25cbiAgICAgICAgaWYgKCFjdXJyZW50RWxlbWVudCB8fCByZWZlcmVuY2VFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2EnIHx8IHJlZmVyZW5jZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnZGl2Jykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcmVmZXJlbmNlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdzcGFuJyAmJlxuICAgICAgICAgICAgcmVmZXJlbmNlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IGN1cnJlbnRFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmdldElubGluZVN0eWxlKGN1cnJlbnRFbGVtZW50KSkubGVuZ3RoID4gMCAmJiB0aGlzLmlkZW50aWNhbElubGluZVN0eWxlKGN1cnJlbnRFbGVtZW50LCByZWZlcmVuY2VFbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdC5sZW5ndGggPiAwICYmIHRoaXMuaWRlbnRpY2FsQ2xhc3NMaXN0KGN1cnJlbnRFbGVtZW50LCByZWZlcmVuY2VFbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQgJiYgY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICdkaXYnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRIYXNTdHlsZShjdXJyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50LCByZWZlcmVuY2VFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjbGVhbnVwQ29udGFpbmVyKHNlbGVjdGlvbjogU2VsZWN0aW9uLCBjb250YWluZXIsIGZpcnN0VGltZUNhbGw6IEJvb2xlYW4pIHtcbiAgICAgICAgbGV0IHBhcmVudENvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XG4gICAgICAgIGxldCBwYXJlbnRGb3VuZDogQm9vbGVhbiA9IGZhbHNlO1xuICAgICAgICBpZiAoZmlyc3RUaW1lQ2FsbCkge1xuICAgICAgICAgICAgcGFyZW50Q29udGFpbmVyID0gPEhUTUxFbGVtZW50PnNlbGVjdGlvbi5hbmNob3JOb2RlO1xuICAgICAgICAgICAgd2hpbGUgKHBhcmVudENvbnRhaW5lciAmJiAhcGFyZW50Rm91bmQpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Q29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBwYXJlbnRDb250YWluZXIuY2xhc3NMaXN0Py5jb250YWlucygnY2UtcGFyYWdyYXBoJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Rm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbnRhaW5lciA9IHBhcmVudENvbnRhaW5lci5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcmVudENvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBhcmVudENvbnRhaW5lciB8fCAhcGFyZW50Q29udGFpbmVyLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyZW50Q29udGFpbmVyLm5vcm1hbGl6ZSgpO1xuXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuOiBOb2RlW10gPSBBcnJheS5mcm9tKHBhcmVudENvbnRhaW5lci5jaGlsZE5vZGVzKTtcbiAgICAgICAgaWYgKGNoaWxkcmVuPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBjdXJyZW50Tm9kZSA9IGNoaWxkcmVuWzBdOyBjdXJyZW50Tm9kZTsgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5uZXh0U2libGluZykge1xuICAgICAgICAgICAgICAgIGlmICgoIWN1cnJlbnROb2RlLnRleHRDb250ZW50IHx8IGN1cnJlbnROb2RlLnRleHRDb250ZW50Lmxlbmd0aCA9PT0gMCkgfHwgKGN1cnJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiAoPEhUTUxFbGVtZW50PmN1cnJlbnROb2RlKS5pbm5lclRleHQubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcHJldmlvdXNTaWJsaW5nID0gY3VycmVudE5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb250YWluZXIucmVtb3ZlQ2hpbGQoY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZSA9IHByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRIYXNTdHlsZShjdXJyZW50Tm9kZS5wYXJlbnRFbGVtZW50LCA8SFRNTEVsZW1lbnQ+Y3VycmVudE5vZGUpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50Tm9kZUZpcnN0Q2hpbGQgPSBjdXJyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRDdXJyZW50RWxlbWVudCA9IGN1cnJlbnROb2RlLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb250YWluZXIuaW5zZXJ0QmVmb3JlKGN1cnJlbnROb2RlLmZpcnN0Q2hpbGQsIGN1cnJlbnROb2RlRmlyc3RDaGlsZC5uZXh0U2libGluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZUZpcnN0Q2hpbGQgPSBjdXJyZW50Tm9kZUZpcnN0Q2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29udGFpbmVyLnJlbW92ZUNoaWxkKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGUgPSBuZXh0Q3VycmVudEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBpZGVudGljYWxFbGVtZW50cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgICAgICAgICBpZGVudGljYWxFbGVtZW50cyAmJlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5uZXh0U2libGluZyAmJlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGUubmV4dFNpYmxpbmcubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50RWxlbWVudCA9IDxFbGVtZW50PmN1cnJlbnROb2RlO1xuICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dEVsZW1lbnQgPSA8RWxlbWVudD5jdXJyZW50Tm9kZS5uZXh0U2libGluZztcblxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlkZW50aWNhbElubGluZVN0eWxlKGN1cnJlbnRFbGVtZW50LCBuZXh0RWxlbWVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmV4dEVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlkZW50aWNhbENsYXNzTGlzdChjdXJyZW50RWxlbWVudCwgbmV4dEVsZW1lbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlkZW50aWNhbEF0dHJpYnV0ZXMoY3VycmVudEVsZW1lbnQsIG5leHRFbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LmlubmVySFRNTCArPSBuZXh0RWxlbWVudC5pbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0RWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kaWZpZWRDb250ZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWNhbEVsZW1lbnRzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgICAgICAgICAgICAgICAgKDxFbGVtZW50PmN1cnJlbnROb2RlKS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzcGFuJyAmJlxuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmdldElubGluZVN0eWxlKDxFbGVtZW50PmN1cnJlbnROb2RlKSkubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgICghKDxFbGVtZW50PmN1cnJlbnROb2RlKS5jbGFzc0xpc3QgfHwgKDxFbGVtZW50PmN1cnJlbnROb2RlKS5jbGFzc0xpc3QubGVuZ3RoID09PSAwKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc05vQXR0cmlidXRlcyg8RWxlbWVudD5jdXJyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnROb2RlRmlyc3RDaGlsZCA9IGN1cnJlbnROb2RlO1xuXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoPEVsZW1lbnQ+Y3VycmVudE5vZGVGaXJzdENoaWxkLnBhcmVudEVsZW1lbnQpLmluc2VydEJlZm9yZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5maXJzdENoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlRmlyc3RDaGlsZC5uZXh0U2libGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlRmlyc3RDaGlsZCA9IGN1cnJlbnROb2RlRmlyc3RDaGlsZC5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAoPEVsZW1lbnQ+Y3VycmVudE5vZGUpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGlmaWVkQ29udGVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlLm5vcm1hbGl6ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGVhbnVwQ29udGFpbmVyKHNlbGVjdGlvbiwgY3VycmVudE5vZGUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc05vQXR0cmlidXRlcyhub2RlOiBFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBub2RlU3R5bGUgPSBPYmplY3Qua2V5cyh0aGlzLmdldElubGluZVN0eWxlKG5vZGUpKTtcbiAgICAgICAgbGV0IG5vZGVBdHRyaWJ1dGVzID0gT2JqZWN0LmtleXMoXG4gICAgICAgICAgICBub2RlLmdldEF0dHJpYnV0ZU5hbWVzKCkucmVkdWNlKChhY2MsIG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5hY2MsIFtuYW1lXTogbm9kZS5nZXRBdHRyaWJ1dGUobmFtZSkgfTtcbiAgICAgICAgICAgIH0sIHt9KVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChub2RlQXR0cmlidXRlcy5sZW5ndGggPT09IDAgfHwgKG5vZGVBdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMSAmJiBub2RlU3R5bGUubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaWRlbnRpY2FsQ2xhc3NMaXN0KGN1cnJlbnRFbGVtZW50LCBuZXh0RWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgWy4uLmN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdF0uZXZlcnkoKGNsYXNzTGlzdCkgPT4gbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTGlzdCkpICYmXG4gICAgICAgICAgICBbLi4ubmV4dEVsZW1lbnQuY2xhc3NMaXN0XS5ldmVyeSgoY2xhc3NMaXN0KSA9PiBjdXJyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NMaXN0KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlkZW50aWNhbEF0dHJpYnV0ZXMoY3VycmVudEVsZW1lbnQsIG5leHRFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBjdXJyZW50RWxlbWVudEF0dHJpYnV0ZXMgPSBjdXJyZW50RWxlbWVudC5nZXRBdHRyaWJ1dGVOYW1lcygpO1xuICAgICAgICBjdXJyZW50RWxlbWVudEF0dHJpYnV0ZXMuZm9yRWFjaChhdHRyaWJ1dGUgPT4ge1xuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZSAhPT0gJ3N0eWxlJykge1xuICAgICAgICAgICAgICAgIGlmICghbmV4dEVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSkgfHwgbmV4dEVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSkgIT09IGN1cnJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlkZW50aWNhbElubGluZVN0eWxlKGN1cnJlbnRFbGVtZW50LCBuZXh0RWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudElubGluZVN0eWxlID0gdGhpcy5nZXRJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IG5leHRFbGVtZW50SW5saW5lU3R5bGUgPSB0aGlzLmdldElubGluZVN0eWxlKG5leHRFbGVtZW50KTtcbiAgICAgICAgbGV0IGN1cnJlbnRFbGVtZW50SW5saW5lU3R5bGVTb3J0ZWQgPSB0aGlzLnNvcnRJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudElubGluZVN0eWxlKTtcbiAgICAgICAgbGV0IG5leHRFbGVtZW50SW5saW5lU3R5bGVTb3J0ZWQgPSB0aGlzLnNvcnRJbmxpbmVTdHlsZShuZXh0RWxlbWVudElubGluZVN0eWxlKTtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGN1cnJlbnRFbGVtZW50SW5saW5lU3R5bGVTb3J0ZWQpID09PSBKU09OLnN0cmluZ2lmeShuZXh0RWxlbWVudElubGluZVN0eWxlU29ydGVkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnRJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudCk6IE9iamVjdCB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhjdXJyZW50RWxlbWVudClcbiAgICAgICAgICAgIC5zb3J0KChbLCBhXTogYW55LCBbLCBiXTogYW55KSA9PiBhIC0gYilcbiAgICAgICAgICAgIC5yZWR1Y2UoKHIsIFtrLCB2XSkgPT4gKHsgLi4uciwgW2tdOiB2IH0pLCB7fSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudCk6IE9iamVjdCB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGN1cnJlbnRFbGVtZW50LnN0eWxlKS5yZWR1Y2UoKHN0eWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgc3R5bGVbbmFtZV0gPSBjdXJyZW50RWxlbWVudC5zdHlsZVtuYW1lXTtcbiAgICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SW5saW5lU3R5bGUoY3VycmVudEVsZW1lbnQsIG5leHRFbGVtZW50KTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudElubGluZVN0eWxlOiBPYmplY3QgPSBBcnJheS5mcm9tKGN1cnJlbnRFbGVtZW50LnN0eWxlKS5yZWR1Y2UoKHN0eWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgc3R5bGVbbmFtZV0gPSBjdXJyZW50RWxlbWVudC5zdHlsZVtuYW1lXTtcbiAgICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgfSwge30pO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGN1cnJlbnRFbGVtZW50SW5saW5lU3R5bGUpIHtcbiAgICAgICAgICAgIG5leHRFbGVtZW50LnN0eWxlW3Byb3BlcnR5XSA9IGN1cnJlbnRFbGVtZW50SW5saW5lU3R5bGVbcHJvcGVydHldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXh0RWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQ29udGFpbmVyKGNvbnRhaW5lcnM6IHN0cmluZywgbm9kZTogTm9kZSk6IEJvb2xlYW4ge1xuICAgICAgICBpZiAoY29udGFpbmVycy5zcGxpdCgnLCcpLmluZGV4T2Yobm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHNhdmVJbmxpbmVTZWxlY3Rpb24oY29udGFpbmVyOiBIVE1MRWxlbWVudCwgZmlyc3RUaW1lQ2FsbDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChmaXJzdFRpbWVDYWxsKSB7XG4gICAgICAgICAgICBjb250YWluZXIgPSA8SFRNTEVsZW1lbnQ+dGhpcy5wYXJlbnRFZGl0b3IucXVlcnlTZWxlY3RvcignLmNlLXBhcmFncmFwaCcpLmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck5vZGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZm91bmRGb2N1c05vZGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZm91bmRBbmNob3JPZmZzZXQgPSAwO1xuICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzT2Zmc2V0ID0gMDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9PT0gKDxIVE1MRWxlbWVudD50aGlzLnBhcmVudEVkaXRvci5xdWVyeVNlbGVjdG9yKCcuY2UtcGFyYWdyYXBoJykpLnRleHRDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck5vZGUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzT2Zmc2V0ID0gdGhpcy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmZvdW5kRm9jdXNOb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5leHROb2RlID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIHdoaWxlIChuZXh0Tm9kZSAmJiAoIXRoaXMuZm91bmRBbmNob3JOb2RlIHx8ICF0aGlzLmZvdW5kRm9jdXNOb2RlKSkge1xuICAgICAgICAgICAgaWYgKG5leHROb2RlID09PSB0aGlzLnNlbGVjdGVkQW5jaG9yTm9kZSkge1xuICAgICAgICAgICAgICAgIGxldCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzTFRSID0gdGhpcy5pc0FuY2hvckJlZm9yZUZvY3VzKFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvdW5kQW5jaG9yTm9kZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck9mZnNldCArPSBpc0xUUiA/IHRoaXMuYW5jaG9yT2Zmc2V0IDogdGhpcy5mb2N1c09mZnNldDtcbiAgICAgICAgICAgICAgICBsZXQgcmFuZ2UgPSB0aGlzLmdldFJhbmdlT2JqZWN0KHNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEZyYWdtZW50OiBEb2N1bWVudEZyYWdtZW50ID0gcmFuZ2UuY2xvbmVDb250ZW50cygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50OiBIVE1MU3BhbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY3VycmVudEZyYWdtZW50KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZm91bmRGb2N1c09mZnNldCA9IHRoaXMuZm91bmRBbmNob3JPZmZzZXQgKyBjdXJyZW50RWxlbWVudC5pbm5lclRleHQubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHRoaXMuZm91bmRGb2N1c05vZGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXh0Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZm91bmRBbmNob3JOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm91bmRBbmNob3JPZmZzZXQgKz0gbmV4dE5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZm91bmRGb2N1c05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzT2Zmc2V0ICs9IG5leHROb2RlLnRleHRDb250ZW50Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV4dE5vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2F2ZUlubGluZVNlbGVjdGlvbig8SFRNTEVsZW1lbnQ+bmV4dE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dE5vZGUgPSBuZXh0Tm9kZS5uZXh0U2libGluZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcmVzZXRJbmxpbmVTZWxlY3Rpb24oY29udGFpbmVyOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsLCBmaXJzdFRpbWVDYWxsOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGZpcnN0VGltZUNhbGwpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lciA9IDxIVE1MRWxlbWVudD50aGlzLnBhcmVudEVkaXRvci5xdWVyeVNlbGVjdG9yKCcuY2UtcGFyYWdyYXBoJykuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICB0aGlzLmZvdW5kQW5jaG9yTm9kZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzTm9kZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50bXBPZmZzZXQgPSAwO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck9mZnNldCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICg8SFRNTEVsZW1lbnQ+dGhpcy5wYXJlbnRFZGl0b3IucXVlcnlTZWxlY3RvcignLmNlLXBhcmFncmFwaCcpKS50ZXh0Q29udGVudC5sZW5ndGggPT09IHRoaXMuZm91bmRGb2N1c09mZnNldFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFuY2hvck5vZGUgPSAoPEhUTUxFbGVtZW50PnRoaXMucGFyZW50RWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJy5jZS1wYXJhZ3JhcGgnKSkuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JPZmZzZXQgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGb2N1c05vZGUgPSAoPEhUTUxFbGVtZW50PnRoaXMucGFyZW50RWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJy5jZS1wYXJhZ3JhcGgnKSkuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c09mZnNldCA9IDE7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFVzZXJTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5leHROb2RlID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIHdoaWxlIChuZXh0Tm9kZSAmJiAoIXRoaXMuZm91bmRBbmNob3JOb2RlIHx8ICF0aGlzLmZvdW5kRm9jdXNOb2RlKSkge1xuICAgICAgICAgICAgaWYgKG5leHROb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5mb3VuZEFuY2hvck5vZGUgJiYgdGhpcy5mb3VuZEFuY2hvck9mZnNldCAtIG5leHROb2RlLnRleHRDb250ZW50Lmxlbmd0aCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck5vZGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFuY2hvck9mZnNldCA9IHRoaXMuZm91bmRBbmNob3JPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBbmNob3JOb2RlID0gbmV4dE5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5mb3VuZEZvY3VzTm9kZSAmJiB0aGlzLmZvdW5kRm9jdXNPZmZzZXQgLSBuZXh0Tm9kZS50ZXh0Q29udGVudC5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvdW5kRm9jdXNOb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c09mZnNldCA9IHRoaXMuZm91bmRGb2N1c09mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvY3VzTm9kZSA9IG5leHROb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRtcE9mZnNldCArPSBuZXh0Tm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck9mZnNldCAtPSBuZXh0Tm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzT2Zmc2V0IC09IG5leHROb2RlLnRleHRDb250ZW50Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXh0Tm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNldElubGluZVNlbGVjdGlvbig8SFRNTEVsZW1lbnQ+bmV4dE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dE5vZGUgPSBuZXh0Tm9kZS5uZXh0U2libGluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlyc3RUaW1lQ2FsbCkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFVzZXJTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TW9zdERlc2NlbmRhbnRDaGlsZChlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICB3aGlsZSAoZWxlbWVudC5jaGlsZHJlbiAmJiBlbGVtZW50LmlubmVyVGV4dCA9PT0gKDxIVE1MRWxlbWVudD5lbGVtZW50LmNoaWxkcmVuWzBdKT8uaW5uZXJUZXh0ICYmIGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gPEhUTUxFbGVtZW50PmVsZW1lbnQuY2hpbGRyZW5bMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxufVxuIl19
|
|
603
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLXN0eWxlLXRvb2wuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3BhdWxpbmUvRG9jdW1lbnRzL3dvcmtzcGFjZS93aXppLWJsb2NrL3Byb2plY3RzL3dpemktYmxvY2svc3JjLyIsInNvdXJjZXMiOlsibGliL3NoYXJlZC9jb21wb25lbnRzL2VkaXRvcmpzL3Rvb2xzL2lubGluZS90b29sLXR5cGUvaW5saW5lLXN0eWxlLXRvb2wuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQW1CLFlBQVksRUFBZSxNQUFNLHFDQUFxQyxDQUFDO0FBRWpHLE1BQU0sT0FBZ0IsZUFBZ0IsU0FBUSxZQUFZO0lBQTFEOztRQUdJLGNBQVMsR0FBRyxXQUFXLENBQUM7UUFJeEIsc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBRTlCLHFCQUFnQixHQUFXLENBQUMsQ0FBQztRQUU3QixvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUVqQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUVoQyxjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBTXRCLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBTWpDLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRTlCLGFBQVEsR0FBRztZQUNQLEdBQUcsRUFBRSxLQUFLO1lBQ1YsS0FBSyxFQUFFLEtBQUs7WUFDWixLQUFLLEVBQUUsS0FBSztZQUNaLFNBQVMsRUFBRSxLQUFLO1NBQ25CLENBQUM7SUFzb0JOLENBQUM7SUFwb0JTLGdCQUFnQixDQUFDLE1BQWM7O1lBQ2pDLE1BQU0sU0FBUyxHQUFxQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hHLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ1osT0FBTzthQUNWO1lBQ0QsSUFBSSxVQUFVLEdBQVMsU0FBUyxDQUFDLFVBQVUsQ0FBQztZQUM1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RUFBRTt3QkFDbEYsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7d0JBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO3dCQUN6QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDO3FCQUNyQztvQkFDRCxJQUFJLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO29CQUM5QyxJQUFJLENBQUMsaUJBQWlCLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7b0JBQ3RELElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztpQkFDeEQ7Z0JBQ0QsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFO29CQUNyQixNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBYyxRQUFRLENBQUMsQ0FBQztpQkFDMUQ7Z0JBQ0QsUUFBUSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7YUFDbkM7WUFDRCxJQUFJLGFBQWEsRUFBRTtnQkFDZixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUM3QjtRQUNMLENBQUM7S0FBQTtJQUVPLHNCQUFzQixDQUFDLE9BQW9COztRQUMvQyxPQUFPLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFNBQVMsWUFBbUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUUsMENBQUUsU0FBUyxDQUFBLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzdILE9BQU8sR0FBZ0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM5QztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0dHJpYnV0ZU9iamVjdCwgRWRpdG9ySlNUb29sLCBTdHlsZU9iamVjdCB9IGZyb20gJy4uLy4uL3V0aWxzL2VkaXRvcmpzLXRvb2wuY29tcG9uZW50JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIElubGluZVN0eWxlVG9vbCBleHRlbmRzIEVkaXRvckpTVG9vbCB7XG4gICAgdGFnOiBzdHJpbmc7XG5cbiAgICBtb2RpZmllcnMgPSAnc3Ryb25nLGVtJztcblxuICAgIHN0eWxlPzogU3R5bGVPYmplY3Q7XG5cbiAgICBmb3VuZEFuY2hvck9mZnNldDogbnVtYmVyID0gMDtcblxuICAgIGZvdW5kRm9jdXNPZmZzZXQ6IG51bWJlciA9IDA7XG5cbiAgICBmb3VuZEFuY2hvck5vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGZvdW5kRm9jdXNOb2RlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICB0bXBPZmZzZXQ6IG51bWJlciA9IDA7XG5cbiAgICBjbGFzc1RvQXBwbHk/OiBzdHJpbmc7XG5cbiAgICBjbGFzc2VzPzogc3RyaW5nO1xuXG4gICAgbW9kaWZpZWRDb250ZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBhdHRyaWJ1dGVOYW1lPzogc3RyaW5nO1xuXG4gICAgYXR0cmlidXRlc1RvQXBwbHk/OiBBcnJheTxBdHRyaWJ1dGVPYmplY3Q+O1xuXG4gICAgbGlua0RlbGV0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBtb2RpZmllcyA9IHtcbiAgICAgICAgdGFnOiBmYWxzZSxcbiAgICAgICAgc3R5bGU6IGZhbHNlLFxuICAgICAgICBjbGFzczogZmFsc2UsXG4gICAgICAgIGF0dHJpYnV0ZTogZmFsc2UsXG4gICAgfTtcblxuICAgIGFzeW5jIGV4ZWNDb21tYW5kU3R5bGUoYWN0aW9uOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uOiBTZWxlY3Rpb24gfCBudWxsID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uID8gdGhpcy5jdXJyZW50U2VsZWN0aW9uIDogdGhpcy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgaWYgKCFzZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYW5jaG9yTm9kZTogTm9kZSA9IHNlbGVjdGlvbi5hbmNob3JOb2RlO1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50RWRpdG9yKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudEVkaXRvciA9IHRoaXMuZmluZFBhcmVudEVkaXRvcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFhbmNob3JOb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNvbnRhaW5lcjogSFRNTEVsZW1lbnQgPVxuICAgICAgICAgICAgYW5jaG9yTm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUgJiYgYW5jaG9yTm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5DT01NRU5UX05PREVcbiAgICAgICAgICAgICAgICA/IChhbmNob3JOb2RlIGFzIEhUTUxFbGVtZW50KVxuICAgICAgICAgICAgICAgIDogYW5jaG9yTm9kZS5wYXJlbnRFbGVtZW50O1xuICAgICAgICBjb25zdCBzYW1lU2VsZWN0aW9uOiBib29sZWFuID0gY29udGFpbmVyICYmIGNvbnRhaW5lci5pbm5lclRleHQgPT09IHNlbGVjdGlvbi50b1N0cmluZygpO1xuICAgICAgICBhd2FpdCB0aGlzLnNhdmVJbmxpbmVTZWxlY3Rpb24oY29udGFpbmVyLCB0cnVlKTtcbiAgICAgICAgY29uc29sZS5sb2coJz09PSBpbmxpbmUgdG9vbCBleGVjQ29tbWFuZFN0eWxlIG1ldGhvZCA9PT0nKTtcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5oYXNTdHlsZShjb250YWluZXIpKTtcblxuICAgICAgICAvLyBMaW5rIGRlbGV0ZSBleGNlcHRpb25cbiAgICAgICAgaWYgKHRoaXMubGlua0RlbGV0aW9uKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlcGxhY2VMaW5rKHNlbGVjdGlvbiwgdGhpcy5oYXNTdHlsZShjb250YWluZXIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzYW1lU2VsZWN0aW9uICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuaXNDb250YWluZXIodGhpcy50ZXh0Q29udGFpbmVycywgY29udGFpbmVyKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuaGFzU3R5bGUoY29udGFpbmVyKSAmJlxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi50b1N0cmluZygpID09PSB0aGlzLmhhc1N0eWxlKGNvbnRhaW5lcikuaW5uZXJUZXh0XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnLT4gdXBkYXRlIHNlbGVjdGlvbicpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlU2VsZWN0aW9uKHNlbGVjdGlvbiwgdGhpcy5oYXNTdHlsZShjb250YWluZXIpLCBhY3Rpb24sIHRoaXMudGV4dENvbnRhaW5lcnMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnLT4gcmVwbGFjZSBzZWxlY3Rpb24nKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlcGxhY2VTZWxlY3Rpb24odGhpcy5nZXRNb3N0RGVzY2VuZGFudENoaWxkKGNvbnRhaW5lciksIGFjdGlvbiwgc2VsZWN0aW9uLCB0aGlzLnRleHRDb250YWluZXJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmNsZWFudXBDb250YWluZXIoc2VsZWN0aW9uLCBjb250YWluZXIsIHRydWUpO1xuICAgICAgICBpZiAodGhpcy5tb2RpZmllZENvbnRlbnQpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVzZXRJbmxpbmVTZWxlY3Rpb24oY29udGFpbmVyLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgdXBkYXRlU2VsZWN0aW9uKHNlbGVjdGlvbjogU2VsZWN0aW9uLCBjb250YWluZXI6IEhUTUxFbGVtZW50LCBhY3Rpb246IHN0cmluZywgY29udGFpbmVyczogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLnN0eWxlKSB7XG4gICAgICAgICAgICBjb25zdCBjc3MgPSB0aGlzLnN0eWxlLnByb3BlcnR5O1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gYXdhaXQgdGhpcy5nZXRTdHlsZVZhbHVlKGNvbnRhaW5lciwgYWN0aW9uLCBjb250YWluZXJzKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5zdHlsZS5kZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlW2Nzc10gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnJlbW92ZVByb3BlcnR5KHRoaXMuc3R5bGUucHJvcGVydHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2U6IFJhbmdlID0gdGhpcy5nZXRSYW5nZU9iamVjdChzZWxlY3Rpb24pO1xuICAgICAgICAgICAgbGV0IG5ld0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMuaGFzU3R5bGUoY29udGFpbmVyKSA/ICdzcGFuJyA6IHRoaXMudGFnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLmNsYXNzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVDaGlsZHJlbkNsYXNzZXMobmV3RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xhc3NUb0FwcGx5ICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc1RvQXBwbHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLmF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1RvQXBwbHkuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZS5uYW1lLCBhdHRyaWJ1dGUudmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3RWxlbWVudCA9IHRoaXMuc2V0SW5saW5lU3R5bGUoY29udGFpbmVyLCBuZXdFbGVtZW50KTtcblxuICAgICAgICAgICAgd2hpbGUgKGNvbnRhaW5lci5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnRDbG9uZSA9IGNvbnRhaW5lci5maXJzdENoaWxkLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmFwcGVuZENoaWxkKGVsZW1lbnRDbG9uZSk7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyLmZpcnN0Q2hpbGQucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRhaW5lci5wYXJlbnRFbGVtZW50LnJlcGxhY2VDaGlsZChuZXdFbGVtZW50LCBjb250YWluZXIpO1xuXG4gICAgICAgICAgICByYW5nZS5pbnNlcnROb2RlKG5ld0VsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXBsYWNlU2VsZWN0aW9uKGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIGFjdGlvbjogc3RyaW5nLCBzZWxlY3Rpb246IFNlbGVjdGlvbiwgY29udGFpbmVyczogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZvY3VzTm9kZTogTm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGU7XG4gICAgICAgIGxldCBvZmZzZXRDb250YWluZXI6IEhUTUxFbGVtZW50ID1cbiAgICAgICAgICAgIGZvY3VzTm9kZS5ub2RlVHlwZSAhPT0gTm9kZS5URVhUX05PREUgJiYgZm9jdXNOb2RlLm5vZGVUeXBlICE9PSBOb2RlLkNPTU1FTlRfTk9ERVxuICAgICAgICAgICAgICAgID8gKGZvY3VzTm9kZSBhcyBIVE1MRWxlbWVudClcbiAgICAgICAgICAgICAgICA6IGZvY3VzTm9kZS5wYXJlbnRFbGVtZW50O1xuXG4gICAgICAgIGxldCBwYXJlbnRDb250YWluZXIgPSB0aGlzLmhhc1N0eWxlKGNvbnRhaW5lcik7XG4gICAgICAgIGxldCBvZmZzZXRQYXJlbnRDb250YWluZXIgPSB0aGlzLmhhc1N0eWxlKG9mZnNldENvbnRhaW5lcik7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhcmVudENvbnRhaW5lciAmJlxuICAgICAgICAgICAgcGFyZW50Q29udGFpbmVyID09PSBvZmZzZXRQYXJlbnRDb250YWluZXIgJiZcbiAgICAgICAgICAgICgocGFyZW50Q29udGFpbmVyLmNoaWxkcmVuLmxlbmd0aCA+IDAgJiYgcGFyZW50Q29udGFpbmVyLmlubmVyVGV4dCAhPT0gcGFyZW50Q29udGFpbmVyLmNoaWxkcmVuWzBdLnRleHRDb250ZW50KSB8fFxuICAgICAgICAgICAgICAgIHBhcmVudENvbnRhaW5lci5pbm5lclRleHQgIT09IHNlbGVjdGlvbi50b1N0cmluZygpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdpZicpO1xuICAgICAgICAgICAgY29uc3QgcmFuZ2U6IFJhbmdlID0gdGhpcy5nZXRSYW5nZU9iamVjdChzZWxlY3Rpb24pO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudEZyYWdtZW50OiBEb2N1bWVudEZyYWdtZW50ID0gcmFuZ2UuZXh0cmFjdENvbnRlbnRzKCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudDogSFRNTFNwYW5FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY3VycmVudEZyYWdtZW50KTtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLnN0eWxlICYmIHRoaXMuc3R5bGUudmFsdWUuaW5kZXhPZignJDEnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuc3R5bGVbdGhpcy5zdHlsZS5wcm9wZXJ0eV0gPSB0aGlzLnN0eWxlLnZhbHVlLnJlcGxhY2UoJyQxJywgdGhpcy5zdHlsZS5pbnB1dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5tb2RpZmllcy5jbGFzcykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlQ2hpbGRyZW5DbGFzc2VzKGN1cnJlbnRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jbGFzc1RvQXBwbHkgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc1RvQXBwbHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLmF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlc1RvQXBwbHkuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUubmFtZSwgYXR0cmlidXRlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBjdXJyZW50RWxlbWVudFRvQXBwZW5kID0gY3VycmVudEVsZW1lbnQ7XG4gICAgICAgICAgICBsZXQgY3VycmVudFBhcmVudEVsZW1lbnQgPSBjb250YWluZXI7XG4gICAgICAgICAgICBpZiAocGFyZW50Q29udGFpbmVyLmNvbnRhaW5zKGN1cnJlbnRQYXJlbnRFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50UGFyZW50RWxlbWVudCAhPT0gcGFyZW50Q29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0bXBFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChjdXJyZW50UGFyZW50RWxlbWVudC50YWdOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdG1wRWxlbWVudCA9IHRoaXMuc2V0SW5saW5lU3R5bGUoY3VycmVudFBhcmVudEVsZW1lbnQsIHRtcEVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRtcEVsZW1lbnQuYXBwZW5kQ2hpbGQoY3VycmVudEVsZW1lbnRUb0FwcGVuZCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50VG9BcHBlbmQgPSB0bXBFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFyZW50RWxlbWVudCA9IGN1cnJlbnRQYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpc0xUUiA9IHRoaXMuaXNBbmNob3JCZWZvcmVGb2N1cyhcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBsZXQgc2VsZWN0aW9uRm9jdXNPZmZzZXQgPSBpc0xUUiA/IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQgOiBzZWxlY3Rpb24uZm9jdXNPZmZzZXQ7XG4gICAgICAgICAgICBsZXQgc2VsZWN0aW9uRm9jdXNOb2RlID0gaXNMVFIgPyBzZWxlY3Rpb24uYW5jaG9yTm9kZSA6IHNlbGVjdGlvbi5mb2N1c05vZGU7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmdldFNlbGVjdGlvbigpLnNldEJhc2VBbmRFeHRlbnQocGFyZW50Q29udGFpbmVyLCAwLCBzZWxlY3Rpb25Gb2N1c05vZGUsIHNlbGVjdGlvbkZvY3VzT2Zmc2V0KTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICBsZXQgcHJlUmFuZ2U6IFJhbmdlID0gdGhpcy5nZXRSYW5nZU9iamVjdChuZXdTZWxlY3Rpb24pO1xuXG4gICAgICAgICAgICBjb25zdCBwcmVGcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCA9IHByZVJhbmdlLmV4dHJhY3RDb250ZW50cygpO1xuXG4gICAgICAgICAgICBsZXQgbmV3RWxlbWVudDogSFRNTEVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+cGFyZW50Q29udGFpbmVyLmNsb25lTm9kZSgpO1xuICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUwgPSAnJztcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuYXBwZW5kQ2hpbGQocHJlRnJhZ21lbnQpO1xuXG4gICAgICAgICAgICBwYXJlbnRDb250YWluZXIucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUoY3VycmVudEVsZW1lbnRUb0FwcGVuZCwgcGFyZW50Q29udGFpbmVyKTtcbiAgICAgICAgICAgIHBhcmVudENvbnRhaW5lci5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShuZXdFbGVtZW50LCBjdXJyZW50RWxlbWVudFRvQXBwZW5kKTtcbiAgICAgICAgICAgIGlmICghcGFyZW50Q29udGFpbmVyLnRleHRDb250ZW50IHx8IHBhcmVudENvbnRhaW5lci50ZXh0Q29udGVudC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb250YWluZXIucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChwYXJlbnRDb250YWluZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZWN0aW9uLnNlbGVjdEFsbENoaWxkcmVuKGN1cnJlbnRFbGVtZW50VG9BcHBlbmQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ2Vsc2UnKTtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlOiBSYW5nZSA9IHRoaXMuZ2V0UmFuZ2VPYmplY3Qoc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGZyYWdtZW50OiBEb2N1bWVudEZyYWdtZW50ID0gcmFuZ2UuZXh0cmFjdENvbnRlbnRzKCk7XG4gICAgICAgICAgICBsZXQgZnJhZ21lbnRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgICAgICAgIGxldCBuZXdFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBhd2FpdCB0aGlzLmNyZWF0ZUVsZW1lbnQoY29udGFpbmVyLCBhY3Rpb24sIGNvbnRhaW5lcnMpO1xuICAgICAgICAgICAgbGV0IGVsZW1lbnRUb0FwcGVuZCA9IG5ld0VsZW1lbnQ7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhuZXdFbGVtZW50KTtcblxuICAgICAgICAgICAgZnJhZ21lbnRFbGVtZW50LmFwcGVuZChmcmFnbWVudCk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZnJhZ21lbnRFbGVtZW50LmNoaWxkcmVuPy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRDb250YWluZXJzLnNwbGl0KCcsJykuaW5kZXhPZihmcmFnbWVudEVsZW1lbnQuY2hpbGRyZW5bMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpKSA+IC0xXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50VG9BcHBlbmQgPSA8SFRNTEVsZW1lbnQ+ZnJhZ21lbnRFbGVtZW50LmNoaWxkcmVuWzBdO1xuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MID0gKDxIVE1MRWxlbWVudD5mcmFnbWVudEVsZW1lbnQuY2hpbGRyZW5bMF0pLmlubmVySFRNTDtcbiAgICAgICAgICAgICAgICBlbGVtZW50VG9BcHBlbmQuaW5uZXJIVE1MID0gJyc7XG4gICAgICAgICAgICAgICAgZWxlbWVudFRvQXBwZW5kLmFwcGVuZChuZXdFbGVtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUwgPSBmcmFnbWVudEVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubW9kaWZpZXMuY2xhc3MpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZUNoaWxkcmVuQ2xhc3NlcyhuZXdFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jbGFzc1RvQXBwbHkgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzVG9BcHBseSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubW9kaWZpZXMuYXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRyaWJ1dGVzVG9BcHBseS5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLm5hbWUsIGF0dHJpYnV0ZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJhbmdlLmluc2VydE5vZGUoZWxlbWVudFRvQXBwZW5kKTtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5zZWxlY3RBbGxDaGlsZHJlbihlbGVtZW50VG9BcHBlbmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZXBsYWNlTGluayhzZWxlY3Rpb246IFNlbGVjdGlvbiwgY29udGFpbmVyOiBIVE1MRWxlbWVudCkge1xuICAgICAgICBsZXQgbmV3RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUwgPSBjb250YWluZXIuaW5uZXJIVE1MO1xuXG4gICAgICAgIGNvbnRhaW5lci5wYXJlbnRFbGVtZW50LnJlcGxhY2VDaGlsZChuZXdFbGVtZW50LCBjb250YWluZXIpO1xuICAgICAgICBzZWxlY3Rpb24uc2VsZWN0QWxsQ2hpbGRyZW4obmV3RWxlbWVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0FuY2hvckJlZm9yZUZvY3VzKGFuY2hvck5vZGU6IE5vZGUsIGFuY2hvck9mZnNldDogbnVtYmVyLCBmb2N1c05vZGU6IE5vZGUsIGZvY3VzT2Zmc2V0OiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGFuY2hvclJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgbGV0IGZvY3VzUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICBhbmNob3JSYW5nZS5zZXRTdGFydChhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQpO1xuICAgICAgICBhbmNob3JSYW5nZS5zZXRFbmQoYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0KTtcbiAgICAgICAgZm9jdXNSYW5nZS5zZXRTdGFydChmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KTtcbiAgICAgICAgZm9jdXNSYW5nZS5zZXRFbmQoZm9jdXNOb2RlLCBmb2N1c09mZnNldCk7XG4gICAgICAgIGlmIChhbmNob3JSYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2UuU1RBUlRfVE9fU1RBUlQsIGZvY3VzUmFuZ2UpID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGhhc1N0eWxlKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBmaXJzdFRpbWVDYWxsOiBib29sZWFuID0gdHJ1ZSk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGlmIChmaXJzdFRpbWVDYWxsICYmIGVsZW1lbnQuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLmdldE1vc3REZXNjZW5kYW50Q2hpbGQoPEhUTUxFbGVtZW50PmVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZm91bmRFbGVtZW50IHdhcyBhZGRlZCBiZWNhdXNlIG9mIGEgcmV0dXJuIGlzc3VlIHdoZW4gYSBjbGFzcyBpcyBhcHBsaWVkXG4gICAgICAgIGxldCBmb3VuZEVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgICAgICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQuY2xhc3NMaXN0Py5jb250YWlucygnY2UtcGFyYWdyYXBoJykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vZGlmaWVzLnN0eWxlKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zdHlsZSAmJlxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGVbdGhpcy5zdHlsZS5wcm9wZXJ0eV0gJiZcbiAgICAgICAgICAgICAgICAodGhpcy5zdHlsZS52YWx1ZS5pbmRleE9mKCckMScpID4gLTEgPyB0cnVlIDogZWxlbWVudC5zdHlsZVt0aGlzLnN0eWxlLnByb3BlcnR5XSA9PT0gdGhpcy5zdHlsZS52YWx1ZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGZvdW5kRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RpZmllcy5jbGFzcykge1xuICAgICAgICAgICAgdGhpcy5jbGFzc2VzLnNwbGl0KCcsJykuZm9yRWFjaCgoY2xhc3NOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0Py5jb250YWlucyhjbGFzc05hbWUpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvdW5kRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubW9kaWZpZXMudGFnKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC50YWdOYW1lPy50b0xvd2VyQ2FzZSgpID09PSB0aGlzLnRhZy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tb2RpZmllcy5hdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgIGxldCBhdHRyaWJ1dGVzID0gdGhpcy5hdHRyaWJ1dGVOYW1lLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGVsZW1lbnQuZ2V0QXR0cmlidXRlID09PSAnZnVuY3Rpb24nICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZXNbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvdW5kRWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZm91bmRFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZm91bmRFbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICghZm91bmRFbGVtZW50ICYmIGVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzU3R5bGUoZWxlbWVudC5wYXJlbnRFbGVtZW50LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRTdHlsZVZhbHVlKGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIGFjdGlvbjogc3RyaW5nLCBjb250YWluZXJzOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcbiAgICAgICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnZhbHVlLmluZGV4T2YoJyQxJykgPiAtMSA/IHRoaXMuc3R5bGUudmFsdWUucmVwbGFjZSgnJDEnLCB0aGlzLnN0eWxlLmlucHV0KSA6IHRoaXMuc3R5bGUudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNTdHlsZShjb250YWluZXIpICYmIHRoaXMuc3R5bGUudmFsdWUuaW5kZXhPZignJDEnKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0eWxlLmRlZmF1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdHlsZTogTm9kZSB8IG51bGwgPSBhd2FpdCB0aGlzLmZpbmRTdHlsZU5vZGUoY29udGFpbmVyLCBhY3Rpb24sIGNvbnRhaW5lcnMpO1xuICAgICAgICBpZiAoc3R5bGUgJiYgdGhpcy5oYXNTdHlsZShzdHlsZSBhcyBIVE1MRWxlbWVudCkgJiYgdGhpcy5zdHlsZS52YWx1ZS5pbmRleE9mKCckMScpID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGUuZGVmYXVsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlLnZhbHVlLmluZGV4T2YoJyQxJykgPiAtMSA/IHRoaXMuc3R5bGUudmFsdWUucmVwbGFjZSgnJDEnLCB0aGlzLnN0eWxlLmlucHV0KSA6IHRoaXMuc3R5bGUudmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBmaW5kU3R5bGVOb2RlKG5vZGU6IE5vZGUsIHN0eWxlOiBzdHJpbmcsIGNvbnRhaW5lcnM6IHN0cmluZyk6IFByb21pc2U8Tm9kZSB8IG51bGw+IHtcbiAgICAgICAgaWYgKG5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0hUTUwnIHx8IG5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0JPRFknKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzQ29udGFpbmVyKGNvbnRhaW5lcnMsIG5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGhhc1N0eWxlOiBib29sZWFuID1cbiAgICAgICAgICAgIChub2RlIGFzIEhUTUxFbGVtZW50KS5zdHlsZVtzdHlsZV0gIT09IG51bGwgJiZcbiAgICAgICAgICAgIChub2RlIGFzIEhUTUxFbGVtZW50KS5zdHlsZVtzdHlsZV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgKG5vZGUgYXMgSFRNTEVsZW1lbnQpLnN0eWxlW3N0eWxlXSAhPT0gJyc7XG5cbiAgICAgICAgaWYgKGhhc1N0eWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbmRTdHlsZU5vZGUobm9kZS5wYXJlbnROb2RlLCBzdHlsZSwgY29udGFpbmVycyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBjcmVhdGVFbGVtZW50KGNvbnRhaW5lcjogSFRNTEVsZW1lbnQsIGFjdGlvbjogc3RyaW5nLCBjb250YWluZXJzOiBzdHJpbmcpOiBQcm9taXNlPEhUTUxFbGVtZW50PiB7XG4gICAgICAgIGxldCBuZXdFbGVtZW50OiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy50YWcpO1xuICAgICAgICBpZiAodGhpcy5tb2RpZmllcy5zdHlsZSkge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSB0aGlzLnN0eWxlLnByb3BlcnR5O1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gYXdhaXQgdGhpcy5nZXRTdHlsZVZhbHVlKGNvbnRhaW5lciwgYWN0aW9uLCBjb250YWluZXJzKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5zdHlsZS5kZWZhdWx0KSB7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zdHlsZVtwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3RWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJlbW92ZUNoaWxkcmVuQ2xhc3NlcyhlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuOiBIVE1MQ29sbGVjdGlvbiA9IGVsZW1lbnQuY2hpbGRyZW47XG4gICAgICAgIGZvciAodmFyIGN1cnJlbnRFbGVtZW50ID0gY2hpbGRyZW5bMF07IGN1cnJlbnRFbGVtZW50OyBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50Lm5leHRFbGVtZW50U2libGluZykge1xuICAgICAgICAgICAgdGhpcy5jbGFzc2VzLnNwbGl0KCcsJykuZm9yRWFjaCgoY2xhc3NOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoY2xhc3NOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQuY2xhc3NMaXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlQ2hpbGRyZW5DbGFzc2VzKDxIVE1MRWxlbWVudD5jdXJyZW50RWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJlbnRIYXNTdHlsZShjdXJyZW50RWxlbWVudDogSFRNTEVsZW1lbnQsIHJlZmVyZW5jZUVsZW1lbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIC8vIExpbmsgZXhjZXB0aW9uXG4gICAgICAgIGlmICghY3VycmVudEVsZW1lbnQgfHwgcmVmZXJlbmNlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdhJyB8fCByZWZlcmVuY2VFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2RpdicpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHJlZmVyZW5jZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnc3BhbicgJiZcbiAgICAgICAgICAgIHJlZmVyZW5jZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSBjdXJyZW50RWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5nZXRJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudCkpLmxlbmd0aCA+IDAgJiYgdGhpcy5pZGVudGljYWxJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudCwgcmVmZXJlbmNlRWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50RWxlbWVudC5jbGFzc0xpc3QubGVuZ3RoID4gMCAmJiB0aGlzLmlkZW50aWNhbENsYXNzTGlzdChjdXJyZW50RWxlbWVudCwgcmVmZXJlbmNlRWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50ICYmIGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnZGl2Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50SGFzU3R5bGUoY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudCwgcmVmZXJlbmNlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY2xlYW51cENvbnRhaW5lcihzZWxlY3Rpb246IFNlbGVjdGlvbiwgY29udGFpbmVyLCBmaXJzdFRpbWVDYWxsOiBCb29sZWFuKSB7XG4gICAgICAgIGxldCBwYXJlbnRDb250YWluZXI6IEhUTUxFbGVtZW50O1xuICAgICAgICBsZXQgcGFyZW50Rm91bmQ6IEJvb2xlYW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKGZpcnN0VGltZUNhbGwpIHtcbiAgICAgICAgICAgIHBhcmVudENvbnRhaW5lciA9IDxIVE1MRWxlbWVudD5zZWxlY3Rpb24uYW5jaG9yTm9kZTtcbiAgICAgICAgICAgIHdoaWxlIChwYXJlbnRDb250YWluZXIgJiYgIXBhcmVudEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudENvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgcGFyZW50Q29udGFpbmVyLmNsYXNzTGlzdD8uY29udGFpbnMoJ2NlLXBhcmFncmFwaCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb250YWluZXIgPSBwYXJlbnRDb250YWluZXIucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJlbnRDb250YWluZXIgPSBjb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFwYXJlbnRDb250YWluZXIgfHwgIXBhcmVudENvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudENvbnRhaW5lci5ub3JtYWxpemUoKTtcblxuICAgICAgICBjb25zdCBjaGlsZHJlbjogTm9kZVtdID0gQXJyYXkuZnJvbShwYXJlbnRDb250YWluZXIuY2hpbGROb2Rlcyk7XG4gICAgICAgIGlmIChjaGlsZHJlbj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yICh2YXIgY3VycmVudE5vZGUgPSBjaGlsZHJlblswXTsgY3VycmVudE5vZGU7IGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICFjdXJyZW50Tm9kZS50ZXh0Q29udGVudCB8fFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS50ZXh0Q29udGVudC5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiAoPEhUTUxFbGVtZW50PmN1cnJlbnROb2RlKS5pbm5lclRleHQubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcHJldmlvdXNTaWJsaW5nID0gY3VycmVudE5vZGUucHJldmlvdXNTaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb250YWluZXIucmVtb3ZlQ2hpbGQoY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZSA9IHByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRIYXNTdHlsZShjdXJyZW50Tm9kZS5wYXJlbnRFbGVtZW50LCA8SFRNTEVsZW1lbnQ+Y3VycmVudE5vZGUpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50Tm9kZUZpcnN0Q2hpbGQgPSBjdXJyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRDdXJyZW50RWxlbWVudCA9IGN1cnJlbnROb2RlLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb250YWluZXIuaW5zZXJ0QmVmb3JlKGN1cnJlbnROb2RlLmZpcnN0Q2hpbGQsIGN1cnJlbnROb2RlRmlyc3RDaGlsZC5uZXh0U2libGluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZUZpcnN0Q2hpbGQgPSBjdXJyZW50Tm9kZUZpcnN0Q2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29udGFpbmVyLnJlbW92ZUNoaWxkKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGUgPSBuZXh0Q3VycmVudEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBpZGVudGljYWxFbGVtZW50cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgICAgICAgICBpZGVudGljYWxFbGVtZW50cyAmJlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5uZXh0U2libGluZyAmJlxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGUubmV4dFNpYmxpbmcubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50RWxlbWVudCA9IDxFbGVtZW50PmN1cnJlbnROb2RlO1xuICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dEVsZW1lbnQgPSA8RWxlbWVudD5jdXJyZW50Tm9kZS5uZXh0U2libGluZztcblxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlkZW50aWNhbElubGluZVN0eWxlKGN1cnJlbnRFbGVtZW50LCBuZXh0RWxlbWVudCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmV4dEVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlkZW50aWNhbENsYXNzTGlzdChjdXJyZW50RWxlbWVudCwgbmV4dEVsZW1lbnQpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlkZW50aWNhbEF0dHJpYnV0ZXMoY3VycmVudEVsZW1lbnQsIG5leHRFbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LmlubmVySFRNTCArPSBuZXh0RWxlbWVudC5pbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0RWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kaWZpZWRDb250ZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWNhbEVsZW1lbnRzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgICAgICAgICAgICAgICAgKDxFbGVtZW50PmN1cnJlbnROb2RlKS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzcGFuJyAmJlxuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmdldElubGluZVN0eWxlKDxFbGVtZW50PmN1cnJlbnROb2RlKSkubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgICghKDxFbGVtZW50PmN1cnJlbnROb2RlKS5jbGFzc0xpc3QgfHwgKDxFbGVtZW50PmN1cnJlbnROb2RlKS5jbGFzc0xpc3QubGVuZ3RoID09PSAwKSAmJlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhc05vQXR0cmlidXRlcyg8RWxlbWVudD5jdXJyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnROb2RlRmlyc3RDaGlsZCA9IGN1cnJlbnROb2RlO1xuXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoPEVsZW1lbnQ+Y3VycmVudE5vZGVGaXJzdENoaWxkLnBhcmVudEVsZW1lbnQpLmluc2VydEJlZm9yZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZS5maXJzdENoaWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlRmlyc3RDaGlsZC5uZXh0U2libGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlRmlyc3RDaGlsZCA9IGN1cnJlbnROb2RlRmlyc3RDaGlsZC5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAoPEVsZW1lbnQ+Y3VycmVudE5vZGUpLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGlmaWVkQ29udGVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlLm5vcm1hbGl6ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jbGVhbnVwQ29udGFpbmVyKHNlbGVjdGlvbiwgY3VycmVudE5vZGUsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc05vQXR0cmlidXRlcyhub2RlOiBFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBub2RlU3R5bGUgPSBPYmplY3Qua2V5cyh0aGlzLmdldElubGluZVN0eWxlKG5vZGUpKTtcbiAgICAgICAgbGV0IG5vZGVBdHRyaWJ1dGVzID0gT2JqZWN0LmtleXMoXG4gICAgICAgICAgICBub2RlLmdldEF0dHJpYnV0ZU5hbWVzKCkucmVkdWNlKChhY2MsIG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5hY2MsIFtuYW1lXTogbm9kZS5nZXRBdHRyaWJ1dGUobmFtZSkgfTtcbiAgICAgICAgICAgIH0sIHt9KVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChub2RlQXR0cmlidXRlcy5sZW5ndGggPT09IDAgfHwgKG5vZGVBdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMSAmJiBub2RlU3R5bGUubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaWRlbnRpY2FsQ2xhc3NMaXN0KGN1cnJlbnRFbGVtZW50LCBuZXh0RWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgWy4uLmN1cnJlbnRFbGVtZW50LmNsYXNzTGlzdF0uZXZlcnkoKGNsYXNzTGlzdCkgPT4gbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTGlzdCkpICYmXG4gICAgICAgICAgICBbLi4ubmV4dEVsZW1lbnQuY2xhc3NMaXN0XS5ldmVyeSgoY2xhc3NMaXN0KSA9PiBjdXJyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NMaXN0KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlkZW50aWNhbEF0dHJpYnV0ZXMoY3VycmVudEVsZW1lbnQsIG5leHRFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBjdXJyZW50RWxlbWVudEF0dHJpYnV0ZXMgPSBjdXJyZW50RWxlbWVudC5nZXRBdHRyaWJ1dGVOYW1lcygpO1xuICAgICAgICBjdXJyZW50RWxlbWVudEF0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXR0cmlidXRlICE9PSAnc3R5bGUnKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAhbmV4dEVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgbmV4dEVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSkgIT09IGN1cnJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlkZW50aWNhbElubGluZVN0eWxlKGN1cnJlbnRFbGVtZW50LCBuZXh0RWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudElubGluZVN0eWxlID0gdGhpcy5nZXRJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IG5leHRFbGVtZW50SW5saW5lU3R5bGUgPSB0aGlzLmdldElubGluZVN0eWxlKG5leHRFbGVtZW50KTtcbiAgICAgICAgbGV0IGN1cnJlbnRFbGVtZW50SW5saW5lU3R5bGVTb3J0ZWQgPSB0aGlzLnNvcnRJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudElubGluZVN0eWxlKTtcbiAgICAgICAgbGV0IG5leHRFbGVtZW50SW5saW5lU3R5bGVTb3J0ZWQgPSB0aGlzLnNvcnRJbmxpbmVTdHlsZShuZXh0RWxlbWVudElubGluZVN0eWxlKTtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGN1cnJlbnRFbGVtZW50SW5saW5lU3R5bGVTb3J0ZWQpID09PSBKU09OLnN0cmluZ2lmeShuZXh0RWxlbWVudElubGluZVN0eWxlU29ydGVkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnRJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudCk6IE9iamVjdCB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhjdXJyZW50RWxlbWVudClcbiAgICAgICAgICAgIC5zb3J0KChbLCBhXTogYW55LCBbLCBiXTogYW55KSA9PiBhIC0gYilcbiAgICAgICAgICAgIC5yZWR1Y2UoKHIsIFtrLCB2XSkgPT4gKHsgLi4uciwgW2tdOiB2IH0pLCB7fSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJbmxpbmVTdHlsZShjdXJyZW50RWxlbWVudCk6IE9iamVjdCB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGN1cnJlbnRFbGVtZW50LnN0eWxlKS5yZWR1Y2UoKHN0eWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgc3R5bGVbbmFtZV0gPSBjdXJyZW50RWxlbWVudC5zdHlsZVtuYW1lXTtcbiAgICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SW5saW5lU3R5bGUoY3VycmVudEVsZW1lbnQsIG5leHRFbGVtZW50KTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjdXJyZW50RWxlbWVudElubGluZVN0eWxlOiBPYmplY3QgPSBBcnJheS5mcm9tKGN1cnJlbnRFbGVtZW50LnN0eWxlKS5yZWR1Y2UoKHN0eWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgc3R5bGVbbmFtZV0gPSBjdXJyZW50RWxlbWVudC5zdHlsZVtuYW1lXTtcbiAgICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgfSwge30pO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGN1cnJlbnRFbGVtZW50SW5saW5lU3R5bGUpIHtcbiAgICAgICAgICAgIG5leHRFbGVtZW50LnN0eWxlW3Byb3BlcnR5XSA9IGN1cnJlbnRFbGVtZW50SW5saW5lU3R5bGVbcHJvcGVydHldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXh0RWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQ29udGFpbmVyKGNvbnRhaW5lcnM6IHN0cmluZywgbm9kZTogTm9kZSk6IEJvb2xlYW4ge1xuICAgICAgICBpZiAoY29udGFpbmVycy5zcGxpdCgnLCcpLmluZGV4T2Yobm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHNhdmVJbmxpbmVTZWxlY3Rpb24oY29udGFpbmVyOiBIVE1MRWxlbWVudCwgZmlyc3RUaW1lQ2FsbDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChmaXJzdFRpbWVDYWxsKSB7XG4gICAgICAgICAgICBjb250YWluZXIgPSA8SFRNTEVsZW1lbnQ+dGhpcy5wYXJlbnRFZGl0b3IucXVlcnlTZWxlY3RvcignLmNlLXBhcmFncmFwaCcpLmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck5vZGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZm91bmRGb2N1c05vZGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZm91bmRBbmNob3JPZmZzZXQgPSAwO1xuICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzT2Zmc2V0ID0gMDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKSA9PT0gKDxIVE1MRWxlbWVudD50aGlzLnBhcmVudEVkaXRvci5xdWVyeVNlbGVjdG9yKCcuY2UtcGFyYWdyYXBoJykpLnRleHRDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck5vZGUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzT2Zmc2V0ID0gdGhpcy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmZvdW5kRm9jdXNOb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5leHROb2RlID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIHdoaWxlIChuZXh0Tm9kZSAmJiAoIXRoaXMuZm91bmRBbmNob3JOb2RlIHx8ICF0aGlzLmZvdW5kRm9jdXNOb2RlKSkge1xuICAgICAgICAgICAgaWYgKG5leHROb2RlID09PSB0aGlzLnNlbGVjdGVkQW5jaG9yTm9kZSkge1xuICAgICAgICAgICAgICAgIGxldCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzTFRSID0gdGhpcy5pc0FuY2hvckJlZm9yZUZvY3VzKFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvdW5kQW5jaG9yTm9kZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck9mZnNldCArPSBpc0xUUiA/IHRoaXMuYW5jaG9yT2Zmc2V0IDogdGhpcy5mb2N1c09mZnNldDtcbiAgICAgICAgICAgICAgICBsZXQgcmFuZ2UgPSB0aGlzLmdldFJhbmdlT2JqZWN0KHNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEZyYWdtZW50OiBEb2N1bWVudEZyYWdtZW50ID0gcmFuZ2UuY2xvbmVDb250ZW50cygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50OiBIVE1MU3BhbkVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgY3VycmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY3VycmVudEZyYWdtZW50KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuZm91bmRGb2N1c09mZnNldCA9IHRoaXMuZm91bmRBbmNob3JPZmZzZXQgKyBjdXJyZW50RWxlbWVudC5pbm5lclRleHQubGVuZ3RoO1xuICAgICAgICAgICAgICAgIHRoaXMuZm91bmRGb2N1c05vZGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXh0Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZm91bmRBbmNob3JOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm91bmRBbmNob3JPZmZzZXQgKz0gbmV4dE5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZm91bmRGb2N1c05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzT2Zmc2V0ICs9IG5leHROb2RlLnRleHRDb250ZW50Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV4dE5vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2F2ZUlubGluZVNlbGVjdGlvbig8SFRNTEVsZW1lbnQ+bmV4dE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dE5vZGUgPSBuZXh0Tm9kZS5uZXh0U2libGluZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcmVzZXRJbmxpbmVTZWxlY3Rpb24oY29udGFpbmVyOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsLCBmaXJzdFRpbWVDYWxsOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGZpcnN0VGltZUNhbGwpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lciA9IDxIVE1MRWxlbWVudD50aGlzLnBhcmVudEVkaXRvci5xdWVyeVNlbGVjdG9yKCcuY2UtcGFyYWdyYXBoJykuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICB0aGlzLmZvdW5kQW5jaG9yTm9kZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzTm9kZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy50bXBPZmZzZXQgPSAwO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck9mZnNldCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICg8SFRNTEVsZW1lbnQ+dGhpcy5wYXJlbnRFZGl0b3IucXVlcnlTZWxlY3RvcignLmNlLXBhcmFncmFwaCcpKS50ZXh0Q29udGVudC5sZW5ndGggPT09IHRoaXMuZm91bmRGb2N1c09mZnNldFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEFuY2hvck5vZGUgPSAoPEhUTUxFbGVtZW50PnRoaXMucGFyZW50RWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJy5jZS1wYXJhZ3JhcGgnKSkuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JPZmZzZXQgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGb2N1c05vZGUgPSAoPEhUTUxFbGVtZW50PnRoaXMucGFyZW50RWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJy5jZS1wYXJhZ3JhcGgnKSkuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c09mZnNldCA9IDE7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFVzZXJTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5leHROb2RlID0gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIHdoaWxlIChuZXh0Tm9kZSAmJiAoIXRoaXMuZm91bmRBbmNob3JOb2RlIHx8ICF0aGlzLmZvdW5kRm9jdXNOb2RlKSkge1xuICAgICAgICAgICAgaWYgKG5leHROb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5mb3VuZEFuY2hvck5vZGUgJiYgdGhpcy5mb3VuZEFuY2hvck9mZnNldCAtIG5leHROb2RlLnRleHRDb250ZW50Lmxlbmd0aCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck5vZGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFuY2hvck9mZnNldCA9IHRoaXMuZm91bmRBbmNob3JPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRBbmNob3JOb2RlID0gbmV4dE5vZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5mb3VuZEZvY3VzTm9kZSAmJiB0aGlzLmZvdW5kRm9jdXNPZmZzZXQgLSBuZXh0Tm9kZS50ZXh0Q29udGVudC5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvdW5kRm9jdXNOb2RlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c09mZnNldCA9IHRoaXMuZm91bmRGb2N1c09mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZvY3VzTm9kZSA9IG5leHROb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRtcE9mZnNldCArPSBuZXh0Tm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEFuY2hvck9mZnNldCAtPSBuZXh0Tm9kZS50ZXh0Q29udGVudC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3VuZEZvY3VzT2Zmc2V0IC09IG5leHROb2RlLnRleHRDb250ZW50Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXh0Tm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNldElubGluZVNlbGVjdGlvbig8SFRNTEVsZW1lbnQ+bmV4dE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV4dE5vZGUgPSBuZXh0Tm9kZS5uZXh0U2libGluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlyc3RUaW1lQ2FsbCkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFVzZXJTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TW9zdERlc2NlbmRhbnRDaGlsZChlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgICAgICB3aGlsZSAoZWxlbWVudC5jaGlsZHJlbiAmJiBlbGVtZW50LmlubmVyVGV4dCA9PT0gKDxIVE1MRWxlbWVudD5lbGVtZW50LmNoaWxkcmVuWzBdKT8uaW5uZXJUZXh0ICYmIGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gPEhUTUxFbGVtZW50PmVsZW1lbnQuY2hpbGRyZW5bMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxufVxuIl19
|
|
@@ -104,6 +104,7 @@ export class QuillComponent {
|
|
|
104
104
|
},
|
|
105
105
|
clipboard: {
|
|
106
106
|
matchers: [['BR', this.lineBreakMatcher]],
|
|
107
|
+
matchVisual: false,
|
|
107
108
|
},
|
|
108
109
|
keyboard: {
|
|
109
110
|
bindings: {
|
|
@@ -297,4 +298,4 @@ QuillComponent.propDecorators = {
|
|
|
297
298
|
color: [{ type: Input }],
|
|
298
299
|
placeholder: [{ type: Input }]
|
|
299
300
|
};
|
|
300
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3BhdWxpbmUvRG9jdW1lbnRzL3dvcmtzcGFjZS93aXppLWJsb2NrL3Byb2plY3RzL3dpemktYmxvY2svc3JjLyIsInNvdXJjZXMiOlsibGliL3NoYXJlZC9jb21wb25lbnRzL3F1aWxsL3F1aWxsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ25JLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxjQUFjLE1BQU0sT0FBTyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RCxNQUFNLEtBQUssR0FBUSxjQUFjLENBQUM7QUFNbEMsTUFBTSxPQUFPLGNBQWM7SUE2R3ZCLFlBQW9CLE1BQWMsRUFBVSxZQUEwQixFQUFVLGdCQUFrQztRQUE5RixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQWM7UUFBVSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBNUd4RyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFbkMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUUvQyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRWhELFlBQU8sR0FBRyxFQUFFLENB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Q0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxnQkFBZ0I7UUFDcEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUMzQixRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDL0IsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQzs7O1lBdFVKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsVUFBVTtnQkFDcEIsMnNIQUFxQzthQUN4Qzs7O1lBYndDLE1BQU07WUFFd0IsWUFBWTtZQUkxRSxnQkFBZ0I7Ozs0QkFTcEIsTUFBTTsrQkFFTixNQUFNOytCQUVOLE1BQU07c0JBRU4sS0FBSztxQkFFTCxLQUFLO3NCQUVMLEtBQUs7b0JBMERMLEtBQUs7MEJBTUwsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgTmdab25lLCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGlueUNvbG9yIH0gZnJvbSAnQGN0cmwvdGlueWNvbG9yJztcbmltcG9ydCB7IENVU1RPTV9MSU5LX05BTUUsIENVU1RPTV9VUFBFUkNBU0VfTkFNRSwgQ1VTVE9NX0xJTktfQ1JZUFRFRCwgUXVpbGxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbHMvcXVpbGwuc2VydmljZSc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkIH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgKiBhcyBRdWlsbE5hbWVzcGFjZSBmcm9tICdxdWlsbCc7XG5pbXBvcnQgeyBEZWx0YSB9IGZyb20gJy4uLy4uLy4uL2R0b3MvdXRpbHMvcXVpbGwvZGVsdGEuZHRvJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuY29uc3QgUXVpbGw6IGFueSA9IFF1aWxsTmFtZXNwYWNlO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3diLXF1aWxsJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcXVpbGwuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBRdWlsbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQE91dHB1dCgpIGNvbnRlbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KCkgaXNUb29sdGlwRm9jdXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIEBPdXRwdXQoKSB0b29sdGlwTG9zdEZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQElucHV0KCkgY29udGVudCA9ICcnO1xuXG4gICAgQElucHV0KCkgb2Zmc2V0ID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSB0b29sYmFyID0gW1xuICAgICAgICBbJ2JvbGQnLCAnaXRhbGljJywgJ3VuZGVybGluZScsICdzdHJpa2UnLCBDVVNUT01fVVBQRVJDQVNFX05BTUVdLFxuICAgICAgICBbJ2Jsb2NrcXVvdGUnXSxcblxuICAgICAgICBbeyBsaXN0OiAnb3JkZXJlZCcgfSwgeyBsaXN0OiAnYnVsbGV0JyB9XSxcbiAgICAgICAgW3sgc2NyaXB0OiAnc3ViJyB9LCB7IHNjcmlwdDogJ3N1cGVyJyB9XSxcbiAgICAgICAgW3sgaW5kZW50OiAnLTEnIH0sIHsgaW5kZW50OiAnKzEnIH1dLFxuICAgICAgICBbeyBzaXplOiBbJ3NtYWxsJywgZmFsc2UsICdsYXJnZScsICdodWdlJ10gfV0sXG4gICAgICAgIFt7IGhlYWRlcjogWzEsIDIsIDMsIDQsIDUsIDYsIGZhbHNlXSB9XSxcbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBbXG4gICAgICAgICAgICAgICAgICAgICcjMDAwMDAwJyxcbiAgICAgICAgICAgICAgICAgICAgJyNlNjAwMDAnLFxuICAgICAgICAgICAgICAgICAgICAnI2ZmOTkwMCcsXG4gICAgICAgICAgICAgICAgICAgICcjZmZmZjAwJyxcbiAgICAgICAgICAgICAgICAgICAgJyMwMDhhMDAnLFxuICAgICAgICAgICAgICAgICAgICAnIzAwNjZjYycsXG4gICAgICAgICAgICAgICAgICAgICcjOTkzM2ZmJyxcbiAgICAgICAgICAgICAgICAgICAgJyNmZmZmZmYnLFxuICAgICAgICAgICAgICAgICAgICAnI2ZhY2NjYycsXG4gICAgICAgICAgICAgICAgICAgICcjZmZlYmNjJyxcbiAgICAgICAgICAgICAgICAgICAgJyNmZmZmY2MnLFxuICAgICAgICAgICAgICAgICAgICAnI2NjZThjYycsXG4gICAgICAgICAgICAgICAgICAgICcjY2NlMGY1JyxcbiAgICAgICAgICAgICAgICAgICAgJyNlYmQ2ZmYnLFxuICAgICAgICAgICAgICAgICAgICAnI2JiYmJiYicsXG4gICAgICAgICAgICAgICAgICAgICcjZjA2NjY2JyxcbiAgICAgICAgICAgICAgICAgICAgJyNmZmMyNjYnLFxuICAgICAgICAgICAgICAgICAgICAnI2ZmZmY2NicsXG4gICAgICAgICAgICAgICAgICAgICcjNjZiOTY2JyxcbiAgICAgICAgICAgICAgICAgICAgJyM2NmEzZTAnLFxuICAgICAgICAgICAgICAgICAgICAnI2MyODVmZicsXG4gICAgICAgICAgICAgICAgICAgICcjODg4ODg4JyxcbiAgICAgICAgICAgICAgICAgICAgJyNhMTAwMDAnLFxuICAgICAgICAgICAgICAgICAgICAnI2IyNmIwMCcsXG4gICAgICAgICAgICAgICAgICAgICcjYjJiMjAwJyxcbiAgICAgICAgICAgICAgICAgICAgJyMwMDYxMDAnLFxuICAgICAgICAgICAgICAgICAgICAnIzAwNDdiMicsXG4gICAgICAgICAgICAgICAgICAgICcjNmIyNGIyJyxcbiAgICAgICAgICAgICAgICAgICAgJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICAnIzVjMDAwMCcsXG4gICAgICAgICAgICAgICAgICAgICcjNjYzZDAwJyxcbiAgICAgICAgICAgICAgICAgICAgJyM2NjY2MDAnLFxuICAgICAgICAgICAgICAgICAgICAnIzAwMzcwMCcsXG4gICAgICAgICAgICAgICAgICAgICcjMDAyOTY2JyxcbiAgICAgICAgICAgICAgICAgICAgJyMzZDE0NjYnLFxuICAgICAgICAgICAgICAgICAgICAnI2ZmOTkwMScsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGJhY2tncm91bmQ6IFtdIH0sXG4gICAgICAgIF0sXG4gICAgICAgIFt7IGFsaWduOiBbXSB9XSxcbiAgICAgICAgW0NVU1RPTV9MSU5LX05BTUVdLFxuICAgICAgICBbQ1VTVE9NX0xJTktfQ1JZUFRFRF0sXG4gICAgICAgIFsnY2xlYW4nXSxcbiAgICBdO1xuXG4gICAgQElucHV0KClcbiAgICBzZXQgY29sb3IodmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLl9jb2xvciA9IHZhbHVlO1xuICAgICAgICB0aGlzLmNvbG9yVGludCA9IG5ldyBUaW55Q29sb3IodmFsdWUpLmlzTGlnaHQoKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3diLnNoYXJlZC5jb21wb25lbnRzLnF1aWxsLjEnKTtcblxuICAgIF9jb2xvcjogYW55O1xuXG4gICAgdG1wQ29udGVudCA9ICcnO1xuXG4gICAgY29sb3JUaW50ID0gZmFsc2U7XG5cbiAgICBvcGVuQ29uZmlnID0gZmFsc2U7XG5cbiAgICBzb3VyY2VDb2RlID0gZmFsc2U7XG5cbiAgICBzb3VyY2VDb2RlVmFsdWUgPSAnJztcblxuICAgIGN1cnJlbnRFZGl0b3I6IGFueTtcblxuICAgIGxpbmtDb25maWcgPSAnJztcblxuICAgIGxpbmtTdHlsZSA9ICcnO1xuXG4gICAgbGlua0FscmVhZHlFeGlzdDogYm9vbGVhbjtcblxuICAgIGNoZWNrZWQgPSBmYWxzZTtcblxuICAgIGNyeXB0ZWQgPSBmYWxzZTtcblxuICAgIGN1cnJlbnRUb29sVGlwOiBhbnk7XG5cbiAgICBlZGl0b3I6IGFueTtcblxuICAgIG1vZHVsZXM6IGFueTtcblxuICAgIHV1aWQgPSB1dWlkKCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5nWm9uZTogTmdab25lLCBwcml2YXRlIHF1aWxsU2VydmljZTogUXVpbGxTZXJ2aWNlLCBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5xdWlsbFNlcnZpY2UuaW5pdCgpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhhbmRsZURlZmF1bHRDb250ZW50VHJhbnNsYXRpb24oKTtcbiAgICAgICAgdGhpcy5tb2R1bGVzID0ge1xuICAgICAgICAgICAgc3ludGF4OiBmYWxzZSxcbiAgICAgICAgICAgIGh0bWxFZGl0QnV0dG9uOiB7fSxcbiAgICAgICAgICAgIHRvb2xiYXI6IHtcbiAgICAgICAgICAgICAgICBjb250YWluZXI6IHRoaXMudG9vbGJhcixcbiAgICAgICAgICAgICAgICBoYW5kbGVyczoge1xuICAgICAgICAgICAgICAgICAgICBbQ1VTVE9NX0xJTktfTkFNRV06IHRoaXMuYWRkTGluay5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICBbQ1VTVE9NX0xJTktfQ1JZUFRFRF06IHRoaXMuYWRkTGluay5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICBbQ1VTVE9NX1VQUEVSQ0FTRV9OQU1FXTogdGhpcy5hZGRVcHBlckNhc2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNsaXBib2FyZDoge1xuICAgICAgICAgICAgICAgIG1hdGNoZXJzOiBbWydCUicsIHRoaXMubGluZUJyZWFrTWF0Y2hlcl1dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGtleWJvYXJkOiB7XG4gICAgICAgICAgICAgICAgYmluZGluZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgbGluZWJyZWFrOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IDEzLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRLZXk6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiAocmFuZ2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBsaW5lIGJyZWFrcyB3aXRoIHNoaWZ0ICsgZW50ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudExlYWYgPSB0aGlzLmVkaXRvci5nZXRMZWFmKHJhbmdlLmluZGV4KVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV4dExlYWYgPSB0aGlzLmVkaXRvci5nZXRMZWFmKHJhbmdlLmluZGV4ICsgMSlbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5pbnNlcnRFbWJlZChyYW5nZS5pbmRleCwgJ2JyZWFrJywgdHJ1ZSwgJ3VzZXInKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluc2VydCBhIHNlY29uZCBicmVhayBpZjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBdCB0aGUgZW5kIG9mIHRoZSBlZGl0b3IsIE9SIG5leHQgbGVhZiBoYXMgYSBkaWZmZXJlbnQgcGFyZW50ICg8cD4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRMZWFmID09PSBudWxsIHx8IGN1cnJlbnRMZWFmLnBhcmVudCAhPT0gbmV4dExlYWYucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLmluc2VydEVtYmVkKHJhbmdlLmluZGV4LCAnYnJlYWsnLCB0cnVlLCAndXNlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlJ3ZlIGluc2VydGVkIGEgbGluZSBicmVhaywgbW92ZSB0aGUgY3Vyc29yIGZvcndhcmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5zZXRTZWxlY3Rpb24ocmFuZ2UuaW5kZXggKyAxLCBRdWlsbC5zb3VyY2VzLlNJTEVOVCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMucXVpbGxTZXJ2aWNlLmJpbmRUb29sdGlwRm9jdXMoKS5zdWJzY3JpYmUoKGlkKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzVG9vbHRpcEZvY3VzZWQuZW1pdChmYWxzZSk7XG4gICAgICAgICAgICBpZiAoaWQgPT09IHRoaXMudXVpZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNUb29sdGlwRm9jdXNlZC5lbWl0KHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBoYW5kbGVEZWZhdWx0Q29udGVudFRyYW5zbGF0aW9uKCkge1xuICAgICAgICB0aGlzLnRtcENvbnRlbnQgPSAvXndiXFwuLy50ZXN0KHRoaXMuY29udGVudCkgPyB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLmNvbnRlbnQpIDogdGhpcy5jb250ZW50O1xuICAgIH1cblxuICAgIGNvbnRlbnRDaGFuZ2VkKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRvcikge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTZXREZWZhdWx0VGV4dENvbG9yQWN0aW9uKGV2ZW50LmRlbHRhKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VGV4dEJsYWNrQ29sb3IoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY29udGVudCA9IHRoaXMuZWRpdG9yLnJvb3QuaW5uZXJIVE1MO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSh0aGlzLmNvbnRlbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZW50ID0gJyc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY29udGVudENoYW5nZS5lbWl0KHRoaXMuY29udGVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlZGl0b3JMb2FkZWQoZTogYW55KSB7XG4gICAgICAgIHRoaXMuZWRpdG9yID0gZTtcbiAgICAgICAgdGhpcy5zZXRFdmVudExpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgYWRkVXBwZXJDYXNlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5lZGl0b3IuZm9ybWF0KENVU1RPTV9VUFBFUkNBU0VfTkFNRSwgZmFsc2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lZGl0b3IuZm9ybWF0KENVU1RPTV9VUFBFUkNBU0VfTkFNRSwgJ3VwcGVyY2FzZScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkTGluayh2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMubGlua0FscmVhZHlFeGlzdCA9IGZhbHNlO1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnJldHJpZXZlRXhpc3RpbmdMaW5rKCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY3VycmVudFRvb2xUaXApIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ05vIHBhcmVudCBlbGVtZW50Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBsZWZ0U3R5bGUgPSB0aGlzLmN1cnJlbnRUb29sVGlwLnN0eWxlLmxlZnQ7XG4gICAgICAgICAgICAgICAgICAgIGxldCB3aWR0aFN0eWxlID0gdGhpcy5jdXJyZW50VG9vbFRpcC5zdHlsZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9wU3R5bGUgPSB0aGlzLmN1cnJlbnRUb29sVGlwLnN0eWxlLnRvcDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vZmZzZXQgJiYgd2lkdGhTdHlsZS5yZXBsYWNlKCdweCcsICcnKSA8IDUwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbW92ZWRTdHlsZSA9ICg1MjAgLSBwYXJzZUludCh3aWR0aFN0eWxlLnJlcGxhY2UoJ3B4JywgJycpLCAxMCkpIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoU3R5bGUgPSAnNTIwcHgnO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdFN0eWxlID0gcGFyc2VJbnQobGVmdFN0eWxlLnJlcGxhY2UoJ3B4JywgJycpLCAxMCkgLSBtb3ZlZFN0eWxlICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlua1N0eWxlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICdoZWlnaHQ6JyArXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUb29sVGlwLmNsaWVudEhlaWdodCArXG4gICAgICAgICAgICAgICAgICAgICAgICAncHg7IHdpZHRoOicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhTdHlsZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnO2xlZnQ6JyArXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0U3R5bGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJzt0b3A6JyArXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3BTdHlsZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuQ29uZmlnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50RWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMCk7XG4gICAgfVxuXG4gICAgc2V0RXZlbnRMaXN0ZW5lcigpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFRvb2wgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucWwtdG9vbHRpcCcpO1xuICAgICAgICBjdXJyZW50VG9vbC5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUb29sVGlwID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5xbC10b29sdGlwJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFsaWRUaGlzVXJsT25FbnRlcihlOiBhbnkpIHtcbiAgICAgICAgaWYgKGUua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRUaGlzVXJsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YWxpZFRoaXNVcmwoKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRFZGl0b3IpIHtcbiAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBsaW5rLCBhdm9pZCBocmVmID0gW09iamVjdCBPYmplY3RdXG4gICAgICAgICAgICBpZiAodGhpcy5saW5rQWxyZWFkeUV4aXN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVMaW5rKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRFZGl0b3IuZm9ybWF0KENVU1RPTV9MSU5LX05BTUUsIHsgdGFyZ2V0OiAhdGhpcy5jaGVja2VkLCB2YWx1ZTogdGhpcy5saW5rQ29uZmlnLCBjcnlwdGVkOiB0aGlzLmNyeXB0ZWQgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbG9zZVVybENvbmZpZygpO1xuICAgIH1cblxuICAgIGNsb3NlVXJsQ29uZmlnKCkge1xuICAgICAgICB0aGlzLm9wZW5Db25maWcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5saW5rQ29uZmlnID0gJyc7XG4gICAgICAgIHRoaXMuY2hlY2tlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlzRW1wdHkoY29udGVudDogYW55KSB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnRUZXh0ID0gY29udGVudC50cmltKCk7XG4gICAgICAgIGNvbnN0IHJlID0gL148W3BoMC05XSs+KDxicj58PGJyXFwvPnw8YnJcXHNcXC8+fFxccyt8KTxcXC9bcGgwLTldKz4kL2dtO1xuICAgICAgICByZXR1cm4gcmUudGVzdChjb21tZW50VGV4dCk7XG4gICAgfVxuXG4gICAgZm9jdXNUaGlzKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBldmVudC5lZGl0b3I7XG4gICAgICAgIHRoaXMucXVpbGxTZXJ2aWNlLnNldEZvY3VzZWQodGhpcy51dWlkKTtcbiAgICB9XG5cbiAgICBvbkZvY3VzTG9zdCgpIHtcbiAgICAgICAgdGhpcy50b29sdGlwTG9zdEZvY3VzLmVtaXQodHJ1ZSk7XG4gICAgfVxuXG4gICAgcmV0cmlldmVFeGlzdGluZ0xpbmsoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBsaW5rRm9ybWF0ID0gdGhpcy5lZGl0b3IuZ2V0Rm9ybWF0KClbQ1VTVE9NX0xJTktfTkFNRV07XG4gICAgICAgICAgICBpZiAoIWxpbmtGb3JtYXQudGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubGlua0NvbmZpZyA9IGxpbmtGb3JtYXQuY3J5cHRlZCA/IGF0b2IobGlua0Zvcm1hdC5jcnlwdGVkKSA6IGxpbmtGb3JtYXQudmFsdWUgPyBsaW5rRm9ybWF0LnZhbHVlIDogbGlua0Zvcm1hdFswXS52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMubGlua0FscmVhZHlFeGlzdCA9IHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblJlbW92ZUxpbmsoKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlTGluaygpO1xuICAgIH1cblxuICAgIHJlbW92ZUxpbmsoKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEVkaXRvci5mb3JtYXQoQ1VTVE9NX0xJTktfTkFNRSk7XG4gICAgfVxuXG4gICAgaXNTZXREZWZhdWx0VGV4dENvbG9yQWN0aW9uKGRlbHRhOiBhbnkpIHtcbiAgICAgICAgZm9yIChjb25zdCBvcGUgb2YgZGVsdGEub3BzKSB7XG4gICAgICAgICAgICBpZiAob3BlLmF0dHJpYnV0ZXMgJiYgb3BlLmF0dHJpYnV0ZXMuY29sb3IgPT09ICcjZmY5OTAxJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFF1aWxsIGhhcyB0aGUgYmxhY2sgY29sb3IgYnkgZGVmYXVsdC5cbiAgICAgKiBBZGRpbmcgYmxhY2sgY29sb3IgYXZvaWQgaGlkZGluZyB0ZXh0IGluIHRoZSBmcm9udCAod2hlbiB0aGUgZGVmYXVsdCBjb2xvciB0ZXh0IGluIHRoZSBmcm9udCBpcyB3aGl0ZSlcbiAgICAgKi9cbiAgICBzZXRUZXh0QmxhY2tDb2xvcigpIHtcbiAgICAgICAgdGhpcy5lZGl0b3IuZm9ybWF0KCdjb2xvcicsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxpbmVCcmVha01hdGNoZXIoKSB7XG4gICAgICAgIHZhciBuZXdEZWx0YSA9IG5ldyBEZWx0YSgpO1xuICAgICAgICBuZXdEZWx0YS5pbnNlcnQoeyBicmVhazogJycgfSk7XG4gICAgICAgIHJldHVybiBuZXdEZWx0YTtcbiAgICB9XG59XG4iXX0=
|
|
301
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9ob21lL3BhdWxpbmUvRG9jdW1lbnRzL3dvcmtzcGFjZS93aXppLWJsb2NrL3Byb2plY3RzL3dpemktYmxvY2svc3JjLyIsInNvdXJjZXMiOlsibGliL3NoYXJlZC9jb21wb25lbnRzL3F1aWxsL3F1aWxsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ25JLE9BQU8sRUFBRSxFQUFFLElBQUksSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxjQUFjLE1BQU0sT0FBTyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RCxNQUFNLEtBQUssR0FBUSxjQUFjLENBQUM7QUFNbEMsTUFBTSxPQUFPLGNBQWM7SUE2R3ZCLFlBQW9CLE1BQWMsRUFBVSxZQUEwQixFQUFVLGdCQUFrQztRQUE5RixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQWM7UUFBVSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBNUd4RyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFbkMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUUvQyxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRWhELFlBQU8sR0FBRyxFQUFFLENB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QjtRQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3BCLElBQUksUUFBUSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFDM0IsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7OztZQXZVSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLFVBQVU7Z0JBQ3BCLDJzSEFBcUM7YUFDeEM7OztZQWJ3QyxNQUFNO1lBRXdCLFlBQVk7WUFJMUUsZ0JBQWdCOzs7NEJBU3BCLE1BQU07K0JBRU4sTUFBTTsrQkFFTixNQUFNO3NCQUVOLEtBQUs7cUJBRUwsS0FBSztzQkFFTCxLQUFLO29CQTBETCxLQUFLOzBCQU1MLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE5nWm9uZSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRpbnlDb2xvciB9IGZyb20gJ0BjdHJsL3Rpbnljb2xvcic7XG5pbXBvcnQgeyBDVVNUT01fTElOS19OQU1FLCBDVVNUT01fVVBQRVJDQVNFX05BTUUsIENVU1RPTV9MSU5LX0NSWVBURUQsIFF1aWxsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxzL3F1aWxsLnNlcnZpY2UnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0ICogYXMgUXVpbGxOYW1lc3BhY2UgZnJvbSAncXVpbGwnO1xuaW1wb3J0IHsgRGVsdGEgfSBmcm9tICcuLi8uLi8uLi9kdG9zL3V0aWxzL3F1aWxsL2RlbHRhLmR0byc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbmNvbnN0IFF1aWxsOiBhbnkgPSBRdWlsbE5hbWVzcGFjZTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd3Yi1xdWlsbCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3F1aWxsLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgUXVpbGxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBPdXRwdXQoKSBjb250ZW50Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpIGlzVG9vbHRpcEZvY3VzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBAT3V0cHV0KCkgdG9vbHRpcExvc3RGb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIEBJbnB1dCgpIGNvbnRlbnQgPSAnJztcblxuICAgIEBJbnB1dCgpIG9mZnNldCA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgdG9vbGJhciA9IFtcbiAgICAgICAgWydib2xkJywgJ2l0YWxpYycsICd1bmRlcmxpbmUnLCAnc3RyaWtlJywgQ1VTVE9NX1VQUEVSQ0FTRV9OQU1FXSxcbiAgICAgICAgWydibG9ja3F1b3RlJ10sXG5cbiAgICAgICAgW3sgbGlzdDogJ29yZGVyZWQnIH0sIHsgbGlzdDogJ2J1bGxldCcgfV0sXG4gICAgICAgIFt7IHNjcmlwdDogJ3N1YicgfSwgeyBzY3JpcHQ6ICdzdXBlcicgfV0sXG4gICAgICAgIFt7IGluZGVudDogJy0xJyB9LCB7IGluZGVudDogJysxJyB9XSxcbiAgICAgICAgW3sgc2l6ZTogWydzbWFsbCcsIGZhbHNlLCAnbGFyZ2UnLCAnaHVnZSddIH1dLFxuICAgICAgICBbeyBoZWFkZXI6IFsxLCAyLCAzLCA0LCA1LCA2LCBmYWxzZV0gfV0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb2xvcjogW1xuICAgICAgICAgICAgICAgICAgICAnIzAwMDAwMCcsXG4gICAgICAgICAgICAgICAgICAgICcjZTYwMDAwJyxcbiAgICAgICAgICAgICAgICAgICAgJyNmZjk5MDAnLFxuICAgICAgICAgICAgICAgICAgICAnI2ZmZmYwMCcsXG4gICAgICAgICAgICAgICAgICAgICcjMDA4YTAwJyxcbiAgICAgICAgICAgICAgICAgICAgJyMwMDY2Y2MnLFxuICAgICAgICAgICAgICAgICAgICAnIzk5MzNmZicsXG4gICAgICAgICAgICAgICAgICAgICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgJyNmYWNjY2MnLFxuICAgICAgICAgICAgICAgICAgICAnI2ZmZWJjYycsXG4gICAgICAgICAgICAgICAgICAgICcjZmZmZmNjJyxcbiAgICAgICAgICAgICAgICAgICAgJyNjY2U4Y2MnLFxuICAgICAgICAgICAgICAgICAgICAnI2NjZTBmNScsXG4gICAgICAgICAgICAgICAgICAgICcjZWJkNmZmJyxcbiAgICAgICAgICAgICAgICAgICAgJyNiYmJiYmInLFxuICAgICAgICAgICAgICAgICAgICAnI2YwNjY2NicsXG4gICAgICAgICAgICAgICAgICAgICcjZmZjMjY2JyxcbiAgICAgICAgICAgICAgICAgICAgJyNmZmZmNjYnLFxuICAgICAgICAgICAgICAgICAgICAnIzY2Yjk2NicsXG4gICAgICAgICAgICAgICAgICAgICcjNjZhM2UwJyxcbiAgICAgICAgICAgICAgICAgICAgJyNjMjg1ZmYnLFxuICAgICAgICAgICAgICAgICAgICAnIzg4ODg4OCcsXG4gICAgICAgICAgICAgICAgICAgICcjYTEwMDAwJyxcbiAgICAgICAgICAgICAgICAgICAgJyNiMjZiMDAnLFxuICAgICAgICAgICAgICAgICAgICAnI2IyYjIwMCcsXG4gICAgICAgICAgICAgICAgICAgICcjMDA2MTAwJyxcbiAgICAgICAgICAgICAgICAgICAgJyMwMDQ3YjInLFxuICAgICAgICAgICAgICAgICAgICAnIzZiMjRiMicsXG4gICAgICAgICAgICAgICAgICAgICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgJyM1YzAwMDAnLFxuICAgICAgICAgICAgICAgICAgICAnIzY2M2QwMCcsXG4gICAgICAgICAgICAgICAgICAgICcjNjY2NjAwJyxcbiAgICAgICAgICAgICAgICAgICAgJyMwMDM3MDAnLFxuICAgICAgICAgICAgICAgICAgICAnIzAwMjk2NicsXG4gICAgICAgICAgICAgICAgICAgICcjM2QxNDY2JyxcbiAgICAgICAgICAgICAgICAgICAgJyNmZjk5MDEnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBiYWNrZ3JvdW5kOiBbXSB9LFxuICAgICAgICBdLFxuICAgICAgICBbeyBhbGlnbjogW10gfV0sXG4gICAgICAgIFtDVVNUT01fTElOS19OQU1FXSxcbiAgICAgICAgW0NVU1RPTV9MSU5LX0NSWVBURURdLFxuICAgICAgICBbJ2NsZWFuJ10sXG4gICAgXTtcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGNvbG9yKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5fY29sb3IgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5jb2xvclRpbnQgPSBuZXcgVGlueUNvbG9yKHZhbHVlKS5pc0xpZ2h0KCk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCd3Yi5zaGFyZWQuY29tcG9uZW50cy5xdWlsbC4xJyk7XG5cbiAgICBfY29sb3I6IGFueTtcblxuICAgIHRtcENvbnRlbnQgPSAnJztcblxuICAgIGNvbG9yVGludCA9IGZhbHNlO1xuXG4gICAgb3BlbkNvbmZpZyA9IGZhbHNlO1xuXG4gICAgc291cmNlQ29kZSA9IGZhbHNlO1xuXG4gICAgc291cmNlQ29kZVZhbHVlID0gJyc7XG5cbiAgICBjdXJyZW50RWRpdG9yOiBhbnk7XG5cbiAgICBsaW5rQ29uZmlnID0gJyc7XG5cbiAgICBsaW5rU3R5bGUgPSAnJztcblxuICAgIGxpbmtBbHJlYWR5RXhpc3Q6IGJvb2xlYW47XG5cbiAgICBjaGVja2VkID0gZmFsc2U7XG5cbiAgICBjcnlwdGVkID0gZmFsc2U7XG5cbiAgICBjdXJyZW50VG9vbFRpcDogYW55O1xuXG4gICAgZWRpdG9yOiBhbnk7XG5cbiAgICBtb2R1bGVzOiBhbnk7XG5cbiAgICB1dWlkID0gdXVpZCgpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSwgcHJpdmF0ZSBxdWlsbFNlcnZpY2U6IFF1aWxsU2VydmljZSwgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMucXVpbGxTZXJ2aWNlLmluaXQoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oYW5kbGVEZWZhdWx0Q29udGVudFRyYW5zbGF0aW9uKCk7XG4gICAgICAgIHRoaXMubW9kdWxlcyA9IHtcbiAgICAgICAgICAgIHN5bnRheDogZmFsc2UsXG4gICAgICAgICAgICBodG1sRWRpdEJ1dHRvbjoge30sXG4gICAgICAgICAgICB0b29sYmFyOiB7XG4gICAgICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLnRvb2xiYXIsXG4gICAgICAgICAgICAgICAgaGFuZGxlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgW0NVU1RPTV9MSU5LX05BTUVdOiB0aGlzLmFkZExpbmsuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgW0NVU1RPTV9MSU5LX0NSWVBURURdOiB0aGlzLmFkZExpbmsuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgW0NVU1RPTV9VUFBFUkNBU0VfTkFNRV06IHRoaXMuYWRkVXBwZXJDYXNlLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbGlwYm9hcmQ6IHtcbiAgICAgICAgICAgICAgICBtYXRjaGVyczogW1snQlInLCB0aGlzLmxpbmVCcmVha01hdGNoZXJdXSxcbiAgICAgICAgICAgICAgICBtYXRjaFZpc3VhbDogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2V5Ym9hcmQ6IHtcbiAgICAgICAgICAgICAgICBiaW5kaW5nczoge1xuICAgICAgICAgICAgICAgICAgICBsaW5lYnJlYWs6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogMTMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGlmdEtleTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IChyYW5nZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIGxpbmUgYnJlYWtzIHdpdGggc2hpZnQgKyBlbnRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50TGVhZiA9IHRoaXMuZWRpdG9yLmdldExlYWYocmFuZ2UuaW5kZXgpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXh0TGVhZiA9IHRoaXMuZWRpdG9yLmdldExlYWYocmFuZ2UuaW5kZXggKyAxKVswXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLmluc2VydEVtYmVkKHJhbmdlLmluZGV4LCAnYnJlYWsnLCB0cnVlLCAndXNlcicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IGEgc2Vjb25kIGJyZWFrIGlmOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0IHRoZSBlbmQgb2YgdGhlIGVkaXRvciwgT1IgbmV4dCBsZWFmIGhhcyBhIGRpZmZlcmVudCBwYXJlbnQgKDxwPilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dExlYWYgPT09IG51bGwgfHwgY3VycmVudExlYWYucGFyZW50ICE9PSBuZXh0TGVhZi5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IuaW5zZXJ0RW1iZWQocmFuZ2UuaW5kZXgsICdicmVhaycsIHRydWUsICd1c2VyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm93IHRoYXQgd2UndmUgaW5zZXJ0ZWQgYSBsaW5lIGJyZWFrLCBtb3ZlIHRoZSBjdXJzb3IgZm9yd2FyZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLnNldFNlbGVjdGlvbihyYW5nZS5pbmRleCArIDEsIFF1aWxsLnNvdXJjZXMuU0lMRU5UKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5xdWlsbFNlcnZpY2UuYmluZFRvb2x0aXBGb2N1cygpLnN1YnNjcmliZSgoaWQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNUb29sdGlwRm9jdXNlZC5lbWl0KGZhbHNlKTtcbiAgICAgICAgICAgIGlmIChpZCA9PT0gdGhpcy51dWlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1Rvb2x0aXBGb2N1c2VkLmVtaXQodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGhhbmRsZURlZmF1bHRDb250ZW50VHJhbnNsYXRpb24oKSB7XG4gICAgICAgIHRoaXMudG1wQ29udGVudCA9IC9ed2JcXC4vLnRlc3QodGhpcy5jb250ZW50KSA/IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMuY29udGVudCkgOiB0aGlzLmNvbnRlbnQ7XG4gICAgfVxuXG4gICAgY29udGVudENoYW5nZWQoZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1NldERlZmF1bHRUZXh0Q29sb3JBY3Rpb24oZXZlbnQuZGVsdGEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUZXh0QmxhY2tDb2xvcigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jb250ZW50ID0gdGhpcy5lZGl0b3Iucm9vdC5pbm5lckhUTUw7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0VtcHR5KHRoaXMuY29udGVudCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnQgPSAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jb250ZW50Q2hhbmdlLmVtaXQodGhpcy5jb250ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVkaXRvckxvYWRlZChlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBlO1xuICAgICAgICB0aGlzLnNldEV2ZW50TGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICBhZGRVcHBlckNhc2UodmFsdWU6IGFueSkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvci5mb3JtYXQoQ1VTVE9NX1VQUEVSQ0FTRV9OQU1FLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvci5mb3JtYXQoQ1VTVE9NX1VQUEVSQ0FTRV9OQU1FLCAndXBwZXJjYXNlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRMaW5rKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5saW5rQWxyZWFkeUV4aXN0ID0gZmFsc2U7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMucmV0cmlldmVFeGlzdGluZ0xpbmsoKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50VG9vbFRpcCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTm8gcGFyZW50IGVsZW1lbnQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxlZnRTdHlsZSA9IHRoaXMuY3VycmVudFRvb2xUaXAuc3R5bGUubGVmdDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHdpZHRoU3R5bGUgPSB0aGlzLmN1cnJlbnRUb29sVGlwLnN0eWxlLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0b3BTdHlsZSA9IHRoaXMuY3VycmVudFRvb2xUaXAuc3R5bGUudG9wO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9mZnNldCAmJiB3aWR0aFN0eWxlLnJlcGxhY2UoJ3B4JywgJycpIDwgNTAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtb3ZlZFN0eWxlID0gKDUyMCAtIHBhcnNlSW50KHdpZHRoU3R5bGUucmVwbGFjZSgncHgnLCAnJyksIDEwKSkgLyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhTdHlsZSA9ICc1MjBweCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0U3R5bGUgPSBwYXJzZUludChsZWZ0U3R5bGUucmVwbGFjZSgncHgnLCAnJyksIDEwKSAtIG1vdmVkU3R5bGUgKyAncHgnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5rU3R5bGUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgJ2hlaWdodDonICtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRvb2xUaXAuY2xpZW50SGVpZ2h0ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdweDsgd2lkdGg6JyArXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aFN0eWxlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc7bGVmdDonICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTdHlsZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnO3RvcDonICtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcFN0eWxlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5Db25maWcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRFZGl0b3IgPSB0aGlzLmVkaXRvcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwKTtcbiAgICB9XG5cbiAgICBzZXRFdmVudExpc3RlbmVyKCkge1xuICAgICAgICBjb25zdCBjdXJyZW50VG9vbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5xbC10b29sdGlwJyk7XG4gICAgICAgIGN1cnJlbnRUb29sLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRvb2xUaXAgPSBldmVudC50YXJnZXQuY2xvc2VzdCgnLnFsLXRvb2x0aXAnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YWxpZFRoaXNVcmxPbkVudGVyKGU6IGFueSkge1xuICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAxMykge1xuICAgICAgICAgICAgdGhpcy52YWxpZFRoaXNVcmwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhbGlkVGhpc1VybCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEVkaXRvcikge1xuICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGxpbmssIGF2b2lkIGhyZWYgPSBbT2JqZWN0IE9iamVjdF1cbiAgICAgICAgICAgIGlmICh0aGlzLmxpbmtBbHJlYWR5RXhpc3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUxpbmsoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY3VycmVudEVkaXRvci5mb3JtYXQoQ1VTVE9NX0xJTktfTkFNRSwgeyB0YXJnZXQ6ICF0aGlzLmNoZWNrZWQsIHZhbHVlOiB0aGlzLmxpbmtDb25maWcsIGNyeXB0ZWQ6IHRoaXMuY3J5cHRlZCB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsb3NlVXJsQ29uZmlnKCk7XG4gICAgfVxuXG4gICAgY2xvc2VVcmxDb25maWcoKSB7XG4gICAgICAgIHRoaXMub3BlbkNvbmZpZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxpbmtDb25maWcgPSAnJztcbiAgICAgICAgdGhpcy5jaGVja2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaXNFbXB0eShjb250ZW50OiBhbnkpIHtcbiAgICAgICAgY29uc3QgY29tbWVudFRleHQgPSBjb250ZW50LnRyaW0oKTtcbiAgICAgICAgY29uc3QgcmUgPSAvXjxbcGgwLTldKz4oPGJyPnw8YnJcXC8+fDxiclxcc1xcLz58XFxzK3wpPFxcL1twaDAtOV0rPiQvZ207XG4gICAgICAgIHJldHVybiByZS50ZXN0KGNvbW1lbnRUZXh0KTtcbiAgICB9XG5cbiAgICBmb2N1c1RoaXMoZXZlbnQ6IGFueSkge1xuICAgICAgICB0aGlzLmVkaXRvciA9IGV2ZW50LmVkaXRvcjtcbiAgICAgICAgdGhpcy5xdWlsbFNlcnZpY2Uuc2V0Rm9jdXNlZCh0aGlzLnV1aWQpO1xuICAgIH1cblxuICAgIG9uRm9jdXNMb3N0KCkge1xuICAgICAgICB0aGlzLnRvb2x0aXBMb3N0Rm9jdXMuZW1pdCh0cnVlKTtcbiAgICB9XG5cbiAgICByZXRyaWV2ZUV4aXN0aW5nTGluaygpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtGb3JtYXQgPSB0aGlzLmVkaXRvci5nZXRGb3JtYXQoKVtDVVNUT01fTElOS19OQU1FXTtcbiAgICAgICAgICAgIGlmICghbGlua0Zvcm1hdC50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5saW5rQ29uZmlnID0gbGlua0Zvcm1hdC5jcnlwdGVkID8gYXRvYihsaW5rRm9ybWF0LmNyeXB0ZWQpIDogbGlua0Zvcm1hdC52YWx1ZSA/IGxpbmtGb3JtYXQudmFsdWUgOiBsaW5rRm9ybWF0WzBdLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy5saW5rQWxyZWFkeUV4aXN0ID0gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUmVtb3ZlTGluaygpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVMaW5rKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlTGluaygpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50RWRpdG9yLmZvcm1hdChDVVNUT01fTElOS19OQU1FKTtcbiAgICB9XG5cbiAgICBpc1NldERlZmF1bHRUZXh0Q29sb3JBY3Rpb24oZGVsdGE6IGFueSkge1xuICAgICAgICBmb3IgKGNvbnN0IG9wZSBvZiBkZWx0YS5vcHMpIHtcbiAgICAgICAgICAgIGlmIChvcGUuYXR0cmlidXRlcyAmJiBvcGUuYXR0cmlidXRlcy5jb2xvciA9PT0gJyNmZjk5MDEnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUXVpbGwgaGFzIHRoZSBibGFjayBjb2xvciBieSBkZWZhdWx0LlxuICAgICAqIEFkZGluZyBibGFjayBjb2xvciBhdm9pZCBoaWRkaW5nIHRleHQgaW4gdGhlIGZyb250ICh3aGVuIHRoZSBkZWZhdWx0IGNvbG9yIHRleHQgaW4gdGhlIGZyb250IGlzIHdoaXRlKVxuICAgICAqL1xuICAgIHNldFRleHRCbGFja0NvbG9yKCkge1xuICAgICAgICB0aGlzLmVkaXRvci5mb3JtYXQoJ2NvbG9yJywgZmFsc2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbGluZUJyZWFrTWF0Y2hlcigpIHtcbiAgICAgICAgdmFyIG5ld0RlbHRhID0gbmV3IERlbHRhKCk7XG4gICAgICAgIG5ld0RlbHRhLmluc2VydCh7IGJyZWFrOiAnJyB9KTtcbiAgICAgICAgcmV0dXJuIG5ld0RlbHRhO1xuICAgIH1cbn1cbiJdfQ==
|