tas-uell-sdk 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/esm2020/lib/components/tas-btn/tas-btn.component.mjs +2 -13
- package/esm2020/lib/components/tas-feedback-modal/tas-feedback-modal.component.mjs +229 -0
- package/esm2020/lib/components/tas-floating-call/tas-floating-call.component.mjs +38 -3
- package/esm2020/lib/components/tas-incoming-appointment/tas-incoming-appointment.component.mjs +46 -8
- package/esm2020/lib/components/tas-videocall/tas-videocall.component.mjs +41 -6
- package/esm2020/lib/components/tas-waiting-room/tas-waiting-room.component.mjs +18 -3
- package/esm2020/lib/interfaces/tas.interfaces.mjs +6 -1
- package/esm2020/lib/services/tas.service.mjs +40 -1
- package/esm2020/lib/tas-uell-sdk.module.mjs +8 -3
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/tas-uell-sdk.mjs +421 -36
- package/fesm2015/tas-uell-sdk.mjs.map +1 -1
- package/fesm2020/tas-uell-sdk.mjs +416 -36
- package/fesm2020/tas-uell-sdk.mjs.map +1 -1
- package/lib/components/tas-btn/tas-btn.component.d.ts +1 -2
- package/lib/components/tas-feedback-modal/tas-feedback-modal.component.d.ts +101 -0
- package/lib/components/tas-floating-call/tas-floating-call.component.d.ts +5 -0
- package/lib/components/tas-incoming-appointment/tas-incoming-appointment.component.d.ts +12 -1
- package/lib/components/tas-videocall/tas-videocall.component.d.ts +8 -2
- package/lib/components/tas-waiting-room/tas-waiting-room.component.d.ts +9 -0
- package/lib/interfaces/tas.interfaces.d.ts +17 -0
- package/lib/services/tas.service.d.ts +15 -1
- package/lib/tas-uell-sdk.module.d.ts +5 -4
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
- package/src/lib/styles/tas-global.scss +17 -0
|
@@ -30,6 +30,7 @@ export class TasWaitingRoomComponent {
|
|
|
30
30
|
this.state = WaitingRoomState.CHECKING_STATUS;
|
|
31
31
|
this.WaitingRoomState = WaitingRoomState; // Expose enum to template
|
|
32
32
|
this.errorMessage = '';
|
|
33
|
+
this.showErrorDetails = false;
|
|
33
34
|
this.isJoinable = false;
|
|
34
35
|
// Session data from status response
|
|
35
36
|
this.resolvedSessionId = '';
|
|
@@ -367,10 +368,24 @@ export class TasWaitingRoomComponent {
|
|
|
367
368
|
retry() {
|
|
368
369
|
this.state = WaitingRoomState.CHECKING_STATUS;
|
|
369
370
|
this.errorMessage = '';
|
|
371
|
+
this.showErrorDetails = false;
|
|
370
372
|
this.token = '';
|
|
371
373
|
this.retryCount = 0; // Reset retry count for auto-retry
|
|
372
374
|
this.checkStatus();
|
|
373
375
|
}
|
|
376
|
+
/**
|
|
377
|
+
* Toggle the error details dropdown visibility.
|
|
378
|
+
*/
|
|
379
|
+
toggleErrorDetails() {
|
|
380
|
+
this.showErrorDetails = !this.showErrorDetails;
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Close the waiting room modal.
|
|
384
|
+
*/
|
|
385
|
+
close() {
|
|
386
|
+
this.tasService.stopStatusPolling();
|
|
387
|
+
this.activeModal.dismiss('close');
|
|
388
|
+
}
|
|
374
389
|
openVideoCallModal() {
|
|
375
390
|
this.videoCallModalRef = this.modalService.open(TasVideocallComponent, {
|
|
376
391
|
size: 'xl',
|
|
@@ -394,10 +409,10 @@ export class TasWaitingRoomComponent {
|
|
|
394
409
|
}
|
|
395
410
|
}
|
|
396
411
|
TasWaitingRoomComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TasWaitingRoomComponent, deps: [{ token: i1.NgbActiveModal }, { token: i2.TasService }, { token: i3.GeolocationService }, { token: i1.NgbModal }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
397
|
-
TasWaitingRoomComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: TasWaitingRoomComponent, selector: "tas-waiting-room", inputs: { roomType: "roomType", entityId: "entityId", tenant: "tenant", businessRole: "businessRole", currentUser: "currentUser" }, ngImport: i0, template: "<div class=\"tas-waiting-room\">\n <div class=\"waiting-room-content\">\n <div class=\"state-container\">\n <!-- Loading states (show spinner) -->\n <ng-container *ngIf=\"state !== WaitingRoomState.ERROR\">\n <div class=\"state-icon loading\">\n <div class=\"spinner\"></div>\n </div>\n \n <!-- Requesting permissions -->\n <ng-container *ngIf=\"isRequestingPermissions\">\n <p class=\"state-message\">Solicitando permisos...</p>\n <p class=\"state-submessage\">Por favor, acept\u00E1 los permisos de c\u00E1mara y micr\u00F3fono.</p>\n </ng-container>\n \n <!-- Waiting for admission (permissions granted, not joinable yet) -->\n <ng-container *ngIf=\"isWaitingForAdmission\">\n <p class=\"state-message\">Medicina laboral va a admitirte</p>\n <p class=\"state-submessage\">Por favor, permanec\u00E9 en esta pantalla.</p>\n </ng-container>\n \n <!-- Getting token / Joining -->\n <ng-container *ngIf=\"state === WaitingRoomState.GETTING_TOKEN || state === WaitingRoomState.JOINING\">\n <p class=\"state-message\">Conectando...</p>\n </ng-container>\n \n <!-- Checking status (when not requesting permissions) -->\n <ng-container *ngIf=\"state === WaitingRoomState.CHECKING_STATUS && !isRequestingPermissions\">\n <p class=\"state-message\">Verificando estado...</p>\n </ng-container>\n </ng-container>\n\n <!-- Error state (show error icon and message) -->\n <ng-container *ngIf=\"state === WaitingRoomState.ERROR\">\n <div class=\"state-icon error\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n </div>\n <p class=\"state-message error\">Ocurri\u00F3 un error</p>\n <
|
|
412
|
+
TasWaitingRoomComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: TasWaitingRoomComponent, selector: "tas-waiting-room", inputs: { roomType: "roomType", entityId: "entityId", tenant: "tenant", businessRole: "businessRole", currentUser: "currentUser" }, ngImport: i0, template: "<div class=\"tas-waiting-room\">\n <div class=\"waiting-room-content\">\n <div class=\"state-container\">\n <!-- Loading states (show spinner) -->\n <ng-container *ngIf=\"state !== WaitingRoomState.ERROR\">\n <div class=\"state-icon loading\">\n <div class=\"spinner\"></div>\n </div>\n \n <!-- Requesting permissions -->\n <ng-container *ngIf=\"isRequestingPermissions\">\n <p class=\"state-message\">Solicitando permisos...</p>\n <p class=\"state-submessage\">Por favor, acept\u00E1 los permisos de c\u00E1mara y micr\u00F3fono.</p>\n </ng-container>\n \n <!-- Waiting for admission (permissions granted, not joinable yet) -->\n <ng-container *ngIf=\"isWaitingForAdmission\">\n <p class=\"state-message\">Medicina laboral va a admitirte</p>\n <p class=\"state-submessage\">Por favor, permanec\u00E9 en esta pantalla.</p>\n </ng-container>\n \n <!-- Getting token / Joining -->\n <ng-container *ngIf=\"state === WaitingRoomState.GETTING_TOKEN || state === WaitingRoomState.JOINING\">\n <p class=\"state-message\">Conectando...</p>\n </ng-container>\n \n <!-- Checking status (when not requesting permissions) -->\n <ng-container *ngIf=\"state === WaitingRoomState.CHECKING_STATUS && !isRequestingPermissions\">\n <p class=\"state-message\">Verificando estado...</p>\n </ng-container>\n </ng-container>\n\n <!-- Error state (show error icon and message) -->\n <ng-container *ngIf=\"state === WaitingRoomState.ERROR\">\n <div class=\"state-icon error\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n </div>\n <p class=\"state-message error\">Ocurri\u00F3 un error</p>\n \n <!-- Collapsible error details -->\n <div class=\"error-dropdown\" *ngIf=\"errorMessage\">\n <button \n type=\"button\" \n class=\"error-toggle-btn\"\n (click)=\"toggleErrorDetails()\"\n [attr.aria-expanded]=\"showErrorDetails\"\n aria-controls=\"error-details-content\"\n >\n <span>Ver detalles del error</span>\n <i class=\"fa\" [class.fa-chevron-down]=\"!showErrorDetails\" [class.fa-chevron-up]=\"showErrorDetails\"></i>\n </button>\n <div \n id=\"error-details-content\"\n class=\"error-details-content\"\n [class.expanded]=\"showErrorDetails\"\n >\n <p class=\"error-details-text\">{{ errorMessage }}</p>\n </div>\n </div>\n \n <div class=\"error-actions\">\n <button type=\"button\" class=\"btn action-btn retry-btn\" (click)=\"retry()\">\n <i class=\"fa fa-refresh\"></i>\n Reintentar\n </button>\n <button type=\"button\" class=\"btn action-btn close-btn\" (click)=\"close()\">\n Cerrar\n </button>\n </div>\n </ng-container>\n </div>\n </div>\n</div>\n", styles: [".tas-waiting-room{display:flex;flex-direction:column;min-height:300px;background:#ffffff;border-radius:5px;overflow:hidden}.waiting-room-content{flex:1;display:flex;align-items:center;justify-content:center;padding:32px 40px;background:#ffffff}.state-container{text-align:center;max-width:400px;width:100%}.state-icon{width:80px;height:80px;margin:0 auto 24px;border-radius:50%;display:flex;align-items:center;justify-content:center}.state-icon i{font-size:36px}.state-icon.loading{background:rgba(29,164,177,.1);border:2px solid #1da4b1}.state-icon.error{background:rgba(238,49,107,.1);border:2px solid #ee316b}.state-icon.error i{color:#ee316b}.spinner{width:40px;height:40px;border:3px solid #e9ecef;border-top-color:#1da4b1;border-radius:50%;animation:spin 1s linear infinite}.state-message{font-size:16px;font-weight:600;margin:0 0 8px;color:#212529;line-height:24px}.state-message.error{color:#ee316b}.state-submessage{font-size:14px;color:#6c757d;margin:0 0 24px;font-weight:400}.error-dropdown{margin:16px 0;width:100%}.error-toggle-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:10px 16px;font-size:13px;font-weight:500;color:#6c757d;background:transparent;border:1px solid #e9ecef;border-radius:6px;cursor:pointer;transition:all .2s ease}.error-toggle-btn:hover{background:#f8f9fa;border-color:#6c757d;color:#212529}.error-toggle-btn i{font-size:12px;transition:transform .2s ease}.error-details-content{max-height:0;overflow:hidden;transition:max-height .3s ease,padding .3s ease}.error-details-content.expanded{max-height:200px;padding-top:12px}.error-details-text{font-size:12px;color:#ee316b;margin:0;padding:12px 16px;background:rgba(238,49,107,.08);border-radius:8px;border:1px solid rgba(238,49,107,.2);text-align:left;word-break:break-word;max-height:150px;overflow-y:auto}.error-actions{display:flex;justify-content:center;gap:12px;margin-top:16px}.action-btn{padding:12px 32px;font-size:16px;font-weight:600;border-radius:4px;border:none;cursor:pointer;transition:all .2s ease;display:inline-flex;align-items:center;gap:10px}.action-btn i{font-size:16px}.action-btn.retry-btn{background:transparent;color:#6c757d;border:1px solid #e9ecef}.action-btn.retry-btn:hover{background:#f8f9fa;border-color:#6c757d;color:#212529}.action-btn.close-btn{background:#ee316b;color:#fff;border:none}.action-btn.close-btn:hover{background:#da124f}@keyframes spin{to{transform:rotate(360deg)}}@media (max-width: 576px){.tas-waiting-room{min-height:250px}.waiting-room-content{padding:24px}.state-icon{width:64px;height:64px}.state-icon i{font-size:28px}.spinner{width:32px;height:32px}.action-btn{padding:10px 24px;font-size:14px}}\n"], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
398
413
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TasWaitingRoomComponent, decorators: [{
|
|
399
414
|
type: Component,
|
|
400
|
-
args: [{ selector: 'tas-waiting-room', template: "<div class=\"tas-waiting-room\">\n <div class=\"waiting-room-content\">\n <div class=\"state-container\">\n <!-- Loading states (show spinner) -->\n <ng-container *ngIf=\"state !== WaitingRoomState.ERROR\">\n <div class=\"state-icon loading\">\n <div class=\"spinner\"></div>\n </div>\n \n <!-- Requesting permissions -->\n <ng-container *ngIf=\"isRequestingPermissions\">\n <p class=\"state-message\">Solicitando permisos...</p>\n <p class=\"state-submessage\">Por favor, acept\u00E1 los permisos de c\u00E1mara y micr\u00F3fono.</p>\n </ng-container>\n \n <!-- Waiting for admission (permissions granted, not joinable yet) -->\n <ng-container *ngIf=\"isWaitingForAdmission\">\n <p class=\"state-message\">Medicina laboral va a admitirte</p>\n <p class=\"state-submessage\">Por favor, permanec\u00E9 en esta pantalla.</p>\n </ng-container>\n \n <!-- Getting token / Joining -->\n <ng-container *ngIf=\"state === WaitingRoomState.GETTING_TOKEN || state === WaitingRoomState.JOINING\">\n <p class=\"state-message\">Conectando...</p>\n </ng-container>\n \n <!-- Checking status (when not requesting permissions) -->\n <ng-container *ngIf=\"state === WaitingRoomState.CHECKING_STATUS && !isRequestingPermissions\">\n <p class=\"state-message\">Verificando estado...</p>\n </ng-container>\n </ng-container>\n\n <!-- Error state (show error icon and message) -->\n <ng-container *ngIf=\"state === WaitingRoomState.ERROR\">\n <div class=\"state-icon error\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n </div>\n <p class=\"state-message error\">Ocurri\u00F3 un error</p>\n <
|
|
415
|
+
args: [{ selector: 'tas-waiting-room', template: "<div class=\"tas-waiting-room\">\n <div class=\"waiting-room-content\">\n <div class=\"state-container\">\n <!-- Loading states (show spinner) -->\n <ng-container *ngIf=\"state !== WaitingRoomState.ERROR\">\n <div class=\"state-icon loading\">\n <div class=\"spinner\"></div>\n </div>\n \n <!-- Requesting permissions -->\n <ng-container *ngIf=\"isRequestingPermissions\">\n <p class=\"state-message\">Solicitando permisos...</p>\n <p class=\"state-submessage\">Por favor, acept\u00E1 los permisos de c\u00E1mara y micr\u00F3fono.</p>\n </ng-container>\n \n <!-- Waiting for admission (permissions granted, not joinable yet) -->\n <ng-container *ngIf=\"isWaitingForAdmission\">\n <p class=\"state-message\">Medicina laboral va a admitirte</p>\n <p class=\"state-submessage\">Por favor, permanec\u00E9 en esta pantalla.</p>\n </ng-container>\n \n <!-- Getting token / Joining -->\n <ng-container *ngIf=\"state === WaitingRoomState.GETTING_TOKEN || state === WaitingRoomState.JOINING\">\n <p class=\"state-message\">Conectando...</p>\n </ng-container>\n \n <!-- Checking status (when not requesting permissions) -->\n <ng-container *ngIf=\"state === WaitingRoomState.CHECKING_STATUS && !isRequestingPermissions\">\n <p class=\"state-message\">Verificando estado...</p>\n </ng-container>\n </ng-container>\n\n <!-- Error state (show error icon and message) -->\n <ng-container *ngIf=\"state === WaitingRoomState.ERROR\">\n <div class=\"state-icon error\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n </div>\n <p class=\"state-message error\">Ocurri\u00F3 un error</p>\n \n <!-- Collapsible error details -->\n <div class=\"error-dropdown\" *ngIf=\"errorMessage\">\n <button \n type=\"button\" \n class=\"error-toggle-btn\"\n (click)=\"toggleErrorDetails()\"\n [attr.aria-expanded]=\"showErrorDetails\"\n aria-controls=\"error-details-content\"\n >\n <span>Ver detalles del error</span>\n <i class=\"fa\" [class.fa-chevron-down]=\"!showErrorDetails\" [class.fa-chevron-up]=\"showErrorDetails\"></i>\n </button>\n <div \n id=\"error-details-content\"\n class=\"error-details-content\"\n [class.expanded]=\"showErrorDetails\"\n >\n <p class=\"error-details-text\">{{ errorMessage }}</p>\n </div>\n </div>\n \n <div class=\"error-actions\">\n <button type=\"button\" class=\"btn action-btn retry-btn\" (click)=\"retry()\">\n <i class=\"fa fa-refresh\"></i>\n Reintentar\n </button>\n <button type=\"button\" class=\"btn action-btn close-btn\" (click)=\"close()\">\n Cerrar\n </button>\n </div>\n </ng-container>\n </div>\n </div>\n</div>\n", styles: [".tas-waiting-room{display:flex;flex-direction:column;min-height:300px;background:#ffffff;border-radius:5px;overflow:hidden}.waiting-room-content{flex:1;display:flex;align-items:center;justify-content:center;padding:32px 40px;background:#ffffff}.state-container{text-align:center;max-width:400px;width:100%}.state-icon{width:80px;height:80px;margin:0 auto 24px;border-radius:50%;display:flex;align-items:center;justify-content:center}.state-icon i{font-size:36px}.state-icon.loading{background:rgba(29,164,177,.1);border:2px solid #1da4b1}.state-icon.error{background:rgba(238,49,107,.1);border:2px solid #ee316b}.state-icon.error i{color:#ee316b}.spinner{width:40px;height:40px;border:3px solid #e9ecef;border-top-color:#1da4b1;border-radius:50%;animation:spin 1s linear infinite}.state-message{font-size:16px;font-weight:600;margin:0 0 8px;color:#212529;line-height:24px}.state-message.error{color:#ee316b}.state-submessage{font-size:14px;color:#6c757d;margin:0 0 24px;font-weight:400}.error-dropdown{margin:16px 0;width:100%}.error-toggle-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:10px 16px;font-size:13px;font-weight:500;color:#6c757d;background:transparent;border:1px solid #e9ecef;border-radius:6px;cursor:pointer;transition:all .2s ease}.error-toggle-btn:hover{background:#f8f9fa;border-color:#6c757d;color:#212529}.error-toggle-btn i{font-size:12px;transition:transform .2s ease}.error-details-content{max-height:0;overflow:hidden;transition:max-height .3s ease,padding .3s ease}.error-details-content.expanded{max-height:200px;padding-top:12px}.error-details-text{font-size:12px;color:#ee316b;margin:0;padding:12px 16px;background:rgba(238,49,107,.08);border-radius:8px;border:1px solid rgba(238,49,107,.2);text-align:left;word-break:break-word;max-height:150px;overflow-y:auto}.error-actions{display:flex;justify-content:center;gap:12px;margin-top:16px}.action-btn{padding:12px 32px;font-size:16px;font-weight:600;border-radius:4px;border:none;cursor:pointer;transition:all .2s ease;display:inline-flex;align-items:center;gap:10px}.action-btn i{font-size:16px}.action-btn.retry-btn{background:transparent;color:#6c757d;border:1px solid #e9ecef}.action-btn.retry-btn:hover{background:#f8f9fa;border-color:#6c757d;color:#212529}.action-btn.close-btn{background:#ee316b;color:#fff;border:none}.action-btn.close-btn:hover{background:#da124f}@keyframes spin{to{transform:rotate(360deg)}}@media (max-width: 576px){.tas-waiting-room{min-height:250px}.waiting-room-content{padding:24px}.state-icon{width:64px;height:64px}.state-icon i{font-size:28px}.spinner{width:32px;height:32px}.action-btn{padding:10px 24px;font-size:14px}}\n"] }]
|
|
401
416
|
}], ctorParameters: function () { return [{ type: i1.NgbActiveModal }, { type: i2.TasService }, { type: i3.GeolocationService }, { type: i1.NgbModal }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { roomType: [{
|
|
402
417
|
type: Input
|
|
403
418
|
}], entityId: [{
|
|
@@ -409,4 +424,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
|
|
|
409
424
|
}], currentUser: [{
|
|
410
425
|
type: Input
|
|
411
426
|
}] } });
|
|
412
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy13YWl0aW5nLXJvb20vdGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy13YWl0aW5nLXJvb20vdGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBSXZGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUVMLFdBQVcsRUFDWCxlQUFlLEVBQ2YsV0FBVyxFQUNYLGNBQWMsR0FFZixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7Ozs7QUFFakYsTUFBTSxDQUFOLElBQVksZ0JBT1g7QUFQRCxXQUFZLGdCQUFnQjtJQUMxQix1REFBbUMsQ0FBQTtJQUNuQyxpRUFBNkMsQ0FBQTtJQUM3QyxtQ0FBZSxDQUFBO0lBQ2YsbURBQStCLENBQUE7SUFDL0IsdUNBQW1CLENBQUE7SUFDbkIsbUNBQWUsQ0FBQTtBQUNqQixDQUFDLEVBUFcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQU8zQjtBQU9ELE1BQU0sT0FBTyx1QkFBdUI7SUF3RGxDLFlBQ1MsV0FBMkIsRUFDMUIsVUFBc0IsRUFDdEIsa0JBQXNDLEVBQ3RDLFlBQXNCLEVBQ3RCLEdBQXNCO1FBSnZCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMxQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FB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eyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nYkFjdGl2ZU1vZGFsLCBOZ2JNb2RhbCwgTmdiTW9kYWxSZWYgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBUYXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFzLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2VvbG9jYXRpb25TZXJ2aWNlLCBHZW9Qb3NpdGlvbiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dlb2xvY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBUYXNDdXJyZW50VXNlcixcbiAgVGFzUm9vbVR5cGUsXG4gIFRhc0J1c2luZXNzUm9sZSxcbiAgVGFzVXNlclJvbGUsXG4gIFVzZXJDYWxsQWN0aW9uLFxuICBQcm94eVZpZGVvVXNlck1vZGlmeVJlcXVlc3QsXG59IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvdGFzLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgVGFzVmlkZW9jYWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vdGFzLXZpZGVvY2FsbC90YXMtdmlkZW9jYWxsLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBlbnVtIFdhaXRpbmdSb29tU3RhdGUge1xuICBDSEVDS0lOR19TVEFUVVMgPSAnQ0hFQ0tJTkdfU1RBVFVTJyxcbiAgV0FJVElOR19GT1JfSk9JTkFCTEUgPSAnV0FJVElOR19GT1JfSk9JTkFCTEUnLFxuICBSRUFEWSA9ICdSRUFEWScsXG4gIEdFVFRJTkdfVE9LRU4gPSAnR0VUVElOR19UT0tFTicsXG4gIEpPSU5JTkcgPSAnSk9JTklORycsXG4gIEVSUk9SID0gJ0VSUk9SJyxcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndGFzLXdhaXRpbmctcm9vbScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YXMtd2FpdGluZy1yb29tLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBUYXNXYWl0aW5nUm9vbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLy8gU3RhdHVzIGVuZHBvaW50IHBhcmFtc1xuICBASW5wdXQoKSByb29tVHlwZTogVGFzUm9vbVR5cGUgPSBUYXNSb29tVHlwZS5UQVM7XG4gIEBJbnB1dCgpIGVudGl0eUlkITogbnVtYmVyO1xuICBASW5wdXQoKSB0ZW5hbnQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJ1c2luZXNzUm9sZTogVGFzQnVzaW5lc3NSb2xlID0gVGFzQnVzaW5lc3NSb2xlLlVTRVI7XG5cbiAgLy8gVXNlciBpbmZvIGZvciB0b2tlbiByZXF1ZXN0XG4gIEBJbnB1dCgpIGN1cnJlbnRVc2VyITogVGFzQ3VycmVudFVzZXI7XG5cbiAgLy8gQ29tcG9uZW50IHN0YXRlXG4gIHB1YmxpYyBzdGF0ZTogV2FpdGluZ1Jvb21TdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuQ0hFQ0tJTkdfU1RBVFVTO1xuICBwdWJsaWMgV2FpdGluZ1Jvb21TdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGU7IC8vIEV4cG9zZSBlbnVtIHRvIHRlbXBsYXRlXG4gIHB1YmxpYyBlcnJvck1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICBwdWJsaWMgaXNKb2luYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIFNlc3Npb24gZGF0YSBmcm9tIHN0YXR1cyByZXNwb25zZVxuICBwcml2YXRlIHJlc29sdmVkU2Vzc2lvbklkOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSByZXNvbHZlZEFwcG9pbnRtZW50SWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHRva2VuOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSB2aWRlb0NhbGxJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gU3Vic2NyaXB0aW9uc1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgdmlkZW9DYWxsTW9kYWxSZWY6IE5nYk1vZGFsUmVmIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gR2VvbG9jYXRpb25cbiAgcHJpdmF0ZSBnZW9Qb3NpdGlvbjogR2VvUG9zaXRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBnZW9XYXNEZW5pZWQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gVHJhY2tzIGlmIHVzZXIgZGVuaWVkIGdlbyBwZXJtaXNzaW9uXG4gIHByaXZhdGUgZ2VvUmVzdWx0U2VudDogYm9vbGVhbiA9IGZhbHNlOyAvLyBUcmFja3MgaWYgZ2VvIHJlc3VsdCB3YXMgYWxyZWFkeSBzZW50XG5cbiAgLy8gUGVybWlzc2lvbiB0cmFja2luZyBmb3IgYXV0by1qb2luXG4gIHByaXZhdGUgbWVkaWFQZXJtaXNzaW9uc0dyYW50ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBnZW9QZXJtaXNzaW9uc1Jlc29sdmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gQXV0by1yZXRyeSB0cmFja2luZ1xuICBwcml2YXRlIHJldHJ5Q291bnQ6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgcmVhZG9ubHkgTUFYX1JFVFJJRVMgPSAxO1xuXG4gIC8qKiBXaGV0aGVyIGN1cnJlbnQgdXNlciBpcyBhbiBvd25lciAqL1xuICBwdWJsaWMgZ2V0IGlzT3duZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFVzZXI/LnJvbGUgPT09IFRhc1VzZXJSb2xlLk9XTkVSO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgd2UncmUgc3RpbGwgcmVxdWVzdGluZyBwZXJtaXNzaW9ucyAoZm9yIHRlbXBsYXRlKSAqL1xuICBwdWJsaWMgZ2V0IGlzUmVxdWVzdGluZ1Blcm1pc3Npb25zKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5tZWRpYVBlcm1pc3Npb25zR3JhbnRlZCB8fCAoIXRoaXMuZ2VvUGVybWlzc2lvbnNSZXNvbHZlZCAmJiAhdGhpcy5pc093bmVyICYmICF0aGlzLmlzQmFja29mZmljZSk7XG4gIH1cblxuICAvKiogV2hldGhlciB3ZSdyZSB3YWl0aW5nIGZvciBhZG1pc3Npb24gYWZ0ZXIgcGVybWlzc2lvbnMgZ3JhbnRlZCAoZm9yIHRlbXBsYXRlKSAqL1xuICBwdWJsaWMgZ2V0IGlzV2FpdGluZ0ZvckFkbWlzc2lvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tZWRpYVBlcm1pc3Npb25zR3JhbnRlZCAmJiBcbiAgICAgICAgICAgKHRoaXMuZ2VvUGVybWlzc2lvbnNSZXNvbHZlZCB8fCB0aGlzLmlzT3duZXIgfHwgdGhpcy5pc0JhY2tvZmZpY2UpICYmIFxuICAgICAgICAgICAhdGhpcy5pc0pvaW5hYmxlO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCxcbiAgICBwcml2YXRlIHRhc1NlcnZpY2U6IFRhc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBnZW9sb2NhdGlvblNlcnZpY2U6IEdlb2xvY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gVGFzV2FpdGluZ1Jvb21Db21wb25lbnQubmdPbkluaXQnKTtcbiAgICB0aGlzLnJlcXVlc3RNZWRpYVBlcm1pc3Npb25zKCk7XG4gICAgLy8gUmVxdWVzdCBnZW9sb2NhdGlvbiBwZXJtaXNzaW9uIGFuZCBjYWNoZSBpdCAoYnV0IGRvbid0IHNlbmQgdG8gYmFja2VuZCB5ZXQpXG4gICAgLy8gVGhlIGNhY2hlZCBwb3NpdGlvbiB3aWxsIGJlIHNlbnQgd2hlbiBvd25lciByZXF1ZXN0cyBpdCB2aWEgYWN0aXZhdGVHZW9cbiAgICB0aGlzLnJlcXVlc3RHZW9sb2NhdGlvbigpO1xuICAgIHRoaXMuY2hlY2tTdGF0dXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IGNhbWVyYSBhbmQgbWljcm9waG9uZSBwZXJtaXNzaW9ucy5cbiAgICogVHJpZ2dlcnMgYXV0by1qb2luIHdoZW4gcGVybWlzc2lvbnMgYXJlIHJlc29sdmVkLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXF1ZXN0TWVkaWFQZXJtaXNzaW9ucygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gUmVxdWVzdGluZyBtZWRpYSBwZXJtaXNzaW9ucy4uLicpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdHJlYW0gPSBhd2FpdCBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7IGF1ZGlvOiB0cnVlLCB2aWRlbzogdHJ1ZSB9KTtcbiAgICAgIC8vIFN0b3AgdHJhY2tzIGltbWVkaWF0ZWx5IC0gd2UganVzdCBuZWVkZWQgdGhlIHBlcm1pc3Npb25cbiAgICAgIHN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSk7XG4gICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gTWVkaWEgcGVybWlzc2lvbnMgZ3JhbnRlZCcpO1xuICAgICAgdGhpcy5tZWRpYVBlcm1pc3Npb25zR3JhbnRlZCA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignW1RBUyBERUJVR10gTWVkaWEgcGVybWlzc2lvbnMgZGVuaWVkIG9yIHVuYXZhaWxhYmxlOicsIGVycm9yKTtcbiAgICAgIC8vIFN0aWxsIGFsbG93IGpvaW5pbmcgLSBzb21lIHVzZXJzIG1heSBub3QgaGF2ZSBjYW1lcmEvbWljXG4gICAgICB0aGlzLm1lZGlhUGVybWlzc2lvbnNHcmFudGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy50cnlBdXRvSm9pbigpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IGdlb2xvY2F0aW9uIHBlcm1pc3Npb24gYW5kIGNhY2hlIHJlc3VsdC5cbiAgICogT25seSBmb3IgcmVndWxhciB1c2VycyAobm90IG93bmVycy9iYWNrb2ZmaWNlKS5cbiAgICogQWN0dWFsIHNlbmQgdG8gYmFja2VuZCBoYXBwZW5zIGFmdGVyIHdlIGhhdmUgdmlkZW9DYWxsSWQuXG4gICAqIFRyaWdnZXJzIGF1dG8tam9pbiB3aGVuIGdlb2xvY2F0aW9uIGlzIHJlc29sdmVkLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXF1ZXN0R2VvbG9jYXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gT25seSByZXF1ZXN0IGdlb2xvY2F0aW9uIGZvciByZWd1bGFyIHVzZXJzLCBub3Qgb3duZXJzL2JhY2tvZmZpY2VcbiAgICBpZiAodGhpcy5pc093bmVyIHx8IHRoaXMuaXNCYWNrb2ZmaWNlKSB7XG4gICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gU2tpcHBpbmcgZ2VvbG9jYXRpb24gZm9yIG93bmVyL2JhY2tvZmZpY2UnKTtcbiAgICAgIHRoaXMuZ2VvUGVybWlzc2lvbnNSZXNvbHZlZCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFJlcXVlc3RpbmcgZ2VvbG9jYXRpb24gcGVybWlzc2lvbi4uLicpO1xuICAgIGNvbnN0IHBvc2l0aW9uID0gYXdhaXQgdGhpcy5nZW9sb2NhdGlvblNlcnZpY2UuZ2V0Q3VycmVudFBvc2l0aW9uKCk7XG4gICAgXG4gICAgaWYgKHBvc2l0aW9uKSB7XG4gICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gR2VvbG9jYXRpb24gZ3JhbnRlZDonLCBwb3NpdGlvbik7XG4gICAgICB0aGlzLmdlb1Bvc2l0aW9uID0gcG9zaXRpb247XG4gICAgICB0aGlzLmdlb1dhc0RlbmllZCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gR2VvbG9jYXRpb24gZGVuaWVkIG9yIHVuYXZhaWxhYmxlJyk7XG4gICAgICB0aGlzLmdlb1Bvc2l0aW9uID0gbnVsbDtcbiAgICAgIHRoaXMuZ2VvV2FzRGVuaWVkID0gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5nZW9QZXJtaXNzaW9uc1Jlc29sdmVkID0gdHJ1ZTtcbiAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgdmlkZW9DYWxsSWQsIHNlbmQgbm93LiBPdGhlcndpc2UsIGl0IHdpbGwgYmUgc2VudCBhZnRlciBzdGF0dXMgcmVzcG9uc2UuXG4gICAgdGhpcy5zZW5kR2VvUmVzdWx0VG9CYWNrZW5kKCk7XG4gICAgdGhpcy50cnlBdXRvSm9pbigpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGdlbyByZXN1bHQgdG8gYmFja2VuZCAoZ3JhbnRlZCBvciBkZW5pZWQpLlxuICAgKiBPbmx5IHNlbmRzIGlmIHZpZGVvQ2FsbElkIGlzIGF2YWlsYWJsZSBhbmQgbm90IGFscmVhZHkgc2VudC5cbiAgICovXG4gIHByaXZhdGUgc2VuZEdlb1Jlc3VsdFRvQmFja2VuZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudmlkZW9DYWxsSWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBDYW5ub3Qgc2VuZCBnZW8gcmVzdWx0OiB2aWRlb0NhbGxJZCBub3QgYXZhaWxhYmxlIHlldCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmdlb1Jlc3VsdFNlbnQpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBHZW8gcmVzdWx0IGFscmVhZHkgc2VudCwgc2tpcHBpbmcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nZW9Qb3NpdGlvbikge1xuICAgICAgdGhpcy5zZW5kR2VvbG9jYXRpb25Ub0JhY2tlbmQoKTtcbiAgICAgIHRoaXMuZ2VvUmVzdWx0U2VudCA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmdlb1dhc0RlbmllZCkge1xuICAgICAgdGhpcy5zZW5kR2VvRGVuaWFsVG9CYWNrZW5kKCk7XG4gICAgICB0aGlzLmdlb1Jlc3VsdFNlbnQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGdyYW50ZWQgZ2VvbG9jYXRpb24gdG8gYmFja2VuZCB2aWEgbW9kaWZ5IHVzZXIgZW5kcG9pbnQuXG4gICAqL1xuICBwcml2YXRlIHNlbmRHZW9sb2NhdGlvblRvQmFja2VuZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZ2VvUG9zaXRpb24gfHwgIXRoaXMudmlkZW9DYWxsSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gU2VuZGluZyBnZW9sb2NhdGlvbiB0byBiYWNrZW5kLi4uJyk7XG4gICAgY29uc3QgYm9keTogUHJveHlWaWRlb1VzZXJNb2RpZnlSZXF1ZXN0ID0ge1xuICAgICAgdmlkZW9DYWxsSWQ6IHRoaXMudmlkZW9DYWxsSWQsXG4gICAgICBhY3Rpb246IFVzZXJDYWxsQWN0aW9uLkFDVElWQVRFX0dFT0xPQ0FUSU9OLFxuICAgICAgbGF0aXR1ZGU6IHRoaXMuZ2VvUG9zaXRpb24ubGF0aXR1ZGUsXG4gICAgICBsb25naXR1ZGU6IHRoaXMuZ2VvUG9zaXRpb24ubG9uZ2l0dWRlLFxuICAgIH07XG4gICAgXG4gICAgdGhpcy50YXNTZXJ2aWNlLm1vZGlmeVByb3h5VmlkZW9Vc2VyKGJvZHkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gR2VvbG9jYXRpb24gc2VudCBzdWNjZXNzZnVsbHknKSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiBjb25zb2xlLmVycm9yKCdbVEFTIERFQlVHXSBGYWlsZWQgdG8gc2VuZCBnZW9sb2NhdGlvbjonLCBlcnIpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgZ2VvbG9jYXRpb24gZGVuaWFsIHRvIGJhY2tlbmQgdmlhIG1vZGlmeSB1c2VyIGVuZHBvaW50LlxuICAgKi9cbiAgcHJpdmF0ZSBzZW5kR2VvRGVuaWFsVG9CYWNrZW5kKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy52aWRlb0NhbGxJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBTZW5kaW5nIGdlbyBkZW5pYWwgdG8gYmFja2VuZC4uLicpO1xuICAgIGNvbnN0IGJvZHk6IFByb3h5VmlkZW9Vc2VyTW9kaWZ5UmVxdWVzdCA9IHtcbiAgICAgIHZpZGVvQ2FsbElkOiB0aGlzLnZpZGVvQ2FsbElkLFxuICAgICAgYWN0aW9uOiBVc2VyQ2FsbEFjdGlvbi5ERU5ZX0dFT0xPQ0FUSU9OLFxuICAgIH07XG4gICAgXG4gICAgdGhpcy50YXNTZXJ2aWNlLm1vZGlmeVByb3h5VmlkZW9Vc2VyKGJvZHkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gR2VvIGRlbmlhbCBzZW50IHN1Y2Nlc3NmdWxseScpLFxuICAgICAgZXJyb3I6IChlcnIpID0+IGNvbnNvbGUuZXJyb3IoJ1tUQVMgREVCVUddIEZhaWxlZCB0byBzZW5kIGdlbyBkZW5pYWw6JywgZXJyKSxcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBUYXNXYWl0aW5nUm9vbUNvbXBvbmVudC5uZ09uRGVzdHJveScpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMudGFzU2VydmljZS5zdG9wU3RhdHVzUG9sbGluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHN0YXR1cyB0byBnZXQgc2Vzc2lvbiBpbmZvXG4gICAqL1xuICBwcml2YXRlIGNoZWNrU3RhdHVzKCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBjaGVja1N0YXR1cyBjYWxsZWQgd2l0aDonLCB7XG4gICAgICByb29tVHlwZTogdGhpcy5yb29tVHlwZSxcbiAgICAgIGVudGl0eUlkOiB0aGlzLmVudGl0eUlkLFxuICAgICAgdGVuYW50OiB0aGlzLnRlbmFudCxcbiAgICAgIGJ1c2luZXNzUm9sZTogdGhpcy5idXNpbmVzc1JvbGUsXG4gICAgICBjdXJyZW50VXNlcjogdGhpcy5jdXJyZW50VXNlcixcbiAgICB9KTtcblxuICAgIHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLkNIRUNLSU5HX1NUQVRVUztcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuXG4gICAgY29uc3Qgc3RhdHVzUGFyYW1zID0ge1xuICAgICAgcm9vbVR5cGU6IHRoaXMucm9vbVR5cGUsXG4gICAgICBlbnRpdHlJZDogdGhpcy5lbnRpdHlJZCxcbiAgICAgIHRlbmFudDogdGhpcy50ZW5hbnQsXG4gICAgICBidXNpbmVzc1JvbGU6IHRoaXMuYnVzaW5lc3NSb2xlLFxuICAgIH07XG5cbiAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gQ2FsbGluZyBnZXRQcm94eVZpZGVvU3RhdHVzLi4uJyk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50YXNTZXJ2aWNlLmdldFByb3h5VmlkZW9TdGF0dXMoc3RhdHVzUGFyYW1zKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gcmVzcG9uc2UuY29udGVudDtcblxuICAgICAgICAgIC8vIFN0b3JlIHNlc3Npb24gaW5mbyBmcm9tIHJlc3BvbnNlXG4gICAgICAgICAgdGhpcy5yZXNvbHZlZFNlc3Npb25JZCA9IGNvbnRlbnQuc2Vzc2lvbklkO1xuICAgICAgICAgIHRoaXMucmVzb2x2ZWRBcHBvaW50bWVudElkID0gY29udGVudC5hcHBvaW50bWVudElkO1xuICAgICAgICAgIHRoaXMudmlkZW9DYWxsSWQgPSBjb250ZW50LnZpZGVvQ2FsbElkO1xuXG4gICAgICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFN0YXR1cyByZXNwb25zZTonLCBjb250ZW50KTtcblxuICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgdmlkZW9DYWxsSWQsIHNlbmQgZ2VvIHJlc3VsdCBpZiBub3QgYWxyZWFkeSBzZW50XG4gICAgICAgICAgdGhpcy5zZW5kR2VvUmVzdWx0VG9CYWNrZW5kKCk7XG5cbiAgICAgICAgICAvLyBTdGFydCBwb2xsaW5nIGZvciBzdGF0dXMgdXBkYXRlc1xuICAgICAgICAgIHRoaXMudGFzU2VydmljZS5zdGFydFN0YXR1c1BvbGxpbmcoc3RhdHVzUGFyYW1zKTtcblxuICAgICAgICAgIC8vIFN1YnNjcmliZSB0byBqb2luYWJsZSBzdGF0dXNcbiAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgdGhpcy50YXNTZXJ2aWNlLmpvaW5hYmxlJC5zdWJzY3JpYmUoKGpvaW5hYmxlKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuaGFuZGxlSm9pbmFibGVDaGFuZ2Uoam9pbmFibGUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tUQVMgREVCVUddIFN0YXR1cyBjaGVjayBmYWlsZWQ6JywgZXJyKTtcbiAgICAgICAgICB0aGlzLnN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5FUlJPUjtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdFcnJvciBjaGVja2luZyBzZXNzaW9uIHN0YXR1cy4gUGxlYXNlIHRyeSBhZ2Fpbi4nO1xuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjaGFuZ2VzIHRvIGpvaW5hYmxlIHN0YXR1cy5cbiAgICogVHJpZ2dlcnMgYXV0by1qb2luIHdoZW4gam9pbmFibGUgYmVjb21lcyB0cnVlLlxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVKb2luYWJsZUNoYW5nZShqb2luYWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBoYW5kbGVKb2luYWJsZUNoYW5nZSBjYWxsZWQnLCB7XG4gICAgICBqb2luYWJsZSxcbiAgICAgIGN1cnJlbnRTdGF0ZTogdGhpcy5zdGF0ZSxcbiAgICAgIHJlc29sdmVkU2Vzc2lvbklkOiB0aGlzLnJlc29sdmVkU2Vzc2lvbklkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5pc0pvaW5hYmxlID0gam9pbmFibGU7XG5cbiAgICAvLyBEb24ndCB1cGRhdGUgc3RhdGUgaWYgYWxyZWFkeSBnZXR0aW5nIHRva2VuLCBqb2luaW5nLCBvciBpbiBlcnJvclxuICAgIGlmIChcbiAgICAgIHRoaXMuc3RhdGUgPT09IFdhaXRpbmdSb29tU3RhdGUuR0VUVElOR19UT0tFTiB8fFxuICAgICAgdGhpcy5zdGF0ZSA9PT0gV2FpdGluZ1Jvb21TdGF0ZS5KT0lOSU5HIHx8XG4gICAgICB0aGlzLnN0YXRlID09PSBXYWl0aW5nUm9vbVN0YXRlLkVSUk9SXG4gICAgKSB7XG4gICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gU2tpcHBpbmcgc3RhdGUgdXBkYXRlIC0gYWxyZWFkeSBpbjonLCB0aGlzLnN0YXRlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgc3RhdGUgYW5kIGF0dGVtcHQgYXV0by1qb2luXG4gICAgaWYgKGpvaW5hYmxlKSB7XG4gICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gSm9pbmFibGUgaXMgdHJ1ZSwgYXR0ZW1wdGluZyBhdXRvLWpvaW4nKTtcbiAgICAgIHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLlJFQURZO1xuICAgICAgdGhpcy50cnlBdXRvSm9pbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gV2FpdGluZyBmb3Igam9pbmFibGUuLi4nKTtcbiAgICAgIHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLldBSVRJTkdfRk9SX0pPSU5BQkxFO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdCB0byBhdXRvLWpvaW4gdGhlIHNlc3Npb24gd2hlbiBhbGwgY29uZGl0aW9ucyBhcmUgbWV0LlxuICAgKiAtIEZvciBvd25lcnM6IGp1c3QgbmVlZCBqb2luYWJsZSArIHNlc3Npb25JZFxuICAgKiAtIEZvciB1c2VyczogbmVlZCBtZWRpYSBwZXJtaXNzaW9ucyArIGdlbyByZXNvbHZlZCArIGpvaW5hYmxlICsgc2Vzc2lvbklkXG4gICAqL1xuICBwcml2YXRlIHRyeUF1dG9Kb2luKCk6IHZvaWQge1xuICAgIC8vIERvbid0IHRyeSBpZiBhbHJlYWR5IGpvaW5pbmcgb3IgaW4gZXJyb3JcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gV2FpdGluZ1Jvb21TdGF0ZS5HRVRUSU5HX1RPS0VOIHx8IFxuICAgICAgICB0aGlzLnN0YXRlID09PSBXYWl0aW5nUm9vbVN0YXRlLkpPSU5JTkcpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSB0cnlBdXRvSm9pbiBza2lwcGVkIC0gYWxyZWFkeSBpbiBzdGF0ZTonLCB0aGlzLnN0YXRlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBGb3Igb3duZXJzOiBqdXN0IG5lZWQgam9pbmFibGVcbiAgICBpZiAodGhpcy5pc093bmVyKSB7XG4gICAgICBpZiAodGhpcy5pc0pvaW5hYmxlICYmIHRoaXMucmVzb2x2ZWRTZXNzaW9uSWQpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIE93bmVyIGF1dG8tam9pbmluZy4uLicpO1xuICAgICAgICB0aGlzLnN0YXJ0U2Vzc2lvbkFuZEpvaW4oKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBGb3IgdXNlcnM6IG5lZWQgbWVkaWEgKyBnZW8gcmVzb2x2ZWQgKyBqb2luYWJsZVxuICAgIGlmICh0aGlzLm1lZGlhUGVybWlzc2lvbnNHcmFudGVkICYmIFxuICAgICAgICB0aGlzLmdlb1Blcm1pc3Npb25zUmVzb2x2ZWQgJiYgXG4gICAgICAgIHRoaXMuaXNKb2luYWJsZSAmJiBcbiAgICAgICAgdGhpcy5yZXNvbHZlZFNlc3Npb25JZCkge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFVzZXIgYXV0by1qb2luaW5nLi4uJyk7XG4gICAgICB0aGlzLnN0YXJ0U2Vzc2lvbkFuZEpvaW4oKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdXNlciBoYXMgb3duZXIvYmFja29mZmljZSByb2xlXG4gICAqL1xuICBwcml2YXRlIGdldCBpc0JhY2tvZmZpY2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuYnVzaW5lc3NSb2xlID09PSBUYXNCdXNpbmVzc1JvbGUuQkFDS09GRklDRSB8fFxuICAgICAgdGhpcy5idXNpbmVzc1JvbGUgPT09IFRhc0J1c2luZXNzUm9sZS5BRE1JTl9NQU5BR0VSIHx8XG4gICAgICB0aGlzLmJ1c2luZXNzUm9sZSA9PT0gVGFzQnVzaW5lc3NSb2xlLk1BTkFHRVJcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHNlc3Npb24gYW5kIGpvaW4gLSBjYWxsZWQgd2hlbiB1c2VyIGNsaWNrcyBqb2luIGJ1dHRvblxuICAgKi9cbiAgcHJpdmF0ZSBzdGFydFNlc3Npb25BbmRKb2luKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5yZXNvbHZlZFNlc3Npb25JZCkge1xuICAgICAgdGhpcy5zdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuRVJST1I7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdTZXNzaW9uIElEIG5vdCBhdmFpbGFibGUnO1xuICAgICAgdGhpcy50YXNTZXJ2aWNlLnN0b3BTdGF0dXNQb2xsaW5nKCk7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuR0VUVElOR19UT0tFTjtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBDYWxsaW5nIC9zdGFydCBmb3Igc2Vzc2lvbjonLCB0aGlzLnJlc29sdmVkU2Vzc2lvbklkKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnRhc1NlcnZpY2VcbiAgICAgICAgLnN0YXJ0UHJveHlWaWRlb1Nlc3Npb24oe1xuICAgICAgICAgIHNlc3Npb25JZDogdGhpcy5yZXNvbHZlZFNlc3Npb25JZCxcbiAgICAgICAgICBuYW1lOiB0aGlzLmN1cnJlbnRVc2VyLm5hbWUsXG4gICAgICAgICAgbGFzdG5hbWU6IHRoaXMuY3VycmVudFVzZXIubGFzdG5hbWUsXG4gICAgICAgIH0pXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6ICh0b2tlblJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gVG9rZW4gcmVzcG9uc2U6JywgdG9rZW5SZXNwb25zZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEhhbmRsZSBjYXNlIHdoZXJlIEhUVFAgYWRhcHRlciByZXR1cm5zIGVycm9yIGluIG5leHQgaW5zdGVhZCBvZiBlcnJvciBoYW5kbGVyXG4gICAgICAgICAgICBpZiAoIXRva2VuUmVzcG9uc2U/LmNvbnRlbnQ/LnRva2VuKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tUQVMgREVCVUddIEludmFsaWQgdG9rZW4gcmVzcG9uc2U6JywgdG9rZW5SZXNwb25zZSk7XG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLkVSUk9SO1xuICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICh0b2tlblJlc3BvbnNlIGFzIGFueSk/Lm1lc3NhZ2UgfHwgJ0Vycm9yIGFsIGluaWNpYXIgbGEgc2VzacOzbi4gUmVzcHVlc3RhIGludsOhbGlkYS4nO1xuICAgICAgICAgICAgICB0aGlzLnRhc1NlcnZpY2Uuc3RvcFN0YXR1c1BvbGxpbmcoKTtcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBUb2tlbiBvYnRhaW5lZCBzdWNjZXNzZnVsbHksIGpvaW5pbmcgc2Vzc2lvbi4uLicpO1xuICAgICAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuUmVzcG9uc2UuY29udGVudC50b2tlbjtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLkpPSU5JTkc7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEF1dG8tam9pbiBpbW1lZGlhdGVseVxuICAgICAgICAgICAgdGhpcy50YXNTZXJ2aWNlLnN0b3BTdGF0dXNQb2xsaW5nKCk7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKCdqb2luaW5nJyk7XG4gICAgICAgICAgICB0aGlzLm9wZW5WaWRlb0NhbGxNb2RhbCgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tUQVMgREVCVUddIC9zdGFydCByZXF1ZXN0IGZhaWxlZDonLCBlcnIpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBBdXRvLXJldHJ5IG9uIGZpcnN0IGZhaWx1cmVcbiAgICAgICAgICAgIGlmICh0aGlzLnJldHJ5Q291bnQgPCB0aGlzLk1BWF9SRVRSSUVTKSB7XG4gICAgICAgICAgICAgIHRoaXMucmV0cnlDb3VudCsrO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gQXV0by1yZXRyeWluZy4uLiBhdHRlbXB0OicsIHRoaXMucmV0cnlDb3VudCk7XG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLkNIRUNLSU5HX1NUQVRVUztcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc3RhcnRTZXNzaW9uQW5kSm9pbigpLCAyMDAwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFNob3cgZXJyb3IgYWZ0ZXIgcmV0cnkgZmFpbHNcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuRVJST1I7XG4gICAgICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCBlcnI/Lm1lc3NhZ2UgfHwgJ0Vycm9yIGFsIGluaWNpYXIgbGEgc2VzacOzbi4gUG9yIGZhdm9yLCBpbnRlbnRlIG51ZXZhbWVudGUuJztcbiAgICAgICAgICAgICAgdGhpcy50YXNTZXJ2aWNlLnN0b3BTdGF0dXNQb2xsaW5nKCk7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBTdGF0ZSBzZXQgdG8gRVJST1IsIGVycm9yTWVzc2FnZTonLCB0aGlzLmVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIFJldHJ5IGFmdGVyIGFuIGVycm9yLlxuICAgKiBSZXNldHMgcmV0cnkgY291bnQgYW5kIHJlc3RhcnRzIHRoZSBmbG93LlxuICAgKi9cbiAgcmV0cnkoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuQ0hFQ0tJTkdfU1RBVFVTO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy50b2tlbiA9ICcnO1xuICAgIHRoaXMucmV0cnlDb3VudCA9IDA7IC8vIFJlc2V0IHJldHJ5IGNvdW50IGZvciBhdXRvLXJldHJ5XG4gICAgdGhpcy5jaGVja1N0YXR1cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuVmlkZW9DYWxsTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oVGFzVmlkZW9jYWxsQ29tcG9uZW50LCB7XG4gICAgICBzaXplOiAneGwnLFxuICAgICAgd2luZG93Q2xhc3M6ICd0YXMtdmlkZW8tbW9kYWwnLFxuICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxuICAgICAga2V5Ym9hcmQ6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5zZXNzaW9uSWQgPSB0aGlzLnJlc29sdmVkU2Vzc2lvbklkO1xuICAgIHRoaXMudmlkZW9DYWxsTW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudG9rZW4gPSB0aGlzLnRva2VuO1xuICAgIHRoaXMudmlkZW9DYWxsTW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuYXBwb2ludG1lbnRJZCA9IHRoaXMucmVzb2x2ZWRBcHBvaW50bWVudElkO1xuICAgIHRoaXMudmlkZW9DYWxsTW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudmlkZW9DYWxsSWQgPSB0aGlzLnZpZGVvQ2FsbElkO1xuICAgIHRoaXMudmlkZW9DYWxsTW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudXNlcklkID0gdGhpcy5jdXJyZW50VXNlcj8uaWQ7XG4gICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50ZW5hbnQgPSB0aGlzLnRlbmFudDtcbiAgICB0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmJ1c2luZXNzUm9sZSA9IHRoaXMuYnVzaW5lc3NSb2xlO1xuICAgIHRoaXMudmlkZW9DYWxsTW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuaXNSZXR1cm5pbmdGcm9tUGlwID0gZmFsc2U7XG5cbiAgICB0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmLnJlc3VsdC50aGVuKFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmID0gbnVsbDtcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMudmlkZW9DYWxsTW9kYWxSZWYgPSBudWxsO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0YXMtd2FpdGluZy1yb29tXCI+XG4gIDxkaXYgY2xhc3M9XCJ3YWl0aW5nLXJvb20tY29udGVudFwiPlxuICAgIDxkaXYgY2xhc3M9XCJzdGF0ZS1jb250YWluZXJcIj5cbiAgICAgIDwhLS0gTG9hZGluZyBzdGF0ZXMgKHNob3cgc3Bpbm5lcikgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RhdGUgIT09IFdhaXRpbmdSb29tU3RhdGUuRVJST1JcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0YXRlLWljb24gbG9hZGluZ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBcbiAgICAgICAgPCEtLSBSZXF1ZXN0aW5nIHBlcm1pc3Npb25zIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNSZXF1ZXN0aW5nUGVybWlzc2lvbnNcIj5cbiAgICAgICAgICA8cCBjbGFzcz1cInN0YXRlLW1lc3NhZ2VcIj5Tb2xpY2l0YW5kbyBwZXJtaXNvcy4uLjwvcD5cbiAgICAgICAgICA8cCBjbGFzcz1cInN0YXRlLXN1Ym1lc3NhZ2VcIj5Qb3IgZmF2b3IsIGFjZXB0w6EgbG9zIHBlcm1pc29zIGRlIGPDoW1hcmEgeSBtaWNyw7Nmb25vLjwvcD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIFxuICAgICAgICA8IS0tIFdhaXRpbmcgZm9yIGFkbWlzc2lvbiAocGVybWlzc2lvbnMgZ3JhbnRlZCwgbm90IGpvaW5hYmxlIHlldCkgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1dhaXRpbmdGb3JBZG1pc3Npb25cIj5cbiAgICAgICAgICA8cCBjbGFzcz1cInN0YXRlLW1lc3NhZ2VcIj5NZWRpY2luYSBsYWJvcmFsIHZhIGEgYWRtaXRpcnRlPC9wPlxuICAgICAgICAgIDxwIGNsYXNzPVwic3RhdGUtc3VibWVzc2FnZVwiPlBvciBmYXZvciwgcGVybWFuZWPDqSBlbiBlc3RhIHBhbnRhbGxhLjwvcD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIFxuICAgICAgICA8IS0tIEdldHRpbmcgdG9rZW4gLyBKb2luaW5nIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RhdGUgPT09IFdhaXRpbmdSb29tU3RhdGUuR0VUVElOR19UT0tFTiB8fCBzdGF0ZSA9PT0gV2FpdGluZ1Jvb21TdGF0ZS5KT0lOSU5HXCI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJzdGF0ZS1tZXNzYWdlXCI+Q29uZWN0YW5kby4uLjwvcD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIFxuICAgICAgICA8IS0tIENoZWNraW5nIHN0YXR1cyAod2hlbiBub3QgcmVxdWVzdGluZyBwZXJtaXNzaW9ucykgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0ZSA9PT0gV2FpdGluZ1Jvb21TdGF0ZS5DSEVDS0lOR19TVEFUVVMgJiYgIWlzUmVxdWVzdGluZ1Blcm1pc3Npb25zXCI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJzdGF0ZS1tZXNzYWdlXCI+VmVyaWZpY2FuZG8gZXN0YWRvLi4uPC9wPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIEVycm9yIHN0YXRlIChzaG93IGVycm9yIGljb24gYW5kIG1lc3NhZ2UpIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXRlID09PSBXYWl0aW5nUm9vbVN0YXRlLkVSUk9SXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdGF0ZS1pY29uIGVycm9yXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZVwiPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxwIGNsYXNzPVwic3RhdGUtbWVzc2FnZSBlcnJvclwiPk9jdXJyacOzIHVuIGVycm9yPC9wPlxuICAgICAgICA8cCBjbGFzcz1cImVycm9yLWRldGFpbHNcIiAqbmdJZj1cImVycm9yTWVzc2FnZVwiPnt7IGVycm9yTWVzc2FnZSB9fTwvcD5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYWN0aW9uLWJ0biByZXRyeS1idG5cIiAoY2xpY2spPVwicmV0cnkoKVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcmVmcmVzaFwiPjwvaT5cbiAgICAgICAgICBSZWludGVudGFyXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
427
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy13YWl0aW5nLXJvb20vdGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy13YWl0aW5nLXJvb20vdGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBSXZGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUVMLFdBQVcsRUFDWCxlQUFlLEVBQ2YsV0FBVyxFQUNYLGNBQWMsR0FFZixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7Ozs7QUFFakYsTUFBTSxDQUFOLElBQVksZ0JBT1g7QUFQRCxXQUFZLGdCQUFnQjtJQUMxQix1REFBbUMsQ0FBQTtJQUNuQyxpRUFBNkMsQ0FBQTtJQUM3QyxtQ0FBZSxDQUFBO0lBQ2YsbURBQStCLENBQUE7SUFDL0IsdUNBQW1CLENBQUE7SUFDbkIsbUNBQWUsQ0FBQTtBQUNqQixDQUFDLEVBUFcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQU8zQjtBQU9ELE1BQU0sT0FBTyx1QkFBdUI7SUF5RGxDLFlBQ1MsV0FBMkIsRUFDMUIsVUFBc0IsRUFDdEIsa0JBQXNDLEVBQ3RDLFlBQXNCLEVBQ3RCLEdBQXNCO1FBSnZCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMxQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FB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LGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUNoQyxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7O3FIQTljVSx1QkFBdUI7eUdBQXZCLHVCQUF1Qiw0TEM3QnBDLGloR0F5RUE7NEZENUNhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxrQkFBa0I7c05BTW5CLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCwgTmdiTW9kYWwsIE5nYk1vZGFsUmVmIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgVGFzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Rhcy5zZXJ2aWNlJztcbmltcG9ydCB7IEdlb2xvY2F0aW9uU2VydmljZSwgR2VvUG9zaXRpb24gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9nZW9sb2NhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgVGFzQ3VycmVudFVzZXIsXG4gIFRhc1Jvb21UeXBlLFxuICBUYXNCdXNpbmVzc1JvbGUsXG4gIFRhc1VzZXJSb2xlLFxuICBVc2VyQ2FsbEFjdGlvbixcbiAgUHJveHlWaWRlb1VzZXJNb2RpZnlSZXF1ZXN0LFxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3Rhcy5pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRhc1ZpZGVvY2FsbENvbXBvbmVudCB9IGZyb20gJy4uL3Rhcy12aWRlb2NhbGwvdGFzLXZpZGVvY2FsbC5jb21wb25lbnQnO1xuXG5leHBvcnQgZW51bSBXYWl0aW5nUm9vbVN0YXRlIHtcbiAgQ0hFQ0tJTkdfU1RBVFVTID0gJ0NIRUNLSU5HX1NUQVRVUycsXG4gIFdBSVRJTkdfRk9SX0pPSU5BQkxFID0gJ1dBSVRJTkdfRk9SX0pPSU5BQkxFJyxcbiAgUkVBRFkgPSAnUkVBRFknLFxuICBHRVRUSU5HX1RPS0VOID0gJ0dFVFRJTkdfVE9LRU4nLFxuICBKT0lOSU5HID0gJ0pPSU5JTkcnLFxuICBFUlJPUiA9ICdFUlJPUicsXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Rhcy13YWl0aW5nLXJvb20nLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Rhcy13YWl0aW5nLXJvb20uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFzV2FpdGluZ1Jvb21Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8vIFN0YXR1cyBlbmRwb2ludCBwYXJhbXNcbiAgQElucHV0KCkgcm9vbVR5cGU6IFRhc1Jvb21UeXBlID0gVGFzUm9vbVR5cGUuVEFTO1xuICBASW5wdXQoKSBlbnRpdHlJZCE6IG51bWJlcjtcbiAgQElucHV0KCkgdGVuYW50ITogc3RyaW5nO1xuICBASW5wdXQoKSBidXNpbmVzc1JvbGU6IFRhc0J1c2luZXNzUm9sZSA9IFRhc0J1c2luZXNzUm9sZS5VU0VSO1xuXG4gIC8vIFVzZXIgaW5mbyBmb3IgdG9rZW4gcmVxdWVzdFxuICBASW5wdXQoKSBjdXJyZW50VXNlciE6IFRhc0N1cnJlbnRVc2VyO1xuXG4gIC8vIENvbXBvbmVudCBzdGF0ZVxuICBwdWJsaWMgc3RhdGU6IFdhaXRpbmdSb29tU3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLkNIRUNLSU5HX1NUQVRVUztcbiAgcHVibGljIFdhaXRpbmdSb29tU3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlOyAvLyBFeHBvc2UgZW51bSB0byB0ZW1wbGF0ZVxuICBwdWJsaWMgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIHNob3dFcnJvckRldGFpbHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGlzSm9pbmFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBTZXNzaW9uIGRhdGEgZnJvbSBzdGF0dXMgcmVzcG9uc2VcbiAgcHJpdmF0ZSByZXNvbHZlZFNlc3Npb25JZDogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgcmVzb2x2ZWRBcHBvaW50bWVudElkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB0b2tlbjogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgdmlkZW9DYWxsSWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIC8vIFN1YnNjcmlwdGlvbnNcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIHZpZGVvQ2FsbE1vZGFsUmVmOiBOZ2JNb2RhbFJlZiB8IG51bGwgPSBudWxsO1xuXG4gIC8vIEdlb2xvY2F0aW9uXG4gIHByaXZhdGUgZ2VvUG9zaXRpb246IEdlb1Bvc2l0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZ2VvV2FzRGVuaWVkOiBib29sZWFuID0gZmFsc2U7IC8vIFRyYWNrcyBpZiB1c2VyIGRlbmllZCBnZW8gcGVybWlzc2lvblxuICBwcml2YXRlIGdlb1Jlc3VsdFNlbnQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gVHJhY2tzIGlmIGdlbyByZXN1bHQgd2FzIGFscmVhZHkgc2VudFxuXG4gIC8vIFBlcm1pc3Npb24gdHJhY2tpbmcgZm9yIGF1dG8tam9pblxuICBwcml2YXRlIG1lZGlhUGVybWlzc2lvbnNHcmFudGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgZ2VvUGVybWlzc2lvbnNSZXNvbHZlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEF1dG8tcmV0cnkgdHJhY2tpbmdcbiAgcHJpdmF0ZSByZXRyeUNvdW50OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIHJlYWRvbmx5IE1BWF9SRVRSSUVTID0gMTtcblxuICAvKiogV2hldGhlciBjdXJyZW50IHVzZXIgaXMgYW4gb3duZXIgKi9cbiAgcHVibGljIGdldCBpc093bmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRVc2VyPy5yb2xlID09PSBUYXNVc2VyUm9sZS5PV05FUjtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHdlJ3JlIHN0aWxsIHJlcXVlc3RpbmcgcGVybWlzc2lvbnMgKGZvciB0ZW1wbGF0ZSkgKi9cbiAgcHVibGljIGdldCBpc1JlcXVlc3RpbmdQZXJtaXNzaW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMubWVkaWFQZXJtaXNzaW9uc0dyYW50ZWQgfHwgKCF0aGlzLmdlb1Blcm1pc3Npb25zUmVzb2x2ZWQgJiYgIXRoaXMuaXNPd25lciAmJiAhdGhpcy5pc0JhY2tvZmZpY2UpO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgd2UncmUgd2FpdGluZyBmb3IgYWRtaXNzaW9uIGFmdGVyIHBlcm1pc3Npb25zIGdyYW50ZWQgKGZvciB0ZW1wbGF0ZSkgKi9cbiAgcHVibGljIGdldCBpc1dhaXRpbmdGb3JBZG1pc3Npb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubWVkaWFQZXJtaXNzaW9uc0dyYW50ZWQgJiYgXG4gICAgICAgICAgICh0aGlzLmdlb1Blcm1pc3Npb25zUmVzb2x2ZWQgfHwgdGhpcy5pc093bmVyIHx8IHRoaXMuaXNCYWNrb2ZmaWNlKSAmJiBcbiAgICAgICAgICAgIXRoaXMuaXNKb2luYWJsZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWwsXG4gICAgcHJpdmF0ZSB0YXNTZXJ2aWNlOiBUYXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2VvbG9jYXRpb25TZXJ2aWNlOiBHZW9sb2NhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFRhc1dhaXRpbmdSb29tQ29tcG9uZW50Lm5nT25Jbml0Jyk7XG4gICAgdGhpcy5yZXF1ZXN0TWVkaWFQZXJtaXNzaW9ucygpO1xuICAgIC8vIFJlcXVlc3QgZ2VvbG9jYXRpb24gcGVybWlzc2lvbiBhbmQgY2FjaGUgaXQgKGJ1dCBkb24ndCBzZW5kIHRvIGJhY2tlbmQgeWV0KVxuICAgIC8vIFRoZSBjYWNoZWQgcG9zaXRpb24gd2lsbCBiZSBzZW50IHdoZW4gb3duZXIgcmVxdWVzdHMgaXQgdmlhIGFjdGl2YXRlR2VvXG4gICAgdGhpcy5yZXF1ZXN0R2VvbG9jYXRpb24oKTtcbiAgICB0aGlzLmNoZWNrU3RhdHVzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCBjYW1lcmEgYW5kIG1pY3JvcGhvbmUgcGVybWlzc2lvbnMuXG4gICAqIFRyaWdnZXJzIGF1dG8tam9pbiB3aGVuIHBlcm1pc3Npb25zIGFyZSByZXNvbHZlZC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVxdWVzdE1lZGlhUGVybWlzc2lvbnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFJlcXVlc3RpbmcgbWVkaWEgcGVybWlzc2lvbnMuLi4nKTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RyZWFtID0gYXdhaXQgbmF2aWdhdG9yLm1lZGlhRGV2aWNlcy5nZXRVc2VyTWVkaWEoeyBhdWRpbzogdHJ1ZSwgdmlkZW86IHRydWUgfSk7XG4gICAgICAvLyBTdG9wIHRyYWNrcyBpbW1lZGlhdGVseSAtIHdlIGp1c3QgbmVlZGVkIHRoZSBwZXJtaXNzaW9uXG4gICAgICBzdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB0cmFjay5zdG9wKCkpO1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIE1lZGlhIHBlcm1pc3Npb25zIGdyYW50ZWQnKTtcbiAgICAgIHRoaXMubWVkaWFQZXJtaXNzaW9uc0dyYW50ZWQgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tUQVMgREVCVUddIE1lZGlhIHBlcm1pc3Npb25zIGRlbmllZCBvciB1bmF2YWlsYWJsZTonLCBlcnJvcik7XG4gICAgICAvLyBTdGlsbCBhbGxvdyBqb2luaW5nIC0gc29tZSB1c2VycyBtYXkgbm90IGhhdmUgY2FtZXJhL21pY1xuICAgICAgdGhpcy5tZWRpYVBlcm1pc3Npb25zR3JhbnRlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMudHJ5QXV0b0pvaW4oKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCBnZW9sb2NhdGlvbiBwZXJtaXNzaW9uIGFuZCBjYWNoZSByZXN1bHQuXG4gICAqIE9ubHkgZm9yIHJlZ3VsYXIgdXNlcnMgKG5vdCBvd25lcnMvYmFja29mZmljZSkuXG4gICAqIEFjdHVhbCBzZW5kIHRvIGJhY2tlbmQgaGFwcGVucyBhZnRlciB3ZSBoYXZlIHZpZGVvQ2FsbElkLlxuICAgKiBUcmlnZ2VycyBhdXRvLWpvaW4gd2hlbiBnZW9sb2NhdGlvbiBpcyByZXNvbHZlZC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVxdWVzdEdlb2xvY2F0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIE9ubHkgcmVxdWVzdCBnZW9sb2NhdGlvbiBmb3IgcmVndWxhciB1c2Vycywgbm90IG93bmVycy9iYWNrb2ZmaWNlXG4gICAgaWYgKHRoaXMuaXNPd25lciB8fCB0aGlzLmlzQmFja29mZmljZSkge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFNraXBwaW5nIGdlb2xvY2F0aW9uIGZvciBvd25lci9iYWNrb2ZmaWNlJyk7XG4gICAgICB0aGlzLmdlb1Blcm1pc3Npb25zUmVzb2x2ZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBSZXF1ZXN0aW5nIGdlb2xvY2F0aW9uIHBlcm1pc3Npb24uLi4nKTtcbiAgICBjb25zdCBwb3NpdGlvbiA9IGF3YWl0IHRoaXMuZ2VvbG9jYXRpb25TZXJ2aWNlLmdldEN1cnJlbnRQb3NpdGlvbigpO1xuICAgIFxuICAgIGlmIChwb3NpdGlvbikge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIEdlb2xvY2F0aW9uIGdyYW50ZWQ6JywgcG9zaXRpb24pO1xuICAgICAgdGhpcy5nZW9Qb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgICAgdGhpcy5nZW9XYXNEZW5pZWQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIEdlb2xvY2F0aW9uIGRlbmllZCBvciB1bmF2YWlsYWJsZScpO1xuICAgICAgdGhpcy5nZW9Qb3NpdGlvbiA9IG51bGw7XG4gICAgICB0aGlzLmdlb1dhc0RlbmllZCA9IHRydWU7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuZ2VvUGVybWlzc2lvbnNSZXNvbHZlZCA9IHRydWU7XG4gICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIHZpZGVvQ2FsbElkLCBzZW5kIG5vdy4gT3RoZXJ3aXNlLCBpdCB3aWxsIGJlIHNlbnQgYWZ0ZXIgc3RhdHVzIHJlc3BvbnNlLlxuICAgIHRoaXMuc2VuZEdlb1Jlc3VsdFRvQmFja2VuZCgpO1xuICAgIHRoaXMudHJ5QXV0b0pvaW4oKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBnZW8gcmVzdWx0IHRvIGJhY2tlbmQgKGdyYW50ZWQgb3IgZGVuaWVkKS5cbiAgICogT25seSBzZW5kcyBpZiB2aWRlb0NhbGxJZCBpcyBhdmFpbGFibGUgYW5kIG5vdCBhbHJlYWR5IHNlbnQuXG4gICAqL1xuICBwcml2YXRlIHNlbmRHZW9SZXN1bHRUb0JhY2tlbmQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnZpZGVvQ2FsbElkKSB7XG4gICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gQ2Fubm90IHNlbmQgZ2VvIHJlc3VsdDogdmlkZW9DYWxsSWQgbm90IGF2YWlsYWJsZSB5ZXQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nZW9SZXN1bHRTZW50KSB7XG4gICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gR2VvIHJlc3VsdCBhbHJlYWR5IHNlbnQsIHNraXBwaW5nJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2VvUG9zaXRpb24pIHtcbiAgICAgIHRoaXMuc2VuZEdlb2xvY2F0aW9uVG9CYWNrZW5kKCk7XG4gICAgICB0aGlzLmdlb1Jlc3VsdFNlbnQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5nZW9XYXNEZW5pZWQpIHtcbiAgICAgIHRoaXMuc2VuZEdlb0RlbmlhbFRvQmFja2VuZCgpO1xuICAgICAgdGhpcy5nZW9SZXN1bHRTZW50ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VuZCBncmFudGVkIGdlb2xvY2F0aW9uIHRvIGJhY2tlbmQgdmlhIG1vZGlmeSB1c2VyIGVuZHBvaW50LlxuICAgKi9cbiAgcHJpdmF0ZSBzZW5kR2VvbG9jYXRpb25Ub0JhY2tlbmQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmdlb1Bvc2l0aW9uIHx8ICF0aGlzLnZpZGVvQ2FsbElkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFNlbmRpbmcgZ2VvbG9jYXRpb24gdG8gYmFja2VuZC4uLicpO1xuICAgIGNvbnN0IGJvZHk6IFByb3h5VmlkZW9Vc2VyTW9kaWZ5UmVxdWVzdCA9IHtcbiAgICAgIHZpZGVvQ2FsbElkOiB0aGlzLnZpZGVvQ2FsbElkLFxuICAgICAgYWN0aW9uOiBVc2VyQ2FsbEFjdGlvbi5BQ1RJVkFURV9HRU9MT0NBVElPTixcbiAgICAgIGxhdGl0dWRlOiB0aGlzLmdlb1Bvc2l0aW9uLmxhdGl0dWRlLFxuICAgICAgbG9uZ2l0dWRlOiB0aGlzLmdlb1Bvc2l0aW9uLmxvbmdpdHVkZSxcbiAgICB9O1xuICAgIFxuICAgIHRoaXMudGFzU2VydmljZS5tb2RpZnlQcm94eVZpZGVvVXNlcihib2R5KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4gY29uc29sZS5sb2coJ1tUQVMgREVCVUddIEdlb2xvY2F0aW9uIHNlbnQgc3VjY2Vzc2Z1bGx5JyksXG4gICAgICBlcnJvcjogKGVycikgPT4gY29uc29sZS5lcnJvcignW1RBUyBERUJVR10gRmFpbGVkIHRvIHNlbmQgZ2VvbG9jYXRpb246JywgZXJyKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kIGdlb2xvY2F0aW9uIGRlbmlhbCB0byBiYWNrZW5kIHZpYSBtb2RpZnkgdXNlciBlbmRwb2ludC5cbiAgICovXG4gIHByaXZhdGUgc2VuZEdlb0RlbmlhbFRvQmFja2VuZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudmlkZW9DYWxsSWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gU2VuZGluZyBnZW8gZGVuaWFsIHRvIGJhY2tlbmQuLi4nKTtcbiAgICBjb25zdCBib2R5OiBQcm94eVZpZGVvVXNlck1vZGlmeVJlcXVlc3QgPSB7XG4gICAgICB2aWRlb0NhbGxJZDogdGhpcy52aWRlb0NhbGxJZCxcbiAgICAgIGFjdGlvbjogVXNlckNhbGxBY3Rpb24uREVOWV9HRU9MT0NBVElPTixcbiAgICB9O1xuICAgIFxuICAgIHRoaXMudGFzU2VydmljZS5tb2RpZnlQcm94eVZpZGVvVXNlcihib2R5KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4gY29uc29sZS5sb2coJ1tUQVMgREVCVUddIEdlbyBkZW5pYWwgc2VudCBzdWNjZXNzZnVsbHknKSxcbiAgICAgIGVycm9yOiAoZXJyKSA9PiBjb25zb2xlLmVycm9yKCdbVEFTIERFQlVHXSBGYWlsZWQgdG8gc2VuZCBnZW8gZGVuaWFsOicsIGVyciksXG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gVGFzV2FpdGluZ1Jvb21Db21wb25lbnQubmdPbkRlc3Ryb3knKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnRhc1NlcnZpY2Uuc3RvcFN0YXR1c1BvbGxpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBzdGF0dXMgdG8gZ2V0IHNlc3Npb24gaW5mb1xuICAgKi9cbiAgcHJpdmF0ZSBjaGVja1N0YXR1cygpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gY2hlY2tTdGF0dXMgY2FsbGVkIHdpdGg6Jywge1xuICAgICAgcm9vbVR5cGU6IHRoaXMucm9vbVR5cGUsXG4gICAgICBlbnRpdHlJZDogdGhpcy5lbnRpdHlJZCxcbiAgICAgIHRlbmFudDogdGhpcy50ZW5hbnQsXG4gICAgICBidXNpbmVzc1JvbGU6IHRoaXMuYnVzaW5lc3NSb2xlLFxuICAgICAgY3VycmVudFVzZXI6IHRoaXMuY3VycmVudFVzZXIsXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5DSEVDS0lOR19TVEFUVVM7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcblxuICAgIGNvbnN0IHN0YXR1c1BhcmFtcyA9IHtcbiAgICAgIHJvb21UeXBlOiB0aGlzLnJvb21UeXBlLFxuICAgICAgZW50aXR5SWQ6IHRoaXMuZW50aXR5SWQsXG4gICAgICB0ZW5hbnQ6IHRoaXMudGVuYW50LFxuICAgICAgYnVzaW5lc3NSb2xlOiB0aGlzLmJ1c2luZXNzUm9sZSxcbiAgICB9O1xuXG4gICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIENhbGxpbmcgZ2V0UHJveHlWaWRlb1N0YXR1cy4uLicpO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudGFzU2VydmljZS5nZXRQcm94eVZpZGVvU3RhdHVzKHN0YXR1c1BhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IHJlc3BvbnNlLmNvbnRlbnQ7XG5cbiAgICAgICAgICAvLyBTdG9yZSBzZXNzaW9uIGluZm8gZnJvbSByZXNwb25zZVxuICAgICAgICAgIHRoaXMucmVzb2x2ZWRTZXNzaW9uSWQgPSBjb250ZW50LnNlc3Npb25JZDtcbiAgICAgICAgICB0aGlzLnJlc29sdmVkQXBwb2ludG1lbnRJZCA9IGNvbnRlbnQuYXBwb2ludG1lbnRJZDtcbiAgICAgICAgICB0aGlzLnZpZGVvQ2FsbElkID0gY29udGVudC52aWRlb0NhbGxJZDtcblxuICAgICAgICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBTdGF0dXMgcmVzcG9uc2U6JywgY29udGVudCk7XG5cbiAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIHZpZGVvQ2FsbElkLCBzZW5kIGdlbyByZXN1bHQgaWYgbm90IGFscmVhZHkgc2VudFxuICAgICAgICAgIHRoaXMuc2VuZEdlb1Jlc3VsdFRvQmFja2VuZCgpO1xuXG4gICAgICAgICAgLy8gU3RhcnQgcG9sbGluZyBmb3Igc3RhdHVzIHVwZGF0ZXNcbiAgICAgICAgICB0aGlzLnRhc1NlcnZpY2Uuc3RhcnRTdGF0dXNQb2xsaW5nKHN0YXR1c1BhcmFtcyk7XG5cbiAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gam9pbmFibGUgc3RhdHVzXG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMudGFzU2VydmljZS5qb2luYWJsZSQuc3Vic2NyaWJlKChqb2luYWJsZSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmhhbmRsZUpvaW5hYmxlQ2hhbmdlKGpvaW5hYmxlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbVEFTIERFQlVHXSBTdGF0dXMgY2hlY2sgZmFpbGVkOicsIGVycik7XG4gICAgICAgICAgdGhpcy5zdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuRVJST1I7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnRXJyb3IgY2hlY2tpbmcgc2Vzc2lvbiBzdGF0dXMuIFBsZWFzZSB0cnkgYWdhaW4uJztcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgY2hhbmdlcyB0byBqb2luYWJsZSBzdGF0dXMuXG4gICAqIFRyaWdnZXJzIGF1dG8tam9pbiB3aGVuIGpvaW5hYmxlIGJlY29tZXMgdHJ1ZS5cbiAgICovXG4gIHByaXZhdGUgaGFuZGxlSm9pbmFibGVDaGFuZ2Uoam9pbmFibGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gaGFuZGxlSm9pbmFibGVDaGFuZ2UgY2FsbGVkJywge1xuICAgICAgam9pbmFibGUsXG4gICAgICBjdXJyZW50U3RhdGU6IHRoaXMuc3RhdGUsXG4gICAgICByZXNvbHZlZFNlc3Npb25JZDogdGhpcy5yZXNvbHZlZFNlc3Npb25JZCxcbiAgICB9KTtcblxuICAgIHRoaXMuaXNKb2luYWJsZSA9IGpvaW5hYmxlO1xuXG4gICAgLy8gRG9uJ3QgdXBkYXRlIHN0YXRlIGlmIGFscmVhZHkgZ2V0dGluZyB0b2tlbiwgam9pbmluZywgb3IgaW4gZXJyb3JcbiAgICBpZiAoXG4gICAgICB0aGlzLnN0YXRlID09PSBXYWl0aW5nUm9vbVN0YXRlLkdFVFRJTkdfVE9LRU4gfHxcbiAgICAgIHRoaXMuc3RhdGUgPT09IFdhaXRpbmdSb29tU3RhdGUuSk9JTklORyB8fFxuICAgICAgdGhpcy5zdGF0ZSA9PT0gV2FpdGluZ1Jvb21TdGF0ZS5FUlJPUlxuICAgICkge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFNraXBwaW5nIHN0YXRlIHVwZGF0ZSAtIGFscmVhZHkgaW46JywgdGhpcy5zdGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHN0YXRlIGFuZCBhdHRlbXB0IGF1dG8tam9pblxuICAgIGlmIChqb2luYWJsZSkge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIEpvaW5hYmxlIGlzIHRydWUsIGF0dGVtcHRpbmcgYXV0by1qb2luJyk7XG4gICAgICB0aGlzLnN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5SRUFEWTtcbiAgICAgIHRoaXMudHJ5QXV0b0pvaW4oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFdhaXRpbmcgZm9yIGpvaW5hYmxlLi4uJyk7XG4gICAgICB0aGlzLnN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5XQUlUSU5HX0ZPUl9KT0lOQUJMRTtcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gYXV0by1qb2luIHRoZSBzZXNzaW9uIHdoZW4gYWxsIGNvbmRpdGlvbnMgYXJlIG1ldC5cbiAgICogLSBGb3Igb3duZXJzOiBqdXN0IG5lZWQgam9pbmFibGUgKyBzZXNzaW9uSWRcbiAgICogLSBGb3IgdXNlcnM6IG5lZWQgbWVkaWEgcGVybWlzc2lvbnMgKyBnZW8gcmVzb2x2ZWQgKyBqb2luYWJsZSArIHNlc3Npb25JZFxuICAgKi9cbiAgcHJpdmF0ZSB0cnlBdXRvSm9pbigpOiB2b2lkIHtcbiAgICAvLyBEb24ndCB0cnkgaWYgYWxyZWFkeSBqb2luaW5nIG9yIGluIGVycm9yXG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IFdhaXRpbmdSb29tU3RhdGUuR0VUVElOR19UT0tFTiB8fCBcbiAgICAgICAgdGhpcy5zdGF0ZSA9PT0gV2FpdGluZ1Jvb21TdGF0ZS5KT0lOSU5HKSB7XG4gICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gdHJ5QXV0b0pvaW4gc2tpcHBlZCAtIGFscmVhZHkgaW4gc3RhdGU6JywgdGhpcy5zdGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRm9yIG93bmVyczoganVzdCBuZWVkIGpvaW5hYmxlXG4gICAgaWYgKHRoaXMuaXNPd25lcikge1xuICAgICAgaWYgKHRoaXMuaXNKb2luYWJsZSAmJiB0aGlzLnJlc29sdmVkU2Vzc2lvbklkKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBPd25lciBhdXRvLWpvaW5pbmcuLi4nKTtcbiAgICAgICAgdGhpcy5zdGFydFNlc3Npb25BbmRKb2luKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gRm9yIHVzZXJzOiBuZWVkIG1lZGlhICsgZ2VvIHJlc29sdmVkICsgam9pbmFibGVcbiAgICBpZiAodGhpcy5tZWRpYVBlcm1pc3Npb25zR3JhbnRlZCAmJiBcbiAgICAgICAgdGhpcy5nZW9QZXJtaXNzaW9uc1Jlc29sdmVkICYmIFxuICAgICAgICB0aGlzLmlzSm9pbmFibGUgJiYgXG4gICAgICAgIHRoaXMucmVzb2x2ZWRTZXNzaW9uSWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdbVEFTIERFQlVHXSBVc2VyIGF1dG8tam9pbmluZy4uLicpO1xuICAgICAgdGhpcy5zdGFydFNlc3Npb25BbmRKb2luKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHVzZXIgaGFzIG93bmVyL2JhY2tvZmZpY2Ugcm9sZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgaXNCYWNrb2ZmaWNlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmJ1c2luZXNzUm9sZSA9PT0gVGFzQnVzaW5lc3NSb2xlLkJBQ0tPRkZJQ0UgfHxcbiAgICAgIHRoaXMuYnVzaW5lc3NSb2xlID09PSBUYXNCdXNpbmVzc1JvbGUuQURNSU5fTUFOQUdFUiB8fFxuICAgICAgdGhpcy5idXNpbmVzc1JvbGUgPT09IFRhc0J1c2luZXNzUm9sZS5NQU5BR0VSXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCBzZXNzaW9uIGFuZCBqb2luIC0gY2FsbGVkIHdoZW4gdXNlciBjbGlja3Mgam9pbiBidXR0b25cbiAgICovXG4gIHByaXZhdGUgc3RhcnRTZXNzaW9uQW5kSm9pbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucmVzb2x2ZWRTZXNzaW9uSWQpIHtcbiAgICAgIHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLkVSUk9SO1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnU2Vzc2lvbiBJRCBub3QgYXZhaWxhYmxlJztcbiAgICAgIHRoaXMudGFzU2VydmljZS5zdG9wU3RhdHVzUG9sbGluZygpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLkdFVFRJTkdfVE9LRU47XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gQ2FsbGluZyAvc3RhcnQgZm9yIHNlc3Npb246JywgdGhpcy5yZXNvbHZlZFNlc3Npb25JZCk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy50YXNTZXJ2aWNlXG4gICAgICAgIC5zdGFydFByb3h5VmlkZW9TZXNzaW9uKHtcbiAgICAgICAgICBzZXNzaW9uSWQ6IHRoaXMucmVzb2x2ZWRTZXNzaW9uSWQsXG4gICAgICAgICAgbmFtZTogdGhpcy5jdXJyZW50VXNlci5uYW1lLFxuICAgICAgICAgIGxhc3RuYW1lOiB0aGlzLmN1cnJlbnRVc2VyLmxhc3RuYW1lLFxuICAgICAgICB9KVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAodG9rZW5SZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIFRva2VuIHJlc3BvbnNlOicsIHRva2VuUmVzcG9uc2UpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBIYW5kbGUgY2FzZSB3aGVyZSBIVFRQIGFkYXB0ZXIgcmV0dXJucyBlcnJvciBpbiBuZXh0IGluc3RlYWQgb2YgZXJyb3IgaGFuZGxlclxuICAgICAgICAgICAgaWYgKCF0b2tlblJlc3BvbnNlPy5jb250ZW50Py50b2tlbikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbVEFTIERFQlVHXSBJbnZhbGlkIHRva2VuIHJlc3BvbnNlOicsIHRva2VuUmVzcG9uc2UpO1xuICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5FUlJPUjtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAodG9rZW5SZXNwb25zZSBhcyBhbnkpPy5tZXNzYWdlIHx8ICdFcnJvciBhbCBpbmljaWFyIGxhIHNlc2nDs24uIFJlc3B1ZXN0YSBpbnbDoWxpZGEuJztcbiAgICAgICAgICAgICAgdGhpcy50YXNTZXJ2aWNlLnN0b3BTdGF0dXNQb2xsaW5nKCk7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gVG9rZW4gb2J0YWluZWQgc3VjY2Vzc2Z1bGx5LCBqb2luaW5nIHNlc3Npb24uLi4nKTtcbiAgICAgICAgICAgIHRoaXMudG9rZW4gPSB0b2tlblJlc3BvbnNlLmNvbnRlbnQudG9rZW47XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5KT0lOSU5HO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBBdXRvLWpvaW4gaW1tZWRpYXRlbHlcbiAgICAgICAgICAgIHRoaXMudGFzU2VydmljZS5zdG9wU3RhdHVzUG9sbGluZygpO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSgnam9pbmluZycpO1xuICAgICAgICAgICAgdGhpcy5vcGVuVmlkZW9DYWxsTW9kYWwoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbVEFTIERFQlVHXSAvc3RhcnQgcmVxdWVzdCBmYWlsZWQ6JywgZXJyKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gQXV0by1yZXRyeSBvbiBmaXJzdCBmYWlsdXJlXG4gICAgICAgICAgICBpZiAodGhpcy5yZXRyeUNvdW50IDwgdGhpcy5NQVhfUkVUUklFUykge1xuICAgICAgICAgICAgICB0aGlzLnJldHJ5Q291bnQrKztcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tUQVMgREVCVUddIEF1dG8tcmV0cnlpbmcuLi4gYXR0ZW1wdDonLCB0aGlzLnJldHJ5Q291bnQpO1xuICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5DSEVDS0lOR19TVEFUVVM7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnN0YXJ0U2Vzc2lvbkFuZEpvaW4oKSwgMjAwMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBTaG93IGVycm9yIGFmdGVyIHJldHJ5IGZhaWxzXG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLkVSUk9SO1xuICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyPy5tZXNzYWdlIHx8ICdFcnJvciBhbCBpbmljaWFyIGxhIHNlc2nDs24uIFBvciBmYXZvciwgaW50ZW50ZSBudWV2YW1lbnRlLic7XG4gICAgICAgICAgICAgIHRoaXMudGFzU2VydmljZS5zdG9wU3RhdHVzUG9sbGluZygpO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW1RBUyBERUJVR10gU3RhdGUgc2V0IHRvIEVSUk9SLCBlcnJvck1lc3NhZ2U6JywgdGhpcy5lcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cblxuXG4gIC8qKlxuICAgKiBSZXRyeSBhZnRlciBhbiBlcnJvci5cbiAgICogUmVzZXRzIHJldHJ5IGNvdW50IGFuZCByZXN0YXJ0cyB0aGUgZmxvdy5cbiAgICovXG4gIHJldHJ5KCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLkNIRUNLSU5HX1NUQVRVUztcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuc2hvd0Vycm9yRGV0YWlscyA9IGZhbHNlO1xuICAgIHRoaXMudG9rZW4gPSAnJztcbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwOyAvLyBSZXNldCByZXRyeSBjb3VudCBmb3IgYXV0by1yZXRyeVxuICAgIHRoaXMuY2hlY2tTdGF0dXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgdGhlIGVycm9yIGRldGFpbHMgZHJvcGRvd24gdmlzaWJpbGl0eS5cbiAgICovXG4gIHRvZ2dsZUVycm9yRGV0YWlscygpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dFcnJvckRldGFpbHMgPSAhdGhpcy5zaG93RXJyb3JEZXRhaWxzO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIHRoZSB3YWl0aW5nIHJvb20gbW9kYWwuXG4gICAqL1xuICBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRhc1NlcnZpY2Uuc3RvcFN0YXR1c1BvbGxpbmcoKTtcbiAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ2Nsb3NlJyk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5WaWRlb0NhbGxNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihUYXNWaWRlb2NhbGxDb21wb25lbnQsIHtcbiAgICAgIHNpemU6ICd4bCcsXG4gICAgICB3aW5kb3dDbGFzczogJ3Rhcy12aWRlby1tb2RhbCcsXG4gICAgICBiYWNrZHJvcDogJ3N0YXRpYycsXG4gICAgICBrZXlib2FyZDogZmFsc2UsXG4gICAgfSk7XG5cbiAgICB0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnNlc3Npb25JZCA9IHRoaXMucmVzb2x2ZWRTZXNzaW9uSWQ7XG4gICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50b2tlbiA9IHRoaXMudG9rZW47XG4gICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5hcHBvaW50bWVudElkID0gdGhpcy5yZXNvbHZlZEFwcG9pbnRtZW50SWQ7XG4gICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS52aWRlb0NhbGxJZCA9IHRoaXMudmlkZW9DYWxsSWQ7XG4gICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS51c2VySWQgPSB0aGlzLmN1cnJlbnRVc2VyPy5pZDtcbiAgICB0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRlbmFudCA9IHRoaXMudGVuYW50O1xuICAgIHRoaXMudmlkZW9DYWxsTW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuYnVzaW5lc3NSb2xlID0gdGhpcy5idXNpbmVzc1JvbGU7XG4gICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5pc1JldHVybmluZ0Zyb21QaXAgPSBmYWxzZTtcblxuICAgIHRoaXMudmlkZW9DYWxsTW9kYWxSZWYucmVzdWx0LnRoZW4oXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMudmlkZW9DYWxsTW9kYWxSZWYgPSBudWxsO1xuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy52aWRlb0NhbGxNb2RhbFJlZiA9IG51bGw7XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRhcy13YWl0aW5nLXJvb21cIj5cbiAgPGRpdiBjbGFzcz1cIndhaXRpbmctcm9vbS1jb250ZW50XCI+XG4gICAgPGRpdiBjbGFzcz1cInN0YXRlLWNvbnRhaW5lclwiPlxuICAgICAgPCEtLSBMb2FkaW5nIHN0YXRlcyAoc2hvdyBzcGlubmVyKSAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0ZSAhPT0gV2FpdGluZ1Jvb21TdGF0ZS5FUlJPUlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3RhdGUtaWNvbiBsb2FkaW5nXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXJcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIFxuICAgICAgICA8IS0tIFJlcXVlc3RpbmcgcGVybWlzc2lvbnMgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1JlcXVlc3RpbmdQZXJtaXNzaW9uc1wiPlxuICAgICAgICAgIDxwIGNsYXNzPVwic3RhdGUtbWVzc2FnZVwiPlNvbGljaXRhbmRvIHBlcm1pc29zLi4uPC9wPlxuICAgICAgICAgIDxwIGNsYXNzPVwic3RhdGUtc3VibWVzc2FnZVwiPlBvciBmYXZvciwgYWNlcHTDoSBsb3MgcGVybWlzb3MgZGUgY8OhbWFyYSB5IG1pY3LDs2Zvbm8uPC9wPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgXG4gICAgICAgIDwhLS0gV2FpdGluZyBmb3IgYWRtaXNzaW9uIChwZXJtaXNzaW9ucyBncmFudGVkLCBub3Qgam9pbmFibGUgeWV0KSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzV2FpdGluZ0ZvckFkbWlzc2lvblwiPlxuICAgICAgICAgIDxwIGNsYXNzPVwic3RhdGUtbWVzc2FnZVwiPk1lZGljaW5hIGxhYm9yYWwgdmEgYSBhZG1pdGlydGU8L3A+XG4gICAgICAgICAgPHAgY2xhc3M9XCJzdGF0ZS1zdWJtZXNzYWdlXCI+UG9yIGZhdm9yLCBwZXJtYW5lY8OpIGVuIGVzdGEgcGFudGFsbGEuPC9wPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgXG4gICAgICAgIDwhLS0gR2V0dGluZyB0b2tlbiAvIEpvaW5pbmcgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0ZSA9PT0gV2FpdGluZ1Jvb21TdGF0ZS5HRVRUSU5HX1RPS0VOIHx8IHN0YXRlID09PSBXYWl0aW5nUm9vbVN0YXRlLkpPSU5JTkdcIj5cbiAgICAgICAgICA8cCBjbGFzcz1cInN0YXRlLW1lc3NhZ2VcIj5Db25lY3RhbmRvLi4uPC9wPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgXG4gICAgICAgIDwhLS0gQ2hlY2tpbmcgc3RhdHVzICh3aGVuIG5vdCByZXF1ZXN0aW5nIHBlcm1pc3Npb25zKSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXRlID09PSBXYWl0aW5nUm9vbVN0YXRlLkNIRUNLSU5HX1NUQVRVUyAmJiAhaXNSZXF1ZXN0aW5nUGVybWlzc2lvbnNcIj5cbiAgICAgICAgICA8cCBjbGFzcz1cInN0YXRlLW1lc3NhZ2VcIj5WZXJpZmljYW5kbyBlc3RhZG8uLi48L3A+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gRXJyb3Igc3RhdGUgKHNob3cgZXJyb3IgaWNvbiBhbmQgbWVzc2FnZSkgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RhdGUgPT09IFdhaXRpbmdSb29tU3RhdGUuRVJST1JcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0YXRlLWljb24gZXJyb3JcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHAgY2xhc3M9XCJzdGF0ZS1tZXNzYWdlIGVycm9yXCI+T2N1cnJpw7MgdW4gZXJyb3I8L3A+XG4gICAgICAgIFxuICAgICAgICA8IS0tIENvbGxhcHNpYmxlIGVycm9yIGRldGFpbHMgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1kcm9wZG93blwiICpuZ0lmPVwiZXJyb3JNZXNzYWdlXCI+XG4gICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItdG9nZ2xlLWJ0blwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRXJyb3JEZXRhaWxzKClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJzaG93RXJyb3JEZXRhaWxzXCJcbiAgICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJlcnJvci1kZXRhaWxzLWNvbnRlbnRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuPlZlciBkZXRhbGxlcyBkZWwgZXJyb3I8L3NwYW4+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhXCIgW2NsYXNzLmZhLWNoZXZyb24tZG93bl09XCIhc2hvd0Vycm9yRGV0YWlsc1wiIFtjbGFzcy5mYS1jaGV2cm9uLXVwXT1cInNob3dFcnJvckRldGFpbHNcIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGRpdiBcbiAgICAgICAgICAgIGlkPVwiZXJyb3ItZGV0YWlscy1jb250ZW50XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXJyb3ItZGV0YWlscy1jb250ZW50XCJcbiAgICAgICAgICAgIFtjbGFzcy5leHBhbmRlZF09XCJzaG93RXJyb3JEZXRhaWxzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cCBjbGFzcz1cImVycm9yLWRldGFpbHMtdGV4dFwiPnt7IGVycm9yTWVzc2FnZSB9fTwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIFxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyb3ItYWN0aW9uc1wiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGFjdGlvbi1idG4gcmV0cnktYnRuXCIgKGNsaWNrKT1cInJldHJ5KClcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcmVmcmVzaFwiPjwvaT5cbiAgICAgICAgICAgIFJlaW50ZW50YXJcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBhY3Rpb24tYnRuIGNsb3NlLWJ0blwiIChjbGljayk9XCJjbG9zZSgpXCI+XG4gICAgICAgICAgICBDZXJyYXJcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -73,6 +73,11 @@ export var ViewMode;
|
|
|
73
73
|
ViewMode["FULLSCREEN"] = "FULLSCREEN";
|
|
74
74
|
ViewMode["PIP"] = "PIP";
|
|
75
75
|
})(ViewMode || (ViewMode = {}));
|
|
76
|
+
export var FeedbackMotiveType;
|
|
77
|
+
(function (FeedbackMotiveType) {
|
|
78
|
+
FeedbackMotiveType["TECHNICAL"] = "TECHNICAL";
|
|
79
|
+
FeedbackMotiveType["BUSINESS"] = "BUSINESS";
|
|
80
|
+
})(FeedbackMotiveType || (FeedbackMotiveType = {}));
|
|
76
81
|
// Appointment types
|
|
77
82
|
export var AppointmentStatus;
|
|
78
83
|
(function (AppointmentStatus) {
|
|
@@ -81,4 +86,4 @@ export var AppointmentStatus;
|
|
|
81
86
|
AppointmentStatus["RESCHEDULED"] = "RESCHEDULED";
|
|
82
87
|
AppointmentStatus["ACTIVE"] = "ACTIVE";
|
|
83
88
|
})(AppointmentStatus || (AppointmentStatus = {}));
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLmludGVyZmFjZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9pbnRlcmZhY2VzL3Rhcy5pbnRlcmZhY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFFBQVE7QUFDUixNQUFNLENBQU4sSUFBWSxXQUtYO0FBTEQsV0FBWSxXQUFXO0lBQ3JCLDBCQUFXLENBQUE7SUFDWCx3QkFBUyxDQUFBO0lBQ1Qsa0NBQW1CLENBQUE7SUFDbkIsb0RBQXFDLENBQUE7QUFDdkMsQ0FBQyxFQUxXLFdBQVcsS0FBWCxXQUFXLFFBS3RCO0FBRUQsTUFBTSxDQUFOLElBQVksY0FHWDtBQUhELFdBQVksY0FBYztJQUN4Qiw2Q0FBMkIsQ0FBQTtJQUMzQix5Q0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBSFcsY0FBYyxLQUFkLGNBQWMsUUFHekI7QUFFRCxNQUFNLENBQU4sSUFBWSxXQUlYO0FBSkQsV0FBWSxXQUFXO0lBQ3JCLDhCQUFlLENBQUE7SUFDZiw0QkFBYSxDQUFBO0lBQ2Isc0NBQXVCLENBQUE7QUFDekIsQ0FBQyxFQUpXLFdBQVcsS0FBWCxXQUFXLFFBSXRCO0FBRUQsTUFBTSxDQUFOLElBQVksZUFLWDtBQUxELFdBQVksZUFBZTtJQUN6QixrREFBK0IsQ0FBQTtJQUMvQixzQ0FBbUIsQ0FBQTtJQUNuQiw0Q0FBeUIsQ0FBQTtJQUN6QixnQ0FBYSxDQUFBO0FBQ2YsQ0FBQyxFQUxXLGVBQWUsS0FBZixlQUFlLFFBSzFCO0FBRUQsTUFBTSxDQUFOLElBQVksa0JBS1g7QUFMRCxXQUFZLGtCQUFrQjtJQUM1Qix1Q0FBaUIsQ0FBQTtJQUNqQiwyQ0FBcUIsQ0FBQTtJQUNyQix5Q0FBbUIsQ0FBQTtJQUNuQiw2Q0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBTFcsa0JBQWtCLEtBQWxCLGtCQUFrQixRQUs3QjtBQUVELE1BQU0sQ0FBTixJQUFZLFVBSVg7QUFKRCxXQUFZLFVBQVU7SUFDcEIsK0JBQWlCLENBQUE7SUFDakIsbUNBQXFCLENBQUE7SUFDckIsbUNBQXFCLENBQUE7QUFDdkIsQ0FBQyxFQUpXLFVBQVUsS0FBVixVQUFVLFFBSXJCO0FBRUQsTUFBTSxDQUFOLElBQVksY0FRWDtBQVJELFdBQVksY0FBYztJQUN4QiwyREFBeUMsQ0FBQTtJQUN6QywyREFBeUMsQ0FBQTtJQUN6Qyw2QkFBVyxDQUFBO0lBQ1gsaURBQStCLENBQUE7SUFDL0IscUVBQW1ELENBQUE7SUFDbkQsK0RBQTZDLENBQUE7SUFDN0MsdURBQXFDLENBQUE7QUFDdkMsQ0FBQyxFQVJXLGNBQWMsS0FBZCxjQUFjLFFBUXpCO0FBRUQsTUFBTSxDQUFOLElBQVksU0FJWDtBQUpELFdBQVksU0FBUztJQUNuQixnQ0FBbUIsQ0FBQTtJQUNuQixnQ0FBbUIsQ0FBQTtJQUNuQiw4QkFBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSlcsU0FBUyxLQUFULFNBQVMsUUFJcEI7QUFFRCxNQUFNLENBQU4sSUFBWSxjQUtYO0FBTEQsV0FBWSxjQUFjO0lBQ3hCLHVDQUFxQixDQUFBO0lBQ3JCLHFDQUFtQixDQUFBO0lBQ25CLG1DQUFpQixDQUFBO0lBQ2pCLHVDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFMVyxjQUFjLEtBQWQsY0FBYyxRQUt6QjtBQUVELE1BQU0sQ0FBTixJQUFZLFNBTVg7QUFORCxXQUFZLFNBQVM7SUFDbkIsMEJBQWEsQ0FBQTtJQUNiLHNDQUF5QixDQUFBO0lBQ3pCLG9DQUF1QixDQUFBO0lBQ3ZCLDBDQUE2QixDQUFBO0lBQzdCLDRCQUFlLENBQUE7QUFDakIsQ0FBQyxFQU5XLFNBQVMsS0FBVCxTQUFTLFFBTXBCO0FBRUQsTUFBTSxDQUFOLElBQVksUUFHWDtBQUhELFdBQVksUUFBUTtJQUNsQixxQ0FBeUIsQ0FBQTtJQUN6Qix1QkFBVyxDQUFBO0FBQ2IsQ0FBQyxFQUhXLFFBQVEsS0FBUixRQUFRLFFBR25CO0FBRUQsTUFBTSxDQUFOLElBQVksa0JBR1g7QUFIRCxXQUFZLGtCQUFrQjtJQUM1Qiw2Q0FBdUIsQ0FBQTtJQUN2QiwyQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBSFcsa0JBQWtCLEtBQWxCLGtCQUFrQixRQUc3QjtBQStHRCxvQkFBb0I7QUFDcEIsTUFBTSxDQUFOLElBQVksaUJBS1g7QUFMRCxXQUFZLGlCQUFpQjtJQUMzQiw0Q0FBdUIsQ0FBQTtJQUN2Qiw0Q0FBdUIsQ0FBQTtJQUN2QixnREFBMkIsQ0FBQTtJQUMzQixzQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBTFcsaUJBQWlCLEtBQWpCLGlCQUFpQixRQUs1QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEVudW1zXG5leHBvcnQgZW51bSBUYXNSb29tVHlwZSB7XG4gIFRBUyA9ICdUQVMnLFxuICBKTSA9ICdKTScsXG4gIFdFQklOQVIgPSAnV0VCSU5BUicsXG4gIFdFTExORVNTX01BTkFHRVIgPSAnV0VMTE5FU1NfTUFOQUdFUicsXG59XG5cbmV4cG9ydCBlbnVtIFRhc1Nlc3Npb25UeXBlIHtcbiAgU1BPTlRBTkVPVVMgPSAnU1BPTlRBTkVPVVMnLFxuICBTQ0hFRFVMRUQgPSAnU0NIRURVTEVEJyxcbn1cblxuZXhwb3J0IGVudW0gVGFzVXNlclJvbGUge1xuICBPV05FUiA9ICdPV05FUicsXG4gIFVTRVIgPSAnVVNFUicsXG4gIE1PREVSQVRPUiA9ICdNT0RFUkFUT1InLFxufVxuXG5leHBvcnQgZW51bSBUYXNCdXNpbmVzc1JvbGUge1xuICBBRE1JTl9NQU5BR0VSID0gJ0FETUlOX01BTkFHRVInLFxuICBNQU5BR0VSID0gJ01BTkFHRVInLFxuICBCQUNLT0ZGSUNFID0gJ0JBQ0tPRkZJQ0UnLFxuICBVU0VSID0gJ1VTRVInLFxufVxuXG5leHBvcnQgZW51bSBWaWRlb1Nlc3Npb25TdGF0dXMge1xuICBBQ1RJVkUgPSAnQUNUSVZFJyxcbiAgSU5BQ1RJVkUgPSAnSU5BQ1RJVkUnLFxuICBQRU5ESU5HID0gJ1BFTkRJTkcnLFxuICBTQ0hFRFVMRUQgPSAnU0NIRURVTEVEJyxcbn1cblxuZXhwb3J0IGVudW0gVXNlclN0YXR1cyB7XG4gIEFDVElWRSA9ICdBQ1RJVkUnLFxuICBJTkFDVElWRSA9ICdJTkFDVElWRScsXG4gIEFTU0lHTkVEID0gJ0FTU0lHTkVEJyxcbn1cblxuZXhwb3J0IGVudW0gVXNlckNhbGxBY3Rpb24ge1xuICBXQUlUSU5HX1JPT01fRU5URVIgPSAnV0FJVElOR19ST09NX0VOVEVSJyxcbiAgV0FJVElOR19ST09NX0xFQVZFID0gJ1dBSVRJTkdfUk9PTV9MRUFWRScsXG4gIEJBTiA9ICdCQU4nLFxuICBDSEFOR0VfU1RBVFVTID0gJ0NIQU5HRV9TVEFUVVMnLFxuICBSRVFVRVNUX0dFT0xPQ0FMSVpBVElPTiA9ICdSRVFVRVNUX0dFT0xPQ0FMSVpBVElPTicsXG4gIEFDVElWQVRFX0dFT0xPQ0FUSU9OID0gJ0FDVElWQVRFX0dFT0xPQ0FUSU9OJyxcbiAgREVOWV9HRU9MT0NBVElPTiA9ICdERU5ZX0dFT0xPQ0FUSU9OJyxcbn1cblxuZXhwb3J0IGVudW0gR2VvU3RhdHVzIHtcbiAgUEVORElORyA9ICdQRU5ESU5HJyxcbiAgR1JBTlRFRCA9ICdHUkFOVEVEJyxcbiAgREVOSUVEID0gJ0RFTklFRCcsXG59XG5cbmV4cG9ydCBlbnVtIFJvb21Vc2VyU3RhdHVzIHtcbiAgQVNTSUdORUQgPSAnQVNTSUdORUQnLFxuICBXQUlUSU5HID0gJ1dBSVRJTkcnLFxuICBKT0lORUQgPSAnSk9JTkVEJyxcbiAgRklOSVNIRUQgPSAnRklOSVNIRUQnLFxufVxuXG5leHBvcnQgZW51bSBDYWxsU3RhdGUge1xuICBJRExFID0gJ0lETEUnLFxuICBDT05ORUNUSU5HID0gJ0NPTk5FQ1RJTkcnLFxuICBDT05ORUNURUQgPSAnQ09OTkVDVEVEJyxcbiAgRElTQ09OTkVDVEVEID0gJ0RJU0NPTk5FQ1RFRCcsXG4gIEVSUk9SID0gJ0VSUk9SJyxcbn1cblxuZXhwb3J0IGVudW0gVmlld01vZGUge1xuICBGVUxMU0NSRUVOID0gJ0ZVTExTQ1JFRU4nLFxuICBQSVAgPSAnUElQJyxcbn1cblxuZXhwb3J0IGVudW0gRmVlZGJhY2tNb3RpdmVUeXBlIHtcbiAgVEVDSE5JQ0FMID0gJ1RFQ0hOSUNBTCcsXG4gIEJVU0lORVNTID0gJ0JVU0lORVNTJyxcbn1cblxuLy8gVXNlciBpbnRlcmZhY2VzXG5leHBvcnQgaW50ZXJmYWNlIFRhc0N1cnJlbnRVc2VyIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBsYXN0bmFtZTogc3RyaW5nO1xuICByb2xlOiBUYXNVc2VyUm9sZTtcbn1cblxuLyoqIElucHV0IGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBUQVMgdmlkZW8gY2FsbCBsaWJyYXJ5ICovXG5leHBvcnQgaW50ZXJmYWNlIFRhc0NhbGxDb25maWcge1xuICAvLyBTdGF0dXMgZW5kcG9pbnQgcGFyYW1zXG4gIGFwcG9pbnRtZW50SWQ/OiBudW1iZXI7XG4gIHNlc3Npb25JZD86IHN0cmluZztcbiAgcm9vbVR5cGU6IFRhc1Jvb21UeXBlO1xuICBlbnRpdHlJZDogbnVtYmVyO1xuICB0ZW5hbnQ6IHN0cmluZztcbiAgYnVzaW5lc3NSb2xlOiBUYXNCdXNpbmVzc1JvbGU7XG4gIC8vIEN1cnJlbnQgdXNlciBpbmZvIChmb3IgdG9rZW4gcmVxdWVzdClcbiAgY3VycmVudFVzZXI6IFRhc0N1cnJlbnRVc2VyO1xufVxuXG4vLyBBUEkgUmVxdWVzdC9SZXNwb25zZSBpbnRlcmZhY2VzXG5leHBvcnQgaW50ZXJmYWNlIFN0YXJ0U2Vzc2lvblJlcXVlc3Qge1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBsYXN0bmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlVG9rZW5SZXF1ZXN0IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgbGFzdG5hbWU6IHN0cmluZztcbiAgcm9sZVZDOiBUYXNVc2VyUm9sZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZVRva2VuUmVzcG9uc2Uge1xuICBjb250ZW50OiB7XG4gICAgdG9rZW46IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm94eVZpZGVvU3RhdHVzUmVxdWVzdCB7XG4gIGFwcG9pbnRtZW50SWQ/OiBudW1iZXI7XG4gIGJ1c2luZXNzUm9sZT86IFRhc0J1c2luZXNzUm9sZTtcbiAgdGVuYW50Pzogc3RyaW5nO1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIHJvb21UeXBlPzogVGFzUm9vbVR5cGU7XG4gIGVudGl0eUlkPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByb3h5VmlkZW9TdGF0dXNVc2VyIHtcbiAgdXNlcklkOiBudW1iZXI7XG4gIHJvbDogVGFzVXNlclJvbGU7XG4gIHN0YXR1czogVXNlclN0YXR1cztcbiAgZ2VvU3RhdHVzOiBHZW9TdGF0dXM7XG4gIGxhdGl0dWRlOiBudW1iZXIgfCBudWxsO1xuICBsb25naXR1ZGU6IG51bWJlciB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJveHlWaWRlb1N0YXR1c1Jlc3BvbnNlIHtcbiAgY29udGVudDoge1xuICAgIHZpZGVvQ2FsbElkOiBudW1iZXI7XG4gICAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gICAgc3RhdHVzVkw6IFZpZGVvU2Vzc2lvblN0YXR1cztcbiAgICBqb2luYWJsZTogYm9vbGVhbjtcbiAgICB3YWl0aW5nUm9vbUF2YWlsYWJsZTogYm9vbGVhbjtcbiAgICBhcHBvaW50bWVudElkOiBudW1iZXI7XG4gICAgYWN0aXZhdGVHZW86IGJvb2xlYW47XG4gICAgZ2VvUmVxdWVzdEFjdGl2ZTogYm9vbGVhbiB8IG51bGw7IC8vIE93bmVyIHNlbnQgZ2VvIHJlcXVlc3QsIHdhaXRpbmcgZm9yIHVzZXIgcmVzcG9uc2VcbiAgICBhbGxHZW9HcmFudGVkOiBib29sZWFuOyAvLyBBbGwgdXNlcnMgaGF2ZSByZXNwb25kZWQgd2l0aCBnZW9cbiAgICB1c2VyczogUHJveHlWaWRlb1N0YXR1c1VzZXJbXTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm94eVZpZGVvRmluaXNoUmVxdWVzdCB7XG4gIHNlc3Npb25JZDogc3RyaW5nO1xuICBidXNpbmVzc1JvbGU6IFRhc0J1c2luZXNzUm9sZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaW5pc2hTZXNzaW9uUmVzcG9uc2Uge1xuICBjb250ZW50OiB7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIGNhbGxTdGF0dXM6IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm94eVZpZGVvVXNlck1vZGlmeVJlcXVlc3Qge1xuICB1c2VySWQ/OiBudW1iZXI7XG4gIHZpZGVvQ2FsbElkOiBudW1iZXI7XG4gIGFjdGlvbj86IFVzZXJDYWxsQWN0aW9uO1xuICBuZXdTdGF0dXM/OiBSb29tVXNlclN0YXR1cztcbiAgbGF0aXR1ZGU/OiBudW1iZXI7XG4gIGxvbmdpdHVkZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXYWl0aW5nUm9vbVVzZXIge1xuICB1c2VySWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBzdGF0dXM6IFJvb21Vc2VyU3RhdHVzO1xufVxuXG4vKiogVXNlciBnZW9sb2NhdGlvbiBpbmZvIGZvciBvd25lciBwYW5lbCAqL1xuZXhwb3J0IGludGVyZmFjZSBVc2VyR2VvSW5mbyB7XG4gIHVzZXJJZDogbnVtYmVyO1xuICBnZW9TdGF0dXM6IEdlb1N0YXR1cztcbiAgbGF0aXR1ZGU6IG51bWJlciB8IG51bGw7XG4gIGxvbmdpdHVkZTogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gQXBwb2ludG1lbnQgdHlwZXNcbmV4cG9ydCBlbnVtIEFwcG9pbnRtZW50U3RhdHVzIHtcbiAgQ09ORklSTUVEID0gJ0NPTkZJUk1FRCcsXG4gIENBTkNFTExFRCA9ICdDQU5DRUxMRUQnLFxuICBSRVNDSEVEVUxFRCA9ICdSRVNDSEVEVUxFRCcsXG4gIEFDVElWRSA9ICdBQ1RJVkUnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhc1BhcnRpY2lwYW50IHtcbiAgdXNlcklkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUYXNBcHBvaW50bWVudCB7XG4gIGlkOiBudW1iZXI7XG4gIGFnZW5kYUlkOiBudW1iZXI7XG4gIGRhdGU6IHN0cmluZzsgICAgICAgLy8gXCJZWVlZLU1NLUREXCJcbiAgc3RhcnRUaW1lOiBzdHJpbmc7ICAvLyBcIkhIOm1tXCJcbiAgZW5kVGltZTogc3RyaW5nOyAgICAvLyBcIkhIOm1tXCJcbiAgYm9va2luZ1R5cGU6IHN0cmluZztcbiAgc3RhdHVzOiBBcHBvaW50bWVudFN0YXR1cztcbiAgdGl0bGU6IHN0cmluZztcbiAgbm90ZXM6IHN0cmluZztcbiAgZW50aXR5SWQ6IG51bWJlcjtcbiAgcm9vbVR5cGU6IFRhc1Jvb21UeXBlO1xuICBwYXJ0aWNpcGFudHM6IFRhc1BhcnRpY2lwYW50W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QXBwb2ludG1lbnRzUmVxdWVzdCB7XG4gIGZyb21EYXRlOiBzdHJpbmc7ICAvLyBZWVlZLU1NLUREXG4gIHRvRGF0ZTogc3RyaW5nOyAgICAvLyBZWVlZLU1NLUREXG4gIGVudGl0eUlkPzogbnVtYmVyOyAvLyBPcHRpb25hbCBlbnRpdHkgSUQgZmlsdGVyXG59XG5cbi8vIEZlZWRiYWNrIGludGVyZmFjZXNcbmV4cG9ydCBpbnRlcmZhY2UgU2F2ZUZlZWRiYWNrUmVxdWVzdCB7XG4gIHZpZGVvQ2FsbElkOiBudW1iZXI7XG4gIG1vdGl2ZUlkOiBudW1iZXI7XG4gIG1vdGl2ZVR5cGU/OiBGZWVkYmFja01vdGl2ZVR5cGU7XG4gIG9ic2VydmF0aW9uOiBzdHJpbmc7XG4gIHJhdGluZzogbnVtYmVyOyAvLyBNdXN0IGJlIGJldHdlZW4gMSBhbmQgNVxuICB0ZW5hbnQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGZWVkYmFja01vdGl2ZSB7XG4gIGlkOiBudW1iZXI7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIG1vdGl2ZVR5cGU6IEZlZWRiYWNrTW90aXZlVHlwZTtcbn1cbiJdfQ==
|