@quadrel-enterprise-ui/framework 18.25.3 → 18.25.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/core/core.module.mjs +3 -2
- package/esm2022/lib/core/model/safe-bottom-offset.token.mjs +3 -0
- package/esm2022/lib/notifications/directives/snackbar-listener.directive.mjs +83 -34
- package/esm2022/lib/page/page.component.mjs +22 -7
- package/fesm2022/quadrel-enterprise-ui-framework.mjs +100 -36
- package/fesm2022/quadrel-enterprise-ui-framework.mjs.map +1 -1
- package/lib/core/core.module.d.ts +2 -1
- package/lib/core/model/safe-bottom-offset.token.d.ts +3 -0
- package/lib/notifications/directives/snackbar-listener.directive.d.ts +30 -6
- package/lib/page/page.component.d.ts +4 -3
- package/package.json +1 -1
|
@@ -12,8 +12,9 @@ import { QdTooltipAtIntersectionDirective } from './tooltip/tooltip-at-intersect
|
|
|
12
12
|
import { QdVisuallyHiddenDirective } from './visually-hidden/visually-hidden.directive';
|
|
13
13
|
import { QdPushEventsService } from './services/push-events.service';
|
|
14
14
|
import { QD_POPOVER_TOP_FIRST } from './popover/popover-top-first.token';
|
|
15
|
+
import { QD_SAFE_BOTTOM_OFFSET } from './model/safe-bottom-offset.token';
|
|
15
16
|
import * as i0 from "@angular/core";
|
|
16
|
-
export { QdDisabledDirective, QdFileSizePipe, QdPlaceholderPipe, QdProjectionGuardComponent, QdRwdDisabledDirective, QdTooltipAtIntersectionDirective, QdVisuallyHiddenDirective, QdPushEventsService, QD_POPOVER_TOP_FIRST };
|
|
17
|
+
export { QdDisabledDirective, QdFileSizePipe, QdPlaceholderPipe, QdProjectionGuardComponent, QdRwdDisabledDirective, QdTooltipAtIntersectionDirective, QdVisuallyHiddenDirective, QdPushEventsService, QD_POPOVER_TOP_FIRST, QD_SAFE_BOTTOM_OFFSET };
|
|
17
18
|
export class QdCoreModule {
|
|
18
19
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdCoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
19
20
|
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.9", ngImport: i0, type: QdCoreModule, declarations: [QdDisabledDirective,
|
|
@@ -51,4 +52,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
51
52
|
]
|
|
52
53
|
}]
|
|
53
54
|
}] });
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3FkLXVpL3NyYy9saWIvY29yZS9jb3JlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHdEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzNGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBRXZILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQUV6RSxPQUFPLEVBRUwsbUJBQW1CLEVBQ25CLGNBQWMsRUFDZCxpQkFBaUIsRUFDakIsMEJBQTBCLEVBQzFCLHNCQUFzQixFQUN0QixnQ0FBZ0MsRUFHaEMseUJBQXlCLEVBQ3pCLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIscUJBQXFCLEVBQ3RCLENBQUM7QUFxQkYsTUFBTSxPQUFPLFlBQVk7dUdBQVosWUFBWTt3R0FBWixZQUFZLGlCQWhCckIsbUJBQW1CO1lBQ25CLGNBQWM7WUFDZCxpQkFBaUI7WUFDakIsMEJBQTBCO1lBQzFCLHNCQUFzQjtZQUN0Qix5QkFBeUIsYUFQakIsWUFBWSxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsYUFVOUUsbUJBQW1CO1lBQ25CLGNBQWM7WUFDZCxpQkFBaUI7WUFDakIsMEJBQTBCO1lBQzFCLHNCQUFzQjtZQUN0Qix5QkFBeUI7d0dBR2hCLFlBQVksWUFsQmIsWUFBWSxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUI7OzJGQWtCckUsWUFBWTtrQkFuQnhCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsQ0FBQztvQkFDakYsWUFBWSxFQUFFO3dCQUNaLG1CQUFtQjt3QkFDbkIsY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLDBCQUEwQjt3QkFDMUIsc0JBQXNCO3dCQUN0Qix5QkFBeUI7cUJBQzFCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxtQkFBbUI7d0JBQ25CLGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQiwwQkFBMEI7d0JBQzFCLHNCQUFzQjt3QkFDdEIseUJBQXlCO3FCQUMxQjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbmltcG9ydCB7IFFkQXBwRW52aXJvbm1lbnQgfSBmcm9tICcuL21vZGVsL2FwcC1lbnZpcm9tZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBRZEJyZWFkY3J1bWJzTW9kdWxlIH0gZnJvbSAnLi9icmVhZGNydW1icy9icmVhZGNydW1icy5tb2R1bGUnO1xuaW1wb3J0IHsgUWREYXRhRmFjZXRzTW9kdWxlIH0gZnJvbSAnLi9kYXRhLWZhY2V0cy9kYXRhLWZhY2V0cy5tb2R1bGUnO1xuaW1wb3J0IHsgUWREaXNhYmxlZERpcmVjdGl2ZSB9IGZyb20gJy4vZGlzYWJsZWQvZGlzYWJsZWQuZGlyZWN0aXZlJztcbmltcG9ydCB7IFFkRmlsZVNpemVQaXBlIH0gZnJvbSAnLi9waXBlcy9maWxlLXNpemUucGlwZSc7XG5pbXBvcnQgeyBRZFBsYWNlaG9sZGVyUGlwZSB9IGZyb20gJy4vcGlwZXMvcGxhY2Vob2xkZXIucGlwZSc7XG5pbXBvcnQgeyBRZFByb2plY3Rpb25HdWFyZENvbXBvbmVudCB9IGZyb20gJy4vcHJvamVjdGlvbi1ndWFyZC9wcm9qZWN0aW9uLWd1YXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRZFJ3ZERpc2FibGVkRGlyZWN0aXZlIH0gZnJvbSAnLi9yd2QtZGlzYWJsZWQvcndkLWRpc2FibGVkLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBRZFRvb2x0aXBBdEludGVyc2VjdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4vdG9vbHRpcC90b29sdGlwLWF0LWludGVyc2VjdGlvbi90b29sdGlwLWF0LWludGVyc2VjdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUWRUcmFuc2xhdGFibGUsIFFkVHJhbnNsYXRpb24gfSBmcm9tICcuL21vZGVsL3RyYW5zbGF0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBRZFZpc3VhbGx5SGlkZGVuRGlyZWN0aXZlIH0gZnJvbSAnLi92aXN1YWxseS1oaWRkZW4vdmlzdWFsbHktaGlkZGVuLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBRZFB1c2hFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9wdXNoLWV2ZW50cy5zZXJ2aWNlJztcbmltcG9ydCB7IFFEX1BPUE9WRVJfVE9QX0ZJUlNUIH0gZnJvbSAnLi9wb3BvdmVyL3BvcG92ZXItdG9wLWZpcnN0LnRva2VuJztcbmltcG9ydCB7IFFEX1NBRkVfQk9UVE9NX09GRlNFVCB9IGZyb20gJy4vbW9kZWwvc2FmZS1ib3R0b20tb2Zmc2V0LnRva2VuJztcblxuZXhwb3J0IHtcbiAgUWRBcHBFbnZpcm9ubWVudCxcbiAgUWREaXNhYmxlZERpcmVjdGl2ZSxcbiAgUWRGaWxlU2l6ZVBpcGUsXG4gIFFkUGxhY2Vob2xkZXJQaXBlLFxuICBRZFByb2plY3Rpb25HdWFyZENvbXBvbmVudCxcbiAgUWRSd2REaXNhYmxlZERpcmVjdGl2ZSxcbiAgUWRUb29sdGlwQXRJbnRlcnNlY3Rpb25EaXJlY3RpdmUsXG4gIFFkVHJhbnNsYXRhYmxlLFxuICBRZFRyYW5zbGF0aW9uLFxuICBRZFZpc3VhbGx5SGlkZGVuRGlyZWN0aXZlLFxuICBRZFB1c2hFdmVudHNTZXJ2aWNlLFxuICBRRF9QT1BPVkVSX1RPUF9GSVJTVCxcbiAgUURfU0FGRV9CT1RUT01fT0ZGU0VUXG59O1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUcmFuc2xhdGVNb2R1bGUsIFFkRGF0YUZhY2V0c01vZHVsZSwgUWRCcmVhZGNydW1ic01vZHVsZV0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFFkRGlzYWJsZWREaXJlY3RpdmUsXG4gICAgUWRGaWxlU2l6ZVBpcGUsXG4gICAgUWRQbGFjZWhvbGRlclBpcGUsXG4gICAgUWRQcm9qZWN0aW9uR3VhcmRDb21wb25lbnQsXG4gICAgUWRSd2REaXNhYmxlZERpcmVjdGl2ZSxcbiAgICBRZFZpc3VhbGx5SGlkZGVuRGlyZWN0aXZlXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBRZERpc2FibGVkRGlyZWN0aXZlLFxuICAgIFFkRmlsZVNpemVQaXBlLFxuICAgIFFkUGxhY2Vob2xkZXJQaXBlLFxuICAgIFFkUHJvamVjdGlvbkd1YXJkQ29tcG9uZW50LFxuICAgIFFkUndkRGlzYWJsZWREaXJlY3RpdmUsXG4gICAgUWRWaXN1YWxseUhpZGRlbkRpcmVjdGl2ZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFFkQ29yZU1vZHVsZSB7fVxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
export const QD_SAFE_BOTTOM_OFFSET = new InjectionToken('QD_SAFE_BOTTOM_OFFSET');
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZS1ib3R0b20tb2Zmc2V0LnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xZC11aS9zcmMvbGliL2NvcmUvbW9kZWwvc2FmZS1ib3R0b20tb2Zmc2V0LnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxjQUFjLENBQTBCLHVCQUF1QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjb25zdCBRRF9TQUZFX0JPVFRPTV9PRkZTRVQgPSBuZXcgSW5qZWN0aW9uVG9rZW48QmVoYXZpb3JTdWJqZWN0PG51bWJlcj4+KCdRRF9TQUZFX0JPVFRPTV9PRkZTRVQnKTtcbiJdfQ==
|
|
@@ -1,70 +1,119 @@
|
|
|
1
|
-
|
|
1
|
+
import { Directive, ElementRef, Inject } from '@angular/core';
|
|
2
2
|
import { Overlay, OverlayPositionBuilder } from '@angular/cdk/overlay';
|
|
3
3
|
import { ComponentPortal } from '@angular/cdk/portal';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { debounceTime, startWith, takeUntil } from 'rxjs/operators';
|
|
4
|
+
import { BehaviorSubject, debounceTime, distinctUntilChanged, startWith, Subject, takeUntil } from 'rxjs';
|
|
5
|
+
import { QD_SAFE_BOTTOM_OFFSET } from '../../core/core.module';
|
|
7
6
|
import { QdSnackbarService } from '../services/snackbar.service';
|
|
8
7
|
import { QdNotificationsSnackbarComponent } from '../snackbar/snackbar.component';
|
|
9
8
|
import * as i0 from "@angular/core";
|
|
10
9
|
import * as i1 from "../services/snackbar.service";
|
|
11
10
|
import * as i2 from "@angular/cdk/overlay";
|
|
11
|
+
import * as i3 from "rxjs";
|
|
12
|
+
const MARGIN_PX = 10;
|
|
12
13
|
/**
|
|
13
|
-
*
|
|
14
|
+
* Shows notifications as a snackbar.
|
|
15
|
+
*
|
|
16
|
+
* #### **Behavior**
|
|
17
|
+
* - Appears in the bottom-right corner.
|
|
18
|
+
* - Adapts to the QLS (e.g., stays above a PageFooter).
|
|
19
|
+
* - Behavior is configurable via `snackbarOptions` (e.g., lifetime, close button, handlers).
|
|
20
|
+
*
|
|
21
|
+
* #### **Usage**
|
|
22
|
+
* ```html
|
|
23
|
+
* <qd-shell [config]="shellConfig" qdSnackbarListener>
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* #### **Snackbar Configuration**
|
|
27
|
+
* ```ts
|
|
28
|
+
* {
|
|
29
|
+
* showAsSnackbar: true,
|
|
30
|
+
* snackbarOptions?: {
|
|
31
|
+
* ...
|
|
32
|
+
* }
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
14
35
|
*/
|
|
15
36
|
export class QdNotificationsSnackbarListenerDirective {
|
|
16
37
|
snackbarService;
|
|
17
38
|
hostRef;
|
|
18
39
|
overlay;
|
|
19
40
|
overlayPositionBuilder;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
41
|
+
safeBottomOffset$;
|
|
42
|
+
_overlayRef;
|
|
43
|
+
_destroyed$ = new Subject();
|
|
44
|
+
constructor(snackbarService, hostRef, overlay, overlayPositionBuilder, safeBottomOffset$) {
|
|
23
45
|
this.snackbarService = snackbarService;
|
|
24
46
|
this.hostRef = hostRef;
|
|
25
47
|
this.overlay = overlay;
|
|
26
48
|
this.overlayPositionBuilder = overlayPositionBuilder;
|
|
49
|
+
this.safeBottomOffset$ = safeBottomOffset$;
|
|
27
50
|
}
|
|
28
51
|
ngOnInit() {
|
|
29
|
-
this.
|
|
52
|
+
this.initOverlay();
|
|
30
53
|
}
|
|
31
|
-
|
|
54
|
+
ngOnDestroy() {
|
|
55
|
+
this._overlayRef?.dispose();
|
|
56
|
+
this._destroyed$.next();
|
|
57
|
+
this._destroyed$.complete();
|
|
58
|
+
}
|
|
59
|
+
initOverlay() {
|
|
32
60
|
if (!this.hostRef)
|
|
33
61
|
return;
|
|
34
|
-
const positionStrategy = this.overlayPositionBuilder
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
overlayX: 'end',
|
|
39
|
-
overlayY: 'bottom',
|
|
40
|
-
offsetX: -10,
|
|
41
|
-
offsetY: -10
|
|
42
|
-
}
|
|
43
|
-
]);
|
|
44
|
-
this.overlayRef = this.overlay.create({
|
|
62
|
+
const positionStrategy = this.overlayPositionBuilder
|
|
63
|
+
.flexibleConnectedTo(this.hostRef)
|
|
64
|
+
.withPositions(this.bottomRightPositions());
|
|
65
|
+
this._overlayRef = this.overlay.create({
|
|
45
66
|
positionStrategy,
|
|
46
67
|
maxWidth: 300,
|
|
47
68
|
scrollStrategy: this.overlay.scrollStrategies.reposition()
|
|
48
69
|
});
|
|
49
70
|
const notificationPortal = new ComponentPortal(QdNotificationsSnackbarComponent);
|
|
50
|
-
const snackbarRef = this.
|
|
71
|
+
const snackbarRef = this._overlayRef.attach(notificationPortal);
|
|
51
72
|
snackbarRef.instance.notifications$ = this.snackbarService.notifications$;
|
|
52
|
-
this.snackbarService.overlayRef = this.
|
|
53
|
-
|
|
54
|
-
.pipe(debounceTime(250), takeUntil(this.destroyed$))
|
|
55
|
-
.subscribe(() => this.overlayRef.updatePosition());
|
|
73
|
+
this.snackbarService.overlayRef = this._overlayRef;
|
|
74
|
+
this.observeSafeBottomOffset(positionStrategy);
|
|
56
75
|
}
|
|
57
|
-
|
|
58
|
-
this.
|
|
59
|
-
|
|
76
|
+
observeSafeBottomOffset(strategy) {
|
|
77
|
+
this.safeBottomOffset$
|
|
78
|
+
.pipe(startWith(0), distinctUntilChanged(), debounceTime(250), takeUntil(this._destroyed$))
|
|
79
|
+
.subscribe(safeBottomOffset => {
|
|
80
|
+
strategy.withPositions(this.bottomRightPositions(safeBottomOffset));
|
|
81
|
+
this._overlayRef.updatePosition();
|
|
82
|
+
});
|
|
60
83
|
}
|
|
61
|
-
|
|
62
|
-
|
|
84
|
+
bottomRightPositions(safeBottomOffset = 0) {
|
|
85
|
+
return [
|
|
86
|
+
{
|
|
87
|
+
originX: 'end',
|
|
88
|
+
originY: 'bottom',
|
|
89
|
+
overlayX: 'end',
|
|
90
|
+
overlayY: 'bottom',
|
|
91
|
+
offsetX: -MARGIN_PX,
|
|
92
|
+
offsetY: -(MARGIN_PX + safeBottomOffset)
|
|
93
|
+
}
|
|
94
|
+
];
|
|
95
|
+
}
|
|
96
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdNotificationsSnackbarListenerDirective, deps: [{ token: i1.QdSnackbarService }, { token: i0.ElementRef }, { token: i2.Overlay }, { token: i2.OverlayPositionBuilder }, { token: QD_SAFE_BOTTOM_OFFSET }], target: i0.ɵɵFactoryTarget.Directive });
|
|
97
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.9", type: QdNotificationsSnackbarListenerDirective, selector: "[qdSnackbarListener]", providers: [
|
|
98
|
+
{
|
|
99
|
+
provide: QD_SAFE_BOTTOM_OFFSET,
|
|
100
|
+
useFactory: () => new BehaviorSubject(0)
|
|
101
|
+
}
|
|
102
|
+
], ngImport: i0 });
|
|
63
103
|
}
|
|
64
104
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdNotificationsSnackbarListenerDirective, decorators: [{
|
|
65
105
|
type: Directive,
|
|
66
106
|
args: [{
|
|
67
|
-
selector: '[qdSnackbarListener]'
|
|
107
|
+
selector: '[qdSnackbarListener]',
|
|
108
|
+
providers: [
|
|
109
|
+
{
|
|
110
|
+
provide: QD_SAFE_BOTTOM_OFFSET,
|
|
111
|
+
useFactory: () => new BehaviorSubject(0)
|
|
112
|
+
}
|
|
113
|
+
]
|
|
68
114
|
}]
|
|
69
|
-
}], ctorParameters: () => [{ type: i1.QdSnackbarService }, { type: i0.ElementRef }, { type: i2.Overlay }, { type: i2.OverlayPositionBuilder }
|
|
70
|
-
|
|
115
|
+
}], ctorParameters: () => [{ type: i1.QdSnackbarService }, { type: i0.ElementRef }, { type: i2.Overlay }, { type: i2.OverlayPositionBuilder }, { type: i3.BehaviorSubject, decorators: [{
|
|
116
|
+
type: Inject,
|
|
117
|
+
args: [QD_SAFE_BOTTOM_OFFSET]
|
|
118
|
+
}] }] });
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hY2tiYXItbGlzdGVuZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xZC11aS9zcmMvbGliL25vdGlmaWNhdGlvbnMvZGlyZWN0aXZlcy9zbmFja2Jhci1saXN0ZW5lci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNqRixPQUFPLEVBR0wsT0FBTyxFQUNQLHNCQUFzQixFQUV2QixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7QUFFbEYsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBRXJCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBVUgsTUFBTSxPQUFPLHdDQUF3QztJQUt6QztJQUNBO0lBQ0E7SUFDQTtJQUMrQjtJQVJqQyxXQUFXLENBQXlCO0lBQ3BDLFdBQVcsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRTFDLFlBQ1UsZUFBa0MsRUFDbEMsT0FBZ0MsRUFDaEMsT0FBZ0IsRUFDaEIsc0JBQThDLEVBQ2YsaUJBQTBDO1FBSnpFLG9CQUFlLEdBQWYsZUFBZSxDQUFtQjtRQUNsQyxZQUFPLEdBQVAsT0FBTyxDQUF5QjtRQUNoQyxZQUFPLEdBQVAsT0FBTyxD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cUJBQ0Y7aUJBQ0Y7OzBCQVVJLE1BQU07MkJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb25uZWN0ZWRQb3NpdGlvbixcbiAgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LFxuICBPdmVybGF5LFxuICBPdmVybGF5UG9zaXRpb25CdWlsZGVyLFxuICBPdmVybGF5UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBzdGFydFdpdGgsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBRRF9TQUZFX0JPVFRPTV9PRkZTRVQgfSBmcm9tICcuLi8uLi9jb3JlL2NvcmUubW9kdWxlJztcbmltcG9ydCB7IFFkU25hY2tiYXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc25hY2tiYXIuc2VydmljZSc7XG5pbXBvcnQgeyBRZE5vdGlmaWNhdGlvbnNTbmFja2JhckNvbXBvbmVudCB9IGZyb20gJy4uL3NuYWNrYmFyL3NuYWNrYmFyLmNvbXBvbmVudCc7XG5cbmNvbnN0IE1BUkdJTl9QWCA9IDEwO1xuXG4vKipcbiAqIFNob3dzIG5vdGlmaWNhdGlvbnMgYXMgYSBzbmFja2Jhci5cbiAqXG4gKiAjIyMjICoqQmVoYXZpb3IqKlxuICogLSBBcHBlYXJzIGluIHRoZSBib3R0b20tcmlnaHQgY29ybmVyLlxuICogLSBBZGFwdHMgdG8gdGhlIFFMUyAoZS5nLiwgc3RheXMgYWJvdmUgYSBQYWdlRm9vdGVyKS5cbiAqIC0gQmVoYXZpb3IgaXMgY29uZmlndXJhYmxlIHZpYSBgc25hY2tiYXJPcHRpb25zYCAoZS5nLiwgbGlmZXRpbWUsIGNsb3NlIGJ1dHRvbiwgaGFuZGxlcnMpLlxuICpcbiAqICMjIyMgKipVc2FnZSoqXG4gKiBgYGBodG1sXG4gKiAgIDxxZC1zaGVsbCBbY29uZmlnXT1cInNoZWxsQ29uZmlnXCIgcWRTbmFja2Jhckxpc3RlbmVyPlxuICogYGBgXG4gKlxuICogIyMjIyAqKlNuYWNrYmFyIENvbmZpZ3VyYXRpb24qKlxuICogYGBgdHNcbiAqIHtcbiAqICAgc2hvd0FzU25hY2tiYXI6IHRydWUsXG4gKiAgIHNuYWNrYmFyT3B0aW9ucz86IHtcbiAqICAgICAuLi5cbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1txZFNuYWNrYmFyTGlzdGVuZXJdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogUURfU0FGRV9CT1RUT01fT0ZGU0VULFxuICAgICAgdXNlRmFjdG9yeTogKCk6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+ID0+IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBRZE5vdGlmaWNhdGlvbnNTbmFja2Jhckxpc3RlbmVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9vdmVybGF5UmVmOiBPdmVybGF5UmVmIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9kZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNuYWNrYmFyU2VydmljZTogUWRTbmFja2JhclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBob3N0UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgcHJpdmF0ZSBvdmVybGF5UG9zaXRpb25CdWlsZGVyOiBPdmVybGF5UG9zaXRpb25CdWlsZGVyLFxuICAgIEBJbmplY3QoUURfU0FGRV9CT1RUT01fT0ZGU0VUKSBwcml2YXRlIHNhZmVCb3R0b21PZmZzZXQkOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPlxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0T3ZlcmxheSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fb3ZlcmxheVJlZj8uZGlzcG9zZSgpO1xuICAgIHRoaXMuX2Rlc3Ryb3llZCQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdE92ZXJsYXkoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmhvc3RSZWYpIHJldHVybjtcblxuICAgIGNvbnN0IHBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLm92ZXJsYXlQb3NpdGlvbkJ1aWxkZXJcbiAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuaG9zdFJlZilcbiAgICAgIC53aXRoUG9zaXRpb25zKHRoaXMuYm90dG9tUmlnaHRQb3NpdGlvbnMoKSk7XG5cbiAgICB0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XG4gICAgICBwb3NpdGlvblN0cmF0ZWd5LFxuICAgICAgbWF4V2lkdGg6IDMwMCxcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKClcbiAgICB9KTtcblxuICAgIGNvbnN0IG5vdGlmaWNhdGlvblBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWwoUWROb3RpZmljYXRpb25zU25hY2tiYXJDb21wb25lbnQpO1xuICAgIGNvbnN0IHNuYWNrYmFyUmVmID0gdGhpcy5fb3ZlcmxheVJlZi5hdHRhY2gobm90aWZpY2F0aW9uUG9ydGFsKTtcbiAgICBzbmFja2JhclJlZi5pbnN0YW5jZS5ub3RpZmljYXRpb25zJCA9IHRoaXMuc25hY2tiYXJTZXJ2aWNlLm5vdGlmaWNhdGlvbnMkO1xuXG4gICAgdGhpcy5zbmFja2JhclNlcnZpY2Uub3ZlcmxheVJlZiA9IHRoaXMuX292ZXJsYXlSZWY7XG4gICAgdGhpcy5vYnNlcnZlU2FmZUJvdHRvbU9mZnNldChwb3NpdGlvblN0cmF0ZWd5KTtcbiAgfVxuXG4gIHByaXZhdGUgb2JzZXJ2ZVNhZmVCb3R0b21PZmZzZXQoc3RyYXRlZ3k6IEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSk6IHZvaWQge1xuICAgIHRoaXMuc2FmZUJvdHRvbU9mZnNldCRcbiAgICAgIC5waXBlKHN0YXJ0V2l0aCgwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgZGVib3VuY2VUaW1lKDI1MCksIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSlcbiAgICAgIC5zdWJzY3JpYmUoc2FmZUJvdHRvbU9mZnNldCA9PiB7XG4gICAgICAgIHN0cmF0ZWd5LndpdGhQb3NpdGlvbnModGhpcy5ib3R0b21SaWdodFBvc2l0aW9ucyhzYWZlQm90dG9tT2Zmc2V0KSk7XG4gICAgICAgIHRoaXMuX292ZXJsYXlSZWYhLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYm90dG9tUmlnaHRQb3NpdGlvbnMoc2FmZUJvdHRvbU9mZnNldCA9IDApOiBDb25uZWN0ZWRQb3NpdGlvbltdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBvcmlnaW5YOiAnZW5kJyxcbiAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICAgIG92ZXJsYXlYOiAnZW5kJyxcbiAgICAgICAgb3ZlcmxheVk6ICdib3R0b20nLFxuICAgICAgICBvZmZzZXRYOiAtTUFSR0lOX1BYLFxuICAgICAgICBvZmZzZXRZOiAtKE1BUkdJTl9QWCArIHNhZmVCb3R0b21PZmZzZXQpXG4gICAgICB9XG4gICAgXTtcbiAgfVxufVxuIl19
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { Component, ContentChild, ContentChildren, EventEmitter, HostBinding, Input, Output, QueryList } from '@angular/core';
|
|
2
|
-
import { Subject } from 'rxjs';
|
|
1
|
+
import { Component, ContentChild, ContentChildren, EventEmitter, HostBinding, Inject, Input, Optional, Output, QueryList } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, Subject } from 'rxjs';
|
|
3
3
|
import { takeUntil, tap } from 'rxjs/operators';
|
|
4
|
+
import { QD_SAFE_BOTTOM_OFFSET } from '../core/core.module';
|
|
4
5
|
import { QdDialogService, QdDialogSize } from '../dialog/dialog.module';
|
|
5
6
|
import { QdPageStepperAdapterDirective } from '../page-stepper/adaptors/page-stepper-adapter.directive';
|
|
6
7
|
import { QdPageStepperComponent } from '../page-stepper/page-stepper.component';
|
|
@@ -26,6 +27,9 @@ import * as i6 from "@angular/common";
|
|
|
26
27
|
import * as i7 from "../core/projection-guard/projection-guard.component";
|
|
27
28
|
import * as i8 from "./footer/page-footer.component";
|
|
28
29
|
import * as i9 from "./object-header/page-object-header.component";
|
|
30
|
+
import * as i10 from "rxjs";
|
|
31
|
+
// Footer offset (px). Keep in sync with SCSS $page-footer-height!
|
|
32
|
+
const SAFE_BOTTOM_OFFSET_PX = 64;
|
|
29
33
|
/**
|
|
30
34
|
* **QdPage** serves as the central structural element within the hierarchy under the **QdShell**.
|
|
31
35
|
* Integration is done through the Angular Routing Module, and QdPage is designed to be responsive across various screen sizes right out of the box.
|
|
@@ -410,6 +414,7 @@ export class QdPageComponent {
|
|
|
410
414
|
formGroupManagerService;
|
|
411
415
|
submitActionService;
|
|
412
416
|
dialog;
|
|
417
|
+
bottomOffset$;
|
|
413
418
|
/**
|
|
414
419
|
* This property defines the configuration for the QdPage component, including the page type,
|
|
415
420
|
* title, and specific configurations for each type of page.
|
|
@@ -451,14 +456,18 @@ export class QdPageComponent {
|
|
|
451
456
|
get hasInfoBanners() {
|
|
452
457
|
return this.infoBanners.length > 0;
|
|
453
458
|
}
|
|
454
|
-
constructor(pageStoreService, footerService, formGroupManagerService, submitActionService, dialog) {
|
|
459
|
+
constructor(pageStoreService, footerService, formGroupManagerService, submitActionService, dialog, bottomOffset$) {
|
|
455
460
|
this.pageStoreService = pageStoreService;
|
|
456
461
|
this.footerService = footerService;
|
|
457
462
|
this.formGroupManagerService = formGroupManagerService;
|
|
458
463
|
this.submitActionService = submitActionService;
|
|
459
464
|
this.dialog = dialog;
|
|
465
|
+
this.bottomOffset$ = bottomOffset$;
|
|
460
466
|
this.footerHasContent$ = this.footerService.footerHasContent$;
|
|
461
|
-
this.footerHasContent$.pipe(takeUntil(this._destroyed$)).subscribe(isVisible =>
|
|
467
|
+
this.footerHasContent$.pipe(takeUntil(this._destroyed$)).subscribe(isVisible => {
|
|
468
|
+
this.isFooterVisible = isVisible;
|
|
469
|
+
this.bottomOffset$?.next(isVisible ? SAFE_BOTTOM_OFFSET_PX : 0);
|
|
470
|
+
});
|
|
462
471
|
}
|
|
463
472
|
ngOnInit() {
|
|
464
473
|
this.checkConfigValidity();
|
|
@@ -489,6 +498,7 @@ export class QdPageComponent {
|
|
|
489
498
|
this._isInitialized = true;
|
|
490
499
|
}
|
|
491
500
|
ngOnDestroy() {
|
|
501
|
+
this.bottomOffset$?.next(0);
|
|
492
502
|
this._destroyed$.next();
|
|
493
503
|
this._destroyed$.complete();
|
|
494
504
|
}
|
|
@@ -589,13 +599,18 @@ export class QdPageComponent {
|
|
|
589
599
|
}))
|
|
590
600
|
.subscribe();
|
|
591
601
|
}
|
|
592
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdPageComponent, deps: [{ token: i1.QdPageStoreService }, { token: i2.QdPageFooterService }, { token: i3.QdFormGroupManagerService }, { token: i4.QdPageSubmitActionService }, { token: i5.QdDialogService }], target: i0.ɵɵFactoryTarget.Component });
|
|
602
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdPageComponent, deps: [{ token: i1.QdPageStoreService }, { token: i2.QdPageFooterService }, { token: i3.QdFormGroupManagerService }, { token: i4.QdPageSubmitActionService }, { token: i5.QdDialogService }, { token: QD_SAFE_BOTTOM_OFFSET, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
593
603
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: QdPageComponent, selector: "qd-page", inputs: { config: "config", testId: ["data-test-id", "testId"] }, outputs: { operationModeChanged: "operationModeChanged" }, host: { properties: { "class.has-control-panel": "isControlPanelVisible", "class.control-panel-broad": "isControlPanelBroad", "class.has-footer": "this.footerVisible", "class.has-info-banners": "this.hasInfoBanners" } }, providers: [QdPageFooterService, QdFormGroupManagerService, QdPageSubmitActionService, QdResolverTriggerService], queries: [{ propertyName: "controlPanel", first: true, predicate: QdPageControlPanelComponent, descendants: true }, { propertyName: "stepperComponent", first: true, predicate: QdPageStepperComponent, descendants: true }, { propertyName: "tabsComponent", first: true, predicate: QdPageTabsComponent, descendants: true }, { propertyName: "stepperAdapterDirective", first: true, predicate: QdPageStepperAdapterDirective, descendants: true }, { propertyName: "tabsAdapterDirective", first: true, predicate: QdPageTabsAdapterDirective, descendants: true }, { propertyName: "sections", predicate: QdSectionComponent }, { propertyName: "infoBanners", predicate: QdPageInfoBannerComponent }], usesOnChanges: true, ngImport: i0, template: "<main qdSnackbarListener>\n <qd-page-object-header\n [data-test-id]=\"testId\"\n [attr.data-test-id]=\"testId + 'object-header'\"\n [config]=\"config\"\n [hasNavigation]=\"hasNavigation\"\n ></qd-page-object-header>\n\n <div class=\"page-info-banners\">\n <ng-content select=\"qd-page-info-banner\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"config.pageType === 'create' || config.pageType === 'custom'\">\n <ng-content select=\"qd-page-stepper\"></ng-content>\n <ng-content select=\"[qdPageStepperAdapter]\"></ng-content>\n </ng-container>\n\n <ng-container *ngIf=\"config.pageType === 'overview' || config.pageType === 'inspect' || config.pageType === 'custom'\">\n <ng-content select=\"qd-page-tabs\"></ng-content>\n <ng-content select=\"[qdPageTabsAdapter]\"></ng-content>\n <ng-content select=\"qd-section\"></ng-content>\n <ng-content select=\"[qdSectionAdapter]\"></ng-content>\n </ng-container>\n\n <ng-container *ngIf=\"config.pageType === 'custom'\">\n <ng-container *ngTemplateOutlet=\"projectedContent\"></ng-container>\n </ng-container>\n</main>\n\n<footer *ngIf=\"footerHasContent$ | async\">\n <qd-page-footer [attr.data-test-id]=\"testId + '-footer'\">\n <ng-content select=\"[qdPageFooter]\"></ng-content>\n </qd-page-footer>\n</footer>\n\n<aside *ngIf=\"isControlPanelVisible\">\n <ng-content select=\"qd-page-control-panel\"></ng-content>\n</aside>\n\n<qd-projection-guard *ngIf=\"config.pageType !== 'custom'\" [warningMessage]=\"projectionGuardMessage\">\n <ng-container *ngTemplateOutlet=\"projectedContent\"></ng-container>\n</qd-projection-guard>\n\n<ng-template #projectedContent>\n <ng-content></ng-content>\n</ng-template>\n", styles: [":host{position:absolute;display:grid;overflow:hidden;width:100%;height:100%;background:#efefef;grid-template-areas:\"main\";grid-template-columns:1fr;grid-template-rows:1fr}:host.has-control-panel{grid-template-areas:\"main aside\";grid-template-columns:1fr 18.75rem}:host.control-panel-broad{grid-template-columns:1fr 27rem}:host.has-info-banners .page-info-banners{padding:1rem 1.25rem .5rem;border-bottom:rgb(213,213,213) solid .0625rem;background-color:#fff}@media (max-width: 599.98px){:host.has-info-banners .page-info-banners{padding-right:.9375rem;padding-left:.9375rem}}:host.has-info-banners qd-page-info-banner:last-child{margin-bottom:0}:host.has-footer{grid-template-areas:\"main\" \"footer\";grid-template-rows:calc(100% - 4rem) 4rem}:host.has-control-panel.has-footer{grid-template-areas:\"main aside\" \"footer aside\"}:host main{position:relative;grid-area:main;overflow-y:auto}:host aside{border-left:rgb(213,213,213) solid .0625rem;background:#fff;grid-area:aside}:host footer{grid-area:footer}:host ::ng-deep .qd-page-info-banner-info+.qd-page-info-banner-info,:host ::ng-deep .qd-page-info-banner-warning+.qd-page-info-banner-warning,:host ::ng-deep .qd-page-info-banner-critical+.qd-page-info-banner-critical,:host ::ng-deep .qd-page-info-banner-success+.qd-page-info-banner-success{position:relative;top:-.5rem;padding-top:0rem;padding-bottom:0rem;border-top-width:0;margin-bottom:0rem}:host ::ng-deep .qd-page-info-banner-info+.qd-page-info-banner-info .icon,:host ::ng-deep .qd-page-info-banner-warning+.qd-page-info-banner-warning .icon,:host ::ng-deep .qd-page-info-banner-critical+.qd-page-info-banner-critical .icon,:host ::ng-deep .qd-page-info-banner-success+.qd-page-info-banner-success .icon{display:none}:host ::ng-deep .qd-page-info-banner-info+.qd-page-info-banner-info .title,:host ::ng-deep .qd-page-info-banner-info+.qd-page-info-banner-info .message,:host ::ng-deep .qd-page-info-banner-warning+.qd-page-info-banner-warning .title,:host ::ng-deep .qd-page-info-banner-warning+.qd-page-info-banner-warning .message,:host ::ng-deep .qd-page-info-banner-critical+.qd-page-info-banner-critical .title,:host ::ng-deep .qd-page-info-banner-critical+.qd-page-info-banner-critical .message,:host ::ng-deep .qd-page-info-banner-success+.qd-page-info-banner-success .title,:host ::ng-deep .qd-page-info-banner-success+.qd-page-info-banner-success .message{position:relative;top:-.625rem}:host ::ng-deep .qd-page-info-banner-info+.qd-page-info-banner-info:before,:host ::ng-deep .qd-page-info-banner-warning+.qd-page-info-banner-warning:before,:host ::ng-deep .qd-page-info-banner-critical+.qd-page-info-banner-critical:before,:host ::ng-deep .qd-page-info-banner-success+.qd-page-info-banner-success:before{position:relative;top:-.625rem;left:-2.75rem;display:block;width:calc(100% + 4.75rem);height:.625rem;background-color:#fff;content:\"\"}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i7.QdProjectionGuardComponent, selector: "qd-projection-guard", inputs: ["isDisabled", "warningMessage"] }, { kind: "component", type: i8.QdPageFooterComponent, selector: "qd-page-footer" }, { kind: "component", type: i9.QdPageObjectHeaderComponent, selector: "qd-page-object-header", inputs: ["config", "hasNavigation", "data-test-id"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }] });
|
|
594
604
|
}
|
|
595
605
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: QdPageComponent, decorators: [{
|
|
596
606
|
type: Component,
|
|
597
607
|
args: [{ selector: 'qd-page', providers: [QdPageFooterService, QdFormGroupManagerService, QdPageSubmitActionService, QdResolverTriggerService], host: { '[class.has-control-panel]': 'isControlPanelVisible', '[class.control-panel-broad]': 'isControlPanelBroad' }, template: "<main qdSnackbarListener>\n <qd-page-object-header\n [data-test-id]=\"testId\"\n [attr.data-test-id]=\"testId + 'object-header'\"\n [config]=\"config\"\n [hasNavigation]=\"hasNavigation\"\n ></qd-page-object-header>\n\n <div class=\"page-info-banners\">\n <ng-content select=\"qd-page-info-banner\"></ng-content>\n </div>\n\n <ng-container *ngIf=\"config.pageType === 'create' || config.pageType === 'custom'\">\n <ng-content select=\"qd-page-stepper\"></ng-content>\n <ng-content select=\"[qdPageStepperAdapter]\"></ng-content>\n </ng-container>\n\n <ng-container *ngIf=\"config.pageType === 'overview' || config.pageType === 'inspect' || config.pageType === 'custom'\">\n <ng-content select=\"qd-page-tabs\"></ng-content>\n <ng-content select=\"[qdPageTabsAdapter]\"></ng-content>\n <ng-content select=\"qd-section\"></ng-content>\n <ng-content select=\"[qdSectionAdapter]\"></ng-content>\n </ng-container>\n\n <ng-container *ngIf=\"config.pageType === 'custom'\">\n <ng-container *ngTemplateOutlet=\"projectedContent\"></ng-container>\n </ng-container>\n</main>\n\n<footer *ngIf=\"footerHasContent$ | async\">\n <qd-page-footer [attr.data-test-id]=\"testId + '-footer'\">\n <ng-content select=\"[qdPageFooter]\"></ng-content>\n </qd-page-footer>\n</footer>\n\n<aside *ngIf=\"isControlPanelVisible\">\n <ng-content select=\"qd-page-control-panel\"></ng-content>\n</aside>\n\n<qd-projection-guard *ngIf=\"config.pageType !== 'custom'\" [warningMessage]=\"projectionGuardMessage\">\n <ng-container *ngTemplateOutlet=\"projectedContent\"></ng-container>\n</qd-projection-guard>\n\n<ng-template #projectedContent>\n <ng-content></ng-content>\n</ng-template>\n", styles: [":host{position:absolute;display:grid;overflow:hidden;width:100%;height:100%;background:#efefef;grid-template-areas:\"main\";grid-template-columns:1fr;grid-template-rows:1fr}:host.has-control-panel{grid-template-areas:\"main aside\";grid-template-columns:1fr 18.75rem}:host.control-panel-broad{grid-template-columns:1fr 27rem}:host.has-info-banners .page-info-banners{padding:1rem 1.25rem .5rem;border-bottom:rgb(213,213,213) solid .0625rem;background-color:#fff}@media (max-width: 599.98px){:host.has-info-banners .page-info-banners{padding-right:.9375rem;padding-left:.9375rem}}:host.has-info-banners qd-page-info-banner:last-child{margin-bottom:0}:host.has-footer{grid-template-areas:\"main\" \"footer\";grid-template-rows:calc(100% - 4rem) 4rem}:host.has-control-panel.has-footer{grid-template-areas:\"main aside\" \"footer aside\"}:host main{position:relative;grid-area:main;overflow-y:auto}:host aside{border-left:rgb(213,213,213) solid .0625rem;background:#fff;grid-area:aside}:host footer{grid-area:footer}:host ::ng-deep .qd-page-info-banner-info+.qd-page-info-banner-info,:host ::ng-deep .qd-page-info-banner-warning+.qd-page-info-banner-warning,:host ::ng-deep .qd-page-info-banner-critical+.qd-page-info-banner-critical,:host ::ng-deep .qd-page-info-banner-success+.qd-page-info-banner-success{position:relative;top:-.5rem;padding-top:0rem;padding-bottom:0rem;border-top-width:0;margin-bottom:0rem}:host ::ng-deep .qd-page-info-banner-info+.qd-page-info-banner-info .icon,:host ::ng-deep .qd-page-info-banner-warning+.qd-page-info-banner-warning .icon,:host ::ng-deep .qd-page-info-banner-critical+.qd-page-info-banner-critical .icon,:host ::ng-deep .qd-page-info-banner-success+.qd-page-info-banner-success .icon{display:none}:host ::ng-deep .qd-page-info-banner-info+.qd-page-info-banner-info .title,:host ::ng-deep .qd-page-info-banner-info+.qd-page-info-banner-info .message,:host ::ng-deep .qd-page-info-banner-warning+.qd-page-info-banner-warning .title,:host ::ng-deep .qd-page-info-banner-warning+.qd-page-info-banner-warning .message,:host ::ng-deep .qd-page-info-banner-critical+.qd-page-info-banner-critical .title,:host ::ng-deep .qd-page-info-banner-critical+.qd-page-info-banner-critical .message,:host ::ng-deep .qd-page-info-banner-success+.qd-page-info-banner-success .title,:host ::ng-deep .qd-page-info-banner-success+.qd-page-info-banner-success .message{position:relative;top:-.625rem}:host ::ng-deep .qd-page-info-banner-info+.qd-page-info-banner-info:before,:host ::ng-deep .qd-page-info-banner-warning+.qd-page-info-banner-warning:before,:host ::ng-deep .qd-page-info-banner-critical+.qd-page-info-banner-critical:before,:host ::ng-deep .qd-page-info-banner-success+.qd-page-info-banner-success:before{position:relative;top:-.625rem;left:-2.75rem;display:block;width:calc(100% + 4.75rem);height:.625rem;background-color:#fff;content:\"\"}\n"] }]
|
|
598
|
-
}], ctorParameters: () => [{ type: i1.QdPageStoreService }, { type: i2.QdPageFooterService }, { type: i3.QdFormGroupManagerService }, { type: i4.QdPageSubmitActionService }, { type: i5.QdDialogService }
|
|
608
|
+
}], ctorParameters: () => [{ type: i1.QdPageStoreService }, { type: i2.QdPageFooterService }, { type: i3.QdFormGroupManagerService }, { type: i4.QdPageSubmitActionService }, { type: i5.QdDialogService }, { type: i10.BehaviorSubject, decorators: [{
|
|
609
|
+
type: Optional
|
|
610
|
+
}, {
|
|
611
|
+
type: Inject,
|
|
612
|
+
args: [QD_SAFE_BOTTOM_OFFSET]
|
|
613
|
+
}] }], propDecorators: { config: [{
|
|
599
614
|
type: Input,
|
|
600
615
|
args: [{ required: true }]
|
|
601
616
|
}], testId: [{
|
|
@@ -631,4 +646,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
631
646
|
type: HostBinding,
|
|
632
647
|
args: ['class.has-info-banners']
|
|
633
648
|
}] } });
|
|
634
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3FkLXVpL3NyYy9saWIvcGFnZS9wYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9wYWdlL3BhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUlMLE1BQU0sRUFDTixTQUFTLEVBRVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDeEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDaEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDL0YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sd0VBQXdFLENBQUM7QUFDakksT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDM0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFPckYsT0FBTyxFQUEyQixrQkFBa0IsRUFBc0IsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2SCxPQUFPLEVBQUUseUJBQXlCLEVB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RDZYYSxlQUFlO2tCQVAzQixTQUFTOytCQUNFLFNBQVMsYUFHUixDQUFDLG1CQUFtQixFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixDQUFDLFFBQzFHLEVBQUUsMkJBQTJCLEVBQUUsdUJBQXVCLEVBQUUsNkJBQTZCLEVBQUUscUJBQXFCLEVBQUU7dU9BUXBILE1BQU07c0JBREwsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT0YsTUFBTTtzQkFBNUIsS0FBSzt1QkFBQyxjQUFjO2dCQU1yQixvQkFBb0I7c0JBRG5CLE1BQU07Z0JBSVAsUUFBUTtzQkFEUCxlQUFlO3VCQUFDLGtCQUFrQjtnQkFJbkMsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLDJCQUEyQjtnQkFJekMsZ0JBQWdCO3NCQURmLFlBQVk7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUkzRCxhQUFhO3NCQURaLFlBQVk7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUl4RCx1QkFBdUI7c0JBRHRCLFlBQVk7dUJBQUMsNkJBQTZCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUlsRSxvQkFBb0I7c0JBRG5CLFlBQVk7dUJBQUMsMEJBQTBCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUkvRCxXQUFXO3NCQURWLGVBQWU7dUJBQUMseUJBQXlCO2dCQXdCdEMsYUFBYTtzQkFEaEIsV0FBVzt1QkFBQyxrQkFBa0I7Z0JBTTNCLGNBQWM7c0JBRGpCLFdBQVc7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFFkRGlhbG9nU2VydmljZSwgUWREaWFsb2dTaXplIH0gZnJvbSAnLi4vZGlhbG9nL2RpYWxvZy5tb2R1bGUnO1xuaW1wb3J0IHsgUWRQYWdlU3RlcHBlckFkYXB0ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9wYWdlLXN0ZXBwZXIvYWRhcHRvcnMvcGFnZS1zdGVwcGVyLWFkYXB0ZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IFFkUGFnZVN0ZXBwZXJDb21wb25lbnQgfSBmcm9tICcuLi9wYWdlLXN0ZXBwZXIvcGFnZS1zdGVwcGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRZFBhZ2VUYWJzQWRhcHRlckRpcmVjdGl2ZSB9IGZyb20gJy4uL3BhZ2UtdGFicy9hZGFwdG9ycy9wYWdlLXRhYnMtYWRhcHRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUWRQYWdlVGFic0NvbXBvbmVudCB9IGZyb20gJy4uL3BhZ2UtdGFicy9wYWdlLXRhYnMuY29tcG9uZW50JztcbmltcG9ydCB7IFFkU2VjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL3NlY3Rpb24vc2VjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgUWRQYWdlQ2FuY2VsQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9jYW5jZWwtY29uZmlybWF0aW9uLWRpYWxvZy9wYWdlLWNhbmNlbC1jb25maXJtYXRpb24tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRZFBhZ2VDb250cm9sUGFuZWxDb21wb25lbnQgfSBmcm9tICcuL2NvbnRyb2wtcGFuZWwvcGFnZS1jb250cm9sLXBhbmVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRZFBhZ2VJbmZvQmFubmVyQ29tcG9uZW50IH0gZnJvbSAnLi9pbmZvLWJhbm5lci9wYWdlLWluZm8tYmFubmVyLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBRZEluc3BlY3RPcGVyYXRpb25Nb2RlLFxuICBRZFBhZ2VDb25maWcsXG4gIFFkUGFnZVR5cGVDcmVhdGVDb25maWcsXG4gIFFkUGFnZVR5cGVJbnNwZWN0Q29uZmlnXG59IGZyb20gJy4vbW9kZWwvcGFnZS1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IFFkQ3JlYXRlRm9vdGVyQWN0aW9uS2V5LCBRZEZvb3RlckFjdGlvblR5cGUsIFFkUGFnZUZvb3RlckFjdGlvbiB9IGZyb20gJy4vbW9kZWwvcGFnZS1mb290ZXItYWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBRZEZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi9zaGFyZWQvc2VydmljZXMvZm9ybS1ncm91cC1tYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUWRQYWdlRm9vdGVyU2VydmljZSB9IGZyb20gJy4vc2hhcmVkL3NlcnZpY2VzL3BhZ2UtZm9vdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUWRQYWdlU3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi9zaGFyZWQvc2VydmljZXMvcGFnZS1zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IFFkUGFnZVN1Ym1pdEFjdGlvblNlcnZpY2UgfSBmcm9tICcuL3NoYXJlZC9zZXJ2aWNlcy9wYWdlLXN1Ym1pdC1hY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBRZFJlc29sdmVyVHJpZ2dlclNlcnZpY2UgfSBmcm9tICcuL3NoYXJlZC9zZXJ2aWNlcy9yZXNvbHZlci10cmlnZ2VyLnNlcnZpY2UnO1xuXG50eXBlIFBhcnRpYWxGb290ZXJBY3Rpb24gPSB7IGFjdGlvbktleTogUWRDcmVhdGVGb290ZXJBY3Rpb25LZXk7IHBhcnRpYWxBY3Rpb246IFBhcnRpYWw8UWRQYWdlRm9vdGVyQWN0aW9uPiB9O1xuXG4vKipcbiAqICoqUWRQYWdlKiogc2VydmVzIGFzIHRoZSBjZW50cmFsIHN0cnVjdHVyYWwgZWxlbWVudCB3aXRoaW4gdGhlIGhpZXJhcmNoeSB1bmRlciB0aGUgKipRZFNoZWxsKiouXG4gKiBJbnRlZ3JhdGlvbiBpcyBkb25lIHRocm91Z2ggdGhlIEFuZ3VsYXIgUm91dGluZyBNb2R1bGUsIGFuZCBRZFBhZ2UgaXMgZGVzaWduZWQgdG8gYmUgcmVzcG9uc2l2ZSBhY3Jvc3MgdmFyaW91cyBzY3JlZW4gc2l6ZXMgcmlnaHQgb3V0IG9mIHRoZSBib3guXG4gKlxuICogIyMjIyAqKlBhZ2UgVHlwZXMqKlxuICpcbiAqIFFkUGFnZSB1c2VzIHBhZ2UgdHlwZXMgdG8gZGVjaWRlIGhvdyB0aGUgcGFnZSBsb29rcyBhbmQgd29ya3MuIEVhY2ggcGFnZSB0eXBlIGhhcyBpdHMgb3duIHNldHRpbmdzIGFuZCBhY3Rpb25zLlxuICpcbiAqIC0gKipvdmVydmlldyoqOiBEaXNwbGF5cyBhIHN1bW1hcnkgb3IgYSBsaXN0IG9mIG9iamVjdHMsIHByb3ZpZGluZyBhbiBvdmVydmlldyBvZiBtdWx0aXBsZSBidXNpbmVzcyBjYXNlcy5cbiAqIC0gKipjcmVhdGUqKjogQWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBhIG5ldyBvYmplY3QsIHJlcHJlc2VudGluZyBhIGJ1c2luZXNzIGNhc2UuXG4gKiAtICoqaW5zcGVjdCoqOiBFbmFibGVzIHZpZXdpbmcsIGVkaXRpbmcsIGFuZCBleGVjdXRpbmcgYWRkaXRpb25hbCBhY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIG9iamVjdCwgd2hpY2ggYWxzbyByZXByZXNlbnRzIGEgYnVzaW5lc3MgY2FzZS5cbiAqIC0gKipjdXN0b20qKjogUHJvdmlkZXMgYSB3YXkgdG8gaW1wbGVtZW50IHVuaXF1ZSBmdW5jdGlvbmFsaXR5IHRoYXQgZG9lc27igJl0IGZpdCB0aGUgb3RoZXIgcHJlZGVmaW5lZCBwYWdlIHR5cGVzLlxuICpcbiAqICoqTm90ZSB0aGF0IHRoZSAnY3VzdG9tJyBwYWdlIHR5cGUgc2hvdWxkIGJlIHVzZWQgb25seSBhcyBhIGZhbGxiYWNrIGZvciB2ZXJ5IHNwZWNpZmljIGNhc2VzLiBJZiB5b3UgZW5jb3VudGVyIHN1Y2ggYSBzaXR1YXRpb24sIHBsZWFzZSBjb250YWN0IHRoZSBRdWFkcmVsIHRlYW0uKipcbiAqXG4gKiAjIyMjICoqRmFjZXRzKipcbiAqXG4gKiBUaGVzZSBhcmUgZXh0cmEgcGllY2VzIG9mIGluZm9ybWF0aW9uIHNob3duIGluIHRoZSBwYWdlIGhlYWRlci4gVGhleSBnaXZlIGNvbnRleHQgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgb2JqZWN0IG1vZGVsIGJlaW5nIHZpZXdlZCBvciBlZGl0ZWQuIFRoZXJlIGFyZSBzZXZlcmFsIHR5cGVzIG9mIGZhY2V0cywgaW5jbHVkaW5nIGBzdGF0dXNgLCBgdmFsdWVgLCBgY3JpdGljYWxpdHlgLCBgcmVmZXJlbmNlc2AsIGBwcm9ncmVzc2AsIGBkYXRlYCwgYHNpbmdsZVNlbGVjdGAsIGFuZCBgbXVsdGlTZWxlY3RgLiBFYWNoIHR5cGUgaGFzIGl0cyBvd24gb3B0aW9ucy4gRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZSBgUWRQYWdlSGVhZGVyRmFjZXRgIGludGVyZmFjZS5cbiAqXG4gKiAjIyMjICoqQ29udGV4dCoqXG4gKlxuICogVGhlIGBjb250ZXh0YCBhY3RzIGFzIGEgZmlsdGVyIHRoYXQgY2FuIGJlIHNlbGVjdGVkIG9uIHRoZSBvdmVydmlldyBwYWdlIGFuZCBwcm92aWRlcyB0aGUgYnVzaW5lc3MgY29udGV4dCwgd2hpY2ggcmVtYWlucyBjb25zaXN0ZW50IHRocm91Z2hvdXQgdGhlIGVudGlyZSBhcHBsaWNhdGlvbi4gT24gY3JlYXRlIGFuZCBpbnNwZWN0IHBhZ2VzLCB0aGUgY29udGV4dCBpcyBkaXNwbGF5ZWQgYXMgcmVhZC1vbmx5LiBGb3IgbW9yZSBkZXRhaWxzLCBjaGVjayB0aGUgZGVkaWNhdGVkIGNoYXB0ZXIgaW4gU3Rvcnlib29rLlxuICpcbiAqXG4gKiAjIyMjICoqUGFnZSBJbmZvIEJhbm5lcnMqKlxuICpcbiAqIFRvIGluc2VydCBhIHBhZ2UgaW5mbyBiYW5uZXIgdW5kZXIgdGhlIHBhZ2UgaGVhZGVyLCBqdXN0IHB1dCBhIGBxZC1wYWdlLWluZm8tYmFubmVyYCBjb21wb25lbnQgaW5zaWRlIHRoZSBgcWQtcGFnZWAuIE11bHRpcGxlIGNvbnNlY3V0aXZlIGluZm8gYmFubmVycyBvZiB0aGUgc2FtZSB0eXBlIHdpbGwgYmUgbWVyZ2VkIGludG8gb25lIGJhbm5lciBjb250YWluZXIuIFBhZ2UgaW5mbyBiYW5uZXJzIGhhdmUgdGhlIHNhbWUgYXBwZWFyYW5jZSBsaWtlIG5vdGlmaWNhdGlvbnMuXG4gKlxuICogIyMjIyAqKkNvbnRyb2wgUGFuZWwqKlxuICpcbiAqIFRoZSBjb250cm9sIHBhbmVsIGlzIGxvY2F0ZWQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIHBhZ2UgYW5kIGlzIHVzZWQgdG8gZGlzcGxheSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFuZCBmdW5jdGlvbnMgcmVsZXZhbnQgdG8gYSBzcGVjaWZpYyBidXNpbmVzcyBjYXNlLCB3aGljaCBpcyBsaW5rZWQgdG8gYSBzcGVjaWZpYyBvYmplY3QgbW9kZWwuIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLCBwbGVhc2UgY29uc3VsdCB0aGUgZGVkaWNhdGVkIGNoYXB0ZXIgaW4gU3Rvcnlib29rLlxuICpcbiAqICMjIyMgKipBY3Rpb25zKipcbiAqXG4gKiBUaGVzZSBhcmUgaW50ZXJhY3RpdmUgZWxlbWVudHMgdGhhdCBwZXJmb3JtIHNwZWNpZmljIGZ1bmN0aW9ucy4gRnVuY3Rpb25zIGZvciB0aGVzZSBhY3Rpb25zIGNhbiBiZSBzZXQgdXAgdGhyb3VnaCBjb25maWd1cmF0aW9ucy4gQ3VzdG9tIGFjdGlvbnMgY2FuIGJlIGFkZGVkIHRvIGFueSBwYWdlIHR5cGUuIEFkZGl0aW9uYWxseSwgYWxsIGFjdGlvbnMgY2FuIGJlIGNvbmZpZ3VyZWQgYW5kIGN1c3RvbWl6ZWQgd2l0aCB5b3VyIG93biB0ZXh0LCB3aGljaCB3aWxsIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHRleHRzLlxuICpcbiAqIFBsZWFzZSBjaGVjayB0aGUgcmVsZXZhbnQgaW50ZXJmYWNlcyBmb3IgZWFjaCBwYWdlIHR5cGU6IGBRZFBhZ2VDb25maWdPdmVydmlld2AsIGBRZFBhZ2VDb25maWdDcmVhdGVgLCBgUWRQYWdlQ29uZmlnSW5zcGVjdGAsIGFuZCBgUWRQYWdlQ29uZmlnQ3VzdG9tYC5cbiAqXG4gKiAjIyMjICoqVmFsaWRhdGlvbi9QYXJhbWV0ZXJpemF0aW9uKipcbiAqXG4gKiBWYWxpZGF0aW9uIGFuZCBwYXJhbWV0ZXJpemF0aW9uIGFyZSBjb3ZlcmVkIGluIGEgZGVkaWNhdGVkIGNoYXB0ZXIgaW4gdGhlIFN0b3J5Ym9vay4gUGxlYXNlIGNoZWNrIHRoZSBcIlZhbGlkYXRpb25cIiBzZWN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqICMjIyMgKipSZXNvbHZlcioqXG4gKlxuICogVXNpbmcgYSByZXNvbHZlciB0byBmZXRjaCBwYWdlIG9iamVjdCBkYXRhIGlzIGVzc2VudGlhbCB0byB0aGUgcGFnZSBjb25jZXB0LiBBZGQgdGhlIHJlc29sdmVyIHRvIHRoZSBjb21wb25lbnQncyBwcm92aWRlcnMgYW5kIHVzZSB0aGUgYFFEX1BBR0VfT0JKRUNUX1JFU09MVkVSX1RPS0VOYCB0b2tlbi4gVGhpcyBhcHByb2FjaCBlbmFibGVzIHR5cGUgc2FmZXR5IGFuZCB1c2VyIGZlZWRiYWNrIGJ5IGVmZmVjdGl2ZWx5IG1hbmFnaW5nIHRoZSBuZWNlc3NhcnkgZGF0YSBmb3IgdGhlIHBhZ2UuXG4gKlxuICogYGBgdHNcbiAqIGludGVyZmFjZSBNeU9iamVjdE1vZGVsIHtcbiAqICAgLy8gTWV0YWRhdGEgZGlzcGxheWVkIGluIHRoZSBPYmplY3RIZWFkZXJcbiAqICAgc3RhdGU6IE15U3RhdGU7XG4gKiAgIGNvdW50cnlPZkRlc3RpbmF0aW9uOiBNeUNvdW50cnlPZkRlc3RpbmF0aW9uO1xuICogICAvLyBBcHBlYXJzIG5vdCBpbiB0aGUgT2JqZWN0SGVhZGVyXG4gKiAgIHBheWxvYWQ6IE15UGF5bG9hZDtcbiAqIH1cbiAqXG4gKiB0eXBlIE15T2JqZWN0TWV0YWRhdGEgPSAnc3RhdGUnIHwgJ2NvdW50cnlPZkRlc3RpbmF0aW9uJztcbiAqXG4gKiBASW5qZWN0YWJsZSgpXG4gKiBjbGFzcyBNeU9iamVjdE1vZGVsUmVzb2x2ZXIgaW1wbGVtZW50cyBRZFBhZ2VPYmplY3RSZXNvbHZlcjxNeU9iamVjdE1vZGVsPiB7XG4gKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cbiAqXG4gKiAgIHJlc29sdmUoKTogT2JzZXJ2YWJsZTxNeU9iamVjdE1vZGVsPiB7XG4gKiAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICogICAgICAgLmdldDxNeU9iamVjdE1vZGVsPignbXktYXBpJylcbiAqICAgICAgIC5waXBlKHRhcCgoZGF0YTogTXlPYmplY3RNb2RlbCkgPT4gZG9Tb21ldGhpbmdXaXRoKGRhdGEpKSk7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBAQ29tcG9uZW50KHtcbiAqICAgc2VsZWN0b3I6ICdteS1wYWdlJyxcbiAqICAgdGVtcGxhdGVVcmw6ICcuL215LXBhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICogICBwcm92aWRlcnM6IFtcbiAqICAgICB7XG4gKiAgICAgICBwcm92aWRlOiBRRF9QQUdFX09CSkVDVF9SRVNPTFZFUl9UT0tFTixcbiAqICAgICAgIHVzZUNsYXNzOiBNeU9iamVjdE1vZGVsUmVzb2x2ZXJcbiAqICAgICB9XG4gKiAgIF1cbiAqIH0pXG4gKiBjbGFzcyBNeVBhZ2VDb21wb25lbnQge1xuICogICBwYWdlQ29uZmlnOiBRZFBhZ2VDb25maWc8UGljazxNeU9iamVjdE1vZGVsLCBNeU9iamVjdE1ldGFkYXRhPj4gPSB7XG4gKiAgICAgdGl0bGU6IHsgaTE4bjogJ2kxOG4ucGFnZS50aXRsZScgfSxcbiAqICAgICBwYWdlVHlwZTogJ2luc3BlY3QnLFxuICogICAgIGhlYWRlckZhY2V0czogW1xuICogICAgICAge1xuICogICAgICAgICBuYW1lOiAnc3RhdHVzJyxcbiAqICAgICAgICAgbGFiZWw6IHtcbiAqICAgICAgICAgICBpMThuOiAnaTE4bi5zdGF0dXMubGFiZWwnXG4gKiAgICAgICAgIH0sXG4gKiAgICAgICAgIG9wdGlvbnM6IHtcbiAqICAgICAgICAgICB0eXBlOiAnc3RhdHVzJ1xuICogICAgICAgICB9XG4gKiAgICAgICB9LFxuICogICAgICAge1xuICogICAgICAgICBuYW1lOiAnY291bnRyeU9mRGVzdGluYXRpb24nLFxuICogICAgICAgICBsYWJlbDoge1xuICogICAgICAgICAgIGkxOG46ICdpMThuLmNvdW50cnlPZkRlc3RpbmF0aW9uLmxhYmVsJ1xuICogICAgICAgICB9LFxuICogICAgICAgICBvcHRpb25zOiB7XG4gKiAgICAgICAgICAgdHlwZTogJ3ZhbHVlJ1xuICogICAgICAgICB9XG4gKiAgICAgICB9XG4gKiAgICAgXSxcbiAqICAgICBwYWdlVHlwZUNvbmZpZzoge1xuICogICAgICAgY2FuY2VsOiB7XG4gKiAgICAgICAgIGhhbmRsZXI6ICgpID0+IGhhbmRsZUNhbmNlbCgpXG4gKiAgICAgICB9LFxuICogICAgICAgc2F2ZToge1xuICogICAgICAgICBoYW5kbGVyOiAoZm9ybVZhbHVlcykgPT4gaGFuZGxlU2F2ZShmb3JtVmFsdWVzKVxuICogICAgICAgfVxuICogICAgIH1cbiAqICAgfTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqICMjIyMgKipVcGRhdGluZyBGYWNldHMqKlxuICpcbiAqIFR5cGljYWxseSwgdGhlIHZhbHVlcyBvZiB0aGUgZmFjZXRzIG9uIGEgY3JlYXRlIG9yIGluc3BlY3QgcGFnZSBhcmUgc2V0IHRvIHJlYWQtb25seS4gSG93ZXZlciwgdGhlcmUgbWF5IGJlIGNhc2VzIHdoZXJlLCBmb3IgZXhhbXBsZSwgYSBzdGF0dXMgY2hhbmdlIGlzIG5lZWRlZCwgc3VjaCBhcyB0aHJvdWdoIGEgZGlhbG9nLiBGb3IgdGhpcyBwdXJwb3NlLCB3ZSBoYXZlIHByb3ZpZGVkIGFuIHVwZGF0ZSBtZXRob2QuIEluIHRoZSByZXNvbHZlciBzZXJ2aWNlLCBkZWZpbmUgYW4gZW1wdHkgbWV0aG9kIGNhbGxlZCBgdXBkYXRlTWV0YWRhdGFgLiBJbmplY3QgdGhpcyBzZXJ2aWNlIHVzaW5nIGl0cyB0eXBlLCBhbmQgdGhlbiBjYWxsIHRoZSBgdXBkYXRlTWV0YWRhdGFgIG1ldGhvZCB3aXRoIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXIuXG4gKlxuICogKipQbGVhc2Ugbm90ZTogVGhlc2UgdmFsdWVzIHNob3VsZCBub3QgYmUgbW9kaWZpZWQgZGlyZWN0bHkgd2l0aGluIGEgUWRQYWdlLioqXG4gKlxuICogYGBgdHNcbiAqIEBJbmplY3RhYmxlKClcbiAqIGNsYXNzIE15T2JqZWN0TW9kZWxSZXNvbHZlciBpbXBsZW1lbnRzIFFkUGFnZU9iamVjdFJlc29sdmVyPE15T2JqZWN0TW9kZWw+IHtcbiAqICAgY29uZmlnOiBRZFBhZ2VPYmplY3RSZXNvbHZlckNvbmZpZyA9IHtcbiAqICAgICAvLyB5b3VyIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlXG4gKiAgIH1cbiAqXG4gKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cbiAqXG4gKiAgIHJlc29sdmUoKTogT2JzZXJ2YWJsZTxNeU9iamVjdE1vZGVsPiB7XG4gKiAgICAgLy8geW91ciBpbXBsZW1lbnRhdGlvbiBoZXJlXG4gKiAgIH1cbiAqXG4gKiAgIHVwZGF0ZU1ldGFkYXRhKG1ldGFkYXRhOiBQYXJ0aWFsPE15T2JqZWN0TW9kZWw+KSB7XG4gKiAgICAgLy8gbGVhdmUgZW1wdHkgaGVyZSAmIGNhbGwgaW4geW91ciBjb21wb25lbnRcbiAqICAgfVxuICogfVxuICpcbiAqIEBDb21wb25lbnQoe1xuICogICAvLyAuLi5cbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAge1xuICogICAgICAgcHJvdmlkZTogUURfUEFHRV9PQkpFQ1RfUkVTT0xWRVJfVE9LRU4sXG4gKiAgICAgICB1c2VDbGFzczogTXlPYmplY3RNb2RlbFJlc29sdmVyXG4gKiAgICAgfVxuICogICBdXG4gKiB9KVxuICogY2xhc3MgTXlQYWdlQ29tcG9uZW50IHtcbiAqICAgY29uc3RydWN0b3IoQEluamVjdChRRF9QQUdFX09CSkVDVF9SRVNPTFZFUl9UT0tFTikgcHJpdmF0ZSBvYmplY3RSZXNvbHZlcjogTXlPYmplY3RNb2RlbFJlc29sdmVyKSB7fVxuICpcbiAqICAgdXBkYXRlU3RhdHVzKCkge1xuICogICAgIHRoaXMub2JqZWN0UmVzb2x2ZXIudXBkYXRlTWV0YWRhdGEoeyBzdGF0ZTogJ1VwZGF0ZWQnIH0pO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiAjIyMjICoqT3ZlcnZpZXcgUGFnZSoqXG4gKlxuICogT24gYW4gb3ZlcnZpZXcgcGFnZSwgYSBsaXN0IG9mIGJ1c2luZXNzIGNhc2VzIGNhbiBiZSBkaXNwbGF5ZWQuIFR5cGljYWxseSwgdGhpcyBpcyBkb25lIGluIGEgKipRZFRhYmxlKiosIGluY2x1ZGluZyBmaWx0ZXJzIGFuZC9vciBzZWFyY2ggb3B0aW9ucy4gVGhlcmUgYXJlIGFjdGlvbnMgdGhhdCBoYW5kbGUgcm91dGluZyB0byB0aGUgcmVsYXRlZCBkZXRhaWwgcGFnZXMsIHdoZXJlIHRoZSBidXNpbmVzcyBjYXNlcywgcmVwcmVzZW50ZWQgYnkgYSBidXNpbmVzcyBvYmplY3QgbW9kZWwsIGNhbiBiZSB2aWV3ZWQsIGVkaXRlZCwgb3IgbmV3bHkgY3JlYXRlZC5cbiAqXG4gKiBgYGB0c1xuICogY29uc3Qgb3ZlcnZpZXdQYWdlQ29uZmlnOiBRZFBhZ2VDb25maWc8TXlPYmplY3RUeXBlPiA9IHtcbiAqICAgdGl0bGU6IHsgaTE4bjogJ2kxOG4ubXktcGFnZS50aXRsZScgfSxcbiAqICAgcGFnZVR5cGU6ICdvdmVydmlldycsXG4gKiAgIHBhZ2VUeXBlQ29uZmlnOiB7XG4gKiAgICAgY3VzdG9tQWN0aW9uczogW1xuICogICAgICAge1xuICogICAgICAgICBpMThuOiAnaTE4bi5jdXN0b20uYWN0aW9uJyxcbiAqICAgICAgICAgaGFuZGxlcjogKCkgPT4gZG9Tb21ldGhpbmcoKVxuICogICAgICAgfVxuICogICAgIF1cbiAqICAgfVxuICogfTtcbiAqIGBgYFxuICpcbiAqIGBgYGh0bWxcbiAqIDxxZC1wYWdlIFtjb25maWddPVwicGFnZUNvbmZpZ1wiPlxuICogICA8cWQtc2VjdGlvbiBbY29uZmlnXT1cInNlY3Rpb25Db25maWdcIj5cbiAqICAgICA8cWQtdGFibGUgW2NvbmZpZ109XCJ0YWJsZUNvbmZpZ1wiPjwvcWQtdGFibGU+XG4gKiAgIDwvcWQtc2VjdGlvbj5cbiAqIDwvcWQtcGFnZT5cbiAqIGBgYFxuICpcbiAqIFRvIGNvbmZpZ3VyZSBjb250ZXh0cyBmb3IgYSBwYWdlLCB5b3UgY2FuIGVhc2lseSBzZXQgY29udGV4dHMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBvdmVydmlldyBwYWdlLiBUaGV5IGFyZSB0aGVuIHNlbGVjdGFibGUgb24gdGhlIG92ZXJ2aWV3IHBhZ2U6XG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IG92ZXJ2aWV3UGFnZUNvbmZpZzogUWRQYWdlQ29uZmlnPE15T2JqZWN0VHlwZT4gPSB7XG4gKiAgIC8vIC4uLlxuICogICBjb250ZXh0czogW1xuICogICAgIHtcbiAqICAgICAgIGlkOiAndHlwZU9mVHJhZmZpYycsXG4gKiAgICAgICBsYWJlbDogeyBpMThuOiAnVmVya2VocnNhcnQnIH0sXG4gKiAgICAgICB0eXBlOiAnc2luZ2xlJyxcbiAqICAgICAgIHNlbGVjdGVkOiB7XG4gKiAgICAgICAgIGxhYmVsOiB7IGkxOG46ICdTY2hpZW5lJyB9LFxuICogICAgICAgICB2YWx1ZTogJ3JhaWwnXG4gKiAgICAgICB9LFxuICogICAgICAgb3B0aW9uczogW1xuICogICAgICAgICB7XG4gKiAgICAgICAgICAgdmFsdWU6ICdyYWlsJyxcbiAqICAgICAgICAgICBsYWJlbDogeyBpMThuOiAnU2NoaWVuZScgfVxuICogICAgICAgICB9LFxuICogICAgICAgICB7XG4gKiAgICAgICAgICAgdmFsdWU6ICdhaXInLFxuICogICAgICAgICAgIGxhYmVsOiB7IGkxOG46ICdMdWZ0JyB9XG4gKiAgICAgICAgIH1cbiAqICAgICAgIF1cbiAqICAgICB9XG4gKiAgIF1cbiAqICAgLy8gLi4uXG4gKiB9O1xuICogYGBgXG4gKlxuICogIyMjIyAqKkNyZWF0ZSBQYWdlKipcbiAqXG4gKiBPbiB0aGUgY3JlYXRlIHBhZ2UsIGEgbmV3IGJ1c2luZXNzIGNhc2UgY2FuIGJlIGNyZWF0ZWQuIFRoaXMgcGFnZSB0eXBpY2FsbHkgaW5jbHVkZXMgZm9ybXMgZm9yIGVudGVyaW5nIGRhdGEuIFRoZSBzdWJtaXQgYnV0dG9uIGlzIHBhcmFtZXRlcml6ZWQgd2l0aCB0aGUgZm9ybSBkYXRhIGFuZCBpcyB2YWxpZGF0ZWQgdGhyb3VnaCB0aGUgUWRQYWdlU3RlcHBlci5cbiAqIFRoZSBjbGljayBvbiB0aGUgc3VibWl0IGJ1dHRvbiBzaG91bGQgc3VibWl0IHRoZSBjcmVhdGlvbiBvZiB0aGUgYnVzaW5lc3MgY2FzZSBvciBvYmplY3QuIFlvdSBjYW4gZGVmaW5lIGEgc3BlY2lmaWMgaGFuZGxlciBpbiB0aGUgc3VibWl0IGJ1dHRvbidzIGNvbmZpZ3VyYXRpb24gdG8gY3JlYXRlIHRoZSBvYmplY3QuXG4gKiBJZiBvbmx5IG9uZSBzdGVwIGlzIG5lZWRlZCwgdGhlIHNpbmdsZS1zdGVwIG1vZGUgY2FuIGJlIHVzZWQuIEluIHNpbmdsZS1zdGVwIG1vZGUsIHRoZSBzdGVwcGVyIGlzIHZpc3VhbGx5IGhpZGRlbiBhbmQgYmVoYXZlcyBsaWtlIGEgKipRZFNlY3Rpb24qKi5cbiAqXG4gKiBgYGB0c1xuICogY29uc3QgY3JlYXRlUGFnZUNvbmZpZzogUWRQYWdlQ29uZmlnPE15T2JqZWN0VHlwZT4gPSB7XG4gKiAgIHRpdGxlOiB7IGkxOG46ICdpMThuLnBhZ2UudGl0bGUnIH0sXG4gKiAgIHBhZ2VUeXBlOiAnY3JlYXRlJyxcbiAqICAgcGFnZVR5cGVDb25maWc6IHtcbiAqICAgICBzdWJtaXQ6IHtcbiAqICAgICAgIGhhbmRsZXI6IChmb3JtVmFsdWVzKSA9PiBoYW5kbGVTdWJtaXQoZm9ybVZhbHVlcylcbiAqICAgICB9XG4gKiAgIH1cbiAqIH07XG4gKiBgYGBcbiAqXG4gKiBgYGBodG1sXG4gKiA8IS0tIEZvciBcIlF1aWNrIEFkZFwiIHVzZSBQYWdlU3RlcHBlciBpbiBzaW5nbGUtc3RlcCBtb2RlIC0tPlxuICogPHFkLXBhZ2UgW2NvbmZpZ109XCJwYWdlQ29uZmlnXCI+XG4gKiAgIDxxZC1wYWdlLXN0ZXBwZXIgW2NvbmZpZ109XCJzdGVwcGVyQ29uZmlnXCI+XG4gKiAgICAgPHFkLXBhZ2Utc3RlcCBbY29uZmlnXT1cInN0ZXBDb25maWdPbmVcIj5cbiAqICAgICAgIDxxZC1zZWN0aW9uIFtjb25maWddPVwic2VjdGlvbkNvbmZpZ1wiPlxuICogICAgICAgICA8cWQtZ3JpZCBbY29uZmlnXT1cImdyaWRDb25maWdcIiBbZm9ybUdyb3VwXT1cIm15Rm9ybXNcIiBxZENvbm5lY3RGb3JtU3RhdGVUb1BhZ2U9XCJteUZvcm1zXCI+XG4gKiAgICAgICAgICAgPCEtLSB5b3VyIHFkLWZvcm0tY29tcG9uZW50cyBoZXJlIC0tPlxuICogICAgICAgICA8L3FkLWdyaWQ+XG4gKiAgICAgICA8L3FkLXNlY3Rpb24+XG4gKiAgICAgPC9xZC1wYWdlLXN0ZXA+XG4gKiAgIDwvcWQtcGFnZS1zdGVwcGVyPlxuICogPC9xZC1wYWdlPlxuICpcbiAqIDwhLS0gV2l0aCBQYWdlU3RlcHBlciB1c2luZyBtdWx0aXBsZSBzdGVwcyAtLT5cbiAqIDxxZC1wYWdlIFtjb25maWddPVwicGFnZUNvbmZpZ1wiPlxuICogICA8cWQtcGFnZS1zdGVwcGVyIFtjb25maWddPVwic3RlcHBlckNvbmZpZ1wiPlxuICogICAgIDxxZC1wYWdlLXN0ZXAgW2NvbmZpZ109XCJzdGVwQ29uZmlnT25lXCI+XG4gKiAgICAgICA8cWQtc2VjdGlvbiBbY29uZmlnXT1cInNlY3Rpb25Db25maWdcIj5cbiAqICAgICAgICAgPHFkLWdyaWQgW2NvbmZpZ109XCJncmlkQ29uZmlnXCIgW2Zvcm1Hcm91cF09XCJteUZvcm1zT25lXCIgcWRDb25uZWN0Rm9ybVN0YXRlVG9QYWdlPVwibXlGb3Jtc09uZVwiPlxuICogICAgICAgICAgIDwhLS0geW91ciBxZC1mb3JtLWNvbXBvbmVudHMgaGVyZSAtLT5cbiAqICAgICAgICAgPC9xZC1ncmlkPlxuICogICAgICAgPC9xZC1zZWN0aW9uPlxuICogICAgIDwvcWQtcGFnZS1zdGVwPlxuICogICAgIDxxZC1wYWdlLXN0ZXAgW2NvbmZpZ109XCJzdGVwQ29uZmlnVHdvXCI+XG4gKiAgICAgICA8cWQtc2VjdGlvbiBbY29uZmlnXT1cInNlY3Rpb25Db25maWdcIj5cbiAqICAgICAgICAgPHFkLWdyaWQgW2NvbmZpZ109XCJncmlkQ29uZmlnXCIgW2Zvcm1Hcm91cF09XCJteUZvcm1zVHdvXCIgcWRDb25uZWN0Rm9ybVN0YXRlVG9QYWdlPVwibXlGb3Jtc1R3b1wiPlxuICogICAgICAgICAgIDwhLS0geW91ciBxZC1mb3JtLWNvbXBvbmVudHMgaGVyZSAtLT5cbiAqICAgICAgICAgPC9xZC1ncmlkPlxuICogICAgICAgPC9xZC1zZWN0aW9uPlxuICogICAgIDwvcWQtcGFnZS1zdGVwPlxuICogICA8L3FkLXBhZ2Utc3RlcHBlcj5cbiAqIDwvcWQtcGFnZT5cbiAqIGBgYFxuICpcbiAqIFRvIGFsbG93IHJlc29sdmluZyBhc3luY2hyb25vdXMgb3BlcmF0aW9ucyB3aGVuIGdvaW5nIHRvIG5leHQgc3RlcCwgeW91IGNhbiBwcm92aWRlIGEgcmVzb2x2ZXIgb2YgdHlwZSBRZFBhZ2VTdGVwUmVzb2x2ZXI6XG4gKlxuICogYGBgdHNcbiAqIGNsYXNzIE15UmVzb2x2ZXIgaW1wbGVtZW50cyBRZFBhZ2VTdGVwUmVzb2x2ZXIge1xuICogICAuLi5cbiAqXG4gKiAgIHJlc29sdmUoaW5kZXg6IG51bWJlcik6IE9ic2VydmFibGU8dm9pZD4ge1xuICogICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcIm5leHQtc3RlcC5jb21cIik7XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBAQ29tcG9uZW50KHtcbiAqICAgc2VsZWN0b3I6ICdxZC11aS1wYWdlLWNyZWF0ZScsXG4gKiAgIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUuY29tcG9uZW50Lmh0bWwnLFxuICogICBwcm92aWRlcnM6IFtcbiAqICAgICB7XG4gKiAgICAgICBwcm92aWRlOiBRRF9QQUdFX1NURVBfUkVTT0xWRVJfVE9LRU4sXG4gKiAgICAgICB1c2VDbGFzczogUGFnZVN0ZXBSZXNvbHZlclxuICogICAgIH1cbiAqICAgXVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBDcmVhdGVDb21wb25lbnQge1xuICogYGBgXG4gKlxuICogIyMjIyAqKkluc3BlY3QgUGFnZSoqXG4gKlxuICogT24gYW4gaW5zcGVjdCBwYWdlLCBhIHNwZWNpZmljIGJ1c2luZXNzIGNhc2UgaXMgZGlzcGxheWVkIGFuZCBtYXkgYmUgZWRpdGVkIG9yIHN1Ym1pdHRlZC4gRGVwZW5kaW5nIG9uIHlvdXIgbmVlZHMgeW91IGNhbiBoaWRlIHRoZSBzdWJtaXQgYnV0dG9uLlxuICogSW4gY29udHJhc3QgdG8gYSBjcmVhdGUgcGFnZSwgYW4gZXhpc3Rpbmcgb2JqZWN0IGlzIHNob3duIGFuZCBwb3RlbnRpYWxseSB1cGRhdGVkLlxuICpcbiAqIFRoZSBwYWdlIG9wZXJhdGVzIGluIG9uZSBvZiB0d28gbW9kZXMgLSBgdmlld2Agb3IgYGVkaXRgIC0gYXMgZGVmaW5lZCBieSB0aGUgYG9wZXJhdGlvbk1vZGVgIGNvbmZpZ3VyYXRpb24ga2V5LlxuICpcbiAqIFRoZSBgdmlld29ubHlgIGJlaGF2aW9yIGRlZmluZWQgYnkgdGhlIG9wZXJhdGlvbiBtb2RlIGlzIGF1dG9tYXRpY2FsbHkgcHJvcGFnYXRlZCB0byBhbGwgbmVzdGVkIFFkU2VjdGlvbiBjb21wb25lbnRzIHRoYXQgYXJlIHBhcnQgb2YgYSBRTFMsXG4gKiBhcyB3ZWxsIGFzIHRvIGZ1bmN0aW9uYWwgcGF0dGVybnMgc3VjaCBhcyBRZFRhYmxlLCBRZFRyZWUsIFFkRmlsZUNvbGxlY3RvciwgYW5kIFFkUXVpY2tFZGl0LlxuICogQWxsIGZvcm1zIGFyZSByZW5kZXJlZCBlaXRoZXIgaW4gdmlld29ubHkgb3IgZWRpdGFibGUgbW9kZSBhY2NvcmRpbmdseS5cbiAqXG4gKiBUaGlzIGJlaGF2aW9yIGNhbiBiZSBleHBsaWNpdGx5IG92ZXJyaWRkZW4gaW4gZWFjaCBjb21wb25lbnTigJlzIGNvbmZpZ3VyYXRpb24gLSBmb3IgZXhhbXBsZSwgdG8gYWxsb3cgY2VydGFpbiBmaWVsZHMgdG8gcmVtYWluIGVkaXRhYmxlLlxuICpcbiAqIC0gKip2aWV3Kio6IEEgc3VibWl0IGFjdGlvbiBjYW4gb3B0aW9uYWxseSBiZSBhZGRlZCBmb3IgcHJvY2Vzcy1yZWxhdGVkIG9wZXJhdGlvbnMgc3VjaCBhcyBzdGF0dXMgdXBkYXRlcy5cbiAqICAgVGhlIGFjdGlvbiByZWNlaXZlcyB0aGUgY3VycmVudCBmb3JtIHZhbHVlcyBhbmQgc3VwcG9ydHMgdmFsaWRhdGlvbiBhbmQgcGFyYW1ldGVyaXphdGlvbi5cbiAqXG4gKiAtICoqZWRpdCoqOiBUeXBpY2FsbHkgaW5jbHVkZXMgYSBzYXZlIGJ1dHRvbiB0byBwZXJzaXN0IGNoYW5nZXMgbWFkZSBpbiBlZGl0YWJsZSBmaWVsZHMuXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IGluc3BlY3RQYWdlQ29uZmlnOiBRZFBhZ2VDb25maWc8TXlPYmplY3RUeXBlPiA9IHtcbiAqICAgdGl0bGU6IHsgaTE4bjogJ2kxOG4ucGFnZS50aXRsZScgfSxcbiAqICAgcGFnZVR5cGU6ICdpbnNwZWN0JyxcbiAqICAgcGFnZVR5cGVDb25maWc6IHtcbiAqICAgICBvcGVyYXRpb25Nb2RlOiAnZWRpdCcsXG4gKiAgICAgY2FuY2VsOiB7XG4gKiAgICAgICBoYW5kbGVyOiAoKSA9PiBoYW5kbGVDYW5jZWwoKVxuICogICAgIH0sXG4gKiAgICAgc2F2ZToge1xuICogICAgICAgaGFuZGxlcjogKGZvcm1WYWx1ZXMpID0+IGhhbmRsZVNhdmUoZm9ybVZhbHVlcylcbiAqICAgICB9XG4gKiAgIH1cbiAqIH07XG4gKiBgYGBcbiAqXG4gKiBgYGBodG1sXG4gKiA8IS0tIHdpdGggU2VjdGlvbiAtLT5cbiAqIDxxZC1wYWdlIFtjb25maWddPVwicGFnZUNvbmZpZ1wiPlxuICogICA8cWQtc2VjdGlvbiBbY29uZmlnXT1cInNlY3Rpb25Db25maWdcIj5cbiAqICAgICA8cWQtZ3JpZCBbY29uZmlnXT1cImdyaWRDb25maWdcIiBbZm9ybUdyb3VwXT1cIm15Rm9ybXNcIiBxZENvbm5lY3RGb3JtU3RhdGVUb1BhZ2U9XCJteUZvcm1zXCI+XG4gKiAgICAgICA8IS0tIHlvdXIgcWQtZm9ybS1jb21wb25lbnRzIGhlcmUgLS0+XG4gKiAgICAgPC9xZC1ncmlkPlxuICogICA8L3FkLXNlY3Rpb24+XG4gKiA8L3FkLXBhZ2U+XG4gKlxuICogPCEtLSB3aXRoIFBhZ2VUYWJzIC0tPlxuICogPHFkLXBhZ2UgW2NvbmZpZ109XCJwYWdlQ29uZmlnXCI+XG4gKiAgIDxxZC1wYWdlLXRhYnMgW2NvbmZpZ109XCJzdGVwcGVyQ29uZmlnXCI+XG4gKiAgICAgPHFkLXBhZ2UtdGFiIFtjb25maWddPVwidGFiQ29uZmlnT25lXCI+XG4gKiAgICAgICA8cWQtc2VjdGlvbiBbY29uZmlnXT1cInNlY3Rpb25Db25maWdcIj5cbiAqICAgICAgICAgPHFkLWdyaWQgW2NvbmZpZ109XCJncmlkQ29uZmlnXCIgW2Zvcm1Hcm91cF09XCJteUZvcm1zT25lXCIgcWRDb25uZWN0Rm9ybVN0YXRlVG9QYWdlPVwibXlGb3Jtc09uZVwiPlxuICogICAgICAgICAgIDwhLS0geW91ciBxZC1mb3JtLWNvbXBvbmVudHMgaGVyZSAtLT5cbiAqICAgICAgICAgPC9xZC1ncmlkPlxuICogICAgICAgPC9xZC1zZWN0aW9uPlxuICogICAgIDwvcWQtcGFnZS10YWI+XG4gKiAgICAgPHFkLXBhZ2UtdGFiIFtjb25maWddPVwidGFiQ29uZmlnVHdvXCI+XG4gKiAgICAgICA8cWQtc2VjdGlvbiBbY29uZmlnXT1cInNlY3Rpb25Db25maWdcIj5cbiAqICAgICAgICAgPHFkLWdyaWQgW2NvbmZpZ109XCJncmlkQ29uZmlnXCIgW2Zvcm1Hcm91cF09XCJteUZvcm1zVHdvXCIgcWRDb25uZWN0Rm9ybVN0YXRlVG9QYWdlPVwibXlGb3Jtc1R3b1wiPlxuICogICAgICAgICAgIDwhLS0geW91ciBxZC1mb3JtLWNvbXBvbmVudHMgaGVyZSAtLT5cbiAqICAgICAgICAgPC9xZC1ncmlkPlxuICogICAgICAgPC9xZC1zZWN0aW9uPlxuICogICAgIDwvcWQtcGFnZS10YWI+XG4gKiAgIDwvcWQtcGFnZS10YWJzPlxuICogPC9xZC1wYWdlPlxuICogYGBgXG4gKlxuICogIyMjIyAqKkN1c3RvbSBQYWdlKipcbiAqXG4gKiBgYGB0c1xuICogY29uc3QgY3VzdG9tUGFnZUNvbmZpZzogUWRQYWdlQ29uZmlnPE15T2JqZWN0VHlwZT4gPSB7XG4gKiAgIHRpdGxlOiB7IGkxOG46ICdpMThuLnBhZ2UudGl0bGUnIH0sXG4gKiAgIHBhZ2VUeXBlOiAnY3VzdG9tJyxcbiAqICAgcGFnZVR5cGVDb25maWc6IHtcbiAqICAgICBjdXN0b21BY3Rpb25zOiBbXG4gKiAgICAgICB7XG4gKiAgICAgICAgIGkxOG46ICdpMThuLmN1c3RvbS5hY3Rpb24nLFxuICogICAgICAgICBoYW5kbGVyOiAoKSA9PiBkb1NvbWV0aGluZygpXG4gKiAgICAgICB9XG4gKiAgICAgXVxuICogICB9XG4gKiB9O1xuICogYGBgXG4gKlxuICogYGBgaHRtbFxuICogPHFkLXBhZ2UgW2NvbmZpZ109XCJwYWdlQ29uZmlnXCI+XG4gKiAgIDwhLS0gUGxhY2UgY29udGVudCBoZXJlIHRoYXQgZG9lc27igJl0IGZpdCB0aGUgb3RoZXIgcGFnZSB0eXBlcyAtLT5cbiAqIDwvcWQtcGFnZT5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdxZC1wYWdlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wYWdlLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1FkUGFnZUZvb3RlclNlcnZpY2UsIFFkRm9ybUdyb3VwTWFuYWdlclNlcnZpY2UsIFFkUGFnZVN1Ym1pdEFjdGlvblNlcnZpY2UsIFFkUmVzb2x2ZXJUcmlnZ2VyU2VydmljZV0sXG4gIGhvc3Q6IHsgJ1tjbGFzcy5oYXMtY29udHJvbC1wYW5lbF0nOiAnaXNDb250cm9sUGFuZWxWaXNpYmxlJywgJ1tjbGFzcy5jb250cm9sLXBhbmVsLWJyb2FkXSc6ICdpc0NvbnRyb2xQYW5lbEJyb2FkJyB9XG59KVxuZXhwb3J0IGNsYXNzIFFkUGFnZUNvbXBvbmVudDxUIGV4dGVuZHMgb2JqZWN0PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBkZWZpbmVzIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgUWRQYWdlIGNvbXBvbmVudCwgaW5jbHVkaW5nIHRoZSBwYWdlIHR5cGUsXG4gICAqIHRpdGxlLCBhbmQgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIGVhY2ggdHlwZSBvZiBwYWdlLlxuICAgKi9cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgY29uZmlnITogUWRQYWdlQ29uZmlnPFQ+O1xuXG4gIC8qKlxuICAgKiBBIHN0YXRpYyB0ZXN0IElEIGZvciBpbnRlZ3JhdGlvbiB0ZXN0cyBjYW4gYmUgc2V0LiA8YnIgLz5cbiAgICogVGhlIHZhbHVlIGZvciB0aGUgSFRNTCBhdHRyaWJ1dGUgW2RhdGEtdGVzdC1pZF0uXG4gICAqL1xuICBASW5wdXQoJ2RhdGEtdGVzdC1pZCcpIHRlc3RJZD8gPSAncGFnZSc7XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZW1pdHRlZCB3aGVuIHRoZSBvcGVyYXRpb24gbW9kZSBvZiB0aGUgaW5zcGVjdCBwYWdlIGlzIGNoYW5nZWQuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgb3BlcmF0aW9uTW9kZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFFkSW5zcGVjdE9wZXJhdGlvbk1vZGU+KCk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihRZFNlY3Rpb25Db21wb25lbnQpXG4gIHNlY3Rpb25zITogUXVlcnlMaXN0PFFkU2VjdGlvbkNvbXBvbmVudD47XG5cbiAgQENvbnRlbnRDaGlsZChRZFBhZ2VDb250cm9sUGFuZWxDb21wb25lbnQpXG4gIGNvbnRyb2xQYW5lbCE6IFFkUGFnZUNvbnRyb2xQYW5lbENvbXBvbmVudDtcblxuICBAQ29udGVudENoaWxkKFFkUGFnZVN0ZXBwZXJDb21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgc3RlcHBlckNvbXBvbmVudD86IFFkUGFnZVN0ZXBwZXJDb21wb25lbnQ7XG5cbiAgQENvbnRlbnRDaGlsZChRZFBhZ2VUYWJzQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIHRhYnNDb21wb25lbnQ/OiBRZFBhZ2VUYWJzQ29tcG9uZW50O1xuXG4gIEBDb250ZW50Q2hpbGQoUWRQYWdlU3RlcHBlckFkYXB0ZXJEaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgc3RlcHBlckFkYXB0ZXJEaXJlY3RpdmU/OiBRZFBhZ2VTdGVwcGVyQWRhcHRlckRpcmVjdGl2ZTtcblxuICBAQ29udGVudENoaWxkKFFkUGFnZVRhYnNBZGFwdGVyRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIHRhYnNBZGFwdGVyRGlyZWN0aXZlPzogUWRQYWdlVGFic0FkYXB0ZXJEaXJlY3RpdmU7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihRZFBhZ2VJbmZvQmFubmVyQ29tcG9uZW50KVxuICBpbmZvQmFubmVycyE6IFF1ZXJ5TGlzdDxRZFBhZ2VJbmZvQmFubmVyQ29tcG9uZW50PjtcblxuICBmb290ZXJIYXNDb250ZW50JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgaXNGb290ZXJWaXNpYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBwcm9qZWN0aW9uR3VhcmRNZXNzYWdlID1cbiAgICAnUUQtVUkgfCBRZFBhZ2UgLSBUaGlzIGNvbnRlbnQgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIHVzZSBRZFNlY3Rpb25BZGFwdGVyRGlyZWN0aXZlIGZvciBjdXN0b20gY29udGVudCBwcm9qZWN0aW9uLic7XG5cbiAgcHJpdmF0ZSBfaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICBwcml2YXRlIF9kZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBnZXQgaXNDb250cm9sUGFuZWxWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbnRyb2xQYW5lbCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuY29udHJvbFBhbmVsLmNvbmZpZz8uaXNIaWRkZW4gIT09IHRydWU7XG4gIH1cblxuICBnZXQgaXNDb250cm9sUGFuZWxCcm9hZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sUGFuZWw/LmNvbmZpZz8ud2lkdGggPT09ICdicm9hZCc7XG4gIH1cblxuICBnZXQgaGFzTmF2aWdhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5zdGVwcGVyQ29tcG9uZW50IHx8IHRoaXMudGFic0NvbXBvbmVudCB8fCB0aGlzLnN0ZXBwZXJBZGFwdGVyRGlyZWN0aXZlIHx8IHRoaXMudGFic0FkYXB0ZXJEaXJlY3RpdmUpO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5oYXMtZm9vdGVyJylcbiAgZ2V0IGZvb3RlclZpc2libGUoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXNGb290ZXJWaXNpYmxlO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5oYXMtaW5mby1iYW5uZXJzJylcbiAgZ2V0IGhhc0luZm9CYW5uZXJzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmluZm9CYW5uZXJzLmxlbmd0aCA+IDA7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhZ2VTdG9yZVNlcnZpY2U6IFFkUGFnZVN0b3JlU2VydmljZTxUPixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvb3RlclNlcnZpY2U6IFFkUGFnZUZvb3RlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtR3JvdXBNYW5hZ2VyU2VydmljZTogUWRGb3JtR3JvdXBNYW5hZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN1Ym1pdEFjdGlvblNlcnZpY2U6IFFkUGFnZVN1Ym1pdEFjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IFFkRGlhbG9nU2VydmljZVxuICApIHtcbiAgICB0aGlzLmZvb3Rlckhhc0NvbnRlbnQkID0gdGhpcy5mb290ZXJTZXJ2aWNlLmZvb3Rlckhhc0NvbnRlbnQkO1xuICAgIHRoaXMuZm9vdGVySGFzQ29udGVudCQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkJCkpLnN1YnNjcmliZShpc1Zpc2libGUgPT4gKHRoaXMuaXNGb290ZXJWaXNpYmxlID0gaXNWaXNpYmxlKSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrQ29uZmlnVmFsaWRpdHkoKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZykgdGhpcy5wYWdlU3RvcmVTZXJ2aWNlLmluaXRQYWdlU3RhdGUodGhpcy5jb25maWcpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IGNvbmZpZ0NoYW5nZSA9IGNoYW5nZXNbJ2NvbmZpZyddO1xuXG4gICAgaWYgKCFjb25maWdDaGFuZ2UpIHJldHVybjtcblxuICAgIGNvbnN0IHsgY3VycmVudFZhbHVlOiBjdXJyLCBwcmV2aW91c1ZhbHVlOiBwcmV2IH0gPSBjb25maWdDaGFuZ2U7XG5cbiAgICBpZiAoY3Vycj8ucGFnZVR5cGVDb25maWc/LnN1Ym1pdD8uaXNIaWRkZW4gIT09IHByZXY/LnBhZ2VUeXBlQ29uZmlnPy5zdWJtaXQ/LmlzSGlkZGVuKVxuICAgICAgdGhpcy5mb290ZXJTZXJ2aWNlLnVwZGF0ZUFjdGlvbnMoW1xuICAgICAgICB7IGFjdGlvbktleTogJ3N1Ym1pdCcsIHBhcnRpYWxBY3Rpb246IHsgaXNWaXNpYmxlOiAhY3Vycj8ucGFnZVR5cGVDb25maWc/LnN1Ym1pdD8uaXNIaWRkZW4gfSB9XG4gICAgICBdKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWcucGFnZVR5cGUgPT09ICdjcmVhdGUnKSB0aGlzLnNldHVwQ3JlYXRlUGFnZUZvb3RlckFjdGlvbnMoKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5wYWdlVHlwZSA9PT0gJ2NyZWF0ZScgJiYgdGhpcy5jb25maWc/LnBhZ2VUeXBlQ29uZmlnPy5jYW5jZWwgIT09IHVuZGVmaW5lZClcbiAgICAgIHRoaXMuaGFuZGxlQ2FuY2VsQWN0aW9uV2l0aEZvcm1DaGFuZ2VzKCk7XG5cbiAgICBpZiAodGhpcy5jb25maWcucGFnZVR5cGUgPT09ICdjcmVhdGUnICYmIHRoaXMuY29uZmlnPy5wYWdlVHlwZUNvbmZpZz8uc2F2ZURyYWZ0ICE9PSB1bmRlZmluZWQpXG4gICAgICB0aGlzLmluaXRTYXZlRHJhZnRGb290ZXJBY3Rpb24oKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5wYWdlVHlwZSA9PT0gJ2luc3BlY3QnKVxuICAgICAgdGhpcy5wYWdlU3RvcmVTZXJ2aWNlLmlzVmlld29ubHkkXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSlcbiAgICAgICAgLnN1YnNjcmliZShpc1ZpZXdvbmx5ID0+XG4gICAgICAgICAgdGhpcy51cGRhdGVJbnNwZWN0UGFnZU9wZXJhdGlvbk1vZGUoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5wYWdlVHlwZUNvbmZpZyBhcyBRZFBhZ2VUeXBlSW5zcGVjdENvbmZpZyxcbiAgICAgICAgICAgIGlzVmlld29ubHkgPyAndmlldycgOiAnZWRpdCdcbiAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICB0aGlzLl9pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3llZCQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tDb25maWdWYWxpZGl0eSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnKSBjb25zb2xlLndhcm4oJ1FkVWkgfCBRZFBhZ2VDb21wb25lbnQgLSBUbyBjb25maWd1cmUgdGhlIHBhZ2UgeW91IHNob3VsZCBwcm92aWRlIGEgdmFsaWQgY29uZmlnLicpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cENyZWF0ZVBhZ2VGb290ZXJBY3Rpb25zKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhZ2VUeXBlQ29uZmlnID0gdGhpcy5jb25maWc/LnBhZ2VUeXBlQ29uZmlnIGFzIFFkUGFnZVR5cGVDcmVhdGVDb25maWc7XG4gICAgY29uc3QgYWN0aW9uS2V5czogUWRDcmVhdGVGb290ZXJBY3Rpb25LZXlbXSA9IFsnc2F2ZURyYWZ0JywgJ2NhbmNlbCcsICdzdWJtaXQnXTtcbiAgICBjb25zdCBhY3Rpb25zOiBQYXJ0aWFsRm9vdGVyQWN0aW9uW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgYWN0aW9uS2V5IG9mIGFjdGlvbktleXMpIHtcbiAgICAgIGNvbnN0IGFjdGlvbiA9IHBhZ2VUeXBlQ29uZmlnW2FjdGlvbktleV07XG5cbiAgICAgIGlmICghYWN0aW9uKSBjb250aW51ZTtcblxuICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgYWN0aW9uS2V5LFxuICAgICAgICBwYXJ0aWFsQWN0aW9uOiB7XG4gICAgICAgICAgLi4uKGFjdGlvbj8ubGFiZWw/LmkxOG4gPyB7IHRpdGxlSTE4bjogYWN0aW9uLmxhYmVsLmkxOG4gfSA6IHt9KSxcbiAgICAgICAgICBoYW5kbGVyOiB0aGlzLmdlbmVyYXRlRm9vdGVyQWN0aW9uSGFuZGxlcihhY3Rpb24/LmhhbmRsZXIpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZm9vdGVyU2VydmljZS51cGRhdGVBY3Rpb25zKGFjdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDYW5jZWxBY3Rpb25XaXRoRm9ybUNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXBNYW5hZ2VyU2VydmljZVxuICAgICAgLiRoYXNWYWx1ZXNDaGFuZ2VkKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSlcbiAgICAgIC5zdWJzY3JpYmUoaGFzQ2hhbmdlZCA9PiB7XG4gICAgICAgIHRoaXMuZm9vdGVyU2VydmljZS51cGRhdGVBY3Rpb25zKFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb25LZXk6ICdjYW5jZWwnLFxuICAgICAgICAgICAgcGFydGlhbEFjdGlvbjoge1xuICAgICAgICAgICAgICBoYW5kbGVyOiBoYXNDaGFuZ2VkXG4gICAgICAgICAgICAgICAgPyAoKTogdm9pZCA9PiB0aGlzLnNldHVwU3VibWl0QWN0aW9uVmFsaWRhdGlvbigpXG4gICAgICAgICAgICAgICAgOiAoKTogdm9pZCA9PiAodGhpcy5jb25maWc/LnBhZ2VUeXBlQ29uZmlnIGFzIFFkUGFnZVR5cGVDcmVhdGVDb25maWcpPy5jYW5jZWw/LmhhbmRsZXIoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFNhdmVEcmFmdEZvb3RlckFjdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBwYWdlVHlwZUNvbmZpZyA9IHRoaXMuY29uZmlnLnBhZ2VUeXBlQ29uZmlnIGFzIFFkUGFnZVR5cGVDcmVhdGVDb25maWc7XG5cbiAgICB0aGlzLmZvb3RlclNlcnZpY2Uuc2V0QWN0aW9ucyhbXG4gICAgICB7XG4gICAgICAgIGtleTogJ3NhdmVEcmFmdCcsXG4gICAgICAgIGFjdGlvbjoge1xuICAgICAgICAgIHRpdGxlSTE4bjogJ2kxOG4ucWQucGFnZS5mb290ZXIuc2F2ZURyYWZ0JyxcbiAgICAgICAgICB0eXBlOiBRZEZvb3RlckFjdGlvblR5cGUuU2Vjb25kYXJ5LFxuICAgICAgICAgIGhhbmRsZXI6ICgpOiB2b2lkID0+IHBhZ2VUeXBlQ29uZmlnPy5zYXZlRHJhZnQ/LmhhbmRsZXIoKSxcbiAgICAgICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICAgICAgaXNEaXNhYmxlZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJbnNwZWN0UGFnZU9wZXJhdGlvbk1vZGUocGFnZVR5cGVDb25maWc6IFFkUGFnZVR5cGVJbnNwZWN0Q29uZmlnLCBtb2RlOiBRZEluc3BlY3RPcGVyYXRpb25Nb2RlKTogdm9pZCB7XG4gICAgdGhpcy5zdWJtaXRBY3Rpb25TZXJ2aWNlLnNldFN1Ym1pdEFjdGlvbkZvckluc3BlY3QocGFnZVR5cGVDb25maWcsIG1vZGUgPT09ICd2aWV3Jyk7XG5cbiAgICB0aGlzLmZvb3RlclNlcnZpY2UudXBkYXRlQWN0aW9ucyhbXG4gICAgICB7IGFjdGlvbktleTogJ3N1Ym1pdCcsIHBhcnRpYWxBY3Rpb246IHsgaXNWaXNpYmxlOiBtb2RlID09PSAndmlldycgJiYgIXBhZ2VUeXBlQ29uZmlnPy5zdWJtaXQ/LmlzSGlkZGVuIH0gfVxuICAgIF0pO1xuXG4gICAgdGhpcy5pbml0U3VibWl0VmFsaWRhdGlvbigpO1xuXG4gICAgaWYgKHRoaXMuX2lzSW5pdGlhbGl6ZWQpIHRoaXMub3BlcmF0aW9uTW9kZUNoYW5nZWQuZW1pdChtb2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVGb290ZXJBY3Rpb25IYW5kbGVyKGhhbmRsZXI/OiAodmFsdWVzOiB1bmtub3duKSA9PiB2b2lkKTogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICBpZiAoIWhhbmRsZXIpIHJldHVybjtcblxuICAgICAgaGFuZGxlcih0aGlzLmZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlLmhhc0Zvcm1Hcm91cHMoKSA/IHRoaXMuZm9ybUdyb3VwTWFuYWdlclNlcnZpY2UuZ2V0QWxsVmFsdWVzKCkgOiBhcmdzKTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFN1Ym1pdEFjdGlvblZhbGlkYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5kaWFsb2dcbiAgICAgIC5vcGVuKFFkUGFnZUNhbmNlbENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICB0aXRsZTogeyBpMThuOiAnaTE4bi5xZC5wYWdlLmNhbmNlbC5jb25maXJtYXRpb24uZGlhbG9nLnRpdGxlJyB9LFxuICAgICAgICBkaWFsb2dTaXplOiBRZERpYWxvZ1NpemUuU21hbGwsXG4gICAgICAgIGRhdGE6IHRoaXMuY29uZmlnLnBhZ2VUeXBlQ29uZmlnXG4gICAgICB9KVxuICAgICAgLmNsb3NlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSlcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFN1Ym1pdFZhbGlkYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXBNYW5hZ2VyU2VydmljZVxuICAgICAgLiRhcmVGb3JtR3JvdXBzVmFsaWQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSxcbiAgICAgICAgdGFwKGlzVmFsaWQgPT4ge1xuICAgICAgICAgIHRoaXMuZm9vdGVyU2VydmljZS51cGRhdGVBY3Rpb25zKFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWN0aW9uS2V5OiAnc3VibWl0JyxcbiAgICAgICAgICAgICAgcGFydGlhbEFjdGlvbjoge1xuICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxJbmZvOiBpc1ZhbGlkXG4gICAgICAgICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgOiB7IGluZm9UeXBlOiAnd2FybmluZycsIG1lc3NhZ2U6IHsgaTE4bjogJ2kxOG4ucWQucGFnZS5zdWJtaXQuaW52YWxpZEZvcm0nIH0gfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxtYWluIHFkU25hY2tiYXJMaXN0ZW5lcj5cbiAgPHFkLXBhZ2Utb2JqZWN0LWhlYWRlclxuICAgIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbiAgICBbYXR0ci5kYXRhLXRlc3QtaWRdPVwidGVzdElkICsgJ29iamVjdC1oZWFkZXInXCJcbiAgICBbY29uZmlnXT1cImNvbmZpZ1wiXG4gICAgW2hhc05hdmlnYXRpb25dPVwiaGFzTmF2aWdhdGlvblwiXG4gID48L3FkLXBhZ2Utb2JqZWN0LWhlYWRlcj5cblxuICA8ZGl2IGNsYXNzPVwicGFnZS1pbmZvLWJhbm5lcnNcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJxZC1wYWdlLWluZm8tYmFubmVyXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnLnBhZ2VUeXBlID09PSAnY3JlYXRlJyB8fCBjb25maWcucGFnZVR5cGUgPT09ICdjdXN0b20nXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwicWQtcGFnZS1zdGVwcGVyXCI+PC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltxZFBhZ2VTdGVwcGVyQWRhcHRlcl1cIj48L25nLWNvbnRlbnQ+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb25maWcucGFnZVR5cGUgPT09ICdvdmVydmlldycgfHwgY29uZmlnLnBhZ2VUeXBlID09PSAnaW5zcGVjdCcgfHwgY29uZmlnLnBhZ2VUeXBlID09PSAnY3VzdG9tJ1wiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInFkLXBhZ2UtdGFic1wiPjwvbmctY29udGVudD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcWRQYWdlVGFic0FkYXB0ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInFkLXNlY3Rpb25cIj48L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3FkU2VjdGlvbkFkYXB0ZXJdXCI+PC9uZy1jb250ZW50PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnLnBhZ2VUeXBlID09PSAnY3VzdG9tJ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcm9qZWN0ZWRDb250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9tYWluPlxuXG48Zm9vdGVyICpuZ0lmPVwiZm9vdGVySGFzQ29udGVudCQgfCBhc3luY1wiPlxuICA8cWQtcGFnZS1mb290ZXIgW2F0dHIuZGF0YS10ZXN0LWlkXT1cInRlc3RJZCArICctZm9vdGVyJ1wiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltxZFBhZ2VGb290ZXJdXCI+PC9uZy1jb250ZW50PlxuICA8L3FkLXBhZ2UtZm9vdGVyPlxuPC9mb290ZXI+XG5cbjxhc2lkZSAqbmdJZj1cImlzQ29udHJvbFBhbmVsVmlzaWJsZVwiPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJxZC1wYWdlLWNvbnRyb2wtcGFuZWxcIj48L25nLWNvbnRlbnQ+XG48L2FzaWRlPlxuXG48cWQtcHJvamVjdGlvbi1ndWFyZCAqbmdJZj1cImNvbmZpZy5wYWdlVHlwZSAhPT0gJ2N1c3RvbSdcIiBbd2FybmluZ01lc3NhZ2VdPVwicHJvamVjdGlvbkd1YXJkTWVzc2FnZVwiPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJvamVjdGVkQ29udGVudFwiPjwvbmctY29udGFpbmVyPlxuPC9xZC1wcm9qZWN0aW9uLWd1YXJkPlxuXG48bmctdGVtcGxhdGUgI3Byb2plY3RlZENvbnRlbnQ+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
649
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3FkLXVpL3NyYy9saWIvcGFnZS9wYWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcWQtdWkvc3JjL2xpYi9wYWdlL3BhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDeEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDaEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDL0YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sd0VBQXdFLENBQUM7QUFDakksT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDM0YsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMENBQTBDLENB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SUFBSSxFQUFFO2dCQUlsRSxvQkFBb0I7c0JBRG5CLFlBQVk7dUJBQUMsMEJBQTBCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUkvRCxXQUFXO3NCQURWLGVBQWU7dUJBQUMseUJBQXlCO2dCQXdCdEMsYUFBYTtzQkFEaEIsV0FBVzt1QkFBQyxrQkFBa0I7Z0JBTTNCLGNBQWM7c0JBRGpCLFdBQVc7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUURfU0FGRV9CT1RUT01fT0ZGU0VUIH0gZnJvbSAnLi4vY29yZS9jb3JlLm1vZHVsZSc7XG5pbXBvcnQgeyBRZERpYWxvZ1NlcnZpY2UsIFFkRGlhbG9nU2l6ZSB9IGZyb20gJy4uL2RpYWxvZy9kaWFsb2cubW9kdWxlJztcbmltcG9ydCB7IFFkUGFnZVN0ZXBwZXJBZGFwdGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vcGFnZS1zdGVwcGVyL2FkYXB0b3JzL3BhZ2Utc3RlcHBlci1hZGFwdGVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBRZFBhZ2VTdGVwcGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vcGFnZS1zdGVwcGVyL3BhZ2Utc3RlcHBlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUWRQYWdlVGFic0FkYXB0ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9wYWdlLXRhYnMvYWRhcHRvcnMvcGFnZS10YWJzLWFkYXB0ZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IFFkUGFnZVRhYnNDb21wb25lbnQgfSBmcm9tICcuLi9wYWdlLXRhYnMvcGFnZS10YWJzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRZFNlY3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi9zZWN0aW9uL3NlY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7IFFkUGFnZUNhbmNlbENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vY2FuY2VsLWNvbmZpcm1hdGlvbi1kaWFsb2cvcGFnZS1jYW5jZWwtY29uZmlybWF0aW9uLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUWRQYWdlQ29udHJvbFBhbmVsQ29tcG9uZW50IH0gZnJvbSAnLi9jb250cm9sLXBhbmVsL3BhZ2UtY29udHJvbC1wYW5lbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUWRQYWdlSW5mb0Jhbm5lckNvbXBvbmVudCB9IGZyb20gJy4vaW5mby1iYW5uZXIvcGFnZS1pbmZvLWJhbm5lci5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgUWRJbnNwZWN0T3BlcmF0aW9uTW9kZSxcbiAgUWRQYWdlQ29uZmlnLFxuICBRZFBhZ2VUeXBlQ3JlYXRlQ29uZmlnLFxuICBRZFBhZ2VUeXBlSW5zcGVjdENvbmZpZ1xufSBmcm9tICcuL21vZGVsL3BhZ2UtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBRZENyZWF0ZUZvb3RlckFjdGlvbktleSwgUWRGb290ZXJBY3Rpb25UeXBlLCBRZFBhZ2VGb290ZXJBY3Rpb24gfSBmcm9tICcuL21vZGVsL3BhZ2UtZm9vdGVyLWFjdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUWRGb3JtR3JvdXBNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4vc2hhcmVkL3NlcnZpY2VzL2Zvcm0tZ3JvdXAtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IFFkUGFnZUZvb3RlclNlcnZpY2UgfSBmcm9tICcuL3NoYXJlZC9zZXJ2aWNlcy9wYWdlLWZvb3Rlci5zZXJ2aWNlJztcbmltcG9ydCB7IFFkUGFnZVN0b3JlU2VydmljZSB9IGZyb20gJy4vc2hhcmVkL3NlcnZpY2VzL3BhZ2Utc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBRZFBhZ2VTdWJtaXRBY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9zaGFyZWQvc2VydmljZXMvcGFnZS1zdWJtaXQtYWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUWRSZXNvbHZlclRyaWdnZXJTZXJ2aWNlIH0gZnJvbSAnLi9zaGFyZWQvc2VydmljZXMvcmVzb2x2ZXItdHJpZ2dlci5zZXJ2aWNlJztcblxudHlwZSBQYXJ0aWFsRm9vdGVyQWN0aW9uID0geyBhY3Rpb25LZXk6IFFkQ3JlYXRlRm9vdGVyQWN0aW9uS2V5OyBwYXJ0aWFsQWN0aW9uOiBQYXJ0aWFsPFFkUGFnZUZvb3RlckFjdGlvbj4gfTtcblxuLy8gRm9vdGVyIG9mZnNldCAocHgpLiBLZWVwIGluIHN5bmMgd2l0aCBTQ1NTICRwYWdlLWZvb3Rlci1oZWlnaHQhXG5jb25zdCBTQUZFX0JPVFRPTV9PRkZTRVRfUFggPSA2NDtcblxuLyoqXG4gKiAqKlFkUGFnZSoqIHNlcnZlcyBhcyB0aGUgY2VudHJhbCBzdHJ1Y3R1cmFsIGVsZW1lbnQgd2l0aGluIHRoZSBoaWVyYXJjaHkgdW5kZXIgdGhlICoqUWRTaGVsbCoqLlxuICogSW50ZWdyYXRpb24gaXMgZG9uZSB0aHJvdWdoIHRoZSBBbmd1bGFyIFJvdXRpbmcgTW9kdWxlLCBhbmQgUWRQYWdlIGlzIGRlc2lnbmVkIHRvIGJlIHJlc3BvbnNpdmUgYWNyb3NzIHZhcmlvdXMgc2NyZWVuIHNpemVzIHJpZ2h0IG91dCBvZiB0aGUgYm94LlxuICpcbiAqICMjIyMgKipQYWdlIFR5cGVzKipcbiAqXG4gKiBRZFBhZ2UgdXNlcyBwYWdlIHR5cGVzIHRvIGRlY2lkZSBob3cgdGhlIHBhZ2UgbG9va3MgYW5kIHdvcmtzLiBFYWNoIHBhZ2UgdHlwZSBoYXMgaXRzIG93biBzZXR0aW5ncyBhbmQgYWN0aW9ucy5cbiAqXG4gKiAtICoqb3ZlcnZpZXcqKjogRGlzcGxheXMgYSBzdW1tYXJ5IG9yIGEgbGlzdCBvZiBvYmplY3RzLCBwcm92aWRpbmcgYW4gb3ZlcnZpZXcgb2YgbXVsdGlwbGUgYnVzaW5lc3MgY2FzZXMuXG4gKiAtICoqY3JlYXRlKio6IEFsbG93cyB0aGUgY3JlYXRpb24gb2YgYSBuZXcgb2JqZWN0LCByZXByZXNlbnRpbmcgYSBidXNpbmVzcyBjYXNlLlxuICogLSAqKmluc3BlY3QqKjogRW5hYmxlcyB2aWV3aW5nLCBlZGl0aW5nLCBhbmQgZXhlY3V0aW5nIGFkZGl0aW9uYWwgYWN0aW9ucyByZWxhdGVkIHRvIHRoZSBvYmplY3QsIHdoaWNoIGFsc28gcmVwcmVzZW50cyBhIGJ1c2luZXNzIGNhc2UuXG4gKiAtICoqY3VzdG9tKio6IFByb3ZpZGVzIGEgd2F5IHRvIGltcGxlbWVudCB1bmlxdWUgZnVuY3Rpb25hbGl0eSB0aGF0IGRvZXNu4oCZdCBmaXQgdGhlIG90aGVyIHByZWRlZmluZWQgcGFnZSB0eXBlcy5cbiAqXG4gKiAqKk5vdGUgdGhhdCB0aGUgJ2N1c3RvbScgcGFnZSB0eXBlIHNob3VsZCBiZSB1c2VkIG9ubHkgYXMgYSBmYWxsYmFjayBmb3IgdmVyeSBzcGVjaWZpYyBjYXNlcy4gSWYgeW91IGVuY291bnRlciBzdWNoIGEgc2l0dWF0aW9uLCBwbGVhc2UgY29udGFjdCB0aGUgUXVhZHJlbCB0ZWFtLioqXG4gKlxuICogIyMjIyAqKkZhY2V0cyoqXG4gKlxuICogVGhlc2UgYXJlIGV4dHJhIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBzaG93biBpbiB0aGUgcGFnZSBoZWFkZXIuIFRoZXkgZ2l2ZSBjb250ZXh0IHNwZWNpZmljIHRvIHRoZSBjdXJyZW50IG9iamVjdCBtb2RlbCBiZWluZyB2aWV3ZWQgb3IgZWRpdGVkLiBUaGVyZSBhcmUgc2V2ZXJhbCB0eXBlcyBvZiBmYWNldHMsIGluY2x1ZGluZyBgc3RhdHVzYCwgYHZhbHVlYCwgYGNyaXRpY2FsaXR5YCwgYHJlZmVyZW5jZXNgLCBgcHJvZ3Jlc3NgLCBgZGF0ZWAsIGBzaW5nbGVTZWxlY3RgLCBhbmQgYG11bHRpU2VsZWN0YC4gRWFjaCB0eXBlIGhhcyBpdHMgb3duIG9wdGlvbnMuIEZvciBtb3JlIGRldGFpbHMsIHNlZSB0aGUgYFFkUGFnZUhlYWRlckZhY2V0YCBpbnRlcmZhY2UuXG4gKlxuICogIyMjIyAqKkNvbnRleHQqKlxuICpcbiAqIFRoZSBgY29udGV4dGAgYWN0cyBhcyBhIGZpbHRlciB0aGF0IGNhbiBiZSBzZWxlY3RlZCBvbiB0aGUgb3ZlcnZpZXcgcGFnZSBhbmQgcHJvdmlkZXMgdGhlIGJ1c2luZXNzIGNvbnRleHQsIHdoaWNoIHJlbWFpbnMgY29uc2lzdGVudCB0aHJvdWdob3V0IHRoZSBlbnRpcmUgYXBwbGljYXRpb24uIE9uIGNyZWF0ZSBhbmQgaW5zcGVjdCBwYWdlcywgdGhlIGNvbnRleHQgaXMgZGlzcGxheWVkIGFzIHJlYWQtb25seS4gRm9yIG1vcmUgZGV0YWlscywgY2hlY2sgdGhlIGRlZGljYXRlZCBjaGFwdGVyIGluIFN0b3J5Ym9vay5cbiAqXG4gKlxuICogIyMjIyAqKlBhZ2UgSW5mbyBCYW5uZXJzKipcbiAqXG4gKiBUbyBpbnNlcnQgYSBwYWdlIGluZm8gYmFubmVyIHVuZGVyIHRoZSBwYWdlIGhlYWRlciwganVzdCBwdXQgYSBgcWQtcGFnZS1pbmZvLWJhbm5lcmAgY29tcG9uZW50IGluc2lkZSB0aGUgYHFkLXBhZ2VgLiBNdWx0aXBsZSBjb25zZWN1dGl2ZSBpbmZvIGJhbm5lcnMgb2YgdGhlIHNhbWUgdHlwZSB3aWxsIGJlIG1lcmdlZCBpbnRvIG9uZSBiYW5uZXIgY29udGFpbmVyLiBQYWdlIGluZm8gYmFubmVycyBoYXZlIHRoZSBzYW1lIGFwcGVhcmFuY2UgbGlrZSBub3RpZmljYXRpb25zLlxuICpcbiAqICMjIyMgKipDb250cm9sIFBhbmVsKipcbiAqXG4gKiBUaGUgY29udHJvbCBwYW5lbCBpcyBsb2NhdGVkIG9uIHRoZSByaWdodCBzaWRlIG9mIHRoZSBwYWdlIGFuZCBpcyB1c2VkIHRvIGRpc3BsYXkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhbmQgZnVuY3Rpb25zIHJlbGV2YW50IHRvIGEgc3BlY2lmaWMgYnVzaW5lc3MgY2FzZSwgd2hpY2ggaXMgbGlua2VkIHRvIGEgc3BlY2lmaWMgb2JqZWN0IG1vZGVsLiBGb3IgZnVydGhlciBpbmZvcm1hdGlvbiwgcGxlYXNlIGNvbnN1bHQgdGhlIGRlZGljYXRlZCBjaGFwdGVyIGluIFN0b3J5Ym9vay5cbiAqXG4gKiAjIyMjICoqQWN0aW9ucyoqXG4gKlxuICogVGhlc2UgYXJlIGludGVyYWN0aXZlIGVsZW1lbnRzIHRoYXQgcGVyZm9ybSBzcGVjaWZpYyBmdW5jdGlvbnMuIEZ1bmN0aW9ucyBmb3IgdGhlc2UgYWN0aW9ucyBjYW4gYmUgc2V0IHVwIHRocm91Z2ggY29uZmlndXJhdGlvbnMuIEN1c3RvbSBhY3Rpb25zIGNhbiBiZSBhZGRlZCB0byBhbnkgcGFnZSB0eXBlLiBBZGRpdGlvbmFsbHksIGFsbCBhY3Rpb25zIGNhbiBiZSBjb25maWd1cmVkIGFuZCBjdXN0b21pemVkIHdpdGggeW91ciBvd24gdGV4dCwgd2hpY2ggd2lsbCBvdmVycmlkZSB0aGUgZGVmYXVsdCB0ZXh0cy5cbiAqXG4gKiBQbGVhc2UgY2hlY2sgdGhlIHJlbGV2YW50IGludGVyZmFjZXMgZm9yIGVhY2ggcGFnZSB0eXBlOiBgUWRQYWdlQ29uZmlnT3ZlcnZpZXdgLCBgUWRQYWdlQ29uZmlnQ3JlYXRlYCwgYFFkUGFnZUNvbmZpZ0luc3BlY3RgLCBhbmQgYFFkUGFnZUNvbmZpZ0N1c3RvbWAuXG4gKlxuICogIyMjIyAqKlZhbGlkYXRpb24vUGFyYW1ldGVyaXphdGlvbioqXG4gKlxuICogVmFsaWRhdGlvbiBhbmQgcGFyYW1ldGVyaXphdGlvbiBhcmUgY292ZXJlZCBpbiBhIGRlZGljYXRlZCBjaGFwdGVyIGluIHRoZSBTdG9yeWJvb2suIFBsZWFzZSBjaGVjayB0aGUgXCJWYWxpZGF0aW9uXCIgc2VjdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiAjIyMjICoqUmVzb2x2ZXIqKlxuICpcbiAqIFVzaW5nIGEgcmVzb2x2ZXIgdG8gZmV0Y2ggcGFnZSBvYmplY3QgZGF0YSBpcyBlc3NlbnRpYWwgdG8gdGhlIHBhZ2UgY29uY2VwdC4gQWRkIHRoZSByZXNvbHZlciB0byB0aGUgY29tcG9uZW50J3MgcHJvdmlkZXJzIGFuZCB1c2UgdGhlIGBRRF9QQUdFX09CSkVDVF9SRVNPTFZFUl9UT0tFTmAgdG9rZW4uIFRoaXMgYXBwcm9hY2ggZW5hYmxlcyB0eXBlIHNhZmV0eSBhbmQgdXNlciBmZWVkYmFjayBieSBlZmZlY3RpdmVseSBtYW5hZ2luZyB0aGUgbmVjZXNzYXJ5IGRhdGEgZm9yIHRoZSBwYWdlLlxuICpcbiAqIGBgYHRzXG4gKiBpbnRlcmZhY2UgTXlPYmplY3RNb2RlbCB7XG4gKiAgIC8vIE1ldGFkYXRhIGRpc3BsYXllZCBpbiB0aGUgT2JqZWN0SGVhZGVyXG4gKiAgIHN0YXRlOiBNeVN0YXRlO1xuICogICBjb3VudHJ5T2ZEZXN0aW5hdGlvbjogTXlDb3VudHJ5T2ZEZXN0aW5hdGlvbjtcbiAqICAgLy8gQXBwZWFycyBub3QgaW4gdGhlIE9iamVjdEhlYWRlclxuICogICBwYXlsb2FkOiBNeVBheWxvYWQ7XG4gKiB9XG4gKlxuICogdHlwZSBNeU9iamVjdE1ldGFkYXRhID0gJ3N0YXRlJyB8ICdjb3VudHJ5T2ZEZXN0aW5hdGlvbic7XG4gKlxuICogQEluamVjdGFibGUoKVxuICogY2xhc3MgTXlPYmplY3RNb2RlbFJlc29sdmVyIGltcGxlbWVudHMgUWRQYWdlT2JqZWN0UmVzb2x2ZXI8TXlPYmplY3RNb2RlbD4ge1xuICogICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHt9XG4gKlxuICogICByZXNvbHZlKCk6IE9ic2VydmFibGU8TXlPYmplY3RNb2RlbD4ge1xuICogICAgIHJldHVybiB0aGlzLmh0dHBcbiAqICAgICAgIC5nZXQ8TXlPYmplY3RNb2RlbD4oJ215LWFwaScpXG4gKiAgICAgICAucGlwZSh0YXAoKGRhdGE6IE15T2JqZWN0TW9kZWwpID0+IGRvU29tZXRoaW5nV2l0aChkYXRhKSkpO1xuICogICB9XG4gKiB9XG4gKlxuICogQENvbXBvbmVudCh7XG4gKiAgIHNlbGVjdG9yOiAnbXktcGFnZScsXG4gKiAgIHRlbXBsYXRlVXJsOiAnLi9teS1wYWdlLmNvbXBvbmVudC5odG1sJyxcbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAge1xuICogICAgICAgcHJvdmlkZTogUURfUEFHRV9PQkpFQ1RfUkVTT0xWRVJfVE9LRU4sXG4gKiAgICAgICB1c2VDbGFzczogTXlPYmplY3RNb2RlbFJlc29sdmVyXG4gKiAgICAgfVxuICogICBdXG4gKiB9KVxuICogY2xhc3MgTXlQYWdlQ29tcG9uZW50IHtcbiAqICAgcGFnZUNvbmZpZzogUWRQYWdlQ29uZmlnPFBpY2s8TXlPYmplY3RNb2RlbCwgTXlPYmplY3RNZXRhZGF0YT4+ID0ge1xuICogICAgIHRpdGxlOiB7IGkxOG46ICdpMThuLnBhZ2UudGl0bGUnIH0sXG4gKiAgICAgcGFnZVR5cGU6ICdpbnNwZWN0JyxcbiAqICAgICBoZWFkZXJGYWNldHM6IFtcbiAqICAgICAgIHtcbiAqICAgICAgICAgbmFtZTogJ3N0YXR1cycsXG4gKiAgICAgICAgIGxhYmVsOiB7XG4gKiAgICAgICAgICAgaTE4bjogJ2kxOG4uc3RhdHVzLmxhYmVsJ1xuICogICAgICAgICB9LFxuICogICAgICAgICBvcHRpb25zOiB7XG4gKiAgICAgICAgICAgdHlwZTogJ3N0YXR1cydcbiAqICAgICAgICAgfVxuICogICAgICAgfSxcbiAqICAgICAgIHtcbiAqICAgICAgICAgbmFtZTogJ2NvdW50cnlPZkRlc3RpbmF0aW9uJyxcbiAqICAgICAgICAgbGFiZWw6IHtcbiAqICAgICAgICAgICBpMThuOiAnaTE4bi5jb3VudHJ5T2ZEZXN0aW5hdGlvbi5sYWJlbCdcbiAqICAgICAgICAgfSxcbiAqICAgICAgICAgb3B0aW9uczoge1xuICogICAgICAgICAgIHR5cGU6ICd2YWx1ZSdcbiAqICAgICAgICAgfVxuICogICAgICAgfVxuICogICAgIF0sXG4gKiAgICAgcGFnZVR5cGVDb25maWc6IHtcbiAqICAgICAgIGNhbmNlbDoge1xuICogICAgICAgICBoYW5kbGVyOiAoKSA9PiBoYW5kbGVDYW5jZWwoKVxuICogICAgICAgfSxcbiAqICAgICAgIHNhdmU6IHtcbiAqICAgICAgICAgaGFuZGxlcjogKGZvcm1WYWx1ZXMpID0+IGhhbmRsZVNhdmUoZm9ybVZhbHVlcylcbiAqICAgICAgIH1cbiAqICAgICB9XG4gKiAgIH07XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiAjIyMjICoqVXBkYXRpbmcgRmFjZXRzKipcbiAqXG4gKiBUeXBpY2FsbHksIHRoZSB2YWx1ZXMgb2YgdGhlIGZhY2V0cyBvbiBhIGNyZWF0ZSBvciBpbnNwZWN0IHBhZ2UgYXJlIHNldCB0byByZWFkLW9ubHkuIEhvd2V2ZXIsIHRoZXJlIG1heSBiZSBjYXNlcyB3aGVyZSwgZm9yIGV4YW1wbGUsIGEgc3RhdHVzIGNoYW5nZSBpcyBuZWVkZWQsIHN1Y2ggYXMgdGhyb3VnaCBhIGRpYWxvZy4gRm9yIHRoaXMgcHVycG9zZSwgd2UgaGF2ZSBwcm92aWRlZCBhbiB1cGRhdGUgbWV0aG9kLiBJbiB0aGUgcmVzb2x2ZXIgc2VydmljZSwgZGVmaW5lIGFuIGVtcHR5IG1ldGhvZCBjYWxsZWQgYHVwZGF0ZU1ldGFkYXRhYC4gSW5qZWN0IHRoaXMgc2VydmljZSB1c2luZyBpdHMgdHlwZSwgYW5kIHRoZW4gY2FsbCB0aGUgYHVwZGF0ZU1ldGFkYXRhYCBtZXRob2Qgd2l0aCB0aGUgcmVxdWlyZWQgcGFyYW1ldGVyLlxuICpcbiAqICoqUGxlYXNlIG5vdGU6IFRoZXNlIHZhbHVlcyBzaG91bGQgbm90IGJlIG1vZGlmaWVkIGRpcmVjdGx5IHdpdGhpbiBhIFFkUGFnZS4qKlxuICpcbiAqIGBgYHRzXG4gKiBASW5qZWN0YWJsZSgpXG4gKiBjbGFzcyBNeU9iamVjdE1vZGVsUmVzb2x2ZXIgaW1wbGVtZW50cyBRZFBhZ2VPYmplY3RSZXNvbHZlcjxNeU9iamVjdE1vZGVsPiB7XG4gKiAgIGNvbmZpZzogUWRQYWdlT2JqZWN0UmVzb2x2ZXJDb25maWcgPSB7XG4gKiAgICAgLy8geW91ciBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZVxuICogICB9XG4gKlxuICogICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHt9XG4gKlxuICogICByZXNvbHZlKCk6IE9ic2VydmFibGU8TXlPYmplY3RNb2RlbD4ge1xuICogICAgIC8vIHlvdXIgaW1wbGVtZW50YXRpb24gaGVyZVxuICogICB9XG4gKlxuICogICB1cGRhdGVNZXRhZGF0YShtZXRhZGF0YTogUGFydGlhbDxNeU9iamVjdE1vZGVsPikge1xuICogICAgIC8vIGxlYXZlIGVtcHR5IGhlcmUgJiBjYWxsIGluIHlvdXIgY29tcG9uZW50XG4gKiAgIH1cbiAqIH1cbiAqXG4gKiBAQ29tcG9uZW50KHtcbiAqICAgLy8gLi4uXG4gKiAgIHByb3ZpZGVyczogW1xuICogICAgIHtcbiAqICAgICAgIHByb3ZpZGU6IFFEX1BBR0VfT0JKRUNUX1JFU09MVkVSX1RPS0VOLFxuICogICAgICAgdXNlQ2xhc3M6IE15T2JqZWN0TW9kZWxSZXNvbHZlclxuICogICAgIH1cbiAqICAgXVxuICogfSlcbiAqIGNsYXNzIE15UGFnZUNvbXBvbmVudCB7XG4gKiAgIGNvbnN0cnVjdG9yKEBJbmplY3QoUURfUEFHRV9PQkpFQ1RfUkVTT0xWRVJfVE9LRU4pIHByaXZhdGUgb2JqZWN0UmVzb2x2ZXI6IE15T2JqZWN0TW9kZWxSZXNvbHZlcikge31cbiAqXG4gKiAgIHVwZGF0ZVN0YXR1cygpIHtcbiAqICAgICB0aGlzLm9iamVjdFJlc29sdmVyLnVwZGF0ZU1ldGFkYXRhKHsgc3RhdGU6ICdVcGRhdGVkJyB9KTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKlxuICogIyMjIyAqKk92ZXJ2aWV3IFBhZ2UqKlxuICpcbiAqIE9uIGFuIG92ZXJ2aWV3IHBhZ2UsIGEgbGlzdCBvZiBidXNpbmVzcyBjYXNlcyBjYW4gYmUgZGlzcGxheWVkLiBUeXBpY2FsbHksIHRoaXMgaXMgZG9uZSBpbiBhICoqUWRUYWJsZSoqLCBpbmNsdWRpbmcgZmlsdGVycyBhbmQvb3Igc2VhcmNoIG9wdGlvbnMuIFRoZXJlIGFyZSBhY3Rpb25zIHRoYXQgaGFuZGxlIHJvdXRpbmcgdG8gdGhlIHJlbGF0ZWQgZGV0YWlsIHBhZ2VzLCB3aGVyZSB0aGUgYnVzaW5lc3MgY2FzZXMsIHJlcHJlc2VudGVkIGJ5IGEgYnVzaW5lc3Mgb2JqZWN0IG1vZGVsLCBjYW4gYmUgdmlld2VkLCBlZGl0ZWQsIG9yIG5ld2x5IGNyZWF0ZWQuXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IG92ZXJ2aWV3UGFnZUNvbmZpZzogUWRQYWdlQ29uZmlnPE15T2JqZWN0VHlwZT4gPSB7XG4gKiAgIHRpdGxlOiB7IGkxOG46ICdpMThuLm15LXBhZ2UudGl0bGUnIH0sXG4gKiAgIHBhZ2VUeXBlOiAnb3ZlcnZpZXcnLFxuICogICBwYWdlVHlwZUNvbmZpZzoge1xuICogICAgIGN1c3RvbUFjdGlvbnM6IFtcbiAqICAgICAgIHtcbiAqICAgICAgICAgaTE4bjogJ2kxOG4uY3VzdG9tLmFjdGlvbicsXG4gKiAgICAgICAgIGhhbmRsZXI6ICgpID0+IGRvU29tZXRoaW5nKClcbiAqICAgICAgIH1cbiAqICAgICBdXG4gKiAgIH1cbiAqIH07XG4gKiBgYGBcbiAqXG4gKiBgYGBodG1sXG4gKiA8cWQtcGFnZSBbY29uZmlnXT1cInBhZ2VDb25maWdcIj5cbiAqICAgPHFkLXNlY3Rpb24gW2NvbmZpZ109XCJzZWN0aW9uQ29uZmlnXCI+XG4gKiAgICAgPHFkLXRhYmxlIFtjb25maWddPVwidGFibGVDb25maWdcIj48L3FkLXRhYmxlPlxuICogICA8L3FkLXNlY3Rpb24+XG4gKiA8L3FkLXBhZ2U+XG4gKiBgYGBcbiAqXG4gKiBUbyBjb25maWd1cmUgY29udGV4dHMgZm9yIGEgcGFnZSwgeW91IGNhbiBlYXNpbHkgc2V0IGNvbnRleHRzIGluIHRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgb3ZlcnZpZXcgcGFnZS4gVGhleSBhcmUgdGhlbiBzZWxlY3RhYmxlIG9uIHRoZSBvdmVydmlldyBwYWdlOlxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBvdmVydmlld1BhZ2VDb25maWc6IFFkUGFnZUNvbmZpZzxNeU9iamVjdFR5cGU+ID0ge1xuICogICAvLyAuLi5cbiAqICAgY29udGV4dHM6IFtcbiAqICAgICB7XG4gKiAgICAgICBpZDogJ3R5cGVPZlRyYWZmaWMnLFxuICogICAgICAgbGFiZWw6IHsgaTE4bjogJ1ZlcmtlaHJzYXJ0JyB9LFxuICogICAgICAgdHlwZTogJ3NpbmdsZScsXG4gKiAgICAgICBzZWxlY3RlZDoge1xuICogICAgICAgICBsYWJlbDogeyBpMThuOiAnU2NoaWVuZScgfSxcbiAqICAgICAgICAgdmFsdWU6ICdyYWlsJ1xuICogICAgICAgfSxcbiAqICAgICAgIG9wdGlvbnM6IFtcbiAqICAgICAgICAge1xuICogICAgICAgICAgIHZhbHVlOiAncmFpbCcsXG4gKiAgICAgICAgICAgbGFiZWw6IHsgaTE4bjogJ1NjaGllbmUnIH1cbiAqICAgICAgICAgfSxcbiAqICAgICAgICAge1xuICogICAgICAgICAgIHZhbHVlOiAnYWlyJyxcbiAqICAgICAgICAgICBsYWJlbDogeyBpMThuOiAnTHVmdCcgfVxuICogICAgICAgICB9XG4gKiAgICAgICBdXG4gKiAgICAgfVxuICogICBdXG4gKiAgIC8vIC4uLlxuICogfTtcbiAqIGBgYFxuICpcbiAqICMjIyMgKipDcmVhdGUgUGFnZSoqXG4gKlxuICogT24gdGhlIGNyZWF0ZSBwYWdlLCBhIG5ldyBidXNpbmVzcyBjYXNlIGNhbiBiZSBjcmVhdGVkLiBUaGlzIHBhZ2UgdHlwaWNhbGx5IGluY2x1ZGVzIGZvcm1zIGZvciBlbnRlcmluZyBkYXRhLiBUaGUgc3VibWl0IGJ1dHRvbiBpcyBwYXJhbWV0ZXJpemVkIHdpdGggdGhlIGZvcm0gZGF0YSBhbmQgaXMgdmFsaWRhdGVkIHRocm91Z2ggdGhlIFFkUGFnZVN0ZXBwZXIuXG4gKiBUaGUgY2xpY2sgb24gdGhlIHN1Ym1pdCBidXR0b24gc2hvdWxkIHN1Ym1pdCB0aGUgY3JlYXRpb24gb2YgdGhlIGJ1c2luZXNzIGNhc2Ugb3Igb2JqZWN0LiBZb3UgY2FuIGRlZmluZSBhIHNwZWNpZmljIGhhbmRsZXIgaW4gdGhlIHN1Ym1pdCBidXR0b24ncyBjb25maWd1cmF0aW9uIHRvIGNyZWF0ZSB0aGUgb2JqZWN0LlxuICogSWYgb25seSBvbmUgc3RlcCBpcyBuZWVkZWQsIHRoZSBzaW5nbGUtc3RlcCBtb2RlIGNhbiBiZSB1c2VkLiBJbiBzaW5nbGUtc3RlcCBtb2RlLCB0aGUgc3RlcHBlciBpcyB2aXN1YWxseSBoaWRkZW4gYW5kIGJlaGF2ZXMgbGlrZSBhICoqUWRTZWN0aW9uKiouXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IGNyZWF0ZVBhZ2VDb25maWc6IFFkUGFnZUNvbmZpZzxNeU9iamVjdFR5cGU+ID0ge1xuICogICB0aXRsZTogeyBpMThuOiAnaTE4bi5wYWdlLnRpdGxlJyB9LFxuICogICBwYWdlVHlwZTogJ2NyZWF0ZScsXG4gKiAgIHBhZ2VUeXBlQ29uZmlnOiB7XG4gKiAgICAgc3VibWl0OiB7XG4gKiAgICAgICBoYW5kbGVyOiAoZm9ybVZhbHVlcykgPT4gaGFuZGxlU3VibWl0KGZvcm1WYWx1ZXMpXG4gKiAgICAgfVxuICogICB9XG4gKiB9O1xuICogYGBgXG4gKlxuICogYGBgaHRtbFxuICogPCEtLSBGb3IgXCJRdWljayBBZGRcIiB1c2UgUGFnZVN0ZXBwZXIgaW4gc2luZ2xlLXN0ZXAgbW9kZSAtLT5cbiAqIDxxZC1wYWdlIFtjb25maWddPVwicGFnZUNvbmZpZ1wiPlxuICogICA8cWQtcGFnZS1zdGVwcGVyIFtjb25maWddPVwic3RlcHBlckNvbmZpZ1wiPlxuICogICAgIDxxZC1wYWdlLXN0ZXAgW2NvbmZpZ109XCJzdGVwQ29uZmlnT25lXCI+XG4gKiAgICAgICA8cWQtc2VjdGlvbiBbY29uZmlnXT1cInNlY3Rpb25Db25maWdcIj5cbiAqICAgICAgICAgPHFkLWdyaWQgW2NvbmZpZ109XCJncmlkQ29uZmlnXCIgW2Zvcm1Hcm91cF09XCJteUZvcm1zXCIgcWRDb25uZWN0Rm9ybVN0YXRlVG9QYWdlPVwibXlGb3Jtc1wiPlxuICogICAgICAgICAgIDwhLS0geW91ciBxZC1mb3JtLWNvbXBvbmVudHMgaGVyZSAtLT5cbiAqICAgICAgICAgPC9xZC1ncmlkPlxuICogICAgICAgPC9xZC1zZWN0aW9uPlxuICogICAgIDwvcWQtcGFnZS1zdGVwPlxuICogICA8L3FkLXBhZ2Utc3RlcHBlcj5cbiAqIDwvcWQtcGFnZT5cbiAqXG4gKiA8IS0tIFdpdGggUGFnZVN0ZXBwZXIgdXNpbmcgbXVsdGlwbGUgc3RlcHMgLS0+XG4gKiA8cWQtcGFnZSBbY29uZmlnXT1cInBhZ2VDb25maWdcIj5cbiAqICAgPHFkLXBhZ2Utc3RlcHBlciBbY29uZmlnXT1cInN0ZXBwZXJDb25maWdcIj5cbiAqICAgICA8cWQtcGFnZS1zdGVwIFtjb25maWddPVwic3RlcENvbmZpZ09uZVwiPlxuICogICAgICAgPHFkLXNlY3Rpb24gW2NvbmZpZ109XCJzZWN0aW9uQ29uZmlnXCI+XG4gKiAgICAgICAgIDxxZC1ncmlkIFtjb25maWddPVwiZ3JpZENvbmZpZ1wiIFtmb3JtR3JvdXBdPVwibXlGb3Jtc09uZVwiIHFkQ29ubmVjdEZvcm1TdGF0ZVRvUGFnZT1cIm15Rm9ybXNPbmVcIj5cbiAqICAgICAgICAgICA8IS0tIHlvdXIgcWQtZm9ybS1jb21wb25lbnRzIGhlcmUgLS0+XG4gKiAgICAgICAgIDwvcWQtZ3JpZD5cbiAqICAgICAgIDwvcWQtc2VjdGlvbj5cbiAqICAgICA8L3FkLXBhZ2Utc3RlcD5cbiAqICAgICA8cWQtcGFnZS1zdGVwIFtjb25maWddPVwic3RlcENvbmZpZ1R3b1wiPlxuICogICAgICAgPHFkLXNlY3Rpb24gW2NvbmZpZ109XCJzZWN0aW9uQ29uZmlnXCI+XG4gKiAgICAgICAgIDxxZC1ncmlkIFtjb25maWddPVwiZ3JpZENvbmZpZ1wiIFtmb3JtR3JvdXBdPVwibXlGb3Jtc1R3b1wiIHFkQ29ubmVjdEZvcm1TdGF0ZVRvUGFnZT1cIm15Rm9ybXNUd29cIj5cbiAqICAgICAgICAgICA8IS0tIHlvdXIgcWQtZm9ybS1jb21wb25lbnRzIGhlcmUgLS0+XG4gKiAgICAgICAgIDwvcWQtZ3JpZD5cbiAqICAgICAgIDwvcWQtc2VjdGlvbj5cbiAqICAgICA8L3FkLXBhZ2Utc3RlcD5cbiAqICAgPC9xZC1wYWdlLXN0ZXBwZXI+XG4gKiA8L3FkLXBhZ2U+XG4gKiBgYGBcbiAqXG4gKiBUbyBhbGxvdyByZXNvbHZpbmcgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgd2hlbiBnb2luZyB0byBuZXh0IHN0ZXAsIHlvdSBjYW4gcHJvdmlkZSBhIHJlc29sdmVyIG9mIHR5cGUgUWRQYWdlU3RlcFJlc29sdmVyOlxuICpcbiAqIGBgYHRzXG4gKiBjbGFzcyBNeVJlc29sdmVyIGltcGxlbWVudHMgUWRQYWdlU3RlcFJlc29sdmVyIHtcbiAqICAgLi4uXG4gKlxuICogICByZXNvbHZlKGluZGV4OiBudW1iZXIpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAqICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXCJuZXh0LXN0ZXAuY29tXCIpO1xuICogICB9XG4gKiB9XG4gKlxuICogQENvbXBvbmVudCh7XG4gKiAgIHNlbGVjdG9yOiAncWQtdWktcGFnZS1jcmVhdGUnLFxuICogICB0ZW1wbGF0ZVVybDogJy4vY3JlYXRlLmNvbXBvbmVudC5odG1sJyxcbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAge1xuICogICAgICAgcHJvdmlkZTogUURfUEFHRV9TVEVQX1JFU09MVkVSX1RPS0VOLFxuICogICAgICAgdXNlQ2xhc3M6IFBhZ2VTdGVwUmVzb2x2ZXJcbiAqICAgICB9XG4gKiAgIF1cbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQ3JlYXRlQ29tcG9uZW50IHtcbiAqIGBgYFxuICpcbiAqICMjIyMgKipJbnNwZWN0IFBhZ2UqKlxuICpcbiAqIE9uIGFuIGluc3BlY3QgcGFnZSwgYSBzcGVjaWZpYyBidXNpbmVzcyBjYXNlIGlzIGRpc3BsYXllZCBhbmQgbWF5IGJlIGVkaXRlZCBvciBzdWJtaXR0ZWQuIERlcGVuZGluZyBvbiB5b3VyIG5lZWRzIHlvdSBjYW4gaGlkZSB0aGUgc3VibWl0IGJ1dHRvbi5cbiAqIEluIGNvbnRyYXN0IHRvIGEgY3JlYXRlIHBhZ2UsIGFuIGV4aXN0aW5nIG9iamVjdCBpcyBzaG93biBhbmQgcG90ZW50aWFsbHkgdXBkYXRlZC5cbiAqXG4gKiBUaGUgcGFnZSBvcGVyYXRlcyBpbiBvbmUgb2YgdHdvIG1vZGVzIC0gYHZpZXdgIG9yIGBlZGl0YCAtIGFzIGRlZmluZWQgYnkgdGhlIGBvcGVyYXRpb25Nb2RlYCBjb25maWd1cmF0aW9uIGtleS5cbiAqXG4gKiBUaGUgYHZpZXdvbmx5YCBiZWhhdmlvciBkZWZpbmVkIGJ5IHRoZSBvcGVyYXRpb24gbW9kZSBpcyBhdXRvbWF0aWNhbGx5IHByb3BhZ2F0ZWQgdG8gYWxsIG5lc3RlZCBRZFNlY3Rpb24gY29tcG9uZW50cyB0aGF0IGFyZSBwYXJ0IG9mIGEgUUxTLFxuICogYXMgd2VsbCBhcyB0byBmdW5jdGlvbmFsIHBhdHRlcm5zIHN1Y2ggYXMgUWRUYWJsZSwgUWRUcmVlLCBRZEZpbGVDb2xsZWN0b3IsIGFuZCBRZFF1aWNrRWRpdC5cbiAqIEFsbCBmb3JtcyBhcmUgcmVuZGVyZWQgZWl0aGVyIGluIHZpZXdvbmx5IG9yIGVkaXRhYmxlIG1vZGUgYWNjb3JkaW5nbHkuXG4gKlxuICogVGhpcyBiZWhhdmlvciBjYW4gYmUgZXhwbGljaXRseSBvdmVycmlkZGVuIGluIGVhY2ggY29tcG9uZW504oCZcyBjb25maWd1cmF0aW9uIC0gZm9yIGV4YW1wbGUsIHRvIGFsbG93IGNlcnRhaW4gZmllbGRzIHRvIHJlbWFpbiBlZGl0YWJsZS5cbiAqXG4gKiAtICoqdmlldyoqOiBBIHN1Ym1pdCBhY3Rpb24gY2FuIG9wdGlvbmFsbHkgYmUgYWRkZWQgZm9yIHByb2Nlc3MtcmVsYXRlZCBvcGVyYXRpb25zIHN1Y2ggYXMgc3RhdHVzIHVwZGF0ZXMuXG4gKiAgIFRoZSBhY3Rpb24gcmVjZWl2ZXMgdGhlIGN1cnJlbnQgZm9ybSB2YWx1ZXMgYW5kIHN1cHBvcnRzIHZhbGlkYXRpb24gYW5kIHBhcmFtZXRlcml6YXRpb24uXG4gKlxuICogLSAqKmVkaXQqKjogVHlwaWNhbGx5IGluY2x1ZGVzIGEgc2F2ZSBidXR0b24gdG8gcGVyc2lzdCBjaGFuZ2VzIG1hZGUgaW4gZWRpdGFibGUgZmllbGRzLlxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBpbnNwZWN0UGFnZUNvbmZpZzogUWRQYWdlQ29uZmlnPE15T2JqZWN0VHlwZT4gPSB7XG4gKiAgIHRpdGxlOiB7IGkxOG46ICdpMThuLnBhZ2UudGl0bGUnIH0sXG4gKiAgIHBhZ2VUeXBlOiAnaW5zcGVjdCcsXG4gKiAgIHBhZ2VUeXBlQ29uZmlnOiB7XG4gKiAgICAgb3BlcmF0aW9uTW9kZTogJ2VkaXQnLFxuICogICAgIGNhbmNlbDoge1xuICogICAgICAgaGFuZGxlcjogKCkgPT4gaGFuZGxlQ2FuY2VsKClcbiAqICAgICB9LFxuICogICAgIHNhdmU6IHtcbiAqICAgICAgIGhhbmRsZXI6IChmb3JtVmFsdWVzKSA9PiBoYW5kbGVTYXZlKGZvcm1WYWx1ZXMpXG4gKiAgICAgfVxuICogICB9XG4gKiB9O1xuICogYGBgXG4gKlxuICogYGBgaHRtbFxuICogPCEtLSB3aXRoIFNlY3Rpb24gLS0+XG4gKiA8cWQtcGFnZSBbY29uZmlnXT1cInBhZ2VDb25maWdcIj5cbiAqICAgPHFkLXNlY3Rpb24gW2NvbmZpZ109XCJzZWN0aW9uQ29uZmlnXCI+XG4gKiAgICAgPHFkLWdyaWQgW2NvbmZpZ109XCJncmlkQ29uZmlnXCIgW2Zvcm1Hcm91cF09XCJteUZvcm1zXCIgcWRDb25uZWN0Rm9ybVN0YXRlVG9QYWdlPVwibXlGb3Jtc1wiPlxuICogICAgICAgPCEtLSB5b3VyIHFkLWZvcm0tY29tcG9uZW50cyBoZXJlIC0tPlxuICogICAgIDwvcWQtZ3JpZD5cbiAqICAgPC9xZC1zZWN0aW9uPlxuICogPC9xZC1wYWdlPlxuICpcbiAqIDwhLS0gd2l0aCBQYWdlVGFicyAtLT5cbiAqIDxxZC1wYWdlIFtjb25maWddPVwicGFnZUNvbmZpZ1wiPlxuICogICA8cWQtcGFnZS10YWJzIFtjb25maWddPVwic3RlcHBlckNvbmZpZ1wiPlxuICogICAgIDxxZC1wYWdlLXRhYiBbY29uZmlnXT1cInRhYkNvbmZpZ09uZVwiPlxuICogICAgICAgPHFkLXNlY3Rpb24gW2NvbmZpZ109XCJzZWN0aW9uQ29uZmlnXCI+XG4gKiAgICAgICAgIDxxZC1ncmlkIFtjb25maWddPVwiZ3JpZENvbmZpZ1wiIFtmb3JtR3JvdXBdPVwibXlGb3Jtc09uZVwiIHFkQ29ubmVjdEZvcm1TdGF0ZVRvUGFnZT1cIm15Rm9ybXNPbmVcIj5cbiAqICAgICAgICAgICA8IS0tIHlvdXIgcWQtZm9ybS1jb21wb25lbnRzIGhlcmUgLS0+XG4gKiAgICAgICAgIDwvcWQtZ3JpZD5cbiAqICAgICAgIDwvcWQtc2VjdGlvbj5cbiAqICAgICA8L3FkLXBhZ2UtdGFiPlxuICogICAgIDxxZC1wYWdlLXRhYiBbY29uZmlnXT1cInRhYkNvbmZpZ1R3b1wiPlxuICogICAgICAgPHFkLXNlY3Rpb24gW2NvbmZpZ109XCJzZWN0aW9uQ29uZmlnXCI+XG4gKiAgICAgICAgIDxxZC1ncmlkIFtjb25maWddPVwiZ3JpZENvbmZpZ1wiIFtmb3JtR3JvdXBdPVwibXlGb3Jtc1R3b1wiIHFkQ29ubmVjdEZvcm1TdGF0ZVRvUGFnZT1cIm15Rm9ybXNUd29cIj5cbiAqICAgICAgICAgICA8IS0tIHlvdXIgcWQtZm9ybS1jb21wb25lbnRzIGhlcmUgLS0+XG4gKiAgICAgICAgIDwvcWQtZ3JpZD5cbiAqICAgICAgIDwvcWQtc2VjdGlvbj5cbiAqICAgICA8L3FkLXBhZ2UtdGFiPlxuICogICA8L3FkLXBhZ2UtdGFicz5cbiAqIDwvcWQtcGFnZT5cbiAqIGBgYFxuICpcbiAqICMjIyMgKipDdXN0b20gUGFnZSoqXG4gKlxuICogYGBgdHNcbiAqIGNvbnN0IGN1c3RvbVBhZ2VDb25maWc6IFFkUGFnZUNvbmZpZzxNeU9iamVjdFR5cGU+ID0ge1xuICogICB0aXRsZTogeyBpMThuOiAnaTE4bi5wYWdlLnRpdGxlJyB9LFxuICogICBwYWdlVHlwZTogJ2N1c3RvbScsXG4gKiAgIHBhZ2VUeXBlQ29uZmlnOiB7XG4gKiAgICAgY3VzdG9tQWN0aW9uczogW1xuICogICAgICAge1xuICogICAgICAgICBpMThuOiAnaTE4bi5jdXN0b20uYWN0aW9uJyxcbiAqICAgICAgICAgaGFuZGxlcjogKCkgPT4gZG9Tb21ldGhpbmcoKVxuICogICAgICAgfVxuICogICAgIF1cbiAqICAgfVxuICogfTtcbiAqIGBgYFxuICpcbiAqIGBgYGh0bWxcbiAqIDxxZC1wYWdlIFtjb25maWddPVwicGFnZUNvbmZpZ1wiPlxuICogICA8IS0tIFBsYWNlIGNvbnRlbnQgaGVyZSB0aGF0IGRvZXNu4oCZdCBmaXQgdGhlIG90aGVyIHBhZ2UgdHlwZXMgLS0+XG4gKiA8L3FkLXBhZ2U+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncWQtcGFnZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9wYWdlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcGFnZS5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtRZFBhZ2VGb290ZXJTZXJ2aWNlLCBRZEZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlLCBRZFBhZ2VTdWJtaXRBY3Rpb25TZXJ2aWNlLCBRZFJlc29sdmVyVHJpZ2dlclNlcnZpY2VdLFxuICBob3N0OiB7ICdbY2xhc3MuaGFzLWNvbnRyb2wtcGFuZWxdJzogJ2lzQ29udHJvbFBhbmVsVmlzaWJsZScsICdbY2xhc3MuY29udHJvbC1wYW5lbC1icm9hZF0nOiAnaXNDb250cm9sUGFuZWxCcm9hZCcgfVxufSlcbmV4cG9ydCBjbGFzcyBRZFBhZ2VDb21wb25lbnQ8VCBleHRlbmRzIG9iamVjdD4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIFRoaXMgcHJvcGVydHkgZGVmaW5lcyB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIFFkUGFnZSBjb21wb25lbnQsIGluY2x1ZGluZyB0aGUgcGFnZSB0eXBlLFxuICAgKiB0aXRsZSwgYW5kIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciBlYWNoIHR5cGUgb2YgcGFnZS5cbiAgICovXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gIGNvbmZpZyE6IFFkUGFnZUNvbmZpZzxUPjtcblxuICAvKipcbiAgICogQSBzdGF0aWMgdGVzdCBJRCBmb3IgaW50ZWdyYXRpb24gdGVzdHMgY2FuIGJlIHNldC4gPGJyIC8+XG4gICAqIFRoZSB2YWx1ZSBmb3IgdGhlIEhUTUwgYXR0cmlidXRlIFtkYXRhLXRlc3QtaWRdLlxuICAgKi9cbiAgQElucHV0KCdkYXRhLXRlc3QtaWQnKSB0ZXN0SWQ/ID0gJ3BhZ2UnO1xuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgd2hlbiB0aGUgb3BlcmF0aW9uIG1vZGUgb2YgdGhlIGluc3BlY3QgcGFnZSBpcyBjaGFuZ2VkLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIG9wZXJhdGlvbk1vZGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxRZEluc3BlY3RPcGVyYXRpb25Nb2RlPigpO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oUWRTZWN0aW9uQ29tcG9uZW50KVxuICBzZWN0aW9ucyE6IFF1ZXJ5TGlzdDxRZFNlY3Rpb25Db21wb25lbnQ+O1xuXG4gIEBDb250ZW50Q2hpbGQoUWRQYWdlQ29udHJvbFBhbmVsQ29tcG9uZW50KVxuICBjb250cm9sUGFuZWwhOiBRZFBhZ2VDb250cm9sUGFuZWxDb21wb25lbnQ7XG5cbiAgQENvbnRlbnRDaGlsZChRZFBhZ2VTdGVwcGVyQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIHN0ZXBwZXJDb21wb25lbnQ/OiBRZFBhZ2VTdGVwcGVyQ29tcG9uZW50O1xuXG4gIEBDb250ZW50Q2hpbGQoUWRQYWdlVGFic0NvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICB0YWJzQ29tcG9uZW50PzogUWRQYWdlVGFic0NvbXBvbmVudDtcblxuICBAQ29udGVudENoaWxkKFFkUGFnZVN0ZXBwZXJBZGFwdGVyRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIHN0ZXBwZXJBZGFwdGVyRGlyZWN0aXZlPzogUWRQYWdlU3RlcHBlckFkYXB0ZXJEaXJlY3RpdmU7XG5cbiAgQENvbnRlbnRDaGlsZChRZFBhZ2VUYWJzQWRhcHRlckRpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICB0YWJzQWRhcHRlckRpcmVjdGl2ZT86IFFkUGFnZVRhYnNBZGFwdGVyRGlyZWN0aXZlO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oUWRQYWdlSW5mb0Jhbm5lckNvbXBvbmVudClcbiAgaW5mb0Jhbm5lcnMhOiBRdWVyeUxpc3Q8UWRQYWdlSW5mb0Jhbm5lckNvbXBvbmVudD47XG5cbiAgZm9vdGVySGFzQ29udGVudCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGlzRm9vdGVyVmlzaWJsZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgcHJvamVjdGlvbkd1YXJkTWVzc2FnZSA9XG4gICAgJ1FELVVJIHwgUWRQYWdlIC0gVGhpcyBjb250ZW50IGlzIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSB1c2UgUWRTZWN0aW9uQWRhcHRlckRpcmVjdGl2ZSBmb3IgY3VzdG9tIGNvbnRlbnQgcHJvamVjdGlvbi4nO1xuXG4gIHByaXZhdGUgX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgZ2V0IGlzQ29udHJvbFBhbmVsVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb250cm9sUGFuZWwgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNvbnRyb2xQYW5lbC5jb25maWc/LmlzSGlkZGVuICE9PSB0cnVlO1xuICB9XG5cbiAgZ2V0IGlzQ29udHJvbFBhbmVsQnJvYWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29udHJvbFBhbmVsPy5jb25maWc/LndpZHRoID09PSAnYnJvYWQnO1xuICB9XG5cbiAgZ2V0IGhhc05hdmlnYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMuc3RlcHBlckNvbXBvbmVudCB8fCB0aGlzLnRhYnNDb21wb25lbnQgfHwgdGhpcy5zdGVwcGVyQWRhcHRlckRpcmVjdGl2ZSB8fCB0aGlzLnRhYnNBZGFwdGVyRGlyZWN0aXZlKTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaGFzLWZvb3RlcicpXG4gIGdldCBmb290ZXJWaXNpYmxlKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmlzRm9vdGVyVmlzaWJsZTtcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaGFzLWluZm8tYmFubmVycycpXG4gIGdldCBoYXNJbmZvQmFubmVycygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pbmZvQmFubmVycy5sZW5ndGggPiAwO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBwYWdlU3RvcmVTZXJ2aWNlOiBRZFBhZ2VTdG9yZVNlcnZpY2U8VD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBmb290ZXJTZXJ2aWNlOiBRZFBhZ2VGb290ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybUdyb3VwTWFuYWdlclNlcnZpY2U6IFFkRm9ybUdyb3VwTWFuYWdlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdWJtaXRBY3Rpb25TZXJ2aWNlOiBRZFBhZ2VTdWJtaXRBY3Rpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nOiBRZERpYWxvZ1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChRRF9TQUZFX0JPVFRPTV9PRkZTRVQpIHByaXZhdGUgYm90dG9tT2Zmc2V0JD86IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+XG4gICkge1xuICAgIHRoaXMuZm9vdGVySGFzQ29udGVudCQgPSB0aGlzLmZvb3RlclNlcnZpY2UuZm9vdGVySGFzQ29udGVudCQ7XG4gICAgdGhpcy5mb290ZXJIYXNDb250ZW50JC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKGlzVmlzaWJsZSA9PiB7XG4gICAgICB0aGlzLmlzRm9vdGVyVmlzaWJsZSA9IGlzVmlzaWJsZTtcbiAgICAgIHRoaXMuYm90dG9tT2Zmc2V0JD8ubmV4dChpc1Zpc2libGUgPyBTQUZFX0JPVFRPTV9PRkZTRVRfUFggOiAwKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tDb25maWdWYWxpZGl0eSgpO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnKSB0aGlzLnBhZ2VTdG9yZVNlcnZpY2UuaW5pdFBhZ2VTdGF0ZSh0aGlzLmNvbmZpZyk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnQ2hhbmdlID0gY2hhbmdlc1snY29uZmlnJ107XG5cbiAgICBpZiAoIWNvbmZpZ0NoYW5nZSkgcmV0dXJuO1xuXG4gICAgY29uc3QgeyBjdXJyZW50VmFsdWU6IGN1cnIsIHByZXZpb3VzVmFsdWU6IHByZXYgfSA9IGNvbmZpZ0NoYW5nZTtcblxuICAgIGlmIChjdXJyPy5wYWdlVHlwZUNvbmZpZz8uc3VibWl0Py5pc0hpZGRlbiAhPT0gcHJldj8ucGFnZVR5cGVDb25maWc/LnN1Ym1pdD8uaXNIaWRkZW4pXG4gICAgICB0aGlzLmZvb3RlclNlcnZpY2UudXBkYXRlQWN0aW9ucyhbXG4gICAgICAgIHsgYWN0aW9uS2V5OiAnc3VibWl0JywgcGFydGlhbEFjdGlvbjogeyBpc1Zpc2libGU6ICFjdXJyPy5wYWdlVHlwZUNvbmZpZz8uc3VibWl0Py5pc0hpZGRlbiB9IH1cbiAgICAgIF0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpZy5wYWdlVHlwZSA9PT0gJ2NyZWF0ZScpIHRoaXMuc2V0dXBDcmVhdGVQYWdlRm9vdGVyQWN0aW9ucygpO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLnBhZ2VUeXBlID09PSAnY3JlYXRlJyAmJiB0aGlzLmNvbmZpZz8ucGFnZVR5cGVDb25maWc/LmNhbmNlbCAhPT0gdW5kZWZpbmVkKVxuICAgICAgdGhpcy5oYW5kbGVDYW5jZWxBY3Rpb25XaXRoRm9ybUNoYW5nZXMoKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5wYWdlVHlwZSA9PT0gJ2NyZWF0ZScgJiYgdGhpcy5jb25maWc/LnBhZ2VUeXBlQ29uZmlnPy5zYXZlRHJhZnQgIT09IHVuZGVmaW5lZClcbiAgICAgIHRoaXMuaW5pdFNhdmVEcmFmdEZvb3RlckFjdGlvbigpO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLnBhZ2VUeXBlID09PSAnaW5zcGVjdCcpXG4gICAgICB0aGlzLnBhZ2VTdG9yZVNlcnZpY2UuaXNWaWV3b25seSRcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCQpKVxuICAgICAgICAuc3Vic2NyaWJlKGlzVmlld29ubHkgPT5cbiAgICAgICAgICB0aGlzLnVwZGF0ZUluc3BlY3RQYWdlT3BlcmF0aW9uTW9kZShcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLnBhZ2VUeXBlQ29uZmlnIGFzIFFkUGFnZVR5cGVJbnNwZWN0Q29uZmlnLFxuICAgICAgICAgICAgaXNWaWV3b25seSA/ICd2aWV3JyA6ICdlZGl0J1xuICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5ib3R0b21PZmZzZXQkPy5uZXh0KDApO1xuICAgIHRoaXMuX2Rlc3Ryb3llZCQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tDb25maWdWYWxpZGl0eSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnKSBjb25zb2xlLndhcm4oJ1FkVWkgfCBRZFBhZ2VDb21wb25lbnQgLSBUbyBjb25maWd1cmUgdGhlIHBhZ2UgeW91IHNob3VsZCBwcm92aWRlIGEgdmFsaWQgY29uZmlnLicpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cENyZWF0ZVBhZ2VGb290ZXJBY3Rpb25zKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhZ2VUeXBlQ29uZmlnID0gdGhpcy5jb25maWc/LnBhZ2VUeXBlQ29uZmlnIGFzIFFkUGFnZVR5cGVDcmVhdGVDb25maWc7XG4gICAgY29uc3QgYWN0aW9uS2V5czogUWRDcmVhdGVGb290ZXJBY3Rpb25LZXlbXSA9IFsnc2F2ZURyYWZ0JywgJ2NhbmNlbCcsICdzdWJtaXQnXTtcbiAgICBjb25zdCBhY3Rpb25zOiBQYXJ0aWFsRm9vdGVyQWN0aW9uW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgYWN0aW9uS2V5IG9mIGFjdGlvbktleXMpIHtcbiAgICAgIGNvbnN0IGFjdGlvbiA9IHBhZ2VUeXBlQ29uZmlnW2FjdGlvbktleV07XG5cbiAgICAgIGlmICghYWN0aW9uKSBjb250aW51ZTtcblxuICAgICAgYWN0aW9ucy5wdXNoKHtcbiAgICAgICAgYWN0aW9uS2V5LFxuICAgICAgICBwYXJ0aWFsQWN0aW9uOiB7XG4gICAgICAgICAgLi4uKGFjdGlvbj8ubGFiZWw/LmkxOG4gPyB7IHRpdGxlSTE4bjogYWN0aW9uLmxhYmVsLmkxOG4gfSA6IHt9KSxcbiAgICAgICAgICBoYW5kbGVyOiB0aGlzLmdlbmVyYXRlRm9vdGVyQWN0aW9uSGFuZGxlcihhY3Rpb24/LmhhbmRsZXIpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZm9vdGVyU2VydmljZS51cGRhdGVBY3Rpb25zKGFjdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDYW5jZWxBY3Rpb25XaXRoRm9ybUNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXBNYW5hZ2VyU2VydmljZVxuICAgICAgLiRoYXNWYWx1ZXNDaGFuZ2VkKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSlcbiAgICAgIC5zdWJzY3JpYmUoaGFzQ2hhbmdlZCA9PiB7XG4gICAgICAgIHRoaXMuZm9vdGVyU2VydmljZS51cGRhdGVBY3Rpb25zKFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb25LZXk6ICdjYW5jZWwnLFxuICAgICAgICAgICAgcGFydGlhbEFjdGlvbjoge1xuICAgICAgICAgICAgICBoYW5kbGVyOiBoYXNDaGFuZ2VkXG4gICAgICAgICAgICAgICAgPyAoKTogdm9pZCA9PiB0aGlzLnNldHVwU3VibWl0QWN0aW9uVmFsaWRhdGlvbigpXG4gICAgICAgICAgICAgICAgOiAoKTogdm9pZCA9PiAodGhpcy5jb25maWc/LnBhZ2VUeXBlQ29uZmlnIGFzIFFkUGFnZVR5cGVDcmVhdGVDb25maWcpPy5jYW5jZWw/LmhhbmRsZXIoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFNhdmVEcmFmdEZvb3RlckFjdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBwYWdlVHlwZUNvbmZpZyA9IHRoaXMuY29uZmlnLnBhZ2VUeXBlQ29uZmlnIGFzIFFkUGFnZVR5cGVDcmVhdGVDb25maWc7XG5cbiAgICB0aGlzLmZvb3RlclNlcnZpY2Uuc2V0QWN0aW9ucyhbXG4gICAgICB7XG4gICAgICAgIGtleTogJ3NhdmVEcmFmdCcsXG4gICAgICAgIGFjdGlvbjoge1xuICAgICAgICAgIHRpdGxlSTE4bjogJ2kxOG4ucWQucGFnZS5mb290ZXIuc2F2ZURyYWZ0JyxcbiAgICAgICAgICB0eXBlOiBRZEZvb3RlckFjdGlvblR5cGUuU2Vjb25kYXJ5LFxuICAgICAgICAgIGhhbmRsZXI6ICgpOiB2b2lkID0+IHBhZ2VUeXBlQ29uZmlnPy5zYXZlRHJhZnQ/LmhhbmRsZXIoKSxcbiAgICAgICAgICBpc1Zpc2libGU6IHRydWUsXG4gICAgICAgICAgaXNEaXNhYmxlZDogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJbnNwZWN0UGFnZU9wZXJhdGlvbk1vZGUocGFnZVR5cGVDb25maWc6IFFkUGFnZVR5cGVJbnNwZWN0Q29uZmlnLCBtb2RlOiBRZEluc3BlY3RPcGVyYXRpb25Nb2RlKTogdm9pZCB7XG4gICAgdGhpcy5zdWJtaXRBY3Rpb25TZXJ2aWNlLnNldFN1Ym1pdEFjdGlvbkZvckluc3BlY3QocGFnZVR5cGVDb25maWcsIG1vZGUgPT09ICd2aWV3Jyk7XG5cbiAgICB0aGlzLmZvb3RlclNlcnZpY2UudXBkYXRlQWN0aW9ucyhbXG4gICAgICB7IGFjdGlvbktleTogJ3N1Ym1pdCcsIHBhcnRpYWxBY3Rpb246IHsgaXNWaXNpYmxlOiBtb2RlID09PSAndmlldycgJiYgIXBhZ2VUeXBlQ29uZmlnPy5zdWJtaXQ/LmlzSGlkZGVuIH0gfVxuICAgIF0pO1xuXG4gICAgdGhpcy5pbml0U3VibWl0VmFsaWRhdGlvbigpO1xuXG4gICAgaWYgKHRoaXMuX2lzSW5pdGlhbGl6ZWQpIHRoaXMub3BlcmF0aW9uTW9kZUNoYW5nZWQuZW1pdChtb2RlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVGb290ZXJBY3Rpb25IYW5kbGVyKGhhbmRsZXI/OiAodmFsdWVzOiB1bmtub3duKSA9PiB2b2lkKTogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICBpZiAoIWhhbmRsZXIpIHJldHVybjtcblxuICAgICAgaGFuZGxlcih0aGlzLmZvcm1Hcm91cE1hbmFnZXJTZXJ2aWNlLmhhc0Zvcm1Hcm91cHMoKSA/IHRoaXMuZm9ybUdyb3VwTWFuYWdlclNlcnZpY2UuZ2V0QWxsVmFsdWVzKCkgOiBhcmdzKTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFN1Ym1pdEFjdGlvblZhbGlkYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5kaWFsb2dcbiAgICAgIC5vcGVuKFFkUGFnZUNhbmNlbENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICB0aXRsZTogeyBpMThuOiAnaTE4bi5xZC5wYWdlLmNhbmNlbC5jb25maXJtYXRpb24uZGlhbG9nLnRpdGxlJyB9LFxuICAgICAgICBkaWFsb2dTaXplOiBRZERpYWxvZ1NpemUuU21hbGwsXG4gICAgICAgIGRhdGE6IHRoaXMuY29uZmlnLnBhZ2VUeXBlQ29uZmlnXG4gICAgICB9KVxuICAgICAgLmNsb3NlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSlcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFN1Ym1pdFZhbGlkYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXBNYW5hZ2VyU2VydmljZVxuICAgICAgLiRhcmVGb3JtR3JvdXBzVmFsaWQoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQkKSxcbiAgICAgICAgdGFwKGlzVmFsaWQgPT4ge1xuICAgICAgICAgIHRoaXMuZm9vdGVyU2VydmljZS51cGRhdGVBY3Rpb25zKFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYWN0aW9uS2V5OiAnc3VibWl0JyxcbiAgICAgICAgICAgICAgcGFydGlhbEFjdGlvbjoge1xuICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxJbmZvOiBpc1ZhbGlkXG4gICAgICAgICAgICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgOiB7IGluZm9UeXBlOiAnd2FybmluZycsIG1lc3NhZ2U6IHsgaTE4bjogJ2kxOG4ucWQucGFnZS5zdWJtaXQuaW52YWxpZEZvcm0nIH0gfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXSk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxtYWluIHFkU25hY2tiYXJMaXN0ZW5lcj5cbiAgPHFkLXBhZ2Utb2JqZWN0LWhlYWRlclxuICAgIFtkYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbiAgICBbYXR0ci5kYXRhLXRlc3QtaWRdPVwidGVzdElkICsgJ29iamVjdC1oZWFkZXInXCJcbiAgICBbY29uZmlnXT1cImNvbmZpZ1wiXG4gICAgW2hhc05hdmlnYXRpb25dPVwiaGFzTmF2aWdhdGlvblwiXG4gID48L3FkLXBhZ2Utb2JqZWN0LWhlYWRlcj5cblxuICA8ZGl2IGNsYXNzPVwicGFnZS1pbmZvLWJhbm5lcnNcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJxZC1wYWdlLWluZm8tYmFubmVyXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnLnBhZ2VUeXBlID09PSAnY3JlYXRlJyB8fCBjb25maWcucGFnZVR5cGUgPT09ICdjdXN0b20nXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwicWQtcGFnZS1zdGVwcGVyXCI+PC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltxZFBhZ2VTdGVwcGVyQWRhcHRlcl1cIj48L25nLWNvbnRlbnQ+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb25maWcucGFnZVR5cGUgPT09ICdvdmVydmlldycgfHwgY29uZmlnLnBhZ2VUeXBlID09PSAnaW5zcGVjdCcgfHwgY29uZmlnLnBhZ2VUeXBlID09PSAnY3VzdG9tJ1wiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInFkLXBhZ2UtdGFic1wiPjwvbmctY29udGVudD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbcWRQYWdlVGFic0FkYXB0ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInFkLXNlY3Rpb25cIj48L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3FkU2VjdGlvbkFkYXB0ZXJdXCI+PC9uZy1jb250ZW50PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29uZmlnLnBhZ2VUeXBlID09PSAnY3VzdG9tJ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcm9qZWN0ZWRDb250ZW50XCI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9tYWluPlxuXG48Zm9vdGVyICpuZ0lmPVwiZm9vdGVySGFzQ29udGVudCQgfCBhc3luY1wiPlxuICA8cWQtcGFnZS1mb290ZXIgW2F0dHIuZGF0YS10ZXN0LWlkXT1cInRlc3RJZCArICctZm9vdGVyJ1wiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltxZFBhZ2VGb290ZXJdXCI+PC9uZy1jb250ZW50PlxuICA8L3FkLXBhZ2UtZm9vdGVyPlxuPC9mb290ZXI+XG5cbjxhc2lkZSAqbmdJZj1cImlzQ29udHJvbFBhbmVsVmlzaWJsZVwiPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJxZC1wYWdlLWNvbnRyb2wtcGFuZWxcIj48L25nLWNvbnRlbnQ+XG48L2FzaWRlPlxuXG48cWQtcHJvamVjdGlvbi1ndWFyZCAqbmdJZj1cImNvbmZpZy5wYWdlVHlwZSAhPT0gJ2N1c3RvbSdcIiBbd2FybmluZ01lc3NhZ2VdPVwicHJvamVjdGlvbkd1YXJkTWVzc2FnZVwiPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJvamVjdGVkQ29udGVudFwiPjwvbmctY29udGFpbmVyPlxuPC9xZC1wcm9qZWN0aW9uLWd1YXJkPlxuXG48bmctdGVtcGxhdGUgI3Byb2plY3RlZENvbnRlbnQ+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|