@sbb-esta/lyne-elements-dev 5.0.0-next.2-dev.1778481144 → 5.0.0-next.2-dev.1778486889
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/autocomplete/autocomplete-base-element.js +1 -1
- package/autocomplete/autocomplete.component.js +1 -1
- package/{autocomplete-base-element-CAWFmfLW.js → autocomplete-base-element-65vWamdc.js} +1 -1
- package/autocomplete.js +1 -1
- package/autocomplete.pure.js +1 -1
- package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -1
- package/development/autocomplete/autocomplete-base-element.js +1 -1
- package/development/autocomplete/autocomplete.component.js +1 -1
- package/development/{autocomplete-base-element-DZx53PO1.js → autocomplete-base-element-BHYleZ3J.js} +2 -2
- package/development/autocomplete.js +1 -1
- package/development/autocomplete.pure.js +1 -1
- package/package.json +2 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as e } from "../autocomplete-base-element-
|
|
1
|
+
import { t as e } from "../autocomplete-base-element-65vWamdc.js";
|
|
2
2
|
export { e as SbbAutocompleteBaseElement };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as e } from "../autocomplete-base-element-
|
|
1
|
+
import { t as e } from "../autocomplete-base-element-65vWamdc.js";
|
|
2
2
|
import { getNextElementIndex as t, isSafari as n, setAriaComboBoxAttributes as r } from "../core.js";
|
|
3
3
|
//#region src/elements/autocomplete/autocomplete.component.ts
|
|
4
4
|
var i = 0, a = n, o = class extends e {
|
|
@@ -352,7 +352,7 @@ var S = ":host{display:none}:host(:is(:is(:state(state-opening),[state--state-op
|
|
|
352
352
|
signal: this._triggerAbortController.signal,
|
|
353
353
|
capture: !0
|
|
354
354
|
}), this.triggerElement.addEventListener("blur", (e) => {
|
|
355
|
-
this.contains(e.relatedTarget) || (this.autoSelectActiveOptionOnBlur && this.activeOption && this._lastUserInput && this.triggerElement?.value && (this.activeOption.selected = !0, this._setValueAndDispatchEvents(this.activeOption, !0)), this.requireSelection && this.triggerElement && this._lastUserInput != null && (Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, "value").set.call(this.triggerElement, ""), this._highlightOptions(""), this._isCustomChangeEvent = !0, this.triggerElement.dispatchEvent(new Event("change", { bubbles: !0 })), this.triggerElement.dispatchEvent(new InputEvent("input", {
|
|
355
|
+
this.contains(e.relatedTarget) || (this.autoSelectActiveOptionOnBlur && this.activeOption && this._lastUserInput && this.triggerElement?.value && (this.activeOption.selected = !0, this._setValueAndDispatchEvents(this.activeOption, !0)), this.requireSelection && this.triggerElement && this._lastUserInput != null && !this.pendingAutoSelectedOption && (Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, "value").set.call(this.triggerElement, ""), this._highlightOptions(""), this._isCustomChangeEvent = !0, this.triggerElement.dispatchEvent(new Event("change", { bubbles: !0 })), this.triggerElement.dispatchEvent(new InputEvent("input", {
|
|
356
356
|
bubbles: !0,
|
|
357
357
|
composed: !0
|
|
358
358
|
}))), this.close());
|
package/autocomplete.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as e } from "./autocomplete-base-element-
|
|
1
|
+
import { t as e } from "./autocomplete-base-element-65vWamdc.js";
|
|
2
2
|
import { SbbAutocompleteElement as t } from "./autocomplete/autocomplete.component.js";
|
|
3
3
|
import "./autocomplete.pure.js";
|
|
4
4
|
//#region src/elements/autocomplete.ts
|
package/autocomplete.pure.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { t as e } from "./autocomplete-base-element-
|
|
1
|
+
import { t as e } from "./autocomplete-base-element-65vWamdc.js";
|
|
2
2
|
import { SbbAutocompleteElement as t } from "./autocomplete/autocomplete.component.js";
|
|
3
3
|
export { e as SbbAutocompleteBaseElement, t as SbbAutocompleteElement };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autocomplete-base-element.d.ts","sourceRoot":"","sources":["../../../../src/elements/autocomplete/autocomplete-base-element.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"autocomplete-base-element.d.ts","sourceRoot":"","sources":["../../../../src/elements/autocomplete/autocomplete-base-element.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as SbbAutocompleteBaseElement } from "../autocomplete-base-element-
|
|
1
|
+
import { t as SbbAutocompleteBaseElement } from "../autocomplete-base-element-BHYleZ3J.js";
|
|
2
2
|
export { SbbAutocompleteBaseElement };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as SbbAutocompleteBaseElement } from "../autocomplete-base-element-
|
|
1
|
+
import { t as SbbAutocompleteBaseElement } from "../autocomplete-base-element-BHYleZ3J.js";
|
|
2
2
|
import { getNextElementIndex, isSafari, setAriaComboBoxAttributes } from "../core.js";
|
|
3
3
|
//#region src/elements/autocomplete/autocomplete.component.ts
|
|
4
4
|
var nextId = 0;
|
package/development/{autocomplete-base-element-DZx53PO1.js → autocomplete-base-element-BHYleZ3J.js}
RENAMED
|
@@ -579,7 +579,7 @@ var SbbAutocompleteBaseElement = (() => {
|
|
|
579
579
|
this.activeOption.selected = true;
|
|
580
580
|
this._setValueAndDispatchEvents(this.activeOption, true);
|
|
581
581
|
}
|
|
582
|
-
if (this.requireSelection && this.triggerElement && this._lastUserInput != null) {
|
|
582
|
+
if (this.requireSelection && this.triggerElement && this._lastUserInput != null && !this.pendingAutoSelectedOption) {
|
|
583
583
|
Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, "value").set.call(this.triggerElement, "");
|
|
584
584
|
this._highlightOptions("");
|
|
585
585
|
this._isCustomChangeEvent = true;
|
|
@@ -680,4 +680,4 @@ var SbbAutocompleteBaseElement = (() => {
|
|
|
680
680
|
//#endregion
|
|
681
681
|
export { SbbAutocompleteBaseElement as t };
|
|
682
682
|
|
|
683
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLWJhc2UtZWxlbWVudC1EWng1M1BPMS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS1iYXNlLWVsZW1lbnQuc2Nzcz9pbmxpbmUiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS1iYXNlLWVsZW1lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnLi4vY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuOmhvc3Qge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG46aG9zdCg6aXMoOnN0YXRlKHN0YXRlLW9wZW5pbmcpLCA6c3RhdGUoc3RhdGUtb3BlbmVkKSwgOnN0YXRlKHN0YXRlLWNsb3NpbmcpKSkge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbiIsImltcG9ydCB7IFJlc2l6ZUNvbnRyb2xsZXIgfSBmcm9tICdAbGl0LWxhYnMvb2JzZXJ2ZXJzL3Jlc2l6ZS1jb250cm9sbGVyLmpzJztcbmltcG9ydCB7XG4gIHR5cGUgQ1NTUmVzdWx0R3JvdXAsXG4gIGh0bWwsXG4gIGlzU2VydmVyLFxuICBub3RoaW5nLFxuICB0eXBlIFByb3BlcnR5RGVjbGFyYXRpb24sXG4gIHR5cGUgUHJvcGVydHlWYWx1ZXMsXG4gIHR5cGUgVGVtcGxhdGVSZXN1bHQsXG4gIHVuc2FmZUNTUyxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcmVmIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVmLmpzJztcblxuaW1wb3J0IHtcbiAgZm9yY2VUeXBlLFxuICBpZFJlZmVyZW5jZSxcbiAgaXNFdmVudE9uRWxlbWVudCxcbiAgaXNMZWFuLFxuICBpc1NhZmFyaSxcbiAgaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24sXG4gIG9wdGlvblBhbmVsU3R5bGVzLFxuICByZW1vdmVBcmlhQ29tYm9Cb3hBdHRyaWJ1dGVzLFxuICBTYmJFc2NhcGFibGVPdmVybGF5Q29udHJvbGxlcixcbiAgU2JiTmVnYXRpdmVNaXhpbixcbiAgU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQsXG4gIFNiYlByb3BlcnR5V2F0Y2hlckNvbnRyb2xsZXIsXG4gIHNjcm9sbGJhclN0eWxlcyxcbiAgc2V0T3ZlcmxheVBvc2l0aW9uLFxufSBmcm9tICcuLi9jb3JlLnRzJztcbmltcG9ydCB0eXBlIHsgU2JiRm9ybUZpZWxkRWxlbWVudCB9IGZyb20gJy4uL2Zvcm0tZmllbGQvZm9ybS1maWVsZC9mb3JtLWZpZWxkLmNvbXBvbmVudC50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYk9wdGlvbkJhc2VFbGVtZW50IH0gZnJvbSAnLi4vb3B0aW9uLnB1cmUudHMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9hdXRvY29tcGxldGUtYmFzZS1lbGVtZW50LnNjc3M/aW5saW5lJztcblxuLyoqXG4gKiBPbiBTYWZhcmksIHRoZSBhcmlhIHJvbGUgJ2xpc3Rib3gnIG11c3QgYmUgb24gdGhlIGhvc3QgZWxlbWVudCwgb3IgZWxzZSBWb2ljZU92ZXIgd29uJ3Qgd29yayBhdCBhbGwuXG4gKiBPbiB0aGUgb3RoZXIgaGFuZCwgSkFXUyBhbmQgTlZEQSBuZWVkIHRoZSByb2xlIHRvIGJlIFwiY2xvc2VyXCIgdG8gdGhlIG9wdGlvbnMsIG9yIGVsc2Ugb3B0Z3JvdXBzIHdvbid0IHdvcmsuXG4gKi9cbmNvbnN0IGFyaWFSb2xlT25Ib3N0ID0gaXNTYWZhcmk7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYXV0b2NvbXBsZXRlIGNvbXBvbmVudHMuXG4gKlxuICogQGV2ZW50IHtFdmVudH0gY2hhbmdlIC0gVGhlIGNoYW5nZSBldmVudCBpcyBmaXJlZCBvbiB0aGUgYXV0b2NvbXBsZXRlJ3MgdHJpZ2dlciB3aGVuIHRoZSB1c2VyIG1vZGlmaWVzIHRoZSBlbGVtZW50J3MgdmFsdWUuIFVubGlrZSB0aGUgaW5wdXQgZXZlbnQsIHRoZSBjaGFuZ2UgZXZlbnQgaXMgbm90IG5lY2Vzc2FyaWx5IGZpcmVkIGZvciBlYWNoIGFsdGVyYXRpb24gdG8gYW4gZWxlbWVudCdzIHZhbHVlLlxuICogQGV2ZW50IHtJbnB1dEV2ZW50fSBpbnB1dCAtIFRoZSBpbnB1dCBldmVudCBmaXJlcyAgb24gdGhlIGF1dG9jb21wbGV0ZSdzIHRyaWdnZXIgd2hlbiB0aGUgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCBhcyBhIGRpcmVjdCByZXN1bHQgb2YgYSB1c2VyIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNiYkF1dG9jb21wbGV0ZUJhc2VFbGVtZW50PFQgPSBzdHJpbmc+IGV4dGVuZHMgU2JiTmVnYXRpdmVNaXhpbihcbiAgU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQsXG4pIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gW1xuICAgIHNjcm9sbGJhclN0eWxlcyxcbiAgICBvcHRpb25QYW5lbFN0eWxlcyxcbiAgICB1bnNhZmVDU1Moc3R5bGUpLFxuICBdO1xuXG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB3aGVyZSB0aGUgYXV0b2NvbXBsZXRlIHdpbGwgYXR0YWNoLlxuICAgKiBJZiBub3Qgc2V0LCBhcyBmYWxsYmFjayB0aGVyZSBhcmUgdHdvIGVsZW1lbnRzIHdoaWNoIGNhbiBhY3QgYXMgb3JpZ2luIHdpdGggZm9sbG93aW5nIHByaW9yaXR5IG9yZGVyOlxuICAgKiAxLiBgc2JiLWZvcm0tZmllbGRgIGlmIGl0IGlzIGFuIGFuY2VzdG9yLlxuICAgKiAyLiB0cmlnZ2VyIGVsZW1lbnQgaWYgc2V0LlxuICAgKlxuICAgKiBGb3IgYXR0cmlidXRlIHVzYWdlLCBwcm92aWRlIGFuIGlkIHJlZmVyZW5jZS5cbiAgICovXG4gIEBpZFJlZmVyZW5jZSgpXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBhY2Nlc3NvciBvcmlnaW46IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBlbGVtZW50IHRoYXQgd2lsbCB0cmlnZ2VyIHRoZSBhdXRvY29tcGxldGUgb3BlbmluZy5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGF1dG9jb21wbGV0ZSB3aWxsIG9wZW4gb24gZm9jdXMsIGNsaWNrLCBpbnB1dCBvciBgQXJyb3dEb3duYCBrZXlwcmVzcyBvZiB0aGUgJ3RyaWdnZXInIGVsZW1lbnQuXG4gICAqIElmIG5vdCBzZXQsIHdpbGwgc2VhcmNoIGZvciB0aGUgZmlyc3QgJ2lucHV0JyBjaGlsZCBvZiBhICdzYmItZm9ybS1maWVsZCcgYW5jZXN0b3IuXG4gICAqXG4gICAqIEZvciBhdHRyaWJ1dGUgdXNhZ2UsIHByb3ZpZGUgYW4gaWQgcmVmZXJlbmNlLlxuICAgKi9cbiAgQGlkUmVmZXJlbmNlKClcbiAgQHByb3BlcnR5KClcbiAgcHVibGljIGFjY2Vzc29yIHRyaWdnZXI6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAvKiogV2hldGhlciB0aGUgaWNvbiBzcGFjZSBpcyBwcmVzZXJ2ZWQgd2hlbiBubyBpY29uIGlzIHNldC4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3ByZXNlcnZlLWljb24tc3BhY2UnLCByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBwcmVzZXJ2ZUljb25TcGFjZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBmaXJzdCBvcHRpb24gaXMgYXV0b21hdGljYWxseSBhY3RpdmF0ZWQgd2hlbiB0aGUgYXV0b2NvbXBsZXRlIGlzIG9wZW5lZC4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2F1dG8tYWN0aXZlLWZpcnN0LW9wdGlvbicsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGF1dG9BY3RpdmVGaXJzdE9wdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBGdW5jdGlvbiB0aGF0IG1hcHMgYW4gb3B0aW9uJ3MgY29udHJvbCB2YWx1ZSB0byBpdHMgZGlzcGxheSB2YWx1ZSBpbiB0aGUgdHJpZ2dlci4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiBmYWxzZSB9KVxuICBwdWJsaWMgYWNjZXNzb3IgZGlzcGxheVdpdGg6ICgodmFsdWU6IFQpID0+IHN0cmluZykgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogU2l6ZSB2YXJpYW50LCBlaXRoZXIgbSBvciBzLlxuICAgKiBAZGVmYXVsdCAnbScgLyAncycgKGxlYW4pXG4gICAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBhY2Nlc3NvciBzaXplOiAnbScgfCAncycgPSBpc0xlYW4oKSA/ICdzJyA6ICdtJztcblxuICAvKiogV2hldGhlciB0aGUgYWN0aXZlIG9wdGlvbiBzaG91bGQgYmUgc2VsZWN0ZWQgYXMgdGhlIHVzZXIgaXMgbmF2aWdhdGluZy4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2F1dG8tc2VsZWN0LWFjdGl2ZS1vcHRpb24nLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBhdXRvU2VsZWN0QWN0aXZlT3B0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoZW4gZW5hYmxlZCwgdGhlIGFjdGl2ZSBvcHRpb24gaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbiBibHVyLlxuICAgKiBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlLiBJdCBtaWdodCBiZSBzdWJqZWN0IHRvIGNoYW5nZXMuXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYXV0by1zZWxlY3QtYWN0aXZlLW9wdGlvbi1vbi1ibHVyJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbk9uQmx1cjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB1c2VyIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBzZWxlY3Rpb24gd2hlbiB0aGV5J3JlIGludGVyYWN0aW5nIHdpdGggdGhlXG4gICAqIGF1dG9jb21wbGV0ZS4gSWYgdGhlIHVzZXIgbW92ZXMgYXdheSBmcm9tIHRoZSBhdXRvY29tcGxldGUgd2l0aG91dCBzZWxlY3RpbmcgYW4gb3B0aW9uIGZyb21cbiAgICogdGhlIGxpc3QsIHRoZSB2YWx1ZSB3aWxsIGJlIHJlc2V0LiBJZiB0aGUgdXNlciBvcGVucyB0aGUgcGFuZWwgYW5kIGNsb3NlcyBpdCB3aXRob3V0XG4gICAqIGludGVyYWN0aW5nIG9yIHNlbGVjdGluZyBhIHZhbHVlLCB0aGUgaW5pdGlhbCB2YWx1ZSB3aWxsIGJlIGtlcHQuXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAncmVxdWlyZS1zZWxlY3Rpb24nLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciByZXF1aXJlU2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgYXV0b2NvbXBsZXRlIHBhbmVsIHJlbGF0aXZlIHRvIHRoZSB0cmlnZ2VyLlxuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBhY2Nlc3NvciBwb3NpdGlvbjogJ2F1dG8nIHwgJ2Fib3ZlJyB8ICdiZWxvdycgPSAnYXV0byc7XG5cbiAgLyoqIFJldHVybnMgdGhlIGVsZW1lbnQgd2hlcmUgdGhlIGF1dG9jb21wbGV0ZSBvdmVybGF5IGlzIGF0dGFjaGVkIHRvLiAqL1xuICBwdWJsaWMgZ2V0IG9yaWdpbkVsZW1lbnQoKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5vcmlnaW4gPz9cbiAgICAgIHRoaXMuY2xvc2VzdD8uKCdzYmItZm9ybS1maWVsZCcpPy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yPy4oJyNvdmVybGF5LWFuY2hvcicpID8/XG4gICAgICB0aGlzLnRyaWdnZXIgPz9cbiAgICAgIG51bGxcbiAgICApO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIHRyaWdnZXIgZWxlbWVudC4gKi9cbiAgcHVibGljIGdldCB0cmlnZ2VyRWxlbWVudCgpOiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RyaWdnZXJFbGVtZW50ID8/IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBfdHJpZ2dlckVsZW1lbnQ/OiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbDtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgb3ZlcmxheUlkOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwYW5lbFJvbGU6IHN0cmluZztcbiAgcHJvdGVjdGVkIGFjdGl2ZU9wdGlvbjogU2JiT3B0aW9uQmFzZUVsZW1lbnQ8VD4gfCBudWxsID0gbnVsbDtcbiAgcHJvdGVjdGVkIHBlbmRpbmdBdXRvU2VsZWN0ZWRPcHRpb246IFNiYk9wdGlvbkJhc2VFbGVtZW50PFQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3Jlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZUNvbnRyb2xsZXIodGhpcywge1xuICAgIHRhcmdldDogbnVsbCxcbiAgICBza2lwSW5pdGlhbDogdHJ1ZSxcbiAgICAvLyBUaGlzIGlzIGFuIElJRkUsIGJlY2F1c2Ugd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSB0aW1lb3V0IHN0YXRlXG4gICAgLy8gZm9yIGRlYm91bmNpbmcgdGhlIHJlc2l6ZSBjYWxsYmFja3MuXG4gICAgY2FsbGJhY2s6ICgoKSA9PiB7XG4gICAgICBsZXQgdGltZW91dElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ2Nsb3NlZCcpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTApO1xuICAgICAgfTtcbiAgICB9KSgpLFxuICB9KTtcbiAgLyoqIExpc3RlbnMgdG8gdGhlIGNoYW5nZXMgb24gdGhlIGBkaXNhYmxlZGAgb3IgYHJlYWRvbmx5YCBhdHRyaWJ1dGUgb2YgdGhlIHRyaWdnZXIuICovXG4gIHByaXZhdGUgX3RyaWdnZXJBdHRyaWJ1dGVPYnNlcnZlciA9ICFpc1NlcnZlclxuICAgID8gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9uczogTXV0YXRpb25SZWNvcmRbXSk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IG11dGF0aW9uc1swXS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgaWYgKGlucHV0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSB8fCBpbnB1dC5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgOiBudWxsO1xuICBwcml2YXRlIF9vdmVybGF5ITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3RyaWdnZXJBYm9ydENvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX2lzUG9pbnRlckRvd25FdmVudE9uTWVudTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9lc2NhcGFibGVPdmVybGF5Q29udHJvbGxlciA9IG5ldyBTYmJFc2NhcGFibGVPdmVybGF5Q29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfb3B0aW9uc0NvdW50ID0gMDtcbiAgcHJpdmF0ZSBfcHJldmlvdXNFbGVtZW50cz86IEVsZW1lbnRbXTtcblxuICAvKiogVHJhY2tzIGlucHV0IGZyb20ga2V5Ym9hcmQuICovXG4gIHByaXZhdGUgX2xhc3RVc2VySW5wdXQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBJZiB0cnVlLCB0aGUgJ2NoYW5nZScgZXZlbnQgc291cmNlIGlzIGFuIG9wdGlvbiBzZWxlY3Rpb24gb3IgYSAncmVxdWlyZVNlbGVjdGlvbicgZmllbGQgY2xlYW51cCAqL1xuICBwcml2YXRlIF9pc0N1c3RvbUNoYW5nZUV2ZW50ID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBvcHRpb25zKCk6IFNiYk9wdGlvbkJhc2VFbGVtZW50PFQ+W107XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ29wdGlvbnNlbGVjdGVkJywgKGU6IEV2ZW50KSA9PiB0aGlzLm9uT3B0aW9uU2VsZWN0ZWQoZSkpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCfJtW9wdGdyb3Vwc2xvdGNoYW5nZScsICgpID0+IHRoaXMuX2hhbmRsZVNsb3RjaGFuZ2UoKSwge1xuICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLmFkZENvbnRyb2xsZXIoXG4gICAgICBuZXcgU2JiUHJvcGVydHlXYXRjaGVyQ29udHJvbGxlcihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgKCkgPT4gdGhpcy5jbG9zZXN0PFNiYkZvcm1GaWVsZEVsZW1lbnQ+KCdzYmItZm9ybS1maWVsZCcpLFxuICAgICAgICB7XG4gICAgICAgICAgbmVnYXRpdmU6IChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5lZ2F0aXZlID0gZS5uZWdhdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuc3luY05lZ2F0aXZlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBib3JkZXJsZXNzOiAoZSkgPT4gdGhpcy50b2dnbGVTdGF0ZSgnb3B0aW9uLXBhbmVsLW9yaWdpbi1ib3JkZXJsZXNzJywgZS5ib3JkZXJsZXNzKSxcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBzeW5jTmVnYXRpdmUoKTogdm9pZDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHNldFRyaWdnZXJBdHRyaWJ1dGVzKGVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgb3BlbmVkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHNlbGVjdEJ5S2V5Ym9hcmQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudD86IEtleWJvYXJkRXZlbnQpOiB2b2lkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVzZXRBY3RpdmVFbGVtZW50KCk6IHZvaWQ7XG5cbiAgLyoqIE9wZW5zIHRoZSBhdXRvY29tcGxldGUuICovXG4gIHB1YmxpYyBvcGVuKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJyB8fFxuICAgICAgdGhpcy5zdGF0ZSA9PT0gJ29wZW5lZCcgfHxcbiAgICAgICF0aGlzLl9vdmVybGF5IHx8XG4gICAgICB0aGlzLm9wdGlvbnMubGVuZ3RoID09PSAwIHx8XG4gICAgICB0aGlzLl9yZWFkb25seSgpIHx8XG4gICAgICAhdGhpcy5kaXNwYXRjaEJlZm9yZU9wZW5FdmVudCgpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaG93UG9wb3Zlcj8uKCk7XG4gICAgdGhpcy5zdGF0ZSA9ICdvcGVuaW5nJztcbiAgICB0aGlzLnRyaWdnZXJFbGVtZW50Py50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtZXhwYW5kZWQnLCB0cnVlKTtcbiAgICBjb25zdCBvcmlnaW5FbGVtZW50ID0gdGhpcy5vcmlnaW5FbGVtZW50O1xuICAgIGlmICghb3JpZ2luRWxlbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ2Fubm90IGZpbmQgdGhlIG9yaWdpbiBlbGVtZW50LiBQbGVhc2Ugc3BlY2lmeSBhIHZhbGlkIGVsZW1lbnQgb3IgY2hlY2sgdGhlIHVzYWdlIG9mIHRoZSBcIm9yaWdpblwiIHByb3BlcnR5IGZyb20gdGhlIGRvY3VtZW50YXRpb24nLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fc2V0T3ZlcmxheVBvc2l0aW9uKG9yaWdpbkVsZW1lbnQpO1xuICAgIHRoaXMuX3NldE5leHRBY3RpdmVPcHRpb25JZkF1dG9BY3RpdmVGaXJzdE9wdGlvbigpO1xuICAgIHRoaXMuX2F0dGFjaE9wZW5QYW5lbEV2ZW50cygpO1xuICAgIHRoaXMuX2VzY2FwYWJsZU92ZXJsYXlDb250cm9sbGVyLmNvbm5lY3QoKTtcblxuICAgIC8vIElmIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaXMgemVybywgdGhlIGFuaW1hdGlvbmVuZCBldmVudCBpcyBub3QgYWx3YXlzIGZpcmVkIHJlbGlhYmx5LlxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBkaXJlY3RseSBzZXQgdGhlIGBvcGVuZWRgIHN0YXRlLlxuICAgIGlmICh0aGlzLl9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpKSB7XG4gICAgICB0aGlzLl9oYW5kbGVPcGVuaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENsb3NlcyB0aGUgYXV0b2NvbXBsZXRlLiAqL1xuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdjbG9zaW5nJyB8fCB0aGlzLnN0YXRlID09PSAnY2xvc2VkJyB8fCAhdGhpcy5kaXNwYXRjaEJlZm9yZUNsb3NlRXZlbnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEEgJ3BlbmRpbmcgc2VsZWN0aW9uJyBpcyBjb25maXJtZWQgb24gcGFuZWwgY2xvc2VcbiAgICBpZiAodGhpcy5wZW5kaW5nQXV0b1NlbGVjdGVkT3B0aW9uKSB7XG4gICAgICB0aGlzLnBlbmRpbmdBdXRvU2VsZWN0ZWRPcHRpb24uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fc2V0VmFsdWVBbmREaXNwYXRjaEV2ZW50cyh0aGlzLnBlbmRpbmdBdXRvU2VsZWN0ZWRPcHRpb24sIHRydWUpO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAnY2xvc2luZyc7XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWV4cGFuZGVkJyk7XG4gICAgdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5hYm9ydCgpO1xuICAgIGlmICh0aGlzLm9yaWdpbkVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZSh0aGlzLm9yaWdpbkVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaXMgemVybywgdGhlIGFuaW1hdGlvbmVuZCBldmVudCBpcyBub3QgYWx3YXlzIGZpcmVkIHJlbGlhYmx5LlxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBkaXJlY3RseSBzZXQgdGhlIGBjbG9zZWRgIHN0YXRlLlxuICAgIGlmICh0aGlzLl9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpKSB7XG4gICAgICB0aGlzLl9oYW5kbGVDbG9zaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKHRoaXMsICctLXNiYi1vcHRpb25zLXBhbmVsLWFuaW1hdGlvbi1kdXJhdGlvbicpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHRoaXMucG9wb3ZlciA9ICdtYW51YWwnO1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgaWYgKGFyaWFSb2xlT25Ib3N0KSB7XG4gICAgICB0aGlzLmlkIHx8PSB0aGlzLm92ZXJsYXlJZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICB0aGlzLl9jb21wb25lbnRTZXR1cCgpO1xuICAgIH1cbiAgICB0aGlzLnN5bmNOZWdhdGl2ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCduZWdhdGl2ZScpKSB7XG4gICAgICB0aGlzLnN5bmNOZWdhdGl2ZSgpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2F1dG9BY3RpdmVGaXJzdE9wdGlvbicpICYmIHRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uSWZBdXRvQWN0aXZlRmlyc3RPcHRpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG4gICAgdGhpcy5fY29tcG9uZW50U2V0dXAoKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50ID0gbnVsbDtcbiAgICB0aGlzLl90cmlnZ2VyQWJvcnRDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXI/LmFib3J0KCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgcmVxdWVzdFVwZGF0ZShcbiAgICBuYW1lPzogUHJvcGVydHlLZXksXG4gICAgb2xkVmFsdWU/OiB1bmtub3duLFxuICAgIG9wdGlvbnM/OiBQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICApOiB2b2lkIHtcbiAgICBzdXBlci5yZXF1ZXN0VXBkYXRlKG5hbWUsIG9sZFZhbHVlLCBvcHRpb25zKTtcblxuICAgIGlmIChpc1NlcnZlciB8fCAhdGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghbmFtZSB8fCBuYW1lID09PSAndHJpZ2dlcicpIHtcbiAgICAgIHRoaXMuX2NvbmZpZ3VyZVRyaWdnZXIoKTtcbiAgICB9IGVsc2UgaWYgKCghbmFtZSB8fCBuYW1lID09PSAnb3JpZ2luJykgJiYgdGhpcy5pc09wZW4pIHtcbiAgICAgIHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBXaGVuIGFuIG9wdGlvbiBpcyBzZWxlY3RlZCwgdXBkYXRlIHRoZSBpbnB1dCB2YWx1ZSBhbmQgY2xvc2UgdGhlIGF1dG9jb21wbGV0ZS4gKi9cbiAgcHJvdGVjdGVkIG9uT3B0aW9uU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIFNiYk9wdGlvbkJhc2VFbGVtZW50PFQ+O1xuICAgIHRoaXMuX3NldFZhbHVlQW5kRGlzcGF0Y2hFdmVudHModGFyZ2V0KTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgKi9cbiAgcHJvdGVjdGVkIG9uT3B0aW9uQXJyb3dzU2VsZWN0ZWQoX2FjdGl2ZU9wdGlvbjogU2JiT3B0aW9uQmFzZUVsZW1lbnQ8VD4pOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIEEgJ3BlbmRpbmcgc2VsZWN0aW9uJyBzZXRzIHRoZSBvcHRpb24gdmFsdWUgaW4gdGhlIGlucHV0IGVsZW1lbnQgd2l0aG91dCBlbWl0dGluZyBldmVudHMuXG4gICAqIEEgJ3BlbmRpbmcgc2VsZWN0aW9uJyBpcyBjb25maXJtZWQgd2hlbiB0aGUgcGFuZWwgY2xvc2VzLiBBbnkgb3RoZXIgdXNlciBpbnRlcmFjdGlvblxuICAgKiB3aWxsIHJlc2V0IHRoZSBwZW5kaW5nIHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldFBlbmRpbmdTZWxlY3Rpb24oYWN0aXZlT3B0aW9uOiBTYmJPcHRpb25CYXNlRWxlbWVudDxUPik6IHZvaWQge1xuICAgIHRoaXMucGVuZGluZ0F1dG9TZWxlY3RlZE9wdGlvbiA9IGFjdGl2ZU9wdGlvbjtcbiAgICB0aGlzLl9zZXRJbnB1dFZhbHVlKGFjdGl2ZU9wdGlvbik7XG4gIH1cblxuICBwcml2YXRlIF9zZXRWYWx1ZUFuZERpc3BhdGNoRXZlbnRzKFxuICAgIHNlbGVjdGVkT3B0aW9uOiBTYmJPcHRpb25CYXNlRWxlbWVudDxUPixcbiAgICBwcmV2ZW50Rm9jdXMgPSBmYWxzZSxcbiAgKTogdm9pZCB7XG4gICAgLy8gRGVzZWxlY3QgdGhlIHByZXZpb3VzIG9wdGlvbnNcbiAgICB0aGlzLm9wdGlvbnNcbiAgICAgIC5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLmlkICE9PSBzZWxlY3RlZE9wdGlvbi5pZCAmJiBvcHRpb24uc2VsZWN0ZWQpXG4gICAgICAuZm9yRWFjaCgob3B0aW9uKSA9PiAob3B0aW9uLnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICB0aGlzLnBlbmRpbmdBdXRvU2VsZWN0ZWRPcHRpb24gPSBudWxsO1xuXG4gICAgaWYgKHRoaXMudHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX3NldElucHV0VmFsdWUoc2VsZWN0ZWRPcHRpb24pO1xuXG4gICAgICAvLyBNYW51YWxseSB0cmlnZ2VyIHRoZSBjaGFuZ2UgZXZlbnRzXG4gICAgICB0aGlzLl9pc0N1c3RvbUNoYW5nZUV2ZW50ID0gdHJ1ZTtcbiAgICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgICB0aGlzLnRyaWdnZXJFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSk7XG5cbiAgICAgIC8vIERpc3BhdGNoaW5nIHRoZSBpbnB1dCBldmVudCBjaGFuZ2VzIF9sYXN0SW5wdXQsIHdoaWNoIHNob3VsZCBzdGF5IGVtcHR5IHNpbmNlIHRoZXJlJ3Mgbm8ga2V5Ym9hcmQgaW50ZXJhY3Rpb24uXG4gICAgICB0aGlzLl9sYXN0VXNlcklucHV0ID0gbnVsbDtcblxuICAgICAgLy8gQ3VzdG9tIGlucHV0IGV2ZW50IGVtaXR0ZWQgd2hlbiBpbnB1dCB2YWx1ZSBjaGFuZ2VzIGFmdGVyIGFuIG9wdGlvbiBpcyBzZWxlY3RlZFxuICAgICAgdGhpcy50cmlnZ2VyRWxlbWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQ8eyBvcHRpb246IFNiYk9wdGlvbkJhc2VFbGVtZW50PFQ+IH0+KCdpbnB1dEF1dG9jb21wbGV0ZScsIHtcbiAgICAgICAgICBkZXRhaWw6IHsgb3B0aW9uOiBzZWxlY3RlZE9wdGlvbiB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBpZiAoIXByZXZlbnRGb2N1cykge1xuICAgICAgICB0aGlzLnRyaWdnZXJFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIFNldCB0aGUgb3B0aW9uIHZhbHVlIHdpdGhpbiB0aGUgaW5wdXQgZWxlbWVudCAqL1xuICBwcml2YXRlIF9zZXRJbnB1dFZhbHVlKG9wdGlvbjogU2JiT3B0aW9uQmFzZUVsZW1lbnQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHaXZlbiBhIHZhbHVlLCByZXR1cm5zIHRoZSBzdHJpbmcgdGhhdCBzaG91bGQgYmUgc2hvd24gd2l0aGluIHRoZSBpbnB1dC5cbiAgICBjb25zdCB0b0Rpc3BsYXkgPSB0aGlzLmRpc3BsYXlXaXRoPy4ob3B0aW9uLnZhbHVlIGFzIFQpID8/IG9wdGlvbi52YWx1ZTtcblxuICAgIC8vIFNldCB0aGUgb3B0aW9uIHZhbHVlXG4gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCBSZWFjdCBvbkNoYW5nZSBldmVudCwgd2UgaGF2ZSB0byBnZXQgdGhlIHNldHRlciBhbmQgY2FsbCBpdC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzExNjAwI2lzc3VlY29tbWVudC0zNDU4MTMxMzBcbiAgICBjb25zdCBzZXRWYWx1ZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsICd2YWx1ZScpIS5zZXQhO1xuICAgIHNldFZhbHVlLmNhbGwodGhpcy50cmlnZ2VyRWxlbWVudCwgdG9EaXNwbGF5KTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVNsb3RjaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5faGlnaGxpZ2h0T3B0aW9ucyh0aGlzLnRyaWdnZXJFbGVtZW50Py52YWx1ZSk7XG5cbiAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IGFuIGVsZW1lbnQgaXMgYWRkZWQgdGhhdCBoYXMgbm90IGJlZW4gcmVuZGVyZWRcbiAgICAvLyB5ZXQgYW5kIHRoZXJlZm9yZSBoYXMgaGVpZ2h0IDAuIFRoZXJlZm9yZSwgd2UgYWxzbyBvYnNlcnZlIHRoZSBzaXplXG4gICAgLy8gb2YgYWxsIGNoaWxkIGVsZW1lbnRzLlxuICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50cyA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCcqJykpO1xuICAgIHRoaXMuX3ByZXZpb3VzRWxlbWVudHM/LmZvckVhY2goKGUpID0+IHRoaXMuX3Jlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZShlKSk7XG4gICAgdGhpcy5fcHJldmlvdXNFbGVtZW50cyA9IGN1cnJlbnRFbGVtZW50cztcbiAgICB0aGlzLl9wcmV2aW91c0VsZW1lbnRzLmZvckVhY2goKGUpID0+IHRoaXMuX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoZSkpO1xuXG4gICAgLyoqXG4gICAgICogSXQncyBwb3NzaWJsZSB0byBmaWx0ZXIgb3V0IG9wdGlvbnMgd2l0aCBhbiBvcGVuZWQgcGFuZWwgb24gaW5wdXQgY2hhbmdlLlxuICAgICAqIEluIHRoaXMgY2FzZSwgdGhlIHBhbmVsJ3MgcG9zaXRpb24gbXVzdCBiZSByZWNhbGN1bGF0ZWQgY29uc2lkZXJpbmcgdGhlIG5ldyBvcHRpb24ncyBsaXN0LlxuICAgICAqL1xuICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5fc2V0T3ZlcmxheVBvc2l0aW9uKCk7XG4gICAgICB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uSWZBdXRvQWN0aXZlRmlyc3RPcHRpb24oKTtcblxuICAgICAgLy8gSWYgdGhlIGF1dG9jb21wbGV0ZSBpcyBvcGVuIGFuZCB0aGUgb3B0aW9uIGNvdW50IGdldHMgdG8gemVybywgd2UgY2xvc2UgdGhlIGF1dG9jb21wbGV0ZS5cbiAgICAgIGlmICh0aGlzLl9vcHRpb25zQ291bnQgPiAwICYmIHRoaXMub3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICAvLyBJZiB0aGUgJ2lucHV0JyBpcyBmb2N1c2VkIGFuZCB0aGUgY291bnQgb2Ygb3B0aW9ucyBjaGFuZ2VzIGZyb20gMCB0byA+IDAsXG4gICAgICAvLyB0aGUgYXV0b2NvbXBsZXRlIHNob3VsZCBvcGVuIGF1dG9tYXRpY2FsbHkuXG4gICAgICBkb2N1bWVudD8uYWN0aXZlRWxlbWVudCA9PT0gdGhpcy50cmlnZ2VyRWxlbWVudCAmJlxuICAgICAgdGhpcy5fb3B0aW9uc0NvdW50ID09PSAwICYmXG4gICAgICB0aGlzLm9wdGlvbnMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy5vcGVuKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fb3B0aW9uc0NvdW50ID0gdGhpcy5vcHRpb25zLmxlbmd0aDtcbiAgfVxuXG4gIHByaXZhdGUgX3NldE5leHRBY3RpdmVPcHRpb25JZkF1dG9BY3RpdmVGaXJzdE9wdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hdXRvQWN0aXZlRmlyc3RPcHRpb24pIHtcbiAgICAgIHRoaXMucmVzZXRBY3RpdmVFbGVtZW50KCk7XG4gICAgICB0aGlzLnNldE5leHRBY3RpdmVPcHRpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKiogVGhlIGF1dG9jb21wbGV0ZSBzaG91bGQgaW5oZXJpdCAncmVhZG9ubHknIHN0YXRlIGZyb20gdGhlIHRyaWdnZXIuICovXG4gIHByaXZhdGUgX3JlYWRvbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRyaWdnZXJFbGVtZW50Py5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykgPz8gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIF9jb21wb25lbnRTZXR1cCgpOiB2b2lkIHtcbiAgICBpZiAoaXNTZXJ2ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jb25maWd1cmVUcmlnZ2VyKCk7XG4gIH1cblxuICBwcml2YXRlIF9jb25maWd1cmVUcmlnZ2VyKCk6IHZvaWQge1xuICAgIGNvbnN0IHRyaWdnZXJFbGVtZW50ID0gKHRoaXMudHJpZ2dlciA/P1xuICAgICAgdGhpcy5jbG9zZXN0Py4oJ3NiYi1mb3JtLWZpZWxkJyk/LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykpIGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICh0cmlnZ2VyRWxlbWVudCA9PT0gdGhpcy50cmlnZ2VyRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RyaWdnZXJBYm9ydENvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgcmVtb3ZlQXJpYUNvbWJvQm94QXR0cmlidXRlcyh0aGlzLnRyaWdnZXJFbGVtZW50KTtcbiAgICB0aGlzLnRyaWdnZXJFbGVtZW50Py5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtZXhwYW5kZWQnKTtcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudCA9IHRyaWdnZXJFbGVtZW50O1xuXG4gICAgaWYgKCF0aGlzLnRyaWdnZXJFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQXMgdGhlIHRyaWdnZXIgY2FuIGJlIHRoZSBmYWxsYmFjayBvZiB0aGUgb3JpZ2luLCB3ZSBldmVudHVhbGx5IGhhdmUgdG8gdXBkYXRlIHRoZSBwb3NpdGlvbi5cbiAgICBjb25zdCBvcmlnaW5FbGVtZW50ID0gdGhpcy5vcmlnaW5FbGVtZW50O1xuICAgIGlmICh0aGlzLnRyaWdnZXJFbGVtZW50ID09PSBvcmlnaW5FbGVtZW50ICYmIHRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLl9zZXRPdmVybGF5UG9zaXRpb24ob3JpZ2luRWxlbWVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdHJpZ2dlckF0dHJpYnV0ZU9ic2VydmVyPy5vYnNlcnZlKHRoaXMudHJpZ2dlckVsZW1lbnQhLCB7XG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgYXR0cmlidXRlRmlsdGVyOiBbJ2Rpc2FibGVkJywgJ3JlYWRvbmx5J10sXG4gICAgfSk7XG5cbiAgICB0aGlzLnNldFRyaWdnZXJBdHRyaWJ1dGVzKHRoaXMudHJpZ2dlckVsZW1lbnQpO1xuICAgIHRoaXMuX3RyaWdnZXJBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICAvLyBPcGVuIHRoZSBvdmVybGF5IG9uIGZvY3VzLCBjbGljaywgaW5wdXQgYW5kIGBBcnJvd0Rvd25gIGV2ZW50XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsICgpID0+IHRoaXMub3BlbigpLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX3RyaWdnZXJBYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB0aGlzLm9wZW4oKSwge1xuICAgICAgc2lnbmFsOiB0aGlzLl90cmlnZ2VyQWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICB0aGlzLnRyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAnaW5wdXQnLFxuICAgICAgKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlOiBzdHJpbmcgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuXG4gICAgICAgIC8vIERvIG5vdCBvcGVuIGlmIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQgdmlhIGRpc3BhdGNoRXZlbnQgKGUuZy4gY2xpY2sgb24gdGltZXRhYmxlLXN3YXAtYnV0dG9uKVxuICAgICAgICBpZiAodmFsdWUgJiYgZXZlbnQuaXNUcnVzdGVkKSB7XG4gICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faGlnaGxpZ2h0T3B0aW9ucyh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX2xhc3RVc2VySW5wdXQgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5wZW5kaW5nQXV0b1NlbGVjdGVkT3B0aW9uID0gbnVsbDtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogdGhpcy5fdHJpZ2dlckFib3J0Q29udHJvbGxlci5zaWduYWwgfSxcbiAgICApO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdjaGFuZ2UnLFxuICAgICAgKGV2ZW50KSA9PiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbiAncmVxdWlyZVNlbGVjdGlvbicgbW9kZSwgd2UgYmxvY2sgdGhlIG5hdGl2ZSBjaGFuZ2UgZXZlbnRzIGFuZFxuICAgICAgICAgKiBsZXQgb25seSBwYXNzIHRoZSBvbmVzIHRoYXQgY29tZSB3aXRoIGEgdmFsaWQgdmFsdWUgKHdoZW4gYW4gb3B0aW9uIGlzIHNlbGVjdGVkKVxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZVNlbGVjdGlvbiAmJiAhdGhpcy5faXNDdXN0b21DaGFuZ2VFdmVudCkge1xuICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzQ3VzdG9tQ2hhbmdlRXZlbnQgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogdGhpcy5fdHJpZ2dlckFib3J0Q29udHJvbGxlci5zaWduYWwsIGNhcHR1cmU6IHRydWUgfSxcbiAgICApO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdrZXlkb3duJyxcbiAgICAgIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5fY2xvc2VkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50KSxcbiAgICAgIHtcbiAgICAgICAgc2lnbmFsOiB0aGlzLl90cmlnZ2VyQWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgLy8gV2UgbmVlZCBrZXkgZXZlbnQgdG8gcnVuIGJlZm9yZSBhbnkgb3RoZXIgc3Vic2NyaXB0aW9uIHRvIGd1YXJhbnRlZSBhIGNvcnJlY3RcbiAgICAgICAgLy8gaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBjb21wb25lbnRzIChuZWNlc3NhcnkgZm9yIHRoZSAnc2JiLWNoaXAtZ3JvdXAnIHVzZSBjYXNlKS5cbiAgICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdibHVyJyxcbiAgICAgIChlKSA9PiB7XG4gICAgICAgIC8vIElmIHRoZSBuZXcgZm9jdXMgaXMgdGhlIGF1dG9jb21wbGV0ZSBvciBpbnNpZGUgb2YgaXQgdGhlbiBhbiBvcHRpb25cbiAgICAgICAgLy8gd2FzIHNlbGVjdGVkLiBUaGVyZWZvcmUsIHRoZSBmb2N1cyBpcyBzdGlsbCBvbiB0aGUgY29tcG9uZW50LlxuICAgICAgICBpZiAodGhpcy5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQgYXMgTm9kZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiAnYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbk9uQmx1cicgaXMgZW5hYmxlZCwgc2VsZWN0IHRoZSBhY3RpdmUgb3B0aW9uIG9uIGJsdXJcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbk9uQmx1ciAmJlxuICAgICAgICAgIHRoaXMuYWN0aXZlT3B0aW9uICYmXG4gICAgICAgICAgdGhpcy5fbGFzdFVzZXJJbnB1dCAmJlxuICAgICAgICAgIHRoaXMudHJpZ2dlckVsZW1lbnQ/LnZhbHVlXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuYWN0aXZlT3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9zZXRWYWx1ZUFuZERpc3BhdGNoRXZlbnRzKHRoaXMuYWN0aXZlT3B0aW9uLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENsZWFycyB0aGUgaW5wdXQgaWYgdGhlcmUncyB1c2VyIGludGVyYWN0aW9uIHdpdGhvdXQgc2VsZWN0aW9uIChzZWxlY3Rpb24gY2xlYXJzIGBfbGFzdFVzZXJJbnB1dGApLlxuICAgICAgICBpZiAodGhpcy5yZXF1aXJlU2VsZWN0aW9uICYmIHRoaXMudHJpZ2dlckVsZW1lbnQgJiYgdGhpcy5fbGFzdFVzZXJJbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgY29uc3Qgc2V0VmFsdWUgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsXG4gICAgICAgICAgICAndmFsdWUnLFxuICAgICAgICAgICkhLnNldCE7XG4gICAgICAgICAgc2V0VmFsdWUuY2FsbCh0aGlzLnRyaWdnZXJFbGVtZW50LCAnJyk7XG4gICAgICAgICAgdGhpcy5faGlnaGxpZ2h0T3B0aW9ucygnJyk7XG4gICAgICAgICAgdGhpcy5faXNDdXN0b21DaGFuZ2VFdmVudCA9IHRydWU7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICAgICAgICB0aGlzLnRyaWdnZXJFbGVtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICBuZXcgSW5wdXRFdmVudCgnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9LFxuICAgICAgeyBzaWduYWw6IHRoaXMuX3RyaWdnZXJBYm9ydENvbnRyb2xsZXIuc2lnbmFsLCBjYXB0dXJlOiB0cnVlIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFNldCBvdmVybGF5IHBvc2l0aW9uLCB3aWR0aCBhbmQgbWF4IGhlaWdodFxuICBwcml2YXRlIF9zZXRPdmVybGF5UG9zaXRpb24ob3JpZ2luRWxlbWVudCA9IHRoaXMub3JpZ2luRWxlbWVudCk6IHZvaWQge1xuICAgIC8vIEFuIHVuZGVmaW5lZCBvcmlnaW5FbGVtZW50IHNob3VsZCBvbmx5IG9jY3VyIGluIHRoZSB1bmxpa2VseSBldmVudFxuICAgIC8vIHRoYXQgdGhlIGF1dG9jb21wbGV0ZSBsb3NlcyBpdHMgb3JpZ2luRWxlbWVudCBhbmQgdHJpZ2dlckVsZW1lbnQgZHVyaW5nIGFuIG9wZW4gc3RhdGUuXG4gICAgaWYgKCFvcmlnaW5FbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldE92ZXJsYXlQb3NpdGlvbihcbiAgICAgIHRoaXMuX292ZXJsYXksXG4gICAgICBvcmlnaW5FbGVtZW50LFxuICAgICAgdGhpcy5fb3ZlcmxheSxcbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcignLnNiYi1vcHRpb24tcGFuZWxfX292ZXJsYXktY29udGFpbmVyJykhLFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMucG9zaXRpb24sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbiBvcGVuL2Nsb3NlIGFuaW1hdGlvbiBlbmQuXG4gICAqIEluIHJhcmUgY2FzZXMgaXQgY2FuIGJlIHRoYXQgdGhlIGFuaW1hdGlvbkVuZCBldmVudCBpcyB0cmlnZ2VyZWQgdHdpY2UuXG4gICAqIFRvIGF2b2lkIGVudGVyaW5nIGEgY29ycnVwdCBzdGF0ZSwgZXhpdCB3aGVuIHN0YXRlIGlzIG5vdCBleHBlY3RlZC5cbiAgICovXG4gIHByaXZhdGUgX29uQW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnb3BlbicgJiYgdGhpcy5zdGF0ZSA9PT0gJ29wZW5pbmcnKSB7XG4gICAgICB0aGlzLl9oYW5kbGVPcGVuaW5nKCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnY2xvc2UnICYmIHRoaXMuc3RhdGUgPT09ICdjbG9zaW5nJykge1xuICAgICAgdGhpcy5faGFuZGxlQ2xvc2luZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZU9wZW5pbmcoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9ICdvcGVuZWQnO1xuICAgIGlmICh0aGlzLm9yaWdpbkVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5vcmlnaW5FbGVtZW50KTtcbiAgICB9XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudD8uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ3RydWUnKTtcbiAgICB0aGlzLmRpc3BhdGNoT3BlbkV2ZW50KCk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVDbG9zaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSAnY2xvc2VkJztcbiAgICB0aGlzLmhpZGVQb3BvdmVyPy4oKTtcbiAgICB0aGlzLnRyaWdnZXJFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcblxuICAgIHRoaXMucmVzZXRBY3RpdmVFbGVtZW50KCk7XG4gICAgdGhpcy5fb3ZlcmxheS5zY3JvbGxUb3AgPSAwO1xuICAgIHRoaXMuX2VzY2FwYWJsZU92ZXJsYXlDb250cm9sbGVyLmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLmRpc3BhdGNoQ2xvc2VFdmVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXR0YWNoT3BlblBhbmVsRXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICAvLyBSZWNhbGN1bGF0ZSB0aGUgb3ZlcmxheSBwb3NpdGlvbiBvbiBzY3JvbGwgYW5kIHdpbmRvdyByZXNpemVcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCAoKSA9PiB0aGlzLl9zZXRPdmVybGF5UG9zaXRpb24oKSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgICAvLyBXaXRob3V0IGNhcHR1cmUsIG90aGVyIHNjcm9sbCBjb250ZXh0cyB3b3VsZCBub3QgYnViYmxlIHRvIHRoaXMgZXZlbnQgbGlzdGVuZXIuXG4gICAgICAvLyBDYXB0dXJlIGFsbG93cyB1cyB0byByZWFjdCB0byBhbGwgc2Nyb2xsIGNvbnRleHRzIGluIHRoaXMgRE9NLlxuICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4gdGhpcy5fc2V0T3ZlcmxheVBvc2l0aW9uKCksIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgLy8gQ2xvc2UgYXV0b2NvbXBsZXRlIG9uIGJhY2tkcm9wIGNsaWNrXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKGV2KSA9PiB0aGlzLl9wb2ludGVyRG93bkxpc3RlbmVyKGV2KSwge1xuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgKGV2KSA9PiB0aGlzLl9jbG9zZU9uQmFja2Ryb3BDbGljayhldiksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAnybVkaXNhYmxlZGNoYW5nZScsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZU9wdGlvbj8uZGlzYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLnJlc2V0QWN0aXZlRWxlbWVudCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NldE5leHRBY3RpdmVPcHRpb25JZkF1dG9BY3RpdmVGaXJzdE9wdGlvbigpO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIEtleWJvYXJkIGludGVyYWN0aW9uc1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQ/LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAna2V5ZG93bicsXG4gICAgICAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHRoaXMub3BlbmVkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50KSxcbiAgICAgIHtcbiAgICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgLy8gV2UgbmVlZCBrZXkgZXZlbnQgdG8gcnVuIGJlZm9yZSBhbnkgb3RoZXIgc3Vic2NyaXB0aW9uIHRvIGd1YXJhbnRlZSBhIGNvcnJlY3RcbiAgICAgICAgLy8gaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBjb21wb25lbnRzIChuZWNlc3NhcnkgZm9yIHRoZSAnc2JiLWNoaXAtZ3JvdXAnIHVzZSBjYXNlKS5cbiAgICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBwb2ludGVyZG93biBldmVudCB0YXJnZXQgaXMgdHJpZ2dlcmVkIG9uIHRoZSBtZW51LlxuICBwcml2YXRlIF9wb2ludGVyRG93bkxpc3RlbmVyID0gKGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkID0+IHtcbiAgICB0aGlzLl9pc1BvaW50ZXJEb3duRXZlbnRPbk1lbnUgPSBpc0V2ZW50T25FbGVtZW50KHRoaXMuX292ZXJsYXksIGV2ZW50KTtcbiAgfTtcblxuICAvLyBJZiB0aGUgY2xpY2sgaXMgb3V0c2lkZSB0aGUgYXV0b2NvbXBsZXRlLCBjbG9zZXMgdGhlIHBhbmVsLlxuICBwcml2YXRlIF9jbG9zZU9uQmFja2Ryb3BDbGljayA9IChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuX2lzUG9pbnRlckRvd25FdmVudE9uTWVudSAmJlxuICAgICAgIWlzRXZlbnRPbkVsZW1lbnQodGhpcy5fb3ZlcmxheSwgZXZlbnQpICYmXG4gICAgICAhaXNFdmVudE9uRWxlbWVudCh0aGlzLm9yaWdpbkVsZW1lbnQsIGV2ZW50KVxuICAgICkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF9jbG9zZWRQYW5lbEtleWJvYXJkSW50ZXJhY3Rpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ29wZW5pbmcnIHx8IHRoaXMuc3RhdGUgPT09ICdvcGVuZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBIaWdobGlnaHQgdGhlIHNlYXJjaGVkIHRleHQgb24gdGhlIG9wdGlvbnMuICovXG4gIHByaXZhdGUgX2hpZ2hsaWdodE9wdGlvbnMoc2VhcmNoVGVybT86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChzZWFyY2hUZXJtID09PSBudWxsIHx8IHNlYXJjaFRlcm0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PiBvcHRpb24uaGlnaGxpZ2h0KHNlYXJjaFRlcm0pKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIC8vIFNjcm9sbCBhcmVhcyB3aXRob3V0IGNvbnRhaW5pbmcgYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHJlY2VpdmUgZm9jdXMgd2hlbiB0YWJiaW5nIHRocm91Z2ggdGhlIGRvY3VtZW50LlxuICAgIC8vIElmIHRoZXJlIGFyZSBhIGxvdCBvZiBvcHRpb25zIGFuZCB3aGVuIHByZXNzaW5nIHRhYiBrZXksIHRoZSBzY3JvbGwgYXJlYSBvbiBzYmItYXV0b2NvbXBsZXRlX19vcHRpb25zIGdldHMgZm9jdXMuXG4gICAgLy8gQXMgZWxlbWVudHMgaW5zaWRlIHRoZSBwYW5lbCBzaG91bGQgbmV2ZXIgZ2V0IGZvY3VzLCB3ZSBoYXZlIHRvIGF2b2lkIHRoYXQgYnkgc2V0dGluZyB0YWJpbmRleD0tMS5cbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItb3B0aW9uLXBhbmVsX19vdmVybGF5LWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJzYmItb3B0aW9uLXBhbmVsX19vdmVybGF5ICR7dGhpcy5uZWdhdGl2ZVxuICAgICAgICAgICAgPyAnc2JiLXNjcm9sbGJhci1uZWdhdGl2ZSdcbiAgICAgICAgICAgIDogJ3NiYi1zY3JvbGxiYXInfVwiXG4gICAgICAgICAgcm9sZT0keyFhcmlhUm9sZU9uSG9zdCA/IHRoaXMucGFuZWxSb2xlIDogbm90aGluZ31cbiAgICAgICAgICBpZD0keyFhcmlhUm9sZU9uSG9zdCA/IHRoaXMub3ZlcmxheUlkIDogbm90aGluZ31cbiAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICBAYW5pbWF0aW9uZW5kPSR7dGhpcy5fb25BbmltYXRpb25FbmR9XG4gICAgICAgICAgJHtyZWYoKG92ZXJsYXlSZWY/OiBFbGVtZW50KSA9PiAodGhpcy5fb3ZlcmxheSA9IG92ZXJsYXlSZWYgYXMgSFRNTEVsZW1lbnQpKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxzbG90IEBzbG90Y2hhbmdlPSR7dGhpcy5faGFuZGxlU2xvdGNoYW5nZX0+PC9zbG90PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRFdmVudE1hcCB7XG4gICAgaW5wdXRBdXRvY29tcGxldGU6IEN1c3RvbUV2ZW50PHsgb3B0aW9uOiBTYmJPcHRpb25CYXNlRWxlbWVudDxhbnk+IH0+O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FDdUNBLElBQU0saUJBQWlCOzs7Ozs7O0lBUUQsb0NBQTBCO21CQUFxQixpQkFDbkUsd0JBQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Y0FGcUIsbUNBQStDLFlBRXBFOzs7eUJBZUUsYUFBYSxFQUNiLFVBQVUsQ0FBQTswQkFVVixhQUFhLEVBQ2IsVUFBVSxDQUFBO29DQUlWLFdBQVcsRUFDWCxTQUFTO0lBQUUsV0FBVztJQUF1QixTQUFTO0lBQU0sTUFBTTtJQUFTLENBQUMsQ0FBQTt3Q0FJNUUsV0FBVyxFQUNYLFNBQVM7SUFBRSxXQUFXO0lBQTRCLE1BQU07SUFBUyxDQUFDLENBQUE7OEJBSWxFLFNBQVMsRUFBRSxXQUFXLE9BQU8sQ0FBQyxDQUFBO3VCQU85QixTQUFTLEVBQUUsU0FBUyxNQUFNLENBQUMsQ0FBQTt5Q0FHM0IsV0FBVyxFQUNYLFNBQVM7SUFBRSxXQUFXO0lBQTZCLE1BQU07SUFBUyxDQUFDLENBQUE7K0NBT25FLFdBQVcsRUFDWCxTQUFTO0lBQUUsV0FBVztJQUFxQyxNQUFNO0lBQVMsQ0FBQyxDQUFBO21DQVMzRSxXQUFXLEVBQ1gsU0FBUztJQUFFLFdBQVc7SUFBcUIsTUFBTTtJQUFTLENBQUMsQ0FBQTsyQkFPM0QsVUFBVSxDQUFBO0dBNURYLGFBQUEsTUFBQSxNQUFBLG9CQUFBO0lBQUEsTUFBQTtJQUFBLE1BQUE7SUFBQSxRQUFBO0lBQUEsU0FBQTtJQUFBLFFBQUE7S0FBQSxNQUFBLFFBQUEsWUFBQTtLQUFBLE1BQUEsUUFBQSxJQUFnQjtLQUFNLE1BQUEsS0FBQSxVQUFBO01BQUEsSUFBTixTQUFNOztLQUFBO0lBQUEsVUFBQTtJQUFBLEVBQUEsc0JBQUEsMEJBQUE7R0FXdEIsYUFBQSxNQUFBLE1BQUEscUJBQUE7SUFBQSxNQUFBO0lBQUEsTUFBQTtJQUFBLFFBQUE7SUFBQSxTQUFBO0lBQUEs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
|
|
683
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLWJhc2UtZWxlbWVudC1CSFlsZVozSi5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS1iYXNlLWVsZW1lbnQuc2Nzcz9pbmxpbmUiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvYXV0b2NvbXBsZXRlL2F1dG9jb21wbGV0ZS1iYXNlLWVsZW1lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnLi4vY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuOmhvc3Qge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG46aG9zdCg6aXMoOnN0YXRlKHN0YXRlLW9wZW5pbmcpLCA6c3RhdGUoc3RhdGUtb3BlbmVkKSwgOnN0YXRlKHN0YXRlLWNsb3NpbmcpKSkge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbiIsImltcG9ydCB7IFJlc2l6ZUNvbnRyb2xsZXIgfSBmcm9tICdAbGl0LWxhYnMvb2JzZXJ2ZXJzL3Jlc2l6ZS1jb250cm9sbGVyLmpzJztcbmltcG9ydCB7XG4gIHR5cGUgQ1NTUmVzdWx0R3JvdXAsXG4gIGh0bWwsXG4gIGlzU2VydmVyLFxuICBub3RoaW5nLFxuICB0eXBlIFByb3BlcnR5RGVjbGFyYXRpb24sXG4gIHR5cGUgUHJvcGVydHlWYWx1ZXMsXG4gIHR5cGUgVGVtcGxhdGVSZXN1bHQsXG4gIHVuc2FmZUNTUyxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcmVmIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVmLmpzJztcblxuaW1wb3J0IHtcbiAgZm9yY2VUeXBlLFxuICBpZFJlZmVyZW5jZSxcbiAgaXNFdmVudE9uRWxlbWVudCxcbiAgaXNMZWFuLFxuICBpc1NhZmFyaSxcbiAgaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24sXG4gIG9wdGlvblBhbmVsU3R5bGVzLFxuICByZW1vdmVBcmlhQ29tYm9Cb3hBdHRyaWJ1dGVzLFxuICBTYmJFc2NhcGFibGVPdmVybGF5Q29udHJvbGxlcixcbiAgU2JiTmVnYXRpdmVNaXhpbixcbiAgU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQsXG4gIFNiYlByb3BlcnR5V2F0Y2hlckNvbnRyb2xsZXIsXG4gIHNjcm9sbGJhclN0eWxlcyxcbiAgc2V0T3ZlcmxheVBvc2l0aW9uLFxufSBmcm9tICcuLi9jb3JlLnRzJztcbmltcG9ydCB0eXBlIHsgU2JiRm9ybUZpZWxkRWxlbWVudCB9IGZyb20gJy4uL2Zvcm0tZmllbGQvZm9ybS1maWVsZC9mb3JtLWZpZWxkLmNvbXBvbmVudC50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYk9wdGlvbkJhc2VFbGVtZW50IH0gZnJvbSAnLi4vb3B0aW9uLnB1cmUudHMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9hdXRvY29tcGxldGUtYmFzZS1lbGVtZW50LnNjc3M/aW5saW5lJztcblxuLyoqXG4gKiBPbiBTYWZhcmksIHRoZSBhcmlhIHJvbGUgJ2xpc3Rib3gnIG11c3QgYmUgb24gdGhlIGhvc3QgZWxlbWVudCwgb3IgZWxzZSBWb2ljZU92ZXIgd29uJ3Qgd29yayBhdCBhbGwuXG4gKiBPbiB0aGUgb3RoZXIgaGFuZCwgSkFXUyBhbmQgTlZEQSBuZWVkIHRoZSByb2xlIHRvIGJlIFwiY2xvc2VyXCIgdG8gdGhlIG9wdGlvbnMsIG9yIGVsc2Ugb3B0Z3JvdXBzIHdvbid0IHdvcmsuXG4gKi9cbmNvbnN0IGFyaWFSb2xlT25Ib3N0ID0gaXNTYWZhcmk7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYXV0b2NvbXBsZXRlIGNvbXBvbmVudHMuXG4gKlxuICogQGV2ZW50IHtFdmVudH0gY2hhbmdlIC0gVGhlIGNoYW5nZSBldmVudCBpcyBmaXJlZCBvbiB0aGUgYXV0b2NvbXBsZXRlJ3MgdHJpZ2dlciB3aGVuIHRoZSB1c2VyIG1vZGlmaWVzIHRoZSBlbGVtZW50J3MgdmFsdWUuIFVubGlrZSB0aGUgaW5wdXQgZXZlbnQsIHRoZSBjaGFuZ2UgZXZlbnQgaXMgbm90IG5lY2Vzc2FyaWx5IGZpcmVkIGZvciBlYWNoIGFsdGVyYXRpb24gdG8gYW4gZWxlbWVudCdzIHZhbHVlLlxuICogQGV2ZW50IHtJbnB1dEV2ZW50fSBpbnB1dCAtIFRoZSBpbnB1dCBldmVudCBmaXJlcyAgb24gdGhlIGF1dG9jb21wbGV0ZSdzIHRyaWdnZXIgd2hlbiB0aGUgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCBhcyBhIGRpcmVjdCByZXN1bHQgb2YgYSB1c2VyIGFjdGlvbi5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNiYkF1dG9jb21wbGV0ZUJhc2VFbGVtZW50PFQgPSBzdHJpbmc+IGV4dGVuZHMgU2JiTmVnYXRpdmVNaXhpbihcbiAgU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQsXG4pIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gW1xuICAgIHNjcm9sbGJhclN0eWxlcyxcbiAgICBvcHRpb25QYW5lbFN0eWxlcyxcbiAgICB1bnNhZmVDU1Moc3R5bGUpLFxuICBdO1xuXG4gIC8qKlxuICAgKiBUaGUgZWxlbWVudCB3aGVyZSB0aGUgYXV0b2NvbXBsZXRlIHdpbGwgYXR0YWNoLlxuICAgKiBJZiBub3Qgc2V0LCBhcyBmYWxsYmFjayB0aGVyZSBhcmUgdHdvIGVsZW1lbnRzIHdoaWNoIGNhbiBhY3QgYXMgb3JpZ2luIHdpdGggZm9sbG93aW5nIHByaW9yaXR5IG9yZGVyOlxuICAgKiAxLiBgc2JiLWZvcm0tZmllbGRgIGlmIGl0IGlzIGFuIGFuY2VzdG9yLlxuICAgKiAyLiB0cmlnZ2VyIGVsZW1lbnQgaWYgc2V0LlxuICAgKlxuICAgKiBGb3IgYXR0cmlidXRlIHVzYWdlLCBwcm92aWRlIGFuIGlkIHJlZmVyZW5jZS5cbiAgICovXG4gIEBpZFJlZmVyZW5jZSgpXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBhY2Nlc3NvciBvcmlnaW46IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnB1dCBlbGVtZW50IHRoYXQgd2lsbCB0cmlnZ2VyIHRoZSBhdXRvY29tcGxldGUgb3BlbmluZy5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGF1dG9jb21wbGV0ZSB3aWxsIG9wZW4gb24gZm9jdXMsIGNsaWNrLCBpbnB1dCBvciBgQXJyb3dEb3duYCBrZXlwcmVzcyBvZiB0aGUgJ3RyaWdnZXInIGVsZW1lbnQuXG4gICAqIElmIG5vdCBzZXQsIHdpbGwgc2VhcmNoIGZvciB0aGUgZmlyc3QgJ2lucHV0JyBjaGlsZCBvZiBhICdzYmItZm9ybS1maWVsZCcgYW5jZXN0b3IuXG4gICAqXG4gICAqIEZvciBhdHRyaWJ1dGUgdXNhZ2UsIHByb3ZpZGUgYW4gaWQgcmVmZXJlbmNlLlxuICAgKi9cbiAgQGlkUmVmZXJlbmNlKClcbiAgQHByb3BlcnR5KClcbiAgcHVibGljIGFjY2Vzc29yIHRyaWdnZXI6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAvKiogV2hldGhlciB0aGUgaWNvbiBzcGFjZSBpcyBwcmVzZXJ2ZWQgd2hlbiBubyBpY29uIGlzIHNldC4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3ByZXNlcnZlLWljb24tc3BhY2UnLCByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBwcmVzZXJ2ZUljb25TcGFjZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBmaXJzdCBvcHRpb24gaXMgYXV0b21hdGljYWxseSBhY3RpdmF0ZWQgd2hlbiB0aGUgYXV0b2NvbXBsZXRlIGlzIG9wZW5lZC4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2F1dG8tYWN0aXZlLWZpcnN0LW9wdGlvbicsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGF1dG9BY3RpdmVGaXJzdE9wdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBGdW5jdGlvbiB0aGF0IG1hcHMgYW4gb3B0aW9uJ3MgY29udHJvbCB2YWx1ZSB0byBpdHMgZGlzcGxheSB2YWx1ZSBpbiB0aGUgdHJpZ2dlci4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiBmYWxzZSB9KVxuICBwdWJsaWMgYWNjZXNzb3IgZGlzcGxheVdpdGg6ICgodmFsdWU6IFQpID0+IHN0cmluZykgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogU2l6ZSB2YXJpYW50LCBlaXRoZXIgbSBvciBzLlxuICAgKiBAZGVmYXVsdCAnbScgLyAncycgKGxlYW4pXG4gICAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBhY2Nlc3NvciBzaXplOiAnbScgfCAncycgPSBpc0xlYW4oKSA/ICdzJyA6ICdtJztcblxuICAvKiogV2hldGhlciB0aGUgYWN0aXZlIG9wdGlvbiBzaG91bGQgYmUgc2VsZWN0ZWQgYXMgdGhlIHVzZXIgaXMgbmF2aWdhdGluZy4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2F1dG8tc2VsZWN0LWFjdGl2ZS1vcHRpb24nLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBhdXRvU2VsZWN0QWN0aXZlT3B0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoZW4gZW5hYmxlZCwgdGhlIGFjdGl2ZSBvcHRpb24gaXMgYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbiBibHVyLlxuICAgKiBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBmZWF0dXJlLiBJdCBtaWdodCBiZSBzdWJqZWN0IHRvIGNoYW5nZXMuXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYXV0by1zZWxlY3QtYWN0aXZlLW9wdGlvbi1vbi1ibHVyJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbk9uQmx1cjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB1c2VyIGlzIHJlcXVpcmVkIHRvIG1ha2UgYSBzZWxlY3Rpb24gd2hlbiB0aGV5J3JlIGludGVyYWN0aW5nIHdpdGggdGhlXG4gICAqIGF1dG9jb21wbGV0ZS4gSWYgdGhlIHVzZXIgbW92ZXMgYXdheSBmcm9tIHRoZSBhdXRvY29tcGxldGUgd2l0aG91dCBzZWxlY3RpbmcgYW4gb3B0aW9uIGZyb21cbiAgICogdGhlIGxpc3QsIHRoZSB2YWx1ZSB3aWxsIGJlIHJlc2V0LiBJZiB0aGUgdXNlciBvcGVucyB0aGUgcGFuZWwgYW5kIGNsb3NlcyBpdCB3aXRob3V0XG4gICAqIGludGVyYWN0aW5nIG9yIHNlbGVjdGluZyBhIHZhbHVlLCB0aGUgaW5pdGlhbCB2YWx1ZSB3aWxsIGJlIGtlcHQuXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAncmVxdWlyZS1zZWxlY3Rpb24nLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciByZXF1aXJlU2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgYXV0b2NvbXBsZXRlIHBhbmVsIHJlbGF0aXZlIHRvIHRoZSB0cmlnZ2VyLlxuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBhY2Nlc3NvciBwb3NpdGlvbjogJ2F1dG8nIHwgJ2Fib3ZlJyB8ICdiZWxvdycgPSAnYXV0byc7XG5cbiAgLyoqIFJldHVybnMgdGhlIGVsZW1lbnQgd2hlcmUgdGhlIGF1dG9jb21wbGV0ZSBvdmVybGF5IGlzIGF0dGFjaGVkIHRvLiAqL1xuICBwdWJsaWMgZ2V0IG9yaWdpbkVsZW1lbnQoKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5vcmlnaW4gPz9cbiAgICAgIHRoaXMuY2xvc2VzdD8uKCdzYmItZm9ybS1maWVsZCcpPy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yPy4oJyNvdmVybGF5LWFuY2hvcicpID8/XG4gICAgICB0aGlzLnRyaWdnZXIgPz9cbiAgICAgIG51bGxcbiAgICApO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIHRyaWdnZXIgZWxlbWVudC4gKi9cbiAgcHVibGljIGdldCB0cmlnZ2VyRWxlbWVudCgpOiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RyaWdnZXJFbGVtZW50ID8/IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBfdHJpZ2dlckVsZW1lbnQ/OiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbDtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgb3ZlcmxheUlkOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwYW5lbFJvbGU6IHN0cmluZztcbiAgcHJvdGVjdGVkIGFjdGl2ZU9wdGlvbjogU2JiT3B0aW9uQmFzZUVsZW1lbnQ8VD4gfCBudWxsID0gbnVsbDtcbiAgcHJvdGVjdGVkIHBlbmRpbmdBdXRvU2VsZWN0ZWRPcHRpb246IFNiYk9wdGlvbkJhc2VFbGVtZW50PFQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3Jlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZUNvbnRyb2xsZXIodGhpcywge1xuICAgIHRhcmdldDogbnVsbCxcbiAgICBza2lwSW5pdGlhbDogdHJ1ZSxcbiAgICAvLyBUaGlzIGlzIGFuIElJRkUsIGJlY2F1c2Ugd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHRoZSB0aW1lb3V0IHN0YXRlXG4gICAgLy8gZm9yIGRlYm91bmNpbmcgdGhlIHJlc2l6ZSBjYWxsYmFja3MuXG4gICAgY2FsbGJhY2s6ICgoKSA9PiB7XG4gICAgICBsZXQgdGltZW91dElkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ2Nsb3NlZCcpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTApO1xuICAgICAgfTtcbiAgICB9KSgpLFxuICB9KTtcbiAgLyoqIExpc3RlbnMgdG8gdGhlIGNoYW5nZXMgb24gdGhlIGBkaXNhYmxlZGAgb3IgYHJlYWRvbmx5YCBhdHRyaWJ1dGUgb2YgdGhlIHRyaWdnZXIuICovXG4gIHByaXZhdGUgX3RyaWdnZXJBdHRyaWJ1dGVPYnNlcnZlciA9ICFpc1NlcnZlclxuICAgID8gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9uczogTXV0YXRpb25SZWNvcmRbXSk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IG11dGF0aW9uc1swXS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgaWYgKGlucHV0Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSB8fCBpbnB1dC5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgOiBudWxsO1xuICBwcml2YXRlIF9vdmVybGF5ITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX3RyaWdnZXJBYm9ydENvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX2lzUG9pbnRlckRvd25FdmVudE9uTWVudTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9lc2NhcGFibGVPdmVybGF5Q29udHJvbGxlciA9IG5ldyBTYmJFc2NhcGFibGVPdmVybGF5Q29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfb3B0aW9uc0NvdW50ID0gMDtcbiAgcHJpdmF0ZSBfcHJldmlvdXNFbGVtZW50cz86IEVsZW1lbnRbXTtcblxuICAvKiogVHJhY2tzIGlucHV0IGZyb20ga2V5Ym9hcmQuICovXG4gIHByaXZhdGUgX2xhc3RVc2VySW5wdXQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBJZiB0cnVlLCB0aGUgJ2NoYW5nZScgZXZlbnQgc291cmNlIGlzIGFuIG9wdGlvbiBzZWxlY3Rpb24gb3IgYSAncmVxdWlyZVNlbGVjdGlvbicgZmllbGQgY2xlYW51cCAqL1xuICBwcml2YXRlIF9pc0N1c3RvbUNoYW5nZUV2ZW50ID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldCBvcHRpb25zKCk6IFNiYk9wdGlvbkJhc2VFbGVtZW50PFQ+W107XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ29wdGlvbnNlbGVjdGVkJywgKGU6IEV2ZW50KSA9PiB0aGlzLm9uT3B0aW9uU2VsZWN0ZWQoZSkpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCfJtW9wdGdyb3Vwc2xvdGNoYW5nZScsICgpID0+IHRoaXMuX2hhbmRsZVNsb3RjaGFuZ2UoKSwge1xuICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLmFkZENvbnRyb2xsZXIoXG4gICAgICBuZXcgU2JiUHJvcGVydHlXYXRjaGVyQ29udHJvbGxlcihcbiAgICAgICAgdGhpcyxcbiAgICAgICAgKCkgPT4gdGhpcy5jbG9zZXN0PFNiYkZvcm1GaWVsZEVsZW1lbnQ+KCdzYmItZm9ybS1maWVsZCcpLFxuICAgICAgICB7XG4gICAgICAgICAgbmVnYXRpdmU6IChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5lZ2F0aXZlID0gZS5uZWdhdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuc3luY05lZ2F0aXZlKCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBib3JkZXJsZXNzOiAoZSkgPT4gdGhpcy50b2dnbGVTdGF0ZSgnb3B0aW9uLXBhbmVsLW9yaWdpbi1ib3JkZXJsZXNzJywgZS5ib3JkZXJsZXNzKSxcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBzeW5jTmVnYXRpdmUoKTogdm9pZDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHNldFRyaWdnZXJBdHRyaWJ1dGVzKGVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgb3BlbmVkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHNlbGVjdEJ5S2V5Ym9hcmQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3Qgc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudD86IEtleWJvYXJkRXZlbnQpOiB2b2lkO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVzZXRBY3RpdmVFbGVtZW50KCk6IHZvaWQ7XG5cbiAgLyoqIE9wZW5zIHRoZSBhdXRvY29tcGxldGUuICovXG4gIHB1YmxpYyBvcGVuKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJyB8fFxuICAgICAgdGhpcy5zdGF0ZSA9PT0gJ29wZW5lZCcgfHxcbiAgICAgICF0aGlzLl9vdmVybGF5IHx8XG4gICAgICB0aGlzLm9wdGlvbnMubGVuZ3RoID09PSAwIHx8XG4gICAgICB0aGlzLl9yZWFkb25seSgpIHx8XG4gICAgICAhdGhpcy5kaXNwYXRjaEJlZm9yZU9wZW5FdmVudCgpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zaG93UG9wb3Zlcj8uKCk7XG4gICAgdGhpcy5zdGF0ZSA9ICdvcGVuaW5nJztcbiAgICB0aGlzLnRyaWdnZXJFbGVtZW50Py50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtZXhwYW5kZWQnLCB0cnVlKTtcbiAgICBjb25zdCBvcmlnaW5FbGVtZW50ID0gdGhpcy5vcmlnaW5FbGVtZW50O1xuICAgIGlmICghb3JpZ2luRWxlbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnQ2Fubm90IGZpbmQgdGhlIG9yaWdpbiBlbGVtZW50LiBQbGVhc2Ugc3BlY2lmeSBhIHZhbGlkIGVsZW1lbnQgb3IgY2hlY2sgdGhlIHVzYWdlIG9mIHRoZSBcIm9yaWdpblwiIHByb3BlcnR5IGZyb20gdGhlIGRvY3VtZW50YXRpb24nLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5fc2V0T3ZlcmxheVBvc2l0aW9uKG9yaWdpbkVsZW1lbnQpO1xuICAgIHRoaXMuX3NldE5leHRBY3RpdmVPcHRpb25JZkF1dG9BY3RpdmVGaXJzdE9wdGlvbigpO1xuICAgIHRoaXMuX2F0dGFjaE9wZW5QYW5lbEV2ZW50cygpO1xuICAgIHRoaXMuX2VzY2FwYWJsZU92ZXJsYXlDb250cm9sbGVyLmNvbm5lY3QoKTtcblxuICAgIC8vIElmIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaXMgemVybywgdGhlIGFuaW1hdGlvbmVuZCBldmVudCBpcyBub3QgYWx3YXlzIGZpcmVkIHJlbGlhYmx5LlxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBkaXJlY3RseSBzZXQgdGhlIGBvcGVuZWRgIHN0YXRlLlxuICAgIGlmICh0aGlzLl9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpKSB7XG4gICAgICB0aGlzLl9oYW5kbGVPcGVuaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENsb3NlcyB0aGUgYXV0b2NvbXBsZXRlLiAqL1xuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdjbG9zaW5nJyB8fCB0aGlzLnN0YXRlID09PSAnY2xvc2VkJyB8fCAhdGhpcy5kaXNwYXRjaEJlZm9yZUNsb3NlRXZlbnQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEEgJ3BlbmRpbmcgc2VsZWN0aW9uJyBpcyBjb25maXJtZWQgb24gcGFuZWwgY2xvc2VcbiAgICBpZiAodGhpcy5wZW5kaW5nQXV0b1NlbGVjdGVkT3B0aW9uKSB7XG4gICAgICB0aGlzLnBlbmRpbmdBdXRvU2VsZWN0ZWRPcHRpb24uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fc2V0VmFsdWVBbmREaXNwYXRjaEV2ZW50cyh0aGlzLnBlbmRpbmdBdXRvU2VsZWN0ZWRPcHRpb24sIHRydWUpO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAnY2xvc2luZyc7XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudD8ucmVtb3ZlQXR0cmlidXRlKCdkYXRhLWV4cGFuZGVkJyk7XG4gICAgdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5hYm9ydCgpO1xuICAgIGlmICh0aGlzLm9yaWdpbkVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX3Jlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZSh0aGlzLm9yaWdpbkVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaXMgemVybywgdGhlIGFuaW1hdGlvbmVuZCBldmVudCBpcyBub3QgYWx3YXlzIGZpcmVkIHJlbGlhYmx5LlxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBkaXJlY3RseSBzZXQgdGhlIGBjbG9zZWRgIHN0YXRlLlxuICAgIGlmICh0aGlzLl9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpKSB7XG4gICAgICB0aGlzLl9oYW5kbGVDbG9zaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKHRoaXMsICctLXNiYi1vcHRpb25zLXBhbmVsLWFuaW1hdGlvbi1kdXJhdGlvbicpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHRoaXMucG9wb3ZlciA9ICdtYW51YWwnO1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgaWYgKGFyaWFSb2xlT25Ib3N0KSB7XG4gICAgICB0aGlzLmlkIHx8PSB0aGlzLm92ZXJsYXlJZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICB0aGlzLl9jb21wb25lbnRTZXR1cCgpO1xuICAgIH1cbiAgICB0aGlzLnN5bmNOZWdhdGl2ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCduZWdhdGl2ZScpKSB7XG4gICAgICB0aGlzLnN5bmNOZWdhdGl2ZSgpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2F1dG9BY3RpdmVGaXJzdE9wdGlvbicpICYmIHRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uSWZBdXRvQWN0aXZlRmlyc3RPcHRpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG4gICAgdGhpcy5fY29tcG9uZW50U2V0dXAoKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50ID0gbnVsbDtcbiAgICB0aGlzLl90cmlnZ2VyQWJvcnRDb250cm9sbGVyPy5hYm9ydCgpO1xuICAgIHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXI/LmFib3J0KCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgcmVxdWVzdFVwZGF0ZShcbiAgICBuYW1lPzogUHJvcGVydHlLZXksXG4gICAgb2xkVmFsdWU/OiB1bmtub3duLFxuICAgIG9wdGlvbnM/OiBQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICApOiB2b2lkIHtcbiAgICBzdXBlci5yZXF1ZXN0VXBkYXRlKG5hbWUsIG9sZFZhbHVlLCBvcHRpb25zKTtcblxuICAgIGlmIChpc1NlcnZlciB8fCAhdGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghbmFtZSB8fCBuYW1lID09PSAndHJpZ2dlcicpIHtcbiAgICAgIHRoaXMuX2NvbmZpZ3VyZVRyaWdnZXIoKTtcbiAgICB9IGVsc2UgaWYgKCghbmFtZSB8fCBuYW1lID09PSAnb3JpZ2luJykgJiYgdGhpcy5pc09wZW4pIHtcbiAgICAgIHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBXaGVuIGFuIG9wdGlvbiBpcyBzZWxlY3RlZCwgdXBkYXRlIHRoZSBpbnB1dCB2YWx1ZSBhbmQgY2xvc2UgdGhlIGF1dG9jb21wbGV0ZS4gKi9cbiAgcHJvdGVjdGVkIG9uT3B0aW9uU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIFNiYk9wdGlvbkJhc2VFbGVtZW50PFQ+O1xuICAgIHRoaXMuX3NldFZhbHVlQW5kRGlzcGF0Y2hFdmVudHModGFyZ2V0KTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgKi9cbiAgcHJvdGVjdGVkIG9uT3B0aW9uQXJyb3dzU2VsZWN0ZWQoX2FjdGl2ZU9wdGlvbjogU2JiT3B0aW9uQmFzZUVsZW1lbnQ8VD4pOiB2b2lkIHt9XG5cbiAgLyoqXG4gICAqIEEgJ3BlbmRpbmcgc2VsZWN0aW9uJyBzZXRzIHRoZSBvcHRpb24gdmFsdWUgaW4gdGhlIGlucHV0IGVsZW1lbnQgd2l0aG91dCBlbWl0dGluZyBldmVudHMuXG4gICAqIEEgJ3BlbmRpbmcgc2VsZWN0aW9uJyBpcyBjb25maXJtZWQgd2hlbiB0aGUgcGFuZWwgY2xvc2VzLiBBbnkgb3RoZXIgdXNlciBpbnRlcmFjdGlvblxuICAgKiB3aWxsIHJlc2V0IHRoZSBwZW5kaW5nIHZhbHVlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHNldFBlbmRpbmdTZWxlY3Rpb24oYWN0aXZlT3B0aW9uOiBTYmJPcHRpb25CYXNlRWxlbWVudDxUPik6IHZvaWQge1xuICAgIHRoaXMucGVuZGluZ0F1dG9TZWxlY3RlZE9wdGlvbiA9IGFjdGl2ZU9wdGlvbjtcbiAgICB0aGlzLl9zZXRJbnB1dFZhbHVlKGFjdGl2ZU9wdGlvbik7XG4gIH1cblxuICBwcml2YXRlIF9zZXRWYWx1ZUFuZERpc3BhdGNoRXZlbnRzKFxuICAgIHNlbGVjdGVkT3B0aW9uOiBTYmJPcHRpb25CYXNlRWxlbWVudDxUPixcbiAgICBwcmV2ZW50Rm9jdXMgPSBmYWxzZSxcbiAgKTogdm9pZCB7XG4gICAgLy8gRGVzZWxlY3QgdGhlIHByZXZpb3VzIG9wdGlvbnNcbiAgICB0aGlzLm9wdGlvbnNcbiAgICAgIC5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLmlkICE9PSBzZWxlY3RlZE9wdGlvbi5pZCAmJiBvcHRpb24uc2VsZWN0ZWQpXG4gICAgICAuZm9yRWFjaCgob3B0aW9uKSA9PiAob3B0aW9uLnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICB0aGlzLnBlbmRpbmdBdXRvU2VsZWN0ZWRPcHRpb24gPSBudWxsO1xuXG4gICAgaWYgKHRoaXMudHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX3NldElucHV0VmFsdWUoc2VsZWN0ZWRPcHRpb24pO1xuXG4gICAgICAvLyBNYW51YWxseSB0cmlnZ2VyIHRoZSBjaGFuZ2UgZXZlbnRzXG4gICAgICB0aGlzLl9pc0N1c3RvbUNoYW5nZUV2ZW50ID0gdHJ1ZTtcbiAgICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgICB0aGlzLnRyaWdnZXJFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSk7XG5cbiAgICAgIC8vIERpc3BhdGNoaW5nIHRoZSBpbnB1dCBldmVudCBjaGFuZ2VzIF9sYXN0SW5wdXQsIHdoaWNoIHNob3VsZCBzdGF5IGVtcHR5IHNpbmNlIHRoZXJlJ3Mgbm8ga2V5Ym9hcmQgaW50ZXJhY3Rpb24uXG4gICAgICB0aGlzLl9sYXN0VXNlcklucHV0ID0gbnVsbDtcblxuICAgICAgLy8gQ3VzdG9tIGlucHV0IGV2ZW50IGVtaXR0ZWQgd2hlbiBpbnB1dCB2YWx1ZSBjaGFuZ2VzIGFmdGVyIGFuIG9wdGlvbiBpcyBzZWxlY3RlZFxuICAgICAgdGhpcy50cmlnZ2VyRWxlbWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQ8eyBvcHRpb246IFNiYk9wdGlvbkJhc2VFbGVtZW50PFQ+IH0+KCdpbnB1dEF1dG9jb21wbGV0ZScsIHtcbiAgICAgICAgICBkZXRhaWw6IHsgb3B0aW9uOiBzZWxlY3RlZE9wdGlvbiB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgICBpZiAoIXByZXZlbnRGb2N1cykge1xuICAgICAgICB0aGlzLnRyaWdnZXJFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIFNldCB0aGUgb3B0aW9uIHZhbHVlIHdpdGhpbiB0aGUgaW5wdXQgZWxlbWVudCAqL1xuICBwcml2YXRlIF9zZXRJbnB1dFZhbHVlKG9wdGlvbjogU2JiT3B0aW9uQmFzZUVsZW1lbnQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBHaXZlbiBhIHZhbHVlLCByZXR1cm5zIHRoZSBzdHJpbmcgdGhhdCBzaG91bGQgYmUgc2hvd24gd2l0aGluIHRoZSBpbnB1dC5cbiAgICBjb25zdCB0b0Rpc3BsYXkgPSB0aGlzLmRpc3BsYXlXaXRoPy4ob3B0aW9uLnZhbHVlIGFzIFQpID8/IG9wdGlvbi52YWx1ZTtcblxuICAgIC8vIFNldCB0aGUgb3B0aW9uIHZhbHVlXG4gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCBSZWFjdCBvbkNoYW5nZSBldmVudCwgd2UgaGF2ZSB0byBnZXQgdGhlIHNldHRlciBhbmQgY2FsbCBpdC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzExNjAwI2lzc3VlY29tbWVudC0zNDU4MTMxMzBcbiAgICBjb25zdCBzZXRWYWx1ZSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsICd2YWx1ZScpIS5zZXQhO1xuICAgIHNldFZhbHVlLmNhbGwodGhpcy50cmlnZ2VyRWxlbWVudCwgdG9EaXNwbGF5KTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVNsb3RjaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5faGlnaGxpZ2h0T3B0aW9ucyh0aGlzLnRyaWdnZXJFbGVtZW50Py52YWx1ZSk7XG5cbiAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGF0IGFuIGVsZW1lbnQgaXMgYWRkZWQgdGhhdCBoYXMgbm90IGJlZW4gcmVuZGVyZWRcbiAgICAvLyB5ZXQgYW5kIHRoZXJlZm9yZSBoYXMgaGVpZ2h0IDAuIFRoZXJlZm9yZSwgd2UgYWxzbyBvYnNlcnZlIHRoZSBzaXplXG4gICAgLy8gb2YgYWxsIGNoaWxkIGVsZW1lbnRzLlxuICAgIGNvbnN0IGN1cnJlbnRFbGVtZW50cyA9IEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yQWxsKCcqJykpO1xuICAgIHRoaXMuX3ByZXZpb3VzRWxlbWVudHM/LmZvckVhY2goKGUpID0+IHRoaXMuX3Jlc2l6ZU9ic2VydmVyLnVub2JzZXJ2ZShlKSk7XG4gICAgdGhpcy5fcHJldmlvdXNFbGVtZW50cyA9IGN1cnJlbnRFbGVtZW50cztcbiAgICB0aGlzLl9wcmV2aW91c0VsZW1lbnRzLmZvckVhY2goKGUpID0+IHRoaXMuX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoZSkpO1xuXG4gICAgLyoqXG4gICAgICogSXQncyBwb3NzaWJsZSB0byBmaWx0ZXIgb3V0IG9wdGlvbnMgd2l0aCBhbiBvcGVuZWQgcGFuZWwgb24gaW5wdXQgY2hhbmdlLlxuICAgICAqIEluIHRoaXMgY2FzZSwgdGhlIHBhbmVsJ3MgcG9zaXRpb24gbXVzdCBiZSByZWNhbGN1bGF0ZWQgY29uc2lkZXJpbmcgdGhlIG5ldyBvcHRpb24ncyBsaXN0LlxuICAgICAqL1xuICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgdGhpcy5fc2V0T3ZlcmxheVBvc2l0aW9uKCk7XG4gICAgICB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uSWZBdXRvQWN0aXZlRmlyc3RPcHRpb24oKTtcblxuICAgICAgLy8gSWYgdGhlIGF1dG9jb21wbGV0ZSBpcyBvcGVuIGFuZCB0aGUgb3B0aW9uIGNvdW50IGdldHMgdG8gemVybywgd2UgY2xvc2UgdGhlIGF1dG9jb21wbGV0ZS5cbiAgICAgIGlmICh0aGlzLl9vcHRpb25zQ291bnQgPiAwICYmIHRoaXMub3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICAvLyBJZiB0aGUgJ2lucHV0JyBpcyBmb2N1c2VkIGFuZCB0aGUgY291bnQgb2Ygb3B0aW9ucyBjaGFuZ2VzIGZyb20gMCB0byA+IDAsXG4gICAgICAvLyB0aGUgYXV0b2NvbXBsZXRlIHNob3VsZCBvcGVuIGF1dG9tYXRpY2FsbHkuXG4gICAgICBkb2N1bWVudD8uYWN0aXZlRWxlbWVudCA9PT0gdGhpcy50cmlnZ2VyRWxlbWVudCAmJlxuICAgICAgdGhpcy5fb3B0aW9uc0NvdW50ID09PSAwICYmXG4gICAgICB0aGlzLm9wdGlvbnMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy5vcGVuKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fb3B0aW9uc0NvdW50ID0gdGhpcy5vcHRpb25zLmxlbmd0aDtcbiAgfVxuXG4gIHByaXZhdGUgX3NldE5leHRBY3RpdmVPcHRpb25JZkF1dG9BY3RpdmVGaXJzdE9wdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hdXRvQWN0aXZlRmlyc3RPcHRpb24pIHtcbiAgICAgIHRoaXMucmVzZXRBY3RpdmVFbGVtZW50KCk7XG4gICAgICB0aGlzLnNldE5leHRBY3RpdmVPcHRpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKiogVGhlIGF1dG9jb21wbGV0ZSBzaG91bGQgaW5oZXJpdCAncmVhZG9ubHknIHN0YXRlIGZyb20gdGhlIHRyaWdnZXIuICovXG4gIHByaXZhdGUgX3JlYWRvbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRyaWdnZXJFbGVtZW50Py5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JykgPz8gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIF9jb21wb25lbnRTZXR1cCgpOiB2b2lkIHtcbiAgICBpZiAoaXNTZXJ2ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jb25maWd1cmVUcmlnZ2VyKCk7XG4gIH1cblxuICBwcml2YXRlIF9jb25maWd1cmVUcmlnZ2VyKCk6IHZvaWQge1xuICAgIGNvbnN0IHRyaWdnZXJFbGVtZW50ID0gKHRoaXMudHJpZ2dlciA/P1xuICAgICAgdGhpcy5jbG9zZXN0Py4oJ3NiYi1mb3JtLWZpZWxkJyk/LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykpIGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICh0cmlnZ2VyRWxlbWVudCA9PT0gdGhpcy50cmlnZ2VyRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RyaWdnZXJBYm9ydENvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgcmVtb3ZlQXJpYUNvbWJvQm94QXR0cmlidXRlcyh0aGlzLnRyaWdnZXJFbGVtZW50KTtcbiAgICB0aGlzLnRyaWdnZXJFbGVtZW50Py5yZW1vdmVBdHRyaWJ1dGUoJ2RhdGEtZXhwYW5kZWQnKTtcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudCA9IHRyaWdnZXJFbGVtZW50O1xuXG4gICAgaWYgKCF0aGlzLnRyaWdnZXJFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQXMgdGhlIHRyaWdnZXIgY2FuIGJlIHRoZSBmYWxsYmFjayBvZiB0aGUgb3JpZ2luLCB3ZSBldmVudHVhbGx5IGhhdmUgdG8gdXBkYXRlIHRoZSBwb3NpdGlvbi5cbiAgICBjb25zdCBvcmlnaW5FbGVtZW50ID0gdGhpcy5vcmlnaW5FbGVtZW50O1xuICAgIGlmICh0aGlzLnRyaWdnZXJFbGVtZW50ID09PSBvcmlnaW5FbGVtZW50ICYmIHRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLl9zZXRPdmVybGF5UG9zaXRpb24ob3JpZ2luRWxlbWVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdHJpZ2dlckF0dHJpYnV0ZU9ic2VydmVyPy5vYnNlcnZlKHRoaXMudHJpZ2dlckVsZW1lbnQhLCB7XG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgYXR0cmlidXRlRmlsdGVyOiBbJ2Rpc2FibGVkJywgJ3JlYWRvbmx5J10sXG4gICAgfSk7XG5cbiAgICB0aGlzLnNldFRyaWdnZXJBdHRyaWJ1dGVzKHRoaXMudHJpZ2dlckVsZW1lbnQpO1xuICAgIHRoaXMuX3RyaWdnZXJBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICAvLyBPcGVuIHRoZSBvdmVybGF5IG9uIGZvY3VzLCBjbGljaywgaW5wdXQgYW5kIGBBcnJvd0Rvd25gIGV2ZW50XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdmb2N1cycsICgpID0+IHRoaXMub3BlbigpLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX3RyaWdnZXJBYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB0aGlzLm9wZW4oKSwge1xuICAgICAgc2lnbmFsOiB0aGlzLl90cmlnZ2VyQWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgICB0aGlzLnRyaWdnZXJFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAnaW5wdXQnLFxuICAgICAgKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlOiBzdHJpbmcgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuXG4gICAgICAgIC8vIERvIG5vdCBvcGVuIGlmIHRoZSBldmVudCBpcyB0cmlnZ2VyZWQgdmlhIGRpc3BhdGNoRXZlbnQgKGUuZy4gY2xpY2sgb24gdGltZXRhYmxlLXN3YXAtYnV0dG9uKVxuICAgICAgICBpZiAodmFsdWUgJiYgZXZlbnQuaXNUcnVzdGVkKSB7XG4gICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faGlnaGxpZ2h0T3B0aW9ucyh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX2xhc3RVc2VySW5wdXQgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5wZW5kaW5nQXV0b1NlbGVjdGVkT3B0aW9uID0gbnVsbDtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogdGhpcy5fdHJpZ2dlckFib3J0Q29udHJvbGxlci5zaWduYWwgfSxcbiAgICApO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdjaGFuZ2UnLFxuICAgICAgKGV2ZW50KSA9PiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbiAncmVxdWlyZVNlbGVjdGlvbicgbW9kZSwgd2UgYmxvY2sgdGhlIG5hdGl2ZSBjaGFuZ2UgZXZlbnRzIGFuZFxuICAgICAgICAgKiBsZXQgb25seSBwYXNzIHRoZSBvbmVzIHRoYXQgY29tZSB3aXRoIGEgdmFsaWQgdmFsdWUgKHdoZW4gYW4gb3B0aW9uIGlzIHNlbGVjdGVkKVxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZVNlbGVjdGlvbiAmJiAhdGhpcy5faXNDdXN0b21DaGFuZ2VFdmVudCkge1xuICAgICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzQ3VzdG9tQ2hhbmdlRXZlbnQgPSBmYWxzZTtcbiAgICAgIH0sXG4gICAgICB7IHNpZ25hbDogdGhpcy5fdHJpZ2dlckFib3J0Q29udHJvbGxlci5zaWduYWwsIGNhcHR1cmU6IHRydWUgfSxcbiAgICApO1xuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdrZXlkb3duJyxcbiAgICAgIChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5fY2xvc2VkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50KSxcbiAgICAgIHtcbiAgICAgICAgc2lnbmFsOiB0aGlzLl90cmlnZ2VyQWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgICAgLy8gV2UgbmVlZCBrZXkgZXZlbnQgdG8gcnVuIGJlZm9yZSBhbnkgb3RoZXIgc3Vic2NyaXB0aW9uIHRvIGd1YXJhbnRlZSBhIGNvcnJlY3RcbiAgICAgICAgLy8gaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBjb21wb25lbnRzIChuZWNlc3NhcnkgZm9yIHRoZSAnc2JiLWNoaXAtZ3JvdXAnIHVzZSBjYXNlKS5cbiAgICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAgICdibHVyJyxcbiAgICAgIChlKSA9PiB7XG4gICAgICAgIC8vIElmIHRoZSBuZXcgZm9jdXMgaXMgdGhlIGF1dG9jb21wbGV0ZSBvciBpbnNpZGUgb2YgaXQgdGhlbiBhbiBvcHRpb25cbiAgICAgICAgLy8gd2FzIHNlbGVjdGVkLiBUaGVyZWZvcmUsIHRoZSBmb2N1cyBpcyBzdGlsbCBvbiB0aGUgY29tcG9uZW50LlxuICAgICAgICBpZiAodGhpcy5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQgYXMgTm9kZSkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiAnYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbk9uQmx1cicgaXMgZW5hYmxlZCwgc2VsZWN0IHRoZSBhY3RpdmUgb3B0aW9uIG9uIGJsdXJcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuYXV0b1NlbGVjdEFjdGl2ZU9wdGlvbk9uQmx1ciAmJlxuICAgICAgICAgIHRoaXMuYWN0aXZlT3B0aW9uICYmXG4gICAgICAgICAgdGhpcy5fbGFzdFVzZXJJbnB1dCAmJlxuICAgICAgICAgIHRoaXMudHJpZ2dlckVsZW1lbnQ/LnZhbHVlXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuYWN0aXZlT3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9zZXRWYWx1ZUFuZERpc3BhdGNoRXZlbnRzKHRoaXMuYWN0aXZlT3B0aW9uLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENsZWFycyB0aGUgaW5wdXQgaWYgdGhlcmUncyB1c2VyIGludGVyYWN0aW9uIHdpdGhvdXQgc2VsZWN0aW9uIChzZWxlY3Rpb24gY2xlYXJzIGBfbGFzdFVzZXJJbnB1dGApLlxuICAgICAgICAvLyBBIFwicGVuZGluZyBzZWxlY3Rpb25cIiBpcyBjb25zaWRlcmVkIGEgdXNlciBpbnRlcmFjdGlvbi5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMucmVxdWlyZVNlbGVjdGlvbiAmJlxuICAgICAgICAgIHRoaXMudHJpZ2dlckVsZW1lbnQgJiZcbiAgICAgICAgICB0aGlzLl9sYXN0VXNlcklucHV0ICE9IG51bGwgJiZcbiAgICAgICAgICAhdGhpcy5wZW5kaW5nQXV0b1NlbGVjdGVkT3B0aW9uXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IHNldFZhbHVlID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLFxuICAgICAgICAgICAgJ3ZhbHVlJyxcbiAgICAgICAgICApIS5zZXQhO1xuICAgICAgICAgIHNldFZhbHVlLmNhbGwodGhpcy50cmlnZ2VyRWxlbWVudCwgJycpO1xuICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodE9wdGlvbnMoJycpO1xuICAgICAgICAgIHRoaXMuX2lzQ3VzdG9tQ2hhbmdlRXZlbnQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMudHJpZ2dlckVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyRWxlbWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgbmV3IElucHV0RXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgfSxcbiAgICAgIHsgc2lnbmFsOiB0aGlzLl90cmlnZ2VyQWJvcnRDb250cm9sbGVyLnNpZ25hbCwgY2FwdHVyZTogdHJ1ZSB9LFxuICAgICk7XG4gIH1cblxuICAvLyBTZXQgb3ZlcmxheSBwb3NpdGlvbiwgd2lkdGggYW5kIG1heCBoZWlnaHRcbiAgcHJpdmF0ZSBfc2V0T3ZlcmxheVBvc2l0aW9uKG9yaWdpbkVsZW1lbnQgPSB0aGlzLm9yaWdpbkVsZW1lbnQpOiB2b2lkIHtcbiAgICAvLyBBbiB1bmRlZmluZWQgb3JpZ2luRWxlbWVudCBzaG91bGQgb25seSBvY2N1ciBpbiB0aGUgdW5saWtlbHkgZXZlbnRcbiAgICAvLyB0aGF0IHRoZSBhdXRvY29tcGxldGUgbG9zZXMgaXRzIG9yaWdpbkVsZW1lbnQgYW5kIHRyaWdnZXJFbGVtZW50IGR1cmluZyBhbiBvcGVuIHN0YXRlLlxuICAgIGlmICghb3JpZ2luRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRPdmVybGF5UG9zaXRpb24oXG4gICAgICB0aGlzLl9vdmVybGF5LFxuICAgICAgb3JpZ2luRWxlbWVudCxcbiAgICAgIHRoaXMuX292ZXJsYXksXG4gICAgICB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3IoJy5zYmItb3B0aW9uLXBhbmVsX19vdmVybGF5LWNvbnRhaW5lcicpISxcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLnBvc2l0aW9uLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogT24gb3Blbi9jbG9zZSBhbmltYXRpb24gZW5kLlxuICAgKiBJbiByYXJlIGNhc2VzIGl0IGNhbiBiZSB0aGF0IHRoZSBhbmltYXRpb25FbmQgZXZlbnQgaXMgdHJpZ2dlcmVkIHR3aWNlLlxuICAgKiBUbyBhdm9pZCBlbnRlcmluZyBhIGNvcnJ1cHQgc3RhdGUsIGV4aXQgd2hlbiBzdGF0ZSBpcyBub3QgZXhwZWN0ZWQuXG4gICAqL1xuICBwcml2YXRlIF9vbkFuaW1hdGlvbkVuZChldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ29wZW4nICYmIHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJykge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ2Nsb3NlJyAmJiB0aGlzLnN0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgIHRoaXMuX2hhbmRsZUNsb3NpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVPcGVuaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmVkJztcbiAgICBpZiAodGhpcy5vcmlnaW5FbGVtZW50KSB7XG4gICAgICB0aGlzLl9yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMub3JpZ2luRWxlbWVudCk7XG4gICAgfVxuICAgIHRoaXMudHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICd0cnVlJyk7XG4gICAgdGhpcy5kaXNwYXRjaE9wZW5FdmVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlQ2xvc2luZygpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ2Nsb3NlZCc7XG4gICAgdGhpcy5oaWRlUG9wb3Zlcj8uKCk7XG4gICAgdGhpcy50cmlnZ2VyRWxlbWVudD8uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJyk7XG5cbiAgICB0aGlzLnJlc2V0QWN0aXZlRWxlbWVudCgpO1xuICAgIHRoaXMuX292ZXJsYXkuc2Nyb2xsVG9wID0gMDtcbiAgICB0aGlzLl9lc2NhcGFibGVPdmVybGF5Q29udHJvbGxlci5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5kaXNwYXRjaENsb3NlRXZlbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2F0dGFjaE9wZW5QYW5lbEV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgLy8gUmVjYWxjdWxhdGUgdGhlIG92ZXJsYXkgcG9zaXRpb24gb24gc2Nyb2xsIGFuZCB3aW5kb3cgcmVzaXplXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKCkgPT4gdGhpcy5fc2V0T3ZlcmxheVBvc2l0aW9uKCksIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgLy8gV2l0aG91dCBjYXB0dXJlLCBvdGhlciBzY3JvbGwgY29udGV4dHMgd291bGQgbm90IGJ1YmJsZSB0byB0aGlzIGV2ZW50IGxpc3RlbmVyLlxuICAgICAgLy8gQ2FwdHVyZSBhbGxvd3MgdXMgdG8gcmVhY3QgdG8gYWxsIHNjcm9sbCBjb250ZXh0cyBpbiB0aGlzIERPTS5cbiAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcblxuICAgIC8vIENsb3NlIGF1dG9jb21wbGV0ZSBvbiBiYWNrZHJvcCBjbGlja1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIChldikgPT4gdGhpcy5fcG9pbnRlckRvd25MaXN0ZW5lcihldiksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIChldikgPT4gdGhpcy5fY2xvc2VPbkJhY2tkcm9wQ2xpY2soZXYpLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ8m1ZGlzYWJsZWRjaGFuZ2UnLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVPcHRpb24/LmRpc2FibGVkKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uSWZBdXRvQWN0aXZlRmlyc3RPcHRpb24oKTtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBLZXlib2FyZCBpbnRlcmFjdGlvbnNcbiAgICB0aGlzLnRyaWdnZXJFbGVtZW50Py5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ2tleWRvd24nLFxuICAgICAgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLm9wZW5lZFBhbmVsS2V5Ym9hcmRJbnRlcmFjdGlvbihldmVudCksXG4gICAgICB7XG4gICAgICAgIHNpZ25hbDogdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgICAgIC8vIFdlIG5lZWQga2V5IGV2ZW50IHRvIHJ1biBiZWZvcmUgYW55IG90aGVyIHN1YnNjcmlwdGlvbiB0byBndWFyYW50ZWUgYSBjb3JyZWN0XG4gICAgICAgIC8vIGludGVyYWN0aW9uIHdpdGggb3RoZXIgY29tcG9uZW50cyAobmVjZXNzYXJ5IGZvciB0aGUgJ3NiYi1jaGlwLWdyb3VwJyB1c2UgY2FzZSkuXG4gICAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgcG9pbnRlcmRvd24gZXZlbnQgdGFyZ2V0IGlzIHRyaWdnZXJlZCBvbiB0aGUgbWVudS5cbiAgcHJpdmF0ZSBfcG9pbnRlckRvd25MaXN0ZW5lciA9IChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ID0gaXNFdmVudE9uRWxlbWVudCh0aGlzLl9vdmVybGF5LCBldmVudCk7XG4gIH07XG5cbiAgLy8gSWYgdGhlIGNsaWNrIGlzIG91dHNpZGUgdGhlIGF1dG9jb21wbGV0ZSwgY2xvc2VzIHRoZSBwYW5lbC5cbiAgcHJpdmF0ZSBfY2xvc2VPbkJhY2tkcm9wQ2xpY2sgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmIChcbiAgICAgICF0aGlzLl9pc1BvaW50ZXJEb3duRXZlbnRPbk1lbnUgJiZcbiAgICAgICFpc0V2ZW50T25FbGVtZW50KHRoaXMuX292ZXJsYXksIGV2ZW50KSAmJlxuICAgICAgIWlzRXZlbnRPbkVsZW1lbnQodGhpcy5vcmlnaW5FbGVtZW50LCBldmVudClcbiAgICApIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBfY2xvc2VkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJyB8fCB0aGlzLnN0YXRlID09PSAnb3BlbmVkJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKiogSGlnaGxpZ2h0IHRoZSBzZWFyY2hlZCB0ZXh0IG9uIHRoZSBvcHRpb25zLiAqL1xuICBwcml2YXRlIF9oaWdobGlnaHRPcHRpb25zKHNlYXJjaFRlcm0/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoc2VhcmNoVGVybSA9PT0gbnVsbCB8fCBzZWFyY2hUZXJtID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4gb3B0aW9uLmhpZ2hsaWdodChzZWFyY2hUZXJtKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICAvLyBTY3JvbGwgYXJlYXMgd2l0aG91dCBjb250YWluaW5nIGFuIGludGVyYWN0aXZlIGVsZW1lbnQgd2lsbCByZWNlaXZlIGZvY3VzIHdoZW4gdGFiYmluZyB0aHJvdWdoIHRoZSBkb2N1bWVudC5cbiAgICAvLyBJZiB0aGVyZSBhcmUgYSBsb3Qgb2Ygb3B0aW9ucyBhbmQgd2hlbiBwcmVzc2luZyB0YWIga2V5LCB0aGUgc2Nyb2xsIGFyZWEgb24gc2JiLWF1dG9jb21wbGV0ZV9fb3B0aW9ucyBnZXRzIGZvY3VzLlxuICAgIC8vIEFzIGVsZW1lbnRzIGluc2lkZSB0aGUgcGFuZWwgc2hvdWxkIG5ldmVyIGdldCBmb2N1cywgd2UgaGF2ZSB0byBhdm9pZCB0aGF0IGJ5IHNldHRpbmcgdGFiaW5kZXg9LTEuXG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLW9wdGlvbi1wYW5lbF9fb3ZlcmxheS1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwic2JiLW9wdGlvbi1wYW5lbF9fb3ZlcmxheSAke3RoaXMubmVnYXRpdmVcbiAgICAgICAgICAgID8gJ3NiYi1zY3JvbGxiYXItbmVnYXRpdmUnXG4gICAgICAgICAgICA6ICdzYmItc2Nyb2xsYmFyJ31cIlxuICAgICAgICAgIHJvbGU9JHshYXJpYVJvbGVPbkhvc3QgPyB0aGlzLnBhbmVsUm9sZSA6IG5vdGhpbmd9XG4gICAgICAgICAgaWQ9JHshYXJpYVJvbGVPbkhvc3QgPyB0aGlzLm92ZXJsYXlJZCA6IG5vdGhpbmd9XG4gICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgQGFuaW1hdGlvbmVuZD0ke3RoaXMuX29uQW5pbWF0aW9uRW5kfVxuICAgICAgICAgICR7cmVmKChvdmVybGF5UmVmPzogRWxlbWVudCkgPT4gKHRoaXMuX292ZXJsYXkgPSBvdmVybGF5UmVmIGFzIEhUTUxFbGVtZW50KSl9XG4gICAgICAgID5cbiAgICAgICAgICA8c2xvdCBAc2xvdGNoYW5nZT0ke3RoaXMuX2hhbmRsZVNsb3RjaGFuZ2V9Pjwvc2xvdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50RXZlbnRNYXAge1xuICAgIGlucHV0QXV0b2NvbXBsZXRlOiBDdXN0b21FdmVudDx7IG9wdGlvbjogU2JiT3B0aW9uQmFzZUVsZW1lbnQ8YW55PiB9PjtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQ3VDQSxJQUFNLGlCQUFpQjs7Ozs7OztJQVFELG9DQUEwQjttQkFBcUIsaUJBQ25FLHdCQUNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2NBRnFCLG1DQUErQyxZQUVwRTs7O3lCQWVFLGFBQWEsRUFDYixVQUFVLENBQUE7MEJBVVYsYUFBYSxFQUNiLFVBQVUsQ0FBQTtvQ0FJVixXQUFXLEVBQ1gsU0FBUztJQUFFLFdBQVc7SUFBdUIsU0FBUztJQUFNLE1BQU07SUFBUyxDQUFDLENBQUE7d0NBSTVFLFdBQVcsRUFDWCxTQUFTO0lBQUUsV0FBVztJQUE0QixNQUFNO0lBQVMsQ0FBQyxDQUFBOzhCQUlsRSxTQUFTLEVBQUUsV0FBVyxPQUFPLENBQUMsQ0FBQTt1QkFPOUIsU0FBUyxFQUFFLFNBQVMsTUFBTSxDQUFDLENBQUE7eUNBRzNCLFdBQVcsRUFDWCxTQUFTO0lBQUUsV0FBVztJQUE2QixNQUFNO0lBQVMsQ0FBQyxDQUFBOytDQU9uRSxXQUFXLEVBQ1gsU0FBUztJQUFFLFdBQVc7SUFBcUMsTUFBTTtJQUFTLENBQUMsQ0FBQTttQ0FTM0UsV0FBVyxFQUNYLFNBQVM7SUFBRSxXQUFXO0lBQXFCLE1BQU07SUFBUyxDQUFDLENBQUE7MkJBTzNELFVBQVUsQ0FBQTtHQTVEWCxhQUFBLE1BQUEsTUFBQSxvQkFBQTtJQUFBLE1BQUE7SUFBQSxNQUFBO0lBQUEsUUFBQTtJQUFBLFNBQUE7SUFBQSxRQUFBO0tBQUEsTUFBQSxRQUFBLFlBQUE7S0FBQSxN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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as SbbAutocompleteBaseElement } from "./autocomplete-base-element-
|
|
1
|
+
import { t as SbbAutocompleteBaseElement } from "./autocomplete-base-element-BHYleZ3J.js";
|
|
2
2
|
import { SbbAutocompleteElement } from "./autocomplete/autocomplete.component.js";
|
|
3
3
|
import "./autocomplete.pure.js";
|
|
4
4
|
//#region src/elements/autocomplete.ts
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { t as SbbAutocompleteBaseElement } from "./autocomplete-base-element-
|
|
1
|
+
import { t as SbbAutocompleteBaseElement } from "./autocomplete-base-element-BHYleZ3J.js";
|
|
2
2
|
import { SbbAutocompleteElement } from "./autocomplete/autocomplete.component.js";
|
|
3
3
|
export { SbbAutocompleteBaseElement, SbbAutocompleteElement };
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sbb-esta/lyne-elements-dev",
|
|
3
|
-
"version": "5.0.0-next.2-dev.
|
|
3
|
+
"version": "5.0.0-next.2-dev.1778486889",
|
|
4
4
|
"description": "Lyne Design System",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"design system",
|
|
7
7
|
"web components",
|
|
8
8
|
"lit",
|
|
9
|
-
"https://github.com/sbb-design-systems/lyne-components/commit/
|
|
9
|
+
"https://github.com/sbb-design-systems/lyne-components/commit/df2461105a79a184c4e494b4ab6169cbc996a6bc"
|
|
10
10
|
],
|
|
11
11
|
"type": "module",
|
|
12
12
|
"exports": {
|