tas-uell-sdk 0.0.4 → 0.0.5

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.
@@ -7,6 +7,7 @@ import * as i0 from "@angular/core";
7
7
  import * as i1 from "@ng-bootstrap/ng-bootstrap";
8
8
  import * as i2 from "../../services/tas.service";
9
9
  import * as i3 from "@angular/common";
10
+ import * as i4 from "@angular/forms";
10
11
  export var WaitingRoomState;
11
12
  (function (WaitingRoomState) {
12
13
  WaitingRoomState["IDLE"] = "IDLE";
@@ -32,8 +33,14 @@ export class TasWaitingRoomComponent {
32
33
  this.state = WaitingRoomState.IDLE;
33
34
  this.WaitingRoomState = WaitingRoomState; // Expose enum to template
34
35
  this.errorMessage = '';
35
- /** Whether we have an existing session (skip room creation) */
36
+ /** Whether we have an existing session (passed via input) */
36
37
  this.hasExistingSession = false;
38
+ /** UI toggle: show "Join Existing" input vs "Create New" */
39
+ this.showJoinExistingUI = false;
40
+ /** Manual session ID input by user */
41
+ this.manualSessionId = '';
42
+ /** Track if we're joining an existing session (for UI display) */
43
+ this.isJoiningExisting = false;
37
44
  // Session data
38
45
  this.sessionId = '';
39
46
  this.token = '';
@@ -44,10 +51,11 @@ export class TasWaitingRoomComponent {
44
51
  ngOnInit() {
45
52
  this.buildUsersArray();
46
53
  this.setupViewModeSubscription();
47
- // Check if we have an existing session
54
+ // Check if we have an existing session passed via input
48
55
  if (this.existingSessionId && this.existingSessionId.trim() !== '') {
49
56
  this.hasExistingSession = true;
50
57
  this.sessionId = this.existingSessionId;
58
+ this.isJoiningExisting = true;
51
59
  }
52
60
  }
53
61
  ngOnDestroy() {
@@ -62,6 +70,7 @@ export class TasWaitingRoomComponent {
62
70
  this.errorMessage = 'Missing configuration data (tenant or user)';
63
71
  return;
64
72
  }
73
+ this.isJoiningExisting = false;
65
74
  this.state = WaitingRoomState.CREATING_ROOM;
66
75
  this.errorMessage = '';
67
76
  const body = {
@@ -93,6 +102,19 @@ export class TasWaitingRoomComponent {
93
102
  }
94
103
  }));
95
104
  }
105
+ /**
106
+ * Join existing room with manually entered session ID
107
+ */
108
+ joinExistingWithManualId() {
109
+ if (!this.manualSessionId || this.manualSessionId.trim() === '') {
110
+ this.state = WaitingRoomState.ERROR;
111
+ this.errorMessage = 'Please enter a valid Session ID';
112
+ return;
113
+ }
114
+ this.sessionId = this.manualSessionId.trim();
115
+ this.isJoiningExisting = true;
116
+ this.getTokenForExistingSession();
117
+ }
96
118
  /**
97
119
  * Gets a token for an existing session (existing session flow)
98
120
  */
@@ -102,6 +124,7 @@ export class TasWaitingRoomComponent {
102
124
  this.errorMessage = 'Missing session ID or user data';
103
125
  return;
104
126
  }
127
+ this.isJoiningExisting = true;
105
128
  this.state = WaitingRoomState.GETTING_TOKEN;
106
129
  this.errorMessage = '';
107
130
  this.subscriptions.add(this.tasService.generateToken({
@@ -117,7 +140,7 @@ export class TasWaitingRoomComponent {
117
140
  error: (err) => {
118
141
  console.error('Error getting token:', err);
119
142
  this.state = WaitingRoomState.ERROR;
120
- this.errorMessage = 'Error getting session token. Please try again.';
143
+ this.errorMessage = 'Error getting session token. Please check the Session ID and try again.';
121
144
  }
122
145
  }));
123
146
  }
@@ -146,7 +169,8 @@ export class TasWaitingRoomComponent {
146
169
  this.state = WaitingRoomState.IDLE;
147
170
  this.errorMessage = '';
148
171
  this.token = '';
149
- // Only reset sessionId if we don't have an existing one
172
+ this.isJoiningExisting = false;
173
+ // Only reset sessionId if we don't have an existing one from input
150
174
  if (!this.hasExistingSession) {
151
175
  this.sessionId = '';
152
176
  }
@@ -197,10 +221,10 @@ export class TasWaitingRoomComponent {
197
221
  }
198
222
  }
199
223
  TasWaitingRoomComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TasWaitingRoomComponent, deps: [{ token: i1.NgbActiveModal }, { token: i2.TasService }, { token: i1.NgbModal }], target: i0.ɵɵFactoryTarget.Component });
200
- TasWaitingRoomComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TasWaitingRoomComponent, selector: "tas-waiting-room", inputs: { appointmentId: "appointmentId", product: "product", tenantId: "tenantId", currentUser: "currentUser", ownerUserIds: "ownerUserIds", regularUserIds: "regularUserIds", moderatorUserIds: "moderatorUserIds", existingSessionId: "existingSessionId" }, ngImport: i0, template: "<div class=\"tas-waiting-room\">\n\t<!-- Header -->\n\t<div class=\"waiting-room-header\">\n\t\t<div class=\"header-icon\">\n\t\t\t<i class=\"fa fa-video-camera\"></i>\n\t\t</div>\n\t\t<h2 class=\"header-title\">Waiting Room</h2>\n\t\t<p class=\"header-subtitle\">Prepare for your video call</p>\n\t\t<button type=\"button\" class=\"close-btn\" (click)=\"cancel()\" aria-label=\"Close\">\n\t\t\t<span aria-hidden=\"true\">&times;</span>\n\t\t</button>\n\t</div>\n\n\t<!-- Content -->\n\t<div class=\"waiting-room-content\">\n\t\t<!-- IDLE State - New Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.IDLE && !hasExistingSession\">\n\t\t\t<div class=\"state-icon idle\">\n\t\t\t\t<i class=\"fa fa-plus-circle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tCreate a new video call room\n\t\t\t</p>\n\t\t\t<p class=\"state-submessage\">\n\t\t\t\tPress the button to begin\n\t\t\t</p>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn create-btn\"\n\t\t\t\t(click)=\"createRoom()\">\n\t\t\t\t<i class=\"fa fa-plus\"></i>\n\t\t\t\tCreate Room\n\t\t\t</button>\n\t\t</div>\n\n\t\t<!-- IDLE State - Existing Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.IDLE && hasExistingSession\">\n\t\t\t<div class=\"state-icon idle\">\n\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tJoin existing video call room\n\t\t\t</p>\n\t\t\t<p class=\"state-submessage\">\n\t\t\t\tPress the button to get access\n\t\t\t</p>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn create-btn\"\n\t\t\t\t(click)=\"getTokenForExistingSession()\">\n\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\tJoin Room\n\t\t\t</button>\n\t\t</div>\n\n\t\t<!-- CREATING_ROOM State (only for new sessions) -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.CREATING_ROOM\">\n\t\t\t<div class=\"state-icon loading\">\n\t\t\t\t<div class=\"spinner\"></div>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tCreating video call room...\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step active\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Creating</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- GETTING_TOKEN State - New Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.GETTING_TOKEN && !hasExistingSession\">\n\t\t\t<div class=\"state-icon loading\">\n\t\t\t\t<div class=\"spinner\"></div>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tPreparing room access...\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Created</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step active\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- GETTING_TOKEN State - Existing Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.GETTING_TOKEN && hasExistingSession\">\n\t\t\t<div class=\"state-icon loading\">\n\t\t\t\t<div class=\"spinner\"></div>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tGetting room access...\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step active\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Connecting</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- READY State - New Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.READY && !hasExistingSession\">\n\t\t\t<div class=\"state-icon ready\">\n\t\t\t\t<i class=\"fa fa-check-circle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message success\">\n\t\t\t\tRoom is ready!\n\t\t\t</p>\n\t\t\t<p class=\"state-submessage\">\n\t\t\t\tYou can join the video call when ready\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Created</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn join-btn\"\n\t\t\t\t(click)=\"joinSession()\">\n\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\tJoin Session\n\t\t\t</button>\n\t\t</div>\n\n\t\t<!-- READY State - Existing Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.READY && hasExistingSession\">\n\t\t\t<div class=\"state-icon ready\">\n\t\t\t\t<i class=\"fa fa-check-circle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message success\">\n\t\t\t\tReady to join!\n\t\t\t</p>\n\t\t\t<p class=\"state-submessage\">\n\t\t\t\tYou can join the video call when ready\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Connected</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn join-btn\"\n\t\t\t\t(click)=\"joinSession()\">\n\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\tJoin Session\n\t\t\t</button>\n\t\t</div>\n\n\t\t<!-- ERROR State -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.ERROR\">\n\t\t\t<div class=\"state-icon error\">\n\t\t\t\t<i class=\"fa fa-exclamation-triangle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message error\">\n\t\t\t\tAn error occurred\n\t\t\t</p>\n\t\t\t<p class=\"error-details\" *ngIf=\"errorMessage\">\n\t\t\t\t{{ errorMessage }}\n\t\t\t</p>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn retry-btn\"\n\t\t\t\t(click)=\"retry()\">\n\t\t\t\t<i class=\"fa fa-refresh\"></i>\n\t\t\t\tRetry\n\t\t\t</button>\n\t\t</div>\n\t</div>\n\n\t<!-- Footer -->\n\t<div class=\"waiting-room-footer\">\n\t\t<button \n\t\t\ttype=\"button\" \n\t\t\tclass=\"btn cancel-btn\"\n\t\t\t(click)=\"cancel()\">\n\t\t\tCancel\n\t\t</button>\n\t</div>\n</div>\n", styles: [".tas-waiting-room{display:flex;flex-direction:column;min-height:420px;background:#ffffff;border-radius:5px;overflow:hidden}.waiting-room-header{position:relative;padding:32px 40px 24px;text-align:center;border-bottom:1px solid #e9ecef}.waiting-room-header .header-icon{width:72px;height:72px;margin:0 auto 16px;background:linear-gradient(135deg,#1da4b1 0%,#0077b3 100%);border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 16px #1da4b140}.waiting-room-header .header-icon i{font-size:28px;color:#fff}.waiting-room-header .header-title{margin:0 0 8px;font-size:20px;font-weight:700;line-height:28px;color:#212529}.waiting-room-header .header-subtitle{margin:0;font-size:14px;color:#6c757d;font-weight:400}.waiting-room-header .close-btn{position:absolute;top:16px;right:16px;width:32px;height:32px;border:none;background:transparent;border-radius:4px;color:#6c757d;cursor:pointer;transition:all .2s ease;font-size:20px}.waiting-room-header .close-btn:hover{background:#f8f9fa;color:#212529}.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:360px;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.idle{background:rgba(29,164,177,.1);border:2px dashed #1da4b1}.state-icon.idle i{color:#1da4b1}.state-icon.loading{background:rgba(29,164,177,.1);border:2px solid #1da4b1}.state-icon.ready{background:linear-gradient(135deg,#1da4b1 0%,#38b89a 100%);box-shadow:0 4px 16px #1da4b14d}.state-icon.ready i{color:#fff}.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.success{color:#1da4b1}.state-message.error{color:#ee316b}.state-submessage{font-size:14px;color:#6c757d;margin:0 0 24px;font-weight:400}.error-details{font-size:13px;color:#ee316b;margin:0 0 24px;padding:12px 16px;background:rgba(238,49,107,.08);border-radius:8px;border:1px solid rgba(238,49,107,.2)}.progress-steps{display:flex;justify-content:center;gap:24px;margin:24px 0 32px}.step{display:flex;flex-direction:column;align-items:center;gap:8px}.step .step-indicator{width:32px;height:32px;border-radius:50%;background:#f8f9fa;border:2px solid #e9ecef;display:flex;align-items:center;justify-content:center;transition:all .3s ease}.step .step-indicator i{font-size:12px;color:#fff}.step .step-label{font-size:11px;color:#6c757d;text-transform:uppercase;letter-spacing:.5px;font-weight:500}.step.active .step-indicator{background:rgba(29,164,177,.1);border-color:#1da4b1;animation:pulse-active 1.5s infinite}.step.active .step-label{color:#1da4b1;font-weight:600}.step.completed .step-indicator{background:#1da4b1;border-color:#1da4b1}.step.completed .step-label{color:#1da4b1;font-weight:600}.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.create-btn{background:#0077b3;color:#fff;box-shadow:0 2px 8px #0077b340}.action-btn.create-btn:hover{background:#005c8a;box-shadow:0 4px 12px #0077b359}.action-btn.create-btn:active{transform:translateY(1px)}.action-btn.join-btn{background:#1da4b1;color:#fff;box-shadow:0 2px 8px #1da4b140;animation:pulse-ready 2s infinite}.action-btn.join-btn:hover{background:#17848e;box-shadow:0 4px 12px #1da4b159}.action-btn.join-btn:active{transform:translateY(1px)}.action-btn.retry-btn{background:transparent;color:#6c757d;border:1px solid #e9ecef}.action-btn.retry-btn:hover{background:#f8f9fa;border-color:#6c757d;color:#212529}.waiting-room-footer{padding:16px 40px 24px;background:#ffffff;border-top:1px solid #e9ecef;display:flex;justify-content:center}.waiting-room-footer .cancel-btn{padding:10px 24px;font-size:14px;font-weight:600;border-radius:4px;background:transparent;color:#6c757d;border:none;cursor:pointer;transition:all .2s ease}.waiting-room-footer .cancel-btn:hover{background:#f8f9fa;color:#212529}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse-active{0%,to{box-shadow:0 0 #1da4b166}50%{box-shadow:0 0 0 8px #1da4b100}}@keyframes pulse-ready{0%,to{box-shadow:0 2px 8px #1da4b140}50%{box-shadow:0 4px 16px #1da4b166}}@media (max-width: 576px){.tas-waiting-room{min-height:380px}.waiting-room-header{padding:24px 24px 20px}.waiting-room-header .header-icon{width:56px;height:56px}.waiting-room-header .header-icon i{font-size:22px}.waiting-room-header .header-title{font-size:18px}.waiting-room-content{padding:24px}.state-icon{width:64px;height:64px}.state-icon i{font-size:28px}.spinner{width:32px;height:32px}.progress-steps{gap:12px}.step .step-indicator{width:28px;height:28px}.step .step-label{font-size:9px}.action-btn{padding:10px 24px;font-size:14px}.waiting-room-footer{padding:16px 24px 20px}}\n"], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
224
+ TasWaitingRoomComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: TasWaitingRoomComponent, selector: "tas-waiting-room", inputs: { appointmentId: "appointmentId", product: "product", tenantId: "tenantId", currentUser: "currentUser", ownerUserIds: "ownerUserIds", regularUserIds: "regularUserIds", moderatorUserIds: "moderatorUserIds", existingSessionId: "existingSessionId" }, ngImport: i0, template: "<div class=\"tas-waiting-room\">\n\t<!-- Header -->\n\t<div class=\"waiting-room-header\">\n\t\t<div class=\"header-icon\">\n\t\t\t<i class=\"fa fa-video-camera\"></i>\n\t\t</div>\n\t\t<h2 class=\"header-title\">Waiting Room</h2>\n\t\t<p class=\"header-subtitle\">Prepare for your video call</p>\n\t\t<button type=\"button\" class=\"close-btn\" (click)=\"cancel()\" aria-label=\"Close\">\n\t\t\t<span aria-hidden=\"true\">&times;</span>\n\t\t</button>\n\t</div>\n\n\t<!-- Content -->\n\t<div class=\"waiting-room-content\">\n\t\t<!-- IDLE State - Show options -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.IDLE\">\n\t\t\t\n\t\t\t<!-- Tab switcher (only if no existingSessionId was passed) -->\n\t\t\t<div class=\"mode-tabs\" *ngIf=\"!hasExistingSession\">\n\t\t\t\t<button \n\t\t\t\t\ttype=\"button\" \n\t\t\t\t\tclass=\"mode-tab\" \n\t\t\t\t\t[class.active]=\"!showJoinExistingUI\"\n\t\t\t\t\t(click)=\"showJoinExistingUI = false\">\n\t\t\t\t\t<i class=\"fa fa-plus-circle\"></i>\n\t\t\t\t\tCreate New\n\t\t\t\t</button>\n\t\t\t\t<button \n\t\t\t\t\ttype=\"button\" \n\t\t\t\t\tclass=\"mode-tab\" \n\t\t\t\t\t[class.active]=\"showJoinExistingUI\"\n\t\t\t\t\t(click)=\"showJoinExistingUI = true\">\n\t\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\t\tJoin Existing\n\t\t\t\t</button>\n\t\t\t</div>\n\n\t\t\t<!-- Create New Room UI -->\n\t\t\t<div class=\"mode-content\" *ngIf=\"!showJoinExistingUI && !hasExistingSession\">\n\t\t\t\t<div class=\"state-icon idle\">\n\t\t\t\t\t<i class=\"fa fa-plus-circle\"></i>\n\t\t\t\t</div>\n\t\t\t\t<p class=\"state-message\">\n\t\t\t\t\tCreate a new video call room\n\t\t\t\t</p>\n\t\t\t\t<p class=\"state-submessage\">\n\t\t\t\t\tStart a new session for this appointment\n\t\t\t\t</p>\n\t\t\t\t<button \n\t\t\t\t\ttype=\"button\" \n\t\t\t\t\tclass=\"btn action-btn create-btn\"\n\t\t\t\t\t(click)=\"createRoom()\">\n\t\t\t\t\t<i class=\"fa fa-plus\"></i>\n\t\t\t\t\tCreate Room\n\t\t\t\t</button>\n\t\t\t</div>\n\n\t\t\t<!-- Join Existing Room UI (manual input) -->\n\t\t\t<div class=\"mode-content\" *ngIf=\"showJoinExistingUI && !hasExistingSession\">\n\t\t\t\t<div class=\"state-icon idle\">\n\t\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\t</div>\n\t\t\t\t<p class=\"state-message\">\n\t\t\t\t\tJoin an existing room\n\t\t\t\t</p>\n\t\t\t\t<p class=\"state-submessage\">\n\t\t\t\t\tEnter the session ID to join\n\t\t\t\t</p>\n\t\t\t\t<div class=\"session-input-container\">\n\t\t\t\t\t<input \n\t\t\t\t\t\ttype=\"text\" \n\t\t\t\t\t\tclass=\"session-input\"\n\t\t\t\t\t\t[(ngModel)]=\"manualSessionId\"\n\t\t\t\t\t\tplaceholder=\"Enter Session ID\"\n\t\t\t\t\t\t(keyup.enter)=\"joinExistingWithManualId()\">\n\t\t\t\t\t<button \n\t\t\t\t\t\ttype=\"button\" \n\t\t\t\t\t\tclass=\"btn action-btn create-btn\"\n\t\t\t\t\t\t[disabled]=\"!manualSessionId || manualSessionId.trim() === ''\"\n\t\t\t\t\t\t(click)=\"joinExistingWithManualId()\">\n\t\t\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\t\t\tJoin Room\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<!-- Join Existing Room UI (pre-filled session ID) -->\n\t\t\t<div class=\"mode-content\" *ngIf=\"hasExistingSession\">\n\t\t\t\t<div class=\"state-icon idle\">\n\t\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\t</div>\n\t\t\t\t<p class=\"state-message\">\n\t\t\t\t\tJoin existing video call room\n\t\t\t\t</p>\n\t\t\t\t<p class=\"state-submessage\">\n\t\t\t\t\tPress the button to get access\n\t\t\t\t</p>\n\t\t\t\t<button \n\t\t\t\t\ttype=\"button\" \n\t\t\t\t\tclass=\"btn action-btn create-btn\"\n\t\t\t\t\t(click)=\"getTokenForExistingSession()\">\n\t\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\t\tJoin Room\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- CREATING_ROOM State (only for new sessions) -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.CREATING_ROOM\">\n\t\t\t<div class=\"state-icon loading\">\n\t\t\t\t<div class=\"spinner\"></div>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tCreating video call room...\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step active\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Creating</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- GETTING_TOKEN State - New Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.GETTING_TOKEN && !isJoiningExisting\">\n\t\t\t<div class=\"state-icon loading\">\n\t\t\t\t<div class=\"spinner\"></div>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tPreparing room access...\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Created</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step active\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- GETTING_TOKEN State - Joining Existing Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.GETTING_TOKEN && isJoiningExisting\">\n\t\t\t<div class=\"state-icon loading\">\n\t\t\t\t<div class=\"spinner\"></div>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tGetting room access...\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step active\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Connecting</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- READY State - New Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.READY && !isJoiningExisting\">\n\t\t\t<div class=\"state-icon ready\">\n\t\t\t\t<i class=\"fa fa-check-circle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message success\">\n\t\t\t\tRoom is ready!\n\t\t\t</p>\n\t\t\t<p class=\"state-submessage\">\n\t\t\t\tYou can join the video call when ready\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Created</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn join-btn\"\n\t\t\t\t(click)=\"joinSession()\">\n\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\tJoin Session\n\t\t\t</button>\n\t\t</div>\n\n\t\t<!-- READY State - Joining Existing Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.READY && isJoiningExisting\">\n\t\t\t<div class=\"state-icon ready\">\n\t\t\t\t<i class=\"fa fa-check-circle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message success\">\n\t\t\t\tReady to join!\n\t\t\t</p>\n\t\t\t<p class=\"state-submessage\">\n\t\t\t\tYou can join the video call when ready\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Connected</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn join-btn\"\n\t\t\t\t(click)=\"joinSession()\">\n\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\tJoin Session\n\t\t\t</button>\n\t\t</div>\n\n\t\t<!-- ERROR State -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.ERROR\">\n\t\t\t<div class=\"state-icon error\">\n\t\t\t\t<i class=\"fa fa-exclamation-triangle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message error\">\n\t\t\t\tAn error occurred\n\t\t\t</p>\n\t\t\t<p class=\"error-details\" *ngIf=\"errorMessage\">\n\t\t\t\t{{ errorMessage }}\n\t\t\t</p>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn retry-btn\"\n\t\t\t\t(click)=\"retry()\">\n\t\t\t\t<i class=\"fa fa-refresh\"></i>\n\t\t\t\tRetry\n\t\t\t</button>\n\t\t</div>\n\t</div>\n\n\t<!-- Footer -->\n\t<div class=\"waiting-room-footer\">\n\t\t<button \n\t\t\ttype=\"button\" \n\t\t\tclass=\"btn cancel-btn\"\n\t\t\t(click)=\"cancel()\">\n\t\t\tCancel\n\t\t</button>\n\t</div>\n</div>\n", styles: [".tas-waiting-room{display:flex;flex-direction:column;min-height:420px;background:#ffffff;border-radius:5px;overflow:hidden}.waiting-room-header{position:relative;padding:32px 40px 24px;text-align:center;border-bottom:1px solid #e9ecef}.waiting-room-header .header-icon{width:72px;height:72px;margin:0 auto 16px;background:linear-gradient(135deg,#1da4b1 0%,#0077b3 100%);border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 16px #1da4b140}.waiting-room-header .header-icon i{font-size:28px;color:#fff}.waiting-room-header .header-title{margin:0 0 8px;font-size:20px;font-weight:700;line-height:28px;color:#212529}.waiting-room-header .header-subtitle{margin:0;font-size:14px;color:#6c757d;font-weight:400}.waiting-room-header .close-btn{position:absolute;top:16px;right:16px;width:32px;height:32px;border:none;background:transparent;border-radius:4px;color:#6c757d;cursor:pointer;transition:all .2s ease;font-size:20px}.waiting-room-header .close-btn:hover{background:#f8f9fa;color:#212529}.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%}.mode-tabs{display:flex;justify-content:center;gap:8px;margin-bottom:24px;padding:4px;background:#f8f9fa;border-radius:8px}.mode-tab{flex:1;padding:10px 16px;font-size:13px;font-weight:600;border:none;border-radius:6px;background:transparent;color:#6c757d;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center;gap:8px}.mode-tab i{font-size:14px}.mode-tab:hover{color:#212529}.mode-tab.active{background:#ffffff;color:#1da4b1;box-shadow:0 2px 8px #00000014}.mode-content{animation:fadeIn .3s ease}.session-input-container{display:flex;flex-direction:column;gap:16px;margin-top:8px}.session-input{width:100%;padding:14px 16px;font-size:14px;border:2px solid #e9ecef;border-radius:8px;background:#ffffff;color:#212529;transition:all .2s ease;text-align:center;font-family:Monaco,Consolas,monospace;letter-spacing:.5px}.session-input::placeholder{color:#6c757d;font-family:inherit;letter-spacing:normal}.session-input:focus{outline:none;border-color:#1da4b1;box-shadow:0 0 0 3px #1da4b126}.session-input:hover:not(:focus){border-color:#6c757d}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.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.idle{background:rgba(29,164,177,.1);border:2px dashed #1da4b1}.state-icon.idle i{color:#1da4b1}.state-icon.loading{background:rgba(29,164,177,.1);border:2px solid #1da4b1}.state-icon.ready{background:linear-gradient(135deg,#1da4b1 0%,#38b89a 100%);box-shadow:0 4px 16px #1da4b14d}.state-icon.ready i{color:#fff}.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.success{color:#1da4b1}.state-message.error{color:#ee316b}.state-submessage{font-size:14px;color:#6c757d;margin:0 0 24px;font-weight:400}.error-details{font-size:13px;color:#ee316b;margin:0 0 24px;padding:12px 16px;background:rgba(238,49,107,.08);border-radius:8px;border:1px solid rgba(238,49,107,.2)}.progress-steps{display:flex;justify-content:center;gap:24px;margin:24px 0 32px}.step{display:flex;flex-direction:column;align-items:center;gap:8px}.step .step-indicator{width:32px;height:32px;border-radius:50%;background:#f8f9fa;border:2px solid #e9ecef;display:flex;align-items:center;justify-content:center;transition:all .3s ease}.step .step-indicator i{font-size:12px;color:#fff}.step .step-label{font-size:11px;color:#6c757d;text-transform:uppercase;letter-spacing:.5px;font-weight:500}.step.active .step-indicator{background:rgba(29,164,177,.1);border-color:#1da4b1;animation:pulse-active 1.5s infinite}.step.active .step-label{color:#1da4b1;font-weight:600}.step.completed .step-indicator{background:#1da4b1;border-color:#1da4b1}.step.completed .step-label{color:#1da4b1;font-weight:600}.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.create-btn{background:#0077b3;color:#fff;box-shadow:0 2px 8px #0077b340}.action-btn.create-btn:hover{background:#005c8a;box-shadow:0 4px 12px #0077b359}.action-btn.create-btn:active{transform:translateY(1px)}.action-btn.join-btn{background:#1da4b1;color:#fff;box-shadow:0 2px 8px #1da4b140;animation:pulse-ready 2s infinite}.action-btn.join-btn:hover{background:#17848e;box-shadow:0 4px 12px #1da4b159}.action-btn.join-btn:active{transform:translateY(1px)}.action-btn.retry-btn{background:transparent;color:#6c757d;border:1px solid #e9ecef}.action-btn.retry-btn:hover{background:#f8f9fa;border-color:#6c757d;color:#212529}.waiting-room-footer{padding:16px 40px 24px;background:#ffffff;border-top:1px solid #e9ecef;display:flex;justify-content:center}.waiting-room-footer .cancel-btn{padding:10px 24px;font-size:14px;font-weight:600;border-radius:4px;background:transparent;color:#6c757d;border:none;cursor:pointer;transition:all .2s ease}.waiting-room-footer .cancel-btn:hover{background:#f8f9fa;color:#212529}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse-active{0%,to{box-shadow:0 0 #1da4b166}50%{box-shadow:0 0 0 8px #1da4b100}}@keyframes pulse-ready{0%,to{box-shadow:0 2px 8px #1da4b140}50%{box-shadow:0 4px 16px #1da4b166}}@media (max-width: 576px){.tas-waiting-room{min-height:380px}.waiting-room-header{padding:24px 24px 20px}.waiting-room-header .header-icon{width:56px;height:56px}.waiting-room-header .header-icon i{font-size:22px}.waiting-room-header .header-title{font-size:18px}.waiting-room-content{padding:24px}.state-icon{width:64px;height:64px}.state-icon i{font-size:28px}.spinner{width:32px;height:32px}.progress-steps{gap:12px}.step .step-indicator{width:28px;height:28px}.step .step-label{font-size:9px}.action-btn{padding:10px 24px;font-size:14px}.waiting-room-footer{padding:16px 24px 20px}}\n"], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
201
225
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TasWaitingRoomComponent, decorators: [{
202
226
  type: Component,
203
- args: [{ selector: 'tas-waiting-room', template: "<div class=\"tas-waiting-room\">\n\t<!-- Header -->\n\t<div class=\"waiting-room-header\">\n\t\t<div class=\"header-icon\">\n\t\t\t<i class=\"fa fa-video-camera\"></i>\n\t\t</div>\n\t\t<h2 class=\"header-title\">Waiting Room</h2>\n\t\t<p class=\"header-subtitle\">Prepare for your video call</p>\n\t\t<button type=\"button\" class=\"close-btn\" (click)=\"cancel()\" aria-label=\"Close\">\n\t\t\t<span aria-hidden=\"true\">&times;</span>\n\t\t</button>\n\t</div>\n\n\t<!-- Content -->\n\t<div class=\"waiting-room-content\">\n\t\t<!-- IDLE State - New Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.IDLE && !hasExistingSession\">\n\t\t\t<div class=\"state-icon idle\">\n\t\t\t\t<i class=\"fa fa-plus-circle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tCreate a new video call room\n\t\t\t</p>\n\t\t\t<p class=\"state-submessage\">\n\t\t\t\tPress the button to begin\n\t\t\t</p>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn create-btn\"\n\t\t\t\t(click)=\"createRoom()\">\n\t\t\t\t<i class=\"fa fa-plus\"></i>\n\t\t\t\tCreate Room\n\t\t\t</button>\n\t\t</div>\n\n\t\t<!-- IDLE State - Existing Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.IDLE && hasExistingSession\">\n\t\t\t<div class=\"state-icon idle\">\n\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tJoin existing video call room\n\t\t\t</p>\n\t\t\t<p class=\"state-submessage\">\n\t\t\t\tPress the button to get access\n\t\t\t</p>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn create-btn\"\n\t\t\t\t(click)=\"getTokenForExistingSession()\">\n\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\tJoin Room\n\t\t\t</button>\n\t\t</div>\n\n\t\t<!-- CREATING_ROOM State (only for new sessions) -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.CREATING_ROOM\">\n\t\t\t<div class=\"state-icon loading\">\n\t\t\t\t<div class=\"spinner\"></div>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tCreating video call room...\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step active\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Creating</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- GETTING_TOKEN State - New Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.GETTING_TOKEN && !hasExistingSession\">\n\t\t\t<div class=\"state-icon loading\">\n\t\t\t\t<div class=\"spinner\"></div>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tPreparing room access...\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Created</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step active\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- GETTING_TOKEN State - Existing Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.GETTING_TOKEN && hasExistingSession\">\n\t\t\t<div class=\"state-icon loading\">\n\t\t\t\t<div class=\"spinner\"></div>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tGetting room access...\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step active\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Connecting</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- READY State - New Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.READY && !hasExistingSession\">\n\t\t\t<div class=\"state-icon ready\">\n\t\t\t\t<i class=\"fa fa-check-circle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message success\">\n\t\t\t\tRoom is ready!\n\t\t\t</p>\n\t\t\t<p class=\"state-submessage\">\n\t\t\t\tYou can join the video call when ready\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Created</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn join-btn\"\n\t\t\t\t(click)=\"joinSession()\">\n\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\tJoin Session\n\t\t\t</button>\n\t\t</div>\n\n\t\t<!-- READY State - Existing Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.READY && hasExistingSession\">\n\t\t\t<div class=\"state-icon ready\">\n\t\t\t\t<i class=\"fa fa-check-circle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message success\">\n\t\t\t\tReady to join!\n\t\t\t</p>\n\t\t\t<p class=\"state-submessage\">\n\t\t\t\tYou can join the video call when ready\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Connected</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn join-btn\"\n\t\t\t\t(click)=\"joinSession()\">\n\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\tJoin Session\n\t\t\t</button>\n\t\t</div>\n\n\t\t<!-- ERROR State -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.ERROR\">\n\t\t\t<div class=\"state-icon error\">\n\t\t\t\t<i class=\"fa fa-exclamation-triangle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message error\">\n\t\t\t\tAn error occurred\n\t\t\t</p>\n\t\t\t<p class=\"error-details\" *ngIf=\"errorMessage\">\n\t\t\t\t{{ errorMessage }}\n\t\t\t</p>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn retry-btn\"\n\t\t\t\t(click)=\"retry()\">\n\t\t\t\t<i class=\"fa fa-refresh\"></i>\n\t\t\t\tRetry\n\t\t\t</button>\n\t\t</div>\n\t</div>\n\n\t<!-- Footer -->\n\t<div class=\"waiting-room-footer\">\n\t\t<button \n\t\t\ttype=\"button\" \n\t\t\tclass=\"btn cancel-btn\"\n\t\t\t(click)=\"cancel()\">\n\t\t\tCancel\n\t\t</button>\n\t</div>\n</div>\n", styles: [".tas-waiting-room{display:flex;flex-direction:column;min-height:420px;background:#ffffff;border-radius:5px;overflow:hidden}.waiting-room-header{position:relative;padding:32px 40px 24px;text-align:center;border-bottom:1px solid #e9ecef}.waiting-room-header .header-icon{width:72px;height:72px;margin:0 auto 16px;background:linear-gradient(135deg,#1da4b1 0%,#0077b3 100%);border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 16px #1da4b140}.waiting-room-header .header-icon i{font-size:28px;color:#fff}.waiting-room-header .header-title{margin:0 0 8px;font-size:20px;font-weight:700;line-height:28px;color:#212529}.waiting-room-header .header-subtitle{margin:0;font-size:14px;color:#6c757d;font-weight:400}.waiting-room-header .close-btn{position:absolute;top:16px;right:16px;width:32px;height:32px;border:none;background:transparent;border-radius:4px;color:#6c757d;cursor:pointer;transition:all .2s ease;font-size:20px}.waiting-room-header .close-btn:hover{background:#f8f9fa;color:#212529}.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:360px;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.idle{background:rgba(29,164,177,.1);border:2px dashed #1da4b1}.state-icon.idle i{color:#1da4b1}.state-icon.loading{background:rgba(29,164,177,.1);border:2px solid #1da4b1}.state-icon.ready{background:linear-gradient(135deg,#1da4b1 0%,#38b89a 100%);box-shadow:0 4px 16px #1da4b14d}.state-icon.ready i{color:#fff}.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.success{color:#1da4b1}.state-message.error{color:#ee316b}.state-submessage{font-size:14px;color:#6c757d;margin:0 0 24px;font-weight:400}.error-details{font-size:13px;color:#ee316b;margin:0 0 24px;padding:12px 16px;background:rgba(238,49,107,.08);border-radius:8px;border:1px solid rgba(238,49,107,.2)}.progress-steps{display:flex;justify-content:center;gap:24px;margin:24px 0 32px}.step{display:flex;flex-direction:column;align-items:center;gap:8px}.step .step-indicator{width:32px;height:32px;border-radius:50%;background:#f8f9fa;border:2px solid #e9ecef;display:flex;align-items:center;justify-content:center;transition:all .3s ease}.step .step-indicator i{font-size:12px;color:#fff}.step .step-label{font-size:11px;color:#6c757d;text-transform:uppercase;letter-spacing:.5px;font-weight:500}.step.active .step-indicator{background:rgba(29,164,177,.1);border-color:#1da4b1;animation:pulse-active 1.5s infinite}.step.active .step-label{color:#1da4b1;font-weight:600}.step.completed .step-indicator{background:#1da4b1;border-color:#1da4b1}.step.completed .step-label{color:#1da4b1;font-weight:600}.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.create-btn{background:#0077b3;color:#fff;box-shadow:0 2px 8px #0077b340}.action-btn.create-btn:hover{background:#005c8a;box-shadow:0 4px 12px #0077b359}.action-btn.create-btn:active{transform:translateY(1px)}.action-btn.join-btn{background:#1da4b1;color:#fff;box-shadow:0 2px 8px #1da4b140;animation:pulse-ready 2s infinite}.action-btn.join-btn:hover{background:#17848e;box-shadow:0 4px 12px #1da4b159}.action-btn.join-btn:active{transform:translateY(1px)}.action-btn.retry-btn{background:transparent;color:#6c757d;border:1px solid #e9ecef}.action-btn.retry-btn:hover{background:#f8f9fa;border-color:#6c757d;color:#212529}.waiting-room-footer{padding:16px 40px 24px;background:#ffffff;border-top:1px solid #e9ecef;display:flex;justify-content:center}.waiting-room-footer .cancel-btn{padding:10px 24px;font-size:14px;font-weight:600;border-radius:4px;background:transparent;color:#6c757d;border:none;cursor:pointer;transition:all .2s ease}.waiting-room-footer .cancel-btn:hover{background:#f8f9fa;color:#212529}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse-active{0%,to{box-shadow:0 0 #1da4b166}50%{box-shadow:0 0 0 8px #1da4b100}}@keyframes pulse-ready{0%,to{box-shadow:0 2px 8px #1da4b140}50%{box-shadow:0 4px 16px #1da4b166}}@media (max-width: 576px){.tas-waiting-room{min-height:380px}.waiting-room-header{padding:24px 24px 20px}.waiting-room-header .header-icon{width:56px;height:56px}.waiting-room-header .header-icon i{font-size:22px}.waiting-room-header .header-title{font-size:18px}.waiting-room-content{padding:24px}.state-icon{width:64px;height:64px}.state-icon i{font-size:28px}.spinner{width:32px;height:32px}.progress-steps{gap:12px}.step .step-indicator{width:28px;height:28px}.step .step-label{font-size:9px}.action-btn{padding:10px 24px;font-size:14px}.waiting-room-footer{padding:16px 24px 20px}}\n"] }]
227
+ args: [{ selector: 'tas-waiting-room', template: "<div class=\"tas-waiting-room\">\n\t<!-- Header -->\n\t<div class=\"waiting-room-header\">\n\t\t<div class=\"header-icon\">\n\t\t\t<i class=\"fa fa-video-camera\"></i>\n\t\t</div>\n\t\t<h2 class=\"header-title\">Waiting Room</h2>\n\t\t<p class=\"header-subtitle\">Prepare for your video call</p>\n\t\t<button type=\"button\" class=\"close-btn\" (click)=\"cancel()\" aria-label=\"Close\">\n\t\t\t<span aria-hidden=\"true\">&times;</span>\n\t\t</button>\n\t</div>\n\n\t<!-- Content -->\n\t<div class=\"waiting-room-content\">\n\t\t<!-- IDLE State - Show options -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.IDLE\">\n\t\t\t\n\t\t\t<!-- Tab switcher (only if no existingSessionId was passed) -->\n\t\t\t<div class=\"mode-tabs\" *ngIf=\"!hasExistingSession\">\n\t\t\t\t<button \n\t\t\t\t\ttype=\"button\" \n\t\t\t\t\tclass=\"mode-tab\" \n\t\t\t\t\t[class.active]=\"!showJoinExistingUI\"\n\t\t\t\t\t(click)=\"showJoinExistingUI = false\">\n\t\t\t\t\t<i class=\"fa fa-plus-circle\"></i>\n\t\t\t\t\tCreate New\n\t\t\t\t</button>\n\t\t\t\t<button \n\t\t\t\t\ttype=\"button\" \n\t\t\t\t\tclass=\"mode-tab\" \n\t\t\t\t\t[class.active]=\"showJoinExistingUI\"\n\t\t\t\t\t(click)=\"showJoinExistingUI = true\">\n\t\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\t\tJoin Existing\n\t\t\t\t</button>\n\t\t\t</div>\n\n\t\t\t<!-- Create New Room UI -->\n\t\t\t<div class=\"mode-content\" *ngIf=\"!showJoinExistingUI && !hasExistingSession\">\n\t\t\t\t<div class=\"state-icon idle\">\n\t\t\t\t\t<i class=\"fa fa-plus-circle\"></i>\n\t\t\t\t</div>\n\t\t\t\t<p class=\"state-message\">\n\t\t\t\t\tCreate a new video call room\n\t\t\t\t</p>\n\t\t\t\t<p class=\"state-submessage\">\n\t\t\t\t\tStart a new session for this appointment\n\t\t\t\t</p>\n\t\t\t\t<button \n\t\t\t\t\ttype=\"button\" \n\t\t\t\t\tclass=\"btn action-btn create-btn\"\n\t\t\t\t\t(click)=\"createRoom()\">\n\t\t\t\t\t<i class=\"fa fa-plus\"></i>\n\t\t\t\t\tCreate Room\n\t\t\t\t</button>\n\t\t\t</div>\n\n\t\t\t<!-- Join Existing Room UI (manual input) -->\n\t\t\t<div class=\"mode-content\" *ngIf=\"showJoinExistingUI && !hasExistingSession\">\n\t\t\t\t<div class=\"state-icon idle\">\n\t\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\t</div>\n\t\t\t\t<p class=\"state-message\">\n\t\t\t\t\tJoin an existing room\n\t\t\t\t</p>\n\t\t\t\t<p class=\"state-submessage\">\n\t\t\t\t\tEnter the session ID to join\n\t\t\t\t</p>\n\t\t\t\t<div class=\"session-input-container\">\n\t\t\t\t\t<input \n\t\t\t\t\t\ttype=\"text\" \n\t\t\t\t\t\tclass=\"session-input\"\n\t\t\t\t\t\t[(ngModel)]=\"manualSessionId\"\n\t\t\t\t\t\tplaceholder=\"Enter Session ID\"\n\t\t\t\t\t\t(keyup.enter)=\"joinExistingWithManualId()\">\n\t\t\t\t\t<button \n\t\t\t\t\t\ttype=\"button\" \n\t\t\t\t\t\tclass=\"btn action-btn create-btn\"\n\t\t\t\t\t\t[disabled]=\"!manualSessionId || manualSessionId.trim() === ''\"\n\t\t\t\t\t\t(click)=\"joinExistingWithManualId()\">\n\t\t\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\t\t\tJoin Room\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<!-- Join Existing Room UI (pre-filled session ID) -->\n\t\t\t<div class=\"mode-content\" *ngIf=\"hasExistingSession\">\n\t\t\t\t<div class=\"state-icon idle\">\n\t\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\t</div>\n\t\t\t\t<p class=\"state-message\">\n\t\t\t\t\tJoin existing video call room\n\t\t\t\t</p>\n\t\t\t\t<p class=\"state-submessage\">\n\t\t\t\t\tPress the button to get access\n\t\t\t\t</p>\n\t\t\t\t<button \n\t\t\t\t\ttype=\"button\" \n\t\t\t\t\tclass=\"btn action-btn create-btn\"\n\t\t\t\t\t(click)=\"getTokenForExistingSession()\">\n\t\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\t\tJoin Room\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- CREATING_ROOM State (only for new sessions) -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.CREATING_ROOM\">\n\t\t\t<div class=\"state-icon loading\">\n\t\t\t\t<div class=\"spinner\"></div>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tCreating video call room...\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step active\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Creating</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- GETTING_TOKEN State - New Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.GETTING_TOKEN && !isJoiningExisting\">\n\t\t\t<div class=\"state-icon loading\">\n\t\t\t\t<div class=\"spinner\"></div>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tPreparing room access...\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Created</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step active\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- GETTING_TOKEN State - Joining Existing Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.GETTING_TOKEN && isJoiningExisting\">\n\t\t\t<div class=\"state-icon loading\">\n\t\t\t\t<div class=\"spinner\"></div>\n\t\t\t</div>\n\t\t\t<p class=\"state-message\">\n\t\t\t\tGetting room access...\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step active\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Connecting</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step\">\n\t\t\t\t\t<span class=\"step-indicator\"></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<!-- READY State - New Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.READY && !isJoiningExisting\">\n\t\t\t<div class=\"state-icon ready\">\n\t\t\t\t<i class=\"fa fa-check-circle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message success\">\n\t\t\t\tRoom is ready!\n\t\t\t</p>\n\t\t\t<p class=\"state-submessage\">\n\t\t\t\tYou can join the video call when ready\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Created</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Access</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn join-btn\"\n\t\t\t\t(click)=\"joinSession()\">\n\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\tJoin Session\n\t\t\t</button>\n\t\t</div>\n\n\t\t<!-- READY State - Joining Existing Session -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.READY && isJoiningExisting\">\n\t\t\t<div class=\"state-icon ready\">\n\t\t\t\t<i class=\"fa fa-check-circle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message success\">\n\t\t\t\tReady to join!\n\t\t\t</p>\n\t\t\t<p class=\"state-submessage\">\n\t\t\t\tYou can join the video call when ready\n\t\t\t</p>\n\t\t\t<div class=\"progress-steps\">\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Connected</span>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"step completed\">\n\t\t\t\t\t<span class=\"step-indicator\"><i class=\"fa fa-check\"></i></span>\n\t\t\t\t\t<span class=\"step-label\">Ready</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn join-btn\"\n\t\t\t\t(click)=\"joinSession()\">\n\t\t\t\t<i class=\"fa fa-sign-in\"></i>\n\t\t\t\tJoin Session\n\t\t\t</button>\n\t\t</div>\n\n\t\t<!-- ERROR State -->\n\t\t<div class=\"state-container\" *ngIf=\"state === WaitingRoomState.ERROR\">\n\t\t\t<div class=\"state-icon error\">\n\t\t\t\t<i class=\"fa fa-exclamation-triangle\"></i>\n\t\t\t</div>\n\t\t\t<p class=\"state-message error\">\n\t\t\t\tAn error occurred\n\t\t\t</p>\n\t\t\t<p class=\"error-details\" *ngIf=\"errorMessage\">\n\t\t\t\t{{ errorMessage }}\n\t\t\t</p>\n\t\t\t<button \n\t\t\t\ttype=\"button\" \n\t\t\t\tclass=\"btn action-btn retry-btn\"\n\t\t\t\t(click)=\"retry()\">\n\t\t\t\t<i class=\"fa fa-refresh\"></i>\n\t\t\t\tRetry\n\t\t\t</button>\n\t\t</div>\n\t</div>\n\n\t<!-- Footer -->\n\t<div class=\"waiting-room-footer\">\n\t\t<button \n\t\t\ttype=\"button\" \n\t\t\tclass=\"btn cancel-btn\"\n\t\t\t(click)=\"cancel()\">\n\t\t\tCancel\n\t\t</button>\n\t</div>\n</div>\n", styles: [".tas-waiting-room{display:flex;flex-direction:column;min-height:420px;background:#ffffff;border-radius:5px;overflow:hidden}.waiting-room-header{position:relative;padding:32px 40px 24px;text-align:center;border-bottom:1px solid #e9ecef}.waiting-room-header .header-icon{width:72px;height:72px;margin:0 auto 16px;background:linear-gradient(135deg,#1da4b1 0%,#0077b3 100%);border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 16px #1da4b140}.waiting-room-header .header-icon i{font-size:28px;color:#fff}.waiting-room-header .header-title{margin:0 0 8px;font-size:20px;font-weight:700;line-height:28px;color:#212529}.waiting-room-header .header-subtitle{margin:0;font-size:14px;color:#6c757d;font-weight:400}.waiting-room-header .close-btn{position:absolute;top:16px;right:16px;width:32px;height:32px;border:none;background:transparent;border-radius:4px;color:#6c757d;cursor:pointer;transition:all .2s ease;font-size:20px}.waiting-room-header .close-btn:hover{background:#f8f9fa;color:#212529}.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%}.mode-tabs{display:flex;justify-content:center;gap:8px;margin-bottom:24px;padding:4px;background:#f8f9fa;border-radius:8px}.mode-tab{flex:1;padding:10px 16px;font-size:13px;font-weight:600;border:none;border-radius:6px;background:transparent;color:#6c757d;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center;gap:8px}.mode-tab i{font-size:14px}.mode-tab:hover{color:#212529}.mode-tab.active{background:#ffffff;color:#1da4b1;box-shadow:0 2px 8px #00000014}.mode-content{animation:fadeIn .3s ease}.session-input-container{display:flex;flex-direction:column;gap:16px;margin-top:8px}.session-input{width:100%;padding:14px 16px;font-size:14px;border:2px solid #e9ecef;border-radius:8px;background:#ffffff;color:#212529;transition:all .2s ease;text-align:center;font-family:Monaco,Consolas,monospace;letter-spacing:.5px}.session-input::placeholder{color:#6c757d;font-family:inherit;letter-spacing:normal}.session-input:focus{outline:none;border-color:#1da4b1;box-shadow:0 0 0 3px #1da4b126}.session-input:hover:not(:focus){border-color:#6c757d}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.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.idle{background:rgba(29,164,177,.1);border:2px dashed #1da4b1}.state-icon.idle i{color:#1da4b1}.state-icon.loading{background:rgba(29,164,177,.1);border:2px solid #1da4b1}.state-icon.ready{background:linear-gradient(135deg,#1da4b1 0%,#38b89a 100%);box-shadow:0 4px 16px #1da4b14d}.state-icon.ready i{color:#fff}.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.success{color:#1da4b1}.state-message.error{color:#ee316b}.state-submessage{font-size:14px;color:#6c757d;margin:0 0 24px;font-weight:400}.error-details{font-size:13px;color:#ee316b;margin:0 0 24px;padding:12px 16px;background:rgba(238,49,107,.08);border-radius:8px;border:1px solid rgba(238,49,107,.2)}.progress-steps{display:flex;justify-content:center;gap:24px;margin:24px 0 32px}.step{display:flex;flex-direction:column;align-items:center;gap:8px}.step .step-indicator{width:32px;height:32px;border-radius:50%;background:#f8f9fa;border:2px solid #e9ecef;display:flex;align-items:center;justify-content:center;transition:all .3s ease}.step .step-indicator i{font-size:12px;color:#fff}.step .step-label{font-size:11px;color:#6c757d;text-transform:uppercase;letter-spacing:.5px;font-weight:500}.step.active .step-indicator{background:rgba(29,164,177,.1);border-color:#1da4b1;animation:pulse-active 1.5s infinite}.step.active .step-label{color:#1da4b1;font-weight:600}.step.completed .step-indicator{background:#1da4b1;border-color:#1da4b1}.step.completed .step-label{color:#1da4b1;font-weight:600}.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.create-btn{background:#0077b3;color:#fff;box-shadow:0 2px 8px #0077b340}.action-btn.create-btn:hover{background:#005c8a;box-shadow:0 4px 12px #0077b359}.action-btn.create-btn:active{transform:translateY(1px)}.action-btn.join-btn{background:#1da4b1;color:#fff;box-shadow:0 2px 8px #1da4b140;animation:pulse-ready 2s infinite}.action-btn.join-btn:hover{background:#17848e;box-shadow:0 4px 12px #1da4b159}.action-btn.join-btn:active{transform:translateY(1px)}.action-btn.retry-btn{background:transparent;color:#6c757d;border:1px solid #e9ecef}.action-btn.retry-btn:hover{background:#f8f9fa;border-color:#6c757d;color:#212529}.waiting-room-footer{padding:16px 40px 24px;background:#ffffff;border-top:1px solid #e9ecef;display:flex;justify-content:center}.waiting-room-footer .cancel-btn{padding:10px 24px;font-size:14px;font-weight:600;border-radius:4px;background:transparent;color:#6c757d;border:none;cursor:pointer;transition:all .2s ease}.waiting-room-footer .cancel-btn:hover{background:#f8f9fa;color:#212529}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse-active{0%,to{box-shadow:0 0 #1da4b166}50%{box-shadow:0 0 0 8px #1da4b100}}@keyframes pulse-ready{0%,to{box-shadow:0 2px 8px #1da4b140}50%{box-shadow:0 4px 16px #1da4b166}}@media (max-width: 576px){.tas-waiting-room{min-height:380px}.waiting-room-header{padding:24px 24px 20px}.waiting-room-header .header-icon{width:56px;height:56px}.waiting-room-header .header-icon i{font-size:22px}.waiting-room-header .header-title{font-size:18px}.waiting-room-content{padding:24px}.state-icon{width:64px;height:64px}.state-icon i{font-size:28px}.spinner{width:32px;height:32px}.progress-steps{gap:12px}.step .step-indicator{width:28px;height:28px}.step .step-label{font-size:9px}.action-btn{padding:10px 24px;font-size:14px}.waiting-room-footer{padding:16px 24px 20px}}\n"] }]
204
228
  }], ctorParameters: function () { return [{ type: i1.NgbActiveModal }, { type: i2.TasService }, { type: i1.NgbModal }]; }, propDecorators: { appointmentId: [{
205
229
  type: Input
206
230
  }], product: [{
@@ -218,4 +242,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
218
242
  }], existingSessionId: [{
219
243
  type: Input
220
244
  }] } });
221
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy13YWl0aW5nLXJvb20vdGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy13YWl0aW5nLXJvb20vdGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUlOLFdBQVcsRUFDWCxjQUFjLEVBQ2QsV0FBVyxFQUNYLFFBQVEsRUFDUixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7OztBQUVqRixNQUFNLENBQU4sSUFBWSxnQkFNWDtBQU5ELFdBQVksZ0JBQWdCO0lBQzNCLGlDQUFhLENBQUE7SUFDYixtREFBK0IsQ0FBQTtJQUMvQixtREFBK0IsQ0FBQTtJQUMvQixtQ0FBZSxDQUFBO0lBQ2YsbUNBQWUsQ0FBQTtBQUNoQixDQUFDLEVBTlcsZ0JBQWdCLEtBQWhCLGdCQUFnQixRQU0zQjtBQU9ELE1BQU0sT0FBTyx1QkFBdUI7SUE0Qm5DLFlBQ1EsV0FBMkIsRUFDMUIsVUFBc0IsRUFDdEIsWUFBc0I7UUFGdkIsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQzFCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsaUJBQVksR0FBWixZQUFZLENBQVU7UUE5Qi9C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LENBQUMsQ0FDeEMsQ0FBQztJQUNILENBQUM7O29IQTlOVyx1QkFBdUI7d0dBQXZCLHVCQUF1Qix3VEM3QnBDLCtyT0EwTkE7MkZEN0xhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDQyxrQkFBa0I7cUpBTW5CLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCwgTmdiTW9kYWwsIE5nYk1vZGFsUmVmIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgVGFzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Rhcy5zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcblx0Q3JlYXRlUm9vbVJlcXVlc3QsXG5cdENyZWF0ZVJvb21Vc2VyLFxuXHRUYXNDdXJyZW50VXNlcixcblx0VGFzUm9vbVR5cGUsXG5cdFRhc1Nlc3Npb25UeXBlLFxuXHRUYXNVc2VyUm9sZSxcblx0Vmlld01vZGVcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy90YXMuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBUYXNWaWRlb2NhbGxDb21wb25lbnQgfSBmcm9tICcuLi90YXMtdmlkZW9jYWxsL3Rhcy12aWRlb2NhbGwuY29tcG9uZW50JztcblxuZXhwb3J0IGVudW0gV2FpdGluZ1Jvb21TdGF0ZSB7XG5cdElETEUgPSAnSURMRScsXG5cdENSRUFUSU5HX1JPT00gPSAnQ1JFQVRJTkdfUk9PTScsXG5cdEdFVFRJTkdfVE9LRU4gPSAnR0VUVElOR19UT0tFTicsXG5cdFJFQURZID0gJ1JFQURZJyxcblx0RVJST1IgPSAnRVJST1InXG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ3Rhcy13YWl0aW5nLXJvb20nLFxuXHR0ZW1wbGF0ZVVybDogJy4vdGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQuaHRtbCcsXG5cdHN0eWxlVXJsczogWycuL3Rhcy13YWl0aW5nLXJvb20uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBUYXNXYWl0aW5nUm9vbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblx0Ly8gUm9vbSBjb25maWd1cmF0aW9uIGlucHV0c1xuXHRASW5wdXQoKSBhcHBvaW50bWVudElkOiBudW1iZXIgPSAxO1xuXHRASW5wdXQoKSBwcm9kdWN0OiBzdHJpbmcgPSAndWVsbCc7XG5cdEBJbnB1dCgpIHRlbmFudElkOiBzdHJpbmcgPSAnJztcblx0QElucHV0KCkgY3VycmVudFVzZXIhOiBUYXNDdXJyZW50VXNlcjtcblx0QElucHV0KCkgb3duZXJVc2VySWRzITogbnVtYmVyW107XG5cdEBJbnB1dCgpIHJlZ3VsYXJVc2VySWRzOiBudW1iZXJbXSA9IFtdO1xuXHRASW5wdXQoKSBtb2RlcmF0b3JVc2VySWRzOiBudW1iZXJbXSA9IFtdO1xuXHRcblx0LyoqIE9wdGlvbmFsOiBJZiBwcm92aWRlZCwgc2tpcHMgcm9vbSBjcmVhdGlvbiBhbmQgZ29lcyBkaXJlY3RseSB0byBnZXR0aW5nIGEgdG9rZW4gKi9cblx0QElucHV0KCkgZXhpc3RpbmdTZXNzaW9uSWQ6IHN0cmluZyA9ICcnO1xuXG5cdC8vIENvbXBvbmVudCBzdGF0ZVxuXHRwdWJsaWMgc3RhdGU6IFdhaXRpbmdSb29tU3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLklETEU7XG5cdHB1YmxpYyBXYWl0aW5nUm9vbVN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZTsgLy8gRXhwb3NlIGVudW0gdG8gdGVtcGxhdGVcblx0cHVibGljIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XG5cdFxuXHQvKiogV2hldGhlciB3ZSBoYXZlIGFuIGV4aXN0aW5nIHNlc3Npb24gKHNraXAgcm9vbSBjcmVhdGlvbikgKi9cblx0cHVibGljIGhhc0V4aXN0aW5nU2Vzc2lvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdC8vIFNlc3Npb24gZGF0YVxuXHRwcml2YXRlIHNlc3Npb25JZDogc3RyaW5nID0gJyc7XG5cdHByaXZhdGUgdG9rZW46IHN0cmluZyA9ICcnO1xuXHRwcml2YXRlIHVzZXJzOiBDcmVhdGVSb29tVXNlcltdID0gW107XG5cdHByaXZhdGUgc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblx0cHJpdmF0ZSB2aWRlb0NhbGxNb2RhbFJlZjogTmdiTW9kYWxSZWYgfCBudWxsID0gbnVsbDtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwdWJsaWMgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsLFxuXHRcdHByaXZhdGUgdGFzU2VydmljZTogVGFzU2VydmljZSxcblx0XHRwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWxcblx0KSB7fVxuXG5cdG5nT25Jbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuYnVpbGRVc2Vyc0FycmF5KCk7XG5cdFx0dGhpcy5zZXR1cFZpZXdNb2RlU3Vic2NyaXB0aW9uKCk7XG5cdFx0XG5cdFx0Ly8gQ2hlY2sgaWYgd2UgaGF2ZSBhbiBleGlzdGluZyBzZXNzaW9uXG5cdFx0aWYgKHRoaXMuZXhpc3RpbmdTZXNzaW9uSWQgJiYgdGhpcy5leGlzdGluZ1Nlc3Npb25JZC50cmltKCkgIT09ICcnKSB7XG5cdFx0XHR0aGlzLmhhc0V4aXN0aW5nU2Vzc2lvbiA9IHRydWU7XG5cdFx0XHR0aGlzLnNlc3Npb25JZCA9IHRoaXMuZXhpc3RpbmdTZXNzaW9uSWQ7XG5cdFx0fVxuXHR9XG5cblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgcm9vbSBhbmQgZmV0Y2hlcyB0aGUgdG9rZW4gKG5ldyBzZXNzaW9uIGZsb3cpXG5cdCAqL1xuXHRjcmVhdGVSb29tKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy50ZW5hbnRJZCB8fCAhdGhpcy5jdXJyZW50VXNlcj8ubmFtZSkge1xuXHRcdFx0dGhpcy5zdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuRVJST1I7XG5cdFx0XHR0aGlzLmVycm9yTWVzc2FnZSA9ICdNaXNzaW5nIGNvbmZpZ3VyYXRpb24gZGF0YSAodGVuYW50IG9yIHVzZXIpJztcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5DUkVBVElOR19ST09NO1xuXHRcdHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG5cblx0XHRjb25zdCBib2R5OiBDcmVhdGVSb29tUmVxdWVzdCA9IHtcblx0XHRcdHJvb21UeXBlOiBUYXNSb29tVHlwZS5UQVMsXG5cdFx0XHR0eXBlOiBUYXNTZXNzaW9uVHlwZS5TUE9OVEFORU9VUyxcblx0XHRcdHRlbmFudDogdGhpcy50ZW5hbnRJZCxcblx0XHRcdGFwcG9pbnRtZW50SWQ6IHRoaXMuYXBwb2ludG1lbnRJZCxcblx0XHRcdHVzZXJzOiB0aGlzLnVzZXJzLFxuXHRcdFx0cHJvZHVjdDogdGhpcy5wcm9kdWN0XG5cdFx0fTtcblxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG5cdFx0XHR0aGlzLnRhc1NlcnZpY2UuY3JlYXRlUm9vbShib2R5KS5waXBlKFxuXHRcdFx0XHRzd2l0Y2hNYXAocmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdHRoaXMuc2Vzc2lvbklkID0gcmVzcG9uc2UuY29udGVudC5zZXNzaW9uSWQ7XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuR0VUVElOR19UT0tFTjtcblxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnRhc1NlcnZpY2UuZ2VuZXJhdGVUb2tlbih7XG5cdFx0XHRcdFx0XHRzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuXHRcdFx0XHRcdFx0bmFtZTogdGhpcy5jdXJyZW50VXNlci5uYW1lLFxuXHRcdFx0XHRcdFx0bGFzdG5hbWU6IHRoaXMuY3VycmVudFVzZXIubGFzdG5hbWUsXG5cdFx0XHRcdFx0XHRyb2xlVkM6IHRoaXMuY3VycmVudFVzZXIucm9sZVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KVxuXHRcdFx0KS5zdWJzY3JpYmUoe1xuXHRcdFx0XHRuZXh0OiAodG9rZW5SZXNwb25zZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMudG9rZW4gPSB0b2tlblJlc3BvbnNlLmNvbnRlbnQudG9rZW47XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuUkVBRFk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGVycm9yOiAoZXJyKSA9PiB7XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcignRXJyb3IgY3JlYXRpbmcgcm9vbSBvciBnZXR0aW5nIHRva2VuOicsIGVycik7XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuRVJST1I7XG5cdFx0XHRcdFx0dGhpcy5lcnJvck1lc3NhZ2UgPSAnRXJyb3IgY3JlYXRpbmcgcm9vbS4gUGxlYXNlIHRyeSBhZ2Fpbi4nO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBhIHRva2VuIGZvciBhbiBleGlzdGluZyBzZXNzaW9uIChleGlzdGluZyBzZXNzaW9uIGZsb3cpXG5cdCAqL1xuXHRnZXRUb2tlbkZvckV4aXN0aW5nU2Vzc2lvbigpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuc2Vzc2lvbklkIHx8ICF0aGlzLmN1cnJlbnRVc2VyPy5uYW1lKSB7XG5cdFx0XHR0aGlzLnN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5FUlJPUjtcblx0XHRcdHRoaXMuZXJyb3JNZXNzYWdlID0gJ01pc3Npbmcgc2Vzc2lvbiBJRCBvciB1c2VyIGRhdGEnO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLkdFVFRJTkdfVE9LRU47XG5cdFx0dGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcblxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG5cdFx0XHR0aGlzLnRhc1NlcnZpY2UuZ2VuZXJhdGVUb2tlbih7XG5cdFx0XHRcdHNlc3Npb25JZDogdGhpcy5zZXNzaW9uSWQsXG5cdFx0XHRcdG5hbWU6IHRoaXMuY3VycmVudFVzZXIubmFtZSxcblx0XHRcdFx0bGFzdG5hbWU6IHRoaXMuY3VycmVudFVzZXIubGFzdG5hbWUsXG5cdFx0XHRcdHJvbGVWQzogdGhpcy5jdXJyZW50VXNlci5yb2xlXG5cdFx0XHR9KS5zdWJzY3JpYmUoe1xuXHRcdFx0XHRuZXh0OiAodG9rZW5SZXNwb25zZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMudG9rZW4gPSB0b2tlblJlc3BvbnNlLmNvbnRlbnQudG9rZW47XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuUkVBRFk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGVycm9yOiAoZXJyKSA9PiB7XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcignRXJyb3IgZ2V0dGluZyB0b2tlbjonLCBlcnIpO1xuXHRcdFx0XHRcdHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLkVSUk9SO1xuXHRcdFx0XHRcdHRoaXMuZXJyb3JNZXNzYWdlID0gJ0Vycm9yIGdldHRpbmcgc2Vzc2lvbiB0b2tlbi4gUGxlYXNlIHRyeSBhZ2Fpbi4nO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogSm9pbnMgdGhlIHZpZGVvIGNhbGwgc2Vzc2lvblxuXHQgKi9cblx0am9pblNlc3Npb24oKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLnNlc3Npb25JZCB8fCAhdGhpcy50b2tlbikge1xuXHRcdFx0dGhpcy5lcnJvck1lc3NhZ2UgPSAnQ2Fubm90IGpvaW4gc2Vzc2lvbi4gSW5jb21wbGV0ZSBkYXRhLic7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2xvc2Ugd2FpdGluZyByb29tIGFuZCBvcGVuIHZpZGVvIGNhbGxcblx0XHR0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKCdqb2luaW5nJyk7XG5cdFx0dGhpcy5vcGVuVmlkZW9DYWxsTW9kYWwoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbG9zZXMgdGhlIHdhaXRpbmcgcm9vbVxuXHQgKi9cblx0Y2FuY2VsKCk6IHZvaWQge1xuXHRcdHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcygnY2FuY2VsJyk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cnkgYWZ0ZXIgYW4gZXJyb3Jcblx0ICovXG5cdHJldHJ5KCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLklETEU7XG5cdFx0dGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcblx0XHR0aGlzLnRva2VuID0gJyc7XG5cdFx0XG5cdFx0Ly8gT25seSByZXNldCBzZXNzaW9uSWQgaWYgd2UgZG9uJ3QgaGF2ZSBhbiBleGlzdGluZyBvbmVcblx0XHRpZiAoIXRoaXMuaGFzRXhpc3RpbmdTZXNzaW9uKSB7XG5cdFx0XHR0aGlzLnNlc3Npb25JZCA9ICcnO1xuXHRcdH1cblx0fVxuXG5cdC8vIFByaXZhdGUgTWV0aG9kc1xuXHRwcml2YXRlIGJ1aWxkVXNlcnNBcnJheSgpOiB2b2lkIHtcblx0XHR0aGlzLnVzZXJzID0gW107XG5cblx0XHQvLyBBZGQgb3duZXJzIGZyb20gaW5wdXRcblx0XHR0aGlzLm93bmVyVXNlcklkcy5mb3JFYWNoKGlkID0+IHtcblx0XHRcdHRoaXMudXNlcnMucHVzaCh7IHVzZXJFeHRlcm5hbElkOiBpZCwgcm9sOiBUYXNVc2VyUm9sZS5PV05FUiB9KTtcblx0XHR9KTtcblxuXHRcdC8vIEFkZCByZWd1bGFyIHVzZXJzIGZyb20gaW5wdXRcblx0XHR0aGlzLnJlZ3VsYXJVc2VySWRzLmZvckVhY2goaWQgPT4ge1xuXHRcdFx0dGhpcy51c2Vycy5wdXNoKHsgdXNlckV4dGVybmFsSWQ6IGlkLCByb2w6IFRhc1VzZXJSb2xlLlVTRVIgfSk7XG5cdFx0fSk7XG5cblx0XHQvLyBBZGQgbW9kZXJhdG9ycyBmcm9tIGlucHV0XG5cdFx0dGhpcy5tb2RlcmF0b3JVc2VySWRzLmZvckVhY2goaWQgPT4ge1xuXHRcdFx0dGhpcy51c2Vycy5wdXNoKHsgdXNlckV4dGVybmFsSWQ6IGlkLCByb2w6IFRhc1VzZXJSb2xlLk1PREVSQVRPUiB9KTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgc2V0dXBWaWV3TW9kZVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuXHRcdFx0dGhpcy50YXNTZXJ2aWNlLnZpZXdNb2RlJC5zdWJzY3JpYmUobW9kZSA9PiB7XG5cdFx0XHRcdC8vIFJlLW9wZW4gdmlkZW8gY2FsbCBtb2RhbCB3aGVuIHJldHVybmluZyBmcm9tIFBpUCBtb2RlXG5cdFx0XHRcdGlmIChtb2RlID09PSBWaWV3TW9kZS5GVUxMU0NSRUVOICYmIFxuXHRcdFx0XHRcdHRoaXMudGFzU2VydmljZS5pc0NhbGxBY3RpdmUoKSAmJiBcblx0XHRcdFx0XHQhdGhpcy52aWRlb0NhbGxNb2RhbFJlZikge1xuXHRcdFx0XHRcdGNvbnN0IHNlc3Npb25JZCA9IHRoaXMudGFzU2VydmljZS5zZXNzaW9uSWQ7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLnRhc1NlcnZpY2UudG9rZW47XG5cdFx0XHRcdFx0aWYgKHNlc3Npb25JZCAmJiB0b2tlbikge1xuXHRcdFx0XHRcdFx0dGhpcy5vcGVuVmlkZW9DYWxsTW9kYWwodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIG9wZW5WaWRlb0NhbGxNb2RhbChpc1JldHVybmluZ0Zyb21QaXA6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuXHRcdHRoaXMudmlkZW9DYWxsTW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFRhc1ZpZGVvY2FsbENvbXBvbmVudCwge1xuXHRcdFx0c2l6ZTogJ3hsJyxcblx0XHRcdHdpbmRvd0NsYXNzOiAndGFzLXZpZGVvLW1vZGFsJyxcblx0XHRcdGJhY2tkcm9wOiAnc3RhdGljJyxcblx0XHRcdGtleWJvYXJkOiBmYWxzZVxuXHRcdH0pO1xuXG5cdFx0Y29uc3Qgc2Vzc2lvbklkVG9Vc2UgPSB0aGlzLnNlc3Npb25JZCB8fCB0aGlzLnRhc1NlcnZpY2Uuc2Vzc2lvbklkO1xuXHRcdGNvbnN0IHRva2VuVG9Vc2UgPSB0aGlzLnRva2VuIHx8IHRoaXMudGFzU2VydmljZS50b2tlbjtcblxuXHRcdHRoaXMudmlkZW9DYWxsTW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2Uuc2Vzc2lvbklkID0gc2Vzc2lvbklkVG9Vc2U7XG5cdFx0dGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50b2tlbiA9IHRva2VuVG9Vc2U7XG5cdFx0dGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5pc1JldHVybmluZ0Zyb21QaXAgPSBpc1JldHVybmluZ0Zyb21QaXA7XG5cblx0XHR0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmLnJlc3VsdC50aGVuKFxuXHRcdFx0KCkgPT4geyB0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmID0gbnVsbDsgfSxcblx0XHRcdCgpID0+IHsgdGhpcy52aWRlb0NhbGxNb2RhbFJlZiA9IG51bGw7IH1cblx0XHQpO1xuXHR9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGFzLXdhaXRpbmctcm9vbVwiPlxuXHQ8IS0tIEhlYWRlciAtLT5cblx0PGRpdiBjbGFzcz1cIndhaXRpbmctcm9vbS1oZWFkZXJcIj5cblx0XHQ8ZGl2IGNsYXNzPVwiaGVhZGVyLWljb25cIj5cblx0XHRcdDxpIGNsYXNzPVwiZmEgZmEtdmlkZW8tY2FtZXJhXCI+PC9pPlxuXHRcdDwvZGl2PlxuXHRcdDxoMiBjbGFzcz1cImhlYWRlci10aXRsZVwiPldhaXRpbmcgUm9vbTwvaDI+XG5cdFx0PHAgY2xhc3M9XCJoZWFkZXItc3VidGl0bGVcIj5QcmVwYXJlIGZvciB5b3VyIHZpZGVvIGNhbGw8L3A+XG5cdFx0PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZS1idG5cIiAoY2xpY2spPVwiY2FuY2VsKClcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj5cblx0XHRcdDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG5cdFx0PC9idXR0b24+XG5cdDwvZGl2PlxuXG5cdDwhLS0gQ29udGVudCAtLT5cblx0PGRpdiBjbGFzcz1cIndhaXRpbmctcm9vbS1jb250ZW50XCI+XG5cdFx0PCEtLSBJRExFIFN0YXRlIC0gTmV3IFNlc3Npb24gLS0+XG5cdFx0PGRpdiBjbGFzcz1cInN0YXRlLWNvbnRhaW5lclwiICpuZ0lmPVwic3RhdGUgPT09IFdhaXRpbmdSb29tU3RhdGUuSURMRSAmJiAhaGFzRXhpc3RpbmdTZXNzaW9uXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwic3RhdGUtaWNvbiBpZGxlXCI+XG5cdFx0XHRcdDxpIGNsYXNzPVwiZmEgZmEtcGx1cy1jaXJjbGVcIj48L2k+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxwIGNsYXNzPVwic3RhdGUtbWVzc2FnZVwiPlxuXHRcdFx0XHRDcmVhdGUgYSBuZXcgdmlkZW8gY2FsbCByb29tXG5cdFx0XHQ8L3A+XG5cdFx0XHQ8cCBjbGFzcz1cInN0YXRlLXN1Ym1lc3NhZ2VcIj5cblx0XHRcdFx0UHJlc3MgdGhlIGJ1dHRvbiB0byBiZWdpblxuXHRcdFx0PC9wPlxuXHRcdFx0PGJ1dHRvbiBcblx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIFxuXHRcdFx0XHRjbGFzcz1cImJ0biBhY3Rpb24tYnRuIGNyZWF0ZS1idG5cIlxuXHRcdFx0XHQoY2xpY2spPVwiY3JlYXRlUm9vbSgpXCI+XG5cdFx0XHRcdDxpIGNsYXNzPVwiZmEgZmEtcGx1c1wiPjwvaT5cblx0XHRcdFx0Q3JlYXRlIFJvb21cblx0XHRcdDwvYnV0dG9uPlxuXHRcdDwvZGl2PlxuXG5cdFx0PCEtLSBJRExFIFN0YXRlIC0gRXhpc3RpbmcgU2Vzc2lvbiAtLT5cblx0XHQ8ZGl2IGNsYXNzPVwic3RhdGUtY29udGFpbmVyXCIgKm5nSWY9XCJzdGF0ZSA9PT0gV2FpdGluZ1Jvb21TdGF0ZS5JRExFICYmIGhhc0V4aXN0aW5nU2Vzc2lvblwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cInN0YXRlLWljb24gaWRsZVwiPlxuXHRcdFx0XHQ8aSBjbGFzcz1cImZhIGZhLXNpZ24taW5cIj48L2k+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxwIGNsYXNzPVwic3RhdGUtbWVzc2FnZVwiPlxuXHRcdFx0XHRKb2luIGV4aXN0aW5nIHZpZGVvIGNhbGwgcm9vbVxuXHRcdFx0PC9wPlxuXHRcdFx0PHAgY2xhc3M9XCJzdGF0ZS1zdWJtZXNzYWdlXCI+XG5cdFx0XHRcdFByZXNzIHRoZSBidXR0b24gdG8gZ2V0IGFjY2Vzc1xuXHRcdFx0PC9wPlxuXHRcdFx0PGJ1dHRvbiBcblx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIFxuXHRcdFx0XHRjbGFzcz1cImJ0biBhY3Rpb24tYnRuIGNyZWF0ZS1idG5cIlxuXHRcdFx0XHQoY2xpY2spPVwiZ2V0VG9rZW5Gb3JFeGlzdGluZ1Nlc3Npb24oKVwiPlxuXHRcdFx0XHQ8aSBjbGFzcz1cImZhIGZhLXNpZ24taW5cIj48L2k+XG5cdFx0XHRcdEpvaW4gUm9vbVxuXHRcdFx0PC9idXR0b24+XG5cdFx0PC9kaXY+XG5cblx0XHQ8IS0tIENSRUFUSU5HX1JPT00gU3RhdGUgKG9ubHkgZm9yIG5ldyBzZXNzaW9ucykgLS0+XG5cdFx0PGRpdiBjbGFzcz1cInN0YXRlLWNvbnRhaW5lclwiICpuZ0lmPVwic3RhdGUgPT09IFdhaXRpbmdSb29tU3RhdGUuQ1JFQVRJTkdfUk9PTVwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cInN0YXRlLWljb24gbG9hZGluZ1wiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwic3Bpbm5lclwiPjwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8cCBjbGFzcz1cInN0YXRlLW1lc3NhZ2VcIj5cblx0XHRcdFx0Q3JlYXRpbmcgdmlkZW8gY2FsbCByb29tLi4uXG5cdFx0XHQ8L3A+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwicHJvZ3Jlc3Mtc3RlcHNcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInN0ZXAgYWN0aXZlXCI+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdGVwLWluZGljYXRvclwiPjwvc3Bhbj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtbGFiZWxcIj5DcmVhdGluZzwvc3Bhbj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzdGVwXCI+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdGVwLWluZGljYXRvclwiPjwvc3Bhbj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtbGFiZWxcIj5BY2Nlc3M8L3NwYW4+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwic3RlcFwiPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3RlcC1pbmRpY2F0b3JcIj48L3NwYW4+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdGVwLWxhYmVsXCI+UmVhZHk8L3NwYW4+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cblx0XHQ8IS0tIEdFVFRJTkdfVE9LRU4gU3RhdGUgLSBOZXcgU2Vzc2lvbiAtLT5cblx0XHQ8ZGl2IGNsYXNzPVwic3RhdGUtY29udGFpbmVyXCIgKm5nSWY9XCJzdGF0ZSA9PT0gV2FpdGluZ1Jvb21TdGF0ZS5HRVRUSU5HX1RPS0VOICYmICFoYXNFeGlzdGluZ1Nlc3Npb25cIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJzdGF0ZS1pY29uIGxvYWRpbmdcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInNwaW5uZXJcIj48L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PHAgY2xhc3M9XCJzdGF0ZS1tZXNzYWdlXCI+XG5cdFx0XHRcdFByZXBhcmluZyByb29tIGFjY2Vzcy4uLlxuXHRcdFx0PC9wPlxuXHRcdFx0PGRpdiBjbGFzcz1cInByb2dyZXNzLXN0ZXBzXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzdGVwIGNvbXBsZXRlZFwiPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3RlcC1pbmRpY2F0b3JcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrXCI+PC9pPjwvc3Bhbj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtbGFiZWxcIj5DcmVhdGVkPC9zcGFuPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInN0ZXAgYWN0aXZlXCI+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdGVwLWluZGljYXRvclwiPjwvc3Bhbj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtbGFiZWxcIj5BY2Nlc3M8L3NwYW4+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwic3RlcFwiPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3RlcC1pbmRpY2F0b3JcIj48L3NwYW4+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdGVwLWxhYmVsXCI+UmVhZHk8L3NwYW4+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cblx0XHQ8IS0tIEdFVFRJTkdfVE9LRU4gU3RhdGUgLSBFeGlzdGluZyBTZXNzaW9uIC0tPlxuXHRcdDxkaXYgY2xhc3M9XCJzdGF0ZS1jb250YWluZXJcIiAqbmdJZj1cInN0YXRlID09PSBXYWl0aW5nUm9vbVN0YXRlLkdFVFRJTkdfVE9LRU4gJiYgaGFzRXhpc3RpbmdTZXNzaW9uXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwic3RhdGUtaWNvbiBsb2FkaW5nXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzcGlubmVyXCI+PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxwIGNsYXNzPVwic3RhdGUtbWVzc2FnZVwiPlxuXHRcdFx0XHRHZXR0aW5nIHJvb20gYWNjZXNzLi4uXG5cdFx0XHQ8L3A+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwicHJvZ3Jlc3Mtc3RlcHNcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInN0ZXAgYWN0aXZlXCI+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdGVwLWluZGljYXRvclwiPjwvc3Bhbj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtbGFiZWxcIj5Db25uZWN0aW5nPC9zcGFuPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInN0ZXBcIj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtaW5kaWNhdG9yXCI+PC9zcGFuPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3RlcC1sYWJlbFwiPlJlYWR5PC9zcGFuPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXG5cdFx0PCEtLSBSRUFEWSBTdGF0ZSAtIE5ldyBTZXNzaW9uIC0tPlxuXHRcdDxkaXYgY2xhc3M9XCJzdGF0ZS1jb250YWluZXJcIiAqbmdJZj1cInN0YXRlID09PSBXYWl0aW5nUm9vbVN0YXRlLlJFQURZICYmICFoYXNFeGlzdGluZ1Nlc3Npb25cIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJzdGF0ZS1pY29uIHJlYWR5XCI+XG5cdFx0XHRcdDxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PC9pPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8cCBjbGFzcz1cInN0YXRlLW1lc3NhZ2Ugc3VjY2Vzc1wiPlxuXHRcdFx0XHRSb29tIGlzIHJlYWR5IVxuXHRcdFx0PC9wPlxuXHRcdFx0PHAgY2xhc3M9XCJzdGF0ZS1zdWJtZXNzYWdlXCI+XG5cdFx0XHRcdFlvdSBjYW4gam9pbiB0aGUgdmlkZW8gY2FsbCB3aGVuIHJlYWR5XG5cdFx0XHQ8L3A+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwicHJvZ3Jlc3Mtc3RlcHNcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInN0ZXAgY29tcGxldGVkXCI+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdGVwLWluZGljYXRvclwiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2tcIj48L2k+PC9zcGFuPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3RlcC1sYWJlbFwiPkNyZWF0ZWQ8L3NwYW4+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwic3RlcCBjb21wbGV0ZWRcIj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtaW5kaWNhdG9yXCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVja1wiPjwvaT48L3NwYW4+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdGVwLWxhYmVsXCI+QWNjZXNzPC9zcGFuPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInN0ZXAgY29tcGxldGVkXCI+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdGVwLWluZGljYXRvclwiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2tcIj48L2k+PC9zcGFuPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3RlcC1sYWJlbFwiPlJlYWR5PC9zcGFuPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PGJ1dHRvbiBcblx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIFxuXHRcdFx0XHRjbGFzcz1cImJ0biBhY3Rpb24tYnRuIGpvaW4tYnRuXCJcblx0XHRcdFx0KGNsaWNrKT1cImpvaW5TZXNzaW9uKClcIj5cblx0XHRcdFx0PGkgY2xhc3M9XCJmYSBmYS1zaWduLWluXCI+PC9pPlxuXHRcdFx0XHRKb2luIFNlc3Npb25cblx0XHRcdDwvYnV0dG9uPlxuXHRcdDwvZGl2PlxuXG5cdFx0PCEtLSBSRUFEWSBTdGF0ZSAtIEV4aXN0aW5nIFNlc3Npb24gLS0+XG5cdFx0PGRpdiBjbGFzcz1cInN0YXRlLWNvbnRhaW5lclwiICpuZ0lmPVwic3RhdGUgPT09IFdhaXRpbmdSb29tU3RhdGUuUkVBRFkgJiYgaGFzRXhpc3RpbmdTZXNzaW9uXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwic3RhdGUtaWNvbiByZWFkeVwiPlxuXHRcdFx0XHQ8aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjwvaT5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PHAgY2xhc3M9XCJzdGF0ZS1tZXNzYWdlIHN1Y2Nlc3NcIj5cblx0XHRcdFx0UmVhZHkgdG8gam9pbiFcblx0XHRcdDwvcD5cblx0XHRcdDxwIGNsYXNzPVwic3RhdGUtc3VibWVzc2FnZVwiPlxuXHRcdFx0XHRZb3UgY2FuIGpvaW4gdGhlIHZpZGVvIGNhbGwgd2hlbiByZWFkeVxuXHRcdFx0PC9wPlxuXHRcdFx0PGRpdiBjbGFzcz1cInByb2dyZXNzLXN0ZXBzXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzdGVwIGNvbXBsZXRlZFwiPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3RlcC1pbmRpY2F0b3JcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrXCI+PC9pPjwvc3Bhbj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtbGFiZWxcIj5Db25uZWN0ZWQ8L3NwYW4+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwic3RlcCBjb21wbGV0ZWRcIj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtaW5kaWNhdG9yXCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVja1wiPjwvaT48L3NwYW4+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdGVwLWxhYmVsXCI+UmVhZHk8L3NwYW4+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8YnV0dG9uIFxuXHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgXG5cdFx0XHRcdGNsYXNzPVwiYnRuIGFjdGlvbi1idG4gam9pbi1idG5cIlxuXHRcdFx0XHQoY2xpY2spPVwiam9pblNlc3Npb24oKVwiPlxuXHRcdFx0XHQ8aSBjbGFzcz1cImZhIGZhLXNpZ24taW5cIj48L2k+XG5cdFx0XHRcdEpvaW4gU2Vzc2lvblxuXHRcdFx0PC9idXR0b24+XG5cdFx0PC9kaXY+XG5cblx0XHQ8IS0tIEVSUk9SIFN0YXRlIC0tPlxuXHRcdDxkaXYgY2xhc3M9XCJzdGF0ZS1jb250YWluZXJcIiAqbmdJZj1cInN0YXRlID09PSBXYWl0aW5nUm9vbVN0YXRlLkVSUk9SXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwic3RhdGUtaWNvbiBlcnJvclwiPlxuXHRcdFx0XHQ8aSBjbGFzcz1cImZhIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCI+PC9pPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8cCBjbGFzcz1cInN0YXRlLW1lc3NhZ2UgZXJyb3JcIj5cblx0XHRcdFx0QW4gZXJyb3Igb2NjdXJyZWRcblx0XHRcdDwvcD5cblx0XHRcdDxwIGNsYXNzPVwiZXJyb3ItZGV0YWlsc1wiICpuZ0lmPVwiZXJyb3JNZXNzYWdlXCI+XG5cdFx0XHRcdHt7IGVycm9yTWVzc2FnZSB9fVxuXHRcdFx0PC9wPlxuXHRcdFx0PGJ1dHRvbiBcblx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIFxuXHRcdFx0XHRjbGFzcz1cImJ0biBhY3Rpb24tYnRuIHJldHJ5LWJ0blwiXG5cdFx0XHRcdChjbGljayk9XCJyZXRyeSgpXCI+XG5cdFx0XHRcdDxpIGNsYXNzPVwiZmEgZmEtcmVmcmVzaFwiPjwvaT5cblx0XHRcdFx0UmV0cnlcblx0XHRcdDwvYnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cblxuXHQ8IS0tIEZvb3RlciAtLT5cblx0PGRpdiBjbGFzcz1cIndhaXRpbmctcm9vbS1mb290ZXJcIj5cblx0XHQ8YnV0dG9uIFxuXHRcdFx0dHlwZT1cImJ1dHRvblwiIFxuXHRcdFx0Y2xhc3M9XCJidG4gY2FuY2VsLWJ0blwiXG5cdFx0XHQoY2xpY2spPVwiY2FuY2VsKClcIj5cblx0XHRcdENhbmNlbFxuXHRcdDwvYnV0dG9uPlxuXHQ8L2Rpdj5cbjwvZGl2PlxuIl19
245
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy13YWl0aW5nLXJvb20vdGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YXMtdWVsbC1zZGsvc3JjL2xpYi9jb21wb25lbnRzL3Rhcy13YWl0aW5nLXJvb20vdGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUlOLFdBQVcsRUFDWCxjQUFjLEVBQ2QsV0FBVyxFQUNYLFFBQVEsRUFDUixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7Ozs7QUFFakYsTUFBTSxDQUFOLElBQVksZ0JBTVg7QUFORCxXQUFZLGdCQUFnQjtJQUMzQixpQ0FBYSxDQUFBO0lBQ2IsbURBQStCLENBQUE7SUFDL0IsbURBQStCLENBQUE7SUFDL0IsbUNBQWUsQ0FBQTtJQUNmLG1DQUFlLENBQUE7QUFDaEIsQ0FBQyxFQU5XLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFNM0I7QUFPRCxNQUFNLE9BQU8sdUJBQXVCO0lBcUNuQyxZQUNRLFdBQTJCLEVBQzFCLFVBQXNCLEVBQ3RCLFlBQXNCO1FBRnZCLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMxQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGlCQUFZLEdBQVosWUFBWSxDQUFVO1FBdkMv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R0csaUJBQWlCO3NCQUF6QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nYkFjdGl2ZU1vZGFsLCBOZ2JNb2RhbCwgTmdiTW9kYWxSZWYgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBUYXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFzLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuXHRDcmVhdGVSb29tUmVxdWVzdCxcblx0Q3JlYXRlUm9vbVVzZXIsXG5cdFRhc0N1cnJlbnRVc2VyLFxuXHRUYXNSb29tVHlwZSxcblx0VGFzU2Vzc2lvblR5cGUsXG5cdFRhc1VzZXJSb2xlLFxuXHRWaWV3TW9kZVxufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3Rhcy5pbnRlcmZhY2VzJztcbmltcG9ydCB7IFRhc1ZpZGVvY2FsbENvbXBvbmVudCB9IGZyb20gJy4uL3Rhcy12aWRlb2NhbGwvdGFzLXZpZGVvY2FsbC5jb21wb25lbnQnO1xuXG5leHBvcnQgZW51bSBXYWl0aW5nUm9vbVN0YXRlIHtcblx0SURMRSA9ICdJRExFJyxcblx0Q1JFQVRJTkdfUk9PTSA9ICdDUkVBVElOR19ST09NJyxcblx0R0VUVElOR19UT0tFTiA9ICdHRVRUSU5HX1RPS0VOJyxcblx0UkVBRFkgPSAnUkVBRFknLFxuXHRFUlJPUiA9ICdFUlJPUidcbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAndGFzLXdhaXRpbmctcm9vbScsXG5cdHRlbXBsYXRlVXJsOiAnLi90YXMtd2FpdGluZy1yb29tLmNvbXBvbmVudC5odG1sJyxcblx0c3R5bGVVcmxzOiBbJy4vdGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRhc1dhaXRpbmdSb29tQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXHQvLyBSb29tIGNvbmZpZ3VyYXRpb24gaW5wdXRzXG5cdEBJbnB1dCgpIGFwcG9pbnRtZW50SWQ6IG51bWJlciA9IDE7XG5cdEBJbnB1dCgpIHByb2R1Y3Q6IHN0cmluZyA9ICd1ZWxsJztcblx0QElucHV0KCkgdGVuYW50SWQ6IHN0cmluZyA9ICcnO1xuXHRASW5wdXQoKSBjdXJyZW50VXNlciE6IFRhc0N1cnJlbnRVc2VyO1xuXHRASW5wdXQoKSBvd25lclVzZXJJZHMhOiBudW1iZXJbXTtcblx0QElucHV0KCkgcmVndWxhclVzZXJJZHM6IG51bWJlcltdID0gW107XG5cdEBJbnB1dCgpIG1vZGVyYXRvclVzZXJJZHM6IG51bWJlcltdID0gW107XG5cdFxuXHQvKiogT3B0aW9uYWw6IElmIHByb3ZpZGVkLCBza2lwcyByb29tIGNyZWF0aW9uIGFuZCBnb2VzIGRpcmVjdGx5IHRvIGdldHRpbmcgYSB0b2tlbiAqL1xuXHRASW5wdXQoKSBleGlzdGluZ1Nlc3Npb25JZDogc3RyaW5nID0gJyc7XG5cblx0Ly8gQ29tcG9uZW50IHN0YXRlXG5cdHB1YmxpYyBzdGF0ZTogV2FpdGluZ1Jvb21TdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuSURMRTtcblx0cHVibGljIFdhaXRpbmdSb29tU3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlOyAvLyBFeHBvc2UgZW51bSB0byB0ZW1wbGF0ZVxuXHRwdWJsaWMgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSAnJztcblx0XG5cdC8qKiBXaGV0aGVyIHdlIGhhdmUgYW4gZXhpc3Rpbmcgc2Vzc2lvbiAocGFzc2VkIHZpYSBpbnB1dCkgKi9cblx0cHVibGljIGhhc0V4aXN0aW5nU2Vzc2lvbjogYm9vbGVhbiA9IGZhbHNlO1xuXHRcblx0LyoqIFVJIHRvZ2dsZTogc2hvdyBcIkpvaW4gRXhpc3RpbmdcIiBpbnB1dCB2cyBcIkNyZWF0ZSBOZXdcIiAqL1xuXHRwdWJsaWMgc2hvd0pvaW5FeGlzdGluZ1VJOiBib29sZWFuID0gZmFsc2U7XG5cdFxuXHQvKiogTWFudWFsIHNlc3Npb24gSUQgaW5wdXQgYnkgdXNlciAqL1xuXHRwdWJsaWMgbWFudWFsU2Vzc2lvbklkOiBzdHJpbmcgPSAnJztcblx0XG5cdC8qKiBUcmFjayBpZiB3ZSdyZSBqb2luaW5nIGFuIGV4aXN0aW5nIHNlc3Npb24gKGZvciBVSSBkaXNwbGF5KSAqL1xuXHRwdWJsaWMgaXNKb2luaW5nRXhpc3Rpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHQvLyBTZXNzaW9uIGRhdGFcblx0cHJpdmF0ZSBzZXNzaW9uSWQ6IHN0cmluZyA9ICcnO1xuXHRwcml2YXRlIHRva2VuOiBzdHJpbmcgPSAnJztcblx0cHJpdmF0ZSB1c2VyczogQ3JlYXRlUm9vbVVzZXJbXSA9IFtdO1xuXHRwcml2YXRlIHN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cdHByaXZhdGUgdmlkZW9DYWxsTW9kYWxSZWY6IE5nYk1vZGFsUmVmIHwgbnVsbCA9IG51bGw7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCxcblx0XHRwcml2YXRlIHRhc1NlcnZpY2U6IFRhc1NlcnZpY2UsXG5cdFx0cHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsXG5cdCkge31cblxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLmJ1aWxkVXNlcnNBcnJheSgpO1xuXHRcdHRoaXMuc2V0dXBWaWV3TW9kZVN1YnNjcmlwdGlvbigpO1xuXHRcdFxuXHRcdC8vIENoZWNrIGlmIHdlIGhhdmUgYW4gZXhpc3Rpbmcgc2Vzc2lvbiBwYXNzZWQgdmlhIGlucHV0XG5cdFx0aWYgKHRoaXMuZXhpc3RpbmdTZXNzaW9uSWQgJiYgdGhpcy5leGlzdGluZ1Nlc3Npb25JZC50cmltKCkgIT09ICcnKSB7XG5cdFx0XHR0aGlzLmhhc0V4aXN0aW5nU2Vzc2lvbiA9IHRydWU7XG5cdFx0XHR0aGlzLnNlc3Npb25JZCA9IHRoaXMuZXhpc3RpbmdTZXNzaW9uSWQ7XG5cdFx0XHR0aGlzLmlzSm9pbmluZ0V4aXN0aW5nID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpOiB2b2lkIHtcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSByb29tIGFuZCBmZXRjaGVzIHRoZSB0b2tlbiAobmV3IHNlc3Npb24gZmxvdylcblx0ICovXG5cdGNyZWF0ZVJvb20oKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLnRlbmFudElkIHx8ICF0aGlzLmN1cnJlbnRVc2VyPy5uYW1lKSB7XG5cdFx0XHR0aGlzLnN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5FUlJPUjtcblx0XHRcdHRoaXMuZXJyb3JNZXNzYWdlID0gJ01pc3NpbmcgY29uZmlndXJhdGlvbiBkYXRhICh0ZW5hbnQgb3IgdXNlciknO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuaXNKb2luaW5nRXhpc3RpbmcgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5DUkVBVElOR19ST09NO1xuXHRcdHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG5cblx0XHRjb25zdCBib2R5OiBDcmVhdGVSb29tUmVxdWVzdCA9IHtcblx0XHRcdHJvb21UeXBlOiBUYXNSb29tVHlwZS5UQVMsXG5cdFx0XHR0eXBlOiBUYXNTZXNzaW9uVHlwZS5TUE9OVEFORU9VUyxcblx0XHRcdHRlbmFudDogdGhpcy50ZW5hbnRJZCxcblx0XHRcdGFwcG9pbnRtZW50SWQ6IHRoaXMuYXBwb2ludG1lbnRJZCxcblx0XHRcdHVzZXJzOiB0aGlzLnVzZXJzLFxuXHRcdFx0cHJvZHVjdDogdGhpcy5wcm9kdWN0XG5cdFx0fTtcblxuXHRcdHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG5cdFx0XHR0aGlzLnRhc1NlcnZpY2UuY3JlYXRlUm9vbShib2R5KS5waXBlKFxuXHRcdFx0XHRzd2l0Y2hNYXAocmVzcG9uc2UgPT4ge1xuXHRcdFx0XHRcdHRoaXMuc2Vzc2lvbklkID0gcmVzcG9uc2UuY29udGVudC5zZXNzaW9uSWQ7XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuR0VUVElOR19UT0tFTjtcblxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnRhc1NlcnZpY2UuZ2VuZXJhdGVUb2tlbih7XG5cdFx0XHRcdFx0XHRzZXNzaW9uSWQ6IHRoaXMuc2Vzc2lvbklkLFxuXHRcdFx0XHRcdFx0bmFtZTogdGhpcy5jdXJyZW50VXNlci5uYW1lLFxuXHRcdFx0XHRcdFx0bGFzdG5hbWU6IHRoaXMuY3VycmVudFVzZXIubGFzdG5hbWUsXG5cdFx0XHRcdFx0XHRyb2xlVkM6IHRoaXMuY3VycmVudFVzZXIucm9sZVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KVxuXHRcdFx0KS5zdWJzY3JpYmUoe1xuXHRcdFx0XHRuZXh0OiAodG9rZW5SZXNwb25zZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMudG9rZW4gPSB0b2tlblJlc3BvbnNlLmNvbnRlbnQudG9rZW47XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuUkVBRFk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGVycm9yOiAoZXJyKSA9PiB7XG5cdFx0XHRcdFx0Y29uc29sZS5lcnJvcignRXJyb3IgY3JlYXRpbmcgcm9vbSBvciBnZXR0aW5nIHRva2VuOicsIGVycik7XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuRVJST1I7XG5cdFx0XHRcdFx0dGhpcy5lcnJvck1lc3NhZ2UgPSAnRXJyb3IgY3JlYXRpbmcgcm9vbS4gUGxlYXNlIHRyeSBhZ2Fpbi4nO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogSm9pbiBleGlzdGluZyByb29tIHdpdGggbWFudWFsbHkgZW50ZXJlZCBzZXNzaW9uIElEXG5cdCAqL1xuXHRqb2luRXhpc3RpbmdXaXRoTWFudWFsSWQoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLm1hbnVhbFNlc3Npb25JZCB8fCB0aGlzLm1hbnVhbFNlc3Npb25JZC50cmltKCkgPT09ICcnKSB7XG5cdFx0XHR0aGlzLnN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5FUlJPUjtcblx0XHRcdHRoaXMuZXJyb3JNZXNzYWdlID0gJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFNlc3Npb24gSUQnO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuc2Vzc2lvbklkID0gdGhpcy5tYW51YWxTZXNzaW9uSWQudHJpbSgpO1xuXHRcdHRoaXMuaXNKb2luaW5nRXhpc3RpbmcgPSB0cnVlO1xuXHRcdHRoaXMuZ2V0VG9rZW5Gb3JFeGlzdGluZ1Nlc3Npb24oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGEgdG9rZW4gZm9yIGFuIGV4aXN0aW5nIHNlc3Npb24gKGV4aXN0aW5nIHNlc3Npb24gZmxvdylcblx0ICovXG5cdGdldFRva2VuRm9yRXhpc3RpbmdTZXNzaW9uKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5zZXNzaW9uSWQgfHwgIXRoaXMuY3VycmVudFVzZXI/Lm5hbWUpIHtcblx0XHRcdHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLkVSUk9SO1xuXHRcdFx0dGhpcy5lcnJvck1lc3NhZ2UgPSAnTWlzc2luZyBzZXNzaW9uIElEIG9yIHVzZXIgZGF0YSc7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5pc0pvaW5pbmdFeGlzdGluZyA9IHRydWU7XG5cdFx0dGhpcy5zdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuR0VUVElOR19UT0tFTjtcblx0XHR0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuXG5cdFx0dGhpcy5zdWJzY3JpcHRpb25zLmFkZChcblx0XHRcdHRoaXMudGFzU2VydmljZS5nZW5lcmF0ZVRva2VuKHtcblx0XHRcdFx0c2Vzc2lvbklkOiB0aGlzLnNlc3Npb25JZCxcblx0XHRcdFx0bmFtZTogdGhpcy5jdXJyZW50VXNlci5uYW1lLFxuXHRcdFx0XHRsYXN0bmFtZTogdGhpcy5jdXJyZW50VXNlci5sYXN0bmFtZSxcblx0XHRcdFx0cm9sZVZDOiB0aGlzLmN1cnJlbnRVc2VyLnJvbGVcblx0XHRcdH0pLnN1YnNjcmliZSh7XG5cdFx0XHRcdG5leHQ6ICh0b2tlblJlc3BvbnNlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy50b2tlbiA9IHRva2VuUmVzcG9uc2UuY29udGVudC50b2tlbjtcblx0XHRcdFx0XHR0aGlzLnN0YXRlID0gV2FpdGluZ1Jvb21TdGF0ZS5SRUFEWTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZXJyb3I6IChlcnIpID0+IHtcblx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdFcnJvciBnZXR0aW5nIHRva2VuOicsIGVycik7XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZSA9IFdhaXRpbmdSb29tU3RhdGUuRVJST1I7XG5cdFx0XHRcdFx0dGhpcy5lcnJvck1lc3NhZ2UgPSAnRXJyb3IgZ2V0dGluZyBzZXNzaW9uIHRva2VuLiBQbGVhc2UgY2hlY2sgdGhlIFNlc3Npb24gSUQgYW5kIHRyeSBhZ2Fpbi4nO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogSm9pbnMgdGhlIHZpZGVvIGNhbGwgc2Vzc2lvblxuXHQgKi9cblx0am9pblNlc3Npb24oKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLnNlc3Npb25JZCB8fCAhdGhpcy50b2tlbikge1xuXHRcdFx0dGhpcy5lcnJvck1lc3NhZ2UgPSAnQ2Fubm90IGpvaW4gc2Vzc2lvbi4gSW5jb21wbGV0ZSBkYXRhLic7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2xvc2Ugd2FpdGluZyByb29tIGFuZCBvcGVuIHZpZGVvIGNhbGxcblx0XHR0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKCdqb2luaW5nJyk7XG5cdFx0dGhpcy5vcGVuVmlkZW9DYWxsTW9kYWwoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDbG9zZXMgdGhlIHdhaXRpbmcgcm9vbVxuXHQgKi9cblx0Y2FuY2VsKCk6IHZvaWQge1xuXHRcdHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcygnY2FuY2VsJyk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cnkgYWZ0ZXIgYW4gZXJyb3Jcblx0ICovXG5cdHJldHJ5KCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUgPSBXYWl0aW5nUm9vbVN0YXRlLklETEU7XG5cdFx0dGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcblx0XHR0aGlzLnRva2VuID0gJyc7XG5cdFx0dGhpcy5pc0pvaW5pbmdFeGlzdGluZyA9IGZhbHNlO1xuXHRcdFxuXHRcdC8vIE9ubHkgcmVzZXQgc2Vzc2lvbklkIGlmIHdlIGRvbid0IGhhdmUgYW4gZXhpc3Rpbmcgb25lIGZyb20gaW5wdXRcblx0XHRpZiAoIXRoaXMuaGFzRXhpc3RpbmdTZXNzaW9uKSB7XG5cdFx0XHR0aGlzLnNlc3Npb25JZCA9ICcnO1xuXHRcdH1cblx0fVxuXG5cdC8vIFByaXZhdGUgTWV0aG9kc1xuXHRwcml2YXRlIGJ1aWxkVXNlcnNBcnJheSgpOiB2b2lkIHtcblx0XHR0aGlzLnVzZXJzID0gW107XG5cblx0XHQvLyBBZGQgb3duZXJzIGZyb20gaW5wdXRcblx0XHR0aGlzLm93bmVyVXNlcklkcy5mb3JFYWNoKGlkID0+IHtcblx0XHRcdHRoaXMudXNlcnMucHVzaCh7IHVzZXJFeHRlcm5hbElkOiBpZCwgcm9sOiBUYXNVc2VyUm9sZS5PV05FUiB9KTtcblx0XHR9KTtcblxuXHRcdC8vIEFkZCByZWd1bGFyIHVzZXJzIGZyb20gaW5wdXRcblx0XHR0aGlzLnJlZ3VsYXJVc2VySWRzLmZvckVhY2goaWQgPT4ge1xuXHRcdFx0dGhpcy51c2Vycy5wdXNoKHsgdXNlckV4dGVybmFsSWQ6IGlkLCByb2w6IFRhc1VzZXJSb2xlLlVTRVIgfSk7XG5cdFx0fSk7XG5cblx0XHQvLyBBZGQgbW9kZXJhdG9ycyBmcm9tIGlucHV0XG5cdFx0dGhpcy5tb2RlcmF0b3JVc2VySWRzLmZvckVhY2goaWQgPT4ge1xuXHRcdFx0dGhpcy51c2Vycy5wdXNoKHsgdXNlckV4dGVybmFsSWQ6IGlkLCByb2w6IFRhc1VzZXJSb2xlLk1PREVSQVRPUiB9KTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgc2V0dXBWaWV3TW9kZVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcblx0XHR0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuXHRcdFx0dGhpcy50YXNTZXJ2aWNlLnZpZXdNb2RlJC5zdWJzY3JpYmUobW9kZSA9PiB7XG5cdFx0XHRcdC8vIFJlLW9wZW4gdmlkZW8gY2FsbCBtb2RhbCB3aGVuIHJldHVybmluZyBmcm9tIFBpUCBtb2RlXG5cdFx0XHRcdGlmIChtb2RlID09PSBWaWV3TW9kZS5GVUxMU0NSRUVOICYmIFxuXHRcdFx0XHRcdHRoaXMudGFzU2VydmljZS5pc0NhbGxBY3RpdmUoKSAmJiBcblx0XHRcdFx0XHQhdGhpcy52aWRlb0NhbGxNb2RhbFJlZikge1xuXHRcdFx0XHRcdGNvbnN0IHNlc3Npb25JZCA9IHRoaXMudGFzU2VydmljZS5zZXNzaW9uSWQ7XG5cdFx0XHRcdFx0Y29uc3QgdG9rZW4gPSB0aGlzLnRhc1NlcnZpY2UudG9rZW47XG5cdFx0XHRcdFx0aWYgKHNlc3Npb25JZCAmJiB0b2tlbikge1xuXHRcdFx0XHRcdFx0dGhpcy5vcGVuVmlkZW9DYWxsTW9kYWwodHJ1ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIG9wZW5WaWRlb0NhbGxNb2RhbChpc1JldHVybmluZ0Zyb21QaXA6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuXHRcdHRoaXMudmlkZW9DYWxsTW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFRhc1ZpZGVvY2FsbENvbXBvbmVudCwge1xuXHRcdFx0c2l6ZTogJ3hsJyxcblx0XHRcdHdpbmRvd0NsYXNzOiAndGFzLXZpZGVvLW1vZGFsJyxcblx0XHRcdGJhY2tkcm9wOiAnc3RhdGljJyxcblx0XHRcdGtleWJvYXJkOiBmYWxzZVxuXHRcdH0pO1xuXG5cdFx0Y29uc3Qgc2Vzc2lvbklkVG9Vc2UgPSB0aGlzLnNlc3Npb25JZCB8fCB0aGlzLnRhc1NlcnZpY2Uuc2Vzc2lvbklkO1xuXHRcdGNvbnN0IHRva2VuVG9Vc2UgPSB0aGlzLnRva2VuIHx8IHRoaXMudGFzU2VydmljZS50b2tlbjtcblxuXHRcdHRoaXMudmlkZW9DYWxsTW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2Uuc2Vzc2lvbklkID0gc2Vzc2lvbklkVG9Vc2U7XG5cdFx0dGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50b2tlbiA9IHRva2VuVG9Vc2U7XG5cdFx0dGhpcy52aWRlb0NhbGxNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5pc1JldHVybmluZ0Zyb21QaXAgPSBpc1JldHVybmluZ0Zyb21QaXA7XG5cblx0XHR0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmLnJlc3VsdC50aGVuKFxuXHRcdFx0KCkgPT4geyB0aGlzLnZpZGVvQ2FsbE1vZGFsUmVmID0gbnVsbDsgfSxcblx0XHRcdCgpID0+IHsgdGhpcy52aWRlb0NhbGxNb2RhbFJlZiA9IG51bGw7IH1cblx0XHQpO1xuXHR9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGFzLXdhaXRpbmctcm9vbVwiPlxuXHQ8IS0tIEhlYWRlciAtLT5cblx0PGRpdiBjbGFzcz1cIndhaXRpbmctcm9vbS1oZWFkZXJcIj5cblx0XHQ8ZGl2IGNsYXNzPVwiaGVhZGVyLWljb25cIj5cblx0XHRcdDxpIGNsYXNzPVwiZmEgZmEtdmlkZW8tY2FtZXJhXCI+PC9pPlxuXHRcdDwvZGl2PlxuXHRcdDxoMiBjbGFzcz1cImhlYWRlci10aXRsZVwiPldhaXRpbmcgUm9vbTwvaDI+XG5cdFx0PHAgY2xhc3M9XCJoZWFkZXItc3VidGl0bGVcIj5QcmVwYXJlIGZvciB5b3VyIHZpZGVvIGNhbGw8L3A+XG5cdFx0PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZS1idG5cIiAoY2xpY2spPVwiY2FuY2VsKClcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj5cblx0XHRcdDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG5cdFx0PC9idXR0b24+XG5cdDwvZGl2PlxuXG5cdDwhLS0gQ29udGVudCAtLT5cblx0PGRpdiBjbGFzcz1cIndhaXRpbmctcm9vbS1jb250ZW50XCI+XG5cdFx0PCEtLSBJRExFIFN0YXRlIC0gU2hvdyBvcHRpb25zIC0tPlxuXHRcdDxkaXYgY2xhc3M9XCJzdGF0ZS1jb250YWluZXJcIiAqbmdJZj1cInN0YXRlID09PSBXYWl0aW5nUm9vbVN0YXRlLklETEVcIj5cblx0XHRcdFxuXHRcdFx0PCEtLSBUYWIgc3dpdGNoZXIgKG9ubHkgaWYgbm8gZXhpc3RpbmdTZXNzaW9uSWQgd2FzIHBhc3NlZCkgLS0+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwibW9kZS10YWJzXCIgKm5nSWY9XCIhaGFzRXhpc3RpbmdTZXNzaW9uXCI+XG5cdFx0XHRcdDxidXR0b24gXG5cdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiIFxuXHRcdFx0XHRcdGNsYXNzPVwibW9kZS10YWJcIiBcblx0XHRcdFx0XHRbY2xhc3MuYWN0aXZlXT1cIiFzaG93Sm9pbkV4aXN0aW5nVUlcIlxuXHRcdFx0XHRcdChjbGljayk9XCJzaG93Sm9pbkV4aXN0aW5nVUkgPSBmYWxzZVwiPlxuXHRcdFx0XHRcdDxpIGNsYXNzPVwiZmEgZmEtcGx1cy1jaXJjbGVcIj48L2k+XG5cdFx0XHRcdFx0Q3JlYXRlIE5ld1xuXHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdFx0PGJ1dHRvbiBcblx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgXG5cdFx0XHRcdFx0Y2xhc3M9XCJtb2RlLXRhYlwiIFxuXHRcdFx0XHRcdFtjbGFzcy5hY3RpdmVdPVwic2hvd0pvaW5FeGlzdGluZ1VJXCJcblx0XHRcdFx0XHQoY2xpY2spPVwic2hvd0pvaW5FeGlzdGluZ1VJID0gdHJ1ZVwiPlxuXHRcdFx0XHRcdDxpIGNsYXNzPVwiZmEgZmEtc2lnbi1pblwiPjwvaT5cblx0XHRcdFx0XHRKb2luIEV4aXN0aW5nXG5cdFx0XHRcdDwvYnV0dG9uPlxuXHRcdFx0PC9kaXY+XG5cblx0XHRcdDwhLS0gQ3JlYXRlIE5ldyBSb29tIFVJIC0tPlxuXHRcdFx0PGRpdiBjbGFzcz1cIm1vZGUtY29udGVudFwiICpuZ0lmPVwiIXNob3dKb2luRXhpc3RpbmdVSSAmJiAhaGFzRXhpc3RpbmdTZXNzaW9uXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzdGF0ZS1pY29uIGlkbGVcIj5cblx0XHRcdFx0XHQ8aSBjbGFzcz1cImZhIGZhLXBsdXMtY2lyY2xlXCI+PC9pPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PHAgY2xhc3M9XCJzdGF0ZS1tZXNzYWdlXCI+XG5cdFx0XHRcdFx0Q3JlYXRlIGEgbmV3IHZpZGVvIGNhbGwgcm9vbVxuXHRcdFx0XHQ8L3A+XG5cdFx0XHRcdDxwIGNsYXNzPVwic3RhdGUtc3VibWVzc2FnZVwiPlxuXHRcdFx0XHRcdFN0YXJ0IGEgbmV3IHNlc3Npb24gZm9yIHRoaXMgYXBwb2ludG1lbnRcblx0XHRcdFx0PC9wPlxuXHRcdFx0XHQ8YnV0dG9uIFxuXHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIiBcblx0XHRcdFx0XHRjbGFzcz1cImJ0biBhY3Rpb24tYnRuIGNyZWF0ZS1idG5cIlxuXHRcdFx0XHRcdChjbGljayk9XCJjcmVhdGVSb29tKClcIj5cblx0XHRcdFx0XHQ8aSBjbGFzcz1cImZhIGZhLXBsdXNcIj48L2k+XG5cdFx0XHRcdFx0Q3JlYXRlIFJvb21cblx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHQ8L2Rpdj5cblxuXHRcdFx0PCEtLSBKb2luIEV4aXN0aW5nIFJvb20gVUkgKG1hbnVhbCBpbnB1dCkgLS0+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwibW9kZS1jb250ZW50XCIgKm5nSWY9XCJzaG93Sm9pbkV4aXN0aW5nVUkgJiYgIWhhc0V4aXN0aW5nU2Vzc2lvblwiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwic3RhdGUtaWNvbiBpZGxlXCI+XG5cdFx0XHRcdFx0PGkgY2xhc3M9XCJmYSBmYS1zaWduLWluXCI+PC9pPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PHAgY2xhc3M9XCJzdGF0ZS1tZXNzYWdlXCI+XG5cdFx0XHRcdFx0Sm9pbiBhbiBleGlzdGluZyByb29tXG5cdFx0XHRcdDwvcD5cblx0XHRcdFx0PHAgY2xhc3M9XCJzdGF0ZS1zdWJtZXNzYWdlXCI+XG5cdFx0XHRcdFx0RW50ZXIgdGhlIHNlc3Npb24gSUQgdG8gam9pblxuXHRcdFx0XHQ8L3A+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzZXNzaW9uLWlucHV0LWNvbnRhaW5lclwiPlxuXHRcdFx0XHRcdDxpbnB1dCBcblx0XHRcdFx0XHRcdHR5cGU9XCJ0ZXh0XCIgXG5cdFx0XHRcdFx0XHRjbGFzcz1cInNlc3Npb24taW5wdXRcIlxuXHRcdFx0XHRcdFx0WyhuZ01vZGVsKV09XCJtYW51YWxTZXNzaW9uSWRcIlxuXHRcdFx0XHRcdFx0cGxhY2Vob2xkZXI9XCJFbnRlciBTZXNzaW9uIElEXCJcblx0XHRcdFx0XHRcdChrZXl1cC5lbnRlcik9XCJqb2luRXhpc3RpbmdXaXRoTWFudWFsSWQoKVwiPlxuXHRcdFx0XHRcdDxidXR0b24gXG5cdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgXG5cdFx0XHRcdFx0XHRjbGFzcz1cImJ0biBhY3Rpb24tYnRuIGNyZWF0ZS1idG5cIlxuXHRcdFx0XHRcdFx0W2Rpc2FibGVkXT1cIiFtYW51YWxTZXNzaW9uSWQgfHwgbWFudWFsU2Vzc2lvbklkLnRyaW0oKSA9PT0gJydcIlxuXHRcdFx0XHRcdFx0KGNsaWNrKT1cImpvaW5FeGlzdGluZ1dpdGhNYW51YWxJZCgpXCI+XG5cdFx0XHRcdFx0XHQ8aSBjbGFzcz1cImZhIGZhLXNpZ24taW5cIj48L2k+XG5cdFx0XHRcdFx0XHRKb2luIFJvb21cblx0XHRcdFx0XHQ8L2J1dHRvbj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblxuXHRcdFx0PCEtLSBKb2luIEV4aXN0aW5nIFJvb20gVUkgKHByZS1maWxsZWQgc2Vzc2lvbiBJRCkgLS0+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwibW9kZS1jb250ZW50XCIgKm5nSWY9XCJoYXNFeGlzdGluZ1Nlc3Npb25cIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInN0YXRlLWljb24gaWRsZVwiPlxuXHRcdFx0XHRcdDxpIGNsYXNzPVwiZmEgZmEtc2lnbi1pblwiPjwvaT5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxwIGNsYXNzPVwic3RhdGUtbWVzc2FnZVwiPlxuXHRcdFx0XHRcdEpvaW4gZXhpc3RpbmcgdmlkZW8gY2FsbCByb29tXG5cdFx0XHRcdDwvcD5cblx0XHRcdFx0PHAgY2xhc3M9XCJzdGF0ZS1zdWJtZXNzYWdlXCI+XG5cdFx0XHRcdFx0UHJlc3MgdGhlIGJ1dHRvbiB0byBnZXQgYWNjZXNzXG5cdFx0XHRcdDwvcD5cblx0XHRcdFx0PGJ1dHRvbiBcblx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgXG5cdFx0XHRcdFx0Y2xhc3M9XCJidG4gYWN0aW9uLWJ0biBjcmVhdGUtYnRuXCJcblx0XHRcdFx0XHQoY2xpY2spPVwiZ2V0VG9rZW5Gb3JFeGlzdGluZ1Nlc3Npb24oKVwiPlxuXHRcdFx0XHRcdDxpIGNsYXNzPVwiZmEgZmEtc2lnbi1pblwiPjwvaT5cblx0XHRcdFx0XHRKb2luIFJvb21cblx0XHRcdFx0PC9idXR0b24+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblxuXHRcdDwhLS0gQ1JFQVRJTkdfUk9PTSBTdGF0ZSAob25seSBmb3IgbmV3IHNlc3Npb25zKSAtLT5cblx0XHQ8ZGl2IGNsYXNzPVwic3RhdGUtY29udGFpbmVyXCIgKm5nSWY9XCJzdGF0ZSA9PT0gV2FpdGluZ1Jvb21TdGF0ZS5DUkVBVElOR19ST09NXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwic3RhdGUtaWNvbiBsb2FkaW5nXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzcGlubmVyXCI+PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxwIGNsYXNzPVwic3RhdGUtbWVzc2FnZVwiPlxuXHRcdFx0XHRDcmVhdGluZyB2aWRlbyBjYWxsIHJvb20uLi5cblx0XHRcdDwvcD5cblx0XHRcdDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1zdGVwc1wiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwic3RlcCBhY3RpdmVcIj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtaW5kaWNhdG9yXCI+PC9zcGFuPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3RlcC1sYWJlbFwiPkNyZWF0aW5nPC9zcGFuPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInN0ZXBcIj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtaW5kaWNhdG9yXCI+PC9zcGFuPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3RlcC1sYWJlbFwiPkFjY2Vzczwvc3Bhbj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzdGVwXCI+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdGVwLWluZGljYXRvclwiPjwvc3Bhbj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtbGFiZWxcIj5SZWFkeTwvc3Bhbj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblxuXHRcdDwhLS0gR0VUVElOR19UT0tFTiBTdGF0ZSAtIE5ldyBTZXNzaW9uIC0tPlxuXHRcdDxkaXYgY2xhc3M9XCJzdGF0ZS1jb250YWluZXJcIiAqbmdJZj1cInN0YXRlID09PSBXYWl0aW5nUm9vbVN0YXRlLkdFVFRJTkdfVE9LRU4gJiYgIWlzSm9pbmluZ0V4aXN0aW5nXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwic3RhdGUtaWNvbiBsb2FkaW5nXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzcGlubmVyXCI+PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxwIGNsYXNzPVwic3RhdGUtbWVzc2FnZVwiPlxuXHRcdFx0XHRQcmVwYXJpbmcgcm9vbSBhY2Nlc3MuLi5cblx0XHRcdDwvcD5cblx0XHRcdDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1zdGVwc1wiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwic3RlcCBjb21wbGV0ZWRcIj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtaW5kaWNhdG9yXCI+PGkgY2xhc3M9XCJmYSBmYS1jaGVja1wiPjwvaT48L3NwYW4+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdGVwLWxhYmVsXCI+Q3JlYXRlZDwvc3Bhbj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzdGVwIGFjdGl2ZVwiPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3RlcC1pbmRpY2F0b3JcIj48L3NwYW4+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdGVwLWxhYmVsXCI+QWNjZXNzPC9zcGFuPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInN0ZXBcIj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtaW5kaWNhdG9yXCI+PC9zcGFuPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3RlcC1sYWJlbFwiPlJlYWR5PC9zcGFuPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXG5cdFx0PCEtLSBHRVRUSU5HX1RPS0VOIFN0YXRlIC0gSm9pbmluZyBFeGlzdGluZyBTZXNzaW9uIC0tPlxuXHRcdDxkaXYgY2xhc3M9XCJzdGF0ZS1jb250YWluZXJcIiAqbmdJZj1cInN0YXRlID09PSBXYWl0aW5nUm9vbVN0YXRlLkdFVFRJTkdfVE9LRU4gJiYgaXNKb2luaW5nRXhpc3RpbmdcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJzdGF0ZS1pY29uIGxvYWRpbmdcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInNwaW5uZXJcIj48L2Rpdj5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PHAgY2xhc3M9XCJzdGF0ZS1tZXNzYWdlXCI+XG5cdFx0XHRcdEdldHRpbmcgcm9vbSBhY2Nlc3MuLi5cblx0XHRcdDwvcD5cblx0XHRcdDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1zdGVwc1wiPlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwic3RlcCBhY3RpdmVcIj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtaW5kaWNhdG9yXCI+PC9zcGFuPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3RlcC1sYWJlbFwiPkNvbm5lY3Rpbmc8L3NwYW4+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwic3RlcFwiPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3RlcC1pbmRpY2F0b3JcIj48L3NwYW4+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdGVwLWxhYmVsXCI+UmVhZHk8L3NwYW4+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cblx0XHQ8IS0tIFJFQURZIFN0YXRlIC0gTmV3IFNlc3Npb24gLS0+XG5cdFx0PGRpdiBjbGFzcz1cInN0YXRlLWNvbnRhaW5lclwiICpuZ0lmPVwic3RhdGUgPT09IFdhaXRpbmdSb29tU3RhdGUuUkVBRFkgJiYgIWlzSm9pbmluZ0V4aXN0aW5nXCI+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwic3RhdGUtaWNvbiByZWFkeVwiPlxuXHRcdFx0XHQ8aSBjbGFzcz1cImZhIGZhLWNoZWNrLWNpcmNsZVwiPjwvaT5cblx0XHRcdDwvZGl2PlxuXHRcdFx0PHAgY2xhc3M9XCJzdGF0ZS1tZXNzYWdlIHN1Y2Nlc3NcIj5cblx0XHRcdFx0Um9vbSBpcyByZWFkeSFcblx0XHRcdDwvcD5cblx0XHRcdDxwIGNsYXNzPVwic3RhdGUtc3VibWVzc2FnZVwiPlxuXHRcdFx0XHRZb3UgY2FuIGpvaW4gdGhlIHZpZGVvIGNhbGwgd2hlbiByZWFkeVxuXHRcdFx0PC9wPlxuXHRcdFx0PGRpdiBjbGFzcz1cInByb2dyZXNzLXN0ZXBzXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzdGVwIGNvbXBsZXRlZFwiPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3RlcC1pbmRpY2F0b3JcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrXCI+PC9pPjwvc3Bhbj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtbGFiZWxcIj5DcmVhdGVkPC9zcGFuPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInN0ZXAgY29tcGxldGVkXCI+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdGVwLWluZGljYXRvclwiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2tcIj48L2k+PC9zcGFuPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3RlcC1sYWJlbFwiPkFjY2Vzczwvc3Bhbj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzdGVwIGNvbXBsZXRlZFwiPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3RlcC1pbmRpY2F0b3JcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrXCI+PC9pPjwvc3Bhbj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtbGFiZWxcIj5SZWFkeTwvc3Bhbj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxidXR0b24gXG5cdFx0XHRcdHR5cGU9XCJidXR0b25cIiBcblx0XHRcdFx0Y2xhc3M9XCJidG4gYWN0aW9uLWJ0biBqb2luLWJ0blwiXG5cdFx0XHRcdChjbGljayk9XCJqb2luU2Vzc2lvbigpXCI+XG5cdFx0XHRcdDxpIGNsYXNzPVwiZmEgZmEtc2lnbi1pblwiPjwvaT5cblx0XHRcdFx0Sm9pbiBTZXNzaW9uXG5cdFx0XHQ8L2J1dHRvbj5cblx0XHQ8L2Rpdj5cblxuXHRcdDwhLS0gUkVBRFkgU3RhdGUgLSBKb2luaW5nIEV4aXN0aW5nIFNlc3Npb24gLS0+XG5cdFx0PGRpdiBjbGFzcz1cInN0YXRlLWNvbnRhaW5lclwiICpuZ0lmPVwic3RhdGUgPT09IFdhaXRpbmdSb29tU3RhdGUuUkVBRFkgJiYgaXNKb2luaW5nRXhpc3RpbmdcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJzdGF0ZS1pY29uIHJlYWR5XCI+XG5cdFx0XHRcdDxpIGNsYXNzPVwiZmEgZmEtY2hlY2stY2lyY2xlXCI+PC9pPlxuXHRcdFx0PC9kaXY+XG5cdFx0XHQ8cCBjbGFzcz1cInN0YXRlLW1lc3NhZ2Ugc3VjY2Vzc1wiPlxuXHRcdFx0XHRSZWFkeSB0byBqb2luIVxuXHRcdFx0PC9wPlxuXHRcdFx0PHAgY2xhc3M9XCJzdGF0ZS1zdWJtZXNzYWdlXCI+XG5cdFx0XHRcdFlvdSBjYW4gam9pbiB0aGUgdmlkZW8gY2FsbCB3aGVuIHJlYWR5XG5cdFx0XHQ8L3A+XG5cdFx0XHQ8ZGl2IGNsYXNzPVwicHJvZ3Jlc3Mtc3RlcHNcIj5cblx0XHRcdFx0PGRpdiBjbGFzcz1cInN0ZXAgY29tcGxldGVkXCI+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdGVwLWluZGljYXRvclwiPjxpIGNsYXNzPVwiZmEgZmEtY2hlY2tcIj48L2k+PC9zcGFuPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3RlcC1sYWJlbFwiPkNvbm5lY3RlZDwvc3Bhbj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJzdGVwIGNvbXBsZXRlZFwiPlxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3RlcC1pbmRpY2F0b3JcIj48aSBjbGFzcz1cImZhIGZhLWNoZWNrXCI+PC9pPjwvc3Bhbj5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInN0ZXAtbGFiZWxcIj5SZWFkeTwvc3Bhbj5cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxidXR0b24gXG5cdFx0XHRcdHR5cGU9XCJidXR0b25cIiBcblx0XHRcdFx0Y2xhc3M9XCJidG4gYWN0aW9uLWJ0biBqb2luLWJ0blwiXG5cdFx0XHRcdChjbGljayk9XCJqb2luU2Vzc2lvbigpXCI+XG5cdFx0XHRcdDxpIGNsYXNzPVwiZmEgZmEtc2lnbi1pblwiPjwvaT5cblx0XHRcdFx0Sm9pbiBTZXNzaW9uXG5cdFx0XHQ8L2J1dHRvbj5cblx0XHQ8L2Rpdj5cblxuXHRcdDwhLS0gRVJST1IgU3RhdGUgLS0+XG5cdFx0PGRpdiBjbGFzcz1cInN0YXRlLWNvbnRhaW5lclwiICpuZ0lmPVwic3RhdGUgPT09IFdhaXRpbmdSb29tU3RhdGUuRVJST1JcIj5cblx0XHRcdDxkaXYgY2xhc3M9XCJzdGF0ZS1pY29uIGVycm9yXCI+XG5cdFx0XHRcdDxpIGNsYXNzPVwiZmEgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGVcIj48L2k+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxwIGNsYXNzPVwic3RhdGUtbWVzc2FnZSBlcnJvclwiPlxuXHRcdFx0XHRBbiBlcnJvciBvY2N1cnJlZFxuXHRcdFx0PC9wPlxuXHRcdFx0PHAgY2xhc3M9XCJlcnJvci1kZXRhaWxzXCIgKm5nSWY9XCJlcnJvck1lc3NhZ2VcIj5cblx0XHRcdFx0e3sgZXJyb3JNZXNzYWdlIH19XG5cdFx0XHQ8L3A+XG5cdFx0XHQ8YnV0dG9uIFxuXHRcdFx0XHR0eXBlPVwiYnV0dG9uXCIgXG5cdFx0XHRcdGNsYXNzPVwiYnRuIGFjdGlvbi1idG4gcmV0cnktYnRuXCJcblx0XHRcdFx0KGNsaWNrKT1cInJldHJ5KClcIj5cblx0XHRcdFx0PGkgY2xhc3M9XCJmYSBmYS1yZWZyZXNoXCI+PC9pPlxuXHRcdFx0XHRSZXRyeVxuXHRcdFx0PC9idXR0b24+XG5cdFx0PC9kaXY+XG5cdDwvZGl2PlxuXG5cdDwhLS0gRm9vdGVyIC0tPlxuXHQ8ZGl2IGNsYXNzPVwid2FpdGluZy1yb29tLWZvb3RlclwiPlxuXHRcdDxidXR0b24gXG5cdFx0XHR0eXBlPVwiYnV0dG9uXCIgXG5cdFx0XHRjbGFzcz1cImJ0biBjYW5jZWwtYnRuXCJcblx0XHRcdChjbGljayk9XCJjYW5jZWwoKVwiPlxuXHRcdFx0Q2FuY2VsXG5cdFx0PC9idXR0b24+XG5cdDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -1,5 +1,6 @@
1
1
  import { NgModule } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
+ import { FormsModule } from '@angular/forms';
3
4
  import { TasButtonComponent } from './components/tas-btn/tas-btn.component';
4
5
  import { TasVideocallComponent } from './components/tas-videocall/tas-videocall.component';
5
6
  import { TasFloatingCallComponent } from './components/tas-floating-call/tas-floating-call.component';
@@ -52,12 +53,14 @@ TasUellSdkModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version
52
53
  TasUellSdkModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TasUellSdkModule, declarations: [TasButtonComponent,
53
54
  TasVideocallComponent,
54
55
  TasFloatingCallComponent,
55
- TasWaitingRoomComponent], imports: [CommonModule], exports: [TasButtonComponent,
56
+ TasWaitingRoomComponent], imports: [CommonModule,
57
+ FormsModule], exports: [TasButtonComponent,
56
58
  TasVideocallComponent,
57
59
  TasFloatingCallComponent,
58
60
  TasWaitingRoomComponent] });
59
61
  TasUellSdkModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TasUellSdkModule, imports: [[
60
62
  CommonModule,
63
+ FormsModule,
61
64
  ]] });
62
65
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: TasUellSdkModule, decorators: [{
63
66
  type: NgModule,
@@ -70,6 +73,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
70
73
  ],
71
74
  imports: [
72
75
  CommonModule,
76
+ FormsModule,
73
77
  ],
74
78
  exports: [
75
79
  TasButtonComponent,
@@ -79,4 +83,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
79
83
  ]
80
84
  }]
81
85
  }] });
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLXVlbGwtc2RrLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3Rhcy11ZWxsLXNkay9zcmMvbGliL3Rhcy11ZWxsLXNkay5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ3RHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ25HLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBNEIsTUFBTSxxQkFBcUIsQ0FBQzs7QUFtQjVGLE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0E0Qkc7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLE9BR2Q7UUFDQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLGdCQUFnQjtZQUMxQixTQUFTLEVBQUU7Z0JBQ1QsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFO2dCQUNqRCxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUU7Z0JBQzFELFVBQVU7YUFDWDtTQUNGLENBQUM7SUFDSixDQUFDOzs2R0ExQ1UsZ0JBQWdCOzhHQUFoQixnQkFBZ0IsaUJBZnpCLGtCQUFrQjtRQUNsQixxQkFBcUI7UUFDckIsd0JBQXdCO1FBQ3hCLHVCQUF1QixhQUd2QixZQUFZLGFBR1osa0JBQWtCO1FBQ2xCLHFCQUFxQjtRQUNyQix3QkFBd0I7UUFDeEIsdUJBQXVCOzhHQUdkLGdCQUFnQixZQVZsQjtZQUNQLFlBQVk7U0FDYjsyRkFRVSxnQkFBZ0I7a0JBakI1QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixrQkFBa0I7d0JBQ2xCLHFCQUFxQjt3QkFDckIsd0JBQXdCO3dCQUN4Qix1QkFBdUI7cUJBQ3hCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3FCQUNiO29CQUNELE9BQU8sRUFBRTt3QkFDUCxrQkFBa0I7d0JBQ2xCLHFCQUFxQjt3QkFDckIsd0JBQXdCO3dCQUN4Qix1QkFBdUI7cUJBQ3hCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUsIE1vZHVsZVdpdGhQcm92aWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBUYXNCdXR0b25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFzLWJ0bi90YXMtYnRuLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYXNWaWRlb2NhbGxDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFzLXZpZGVvY2FsbC90YXMtdmlkZW9jYWxsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYXNGbG9hdGluZ0NhbGxDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFzLWZsb2F0aW5nLWNhbGwvdGFzLWZsb2F0aW5nLWNhbGwuY29tcG9uZW50JztcbmltcG9ydCB7IFRhc1dhaXRpbmdSb29tQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Rhcy13YWl0aW5nLXJvb20vdGFzLXdhaXRpbmctcm9vbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFzU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdGFzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVEFTX0NPTkZJRywgVEFTX0hUVFBfQ0xJRU5ULCBUYXNDb25maWcsIFRhc0h0dHBDbGllbnQgfSBmcm9tICcuL2NvbmZpZy90YXMuY29uZmlnJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgVGFzQnV0dG9uQ29tcG9uZW50LFxuICAgIFRhc1ZpZGVvY2FsbENvbXBvbmVudCxcbiAgICBUYXNGbG9hdGluZ0NhbGxDb21wb25lbnQsXG4gICAgVGFzV2FpdGluZ1Jvb21Db21wb25lbnRcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIFRhc0J1dHRvbkNvbXBvbmVudCxcbiAgICBUYXNWaWRlb2NhbGxDb21wb25lbnQsXG4gICAgVGFzRmxvYXRpbmdDYWxsQ29tcG9uZW50LFxuICAgIFRhc1dhaXRpbmdSb29tQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgVGFzVWVsbFNka01vZHVsZSB7XG4gIC8qKlxuICAgKiBVc2UgZm9yUm9vdCgpIHRvIGNvbmZpZ3VyZSB0aGUgVEFTIFNESyBtb2R1bGUgd2l0aCByZXF1aXJlZCBkZXBlbmRlbmNpZXMuXG4gICAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UgaW4geW91ciByb290IEFwcE1vZHVsZS5cbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogaW1wb3J0IHsgVGFzVWVsbFNka01vZHVsZSwgVGFzSHR0cENsaWVudCB9IGZyb20gJ3Rhcy11ZWxsLXNkayc7XG4gICAqIFxuICAgKiAvLyBDcmVhdGUgYW4gYWRhcHRlciB0aGF0IGltcGxlbWVudHMgVGFzSHR0cENsaWVudFxuICAgKiBASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuICAgKiBleHBvcnQgY2xhc3MgTXlIdHRwQWRhcHRlciBpbXBsZW1lbnRzIFRhc0h0dHBDbGllbnQge1xuICAgKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cbiAgICogICBwb3N0PFQ+KHVybDogc3RyaW5nLCBvcHRpb25zOiB7IGJvZHk6IGFueTsgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfSk6IE9ic2VydmFibGU8VD4ge1xuICAgKiAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFQ+KHVybCwgb3B0aW9ucy5ib2R5LCB7IGhlYWRlcnM6IG9wdGlvbnMuaGVhZGVycyB9KTtcbiAgICogICB9XG4gICAqIH1cbiAgICogXG4gICAqIC8vIEluIHlvdXIgQXBwTW9kdWxlXG4gICAqIEBOZ01vZHVsZSh7XG4gICAqICAgaW1wb3J0czogW1xuICAgKiAgICAgVGFzVWVsbFNka01vZHVsZS5mb3JSb290KHtcbiAgICogICAgICAgY29uZmlnOiB7IHRva0JveEFwaUtleTogJ1lPVVJfVE9LQk9YX0FQSV9LRVknIH0sXG4gICAqICAgICAgIGh0dHBDbGllbnQ6IE15SHR0cEFkYXB0ZXJcbiAgICogICAgIH0pXG4gICAqICAgXVxuICAgKiB9KVxuICAgKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHsgfVxuICAgKiBgYGBcbiAgICovXG4gIHN0YXRpYyBmb3JSb290KG9wdGlvbnM6IHtcbiAgICBjb25maWc6IFRhc0NvbmZpZztcbiAgICBodHRwQ2xpZW50OiBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiBUYXNIdHRwQ2xpZW50O1xuICB9KTogTW9kdWxlV2l0aFByb3ZpZGVyczxUYXNVZWxsU2RrTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBUYXNVZWxsU2RrTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogVEFTX0NPTkZJRywgdXNlVmFsdWU6IG9wdGlvbnMuY29uZmlnIH0sXG4gICAgICAgIHsgcHJvdmlkZTogVEFTX0hUVFBfQ0xJRU5ULCB1c2VDbGFzczogb3B0aW9ucy5odHRwQ2xpZW50IH0sXG4gICAgICAgIFRhc1NlcnZpY2VcbiAgICAgIF1cbiAgICB9O1xuICB9XG59XG5cbiJdfQ==
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzLXVlbGwtc2RrLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3Rhcy11ZWxsLXNkay9zcmMvbGliL3Rhcy11ZWxsLXNkay5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUNuRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQTRCLE1BQU0scUJBQXFCLENBQUM7O0FBb0I1RixNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BNEJHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUdkO1FBQ0MsT0FBTztZQUNMLFFBQVEsRUFBRSxnQkFBZ0I7WUFDMUIsU0FBUyxFQUFFO2dCQUNULEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDakQsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFO2dCQUMxRCxVQUFVO2FBQ1g7U0FDRixDQUFDO0lBQ0osQ0FBQzs7NkdBMUNVLGdCQUFnQjs4R0FBaEIsZ0JBQWdCLGlCQWhCekIsa0JBQWtCO1FBQ2xCLHFCQUFxQjtRQUNyQix3QkFBd0I7UUFDeEIsdUJBQXVCLGFBR3ZCLFlBQVk7UUFDWixXQUFXLGFBR1gsa0JBQWtCO1FBQ2xCLHFCQUFxQjtRQUNyQix3QkFBd0I7UUFDeEIsdUJBQXVCOzhHQUdkLGdCQUFnQixZQVhsQjtZQUNQLFlBQVk7WUFDWixXQUFXO1NBQ1o7MkZBUVUsZ0JBQWdCO2tCQWxCNUIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osa0JBQWtCO3dCQUNsQixxQkFBcUI7d0JBQ3JCLHdCQUF3Qjt3QkFDeEIsdUJBQXVCO3FCQUN4QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3FCQUNaO29CQUNELE9BQU8sRUFBRTt3QkFDUCxrQkFBa0I7d0JBQ2xCLHFCQUFxQjt3QkFDckIsd0JBQXdCO3dCQUN4Qix1QkFBdUI7cUJBQ3hCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUsIE1vZHVsZVdpdGhQcm92aWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRhc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YXMtYnRuL3Rhcy1idG4uY29tcG9uZW50JztcbmltcG9ydCB7IFRhc1ZpZGVvY2FsbENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YXMtdmlkZW9jYWxsL3Rhcy12aWRlb2NhbGwuY29tcG9uZW50JztcbmltcG9ydCB7IFRhc0Zsb2F0aW5nQ2FsbENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YXMtZmxvYXRpbmctY2FsbC90YXMtZmxvYXRpbmctY2FsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFzV2FpdGluZ1Jvb21Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFzLXdhaXRpbmctcm9vbS90YXMtd2FpdGluZy1yb29tLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYXNTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy90YXMuc2VydmljZSc7XG5pbXBvcnQgeyBUQVNfQ09ORklHLCBUQVNfSFRUUF9DTElFTlQsIFRhc0NvbmZpZywgVGFzSHR0cENsaWVudCB9IGZyb20gJy4vY29uZmlnL3Rhcy5jb25maWcnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBUYXNCdXR0b25Db21wb25lbnQsXG4gICAgVGFzVmlkZW9jYWxsQ29tcG9uZW50LFxuICAgIFRhc0Zsb2F0aW5nQ2FsbENvbXBvbmVudCxcbiAgICBUYXNXYWl0aW5nUm9vbUNvbXBvbmVudFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgVGFzQnV0dG9uQ29tcG9uZW50LFxuICAgIFRhc1ZpZGVvY2FsbENvbXBvbmVudCxcbiAgICBUYXNGbG9hdGluZ0NhbGxDb21wb25lbnQsXG4gICAgVGFzV2FpdGluZ1Jvb21Db21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBUYXNVZWxsU2RrTW9kdWxlIHtcbiAgLyoqXG4gICAqIFVzZSBmb3JSb290KCkgdG8gY29uZmlndXJlIHRoZSBUQVMgU0RLIG1vZHVsZSB3aXRoIHJlcXVpcmVkIGRlcGVuZGVuY2llcy5cbiAgICogVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSBpbiB5b3VyIHJvb3QgQXBwTW9kdWxlLlxuICAgKiBcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBpbXBvcnQgeyBUYXNVZWxsU2RrTW9kdWxlLCBUYXNIdHRwQ2xpZW50IH0gZnJvbSAndGFzLXVlbGwtc2RrJztcbiAgICogXG4gICAqIC8vIENyZWF0ZSBhbiBhZGFwdGVyIHRoYXQgaW1wbGVtZW50cyBUYXNIdHRwQ2xpZW50XG4gICAqIEBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG4gICAqIGV4cG9ydCBjbGFzcyBNeUh0dHBBZGFwdGVyIGltcGxlbWVudHMgVGFzSHR0cENsaWVudCB7XG4gICAqICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxuICAgKiAgIHBvc3Q8VD4odXJsOiBzdHJpbmcsIG9wdGlvbnM6IHsgYm9keTogYW55OyBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAqICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8VD4odXJsLCBvcHRpb25zLmJvZHksIHsgaGVhZGVyczogb3B0aW9ucy5oZWFkZXJzIH0pO1xuICAgKiAgIH1cbiAgICogfVxuICAgKiBcbiAgICogLy8gSW4geW91ciBBcHBNb2R1bGVcbiAgICogQE5nTW9kdWxlKHtcbiAgICogICBpbXBvcnRzOiBbXG4gICAqICAgICBUYXNVZWxsU2RrTW9kdWxlLmZvclJvb3Qoe1xuICAgKiAgICAgICBjb25maWc6IHsgdG9rQm94QXBpS2V5OiAnWU9VUl9UT0tCT1hfQVBJX0tFWScgfSxcbiAgICogICAgICAgaHR0cENsaWVudDogTXlIdHRwQWRhcHRlclxuICAgKiAgICAgfSlcbiAgICogICBdXG4gICAqIH0pXG4gICAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUgeyB9XG4gICAqIGBgYFxuICAgKi9cbiAgc3RhdGljIGZvclJvb3Qob3B0aW9uczoge1xuICAgIGNvbmZpZzogVGFzQ29uZmlnO1xuICAgIGh0dHBDbGllbnQ6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFRhc0h0dHBDbGllbnQ7XG4gIH0pOiBNb2R1bGVXaXRoUHJvdmlkZXJzPFRhc1VlbGxTZGtNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IFRhc1VlbGxTZGtNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBUQVNfQ09ORklHLCB1c2VWYWx1ZTogb3B0aW9ucy5jb25maWcgfSxcbiAgICAgICAgeyBwcm92aWRlOiBUQVNfSFRUUF9DTElFTlQsIHVzZUNsYXNzOiBvcHRpb25zLmh0dHBDbGllbnQgfSxcbiAgICAgICAgVGFzU2VydmljZVxuICAgICAgXVxuICAgIH07XG4gIH1cbn1cblxuIl19