raise-common-lib 0.0.213 → 0.0.214
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/README.md +57 -57
- package/bundles/raise-common-lib.umd.js +26 -26
- package/bundles/raise-common-lib.umd.js.map +1 -1
- package/bundles/raise-common-lib.umd.min.js +1 -1
- package/bundles/raise-common-lib.umd.min.js.map +1 -1
- package/esm2015/lib/dashboard/bar-charts/bar-charts.component.js +2 -2
- package/esm2015/lib/dashboard/dashboard-properties/data-mart-new/data-mart-new.component.js +3 -3
- package/esm2015/lib/dashboard/dialog-group/download/index.component.js +3 -3
- package/esm2015/lib/dashboard/dialog-group/empty-icon-prompt/empty-icon-prompt.component.js +3 -3
- package/esm2015/lib/dashboard/gadget-group/gadget-pivot/gadget-pivot.component.js +2 -2
- package/esm2015/lib/dashboard/gadget-group/gadget-pivot-chart/gadget-pivot.component.js +2 -2
- package/esm2015/lib/dashboard/gadget-group/gadget-table/gadget-table.component.js +2 -2
- package/esm2015/lib/dashboard/gadget-group/gadget-transpose/gadget-transpose.component.js +3 -3
- package/esm2015/lib/dashboard/pane-group-new.component.js +1 -1
- package/esm2015/lib/dashboard/sidebar-iconlist/field-filter/field-filter.component.js +2 -2
- package/esm2015/lib/dashboard/sidebar-iconlist/field-format/field-format.component.js +3 -3
- package/esm2015/lib/dashboard/sidebar-iconlist/portlet-type-new/portlet-type-new.component.js +3 -3
- package/esm2015/lib/dashboard/sidebar-iconlist/sidebar-iconlist-new.component.js +4 -4
- package/esm2015/lib/dialog/new-action-notification/new-action-notification.component.js +1 -1
- package/esm2015/lib/form/drawer-form/drawer-form.component.js +1 -1
- package/esm2015/lib/form/richtexteditor/index.component.js +1 -1
- package/esm2015/lib/layout/drawer/index.component.js +1 -1
- package/esm2015/lib/layout/page-tab/index.component.js +1 -1
- package/esm5/lib/dashboard/bar-charts/bar-charts.component.js +2 -2
- package/esm5/lib/dashboard/dashboard-properties/data-mart-new/data-mart-new.component.js +3 -3
- package/esm5/lib/dashboard/dialog-group/download/index.component.js +3 -3
- package/esm5/lib/dashboard/dialog-group/empty-icon-prompt/empty-icon-prompt.component.js +3 -3
- package/esm5/lib/dashboard/gadget-group/gadget-pivot/gadget-pivot.component.js +2 -2
- package/esm5/lib/dashboard/gadget-group/gadget-pivot-chart/gadget-pivot.component.js +2 -2
- package/esm5/lib/dashboard/gadget-group/gadget-table/gadget-table.component.js +2 -2
- package/esm5/lib/dashboard/gadget-group/gadget-transpose/gadget-transpose.component.js +3 -3
- package/esm5/lib/dashboard/pane-group-new.component.js +1 -1
- package/esm5/lib/dashboard/sidebar-iconlist/field-filter/field-filter.component.js +2 -2
- package/esm5/lib/dashboard/sidebar-iconlist/field-format/field-format.component.js +3 -3
- package/esm5/lib/dashboard/sidebar-iconlist/portlet-type-new/portlet-type-new.component.js +3 -3
- package/esm5/lib/dashboard/sidebar-iconlist/sidebar-iconlist-new.component.js +4 -4
- package/esm5/lib/dialog/new-action-notification/new-action-notification.component.js +1 -1
- package/esm5/lib/form/drawer-form/drawer-form.component.js +1 -1
- package/esm5/lib/form/richtexteditor/index.component.js +1 -1
- package/esm5/lib/layout/drawer/index.component.js +1 -1
- package/esm5/lib/layout/page-tab/index.component.js +1 -1
- package/fesm2015/raise-common-lib.js +26 -26
- package/fesm2015/raise-common-lib.js.map +1 -1
- package/fesm5/raise-common-lib.js +26 -26
- package/fesm5/raise-common-lib.js.map +1 -1
- package/package.json +1 -1
- package/raise-common-lib.metadata.json +1 -1
- package/src/assets/img/arrow_right.svg +4 -4
- package/src/assets/img/calendar-disabled.svg +6 -6
- package/src/assets/img/calendar.svg +6 -6
- package/src/assets/img/calendar_arrow_left.svg +3 -3
- package/src/assets/img/calendar_arrow_right.svg +3 -3
- package/src/assets/img/checked-vector.svg +3 -3
- package/src/assets/img/dialog-close.svg +4 -4
- package/src/assets/img/dialog-grow.svg +6 -6
- package/src/assets/img/dialog-shrink.svg +6 -6
- package/src/assets/img/plus.svg +4 -4
- package/src/assets/img/search.svg +4 -4
- package/src/assets/img/shrink-icon.svg +6 -6
- package/src/assets/img/time-disabled.svg +4 -4
- package/src/assets/img/time.svg +4 -4
- package/src/assets/img/toolbar-action-addFolder.svg +17 -17
- package/src/assets/img/toolbar-action-calculator.svg +11 -11
- package/src/assets/img/toolbar-action-collapse.svg +7 -7
- package/src/assets/img/toolbar-action-combine.svg +4 -4
- package/src/assets/img/toolbar-action-edit.svg +4 -4
- package/src/assets/img/toolbar-action-expand.svg +7 -7
- package/src/assets/img/toolbar-action-folderMove.svg +8 -8
- package/src/assets/img/toolbar-action-lock.svg +6 -6
- package/src/assets/img/toolbar-action-preview.svg +7 -7
- package/src/assets/img/toolbar-action-publish.svg +5 -5
- package/src/assets/img/toolbar-action-reminders.svg +10 -10
- package/src/assets/img/toolbar-action-rename.svg +7 -7
- package/src/assets/img/toolbar-action-saveSequence.svg +5 -5
- package/src/assets/img/toolbar-action-send-file.svg +5 -5
- package/src/assets/img/toolbar-action-settle.svg +7 -7
- package/src/assets/img/toolbar-action-share.svg +5 -5
- package/src/assets/img/toolbar-action-submitForApproval.svg +4 -4
- package/src/assets/img/toolbar-action-sync.svg +4 -4
- package/src/assets/img/toolbar-action-template.svg +6 -6
- package/src/assets/img/toolbar-action-workflow.svg +9 -9
|
@@ -4234,7 +4234,7 @@ export class GadgetPivotComponent {
|
|
|
4234
4234
|
}
|
|
4235
4235
|
GadgetPivotComponent.decorators = [
|
|
4236
4236
|
{ type: Component, args: [{
|
|
4237
|
-
selector: "
|
|
4237
|
+
selector: "rs-gadget-pivot",
|
|
4238
4238
|
template: "<div class=\"control-section\" style=\"overflow: hidden; height: 100%\">\r\n\t<ejs-pivotview\r\n\t\twidth=\"100%\"\r\n\t\theight=\"100%\"\r\n\t\tstyle=\"display: block\"\r\n\t\t[dataSourceSettings]=\"dataSourceSettings\"\r\n\t\t#pivotview\r\n\t\t(dataBound)=\"dataBound($event)\"\r\n\t\tenableValueSorting=\"true\"\r\n\t\tallowConditionalFormatting=\"true\"\r\n\t\t[allowDeferLayoutUpdate]=\"true\"\r\n\t\t[gridSettings]=\"gridSettings\"\r\n\t\tallowExcelExport=\"true\"\r\n\t\tallowGrouping=\"true\"\r\n\t\t[zoomSettings]=\"zoomSettings\"\r\n\t\tenableVirtualization=\"true\"\r\n\t\t(enginePopulated)=\"afterEnginePopulate($event)\"\r\n\t\t(aggregateCellInfo)=\"aggregateCellInfo($event)\"\r\n\t\t(cellClick)=\"cellClick($event)\"\r\n\t\tallowDrillThrough=\"true\"\r\n\t\t(actionFailure)=\"actionFailure($event)\"\r\n\t\t(actionComplete)=\"actionComplete($event)\"\r\n\t\t(actionBegin)=\"actionBegin($event)\"\r\n\t\t(fieldListRefreshed)=\"fieldListRefreshed($event)\"\r\n\t\t(drillThrough)=\"drillThrough($event)\"\r\n\t\t[showTooltip]=\"false\"\r\n\t\t(queryCellInfo)=\"customiseCell($event)\"\r\n\t\t(beforeExport)=\"beforeExport($event)\"\r\n\t>\r\n\t</ejs-pivotview>\r\n\r\n\t<div class=\"pivotfieldlist-control\">\r\n\t\t<ejs-pivotfieldlist\r\n\t\t\t[id]=\"portlet.newId\"\r\n\t\t\t#pivotfieldlist\r\n\t\t\t[allowDeferLayoutUpdate]=\"true\"\r\n\t\t\trenderMode=\"Popup\"\r\n\t\t\t(enginePopulated)=\"afterPopulate($event)\"\r\n\t\t\t(memberEditorOpen)=\"onMemberEditorOpen($event)\"\r\n\t\t\t(enginePopulating)=\"enginePopulating($event)\"\r\n\t\t\t(aggregateCellInfo)=\"aggregateCellInfo($event)\"\r\n\t\t\t(fieldDrop)=\"onFieldDrop($event)\"\r\n\t\t\t(actionComplete)=\"actionComplete($event)\"\r\n\t\t\t(actionBegin)=\"actionBegin($event)\"\r\n\t\t\t(calculatedFieldCreate)=\"calculatedFieldCreate($event)\"\r\n\t\t\t(load)=\"onLoad()\"\r\n\t\t\t(created)=\"created($event)\"\r\n\t\t\t(dataBound)='ondataBound()'\r\n\t\t>\r\n\t\t</ejs-pivotfieldlist>\r\n\t</div>\r\n\r\n\t<div class=\"full-box-mask\" *ngIf=\"pageLoading\">\r\n\t\t<mat-spinner\r\n\t\t\tstyle=\"z-index: 999\"\r\n\t\t\tmode=\"indeterminate\"\r\n\t\t\t[diameter]=\"24\"\r\n\t\t></mat-spinner>\r\n\t</div>\r\n</div>\r\n",
|
|
4239
4239
|
providers: [
|
|
4240
4240
|
ToolbarService,
|
|
@@ -4440,4 +4440,4 @@ if (false) {
|
|
|
4440
4440
|
*/
|
|
4441
4441
|
GadgetPivotComponent.prototype.pbf;
|
|
4442
4442
|
}
|
|
4443
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FkZ2V0LXBpdm90LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3JhaXNlLWNvbW1vbi1saWIvIiwic291cmNlcyI6WyJsaWIvZGFzaGJvYXJkL2dhZGdldC1ncm91cC9nYWRnZXQtcGl2b3QvZ2FkZ2V0LXBpdm90LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQ04saUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxFQUNULHVCQUF1QixFQUN2QixNQUFNLEVBQ04sUUFBUSxHQUNSLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFFTix1QkFBdUIsRUFDdkIsa0JBQWtCLEVBR2xCLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUV0QixrQkFBa0IsRUFHbEIsb0JBQW9CLEVBSXBCLG1CQUFtQixHQUduQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFDTixJQUFJLEVBQ0osWUFBWSxFQUNaLE9BQU8sR0FDUCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFDTixNQUFNLEVBQ04sY0FBYyxFQUNkLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sSUFBSSxPQUFPLEVBQ2pCLEtBQUssRUFDTCxLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sR0FDTixNQUFNLFFBQVEsQ0FBQztBQUNoQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQ04sb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQix1QkFBdUIsR0FDdkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDdkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FB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OztJQUMvQiw4Q0FBc0M7O0lBQ3RDLCtDQUVFOzs7OztJQUNGLDJDQUF5Qjs7Ozs7SUFDekIsNENBQTBCOzs7OztJQUMxQiw2Q0FTRTs7SUFDRiw0Q0FFRTs7SUFDRixtREFNRTs7Ozs7SUFDRiwyQ0FBeUI7Ozs7O0lBQ3pCLHNEQUEyQzs7Ozs7SUFDM0MsdURBQTRDOzs7OztJQUM1Qyw4Q0FHRTs7Ozs7SUFDRiw2Q0FBMkI7Ozs7O0lBQzNCLDZDQUEyQjs7SUFDM0IsOENBQXNCOztJQUN0QiwwQ0FBbUM7O0lBQ25DLDJDQUF3Qjs7Ozs7SUFDeEIsZ0RBQThCOztJQUM5QiwyQ0FBbUI7O0lBdS9DbkIsOENBQW9COzs7OztJQXAvQ25CLHVEQUF3RDs7Ozs7SUFDeEQsZ0RBQTBDOzs7OztJQUMxQyxtQ0FBOEI7Ozs7O0lBQzlCLG1DQUErQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXHJcblx0Q29tcG9uZW50LFxyXG5cdElucHV0LFxyXG5cdE9uSW5pdCxcclxuXHRWaWV3Q2hpbGQsXHJcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcblx0SW5qZWN0LFxyXG5cdE9wdGlvbmFsLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQge1xyXG5cdElEYXRhT3B0aW9ucyxcclxuXHRQaXZvdEZpZWxkTGlzdENvbXBvbmVudCxcclxuXHRQaXZvdFZpZXdDb21wb25lbnQsXHJcblx0RW5naW5lUG9wdWxhdGVkRXZlbnRBcmdzLFxyXG5cdElEYXRhU2V0LFxyXG5cdFRvb2xiYXJTZXJ2aWNlLFxyXG5cdEZpZWxkTGlzdFNlcnZpY2UsXHJcblx0TnVtYmVyRm9ybWF0dGluZ1NlcnZpY2UsXHJcblx0Q2FsY3VsYXRlZEZpZWxkU2VydmljZSxcclxuXHRDYWxjdWxhdGVkRmllbGRDcmVhdGVFdmVudEFyZ3MsXHJcblx0R3JvdXBpbmdCYXJTZXJ2aWNlLFxyXG5cdEZpZWxkRHJvcEV2ZW50QXJncyxcclxuXHRJU29ydCxcclxuXHRWaXJ0dWFsU2Nyb2xsU2VydmljZSxcclxuXHRJUGl2b3RWYWx1ZXMsXHJcblx0SVBhZ2VTZXR0aW5ncyxcclxuXHREcmlsbFRocm91Z2hFdmVudEFyZ3MsXHJcblx0RHJpbGxUaHJvdWdoU2VydmljZSxcclxuXHRQaXZvdEFjdGlvbkZhaWx1cmVFdmVudEFyZ3MsXHJcblx0UXVlcnlDZWxsSW5mb0V2ZW50QXJncyxcclxufSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItcGl2b3R2aWV3XCI7XHJcbmltcG9ydCB7XHJcblx0TDEwbixcclxuXHRlbmFibGVSaXBwbGUsXHJcblx0QnJvd3NlcixcclxufSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWJhc2VcIjtcclxuaW1wb3J0IHsgR3JpZFNldHRpbmdzIH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1waXZvdHZpZXcvc3JjL3Bpdm90dmlldy9tb2RlbC9ncmlkc2V0dGluZ3NcIjtcclxuaW1wb3J0IHtcclxuXHRzb3J0QnksXHJcblx0ZGlmZmVyZW5jZVdpdGgsXHJcblx0c3RhcnRzV2l0aCxcclxuXHRjbG9uZURlZXAsXHJcblx0dW5pcUJ5LFxyXG5cdGZpbHRlciBhcyBfZmlsdGVyLFxyXG5cdG1heEJ5LFxyXG5cdG1pbkJ5LFxyXG5cdHN1bUJ5LFxyXG5cdG1lYW5CeSxcclxufSBmcm9tIFwibG9kYXNoXCI7XHJcbmltcG9ydCB7IERhc2hib2FyZFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vZGFzaGJvYXJkLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtcclxuXHRBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRBTExfQUdHUkVHQVRFX1RZUEVTLFxyXG5cdERhc2hib2FyZFBvcmxldHNTZXJ2aWNlLFxyXG59IGZyb20gXCIuLi8uLi9kYXNoYm9hcmRQb3JsZXRzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgTWFza2VkVGV4dEJveCB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItaW5wdXRzL3NyYy9tYXNrZWR0ZXh0Ym94L21hc2tlZHRleHRib3hcIjtcclxuaW1wb3J0IHsgRGF0YU1hbmFnZXIgfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWRhdGEvc3JjL21hbmFnZXJcIjtcclxuaW1wb3J0IHsgUHJlZGljYXRlLCBRdWVyeSB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItZGF0YS9zcmMvcXVlcnlcIjtcclxuaW1wb3J0IHsgRGF0YVV0aWwgfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWRhdGFcIjtcclxuaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XHJcbmltcG9ydCB7IFBCRl9UT0tFTiB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlL0luamVjdGlvblRva2VuXCI7XHJcblxyXG5lbmFibGVSaXBwbGUoZmFsc2UpO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6IFwia3QtZ2FkZ2V0LXBpdm90XCIsXHJcblx0dGVtcGxhdGVVcmw6IFwiLi9nYWRnZXQtcGl2b3QuY29tcG9uZW50Lmh0bWxcIixcclxuXHRzdHlsZVVybHM6IFtcIi4vZ2FkZ2V0LXBpdm90LmNvbXBvbmVudC5zY3NzXCJdLFxyXG5cdHByb3ZpZGVyczogW1xyXG5cdFx0VG9vbGJhclNlcnZpY2UsXHJcblx0XHRGaWVsZExpc3RTZXJ2aWNlLFxyXG5cdFx0TnVtYmVyRm9ybWF0dGluZ1NlcnZpY2UsXHJcblx0XHRDYWxjdWxhdGVkRmllbGRTZXJ2aWNlLFxyXG5cdFx0R3JvdXBpbmdCYXJTZXJ2aWNlLFxyXG5cdFx0VmlydHVhbFNjcm9sbFNlcnZpY2UsXHJcblx0XHREcmlsbFRocm91Z2hTZXJ2aWNlLFxyXG5cdF0sXHJcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHYWRnZXRQaXZvdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblx0QElucHV0KCkgcG9ydGxldDtcclxuXHRASW5wdXQoKSBkYXNoYm9hcmQ7XHJcblx0QElucHV0KCkgcG9ydGxldHM7XHJcblx0cHJpdmF0ZSBQaXZvdF9EYXRhOiBJRGF0YVNldFtdO1xyXG5cdHByaXZhdGUgY29uZmlnO1xyXG5cdHB1YmxpYyBkYXRhU291cmNlU2V0dGluZ3M6IElEYXRhT3B0aW9ucztcclxuXHRwdWJsaWMgZ3JpZFNldHRpbmdzOiBHcmlkU2V0dGluZ3M7XHJcblx0cHJpdmF0ZSBleGNsdWRlRmllbGRzID0gW107XHJcblx0cHJpdmF0ZSBmaWx0ZXJTZXR0aW5ncyA9IFtdO1xyXG5cdHByaXZhdGUgZGF0ZVBpcGVGb3JtYXQ7XHJcblx0cHVibGljIHRyYW5zbGF0aW9uO1xyXG5cdEBWaWV3Q2hpbGQoXCJwaXZvdHZpZXdcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcblx0cHJpdmF0ZSBwaXZvdE9iajogUGl2b3RWaWV3Q29tcG9uZW50O1xyXG5cdEBWaWV3Q2hpbGQoXCJwaXZvdGZpZWxkbGlzdFwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuXHRwdWJsaWMgZmllbGRsaXN0T2JqOiBQaXZvdEZpZWxkTGlzdENvbXBvbmVudDtcclxuXHRwcml2YXRlIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xyXG5cdHByaXZhdGUgZ3JhbmRUb3RhbHMgPSB7fTtcclxuXHRwcml2YXRlIHN1YlRvdGFscyA9IHt9O1xyXG5cdHByaXZhdGUgZmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdHByaXZhdGUgcHJldmlvdXNTb3J0OiBJU29ydDtcclxuXHRwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblx0cHJpdmF0ZSBhbGxEYXRhVmFsdWU7XHJcblx0Ly8gcHJpdmF0ZSBjYWxjdWxhdGVkRmllbGRTZXR0aW5ncztcclxuXHRwcml2YXRlIGlzSW5pdDogYm9vbGVhbiA9IHRydWU7XHJcblx0cHJpdmF0ZSBwaXZvdFNlYXJjaEJveDogTWFza2VkVGV4dEJveDtcclxuXHRwdWJsaWMgdG9vbHRpcFNldHRpbmdzID0ge1xyXG5cdFx0ZW5hYmxlOiBmYWxzZSxcclxuXHR9O1xyXG5cdHByaXZhdGUgY29sdW1uVGV4dHMgPSBbXTtcclxuXHRwcml2YXRlIGNvbmZpZ0ZpZWxkcyA9IFtdO1xyXG5cdHByaXZhdGUgcXVhcnRlckZvcm1hdCA9IFtcclxuXHRcdHsgdmFsdWU6IFwiMDMvMjAyMVwiLCBmb3JtYXQ6IFwiTU0veXl5eVwiIH0sXHJcblx0XHR7IHZhbHVlOiBcIjAzLzIxXCIsIGZvcm1hdDogXCJNTS9kZFwiIH0sXHJcblx0XHR7IHZhbHVlOiBcIjMvMjAyMVwiLCBmb3JtYXQ6IFwiTS95eXl5XCIgfSxcclxuXHRcdHsgdmFsdWU6IFwiMy8yMVwiLCBmb3JtYXQ6IFwiTS95eVwiIH0sXHJcblx0XHR7IHZhbHVlOiBcIk1hcmNoIDIwMjFcIiwgZm9ybWF0OiBcIk1NTU0geXl5eVwiIH0sXHJcblx0XHR7IHZhbHVlOiBcIk1hciwgMjAyMVwiLCBmb3JtYXQ6IFwiTU1NLCB5eXl5XCIgfSxcclxuXHRcdHsgdmFsdWU6IFwiTWFyY2gsIDIwMjFcIiwgZm9ybWF0OiBcIk1NTU0sIHl5eXlcIiB9LFxyXG5cdFx0eyB2YWx1ZTogXCIyMDIxXCIsIGZvcm1hdDogXCJ5eXl5XCIgfSxcclxuXHRdO1xyXG5cdHpvb21TZXR0aW5ncyA9IHtcclxuXHRcdGVuYWJsZTogZmFsc2UsXHJcblx0fTtcclxuXHRpdGVtRGF0YVR5cGVTb3J0QXJyID0gW1xyXG5cdFx0XCJBc3NldHNcIixcclxuXHRcdFwiTGlhYmlsaXRpZXNcIixcclxuXHRcdFwiRXF1aXR5XCIsXHJcblx0XHRcIlAmTFwiLFxyXG5cdFx0XCJDYXNoZmxvd1wiLFxyXG5cdF07XHJcblx0cHJpdmF0ZSBmb3JtYXREYXRlcyA9IFtdO1xyXG5cdHByaXZhdGUgY3VzdG9tQ2FsY3VsYXRlZEZpZWxkczogYW55W10gPSBbXTsgLy8g6Ieq5a6a5LmJ6K6h566X5YiXXHJcblx0cHJpdmF0ZSBhbGxvd2VkQ2FsY3VsYXRlZEZpZWxkczogYW55W10gPSBbXTsgLy8g5YWB6K646Ieq5a6a5LmJ566X5rOV55qE5a2X5q61XHJcblx0cHJpdmF0ZSB6ZXJvRm9ybWF0RGF0YSA9IHtcclxuXHRcdGVtcHR5TGlzdDogW10sXHJcblx0XHRoZ0xpc3Q6IFtdLFxyXG5cdH07XHJcblx0cHJpdmF0ZSBtaWxsaW9uRmllbGRzID0gW107XHJcblx0cHJpdmF0ZSB0ZW1wU3VidG90YWxzID0gW107XHJcblx0cHVibGljIG9yZGVyQnlDb2x1bW5zOyAvLyBFZzogXCJEdWVEYXRlLCBTZXF1ZW5jZVwiXHJcblx0cHVibGljIGlzQXBwbHlJUlI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRwdWJsaWMgY2FsY0lSUkRhdGE6IGFueTtcclxuXHRwcml2YXRlIHBlcmNlbnROdW1GaWVsZHMgPSBbXTtcclxuXHRwdWJsaWMgcGFnZUxvYWRpbmc7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSBkYXNoYm9hcmRQb3JsZXRzU2VydmljZTogRGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIGRhc2hib2FyZFNlcnZpY2U6IERhc2hib2FyZFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcblx0XHRAT3B0aW9uYWwoKSBASW5qZWN0KFBCRl9UT0tFTikgcHJpdmF0ZSBwYmY6IGFueSxcclxuXHJcblx0KSB7fVxyXG5cclxuXHRuZ09uSW5pdCgpIHtcclxuXHRcdHRoaXMuZ2V0SW5mbygpO1xyXG5cdFx0TDEwbi5sb2FkKHtcclxuXHRcdFx0XCJlbi1VU1wiOiB7XHJcblx0XHRcdFx0cGl2b3R2aWV3OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0XHRwaXZvdGZpZWxkbGlzdDogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdH0sXHJcblx0XHRcdHpoOiB7XHJcblx0XHRcdFx0cGl2b3R2aWV3OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0XHRwaXZvdGZpZWxkbGlzdDogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdH0sXHJcblx0XHRcdFwiemgtSGFudC1IS1wiOiB7XHJcblx0XHRcdFx0cGl2b3R2aWV3OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0XHRwaXZvdGZpZWxkbGlzdDogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdH0sXHJcblx0XHRcdGphOiB7XHJcblx0XHRcdFx0cGl2b3R2aWV3OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0XHRwaXZvdGZpZWxkbGlzdDogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdH0sXHJcblx0XHRcdGtvOiB7XHJcblx0XHRcdFx0cGl2b3R2aWV3OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0XHRwaXZvdGZpZWxkbGlzdDogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdH0sXHJcblx0XHRcdGZyOiB7XHJcblx0XHRcdFx0cGl2b3R2aWV3OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0XHRwaXZvdGZpZWxkbGlzdDogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdH0sXHJcblx0XHR9KTtcclxuXHRcdHRoaXMuZ2V0RGF0YSgpO1xyXG5cdH1cclxuXHJcblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRjaGFuZ2VQaXZvdCgpLnN1YnNjcmliZSgodXBkYXRlZCkgPT4ge1xyXG5cdFx0XHRcdGlmICh1cGRhdGVkID09PSB0aGlzLnBvcnRsZXQubmV3SWQpIHtcclxuXHRcdFx0XHRcdHRoaXMuZ2V0RGF0YSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRTdGFydFJlZnJlc2goKS5zdWJzY3JpYmUoKGRhc2hib2FyZElkKSA9PiB7XHJcblx0XHRcdFx0aWYgKGRhc2hib2FyZElkID09PSB0aGlzLmRhc2hib2FyZC5pZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5wYWdlTG9hZGluZyA9IHRydWU7XHJcblx0XHRcdFx0XHR0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0VXBkYXRlZCgpLnN1YnNjcmliZSgobmV3SWQpID0+IHtcclxuXHRcdFx0XHRpZiAobmV3SWQgPT09IHRoaXMucG9ydGxldC5uZXdJZCB8fCBuZXdJZCA9PT0gdGhpcy5wb3J0bGV0LmlkKSB7XHJcblx0XHRcdFx0XHR0aGlzLmdldERhdGEoKTtcclxuXHRcdFx0XHRcdGlmICh0aGlzLnBpdm90T2JqKSB0aGlzLnBpdm90T2JqLnJlZnJlc2hEYXRhKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuXHRcdFx0dGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldFJlZnJlc2hHYWRnZXQoKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuXHRcdFx0XHRpZiAoIWUpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc3QgaWQgPSBlW1wibmV3SWRcIl07XHJcblx0XHRcdFx0aWYgKGlkID09PSB0aGlzLnBvcnRsZXQubmV3SWQgfHwgaWQgPT09IHRoaXMucG9ydGxldC5pZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0dGhpcy5nZXREYXRhKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuXHRcdFx0dGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldFRhYmxlRm9ybWF0KCkuc3Vic2NyaWJlKCh1cGRhdGVkKSA9PiB7XHJcblx0XHRcdFx0aWYgKHVwZGF0ZWQgPT09IHRoaXMucG9ydGxldC5uZXdJZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5nZXREYXRhKCk7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5waXZvdE9iaikgdGhpcy5waXZvdE9iai5yZWZyZXNoRGF0YSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkU2VydmljZVxyXG5cdFx0XHRcdC5jbGVhckZpZWxkTGlzdE9ic2VydmFibGUoKVxyXG5cdFx0XHRcdC5zdWJzY3JpYmUoKHVwZGF0ZWQpID0+IHtcclxuXHRcdFx0XHRcdGlmICh1cGRhdGVkID09PSB0aGlzLnBvcnRsZXQubmV3SWQpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuZGF0YVNvdXJjZSA9IFtdO1xyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5waXZvdE9iaikgdGhpcy5waXZvdE9iai5yZWZyZXNoRGF0YSgpO1xyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5maWVsZGxpc3RPYmopXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmoudXBkYXRlRGF0YVNvdXJjZSgpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHQpO1xyXG5cclxuXHRcdC8vIHRpdGxlIGNoYW5nZVxyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkU2VydmljZS51cGRhdGVQb3J0bGV0VGl0bGUoKS5zdWJzY3JpYmUoKHVwZGF0ZWQpID0+IHtcclxuXHRcdFx0XHRpZiAodXBkYXRlZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5jb25maWcgPSBKU09OLnBhcnNlKHRoaXMucG9ydGxldC5jb25maWcpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcclxuXHR9XHJcblxyXG5cdG9uTWVtYmVyRWRpdG9yT3BlbihhcmdzOiBhbnkpOiB2b2lkIHtcclxuXHRcdC8vIOS9oOWPr+S7peWcqOi/memHjOagueaNrumcgOimgeS/ruaUuWFyZ3PmnaXoh6rlrprkuYnov4fmu6Tnqpflj6PnmoTooYzkuLpcclxuXHRcdC8vIDExMjQ3IOS4k+mXqOS4uml0ZW0gZGF0YSB0eXBl6ICM6K6+572uXHJcblx0XHRpZiAoYXJncy5maWVsZE5hbWUgPT09IFwiQWNjb3VudFR5cGVDb2RlXCIpIHtcclxuXHRcdFx0bGV0IHJlcyA9IG5ldyBBcnJheSg1KS5maWxsKG51bGwpO1xyXG5cdFx0XHRjb25zdCBmaWVsZE1lbWJlcnMgPSBbLi4uYXJncy5maWVsZE1lbWJlcnNdO1xyXG5cclxuXHRcdFx0Zm9yIChsZXQgaSA9IGZpZWxkTWVtYmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG5cdFx0XHRcdGxldCBpbmRleCA9IC0xO1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1EYXRhVHlwZVNvcnRBcnIuZmluZCgobmFtZSwgaW5kKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZmllbGRNZW1iZXJzW2ldLmFjdHVhbFRleHQgPT09IG5hbWUpIHtcclxuXHRcdFx0XHRcdFx0aW5kZXggPSBpbmQ7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm4gZmllbGRNZW1iZXJzW2ldLmFjdHVhbFRleHQgPT09IG5hbWU7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0aWYgKCFpdGVtKSB7XHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc3QgZmlsbEl0ZW0gPSBmaWVsZE1lbWJlcnMuc3BsaWNlKGksIDEpO1xyXG5cdFx0XHRcdHJlc1tpbmRleF0gPSBmaWxsSXRlbVswXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXMgPSByZXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtKSB8fCBbXTtcclxuXHRcdFx0YXJncy5maWVsZE1lbWJlcnMgPSBbLi4ucmVzLCAuLi5maWVsZE1lbWJlcnNdO1xyXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHRjb25zdCBlbGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmUtbWVtYmVyLWVkaXRvci1kaWFsb2dcIik7XHJcblx0XHRcdFx0aWYgKGVsZSkge1xyXG5cdFx0XHRcdFx0ZWxlLnF1ZXJ5U2VsZWN0b3IoXCIuZS1maWx0ZXItc29ydFwiKS5zZXRBdHRyaWJ1dGUoXHJcblx0XHRcdFx0XHRcdFwic3R5bGVcIixcclxuXHRcdFx0XHRcdFx0XCJkaXNwbGF5OiBub25lXCJcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc2V0R3JpZFNldHRpbmdzKCkge1xyXG5cdFx0dGhpcy5ncmlkU2V0dGluZ3MgPSB7XHJcblx0XHRcdGNvbHVtbldpZHRoOiAxNDAsXHJcblx0XHRcdHJvd0hlaWdodDogNDAsXHJcblx0XHRcdGFsbG93U2VsZWN0aW9uOiB0cnVlLFxyXG5cdFx0XHRzZWxlY3Rpb25TZXR0aW5nczoge1xyXG5cdFx0XHRcdG1vZGU6IFwiQ2VsbFwiLFxyXG5cdFx0XHRcdHR5cGU6IFwiTXVsdGlwbGVcIixcclxuXHRcdFx0XHRjZWxsU2VsZWN0aW9uTW9kZTogXCJCb3hcIixcclxuXHRcdFx0fSxcclxuXHRcdFx0Y29sdW1uUmVuZGVyOiB0aGlzLm9ic2VydmFibGUuc3Vic2NyaWJlKChhcmdzKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5zZXRDb2x1bW5zUmVuZGVyKGFyZ3MpO1xyXG5cdFx0XHR9KSBhcyBhbnksXHJcblx0XHRcdC8vIOWNh+e6p+WQjiDpu5jorqTkvJrmnInlr7zlh7rmoLflvI/opobnm5bvvIzpnIDopoHmiYvliqjorr7nva7lr7zlh7rmoIfpopjmoLflvI9cclxuXHRcdFx0ZXhjZWxIZWFkZXJRdWVyeUNlbGxJbmZvOiB0aGlzLm9ic2VydmFibGUuc3Vic2NyaWJlKChhcmdzOiBhbnkpID0+IHtcclxuXHRcdFx0XHQvLyBhcmdzLnN0eWxl5piv5LiqRXhjZWxTdHlsZeexu+Wei1xyXG5cdFx0XHRcdGFyZ3Muc3R5bGUgPSB7XHJcblx0XHRcdFx0XHRib2xkOiB0cnVlLCAvLyDlrZfkvZPliqDnspdcclxuXHRcdFx0XHRcdHZBbGlnbjogXCJDZW50ZXJcIixcclxuXHRcdFx0XHRcdHdyYXBUZXh0OiBmYWxzZSwgLy8g5LiN5o2i6KGMXHJcblx0XHRcdFx0XHRpbmRlbnQ6IDAsXHJcblx0XHRcdFx0XHRib3JkZXJzOiBudWxsLCAvLyDkuI3pnIDopoFib3JkZXJcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9KSBhcyBhbnksXHJcblx0XHRcdC8vIOWNh+e6p+WQjiDpu5jorqTkvJrmnInlr7zlh7rmoLflvI/opobnm5bvvIzpnIDopoHmiYvliqjorr7nva7lr7zlh7rlhoXlrrnmoLflvI9cclxuXHRcdFx0ZXhjZWxRdWVyeUNlbGxJbmZvOiB0aGlzLm9ic2VydmFibGUuc3Vic2NyaWJlKChhcmdzOiBhbnkpID0+IHtcclxuXHRcdFx0XHQvLyAjZjQ4NmNmZmYg6L+Z6YeM6L6T5Ye655qE5pivUkdCQSDpopzoibLmoLzlvI/vvIwgeGxzeOmHjOS4jemcgOimgemAj+aYjuW6pizljrvmjonlsL7pg6hmZlxyXG5cdFx0XHRcdGlmIChhcmdzLnN0eWxlICYmIGFyZ3Muc3R5bGUuYmFja0NvbG9yKSB7XHJcblx0XHRcdFx0XHRhcmdzLnN0eWxlLmJhY2tDb2xvciA9IGFyZ3Muc3R5bGUuYmFja0NvbG9yLnN1YnN0cmluZygwLCA3KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0bGV0IF9zdHlsZTogYW55ID0ge1xyXG5cdFx0XHRcdFx0Ym9sZDogZmFsc2UsXHJcblx0XHRcdFx0XHR3cmFwVGV4dDogZmFsc2UsXHJcblx0XHRcdFx0XHRib3JkZXJzOiBudWxsLFxyXG5cdFx0XHRcdFx0Zm9udENvbG9yOiBhcmdzLnN0eWxlLmZvbnRDb2xvcixcclxuXHRcdFx0XHRcdGJhY2tDb2xvcjogYXJncy5zdHlsZS5iYWNrQ29sb3IsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHRsZXQgY29sSW5kZXggPSBhcmdzLmNlbGwuY29sSW5kZXg7XHJcblx0XHRcdFx0bGV0IHJvd0luZGV4ID0gYXJncy5jZWxsLnJvd0luZGV4O1xyXG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZy5zaG93R3JhbmRUb3RhbHMpIHtcclxuXHRcdFx0XHRcdC8vIEdyYW5kVG90YWzkuI3pnIDopoHpopzoibJcclxuXHRcdFx0XHRcdGlmIChhcmdzLmRhdGEubGVuZ3RoID09PSByb3dJbmRleCArIDEpIHtcclxuXHRcdFx0XHRcdFx0ZGVsZXRlIF9zdHlsZS5mb250Q29sb3I7XHJcblx0XHRcdFx0XHRcdGRlbGV0ZSBfc3R5bGUuYmFja0NvbG9yO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoYXJncy5kYXRhW3Jvd0luZGV4XVtjb2xJbmRleF0uZm9ybWF0dGVkVGV4dCA9PSBcIlwiKSB7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0YXJncy5zdHlsZSA9IE9iamVjdC5hc3NpZ24oYXJncy5zdHlsZSwgX3N0eWxlKTtcclxuXHRcdFx0XHRpZiAoYXJncy52YWx1ZSA9PT0gXCJcIiAmJiBhcmdzLnN0eWxlLm51bWJlckZvcm1hdCkge1xyXG5cdFx0XHRcdFx0YXJncy5zdHlsZS5udW1iZXJGb3JtYXQgPSBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAodGhpcy5mb3JtYXREYXRlcyAmJiB0aGlzLmZvcm1hdERhdGVzLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0bGV0IGRhdGVGaWVsZHMgPSB0aGlzLmZvcm1hdERhdGVzLm1hcCgoZWwpID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGVsLm5hbWU7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0KGFyZ3MgYXMgYW55KS52YWx1ZSAmJlxyXG5cdFx0XHRcdFx0XHQoKGFyZ3MgYXMgYW55KS5jZWxsLmNvbEluZGV4ID09PSAwXHJcblx0XHRcdFx0XHRcdFx0PyBkYXRlRmllbGRzLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQoYXJncyBhcyBhbnkpLmNlbGwudmFsdWVTb3J0LmF4aXNcclxuXHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHQ6IGRhdGVGaWVsZHMuaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdFx0XHRcdChhcmdzIGFzIGFueSkuY2VsbC5hY3R1YWxUZXh0XHJcblx0XHRcdFx0XHRcdFx0ICApKVxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdC8vQ3VzdG9taXplIHRoZSBSb3cgaGVhZGVycy9Db2x1bW4gaGVhZGVycyBiYXNlZCBvbiB5b3VyIG5lZWRzXHJcblx0XHRcdFx0XHRcdGxldCBoZWFkZXJzO1xyXG5cdFx0XHRcdFx0XHRpZiAoKGFyZ3MgYXMgYW55KS5jZWxsLmNvbEluZGV4ID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0aGVhZGVycyA9IChhcmdzIGFzIGFueSkuY2VsbC5hY3R1YWxUZXh0O1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdC8vIGhlYWRlcnMgPSBwaXZvdFZhbHVlc1trXVtqXS5mb3JtYXR0ZWRUZXh0O1xyXG5cdFx0XHRcdFx0XHRcdGhlYWRlcnMgPSAoYXJncyBhcyBhbnkpLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChoZWFkZXJzKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGRhdGUgPSBuZXcgRGF0ZShoZWFkZXJzKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0bGV0IHF1YXJ0ZXIgPSBNYXRoLmZsb29yKGRhdGUuZ2V0TW9udGgoKSAvIDMpICsgMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0bGV0IGZvcm1hdDtcclxuXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5mb3JtYXREYXRlcy5tYXAoKGVsKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoKGFyZ3MgYXMgYW55KS5jZWxsLmNvbEluZGV4ID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsLm5hbWUgPT1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoYXJncyBhcyBhbnkpLmNlbGwudmFsdWVTb3J0LmF4aXNcclxuXHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IGVsLmZvcm1hdDtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5uYW1lID09IChhcmdzIGFzIGFueSkuY2VsbC5hY3R1YWxUZXh0XHJcblx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBlbC5mb3JtYXQ7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0KGFyZ3MgYXMgYW55KS52YWx1ZSA9IHRoaXMuZ2V0UXVhcnRlclZhbHVlKFxyXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybWF0LFxyXG5cdFx0XHRcdFx0XHRcdFx0ZGF0ZSxcclxuXHRcdFx0XHRcdFx0XHRcdHF1YXJ0ZXJcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KSBhcyBhbnksXHJcblx0XHR9IGFzIEdyaWRTZXR0aW5ncztcclxuXHR9XHJcblxyXG5cdGJlZm9yZUV4cG9ydChleHBvcnREYXRhKSB7XHJcblx0XHRpZiAoZXhwb3J0RGF0YSkge1xyXG5cdFx0XHRjb25zdCBrZXlNYXAgPSB7fTtcclxuXHRcdFx0dGhpcy5kYXRhU291cmNlU2V0dGluZ3MuZm9ybWF0U2V0dGluZ3MuZm9yRWFjaCgoZGF0YSkgPT4ge1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGRhdGEuZm9ybWF0ID09PSBcIiMsIyMjLCwuMDsoIywjIyMsLC4wKVwiIHx8XHJcblx0XHRcdFx0XHRkYXRhLmZvcm1hdCA9PT0gXCIjLCMjIywsOygjLCMjIywsKVwiIHx8XHJcblx0XHRcdFx0XHRkYXRhLmZvcm1hdCA9PT0gXCIjLCMjIywsLjAwOygjLCMjIywsLjAwKVwiXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRrZXlNYXBbZGF0YS5uYW1lXSA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGV4cG9ydERhdGEuZGF0YUNvbGxlY3Rpb25zICYmXHJcblx0XHRcdFx0ZXhwb3J0RGF0YS5kYXRhQ29sbGVjdGlvbnMubGVuZ3RoXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGV4cG9ydERhdGEuZGF0YUNvbGxlY3Rpb25zWzBdLmZvckVhY2goKHJvdykgPT4ge1xyXG5cdFx0XHRcdFx0cm93LmZvckVhY2goKGNlbGwpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKGtleU1hcFtjZWxsLmFjdHVhbFRleHRdKSB7XHJcblx0XHRcdFx0XHRcdFx0Y2VsbC52YWx1ZSA9IGNlbGwuYWN0dWFsVmFsdWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHR0eXBlb2YgY2VsbC52YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxyXG5cdFx0XHRcdFx0XHRcdHR5cGVvZiBjZWxsLmZvcm1hdHRlZFRleHQgPT09IFwic3RyaW5nXCJcclxuXHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0Y2VsbC52YWx1ZSA9IGNlbGwuZm9ybWF0dGVkVGV4dDtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgZ2V0RGF0YSgpIHtcclxuXHRcdHRoaXMucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuXHRcdGxldCBjb2x1bW5zID0gW107XHJcblx0XHRsZXQgdmFsdWVzID0gW107XHJcblx0XHRsZXQgZm9ybWF0U2V0dGluZ3MgPSBbXTtcclxuXHRcdGxldCByb3dzID0gW107XHJcblx0XHRsZXQgZmllbGRNYXBwaW5nID0gW107XHJcblx0XHQvLyDmuIXnqbpncmFuZFRvdGFsc+WSjHN1YlRvdGFsc1xyXG5cdFx0dGhpcy5ncmFuZFRvdGFscyA9IHt9O1xyXG5cdFx0dGhpcy5zdWJUb3RhbHMgPSB7fTtcclxuXHRcdHRoaXMuY29uZmlnID0gSlNPTi5wYXJzZSh0aGlzLnBvcnRsZXQuY29uZmlnKTtcclxuXHRcdHRoaXMuc2V0R3JpZFNldHRpbmdzKCk7XHJcblx0XHRpZiAodGhpcy5jb25maWcuZmllbGRzKSB7XHJcblx0XHRcdGlmICh0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmFsbEZpZWxkc09ialt0aGlzLnBvcnRsZXQuaWRdKSB7XHJcblx0XHRcdFx0dGhpcy5jb25maWdGaWVsZHMgPVxyXG5cdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5zZXRDb25maWdGaWVsZHMoXHJcblx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuYWxsRmllbGRzT2JqW1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMucG9ydGxldC5pZFxyXG5cdFx0XHRcdFx0XHRdLFxyXG5cdFx0XHRcdFx0XHR0aGlzLmNvbmZpZy5maWVsZHNcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5jb25maWdGaWVsZHMgPSBbLi4udGhpcy5jb25maWcuZmllbGRzXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuUGl2b3RfRGF0YSA9IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0UmVzdWx0QnlEYXRhVGFibGUoXHJcblx0XHRcdHRoaXMucG9ydGxldCxcclxuXHRcdFx0ZmFsc2UsXHJcblx0XHRcdGZhbHNlLFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZC5pZFxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLm9yZGVyQnlDb2x1bW5zID0gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRPcmRlckJ5Q29sdW1uc05ldyhcclxuXHRcdFx0dGhpcy5wb3J0bGV0LmZpZ3VyZUNvZGUsXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuUGl2b3RfRGF0YSA9IERhdGFVdGlsLnBhcnNlLnBhcnNlSnNvbih0aGlzLlBpdm90X0RhdGEpO1xyXG5cdFx0aWYgKHRoaXMuUGl2b3RfRGF0YSAmJiB0aGlzLlBpdm90X0RhdGEubGVuZ3RoID4gMCkge1xyXG5cdFx0XHQvLyDnp7vpmaTliJflkI3lkozmlbDmja5rZXnkuI3ljLnphY3nmoTpoblcclxuXHRcdFx0dGhpcy5nZXRleGNsdWRlRmllbGRzKHRoaXMuY29uZmlnRmllbGRzLCB0aGlzLlBpdm90X0RhdGFbMF0pO1xyXG5cdFx0XHRpZiAoIXRoaXMuYWxsb3dlZENhbGN1bGF0ZWRGaWVsZHMubGVuZ3RoKSB7XHJcblx0XHRcdFx0dGhpcy5hbGxvd2VkQ2FsY3VsYXRlZEZpZWxkcyA9IE9iamVjdC5rZXlzKHRoaXMuUGl2b3RfRGF0YVswXSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yIChsZXQgaXRlbSBvZiB0aGlzLmNvbmZpZ0ZpZWxkcykge1xyXG5cdFx0XHRcdC8vIOWtl+auteWIhue7hCBodHRwczovL2VqMi5zeW5jZnVzaW9uLmNvbS9hbmd1bGFyL2RvY3VtZW50YXRpb24vcGl2b3R2aWV3L2ZpZWxkLWxpc3Q/c2VhcmNoPWZpZWxkTWFwcGluZyNncm91cC1maWVsZHMtdW5kZXItZGVzaXJlZC1mb2xkZXItbmFtZVxyXG5cdFx0XHRcdGZpZWxkTWFwcGluZy5wdXNoKHtcclxuXHRcdFx0XHRcdG5hbWU6IGl0ZW0uY29sTmFtZSxcclxuXHRcdFx0XHRcdGNhcHRpb246IGl0ZW0uYWRkdGlvbk5hbWVcclxuXHRcdFx0XHRcdFx0PyBgJHtpdGVtLmxhbmdWYWx1ZX0gJHtpdGVtLmFkZHRpb25OYW1lfWBcclxuXHRcdFx0XHRcdFx0OiBpdGVtLmxhbmdWYWx1ZVxyXG5cdFx0XHRcdFx0XHQ/IGl0ZW0ubGFuZ1ZhbHVlXHJcblx0XHRcdFx0XHRcdDogdGhpcy50cmFuc2xhdGlvbltpdGVtLmxhbmdDb2RlXSB8fCBpdGVtLmxhbmdDb2RlLFxyXG5cclxuXHRcdFx0XHRcdGRhdGFUeXBlOiBpdGVtLmRhdGFUeXBlLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5jb25maWdGaWVsZHMpIHtcclxuXHRcdFx0dGhpcy5wZXJjZW50TnVtRmllbGRzID0gW107XHJcblx0XHRcdHRoaXMuZm9ybWF0RGF0ZXMgPSBbXTtcclxuXHRcdFx0dGhpcy56ZXJvRm9ybWF0RGF0YS5oZ0xpc3QgPSBbXTtcclxuXHRcdFx0dGhpcy56ZXJvRm9ybWF0RGF0YS5lbXB0eUxpc3QgPSBbXTtcclxuXHRcdFx0dGhpcy5taWxsaW9uRmllbGRzID0gW107XHJcblx0XHRcdHRoaXMuY29uZmlnRmllbGRzLm1hcCgoZWwpID0+IHtcclxuXHRcdFx0XHQvLyBTTVAyLTI0ODYgJiBwZXJjZW50TnVt55qEZm9ybWF06Zeu6aKYXHJcblx0XHRcdFx0aWYgKGVsLmRhdGFUeXBlID09IFwicGVyY2VudE51bVwiKSB7XHJcblx0XHRcdFx0XHR0aGlzLnBlcmNlbnROdW1GaWVsZHMucHVzaChlbC5jb2xOYW1lKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRlbC5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRlbC5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZCAmJlxyXG5cdFx0XHRcdFx0WzIsIDUsIDgsIDExLCAxNCwgMTddLmluY2x1ZGVzKGVsLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdClcclxuXHRcdFx0XHQpXHJcblx0XHRcdFx0XHR0aGlzLnplcm9Gb3JtYXREYXRhLmhnTGlzdC5wdXNoKGVsLmNvbE5hbWUpO1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGVsLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWQgJiZcclxuXHRcdFx0XHRcdFszLCA2LCA5LCAxMiwgMTUsIDE4XS5pbmNsdWRlcyhlbC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXQpXHJcblx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0dGhpcy56ZXJvRm9ybWF0RGF0YS5lbXB0eUxpc3QucHVzaChlbC5jb2xOYW1lKTtcclxuXHRcdFx0XHQvLyAgcGl2b3RUYWJsZWZvcm1hdFBlcmNlbnQg55m+5YiG5q+U5Lmf5pyJMTAsMTEsMTIg5L2G5piv5a6D5piv5pi+56S6MC4wMHjnmoTmoLzlvI/vvIzmiYDku6XlvpfmjpLpmaRcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRlbC5kYXRhVHlwZSAhPT0gXCJwZXJjZW50XCIgJiZcclxuXHRcdFx0XHRcdGVsLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWQgJiZcclxuXHRcdFx0XHRcdFsxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4XS5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHQpXHJcblx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0dGhpcy5taWxsaW9uRmllbGRzLnB1c2goZWwuY29sTmFtZSk7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ZWwuZGF0YVR5cGUgPT09IFwibnVtYmVyXCIgJiZcclxuXHRcdFx0XHRcdCghZWwuZm9ybWF0IHx8XHJcblx0XHRcdFx0XHRcdChlbC5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHRlbC5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0IWVsLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkKSlcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGZvcm1hdERhdGEgPSB7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGVsLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdC8vU01QMi0zMDI2IGFuZCBTTVAyLTMwNTlcclxuXHRcdFx0XHRcdFx0Zm9ybWF0OlxyXG5cdFx0XHRcdFx0XHRcdGVsLmNvbE5hbWUgIT09IFwiUG9ydEludlN0a1wiICYmXHJcblx0XHRcdFx0XHRcdFx0ZWwuY29sTmFtZSAhPT0gXCJQb3J0RmRJbnZTdGtcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PyB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmZvcm1hdE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5kcFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0XHQ6IFwiIyMwLiMjIyMjIyMwXCIsXHJcblx0XHRcdFx0XHRcdHVzZUdyb3VwaW5nOiB0cnVlLFxyXG5cdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRmb3JtYXRTZXR0aW5ncy5wdXNoKGZvcm1hdERhdGEpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHQoZWwuZGF0YVR5cGUgPT09IFwicGVyY2VudFwiIHx8XHJcblx0XHRcdFx0XHRcdGVsLmRhdGFUeXBlID09PSBcInBlcmNlbnROdW1cIikgJiZcclxuXHRcdFx0XHRcdCghZWwuZm9ybWF0IHx8XHJcblx0XHRcdFx0XHRcdChlbC5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHRlbC5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0IWVsLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkKSlcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGZvcm1hdERhdGEgPSB7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGVsLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdGZvcm1hdDogdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdGVsLmRwXHJcblx0XHRcdFx0XHRcdCksXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3MucHVzaChmb3JtYXREYXRhKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ZWwuZGF0YVR5cGUgPT09IFwibXVsdGlwbGVcIiAmJlxyXG5cdFx0XHRcdFx0KCFlbC5mb3JtYXQgfHxcclxuXHRcdFx0XHRcdFx0KGVsLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRcdGVsLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0XHQhZWwuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWQpKVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0Y29uc3QgZm9ybWF0RGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0bmFtZTogZWwuY29sTmFtZSxcclxuXHRcdFx0XHRcdFx0Zm9ybWF0OiB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmZvcm1hdE11bHRpcGxlKFxyXG5cdFx0XHRcdFx0XHRcdGVsLmRwXHJcblx0XHRcdFx0XHRcdCksXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3MucHVzaChmb3JtYXREYXRhKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGVsLmRhdGFUeXBlID09PSBcImRhdGV0aW1lXCIgfHwgZWwuZGF0YVR5cGUgPT09IFwiZGF0ZVwiKSB7XHJcblx0XHRcdFx0XHRsZXQgZm9ybWF0ID0gXCJcIjtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0ZWwuZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdGVsLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWRcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoZWwuZm9ybWF0WzBdLmRhdGVUeXBlID09IFwiUXVhcnRlclwiKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGZvcm1hdF8gPSBlbC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXREaXNwbGF5O1xyXG5cdFx0XHRcdFx0XHRcdGxldCBmb3JtYXRJbmZvID0gdGhpcy5xdWFydGVyRm9ybWF0LmZpbHRlcihcclxuXHRcdFx0XHRcdFx0XHRcdChxdXIpID0+IHF1ci52YWx1ZSA9PSBmb3JtYXRfXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoZm9ybWF0SW5mby5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IGZvcm1hdEluZm9bMF0uZm9ybWF0O1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBmb3JtYXREYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lOiBlbC5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQ6IGZvcm1hdF8sXHJcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiZGF0ZVwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZm9ybWF0RGF0ZXMucHVzaChmb3JtYXREYXRhKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZWwuZm9ybWF0WzBdLmRhdGVUeXBlID09IFwiRGF0ZVwiKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGZyb21JZHggPVxyXG5cdFx0XHRcdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheS5pbmRleE9mKFwiKFwiKTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgdG9JZHggPVxyXG5cdFx0XHRcdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheS5pbmRleE9mKFwiKVwiKTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZm9ybWF0XyA9XHJcblx0XHRcdFx0XHRcdFx0XHRlbC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXREaXNwbGF5LnNsaWNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmcm9tSWR4ICsgMSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0dG9JZHhcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChmb3JtYXRfKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiREQvTU0vWVlZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcImRkL01NL3l5eXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiREQvTU0vWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJkZC9NTS95eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJNTS9ERC9ZWVlZXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwiTU0vZGQveXl5eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJNTS9ERC9ZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcIk1NL2RkL3l5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIllZWVktTU0tRERcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJ5eXl5LU1NLWRkXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIllZLU1NLUREXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwieXktTU0tZGRcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiREQtTU0tWVlZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcImRkLU1NLXl5eXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiREQtTU0tWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJkZC1NTS15eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJNTS1ERC1ZWVlZXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwiTU0tZGQteXl5eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJNTS1ERC1ZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcIk1NLWRkLXl5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIk1NTSBERCwgWVlZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcIk1NTSBkZCwgeXl5eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJERC1NTU0tWVlZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcImRkLU1NTS15eXl5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIWZvcm1hdCkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBmb3JtYXREYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdG5hbWU6IGVsLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdFx0Zm9ybWF0OiB0aGlzLmRhdGVQaXBlRm9ybWF0LFxyXG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiZGF0ZVwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5ncy5wdXNoKGZvcm1hdERhdGEpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgZm9ybWF0RGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0XHRuYW1lOiBlbC5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0XHRcdGZvcm1hdDogZm9ybWF0LFxyXG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiZGF0ZVwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3MucHVzaChmb3JtYXREYXRhKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0Ly9jYWxjdWxhdGVkRmllbGRTZXR0aW5ncyBmb3JtYXQgcHVzaCB0byBmb3JtYXRTZXR0aW5nc1xyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLmNvbmZpZy5jYWxjdWxhdGVkRmllbGRTZXR0aW5ncyAmJlxyXG5cdFx0XHR0aGlzLmNvbmZpZy5jYWxjdWxhdGVkRmllbGRTZXR0aW5ncy5sZW5ndGggPiAwXHJcblx0XHQpIHtcclxuXHRcdFx0dGhpcy5jb25maWcuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MubWFwKChlbCkgPT4ge1xyXG5cdFx0XHRcdGlmIChlbC5mb3JtYXRTdHJpbmcgIT09IFwiXCIpIHtcclxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSBmb3JtYXRTZXR0aW5ncy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG5cdFx0XHRcdFx0XHRpZiAoZm9ybWF0U2V0dGluZ3NbaV0ubmFtZSA9PT0gZWwubmFtZSkge1xyXG5cdFx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnNwbGljZShpLCAxKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3MucHVzaCh7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGVsLm5hbWUsXHJcblx0XHRcdFx0XHRcdGZvcm1hdDogZWwuZm9ybWF0U3RyaW5nLFxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdGxldCBzZXJpZXMgPSB0aGlzLmNvbmZpZy55YXhpcy5zZXJpZXM7XHJcblx0XHRpZiAoc2VyaWVzKSB7XHJcblx0XHRcdGZvciAobGV0IGl0ZW0gb2Ygc2VyaWVzKSB7XHJcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBpdGVtLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRjYXB0aW9uOiB0aGlzLmdldENhcHRpb25CeU5hbWUoaXRlbS5jb2xOYW1lKSB8fCBpdGVtLnRpdGxlLFxyXG5cdFx0XHRcdFx0dHlwZTogaXRlbS5jYWxNZXRob2QsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHR2YWx1ZXMucHVzaCh2YWx1ZSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGxldCBncm91cHMgPSB0aGlzLmNvbmZpZy54YXhpcy5ncm91cHM7XHJcblx0XHRpZiAoZ3JvdXBzKSB7XHJcblx0XHRcdGZvciAobGV0IGdpdGVtIG9mIGdyb3Vwcykge1xyXG5cdFx0XHRcdGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdFx0KGVsKSA9PiBlbC5jb2xOYW1lID09PSBnaXRlbS5uYW1lXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoZmllbGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0Z2l0ZW0uc2hvd1N1YlRvdGFscyA9IGZpZWxkWzBdLnNob3dTdWJUb3RhbHM7XHJcblx0XHRcdFx0XHRnaXRlbS5jYXB0aW9uID1cclxuXHRcdFx0XHRcdFx0ZmllbGRbMF0ubGFuZ1ZhbHVlIHx8XHJcblx0XHRcdFx0XHRcdHRoaXMudHJhbnNsYXRpb25bZmllbGRbMF0ubGFuZ0NvZGVdIHx8XHJcblx0XHRcdFx0XHRcdGdpdGVtLmNhcHRpb24gfHxcclxuXHRcdFx0XHRcdFx0ZmllbGRbMF0ubGFuZ0NvZGU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJvd3MucHVzaChnaXRlbSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmNvbmZpZy5jb2x1bW5Hcm91cCAmJiB0aGlzLmNvbmZpZy5jb2x1bW5Hcm91cC5sZW5ndGgpIHtcclxuXHRcdFx0Zm9yIChsZXQgaXRlbSBvZiB0aGlzLmNvbmZpZy5jb2x1bW5Hcm91cCkge1xyXG5cdFx0XHRcdGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdFx0KGVsKSA9PiBlbC5jb2xOYW1lID09PSBpdGVtLm5hbWVcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGlmIChmaWVsZC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRpdGVtLnNob3dTdWJUb3RhbHMgPSBmaWVsZFswXS5zaG93U3ViVG90YWxzO1xyXG5cdFx0XHRcdFx0aXRlbS5jYXB0aW9uID1cclxuXHRcdFx0XHRcdFx0ZmllbGRbMF0ubGFuZ1ZhbHVlIHx8XHJcblx0XHRcdFx0XHRcdHRoaXMudHJhbnNsYXRpb25bZmllbGRbMF0ubGFuZ0NvZGVdIHx8XHJcblx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdDb2RlIHx8XHJcblx0XHRcdFx0XHRcdGl0ZW0uY2FwdGlvbjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29sdW1ucy5wdXNoKGl0ZW0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRsZXQgY29uZGl0aW9uYWxGb3JtYXRTZXR0aW5ncyA9IFtdO1xyXG5cdFx0dGhpcy5jb25maWdGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuXHRcdFx0aWYgKGZpZWxkLmZvcm1hdCAmJiBmaWVsZC5mb3JtYXQubGVuZ3RoKSB7XHJcblx0XHRcdFx0aWYgKGZpZWxkLmZvcm1hdFswXS5mb250U2V0dGluZ0NoZWNrZWQpIHtcclxuXHRcdFx0XHRcdGxldCBjb25kaXRpb25hbEZvcm1hdE9iaiA9IHtcclxuXHRcdFx0XHRcdFx0YXBwbHlHcmFuZFRvdGFsczogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0bWVhc3VyZTogXCJcIixcclxuXHRcdFx0XHRcdFx0dmFsdWUxOiBudWxsLFxyXG5cdFx0XHRcdFx0XHR2YWx1ZTI6IG51bGwsXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbnM6IFwiXCIsXHJcblx0XHRcdFx0XHRcdHN0eWxlOiB7XHJcblx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdGNvbG9yOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdGZvbnRGYW1pbHk6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0Zm9udFNpemU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0bGV0IG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaiA9IHtcclxuXHRcdFx0XHRcdFx0YXBwbHlHcmFuZFRvdGFsczogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0bWVhc3VyZTogXCJcIixcclxuXHRcdFx0XHRcdFx0dmFsdWUxOiBudWxsLFxyXG5cdFx0XHRcdFx0XHR2YWx1ZTI6IG51bGwsXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbnM6IFwiXCIsXHJcblx0XHRcdFx0XHRcdHN0eWxlOiB7XHJcblx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdGNvbG9yOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdGZvbnRGYW1pbHk6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0Zm9udFNpemU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0Ly8gZm9udCBzZXR0aW5nIHN0YXJ0XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoubWVhc3VyZSA9XHJcblx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZpZWxkO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoubWVhc3VyZSA9XHJcblx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZpZWxkO1xyXG5cclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWQgJiZcclxuXHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLmNvbXBhcmVTZWxlY3RcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldENvbXBhcmVDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRkZWxldGUgY29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyO1xyXG5cdFx0XHRcdFx0XHRkZWxldGUgbmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMjtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJMZXNzVGhhblwiO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXSxcclxuXHRcdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLFxyXG5cdFx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0U2V0dGluZ3MucHVzaChuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmopO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRTZXR0aW5ncy51bnNoaWZ0KGNvbmRpdGlvbmFsRm9ybWF0T2JqKTtcclxuXHRcdFx0XHRcdC8vIGZvbnQgc2V0dGluZyBlbmRcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0bGV0IGZvcm1hdFNldHRpbmdzT2JqID0ge1xyXG5cdFx0XHRcdFx0bmFtZTogXCJcIixcclxuXHRcdFx0XHRcdGZvcm1hdDogXCJcIixcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdGlmIChmaWVsZC5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZCkge1xyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmoubmFtZSA9IGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZpZWxkO1xyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmouZm9ybWF0ID1cclxuXHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0c3dpdGNoIChmaWVsZC5mb3JtYXRbMF0uZGF0YVR5cGUpIHtcclxuXHRcdFx0XHRcdFx0Y2FzZSBcIm51bWJlclwiOlxyXG5cdFx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqLmZvcm1hdCA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXROdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSBcImludGVnZXJcIjpcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iai5mb3JtYXQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0SW50ZWdlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlIFwicGVyY2VudE51bVwiOlxyXG5cdFx0XHRcdFx0XHRjYXNlIFwicGVyY2VudFwiOlxyXG5cdFx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqLmZvcm1hdCA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgXCJtdWx0aXBsZVwiOlxyXG5cdFx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqLmZvcm1hdCA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXRNdWx0aXBsZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlIFwiZGF0ZVwiOlxyXG5cdFx0XHRcdFx0XHRjYXNlIFwiZGF0ZXRpbWVcIjpcclxuXHRcdFx0XHRcdFx0XHRsZXQgZm9ybWF0ID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHRpZiAoZmllbGQuZm9ybWF0ICYmIGZpZWxkLmZvcm1hdC5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChmaWVsZC5mb3JtYXRbMF0uZGF0ZVR5cGUgPT0gXCJRdWFydGVyXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXREaXNwbGF5O1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChmaWVsZC5mb3JtYXRbMF0uZGF0ZVR5cGUgPT0gXCJEYXRlXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IGZyb21JZHggPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdERpc3BsYXkuaW5kZXhPZihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiKFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IHRvSWR4ID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXREaXNwbGF5LmluZGV4T2YoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIilcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheS5zbGljZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZyb21JZHggKyAxLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG9JZHhcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRpZiAoZm9ybWF0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iaiA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogZmllbGQuY29sTmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0OiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIGZpZWxkLmRhdGFUeXBlID0gXCJzdHJpbmdcIjtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmouZm9ybWF0ID0gdGhpcy5kYXRlUGlwZUZvcm1hdDtcclxuXHRcdFx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqW1widHlwZVwiXSA9IFwiZGF0ZVwiO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLmRhdGFUeXBlICE9PSBcInN0cmluZ1wiICYmXHJcblx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iai5mb3JtYXRcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnB1c2goZm9ybWF0U2V0dGluZ3NPYmopO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMgPSB0aGlzLmNvbmZpZy5jdXN0b21DYWxjdWxhdGVkRmllbGRzXHJcblx0XHRcdD8gdGhpcy5jb25maWcuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1xyXG5cdFx0XHQ6IFtdO1xyXG5cclxuXHRcdC8vIFNNUDItNDU4MiBBR0lDIC0gRGFzaGJvYXJkIGl0ZW0gc2VxdWVuY2VcclxuXHRcdGxldCBpc0V4aXN0U2VxID0gZmFsc2U7XHJcblx0XHRsZXQgc29ydFNldHRpbmdzID0gdGhpcy5jb25maWcuc29ydFNldHRpbmdzIHx8IFtdO1xyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLlBpdm90X0RhdGEgJiZcclxuXHRcdFx0dGhpcy5QaXZvdF9EYXRhWzBdICYmXHJcblx0XHRcdHRoaXMuUGl2b3RfRGF0YVswXS5TZXEgIT09IG51bGxcclxuXHRcdCkge1xyXG5cdFx0XHQvLyDlj5bmtohOYW1l55qE6buY6K6k5o6S5bqP77yM5qC55o2uU2Vx5p2l5o6S5bqPXHJcblx0XHRcdHNvcnRTZXR0aW5ncy5wdXNoKHsgbmFtZTogXCJOYW1lXCIsIG9yZGVyOiBcIk5vbmVcIiB9KTtcclxuXHRcdFx0aXNFeGlzdFNlcSA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRsZXQgZmlsdGVyU2V0dGluZ3MgPSB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmNoZWNrRmlsdGVyU2V0dGluZ3MoXHJcblx0XHRcdHRoaXMuY29uZmlnLFxyXG5cdFx0XHR0aGlzLmNvbmZpZ0ZpZWxkcyxcclxuXHRcdFx0dGhpcy5QaXZvdF9EYXRhXHJcblx0XHQpO1xyXG5cdFx0bGV0IG5hbWVGaWx0ZXIgPSBmaWx0ZXJTZXR0aW5ncy5maW5kKCh4KSA9PiB4Lm5hbWUgPT09IFwiTmFtZVwiKTtcclxuXHRcdC8vIOWtmOWcqCBOYW1l55qEZmlsdGVy5pe277yM5Lya5oyJ54Wn6buY6K6k5o6S5bqP77yM6ZyA6KaB5a+5TmFtZei/m+ihjFNlceaOkuW6j+WkhOeQhlxyXG5cdFx0aWYgKGlzRXhpc3RTZXEgJiYgbmFtZUZpbHRlciAmJiByb3dzLnNvbWUoKHgpID0+IHgubmFtZSA9PT0gXCJOYW1lXCIpKSB7XHJcblx0XHRcdGxldCBpdGVtcyA9IG5hbWVGaWx0ZXIuaXRlbXM7IC8vIOaLv+WIsOW9k+WJjeaOkuW6j++8jOm7mOiupEEtWlxyXG5cdFx0XHRsZXQgc2VxQXJyID0gW107XHJcblx0XHRcdGl0ZW1zLmZvckVhY2goKG5hbWUpID0+IHtcclxuXHRcdFx0XHRsZXQgb2JqID0gdGhpcy5QaXZvdF9EYXRhLmZpbmQoKHgpID0+IHguTmFtZSA9PT0gbmFtZSk7XHJcblx0XHRcdFx0bGV0IGl0ZW06IGFueSA9IHtcclxuXHRcdFx0XHRcdG5hbWU6IG5hbWUsXHJcblx0XHRcdFx0XHRzZXE6IG9iai5TZXEsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHRzZXFBcnIucHVzaChpdGVtKTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdHNlcUFyci5zb3J0KChhLCBiKSA9PiBhLnNlcSAtIGIuc2VxKTtcclxuXHRcdFx0bmFtZUZpbHRlci5pdGVtcyA9IHNlcUFyci5tYXAoKHgpID0+IHgubmFtZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgYWxsRmllbGRzID1cclxuXHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5hbGxGaWVsZHNPYmpbdGhpcy5wb3J0bGV0LmlkXTtcclxuXHRcdGlmIChhbGxGaWVsZHMpIHtcclxuXHRcdFx0dmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbSA9IGFsbEZpZWxkcy5maW5kKFxyXG5cdFx0XHRcdFx0KGZpZWxkKSA9PiBmaWVsZC5jb2xOYW1lID09PSB2YWx1ZS5uYW1lXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoaXRlbSkge1xyXG5cdFx0XHRcdFx0dmFsdWUuY2FwdGlvbiA9XHJcblx0XHRcdFx0XHRcdChpdGVtLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRcdGl0ZW0uZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdGl0ZW0uZm9ybWF0WzBdLmRpc3BsYXlOYW1lKSB8fFxyXG5cdFx0XHRcdFx0XHRpdGVtLmxhbmdWYWx1ZSB8fFxyXG5cdFx0XHRcdFx0XHR0aGlzLnRyYW5zbGF0aW9uW2l0ZW0ubGFuZ0NvZGVdIHx8XHJcblx0XHRcdFx0XHRcdGl0ZW0ubGFuZ0NvZGU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdGxldCBoYXNJdGVtRGF0YVR5cGUgPSBmYWxzZTtcclxuXHRcdGlmICh0aGlzLlBpdm90X0RhdGEpIHtcclxuXHRcdFx0dGhpcy5QaXZvdF9EYXRhLm1hcCgoZGF0YSkgPT4ge1xyXG5cdFx0XHRcdGlmIChkYXRhW1wiQWNjb3VudFR5cGVDb2RlXCJdKSB7XHJcblx0XHRcdFx0XHRoYXNJdGVtRGF0YVR5cGUgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyb3dzLmZvckVhY2goKHJvdykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGRhdGFbcm93Lm5hbWVdID09PSBcIlwiKSB7XHJcblx0XHRcdFx0XHRcdGRhdGFbcm93Lm5hbWVdID0gXCJudWxsXCI7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGhhc0l0ZW1EYXRhVHlwZSkge1xyXG5cdFx0XHRzb3J0U2V0dGluZ3MucHVzaCh7XHJcblx0XHRcdFx0bmFtZTogXCJBY2NvdW50VHlwZUNvZGVcIixcclxuXHRcdFx0XHRvcmRlcjogXCJBc2NlbmRpbmdcIixcclxuXHRcdFx0XHRtZW1iZXJzT3JkZXI6IFsuLi50aGlzLml0ZW1EYXRhVHlwZVNvcnRBcnJdLFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdHRoaXMuY29uZmlnLmZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyKSA9PiB7XHJcblx0XHRcdGZpbHRlci5jYXB0aW9uID1cclxuXHRcdFx0XHR0aGlzLmdldENhcHRpb25CeU5hbWUoZmlsdGVyLm5hbWUpIHx8IGZpbHRlci5jYXB0aW9uO1xyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmRhdGFTb3VyY2VTZXR0aW5ncyA9IHtcclxuXHRcdFx0ZGF0YVNvdXJjZTogdGhpcy5QaXZvdF9EYXRhIHx8IFtdLFxyXG5cdFx0XHRyb3dzOiByb3dzIHx8IFtdLFxyXG5cdFx0XHRjb2x1bW5zOiBjb2x1bW5zIHx8IFtdLFxyXG5cdFx0XHR2YWx1ZXM6IHZhbHVlcyB8fCBbXSxcclxuXHRcdFx0ZmlsdGVyczogdGhpcy5jb25maWcuZmlsdGVycyxcclxuXHRcdFx0ZmlsdGVyU2V0dGluZ3M6IGZpbHRlclNldHRpbmdzLFxyXG5cdFx0XHRleGNsdWRlRmllbGRzOiB0aGlzLmV4Y2x1ZGVGaWVsZHMsXHJcblx0XHRcdGZvcm1hdFNldHRpbmdzOiBmb3JtYXRTZXR0aW5ncyxcclxuXHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRTZXR0aW5nczogY29uZGl0aW9uYWxGb3JtYXRTZXR0aW5ncyxcclxuXHRcdFx0Ly8g55So5LqO5pS26LW35bGV5byA5oyH5a6a5bGC57qnLCDov5nnjqnmhI/lj6rog73lsZXlvIDnrKzkuIDlsYIsXHJcblx0XHRcdC8vIOW/hemhu+iuvuWummV4cGFuZEFsbCDkuLpmYWxzZe+8iOm7mOiupOaYr2ZhbHNl77yJ77yMIOi/meagt+WtkOaJjeiDveWunueOsOWPquWxleW8gOS4pOWxglxyXG5cdFx0XHQvLyBkcmlsbGVkTWVtYmVycyxcclxuXHRcdFx0ZXhwYW5kQWxsOiB0cnVlLFxyXG5cdFx0XHRlbmFibGVTb3J0aW5nOiB0cnVlLFxyXG5cdFx0XHRmaWVsZE1hcHBpbmc6IGZpZWxkTWFwcGluZyxcclxuXHRcdFx0Y2FsY3VsYXRlZEZpZWxkU2V0dGluZ3M6IHRoaXMuY29uZmlnLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzLFxyXG5cdFx0XHRzb3J0U2V0dGluZ3M6IHNvcnRTZXR0aW5ncyxcclxuXHRcdFx0Ly8gZ3JvdXBTZXR0aW5nczogdGhpcy5jb25maWcuZ3JvdXBTZXR0aW5ncyxcclxuXHRcdFx0dmFsdWVTb3J0U2V0dGluZ3M6IHRoaXMuY29uZmlnLnZhbHVlU29ydFNldHRpbmdzLFxyXG5cdFx0XHRzaG93R3JhbmRUb3RhbHM6IHRoaXMuY29uZmlnLnNob3dHcmFuZFRvdGFscyxcclxuXHRcdFx0c2hvd1Jvd0dyYW5kVG90YWxzOiB0aGlzLmNvbmZpZy5zaG93Um93R3JhbmRUb3RhbHMsXHJcblx0XHRcdHNob3dDb2x1bW5HcmFuZFRvdGFsczogdGhpcy5jb25maWcuc2hvd0NvbHVtbkdyYW5kVG90YWxzLFxyXG5cdFx0XHRzaG93U3ViVG90YWxzOiB0aGlzLmNvbmZpZy5zaG93U3ViVG90YWxzLFxyXG5cdFx0XHRzaG93Um93U3ViVG90YWxzOiB0aGlzLmNvbmZpZy5zaG93Um93U3ViVG90YWxzLFxyXG5cdFx0XHRzaG93Q29sdW1uU3ViVG90YWxzOiB0aGlzLmNvbmZpZy5zaG93Q29sdW1uU3ViVG90YWxzLFxyXG5cdFx0fTtcclxuXHRcdGNvbnNvbGUubG9nKFwidGhpcy5kYXRhU291cmNlU2V0dGluZ3NcIiwgdGhpcy5kYXRhU291cmNlU2V0dGluZ3MpO1xyXG5cclxuXHRcdHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cdH1cclxuXHJcblx0Z2V0Q2FwdGlvbkJ5TmFtZShuYW1lU3RyaW5nKSB7XHJcblx0XHRpZiAoIW5hbWVTdHJpbmcpIHJldHVybiBcIlwiO1xyXG5cdFx0Y29uc3QgZmllbGQgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maW5kKChlbCkgPT4gZWwuY29sTmFtZSA9PT0gbmFtZVN0cmluZyk7XHJcblxyXG5cdFx0cmV0dXJuIGZpZWxkXHJcblx0XHRcdD8gZmllbGQubGFuZ1ZhbHVlIHx8XHJcblx0XHRcdFx0XHR0aGlzLnRyYW5zbGF0aW9uW2ZpZWxkICYmIGZpZWxkLmxhbmdDb2RlXSB8fFxyXG5cdFx0XHRcdFx0ZmllbGQubGFuZ0NvZGVcclxuXHRcdFx0OiBcIlwiO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGFmdGVyUG9wdWxhdGUoYXJnczogRW5naW5lUG9wdWxhdGVkRXZlbnRBcmdzKTogdm9pZCB7XHJcblx0XHR0aGlzLnRlbXBTdWJ0b3RhbHMgPSBbXTtcclxuXHRcdHRoaXMuZ3JhbmRUb3RhbHMgPSB7fTtcclxuXHRcdHRoaXMuc3ViVG90YWxzID0ge307XHJcblx0XHRsZXQgdGVtcHNob3dBcnJheSA9IFtdO1xyXG5cdFx0dGhpcy5jb25maWcueWF4aXMuc2VyaWVzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGl0ZW0uaGFzT3duUHJvcGVydHkoXCJzaG93U3ViVG90YWxzXCIpICYmXHJcblx0XHRcdFx0aXRlbS5oYXNPd25Qcm9wZXJ0eShcInNob3dHcmFuZFRvdGFsc1wiKVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHR0ZW1wc2hvd0FycmF5LnB1c2goe1xyXG5cdFx0XHRcdFx0bmFtZTogaXRlbS5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0Y2FsTWV0aG9kOiBpdGVtLmNhbE1ldGhvZCxcclxuXHRcdFx0XHRcdHNob3dTdWJUb3RhbHM6IGl0ZW0uc2hvd1N1YlRvdGFscyxcclxuXHRcdFx0XHRcdHNob3dHcmFuZFRvdGFsczogaXRlbS5zaG93R3JhbmRUb3RhbHMsXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoXCJzaG93R3JhbmRUb3RhbHNcIikpIHtcclxuXHRcdFx0XHRcdHRlbXBzaG93QXJyYXkucHVzaCh7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGl0ZW0uY29sTmFtZSxcclxuXHRcdFx0XHRcdFx0Y2FsTWV0aG9kOiBpdGVtLmNhbE1ldGhvZCxcclxuXHRcdFx0XHRcdFx0c2hvd0dyYW5kVG90YWxzOiBpdGVtLnNob3dHcmFuZFRvdGFscyxcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eShcInNob3dTdWJUb3RhbHNcIikpIHtcclxuXHRcdFx0XHRcdHRlbXBzaG93QXJyYXkucHVzaCh7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGl0ZW0uY29sTmFtZSxcclxuXHRcdFx0XHRcdFx0Y2FsTWV0aG9kOiBpdGVtLmNhbE1ldGhvZCxcclxuXHRcdFx0XHRcdFx0c2hvd1N1YlRvdGFsczogaXRlbS5zaG93U3ViVG90YWxzLFxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHRpZiAodGhpcy5maWVsZGxpc3RPYmogJiYgdGhpcy5waXZvdE9iaikge1xyXG5cdFx0XHR0aGlzLmNvbmZpZy5jb2x1bW5Hcm91cCA9IFtdO1xyXG5cdFx0XHR0aGlzLmNvbmZpZy54YXhpcy5ncm91cHMgPSBbXTtcclxuXHRcdFx0dGhpcy5jb25maWcueWF4aXMuc2VyaWVzID0gW107XHJcblx0XHRcdHRoaXMuY29uZmlnLmZpbHRlcnMgPSBbXTtcclxuXHRcdFx0dGhpcy5jb25maWcuZmlsdGVyU2V0dGluZ3MgPSBbXTtcclxuXHRcdFx0dGhpcy5jb25maWcuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MgPSBbXTtcclxuXHRcdFx0bGV0IGdyb3VwU2V0dGluZ3MgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmosXHJcblx0XHRcdFx0XCJncm91cFNldHRpbmdzXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0bGV0IGNvbHVtbnMgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmosXHJcblx0XHRcdFx0XCJjb2x1bW5zXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0bGV0IHJvd3MgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmosXHJcblx0XHRcdFx0XCJyb3dzXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0bGV0IGZpbHRlcnMgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmosXHJcblx0XHRcdFx0XCJmaWx0ZXJzXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0bGV0IGZpbHRlclNldHRpbmdzID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwiZmlsdGVyU2V0dGluZ3NcIlxyXG5cdFx0XHQpO1xyXG5cdFx0XHRsZXQgdmFsdWVzID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwidmFsdWVzXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0bGV0IHNvcnRTZXR0aW5ncyA9IHRoaXMuZ2V0RGF0YVNvdXJjZVNldHRpbmdzUHJvcChcclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iaixcclxuXHRcdFx0XHRcInNvcnRTZXR0aW5nc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCBjYWxjdWxhdGVkRmllbGRTZXR0aW5ncyA9IHRoaXMuZ2V0RGF0YVNvdXJjZVNldHRpbmdzUHJvcChcclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iaixcclxuXHRcdFx0XHRcImNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKGdyb3VwU2V0dGluZ3MubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0XHRcdHRoaXMuY29uZmlnLmNvbHVtbkdyb3VwLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBjb2x1bW4ubmFtZSxcclxuXHRcdFx0XHRcdFx0Y2FwdGlvbjpcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldENhcHRpb25CeU5hbWUoY29sdW1uLm5hbWUpIHx8XHJcblx0XHRcdFx0XHRcdFx0Y29sdW1uLmNhcHRpb24sXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly9JZiB0aGVyZSBpcyBhIGdyb3VwLCBmaXJzdCBmaWx0ZXIgdGhlIGNvbHVtbnMgb2YgdGhlIGdyb3VwIGZpZWxkLCBhbmQgdGhlbiBvbmx5IHNhdmUgdGhlIGxhc3Qgb25lXHJcblx0XHRcdFx0Zm9yIChsZXQgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0XHRcdGlmICghc3RhcnRzV2l0aChjb2x1bW4ubmFtZSwgZ3JvdXBTZXR0aW5nc1swXS5uYW1lICsgXCJfXCIpKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuY29uZmlnLmNvbHVtbkdyb3VwLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdG5hbWU6IGNvbHVtbi5uYW1lLFxyXG5cdFx0XHRcdFx0XHRcdGNhcHRpb246XHJcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW4ubmFtZSA9PT0gZ3JvdXBTZXR0aW5nc1swXS5uYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdD8gXCJcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuZ2V0Q2FwdGlvbkJ5TmFtZShjb2x1bW4ubmFtZSkgfHxcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICBjb2x1bW4uY2FwdGlvbixcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IHJvdyBvZiByb3dzKSB7XHJcblx0XHRcdFx0dGhpcy5jb25maWcueGF4aXMuZ3JvdXBzLnB1c2goe1xyXG5cdFx0XHRcdFx0bmFtZTogcm93Lm5hbWUsXHJcblx0XHRcdFx0XHRjYXB0aW9uOiB0aGlzLmdldENhcHRpb25CeU5hbWUocm93Lm5hbWUpIHx8IHJvdy5jYXB0aW9uLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XHJcblx0XHRcdFx0dGhpcy5jb25maWcuZmlsdGVycy5wdXNoKHtcclxuXHRcdFx0XHRcdG5hbWU6IGZpbHRlci5uYW1lLFxyXG5cdFx0XHRcdFx0Y2FwdGlvbjpcclxuXHRcdFx0XHRcdFx0dGhpcy5nZXRDYXB0aW9uQnlOYW1lKGZpbHRlci5uYW1lKSB8fCBmaWx0ZXIuY2FwdGlvbixcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAodGhpcy5maWx0ZXJTZXR0aW5ncyAmJiB0aGlzLmZpbHRlclNldHRpbmdzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5maWx0ZXJTZXR0aW5ncyA9IHRoaXMuZmlsdGVyU2V0dGluZ3M7XHJcblx0XHRcdFx0dGhpcy5jb25maWcuZmlsdGVyU2V0dGluZ3MgPSB0aGlzLmZpbHRlclNldHRpbmdzO1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmZpbHRlclNldHRpbmdzO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnLmZpbHRlclNldHRpbmdzID0gZmlsdGVyU2V0dGluZ3M7XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XHJcblx0XHRcdFx0bGV0IHNlcmllc0RhdGE7XHJcblx0XHRcdFx0bGV0IHRlbXBTaG93T2JqO1xyXG5cdFx0XHRcdGxldCBmaWx0ZXJUZW1wc2hvd0FycmF5ID0gW107XHJcblx0XHRcdFx0aWYgKHRlbXBzaG93QXJyYXkubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRmaWx0ZXJUZW1wc2hvd0FycmF5ID0gdGVtcHNob3dBcnJheS5maWx0ZXIoXHJcblx0XHRcdFx0XHRcdChpdGVtKSA9PlxyXG5cdFx0XHRcdFx0XHRcdGl0ZW0ubmFtZSA9PT0gdmFsdWUubmFtZSAmJlxyXG5cdFx0XHRcdFx0XHRcdGl0ZW0uY2FsTWV0aG9kID09PSB2YWx1ZS50eXBlXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0aWYgKGZpbHRlclRlbXBzaG93QXJyYXkubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdHRlbXBTaG93T2JqID0gZmlsdGVyVGVtcHNob3dBcnJheVswXTtcclxuXHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdHRlbXBTaG93T2JqLmhhc093blByb3BlcnR5KFwic2hvd1N1YlRvdGFsc1wiKSAmJlxyXG5cdFx0XHRcdFx0XHRcdHRlbXBTaG93T2JqLmhhc093blByb3BlcnR5KFwic2hvd0dyYW5kVG90YWxzXCIpXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdHNlcmllc0RhdGEgPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb2xOYW1lOiB2YWx1ZS5uYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y2FsTWV0aG9kOiB2YWx1ZS50eXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHZhbHVlLmNhcHRpb24sXHJcblx0XHRcdFx0XHRcdFx0XHRzaG93U3ViVG90YWxzOiB0ZW1wU2hvd09iai5zaG93U3ViVG90YWxzLFxyXG5cdFx0XHRcdFx0XHRcdFx0c2hvd0dyYW5kVG90YWxzOiB0ZW1wU2hvd09iai5zaG93R3JhbmRUb3RhbHMsXHJcblx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAodGVtcFNob3dPYmouaGFzT3duUHJvcGVydHkoXCJzaG93R3JhbmRUb3RhbHNcIikpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHNlcmllc0RhdGEgPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbE5hbWU6IHZhbHVlLm5hbWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNhbE1ldGhvZDogdmFsdWUudHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHZhbHVlLmNhcHRpb24sXHJcblx0XHRcdFx0XHRcdFx0XHRcdHNob3dHcmFuZFRvdGFsczpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0ZW1wU2hvd09iai5zaG93R3JhbmRUb3RhbHMsXHJcblx0XHRcdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRpZiAodGVtcFNob3dPYmouaGFzT3duUHJvcGVydHkoXCJzaG93U3ViVG90YWxzXCIpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRzZXJpZXNEYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xOYW1lOiB2YWx1ZS5uYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYWxNZXRob2Q6IHZhbHVlLnR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB2YWx1ZS5jYXB0aW9uLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93U3ViVG90YWxzOiB0ZW1wU2hvd09iai5zaG93U3ViVG90YWxzLFxyXG5cdFx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKCFzZXJpZXNEYXRhKSB7XHJcblx0XHRcdFx0XHRzZXJpZXNEYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRjb2xOYW1lOiB2YWx1ZS5uYW1lLFxyXG5cdFx0XHRcdFx0XHR0aXRsZTogdmFsdWUuY2FwdGlvbixcclxuXHRcdFx0XHRcdFx0Y2FsTWV0aG9kOiB2YWx1ZS50eXBlLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5jb25maWcueWF4aXMuc2VyaWVzLnB1c2goc2VyaWVzRGF0YSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yIChsZXQgY2FsY3VsYXRlIG9mIGNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzKSB7XHJcblx0XHRcdFx0Y29uc3QgY2FsY3VsYXRlRGF0YSA9IHtcclxuXHRcdFx0XHRcdG5hbWU6IGNhbGN1bGF0ZS5uYW1lLFxyXG5cdFx0XHRcdFx0Zm9ybXVsYTogY2FsY3VsYXRlLmZvcm11bGEsXHJcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6XHJcblx0XHRcdFx0XHRcdGNhbGN1bGF0ZS5mb3JtYXRTdHJpbmcgPT09IFwiXCJcclxuXHRcdFx0XHRcdFx0XHQ/IFwiTjJcIlxyXG5cdFx0XHRcdFx0XHRcdDogY2FsY3VsYXRlLmZvcm1hdFN0cmluZyxcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzLnB1c2goY2FsY3VsYXRlRGF0YSk7XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5jb25maWcuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkcyA9IHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkcztcclxuXHRcdFx0dGhpcy5jb25maWcuc29ydFNldHRpbmdzID0gc29ydFNldHRpbmdzO1xyXG5cdFx0XHR0aGlzLmNvbmZpZy5ncm91cFNldHRpbmdzID0gZ3JvdXBTZXR0aW5ncztcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoudXBkYXRlVmlldyh0aGlzLnBpdm90T2JqKTtcclxuXHRcdH1cclxuXHRcdHRoaXMucG9ydGxldC5jb25maWcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcblx0XHQvL3JlbW92ZSB0aGUgc29ydFxyXG5cdFx0aWYgKHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNvcnRTZXR0aW5ncy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdHRoaXMucHJldmlvdXNTb3J0ID0gdGhpcy5maWVsZGxpc3RPYmoubGFzdFNvcnRJbmZvO1xyXG5cdFx0XHQodGhpcy5maWVsZGxpc3RPYmogYXMgYW55KS5sYXN0U29ydEluZm8gPSBbXTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhZnRlckVuZ2luZVBvcHVsYXRlKGFyZ3M6IGFueSkge1xyXG5cdFx0aWYgKCFCcm93c2VyLmlzRGV2aWNlICYmIHRoaXMuZmllbGRsaXN0T2JqICYmIHRoaXMucGl2b3RPYmopIHtcclxuXHRcdFx0dGhpcy5jb25maWcuZ3JvdXBTZXR0aW5ncyA9IHRoaXMuZ2V0RGF0YVNvdXJjZVNldHRpbmdzUHJvcChcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLFxyXG5cdFx0XHRcdFwiZ3JvdXBTZXR0aW5nc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdHRoaXMucG9ydGxldC5jb25maWcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcblx0XHRcdGlmICh0aGlzLmZpZWxkbGlzdE9iaikgdGhpcy5maWVsZGxpc3RPYmoudXBkYXRlKHRoaXMucGl2b3RPYmopO1xyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmdyaWQucXVlcnlDZWxsSW5mbyA9IHRoaXMucXVlcnlDZWxsLmJpbmQodGhpcyk7XHJcblx0XHRcdHRoaXMucGl2b3RPYmouZ3JpZC5oZWFkZXJDZWxsSW5mbyA9IHRoaXMuaGVhZGVyQ2VsbC5iaW5kKHRoaXMpO1xyXG5cdFx0XHQvLyBTTVAyLTM5Mjkgcm9sbGJhY2tcclxuXHRcdFx0Ly8gaWYgKCF0aGlzLmlzQXBwbHlJUlIpXHJcblx0XHRcdC8vIFx0dGhpcy5nZXRDYWxjdWxhdGlvblJlc3VsdEJ5RGFzaGJvYXJkRGF0YVRhYmxlSWQoKTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLlBpdm90X0RhdGEgJiYgdGhpcy5QaXZvdF9EYXRhLmxlbmd0aCkge1xyXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHR0aGlzLmVuZ2luZVBvcHVsYXRlZChhcmdzKTtcclxuXHRcdFx0fSwgMTUwMCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3Aob2JqLCBrZXkpIHtcclxuXHRcdGxldCBwcm9wID0gbnVsbDtcclxuXHRcdGlmIChvYmogJiYgb2JqLmRhdGFTb3VyY2VTZXR0aW5ncykge1xyXG5cdFx0XHRwcm9wID0gb2JqLmRhdGFTb3VyY2VTZXR0aW5nc1trZXldO1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb3ApID09PSBcIltvYmplY3QgQXJyYXldXCIgJiZcclxuXHRcdFx0XHRwcm9wLmxlbmd0aCA+IDBcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0cHJvcCA9IHByb3AubWFwKChpdGVtKSA9PiBpdGVtLnByb3BlcnRpZXMgfHwgaXRlbSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBwcm9wO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGVuZ2luZVBvcHVsYXRpbmcoYXJncykge1xyXG5cdFx0dGhpcy5ncmFuZFRvdGFscyA9IHt9O1xyXG5cdFx0dGhpcy5zdWJUb3RhbHMgPSB7fTtcclxuXHRcdHRoaXMuYWxsRGF0YVZhbHVlID0gW107XHJcblx0XHQvLyBpZiAoYXJncy5kYXRhU291cmNlU2V0dGluZ3Muc29ydFNldHRpbmdzLmxlbmd0aCkge1xyXG5cdFx0Ly8gXHRmb3IgKFxyXG5cdFx0Ly8gXHRcdGxldCBpID0gMDtcclxuXHRcdC8vIFx0XHRpIDwgYXJncy5kYXRhU291cmNlU2V0dGluZ3Muc29ydFNldHRpbmdzLmxlbmd0aDtcclxuXHRcdC8vIFx0XHRpKytcclxuXHRcdC8vIFx0KSB7XHJcblx0XHQvLyBcdFx0aWYgKFxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoubGFzdFNvcnRJbmZvICYmXHJcblx0XHQvLyBcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5sYXN0U29ydEluZm8ubmFtZSA9PT1cclxuXHRcdC8vIFx0XHRcdFx0YXJncy5kYXRhU291cmNlU2V0dGluZ3Muc29ydFNldHRpbmdzW2ldLm5hbWUgJiZcclxuXHRcdC8vIFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmxhc3RTb3J0SW5mby5vcmRlciA9PT0gXCJBc2NlbmRpbmdcIiAmJlxyXG5cdFx0Ly8gXHRcdFx0IShcclxuXHRcdC8vIFx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmoubGFzdFNvcnRJbmZvLm5hbWUgPT09XHJcblx0XHQvLyBcdFx0XHRcdFx0dGhpcy5wcmV2aW91c1NvcnQubmFtZSAmJlxyXG5cdFx0Ly8gXHRcdFx0XHR0aGlzLnByZXZpb3VzU29ydC5vcmRlciA9PT0gXCJOb25lXCJcclxuXHRcdC8vIFx0XHRcdClcclxuXHRcdC8vIFx0XHQpIHtcclxuXHRcdC8vIFx0XHRcdGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLnNvcnRTZXR0aW5nc1tpXS5vcmRlciA9IFwiTm9uZVwiO1xyXG5cdFx0Ly8gXHRcdH0gZWxzZSBpZiAoXHJcblx0XHQvLyBcdFx0XHR0aGlzLnByZXZpb3VzU29ydCAmJlxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoubGFzdFNvcnRJbmZvICYmXHJcblx0XHQvLyBcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5sYXN0U29ydEluZm8ubmFtZSA9PT1cclxuXHRcdC8vIFx0XHRcdFx0dGhpcy5wcmV2aW91c1NvcnQubmFtZSAmJlxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5wcmV2aW91c1NvcnQub3JkZXIgPT09IFwiQXNjZW5kaW5nXCJcclxuXHRcdC8vIFx0XHQpIHtcclxuXHRcdC8vIFx0XHRcdGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLnNvcnRTZXR0aW5nc1tpXS5vcmRlciA9IFwiQXNjZW5kaW5nXCI7XHJcblx0XHQvLyBcdFx0fVxyXG5cdFx0Ly8gXHR9XHJcblx0XHQvLyB9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgY2VsbENsaWNrKGFyZ3MpIHtcclxuXHRcdGlmIChhcmdzLmN1cnJlbnRDZWxsLmNsYXNzTGlzdC5jb250YWlucyhcImUtaGVhZGVyY2VsbFwiKSkge1xyXG5cdFx0XHR0aGlzLmZsYWcgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0Ly8g5riF6Zmk5o6S5bqPXHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlU29ydFNldHRpbmdzLnNvcnRPcmRlciAmJlxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZVNvcnRTZXR0aW5ncy5oZWFkZXJUZXh0ICYmXHJcblx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlU29ydFNldHRpbmdzLnNvcnRPcmRlciA9PT1cclxuXHRcdFx0XHRcIkRlc2NlbmRpbmdcIiAmJlxyXG5cdFx0XHRhcmdzLmRhdGEudmFsdWVTb3J0ICYmXHJcblx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlU29ydFNldHRpbmdzLmhlYWRlclRleHQgPT09XHJcblx0XHRcdFx0YXJncy5kYXRhLnZhbHVlU29ydC5sZXZlbE5hbWVcclxuXHRcdCkge1xyXG5cdFx0XHR0aGlzLnBpdm90T2JqLnNldFByb3BlcnRpZXMoXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0ZGF0YVNvdXJjZVNldHRpbmdzOiB7XHJcblx0XHRcdFx0XHRcdHZhbHVlU29ydFNldHRpbmdzOiB7XHJcblx0XHRcdFx0XHRcdFx0c29ydE9yZGVyOiBcIkRlc2NlbmRpbmdcIixcclxuXHRcdFx0XHRcdFx0XHRoZWFkZXJUZXh0OiBcIlwiLFxyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHRydWVcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKHRoaXMucGl2b3RPYmopIHRoaXMucGl2b3RPYmoucmVmcmVzaERhdGEoKTtcclxuXHRcdFx0dGhpcy5mbGFnID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuY29uZmlnLnZhbHVlU29ydFNldHRpbmdzID0ge307XHJcblx0XHRcdHRoaXMucG9ydGxldC5jb25maWcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHF1ZXJ5Q2VsbChhcmdzOiBhbnkpOiB2b2lkIHtcclxuXHRcdCh0aGlzLnBpdm90T2JqLnJlbmRlck1vZHVsZSBhcyBhbnkpLnJvd0NlbGxCb3VuZEV2ZW50KGFyZ3MpO1xyXG5cdFx0bGV0IHJvd0luZGV4ID0gTnVtYmVyKGFyZ3MuY2VsbC5nZXRBdHRyaWJ1dGUoXCJpbmRleFwiKSk7XHJcblx0XHQvLyDmlrDniYjmnKwyNi545LitIGFyaWEtY29saW5kZXgg5Lya5q+U5pen54mI5pysdjIwLngg5aSaMVxyXG5cdFx0bGV0IGNvbEluZGV4ID0gcGFyc2VJbnQoYXJncy5jZWxsLmdldEF0dHJpYnV0ZShcImFyaWEtY29saW5kZXhcIikpIC0gMTtcclxuXHRcdGlmIChcclxuXHRcdFx0IXRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbmRpdGlvbmFsRm9ybWF0U2V0dGluZ3MubGVuZ3RoXHJcblx0XHQpIHtcclxuXHRcdFx0aWYgKGFyZ3MuZGF0YSAmJiBhcmdzLmRhdGFbMF0uZm9ybWF0dGVkVGV4dCA9PT0gXCJHcmFuZCBUb3RhbFwiKSB7XHJcblx0XHRcdFx0YXJncy5jZWxsLmNsYXNzTGlzdC5hZGQoXCJncmFuZC1jbGFzc1wiKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLmNlbGwuY2xhc3NMaXN0LmFkZChcclxuXHRcdFx0XHRcdHJvd0luZGV4ICUgMiA/IFwib2RkLWNsYXNzXCIgOiBcImV2ZW4tY2xhc3NcIlxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGxldCBtZWFzdXJlQXJyID1cclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb25kaXRpb25hbEZvcm1hdFNldHRpbmdzLm1hcChcclxuXHRcdFx0XHRcdChvYmopID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIG9iai5tZWFzdXJlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRtZWFzdXJlQXJyLmluY2x1ZGVzKGFyZ3MuZGF0YVtjb2xJbmRleF0uYWN0dWFsVGV4dCkgJiZcclxuXHRcdFx0XHRhcmdzLmRhdGFbY29sSW5kZXhdLnN0eWxlXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGFyZ3MuY2VsbC5zdHlsZS5jc3NUZXh0ICs9IGBiYWNrZ3JvdW5kLWNvbG9yOiAke2FyZ3MuZGF0YVtjb2xJbmRleF0uc3R5bGUuYmFja2dyb3VuZENvbG9yfSAhaW1wb3J0YW50YDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoYXJncy5kYXRhICYmIGFyZ3MuZGF0YVswXS5mb3JtYXR0ZWRUZXh0ID09PSBcIkdyYW5kIFRvdGFsXCIpXHJcblx0XHRcdFx0YXJncy5jZWxsLmNsYXNzTGlzdC5hZGQoXCJlLWN1c3RvbWNsYXNzXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChhcmdzLmRhdGEgJiYgYXJncy5kYXRhWzBdLmZvcm1hdHRlZFRleHQgPT09IFwiR3JhbmQgVG90YWxcIikge1xyXG5cdFx0XHRhcmdzLmNlbGwuY2xhc3NMaXN0LmFkZChcImdyYW5kLWNsYXNzXCIpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKHJvd0luZGV4ICUgMikge1xyXG5cdFx0XHRcdGFyZ3MuY2VsbC5jbGFzc0xpc3QuYWRkKFwib2RkLWNsYXNzXCIpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFyZ3MuY2VsbC5jbGFzc0xpc3QuYWRkKFwiZXZlbi1jbGFzc1wiKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vZ2V0IHNvcnRpbmcgZGF0YVxyXG5cdFx0aWYgKHRoaXMuZmxhZykge1xyXG5cdFx0XHR0aGlzLmZsYWcgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5jb25maWcudmFsdWVTb3J0U2V0dGluZ3MgPVxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlU29ydFNldHRpbmdzW1xyXG5cdFx0XHRcdFx0XCJwcm9wZXJ0aWVzXCJcclxuXHRcdFx0XHRdO1xyXG5cdFx0XHR0aGlzLnBvcnRsZXQuY29uZmlnID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG5cdFx0fVxyXG5cdFx0Ly9jdXN0b21pemUgdGhlIGhlYWRlciB0ZXh0XHJcblx0XHRpZiAodGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cy5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGFyZ3MuZGF0YSAmJlxyXG5cdFx0XHRcdGFyZ3MuZGF0YVtjb2xJbmRleF0gJiZcclxuXHRcdFx0XHRhcmdzLmRhdGFbY29sSW5kZXhdLmF4aXMgPT09IFwicm93XCJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0YXJncy5jZWxsLnF1ZXJ5U2VsZWN0b3IoXCIuZS1jZWxsdmFsdWVcIikuaW5uZXJUZXh0ID1cclxuXHRcdFx0XHRcdGFyZ3MuZGF0YVtjb2xJbmRleF0uZm9ybWF0dGVkVGV4dDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFNNUDItMjkxMiBzdWJ0b3RhbOWtl+S9k+WKoOeyl1xyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzLmxlbmd0aCAmJlxyXG5cdFx0XHRhcmdzLmRhdGFbY29sSW5kZXhdICYmXHJcblx0XHRcdGFyZ3MuZGF0YVswXS5sZXZlbCAhPT1cclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzLmxlbmd0aCAtIDEgJiZcclxuXHRcdFx0YXJncy5kYXRhW2NvbEluZGV4XS5yb3dIZWFkZXJzICE9PSBcIlwiICYmXHJcblx0XHRcdGFyZ3MuZGF0YVtjb2xJbmRleF0uYXhpcyA9PSBcInZhbHVlXCJcclxuXHRcdCkge1xyXG5cdFx0XHRhcmdzLmNlbGwuY2xhc3NMaXN0LmFkZChcImUtY3VzdG9tY2xhc3NcIik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGhlYWRlckNlbGwoYXJnczogYW55KTogdm9pZCB7XHJcblx0XHQodGhpcy5waXZvdE9iai5yZW5kZXJNb2R1bGUgYXMgYW55KS5jb2x1bW5DZWxsQm91bmRFdmVudChhcmdzKTtcclxuXHRcdGlmICh0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRsZXQgbm9kZSA9IGFyZ3Mubm9kZS5xdWVyeVNlbGVjdG9yKFxyXG5cdFx0XHRcdFwiLmUtaGVhZGVyY2VsbGRpdiAuZS1oZWFkZXJ0ZXh0XCJcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKG5vZGUpIG5vZGUuaW5uZXJUZXh0ID0gYXJncy5jZWxsLmNvbHVtbi5oZWFkZXJUZXh0O1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgdGV4dEFsaWduID0gYXJncy5jZWxsLmNvbHVtbi50ZXh0QWxpZ247XHJcblx0XHRhcmdzLmNlbGwuY29sdW1uLmhlYWRlclRleHRBbGlnbiA9IHRleHRBbGlnbjtcclxuXHRcdGFyZ3Mubm9kZS5zdHlsZS50ZXh0QWxpZ24gPSB0ZXh0QWxpZ24gPT09IFwiUmlnaHRcIiA/IFwicmlnaHRcIiA6IFwibGVmdFwiOyAvLyBBbGlnbiByaWdodCBmb3IgbnVtZXJpYyBjb2x1bW5zXHJcblx0XHRpZiAodGV4dEFsaWduID09PSBcIlJpZ2h0XCIpIHtcclxuXHRcdFx0YXJncy5ub2RlLmNsYXNzTGlzdC5hZGQoXCJoZWFkZXItYWxpZ24tcmlnaHRcIik7XHJcblx0XHR9XHJcblx0XHR0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBkYXRhQm91bmQoZSkge1xyXG5cdFx0aWYgKHRoaXMuaXNJbml0KSB7XHJcblx0XHRcdHRoaXMuaXNJbml0ID0gZmFsc2U7XHJcblx0XHR9XHJcblx0XHR0aGlzLmdyYW5kVG90YWxzID0ge307XHJcblx0XHR0aGlzLnN1YlRvdGFscyA9IHt9O1xyXG5cdFx0aWYgKHRoaXMucGl2b3RPYmouZ3JpZCkge1xyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmdyaWQucmVzaXplU3RvcCA9IHRoaXMucmVzaXplU3RvcC5iaW5kKHRoaXMpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMucGl2b3RPYmopIHtcclxuXHRcdFx0dmFyIGluZGV4ID0gW107XHJcblx0XHRcdC8vIEdldCB0aGUgZW1wdHkgcm93IGhlYWRlcnMgaGVyZS5cclxuXHRcdFx0dmFyIGVtcHR5Um93SGVhZGVyOiBhbnkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG5cdFx0XHRcdCd0ZFthcmlhLWxhYmVsPVwiIGNvbHVtbiBoZWFkZXIgXCJdJ1xyXG5cdFx0XHQpO1xyXG5cdFx0XHRmb3IgKHZhciBlbGUgb2YgZW1wdHlSb3dIZWFkZXIpIHtcclxuXHRcdFx0XHRpZiAoZWxlKSB7XHJcblx0XHRcdFx0XHRpbmRleC5wdXNoKGVsZS5nZXRBdHRyaWJ1dGUoXCJpbmRleFwiKSk7XHJcblx0XHRcdFx0XHQvLyBSZW1vdmUgYWxsIHRoZSBlbXB0eSByb3cgaGVhZGVycyBoZXJlLlxyXG5cdFx0XHRcdFx0ZWxlLmNsb3Nlc3QoXCJ0clwiKS5yZW1vdmUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBpbmRleC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdC8vIEdldCB0aGUgZW1wdHkgdmFsdWVzIGhlcmUuXHJcblx0XHRcdFx0dmFyIGVtcHR5VmFsdWVzID0gdGhpcy5waXZvdE9iai5lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXHJcblx0XHRcdFx0XHRgdGRbaW5kZXg9XCIke2luZGV4W2ldfVwiXWBcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGlmIChlbXB0eVZhbHVlc1swXSkge1xyXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIGFsbCB0aGUgZW1wdHkgdmFsdWUgcm93cyBoZXJlLlxyXG5cdFx0XHRcdFx0ZW1wdHlWYWx1ZXNbMF0uY2xvc2VzdChcInRyXCIpLnJlbW92ZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLmZpZWxkbGlzdE9iaiAmJlxyXG5cdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5waXZvdEJ1dHRvbk1vZHVsZSAmJlxyXG5cdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5waXZvdEJ1dHRvbk1vZHVsZS5tZW51T3B0aW9uXHJcblx0XHQpIHtcclxuXHRcdFx0KFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLnBpdm90QnV0dG9uTW9kdWxlLm1lbnVPcHRpb24gYXMgYW55XHJcblx0XHRcdCkuc3RyaW5nQWdncmVnYXRlVHlwZXMgPSBbXHJcblx0XHRcdFx0XCJDb3VudFwiLFxyXG5cdFx0XHRcdFwiRGlzdGluY3RDb3VudFwiLFxyXG5cdFx0XHRcdFwiRmlyc3RcIixcclxuXHRcdFx0XHRcIkxhc3RcIixcclxuXHRcdFx0XTtcclxuXHRcdH1cclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5waXZvdE9iai5waXZvdEJ1dHRvbk1vZHVsZSAmJlxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLnBpdm90QnV0dG9uTW9kdWxlLm1lbnVPcHRpb25cclxuXHRcdCkge1xyXG5cdFx0XHQoXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5waXZvdEJ1dHRvbk1vZHVsZS5tZW51T3B0aW9uIGFzIGFueVxyXG5cdFx0XHQpLnN0cmluZ0FnZ3JlZ2F0ZVR5cGVzID0gW1xyXG5cdFx0XHRcdFwiQ291bnRcIixcclxuXHRcdFx0XHRcIkRpc3RpbmN0Q291bnRcIixcclxuXHRcdFx0XHRcIkZpcnN0XCIsXHJcblx0XHRcdFx0XCJMYXN0XCIsXHJcblx0XHRcdF07XHJcblx0XHR9XHJcblx0XHRsZXQgYWxsU3VtbWFyeVR5cGUgPSBBTExfQUdHUkVHQVRFX1RZUEVTIGFzIGFueTtcclxuXHRcdHRoaXMucGl2b3RPYmouZ2V0QWxsU3VtbWFyeVR5cGUgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHJldHVybiBhbGxTdW1tYXJ5VHlwZTtcclxuXHRcdH07XHJcblx0XHRpZiAodGhpcy5maWVsZGxpc3RPYmopIHtcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmouYWdncmVnYXRlVHlwZXMgPSBhbGxTdW1tYXJ5VHlwZTtcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmouZ2V0QWxsU3VtbWFyeVR5cGUgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0cmV0dXJuIGFsbFN1bW1hcnlUeXBlO1xyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5zZXRWYWx1ZUl0ZW1EYXRhKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNldFZhbHVlSXRlbURhdGEoKSB7XHJcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0Y29uc3QgZmllbGREb20gPSB0aGlzLmZpZWxkbGlzdE9iai5maWVsZExpc3RTcGlubmVyRWxlbWVudDtcclxuXHRcdFx0dGhpcy5kYXRhU291cmNlU2V0dGluZ3MudmFsdWVzLmZvckVhY2goKHZhbHVlOiBhbnkpID0+IHtcclxuXHRcdFx0XHRpZiAodmFsdWUudHlwZSAhPT0gXCJGaXJzdFwiICYmIHZhbHVlLnR5cGUgIT09IFwiTGFzdFwiKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IHZhbHVlc0RvbSA9IGZpZWxkRG9tLnF1ZXJ5U2VsZWN0b3IoXHJcblx0XHRcdFx0XHRgLmUtdmFsdWVzIC4ke3ZhbHVlLm5hbWV9IC5lLXB2dC1idG4tY29udGVudGBcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdHZhbHVlc0RvbS5pbm5lckhUTUwgIT09IGAke3ZhbHVlLnR5cGV9IG9mICR7dmFsdWUuY2FwdGlvbn1gXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHR2YWx1ZXNEb20uaW5uZXJIVE1MID0gYCR7dmFsdWUudHlwZX0gb2YgJHt2YWx1ZS5jYXB0aW9ufWA7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjYWxjdWxhdGVkQ2VsbFNldHMoYXJncywgY3VyRmllbGRzKSB7XHJcblx0XHRsZXQgbWF0Y2hGaWVsZHMgPSBjdXJGaWVsZHNbXCJtYXRjaEZpZWxkc1wiXTtcclxuXHRcdGxldCBmb3JtdWxhID0gY3VyRmllbGRzW1wiZm9ybXVsYVwiXTtcclxuXHRcdGxldCB2YWx1ZSA9IDA7XHJcblx0XHRsZXQgcm93cyA9IHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3M7XHJcblx0XHRsZXQgaW52YWxpZFR5cGVzID0gW1wic3RyaW5nXCIsIFwibnZhcmNoYXJcIiwgXCJkYXRlXCIsIFwiZGF0ZXRpbWVcIl07XHJcblx0XHRsZXQgaXNJbnZhbGlkID0gbWF0Y2hGaWVsZHMuc29tZSgoZikgPT5cclxuXHRcdFx0aW52YWxpZFR5cGVzLmluY2x1ZGVzKFxyXG5cdFx0XHRcdHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcigoZWwpID0+IGVsLmNvbE5hbWUgPT09IGYubWF0Y2hXb3JkKVswXVtcclxuXHRcdFx0XHRcdFwiZGF0YVR5cGVcIlxyXG5cdFx0XHRcdF1cclxuXHRcdFx0KVxyXG5cdFx0KTtcclxuXHRcdGxldCBjdXJyZW50cm93Q2VsbFR5cGUgPSBhcmdzLnJvd0NlbGxUeXBlO1xyXG5cdFx0aWYgKGlzSW52YWxpZCkgcmV0dXJuIFwiLVwiO1xyXG5cdFx0aWYgKFxyXG5cdFx0XHRhcmdzLnJvd0NlbGxUeXBlID09PSBcInN1YlRvdGFsXCIgfHxcclxuXHRcdFx0YXJncy5yb3dDZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCJcclxuXHRcdCkge1xyXG5cdFx0XHRsZXQgY2hpbGRIZWFkZXJzID0gW107XHJcblx0XHRcdGxldCBzdW0gPSAwO1xyXG5cdFx0XHRsZXQgY2xvbmVDZWxsU2V0cyA9IGNsb25lRGVlcChhcmdzLmNlbGxTZXRzKTtcclxuXHRcdFx0bGV0IGdyb3VwTmFtZUFycmF5cyA9IFtdO1xyXG5cdFx0XHRmb3IgKGxldCBpbmRleCA9IGFyZ3Mucm93LmxldmVsOyBpbmRleCA8IHJvd3MubGVuZ3RoOyBpbmRleCsrKSB7XHJcblx0XHRcdFx0Z3JvdXBOYW1lQXJyYXlzLnB1c2gocm93c1tpbmRleF0ubmFtZSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjbG9uZUNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0bGV0IHZhbHVlcyA9IFtdO1xyXG5cdFx0XHRcdGxldCBoZWFkZXIgPSBncm91cE5hbWVBcnJheXNcclxuXHRcdFx0XHRcdC5tYXAoKG5hbWUpID0+IHtcclxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goY2xvbmVDZWxsU2V0c1tpXVtuYW1lXSk7XHJcblx0XHRcdFx0XHRcdHJldHVybiBjbG9uZUNlbGxTZXRzW2ldW25hbWVdO1xyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdC5qb2luKFwiLVwiKTtcclxuXHRcdFx0XHRpZiAoIShjaGlsZEhlYWRlcnMgYXMgYW55KS5pbmNsdWRlcyhoZWFkZXIpKSB7XHJcblx0XHRcdFx0XHRjaGlsZEhlYWRlcnMucHVzaChoZWFkZXIpO1xyXG5cdFx0XHRcdFx0bGV0IGZpbHRlck9iajogYW55ID0ge307XHJcblx0XHRcdFx0XHRncm91cE5hbWVBcnJheXMubWFwKFxyXG5cdFx0XHRcdFx0XHQobmFtZSwgaSkgPT4gKGZpbHRlck9ialtuYW1lXSA9IHZhbHVlc1tpXSlcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRhcmdzLmNlbGxTZXRzID0gX2ZpbHRlcihjbG9uZUNlbGxTZXRzLCBmaWx0ZXJPYmopO1xyXG5cdFx0XHRcdFx0YXJncy5yb3dDZWxsVHlwZSA9IFwidmFsdWVcIjtcclxuXHRcdFx0XHRcdHN1bSArPSB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXMoYXJncywgbWF0Y2hGaWVsZHMsIGZvcm11bGEpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRhcmdzLnJvd0NlbGxUeXBlID0gY3VycmVudHJvd0NlbGxUeXBlO1xyXG5cclxuXHRcdFx0Ly8g5pqC5a2Y5b2T5YmNU3ViVG90YWzvvIwg55So5LqO5pS257yp5pe26K+75Y+WXHJcblx0XHRcdGxldCBwcmVmaXhIZWFkZXIgPSB0aGlzLmdldENhbGNIZWFkZXIoYXJncywgZm9ybXVsYSk7XHJcblx0XHRcdHRoaXMudXBkYXRlVGVtcFN1YnRvdGFscyhwcmVmaXhIZWFkZXIsIHN1bSk7XHJcblx0XHRcdHJldHVybiBzdW07XHJcblx0XHR9IGVsc2UgaWYgKGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwidmFsdWVcIikge1xyXG5cdFx0XHRpZiAoYXJncy5yb3cuaGFzQ2hpbGQpIHtcclxuXHRcdFx0XHQvLyBjb2xsYXBzZSDor7vlj5ZTdWJUb3RhbFxyXG5cdFx0XHRcdGxldCBoZWFkZXIgPSB0aGlzLmdldENhbGNIZWFkZXIoYXJncywgZm9ybXVsYSk7XHJcblx0XHRcdFx0bGV0IGluZGV4ID0gdGhpcy50ZW1wU3VidG90YWxzLmZpbmRJbmRleChcclxuXHRcdFx0XHRcdChpdGVtKSA9PiBpdGVtLnJvd05hbWUgPT09IGhlYWRlclxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0aWYgKGluZGV4ID4gLTEpIHtcclxuXHRcdFx0XHRcdHZhbHVlID0gdGhpcy50ZW1wU3VidG90YWxzW2luZGV4XS5yb3dWYWx1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gZXhwYW5kXHJcblx0XHRcdFx0dmFsdWUgPSB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXMoYXJncywgbWF0Y2hGaWVsZHMsIGZvcm11bGEpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRhY3Rpb25GYWlsdXJlKGFyZ3M6IFBpdm90QWN0aW9uRmFpbHVyZUV2ZW50QXJncyk6IHZvaWQge1xyXG5cdFx0aWYgKGFyZ3MuYWN0aW9uTmFtZSA9PSBcIkRyaWxsIGRvd25cIiB8fCBhcmdzLmFjdGlvbk5hbWUgPT0gXCJEcmlsbCB1cFwiKSB7XHJcblx0XHRcdC8vIFRyaWdnZXJzIHdoZW4gdGhlIGN1cnJlbnQgVUkgYWN0aW9uIGZhaWxzIHRvIGFjaGlldmUgdGhlIGRlc2lyZWQgcmVzdWx0LlxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRDYWxjSGVhZGVyKGFyZ3MsIGZvcm11bGE/KSB7XHJcblx0XHRsZXQgaGVhZGVyID0gXCJcIjtcclxuXHRcdGxldCByb3dzID0gdGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cztcclxuXHRcdGxldCBncm91cE5hbWVBcnJheXMgPSBbXTtcclxuXHRcdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcmdzLnJvdy5sZXZlbDsgaW5kZXgrKykge1xyXG5cdFx0XHRncm91cE5hbWVBcnJheXMucHVzaChyb3dzW2luZGV4XS5uYW1lKTtcclxuXHRcdH1cclxuXHRcdGhlYWRlciA9IGdyb3VwTmFtZUFycmF5cy5sZW5ndGhcclxuXHRcdFx0PyBncm91cE5hbWVBcnJheXNcclxuXHRcdFx0XHRcdC5tYXAoKG5hbWUpID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGFyZ3MuY2VsbFNldHNbMF1bbmFtZV07XHJcblx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0LmpvaW4oXCItXCIpICtcclxuXHRcdFx0ICBcIi1cIiArXHJcblx0XHRcdCAgYXJncy5yb3cuYWN0dWFsVGV4dFxyXG5cdFx0XHQ6IGFyZ3Mucm93LmFjdHVhbFRleHQ7XHJcblx0XHRpZiAoZm9ybXVsYSkgaGVhZGVyICs9IFwiX19fXCIgKyBmb3JtdWxhO1xyXG5cdFx0cmV0dXJuIGhlYWRlcjtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgdXBkYXRlVGVtcFN1YnRvdGFscyhyb3dOYW1lLCByb3dWYWx1ZSkge1xyXG5cdFx0bGV0IGluZGV4ID0gdGhpcy50ZW1wU3VidG90YWxzLmZpbmRJbmRleChcclxuXHRcdFx0KGl0ZW0pID0+IGl0ZW0ucm93TmFtZSA9PT0gcm93TmFtZVxyXG5cdFx0KTtcclxuXHRcdGxldCB0ZW1wOiBhbnkgPSB7fTtcclxuXHRcdHRlbXAucm93TmFtZSA9IHJvd05hbWU7XHJcblx0XHR0ZW1wLnJvd1ZhbHVlID0gcm93VmFsdWU7XHJcblx0XHRpZiAoaW5kZXggPiAtMSkge1xyXG5cdFx0XHR0aGlzLnRlbXBTdWJ0b3RhbHMuc3BsaWNlKGluZGV4LCAxLCB0ZW1wKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMudGVtcFN1YnRvdGFscy5wdXNoKHRlbXApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjYWxjdWxhdGVkVmFsdWVzKGFyZ3MsIG1hdGNoRmllbGRzLCBmb3JtdWxhKSB7XHJcblx0XHRpZiAobWF0Y2hGaWVsZHMubGVuZ3RoKSB7XHJcblx0XHRcdGxldCBjYWxjdWxlZE1hdGNoRmllbGRzID0gbWF0Y2hGaWVsZHMubWFwKChmKSA9PiB7XHJcblx0XHRcdFx0c3dpdGNoIChmLm1hdGNoTWV0aG9kKSB7XHJcblx0XHRcdFx0XHRjYXNlIFwiRmlyc3RcIjpcclxuXHRcdFx0XHRcdGNhc2UgXCJMYXN0XCI6XHJcblx0XHRcdFx0XHRcdGYucmVwbGFjZVZhbHVlID0gdGhpcy5jYWxjdWxhdGVkRmlzdExhc3QoXHJcblx0XHRcdFx0XHRcdFx0YXJncyxcclxuXHRcdFx0XHRcdFx0XHRmLm1hdGNoTWV0aG9kLFxyXG5cdFx0XHRcdFx0XHRcdGYubWF0Y2hXb3JkXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0Y2FzZSBcIk1heFwiOlxyXG5cdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSA9IG1heEJ5KGFyZ3MuY2VsbFNldHMsIChvKSA9PlxyXG5cdFx0XHRcdFx0XHRcdE51bWJlcihvW2YubWF0Y2hXb3JkXSlcclxuXHRcdFx0XHRcdFx0KVtmLm1hdGNoV29yZF07XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0Y2FzZSBcIk1pblwiOlxyXG5cdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSA9IG1pbkJ5KGFyZ3MuY2VsbFNldHMsIChvKSA9PlxyXG5cdFx0XHRcdFx0XHRcdE51bWJlcihvW2YubWF0Y2hXb3JkXSlcclxuXHRcdFx0XHRcdFx0KVtmLm1hdGNoV29yZF07XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0Y2FzZSBcIlN1bVwiOlxyXG5cdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSA9IHN1bUJ5KGFyZ3MuY2VsbFNldHMsIChvKSA9PlxyXG5cdFx0XHRcdFx0XHRcdE51bWJlcihvW2YubWF0Y2hXb3JkXSlcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Ly8gU01QMi00MDk0IFVuaWNvcm4gLSBMMyBBZGp1c3RlZCBOQVYgdmFsdWUgaXNzdWVzXHJcblx0XHRcdFx0XHRcdGYucmVwbGFjZVZhbHVlID1cclxuXHRcdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSAmJiBmLnJlcGxhY2VWYWx1ZS50b0ZpeGVkKDEwKTtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRjYXNlIFwiQXZnXCI6XHJcblx0XHRcdFx0XHRcdGYucmVwbGFjZVZhbHVlID0gbWVhbkJ5KGFyZ3MuY2VsbFNldHMsIChvKSA9PlxyXG5cdFx0XHRcdFx0XHRcdE51bWJlcihvW2YubWF0Y2hXb3JkXSlcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIGY7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRsZXQgcmVzdWx0Rm9ybXVsYSA9IGZvcm11bGE7XHJcblx0XHRcdGlmIChjYWxjdWxlZE1hdGNoRmllbGRzLmxlbmd0aCkge1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2FsY3VsZWRNYXRjaEZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0cmVzdWx0Rm9ybXVsYSA9IHJlc3VsdEZvcm11bGEucmVwbGFjZShcclxuXHRcdFx0XHRcdFx0Y2FsY3VsZWRNYXRjaEZpZWxkc1tpXS5tYXRjaFN0cixcclxuXHRcdFx0XHRcdFx0XCIoXCIgKyBjYWxjdWxlZE1hdGNoRmllbGRzW2ldLnJlcGxhY2VWYWx1ZSArIFwiKVwiXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGxldCByZXN1bHQgPSBuZXcgRnVuY3Rpb24oXHJcblx0XHRcdFx0XHRcInJldHVybiBcIiArIHJlc3VsdEZvcm11bGEucmVwbGFjZSgvW14tPD4/OigpXFxkLyorLl0vZywgXCJcIilcclxuXHRcdFx0XHQpKCk7XHJcblx0XHRcdFx0aWYgKGlzTmFOKHJlc3VsdCkgfHwgIWlzRmluaXRlKHJlc3VsdCkpIHtcclxuXHRcdFx0XHRcdHJldHVybiAwO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0XHRyZXR1cm4gTmFOO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblxyXG5cdHRvdGFsRm9ybWF0dGVkID0ge307XHJcblx0cHVibGljIGFnZ3JlZ2F0ZUNlbGxJbmZvKGFyZ3MpIHtcclxuXHRcdGxldCBhc09mRGF0ZSA9IHRoaXMucGJmLnRpbWUodGhpcy5kYXNoYm9hcmQuYXNPZkRhdGUpO1xyXG5cdFx0Ly8gaWYgY2FsY3VsYXRlZCBmaWVsZFxyXG5cdFx0aWYgKGFyZ3MuYWdncmVnYXRlVHlwZSA9PSBcIkNhbGN1bGF0ZWRGaWVsZFwiKSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0aWYgKGFyZ3MuZmllbGROYW1lID09IHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1tpXS5uYW1lKSB7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gdGhpcy5jYWxjdWxhdGVkQ2VsbFNldHMoXHJcblx0XHRcdFx0XHRcdGFyZ3MsXHJcblx0XHRcdFx0XHRcdHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1tpXVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAoXHJcblx0XHRcdFtcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZUlSUlwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlSVJSQmVmb3JlQ2FycmllZFwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlSVJSSVJSRGF0ZVwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlSVJSTVREXCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVJUlJRVERcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZUlSUllURFwiLFxyXG5cdFx0XHRdLmluY2x1ZGVzKGFyZ3MuYWdncmVnYXRlVHlwZSlcclxuXHRcdCkge1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcIj09PT09PT09PT09PT09PT09PT09PT09PT09XCIpO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcImFyZ3M6XCIsIGFyZ3MpO1xyXG5cdFx0XHRsZXQgdmFsdWVGaWVsZDtcclxuXHRcdFx0bGV0IGRhdGVGaWVsZDtcclxuXHRcdFx0bGV0IHN0YXJ0RGF0ZTtcclxuXHRcdFx0bGV0IGVuZERhdGU7XHJcblx0XHRcdHN3aXRjaCAoYXJncy5hZ2dyZWdhdGVUeXBlKSB7XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZUlSUlwiOlxyXG5cdFx0XHRcdFx0dmFsdWVGaWVsZCA9IFwiSVJSQWRqVmFsdWVcIjtcclxuXHRcdFx0XHRcdGRhdGVGaWVsZCA9IFwiSVJSRGF0ZVwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZUlSUk1URFwiOlxyXG5cdFx0XHRcdFx0c3RhcnREYXRlID0gbW9tZW50KGFzT2ZEYXRlKVxyXG5cdFx0XHRcdFx0XHQuc3RhcnRPZihcIm1vbnRoXCIpXHJcblx0XHRcdFx0XHRcdC5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xyXG5cdFx0XHRcdFx0ZW5kRGF0ZSA9IG1vbWVudChhc09mRGF0ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHRcdFx0XHRcdHZhbHVlRmllbGQgPSBcIklSUkFkalZhbHVlXCI7XHJcblx0XHRcdFx0XHRkYXRlRmllbGQgPSBcIklSUkRhdGVcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVJUlJRVERcIjpcclxuXHRcdFx0XHRcdHN0YXJ0RGF0ZSA9IG1vbWVudChhc09mRGF0ZSlcclxuXHRcdFx0XHRcdFx0LnN0YXJ0T2YoXCJxdWFydGVyXCIpXHJcblx0XHRcdFx0XHRcdC5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xyXG5cdFx0XHRcdFx0ZW5kRGF0ZSA9IG1vbWVudChhc09mRGF0ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHRcdFx0XHRcdHZhbHVlRmllbGQgPSBcIklSUkFkalZhbHVlXCI7XHJcblx0XHRcdFx0XHRkYXRlRmllbGQgPSBcIklSUkRhdGVcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVJUlJZVERcIjpcclxuXHRcdFx0XHRcdHN0YXJ0RGF0ZSA9IG1vbWVudChhc09mRGF0ZSlcclxuXHRcdFx0XHRcdFx0LnN0YXJ0T2YoXCJ5ZWFyXCIpXHJcblx0XHRcdFx0XHRcdC5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xyXG5cdFx0XHRcdFx0ZW5kRGF0ZSA9IG1vbWVudChhc09mRGF0ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHRcdFx0XHRcdHZhbHVlRmllbGQgPSBcIklSUkFkalZhbHVlXCI7XHJcblx0XHRcdFx0XHRkYXRlRmllbGQgPSBcIklSUkRhdGVcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVJUlJJUlJEYXRlXCI6XHJcblx0XHRcdFx0XHR2YWx1ZUZpZWxkID0gXCJJUlJBZGpWYWx1ZVwiO1xyXG5cdFx0XHRcdFx0ZGF0ZUZpZWxkID0gXCJDYWxjdWxhdGVJUlJEYXRlXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlSVJSQmVmb3JlQ2FycmllZFwiOlxyXG5cdFx0XHRcdFx0dmFsdWVGaWVsZCA9IFwiSVJSQWRqVmFsdWVCZWZvcmVDYXJyeVwiO1xyXG5cdFx0XHRcdFx0ZGF0ZUZpZWxkID0gXCJJUlJEYXRlXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdFx0bGV0IE5BVkFkaiA9IDA7XHJcblx0XHRcdGxldCB2YWx1ZXMgPSBbXTtcclxuXHRcdFx0bGV0IGJlZm9yZVN0YXJ0TkFWQWRqID0gMDsgLy8g5a2Y5YKo5LiK5LiA5Liq6Zi25q6155qETkFWQWRq5oC75ZKMXHJcblx0XHRcdGxldCBiZWZvcmVTdGFydFZhbHVlcyA9IFtdOyAvLyDlrZjlgqjkuIrkuIDkuKrpmLbmrrXnmoTntK/orqHpm4blkIggKOWPquaYr+S4uuS6huaJk+WNsO+8jOayoeacieWunumZheeUqOmAlClcclxuXHRcdFx0bGV0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdGVsLmNvbE5hbWUgPT09XHJcblx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmdldEFnZ3JlZ2F0ZVR5cGUoXHJcblx0XHRcdFx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZVxyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MuY2VsbFNldHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRjb25zdCBkYXRhID0ge1xyXG5cdFx0XHRcdFx0YW1vdW50OiBhcmdzLmNlbGxTZXRzW2ldW1wiSVJSQW1vdW50XCJdLFxyXG5cdFx0XHRcdFx0ZGF0ZTpcclxuXHRcdFx0XHRcdFx0dGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW2RhdGVGaWVsZF0pID09PVxyXG5cdFx0XHRcdFx0XHRcIkludmFsaWQgZGF0ZVwiXHJcblx0XHRcdFx0XHRcdFx0PyBhc09mRGF0ZVxyXG5cdFx0XHRcdFx0XHRcdDogdGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW2RhdGVGaWVsZF0pLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0Ly8gU01QMi0xNjkyMFxyXG5cdFx0XHRcdC8vIElmIElSUiBEYXRlID4gRGFzaGJvYXJkIHJlcG9ydCBkYXRlID0gVGFrZXMgYXMgb2YgZGFzaGJvYXJkIHJlcG9ydCBkYXRlXHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZUlSUklSUkRhdGVcIiAmJlxyXG5cdFx0XHRcdFx0YXNPZkRhdGUgPCB0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bZGF0ZUZpZWxkXSlcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGRhdGEuZGF0ZSA9IGFzT2ZEYXRlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHROQVZBZGogKz0gYXJncy5jZWxsU2V0c1tpXVt2YWx1ZUZpZWxkXTtcclxuXHRcdFx0XHQvLyBTTVAyLTE3MjE5IE1URCBRVEQgWVREIElSUlxyXG5cdFx0XHRcdGlmIChzdGFydERhdGUgJiYgZW5kRGF0ZSkge1xyXG5cdFx0XHRcdFx0aWYgKG1vbWVudChkYXRhLmRhdGUpLmlzQmVmb3JlKHN0YXJ0RGF0ZSkpIHtcclxuXHRcdFx0XHRcdFx0ZGF0YVt2YWx1ZUZpZWxkXSA9IGFyZ3MuY2VsbFNldHNbaV1bdmFsdWVGaWVsZF07XHJcblx0XHRcdFx0XHRcdGJlZm9yZVN0YXJ0VmFsdWVzLnB1c2goZGF0YSk7XHJcblx0XHRcdFx0XHRcdGJlZm9yZVN0YXJ0TkFWQWRqICs9IGRhdGFbdmFsdWVGaWVsZF07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdCFtb21lbnQoZGF0YS5kYXRlKS5pc0JldHdlZW4oXHJcblx0XHRcdFx0XHRcdFx0c3RhcnREYXRlLFxyXG5cdFx0XHRcdFx0XHRcdGVuZERhdGUsXHJcblx0XHRcdFx0XHRcdFx0bnVsbCxcclxuXHRcdFx0XHRcdFx0XHRcIltdXCJcclxuXHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoZGF0YS5hbW91bnQgIT0gMCkge1xyXG5cdFx0XHRcdFx0dmFsdWVzLnB1c2goZGF0YSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChOQVZBZGogPiAwLjAwMDEgfHwgTkFWQWRqIDwgLTAuMDAwMSkge1xyXG5cdFx0XHRcdHZhbHVlcy5wdXNoKHtcclxuXHRcdFx0XHRcdGFtb3VudDogTkFWQWRqLFxyXG5cdFx0XHRcdFx0ZGF0ZTogYXNPZkRhdGUsXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFsdWVzID0gc29ydEJ5KHZhbHVlcywgXCJkYXRlXCIpO1xyXG5cdFx0XHQvLyDlpoLmnpzmmK9NVEQsUVRELFlURCDliJnpnIDopoHmiorlvZPliY3pmLbmrrXku6XliY3nmoTmiYDmnInmlbDmja7ov5vooYzmsYfmgLvvvIzliqDlhaXorqHnrpdcclxuXHRcdFx0aWYgKHN0YXJ0RGF0ZSAmJiBlbmREYXRlKSB7XHJcblx0XHRcdFx0dmFsdWVzLnVuc2hpZnQoe1xyXG5cdFx0XHRcdFx0YW1vdW50OiAtYmVmb3JlU3RhcnROQVZBZGosIC8vIOW8gOWni+eahOaVsOaNrumcgOimgeWPluWPjVxyXG5cdFx0XHRcdFx0ZGF0ZTogdGhpcy5wYmYudGltZShzdGFydERhdGUpLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwiYmVmb3JlU3RhcnRWYWx1ZXM6XCIsIGJlZm9yZVN0YXJ0VmFsdWVzKTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJ2YWx1ZXM6XCIsIHZhbHVlcyk7XHJcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGxldCBndWVzcyA9IDAuMTtcclxuXHRcdFx0XHRjb25zdCBzdW1BbW91bnQgPSB2YWx1ZXNcclxuXHRcdFx0XHRcdC5tYXAoKGl0ZW0pID0+IGl0ZW0uYW1vdW50KVxyXG5cdFx0XHRcdFx0LnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIsIDApO1xyXG5cdFx0XHRcdGlmIChzdW1BbW91bnQgPCAwKSB7XHJcblx0XHRcdFx0XHRndWVzcyA9IC0wLjE7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vU01QMi0yMjQ5IGZpeGVkIHRoZSBiaWcgaXJyIGlzc3VlXHJcblx0XHRcdFx0aWYgKHN1bUFtb3VudCA9PT0gMCkge1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IDA7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlSXRlbXMgPSB2YWx1ZXMuc2xpY2UoMCwgdmFsdWVzLmxlbmd0aCAtIDEpO1xyXG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0ID0gdmFsdWVJdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0uYW1vdW50KTtcclxuXHRcdFx0XHRcdGNvbnN0IGRhdGVMaXN0ID0gdmFsdWVJdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0uZGF0ZSk7XHJcblx0XHRcdFx0XHRjb25zdCBsYXN0SXRlbSA9IHZhbHVlc1t2YWx1ZXMubGVuZ3RoIC0gMV07XHJcblx0XHRcdFx0XHRjb25zdCBuYXZBZGp1c3QgPSBsYXN0SXRlbS5hbW91bnQ7XHJcblx0XHRcdFx0XHRjb25zdCBsYXRlc3REYXRlID0gbGFzdEl0ZW0uZGF0ZTtcclxuXHRcdFx0XHRcdGxldCBpcnIgPVxyXG5cdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLkV4Y2VsRm9ybXVsYXMuX0NhbGN1bGF0ZVhpcnIoXHJcblx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0LFxyXG5cdFx0XHRcdFx0XHRcdGRhdGVMaXN0LFxyXG5cdFx0XHRcdFx0XHRcdG5hdkFkanVzdCxcclxuXHRcdFx0XHRcdFx0XHRsYXRlc3REYXRlXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gaXJyID09PSBudWxsID8gXCJcIiA6IGlycjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJhcmdzLnZhbHVlOlwiLCBhcmdzLnZhbHVlKTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlICYmXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXTtcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdID0ge1xyXG5cdFx0XHRcdFx0bmFtZTogYXJncy5maWVsZE5hbWUsXHJcblx0XHRcdFx0XHRmb3JtYXQ6XHJcblx0XHRcdFx0XHRcdGZpZWxkLmxlbmd0aCA+IDBcclxuXHRcdFx0XHRcdFx0XHQ/IGZpZWxkWzBdLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRcdCAgZmllbGRbMF0uZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdCAgZmllbGRbMF0uZm9ybWF0WzBdLmZvcm1hdENoZWNrZWRcclxuXHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0OiB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmZvcm1hdFBlcmNlbnQoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZHBcclxuXHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdDogXCJQMlwiLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyAgU01QMi0xNjUyMCBUV1Ig5pyIL+Wtoy/lubQgJiYgU01QMi0xNjY4MyBWQVJcclxuXHRcdGlmIChcclxuXHRcdFx0W1xyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVFdSTVREXCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVUV1JRVERcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVRXUllURFwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVkFSTVREXzk5XCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVWQVJRVERfOTlcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVZBUllURF85OVwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVkFSTVREXzk1XCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVWQVJRVERfOTVcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVZBUllURF85NVwiLFxyXG5cdFx0XHRdLmluY2x1ZGVzKGFyZ3MuYWdncmVnYXRlVHlwZSlcclxuXHRcdCkge1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcIj09PT09PT09PT09PT09PT09PT09PT09PT09XCIpO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcImFyZ3M6XCIsIGFyZ3MpO1xyXG5cdFx0XHRsZXQgdmFsdWVGaWVsZCA9IFwiSVJSQWRqVmFsdWVcIjtcclxuXHRcdFx0bGV0IGRhdGVGaWVsZCA9IFwiSVJSRGF0ZVwiO1xyXG5cdFx0XHRsZXQgdGltZVJhbmdlO1xyXG5cdFx0XHRzd2l0Y2ggKGFyZ3MuYWdncmVnYXRlVHlwZSkge1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVUV1JNVERcIjpcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVkFSTVREXzk5XCI6XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVZBUk1URF85NVwiOlxyXG5cdFx0XHRcdFx0dGltZVJhbmdlID0gXCJtb250aFwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVRXUlFURFwiOlxyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVWQVJRVERfOTlcIjpcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVkFSUVREXzk1XCI6XHJcblx0XHRcdFx0XHR0aW1lUmFuZ2UgPSBcInF1YXJ0ZXJcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVUV1JZVERcIjpcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVkFSWVREXzk5XCI6XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVZBUllURF85NVwiOlxyXG5cdFx0XHRcdFx0dGltZVJhbmdlID0gXCJ5ZWFyXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdFx0bGV0IHZhbHVlcyA9IFtdOyAvLyDov5nkuKrpmLbmrrXnmoTntK/orqHpm4blkIhcclxuXHRcdFx0bGV0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdGVsLmNvbE5hbWUgPT09XHJcblx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmdldEFnZ3JlZ2F0ZVR5cGUoXHJcblx0XHRcdFx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZVxyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MuY2VsbFNldHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRjb25zdCBkYXRhID0ge1xyXG5cdFx0XHRcdFx0W3ZhbHVlRmllbGRdOiBhcmdzLmNlbGxTZXRzW2ldW3ZhbHVlRmllbGRdLFxyXG5cdFx0XHRcdFx0ZGF0ZTpcclxuXHRcdFx0XHRcdFx0dGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW2RhdGVGaWVsZF0pID09PVxyXG5cdFx0XHRcdFx0XHRcIkludmFsaWQgZGF0ZVwiXHJcblx0XHRcdFx0XHRcdFx0PyBhc09mRGF0ZVxyXG5cdFx0XHRcdFx0XHRcdDogdGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW2RhdGVGaWVsZF0pLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0dmFsdWVzLnB1c2goZGF0YSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIOWmguaenGFzT2ZEYXRl5LiN5pivIOacrOaciC/lraPluqYv5bm0IOeahOacgOWQjuS4gOWkqe+8jOmDveaYr+aIquiHsyDkuIrkuKrmnIgv5a2j5bqmL+W5tCDnmoTmnIDlkI7kuIDlpKnnmoTmlbDmja7ljrvorqHnrpdcclxuXHRcdFx0bGV0IF9hc09mRGF0ZSA9IG1vbWVudChhc09mRGF0ZSk7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwiX2FzT2ZEYXRlOlwiLCBfYXNPZkRhdGUpO1xyXG5cdFx0XHRsZXQgaXNFbmRPZlBlcmlvZCA9ICh1bml0KSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIChcclxuXHRcdFx0XHRcdF9hc09mRGF0ZS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpID09PVxyXG5cdFx0XHRcdFx0X2FzT2ZEYXRlLmVuZE9mKHVuaXQpLmZvcm1hdChcIllZWVktTU0tRERcIilcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9O1xyXG5cdFx0XHRsZXQgZW5kRGF0ZSA9IGlzRW5kT2ZQZXJpb2QodGltZVJhbmdlKVxyXG5cdFx0XHRcdD8gbW9tZW50KGFzT2ZEYXRlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpXHJcblx0XHRcdFx0OiBtb21lbnQoYXNPZkRhdGUpXHJcblx0XHRcdFx0XHRcdC5zdWJ0cmFjdCgxLCB0aW1lUmFuZ2UpXHJcblx0XHRcdFx0XHRcdC5lbmRPZih0aW1lUmFuZ2UpXHJcblx0XHRcdFx0XHRcdC5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xyXG5cclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJlbmREYXRlOlwiLCBlbmREYXRlKTtcclxuXHRcdFx0dmFsdWVzID0gdmFsdWVzLmZpbHRlcigoaXRlbSkgPT5cclxuXHRcdFx0XHRtb21lbnQoaXRlbS5kYXRlKS5pc1NhbWVPckJlZm9yZShlbmREYXRlKVxyXG5cdFx0XHQpO1xyXG5cdFx0XHR2YWx1ZXMgPSBzb3J0QnkodmFsdWVzLCBcImRhdGVcIik7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwidmFsdWVzOlwiLCB2YWx1ZXMpO1xyXG5cclxuXHRcdFx0aWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0bGV0IHJlc3VsdCA9IHRoaXMuZ2V0VGltZVJhbmdlcyhcclxuXHRcdFx0XHRcdHZhbHVlcyxcclxuXHRcdFx0XHRcdGVuZERhdGUsXHJcblx0XHRcdFx0XHR0aW1lUmFuZ2UsXHJcblx0XHRcdFx0XHRcImRhdGVcIlxyXG5cdFx0XHRcdCk7IC8vIOWQhOS4qumYtuauteeahOaVsOaNrlxyXG5cdFx0XHRcdGxldCByZXN1bHRUb3RhbCA9IHt9OyAvLyDlkITkuKrpmLbmrrXmgLvlkoxcclxuXHRcdFx0XHRmb3IgKGNvbnN0IHByb3AgaW4gcmVzdWx0KSB7XHJcblx0XHRcdFx0XHRyZXN1bHRUb3RhbFtwcm9wXSA9IHJlc3VsdFtwcm9wXS5yZWR1Y2UoKGFjYywgY3VyKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBhY2MgKyAoY3VyW3ZhbHVlRmllbGRdIHx8IDApO1xyXG5cdFx0XHRcdFx0fSwgMCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwicmVzdWx0OlwiLCByZXN1bHQpO1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwicmVzdWx0VG90YWw6XCIsIHJlc3VsdFRvdGFsKTtcclxuXHJcblx0XHRcdFx0Y29uc3QgY3VtdWxhdGl2ZVN1bSA9IHt9OyAvLyDlkITkuKrpmLbmrrXntK/orqHlkoxcclxuXHRcdFx0XHRsZXQgc3VtID0gMDtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXN1bHRUb3RhbCkpIHtcclxuXHRcdFx0XHRcdHN1bSArPSByZXN1bHRUb3RhbFtrZXldO1xyXG5cdFx0XHRcdFx0Y3VtdWxhdGl2ZVN1bVtgJHtrZXl9YF0gPSBzdW07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwiY3VtdWxhdGl2ZVN1bTpcIiwgY3VtdWxhdGl2ZVN1bSk7XHJcblxyXG5cdFx0XHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhjdW11bGF0aXZlU3VtKTtcclxuXHRcdFx0XHRsZXQgdHdyTGlzdCA9IFtdO1xyXG5cdFx0XHRcdC8vIOmBjeWOhuavj+S4pOS4qumYtuautSDorqHnrpdUV1JcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoIC0gMTsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBrZXkxID0ga2V5c1tpXTtcclxuXHRcdFx0XHRcdGNvbnN0IGtleTIgPSBrZXlzW2kgKyAxXTtcclxuXHJcblx0XHRcdFx0XHQvLyDorqHnrpfkuKTkuKrpmLbmrrXkuYvpl7TnmoTpgJLlop7ph48sIOWHuuaVsOS4jeiDveS4ujBcclxuXHRcdFx0XHRcdGlmIChjdW11bGF0aXZlU3VtW2tleTFdICE9IDApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgaW5jcmVtZW50ID1cclxuXHRcdFx0XHRcdFx0XHRjdW11bGF0aXZlU3VtW2tleTJdIC0gY3VtdWxhdGl2ZVN1bVtrZXkxXTtcclxuXHRcdFx0XHRcdFx0bGV0IHR3ciA9IGluY3JlbWVudCAvIGN1bXVsYXRpdmVTdW1ba2V5MV07XHJcblx0XHRcdFx0XHRcdHR3ckxpc3QucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0ZGF0ZToga2V5MixcclxuXHRcdFx0XHRcdFx0XHR0d3I6IHR3cixcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIOiuoeeul0F2ZXJhZ2UgVFdSXHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJ0d3JMaXN0OlwiLCB0d3JMaXN0KTtcclxuXHRcdFx0XHRsZXQgYXZlcmFnZVRXUiA9IHRoaXMuY2FsY3VsYXRlR3Jvd3RoUmF0ZShcclxuXHRcdFx0XHRcdHR3ckxpc3QubWFwKCh4KSA9PiB4LnR3cilcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwi6K6h566XQXZlcmFnZSBUV1I6XCIsIGF2ZXJhZ2VUV1IpO1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFtcclxuXHRcdFx0XHRcdFx0XCJDYWxjdWxhdGVUV1JNVERcIixcclxuXHRcdFx0XHRcdFx0XCJDYWxjdWxhdGVUV1JRVERcIixcclxuXHRcdFx0XHRcdFx0XCJDYWxjdWxhdGVUV1JZVERcIixcclxuXHRcdFx0XHRcdF0uaW5jbHVkZXMoYXJncy5hZ2dyZWdhdGVUeXBlKVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0Ly8gU01QMi0xNjUyMCBUV1Ig5pyIL+Wtoy/lubRcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRpc05hTihhdmVyYWdlVFdSKSB8fCBhdmVyYWdlVFdSID09IG51bGxcclxuXHRcdFx0XHRcdFx0XHQ/IFwiXCJcclxuXHRcdFx0XHRcdFx0XHQ6IE51bWJlcihhdmVyYWdlVFdSKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aWYgKGlzTmFOKGF2ZXJhZ2VUV1IpIHx8IGF2ZXJhZ2VUV1IgPT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdC8vIFNNUDItMTY2ODMgVkFSIOWMuuWIhjk5JeWSjDk1JVxyXG5cdFx0XHRcdFx0XHRsZXQgWlNjb3JlID0gW1xyXG5cdFx0XHRcdFx0XHRcdFwiQ2FsY3VsYXRlVkFSTVREXzk5XCIsXHJcblx0XHRcdFx0XHRcdFx0XCJDYWxjdWxhdGVWQVJRVERfOTlcIixcclxuXHRcdFx0XHRcdFx0XHRcIkNhbGN1bGF0ZVZBUllURF85OVwiLFxyXG5cdFx0XHRcdFx0XHRdLmluY2x1ZGVzKGFyZ3MuYWdncmVnYXRlVHlwZSlcclxuXHRcdFx0XHRcdFx0XHQ/IDIuMzNcclxuXHRcdFx0XHRcdFx0XHQ6IDEuNjU7XHJcblx0XHRcdFx0XHRcdGlmICh0d3JMaXN0Lmxlbmd0aCA8IDIpIHtcclxuXHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgU0QgPSB0aGlzLmNhbGN1bGF0ZVN0YW5kYXJkRGV2aWF0aW9uKFxyXG5cdFx0XHRcdFx0XHRcdFx0dHdyTGlzdC5tYXAoKHgpID0+IHgudHdyKVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJjYWxjdWxhdGVTdGFuZGFyZERldmlhdGlvbjpcIiwgU0QpO1xyXG5cdFx0XHRcdFx0XHRcdGxldCBWQVIgPSBhdmVyYWdlVFdSIC0gU0QgKiBaU2NvcmU7XHJcblx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IE51bWJlcihWQVIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwiYXJncy52YWx1ZTpcIiwgYXJncy52YWx1ZSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZSAmJlxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV1cclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV07XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXSA9IHtcclxuXHRcdFx0XHRcdG5hbWU6IGFyZ3MuZmllbGROYW1lLFxyXG5cdFx0XHRcdFx0Zm9ybWF0OlxyXG5cdFx0XHRcdFx0XHRmaWVsZC5sZW5ndGggPiAwXHJcblx0XHRcdFx0XHRcdFx0PyBmaWVsZFswXS5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkXHJcblx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdFBlcmNlbnQoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmRwXHJcblx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHQ6IFwiUDJcIixcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9TTVAyLTI3MDFcclxuXHRcdGlmIChhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlSVJSQWN0dWFsQXVkaXRlZFwiKSB7XHJcblx0XHRcdGxldCBOQVZBZGogPSAwO1xyXG5cdFx0XHRsZXQgdmFsdWVzID0gW107XHJcblx0XHRcdGxldCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRlbC5jb2xOYW1lID09PVxyXG5cdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRBZ2dyZWdhdGVUeXBlKFxyXG5cdFx0XHRcdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGVcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0KTtcclxuXHRcdFx0Ly9TTVAyLTI3MTMgb25seSBqdWRnZSBmb3IgdGhpcyBkYXRhTWFydChHcm9zc05ldClcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHRoaXMucG9ydGxldC5maWd1cmVDb2RlID09PSBcIkdyb3NzTmV0XCIgfHxcclxuXHRcdFx0XHR0aGlzLnBvcnRsZXQuZmlndXJlQ29kZSA9PT1cclxuXHRcdFx0XHRcdFwiQ29tYmluZWRJbnZlc3RtZW50RnVuZE5Db21wYW55Q2FzaGZsb3dcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MuY2VsbFNldHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGRhdGEgPSB7XHJcblx0XHRcdFx0XHRcdGFtb3VudDogYXJncy5jZWxsU2V0c1tpXVtcIklSUkFtb3VudFwiXSxcclxuXHRcdFx0XHRcdFx0ZGF0ZTpcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJEYXRlXCJdKSA9PT1cclxuXHRcdFx0XHRcdFx0XHRcIkludmFsaWQgZGF0ZVwiXHJcblx0XHRcdFx0XHRcdFx0XHQ/IGFzT2ZEYXRlXHJcblx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtcIklSUkRhdGVcIl0pLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdE5BVkFkaiArPSBhcmdzLmNlbGxTZXRzW2ldW1wiQWN0dWFsQXVkaXRlZE5BVlwiXTtcclxuXHRcdFx0XHRcdGlmIChkYXRhLmFtb3VudCAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvL2ZpbHRlciB0aGUgZGF0YSBieSB0aGUgRGF0YVR5cGUoQWN0dWFsIFJlcG9ydGVkIEF1ZGl0ZWQpXHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdGxldCBhcmdzZGF0YSA9IGFyZ3MuY2VsbFNldHMuZmlsdGVyKFxyXG5cdFx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0XHRlbC5EYXRhVHlwZSA9PT0gXCJBQ1RVQUxfQVVESVRFRFwiIHx8XHJcblx0XHRcdFx0XHRcdGVsLkRhdGFUeXBlID09PSBcIlJFUE9SVEVEXCJcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJnc2RhdGEubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGRhdGEgPSB7XHJcblx0XHRcdFx0XHRcdGFtb3VudDogYXJnc2RhdGFbaV1bXCJJUlJBbW91bnRcIl0sXHJcblx0XHRcdFx0XHRcdGRhdGU6XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5wYmYudGltZShhcmdzZGF0YVtpXVtcIklSUkRhdGVcIl0pID09PVxyXG5cdFx0XHRcdFx0XHRcdFwiSW52YWxpZCBkYXRlXCJcclxuXHRcdFx0XHRcdFx0XHRcdD8gYXNPZkRhdGVcclxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy5wYmYudGltZShhcmdzZGF0YVtpXVtcIklSUkRhdGVcIl0pLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdE5BVkFkaiArPSBhcmdzZGF0YVtpXVtcIklSUkFkalZhbHVlXCJdO1xyXG5cdFx0XHRcdFx0aWYgKGRhdGEuYW1vdW50ICE9IDApIHtcclxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goZGF0YSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChOQVZBZGogPiAwLjAwMDEgfHwgTkFWQWRqIDwgLTAuMDAwMSkge1xyXG5cdFx0XHRcdHZhbHVlcy5wdXNoKHtcclxuXHRcdFx0XHRcdGFtb3VudDogTkFWQWRqLFxyXG5cdFx0XHRcdFx0ZGF0ZTogYXNPZkRhdGUsXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFsdWVzID0gc29ydEJ5KHZhbHVlcywgXCJkYXRlXCIpO1xyXG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRsZXQgZ3Vlc3MgPSAwLjE7XHJcblx0XHRcdFx0Y29uc3Qgc3VtQW1vdW50ID0gdmFsdWVzXHJcblx0XHRcdFx0XHQubWFwKChpdGVtKSA9PiBpdGVtLmFtb3VudClcclxuXHRcdFx0XHRcdC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLCAwKTtcclxuXHRcdFx0XHRpZiAoc3VtQW1vdW50IDwgMCkge1xyXG5cdFx0XHRcdFx0Z3Vlc3MgPSAtMC4xO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvL1NNUDItMjI0OSBmaXhlZCB0aGUgYmlnIGlyciBpc3N1ZVxyXG5cdFx0XHRcdGlmIChzdW1BbW91bnQgPT09IDApIHtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSAwO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUl0ZW1zID0gdmFsdWVzLnNsaWNlKDAsIHZhbHVlcy5sZW5ndGggLSAxKTtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlTGlzdCA9IHZhbHVlSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmFtb3VudCk7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRlTGlzdCA9IHZhbHVlSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmRhdGUpO1xyXG5cdFx0XHRcdFx0Y29uc3QgbGFzdEl0ZW0gPSB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdO1xyXG5cdFx0XHRcdFx0Y29uc3QgbmF2QWRqdXN0ID0gbGFzdEl0ZW0uYW1vdW50O1xyXG5cdFx0XHRcdFx0Y29uc3QgbGF0ZXN0RGF0ZSA9IGxhc3RJdGVtLmRhdGU7XHJcblx0XHRcdFx0XHRsZXQgaXJyID1cclxuXHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5FeGNlbEZvcm11bGFzLl9DYWxjdWxhdGVYaXJyKFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlTGlzdCxcclxuXHRcdFx0XHRcdFx0XHRkYXRlTGlzdCxcclxuXHRcdFx0XHRcdFx0XHRuYXZBZGp1c3QsXHJcblx0XHRcdFx0XHRcdFx0bGF0ZXN0RGF0ZVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IGlyciA9PT0gbnVsbCA/IDAgOiBpcnI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSAwO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZSAmJlxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV1cclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV07XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXSA9IHtcclxuXHRcdFx0XHRcdG5hbWU6IGFyZ3MuZmllbGROYW1lLFxyXG5cdFx0XHRcdFx0Zm9ybWF0OlxyXG5cdFx0XHRcdFx0XHRmaWVsZC5sZW5ndGggPiAwXHJcblx0XHRcdFx0XHRcdFx0PyBmaWVsZFswXS5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkXHJcblx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdFBlcmNlbnQoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmRwXHJcblx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHQ6IFwiUDJcIixcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHQvL1NNUDItMzQxMVxyXG5cdFx0aWYgKGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDYWxjdWxhdGVJUlJSZXBvcnRlZFwiKSB7XHJcblx0XHRcdGxldCBOQVZBZGogPSAwO1xyXG5cdFx0XHRsZXQgdmFsdWVzID0gW107XHJcblx0XHRcdGxldCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRlbC5jb2xOYW1lID09PVxyXG5cdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRBZ2dyZWdhdGVUeXBlKFxyXG5cdFx0XHRcdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGVcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHRoaXMucG9ydGxldC5maWd1cmVDb2RlID09PSBcIkdyb3NzTmV0XCIgfHxcclxuXHRcdFx0XHR0aGlzLnBvcnRsZXQuZmlndXJlQ29kZSA9PT1cclxuXHRcdFx0XHRcdFwiQ29tYmluZWRJbnZlc3RtZW50RnVuZE5Db21wYW55Q2FzaGZsb3dcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MuY2VsbFNldHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGRhdGEgPSB7XHJcblx0XHRcdFx0XHRcdGFtb3VudDogYXJncy5jZWxsU2V0c1tpXVtcIklSUkFtb3VudFwiXSxcclxuXHRcdFx0XHRcdFx0ZGF0ZTpcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJEYXRlXCJdKSA9PT1cclxuXHRcdFx0XHRcdFx0XHRcIkludmFsaWQgZGF0ZVwiXHJcblx0XHRcdFx0XHRcdFx0XHQ/IGFzT2ZEYXRlXHJcblx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtcIklSUkRhdGVcIl0pLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdE5BVkFkaiArPSBhcmdzLmNlbGxTZXRzW2ldW1wiUmVwb3J0ZWROQVZcIl07XHJcblx0XHRcdFx0XHRpZiAoZGF0YS5hbW91bnQgIT0gMCkge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZXMucHVzaChkYXRhKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRhbW91bnQ6IGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJBbW91bnRcIl0sXHJcblx0XHRcdFx0XHRcdGRhdGU6XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW1wiSVJSRGF0ZVwiXSkgPT09XHJcblx0XHRcdFx0XHRcdFx0XCJJbnZhbGlkIGRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PyBhc09mRGF0ZVxyXG5cdFx0XHRcdFx0XHRcdFx0OiB0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJEYXRlXCJdKSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHROQVZBZGogKz0gYXJncy5jZWxsU2V0c1tpXVtcIklSUkFkalZhbHVlXCJdO1xyXG5cdFx0XHRcdFx0aWYgKGRhdGEuYW1vdW50ICE9IDApIHtcclxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goZGF0YSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChOQVZBZGogPiAwLjAwMDEgfHwgTkFWQWRqIDwgLTAuMDAwMSkge1xyXG5cdFx0XHRcdHZhbHVlcy5wdXNoKHtcclxuXHRcdFx0XHRcdGFtb3VudDogTkFWQWRqLFxyXG5cdFx0XHRcdFx0ZGF0ZTogYXNPZkRhdGUsXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFsdWVzID0gc29ydEJ5KHZhbHVlcywgXCJkYXRlXCIpO1xyXG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRsZXQgZ3Vlc3MgPSAwLjE7XHJcblx0XHRcdFx0Y29uc3Qgc3VtQW1vdW50ID0gdmFsdWVzXHJcblx0XHRcdFx0XHQubWFwKChpdGVtKSA9PiBpdGVtLmFtb3VudClcclxuXHRcdFx0XHRcdC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLCAwKTtcclxuXHRcdFx0XHRpZiAoc3VtQW1vdW50IDwgMCkge1xyXG5cdFx0XHRcdFx0Z3Vlc3MgPSAtMC4xO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvL1NNUDItMjI0OSBmaXhlZCB0aGUgYmlnIGlyciBpc3N1ZVxyXG5cdFx0XHRcdGlmIChzdW1BbW91bnQgPT09IDApIHtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSAwO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUl0ZW1zID0gdmFsdWVzLnNsaWNlKDAsIHZhbHVlcy5sZW5ndGggLSAxKTtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlTGlzdCA9IHZhbHVlSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmFtb3VudCk7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRlTGlzdCA9IHZhbHVlSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmRhdGUpO1xyXG5cdFx0XHRcdFx0Y29uc3QgbGFzdEl0ZW0gPSB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdO1xyXG5cdFx0XHRcdFx0Y29uc3QgbmF2QWRqdXN0ID0gbGFzdEl0ZW0uYW1vdW50O1xyXG5cdFx0XHRcdFx0Y29uc3QgbGF0ZXN0RGF0ZSA9IGxhc3RJdGVtLmRhdGU7XHJcblx0XHRcdFx0XHRsZXQgaXJyID1cclxuXHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5FeGNlbEZvcm11bGFzLl9DYWxjdWxhdGVYaXJyKFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlTGlzdCxcclxuXHRcdFx0XHRcdFx0XHRkYXRlTGlzdCxcclxuXHRcdFx0XHRcdFx0XHRuYXZBZGp1c3QsXHJcblx0XHRcdFx0XHRcdFx0bGF0ZXN0RGF0ZVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBpcnIgPT09IG51bGwgPyAwIDogaXJyO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gMDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUgJiZcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdO1xyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV0gPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBhcmdzLmZpZWxkTmFtZSxcclxuXHRcdFx0XHRcdGZvcm1hdDpcclxuXHRcdFx0XHRcdFx0ZmllbGQubGVuZ3RoID4gMFxyXG5cdFx0XHRcdFx0XHRcdD8gZmllbGRbMF0uZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZFxyXG5cdFx0XHRcdFx0XHRcdFx0PyB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5kcFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0OiBcIlAyXCIsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlTXVsdGlwbGVcIiB8fFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlUElDXCIgfHxcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZURQSVwiIHx8XHJcblx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDYWxjdWxhdGVUVlBJXCIgfHxcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZVJWUElcIiB8fFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlTUFjdHVhbEF1ZGl0ZWRcIiB8fFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlTVJlcG9ydGVkXCJcclxuXHRcdCkge1xyXG5cdFx0XHRsZXQgdG90YWxOdW1lcmF0b3IgPSAwO1xyXG5cdFx0XHRsZXQgdG90YWxEZW5vbWluYXRvciA9IDA7XHJcblx0XHRcdGxldCBudW1lcmF0b3JOYW1lO1xyXG5cdFx0XHRsZXQgZGVub21pbmF0b3JOYW1lO1xyXG5cdFx0XHRsZXQgZmllbGQgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0ZWwuY29sTmFtZSA9PT1cclxuXHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0QWdncmVnYXRlVHlwZShcclxuXHRcdFx0XHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlXHJcblx0XHRcdFx0XHQpXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChmaWVsZC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0Y29uc3QgZm9ybXVsYUFycmF5ID0gZmllbGRbMF0uZm9ybXVsYS5zcGxpdChcIi9cIik7XHJcblx0XHRcdFx0bnVtZXJhdG9yTmFtZSA9IGZvcm11bGFBcnJheVswXTtcclxuXHRcdFx0XHRkZW5vbWluYXRvck5hbWUgPSBmb3JtdWxhQXJyYXlbMV07XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0dG90YWxOdW1lcmF0b3IgKz0gYXJncy5jZWxsU2V0c1tqXVtudW1lcmF0b3JOYW1lXTtcclxuXHRcdFx0XHR0b3RhbERlbm9taW5hdG9yICs9IGFyZ3MuY2VsbFNldHNbal1bZGVub21pbmF0b3JOYW1lXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAodG90YWxEZW5vbWluYXRvciAhPT0gMCkge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSB0b3RhbE51bWVyYXRvciAvIHRvdGFsRGVub21pbmF0b3I7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUgJiZcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV1cclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbXHJcblx0XHRcdFx0XHRcdGFyZ3MuZmllbGROYW1lXHJcblx0XHRcdFx0XHRdO1xyXG5cdFx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXSA9IHtcclxuXHRcdFx0XHRcdFx0bmFtZTogYXJncy5maWVsZE5hbWUsXHJcblx0XHRcdFx0XHRcdGZvcm1hdDpcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5sZW5ndGggPiAwXHJcblx0XHRcdFx0XHRcdFx0XHQ/IGZpZWxkWzBdLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkXHJcblx0XHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0TXVsdGlwbGUoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0XHRcdDogdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXRNdWx0aXBsZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmRwXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0OiBcIiMjIzAuMDAneCdcIixcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJGaXJzdFwiIHx8IGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJMYXN0XCIpIHtcclxuXHRcdFx0YXJncy52YWx1ZSA9IHRoaXMuY2FsY3VsYXRlZEZpc3RMYXN0KFxyXG5cdFx0XHRcdGFyZ3MsXHJcblx0XHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlLFxyXG5cdFx0XHRcdGFyZ3MuZmllbGROYW1lXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ291bnRcIiB8fFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiRGlzdGluY3RDb3VudFwiXHJcblx0XHQpIHtcclxuXHRcdFx0aWYgKGFyZ3MudmFsdWUpIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gYXJncy52YWx1ZS50b0ZpeGVkKDIpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKFxyXG5cdFx0XHQhYXJncy52YWx1ZSAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSAwICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgIT09IGZhbHNlICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgIT09IFwiZmFsc2VcIlxyXG5cdFx0KSB7XHJcblx0XHRcdGFyZ3Muc2tpcEZvcm1hdHRpbmcgPSB0cnVlO1xyXG5cdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdH1cclxuXHRcdC8vIOaWsOW7unBpdm90IHRhYmxlLCDov5jmsqHmnInorr7nva5yb3csIOmAieS6hmNvbHVtbuS5i+WQjmdyYW5kdG90YWzkvJrmnInlgLxcclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5yb3dDZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCIgJiZcclxuXHRcdFx0IXRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3MubGVuZ3RoXHJcblx0XHQpIHtcclxuXHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHR9XHJcblx0XHQvL1NNUDItMjg4OVxyXG5cdFx0aWYgKGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwic3ViVG90YWxcIikge1xyXG5cdFx0XHRjb25zdCB2YWx1ZUZpZWxkX2RhdGEgPSB0aGlzLmNvbmZpZy55YXhpcy5zZXJpZXMuZmlsdGVyKFxyXG5cdFx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gYXJncy5maWVsZE5hbWVcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKHZhbHVlRmllbGRfZGF0YS5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0aWYgKHZhbHVlRmllbGRfZGF0YVswXS5zaG93U3ViVG90YWxzID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0XHRhcmdzLnNraXBGb3JtYXR0aW5nID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChhcmdzLnJvd0NlbGxUeXBlID09PSBcImdyYW5kVG90YWxcIikge1xyXG5cdFx0XHRjb25zdCB2YWx1ZUZpZWxkX2RhdGEgPSB0aGlzLmNvbmZpZy55YXhpcy5zZXJpZXMuZmlsdGVyKFxyXG5cdFx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gYXJncy5maWVsZE5hbWVcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKHZhbHVlRmllbGRfZGF0YS5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0aWYgKHZhbHVlRmllbGRfZGF0YVswXS5zaG93R3JhbmRUb3RhbHMgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0XHRcdGFyZ3Muc2tpcEZvcm1hdHRpbmcgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gU01QMi0zNDE2IHN0YXJ0XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMuemVyb0Zvcm1hdERhdGEuaGdMaXN0LmluY2x1ZGVzKGFyZ3MuZmllbGROYW1lKSAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlID09PSAwXHJcblx0XHQpIHtcclxuXHRcdFx0YXJncy52YWx1ZSA9IFwiLVwiO1xyXG5cdFx0XHRhcmdzLnNraXBGb3JtYXR0aW5nID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy56ZXJvRm9ybWF0RGF0YS5lbXB0eUxpc3QuaW5jbHVkZXMoYXJncy5maWVsZE5hbWUpICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgPT09IDBcclxuXHRcdCkge1xyXG5cdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0YXJncy5za2lwRm9ybWF0dGluZyA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMubWlsbGlvbkZpZWxkcy5pbmNsdWRlcyhhcmdzLmZpZWxkTmFtZSkgJiZcclxuXHRcdFx0IWlzTmFOKE51bWJlcihhcmdzLnZhbHVlKSkgJiZcclxuXHRcdFx0YXJncy52YWx1ZSAhPT0gMCAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSBcIlwiICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgIT09IG51bGxcclxuXHRcdCkge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0YXJncy5jb2x1bW5DZWxsVHlwZSA9PSBcImdyYW5kVG90YWxcIiAmJlxyXG5cdFx0XHRcdGFyZ3Mucm93Q2VsbFR5cGUgPT0gXCJncmFuZFRvdGFsXCJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0aWYgKCF0aGlzLnRvdGFsRm9ybWF0dGVkW2FyZ3MuZmllbGROYW1lXSkge1xyXG5cdFx0XHRcdFx0dGhpcy50b3RhbEZvcm1hdHRlZFthcmdzLmZpZWxkTmFtZV0gPSB0cnVlO1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IGFyZ3MudmFsdWUgLyAxMDAwMDAwO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gYXJncy52YWx1ZSAvIDEwMDAwMDA7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBTTVAyLTI0ODYgJiBwZXJjZW50TnVt55qEZm9ybWF06Zeu6aKYXHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMucGVyY2VudE51bUZpZWxkcy5sZW5ndGggJiZcclxuXHRcdFx0dGhpcy5wZXJjZW50TnVtRmllbGRzLmluY2x1ZGVzKGFyZ3MuZmllbGROYW1lKSAmJlxyXG5cdFx0XHQhaXNOYU4oTnVtYmVyKGFyZ3MudmFsdWUpKSAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSAwICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgIT09IFwiXCIgJiZcclxuXHRcdFx0YXJncy52YWx1ZSAhPT0gbnVsbFxyXG5cdFx0KSB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRhcmdzLmNvbHVtbkNlbGxUeXBlID09IFwiZ3JhbmRUb3RhbFwiICYmXHJcblx0XHRcdFx0YXJncy5yb3dDZWxsVHlwZSA9PSBcImdyYW5kVG90YWxcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRpZiAoIXRoaXMudG90YWxGb3JtYXR0ZWRbYXJncy5maWVsZE5hbWVdKSB7XHJcblx0XHRcdFx0XHR0aGlzLnRvdGFsRm9ybWF0dGVkW2FyZ3MuZmllbGROYW1lXSA9IHRydWU7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gYXJncy52YWx1ZSAvIDEwMDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IGFyZ3MudmFsdWUgLyAxMDA7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09IFwiQ2FsY3VsYXRlZEZpZWxkXCIgJiZcclxuXHRcdFx0IWlzTmFOKE51bWJlcihhcmdzLnZhbHVlKSkgJiZcclxuXHRcdFx0IXRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV0uZm9ybWF0XHJcblx0XHQpIHtcclxuXHRcdFx0YXJncy52YWx1ZSA9IE51bWJlcihhcmdzLnZhbHVlKS50b0ZpeGVkKDIpO1xyXG5cdFx0fVxyXG5cdFx0Ly8gU01QMi0zNDE2IGVuZFxyXG5cdFx0dGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcblx0XHR0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNhbGN1bGF0ZWRGaXN0TGFzdChhcmdzLCBhZ2dyZWdhdGVUeXBlLCBmaWVsZE5hbWUpIHtcclxuXHRcdGlmICghYXJncy5yb3cuYWN0dWFsVGV4dCkgYXJncy5yb3cuYWN0dWFsVGV4dCA9IGFyZ3Mucm93LmZvcm1hdHRlZFRleHQ7XHJcblx0XHRpZiAoIWFyZ3MuY29sdW1uLmFjdHVhbFRleHQpXHJcblx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgPSBhcmdzLmNvbHVtbi5mb3JtYXR0ZWRUZXh0O1xyXG5cdFx0bGV0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHQoZWwpID0+IGVsLmNvbE5hbWUgPT09IGZpZWxkTmFtZVxyXG5cdFx0KVswXTtcclxuXHRcdGlmIChhcmdzLnJvd0NlbGxUeXBlID09PSBcInZhbHVlXCIgJiYgIWFyZ3Mucm93Lmhhc0NoaWxkKSB7XHJcblx0XHRcdGlmIChhcmdzLmNlbGxTZXRzWzBdKSB7XHJcblx0XHRcdFx0aWYgKGFnZ3JlZ2F0ZVR5cGUgPT09IFwiRmlyc3RcIikge1xyXG5cdFx0XHRcdFx0Zm9yIChcclxuXHRcdFx0XHRcdFx0bGV0IGZpcnN0SW5kZXggPSAwO1xyXG5cdFx0XHRcdFx0XHRmaXJzdEluZGV4IDwgYXJncy5jZWxsU2V0cy5sZW5ndGg7XHJcblx0XHRcdFx0XHRcdGZpcnN0SW5kZXgrK1xyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCA9PVxyXG5cdFx0XHRcdFx0XHRcdFx0MSAmJlxyXG5cdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uQ2VsbFR5cGUgPT0gXCJncmFuZFRvdGFsXCJcclxuXHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJzdHJpbmdcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJudmFyY2hhclwiIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJkYXRldGltZVwiXHJcblx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGhcclxuXHRcdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgcm93T2JqcyA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWVbYXJncy5yb3cucm93SW5kZXhdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocm93T2Jqcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldCByb3dPYmpzQXJyID0gSlNPTi5wYXJzZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdEpTT04uc3RyaW5naWZ5KHJvd09ianMpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgb2JqID0gcm93T2Jqc0Fyci5maWx0ZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsLmFjdHVhbFRleHQgPT0gZmllbGROYW1lICYmXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsLmlzR3JhbmRTdW1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpWzBdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvYmopIGFyZ3MudmFsdWUgPSBvYmoudmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBpc05hTihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHROdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IG51bGxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBhcmdzLmNlbGxTZXRzW2ZpcnN0SW5kZXhdW2ZpZWxkTmFtZV07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibnVtYmVyXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcIm11bHRpcGxlXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcInBlcmNlbnRcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwicGVyY2VudE51bVwiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChhcmdzLnZhbHVlICE9IG51bGwpIGJyZWFrO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZVwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJkYXRldGltZVwiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmICh0aGlzLnBiZi50aW1lKGFyZ3MudmFsdWUpID4gXCIxOTAwLTAxLTAxXCIpIGJyZWFrO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGFyZ3MudmFsdWUpIGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoYWdncmVnYXRlVHlwZSA9PT0gXCJMYXN0XCIpIHtcclxuXHRcdFx0XHRcdGZvciAoXHJcblx0XHRcdFx0XHRcdGxldCBsYXN0SW5kZXggPSBhcmdzLmNlbGxTZXRzLmxlbmd0aCAtIDE7XHJcblx0XHRcdFx0XHRcdGxhc3RJbmRleCA+PSAwO1xyXG5cdFx0XHRcdFx0XHRsYXN0SW5kZXgtLVxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCA9PVxyXG5cdFx0XHRcdFx0XHRcdFx0MSAmJlxyXG5cdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uQ2VsbFR5cGUgPT0gXCJncmFuZFRvdGFsXCJcclxuXHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJzdHJpbmdcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJudmFyY2hhclwiIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJkYXRldGltZVwiXHJcblx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGhcclxuXHRcdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgcm93T2JqcyA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWVbYXJncy5yb3cucm93SW5kZXhdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocm93T2Jqcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldCByb3dPYmpzQXJyID0gSlNPTi5wYXJzZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdEpTT04uc3RyaW5naWZ5KHJvd09ianMpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgb2JqID0gcm93T2Jqc0Fyci5maWx0ZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsLmFjdHVhbFRleHQgPT0gZmllbGROYW1lICYmXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsLmlzR3JhbmRTdW1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpWzBdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvYmopIGFyZ3MudmFsdWUgPSBvYmoudmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBpc05hTihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHROdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IG51bGxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBhcmdzLmNlbGxTZXRzW2xhc3RJbmRleF1bZmllbGROYW1lXTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibnVtYmVyXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcIm11bHRpcGxlXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcInBlcmNlbnRcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwicGVyY2VudE51bVwiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChhcmdzLnZhbHVlICE9IG51bGwpIGJyZWFrO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZVwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJkYXRldGltZVwiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmICh0aGlzLnBiZi50aW1lKGFyZ3MudmFsdWUpID4gXCIxOTAwLTAxLTAxXCIpIGJyZWFrO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGFyZ3MudmFsdWUpIGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJudW1iZXJcIiB8fFxyXG5cdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJtdWx0aXBsZVwiIHx8XHJcblx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcInBlcmNlbnRcIiB8fFxyXG5cdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJwZXJjZW50TnVtXCJcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIXRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbHVtbnMubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0IU51bWJlcih0aGlzLmdyYW5kVG90YWxzW2ZpZWxkTmFtZV0pIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRpc05hTihOdW1iZXIodGhpcy5ncmFuZFRvdGFsc1tmaWVsZE5hbWVdKSlcclxuXHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbZmllbGROYW1lXSA9IDA7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGlmIChhcmdzLmFnZ3JlZ2F0ZVR5cGUgIT09IFwiQ2FsY3VsYXRlZEZpZWxkXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbZmllbGROYW1lXSArPSBOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWVcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbHVtbnMubGVuZ3RoID09IDFcclxuXHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gXCJyb3dcIiArIGFyZ3Mucm93LmFjdHVhbFRleHQgKyBmaWVsZE5hbWUg6KGo56S6KGNlbGw6IGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwidmFsdWVcIiAmJiBhcmdzLmNvbHVtbkNlbGxUeXBlID09PSBcImdyYW5kVG90YWxcIilcclxuXHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHQhTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwicm93XCIgKyBhcmdzLnJvdy5hY3R1YWxUZXh0ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdCkgfHxcclxuXHRcdFx0XHRcdFx0XHRcdGlzTmFOKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHROdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwicm93XCIgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICsgYXJncy5yb3cuYWN0dWFsVGV4dCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XSA9IDA7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICsgYXJncy5yb3cuYWN0dWFsVGV4dCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdF0gKz0gTnVtYmVyKGFyZ3MudmFsdWUpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvLyBcImNvbFwiICsgYXJncy5jb2x1bW4uYWN0dWFsVGV4dCArIGZpZWxkTmFtZSDooajnpLooY2VsbDogYXJncy5yb3dDZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCIgJiYgYXJncy5jb2x1bW5DZWxsVHlwZSA9PT0gXCJ2YWx1ZVwiKVxyXG5cdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdCFOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHQpIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRpc05hTihcclxuXHRcdFx0XHRcdFx0XHRcdFx0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcImNvbFwiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdF0gPSAwO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRdICs9IE51bWJlcihhcmdzLnZhbHVlKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChhcmdzLnJvd0NlbGxUeXBlID09PSBcInN1YlRvdGFsXCIgfHwgYXJncy5yb3cuaGFzQ2hpbGQpIHtcclxuXHRcdFx0Y29uc3QgZGF0YVR5cGUgPSBmaWVsZC5kYXRhVHlwZTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGRhdGFUeXBlID09PSBcInN0cmluZ1wiIHx8XHJcblx0XHRcdFx0ZGF0YVR5cGUgPT09IFwibnZhcmNoYXJcIiB8fFxyXG5cdFx0XHRcdGRhdGFUeXBlID09IFwiZGF0ZVwiIHx8XHJcblx0XHRcdFx0ZGF0YVR5cGUgPT0gXCJkYXRldGltZVwiXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGxldCB2YWx1ZSA9IDA7XHJcblx0XHRcdFx0bGV0IGNoaWxkSGVhZGVycyA9IFtdO1xyXG5cdFx0XHRcdGlmIChhZ2dyZWdhdGVUeXBlID09PSBcIkZpcnN0XCIpIHtcclxuXHRcdFx0XHRcdGxldCBncm91cE5hbWVBcnJheXMgPSBbXTtcclxuXHRcdFx0XHRcdGxldCByb3dzID0gdGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cztcclxuXHRcdFx0XHRcdGZvciAoXHJcblx0XHRcdFx0XHRcdGxldCBpbmRleCA9IGFyZ3Mucm93LmxldmVsO1xyXG5cdFx0XHRcdFx0XHRpbmRleCA8IHJvd3MubGVuZ3RoO1xyXG5cdFx0XHRcdFx0XHRpbmRleCsrXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0Z3JvdXBOYW1lQXJyYXlzLnB1c2gocm93c1tpbmRleF0ubmFtZSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MuY2VsbFNldHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0bGV0IHZhbHVlcyA9IFtdO1xyXG5cdFx0XHRcdFx0XHRsZXQgaGVhZGVyID0gZ3JvdXBOYW1lQXJyYXlzXHJcblx0XHRcdFx0XHRcdFx0Lm1hcCgobmFtZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goYXJncy5jZWxsU2V0c1tpXVtuYW1lXSk7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gYXJncy5jZWxsU2V0c1tpXVtuYW1lXTtcclxuXHRcdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0XHRcdC5qb2luKFwiLVwiKTtcclxuXHRcdFx0XHRcdFx0aWYgKCEoY2hpbGRIZWFkZXJzIGFzIGFueSkuaW5jbHVkZXMoaGVhZGVyKSkge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBmaWx0ZXJPYmo6IGFueSA9IHt9O1xyXG5cdFx0XHRcdFx0XHRcdGdyb3VwTmFtZUFycmF5cy5tYXAoXHJcblx0XHRcdFx0XHRcdFx0XHQobmFtZSwgeCkgPT4gKGZpbHRlck9ialtuYW1lXSA9IHZhbHVlc1t4XSlcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGxldCBfQ2VsbFNldHMgPSBfZmlsdGVyKGFyZ3MuY2VsbFNldHMsIGZpbHRlck9iaik7XHJcblx0XHRcdFx0XHRcdFx0Y2hpbGRIZWFkZXJzLnB1c2goaGVhZGVyKTtcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZSArPSBOdW1iZXIoX0NlbGxTZXRzWzBdW2ZpZWxkTmFtZV0pIHx8IDA7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGFnZ3JlZ2F0ZVR5cGUgPT09IFwiTGFzdFwiKSB7XHJcblx0XHRcdFx0XHRsZXQgZ3JvdXBOYW1lQXJyYXlzID0gW107XHJcblx0XHRcdFx0XHRsZXQgcm93cyA9IHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3M7XHJcblx0XHRcdFx0XHRmb3IgKFxyXG5cdFx0XHRcdFx0XHRsZXQgaW5kZXggPSBhcmdzLnJvdy5sZXZlbDtcclxuXHRcdFx0XHRcdFx0aW5kZXggPCByb3dzLmxlbmd0aDtcclxuXHRcdFx0XHRcdFx0aW5kZXgrK1xyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdGdyb3VwTmFtZUFycmF5cy5wdXNoKHJvd3NbaW5kZXhdLm5hbWUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IGFyZ3MuY2VsbFNldHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuXHRcdFx0XHRcdFx0bGV0IHZhbHVlcyA9IFtdO1xyXG5cdFx0XHRcdFx0XHRsZXQgaGVhZGVyID0gZ3JvdXBOYW1lQXJyYXlzXHJcblx0XHRcdFx0XHRcdFx0Lm1hcCgobmFtZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goYXJncy5jZWxsU2V0c1tpXVtuYW1lXSk7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gYXJncy5jZWxsU2V0c1tpXVtuYW1lXTtcclxuXHRcdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0XHRcdC5qb2luKFwiLVwiKTtcclxuXHRcdFx0XHRcdFx0aWYgKCEoY2hpbGRIZWFkZXJzIGFzIGFueSkuaW5jbHVkZXMoaGVhZGVyKSkge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBmaWx0ZXJPYmo6IGFueSA9IHt9O1xyXG5cdFx0XHRcdFx0XHRcdGdyb3VwTmFtZUFycmF5cy5tYXAoXHJcblx0XHRcdFx0XHRcdFx0XHQobmFtZSwgeCkgPT4gKGZpbHRlck9ialtuYW1lXSA9IHZhbHVlc1t4XSlcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGxldCBfQ2VsbFNldHMgPSBfZmlsdGVyKGFyZ3MuY2VsbFNldHMsIGZpbHRlck9iaik7XHJcblx0XHRcdFx0XHRcdFx0Y2hpbGRIZWFkZXJzLnB1c2goaGVhZGVyKTtcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZSArPVxyXG5cdFx0XHRcdFx0XHRcdFx0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRfQ2VsbFNldHNbX0NlbGxTZXRzLmxlbmd0aCAtIDFdW2ZpZWxkTmFtZV1cclxuXHRcdFx0XHRcdFx0XHRcdCkgfHwgMDtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgIT09IFwiR3JhbmQgVG90YWxcIilcclxuXHRcdFx0XHRcdHRoaXMuY29sdW1uVGV4dHMucHVzaChhcmdzLmNvbHVtbi5hY3R1YWxUZXh0KTtcclxuXHJcblx0XHRcdFx0aWYgKCF0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQhTnVtYmVyKHRoaXMuc3ViVG90YWxzW2ZpZWxkTmFtZV0pIHx8XHJcblx0XHRcdFx0XHRcdGlzTmFOKE51bWJlcih0aGlzLnN1YlRvdGFsc1tmaWVsZE5hbWVdKSlcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnN1YlRvdGFsc1tmaWVsZE5hbWVdID0gMDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMuc3ViVG90YWxzW2ZpZWxkTmFtZV0gKz0gTnVtYmVyKHZhbHVlKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGggPT0gMVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQhTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuc3ViVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdCkgfHxcclxuXHRcdFx0XHRcdFx0aXNOYU4oXHJcblx0XHRcdFx0XHRcdFx0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zdWJUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XVxyXG5cdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuc3ViVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XSA9IDA7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLnN1YlRvdGFsc1tcclxuXHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdF0gKz0gTnVtYmVyKHZhbHVlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gLS0tPiBhbGxEYXRhVmFsdWXkuK3ov5nkuKrljZXlhYPmoLznmoTlgLzkuI3mraPnoa5cclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRhcmdzLmNvbHVtbkNlbGxUeXBlID09PSBcImdyYW5kVG90YWxcIiAmJlxyXG5cdFx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGggPT0gMVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuYWxsRGF0YVZhbHVlICYmIHRoaXMuYWxsRGF0YVZhbHVlLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRhcmdzLnZhbHVlID1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLnN1YlRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgKyBcIkdyYW5kIFRvdGFsXCIgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRdO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5jb2x1bW5UZXh0cyA9IHVuaXFCeSh0aGlzLmNvbHVtblRleHRzLCAoZWwpID0+IGVsKTtcclxuXHRcdFx0XHRcdFx0bGV0IHZhbCA9IDA7XHJcblx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5UZXh0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGVsZW1lbnQgPSB0aGlzLmNvbHVtblRleHRzW2ldO1xyXG5cdFx0XHRcdFx0XHRcdHZhbCArPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zdWJUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgKyBlbGVtZW50ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRdO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSB2YWw7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSB2YWx1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoYXJncy5yb3dDZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCIpIHtcclxuXHRcdFx0Y29uc3QgZGF0YVR5cGUgPSBmaWVsZC5kYXRhVHlwZTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGRhdGFUeXBlID09IFwic3RyaW5nXCIgfHxcclxuXHRcdFx0XHRkYXRhVHlwZSA9PSBcIm52YXJjaGFyXCIgfHxcclxuXHRcdFx0XHRkYXRhVHlwZSA9PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdGRhdGFUeXBlID09IFwiZGF0ZXRpbWVcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRpZiAoIXRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbHVtbnMubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5hbGxEYXRhVmFsdWUgJiYgdGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdGxldCByb3dPYmpzID1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZVt0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGggLSAxXTtcclxuXHRcdFx0XHRcdFx0aWYgKHJvd09ianMpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgcm93T2Jqc0FyciA9IEpTT04ucGFyc2UoXHJcblx0XHRcdFx0XHRcdFx0XHRKU09OLnN0cmluZ2lmeShyb3dPYmpzKVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0bGV0IG9iakFyciA9IHJvd09ianNBcnIuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbC5hY3R1YWxUZXh0ID09IGZpZWxkTmFtZSAmJiBlbC5pc0dyYW5kU3VtXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRpZiAob2JqQXJyICYmIG9iakFyci5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBvYmpBcnJbb2JqQXJyLmxlbmd0aCAtIDFdLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRPYmplY3Qua2V5cyh0aGlzLmdyYW5kVG90YWxzKS5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gdGhpcy5ncmFuZFRvdGFsc1tmaWVsZE5hbWVdO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IHRoaXMuZ3JhbmRUb3RhbHNbZmllbGROYW1lXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aWYgKGFyZ3MuY29sdW1uQ2VsbFR5cGUgPT09IFwiZ3JhbmRUb3RhbFwiKSB7XHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLmFsbERhdGFWYWx1ZSAmJiB0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgcm93T2JqcyA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZVt0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGggLSAxXTtcclxuXHRcdFx0XHRcdFx0XHRpZiAocm93T2Jqcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0bGV0IHJvd09ianNBcnIgPSBKU09OLnBhcnNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRKU09OLnN0cmluZ2lmeShyb3dPYmpzKVxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdGxldCBvYmpBcnIgPSByb3dPYmpzQXJyLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsLmFjdHVhbFRleHQgPT0gZmllbGROYW1lICYmXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwuaXNHcmFuZFN1bVxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChvYmpBcnIgJiYgb2JqQXJyLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvYmpBcnJbb2JqQXJyLmxlbmd0aCAtIDFdLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdFx0T2JqZWN0LmtleXModGhpcy5ncmFuZFRvdGFscykuaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcImNvbFwiICsgYXJncy5jb2x1bW4uYWN0dWFsVGV4dCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuYWxsRGF0YVZhbHVlICYmIHRoaXMuYWxsRGF0YVZhbHVlLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdGxldCByb3dPYmpzID1cclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsRGF0YVZhbHVlW3RoaXMuYWxsRGF0YVZhbHVlLmxlbmd0aCAtIDFdO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByb3dPYmpzQXJyID0gSlNPTi5wYXJzZShcclxuXHRcdFx0XHRcdFx0XHRcdEpTT04uc3RyaW5naWZ5KHJvd09ianMpXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgb2JqQXJyID0gcm93T2Jqc0Fyci5maWx0ZXIoXHJcblx0XHRcdFx0XHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdGVsLmFjdHVhbFRleHQgPT0gZmllbGROYW1lICYmXHJcblx0XHRcdFx0XHRcdFx0XHRcdGVsLmlzR3JhbmRTdW0gJiZcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWwuY29sdW1uSGVhZGVycyA9PSBhcmdzLmNvbHVtbi5hY3R1YWxUZXh0XHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRpZiAob2JqQXJyICYmIG9iakFyci5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBvYmpBcnJbb2JqQXJyLmxlbmd0aCAtIDFdLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRPYmplY3Qua2V5cyh0aGlzLmdyYW5kVG90YWxzKS5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcImNvbFwiICsgYXJncy5jb2x1bW4uYWN0dWFsVGV4dCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0dGhpcy5mb3JtYXRWYWwoYXJncywgZmllbGROYW1lKTtcclxuXHRcdHJldHVybiBhcmdzLnZhbHVlO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBmb3JtYXRWYWwoYXJncywgZmllbGROYW1lKSB7XHJcblx0XHR0aGlzLmNvbmZpZ0ZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG5cdFx0XHRpZiAoZmllbGQuY29sTmFtZSA9PSBmaWVsZE5hbWUpIHtcclxuXHRcdFx0XHRzd2l0Y2ggKGZpZWxkLmRhdGFUeXBlKSB7XHJcblx0XHRcdFx0XHRjYXNlIFwiZGF0ZVwiOlxyXG5cdFx0XHRcdFx0Y2FzZSBcImRhdGV0aW1lXCI6XHJcblx0XHRcdFx0XHRcdGlmIChhcmdzLnZhbHVlKSBhcmdzLnZhbHVlID0gbmV3IERhdGUoYXJncy52YWx1ZSk7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0ZXhjbHVkZUZpZWxkcyhmaWVsZHMsIGRhdGEpIHtcclxuXHRcdGxldCBuYW1lYXJyYXkgPSBbXTtcclxuXHRcdGxldCBhcnJheSA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgcHJvcCBpbiBkYXRhKSB7XHJcblx0XHRcdGFycmF5LnB1c2gocHJvcCk7XHJcblx0XHR9XHJcblx0XHRmb3IgKGxldCBpdGVtIG9mIGZpZWxkcykge1xyXG5cdFx0XHRuYW1lYXJyYXkucHVzaChpdGVtLmNvbE5hbWUpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5leGNsdWRlRmllbGRzID0gZGlmZmVyZW5jZVdpdGgoYXJyYXksIG5hbWVhcnJheSk7XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMuZXhjbHVkZUZpZWxkcy5sZW5ndGggJiZcclxuXHRcdFx0dGhpcy5jb25maWcuZ3JvdXBTZXR0aW5ncyAmJlxyXG5cdFx0XHR0aGlzLmNvbmZpZy5ncm91cFNldHRpbmdzLmxlbmd0aFxyXG5cdFx0KSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5leGNsdWRlRmllbGRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Y29uc3QgZWwgPSB0aGlzLmV4Y2x1ZGVGaWVsZHNbaV07XHJcblx0XHRcdFx0aWYgKHN0YXJ0c1dpdGgoZWwsIHRoaXMuY29uZmlnLmdyb3VwU2V0dGluZ3NbMF0ubmFtZSArIFwiX1wiKSkge1xyXG5cdFx0XHRcdFx0dGhpcy5leGNsdWRlRmllbGRzLnNwbGljZShpLCAxKTtcclxuXHRcdFx0XHRcdGktLTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0SW5mbygpIHtcclxuXHRcdHRoaXMuZGF0ZVBpcGVGb3JtYXQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImRhdGVQaXBlXCIpO1xyXG5cdFx0dGhpcy50cmFuc2xhdGlvbiA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ0cmFuc2xhdGlvblwiKSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgb25GaWVsZERyb3AoYXJnczogRmllbGREcm9wRXZlbnRBcmdzKSB7XHJcblx0XHR0aGlzLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZXMgPSBbLi4uYXJncy5kYXRhU291cmNlU2V0dGluZ3MudmFsdWVzXTtcclxuXHRcdC8vY2hhbmdlIHRoZSBjYWxjdWFsdGVGaWVsZCBtZXRob2QgdXNlIHRoZSBjb3JyZXNwb25kaW5nIGNhbGN1bGF0ZVxyXG5cdFx0Y29uc3QgY2FsY3VhbHRlRmllbGQgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gYXJncy5maWVsZE5hbWUgJiYgZWwuaXNDYWxjdWxhdGVkRmllbGRcclxuXHRcdCk7XHJcblx0XHRpZiAoY2FsY3VhbHRlRmllbGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRhcmdzLmRyb3BGaWVsZC50eXBlID1cclxuXHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmdldENhbGN1bGF0ZU1ldGhvZChcclxuXHRcdFx0XHRcdGNhbGN1YWx0ZUZpZWxkWzBdLmNvbE5hbWVcclxuXHRcdFx0XHQpIGFzIGFueTtcclxuXHRcdFx0YXJncy5kcm9wRmllbGQuY2FwdGlvbiA9IGFyZ3MuZHJvcEZpZWxkLmNhcHRpb25cclxuXHRcdFx0XHQucmVwbGFjZShcIkNhbGN1bGF0ZVwiLCBcIlwiKVxyXG5cdFx0XHRcdC50cmltKCk7XHJcblx0XHR9XHJcblx0XHRmb3IgKFxyXG5cdFx0XHRsZXQgaSA9IDA7XHJcblx0XHRcdGkgPCBhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5maWx0ZXJTZXR0aW5ncy5sZW5ndGg7XHJcblx0XHRcdGkrK1xyXG5cdFx0KSB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5maWx0ZXJTZXR0aW5nc1tpXS5uYW1lID09PVxyXG5cdFx0XHRcdFx0YXJncy5maWVsZE5hbWUgJiZcclxuXHRcdFx0XHRhcmdzLmRyb3BBeGlzID09PSBcIlwiXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLmZpbHRlclNldHRpbmdzLnNwbGljZShpLCAxKTtcclxuXHRcdFx0XHR0aGlzLmZpbHRlclNldHRpbmdzID0gYXJncy5kYXRhU291cmNlU2V0dGluZ3MuZmlsdGVyU2V0dGluZ3M7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIENhbGN1bGF0ZWQgZmllbGTkuovku7bvvJrliJvlu7pcclxuXHRwdWJsaWMgY2FsY3VsYXRlZEZpZWxkQ3JlYXRlKGFyZ3M6IENhbGN1bGF0ZWRGaWVsZENyZWF0ZUV2ZW50QXJncykge1xyXG5cdFx0aWYgKFxyXG5cdFx0XHRhcmdzLmNhbGN1bGF0ZWRGaWVsZC5uYW1lICE9PSBcIlwiICYmXHJcblx0XHRcdGFyZ3MuY2FsY3VsYXRlZEZpZWxkLm5hbWUudHJpbSgpICE9PSBcIlwiXHJcblx0XHQpIHtcclxuXHRcdFx0bGV0IGluZGV4ID1cclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MuZmluZEluZGV4KFxyXG5cdFx0XHRcdFx0KGVsKSA9PiBlbC5uYW1lID09PSBhcmdzLmNhbGN1bGF0ZWRGaWVsZC5uYW1lXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0aWYgKGluZGV4ICE9PSAtMSkge1xyXG5cdFx0XHRcdGlmIChhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtYXRTdHJpbmcgPT09IFwiXCIpIHtcclxuXHRcdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jYWxjdWxhdGVkRmllbGRTZXR0aW5nc1tcclxuXHRcdFx0XHRcdFx0aW5kZXhcclxuXHRcdFx0XHRcdF0uZm9ybWF0U3RyaW5nID0gXCJOMlwiO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3NbXHJcblx0XHRcdFx0XHRcdGluZGV4XHJcblx0XHRcdFx0XHRdLmZvcm1hdFN0cmluZyA9IGFyZ3MuY2FsY3VsYXRlZEZpZWxkLmZvcm1hdFN0cmluZztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWYgKGFyZ3MuY2FsY3VsYXRlZEZpZWxkLmZvcm1hdFN0cmluZyA9PT0gXCJcIikge1xyXG5cdFx0XHRcdFx0YXJncy5jYWxjdWxhdGVkRmllbGQuZm9ybWF0U3RyaW5nID0gXCJOMlwiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvLyDnp7vpmaTph43lpI1cclxuXHRcdFx0bGV0IGZJbmRleCA9IHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkcy5maW5kSW5kZXgoXHJcblx0XHRcdFx0KGYpID0+IGYubmFtZSA9PT0gYXJncy5jYWxjdWxhdGVkRmllbGQubmFtZVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRpZiAoZkluZGV4ID4gLTEpIHtcclxuXHRcdFx0XHR0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMuc3BsaWNlKGZJbmRleCwgMSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8g5Yy56YWN6L+Q566X56ymIEZpcnN0IHx8IExhc3RcclxuXHRcdFx0bGV0IGZvcm11bGFTdHIgPSBhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtdWxhO1xyXG5cdFx0XHRsZXQgcmVnMSA9IC9cIkZpcnN0XFwoKC4rPylcXClcIi9nO1xyXG5cdFx0XHRsZXQgcmVnMiA9IC9cIkxhc3RcXCgoLis/KVxcKVwiL2c7XHJcblx0XHRcdGlmIChyZWcxLnRlc3QoZm9ybXVsYVN0cikgfHwgcmVnMi50ZXN0KGZvcm11bGFTdHIpKSB7XHJcblx0XHRcdFx0Ly8g5Yik5pat5piv5ZCm5a2Y5ZyoRmlyc3QgfHwgTGFzdCDooajovr7lvI9cclxuXHRcdFx0XHRsZXQgbWF0Y2hGaXJzdEZpZWxkcyA9IEFycmF5LmZyb20oXHJcblx0XHRcdFx0XHRmb3JtdWxhU3RyW1wibWF0Y2hBbGxcIl0oL1wiRmlyc3RcXCgoLis/KVxcKVwiL2cpLFxyXG5cdFx0XHRcdFx0KG0pID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFN0cjogbVswXSxcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFdvcmQ6IG1bMV0sXHJcblx0XHRcdFx0XHRcdFx0cmVwbGFjZVZhbHVlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoTWV0aG9kOiBcIkZpcnN0XCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRsZXQgbWF0Y2hMYXN0RmllbGRzID0gQXJyYXkuZnJvbShcclxuXHRcdFx0XHRcdGZvcm11bGFTdHJbXCJtYXRjaEFsbFwiXSgvXCJMYXN0XFwoKC4rPylcXClcIi9nKSxcclxuXHRcdFx0XHRcdChtKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hTdHI6IG1bMF0sXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hXb3JkOiBtWzFdLFxyXG5cdFx0XHRcdFx0XHRcdHJlcGxhY2VWYWx1ZTogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRtYXRjaE1ldGhvZDogXCJMYXN0XCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRsZXQgbWF0Y2hNYXhGaWVsZHMgPSBBcnJheS5mcm9tKFxyXG5cdFx0XHRcdFx0Zm9ybXVsYVN0cltcIm1hdGNoQWxsXCJdKC9cIk1heFxcKCguKz8pXFwpXCIvZyksXHJcblx0XHRcdFx0XHQobSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRcdG1hdGNoU3RyOiBtWzBdLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoV29yZDogbVsxXSxcclxuXHRcdFx0XHRcdFx0XHRyZXBsYWNlVmFsdWU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hNZXRob2Q6IFwiTWF4XCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRsZXQgbWF0Y2hNaW5GaWVsZHMgPSBBcnJheS5mcm9tKFxyXG5cdFx0XHRcdFx0Zm9ybXVsYVN0cltcIm1hdGNoQWxsXCJdKC9cIk1pblxcKCguKz8pXFwpXCIvZyksXHJcblx0XHRcdFx0XHQobSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRcdG1hdGNoU3RyOiBtWzBdLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoV29yZDogbVsxXSxcclxuXHRcdFx0XHRcdFx0XHRyZXBsYWNlVmFsdWU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hNZXRob2Q6IFwiTWluXCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRsZXQgbWF0Y2hTdW1GaWVsZHMgPSBBcnJheS5mcm9tKFxyXG5cdFx0XHRcdFx0Zm9ybXVsYVN0cltcIm1hdGNoQWxsXCJdKC9cIlN1bVxcKCguKz8pXFwpXCIvZyksXHJcblx0XHRcdFx0XHQobSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRcdG1hdGNoU3RyOiBtWzBdLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoV29yZDogbVsxXSxcclxuXHRcdFx0XHRcdFx0XHRyZXBsYWNlVmFsdWU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hNZXRob2Q6IFwiU3VtXCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRsZXQgbWF0Y2hBdmdGaWVsZHMgPSBBcnJheS5mcm9tKFxyXG5cdFx0XHRcdFx0Zm9ybXVsYVN0cltcIm1hdGNoQWxsXCJdKC9cIkF2Z1xcKCguKz8pXFwpXCIvZyksXHJcblx0XHRcdFx0XHQobSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRcdG1hdGNoU3RyOiBtWzBdLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoV29yZDogbVsxXSxcclxuXHRcdFx0XHRcdFx0XHRyZXBsYWNlVmFsdWU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hNZXRob2Q6IFwiQXZnXCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRtYXRjaEZpcnN0RmllbGRzLmV2ZXJ5KCh4KSA9PlxyXG5cdFx0XHRcdFx0XHR0aGlzLmFsbG93ZWRDYWxjdWxhdGVkRmllbGRzLmluY2x1ZGVzKHgubWF0Y2hXb3JkKVxyXG5cdFx0XHRcdFx0KSAmJlxyXG5cdFx0XHRcdFx0bWF0Y2hMYXN0RmllbGRzLmV2ZXJ5KCh4KSA9PlxyXG5cdFx0XHRcdFx0XHR0aGlzLmFsbG93ZWRDYWxjdWxhdGVkRmllbGRzLmluY2x1ZGVzKHgubWF0Y2hXb3JkKVxyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0Ly8g5Yik5patRmlyc3TlkoxMYXN06KGo6L6+5byP5YaF55qE5a2X5q615piv5ZCm5ZCI5rOVXHJcblx0XHRcdFx0XHR0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMucHVzaCh7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGFyZ3MuY2FsY3VsYXRlZEZpZWxkLm5hbWUsXHJcblx0XHRcdFx0XHRcdGZvcm11bGE6IGFyZ3MuY2FsY3VsYXRlZEZpZWxkLmZvcm11bGEsXHJcblx0XHRcdFx0XHRcdG1hdGNoRmllbGRzOiBbXHJcblx0XHRcdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoRmlyc3RGaWVsZHMsXHJcblx0XHRcdFx0XHRcdFx0Li4ubWF0Y2hMYXN0RmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoTWF4RmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoTWluRmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoU3VtRmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoQXZnRmllbGRzLFxyXG5cdFx0XHRcdFx0XHRdLFxyXG5cdFx0XHRcdFx0XHRncmFuZFRvdGFsOiAwLFxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRsZXQgZmllbGROYW1lID0gKFxyXG5cdFx0XHRcdFx0XHRmb3JtdWxhU3RyLnNwbGl0KFwiRmlyc3QoXCIpWzFdIHx8XHJcblx0XHRcdFx0XHRcdGZvcm11bGFTdHIuc3BsaXQoXCJMYXN0KFwiKVsxXVxyXG5cdFx0XHRcdFx0KS5zcGxpdChcIilcIilbMF07XHJcblx0XHRcdFx0XHRhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtdWxhID1cclxuXHRcdFx0XHRcdFx0XCInXFxcIlwiICsgXCJTdW0oXCIgKyBmaWVsZE5hbWUgKyAnKVwiPScgKyBmb3JtdWxhU3RyICsgXCInXCI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBDYWxjdWxhdGVkIGZpZWxk5LqL5Lu277ya5a6M5oiQXHJcblx0cHVibGljIGFjdGlvbkNvbXBsZXRlKGFyZ3MpIHtcclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5hY3Rpb25OYW1lID09PSBcIkZpZWxkIGFnZ3JlZ2F0ZWRcIiB8fFxyXG5cdFx0XHRhcmdzLmFjdGlvbk5hbWUgPT09IFwiRmllbGQgbGlzdCBjbG9zZWRcIlxyXG5cdFx0KSB7XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlcyA9IFtcclxuXHRcdFx0XHQuLi5hcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZXMsXHJcblx0XHRcdF07XHJcblx0XHRcdHRoaXMuc2V0VmFsdWVJdGVtRGF0YSgpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGFyZ3MuYWN0aW9uTmFtZSA9PSBcIkZpZWxkIHJlbW92ZWRcIikge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0YXJncy5maWVsZEluZm8gJiZcclxuXHRcdFx0XHRhcmdzLmZpZWxkSW5mby5maWVsZEl0ZW0gJiZcclxuXHRcdFx0XHRhcmdzLmZpZWxkSW5mby5maWVsZEl0ZW0udHlwZSA9PSBcIkNhbGN1bGF0ZWRGaWVsZFwiXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGxldCBmaWVsZCA9IGFyZ3MuZmllbGRJbmZvLmZpZWxkTmFtZTtcclxuXHRcdFx0XHQvLyBSZW1vdmUgdGhlIGRlbGV0ZWQgY2FsY3VsYXRlZCBmaWVsZCBmcm9tIGFuIHN0b3JlZCBhcnJheS5cclxuXHRcdFx0XHR0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMgPVxyXG5cdFx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzLmZpbHRlcihmdW5jdGlvbiAob2JqKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBvYmoubmFtZSAhPT0gZmllbGQ7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gQ2FsY3VsYXRlZCBmaWVsZOS6i+S7tu+8muW8gOWni1xyXG5cdHB1YmxpYyBhY3Rpb25CZWdpbihhcmdzKSB7XHJcblx0XHRpZiAoYXJncy5hY3Rpb25OYW1lID09PSBcIkVkaXQgY2FsY3VsYXRlZCBmaWVsZFwiKSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzW2ldLm5hbWUgJiZcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZpZWxkTGlzdFtcclxuXHRcdFx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzW2ldLm5hbWVcclxuXHRcdFx0XHRcdF1cclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZpZWxkTGlzdFtcclxuXHRcdFx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzW2ldLm5hbWVcclxuXHRcdFx0XHRcdF0uZm9ybXVsYSA9IHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1tpXS5mb3JtdWxhO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByZXNpemVTdG9wKGFyZ3MpIHtcclxuXHRcdGlmICh0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGgpIHtcclxuXHRcdFx0Y29uc3QgaGVhZGVyX2ZpZWxkID0gdGhpcy5jb25maWcuY29sdW1uc1dpZHRoLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+IGVsLmhlYWRlclRleHQgPT09IGFyZ3MuY29sdW1uLmhlYWRlclRleHRcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKGhlYWRlcl9maWVsZC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0aGVhZGVyX2ZpZWxkWzBdLndpZHRoID0gcGFyc2VJbnQoYXJncy5jb2x1bW4ud2lkdGgpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnLmNvbHVtbnNXaWR0aC5wdXNoKHtcclxuXHRcdFx0XHRcdGhlYWRlclRleHQ6IGFyZ3MuY29sdW1uLmhlYWRlclRleHQsXHJcblx0XHRcdFx0XHR3aWR0aDogcGFyc2VJbnQoYXJncy5jb2x1bW4ud2lkdGgpLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGggPSBbXTtcclxuXHRcdFx0dGhpcy5jb25maWcuY29sdW1uc1dpZHRoLnB1c2goe1xyXG5cdFx0XHRcdGhlYWRlclRleHQ6IGFyZ3MuY29sdW1uLmhlYWRlclRleHQsXHJcblx0XHRcdFx0d2lkdGg6IHBhcnNlSW50KGFyZ3MuY29sdW1uLndpZHRoKSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRjb25zdCBwb3J0bGV0ID0gdGhpcy5wb3J0bGV0O1xyXG5cdFx0cG9ydGxldC5jb25maWcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcblx0XHRjb25zdCBpbmRleCA9IHRoaXMucG9ydGxldHMuZmluZEluZGV4KCh4KSA9PiB4Lm5ld0lkID09PSBwb3J0bGV0Lm5ld0lkKTtcclxuXHRcdGlmIChpbmRleCA+IC0xKSB0aGlzLnBvcnRsZXRzW2luZGV4XSA9IHBvcnRsZXQ7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNldENvbHVtbnNSZW5kZXIoYXJncykge1xyXG5cdFx0aWYgKGFyZ3Muc3RhY2tlZENvbHVtbnMpIHtcclxuXHRcdFx0YXJncy5zdGFja2VkQ29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRjb2wuZm9ybWF0ICYmXHJcblx0XHRcdFx0XHQoY29sLmZvcm1hdC5pbmRleE9mKFwiTlwiKSAhPT0gLTEgfHxcclxuXHRcdFx0XHRcdFx0Y29sLmZvcm1hdCA9PT0gXCJwZXJjZW50XCIgfHxcclxuXHRcdFx0XHRcdFx0Y29sLmZvcm1hdC5pbmRleE9mKFwiUFwiKSAhPT0gLTEpXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRjb2wudGV4dEFsaWduID0gXCJSaWdodFwiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuY29uZmlnLmNvbHVtbnNXaWR0aCkge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IChhcmdzIGFzIGFueSkuY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGFyZ3MuY29sdW1uc1tpXS5oZWFkZXJUZXh0ID09PSBcIlwiIHx8XHJcblx0XHRcdFx0XHQhYXJncy5jb2x1bW5zW2ldLmhlYWRlclRleHRcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGNvbHVtbl9yb3cgPSB0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGguZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHQoZWwpID0+IGVsLmhlYWRlclRleHQgPT09IGFyZ3MuY29sdW1uc1tpXS5oZWFkZXJUZXh0XHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0aWYgKGNvbHVtbl9yb3cubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRhcmdzLmNvbHVtbnNbaV0ud2lkdGggPSBjb2x1bW5fcm93WzBdLndpZHRoO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb25zdCBoZWFkZXJUZXh0ID0gYXJncy5jb2x1bW5zW2ldLmhlYWRlclRleHRcclxuXHRcdFx0XHRcdFx0LnJlcGxhY2UoL1xccysvZywgXCJcIilcclxuXHRcdFx0XHRcdFx0LnNwbGl0KFwiLlwiKTtcclxuXHRcdFx0XHRcdGlmIChoZWFkZXJUZXh0ICYmIGhlYWRlclRleHQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGguZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdFx0XHRcdGVsLmhlYWRlclRleHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoL1xccysvZywgXCJcIilcclxuXHRcdFx0XHRcdFx0XHRcdFx0LnRvTG93ZXJDYXNlKCkgPT09XHJcblx0XHRcdFx0XHRcdFx0XHRoZWFkZXJUZXh0W2hlYWRlclRleHQubGVuZ3RoIC0gMV0udG9Mb3dlckNhc2UoKVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRpZiAoY29sdW1uLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0XHQoYXJncyBhcyBhbnkpLmNvbHVtbnNbaV0ud2lkdGggPSBjb2x1bW5bMF0ud2lkdGg7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gZGF0ZSBmb3JtYXQgYWJvdXQgcXVhcnRlcmx5XHJcblx0XHRcdFx0bGV0IHBpdm90VmFsdWVzOiBhbnkgPSB0aGlzLnBpdm90T2JqLnBpdm90VmFsdWVzO1xyXG5cdFx0XHRcdGlmICh0aGlzLmZvcm1hdERhdGVzICYmIHRoaXMuZm9ybWF0RGF0ZXMubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRsZXQgZGF0ZUZpZWxkcyA9IHRoaXMuZm9ybWF0RGF0ZXMubWFwKChlbCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZWwubmFtZTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgayA9IDE7IGsgPCBwaXZvdFZhbHVlcy5sZW5ndGg7IGsrKykge1xyXG5cdFx0XHRcdFx0XHRmb3IgKFxyXG5cdFx0XHRcdFx0XHRcdGxldCBqID0gMDtcclxuXHRcdFx0XHRcdFx0XHRwaXZvdFZhbHVlc1trXSAhPSBudWxsICYmIGogPCBwaXZvdFZhbHVlc1trXS5sZW5ndGg7XHJcblx0XHRcdFx0XHRcdFx0aisrXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdICE9IG51bGwgJiZcclxuXHRcdFx0XHRcdFx0XHRcdChqID09IDBcclxuXHRcdFx0XHRcdFx0XHRcdFx0PyBkYXRlRmllbGRzLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNba11bal0udmFsdWVTb3J0LmF4aXNcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0XHRcdDogZGF0ZUZpZWxkcy5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdLmFjdHVhbFRleHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICApKVxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly9DdXN0b21pemUgdGhlIFJvdyBoZWFkZXJzL0NvbHVtbiBoZWFkZXJzIGJhc2VkIG9uIHlvdXIgbmVlZHNcclxuXHRcdFx0XHRcdFx0XHRcdGxldCBoZWFkZXJzO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGogPT09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aGVhZGVycyA9IHBpdm90VmFsdWVzW2tdW2pdLmFjdHVhbFRleHQ7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBoZWFkZXJzID0gcGl2b3RWYWx1ZXNba11bal0uZm9ybWF0dGVkVGV4dDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aGVhZGVycyA9IHBpdm90VmFsdWVzW2tdW2pdLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGhlYWRlcnMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IGRhdGUgPSBuZXcgRGF0ZShoZWFkZXJzKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBxdWFydGVyID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRNYXRoLmZsb29yKGRhdGUuZ2V0TW9udGgoKSAvIDMpICsgMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBmb3JtYXQ7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZvcm1hdERhdGVzLm1hcCgoZWwpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaiA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsLm5hbWUgPT1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNba11bal0udmFsdWVTb3J0LmF4aXNcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gZWwuZm9ybWF0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsLm5hbWUgPT1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNba11bal0uYWN0dWFsVGV4dFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBlbC5mb3JtYXQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNba11bal0uZm9ybWF0dGVkVGV4dCA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5nZXRRdWFydGVyVmFsdWUoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cXVhcnRlclxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8vIGlmKHRoaXMucGl2b3RPYmopIHRoaXMucGl2b3RPYmoucmVmcmVzaERhdGEoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBvbkxvYWQoKTogdm9pZCB7XHJcblx0XHQvLyBTTVAyLTE1NjUxIOW8gOWQr+iZmuaLn+a7muWKqOW5tnNvcnTliJflkI7vvIzmnaXlm57mu5rliqjkvJrlr7zoh7TmlbDmja7nqbrnmb1cclxuXHRcdC8vIOWumOaWuemTvuaOpSBodHRwczovL2VqMi5zeW5jZnVzaW9uLmNvbS9hbmd1bGFyL2RvY3VtZW50YXRpb24vcGl2b3R2aWV3L3ZpcnR1YWwtc2Nyb2xsaW5nI3ZpcnR1YWwtc2Nyb2xsaW5nLWZvci1zdGF0aWMtZmllbGQtbGlzdFxyXG5cdFx0Ly8gRGVtb+mTvuaOpSBodHRwczovL3N0YWNrYmxpdHouY29tL2VkaXQvZ2l0aHViLTdnZ2sydS00cmt6YjM/ZmlsZT1zcmMlMkZhcHAuY29tcG9uZW50LnRzXHJcblx0XHQodGhpcy5maWVsZGxpc3RPYmogYXMgUGl2b3RGaWVsZExpc3RDb21wb25lbnQpLnBpdm90R3JpZE1vZHVsZSA9IHRoaXNcclxuXHRcdFx0LnBpdm90T2JqIGFzIFBpdm90Vmlld0NvbXBvbmVudDtcclxuXHR9XHJcblxyXG5cdG9uZGF0YUJvdW5kKCl7XHJcblx0XHRpZiAoQnJvd3Nlci5pc0RldmljZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBpdm90T2JqLmVsZW1lbnQuc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMucGl2b3RPYmouYWxsb3dDYWxjdWxhdGVkRmllbGQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnBpdm90T2JqLnNob3dGaWVsZExpc3QgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZW5naW5lUG9wdWxhdGVkKGFyZ3MpIHtcclxuXHRcdGxldCBjbG9uZWRWYWx1ZXM6IElQaXZvdFZhbHVlcztcclxuXHRcdGxldCBjdXJyZW50UGl2b3RWYWx1ZXM6IGFueSA9IHRoaXMuZ2V0Q2xvbmVkUGl2b3RWYWx1ZXMoXHJcblx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLnBpdm90VmFsdWVzXHJcblx0XHQpO1xyXG5cdFx0bGV0IHBhZ2VTZXR0aW5nczogSVBhZ2VTZXR0aW5ncyA9XHJcblx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLnBhZ2VTZXR0aW5ncztcclxuXHJcblx0XHRpZiAodGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZ2VuZXJhdGVHcmlkRGF0YSkge1xyXG5cdFx0XHQvLyDmsqHms5XlpI3njrAgaHR0cHM6Ly9yYWlzZWxwLmF0bGFzc2lhbi5uZXQvYnJvd3NlL1NNUDItMTcyNCDlpITnkIbnmoTov5nkuKrpl67popjmg4XlhrUsIOebtOaOpeazqOmHiuaOiVxyXG5cdFx0XHQvLyDkuIvpnaLov5nmrrXku6PnoIHkvJrlvbHlk40gaHR0cHM6Ly9yYWlzZWxwLmF0bGFzc2lhbi5uZXQvYnJvd3NlL1NNUDItMTIxMzlcclxuXHRcdFx0Ly8gdGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZ2VuZXJhdGVHcmlkRGF0YShcclxuXHRcdFx0Ly8gXHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncyxcclxuXHRcdFx0Ly8gXHR0cnVlXHJcblx0XHRcdC8vICk7XHJcblx0XHRcdGNsb25lZFZhbHVlcyA9IHRoaXMuZ2V0Q2xvbmVkUGl2b3RWYWx1ZXMoXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUucGl2b3RWYWx1ZXNcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLnBpdm90VmFsdWVzID0gY3VycmVudFBpdm90VmFsdWVzO1xyXG5cclxuXHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUucGFnZVNldHRpbmdzID0gcGFnZVNldHRpbmdzO1xyXG5cclxuXHRcdFx0Ly8gSGVyZSBcImNsb25lZFZhbHVlc1wiIGNvbnRhaW5zIHRoZSB3aG9sZSBwaXZvdCB2YWx1ZXMuXHJcblx0XHRcdHRoaXMuYWxsRGF0YVZhbHVlID0gY2xvbmVkVmFsdWVzO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRDbG9uZWRQaXZvdFZhbHVlcyhwaXZvdFZhbHVlczogSVBpdm90VmFsdWVzKTogSVBpdm90VmFsdWVzIHtcclxuXHRcdGxldCBjbG9uZWRTZXRzOiBJUGl2b3RWYWx1ZXMgPSBbXTtcclxuXHRcdGlmIChwaXZvdFZhbHVlcyAmJiBwaXZvdFZhbHVlcy5sZW5ndGgpIHtcclxuXHRcdFx0Zm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHBpdm90VmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0aWYgKHBpdm90VmFsdWVzW2ldKSB7XHJcblx0XHRcdFx0XHRjbG9uZWRTZXRzW2ldID0gW107XHJcblx0XHRcdFx0XHRmb3IgKGxldCBqOiBudW1iZXIgPSAwOyBqIDwgcGl2b3RWYWx1ZXNbaV0ubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0aWYgKHBpdm90VmFsdWVzW2ldW2pdKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgKi9cclxuXHRcdFx0XHRcdFx0XHRjbG9uZWRTZXRzW2ldW2pdID0gdGhpcy5nZXRDbG9uZWRQaXZvdFZhbHVlT2JqKFxyXG5cdFx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNbaV1bal0gYXMgeyBba2V5OiBzdHJpbmddOiBPYmplY3QgfVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSAqL1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gY2xvbmVkU2V0cztcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0Q2xvbmVkUGl2b3RWYWx1ZU9iaihkYXRhOiB7IFtrZXk6IHN0cmluZ106IE9iamVjdCB9KToge1xyXG5cdFx0W2tleTogc3RyaW5nXTogT2JqZWN0O1xyXG5cdH0ge1xyXG5cdFx0bGV0IGtleVBvczogbnVtYmVyID0gMDtcclxuXHRcdGxldCBmcmFtZWRTZXQ6IGFueSA9IHt9O1xyXG5cdFx0aWYgKCEoZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB1bmRlZmluZWQpKSB7XHJcblx0XHRcdGxldCBmaWVsZHM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMoZGF0YSk7XHJcblx0XHRcdHdoaWxlIChrZXlQb3MgPCBmaWVsZHMubGVuZ3RoKSB7XHJcblx0XHRcdFx0ZnJhbWVkU2V0W2ZpZWxkc1trZXlQb3NdXSA9IGRhdGFbZmllbGRzW2tleVBvc11dO1xyXG5cdFx0XHRcdGtleVBvcysrO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRmcmFtZWRTZXQgPSBkYXRhO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZyYW1lZFNldDtcclxuXHR9XHJcblxyXG5cdC8vI3JlZ2lvbiBGaWx0ZXJpbmcgdGhlIFRyZWVOb2Rlc1xyXG5cdHByaXZhdGUgc2VhcmNoTm9kZXMoYXJncykge1xyXG5cdFx0bGV0IF90ZXh0ID0gYXJncy5tYXNrZWRWYWx1ZTtcclxuXHRcdGxldCBwcmVkaWNhdHMgPSBbXSxcclxuXHRcdFx0X2FycmF5ID0gW10sXHJcblx0XHRcdF9maWx0ZXIgPSBbXTtcclxuXHRcdGlmIChfdGV4dCA9PSBcIlwiKSB7XHJcblx0XHRcdHRoaXMuY2hhbmdlRGF0YVNvdXJjZShcclxuXHRcdFx0XHQoKHRoaXMgYXMgYW55KS5maWVsZGxpc3RPYmoudHJlZVZpZXdNb2R1bGUgYXMgYW55KS5nZXRUcmVlRGF0YSgpXHJcblx0XHRcdCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsZXQgcHJlZGljYXRlID0gbmV3IFByZWRpY2F0ZShcImNhcHRpb25cIiwgXCJjb250YWluc1wiLCBfdGV4dCwgdHJ1ZSk7XHJcblx0XHRcdGxldCBmaWx0ZXJlZExpc3QgPSBuZXcgRGF0YU1hbmFnZXIoXHJcblx0XHRcdFx0KCh0aGlzIGFzIGFueSkuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlIGFzIGFueSkuZ2V0VHJlZURhdGEoKVxyXG5cdFx0XHQpLmV4ZWN1dGVMb2NhbChuZXcgUXVlcnkoKS53aGVyZShwcmVkaWNhdGUpKTtcclxuXHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBmaWx0ZXJlZExpc3QubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRfZmlsdGVyLnB1c2goZmlsdGVyZWRMaXN0W2pdW1wiaWRcIl0pO1xyXG5cdFx0XHRcdGxldCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJJdGVtcyhcclxuXHRcdFx0XHRcdGZpbHRlcmVkTGlzdFtqXSxcclxuXHRcdFx0XHRcdChcclxuXHRcdFx0XHRcdFx0KHRoaXMgYXMgYW55KS5maWVsZGxpc3RPYmoudHJlZVZpZXdNb2R1bGUgYXMgYW55XHJcblx0XHRcdFx0XHQpLmdldFRyZWVEYXRhKClcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZmlsdGVycy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRfYXJyYXkuaW5kZXhPZihmaWx0ZXJzW2ldKSA9PSAtMSAmJlxyXG5cdFx0XHRcdFx0XHRmaWx0ZXJzW2ldICE9IG51bGxcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRfYXJyYXkucHVzaChmaWx0ZXJzW2ldKTtcclxuXHRcdFx0XHRcdFx0cHJlZGljYXRzLnB1c2goXHJcblx0XHRcdFx0XHRcdFx0bmV3IFByZWRpY2F0ZShcImlkXCIsIFwiZXF1YWxcIiwgZmlsdGVyc1tpXSwgZmFsc2UpXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChwcmVkaWNhdHMubGVuZ3RoID09IDApIHtcclxuXHRcdFx0XHR0aGlzLmNoYW5nZURhdGFTb3VyY2UoW10pO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGxldCBxdWVyeSA9IG5ldyBRdWVyeSgpLndoZXJlKFByZWRpY2F0ZS5vcihwcmVkaWNhdHMpKTtcclxuXHRcdFx0XHRsZXQgbmV3TGlzdCA9IG5ldyBEYXRhTWFuYWdlcihcclxuXHRcdFx0XHRcdChcclxuXHRcdFx0XHRcdFx0KHRoaXMgYXMgYW55KS5maWVsZGxpc3RPYmoudHJlZVZpZXdNb2R1bGUgYXMgYW55XHJcblx0XHRcdFx0XHQpLmdldFRyZWVEYXRhKClcclxuXHRcdFx0XHQpLmV4ZWN1dGVMb2NhbChxdWVyeSk7XHJcblx0XHRcdFx0dGhpcy5jaGFuZ2VEYXRhU291cmNlKG5ld0xpc3QpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvL0ZpbmQgdGhlIFBhcmVudCBOb2RlcyBmb3IgY29ycmVzcG9uZGluZyBjaGlsZHNcclxuXHRwdWJsaWMgZ2V0RmlsdGVySXRlbXMoZkxpc3QsIGxpc3QpIHtcclxuXHRcdGxldCBub2RlcyA9IFtdO1xyXG5cdFx0bm9kZXMucHVzaChmTGlzdFtcImlkXCJdKTtcclxuXHRcdGxldCBxdWVyeTIgPSBuZXcgUXVlcnkoKS53aGVyZShcImlkXCIsIFwiZXF1YWxcIiwgZkxpc3RbXCJwaWRcIl0sIGZhbHNlKTtcclxuXHRcdGxldCBmTGlzdDEgPSBuZXcgRGF0YU1hbmFnZXIobGlzdCkuZXhlY3V0ZUxvY2FsKHF1ZXJ5Mik7XHJcblx0XHRpZiAoZkxpc3QxLmxlbmd0aCAhPSAwKSB7XHJcblx0XHRcdGxldCBwTm9kZSA9IHRoaXMuZ2V0RmlsdGVySXRlbXMoZkxpc3QxWzBdLCBsaXN0KTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwTm9kZS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGlmIChub2Rlcy5pbmRleE9mKHBOb2RlW2ldKSA9PSAtMSAmJiBwTm9kZVtpXSAhPSBudWxsKVxyXG5cdFx0XHRcdFx0bm9kZXMucHVzaChwTm9kZVtpXSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIG5vZGVzO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG5vZGVzO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGNyZWF0ZWQoYXJnczogYW55KSB7XHJcblx0XHRpZiAodGhpcy5maWVsZGxpc3RPYmogJiYgIXRoaXMuZmllbGRsaXN0T2JqLmVuZ2luZU1vZHVsZS5maWVsZHMpIHtcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmouZW5naW5lTW9kdWxlLmZpZWxkcyA9IFtdO1xyXG5cdFx0fVxyXG5cdFx0bGV0IHNlYXJjaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuXHRcdHNlYXJjaC5pZCA9IFwicGl2b3RTZWFyY2hCb3hcIiArIHRoaXMuZmllbGRsaXN0T2JqLmVsZW1lbnQuaWQ7XHJcblx0XHRsZXQgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG5cdFx0XHRcIiNcIiArIHRoaXMuZmllbGRsaXN0T2JqLmVsZW1lbnQuaWQgKyBcIl9Db250YWluZXIgLmUtZmllbGQtdGFibGVcIlxyXG5cdFx0KTtcclxuXHRcdGlmIChlbCkgZWwucHJlcGVuZChzZWFyY2gpO1xyXG5cdFx0dGhpcy5waXZvdFNlYXJjaEJveCA9IG5ldyBNYXNrZWRUZXh0Qm94KHtcclxuXHRcdFx0cGxhY2Vob2xkZXI6IHRoaXMudHJhbnNsYXRpb24uU0VBUkNIIHx8IFwiLlNFQVJDSFwiLFxyXG5cdFx0XHRjc3NDbGFzczogXCJwaXZvdC1zZWFyY2hcIixcclxuXHRcdFx0Y2hhbmdlOiB0aGlzLnNlYXJjaE5vZGVzLmJpbmQodGhpcyksXHJcblx0XHR9KTtcclxuXHRcdHRoaXMucGl2b3RTZWFyY2hCb3guYXBwZW5kVG8oXHJcblx0XHRcdFwiI3Bpdm90U2VhcmNoQm94XCIgKyB0aGlzLmZpZWxkbGlzdE9iai5lbGVtZW50LmlkXHJcblx0XHQpO1xyXG5cclxuXHRcdC8vIE5FVyBEYXNoYm9hcmQg54K55Ye7XCJhcHBseVwi5pe277yM6K+35rGC5paw5pWw5o2uXHJcblx0XHRsZXQgYXBwbHlCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmouZWxlbWVudC5pZCArIFwiX0RlZmVyVXBkYXRlQnV0dG9uMVwiXHJcblx0XHQpO1xyXG5cclxuXHRcdGFwcGx5QnRuICYmXHJcblx0XHRcdGFwcGx5QnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5wYWdlTG9hZGluZyA9IHRydWU7XHJcblx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXREYXRhQnlQb3J0bGV0c05ldyhcclxuXHRcdFx0XHRcdFt0aGlzLnBvcnRsZXRdLFxyXG5cdFx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdHRoaXMuUGl2b3RfRGF0YSA9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRSZXN1bHRCeURhdGFUYWJsZShcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMucG9ydGxldCxcclxuXHRcdFx0XHRcdFx0XHRcdGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZC5pZFxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmRhdGFTb3VyY2UgPVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuUGl2b3RfRGF0YTtcclxuXHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLlBpdm90X0RhdGEpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZ3JvdXBzID0gdGhpcy5jb25maWcueGF4aXMuZ3JvdXBzO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByb3dzID0gW107XHJcblx0XHRcdFx0XHRcdFx0aWYgKGdyb3Vwcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgZ2l0ZW0gb2YgZ3JvdXBzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gZ2l0ZW0ubmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZmllbGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGdpdGVtLnNob3dTdWJUb3RhbHMgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uc2hvd1N1YlRvdGFscztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRnaXRlbS5jYXB0aW9uID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdWYWx1ZSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy50cmFuc2xhdGlvbltcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0ubGFuZ0NvZGVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdF0gfHxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdDb2RlIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRnaXRlbS5jYXB0aW9uO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJvd3MucHVzaChnaXRlbSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuUGl2b3RfRGF0YS5tYXAoKGRhdGEpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChkYXRhW3Jvdy5uYW1lXSA9PT0gXCJcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFbcm93Lm5hbWVdID0gXCJudWxsXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLnBpdm90T2JqKSB0aGlzLnBpdm90T2JqLnJlZnJlc2hEYXRhKCk7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0bnVsbCxcclxuXHRcdFx0XHRcdGZhbHNlLFxyXG5cdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmQsXHJcblx0XHRcdFx0XHRmYWxzZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRcclxuXHRcdC8vIOeCueWHu1wiY2FuY2VsXCLml7bvvIzmgaLlpI3ljp/lp4vmlbDmja5cclxuXHRcdGxldCBjYW5jZWxCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmouZWxlbWVudC5pZCArIFwiX0RlZmVyVXBkYXRlQnV0dG9uMlwiXHJcblx0XHQpO1xyXG5cclxuXHRcdGNhbmNlbEJ0biAmJlxyXG5cdFx0XHRjYW5jZWxCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5kYXRhU291cmNlID1cclxuXHRcdFx0XHRcdFsuLi50aGlzLlBpdm90X0RhdGFdO1xyXG5cdFx0XHRcdGlmICh0aGlzLnBpdm90T2JqKSB0aGlzLnBpdm90T2JqLnJlZnJlc2hEYXRhKCk7XHJcblx0XHRcdFx0dGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcblx0XHRcdFx0dGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0XHR9KTtcdFx0XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZmllbGRMaXN0UmVmcmVzaGVkKGFyZ3MpIHtcclxuXHRcdGlmICh0aGlzLnBpdm90U2VhcmNoQm94KSB7XHJcblx0XHRcdHRoaXMucGl2b3RTZWFyY2hCb3gudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHR0aGlzLmNoYW5nZURhdGFTb3VyY2UoXHJcblx0XHRcdFx0KHRoaXMuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlIGFzIGFueSkuZ2V0VHJlZURhdGEoKVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjaGFuZ2VEYXRhU291cmNlKGRhdGEpIHtcclxuXHRcdGxldCBmaWVsZFRhYmxlID0gKHRoaXMgYXMgYW55KS5maWVsZGxpc3RPYmoudHJlZVZpZXdNb2R1bGUuZmllbGRUYWJsZTtcclxuXHRcdGlmIChmaWVsZFRhYmxlKSB7XHJcblx0XHRcdGZpZWxkVGFibGUuZmllbGRzID0ge1xyXG5cdFx0XHRcdGRhdGFTb3VyY2U6IGRhdGEsXHJcblx0XHRcdFx0aWQ6IFwiaWRcIixcclxuXHRcdFx0XHR0ZXh0OiBcImNhcHRpb25cIixcclxuXHRcdFx0XHRpc0NoZWNrZWQ6IFwiaXNTZWxlY3RlZFwiLFxyXG5cdFx0XHRcdHBhcmVudElEOiBcInBpZFwiLFxyXG5cdFx0XHRcdGljb25Dc3M6IFwic3ByaXRlQ3NzQ2xhc3NcIixcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vU01QMi0yOTU3IGZpeCB0aGUgZGF0ZSBpc3N1ZSBvbiB0aGUgcmF3IGRhdGFcclxuXHRwdWJsaWMgZHJpbGxUaHJvdWdoKGFyZ3M6IERyaWxsVGhyb3VnaEV2ZW50QXJncykge1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmdyaWRDb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGRhdGEgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdFx0KGVsKSA9PiBlbC5jb2xOYW1lID09PSBhcmdzLmdyaWRDb2x1bW5zW2ldLmZpZWxkXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGRhdGFbMF0uZGF0YVR5cGUgPT09IFwiZGF0ZVwiIHx8XHJcblx0XHRcdFx0XHRkYXRhWzBdLmRhdGFUeXBlID09PSBcImRhdGV0aW1lXCJcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGFyZ3MuZ3JpZENvbHVtbnNbaV0udHlwZSA9IFwiZGF0ZVwiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHQvLyNlbmRyZWdpb25cclxuXHJcblx0cHJpdmF0ZSBzZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKG9iaiwgZGF0YSwgY29kZSkge1xyXG5cdFx0aWYgKGNvZGUgPT09IC0xKSB7XHJcblx0XHRcdG9iai5zdHlsZS5jb2xvciA9IGRhdGEubmVnYUZvbnRDb2xvcjtcclxuXHRcdFx0b2JqLnN0eWxlLmZvbnRGYW1pbHkgPSBkYXRhLm5lZ2FGb250RmFtaWx5VmFsdWU7XHJcblx0XHRcdG9iai5zdHlsZS5mb250U2l6ZSA9IGRhdGEubmVnYUZvbnRTaXplVmFsdWU7XHJcblx0XHRcdG9iai5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBkYXRhLm5lZ2FCYWNrZ3JvdW5kQ29sb3I7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRvYmouc3R5bGUuY29sb3IgPSBkYXRhLmZvbnRDb2xvcjtcclxuXHRcdFx0b2JqLnN0eWxlLmZvbnRGYW1pbHkgPSBkYXRhLmZvbnRGYW1pbHlWYWx1ZTtcclxuXHRcdFx0b2JqLnN0eWxlLmZvbnRTaXplID0gZGF0YS5mb250U2l6ZVZhbHVlO1xyXG5cdFx0XHRvYmouc3R5bGUuYmFja2dyb3VuZENvbG9yID0gZGF0YS5iYWNrZ3JvdW5kQ29sb3I7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNldENvbXBhcmVDb25kaXRpb25hbChcclxuXHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0ZGF0YVxyXG5cdCkge1xyXG5cdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTEpID09IDApIHtcclxuXHRcdFx0c3dpdGNoIChkYXRhLmNvbXBhcmVTZWxlY3QpIHtcclxuXHRcdFx0XHRjYXNlIFwiTGVzc1RoYW5cIjogLy8g5bCP5LqOXHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuT3JFcXVhbFRvXCI6IC8vIOWwj+S6juetieS6jlxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJHcmVhdGVyVGhhblwiOiAvLyDlpKfkuo5cclxuXHRcdFx0XHRjYXNlIFwiR3JlYXRlclRoYW5PckVxdWFsVG9cIjogLy8g5aSn5LqO562J5LqOXHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiTm90RXF1YWxzXCI6IC8vIOS4jeetieS6jlxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJCZXR3ZWVuXCI6IC8vIHZhbHVlMTw9IHZhbCA8PXZhbHVlMlxyXG5cdFx0XHRcdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTIpID09PSAxKSB7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRkYXRhLmNvbXBhcmVWYWx1ZTJcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiTm90QmV0d2VlblwiOiAvLyB2YWwgPj0gdmFsdWUyLCB2YWwgPD0gdmFsdWUxXHJcblx0XHRcdFx0XHRpZiAoTWF0aC5zaWduKGRhdGEuY29tcGFyZVZhbHVlMikgPT09IDEpIHtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEuY29tcGFyZVZhbHVlMlxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoTWF0aC5zaWduKGRhdGEuY29tcGFyZVZhbHVlMSkgPT09IDEpIHtcclxuXHRcdFx0c3dpdGNoIChkYXRhLmNvbXBhcmVTZWxlY3QpIHtcclxuXHRcdFx0XHRjYXNlIFwiTGVzc1RoYW5cIjogLy8g5bCP5LqOXHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuT3JFcXVhbFRvXCI6IC8vIOWwj+S6juetieS6jlxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IE51bWJlcihkYXRhLmNvbXBhcmVWYWx1ZTEpO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkxlc3NUaGFuXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiR3JlYXRlclRoYW5cIjogLy8g5aSn5LqOXHJcblx0XHRcdFx0Y2FzZSBcIkdyZWF0ZXJUaGFuT3JFcXVhbFRvXCI6IC8vIOWkp+S6juetieS6jlxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKGRhdGEuY29tcGFyZVZhbHVlMSk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJFcXVhbHNcIjogLy8g562J5LqOXHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBOdW1iZXIoZGF0YS5jb21wYXJlVmFsdWUxKTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkVxdWFsc1wiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJOb3RFcXVhbHNcIjogLy8g5LiN562J5LqOXHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gTnVtYmVyKGRhdGEuY29tcGFyZVZhbHVlMSk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHQvLyBwdXNo6L+b5pWw57uEXHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBOdW1iZXIoZGF0YS5jb21wYXJlVmFsdWUxKTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkdyZWF0ZXJUaGFuXCI7XHJcblx0XHRcdFx0XHQvLyBwdXNo6L+b5pWw57uEXHJcblxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5PckVxdWFsVG9cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQmV0d2VlblwiOiAvLyB2YWx1ZTE8PSB2YWwgPD12YWx1ZTJcclxuXHRcdFx0XHRcdGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUyKSA9PT0gMSkge1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS5jb21wYXJlVmFsdWUxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRkYXRhLmNvbXBhcmVWYWx1ZTJcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiTm90QmV0d2VlblwiOiAvLyB2YWwgPj0gdmFsdWUyLCB2YWwgPD0gdmFsdWUxXHJcblx0XHRcdFx0XHRpZiAoTWF0aC5zaWduKGRhdGEuY29tcGFyZVZhbHVlMikgPT09IDEpIHtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEuY29tcGFyZVZhbHVlMVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHRcdC8vIHB1c2jov5vmlbDnu4RcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEuY29tcGFyZVZhbHVlMlxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0XHQvLyBwdXNo6L+b5pWw57uEXHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUxKSA9PT0gLTEpIHtcclxuXHRcdFx0c3dpdGNoIChkYXRhLmNvbXBhcmVTZWxlY3QpIHtcclxuXHRcdFx0XHRjYXNlIFwiTGVzc1RoYW5cIjogLy8g5bCP5LqOXHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuT3JFcXVhbFRvXCI6IC8vIOWwj+S6juetieS6jlxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gZGF0YS5jb21wYXJlU2VsZWN0O1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkdyZWF0ZXJUaGFuXCI6IC8vIOWkp+S6jlxyXG5cdFx0XHRcdGNhc2UgXCJHcmVhdGVyVGhhbk9yRXF1YWxUb1wiOiAvLyDlpKfkuo7nrYnkuo5cclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhbk9yRXF1YWxUb1wiO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gZGF0YS5jb21wYXJlVmFsdWUxO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkJldHdlZW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiRXF1YWxzXCI6IC8vIOetieS6jlxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJFcXVhbHNcIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRjYXNlIFwiTm90RXF1YWxzXCI6IC8vIOS4jeetieS6jlxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJOb3RFcXVhbHNcIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJCZXR3ZWVuXCI6IC8vIHZhbHVlMTw9IHZhbCA8PXZhbHVlMlxyXG5cdFx0XHRcdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTIpKSB7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gZGF0YS5jb21wYXJlVmFsdWUxO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gZGF0YS5jb21wYXJlVmFsdWUyO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTIgPSBkYXRhLmNvbXBhcmVWYWx1ZTI7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIk5vdEJldHdlZW5cIjogLy8gdmFsID49IHZhbHVlMiwgdmFsIDw9IHZhbHVlMVxyXG5cdFx0XHRcdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTIpKSB7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJMZXNzVGhhblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IGRhdGEuY29tcGFyZVZhbHVlMjtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IGRhdGEuY29tcGFyZVZhbHVlMjtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIk5vdEJldHdlZW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0UXVhcnRlclZhbHVlKGZvcm1hdCwgZGF0ZSwgcXVhcnRlcikge1xyXG5cdFx0bGV0IHllYXI6IGFueTtcclxuXHRcdHN3aXRjaCAoZm9ybWF0KSB7XHJcblx0XHRcdGNhc2UgXCJRMSAyMDIxXCI6XHJcblx0XHRcdFx0eWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuXHRcdFx0XHRyZXR1cm4gXCJRXCIgKyBxdWFydGVyICsgXCIgXCIgKyB5ZWFyO1xyXG5cdFx0XHRjYXNlIFwiUTEgMjFcIjpcclxuXHRcdFx0XHR5ZWFyID0gKGRhdGUgYXMgYW55KS5nZXRZZWFyKCkgLSAxMDA7XHJcblx0XHRcdFx0cmV0dXJuIFwiUVwiICsgcXVhcnRlciArIFwiIFwiICsgeWVhcjtcclxuXHRcdFx0Y2FzZSBcIjIwMjEgUTFcIjpcclxuXHRcdFx0XHR5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xyXG5cdFx0XHRcdHJldHVybiB5ZWFyICsgXCIgXCIgKyBcIlFcIiArIHF1YXJ0ZXI7XHJcblx0XHRcdGNhc2UgXCIyMSBRMVwiOlxyXG5cdFx0XHRcdHllYXIgPSAoZGF0ZSBhcyBhbnkpLmdldFllYXIoKSAtIDEwMDtcclxuXHRcdFx0XHRyZXR1cm4geWVhciArIFwiIFwiICsgXCJRXCIgKyBxdWFydGVyO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y3VzdG9taXNlQ2VsbChhcmdzOiBRdWVyeUNlbGxJbmZvRXZlbnRBcmdzKSB7XHJcblx0XHRpZiAoYXJncy5jb2x1bW4udHlwZSA9PT0gXCJkYXRlXCIgfHwgYXJncy5jb2x1bW4udHlwZSA9PT0gXCJkYXRlVGltZVwiKSB7XHJcblx0XHRcdGNvbnN0IHsgZmllbGQgfSA9IGFyZ3MuY29sdW1uO1xyXG5cdFx0XHRpZiAoIWFyZ3MuZGF0YVtmaWVsZF0pIHtcclxuXHRcdFx0XHRhcmdzLmNvbHVtbi50eXBlID0gXCJzdHJpbmdcIjtcclxuXHRcdFx0XHRhcmdzLmNvbHVtbi5mb3JtYXQgPSBcIlwiO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcGFyYW0gdGltZUFycmF5IOaVsOe7hOWvueixoSBbe1wiZGF0ZVwiOlwiMjAyMS0wMS0wMVwifSx7XCJkYXRlXCI6XCIyMDIxLTAyLTAxXCJ9XVxyXG5cdCAqIEBwYXJhbSBlbmREYXRlIOaIquiHs+aXtumXtFxyXG5cdCAqIEBwYXJhbSBpbnRlcnZhbCDml7bpl7Tpl7TpmpQgeWVhciAvIHF1YXJ0ZXIgLyBtb250aFxyXG5cdCAqIEBwYXJhbSB0aW1lS2V5IOaXtumXtOWtl+auteWQjSBkYXRlXHJcblx0ICogQHJldHVybnMg5YiS5YiG5ZCO55qE5pe26Ze05YiG57uE5a+56LGhXHJcblx0ICovXHJcblx0Z2V0VGltZVJhbmdlcyh0aW1lQXJyYXksIGVuZERhdGUsIGludGVydmFsLCB0aW1lS2V5KSB7XHJcblx0XHQvLyDlsIbml7bpl7TlrZfnrKbkuLLovazmjaLkuLogbW9tZW50IOWvueixoVxyXG5cdFx0Y29uc3QgZGF0ZXMgPSB0aW1lQXJyYXkubWFwKChpdGVtKSA9PiBtb21lbnQoaXRlbVt0aW1lS2V5IHx8IFwiZGF0ZVwiXSkpO1xyXG5cclxuXHRcdC8vIOWIhumalOesplxyXG5cdFx0Y29uc3QgZGVsaW1pdGVyID0gXCItXCI7XHJcblxyXG5cdFx0Ly8g5om+5Yiw5pyA5bCP5pe26Ze05ZKM5pyA5aSn5pe26Ze0XHJcblx0XHRjb25zdCBtaW5EYXRlID0gbW9tZW50Lm1pbihkYXRlcyk7XHJcblx0XHRjb25zdCBtYXhEYXRlID0gbW9tZW50KGVuZERhdGUpO1xyXG5cclxuXHRcdC8vIOWIneWni+WMlue7k+aenOWvueixoVxyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Ly8g5qC55o2u5YWl5Y+C6L+b6KGM5YiS5YiGXHJcblx0XHRpZiAoaW50ZXJ2YWwgPT09IFwieWVhclwiKSB7XHJcblx0XHRcdGNvbnN0IHN0YXJ0WWVhciA9IG1pbkRhdGUueWVhcigpO1xyXG5cdFx0XHRjb25zdCBlbmRZZWFyID0gbWF4RGF0ZS55ZWFyKCk7XHJcblxyXG5cdFx0XHRmb3IgKGxldCB5ZWFyID0gc3RhcnRZZWFyOyB5ZWFyIDw9IGVuZFllYXI7IHllYXIrKykge1xyXG5cdFx0XHRcdHJlc3VsdFt5ZWFyXSA9IFtdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRkYXRlcy5mb3JFYWNoKChkYXRlLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHllYXIgPSBkYXRlLnllYXIoKTtcclxuXHRcdFx0XHRyZXN1bHRbeWVhcl0ucHVzaCh0aW1lQXJyYXlbaW5kZXhdKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9IGVsc2UgaWYgKGludGVydmFsID09PSBcInF1YXJ0ZXJcIikge1xyXG5cdFx0XHQvLyDlrZjlgqjlraPluqblrZfnrKbkuLJcclxuXHRcdFx0Y29uc3QgcXVhcnRlcnMgPSBbXTtcclxuXHJcblx0XHRcdC8vIOmAkOS4gOmBjeWOhuavj+S4quWto+W6plxyXG5cdFx0XHRmb3IgKFxyXG5cdFx0XHRcdGxldCBjdXJyZW50RGF0ZSA9IG1pbkRhdGUuY2xvbmUoKTtcclxuXHRcdFx0XHRjdXJyZW50RGF0ZS5pc1NhbWVPckJlZm9yZShtYXhEYXRlKTtcclxuXHRcdFx0XHRjdXJyZW50RGF0ZS5hZGQoMywgXCJtb250aHNcIilcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0Y29uc3QgeWVhciA9IGN1cnJlbnREYXRlLnllYXIoKTtcclxuXHRcdFx0XHRjb25zdCBxdWFydGVyID0gTWF0aC5jZWlsKChjdXJyZW50RGF0ZS5tb250aCgpICsgMSkgLyAzKTsgLy8g6K6h566X5a2j5bqmXHJcblx0XHRcdFx0cXVhcnRlcnMucHVzaChgJHt5ZWFyfSR7ZGVsaW1pdGVyfVEke3F1YXJ0ZXJ9YCk7IC8vIOagvOW8j+WMluW5tua3u+WKoOWIsOaVsOe7hFxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyDovpPlh7rmiYDmnInlraPluqZcclxuXHRcdFx0cXVhcnRlcnMuZm9yRWFjaCgocXVhcnRlciwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRyZXN1bHRbcXVhcnRlcl0gPSBbXTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRkYXRlcy5mb3JFYWNoKChkYXRlLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHllYXIgPSBkYXRlLnllYXIoKTtcclxuXHRcdFx0XHRjb25zdCBxdWFydGVyID0gZGF0ZS5xdWFydGVyKCk7IC8vIOiOt+WPluWto+W6plxyXG5cdFx0XHRcdGlmIChxdWFydGVyID09PSAxKVxyXG5cdFx0XHRcdFx0cmVzdWx0W3llYXIgKyBkZWxpbWl0ZXIgKyBcIlExXCJdLnB1c2godGltZUFycmF5W2luZGV4XSk7XHJcblx0XHRcdFx0ZWxzZSBpZiAocXVhcnRlciA9PT0gMilcclxuXHRcdFx0XHRcdHJlc3VsdFt5ZWFyICsgZGVsaW1pdGVyICsgXCJRMlwiXS5wdXNoKHRpbWVBcnJheVtpbmRleF0pO1xyXG5cdFx0XHRcdGVsc2UgaWYgKHF1YXJ0ZXIgPT09IDMpXHJcblx0XHRcdFx0XHRyZXN1bHRbeWVhciArIGRlbGltaXRlciArIFwiUTNcIl0ucHVzaCh0aW1lQXJyYXlbaW5kZXhdKTtcclxuXHRcdFx0XHRlbHNlIGlmIChxdWFydGVyID09PSA0KVxyXG5cdFx0XHRcdFx0cmVzdWx0W3llYXIgKyBkZWxpbWl0ZXIgKyBcIlE0XCJdLnB1c2godGltZUFycmF5W2luZGV4XSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIGlmIChpbnRlcnZhbCA9PT0gXCJtb250aFwiKSB7XHJcblx0XHRcdC8vIOWtmOWCqOaciOS7veWtl+espuS4slxyXG5cdFx0XHRjb25zdCBtb250aHMgPSBbXTtcclxuXHJcblx0XHRcdC8vIOmAkOS4gOmBjeWOhuavj+S4quaciFxyXG5cdFx0XHRmb3IgKFxyXG5cdFx0XHRcdGxldCBjdXJyZW50RGF0ZSA9IG1pbkRhdGUuY2xvbmUoKTtcclxuXHRcdFx0XHRjdXJyZW50RGF0ZS5pc1NhbWVPckJlZm9yZShtYXhEYXRlKTtcclxuXHRcdFx0XHRjdXJyZW50RGF0ZS5hZGQoMSwgXCJtb250aHNcIilcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0bW9udGhzLnB1c2goY3VycmVudERhdGUuZm9ybWF0KGBZWVlZJHtkZWxpbWl0ZXJ9TU1gKSk7IC8vIOagvOW8j+WMluW5tua3u+WKoOWIsOaVsOe7hFxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyDovpPlh7rmiYDmnInmnIjku71cclxuXHRcdFx0bW9udGhzLmZvckVhY2goKG1vbnRoLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdHJlc3VsdFttb250aF0gPSBbXTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRkYXRlcy5mb3JFYWNoKChkYXRlLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHllYXIgPSBkYXRlLnllYXIoKTtcclxuXHRcdFx0XHRjb25zdCBtb250aCA9IChkYXRlLm1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKTsgLy8gMC0xMVxyXG5cdFx0XHRcdHJlc3VsdFt5ZWFyICsgZGVsaW1pdGVyICsgbW9udGhdLnB1c2godGltZUFycmF5W2luZGV4XSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiDorqHnrpflh6DkvZXnrpfmlbDlubPmlrnmm7RcclxuXHQgKiBAcGFyYW0gdmFsdWVzIOaVsOe7hCBbMCwgMCwgMC4yNTc1XVxyXG5cdCAqIEByZXR1cm5zXHJcblx0ICovXHJcblx0Y2FsY3VsYXRlR3Jvd3RoUmF0ZSh2YWx1ZXMpIHtcclxuXHRcdGNvbnN0IHByb2R1Y3QgPSB2YWx1ZXMucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjICogKDEgKyB2YWwpLCAxKTtcclxuXHRcdGlmIChwcm9kdWN0ID49IDApIHtcclxuXHRcdFx0cmV0dXJuIE1hdGgucG93KHByb2R1Y3QsIDEgLyB2YWx1ZXMubGVuZ3RoKSAtIDE7XHJcblx0XHR9IGVsc2UgaWYgKHByb2R1Y3QgPCAwKSB7XHJcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoICUgMiA9PSAwKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMubnRocm9vdChwcm9kdWN0LCB2YWx1ZXMubGVuZ3RoKSAtIDE7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0bnRocm9vdCh4LCBuKSB7XHJcblx0XHRsZXQgbmcgPSBuICUgMjtcclxuXHRcdGlmIChuZyA9PSAxIHx8IHggPCAwKSB4ID0gLXg7XHJcblx0XHR2YXIgciA9IE1hdGgucG93KHgsIDEgLyBuKTtcclxuXHRcdG4gPSBNYXRoLnBvdyhyLCBuKTtcclxuXHJcblx0XHRpZiAoTWF0aC5hYnMoeCAtIG4pIDwgMSAmJiB4ID4gMCA9PT0gbiA+IDApIHJldHVybiBuZyA/IC1yIDogcjtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIOagh+WHhuWBj+W3rlxyXG5cdCAqIEBwYXJhbSB2YWx1ZXMg5pWw57uEIFswLCAwLCAtMC40Nzc1XVxyXG5cdCAqIEByZXR1cm5zIDAuMjc1Njg0NzUzNTM4MDQ2M1xyXG5cdCAqL1xyXG5cdGNhbGN1bGF0ZVN0YW5kYXJkRGV2aWF0aW9uKHZhbHVlcykge1xyXG5cdFx0Y29uc3QgbiA9IHZhbHVlcy5sZW5ndGg7XHJcblxyXG5cdFx0Ly8g5qOA5p+l5pWw5o2u54K55pWw6YePXHJcblx0XHRpZiAobiA8IDIpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwi6Iez5bCR6ZyA6KaB5Lik5Liq5pWw5o2u54K55p2l6K6h566X5qC35pys5qCH5YeG5YGP5beuXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIOiuoeeul+Wdh+WAvFxyXG5cdFx0Y29uc3QgbWVhbiA9IHZhbHVlcy5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKyB2YWwsIDApIC8gbjtcclxuXHJcblx0XHQvLyDorqHnrpfmlrnlt65cclxuXHRcdGNvbnN0IHZhcmlhbmNlID1cclxuXHRcdFx0dmFsdWVzLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyArIE1hdGgucG93KHZhbCAtIG1lYW4sIDIpLCAwKSAvXHJcblx0XHRcdChuIC0gMSk7XHJcblxyXG5cdFx0Ly8g6L+U5Zue5qCH5YeG5YGP5beuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KHZhcmlhbmNlKTtcclxuXHR9XHJcbn1cclxuIl19
|
|
4443
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FkZ2V0LXBpdm90LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL3JhaXNlLWNvbW1vbi1saWIvIiwic291cmNlcyI6WyJsaWIvZGFzaGJvYXJkL2dhZGdldC1ncm91cC9nYWRnZXQtcGl2b3QvZ2FkZ2V0LXBpdm90LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQ04saUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxFQUNULHVCQUF1QixFQUN2QixNQUFNLEVBQ04sUUFBUSxHQUNSLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFFTix1QkFBdUIsRUFDdkIsa0JBQWtCLEVBR2xCLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBQ3ZCLHNCQUFzQixFQUV0QixrQkFBa0IsRUFHbEIsb0JBQW9CLEVBSXBCLG1CQUFtQixHQUduQixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFDTixJQUFJLEVBQ0osWUFBWSxFQUNaLE9BQU8sR0FDUCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFDTixNQUFNLEVBQ04sY0FBYyxFQUNkLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sSUFBSSxPQUFPLEVBQ2pCLEtBQUssRUFDTCxLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sR0FDTixNQUFNLFFBQVEsQ0FBQztBQUNoQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQ04sb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQix1QkFBdUIsR0FDdkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDdkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FB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OztJQUMvQiw4Q0FBc0M7O0lBQ3RDLCtDQUVFOzs7OztJQUNGLDJDQUF5Qjs7Ozs7SUFDekIsNENBQTBCOzs7OztJQUMxQiw2Q0FTRTs7SUFDRiw0Q0FFRTs7SUFDRixtREFNRTs7Ozs7SUFDRiwyQ0FBeUI7Ozs7O0lBQ3pCLHNEQUEyQzs7Ozs7SUFDM0MsdURBQTRDOzs7OztJQUM1Qyw4Q0FHRTs7Ozs7SUFDRiw2Q0FBMkI7Ozs7O0lBQzNCLDZDQUEyQjs7SUFDM0IsOENBQXNCOztJQUN0QiwwQ0FBbUM7O0lBQ25DLDJDQUF3Qjs7Ozs7SUFDeEIsZ0RBQThCOztJQUM5QiwyQ0FBbUI7O0lBdS9DbkIsOENBQW9COzs7OztJQXAvQ25CLHVEQUF3RDs7Ozs7SUFDeEQsZ0RBQTBDOzs7OztJQUMxQyxtQ0FBOEI7Ozs7O0lBQzlCLG1DQUErQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXHJcblx0Q29tcG9uZW50LFxyXG5cdElucHV0LFxyXG5cdE9uSW5pdCxcclxuXHRWaWV3Q2hpbGQsXHJcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcblx0SW5qZWN0LFxyXG5cdE9wdGlvbmFsLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQge1xyXG5cdElEYXRhT3B0aW9ucyxcclxuXHRQaXZvdEZpZWxkTGlzdENvbXBvbmVudCxcclxuXHRQaXZvdFZpZXdDb21wb25lbnQsXHJcblx0RW5naW5lUG9wdWxhdGVkRXZlbnRBcmdzLFxyXG5cdElEYXRhU2V0LFxyXG5cdFRvb2xiYXJTZXJ2aWNlLFxyXG5cdEZpZWxkTGlzdFNlcnZpY2UsXHJcblx0TnVtYmVyRm9ybWF0dGluZ1NlcnZpY2UsXHJcblx0Q2FsY3VsYXRlZEZpZWxkU2VydmljZSxcclxuXHRDYWxjdWxhdGVkRmllbGRDcmVhdGVFdmVudEFyZ3MsXHJcblx0R3JvdXBpbmdCYXJTZXJ2aWNlLFxyXG5cdEZpZWxkRHJvcEV2ZW50QXJncyxcclxuXHRJU29ydCxcclxuXHRWaXJ0dWFsU2Nyb2xsU2VydmljZSxcclxuXHRJUGl2b3RWYWx1ZXMsXHJcblx0SVBhZ2VTZXR0aW5ncyxcclxuXHREcmlsbFRocm91Z2hFdmVudEFyZ3MsXHJcblx0RHJpbGxUaHJvdWdoU2VydmljZSxcclxuXHRQaXZvdEFjdGlvbkZhaWx1cmVFdmVudEFyZ3MsXHJcblx0UXVlcnlDZWxsSW5mb0V2ZW50QXJncyxcclxufSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItcGl2b3R2aWV3XCI7XHJcbmltcG9ydCB7XHJcblx0TDEwbixcclxuXHRlbmFibGVSaXBwbGUsXHJcblx0QnJvd3NlcixcclxufSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWJhc2VcIjtcclxuaW1wb3J0IHsgR3JpZFNldHRpbmdzIH0gZnJvbSBcIkBzeW5jZnVzaW9uL2VqMi1waXZvdHZpZXcvc3JjL3Bpdm90dmlldy9tb2RlbC9ncmlkc2V0dGluZ3NcIjtcclxuaW1wb3J0IHtcclxuXHRzb3J0QnksXHJcblx0ZGlmZmVyZW5jZVdpdGgsXHJcblx0c3RhcnRzV2l0aCxcclxuXHRjbG9uZURlZXAsXHJcblx0dW5pcUJ5LFxyXG5cdGZpbHRlciBhcyBfZmlsdGVyLFxyXG5cdG1heEJ5LFxyXG5cdG1pbkJ5LFxyXG5cdHN1bUJ5LFxyXG5cdG1lYW5CeSxcclxufSBmcm9tIFwibG9kYXNoXCI7XHJcbmltcG9ydCB7IERhc2hib2FyZFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vZGFzaGJvYXJkLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtcclxuXHRBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRBTExfQUdHUkVHQVRFX1RZUEVTLFxyXG5cdERhc2hib2FyZFBvcmxldHNTZXJ2aWNlLFxyXG59IGZyb20gXCIuLi8uLi9kYXNoYm9hcmRQb3JsZXRzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgTWFza2VkVGV4dEJveCB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItaW5wdXRzL3NyYy9tYXNrZWR0ZXh0Ym94L21hc2tlZHRleHRib3hcIjtcclxuaW1wb3J0IHsgRGF0YU1hbmFnZXIgfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWRhdGEvc3JjL21hbmFnZXJcIjtcclxuaW1wb3J0IHsgUHJlZGljYXRlLCBRdWVyeSB9IGZyb20gXCJAc3luY2Z1c2lvbi9lajItZGF0YS9zcmMvcXVlcnlcIjtcclxuaW1wb3J0IHsgRGF0YVV0aWwgfSBmcm9tIFwiQHN5bmNmdXNpb24vZWoyLWRhdGFcIjtcclxuaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XHJcbmltcG9ydCB7IFBCRl9UT0tFTiB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlL0luamVjdGlvblRva2VuXCI7XHJcblxyXG5lbmFibGVSaXBwbGUoZmFsc2UpO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6IFwicnMtZ2FkZ2V0LXBpdm90XCIsXHJcblx0dGVtcGxhdGVVcmw6IFwiLi9nYWRnZXQtcGl2b3QuY29tcG9uZW50Lmh0bWxcIixcclxuXHRzdHlsZVVybHM6IFtcIi4vZ2FkZ2V0LXBpdm90LmNvbXBvbmVudC5zY3NzXCJdLFxyXG5cdHByb3ZpZGVyczogW1xyXG5cdFx0VG9vbGJhclNlcnZpY2UsXHJcblx0XHRGaWVsZExpc3RTZXJ2aWNlLFxyXG5cdFx0TnVtYmVyRm9ybWF0dGluZ1NlcnZpY2UsXHJcblx0XHRDYWxjdWxhdGVkRmllbGRTZXJ2aWNlLFxyXG5cdFx0R3JvdXBpbmdCYXJTZXJ2aWNlLFxyXG5cdFx0VmlydHVhbFNjcm9sbFNlcnZpY2UsXHJcblx0XHREcmlsbFRocm91Z2hTZXJ2aWNlLFxyXG5cdF0sXHJcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHYWRnZXRQaXZvdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblx0QElucHV0KCkgcG9ydGxldDtcclxuXHRASW5wdXQoKSBkYXNoYm9hcmQ7XHJcblx0QElucHV0KCkgcG9ydGxldHM7XHJcblx0cHJpdmF0ZSBQaXZvdF9EYXRhOiBJRGF0YVNldFtdO1xyXG5cdHByaXZhdGUgY29uZmlnO1xyXG5cdHB1YmxpYyBkYXRhU291cmNlU2V0dGluZ3M6IElEYXRhT3B0aW9ucztcclxuXHRwdWJsaWMgZ3JpZFNldHRpbmdzOiBHcmlkU2V0dGluZ3M7XHJcblx0cHJpdmF0ZSBleGNsdWRlRmllbGRzID0gW107XHJcblx0cHJpdmF0ZSBmaWx0ZXJTZXR0aW5ncyA9IFtdO1xyXG5cdHByaXZhdGUgZGF0ZVBpcGVGb3JtYXQ7XHJcblx0cHVibGljIHRyYW5zbGF0aW9uO1xyXG5cdEBWaWV3Q2hpbGQoXCJwaXZvdHZpZXdcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcblx0cHJpdmF0ZSBwaXZvdE9iajogUGl2b3RWaWV3Q29tcG9uZW50O1xyXG5cdEBWaWV3Q2hpbGQoXCJwaXZvdGZpZWxkbGlzdFwiLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuXHRwdWJsaWMgZmllbGRsaXN0T2JqOiBQaXZvdEZpZWxkTGlzdENvbXBvbmVudDtcclxuXHRwcml2YXRlIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xyXG5cdHByaXZhdGUgZ3JhbmRUb3RhbHMgPSB7fTtcclxuXHRwcml2YXRlIHN1YlRvdGFscyA9IHt9O1xyXG5cdHByaXZhdGUgZmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdHByaXZhdGUgcHJldmlvdXNTb3J0OiBJU29ydDtcclxuXHRwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblx0cHJpdmF0ZSBhbGxEYXRhVmFsdWU7XHJcblx0Ly8gcHJpdmF0ZSBjYWxjdWxhdGVkRmllbGRTZXR0aW5ncztcclxuXHRwcml2YXRlIGlzSW5pdDogYm9vbGVhbiA9IHRydWU7XHJcblx0cHJpdmF0ZSBwaXZvdFNlYXJjaEJveDogTWFza2VkVGV4dEJveDtcclxuXHRwdWJsaWMgdG9vbHRpcFNldHRpbmdzID0ge1xyXG5cdFx0ZW5hYmxlOiBmYWxzZSxcclxuXHR9O1xyXG5cdHByaXZhdGUgY29sdW1uVGV4dHMgPSBbXTtcclxuXHRwcml2YXRlIGNvbmZpZ0ZpZWxkcyA9IFtdO1xyXG5cdHByaXZhdGUgcXVhcnRlckZvcm1hdCA9IFtcclxuXHRcdHsgdmFsdWU6IFwiMDMvMjAyMVwiLCBmb3JtYXQ6IFwiTU0veXl5eVwiIH0sXHJcblx0XHR7IHZhbHVlOiBcIjAzLzIxXCIsIGZvcm1hdDogXCJNTS9kZFwiIH0sXHJcblx0XHR7IHZhbHVlOiBcIjMvMjAyMVwiLCBmb3JtYXQ6IFwiTS95eXl5XCIgfSxcclxuXHRcdHsgdmFsdWU6IFwiMy8yMVwiLCBmb3JtYXQ6IFwiTS95eVwiIH0sXHJcblx0XHR7IHZhbHVlOiBcIk1hcmNoIDIwMjFcIiwgZm9ybWF0OiBcIk1NTU0geXl5eVwiIH0sXHJcblx0XHR7IHZhbHVlOiBcIk1hciwgMjAyMVwiLCBmb3JtYXQ6IFwiTU1NLCB5eXl5XCIgfSxcclxuXHRcdHsgdmFsdWU6IFwiTWFyY2gsIDIwMjFcIiwgZm9ybWF0OiBcIk1NTU0sIHl5eXlcIiB9LFxyXG5cdFx0eyB2YWx1ZTogXCIyMDIxXCIsIGZvcm1hdDogXCJ5eXl5XCIgfSxcclxuXHRdO1xyXG5cdHpvb21TZXR0aW5ncyA9IHtcclxuXHRcdGVuYWJsZTogZmFsc2UsXHJcblx0fTtcclxuXHRpdGVtRGF0YVR5cGVTb3J0QXJyID0gW1xyXG5cdFx0XCJBc3NldHNcIixcclxuXHRcdFwiTGlhYmlsaXRpZXNcIixcclxuXHRcdFwiRXF1aXR5XCIsXHJcblx0XHRcIlAmTFwiLFxyXG5cdFx0XCJDYXNoZmxvd1wiLFxyXG5cdF07XHJcblx0cHJpdmF0ZSBmb3JtYXREYXRlcyA9IFtdO1xyXG5cdHByaXZhdGUgY3VzdG9tQ2FsY3VsYXRlZEZpZWxkczogYW55W10gPSBbXTsgLy8g6Ieq5a6a5LmJ6K6h566X5YiXXHJcblx0cHJpdmF0ZSBhbGxvd2VkQ2FsY3VsYXRlZEZpZWxkczogYW55W10gPSBbXTsgLy8g5YWB6K646Ieq5a6a5LmJ566X5rOV55qE5a2X5q61XHJcblx0cHJpdmF0ZSB6ZXJvRm9ybWF0RGF0YSA9IHtcclxuXHRcdGVtcHR5TGlzdDogW10sXHJcblx0XHRoZ0xpc3Q6IFtdLFxyXG5cdH07XHJcblx0cHJpdmF0ZSBtaWxsaW9uRmllbGRzID0gW107XHJcblx0cHJpdmF0ZSB0ZW1wU3VidG90YWxzID0gW107XHJcblx0cHVibGljIG9yZGVyQnlDb2x1bW5zOyAvLyBFZzogXCJEdWVEYXRlLCBTZXF1ZW5jZVwiXHJcblx0cHVibGljIGlzQXBwbHlJUlI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRwdWJsaWMgY2FsY0lSUkRhdGE6IGFueTtcclxuXHRwcml2YXRlIHBlcmNlbnROdW1GaWVsZHMgPSBbXTtcclxuXHRwdWJsaWMgcGFnZUxvYWRpbmc7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSBkYXNoYm9hcmRQb3JsZXRzU2VydmljZTogRGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIGRhc2hib2FyZFNlcnZpY2U6IERhc2hib2FyZFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcblx0XHRAT3B0aW9uYWwoKSBASW5qZWN0KFBCRl9UT0tFTikgcHJpdmF0ZSBwYmY6IGFueSxcclxuXHJcblx0KSB7fVxyXG5cclxuXHRuZ09uSW5pdCgpIHtcclxuXHRcdHRoaXMuZ2V0SW5mbygpO1xyXG5cdFx0TDEwbi5sb2FkKHtcclxuXHRcdFx0XCJlbi1VU1wiOiB7XHJcblx0XHRcdFx0cGl2b3R2aWV3OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0XHRwaXZvdGZpZWxkbGlzdDogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdH0sXHJcblx0XHRcdHpoOiB7XHJcblx0XHRcdFx0cGl2b3R2aWV3OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0XHRwaXZvdGZpZWxkbGlzdDogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdH0sXHJcblx0XHRcdFwiemgtSGFudC1IS1wiOiB7XHJcblx0XHRcdFx0cGl2b3R2aWV3OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0XHRwaXZvdGZpZWxkbGlzdDogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdH0sXHJcblx0XHRcdGphOiB7XHJcblx0XHRcdFx0cGl2b3R2aWV3OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0XHRwaXZvdGZpZWxkbGlzdDogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdH0sXHJcblx0XHRcdGtvOiB7XHJcblx0XHRcdFx0cGl2b3R2aWV3OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0XHRwaXZvdGZpZWxkbGlzdDogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdH0sXHJcblx0XHRcdGZyOiB7XHJcblx0XHRcdFx0cGl2b3R2aWV3OiBBR0dSRUdBVEVfVFlQRVNfVEVYVCxcclxuXHRcdFx0XHRwaXZvdGZpZWxkbGlzdDogQUdHUkVHQVRFX1RZUEVTX1RFWFQsXHJcblx0XHRcdH0sXHJcblx0XHR9KTtcclxuXHRcdHRoaXMuZ2V0RGF0YSgpO1xyXG5cdH1cclxuXHJcblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRjaGFuZ2VQaXZvdCgpLnN1YnNjcmliZSgodXBkYXRlZCkgPT4ge1xyXG5cdFx0XHRcdGlmICh1cGRhdGVkID09PSB0aGlzLnBvcnRsZXQubmV3SWQpIHtcclxuXHRcdFx0XHRcdHRoaXMuZ2V0RGF0YSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkU2VydmljZS5nZXRTdGFydFJlZnJlc2goKS5zdWJzY3JpYmUoKGRhc2hib2FyZElkKSA9PiB7XHJcblx0XHRcdFx0aWYgKGRhc2hib2FyZElkID09PSB0aGlzLmRhc2hib2FyZC5pZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5wYWdlTG9hZGluZyA9IHRydWU7XHJcblx0XHRcdFx0XHR0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZFNlcnZpY2UuZ2V0VXBkYXRlZCgpLnN1YnNjcmliZSgobmV3SWQpID0+IHtcclxuXHRcdFx0XHRpZiAobmV3SWQgPT09IHRoaXMucG9ydGxldC5uZXdJZCB8fCBuZXdJZCA9PT0gdGhpcy5wb3J0bGV0LmlkKSB7XHJcblx0XHRcdFx0XHR0aGlzLmdldERhdGEoKTtcclxuXHRcdFx0XHRcdGlmICh0aGlzLnBpdm90T2JqKSB0aGlzLnBpdm90T2JqLnJlZnJlc2hEYXRhKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuXHRcdFx0dGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldFJlZnJlc2hHYWRnZXQoKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuXHRcdFx0XHRpZiAoIWUpIHtcclxuXHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc3QgaWQgPSBlW1wibmV3SWRcIl07XHJcblx0XHRcdFx0aWYgKGlkID09PSB0aGlzLnBvcnRsZXQubmV3SWQgfHwgaWQgPT09IHRoaXMucG9ydGxldC5pZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5wYWdlTG9hZGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0dGhpcy5nZXREYXRhKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuXHRcdFx0dGhpcy5kYXNoYm9hcmRTZXJ2aWNlLmdldFRhYmxlRm9ybWF0KCkuc3Vic2NyaWJlKCh1cGRhdGVkKSA9PiB7XHJcblx0XHRcdFx0aWYgKHVwZGF0ZWQgPT09IHRoaXMucG9ydGxldC5uZXdJZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5nZXREYXRhKCk7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5waXZvdE9iaikgdGhpcy5waXZvdE9iai5yZWZyZXNoRGF0YSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkU2VydmljZVxyXG5cdFx0XHRcdC5jbGVhckZpZWxkTGlzdE9ic2VydmFibGUoKVxyXG5cdFx0XHRcdC5zdWJzY3JpYmUoKHVwZGF0ZWQpID0+IHtcclxuXHRcdFx0XHRcdGlmICh1cGRhdGVkID09PSB0aGlzLnBvcnRsZXQubmV3SWQpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuZGF0YVNvdXJjZSA9IFtdO1xyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5waXZvdE9iaikgdGhpcy5waXZvdE9iai5yZWZyZXNoRGF0YSgpO1xyXG5cdFx0XHRcdFx0XHRpZiAodGhpcy5maWVsZGxpc3RPYmopXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmoudXBkYXRlRGF0YVNvdXJjZSgpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHRcdFx0XHRcdFx0dGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHQpO1xyXG5cclxuXHRcdC8vIHRpdGxlIGNoYW5nZVxyXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkU2VydmljZS51cGRhdGVQb3J0bGV0VGl0bGUoKS5zdWJzY3JpYmUoKHVwZGF0ZWQpID0+IHtcclxuXHRcdFx0XHRpZiAodXBkYXRlZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5jb25maWcgPSBKU09OLnBhcnNlKHRoaXMucG9ydGxldC5jb25maWcpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSlcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcclxuXHR9XHJcblxyXG5cdG9uTWVtYmVyRWRpdG9yT3BlbihhcmdzOiBhbnkpOiB2b2lkIHtcclxuXHRcdC8vIOS9oOWPr+S7peWcqOi/memHjOagueaNrumcgOimgeS/ruaUuWFyZ3PmnaXoh6rlrprkuYnov4fmu6Tnqpflj6PnmoTooYzkuLpcclxuXHRcdC8vIDExMjQ3IOS4k+mXqOS4uml0ZW0gZGF0YSB0eXBl6ICM6K6+572uXHJcblx0XHRpZiAoYXJncy5maWVsZE5hbWUgPT09IFwiQWNjb3VudFR5cGVDb2RlXCIpIHtcclxuXHRcdFx0bGV0IHJlcyA9IG5ldyBBcnJheSg1KS5maWxsKG51bGwpO1xyXG5cdFx0XHRjb25zdCBmaWVsZE1lbWJlcnMgPSBbLi4uYXJncy5maWVsZE1lbWJlcnNdO1xyXG5cclxuXHRcdFx0Zm9yIChsZXQgaSA9IGZpZWxkTWVtYmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG5cdFx0XHRcdGxldCBpbmRleCA9IC0xO1xyXG5cdFx0XHRcdGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1EYXRhVHlwZVNvcnRBcnIuZmluZCgobmFtZSwgaW5kKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZmllbGRNZW1iZXJzW2ldLmFjdHVhbFRleHQgPT09IG5hbWUpIHtcclxuXHRcdFx0XHRcdFx0aW5kZXggPSBpbmQ7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRyZXR1cm4gZmllbGRNZW1iZXJzW2ldLmFjdHVhbFRleHQgPT09IG5hbWU7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0aWYgKCFpdGVtKSB7XHJcblx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc3QgZmlsbEl0ZW0gPSBmaWVsZE1lbWJlcnMuc3BsaWNlKGksIDEpO1xyXG5cdFx0XHRcdHJlc1tpbmRleF0gPSBmaWxsSXRlbVswXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXMgPSByZXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtKSB8fCBbXTtcclxuXHRcdFx0YXJncy5maWVsZE1lbWJlcnMgPSBbLi4ucmVzLCAuLi5maWVsZE1lbWJlcnNdO1xyXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHRjb25zdCBlbGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmUtbWVtYmVyLWVkaXRvci1kaWFsb2dcIik7XHJcblx0XHRcdFx0aWYgKGVsZSkge1xyXG5cdFx0XHRcdFx0ZWxlLnF1ZXJ5U2VsZWN0b3IoXCIuZS1maWx0ZXItc29ydFwiKS5zZXRBdHRyaWJ1dGUoXHJcblx0XHRcdFx0XHRcdFwic3R5bGVcIixcclxuXHRcdFx0XHRcdFx0XCJkaXNwbGF5OiBub25lXCJcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgc2V0R3JpZFNldHRpbmdzKCkge1xyXG5cdFx0dGhpcy5ncmlkU2V0dGluZ3MgPSB7XHJcblx0XHRcdGNvbHVtbldpZHRoOiAxNDAsXHJcblx0XHRcdHJvd0hlaWdodDogNDAsXHJcblx0XHRcdGFsbG93U2VsZWN0aW9uOiB0cnVlLFxyXG5cdFx0XHRzZWxlY3Rpb25TZXR0aW5nczoge1xyXG5cdFx0XHRcdG1vZGU6IFwiQ2VsbFwiLFxyXG5cdFx0XHRcdHR5cGU6IFwiTXVsdGlwbGVcIixcclxuXHRcdFx0XHRjZWxsU2VsZWN0aW9uTW9kZTogXCJCb3hcIixcclxuXHRcdFx0fSxcclxuXHRcdFx0Y29sdW1uUmVuZGVyOiB0aGlzLm9ic2VydmFibGUuc3Vic2NyaWJlKChhcmdzKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5zZXRDb2x1bW5zUmVuZGVyKGFyZ3MpO1xyXG5cdFx0XHR9KSBhcyBhbnksXHJcblx0XHRcdC8vIOWNh+e6p+WQjiDpu5jorqTkvJrmnInlr7zlh7rmoLflvI/opobnm5bvvIzpnIDopoHmiYvliqjorr7nva7lr7zlh7rmoIfpopjmoLflvI9cclxuXHRcdFx0ZXhjZWxIZWFkZXJRdWVyeUNlbGxJbmZvOiB0aGlzLm9ic2VydmFibGUuc3Vic2NyaWJlKChhcmdzOiBhbnkpID0+IHtcclxuXHRcdFx0XHQvLyBhcmdzLnN0eWxl5piv5LiqRXhjZWxTdHlsZeexu+Wei1xyXG5cdFx0XHRcdGFyZ3Muc3R5bGUgPSB7XHJcblx0XHRcdFx0XHRib2xkOiB0cnVlLCAvLyDlrZfkvZPliqDnspdcclxuXHRcdFx0XHRcdHZBbGlnbjogXCJDZW50ZXJcIixcclxuXHRcdFx0XHRcdHdyYXBUZXh0OiBmYWxzZSwgLy8g5LiN5o2i6KGMXHJcblx0XHRcdFx0XHRpbmRlbnQ6IDAsXHJcblx0XHRcdFx0XHRib3JkZXJzOiBudWxsLCAvLyDkuI3pnIDopoFib3JkZXJcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9KSBhcyBhbnksXHJcblx0XHRcdC8vIOWNh+e6p+WQjiDpu5jorqTkvJrmnInlr7zlh7rmoLflvI/opobnm5bvvIzpnIDopoHmiYvliqjorr7nva7lr7zlh7rlhoXlrrnmoLflvI9cclxuXHRcdFx0ZXhjZWxRdWVyeUNlbGxJbmZvOiB0aGlzLm9ic2VydmFibGUuc3Vic2NyaWJlKChhcmdzOiBhbnkpID0+IHtcclxuXHRcdFx0XHQvLyAjZjQ4NmNmZmYg6L+Z6YeM6L6T5Ye655qE5pivUkdCQSDpopzoibLmoLzlvI/vvIwgeGxzeOmHjOS4jemcgOimgemAj+aYjuW6pizljrvmjonlsL7pg6hmZlxyXG5cdFx0XHRcdGlmIChhcmdzLnN0eWxlICYmIGFyZ3Muc3R5bGUuYmFja0NvbG9yKSB7XHJcblx0XHRcdFx0XHRhcmdzLnN0eWxlLmJhY2tDb2xvciA9IGFyZ3Muc3R5bGUuYmFja0NvbG9yLnN1YnN0cmluZygwLCA3KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0bGV0IF9zdHlsZTogYW55ID0ge1xyXG5cdFx0XHRcdFx0Ym9sZDogZmFsc2UsXHJcblx0XHRcdFx0XHR3cmFwVGV4dDogZmFsc2UsXHJcblx0XHRcdFx0XHRib3JkZXJzOiBudWxsLFxyXG5cdFx0XHRcdFx0Zm9udENvbG9yOiBhcmdzLnN0eWxlLmZvbnRDb2xvcixcclxuXHRcdFx0XHRcdGJhY2tDb2xvcjogYXJncy5zdHlsZS5iYWNrQ29sb3IsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHRsZXQgY29sSW5kZXggPSBhcmdzLmNlbGwuY29sSW5kZXg7XHJcblx0XHRcdFx0bGV0IHJvd0luZGV4ID0gYXJncy5jZWxsLnJvd0luZGV4O1xyXG5cdFx0XHRcdGlmICh0aGlzLmNvbmZpZy5zaG93R3JhbmRUb3RhbHMpIHtcclxuXHRcdFx0XHRcdC8vIEdyYW5kVG90YWzkuI3pnIDopoHpopzoibJcclxuXHRcdFx0XHRcdGlmIChhcmdzLmRhdGEubGVuZ3RoID09PSByb3dJbmRleCArIDEpIHtcclxuXHRcdFx0XHRcdFx0ZGVsZXRlIF9zdHlsZS5mb250Q29sb3I7XHJcblx0XHRcdFx0XHRcdGRlbGV0ZSBfc3R5bGUuYmFja0NvbG9yO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoYXJncy5kYXRhW3Jvd0luZGV4XVtjb2xJbmRleF0uZm9ybWF0dGVkVGV4dCA9PSBcIlwiKSB7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0YXJncy5zdHlsZSA9IE9iamVjdC5hc3NpZ24oYXJncy5zdHlsZSwgX3N0eWxlKTtcclxuXHRcdFx0XHRpZiAoYXJncy52YWx1ZSA9PT0gXCJcIiAmJiBhcmdzLnN0eWxlLm51bWJlckZvcm1hdCkge1xyXG5cdFx0XHRcdFx0YXJncy5zdHlsZS5udW1iZXJGb3JtYXQgPSBudWxsO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAodGhpcy5mb3JtYXREYXRlcyAmJiB0aGlzLmZvcm1hdERhdGVzLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0bGV0IGRhdGVGaWVsZHMgPSB0aGlzLmZvcm1hdERhdGVzLm1hcCgoZWwpID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGVsLm5hbWU7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0KGFyZ3MgYXMgYW55KS52YWx1ZSAmJlxyXG5cdFx0XHRcdFx0XHQoKGFyZ3MgYXMgYW55KS5jZWxsLmNvbEluZGV4ID09PSAwXHJcblx0XHRcdFx0XHRcdFx0PyBkYXRlRmllbGRzLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQoYXJncyBhcyBhbnkpLmNlbGwudmFsdWVTb3J0LmF4aXNcclxuXHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHQ6IGRhdGVGaWVsZHMuaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdFx0XHRcdChhcmdzIGFzIGFueSkuY2VsbC5hY3R1YWxUZXh0XHJcblx0XHRcdFx0XHRcdFx0ICApKVxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdC8vQ3VzdG9taXplIHRoZSBSb3cgaGVhZGVycy9Db2x1bW4gaGVhZGVycyBiYXNlZCBvbiB5b3VyIG5lZWRzXHJcblx0XHRcdFx0XHRcdGxldCBoZWFkZXJzO1xyXG5cdFx0XHRcdFx0XHRpZiAoKGFyZ3MgYXMgYW55KS5jZWxsLmNvbEluZGV4ID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0aGVhZGVycyA9IChhcmdzIGFzIGFueSkuY2VsbC5hY3R1YWxUZXh0O1xyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdC8vIGhlYWRlcnMgPSBwaXZvdFZhbHVlc1trXVtqXS5mb3JtYXR0ZWRUZXh0O1xyXG5cdFx0XHRcdFx0XHRcdGhlYWRlcnMgPSAoYXJncyBhcyBhbnkpLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChoZWFkZXJzKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGRhdGUgPSBuZXcgRGF0ZShoZWFkZXJzKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0bGV0IHF1YXJ0ZXIgPSBNYXRoLmZsb29yKGRhdGUuZ2V0TW9udGgoKSAvIDMpICsgMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0bGV0IGZvcm1hdDtcclxuXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5mb3JtYXREYXRlcy5tYXAoKGVsKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAoKGFyZ3MgYXMgYW55KS5jZWxsLmNvbEluZGV4ID09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsLm5hbWUgPT1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoYXJncyBhcyBhbnkpLmNlbGwudmFsdWVTb3J0LmF4aXNcclxuXHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IGVsLmZvcm1hdDtcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5uYW1lID09IChhcmdzIGFzIGFueSkuY2VsbC5hY3R1YWxUZXh0XHJcblx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBlbC5mb3JtYXQ7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0KGFyZ3MgYXMgYW55KS52YWx1ZSA9IHRoaXMuZ2V0UXVhcnRlclZhbHVlKFxyXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybWF0LFxyXG5cdFx0XHRcdFx0XHRcdFx0ZGF0ZSxcclxuXHRcdFx0XHRcdFx0XHRcdHF1YXJ0ZXJcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KSBhcyBhbnksXHJcblx0XHR9IGFzIEdyaWRTZXR0aW5ncztcclxuXHR9XHJcblxyXG5cdGJlZm9yZUV4cG9ydChleHBvcnREYXRhKSB7XHJcblx0XHRpZiAoZXhwb3J0RGF0YSkge1xyXG5cdFx0XHRjb25zdCBrZXlNYXAgPSB7fTtcclxuXHRcdFx0dGhpcy5kYXRhU291cmNlU2V0dGluZ3MuZm9ybWF0U2V0dGluZ3MuZm9yRWFjaCgoZGF0YSkgPT4ge1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGRhdGEuZm9ybWF0ID09PSBcIiMsIyMjLCwuMDsoIywjIyMsLC4wKVwiIHx8XHJcblx0XHRcdFx0XHRkYXRhLmZvcm1hdCA9PT0gXCIjLCMjIywsOygjLCMjIywsKVwiIHx8XHJcblx0XHRcdFx0XHRkYXRhLmZvcm1hdCA9PT0gXCIjLCMjIywsLjAwOygjLCMjIywsLjAwKVwiXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRrZXlNYXBbZGF0YS5uYW1lXSA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGV4cG9ydERhdGEuZGF0YUNvbGxlY3Rpb25zICYmXHJcblx0XHRcdFx0ZXhwb3J0RGF0YS5kYXRhQ29sbGVjdGlvbnMubGVuZ3RoXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGV4cG9ydERhdGEuZGF0YUNvbGxlY3Rpb25zWzBdLmZvckVhY2goKHJvdykgPT4ge1xyXG5cdFx0XHRcdFx0cm93LmZvckVhY2goKGNlbGwpID0+IHtcclxuXHRcdFx0XHRcdFx0aWYgKGtleU1hcFtjZWxsLmFjdHVhbFRleHRdKSB7XHJcblx0XHRcdFx0XHRcdFx0Y2VsbC52YWx1ZSA9IGNlbGwuYWN0dWFsVmFsdWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHR0eXBlb2YgY2VsbC52YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxyXG5cdFx0XHRcdFx0XHRcdHR5cGVvZiBjZWxsLmZvcm1hdHRlZFRleHQgPT09IFwic3RyaW5nXCJcclxuXHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0Y2VsbC52YWx1ZSA9IGNlbGwuZm9ybWF0dGVkVGV4dDtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgZ2V0RGF0YSgpIHtcclxuXHRcdHRoaXMucGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuXHRcdGxldCBjb2x1bW5zID0gW107XHJcblx0XHRsZXQgdmFsdWVzID0gW107XHJcblx0XHRsZXQgZm9ybWF0U2V0dGluZ3MgPSBbXTtcclxuXHRcdGxldCByb3dzID0gW107XHJcblx0XHRsZXQgZmllbGRNYXBwaW5nID0gW107XHJcblx0XHQvLyDmuIXnqbpncmFuZFRvdGFsc+WSjHN1YlRvdGFsc1xyXG5cdFx0dGhpcy5ncmFuZFRvdGFscyA9IHt9O1xyXG5cdFx0dGhpcy5zdWJUb3RhbHMgPSB7fTtcclxuXHRcdHRoaXMuY29uZmlnID0gSlNPTi5wYXJzZSh0aGlzLnBvcnRsZXQuY29uZmlnKTtcclxuXHRcdHRoaXMuc2V0R3JpZFNldHRpbmdzKCk7XHJcblx0XHRpZiAodGhpcy5jb25maWcuZmllbGRzKSB7XHJcblx0XHRcdGlmICh0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmFsbEZpZWxkc09ialt0aGlzLnBvcnRsZXQuaWRdKSB7XHJcblx0XHRcdFx0dGhpcy5jb25maWdGaWVsZHMgPVxyXG5cdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5zZXRDb25maWdGaWVsZHMoXHJcblx0XHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuYWxsRmllbGRzT2JqW1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMucG9ydGxldC5pZFxyXG5cdFx0XHRcdFx0XHRdLFxyXG5cdFx0XHRcdFx0XHR0aGlzLmNvbmZpZy5maWVsZHNcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5jb25maWdGaWVsZHMgPSBbLi4udGhpcy5jb25maWcuZmllbGRzXTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuUGl2b3RfRGF0YSA9IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0UmVzdWx0QnlEYXRhVGFibGUoXHJcblx0XHRcdHRoaXMucG9ydGxldCxcclxuXHRcdFx0ZmFsc2UsXHJcblx0XHRcdGZhbHNlLFxyXG5cdFx0XHR0aGlzLmRhc2hib2FyZC5pZFxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLm9yZGVyQnlDb2x1bW5zID0gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRPcmRlckJ5Q29sdW1uc05ldyhcclxuXHRcdFx0dGhpcy5wb3J0bGV0LmZpZ3VyZUNvZGUsXHJcblx0XHRcdHRoaXMuZGFzaGJvYXJkXHJcblx0XHQpO1xyXG5cclxuXHRcdHRoaXMuUGl2b3RfRGF0YSA9IERhdGFVdGlsLnBhcnNlLnBhcnNlSnNvbih0aGlzLlBpdm90X0RhdGEpO1xyXG5cdFx0aWYgKHRoaXMuUGl2b3RfRGF0YSAmJiB0aGlzLlBpdm90X0RhdGEubGVuZ3RoID4gMCkge1xyXG5cdFx0XHQvLyDnp7vpmaTliJflkI3lkozmlbDmja5rZXnkuI3ljLnphY3nmoTpoblcclxuXHRcdFx0dGhpcy5nZXRleGNsdWRlRmllbGRzKHRoaXMuY29uZmlnRmllbGRzLCB0aGlzLlBpdm90X0RhdGFbMF0pO1xyXG5cdFx0XHRpZiAoIXRoaXMuYWxsb3dlZENhbGN1bGF0ZWRGaWVsZHMubGVuZ3RoKSB7XHJcblx0XHRcdFx0dGhpcy5hbGxvd2VkQ2FsY3VsYXRlZEZpZWxkcyA9IE9iamVjdC5rZXlzKHRoaXMuUGl2b3RfRGF0YVswXSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yIChsZXQgaXRlbSBvZiB0aGlzLmNvbmZpZ0ZpZWxkcykge1xyXG5cdFx0XHRcdC8vIOWtl+auteWIhue7hCBodHRwczovL2VqMi5zeW5jZnVzaW9uLmNvbS9hbmd1bGFyL2RvY3VtZW50YXRpb24vcGl2b3R2aWV3L2ZpZWxkLWxpc3Q/c2VhcmNoPWZpZWxkTWFwcGluZyNncm91cC1maWVsZHMtdW5kZXItZGVzaXJlZC1mb2xkZXItbmFtZVxyXG5cdFx0XHRcdGZpZWxkTWFwcGluZy5wdXNoKHtcclxuXHRcdFx0XHRcdG5hbWU6IGl0ZW0uY29sTmFtZSxcclxuXHRcdFx0XHRcdGNhcHRpb246IGl0ZW0uYWRkdGlvbk5hbWVcclxuXHRcdFx0XHRcdFx0PyBgJHtpdGVtLmxhbmdWYWx1ZX0gJHtpdGVtLmFkZHRpb25OYW1lfWBcclxuXHRcdFx0XHRcdFx0OiBpdGVtLmxhbmdWYWx1ZVxyXG5cdFx0XHRcdFx0XHQ/IGl0ZW0ubGFuZ1ZhbHVlXHJcblx0XHRcdFx0XHRcdDogdGhpcy50cmFuc2xhdGlvbltpdGVtLmxhbmdDb2RlXSB8fCBpdGVtLmxhbmdDb2RlLFxyXG5cclxuXHRcdFx0XHRcdGRhdGFUeXBlOiBpdGVtLmRhdGFUeXBlLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5jb25maWdGaWVsZHMpIHtcclxuXHRcdFx0dGhpcy5wZXJjZW50TnVtRmllbGRzID0gW107XHJcblx0XHRcdHRoaXMuZm9ybWF0RGF0ZXMgPSBbXTtcclxuXHRcdFx0dGhpcy56ZXJvRm9ybWF0RGF0YS5oZ0xpc3QgPSBbXTtcclxuXHRcdFx0dGhpcy56ZXJvRm9ybWF0RGF0YS5lbXB0eUxpc3QgPSBbXTtcclxuXHRcdFx0dGhpcy5taWxsaW9uRmllbGRzID0gW107XHJcblx0XHRcdHRoaXMuY29uZmlnRmllbGRzLm1hcCgoZWwpID0+IHtcclxuXHRcdFx0XHQvLyBTTVAyLTI0ODYgJiBwZXJjZW50TnVt55qEZm9ybWF06Zeu6aKYXHJcblx0XHRcdFx0aWYgKGVsLmRhdGFUeXBlID09IFwicGVyY2VudE51bVwiKSB7XHJcblx0XHRcdFx0XHR0aGlzLnBlcmNlbnROdW1GaWVsZHMucHVzaChlbC5jb2xOYW1lKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRlbC5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRlbC5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZCAmJlxyXG5cdFx0XHRcdFx0WzIsIDUsIDgsIDExLCAxNCwgMTddLmluY2x1ZGVzKGVsLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdClcclxuXHRcdFx0XHQpXHJcblx0XHRcdFx0XHR0aGlzLnplcm9Gb3JtYXREYXRhLmhnTGlzdC5wdXNoKGVsLmNvbE5hbWUpO1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGVsLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWQgJiZcclxuXHRcdFx0XHRcdFszLCA2LCA5LCAxMiwgMTUsIDE4XS5pbmNsdWRlcyhlbC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXQpXHJcblx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0dGhpcy56ZXJvRm9ybWF0RGF0YS5lbXB0eUxpc3QucHVzaChlbC5jb2xOYW1lKTtcclxuXHRcdFx0XHQvLyAgcGl2b3RUYWJsZWZvcm1hdFBlcmNlbnQg55m+5YiG5q+U5Lmf5pyJMTAsMTEsMTIg5L2G5piv5a6D5piv5pi+56S6MC4wMHjnmoTmoLzlvI/vvIzmiYDku6XlvpfmjpLpmaRcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRlbC5kYXRhVHlwZSAhPT0gXCJwZXJjZW50XCIgJiZcclxuXHRcdFx0XHRcdGVsLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWQgJiZcclxuXHRcdFx0XHRcdFsxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4XS5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHQpXHJcblx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0dGhpcy5taWxsaW9uRmllbGRzLnB1c2goZWwuY29sTmFtZSk7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ZWwuZGF0YVR5cGUgPT09IFwibnVtYmVyXCIgJiZcclxuXHRcdFx0XHRcdCghZWwuZm9ybWF0IHx8XHJcblx0XHRcdFx0XHRcdChlbC5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHRlbC5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0IWVsLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkKSlcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGZvcm1hdERhdGEgPSB7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGVsLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdC8vU01QMi0zMDI2IGFuZCBTTVAyLTMwNTlcclxuXHRcdFx0XHRcdFx0Zm9ybWF0OlxyXG5cdFx0XHRcdFx0XHRcdGVsLmNvbE5hbWUgIT09IFwiUG9ydEludlN0a1wiICYmXHJcblx0XHRcdFx0XHRcdFx0ZWwuY29sTmFtZSAhPT0gXCJQb3J0RmRJbnZTdGtcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PyB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmZvcm1hdE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRlbC5kcFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0XHQ6IFwiIyMwLiMjIyMjIyMwXCIsXHJcblx0XHRcdFx0XHRcdHVzZUdyb3VwaW5nOiB0cnVlLFxyXG5cdFx0XHRcdFx0fTtcclxuXHJcblx0XHRcdFx0XHRmb3JtYXRTZXR0aW5ncy5wdXNoKGZvcm1hdERhdGEpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHQoZWwuZGF0YVR5cGUgPT09IFwicGVyY2VudFwiIHx8XHJcblx0XHRcdFx0XHRcdGVsLmRhdGFUeXBlID09PSBcInBlcmNlbnROdW1cIikgJiZcclxuXHRcdFx0XHRcdCghZWwuZm9ybWF0IHx8XHJcblx0XHRcdFx0XHRcdChlbC5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHRlbC5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0IWVsLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkKSlcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGZvcm1hdERhdGEgPSB7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGVsLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdGZvcm1hdDogdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdGVsLmRwXHJcblx0XHRcdFx0XHRcdCksXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3MucHVzaChmb3JtYXREYXRhKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ZWwuZGF0YVR5cGUgPT09IFwibXVsdGlwbGVcIiAmJlxyXG5cdFx0XHRcdFx0KCFlbC5mb3JtYXQgfHxcclxuXHRcdFx0XHRcdFx0KGVsLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRcdGVsLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0XHQhZWwuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWQpKVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0Y29uc3QgZm9ybWF0RGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0bmFtZTogZWwuY29sTmFtZSxcclxuXHRcdFx0XHRcdFx0Zm9ybWF0OiB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmZvcm1hdE11bHRpcGxlKFxyXG5cdFx0XHRcdFx0XHRcdGVsLmRwXHJcblx0XHRcdFx0XHRcdCksXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3MucHVzaChmb3JtYXREYXRhKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGVsLmRhdGFUeXBlID09PSBcImRhdGV0aW1lXCIgfHwgZWwuZGF0YVR5cGUgPT09IFwiZGF0ZVwiKSB7XHJcblx0XHRcdFx0XHRsZXQgZm9ybWF0ID0gXCJcIjtcclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0ZWwuZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdGVsLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWRcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoZWwuZm9ybWF0WzBdLmRhdGVUeXBlID09IFwiUXVhcnRlclwiKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGZvcm1hdF8gPSBlbC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXREaXNwbGF5O1xyXG5cdFx0XHRcdFx0XHRcdGxldCBmb3JtYXRJbmZvID0gdGhpcy5xdWFydGVyRm9ybWF0LmZpbHRlcihcclxuXHRcdFx0XHRcdFx0XHRcdChxdXIpID0+IHF1ci52YWx1ZSA9PSBmb3JtYXRfXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRpZiAoZm9ybWF0SW5mby5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IGZvcm1hdEluZm9bMF0uZm9ybWF0O1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBmb3JtYXREYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lOiBlbC5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQ6IGZvcm1hdF8sXHJcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiZGF0ZVwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZm9ybWF0RGF0ZXMucHVzaChmb3JtYXREYXRhKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoZWwuZm9ybWF0WzBdLmRhdGVUeXBlID09IFwiRGF0ZVwiKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGZyb21JZHggPVxyXG5cdFx0XHRcdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheS5pbmRleE9mKFwiKFwiKTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgdG9JZHggPVxyXG5cdFx0XHRcdFx0XHRcdFx0ZWwuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheS5pbmRleE9mKFwiKVwiKTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZm9ybWF0XyA9XHJcblx0XHRcdFx0XHRcdFx0XHRlbC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXREaXNwbGF5LnNsaWNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmcm9tSWR4ICsgMSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0dG9JZHhcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChmb3JtYXRfKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiREQvTU0vWVlZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcImRkL01NL3l5eXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiREQvTU0vWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJkZC9NTS95eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJNTS9ERC9ZWVlZXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwiTU0vZGQveXl5eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJNTS9ERC9ZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcIk1NL2RkL3l5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIllZWVktTU0tRERcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJ5eXl5LU1NLWRkXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIllZLU1NLUREXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwieXktTU0tZGRcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiREQtTU0tWVlZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcImRkLU1NLXl5eXlcIjtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0XHRjYXNlIFwiREQtTU0tWVlcIjpcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gXCJkZC1NTS15eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJNTS1ERC1ZWVlZXCI6XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9IFwiTU0tZGQteXl5eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJNTS1ERC1ZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcIk1NLWRkLXl5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSBcIk1NTSBERCwgWVlZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcIk1NTSBkZCwgeXl5eVwiO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgXCJERC1NTU0tWVlZWVwiOlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBcImRkLU1NTS15eXl5XCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoIWZvcm1hdCkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBmb3JtYXREYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdG5hbWU6IGVsLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRcdFx0Zm9ybWF0OiB0aGlzLmRhdGVQaXBlRm9ybWF0LFxyXG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiZGF0ZVwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5ncy5wdXNoKGZvcm1hdERhdGEpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgZm9ybWF0RGF0YSA9IHtcclxuXHRcdFx0XHRcdFx0XHRuYW1lOiBlbC5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0XHRcdGZvcm1hdDogZm9ybWF0LFxyXG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiZGF0ZVwiLFxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cclxuXHRcdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3MucHVzaChmb3JtYXREYXRhKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0Ly9jYWxjdWxhdGVkRmllbGRTZXR0aW5ncyBmb3JtYXQgcHVzaCB0byBmb3JtYXRTZXR0aW5nc1xyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLmNvbmZpZy5jYWxjdWxhdGVkRmllbGRTZXR0aW5ncyAmJlxyXG5cdFx0XHR0aGlzLmNvbmZpZy5jYWxjdWxhdGVkRmllbGRTZXR0aW5ncy5sZW5ndGggPiAwXHJcblx0XHQpIHtcclxuXHRcdFx0dGhpcy5jb25maWcuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MubWFwKChlbCkgPT4ge1xyXG5cdFx0XHRcdGlmIChlbC5mb3JtYXRTdHJpbmcgIT09IFwiXCIpIHtcclxuXHRcdFx0XHRcdGZvciAobGV0IGkgPSBmb3JtYXRTZXR0aW5ncy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG5cdFx0XHRcdFx0XHRpZiAoZm9ybWF0U2V0dGluZ3NbaV0ubmFtZSA9PT0gZWwubmFtZSkge1xyXG5cdFx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnNwbGljZShpLCAxKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3MucHVzaCh7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGVsLm5hbWUsXHJcblx0XHRcdFx0XHRcdGZvcm1hdDogZWwuZm9ybWF0U3RyaW5nLFxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdGxldCBzZXJpZXMgPSB0aGlzLmNvbmZpZy55YXhpcy5zZXJpZXM7XHJcblx0XHRpZiAoc2VyaWVzKSB7XHJcblx0XHRcdGZvciAobGV0IGl0ZW0gb2Ygc2VyaWVzKSB7XHJcblx0XHRcdFx0Y29uc3QgdmFsdWUgPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBpdGVtLmNvbE5hbWUsXHJcblx0XHRcdFx0XHRjYXB0aW9uOiB0aGlzLmdldENhcHRpb25CeU5hbWUoaXRlbS5jb2xOYW1lKSB8fCBpdGVtLnRpdGxlLFxyXG5cdFx0XHRcdFx0dHlwZTogaXRlbS5jYWxNZXRob2QsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHR2YWx1ZXMucHVzaCh2YWx1ZSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGxldCBncm91cHMgPSB0aGlzLmNvbmZpZy54YXhpcy5ncm91cHM7XHJcblx0XHRpZiAoZ3JvdXBzKSB7XHJcblx0XHRcdGZvciAobGV0IGdpdGVtIG9mIGdyb3Vwcykge1xyXG5cdFx0XHRcdGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdFx0KGVsKSA9PiBlbC5jb2xOYW1lID09PSBnaXRlbS5uYW1lXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoZmllbGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0Z2l0ZW0uc2hvd1N1YlRvdGFscyA9IGZpZWxkWzBdLnNob3dTdWJUb3RhbHM7XHJcblx0XHRcdFx0XHRnaXRlbS5jYXB0aW9uID1cclxuXHRcdFx0XHRcdFx0ZmllbGRbMF0ubGFuZ1ZhbHVlIHx8XHJcblx0XHRcdFx0XHRcdHRoaXMudHJhbnNsYXRpb25bZmllbGRbMF0ubGFuZ0NvZGVdIHx8XHJcblx0XHRcdFx0XHRcdGdpdGVtLmNhcHRpb24gfHxcclxuXHRcdFx0XHRcdFx0ZmllbGRbMF0ubGFuZ0NvZGU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJvd3MucHVzaChnaXRlbSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmNvbmZpZy5jb2x1bW5Hcm91cCAmJiB0aGlzLmNvbmZpZy5jb2x1bW5Hcm91cC5sZW5ndGgpIHtcclxuXHRcdFx0Zm9yIChsZXQgaXRlbSBvZiB0aGlzLmNvbmZpZy5jb2x1bW5Hcm91cCkge1xyXG5cdFx0XHRcdGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdFx0KGVsKSA9PiBlbC5jb2xOYW1lID09PSBpdGVtLm5hbWVcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGlmIChmaWVsZC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRpdGVtLnNob3dTdWJUb3RhbHMgPSBmaWVsZFswXS5zaG93U3ViVG90YWxzO1xyXG5cdFx0XHRcdFx0aXRlbS5jYXB0aW9uID1cclxuXHRcdFx0XHRcdFx0ZmllbGRbMF0ubGFuZ1ZhbHVlIHx8XHJcblx0XHRcdFx0XHRcdHRoaXMudHJhbnNsYXRpb25bZmllbGRbMF0ubGFuZ0NvZGVdIHx8XHJcblx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdDb2RlIHx8XHJcblx0XHRcdFx0XHRcdGl0ZW0uY2FwdGlvbjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29sdW1ucy5wdXNoKGl0ZW0pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRsZXQgY29uZGl0aW9uYWxGb3JtYXRTZXR0aW5ncyA9IFtdO1xyXG5cdFx0dGhpcy5jb25maWdGaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuXHRcdFx0aWYgKGZpZWxkLmZvcm1hdCAmJiBmaWVsZC5mb3JtYXQubGVuZ3RoKSB7XHJcblx0XHRcdFx0aWYgKGZpZWxkLmZvcm1hdFswXS5mb250U2V0dGluZ0NoZWNrZWQpIHtcclxuXHRcdFx0XHRcdGxldCBjb25kaXRpb25hbEZvcm1hdE9iaiA9IHtcclxuXHRcdFx0XHRcdFx0YXBwbHlHcmFuZFRvdGFsczogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0bWVhc3VyZTogXCJcIixcclxuXHRcdFx0XHRcdFx0dmFsdWUxOiBudWxsLFxyXG5cdFx0XHRcdFx0XHR2YWx1ZTI6IG51bGwsXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbnM6IFwiXCIsXHJcblx0XHRcdFx0XHRcdHN0eWxlOiB7XHJcblx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdGNvbG9yOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdGZvbnRGYW1pbHk6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0Zm9udFNpemU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0bGV0IG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaiA9IHtcclxuXHRcdFx0XHRcdFx0YXBwbHlHcmFuZFRvdGFsczogdHJ1ZSxcclxuXHRcdFx0XHRcdFx0bWVhc3VyZTogXCJcIixcclxuXHRcdFx0XHRcdFx0dmFsdWUxOiBudWxsLFxyXG5cdFx0XHRcdFx0XHR2YWx1ZTI6IG51bGwsXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbnM6IFwiXCIsXHJcblx0XHRcdFx0XHRcdHN0eWxlOiB7XHJcblx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZENvbG9yOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdGNvbG9yOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdGZvbnRGYW1pbHk6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0Zm9udFNpemU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0Ly8gZm9udCBzZXR0aW5nIHN0YXJ0XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoubWVhc3VyZSA9XHJcblx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZpZWxkO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoubWVhc3VyZSA9XHJcblx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZpZWxkO1xyXG5cclxuXHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLmZvcm1hdENoZWNrZWQgJiZcclxuXHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLmNvbXBhcmVTZWxlY3RcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldENvbXBhcmVDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRkZWxldGUgY29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyO1xyXG5cdFx0XHRcdFx0XHRkZWxldGUgbmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMjtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJMZXNzVGhhblwiO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXSxcclxuXHRcdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLFxyXG5cdFx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0U2V0dGluZ3MucHVzaChuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmopO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRTZXR0aW5ncy51bnNoaWZ0KGNvbmRpdGlvbmFsRm9ybWF0T2JqKTtcclxuXHRcdFx0XHRcdC8vIGZvbnQgc2V0dGluZyBlbmRcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0bGV0IGZvcm1hdFNldHRpbmdzT2JqID0ge1xyXG5cdFx0XHRcdFx0bmFtZTogXCJcIixcclxuXHRcdFx0XHRcdGZvcm1hdDogXCJcIixcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdGlmIChmaWVsZC5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZCkge1xyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmoubmFtZSA9IGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZpZWxkO1xyXG5cdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmouZm9ybWF0ID1cclxuXHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0c3dpdGNoIChmaWVsZC5mb3JtYXRbMF0uZGF0YVR5cGUpIHtcclxuXHRcdFx0XHRcdFx0Y2FzZSBcIm51bWJlclwiOlxyXG5cdFx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqLmZvcm1hdCA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXROdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSBcImludGVnZXJcIjpcclxuXHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iai5mb3JtYXQgPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0SW50ZWdlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlIFwicGVyY2VudE51bVwiOlxyXG5cdFx0XHRcdFx0XHRjYXNlIFwicGVyY2VudFwiOlxyXG5cdFx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqLmZvcm1hdCA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgXCJtdWx0aXBsZVwiOlxyXG5cdFx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqLmZvcm1hdCA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXRNdWx0aXBsZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlIFwiZGF0ZVwiOlxyXG5cdFx0XHRcdFx0XHRjYXNlIFwiZGF0ZXRpbWVcIjpcclxuXHRcdFx0XHRcdFx0XHRsZXQgZm9ybWF0ID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHRpZiAoZmllbGQuZm9ybWF0ICYmIGZpZWxkLmZvcm1hdC5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChmaWVsZC5mb3JtYXRbMF0uZGF0ZVR5cGUgPT0gXCJRdWFydGVyXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXREaXNwbGF5O1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChmaWVsZC5mb3JtYXRbMF0uZGF0ZVR5cGUgPT0gXCJEYXRlXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IGZyb21JZHggPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdERpc3BsYXkuaW5kZXhPZihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiKFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IHRvSWR4ID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZC5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXREaXNwbGF5LmluZGV4T2YoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIilcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGZvcm1hdCA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0RGlzcGxheS5zbGljZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZyb21JZHggKyAxLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG9JZHhcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRpZiAoZm9ybWF0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iaiA9IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogZmllbGQuY29sTmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0OiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIGZpZWxkLmRhdGFUeXBlID0gXCJzdHJpbmdcIjtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybWF0U2V0dGluZ3NPYmouZm9ybWF0ID0gdGhpcy5kYXRlUGlwZUZvcm1hdDtcclxuXHRcdFx0XHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzT2JqW1widHlwZVwiXSA9IFwiZGF0ZVwiO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ZmllbGQuZm9ybWF0WzBdLmRhdGFUeXBlICE9PSBcInN0cmluZ1wiICYmXHJcblx0XHRcdFx0XHRmb3JtYXRTZXR0aW5nc09iai5mb3JtYXRcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGZvcm1hdFNldHRpbmdzLnB1c2goZm9ybWF0U2V0dGluZ3NPYmopO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMgPSB0aGlzLmNvbmZpZy5jdXN0b21DYWxjdWxhdGVkRmllbGRzXHJcblx0XHRcdD8gdGhpcy5jb25maWcuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1xyXG5cdFx0XHQ6IFtdO1xyXG5cclxuXHRcdC8vIFNNUDItNDU4MiBBR0lDIC0gRGFzaGJvYXJkIGl0ZW0gc2VxdWVuY2VcclxuXHRcdGxldCBpc0V4aXN0U2VxID0gZmFsc2U7XHJcblx0XHRsZXQgc29ydFNldHRpbmdzID0gdGhpcy5jb25maWcuc29ydFNldHRpbmdzIHx8IFtdO1xyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLlBpdm90X0RhdGEgJiZcclxuXHRcdFx0dGhpcy5QaXZvdF9EYXRhWzBdICYmXHJcblx0XHRcdHRoaXMuUGl2b3RfRGF0YVswXS5TZXEgIT09IG51bGxcclxuXHRcdCkge1xyXG5cdFx0XHQvLyDlj5bmtohOYW1l55qE6buY6K6k5o6S5bqP77yM5qC55o2uU2Vx5p2l5o6S5bqPXHJcblx0XHRcdHNvcnRTZXR0aW5ncy5wdXNoKHsgbmFtZTogXCJOYW1lXCIsIG9yZGVyOiBcIk5vbmVcIiB9KTtcclxuXHRcdFx0aXNFeGlzdFNlcSA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRsZXQgZmlsdGVyU2V0dGluZ3MgPSB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmNoZWNrRmlsdGVyU2V0dGluZ3MoXHJcblx0XHRcdHRoaXMuY29uZmlnLFxyXG5cdFx0XHR0aGlzLmNvbmZpZ0ZpZWxkcyxcclxuXHRcdFx0dGhpcy5QaXZvdF9EYXRhXHJcblx0XHQpO1xyXG5cdFx0bGV0IG5hbWVGaWx0ZXIgPSBmaWx0ZXJTZXR0aW5ncy5maW5kKCh4KSA9PiB4Lm5hbWUgPT09IFwiTmFtZVwiKTtcclxuXHRcdC8vIOWtmOWcqCBOYW1l55qEZmlsdGVy5pe277yM5Lya5oyJ54Wn6buY6K6k5o6S5bqP77yM6ZyA6KaB5a+5TmFtZei/m+ihjFNlceaOkuW6j+WkhOeQhlxyXG5cdFx0aWYgKGlzRXhpc3RTZXEgJiYgbmFtZUZpbHRlciAmJiByb3dzLnNvbWUoKHgpID0+IHgubmFtZSA9PT0gXCJOYW1lXCIpKSB7XHJcblx0XHRcdGxldCBpdGVtcyA9IG5hbWVGaWx0ZXIuaXRlbXM7IC8vIOaLv+WIsOW9k+WJjeaOkuW6j++8jOm7mOiupEEtWlxyXG5cdFx0XHRsZXQgc2VxQXJyID0gW107XHJcblx0XHRcdGl0ZW1zLmZvckVhY2goKG5hbWUpID0+IHtcclxuXHRcdFx0XHRsZXQgb2JqID0gdGhpcy5QaXZvdF9EYXRhLmZpbmQoKHgpID0+IHguTmFtZSA9PT0gbmFtZSk7XHJcblx0XHRcdFx0bGV0IGl0ZW06IGFueSA9IHtcclxuXHRcdFx0XHRcdG5hbWU6IG5hbWUsXHJcblx0XHRcdFx0XHRzZXE6IG9iai5TZXEsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHRzZXFBcnIucHVzaChpdGVtKTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdHNlcUFyci5zb3J0KChhLCBiKSA9PiBhLnNlcSAtIGIuc2VxKTtcclxuXHRcdFx0bmFtZUZpbHRlci5pdGVtcyA9IHNlcUFyci5tYXAoKHgpID0+IHgubmFtZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgYWxsRmllbGRzID1cclxuXHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5hbGxGaWVsZHNPYmpbdGhpcy5wb3J0bGV0LmlkXTtcclxuXHRcdGlmIChhbGxGaWVsZHMpIHtcclxuXHRcdFx0dmFsdWVzLmZvckVhY2goKHZhbHVlKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgaXRlbSA9IGFsbEZpZWxkcy5maW5kKFxyXG5cdFx0XHRcdFx0KGZpZWxkKSA9PiBmaWVsZC5jb2xOYW1lID09PSB2YWx1ZS5uYW1lXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoaXRlbSkge1xyXG5cdFx0XHRcdFx0dmFsdWUuY2FwdGlvbiA9XHJcblx0XHRcdFx0XHRcdChpdGVtLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRcdGl0ZW0uZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdGl0ZW0uZm9ybWF0WzBdLmRpc3BsYXlOYW1lKSB8fFxyXG5cdFx0XHRcdFx0XHRpdGVtLmxhbmdWYWx1ZSB8fFxyXG5cdFx0XHRcdFx0XHR0aGlzLnRyYW5zbGF0aW9uW2l0ZW0ubGFuZ0NvZGVdIHx8XHJcblx0XHRcdFx0XHRcdGl0ZW0ubGFuZ0NvZGU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdGxldCBoYXNJdGVtRGF0YVR5cGUgPSBmYWxzZTtcclxuXHRcdGlmICh0aGlzLlBpdm90X0RhdGEpIHtcclxuXHRcdFx0dGhpcy5QaXZvdF9EYXRhLm1hcCgoZGF0YSkgPT4ge1xyXG5cdFx0XHRcdGlmIChkYXRhW1wiQWNjb3VudFR5cGVDb2RlXCJdKSB7XHJcblx0XHRcdFx0XHRoYXNJdGVtRGF0YVR5cGUgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyb3dzLmZvckVhY2goKHJvdykgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGRhdGFbcm93Lm5hbWVdID09PSBcIlwiKSB7XHJcblx0XHRcdFx0XHRcdGRhdGFbcm93Lm5hbWVdID0gXCJudWxsXCI7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGhhc0l0ZW1EYXRhVHlwZSkge1xyXG5cdFx0XHRzb3J0U2V0dGluZ3MucHVzaCh7XHJcblx0XHRcdFx0bmFtZTogXCJBY2NvdW50VHlwZUNvZGVcIixcclxuXHRcdFx0XHRvcmRlcjogXCJBc2NlbmRpbmdcIixcclxuXHRcdFx0XHRtZW1iZXJzT3JkZXI6IFsuLi50aGlzLml0ZW1EYXRhVHlwZVNvcnRBcnJdLFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdHRoaXMuY29uZmlnLmZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyKSA9PiB7XHJcblx0XHRcdGZpbHRlci5jYXB0aW9uID1cclxuXHRcdFx0XHR0aGlzLmdldENhcHRpb25CeU5hbWUoZmlsdGVyLm5hbWUpIHx8IGZpbHRlci5jYXB0aW9uO1xyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmRhdGFTb3VyY2VTZXR0aW5ncyA9IHtcclxuXHRcdFx0ZGF0YVNvdXJjZTogdGhpcy5QaXZvdF9EYXRhIHx8IFtdLFxyXG5cdFx0XHRyb3dzOiByb3dzIHx8IFtdLFxyXG5cdFx0XHRjb2x1bW5zOiBjb2x1bW5zIHx8IFtdLFxyXG5cdFx0XHR2YWx1ZXM6IHZhbHVlcyB8fCBbXSxcclxuXHRcdFx0ZmlsdGVyczogdGhpcy5jb25maWcuZmlsdGVycyxcclxuXHRcdFx0ZmlsdGVyU2V0dGluZ3M6IGZpbHRlclNldHRpbmdzLFxyXG5cdFx0XHRleGNsdWRlRmllbGRzOiB0aGlzLmV4Y2x1ZGVGaWVsZHMsXHJcblx0XHRcdGZvcm1hdFNldHRpbmdzOiBmb3JtYXRTZXR0aW5ncyxcclxuXHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRTZXR0aW5nczogY29uZGl0aW9uYWxGb3JtYXRTZXR0aW5ncyxcclxuXHRcdFx0Ly8g55So5LqO5pS26LW35bGV5byA5oyH5a6a5bGC57qnLCDov5nnjqnmhI/lj6rog73lsZXlvIDnrKzkuIDlsYIsXHJcblx0XHRcdC8vIOW/hemhu+iuvuWummV4cGFuZEFsbCDkuLpmYWxzZe+8iOm7mOiupOaYr2ZhbHNl77yJ77yMIOi/meagt+WtkOaJjeiDveWunueOsOWPquWxleW8gOS4pOWxglxyXG5cdFx0XHQvLyBkcmlsbGVkTWVtYmVycyxcclxuXHRcdFx0ZXhwYW5kQWxsOiB0cnVlLFxyXG5cdFx0XHRlbmFibGVTb3J0aW5nOiB0cnVlLFxyXG5cdFx0XHRmaWVsZE1hcHBpbmc6IGZpZWxkTWFwcGluZyxcclxuXHRcdFx0Y2FsY3VsYXRlZEZpZWxkU2V0dGluZ3M6IHRoaXMuY29uZmlnLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzLFxyXG5cdFx0XHRzb3J0U2V0dGluZ3M6IHNvcnRTZXR0aW5ncyxcclxuXHRcdFx0Ly8gZ3JvdXBTZXR0aW5nczogdGhpcy5jb25maWcuZ3JvdXBTZXR0aW5ncyxcclxuXHRcdFx0dmFsdWVTb3J0U2V0dGluZ3M6IHRoaXMuY29uZmlnLnZhbHVlU29ydFNldHRpbmdzLFxyXG5cdFx0XHRzaG93R3JhbmRUb3RhbHM6IHRoaXMuY29uZmlnLnNob3dHcmFuZFRvdGFscyxcclxuXHRcdFx0c2hvd1Jvd0dyYW5kVG90YWxzOiB0aGlzLmNvbmZpZy5zaG93Um93R3JhbmRUb3RhbHMsXHJcblx0XHRcdHNob3dDb2x1bW5HcmFuZFRvdGFsczogdGhpcy5jb25maWcuc2hvd0NvbHVtbkdyYW5kVG90YWxzLFxyXG5cdFx0XHRzaG93U3ViVG90YWxzOiB0aGlzLmNvbmZpZy5zaG93U3ViVG90YWxzLFxyXG5cdFx0XHRzaG93Um93U3ViVG90YWxzOiB0aGlzLmNvbmZpZy5zaG93Um93U3ViVG90YWxzLFxyXG5cdFx0XHRzaG93Q29sdW1uU3ViVG90YWxzOiB0aGlzLmNvbmZpZy5zaG93Q29sdW1uU3ViVG90YWxzLFxyXG5cdFx0fTtcclxuXHRcdGNvbnNvbGUubG9nKFwidGhpcy5kYXRhU291cmNlU2V0dGluZ3NcIiwgdGhpcy5kYXRhU291cmNlU2V0dGluZ3MpO1xyXG5cclxuXHRcdHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cdH1cclxuXHJcblx0Z2V0Q2FwdGlvbkJ5TmFtZShuYW1lU3RyaW5nKSB7XHJcblx0XHRpZiAoIW5hbWVTdHJpbmcpIHJldHVybiBcIlwiO1xyXG5cdFx0Y29uc3QgZmllbGQgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maW5kKChlbCkgPT4gZWwuY29sTmFtZSA9PT0gbmFtZVN0cmluZyk7XHJcblxyXG5cdFx0cmV0dXJuIGZpZWxkXHJcblx0XHRcdD8gZmllbGQubGFuZ1ZhbHVlIHx8XHJcblx0XHRcdFx0XHR0aGlzLnRyYW5zbGF0aW9uW2ZpZWxkICYmIGZpZWxkLmxhbmdDb2RlXSB8fFxyXG5cdFx0XHRcdFx0ZmllbGQubGFuZ0NvZGVcclxuXHRcdFx0OiBcIlwiO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGFmdGVyUG9wdWxhdGUoYXJnczogRW5naW5lUG9wdWxhdGVkRXZlbnRBcmdzKTogdm9pZCB7XHJcblx0XHR0aGlzLnRlbXBTdWJ0b3RhbHMgPSBbXTtcclxuXHRcdHRoaXMuZ3JhbmRUb3RhbHMgPSB7fTtcclxuXHRcdHRoaXMuc3ViVG90YWxzID0ge307XHJcblx0XHRsZXQgdGVtcHNob3dBcnJheSA9IFtdO1xyXG5cdFx0dGhpcy5jb25maWcueWF4aXMuc2VyaWVzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGl0ZW0uaGFzT3duUHJvcGVydHkoXCJzaG93U3ViVG90YWxzXCIpICYmXHJcblx0XHRcdFx0aXRlbS5oYXNPd25Qcm9wZXJ0eShcInNob3dHcmFuZFRvdGFsc1wiKVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHR0ZW1wc2hvd0FycmF5LnB1c2goe1xyXG5cdFx0XHRcdFx0bmFtZTogaXRlbS5jb2xOYW1lLFxyXG5cdFx0XHRcdFx0Y2FsTWV0aG9kOiBpdGVtLmNhbE1ldGhvZCxcclxuXHRcdFx0XHRcdHNob3dTdWJUb3RhbHM6IGl0ZW0uc2hvd1N1YlRvdGFscyxcclxuXHRcdFx0XHRcdHNob3dHcmFuZFRvdGFsczogaXRlbS5zaG93R3JhbmRUb3RhbHMsXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoXCJzaG93R3JhbmRUb3RhbHNcIikpIHtcclxuXHRcdFx0XHRcdHRlbXBzaG93QXJyYXkucHVzaCh7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGl0ZW0uY29sTmFtZSxcclxuXHRcdFx0XHRcdFx0Y2FsTWV0aG9kOiBpdGVtLmNhbE1ldGhvZCxcclxuXHRcdFx0XHRcdFx0c2hvd0dyYW5kVG90YWxzOiBpdGVtLnNob3dHcmFuZFRvdGFscyxcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eShcInNob3dTdWJUb3RhbHNcIikpIHtcclxuXHRcdFx0XHRcdHRlbXBzaG93QXJyYXkucHVzaCh7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGl0ZW0uY29sTmFtZSxcclxuXHRcdFx0XHRcdFx0Y2FsTWV0aG9kOiBpdGVtLmNhbE1ldGhvZCxcclxuXHRcdFx0XHRcdFx0c2hvd1N1YlRvdGFsczogaXRlbS5zaG93U3ViVG90YWxzLFxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHRpZiAodGhpcy5maWVsZGxpc3RPYmogJiYgdGhpcy5waXZvdE9iaikge1xyXG5cdFx0XHR0aGlzLmNvbmZpZy5jb2x1bW5Hcm91cCA9IFtdO1xyXG5cdFx0XHR0aGlzLmNvbmZpZy54YXhpcy5ncm91cHMgPSBbXTtcclxuXHRcdFx0dGhpcy5jb25maWcueWF4aXMuc2VyaWVzID0gW107XHJcblx0XHRcdHRoaXMuY29uZmlnLmZpbHRlcnMgPSBbXTtcclxuXHRcdFx0dGhpcy5jb25maWcuZmlsdGVyU2V0dGluZ3MgPSBbXTtcclxuXHRcdFx0dGhpcy5jb25maWcuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MgPSBbXTtcclxuXHRcdFx0bGV0IGdyb3VwU2V0dGluZ3MgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmosXHJcblx0XHRcdFx0XCJncm91cFNldHRpbmdzXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0bGV0IGNvbHVtbnMgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmosXHJcblx0XHRcdFx0XCJjb2x1bW5zXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0bGV0IHJvd3MgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmosXHJcblx0XHRcdFx0XCJyb3dzXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0bGV0IGZpbHRlcnMgPSB0aGlzLmdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3AoXHJcblx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmosXHJcblx0XHRcdFx0XCJmaWx0ZXJzXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0bGV0IGZpbHRlclNldHRpbmdzID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwiZmlsdGVyU2V0dGluZ3NcIlxyXG5cdFx0XHQpO1xyXG5cdFx0XHRsZXQgdmFsdWVzID0gdGhpcy5nZXREYXRhU291cmNlU2V0dGluZ3NQcm9wKFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLFxyXG5cdFx0XHRcdFwidmFsdWVzXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0bGV0IHNvcnRTZXR0aW5ncyA9IHRoaXMuZ2V0RGF0YVNvdXJjZVNldHRpbmdzUHJvcChcclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iaixcclxuXHRcdFx0XHRcInNvcnRTZXR0aW5nc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdGxldCBjYWxjdWxhdGVkRmllbGRTZXR0aW5ncyA9IHRoaXMuZ2V0RGF0YVNvdXJjZVNldHRpbmdzUHJvcChcclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iaixcclxuXHRcdFx0XHRcImNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzXCJcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKGdyb3VwU2V0dGluZ3MubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0XHRcdHRoaXMuY29uZmlnLmNvbHVtbkdyb3VwLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRuYW1lOiBjb2x1bW4ubmFtZSxcclxuXHRcdFx0XHRcdFx0Y2FwdGlvbjpcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldENhcHRpb25CeU5hbWUoY29sdW1uLm5hbWUpIHx8XHJcblx0XHRcdFx0XHRcdFx0Y29sdW1uLmNhcHRpb24sXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly9JZiB0aGVyZSBpcyBhIGdyb3VwLCBmaXJzdCBmaWx0ZXIgdGhlIGNvbHVtbnMgb2YgdGhlIGdyb3VwIGZpZWxkLCBhbmQgdGhlbiBvbmx5IHNhdmUgdGhlIGxhc3Qgb25lXHJcblx0XHRcdFx0Zm9yIChsZXQgY29sdW1uIG9mIGNvbHVtbnMpIHtcclxuXHRcdFx0XHRcdGlmICghc3RhcnRzV2l0aChjb2x1bW4ubmFtZSwgZ3JvdXBTZXR0aW5nc1swXS5uYW1lICsgXCJfXCIpKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuY29uZmlnLmNvbHVtbkdyb3VwLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdG5hbWU6IGNvbHVtbi5uYW1lLFxyXG5cdFx0XHRcdFx0XHRcdGNhcHRpb246XHJcblx0XHRcdFx0XHRcdFx0XHRjb2x1bW4ubmFtZSA9PT0gZ3JvdXBTZXR0aW5nc1swXS5uYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdD8gXCJcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuZ2V0Q2FwdGlvbkJ5TmFtZShjb2x1bW4ubmFtZSkgfHxcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICBjb2x1bW4uY2FwdGlvbixcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IHJvdyBvZiByb3dzKSB7XHJcblx0XHRcdFx0dGhpcy5jb25maWcueGF4aXMuZ3JvdXBzLnB1c2goe1xyXG5cdFx0XHRcdFx0bmFtZTogcm93Lm5hbWUsXHJcblx0XHRcdFx0XHRjYXB0aW9uOiB0aGlzLmdldENhcHRpb25CeU5hbWUocm93Lm5hbWUpIHx8IHJvdy5jYXB0aW9uLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAobGV0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XHJcblx0XHRcdFx0dGhpcy5jb25maWcuZmlsdGVycy5wdXNoKHtcclxuXHRcdFx0XHRcdG5hbWU6IGZpbHRlci5uYW1lLFxyXG5cdFx0XHRcdFx0Y2FwdGlvbjpcclxuXHRcdFx0XHRcdFx0dGhpcy5nZXRDYXB0aW9uQnlOYW1lKGZpbHRlci5uYW1lKSB8fCBmaWx0ZXIuY2FwdGlvbixcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAodGhpcy5maWx0ZXJTZXR0aW5ncyAmJiB0aGlzLmZpbHRlclNldHRpbmdzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5maWx0ZXJTZXR0aW5ncyA9IHRoaXMuZmlsdGVyU2V0dGluZ3M7XHJcblx0XHRcdFx0dGhpcy5jb25maWcuZmlsdGVyU2V0dGluZ3MgPSB0aGlzLmZpbHRlclNldHRpbmdzO1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmZpbHRlclNldHRpbmdzO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnLmZpbHRlclNldHRpbmdzID0gZmlsdGVyU2V0dGluZ3M7XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XHJcblx0XHRcdFx0bGV0IHNlcmllc0RhdGE7XHJcblx0XHRcdFx0bGV0IHRlbXBTaG93T2JqO1xyXG5cdFx0XHRcdGxldCBmaWx0ZXJUZW1wc2hvd0FycmF5ID0gW107XHJcblx0XHRcdFx0aWYgKHRlbXBzaG93QXJyYXkubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRmaWx0ZXJUZW1wc2hvd0FycmF5ID0gdGVtcHNob3dBcnJheS5maWx0ZXIoXHJcblx0XHRcdFx0XHRcdChpdGVtKSA9PlxyXG5cdFx0XHRcdFx0XHRcdGl0ZW0ubmFtZSA9PT0gdmFsdWUubmFtZSAmJlxyXG5cdFx0XHRcdFx0XHRcdGl0ZW0uY2FsTWV0aG9kID09PSB2YWx1ZS50eXBlXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0aWYgKGZpbHRlclRlbXBzaG93QXJyYXkubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdHRlbXBTaG93T2JqID0gZmlsdGVyVGVtcHNob3dBcnJheVswXTtcclxuXHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdHRlbXBTaG93T2JqLmhhc093blByb3BlcnR5KFwic2hvd1N1YlRvdGFsc1wiKSAmJlxyXG5cdFx0XHRcdFx0XHRcdHRlbXBTaG93T2JqLmhhc093blByb3BlcnR5KFwic2hvd0dyYW5kVG90YWxzXCIpXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdHNlcmllc0RhdGEgPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb2xOYW1lOiB2YWx1ZS5uYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFx0Y2FsTWV0aG9kOiB2YWx1ZS50eXBlLFxyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHZhbHVlLmNhcHRpb24sXHJcblx0XHRcdFx0XHRcdFx0XHRzaG93U3ViVG90YWxzOiB0ZW1wU2hvd09iai5zaG93U3ViVG90YWxzLFxyXG5cdFx0XHRcdFx0XHRcdFx0c2hvd0dyYW5kVG90YWxzOiB0ZW1wU2hvd09iai5zaG93R3JhbmRUb3RhbHMsXHJcblx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRpZiAodGVtcFNob3dPYmouaGFzT3duUHJvcGVydHkoXCJzaG93R3JhbmRUb3RhbHNcIikpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHNlcmllc0RhdGEgPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbE5hbWU6IHZhbHVlLm5hbWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNhbE1ldGhvZDogdmFsdWUudHlwZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU6IHZhbHVlLmNhcHRpb24sXHJcblx0XHRcdFx0XHRcdFx0XHRcdHNob3dHcmFuZFRvdGFsczpcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0ZW1wU2hvd09iai5zaG93R3JhbmRUb3RhbHMsXHJcblx0XHRcdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRpZiAodGVtcFNob3dPYmouaGFzT3duUHJvcGVydHkoXCJzaG93U3ViVG90YWxzXCIpKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRzZXJpZXNEYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRjb2xOYW1lOiB2YWx1ZS5uYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjYWxNZXRob2Q6IHZhbHVlLnR5cGUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiB2YWx1ZS5jYXB0aW9uLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93U3ViVG90YWxzOiB0ZW1wU2hvd09iai5zaG93U3ViVG90YWxzLFxyXG5cdFx0XHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKCFzZXJpZXNEYXRhKSB7XHJcblx0XHRcdFx0XHRzZXJpZXNEYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRjb2xOYW1lOiB2YWx1ZS5uYW1lLFxyXG5cdFx0XHRcdFx0XHR0aXRsZTogdmFsdWUuY2FwdGlvbixcclxuXHRcdFx0XHRcdFx0Y2FsTWV0aG9kOiB2YWx1ZS50eXBlLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5jb25maWcueWF4aXMuc2VyaWVzLnB1c2goc2VyaWVzRGF0YSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yIChsZXQgY2FsY3VsYXRlIG9mIGNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzKSB7XHJcblx0XHRcdFx0Y29uc3QgY2FsY3VsYXRlRGF0YSA9IHtcclxuXHRcdFx0XHRcdG5hbWU6IGNhbGN1bGF0ZS5uYW1lLFxyXG5cdFx0XHRcdFx0Zm9ybXVsYTogY2FsY3VsYXRlLmZvcm11bGEsXHJcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6XHJcblx0XHRcdFx0XHRcdGNhbGN1bGF0ZS5mb3JtYXRTdHJpbmcgPT09IFwiXCJcclxuXHRcdFx0XHRcdFx0XHQ/IFwiTjJcIlxyXG5cdFx0XHRcdFx0XHRcdDogY2FsY3VsYXRlLmZvcm1hdFN0cmluZyxcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnLmNhbGN1bGF0ZWRGaWVsZFNldHRpbmdzLnB1c2goY2FsY3VsYXRlRGF0YSk7XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5jb25maWcuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkcyA9IHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkcztcclxuXHRcdFx0dGhpcy5jb25maWcuc29ydFNldHRpbmdzID0gc29ydFNldHRpbmdzO1xyXG5cdFx0XHR0aGlzLmNvbmZpZy5ncm91cFNldHRpbmdzID0gZ3JvdXBTZXR0aW5ncztcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoudXBkYXRlVmlldyh0aGlzLnBpdm90T2JqKTtcclxuXHRcdH1cclxuXHRcdHRoaXMucG9ydGxldC5jb25maWcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcblx0XHQvL3JlbW92ZSB0aGUgc29ydFxyXG5cdFx0aWYgKHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnNvcnRTZXR0aW5ncy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdHRoaXMucHJldmlvdXNTb3J0ID0gdGhpcy5maWVsZGxpc3RPYmoubGFzdFNvcnRJbmZvO1xyXG5cdFx0XHQodGhpcy5maWVsZGxpc3RPYmogYXMgYW55KS5sYXN0U29ydEluZm8gPSBbXTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBhZnRlckVuZ2luZVBvcHVsYXRlKGFyZ3M6IGFueSkge1xyXG5cdFx0aWYgKCFCcm93c2VyLmlzRGV2aWNlICYmIHRoaXMuZmllbGRsaXN0T2JqICYmIHRoaXMucGl2b3RPYmopIHtcclxuXHRcdFx0dGhpcy5jb25maWcuZ3JvdXBTZXR0aW5ncyA9IHRoaXMuZ2V0RGF0YVNvdXJjZVNldHRpbmdzUHJvcChcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLFxyXG5cdFx0XHRcdFwiZ3JvdXBTZXR0aW5nc1wiXHJcblx0XHRcdCk7XHJcblx0XHRcdHRoaXMucG9ydGxldC5jb25maWcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcblx0XHRcdGlmICh0aGlzLmZpZWxkbGlzdE9iaikgdGhpcy5maWVsZGxpc3RPYmoudXBkYXRlKHRoaXMucGl2b3RPYmopO1xyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmdyaWQucXVlcnlDZWxsSW5mbyA9IHRoaXMucXVlcnlDZWxsLmJpbmQodGhpcyk7XHJcblx0XHRcdHRoaXMucGl2b3RPYmouZ3JpZC5oZWFkZXJDZWxsSW5mbyA9IHRoaXMuaGVhZGVyQ2VsbC5iaW5kKHRoaXMpO1xyXG5cdFx0XHQvLyBTTVAyLTM5Mjkgcm9sbGJhY2tcclxuXHRcdFx0Ly8gaWYgKCF0aGlzLmlzQXBwbHlJUlIpXHJcblx0XHRcdC8vIFx0dGhpcy5nZXRDYWxjdWxhdGlvblJlc3VsdEJ5RGFzaGJvYXJkRGF0YVRhYmxlSWQoKTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLlBpdm90X0RhdGEgJiYgdGhpcy5QaXZvdF9EYXRhLmxlbmd0aCkge1xyXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0XHR0aGlzLmVuZ2luZVBvcHVsYXRlZChhcmdzKTtcclxuXHRcdFx0fSwgMTUwMCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldERhdGFTb3VyY2VTZXR0aW5nc1Byb3Aob2JqLCBrZXkpIHtcclxuXHRcdGxldCBwcm9wID0gbnVsbDtcclxuXHRcdGlmIChvYmogJiYgb2JqLmRhdGFTb3VyY2VTZXR0aW5ncykge1xyXG5cdFx0XHRwcm9wID0gb2JqLmRhdGFTb3VyY2VTZXR0aW5nc1trZXldO1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb3ApID09PSBcIltvYmplY3QgQXJyYXldXCIgJiZcclxuXHRcdFx0XHRwcm9wLmxlbmd0aCA+IDBcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0cHJvcCA9IHByb3AubWFwKChpdGVtKSA9PiBpdGVtLnByb3BlcnRpZXMgfHwgaXRlbSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiBwcm9wO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGVuZ2luZVBvcHVsYXRpbmcoYXJncykge1xyXG5cdFx0dGhpcy5ncmFuZFRvdGFscyA9IHt9O1xyXG5cdFx0dGhpcy5zdWJUb3RhbHMgPSB7fTtcclxuXHRcdHRoaXMuYWxsRGF0YVZhbHVlID0gW107XHJcblx0XHQvLyBpZiAoYXJncy5kYXRhU291cmNlU2V0dGluZ3Muc29ydFNldHRpbmdzLmxlbmd0aCkge1xyXG5cdFx0Ly8gXHRmb3IgKFxyXG5cdFx0Ly8gXHRcdGxldCBpID0gMDtcclxuXHRcdC8vIFx0XHRpIDwgYXJncy5kYXRhU291cmNlU2V0dGluZ3Muc29ydFNldHRpbmdzLmxlbmd0aDtcclxuXHRcdC8vIFx0XHRpKytcclxuXHRcdC8vIFx0KSB7XHJcblx0XHQvLyBcdFx0aWYgKFxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoubGFzdFNvcnRJbmZvICYmXHJcblx0XHQvLyBcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5sYXN0U29ydEluZm8ubmFtZSA9PT1cclxuXHRcdC8vIFx0XHRcdFx0YXJncy5kYXRhU291cmNlU2V0dGluZ3Muc29ydFNldHRpbmdzW2ldLm5hbWUgJiZcclxuXHRcdC8vIFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmxhc3RTb3J0SW5mby5vcmRlciA9PT0gXCJBc2NlbmRpbmdcIiAmJlxyXG5cdFx0Ly8gXHRcdFx0IShcclxuXHRcdC8vIFx0XHRcdFx0dGhpcy5maWVsZGxpc3RPYmoubGFzdFNvcnRJbmZvLm5hbWUgPT09XHJcblx0XHQvLyBcdFx0XHRcdFx0dGhpcy5wcmV2aW91c1NvcnQubmFtZSAmJlxyXG5cdFx0Ly8gXHRcdFx0XHR0aGlzLnByZXZpb3VzU29ydC5vcmRlciA9PT0gXCJOb25lXCJcclxuXHRcdC8vIFx0XHRcdClcclxuXHRcdC8vIFx0XHQpIHtcclxuXHRcdC8vIFx0XHRcdGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLnNvcnRTZXR0aW5nc1tpXS5vcmRlciA9IFwiTm9uZVwiO1xyXG5cdFx0Ly8gXHRcdH0gZWxzZSBpZiAoXHJcblx0XHQvLyBcdFx0XHR0aGlzLnByZXZpb3VzU29ydCAmJlxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5maWVsZGxpc3RPYmoubGFzdFNvcnRJbmZvICYmXHJcblx0XHQvLyBcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5sYXN0U29ydEluZm8ubmFtZSA9PT1cclxuXHRcdC8vIFx0XHRcdFx0dGhpcy5wcmV2aW91c1NvcnQubmFtZSAmJlxyXG5cdFx0Ly8gXHRcdFx0dGhpcy5wcmV2aW91c1NvcnQub3JkZXIgPT09IFwiQXNjZW5kaW5nXCJcclxuXHRcdC8vIFx0XHQpIHtcclxuXHRcdC8vIFx0XHRcdGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLnNvcnRTZXR0aW5nc1tpXS5vcmRlciA9IFwiQXNjZW5kaW5nXCI7XHJcblx0XHQvLyBcdFx0fVxyXG5cdFx0Ly8gXHR9XHJcblx0XHQvLyB9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgY2VsbENsaWNrKGFyZ3MpIHtcclxuXHRcdGlmIChhcmdzLmN1cnJlbnRDZWxsLmNsYXNzTGlzdC5jb250YWlucyhcImUtaGVhZGVyY2VsbFwiKSkge1xyXG5cdFx0XHR0aGlzLmZsYWcgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0Ly8g5riF6Zmk5o6S5bqPXHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlU29ydFNldHRpbmdzLnNvcnRPcmRlciAmJlxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZVNvcnRTZXR0aW5ncy5oZWFkZXJUZXh0ICYmXHJcblx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlU29ydFNldHRpbmdzLnNvcnRPcmRlciA9PT1cclxuXHRcdFx0XHRcIkRlc2NlbmRpbmdcIiAmJlxyXG5cdFx0XHRhcmdzLmRhdGEudmFsdWVTb3J0ICYmXHJcblx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlU29ydFNldHRpbmdzLmhlYWRlclRleHQgPT09XHJcblx0XHRcdFx0YXJncy5kYXRhLnZhbHVlU29ydC5sZXZlbE5hbWVcclxuXHRcdCkge1xyXG5cdFx0XHR0aGlzLnBpdm90T2JqLnNldFByb3BlcnRpZXMoXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0ZGF0YVNvdXJjZVNldHRpbmdzOiB7XHJcblx0XHRcdFx0XHRcdHZhbHVlU29ydFNldHRpbmdzOiB7XHJcblx0XHRcdFx0XHRcdFx0c29ydE9yZGVyOiBcIkRlc2NlbmRpbmdcIixcclxuXHRcdFx0XHRcdFx0XHRoZWFkZXJUZXh0OiBcIlwiLFxyXG5cdFx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHRydWVcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKHRoaXMucGl2b3RPYmopIHRoaXMucGl2b3RPYmoucmVmcmVzaERhdGEoKTtcclxuXHRcdFx0dGhpcy5mbGFnID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuY29uZmlnLnZhbHVlU29ydFNldHRpbmdzID0ge307XHJcblx0XHRcdHRoaXMucG9ydGxldC5jb25maWcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHF1ZXJ5Q2VsbChhcmdzOiBhbnkpOiB2b2lkIHtcclxuXHRcdCh0aGlzLnBpdm90T2JqLnJlbmRlck1vZHVsZSBhcyBhbnkpLnJvd0NlbGxCb3VuZEV2ZW50KGFyZ3MpO1xyXG5cdFx0bGV0IHJvd0luZGV4ID0gTnVtYmVyKGFyZ3MuY2VsbC5nZXRBdHRyaWJ1dGUoXCJpbmRleFwiKSk7XHJcblx0XHQvLyDmlrDniYjmnKwyNi545LitIGFyaWEtY29saW5kZXgg5Lya5q+U5pen54mI5pysdjIwLngg5aSaMVxyXG5cdFx0bGV0IGNvbEluZGV4ID0gcGFyc2VJbnQoYXJncy5jZWxsLmdldEF0dHJpYnV0ZShcImFyaWEtY29saW5kZXhcIikpIC0gMTtcclxuXHRcdGlmIChcclxuXHRcdFx0IXRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbmRpdGlvbmFsRm9ybWF0U2V0dGluZ3MubGVuZ3RoXHJcblx0XHQpIHtcclxuXHRcdFx0aWYgKGFyZ3MuZGF0YSAmJiBhcmdzLmRhdGFbMF0uZm9ybWF0dGVkVGV4dCA9PT0gXCJHcmFuZCBUb3RhbFwiKSB7XHJcblx0XHRcdFx0YXJncy5jZWxsLmNsYXNzTGlzdC5hZGQoXCJncmFuZC1jbGFzc1wiKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLmNlbGwuY2xhc3NMaXN0LmFkZChcclxuXHRcdFx0XHRcdHJvd0luZGV4ICUgMiA/IFwib2RkLWNsYXNzXCIgOiBcImV2ZW4tY2xhc3NcIlxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGxldCBtZWFzdXJlQXJyID1cclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb25kaXRpb25hbEZvcm1hdFNldHRpbmdzLm1hcChcclxuXHRcdFx0XHRcdChvYmopID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIG9iai5tZWFzdXJlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRtZWFzdXJlQXJyLmluY2x1ZGVzKGFyZ3MuZGF0YVtjb2xJbmRleF0uYWN0dWFsVGV4dCkgJiZcclxuXHRcdFx0XHRhcmdzLmRhdGFbY29sSW5kZXhdLnN0eWxlXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGFyZ3MuY2VsbC5zdHlsZS5jc3NUZXh0ICs9IGBiYWNrZ3JvdW5kLWNvbG9yOiAke2FyZ3MuZGF0YVtjb2xJbmRleF0uc3R5bGUuYmFja2dyb3VuZENvbG9yfSAhaW1wb3J0YW50YDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoYXJncy5kYXRhICYmIGFyZ3MuZGF0YVswXS5mb3JtYXR0ZWRUZXh0ID09PSBcIkdyYW5kIFRvdGFsXCIpXHJcblx0XHRcdFx0YXJncy5jZWxsLmNsYXNzTGlzdC5hZGQoXCJlLWN1c3RvbWNsYXNzXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChhcmdzLmRhdGEgJiYgYXJncy5kYXRhWzBdLmZvcm1hdHRlZFRleHQgPT09IFwiR3JhbmQgVG90YWxcIikge1xyXG5cdFx0XHRhcmdzLmNlbGwuY2xhc3NMaXN0LmFkZChcImdyYW5kLWNsYXNzXCIpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKHJvd0luZGV4ICUgMikge1xyXG5cdFx0XHRcdGFyZ3MuY2VsbC5jbGFzc0xpc3QuYWRkKFwib2RkLWNsYXNzXCIpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFyZ3MuY2VsbC5jbGFzc0xpc3QuYWRkKFwiZXZlbi1jbGFzc1wiKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vZ2V0IHNvcnRpbmcgZGF0YVxyXG5cdFx0aWYgKHRoaXMuZmxhZykge1xyXG5cdFx0XHR0aGlzLmZsYWcgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5jb25maWcudmFsdWVTb3J0U2V0dGluZ3MgPVxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlU29ydFNldHRpbmdzW1xyXG5cdFx0XHRcdFx0XCJwcm9wZXJ0aWVzXCJcclxuXHRcdFx0XHRdO1xyXG5cdFx0XHR0aGlzLnBvcnRsZXQuY29uZmlnID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcpO1xyXG5cdFx0fVxyXG5cdFx0Ly9jdXN0b21pemUgdGhlIGhlYWRlciB0ZXh0XHJcblx0XHRpZiAodGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cy5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGFyZ3MuZGF0YSAmJlxyXG5cdFx0XHRcdGFyZ3MuZGF0YVtjb2xJbmRleF0gJiZcclxuXHRcdFx0XHRhcmdzLmRhdGFbY29sSW5kZXhdLmF4aXMgPT09IFwicm93XCJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0YXJncy5jZWxsLnF1ZXJ5U2VsZWN0b3IoXCIuZS1jZWxsdmFsdWVcIikuaW5uZXJUZXh0ID1cclxuXHRcdFx0XHRcdGFyZ3MuZGF0YVtjb2xJbmRleF0uZm9ybWF0dGVkVGV4dDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFNNUDItMjkxMiBzdWJ0b3RhbOWtl+S9k+WKoOeyl1xyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzLmxlbmd0aCAmJlxyXG5cdFx0XHRhcmdzLmRhdGFbY29sSW5kZXhdICYmXHJcblx0XHRcdGFyZ3MuZGF0YVswXS5sZXZlbCAhPT1cclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzLmxlbmd0aCAtIDEgJiZcclxuXHRcdFx0YXJncy5kYXRhW2NvbEluZGV4XS5yb3dIZWFkZXJzICE9PSBcIlwiICYmXHJcblx0XHRcdGFyZ3MuZGF0YVtjb2xJbmRleF0uYXhpcyA9PSBcInZhbHVlXCJcclxuXHRcdCkge1xyXG5cdFx0XHRhcmdzLmNlbGwuY2xhc3NMaXN0LmFkZChcImUtY3VzdG9tY2xhc3NcIik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGhlYWRlckNlbGwoYXJnczogYW55KTogdm9pZCB7XHJcblx0XHQodGhpcy5waXZvdE9iai5yZW5kZXJNb2R1bGUgYXMgYW55KS5jb2x1bW5DZWxsQm91bmRFdmVudChhcmdzKTtcclxuXHRcdGlmICh0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHRsZXQgbm9kZSA9IGFyZ3Mubm9kZS5xdWVyeVNlbGVjdG9yKFxyXG5cdFx0XHRcdFwiLmUtaGVhZGVyY2VsbGRpdiAuZS1oZWFkZXJ0ZXh0XCJcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKG5vZGUpIG5vZGUuaW5uZXJUZXh0ID0gYXJncy5jZWxsLmNvbHVtbi5oZWFkZXJUZXh0O1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgdGV4dEFsaWduID0gYXJncy5jZWxsLmNvbHVtbi50ZXh0QWxpZ247XHJcblx0XHRhcmdzLmNlbGwuY29sdW1uLmhlYWRlclRleHRBbGlnbiA9IHRleHRBbGlnbjtcclxuXHRcdGFyZ3Mubm9kZS5zdHlsZS50ZXh0QWxpZ24gPSB0ZXh0QWxpZ24gPT09IFwiUmlnaHRcIiA/IFwicmlnaHRcIiA6IFwibGVmdFwiOyAvLyBBbGlnbiByaWdodCBmb3IgbnVtZXJpYyBjb2x1bW5zXHJcblx0XHRpZiAodGV4dEFsaWduID09PSBcIlJpZ2h0XCIpIHtcclxuXHRcdFx0YXJncy5ub2RlLmNsYXNzTGlzdC5hZGQoXCJoZWFkZXItYWxpZ24tcmlnaHRcIik7XHJcblx0XHR9XHJcblx0XHR0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBkYXRhQm91bmQoZSkge1xyXG5cdFx0aWYgKHRoaXMuaXNJbml0KSB7XHJcblx0XHRcdHRoaXMuaXNJbml0ID0gZmFsc2U7XHJcblx0XHR9XHJcblx0XHR0aGlzLmdyYW5kVG90YWxzID0ge307XHJcblx0XHR0aGlzLnN1YlRvdGFscyA9IHt9O1xyXG5cdFx0aWYgKHRoaXMucGl2b3RPYmouZ3JpZCkge1xyXG5cdFx0XHR0aGlzLnBpdm90T2JqLmdyaWQucmVzaXplU3RvcCA9IHRoaXMucmVzaXplU3RvcC5iaW5kKHRoaXMpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMucGl2b3RPYmopIHtcclxuXHRcdFx0dmFyIGluZGV4ID0gW107XHJcblx0XHRcdC8vIEdldCB0aGUgZW1wdHkgcm93IGhlYWRlcnMgaGVyZS5cclxuXHRcdFx0dmFyIGVtcHR5Um93SGVhZGVyOiBhbnkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFxyXG5cdFx0XHRcdCd0ZFthcmlhLWxhYmVsPVwiIGNvbHVtbiBoZWFkZXIgXCJdJ1xyXG5cdFx0XHQpO1xyXG5cdFx0XHRmb3IgKHZhciBlbGUgb2YgZW1wdHlSb3dIZWFkZXIpIHtcclxuXHRcdFx0XHRpZiAoZWxlKSB7XHJcblx0XHRcdFx0XHRpbmRleC5wdXNoKGVsZS5nZXRBdHRyaWJ1dGUoXCJpbmRleFwiKSk7XHJcblx0XHRcdFx0XHQvLyBSZW1vdmUgYWxsIHRoZSBlbXB0eSByb3cgaGVhZGVycyBoZXJlLlxyXG5cdFx0XHRcdFx0ZWxlLmNsb3Nlc3QoXCJ0clwiKS5yZW1vdmUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBpbmRleC5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdC8vIEdldCB0aGUgZW1wdHkgdmFsdWVzIGhlcmUuXHJcblx0XHRcdFx0dmFyIGVtcHR5VmFsdWVzID0gdGhpcy5waXZvdE9iai5lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXHJcblx0XHRcdFx0XHRgdGRbaW5kZXg9XCIke2luZGV4W2ldfVwiXWBcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGlmIChlbXB0eVZhbHVlc1swXSkge1xyXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIGFsbCB0aGUgZW1wdHkgdmFsdWUgcm93cyBoZXJlLlxyXG5cdFx0XHRcdFx0ZW1wdHlWYWx1ZXNbMF0uY2xvc2VzdChcInRyXCIpLnJlbW92ZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLmZpZWxkbGlzdE9iaiAmJlxyXG5cdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5waXZvdEJ1dHRvbk1vZHVsZSAmJlxyXG5cdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5waXZvdEJ1dHRvbk1vZHVsZS5tZW51T3B0aW9uXHJcblx0XHQpIHtcclxuXHRcdFx0KFxyXG5cdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLnBpdm90QnV0dG9uTW9kdWxlLm1lbnVPcHRpb24gYXMgYW55XHJcblx0XHRcdCkuc3RyaW5nQWdncmVnYXRlVHlwZXMgPSBbXHJcblx0XHRcdFx0XCJDb3VudFwiLFxyXG5cdFx0XHRcdFwiRGlzdGluY3RDb3VudFwiLFxyXG5cdFx0XHRcdFwiRmlyc3RcIixcclxuXHRcdFx0XHRcIkxhc3RcIixcclxuXHRcdFx0XTtcclxuXHRcdH1cclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5waXZvdE9iai5waXZvdEJ1dHRvbk1vZHVsZSAmJlxyXG5cdFx0XHR0aGlzLnBpdm90T2JqLnBpdm90QnV0dG9uTW9kdWxlLm1lbnVPcHRpb25cclxuXHRcdCkge1xyXG5cdFx0XHQoXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5waXZvdEJ1dHRvbk1vZHVsZS5tZW51T3B0aW9uIGFzIGFueVxyXG5cdFx0XHQpLnN0cmluZ0FnZ3JlZ2F0ZVR5cGVzID0gW1xyXG5cdFx0XHRcdFwiQ291bnRcIixcclxuXHRcdFx0XHRcIkRpc3RpbmN0Q291bnRcIixcclxuXHRcdFx0XHRcIkZpcnN0XCIsXHJcblx0XHRcdFx0XCJMYXN0XCIsXHJcblx0XHRcdF07XHJcblx0XHR9XHJcblx0XHRsZXQgYWxsU3VtbWFyeVR5cGUgPSBBTExfQUdHUkVHQVRFX1RZUEVTIGFzIGFueTtcclxuXHRcdHRoaXMucGl2b3RPYmouZ2V0QWxsU3VtbWFyeVR5cGUgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdHJldHVybiBhbGxTdW1tYXJ5VHlwZTtcclxuXHRcdH07XHJcblx0XHRpZiAodGhpcy5maWVsZGxpc3RPYmopIHtcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmouYWdncmVnYXRlVHlwZXMgPSBhbGxTdW1tYXJ5VHlwZTtcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmouZ2V0QWxsU3VtbWFyeVR5cGUgPSBmdW5jdGlvbiAoKSB7XHJcblx0XHRcdFx0cmV0dXJuIGFsbFN1bW1hcnlUeXBlO1xyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5zZXRWYWx1ZUl0ZW1EYXRhKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNldFZhbHVlSXRlbURhdGEoKSB7XHJcblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcclxuXHRcdFx0Y29uc3QgZmllbGREb20gPSB0aGlzLmZpZWxkbGlzdE9iai5maWVsZExpc3RTcGlubmVyRWxlbWVudDtcclxuXHRcdFx0dGhpcy5kYXRhU291cmNlU2V0dGluZ3MudmFsdWVzLmZvckVhY2goKHZhbHVlOiBhbnkpID0+IHtcclxuXHRcdFx0XHRpZiAodmFsdWUudHlwZSAhPT0gXCJGaXJzdFwiICYmIHZhbHVlLnR5cGUgIT09IFwiTGFzdFwiKSB7XHJcblx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGNvbnN0IHZhbHVlc0RvbSA9IGZpZWxkRG9tLnF1ZXJ5U2VsZWN0b3IoXHJcblx0XHRcdFx0XHRgLmUtdmFsdWVzIC4ke3ZhbHVlLm5hbWV9IC5lLXB2dC1idG4tY29udGVudGBcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdHZhbHVlc0RvbS5pbm5lckhUTUwgIT09IGAke3ZhbHVlLnR5cGV9IG9mICR7dmFsdWUuY2FwdGlvbn1gXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHR2YWx1ZXNEb20uaW5uZXJIVE1MID0gYCR7dmFsdWUudHlwZX0gb2YgJHt2YWx1ZS5jYXB0aW9ufWA7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjYWxjdWxhdGVkQ2VsbFNldHMoYXJncywgY3VyRmllbGRzKSB7XHJcblx0XHRsZXQgbWF0Y2hGaWVsZHMgPSBjdXJGaWVsZHNbXCJtYXRjaEZpZWxkc1wiXTtcclxuXHRcdGxldCBmb3JtdWxhID0gY3VyRmllbGRzW1wiZm9ybXVsYVwiXTtcclxuXHRcdGxldCB2YWx1ZSA9IDA7XHJcblx0XHRsZXQgcm93cyA9IHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3M7XHJcblx0XHRsZXQgaW52YWxpZFR5cGVzID0gW1wic3RyaW5nXCIsIFwibnZhcmNoYXJcIiwgXCJkYXRlXCIsIFwiZGF0ZXRpbWVcIl07XHJcblx0XHRsZXQgaXNJbnZhbGlkID0gbWF0Y2hGaWVsZHMuc29tZSgoZikgPT5cclxuXHRcdFx0aW52YWxpZFR5cGVzLmluY2x1ZGVzKFxyXG5cdFx0XHRcdHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcigoZWwpID0+IGVsLmNvbE5hbWUgPT09IGYubWF0Y2hXb3JkKVswXVtcclxuXHRcdFx0XHRcdFwiZGF0YVR5cGVcIlxyXG5cdFx0XHRcdF1cclxuXHRcdFx0KVxyXG5cdFx0KTtcclxuXHRcdGxldCBjdXJyZW50cm93Q2VsbFR5cGUgPSBhcmdzLnJvd0NlbGxUeXBlO1xyXG5cdFx0aWYgKGlzSW52YWxpZCkgcmV0dXJuIFwiLVwiO1xyXG5cdFx0aWYgKFxyXG5cdFx0XHRhcmdzLnJvd0NlbGxUeXBlID09PSBcInN1YlRvdGFsXCIgfHxcclxuXHRcdFx0YXJncy5yb3dDZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCJcclxuXHRcdCkge1xyXG5cdFx0XHRsZXQgY2hpbGRIZWFkZXJzID0gW107XHJcblx0XHRcdGxldCBzdW0gPSAwO1xyXG5cdFx0XHRsZXQgY2xvbmVDZWxsU2V0cyA9IGNsb25lRGVlcChhcmdzLmNlbGxTZXRzKTtcclxuXHRcdFx0bGV0IGdyb3VwTmFtZUFycmF5cyA9IFtdO1xyXG5cdFx0XHRmb3IgKGxldCBpbmRleCA9IGFyZ3Mucm93LmxldmVsOyBpbmRleCA8IHJvd3MubGVuZ3RoOyBpbmRleCsrKSB7XHJcblx0XHRcdFx0Z3JvdXBOYW1lQXJyYXlzLnB1c2gocm93c1tpbmRleF0ubmFtZSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjbG9uZUNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0bGV0IHZhbHVlcyA9IFtdO1xyXG5cdFx0XHRcdGxldCBoZWFkZXIgPSBncm91cE5hbWVBcnJheXNcclxuXHRcdFx0XHRcdC5tYXAoKG5hbWUpID0+IHtcclxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goY2xvbmVDZWxsU2V0c1tpXVtuYW1lXSk7XHJcblx0XHRcdFx0XHRcdHJldHVybiBjbG9uZUNlbGxTZXRzW2ldW25hbWVdO1xyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdC5qb2luKFwiLVwiKTtcclxuXHRcdFx0XHRpZiAoIShjaGlsZEhlYWRlcnMgYXMgYW55KS5pbmNsdWRlcyhoZWFkZXIpKSB7XHJcblx0XHRcdFx0XHRjaGlsZEhlYWRlcnMucHVzaChoZWFkZXIpO1xyXG5cdFx0XHRcdFx0bGV0IGZpbHRlck9iajogYW55ID0ge307XHJcblx0XHRcdFx0XHRncm91cE5hbWVBcnJheXMubWFwKFxyXG5cdFx0XHRcdFx0XHQobmFtZSwgaSkgPT4gKGZpbHRlck9ialtuYW1lXSA9IHZhbHVlc1tpXSlcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRhcmdzLmNlbGxTZXRzID0gX2ZpbHRlcihjbG9uZUNlbGxTZXRzLCBmaWx0ZXJPYmopO1xyXG5cdFx0XHRcdFx0YXJncy5yb3dDZWxsVHlwZSA9IFwidmFsdWVcIjtcclxuXHRcdFx0XHRcdHN1bSArPSB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXMoYXJncywgbWF0Y2hGaWVsZHMsIGZvcm11bGEpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRhcmdzLnJvd0NlbGxUeXBlID0gY3VycmVudHJvd0NlbGxUeXBlO1xyXG5cclxuXHRcdFx0Ly8g5pqC5a2Y5b2T5YmNU3ViVG90YWzvvIwg55So5LqO5pS257yp5pe26K+75Y+WXHJcblx0XHRcdGxldCBwcmVmaXhIZWFkZXIgPSB0aGlzLmdldENhbGNIZWFkZXIoYXJncywgZm9ybXVsYSk7XHJcblx0XHRcdHRoaXMudXBkYXRlVGVtcFN1YnRvdGFscyhwcmVmaXhIZWFkZXIsIHN1bSk7XHJcblx0XHRcdHJldHVybiBzdW07XHJcblx0XHR9IGVsc2UgaWYgKGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwidmFsdWVcIikge1xyXG5cdFx0XHRpZiAoYXJncy5yb3cuaGFzQ2hpbGQpIHtcclxuXHRcdFx0XHQvLyBjb2xsYXBzZSDor7vlj5ZTdWJUb3RhbFxyXG5cdFx0XHRcdGxldCBoZWFkZXIgPSB0aGlzLmdldENhbGNIZWFkZXIoYXJncywgZm9ybXVsYSk7XHJcblx0XHRcdFx0bGV0IGluZGV4ID0gdGhpcy50ZW1wU3VidG90YWxzLmZpbmRJbmRleChcclxuXHRcdFx0XHRcdChpdGVtKSA9PiBpdGVtLnJvd05hbWUgPT09IGhlYWRlclxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0aWYgKGluZGV4ID4gLTEpIHtcclxuXHRcdFx0XHRcdHZhbHVlID0gdGhpcy50ZW1wU3VidG90YWxzW2luZGV4XS5yb3dWYWx1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gZXhwYW5kXHJcblx0XHRcdFx0dmFsdWUgPSB0aGlzLmNhbGN1bGF0ZWRWYWx1ZXMoYXJncywgbWF0Y2hGaWVsZHMsIGZvcm11bGEpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRhY3Rpb25GYWlsdXJlKGFyZ3M6IFBpdm90QWN0aW9uRmFpbHVyZUV2ZW50QXJncyk6IHZvaWQge1xyXG5cdFx0aWYgKGFyZ3MuYWN0aW9uTmFtZSA9PSBcIkRyaWxsIGRvd25cIiB8fCBhcmdzLmFjdGlvbk5hbWUgPT0gXCJEcmlsbCB1cFwiKSB7XHJcblx0XHRcdC8vIFRyaWdnZXJzIHdoZW4gdGhlIGN1cnJlbnQgVUkgYWN0aW9uIGZhaWxzIHRvIGFjaGlldmUgdGhlIGRlc2lyZWQgcmVzdWx0LlxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRDYWxjSGVhZGVyKGFyZ3MsIGZvcm11bGE/KSB7XHJcblx0XHRsZXQgaGVhZGVyID0gXCJcIjtcclxuXHRcdGxldCByb3dzID0gdGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cztcclxuXHRcdGxldCBncm91cE5hbWVBcnJheXMgPSBbXTtcclxuXHRcdGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcmdzLnJvdy5sZXZlbDsgaW5kZXgrKykge1xyXG5cdFx0XHRncm91cE5hbWVBcnJheXMucHVzaChyb3dzW2luZGV4XS5uYW1lKTtcclxuXHRcdH1cclxuXHRcdGhlYWRlciA9IGdyb3VwTmFtZUFycmF5cy5sZW5ndGhcclxuXHRcdFx0PyBncm91cE5hbWVBcnJheXNcclxuXHRcdFx0XHRcdC5tYXAoKG5hbWUpID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIGFyZ3MuY2VsbFNldHNbMF1bbmFtZV07XHJcblx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0LmpvaW4oXCItXCIpICtcclxuXHRcdFx0ICBcIi1cIiArXHJcblx0XHRcdCAgYXJncy5yb3cuYWN0dWFsVGV4dFxyXG5cdFx0XHQ6IGFyZ3Mucm93LmFjdHVhbFRleHQ7XHJcblx0XHRpZiAoZm9ybXVsYSkgaGVhZGVyICs9IFwiX19fXCIgKyBmb3JtdWxhO1xyXG5cdFx0cmV0dXJuIGhlYWRlcjtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgdXBkYXRlVGVtcFN1YnRvdGFscyhyb3dOYW1lLCByb3dWYWx1ZSkge1xyXG5cdFx0bGV0IGluZGV4ID0gdGhpcy50ZW1wU3VidG90YWxzLmZpbmRJbmRleChcclxuXHRcdFx0KGl0ZW0pID0+IGl0ZW0ucm93TmFtZSA9PT0gcm93TmFtZVxyXG5cdFx0KTtcclxuXHRcdGxldCB0ZW1wOiBhbnkgPSB7fTtcclxuXHRcdHRlbXAucm93TmFtZSA9IHJvd05hbWU7XHJcblx0XHR0ZW1wLnJvd1ZhbHVlID0gcm93VmFsdWU7XHJcblx0XHRpZiAoaW5kZXggPiAtMSkge1xyXG5cdFx0XHR0aGlzLnRlbXBTdWJ0b3RhbHMuc3BsaWNlKGluZGV4LCAxLCB0ZW1wKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMudGVtcFN1YnRvdGFscy5wdXNoKHRlbXApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjYWxjdWxhdGVkVmFsdWVzKGFyZ3MsIG1hdGNoRmllbGRzLCBmb3JtdWxhKSB7XHJcblx0XHRpZiAobWF0Y2hGaWVsZHMubGVuZ3RoKSB7XHJcblx0XHRcdGxldCBjYWxjdWxlZE1hdGNoRmllbGRzID0gbWF0Y2hGaWVsZHMubWFwKChmKSA9PiB7XHJcblx0XHRcdFx0c3dpdGNoIChmLm1hdGNoTWV0aG9kKSB7XHJcblx0XHRcdFx0XHRjYXNlIFwiRmlyc3RcIjpcclxuXHRcdFx0XHRcdGNhc2UgXCJMYXN0XCI6XHJcblx0XHRcdFx0XHRcdGYucmVwbGFjZVZhbHVlID0gdGhpcy5jYWxjdWxhdGVkRmlzdExhc3QoXHJcblx0XHRcdFx0XHRcdFx0YXJncyxcclxuXHRcdFx0XHRcdFx0XHRmLm1hdGNoTWV0aG9kLFxyXG5cdFx0XHRcdFx0XHRcdGYubWF0Y2hXb3JkXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0Y2FzZSBcIk1heFwiOlxyXG5cdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSA9IG1heEJ5KGFyZ3MuY2VsbFNldHMsIChvKSA9PlxyXG5cdFx0XHRcdFx0XHRcdE51bWJlcihvW2YubWF0Y2hXb3JkXSlcclxuXHRcdFx0XHRcdFx0KVtmLm1hdGNoV29yZF07XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0Y2FzZSBcIk1pblwiOlxyXG5cdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSA9IG1pbkJ5KGFyZ3MuY2VsbFNldHMsIChvKSA9PlxyXG5cdFx0XHRcdFx0XHRcdE51bWJlcihvW2YubWF0Y2hXb3JkXSlcclxuXHRcdFx0XHRcdFx0KVtmLm1hdGNoV29yZF07XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0Y2FzZSBcIlN1bVwiOlxyXG5cdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSA9IHN1bUJ5KGFyZ3MuY2VsbFNldHMsIChvKSA9PlxyXG5cdFx0XHRcdFx0XHRcdE51bWJlcihvW2YubWF0Y2hXb3JkXSlcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Ly8gU01QMi00MDk0IFVuaWNvcm4gLSBMMyBBZGp1c3RlZCBOQVYgdmFsdWUgaXNzdWVzXHJcblx0XHRcdFx0XHRcdGYucmVwbGFjZVZhbHVlID1cclxuXHRcdFx0XHRcdFx0XHRmLnJlcGxhY2VWYWx1ZSAmJiBmLnJlcGxhY2VWYWx1ZS50b0ZpeGVkKDEwKTtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRjYXNlIFwiQXZnXCI6XHJcblx0XHRcdFx0XHRcdGYucmVwbGFjZVZhbHVlID0gbWVhbkJ5KGFyZ3MuY2VsbFNldHMsIChvKSA9PlxyXG5cdFx0XHRcdFx0XHRcdE51bWJlcihvW2YubWF0Y2hXb3JkXSlcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIGY7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRsZXQgcmVzdWx0Rm9ybXVsYSA9IGZvcm11bGE7XHJcblx0XHRcdGlmIChjYWxjdWxlZE1hdGNoRmllbGRzLmxlbmd0aCkge1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2FsY3VsZWRNYXRjaEZpZWxkcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0cmVzdWx0Rm9ybXVsYSA9IHJlc3VsdEZvcm11bGEucmVwbGFjZShcclxuXHRcdFx0XHRcdFx0Y2FsY3VsZWRNYXRjaEZpZWxkc1tpXS5tYXRjaFN0cixcclxuXHRcdFx0XHRcdFx0XCIoXCIgKyBjYWxjdWxlZE1hdGNoRmllbGRzW2ldLnJlcGxhY2VWYWx1ZSArIFwiKVwiXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGxldCByZXN1bHQgPSBuZXcgRnVuY3Rpb24oXHJcblx0XHRcdFx0XHRcInJldHVybiBcIiArIHJlc3VsdEZvcm11bGEucmVwbGFjZSgvW14tPD4/OigpXFxkLyorLl0vZywgXCJcIilcclxuXHRcdFx0XHQpKCk7XHJcblx0XHRcdFx0aWYgKGlzTmFOKHJlc3VsdCkgfHwgIWlzRmluaXRlKHJlc3VsdCkpIHtcclxuXHRcdFx0XHRcdHJldHVybiAwO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0XHRyZXR1cm4gTmFOO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblxyXG5cdHRvdGFsRm9ybWF0dGVkID0ge307XHJcblx0cHVibGljIGFnZ3JlZ2F0ZUNlbGxJbmZvKGFyZ3MpIHtcclxuXHRcdGxldCBhc09mRGF0ZSA9IHRoaXMucGJmLnRpbWUodGhpcy5kYXNoYm9hcmQuYXNPZkRhdGUpO1xyXG5cdFx0Ly8gaWYgY2FsY3VsYXRlZCBmaWVsZFxyXG5cdFx0aWYgKGFyZ3MuYWdncmVnYXRlVHlwZSA9PSBcIkNhbGN1bGF0ZWRGaWVsZFwiKSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0aWYgKGFyZ3MuZmllbGROYW1lID09IHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1tpXS5uYW1lKSB7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gdGhpcy5jYWxjdWxhdGVkQ2VsbFNldHMoXHJcblx0XHRcdFx0XHRcdGFyZ3MsXHJcblx0XHRcdFx0XHRcdHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1tpXVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAoXHJcblx0XHRcdFtcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZUlSUlwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlSVJSQmVmb3JlQ2FycmllZFwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlSVJSSVJSRGF0ZVwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlSVJSTVREXCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVJUlJRVERcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZUlSUllURFwiLFxyXG5cdFx0XHRdLmluY2x1ZGVzKGFyZ3MuYWdncmVnYXRlVHlwZSlcclxuXHRcdCkge1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcIj09PT09PT09PT09PT09PT09PT09PT09PT09XCIpO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcImFyZ3M6XCIsIGFyZ3MpO1xyXG5cdFx0XHRsZXQgdmFsdWVGaWVsZDtcclxuXHRcdFx0bGV0IGRhdGVGaWVsZDtcclxuXHRcdFx0bGV0IHN0YXJ0RGF0ZTtcclxuXHRcdFx0bGV0IGVuZERhdGU7XHJcblx0XHRcdHN3aXRjaCAoYXJncy5hZ2dyZWdhdGVUeXBlKSB7XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZUlSUlwiOlxyXG5cdFx0XHRcdFx0dmFsdWVGaWVsZCA9IFwiSVJSQWRqVmFsdWVcIjtcclxuXHRcdFx0XHRcdGRhdGVGaWVsZCA9IFwiSVJSRGF0ZVwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZUlSUk1URFwiOlxyXG5cdFx0XHRcdFx0c3RhcnREYXRlID0gbW9tZW50KGFzT2ZEYXRlKVxyXG5cdFx0XHRcdFx0XHQuc3RhcnRPZihcIm1vbnRoXCIpXHJcblx0XHRcdFx0XHRcdC5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xyXG5cdFx0XHRcdFx0ZW5kRGF0ZSA9IG1vbWVudChhc09mRGF0ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHRcdFx0XHRcdHZhbHVlRmllbGQgPSBcIklSUkFkalZhbHVlXCI7XHJcblx0XHRcdFx0XHRkYXRlRmllbGQgPSBcIklSUkRhdGVcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVJUlJRVERcIjpcclxuXHRcdFx0XHRcdHN0YXJ0RGF0ZSA9IG1vbWVudChhc09mRGF0ZSlcclxuXHRcdFx0XHRcdFx0LnN0YXJ0T2YoXCJxdWFydGVyXCIpXHJcblx0XHRcdFx0XHRcdC5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xyXG5cdFx0XHRcdFx0ZW5kRGF0ZSA9IG1vbWVudChhc09mRGF0ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHRcdFx0XHRcdHZhbHVlRmllbGQgPSBcIklSUkFkalZhbHVlXCI7XHJcblx0XHRcdFx0XHRkYXRlRmllbGQgPSBcIklSUkRhdGVcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVJUlJZVERcIjpcclxuXHRcdFx0XHRcdHN0YXJ0RGF0ZSA9IG1vbWVudChhc09mRGF0ZSlcclxuXHRcdFx0XHRcdFx0LnN0YXJ0T2YoXCJ5ZWFyXCIpXHJcblx0XHRcdFx0XHRcdC5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xyXG5cdFx0XHRcdFx0ZW5kRGF0ZSA9IG1vbWVudChhc09mRGF0ZSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcclxuXHRcdFx0XHRcdHZhbHVlRmllbGQgPSBcIklSUkFkalZhbHVlXCI7XHJcblx0XHRcdFx0XHRkYXRlRmllbGQgPSBcIklSUkRhdGVcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVJUlJJUlJEYXRlXCI6XHJcblx0XHRcdFx0XHR2YWx1ZUZpZWxkID0gXCJJUlJBZGpWYWx1ZVwiO1xyXG5cdFx0XHRcdFx0ZGF0ZUZpZWxkID0gXCJDYWxjdWxhdGVJUlJEYXRlXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlSVJSQmVmb3JlQ2FycmllZFwiOlxyXG5cdFx0XHRcdFx0dmFsdWVGaWVsZCA9IFwiSVJSQWRqVmFsdWVCZWZvcmVDYXJyeVwiO1xyXG5cdFx0XHRcdFx0ZGF0ZUZpZWxkID0gXCJJUlJEYXRlXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdFx0bGV0IE5BVkFkaiA9IDA7XHJcblx0XHRcdGxldCB2YWx1ZXMgPSBbXTtcclxuXHRcdFx0bGV0IGJlZm9yZVN0YXJ0TkFWQWRqID0gMDsgLy8g5a2Y5YKo5LiK5LiA5Liq6Zi25q6155qETkFWQWRq5oC75ZKMXHJcblx0XHRcdGxldCBiZWZvcmVTdGFydFZhbHVlcyA9IFtdOyAvLyDlrZjlgqjkuIrkuIDkuKrpmLbmrrXnmoTntK/orqHpm4blkIggKOWPquaYr+S4uuS6huaJk+WNsO+8jOayoeacieWunumZheeUqOmAlClcclxuXHRcdFx0bGV0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdGVsLmNvbE5hbWUgPT09XHJcblx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmdldEFnZ3JlZ2F0ZVR5cGUoXHJcblx0XHRcdFx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZVxyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MuY2VsbFNldHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRjb25zdCBkYXRhID0ge1xyXG5cdFx0XHRcdFx0YW1vdW50OiBhcmdzLmNlbGxTZXRzW2ldW1wiSVJSQW1vdW50XCJdLFxyXG5cdFx0XHRcdFx0ZGF0ZTpcclxuXHRcdFx0XHRcdFx0dGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW2RhdGVGaWVsZF0pID09PVxyXG5cdFx0XHRcdFx0XHRcIkludmFsaWQgZGF0ZVwiXHJcblx0XHRcdFx0XHRcdFx0PyBhc09mRGF0ZVxyXG5cdFx0XHRcdFx0XHRcdDogdGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW2RhdGVGaWVsZF0pLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0Ly8gU01QMi0xNjkyMFxyXG5cdFx0XHRcdC8vIElmIElSUiBEYXRlID4gRGFzaGJvYXJkIHJlcG9ydCBkYXRlID0gVGFrZXMgYXMgb2YgZGFzaGJvYXJkIHJlcG9ydCBkYXRlXHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZUlSUklSUkRhdGVcIiAmJlxyXG5cdFx0XHRcdFx0YXNPZkRhdGUgPCB0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bZGF0ZUZpZWxkXSlcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGRhdGEuZGF0ZSA9IGFzT2ZEYXRlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHROQVZBZGogKz0gYXJncy5jZWxsU2V0c1tpXVt2YWx1ZUZpZWxkXTtcclxuXHRcdFx0XHQvLyBTTVAyLTE3MjE5IE1URCBRVEQgWVREIElSUlxyXG5cdFx0XHRcdGlmIChzdGFydERhdGUgJiYgZW5kRGF0ZSkge1xyXG5cdFx0XHRcdFx0aWYgKG1vbWVudChkYXRhLmRhdGUpLmlzQmVmb3JlKHN0YXJ0RGF0ZSkpIHtcclxuXHRcdFx0XHRcdFx0ZGF0YVt2YWx1ZUZpZWxkXSA9IGFyZ3MuY2VsbFNldHNbaV1bdmFsdWVGaWVsZF07XHJcblx0XHRcdFx0XHRcdGJlZm9yZVN0YXJ0VmFsdWVzLnB1c2goZGF0YSk7XHJcblx0XHRcdFx0XHRcdGJlZm9yZVN0YXJ0TkFWQWRqICs9IGRhdGFbdmFsdWVGaWVsZF07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdCFtb21lbnQoZGF0YS5kYXRlKS5pc0JldHdlZW4oXHJcblx0XHRcdFx0XHRcdFx0c3RhcnREYXRlLFxyXG5cdFx0XHRcdFx0XHRcdGVuZERhdGUsXHJcblx0XHRcdFx0XHRcdFx0bnVsbCxcclxuXHRcdFx0XHRcdFx0XHRcIltdXCJcclxuXHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoZGF0YS5hbW91bnQgIT0gMCkge1xyXG5cdFx0XHRcdFx0dmFsdWVzLnB1c2goZGF0YSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChOQVZBZGogPiAwLjAwMDEgfHwgTkFWQWRqIDwgLTAuMDAwMSkge1xyXG5cdFx0XHRcdHZhbHVlcy5wdXNoKHtcclxuXHRcdFx0XHRcdGFtb3VudDogTkFWQWRqLFxyXG5cdFx0XHRcdFx0ZGF0ZTogYXNPZkRhdGUsXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFsdWVzID0gc29ydEJ5KHZhbHVlcywgXCJkYXRlXCIpO1xyXG5cdFx0XHQvLyDlpoLmnpzmmK9NVEQsUVRELFlURCDliJnpnIDopoHmiorlvZPliY3pmLbmrrXku6XliY3nmoTmiYDmnInmlbDmja7ov5vooYzmsYfmgLvvvIzliqDlhaXorqHnrpdcclxuXHRcdFx0aWYgKHN0YXJ0RGF0ZSAmJiBlbmREYXRlKSB7XHJcblx0XHRcdFx0dmFsdWVzLnVuc2hpZnQoe1xyXG5cdFx0XHRcdFx0YW1vdW50OiAtYmVmb3JlU3RhcnROQVZBZGosIC8vIOW8gOWni+eahOaVsOaNrumcgOimgeWPluWPjVxyXG5cdFx0XHRcdFx0ZGF0ZTogdGhpcy5wYmYudGltZShzdGFydERhdGUpLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwiYmVmb3JlU3RhcnRWYWx1ZXM6XCIsIGJlZm9yZVN0YXJ0VmFsdWVzKTtcclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJ2YWx1ZXM6XCIsIHZhbHVlcyk7XHJcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGxldCBndWVzcyA9IDAuMTtcclxuXHRcdFx0XHRjb25zdCBzdW1BbW91bnQgPSB2YWx1ZXNcclxuXHRcdFx0XHRcdC5tYXAoKGl0ZW0pID0+IGl0ZW0uYW1vdW50KVxyXG5cdFx0XHRcdFx0LnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIsIDApO1xyXG5cdFx0XHRcdGlmIChzdW1BbW91bnQgPCAwKSB7XHJcblx0XHRcdFx0XHRndWVzcyA9IC0wLjE7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vU01QMi0yMjQ5IGZpeGVkIHRoZSBiaWcgaXJyIGlzc3VlXHJcblx0XHRcdFx0aWYgKHN1bUFtb3VudCA9PT0gMCkge1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IDA7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlSXRlbXMgPSB2YWx1ZXMuc2xpY2UoMCwgdmFsdWVzLmxlbmd0aCAtIDEpO1xyXG5cdFx0XHRcdFx0Y29uc3QgdmFsdWVMaXN0ID0gdmFsdWVJdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0uYW1vdW50KTtcclxuXHRcdFx0XHRcdGNvbnN0IGRhdGVMaXN0ID0gdmFsdWVJdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0uZGF0ZSk7XHJcblx0XHRcdFx0XHRjb25zdCBsYXN0SXRlbSA9IHZhbHVlc1t2YWx1ZXMubGVuZ3RoIC0gMV07XHJcblx0XHRcdFx0XHRjb25zdCBuYXZBZGp1c3QgPSBsYXN0SXRlbS5hbW91bnQ7XHJcblx0XHRcdFx0XHRjb25zdCBsYXRlc3REYXRlID0gbGFzdEl0ZW0uZGF0ZTtcclxuXHRcdFx0XHRcdGxldCBpcnIgPVxyXG5cdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLkV4Y2VsRm9ybXVsYXMuX0NhbGN1bGF0ZVhpcnIoXHJcblx0XHRcdFx0XHRcdFx0dmFsdWVMaXN0LFxyXG5cdFx0XHRcdFx0XHRcdGRhdGVMaXN0LFxyXG5cdFx0XHRcdFx0XHRcdG5hdkFkanVzdCxcclxuXHRcdFx0XHRcdFx0XHRsYXRlc3REYXRlXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gaXJyID09PSBudWxsID8gXCJcIiA6IGlycjtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJhcmdzLnZhbHVlOlwiLCBhcmdzLnZhbHVlKTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlICYmXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRkZWxldGUgdGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXTtcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdID0ge1xyXG5cdFx0XHRcdFx0bmFtZTogYXJncy5maWVsZE5hbWUsXHJcblx0XHRcdFx0XHRmb3JtYXQ6XHJcblx0XHRcdFx0XHRcdGZpZWxkLmxlbmd0aCA+IDBcclxuXHRcdFx0XHRcdFx0XHQ/IGZpZWxkWzBdLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRcdCAgZmllbGRbMF0uZm9ybWF0Lmxlbmd0aCAmJlxyXG5cdFx0XHRcdFx0XHRcdCAgZmllbGRbMF0uZm9ybWF0WzBdLmZvcm1hdENoZWNrZWRcclxuXHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0OiB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmZvcm1hdFBlcmNlbnQoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZHBcclxuXHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdDogXCJQMlwiLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyAgU01QMi0xNjUyMCBUV1Ig5pyIL+Wtoy/lubQgJiYgU01QMi0xNjY4MyBWQVJcclxuXHRcdGlmIChcclxuXHRcdFx0W1xyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVFdSTVREXCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVUV1JRVERcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVRXUllURFwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVkFSTVREXzk5XCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVWQVJRVERfOTlcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVZBUllURF85OVwiLFxyXG5cdFx0XHRcdFwiQ2FsY3VsYXRlVkFSTVREXzk1XCIsXHJcblx0XHRcdFx0XCJDYWxjdWxhdGVWQVJRVERfOTVcIixcclxuXHRcdFx0XHRcIkNhbGN1bGF0ZVZBUllURF85NVwiLFxyXG5cdFx0XHRdLmluY2x1ZGVzKGFyZ3MuYWdncmVnYXRlVHlwZSlcclxuXHRcdCkge1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcIj09PT09PT09PT09PT09PT09PT09PT09PT09XCIpO1xyXG5cdFx0XHQvLyBjb25zb2xlLmxvZyhcImFyZ3M6XCIsIGFyZ3MpO1xyXG5cdFx0XHRsZXQgdmFsdWVGaWVsZCA9IFwiSVJSQWRqVmFsdWVcIjtcclxuXHRcdFx0bGV0IGRhdGVGaWVsZCA9IFwiSVJSRGF0ZVwiO1xyXG5cdFx0XHRsZXQgdGltZVJhbmdlO1xyXG5cdFx0XHRzd2l0Y2ggKGFyZ3MuYWdncmVnYXRlVHlwZSkge1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVUV1JNVERcIjpcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVkFSTVREXzk5XCI6XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVZBUk1URF85NVwiOlxyXG5cdFx0XHRcdFx0dGltZVJhbmdlID0gXCJtb250aFwiO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVRXUlFURFwiOlxyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVWQVJRVERfOTlcIjpcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVkFSUVREXzk1XCI6XHJcblx0XHRcdFx0XHR0aW1lUmFuZ2UgPSBcInF1YXJ0ZXJcIjtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJDYWxjdWxhdGVUV1JZVERcIjpcclxuXHRcdFx0XHRjYXNlIFwiQ2FsY3VsYXRlVkFSWVREXzk5XCI6XHJcblx0XHRcdFx0Y2FzZSBcIkNhbGN1bGF0ZVZBUllURF85NVwiOlxyXG5cdFx0XHRcdFx0dGltZVJhbmdlID0gXCJ5ZWFyXCI7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdFx0bGV0IHZhbHVlcyA9IFtdOyAvLyDov5nkuKrpmLbmrrXnmoTntK/orqHpm4blkIhcclxuXHRcdFx0bGV0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdGVsLmNvbE5hbWUgPT09XHJcblx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmdldEFnZ3JlZ2F0ZVR5cGUoXHJcblx0XHRcdFx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZVxyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MuY2VsbFNldHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRjb25zdCBkYXRhID0ge1xyXG5cdFx0XHRcdFx0W3ZhbHVlRmllbGRdOiBhcmdzLmNlbGxTZXRzW2ldW3ZhbHVlRmllbGRdLFxyXG5cdFx0XHRcdFx0ZGF0ZTpcclxuXHRcdFx0XHRcdFx0dGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW2RhdGVGaWVsZF0pID09PVxyXG5cdFx0XHRcdFx0XHRcIkludmFsaWQgZGF0ZVwiXHJcblx0XHRcdFx0XHRcdFx0PyBhc09mRGF0ZVxyXG5cdFx0XHRcdFx0XHRcdDogdGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW2RhdGVGaWVsZF0pLFxyXG5cdFx0XHRcdH07XHJcblx0XHRcdFx0dmFsdWVzLnB1c2goZGF0YSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIOWmguaenGFzT2ZEYXRl5LiN5pivIOacrOaciC/lraPluqYv5bm0IOeahOacgOWQjuS4gOWkqe+8jOmDveaYr+aIquiHsyDkuIrkuKrmnIgv5a2j5bqmL+W5tCDnmoTmnIDlkI7kuIDlpKnnmoTmlbDmja7ljrvorqHnrpdcclxuXHRcdFx0bGV0IF9hc09mRGF0ZSA9IG1vbWVudChhc09mRGF0ZSk7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwiX2FzT2ZEYXRlOlwiLCBfYXNPZkRhdGUpO1xyXG5cdFx0XHRsZXQgaXNFbmRPZlBlcmlvZCA9ICh1bml0KSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIChcclxuXHRcdFx0XHRcdF9hc09mRGF0ZS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpID09PVxyXG5cdFx0XHRcdFx0X2FzT2ZEYXRlLmVuZE9mKHVuaXQpLmZvcm1hdChcIllZWVktTU0tRERcIilcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9O1xyXG5cdFx0XHRsZXQgZW5kRGF0ZSA9IGlzRW5kT2ZQZXJpb2QodGltZVJhbmdlKVxyXG5cdFx0XHRcdD8gbW9tZW50KGFzT2ZEYXRlKS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpXHJcblx0XHRcdFx0OiBtb21lbnQoYXNPZkRhdGUpXHJcblx0XHRcdFx0XHRcdC5zdWJ0cmFjdCgxLCB0aW1lUmFuZ2UpXHJcblx0XHRcdFx0XHRcdC5lbmRPZih0aW1lUmFuZ2UpXHJcblx0XHRcdFx0XHRcdC5mb3JtYXQoXCJZWVlZLU1NLUREXCIpO1xyXG5cclxuXHRcdFx0Ly8gY29uc29sZS5sb2coXCJlbmREYXRlOlwiLCBlbmREYXRlKTtcclxuXHRcdFx0dmFsdWVzID0gdmFsdWVzLmZpbHRlcigoaXRlbSkgPT5cclxuXHRcdFx0XHRtb21lbnQoaXRlbS5kYXRlKS5pc1NhbWVPckJlZm9yZShlbmREYXRlKVxyXG5cdFx0XHQpO1xyXG5cdFx0XHR2YWx1ZXMgPSBzb3J0QnkodmFsdWVzLCBcImRhdGVcIik7XHJcblx0XHRcdC8vIGNvbnNvbGUubG9nKFwidmFsdWVzOlwiLCB2YWx1ZXMpO1xyXG5cclxuXHRcdFx0aWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0bGV0IHJlc3VsdCA9IHRoaXMuZ2V0VGltZVJhbmdlcyhcclxuXHRcdFx0XHRcdHZhbHVlcyxcclxuXHRcdFx0XHRcdGVuZERhdGUsXHJcblx0XHRcdFx0XHR0aW1lUmFuZ2UsXHJcblx0XHRcdFx0XHRcImRhdGVcIlxyXG5cdFx0XHRcdCk7IC8vIOWQhOS4qumYtuauteeahOaVsOaNrlxyXG5cdFx0XHRcdGxldCByZXN1bHRUb3RhbCA9IHt9OyAvLyDlkITkuKrpmLbmrrXmgLvlkoxcclxuXHRcdFx0XHRmb3IgKGNvbnN0IHByb3AgaW4gcmVzdWx0KSB7XHJcblx0XHRcdFx0XHRyZXN1bHRUb3RhbFtwcm9wXSA9IHJlc3VsdFtwcm9wXS5yZWR1Y2UoKGFjYywgY3VyKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBhY2MgKyAoY3VyW3ZhbHVlRmllbGRdIHx8IDApO1xyXG5cdFx0XHRcdFx0fSwgMCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwicmVzdWx0OlwiLCByZXN1bHQpO1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwicmVzdWx0VG90YWw6XCIsIHJlc3VsdFRvdGFsKTtcclxuXHJcblx0XHRcdFx0Y29uc3QgY3VtdWxhdGl2ZVN1bSA9IHt9OyAvLyDlkITkuKrpmLbmrrXntK/orqHlkoxcclxuXHRcdFx0XHRsZXQgc3VtID0gMDtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXN1bHRUb3RhbCkpIHtcclxuXHRcdFx0XHRcdHN1bSArPSByZXN1bHRUb3RhbFtrZXldO1xyXG5cdFx0XHRcdFx0Y3VtdWxhdGl2ZVN1bVtgJHtrZXl9YF0gPSBzdW07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwiY3VtdWxhdGl2ZVN1bTpcIiwgY3VtdWxhdGl2ZVN1bSk7XHJcblxyXG5cdFx0XHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhjdW11bGF0aXZlU3VtKTtcclxuXHRcdFx0XHRsZXQgdHdyTGlzdCA9IFtdO1xyXG5cdFx0XHRcdC8vIOmBjeWOhuavj+S4pOS4qumYtuautSDorqHnrpdUV1JcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoIC0gMTsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBrZXkxID0ga2V5c1tpXTtcclxuXHRcdFx0XHRcdGNvbnN0IGtleTIgPSBrZXlzW2kgKyAxXTtcclxuXHJcblx0XHRcdFx0XHQvLyDorqHnrpfkuKTkuKrpmLbmrrXkuYvpl7TnmoTpgJLlop7ph48sIOWHuuaVsOS4jeiDveS4ujBcclxuXHRcdFx0XHRcdGlmIChjdW11bGF0aXZlU3VtW2tleTFdICE9IDApIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgaW5jcmVtZW50ID1cclxuXHRcdFx0XHRcdFx0XHRjdW11bGF0aXZlU3VtW2tleTJdIC0gY3VtdWxhdGl2ZVN1bVtrZXkxXTtcclxuXHRcdFx0XHRcdFx0bGV0IHR3ciA9IGluY3JlbWVudCAvIGN1bXVsYXRpdmVTdW1ba2V5MV07XHJcblx0XHRcdFx0XHRcdHR3ckxpc3QucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0ZGF0ZToga2V5MixcclxuXHRcdFx0XHRcdFx0XHR0d3I6IHR3cixcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIOiuoeeul0F2ZXJhZ2UgVFdSXHJcblx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJ0d3JMaXN0OlwiLCB0d3JMaXN0KTtcclxuXHRcdFx0XHRsZXQgYXZlcmFnZVRXUiA9IHRoaXMuY2FsY3VsYXRlR3Jvd3RoUmF0ZShcclxuXHRcdFx0XHRcdHR3ckxpc3QubWFwKCh4KSA9PiB4LnR3cilcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwi6K6h566XQXZlcmFnZSBUV1I6XCIsIGF2ZXJhZ2VUV1IpO1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFtcclxuXHRcdFx0XHRcdFx0XCJDYWxjdWxhdGVUV1JNVERcIixcclxuXHRcdFx0XHRcdFx0XCJDYWxjdWxhdGVUV1JRVERcIixcclxuXHRcdFx0XHRcdFx0XCJDYWxjdWxhdGVUV1JZVERcIixcclxuXHRcdFx0XHRcdF0uaW5jbHVkZXMoYXJncy5hZ2dyZWdhdGVUeXBlKVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0Ly8gU01QMi0xNjUyMCBUV1Ig5pyIL+Wtoy/lubRcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRpc05hTihhdmVyYWdlVFdSKSB8fCBhdmVyYWdlVFdSID09IG51bGxcclxuXHRcdFx0XHRcdFx0XHQ/IFwiXCJcclxuXHRcdFx0XHRcdFx0XHQ6IE51bWJlcihhdmVyYWdlVFdSKTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aWYgKGlzTmFOKGF2ZXJhZ2VUV1IpIHx8IGF2ZXJhZ2VUV1IgPT0gbnVsbCkge1xyXG5cdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdC8vIFNNUDItMTY2ODMgVkFSIOWMuuWIhjk5JeWSjDk1JVxyXG5cdFx0XHRcdFx0XHRsZXQgWlNjb3JlID0gW1xyXG5cdFx0XHRcdFx0XHRcdFwiQ2FsY3VsYXRlVkFSTVREXzk5XCIsXHJcblx0XHRcdFx0XHRcdFx0XCJDYWxjdWxhdGVWQVJRVERfOTlcIixcclxuXHRcdFx0XHRcdFx0XHRcIkNhbGN1bGF0ZVZBUllURF85OVwiLFxyXG5cdFx0XHRcdFx0XHRdLmluY2x1ZGVzKGFyZ3MuYWdncmVnYXRlVHlwZSlcclxuXHRcdFx0XHRcdFx0XHQ/IDIuMzNcclxuXHRcdFx0XHRcdFx0XHQ6IDEuNjU7XHJcblx0XHRcdFx0XHRcdGlmICh0d3JMaXN0Lmxlbmd0aCA8IDIpIHtcclxuXHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgU0QgPSB0aGlzLmNhbGN1bGF0ZVN0YW5kYXJkRGV2aWF0aW9uKFxyXG5cdFx0XHRcdFx0XHRcdFx0dHdyTGlzdC5tYXAoKHgpID0+IHgudHdyKVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gY29uc29sZS5sb2coXCJjYWxjdWxhdGVTdGFuZGFyZERldmlhdGlvbjpcIiwgU0QpO1xyXG5cdFx0XHRcdFx0XHRcdGxldCBWQVIgPSBhdmVyYWdlVFdSIC0gU0QgKiBaU2NvcmU7XHJcblx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IE51bWJlcihWQVIpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdC8vIGNvbnNvbGUubG9nKFwiYXJncy52YWx1ZTpcIiwgYXJncy52YWx1ZSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZSAmJlxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV1cclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV07XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXSA9IHtcclxuXHRcdFx0XHRcdG5hbWU6IGFyZ3MuZmllbGROYW1lLFxyXG5cdFx0XHRcdFx0Zm9ybWF0OlxyXG5cdFx0XHRcdFx0XHRmaWVsZC5sZW5ndGggPiAwXHJcblx0XHRcdFx0XHRcdFx0PyBmaWVsZFswXS5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkXHJcblx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdFBlcmNlbnQoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmRwXHJcblx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHQ6IFwiUDJcIixcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly9TTVAyLTI3MDFcclxuXHRcdGlmIChhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlSVJSQWN0dWFsQXVkaXRlZFwiKSB7XHJcblx0XHRcdGxldCBOQVZBZGogPSAwO1xyXG5cdFx0XHRsZXQgdmFsdWVzID0gW107XHJcblx0XHRcdGxldCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRlbC5jb2xOYW1lID09PVxyXG5cdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRBZ2dyZWdhdGVUeXBlKFxyXG5cdFx0XHRcdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGVcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0KTtcclxuXHRcdFx0Ly9TTVAyLTI3MTMgb25seSBqdWRnZSBmb3IgdGhpcyBkYXRhTWFydChHcm9zc05ldClcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHRoaXMucG9ydGxldC5maWd1cmVDb2RlID09PSBcIkdyb3NzTmV0XCIgfHxcclxuXHRcdFx0XHR0aGlzLnBvcnRsZXQuZmlndXJlQ29kZSA9PT1cclxuXHRcdFx0XHRcdFwiQ29tYmluZWRJbnZlc3RtZW50RnVuZE5Db21wYW55Q2FzaGZsb3dcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MuY2VsbFNldHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGRhdGEgPSB7XHJcblx0XHRcdFx0XHRcdGFtb3VudDogYXJncy5jZWxsU2V0c1tpXVtcIklSUkFtb3VudFwiXSxcclxuXHRcdFx0XHRcdFx0ZGF0ZTpcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJEYXRlXCJdKSA9PT1cclxuXHRcdFx0XHRcdFx0XHRcIkludmFsaWQgZGF0ZVwiXHJcblx0XHRcdFx0XHRcdFx0XHQ/IGFzT2ZEYXRlXHJcblx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtcIklSUkRhdGVcIl0pLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdE5BVkFkaiArPSBhcmdzLmNlbGxTZXRzW2ldW1wiQWN0dWFsQXVkaXRlZE5BVlwiXTtcclxuXHRcdFx0XHRcdGlmIChkYXRhLmFtb3VudCAhPSAwKSB7XHJcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKGRhdGEpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvL2ZpbHRlciB0aGUgZGF0YSBieSB0aGUgRGF0YVR5cGUoQWN0dWFsIFJlcG9ydGVkIEF1ZGl0ZWQpXHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdGxldCBhcmdzZGF0YSA9IGFyZ3MuY2VsbFNldHMuZmlsdGVyKFxyXG5cdFx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0XHRlbC5EYXRhVHlwZSA9PT0gXCJBQ1RVQUxfQVVESVRFRFwiIHx8XHJcblx0XHRcdFx0XHRcdGVsLkRhdGFUeXBlID09PSBcIlJFUE9SVEVEXCJcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYXJnc2RhdGEubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGRhdGEgPSB7XHJcblx0XHRcdFx0XHRcdGFtb3VudDogYXJnc2RhdGFbaV1bXCJJUlJBbW91bnRcIl0sXHJcblx0XHRcdFx0XHRcdGRhdGU6XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5wYmYudGltZShhcmdzZGF0YVtpXVtcIklSUkRhdGVcIl0pID09PVxyXG5cdFx0XHRcdFx0XHRcdFwiSW52YWxpZCBkYXRlXCJcclxuXHRcdFx0XHRcdFx0XHRcdD8gYXNPZkRhdGVcclxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy5wYmYudGltZShhcmdzZGF0YVtpXVtcIklSUkRhdGVcIl0pLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdE5BVkFkaiArPSBhcmdzZGF0YVtpXVtcIklSUkFkalZhbHVlXCJdO1xyXG5cdFx0XHRcdFx0aWYgKGRhdGEuYW1vdW50ICE9IDApIHtcclxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goZGF0YSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChOQVZBZGogPiAwLjAwMDEgfHwgTkFWQWRqIDwgLTAuMDAwMSkge1xyXG5cdFx0XHRcdHZhbHVlcy5wdXNoKHtcclxuXHRcdFx0XHRcdGFtb3VudDogTkFWQWRqLFxyXG5cdFx0XHRcdFx0ZGF0ZTogYXNPZkRhdGUsXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFsdWVzID0gc29ydEJ5KHZhbHVlcywgXCJkYXRlXCIpO1xyXG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRsZXQgZ3Vlc3MgPSAwLjE7XHJcblx0XHRcdFx0Y29uc3Qgc3VtQW1vdW50ID0gdmFsdWVzXHJcblx0XHRcdFx0XHQubWFwKChpdGVtKSA9PiBpdGVtLmFtb3VudClcclxuXHRcdFx0XHRcdC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLCAwKTtcclxuXHRcdFx0XHRpZiAoc3VtQW1vdW50IDwgMCkge1xyXG5cdFx0XHRcdFx0Z3Vlc3MgPSAtMC4xO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvL1NNUDItMjI0OSBmaXhlZCB0aGUgYmlnIGlyciBpc3N1ZVxyXG5cdFx0XHRcdGlmIChzdW1BbW91bnQgPT09IDApIHtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSAwO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUl0ZW1zID0gdmFsdWVzLnNsaWNlKDAsIHZhbHVlcy5sZW5ndGggLSAxKTtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlTGlzdCA9IHZhbHVlSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmFtb3VudCk7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRlTGlzdCA9IHZhbHVlSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmRhdGUpO1xyXG5cdFx0XHRcdFx0Y29uc3QgbGFzdEl0ZW0gPSB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdO1xyXG5cdFx0XHRcdFx0Y29uc3QgbmF2QWRqdXN0ID0gbGFzdEl0ZW0uYW1vdW50O1xyXG5cdFx0XHRcdFx0Y29uc3QgbGF0ZXN0RGF0ZSA9IGxhc3RJdGVtLmRhdGU7XHJcblx0XHRcdFx0XHRsZXQgaXJyID1cclxuXHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5FeGNlbEZvcm11bGFzLl9DYWxjdWxhdGVYaXJyKFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlTGlzdCxcclxuXHRcdFx0XHRcdFx0XHRkYXRlTGlzdCxcclxuXHRcdFx0XHRcdFx0XHRuYXZBZGp1c3QsXHJcblx0XHRcdFx0XHRcdFx0bGF0ZXN0RGF0ZVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IGlyciA9PT0gbnVsbCA/IDAgOiBpcnI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSAwO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZSAmJlxyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV1cclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0ZGVsZXRlIHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV07XHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXSA9IHtcclxuXHRcdFx0XHRcdG5hbWU6IGFyZ3MuZmllbGROYW1lLFxyXG5cdFx0XHRcdFx0Zm9ybWF0OlxyXG5cdFx0XHRcdFx0XHRmaWVsZC5sZW5ndGggPiAwXHJcblx0XHRcdFx0XHRcdFx0PyBmaWVsZFswXS5mb3JtYXQgJiZcclxuXHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdC5sZW5ndGggJiZcclxuXHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkXHJcblx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UucGl2b3RUYWJsZWZvcm1hdFBlcmNlbnQoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uZm9ybWF0WzBdLnNlbGVjdGVkRm9ybWF0XHJcblx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHRcdDogdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmRwXHJcblx0XHRcdFx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdFx0XHQ6IFwiUDJcIixcclxuXHRcdFx0XHR9O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHQvL1NNUDItMzQxMVxyXG5cdFx0aWYgKGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDYWxjdWxhdGVJUlJSZXBvcnRlZFwiKSB7XHJcblx0XHRcdGxldCBOQVZBZGogPSAwO1xyXG5cdFx0XHRsZXQgdmFsdWVzID0gW107XHJcblx0XHRcdGxldCBmaWVsZCA9IHRoaXMuY29uZmlnRmllbGRzLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRlbC5jb2xOYW1lID09PVxyXG5cdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRBZ2dyZWdhdGVUeXBlKFxyXG5cdFx0XHRcdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGVcclxuXHRcdFx0XHRcdClcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHRoaXMucG9ydGxldC5maWd1cmVDb2RlID09PSBcIkdyb3NzTmV0XCIgfHxcclxuXHRcdFx0XHR0aGlzLnBvcnRsZXQuZmlndXJlQ29kZSA9PT1cclxuXHRcdFx0XHRcdFwiQ29tYmluZWRJbnZlc3RtZW50RnVuZE5Db21wYW55Q2FzaGZsb3dcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MuY2VsbFNldHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdGNvbnN0IGRhdGEgPSB7XHJcblx0XHRcdFx0XHRcdGFtb3VudDogYXJncy5jZWxsU2V0c1tpXVtcIklSUkFtb3VudFwiXSxcclxuXHRcdFx0XHRcdFx0ZGF0ZTpcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJEYXRlXCJdKSA9PT1cclxuXHRcdFx0XHRcdFx0XHRcIkludmFsaWQgZGF0ZVwiXHJcblx0XHRcdFx0XHRcdFx0XHQ/IGFzT2ZEYXRlXHJcblx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMucGJmLnRpbWUoYXJncy5jZWxsU2V0c1tpXVtcIklSUkRhdGVcIl0pLFxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdE5BVkFkaiArPSBhcmdzLmNlbGxTZXRzW2ldW1wiUmVwb3J0ZWROQVZcIl07XHJcblx0XHRcdFx0XHRpZiAoZGF0YS5hbW91bnQgIT0gMCkge1xyXG5cdFx0XHRcdFx0XHR2YWx1ZXMucHVzaChkYXRhKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRhID0ge1xyXG5cdFx0XHRcdFx0XHRhbW91bnQ6IGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJBbW91bnRcIl0sXHJcblx0XHRcdFx0XHRcdGRhdGU6XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5wYmYudGltZShhcmdzLmNlbGxTZXRzW2ldW1wiSVJSRGF0ZVwiXSkgPT09XHJcblx0XHRcdFx0XHRcdFx0XCJJbnZhbGlkIGRhdGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PyBhc09mRGF0ZVxyXG5cdFx0XHRcdFx0XHRcdFx0OiB0aGlzLnBiZi50aW1lKGFyZ3MuY2VsbFNldHNbaV1bXCJJUlJEYXRlXCJdKSxcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHROQVZBZGogKz0gYXJncy5jZWxsU2V0c1tpXVtcIklSUkFkalZhbHVlXCJdO1xyXG5cdFx0XHRcdFx0aWYgKGRhdGEuYW1vdW50ICE9IDApIHtcclxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goZGF0YSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChOQVZBZGogPiAwLjAwMDEgfHwgTkFWQWRqIDwgLTAuMDAwMSkge1xyXG5cdFx0XHRcdHZhbHVlcy5wdXNoKHtcclxuXHRcdFx0XHRcdGFtb3VudDogTkFWQWRqLFxyXG5cdFx0XHRcdFx0ZGF0ZTogYXNPZkRhdGUsXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFsdWVzID0gc29ydEJ5KHZhbHVlcywgXCJkYXRlXCIpO1xyXG5cdFx0XHRpZiAodmFsdWVzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRsZXQgZ3Vlc3MgPSAwLjE7XHJcblx0XHRcdFx0Y29uc3Qgc3VtQW1vdW50ID0gdmFsdWVzXHJcblx0XHRcdFx0XHQubWFwKChpdGVtKSA9PiBpdGVtLmFtb3VudClcclxuXHRcdFx0XHRcdC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLCAwKTtcclxuXHRcdFx0XHRpZiAoc3VtQW1vdW50IDwgMCkge1xyXG5cdFx0XHRcdFx0Z3Vlc3MgPSAtMC4xO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHQvL1NNUDItMjI0OSBmaXhlZCB0aGUgYmlnIGlyciBpc3N1ZVxyXG5cdFx0XHRcdGlmIChzdW1BbW91bnQgPT09IDApIHtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSAwO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb25zdCB2YWx1ZUl0ZW1zID0gdmFsdWVzLnNsaWNlKDAsIHZhbHVlcy5sZW5ndGggLSAxKTtcclxuXHRcdFx0XHRcdGNvbnN0IHZhbHVlTGlzdCA9IHZhbHVlSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmFtb3VudCk7XHJcblx0XHRcdFx0XHRjb25zdCBkYXRlTGlzdCA9IHZhbHVlSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmRhdGUpO1xyXG5cdFx0XHRcdFx0Y29uc3QgbGFzdEl0ZW0gPSB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdO1xyXG5cdFx0XHRcdFx0Y29uc3QgbmF2QWRqdXN0ID0gbGFzdEl0ZW0uYW1vdW50O1xyXG5cdFx0XHRcdFx0Y29uc3QgbGF0ZXN0RGF0ZSA9IGxhc3RJdGVtLmRhdGU7XHJcblx0XHRcdFx0XHRsZXQgaXJyID1cclxuXHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5FeGNlbEZvcm11bGFzLl9DYWxjdWxhdGVYaXJyKFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlTGlzdCxcclxuXHRcdFx0XHRcdFx0XHRkYXRlTGlzdCxcclxuXHRcdFx0XHRcdFx0XHRuYXZBZGp1c3QsXHJcblx0XHRcdFx0XHRcdFx0bGF0ZXN0RGF0ZVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBpcnIgPT09IG51bGwgPyAwIDogaXJyO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gMDtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUgJiZcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbYXJncy5maWVsZE5hbWVdO1xyXG5cdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV0gPSB7XHJcblx0XHRcdFx0XHRuYW1lOiBhcmdzLmZpZWxkTmFtZSxcclxuXHRcdFx0XHRcdGZvcm1hdDpcclxuXHRcdFx0XHRcdFx0ZmllbGQubGVuZ3RoID4gMFxyXG5cdFx0XHRcdFx0XHRcdD8gZmllbGRbMF0uZm9ybWF0ICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXRbMF0uZm9ybWF0Q2hlY2tlZFxyXG5cdFx0XHRcdFx0XHRcdFx0PyB0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLnBpdm90VGFibGVmb3JtYXRQZXJjZW50KFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmZvcm1hdFswXS5zZWxlY3RlZEZvcm1hdFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZm9ybWF0UGVyY2VudChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5kcFxyXG5cdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0OiBcIlAyXCIsXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0aWYgKFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlTXVsdGlwbGVcIiB8fFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlUElDXCIgfHxcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZURQSVwiIHx8XHJcblx0XHRcdGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJDYWxjdWxhdGVUVlBJXCIgfHxcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09PSBcIkNhbGN1bGF0ZVJWUElcIiB8fFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlTUFjdHVhbEF1ZGl0ZWRcIiB8fFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ2FsY3VsYXRlTVJlcG9ydGVkXCJcclxuXHRcdCkge1xyXG5cdFx0XHRsZXQgdG90YWxOdW1lcmF0b3IgPSAwO1xyXG5cdFx0XHRsZXQgdG90YWxEZW5vbWluYXRvciA9IDA7XHJcblx0XHRcdGxldCBudW1lcmF0b3JOYW1lO1xyXG5cdFx0XHRsZXQgZGVub21pbmF0b3JOYW1lO1xyXG5cdFx0XHRsZXQgZmllbGQgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0ZWwuY29sTmFtZSA9PT1cclxuXHRcdFx0XHRcdHRoaXMuZGFzaGJvYXJkUG9ybGV0c1NlcnZpY2UuZ2V0QWdncmVnYXRlVHlwZShcclxuXHRcdFx0XHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlXHJcblx0XHRcdFx0XHQpXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChmaWVsZC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0Y29uc3QgZm9ybXVsYUFycmF5ID0gZmllbGRbMF0uZm9ybXVsYS5zcGxpdChcIi9cIik7XHJcblx0XHRcdFx0bnVtZXJhdG9yTmFtZSA9IGZvcm11bGFBcnJheVswXTtcclxuXHRcdFx0XHRkZW5vbWluYXRvck5hbWUgPSBmb3JtdWxhQXJyYXlbMV07XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBhcmdzLmNlbGxTZXRzLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0dG90YWxOdW1lcmF0b3IgKz0gYXJncy5jZWxsU2V0c1tqXVtudW1lcmF0b3JOYW1lXTtcclxuXHRcdFx0XHR0b3RhbERlbm9taW5hdG9yICs9IGFyZ3MuY2VsbFNldHNbal1bZGVub21pbmF0b3JOYW1lXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAodG90YWxEZW5vbWluYXRvciAhPT0gMCkge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSB0b3RhbE51bWVyYXRvciAvIHRvdGFsRGVub21pbmF0b3I7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUgJiZcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV1cclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGRlbGV0ZSB0aGlzLnBpdm90T2JqLmVuZ2luZU1vZHVsZS5mb3JtYXRGaWVsZHNbXHJcblx0XHRcdFx0XHRcdGFyZ3MuZmllbGROYW1lXHJcblx0XHRcdFx0XHRdO1xyXG5cdFx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZm9ybWF0RmllbGRzW2FyZ3MuZmllbGROYW1lXSA9IHtcclxuXHRcdFx0XHRcdFx0bmFtZTogYXJncy5maWVsZE5hbWUsXHJcblx0XHRcdFx0XHRcdGZvcm1hdDpcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5sZW5ndGggPiAwXHJcblx0XHRcdFx0XHRcdFx0XHQ/IGZpZWxkWzBdLmZvcm1hdCAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0ICBmaWVsZFswXS5mb3JtYXQubGVuZ3RoICYmXHJcblx0XHRcdFx0XHRcdFx0XHQgIGZpZWxkWzBdLmZvcm1hdFswXS5mb3JtYXRDaGVja2VkXHJcblx0XHRcdFx0XHRcdFx0XHRcdD8gdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5waXZvdFRhYmxlZm9ybWF0TXVsdGlwbGUoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZFswXS5mb3JtYXRbMF0uc2VsZWN0ZWRGb3JtYXRcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0XHRcdDogdGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5mb3JtYXRNdWx0aXBsZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmRwXHJcblx0XHRcdFx0XHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0XHRcdFx0OiBcIiMjIzAuMDAneCdcIixcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJGaXJzdFwiIHx8IGFyZ3MuYWdncmVnYXRlVHlwZSA9PT0gXCJMYXN0XCIpIHtcclxuXHRcdFx0YXJncy52YWx1ZSA9IHRoaXMuY2FsY3VsYXRlZEZpc3RMYXN0KFxyXG5cdFx0XHRcdGFyZ3MsXHJcblx0XHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlLFxyXG5cdFx0XHRcdGFyZ3MuZmllbGROYW1lXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiQ291bnRcIiB8fFxyXG5cdFx0XHRhcmdzLmFnZ3JlZ2F0ZVR5cGUgPT09IFwiRGlzdGluY3RDb3VudFwiXHJcblx0XHQpIHtcclxuXHRcdFx0aWYgKGFyZ3MudmFsdWUpIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gYXJncy52YWx1ZS50b0ZpeGVkKDIpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKFxyXG5cdFx0XHQhYXJncy52YWx1ZSAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSAwICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgIT09IGZhbHNlICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgIT09IFwiZmFsc2VcIlxyXG5cdFx0KSB7XHJcblx0XHRcdGFyZ3Muc2tpcEZvcm1hdHRpbmcgPSB0cnVlO1xyXG5cdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdH1cclxuXHRcdC8vIOaWsOW7unBpdm90IHRhYmxlLCDov5jmsqHmnInorr7nva5yb3csIOmAieS6hmNvbHVtbuS5i+WQjmdyYW5kdG90YWzkvJrmnInlgLxcclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5yb3dDZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCIgJiZcclxuXHRcdFx0IXRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3MubGVuZ3RoXHJcblx0XHQpIHtcclxuXHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHR9XHJcblx0XHQvL1NNUDItMjg4OVxyXG5cdFx0aWYgKGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwic3ViVG90YWxcIikge1xyXG5cdFx0XHRjb25zdCB2YWx1ZUZpZWxkX2RhdGEgPSB0aGlzLmNvbmZpZy55YXhpcy5zZXJpZXMuZmlsdGVyKFxyXG5cdFx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gYXJncy5maWVsZE5hbWVcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKHZhbHVlRmllbGRfZGF0YS5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0aWYgKHZhbHVlRmllbGRfZGF0YVswXS5zaG93U3ViVG90YWxzID09PSBmYWxzZSkge1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IFwiXCI7XHJcblx0XHRcdFx0XHRhcmdzLnNraXBGb3JtYXR0aW5nID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChhcmdzLnJvd0NlbGxUeXBlID09PSBcImdyYW5kVG90YWxcIikge1xyXG5cdFx0XHRjb25zdCB2YWx1ZUZpZWxkX2RhdGEgPSB0aGlzLmNvbmZpZy55YXhpcy5zZXJpZXMuZmlsdGVyKFxyXG5cdFx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gYXJncy5maWVsZE5hbWVcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKHZhbHVlRmllbGRfZGF0YS5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0aWYgKHZhbHVlRmllbGRfZGF0YVswXS5zaG93R3JhbmRUb3RhbHMgPT09IGZhbHNlKSB7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0XHRcdGFyZ3Muc2tpcEZvcm1hdHRpbmcgPSB0cnVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Ly8gU01QMi0zNDE2IHN0YXJ0XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMuemVyb0Zvcm1hdERhdGEuaGdMaXN0LmluY2x1ZGVzKGFyZ3MuZmllbGROYW1lKSAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlID09PSAwXHJcblx0XHQpIHtcclxuXHRcdFx0YXJncy52YWx1ZSA9IFwiLVwiO1xyXG5cdFx0XHRhcmdzLnNraXBGb3JtYXR0aW5nID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy56ZXJvRm9ybWF0RGF0YS5lbXB0eUxpc3QuaW5jbHVkZXMoYXJncy5maWVsZE5hbWUpICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgPT09IDBcclxuXHRcdCkge1xyXG5cdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0YXJncy5za2lwRm9ybWF0dGluZyA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMubWlsbGlvbkZpZWxkcy5pbmNsdWRlcyhhcmdzLmZpZWxkTmFtZSkgJiZcclxuXHRcdFx0IWlzTmFOKE51bWJlcihhcmdzLnZhbHVlKSkgJiZcclxuXHRcdFx0YXJncy52YWx1ZSAhPT0gMCAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSBcIlwiICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgIT09IG51bGxcclxuXHRcdCkge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0YXJncy5jb2x1bW5DZWxsVHlwZSA9PSBcImdyYW5kVG90YWxcIiAmJlxyXG5cdFx0XHRcdGFyZ3Mucm93Q2VsbFR5cGUgPT0gXCJncmFuZFRvdGFsXCJcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0aWYgKCF0aGlzLnRvdGFsRm9ybWF0dGVkW2FyZ3MuZmllbGROYW1lXSkge1xyXG5cdFx0XHRcdFx0dGhpcy50b3RhbEZvcm1hdHRlZFthcmdzLmZpZWxkTmFtZV0gPSB0cnVlO1xyXG5cdFx0XHRcdFx0YXJncy52YWx1ZSA9IGFyZ3MudmFsdWUgLyAxMDAwMDAwO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gYXJncy52YWx1ZSAvIDEwMDAwMDA7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBTTVAyLTI0ODYgJiBwZXJjZW50TnVt55qEZm9ybWF06Zeu6aKYXHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMucGVyY2VudE51bUZpZWxkcy5sZW5ndGggJiZcclxuXHRcdFx0dGhpcy5wZXJjZW50TnVtRmllbGRzLmluY2x1ZGVzKGFyZ3MuZmllbGROYW1lKSAmJlxyXG5cdFx0XHQhaXNOYU4oTnVtYmVyKGFyZ3MudmFsdWUpKSAmJlxyXG5cdFx0XHRhcmdzLnZhbHVlICE9PSAwICYmXHJcblx0XHRcdGFyZ3MudmFsdWUgIT09IFwiXCIgJiZcclxuXHRcdFx0YXJncy52YWx1ZSAhPT0gbnVsbFxyXG5cdFx0KSB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRhcmdzLmNvbHVtbkNlbGxUeXBlID09IFwiZ3JhbmRUb3RhbFwiICYmXHJcblx0XHRcdFx0YXJncy5yb3dDZWxsVHlwZSA9PSBcImdyYW5kVG90YWxcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRpZiAoIXRoaXMudG90YWxGb3JtYXR0ZWRbYXJncy5maWVsZE5hbWVdKSB7XHJcblx0XHRcdFx0XHR0aGlzLnRvdGFsRm9ybWF0dGVkW2FyZ3MuZmllbGROYW1lXSA9IHRydWU7XHJcblx0XHRcdFx0XHRhcmdzLnZhbHVlID0gYXJncy52YWx1ZSAvIDEwMDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXJncy52YWx1ZSA9IGFyZ3MudmFsdWUgLyAxMDA7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5hZ2dyZWdhdGVUeXBlID09IFwiQ2FsY3VsYXRlZEZpZWxkXCIgJiZcclxuXHRcdFx0IWlzTmFOKE51bWJlcihhcmdzLnZhbHVlKSkgJiZcclxuXHRcdFx0IXRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZvcm1hdEZpZWxkc1thcmdzLmZpZWxkTmFtZV0uZm9ybWF0XHJcblx0XHQpIHtcclxuXHRcdFx0YXJncy52YWx1ZSA9IE51bWJlcihhcmdzLnZhbHVlKS50b0ZpeGVkKDIpO1xyXG5cdFx0fVxyXG5cdFx0Ly8gU01QMi0zNDE2IGVuZFxyXG5cdFx0dGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcblx0XHR0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNhbGN1bGF0ZWRGaXN0TGFzdChhcmdzLCBhZ2dyZWdhdGVUeXBlLCBmaWVsZE5hbWUpIHtcclxuXHRcdGlmICghYXJncy5yb3cuYWN0dWFsVGV4dCkgYXJncy5yb3cuYWN0dWFsVGV4dCA9IGFyZ3Mucm93LmZvcm1hdHRlZFRleHQ7XHJcblx0XHRpZiAoIWFyZ3MuY29sdW1uLmFjdHVhbFRleHQpXHJcblx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgPSBhcmdzLmNvbHVtbi5mb3JtYXR0ZWRUZXh0O1xyXG5cdFx0bGV0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHQoZWwpID0+IGVsLmNvbE5hbWUgPT09IGZpZWxkTmFtZVxyXG5cdFx0KVswXTtcclxuXHRcdGlmIChhcmdzLnJvd0NlbGxUeXBlID09PSBcInZhbHVlXCIgJiYgIWFyZ3Mucm93Lmhhc0NoaWxkKSB7XHJcblx0XHRcdGlmIChhcmdzLmNlbGxTZXRzWzBdKSB7XHJcblx0XHRcdFx0aWYgKGFnZ3JlZ2F0ZVR5cGUgPT09IFwiRmlyc3RcIikge1xyXG5cdFx0XHRcdFx0Zm9yIChcclxuXHRcdFx0XHRcdFx0bGV0IGZpcnN0SW5kZXggPSAwO1xyXG5cdFx0XHRcdFx0XHRmaXJzdEluZGV4IDwgYXJncy5jZWxsU2V0cy5sZW5ndGg7XHJcblx0XHRcdFx0XHRcdGZpcnN0SW5kZXgrK1xyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCA9PVxyXG5cdFx0XHRcdFx0XHRcdFx0MSAmJlxyXG5cdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uQ2VsbFR5cGUgPT0gXCJncmFuZFRvdGFsXCJcclxuXHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJzdHJpbmdcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJudmFyY2hhclwiIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJkYXRldGltZVwiXHJcblx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGhcclxuXHRcdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgcm93T2JqcyA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWVbYXJncy5yb3cucm93SW5kZXhdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocm93T2Jqcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldCByb3dPYmpzQXJyID0gSlNPTi5wYXJzZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdEpTT04uc3RyaW5naWZ5KHJvd09ianMpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgb2JqID0gcm93T2Jqc0Fyci5maWx0ZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsLmFjdHVhbFRleHQgPT0gZmllbGROYW1lICYmXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsLmlzR3JhbmRTdW1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpWzBdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvYmopIGFyZ3MudmFsdWUgPSBvYmoudmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBpc05hTihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHROdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IG51bGxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBhcmdzLmNlbGxTZXRzW2ZpcnN0SW5kZXhdW2ZpZWxkTmFtZV07XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibnVtYmVyXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcIm11bHRpcGxlXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcInBlcmNlbnRcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwicGVyY2VudE51bVwiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChhcmdzLnZhbHVlICE9IG51bGwpIGJyZWFrO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZVwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJkYXRldGltZVwiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmICh0aGlzLnBiZi50aW1lKGFyZ3MudmFsdWUpID4gXCIxOTAwLTAxLTAxXCIpIGJyZWFrO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGFyZ3MudmFsdWUpIGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoYWdncmVnYXRlVHlwZSA9PT0gXCJMYXN0XCIpIHtcclxuXHRcdFx0XHRcdGZvciAoXHJcblx0XHRcdFx0XHRcdGxldCBsYXN0SW5kZXggPSBhcmdzLmNlbGxTZXRzLmxlbmd0aCAtIDE7XHJcblx0XHRcdFx0XHRcdGxhc3RJbmRleCA+PSAwO1xyXG5cdFx0XHRcdFx0XHRsYXN0SW5kZXgtLVxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCA9PVxyXG5cdFx0XHRcdFx0XHRcdFx0MSAmJlxyXG5cdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uQ2VsbFR5cGUgPT0gXCJncmFuZFRvdGFsXCJcclxuXHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJzdHJpbmdcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJudmFyY2hhclwiIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJkYXRldGltZVwiXHJcblx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGhcclxuXHRcdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRsZXQgcm93T2JqcyA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hbGxEYXRhVmFsdWVbYXJncy5yb3cucm93SW5kZXhdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAocm93T2Jqcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldCByb3dPYmpzQXJyID0gSlNPTi5wYXJzZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdEpTT04uc3RyaW5naWZ5KHJvd09ianMpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgb2JqID0gcm93T2Jqc0Fyci5maWx0ZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsLmFjdHVhbFRleHQgPT0gZmllbGROYW1lICYmXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsLmlzR3JhbmRTdW1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpWzBdO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChvYmopIGFyZ3MudmFsdWUgPSBvYmoudmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBpc05hTihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHROdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ/IG51bGxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ6IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQgICk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBhcmdzLmNlbGxTZXRzW2xhc3RJbmRleF1bZmllbGROYW1lXTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwibnVtYmVyXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcIm11bHRpcGxlXCIgfHxcclxuXHRcdFx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcInBlcmNlbnRcIiB8fFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwicGVyY2VudE51bVwiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChhcmdzLnZhbHVlICE9IG51bGwpIGJyZWFrO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRcdFx0XHRcdGZpZWxkLmRhdGFUeXBlID09IFwiZGF0ZVwiIHx8XHJcblx0XHRcdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJkYXRldGltZVwiXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmICh0aGlzLnBiZi50aW1lKGFyZ3MudmFsdWUpID4gXCIxOTAwLTAxLTAxXCIpIGJyZWFrO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGFyZ3MudmFsdWUpIGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJudW1iZXJcIiB8fFxyXG5cdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJtdWx0aXBsZVwiIHx8XHJcblx0XHRcdFx0XHRmaWVsZC5kYXRhVHlwZSA9PSBcInBlcmNlbnRcIiB8fFxyXG5cdFx0XHRcdFx0ZmllbGQuZGF0YVR5cGUgPT0gXCJwZXJjZW50TnVtXCJcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5yb3dzLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoIXRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbHVtbnMubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdFx0IU51bWJlcih0aGlzLmdyYW5kVG90YWxzW2ZpZWxkTmFtZV0pIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRpc05hTihOdW1iZXIodGhpcy5ncmFuZFRvdGFsc1tmaWVsZE5hbWVdKSlcclxuXHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbZmllbGROYW1lXSA9IDA7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGlmIChhcmdzLmFnZ3JlZ2F0ZVR5cGUgIT09IFwiQ2FsY3VsYXRlZEZpZWxkXCIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbZmllbGROYW1lXSArPSBOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWVcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbHVtbnMubGVuZ3RoID09IDFcclxuXHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0Ly8gXCJyb3dcIiArIGFyZ3Mucm93LmFjdHVhbFRleHQgKyBmaWVsZE5hbWUg6KGo56S6KGNlbGw6IGFyZ3Mucm93Q2VsbFR5cGUgPT09IFwidmFsdWVcIiAmJiBhcmdzLmNvbHVtbkNlbGxUeXBlID09PSBcImdyYW5kVG90YWxcIilcclxuXHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHQhTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwicm93XCIgKyBhcmdzLnJvdy5hY3R1YWxUZXh0ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdCkgfHxcclxuXHRcdFx0XHRcdFx0XHRcdGlzTmFOKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHROdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwicm93XCIgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnJvdy5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICsgYXJncy5yb3cuYWN0dWFsVGV4dCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XSA9IDA7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcInJvd1wiICsgYXJncy5yb3cuYWN0dWFsVGV4dCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdF0gKz0gTnVtYmVyKGFyZ3MudmFsdWUpO1xyXG5cclxuXHRcdFx0XHRcdFx0XHQvLyBcImNvbFwiICsgYXJncy5jb2x1bW4uYWN0dWFsVGV4dCArIGZpZWxkTmFtZSDooajnpLooY2VsbDogYXJncy5yb3dDZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCIgJiYgYXJncy5jb2x1bW5DZWxsVHlwZSA9PT0gXCJ2YWx1ZVwiKVxyXG5cdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdCFOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdFx0XHQpIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRpc05hTihcclxuXHRcdFx0XHRcdFx0XHRcdFx0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZ3JhbmRUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcImNvbFwiICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdF1cclxuXHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdF0gPSAwO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRdICs9IE51bWJlcihhcmdzLnZhbHVlKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChhcmdzLnJvd0NlbGxUeXBlID09PSBcInN1YlRvdGFsXCIgfHwgYXJncy5yb3cuaGFzQ2hpbGQpIHtcclxuXHRcdFx0Y29uc3QgZGF0YVR5cGUgPSBmaWVsZC5kYXRhVHlwZTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGRhdGFUeXBlID09PSBcInN0cmluZ1wiIHx8XHJcblx0XHRcdFx0ZGF0YVR5cGUgPT09IFwibnZhcmNoYXJcIiB8fFxyXG5cdFx0XHRcdGRhdGFUeXBlID09IFwiZGF0ZVwiIHx8XHJcblx0XHRcdFx0ZGF0YVR5cGUgPT0gXCJkYXRldGltZVwiXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGFyZ3MudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGxldCB2YWx1ZSA9IDA7XHJcblx0XHRcdFx0bGV0IGNoaWxkSGVhZGVycyA9IFtdO1xyXG5cdFx0XHRcdGlmIChhZ2dyZWdhdGVUeXBlID09PSBcIkZpcnN0XCIpIHtcclxuXHRcdFx0XHRcdGxldCBncm91cE5hbWVBcnJheXMgPSBbXTtcclxuXHRcdFx0XHRcdGxldCByb3dzID0gdGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3Mucm93cztcclxuXHRcdFx0XHRcdGZvciAoXHJcblx0XHRcdFx0XHRcdGxldCBpbmRleCA9IGFyZ3Mucm93LmxldmVsO1xyXG5cdFx0XHRcdFx0XHRpbmRleCA8IHJvd3MubGVuZ3RoO1xyXG5cdFx0XHRcdFx0XHRpbmRleCsrXHJcblx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0Z3JvdXBOYW1lQXJyYXlzLnB1c2gocm93c1tpbmRleF0ubmFtZSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MuY2VsbFNldHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0XHRcdFx0bGV0IHZhbHVlcyA9IFtdO1xyXG5cdFx0XHRcdFx0XHRsZXQgaGVhZGVyID0gZ3JvdXBOYW1lQXJyYXlzXHJcblx0XHRcdFx0XHRcdFx0Lm1hcCgobmFtZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goYXJncy5jZWxsU2V0c1tpXVtuYW1lXSk7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gYXJncy5jZWxsU2V0c1tpXVtuYW1lXTtcclxuXHRcdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0XHRcdC5qb2luKFwiLVwiKTtcclxuXHRcdFx0XHRcdFx0aWYgKCEoY2hpbGRIZWFkZXJzIGFzIGFueSkuaW5jbHVkZXMoaGVhZGVyKSkge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBmaWx0ZXJPYmo6IGFueSA9IHt9O1xyXG5cdFx0XHRcdFx0XHRcdGdyb3VwTmFtZUFycmF5cy5tYXAoXHJcblx0XHRcdFx0XHRcdFx0XHQobmFtZSwgeCkgPT4gKGZpbHRlck9ialtuYW1lXSA9IHZhbHVlc1t4XSlcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGxldCBfQ2VsbFNldHMgPSBfZmlsdGVyKGFyZ3MuY2VsbFNldHMsIGZpbHRlck9iaik7XHJcblx0XHRcdFx0XHRcdFx0Y2hpbGRIZWFkZXJzLnB1c2goaGVhZGVyKTtcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZSArPSBOdW1iZXIoX0NlbGxTZXRzWzBdW2ZpZWxkTmFtZV0pIHx8IDA7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKGFnZ3JlZ2F0ZVR5cGUgPT09IFwiTGFzdFwiKSB7XHJcblx0XHRcdFx0XHRsZXQgZ3JvdXBOYW1lQXJyYXlzID0gW107XHJcblx0XHRcdFx0XHRsZXQgcm93cyA9IHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLnJvd3M7XHJcblx0XHRcdFx0XHRmb3IgKFxyXG5cdFx0XHRcdFx0XHRsZXQgaW5kZXggPSBhcmdzLnJvdy5sZXZlbDtcclxuXHRcdFx0XHRcdFx0aW5kZXggPCByb3dzLmxlbmd0aDtcclxuXHRcdFx0XHRcdFx0aW5kZXgrK1xyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdGdyb3VwTmFtZUFycmF5cy5wdXNoKHJvd3NbaW5kZXhdLm5hbWUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IGFyZ3MuY2VsbFNldHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuXHRcdFx0XHRcdFx0bGV0IHZhbHVlcyA9IFtdO1xyXG5cdFx0XHRcdFx0XHRsZXQgaGVhZGVyID0gZ3JvdXBOYW1lQXJyYXlzXHJcblx0XHRcdFx0XHRcdFx0Lm1hcCgobmFtZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goYXJncy5jZWxsU2V0c1tpXVtuYW1lXSk7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gYXJncy5jZWxsU2V0c1tpXVtuYW1lXTtcclxuXHRcdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0XHRcdC5qb2luKFwiLVwiKTtcclxuXHRcdFx0XHRcdFx0aWYgKCEoY2hpbGRIZWFkZXJzIGFzIGFueSkuaW5jbHVkZXMoaGVhZGVyKSkge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBmaWx0ZXJPYmo6IGFueSA9IHt9O1xyXG5cdFx0XHRcdFx0XHRcdGdyb3VwTmFtZUFycmF5cy5tYXAoXHJcblx0XHRcdFx0XHRcdFx0XHQobmFtZSwgeCkgPT4gKGZpbHRlck9ialtuYW1lXSA9IHZhbHVlc1t4XSlcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdGxldCBfQ2VsbFNldHMgPSBfZmlsdGVyKGFyZ3MuY2VsbFNldHMsIGZpbHRlck9iaik7XHJcblx0XHRcdFx0XHRcdFx0Y2hpbGRIZWFkZXJzLnB1c2goaGVhZGVyKTtcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZSArPVxyXG5cdFx0XHRcdFx0XHRcdFx0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRfQ2VsbFNldHNbX0NlbGxTZXRzLmxlbmd0aCAtIDFdW2ZpZWxkTmFtZV1cclxuXHRcdFx0XHRcdFx0XHRcdCkgfHwgMDtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0aWYgKGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgIT09IFwiR3JhbmQgVG90YWxcIilcclxuXHRcdFx0XHRcdHRoaXMuY29sdW1uVGV4dHMucHVzaChhcmdzLmNvbHVtbi5hY3R1YWxUZXh0KTtcclxuXHJcblx0XHRcdFx0aWYgKCF0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jb2x1bW5zLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQhTnVtYmVyKHRoaXMuc3ViVG90YWxzW2ZpZWxkTmFtZV0pIHx8XHJcblx0XHRcdFx0XHRcdGlzTmFOKE51bWJlcih0aGlzLnN1YlRvdGFsc1tmaWVsZE5hbWVdKSlcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnN1YlRvdGFsc1tmaWVsZE5hbWVdID0gMDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMuc3ViVG90YWxzW2ZpZWxkTmFtZV0gKz0gTnVtYmVyKHZhbHVlKTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGggPT0gMVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQhTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuc3ViVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRdXHJcblx0XHRcdFx0XHRcdCkgfHxcclxuXHRcdFx0XHRcdFx0aXNOYU4oXHJcblx0XHRcdFx0XHRcdFx0TnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zdWJUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XVxyXG5cdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuc3ViVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgK1xyXG5cdFx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XSA9IDA7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLnN1YlRvdGFsc1tcclxuXHRcdFx0XHRcdFx0YXJncy5yb3cuYWN0dWFsVGV4dCArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdF0gKz0gTnVtYmVyKHZhbHVlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gLS0tPiBhbGxEYXRhVmFsdWXkuK3ov5nkuKrljZXlhYPmoLznmoTlgLzkuI3mraPnoa5cclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRhcmdzLmNvbHVtbkNlbGxUeXBlID09PSBcImdyYW5kVG90YWxcIiAmJlxyXG5cdFx0XHRcdFx0dGhpcy5waXZvdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY29sdW1ucy5sZW5ndGggPT0gMVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuYWxsRGF0YVZhbHVlICYmIHRoaXMuYWxsRGF0YVZhbHVlLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRhcmdzLnZhbHVlID1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLnN1YlRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgKyBcIkdyYW5kIFRvdGFsXCIgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRdO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5jb2x1bW5UZXh0cyA9IHVuaXFCeSh0aGlzLmNvbHVtblRleHRzLCAoZWwpID0+IGVsKTtcclxuXHRcdFx0XHRcdFx0bGV0IHZhbCA9IDA7XHJcblx0XHRcdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5UZXh0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IGVsZW1lbnQgPSB0aGlzLmNvbHVtblRleHRzW2ldO1xyXG5cdFx0XHRcdFx0XHRcdHZhbCArPVxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5zdWJUb3RhbHNbXHJcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3Mucm93LmFjdHVhbFRleHQgKyBlbGVtZW50ICsgZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRdO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSB2YWw7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGFyZ3MudmFsdWUgPSB2YWx1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoYXJncy5yb3dDZWxsVHlwZSA9PT0gXCJncmFuZFRvdGFsXCIpIHtcclxuXHRcdFx0Y29uc3QgZGF0YVR5cGUgPSBmaWVsZC5kYXRhVHlwZTtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdGRhdGFUeXBlID09IFwic3RyaW5nXCIgfHxcclxuXHRcdFx0XHRkYXRhVHlwZSA9PSBcIm52YXJjaGFyXCIgfHxcclxuXHRcdFx0XHRkYXRhVHlwZSA9PSBcImRhdGVcIiB8fFxyXG5cdFx0XHRcdGRhdGFUeXBlID09IFwiZGF0ZXRpbWVcIlxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRhcmdzLnZhbHVlID0gXCJcIjtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRpZiAoIXRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmNvbHVtbnMubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5hbGxEYXRhVmFsdWUgJiYgdGhpcy5hbGxEYXRhVmFsdWUubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRcdGxldCByb3dPYmpzID1cclxuXHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZVt0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGggLSAxXTtcclxuXHRcdFx0XHRcdFx0aWYgKHJvd09ianMpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgcm93T2Jqc0FyciA9IEpTT04ucGFyc2UoXHJcblx0XHRcdFx0XHRcdFx0XHRKU09OLnN0cmluZ2lmeShyb3dPYmpzKVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0bGV0IG9iakFyciA9IHJvd09ianNBcnIuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlbC5hY3R1YWxUZXh0ID09IGZpZWxkTmFtZSAmJiBlbC5pc0dyYW5kU3VtXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRpZiAob2JqQXJyICYmIG9iakFyci5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBvYmpBcnJbb2JqQXJyLmxlbmd0aCAtIDFdLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRPYmplY3Qua2V5cyh0aGlzLmdyYW5kVG90YWxzKS5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID0gdGhpcy5ncmFuZFRvdGFsc1tmaWVsZE5hbWVdO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9IHRoaXMuZ3JhbmRUb3RhbHNbZmllbGROYW1lXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0aWYgKGFyZ3MuY29sdW1uQ2VsbFR5cGUgPT09IFwiZ3JhbmRUb3RhbFwiKSB7XHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLmFsbERhdGFWYWx1ZSAmJiB0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgcm93T2JqcyA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbERhdGFWYWx1ZVt0aGlzLmFsbERhdGFWYWx1ZS5sZW5ndGggLSAxXTtcclxuXHRcdFx0XHRcdFx0XHRpZiAocm93T2Jqcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0bGV0IHJvd09ianNBcnIgPSBKU09OLnBhcnNlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRKU09OLnN0cmluZ2lmeShyb3dPYmpzKVxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdGxldCBvYmpBcnIgPSByb3dPYmpzQXJyLmZpbHRlcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0KGVsKSA9PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVsLmFjdHVhbFRleHQgPT0gZmllbGROYW1lICYmXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZWwuaXNHcmFuZFN1bVxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdGlmIChvYmpBcnIgJiYgb2JqQXJyLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnZhbHVlID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvYmpBcnJbb2JqQXJyLmxlbmd0aCAtIDFdLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdFx0T2JqZWN0LmtleXModGhpcy5ncmFuZFRvdGFscykuaW5jbHVkZXMoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpXHJcblx0XHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5ncmFuZFRvdGFsc1tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLmNvbHVtbi5hY3R1YWxUZXh0ICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGROYW1lXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcImNvbFwiICsgYXJncy5jb2x1bW4uYWN0dWFsVGV4dCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuYWxsRGF0YVZhbHVlICYmIHRoaXMuYWxsRGF0YVZhbHVlLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHRcdGxldCByb3dPYmpzID1cclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYWxsRGF0YVZhbHVlW3RoaXMuYWxsRGF0YVZhbHVlLmxlbmd0aCAtIDFdO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByb3dPYmpzQXJyID0gSlNPTi5wYXJzZShcclxuXHRcdFx0XHRcdFx0XHRcdEpTT04uc3RyaW5naWZ5KHJvd09ianMpXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRsZXQgb2JqQXJyID0gcm93T2Jqc0Fyci5maWx0ZXIoXHJcblx0XHRcdFx0XHRcdFx0XHQoZWwpID0+XHJcblx0XHRcdFx0XHRcdFx0XHRcdGVsLmFjdHVhbFRleHQgPT0gZmllbGROYW1lICYmXHJcblx0XHRcdFx0XHRcdFx0XHRcdGVsLmlzR3JhbmRTdW0gJiZcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZWwuY29sdW1uSGVhZGVycyA9PSBhcmdzLmNvbHVtbi5hY3R1YWxUZXh0XHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRpZiAob2JqQXJyICYmIG9iakFyci5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPSBvYmpBcnJbb2JqQXJyLmxlbmd0aCAtIDFdLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRPYmplY3Qua2V5cyh0aGlzLmdyYW5kVG90YWxzKS5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0XCJjb2xcIiArIGFyZ3MuY29sdW1uLmFjdHVhbFRleHQgKyBmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MudmFsdWUgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFwiY29sXCIgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5jb2x1bW4uYWN0dWFsVGV4dCArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaWVsZE5hbWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0YXJncy52YWx1ZSA9XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmdyYW5kVG90YWxzW1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcImNvbFwiICsgYXJncy5jb2x1bW4uYWN0dWFsVGV4dCArIGZpZWxkTmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0dGhpcy5mb3JtYXRWYWwoYXJncywgZmllbGROYW1lKTtcclxuXHRcdHJldHVybiBhcmdzLnZhbHVlO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBmb3JtYXRWYWwoYXJncywgZmllbGROYW1lKSB7XHJcblx0XHR0aGlzLmNvbmZpZ0ZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG5cdFx0XHRpZiAoZmllbGQuY29sTmFtZSA9PSBmaWVsZE5hbWUpIHtcclxuXHRcdFx0XHRzd2l0Y2ggKGZpZWxkLmRhdGFUeXBlKSB7XHJcblx0XHRcdFx0XHRjYXNlIFwiZGF0ZVwiOlxyXG5cdFx0XHRcdFx0Y2FzZSBcImRhdGV0aW1lXCI6XHJcblx0XHRcdFx0XHRcdGlmIChhcmdzLnZhbHVlKSBhcmdzLnZhbHVlID0gbmV3IERhdGUoYXJncy52YWx1ZSk7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0ZXhjbHVkZUZpZWxkcyhmaWVsZHMsIGRhdGEpIHtcclxuXHRcdGxldCBuYW1lYXJyYXkgPSBbXTtcclxuXHRcdGxldCBhcnJheSA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgcHJvcCBpbiBkYXRhKSB7XHJcblx0XHRcdGFycmF5LnB1c2gocHJvcCk7XHJcblx0XHR9XHJcblx0XHRmb3IgKGxldCBpdGVtIG9mIGZpZWxkcykge1xyXG5cdFx0XHRuYW1lYXJyYXkucHVzaChpdGVtLmNvbE5hbWUpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5leGNsdWRlRmllbGRzID0gZGlmZmVyZW5jZVdpdGgoYXJyYXksIG5hbWVhcnJheSk7XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMuZXhjbHVkZUZpZWxkcy5sZW5ndGggJiZcclxuXHRcdFx0dGhpcy5jb25maWcuZ3JvdXBTZXR0aW5ncyAmJlxyXG5cdFx0XHR0aGlzLmNvbmZpZy5ncm91cFNldHRpbmdzLmxlbmd0aFxyXG5cdFx0KSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5leGNsdWRlRmllbGRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Y29uc3QgZWwgPSB0aGlzLmV4Y2x1ZGVGaWVsZHNbaV07XHJcblx0XHRcdFx0aWYgKHN0YXJ0c1dpdGgoZWwsIHRoaXMuY29uZmlnLmdyb3VwU2V0dGluZ3NbMF0ubmFtZSArIFwiX1wiKSkge1xyXG5cdFx0XHRcdFx0dGhpcy5leGNsdWRlRmllbGRzLnNwbGljZShpLCAxKTtcclxuXHRcdFx0XHRcdGktLTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0SW5mbygpIHtcclxuXHRcdHRoaXMuZGF0ZVBpcGVGb3JtYXQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImRhdGVQaXBlXCIpO1xyXG5cdFx0dGhpcy50cmFuc2xhdGlvbiA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ0cmFuc2xhdGlvblwiKSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgb25GaWVsZERyb3AoYXJnczogRmllbGREcm9wRXZlbnRBcmdzKSB7XHJcblx0XHR0aGlzLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZXMgPSBbLi4uYXJncy5kYXRhU291cmNlU2V0dGluZ3MudmFsdWVzXTtcclxuXHRcdC8vY2hhbmdlIHRoZSBjYWxjdWFsdGVGaWVsZCBtZXRob2QgdXNlIHRoZSBjb3JyZXNwb25kaW5nIGNhbGN1bGF0ZVxyXG5cdFx0Y29uc3QgY2FsY3VhbHRlRmllbGQgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gYXJncy5maWVsZE5hbWUgJiYgZWwuaXNDYWxjdWxhdGVkRmllbGRcclxuXHRcdCk7XHJcblx0XHRpZiAoY2FsY3VhbHRlRmllbGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRhcmdzLmRyb3BGaWVsZC50eXBlID1cclxuXHRcdFx0XHR0aGlzLmRhc2hib2FyZFBvcmxldHNTZXJ2aWNlLmdldENhbGN1bGF0ZU1ldGhvZChcclxuXHRcdFx0XHRcdGNhbGN1YWx0ZUZpZWxkWzBdLmNvbE5hbWVcclxuXHRcdFx0XHQpIGFzIGFueTtcclxuXHRcdFx0YXJncy5kcm9wRmllbGQuY2FwdGlvbiA9IGFyZ3MuZHJvcEZpZWxkLmNhcHRpb25cclxuXHRcdFx0XHQucmVwbGFjZShcIkNhbGN1bGF0ZVwiLCBcIlwiKVxyXG5cdFx0XHRcdC50cmltKCk7XHJcblx0XHR9XHJcblx0XHRmb3IgKFxyXG5cdFx0XHRsZXQgaSA9IDA7XHJcblx0XHRcdGkgPCBhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5maWx0ZXJTZXR0aW5ncy5sZW5ndGg7XHJcblx0XHRcdGkrK1xyXG5cdFx0KSB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHRhcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy5maWx0ZXJTZXR0aW5nc1tpXS5uYW1lID09PVxyXG5cdFx0XHRcdFx0YXJncy5maWVsZE5hbWUgJiZcclxuXHRcdFx0XHRhcmdzLmRyb3BBeGlzID09PSBcIlwiXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGFyZ3MuZGF0YVNvdXJjZVNldHRpbmdzLmZpbHRlclNldHRpbmdzLnNwbGljZShpLCAxKTtcclxuXHRcdFx0XHR0aGlzLmZpbHRlclNldHRpbmdzID0gYXJncy5kYXRhU291cmNlU2V0dGluZ3MuZmlsdGVyU2V0dGluZ3M7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vIENhbGN1bGF0ZWQgZmllbGTkuovku7bvvJrliJvlu7pcclxuXHRwdWJsaWMgY2FsY3VsYXRlZEZpZWxkQ3JlYXRlKGFyZ3M6IENhbGN1bGF0ZWRGaWVsZENyZWF0ZUV2ZW50QXJncykge1xyXG5cdFx0aWYgKFxyXG5cdFx0XHRhcmdzLmNhbGN1bGF0ZWRGaWVsZC5uYW1lICE9PSBcIlwiICYmXHJcblx0XHRcdGFyZ3MuY2FsY3VsYXRlZEZpZWxkLm5hbWUudHJpbSgpICE9PSBcIlwiXHJcblx0XHQpIHtcclxuXHRcdFx0bGV0IGluZGV4ID1cclxuXHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3MuZmluZEluZGV4KFxyXG5cdFx0XHRcdFx0KGVsKSA9PiBlbC5uYW1lID09PSBhcmdzLmNhbGN1bGF0ZWRGaWVsZC5uYW1lXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0aWYgKGluZGV4ICE9PSAtMSkge1xyXG5cdFx0XHRcdGlmIChhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtYXRTdHJpbmcgPT09IFwiXCIpIHtcclxuXHRcdFx0XHRcdHRoaXMuZmllbGRsaXN0T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5jYWxjdWxhdGVkRmllbGRTZXR0aW5nc1tcclxuXHRcdFx0XHRcdFx0aW5kZXhcclxuXHRcdFx0XHRcdF0uZm9ybWF0U3RyaW5nID0gXCJOMlwiO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLmZpZWxkbGlzdE9iai5kYXRhU291cmNlU2V0dGluZ3MuY2FsY3VsYXRlZEZpZWxkU2V0dGluZ3NbXHJcblx0XHRcdFx0XHRcdGluZGV4XHJcblx0XHRcdFx0XHRdLmZvcm1hdFN0cmluZyA9IGFyZ3MuY2FsY3VsYXRlZEZpZWxkLmZvcm1hdFN0cmluZztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0aWYgKGFyZ3MuY2FsY3VsYXRlZEZpZWxkLmZvcm1hdFN0cmluZyA9PT0gXCJcIikge1xyXG5cdFx0XHRcdFx0YXJncy5jYWxjdWxhdGVkRmllbGQuZm9ybWF0U3RyaW5nID0gXCJOMlwiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHQvLyDnp7vpmaTph43lpI1cclxuXHRcdFx0bGV0IGZJbmRleCA9IHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkcy5maW5kSW5kZXgoXHJcblx0XHRcdFx0KGYpID0+IGYubmFtZSA9PT0gYXJncy5jYWxjdWxhdGVkRmllbGQubmFtZVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRpZiAoZkluZGV4ID4gLTEpIHtcclxuXHRcdFx0XHR0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMuc3BsaWNlKGZJbmRleCwgMSk7XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8g5Yy56YWN6L+Q566X56ymIEZpcnN0IHx8IExhc3RcclxuXHRcdFx0bGV0IGZvcm11bGFTdHIgPSBhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtdWxhO1xyXG5cdFx0XHRsZXQgcmVnMSA9IC9cIkZpcnN0XFwoKC4rPylcXClcIi9nO1xyXG5cdFx0XHRsZXQgcmVnMiA9IC9cIkxhc3RcXCgoLis/KVxcKVwiL2c7XHJcblx0XHRcdGlmIChyZWcxLnRlc3QoZm9ybXVsYVN0cikgfHwgcmVnMi50ZXN0KGZvcm11bGFTdHIpKSB7XHJcblx0XHRcdFx0Ly8g5Yik5pat5piv5ZCm5a2Y5ZyoRmlyc3QgfHwgTGFzdCDooajovr7lvI9cclxuXHRcdFx0XHRsZXQgbWF0Y2hGaXJzdEZpZWxkcyA9IEFycmF5LmZyb20oXHJcblx0XHRcdFx0XHRmb3JtdWxhU3RyW1wibWF0Y2hBbGxcIl0oL1wiRmlyc3RcXCgoLis/KVxcKVwiL2cpLFxyXG5cdFx0XHRcdFx0KG0pID0+IHtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFN0cjogbVswXSxcclxuXHRcdFx0XHRcdFx0XHRtYXRjaFdvcmQ6IG1bMV0sXHJcblx0XHRcdFx0XHRcdFx0cmVwbGFjZVZhbHVlOiBcIlwiLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoTWV0aG9kOiBcIkZpcnN0XCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRsZXQgbWF0Y2hMYXN0RmllbGRzID0gQXJyYXkuZnJvbShcclxuXHRcdFx0XHRcdGZvcm11bGFTdHJbXCJtYXRjaEFsbFwiXSgvXCJMYXN0XFwoKC4rPylcXClcIi9nKSxcclxuXHRcdFx0XHRcdChtKSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hTdHI6IG1bMF0sXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hXb3JkOiBtWzFdLFxyXG5cdFx0XHRcdFx0XHRcdHJlcGxhY2VWYWx1ZTogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRtYXRjaE1ldGhvZDogXCJMYXN0XCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRsZXQgbWF0Y2hNYXhGaWVsZHMgPSBBcnJheS5mcm9tKFxyXG5cdFx0XHRcdFx0Zm9ybXVsYVN0cltcIm1hdGNoQWxsXCJdKC9cIk1heFxcKCguKz8pXFwpXCIvZyksXHJcblx0XHRcdFx0XHQobSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRcdG1hdGNoU3RyOiBtWzBdLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoV29yZDogbVsxXSxcclxuXHRcdFx0XHRcdFx0XHRyZXBsYWNlVmFsdWU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hNZXRob2Q6IFwiTWF4XCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRsZXQgbWF0Y2hNaW5GaWVsZHMgPSBBcnJheS5mcm9tKFxyXG5cdFx0XHRcdFx0Zm9ybXVsYVN0cltcIm1hdGNoQWxsXCJdKC9cIk1pblxcKCguKz8pXFwpXCIvZyksXHJcblx0XHRcdFx0XHQobSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRcdG1hdGNoU3RyOiBtWzBdLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoV29yZDogbVsxXSxcclxuXHRcdFx0XHRcdFx0XHRyZXBsYWNlVmFsdWU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hNZXRob2Q6IFwiTWluXCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRsZXQgbWF0Y2hTdW1GaWVsZHMgPSBBcnJheS5mcm9tKFxyXG5cdFx0XHRcdFx0Zm9ybXVsYVN0cltcIm1hdGNoQWxsXCJdKC9cIlN1bVxcKCguKz8pXFwpXCIvZyksXHJcblx0XHRcdFx0XHQobSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRcdG1hdGNoU3RyOiBtWzBdLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoV29yZDogbVsxXSxcclxuXHRcdFx0XHRcdFx0XHRyZXBsYWNlVmFsdWU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hNZXRob2Q6IFwiU3VtXCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRsZXQgbWF0Y2hBdmdGaWVsZHMgPSBBcnJheS5mcm9tKFxyXG5cdFx0XHRcdFx0Zm9ybXVsYVN0cltcIm1hdGNoQWxsXCJdKC9cIkF2Z1xcKCguKz8pXFwpXCIvZyksXHJcblx0XHRcdFx0XHQobSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRcdG1hdGNoU3RyOiBtWzBdLFxyXG5cdFx0XHRcdFx0XHRcdG1hdGNoV29yZDogbVsxXSxcclxuXHRcdFx0XHRcdFx0XHRyZXBsYWNlVmFsdWU6IFwiXCIsXHJcblx0XHRcdFx0XHRcdFx0bWF0Y2hNZXRob2Q6IFwiQXZnXCIsXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRtYXRjaEZpcnN0RmllbGRzLmV2ZXJ5KCh4KSA9PlxyXG5cdFx0XHRcdFx0XHR0aGlzLmFsbG93ZWRDYWxjdWxhdGVkRmllbGRzLmluY2x1ZGVzKHgubWF0Y2hXb3JkKVxyXG5cdFx0XHRcdFx0KSAmJlxyXG5cdFx0XHRcdFx0bWF0Y2hMYXN0RmllbGRzLmV2ZXJ5KCh4KSA9PlxyXG5cdFx0XHRcdFx0XHR0aGlzLmFsbG93ZWRDYWxjdWxhdGVkRmllbGRzLmluY2x1ZGVzKHgubWF0Y2hXb3JkKVxyXG5cdFx0XHRcdFx0KVxyXG5cdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0Ly8g5Yik5patRmlyc3TlkoxMYXN06KGo6L6+5byP5YaF55qE5a2X5q615piv5ZCm5ZCI5rOVXHJcblx0XHRcdFx0XHR0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMucHVzaCh7XHJcblx0XHRcdFx0XHRcdG5hbWU6IGFyZ3MuY2FsY3VsYXRlZEZpZWxkLm5hbWUsXHJcblx0XHRcdFx0XHRcdGZvcm11bGE6IGFyZ3MuY2FsY3VsYXRlZEZpZWxkLmZvcm11bGEsXHJcblx0XHRcdFx0XHRcdG1hdGNoRmllbGRzOiBbXHJcblx0XHRcdFx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoRmlyc3RGaWVsZHMsXHJcblx0XHRcdFx0XHRcdFx0Li4ubWF0Y2hMYXN0RmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoTWF4RmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoTWluRmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoU3VtRmllbGRzLFxyXG5cdFx0XHRcdFx0XHRcdC4uLm1hdGNoQXZnRmllbGRzLFxyXG5cdFx0XHRcdFx0XHRdLFxyXG5cdFx0XHRcdFx0XHRncmFuZFRvdGFsOiAwLFxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRsZXQgZmllbGROYW1lID0gKFxyXG5cdFx0XHRcdFx0XHRmb3JtdWxhU3RyLnNwbGl0KFwiRmlyc3QoXCIpWzFdIHx8XHJcblx0XHRcdFx0XHRcdGZvcm11bGFTdHIuc3BsaXQoXCJMYXN0KFwiKVsxXVxyXG5cdFx0XHRcdFx0KS5zcGxpdChcIilcIilbMF07XHJcblx0XHRcdFx0XHRhcmdzLmNhbGN1bGF0ZWRGaWVsZC5mb3JtdWxhID1cclxuXHRcdFx0XHRcdFx0XCInXFxcIlwiICsgXCJTdW0oXCIgKyBmaWVsZE5hbWUgKyAnKVwiPScgKyBmb3JtdWxhU3RyICsgXCInXCI7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvLyBDYWxjdWxhdGVkIGZpZWxk5LqL5Lu277ya5a6M5oiQXHJcblx0cHVibGljIGFjdGlvbkNvbXBsZXRlKGFyZ3MpIHtcclxuXHRcdGlmIChcclxuXHRcdFx0YXJncy5hY3Rpb25OYW1lID09PSBcIkZpZWxkIGFnZ3JlZ2F0ZWRcIiB8fFxyXG5cdFx0XHRhcmdzLmFjdGlvbk5hbWUgPT09IFwiRmllbGQgbGlzdCBjbG9zZWRcIlxyXG5cdFx0KSB7XHJcblx0XHRcdHRoaXMuZGF0YVNvdXJjZVNldHRpbmdzLnZhbHVlcyA9IFtcclxuXHRcdFx0XHQuLi5hcmdzLmRhdGFTb3VyY2VTZXR0aW5ncy52YWx1ZXMsXHJcblx0XHRcdF07XHJcblx0XHRcdHRoaXMuc2V0VmFsdWVJdGVtRGF0YSgpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGFyZ3MuYWN0aW9uTmFtZSA9PSBcIkZpZWxkIHJlbW92ZWRcIikge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0YXJncy5maWVsZEluZm8gJiZcclxuXHRcdFx0XHRhcmdzLmZpZWxkSW5mby5maWVsZEl0ZW0gJiZcclxuXHRcdFx0XHRhcmdzLmZpZWxkSW5mby5maWVsZEl0ZW0udHlwZSA9PSBcIkNhbGN1bGF0ZWRGaWVsZFwiXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGxldCBmaWVsZCA9IGFyZ3MuZmllbGRJbmZvLmZpZWxkTmFtZTtcclxuXHRcdFx0XHQvLyBSZW1vdmUgdGhlIGRlbGV0ZWQgY2FsY3VsYXRlZCBmaWVsZCBmcm9tIGFuIHN0b3JlZCBhcnJheS5cclxuXHRcdFx0XHR0aGlzLmN1c3RvbUNhbGN1bGF0ZWRGaWVsZHMgPVxyXG5cdFx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzLmZpbHRlcihmdW5jdGlvbiAob2JqKSB7XHJcblx0XHRcdFx0XHRcdHJldHVybiBvYmoubmFtZSAhPT0gZmllbGQ7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gQ2FsY3VsYXRlZCBmaWVsZOS6i+S7tu+8muW8gOWni1xyXG5cdHB1YmxpYyBhY3Rpb25CZWdpbihhcmdzKSB7XHJcblx0XHRpZiAoYXJncy5hY3Rpb25OYW1lID09PSBcIkVkaXQgY2FsY3VsYXRlZCBmaWVsZFwiKSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzW2ldLm5hbWUgJiZcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZpZWxkTGlzdFtcclxuXHRcdFx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzW2ldLm5hbWVcclxuXHRcdFx0XHRcdF1cclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLmZpZWxkTGlzdFtcclxuXHRcdFx0XHRcdFx0dGhpcy5jdXN0b21DYWxjdWxhdGVkRmllbGRzW2ldLm5hbWVcclxuXHRcdFx0XHRcdF0uZm9ybXVsYSA9IHRoaXMuY3VzdG9tQ2FsY3VsYXRlZEZpZWxkc1tpXS5mb3JtdWxhO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByZXNpemVTdG9wKGFyZ3MpIHtcclxuXHRcdGlmICh0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGgpIHtcclxuXHRcdFx0Y29uc3QgaGVhZGVyX2ZpZWxkID0gdGhpcy5jb25maWcuY29sdW1uc1dpZHRoLmZpbHRlcihcclxuXHRcdFx0XHQoZWwpID0+IGVsLmhlYWRlclRleHQgPT09IGFyZ3MuY29sdW1uLmhlYWRlclRleHRcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKGhlYWRlcl9maWVsZC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0aGVhZGVyX2ZpZWxkWzBdLndpZHRoID0gcGFyc2VJbnQoYXJncy5jb2x1bW4ud2lkdGgpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuY29uZmlnLmNvbHVtbnNXaWR0aC5wdXNoKHtcclxuXHRcdFx0XHRcdGhlYWRlclRleHQ6IGFyZ3MuY29sdW1uLmhlYWRlclRleHQsXHJcblx0XHRcdFx0XHR3aWR0aDogcGFyc2VJbnQoYXJncy5jb2x1bW4ud2lkdGgpLFxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGggPSBbXTtcclxuXHRcdFx0dGhpcy5jb25maWcuY29sdW1uc1dpZHRoLnB1c2goe1xyXG5cdFx0XHRcdGhlYWRlclRleHQ6IGFyZ3MuY29sdW1uLmhlYWRlclRleHQsXHJcblx0XHRcdFx0d2lkdGg6IHBhcnNlSW50KGFyZ3MuY29sdW1uLndpZHRoKSxcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRjb25zdCBwb3J0bGV0ID0gdGhpcy5wb3J0bGV0O1xyXG5cdFx0cG9ydGxldC5jb25maWcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XHJcblx0XHRjb25zdCBpbmRleCA9IHRoaXMucG9ydGxldHMuZmluZEluZGV4KCh4KSA9PiB4Lm5ld0lkID09PSBwb3J0bGV0Lm5ld0lkKTtcclxuXHRcdGlmIChpbmRleCA+IC0xKSB0aGlzLnBvcnRsZXRzW2luZGV4XSA9IHBvcnRsZXQ7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNldENvbHVtbnNSZW5kZXIoYXJncykge1xyXG5cdFx0aWYgKGFyZ3Muc3RhY2tlZENvbHVtbnMpIHtcclxuXHRcdFx0YXJncy5zdGFja2VkQ29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcclxuXHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRjb2wuZm9ybWF0ICYmXHJcblx0XHRcdFx0XHQoY29sLmZvcm1hdC5pbmRleE9mKFwiTlwiKSAhPT0gLTEgfHxcclxuXHRcdFx0XHRcdFx0Y29sLmZvcm1hdCA9PT0gXCJwZXJjZW50XCIgfHxcclxuXHRcdFx0XHRcdFx0Y29sLmZvcm1hdC5pbmRleE9mKFwiUFwiKSAhPT0gLTEpXHJcblx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRjb2wudGV4dEFsaWduID0gXCJSaWdodFwiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuY29uZmlnLmNvbHVtbnNXaWR0aCkge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IChhcmdzIGFzIGFueSkuY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGFyZ3MuY29sdW1uc1tpXS5oZWFkZXJUZXh0ID09PSBcIlwiIHx8XHJcblx0XHRcdFx0XHQhYXJncy5jb2x1bW5zW2ldLmhlYWRlclRleHRcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGNvbHVtbl9yb3cgPSB0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGguZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHQoZWwpID0+IGVsLmhlYWRlclRleHQgPT09IGFyZ3MuY29sdW1uc1tpXS5oZWFkZXJUZXh0XHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0aWYgKGNvbHVtbl9yb3cubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRhcmdzLmNvbHVtbnNbaV0ud2lkdGggPSBjb2x1bW5fcm93WzBdLndpZHRoO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb25zdCBoZWFkZXJUZXh0ID0gYXJncy5jb2x1bW5zW2ldLmhlYWRlclRleHRcclxuXHRcdFx0XHRcdFx0LnJlcGxhY2UoL1xccysvZywgXCJcIilcclxuXHRcdFx0XHRcdFx0LnNwbGl0KFwiLlwiKTtcclxuXHRcdFx0XHRcdGlmIChoZWFkZXJUZXh0ICYmIGhlYWRlclRleHQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBjb2x1bW4gPSB0aGlzLmNvbmZpZy5jb2x1bW5zV2lkdGguZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdChlbCkgPT5cclxuXHRcdFx0XHRcdFx0XHRcdGVsLmhlYWRlclRleHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoL1xccysvZywgXCJcIilcclxuXHRcdFx0XHRcdFx0XHRcdFx0LnRvTG93ZXJDYXNlKCkgPT09XHJcblx0XHRcdFx0XHRcdFx0XHRoZWFkZXJUZXh0W2hlYWRlclRleHQubGVuZ3RoIC0gMV0udG9Mb3dlckNhc2UoKVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRpZiAoY29sdW1uLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0XHQoYXJncyBhcyBhbnkpLmNvbHVtbnNbaV0ud2lkdGggPSBjb2x1bW5bMF0ud2lkdGg7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Ly8gZGF0ZSBmb3JtYXQgYWJvdXQgcXVhcnRlcmx5XHJcblx0XHRcdFx0bGV0IHBpdm90VmFsdWVzOiBhbnkgPSB0aGlzLnBpdm90T2JqLnBpdm90VmFsdWVzO1xyXG5cdFx0XHRcdGlmICh0aGlzLmZvcm1hdERhdGVzICYmIHRoaXMuZm9ybWF0RGF0ZXMubGVuZ3RoKSB7XHJcblx0XHRcdFx0XHRsZXQgZGF0ZUZpZWxkcyA9IHRoaXMuZm9ybWF0RGF0ZXMubWFwKChlbCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gZWwubmFtZTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgayA9IDE7IGsgPCBwaXZvdFZhbHVlcy5sZW5ndGg7IGsrKykge1xyXG5cdFx0XHRcdFx0XHRmb3IgKFxyXG5cdFx0XHRcdFx0XHRcdGxldCBqID0gMDtcclxuXHRcdFx0XHRcdFx0XHRwaXZvdFZhbHVlc1trXSAhPSBudWxsICYmIGogPCBwaXZvdFZhbHVlc1trXS5sZW5ndGg7XHJcblx0XHRcdFx0XHRcdFx0aisrXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdICE9IG51bGwgJiZcclxuXHRcdFx0XHRcdFx0XHRcdChqID09IDBcclxuXHRcdFx0XHRcdFx0XHRcdFx0PyBkYXRlRmllbGRzLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNba11bal0udmFsdWVTb3J0LmF4aXNcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHRcdFx0XHRcdDogZGF0ZUZpZWxkcy5pbmNsdWRlcyhcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBpdm90VmFsdWVzW2tdW2pdLmFjdHVhbFRleHRcclxuXHRcdFx0XHRcdFx0XHRcdFx0ICApKVxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly9DdXN0b21pemUgdGhlIFJvdyBoZWFkZXJzL0NvbHVtbiBoZWFkZXJzIGJhc2VkIG9uIHlvdXIgbmVlZHNcclxuXHRcdFx0XHRcdFx0XHRcdGxldCBoZWFkZXJzO1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGogPT09IDApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aGVhZGVycyA9IHBpdm90VmFsdWVzW2tdW2pdLmFjdHVhbFRleHQ7XHJcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBoZWFkZXJzID0gcGl2b3RWYWx1ZXNba11bal0uZm9ybWF0dGVkVGV4dDtcclxuXHRcdFx0XHRcdFx0XHRcdFx0aGVhZGVycyA9IHBpdm90VmFsdWVzW2tdW2pdLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKGhlYWRlcnMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IGRhdGUgPSBuZXcgRGF0ZShoZWFkZXJzKTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBxdWFydGVyID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRNYXRoLmZsb29yKGRhdGUuZ2V0TW9udGgoKSAvIDMpICsgMTtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGxldCBmb3JtYXQ7XHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZvcm1hdERhdGVzLm1hcCgoZWwpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaiA9PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsLm5hbWUgPT1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNba11bal0udmFsdWVTb3J0LmF4aXNcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybWF0ID0gZWwuZm9ybWF0O1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVsLm5hbWUgPT1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNba11bal0uYWN0dWFsVGV4dFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQgPSBlbC5mb3JtYXQ7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNba11bal0uZm9ybWF0dGVkVGV4dCA9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5nZXRRdWFydGVyVmFsdWUoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3JtYXQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cXVhcnRlclxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8vIGlmKHRoaXMucGl2b3RPYmopIHRoaXMucGl2b3RPYmoucmVmcmVzaERhdGEoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBvbkxvYWQoKTogdm9pZCB7XHJcblx0XHQvLyBTTVAyLTE1NjUxIOW8gOWQr+iZmuaLn+a7muWKqOW5tnNvcnTliJflkI7vvIzmnaXlm57mu5rliqjkvJrlr7zoh7TmlbDmja7nqbrnmb1cclxuXHRcdC8vIOWumOaWuemTvuaOpSBodHRwczovL2VqMi5zeW5jZnVzaW9uLmNvbS9hbmd1bGFyL2RvY3VtZW50YXRpb24vcGl2b3R2aWV3L3ZpcnR1YWwtc2Nyb2xsaW5nI3ZpcnR1YWwtc2Nyb2xsaW5nLWZvci1zdGF0aWMtZmllbGQtbGlzdFxyXG5cdFx0Ly8gRGVtb+mTvuaOpSBodHRwczovL3N0YWNrYmxpdHouY29tL2VkaXQvZ2l0aHViLTdnZ2sydS00cmt6YjM/ZmlsZT1zcmMlMkZhcHAuY29tcG9uZW50LnRzXHJcblx0XHQodGhpcy5maWVsZGxpc3RPYmogYXMgUGl2b3RGaWVsZExpc3RDb21wb25lbnQpLnBpdm90R3JpZE1vZHVsZSA9IHRoaXNcclxuXHRcdFx0LnBpdm90T2JqIGFzIFBpdm90Vmlld0NvbXBvbmVudDtcclxuXHR9XHJcblxyXG5cdG9uZGF0YUJvdW5kKCl7XHJcblx0XHRpZiAoQnJvd3Nlci5pc0RldmljZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBpdm90T2JqLmVsZW1lbnQuc3R5bGUud2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgICAgIHRoaXMucGl2b3RPYmouYWxsb3dDYWxjdWxhdGVkRmllbGQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnBpdm90T2JqLnNob3dGaWVsZExpc3QgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZW5naW5lUG9wdWxhdGVkKGFyZ3MpIHtcclxuXHRcdGxldCBjbG9uZWRWYWx1ZXM6IElQaXZvdFZhbHVlcztcclxuXHRcdGxldCBjdXJyZW50UGl2b3RWYWx1ZXM6IGFueSA9IHRoaXMuZ2V0Q2xvbmVkUGl2b3RWYWx1ZXMoXHJcblx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLnBpdm90VmFsdWVzXHJcblx0XHQpO1xyXG5cdFx0bGV0IHBhZ2VTZXR0aW5nczogSVBhZ2VTZXR0aW5ncyA9XHJcblx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLnBhZ2VTZXR0aW5ncztcclxuXHJcblx0XHRpZiAodGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZ2VuZXJhdGVHcmlkRGF0YSkge1xyXG5cdFx0XHQvLyDmsqHms5XlpI3njrAgaHR0cHM6Ly9yYWlzZWxwLmF0bGFzc2lhbi5uZXQvYnJvd3NlL1NNUDItMTcyNCDlpITnkIbnmoTov5nkuKrpl67popjmg4XlhrUsIOebtOaOpeazqOmHiuaOiVxyXG5cdFx0XHQvLyDkuIvpnaLov5nmrrXku6PnoIHkvJrlvbHlk40gaHR0cHM6Ly9yYWlzZWxwLmF0bGFzc2lhbi5uZXQvYnJvd3NlL1NNUDItMTIxMzlcclxuXHRcdFx0Ly8gdGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUuZ2VuZXJhdGVHcmlkRGF0YShcclxuXHRcdFx0Ly8gXHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncyxcclxuXHRcdFx0Ly8gXHR0cnVlXHJcblx0XHRcdC8vICk7XHJcblx0XHRcdGNsb25lZFZhbHVlcyA9IHRoaXMuZ2V0Q2xvbmVkUGl2b3RWYWx1ZXMoXHJcblx0XHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUucGl2b3RWYWx1ZXNcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdHRoaXMucGl2b3RPYmouZW5naW5lTW9kdWxlLnBpdm90VmFsdWVzID0gY3VycmVudFBpdm90VmFsdWVzO1xyXG5cclxuXHRcdFx0dGhpcy5waXZvdE9iai5lbmdpbmVNb2R1bGUucGFnZVNldHRpbmdzID0gcGFnZVNldHRpbmdzO1xyXG5cclxuXHRcdFx0Ly8gSGVyZSBcImNsb25lZFZhbHVlc1wiIGNvbnRhaW5zIHRoZSB3aG9sZSBwaXZvdCB2YWx1ZXMuXHJcblx0XHRcdHRoaXMuYWxsRGF0YVZhbHVlID0gY2xvbmVkVmFsdWVzO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRDbG9uZWRQaXZvdFZhbHVlcyhwaXZvdFZhbHVlczogSVBpdm90VmFsdWVzKTogSVBpdm90VmFsdWVzIHtcclxuXHRcdGxldCBjbG9uZWRTZXRzOiBJUGl2b3RWYWx1ZXMgPSBbXTtcclxuXHRcdGlmIChwaXZvdFZhbHVlcyAmJiBwaXZvdFZhbHVlcy5sZW5ndGgpIHtcclxuXHRcdFx0Zm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHBpdm90VmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0aWYgKHBpdm90VmFsdWVzW2ldKSB7XHJcblx0XHRcdFx0XHRjbG9uZWRTZXRzW2ldID0gW107XHJcblx0XHRcdFx0XHRmb3IgKGxldCBqOiBudW1iZXIgPSAwOyBqIDwgcGl2b3RWYWx1ZXNbaV0ubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRcdFx0aWYgKHBpdm90VmFsdWVzW2ldW2pdKSB7XHJcblx0XHRcdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgKi9cclxuXHRcdFx0XHRcdFx0XHRjbG9uZWRTZXRzW2ldW2pdID0gdGhpcy5nZXRDbG9uZWRQaXZvdFZhbHVlT2JqKFxyXG5cdFx0XHRcdFx0XHRcdFx0cGl2b3RWYWx1ZXNbaV1bal0gYXMgeyBba2V5OiBzdHJpbmddOiBPYmplY3QgfVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSAqL1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gY2xvbmVkU2V0cztcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0Q2xvbmVkUGl2b3RWYWx1ZU9iaihkYXRhOiB7IFtrZXk6IHN0cmluZ106IE9iamVjdCB9KToge1xyXG5cdFx0W2tleTogc3RyaW5nXTogT2JqZWN0O1xyXG5cdH0ge1xyXG5cdFx0bGV0IGtleVBvczogbnVtYmVyID0gMDtcclxuXHRcdGxldCBmcmFtZWRTZXQ6IGFueSA9IHt9O1xyXG5cdFx0aWYgKCEoZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB1bmRlZmluZWQpKSB7XHJcblx0XHRcdGxldCBmaWVsZHM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXMoZGF0YSk7XHJcblx0XHRcdHdoaWxlIChrZXlQb3MgPCBmaWVsZHMubGVuZ3RoKSB7XHJcblx0XHRcdFx0ZnJhbWVkU2V0W2ZpZWxkc1trZXlQb3NdXSA9IGRhdGFbZmllbGRzW2tleVBvc11dO1xyXG5cdFx0XHRcdGtleVBvcysrO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRmcmFtZWRTZXQgPSBkYXRhO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZyYW1lZFNldDtcclxuXHR9XHJcblxyXG5cdC8vI3JlZ2lvbiBGaWx0ZXJpbmcgdGhlIFRyZWVOb2Rlc1xyXG5cdHByaXZhdGUgc2VhcmNoTm9kZXMoYXJncykge1xyXG5cdFx0bGV0IF90ZXh0ID0gYXJncy5tYXNrZWRWYWx1ZTtcclxuXHRcdGxldCBwcmVkaWNhdHMgPSBbXSxcclxuXHRcdFx0X2FycmF5ID0gW10sXHJcblx0XHRcdF9maWx0ZXIgPSBbXTtcclxuXHRcdGlmIChfdGV4dCA9PSBcIlwiKSB7XHJcblx0XHRcdHRoaXMuY2hhbmdlRGF0YVNvdXJjZShcclxuXHRcdFx0XHQoKHRoaXMgYXMgYW55KS5maWVsZGxpc3RPYmoudHJlZVZpZXdNb2R1bGUgYXMgYW55KS5nZXRUcmVlRGF0YSgpXHJcblx0XHRcdCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRsZXQgcHJlZGljYXRlID0gbmV3IFByZWRpY2F0ZShcImNhcHRpb25cIiwgXCJjb250YWluc1wiLCBfdGV4dCwgdHJ1ZSk7XHJcblx0XHRcdGxldCBmaWx0ZXJlZExpc3QgPSBuZXcgRGF0YU1hbmFnZXIoXHJcblx0XHRcdFx0KCh0aGlzIGFzIGFueSkuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlIGFzIGFueSkuZ2V0VHJlZURhdGEoKVxyXG5cdFx0XHQpLmV4ZWN1dGVMb2NhbChuZXcgUXVlcnkoKS53aGVyZShwcmVkaWNhdGUpKTtcclxuXHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBmaWx0ZXJlZExpc3QubGVuZ3RoOyBqKyspIHtcclxuXHRcdFx0XHRfZmlsdGVyLnB1c2goZmlsdGVyZWRMaXN0W2pdW1wiaWRcIl0pO1xyXG5cdFx0XHRcdGxldCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJJdGVtcyhcclxuXHRcdFx0XHRcdGZpbHRlcmVkTGlzdFtqXSxcclxuXHRcdFx0XHRcdChcclxuXHRcdFx0XHRcdFx0KHRoaXMgYXMgYW55KS5maWVsZGxpc3RPYmoudHJlZVZpZXdNb2R1bGUgYXMgYW55XHJcblx0XHRcdFx0XHQpLmdldFRyZWVEYXRhKClcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgZmlsdGVycy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRfYXJyYXkuaW5kZXhPZihmaWx0ZXJzW2ldKSA9PSAtMSAmJlxyXG5cdFx0XHRcdFx0XHRmaWx0ZXJzW2ldICE9IG51bGxcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRfYXJyYXkucHVzaChmaWx0ZXJzW2ldKTtcclxuXHRcdFx0XHRcdFx0cHJlZGljYXRzLnB1c2goXHJcblx0XHRcdFx0XHRcdFx0bmV3IFByZWRpY2F0ZShcImlkXCIsIFwiZXF1YWxcIiwgZmlsdGVyc1tpXSwgZmFsc2UpXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChwcmVkaWNhdHMubGVuZ3RoID09IDApIHtcclxuXHRcdFx0XHR0aGlzLmNoYW5nZURhdGFTb3VyY2UoW10pO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGxldCBxdWVyeSA9IG5ldyBRdWVyeSgpLndoZXJlKFByZWRpY2F0ZS5vcihwcmVkaWNhdHMpKTtcclxuXHRcdFx0XHRsZXQgbmV3TGlzdCA9IG5ldyBEYXRhTWFuYWdlcihcclxuXHRcdFx0XHRcdChcclxuXHRcdFx0XHRcdFx0KHRoaXMgYXMgYW55KS5maWVsZGxpc3RPYmoudHJlZVZpZXdNb2R1bGUgYXMgYW55XHJcblx0XHRcdFx0XHQpLmdldFRyZWVEYXRhKClcclxuXHRcdFx0XHQpLmV4ZWN1dGVMb2NhbChxdWVyeSk7XHJcblx0XHRcdFx0dGhpcy5jaGFuZ2VEYXRhU291cmNlKG5ld0xpc3QpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvL0ZpbmQgdGhlIFBhcmVudCBOb2RlcyBmb3IgY29ycmVzcG9uZGluZyBjaGlsZHNcclxuXHRwdWJsaWMgZ2V0RmlsdGVySXRlbXMoZkxpc3QsIGxpc3QpIHtcclxuXHRcdGxldCBub2RlcyA9IFtdO1xyXG5cdFx0bm9kZXMucHVzaChmTGlzdFtcImlkXCJdKTtcclxuXHRcdGxldCBxdWVyeTIgPSBuZXcgUXVlcnkoKS53aGVyZShcImlkXCIsIFwiZXF1YWxcIiwgZkxpc3RbXCJwaWRcIl0sIGZhbHNlKTtcclxuXHRcdGxldCBmTGlzdDEgPSBuZXcgRGF0YU1hbmFnZXIobGlzdCkuZXhlY3V0ZUxvY2FsKHF1ZXJ5Mik7XHJcblx0XHRpZiAoZkxpc3QxLmxlbmd0aCAhPSAwKSB7XHJcblx0XHRcdGxldCBwTm9kZSA9IHRoaXMuZ2V0RmlsdGVySXRlbXMoZkxpc3QxWzBdLCBsaXN0KTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBwTm9kZS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGlmIChub2Rlcy5pbmRleE9mKHBOb2RlW2ldKSA9PSAtMSAmJiBwTm9kZVtpXSAhPSBudWxsKVxyXG5cdFx0XHRcdFx0bm9kZXMucHVzaChwTm9kZVtpXSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIG5vZGVzO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG5vZGVzO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGNyZWF0ZWQoYXJnczogYW55KSB7XHJcblx0XHRpZiAodGhpcy5maWVsZGxpc3RPYmogJiYgIXRoaXMuZmllbGRsaXN0T2JqLmVuZ2luZU1vZHVsZS5maWVsZHMpIHtcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmouZW5naW5lTW9kdWxlLmZpZWxkcyA9IFtdO1xyXG5cdFx0fVxyXG5cdFx0bGV0IHNlYXJjaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcclxuXHRcdHNlYXJjaC5pZCA9IFwicGl2b3RTZWFyY2hCb3hcIiArIHRoaXMuZmllbGRsaXN0T2JqLmVsZW1lbnQuaWQ7XHJcblx0XHRsZXQgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG5cdFx0XHRcIiNcIiArIHRoaXMuZmllbGRsaXN0T2JqLmVsZW1lbnQuaWQgKyBcIl9Db250YWluZXIgLmUtZmllbGQtdGFibGVcIlxyXG5cdFx0KTtcclxuXHRcdGlmIChlbCkgZWwucHJlcGVuZChzZWFyY2gpO1xyXG5cdFx0dGhpcy5waXZvdFNlYXJjaEJveCA9IG5ldyBNYXNrZWRUZXh0Qm94KHtcclxuXHRcdFx0cGxhY2Vob2xkZXI6IHRoaXMudHJhbnNsYXRpb24uU0VBUkNIIHx8IFwiLlNFQVJDSFwiLFxyXG5cdFx0XHRjc3NDbGFzczogXCJwaXZvdC1zZWFyY2hcIixcclxuXHRcdFx0Y2hhbmdlOiB0aGlzLnNlYXJjaE5vZGVzLmJpbmQodGhpcyksXHJcblx0XHR9KTtcclxuXHRcdHRoaXMucGl2b3RTZWFyY2hCb3guYXBwZW5kVG8oXHJcblx0XHRcdFwiI3Bpdm90U2VhcmNoQm94XCIgKyB0aGlzLmZpZWxkbGlzdE9iai5lbGVtZW50LmlkXHJcblx0XHQpO1xyXG5cclxuXHRcdC8vIE5FVyBEYXNoYm9hcmQg54K55Ye7XCJhcHBseVwi5pe277yM6K+35rGC5paw5pWw5o2uXHJcblx0XHRsZXQgYXBwbHlCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmouZWxlbWVudC5pZCArIFwiX0RlZmVyVXBkYXRlQnV0dG9uMVwiXHJcblx0XHQpO1xyXG5cclxuXHRcdGFwcGx5QnRuICYmXHJcblx0XHRcdGFwcGx5QnRuLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5wYWdlTG9hZGluZyA9IHRydWU7XHJcblx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXREYXRhQnlQb3J0bGV0c05ldyhcclxuXHRcdFx0XHRcdFt0aGlzLnBvcnRsZXRdLFxyXG5cdFx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBhZ2VMb2FkaW5nID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdHRoaXMuUGl2b3RfRGF0YSA9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmRQb3JsZXRzU2VydmljZS5nZXRSZXN1bHRCeURhdGFUYWJsZShcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMucG9ydGxldCxcclxuXHRcdFx0XHRcdFx0XHRcdGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdFx0ZmFsc2UsXHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmRhc2hib2FyZC5pZFxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdHRoaXMucGl2b3RPYmouZGF0YVNvdXJjZVNldHRpbmdzLmRhdGFTb3VyY2UgPVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuUGl2b3RfRGF0YTtcclxuXHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLlBpdm90X0RhdGEpIHtcclxuXHRcdFx0XHRcdFx0XHRsZXQgZ3JvdXBzID0gdGhpcy5jb25maWcueGF4aXMuZ3JvdXBzO1xyXG5cdFx0XHRcdFx0XHRcdGxldCByb3dzID0gW107XHJcblx0XHRcdFx0XHRcdFx0aWYgKGdyb3Vwcykge1xyXG5cdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgZ2l0ZW0gb2YgZ3JvdXBzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGZpZWxkID0gdGhpcy5jb25maWdGaWVsZHMuZmlsdGVyKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdChlbCkgPT4gZWwuY29sTmFtZSA9PT0gZ2l0ZW0ubmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoZmllbGQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGdpdGVtLnNob3dTdWJUb3RhbHMgPVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0uc2hvd1N1YlRvdGFscztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRnaXRlbS5jYXB0aW9uID1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdWYWx1ZSB8fFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy50cmFuc2xhdGlvbltcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZmllbGRbMF0ubGFuZ0NvZGVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdF0gfHxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpZWxkWzBdLmxhbmdDb2RlIHx8XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRnaXRlbS5jYXB0aW9uO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJvd3MucHVzaChnaXRlbSk7XHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHRoaXMuUGl2b3RfRGF0YS5tYXAoKGRhdGEpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChkYXRhW3Jvdy5uYW1lXSA9PT0gXCJcIikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGFbcm93Lm5hbWVdID0gXCJudWxsXCI7XHJcblx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmICh0aGlzLnBpdm90T2JqKSB0aGlzLnBpdm90T2JqLnJlZnJlc2hEYXRhKCk7XHJcblx0XHRcdFx0XHRcdHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0bnVsbCxcclxuXHRcdFx0XHRcdGZhbHNlLFxyXG5cdFx0XHRcdFx0dGhpcy5kYXNoYm9hcmQsXHJcblx0XHRcdFx0XHRmYWxzZVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRcclxuXHRcdC8vIOeCueWHu1wiY2FuY2VsXCLml7bvvIzmgaLlpI3ljp/lp4vmlbDmja5cclxuXHRcdGxldCBjYW5jZWxCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuXHRcdFx0dGhpcy5maWVsZGxpc3RPYmouZWxlbWVudC5pZCArIFwiX0RlZmVyVXBkYXRlQnV0dG9uMlwiXHJcblx0XHQpO1xyXG5cclxuXHRcdGNhbmNlbEJ0biAmJlxyXG5cdFx0XHRjYW5jZWxCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcclxuXHRcdFx0XHR0aGlzLnBpdm90T2JqLmRhdGFTb3VyY2VTZXR0aW5ncy5kYXRhU291cmNlID1cclxuXHRcdFx0XHRcdFsuLi50aGlzLlBpdm90X0RhdGFdO1xyXG5cdFx0XHRcdGlmICh0aGlzLnBpdm90T2JqKSB0aGlzLnBpdm90T2JqLnJlZnJlc2hEYXRhKCk7XHJcblx0XHRcdFx0dGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcblx0XHRcdFx0dGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0XHR9KTtcdFx0XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZmllbGRMaXN0UmVmcmVzaGVkKGFyZ3MpIHtcclxuXHRcdGlmICh0aGlzLnBpdm90U2VhcmNoQm94KSB7XHJcblx0XHRcdHRoaXMucGl2b3RTZWFyY2hCb3gudmFsdWUgPSBcIlwiO1xyXG5cdFx0XHR0aGlzLmNoYW5nZURhdGFTb3VyY2UoXHJcblx0XHRcdFx0KHRoaXMuZmllbGRsaXN0T2JqLnRyZWVWaWV3TW9kdWxlIGFzIGFueSkuZ2V0VHJlZURhdGEoKVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBjaGFuZ2VEYXRhU291cmNlKGRhdGEpIHtcclxuXHRcdGxldCBmaWVsZFRhYmxlID0gKHRoaXMgYXMgYW55KS5maWVsZGxpc3RPYmoudHJlZVZpZXdNb2R1bGUuZmllbGRUYWJsZTtcclxuXHRcdGlmIChmaWVsZFRhYmxlKSB7XHJcblx0XHRcdGZpZWxkVGFibGUuZmllbGRzID0ge1xyXG5cdFx0XHRcdGRhdGFTb3VyY2U6IGRhdGEsXHJcblx0XHRcdFx0aWQ6IFwiaWRcIixcclxuXHRcdFx0XHR0ZXh0OiBcImNhcHRpb25cIixcclxuXHRcdFx0XHRpc0NoZWNrZWQ6IFwiaXNTZWxlY3RlZFwiLFxyXG5cdFx0XHRcdHBhcmVudElEOiBcInBpZFwiLFxyXG5cdFx0XHRcdGljb25Dc3M6IFwic3ByaXRlQ3NzQ2xhc3NcIixcclxuXHRcdFx0fTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8vU01QMi0yOTU3IGZpeCB0aGUgZGF0ZSBpc3N1ZSBvbiB0aGUgcmF3IGRhdGFcclxuXHRwdWJsaWMgZHJpbGxUaHJvdWdoKGFyZ3M6IERyaWxsVGhyb3VnaEV2ZW50QXJncykge1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmdyaWRDb2x1bW5zLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGRhdGEgPSB0aGlzLmNvbmZpZ0ZpZWxkcy5maWx0ZXIoXHJcblx0XHRcdFx0KGVsKSA9PiBlbC5jb2xOYW1lID09PSBhcmdzLmdyaWRDb2x1bW5zW2ldLmZpZWxkXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdGRhdGFbMF0uZGF0YVR5cGUgPT09IFwiZGF0ZVwiIHx8XHJcblx0XHRcdFx0XHRkYXRhWzBdLmRhdGFUeXBlID09PSBcImRhdGV0aW1lXCJcclxuXHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdGFyZ3MuZ3JpZENvbHVtbnNbaV0udHlwZSA9IFwiZGF0ZVwiO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHQvLyNlbmRyZWdpb25cclxuXHJcblx0cHJpdmF0ZSBzZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKG9iaiwgZGF0YSwgY29kZSkge1xyXG5cdFx0aWYgKGNvZGUgPT09IC0xKSB7XHJcblx0XHRcdG9iai5zdHlsZS5jb2xvciA9IGRhdGEubmVnYUZvbnRDb2xvcjtcclxuXHRcdFx0b2JqLnN0eWxlLmZvbnRGYW1pbHkgPSBkYXRhLm5lZ2FGb250RmFtaWx5VmFsdWU7XHJcblx0XHRcdG9iai5zdHlsZS5mb250U2l6ZSA9IGRhdGEubmVnYUZvbnRTaXplVmFsdWU7XHJcblx0XHRcdG9iai5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBkYXRhLm5lZ2FCYWNrZ3JvdW5kQ29sb3I7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRvYmouc3R5bGUuY29sb3IgPSBkYXRhLmZvbnRDb2xvcjtcclxuXHRcdFx0b2JqLnN0eWxlLmZvbnRGYW1pbHkgPSBkYXRhLmZvbnRGYW1pbHlWYWx1ZTtcclxuXHRcdFx0b2JqLnN0eWxlLmZvbnRTaXplID0gZGF0YS5mb250U2l6ZVZhbHVlO1xyXG5cdFx0XHRvYmouc3R5bGUuYmFja2dyb3VuZENvbG9yID0gZGF0YS5iYWNrZ3JvdW5kQ29sb3I7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNldENvbXBhcmVDb25kaXRpb25hbChcclxuXHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0ZGF0YVxyXG5cdCkge1xyXG5cdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTEpID09IDApIHtcclxuXHRcdFx0c3dpdGNoIChkYXRhLmNvbXBhcmVTZWxlY3QpIHtcclxuXHRcdFx0XHRjYXNlIFwiTGVzc1RoYW5cIjogLy8g5bCP5LqOXHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuT3JFcXVhbFRvXCI6IC8vIOWwj+S6juetieS6jlxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJHcmVhdGVyVGhhblwiOiAvLyDlpKfkuo5cclxuXHRcdFx0XHRjYXNlIFwiR3JlYXRlclRoYW5PckVxdWFsVG9cIjogLy8g5aSn5LqO562J5LqOXHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiTm90RXF1YWxzXCI6IC8vIOS4jeetieS6jlxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJCZXR3ZWVuXCI6IC8vIHZhbHVlMTw9IHZhbCA8PXZhbHVlMlxyXG5cdFx0XHRcdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTIpID09PSAxKSB7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRkYXRhLmNvbXBhcmVWYWx1ZTJcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiTm90QmV0d2VlblwiOiAvLyB2YWwgPj0gdmFsdWUyLCB2YWwgPD0gdmFsdWUxXHJcblx0XHRcdFx0XHRpZiAoTWF0aC5zaWduKGRhdGEuY29tcGFyZVZhbHVlMikgPT09IDEpIHtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEuY29tcGFyZVZhbHVlMlxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoTWF0aC5zaWduKGRhdGEuY29tcGFyZVZhbHVlMSkgPT09IDEpIHtcclxuXHRcdFx0c3dpdGNoIChkYXRhLmNvbXBhcmVTZWxlY3QpIHtcclxuXHRcdFx0XHRjYXNlIFwiTGVzc1RoYW5cIjogLy8g5bCP5LqOXHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuT3JFcXVhbFRvXCI6IC8vIOWwj+S6juetieS6jlxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IE51bWJlcihkYXRhLmNvbXBhcmVWYWx1ZTEpO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkxlc3NUaGFuXCI7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiR3JlYXRlclRoYW5cIjogLy8g5aSn5LqOXHJcblx0XHRcdFx0Y2FzZSBcIkdyZWF0ZXJUaGFuT3JFcXVhbFRvXCI6IC8vIOWkp+S6juetieS6jlxyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKGRhdGEuY29tcGFyZVZhbHVlMSk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJFcXVhbHNcIjogLy8g562J5LqOXHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBOdW1iZXIoZGF0YS5jb21wYXJlVmFsdWUxKTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkVxdWFsc1wiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJOb3RFcXVhbHNcIjogLy8g5LiN562J5LqOXHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gTnVtYmVyKGRhdGEuY29tcGFyZVZhbHVlMSk7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHQvLyBwdXNo6L+b5pWw57uEXHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBOdW1iZXIoZGF0YS5jb21wYXJlVmFsdWUxKTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkdyZWF0ZXJUaGFuXCI7XHJcblx0XHRcdFx0XHQvLyBwdXNo6L+b5pWw57uEXHJcblxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiTGVzc1RoYW5PckVxdWFsVG9cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiQmV0d2VlblwiOiAvLyB2YWx1ZTE8PSB2YWwgPD12YWx1ZTJcclxuXHRcdFx0XHRcdGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUyKSA9PT0gMSkge1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBOdW1iZXIoXHJcblx0XHRcdFx0XHRcdFx0ZGF0YS5jb21wYXJlVmFsdWUxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IE51bWJlcihcclxuXHRcdFx0XHRcdFx0XHRkYXRhLmNvbXBhcmVWYWx1ZTJcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiTm90QmV0d2VlblwiOiAvLyB2YWwgPj0gdmFsdWUyLCB2YWwgPD0gdmFsdWUxXHJcblx0XHRcdFx0XHRpZiAoTWF0aC5zaWduKGRhdGEuY29tcGFyZVZhbHVlMikgPT09IDEpIHtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEuY29tcGFyZVZhbHVlMVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHRcdC8vIHB1c2jov5vmlbDnu4RcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gTnVtYmVyKFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEuY29tcGFyZVZhbHVlMlxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0XHQvLyBwdXNo6L+b5pWw57uEXHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChNYXRoLnNpZ24oZGF0YS5jb21wYXJlVmFsdWUxKSA9PT0gLTEpIHtcclxuXHRcdFx0c3dpdGNoIChkYXRhLmNvbXBhcmVTZWxlY3QpIHtcclxuXHRcdFx0XHRjYXNlIFwiTGVzc1RoYW5cIjogLy8g5bCP5LqOXHJcblx0XHRcdFx0Y2FzZSBcIkxlc3NUaGFuT3JFcXVhbFRvXCI6IC8vIOWwj+S6juetieS6jlxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gZGF0YS5jb21wYXJlU2VsZWN0O1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIkdyZWF0ZXJUaGFuXCI6IC8vIOWkp+S6jlxyXG5cdFx0XHRcdGNhc2UgXCJHcmVhdGVyVGhhbk9yRXF1YWxUb1wiOiAvLyDlpKfkuo7nrYnkuo5cclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhbk9yRXF1YWxUb1wiO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gZGF0YS5jb21wYXJlVmFsdWUxO1xyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIkJldHdlZW5cIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiRXF1YWxzXCI6IC8vIOetieS6jlxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJFcXVhbHNcIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRjYXNlIFwiTm90RXF1YWxzXCI6IC8vIOS4jeetieS6jlxyXG5cdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJOb3RFcXVhbHNcIjtcclxuXHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IDA7XHJcblx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJCZXR3ZWVuXCI6IC8vIHZhbHVlMTw9IHZhbCA8PXZhbHVlMlxyXG5cdFx0XHRcdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTIpKSB7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gZGF0YS5jb21wYXJlVmFsdWUxO1xyXG5cdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiQmV0d2VlblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUxID0gMDtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmoudmFsdWUyID0gZGF0YS5jb21wYXJlVmFsdWUyO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdDFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTIgPSBkYXRhLmNvbXBhcmVWYWx1ZTI7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJCZXR3ZWVuXCI7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2V0Rm9udFNldHRpbmdDb25kaXRpb25hbChcclxuXHRcdFx0XHRcdFx0XHRuZWdhQ29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQtMVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSBcIk5vdEJldHdlZW5cIjogLy8gdmFsID49IHZhbHVlMiwgdmFsIDw9IHZhbHVlMVxyXG5cdFx0XHRcdFx0aWYgKE1hdGguc2lnbihkYXRhLmNvbXBhcmVWYWx1ZTIpKSB7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSBkYXRhLmNvbXBhcmVWYWx1ZTE7XHJcblx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJMZXNzVGhhblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0LTFcclxuXHRcdFx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IGRhdGEuY29tcGFyZVZhbHVlMjtcclxuXHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmouY29uZGl0aW9ucyA9IFwiR3JlYXRlclRoYW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdGNvbmRpdGlvbmFsRm9ybWF0T2JqLFxyXG5cdFx0XHRcdFx0XHRcdGRhdGEsXHJcblx0XHRcdFx0XHRcdFx0MVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMSA9IGRhdGEuY29tcGFyZVZhbHVlMTtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLnZhbHVlMiA9IGRhdGEuY29tcGFyZVZhbHVlMjtcclxuXHRcdFx0XHRcdFx0bmVnYUNvbmRpdGlvbmFsRm9ybWF0T2JqLmNvbmRpdGlvbnMgPSBcIk5vdEJldHdlZW5cIjtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXRGb250U2V0dGluZ0NvbmRpdGlvbmFsKFxyXG5cdFx0XHRcdFx0XHRcdG5lZ2FDb25kaXRpb25hbEZvcm1hdE9iaixcclxuXHRcdFx0XHRcdFx0XHRkYXRhLFxyXG5cdFx0XHRcdFx0XHRcdC0xXHJcblx0XHRcdFx0XHRcdCk7XHJcblxyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai52YWx1ZTEgPSAwO1xyXG5cdFx0XHRcdFx0XHRjb25kaXRpb25hbEZvcm1hdE9iai5jb25kaXRpb25zID0gXCJHcmVhdGVyVGhhblwiO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnNldEZvbnRTZXR0aW5nQ29uZGl0aW9uYWwoXHJcblx0XHRcdFx0XHRcdFx0Y29uZGl0aW9uYWxGb3JtYXRPYmosXHJcblx0XHRcdFx0XHRcdFx0ZGF0YSxcclxuXHRcdFx0XHRcdFx0XHQxXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0UXVhcnRlclZhbHVlKGZvcm1hdCwgZGF0ZSwgcXVhcnRlcikge1xyXG5cdFx0bGV0IHllYXI6IGFueTtcclxuXHRcdHN3aXRjaCAoZm9ybWF0KSB7XHJcblx0XHRcdGNhc2UgXCJRMSAyMDIxXCI6XHJcblx0XHRcdFx0eWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuXHRcdFx0XHRyZXR1cm4gXCJRXCIgKyBxdWFydGVyICsgXCIgXCIgKyB5ZWFyO1xyXG5cdFx0XHRjYXNlIFwiUTEgMjFcIjpcclxuXHRcdFx0XHR5ZWFyID0gKGRhdGUgYXMgYW55KS5nZXRZZWFyKCkgLSAxMDA7XHJcblx0XHRcdFx0cmV0dXJuIFwiUVwiICsgcXVhcnRlciArIFwiIFwiICsgeWVhcjtcclxuXHRcdFx0Y2FzZSBcIjIwMjEgUTFcIjpcclxuXHRcdFx0XHR5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xyXG5cdFx0XHRcdHJldHVybiB5ZWFyICsgXCIgXCIgKyBcIlFcIiArIHF1YXJ0ZXI7XHJcblx0XHRcdGNhc2UgXCIyMSBRMVwiOlxyXG5cdFx0XHRcdHllYXIgPSAoZGF0ZSBhcyBhbnkpLmdldFllYXIoKSAtIDEwMDtcclxuXHRcdFx0XHRyZXR1cm4geWVhciArIFwiIFwiICsgXCJRXCIgKyBxdWFydGVyO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Y3VzdG9taXNlQ2VsbChhcmdzOiBRdWVyeUNlbGxJbmZvRXZlbnRBcmdzKSB7XHJcblx0XHRpZiAoYXJncy5jb2x1bW4udHlwZSA9PT0gXCJkYXRlXCIgfHwgYXJncy5jb2x1bW4udHlwZSA9PT0gXCJkYXRlVGltZVwiKSB7XHJcblx0XHRcdGNvbnN0IHsgZmllbGQgfSA9IGFyZ3MuY29sdW1uO1xyXG5cdFx0XHRpZiAoIWFyZ3MuZGF0YVtmaWVsZF0pIHtcclxuXHRcdFx0XHRhcmdzLmNvbHVtbi50eXBlID0gXCJzdHJpbmdcIjtcclxuXHRcdFx0XHRhcmdzLmNvbHVtbi5mb3JtYXQgPSBcIlwiO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcGFyYW0gdGltZUFycmF5IOaVsOe7hOWvueixoSBbe1wiZGF0ZVwiOlwiMjAyMS0wMS0wMVwifSx7XCJkYXRlXCI6XCIyMDIxLTAyLTAxXCJ9XVxyXG5cdCAqIEBwYXJhbSBlbmREYXRlIOaIquiHs+aXtumXtFxyXG5cdCAqIEBwYXJhbSBpbnRlcnZhbCDml7bpl7Tpl7TpmpQgeWVhciAvIHF1YXJ0ZXIgLyBtb250aFxyXG5cdCAqIEBwYXJhbSB0aW1lS2V5IOaXtumXtOWtl+auteWQjSBkYXRlXHJcblx0ICogQHJldHVybnMg5YiS5YiG5ZCO55qE5pe26Ze05YiG57uE5a+56LGhXHJcblx0ICovXHJcblx0Z2V0VGltZVJhbmdlcyh0aW1lQXJyYXksIGVuZERhdGUsIGludGVydmFsLCB0aW1lS2V5KSB7XHJcblx0XHQvLyDlsIbml7bpl7TlrZfnrKbkuLLovazmjaLkuLogbW9tZW50IOWvueixoVxyXG5cdFx0Y29uc3QgZGF0ZXMgPSB0aW1lQXJyYXkubWFwKChpdGVtKSA9PiBtb21lbnQoaXRlbVt0aW1lS2V5IHx8IFwiZGF0ZVwiXSkpO1xyXG5cclxuXHRcdC8vIOWIhumalOesplxyXG5cdFx0Y29uc3QgZGVsaW1pdGVyID0gXCItXCI7XHJcblxyXG5cdFx0Ly8g5om+5Yiw5pyA5bCP5pe26Ze05ZKM5pyA5aSn5pe26Ze0XHJcblx0XHRjb25zdCBtaW5EYXRlID0gbW9tZW50Lm1pbihkYXRlcyk7XHJcblx0XHRjb25zdCBtYXhEYXRlID0gbW9tZW50KGVuZERhdGUpO1xyXG5cclxuXHRcdC8vIOWIneWni+WMlue7k+aenOWvueixoVxyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge307XHJcblxyXG5cdFx0Ly8g5qC55o2u5YWl5Y+C6L+b6KGM5YiS5YiGXHJcblx0XHRpZiAoaW50ZXJ2YWwgPT09IFwieWVhclwiKSB7XHJcblx0XHRcdGNvbnN0IHN0YXJ0WWVhciA9IG1pbkRhdGUueWVhcigpO1xyXG5cdFx0XHRjb25zdCBlbmRZZWFyID0gbWF4RGF0ZS55ZWFyKCk7XHJcblxyXG5cdFx0XHRmb3IgKGxldCB5ZWFyID0gc3RhcnRZZWFyOyB5ZWFyIDw9IGVuZFllYXI7IHllYXIrKykge1xyXG5cdFx0XHRcdHJlc3VsdFt5ZWFyXSA9IFtdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRkYXRlcy5mb3JFYWNoKChkYXRlLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHllYXIgPSBkYXRlLnllYXIoKTtcclxuXHRcdFx0XHRyZXN1bHRbeWVhcl0ucHVzaCh0aW1lQXJyYXlbaW5kZXhdKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9IGVsc2UgaWYgKGludGVydmFsID09PSBcInF1YXJ0ZXJcIikge1xyXG5cdFx0XHQvLyDlrZjlgqjlraPluqblrZfnrKbkuLJcclxuXHRcdFx0Y29uc3QgcXVhcnRlcnMgPSBbXTtcclxuXHJcblx0XHRcdC8vIOmAkOS4gOmBjeWOhuavj+S4quWto+W6plxyXG5cdFx0XHRmb3IgKFxyXG5cdFx0XHRcdGxldCBjdXJyZW50RGF0ZSA9IG1pbkRhdGUuY2xvbmUoKTtcclxuXHRcdFx0XHRjdXJyZW50RGF0ZS5pc1NhbWVPckJlZm9yZShtYXhEYXRlKTtcclxuXHRcdFx0XHRjdXJyZW50RGF0ZS5hZGQoMywgXCJtb250aHNcIilcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0Y29uc3QgeWVhciA9IGN1cnJlbnREYXRlLnllYXIoKTtcclxuXHRcdFx0XHRjb25zdCBxdWFydGVyID0gTWF0aC5jZWlsKChjdXJyZW50RGF0ZS5tb250aCgpICsgMSkgLyAzKTsgLy8g6K6h566X5a2j5bqmXHJcblx0XHRcdFx0cXVhcnRlcnMucHVzaChgJHt5ZWFyfSR7ZGVsaW1pdGVyfVEke3F1YXJ0ZXJ9YCk7IC8vIOagvOW8j+WMluW5tua3u+WKoOWIsOaVsOe7hFxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyDovpPlh7rmiYDmnInlraPluqZcclxuXHRcdFx0cXVhcnRlcnMuZm9yRWFjaCgocXVhcnRlciwgaW5kZXgpID0+IHtcclxuXHRcdFx0XHRyZXN1bHRbcXVhcnRlcl0gPSBbXTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRkYXRlcy5mb3JFYWNoKChkYXRlLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHllYXIgPSBkYXRlLnllYXIoKTtcclxuXHRcdFx0XHRjb25zdCBxdWFydGVyID0gZGF0ZS5xdWFydGVyKCk7IC8vIOiOt+WPluWto+W6plxyXG5cdFx0XHRcdGlmIChxdWFydGVyID09PSAxKVxyXG5cdFx0XHRcdFx0cmVzdWx0W3llYXIgKyBkZWxpbWl0ZXIgKyBcIlExXCJdLnB1c2godGltZUFycmF5W2luZGV4XSk7XHJcblx0XHRcdFx0ZWxzZSBpZiAocXVhcnRlciA9PT0gMilcclxuXHRcdFx0XHRcdHJlc3VsdFt5ZWFyICsgZGVsaW1pdGVyICsgXCJRMlwiXS5wdXNoKHRpbWVBcnJheVtpbmRleF0pO1xyXG5cdFx0XHRcdGVsc2UgaWYgKHF1YXJ0ZXIgPT09IDMpXHJcblx0XHRcdFx0XHRyZXN1bHRbeWVhciArIGRlbGltaXRlciArIFwiUTNcIl0ucHVzaCh0aW1lQXJyYXlbaW5kZXhdKTtcclxuXHRcdFx0XHRlbHNlIGlmIChxdWFydGVyID09PSA0KVxyXG5cdFx0XHRcdFx0cmVzdWx0W3llYXIgKyBkZWxpbWl0ZXIgKyBcIlE0XCJdLnB1c2godGltZUFycmF5W2luZGV4XSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIGlmIChpbnRlcnZhbCA9PT0gXCJtb250aFwiKSB7XHJcblx0XHRcdC8vIOWtmOWCqOaciOS7veWtl+espuS4slxyXG5cdFx0XHRjb25zdCBtb250aHMgPSBbXTtcclxuXHJcblx0XHRcdC8vIOmAkOS4gOmBjeWOhuavj+S4quaciFxyXG5cdFx0XHRmb3IgKFxyXG5cdFx0XHRcdGxldCBjdXJyZW50RGF0ZSA9IG1pbkRhdGUuY2xvbmUoKTtcclxuXHRcdFx0XHRjdXJyZW50RGF0ZS5pc1NhbWVPckJlZm9yZShtYXhEYXRlKTtcclxuXHRcdFx0XHRjdXJyZW50RGF0ZS5hZGQoMSwgXCJtb250aHNcIilcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0bW9udGhzLnB1c2goY3VycmVudERhdGUuZm9ybWF0KGBZWVlZJHtkZWxpbWl0ZXJ9TU1gKSk7IC8vIOagvOW8j+WMluW5tua3u+WKoOWIsOaVsOe7hFxyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvLyDovpPlh7rmiYDmnInmnIjku71cclxuXHRcdFx0bW9udGhzLmZvckVhY2goKG1vbnRoLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdHJlc3VsdFttb250aF0gPSBbXTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0XHRkYXRlcy5mb3JFYWNoKChkYXRlLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHllYXIgPSBkYXRlLnllYXIoKTtcclxuXHRcdFx0XHRjb25zdCBtb250aCA9IChkYXRlLm1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKTsgLy8gMC0xMVxyXG5cdFx0XHRcdHJlc3VsdFt5ZWFyICsgZGVsaW1pdGVyICsgbW9udGhdLnB1c2godGltZUFycmF5W2luZGV4XSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiDorqHnrpflh6DkvZXnrpfmlbDlubPmlrnmm7RcclxuXHQgKiBAcGFyYW0gdmFsdWVzIOaVsOe7hCBbMCwgMCwgMC4yNTc1XVxyXG5cdCAqIEByZXR1cm5zXHJcblx0ICovXHJcblx0Y2FsY3VsYXRlR3Jvd3RoUmF0ZSh2YWx1ZXMpIHtcclxuXHRcdGNvbnN0IHByb2R1Y3QgPSB2YWx1ZXMucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjICogKDEgKyB2YWwpLCAxKTtcclxuXHRcdGlmIChwcm9kdWN0ID49IDApIHtcclxuXHRcdFx0cmV0dXJuIE1hdGgucG93KHByb2R1Y3QsIDEgLyB2YWx1ZXMubGVuZ3RoKSAtIDE7XHJcblx0XHR9IGVsc2UgaWYgKHByb2R1Y3QgPCAwKSB7XHJcblx0XHRcdGlmICh2YWx1ZXMubGVuZ3RoICUgMiA9PSAwKSB7XHJcblx0XHRcdFx0cmV0dXJuIG51bGw7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMubnRocm9vdChwcm9kdWN0LCB2YWx1ZXMubGVuZ3RoKSAtIDE7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblx0bnRocm9vdCh4LCBuKSB7XHJcblx0XHRsZXQgbmcgPSBuICUgMjtcclxuXHRcdGlmIChuZyA9PSAxIHx8IHggPCAwKSB4ID0gLXg7XHJcblx0XHR2YXIgciA9IE1hdGgucG93KHgsIDEgLyBuKTtcclxuXHRcdG4gPSBNYXRoLnBvdyhyLCBuKTtcclxuXHJcblx0XHRpZiAoTWF0aC5hYnMoeCAtIG4pIDwgMSAmJiB4ID4gMCA9PT0gbiA+IDApIHJldHVybiBuZyA/IC1yIDogcjtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIOagh+WHhuWBj+W3rlxyXG5cdCAqIEBwYXJhbSB2YWx1ZXMg5pWw57uEIFswLCAwLCAtMC40Nzc1XVxyXG5cdCAqIEByZXR1cm5zIDAuMjc1Njg0NzUzNTM4MDQ2M1xyXG5cdCAqL1xyXG5cdGNhbGN1bGF0ZVN0YW5kYXJkRGV2aWF0aW9uKHZhbHVlcykge1xyXG5cdFx0Y29uc3QgbiA9IHZhbHVlcy5sZW5ndGg7XHJcblxyXG5cdFx0Ly8g5qOA5p+l5pWw5o2u54K55pWw6YePXHJcblx0XHRpZiAobiA8IDIpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwi6Iez5bCR6ZyA6KaB5Lik5Liq5pWw5o2u54K55p2l6K6h566X5qC35pys5qCH5YeG5YGP5beuXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIOiuoeeul+Wdh+WAvFxyXG5cdFx0Y29uc3QgbWVhbiA9IHZhbHVlcy5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKyB2YWwsIDApIC8gbjtcclxuXHJcblx0XHQvLyDorqHnrpfmlrnlt65cclxuXHRcdGNvbnN0IHZhcmlhbmNlID1cclxuXHRcdFx0dmFsdWVzLnJlZHVjZSgoYWNjLCB2YWwpID0+IGFjYyArIE1hdGgucG93KHZhbCAtIG1lYW4sIDIpLCAwKSAvXHJcblx0XHRcdChuIC0gMSk7XHJcblxyXG5cdFx0Ly8g6L+U5Zue5qCH5YeG5YGP5beuXHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KHZhcmlhbmNlKTtcclxuXHR9XHJcbn1cclxuIl19
|