@coreui/angular-pro 5.0.0-alpha.13 → 5.0.0-alpha.15
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/esm2022/lib/accordion/accordion/accordion.component.mjs +22 -16
- package/esm2022/lib/alert/alert.component.mjs +30 -38
- package/esm2022/lib/breadcrumb/breadcrumb-item/breadcrumb-item.component.mjs +7 -6
- package/esm2022/lib/breadcrumb/breadcrumb-router/breadcrumb-router.component.mjs +4 -4
- package/esm2022/lib/calendar/calendar/calendar.component.mjs +4 -4
- package/esm2022/lib/calendar/calendar-month/calendar-day.directive.mjs +1 -1
- package/esm2022/lib/calendar/calendar-month/calendar-month.component.mjs +4 -9
- package/esm2022/lib/calendar/calendar-navigation/calendar-navigation.component.mjs +4 -4
- package/esm2022/lib/carousel/carousel-control/carousel-control.component.mjs +3 -4
- package/esm2022/lib/carousel/carousel-indicators/carousel-indicators.component.mjs +3 -4
- package/esm2022/lib/carousel/carousel-item/carousel-item.component.mjs +7 -8
- package/esm2022/lib/collapse/collapse.directive.mjs +30 -40
- package/esm2022/lib/date-picker/date-picker.component.mjs +5 -7
- package/esm2022/lib/date-range-picker/date-range-picker/date-range-picker.component.mjs +5 -7
- package/esm2022/lib/dropdown/dropdown/dropdown.component.mjs +26 -34
- package/esm2022/lib/element-cover/element-cover.component.mjs +4 -4
- package/esm2022/lib/form/form-check/form-check-input.directive.mjs +10 -8
- package/esm2022/lib/loading-button/loading-button.component.mjs +15 -21
- package/esm2022/lib/multi-select/multi-select/multi-select.component.mjs +2 -2
- package/esm2022/lib/multi-select/multi-select-native-select/multi-select-native-select.component.mjs +8 -7
- package/esm2022/lib/multi-select/multi-select-optgroup/multi-select-optgroup.component.mjs +6 -12
- package/esm2022/lib/placeholder/placeholder.directive.mjs +11 -18
- package/esm2022/lib/shared/theme.directive.mjs +3 -2
- package/esm2022/lib/sidebar/sidebar/sidebar.component.mjs +34 -46
- package/esm2022/lib/sidebar/sidebar-brand/sidebar-brand.component.mjs +4 -4
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-label.component.mjs +4 -4
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-link.component.mjs +17 -18
- package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav.component.mjs +6 -11
- package/esm2022/lib/smart-pagination/smart-pagination.component.mjs +20 -24
- package/esm2022/lib/smart-table/smart-table/smart-table.component.mjs +4 -6
- package/esm2022/lib/smart-table/smart-table-filter/smart-table-filter.component.mjs +4 -4
- package/esm2022/lib/smart-table/smart-table-head/smart-table-head.component.mjs +7 -12
- package/esm2022/lib/smart-table/smart-table-items-per-page-selector/smart-table-items-per-page-selector.component.mjs +3 -5
- package/esm2022/lib/tabs/tab-content/tab-content.component.mjs +7 -7
- package/esm2022/lib/tabs/tab-content-ref.directive.mjs +12 -9
- package/esm2022/lib/tabs/tab-pane/tab-pane.component.mjs +5 -6
- package/esm2022/lib/time-picker/time-picker-roll-col/time-picker-roll-am-pm.component.mjs +9 -8
- package/esm2022/lib/time-picker/time-picker-roll-col/time-picker-roll-col.component.mjs +9 -8
- package/esm2022/lib/time-picker/time-picker.component.mjs +5 -7
- package/esm2022/lib/time-picker/time-picker.module.mjs +2 -4
- package/esm2022/lib/toast/toast/toast.component.mjs +11 -9
- package/esm2022/lib/toast/toast-header/toast-header.component.mjs +3 -4
- package/esm2022/lib/widget/widget-stat-a/widget-stat-a.component.mjs +4 -4
- package/esm2022/lib/widget/widget-stat-b/widget-stat-b.component.mjs +4 -4
- package/esm2022/lib/widget/widget-stat-c/widget-stat-c.component.mjs +5 -5
- package/esm2022/lib/widget/widget-stat-d/widget-stat-d.component.mjs +4 -4
- package/esm2022/lib/widget/widget-stat-e/widget-stat-e.component.mjs +4 -4
- package/esm2022/lib/widget/widget-stat-f/widget-stat-f.component.mjs +4 -4
- package/fesm2022/coreui-angular-pro.mjs +313 -363
- package/fesm2022/coreui-angular-pro.mjs.map +1 -1
- package/lib/accordion/accordion/accordion.component.d.ts +4 -6
- package/lib/alert/alert.component.d.ts +8 -12
- package/lib/breadcrumb/breadcrumb-item/breadcrumb-item.component.d.ts +1 -0
- package/lib/carousel/carousel-item/carousel-item.component.d.ts +1 -2
- package/lib/collapse/collapse.directive.d.ts +13 -13
- package/lib/dropdown/dropdown/dropdown.component.d.ts +8 -12
- package/lib/form/form-check/form-check-input.directive.d.ts +4 -3
- package/lib/loading-button/loading-button.component.d.ts +4 -5
- package/lib/multi-select/multi-select-native-select/multi-select-native-select.component.d.ts +3 -1
- package/lib/multi-select/multi-select-optgroup/multi-select-optgroup.component.d.ts +2 -5
- package/lib/placeholder/placeholder.directive.d.ts +3 -7
- package/lib/sidebar/sidebar/sidebar.component.d.ts +13 -11
- package/lib/smart-pagination/smart-pagination.component.d.ts +4 -8
- package/lib/smart-table/smart-table-head/smart-table-head.component.d.ts +1 -0
- package/lib/tabs/tab-content/tab-content.component.d.ts +1 -0
- package/lib/tabs/tab-content-ref.directive.d.ts +4 -2
- package/lib/time-picker/time-picker-roll-col/time-picker-roll-am-pm.component.d.ts +2 -0
- package/lib/time-picker/time-picker-roll-col/time-picker-roll-col.component.d.ts +2 -0
- package/lib/toast/toast/toast.component.d.ts +3 -2
- package/package.json +1 -1
|
@@ -412,7 +412,7 @@ export class MultiSelectComponent {
|
|
|
412
412
|
return `${this.selectedOptions.length} ${this.selectionTypeCounterText}`;
|
|
413
413
|
}
|
|
414
414
|
get counterTextType() {
|
|
415
|
-
return typeof this.selectionTypeCounterTextPluralMap ??
|
|
415
|
+
return typeof (this.selectionTypeCounterTextPluralMap ?? this.selectionTypeCounterText);
|
|
416
416
|
}
|
|
417
417
|
;
|
|
418
418
|
get counterPlaceholderText() {
|
|
@@ -1252,4 +1252,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
|
|
|
1252
1252
|
type: HostListener,
|
|
1253
1253
|
args: ['click', ['$event']]
|
|
1254
1254
|
}] } });
|
|
1255
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmV1aS1hbmd1bGFyL3NyYy9saWIvbXVsdGktc2VsZWN0L211bHRpLXNlbGVjdC9tdWx0aS1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9tdWx0aS1zZWxlY3QvbXVsdGktc2VsZWN0L211bHRpLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsZ0JBQWdCLEVBRWhCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxlQUFlLEVBSWYsTUFBTSxFQUdOLE1BQU0sRUFHTixTQUFTLEVBQ1QsWUFBWSxFQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRyxPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBbUIsZUFBZSxFQUE2QixNQUFNLG1CQUFtQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxlQUFlLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RyxPQUFPLEVBQUUsZUFBZSxFQUFjLElBQUksRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUs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QUFTO2dCQUt5QyxnQkFBZ0I7c0JBQTVFLGVBQWU7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUloQyxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0UsWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjO2dCQUMyQixRQUFRO3NCQUEzRCxTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDUSxjQUFjO3NCQUF2RSxTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFHcEQsV0FBVztzQkFEZCxXQUFXO3VCQUFDLE9BQU87Z0JBbUJSLG1CQUFtQjtzQkFEOUIsV0FBVzt1QkFBQywyQkFBMkI7Z0JBTTVCLFlBQVk7c0JBRHZCLFdBQVc7dUJBQUMsb0JBQW9CO2dCQU1yQixRQUFRO3NCQURuQixXQUFXO3VCQUFDLGVBQWU7Z0JBYU8sT0FBTztzQkFBekMsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBdUVJLFNBQVM7c0JBQTdDLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWdDbkMsT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGVzdHJveVJlZixcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBJdGVyYWJsZURpZmZlcixcbiAgSXRlcmFibGVEaWZmZXJzLFxuICBOZ1pvbmUsXG4gIG51bWJlckF0dHJpYnV0ZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFJlbmRlcmVyMixcbiAgc2lnbmFsLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIEkxOG5QbHVyYWxQaXBlLCBOZ0NsYXNzLCBOZ1N0eWxlLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb2N1c2FibGVPcHRpb24sIEZvY3VzS2V5TWFuYWdlciwgRm9jdXNNb25pdG9yLCBGb2N1c09yaWdpbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IENka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGwsIENka1ZpcnR1YWxGb3JPZiwgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIHNraXAsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdFdpdGgsIGRlYm91bmNlVGltZSwgZGVsYXksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTW9kaWZpZXIsIE1vZGlmaWVyQXJndW1lbnRzLCBPcHRpb25zIH0gZnJvbSAnQHBvcHBlcmpzL2NvcmUnO1xuXG5pbXBvcnQge1xuICBEcm9wZG93bkNvbXBvbmVudCxcbiAgRHJvcGRvd25EaXZpZGVyRGlyZWN0aXZlLFxuICBEcm9wZG93bk1lbnVEaXJlY3RpdmUsXG4gIERyb3Bkb3duVG9nZ2xlRGlyZWN0aXZlXG59IGZyb20gJy4uLy4uL2Ryb3Bkb3duJztcbmltcG9ydCB7IEVsZW1lbnRDb3ZlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2VsZW1lbnQtY292ZXInO1xuaW1wb3J0IHsgVGVtcGxhdGVJZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL3NoYXJlZCc7XG5pbXBvcnQgeyBJTXVsdGlTZWxlY3QsIElPcHRpb24sIE9wdGlvbnNNYXAsIFNlYXJjaEZuIH0gZnJvbSAnLi4vbXVsdGktc2VsZWN0LnR5cGUnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3RTZXJ2aWNlIH0gZnJvbSAnLi4vbXVsdGktc2VsZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQgfSBmcm9tICcuLi9tdWx0aS1zZWxlY3Qtb3B0aW9uL211bHRpLXNlbGVjdC1vcHRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IE11bHRpU2VsZWN0TmF0aXZlU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vbXVsdGktc2VsZWN0LW5hdGl2ZS1zZWxlY3QvbXVsdGktc2VsZWN0LW5hdGl2ZS1zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IE11bHRpU2VsZWN0VGFnQ29tcG9uZW50IH0gZnJvbSAnLi4vbXVsdGktc2VsZWN0LXRhZy9tdWx0aS1zZWxlY3QtdGFnLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNdWx0aVNlbGVjdFNlYXJjaERpcmVjdGl2ZSB9IGZyb20gJy4vbXVsdGktc2VsZWN0LXNlYXJjaC5kaXJlY3RpdmUnO1xuXG5pbnRlcmZhY2UgSVBsdXJhbE1hcCB7XG4gIFtrOiBzdHJpbmddOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBvYnNlcnZlUmVmZXJlbmNlUmVzaXplTW9kaWZpZXI6IE1vZGlmaWVyPHN0cmluZywgT3B0aW9ucz4gPSB7XG4gIG5hbWU6ICdvYnNlcnZlUmVmZXJlbmNlUmVzaXplTW9kaWZpZXInLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbih7IHN0YXRlIH0pIHt9LFxuICBlZmZlY3Q6ICh7IHN0YXRlLCBpbnN0YW5jZSB9OiBNb2RpZmllckFyZ3VtZW50czxPcHRpb25zPikgPT4ge1xuICAgIGNvbnN0IFJPX1BST1AgPSAnX19wb3BwZXJqc1JPX18nO1xuICAgIGNvbnN0IHsgcmVmZXJlbmNlIH0gPSBzdGF0ZS5lbGVtZW50cztcblxuICAgIGxldCByZXNpemVPYnNlcnZlcjogUmVzaXplT2JzZXJ2ZXIgfCBudWxsID0gbmV3IFJlc2l6ZU9ic2VydmVyKChlbnRyaWVzKSA9PiB7XG4gICAgICBpZiAoZW50cmllcy5maW5kKGVudHJ5ID0+IGVudHJ5LnRhcmdldCA9PT0gcmVmZXJlbmNlKSkge1xuICAgICAgICBpbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgIH1cbiAgICB9KSBzYXRpc2ZpZXMgUmVzaXplT2JzZXJ2ZXI7XG5cbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKDxFbGVtZW50PnJlZmVyZW5jZSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgICByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgfTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNhbWVBc1JlZmVyZW5jZVdpZHRoTW9kaWZpZXI6IE1vZGlmaWVyPHN0cmluZywgT3B0aW9ucz4gPSB7XG4gIG5hbWU6ICdzYW1lQXNSZWZlcmVuY2VXaWR0aE1vZGlmaWVyJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgZm46ICh7IHN0YXRlIH0pID0+IHtcbiAgICBzdGF0ZS5zdHlsZXNbJ3BvcHBlciddLm1pbldpZHRoID0gYCR7c3RhdGUucmVjdHMucmVmZXJlbmNlLndpZHRofXB4YDtcbiAgfSxcbiAgcGhhc2U6ICdiZWZvcmVXcml0ZScsXG4gIHJlcXVpcmVzOiBbJ2NvbXB1dGVTdHlsZXMnXVxufTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRQb3BwZXJPcHRpb25zOiBQYXJ0aWFsPE9wdGlvbnM+ID0ge1xuICBzdHJhdGVneTogJ2ZpeGVkJyxcbiAgbW9kaWZpZXJzOiBbXG4gICAgb2JzZXJ2ZVJlZmVyZW5jZVJlc2l6ZU1vZGlmaWVyLFxuICAgIHNhbWVBc1JlZmVyZW5jZVdpZHRoTW9kaWZpZXIsXG4gICAge1xuICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIG9mZnNldDogKCkgPT4gWzAsIDRdXG4gICAgICB9XG4gICAgfVxuICBdXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjLW11bHRpLXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tdWx0aS1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tdWx0aS1zZWxlY3QuY29tcG9uZW50LnNjc3MnXSxcbiAgZXhwb3J0QXM6ICdjTXVsdGlTZWxlY3QnLFxuICBwcm92aWRlcnM6IFtcbiAgICBJMThuUGx1cmFsUGlwZSxcbiAgICBNdWx0aVNlbGVjdFNlcnZpY2UsXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE11bHRpU2VsZWN0Q29tcG9uZW50KSwgbXVsdGk6IHRydWVcbiAgICB9XG4gIF0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBBc3luY1BpcGUsXG4gICAgSTE4blBsdXJhbFBpcGUsXG4gICAgTmdDbGFzcyxcbiAgICBOZ1N0eWxlLFxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbCxcbiAgICBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsXG4gICAgQ2RrVmlydHVhbEZvck9mLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE11bHRpU2VsZWN0VGFnQ29tcG9uZW50LFxuICAgIE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50LFxuICAgIE11bHRpU2VsZWN0U2VhcmNoRGlyZWN0aXZlLFxuICAgIERyb3Bkb3duQ29tcG9uZW50LFxuICAgIERyb3Bkb3duRGl2aWRlckRpcmVjdGl2ZSxcbiAgICBEcm9wZG93bk1lbnVEaXJlY3RpdmUsXG4gICAgRHJvcGRvd25Ub2dnbGVEaXJlY3RpdmUsXG4gICAgRWxlbWVudENvdmVyQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTXVsdGlTZWxlY3RDb21wb25lbnQ8VFZhbHVlIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyPiBpbXBsZW1lbnRzIElNdWx0aVNlbGVjdDxUVmFsdWU+LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCB7XG5cbiAgcmVhZG9ubHkgI2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHJlYWRvbmx5ICNpMThuUGx1cmFsID0gaW5qZWN0KEkxOG5QbHVyYWxQaXBlKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXG4gICAgcHJpdmF0ZSBtdWx0aVNlbGVjdFNlcnZpY2U6IE11bHRpU2VsZWN0U2VydmljZSxcbiAgICBwcml2YXRlIGl0ZXJhYmxlRGlmZmVyczogSXRlcmFibGVEaWZmZXJzXG4gICkge1xuICAgIHRoaXMuZGlmZmVyID0gdGhpcy5pdGVyYWJsZURpZmZlcnMuZmluZCh0aGlzLiN2YWx1ZSkuY3JlYXRlKCk7XG4gICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2V0U2VsZWN0aW9uTW9kZWwodGhpcy5tdWx0aXBsZSk7XG4gICAgdGhpcy5vcHRpb25zQXJyYXkkID0gdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2UuZ2V0T3B0aW9uc0FycmF5KCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGRpZmZlciE6IEl0ZXJhYmxlRGlmZmVyPGFueT47XG5cbiAgcmVhZG9ubHkgI2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcmVhZG9ubHkgI29wdGlvbnNSZWFkeSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICByZWFkb25seSBvcHRpb25zQXJyYXkkITogT2JzZXJ2YWJsZTxJT3B0aW9uW10+O1xuICByZWFkb25seSB1c2VyT3B0aW9uc0FycmF5JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SU9wdGlvbltdPihbXSk7XG4gIHJlYWRvbmx5ICNvcHRpb25zOiBPcHRpb25zTWFwPHN0cmluZyB8IG51bWJlcj4gPSBuZXcgTWFwKCk7XG4gIHJlYWRvbmx5IG9wdGlvbnNTZWxlY3RlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElPcHRpb25bXT4oW10pO1xuICByZWFkb25seSBvcHRpb25zU2VsZWN0ZWQ6IE1hcDxhbnksIElPcHRpb24+ID0gbmV3IE1hcCgpO1xuICByZWFkb25seSB2YWx1ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRWYWx1ZVtdPihbXSk7XG4gICNvcHRpb25zQ29udGVudDogYW55W10gPSBbXTtcblxuICBvbkNoYW5nZSA9ICh2YWx1ZTogYW55KSA9PiB7fTtcbiAgb25Ub3VjaGVkID0gKCkgPT4ge307XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogVFZhbHVlIHwgVFZhbHVlW10pOiB2b2lkIHtcbiAgICBpZiAoKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpKSB7XG4gICAgICB0aGlzLnZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbLi4udmFsdWVdIDogW3ZhbHVlXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IEFycmF5KDApO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgdXNlcnMgdG8gY3JlYXRlIG9wdGlvbnMgaWYgdGhleSBhcmUgbm90IGluIHRoZSBsaXN0IG9mIG9wdGlvbnMuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQHNpbmNlIDQuNS4xMVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGFsbG93Q3JlYXRlT3B0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIHNlbGVjdGlvbiBjbGVhbmVyIGVsZW1lbnRcbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCB0cnVlIHwgJ2FjdGl2ZSdcbiAgICovXG4gIEBJbnB1dCgpIGNsZWFuZXI6IGJvb2xlYW4gfCAnYWN0aXZlJyA9IHRydWU7XG5cbiAgLyoqXG4gICAqIENsZWFyIGN1cnJlbnQgc2VhcmNoIG9uIHNlbGVjdGluZyBhbiBpdGVtXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICogQHNpbmNlIDQuNS4xMVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNsZWFyU2VhcmNoT25TZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogRGlzYWJsZXMgbXVsdGktc2VsZWN0IGNvbXBvbmVudFxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuX2Rpc2FibGVkICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuc2V0Rm9jdXNNb25pdG9yKCF2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEFkZCBsb2FkaW5nIHNwaW5uZXIgYW5kIHJlZHVjZWQgb3BhY2l0eS5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAc2luY2UgNC41LjJcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBzZXQgbG9hZGluZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuaXNMb2FkaW5nLnNldCh2YWx1ZSk7XG4gIH1cblxuICBpc0xvYWRpbmcgPSBzaWduYWwoZmFsc2UpO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhhdCBtdWx0aXBsZSBvcHRpb25zIGNhbiBiZSBzZWxlY3RlZCBhdCBvbmNlXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBzZXQgbXVsdGlwbGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9tdWx0aXBsZSA9IHZhbHVlO1xuICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNldFNlbGVjdGlvbk1vZGVsKHRoaXMuX211bHRpcGxlKTtcbiAgfVxuXG4gIGdldCBtdWx0aXBsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbXVsdGlwbGU7XG4gIH1cblxuICBwcml2YXRlIF9tdWx0aXBsZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBIaWRkZW4gbmF0aXZlIHNlbGVjdCBmb3JtXG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgQElucHV0KCkgbmF0aXZlRm9ybUlkOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogSGlkZGVuIG5hdGl2ZSBzZWxlY3QgaWRcbiAgICogQHR5cGUgc3RyaW5nXG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICBASW5wdXQoKSBuYXRpdmVJZDogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIEhpZGRlbiBuYXRpdmUgc2VsZWN0IG5hbWVcbiAgICogQHR5cGUgc3RyaW5nXG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICBASW5wdXQoKSBuYXRpdmVOYW1lOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogTGlzdCBvZiBvcHRpb24gZWxlbWVudHNcbiAgICogQHR5cGUgSU9wdGlvbltdXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgb3B0aW9ucyhvcHRpb25zOiBJT3B0aW9uW10pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgdGhpcy4jb3B0aW9ucy5jbGVhcigpO1xuICAgICAgdGhpcy5tYWtlT3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuI29wdGlvbnMudmFsdWVzKCldO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgbWF4SGVpZ2h0IG9mIG9wdGlvbnMgbGlzdCBpbiBweFxuICAgKiBAdHlwZSBzdHJpbmcgfCBudW1iZXJcbiAgICogQGRlZmF1bHQgJ2F1dG8nXG4gICAqL1xuICBASW5wdXQoKSBvcHRpb25zTWF4SGVpZ2h0OiBzdHJpbmcgfCBudW1iZXIgPSAnYXV0byc7XG5cbiAgLyoqXG4gICAqIFNldHMgb3B0aW9uIHN0eWxlXG4gICAqIEB0eXBlICdjaGVja2JveCcgfCAndGV4dCdcbiAgICogQGRlZmF1bHQgJ2NoZWNrYm94J1xuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IG9wdGlvbnNTdHlsZSh2YWx1ZTogJ2NoZWNrYm94JyB8ICd0ZXh0Jykge1xuICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLm9wdGlvbnNTdHlsZSA9IHZhbHVlID8/ICdjaGVja2JveCc7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmaWVzIGEgc2hvcnQgaGludCB0aGF0IGlzIHZpc2libGUgaW4gdGhlIHNlYXJjaCBpbnB1dFxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQGRlZmF1bHQgJ1NlbGVjdC4uLidcbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VsZWN0Li4uJztcblxuICAvKipcbiAgICogRW5hYmxlcyBzZWFyY2ggaW5wdXQgZWxlbWVudFxuICAgKiBAdHlwZSBib29sZWFuIHwgU2VhcmNoRm4gfCAnZXh0ZXJuYWwnXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCgpIHNlYXJjaDogKGJvb2xlYW4gfCAnZXh0ZXJuYWwnIHwgU2VhcmNoRm4pID0gdHJ1ZTtcblxuICAvKipcbiAgICogU2V0cyB0aGUgbGFiZWwgZm9yIG5vIHJlc3VsdHMgd2hlbiBmaWx0ZXJpbmdcbiAgICogQHR5cGUgc3RyaW5nXG4gICAqIEBkZWZhdWx0ICdubyBpdGVtcydcbiAgICovXG4gIEBJbnB1dCgpIHNlYXJjaE5vUmVzdWx0c0xhYmVsOiBzdHJpbmcgPSAnbm8gaXRlbXMnO1xuXG4gIC8qKlxuICAgKiBTZXRzIGluaXRpYWwgc2VhcmNoIHN0cmluZ1xuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQGRlZmF1bHQgJydcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBzZWFyY2hWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh0aGlzLl9zZWFyY2hWYWx1ZSAhPT0gdmFsdWUudHJpbVN0YXJ0KCkpIHtcbiAgICAgIHRoaXMuX3NlYXJjaFZhbHVlID0gdmFsdWUudHJpbVN0YXJ0KCk7XG4gICAgICB0aGlzLnZpc2libGUgPSB0aGlzLnNlYXJjaFZhbHVlLmxlbmd0aCA+IDAgJiYgdGhpcy5zdWJ0cmVlRm9jdXNlZCA/IHRydWUgOiB0aGlzLnZpc2libGU7XG4gICAgICB0aGlzLmZpbHRlck9wdGlvbnModGhpcy5zZWFyY2hWYWx1ZSk7XG4gICAgICB0aGlzLmlucHV0RWxlbWVudFNpemUoKTtcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWVDaGFuZ2UuZW1pdCh0aGlzLl9zZWFyY2hWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNlYXJjaFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX3NlYXJjaFZhbHVlOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogRW1pdHMgc2VhcmNoVmFsdWUgc3RyaW5nIGZvciBleHRlcm5hbCBmaWx0ZXJpbmdcbiAgICogQHR5cGUgc3RyaW5nXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2VhcmNoVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgc2VsZWN0IGFsbCBidXR0b25cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RBbGw6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzZWxlY3QgYWxsIGJ1dHRvbiBsYWJlbFxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQGRlZmF1bHQgJ1NlbGVjdCBhbGwgb3B0aW9ucydcbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdEFsbExhYmVsOiBzdHJpbmcgPSAnU2VsZWN0IGFsbCBvcHRpb25zJztcblxuICAvKipcbiAgICogU2VsZWN0aW9uIHR5cGVcbiAgICogQHR5cGUgJ2NvdW50ZXInIHwgJ3RhZ3MnIHwgJ3RleHQnXG4gICAqIEBkZWZhdWx0ICd0YWdzJ1xuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0aW9uVHlwZTogJ2NvdW50ZXInIHwgJ3RhZ3MnIHwgJ3RleHQnID0gJ3RhZ3MnO1xuXG4gIC8qKlxuICAgKiBDb3VudGVyIHNlbGVjdGlvbiBsYWJlbCB2YWx1ZVxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQGRlZmF1bHQgJ2l0ZW0ocykgc2VsZWN0ZWQnXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3Rpb25UeXBlQ291bnRlclRleHQ6IHN0cmluZyA9ICdpdGVtKHMpIHNlbGVjdGVkJztcblxuICAvKipcbiAgICogQ291bnRlciBzZWxlY3Rpb24gbGFiZWwgcGx1cmFsIG1hcCBmb3IgSTE4blBsdXJhbFBpcGVcbiAgICogQHR5cGUgSVBsdXJhbE1hcFxuICAgKiBAZGVmYXVsdCB7ICc9MSc6ICdpdGVtIHNlbGVjdGVkJywgJ290aGVyJzogJ2l0ZW1zIHNlbGVjdGVkJyB9XG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3Rpb25UeXBlQ291bnRlclRleHRQbHVyYWxNYXA/OiBJUGx1cmFsTWFwID0geyAnPTEnOiAnaXRlbSBzZWxlY3RlZCcsICdvdGhlcic6ICdpdGVtcyBzZWxlY3RlZCcgfTtcblxuICAvKipcbiAgICogU2l6ZSB0aGUgY29tcG9uZW50IHNtYWxsIG9yIGxhcmdlLlxuICAgKiBAdHlwZSAnc20nIHwgJ2xnJyB8IHVuZGVmaW5lZFxuICAgKi9cbiAgQElucHV0KCkgc2l6ZT86ICdzbScgfCAnbGcnO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsIHZhbHVlIG9mIG11bHRpLXNlbGVjdFxuICAgKiBAdHlwZSBUVmFsdWUgfCBUVmFsdWVbXVxuICAgKi9cbiAgQElucHV0KCkgc2V0IHZhbHVlKHZhbHVlOiBUVmFsdWUgfCBUVmFsdWVbXSkge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbLi4udmFsdWVdIDogW3ZhbHVlXTtcbiAgICBpZiAodGhpcy5kaWZmZXIpIHtcbiAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmRpZmZlci5kaWZmKG5ld1ZhbHVlKTtcbiAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuI3ZhbHVlID0gWy4uLm5ld1ZhbHVlXTtcbiAgICAgICAgdGhpcy52YWx1ZSQubmV4dChbLi4ubmV3VmFsdWVdKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgLy8gdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUVmFsdWUgfCBUVmFsdWVbXSB7XG4gICAgY29uc3QgdmFsdWU6IFRWYWx1ZVtdID0gdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWw/LnNlbGVjdGVkID8/IFsuLi50aGlzLiN2YWx1ZV07XG4gICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgPyBbLi4udmFsdWVdIDogdmFsdWVbMF07XG4gIH1cblxuICAjdmFsdWU6IFRWYWx1ZVtdID0gW107XG5cbiAgLyoqXG4gICAqIEVtaXRzIHZhbHVlQ2hhbmdlXG4gICAqIEB0eXBlIFRWYWx1ZSB8IFRWYWx1ZVtdXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgdmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUVmFsdWUgfCBUVmFsdWVbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPFRWYWx1ZSB8IFRWYWx1ZVtdPigpO1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgdmlzdWFsIHZhbGlkYXRpb24gZmVlZGJhY2suXG4gICAqIEB0eXBlIGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSB2YWxpZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZSB2aXJ0dWFsIHNjcm9sbGVyIGZvciBvcHRpb25zIGxpc3QuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBzZXQgdmlydHVhbFNjcm9sbGVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fdmlydHVhbFNjcm9sbGVyID0gdmFsdWU7XG4gIH1cblxuICBnZXQgdmlydHVhbFNjcm9sbGVyKCkge1xuICAgIHJldHVybiB0aGlzLl92aXJ0dWFsU2Nyb2xsZXI7XG4gIH1cblxuICBwcml2YXRlIF92aXJ0dWFsU2Nyb2xsZXIgPSBmYWxzZTtcblxuICAvKipcbiAgICogQW1vdW50IG9mIHZpc2libGUgb3B0aW9ucywgaWYgc2V0IC0gb3ZlcndyaXRlcyBvcHRpb25zTWF4SGVpZ2h0XG4gICAqIEB0eXBlIG51bWJlclxuICAgKiBAZGVmYXVsdCA4XG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxuICBzZXQgdmlzaWJsZUl0ZW1zKHZhbHVlKSB7XG4gICAgdGhpcy5fdmlzaWJsZUl0ZW1zID0gdmFsdWUgPiAwID8gdmFsdWUgOiA4O1xuICAgIHRoaXMub3B0aW9uc01heEhlaWdodCA9ICgodGhpcy5pdGVtU2l6ZSAqIHRoaXMuX3Zpc2libGVJdGVtcykgKyAxNikudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCB2aXNpYmxlSXRlbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGVJdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgX3Zpc2libGVJdGVtcyA9IDg7XG5cbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBvcHRpb24gaXRlbSBpbiB0aGUgbGlzdCAoaW4gcGl4ZWxzKS5cbiAgICogQHR5cGUgbnVtYmVyXG4gICAqIEBkZWZhdWx0IDQwXG4gICAqL1xuICBASW5wdXQoKSBpdGVtU2l6ZTogbnVtYmVyID0gNDA7XG5cbiAgLyoqXG4gICAqIE1pbiB3aWR0aCBvZiB0aGUgb3B0aW9ucyBsaXN0IChpbiBwaXhlbHMpLlxuICAgKiBAdHlwZSBudW1iZXJcbiAgICogQGRlZmF1bHQgMTk2XG4gICAqL1xuICBASW5wdXQoKSBpdGVtTWluV2lkdGg6IG51bWJlciA9IDE5NjtcblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBkcm9wZG93biBzZWxlY3QgY29tcG9uZW50LlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgc2V0IHZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuX3Zpc2libGUpIHtcbiAgICAgIHRoaXMuX3Zpc2libGUgPSB2YWx1ZTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS50b2dnbGVWaXNpYmxlKHZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAvLyB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IHZpc2libGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XG4gIH1cblxuICBwcml2YXRlIF92aXNpYmxlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHZpc2libGVDaGFuZ2VcbiAgICogQHR5cGUgYm9vbGVhblxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHZpc2libGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogT3B0aW9uYWwgcG9wcGVyIE9wdGlvbnMgb2JqZWN0XG4gICAqIEB0eXBlIFBhcnRpYWw8T3B0aW9ucz5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBwb3BwZXJPcHRpb25zKG9wdGlvbnM6IFBhcnRpYWw8T3B0aW9ucz4pIHtcbiAgICBjb25zdCBwcmV2T3B0aW9ucyA9IHRoaXMuI3BvcHBlck9wdGlvbnMoKTtcbiAgICBjb25zdCB7IG1vZGlmaWVyczogcHJldk1vZGlmaWVycyA9IFtdIH0gPSBwcmV2T3B0aW9ucztcbiAgICBjb25zdCB7IG1vZGlmaWVyczogY3Vyck1vZGlmaWVycyA9IFtdIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGN1cnJPcHRpb25zOiBQYXJ0aWFsPE9wdGlvbnM+ID0ge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG1vZGlmaWVyczogW1xuICAgICAgICAuLi5wcmV2TW9kaWZpZXJzLmZpbHRlcihwcmV2TW9kaWZpZXIgPT4gIWN1cnJNb2RpZmllcnMuZmluZChjdXJyTW9kaWZpZXIgPT4gY3Vyck1vZGlmaWVyLm5hbWUgPT09IHByZXZNb2RpZmllci5uYW1lKSksXG4gICAgICAgIC4uLmN1cnJNb2RpZmllcnNcbiAgICAgIF1cbiAgICB9O1xuXG4gICAgdGhpcy4jcG9wcGVyT3B0aW9ucy5zZXQoeyAuLi5wcmV2T3B0aW9ucywgLi4uY3Vyck9wdGlvbnMgfSk7XG4gIH1cblxuICBnZXQgcG9wcGVyT3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy4jcG9wcGVyT3B0aW9ucygpO1xuICB9XG5cbiAgcmVhZG9ubHkgI3BvcHBlck9wdGlvbnMgPSBzaWduYWwoZGVmYXVsdFBvcHBlck9wdGlvbnMpO1xuXG4gIGlzRHJvcGRvd25WaXNpYmxlID0gZmFsc2U7XG5cbiAgZ2V0IHNlbGVjdGVkT3B0aW9ucygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMub3B0aW9uc1NlbGVjdGVkLnZhbHVlcygpXTtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZE9wdGlvbnNUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkT3B0aW9ucy5tYXAob3B0aW9uID0+IG9wdGlvbi5sYWJlbCkuam9pbignLCAnKTtcbiAgfVxuXG4gIGdldCBjb3VudGVyVGV4dCgpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RofSAke3RoaXMuc2VsZWN0aW9uVHlwZUNvdW50ZXJUZXh0fWA7XG4gIH1cblxuICBnZXQgY291bnRlclRleHRUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLnNlbGVjdGlvblR5cGVDb3VudGVyVGV4dFBsdXJhbE1hcCA/PyB0eXBlb2YgdGhpcy5zZWxlY3Rpb25UeXBlQ291bnRlclRleHQ7XG4gIH07XG5cbiAgZ2V0IGNvdW50ZXJQbGFjZWhvbGRlclRleHQoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMCB8fCB0aGlzLnNlbGVjdGlvblR5cGUgIT09ICdjb3VudGVyJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvdW50ZXJUZXh0VHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvdW50ZXJUZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RofSAke3RoaXMuI2kxOG5QbHVyYWwudHJhbnNmb3JtKHRoaXMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCwgdGhpcy5zZWxlY3Rpb25UeXBlQ291bnRlclRleHRQbHVyYWxNYXAgPz8geyBvdGhlcjogdGhpcy5zZWxlY3Rpb25UeXBlQ291bnRlclRleHQgPz8gJysnIH0pfWA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c01vbml0b3JTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG5cbiAgQENvbnRlbnRDaGlsZHJlbihNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBtdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50ITogUXVlcnlMaXN0PE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50PjtcbiAgQFZpZXdDaGlsZHJlbihNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudCkgbXVsdGlTZWxlY3RPcHRpb25zVmlldyE6IFF1ZXJ5TGlzdDxNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudD47XG4gIEBWaWV3Q2hpbGRyZW4oJ3Njcm9sbFZpZXdwb3J0Jykgc2Nyb2xsVmlld3BvcnRWaWV3ITogUXVlcnlMaXN0PENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydD47XG4gIEBWaWV3Q2hpbGQoJ29wdGlvbnMnKSBvcHRpb25zRWxlbWVudFJlZiE6IEVsZW1lbnRSZWY7XG5cbiAgcHJvdGVjdGVkIHNjcm9sbFZpZXdwb3J0ITogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gIHByb3RlY3RlZCB0ZW1wbGF0ZXM6IHsgW2lkOiBzdHJpbmddOiBUZW1wbGF0ZVJlZjxhbnk+IH0gPSB7fTtcbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZUlkRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIGNvbnRlbnRUZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8VGVtcGxhdGVJZERpcmVjdGl2ZT47XG5cbiAgcHJpdmF0ZSBmb2N1c0tleU1hbmFnZXIhOiBGb2N1c0tleU1hbmFnZXI8TXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0RWxlbWVudCcpIGlucHV0RWxlbWVudCE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duTWVudScpIGRyb3Bkb3duTWVudSE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoRHJvcGRvd25Db21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBkcm9wZG93biE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoRHJvcGRvd25Ub2dnbGVEaXJlY3RpdmUsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBkcm9wZG93blRvZ2dsZSE6IEVsZW1lbnRSZWY7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBob3N0Q2xhc3NlcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRcbiAgICB9O1xuICB9XG5cbiAgZ2V0IG11bHRpc2VsZWN0Q2xhc3NlcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2Zvcm0tbXVsdGktc2VsZWN0JzogdHJ1ZSxcbiAgICAgIFtgZm9ybS1tdWx0aS1zZWxlY3QtJHt0aGlzLnNpemV9YF06ICEhdGhpcy5zaXplLFxuICAgICAgc2hvdzogdGhpcy52aXNpYmxlLFxuICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQsXG4gICAgICAnaXMtdmFsaWQnOiB0aGlzLnZhbGlkID09PSB0cnVlLFxuICAgICAgJ2lzLWludmFsaWQnOiB0aGlzLnZhbGlkID09PSBmYWxzZVxuICAgIH07XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1tdWx0aXNlbGVjdGFibGUnKVxuICBwcml2YXRlIGdldCBhcmlhTXVsdGlTZWxlY3RhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLm11bHRpcGxlO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZXhwYW5kZWQnKVxuICBwcml2YXRlIGdldCBhcmlhRXhwYW5kZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXG4gIHByaXZhdGUgZ2V0IHRhYkluZGV4KCkge1xuICAgIHJldHVybiB0aGlzLl90YWJJbmRleDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0IHRhYkluZGV4KHZhbHVlKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl90YWJJbmRleCA9IHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5zZWFyY2ggPyAtMSA6IHZhbHVlID09PSBudWxsID8gbnVsbCA6IDA7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF90YWJJbmRleDogbnVtYmVyIHwgbnVsbCA9IC0xO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleXVwJywgWyckZXZlbnQnXSkgb25LZXlVcCgkZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIGNvbnN0IHRhcmdldFRhZ05hbWUgPSAoJGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkudGFnTmFtZTtcbiAgICBpZiAoJGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICcnO1xuICAgICAgdGhpcy5zZXRGb2N1cygna2V5Ym9hcmQnLCAnb25LZXlVcCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoWydFbnRlcicsICdTcGFjZScsICdBcnJvd0Rvd24nXS5pbmNsdWRlcygkZXZlbnQuY29kZSkgJiYgW3RoaXMuaW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50LCB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudF0uaW5jbHVkZXMoJGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICBpZiAoIXRoaXMuc2VhcmNoKSB7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXMoJ2tleWJvYXJkJywgJ29uS2V5VXAnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoWydUYWInXS5pbmNsdWRlcygkZXZlbnQua2V5KSkge1xuXG4gICAgICAvLyB0b2RvIGZvY3VzIG9uIGlucHV0IHdoZW4gdGFiIGluXG4gICAgICAvLyBpZiAoJGV2ZW50LnRhcmdldCA9PT0gdGhpcy5pbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIC8vICAgY29uc29sZS5sb2coJGV2ZW50LmtleSwgJGV2ZW50LnRhcmdldClcbiAgICAgIC8vIH1cblxuICAgICAgaWYgKCRldmVudC50YXJnZXQgPT09IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5zZWFyY2gpIHtcbiAgICAgICAgICB0aGlzLnNldEZvY3VzKCdrZXlib2FyZCcsICdvbktleVVwJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWJUYXJnZXQgPSB0YXJnZXRUYWdOYW1lO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnZpc2libGUgJiYgdGhpcy5zdWJ0cmVlRm9jdXNlZCkge1xuICAgICAgICBpZiAodGFyZ2V0VGFnTmFtZSA9PT0gJ0MtTVVMVEktU0VMRUNULU9QVElPTicpIHtcblxuICAgICAgICAgIGlmICh0aGlzLnRhYlRhcmdldCA9PT0gJ0MtTVVMVEktU0VMRUNULU9QVElPTicpIHtcbiAgICAgICAgICAgIGlmICgkZXZlbnQuc2hpZnRLZXkgJiYgdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbT8udmFsdWUgPT09IHRoaXMub3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IG9wdGlvbi52aXNpYmxlICYmICFvcHRpb24uZGlzYWJsZWQpLnNsaWNlKDApWzBdLnZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXMoJ2tleWJvYXJkJywgJ29uS2V5VXAnKTtcbiAgICAgICAgICAgICAgdGhpcy50YWJUYXJnZXQgPSB0YXJnZXRUYWdOYW1lO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghJGV2ZW50LnNoaWZ0S2V5ICYmIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0/LnZhbHVlID09PSB0aGlzLm9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24udmlzaWJsZSAmJiAhb3B0aW9uLmRpc2FibGVkKS5zbGljZSgtMSlbMF0udmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRGb2N1cygna2V5Ym9hcmQnLCAnb25LZXlVcCcpO1xuICAgICAgICAgICAgICB0aGlzLnRhYlRhcmdldCA9IHRhcmdldFRhZ05hbWU7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlSXRlbSgwKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbSB8fCB0aGlzLnRhYlRhcmdldCAhPT0gdGFyZ2V0VGFnTmFtZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlT3B0aW9uKSB7XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odGhpcy5hY3RpdmVPcHRpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGV2ZW50LnNoaWZ0S2V5ID8gdGhpcy5mb2N1c0tleU1hbmFnZXIuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCkgOiB0aGlzLmZvY3VzS2V5TWFuYWdlci5zZXROZXh0SXRlbUFjdGl2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYlRhcmdldCA9IHRhcmdldFRhZ05hbWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSkgb25LZXlEb3duKCRldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IHRhcmdldFRhZ05hbWUgPSAoJGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkudGFnTmFtZTtcbiAgICBpZiAoJGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiB0YXJnZXRUYWdOYW1lID09PSAnSU5QVVQnKSB7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKCRldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICB0aGlzLnRhYlRhcmdldCA9IHRhcmdldFRhZ05hbWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgkZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyAmJiB0YXJnZXRUYWdOYW1lICE9PSAnQy1NVUxUSS1TRUxFQ1QtT1BUSU9OJykge1xuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgkZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICB0aGlzLnNldEZvY3VzKCdrZXlib2FyZCcsICdvbktleURvd24nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gYXZvaWQgc2V0dGluZyBmb2N1cyB0byBvcHRpb24gd2hpbGUgb24gaW5wdXQgZWxlbWVudFxuICAgIGlmICgkZXZlbnQudGFyZ2V0ID09PSB0aGlzLmlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoJGV2ZW50LmtleSAhPT0gJ1RhYicpIHtcbiAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyPy5vbktleWRvd24oJGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIG9uQ2xpY2soJGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKFt0aGlzLmRyb3Bkb3duLm5hdGl2ZUVsZW1lbnRdLmluY2x1ZGVzKCRldmVudC50YXJnZXQpKSB7XG4gICAgICB0aGlzLnZpc2libGUgPSAhdGhpcy52aXNpYmxlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIHRoaXMuc2V0Rm9jdXMoJ21vdXNlJywgJ29uQ2xpY2snKTtcbiAgfVxuXG4gIHB1YmxpYyB2aXNpYmxlT3B0aW9ucyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgZ2V0IHN1YnRyZWVGb2N1c2VkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdWJ0cmVlRm9jdXNlZDtcbiAgfVxuXG4gIHNldCBzdWJ0cmVlRm9jdXNlZChmb2N1c2VkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc3VidHJlZUZvY3VzZWQgPSB0aGlzLmRpc2FibGVkID8gZmFsc2UgOiBmb2N1c2VkO1xuICAgIGlmICghZm9jdXNlZCkge1xuICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICcnO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudmlydHVhbFNjcm9sbGVyKSB7XG4gICAgICB0aGlzLnZpc2libGUgPSBmb2N1c2VkID09PSBmYWxzZSA/IGZhbHNlIDogdGhpcy52aXNpYmxlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3N1YnRyZWVGb2N1c2VkID0gdGhpcy5mb2N1c09yaWdpbihudWxsKTtcblxuICBwcml2YXRlIG5hdGl2ZVNlbGVjdFJlZiE6IGFueTtcblxuICBmb2N1c09yaWdpbihvcmlnaW46IEZvY3VzT3JpZ2luKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuICEhb3JpZ2luO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLm11bHRpcGxlKSxcbiAgICAgICAgZGVsYXkoMCksXG4gICAgICAgIHRhcChjaGFuZ2UgPT4ge1xuICAgICAgICAgIGlmIChjaGFuZ2UuYWRkZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gY2xvc2UgZHJvcGRvd24gZm9yIHNpbmdsZSBzZWxlY3QgKCFtdWx0aXBsZSlcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHNraXAoMSksXG4gICAgICAgIHRhcChjaGFuZ2UgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0Rm9jdXMoJ3Byb2dyYW0nLCAnc2VsZWN0aW9uTW9kZWwuY2hhbmdlZCAoc2luZ2xlKScpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLiNvcHRpb25zUmVhZHkkLnBpcGUoXG4gICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMudmlydHVhbFNjcm9sbGVyKSxcbiAgICAgIGRlbGF5KDApLFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRGb2N1c0tleU1hbmFnZXIoWy4uLnRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudCwgLi4udGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNWaWV3XSk7XG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICkuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKGNoYW5nZSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBhZGRlZCB9ID0geyAuLi5jaGFuZ2UgfTtcbiAgICAgICAgICBpZiAoYWRkZWQubGVuZ3RoID4gMCAmJiB0aGlzLmNsZWFyU2VhcmNoT25TZWxlY3QpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLmNoYW5nZWRcbiAgICAgIC5waXBlKFxuICAgICAgICAvLyBkZWxheSgwKSxcbiAgICAgICAgY29tYmluZUxhdGVzdFdpdGgodGhpcy4jb3B0aW9uc1JlYWR5JCksXG4gICAgICAgIHRhcCgoW2NoYW5nZSwgcmVhZHldKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyByZW1vdmVkIH0gPSB7IC4uLmNoYW5nZSB9O1xuICAgICAgICAgIHJlbW92ZWQuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNTZWxlY3RlZC5kZWxldGUodmFsdWUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jb3B0aW9ucy5nZXQoa2V5KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNTZWxlY3RlZC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLm9wdGlvbnNTZWxlY3RlZCQubmV4dChBcnJheS5mcm9tKHRoaXMub3B0aW9uc1NlbGVjdGVkLnZhbHVlcygpKSk7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IFsuLi50aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZF07XG5cbiAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudFNpemUoKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU5hdGl2ZVNlbGVjdCgpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAvLyBzZXQgaW5pdGlhbCB2YWx1ZXNcbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoLi4udGhpcy4jdmFsdWUpO1xuXG4gICAgdGhpcy52YWx1ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICBpZiAoIXZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuY2xlYXJBbGxPcHRpb25zKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWUuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMudmFsdWUkXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICAgIHRhcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5vcHRpb25zQXJyYXkkXG4gICAgICAucGlwZShcbiAgICAgICAgY29tYmluZUxhdGVzdFdpdGgodGhpcy51c2VyT3B0aW9uc0FycmF5JCksXG4gICAgICAgIHRhcCgoW29wdGlvbnMsIHVzZXJPcHRpb25zXSkgPT4ge1xuXG4gICAgICAgICAgdGhpcy52aXNpYmxlT3B0aW9ucy5zZXQob3B0aW9ucy5zb21lKChpdGVtKSA9PiBpdGVtLnZpc2libGUpIHx8IHVzZXJPcHRpb25zLnNvbWUoKGl0ZW0pID0+IGl0ZW0udmlzaWJsZSkpO1xuICAgICAgICAgIHRoaXMuYWN0aXZlT3B0aW9uID0gbnVsbDtcblxuICAgICAgICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGxlcikge1xuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Py5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICAgICAgICAgIG9wdGlvbi5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxWaWV3cG9ydD8uc2V0UmVuZGVyZWRSYW5nZSh7IHN0YXJ0OiAwLCBlbmQ6IHRoaXMudmlzaWJsZUl0ZW1zIH0pO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxWaWV3cG9ydD8uc2Nyb2xsVG9JbmRleCgwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Py5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gb3B0aW9ucy5maW5kKGl0ZW0gPT4gaXRlbS52YWx1ZSA9PT0gb3B0aW9uLnZhbHVlKTtcbiAgICAgICAgICAgICAgb3B0aW9uLnZpc2libGUgPSBmb3VuZD8udmlzaWJsZSA/PyBmYWxzZTtcbiAgICAgICAgICAgICAgb3B0aW9uLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBmaXJzdEZvY3VzYWJsZSA9IHRoaXMuZmlyc3RGb2N1c2FibGVJdGVtO1xuICAgICAgICAgICAgaWYgKGZpcnN0Rm9jdXNhYmxlKSB7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlSXRlbShmaXJzdEZvY3VzYWJsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdGhpcy5hY3RpdmVPcHRpb24pIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZUl0ZW0oMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Py5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy50YWJJbmRleCA9IDA7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNkZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy4jZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB0aGlzLnNldEZvY3VzTW9uaXRvcihmYWxzZSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3ZhbHVlJ10pIHtcbiAgICAgIGNvbnN0IHZhbHVlQ2hhbmdlcyA9IGNoYW5nZXNbJ3ZhbHVlJ107XG4gICAgICBpZiAodmFsdWVDaGFuZ2VzLmN1cnJlbnRWYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5jbGVhckFsbE9wdGlvbnMoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50U2l6ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG1ha2VPcHRpb25zKG9wdGlvbnM6IElPcHRpb25bXSkge1xuXG4gICAgaWYgKHRoaXMuc2VhcmNoID09PSAnZXh0ZXJuYWwnICYmIHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLiNvcHRpb25zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgdmFsdWUudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBvcHRpb24udmFsdWU7XG4gICAgICBjb25zdCB2YWx1ZSA9IHtcbiAgICAgICAgdmFsdWU6IG9wdGlvbi52YWx1ZSA/PyBvcHRpb24ubGFiZWwsXG4gICAgICAgIGxhYmVsOiBvcHRpb24ubGFiZWwgPz8gb3B0aW9uLnZhbHVlPy50b1N0cmluZygpLFxuICAgICAgICBkaXNhYmxlZDogb3B0aW9uLmRpc2FibGVkID09PSB0cnVlLFxuICAgICAgICB2aXNpYmxlOiB0aGlzLnNlYXJjaCA9PT0gJ2V4dGVybmFsJyA/IHRydWUgOiBvcHRpb24uY3VzdG9tICYmIG9wdGlvbi5zZWxlY3RlZCA/IG9wdGlvbi52aXNpYmxlIDogb3B0aW9uLnZpc2libGUgIT09IGZhbHNlLFxuICAgICAgICB0ZXh0OiBvcHRpb24udGV4dCA/PyBvcHRpb24ubGFiZWwgPz8gb3B0aW9uLnZhbHVlPy50b1N0cmluZygpLFxuICAgICAgICBzZWxlY3RlZDogb3B0aW9uLnNlbGVjdGVkLFxuICAgICAgICBjdXN0b206IG9wdGlvbi5jdXN0b21cbiAgICAgICAgLy8gc2VsZWN0ZWQ6IHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQob3B0aW9uLnZhbHVlKSxcbiAgICAgICAgLy8gaWQ6IG9wdGlvbi5pZFxuICAgICAgfTtcbiAgICAgIHRoaXMuI29wdGlvbnMuc2V0KGtleSwgeyAuLi52YWx1ZSB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuZmlsdGVyT3B0aW9ucyh0aGlzLnNlYXJjaFZhbHVlKTtcblxuICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudD8ubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNWaWV3Py5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICB0aGlzLiNvcHRpb25zUmVhZHkkLm5leHQoKTtcbiAgfVxuXG4gIHVzZXJPcHRpb25zID0gdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2UuZ2V0VXNlck9wdGlvbnMoKTtcblxuICAvLyAjZWZmZWN0VXNlck9wdGlvbnMgPSBlZmZlY3QoKCkgPT4ge1xuICAvLyAgIGlmICh0aGlzLmFsbG93Q3JlYXRlT3B0aW9ucykge1xuICAvLyAgICAgdGhpcy51c2VyT3B0aW9uc0FycmF5JC5uZXh0KEFycmF5LmZyb20odGhpcy51c2VyT3B0aW9ucygpLmZpbHRlcihvcHRpb24gPT4gb3B0aW9uLnZpc2libGUpKSk7XG4gIC8vICAgfVxuICAvLyB9KTtcblxuICBhZGRVc2VyT3B0aW9uKCkge1xuICAgIGlmICh0aGlzLmFsbG93Q3JlYXRlT3B0aW9ucykge1xuICAgICAgaWYgKHRoaXMudXNlck9wdGlvbnMoKS5zb21lKG9wdGlvbiA9PiBvcHRpb24udmFsdWUgPT09IHRoaXMuc2VhcmNoVmFsdWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLiNvcHRpb25zLmdldCh0aGlzLnNlYXJjaFZhbHVlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB1c2VyT3B0aW9uOiBJT3B0aW9uID0ge1xuICAgICAgICB2YWx1ZTogdGhpcy5zZWFyY2hWYWx1ZSxcbiAgICAgICAgbGFiZWw6IHRoaXMuc2VhcmNoVmFsdWUsXG4gICAgICAgIHRleHQ6IHRoaXMuc2VhcmNoVmFsdWUsXG4gICAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICAgIGN1c3RvbTogdHJ1ZSxcbiAgICAgICAgc2VsZWN0ZWQ6IHRydWVcbiAgICAgIH07XG4gICAgICB0aGlzLnNlYXJjaFZhbHVlID0gKHRoaXMuY2xlYXJTZWFyY2hPblNlbGVjdCB8fCB0aGlzLmFsbG93Q3JlYXRlT3B0aW9ucykgPyAnJyA6IHRoaXMuc2VhcmNoVmFsdWU7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5hZGRVc2VyT3B0aW9uKHVzZXJPcHRpb24pO1xuICAgICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KHVzZXJPcHRpb24udmFsdWUpO1xuICAgICAgdGhpcy5vcHRpb25zU2VsZWN0ZWQuc2V0KHVzZXJPcHRpb24udmFsdWUsIHVzZXJPcHRpb24pO1xuICAgICAgdGhpcy5tYWtlT3B0aW9ucyhbLi4udGhpcy5vcHRpb25zLCAuLi50aGlzLnVzZXJPcHRpb25zKCldKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVBbGxVc2VyT3B0aW9ucygpIHtcbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5yZW1vdmVBbGxVc2VyT3B0aW9ucygpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuXG4gICAgdGhpcy5zZXRWaXJ0dWFsU2Nyb2xsZXIoKTtcblxuICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudD8uY2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRlbGF5KDApLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldmlvdXM6IFF1ZXJ5TGlzdDxNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudD4sIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBwcmV2ID0gcHJldmlvdXMudG9BcnJheSgpLm1hcChvcHRpb24gPT4gb3B0aW9uLnZhbHVlKTtcbiAgICAgICAgICBjb25zdCBjdXJyID0gY3VycmVudC50b0FycmF5KCkubWFwKG9wdGlvbiA9PiBvcHRpb24udmFsdWUpO1xuICAgICAgICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGxlcikge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHByZXYpID09PSBKU09OLnN0cmluZ2lmeShjdXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuI29wdGlvbnNDb250ZW50KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3Vycik7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoY2hhbmdlcyA9PiB7XG4gICAgICAgICAgdGhpcy4jb3B0aW9uc0NvbnRlbnQgPSBjaGFuZ2VzLnRvQXJyYXkoKS5tYXAob3B0aW9uID0+IG9wdGlvbi52YWx1ZSk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUobmV4dCA9PiB7XG4gICAgICAgIHRoaXMudmlzaWJsZU9wdGlvbnMuc2V0KHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudD8uc29tZSgob3B0aW9uKSA9PiBvcHRpb24udmlzaWJsZSkpO1xuICAgICAgICBpZiAodGhpcy52aXNpYmxlT3B0aW9ucygpKSB7XG4gICAgICAgICAgdGhpcy5tYWtlT3B0aW9ucyh0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQudG9BcnJheSgpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLnZpc2libGVPcHRpb25zLnNldCh0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/Lmxlbmd0aCA+IDAgfHwgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNWaWV3Py5sZW5ndGggPiAwKTtcbiAgICBpZiAodGhpcy52aXNpYmxlT3B0aW9ucygpKSB7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5tdWx0aXNlbGVjdFN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5zZXRGb2N1c01vbml0b3IoIXRoaXMuZGlzYWJsZWQpO1xuXG4gICAgdGhpcy5zZXRMaXN0S2V5TWFuYWdlcigpO1xuXG4gICAgdGhpcy5pbnB1dEVsZW1lbnRTaXplKCk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQubm90aWZ5T25DaGFuZ2VzKCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY3JlYXRlTmF0aXZlU2VsZWN0KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5tdWx0aVNlbGVjdEZvY3VzJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgob3B0aW9uOiBNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZU9wdGlvbiAmJiB0aGlzLmFjdGl2ZU9wdGlvbi52YWx1ZSAhPT0gb3B0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKG9wdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB0YWJUYXJnZXQhOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBtdWx0aXNlbGVjdFN1YnNjcmliZShzdWJzY3JpYmU6IGJvb2xlYW4gPSB0cnVlKSB7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5tdWx0aVNlbGVjdFZpc2libGUkXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmlzaWJsZSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pc0Ryb3Bkb3duVmlzaWJsZSAhPT0gdmlzaWJsZSkge1xuICAgICAgICAgIHRoaXMuaXNEcm9wZG93blZpc2libGUgPSB2aXNpYmxlO1xuICAgICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHZpc2libGUpO1xuICAgICAgICAgIGlmICghdmlzaWJsZSkge1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsZXIpIHtcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxWaWV3cG9ydD8uc2V0UmVuZGVyZWRSYW5nZSh7IHN0YXJ0OiAwLCBlbmQ6IHRoaXMudmlzaWJsZUl0ZW1zIH0pO1xuICAgICAgICAgICAgICB0aGlzLnNjcm9sbFZpZXdwb3J0Py5zY3JvbGxUb0luZGV4KDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVJdGVtKDApO1xuICAgICAgfSk7XG5cbiAgfVxuXG4gIGNsZWFyQWxsT3B0aW9ucygkZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBlbmFibGVkT3B0aW9ucyA9IEFycmF5LmZyb20odGhpcy5vcHRpb25zU2VsZWN0ZWQudmFsdWVzKCkpLmZpbHRlcihvcHRpb24gPT4gIW9wdGlvbi5kaXNhYmxlZCkubWFwKG9wdGlvbiA9PiBvcHRpb24udmFsdWUpO1xuICAgICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QoLi4uZW5hYmxlZE9wdGlvbnMpO1xuICAgICAgdGhpcy5yZW1vdmVBbGxVc2VyT3B0aW9ucygpO1xuXG4gICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICBpZiAoJGV2ZW50KSB7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXMoJ3Byb2dyYW0nLCAnY2xlYXJBbGxPcHRpb25zJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZWxlY3RBbGxPcHRpb25zKCkge1xuICAgIGNvbnN0IGVuYWJsZWRPcHRpb25zID0gQXJyYXkuZnJvbSh0aGlzLiNvcHRpb25zLnZhbHVlcygpKS5maWx0ZXIob3B0aW9uID0+IG9wdGlvbi52aXNpYmxlICYmICFvcHRpb24uZGlzYWJsZWQpLm1hcChvcHRpb24gPT4gb3B0aW9uLnZhbHVlKTtcbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoLi4uZW5hYmxlZE9wdGlvbnMpO1xuICAgIHRoaXMuaW5wdXRFbGVtZW50U2l6ZSgpO1xuICB9XG5cbiAgaGFuZGxlVGFnUmVtb3ZlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdCh2YWx1ZSk7XG4gICAgdGhpcy5zZXRGb2N1cygncHJvZ3JhbScsICdoYW5kbGVUYWdSZW1vdmUnKTtcbiAgfVxuXG4gIHNldEZvY3VzKG9yaWdpbjogRm9jdXNPcmlnaW4gPSAncHJvZ3JhbScsIG1ldGhvZE5hbWU/OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50ID0gPEhUTUxFbGVtZW50Pih0aGlzLmlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudCA/PyB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgY29uc3QgcHJldmVudFNjcm9sbCA9IG9yaWdpbiA9PT0gJ3Byb2dyYW0nO1xuICAgIHRoaXMuZm9jdXNNb25pdG9yPy5mb2N1c1ZpYShlbGVtZW50LCBvcmlnaW4sIHsgcHJldmVudFNjcm9sbDogcHJldmVudFNjcm9sbCB9KTtcbiAgICAvLyBjb25zb2xlLmxvZygnc2V0Rm9jdXMnLCBvcmlnaW4sIG1ldGhvZE5hbWUsICdwcmV2ZW50U2Nyb2xsOicsIHByZXZlbnRTY3JvbGwsIGVsZW1lbnQudGFnTmFtZSwgdGhpcy52YWx1ZSk7XG4gIH1cblxuICBmaWx0ZXJPcHRpb25zKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZWFyY2hTdHJpbmcgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpID8/ICcnO1xuICAgIHRoaXMuI29wdGlvbnMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChzZWFyY2hTdHJpbmcgPT09ICcnKSB7XG4gICAgICAgIGl0ZW0udmlzaWJsZSA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5zZWFyY2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaXRlbS52aXNpYmxlID0gdGhpcy5zZWFyY2goaXRlbSwgc2VhcmNoU3RyaW5nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCh0aGlzLnNlYXJjaCA9PT0gJ2V4dGVybmFsJyAmJiAhaXRlbS5jdXN0b20pIHx8ICFzZWFyY2hTdHJpbmcpIHtcbiAgICAgICAgLy8gaXRlbS52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaXRlbS52aXNpYmxlID0gaXRlbS5sYWJlbD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcpID8/IHRydWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS51cGRhdGVPcHRpb25zQXJyYXkoQXJyYXkuZnJvbSh0aGlzLiNvcHRpb25zLnZhbHVlcygpKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udmlzaWJsZSkpO1xuICAgIHRoaXMudXNlck9wdGlvbnNBcnJheSQubmV4dChBcnJheS5mcm9tKHRoaXMuI29wdGlvbnMudmFsdWVzKCkpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5jdXN0b20pKTtcbiAgfVxuXG4gIGNyZWF0ZU5hdGl2ZVNlbGVjdCgpIHtcbiAgICBpZiAoIXRoaXMubmF0aXZlSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KE11bHRpU2VsZWN0TmF0aXZlU2VsZWN0Q29tcG9uZW50KTtcbiAgICB0aGlzLnVwZGF0ZU5hdGl2ZVNlbGVjdCgpO1xuICB9XG5cbiAgdXBkYXRlTmF0aXZlU2VsZWN0KCkge1xuICAgIGlmICghdGhpcy5uYXRpdmVTZWxlY3RSZWYgfHwgIXRoaXMubmF0aXZlSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IEFycmF5LmZyb20odGhpcy5vcHRpb25zU2VsZWN0ZWQpLm1hcChpdGVtID0+IHtcbiAgICAgIGNvbnN0IHsgc2VsZWN0ZWQsIHZhbHVlLCBsYWJlbCB9ID0gaXRlbVsxXTtcbiAgICAgIHJldHVybiB7IHNlbGVjdGVkLCB2YWx1ZSwgbGFiZWwgfTtcbiAgICB9KTtcblxuICAgIHRoaXMubmF0aXZlU2VsZWN0UmVmLmluc3RhbmNlLm11bHRpcGxlID0gdGhpcy5tdWx0aXBsZTtcbiAgICB0aGlzLm5hdGl2ZVNlbGVjdFJlZi5pbnN0YW5jZS5mb3JtID0gdGhpcy5uYXRpdmVGb3JtSWQ7XG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYuaW5zdGFuY2UuaWQgPSB0aGlzLm5hdGl2ZUlkO1xuICAgIHRoaXMubmF0aXZlU2VsZWN0UmVmLmluc3RhbmNlLm5hbWUgPSB0aGlzLm5hdGl2ZU5hbWU7XG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYuaW5zdGFuY2Uub3B0aW9ucyA9IFsuLi5vcHRpb25zXTtcbiAgICB0aGlzLm5hdGl2ZVNlbGVjdFJlZi5pbnN0YW5jZS5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7XG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYuaW5zdGFuY2UuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBpbnB1dEVsZW1lbnRTaXplKCkge1xuICAgIGlmICh0aGlzLmlucHV0RWxlbWVudCkge1xuICAgICAgaWYgKCF0aGlzLmlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudD8uZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5pbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQsICdzaXplJywgKHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoICsgMikudG9TdHJpbmcoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudCwgJ3NpemUnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5pbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQsICdzaXplJywgJzInKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVTZWFyY2hLZXlEb3duKCRldmVudDogS2V5Ym9hcmRFdmVudCkge1xuXG4gICAgaWYgKFsnRW50ZXInXS5pbmNsdWRlcygkZXZlbnQua2V5KSAmJiB0aGlzLnNlYXJjaFZhbHVlLmxlbmd0aCAmJiB0aGlzLmFsbG93Q3JlYXRlT3B0aW9ucykge1xuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAkZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmFkZFVzZXJPcHRpb24oKTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoIHx8IHRoaXMub3B0aW9uc1NlbGVjdGVkLnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoWydCYWNrc3BhY2UnLCAnRGVsZXRlJ10uaW5jbHVkZXMoJGV2ZW50LmtleSkpIHtcbiAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbnN0IGxhc3QgPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5maWx0ZXIob3B0aW9uID0+ICFvcHRpb24uZGlzYWJsZWQpLnBvcCgpO1xuICAgICAgaWYgKGxhc3QpIHtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QobGFzdC52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c01vbml0b3IobW9uaXRvcjogYm9vbGVhbikge1xuICAgIGlmIChtb25pdG9yICYmICF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAvLyB0b2RvIGZvY3VzIG9uIGlucHV0IHdoZW4gdGFiIGluXG4gICAgICAvLyB0aGlzLmZvY3VzTW9uaXRvcj8ubW9uaXRvcih0aGlzLmVsZW1lbnRSZWYsIGZhbHNlKVxuICAgICAgLy8gICAucGlwZShcbiAgICAgIC8vICAgICB0YXAob3JpZ2luID0+IHtcbiAgICAgIC8vICAgICAgIGlmIChvcmlnaW4gPT09ICdrZXlib2FyZCcgJiYgdGhpcy5zZWFyY2ggJiYgdGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAvLyAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIC8vICAgICAgIH1cbiAgICAgIC8vICAgICB9KSxcbiAgICAgIC8vICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZilcbiAgICAgIC8vICAgKVxuICAgICAgLy8gICAuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLmZvY3VzTW9uaXRvclN1YnNjcmlwdGlvbiA9IHRoaXMuZm9jdXNNb25pdG9yPy5tb25pdG9yKHRoaXMuZWxlbWVudFJlZiwgdHJ1ZSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gdG8gYXZvaWQgZm9jdXMgbG9zdCBvbiBzcGVlZCBzY3JvbGxpbmcgd2l0aCB2aXJ0dWFsU2Nyb2xsXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgob3JpZ2luKSA9PiB7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3VidHJlZUZvY3VzZWQgPSB0aGlzLmZvY3VzT3JpZ2luKG9yaWdpbik7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNNb25pdG9yPy5zdG9wTW9uaXRvcmluZyh0aGlzLmVsZW1lbnRSZWYpO1xuICAgICAgdGhpcy5mb2N1c01vbml0b3JTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgYWN0aXZlT3B0aW9uOiAoRm9jdXNhYmxlT3B0aW9uICYgTXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQpIHwgbnVsbCA9IG51bGw7XG5cbiAgaGFuZGxlU2Nyb2xsZWRJbmRleENoYW5nZShzY3JvbGxlZEluZGV4OiBudW1iZXIsIHNjcm9sbFZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQpIHtcblxuICAgIGlmICghdGhpcy5zY3JvbGxWaWV3cG9ydCkge1xuICAgICAgdGhpcy5zY3JvbGxWaWV3cG9ydCA9IHNjcm9sbFZpZXdwb3J0O1xuICAgIH1cblxuICAgIGNvbnN0IGF2YWlsYWJsZU9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24udmlzaWJsZSk7XG4gICAgY29uc3QgZmlyc3RWaXNpYmxlT3B0aW9uID0gYXZhaWxhYmxlT3B0aW9uc1tzY3JvbGxlZEluZGV4XTtcbiAgICBjb25zdCBhY3RpdmVPcHRpb25JbmRleCA9IGF2YWlsYWJsZU9wdGlvbnMuZmluZEluZGV4KG9wdGlvbiA9PiBvcHRpb24udmFsdWUgPT09IHRoaXMuYWN0aXZlT3B0aW9uPy52YWx1ZSk7XG4gICAgY29uc3Qgb3B0aW9uc0FycmF5ID0gdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50LnRvQXJyYXkoKTtcblxuICAgIGlmIChzY3JvbGxlZEluZGV4ID4gYWN0aXZlT3B0aW9uSW5kZXgpIHtcbiAgICAgIGNvbnN0IGZpcnN0VmlzaWJsZUl0ZW0gPSBvcHRpb25zQXJyYXkuZmluZChvcHRpb24gPT4gb3B0aW9uLnZhbHVlID09PSBmaXJzdFZpc2libGVPcHRpb24/LnZhbHVlKTtcbiAgICAgIGlmIChmaXJzdFZpc2libGVJdGVtICYmIHNjcm9sbGVkSW5kZXgpIHtcbiAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbShmaXJzdFZpc2libGVJdGVtKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2Nyb2xsZWRJbmRleCArIHRoaXMudmlzaWJsZUl0ZW1zIC0gMiA8PSBhY3RpdmVPcHRpb25JbmRleCkge1xuICAgICAgY29uc3QgbGFzdFZpc2libGVJdGVtID0gb3B0aW9uc0FycmF5LmZpbmRJbmRleChvcHRpb24gPT4gb3B0aW9uLnZhbHVlID09PSBmaXJzdFZpc2libGVPcHRpb24udmFsdWUpO1xuICAgICAgaWYgKGxhc3RWaXNpYmxlSXRlbSA+IC0xKSB7XG4gICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0obGFzdFZpc2libGVJdGVtICsgdGhpcy52aXNpYmxlSXRlbXMgLSAyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgfVxuXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBvcHRpb246IElPcHRpb24pIHtcbiAgICByZXR1cm4gb3B0aW9uLnZhbHVlO1xuICB9XG5cbiAgaGFuZGxlU2VhcmNoVmFsdWVDaGFuZ2Uoc2VhcmNoVmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZTtcbiAgICBpZiAoIXNlYXJjaFZhbHVlKSB7XG4gICAgICB0aGlzLnNjcm9sbFZpZXdwb3J0Py5zY3JvbGxUb0luZGV4KDApO1xuICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgaWYgKHRoaXMuc3VidHJlZUZvY3VzZWQpIHtcbiAgICAgICAgdGhpcy5zZXRGb2N1cygncHJvZ3JhbScsICdoYW5kbGVTZWFyY2hWYWx1ZUNoYW5nZScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0VmlydHVhbFNjcm9sbGVyKCkge1xuXG4gICAgaWYgKCF0aGlzLnZpcnR1YWxTY3JvbGxlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG11bHRpU2VsZWN0T3B0aW9uVGVtcGxhdGUgZm9yIHZpcnR1YWxTY3JvbGxlclxuICAgIHRoaXMuY29udGVudFRlbXBsYXRlcy5mb3JFYWNoKChjaGlsZDogVGVtcGxhdGVJZERpcmVjdGl2ZSkgPT4ge1xuICAgICAgdGhpcy50ZW1wbGF0ZXNbY2hpbGQuaWRdID0gY2hpbGQudGVtcGxhdGVSZWY7XG4gICAgfSk7XG5cbiAgICAvLyBpZiBubyB0ZW1wbGF0ZSBmb3VuZCwgZ2V0IGRlZmF1bHRNdWx0aVNlbGVjdE9wdGlvblRlbXBsYXRlIGZyb20gdmlld1xuICAgIGlmICghdGhpcy50ZW1wbGF0ZXNbJ211bHRpU2VsZWN0T3B0aW9uVGVtcGxhdGUnXSkge1xuICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50ID0gdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNWaWV3O1xuICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8vIG11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQgZ2V0cyBvdXQgb2Ygb3JkZXIgb24gY2hhbmdlc1xuICAgIC8vIGRvIHNvcnQoKSBhbmQgcmVzZXQoKVxuICAgIGNvbnN0IGluZGV4T2ZPcHRpb24gPSAob3B0aW9uOiBNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudCkgPT4ge1xuICAgICAgcmV0dXJuIFsuLi5vcHRpb24uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQuY2hpbGRyZW5dPy5pbmRleE9mKG9wdGlvbi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25zQ2hhbmdlJDogT2JzZXJ2YWJsZTxRdWVyeUxpc3Q8TXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQ+PiA9IHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudC5jaGFuZ2VzO1xuXG4gICAgY29uc3Qgc29ydGVkT3B0aW9ucyQgPSBvcHRpb25zQ2hhbmdlJC5waXBlKFxuICAgICAgbWFwKG9wdGlvbnMgPT4gb3B0aW9ucy50b0FycmF5KCkpLFxuICAgICAgZmlsdGVyKG9wdGlvbnMgPT4gb3B0aW9ucy5sZW5ndGggPiAwKSxcbiAgICAgIG1hcChvcHRpb25zID0+IG9wdGlvbnMuc29ydCgoYSwgYikgPT4gaW5kZXhPZk9wdGlvbihhKSAtIGluZGV4T2ZPcHRpb24oYikpKSxcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICk7XG5cbiAgICBzb3J0ZWRPcHRpb25zJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShzb3J0ZWRPcHRpb25zID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudC5yZXNldChzb3J0ZWRPcHRpb25zKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5zY3JvbGxWaWV3cG9ydFZpZXcuY2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIG1hcChjaGFuZ2VzID0+IGNoYW5nZXMudG9BcnJheSgpWzBdKSxcbiAgICAgICAgdGFwKChzY3JvbGxWaWV3cG9ydCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVmlld3BvcnQgPSBzY3JvbGxWaWV3cG9ydDtcblxuICAgICAgICAgICAgICBjb25zdCBjZGtWaXJ0dWFsU2Nyb2xsQ29udGVudFdyYXBwZXIgPSB0aGlzLnNjcm9sbFZpZXdwb3J0LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50Py5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgICAgICAgaWYgKGNka1ZpcnR1YWxTY3JvbGxDb250ZW50V3JhcHBlcikge1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGNka1ZpcnR1YWxTY3JvbGxDb250ZW50V3JhcHBlciwgbnVsbCkgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSBwYXJzZUludChzdHlsZT8uZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1sZWZ0JykgPz8gJzEycHgnKSAqIDM7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvblJlY29yZHMpID0+IHtcbiAgICAgICAgICAgICAgICAgIG11dGF0aW9uUmVjb3Jkcy5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuYWRkZWROb2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLm5vZGVOYW1lID09PSAnQy1NVUxUSS1TRUxFQ1QtT1BUSU9OJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSAobm9kZSBhcyBIVE1MRWxlbWVudCkub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPiB0aGlzLml0ZW1NaW5XaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1NaW5XaWR0aCA9IHdpZHRoICsgcGFkZGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBvYnNlcnZlcj8ub2JzZXJ2ZShjZGtWaXJ0dWFsU2Nyb2xsQ29udGVudFdyYXBwZXIsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy4jZGVzdHJveSQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIG9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRMaXN0S2V5TWFuYWdlcigpIHtcblxuICAgIC8vIHJ1biBvbmNlIG9uIG11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQgZmlyc3Qgc2V0XG4gICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50LmNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGNoYW5nZXMpID0+IHRoaXMudmlydHVhbFNjcm9sbGVyKSxcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldEZvY3VzS2V5TWFuYWdlcih0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBzZXRGb2N1c0tleU1hbmFnZXIoZm9jdXNhYmxlT3B0aW9uczogKFF1ZXJ5TGlzdDxNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudD4gfCBNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudFtdKSkge1xuXG4gICAgLy8gdGhpcy5mb2N1c0tleU1hbmFnZXI/LmRlc3Ryb3koKTtcblxuICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyID0gbmV3IEZvY3VzS2V5TWFuYWdlcihmb2N1c2FibGVPcHRpb25zKVxuICAgICAgLndpdGhIb21lQW5kRW5kKClcbiAgICAgIC53aXRoUGFnZVVwRG93bigpXG4gICAgICAuc2tpcFByZWRpY2F0ZSgob3B0aW9uKSA9PiAob3B0aW9uLmRpc2FibGVkIHx8ICFvcHRpb24udmlzaWJsZSkpO1xuXG4gICAgaWYgKCF0aGlzLl92aXJ0dWFsU2Nyb2xsZXIpIHtcbiAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLndpdGhUeXBlQWhlYWQoMzAwKTtcbiAgICB9XG5cbiAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci50YWJPdXRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZiksXG4gICAgICAgIHRhcCgoKSA9PiB7fSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmNoYW5nZVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShjaGFuZ2UgPT4ge1xuICAgICAgICBpZiAoY2hhbmdlIDwgMCkge1xuICAgICAgICAgIHRoaXMuYWN0aXZlT3B0aW9uID8gdGhpcy5mb2N1c0tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSh0aGlzLmFjdGl2ZU9wdGlvbikgOiB0aGlzLnNldEZpcnN0SXRlbUFjdGl2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aXZlT3B0aW9uID0gdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbTtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gPE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50PnRoaXMuYWN0aXZlT3B0aW9uO1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5mb2N1c0NoYW5nZShvcHRpb24pO1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zVmlldy5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICAgIH0pO1xuXG4gICAgLy8gaWYgKCF0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtKSB7XG4gICAgLy8gICB0aGlzLnNldEZpcnN0SXRlbUFjdGl2ZSgpO1xuICAgIC8vIH1cbiAgfVxuXG4gIGdldCBmaXJzdEZvY3VzYWJsZUl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudD8uZmluZChvcHRpb24gPT4gb3B0aW9uLnZpc2libGUgJiYgIW9wdGlvbi5kaXNhYmxlZCkgPz8gdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNWaWV3Py5maW5kKG9wdGlvbiA9PiBvcHRpb24udmlzaWJsZSAmJiAhb3B0aW9uLmRpc2FibGVkKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rmlyc3RJdGVtQWN0aXZlKCkge1xuICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlSXRlbSA9IHRoaXMuZmlyc3RGb2N1c2FibGVJdGVtO1xuICAgIGZpcnN0Rm9jdXNhYmxlSXRlbSA/IHRoaXMuZm9jdXNLZXlNYW5hZ2VyPy5zZXRBY3RpdmVJdGVtKGZpcnN0Rm9jdXNhYmxlSXRlbSkgOiB0aGlzLmZvY3VzS2V5TWFuYWdlcj8uc2V0Rmlyc3RJdGVtQWN0aXZlKCk7XG4gICAgdGhpcy5hY3RpdmVPcHRpb24gPSB0aGlzLmZvY3VzS2V5TWFuYWdlcj8uYWN0aXZlSXRlbSA/PyBudWxsO1xuICB9XG5cbiAgdXBkYXRlQWN0aXZlSXRlbShpbmRleDogbnVtYmVyKTogdm9pZDtcblxuICB1cGRhdGVBY3RpdmVJdGVtPFRJdGVtIGV4dGVuZHMgKE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50ICYgRm9jdXNhYmxlT3B0aW9uKT4oaXRlbTogVEl0ZW0pOiB2b2lkO1xuXG4gIHVwZGF0ZUFjdGl2ZUl0ZW0oaXRlbTogYW55KSB7XG4gICAgY29uc3QgZmlyc3RGb2N1c2FibGVJdGVtID0gdGhpcy5maXJzdEZvY3VzYWJsZUl0ZW0gPz8gaXRlbTtcbiAgICBmaXJzdEZvY3VzYWJsZUl0ZW0gPyB0aGlzLmZvY3VzS2V5TWFuYWdlcj8udXBkYXRlQWN0aXZlSXRlbShmaXJzdEZvY3VzYWJsZUl0ZW0pIDogdGhpcy5mb2N1c0tleU1hbmFnZXI/LnVwZGF0ZUFjdGl2ZUl0ZW0oMCk7XG4gICAgaWYgKHRoaXMuZm9jdXNLZXlNYW5hZ2VyPy5hY3RpdmVJdGVtKSB7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/LmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgb3B0aW9uLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc1ZpZXc/LmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgb3B0aW9uLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtLmFjdGl2ZSA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlT3B0aW9uID0gdGhpcy5mb2N1c0tleU1hbmFnZXI/LmFjdGl2ZUl0ZW0gPz8gbnVsbDtcbiAgfVxuXG4gIGhhbmRsZUluZGljYXRvckNsaWNrKCRldmVudDogTW91c2VFdmVudCkge1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnZpc2libGUgPSAhdGhpcy52aXNpYmxlO1xuICB9XG59XG4iLCI8Yy1kcm9wZG93biAjZHJvcGRvd249XCJjRHJvcGRvd25cIlxuICAgICAgICAgICAgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCJcbiAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwiJ291dHNpZGUnXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm11bHRpc2VsZWN0Q2xhc3Nlc1wiXG4gICAgICAgICAgICBbcG9wcGVyT3B0aW9uc109XCJwb3BwZXJPcHRpb25zXCI+XG4gIDxkaXYgI2Ryb3Bkb3duVG9nZ2xlPVwiY0Ryb3Bkb3duVG9nZ2xlXCIgW2NhcmV0XT1cImZhbHNlXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgY0Ryb3Bkb3duVG9nZ2xlIHJvbGU9XCJidXR0b25cIlxuICAgICAgIGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3QtaW5wdXQtZ3JvdXBcIj5cbiAgICA8c3BhblxuICAgICAgW25nQ2xhc3NdPVwieydmb3JtLW11bHRpLXNlbGVjdC1zZWxlY3Rpb24nOiB0cnVlLCAnZm9ybS1tdWx0aS1zZWxlY3Qtc2VsZWN0aW9uLXRhZ3MnOiAoc2VsZWN0aW9uVHlwZSA9PT0gJ3RhZ3MnICYmIHNlbGVjdGVkT3B0aW9ucy5sZW5ndGgpfVwiPlxuICAgICAgQGlmIChzZWxlY3Rpb25UeXBlID09PSAndGFncycpIHtcbiAgICAgICAgQGlmIChvcHRpb25zU2VsZWN0ZWQkIHwgYXN5bmM7IGFzIG9wdGlvblRhZ3MpIHtcbiAgICAgICAgICBAZm9yIChvcHRpb24gb2Ygb3B0aW9uVGFnczsgdHJhY2sgb3B0aW9uLnZhbHVlOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgPGMtbXVsdGktc2VsZWN0LXRhZ1xuICAgICAgICAgICAgICAocmVtb3ZlKT1cImhhbmRsZVRhZ1JlbW92ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZCA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJvcHRpb24ubGFiZWwgPz8gb3B0aW9uLnZhbHVlPy50b1N0cmluZygpXCJcbiAgICAgICAgICAgICAgW29wdGlvbl09XCJvcHRpb25cIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLW11bHRpLXNlbGVjdC10YWcgdGV4dC10cnVuY2F0ZVwiXG4gICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gQGVsc2UgaWYgKHNlbGVjdGlvblR5cGUgPT09ICd0ZXh0JyAmJiAhIXNlbGVjdGVkT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgQGZvciAob3B0aW9uIG9mIHNlbGVjdGVkT3B0aW9uczsgdHJhY2sgb3B0aW9uLnZhbHVlOyBsZXQgaSA9ICRpbmRleCwgbGFzdCA9ICRsYXN0KSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLW11bHRpLXNlbGVjdC10ZXh0IHRleHQtdHJ1bmNhdGVcIj57eyBvcHRpb24ubGFiZWwgfX17eyBsYXN0ID8gJyZuYnNwOycgOiAnLCZuYnNwOycgfX08L3NwYW4+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEBpZiAoIXNlYXJjaCkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcGxhY2Vob2xkZXIgdGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgIHt7IG9wdGlvbnNTZWxlY3RlZC5zaXplID09PSAwID8gcGxhY2Vob2xkZXIgOiBjb3VudGVyUGxhY2Vob2xkZXJUZXh0IH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIH1cbiAgICAgIEBpZiAoc2VhcmNoKSB7XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICNpbnB1dEVsZW1lbnRcbiAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVTZWFyY2hLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJoYW5kbGVTZWFyY2hWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAwID8gcGxhY2Vob2xkZXIgOiBjb3VudGVyUGxhY2Vob2xkZXJUZXh0XCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgIXNlYXJjaFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAnZm9ybS1tdWx0aS1zZWxlY3Qtc2VhcmNoJzogdHJ1ZSwgZGlzYWJsZWQ6IChkaXNhYmxlZCB8fCAhc2VhcmNoKSwgJ3RleHQtdHJ1bmNhdGUnOiB0cnVlIH1cIlxuICAgICAgICAgIFtuZ01vZGVsXT1cInNlYXJjaFZhbHVlXCJcbiAgICAgICAgICBbdmFsdWVdPVwic2VhcmNoVmFsdWVcIlxuICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgY011bHRpU2VsZWN0U2VhcmNoXG4gICAgICAgICAgc2l6ZT1cIjJcIlxuICAgICAgICAgIHRhYmluZGV4PVwie3sgZGlzYWJsZWQgPyAtMSA6IDAgfX1cIlxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgPlxuICAgICAgfVxuICAgIDwvc3Bhbj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3QtYnV0dG9uc1wiPlxuICAgICAgQGlmICghIWNsZWFuZXIgJiYgb3B0aW9uc1NlbGVjdGVkLnNpemUgPiAwICYmICFkaXNhYmxlZCkge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFyQWxsT3B0aW9ucygkZXZlbnQpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgKCFpc0Ryb3Bkb3duVmlzaWJsZSAmJiBjbGVhbmVyICE9PSAnYWN0aXZlJylcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhciBhbGxcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3QtY2xlYW5lclwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgIH1cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cImhhbmRsZUluZGljYXRvckNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tbXVsdGktc2VsZWN0LWluZGljYXRvclwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgQGlmICghZGlzYWJsZWQpIHtcbiAgICA8ZGl2ICNkcm9wZG93bk1lbnU9XCJjRHJvcGRvd25NZW51XCIgW3Zpc2libGVdPVwiZHJvcGRvd24udmlzaWJsZVwiIGNEcm9wZG93bk1lbnVcbiAgICAgICAgIGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3QtZHJvcGRvd25cIiByb2xlPVwibWVudVwiPlxuICAgICAgQGlmICh2aXNpYmxlT3B0aW9ucygpICYmIG9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBAaWYgKHNlbGVjdEFsbCAmJiBtdWx0aXBsZSAmJiAhdmlydHVhbFNjcm9sbGVyKSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEFsbE9wdGlvbnMoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tbXVsdGktc2VsZWN0LWFsbFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgc2VsZWN0QWxsTGFiZWwgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQGlmICgodmlzaWJsZU9wdGlvbnMoKSAmJiBvcHRpb25zLmxlbmd0aCA+IDApIHx8IGlzTG9hZGluZygpKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ2aXJ0dWFsU2Nyb2xsZXIgPyBtdWx0aXNlbGVjdFZpcnR1YWxTY3JvbGxlciA6IG11bHRpc2VsZWN0T3B0aW9uc0RpdlwiIC8+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tbXVsdGktc2VsZWN0LW9wdGlvbnMtZW1wdHlcIj57eyBzZWFyY2hOb1Jlc3VsdHNMYWJlbCB9fTwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChpc0xvYWRpbmcoKSkge1xuICAgICAgICA8Yy1lbGVtZW50LWNvdmVyIFtuZ1N0eWxlXT1cInsnYm9yZGVyLXJhZGl1cyc6ICc2cHgnLCAnei1pbmRleCc6IDJ9XCIgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuPC9jLWRyb3Bkb3duPlxuXG48bmctdGVtcGxhdGUgI211bHRpc2VsZWN0VmlydHVhbFNjcm9sbGVyPlxuICBAZGVmZXIgKG9uIGltbWVkaWF0ZSkge1xuICAgIEBpZiAoKG9wdGlvbnNBcnJheSQgfCBhc3luYyk7IGFzIG9wdGlvbnNBcnJheSkge1xuICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxuICAgICAgICAjc2Nyb2xsVmlld3BvcnRcbiAgICAgICAgKHNjcm9sbGVkSW5kZXhDaGFuZ2UpPVwiaGFuZGxlU2Nyb2xsZWRJbmRleENoYW5nZSgkZXZlbnQsIHNjcm9sbFZpZXdwb3J0KVwiXG4gICAgICAgIFtpdGVtU2l6ZV09XCJpdGVtU2l6ZVwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIm9wdGlvbnNNYXhIZWlnaHQgIT09ICdhdXRvJyA/IHsgJ2hlaWdodC5weCc6IG9wdGlvbnNNYXhIZWlnaHQsICdtYXhIZWlnaHQucHgnOiBvcHRpb25zTWF4SGVpZ2h0LCAnbWluV2lkdGgucHgnOiBpdGVtTWluV2lkdGggPz8gMTk2LCBvdmVyZmxvd1g6ICdoaWRkZW4nIH0gOiB7ICdtaW5XaWR0aC5weCc6IGl0ZW1NaW5XaWR0aCA/PyAxOTYsIG92ZXJmbG93WDogJ2hpZGRlbid9XCJcbiAgICAgICAgbWF4QnVmZmVyUHg9XCJ7e2l0ZW1TaXplICogdmlzaWJsZUl0ZW1zfX1cIlxuICAgICAgICBtaW5CdWZmZXJQeD1cInt7aXRlbVNpemUgKiB2aXNpYmxlSXRlbXN9fVwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3Qtb3B0aW9uc1wiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgI2Nka1ZpcnR1YWxGb3JcbiAgICAgICAgICAqY2RrVmlydHVhbEZvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uc0FycmF5OyB0cmFja0J5OiB0cmFja0J5Rm47IHRlbXBsYXRlQ2FjaGVTaXplOiAwOyBldmVuIGFzIGV2ZW47IG9kZCBhcyBvZGQ7IGluZGV4IGFzIGluZGV4OyBjb3VudCBhcyBjb3VudDsgZmlyc3QgYXMgZmlyc3Q7IGxhc3QgYXMgbGFzdDtcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiBvcHRpb24sIGV2ZW4sIG9kZCwgaW5kZXgsIGNvdW50LCBmaXJzdCwgbGFzdH1cIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlc1snbXVsdGlTZWxlY3RPcHRpb25UZW1wbGF0ZSddIHx8IGRlZmF1bHRNdWx0aVNlbGVjdE9wdGlvblRlbXBsYXRlXCJcbiAgICAgICAgLz5cbiAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgIH1cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtdWx0aXNlbGVjdE9wdGlvbnNEaXY+XG4gIDxkaXZcbiAgICBbbmdDbGFzc109XCJ7J2Zvcm0tbXVsdGktc2VsZWN0LW9wdGlvbnMnOiB2aXNpYmxlT3B0aW9ucygpfVwiXG4gICAgW25nU3R5bGVdPVwib3B0aW9uc01heEhlaWdodCAhPT0gJ2F1dG8nID8geyAnbWF4SGVpZ2h0LnB4Jzogb3B0aW9uc01heEhlaWdodCwgb3ZlcmZsb3dZOiAnc2Nyb2xsJyB9IDoge31cIlxuICA+XG4gICAgPG5nLWNvbnRlbnQgLz5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInVzZXJPcHRpb25zVGVtcGxhdGVcIiAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdE11bHRpU2VsZWN0T3B0aW9uVGVtcGxhdGUgbGV0LW9wdGlvbj5cbiAgPGMtbXVsdGktc2VsZWN0LW9wdGlvblxuICAgIFtkaXNhYmxlZF09XCJvcHRpb24uZGlzYWJsZWRcIlxuICAgIFtsYWJlbF09XCJvcHRpb24ubGFiZWxcIlxuICAgIFt0ZXh0XT1cIm9wdGlvbi50ZXh0XCJcbiAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICBbdmlzaWJsZV09XCJvcHRpb24udmlzaWJsZVwiXG4gID5cbiAgICB7eyBvcHRpb24udGV4dCB9fVxuICA8L2MtbXVsdGktc2VsZWN0LW9wdGlvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdXNlck9wdGlvbnNUZW1wbGF0ZT5cbiAgQGZvciAob3B0aW9uIG9mIHVzZXJPcHRpb25zQXJyYXkkIHwgYXN5bmM7IHRyYWNrIG9wdGlvbjsgbGV0IGV2ZW4gPSAkZXZlbiwgb2RkID0gJG9kZCwgaW5kZXggPSAkaW5kZXgsIGNvdW50ID0gJGNvdW50LCBmaXJzdCA9ICRmaXJzdCwgbGFzdCA9ICRsYXN0KSB7XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVzWydtdWx0aVNlbGVjdE9wdGlvblRlbXBsYXRlJ10gfHwgZGVmYXVsdE11bHRpU2VsZWN0T3B0aW9uVGVtcGxhdGVcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IG9wdGlvbiwgZXZlbiwgb2RkLCBpbmRleCwgY291bnQsIGZpcnN0LCBsYXN0fVwiXG4gICAgLz5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
1255
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmV1aS1hbmd1bGFyL3NyYy9saWIvbXVsdGktc2VsZWN0L211bHRpLXNlbGVjdC9tdWx0aS1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZXVpLWFuZ3VsYXIvc3JjL2xpYi9tdWx0aS1zZWxlY3QvbXVsdGktc2VsZWN0L211bHRpLXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsZ0JBQWdCLEVBRWhCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFJTCxlQUFlLEVBSWYsTUFBTSxFQUdOLE1BQU0sRUFHTixTQUFTLEVBQ1QsWUFBWSxFQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRyxPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBbUIsZUFBZSxFQUE2QixNQUFNLG1CQUFtQixDQUFDO0FBQ2hHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxlQUFlLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM5RyxPQUFPLEVBQUUsZUFBZSxFQUFjLElBQUksRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUs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QUFDLFNBQVM7Z0JBS3lDLGdCQUFnQjtzQkFBNUUsZUFBZTt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7Z0JBSWhDLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYztnQkFDRSxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQzJCLFFBQVE7c0JBQTNELFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUNRLGNBQWM7c0JBQXZFLFNBQVM7dUJBQUMsdUJBQXVCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUdwRCxXQUFXO3NCQURkLFdBQVc7dUJBQUMsT0FBTztnQkFtQlIsbUJBQW1CO3NCQUQ5QixXQUFXO3VCQUFDLDJCQUEyQjtnQkFNNUIsWUFBWTtzQkFEdkIsV0FBVzt1QkFBQyxvQkFBb0I7Z0JBTXJCLFFBQVE7c0JBRG5CLFdBQVc7dUJBQUMsZUFBZTtnQkFhTyxPQUFPO3NCQUF6QyxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF1RUksU0FBUztzQkFBN0MsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBZ0NuQyxPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBEZXN0cm95UmVmLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIEl0ZXJhYmxlRGlmZmVyLFxuICBJdGVyYWJsZURpZmZlcnMsXG4gIE5nWm9uZSxcbiAgbnVtYmVyQXR0cmlidXRlLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBzaWduYWwsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEFzeW5jUGlwZSwgSTE4blBsdXJhbFBpcGUsIE5nQ2xhc3MsIE5nU3R5bGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZvY3VzYWJsZU9wdGlvbiwgRm9jdXNLZXlNYW5hZ2VyLCBGb2N1c01vbml0b3IsIEZvY3VzT3JpZ2luIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgQ2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbCwgQ2RrVmlydHVhbEZvck9mLCBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgc2tpcCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0V2l0aCwgZGVib3VuY2VUaW1lLCBkZWxheSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCB0YWtlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNb2RpZmllciwgTW9kaWZpZXJBcmd1bWVudHMsIE9wdGlvbnMgfSBmcm9tICdAcG9wcGVyanMvY29yZSc7XG5cbmltcG9ydCB7XG4gIERyb3Bkb3duQ29tcG9uZW50LFxuICBEcm9wZG93bkRpdmlkZXJEaXJlY3RpdmUsXG4gIERyb3Bkb3duTWVudURpcmVjdGl2ZSxcbiAgRHJvcGRvd25Ub2dnbGVEaXJlY3RpdmVcbn0gZnJvbSAnLi4vLi4vZHJvcGRvd24nO1xuaW1wb3J0IHsgRWxlbWVudENvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZWxlbWVudC1jb3Zlcic7XG5pbXBvcnQgeyBUZW1wbGF0ZUlkRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vc2hhcmVkJztcbmltcG9ydCB7IElNdWx0aVNlbGVjdCwgSU9wdGlvbiwgT3B0aW9uc01hcCwgU2VhcmNoRm4gfSBmcm9tICcuLi9tdWx0aS1zZWxlY3QudHlwZSc7XG5pbXBvcnQgeyBNdWx0aVNlbGVjdFNlcnZpY2UgfSBmcm9tICcuLi9tdWx0aS1zZWxlY3Quc2VydmljZSc7XG5pbXBvcnQgeyBNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL211bHRpLXNlbGVjdC1vcHRpb24vbXVsdGktc2VsZWN0LW9wdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3ROYXRpdmVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuLi9tdWx0aS1zZWxlY3QtbmF0aXZlLXNlbGVjdC9tdWx0aS1zZWxlY3QtbmF0aXZlLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3RUYWdDb21wb25lbnQgfSBmcm9tICcuLi9tdWx0aS1zZWxlY3QtdGFnL211bHRpLXNlbGVjdC10YWcuY29tcG9uZW50JztcbmltcG9ydCB7IE11bHRpU2VsZWN0U2VhcmNoRGlyZWN0aXZlIH0gZnJvbSAnLi9tdWx0aS1zZWxlY3Qtc2VhcmNoLmRpcmVjdGl2ZSc7XG5cbmludGVyZmFjZSBJUGx1cmFsTWFwIHtcbiAgW2s6IHN0cmluZ106IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IG9ic2VydmVSZWZlcmVuY2VSZXNpemVNb2RpZmllcjogTW9kaWZpZXI8c3RyaW5nLCBPcHRpb25zPiA9IHtcbiAgbmFtZTogJ29ic2VydmVSZWZlcmVuY2VSZXNpemVNb2RpZmllcicsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuKHsgc3RhdGUgfSkge30sXG4gIGVmZmVjdDogKHsgc3RhdGUsIGluc3RhbmNlIH06IE1vZGlmaWVyQXJndW1lbnRzPE9wdGlvbnM+KSA9PiB7XG4gICAgY29uc3QgUk9fUFJPUCA9ICdfX3BvcHBlcmpzUk9fXyc7XG4gICAgY29uc3QgeyByZWZlcmVuY2UgfSA9IHN0YXRlLmVsZW1lbnRzO1xuXG4gICAgbGV0IHJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlciB8IG51bGwgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKGVudHJpZXMpID0+IHtcbiAgICAgIGlmIChlbnRyaWVzLmZpbmQoZW50cnkgPT4gZW50cnkudGFyZ2V0ID09PSByZWZlcmVuY2UpKSB7XG4gICAgICAgIGluc3RhbmNlLnVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH0pIHNhdGlzZmllcyBSZXNpemVPYnNlcnZlcjtcblxuICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoPEVsZW1lbnQ+cmVmZXJlbmNlKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICAgIHJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgICB9O1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2FtZUFzUmVmZXJlbmNlV2lkdGhNb2RpZmllcjogTW9kaWZpZXI8c3RyaW5nLCBPcHRpb25zPiA9IHtcbiAgbmFtZTogJ3NhbWVBc1JlZmVyZW5jZVdpZHRoTW9kaWZpZXInLFxuICBlbmFibGVkOiB0cnVlLFxuICBmbjogKHsgc3RhdGUgfSkgPT4ge1xuICAgIHN0YXRlLnN0eWxlc1sncG9wcGVyJ10ubWluV2lkdGggPSBgJHtzdGF0ZS5yZWN0cy5yZWZlcmVuY2Uud2lkdGh9cHhgO1xuICB9LFxuICBwaGFzZTogJ2JlZm9yZVdyaXRlJyxcbiAgcmVxdWlyZXM6IFsnY29tcHV0ZVN0eWxlcyddXG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdFBvcHBlck9wdGlvbnM6IFBhcnRpYWw8T3B0aW9ucz4gPSB7XG4gIHN0cmF0ZWd5OiAnZml4ZWQnLFxuICBtb2RpZmllcnM6IFtcbiAgICBvYnNlcnZlUmVmZXJlbmNlUmVzaXplTW9kaWZpZXIsXG4gICAgc2FtZUFzUmVmZXJlbmNlV2lkdGhNb2RpZmllcixcbiAgICB7XG4gICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgb2Zmc2V0OiAoKSA9PiBbMCwgNF1cbiAgICAgIH1cbiAgICB9XG4gIF1cbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2MtbXVsdGktc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL211bHRpLXNlbGVjdC5jb21wb25lbnQuc2NzcyddLFxuICBleHBvcnRBczogJ2NNdWx0aVNlbGVjdCcsXG4gIHByb3ZpZGVyczogW1xuICAgIEkxOG5QbHVyYWxQaXBlLFxuICAgIE11bHRpU2VsZWN0U2VydmljZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTXVsdGlTZWxlY3RDb21wb25lbnQpLCBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIEFzeW5jUGlwZSxcbiAgICBJMThuUGx1cmFsUGlwZSxcbiAgICBOZ0NsYXNzLFxuICAgIE5nU3R5bGUsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBDZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsLFxuICAgIENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCxcbiAgICBDZGtWaXJ0dWFsRm9yT2YsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTXVsdGlTZWxlY3RUYWdDb21wb25lbnQsXG4gICAgTXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQsXG4gICAgTXVsdGlTZWxlY3RTZWFyY2hEaXJlY3RpdmUsXG4gICAgRHJvcGRvd25Db21wb25lbnQsXG4gICAgRHJvcGRvd25EaXZpZGVyRGlyZWN0aXZlLFxuICAgIERyb3Bkb3duTWVudURpcmVjdGl2ZSxcbiAgICBEcm9wZG93blRvZ2dsZURpcmVjdGl2ZSxcbiAgICBFbGVtZW50Q292ZXJDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBNdWx0aVNlbGVjdENvbXBvbmVudDxUVmFsdWUgZXh0ZW5kcyBzdHJpbmcgfCBudW1iZXI+IGltcGxlbWVudHMgSU11bHRpU2VsZWN0PFRWYWx1ZT4sIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0IHtcblxuICByZWFkb25seSAjZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgcmVhZG9ubHkgI2kxOG5QbHVyYWwgPSBpbmplY3QoSTE4blBsdXJhbFBpcGUpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBmb2N1c01vbml0b3I6IEZvY3VzTW9uaXRvcixcbiAgICBwcml2YXRlIG11bHRpU2VsZWN0U2VydmljZTogTXVsdGlTZWxlY3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgaXRlcmFibGVEaWZmZXJzOiBJdGVyYWJsZURpZmZlcnNcbiAgKSB7XG4gICAgdGhpcy5kaWZmZXIgPSB0aGlzLml0ZXJhYmxlRGlmZmVycy5maW5kKHRoaXMuI3ZhbHVlKS5jcmVhdGUoKTtcbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZXRTZWxlY3Rpb25Nb2RlbCh0aGlzLm11bHRpcGxlKTtcbiAgICB0aGlzLm9wdGlvbnNBcnJheSQgPSB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5nZXRPcHRpb25zQXJyYXkoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGlmZmVyITogSXRlcmFibGVEaWZmZXI8YW55PjtcblxuICByZWFkb25seSAjZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICByZWFkb25seSAjb3B0aW9uc1JlYWR5JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IG9wdGlvbnNBcnJheSQhOiBPYnNlcnZhYmxlPElPcHRpb25bXT47XG4gIHJlYWRvbmx5IHVzZXJPcHRpb25zQXJyYXkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJT3B0aW9uW10+KFtdKTtcbiAgcmVhZG9ubHkgI29wdGlvbnM6IE9wdGlvbnNNYXA8c3RyaW5nIHwgbnVtYmVyPiA9IG5ldyBNYXAoKTtcbiAgcmVhZG9ubHkgb3B0aW9uc1NlbGVjdGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SU9wdGlvbltdPihbXSk7XG4gIHJlYWRvbmx5IG9wdGlvbnNTZWxlY3RlZDogTWFwPGFueSwgSU9wdGlvbj4gPSBuZXcgTWFwKCk7XG4gIHJlYWRvbmx5IHZhbHVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VFZhbHVlW10+KFtdKTtcbiAgI29wdGlvbnNDb250ZW50OiBhbnlbXSA9IFtdO1xuXG4gIG9uQ2hhbmdlID0gKHZhbHVlOiBhbnkpID0+IHt9O1xuICBvblRvdWNoZWQgPSAoKSA9PiB7fTtcblxuICB3cml0ZVZhbHVlKHZhbHVlOiBUVmFsdWUgfCBUVmFsdWVbXSk6IHZvaWQge1xuICAgIGlmICgodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IFsuLi52YWx1ZV0gOiBbdmFsdWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gQXJyYXkoMCk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB1c2VycyB0byBjcmVhdGUgb3B0aW9ucyBpZiB0aGV5IGFyZSBub3QgaW4gdGhlIGxpc3Qgb2Ygb3B0aW9ucy5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAc2luY2UgNC41LjExXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYWxsb3dDcmVhdGVPcHRpb25zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgc2VsZWN0aW9uIGNsZWFuZXIgZWxlbWVudFxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IHRydWUgfCAnYWN0aXZlJ1xuICAgKi9cbiAgQElucHV0KCkgY2xlYW5lcjogYm9vbGVhbiB8ICdhY3RpdmUnID0gdHJ1ZTtcblxuICAvKipcbiAgICogQ2xlYXIgY3VycmVudCBzZWFyY2ggb24gc2VsZWN0aW5nIGFuIGl0ZW1cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAc2luY2UgNC41LjExXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2xlYXJTZWFyY2hPblNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyBtdWx0aS1zZWxlY3QgY29tcG9uZW50XG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5fZGlzYWJsZWQgIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgICAgdGhpcy5zZXRGb2N1c01vbml0b3IoIXZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogQWRkIGxvYWRpbmcgc3Bpbm5lciBhbmQgcmVkdWNlZCBvcGFjaXR5LlxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqIEBzaW5jZSA0LjUuMlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHNldCBsb2FkaW5nKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcuc2V0KHZhbHVlKTtcbiAgfVxuXG4gIGlzTG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGF0IG11bHRpcGxlIG9wdGlvbnMgY2FuIGJlIHNlbGVjdGVkIGF0IG9uY2VcbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHNldCBtdWx0aXBsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX211bHRpcGxlID0gdmFsdWU7XG4gICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2V0U2VsZWN0aW9uTW9kZWwodGhpcy5fbXVsdGlwbGUpO1xuICB9XG5cbiAgZ2V0IG11bHRpcGxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9tdWx0aXBsZTtcbiAgfVxuXG4gIHByaXZhdGUgX211bHRpcGxlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEhpZGRlbiBuYXRpdmUgc2VsZWN0IGZvcm1cbiAgICogQHR5cGUgc3RyaW5nXG4gICAqIEBkZWZhdWx0ICcnXG4gICAqL1xuICBASW5wdXQoKSBuYXRpdmVGb3JtSWQ6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBIaWRkZW4gbmF0aXZlIHNlbGVjdCBpZFxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQGRlZmF1bHQgJydcbiAgICovXG4gIEBJbnB1dCgpIG5hdGl2ZUlkOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogSGlkZGVuIG5hdGl2ZSBzZWxlY3QgbmFtZVxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQGRlZmF1bHQgJydcbiAgICovXG4gIEBJbnB1dCgpIG5hdGl2ZU5hbWU6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIG9wdGlvbiBlbGVtZW50c1xuICAgKiBAdHlwZSBJT3B0aW9uW11cbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBvcHRpb25zKG9wdGlvbnM6IElPcHRpb25bXSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgICB0aGlzLiNvcHRpb25zLmNsZWFyKCk7XG4gICAgICB0aGlzLm1ha2VPcHRpb25zKG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiBbLi4udGhpcy4jb3B0aW9ucy52YWx1ZXMoKV07XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBtYXhIZWlnaHQgb2Ygb3B0aW9ucyBsaXN0IGluIHB4XG4gICAqIEB0eXBlIHN0cmluZyB8IG51bWJlclxuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIEBJbnB1dCgpIG9wdGlvbnNNYXhIZWlnaHQ6IHN0cmluZyB8IG51bWJlciA9ICdhdXRvJztcblxuICAvKipcbiAgICogU2V0cyBvcHRpb24gc3R5bGVcbiAgICogQHR5cGUgJ2NoZWNrYm94JyB8ICd0ZXh0J1xuICAgKiBAZGVmYXVsdCAnY2hlY2tib3gnXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgb3B0aW9uc1N0eWxlKHZhbHVlOiAnY2hlY2tib3gnIHwgJ3RleHQnKSB7XG4gICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uub3B0aW9uc1N0eWxlID0gdmFsdWUgPz8gJ2NoZWNrYm94JztcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYSBzaG9ydCBoaW50IHRoYXQgaXMgdmlzaWJsZSBpbiB0aGUgc2VhcmNoIGlucHV0XG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnU2VsZWN0Li4uJ1xuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWxlY3QuLi4nO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIHNlYXJjaCBpbnB1dCBlbGVtZW50XG4gICAqIEB0eXBlIGJvb2xlYW4gfCBTZWFyY2hGbiB8ICdleHRlcm5hbCdcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KCkgc2VhcmNoOiAoYm9vbGVhbiB8ICdleHRlcm5hbCcgfCBTZWFyY2hGbikgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBsYWJlbCBmb3Igbm8gcmVzdWx0cyB3aGVuIGZpbHRlcmluZ1xuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQGRlZmF1bHQgJ25vIGl0ZW1zJ1xuICAgKi9cbiAgQElucHV0KCkgc2VhcmNoTm9SZXN1bHRzTGFiZWw6IHN0cmluZyA9ICdubyBpdGVtcyc7XG5cbiAgLyoqXG4gICAqIFNldHMgaW5pdGlhbCBzZWFyY2ggc3RyaW5nXG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnJ1xuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IHNlYXJjaFZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuX3NlYXJjaFZhbHVlICE9PSB2YWx1ZS50cmltU3RhcnQoKSkge1xuICAgICAgdGhpcy5fc2VhcmNoVmFsdWUgPSB2YWx1ZS50cmltU3RhcnQoKTtcbiAgICAgIHRoaXMudmlzaWJsZSA9IHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoID4gMCAmJiB0aGlzLnN1YnRyZWVGb2N1c2VkID8gdHJ1ZSA6IHRoaXMudmlzaWJsZTtcbiAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucyh0aGlzLnNlYXJjaFZhbHVlKTtcbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50U2l6ZSgpO1xuICAgICAgdGhpcy5zZWFyY2hWYWx1ZUNoYW5nZS5lbWl0KHRoaXMuX3NlYXJjaFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2VhcmNoVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VhcmNoVmFsdWU6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBFbWl0cyBzZWFyY2hWYWx1ZSBzdHJpbmcgZm9yIGV4dGVybmFsIGZpbHRlcmluZ1xuICAgKiBAdHlwZSBzdHJpbmdcbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBzZWFyY2hWYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAvKipcbiAgICogRW5hYmxlcyBzZWxlY3QgYWxsIGJ1dHRvblxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdEFsbDogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHNlbGVjdCBhbGwgYnV0dG9uIGxhYmVsXG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnU2VsZWN0IGFsbCBvcHRpb25zJ1xuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0QWxsTGFiZWw6IHN0cmluZyA9ICdTZWxlY3QgYWxsIG9wdGlvbnMnO1xuXG4gIC8qKlxuICAgKiBTZWxlY3Rpb24gdHlwZVxuICAgKiBAdHlwZSAnY291bnRlcicgfCAndGFncycgfCAndGV4dCdcbiAgICogQGRlZmF1bHQgJ3RhZ3MnXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3Rpb25UeXBlOiAnY291bnRlcicgfCAndGFncycgfCAndGV4dCcgPSAndGFncyc7XG5cbiAgLyoqXG4gICAqIENvdW50ZXIgc2VsZWN0aW9uIGxhYmVsIHZhbHVlXG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnaXRlbShzKSBzZWxlY3RlZCdcbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGlvblR5cGVDb3VudGVyVGV4dDogc3RyaW5nID0gJ2l0ZW0ocykgc2VsZWN0ZWQnO1xuXG4gIC8qKlxuICAgKiBDb3VudGVyIHNlbGVjdGlvbiBsYWJlbCBwbHVyYWwgbWFwIGZvciBJMThuUGx1cmFsUGlwZVxuICAgKiBAdHlwZSBJUGx1cmFsTWFwXG4gICAqIEBkZWZhdWx0IHsgJz0xJzogJ2l0ZW0gc2VsZWN0ZWQnLCAnb3RoZXInOiAnaXRlbXMgc2VsZWN0ZWQnIH1cbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGlvblR5cGVDb3VudGVyVGV4dFBsdXJhbE1hcD86IElQbHVyYWxNYXAgPSB7ICc9MSc6ICdpdGVtIHNlbGVjdGVkJywgJ290aGVyJzogJ2l0ZW1zIHNlbGVjdGVkJyB9O1xuXG4gIC8qKlxuICAgKiBTaXplIHRoZSBjb21wb25lbnQgc21hbGwgb3IgbGFyZ2UuXG4gICAqIEB0eXBlICdzbScgfCAnbGcnIHwgdW5kZWZpbmVkXG4gICAqL1xuICBASW5wdXQoKSBzaXplPzogJ3NtJyB8ICdsZyc7XG5cbiAgLyoqXG4gICAqIEluaXRpYWwgdmFsdWUgb2YgbXVsdGktc2VsZWN0XG4gICAqIEB0eXBlIFRWYWx1ZSB8IFRWYWx1ZVtdXG4gICAqL1xuICBASW5wdXQoKSBzZXQgdmFsdWUodmFsdWU6IFRWYWx1ZSB8IFRWYWx1ZVtdKSB7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IFsuLi52YWx1ZV0gOiBbdmFsdWVdO1xuICAgIGlmICh0aGlzLmRpZmZlcikge1xuICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuZGlmZmVyLmRpZmYobmV3VmFsdWUpO1xuICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy4jdmFsdWUgPSBbLi4ubmV3VmFsdWVdO1xuICAgICAgICB0aGlzLnZhbHVlJC5uZXh0KFsuLi5uZXdWYWx1ZV0pO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xuICAgICAgICAvLyB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFRWYWx1ZSB8IFRWYWx1ZVtdIHtcbiAgICBjb25zdCB2YWx1ZTogVFZhbHVlW10gPSB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbD8uc2VsZWN0ZWQgPz8gWy4uLnRoaXMuI3ZhbHVlXTtcbiAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSA/IFsuLi52YWx1ZV0gOiB2YWx1ZVswXTtcbiAgfVxuXG4gICN2YWx1ZTogVFZhbHVlW10gPSBbXTtcblxuICAvKipcbiAgICogRW1pdHMgdmFsdWVDaGFuZ2VcbiAgICogQHR5cGUgVFZhbHVlIHwgVFZhbHVlW11cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPFRWYWx1ZSB8IFRWYWx1ZVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8VFZhbHVlIHwgVFZhbHVlW10+KCk7XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB2aXN1YWwgdmFsaWRhdGlvbiBmZWVkYmFjay5cbiAgICogQHR5cGUgYm9vbGVhbiB8IHVuZGVmaW5lZFxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIEBJbnB1dCgpIHZhbGlkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlIHZpcnR1YWwgc2Nyb2xsZXIgZm9yIG9wdGlvbnMgbGlzdC5cbiAgICogQHR5cGUgYm9vbGVhblxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHNldCB2aXJ0dWFsU2Nyb2xsZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl92aXJ0dWFsU2Nyb2xsZXIgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCB2aXJ0dWFsU2Nyb2xsZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZpcnR1YWxTY3JvbGxlcjtcbiAgfVxuXG4gIHByaXZhdGUgX3ZpcnR1YWxTY3JvbGxlciA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBbW91bnQgb2YgdmlzaWJsZSBvcHRpb25zLCBpZiBzZXQgLSBvdmVyd3JpdGVzIG9wdGlvbnNNYXhIZWlnaHRcbiAgICogQHR5cGUgbnVtYmVyXG4gICAqIEBkZWZhdWx0IDhcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pXG4gIHNldCB2aXNpYmxlSXRlbXModmFsdWUpIHtcbiAgICB0aGlzLl92aXNpYmxlSXRlbXMgPSB2YWx1ZSA+IDAgPyB2YWx1ZSA6IDg7XG4gICAgdGhpcy5vcHRpb25zTWF4SGVpZ2h0ID0gKCh0aGlzLml0ZW1TaXplICogdGhpcy5fdmlzaWJsZUl0ZW1zKSArIDE2KS50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IHZpc2libGVJdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZUl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmlzaWJsZUl0ZW1zID0gODtcblxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIG9wdGlvbiBpdGVtIGluIHRoZSBsaXN0IChpbiBwaXhlbHMpLlxuICAgKiBAdHlwZSBudW1iZXJcbiAgICogQGRlZmF1bHQgNDBcbiAgICovXG4gIEBJbnB1dCgpIGl0ZW1TaXplOiBudW1iZXIgPSA0MDtcblxuICAvKipcbiAgICogTWluIHdpZHRoIG9mIHRoZSBvcHRpb25zIGxpc3QgKGluIHBpeGVscykuXG4gICAqIEB0eXBlIG51bWJlclxuICAgKiBAZGVmYXVsdCAxOTZcbiAgICovXG4gIEBJbnB1dCgpIGl0ZW1NaW5XaWR0aDogbnVtYmVyID0gMTk2O1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGRyb3Bkb3duIHNlbGVjdCBjb21wb25lbnQuXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICBzZXQgdmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fdmlzaWJsZSkge1xuICAgICAgdGhpcy5fdmlzaWJsZSA9IHZhbHVlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnRvZ2dsZVZpc2libGUodmFsdWUpO1xuICAgICAgfSk7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIC8vIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgdmlzaWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmlzaWJsZTtcbiAgfVxuXG4gIHByaXZhdGUgX3Zpc2libGUgPSBmYWxzZTtcblxuICAvKipcbiAgICogRW1pdHMgdmlzaWJsZUNoYW5nZVxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgdmlzaWJsZUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBwb3BwZXIgT3B0aW9ucyBvYmplY3RcbiAgICogQHR5cGUgUGFydGlhbDxPcHRpb25zPlxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IHBvcHBlck9wdGlvbnMob3B0aW9uczogUGFydGlhbDxPcHRpb25zPikge1xuICAgIGNvbnN0IHByZXZPcHRpb25zID0gdGhpcy4jcG9wcGVyT3B0aW9ucygpO1xuICAgIGNvbnN0IHsgbW9kaWZpZXJzOiBwcmV2TW9kaWZpZXJzID0gW10gfSA9IHByZXZPcHRpb25zO1xuICAgIGNvbnN0IHsgbW9kaWZpZXJzOiBjdXJyTW9kaWZpZXJzID0gW10gfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgY3Vyck9wdGlvbnM6IFBhcnRpYWw8T3B0aW9ucz4gPSB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbW9kaWZpZXJzOiBbXG4gICAgICAgIC4uLnByZXZNb2RpZmllcnMuZmlsdGVyKHByZXZNb2RpZmllciA9PiAhY3Vyck1vZGlmaWVycy5maW5kKGN1cnJNb2RpZmllciA9PiBjdXJyTW9kaWZpZXIubmFtZSA9PT0gcHJldk1vZGlmaWVyLm5hbWUpKSxcbiAgICAgICAgLi4uY3Vyck1vZGlmaWVyc1xuICAgICAgXVxuICAgIH07XG5cbiAgICB0aGlzLiNwb3BwZXJPcHRpb25zLnNldCh7IC4uLnByZXZPcHRpb25zLCAuLi5jdXJyT3B0aW9ucyB9KTtcbiAgfVxuXG4gIGdldCBwb3BwZXJPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLiNwb3BwZXJPcHRpb25zKCk7XG4gIH1cblxuICByZWFkb25seSAjcG9wcGVyT3B0aW9ucyA9IHNpZ25hbChkZWZhdWx0UG9wcGVyT3B0aW9ucyk7XG5cbiAgaXNEcm9wZG93blZpc2libGUgPSBmYWxzZTtcblxuICBnZXQgc2VsZWN0ZWRPcHRpb25zKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5vcHRpb25zU2VsZWN0ZWQudmFsdWVzKCldO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkT3B0aW9uc1RleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcHRpb25zLm1hcChvcHRpb24gPT4gb3B0aW9uLmxhYmVsKS5qb2luKCcsICcpO1xuICB9XG5cbiAgZ2V0IGNvdW50ZXJUZXh0KCkge1xuICAgIHJldHVybiBgJHt0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGh9ICR7dGhpcy5zZWxlY3Rpb25UeXBlQ291bnRlclRleHR9YDtcbiAgfVxuXG4gIGdldCBjb3VudGVyVGV4dFR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mICh0aGlzLnNlbGVjdGlvblR5cGVDb3VudGVyVGV4dFBsdXJhbE1hcCA/PyB0aGlzLnNlbGVjdGlvblR5cGVDb3VudGVyVGV4dCk7XG4gIH07XG5cbiAgZ2V0IGNvdW50ZXJQbGFjZWhvbGRlclRleHQoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA9PT0gMCB8fCB0aGlzLnNlbGVjdGlvblR5cGUgIT09ICdjb3VudGVyJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvdW50ZXJUZXh0VHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvdW50ZXJUZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RofSAke3RoaXMuI2kxOG5QbHVyYWwudHJhbnNmb3JtKHRoaXMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCwgdGhpcy5zZWxlY3Rpb25UeXBlQ291bnRlclRleHRQbHVyYWxNYXAgPz8geyBvdGhlcjogdGhpcy5zZWxlY3Rpb25UeXBlQ291bnRlclRleHQgPz8gJysnIH0pfWA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c01vbml0b3JTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG5cbiAgQENvbnRlbnRDaGlsZHJlbihNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBtdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50ITogUXVlcnlMaXN0PE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50PjtcbiAgQFZpZXdDaGlsZHJlbihNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudCkgbXVsdGlTZWxlY3RPcHRpb25zVmlldyE6IFF1ZXJ5TGlzdDxNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudD47XG4gIEBWaWV3Q2hpbGRyZW4oJ3Njcm9sbFZpZXdwb3J0Jykgc2Nyb2xsVmlld3BvcnRWaWV3ITogUXVlcnlMaXN0PENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydD47XG4gIEBWaWV3Q2hpbGQoJ29wdGlvbnMnKSBvcHRpb25zRWxlbWVudFJlZiE6IEVsZW1lbnRSZWY7XG5cbiAgcHJvdGVjdGVkIHNjcm9sbFZpZXdwb3J0ITogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gIHByb3RlY3RlZCB0ZW1wbGF0ZXM6IHsgW2lkOiBzdHJpbmddOiBUZW1wbGF0ZVJlZjxhbnk+IH0gPSB7fTtcbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZUlkRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIGNvbnRlbnRUZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8VGVtcGxhdGVJZERpcmVjdGl2ZT47XG5cbiAgcHJpdmF0ZSBmb2N1c0tleU1hbmFnZXIhOiBGb2N1c0tleU1hbmFnZXI8TXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoJ2lucHV0RWxlbWVudCcpIGlucHV0RWxlbWVudCE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duTWVudScpIGRyb3Bkb3duTWVudSE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoRHJvcGRvd25Db21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBkcm9wZG93biE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoRHJvcGRvd25Ub2dnbGVEaXJlY3RpdmUsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBkcm9wZG93blRvZ2dsZSE6IEVsZW1lbnRSZWY7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBob3N0Q2xhc3NlcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWRcbiAgICB9O1xuICB9XG5cbiAgZ2V0IG11bHRpc2VsZWN0Q2xhc3NlcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2Zvcm0tbXVsdGktc2VsZWN0JzogdHJ1ZSxcbiAgICAgIFtgZm9ybS1tdWx0aS1zZWxlY3QtJHt0aGlzLnNpemV9YF06ICEhdGhpcy5zaXplLFxuICAgICAgc2hvdzogdGhpcy52aXNpYmxlLFxuICAgICAgZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQsXG4gICAgICAnaXMtdmFsaWQnOiB0aGlzLnZhbGlkID09PSB0cnVlLFxuICAgICAgJ2lzLWludmFsaWQnOiB0aGlzLnZhbGlkID09PSBmYWxzZVxuICAgIH07XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1tdWx0aXNlbGVjdGFibGUnKVxuICBwcml2YXRlIGdldCBhcmlhTXVsdGlTZWxlY3RhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLm11bHRpcGxlO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZXhwYW5kZWQnKVxuICBwcml2YXRlIGdldCBhcmlhRXhwYW5kZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXG4gIHByaXZhdGUgZ2V0IHRhYkluZGV4KCkge1xuICAgIHJldHVybiB0aGlzLl90YWJJbmRleDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0IHRhYkluZGV4KHZhbHVlKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl90YWJJbmRleCA9IHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5zZWFyY2ggPyAtMSA6IHZhbHVlID09PSBudWxsID8gbnVsbCA6IDA7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF90YWJJbmRleDogbnVtYmVyIHwgbnVsbCA9IC0xO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2tleXVwJywgWyckZXZlbnQnXSkgb25LZXlVcCgkZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIGNvbnN0IHRhcmdldFRhZ05hbWUgPSAoJGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkudGFnTmFtZTtcbiAgICBpZiAoJGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICcnO1xuICAgICAgdGhpcy5zZXRGb2N1cygna2V5Ym9hcmQnLCAnb25LZXlVcCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoWydFbnRlcicsICdTcGFjZScsICdBcnJvd0Rvd24nXS5pbmNsdWRlcygkZXZlbnQuY29kZSkgJiYgW3RoaXMuaW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50LCB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudF0uaW5jbHVkZXMoJGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICBpZiAoIXRoaXMuc2VhcmNoKSB7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXMoJ2tleWJvYXJkJywgJ29uS2V5VXAnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoWydUYWInXS5pbmNsdWRlcygkZXZlbnQua2V5KSkge1xuXG4gICAgICAvLyB0b2RvIGZvY3VzIG9uIGlucHV0IHdoZW4gdGFiIGluXG4gICAgICAvLyBpZiAoJGV2ZW50LnRhcmdldCA9PT0gdGhpcy5pbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIC8vICAgY29uc29sZS5sb2coJGV2ZW50LmtleSwgJGV2ZW50LnRhcmdldClcbiAgICAgIC8vIH1cblxuICAgICAgaWYgKCRldmVudC50YXJnZXQgPT09IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5zZWFyY2gpIHtcbiAgICAgICAgICB0aGlzLnNldEZvY3VzKCdrZXlib2FyZCcsICdvbktleVVwJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWJUYXJnZXQgPSB0YXJnZXRUYWdOYW1lO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnZpc2libGUgJiYgdGhpcy5zdWJ0cmVlRm9jdXNlZCkge1xuICAgICAgICBpZiAodGFyZ2V0VGFnTmFtZSA9PT0gJ0MtTVVMVEktU0VMRUNULU9QVElPTicpIHtcblxuICAgICAgICAgIGlmICh0aGlzLnRhYlRhcmdldCA9PT0gJ0MtTVVMVEktU0VMRUNULU9QVElPTicpIHtcbiAgICAgICAgICAgIGlmICgkZXZlbnQuc2hpZnRLZXkgJiYgdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbT8udmFsdWUgPT09IHRoaXMub3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IG9wdGlvbi52aXNpYmxlICYmICFvcHRpb24uZGlzYWJsZWQpLnNsaWNlKDApWzBdLnZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXMoJ2tleWJvYXJkJywgJ29uS2V5VXAnKTtcbiAgICAgICAgICAgICAgdGhpcy50YWJUYXJnZXQgPSB0YXJnZXRUYWdOYW1lO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghJGV2ZW50LnNoaWZ0S2V5ICYmIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0/LnZhbHVlID09PSB0aGlzLm9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24udmlzaWJsZSAmJiAhb3B0aW9uLmRpc2FibGVkKS5zbGljZSgtMSlbMF0udmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRGb2N1cygna2V5Ym9hcmQnLCAnb25LZXlVcCcpO1xuICAgICAgICAgICAgICB0aGlzLnRhYlRhcmdldCA9IHRhcmdldFRhZ05hbWU7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlSXRlbSgwKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbSB8fCB0aGlzLnRhYlRhcmdldCAhPT0gdGFyZ2V0VGFnTmFtZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlT3B0aW9uKSB7XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odGhpcy5hY3RpdmVPcHRpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJGV2ZW50LnNoaWZ0S2V5ID8gdGhpcy5mb2N1c0tleU1hbmFnZXIuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCkgOiB0aGlzLmZvY3VzS2V5TWFuYWdlci5zZXROZXh0SXRlbUFjdGl2ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYlRhcmdldCA9IHRhcmdldFRhZ05hbWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSkgb25LZXlEb3duKCRldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IHRhcmdldFRhZ05hbWUgPSAoJGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkudGFnTmFtZTtcbiAgICBpZiAoJGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiB0YXJnZXRUYWdOYW1lID09PSAnSU5QVVQnKSB7XG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKCRldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICB0aGlzLnRhYlRhcmdldCA9IHRhcmdldFRhZ05hbWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgkZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyAmJiB0YXJnZXRUYWdOYW1lICE9PSAnQy1NVUxUSS1TRUxFQ1QtT1BUSU9OJykge1xuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgkZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICB0aGlzLnNldEZvY3VzKCdrZXlib2FyZCcsICdvbktleURvd24nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gYXZvaWQgc2V0dGluZyBmb2N1cyB0byBvcHRpb24gd2hpbGUgb24gaW5wdXQgZWxlbWVudFxuICAgIGlmICgkZXZlbnQudGFyZ2V0ID09PSB0aGlzLmlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoJGV2ZW50LmtleSAhPT0gJ1RhYicpIHtcbiAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyPy5vbktleWRvd24oJGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIG9uQ2xpY2soJGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKFt0aGlzLmRyb3Bkb3duLm5hdGl2ZUVsZW1lbnRdLmluY2x1ZGVzKCRldmVudC50YXJnZXQpKSB7XG4gICAgICB0aGlzLnZpc2libGUgPSAhdGhpcy52aXNpYmxlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIHRoaXMuc2V0Rm9jdXMoJ21vdXNlJywgJ29uQ2xpY2snKTtcbiAgfVxuXG4gIHB1YmxpYyB2aXNpYmxlT3B0aW9ucyA9IHNpZ25hbChmYWxzZSk7XG5cbiAgZ2V0IHN1YnRyZWVGb2N1c2VkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdWJ0cmVlRm9jdXNlZDtcbiAgfVxuXG4gIHNldCBzdWJ0cmVlRm9jdXNlZChmb2N1c2VkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc3VidHJlZUZvY3VzZWQgPSB0aGlzLmRpc2FibGVkID8gZmFsc2UgOiBmb2N1c2VkO1xuICAgIGlmICghZm9jdXNlZCkge1xuICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICcnO1xuICAgIH1cbiAgICBpZiAoIXRoaXMudmlydHVhbFNjcm9sbGVyKSB7XG4gICAgICB0aGlzLnZpc2libGUgPSBmb2N1c2VkID09PSBmYWxzZSA/IGZhbHNlIDogdGhpcy52aXNpYmxlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3N1YnRyZWVGb2N1c2VkID0gdGhpcy5mb2N1c09yaWdpbihudWxsKTtcblxuICBwcml2YXRlIG5hdGl2ZVNlbGVjdFJlZiE6IGFueTtcblxuICBmb2N1c09yaWdpbihvcmlnaW46IEZvY3VzT3JpZ2luKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuICEhb3JpZ2luO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLm11bHRpcGxlKSxcbiAgICAgICAgZGVsYXkoMCksXG4gICAgICAgIHRhcChjaGFuZ2UgPT4ge1xuICAgICAgICAgIGlmIChjaGFuZ2UuYWRkZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gY2xvc2UgZHJvcGRvd24gZm9yIHNpbmdsZSBzZWxlY3QgKCFtdWx0aXBsZSlcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHNraXAoMSksXG4gICAgICAgIHRhcChjaGFuZ2UgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0Rm9jdXMoJ3Byb2dyYW0nLCAnc2VsZWN0aW9uTW9kZWwuY2hhbmdlZCAoc2luZ2xlKScpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLiNvcHRpb25zUmVhZHkkLnBpcGUoXG4gICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMudmlydHVhbFNjcm9sbGVyKSxcbiAgICAgIGRlbGF5KDApLFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRGb2N1c0tleU1hbmFnZXIoWy4uLnRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudCwgLi4udGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNWaWV3XSk7XG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICkuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5jaGFuZ2VkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKGNoYW5nZSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBhZGRlZCB9ID0geyAuLi5jaGFuZ2UgfTtcbiAgICAgICAgICBpZiAoYWRkZWQubGVuZ3RoID4gMCAmJiB0aGlzLmNsZWFyU2VhcmNoT25TZWxlY3QpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLmNoYW5nZWRcbiAgICAgIC5waXBlKFxuICAgICAgICAvLyBkZWxheSgwKSxcbiAgICAgICAgY29tYmluZUxhdGVzdFdpdGgodGhpcy4jb3B0aW9uc1JlYWR5JCksXG4gICAgICAgIHRhcCgoW2NoYW5nZSwgcmVhZHldKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyByZW1vdmVkIH0gPSB7IC4uLmNoYW5nZSB9O1xuICAgICAgICAgIHJlbW92ZWQuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnNTZWxlY3RlZC5kZWxldGUodmFsdWUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLnNlbGVjdGVkLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy4jb3B0aW9ucy5nZXQoa2V5KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNTZWxlY3RlZC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLm9wdGlvbnNTZWxlY3RlZCQubmV4dChBcnJheS5mcm9tKHRoaXMub3B0aW9uc1NlbGVjdGVkLnZhbHVlcygpKSk7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IFsuLi50aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5zZWxlY3RlZF07XG5cbiAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudFNpemUoKTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU5hdGl2ZVNlbGVjdCgpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAvLyBzZXQgaW5pdGlhbCB2YWx1ZXNcbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoLi4udGhpcy4jdmFsdWUpO1xuXG4gICAgdGhpcy52YWx1ZSRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICBpZiAoIXZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuY2xlYXJBbGxPcHRpb25zKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFsdWUuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMudmFsdWUkXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICAgIHRhcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5vcHRpb25zQXJyYXkkXG4gICAgICAucGlwZShcbiAgICAgICAgY29tYmluZUxhdGVzdFdpdGgodGhpcy51c2VyT3B0aW9uc0FycmF5JCksXG4gICAgICAgIHRhcCgoW29wdGlvbnMsIHVzZXJPcHRpb25zXSkgPT4ge1xuXG4gICAgICAgICAgdGhpcy52aXNpYmxlT3B0aW9ucy5zZXQob3B0aW9ucy5zb21lKChpdGVtKSA9PiBpdGVtLnZpc2libGUpIHx8IHVzZXJPcHRpb25zLnNvbWUoKGl0ZW0pID0+IGl0ZW0udmlzaWJsZSkpO1xuICAgICAgICAgIHRoaXMuYWN0aXZlT3B0aW9uID0gbnVsbDtcblxuICAgICAgICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGxlcikge1xuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Py5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICAgICAgICAgIG9wdGlvbi5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxWaWV3cG9ydD8uc2V0UmVuZGVyZWRSYW5nZSh7IHN0YXJ0OiAwLCBlbmQ6IHRoaXMudmlzaWJsZUl0ZW1zIH0pO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxWaWV3cG9ydD8uc2Nyb2xsVG9JbmRleCgwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Py5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gb3B0aW9ucy5maW5kKGl0ZW0gPT4gaXRlbS52YWx1ZSA9PT0gb3B0aW9uLnZhbHVlKTtcbiAgICAgICAgICAgICAgb3B0aW9uLnZpc2libGUgPSBmb3VuZD8udmlzaWJsZSA/PyBmYWxzZTtcbiAgICAgICAgICAgICAgb3B0aW9uLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBmaXJzdEZvY3VzYWJsZSA9IHRoaXMuZmlyc3RGb2N1c2FibGVJdGVtO1xuICAgICAgICAgICAgaWYgKGZpcnN0Rm9jdXNhYmxlKSB7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQWN0aXZlSXRlbShmaXJzdEZvY3VzYWJsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdGhpcy5hY3RpdmVPcHRpb24pIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZUl0ZW0oMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Py5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy50YWJJbmRleCA9IDA7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNkZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy4jZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB0aGlzLnNldEZvY3VzTW9uaXRvcihmYWxzZSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3ZhbHVlJ10pIHtcbiAgICAgIGNvbnN0IHZhbHVlQ2hhbmdlcyA9IGNoYW5nZXNbJ3ZhbHVlJ107XG4gICAgICBpZiAodmFsdWVDaGFuZ2VzLmN1cnJlbnRWYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5jbGVhckFsbE9wdGlvbnMoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50U2l6ZSgpO1xuICAgIH1cbiAgfVxuXG4gIG1ha2VPcHRpb25zKG9wdGlvbnM6IElPcHRpb25bXSkge1xuXG4gICAgaWYgKHRoaXMuc2VhcmNoID09PSAnZXh0ZXJuYWwnICYmIHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLiNvcHRpb25zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgdmFsdWUudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgb3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBvcHRpb24udmFsdWU7XG4gICAgICBjb25zdCB2YWx1ZSA9IHtcbiAgICAgICAgdmFsdWU6IG9wdGlvbi52YWx1ZSA/PyBvcHRpb24ubGFiZWwsXG4gICAgICAgIGxhYmVsOiBvcHRpb24ubGFiZWwgPz8gb3B0aW9uLnZhbHVlPy50b1N0cmluZygpLFxuICAgICAgICBkaXNhYmxlZDogb3B0aW9uLmRpc2FibGVkID09PSB0cnVlLFxuICAgICAgICB2aXNpYmxlOiB0aGlzLnNlYXJjaCA9PT0gJ2V4dGVybmFsJyA/IHRydWUgOiBvcHRpb24uY3VzdG9tICYmIG9wdGlvbi5zZWxlY3RlZCA/IG9wdGlvbi52aXNpYmxlIDogb3B0aW9uLnZpc2libGUgIT09IGZhbHNlLFxuICAgICAgICB0ZXh0OiBvcHRpb24udGV4dCA/PyBvcHRpb24ubGFiZWwgPz8gb3B0aW9uLnZhbHVlPy50b1N0cmluZygpLFxuICAgICAgICBzZWxlY3RlZDogb3B0aW9uLnNlbGVjdGVkLFxuICAgICAgICBjdXN0b206IG9wdGlvbi5jdXN0b21cbiAgICAgICAgLy8gc2VsZWN0ZWQ6IHRoaXMubXVsdGlTZWxlY3RTZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLmlzU2VsZWN0ZWQob3B0aW9uLnZhbHVlKSxcbiAgICAgICAgLy8gaWQ6IG9wdGlvbi5pZFxuICAgICAgfTtcbiAgICAgIHRoaXMuI29wdGlvbnMuc2V0KGtleSwgeyAuLi52YWx1ZSB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuZmlsdGVyT3B0aW9ucyh0aGlzLnNlYXJjaFZhbHVlKTtcblxuICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudD8ubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNWaWV3Py5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICB0aGlzLiNvcHRpb25zUmVhZHkkLm5leHQoKTtcbiAgfVxuXG4gIHVzZXJPcHRpb25zID0gdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2UuZ2V0VXNlck9wdGlvbnMoKTtcblxuICAvLyAjZWZmZWN0VXNlck9wdGlvbnMgPSBlZmZlY3QoKCkgPT4ge1xuICAvLyAgIGlmICh0aGlzLmFsbG93Q3JlYXRlT3B0aW9ucykge1xuICAvLyAgICAgdGhpcy51c2VyT3B0aW9uc0FycmF5JC5uZXh0KEFycmF5LmZyb20odGhpcy51c2VyT3B0aW9ucygpLmZpbHRlcihvcHRpb24gPT4gb3B0aW9uLnZpc2libGUpKSk7XG4gIC8vICAgfVxuICAvLyB9KTtcblxuICBhZGRVc2VyT3B0aW9uKCkge1xuICAgIGlmICh0aGlzLmFsbG93Q3JlYXRlT3B0aW9ucykge1xuICAgICAgaWYgKHRoaXMudXNlck9wdGlvbnMoKS5zb21lKG9wdGlvbiA9PiBvcHRpb24udmFsdWUgPT09IHRoaXMuc2VhcmNoVmFsdWUpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLiNvcHRpb25zLmdldCh0aGlzLnNlYXJjaFZhbHVlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB1c2VyT3B0aW9uOiBJT3B0aW9uID0ge1xuICAgICAgICB2YWx1ZTogdGhpcy5zZWFyY2hWYWx1ZSxcbiAgICAgICAgbGFiZWw6IHRoaXMuc2VhcmNoVmFsdWUsXG4gICAgICAgIHRleHQ6IHRoaXMuc2VhcmNoVmFsdWUsXG4gICAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICAgIGN1c3RvbTogdHJ1ZSxcbiAgICAgICAgc2VsZWN0ZWQ6IHRydWVcbiAgICAgIH07XG4gICAgICB0aGlzLnNlYXJjaFZhbHVlID0gKHRoaXMuY2xlYXJTZWFyY2hPblNlbGVjdCB8fCB0aGlzLmFsbG93Q3JlYXRlT3B0aW9ucykgPyAnJyA6IHRoaXMuc2VhcmNoVmFsdWU7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5hZGRVc2VyT3B0aW9uKHVzZXJPcHRpb24pO1xuICAgICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KHVzZXJPcHRpb24udmFsdWUpO1xuICAgICAgdGhpcy5vcHRpb25zU2VsZWN0ZWQuc2V0KHVzZXJPcHRpb24udmFsdWUsIHVzZXJPcHRpb24pO1xuICAgICAgdGhpcy5tYWtlT3B0aW9ucyhbLi4udGhpcy5vcHRpb25zLCAuLi50aGlzLnVzZXJPcHRpb25zKCldKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVBbGxVc2VyT3B0aW9ucygpIHtcbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5yZW1vdmVBbGxVc2VyT3B0aW9ucygpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuXG4gICAgdGhpcy5zZXRWaXJ0dWFsU2Nyb2xsZXIoKTtcblxuICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudD8uY2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRlbGF5KDApLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldmlvdXM6IFF1ZXJ5TGlzdDxNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudD4sIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBwcmV2ID0gcHJldmlvdXMudG9BcnJheSgpLm1hcChvcHRpb24gPT4gb3B0aW9uLnZhbHVlKTtcbiAgICAgICAgICBjb25zdCBjdXJyID0gY3VycmVudC50b0FycmF5KCkubWFwKG9wdGlvbiA9PiBvcHRpb24udmFsdWUpO1xuICAgICAgICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGxlcikge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHByZXYpID09PSBKU09OLnN0cmluZ2lmeShjdXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuI29wdGlvbnNDb250ZW50KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3Vycik7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoY2hhbmdlcyA9PiB7XG4gICAgICAgICAgdGhpcy4jb3B0aW9uc0NvbnRlbnQgPSBjaGFuZ2VzLnRvQXJyYXkoKS5tYXAob3B0aW9uID0+IG9wdGlvbi52YWx1ZSk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUobmV4dCA9PiB7XG4gICAgICAgIHRoaXMudmlzaWJsZU9wdGlvbnMuc2V0KHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudD8uc29tZSgob3B0aW9uKSA9PiBvcHRpb24udmlzaWJsZSkpO1xuICAgICAgICBpZiAodGhpcy52aXNpYmxlT3B0aW9ucygpKSB7XG4gICAgICAgICAgdGhpcy5tYWtlT3B0aW9ucyh0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQudG9BcnJheSgpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLnZpc2libGVPcHRpb25zLnNldCh0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/Lmxlbmd0aCA+IDAgfHwgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNWaWV3Py5sZW5ndGggPiAwKTtcbiAgICBpZiAodGhpcy52aXNpYmxlT3B0aW9ucygpKSB7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5tdWx0aXNlbGVjdFN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5zZXRGb2N1c01vbml0b3IoIXRoaXMuZGlzYWJsZWQpO1xuXG4gICAgdGhpcy5zZXRMaXN0S2V5TWFuYWdlcigpO1xuXG4gICAgdGhpcy5pbnB1dEVsZW1lbnRTaXplKCk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQubm90aWZ5T25DaGFuZ2VzKCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuY3JlYXRlTmF0aXZlU2VsZWN0KCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5tdWx0aVNlbGVjdEZvY3VzJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgob3B0aW9uOiBNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZU9wdGlvbiAmJiB0aGlzLmFjdGl2ZU9wdGlvbi52YWx1ZSAhPT0gb3B0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKG9wdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB0YWJUYXJnZXQhOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBtdWx0aXNlbGVjdFN1YnNjcmliZShzdWJzY3JpYmU6IGJvb2xlYW4gPSB0cnVlKSB7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5tdWx0aVNlbGVjdFZpc2libGUkXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmlzaWJsZSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pc0Ryb3Bkb3duVmlzaWJsZSAhPT0gdmlzaWJsZSkge1xuICAgICAgICAgIHRoaXMuaXNEcm9wZG93blZpc2libGUgPSB2aXNpYmxlO1xuICAgICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KHZpc2libGUpO1xuICAgICAgICAgIGlmICghdmlzaWJsZSkge1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsZXIpIHtcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxWaWV3cG9ydD8uc2V0UmVuZGVyZWRSYW5nZSh7IHN0YXJ0OiAwLCBlbmQ6IHRoaXMudmlzaWJsZUl0ZW1zIH0pO1xuICAgICAgICAgICAgICB0aGlzLnNjcm9sbFZpZXdwb3J0Py5zY3JvbGxUb0luZGV4KDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVJdGVtKDApO1xuICAgICAgfSk7XG5cbiAgfVxuXG4gIGNsZWFyQWxsT3B0aW9ucygkZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBlbmFibGVkT3B0aW9ucyA9IEFycmF5LmZyb20odGhpcy5vcHRpb25zU2VsZWN0ZWQudmFsdWVzKCkpLmZpbHRlcihvcHRpb24gPT4gIW9wdGlvbi5kaXNhYmxlZCkubWFwKG9wdGlvbiA9PiBvcHRpb24udmFsdWUpO1xuICAgICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QoLi4uZW5hYmxlZE9wdGlvbnMpO1xuICAgICAgdGhpcy5yZW1vdmVBbGxVc2VyT3B0aW9ucygpO1xuXG4gICAgICB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICBpZiAoJGV2ZW50KSB7XG4gICAgICAgIHRoaXMuc2V0Rm9jdXMoJ3Byb2dyYW0nLCAnY2xlYXJBbGxPcHRpb25zJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzZWxlY3RBbGxPcHRpb25zKCkge1xuICAgIGNvbnN0IGVuYWJsZWRPcHRpb25zID0gQXJyYXkuZnJvbSh0aGlzLiNvcHRpb25zLnZhbHVlcygpKS5maWx0ZXIob3B0aW9uID0+IG9wdGlvbi52aXNpYmxlICYmICFvcHRpb24uZGlzYWJsZWQpLm1hcChvcHRpb24gPT4gb3B0aW9uLnZhbHVlKTtcbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoLi4uZW5hYmxlZE9wdGlvbnMpO1xuICAgIHRoaXMuaW5wdXRFbGVtZW50U2l6ZSgpO1xuICB9XG5cbiAgaGFuZGxlVGFnUmVtb3ZlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdCh2YWx1ZSk7XG4gICAgdGhpcy5zZXRGb2N1cygncHJvZ3JhbScsICdoYW5kbGVUYWdSZW1vdmUnKTtcbiAgfVxuXG4gIHNldEZvY3VzKG9yaWdpbjogRm9jdXNPcmlnaW4gPSAncHJvZ3JhbScsIG1ldGhvZE5hbWU/OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50ID0gPEhUTUxFbGVtZW50Pih0aGlzLmlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudCA/PyB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgY29uc3QgcHJldmVudFNjcm9sbCA9IG9yaWdpbiA9PT0gJ3Byb2dyYW0nO1xuICAgIHRoaXMuZm9jdXNNb25pdG9yPy5mb2N1c1ZpYShlbGVtZW50LCBvcmlnaW4sIHsgcHJldmVudFNjcm9sbDogcHJldmVudFNjcm9sbCB9KTtcbiAgICAvLyBjb25zb2xlLmxvZygnc2V0Rm9jdXMnLCBvcmlnaW4sIG1ldGhvZE5hbWUsICdwcmV2ZW50U2Nyb2xsOicsIHByZXZlbnRTY3JvbGwsIGVsZW1lbnQudGFnTmFtZSwgdGhpcy52YWx1ZSk7XG4gIH1cblxuICBmaWx0ZXJPcHRpb25zKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZWFyY2hTdHJpbmcgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpID8/ICcnO1xuICAgIHRoaXMuI29wdGlvbnMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChzZWFyY2hTdHJpbmcgPT09ICcnKSB7XG4gICAgICAgIGl0ZW0udmlzaWJsZSA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5zZWFyY2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaXRlbS52aXNpYmxlID0gdGhpcy5zZWFyY2goaXRlbSwgc2VhcmNoU3RyaW5nKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCh0aGlzLnNlYXJjaCA9PT0gJ2V4dGVybmFsJyAmJiAhaXRlbS5jdXN0b20pIHx8ICFzZWFyY2hTdHJpbmcpIHtcbiAgICAgICAgLy8gaXRlbS52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaXRlbS52aXNpYmxlID0gaXRlbS5sYWJlbD8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcpID8/IHRydWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS51cGRhdGVPcHRpb25zQXJyYXkoQXJyYXkuZnJvbSh0aGlzLiNvcHRpb25zLnZhbHVlcygpKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udmlzaWJsZSkpO1xuICAgIHRoaXMudXNlck9wdGlvbnNBcnJheSQubmV4dChBcnJheS5mcm9tKHRoaXMuI29wdGlvbnMudmFsdWVzKCkpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5jdXN0b20pKTtcbiAgfVxuXG4gIGNyZWF0ZU5hdGl2ZVNlbGVjdCgpIHtcbiAgICBpZiAoIXRoaXMubmF0aXZlSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KE11bHRpU2VsZWN0TmF0aXZlU2VsZWN0Q29tcG9uZW50KTtcbiAgICB0aGlzLnVwZGF0ZU5hdGl2ZVNlbGVjdCgpO1xuICB9XG5cbiAgdXBkYXRlTmF0aXZlU2VsZWN0KCkge1xuICAgIGlmICghdGhpcy5uYXRpdmVTZWxlY3RSZWYgfHwgIXRoaXMubmF0aXZlSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IEFycmF5LmZyb20odGhpcy5vcHRpb25zU2VsZWN0ZWQpLm1hcChpdGVtID0+IHtcbiAgICAgIGNvbnN0IHsgc2VsZWN0ZWQsIHZhbHVlLCBsYWJlbCB9ID0gaXRlbVsxXTtcbiAgICAgIHJldHVybiB7IHNlbGVjdGVkLCB2YWx1ZSwgbGFiZWwgfTtcbiAgICB9KTtcblxuICAgIHRoaXMubmF0aXZlU2VsZWN0UmVmLmluc3RhbmNlLm11bHRpcGxlID0gdGhpcy5tdWx0aXBsZTtcbiAgICB0aGlzLm5hdGl2ZVNlbGVjdFJlZi5pbnN0YW5jZS5mb3JtID0gdGhpcy5uYXRpdmVGb3JtSWQ7XG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYuaW5zdGFuY2UuaWQgPSB0aGlzLm5hdGl2ZUlkO1xuICAgIHRoaXMubmF0aXZlU2VsZWN0UmVmLmluc3RhbmNlLm5hbWUgPSB0aGlzLm5hdGl2ZU5hbWU7XG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYuaW5zdGFuY2Uub3B0aW9ucyA9IFsuLi5vcHRpb25zXTtcbiAgICB0aGlzLm5hdGl2ZVNlbGVjdFJlZi5pbnN0YW5jZS5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7XG4gICAgdGhpcy5uYXRpdmVTZWxlY3RSZWYuaW5zdGFuY2UuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBpbnB1dEVsZW1lbnRTaXplKCkge1xuICAgIGlmICh0aGlzLmlucHV0RWxlbWVudCkge1xuICAgICAgaWYgKCF0aGlzLmlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudD8uZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5pbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQsICdzaXplJywgKHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoICsgMikudG9TdHJpbmcoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmlucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudCwgJ3NpemUnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5pbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQsICdzaXplJywgJzInKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVTZWFyY2hLZXlEb3duKCRldmVudDogS2V5Ym9hcmRFdmVudCkge1xuXG4gICAgaWYgKFsnRW50ZXInXS5pbmNsdWRlcygkZXZlbnQua2V5KSAmJiB0aGlzLnNlYXJjaFZhbHVlLmxlbmd0aCAmJiB0aGlzLmFsbG93Q3JlYXRlT3B0aW9ucykge1xuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAkZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmFkZFVzZXJPcHRpb24oKTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VhcmNoVmFsdWUubGVuZ3RoIHx8IHRoaXMub3B0aW9uc1NlbGVjdGVkLnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoWydCYWNrc3BhY2UnLCAnRGVsZXRlJ10uaW5jbHVkZXMoJGV2ZW50LmtleSkpIHtcbiAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGNvbnN0IGxhc3QgPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5maWx0ZXIob3B0aW9uID0+ICFvcHRpb24uZGlzYWJsZWQpLnBvcCgpO1xuICAgICAgaWYgKGxhc3QpIHtcbiAgICAgICAgdGhpcy5tdWx0aVNlbGVjdFNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QobGFzdC52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c01vbml0b3IobW9uaXRvcjogYm9vbGVhbikge1xuICAgIGlmIChtb25pdG9yICYmICF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAvLyB0b2RvIGZvY3VzIG9uIGlucHV0IHdoZW4gdGFiIGluXG4gICAgICAvLyB0aGlzLmZvY3VzTW9uaXRvcj8ubW9uaXRvcih0aGlzLmVsZW1lbnRSZWYsIGZhbHNlKVxuICAgICAgLy8gICAucGlwZShcbiAgICAgIC8vICAgICB0YXAob3JpZ2luID0+IHtcbiAgICAgIC8vICAgICAgIGlmIChvcmlnaW4gPT09ICdrZXlib2FyZCcgJiYgdGhpcy5zZWFyY2ggJiYgdGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAvLyAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIC8vICAgICAgIH1cbiAgICAgIC8vICAgICB9KSxcbiAgICAgIC8vICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZilcbiAgICAgIC8vICAgKVxuICAgICAgLy8gICAuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLmZvY3VzTW9uaXRvclN1YnNjcmlwdGlvbiA9IHRoaXMuZm9jdXNNb25pdG9yPy5tb25pdG9yKHRoaXMuZWxlbWVudFJlZiwgdHJ1ZSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gdG8gYXZvaWQgZm9jdXMgbG9zdCBvbiBzcGVlZCBzY3JvbGxpbmcgd2l0aCB2aXJ0dWFsU2Nyb2xsXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgob3JpZ2luKSA9PiB7XG4gICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3VidHJlZUZvY3VzZWQgPSB0aGlzLmZvY3VzT3JpZ2luKG9yaWdpbik7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNNb25pdG9yPy5zdG9wTW9uaXRvcmluZyh0aGlzLmVsZW1lbnRSZWYpO1xuICAgICAgdGhpcy5mb2N1c01vbml0b3JTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgYWN0aXZlT3B0aW9uOiAoRm9jdXNhYmxlT3B0aW9uICYgTXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQpIHwgbnVsbCA9IG51bGw7XG5cbiAgaGFuZGxlU2Nyb2xsZWRJbmRleENoYW5nZShzY3JvbGxlZEluZGV4OiBudW1iZXIsIHNjcm9sbFZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQpIHtcblxuICAgIGlmICghdGhpcy5zY3JvbGxWaWV3cG9ydCkge1xuICAgICAgdGhpcy5zY3JvbGxWaWV3cG9ydCA9IHNjcm9sbFZpZXdwb3J0O1xuICAgIH1cblxuICAgIGNvbnN0IGF2YWlsYWJsZU9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24udmlzaWJsZSk7XG4gICAgY29uc3QgZmlyc3RWaXNpYmxlT3B0aW9uID0gYXZhaWxhYmxlT3B0aW9uc1tzY3JvbGxlZEluZGV4XTtcbiAgICBjb25zdCBhY3RpdmVPcHRpb25JbmRleCA9IGF2YWlsYWJsZU9wdGlvbnMuZmluZEluZGV4KG9wdGlvbiA9PiBvcHRpb24udmFsdWUgPT09IHRoaXMuYWN0aXZlT3B0aW9uPy52YWx1ZSk7XG4gICAgY29uc3Qgb3B0aW9uc0FycmF5ID0gdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50LnRvQXJyYXkoKTtcblxuICAgIGlmIChzY3JvbGxlZEluZGV4ID4gYWN0aXZlT3B0aW9uSW5kZXgpIHtcbiAgICAgIGNvbnN0IGZpcnN0VmlzaWJsZUl0ZW0gPSBvcHRpb25zQXJyYXkuZmluZChvcHRpb24gPT4gb3B0aW9uLnZhbHVlID09PSBmaXJzdFZpc2libGVPcHRpb24/LnZhbHVlKTtcbiAgICAgIGlmIChmaXJzdFZpc2libGVJdGVtICYmIHNjcm9sbGVkSW5kZXgpIHtcbiAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbShmaXJzdFZpc2libGVJdGVtKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2Nyb2xsZWRJbmRleCArIHRoaXMudmlzaWJsZUl0ZW1zIC0gMiA8PSBhY3RpdmVPcHRpb25JbmRleCkge1xuICAgICAgY29uc3QgbGFzdFZpc2libGVJdGVtID0gb3B0aW9uc0FycmF5LmZpbmRJbmRleChvcHRpb24gPT4gb3B0aW9uLnZhbHVlID09PSBmaXJzdFZpc2libGVPcHRpb24udmFsdWUpO1xuICAgICAgaWYgKGxhc3RWaXNpYmxlSXRlbSA+IC0xKSB7XG4gICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0obGFzdFZpc2libGVJdGVtICsgdGhpcy52aXNpYmxlSXRlbXMgLSAyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgfVxuXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBvcHRpb246IElPcHRpb24pIHtcbiAgICByZXR1cm4gb3B0aW9uLnZhbHVlO1xuICB9XG5cbiAgaGFuZGxlU2VhcmNoVmFsdWVDaGFuZ2Uoc2VhcmNoVmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuc2VhcmNoVmFsdWUgPSBzZWFyY2hWYWx1ZTtcbiAgICBpZiAoIXNlYXJjaFZhbHVlKSB7XG4gICAgICB0aGlzLnNjcm9sbFZpZXdwb3J0Py5zY3JvbGxUb0luZGV4KDApO1xuICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgaWYgKHRoaXMuc3VidHJlZUZvY3VzZWQpIHtcbiAgICAgICAgdGhpcy5zZXRGb2N1cygncHJvZ3JhbScsICdoYW5kbGVTZWFyY2hWYWx1ZUNoYW5nZScpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0VmlydHVhbFNjcm9sbGVyKCkge1xuXG4gICAgaWYgKCF0aGlzLnZpcnR1YWxTY3JvbGxlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIG11bHRpU2VsZWN0T3B0aW9uVGVtcGxhdGUgZm9yIHZpcnR1YWxTY3JvbGxlclxuICAgIHRoaXMuY29udGVudFRlbXBsYXRlcy5mb3JFYWNoKChjaGlsZDogVGVtcGxhdGVJZERpcmVjdGl2ZSkgPT4ge1xuICAgICAgdGhpcy50ZW1wbGF0ZXNbY2hpbGQuaWRdID0gY2hpbGQudGVtcGxhdGVSZWY7XG4gICAgfSk7XG5cbiAgICAvLyBpZiBubyB0ZW1wbGF0ZSBmb3VuZCwgZ2V0IGRlZmF1bHRNdWx0aVNlbGVjdE9wdGlvblRlbXBsYXRlIGZyb20gdmlld1xuICAgIGlmICghdGhpcy50ZW1wbGF0ZXNbJ211bHRpU2VsZWN0T3B0aW9uVGVtcGxhdGUnXSkge1xuICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50ID0gdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNWaWV3O1xuICAgICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50Lm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8vIG11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQgZ2V0cyBvdXQgb2Ygb3JkZXIgb24gY2hhbmdlc1xuICAgIC8vIGRvIHNvcnQoKSBhbmQgcmVzZXQoKVxuICAgIGNvbnN0IGluZGV4T2ZPcHRpb24gPSAob3B0aW9uOiBNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudCkgPT4ge1xuICAgICAgcmV0dXJuIFsuLi5vcHRpb24uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQuY2hpbGRyZW5dPy5pbmRleE9mKG9wdGlvbi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25zQ2hhbmdlJDogT2JzZXJ2YWJsZTxRdWVyeUxpc3Q8TXVsdGlTZWxlY3RPcHRpb25Db21wb25lbnQ+PiA9IHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudC5jaGFuZ2VzO1xuXG4gICAgY29uc3Qgc29ydGVkT3B0aW9ucyQgPSBvcHRpb25zQ2hhbmdlJC5waXBlKFxuICAgICAgbWFwKG9wdGlvbnMgPT4gb3B0aW9ucy50b0FycmF5KCkpLFxuICAgICAgZmlsdGVyKG9wdGlvbnMgPT4gb3B0aW9ucy5sZW5ndGggPiAwKSxcbiAgICAgIG1hcChvcHRpb25zID0+IG9wdGlvbnMuc29ydCgoYSwgYikgPT4gaW5kZXhPZk9wdGlvbihhKSAtIGluZGV4T2ZPcHRpb24oYikpKSxcbiAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICk7XG5cbiAgICBzb3J0ZWRPcHRpb25zJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShzb3J0ZWRPcHRpb25zID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudC5yZXNldChzb3J0ZWRPcHRpb25zKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5zY3JvbGxWaWV3cG9ydFZpZXcuY2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIG1hcChjaGFuZ2VzID0+IGNoYW5nZXMudG9BcnJheSgpWzBdKSxcbiAgICAgICAgdGFwKChzY3JvbGxWaWV3cG9ydCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVmlld3BvcnQgPSBzY3JvbGxWaWV3cG9ydDtcblxuICAgICAgICAgICAgICBjb25zdCBjZGtWaXJ0dWFsU2Nyb2xsQ29udGVudFdyYXBwZXIgPSB0aGlzLnNjcm9sbFZpZXdwb3J0LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50Py5maXJzdEVsZW1lbnRDaGlsZDtcbiAgICAgICAgICAgICAgaWYgKGNka1ZpcnR1YWxTY3JvbGxDb250ZW50V3JhcHBlcikge1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGNka1ZpcnR1YWxTY3JvbGxDb250ZW50V3JhcHBlciwgbnVsbCkgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSBwYXJzZUludChzdHlsZT8uZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1sZWZ0JykgPz8gJzEycHgnKSAqIDM7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvblJlY29yZHMpID0+IHtcbiAgICAgICAgICAgICAgICAgIG11dGF0aW9uUmVjb3Jkcy5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGQuYWRkZWROb2Rlcy5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLm5vZGVOYW1lID09PSAnQy1NVUxUSS1TRUxFQ1QtT1BUSU9OJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSAobm9kZSBhcyBIVE1MRWxlbWVudCkub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPiB0aGlzLml0ZW1NaW5XaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1NaW5XaWR0aCA9IHdpZHRoICsgcGFkZGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBvYnNlcnZlcj8ub2JzZXJ2ZShjZGtWaXJ0dWFsU2Nyb2xsQ29udGVudFdyYXBwZXIsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy4jZGVzdHJveSQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIG9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRMaXN0S2V5TWFuYWdlcigpIHtcblxuICAgIC8vIHJ1biBvbmNlIG9uIG11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQgZmlyc3Qgc2V0XG4gICAgdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNDb250ZW50LmNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGNoYW5nZXMpID0+IHRoaXMudmlydHVhbFNjcm9sbGVyKSxcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldEZvY3VzS2V5TWFuYWdlcih0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuI2Rlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBzZXRGb2N1c0tleU1hbmFnZXIoZm9jdXNhYmxlT3B0aW9uczogKFF1ZXJ5TGlzdDxNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudD4gfCBNdWx0aVNlbGVjdE9wdGlvbkNvbXBvbmVudFtdKSkge1xuXG4gICAgLy8gdGhpcy5mb2N1c0tleU1hbmFnZXI/LmRlc3Ryb3koKTtcblxuICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyID0gbmV3IEZvY3VzS2V5TWFuYWdlcihmb2N1c2FibGVPcHRpb25zKVxuICAgICAgLndpdGhIb21lQW5kRW5kKClcbiAgICAgIC53aXRoUGFnZVVwRG93bigpXG4gICAgICAuc2tpcFByZWRpY2F0ZSgob3B0aW9uKSA9PiAob3B0aW9uLmRpc2FibGVkIHx8ICFvcHRpb24udmlzaWJsZSkpO1xuXG4gICAgaWYgKCF0aGlzLl92aXJ0dWFsU2Nyb2xsZXIpIHtcbiAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLndpdGhUeXBlQWhlYWQoMzAwKTtcbiAgICB9XG5cbiAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci50YWJPdXRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy4jZGVzdHJveVJlZiksXG4gICAgICAgIHRhcCgoKSA9PiB7fSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmNoYW5nZVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShjaGFuZ2UgPT4ge1xuICAgICAgICBpZiAoY2hhbmdlIDwgMCkge1xuICAgICAgICAgIHRoaXMuYWN0aXZlT3B0aW9uID8gdGhpcy5mb2N1c0tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSh0aGlzLmFjdGl2ZU9wdGlvbikgOiB0aGlzLnNldEZpcnN0SXRlbUFjdGl2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aXZlT3B0aW9uID0gdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbTtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gPE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50PnRoaXMuYWN0aXZlT3B0aW9uO1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0U2VydmljZS5mb2N1c0NoYW5nZShvcHRpb24pO1xuICAgICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQubm90aWZ5T25DaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zVmlldy5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICAgIH0pO1xuXG4gICAgLy8gaWYgKCF0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtKSB7XG4gICAgLy8gICB0aGlzLnNldEZpcnN0SXRlbUFjdGl2ZSgpO1xuICAgIC8vIH1cbiAgfVxuXG4gIGdldCBmaXJzdEZvY3VzYWJsZUl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMubXVsdGlTZWxlY3RPcHRpb25zQ29udGVudD8uZmluZChvcHRpb24gPT4gb3B0aW9uLnZpc2libGUgJiYgIW9wdGlvbi5kaXNhYmxlZCkgPz8gdGhpcy5tdWx0aVNlbGVjdE9wdGlvbnNWaWV3Py5maW5kKG9wdGlvbiA9PiBvcHRpb24udmlzaWJsZSAmJiAhb3B0aW9uLmRpc2FibGVkKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rmlyc3RJdGVtQWN0aXZlKCkge1xuICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlSXRlbSA9IHRoaXMuZmlyc3RGb2N1c2FibGVJdGVtO1xuICAgIGZpcnN0Rm9jdXNhYmxlSXRlbSA/IHRoaXMuZm9jdXNLZXlNYW5hZ2VyPy5zZXRBY3RpdmVJdGVtKGZpcnN0Rm9jdXNhYmxlSXRlbSkgOiB0aGlzLmZvY3VzS2V5TWFuYWdlcj8uc2V0Rmlyc3RJdGVtQWN0aXZlKCk7XG4gICAgdGhpcy5hY3RpdmVPcHRpb24gPSB0aGlzLmZvY3VzS2V5TWFuYWdlcj8uYWN0aXZlSXRlbSA/PyBudWxsO1xuICB9XG5cbiAgdXBkYXRlQWN0aXZlSXRlbShpbmRleDogbnVtYmVyKTogdm9pZDtcblxuICB1cGRhdGVBY3RpdmVJdGVtPFRJdGVtIGV4dGVuZHMgKE11bHRpU2VsZWN0T3B0aW9uQ29tcG9uZW50ICYgRm9jdXNhYmxlT3B0aW9uKT4oaXRlbTogVEl0ZW0pOiB2b2lkO1xuXG4gIHVwZGF0ZUFjdGl2ZUl0ZW0oaXRlbTogYW55KSB7XG4gICAgY29uc3QgZmlyc3RGb2N1c2FibGVJdGVtID0gdGhpcy5maXJzdEZvY3VzYWJsZUl0ZW0gPz8gaXRlbTtcbiAgICBmaXJzdEZvY3VzYWJsZUl0ZW0gPyB0aGlzLmZvY3VzS2V5TWFuYWdlcj8udXBkYXRlQWN0aXZlSXRlbShmaXJzdEZvY3VzYWJsZUl0ZW0pIDogdGhpcy5mb2N1c0tleU1hbmFnZXI/LnVwZGF0ZUFjdGl2ZUl0ZW0oMCk7XG4gICAgaWYgKHRoaXMuZm9jdXNLZXlNYW5hZ2VyPy5hY3RpdmVJdGVtKSB7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc0NvbnRlbnQ/LmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgb3B0aW9uLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0T3B0aW9uc1ZpZXc/LmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgb3B0aW9uLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtLmFjdGl2ZSA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlT3B0aW9uID0gdGhpcy5mb2N1c0tleU1hbmFnZXI/LmFjdGl2ZUl0ZW0gPz8gbnVsbDtcbiAgfVxuXG4gIGhhbmRsZUluZGljYXRvckNsaWNrKCRldmVudDogTW91c2VFdmVudCkge1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnZpc2libGUgPSAhdGhpcy52aXNpYmxlO1xuICB9XG59XG4iLCI8Yy1kcm9wZG93biAjZHJvcGRvd249XCJjRHJvcGRvd25cIlxuICAgICAgICAgICAgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCJcbiAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwiJ291dHNpZGUnXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm11bHRpc2VsZWN0Q2xhc3Nlc1wiXG4gICAgICAgICAgICBbcG9wcGVyT3B0aW9uc109XCJwb3BwZXJPcHRpb25zXCI+XG4gIDxkaXYgI2Ryb3Bkb3duVG9nZ2xlPVwiY0Ryb3Bkb3duVG9nZ2xlXCIgW2NhcmV0XT1cImZhbHNlXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgY0Ryb3Bkb3duVG9nZ2xlIHJvbGU9XCJidXR0b25cIlxuICAgICAgIGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3QtaW5wdXQtZ3JvdXBcIj5cbiAgICA8c3BhblxuICAgICAgW25nQ2xhc3NdPVwieydmb3JtLW11bHRpLXNlbGVjdC1zZWxlY3Rpb24nOiB0cnVlLCAnZm9ybS1tdWx0aS1zZWxlY3Qtc2VsZWN0aW9uLXRhZ3MnOiAoc2VsZWN0aW9uVHlwZSA9PT0gJ3RhZ3MnICYmIHNlbGVjdGVkT3B0aW9ucy5sZW5ndGgpfVwiPlxuICAgICAgQGlmIChzZWxlY3Rpb25UeXBlID09PSAndGFncycpIHtcbiAgICAgICAgQGlmIChvcHRpb25zU2VsZWN0ZWQkIHwgYXN5bmM7IGFzIG9wdGlvblRhZ3MpIHtcbiAgICAgICAgICBAZm9yIChvcHRpb24gb2Ygb3B0aW9uVGFnczsgdHJhY2sgb3B0aW9uLnZhbHVlOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgPGMtbXVsdGktc2VsZWN0LXRhZ1xuICAgICAgICAgICAgICAocmVtb3ZlKT1cImhhbmRsZVRhZ1JlbW92ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZCA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJvcHRpb24ubGFiZWwgPz8gb3B0aW9uLnZhbHVlPy50b1N0cmluZygpXCJcbiAgICAgICAgICAgICAgW29wdGlvbl09XCJvcHRpb25cIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLW11bHRpLXNlbGVjdC10YWcgdGV4dC10cnVuY2F0ZVwiXG4gICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gQGVsc2UgaWYgKHNlbGVjdGlvblR5cGUgPT09ICd0ZXh0JyAmJiAhIXNlbGVjdGVkT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgQGZvciAob3B0aW9uIG9mIHNlbGVjdGVkT3B0aW9uczsgdHJhY2sgb3B0aW9uLnZhbHVlOyBsZXQgaSA9ICRpbmRleCwgbGFzdCA9ICRsYXN0KSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLW11bHRpLXNlbGVjdC10ZXh0IHRleHQtdHJ1bmNhdGVcIj57eyBvcHRpb24ubGFiZWwgfX17eyBsYXN0ID8gJyZuYnNwOycgOiAnLCZuYnNwOycgfX08L3NwYW4+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEBpZiAoIXNlYXJjaCkge1xuICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcGxhY2Vob2xkZXIgdGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgIHt7IG9wdGlvbnNTZWxlY3RlZC5zaXplID09PSAwID8gcGxhY2Vob2xkZXIgOiBjb3VudGVyUGxhY2Vob2xkZXJUZXh0IH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIH1cbiAgICAgIEBpZiAoc2VhcmNoKSB7XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICNpbnB1dEVsZW1lbnRcbiAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVTZWFyY2hLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJoYW5kbGVTZWFyY2hWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID09PSAwID8gcGxhY2Vob2xkZXIgOiBjb3VudGVyUGxhY2Vob2xkZXJUZXh0XCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgIXNlYXJjaFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAnZm9ybS1tdWx0aS1zZWxlY3Qtc2VhcmNoJzogdHJ1ZSwgZGlzYWJsZWQ6IChkaXNhYmxlZCB8fCAhc2VhcmNoKSwgJ3RleHQtdHJ1bmNhdGUnOiB0cnVlIH1cIlxuICAgICAgICAgIFtuZ01vZGVsXT1cInNlYXJjaFZhbHVlXCJcbiAgICAgICAgICBbdmFsdWVdPVwic2VhcmNoVmFsdWVcIlxuICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgY011bHRpU2VsZWN0U2VhcmNoXG4gICAgICAgICAgc2l6ZT1cIjJcIlxuICAgICAgICAgIHRhYmluZGV4PVwie3sgZGlzYWJsZWQgPyAtMSA6IDAgfX1cIlxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgPlxuICAgICAgfVxuICAgIDwvc3Bhbj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3QtYnV0dG9uc1wiPlxuICAgICAgQGlmICghIWNsZWFuZXIgJiYgb3B0aW9uc1NlbGVjdGVkLnNpemUgPiAwICYmICFkaXNhYmxlZCkge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFyQWxsT3B0aW9ucygkZXZlbnQpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgKCFpc0Ryb3Bkb3duVmlzaWJsZSAmJiBjbGVhbmVyICE9PSAnYWN0aXZlJylcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhciBhbGxcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3QtY2xlYW5lclwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgIH1cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cImhhbmRsZUluZGljYXRvckNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tbXVsdGktc2VsZWN0LWluZGljYXRvclwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgQGlmICghZGlzYWJsZWQpIHtcbiAgICA8ZGl2ICNkcm9wZG93bk1lbnU9XCJjRHJvcGRvd25NZW51XCIgW3Zpc2libGVdPVwiZHJvcGRvd24udmlzaWJsZVwiIGNEcm9wZG93bk1lbnVcbiAgICAgICAgIGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3QtZHJvcGRvd25cIiByb2xlPVwibWVudVwiPlxuICAgICAgQGlmICh2aXNpYmxlT3B0aW9ucygpICYmIG9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBAaWYgKHNlbGVjdEFsbCAmJiBtdWx0aXBsZSAmJiAhdmlydHVhbFNjcm9sbGVyKSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEFsbE9wdGlvbnMoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tbXVsdGktc2VsZWN0LWFsbFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgc2VsZWN0QWxsTGFiZWwgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQGlmICgodmlzaWJsZU9wdGlvbnMoKSAmJiBvcHRpb25zLmxlbmd0aCA+IDApIHx8IGlzTG9hZGluZygpKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ2aXJ0dWFsU2Nyb2xsZXIgPyBtdWx0aXNlbGVjdFZpcnR1YWxTY3JvbGxlciA6IG11bHRpc2VsZWN0T3B0aW9uc0RpdlwiIC8+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tbXVsdGktc2VsZWN0LW9wdGlvbnMtZW1wdHlcIj57eyBzZWFyY2hOb1Jlc3VsdHNMYWJlbCB9fTwvZGl2PlxuICAgICAgfVxuICAgICAgQGlmIChpc0xvYWRpbmcoKSkge1xuICAgICAgICA8Yy1lbGVtZW50LWNvdmVyIFtuZ1N0eWxlXT1cInsnYm9yZGVyLXJhZGl1cyc6ICc2cHgnLCAnei1pbmRleCc6IDJ9XCIgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuPC9jLWRyb3Bkb3duPlxuXG48bmctdGVtcGxhdGUgI211bHRpc2VsZWN0VmlydHVhbFNjcm9sbGVyPlxuICBAZGVmZXIgKG9uIGltbWVkaWF0ZSkge1xuICAgIEBpZiAoKG9wdGlvbnNBcnJheSQgfCBhc3luYyk7IGFzIG9wdGlvbnNBcnJheSkge1xuICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxuICAgICAgICAjc2Nyb2xsVmlld3BvcnRcbiAgICAgICAgKHNjcm9sbGVkSW5kZXhDaGFuZ2UpPVwiaGFuZGxlU2Nyb2xsZWRJbmRleENoYW5nZSgkZXZlbnQsIHNjcm9sbFZpZXdwb3J0KVwiXG4gICAgICAgIFtpdGVtU2l6ZV09XCJpdGVtU2l6ZVwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIm9wdGlvbnNNYXhIZWlnaHQgIT09ICdhdXRvJyA/IHsgJ2hlaWdodC5weCc6IG9wdGlvbnNNYXhIZWlnaHQsICdtYXhIZWlnaHQucHgnOiBvcHRpb25zTWF4SGVpZ2h0LCAnbWluV2lkdGgucHgnOiBpdGVtTWluV2lkdGggPz8gMTk2LCBvdmVyZmxvd1g6ICdoaWRkZW4nIH0gOiB7ICdtaW5XaWR0aC5weCc6IGl0ZW1NaW5XaWR0aCA/PyAxOTYsIG92ZXJmbG93WDogJ2hpZGRlbid9XCJcbiAgICAgICAgbWF4QnVmZmVyUHg9XCJ7e2l0ZW1TaXplICogdmlzaWJsZUl0ZW1zfX1cIlxuICAgICAgICBtaW5CdWZmZXJQeD1cInt7aXRlbVNpemUgKiB2aXNpYmxlSXRlbXN9fVwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1tdWx0aS1zZWxlY3Qtb3B0aW9uc1wiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgI2Nka1ZpcnR1YWxGb3JcbiAgICAgICAgICAqY2RrVmlydHVhbEZvcj1cImxldCBvcHRpb24gb2Ygb3B0aW9uc0FycmF5OyB0cmFja0J5OiB0cmFja0J5Rm47IHRlbXBsYXRlQ2FjaGVTaXplOiAwOyBldmVuIGFzIGV2ZW47IG9kZCBhcyBvZGQ7IGluZGV4IGFzIGluZGV4OyBjb3VudCBhcyBjb3VudDsgZmlyc3QgYXMgZmlyc3Q7IGxhc3QgYXMgbGFzdDtcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiBvcHRpb24sIGV2ZW4sIG9kZCwgaW5kZXgsIGNvdW50LCBmaXJzdCwgbGFzdH1cIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlc1snbXVsdGlTZWxlY3RPcHRpb25UZW1wbGF0ZSddIHx8IGRlZmF1bHRNdWx0aVNlbGVjdE9wdGlvblRlbXBsYXRlXCJcbiAgICAgICAgLz5cbiAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgIH1cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtdWx0aXNlbGVjdE9wdGlvbnNEaXY+XG4gIDxkaXZcbiAgICBbbmdDbGFzc109XCJ7J2Zvcm0tbXVsdGktc2VsZWN0LW9wdGlvbnMnOiB2aXNpYmxlT3B0aW9ucygpfVwiXG4gICAgW25nU3R5bGVdPVwib3B0aW9uc01heEhlaWdodCAhPT0gJ2F1dG8nID8geyAnbWF4SGVpZ2h0LnB4Jzogb3B0aW9uc01heEhlaWdodCwgb3ZlcmZsb3dZOiAnc2Nyb2xsJyB9IDoge31cIlxuICA+XG4gICAgPG5nLWNvbnRlbnQgLz5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInVzZXJPcHRpb25zVGVtcGxhdGVcIiAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdE11bHRpU2VsZWN0T3B0aW9uVGVtcGxhdGUgbGV0LW9wdGlvbj5cbiAgPGMtbXVsdGktc2VsZWN0LW9wdGlvblxuICAgIFtkaXNhYmxlZF09XCJvcHRpb24uZGlzYWJsZWRcIlxuICAgIFtsYWJlbF09XCJvcHRpb24ubGFiZWxcIlxuICAgIFt0ZXh0XT1cIm9wdGlvbi50ZXh0XCJcbiAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcbiAgICBbdmlzaWJsZV09XCJvcHRpb24udmlzaWJsZVwiXG4gID5cbiAgICB7eyBvcHRpb24udGV4dCB9fVxuICA8L2MtbXVsdGktc2VsZWN0LW9wdGlvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdXNlck9wdGlvbnNUZW1wbGF0ZT5cbiAgQGZvciAob3B0aW9uIG9mIHVzZXJPcHRpb25zQXJyYXkkIHwgYXN5bmM7IHRyYWNrIG9wdGlvbjsgbGV0IGV2ZW4gPSAkZXZlbiwgb2RkID0gJG9kZCwgaW5kZXggPSAkaW5kZXgsIGNvdW50ID0gJGNvdW50LCBmaXJzdCA9ICRmaXJzdCwgbGFzdCA9ICRsYXN0KSB7XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVzWydtdWx0aVNlbGVjdE9wdGlvblRlbXBsYXRlJ10gfHwgZGVmYXVsdE11bHRpU2VsZWN0T3B0aW9uVGVtcGxhdGVcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInskaW1wbGljaXQ6IG9wdGlvbiwgZXZlbiwgb2RkLCBpbmRleCwgY291bnQsIGZpcnN0LCBsYXN0fVwiXG4gICAgLz5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|