@fundamental-ngx/core 0.44.0-rc.6 → 0.44.0
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/action-bar/action-bar.component.mjs +3 -2
- package/esm2022/alert/alert-service/alert.service.mjs +3 -3
- package/esm2022/alert/alert-utils/alert-config.mjs +3 -2
- package/esm2022/alert/alert-utils/alert-container.component.mjs +3 -2
- package/esm2022/alert/alert-utils/alert-ref.mjs +3 -2
- package/esm2022/alert/alert.component.mjs +3 -3
- package/esm2022/alert/alert.module.mjs +3 -3
- package/esm2022/avatar/avatar.component.mjs +3 -3
- package/esm2022/bar/directives/bar-element.directive.mjs +3 -2
- package/esm2022/carousel/carousel.component.mjs +4 -4
- package/esm2022/date-picker/date-picker.component.mjs +9 -8
- package/esm2022/datetime-picker/datetime-picker.component.mjs +8 -7
- package/esm2022/dialog/dialog-footer-button/dialog-footer-button.component.mjs +3 -2
- package/esm2022/dialog/directives/dialog-decisive-button.directive.mjs +3 -2
- package/esm2022/feed-list-item/components/item/feed-list-item.component.mjs +4 -4
- package/esm2022/form/form-label/form-label.component.mjs +5 -4
- package/esm2022/inline-help/inline-help.directive.mjs +3 -2
- package/esm2022/input-group/input-group.component.mjs +4 -3
- package/esm2022/link/link.component.mjs +3 -3
- package/esm2022/list/list-item/list-item.component.mjs +6 -6
- package/esm2022/message-box/directives/message-box-decisive-button.directive.mjs +3 -2
- package/esm2022/message-box/message-box-footer-button/message-box-footer-button.component.mjs +3 -2
- package/esm2022/pagination/pagination.component.mjs +10 -10
- package/esm2022/popover/base/base-popover.class.mjs +5 -4
- package/esm2022/popover/popover.component.mjs +3 -2
- package/esm2022/product-switch/product-switch/product-switch.component.mjs +3 -2
- package/esm2022/shellbar/shellbar-actions/shellbar-actions.component.mjs +3 -2
- package/esm2022/slider/slider.component.mjs +5 -4
- package/esm2022/split-button/split-button.component.mjs +4 -3
- package/esm2022/splitter/splitter.component.mjs +3 -2
- package/esm2022/step-input/step-input.component.mjs +4 -4
- package/esm2022/switch/switch.component.mjs +5 -4
- package/esm2022/tabs/tab-item-expand/tab-item-expand.component.mjs +3 -2
- package/esm2022/tabs/tab-list.component.mjs +3 -3
- package/esm2022/time/i18n/time-i18n.mjs +3 -2
- package/esm2022/token/token.component.mjs +4 -4
- package/esm2022/toolbar/toolbar.component.mjs +3 -3
- package/esm2022/upload-collection/upload-collection-button-group/upload-collection-button-group.component.mjs +8 -7
- package/esm2022/upload-collection/upload-collection-form-item/upload-collection-form-item.component.mjs +3 -2
- package/fesm2022/fundamental-ngx-core-action-bar.mjs +2 -1
- package/fesm2022/fundamental-ngx-core-action-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-alert.mjs +7 -7
- package/fesm2022/fundamental-ngx-core-alert.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-avatar.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-avatar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-bar.mjs +2 -1
- package/fesm2022/fundamental-ngx-core-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-carousel.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-carousel.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-date-picker.mjs +8 -7
- package/fesm2022/fundamental-ngx-core-date-picker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-datetime-picker.mjs +7 -6
- package/fesm2022/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-dialog.mjs +3 -2
- package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-feed-list-item.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-form.mjs +4 -3
- package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-inline-help.mjs +2 -1
- package/fesm2022/fundamental-ngx-core-inline-help.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-input-group.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-input-group.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-link.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-link.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-list.mjs +5 -5
- package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-message-box.mjs +3 -2
- package/fesm2022/fundamental-ngx-core-message-box.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-pagination.mjs +9 -9
- package/fesm2022/fundamental-ngx-core-pagination.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-popover.mjs +6 -5
- package/fesm2022/fundamental-ngx-core-popover.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-product-switch.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-product-switch.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-shellbar.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-slider.mjs +4 -4
- package/fesm2022/fundamental-ngx-core-slider.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-split-button.mjs +3 -2
- package/fesm2022/fundamental-ngx-core-split-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-splitter.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-splitter.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-step-input.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-step-input.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-switch.mjs +4 -3
- package/fesm2022/fundamental-ngx-core-switch.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-tabs.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-time.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-time.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-token.mjs +3 -3
- package/fesm2022/fundamental-ngx-core-token.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-toolbar.mjs +2 -2
- package/fesm2022/fundamental-ngx-core-toolbar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-core-upload-collection.mjs +8 -7
- package/fesm2022/fundamental-ngx-core-upload-collection.mjs.map +1 -1
- package/fundamental-ngx-core-v0.44.0.tgz +0 -0
- package/package.json +3 -3
- package/schematics/add-dependencies/index.js +4 -4
- package/fundamental-ngx-core-v0.44.0-rc.6.tgz +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, HostBinding, HostListener, Input, NgZone, Optional, Output, QueryList, Renderer2, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
2
2
|
import { debounceTime, take, takeUntil } from 'rxjs/operators';
|
|
3
3
|
import { merge, Subject } from 'rxjs';
|
|
4
|
-
import { resizeObservable, RtlService } from '@fundamental-ngx/cdk/utils';
|
|
4
|
+
import { resizeObservable, RtlService, warnOnce } from '@fundamental-ngx/cdk/utils';
|
|
5
5
|
import { CarouselItemComponent } from './carousel-item/carousel-item.component';
|
|
6
6
|
import { CarouselResourceStringsEN } from './i18n/carousel-resources';
|
|
7
7
|
import { CarouselService } from './carousel.service';
|
|
@@ -32,7 +32,7 @@ export class CarouselComponent {
|
|
|
32
32
|
* Label for left navigation button
|
|
33
33
|
*/
|
|
34
34
|
set leftNavigationBtnLabel(value) {
|
|
35
|
-
|
|
35
|
+
warnOnce("Property leftNavigationBtnLabel is deprecated. Use i18n capabilities 'coreCarousel.leftNavigationBtnLabel' key instead.");
|
|
36
36
|
this._leftNavigationBtnLabel = value;
|
|
37
37
|
}
|
|
38
38
|
get leftNavigationBtnLabel() {
|
|
@@ -43,7 +43,7 @@ export class CarouselComponent {
|
|
|
43
43
|
* Label for right navigation button
|
|
44
44
|
*/
|
|
45
45
|
set rightNavigationBtnLabel(value) {
|
|
46
|
-
|
|
46
|
+
warnOnce("Property rightNavigationBtnLabel is deprecated. Use i18n capabilities 'coreCarousel.rightNavigationBtnLabel' key instead.");
|
|
47
47
|
this._rightNavigationBtnLabel = value;
|
|
48
48
|
}
|
|
49
49
|
get rightNavigationBtnLabel() {
|
|
@@ -677,4 +677,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
|
|
|
677
677
|
type: HostListener,
|
|
678
678
|
args: ['keydown.arrowleft', ['$event']]
|
|
679
679
|
}] } });
|
|
680
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2Fyb3VzZWwvY2Fyb3VzZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2Fyb3VzZWwvY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFJTixRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBRVQsU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHlCQUF5QixFQUE2QixNQUFNLDJCQUEyQixDQUFDO0FBQ2pHLE9BQU8sRUFBeUMsZUFBZSxFQUFnQixNQUFNLG9CQUFvQixDQUFDOzs7Ozs7O0FBRTFHLGtEQUFrRDtBQUNsRCxNQUFNLHlCQUF5QixHQUFHLENBQUMsQ0FBQztBQUdwQyxNQUFNLENBQU4sSUFBWSxjQUlYO0FBSkQsV0FBWSxjQUFjO0lBQ3RCLG1EQUFJLENBQUE7SUFDSixtREFBSSxDQUFBO0lBQ0osMkRBQVEsQ0FBQTtBQUNaLENBQUMsRUFKVyxjQUFjLEtBQWQs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QUFDLG1CQUFtQjtnQkFvTDlCLG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyxvQkFBb0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFROUMsa0JBQWtCO3NCQURqQixZQUFZO3VCQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IG1lcmdlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyByZXNpemVPYnNlcnZhYmxlLCBSdGxTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQ2Fyb3VzZWxJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jYXJvdXNlbC1pdGVtL2Nhcm91c2VsLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IENhcm91c2VsUmVzb3VyY2VTdHJpbmdzRU4sIEZkQ2Fyb3VzZWxSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuL2kxOG4vY2Fyb3VzZWwtcmVzb3VyY2VzJztcbmltcG9ydCB7IENhcm91c2VsQ29uZmlnLCBDYXJvdXNlbEl0ZW1JbnRlcmZhY2UsIENhcm91c2VsU2VydmljZSwgUGFuRW5kT3V0cHV0IH0gZnJvbSAnLi9jYXJvdXNlbC5zZXJ2aWNlJztcblxuLyoqIFBhZ2UgbGltaXQgdG8gc3dpdGNoIHRvIG51bWVyaWNhbCBpbmRpY2F0b3IgKi9cbmNvbnN0IElDT05fUEFHRV9JTkRJQ0FUT1JfTElNSVQgPSA4O1xuZXhwb3J0IHR5cGUgUGFnZUluZGljYXRvcnNPcmllbnRhdGlvbiA9ICdib3R0b20nIHwgJ3RvcCc7XG5cbmV4cG9ydCBlbnVtIFNsaWRlRGlyZWN0aW9uIHtcbiAgICBOb25lLFxuICAgIE5FWFQsXG4gICAgUFJFVklPVVNcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRml0dGluZ1NsaWRlc0FuZFdpZHRoIHtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIHNsaWRlczogbnVtYmVyO1xufVxubGV0IGNhcm91c2VsQ291bnRlciA9IDA7XG5cbmNsYXNzIENhcm91c2VsQWN0aXZlU2xpZGVzIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgYWN0aXZlSXRlbXM6IENhcm91c2VsSXRlbUNvbXBvbmVudFtdLCBwdWJsaWMgcmVhZG9ubHkgc2xpZGVEaXJlY3Rpb246IHN0cmluZykge31cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jYXJvdXNlbCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Nhcm91c2VsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jYXJvdXNlbC5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbQ2Fyb3VzZWxTZXJ2aWNlXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbc3R5bGUud2lkdGhdJzogJ3dpZHRoJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgQ2Fyb3VzZWxDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3lcbntcbiAgICAvKiogSUQgZm9yIHRoZSBDYXJvdXNlbC4gKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgaWQgPSBgZmQtY2Fyb3VzZWwtJHtjYXJvdXNlbENvdW50ZXIrK31gO1xuXG4gICAgLyoqIFNldHMgYXJpYS1sYWJlbCBhdHRyaWJ1dGUgZm9yIGNhcm91c2VsICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWwgPSBudWxsO1xuXG4gICAgLyoqIFNldHMgYXJpYS1sYWJlbGxlZGJ5IGF0dHJpYnV0ZSBmb3IgY2Fyb3VzZWwgKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbGxlZEJ5OiBzdHJpbmc7XG5cbiAgICAvKiogU2V0cyBhcmlhLWRlc2NyaWJlZGJ5IGF0dHJpYnV0ZSBmb3IgY2Fyb3VzZWwgKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFEZXNjcmliZWRCeTogc3RyaW5nO1xuXG4gICAgLyoqIFNldHMgcG9zaXRpb24gb2YgcGFnZSBpbmRpY2F0b3IgY29udGFpbmVyLiBEZWZhdWx0IHBvc2l0aW9uIGlzIGJvdHRvbS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHBhZ2VJbmRpY2F0b3JzT3JpZW50YXRpb246IFBhZ2VJbmRpY2F0b3JzT3JpZW50YXRpb24gPSAnYm90dG9tJztcblxuICAgIC8qKiBIZWlnaHQgZm9yIGNhcm91c2VsIGNvbnRhaW5lciAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGVpZ2h0OiBzdHJpbmc7XG5cbiAgICAvKiogV2lkdGggZm9yIGNhcm91c2VsIGNvbnRhaW5lciAqL1xuICAgIEBJbnB1dCgpXG4gICAgd2lkdGggPSAnMTAwJSc7XG5cbiAgICAvKiogSWYgY2Fyb3VzZWwgaXMgaW4gY2lyY3VsYXIgbG9vcCAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9vcCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBMYWJlbCBmb3IgbGVmdCBuYXZpZ2F0aW9uIGJ1dHRvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGxlZnROYXZpZ2F0aW9uQnRuTGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBcIlByb3BlcnR5IGxlZnROYXZpZ2F0aW9uQnRuTGFiZWwgaXMgZGVwcmVjYXRlZC4gVXNlIGkxOG4gY2FwYWJpbGl0aWVzICdjb3JlQ2Fyb3VzZWwubGVmdE5hdmlnYXRpb25CdG5MYWJlbCcga2V5IGluc3RlYWQuXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbGVmdE5hdmlnYXRpb25CdG5MYWJlbCA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBsZWZ0TmF2aWdhdGlvbkJ0bkxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZWZ0TmF2aWdhdGlvbkJ0bkxhYmVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIHVzZSBpMThuIGNhcGFiaWxpdGllcyBpbnN0ZWFkXG4gICAgICogTGFiZWwgZm9yIHJpZ2h0IG5hdmlnYXRpb24gYnV0dG9uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcmlnaHROYXZpZ2F0aW9uQnRuTGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBcIlByb3BlcnR5IHJpZ2h0TmF2aWdhdGlvbkJ0bkxhYmVsIGlzIGRlcHJlY2F0ZWQuIFVzZSBpMThuIGNhcGFiaWxpdGllcyAnY29yZUNhcm91c2VsLnJpZ2h0TmF2aWdhdGlvbkJ0bkxhYmVsJyBrZXkgaW5zdGVhZC5cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9yaWdodE5hdmlnYXRpb25CdG5MYWJlbCA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCByaWdodE5hdmlnYXRpb25CdG5MYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmlnaHROYXZpZ2F0aW9uQnRuTGFiZWw7XG4gICAgfVxuXG4gICAgLyoqIFNob3dzL2hpZGVzIG9wdGlvbmFsIG5hdmlnYXRpb24gYnV0dG9uICovXG4gICAgQElucHV0KClcbiAgICBuYXZpZ2F0aW9uID0gdHJ1ZTtcblxuICAgIC8qKiBTaG93IG5hdmlnYXRpb24gYnV0dG9uIGluIHBhZ2UgaW5kaWNhdG9yIGNvbnRhaW5lciBvciBpbnNpZGUgY29udGVudC4gRGVmYXVsdCBpcyBwYWdlIGluZGljYXRvciBjb250YWluZXIgb24gdHJ1ZSB2YWx1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmF2aWdhdG9ySW5QYWdlSW5kaWNhdG9yID0gdHJ1ZTtcblxuICAgIC8qKiBDb252ZXJ0IHRvIE51bWVyaWMgcGFnZSBpbmRpY2F0b3IgKi9cbiAgICBASW5wdXQoKVxuICAgIG51bWVyaWNJbmRpY2F0b3IgPSBmYWxzZTtcblxuICAgIC8qKiBTaG93cy9oaWRlcyBvcHRpb25hbCBwYWdlIGluZGljYXRvciBjb250YWluZXIgICovXG4gICAgQElucHV0KClcbiAgICBwYWdlSW5kaWNhdG9yQ29udGFpbmVyID0gdHJ1ZTtcblxuICAgIC8qKiBTaG93cy9oaWRlcyBvcHRpb25hbCBwYWdlIGluZGljYXRvciAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGFnZUluZGljYXRvciA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBBbiBhY2Nlc3NvciB0aGF0IHNldHMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICogQnkgZGVmYXVsdCBpdCB1c2VzIEVOIHJlc291cmNlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCByZXNvdXJjZVN0cmluZ3ModmFsdWU6IEZkQ2Fyb3VzZWxSZXNvdXJjZVN0cmluZ3MpIHtcbiAgICAgICAgdGhpcy5fcmVzb3VyY2VTdHJpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcmVzb3VyY2VTdHJpbmdzLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCByZXR1cm5zIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqL1xuICAgIGdldCByZXNvdXJjZVN0cmluZ3MoKTogRmRDYXJvdXNlbFJlc291cmNlU3RyaW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVN0cmluZ3M7XG4gICAgfVxuXG4gICAgLyoqIFNldHMgc2xpZGluZyBkdXJhdGlvbiBpbiBtaWxsaWUgc2Vjb25kcy4gRGVmYXVsdCBpcyAxNTAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNsaWRlVHJhbnNpdGlvbkR1cmF0aW9uID0gMTUwO1xuXG4gICAgLyoqIElzIHN3aXBlIGVuYWJsZWQgKi9cbiAgICBASW5wdXQoKVxuICAgIHN3aXBlRW5hYmxlZCA9IHRydWU7XG5cbiAgICAvKiogSXMgY2Fyb3VzZWwgaXMgdmVydGljYWwuIERlZmF1bHQgdmFsdWUgaXMgZmFsc2UuICovXG4gICAgQElucHV0KClcbiAgICB2ZXJ0aWNhbCA9IGZhbHNlO1xuXG4gICAgLyoqIE51bWJlciBvZiBpdGVtcyB0byBiZSB2aXNpYmxlIGF0IGEgdGltZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZpc2libGVTbGlkZXNDb3VudCh2YWx1ZTogbnVtYmVyIHwgJ2F1dG8nKSB7XG4gICAgICAgIHRoaXMuX3Zpc2libGVTbGlkZXNDb3VudCA9IHZhbHVlO1xuICAgICAgICB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50ID0gdGhpcy5fZ2V0VmlzaWJsZVNsaWRlc0NvdW50KCk7XG4gICAgfVxuXG4gICAgZ2V0IHZpc2libGVTbGlkZXNDb3VudCgpOiBudW1iZXIgfCAnYXV0bycge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZVNsaWRlc0NvdW50O1xuICAgIH1cblxuICAgIC8qKiBBbiBldmVudCB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXIgYSBzbGlkZSB0cmFuc2l0aW9uIGhhcyBoYXBwZW5lZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJlYWRvbmx5IHNsaWRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Q2Fyb3VzZWxBY3RpdmVTbGlkZXM+ID0gbmV3IEV2ZW50RW1pdHRlcjxDYXJvdXNlbEFjdGl2ZVNsaWRlcz4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihDYXJvdXNlbEl0ZW1Db21wb25lbnQsIHtcbiAgICAgICAgZGVzY2VuZGFudHM6IHRydWVcbiAgICB9KVxuICAgIHNsaWRlczogUXVlcnlMaXN0PENhcm91c2VsSXRlbUNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NsaWRlQ29udGFpbmVyJylcbiAgICBzbGlkZUNvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICAgIC8qKiBDYXJvdXNlbCBjb250YWluZXIgZWxlbWVudC4gKi9cbiAgICBAVmlld0NoaWxkKCdjYXJvdXNlbENvbnRhaW5lcicpXG4gICAgY2Fyb3VzZWxDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogQGhpZGRlbiBTdGFydCBpbmRleCBvZiBjdXJyZW50bHkgYWN0aXZlIGl0ZW1zICovXG4gICAgY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gaGFuZGxlcyBydGwgc2VydmljZSAqL1xuICAgIGRpcjogRGlyZWN0aW9uID0gJ2x0cic7XG5cbiAgICAvKiogQGhpZGRlbiBNYWtlIGxlZnQgbmF2aWdhdGlvbiBidXR0b24gZGlzYWJsZWQgKi9cbiAgICBsZWZ0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuIE1ha2UgcmlnaHQgbmF2aWdhdGlvbiBidXR0b24gZGlzYWJsZWQgKi9cbiAgICByaWdodEJ1dHRvbkRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiBGYWtlIGFycmF5IGZvciBjb3VudGluZyBudW1iZXIgb2YgcGFnZSBpbmRpY2F0b3IgKi9cbiAgICBwYWdlSW5kaWNhdG9yc0NvdW50QXJyYXk6IG51bWJlcltdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zbGlkZXNXcmFwcGVyU2l6ZSA9IDA7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfY29udGVudFNpemVQeCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2xpZGVzV3JhcHBlclNpemUgPyBgJHt0aGlzLl9zbGlkZXNXcmFwcGVyU2l6ZX1weGAgOiB0aGlzLndpZHRoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmlnaHROYXZpZ2F0aW9uQnRuTGFiZWw6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGVmdE5hdmlnYXRpb25CdG5MYWJlbDogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92aXNpYmxlU2xpZGVzQ291bnQ6IG51bWJlciB8ICdhdXRvJyA9IDE7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQgPSAxO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZXNvdXJjZVN0cmluZ3MgPSBDYXJvdXNlbFJlc291cmNlU3RyaW5nc0VOO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb25maWc6IENhcm91c2VsQ29uZmlnID0ge307XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NsaWRlc0NvcHk6IENhcm91c2VsSXRlbUNvbXBvbmVudFtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ByZXZpb3VzVmlzaWJsZVNsaWRlc0NvdW50OiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NsaWRlU3dpcGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGRhdGEgc3RyZWFtIHVwb24gY29tcG9uZW504oCZcyBkZXN0cnVjdGlvbiAoZm9yIHVuc3Vic2NyaWJpbmcpICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jYXJvdXNlbFNlcnZpY2U6IENhcm91c2VsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfem9uZTogTmdab25lLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaWJlVG9SdGwoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMudmlzaWJsZVNsaWRlc0NvdW50ICYmIHRoaXMuc2xpZGVzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZnlTbGlkZUNoYW5nZShTbGlkZURpcmVjdGlvbi5Ob25lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBPbiBjYXJvdXNlbCBsb2FkLCBkaXNwbGF5IGZpcnN0IHNsaWRlICsgbnVtYmVyIG9mIHNsaWRlIHZpc2libGVcbiAgICAgICAgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA9IDA7XG5cbiAgICAgICAgLy8gQ2hhbmdlIHBhZ2luYXRpb24gZGlzcGxheSB0byBudW1lcmljLCBpZiBpdGVtIGNvdW50IGlzIG1vcmUgdGhhbiA4XG4gICAgICAgIGlmICh0aGlzLnNsaWRlcy5sZW5ndGggPiBJQ09OX1BBR0VfSU5ESUNBVE9SX0xJTUlUKSB7XG4gICAgICAgICAgICB0aGlzLm51bWVyaWNJbmRpY2F0b3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNsaWRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplQ2Fyb3VzZWwoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGVmdEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucmlnaHRCdXR0b25EaXNhYmxlZCA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIERpc2FibGUgc3dpcGUgd2hlbiB0aGVyZSBpcyBubyBjYXJvdXNlbCBpdGVtXG4gICAgICAgICAgICB0aGlzLnN3aXBlRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBLZWVwIGNvcHkgb2Ygb3JpZ2luYWwgc2xpZGUgYXJyYXksIGZvciBpbmRpY2F0b3IgcHVycG9zZS5cbiAgICAgICAgLy8gSW4gY2FzZSBvZiBsb29wZWQgY2Fyb3VzZWwsIG9yaWdpbmFsIHNsaWRlcyBhcnJheSBjaGFuZ2VzLlxuICAgICAgICB0aGlzLl9zbGlkZXNDb3B5ID0gdGhpcy5zbGlkZXMudG9BcnJheSgpO1xuICAgICAgICB0aGlzLl9zdWJzY3JpYmVTZXJ2aWNlRXZlbnRzKCk7XG5cbiAgICAgICAgLy8gU3Vic2NyaWJlIHRvIGR5bmFtaWMgdXBkYXRlIG9mIHNsaWRlc1xuICAgICAgICB0aGlzLnNsaWRlcy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fb25TbGlkZVVwZGF0ZXMoKSk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbml0aWFsaXplU2VydmljZUNvbmZpZygpO1xuICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuaW5pdGlhbGlzZSh0aGlzLl9jb25maWcsIHRoaXMuc2xpZGVzLCB0aGlzLnNsaWRlQ29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5fcHJldmlvdXNWaXNpYmxlU2xpZGVzQ291bnQgPSB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50O1xuICAgICAgICB0aGlzLl9yZXNpemVDb250ZW50Q29udGFpbmVyKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9wcmV2aW91c1Zpc2libGVTbGlkZXNDb3VudCAmJiB0aGlzLl9wcmV2aW91c1Zpc2libGVTbGlkZXNDb3VudCAhPT0gdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudCkge1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUNhcm91c2VsKCk7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplU2VydmljZUNvbmZpZygpO1xuICAgICAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLnVwZGF0ZUNvbmZpZyh0aGlzLl9jb25maWcpO1xuICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNWaXNpYmxlU2xpZGVzQ291bnQgPSB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50O1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfc2hvd05hdmlnYXRpb25CdXR0b25JblBhZ2VJbmRpY2F0b3JDb250YWluZXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRvckluUGFnZUluZGljYXRvciAmJiB0aGlzLnBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheS5sZW5ndGggPiAxO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9zaG93TmF2aWdhdGlvbkJ1dHRvbkluQ29udGVudCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLm5hdmlnYXRvckluUGFnZUluZGljYXRvciAmJiB0aGlzLnBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheS5sZW5ndGggPiAxO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9zaG93UGFnZUluZGljYXRvckNvbnRhaW5lcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZUluZGljYXRvckNvbnRhaW5lciAmJiAodGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkubGVuZ3RoID4gMCB8fCB0aGlzLm51bWVyaWNJbmRpY2F0b3IpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGdldFBhZ2VJbmRpY2F0b3JMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIDF9ICR7dGhpcy5yZXNvdXJjZVN0cmluZ3MuZmRfY2Fyb3VzZWxfb2Z9ICR7XG4gICAgICAgICAgICB0aGlzLnBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheS5sZW5ndGhcbiAgICAgICAgfWA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgc2NyZWVuUmVhZGVyTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgcmV0dXJuIGAke3RoaXMucmVzb3VyY2VTdHJpbmdzLmZkX2Nhcm91c2VsX3JlYWRlcn0gJHt0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICsgMX0gJHtcbiAgICAgICAgICAgIHRoaXMucmVzb3VyY2VTdHJpbmdzLmZkX2Nhcm91c2VsX29mXG4gICAgICAgIH0gJHt0aGlzLnBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheS5sZW5ndGh9YDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9mb2N1cygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmIChlbCAhPT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgZWwuZm9jdXMoe1xuICAgICAgICAgICAgICAgIHByZXZlbnRTY3JvbGw6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIGdldCB2YWx1ZSBmb3IgcnRsICovXG4gICAgX2lzUnRsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnRsU2VydmljZT8ucnRsLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93cmlnaHQnLCBbJyRldmVudCddKVxuICAgIG9uS2V5ZG93bkFycm93UmlnaHQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5faXNSdGwoKSA/IHRoaXMucHJldmlvdXMoKSA6IHRoaXMubmV4dCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd2xlZnQnLCBbJyRldmVudCddKVxuICAgIG9uS2V5ZG93bkFycm93TGVmdChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9pc1J0bCgpID8gdGhpcy5uZXh0KCkgOiB0aGlzLnByZXZpb3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIFRyYW5zaXRpb25zIHRvIHRoZSBwcmV2aW91cyBzbGlkZSBpbiB0aGUgY2Fyb3VzZWwuICovXG4gICAgcHJldmlvdXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5sb29wICYmIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPD0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmlnaHRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9hZGp1c3RBY3RpdmVJdGVtUG9zaXRpb24oU2xpZGVEaXJlY3Rpb24uUFJFVklPVVMpO1xuICAgICAgICB0aGlzLl9wcmV2ZW50RGVmYXVsdEJ0bkZvY3VzKCk7XG4gICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5waWNrUHJldmlvdXMoKTtcbiAgICAgICAgdGhpcy5fbm90aWZ5U2xpZGVDaGFuZ2UoU2xpZGVEaXJlY3Rpb24uUFJFVklPVVMpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIFRyYW5zaXRpb25zIHRvIHRoZSBuZXh0IHNsaWRlIGluIHRoZSBjYXJvdXNlbC4gKi9cbiAgICBuZXh0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMubG9vcCAmJiB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID49IHRoaXMucGFnZUluZGljYXRvcnNDb3VudEFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1vdmluZyB0byBuZXh0IHNsaWRlXG4gICAgICAgIHRoaXMubGVmdEJ1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2FkanVzdEFjdGl2ZUl0ZW1Qb3NpdGlvbihTbGlkZURpcmVjdGlvbi5ORVhUKTtcbiAgICAgICAgdGhpcy5fcHJldmVudERlZmF1bHRCdG5Gb2N1cygpO1xuICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UucGlja05leHQoKTtcbiAgICAgICAgdGhpcy5fbm90aWZ5U2xpZGVDaGFuZ2UoU2xpZGVEaXJlY3Rpb24uTkVYVCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBTdWJzY3JpYmUgdG8gY2Fyb3VzZWwgc2VydmljZSBldmVudHMgKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpYmVTZXJ2aWNlRXZlbnRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuYWN0aXZlQ2hhbmdlJC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB0aGlzLl9vblNsaWRlU3dpcGUoZXZlbnQpKTtcbiAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmRyYWdTdGF0ZUNoYW5nZSQuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy5fb25TbGlkZURyYWcoZXZlbnQpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIFByZXZlbnQgbmF0aXZlIGZvY3VzIGZsb3cgcmVsYXRlZCB0byBidXR0b24sIGlmIGJ1dHRvbiB3aWxsIGJlIGRpc2FibGUgb24gZm9jdXMgc3RhdGUuXG4gICAgICogSXQgd29ya3Mgb25seSBpZiBjYXJvdXNlbCBpcyBub3QgaW4gY2lyY3VsYXIgbG9vcC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9wcmV2ZW50RGVmYXVsdEJ0bkZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5sb29wKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNGaXJzdCA9IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPT09IDA7XG4gICAgICAgIGNvbnN0IGlzTGFzdCA9IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPT09IHRoaXMucGFnZUluZGljYXRvcnNDb3VudEFycmF5Lmxlbmd0aCAtIDE7XG4gICAgICAgIGlmIChpc0ZpcnN0IHx8IGlzTGFzdCkge1xuICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKHtcbiAgICAgICAgICAgICAgICBwcmV2ZW50U2Nyb2xsOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEFkanVzdCBwb3NpdGlvbiBvZiBhY3RpdmUgaXRlbSwgYmFzZWQgb24gc2xpZGUgZGlyZWN0aW9uICovXG4gICAgcHJpdmF0ZSBfYWRqdXN0QWN0aXZlSXRlbVBvc2l0aW9uKHNsaWRlRGlyZWN0aW9uOiBTbGlkZURpcmVjdGlvbiwgc3RlcDogbnVtYmVyID0gMSk6IHZvaWQge1xuICAgICAgICAvLyBNb3ZlIG9uZSBzdGVwIGluIHRoZSBkaXJlY3Rpb25cbiAgICAgICAgY29uc3QgcG9zaXRpb25BZGp1c3RtZW50ID0gc2xpZGVEaXJlY3Rpb24gPT09IFNsaWRlRGlyZWN0aW9uLk5FWFQgPyBzdGVwIDogLXN0ZXA7XG4gICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICsgcG9zaXRpb25BZGp1c3RtZW50O1xuXG4gICAgICAgIC8vIElmIGNhcm91c2VsIHNldCB0byBsb29wXG4gICAgICAgIGlmICh0aGlzLmxvb3ApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSB0aGlzLnNsaWRlcy5sZW5ndGggKyB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID49IHRoaXMuc2xpZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICUgdGhpcy5zbGlkZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fYnV0dG9uVmlzaWJpbGl0eSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gSGFuZGxlcyBuYXZpZ2F0aW9uIGJ1dHRvbiB2aXNpYmlsaXR5ICovXG4gICAgcHJpdmF0ZSBfYnV0dG9uVmlzaWJpbGl0eSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmxvb3ApIHtcbiAgICAgICAgICAgIC8vIE5lZWQgdG8gZGlzYWJsZSBuYXZpZ2F0aW9uIGJ1dHRvbiBpZiBlaXRoZXIgZGlyZWN0aW9uIGxpbWl0IGhhcyByZWFjaGVkLlxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodEJ1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2xpZGVzLmxlbmd0aCAtIDEgPT09IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMubGVmdEJ1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQgPiAxICYmXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQgPj0gdGhpcy5zbGlkZXMubGVuZ3RoXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc2xpZGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGVmdEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gSGFuZGxlIHdoZW4gc2xpZGUgaXMgYWRkZWQgb3IgcmVtb3ZlZCAqL1xuICAgIHByaXZhdGUgX29uU2xpZGVVcGRhdGVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zbGlkZXNDb3B5ID0gdGhpcy5zbGlkZXMudG9BcnJheSgpO1xuICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmluaXRpYWxpc2UodGhpcy5fY29uZmlnLCB0aGlzLnNsaWRlcywgdGhpcy5zbGlkZUNvbnRhaW5lcik7XG4gICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5hY3RpdmUgPSBudWxsO1xuICAgICAgICBpZiAodGhpcy52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5zbGlkZUNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCwgJ3RyYW5zZm9ybScsICd0cmFuc2xhdGVZKDBweCknKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2xpZGVDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQsICd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlWCgwcHgpJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUNhcm91c2VsKCk7XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBJbml0aWFsaXplIGNhcm91c2VsIHdpdGggdmlzaWJsZSBpdGVtcyAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxpemVDYXJvdXNlbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fem9uZS5vbk1pY3JvdGFza0VtcHR5LnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIC8vIEhhbmRsZXMgbmF2aWdhdG9yIGJ1dHRvbiBlbmFibGVkL2Rpc2FibGVkIHN0YXRlXG4gICAgICAgICAgICB0aGlzLl9idXR0b25WaXNpYmlsaXR5KCk7XG4gICAgICAgICAgICBsZXQgYXJyYXlMZW5ndGg6IG51bWJlcjtcbiAgICAgICAgICAgIC8vIHNldCBwYWdlIGluZGljYXRvciBjb3VudCB3aXRoIGZha2UgYXJyYXksIHRvIHVzZSBpbiB0ZW1wbGF0ZVxuICAgICAgICAgICAgaWYgKHRoaXMubG9vcCAmJiB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50ID4gMSkge1xuICAgICAgICAgICAgICAgIC8vIElmIGxvb3Agd2l0aCBtdWx0aSBpdGVtIHZpc2libGUuXG4gICAgICAgICAgICAgICAgYXJyYXlMZW5ndGggPSB0aGlzLnNsaWRlcy5sZW5ndGg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFycmF5TGVuZ3RoID0gdGhpcy5zbGlkZXMubGVuZ3RoIC0gdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudCArIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYWdlSW5kaWNhdG9yc0lmWmVyb0NvdW50ID0gdGhpcy5zbGlkZXMubGVuZ3RoID09PSAwID8gMCA6IDE7XG4gICAgICAgICAgICB0aGlzLnBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheSA9IG5ldyBBcnJheShhcnJheUxlbmd0aCA+IDAgPyBhcnJheUxlbmd0aCA6IHBhZ2VJbmRpY2F0b3JzSWZaZXJvQ291bnQpO1xuICAgICAgICAgICAgdGhpcy5fZ29Ub0ZpcnN0SXRlbSgpO1xuICAgICAgICAgICAgdGhpcy5zbGlkZXMuZm9yRWFjaCgoX3NsaWRlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPj0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCAmJlxuICAgICAgICAgICAgICAgICAgICBpbmRleCA8IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggKyB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50XG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIF9zbGlkZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9zbGlkZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ29Ub0ZpcnN0SXRlbSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuY3VycmVudFRyYW5zaXRpb25QeCAhPT0gMCAmJlxuICAgICAgICAgICAgdGhpcy5zbGlkZXMubGVuZ3RoID4gMVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSAwO1xuICAgICAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmdvVG9JdGVtKHRoaXMuc2xpZGVzLmZpcnN0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEluaXRpYWxpemUgY29uZmlnIGZvciBDYXJvdXNlbCBzZXJ2aWNlICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZVNlcnZpY2VDb25maWcoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbmZpZy52ZXJ0aWNhbCA9IHRoaXMudmVydGljYWw7XG4gICAgICAgIHRoaXMuX2NvbmZpZy5lbGVtZW50c0F0T25jZSA9IHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQ7XG4gICAgICAgIHRoaXMuX2NvbmZpZy5nZXN0dXJlU3VwcG9ydCA9IHRoaXMuc3dpcGVFbmFibGVkO1xuICAgICAgICB0aGlzLl9jb25maWcuaW5maW5pdGUgPSB0aGlzLmxvb3A7XG4gICAgICAgIHRoaXMuX2NvbmZpZy50cmFuc2l0aW9uID0gU3RyaW5nKHRoaXMuc2xpZGVUcmFuc2l0aW9uRHVyYXRpb24pICsgJ21zJztcbiAgICAgICAgLy8gQ2Fyb3VzZWwgc2VydmljZSBleHBlY3RzIHRyYW5zaXRpb24gaW4gc3RyaW5nIGZvcm1hdCB3aXRoIHVuaXQuXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBSZXR1cm5zIHRoZSBzbGlkZSBzd2FwcGluZyBzdGVwc1xuICAgICAqL1xuICAgIHByaXZhdGUgX2dldFN0ZXBUYWtlbihldmVudDogUGFuRW5kT3V0cHV0LCBhY3R1YWxBY3RpdmVTbGlkZUluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBsZXQgc3RlcHNDYWxjdWxhdGVkOiBudW1iZXI7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICghdGhpcy5faXNSdGwoKSAmJiBldmVudC5hZnRlcikgfHxcbiAgICAgICAgICAgICh0aGlzLl9pc1J0bCgpICYmICFldmVudC5hZnRlciAmJiAhdGhpcy52ZXJ0aWNhbCkgfHxcbiAgICAgICAgICAgICh0aGlzLnZlcnRpY2FsICYmIGV2ZW50LmFmdGVyKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChhY3R1YWxBY3RpdmVTbGlkZUluZGV4ID09PSAwICYmIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICBzdGVwc0NhbGN1bGF0ZWQgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3R1YWxBY3RpdmVTbGlkZUluZGV4ID4gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIHN0ZXBzQ2FsY3VsYXRlZCA9IGFjdHVhbEFjdGl2ZVNsaWRlSW5kZXggLSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGVwc0NhbGN1bGF0ZWQgPSB0aGlzLnNsaWRlcy5sZW5ndGggLSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICsgYWN0dWFsQWN0aXZlU2xpZGVJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZSwgd2hlbiBmaXJzdCBsZWZ0IHN3aXBlIGJlZm9yZSBzbGlkZXMgYXJlIHJvdGF0ZWQgaW4gY2Fyb3VzZWwgc2VydmljZVxuICAgICAgICAgICAgaWYgKGFjdHVhbEFjdGl2ZVNsaWRlSW5kZXggPT09IDAgJiYgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHN0ZXBzQ2FsY3VsYXRlZCA9IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFjdHVhbEFjdGl2ZVNsaWRlSW5kZXggPCB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgc3RlcHNDYWxjdWxhdGVkID0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCAtIGFjdHVhbEFjdGl2ZVNsaWRlSW5kZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0ZXBzQ2FsY3VsYXRlZCA9IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggKyB0aGlzLnNsaWRlcy5sZW5ndGggLSBhY3R1YWxBY3RpdmVTbGlkZUluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGVwc0NhbGN1bGF0ZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gSGFuZGxlcyBub3RpZmljYXRpb24gb24gdmlzaWJsZSBzbGlkZSBjaGFuZ2UgKi9cbiAgICBwcml2YXRlIF9ub3RpZnlTbGlkZUNoYW5nZShzbGlkZURpcmVjdGlvbjogU2xpZGVEaXJlY3Rpb24sIGZpcnN0QWN0aXZlU2xpZGU/OiBDYXJvdXNlbEl0ZW1JbnRlcmZhY2UgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZVNsaWRlczogQ2Fyb3VzZWxJdGVtQ29tcG9uZW50W10gPSBbXTtcbiAgICAgICAgbGV0IGZpcnN0QWN0aXZlU2xpZGVJbmRleDogbnVtYmVyO1xuICAgICAgICBpZiAodGhpcy5sb29wKSB7XG4gICAgICAgICAgICBmaXJzdEFjdGl2ZVNsaWRlID0gdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmFjdGl2ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlyc3RBY3RpdmVTbGlkZSkge1xuICAgICAgICAgICAgZmlyc3RBY3RpdmVTbGlkZUluZGV4ID0gdGhpcy5zbGlkZXMudG9BcnJheSgpLmZpbmRJbmRleCgoX2l0ZW0pID0+IF9pdGVtID09PSBmaXJzdEFjdGl2ZVNsaWRlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpcnN0QWN0aXZlU2xpZGVJbmRleCA9IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgYWN0aXZlU2xpZGVJbmRleCA9IDA7IGFjdGl2ZVNsaWRlSW5kZXggPCB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50OyBhY3RpdmVTbGlkZUluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZmlyc3RBY3RpdmVTbGlkZUluZGV4ICsgYWN0aXZlU2xpZGVJbmRleDtcbiAgICAgICAgICAgIGNvbnN0IHNsaWRlID0gdGhpcy5zbGlkZXMuZ2V0KGluZGV4KTtcbiAgICAgICAgICAgIGlmIChzbGlkZSkge1xuICAgICAgICAgICAgICAgIGFjdGl2ZVNsaWRlcy5wdXNoKHNsaWRlKTtcbiAgICAgICAgICAgICAgICBzbGlkZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX21hbmFnZVNsaWRlVmlzaWJpbGl0eShmaXJzdEFjdGl2ZVNsaWRlSW5kZXgpO1xuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBzbGlkZURpcmVjdGlvbiA9PT0gU2xpZGVEaXJlY3Rpb24uTkVYVCA/ICdOZXh0JyA6ICdQcmV2aW91cyc7XG4gICAgICAgIHRoaXMuc2xpZGVDaGFuZ2UuZW1pdChuZXcgQ2Fyb3VzZWxBY3RpdmVTbGlkZXMoYWN0aXZlU2xpZGVzLCBkaXJlY3Rpb24pKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBNYW5hZ2VzIHZpc2liaWxpdHkgZm9yIHNsaWRlcy4gVXNlZnVsIGluIG1hbmFnaW5nIHRhYiBvcmRlciAqL1xuICAgIHByaXZhdGUgX21hbmFnZVNsaWRlVmlzaWJpbGl0eShmaXJzdEFjdGl2ZVNsaWRlSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2xpZGVzLmZvckVhY2goKF9zbGlkZXMsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGZpcnN0QWN0aXZlU2xpZGVJbmRleCAmJiBpbmRleCA8IGZpcnN0QWN0aXZlU2xpZGVJbmRleCArIHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9zbGlkZXMudmlzaWJpbGl0eSA9PT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9zbGlkZXMudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfc2xpZGVzLnZpc2liaWxpdHkgPT09ICd2aXNpYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3NsaWRlcy52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9LCB0aGlzLnNsaWRlVHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSdGwgY2hhbmdlIHN1YnNjcmlwdGlvbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmliZVRvUnRsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZWZyZXNoRGlyZWN0aW9uID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgdGhpcy5kaXIgPSB0aGlzLl9pc1J0bCgpID8gJ3J0bCcgOiAnbHRyJztcbiAgICAgICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5pc1J0bCA9IHRoaXMuZGlyID09PSAncnRsJztcbiAgICAgICAgICAgIGlmICh0aGlzLl9jYXJvdXNlbFNlcnZpY2UuaXRlbXMgJiYgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmFjdGl2ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5nb1RvSXRlbSh0aGlzLl9jYXJvdXNlbFNlcnZpY2UuYWN0aXZlLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH07XG4gICAgICAgIHJlZnJlc2hEaXJlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5fcnRsU2VydmljZT8ucnRsLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4gcmVmcmVzaERpcmVjdGlvbigpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBPbiBTd2lwaW5nIG9mIHNsaWRlLCBtYW5hZ2UgcGFnZSBpbmRpY2F0b3IgKi9cbiAgICBwcml2YXRlIF9vblNsaWRlU3dpcGUoZXZlbnQ6IFBhbkVuZE91dHB1dCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zbGlkZVN3aXBlZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGZpcnN0QWN0aXZlU2xpZGUgPSBldmVudC5pdGVtO1xuICAgICAgICBjb25zdCBhY3R1YWxBY3RpdmVTbGlkZUluZGV4ID0gdGhpcy5fc2xpZGVzQ29weS5maW5kSW5kZXgoKF9zbGlkZSkgPT4gX3NsaWRlID09PSBmaXJzdEFjdGl2ZVNsaWRlKTtcbiAgICAgICAgY29uc3Qgc3RlcFRha2VuID0gdGhpcy5fZ2V0U3RlcFRha2VuKGV2ZW50LCBhY3R1YWxBY3RpdmVTbGlkZUluZGV4KTtcbiAgICAgICAgaWYgKHN0ZXBUYWtlbiA+IDApIHtcbiAgICAgICAgICAgIGxldCBzbGlkZURpcmVjdGlvbjogU2xpZGVEaXJlY3Rpb247XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzUnRsKCkpIHtcbiAgICAgICAgICAgICAgICBzbGlkZURpcmVjdGlvbiA9IGV2ZW50LmFmdGVyID8gU2xpZGVEaXJlY3Rpb24uTkVYVCA6IFNsaWRlRGlyZWN0aW9uLlBSRVZJT1VTO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyB2ZXJ0aWNhbCBjYXJvdXNlbCBzbGlkZSBkaXJlY3Rpb24gaXMgc2FtZSBpbiBsdHIgYW5kIHJ0bFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlRGlyZWN0aW9uID0gZXZlbnQuYWZ0ZXIgPyBTbGlkZURpcmVjdGlvbi5ORVhUIDogU2xpZGVEaXJlY3Rpb24uUFJFVklPVVM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVEaXJlY3Rpb24gPSBldmVudC5hZnRlciA/IFNsaWRlRGlyZWN0aW9uLlBSRVZJT1VTIDogU2xpZGVEaXJlY3Rpb24uTkVYVDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9hZGp1c3RBY3RpdmVJdGVtUG9zaXRpb24oc2xpZGVEaXJlY3Rpb24sIHN0ZXBUYWtlbik7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZnlTbGlkZUNoYW5nZShzbGlkZURpcmVjdGlvbiwgZmlyc3RBY3RpdmVTbGlkZSk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIE1ha2luZyBzbGlkZXMgdmlzaWJsZSB3aGVuIHNsaWRlcyBhcmUgZHJhZ2dlZC4gT3RoZXJ3aXNlLCBpdCBsb29zZXMgdGhlIGVmZmVjdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9vblNsaWRlRHJhZyhpc0RyYWdnaW5nOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChpc0RyYWdnaW5nKSB7XG4gICAgICAgICAgICB0aGlzLnNsaWRlcy5mb3JFYWNoKChfc2xpZGUpID0+IHtcbiAgICAgICAgICAgICAgICBfc2xpZGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fc2xpZGVTd2lwZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQWZ0ZXIgc2xpZGUgbGltaXQgcmVhY2hlZCwgaWYgZHJhZ2dpbmcgc3RhcnRzIHRoZW4gcmV2ZXJ0IHZpc2liaWxpdHlcbiAgICAgICAgICAgIGlmICghdGhpcy5fc2xpZGVTd2lwZWQgJiYgIXRoaXMubG9vcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hbmFnZVNsaWRlVmlzaWJpbGl0eSh0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXNpemVzIGlubmVyIGNhcm91c2VsIGNvbnRhaW5lciB0byBmaXQgYWxsIGl0ZW1zIGluIHRoZSB2aWV3cG9ydCBhbmQgaGlkZSB0aG9zZSB3aGljaCBhcmUgbm90IGZ1bGx5IGluIGl0LlxuICAgICAqL1xuICAgIHByaXZhdGUgX3Jlc2l6ZUNvbnRlbnRDb250YWluZXIoKTogdm9pZCB7XG4gICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgcmVzaXplT2JzZXJ2YWJsZSh0aGlzLnNsaWRlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpLFxuICAgICAgICAgICAgcmVzaXplT2JzZXJ2YWJsZSh0aGlzLmNhcm91c2VsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApLCB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHdpZHRoLCBzbGlkZXMgfSA9IHRoaXMuX2dldEZpdHRpbmdTbGlkZXNBbmRXaWR0aCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmlzaWJsZVNsaWRlc0NvdW50ID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudCA9IHNsaWRlcztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG90YWxTbGlkZXMgPSB0aGlzLnNsaWRlcy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IG5lZWRsZVNsaWRlSW5kZXggPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4O1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIGFtb3VudCBvZiBzbGlkZXMgaW5zdWZmaWNpZW50IHRvIGZpbGwgd2hvbGUgY2Fyb3VzZWwsIHNsaWRlIGJhY2sgYSBiaXQuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICsgc2xpZGVzID4gdG90YWxTbGlkZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRsZVNsaWRlSW5kZXggPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICsgc2xpZGVzIC0gdG90YWxTbGlkZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmVlZGxlU2xpZGUgPSB0aGlzLnNsaWRlcy5nZXQobmVlZGxlU2xpZGVJbmRleCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA9IG5lZWRsZVNsaWRlSW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmFjdGl2ZSA9IG5lZWRsZVNsaWRlO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFJlZnJlc2ggY2Fyb3VzZWwgY29uZmlnIGFuZCB0cmFuc2l0aW9uIHRvIHRoZSBjdXJyZW50IHNsaWRlLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplQ2Fyb3VzZWwoKTtcblxuICAgICAgICAgICAgICAgICAgICBuZWVkbGVTbGlkZSAmJiB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuZ29Ub0l0ZW0obmVlZGxlU2xpZGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZnlTbGlkZUNoYW5nZShTbGlkZURpcmVjdGlvbi5Ob25lKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2xpZGVzV3JhcHBlclNpemUgIT09IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NsaWRlc1dyYXBwZXJTaXplID0gd2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENhbGN1bGF0ZXMgaG93IG1hbnkgc2xpZGVzIGNhbiBiZSBzaG93biB3aXRoaW4gY3VycmVudCBjYXJvdXNlbCB2aWV3cG9ydC5cbiAgICAgKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyBmaXR0aW5nIHNsaWRlcyBjb3VudCBhbmQgdG90YWwgd2lkdGggb2YgdGhvc2Ugc2xpZGVzLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEZpdHRpbmdTbGlkZXNBbmRXaWR0aCgpOiBGaXR0aW5nU2xpZGVzQW5kV2lkdGgge1xuICAgICAgICBpZiAoIXRoaXMuY2Fyb3VzZWxDb250YWluZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgc2xpZGVzOiAxXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgd2lkdGggfSA9IHRoaXMuY2Fyb3VzZWxDb250YWluZXIubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgbGV0IG1heFNpemUgPSAwO1xuICAgICAgICBsZXQgc2xpZGVzQ291bnQgPSAwO1xuICAgICAgICBjb25zdCBjYXJvdXNlbFNsaWRlcyA9IHRoaXMuc2xpZGVzLnRvQXJyYXkoKTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNTbGlkZXMgPSBjYXJvdXNlbFNsaWRlcy5zcGxpY2UoMCwgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCk7XG4gICAgICAgIGNvbnN0IGdldFNsaWRlcyA9IChzbGlkZXM6IENhcm91c2VsSXRlbUNvbXBvbmVudFtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNsaWRlIG9mIHNsaWRlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNsaWRlV2lkdGggPSBzbGlkZS5nZXRXaWR0aCgpO1xuICAgICAgICAgICAgICAgIGlmICghc2xpZGVXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3U2l6ZSA9IG1heFNpemUgKyBzbGlkZVdpZHRoO1xuICAgICAgICAgICAgICAgIGlmIChuZXdTaXplID4gd2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG1heFNpemUgPSBuZXdTaXplO1xuICAgICAgICAgICAgICAgIHNsaWRlc0NvdW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGdldFNsaWRlcyhjYXJvdXNlbFNsaWRlcyk7XG5cbiAgICAgICAgLy8gSWYgd2l0aCBvZiB0aGUgcmVzdCBvZiB0aGUgc2xpZGVzIGlzIGxlc3NlciB0aGFuIGNhcm91c2UncyB2aWV3cG9ydCwgYWRkIHByZXZpb3VzIHNsaWRlcyB0byBpdC5cbiAgICAgICAgaWYgKG1heFNpemUgPCB3aWR0aCkge1xuICAgICAgICAgICAgZ2V0U2xpZGVzKHByZXZpb3VzU2xpZGVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2lkdGg6IG1heFNpemUsXG4gICAgICAgICAgICBzbGlkZXM6IHNsaWRlc0NvdW50XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRWaXNpYmxlU2xpZGVzQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMuX3Zpc2libGVTbGlkZXNDb3VudCAhPT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmlzaWJsZVNsaWRlc0NvdW50O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgc2xpZGVzIH0gPSB0aGlzLl9nZXRGaXR0aW5nU2xpZGVzQW5kV2lkdGgoKTtcbiAgICAgICAgcmV0dXJuIHNsaWRlcztcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgY2xhc3M9XCJmZC1jYXJvdXNlbFwiXG4gICAgW2NsYXNzLmZkLWNhcm91c2VsLS1uby1uYXZpZ2F0aW9uXT1cIiFuYXZpZ2F0aW9uXCJcbiAgICBkYXRhLXJpZGU9XCJjYXJvdXNlbFwiXG4gICAgdGFiaW5kZXg9XCIwXCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImhlaWdodFwiXG4gICAgW3N0eWxlLndpZHRoXT1cIndpZHRoXCJcbiAgICBbYXR0ci5kaXJdPVwiZGlyXCJcbiAgICByb2xlPVwicmVnaW9uXCJcbiAgICAjY2Fyb3VzZWxDb250YWluZXJcbiAgICAoY2xpY2spPVwiX2ZvY3VzKClcIlxuPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfc2hvd1BhZ2VJbmRpY2F0b3JDb250YWluZXIgJiYgcGFnZUluZGljYXRvcnNPcmllbnRhdGlvbiA9PT0gJ3RvcCdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2VJbmRpY2F0b3JDb250YWluZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmZC1jYXJvdXNlbF9fY29udGVudFwiXG4gICAgICAgIFtjbGFzcy5mZC1jYXJvdXNlbF9fY29udGVudC0taG9yaXpvbnRhbF09XCIhdmVydGljYWxcIlxuICAgICAgICBbc3R5bGUud2lkdGhdPVwiX2NvbnRlbnRTaXplUHhcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9zaG93TmF2aWdhdGlvbkJ1dHRvbkluQ29udGVudFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbkxlZnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPGRpdiAjc2xpZGVDb250YWluZXIgY2xhc3M9XCJmZC1jYXJvdXNlbF9fc2xpZGVzXCI+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfc2hvd05hdmlnYXRpb25CdXR0b25JbkNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25SaWdodFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfc2hvd1BhZ2VJbmRpY2F0b3JDb250YWluZXIgJiYgcGFnZUluZGljYXRvcnNPcmllbnRhdGlvbiA9PT0gJ2JvdHRvbSdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2VJbmRpY2F0b3JDb250YWluZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBub25lXCIgcm9sZT1cInJlZ2lvblwiIFthdHRyLmlkXT1cImlkICsgJy1hY2Nlc3NpYmlsaXR5J1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiIGRpcj1cImx0clwiPlxuICAgICAgICB7eyBzY3JlZW5SZWFkZXJMYWJlbCB9fVxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjcGFnZUluZGljYXRvckNvbnRhaW5lcj5cbiAgICA8ZGl2IGNsYXNzPVwiZmQtY2Fyb3VzZWxfX3BhZ2UtaW5kaWNhdG9yLWNvbnRhaW5lclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3Nob3dOYXZpZ2F0aW9uQnV0dG9uSW5QYWdlSW5kaWNhdG9yQ29udGFpbmVyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uTGVmdFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFnZUluZGljYXRvcnNcIj4gPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9zaG93TmF2aWdhdGlvbkJ1dHRvbkluUGFnZUluZGljYXRvckNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvblJpZ2h0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNwYWdlSW5kaWNhdG9ycz5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibnVtZXJpY0luZGljYXRvclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtY2Fyb3VzZWxfX3BhZ2UtaW5kaWNhdG9yc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2VJbmRpY2F0b3JcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtY2Fyb3VzZWxfX3RleHRcIiBkaXI9XCJsdHJcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0UGFnZUluZGljYXRvckxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFudW1lcmljSW5kaWNhdG9yICYmIF9zaG93TmF2aWdhdGlvbkJ1dHRvbkluUGFnZUluZGljYXRvckNvbnRhaW5lclwiPlxuICAgICAgICA8b2wgY2xhc3M9XCJmZC1jYXJvdXNlbF9fcGFnZS1pbmRpY2F0b3JzXCIgW2F0dHIuZGlyXT1cImRpclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2VJbmRpY2F0b3JcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtc2xpZGUtdG9dPVwiaSArIDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1jYXJvdXNlbF9fcGFnZS1pbmRpY2F0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZkLWNhcm91c2VsX19wYWdlLWluZGljYXRvci0tYWN0aXZlXT1cImkgPT09IGN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbGk+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9vbD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9uTGVmdD5cbiAgICA8YnV0dG9uXG4gICAgICAgIGZkLWJ1dHRvblxuICAgICAgICBjbGFzcz1cImZkLWNhcm91c2VsX19idXR0b24gZmQtY2Fyb3VzZWxfX2J1dHRvbi0tbGVmdFwiXG4gICAgICAgIFtzdHlsZS56LWluZGV4XT1cIjFcIlxuICAgICAgICBkYXRhLXNsaWRlPVwicHJldmlvdXNcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxlZnROYXZpZ2F0aW9uQnRuTGFiZWwgfHwgKCdjb3JlQ2Fyb3VzZWwubGVmdE5hdmlnYXRpb25CdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAoY2xpY2spPVwicHJldmlvdXMoKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImxlZnRCdXR0b25EaXNhYmxlZFwiXG4gICAgICAgIFthdHRyLnRpdGxlXT1cImxlZnROYXZpZ2F0aW9uQnRuTGFiZWwgfHwgKCdjb3JlQ2Fyb3VzZWwubGVmdE5hdmlnYXRpb25CdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICBnbHlwaD1cInNsaW0tYXJyb3ctbGVmdFwiXG4gICAgPjwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNidXR0b25SaWdodD5cbiAgICA8YnV0dG9uXG4gICAgICAgIGZkLWJ1dHRvblxuICAgICAgICBjbGFzcz1cImZkLWNhcm91c2VsX19idXR0b24gZmQtY2Fyb3VzZWxfX2J1dHRvbi0tcmlnaHRcIlxuICAgICAgICBbc3R5bGUuei1pbmRleF09XCIxXCJcbiAgICAgICAgZGF0YS1zbGlkZT1cIm5leHRcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInJpZ2h0TmF2aWdhdGlvbkJ0bkxhYmVsIHx8ICgnY29yZUNhcm91c2VsLnJpZ2h0TmF2aWdhdGlvbkJ0bkxhYmVsJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgIChjbGljayk9XCJuZXh0KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJyaWdodEJ1dHRvbkRpc2FibGVkXCJcbiAgICAgICAgW2F0dHIudGl0bGVdPVwicmlnaHROYXZpZ2F0aW9uQnRuTGFiZWwgfHwgKCdjb3JlQ2Fyb3VzZWwucmlnaHROYXZpZ2F0aW9uQnRuTGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgZ2x5cGg9XCJzbGltLWFycm93LXJpZ2h0XCJcbiAgICA+PC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
680
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2Fyb3VzZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2Fyb3VzZWwvY2Fyb3VzZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvY2Fyb3VzZWwvY2Fyb3VzZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFJTixRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBRVQsU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSx5QkFBeUIsRUFBNkIsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRyxPQUFPLEVBQXlDLGVBQWUsRUFBZ0IsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7OztBQUUxRyxrREFBa0Q7QUFDbEQsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7QUFHcEMsTUFBTSxDQUFOLElBQVksY0FJWDtBQUpELFdBQVksY0FBYztJQUN0QixtREFBSSxDQUFBO0lBQ0osbURBQUksQ0FBQTtJQUNKLDJEQUFRLENBQUE7QUFDWixDQUFDLEVBSlcs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O2dCQW9MOUIsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLG9CQUFvQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVE5QyxrQkFBa0I7c0JBRGpCLFlBQVk7dUJBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFJlbmRlcmVyMixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9iaWRpJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgbWVyZ2UsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHJlc2l6ZU9ic2VydmFibGUsIFJ0bFNlcnZpY2UsIHdhcm5PbmNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQ2Fyb3VzZWxJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jYXJvdXNlbC1pdGVtL2Nhcm91c2VsLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IENhcm91c2VsUmVzb3VyY2VTdHJpbmdzRU4sIEZkQ2Fyb3VzZWxSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuL2kxOG4vY2Fyb3VzZWwtcmVzb3VyY2VzJztcbmltcG9ydCB7IENhcm91c2VsQ29uZmlnLCBDYXJvdXNlbEl0ZW1JbnRlcmZhY2UsIENhcm91c2VsU2VydmljZSwgUGFuRW5kT3V0cHV0IH0gZnJvbSAnLi9jYXJvdXNlbC5zZXJ2aWNlJztcblxuLyoqIFBhZ2UgbGltaXQgdG8gc3dpdGNoIHRvIG51bWVyaWNhbCBpbmRpY2F0b3IgKi9cbmNvbnN0IElDT05fUEFHRV9JTkRJQ0FUT1JfTElNSVQgPSA4O1xuZXhwb3J0IHR5cGUgUGFnZUluZGljYXRvcnNPcmllbnRhdGlvbiA9ICdib3R0b20nIHwgJ3RvcCc7XG5cbmV4cG9ydCBlbnVtIFNsaWRlRGlyZWN0aW9uIHtcbiAgICBOb25lLFxuICAgIE5FWFQsXG4gICAgUFJFVklPVVNcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRml0dGluZ1NsaWRlc0FuZFdpZHRoIHtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIHNsaWRlczogbnVtYmVyO1xufVxubGV0IGNhcm91c2VsQ291bnRlciA9IDA7XG5cbmNsYXNzIENhcm91c2VsQWN0aXZlU2xpZGVzIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgYWN0aXZlSXRlbXM6IENhcm91c2VsSXRlbUNvbXBvbmVudFtdLCBwdWJsaWMgcmVhZG9ubHkgc2xpZGVEaXJlY3Rpb246IHN0cmluZykge31cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1jYXJvdXNlbCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Nhcm91c2VsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jYXJvdXNlbC5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbQ2Fyb3VzZWxTZXJ2aWNlXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbc3R5bGUud2lkdGhdJzogJ3dpZHRoJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgQ2Fyb3VzZWxDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3lcbntcbiAgICAvKiogSUQgZm9yIHRoZSBDYXJvdXNlbC4gKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXG4gICAgaWQgPSBgZmQtY2Fyb3VzZWwtJHtjYXJvdXNlbENvdW50ZXIrK31gO1xuXG4gICAgLyoqIFNldHMgYXJpYS1sYWJlbCBhdHRyaWJ1dGUgZm9yIGNhcm91c2VsICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWwgPSBudWxsO1xuXG4gICAgLyoqIFNldHMgYXJpYS1sYWJlbGxlZGJ5IGF0dHJpYnV0ZSBmb3IgY2Fyb3VzZWwgKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbGxlZEJ5OiBzdHJpbmc7XG5cbiAgICAvKiogU2V0cyBhcmlhLWRlc2NyaWJlZGJ5IGF0dHJpYnV0ZSBmb3IgY2Fyb3VzZWwgKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFEZXNjcmliZWRCeTogc3RyaW5nO1xuXG4gICAgLyoqIFNldHMgcG9zaXRpb24gb2YgcGFnZSBpbmRpY2F0b3IgY29udGFpbmVyLiBEZWZhdWx0IHBvc2l0aW9uIGlzIGJvdHRvbS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHBhZ2VJbmRpY2F0b3JzT3JpZW50YXRpb246IFBhZ2VJbmRpY2F0b3JzT3JpZW50YXRpb24gPSAnYm90dG9tJztcblxuICAgIC8qKiBIZWlnaHQgZm9yIGNhcm91c2VsIGNvbnRhaW5lciAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGVpZ2h0OiBzdHJpbmc7XG5cbiAgICAvKiogV2lkdGggZm9yIGNhcm91c2VsIGNvbnRhaW5lciAqL1xuICAgIEBJbnB1dCgpXG4gICAgd2lkdGggPSAnMTAwJSc7XG5cbiAgICAvKiogSWYgY2Fyb3VzZWwgaXMgaW4gY2lyY3VsYXIgbG9vcCAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9vcCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBMYWJlbCBmb3IgbGVmdCBuYXZpZ2F0aW9uIGJ1dHRvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGxlZnROYXZpZ2F0aW9uQnRuTGFiZWwodmFsdWU6IHN0cmluZykge1xuICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgIFwiUHJvcGVydHkgbGVmdE5hdmlnYXRpb25CdG5MYWJlbCBpcyBkZXByZWNhdGVkLiBVc2UgaTE4biBjYXBhYmlsaXRpZXMgJ2NvcmVDYXJvdXNlbC5sZWZ0TmF2aWdhdGlvbkJ0bkxhYmVsJyBrZXkgaW5zdGVhZC5cIlxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9sZWZ0TmF2aWdhdGlvbkJ0bkxhYmVsID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IGxlZnROYXZpZ2F0aW9uQnRuTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xlZnROYXZpZ2F0aW9uQnRuTGFiZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGkxOG4gY2FwYWJpbGl0aWVzIGluc3RlYWRcbiAgICAgKiBMYWJlbCBmb3IgcmlnaHQgbmF2aWdhdGlvbiBidXR0b25cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCByaWdodE5hdmlnYXRpb25CdG5MYWJlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgXCJQcm9wZXJ0eSByaWdodE5hdmlnYXRpb25CdG5MYWJlbCBpcyBkZXByZWNhdGVkLiBVc2UgaTE4biBjYXBhYmlsaXRpZXMgJ2NvcmVDYXJvdXNlbC5yaWdodE5hdmlnYXRpb25CdG5MYWJlbCcga2V5IGluc3RlYWQuXCJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fcmlnaHROYXZpZ2F0aW9uQnRuTGFiZWwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgcmlnaHROYXZpZ2F0aW9uQnRuTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JpZ2h0TmF2aWdhdGlvbkJ0bkxhYmVsO1xuICAgIH1cblxuICAgIC8qKiBTaG93cy9oaWRlcyBvcHRpb25hbCBuYXZpZ2F0aW9uIGJ1dHRvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmF2aWdhdGlvbiA9IHRydWU7XG5cbiAgICAvKiogU2hvdyBuYXZpZ2F0aW9uIGJ1dHRvbiBpbiBwYWdlIGluZGljYXRvciBjb250YWluZXIgb3IgaW5zaWRlIGNvbnRlbnQuIERlZmF1bHQgaXMgcGFnZSBpbmRpY2F0b3IgY29udGFpbmVyIG9uIHRydWUgdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIG5hdmlnYXRvckluUGFnZUluZGljYXRvciA9IHRydWU7XG5cbiAgICAvKiogQ29udmVydCB0byBOdW1lcmljIHBhZ2UgaW5kaWNhdG9yICovXG4gICAgQElucHV0KClcbiAgICBudW1lcmljSW5kaWNhdG9yID0gZmFsc2U7XG5cbiAgICAvKiogU2hvd3MvaGlkZXMgb3B0aW9uYWwgcGFnZSBpbmRpY2F0b3IgY29udGFpbmVyICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGFnZUluZGljYXRvckNvbnRhaW5lciA9IHRydWU7XG5cbiAgICAvKiogU2hvd3MvaGlkZXMgb3B0aW9uYWwgcGFnZSBpbmRpY2F0b3IgKi9cbiAgICBASW5wdXQoKVxuICAgIHBhZ2VJbmRpY2F0b3IgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQW4gYWNjZXNzb3IgdGhhdCBzZXRzIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQgdXNlcyBFTiByZXNvdXJjZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcmVzb3VyY2VTdHJpbmdzKHZhbHVlOiBGZENhcm91c2VsUmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Jlc291cmNlU3RyaW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFjY2Vzc29yIHRoYXQgcmV0dXJucyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKi9cbiAgICBnZXQgcmVzb3VyY2VTdHJpbmdzKCk6IEZkQ2Fyb3VzZWxSZXNvdXJjZVN0cmluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTdHJpbmdzO1xuICAgIH1cblxuICAgIC8qKiBTZXRzIHNsaWRpbmcgZHVyYXRpb24gaW4gbWlsbGllIHNlY29uZHMuIERlZmF1bHQgaXMgMTUwICovXG4gICAgQElucHV0KClcbiAgICBzbGlkZVRyYW5zaXRpb25EdXJhdGlvbiA9IDE1MDtcblxuICAgIC8qKiBJcyBzd2lwZSBlbmFibGVkICovXG4gICAgQElucHV0KClcbiAgICBzd2lwZUVuYWJsZWQgPSB0cnVlO1xuXG4gICAgLyoqIElzIGNhcm91c2VsIGlzIHZlcnRpY2FsLiBEZWZhdWx0IHZhbHVlIGlzIGZhbHNlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdmVydGljYWwgPSBmYWxzZTtcblxuICAgIC8qKiBOdW1iZXIgb2YgaXRlbXMgdG8gYmUgdmlzaWJsZSBhdCBhIHRpbWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB2aXNpYmxlU2xpZGVzQ291bnQodmFsdWU6IG51bWJlciB8ICdhdXRvJykge1xuICAgICAgICB0aGlzLl92aXNpYmxlU2xpZGVzQ291bnQgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudCA9IHRoaXMuX2dldFZpc2libGVTbGlkZXNDb3VudCgpO1xuICAgIH1cblxuICAgIGdldCB2aXNpYmxlU2xpZGVzQ291bnQoKTogbnVtYmVyIHwgJ2F1dG8nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGVTbGlkZXNDb3VudDtcbiAgICB9XG5cbiAgICAvKiogQW4gZXZlbnQgdGhhdCBpcyBlbWl0dGVkIGFmdGVyIGEgc2xpZGUgdHJhbnNpdGlvbiBoYXMgaGFwcGVuZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICByZWFkb25seSBzbGlkZUNoYW5nZTogRXZlbnRFbWl0dGVyPENhcm91c2VsQWN0aXZlU2xpZGVzPiA9IG5ldyBFdmVudEVtaXR0ZXI8Q2Fyb3VzZWxBY3RpdmVTbGlkZXM+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oQ2Fyb3VzZWxJdGVtQ29tcG9uZW50LCB7XG4gICAgICAgIGRlc2NlbmRhbnRzOiB0cnVlXG4gICAgfSlcbiAgICBzbGlkZXM6IFF1ZXJ5TGlzdDxDYXJvdXNlbEl0ZW1Db21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdzbGlkZUNvbnRhaW5lcicpXG4gICAgc2xpZGVDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogQ2Fyb3VzZWwgY29udGFpbmVyIGVsZW1lbnQuICovXG4gICAgQFZpZXdDaGlsZCgnY2Fyb3VzZWxDb250YWluZXInKVxuICAgIGNhcm91c2VsQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gU3RhcnQgaW5kZXggb2YgY3VycmVudGx5IGFjdGl2ZSBpdGVtcyAqL1xuICAgIGN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID0gMDtcblxuICAgIC8qKiBAaGlkZGVuIGhhbmRsZXMgcnRsIHNlcnZpY2UgKi9cbiAgICBkaXI6IERpcmVjdGlvbiA9ICdsdHInO1xuXG4gICAgLyoqIEBoaWRkZW4gTWFrZSBsZWZ0IG5hdmlnYXRpb24gYnV0dG9uIGRpc2FibGVkICovXG4gICAgbGVmdEJ1dHRvbkRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiBNYWtlIHJpZ2h0IG5hdmlnYXRpb24gYnV0dG9uIGRpc2FibGVkICovXG4gICAgcmlnaHRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gRmFrZSBhcnJheSBmb3IgY291bnRpbmcgbnVtYmVyIG9mIHBhZ2UgaW5kaWNhdG9yICovXG4gICAgcGFnZUluZGljYXRvcnNDb3VudEFycmF5OiBudW1iZXJbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2xpZGVzV3JhcHBlclNpemUgPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX2NvbnRlbnRTaXplUHgoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NsaWRlc1dyYXBwZXJTaXplID8gYCR7dGhpcy5fc2xpZGVzV3JhcHBlclNpemV9cHhgIDogdGhpcy53aWR0aDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JpZ2h0TmF2aWdhdGlvbkJ0bkxhYmVsOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xlZnROYXZpZ2F0aW9uQnRuTGFiZWw6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdmlzaWJsZVNsaWRlc0NvdW50OiBudW1iZXIgfCAnYXV0bycgPSAxO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50ID0gMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVzb3VyY2VTdHJpbmdzID0gQ2Fyb3VzZWxSZXNvdXJjZVN0cmluZ3NFTjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY29uZmlnOiBDYXJvdXNlbENvbmZpZyA9IHt9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zbGlkZXNDb3B5OiBDYXJvdXNlbEl0ZW1Db21wb25lbnRbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wcmV2aW91c1Zpc2libGVTbGlkZXNDb3VudDogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zbGlkZVN3aXBlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gQW4gUnhKUyBTdWJqZWN0IHRoYXQgd2lsbCBraWxsIHRoZSBkYXRhIHN0cmVhbSB1cG9uIGNvbXBvbmVudOKAmXMgZGVzdHJ1Y3Rpb24gKGZvciB1bnN1YnNjcmliaW5nKSAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2Fyb3VzZWxTZXJ2aWNlOiBDYXJvdXNlbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3pvbmU6IE5nWm9uZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBfcnRsU2VydmljZTogUnRsU2VydmljZVxuICAgICkge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmliZVRvUnRsKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLnZpc2libGVTbGlkZXNDb3VudCAmJiB0aGlzLnNsaWRlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZ5U2xpZGVDaGFuZ2UoU2xpZGVEaXJlY3Rpb24uTm9uZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gT24gY2Fyb3VzZWwgbG9hZCwgZGlzcGxheSBmaXJzdCBzbGlkZSArIG51bWJlciBvZiBzbGlkZSB2aXNpYmxlXG4gICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSAwO1xuXG4gICAgICAgIC8vIENoYW5nZSBwYWdpbmF0aW9uIGRpc3BsYXkgdG8gbnVtZXJpYywgaWYgaXRlbSBjb3VudCBpcyBtb3JlIHRoYW4gOFxuICAgICAgICBpZiAodGhpcy5zbGlkZXMubGVuZ3RoID4gSUNPTl9QQUdFX0lORElDQVRPUl9MSU1JVCkge1xuICAgICAgICAgICAgdGhpcy5udW1lcmljSW5kaWNhdG9yID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zbGlkZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUNhcm91c2VsKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxlZnRCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnJpZ2h0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAvLyBEaXNhYmxlIHN3aXBlIHdoZW4gdGhlcmUgaXMgbm8gY2Fyb3VzZWwgaXRlbVxuICAgICAgICAgICAgdGhpcy5zd2lwZUVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbiA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gS2VlcCBjb3B5IG9mIG9yaWdpbmFsIHNsaWRlIGFycmF5LCBmb3IgaW5kaWNhdG9yIHB1cnBvc2UuXG4gICAgICAgIC8vIEluIGNhc2Ugb2YgbG9vcGVkIGNhcm91c2VsLCBvcmlnaW5hbCBzbGlkZXMgYXJyYXkgY2hhbmdlcy5cbiAgICAgICAgdGhpcy5fc2xpZGVzQ29weSA9IHRoaXMuc2xpZGVzLnRvQXJyYXkoKTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaWJlU2VydmljZUV2ZW50cygpO1xuXG4gICAgICAgIC8vIFN1YnNjcmliZSB0byBkeW5hbWljIHVwZGF0ZSBvZiBzbGlkZXNcbiAgICAgICAgdGhpcy5zbGlkZXMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuX29uU2xpZGVVcGRhdGVzKCkpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5pdGlhbGl6ZVNlcnZpY2VDb25maWcoKTtcbiAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmluaXRpYWxpc2UodGhpcy5fY29uZmlnLCB0aGlzLnNsaWRlcywgdGhpcy5zbGlkZUNvbnRhaW5lcik7XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzVmlzaWJsZVNsaWRlc0NvdW50ID0gdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudDtcbiAgICAgICAgdGhpcy5fcmVzaXplQ29udGVudENvbnRhaW5lcigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fcHJldmlvdXNWaXNpYmxlU2xpZGVzQ291bnQgJiYgdGhpcy5fcHJldmlvdXNWaXNpYmxlU2xpZGVzQ291bnQgIT09IHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVDYXJvdXNlbCgpO1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZVNlcnZpY2VDb25maWcoKTtcbiAgICAgICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS51cGRhdGVDb25maWcodGhpcy5fY29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMuX3ByZXZpb3VzVmlzaWJsZVNsaWRlc0NvdW50ID0gdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudDtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3Nob3dOYXZpZ2F0aW9uQnV0dG9uSW5QYWdlSW5kaWNhdG9yQ29udGFpbmVyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0b3JJblBhZ2VJbmRpY2F0b3IgJiYgdGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkubGVuZ3RoID4gMTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfc2hvd05hdmlnYXRpb25CdXR0b25JbkNvbnRlbnQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5uYXZpZ2F0b3JJblBhZ2VJbmRpY2F0b3IgJiYgdGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkubGVuZ3RoID4gMTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBfc2hvd1BhZ2VJbmRpY2F0b3JDb250YWluZXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VJbmRpY2F0b3JDb250YWluZXIgJiYgKHRoaXMucGFnZUluZGljYXRvcnNDb3VudEFycmF5Lmxlbmd0aCA+IDAgfHwgdGhpcy5udW1lcmljSW5kaWNhdG9yKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBnZXRQYWdlSW5kaWNhdG9yTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggKyAxfSAke3RoaXMucmVzb3VyY2VTdHJpbmdzLmZkX2Nhcm91c2VsX29mfSAke1xuICAgICAgICAgICAgdGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkubGVuZ3RoXG4gICAgICAgIH1gO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IHNjcmVlblJlYWRlckxhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgIHJldHVybiBgJHt0aGlzLnJlc291cmNlU3RyaW5ncy5mZF9jYXJvdXNlbF9yZWFkZXJ9ICR7dGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIDF9ICR7XG4gICAgICAgICAgICB0aGlzLnJlc291cmNlU3RyaW5ncy5mZF9jYXJvdXNlbF9vZlxuICAgICAgICB9ICR7dGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkubGVuZ3RofWA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoZWwgIT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsLmZvY3VzKHtcbiAgICAgICAgICAgICAgICBwcmV2ZW50U2Nyb2xsOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBnZXQgdmFsdWUgZm9yIHJ0bCAqL1xuICAgIF9pc1J0bCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J0bFNlcnZpY2U/LnJ0bC5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd3JpZ2h0JywgWyckZXZlbnQnXSlcbiAgICBvbktleWRvd25BcnJvd1JpZ2h0KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX2lzUnRsKCkgPyB0aGlzLnByZXZpb3VzKCkgOiB0aGlzLm5leHQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uYXJyb3dsZWZ0JywgWyckZXZlbnQnXSlcbiAgICBvbktleWRvd25BcnJvd0xlZnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5faXNSdGwoKSA/IHRoaXMubmV4dCgpIDogdGhpcy5wcmV2aW91cygpO1xuICAgIH1cblxuICAgIC8qKiBUcmFuc2l0aW9ucyB0byB0aGUgcHJldmlvdXMgc2xpZGUgaW4gdGhlIGNhcm91c2VsLiAqL1xuICAgIHByZXZpb3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMubG9vcCAmJiB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4IDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJpZ2h0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYWRqdXN0QWN0aXZlSXRlbVBvc2l0aW9uKFNsaWRlRGlyZWN0aW9uLlBSRVZJT1VTKTtcbiAgICAgICAgdGhpcy5fcHJldmVudERlZmF1bHRCdG5Gb2N1cygpO1xuICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UucGlja1ByZXZpb3VzKCk7XG4gICAgICAgIHRoaXMuX25vdGlmeVNsaWRlQ2hhbmdlKFNsaWRlRGlyZWN0aW9uLlBSRVZJT1VTKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBUcmFuc2l0aW9ucyB0byB0aGUgbmV4dCBzbGlkZSBpbiB0aGUgY2Fyb3VzZWwuICovXG4gICAgbmV4dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmxvb3AgJiYgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA+PSB0aGlzLnBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNb3ZpbmcgdG8gbmV4dCBzbGlkZVxuICAgICAgICB0aGlzLmxlZnRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9hZGp1c3RBY3RpdmVJdGVtUG9zaXRpb24oU2xpZGVEaXJlY3Rpb24uTkVYVCk7XG4gICAgICAgIHRoaXMuX3ByZXZlbnREZWZhdWx0QnRuRm9jdXMoKTtcbiAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLnBpY2tOZXh0KCk7XG4gICAgICAgIHRoaXMuX25vdGlmeVNsaWRlQ2hhbmdlKFNsaWRlRGlyZWN0aW9uLk5FWFQpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gU3Vic2NyaWJlIHRvIGNhcm91c2VsIHNlcnZpY2UgZXZlbnRzICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlU2VydmljZUV2ZW50cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmFjdGl2ZUNoYW5nZSQuc3Vic2NyaWJlKChldmVudCkgPT4gdGhpcy5fb25TbGlkZVN3aXBlKGV2ZW50KSk7XG4gICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5kcmFnU3RhdGVDaGFuZ2UkLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMuX29uU2xpZGVEcmFnKGV2ZW50KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBQcmV2ZW50IG5hdGl2ZSBmb2N1cyBmbG93IHJlbGF0ZWQgdG8gYnV0dG9uLCBpZiBidXR0b24gd2lsbCBiZSBkaXNhYmxlIG9uIGZvY3VzIHN0YXRlLlxuICAgICAqIEl0IHdvcmtzIG9ubHkgaWYgY2Fyb3VzZWwgaXMgbm90IGluIGNpcmN1bGFyIGxvb3AuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcHJldmVudERlZmF1bHRCdG5Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzRmlyc3QgPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID09PSAwO1xuICAgICAgICBjb25zdCBpc0xhc3QgPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID09PSB0aGlzLnBhZ2VJbmRpY2F0b3JzQ291bnRBcnJheS5sZW5ndGggLSAxO1xuICAgICAgICBpZiAoaXNGaXJzdCB8fCBpc0xhc3QpIHtcbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cyh7XG4gICAgICAgICAgICAgICAgcHJldmVudFNjcm9sbDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBBZGp1c3QgcG9zaXRpb24gb2YgYWN0aXZlIGl0ZW0sIGJhc2VkIG9uIHNsaWRlIGRpcmVjdGlvbiAqL1xuICAgIHByaXZhdGUgX2FkanVzdEFjdGl2ZUl0ZW1Qb3NpdGlvbihzbGlkZURpcmVjdGlvbjogU2xpZGVEaXJlY3Rpb24sIHN0ZXA6IG51bWJlciA9IDEpOiB2b2lkIHtcbiAgICAgICAgLy8gTW92ZSBvbmUgc3RlcCBpbiB0aGUgZGlyZWN0aW9uXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uQWRqdXN0bWVudCA9IHNsaWRlRGlyZWN0aW9uID09PSBTbGlkZURpcmVjdGlvbi5ORVhUID8gc3RlcCA6IC1zdGVwO1xuICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIHBvc2l0aW9uQWRqdXN0bWVudDtcblxuICAgICAgICAvLyBJZiBjYXJvdXNlbCBzZXQgdG8gbG9vcFxuICAgICAgICBpZiAodGhpcy5sb29wKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID0gdGhpcy5zbGlkZXMubGVuZ3RoICsgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA+PSB0aGlzLnNsaWRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCAlIHRoaXMuc2xpZGVzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2J1dHRvblZpc2liaWxpdHkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEhhbmRsZXMgbmF2aWdhdGlvbiBidXR0b24gdmlzaWJpbGl0eSAqL1xuICAgIHByaXZhdGUgX2J1dHRvblZpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5sb29wKSB7XG4gICAgICAgICAgICAvLyBOZWVkIHRvIGRpc2FibGUgbmF2aWdhdGlvbiBidXR0b24gaWYgZWl0aGVyIGRpcmVjdGlvbiBsaW1pdCBoYXMgcmVhY2hlZC5cbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNsaWRlcy5sZW5ndGggLSAxID09PSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50ID4gMSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggKyB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50ID49IHRoaXMuc2xpZGVzLmxlbmd0aFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNsaWRlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodEJ1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEhhbmRsZSB3aGVuIHNsaWRlIGlzIGFkZGVkIG9yIHJlbW92ZWQgKi9cbiAgICBwcml2YXRlIF9vblNsaWRlVXBkYXRlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2xpZGVzQ29weSA9IHRoaXMuc2xpZGVzLnRvQXJyYXkoKTtcbiAgICAgICAgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCA9IDA7XG4gICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5pbml0aWFsaXNlKHRoaXMuX2NvbmZpZywgdGhpcy5zbGlkZXMsIHRoaXMuc2xpZGVDb250YWluZXIpO1xuICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuYWN0aXZlID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMudmVydGljYWwpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldFN0eWxlKHRoaXMuc2xpZGVDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQsICd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlWSgwcHgpJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnNsaWRlQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50LCAndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZVgoMHB4KScpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVDYXJvdXNlbCgpO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gSW5pdGlhbGl6ZSBjYXJvdXNlbCB3aXRoIHZpc2libGUgaXRlbXMgKi9cbiAgICBwcml2YXRlIF9pbml0aWFsaXplQ2Fyb3VzZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3pvbmUub25NaWNyb3Rhc2tFbXB0eS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAvLyBIYW5kbGVzIG5hdmlnYXRvciBidXR0b24gZW5hYmxlZC9kaXNhYmxlZCBzdGF0ZVxuICAgICAgICAgICAgdGhpcy5fYnV0dG9uVmlzaWJpbGl0eSgpO1xuICAgICAgICAgICAgbGV0IGFycmF5TGVuZ3RoOiBudW1iZXI7XG4gICAgICAgICAgICAvLyBzZXQgcGFnZSBpbmRpY2F0b3IgY291bnQgd2l0aCBmYWtlIGFycmF5LCB0byB1c2UgaW4gdGVtcGxhdGVcbiAgICAgICAgICAgIGlmICh0aGlzLmxvb3AgJiYgdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudCA+IDEpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBsb29wIHdpdGggbXVsdGkgaXRlbSB2aXNpYmxlLlxuICAgICAgICAgICAgICAgIGFycmF5TGVuZ3RoID0gdGhpcy5zbGlkZXMubGVuZ3RoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnJheUxlbmd0aCA9IHRoaXMuc2xpZGVzLmxlbmd0aCAtIHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQgKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFnZUluZGljYXRvcnNJZlplcm9Db3VudCA9IHRoaXMuc2xpZGVzLmxlbmd0aCA9PT0gMCA/IDAgOiAxO1xuICAgICAgICAgICAgdGhpcy5wYWdlSW5kaWNhdG9yc0NvdW50QXJyYXkgPSBuZXcgQXJyYXkoYXJyYXlMZW5ndGggPiAwID8gYXJyYXlMZW5ndGggOiBwYWdlSW5kaWNhdG9yc0lmWmVyb0NvdW50KTtcbiAgICAgICAgICAgIHRoaXMuX2dvVG9GaXJzdEl0ZW0oKTtcbiAgICAgICAgICAgIHRoaXMuc2xpZGVzLmZvckVhY2goKF9zbGlkZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID49IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggJiZcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPCB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICsgdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBfc2xpZGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfc2xpZGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dvVG9GaXJzdEl0ZW0oKTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMucGFnZUluZGljYXRvcnNDb3VudEFycmF5Lmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmN1cnJlbnRUcmFuc2l0aW9uUHggIT09IDAgJiZcbiAgICAgICAgICAgIHRoaXMuc2xpZGVzLmxlbmd0aCA+IDFcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID0gMDtcbiAgICAgICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5nb1RvSXRlbSh0aGlzLnNsaWRlcy5maXJzdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBJbml0aWFsaXplIGNvbmZpZyBmb3IgQ2Fyb3VzZWwgc2VydmljZSAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxpemVTZXJ2aWNlQ29uZmlnKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb25maWcudmVydGljYWwgPSB0aGlzLnZlcnRpY2FsO1xuICAgICAgICB0aGlzLl9jb25maWcuZWxlbWVudHNBdE9uY2UgPSB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50O1xuICAgICAgICB0aGlzLl9jb25maWcuZ2VzdHVyZVN1cHBvcnQgPSB0aGlzLnN3aXBlRW5hYmxlZDtcbiAgICAgICAgdGhpcy5fY29uZmlnLmluZmluaXRlID0gdGhpcy5sb29wO1xuICAgICAgICB0aGlzLl9jb25maWcudHJhbnNpdGlvbiA9IFN0cmluZyh0aGlzLnNsaWRlVHJhbnNpdGlvbkR1cmF0aW9uKSArICdtcyc7XG4gICAgICAgIC8vIENhcm91c2VsIHNlcnZpY2UgZXhwZWN0cyB0cmFuc2l0aW9uIGluIHN0cmluZyBmb3JtYXQgd2l0aCB1bml0LlxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gUmV0dXJucyB0aGUgc2xpZGUgc3dhcHBpbmcgc3RlcHNcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRTdGVwVGFrZW4oZXZlbnQ6IFBhbkVuZE91dHB1dCwgYWN0dWFsQWN0aXZlU2xpZGVJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHN0ZXBzQ2FsY3VsYXRlZDogbnVtYmVyO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoIXRoaXMuX2lzUnRsKCkgJiYgZXZlbnQuYWZ0ZXIpIHx8XG4gICAgICAgICAgICAodGhpcy5faXNSdGwoKSAmJiAhZXZlbnQuYWZ0ZXIgJiYgIXRoaXMudmVydGljYWwpIHx8XG4gICAgICAgICAgICAodGhpcy52ZXJ0aWNhbCAmJiBldmVudC5hZnRlcilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoYWN0dWFsQWN0aXZlU2xpZGVJbmRleCA9PT0gMCAmJiB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc3RlcHNDYWxjdWxhdGVkID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0dWFsQWN0aXZlU2xpZGVJbmRleCA+IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBzdGVwc0NhbGN1bGF0ZWQgPSBhY3R1YWxBY3RpdmVTbGlkZUluZGV4IC0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RlcHNDYWxjdWxhdGVkID0gdGhpcy5zbGlkZXMubGVuZ3RoIC0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIGFjdHVhbEFjdGl2ZVNsaWRlSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBTcGVjaWFsIGNhc2UsIHdoZW4gZmlyc3QgbGVmdCBzd2lwZSBiZWZvcmUgc2xpZGVzIGFyZSByb3RhdGVkIGluIGNhcm91c2VsIHNlcnZpY2VcbiAgICAgICAgICAgIGlmIChhY3R1YWxBY3RpdmVTbGlkZUluZGV4ID09PSAwICYmIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICBzdGVwc0NhbGN1bGF0ZWQgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3R1YWxBY3RpdmVTbGlkZUluZGV4IDwgdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgIHN0ZXBzQ2FsY3VsYXRlZCA9IHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggLSBhY3R1YWxBY3RpdmVTbGlkZUluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGVwc0NhbGN1bGF0ZWQgPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4ICsgdGhpcy5zbGlkZXMubGVuZ3RoIC0gYWN0dWFsQWN0aXZlU2xpZGVJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3RlcHNDYWxjdWxhdGVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEhhbmRsZXMgbm90aWZpY2F0aW9uIG9uIHZpc2libGUgc2xpZGUgY2hhbmdlICovXG4gICAgcHJpdmF0ZSBfbm90aWZ5U2xpZGVDaGFuZ2Uoc2xpZGVEaXJlY3Rpb246IFNsaWRlRGlyZWN0aW9uLCBmaXJzdEFjdGl2ZVNsaWRlPzogQ2Fyb3VzZWxJdGVtSW50ZXJmYWNlIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhY3RpdmVTbGlkZXM6IENhcm91c2VsSXRlbUNvbXBvbmVudFtdID0gW107XG4gICAgICAgIGxldCBmaXJzdEFjdGl2ZVNsaWRlSW5kZXg6IG51bWJlcjtcbiAgICAgICAgaWYgKHRoaXMubG9vcCkge1xuICAgICAgICAgICAgZmlyc3RBY3RpdmVTbGlkZSA9IHRoaXMuX2Nhcm91c2VsU2VydmljZS5hY3RpdmU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpcnN0QWN0aXZlU2xpZGUpIHtcbiAgICAgICAgICAgIGZpcnN0QWN0aXZlU2xpZGVJbmRleCA9IHRoaXMuc2xpZGVzLnRvQXJyYXkoKS5maW5kSW5kZXgoKF9pdGVtKSA9PiBfaXRlbSA9PT0gZmlyc3RBY3RpdmVTbGlkZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaXJzdEFjdGl2ZVNsaWRlSW5kZXggPSB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGFjdGl2ZVNsaWRlSW5kZXggPSAwOyBhY3RpdmVTbGlkZUluZGV4IDwgdGhpcy5fdmlzaWJsZVNsaWRlc051bWVyaWNDb3VudDsgYWN0aXZlU2xpZGVJbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGZpcnN0QWN0aXZlU2xpZGVJbmRleCArIGFjdGl2ZVNsaWRlSW5kZXg7XG4gICAgICAgICAgICBjb25zdCBzbGlkZSA9IHRoaXMuc2xpZGVzLmdldChpbmRleCk7XG4gICAgICAgICAgICBpZiAoc2xpZGUpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVTbGlkZXMucHVzaChzbGlkZSk7XG4gICAgICAgICAgICAgICAgc2xpZGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tYW5hZ2VTbGlkZVZpc2liaWxpdHkoZmlyc3RBY3RpdmVTbGlkZUluZGV4KTtcbiAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gc2xpZGVEaXJlY3Rpb24gPT09IFNsaWRlRGlyZWN0aW9uLk5FWFQgPyAnTmV4dCcgOiAnUHJldmlvdXMnO1xuICAgICAgICB0aGlzLnNsaWRlQ2hhbmdlLmVtaXQobmV3IENhcm91c2VsQWN0aXZlU2xpZGVzKGFjdGl2ZVNsaWRlcywgZGlyZWN0aW9uKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gTWFuYWdlcyB2aXNpYmlsaXR5IGZvciBzbGlkZXMuIFVzZWZ1bCBpbiBtYW5hZ2luZyB0YWIgb3JkZXIgKi9cbiAgICBwcml2YXRlIF9tYW5hZ2VTbGlkZVZpc2liaWxpdHkoZmlyc3RBY3RpdmVTbGlkZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNsaWRlcy5mb3JFYWNoKChfc2xpZGVzLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBmaXJzdEFjdGl2ZVNsaWRlSW5kZXggJiYgaW5kZXggPCBmaXJzdEFjdGl2ZVNsaWRlSW5kZXggKyB0aGlzLl92aXNpYmxlU2xpZGVzTnVtZXJpY0NvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfc2xpZGVzLnZpc2liaWxpdHkgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfc2xpZGVzLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX3NsaWRlcy52aXNpYmlsaXR5ID09PSAndmlzaWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9zbGlkZXMudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSwgdGhpcy5zbGlkZVRyYW5zaXRpb25EdXJhdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUnRsIGNoYW5nZSBzdWJzY3JpcHRpb24gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpYmVUb1J0bCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVmcmVzaERpcmVjdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGlyID0gdGhpcy5faXNSdGwoKSA/ICdydGwnIDogJ2x0cic7XG4gICAgICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuaXNSdGwgPSB0aGlzLmRpciA9PT0gJ3J0bCc7XG4gICAgICAgICAgICBpZiAodGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLml0ZW1zICYmIHRoaXMuX2Nhcm91c2VsU2VydmljZS5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYXJvdXNlbFNlcnZpY2UuZ29Ub0l0ZW0odGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmFjdGl2ZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9O1xuICAgICAgICByZWZyZXNoRGlyZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuX3J0bFNlcnZpY2U/LnJ0bC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHJlZnJlc2hEaXJlY3Rpb24oKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gT24gU3dpcGluZyBvZiBzbGlkZSwgbWFuYWdlIHBhZ2UgaW5kaWNhdG9yICovXG4gICAgcHJpdmF0ZSBfb25TbGlkZVN3aXBlKGV2ZW50OiBQYW5FbmRPdXRwdXQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2xpZGVTd2lwZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBmaXJzdEFjdGl2ZVNsaWRlID0gZXZlbnQuaXRlbTtcbiAgICAgICAgY29uc3QgYWN0dWFsQWN0aXZlU2xpZGVJbmRleCA9IHRoaXMuX3NsaWRlc0NvcHkuZmluZEluZGV4KChfc2xpZGUpID0+IF9zbGlkZSA9PT0gZmlyc3RBY3RpdmVTbGlkZSk7XG4gICAgICAgIGNvbnN0IHN0ZXBUYWtlbiA9IHRoaXMuX2dldFN0ZXBUYWtlbihldmVudCwgYWN0dWFsQWN0aXZlU2xpZGVJbmRleCk7XG4gICAgICAgIGlmIChzdGVwVGFrZW4gPiAwKSB7XG4gICAgICAgICAgICBsZXQgc2xpZGVEaXJlY3Rpb246IFNsaWRlRGlyZWN0aW9uO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1J0bCgpKSB7XG4gICAgICAgICAgICAgICAgc2xpZGVEaXJlY3Rpb24gPSBldmVudC5hZnRlciA/IFNsaWRlRGlyZWN0aW9uLk5FWFQgOiBTbGlkZURpcmVjdGlvbi5QUkVWSU9VUztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gdmVydGljYWwgY2Fyb3VzZWwgc2xpZGUgZGlyZWN0aW9uIGlzIHNhbWUgaW4gbHRyIGFuZCBydGxcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICBzbGlkZURpcmVjdGlvbiA9IGV2ZW50LmFmdGVyID8gU2xpZGVEaXJlY3Rpb24uTkVYVCA6IFNsaWRlRGlyZWN0aW9uLlBSRVZJT1VTO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNsaWRlRGlyZWN0aW9uID0gZXZlbnQuYWZ0ZXIgPyBTbGlkZURpcmVjdGlvbi5QUkVWSU9VUyA6IFNsaWRlRGlyZWN0aW9uLk5FWFQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fYWRqdXN0QWN0aXZlSXRlbVBvc2l0aW9uKHNsaWRlRGlyZWN0aW9uLCBzdGVwVGFrZW4pO1xuICAgICAgICAgICAgdGhpcy5fbm90aWZ5U2xpZGVDaGFuZ2Uoc2xpZGVEaXJlY3Rpb24sIGZpcnN0QWN0aXZlU2xpZGUpO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBNYWtpbmcgc2xpZGVzIHZpc2libGUgd2hlbiBzbGlkZXMgYXJlIGRyYWdnZWQuIE90aGVyd2lzZSwgaXQgbG9vc2VzIHRoZSBlZmZlY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfb25TbGlkZURyYWcoaXNEcmFnZ2luZzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoaXNEcmFnZ2luZykge1xuICAgICAgICAgICAgdGhpcy5zbGlkZXMuZm9yRWFjaCgoX3NsaWRlKSA9PiB7XG4gICAgICAgICAgICAgICAgX3NsaWRlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX3NsaWRlU3dpcGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFmdGVyIHNsaWRlIGxpbWl0IHJlYWNoZWQsIGlmIGRyYWdnaW5nIHN0YXJ0cyB0aGVuIHJldmVydCB2aXNpYmlsaXR5XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3NsaWRlU3dpcGVkICYmICF0aGlzLmxvb3ApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tYW5hZ2VTbGlkZVZpc2liaWxpdHkodGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogUmVzaXplcyBpbm5lciBjYXJvdXNlbCBjb250YWluZXIgdG8gZml0IGFsbCBpdGVtcyBpbiB0aGUgdmlld3BvcnQgYW5kIGhpZGUgdGhvc2Ugd2hpY2ggYXJlIG5vdCBmdWxseSBpbiBpdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9yZXNpemVDb250ZW50Q29udGFpbmVyKCk6IHZvaWQge1xuICAgICAgICBtZXJnZShcbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmFibGUodGhpcy5zbGlkZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50KSxcbiAgICAgICAgICAgIHJlc2l6ZU9ic2VydmFibGUodGhpcy5jYXJvdXNlbENvbnRhaW5lci5uYXRpdmVFbGVtZW50KVxuICAgICAgICApXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSwgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB3aWR0aCwgc2xpZGVzIH0gPSB0aGlzLl9nZXRGaXR0aW5nU2xpZGVzQW5kV2lkdGgoKTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZpc2libGVTbGlkZXNDb3VudCA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Zpc2libGVTbGlkZXNOdW1lcmljQ291bnQgPSBzbGlkZXM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsU2xpZGVzID0gdGhpcy5zbGlkZXMubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBuZWVkbGVTbGlkZUluZGV4ID0gdGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleDtcblxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBhbW91bnQgb2Ygc2xpZGVzIGluc3VmZmljaWVudCB0byBmaWxsIHdob2xlIGNhcm91c2VsLCBzbGlkZSBiYWNrIGEgYml0LlxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIHNsaWRlcyA+IHRvdGFsU2xpZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZWVkbGVTbGlkZUluZGV4ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBY3RpdmVTbGlkZXNTdGFydEluZGV4IC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5jdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleCArIHNsaWRlcyAtIHRvdGFsU2xpZGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5lZWRsZVNsaWRlID0gdGhpcy5zbGlkZXMuZ2V0KG5lZWRsZVNsaWRlSW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXggPSBuZWVkbGVTbGlkZUluZGV4O1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nhcm91c2VsU2VydmljZS5hY3RpdmUgPSBuZWVkbGVTbGlkZTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBSZWZyZXNoIGNhcm91c2VsIGNvbmZpZyBhbmQgdHJhbnNpdGlvbiB0byB0aGUgY3VycmVudCBzbGlkZS5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZUNhcm91c2VsKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgbmVlZGxlU2xpZGUgJiYgdGhpcy5fY2Fyb3VzZWxTZXJ2aWNlLmdvVG9JdGVtKG5lZWRsZVNsaWRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZ5U2xpZGVDaGFuZ2UoU2xpZGVEaXJlY3Rpb24uTm9uZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NsaWRlc1dyYXBwZXJTaXplICE9PSB3aWR0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zbGlkZXNXcmFwcGVyU2l6ZSA9IHdpZHRoO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDYWxjdWxhdGVzIGhvdyBtYW55IHNsaWRlcyBjYW4gYmUgc2hvd24gd2l0aGluIGN1cnJlbnQgY2Fyb3VzZWwgdmlld3BvcnQuXG4gICAgICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgZml0dGluZyBzbGlkZXMgY291bnQgYW5kIHRvdGFsIHdpZHRoIG9mIHRob3NlIHNsaWRlcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRGaXR0aW5nU2xpZGVzQW5kV2lkdGgoKTogRml0dGluZ1NsaWRlc0FuZFdpZHRoIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhcm91c2VsQ29udGFpbmVyKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgICAgICAgIHNsaWRlczogMVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHdpZHRoIH0gPSB0aGlzLmNhcm91c2VsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGxldCBtYXhTaXplID0gMDtcbiAgICAgICAgbGV0IHNsaWRlc0NvdW50ID0gMDtcbiAgICAgICAgY29uc3QgY2Fyb3VzZWxTbGlkZXMgPSB0aGlzLnNsaWRlcy50b0FycmF5KCk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzU2xpZGVzID0gY2Fyb3VzZWxTbGlkZXMuc3BsaWNlKDAsIHRoaXMuY3VycmVudEFjdGl2ZVNsaWRlc1N0YXJ0SW5kZXgpO1xuICAgICAgICBjb25zdCBnZXRTbGlkZXMgPSAoc2xpZGVzOiBDYXJvdXNlbEl0ZW1Db21wb25lbnRbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzbGlkZSBvZiBzbGlkZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzbGlkZVdpZHRoID0gc2xpZGUuZ2V0V2lkdGgoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXNsaWRlV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1NpemUgPSBtYXhTaXplICsgc2xpZGVXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAobmV3U2l6ZSA+IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtYXhTaXplID0gbmV3U2l6ZTtcbiAgICAgICAgICAgICAgICBzbGlkZXNDb3VudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBnZXRTbGlkZXMoY2Fyb3VzZWxTbGlkZXMpO1xuXG4gICAgICAgIC8vIElmIHdpdGggb2YgdGhlIHJlc3Qgb2YgdGhlIHNsaWRlcyBpcyBsZXNzZXIgdGhhbiBjYXJvdXNlJ3Mgdmlld3BvcnQsIGFkZCBwcmV2aW91cyBzbGlkZXMgdG8gaXQuXG4gICAgICAgIGlmIChtYXhTaXplIDwgd2lkdGgpIHtcbiAgICAgICAgICAgIGdldFNsaWRlcyhwcmV2aW91c1NsaWRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdpZHRoOiBtYXhTaXplLFxuICAgICAgICAgICAgc2xpZGVzOiBzbGlkZXNDb3VudFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0VmlzaWJsZVNsaWRlc0NvdW50KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLl92aXNpYmxlU2xpZGVzQ291bnQgIT09ICdhdXRvJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Zpc2libGVTbGlkZXNDb3VudDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHNsaWRlcyB9ID0gdGhpcy5fZ2V0Rml0dGluZ1NsaWRlc0FuZFdpZHRoKCk7XG4gICAgICAgIHJldHVybiBzbGlkZXM7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIGNsYXNzPVwiZmQtY2Fyb3VzZWxcIlxuICAgIFtjbGFzcy5mZC1jYXJvdXNlbC0tbm8tbmF2aWdhdGlvbl09XCIhbmF2aWdhdGlvblwiXG4gICAgZGF0YS1yaWRlPVwiY2Fyb3VzZWxcIlxuICAgIHRhYmluZGV4PVwiMFwiXG4gICAgW3N0eWxlLmhlaWdodF09XCJoZWlnaHRcIlxuICAgIFtzdHlsZS53aWR0aF09XCJ3aWR0aFwiXG4gICAgW2F0dHIuZGlyXT1cImRpclwiXG4gICAgcm9sZT1cInJlZ2lvblwiXG4gICAgI2Nhcm91c2VsQ29udGFpbmVyXG4gICAgKGNsaWNrKT1cIl9mb2N1cygpXCJcbj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3Nob3dQYWdlSW5kaWNhdG9yQ29udGFpbmVyICYmIHBhZ2VJbmRpY2F0b3JzT3JpZW50YXRpb24gPT09ICd0b3AnXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYWdlSW5kaWNhdG9yQ29udGFpbmVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmQtY2Fyb3VzZWxfX2NvbnRlbnRcIlxuICAgICAgICBbY2xhc3MuZmQtY2Fyb3VzZWxfX2NvbnRlbnQtLWhvcml6b250YWxdPVwiIXZlcnRpY2FsXCJcbiAgICAgICAgW3N0eWxlLndpZHRoXT1cIl9jb250ZW50U2l6ZVB4XCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfc2hvd05hdmlnYXRpb25CdXR0b25JbkNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25MZWZ0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxkaXYgI3NsaWRlQ29udGFpbmVyIGNsYXNzPVwiZmQtY2Fyb3VzZWxfX3NsaWRlc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3Nob3dOYXZpZ2F0aW9uQnV0dG9uSW5Db250ZW50XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uUmlnaHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3Nob3dQYWdlSW5kaWNhdG9yQ29udGFpbmVyICYmIHBhZ2VJbmRpY2F0b3JzT3JpZW50YXRpb24gPT09ICdib3R0b20nXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYWdlSW5kaWNhdG9yQ29udGFpbmVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogbm9uZVwiIHJvbGU9XCJyZWdpb25cIiBbYXR0ci5pZF09XCJpZCArICctYWNjZXNzaWJpbGl0eSdcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBkaXI9XCJsdHJcIj5cbiAgICAgICAge3sgc2NyZWVuUmVhZGVyTGFiZWwgfX1cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3BhZ2VJbmRpY2F0b3JDb250YWluZXI+XG4gICAgPGRpdiBjbGFzcz1cImZkLWNhcm91c2VsX19wYWdlLWluZGljYXRvci1jb250YWluZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9zaG93TmF2aWdhdGlvbkJ1dHRvbkluUGFnZUluZGljYXRvckNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvbkxlZnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2VJbmRpY2F0b3JzXCI+IDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfc2hvd05hdmlnYXRpb25CdXR0b25JblBhZ2VJbmRpY2F0b3JDb250YWluZXJcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25SaWdodFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcGFnZUluZGljYXRvcnM+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm51bWVyaWNJbmRpY2F0b3JcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZkLWNhcm91c2VsX19wYWdlLWluZGljYXRvcnNcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYWdlSW5kaWNhdG9yXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZkLWNhcm91c2VsX190ZXh0XCIgZGlyPVwibHRyXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGdldFBhZ2VJbmRpY2F0b3JMYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbnVtZXJpY0luZGljYXRvciAmJiBfc2hvd05hdmlnYXRpb25CdXR0b25JblBhZ2VJbmRpY2F0b3JDb250YWluZXJcIj5cbiAgICAgICAgPG9sIGNsYXNzPVwiZmQtY2Fyb3VzZWxfX3BhZ2UtaW5kaWNhdG9yc1wiIFthdHRyLmRpcl09XCJkaXJcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYWdlSW5kaWNhdG9yXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBwYWdlSW5kaWNhdG9yc0NvdW50QXJyYXk7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXNsaWRlLXRvXT1cImkgKyAxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtY2Fyb3VzZWxfX3BhZ2UtaW5kaWNhdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC1jYXJvdXNlbF9fcGFnZS1pbmRpY2F0b3ItLWFjdGl2ZV09XCJpID09PSBjdXJyZW50QWN0aXZlU2xpZGVzU3RhcnRJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgID48L2xpPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvb2w+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2J1dHRvbkxlZnQ+XG4gICAgPGJ1dHRvblxuICAgICAgICBmZC1idXR0b25cbiAgICAgICAgY2xhc3M9XCJmZC1jYXJvdXNlbF9fYnV0dG9uIGZkLWNhcm91c2VsX19idXR0b24tLWxlZnRcIlxuICAgICAgICBbc3R5bGUuei1pbmRleF09XCIxXCJcbiAgICAgICAgZGF0YS1zbGlkZT1cInByZXZpb3VzXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsZWZ0TmF2aWdhdGlvbkJ0bkxhYmVsIHx8ICgnY29yZUNhcm91c2VsLmxlZnROYXZpZ2F0aW9uQnRuTGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgKGNsaWNrKT1cInByZXZpb3VzKCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJsZWZ0QnV0dG9uRGlzYWJsZWRcIlxuICAgICAgICBbYXR0ci50aXRsZV09XCJsZWZ0TmF2aWdhdGlvbkJ0bkxhYmVsIHx8ICgnY29yZUNhcm91c2VsLmxlZnROYXZpZ2F0aW9uQnRuTGFiZWwnIHwgZmRUcmFuc2xhdGUpXCJcbiAgICAgICAgZ2x5cGg9XCJzbGltLWFycm93LWxlZnRcIlxuICAgID48L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9uUmlnaHQ+XG4gICAgPGJ1dHRvblxuICAgICAgICBmZC1idXR0b25cbiAgICAgICAgY2xhc3M9XCJmZC1jYXJvdXNlbF9fYnV0dG9uIGZkLWNhcm91c2VsX19idXR0b24tLXJpZ2h0XCJcbiAgICAgICAgW3N0eWxlLnotaW5kZXhdPVwiMVwiXG4gICAgICAgIGRhdGEtc2xpZGU9XCJuZXh0XCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJyaWdodE5hdmlnYXRpb25CdG5MYWJlbCB8fCAoJ2NvcmVDYXJvdXNlbC5yaWdodE5hdmlnYXRpb25CdG5MYWJlbCcgfCBmZFRyYW5zbGF0ZSlcIlxuICAgICAgICAoY2xpY2spPVwibmV4dCgpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwicmlnaHRCdXR0b25EaXNhYmxlZFwiXG4gICAgICAgIFthdHRyLnRpdGxlXT1cInJpZ2h0TmF2aWdhdGlvbkJ0bkxhYmVsIHx8ICgnY29yZUNhcm91c2VsLnJpZ2h0TmF2aWdhdGlvbkJ0bkxhYmVsJyB8IGZkVHJhbnNsYXRlKVwiXG4gICAgICAgIGdseXBoPVwic2xpbS1hcnJvdy1yaWdodFwiXG4gICAgPjwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|