@gravitee/ui-components 3.24.4 → 3.24.5
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/assets/i18n/en.json +0 -3
- package/assets/i18n/fr.json +0 -3
- package/package.json +18 -20
- package/src/atoms/gv-input.js +31 -32
- package/src/index.js +1 -2
- package/src/mixins/input-element.js +5 -3
- package/src/molecules/gv-code.js +181 -169
- package/src/molecules/gv-expression-language.js +219 -525
- package/src/policy-studio/gv-policy-studio.js +2 -8
- package/src/styles/input.js +2 -2
- package/assets/css/codemirror/all.css +0 -476
- package/src/molecules/gv-code-hint.js +0 -49
- package/wc/gv-code-hint.js +0 -1
|
@@ -352,12 +352,6 @@ export class GvPolicyStudio extends KeyboardElement(LitElement) {
|
|
|
352
352
|
search.focus();
|
|
353
353
|
}
|
|
354
354
|
}
|
|
355
|
-
|
|
356
|
-
if (this.isPressed(KEYS.Esc)) {
|
|
357
|
-
this._closeFlowStepForm();
|
|
358
|
-
|
|
359
|
-
this._onCloseDocumentation();
|
|
360
|
-
}
|
|
361
355
|
}
|
|
362
356
|
}
|
|
363
357
|
|
|
@@ -1141,7 +1135,7 @@ export class GvPolicyStudio extends KeyboardElement(LitElement) {
|
|
|
1141
1135
|
|
|
1142
1136
|
_renderFlowStepForm(readonlyMode) {
|
|
1143
1137
|
const values = this._currentFlowStep._values || this._currentFlowStep._initialValues;
|
|
1144
|
-
return html`${cache(this._flowStepSchema && this._currentFlowStep ? html`<div class="flow-step__container"> <div class="flow-step__form"> <gv-schema-form .id="${FLOW_STEP_FORM_ID}" .schema="${this._flowStepSchema}" .icon="design:edit" has-header validate-on-render .values="${values}" .dirty="${this._currentFlowStep._values != null}" ?readonly="${readonlyMode}" scrollable @gv-schema-form:change="${this._onChangeFlowStep}" @gv-schema-form:reset="${this._onResetFlowStep}" @gv-schema-form:fetch-resources="${this._onFetchResources}" @gv-schema-form:submit="${this._onSubmitFlowStep}"> <div slot="title" class="flow-step__form-title">${this._currentFlowStep.step.name}</div> <gv-button slot="header-left" icon="general:close" outlined small @gv-button:click="${this._onCloseFlowStepForm}" title="Close
|
|
1138
|
+
return html`${cache(this._flowStepSchema && this._currentFlowStep ? html`<div class="flow-step__container"> <div class="flow-step__form"> <gv-schema-form .id="${FLOW_STEP_FORM_ID}" .schema="${this._flowStepSchema}" .icon="design:edit" has-header validate-on-render .values="${values}" .dirty="${this._currentFlowStep._values != null}" ?readonly="${readonlyMode}" scrollable @gv-schema-form:change="${this._onChangeFlowStep}" @gv-schema-form:reset="${this._onResetFlowStep}" @gv-schema-form:fetch-resources="${this._onFetchResources}" @gv-schema-form:submit="${this._onSubmitFlowStep}"> <div slot="title" class="flow-step__form-title">${this._currentFlowStep.step.name}</div> <gv-button slot="header-left" icon="general:close" outlined small @gv-button:click="${this._onCloseFlowStepForm}" title="Close"></gv-button> <gv-button slot="header-left" icon="home:book" ?disabled="${this.documentation != null}" outlined small @gv-button:click="${this._onOpenDocumentationFromForm}" title="Open documentation"></gv-button> </gv-schema-form> </div> </div>` : '')}`;
|
|
1145
1139
|
}
|
|
1146
1140
|
|
|
1147
1141
|
_onCloseDocumentation() {
|
|
@@ -1752,4 +1746,4 @@ export class GvPolicyStudio extends KeyboardElement(LitElement) {
|
|
|
1752
1746
|
|
|
1753
1747
|
}
|
|
1754
1748
|
window.customElements.define('gv-policy-studio', GvPolicyStudio);
|
|
1755
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL3BvbGljeS1zdHVkaW8vZ3YtcG9saWN5LXN0dWRpby5qcyJdLCJuYW1lcyI6WyJjc3MiLCJodG1sIiwiTGl0RWxlbWVudCIsIm1ldGhvZHMiLCJkaXNwYXRjaEN1c3RvbUV2ZW50IiwiZW1wdHkiLCJjYWNoZSIsImRlZXBDbG9uZSIsImRlZXBFcXVhbCIsIktleWJvYXJkRWxlbWVudCIsIktFWVMiLCJGTE9XX1NURVBfRk9STV9JRCIsIkd2UG9saWN5U3R1ZGlvIiwicHJvcGVydGllcyIsInBvbGljaWVzIiwidHlwZSIsIkFycmF5Iiwic2VydmljZXMiLCJPYmplY3QiLCJyZXNvdXJjZVR5cGVzIiwiYXR0cmlidXRlIiwicHJvcGVydHlQcm92aWRlcnMiLCJkeW5hbWljUHJvcGVydHlTY2hlbWEiLCJ0YWJJZCIsIlN0cmluZyIsIl90YWJJZCIsImRlZmluaXRpb24iLCJfZGVmaW5pdGlvbiIsImRvY3VtZW50YXRpb24iLCJmbG93U2NoZW1hIiwiY29uZmlndXJhdGlvblNjaGVtYSIsIl9jb25maWd1cmF0aW9uU2NoZW1hIiwiY29uZmlndXJhdGlvbkluZm9ybWF0aW9uIiwiaXNEaXJ0eSIsIkJvb2xlYW4iLCJyZWZsZWN0IiwiX2RyYWdQb2xpY3kiLCJfZHJvcFBvbGljeSIsInNlbGVjdGVkRmxvd3NJZCIsIl9zZWxlY3RlZEZsb3dzSWQiLCJfY3VycmVudFBvbGljeUlkIiwiX3NlYXJjaFBvbGljeVF1ZXJ5IiwiX3NlYXJjaEZsb3dRdWVyeSIsIl9mbG93U3RlcFNjaGVtYSIsIl9jdXJyZW50Rmxvd1N0ZXAiLCJfcG9saWN5RmlsdGVyIiwiX2Zsb3dGaWx0ZXIiLCJfY3VycmVudEFza0NvbmZpcm1hdGlvbiIsImhhc1Byb3BlcnRpZXMiLCJfaGFzUHJvcGVydGllcyIsImhhc1Jlc291cmNlcyIsImhhc1BvbGljeUZpbHRlciIsImZsb3dzVGl0bGUiLCJzb3J0YWJsZSIsImNhbkFkZCIsInJlYWRvbmx5IiwicmVhZG9ubHlQbGFucyIsImNhbkRlYnVnIiwiX2NhbkRlYnVnIiwiZGVidWdSZXNwb25zZSIsInN0eWxlcyIsImNvbnN0cnVjdG9yIiwiZmxvd3MiLCJfdGFicyIsImlkIiwidGl0bGUiLCJpY29uIiwidmFsdWUiLCJ0aGVuIiwicmVxdWVzdFVwZGF0ZSIsIl9mbG93RmlsdGVyT3B0aW9ucyIsImRlZmluZWRQbGFucyIsImxlbmd0aCIsIl9wb2xpY3lGaWx0ZXJPcHRpb25zIiwic3BsaWNlIiwib25LZXlib2FyZCIsImlzUHJlc3NlZCIsIlNoaWZ0IiwiQ3RybCIsIlNwYWNlIiwic2VhcmNoIiwic2hhZG93Um9vdCIsInF1ZXJ5U2VsZWN0b3IiLCJmb2N1cyIsIkVzYyIsIl9jbG9zZUZsb3dTdGVwRm9ybSIsIl9vbkNsb3NlRG9jdW1lbnRhdGlvbiIsImluY2x1ZGVzIiwiX2dlbmVyYXRlRmxvd3NJZCIsInJlc291cmNlcyIsIl9nZW5lcmF0ZUlkIiwicGxhbnMiLCJtYXAiLCJwbGFuIiwiX2dlbmVyYXRlUGxhbkZsb3dzSWQiLCJfaW5pdGlhbERlZmluaXRpb24iLCJfc2VsZWN0Rmlyc3RGbG93IiwiaXNBcnJheSIsImZpbHRlciIsIl9maW5kRmxvd0J5SWQiLCJfdXBkYXRlU2VsZWN0ZWRGbG93cyIsImRpc3BhdGNoIiwiY2FuZGlkYXRlIiwiZGVmaW5lZEZsb3dzIiwiX2lkIiwiZmluZCIsIl9nZXRGbG93RWxlbWVudCIsImZsb3dJZCIsIl9vbkRyYWdFbmRQb2xpY3kiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsImUiLCJvbkRyYWdFbmQiLCJfb25Ecm9wUG9saWN5IiwiZGV0YWlsIiwiX2Fza1RvVmFsaWRhdGVGb3JtcyIsInBvbGljeSIsInRhcmdldEZsb3ciLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJjb25maWd1cmF0aW9uIiwiX25ldyIsImZsb3dTdGVwIiwiX2dlbmVyYXRlRmxvd1N0ZXBJZCIsImZsb3dLZXkiLCJwb3NpdGlvbiIsImVuYWJsZWQiLCJzb3VyY2VGbG93Iiwic291cmNlRmxvd0lkIiwic291cmNlUG9zaXRpb24iLCJzb3VyY2VGbG93S2V5Iiwic3RlcCIsImdyb3VwIiwic2NoZW1hIiwiYnVpbGRTY2hlbWEiLCJfc2V0Q3VycmVudEZsb3dTdGVwIiwiY3VycmVudEZsb3dGb3JtIiwiX2dldEZsb3dTdGVwRm9ybSIsImRpcnR5IiwiY2FuY2VsRWRpdCIsInNldFRpbWVvdXQiLCJfZWRpdEZsb3dTdGVwIiwiZmxvdyIsInVwZGF0ZUNvbXBsZXRlIiwiZmxvd0VsZW1lbnQiLCJzZWxlY3RlZFN0ZXBJZCIsIl9kaXJ0eSIsImd2RmxvdyIsInJlbW92ZUNhbmRpZGF0ZSIsIl9vbkRlbGV0ZVBvbGljeSIsInRhcmdldCIsImVkaXRpbmciLCJfb25EZXNpZ24iLCJfY2hhbmdlVGFiIiwiX3NwbGl0TWFpblZpZXdzIiwianNvblNjaGVtYSIsIkpTT04iLCJwYXJzZSIsImN1cnJlbnRGbG93U3RlcCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJfb25PcGVuRG9jdW1lbnRhdGlvbiIsIl9tYXhpbWl6ZVRvcFZpZXciLCJfb25FZGl0Rmxvd1N0ZXAiLCJfZ2V0UmVzaXphYmxlVmlld3MiLCJtYXhpbWl6ZVRvcCIsIl9tYXhpbWl6ZUJvdHRvbVZpZXciLCJtYXhpbWl6ZUJvdHRvbSIsInNwbGl0IiwiX29uQ2hhbmdlRmxvd1N0ZXBTdGF0ZSIsIl9vbkNsb3NlRmxvd1N0ZXBGb3JtIiwiZXJyIiwiZm9yY2UiLCJQcm9taXNlIiwiYWxsIiwiX3N1Ym1pdE9yQ29uZmlybUZvcm1zIiwiZm9ybXMiLCJyIiwiX2J1aWxkRGVmaW5pdGlvblRvU2F2ZSIsImdldENoaWxkcmVuIiwiX2NoZWNrQ3VycmVudEZsb3dTdGVwIiwiRXJyb3IiLCJmbG93U3RlcFNjaGVtYSIsIl9pbml0aWFsVmFsdWVzIiwic2NvcGUiLCJfZW51bSIsImVudW0iLCJmaWx0ZXJlZCIsImRlZmF1bHQiLCJfdmFsdWVzIiwiX3JlZnJlc2giLCJjbG9zZVN0ZXBGb3JtIiwiX29uU2VsZWN0Rmxvd3MiLCJfb25PcGVuRG9jdW1lbnRhdGlvbkZyb21NZW51IiwiZ2V0U2VsZWN0ZWRGbG93IiwiX2ZldGNoRG9jdW1lbnRhdGlvbiIsIl9vbk9wZW5Eb2N1bWVudGF0aW9uRnJvbUZvcm0iLCJyZW1vdmVJdGVtIiwiX2ZpbmRGbG93Q29sbGVjdGlvbiIsInBsYW5zRmxvd3MiLCJyZWR1Y2UiLCJhY2MiLCJ2YWwiLCJjb25jYXQiLCJpbmRleCIsInNlbGVjdGVkRmxvd0lkIiwiX29uVGFyZ2V0UG9saWN5IiwiX29uQ2hhbmdlRmxvd1N0ZXAiLCJ2YWx1ZXMiLCJfd3JpdGVGbG93U3RlcCIsImZpbmRJbmRleCIsIl9vblN1Ym1pdEZsb3dTdGVwIiwiYyIsIl9vbkNhbmNlbEZsb3ciLCJfb25TdWJtaXRGbG93Iiwic2VsZWN0ZWRGbG93IiwiYXNzaWduIiwiX2NyZWF0ZUZsb3dGcm9tU2NoZW1hIiwic2VsZWN0ZWRGbG93VXBkYXRlZCIsIl9vbkNhbmNlbEZsb3dNb2RlIiwiX29uU3VibWl0Rmxvd01vZGUiLCJfb25DaGFuZ2VUYWIiLCJfY2hhbmdlVGFiVmFsaWRhdG9yIiwiZnJvbSIsInRvIiwiY29tcG9uZW50IiwiY29uZmlybSIsInJlc29sdmUiLCJfb25EcmFnU3RhcnRGbG93U3RlcCIsIl9yZW5kZXJGbG93RW1wdHlTdGF0ZSIsInJlYWRvbmx5TW9kZSIsIl9vbkFkZEZsb3ciLCJfcmVuZGVyRmxvdyIsImhhc0VtcHR5U3RhdGUiLCJiaW5kIiwiX29uRmV0Y2hSZXNvdXJjZXMiLCJldmVudCIsImN1cnJlbnRUYXJnZXQiLCJyZWdleFR5cGVzIiwib3B0aW9ucyIsImRlZmluZWRSZXNvdXJjZXMiLCJyZXNvdXJjZSIsIlJlZ0V4cCIsInRlc3QiLCJyZXNvdXJjZVR5cGUiLCJyb3ciLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJwaWN0dXJlIiwiaXRlbSIsImVsZW1lbnQiLCJfcmVuZGVyUG9saWN5IiwiX3JlbmRlckZsb3dTdGVwRm9ybSIsImNvbnRlbnQiLCJpbWFnZSIsIl9vblJlc2V0Rmxvd1N0ZXAiLCJyZXNldCIsImxpc3QiLCJwcmVmaXgiLCJpc0Zsb3ciLCJwcmUiLCJzdGVwSW5kZXgiLCJwb3N0IiwiZ2V0VXBkYXRlQ29tcGxldGUiLCJzaG91bGRVcGRhdGUiLCJjaGFuZ2VkUHJvcGVydGllcyIsImhhcyIsImRyYWdQb2xpY3kiLCJkcm9wUG9saWN5IiwidXBkYXRlZCIsInByb3BzIiwic2V0SXRlbSIsIl9vbkRlbGV0ZUZsb3ciLCJfZGVsZXRlRmxvdyIsImRlZmluZWRQcm9wZXJ0aWVzIiwiX29uRHVwbGljYXRlRmxvdyIsIl9hZGRGbG93IiwicGxhbkluZGV4IiwicCIsImkiLCJfb25DaGFuZ2VGbG93U3RhdGUiLCJfb25BZGRGbG93UGxhbiIsImNvbGxlY3Rpb24iLCJkdXBsaWNhdGUiLCJwdXNoIiwibmV3RmxvdyIsIl9pbnN0YW50aWF0ZSIsInByb3BlcnRpZXNEZWZpbml0aW9uIiwiaW5pdGlhdG9yIiwicHJvcGVydHkiLCJrZXkiLCJrZXlzIiwiZW50cnkiLCJ1bmRlZmluZWQiLCJpbmRleE9mIiwic2VsZWN0ZWRGbG93cyIsIl9maW5kRmxvd0luZGV4IiwiZiIsIl9vblJlb3JkZXJGbG93cyIsIm5ld09yZGVyIiwiX29uU2VhcmNoUG9saWN5IiwiX29uQ2xlYXJQb2xpY3kiLCJfb25TZWFyY2hGbG93cyIsIl9vbkNsZWFyRmxvd3MiLCJfb25SZXNldEFsbCIsIl9maWx0ZXJOb3RWYWxpZFN0ZXAiLCJfcmVtb3ZlUHJpdmF0ZVByb3BlcnRpZXMiLCJvIiwiY29weSIsInN0YXJ0c1dpdGgiLCJmb3JtIiwiaXNWYWxpZCIsInN1Ym1pdCIsImdldFByb3BlcnRpZXNFbGVtZW50IiwiY2xvc2VQcm9taXNlcyIsImN1cnJlbnRTdGVwIiwic2F2ZWQiLCJfZGVmaW5pdGlvblNhdmVkIiwiX2J1aWxkRGVmaW5pdGlvblRvU2VuZCIsImRlZmluaXRpb25Ub1NhdmUiLCJfb25TYXZlQWxsIiwiY2F0Y2giLCJjb25zb2xlIiwiZXJyb3IiLCJfb25EZWJ1ZyIsInJlcXVlc3RFdmVudCIsInJlcXVlc3QiLCJmaWx0ZXJlZEZsb3dzIiwiZmlsdGVyZWRQbGFucyIsIl9vbkZpbHRlckZsb3dzIiwiX2dldEZpbHRlcmVkUG9saWNpZXMiLCJvblJlcXVlc3QiLCJvblJlc3BvbnNlIiwiX29uRmlsdGVyUG9saWNpZXMiLCJfcmVuZGVyRGVzaWduIiwiX3JlbmRlckZsb3dGb3JtIiwiX3JlbmRlckRlYnVnIiwicmVzcG9uc2UiLCJpc0xvYWRpbmciLCJwYXRoIiwibWV0aG9kIiwiX3JlbmRlckNvbmZpZ3VyYXRpb25Gb3JtIiwiX29uUmVzb3VyY2VzQ2hhbmdlIiwiX29uUHJvcGVydGllc0NoYW5nZSIsIl9vblNhdmVQcm92aWRlciIsInByb3ZpZGVyIiwiX29uU3dpdGNoRW5jcnlwdGVkUHJvcGVydHkiLCJyZW5kZXIiLCJfZ2V0UmVhZG9ubHlNb2RlRm9yRGVzaWduIiwiZmxvd1BsYW4iLCJjb21wYXJlZEZsb3ciLCJjb21wYXJlZEZsb3dQbGFuIiwid2luZG93IiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLEdBQVQsRUFBY0MsSUFBZCxFQUFvQkMsVUFBcEIsUUFBc0MsS0FBdEM7QUFDQSxTQUFTQyxPQUFULFFBQXdCLGVBQXhCO0FBQ0EsU0FBU0MsbUJBQVQsUUFBb0MsZUFBcEM7QUFDQSxPQUFPLG9CQUFQO0FBQ0EsT0FBTyxrQkFBUDtBQUNBLE9BQU8sd0JBQVA7QUFDQSxPQUFPLCtCQUFQO0FBQ0EsT0FBTyxpQ0FBUDtBQUNBLE9BQU8sNkJBQVA7QUFDQSxPQUFPLDZCQUFQO0FBQ0EsT0FBTyxzQkFBUDtBQUNBLE9BQU8scUJBQVA7QUFDQSxPQUFPLFdBQVA7QUFDQSxPQUFPLGdCQUFQO0FBQ0EsT0FBTyx5QkFBUDtBQUNBLFNBQVNDLEtBQVQsUUFBc0IsaUJBQXRCO0FBQ0EsU0FBU0MsS0FBVCxRQUFzQixz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YUFBdEM7O0FBQ0EsUUFBSThLLFlBQUosRUFBa0I7QUFDaEIsYUFBTyxJQUFQO0FBQ0Q7O0FBRUQsVUFBTXdILFlBQVksR0FBRyxLQUFLNUosZUFBTCxDQUFxQixDQUFyQixDQUFyQjs7QUFDQSxRQUFJLENBQUM0SixZQUFMLEVBQW1CO0FBQ2pCLGFBQU8sS0FBUDtBQUNEOztBQUVELFVBQU07QUFBRWpRLE1BQUFBLElBQUksRUFBRWtRO0FBQVIsUUFBNkIsS0FBS3pKLG1CQUFMLENBQXlCd0osWUFBWSxDQUFDdFAsR0FBdEMsQ0FBbkM7O0FBQ0EsV0FBT3VQLGdCQUFnQixJQUFJLEtBQUt2UyxhQUFoQztBQUNEOztBQTF0RDZEO0FBNnREaEV3UyxNQUFNLENBQUNDLGNBQVAsQ0FBc0JDLE1BQXRCLENBQTZCLGtCQUE3QixFQUFpRHRWLGNBQWpEIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IGNzcywgaHRtbCwgTGl0RWxlbWVudCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBtZXRob2RzIH0gZnJvbSAnLi4vbGliL3N0dWRpbyc7XG5pbXBvcnQgeyBkaXNwYXRjaEN1c3RvbUV2ZW50IH0gZnJvbSAnLi4vbGliL2V2ZW50cyc7XG5pbXBvcnQgJy4uL2F0b21zL2d2LWJ1dHRvbic7XG5pbXBvcnQgJy4uL2F0b21zL2d2LWljb24nO1xuaW1wb3J0ICcuLi9tb2xlY3VsZXMvZ3Ytb3B0aW9uJztcbmltcG9ydCAnLi4vb3JnYW5pc21zL2d2LWRvY3VtZW50YXRpb24nO1xuaW1wb3J0ICcuLi9vcmdhbmlzbXMvZ3YtcmVzaXphYmxlLXZpZXdzJztcbmltcG9ydCAnLi4vb3JnYW5pc21zL2d2LXNjaGVtYS1mb3JtJztcbmltcG9ydCAnLi4vb3JnYW5pc21zL2d2LWh0dHAtY2xpZW50JztcbmltcG9ydCAnLi4vb3JnYW5pc21zL2d2LXRhYnMnO1xuaW1wb3J0ICcuLi9tb2xlY3VsZXMvZ3Ytcm93JztcbmltcG9ydCAnLi9ndi1mbG93JztcbmltcG9ydCAnLi9ndi1mbG93LXN0ZXAnO1xuaW1wb3J0ICcuL2d2LXBvbGljeS1zdHVkaW8tbWVudSc7XG5pbXBvcnQgeyBlbXB0eSB9IGZyb20gJy4uL3N0eWxlcy9lbXB0eSc7XG5pbXBvcnQgeyBjYWNoZSB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL2NhY2hlJztcbmltcG9ydCB7IGRlZXBDbG9uZSwgZGVlcEVxdWFsIH0gZnJvbSAnLi4vbGliL3V0aWxzJztcbmltcG9ydCB7IEtleWJvYXJkRWxlbWVudCwgS0VZUyB9IGZyb20gJy4uL21peGlucy9rZXlib2FyZC1lbGVtZW50JztcblxuY29uc3QgRkxPV19TVEVQX0ZPUk1fSUQgPSAnZmxvdy1zdGVwLWZvcm0nO1xuXG4vKipcbiAqICBTdHVkaW8gUG9saWN5IGNvbXBvbmVudFxuICpcbiAqIOKaoO+4jyBUaGlzIGNvbXBvbmVudCBpcyBiYXNlZCBvbiBgYXNjaWlkb2N0b3JgLCBgaGlnaGxpZ2h0LmpzYCBhbmQgYGFzY2lpZG9jdG9yLWhpZ2hsaWdodC5qc2AuXG4gKiBUbyB1c2UgdGhpcyBjb21wb25lbnQgaW4geW91ciBwcm9qZWN0IGJlIHN1cmUgdGhlIGRlcGVuZGVuY2llcyBhcmUgaW5zdGFsbGVkIG9yXG4gKiBpbnN0YWxsIHRoZW0gd2l0aDogYG5wbSBpbnN0YWxsIGFzY2lpZG9jdG9yIGhpZ2hsaWdodC5qcyBhc2NpaWRvY3Rvci1oaWdobGlnaHQuanMgLS1zYXZlYFxuICpcbiAqIEBmaXJlcyBndi1wb2xpY3ktc3R1ZGlvOnNlbGVjdC1wb2xpY3kgLSBTZWxlY3QgcG9saWN5IGV2ZW50XG4gKiBAZmlyZXMgZ3YtcG9saWN5LXN0dWRpbzpzYXZlIC0gRXZlbnQgc2VudCB3aGVuIFwiU2F2ZVwiIGJ1dHRvbiBpcyBjbGlja2VkLCBpdCBjb250YWlucyB0aGUgd2hvbGUgZGVmaW5pdGlvbiBvZiB0aGUgQVBJXG4gKiBAZmlyZXMgZ3YtcG9saWN5LXN0dWRpbzpkZWJ1ZyAtIEV2ZW50IHNlbnQgd2hlbiB2YWxpZGF0aW9uIGJ1dHRvbiBvZiB0aGUgJ1RyeSBpdCcgdGFiIGlzIGNsaWNrZWQsIGl0IGNvbnRhaW5zIHRoZSB3aG9sZSBkZWZpbml0aW9uIG9mIHRoZSBBUEkgYW5kIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHJ5IGl0IHJlcXVlc3QuXG4gKlxuICogQGF0dHIge0FycmF5fSBwb2xpY2llcyAtIFBvbGljaWVzIGF2YWlsYWJsZVxuICogQGF0dHIge0FycmF5fSBzZXJ2aWNlcyAtIFNlcnZpY2VzIGF2YWlsYWJsZVxuICogQGF0dHIge0FycmF5fSByZXNvdXJjZVR5cGVzIC0gUmVzb3VyY2VzIHR5cGVzIGF2YWlsYWJsZVxuICogQGF0dHIge0FycmF5fSBwcm9wZXJ0eVByb3ZpZGVycyAtIFByb3ZpZGVycyBvZiBwcm9wZXJ0aWVzXG4gKiBAYXR0ciB7QXJyYXl9IGR5bmFtaWNQcm9wZXJ0eVNjaGVtYSAtIFNjaGVtYSBmb3IgdGhlIGR5bmFtaWMgcHJvcGVydHkgZm9ybVxuICogQGF0dHIge1N0cmluZ30gdGFiSWQgLSBDdXJyZW50IHRhYklkIHRvIGRpc3BsYXkgKGRlc2lnbiwgc2V0dGluZ3MsIHByb3BlcnRpZXMgb3IgcmVzb3VyY2VzKVxuICogQGF0dHIge09iamVjdH0gZGVmaW5pdGlvbiAtIFRoZSBkZWZpbml0aW9uIG9mIGZsb3dzXG4gKiBAYXR0ciB7T2JqZWN0fSBkb2N1bWVudGF0aW9uIC0gVGhlIGRvY3VtZW50YXRpb24gdG8gZGlzcGxheVxuICogQGF0dHIge09iamVjdH0gZmxvd1NjaGVtYSAtIFRoZSBmbG93IGZvcm0gY29uZmlndXJhdGlvbiB0byBkaXNwbGF5IGluIGd2LXNjaGVtYS1mb3JtIGNvbXBvbmVudFxuICogQGF0dHIge09iamVjdH0gY29uZmlndXJhdGlvblNjaGVtYSAtIFRoZSBmb3JtIGNvbmZpZ3VyYXRpb24gdG8gZGlzcGxheSBpbiBndi1zY2hlbWEtZm9ybSBjb21wb25lbnRcbiAqIEBhdHRyIHtPYmplY3R9IGNvbmZpZ3VyYXRpb25JbmZvcm1hdGlvbiAtIFRoZSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGFwaSBjb25maWd1cmF0aW9uIHRhYlxuICogQGF0dHIge0Jvb2xlYW59IGlzRGlydHkgLSB0cnVlIGlmIGNvbXBvbmVudCBpcyBkaXJ0eVxuICogQGF0dHIge0FycmF5fSBzZWxlY3RlZEZsb3dzSWQgLSBUaGUgc2VsZWN0ZWQgZmxvd3MgaWRcbiAqIEBhdHRyIHtCb29sZWFufSBzb3J0YWJsZSAtIHRydWUgaWYgZmxvd3MgYXJlIHNvcnRhYmxlXG4gKiBAYXR0ciB7Qm9vbGVhbn0gcmVhZG9ubHkgLSB0cnVlIGlmIHJlYWRvbmx5XG4gKiBAYXR0ciB7Qm9vbGVhbn0gcmVhZG9ubHktcGxhbnMgLSB0cnVlIGlmIHBsYW5zJyBmbG93cyBjYW4ndCBiZSBtb2RpZmllZFxuICogQGF0dHIge0Jvb2xlYW59IGNhbi1hZGQgLSB0cnVlIGlmIHVzZXIgY2FuIGFkZCBmbG93XG4gKiBAYXR0ciB7U3RyaW5nfSBmbG93c1RpdGxlIC0gZmxvd3MgbWVudSB0aXRsZVxuICogQGF0dHIge0Jvb2xlYW59IGhhcy1wb2xpY3ktZmlsdGVyIC0gdHJ1ZSBpZiBwb2xpY2llcyBoYXZlIG9uUmVxdWVzdC9vblJlc3BvbnNlIHByb3BlcnRpZXNcbiAqIEBhdHRyIHtCb29sZWFufSBjYW4tZGVidWcgLSB0cnVlIGlmIGRlYnVnIHRhYiBzaG91bGQgYmUgZGlzcGxheWVkXG4gKiBAYXR0ciB7T2JqZWN0fSBkZWJ1Z1Jlc3BvbnNlIC0gdHJ1ZSBpZiBkZWJ1ZyB0YWIgc2hvdWxkIGJlIGRpc3BsYXllZFxuICovXG5leHBvcnQgY2xhc3MgR3ZQb2xpY3lTdHVkaW8gZXh0ZW5kcyBLZXlib2FyZEVsZW1lbnQoTGl0RWxlbWVudCkge1xuICBzdGF0aWMgZ2V0IHByb3BlcnRpZXMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBvbGljaWVzOiB7IHR5cGU6IEFycmF5IH0sXG4gICAgICBzZXJ2aWNlczogeyB0eXBlOiBPYmplY3QgfSxcbiAgICAgIHJlc291cmNlVHlwZXM6IHsgdHlwZTogQXJyYXksIGF0dHJpYnV0ZTogJ3Jlc291cmNlLXR5cGVzJyB9LFxuICAgICAgcHJvcGVydHlQcm92aWRlcnM6IHsgdHlwZTogQXJyYXksIGF0dHJpYnV0ZTogJ3Byb3BlcnR5LXByb3ZpZGVycycgfSxcbiAgICAgIGR5bmFtaWNQcm9wZXJ0eVNjaGVtYTogeyB0eXBlOiBPYmplY3QsIGF0dHJpYnV0ZTogJ2R5bmFtaWMtcHJvcGVydHktc2NoZW1hJyB9LFxuICAgICAgdGFiSWQ6IHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICd0YWItaWQnIH0sXG4gICAgICBfdGFiSWQ6IHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBkZWZpbml0aW9uOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgX2RlZmluaXRpb246IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBkb2N1bWVudGF0aW9uOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgZmxvd1NjaGVtYTogeyB0eXBlOiBPYmplY3QsIGF0dHJpYnV0ZTogJ2Zsb3ctc2NoZW1hJyB9LFxuICAgICAgY29uZmlndXJhdGlvblNjaGVtYTogeyB0eXBlOiBPYmplY3QsIGF0dHJpYnV0ZTogJ2NvbmZpZ3VyYXRpb24tc2NoZW1hJyB9LFxuICAgICAgX2NvbmZpZ3VyYXRpb25TY2hlbWE6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBjb25maWd1cmF0aW9uSW5mb3JtYXRpb246IHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdjb25maWd1cmF0aW9uLWluZm9ybWF0aW9uJyB9LFxuICAgICAgaXNEaXJ0eTogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdkaXJ0eScsIHJlZmxlY3Q6IHRydWUgfSxcbiAgICAgIF9kcmFnUG9saWN5OiB7IHR5cGU6IE9iamVjdCwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX2Ryb3BQb2xpY3k6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBzZWxlY3RlZEZsb3dzSWQ6IHsgdHlwZTogQXJyYXksIGF0dHJpYnV0ZTogJ3NlbGVjdGVkLWZsb3dzLWlkJyB9LFxuICAgICAgX3NlbGVjdGVkRmxvd3NJZDogeyB0eXBlOiBBcnJheSwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX2N1cnJlbnRQb2xpY3lJZDogeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIF9zZWFyY2hQb2xpY3lRdWVyeTogeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIF9zZWFyY2hGbG93UXVlcnk6IHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfZmxvd1N0ZXBTY2hlbWE6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfY3VycmVudEZsb3dTdGVwOiB7IHR5cGU6IE9iamVjdCwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX3BvbGljeUZpbHRlcjogeyB0eXBlOiBBcnJheSwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX2Zsb3dGaWx0ZXI6IHsgdHlwZTogQXJyYXksIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIF9jdXJyZW50QXNrQ29uZmlybWF0aW9uOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIGhhc1Byb3BlcnRpZXM6IHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiAnaGFzLXByb3BlcnRpZXMnIH0sXG4gICAgICBfaGFzUHJvcGVydGllczogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBoYXNSZXNvdXJjZXM6IHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiAnaGFzLXJlc291cmNlcycgfSxcbiAgICAgIGhhc1BvbGljeUZpbHRlcjogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdoYXMtcG9saWN5LWZpbHRlcicgfSxcbiAgICAgIGZsb3dzVGl0bGU6IHsgdHlwZTogU3RyaW5nLCBhdHRyaWJ1dGU6ICdmbG93cy10aXRsZScgfSxcbiAgICAgIHNvcnRhYmxlOiB7IHR5cGU6IEJvb2xlYW4gfSxcbiAgICAgIGNhbkFkZDogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdjYW4tYWRkJyB9LFxuICAgICAgcmVhZG9ubHk6IHsgdHlwZTogQm9vbGVhbiB9LFxuICAgICAgcmVhZG9ubHlQbGFuczogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdyZWFkb25seS1wbGFucycgfSxcbiAgICAgIGNhbkRlYnVnOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ2Nhbi1kZWJ1ZycgfSxcbiAgICAgIF9jYW5EZWJ1ZzogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBkZWJ1Z1Jlc3BvbnNlOiB7IHR5cGU6IE9iamVjdCwgYXR0cmlidXRlOiAnZGVidWctcmVzcG9uc2UnIH0sXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc3R5bGVzKCkge1xuICAgIHJldHVybiBbXG4gICAgICBlbXB0eSxcbiAgICAgIG1ldGhvZHMsXG4gICAgICAvLyBsYW5ndWFnZT1DU1NcbiAgICAgIGNzc2BcbiAgICAgICAgOmhvc3Qge1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgLS1oZWlnaHQ6IHZhcigtLWd2LXBvbGljeS1zdHVkaW8tLWgsIGNhbGMoMTAwdmggLSAzMnB4KSk7XG4gICAgICAgICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQpO1xuICAgICAgICAgIC0taGVpZ2h0LWluLXRhYnM6IGNhbGModmFyKC0taGVpZ2h0KSAtIDI1cHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmJveCB7XG4gICAgICAgICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQpO1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIH1cblxuICAgICAgICAuZGVzaWduLFxuICAgICAgICAucHJvcGVydGllcyB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LXJlc2l6YWJsZS12aWV3cyB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAuZWRpdGFibGUtbmFtZSB7XG4gICAgICAgICAgcGFkZGluZzogMC41cmVtIDFyZW07XG4gICAgICAgICAgZm9udC1zaXplOiAxNnB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLmVkaXRhYmxlLW5hbWUgc3BhbiB7XG4gICAgICAgICAgY29sb3I6ICNiZmJmYmY7XG4gICAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLmZvcm1fX2NvbnRyb2wge1xuICAgICAgICAgIG1hcmdpbjogMC41cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtaW5wdXQge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgLmZsb3ctbmFtZSB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLmZsb3ctbmFtZS5kaXJ0eSB7XG4gICAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICAgIG9wYWNpdHk6IDAuODtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mbG93LW5hbWUgZ3YtaWNvbiB7XG4gICAgICAgICAgLS1ndi1pY29uLS1zOiAyNHB4O1xuICAgICAgICAgIG1hcmdpbi1yaWdodDogMC4ycmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmZsb3ctcGF0aCB7XG4gICAgICAgICAgbWFyZ2luLWxlZnQ6IDAuMnJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC50aXRsZV9tZXRob2RzIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogMC41cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLnR3by1jb2xzIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgfVxuXG4gICAgICAgIC50d28tY29scyA+ICoge1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgIH1cblxuICAgICAgICAubGVmdC1tZW51IHtcbiAgICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNkOWQ5ZDk7XG4gICAgICAgICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQtaW4tdGFicyk7XG4gICAgICAgIH1cblxuICAgICAgICAucmlnaHQtbWVudSB7XG4gICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2Q5ZDlkOTtcbiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodC1pbi10YWJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC50d28tY29scyA+ICo6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNkOWQ5ZDk7XG4gICAgICAgIH1cblxuICAgICAgICAuZmxvdy1zdGVwX19jb250YWluZXIge1xuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgaGVpZ2h0OiA5OSU7XG4gICAgICAgIH1cblxuICAgICAgICAuZmxvdy1zdGVwX19mb3JtIHtcbiAgICAgICAgICBwYWRkaW5nOiAwIDAuNXJlbTtcbiAgICAgICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgICAgfVxuXG4gICAgICAgIC5mbG93LXN0ZXBfX2Zvcm0tdGl0bGUge1xuICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMnJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LXRhYnMge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIH1cblxuICAgICAgICBndi1yZXNpemFibGUtdmlld3MsXG4gICAgICAgIGd2LXByb3BlcnRpZXMsXG4gICAgICAgIGd2LXJlc291cmNlcyB7XG4gICAgICAgICAgaGVpZ2h0OiB2YXIoLS1oZWlnaHQtaW4tdGFicyk7XG4gICAgICAgIH1cblxuICAgICAgICBndi1wcm9wZXJ0aWVzLFxuICAgICAgICBndi1yZXNvdXJjZXMge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtcHJvcGVydGllcy5wcm9wZXJ0aWVzIHtcbiAgICAgICAgICAtLWd2LXByb3BlcnRpZXMtdGFibGUtLWNvbG1nOiAxMHB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLmFwaS1zZXR0aW5ncyB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2JmYmZiZjtcbiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodC1pbi10YWJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5kZWJ1ZyB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2JmYmZiZjtcbiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodC1pbi10YWJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5hcGktc2V0dGluZ3MtaW5mb3JtYXRpb24ge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5hcGktc2V0dGluZ3MtaW5mb3JtYXRpb25fX2ljb24ge1xuICAgICAgICAgIC0tZ3YtaWNvbi0tYzogdmFyKC0tZ3YtdGhlbWUtY29sb3IsICM1YTc2ODQpO1xuICAgICAgICAgIC0tZ3YtaWNvbi1vcGFjaXR5LS1jOiB2YXIoLS1ndi10aGVtZS1jb2xvci1pbmZvLWxpZ2h0LCAjNjRiNWY2KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5hcGktc2V0dGluZ3MtaW5mb3JtYXRpb25fX2Jsb2NrcXVvdGUsXG4gICAgICAgIC5kZWJ1Zy1pbmZvcm1hdGlvbl9fYmxvY2txdW90ZSB7XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB2YXIoLS1ndi10aGVtZS1jb2xvciwgIzVhNzY4NCk7XG4gICAgICAgICAgbWFyZ2luOiAxNXB4O1xuICAgICAgICAgIHBhZGRpbmctbGVmdDogMTVweDtcbiAgICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIH1cblxuICAgICAgICAuZmxvdy1zZXR0aW5ncyBndi1zY2hlbWEtZm9ybSB7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgICBwYWRkaW5nOiAwLjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuc2VhcmNoIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3RyZXRjaDtcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LWlucHV0IHtcbiAgICAgICAgICBtYXJnaW46IDAuMnJlbSAwO1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgLmhlYWRlci1hY3Rpb25zLFxuICAgICAgICAuc2VhcmNoLXBvbGljaWVzIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICBtYXJnaW46IDAuNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zZWFyY2gtcG9saWNpZXMge1xuICAgICAgICAgIG1hcmdpbjogMS41cmVtIDAuNXJlbSAwLjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuZm9vdGVyLWFjdGlvbnMgPiBndi1idXR0b24uYnRuLWxhcmdlLFxuICAgICAgICAuZm9vdGVyLWFjdGlvbnMgPiBndi1vcHRpb24ge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgLmZvb3Rlci1hY3Rpb25zIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICBwYWRkaW5nOiAwLjVyZW0gMDtcbiAgICAgICAgICBtYXJnaW46IDAuNXJlbSAxNXB4O1xuICAgICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjYmZiZmJmO1xuICAgICAgICB9XG5cbiAgICAgICAgLmhlYWRlci1hY3Rpb25zIC50aXRsZSB7XG4gICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuM3JlbTtcbiAgICAgICAgICBjb2xvcjogI2JmYmZiZjtcbiAgICAgICAgICBmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICAgIHdpZHRoOiAyNDBweDtcbiAgICAgICAgICBtaW4taGVpZ2h0OiAyNXB4O1xuICAgICAgICB9XG5cbiAgICAgICAgLmhlYWRlci1hY3Rpb25zID4gKixcbiAgICAgICAgLnNlYXJjaC1wb2xpY2llcyA+ICoge1xuICAgICAgICAgIG1hcmdpbi1ib3R0b206IDFyZW07XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgXTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5pc0RpcnR5ID0gZmFsc2U7XG4gICAgdGhpcy5wb2xpY2llcyA9IFtdO1xuICAgIHRoaXMucmVzb3VyY2VUeXBlcyA9IFtdO1xuICAgIHRoaXMudGFiSWQgPSAnZGVzaWduJztcbiAgICB0aGlzLnNlbGVjdGVkRmxvd3NJZCA9IFtdO1xuICAgIHRoaXMuZmxvd3NUaXRsZSA9ICdGbG93cyc7XG4gICAgdGhpcy5zb3J0YWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuc2VydmljZXMgPSB7fTtcbiAgICB0aGlzLl9kZWZpbml0aW9uID0ge1xuICAgICAgZmxvd3M6IFtdLFxuICAgIH07XG4gICAgdGhpcy5fdGFicyA9IFt7IGlkOiAnZGVzaWduJywgdGl0bGU6ICdEZXNpZ24nLCBpY29uOiAnbmF2aWdhdGlvbjpleGNoYW5nZScgfV07XG4gICAgdGhpcy5fcG9saWN5RmlsdGVyID0gW107XG4gICAgdGhpcy5fZmxvd0ZpbHRlciA9IFtdO1xuICB9XG5cbiAgc2V0IGhhc1Byb3BlcnRpZXModmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGltcG9ydCgnLi4vb3JnYW5pc21zL2d2LXByb3BlcnRpZXMnKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fdGFicyA9IFsuLi50aGlzLl90YWJzLCB7IGlkOiAncHJvcGVydGllcycsIHRpdGxlOiAnUHJvcGVydGllcycsIGljb246ICdnZW5lcmFsOnNldHRpbmdzIzEnIH1dO1xuICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLl9oYXNQcm9wZXJ0aWVzID0gdmFsdWU7XG4gIH1cblxuICBnZXQgaGFzUHJvcGVydGllcygpIHtcbiAgICByZXR1cm4gdGhpcy5faGFzUHJvcGVydGllcztcbiAgfVxuXG4gIHNldCBoYXNSZXNvdXJjZXModmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGltcG9ydCgnLi4vb3JnYW5pc21zL2d2LXJlc291cmNlcycpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl90YWJzID0gWy4uLnRoaXMuX3RhYnMsIHsgaWQ6ICdyZXNvdXJjZXMnLCB0aXRsZTogJ1Jlc291cmNlcycsIGljb246ICdnZW5lcmFsOnNldHRpbmdzIzUnIH1dO1xuICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNldCBjYW5EZWJ1Zyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fdGFicyA9IFsuLi50aGlzLl90YWJzLCB7IGlkOiAnZGVidWcnLCB0aXRsZTogJ1RyeSBpdCcsIGljb246ICdjb250ZW50OnNlbmQnIH1dO1xuICAgIH1cbiAgfVxuXG4gIGdldCBfZmxvd0ZpbHRlck9wdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuZGVmaW5lZFBsYW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHsgaWQ6ICdhcGknLCB0aXRsZTogJ0FwaScsIGljb246ICdzaG9wcGluZzpib3gjMycgfSxcbiAgICAgICAgeyBpZDogJ3BsYW4nLCB0aXRsZTogJ1BsYW5zJywgaWNvbjogJ3Nob3BwaW5nOnNhbGUjMicgfSxcbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgc2V0IGhhc1BvbGljeUZpbHRlcih2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fcG9saWN5RmlsdGVyT3B0aW9ucyA9IFtcbiAgICAgICAgeyBpZDogJ29uUmVxdWVzdCcsIHRpdGxlOiAnUmVxdWVzdCcsIGljb246ICduYXZpZ2F0aW9uOmFycm93LWZyb20tbGVmdCcgfSxcbiAgICAgICAgeyBpZDogJ29uUmVzcG9uc2UnLCB0aXRsZTogJ1Jlc3BvbnNlJywgaWNvbjogJ25hdmlnYXRpb246YXJyb3ctZnJvbS1yaWdodCcgfSxcbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgc2V0IGNvbmZpZ3VyYXRpb25TY2hlbWEodmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuX3RhYnMuc3BsaWNlKDEsIDAsIHsgaWQ6ICdzZXR0aW5ncycsIHRpdGxlOiAnQ29uZmlndXJhdGlvbicsIGljb246ICdnZW5lcmFsOnNldHRpbmdzIzInIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbmZpZ3VyYXRpb25TY2hlbWEgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBjb25maWd1cmF0aW9uU2NoZW1hKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWd1cmF0aW9uU2NoZW1hO1xuICB9XG5cbiAgb25LZXlib2FyZCgpIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy5pc1ByZXNzZWQoS0VZUy5TaGlmdCwgS0VZUy5DdHJsLCBLRVlTLlNwYWNlKSkge1xuICAgICAgICBjb25zdCBzZWFyY2ggPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignI3NlYXJjaC1wb2xpY3knKTtcbiAgICAgICAgaWYgKHNlYXJjaCkge1xuICAgICAgICAgIHNlYXJjaC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNQcmVzc2VkKEtFWVMuQ3RybCwgS0VZUy5TcGFjZSkpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJyNzZWFyY2gtZmxvdycpO1xuICAgICAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgICAgc2VhcmNoLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzUHJlc3NlZChLRVlTLkVzYykpIHtcbiAgICAgICAgdGhpcy5fY2xvc2VGbG93U3RlcEZvcm0oKTtcbiAgICAgICAgdGhpcy5fb25DbG9zZURvY3VtZW50YXRpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXQgdGFiSWQodGFiSWQpIHtcbiAgICBpZiAodGFiSWQgIT0gbnVsbCAmJiBbJ2Rlc2lnbicsICdzZXR0aW5ncycsICdwcm9wZXJ0aWVzJywgJ3Jlc291cmNlcycsICdkZWJ1ZyddLmluY2x1ZGVzKHRhYklkKSkge1xuICAgICAgdGhpcy5fdGFiSWQgPSB0YWJJZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdGFiSWQgPSAnZGVzaWduJztcbiAgICB9XG4gIH1cblxuICBnZXQgdGFiSWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYklkO1xuICB9XG5cbiAgc2V0IGRlZmluaXRpb24oZGVmaW5pdGlvbikge1xuICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICBjb25zdCBmbG93cyA9IHRoaXMuX2dlbmVyYXRlRmxvd3NJZChkZWZpbml0aW9uLmZsb3dzKTtcbiAgICAgIGNvbnN0IHJlc291cmNlcyA9IHRoaXMuX2dlbmVyYXRlSWQoJ3Jlc291cmNlLScsIGRlZmluaXRpb24ucmVzb3VyY2VzKTtcbiAgICAgIGNvbnN0IHBsYW5zID1cbiAgICAgICAgZGVmaW5pdGlvbi5wbGFucyA9PSBudWxsXG4gICAgICAgICAgPyBbXVxuICAgICAgICAgIDogZGVmaW5pdGlvbi5wbGFucy5tYXAoKHBsYW4pID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucGxhbiwgZmxvd3M6IHRoaXMuX2dlbmVyYXRlUGxhbkZsb3dzSWQocGxhbikgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgdGhpcy5faW5pdGlhbERlZmluaXRpb24gPSB7IC4uLmRlZmluaXRpb24sIGZsb3dzLCByZXNvdXJjZXMsIHBsYW5zIH07XG4gICAgICB0aGlzLl9kZWZpbml0aW9uID0gZGVlcENsb25lKHRoaXMuX2luaXRpYWxEZWZpbml0aW9uKTtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc2VsZWN0Rmlyc3RGbG93KCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRlZmluaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmluaXRpb247XG4gIH1cblxuICBzZXQgc2VsZWN0ZWRGbG93c0lkKHNlbGVjdGVkRmxvd3NJZCkge1xuICAgIGlmIChzZWxlY3RlZEZsb3dzSWQgIT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KHNlbGVjdGVkRmxvd3NJZCkpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkRmxvd3NJZCA9IHNlbGVjdGVkRmxvd3NJZC5maWx0ZXIoKGlkKSA9PiB0aGlzLl9maW5kRmxvd0J5SWQoaWQpICE9IG51bGwpO1xuICAgICAgaWYgKHNlbGVjdGVkRmxvd3NJZC5sZW5ndGggIT09IHRoaXMuX3NlbGVjdGVkRmxvd3NJZC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0Rmlyc3RGbG93KHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBzZWxlY3RlZEZsb3dzSWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkRmxvd3NJZC5maWx0ZXIoKGlkKSA9PiB0aGlzLl9maW5kRmxvd0J5SWQoaWQpICE9IG51bGwpO1xuICB9XG5cbiAgX3VwZGF0ZVNlbGVjdGVkRmxvd3Moc2VsZWN0ZWRGbG93c0lkKSB7XG4gICAgdGhpcy5zZWxlY3RlZEZsb3dzSWQgPSBzZWxlY3RlZEZsb3dzSWQ7XG4gICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnc2VsZWN0LWZsb3dzJywgeyBmbG93czogdGhpcy5zZWxlY3RlZEZsb3dzSWQgfSk7XG4gIH1cblxuICBfc2VsZWN0Rmlyc3RGbG93KGRpc3BhdGNoID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZsb3dzSWQubGVuZ3RoID09PSAwKSB7XG4gICAgICBsZXQgY2FuZGlkYXRlID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLmRlZmluZWRGbG93cy5sZW5ndGggPiAwICYmIHRoaXMuZGVmaW5lZEZsb3dzWzBdLl9pZCAhPSBudWxsKSB7XG4gICAgICAgIGNhbmRpZGF0ZSA9IHRoaXMuZGVmaW5lZEZsb3dzWzBdO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmRlZmluZWRQbGFucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHBsYW4gPSB0aGlzLmRlZmluZWRQbGFucy5maW5kKChwbGFuKSA9PiBwbGFuLmZsb3dzICE9IG51bGwgJiYgcGxhbi5mbG93cy5sZW5ndGggPiAwICYmIHBsYW4uZmxvd3NbMF0uX2lkICE9IG51bGwpO1xuICAgICAgICBpZiAocGxhbikge1xuICAgICAgICAgIGNhbmRpZGF0ZSA9IHBsYW4uZmxvd3NbMF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjYW5kaWRhdGUgIT0gbnVsbCkge1xuICAgICAgICBpZiAoZGlzcGF0Y2gpIHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZEZsb3dzKFtjYW5kaWRhdGUuX2lkXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZsb3dzSWQgPSBbY2FuZGlkYXRlLl9pZF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfZ2V0Rmxvd0VsZW1lbnQoZmxvd0lkKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGBbaWQ9XCIke2Zsb3dJZH1cIl1gKTtcbiAgfVxuXG4gIF9vbkRyYWdFbmRQb2xpY3koKSB7XG4gICAgdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2d2LWZsb3cnKS5mb3JFYWNoKChlKSA9PiBlLm9uRHJhZ0VuZCgpKTtcbiAgfVxuXG4gIGFzeW5jIF9vbkRyb3BQb2xpY3koeyBkZXRhaWwgfSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9hc2tUb1ZhbGlkYXRlRm9ybXMoKTtcblxuICAgICAgY29uc3QgcG9saWN5ID0gZGV0YWlsLnBvbGljeTtcbiAgICAgIGNvbnN0IHRhcmdldEZsb3cgPSB0aGlzLl9maW5kRmxvd0J5SWQoZGV0YWlsLmZsb3dJZCk7XG5cbiAgICAgIGxldCBuYW1lID0gcG9saWN5Lm5hbWU7XG4gICAgICBsZXQgZGVzY3JpcHRpb24gPSAnJztcbiAgICAgIGxldCBjb25maWd1cmF0aW9uID0ge307XG4gICAgICBsZXQgX2lkO1xuICAgICAgbGV0IF9uZXcgPSBmYWxzZTtcbiAgICAgIGlmIChkZXRhaWwuZmxvd1N0ZXApIHtcbiAgICAgICAgX2lkID0gZGV0YWlsLmZsb3dTdGVwLl9pZDtcbiAgICAgICAgbmFtZSA9IGRldGFpbC5mbG93U3RlcC5uYW1lO1xuICAgICAgICBkZXNjcmlwdGlvbiA9IGRldGFpbC5mbG93U3RlcC5kZXNjcmlwdGlvbiB8fCAnJztcbiAgICAgICAgY29uZmlndXJhdGlvbiA9IGRldGFpbC5mbG93U3RlcC5jb25maWd1cmF0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX2lkID0gdGhpcy5fZ2VuZXJhdGVGbG93U3RlcElkKHRhcmdldEZsb3cuX2lkLCBkZXRhaWwuZmxvd0tleSwgZGV0YWlsLnBvc2l0aW9uKTtcbiAgICAgICAgX25ldyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZsb3dTdGVwID0geyBfaWQsIF9uZXcsIG5hbWUsIHBvbGljeTogcG9saWN5LmlkLCBkZXNjcmlwdGlvbiwgZW5hYmxlZDogdHJ1ZSwgY29uZmlndXJhdGlvbiB9O1xuICAgICAgY29uc3Qgc291cmNlRmxvdyA9IGRldGFpbC5zb3VyY2VGbG93SWQgIT0gbnVsbCA/IHRoaXMuX2ZpbmRGbG93QnlJZChkZXRhaWwuc291cmNlRmxvd0lkKSA6IHRhcmdldEZsb3c7XG5cbiAgICAgIGlmIChkZXRhaWwuc291cmNlUG9zaXRpb24gIT0gbnVsbCkge1xuICAgICAgICBpZiAoZGV0YWlsLnNvdXJjZUZsb3dLZXkgJiYgZGV0YWlsLnNvdXJjZUZsb3dLZXkgIT09IGRldGFpbC5mbG93S2V5KSB7XG4gICAgICAgICAgc291cmNlRmxvd1tkZXRhaWwuc291cmNlRmxvd0tleV0uc3BsaWNlKGRldGFpbC5zb3VyY2VQb3NpdGlvbiwgMSk7XG4gICAgICAgICAgdGFyZ2V0Rmxvd1tkZXRhaWwuZmxvd0tleV0uc3BsaWNlKGRldGFpbC5wb3NpdGlvbiwgMCwgZmxvd1N0ZXApO1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Rmxvd1N0ZXAgIT0gbnVsbCAmJiB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5faWQgPT09IF9pZCkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudEZsb3dTdGVwLmdyb3VwID0gZGV0YWlsLmZsb3dLZXk7XG4gICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIHVwZGF0ZSBzY2hlbWEgYWZ0ZXIgY2hhbmdlIHJlcXVlc3QgdG8gcmVzcG9uc2Ugb3IgaW52ZXJzZVxuICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy5idWlsZFNjaGVtYSh0aGlzLl9jdXJyZW50Rmxvd1N0ZXAucG9saWN5KTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NldEN1cnJlbnRGbG93U3RlcCh0aGlzLl9jdXJyZW50Rmxvd1N0ZXAsIHNjaGVtYSwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLl9nZXRGbG93RWxlbWVudCh0YXJnZXRGbG93Ll9pZCkucmVxdWVzdFVwZGF0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZGV0YWlsLnBvc2l0aW9uID4gZGV0YWlsLnNvdXJjZVBvc2l0aW9uKSB7XG4gICAgICAgICAgICB0YXJnZXRGbG93W2RldGFpbC5mbG93S2V5XS5zcGxpY2UoZGV0YWlsLnBvc2l0aW9uLCAwLCBmbG93U3RlcCk7XG4gICAgICAgICAgICBzb3VyY2VGbG93W2RldGFpbC5mbG93S2V5XS5zcGxpY2UoZGV0YWlsLnNvdXJjZVBvc2l0aW9uLCAxKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc291cmNlRmxvd1tkZXRhaWwuZmxvd0tleV0uc3BsaWNlKGRldGFpbC5zb3VyY2VQb3NpdGlvbiwgMSk7XG4gICAgICAgICAgICB0YXJnZXRGbG93W2RldGFpbC5mbG93S2V5XS5zcGxpY2UoZGV0YWlsLnBvc2l0aW9uLCAwLCBmbG93U3RlcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEZvcmNlIFJlZnJlc2ggc291cmNlIGZsb3cgZWxlbWVudCB3aGVuIG1vdmUgdG8gb3RoZXIgZmxvd1xuICAgICAgICBpZiAodGFyZ2V0Rmxvdy5faWQgIT09IHNvdXJjZUZsb3cuX2lkKSB7XG4gICAgICAgICAgdGhpcy5fZ2V0Rmxvd0VsZW1lbnQodGFyZ2V0Rmxvdy5faWQpLnJlcXVlc3RVcGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0Rmxvd1tkZXRhaWwuZmxvd0tleV0uc3BsaWNlKGRldGFpbC5wb3NpdGlvbiwgMCwgZmxvd1N0ZXApO1xuICAgICAgICBjb25zdCBjdXJyZW50Rmxvd0Zvcm0gPSB0aGlzLl9nZXRGbG93U3RlcEZvcm0oKTtcbiAgICAgICAgaWYgKGN1cnJlbnRGbG93Rm9ybSA9PSBudWxsIHx8IGN1cnJlbnRGbG93Rm9ybS5kaXJ0eSAhPT0gdHJ1ZSkge1xuICAgICAgICAgIGxldCBzdGVwID0gdGFyZ2V0Rmxvd1tkZXRhaWwuZmxvd0tleV1bZGV0YWlsLnBvc2l0aW9uXTtcbiAgICAgICAgICBpZiAoc3RlcCA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBXaGVuIGNvbmZpcm0gbG9zZSBjaGFuZ2UgYWZ0ZXIgZHJvcCBwb2xpY3lcbiAgICAgICAgICAgIHN0ZXAgPSB0YXJnZXRGbG93W2RldGFpbC5mbG93S2V5XVtkZXRhaWwucG9zaXRpb24gLSAxXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGV0YWlsLmNhbmNlbEVkaXQgIT09IHRydWUpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9lZGl0Rmxvd1N0ZXAoeyBzdGVwLCBwb2xpY3ksIGZsb3c6IHRhcmdldEZsb3csIGdyb3VwOiBkZXRhaWwuZmxvd0tleSB9KTtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmbG93RWxlbWVudCA9IHRoaXMuX2dldEZsb3dFbGVtZW50KHRhcmdldEZsb3cuX2lkKTtcbiAgICAgICAgICAgICAgICBmbG93RWxlbWVudC5zZWxlY3RlZFN0ZXBJZCA9IHN0ZXAuX2lkO1xuICAgICAgICAgICAgICAgIGZsb3dFbGVtZW50LnJlcXVlc3RVcGRhdGUoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRhcmdldEZsb3cuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgIHNvdXJjZUZsb3cuX2RpcnR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gICAgICB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnZ3YtZmxvdycpLmZvckVhY2goKGd2RmxvdykgPT4gZ3ZGbG93LnJlbW92ZUNhbmRpZGF0ZSgpKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9kcmFnUG9saWN5ID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZHJvcFBvbGljeSA9IG51bGw7XG4gICAgICB9LCAwKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBfb25EZWxldGVQb2xpY3koeyBkZXRhaWwgfSkge1xuICAgIGNvbnN0IHRhcmdldEZsb3cgPSB0aGlzLl9maW5kRmxvd0J5SWQoZGV0YWlsLmZsb3dJZCk7XG4gICAgdGFyZ2V0Rmxvd1tkZXRhaWwuZmxvd0tleV0uc3BsaWNlKGRldGFpbC5wb3NpdGlvbiwgMSk7XG4gICAgdGFyZ2V0Rmxvdy5fZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gICAgaWYgKGRldGFpbC50YXJnZXQuZWRpdGluZykge1xuICAgICAgdGhpcy5fY2xvc2VGbG93U3RlcEZvcm0odHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuX2dldEZsb3dFbGVtZW50KGRldGFpbC5mbG93SWQpLnJlcXVlc3RVcGRhdGUoKTtcbiAgfVxuXG4gIF9vbkRlc2lnbigpIHtcbiAgICB0aGlzLl9jaGFuZ2VUYWIoJ2Rlc2lnbicpO1xuICAgIHRoaXMuX3NwbGl0TWFpblZpZXdzKCk7XG4gIH1cblxuICBidWlsZFNjaGVtYSh7IHNjaGVtYSB9KSB7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSB7XG4gICAgICB0aXRsZTogJ0Rlc2NyaXB0aW9uJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24gb2YgZmxvdyBzdGVwJyxcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIH07XG4gICAgaWYgKHNjaGVtYSkge1xuICAgICAgY29uc3QganNvblNjaGVtYSA9IHR5cGVvZiBzY2hlbWEgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShzY2hlbWEpIDogc2NoZW1hO1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHsgZGVzY3JpcHRpb24sIC4uLmpzb25TY2hlbWEucHJvcGVydGllcyB9O1xuICAgICAgcmV0dXJuIHsgLi4uanNvblNjaGVtYSwgcHJvcGVydGllcyB9O1xuICAgIH1cbiAgICByZXR1cm4geyBwcm9wZXJ0aWVzOiB7IGRlc2NyaXB0aW9uIH0gfTtcbiAgfVxuXG4gIGFzeW5jIF9lZGl0Rmxvd1N0ZXAoeyBzdGVwLCBmbG93LCBwb2xpY3ksIGdyb3VwIH0pIHtcbiAgICBpZiAoc3RlcCkge1xuICAgICAgdGhpcy5fY3VycmVudFBvbGljeUlkID0gcG9saWN5LmlkO1xuICAgICAgY29uc3QgY3VycmVudEZsb3dTdGVwID0geyBmbG93LCBzdGVwLCBwb2xpY3ksIGdyb3VwIH07XG4gICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLmJ1aWxkU2NoZW1hKHBvbGljeSk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLl9zZXRDdXJyZW50Rmxvd1N0ZXAoY3VycmVudEZsb3dTdGVwLCBzY2hlbWEpO1xuICAgICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZEZsb3dzKFtmbG93Ll9pZF0pO1xuICAgICAgICB0aGlzLl9zcGxpdE1haW5WaWV3cygpO1xuICAgICAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2d2LXBvbGljeS1zdHVkaW86a2VlcC1kb2N1bWVudGF0aW9uLWNsb3NlJykgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuX29uT3BlbkRvY3VtZW50YXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5fY2xvc2VGbG93U3RlcEZvcm0oKTtcbiAgICAgIHRoaXMuX21heGltaXplVG9wVmlldygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9vbkVkaXRGbG93U3RlcCh7IGRldGFpbDogeyBzdGVwLCBmbG93LCBwb2xpY3ksIGdyb3VwIH0gfSkge1xuICAgIHJldHVybiB0aGlzLl9lZGl0Rmxvd1N0ZXAoeyBzdGVwLCBmbG93LCBwb2xpY3ksIGdyb3VwIH0pO1xuICB9XG5cbiAgX2dldFJlc2l6YWJsZVZpZXdzKCkge1xuICAgIHJldHVybiB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignZ3YtcmVzaXphYmxlLXZpZXdzJyk7XG4gIH1cblxuICBfbWF4aW1pemVUb3BWaWV3KCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRmxvd3NJZC5sZW5ndGggPD0gMSkge1xuICAgICAgdGhpcy5fZ2V0UmVzaXphYmxlVmlld3MoKS5tYXhpbWl6ZVRvcCgpO1xuICAgIH1cbiAgfVxuXG4gIF9tYXhpbWl6ZUJvdHRvbVZpZXcoKSB7XG4gICAgdGhpcy5fZ2V0UmVzaXphYmxlVmlld3MoKS5tYXhpbWl6ZUJvdHRvbSgpO1xuICB9XG5cbiAgX3NwbGl0TWFpblZpZXdzKCkge1xuICAgIHRoaXMuX2dldFJlc2l6YWJsZVZpZXdzKCkuc3BsaXQoKTtcbiAgfVxuXG4gIF9vbkNoYW5nZUZsb3dTdGVwU3RhdGUoeyBkZXRhaWwgfSkge1xuICAgIGNvbnN0IHRhcmdldEZsb3cgPSB0aGlzLl9maW5kRmxvd0J5SWQoZGV0YWlsLmZsb3dJZCk7XG4gICAgY29uc3Qgc3RlcCA9IHRhcmdldEZsb3dbZGV0YWlsLmZsb3dLZXldW2RldGFpbC5wb3NpdGlvbl07XG4gICAgc3RlcC5lbmFibGVkID0gZGV0YWlsLmVuYWJsZWQ7XG4gICAgdGFyZ2V0Rmxvdy5fZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gIH1cblxuICBhc3luYyBfb25DbG9zZUZsb3dTdGVwRm9ybSgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fY2xvc2VGbG93U3RlcEZvcm0oKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9jbG9zZUZsb3dTdGVwRm9ybShmb3JjZSA9IGZhbHNlKSB7XG4gICAgYXdhaXQgdGhpcy5fc2V0Q3VycmVudEZsb3dTdGVwKG51bGwsIG51bGwsIGZvcmNlKTtcbiAgfVxuXG4gIGFzeW5jIF9hc2tUb1ZhbGlkYXRlRm9ybXMoKSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPT0gbnVsbCkge1xuICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IHRydWU7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5fc3VibWl0T3JDb25maXJtRm9ybXMoKSkudGhlbigoZm9ybXMpID0+IHtcbiAgICAgICAgaWYgKGZvcm1zLmZpbHRlcigocikgPT4gciAhPSBudWxsKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5fZGVmaW5pdGlvbiA9IHRoaXMuX2J1aWxkRGVmaW5pdGlvblRvU2F2ZSgpO1xuICAgICAgICAgIHRoaXMuZ2V0Q2hpbGRyZW4oKS5mb3JFYWNoKChlKSA9PiBlLnJlcXVlc3RVcGRhdGUoKSk7XG4gICAgICAgICAgLy8gUmVmcmVzaCBpZiBsb3NlIGNoYW5nZXMgbG9zdCBjdXJyZW50IHN0ZXAgc2VsZWN0aW9uXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrQ3VycmVudEZsb3dTdGVwKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldENoaWxkcmVuKCkuZm9yRWFjaCgoZSkgPT4gZS5yZXF1ZXN0VXBkYXRlKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgICAgICAgICAgICByZXR1cm4gZm9ybXM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gbnVsbDtcbiAgICAgICAgICByZXR1cm4gZm9ybXM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2FzayBhbHJlYWR5IHdhaXRpbmcnKTtcbiAgfVxuXG4gIGFzeW5jIF9zZXRDdXJyZW50Rmxvd1N0ZXAoY3VycmVudEZsb3dTdGVwLCBmbG93U3RlcFNjaGVtYSwgZm9yY2UgPSBmYWxzZSkge1xuICAgIGlmICghZm9yY2UpIHtcbiAgICAgIGF3YWl0IHRoaXMuX2Fza1RvVmFsaWRhdGVGb3JtcygpO1xuICAgIH1cblxuICAgIGNvbnN0IHNjaGVtYSA9IGRlZXBDbG9uZShmbG93U3RlcFNjaGVtYSk7XG4gICAgaWYgKGN1cnJlbnRGbG93U3RlcCAhPSBudWxsKSB7XG4gICAgICBjb25zdCBjb25maWd1cmF0aW9uID1cbiAgICAgICAgdHlwZW9mIGN1cnJlbnRGbG93U3RlcC5zdGVwLmNvbmZpZ3VyYXRpb24gPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyBKU09OLnBhcnNlKGN1cnJlbnRGbG93U3RlcC5zdGVwLmNvbmZpZ3VyYXRpb24pXG4gICAgICAgICAgOiBjdXJyZW50Rmxvd1N0ZXAuc3RlcC5jb25maWd1cmF0aW9uO1xuICAgICAgY29uc3Qgc3RlcCA9IHsgLi4uY3VycmVudEZsb3dTdGVwLnN0ZXAsIGNvbmZpZ3VyYXRpb24gfTtcblxuICAgICAgY29uc3QgX2luaXRpYWxWYWx1ZXMgPSB7IC4uLnN0ZXAuY29uZmlndXJhdGlvbiwgZGVzY3JpcHRpb246IHN0ZXAuZGVzY3JpcHRpb24gfTtcbiAgICAgIHRoaXMuX2N1cnJlbnRGbG93U3RlcCA9IHsgLi4uY3VycmVudEZsb3dTdGVwLCBzdGVwLCBfaW5pdGlhbFZhbHVlcyB9O1xuXG4gICAgICBpZiAoZmxvd1N0ZXBTY2hlbWEgJiYgZmxvd1N0ZXBTY2hlbWEucHJvcGVydGllcy5zY29wZSkge1xuICAgICAgICBjb25zdCBfZW51bSA9IHNjaGVtYS5wcm9wZXJ0aWVzLnNjb3BlLmVudW07XG4gICAgICAgIGlmIChfZW51bS5maW5kKChzY29wZSkgPT4gWydSRVFVRVNUJywgJ1JFUVVFU1RfQ09OVEVOVCcsICdSRVNQT05TRScsICdSRVNQT05TRV9DT05URU5UJ10uaW5jbHVkZXMoc2NvcGUpKSAhPSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWQgPSB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuZ3JvdXAgPT09ICdwcmUnID8gWydSRVFVRVNUJywgJ1JFUVVFU1RfQ09OVEVOVCddIDogWydSRVNQT05TRScsICdSRVNQT05TRV9DT05URU5UJ107XG4gICAgICAgICAgc2NoZW1hLnByb3BlcnRpZXMuc2NvcGUuZW51bSA9IF9lbnVtLmZpbHRlcigoc2NvcGUpID0+IGZpbHRlcmVkLmluY2x1ZGVzKHNjb3BlKSk7XG4gICAgICAgICAgY29uc3Qgc2NvcGUgPSB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5jb25maWd1cmF0aW9uLnNjb3BlO1xuICAgICAgICAgIGlmIChzY29wZSA9PSBudWxsIHx8ICFzY2hlbWEucHJvcGVydGllcy5zY29wZS5lbnVtLmluY2x1ZGVzKHNjb3BlKSkge1xuICAgICAgICAgICAgc2NoZW1hLnByb3BlcnRpZXMuc2NvcGUuZGVmYXVsdCA9IHNjaGVtYS5wcm9wZXJ0aWVzLnNjb3BlLmVudW1bMF07XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5jb25maWd1cmF0aW9uLnNjb3BlID0gc2NoZW1hLnByb3BlcnRpZXMuc2NvcGUuZW51bVswXTtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5faW5pdGlhbFZhbHVlcy5zY29wZSA9IHNjaGVtYS5wcm9wZXJ0aWVzLnNjb3BlLmVudW1bMF07XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudEZsb3dTdGVwLl92YWx1ZXMpIHtcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudEZsb3dTdGVwLl92YWx1ZXMuc2NvcGUgPSBzY2hlbWEucHJvcGVydGllcy5zY29wZS5lbnVtWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2Zsb3dTdGVwU2NoZW1hID0gc2NoZW1hO1xuICB9XG5cbiAgX3JlZnJlc2goY2xvc2VTdGVwRm9ybSA9IHRydWUpIHtcbiAgICBpZiAoY2xvc2VTdGVwRm9ybSkge1xuICAgICAgdGhpcy5fY2xvc2VGbG93U3RlcEZvcm0odHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuX2RlZmluaXRpb24gPSBkZWVwQ2xvbmUodGhpcy5fZGVmaW5pdGlvbik7XG4gIH1cblxuICBhc3luYyBfb25TZWxlY3RGbG93cyh7IGRldGFpbCB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2Nsb3NlRmxvd1N0ZXBGb3JtKCk7XG4gICAgICB0aGlzLl9vbkNsb3NlRG9jdW1lbnRhdGlvbigpO1xuICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRGbG93cyhkZXRhaWwuZmxvd3MpO1xuICAgICAgdGhpcy5fb25EZXNpZ24oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfb25PcGVuRG9jdW1lbnRhdGlvbkZyb21NZW51KHsgZGV0YWlsOiB7IHBvbGljeSB9IH0pIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuZG9jdW1lbnRhdGlvbiA9PSBudWxsIHx8IHRoaXMuZG9jdW1lbnRhdGlvbi5pZCAhPT0gcG9saWN5LmlkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX2Nsb3NlRmxvd1N0ZXBGb3JtKCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRQb2xpY3lJZCA9IHBvbGljeS5pZDtcbiAgICAgICAgaWYgKHRoaXMuZ2V0U2VsZWN0ZWRGbG93KCkpIHtcbiAgICAgICAgICB0aGlzLl9zcGxpdE1haW5WaWV3cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX21heGltaXplQm90dG9tVmlldygpO1xuICAgICAgICB9XG4gICAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ2ZldGNoLWRvY3VtZW50YXRpb24nLCB7IHBvbGljeSB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG5cbiAgX2ZldGNoRG9jdW1lbnRhdGlvbihwb2xpY3kpIHtcbiAgICBpZiAodGhpcy5kb2N1bWVudGF0aW9uID09IG51bGwgfHwgdGhpcy5kb2N1bWVudGF0aW9uLmlkICE9PSBwb2xpY3kuaWQpIHtcbiAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ2ZldGNoLWRvY3VtZW50YXRpb24nLCB7IHBvbGljeSB9KTtcbiAgICB9XG4gIH1cblxuICBfb25PcGVuRG9jdW1lbnRhdGlvbigpIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEZsb3dTdGVwICYmIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5wb2xpY3kpIHtcbiAgICAgIHRoaXMuX2ZldGNoRG9jdW1lbnRhdGlvbih0aGlzLl9jdXJyZW50Rmxvd1N0ZXAucG9saWN5KTtcbiAgICB9XG4gIH1cblxuICBfb25PcGVuRG9jdW1lbnRhdGlvbkZyb21Gb3JtKCkge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdndi1wb2xpY3ktc3R1ZGlvOmtlZXAtZG9jdW1lbnRhdGlvbi1jbG9zZScpO1xuICAgIHRoaXMuX29uT3BlbkRvY3VtZW50YXRpb24oKTtcbiAgfVxuXG4gIF9maW5kRmxvd0NvbGxlY3Rpb24oZmxvd0lkKSB7XG4gICAgY29uc3QgcGxhbiA9IHRoaXMuZGVmaW5lZFBsYW5zLmZpbmQoKHBsYW4pID0+IHBsYW4uZmxvd3MuZmluZCgoZmxvdykgPT4gZmxvdy5faWQgPT09IGZsb3dJZCkgIT0gbnVsbCk7XG4gICAgcmV0dXJuIHsgcGxhbiwgZmxvd3M6IHBsYW4gIT0gbnVsbCA/IHBsYW4uZmxvd3MgOiB0aGlzLmRlZmluZWRGbG93cyB9O1xuICB9XG5cbiAgX2ZpbmRGbG93QnlJZChmbG93SWQpIHtcbiAgICBsZXQgZmxvdyA9IHRoaXMuZGVmaW5lZEZsb3dzLmZpbmQoKGZsb3cpID0+IGZsb3cuX2lkID09PSBmbG93SWQpO1xuICAgIGlmIChmbG93ID09IG51bGwpIHtcbiAgICAgIGNvbnN0IHBsYW5zRmxvd3MgPSB0aGlzLmRlZmluZWRQbGFucy5tYXAoKHBsYW4pID0+IHBsYW4uZmxvd3MpLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYy5jb25jYXQodmFsKSwgW10pO1xuICAgICAgZmxvdyA9IHBsYW5zRmxvd3MuZmluZCgoZmxvdykgPT4gZmxvdy5faWQgPT09IGZsb3dJZCk7XG4gICAgfVxuICAgIHJldHVybiBmbG93O1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRGbG93KGluZGV4ID0gMCkge1xuICAgIGNvbnN0IHNlbGVjdGVkRmxvd0lkID0gdGhpcy5zZWxlY3RlZEZsb3dzSWRbaW5kZXhdO1xuICAgIHJldHVybiB0aGlzLl9maW5kRmxvd0J5SWQoc2VsZWN0ZWRGbG93SWQpO1xuICB9XG5cbiAgX29uVGFyZ2V0UG9saWN5KHsgZGV0YWlsIH0pIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9PSBudWxsKSB7XG4gICAgICB0aGlzLl9kcmFnUG9saWN5ID0gZGV0YWlsO1xuICAgIH1cbiAgfVxuXG4gIF9vbkNoYW5nZUZsb3dTdGVwKHsgZGV0YWlsIH0pIHtcbiAgICB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuX3ZhbHVlcyA9IGRldGFpbC52YWx1ZXM7XG4gIH1cblxuICBfd3JpdGVGbG93U3RlcCh2YWx1ZXMpIHtcbiAgICBjb25zdCB7IGRlc2NyaXB0aW9uLCAuLi5jb25maWd1cmF0aW9uIH0gPSB2YWx1ZXM7XG4gICAgaWYgKFxuICAgICAgdGhpcy5fY3VycmVudEZsb3dTdGVwLnN0ZXAuX25ldyB8fFxuICAgICAgdGhpcy5fY3VycmVudEZsb3dTdGVwLnN0ZXAuZGVzY3JpcHRpb24gIT09IGRlc2NyaXB0aW9uIHx8XG4gICAgICAhZGVlcEVxdWFsKHRoaXMuX2N1cnJlbnRGbG93U3RlcC5zdGVwLmNvbmZpZ3VyYXRpb24sIGNvbmZpZ3VyYXRpb24pXG4gICAgKSB7XG4gICAgICBjb25zdCBmbG93ID0gdGhpcy5fZmluZEZsb3dCeUlkKHRoaXMuX2N1cnJlbnRGbG93U3RlcC5mbG93Ll9pZCk7XG4gICAgICBjb25zdCBwb3NpdGlvbiA9IGZsb3dbdGhpcy5fY3VycmVudEZsb3dTdGVwLmdyb3VwXS5maW5kSW5kZXgoKHN0ZXApID0+IHN0ZXAuX2lkID09PSB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5faWQpO1xuXG4gICAgICBmbG93W3RoaXMuX2N1cnJlbnRGbG93U3RlcC5ncm91cF1bcG9zaXRpb25dLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgICBmbG93W3RoaXMuX2N1cnJlbnRGbG93U3RlcC5ncm91cF1bcG9zaXRpb25dLmNvbmZpZ3VyYXRpb24gPSBkZWVwQ2xvbmUoY29uZmlndXJhdGlvbik7XG4gICAgICBkZWxldGUgZmxvd1t0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuZ3JvdXBdW3Bvc2l0aW9uXS5fbmV3O1xuICAgICAgZmxvd1t0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuZ3JvdXBdW3Bvc2l0aW9uXS5fZGlydHkgPSB0cnVlO1xuICAgICAgZmxvdy5fZGlydHkgPSB0cnVlO1xuICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5mbG93ID0gZmxvdztcbiAgICAgIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5zdGVwID0gZmxvd1t0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuZ3JvdXBdW3Bvc2l0aW9uXTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfb25TdWJtaXRGbG93U3RlcCh7IGRldGFpbCB9KSB7XG4gICAgdGhpcy5fd3JpdGVGbG93U3RlcChkZXRhaWwudmFsdWVzKTtcbiAgICBhd2FpdCB0aGlzLnJlcXVlc3RVcGRhdGUoJ19kZWZpbml0aW9uJyk7XG4gICAgdGhpcy5nZXRDaGlsZHJlbigpLmZvckVhY2goKGMpID0+IGMucmVxdWVzdFVwZGF0ZSgpKTtcbiAgfVxuXG4gIF9vbkNhbmNlbEZsb3coKSB7XG4gICAgdGhpcy5fb25EZXNpZ24oKTtcbiAgfVxuXG4gIF9vblN1Ym1pdEZsb3coeyBkZXRhaWw6IHsgdmFsdWVzIH0gfSkge1xuICAgIGNvbnN0IHNlbGVjdGVkRmxvdyA9IHRoaXMuZ2V0U2VsZWN0ZWRGbG93KCk7XG4gICAgY29uc3QgX3ZhbHVlcyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX2NyZWF0ZUZsb3dGcm9tU2NoZW1hKCksIHZhbHVlcyk7XG4gICAgY29uc3Qgc2VsZWN0ZWRGbG93VXBkYXRlZCA9IE9iamVjdC5hc3NpZ24oe30sIHNlbGVjdGVkRmxvdywgX3ZhbHVlcyk7XG4gICAgaWYgKCFkZWVwRXF1YWwoc2VsZWN0ZWRGbG93LCBzZWxlY3RlZEZsb3dVcGRhdGVkKSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihzZWxlY3RlZEZsb3csIHNlbGVjdGVkRmxvd1VwZGF0ZWQsIHsgX2RpcnR5OiB0cnVlIH0pO1xuICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3JlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICBfb25DYW5jZWxGbG93TW9kZSgpIHtcbiAgICB0aGlzLl9vbkRlc2lnbigpO1xuICB9XG5cbiAgX29uU3VibWl0Rmxvd01vZGUoeyBkZXRhaWw6IHsgdmFsdWVzIH0gfSkge1xuICAgIHRoaXMuX2RlZmluaXRpb25bJ2Zsb3ctbW9kZSddID0gdmFsdWVzWydmbG93LW1vZGUnXSB8fCAnREVGQVVMVCc7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLl9yZWZyZXNoKCk7XG4gIH1cblxuICBfb25DaGFuZ2VUYWIoeyBkZXRhaWwgfSkge1xuICAgIHRoaXMuX2NoYW5nZVRhYihkZXRhaWwudmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgX2NoYW5nZVRhYlZhbGlkYXRvcih7IGZyb20sIHRvIH0pIHtcbiAgICBpZiAoZnJvbSA9PT0gJ3Byb3BlcnRpZXMnKSB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignZ3YtcHJvcGVydGllcycpO1xuICAgICAgaWYgKGNvbXBvbmVudC5kaXJ0eSkge1xuICAgICAgICByZXR1cm4gY29tcG9uZW50LmNvbmZpcm0oKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZyb20gPT09ICdyZXNvdXJjZXMnKSB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignZ3YtcmVzb3VyY2VzJyk7XG4gICAgICBpZiAoY29tcG9uZW50LmRpcnR5KSB7XG4gICAgICAgIHJldHVybiBjb21wb25lbnQuY29uZmlybSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fYXNrVG9WYWxpZGF0ZUZvcm1zKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBfY2hhbmdlVGFiKHRhYklkKSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPT0gbnVsbCkge1xuICAgICAgdGhpcy50YWJJZCA9IHRhYklkO1xuICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnY2hhbmdlLXRhYicsIHRoaXMudGFiSWQpO1xuICAgIH1cbiAgfVxuXG4gIF9vbkRyYWdTdGFydEZsb3dTdGVwKGZsb3csIHsgZGV0YWlsIH0pIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9PSBudWxsKSB7XG4gICAgICB0aGlzLl9kcm9wUG9saWN5ID0gZGV0YWlsO1xuICAgICAgdGhpcy5fZHJhZ1BvbGljeSA9IGRldGFpbDtcbiAgICB9XG4gIH1cblxuICBfcmVuZGVyRmxvd0VtcHR5U3RhdGUocmVhZG9ubHlNb2RlKSB7XG4gICAgcmV0dXJuIGh0bWxgPGRpdiBzbG90PVwiY29udGVudFwiIGNsYXNzPVwiZW1wdHlcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIFNlbGVjdCBhIGZsb3dcbiAgICAgICAgJHtyZWFkb25seU1vZGUgIT09IHRydWVcbiAgICAgICAgICA/IGh0bWxgb3IgPGd2LWJ1dHRvbiBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9vbkFkZEZsb3d9XCIgb3V0bGluZWQgaWNvbj1cImNvZGU6cGx1c1wiIGxhcmdlPmRlc2lnbiBuZXcgb25lPC9ndi1idXR0b24+YFxuICAgICAgICAgIDogJyd9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5gO1xuICB9XG5cbiAgX3JlbmRlckZsb3coaW5kZXggPSAwLCBoYXNFbXB0eVN0YXRlID0gdHJ1ZSwgcmVhZG9ubHlNb2RlKSB7XG4gICAgY29uc3QgZmxvdyA9IHRoaXMuZ2V0U2VsZWN0ZWRGbG93KGluZGV4KTtcbiAgICBpZiAoZmxvdykge1xuICAgICAgY29uc3QgeyBwbGFuIH0gPSB0aGlzLl9maW5kRmxvd0NvbGxlY3Rpb24oZmxvdy5faWQpO1xuICAgICAgY29uc3Qgc2VsZWN0ZWRTdGVwSWQgPSB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAgPyB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5faWQgOiBudWxsO1xuICAgICAgcmV0dXJuIGh0bWxgIDxndi1mbG93XG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAxMDAlXCJcbiAgICAgICAgLmlkPVwiJHtmbG93Ll9pZH1cIlxuICAgICAgICAuZmxvdz1cIiR7Zmxvd31cIlxuICAgICAgICAucGxhbj1cIiR7cGxhbn1cIlxuICAgICAgICAucG9saWNpZXM9XCIke3RoaXMucG9saWNpZXN9XCJcbiAgICAgICAgc2xvdD1cImNvbnRlbnRcIlxuICAgICAgICA/ZGlzYWJsZWQ9XCIke3RoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb259XCJcbiAgICAgICAgLmRyYWdQb2xpY3k9XCIke3RoaXMuX2RyYWdQb2xpY3l9XCJcbiAgICAgICAgLmRyb3BQb2xpY3k9XCIke3RoaXMuX2Ryb3BQb2xpY3l9XCJcbiAgICAgICAgLnNlbGVjdGVkU3RlcElkPVwiJHtzZWxlY3RlZFN0ZXBJZH1cIlxuICAgICAgICA/cmVhZG9ubHk9XCIke3JlYWRvbmx5TW9kZX1cIlxuICAgICAgICA/aGFzLXBvbGljeS1maWx0ZXI9XCIke3RoaXMuX3BvbGljeUZpbHRlck9wdGlvbnMgIT0gbnVsbH1cIlxuICAgICAgICBmbG93cy10aXRsZT1cIiR7dGhpcy5mbG93c1RpdGxlfVwiXG4gICAgICAgIEBndi1mbG93OmRyYWctc3RhcnQ9XCIke3RoaXMuX29uRHJhZ1N0YXJ0Rmxvd1N0ZXAuYmluZCh0aGlzLCBmbG93KX1cIlxuICAgICAgICBAZ3YtZmxvdzplZGl0PVwiJHt0aGlzLl9vbkVkaXRGbG93U3RlcH1cIlxuICAgICAgICBAZ3YtZmxvdzpjaGFuZ2Utc3RhdGU9XCIke3RoaXMuX29uQ2hhbmdlRmxvd1N0ZXBTdGF0ZX1cIlxuICAgICAgICBAZ3YtZmxvdzpkcm9wPVwiJHt0aGlzLl9vbkRyb3BQb2xpY3l9XCJcbiAgICAgICAgQGd2LWZsb3c6ZGVsZXRlPVwiJHt0aGlzLl9vbkRlbGV0ZVBvbGljeX1cIlxuICAgICAgPjwvZ3YtZmxvdz5gO1xuICAgIH0gZWxzZSBpZiAoaGFzRW1wdHlTdGF0ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlckZsb3dFbXB0eVN0YXRlKHJlYWRvbmx5TW9kZSk7XG4gICAgfVxuICAgIHJldHVybiBodG1sYGA7XG4gIH1cblxuICBfb25GZXRjaFJlc291cmNlcyhldmVudCkge1xuICAgIGNvbnN0IHsgY3VycmVudFRhcmdldCwgcmVnZXhUeXBlcyB9ID0gZXZlbnQuZGV0YWlsO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmRlZmluZWRSZXNvdXJjZXNcbiAgICAgIC5maWx0ZXIoKHJlc291cmNlKSA9PiByZWdleFR5cGVzID09IG51bGwgfHwgbmV3IFJlZ0V4cChyZWdleFR5cGVzKS50ZXN0KHJlc291cmNlLnR5cGUpKVxuICAgICAgLm1hcCgocmVzb3VyY2UsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc291cmNlVHlwZSA9IHRoaXMucmVzb3VyY2VUeXBlcy5maW5kKCh0eXBlKSA9PiB0eXBlLmlkID09PSByZXNvdXJjZS50eXBlKTtcbiAgICAgICAgY29uc3Qgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZ3Ytcm93Jyk7XG4gICAgICAgIGNvbnN0IHBpY3R1cmUgPSByZXNvdXJjZVR5cGUuaWNvbiA/IHJlc291cmNlVHlwZS5pY29uIDogbnVsbDtcbiAgICAgICAgcm93Lml0ZW0gPSB7IHBpY3R1cmUsIG5hbWU6IHJlc291cmNlLm5hbWUgfTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbGVtZW50OiByb3csXG4gICAgICAgICAgdmFsdWU6IHJlc291cmNlLm5hbWUsXG4gICAgICAgICAgaWQ6IHJlc291cmNlLnR5cGUsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICBjdXJyZW50VGFyZ2V0Lm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgX3JlbmRlclBvbGljeShyZWFkb25seU1vZGUpIHtcbiAgICBpZiAodGhpcy5fZmxvd1N0ZXBTY2hlbWEgJiYgdGhpcy5kb2N1bWVudGF0aW9uKSB7XG4gICAgICByZXR1cm4gaHRtbGA8Z3YtcmVzaXphYmxlLXZpZXdzIGRpcmVjdGlvbj1cImhvcml6b250YWxcIiBuby1vdmVyZmxvdz5cbiAgICAgICAgPGRpdiBzbG90PVwidG9wXCI+JHt0aGlzLl9yZW5kZXJGbG93U3RlcEZvcm0ocmVhZG9ubHlNb2RlKX08L2Rpdj5cbiAgICAgICAgPGRpdiBzbG90PVwiYm90dG9tXCI+XG4gICAgICAgICAgPGd2LWRvY3VtZW50YXRpb25cbiAgICAgICAgICAgIC50ZXh0PVwiJHt0aGlzLmRvY3VtZW50YXRpb24uY29udGVudH1cIlxuICAgICAgICAgICAgLmltYWdlPVwiJHt0aGlzLmRvY3VtZW50YXRpb24uaW1hZ2V9XCJcbiAgICAgICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICAgICAgQGd2LWRvY3VtZW50YXRpb246Y2xvc2U9XCIke3RoaXMuX29uQ2xvc2VEb2N1bWVudGF0aW9ufVwiXG4gICAgICAgICAgPjwvZ3YtZG9jdW1lbnRhdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2d2LXJlc2l6YWJsZS12aWV3cz5gO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kb2N1bWVudGF0aW9uKSB7XG4gICAgICByZXR1cm4gaHRtbGA8Z3YtZG9jdW1lbnRhdGlvblxuICAgICAgICAudGV4dD1cIiR7dGhpcy5kb2N1bWVudGF0aW9uLmNvbnRlbnR9XCJcbiAgICAgICAgLmltYWdlPVwiJHt0aGlzLmRvY3VtZW50YXRpb24uaW1hZ2V9XCJcbiAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiXG4gICAgICAgIEBndi1kb2N1bWVudGF0aW9uOmNsb3NlPVwiJHt0aGlzLl9vbkNsb3NlRG9jdW1lbnRhdGlvbn1cIlxuICAgICAgPjwvZ3YtZG9jdW1lbnRhdGlvbj5gO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fZmxvd1N0ZXBTY2hlbWEpIHtcbiAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJGbG93U3RlcEZvcm0ocmVhZG9ubHlNb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWxgYDtcbiAgfVxuXG4gIF9nZXRGbG93U3RlcEZvcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKGAjJHtGTE9XX1NURVBfRk9STV9JRH1gKTtcbiAgfVxuXG4gIF9vblJlc2V0Rmxvd1N0ZXAoKSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRGbG93U3RlcCkge1xuICAgICAgZGVsZXRlIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5fdmFsdWVzO1xuICAgICAgdGhpcy5fZ2V0Rmxvd1N0ZXBGb3JtKCkucmVzZXQoKTtcbiAgICB9XG4gIH1cblxuICBfZ2VuZXJhdGVGbG93c0lkKGxpc3QsIGZvcmNlID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2VuZXJhdGVJZCgnZicsIGxpc3QsIGZvcmNlLCB0cnVlKTtcbiAgfVxuXG4gIF9nZW5lcmF0ZVBsYW5GbG93c0lkKHBsYW4sIGZvcmNlID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2VuZXJhdGVJZChwbGFuLmlkLCBwbGFuLmZsb3dzLCBmb3JjZSwgdHJ1ZSk7XG4gIH1cblxuICBfZ2VuZXJhdGVGbG93U3RlcElkKGZsb3dJZCwgZmxvd0tleSwgcG9zaXRpb24pIHtcbiAgICByZXR1cm4gYCR7Zmxvd0lkfV8ke2Zsb3dLZXl9XyR7cG9zaXRpb259YDtcbiAgfVxuXG4gIF9nZW5lcmF0ZUlkKHByZWZpeCwgbGlzdCwgZm9yY2UgPSBmYWxzZSwgaXNGbG93ID0gZmFsc2UpIHtcbiAgICBpZiAobGlzdCkge1xuICAgICAgcmV0dXJuIGxpc3QubWFwKChlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBfaWQgPSBgJHtwcmVmaXh9XyR7aW5kZXh9YDtcbiAgICAgICAgaWYgKGlzRmxvdykge1xuICAgICAgICAgIGlmIChlLnByZSkge1xuICAgICAgICAgICAgZS5wcmUuZm9yRWFjaCgoc3RlcCwgc3RlcEluZGV4KSA9PiAoc3RlcC5faWQgPSB0aGlzLl9nZW5lcmF0ZUZsb3dTdGVwSWQoX2lkLCAncHJlJywgc3RlcEluZGV4KSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZS5wb3N0KSB7XG4gICAgICAgICAgICBlLnBvc3QuZm9yRWFjaCgoc3RlcCwgc3RlcEluZGV4KSA9PiAoc3RlcC5faWQgPSB0aGlzLl9nZW5lcmF0ZUZsb3dTdGVwSWQoX2lkLCAncG9zdCcsIHN0ZXBJbmRleCkpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcmNlIHx8IGUuX2lkID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5lLCBfaWQgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIGdldENoaWxkcmVuKCkge1xuICAgIHJldHVybiBbXG4gICAgICAuLi5BcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdndi1mbG93JykpLFxuICAgICAgLi4uQXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnZ3YtcmVzaXphYmxlLXZpZXdzJykpLFxuICAgIF07XG4gIH1cblxuICBhc3luYyBnZXRVcGRhdGVDb21wbGV0ZSgpIHtcbiAgICBhd2FpdCBzdXBlci5nZXRVcGRhdGVDb21wbGV0ZSgpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXMuZ2V0Q2hpbGRyZW4oKS5tYXAoKGUpID0+IGUudXBkYXRlQ29tcGxldGUpKTtcbiAgfVxuXG4gIHNob3VsZFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcykge1xuICAgIC8vIEp1c3QgcmVmcmVzaCBndi1mbG93IGNvbXBvbmVudHNcbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdfZHJhZ1BvbGljeScpKSB7XG4gICAgICB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnZ3YtZmxvdycpLmZvckVhY2goKGZsb3cpID0+IChmbG93LmRyYWdQb2xpY3kgPSB0aGlzLl9kcmFnUG9saWN5KSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ19kcm9wUG9saWN5JykpIHtcbiAgICAgIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdndi1mbG93JykuZm9yRWFjaCgoZmxvdykgPT4gKGZsb3cuZHJvcFBvbGljeSA9IHRoaXMuX2Ryb3BQb2xpY3kpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnNob3VsZFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG4gIH1cblxuICB1cGRhdGVkKHByb3BzKSB7XG4gICAgaWYgKHByb3BzLmhhcygnZG9jdW1lbnRhdGlvbicpICYmIHRoaXMuZG9jdW1lbnRhdGlvbiAhPSBudWxsICYmIHRoaXMuc2VsZWN0ZWRGbG93c0lkLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3MoW3RoaXMuc2VsZWN0ZWRGbG93c0lkWzBdXSk7XG4gICAgfVxuICB9XG5cbiAgX3JlbmRlckZsb3dTdGVwRm9ybShyZWFkb25seU1vZGUpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuX3ZhbHVlcyB8fCB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuX2luaXRpYWxWYWx1ZXM7XG4gICAgcmV0dXJuIGh0bWxgJHtjYWNoZShcbiAgICAgIHRoaXMuX2Zsb3dTdGVwU2NoZW1hICYmIHRoaXMuX2N1cnJlbnRGbG93U3RlcFxuICAgICAgICA/IGh0bWxgPGRpdiBjbGFzcz1cImZsb3ctc3RlcF9fY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxvdy1zdGVwX19mb3JtXCI+XG4gICAgICAgICAgICAgIDxndi1zY2hlbWEtZm9ybVxuICAgICAgICAgICAgICAgIC5pZD1cIiR7RkxPV19TVEVQX0ZPUk1fSUR9XCJcbiAgICAgICAgICAgICAgICAuc2NoZW1hPVwiJHt0aGlzLl9mbG93U3RlcFNjaGVtYX1cIlxuICAgICAgICAgICAgICAgIC5pY29uPVwiZGVzaWduOmVkaXRcIlxuICAgICAgICAgICAgICAgIGhhcy1oZWFkZXJcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZS1vbi1yZW5kZXJcbiAgICAgICAgICAgICAgICAudmFsdWVzPVwiJHt2YWx1ZXN9XCJcbiAgICAgICAgICAgICAgICAuZGlydHk9XCIke3RoaXMuX2N1cnJlbnRGbG93U3RlcC5fdmFsdWVzICE9IG51bGx9XCJcbiAgICAgICAgICAgICAgICA/cmVhZG9ubHk9XCIke3JlYWRvbmx5TW9kZX1cIlxuICAgICAgICAgICAgICAgIHNjcm9sbGFibGVcbiAgICAgICAgICAgICAgICBAZ3Ytc2NoZW1hLWZvcm06Y2hhbmdlPVwiJHt0aGlzLl9vbkNoYW5nZUZsb3dTdGVwfVwiXG4gICAgICAgICAgICAgICAgQGd2LXNjaGVtYS1mb3JtOnJlc2V0PVwiJHt0aGlzLl9vblJlc2V0Rmxvd1N0ZXB9XCJcbiAgICAgICAgICAgICAgICBAZ3Ytc2NoZW1hLWZvcm06ZmV0Y2gtcmVzb3VyY2VzPVwiJHt0aGlzLl9vbkZldGNoUmVzb3VyY2VzfVwiXG4gICAgICAgICAgICAgICAgQGd2LXNjaGVtYS1mb3JtOnN1Ym1pdD1cIiR7dGhpcy5fb25TdWJtaXRGbG93U3RlcH1cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBzbG90PVwidGl0bGVcIiBjbGFzcz1cImZsb3ctc3RlcF9fZm9ybS10aXRsZVwiPiR7dGhpcy5fY3VycmVudEZsb3dTdGVwLnN0ZXAubmFtZX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8Z3YtYnV0dG9uXG4gICAgICAgICAgICAgICAgICBzbG90PVwiaGVhZGVyLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgaWNvbj1cImdlbmVyYWw6Y2xvc2VcIlxuICAgICAgICAgICAgICAgICAgb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIHNtYWxsXG4gICAgICAgICAgICAgICAgICBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9vbkNsb3NlRmxvd1N0ZXBGb3JtfVwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIkNsb3NlIChlc2MpXCJcbiAgICAgICAgICAgICAgICA+PC9ndi1idXR0b24+XG4gICAgICAgICAgICAgICAgPGd2LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgc2xvdD1cImhlYWRlci1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGljb249XCJob21lOmJvb2tcIlxuICAgICAgICAgICAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLmRvY3VtZW50YXRpb24gIT0gbnVsbH1cIlxuICAgICAgICAgICAgICAgICAgb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIHNtYWxsXG4gICAgICAgICAgICAgICAgICBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9vbk9wZW5Eb2N1bWVudGF0aW9uRnJvbUZvcm19XCJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwiT3BlbiBkb2N1bWVudGF0aW9uXCJcbiAgICAgICAgICAgICAgICA+PC9ndi1idXR0b24+XG4gICAgICAgICAgICAgIDwvZ3Ytc2NoZW1hLWZvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5gXG4gICAgICAgIDogJycsXG4gICAgKX1gO1xuICB9XG5cbiAgX29uQ2xvc2VEb2N1bWVudGF0aW9uKCkge1xuICAgIHRoaXMuZG9jdW1lbnRhdGlvbiA9IG51bGw7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRGbG93U3RlcCA9PSBudWxsKSB7XG4gICAgICB0aGlzLl9tYXhpbWl6ZVRvcFZpZXcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2d2LXBvbGljeS1zdHVkaW86a2VlcC1kb2N1bWVudGF0aW9uLWNsb3NlJywgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgX29uRGVsZXRlRmxvdyh7IGRldGFpbCB9KSB7XG4gICAgY29uc3QgZmxvd0lkID0gZGV0YWlsLmNvbnRlbnQuX2lkO1xuICAgIGNvbnN0IHsgZmxvd3MgfSA9IHRoaXMuX2ZpbmRGbG93Q29sbGVjdGlvbihmbG93SWQpO1xuICAgIGNvbnN0IGZsb3cgPSBmbG93cy5maW5kKChmbG93KSA9PiBmbG93Ll9pZCA9PT0gZmxvd0lkKTtcbiAgICB0aGlzLl9kZWxldGVGbG93KGZsb3dzLCBmbG93KTtcbiAgfVxuXG4gIGdldCBkZWZpbmVkRmxvd3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmluaXRpb24gJiYgdGhpcy5fZGVmaW5pdGlvbi5mbG93cyA/IHRoaXMuX2RlZmluaXRpb24uZmxvd3MgOiBbXTtcbiAgfVxuXG4gIGdldCBkZWZpbmVkUGxhbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmluaXRpb24gJiYgdGhpcy5fZGVmaW5pdGlvbi5wbGFucyA/IHRoaXMuX2RlZmluaXRpb24ucGxhbnMgOiBbXTtcbiAgfVxuXG4gIGdldCBkZWZpbmVkUmVzb3VyY2VzKCkge1xuICAgIHJldHVybiB0aGlzLl9kZWZpbml0aW9uICYmIHRoaXMuX2RlZmluaXRpb24ucmVzb3VyY2VzID8gdGhpcy5fZGVmaW5pdGlvbi5yZXNvdXJjZXMgOiBbXTtcbiAgfVxuXG4gIGdldCBkZWZpbmVkUHJvcGVydGllcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmaW5pdGlvbiAmJiB0aGlzLl9kZWZpbml0aW9uLnByb3BlcnRpZXMgPyB0aGlzLl9kZWZpbml0aW9uLnByb3BlcnRpZXMgOiBbXTtcbiAgfVxuXG4gIGFzeW5jIF9vbkR1cGxpY2F0ZUZsb3coeyBkZXRhaWwgfSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9hc2tUb1ZhbGlkYXRlRm9ybXMoKTtcblxuICAgICAgY29uc3QgZmxvd0lkID0gZGV0YWlsLmNvbnRlbnQuX2lkO1xuICAgICAgY29uc3QgeyBwbGFuLCBmbG93cyB9ID0gdGhpcy5fZmluZEZsb3dDb2xsZWN0aW9uKGZsb3dJZCk7XG4gICAgICB0aGlzLl9hZGRGbG93KGZsb3dzLCB0aGlzLl9maW5kRmxvd0J5SWQoZmxvd0lkKSk7XG4gICAgICBpZiAocGxhbiAhPSBudWxsKSB7XG4gICAgICAgIGxldCBwbGFuSW5kZXggPSBudWxsO1xuICAgICAgICB0aGlzLmRlZmluZWRQbGFucy5maW5kKChwLCBpKSA9PiB7XG4gICAgICAgICAgaWYgKHAuaWQgPT09IHBsYW4uaWQpIHtcbiAgICAgICAgICAgIHBsYW5JbmRleCA9IGk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgcGxhbi5mbG93cyA9IGZsb3dzO1xuICAgICAgICB0aGlzLmRlZmluZWRQbGFuc1twbGFuSW5kZXhdLmZsb3dzID0gdGhpcy5fZ2VuZXJhdGVQbGFuRmxvd3NJZChwbGFuLCB0cnVlKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRGbG93cyhbdGhpcy5kZWZpbmVkUGxhbnNbcGxhbkluZGV4XS5mbG93c1tmbG93cy5sZW5ndGggLSAxXS5faWRdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2RlZmluaXRpb24uZmxvd3MgPSB0aGlzLl9nZW5lcmF0ZUZsb3dzSWQodGhpcy5fZGVmaW5pdGlvbi5mbG93cyk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3MoW3RoaXMuX2RlZmluaXRpb24uZmxvd3NbdGhpcy5fZGVmaW5pdGlvbi5mbG93cy5sZW5ndGggLSAxXS5faWRdKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIF9vbkNoYW5nZUZsb3dTdGF0ZSh7IGRldGFpbCB9KSB7XG4gICAgY29uc3QgZmxvdyA9IHRoaXMuX2ZpbmRGbG93QnlJZChkZXRhaWwuY29udGVudC5faWQpO1xuICAgIGZsb3cuZW5hYmxlZCA9IGRldGFpbC5lbmFibGVkO1xuICAgIGZsb3cuX2RpcnR5ID0gdHJ1ZTtcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICB9XG5cbiAgYXN5bmMgX29uQWRkRmxvd1BsYW4oeyBkZXRhaWwgfSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9hc2tUb1ZhbGlkYXRlRm9ybXMoKTtcbiAgICAgIHRoaXMuX2FkZEZsb3codGhpcy5kZWZpbmVkUGxhbnNbZGV0YWlsLnBsYW5JbmRleF0uZmxvd3MpO1xuICAgICAgdGhpcy5kZWZpbmVkUGxhbnNbZGV0YWlsLnBsYW5JbmRleF0uZmxvd3MgPSB0aGlzLl9nZW5lcmF0ZVBsYW5GbG93c0lkKHRoaXMuZGVmaW5lZFBsYW5zW2RldGFpbC5wbGFuSW5kZXhdKTtcbiAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3MoW3RoaXMuZGVmaW5lZFBsYW5zW2RldGFpbC5wbGFuSW5kZXhdLmZsb3dzW3RoaXMuZGVmaW5lZFBsYW5zW2RldGFpbC5wbGFuSW5kZXhdLmZsb3dzLmxlbmd0aCAtIDFdLl9pZF0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX29uQWRkRmxvdygpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fYXNrVG9WYWxpZGF0ZUZvcm1zKCk7XG5cbiAgICAgIHRoaXMuX2FkZEZsb3codGhpcy5fZGVmaW5pdGlvbi5mbG93cyk7XG4gICAgICB0aGlzLl9kZWZpbml0aW9uLmZsb3dzID0gdGhpcy5fZ2VuZXJhdGVGbG93c0lkKHRoaXMuX2RlZmluaXRpb24uZmxvd3MpO1xuICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRGbG93cyhbdGhpcy5fZGVmaW5pdGlvbi5mbG93c1t0aGlzLl9kZWZpbml0aW9uLmZsb3dzLmxlbmd0aCAtIDFdLl9pZF0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgX2FkZEZsb3coY29sbGVjdGlvbiwgZHVwbGljYXRlID0gbnVsbCkge1xuICAgIGNvbnN0IGZsb3cgPVxuICAgICAgZHVwbGljYXRlID09IG51bGxcbiAgICAgICAgPyB0aGlzLl9jcmVhdGVGbG93RnJvbVNjaGVtYSgpXG4gICAgICAgIDoge1xuICAgICAgICAgICAgLi4uZHVwbGljYXRlLFxuICAgICAgICAgICAgX2lkOiBudWxsLFxuICAgICAgICAgICAgLy8gcmVzZXQgdGhlIGlkIHRvIGF2b2lkIGlzc3VlIHdpdGggQU0gdGhhdCBwZXJzaXN0cyB0aGUgSURcbiAgICAgICAgICAgIGlkOiBudWxsLFxuICAgICAgICAgICAgX2RpcnR5OiB0cnVlLFxuICAgICAgICAgIH07XG5cbiAgICBjb2xsZWN0aW9uLnB1c2goZmxvdyk7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgfVxuXG4gIF9jcmVhdGVGbG93RnJvbVNjaGVtYSgpIHtcbiAgICBjb25zdCBuZXdGbG93ID0ge1xuICAgICAgbmFtZTogJycsXG4gICAgICBwcmU6IFtdLFxuICAgICAgcG9zdDogW10sXG4gICAgICBfZGlydHk6IHRydWUsXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLl9pbnN0YW50aWF0ZSh0aGlzLmZsb3dTY2hlbWEucHJvcGVydGllcywgbmV3Rmxvdyk7XG4gIH1cblxuICBfaW5zdGFudGlhdGUocHJvcGVydGllc0RlZmluaXRpb24sIGluaXRpYXRvciA9IHt9KSB7XG4gICAgY29uc3QgcHJvcGVydHkgPSB7IC4uLmluaXRpYXRvciB9O1xuXG4gICAgaWYgKHByb3BlcnRpZXNEZWZpbml0aW9uKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzRGVmaW5pdGlvbikpIHtcbiAgICAgICAgY29uc3QgZW50cnkgPSBwcm9wZXJ0aWVzRGVmaW5pdGlvbltrZXldO1xuXG4gICAgICAgIGlmIChlbnRyeS50eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHByb3BlcnR5W2tleV0gPSB0aGlzLl9pbnN0YW50aWF0ZShlbnRyeS5wcm9wZXJ0aWVzLCAoaW5pdGlhdG9yID0ge30pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW50cnkuZGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcHJvcGVydHlba2V5XSA9IGVudHJ5LmRlZmF1bHQ7XG4gICAgICAgIH0gZWxzZSBpZiAoZW50cnkudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBwcm9wZXJ0eVtrZXldID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydHk7XG4gIH1cblxuICBfZGVsZXRlRmxvdyhjb2xsZWN0aW9uLCBmbG93KSB7XG4gICAgY29uc3QgaW5kZXggPSBjb2xsZWN0aW9uLmluZGV4T2YoZmxvdyk7XG4gICAgY29sbGVjdGlvbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIGNvbnN0IHNlbGVjdGVkRmxvd3MgPSB0aGlzLnNlbGVjdGVkRmxvd3NJZC5maWx0ZXIoKGZsb3dJZCkgPT4gZmxvd0lkICE9PSBmbG93Ll9pZCk7XG4gICAgaWYgKHNlbGVjdGVkRmxvd3MubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZEZsb3dzKHNlbGVjdGVkRmxvd3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZWxlY3RGaXJzdEZsb3codHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuX2NoYW5nZVRhYignZGVzaWduJyk7XG4gICAgdGhpcy5fcmVmcmVzaCgpO1xuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gIH1cblxuICBfZmluZEZsb3dJbmRleChsaXN0LCBpZCkge1xuICAgIGxldCBpbmRleCA9IG51bGw7XG4gICAgbGlzdC5maW5kKChmLCBpKSA9PiB7XG4gICAgICBpZiAoZi5faWQgPT09IGlkKSB7XG4gICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgYXN5bmMgX29uUmVvcmRlckZsb3dzKHsgZGV0YWlsOiB7IHBsYW4gfSB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2Fza1RvVmFsaWRhdGVGb3JtcygpO1xuICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICAgIGlmIChwbGFuICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbmV3T3JkZXIgPSB0aGlzLl9nZW5lcmF0ZVBsYW5GbG93c0lkKHBsYW4sIHRydWUpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZsb3dzSWQpIHtcbiAgICAgICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZEZsb3dzKFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZsb3dzSWQubWFwKChmbG93SWQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9maW5kRmxvd0luZGV4KHBsYW4uZmxvd3MsIGZsb3dJZCk7XG4gICAgICAgICAgICAgIHJldHVybiBpbmRleCAhPSBudWxsID8gbmV3T3JkZXJbaW5kZXhdLl9pZCA6IGZsb3dJZDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcGxhbi5mbG93cyA9IG5ld09yZGVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbmV3T3JkZXIgPSB0aGlzLl9nZW5lcmF0ZUZsb3dzSWQodGhpcy5fZGVmaW5pdGlvbi5mbG93cywgdHJ1ZSk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmxvd3NJZCkge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3MoXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxvd3NJZC5tYXAoKGZsb3dJZCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2ZpbmRGbG93SW5kZXgodGhpcy5fZGVmaW5pdGlvbi5mbG93cywgZmxvd0lkKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGluZGV4ICE9IG51bGwgPyBuZXdPcmRlcltpbmRleF0uX2lkIDogZmxvd0lkO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kZWZpbml0aW9uLmZsb3dzID0gbmV3T3JkZXI7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgX29uU2VhcmNoUG9saWN5KHsgZGV0YWlsIH0pIHtcbiAgICB0aGlzLl9zZWFyY2hQb2xpY3lRdWVyeSA9IGRldGFpbDtcbiAgfVxuXG4gIF9vbkNsZWFyUG9saWN5KCkge1xuICAgIHRoaXMuX3NlYXJjaFBvbGljeVF1ZXJ5ID0gbnVsbDtcbiAgfVxuXG4gIF9vblNlYXJjaEZsb3dzKHsgZGV0YWlsIH0pIHtcbiAgICB0aGlzLl9zZWFyY2hGbG93UXVlcnkgPSBkZXRhaWw7XG4gIH1cblxuICBfb25DbGVhckZsb3dzKCkge1xuICAgIHRoaXMuX3NlYXJjaEZsb3dRdWVyeSA9IG51bGw7XG4gIH1cblxuICBhc3luYyBfb25SZXNldEFsbCgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fY2xvc2VGbG93U3RlcEZvcm0oKTtcbiAgICAgIHRoaXMuZGVmaW5pdGlvbiA9IGRlZXBDbG9uZSh0aGlzLl9pbml0aWFsRGVmaW5pdGlvbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgX2ZpbHRlck5vdFZhbGlkU3RlcChzdGVwKSB7XG4gICAgcmV0dXJuIHN0ZXAuX25ldyAhPT0gdHJ1ZTtcbiAgfVxuXG4gIF9yZW1vdmVQcml2YXRlUHJvcGVydGllcyhvKSB7XG4gICAgY29uc3QgY29weSA9IHsgLi4ubyB9O1xuICAgIE9iamVjdC5rZXlzKG8pXG4gICAgICAuZmlsdGVyKChrZXkpID0+IGtleS5zdGFydHNXaXRoKCdfJykpXG4gICAgICAuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGRlbGV0ZSBjb3B5W2tleV07XG4gICAgICB9KTtcbiAgICByZXR1cm4gY29weTtcbiAgfVxuXG4gIF9zdWJtaXRPckNvbmZpcm1Gb3JtcygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdndi1zY2hlbWEtZm9ybScpXVxuICAgICAgLmZpbHRlcigoZm9ybSkgPT4ge1xuICAgICAgICBjb25zdCBpc1ZhbGlkID0gZm9ybS5pc1ZhbGlkKCk7XG4gICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgZm9ybS5zdWJtaXQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3JtLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIWlzVmFsaWQ7XG4gICAgICB9KVxuICAgICAgLm1hcCgoZm9ybSkgPT4gZm9ybS5jb25maXJtKCkpO1xuICB9XG5cbiAgZ2V0UHJvcGVydGllc0VsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdndi1wcm9wZXJ0aWVzJyk7XG4gIH1cblxuICBhc3luYyBfY2hlY2tDdXJyZW50Rmxvd1N0ZXAoKSB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRGbG93U3RlcCAmJiB0aGlzLnNlbGVjdGVkRmxvd3NJZCkge1xuICAgICAgY29uc3QgY2xvc2VQcm9taXNlcyA9IHRoaXMuc2VsZWN0ZWRGbG93c0lkXG4gICAgICAgIC5tYXAoKGZsb3dJZCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZsb3cgPSB0aGlzLl9maW5kRmxvd0J5SWQoZmxvd0lkKTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50U3RlcCA9IFsuLi5mbG93LnByZSwgLi4uZmxvdy5wb3N0XS5maW5kKChzdGVwKSA9PiBzdGVwLl9pZCA9PT0gdGhpcy5fY3VycmVudEZsb3dTdGVwLnN0ZXAuX2lkKTtcbiAgICAgICAgICBpZiAoY3VycmVudFN0ZXAgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb3NlRmxvd1N0ZXBGb3JtKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcigocCkgPT4gcCAhPT0gbnVsbCk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoY2xvc2VQcm9taXNlcyk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHNhdmVkKCkge1xuICAgIGlmICh0aGlzLmlzRGlydHkpIHtcbiAgICAgIHRoaXMuX2luaXRpYWxEZWZpbml0aW9uID0gZGVlcENsb25lKHRoaXMuX2RlZmluaXRpb25TYXZlZCk7XG4gICAgICB0aGlzLl9kZWZpbml0aW9uID0gZGVlcENsb25lKHRoaXMuX2RlZmluaXRpb25TYXZlZCk7XG4gICAgICB0aGlzLl9kZWZpbml0aW9uU2F2ZWQgPSBudWxsO1xuICAgICAgdGhpcy5pc0RpcnR5ID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGVja0N1cnJlbnRGbG93U3RlcCgpO1xuICAgICAgdGhpcy5kZWZpbmVkUGxhbnMuZm9yRWFjaCgocGxhbikgPT4ge1xuICAgICAgICBwbGFuLmZsb3dzLmZvckVhY2goKGZsb3cpID0+IChmbG93Ll9kaXJ0eSA9IGZhbHNlKSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZGVmaW5lZEZsb3dzLmZvckVhY2goKGZsb3cpID0+IChmbG93Ll9kaXJ0eSA9IGZhbHNlKSk7XG4gICAgICB0aGlzLmdldENoaWxkcmVuKCkuZm9yRWFjaCgoZSkgPT4gZS5yZXF1ZXN0VXBkYXRlKCkpO1xuICAgIH1cbiAgfVxuXG4gIF9idWlsZERlZmluaXRpb25Ub1NhdmUoKSB7XG4gICAgLy8gQ29weSBkZWZpbml0aW9uIGFuZCByZW1vdmUgaW52YWxpZCBzdGVwXG4gICAgLy8gS2VlcCBwcml2YXRlIHByb3BlcnRpZXMgbGlrZSBfaWQgYW5kIG90aGVycyBzdHVmZiB1c2VmdWwgZm9yIHJlbmRlclxuICAgIGNvbnN0IGZsb3dzID0gdGhpcy5fZGVmaW5pdGlvbi5mbG93cy5tYXAoKGZsb3cpID0+IHtcbiAgICAgIGZsb3cucHJlID0gZmxvdy5wcmUuZmlsdGVyKHRoaXMuX2ZpbHRlck5vdFZhbGlkU3RlcCk7XG4gICAgICBmbG93LnBvc3QgPSBmbG93LnBvc3QuZmlsdGVyKHRoaXMuX2ZpbHRlck5vdFZhbGlkU3RlcCk7XG4gICAgICByZXR1cm4gZmxvdztcbiAgICB9KTtcblxuICAgIGxldCBkZWZpbml0aW9uID0geyAuLi50aGlzLl9kZWZpbml0aW9uLCBmbG93cyB9O1xuXG4gICAgaWYgKHRoaXMuX2RlZmluaXRpb24ucGxhbnMgIT0gbnVsbCkge1xuICAgICAgY29uc3QgcGxhbnMgPSB0aGlzLl9kZWZpbml0aW9uLnBsYW5zLm1hcCgocGxhbikgPT4ge1xuICAgICAgICBjb25zdCBmbG93cyA9IHBsYW4uZmxvd3MubWFwKChmbG93KSA9PiB7XG4gICAgICAgICAgZmxvdy5wcmUgPSBmbG93LnByZS5maWx0ZXIodGhpcy5fZmlsdGVyTm90VmFsaWRTdGVwKTtcbiAgICAgICAgICBmbG93LnBvc3QgPSBmbG93LnBvc3QuZmlsdGVyKHRoaXMuX2ZpbHRlck5vdFZhbGlkU3RlcCk7XG4gICAgICAgICAgcmV0dXJuIGZsb3c7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyAuLi5wbGFuLCBmbG93cyB9O1xuICAgICAgfSk7XG4gICAgICBkZWZpbml0aW9uID0geyAuLi5kZWZpbml0aW9uLCBwbGFucyB9O1xuICAgIH1cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIF9idWlsZERlZmluaXRpb25Ub1NlbmQoZGVmaW5pdGlvblRvU2F2ZSkge1xuICAgIC8vIENvcHkgZGVmaW5pdGlvbiBhbmQgcmVtb3ZlIGFsbCBwcml2YXRlIHByb3BlcnRpZXNcbiAgICBjb25zdCBmbG93cyA9IGRlZmluaXRpb25Ub1NhdmUuZmxvd3MubWFwKChmKSA9PiB7XG4gICAgICBjb25zdCBmbG93ID0gdGhpcy5fcmVtb3ZlUHJpdmF0ZVByb3BlcnRpZXMoZik7XG4gICAgICBmbG93LnByZSA9IGZsb3cucHJlLm1hcCh0aGlzLl9yZW1vdmVQcml2YXRlUHJvcGVydGllcyk7XG4gICAgICBmbG93LnBvc3QgPSBmbG93LnBvc3QubWFwKHRoaXMuX3JlbW92ZVByaXZhdGVQcm9wZXJ0aWVzKTtcbiAgICAgIHJldHVybiBmbG93O1xuICAgIH0pO1xuXG4gICAgbGV0IGRlZmluaXRpb24gPSB7IC4uLnRoaXMuX2RlZmluaXRpb24sIGZsb3dzIH07XG4gICAgaWYgKHRoaXMuX2RlZmluaXRpb24ucGxhbnMgIT0gbnVsbCkge1xuICAgICAgY29uc3QgcGxhbnMgPSBkZWZpbml0aW9uVG9TYXZlLnBsYW5zLm1hcCgocGxhbikgPT4ge1xuICAgICAgICBjb25zdCBmbG93cyA9IHBsYW4uZmxvd3MubWFwKChmKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmxvdyA9IHRoaXMuX3JlbW92ZVByaXZhdGVQcm9wZXJ0aWVzKGYpO1xuICAgICAgICAgIGZsb3cucHJlID0gZmxvdy5wcmUubWFwKHRoaXMuX3JlbW92ZVByaXZhdGVQcm9wZXJ0aWVzKTtcbiAgICAgICAgICBmbG93LnBvc3QgPSBmbG93LnBvc3QubWFwKHRoaXMuX3JlbW92ZVByaXZhdGVQcm9wZXJ0aWVzKTtcbiAgICAgICAgICByZXR1cm4gZmxvdztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7IC4uLnBsYW4sIGZsb3dzIH07XG4gICAgICB9KTtcbiAgICAgIGRlZmluaXRpb24gPSB7IC4uLmRlZmluaXRpb24sIHBsYW5zIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RlZmluaXRpb24ucHJvcGVydGllcyAhPSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5fZGVmaW5pdGlvbi5wcm9wZXJ0aWVzLm1hcCh0aGlzLl9yZW1vdmVQcml2YXRlUHJvcGVydGllcyk7XG4gICAgICBkZWZpbml0aW9uID0geyAuLi5kZWZpbml0aW9uLCBwcm9wZXJ0aWVzIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RlZmluaXRpb24ucmVzb3VyY2VzICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlcyA9IHRoaXMuX2RlZmluaXRpb24ucmVzb3VyY2VzLm1hcCh0aGlzLl9yZW1vdmVQcml2YXRlUHJvcGVydGllcyk7XG4gICAgICBkZWZpbml0aW9uID0geyAuLi5kZWZpbml0aW9uLCByZXNvdXJjZXMgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIF9vblNhdmVBbGwoKSB7XG4gICAgaWYgKHRoaXMuaGFzUHJvcGVydGllcykge1xuICAgICAgdGhpcy5nZXRQcm9wZXJ0aWVzRWxlbWVudCgpLnN1Ym1pdCgpO1xuICAgIH1cblxuICAgIFByb21pc2UuYWxsKHRoaXMuX3N1Ym1pdE9yQ29uZmlybUZvcm1zKCkpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2RlZmluaXRpb25TYXZlZCA9IHRoaXMuX2J1aWxkRGVmaW5pdGlvblRvU2F2ZSgpO1xuICAgICAgICBjb25zdCBkZWZpbml0aW9uID0gdGhpcy5fYnVpbGREZWZpbml0aW9uVG9TZW5kKHRoaXMuX2RlZmluaXRpb25TYXZlZCk7XG4gICAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ3NhdmUnLCB7IGRlZmluaXRpb24sIHNlcnZpY2VzOiB0aGlzLnNlcnZpY2VzIH0pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtwb2xpY3ktc3R1ZGlvXSBFcnJvciBvbiBzYXZlYCwgZXJyKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgX29uRGVidWcocmVxdWVzdEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuaGFzUHJvcGVydGllcykge1xuICAgICAgdGhpcy5nZXRQcm9wZXJ0aWVzRWxlbWVudCgpLnN1Ym1pdCgpO1xuICAgIH1cblxuICAgIFByb21pc2UuYWxsKHRoaXMuX3N1Ym1pdE9yQ29uZmlybUZvcm1zKCkpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSB0aGlzLl9idWlsZERlZmluaXRpb25Ub1NlbmQodGhpcy5fYnVpbGREZWZpbml0aW9uVG9TYXZlKCkpO1xuICAgICAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdkZWJ1ZycsIHsgZGVmaW5pdGlvbiwgc2VydmljZXM6IHRoaXMuc2VydmljZXMsIHJlcXVlc3Q6IHJlcXVlc3RFdmVudC5kZXRhaWwucmVxdWVzdCB9KTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBbcG9saWN5LXN0dWRpb10gRXJyb3Igb24gZGVidWdgLCBlcnIpO1xuICAgICAgfSk7XG4gIH1cblxuICBnZXQgZmlsdGVyZWRGbG93cygpIHtcbiAgICBpZiAodGhpcy5fZmxvd0ZpbHRlci5sZW5ndGggPT09IDAgfHwgdGhpcy5fZmxvd0ZpbHRlci5pbmNsdWRlcygnYXBpJykpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlZmluZWRGbG93cztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgZmlsdGVyZWRQbGFucygpIHtcbiAgICBpZiAodGhpcy5fZmxvd0ZpbHRlci5sZW5ndGggPT09IDAgfHwgdGhpcy5fZmxvd0ZpbHRlci5pbmNsdWRlcygncGxhbicpKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZpbmVkUGxhbnM7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgX29uRmlsdGVyRmxvd3MoeyBkZXRhaWwgfSkge1xuICAgIGlmICh0aGlzLl9mbG93RmlsdGVyLmluY2x1ZGVzKGRldGFpbC5pZCkpIHtcbiAgICAgIHRoaXMuX2Zsb3dGaWx0ZXIgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZmxvd0ZpbHRlciA9IFtkZXRhaWwuaWRdO1xuICAgIH1cbiAgfVxuXG4gIF9nZXRGaWx0ZXJlZFBvbGljaWVzKCkge1xuICAgIGlmICh0aGlzLl9wb2xpY3lGaWx0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMucG9saWNpZXMuZmlsdGVyKChwb2xpY3kpID0+IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAocG9saWN5Lm9uUmVxdWVzdCAmJiB0aGlzLl9wb2xpY3lGaWx0ZXIuaW5jbHVkZXMoJ29uUmVxdWVzdCcpKSB8fCAocG9saWN5Lm9uUmVzcG9uc2UgJiYgdGhpcy5fcG9saWN5RmlsdGVyLmluY2x1ZGVzKCdvblJlc3BvbnNlJykpXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucG9saWNpZXM7XG4gIH1cblxuICBfb25GaWx0ZXJQb2xpY2llcyh7IGRldGFpbCB9KSB7XG4gICAgaWYgKHRoaXMuX3BvbGljeUZpbHRlci5pbmNsdWRlcyhkZXRhaWwuaWQpKSB7XG4gICAgICB0aGlzLl9wb2xpY3lGaWx0ZXIgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcG9saWN5RmlsdGVyID0gW2RldGFpbC5pZF07XG4gICAgfVxuICB9XG5cbiAgX3JlbmRlckRlc2lnbihyZWFkb25seU1vZGUpIHtcbiAgICByZXR1cm4gaHRtbGAgPGRpdiBpZD1cImRlc2lnblwiIHNsb3Q9XCJjb250ZW50XCIgY2xhc3M9XCJkZXNpZ25cIj5cbiAgICAgIDxndi1yZXNpemFibGUtdmlld3Mgbm8tb3ZlcmZsb3c+XG4gICAgICAgIDxkaXYgc2xvdD1cInRvcFwiPiR7dGhpcy5fcmVuZGVyRmxvdygwLCB0cnVlLCByZWFkb25seU1vZGUpfTwvZGl2PlxuXG4gICAgICAgIDxkaXYgc2xvdD1cImJvdHRvbVwiPlxuICAgICAgICAgICR7dGhpcy5fcmVuZGVyRmxvdygxLCBmYWxzZSwgcmVhZG9ubHlNb2RlKX0gJHt0aGlzLl9yZW5kZXJQb2xpY3kocmVhZG9ubHlNb2RlKX0gJHt0aGlzLl9yZW5kZXJGbG93Rm9ybShyZWFkb25seU1vZGUpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZ3YtcmVzaXphYmxlLXZpZXdzPlxuICAgICAgJHtyZWFkb25seU1vZGUgIT09IHRydWVcbiAgICAgICAgPyBodG1sYDxndi1wb2xpY3ktc3R1ZGlvLW1lbnVcbiAgICAgICAgICAgIGNsYXNzPVwicmlnaHQtbWVudVwiXG4gICAgICAgICAgICA/ZGlzYWJsZWQ9XCIke3RoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb259XCJcbiAgICAgICAgICAgIC5wb2xpY2llcz1cIiR7dGhpcy5fZ2V0RmlsdGVyZWRQb2xpY2llcygpfVwiXG4gICAgICAgICAgICAuc2VsZWN0ZWRJZHM9XCIke1t0aGlzLl9jdXJyZW50UG9saWN5SWRdfVwiXG4gICAgICAgICAgICAucXVlcnk9XCIke3RoaXMuX3NlYXJjaFBvbGljeVF1ZXJ5fVwiXG4gICAgICAgICAgICA/aGFzLXBvbGljeS1maWx0ZXI9XCIke3RoaXMuX3BvbGljeUZpbHRlck9wdGlvbnMgIT0gbnVsbH1cIlxuICAgICAgICAgICAgP3JlYWRvbmx5PVwiJHtyZWFkb25seU1vZGV9XCJcbiAgICAgICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6dGFyZ2V0LXBvbGljeT1cIiR7dGhpcy5fb25UYXJnZXRQb2xpY3l9XCJcbiAgICAgICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6ZmV0Y2gtZG9jdW1lbnRhdGlvbj1cIiR7dGhpcy5fb25PcGVuRG9jdW1lbnRhdGlvbkZyb21NZW51fVwiXG4gICAgICAgICAgICBAZ3YtcG9saWN5LXN0dWRpby1tZW51OmRyYWdlbmQtcG9saWN5PVwiJHt0aGlzLl9vbkRyYWdFbmRQb2xpY3l9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IHNsb3Q9XCJoZWFkZXJcIiBjbGFzcz1cInNlYXJjaC1wb2xpY2llc1wiPlxuICAgICAgICAgICAgICAke3RoaXMuX3BvbGljeUZpbHRlck9wdGlvbnMgIT0gbnVsbFxuICAgICAgICAgICAgICAgID8gaHRtbGA8Z3Ytb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICAgICAgICAgICAgICAub3B0aW9ucz1cIiR7dGhpcy5fcG9saWN5RmlsdGVyT3B0aW9uc31cIlxuICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICBvdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgICAudmFsdWU9XCIke3RoaXMuX3BvbGljeUZpbHRlcn1cIlxuICAgICAgICAgICAgICAgICAgICBzbWFsbFxuICAgICAgICAgICAgICAgICAgICBAZ3Ytb3B0aW9uOnNlbGVjdD1cIiR7dGhpcy5fb25GaWx0ZXJQb2xpY2llc31cIlxuICAgICAgICAgICAgICAgICAgPjwvZ3Ytb3B0aW9uPmBcbiAgICAgICAgICAgICAgICA6ICcnfVxuICAgICAgICAgICAgICA8Z3YtaW5wdXRcbiAgICAgICAgICAgICAgICBpZD1cInNlYXJjaC1wb2xpY3lcIlxuICAgICAgICAgICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIHBvbGljaWVzIChTaGlmdCArIEN0cmwgKyBTcGFjZSlcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgICAgIHNtYWxsXG4gICAgICAgICAgICAgICAgQGd2LWlucHV0OmlucHV0PVwiJHt0aGlzLl9vblNlYXJjaFBvbGljeX1cIlxuICAgICAgICAgICAgICAgIEBndi1pbnB1dDpjbGVhcj1cIiR7dGhpcy5fb25DbGVhclBvbGljeX1cIlxuICAgICAgICAgICAgICA+PC9ndi1pbnB1dD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZ3YtcG9saWN5LXN0dWRpby1tZW51PmBcbiAgICAgICAgOiAnJ31cbiAgICA8L2Rpdj5gO1xuICB9XG5cbiAgX3JlbmRlckRlYnVnKCkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gdGhpcy5kZWJ1Z1Jlc3BvbnNlID8gdGhpcy5kZWJ1Z1Jlc3BvbnNlLnJlc3BvbnNlIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGlzTG9hZGluZyA9IHRoaXMuZGVidWdSZXNwb25zZSA/IHRoaXMuZGVidWdSZXNwb25zZS5pc0xvYWRpbmcgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMuZGVidWdSZXNwb25zZSAmJiB0aGlzLmRlYnVnUmVzcG9uc2UucmVxdWVzdCA/IHRoaXMuZGVidWdSZXNwb25zZS5yZXF1ZXN0LnBhdGggOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgbWV0aG9kID0gdGhpcy5kZWJ1Z1Jlc3BvbnNlICYmIHRoaXMuZGVidWdSZXNwb25zZS5yZXF1ZXN0ID8gdGhpcy5kZWJ1Z1Jlc3BvbnNlLnJlcXVlc3QubWV0aG9kIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBodG1sYDxndi1odHRwLWNsaWVudFxuICAgICAgaWQ9XCJkZWJ1Z1wiXG4gICAgICBzbG90PVwiY29udGVudFwiXG4gICAgICBjbGFzcz1cImRlYnVnXCJcbiAgICAgIEBndi1odHRwLWNsaWVudDpzZW5kPVwiJHt0aGlzLl9vbkRlYnVnfVwiXG4gICAgICAucmVzcG9uc2U9XCIke3Jlc3BvbnNlfVwiXG4gICAgICAucGF0aD1cIiR7cGF0aH1cIlxuICAgICAgLm1ldGhvZD1cIiR7bWV0aG9kfVwiXG4gICAgICA/bG9hZGluZz1cIiR7aXNMb2FkaW5nfVwiXG4gICAgPlxuICAgIDwvZ3YtaHR0cC1jbGllbnQ+YDtcbiAgfVxuXG4gIF9yZW5kZXJDb25maWd1cmF0aW9uRm9ybShyZWFkb25seU1vZGUpIHtcbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uU2NoZW1hKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBkZWVwQ2xvbmUodGhpcy5fZGVmaW5pdGlvbik7XG4gICAgICByZXR1cm4gaHRtbGAgPGRpdiBpZD1cInNldHRpbmdzXCIgc2xvdD1cImNvbnRlbnRcIiBjbGFzcz1cImFwaS1zZXR0aW5nc1wiIEBkcmFnb3Zlcj1cIiR7dGhpcy5fb25EZXNpZ259XCI+XG4gICAgICAgIDxndi1zY2hlbWEtZm9ybVxuICAgICAgICAgIC5zY2hlbWE9XCIke3RoaXMuY29uZmlndXJhdGlvblNjaGVtYX1cIlxuICAgICAgICAgIGlkPVwiYXBpLXNldHRpbmdzLWZvcm1cIlxuICAgICAgICAgIC52YWx1ZXM9XCIke3ZhbHVlc31cIlxuICAgICAgICAgIGhhcy1oZWFkZXJcbiAgICAgICAgICBoYXMtZm9vdGVyXG4gICAgICAgICAgc2Nyb2xsYWJsZVxuICAgICAgICAgID9yZWFkb25seT1cIiR7cmVhZG9ubHlNb2RlfVwiXG4gICAgICAgICAgQGd2LXNjaGVtYS1mb3JtOmNhbmNlbD1cIiR7dGhpcy5fb25DYW5jZWxGbG93TW9kZX1cIlxuICAgICAgICAgIEBndi1zY2hlbWEtZm9ybTpzdWJtaXQ9XCIke3RoaXMuX29uU3VibWl0Rmxvd01vZGV9XCJcbiAgICAgICAgPlxuICAgICAgICAgICR7IXRoaXMuY29uZmlndXJhdGlvbkluZm9ybWF0aW9uXG4gICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICA6IGh0bWxgXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwaS1zZXR0aW5ncy1pbmZvcm1hdGlvblwiIHNsb3Q9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgPGd2LWljb24gY2xhc3M9XCJhcGktc2V0dGluZ3MtaW5mb3JtYXRpb25fX2ljb25cIiB0aXRsZT1cIkluZm9cIiBzaGFwZT1cImNvZGU6aW5mb1wiPjwvZ3YtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDxibG9ja3F1b3RlIGNsYXNzPVwiYXBpLXNldHRpbmdzLWluZm9ybWF0aW9uX19ibG9ja3F1b3RlXCI+JHt0aGlzLmNvbmZpZ3VyYXRpb25JbmZvcm1hdGlvbn08L2Jsb2NrcXVvdGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIGB9XG4gICAgICAgIDwvZ3Ytc2NoZW1hLWZvcm0+XG4gICAgICA8L2Rpdj5gO1xuICAgIH1cbiAgICByZXR1cm4gaHRtbGBgO1xuICB9XG5cbiAgX3JlbmRlckZsb3dGb3JtKHJlYWRvbmx5TW9kZSkge1xuICAgIGlmICh0aGlzLmZsb3dTY2hlbWEgJiYgdGhpcy5fZmxvd1N0ZXBTY2hlbWEgPT0gbnVsbCAmJiB0aGlzLmRvY3VtZW50YXRpb24gPT0gbnVsbCAmJiB0aGlzLnNlbGVjdGVkRmxvd3NJZC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGZsb3cgPSB0aGlzLmdldFNlbGVjdGVkRmxvdygpO1xuICAgICAgaWYgKGZsb3cpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gZGVlcENsb25lKGZsb3cpO1xuICAgICAgICByZXR1cm4gaHRtbGA8ZGl2IHNsb3Q9XCJjb250ZW50XCIgY2xhc3M9XCJmbG93LXNldHRpbmdzXCI+XG4gICAgICAgICAgPGd2LXNjaGVtYS1mb3JtXG4gICAgICAgICAgICAuc2NoZW1hPVwiJHt0aGlzLmZsb3dTY2hlbWF9XCJcbiAgICAgICAgICAgIGlkPVwic2V0dGluZ3MtZm9ybVwiXG4gICAgICAgICAgICAudmFsdWVzPVwiJHt2YWx1ZXN9XCJcbiAgICAgICAgICAgIGhhcy1oZWFkZXJcbiAgICAgICAgICAgIHNjcm9sbGFibGVcbiAgICAgICAgICAgID9yZWFkb25seT1cIiR7cmVhZG9ubHlNb2RlfVwiXG4gICAgICAgICAgICBAZ3Ytc2NoZW1hLWZvcm06Y2FuY2VsPVwiJHt0aGlzLl9vbkNhbmNlbEZsb3d9XCJcbiAgICAgICAgICAgIEBndi1zY2hlbWEtZm9ybTpzdWJtaXQ9XCIke3RoaXMuX29uU3VibWl0Rmxvd31cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgc2xvdD1cInRpdGxlXCIgY2xhc3M9XCJmbG93LXN0ZXBfX2Zvcm0tdGl0bGVcIj5GbG93IGNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgICAgICA8L2d2LXNjaGVtYS1mb3JtPlxuICAgICAgICA8L2Rpdj5gO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9vblJlc291cmNlc0NoYW5nZSh7IGRldGFpbCB9KSB7XG4gICAgdGhpcy5kZWZpbml0aW9uLnJlc291cmNlcyA9IGRldGFpbC5yZXNvdXJjZXM7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgfVxuXG4gIF9vblByb3BlcnRpZXNDaGFuZ2UoeyBkZXRhaWwgfSkge1xuICAgIHRoaXMuZGVmaW5pdGlvbi5wcm9wZXJ0aWVzID0gZGV0YWlsLnByb3BlcnRpZXM7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgfVxuXG4gIF9vblNhdmVQcm92aWRlcih7IGRldGFpbCB9KSB7XG4gICAgdGhpcy5zZXJ2aWNlc1snZHluYW1pYy1wcm9wZXJ0eSddID0gZGV0YWlsLnByb3ZpZGVyO1xuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gIH1cblxuICBfb25Td2l0Y2hFbmNyeXB0ZWRQcm9wZXJ0eSh7IGRldGFpbCB9KSB7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCByZWFkb25seU1vZGUgPSB0aGlzLl9nZXRSZWFkb25seU1vZGVGb3JEZXNpZ24oKTtcblxuICAgIHJldHVybiBodG1sYDxkaXYgY2xhc3M9XCJib3hcIj5cbiAgICAgIDxndi1wb2xpY3ktc3R1ZGlvLW1lbnVcbiAgICAgICAgY2xhc3M9XCJsZWZ0LW1lbnVcIlxuICAgICAgICAuYXBpLW5hbWU9XCIke3RoaXMuX2RlZmluaXRpb24ubmFtZX1cIlxuICAgICAgICAuZmxvd3M9XCIke3RoaXMuZmlsdGVyZWRGbG93c31cIlxuICAgICAgICAucGxhbnM9XCIke3RoaXMuZmlsdGVyZWRQbGFuc31cIlxuICAgICAgICAuc2VsZWN0ZWRJZHM9XCIke3RoaXMuc2VsZWN0ZWRGbG93c0lkfVwiXG4gICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICA/c29ydGFibGU9XCIke3RoaXMuc29ydGFibGUgJiYgdGhpcy5yZWFkb25seSAhPT0gdHJ1ZX1cIlxuICAgICAgICA/cmVhZG9ubHk9XCIke3RoaXMucmVhZG9ubHl9XCJcbiAgICAgICAgP3JlYWRvbmx5UGxhbnM9XCIke3RoaXMucmVhZG9ubHlQbGFuc31cIlxuICAgICAgICBmbG93cy10aXRsZT1cIiR7dGhpcy5mbG93c1RpdGxlfVwiXG4gICAgICAgIC5xdWVyeT1cIiR7dGhpcy5fc2VhcmNoRmxvd1F1ZXJ5fVwiXG4gICAgICAgID9jYW4tYWRkPVwiJHt0aGlzLmNhbkFkZCAmJiAhdGhpcy5yZWFkb25seX1cIlxuICAgICAgICBAZ3YtcG9saWN5LXN0dWRpby1tZW51OnJlb3JkZXItZmxvd3M9XCIke3RoaXMuX29uUmVvcmRlckZsb3dzfVwiXG4gICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6Y2hhbmdlLWZsb3ctc3RhdGU9XCIke3RoaXMuX29uQ2hhbmdlRmxvd1N0YXRlfVwiXG4gICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6YWRkLWZsb3c9XCIke3RoaXMuX29uQWRkRmxvd31cIlxuICAgICAgICBAZ3YtcG9saWN5LXN0dWRpby1tZW51OmFkZC1mbG93LXBsYW49XCIke3RoaXMuX29uQWRkRmxvd1BsYW59XCJcbiAgICAgICAgQGd2LXBvbGljeS1zdHVkaW8tbWVudTpkZWxldGUtZmxvdz1cIiR7dGhpcy5fb25EZWxldGVGbG93fVwiXG4gICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6ZHVwbGljYXRlLWZsb3c9XCIke3RoaXMuX29uRHVwbGljYXRlRmxvd31cIlxuICAgICAgICBAZ3YtcG9saWN5LXN0dWRpby1tZW51OnNlbGVjdC1mbG93cz1cIiR7dGhpcy5fb25TZWxlY3RGbG93c31cIlxuICAgICAgPlxuICAgICAgICA8ZGl2IHNsb3Q9XCJoZWFkZXJcIiBjbGFzcz1cImhlYWRlci1hY3Rpb25zXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+JHt0aGlzLl9kZWZpbml0aW9uLm5hbWV9PC9kaXY+XG4gICAgICAgICAgJHt0aGlzLl9mbG93RmlsdGVyT3B0aW9ucyAhPSBudWxsXG4gICAgICAgICAgICA/IGh0bWxgPGd2LW9wdGlvblxuICAgICAgICAgICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICAgICAgICAgIC5vcHRpb25zPVwiJHt0aGlzLl9mbG93RmlsdGVyT3B0aW9uc31cIlxuICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgb3V0bGluZWRcbiAgICAgICAgICAgICAgICAudmFsdWU9XCIke3RoaXMuX2Zsb3dGaWx0ZXJ9XCJcbiAgICAgICAgICAgICAgICBzbWFsbFxuICAgICAgICAgICAgICAgIEBndi1vcHRpb246c2VsZWN0PVwiJHt0aGlzLl9vbkZpbHRlckZsb3dzfVwiXG4gICAgICAgICAgICAgID48L2d2LW9wdGlvbj5gXG4gICAgICAgICAgICA6ICcnfVxuICAgICAgICAgIDxndi1pbnB1dFxuICAgICAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiXG4gICAgICAgICAgICBpZD1cInNlYXJjaC1mbG93XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIGZsb3dzIChDdHJsICsgU3BhY2UpXCJcbiAgICAgICAgICAgIHR5cGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgc21hbGxcbiAgICAgICAgICAgIEBndi1pbnB1dDppbnB1dD1cIiR7dGhpcy5fb25TZWFyY2hGbG93c31cIlxuICAgICAgICAgICAgQGd2LWlucHV0OmNsZWFyPVwiJHt0aGlzLl9vbkNsZWFyRmxvd3N9XCJcbiAgICAgICAgICA+PC9ndi1pbnB1dD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgJHt0aGlzLnJlYWRvbmx5ICE9PSB0cnVlXG4gICAgICAgICAgPyBodG1sYCA8ZGl2IHNsb3Q9XCJmb290ZXJcIiBjbGFzcz1cImZvb3Rlci1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxndi1idXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1sYXJnZVwiXG4gICAgICAgICAgICAgICAgLmRpc2FibGVkPVwiJHshdGhpcy5pc0RpcnR5IHx8IHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb259XCJcbiAgICAgICAgICAgICAgICBAZ3YtYnV0dG9uOmNsaWNrPVwiJHt0aGlzLl9vblNhdmVBbGx9XCJcbiAgICAgICAgICAgICAgICA+U2F2ZTwvZ3YtYnV0dG9uXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGd2LWJ1dHRvbiBsaW5rIC5kaXNhYmxlZD1cIiR7IXRoaXMuaXNEaXJ0eSB8fCB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiIEBndi1idXR0b246Y2xpY2s9XCIke3RoaXMuX29uUmVzZXRBbGx9XCJcbiAgICAgICAgICAgICAgICA+UmVzZXQ8L2d2LWJ1dHRvblxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2Rpdj5gXG4gICAgICAgICAgOiAnJ31cbiAgICAgIDwvZ3YtcG9saWN5LXN0dWRpby1tZW51PlxuXG4gICAgICA8Z3YtdGFic1xuICAgICAgICAudmFsdWU9XCIke3RoaXMudGFiSWR9XCJcbiAgICAgICAgLm9wdGlvbnM9XCIke3RoaXMuX3RhYnN9XCJcbiAgICAgICAgLmRpc2FibGVkPVwiJHt0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiXG4gICAgICAgIEBndi10YWJzOmNoYW5nZT1cIiR7dGhpcy5fb25DaGFuZ2VUYWJ9XCJcbiAgICAgICAgLnZhbGlkYXRvcj1cIiR7dGhpcy5fY2hhbmdlVGFiVmFsaWRhdG9yLmJpbmQodGhpcyl9XCJcbiAgICAgID5cbiAgICAgICAgJHt0aGlzLl9yZW5kZXJEZXNpZ24ocmVhZG9ubHlNb2RlKX0gJHt0aGlzLl9yZW5kZXJDb25maWd1cmF0aW9uRm9ybShyZWFkb25seU1vZGUpfSAke3RoaXMuX3JlbmRlckRlYnVnKCl9XG4gICAgICAgIDxndi1wcm9wZXJ0aWVzXG4gICAgICAgICAgaWQ9XCJwcm9wZXJ0aWVzXCJcbiAgICAgICAgICBzbG90PVwiY29udGVudFwiXG4gICAgICAgICAgY2xhc3M9XCJwcm9wZXJ0aWVzXCJcbiAgICAgICAgICAucHJvdmlkZXI9XCIke3RoaXMuc2VydmljZXNbJ2R5bmFtaWMtcHJvcGVydHknXX1cIlxuICAgICAgICAgIEBndi1wcm9wZXJ0aWVzOmNoYW5nZT1cIiR7dGhpcy5fb25Qcm9wZXJ0aWVzQ2hhbmdlfVwiXG4gICAgICAgICAgQGd2LXByb3BlcnRpZXM6c2F2ZS1wcm92aWRlcj1cIiR7dGhpcy5fb25TYXZlUHJvdmlkZXJ9XCJcbiAgICAgICAgICBAZ3YtcHJvcGVydGllczpzd2l0Y2gtZW5jcnlwdGVkPVwiJHt0aGlzLl9vblN3aXRjaEVuY3J5cHRlZFByb3BlcnR5fVwiXG4gICAgICAgICAgP3JlYWRvbmx5PVwiJHtyZWFkb25seU1vZGV9XCJcbiAgICAgICAgICBlbmNyeXB0YWJsZT1cInRydWVcIlxuICAgICAgICAgIC5wcm9wZXJ0aWVzPVwiJHt0aGlzLmRlZmluZWRQcm9wZXJ0aWVzfVwiXG4gICAgICAgICAgLnByb3ZpZGVycz1cIiR7dGhpcy5wcm9wZXJ0eVByb3ZpZGVyc31cIlxuICAgICAgICAgIC5keW5hbWljUHJvcGVydHlTY2hlbWE9XCIke3RoaXMuZHluYW1pY1Byb3BlcnR5U2NoZW1hfVwiXG4gICAgICAgID48L2d2LXByb3BlcnRpZXM+XG4gICAgICAgIDxndi1yZXNvdXJjZXNcbiAgICAgICAgICBpZD1cInJlc291cmNlc1wiXG4gICAgICAgICAgc2xvdD1cImNvbnRlbnRcIlxuICAgICAgICAgIGNsYXNzPVwicmVzb3VyY2VzXCJcbiAgICAgICAgICBAZ3YtcmVzb3VyY2VzOmNoYW5nZT1cIiR7dGhpcy5fb25SZXNvdXJjZXNDaGFuZ2V9XCJcbiAgICAgICAgICA/cmVhZG9ubHk9XCIke3JlYWRvbmx5TW9kZX1cIlxuICAgICAgICAgIC5yZXNvdXJjZXM9XCIke3RoaXMuZGVmaW5lZFJlc291cmNlc31cIlxuICAgICAgICAgIC50eXBlcz1cIiR7dGhpcy5yZXNvdXJjZVR5cGVzfVwiXG4gICAgICAgID48L2d2LXJlc291cmNlcz5cbiAgICAgIDwvZ3YtdGFicz5cbiAgICA8L2Rpdj5gO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBpZiB0aGUgZGVzaWduIHZpZXcgc2hvdWxkIGJlIGluIHJlYWRvbmx5IG1vZGUgb3Igbm90XG4gICAqIEl0IGlzIGluIHJlYWRvbmx5IG1vZGUgaWY6XG4gICAqICB0aGUgcmVhZG9ubHkgYXR0cmlidXRlIGlzIHNldCB0byB0cnVlXG4gICAqICBPUlxuICAgKiAgdGhlIG1haW4gc2VsZWN0ZWQgZmxvdyBiZWxvbmdzIHRvIGEgcGxhbiBhbmQgdGhlIHJlYWRvbmx5LXBsYW5zIGF0dHJpYnV0ZSBpcyBzZXQgdG8gdHJ1ZVxuICAgKiAgT1JcbiAgICogIHRoZSBzZWNvbmQgZmxvdyBmb3IgY29tcGFyaXNvbiBiZWxvbmdzIHRvIGEgcGxhbiBhbmQgdGhlIHJlYWRvbmx5LXBsYW5zIGF0dHJpYnV0ZSBpcyBzZXQgdG8gdHJ1ZVxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbnwqfHt0eXBlOiBCb29sZWFuQ29uc3RydWN0b3J9fHthdHRyaWJ1dGU6IHN0cmluZywgdHlwZTogQm9vbGVhbkNvbnN0cnVjdG9yfXx7dHlwZTogKn18e2F0dHJpYnV0ZTogc3RyaW5nLCB0eXBlOiAqfX1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9nZXRSZWFkb25seU1vZGVGb3JEZXNpZ24oKSB7XG4gICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGZsb3cgPSB0aGlzLmdldFNlbGVjdGVkRmxvdygwKTtcbiAgICBpZiAoIWZsb3cpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHBsYW46IGZsb3dQbGFuIH0gPSB0aGlzLl9maW5kRmxvd0NvbGxlY3Rpb24oZmxvdy5faWQpO1xuICAgIGNvbnN0IHJlYWRvbmx5TW9kZSA9IGZsb3dQbGFuICYmIHRoaXMucmVhZG9ubHlQbGFucztcbiAgICBpZiAocmVhZG9ubHlNb2RlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wYXJlZEZsb3cgPSB0aGlzLmdldFNlbGVjdGVkRmxvdygxKTtcbiAgICBpZiAoIWNvbXBhcmVkRmxvdykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcGxhbjogY29tcGFyZWRGbG93UGxhbiB9ID0gdGhpcy5fZmluZEZsb3dDb2xsZWN0aW9uKGNvbXBhcmVkRmxvdy5faWQpO1xuICAgIHJldHVybiBjb21wYXJlZEZsb3dQbGFuICYmIHRoaXMucmVhZG9ubHlQbGFucztcbiAgfVxufVxuXG53aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdndi1wb2xpY3ktc3R1ZGlvJywgR3ZQb2xpY3lTdHVkaW8pO1xuIl19
|
|
1749
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4vbm9kZV9tb2R1bGVzL0BncmF2aXRlZS91aS1jb21wb25lbnRzL3BvbGljeS1zdHVkaW8vZ3YtcG9saWN5LXN0dWRpby5qcyJdLCJuYW1lcyI6WyJjc3MiLCJodG1sIiwiTGl0RWxlbWVudCIsIm1ldGhvZHMiLCJkaXNwYXRjaEN1c3RvbUV2ZW50IiwiZW1wdHkiLCJjYWNoZSIsImRlZXBDbG9uZSIsImRlZXBFcXVhbCIsIktleWJvYXJkRWxlbWVudCIsIktFWVMiLCJGTE9XX1NURVBfRk9STV9JRCIsIkd2UG9saWN5U3R1ZGlvIiwicHJvcGVydGllcyIsInBvbGljaWVzIiwidHlwZSIsIkFycmF5Iiwic2VydmljZXMiLCJPYmplY3QiLCJyZXNvdXJjZVR5cGVzIiwiYXR0cmlidXRlIiwicHJvcGVydHlQcm92aWRlcnMiLCJkeW5hbWljUHJvcGVydHlTY2hlbWEiLCJ0YWJJZCIsIlN0cmluZyIsIl90YWJJZCIsImRlZmluaXRpb24iLCJfZGVmaW5pdGlvbiIsImRvY3VtZW50YXRpb24iLCJmbG93U2NoZW1hIiwiY29uZmlndXJhdGlvblNjaGVtYSIsIl9jb25maWd1cmF0aW9uU2NoZW1hIiwiY29uZmlndXJhdGlvbkluZm9ybWF0aW9uIiwiaXNEaXJ0eSIsIkJvb2xlYW4iLCJyZWZsZWN0IiwiX2RyYWdQb2xpY3kiLCJfZHJvcFBvbGljeSIsInNlbGVjdGVkRmxvd3NJZCIsIl9zZWxlY3RlZEZsb3dzSWQiLCJfY3VycmVudFBvbGljeUlkIiwiX3NlYXJjaFBvbGljeVF1ZXJ5IiwiX3NlYXJjaEZsb3dRdWVyeSIsIl9mbG93U3RlcFNjaGVtYSIsIl9jdXJyZW50Rmxvd1N0ZXAiLCJfcG9saWN5RmlsdGVyIiwiX2Zsb3dGaWx0ZXIiLCJfY3VycmVudEFza0NvbmZpcm1hdGlvbiIsImhhc1Byb3BlcnRpZXMiLCJfaGFzUHJvcGVydGllcyIsImhhc1Jlc291cmNlcyIsImhhc1BvbGljeUZpbHRlciIsImZsb3dzVGl0bGUiLCJzb3J0YWJsZSIsImNhbkFkZCIsInJlYWRvbmx5IiwicmVhZG9ubHlQbGFucyIsImNhbkRlYnVnIiwiX2NhbkRlYnVnIiwiZGVidWdSZXNwb25zZSIsInN0eWxlcyIsImNvbnN0cnVjdG9yIiwiZmxvd3MiLCJfdGFicyIsImlkIiwidGl0bGUiLCJpY29uIiwidmFsdWUiLCJ0aGVuIiwicmVxdWVzdFVwZGF0ZSIsIl9mbG93RmlsdGVyT3B0aW9ucyIsImRlZmluZWRQbGFucyIsImxlbmd0aCIsIl9wb2xpY3lGaWx0ZXJPcHRpb25zIiwic3BsaWNlIiwib25LZXlib2FyZCIsImlzUHJlc3NlZCIsIlNoaWZ0IiwiQ3RybCIsIlNwYWNlIiwic2VhcmNoIiwic2hhZG93Um9vdCIsInF1ZXJ5U2VsZWN0b3IiLCJmb2N1cyIsImluY2x1ZGVzIiwiX2dlbmVyYXRlRmxvd3NJZCIsInJlc291cmNlcyIsIl9nZW5lcmF0ZUlkIiwicGxhbnMiLCJtYXAiLCJwbGFuIiwiX2dlbmVyYXRlUGxhbkZsb3dzSWQiLCJfaW5pdGlhbERlZmluaXRpb24iLCJfc2VsZWN0Rmlyc3RGbG93IiwiaXNBcnJheSIsImZpbHRlciIsIl9maW5kRmxvd0J5SWQiLCJfdXBkYXRlU2VsZWN0ZWRGbG93cyIsImRpc3BhdGNoIiwiY2FuZGlkYXRlIiwiZGVmaW5lZEZsb3dzIiwiX2lkIiwiZmluZCIsIl9nZXRGbG93RWxlbWVudCIsImZsb3dJZCIsIl9vbkRyYWdFbmRQb2xpY3kiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZm9yRWFjaCIsImUiLCJvbkRyYWdFbmQiLCJfb25Ecm9wUG9saWN5IiwiZGV0YWlsIiwiX2Fza1RvVmFsaWRhdGVGb3JtcyIsInBvbGljeSIsInRhcmdldEZsb3ciLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJjb25maWd1cmF0aW9uIiwiX25ldyIsImZsb3dTdGVwIiwiX2dlbmVyYXRlRmxvd1N0ZXBJZCIsImZsb3dLZXkiLCJwb3NpdGlvbiIsImVuYWJsZWQiLCJzb3VyY2VGbG93Iiwic291cmNlRmxvd0lkIiwic291cmNlUG9zaXRpb24iLCJzb3VyY2VGbG93S2V5Iiwic3RlcCIsImdyb3VwIiwic2NoZW1hIiwiYnVpbGRTY2hlbWEiLCJfc2V0Q3VycmVudEZsb3dTdGVwIiwiY3VycmVudEZsb3dGb3JtIiwiX2dldEZsb3dTdGVwRm9ybSIsImRpcnR5IiwiY2FuY2VsRWRpdCIsInNldFRpbWVvdXQiLCJfZWRpdEZsb3dTdGVwIiwiZmxvdyIsInVwZGF0ZUNvbXBsZXRlIiwiZmxvd0VsZW1lbnQiLCJzZWxlY3RlZFN0ZXBJZCIsIl9kaXJ0eSIsImd2RmxvdyIsInJlbW92ZUNhbmRpZGF0ZSIsIl9vbkRlbGV0ZVBvbGljeSIsInRhcmdldCIsImVkaXRpbmciLCJfY2xvc2VGbG93U3RlcEZvcm0iLCJfb25EZXNpZ24iLCJfY2hhbmdlVGFiIiwiX3NwbGl0TWFpblZpZXdzIiwianNvblNjaGVtYSIsIkpTT04iLCJwYXJzZSIsImN1cnJlbnRGbG93U3RlcCIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJfb25PcGVuRG9jdW1lbnRhdGlvbiIsIl9tYXhpbWl6ZVRvcFZpZXciLCJfb25FZGl0Rmxvd1N0ZXAiLCJfZ2V0UmVzaXphYmxlVmlld3MiLCJtYXhpbWl6ZVRvcCIsIl9tYXhpbWl6ZUJvdHRvbVZpZXciLCJtYXhpbWl6ZUJvdHRvbSIsInNwbGl0IiwiX29uQ2hhbmdlRmxvd1N0ZXBTdGF0ZSIsIl9vbkNsb3NlRmxvd1N0ZXBGb3JtIiwiZXJyIiwiZm9yY2UiLCJQcm9taXNlIiwiYWxsIiwiX3N1Ym1pdE9yQ29uZmlybUZvcm1zIiwiZm9ybXMiLCJyIiwiX2J1aWxkRGVmaW5pdGlvblRvU2F2ZSIsImdldENoaWxkcmVuIiwiX2NoZWNrQ3VycmVudEZsb3dTdGVwIiwiRXJyb3IiLCJmbG93U3RlcFNjaGVtYSIsIl9pbml0aWFsVmFsdWVzIiwic2NvcGUiLCJfZW51bSIsImVudW0iLCJmaWx0ZXJlZCIsImRlZmF1bHQiLCJfdmFsdWVzIiwiX3JlZnJlc2giLCJjbG9zZVN0ZXBGb3JtIiwiX29uU2VsZWN0Rmxvd3MiLCJfb25DbG9zZURvY3VtZW50YXRpb24iLCJfb25PcGVuRG9jdW1lbnRhdGlvbkZyb21NZW51IiwiZ2V0U2VsZWN0ZWRGbG93IiwiX2ZldGNoRG9jdW1lbnRhdGlvbiIsIl9vbk9wZW5Eb2N1bWVudGF0aW9uRnJvbUZvcm0iLCJyZW1vdmVJdGVtIiwiX2ZpbmRGbG93Q29sbGVjdGlvbiIsInBsYW5zRmxvd3MiLCJyZWR1Y2UiLCJhY2MiLCJ2YWwiLCJjb25jYXQiLCJpbmRleCIsInNlbGVjdGVkRmxvd0lkIiwiX29uVGFyZ2V0UG9saWN5IiwiX29uQ2hhbmdlRmxvd1N0ZXAiLCJ2YWx1ZXMiLCJfd3JpdGVGbG93U3RlcCIsImZpbmRJbmRleCIsIl9vblN1Ym1pdEZsb3dTdGVwIiwiYyIsIl9vbkNhbmNlbEZsb3ciLCJfb25TdWJtaXRGbG93Iiwic2VsZWN0ZWRGbG93IiwiYXNzaWduIiwiX2NyZWF0ZUZsb3dGcm9tU2NoZW1hIiwic2VsZWN0ZWRGbG93VXBkYXRlZCIsIl9vbkNhbmNlbEZsb3dNb2RlIiwiX29uU3VibWl0Rmxvd01vZGUiLCJfb25DaGFuZ2VUYWIiLCJfY2hhbmdlVGFiVmFsaWRhdG9yIiwiZnJvbSIsInRvIiwiY29tcG9uZW50IiwiY29uZmlybSIsInJlc29sdmUiLCJfb25EcmFnU3RhcnRGbG93U3RlcCIsIl9yZW5kZXJGbG93RW1wdHlTdGF0ZSIsInJlYWRvbmx5TW9kZSIsIl9vbkFkZEZsb3ciLCJfcmVuZGVyRmxvdyIsImhhc0VtcHR5U3RhdGUiLCJiaW5kIiwiX29uRmV0Y2hSZXNvdXJjZXMiLCJldmVudCIsImN1cnJlbnRUYXJnZXQiLCJyZWdleFR5cGVzIiwib3B0aW9ucyIsImRlZmluZWRSZXNvdXJjZXMiLCJyZXNvdXJjZSIsIlJlZ0V4cCIsInRlc3QiLCJyZXNvdXJjZVR5cGUiLCJyb3ciLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJwaWN0dXJlIiwiaXRlbSIsImVsZW1lbnQiLCJfcmVuZGVyUG9saWN5IiwiX3JlbmRlckZsb3dTdGVwRm9ybSIsImNvbnRlbnQiLCJpbWFnZSIsIl9vblJlc2V0Rmxvd1N0ZXAiLCJyZXNldCIsImxpc3QiLCJwcmVmaXgiLCJpc0Zsb3ciLCJwcmUiLCJzdGVwSW5kZXgiLCJwb3N0IiwiZ2V0VXBkYXRlQ29tcGxldGUiLCJzaG91bGRVcGRhdGUiLCJjaGFuZ2VkUHJvcGVydGllcyIsImhhcyIsImRyYWdQb2xpY3kiLCJkcm9wUG9saWN5IiwidXBkYXRlZCIsInByb3BzIiwic2V0SXRlbSIsIl9vbkRlbGV0ZUZsb3ciLCJfZGVsZXRlRmxvdyIsImRlZmluZWRQcm9wZXJ0aWVzIiwiX29uRHVwbGljYXRlRmxvdyIsIl9hZGRGbG93IiwicGxhbkluZGV4IiwicCIsImkiLCJfb25DaGFuZ2VGbG93U3RhdGUiLCJfb25BZGRGbG93UGxhbiIsImNvbGxlY3Rpb24iLCJkdXBsaWNhdGUiLCJwdXNoIiwibmV3RmxvdyIsIl9pbnN0YW50aWF0ZSIsInByb3BlcnRpZXNEZWZpbml0aW9uIiwiaW5pdGlhdG9yIiwicHJvcGVydHkiLCJrZXkiLCJrZXlzIiwiZW50cnkiLCJ1bmRlZmluZWQiLCJpbmRleE9mIiwic2VsZWN0ZWRGbG93cyIsIl9maW5kRmxvd0luZGV4IiwiZiIsIl9vblJlb3JkZXJGbG93cyIsIm5ld09yZGVyIiwiX29uU2VhcmNoUG9saWN5IiwiX29uQ2xlYXJQb2xpY3kiLCJfb25TZWFyY2hGbG93cyIsIl9vbkNsZWFyRmxvd3MiLCJfb25SZXNldEFsbCIsIl9maWx0ZXJOb3RWYWxpZFN0ZXAiLCJfcmVtb3ZlUHJpdmF0ZVByb3BlcnRpZXMiLCJvIiwiY29weSIsInN0YXJ0c1dpdGgiLCJmb3JtIiwiaXNWYWxpZCIsInN1Ym1pdCIsImdldFByb3BlcnRpZXNFbGVtZW50IiwiY2xvc2VQcm9taXNlcyIsImN1cnJlbnRTdGVwIiwic2F2ZWQiLCJfZGVmaW5pdGlvblNhdmVkIiwiX2J1aWxkRGVmaW5pdGlvblRvU2VuZCIsImRlZmluaXRpb25Ub1NhdmUiLCJfb25TYXZlQWxsIiwiY2F0Y2giLCJjb25zb2xlIiwiZXJyb3IiLCJfb25EZWJ1ZyIsInJlcXVlc3RFdmVudCIsInJlcXVlc3QiLCJmaWx0ZXJlZEZsb3dzIiwiZmlsdGVyZWRQbGFucyIsIl9vbkZpbHRlckZsb3dzIiwiX2dldEZpbHRlcmVkUG9saWNpZXMiLCJvblJlcXVlc3QiLCJvblJlc3BvbnNlIiwiX29uRmlsdGVyUG9saWNpZXMiLCJfcmVuZGVyRGVzaWduIiwiX3JlbmRlckZsb3dGb3JtIiwiX3JlbmRlckRlYnVnIiwicmVzcG9uc2UiLCJpc0xvYWRpbmciLCJwYXRoIiwibWV0aG9kIiwiX3JlbmRlckNvbmZpZ3VyYXRpb25Gb3JtIiwiX29uUmVzb3VyY2VzQ2hhbmdlIiwiX29uUHJvcGVydGllc0NoYW5nZSIsIl9vblNhdmVQcm92aWRlciIsInByb3ZpZGVyIiwiX29uU3dpdGNoRW5jcnlwdGVkUHJvcGVydHkiLCJyZW5kZXIiLCJfZ2V0UmVhZG9ubHlNb2RlRm9yRGVzaWduIiwiZmxvd1BsYW4iLCJjb21wYXJlZEZsb3ciLCJjb21wYXJlZEZsb3dQbGFuIiwid2luZG93IiwiY3VzdG9tRWxlbWVudHMiLCJkZWZpbmUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLEdBQVQsRUFBY0MsSUFBZCxFQUFvQkMsVUFBcEIsUUFBc0MsS0FBdEM7QUFDQSxTQUFTQyxPQUFULFFBQXdCLGVBQXhCO0FBQ0EsU0FBU0MsbUJBQVQsUUFBb0MsZUFBcEM7QUFDQSxPQUFPLG9CQUFQO0FBQ0EsT0FBTyxrQkFBUDtBQUNBLE9BQU8sd0JBQVA7QUFDQSxPQUFPLCtCQUFQO0FBQ0EsT0FBTyxpQ0FBUDtBQUNBLE9BQU8sNkJBQVA7QUFDQSxPQUFPLDZCQUFQO0FBQ0EsT0FBTyxzQkFBUDtBQUNBLE9BQU8scUJBQVA7QUFDQSxPQUFPLFdBQVA7QUFDQSxPQUFPLGdCQUFQO0FBQ0EsT0FBTyx5QkFBUDtBQUNBLFNBQVNDLEtBQVQsUUFBc0IsaUJBQXRCO0FBQ0EsU0FBU0MsS0FBVCxRQUFzQixzQkFBdEI7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QUNBLFFBQUksQ0FBQzRKLFlBQUwsRUFBbUI7QUFDakIsYUFBTyxLQUFQO0FBQ0Q7O0FBRUQsVUFBTTtBQUFFblEsTUFBQUEsSUFBSSxFQUFFb1E7QUFBUixRQUE2QixLQUFLekosbUJBQUwsQ0FBeUJ3SixZQUFZLENBQUN4UCxHQUF0QyxDQUFuQzs7QUFDQSxXQUFPeVAsZ0JBQWdCLElBQUksS0FBS3RTLGFBQWhDO0FBQ0Q7O0FBdHRENkQ7QUF5dERoRXVTLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQkMsTUFBdEIsQ0FBNkIsa0JBQTdCLEVBQWlEclYsY0FBakQiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgY3NzLCBodG1sLCBMaXRFbGVtZW50IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IG1ldGhvZHMgfSBmcm9tICcuLi9saWIvc3R1ZGlvJztcbmltcG9ydCB7IGRpc3BhdGNoQ3VzdG9tRXZlbnQgfSBmcm9tICcuLi9saWIvZXZlbnRzJztcbmltcG9ydCAnLi4vYXRvbXMvZ3YtYnV0dG9uJztcbmltcG9ydCAnLi4vYXRvbXMvZ3YtaWNvbic7XG5pbXBvcnQgJy4uL21vbGVjdWxlcy9ndi1vcHRpb24nO1xuaW1wb3J0ICcuLi9vcmdhbmlzbXMvZ3YtZG9jdW1lbnRhdGlvbic7XG5pbXBvcnQgJy4uL29yZ2FuaXNtcy9ndi1yZXNpemFibGUtdmlld3MnO1xuaW1wb3J0ICcuLi9vcmdhbmlzbXMvZ3Ytc2NoZW1hLWZvcm0nO1xuaW1wb3J0ICcuLi9vcmdhbmlzbXMvZ3YtaHR0cC1jbGllbnQnO1xuaW1wb3J0ICcuLi9vcmdhbmlzbXMvZ3YtdGFicyc7XG5pbXBvcnQgJy4uL21vbGVjdWxlcy9ndi1yb3cnO1xuaW1wb3J0ICcuL2d2LWZsb3cnO1xuaW1wb3J0ICcuL2d2LWZsb3ctc3RlcCc7XG5pbXBvcnQgJy4vZ3YtcG9saWN5LXN0dWRpby1tZW51JztcbmltcG9ydCB7IGVtcHR5IH0gZnJvbSAnLi4vc3R5bGVzL2VtcHR5JztcbmltcG9ydCB7IGNhY2hlIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2FjaGUnO1xuaW1wb3J0IHsgZGVlcENsb25lLCBkZWVwRXF1YWwgfSBmcm9tICcuLi9saWIvdXRpbHMnO1xuaW1wb3J0IHsgS2V5Ym9hcmRFbGVtZW50LCBLRVlTIH0gZnJvbSAnLi4vbWl4aW5zL2tleWJvYXJkLWVsZW1lbnQnO1xuXG5jb25zdCBGTE9XX1NURVBfRk9STV9JRCA9ICdmbG93LXN0ZXAtZm9ybSc7XG5cbi8qKlxuICogIFN0dWRpbyBQb2xpY3kgY29tcG9uZW50XG4gKlxuICog4pqg77iPIFRoaXMgY29tcG9uZW50IGlzIGJhc2VkIG9uIGBhc2NpaWRvY3RvcmAsIGBoaWdobGlnaHQuanNgIGFuZCBgYXNjaWlkb2N0b3ItaGlnaGxpZ2h0LmpzYC5cbiAqIFRvIHVzZSB0aGlzIGNvbXBvbmVudCBpbiB5b3VyIHByb2plY3QgYmUgc3VyZSB0aGUgZGVwZW5kZW5jaWVzIGFyZSBpbnN0YWxsZWQgb3JcbiAqIGluc3RhbGwgdGhlbSB3aXRoOiBgbnBtIGluc3RhbGwgYXNjaWlkb2N0b3IgaGlnaGxpZ2h0LmpzIGFzY2lpZG9jdG9yLWhpZ2hsaWdodC5qcyAtLXNhdmVgXG4gKlxuICogQGZpcmVzIGd2LXBvbGljeS1zdHVkaW86c2VsZWN0LXBvbGljeSAtIFNlbGVjdCBwb2xpY3kgZXZlbnRcbiAqIEBmaXJlcyBndi1wb2xpY3ktc3R1ZGlvOnNhdmUgLSBFdmVudCBzZW50IHdoZW4gXCJTYXZlXCIgYnV0dG9uIGlzIGNsaWNrZWQsIGl0IGNvbnRhaW5zIHRoZSB3aG9sZSBkZWZpbml0aW9uIG9mIHRoZSBBUElcbiAqIEBmaXJlcyBndi1wb2xpY3ktc3R1ZGlvOmRlYnVnIC0gRXZlbnQgc2VudCB3aGVuIHZhbGlkYXRpb24gYnV0dG9uIG9mIHRoZSAnVHJ5IGl0JyB0YWIgaXMgY2xpY2tlZCwgaXQgY29udGFpbnMgdGhlIHdob2xlIGRlZmluaXRpb24gb2YgdGhlIEFQSSBhbmQgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0cnkgaXQgcmVxdWVzdC5cbiAqXG4gKiBAYXR0ciB7QXJyYXl9IHBvbGljaWVzIC0gUG9saWNpZXMgYXZhaWxhYmxlXG4gKiBAYXR0ciB7QXJyYXl9IHNlcnZpY2VzIC0gU2VydmljZXMgYXZhaWxhYmxlXG4gKiBAYXR0ciB7QXJyYXl9IHJlc291cmNlVHlwZXMgLSBSZXNvdXJjZXMgdHlwZXMgYXZhaWxhYmxlXG4gKiBAYXR0ciB7QXJyYXl9IHByb3BlcnR5UHJvdmlkZXJzIC0gUHJvdmlkZXJzIG9mIHByb3BlcnRpZXNcbiAqIEBhdHRyIHtBcnJheX0gZHluYW1pY1Byb3BlcnR5U2NoZW1hIC0gU2NoZW1hIGZvciB0aGUgZHluYW1pYyBwcm9wZXJ0eSBmb3JtXG4gKiBAYXR0ciB7U3RyaW5nfSB0YWJJZCAtIEN1cnJlbnQgdGFiSWQgdG8gZGlzcGxheSAoZGVzaWduLCBzZXR0aW5ncywgcHJvcGVydGllcyBvciByZXNvdXJjZXMpXG4gKiBAYXR0ciB7T2JqZWN0fSBkZWZpbml0aW9uIC0gVGhlIGRlZmluaXRpb24gb2YgZmxvd3NcbiAqIEBhdHRyIHtPYmplY3R9IGRvY3VtZW50YXRpb24gLSBUaGUgZG9jdW1lbnRhdGlvbiB0byBkaXNwbGF5XG4gKiBAYXR0ciB7T2JqZWN0fSBmbG93U2NoZW1hIC0gVGhlIGZsb3cgZm9ybSBjb25maWd1cmF0aW9uIHRvIGRpc3BsYXkgaW4gZ3Ytc2NoZW1hLWZvcm0gY29tcG9uZW50XG4gKiBAYXR0ciB7T2JqZWN0fSBjb25maWd1cmF0aW9uU2NoZW1hIC0gVGhlIGZvcm0gY29uZmlndXJhdGlvbiB0byBkaXNwbGF5IGluIGd2LXNjaGVtYS1mb3JtIGNvbXBvbmVudFxuICogQGF0dHIge09iamVjdH0gY29uZmlndXJhdGlvbkluZm9ybWF0aW9uIC0gVGhlIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gYXBpIGNvbmZpZ3VyYXRpb24gdGFiXG4gKiBAYXR0ciB7Qm9vbGVhbn0gaXNEaXJ0eSAtIHRydWUgaWYgY29tcG9uZW50IGlzIGRpcnR5XG4gKiBAYXR0ciB7QXJyYXl9IHNlbGVjdGVkRmxvd3NJZCAtIFRoZSBzZWxlY3RlZCBmbG93cyBpZFxuICogQGF0dHIge0Jvb2xlYW59IHNvcnRhYmxlIC0gdHJ1ZSBpZiBmbG93cyBhcmUgc29ydGFibGVcbiAqIEBhdHRyIHtCb29sZWFufSByZWFkb25seSAtIHRydWUgaWYgcmVhZG9ubHlcbiAqIEBhdHRyIHtCb29sZWFufSByZWFkb25seS1wbGFucyAtIHRydWUgaWYgcGxhbnMnIGZsb3dzIGNhbid0IGJlIG1vZGlmaWVkXG4gKiBAYXR0ciB7Qm9vbGVhbn0gY2FuLWFkZCAtIHRydWUgaWYgdXNlciBjYW4gYWRkIGZsb3dcbiAqIEBhdHRyIHtTdHJpbmd9IGZsb3dzVGl0bGUgLSBmbG93cyBtZW51IHRpdGxlXG4gKiBAYXR0ciB7Qm9vbGVhbn0gaGFzLXBvbGljeS1maWx0ZXIgLSB0cnVlIGlmIHBvbGljaWVzIGhhdmUgb25SZXF1ZXN0L29uUmVzcG9uc2UgcHJvcGVydGllc1xuICogQGF0dHIge0Jvb2xlYW59IGNhbi1kZWJ1ZyAtIHRydWUgaWYgZGVidWcgdGFiIHNob3VsZCBiZSBkaXNwbGF5ZWRcbiAqIEBhdHRyIHtPYmplY3R9IGRlYnVnUmVzcG9uc2UgLSB0cnVlIGlmIGRlYnVnIHRhYiBzaG91bGQgYmUgZGlzcGxheWVkXG4gKi9cbmV4cG9ydCBjbGFzcyBHdlBvbGljeVN0dWRpbyBleHRlbmRzIEtleWJvYXJkRWxlbWVudChMaXRFbGVtZW50KSB7XG4gIHN0YXRpYyBnZXQgcHJvcGVydGllcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9saWNpZXM6IHsgdHlwZTogQXJyYXkgfSxcbiAgICAgIHNlcnZpY2VzOiB7IHR5cGU6IE9iamVjdCB9LFxuICAgICAgcmVzb3VyY2VUeXBlczogeyB0eXBlOiBBcnJheSwgYXR0cmlidXRlOiAncmVzb3VyY2UtdHlwZXMnIH0sXG4gICAgICBwcm9wZXJ0eVByb3ZpZGVyczogeyB0eXBlOiBBcnJheSwgYXR0cmlidXRlOiAncHJvcGVydHktcHJvdmlkZXJzJyB9LFxuICAgICAgZHluYW1pY1Byb3BlcnR5U2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgYXR0cmlidXRlOiAnZHluYW1pYy1wcm9wZXJ0eS1zY2hlbWEnIH0sXG4gICAgICB0YWJJZDogeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ3RhYi1pZCcgfSxcbiAgICAgIF90YWJJZDogeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIGRlZmluaXRpb246IHsgdHlwZTogT2JqZWN0IH0sXG4gICAgICBfZGVmaW5pdGlvbjogeyB0eXBlOiBPYmplY3QsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIGRvY3VtZW50YXRpb246IHsgdHlwZTogT2JqZWN0IH0sXG4gICAgICBmbG93U2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgYXR0cmlidXRlOiAnZmxvdy1zY2hlbWEnIH0sXG4gICAgICBjb25maWd1cmF0aW9uU2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgYXR0cmlidXRlOiAnY29uZmlndXJhdGlvbi1zY2hlbWEnIH0sXG4gICAgICBfY29uZmlndXJhdGlvblNjaGVtYTogeyB0eXBlOiBPYmplY3QsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIGNvbmZpZ3VyYXRpb25JbmZvcm1hdGlvbjogeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2NvbmZpZ3VyYXRpb24taW5mb3JtYXRpb24nIH0sXG4gICAgICBpc0RpcnR5OiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ2RpcnR5JywgcmVmbGVjdDogdHJ1ZSB9LFxuICAgICAgX2RyYWdQb2xpY3k6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfZHJvcFBvbGljeTogeyB0eXBlOiBPYmplY3QsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIHNlbGVjdGVkRmxvd3NJZDogeyB0eXBlOiBBcnJheSwgYXR0cmlidXRlOiAnc2VsZWN0ZWQtZmxvd3MtaWQnIH0sXG4gICAgICBfc2VsZWN0ZWRGbG93c0lkOiB7IHR5cGU6IEFycmF5LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfY3VycmVudFBvbGljeUlkOiB7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX3NlYXJjaFBvbGljeVF1ZXJ5OiB7IHR5cGU6IFN0cmluZywgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX3NlYXJjaEZsb3dRdWVyeTogeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIF9mbG93U3RlcFNjaGVtYTogeyB0eXBlOiBPYmplY3QsIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIF9jdXJyZW50Rmxvd1N0ZXA6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfcG9saWN5RmlsdGVyOiB7IHR5cGU6IEFycmF5LCBhdHRyaWJ1dGU6IGZhbHNlIH0sXG4gICAgICBfZmxvd0ZpbHRlcjogeyB0eXBlOiBBcnJheSwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgX2N1cnJlbnRBc2tDb25maXJtYXRpb246IHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiBmYWxzZSB9LFxuICAgICAgaGFzUHJvcGVydGllczogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdoYXMtcHJvcGVydGllcycgfSxcbiAgICAgIF9oYXNQcm9wZXJ0aWVzOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIGhhc1Jlc291cmNlczogeyB0eXBlOiBCb29sZWFuLCBhdHRyaWJ1dGU6ICdoYXMtcmVzb3VyY2VzJyB9LFxuICAgICAgaGFzUG9saWN5RmlsdGVyOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ2hhcy1wb2xpY3ktZmlsdGVyJyB9LFxuICAgICAgZmxvd3NUaXRsZTogeyB0eXBlOiBTdHJpbmcsIGF0dHJpYnV0ZTogJ2Zsb3dzLXRpdGxlJyB9LFxuICAgICAgc29ydGFibGU6IHsgdHlwZTogQm9vbGVhbiB9LFxuICAgICAgY2FuQWRkOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ2Nhbi1hZGQnIH0sXG4gICAgICByZWFkb25seTogeyB0eXBlOiBCb29sZWFuIH0sXG4gICAgICByZWFkb25seVBsYW5zOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogJ3JlYWRvbmx5LXBsYW5zJyB9LFxuICAgICAgY2FuRGVidWc6IHsgdHlwZTogQm9vbGVhbiwgYXR0cmlidXRlOiAnY2FuLWRlYnVnJyB9LFxuICAgICAgX2NhbkRlYnVnOiB7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogZmFsc2UgfSxcbiAgICAgIGRlYnVnUmVzcG9uc2U6IHsgdHlwZTogT2JqZWN0LCBhdHRyaWJ1dGU6ICdkZWJ1Zy1yZXNwb25zZScgfSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGVtcHR5LFxuICAgICAgbWV0aG9kcyxcbiAgICAgIC8vIGxhbmd1YWdlPUNTU1xuICAgICAgY3NzYFxuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICAtLWhlaWdodDogdmFyKC0tZ3YtcG9saWN5LXN0dWRpby0taCwgY2FsYygxMDB2aCAtIDMycHgpKTtcbiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodCk7XG4gICAgICAgICAgLS1oZWlnaHQtaW4tdGFiczogY2FsYyh2YXIoLS1oZWlnaHQpIC0gMjVweCk7XG4gICAgICAgIH1cblxuICAgICAgICAuYm94IHtcbiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodCk7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5kZXNpZ24sXG4gICAgICAgIC5wcm9wZXJ0aWVzIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtcmVzaXphYmxlLXZpZXdzIHtcbiAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5lZGl0YWJsZS1uYW1lIHtcbiAgICAgICAgICBwYWRkaW5nOiAwLjVyZW0gMXJlbTtcbiAgICAgICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICAgIH1cblxuICAgICAgICAuZWRpdGFibGUtbmFtZSBzcGFuIHtcbiAgICAgICAgICBjb2xvcjogI2JmYmZiZjtcbiAgICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIH1cblxuICAgICAgICAuZm9ybV9fY29udHJvbCB7XG4gICAgICAgICAgbWFyZ2luOiAwLjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICBndi1pbnB1dCB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAuZmxvdy1uYW1lIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIH1cblxuICAgICAgICAuZmxvdy1uYW1lLmRpcnR5IHtcbiAgICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgICAgICAgb3BhY2l0eTogMC44O1xuICAgICAgICB9XG5cbiAgICAgICAgLmZsb3ctbmFtZSBndi1pY29uIHtcbiAgICAgICAgICAtLWd2LWljb24tLXM6IDI0cHg7XG4gICAgICAgICAgbWFyZ2luLXJpZ2h0OiAwLjJyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuZmxvdy1wYXRoIHtcbiAgICAgICAgICBtYXJnaW4tbGVmdDogMC4ycmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLnRpdGxlX21ldGhvZHMge1xuICAgICAgICAgIG1hcmdpbi1sZWZ0OiAwLjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAudHdvLWNvbHMge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgLnR3by1jb2xzID4gKiB7XG4gICAgICAgICAgZmxleDogMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5sZWZ0LW1lbnUge1xuICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2Q5ZDlkOTtcbiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodC1pbi10YWJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5yaWdodC1tZW51IHtcbiAgICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZDlkOWQ5O1xuICAgICAgICAgIGhlaWdodDogdmFyKC0taGVpZ2h0LWluLXRhYnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLnR3by1jb2xzID4gKjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2Q5ZDlkOTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mbG93LXN0ZXBfX2NvbnRhaW5lciB7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICBoZWlnaHQ6IDk5JTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mbG93LXN0ZXBfX2Zvcm0ge1xuICAgICAgICAgIHBhZGRpbmc6IDAgMC41cmVtO1xuICAgICAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgICB9XG5cbiAgICAgICAgLmZsb3ctc3RlcF9fZm9ybS10aXRsZSB7XG4gICAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4ycmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtdGFicyB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LXJlc2l6YWJsZS12aWV3cyxcbiAgICAgICAgZ3YtcHJvcGVydGllcyxcbiAgICAgICAgZ3YtcmVzb3VyY2VzIHtcbiAgICAgICAgICBoZWlnaHQ6IHZhcigtLWhlaWdodC1pbi10YWJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGd2LXByb3BlcnRpZXMsXG4gICAgICAgIGd2LXJlc291cmNlcyB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICBndi1wcm9wZXJ0aWVzLnByb3BlcnRpZXMge1xuICAgICAgICAgIC0tZ3YtcHJvcGVydGllcy10YWJsZS0tY29sbWc6IDEwcHg7XG4gICAgICAgIH1cblxuICAgICAgICAuYXBpLXNldHRpbmdzIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYmZiZmJmO1xuICAgICAgICAgIGhlaWdodDogdmFyKC0taGVpZ2h0LWluLXRhYnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmRlYnVnIHtcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYmZiZmJmO1xuICAgICAgICAgIGhlaWdodDogdmFyKC0taGVpZ2h0LWluLXRhYnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmFwaS1zZXR0aW5ncy1pbmZvcm1hdGlvbiB7XG4gICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLmFwaS1zZXR0aW5ncy1pbmZvcm1hdGlvbl9faWNvbiB7XG4gICAgICAgICAgLS1ndi1pY29uLS1jOiB2YXIoLS1ndi10aGVtZS1jb2xvciwgIzVhNzY4NCk7XG4gICAgICAgICAgLS1ndi1pY29uLW9wYWNpdHktLWM6IHZhcigtLWd2LXRoZW1lLWNvbG9yLWluZm8tbGlnaHQsICM2NGI1ZjYpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmFwaS1zZXR0aW5ncy1pbmZvcm1hdGlvbl9fYmxvY2txdW90ZSxcbiAgICAgICAgLmRlYnVnLWluZm9ybWF0aW9uX19ibG9ja3F1b3RlIHtcbiAgICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHZhcigtLWd2LXRoZW1lLWNvbG9yLCAjNWE3Njg0KTtcbiAgICAgICAgICBtYXJnaW46IDE1cHg7XG4gICAgICAgICAgcGFkZGluZy1sZWZ0OiAxNXB4O1xuICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mbG93LXNldHRpbmdzIGd2LXNjaGVtYS1mb3JtIHtcbiAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICAgIHBhZGRpbmc6IDAuNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5zZWFyY2gge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzdHJldGNoO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3YtaW5wdXQge1xuICAgICAgICAgIG1hcmdpbjogMC4ycmVtIDA7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyLWFjdGlvbnMsXG4gICAgICAgIC5zZWFyY2gtcG9saWNpZXMge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgIG1hcmdpbjogMC41cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLnNlYXJjaC1wb2xpY2llcyB7XG4gICAgICAgICAgbWFyZ2luOiAxLjVyZW0gMC41cmVtIDAuNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5mb290ZXItYWN0aW9ucyA+IGd2LWJ1dHRvbi5idG4tbGFyZ2UsXG4gICAgICAgIC5mb290ZXItYWN0aW9ucyA+IGd2LW9wdGlvbiB7XG4gICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAuZm9vdGVyLWFjdGlvbnMge1xuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgIHBhZGRpbmc6IDAuNXJlbSAwO1xuICAgICAgICAgIG1hcmdpbjogMC41cmVtIDE1cHg7XG4gICAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNiZmJmYmY7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyLWFjdGlvbnMgLnRpdGxlIHtcbiAgICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4zcmVtO1xuICAgICAgICAgIGNvbG9yOiAjYmZiZmJmO1xuICAgICAgICAgIGZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgICAgd2lkdGg6IDI0MHB4O1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDI1cHg7XG4gICAgICAgIH1cblxuICAgICAgICAuaGVhZGVyLWFjdGlvbnMgPiAqLFxuICAgICAgICAuc2VhcmNoLXBvbGljaWVzID4gKiB7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMXJlbTtcbiAgICAgICAgfVxuICAgICAgYCxcbiAgICBdO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmlzRGlydHkgPSBmYWxzZTtcbiAgICB0aGlzLnBvbGljaWVzID0gW107XG4gICAgdGhpcy5yZXNvdXJjZVR5cGVzID0gW107XG4gICAgdGhpcy50YWJJZCA9ICdkZXNpZ24nO1xuICAgIHRoaXMuc2VsZWN0ZWRGbG93c0lkID0gW107XG4gICAgdGhpcy5mbG93c1RpdGxlID0gJ0Zsb3dzJztcbiAgICB0aGlzLnNvcnRhYmxlID0gZmFsc2U7XG4gICAgdGhpcy5zZXJ2aWNlcyA9IHt9O1xuICAgIHRoaXMuX2RlZmluaXRpb24gPSB7XG4gICAgICBmbG93czogW10sXG4gICAgfTtcbiAgICB0aGlzLl90YWJzID0gW3sgaWQ6ICdkZXNpZ24nLCB0aXRsZTogJ0Rlc2lnbicsIGljb246ICduYXZpZ2F0aW9uOmV4Y2hhbmdlJyB9XTtcbiAgICB0aGlzLl9wb2xpY3lGaWx0ZXIgPSBbXTtcbiAgICB0aGlzLl9mbG93RmlsdGVyID0gW107XG4gIH1cblxuICBzZXQgaGFzUHJvcGVydGllcyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaW1wb3J0KCcuLi9vcmdhbmlzbXMvZ3YtcHJvcGVydGllcycpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl90YWJzID0gWy4uLnRoaXMuX3RhYnMsIHsgaWQ6ICdwcm9wZXJ0aWVzJywgdGl0bGU6ICdQcm9wZXJ0aWVzJywgaWNvbjogJ2dlbmVyYWw6c2V0dGluZ3MjMScgfV07XG4gICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuX2hhc1Byb3BlcnRpZXMgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBoYXNQcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB0aGlzLl9oYXNQcm9wZXJ0aWVzO1xuICB9XG5cbiAgc2V0IGhhc1Jlc291cmNlcyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgaW1wb3J0KCcuLi9vcmdhbmlzbXMvZ3YtcmVzb3VyY2VzJykudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX3RhYnMgPSBbLi4udGhpcy5fdGFicywgeyBpZDogJ3Jlc291cmNlcycsIHRpdGxlOiAnUmVzb3VyY2VzJywgaWNvbjogJ2dlbmVyYWw6c2V0dGluZ3MjNScgfV07XG4gICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2V0IGNhbkRlYnVnKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl90YWJzID0gWy4uLnRoaXMuX3RhYnMsIHsgaWQ6ICdkZWJ1ZycsIHRpdGxlOiAnVHJ5IGl0JywgaWNvbjogJ2NvbnRlbnQ6c2VuZCcgfV07XG4gICAgfVxuICB9XG5cbiAgZ2V0IF9mbG93RmlsdGVyT3B0aW9ucygpIHtcbiAgICBpZiAodGhpcy5kZWZpbmVkUGxhbnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgeyBpZDogJ2FwaScsIHRpdGxlOiAnQXBpJywgaWNvbjogJ3Nob3BwaW5nOmJveCMzJyB9LFxuICAgICAgICB7IGlkOiAncGxhbicsIHRpdGxlOiAnUGxhbnMnLCBpY29uOiAnc2hvcHBpbmc6c2FsZSMyJyB9LFxuICAgICAgXTtcbiAgICB9XG4gIH1cblxuICBzZXQgaGFzUG9saWN5RmlsdGVyKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9wb2xpY3lGaWx0ZXJPcHRpb25zID0gW1xuICAgICAgICB7IGlkOiAnb25SZXF1ZXN0JywgdGl0bGU6ICdSZXF1ZXN0JywgaWNvbjogJ25hdmlnYXRpb246YXJyb3ctZnJvbS1sZWZ0JyB9LFxuICAgICAgICB7IGlkOiAnb25SZXNwb25zZScsIHRpdGxlOiAnUmVzcG9uc2UnLCBpY29uOiAnbmF2aWdhdGlvbjphcnJvdy1mcm9tLXJpZ2h0JyB9LFxuICAgICAgXTtcbiAgICB9XG4gIH1cblxuICBzZXQgY29uZmlndXJhdGlvblNjaGVtYSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fdGFicy5zcGxpY2UoMSwgMCwgeyBpZDogJ3NldHRpbmdzJywgdGl0bGU6ICdDb25maWd1cmF0aW9uJywgaWNvbjogJ2dlbmVyYWw6c2V0dGluZ3MjMicgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fY29uZmlndXJhdGlvblNjaGVtYSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGNvbmZpZ3VyYXRpb25TY2hlbWEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZ3VyYXRpb25TY2hlbWE7XG4gIH1cblxuICBvbktleWJvYXJkKCkge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID09IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLmlzUHJlc3NlZChLRVlTLlNoaWZ0LCBLRVlTLkN0cmwsIEtFWVMuU3BhY2UpKSB7XG4gICAgICAgIGNvbnN0IHNlYXJjaCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCcjc2VhcmNoLXBvbGljeScpO1xuICAgICAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgICAgc2VhcmNoLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1ByZXNzZWQoS0VZUy5DdHJsLCBLRVlTLlNwYWNlKSkge1xuICAgICAgICBjb25zdCBzZWFyY2ggPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignI3NlYXJjaC1mbG93Jyk7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBzZWFyY2guZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldCB0YWJJZCh0YWJJZCkge1xuICAgIGlmICh0YWJJZCAhPSBudWxsICYmIFsnZGVzaWduJywgJ3NldHRpbmdzJywgJ3Byb3BlcnRpZXMnLCAncmVzb3VyY2VzJywgJ2RlYnVnJ10uaW5jbHVkZXModGFiSWQpKSB7XG4gICAgICB0aGlzLl90YWJJZCA9IHRhYklkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl90YWJJZCA9ICdkZXNpZ24nO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0YWJJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGFiSWQ7XG4gIH1cblxuICBzZXQgZGVmaW5pdGlvbihkZWZpbml0aW9uKSB7XG4gICAgaWYgKGRlZmluaXRpb24pIHtcbiAgICAgIGNvbnN0IGZsb3dzID0gdGhpcy5fZ2VuZXJhdGVGbG93c0lkKGRlZmluaXRpb24uZmxvd3MpO1xuICAgICAgY29uc3QgcmVzb3VyY2VzID0gdGhpcy5fZ2VuZXJhdGVJZCgncmVzb3VyY2UtJywgZGVmaW5pdGlvbi5yZXNvdXJjZXMpO1xuICAgICAgY29uc3QgcGxhbnMgPVxuICAgICAgICBkZWZpbml0aW9uLnBsYW5zID09IG51bGxcbiAgICAgICAgICA/IFtdXG4gICAgICAgICAgOiBkZWZpbml0aW9uLnBsYW5zLm1hcCgocGxhbikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4geyAuLi5wbGFuLCBmbG93czogdGhpcy5fZ2VuZXJhdGVQbGFuRmxvd3NJZChwbGFuKSB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICB0aGlzLl9pbml0aWFsRGVmaW5pdGlvbiA9IHsgLi4uZGVmaW5pdGlvbiwgZmxvd3MsIHJlc291cmNlcywgcGxhbnMgfTtcbiAgICAgIHRoaXMuX2RlZmluaXRpb24gPSBkZWVwQ2xvbmUodGhpcy5faW5pdGlhbERlZmluaXRpb24pO1xuICAgICAgdGhpcy5pc0RpcnR5ID0gZmFsc2U7XG4gICAgICB0aGlzLl9zZWxlY3RGaXJzdEZsb3coKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZGVmaW5pdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHNldCBzZWxlY3RlZEZsb3dzSWQoc2VsZWN0ZWRGbG93c0lkKSB7XG4gICAgaWYgKHNlbGVjdGVkRmxvd3NJZCAhPSBudWxsICYmIEFycmF5LmlzQXJyYXkoc2VsZWN0ZWRGbG93c0lkKSkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRGbG93c0lkID0gc2VsZWN0ZWRGbG93c0lkLmZpbHRlcigoaWQpID0+IHRoaXMuX2ZpbmRGbG93QnlJZChpZCkgIT0gbnVsbCk7XG4gICAgICBpZiAoc2VsZWN0ZWRGbG93c0lkLmxlbmd0aCAhPT0gdGhpcy5fc2VsZWN0ZWRGbG93c0lkLmxlbmd0aCkge1xuICAgICAgICB0aGlzLl9zZWxlY3RGaXJzdEZsb3codHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNlbGVjdGVkRmxvd3NJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRGbG93c0lkLmZpbHRlcigoaWQpID0+IHRoaXMuX2ZpbmRGbG93QnlJZChpZCkgIT0gbnVsbCk7XG4gIH1cblxuICBfdXBkYXRlU2VsZWN0ZWRGbG93cyhzZWxlY3RlZEZsb3dzSWQpIHtcbiAgICB0aGlzLnNlbGVjdGVkRmxvd3NJZCA9IHNlbGVjdGVkRmxvd3NJZDtcbiAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdzZWxlY3QtZmxvd3MnLCB7IGZsb3dzOiB0aGlzLnNlbGVjdGVkRmxvd3NJZCB9KTtcbiAgfVxuXG4gIF9zZWxlY3RGaXJzdEZsb3coZGlzcGF0Y2ggPSBmYWxzZSkge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRmxvd3NJZC5sZW5ndGggPT09IDApIHtcbiAgICAgIGxldCBjYW5kaWRhdGUgPSBudWxsO1xuICAgICAgaWYgKHRoaXMuZGVmaW5lZEZsb3dzLmxlbmd0aCA+IDAgJiYgdGhpcy5kZWZpbmVkRmxvd3NbMF0uX2lkICE9IG51bGwpIHtcbiAgICAgICAgY2FuZGlkYXRlID0gdGhpcy5kZWZpbmVkRmxvd3NbMF07XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuZGVmaW5lZFBsYW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgcGxhbiA9IHRoaXMuZGVmaW5lZFBsYW5zLmZpbmQoKHBsYW4pID0+IHBsYW4uZmxvd3MgIT0gbnVsbCAmJiBwbGFuLmZsb3dzLmxlbmd0aCA+IDAgJiYgcGxhbi5mbG93c1swXS5faWQgIT0gbnVsbCk7XG4gICAgICAgIGlmIChwbGFuKSB7XG4gICAgICAgICAgY2FuZGlkYXRlID0gcGxhbi5mbG93c1swXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGNhbmRpZGF0ZSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChkaXNwYXRjaCkge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3MoW2NhbmRpZGF0ZS5faWRdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxvd3NJZCA9IFtjYW5kaWRhdGUuX2lkXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9nZXRGbG93RWxlbWVudChmbG93SWQpIHtcbiAgICByZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtpZD1cIiR7Zmxvd0lkfVwiXWApO1xuICB9XG5cbiAgX29uRHJhZ0VuZFBvbGljeSgpIHtcbiAgICB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgnZ3YtZmxvdycpLmZvckVhY2goKGUpID0+IGUub25EcmFnRW5kKCkpO1xuICB9XG5cbiAgYXN5bmMgX29uRHJvcFBvbGljeSh7IGRldGFpbCB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2Fza1RvVmFsaWRhdGVGb3JtcygpO1xuXG4gICAgICBjb25zdCBwb2xpY3kgPSBkZXRhaWwucG9saWN5O1xuICAgICAgY29uc3QgdGFyZ2V0RmxvdyA9IHRoaXMuX2ZpbmRGbG93QnlJZChkZXRhaWwuZmxvd0lkKTtcblxuICAgICAgbGV0IG5hbWUgPSBwb2xpY3kubmFtZTtcbiAgICAgIGxldCBkZXNjcmlwdGlvbiA9ICcnO1xuICAgICAgbGV0IGNvbmZpZ3VyYXRpb24gPSB7fTtcbiAgICAgIGxldCBfaWQ7XG4gICAgICBsZXQgX25ldyA9IGZhbHNlO1xuICAgICAgaWYgKGRldGFpbC5mbG93U3RlcCkge1xuICAgICAgICBfaWQgPSBkZXRhaWwuZmxvd1N0ZXAuX2lkO1xuICAgICAgICBuYW1lID0gZGV0YWlsLmZsb3dTdGVwLm5hbWU7XG4gICAgICAgIGRlc2NyaXB0aW9uID0gZGV0YWlsLmZsb3dTdGVwLmRlc2NyaXB0aW9uIHx8ICcnO1xuICAgICAgICBjb25maWd1cmF0aW9uID0gZGV0YWlsLmZsb3dTdGVwLmNvbmZpZ3VyYXRpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfaWQgPSB0aGlzLl9nZW5lcmF0ZUZsb3dTdGVwSWQodGFyZ2V0Rmxvdy5faWQsIGRldGFpbC5mbG93S2V5LCBkZXRhaWwucG9zaXRpb24pO1xuICAgICAgICBfbmV3ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmxvd1N0ZXAgPSB7IF9pZCwgX25ldywgbmFtZSwgcG9saWN5OiBwb2xpY3kuaWQsIGRlc2NyaXB0aW9uLCBlbmFibGVkOiB0cnVlLCBjb25maWd1cmF0aW9uIH07XG4gICAgICBjb25zdCBzb3VyY2VGbG93ID0gZGV0YWlsLnNvdXJjZUZsb3dJZCAhPSBudWxsID8gdGhpcy5fZmluZEZsb3dCeUlkKGRldGFpbC5zb3VyY2VGbG93SWQpIDogdGFyZ2V0RmxvdztcblxuICAgICAgaWYgKGRldGFpbC5zb3VyY2VQb3NpdGlvbiAhPSBudWxsKSB7XG4gICAgICAgIGlmIChkZXRhaWwuc291cmNlRmxvd0tleSAmJiBkZXRhaWwuc291cmNlRmxvd0tleSAhPT0gZGV0YWlsLmZsb3dLZXkpIHtcbiAgICAgICAgICBzb3VyY2VGbG93W2RldGFpbC5zb3VyY2VGbG93S2V5XS5zcGxpY2UoZGV0YWlsLnNvdXJjZVBvc2l0aW9uLCAxKTtcbiAgICAgICAgICB0YXJnZXRGbG93W2RldGFpbC5mbG93S2V5XS5zcGxpY2UoZGV0YWlsLnBvc2l0aW9uLCAwLCBmbG93U3RlcCk7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRGbG93U3RlcCAhPSBudWxsICYmIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5zdGVwLl9pZCA9PT0gX2lkKSB7XG4gICAgICAgICAgICB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuZ3JvdXAgPSBkZXRhaWwuZmxvd0tleTtcbiAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgdXBkYXRlIHNjaGVtYSBhZnRlciBjaGFuZ2UgcmVxdWVzdCB0byByZXNwb25zZSBvciBpbnZlcnNlXG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLmJ1aWxkU2NoZW1hKHRoaXMuX2N1cnJlbnRGbG93U3RlcC5wb2xpY3kpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2V0Q3VycmVudEZsb3dTdGVwKHRoaXMuX2N1cnJlbnRGbG93U3RlcCwgc2NoZW1hLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuX2dldEZsb3dFbGVtZW50KHRhcmdldEZsb3cuX2lkKS5yZXF1ZXN0VXBkYXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChkZXRhaWwucG9zaXRpb24gPiBkZXRhaWwuc291cmNlUG9zaXRpb24pIHtcbiAgICAgICAgICAgIHRhcmdldEZsb3dbZGV0YWlsLmZsb3dLZXldLnNwbGljZShkZXRhaWwucG9zaXRpb24sIDAsIGZsb3dTdGVwKTtcbiAgICAgICAgICAgIHNvdXJjZUZsb3dbZGV0YWlsLmZsb3dLZXldLnNwbGljZShkZXRhaWwuc291cmNlUG9zaXRpb24sIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzb3VyY2VGbG93W2RldGFpbC5mbG93S2V5XS5zcGxpY2UoZGV0YWlsLnNvdXJjZVBvc2l0aW9uLCAxKTtcbiAgICAgICAgICAgIHRhcmdldEZsb3dbZGV0YWlsLmZsb3dLZXldLnNwbGljZShkZXRhaWwucG9zaXRpb24sIDAsIGZsb3dTdGVwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yY2UgUmVmcmVzaCBzb3VyY2UgZmxvdyBlbGVtZW50IHdoZW4gbW92ZSB0byBvdGhlciBmbG93XG4gICAgICAgIGlmICh0YXJnZXRGbG93Ll9pZCAhPT0gc291cmNlRmxvdy5faWQpIHtcbiAgICAgICAgICB0aGlzLl9nZXRGbG93RWxlbWVudCh0YXJnZXRGbG93Ll9pZCkucmVxdWVzdFVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRGbG93W2RldGFpbC5mbG93S2V5XS5zcGxpY2UoZGV0YWlsLnBvc2l0aW9uLCAwLCBmbG93U3RlcCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRGbG93Rm9ybSA9IHRoaXMuX2dldEZsb3dTdGVwRm9ybSgpO1xuICAgICAgICBpZiAoY3VycmVudEZsb3dGb3JtID09IG51bGwgfHwgY3VycmVudEZsb3dGb3JtLmRpcnR5ICE9PSB0cnVlKSB7XG4gICAgICAgICAgbGV0IHN0ZXAgPSB0YXJnZXRGbG93W2RldGFpbC5mbG93S2V5XVtkZXRhaWwucG9zaXRpb25dO1xuICAgICAgICAgIGlmIChzdGVwID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFdoZW4gY29uZmlybSBsb3NlIGNoYW5nZSBhZnRlciBkcm9wIHBvbGljeVxuICAgICAgICAgICAgc3RlcCA9IHRhcmdldEZsb3dbZGV0YWlsLmZsb3dLZXldW2RldGFpbC5wb3NpdGlvbiAtIDFdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChkZXRhaWwuY2FuY2VsRWRpdCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2VkaXRGbG93U3RlcCh7IHN0ZXAsIHBvbGljeSwgZmxvdzogdGFyZ2V0RmxvdywgZ3JvdXA6IGRldGFpbC5mbG93S2V5IH0pO1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZsb3dFbGVtZW50ID0gdGhpcy5fZ2V0Rmxvd0VsZW1lbnQodGFyZ2V0Rmxvdy5faWQpO1xuICAgICAgICAgICAgICAgIGZsb3dFbGVtZW50LnNlbGVjdGVkU3RlcElkID0gc3RlcC5faWQ7XG4gICAgICAgICAgICAgICAgZmxvd0VsZW1lbnQucmVxdWVzdFVwZGF0ZSgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGFyZ2V0Rmxvdy5fZGlydHkgPSB0cnVlO1xuICAgICAgc291cmNlRmxvdy5fZGlydHkgPSB0cnVlO1xuICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdndi1mbG93JykuZm9yRWFjaCgoZ3ZGbG93KSA9PiBndkZsb3cucmVtb3ZlQ2FuZGlkYXRlKCkpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2RyYWdQb2xpY3kgPSBudWxsO1xuICAgICAgICB0aGlzLl9kcm9wUG9saWN5ID0gbnVsbDtcbiAgICAgIH0sIDApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIF9vbkRlbGV0ZVBvbGljeSh7IGRldGFpbCB9KSB7XG4gICAgY29uc3QgdGFyZ2V0RmxvdyA9IHRoaXMuX2ZpbmRGbG93QnlJZChkZXRhaWwuZmxvd0lkKTtcbiAgICB0YXJnZXRGbG93W2RldGFpbC5mbG93S2V5XS5zcGxpY2UoZGV0YWlsLnBvc2l0aW9uLCAxKTtcbiAgICB0YXJnZXRGbG93Ll9kaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgICBpZiAoZGV0YWlsLnRhcmdldC5lZGl0aW5nKSB7XG4gICAgICB0aGlzLl9jbG9zZUZsb3dTdGVwRm9ybSh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5fZ2V0Rmxvd0VsZW1lbnQoZGV0YWlsLmZsb3dJZCkucmVxdWVzdFVwZGF0ZSgpO1xuICB9XG5cbiAgX29uRGVzaWduKCkge1xuICAgIHRoaXMuX2NoYW5nZVRhYignZGVzaWduJyk7XG4gICAgdGhpcy5fc3BsaXRNYWluVmlld3MoKTtcbiAgfVxuXG4gIGJ1aWxkU2NoZW1hKHsgc2NoZW1hIH0pIHtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHtcbiAgICAgIHRpdGxlOiAnRGVzY3JpcHRpb24nLFxuICAgICAgZGVzY3JpcHRpb246ICdEZXNjcmlwdGlvbiBvZiBmbG93IHN0ZXAnLFxuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgfTtcbiAgICBpZiAoc2NoZW1hKSB7XG4gICAgICBjb25zdCBqc29uU2NoZW1hID0gdHlwZW9mIHNjaGVtYSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHNjaGVtYSkgOiBzY2hlbWE7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0geyBkZXNjcmlwdGlvbiwgLi4uanNvblNjaGVtYS5wcm9wZXJ0aWVzIH07XG4gICAgICByZXR1cm4geyAuLi5qc29uU2NoZW1hLCBwcm9wZXJ0aWVzIH07XG4gICAgfVxuICAgIHJldHVybiB7IHByb3BlcnRpZXM6IHsgZGVzY3JpcHRpb24gfSB9O1xuICB9XG5cbiAgYXN5bmMgX2VkaXRGbG93U3RlcCh7IHN0ZXAsIGZsb3csIHBvbGljeSwgZ3JvdXAgfSkge1xuICAgIGlmIChzdGVwKSB7XG4gICAgICB0aGlzLl9jdXJyZW50UG9saWN5SWQgPSBwb2xpY3kuaWQ7XG4gICAgICBjb25zdCBjdXJyZW50Rmxvd1N0ZXAgPSB7IGZsb3csIHN0ZXAsIHBvbGljeSwgZ3JvdXAgfTtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuYnVpbGRTY2hlbWEocG9saWN5KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX3NldEN1cnJlbnRGbG93U3RlcChjdXJyZW50Rmxvd1N0ZXAsIHNjaGVtYSk7XG4gICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3MoW2Zsb3cuX2lkXSk7XG4gICAgICAgIHRoaXMuX3NwbGl0TWFpblZpZXdzKCk7XG4gICAgICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZ3YtcG9saWN5LXN0dWRpbzprZWVwLWRvY3VtZW50YXRpb24tY2xvc2UnKSA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5fb25PcGVuRG9jdW1lbnRhdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLl9jbG9zZUZsb3dTdGVwRm9ybSgpO1xuICAgICAgdGhpcy5fbWF4aW1pemVUb3BWaWV3KCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX29uRWRpdEZsb3dTdGVwKHsgZGV0YWlsOiB7IHN0ZXAsIGZsb3csIHBvbGljeSwgZ3JvdXAgfSB9KSB7XG4gICAgcmV0dXJuIHRoaXMuX2VkaXRGbG93U3RlcCh7IHN0ZXAsIGZsb3csIHBvbGljeSwgZ3JvdXAgfSk7XG4gIH1cblxuICBfZ2V0UmVzaXphYmxlVmlld3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdndi1yZXNpemFibGUtdmlld3MnKTtcbiAgfVxuXG4gIF9tYXhpbWl6ZVRvcFZpZXcoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGbG93c0lkLmxlbmd0aCA8PSAxKSB7XG4gICAgICB0aGlzLl9nZXRSZXNpemFibGVWaWV3cygpLm1heGltaXplVG9wKCk7XG4gICAgfVxuICB9XG5cbiAgX21heGltaXplQm90dG9tVmlldygpIHtcbiAgICB0aGlzLl9nZXRSZXNpemFibGVWaWV3cygpLm1heGltaXplQm90dG9tKCk7XG4gIH1cblxuICBfc3BsaXRNYWluVmlld3MoKSB7XG4gICAgdGhpcy5fZ2V0UmVzaXphYmxlVmlld3MoKS5zcGxpdCgpO1xuICB9XG5cbiAgX29uQ2hhbmdlRmxvd1N0ZXBTdGF0ZSh7IGRldGFpbCB9KSB7XG4gICAgY29uc3QgdGFyZ2V0RmxvdyA9IHRoaXMuX2ZpbmRGbG93QnlJZChkZXRhaWwuZmxvd0lkKTtcbiAgICBjb25zdCBzdGVwID0gdGFyZ2V0Rmxvd1tkZXRhaWwuZmxvd0tleV1bZGV0YWlsLnBvc2l0aW9uXTtcbiAgICBzdGVwLmVuYWJsZWQgPSBkZXRhaWwuZW5hYmxlZDtcbiAgICB0YXJnZXRGbG93Ll9kaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIF9vbkNsb3NlRmxvd1N0ZXBGb3JtKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9jbG9zZUZsb3dTdGVwRm9ybSgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX2Nsb3NlRmxvd1N0ZXBGb3JtKGZvcmNlID0gZmFsc2UpIHtcbiAgICBhd2FpdCB0aGlzLl9zZXRDdXJyZW50Rmxvd1N0ZXAobnVsbCwgbnVsbCwgZm9yY2UpO1xuICB9XG5cbiAgYXN5bmMgX2Fza1RvVmFsaWRhdGVGb3JtcygpIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9PSBudWxsKSB7XG4gICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gdHJ1ZTtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzLl9zdWJtaXRPckNvbmZpcm1Gb3JtcygpKS50aGVuKChmb3JtcykgPT4ge1xuICAgICAgICBpZiAoZm9ybXMuZmlsdGVyKChyKSA9PiByICE9IG51bGwpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLl9kZWZpbml0aW9uID0gdGhpcy5fYnVpbGREZWZpbml0aW9uVG9TYXZlKCk7XG4gICAgICAgICAgdGhpcy5nZXRDaGlsZHJlbigpLmZvckVhY2goKGUpID0+IGUucmVxdWVzdFVwZGF0ZSgpKTtcbiAgICAgICAgICAvLyBSZWZyZXNoIGlmIGxvc2UgY2hhbmdlcyBsb3N0IGN1cnJlbnQgc3RlcCBzZWxlY3Rpb25cbiAgICAgICAgICByZXR1cm4gdGhpcy5fY2hlY2tDdXJyZW50Rmxvd1N0ZXAoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0Q2hpbGRyZW4oKS5mb3JFYWNoKChlKSA9PiBlLnJlcXVlc3RVcGRhdGUoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IG51bGw7XG4gICAgICAgICAgICAgIHJldHVybiBmb3JtcztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgICAgICAgIHJldHVybiBmb3JtcztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignYXNrIGFscmVhZHkgd2FpdGluZycpO1xuICB9XG5cbiAgYXN5bmMgX3NldEN1cnJlbnRGbG93U3RlcChjdXJyZW50Rmxvd1N0ZXAsIGZsb3dTdGVwU2NoZW1hLCBmb3JjZSA9IGZhbHNlKSB7XG4gICAgaWYgKCFmb3JjZSkge1xuICAgICAgYXdhaXQgdGhpcy5fYXNrVG9WYWxpZGF0ZUZvcm1zKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2NoZW1hID0gZGVlcENsb25lKGZsb3dTdGVwU2NoZW1hKTtcbiAgICBpZiAoY3VycmVudEZsb3dTdGVwICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPVxuICAgICAgICB0eXBlb2YgY3VycmVudEZsb3dTdGVwLnN0ZXAuY29uZmlndXJhdGlvbiA9PT0gJ3N0cmluZydcbiAgICAgICAgICA/IEpTT04ucGFyc2UoY3VycmVudEZsb3dTdGVwLnN0ZXAuY29uZmlndXJhdGlvbilcbiAgICAgICAgICA6IGN1cnJlbnRGbG93U3RlcC5zdGVwLmNvbmZpZ3VyYXRpb247XG4gICAgICBjb25zdCBzdGVwID0geyAuLi5jdXJyZW50Rmxvd1N0ZXAuc3RlcCwgY29uZmlndXJhdGlvbiB9O1xuXG4gICAgICBjb25zdCBfaW5pdGlhbFZhbHVlcyA9IHsgLi4uc3RlcC5jb25maWd1cmF0aW9uLCBkZXNjcmlwdGlvbjogc3RlcC5kZXNjcmlwdGlvbiB9O1xuICAgICAgdGhpcy5fY3VycmVudEZsb3dTdGVwID0geyAuLi5jdXJyZW50Rmxvd1N0ZXAsIHN0ZXAsIF9pbml0aWFsVmFsdWVzIH07XG5cbiAgICAgIGlmIChmbG93U3RlcFNjaGVtYSAmJiBmbG93U3RlcFNjaGVtYS5wcm9wZXJ0aWVzLnNjb3BlKSB7XG4gICAgICAgIGNvbnN0IF9lbnVtID0gc2NoZW1hLnByb3BlcnRpZXMuc2NvcGUuZW51bTtcbiAgICAgICAgaWYgKF9lbnVtLmZpbmQoKHNjb3BlKSA9PiBbJ1JFUVVFU1QnLCAnUkVRVUVTVF9DT05URU5UJywgJ1JFU1BPTlNFJywgJ1JFU1BPTlNFX0NPTlRFTlQnXS5pbmNsdWRlcyhzY29wZSkpICE9IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMuX2N1cnJlbnRGbG93U3RlcC5ncm91cCA9PT0gJ3ByZScgPyBbJ1JFUVVFU1QnLCAnUkVRVUVTVF9DT05URU5UJ10gOiBbJ1JFU1BPTlNFJywgJ1JFU1BPTlNFX0NPTlRFTlQnXTtcbiAgICAgICAgICBzY2hlbWEucHJvcGVydGllcy5zY29wZS5lbnVtID0gX2VudW0uZmlsdGVyKChzY29wZSkgPT4gZmlsdGVyZWQuaW5jbHVkZXMoc2NvcGUpKTtcbiAgICAgICAgICBjb25zdCBzY29wZSA9IHRoaXMuX2N1cnJlbnRGbG93U3RlcC5zdGVwLmNvbmZpZ3VyYXRpb24uc2NvcGU7XG4gICAgICAgICAgaWYgKHNjb3BlID09IG51bGwgfHwgIXNjaGVtYS5wcm9wZXJ0aWVzLnNjb3BlLmVudW0uaW5jbHVkZXMoc2NvcGUpKSB7XG4gICAgICAgICAgICBzY2hlbWEucHJvcGVydGllcy5zY29wZS5kZWZhdWx0ID0gc2NoZW1hLnByb3BlcnRpZXMuc2NvcGUuZW51bVswXTtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5zdGVwLmNvbmZpZ3VyYXRpb24uc2NvcGUgPSBzY2hlbWEucHJvcGVydGllcy5zY29wZS5lbnVtWzBdO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudEZsb3dTdGVwLl9pbml0aWFsVmFsdWVzLnNjb3BlID0gc2NoZW1hLnByb3BlcnRpZXMuc2NvcGUuZW51bVswXTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuX3ZhbHVlcykge1xuICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuX3ZhbHVlcy5zY29wZSA9IHNjaGVtYS5wcm9wZXJ0aWVzLnNjb3BlLmVudW1bMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRGbG93U3RlcCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fZmxvd1N0ZXBTY2hlbWEgPSBzY2hlbWE7XG4gIH1cblxuICBfcmVmcmVzaChjbG9zZVN0ZXBGb3JtID0gdHJ1ZSkge1xuICAgIGlmIChjbG9zZVN0ZXBGb3JtKSB7XG4gICAgICB0aGlzLl9jbG9zZUZsb3dTdGVwRm9ybSh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5fZGVmaW5pdGlvbiA9IGRlZXBDbG9uZSh0aGlzLl9kZWZpbml0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIF9vblNlbGVjdEZsb3dzKHsgZGV0YWlsIH0pIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fY2xvc2VGbG93U3RlcEZvcm0oKTtcbiAgICAgIHRoaXMuX29uQ2xvc2VEb2N1bWVudGF0aW9uKCk7XG4gICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZEZsb3dzKGRldGFpbC5mbG93cyk7XG4gICAgICB0aGlzLl9vbkRlc2lnbigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9vbk9wZW5Eb2N1bWVudGF0aW9uRnJvbU1lbnUoeyBkZXRhaWw6IHsgcG9saWN5IH0gfSkge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5kb2N1bWVudGF0aW9uID09IG51bGwgfHwgdGhpcy5kb2N1bWVudGF0aW9uLmlkICE9PSBwb2xpY3kuaWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5fY2xvc2VGbG93U3RlcEZvcm0oKTtcbiAgICAgICAgdGhpcy5fY3VycmVudFBvbGljeUlkID0gcG9saWN5LmlkO1xuICAgICAgICBpZiAodGhpcy5nZXRTZWxlY3RlZEZsb3coKSkge1xuICAgICAgICAgIHRoaXMuX3NwbGl0TWFpblZpZXdzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fbWF4aW1pemVCb3R0b21WaWV3KCk7XG4gICAgICAgIH1cbiAgICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnZmV0Y2gtZG9jdW1lbnRhdGlvbicsIHsgcG9saWN5IH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cblxuICBfZmV0Y2hEb2N1bWVudGF0aW9uKHBvbGljeSkge1xuICAgIGlmICh0aGlzLmRvY3VtZW50YXRpb24gPT0gbnVsbCB8fCB0aGlzLmRvY3VtZW50YXRpb24uaWQgIT09IHBvbGljeS5pZCkge1xuICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnZmV0Y2gtZG9jdW1lbnRhdGlvbicsIHsgcG9saWN5IH0pO1xuICAgIH1cbiAgfVxuXG4gIF9vbk9wZW5Eb2N1bWVudGF0aW9uKCkge1xuICAgIGlmICh0aGlzLl9jdXJyZW50Rmxvd1N0ZXAgJiYgdGhpcy5fY3VycmVudEZsb3dTdGVwLnBvbGljeSkge1xuICAgICAgdGhpcy5fZmV0Y2hEb2N1bWVudGF0aW9uKHRoaXMuX2N1cnJlbnRGbG93U3RlcC5wb2xpY3kpO1xuICAgIH1cbiAgfVxuXG4gIF9vbk9wZW5Eb2N1bWVudGF0aW9uRnJvbUZvcm0oKSB7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2d2LXBvbGljeS1zdHVkaW86a2VlcC1kb2N1bWVudGF0aW9uLWNsb3NlJyk7XG4gICAgdGhpcy5fb25PcGVuRG9jdW1lbnRhdGlvbigpO1xuICB9XG5cbiAgX2ZpbmRGbG93Q29sbGVjdGlvbihmbG93SWQpIHtcbiAgICBjb25zdCBwbGFuID0gdGhpcy5kZWZpbmVkUGxhbnMuZmluZCgocGxhbikgPT4gcGxhbi5mbG93cy5maW5kKChmbG93KSA9PiBmbG93Ll9pZCA9PT0gZmxvd0lkKSAhPSBudWxsKTtcbiAgICByZXR1cm4geyBwbGFuLCBmbG93czogcGxhbiAhPSBudWxsID8gcGxhbi5mbG93cyA6IHRoaXMuZGVmaW5lZEZsb3dzIH07XG4gIH1cblxuICBfZmluZEZsb3dCeUlkKGZsb3dJZCkge1xuICAgIGxldCBmbG93ID0gdGhpcy5kZWZpbmVkRmxvd3MuZmluZCgoZmxvdykgPT4gZmxvdy5faWQgPT09IGZsb3dJZCk7XG4gICAgaWYgKGZsb3cgPT0gbnVsbCkge1xuICAgICAgY29uc3QgcGxhbnNGbG93cyA9IHRoaXMuZGVmaW5lZFBsYW5zLm1hcCgocGxhbikgPT4gcGxhbi5mbG93cykucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjLmNvbmNhdCh2YWwpLCBbXSk7XG4gICAgICBmbG93ID0gcGxhbnNGbG93cy5maW5kKChmbG93KSA9PiBmbG93Ll9pZCA9PT0gZmxvd0lkKTtcbiAgICB9XG4gICAgcmV0dXJuIGZsb3c7XG4gIH1cblxuICBnZXRTZWxlY3RlZEZsb3coaW5kZXggPSAwKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRGbG93SWQgPSB0aGlzLnNlbGVjdGVkRmxvd3NJZFtpbmRleF07XG4gICAgcmV0dXJuIHRoaXMuX2ZpbmRGbG93QnlJZChzZWxlY3RlZEZsb3dJZCk7XG4gIH1cblxuICBfb25UYXJnZXRQb2xpY3koeyBkZXRhaWwgfSkge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID09IG51bGwpIHtcbiAgICAgIHRoaXMuX2RyYWdQb2xpY3kgPSBkZXRhaWw7XG4gICAgfVxuICB9XG5cbiAgX29uQ2hhbmdlRmxvd1N0ZXAoeyBkZXRhaWwgfSkge1xuICAgIHRoaXMuX2N1cnJlbnRGbG93U3RlcC5fdmFsdWVzID0gZGV0YWlsLnZhbHVlcztcbiAgfVxuXG4gIF93cml0ZUZsb3dTdGVwKHZhbHVlcykge1xuICAgIGNvbnN0IHsgZGVzY3JpcHRpb24sIC4uLmNvbmZpZ3VyYXRpb24gfSA9IHZhbHVlcztcbiAgICBpZiAoXG4gICAgICB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5fbmV3IHx8XG4gICAgICB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5kZXNjcmlwdGlvbiAhPT0gZGVzY3JpcHRpb24gfHxcbiAgICAgICFkZWVwRXF1YWwodGhpcy5fY3VycmVudEZsb3dTdGVwLnN0ZXAuY29uZmlndXJhdGlvbiwgY29uZmlndXJhdGlvbilcbiAgICApIHtcbiAgICAgIGNvbnN0IGZsb3cgPSB0aGlzLl9maW5kRmxvd0J5SWQodGhpcy5fY3VycmVudEZsb3dTdGVwLmZsb3cuX2lkKTtcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gZmxvd1t0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuZ3JvdXBdLmZpbmRJbmRleCgoc3RlcCkgPT4gc3RlcC5faWQgPT09IHRoaXMuX2N1cnJlbnRGbG93U3RlcC5zdGVwLl9pZCk7XG5cbiAgICAgIGZsb3dbdGhpcy5fY3VycmVudEZsb3dTdGVwLmdyb3VwXVtwb3NpdGlvbl0uZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICAgIGZsb3dbdGhpcy5fY3VycmVudEZsb3dTdGVwLmdyb3VwXVtwb3NpdGlvbl0uY29uZmlndXJhdGlvbiA9IGRlZXBDbG9uZShjb25maWd1cmF0aW9uKTtcbiAgICAgIGRlbGV0ZSBmbG93W3RoaXMuX2N1cnJlbnRGbG93U3RlcC5ncm91cF1bcG9zaXRpb25dLl9uZXc7XG4gICAgICBmbG93W3RoaXMuX2N1cnJlbnRGbG93U3RlcC5ncm91cF1bcG9zaXRpb25dLl9kaXJ0eSA9IHRydWU7XG4gICAgICBmbG93Ll9kaXJ0eSA9IHRydWU7XG4gICAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICAgICAgdGhpcy5fY3VycmVudEZsb3dTdGVwLmZsb3cgPSBmbG93O1xuICAgICAgdGhpcy5fY3VycmVudEZsb3dTdGVwLnN0ZXAgPSBmbG93W3RoaXMuX2N1cnJlbnRGbG93U3RlcC5ncm91cF1bcG9zaXRpb25dO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9vblN1Ym1pdEZsb3dTdGVwKHsgZGV0YWlsIH0pIHtcbiAgICB0aGlzLl93cml0ZUZsb3dTdGVwKGRldGFpbC52YWx1ZXMpO1xuICAgIGF3YWl0IHRoaXMucmVxdWVzdFVwZGF0ZSgnX2RlZmluaXRpb24nKTtcbiAgICB0aGlzLmdldENoaWxkcmVuKCkuZm9yRWFjaCgoYykgPT4gYy5yZXF1ZXN0VXBkYXRlKCkpO1xuICB9XG5cbiAgX29uQ2FuY2VsRmxvdygpIHtcbiAgICB0aGlzLl9vbkRlc2lnbigpO1xuICB9XG5cbiAgX29uU3VibWl0Rmxvdyh7IGRldGFpbDogeyB2YWx1ZXMgfSB9KSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRGbG93ID0gdGhpcy5nZXRTZWxlY3RlZEZsb3coKTtcbiAgICBjb25zdCBfdmFsdWVzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fY3JlYXRlRmxvd0Zyb21TY2hlbWEoKSwgdmFsdWVzKTtcbiAgICBjb25zdCBzZWxlY3RlZEZsb3dVcGRhdGVkID0gT2JqZWN0LmFzc2lnbih7fSwgc2VsZWN0ZWRGbG93LCBfdmFsdWVzKTtcbiAgICBpZiAoIWRlZXBFcXVhbChzZWxlY3RlZEZsb3csIHNlbGVjdGVkRmxvd1VwZGF0ZWQpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHNlbGVjdGVkRmxvdywgc2VsZWN0ZWRGbG93VXBkYXRlZCwgeyBfZGlydHk6IHRydWUgfSk7XG4gICAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICAgICAgdGhpcy5fcmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIF9vbkNhbmNlbEZsb3dNb2RlKCkge1xuICAgIHRoaXMuX29uRGVzaWduKCk7XG4gIH1cblxuICBfb25TdWJtaXRGbG93TW9kZSh7IGRldGFpbDogeyB2YWx1ZXMgfSB9KSB7XG4gICAgdGhpcy5fZGVmaW5pdGlvblsnZmxvdy1tb2RlJ10gPSB2YWx1ZXNbJ2Zsb3ctbW9kZSddIHx8ICdERUZBVUxUJztcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuX3JlZnJlc2goKTtcbiAgfVxuXG4gIF9vbkNoYW5nZVRhYih7IGRldGFpbCB9KSB7XG4gICAgdGhpcy5fY2hhbmdlVGFiKGRldGFpbC52YWx1ZSk7XG4gIH1cblxuICBhc3luYyBfY2hhbmdlVGFiVmFsaWRhdG9yKHsgZnJvbSwgdG8gfSkge1xuICAgIGlmIChmcm9tID09PSAncHJvcGVydGllcycpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdndi1wcm9wZXJ0aWVzJyk7XG4gICAgICBpZiAoY29tcG9uZW50LmRpcnR5KSB7XG4gICAgICAgIHJldHVybiBjb21wb25lbnQuY29uZmlybSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZnJvbSA9PT0gJ3Jlc291cmNlcycpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdndi1yZXNvdXJjZXMnKTtcbiAgICAgIGlmIChjb21wb25lbnQuZGlydHkpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5jb25maXJtKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9hc2tUb1ZhbGlkYXRlRm9ybXMoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IG51bGw7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIF9jaGFuZ2VUYWIodGFiSWQpIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9PSBudWxsKSB7XG4gICAgICB0aGlzLnRhYklkID0gdGFiSWQ7XG4gICAgICBkaXNwYXRjaEN1c3RvbUV2ZW50KHRoaXMsICdjaGFuZ2UtdGFiJywgdGhpcy50YWJJZCk7XG4gICAgfVxuICB9XG5cbiAgX29uRHJhZ1N0YXJ0Rmxvd1N0ZXAoZmxvdywgeyBkZXRhaWwgfSkge1xuICAgIGlmICh0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID09IG51bGwpIHtcbiAgICAgIHRoaXMuX2Ryb3BQb2xpY3kgPSBkZXRhaWw7XG4gICAgICB0aGlzLl9kcmFnUG9saWN5ID0gZGV0YWlsO1xuICAgIH1cbiAgfVxuXG4gIF9yZW5kZXJGbG93RW1wdHlTdGF0ZShyZWFkb25seU1vZGUpIHtcbiAgICByZXR1cm4gaHRtbGA8ZGl2IHNsb3Q9XCJjb250ZW50XCIgY2xhc3M9XCJlbXB0eVwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgU2VsZWN0IGEgZmxvd1xuICAgICAgICAke3JlYWRvbmx5TW9kZSAhPT0gdHJ1ZVxuICAgICAgICAgID8gaHRtbGBvciA8Z3YtYnV0dG9uIEBndi1idXR0b246Y2xpY2s9XCIke3RoaXMuX29uQWRkRmxvd31cIiBvdXRsaW5lZCBpY29uPVwiY29kZTpwbHVzXCIgbGFyZ2U+ZGVzaWduIG5ldyBvbmU8L2d2LWJ1dHRvbj5gXG4gICAgICAgICAgOiAnJ31cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PmA7XG4gIH1cblxuICBfcmVuZGVyRmxvdyhpbmRleCA9IDAsIGhhc0VtcHR5U3RhdGUgPSB0cnVlLCByZWFkb25seU1vZGUpIHtcbiAgICBjb25zdCBmbG93ID0gdGhpcy5nZXRTZWxlY3RlZEZsb3coaW5kZXgpO1xuICAgIGlmIChmbG93KSB7XG4gICAgICBjb25zdCB7IHBsYW4gfSA9IHRoaXMuX2ZpbmRGbG93Q29sbGVjdGlvbihmbG93Ll9pZCk7XG4gICAgICBjb25zdCBzZWxlY3RlZFN0ZXBJZCA9IHRoaXMuX2N1cnJlbnRGbG93U3RlcCA/IHRoaXMuX2N1cnJlbnRGbG93U3RlcC5zdGVwLl9pZCA6IG51bGw7XG4gICAgICByZXR1cm4gaHRtbGAgPGd2LWZsb3dcbiAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEwMCVcIlxuICAgICAgICAuaWQ9XCIke2Zsb3cuX2lkfVwiXG4gICAgICAgIC5mbG93PVwiJHtmbG93fVwiXG4gICAgICAgIC5wbGFuPVwiJHtwbGFufVwiXG4gICAgICAgIC5wb2xpY2llcz1cIiR7dGhpcy5wb2xpY2llc31cIlxuICAgICAgICBzbG90PVwiY29udGVudFwiXG4gICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICAuZHJhZ1BvbGljeT1cIiR7dGhpcy5fZHJhZ1BvbGljeX1cIlxuICAgICAgICAuZHJvcFBvbGljeT1cIiR7dGhpcy5fZHJvcFBvbGljeX1cIlxuICAgICAgICAuc2VsZWN0ZWRTdGVwSWQ9XCIke3NlbGVjdGVkU3RlcElkfVwiXG4gICAgICAgID9yZWFkb25seT1cIiR7cmVhZG9ubHlNb2RlfVwiXG4gICAgICAgID9oYXMtcG9saWN5LWZpbHRlcj1cIiR7dGhpcy5fcG9saWN5RmlsdGVyT3B0aW9ucyAhPSBudWxsfVwiXG4gICAgICAgIGZsb3dzLXRpdGxlPVwiJHt0aGlzLmZsb3dzVGl0bGV9XCJcbiAgICAgICAgQGd2LWZsb3c6ZHJhZy1zdGFydD1cIiR7dGhpcy5fb25EcmFnU3RhcnRGbG93U3RlcC5iaW5kKHRoaXMsIGZsb3cpfVwiXG4gICAgICAgIEBndi1mbG93OmVkaXQ9XCIke3RoaXMuX29uRWRpdEZsb3dTdGVwfVwiXG4gICAgICAgIEBndi1mbG93OmNoYW5nZS1zdGF0ZT1cIiR7dGhpcy5fb25DaGFuZ2VGbG93U3RlcFN0YXRlfVwiXG4gICAgICAgIEBndi1mbG93OmRyb3A9XCIke3RoaXMuX29uRHJvcFBvbGljeX1cIlxuICAgICAgICBAZ3YtZmxvdzpkZWxldGU9XCIke3RoaXMuX29uRGVsZXRlUG9saWN5fVwiXG4gICAgICA+PC9ndi1mbG93PmA7XG4gICAgfSBlbHNlIGlmIChoYXNFbXB0eVN0YXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyRmxvd0VtcHR5U3RhdGUocmVhZG9ubHlNb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWxgYDtcbiAgfVxuXG4gIF9vbkZldGNoUmVzb3VyY2VzKGV2ZW50KSB7XG4gICAgY29uc3QgeyBjdXJyZW50VGFyZ2V0LCByZWdleFR5cGVzIH0gPSBldmVudC5kZXRhaWw7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZGVmaW5lZFJlc291cmNlc1xuICAgICAgLmZpbHRlcigocmVzb3VyY2UpID0+IHJlZ2V4VHlwZXMgPT0gbnVsbCB8fCBuZXcgUmVnRXhwKHJlZ2V4VHlwZXMpLnRlc3QocmVzb3VyY2UudHlwZSkpXG4gICAgICAubWFwKChyZXNvdXJjZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VUeXBlID0gdGhpcy5yZXNvdXJjZVR5cGVzLmZpbmQoKHR5cGUpID0+IHR5cGUuaWQgPT09IHJlc291cmNlLnR5cGUpO1xuICAgICAgICBjb25zdCByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdndi1yb3cnKTtcbiAgICAgICAgY29uc3QgcGljdHVyZSA9IHJlc291cmNlVHlwZS5pY29uID8gcmVzb3VyY2VUeXBlLmljb24gOiBudWxsO1xuICAgICAgICByb3cuaXRlbSA9IHsgcGljdHVyZSwgbmFtZTogcmVzb3VyY2UubmFtZSB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVsZW1lbnQ6IHJvdyxcbiAgICAgICAgICB2YWx1ZTogcmVzb3VyY2UubmFtZSxcbiAgICAgICAgICBpZDogcmVzb3VyY2UudHlwZSxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIGN1cnJlbnRUYXJnZXQub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBfcmVuZGVyUG9saWN5KHJlYWRvbmx5TW9kZSkge1xuICAgIGlmICh0aGlzLl9mbG93U3RlcFNjaGVtYSAmJiB0aGlzLmRvY3VtZW50YXRpb24pIHtcbiAgICAgIHJldHVybiBodG1sYDxndi1yZXNpemFibGUtdmlld3MgZGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiIG5vLW92ZXJmbG93PlxuICAgICAgICA8ZGl2IHNsb3Q9XCJ0b3BcIj4ke3RoaXMuX3JlbmRlckZsb3dTdGVwRm9ybShyZWFkb25seU1vZGUpfTwvZGl2PlxuICAgICAgICA8ZGl2IHNsb3Q9XCJib3R0b21cIj5cbiAgICAgICAgICA8Z3YtZG9jdW1lbnRhdGlvblxuICAgICAgICAgICAgLnRleHQ9XCIke3RoaXMuZG9jdW1lbnRhdGlvbi5jb250ZW50fVwiXG4gICAgICAgICAgICAuaW1hZ2U9XCIke3RoaXMuZG9jdW1lbnRhdGlvbi5pbWFnZX1cIlxuICAgICAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiXG4gICAgICAgICAgICBAZ3YtZG9jdW1lbnRhdGlvbjpjbG9zZT1cIiR7dGhpcy5fb25DbG9zZURvY3VtZW50YXRpb259XCJcbiAgICAgICAgICA+PC9ndi1kb2N1bWVudGF0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZ3YtcmVzaXphYmxlLXZpZXdzPmA7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRvY3VtZW50YXRpb24pIHtcbiAgICAgIHJldHVybiBodG1sYDxndi1kb2N1bWVudGF0aW9uXG4gICAgICAgIC50ZXh0PVwiJHt0aGlzLmRvY3VtZW50YXRpb24uY29udGVudH1cIlxuICAgICAgICAuaW1hZ2U9XCIke3RoaXMuZG9jdW1lbnRhdGlvbi5pbWFnZX1cIlxuICAgICAgICA/ZGlzYWJsZWQ9XCIke3RoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb259XCJcbiAgICAgICAgQGd2LWRvY3VtZW50YXRpb246Y2xvc2U9XCIke3RoaXMuX29uQ2xvc2VEb2N1bWVudGF0aW9ufVwiXG4gICAgICA+PC9ndi1kb2N1bWVudGF0aW9uPmA7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9mbG93U3RlcFNjaGVtYSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlckZsb3dTdGVwRm9ybShyZWFkb25seU1vZGUpO1xuICAgIH1cbiAgICByZXR1cm4gaHRtbGBgO1xuICB9XG5cbiAgX2dldEZsb3dTdGVwRm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYCMke0ZMT1dfU1RFUF9GT1JNX0lEfWApO1xuICB9XG5cbiAgX29uUmVzZXRGbG93U3RlcCgpIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEZsb3dTdGVwKSB7XG4gICAgICBkZWxldGUgdGhpcy5fY3VycmVudEZsb3dTdGVwLl92YWx1ZXM7XG4gICAgICB0aGlzLl9nZXRGbG93U3RlcEZvcm0oKS5yZXNldCgpO1xuICAgIH1cbiAgfVxuXG4gIF9nZW5lcmF0ZUZsb3dzSWQobGlzdCwgZm9yY2UgPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLl9nZW5lcmF0ZUlkKCdmJywgbGlzdCwgZm9yY2UsIHRydWUpO1xuICB9XG5cbiAgX2dlbmVyYXRlUGxhbkZsb3dzSWQocGxhbiwgZm9yY2UgPSBmYWxzZSkge1xuICAgIHJldHVybiB0aGlzLl9nZW5lcmF0ZUlkKHBsYW4uaWQsIHBsYW4uZmxvd3MsIGZvcmNlLCB0cnVlKTtcbiAgfVxuXG4gIF9nZW5lcmF0ZUZsb3dTdGVwSWQoZmxvd0lkLCBmbG93S2V5LCBwb3NpdGlvbikge1xuICAgIHJldHVybiBgJHtmbG93SWR9XyR7Zmxvd0tleX1fJHtwb3NpdGlvbn1gO1xuICB9XG5cbiAgX2dlbmVyYXRlSWQocHJlZml4LCBsaXN0LCBmb3JjZSA9IGZhbHNlLCBpc0Zsb3cgPSBmYWxzZSkge1xuICAgIGlmIChsaXN0KSB7XG4gICAgICByZXR1cm4gbGlzdC5tYXAoKGUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IF9pZCA9IGAke3ByZWZpeH1fJHtpbmRleH1gO1xuICAgICAgICBpZiAoaXNGbG93KSB7XG4gICAgICAgICAgaWYgKGUucHJlKSB7XG4gICAgICAgICAgICBlLnByZS5mb3JFYWNoKChzdGVwLCBzdGVwSW5kZXgpID0+IChzdGVwLl9pZCA9IHRoaXMuX2dlbmVyYXRlRmxvd1N0ZXBJZChfaWQsICdwcmUnLCBzdGVwSW5kZXgpKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlLnBvc3QpIHtcbiAgICAgICAgICAgIGUucG9zdC5mb3JFYWNoKChzdGVwLCBzdGVwSW5kZXgpID0+IChzdGVwLl9pZCA9IHRoaXMuX2dlbmVyYXRlRmxvd1N0ZXBJZChfaWQsICdwb3N0Jywgc3RlcEluZGV4KSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9yY2UgfHwgZS5faWQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB7IC4uLmUsIF9pZCB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgZ2V0Q2hpbGRyZW4oKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLkFycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2d2LWZsb3cnKSksXG4gICAgICAuLi5BcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdndi1yZXNpemFibGUtdmlld3MnKSksXG4gICAgXTtcbiAgfVxuXG4gIGFzeW5jIGdldFVwZGF0ZUNvbXBsZXRlKCkge1xuICAgIGF3YWl0IHN1cGVyLmdldFVwZGF0ZUNvbXBsZXRlKCk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5nZXRDaGlsZHJlbigpLm1hcCgoZSkgPT4gZS51cGRhdGVDb21wbGV0ZSkpO1xuICB9XG5cbiAgc2hvdWxkVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKSB7XG4gICAgLy8gSnVzdCByZWZyZXNoIGd2LWZsb3cgY29tcG9uZW50c1xuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ19kcmFnUG9saWN5JykpIHtcbiAgICAgIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdndi1mbG93JykuZm9yRWFjaCgoZmxvdykgPT4gKGZsb3cuZHJhZ1BvbGljeSA9IHRoaXMuX2RyYWdQb2xpY3kpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnX2Ryb3BQb2xpY3knKSkge1xuICAgICAgdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2d2LWZsb3cnKS5mb3JFYWNoKChmbG93KSA9PiAoZmxvdy5kcm9wUG9saWN5ID0gdGhpcy5fZHJvcFBvbGljeSkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuc2hvdWxkVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIHVwZGF0ZWQocHJvcHMpIHtcbiAgICBpZiAocHJvcHMuaGFzKCdkb2N1bWVudGF0aW9uJykgJiYgdGhpcy5kb2N1bWVudGF0aW9uICE9IG51bGwgJiYgdGhpcy5zZWxlY3RlZEZsb3dzSWQubGVuZ3RoID4gMSkge1xuICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRGbG93cyhbdGhpcy5zZWxlY3RlZEZsb3dzSWRbMF1dKTtcbiAgICB9XG4gIH1cblxuICBfcmVuZGVyRmxvd1N0ZXBGb3JtKHJlYWRvbmx5TW9kZSkge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuX2N1cnJlbnRGbG93U3RlcC5fdmFsdWVzIHx8IHRoaXMuX2N1cnJlbnRGbG93U3RlcC5faW5pdGlhbFZhbHVlcztcbiAgICByZXR1cm4gaHRtbGAke2NhY2hlKFxuICAgICAgdGhpcy5fZmxvd1N0ZXBTY2hlbWEgJiYgdGhpcy5fY3VycmVudEZsb3dTdGVwXG4gICAgICAgID8gaHRtbGA8ZGl2IGNsYXNzPVwiZmxvdy1zdGVwX19jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbG93LXN0ZXBfX2Zvcm1cIj5cbiAgICAgICAgICAgICAgPGd2LXNjaGVtYS1mb3JtXG4gICAgICAgICAgICAgICAgLmlkPVwiJHtGTE9XX1NURVBfRk9STV9JRH1cIlxuICAgICAgICAgICAgICAgIC5zY2hlbWE9XCIke3RoaXMuX2Zsb3dTdGVwU2NoZW1hfVwiXG4gICAgICAgICAgICAgICAgLmljb249XCJkZXNpZ246ZWRpdFwiXG4gICAgICAgICAgICAgICAgaGFzLWhlYWRlclxuICAgICAgICAgICAgICAgIHZhbGlkYXRlLW9uLXJlbmRlclxuICAgICAgICAgICAgICAgIC52YWx1ZXM9XCIke3ZhbHVlc31cIlxuICAgICAgICAgICAgICAgIC5kaXJ0eT1cIiR7dGhpcy5fY3VycmVudEZsb3dTdGVwLl92YWx1ZXMgIT0gbnVsbH1cIlxuICAgICAgICAgICAgICAgID9yZWFkb25seT1cIiR7cmVhZG9ubHlNb2RlfVwiXG4gICAgICAgICAgICAgICAgc2Nyb2xsYWJsZVxuICAgICAgICAgICAgICAgIEBndi1zY2hlbWEtZm9ybTpjaGFuZ2U9XCIke3RoaXMuX29uQ2hhbmdlRmxvd1N0ZXB9XCJcbiAgICAgICAgICAgICAgICBAZ3Ytc2NoZW1hLWZvcm06cmVzZXQ9XCIke3RoaXMuX29uUmVzZXRGbG93U3RlcH1cIlxuICAgICAgICAgICAgICAgIEBndi1zY2hlbWEtZm9ybTpmZXRjaC1yZXNvdXJjZXM9XCIke3RoaXMuX29uRmV0Y2hSZXNvdXJjZXN9XCJcbiAgICAgICAgICAgICAgICBAZ3Ytc2NoZW1hLWZvcm06c3VibWl0PVwiJHt0aGlzLl9vblN1Ym1pdEZsb3dTdGVwfVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IHNsb3Q9XCJ0aXRsZVwiIGNsYXNzPVwiZmxvdy1zdGVwX19mb3JtLXRpdGxlXCI+JHt0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5uYW1lfTwvZGl2PlxuICAgICAgICAgICAgICAgIDxndi1idXR0b25cbiAgICAgICAgICAgICAgICAgIHNsb3Q9XCJoZWFkZXItbGVmdFwiXG4gICAgICAgICAgICAgICAgICBpY29uPVwiZ2VuZXJhbDpjbG9zZVwiXG4gICAgICAgICAgICAgICAgICBvdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgc21hbGxcbiAgICAgICAgICAgICAgICAgIEBndi1idXR0b246Y2xpY2s9XCIke3RoaXMuX29uQ2xvc2VGbG93U3RlcEZvcm19XCJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQ2xvc2VcIlxuICAgICAgICAgICAgICAgID48L2d2LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8Z3YtYnV0dG9uXG4gICAgICAgICAgICAgICAgICBzbG90PVwiaGVhZGVyLWxlZnRcIlxuICAgICAgICAgICAgICAgICAgaWNvbj1cImhvbWU6Ym9va1wiXG4gICAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9XCIke3RoaXMuZG9jdW1lbnRhdGlvbiAhPSBudWxsfVwiXG4gICAgICAgICAgICAgICAgICBvdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgc21hbGxcbiAgICAgICAgICAgICAgICAgIEBndi1idXR0b246Y2xpY2s9XCIke3RoaXMuX29uT3BlbkRvY3VtZW50YXRpb25Gcm9tRm9ybX1cIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJPcGVuIGRvY3VtZW50YXRpb25cIlxuICAgICAgICAgICAgICAgID48L2d2LWJ1dHRvbj5cbiAgICAgICAgICAgICAgPC9ndi1zY2hlbWEtZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PmBcbiAgICAgICAgOiAnJyxcbiAgICApfWA7XG4gIH1cblxuICBfb25DbG9zZURvY3VtZW50YXRpb24oKSB7XG4gICAgdGhpcy5kb2N1bWVudGF0aW9uID0gbnVsbDtcbiAgICBpZiAodGhpcy5fY3VycmVudEZsb3dTdGVwID09IG51bGwpIHtcbiAgICAgIHRoaXMuX21heGltaXplVG9wVmlldygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZ3YtcG9saWN5LXN0dWRpbzprZWVwLWRvY3VtZW50YXRpb24tY2xvc2UnLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBfb25EZWxldGVGbG93KHsgZGV0YWlsIH0pIHtcbiAgICBjb25zdCBmbG93SWQgPSBkZXRhaWwuY29udGVudC5faWQ7XG4gICAgY29uc3QgeyBmbG93cyB9ID0gdGhpcy5fZmluZEZsb3dDb2xsZWN0aW9uKGZsb3dJZCk7XG4gICAgY29uc3QgZmxvdyA9IGZsb3dzLmZpbmQoKGZsb3cpID0+IGZsb3cuX2lkID09PSBmbG93SWQpO1xuICAgIHRoaXMuX2RlbGV0ZUZsb3coZmxvd3MsIGZsb3cpO1xuICB9XG5cbiAgZ2V0IGRlZmluZWRGbG93cygpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmaW5pdGlvbiAmJiB0aGlzLl9kZWZpbml0aW9uLmZsb3dzID8gdGhpcy5fZGVmaW5pdGlvbi5mbG93cyA6IFtdO1xuICB9XG5cbiAgZ2V0IGRlZmluZWRQbGFucygpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmaW5pdGlvbiAmJiB0aGlzLl9kZWZpbml0aW9uLnBsYW5zID8gdGhpcy5fZGVmaW5pdGlvbi5wbGFucyA6IFtdO1xuICB9XG5cbiAgZ2V0IGRlZmluZWRSZXNvdXJjZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmluaXRpb24gJiYgdGhpcy5fZGVmaW5pdGlvbi5yZXNvdXJjZXMgPyB0aGlzLl9kZWZpbml0aW9uLnJlc291cmNlcyA6IFtdO1xuICB9XG5cbiAgZ2V0IGRlZmluZWRQcm9wZXJ0aWVzKCkge1xuICAgIHJldHVybiB0aGlzLl9kZWZpbml0aW9uICYmIHRoaXMuX2RlZmluaXRpb24ucHJvcGVydGllcyA/IHRoaXMuX2RlZmluaXRpb24ucHJvcGVydGllcyA6IFtdO1xuICB9XG5cbiAgYXN5bmMgX29uRHVwbGljYXRlRmxvdyh7IGRldGFpbCB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2Fza1RvVmFsaWRhdGVGb3JtcygpO1xuXG4gICAgICBjb25zdCBmbG93SWQgPSBkZXRhaWwuY29udGVudC5faWQ7XG4gICAgICBjb25zdCB7IHBsYW4sIGZsb3dzIH0gPSB0aGlzLl9maW5kRmxvd0NvbGxlY3Rpb24oZmxvd0lkKTtcbiAgICAgIHRoaXMuX2FkZEZsb3coZmxvd3MsIHRoaXMuX2ZpbmRGbG93QnlJZChmbG93SWQpKTtcbiAgICAgIGlmIChwbGFuICE9IG51bGwpIHtcbiAgICAgICAgbGV0IHBsYW5JbmRleCA9IG51bGw7XG4gICAgICAgIHRoaXMuZGVmaW5lZFBsYW5zLmZpbmQoKHAsIGkpID0+IHtcbiAgICAgICAgICBpZiAocC5pZCA9PT0gcGxhbi5pZCkge1xuICAgICAgICAgICAgcGxhbkluZGV4ID0gaTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBwbGFuLmZsb3dzID0gZmxvd3M7XG4gICAgICAgIHRoaXMuZGVmaW5lZFBsYW5zW3BsYW5JbmRleF0uZmxvd3MgPSB0aGlzLl9nZW5lcmF0ZVBsYW5GbG93c0lkKHBsYW4sIHRydWUpO1xuICAgICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZEZsb3dzKFt0aGlzLmRlZmluZWRQbGFuc1twbGFuSW5kZXhdLmZsb3dzW2Zsb3dzLmxlbmd0aCAtIDFdLl9pZF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZGVmaW5pdGlvbi5mbG93cyA9IHRoaXMuX2dlbmVyYXRlRmxvd3NJZCh0aGlzLl9kZWZpbml0aW9uLmZsb3dzKTtcbiAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRGbG93cyhbdGhpcy5fZGVmaW5pdGlvbi5mbG93c1t0aGlzLl9kZWZpbml0aW9uLmZsb3dzLmxlbmd0aCAtIDFdLl9pZF0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgX29uQ2hhbmdlRmxvd1N0YXRlKHsgZGV0YWlsIH0pIHtcbiAgICBjb25zdCBmbG93ID0gdGhpcy5fZmluZEZsb3dCeUlkKGRldGFpbC5jb250ZW50Ll9pZCk7XG4gICAgZmxvdy5lbmFibGVkID0gZGV0YWlsLmVuYWJsZWQ7XG4gICAgZmxvdy5fZGlydHkgPSB0cnVlO1xuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gIH1cblxuICBhc3luYyBfb25BZGRGbG93UGxhbih7IGRldGFpbCB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuX2Fza1RvVmFsaWRhdGVGb3JtcygpO1xuICAgICAgdGhpcy5fYWRkRmxvdyh0aGlzLmRlZmluZWRQbGFuc1tkZXRhaWwucGxhbkluZGV4XS5mbG93cyk7XG4gICAgICB0aGlzLmRlZmluZWRQbGFuc1tkZXRhaWwucGxhbkluZGV4XS5mbG93cyA9IHRoaXMuX2dlbmVyYXRlUGxhbkZsb3dzSWQodGhpcy5kZWZpbmVkUGxhbnNbZGV0YWlsLnBsYW5JbmRleF0pO1xuICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRGbG93cyhbdGhpcy5kZWZpbmVkUGxhbnNbZGV0YWlsLnBsYW5JbmRleF0uZmxvd3NbdGhpcy5kZWZpbmVkUGxhbnNbZGV0YWlsLnBsYW5JbmRleF0uZmxvd3MubGVuZ3RoIC0gMV0uX2lkXSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfb25BZGRGbG93KCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9hc2tUb1ZhbGlkYXRlRm9ybXMoKTtcblxuICAgICAgdGhpcy5fYWRkRmxvdyh0aGlzLl9kZWZpbml0aW9uLmZsb3dzKTtcbiAgICAgIHRoaXMuX2RlZmluaXRpb24uZmxvd3MgPSB0aGlzLl9nZW5lcmF0ZUZsb3dzSWQodGhpcy5fZGVmaW5pdGlvbi5mbG93cyk7XG4gICAgICB0aGlzLl91cGRhdGVTZWxlY3RlZEZsb3dzKFt0aGlzLl9kZWZpbml0aW9uLmZsb3dzW3RoaXMuX2RlZmluaXRpb24uZmxvd3MubGVuZ3RoIC0gMV0uX2lkXSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBfYWRkRmxvdyhjb2xsZWN0aW9uLCBkdXBsaWNhdGUgPSBudWxsKSB7XG4gICAgY29uc3QgZmxvdyA9XG4gICAgICBkdXBsaWNhdGUgPT0gbnVsbFxuICAgICAgICA/IHRoaXMuX2NyZWF0ZUZsb3dGcm9tU2NoZW1hKClcbiAgICAgICAgOiB7XG4gICAgICAgICAgICAuLi5kdXBsaWNhdGUsXG4gICAgICAgICAgICBfaWQ6IG51bGwsXG4gICAgICAgICAgICAvLyByZXNldCB0aGUgaWQgdG8gYXZvaWQgaXNzdWUgd2l0aCBBTSB0aGF0IHBlcnNpc3RzIHRoZSBJRFxuICAgICAgICAgICAgaWQ6IG51bGwsXG4gICAgICAgICAgICBfZGlydHk6IHRydWUsXG4gICAgICAgICAgfTtcblxuICAgIGNvbGxlY3Rpb24ucHVzaChmbG93KTtcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICB9XG5cbiAgX2NyZWF0ZUZsb3dGcm9tU2NoZW1hKCkge1xuICAgIGNvbnN0IG5ld0Zsb3cgPSB7XG4gICAgICBuYW1lOiAnJyxcbiAgICAgIHByZTogW10sXG4gICAgICBwb3N0OiBbXSxcbiAgICAgIF9kaXJ0eTogdHJ1ZSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuX2luc3RhbnRpYXRlKHRoaXMuZmxvd1NjaGVtYS5wcm9wZXJ0aWVzLCBuZXdGbG93KTtcbiAgfVxuXG4gIF9pbnN0YW50aWF0ZShwcm9wZXJ0aWVzRGVmaW5pdGlvbiwgaW5pdGlhdG9yID0ge30pIHtcbiAgICBjb25zdCBwcm9wZXJ0eSA9IHsgLi4uaW5pdGlhdG9yIH07XG5cbiAgICBpZiAocHJvcGVydGllc0RlZmluaXRpb24pIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHByb3BlcnRpZXNEZWZpbml0aW9uKSkge1xuICAgICAgICBjb25zdCBlbnRyeSA9IHByb3BlcnRpZXNEZWZpbml0aW9uW2tleV07XG5cbiAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgcHJvcGVydHlba2V5XSA9IHRoaXMuX2luc3RhbnRpYXRlKGVudHJ5LnByb3BlcnRpZXMsIChpbml0aWF0b3IgPSB7fSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRyeS5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwcm9wZXJ0eVtrZXldID0gZW50cnkuZGVmYXVsdDtcbiAgICAgICAgfSBlbHNlIGlmIChlbnRyeS50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHByb3BlcnR5W2tleV0gPSAnJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9wZXJ0eTtcbiAgfVxuXG4gIF9kZWxldGVGbG93KGNvbGxlY3Rpb24sIGZsb3cpIHtcbiAgICBjb25zdCBpbmRleCA9IGNvbGxlY3Rpb24uaW5kZXhPZihmbG93KTtcbiAgICBjb2xsZWN0aW9uLnNwbGljZShpbmRleCwgMSk7XG4gICAgY29uc3Qgc2VsZWN0ZWRGbG93cyA9IHRoaXMuc2VsZWN0ZWRGbG93c0lkLmZpbHRlcigoZmxvd0lkKSA9PiBmbG93SWQgIT09IGZsb3cuX2lkKTtcbiAgICBpZiAoc2VsZWN0ZWRGbG93cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3Moc2VsZWN0ZWRGbG93cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NlbGVjdEZpcnN0Rmxvdyh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5fY2hhbmdlVGFiKCdkZXNpZ24nKTtcbiAgICB0aGlzLl9yZWZyZXNoKCk7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgfVxuXG4gIF9maW5kRmxvd0luZGV4KGxpc3QsIGlkKSB7XG4gICAgbGV0IGluZGV4ID0gbnVsbDtcbiAgICBsaXN0LmZpbmQoKGYsIGkpID0+IHtcbiAgICAgIGlmIChmLl9pZCA9PT0gaWQpIHtcbiAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBhc3luYyBfb25SZW9yZGVyRmxvd3MoeyBkZXRhaWw6IHsgcGxhbiB9IH0pIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5fYXNrVG9WYWxpZGF0ZUZvcm1zKCk7XG4gICAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICAgICAgaWYgKHBsYW4gIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBuZXdPcmRlciA9IHRoaXMuX2dlbmVyYXRlUGxhbkZsb3dzSWQocGxhbiwgdHJ1ZSk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRmxvd3NJZCkge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGVkRmxvd3MoXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmxvd3NJZC5tYXAoKGZsb3dJZCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2ZpbmRGbG93SW5kZXgocGxhbi5mbG93cywgZmxvd0lkKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGluZGV4ICE9IG51bGwgPyBuZXdPcmRlcltpbmRleF0uX2lkIDogZmxvd0lkO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBwbGFuLmZsb3dzID0gbmV3T3JkZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZXdPcmRlciA9IHRoaXMuX2dlbmVyYXRlRmxvd3NJZCh0aGlzLl9kZWZpbml0aW9uLmZsb3dzLCB0cnVlKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGbG93c0lkKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlU2VsZWN0ZWRGbG93cyhcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGbG93c0lkLm1hcCgoZmxvd0lkKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZmluZEZsb3dJbmRleCh0aGlzLl9kZWZpbml0aW9uLmZsb3dzLCBmbG93SWQpO1xuICAgICAgICAgICAgICByZXR1cm4gaW5kZXggIT0gbnVsbCA/IG5ld09yZGVyW2luZGV4XS5faWQgOiBmbG93SWQ7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RlZmluaXRpb24uZmxvd3MgPSBuZXdPcmRlcjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb24gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBfb25TZWFyY2hQb2xpY3koeyBkZXRhaWwgfSkge1xuICAgIHRoaXMuX3NlYXJjaFBvbGljeVF1ZXJ5ID0gZGV0YWlsO1xuICB9XG5cbiAgX29uQ2xlYXJQb2xpY3koKSB7XG4gICAgdGhpcy5fc2VhcmNoUG9saWN5UXVlcnkgPSBudWxsO1xuICB9XG5cbiAgX29uU2VhcmNoRmxvd3MoeyBkZXRhaWwgfSkge1xuICAgIHRoaXMuX3NlYXJjaEZsb3dRdWVyeSA9IGRldGFpbDtcbiAgfVxuXG4gIF9vbkNsZWFyRmxvd3MoKSB7XG4gICAgdGhpcy5fc2VhcmNoRmxvd1F1ZXJ5ID0gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIF9vblJlc2V0QWxsKCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLl9jbG9zZUZsb3dTdGVwRm9ybSgpO1xuICAgICAgdGhpcy5kZWZpbml0aW9uID0gZGVlcENsb25lKHRoaXMuX2luaXRpYWxEZWZpbml0aW9uKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBfZmlsdGVyTm90VmFsaWRTdGVwKHN0ZXApIHtcbiAgICByZXR1cm4gc3RlcC5fbmV3ICE9PSB0cnVlO1xuICB9XG5cbiAgX3JlbW92ZVByaXZhdGVQcm9wZXJ0aWVzKG8pIHtcbiAgICBjb25zdCBjb3B5ID0geyAuLi5vIH07XG4gICAgT2JqZWN0LmtleXMobylcbiAgICAgIC5maWx0ZXIoKGtleSkgPT4ga2V5LnN0YXJ0c1dpdGgoJ18nKSlcbiAgICAgIC5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgZGVsZXRlIGNvcHlba2V5XTtcbiAgICAgIH0pO1xuICAgIHJldHVybiBjb3B5O1xuICB9XG5cbiAgX3N1Ym1pdE9yQ29uZmlybUZvcm1zKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2d2LXNjaGVtYS1mb3JtJyldXG4gICAgICAuZmlsdGVyKChmb3JtKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzVmFsaWQgPSBmb3JtLmlzVmFsaWQoKTtcbiAgICAgICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgICAgICBmb3JtLnN1Ym1pdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm0uZGlydHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhaXNWYWxpZDtcbiAgICAgIH0pXG4gICAgICAubWFwKChmb3JtKSA9PiBmb3JtLmNvbmZpcm0oKSk7XG4gIH1cblxuICBnZXRQcm9wZXJ0aWVzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoJ2d2LXByb3BlcnRpZXMnKTtcbiAgfVxuXG4gIGFzeW5jIF9jaGVja0N1cnJlbnRGbG93U3RlcCgpIHtcbiAgICBpZiAodGhpcy5fY3VycmVudEZsb3dTdGVwICYmIHRoaXMuc2VsZWN0ZWRGbG93c0lkKSB7XG4gICAgICBjb25zdCBjbG9zZVByb21pc2VzID0gdGhpcy5zZWxlY3RlZEZsb3dzSWRcbiAgICAgICAgLm1hcCgoZmxvd0lkKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmxvdyA9IHRoaXMuX2ZpbmRGbG93QnlJZChmbG93SWQpO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdGVwID0gWy4uLmZsb3cucHJlLCAuLi5mbG93LnBvc3RdLmZpbmQoKHN0ZXApID0+IHN0ZXAuX2lkID09PSB0aGlzLl9jdXJyZW50Rmxvd1N0ZXAuc3RlcC5faWQpO1xuICAgICAgICAgIGlmIChjdXJyZW50U3RlcCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvc2VGbG93U3RlcEZvcm0odHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKChwKSA9PiBwICE9PSBudWxsKTtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChjbG9zZVByb21pc2VzKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgc2F2ZWQoKSB7XG4gICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgdGhpcy5faW5pdGlhbERlZmluaXRpb24gPSBkZWVwQ2xvbmUodGhpcy5fZGVmaW5pdGlvblNhdmVkKTtcbiAgICAgIHRoaXMuX2RlZmluaXRpb24gPSBkZWVwQ2xvbmUodGhpcy5fZGVmaW5pdGlvblNhdmVkKTtcbiAgICAgIHRoaXMuX2RlZmluaXRpb25TYXZlZCA9IG51bGw7XG4gICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoZWNrQ3VycmVudEZsb3dTdGVwKCk7XG4gICAgICB0aGlzLmRlZmluZWRQbGFucy5mb3JFYWNoKChwbGFuKSA9PiB7XG4gICAgICAgIHBsYW4uZmxvd3MuZm9yRWFjaCgoZmxvdykgPT4gKGZsb3cuX2RpcnR5ID0gZmFsc2UpKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kZWZpbmVkRmxvd3MuZm9yRWFjaCgoZmxvdykgPT4gKGZsb3cuX2RpcnR5ID0gZmFsc2UpKTtcbiAgICAgIHRoaXMuZ2V0Q2hpbGRyZW4oKS5mb3JFYWNoKChlKSA9PiBlLnJlcXVlc3RVcGRhdGUoKSk7XG4gICAgfVxuICB9XG5cbiAgX2J1aWxkRGVmaW5pdGlvblRvU2F2ZSgpIHtcbiAgICAvLyBDb3B5IGRlZmluaXRpb24gYW5kIHJlbW92ZSBpbnZhbGlkIHN0ZXBcbiAgICAvLyBLZWVwIHByaXZhdGUgcHJvcGVydGllcyBsaWtlIF9pZCBhbmQgb3RoZXJzIHN0dWZmIHVzZWZ1bCBmb3IgcmVuZGVyXG4gICAgY29uc3QgZmxvd3MgPSB0aGlzLl9kZWZpbml0aW9uLmZsb3dzLm1hcCgoZmxvdykgPT4ge1xuICAgICAgZmxvdy5wcmUgPSBmbG93LnByZS5maWx0ZXIodGhpcy5fZmlsdGVyTm90VmFsaWRTdGVwKTtcbiAgICAgIGZsb3cucG9zdCA9IGZsb3cucG9zdC5maWx0ZXIodGhpcy5fZmlsdGVyTm90VmFsaWRTdGVwKTtcbiAgICAgIHJldHVybiBmbG93O1xuICAgIH0pO1xuXG4gICAgbGV0IGRlZmluaXRpb24gPSB7IC4uLnRoaXMuX2RlZmluaXRpb24sIGZsb3dzIH07XG5cbiAgICBpZiAodGhpcy5fZGVmaW5pdGlvbi5wbGFucyAhPSBudWxsKSB7XG4gICAgICBjb25zdCBwbGFucyA9IHRoaXMuX2RlZmluaXRpb24ucGxhbnMubWFwKChwbGFuKSA9PiB7XG4gICAgICAgIGNvbnN0IGZsb3dzID0gcGxhbi5mbG93cy5tYXAoKGZsb3cpID0+IHtcbiAgICAgICAgICBmbG93LnByZSA9IGZsb3cucHJlLmZpbHRlcih0aGlzLl9maWx0ZXJOb3RWYWxpZFN0ZXApO1xuICAgICAgICAgIGZsb3cucG9zdCA9IGZsb3cucG9zdC5maWx0ZXIodGhpcy5fZmlsdGVyTm90VmFsaWRTdGVwKTtcbiAgICAgICAgICByZXR1cm4gZmxvdztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7IC4uLnBsYW4sIGZsb3dzIH07XG4gICAgICB9KTtcbiAgICAgIGRlZmluaXRpb24gPSB7IC4uLmRlZmluaXRpb24sIHBsYW5zIH07XG4gICAgfVxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgX2J1aWxkRGVmaW5pdGlvblRvU2VuZChkZWZpbml0aW9uVG9TYXZlKSB7XG4gICAgLy8gQ29weSBkZWZpbml0aW9uIGFuZCByZW1vdmUgYWxsIHByaXZhdGUgcHJvcGVydGllc1xuICAgIGNvbnN0IGZsb3dzID0gZGVmaW5pdGlvblRvU2F2ZS5mbG93cy5tYXAoKGYpID0+IHtcbiAgICAgIGNvbnN0IGZsb3cgPSB0aGlzLl9yZW1vdmVQcml2YXRlUHJvcGVydGllcyhmKTtcbiAgICAgIGZsb3cucHJlID0gZmxvdy5wcmUubWFwKHRoaXMuX3JlbW92ZVByaXZhdGVQcm9wZXJ0aWVzKTtcbiAgICAgIGZsb3cucG9zdCA9IGZsb3cucG9zdC5tYXAodGhpcy5fcmVtb3ZlUHJpdmF0ZVByb3BlcnRpZXMpO1xuICAgICAgcmV0dXJuIGZsb3c7XG4gICAgfSk7XG5cbiAgICBsZXQgZGVmaW5pdGlvbiA9IHsgLi4udGhpcy5fZGVmaW5pdGlvbiwgZmxvd3MgfTtcbiAgICBpZiAodGhpcy5fZGVmaW5pdGlvbi5wbGFucyAhPSBudWxsKSB7XG4gICAgICBjb25zdCBwbGFucyA9IGRlZmluaXRpb25Ub1NhdmUucGxhbnMubWFwKChwbGFuKSA9PiB7XG4gICAgICAgIGNvbnN0IGZsb3dzID0gcGxhbi5mbG93cy5tYXAoKGYpID0+IHtcbiAgICAgICAgICBjb25zdCBmbG93ID0gdGhpcy5fcmVtb3ZlUHJpdmF0ZVByb3BlcnRpZXMoZik7XG4gICAgICAgICAgZmxvdy5wcmUgPSBmbG93LnByZS5tYXAodGhpcy5fcmVtb3ZlUHJpdmF0ZVByb3BlcnRpZXMpO1xuICAgICAgICAgIGZsb3cucG9zdCA9IGZsb3cucG9zdC5tYXAodGhpcy5fcmVtb3ZlUHJpdmF0ZVByb3BlcnRpZXMpO1xuICAgICAgICAgIHJldHVybiBmbG93O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgLi4ucGxhbiwgZmxvd3MgfTtcbiAgICAgIH0pO1xuICAgICAgZGVmaW5pdGlvbiA9IHsgLi4uZGVmaW5pdGlvbiwgcGxhbnMgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZGVmaW5pdGlvbi5wcm9wZXJ0aWVzICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLl9kZWZpbml0aW9uLnByb3BlcnRpZXMubWFwKHRoaXMuX3JlbW92ZVByaXZhdGVQcm9wZXJ0aWVzKTtcbiAgICAgIGRlZmluaXRpb24gPSB7IC4uLmRlZmluaXRpb24sIHByb3BlcnRpZXMgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZGVmaW5pdGlvbi5yZXNvdXJjZXMgIT0gbnVsbCkge1xuICAgICAgY29uc3QgcmVzb3VyY2VzID0gdGhpcy5fZGVmaW5pdGlvbi5yZXNvdXJjZXMubWFwKHRoaXMuX3JlbW92ZVByaXZhdGVQcm9wZXJ0aWVzKTtcbiAgICAgIGRlZmluaXRpb24gPSB7IC4uLmRlZmluaXRpb24sIHJlc291cmNlcyB9O1xuICAgIH1cblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgX29uU2F2ZUFsbCgpIHtcbiAgICBpZiAodGhpcy5oYXNQcm9wZXJ0aWVzKSB7XG4gICAgICB0aGlzLmdldFByb3BlcnRpZXNFbGVtZW50KCkuc3VibWl0KCk7XG4gICAgfVxuXG4gICAgUHJvbWlzZS5hbGwodGhpcy5fc3VibWl0T3JDb25maXJtRm9ybXMoKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fZGVmaW5pdGlvblNhdmVkID0gdGhpcy5fYnVpbGREZWZpbml0aW9uVG9TYXZlKCk7XG4gICAgICAgIGNvbnN0IGRlZmluaXRpb24gPSB0aGlzLl9idWlsZERlZmluaXRpb25Ub1NlbmQodGhpcy5fZGVmaW5pdGlvblNhdmVkKTtcbiAgICAgICAgZGlzcGF0Y2hDdXN0b21FdmVudCh0aGlzLCAnc2F2ZScsIHsgZGVmaW5pdGlvbiwgc2VydmljZXM6IHRoaXMuc2VydmljZXMgfSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW3BvbGljeS1zdHVkaW9dIEVycm9yIG9uIHNhdmVgLCBlcnIpO1xuICAgICAgfSk7XG4gIH1cblxuICBfb25EZWJ1ZyhyZXF1ZXN0RXZlbnQpIHtcbiAgICBpZiAodGhpcy5oYXNQcm9wZXJ0aWVzKSB7XG4gICAgICB0aGlzLmdldFByb3BlcnRpZXNFbGVtZW50KCkuc3VibWl0KCk7XG4gICAgfVxuXG4gICAgUHJvbWlzZS5hbGwodGhpcy5fc3VibWl0T3JDb25maXJtRm9ybXMoKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IHRoaXMuX2J1aWxkRGVmaW5pdGlvblRvU2VuZCh0aGlzLl9idWlsZERlZmluaXRpb25Ub1NhdmUoKSk7XG4gICAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQodGhpcywgJ2RlYnVnJywgeyBkZWZpbml0aW9uLCBzZXJ2aWNlczogdGhpcy5zZXJ2aWNlcywgcmVxdWVzdDogcmVxdWVzdEV2ZW50LmRldGFpbC5yZXF1ZXN0IH0pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtwb2xpY3ktc3R1ZGlvXSBFcnJvciBvbiBkZWJ1Z2AsIGVycik7XG4gICAgICB9KTtcbiAgfVxuXG4gIGdldCBmaWx0ZXJlZEZsb3dzKCkge1xuICAgIGlmICh0aGlzLl9mbG93RmlsdGVyLmxlbmd0aCA9PT0gMCB8fCB0aGlzLl9mbG93RmlsdGVyLmluY2x1ZGVzKCdhcGknKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVmaW5lZEZsb3dzO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGdldCBmaWx0ZXJlZFBsYW5zKCkge1xuICAgIGlmICh0aGlzLl9mbG93RmlsdGVyLmxlbmd0aCA9PT0gMCB8fCB0aGlzLl9mbG93RmlsdGVyLmluY2x1ZGVzKCdwbGFuJykpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlZmluZWRQbGFucztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBfb25GaWx0ZXJGbG93cyh7IGRldGFpbCB9KSB7XG4gICAgaWYgKHRoaXMuX2Zsb3dGaWx0ZXIuaW5jbHVkZXMoZGV0YWlsLmlkKSkge1xuICAgICAgdGhpcy5fZmxvd0ZpbHRlciA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9mbG93RmlsdGVyID0gW2RldGFpbC5pZF07XG4gICAgfVxuICB9XG5cbiAgX2dldEZpbHRlcmVkUG9saWNpZXMoKSB7XG4gICAgaWYgKHRoaXMuX3BvbGljeUZpbHRlci5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5wb2xpY2llcy5maWx0ZXIoKHBvbGljeSkgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIChwb2xpY3kub25SZXF1ZXN0ICYmIHRoaXMuX3BvbGljeUZpbHRlci5pbmNsdWRlcygnb25SZXF1ZXN0JykpIHx8IChwb2xpY3kub25SZXNwb25zZSAmJiB0aGlzLl9wb2xpY3lGaWx0ZXIuaW5jbHVkZXMoJ29uUmVzcG9uc2UnKSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wb2xpY2llcztcbiAgfVxuXG4gIF9vbkZpbHRlclBvbGljaWVzKHsgZGV0YWlsIH0pIHtcbiAgICBpZiAodGhpcy5fcG9saWN5RmlsdGVyLmluY2x1ZGVzKGRldGFpbC5pZCkpIHtcbiAgICAgIHRoaXMuX3BvbGljeUZpbHRlciA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wb2xpY3lGaWx0ZXIgPSBbZGV0YWlsLmlkXTtcbiAgICB9XG4gIH1cblxuICBfcmVuZGVyRGVzaWduKHJlYWRvbmx5TW9kZSkge1xuICAgIHJldHVybiBodG1sYCA8ZGl2IGlkPVwiZGVzaWduXCIgc2xvdD1cImNvbnRlbnRcIiBjbGFzcz1cImRlc2lnblwiPlxuICAgICAgPGd2LXJlc2l6YWJsZS12aWV3cyBuby1vdmVyZmxvdz5cbiAgICAgICAgPGRpdiBzbG90PVwidG9wXCI+JHt0aGlzLl9yZW5kZXJGbG93KDAsIHRydWUsIHJlYWRvbmx5TW9kZSl9PC9kaXY+XG5cbiAgICAgICAgPGRpdiBzbG90PVwiYm90dG9tXCI+XG4gICAgICAgICAgJHt0aGlzLl9yZW5kZXJGbG93KDEsIGZhbHNlLCByZWFkb25seU1vZGUpfSAke3RoaXMuX3JlbmRlclBvbGljeShyZWFkb25seU1vZGUpfSAke3RoaXMuX3JlbmRlckZsb3dGb3JtKHJlYWRvbmx5TW9kZSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9ndi1yZXNpemFibGUtdmlld3M+XG4gICAgICAke3JlYWRvbmx5TW9kZSAhPT0gdHJ1ZVxuICAgICAgICA/IGh0bWxgPGd2LXBvbGljeS1zdHVkaW8tbWVudVxuICAgICAgICAgICAgY2xhc3M9XCJyaWdodC1tZW51XCJcbiAgICAgICAgICAgID9kaXNhYmxlZD1cIiR7dGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICAgICAgLnBvbGljaWVzPVwiJHt0aGlzLl9nZXRGaWx0ZXJlZFBvbGljaWVzKCl9XCJcbiAgICAgICAgICAgIC5zZWxlY3RlZElkcz1cIiR7W3RoaXMuX2N1cnJlbnRQb2xpY3lJZF19XCJcbiAgICAgICAgICAgIC5xdWVyeT1cIiR7dGhpcy5fc2VhcmNoUG9saWN5UXVlcnl9XCJcbiAgICAgICAgICAgID9oYXMtcG9saWN5LWZpbHRlcj1cIiR7dGhpcy5fcG9saWN5RmlsdGVyT3B0aW9ucyAhPSBudWxsfVwiXG4gICAgICAgICAgICA/cmVhZG9ubHk9XCIke3JlYWRvbmx5TW9kZX1cIlxuICAgICAgICAgICAgQGd2LXBvbGljeS1zdHVkaW8tbWVudTp0YXJnZXQtcG9saWN5PVwiJHt0aGlzLl9vblRhcmdldFBvbGljeX1cIlxuICAgICAgICAgICAgQGd2LXBvbGljeS1zdHVkaW8tbWVudTpmZXRjaC1kb2N1bWVudGF0aW9uPVwiJHt0aGlzLl9vbk9wZW5Eb2N1bWVudGF0aW9uRnJvbU1lbnV9XCJcbiAgICAgICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6ZHJhZ2VuZC1wb2xpY3k9XCIke3RoaXMuX29uRHJhZ0VuZFBvbGljeX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgc2xvdD1cImhlYWRlclwiIGNsYXNzPVwic2VhcmNoLXBvbGljaWVzXCI+XG4gICAgICAgICAgICAgICR7dGhpcy5fcG9saWN5RmlsdGVyT3B0aW9ucyAhPSBudWxsXG4gICAgICAgICAgICAgICAgPyBodG1sYDxndi1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiXG4gICAgICAgICAgICAgICAgICAgIC5vcHRpb25zPVwiJHt0aGlzLl9wb2xpY3lGaWx0ZXJPcHRpb25zfVwiXG4gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgIG91dGxpbmVkXG4gICAgICAgICAgICAgICAgICAgIC52YWx1ZT1cIiR7dGhpcy5fcG9saWN5RmlsdGVyfVwiXG4gICAgICAgICAgICAgICAgICAgIHNtYWxsXG4gICAgICAgICAgICAgICAgICAgIEBndi1vcHRpb246c2VsZWN0PVwiJHt0aGlzLl9vbkZpbHRlclBvbGljaWVzfVwiXG4gICAgICAgICAgICAgICAgICA+PC9ndi1vcHRpb24+YFxuICAgICAgICAgICAgICAgIDogJyd9XG4gICAgICAgICAgICAgIDxndi1pbnB1dFxuICAgICAgICAgICAgICAgIGlkPVwic2VhcmNoLXBvbGljeVwiXG4gICAgICAgICAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXIgcG9saWNpZXMgKFNoaWZ0ICsgQ3RybCArIFNwYWNlKVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgICAgICAgc21hbGxcbiAgICAgICAgICAgICAgICBAZ3YtaW5wdXQ6aW5wdXQ9XCIke3RoaXMuX29uU2VhcmNoUG9saWN5fVwiXG4gICAgICAgICAgICAgICAgQGd2LWlucHV0OmNsZWFyPVwiJHt0aGlzLl9vbkNsZWFyUG9saWN5fVwiXG4gICAgICAgICAgICAgID48L2d2LWlucHV0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9ndi1wb2xpY3ktc3R1ZGlvLW1lbnU+YFxuICAgICAgICA6ICcnfVxuICAgIDwvZGl2PmA7XG4gIH1cblxuICBfcmVuZGVyRGVidWcoKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSB0aGlzLmRlYnVnUmVzcG9uc2UgPyB0aGlzLmRlYnVnUmVzcG9uc2UucmVzcG9uc2UgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgaXNMb2FkaW5nID0gdGhpcy5kZWJ1Z1Jlc3BvbnNlID8gdGhpcy5kZWJ1Z1Jlc3BvbnNlLmlzTG9hZGluZyA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5kZWJ1Z1Jlc3BvbnNlICYmIHRoaXMuZGVidWdSZXNwb25zZS5yZXF1ZXN0ID8gdGhpcy5kZWJ1Z1Jlc3BvbnNlLnJlcXVlc3QucGF0aCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBtZXRob2QgPSB0aGlzLmRlYnVnUmVzcG9uc2UgJiYgdGhpcy5kZWJ1Z1Jlc3BvbnNlLnJlcXVlc3QgPyB0aGlzLmRlYnVnUmVzcG9uc2UucmVxdWVzdC5tZXRob2QgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGh0bWxgPGd2LWh0dHAtY2xpZW50XG4gICAgICBpZD1cImRlYnVnXCJcbiAgICAgIHNsb3Q9XCJjb250ZW50XCJcbiAgICAgIGNsYXNzPVwiZGVidWdcIlxuICAgICAgQGd2LWh0dHAtY2xpZW50OnNlbmQ9XCIke3RoaXMuX29uRGVidWd9XCJcbiAgICAgIC5yZXNwb25zZT1cIiR7cmVzcG9uc2V9XCJcbiAgICAgIC5wYXRoPVwiJHtwYXRofVwiXG4gICAgICAubWV0aG9kPVwiJHttZXRob2R9XCJcbiAgICAgID9sb2FkaW5nPVwiJHtpc0xvYWRpbmd9XCJcbiAgICA+XG4gICAgPC9ndi1odHRwLWNsaWVudD5gO1xuICB9XG5cbiAgX3JlbmRlckNvbmZpZ3VyYXRpb25Gb3JtKHJlYWRvbmx5TW9kZSkge1xuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb25TY2hlbWEpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGRlZXBDbG9uZSh0aGlzLl9kZWZpbml0aW9uKTtcbiAgICAgIHJldHVybiBodG1sYCA8ZGl2IGlkPVwic2V0dGluZ3NcIiBzbG90PVwiY29udGVudFwiIGNsYXNzPVwiYXBpLXNldHRpbmdzXCIgQGRyYWdvdmVyPVwiJHt0aGlzLl9vbkRlc2lnbn1cIj5cbiAgICAgICAgPGd2LXNjaGVtYS1mb3JtXG4gICAgICAgICAgLnNjaGVtYT1cIiR7dGhpcy5jb25maWd1cmF0aW9uU2NoZW1hfVwiXG4gICAgICAgICAgaWQ9XCJhcGktc2V0dGluZ3MtZm9ybVwiXG4gICAgICAgICAgLnZhbHVlcz1cIiR7dmFsdWVzfVwiXG4gICAgICAgICAgaGFzLWhlYWRlclxuICAgICAgICAgIGhhcy1mb290ZXJcbiAgICAgICAgICBzY3JvbGxhYmxlXG4gICAgICAgICAgP3JlYWRvbmx5PVwiJHtyZWFkb25seU1vZGV9XCJcbiAgICAgICAgICBAZ3Ytc2NoZW1hLWZvcm06Y2FuY2VsPVwiJHt0aGlzLl9vbkNhbmNlbEZsb3dNb2RlfVwiXG4gICAgICAgICAgQGd2LXNjaGVtYS1mb3JtOnN1Ym1pdD1cIiR7dGhpcy5fb25TdWJtaXRGbG93TW9kZX1cIlxuICAgICAgICA+XG4gICAgICAgICAgJHshdGhpcy5jb25maWd1cmF0aW9uSW5mb3JtYXRpb25cbiAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgIDogaHRtbGBcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBpLXNldHRpbmdzLWluZm9ybWF0aW9uXCIgc2xvdD1cInRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICA8Z3YtaWNvbiBjbGFzcz1cImFwaS1zZXR0aW5ncy1pbmZvcm1hdGlvbl9faWNvblwiIHRpdGxlPVwiSW5mb1wiIHNoYXBlPVwiY29kZTppbmZvXCI+PC9ndi1pY29uPlxuICAgICAgICAgICAgICAgICAgPGJsb2NrcXVvdGUgY2xhc3M9XCJhcGktc2V0dGluZ3MtaW5mb3JtYXRpb25fX2Jsb2NrcXVvdGVcIj4ke3RoaXMuY29uZmlndXJhdGlvbkluZm9ybWF0aW9ufTwvYmxvY2txdW90ZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgYH1cbiAgICAgICAgPC9ndi1zY2hlbWEtZm9ybT5cbiAgICAgIDwvZGl2PmA7XG4gICAgfVxuICAgIHJldHVybiBodG1sYGA7XG4gIH1cblxuICBfcmVuZGVyRmxvd0Zvcm0ocmVhZG9ubHlNb2RlKSB7XG4gICAgaWYgKHRoaXMuZmxvd1NjaGVtYSAmJiB0aGlzLl9mbG93U3RlcFNjaGVtYSA9PSBudWxsICYmIHRoaXMuZG9jdW1lbnRhdGlvbiA9PSBudWxsICYmIHRoaXMuc2VsZWN0ZWRGbG93c0lkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZmxvdyA9IHRoaXMuZ2V0U2VsZWN0ZWRGbG93KCk7XG4gICAgICBpZiAoZmxvdykge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBkZWVwQ2xvbmUoZmxvdyk7XG4gICAgICAgIHJldHVybiBodG1sYDxkaXYgc2xvdD1cImNvbnRlbnRcIiBjbGFzcz1cImZsb3ctc2V0dGluZ3NcIj5cbiAgICAgICAgICA8Z3Ytc2NoZW1hLWZvcm1cbiAgICAgICAgICAgIC5zY2hlbWE9XCIke3RoaXMuZmxvd1NjaGVtYX1cIlxuICAgICAgICAgICAgaWQ9XCJzZXR0aW5ncy1mb3JtXCJcbiAgICAgICAgICAgIC52YWx1ZXM9XCIke3ZhbHVlc31cIlxuICAgICAgICAgICAgaGFzLWhlYWRlclxuICAgICAgICAgICAgc2Nyb2xsYWJsZVxuICAgICAgICAgICAgP3JlYWRvbmx5PVwiJHtyZWFkb25seU1vZGV9XCJcbiAgICAgICAgICAgIEBndi1zY2hlbWEtZm9ybTpjYW5jZWw9XCIke3RoaXMuX29uQ2FuY2VsRmxvd31cIlxuICAgICAgICAgICAgQGd2LXNjaGVtYS1mb3JtOnN1Ym1pdD1cIiR7dGhpcy5fb25TdWJtaXRGbG93fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBzbG90PVwidGl0bGVcIiBjbGFzcz1cImZsb3ctc3RlcF9fZm9ybS10aXRsZVwiPkZsb3cgY29uZmlndXJhdGlvbjwvZGl2PlxuICAgICAgICAgIDwvZ3Ytc2NoZW1hLWZvcm0+XG4gICAgICAgIDwvZGl2PmA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX29uUmVzb3VyY2VzQ2hhbmdlKHsgZGV0YWlsIH0pIHtcbiAgICB0aGlzLmRlZmluaXRpb24ucmVzb3VyY2VzID0gZGV0YWlsLnJlc291cmNlcztcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICB9XG5cbiAgX29uUHJvcGVydGllc0NoYW5nZSh7IGRldGFpbCB9KSB7XG4gICAgdGhpcy5kZWZpbml0aW9uLnByb3BlcnRpZXMgPSBkZXRhaWwucHJvcGVydGllcztcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICB9XG5cbiAgX29uU2F2ZVByb3ZpZGVyKHsgZGV0YWlsIH0pIHtcbiAgICB0aGlzLnNlcnZpY2VzWydkeW5hbWljLXByb3BlcnR5J10gPSBkZXRhaWwucHJvdmlkZXI7XG4gICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZTtcbiAgfVxuXG4gIF9vblN3aXRjaEVuY3J5cHRlZFByb3BlcnR5KHsgZGV0YWlsIH0pIHtcbiAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHJlYWRvbmx5TW9kZSA9IHRoaXMuX2dldFJlYWRvbmx5TW9kZUZvckRlc2lnbigpO1xuXG4gICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cImJveFwiPlxuICAgICAgPGd2LXBvbGljeS1zdHVkaW8tbWVudVxuICAgICAgICBjbGFzcz1cImxlZnQtbWVudVwiXG4gICAgICAgIC5hcGktbmFtZT1cIiR7dGhpcy5fZGVmaW5pdGlvbi5uYW1lfVwiXG4gICAgICAgIC5mbG93cz1cIiR7dGhpcy5maWx0ZXJlZEZsb3dzfVwiXG4gICAgICAgIC5wbGFucz1cIiR7dGhpcy5maWx0ZXJlZFBsYW5zfVwiXG4gICAgICAgIC5zZWxlY3RlZElkcz1cIiR7dGhpcy5zZWxlY3RlZEZsb3dzSWR9XCJcbiAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiXG4gICAgICAgID9zb3J0YWJsZT1cIiR7dGhpcy5zb3J0YWJsZSAmJiB0aGlzLnJlYWRvbmx5ICE9PSB0cnVlfVwiXG4gICAgICAgID9yZWFkb25seT1cIiR7dGhpcy5yZWFkb25seX1cIlxuICAgICAgICA/cmVhZG9ubHlQbGFucz1cIiR7dGhpcy5yZWFkb25seVBsYW5zfVwiXG4gICAgICAgIGZsb3dzLXRpdGxlPVwiJHt0aGlzLmZsb3dzVGl0bGV9XCJcbiAgICAgICAgLnF1ZXJ5PVwiJHt0aGlzLl9zZWFyY2hGbG93UXVlcnl9XCJcbiAgICAgICAgP2Nhbi1hZGQ9XCIke3RoaXMuY2FuQWRkICYmICF0aGlzLnJlYWRvbmx5fVwiXG4gICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6cmVvcmRlci1mbG93cz1cIiR7dGhpcy5fb25SZW9yZGVyRmxvd3N9XCJcbiAgICAgICAgQGd2LXBvbGljeS1zdHVkaW8tbWVudTpjaGFuZ2UtZmxvdy1zdGF0ZT1cIiR7dGhpcy5fb25DaGFuZ2VGbG93U3RhdGV9XCJcbiAgICAgICAgQGd2LXBvbGljeS1zdHVkaW8tbWVudTphZGQtZmxvdz1cIiR7dGhpcy5fb25BZGRGbG93fVwiXG4gICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6YWRkLWZsb3ctcGxhbj1cIiR7dGhpcy5fb25BZGRGbG93UGxhbn1cIlxuICAgICAgICBAZ3YtcG9saWN5LXN0dWRpby1tZW51OmRlbGV0ZS1mbG93PVwiJHt0aGlzLl9vbkRlbGV0ZUZsb3d9XCJcbiAgICAgICAgQGd2LXBvbGljeS1zdHVkaW8tbWVudTpkdXBsaWNhdGUtZmxvdz1cIiR7dGhpcy5fb25EdXBsaWNhdGVGbG93fVwiXG4gICAgICAgIEBndi1wb2xpY3ktc3R1ZGlvLW1lbnU6c2VsZWN0LWZsb3dzPVwiJHt0aGlzLl9vblNlbGVjdEZsb3dzfVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgc2xvdD1cImhlYWRlclwiIGNsYXNzPVwiaGVhZGVyLWFjdGlvbnNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj4ke3RoaXMuX2RlZmluaXRpb24ubmFtZX08L2Rpdj5cbiAgICAgICAgICAke3RoaXMuX2Zsb3dGaWx0ZXJPcHRpb25zICE9IG51bGxcbiAgICAgICAgICAgID8gaHRtbGA8Z3Ytb3B0aW9uXG4gICAgICAgICAgICAgICAgP2Rpc2FibGVkPVwiJHt0aGlzLl9jdXJyZW50QXNrQ29uZmlybWF0aW9ufVwiXG4gICAgICAgICAgICAgICAgLm9wdGlvbnM9XCIke3RoaXMuX2Zsb3dGaWx0ZXJPcHRpb25zfVwiXG4gICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICBvdXRsaW5lZFxuICAgICAgICAgICAgICAgIC52YWx1ZT1cIiR7dGhpcy5fZmxvd0ZpbHRlcn1cIlxuICAgICAgICAgICAgICAgIHNtYWxsXG4gICAgICAgICAgICAgICAgQGd2LW9wdGlvbjpzZWxlY3Q9XCIke3RoaXMuX29uRmlsdGVyRmxvd3N9XCJcbiAgICAgICAgICAgICAgPjwvZ3Ytb3B0aW9uPmBcbiAgICAgICAgICAgIDogJyd9XG4gICAgICAgICAgPGd2LWlucHV0XG4gICAgICAgICAgICA/ZGlzYWJsZWQ9XCIke3RoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb259XCJcbiAgICAgICAgICAgIGlkPVwic2VhcmNoLWZsb3dcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXIgZmxvd3MgKEN0cmwgKyBTcGFjZSlcIlxuICAgICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgICBzbWFsbFxuICAgICAgICAgICAgQGd2LWlucHV0OmlucHV0PVwiJHt0aGlzLl9vblNlYXJjaEZsb3dzfVwiXG4gICAgICAgICAgICBAZ3YtaW5wdXQ6Y2xlYXI9XCIke3RoaXMuX29uQ2xlYXJGbG93c31cIlxuICAgICAgICAgID48L2d2LWlucHV0PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICAke3RoaXMucmVhZG9ubHkgIT09IHRydWVcbiAgICAgICAgICA/IGh0bWxgIDxkaXYgc2xvdD1cImZvb3RlclwiIGNsYXNzPVwiZm9vdGVyLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPGd2LWJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWxhcmdlXCJcbiAgICAgICAgICAgICAgICAuZGlzYWJsZWQ9XCIkeyF0aGlzLmlzRGlydHkgfHwgdGhpcy5fY3VycmVudEFza0NvbmZpcm1hdGlvbn1cIlxuICAgICAgICAgICAgICAgIEBndi1idXR0b246Y2xpY2s9XCIke3RoaXMuX29uU2F2ZUFsbH1cIlxuICAgICAgICAgICAgICAgID5TYXZlPC9ndi1idXR0b25cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Z3YtYnV0dG9uIGxpbmsgLmRpc2FibGVkPVwiJHshdGhpcy5pc0RpcnR5IHx8IHRoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb259XCIgQGd2LWJ1dHRvbjpjbGljaz1cIiR7dGhpcy5fb25SZXNldEFsbH1cIlxuICAgICAgICAgICAgICAgID5SZXNldDwvZ3YtYnV0dG9uXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvZGl2PmBcbiAgICAgICAgICA6ICcnfVxuICAgICAgPC9ndi1wb2xpY3ktc3R1ZGlvLW1lbnU+XG5cbiAgICAgIDxndi10YWJzXG4gICAgICAgIC52YWx1ZT1cIiR7dGhpcy50YWJJZH1cIlxuICAgICAgICAub3B0aW9ucz1cIiR7dGhpcy5fdGFic31cIlxuICAgICAgICAuZGlzYWJsZWQ9XCIke3RoaXMuX2N1cnJlbnRBc2tDb25maXJtYXRpb259XCJcbiAgICAgICAgQGd2LXRhYnM6Y2hhbmdlPVwiJHt0aGlzLl9vbkNoYW5nZVRhYn1cIlxuICAgICAgICAudmFsaWRhdG9yPVwiJHt0aGlzLl9jaGFuZ2VUYWJWYWxpZGF0b3IuYmluZCh0aGlzKX1cIlxuICAgICAgPlxuICAgICAgICAke3RoaXMuX3JlbmRlckRlc2lnbihyZWFkb25seU1vZGUpfSAke3RoaXMuX3JlbmRlckNvbmZpZ3VyYXRpb25Gb3JtKHJlYWRvbmx5TW9kZSl9ICR7dGhpcy5fcmVuZGVyRGVidWcoKX1cbiAgICAgICAgPGd2LXByb3BlcnRpZXNcbiAgICAgICAgICBpZD1cInByb3BlcnRpZXNcIlxuICAgICAgICAgIHNsb3Q9XCJjb250ZW50XCJcbiAgICAgICAgICBjbGFzcz1cInByb3BlcnRpZXNcIlxuICAgICAgICAgIC5wcm92aWRlcj1cIiR7dGhpcy5zZXJ2aWNlc1snZHluYW1pYy1wcm9wZXJ0eSddfVwiXG4gICAgICAgICAgQGd2LXByb3BlcnRpZXM6Y2hhbmdlPVwiJHt0aGlzLl9vblByb3BlcnRpZXNDaGFuZ2V9XCJcbiAgICAgICAgICBAZ3YtcHJvcGVydGllczpzYXZlLXByb3ZpZGVyPVwiJHt0aGlzLl9vblNhdmVQcm92aWRlcn1cIlxuICAgICAgICAgIEBndi1wcm9wZXJ0aWVzOnN3aXRjaC1lbmNyeXB0ZWQ9XCIke3RoaXMuX29uU3dpdGNoRW5jcnlwdGVkUHJvcGVydHl9XCJcbiAgICAgICAgICA/cmVhZG9ubHk9XCIke3JlYWRvbmx5TW9kZX1cIlxuICAgICAgICAgIGVuY3J5cHRhYmxlPVwidHJ1ZVwiXG4gICAgICAgICAgLnByb3BlcnRpZXM9XCIke3RoaXMuZGVmaW5lZFByb3BlcnRpZXN9XCJcbiAgICAgICAgICAucHJvdmlkZXJzPVwiJHt0aGlzLnByb3BlcnR5UHJvdmlkZXJzfVwiXG4gICAgICAgICAgLmR5bmFtaWNQcm9wZXJ0eVNjaGVtYT1cIiR7dGhpcy5keW5hbWljUHJvcGVydHlTY2hlbWF9XCJcbiAgICAgICAgPjwvZ3YtcHJvcGVydGllcz5cbiAgICAgICAgPGd2LXJlc291cmNlc1xuICAgICAgICAgIGlkPVwicmVzb3VyY2VzXCJcbiAgICAgICAgICBzbG90PVwiY29udGVudFwiXG4gICAgICAgICAgY2xhc3M9XCJyZXNvdXJjZXNcIlxuICAgICAgICAgIEBndi1yZXNvdXJjZXM6Y2hhbmdlPVwiJHt0aGlzLl9vblJlc291cmNlc0NoYW5nZX1cIlxuICAgICAgICAgID9yZWFkb25seT1cIiR7cmVhZG9ubHlNb2RlfVwiXG4gICAgICAgICAgLnJlc291cmNlcz1cIiR7dGhpcy5kZWZpbmVkUmVzb3VyY2VzfVwiXG4gICAgICAgICAgLnR5cGVzPVwiJHt0aGlzLnJlc291cmNlVHlwZXN9XCJcbiAgICAgICAgPjwvZ3YtcmVzb3VyY2VzPlxuICAgICAgPC9ndi10YWJzPlxuICAgIDwvZGl2PmA7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIHRoZSBkZXNpZ24gdmlldyBzaG91bGQgYmUgaW4gcmVhZG9ubHkgbW9kZSBvciBub3RcbiAgICogSXQgaXMgaW4gcmVhZG9ubHkgbW9kZSBpZjpcbiAgICogIHRoZSByZWFkb25seSBhdHRyaWJ1dGUgaXMgc2V0IHRvIHRydWVcbiAgICogIE9SXG4gICAqICB0aGUgbWFpbiBzZWxlY3RlZCBmbG93IGJlbG9uZ3MgdG8gYSBwbGFuIGFuZCB0aGUgcmVhZG9ubHktcGxhbnMgYXR0cmlidXRlIGlzIHNldCB0byB0cnVlXG4gICAqICBPUlxuICAgKiAgdGhlIHNlY29uZCBmbG93IGZvciBjb21wYXJpc29uIGJlbG9uZ3MgdG8gYSBwbGFuIGFuZCB0aGUgcmVhZG9ubHktcGxhbnMgYXR0cmlidXRlIGlzIHNldCB0byB0cnVlXG4gICAqIEByZXR1cm5zIHtib29sZWFufCp8e3R5cGU6IEJvb2xlYW5Db25zdHJ1Y3Rvcn18e2F0dHJpYnV0ZTogc3RyaW5nLCB0eXBlOiBCb29sZWFuQ29uc3RydWN0b3J9fHt0eXBlOiAqfXx7YXR0cmlidXRlOiBzdHJpbmcsIHR5cGU6ICp9fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2dldFJlYWRvbmx5TW9kZUZvckRlc2lnbigpIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgZmxvdyA9IHRoaXMuZ2V0U2VsZWN0ZWRGbG93KDApO1xuICAgIGlmICghZmxvdykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcGxhbjogZmxvd1BsYW4gfSA9IHRoaXMuX2ZpbmRGbG93Q29sbGVjdGlvbihmbG93Ll9pZCk7XG4gICAgY29uc3QgcmVhZG9ubHlNb2RlID0gZmxvd1BsYW4gJiYgdGhpcy5yZWFkb25seVBsYW5zO1xuICAgIGlmIChyZWFkb25seU1vZGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBhcmVkRmxvdyA9IHRoaXMuZ2V0U2VsZWN0ZWRGbG93KDEpO1xuICAgIGlmICghY29tcGFyZWRGbG93KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgeyBwbGFuOiBjb21wYXJlZEZsb3dQbGFuIH0gPSB0aGlzLl9maW5kRmxvd0NvbGxlY3Rpb24oY29tcGFyZWRGbG93Ll9pZCk7XG4gICAgcmV0dXJuIGNvbXBhcmVkRmxvd1BsYW4gJiYgdGhpcy5yZWFkb25seVBsYW5zO1xuICB9XG59XG5cbndpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ2d2LXBvbGljeS1zdHVkaW8nLCBHdlBvbGljeVN0dWRpbyk7XG4iXX0=
|