@hmcts/ccpay-web-component 5.0.1-beta142 → 5.0.1-beta143
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/hmcts-ccpay-web-component.umd.js +850 -105
- package/bundles/hmcts-ccpay-web-component.umd.js.map +1 -1
- package/bundles/hmcts-ccpay-web-component.umd.min.js +1 -1
- package/bundles/hmcts-ccpay-web-component.umd.min.js.map +1 -1
- package/esm2015/hmcts-ccpay-web-component.js +34 -33
- package/esm2015/lib/components/add-remission/add-remission.component.js +442 -41
- package/esm2015/lib/components/case-transactions/case-transactions.component.js +32 -4
- package/esm2015/lib/components/contact-details/contact-details.component.js +9 -2
- package/esm2015/lib/components/payment-view/payment-view.component.js +5 -2
- package/esm2015/lib/components/pba-payment/pba-payment.component.js +205 -0
- package/esm2015/lib/components/process-refund/process-refund.component.js +3 -3
- package/esm2015/lib/components/service-request/service-request.component.js +28 -9
- package/esm2015/lib/interfaces/IserviceRequestCardPayment.js +23 -0
- package/esm2015/lib/interfaces/IserviceRequestPbaPayment.js +28 -0
- package/esm2015/lib/interfaces/PostRefundRetroRemission.js +16 -4
- package/esm2015/lib/payment-lib.component.js +6 -4
- package/esm2015/lib/payment-lib.module.js +3 -3
- package/esm2015/lib/services/payment-view/payment-view.service.js +29 -1
- package/esm2015/lib/services/refunds/refunds.service.js +16 -3
- package/esm2015/lib/services/shared/httpclient/webcomponent.http.client.js +16 -3
- package/esm5/hmcts-ccpay-web-component.js +34 -33
- package/esm5/lib/components/add-remission/add-remission.component.js +531 -48
- package/esm5/lib/components/case-transactions/case-transactions.component.js +38 -4
- package/esm5/lib/components/contact-details/contact-details.component.js +9 -2
- package/esm5/lib/components/payment-view/payment-view.component.js +5 -2
- package/esm5/lib/components/pba-payment/pba-payment.component.js +222 -0
- package/esm5/lib/components/process-refund/process-refund.component.js +3 -3
- package/esm5/lib/components/service-request/service-request.component.js +32 -9
- package/esm5/lib/interfaces/IserviceRequestCardPayment.js +22 -0
- package/esm5/lib/interfaces/IserviceRequestPbaPayment.js +25 -0
- package/esm5/lib/interfaces/PostRefundRetroRemission.js +12 -3
- package/esm5/lib/payment-lib.component.js +4 -3
- package/esm5/lib/payment-lib.module.js +3 -3
- package/esm5/lib/services/payment-view/payment-view.service.js +42 -1
- package/esm5/lib/services/refunds/refunds.service.js +16 -3
- package/esm5/lib/services/shared/httpclient/webcomponent.http.client.js +16 -3
- package/fesm2015/hmcts-ccpay-web-component.js +727 -66
- package/fesm2015/hmcts-ccpay-web-component.js.map +1 -1
- package/fesm5/hmcts-ccpay-web-component.js +843 -71
- package/fesm5/hmcts-ccpay-web-component.js.map +1 -1
- package/hmcts-ccpay-web-component.d.ts +33 -32
- package/hmcts-ccpay-web-component.metadata.json +1 -1
- package/lib/components/add-remission/add-remission.component.d.ts +26 -2
- package/lib/components/case-transactions/case-transactions.component.d.ts +5 -0
- package/lib/components/contact-details/contact-details.component.d.ts +1 -0
- package/lib/components/payment-view/payment-view.component.d.ts +1 -0
- package/lib/components/pba-payment/pba-payment.component.d.ts +28 -0
- package/lib/components/process-refund/process-refund.component.d.ts +1 -1
- package/lib/components/service-request/service-request.component.d.ts +2 -0
- package/lib/interfaces/IserviceRequestCardPayment.d.ts +6 -0
- package/lib/interfaces/IserviceRequestPbaPayment.d.ts +7 -0
- package/lib/interfaces/PostRefundRetroRemission.d.ts +5 -2
- package/lib/payment-lib.component.d.ts +2 -0
- package/lib/services/payment-view/payment-view.service.d.ts +5 -0
- package/package.json +1 -1
|
@@ -16,6 +16,8 @@ import { ChangeDetectorRef } from '@angular/core';
|
|
|
16
16
|
import { OrderslistService } from '../../services/orderslist.service';
|
|
17
17
|
/** @type {?} */
|
|
18
18
|
const BS_ENABLE_FLAG = 'bulk-scan-enabling-fe';
|
|
19
|
+
/** @type {?} */
|
|
20
|
+
const resolvedPromise = Promise.resolve(null);
|
|
19
21
|
export class AddRemissionComponent {
|
|
20
22
|
/**
|
|
21
23
|
* @param {?} formBuilder
|
|
@@ -66,11 +68,15 @@ export class AddRemissionComponent {
|
|
|
66
68
|
this.isRemissionApplied = false;
|
|
67
69
|
// refundReasons: any[] = [];
|
|
68
70
|
this.commonRefundReasons = [];
|
|
71
|
+
this.class = '';
|
|
72
|
+
this.errorMsg = new Array();
|
|
69
73
|
}
|
|
70
74
|
/**
|
|
71
75
|
* @return {?}
|
|
72
76
|
*/
|
|
73
77
|
ngOnInit() {
|
|
78
|
+
this.errorMessage = '';
|
|
79
|
+
this.errorMsg = [];
|
|
74
80
|
this.default = 'Select a different reason';
|
|
75
81
|
this.pattern1 = '^([a-zA-Z0-9]{3})-([a-zA-Z0-9]{3})-([a-zA-Z0-9]{3})$';
|
|
76
82
|
this.pattern2 = '^([A-Za-z]{2}[0-9]{2})-([0-9]{6})$';
|
|
@@ -83,6 +89,7 @@ export class AddRemissionComponent {
|
|
|
83
89
|
this.amount = (this.fee.volume * this.fee.calculated_amount);
|
|
84
90
|
}
|
|
85
91
|
if (this.payment) {
|
|
92
|
+
this.paymentReference = this.payment.reference;
|
|
86
93
|
this.remessionPayment = this.payment;
|
|
87
94
|
if (this.payment.status === 'Success') {
|
|
88
95
|
this.isPaymentSuccess = true;
|
|
@@ -101,15 +108,68 @@ export class AddRemissionComponent {
|
|
|
101
108
|
])),
|
|
102
109
|
refundReason: new FormControl('', Validators.compose([Validators.required])),
|
|
103
110
|
refundDDReason: new FormControl('', Validators.compose([Validators.required])),
|
|
104
|
-
reason: new FormControl()
|
|
111
|
+
reason: new FormControl(),
|
|
112
|
+
feeAmount: new FormControl(),
|
|
113
|
+
feesList: this.formBuilder.array([])
|
|
105
114
|
});
|
|
106
115
|
/** @type {?} */
|
|
107
116
|
const remissionctrls = this.remissionForm.controls;
|
|
108
117
|
remissionctrls['refundDDReason'].setValue('Select a different reason', { onlySelf: true });
|
|
118
|
+
if (this.isFromServiceRequestPage) {
|
|
119
|
+
this.paymentViewService.getApportionPaymentDetails(this.paymentLibComponent.paymentReference).subscribe((/**
|
|
120
|
+
* @param {?} paymentGroup
|
|
121
|
+
* @return {?}
|
|
122
|
+
*/
|
|
123
|
+
paymentGroup => {
|
|
124
|
+
/** @type {?} */
|
|
125
|
+
let fees = [];
|
|
126
|
+
paymentGroup.fees.forEach((/**
|
|
127
|
+
* @param {?} fee
|
|
128
|
+
* @return {?}
|
|
129
|
+
*/
|
|
130
|
+
fee => {
|
|
131
|
+
this.isRemissionsMatch = false;
|
|
132
|
+
paymentGroup.remissions.forEach((/**
|
|
133
|
+
* @param {?} rem
|
|
134
|
+
* @return {?}
|
|
135
|
+
*/
|
|
136
|
+
rem => {
|
|
137
|
+
if (rem.fee_code === fee.code) {
|
|
138
|
+
this.isRemissionsMatch = true;
|
|
139
|
+
fee['remissions'] = rem;
|
|
140
|
+
fees.push(fee);
|
|
141
|
+
}
|
|
142
|
+
}));
|
|
143
|
+
if (!this.isRemissionsMatch) {
|
|
144
|
+
fees.push(fee);
|
|
145
|
+
}
|
|
146
|
+
}));
|
|
147
|
+
paymentGroup.fees = fees;
|
|
148
|
+
this.paymentFees = fees;
|
|
149
|
+
this.fees = fees;
|
|
150
|
+
this.paymentGroup = paymentGroup;
|
|
151
|
+
this.paymentGroup.payments = this.paymentGroup.payments.filter((/**
|
|
152
|
+
* @param {?} paymentGroupObj
|
|
153
|
+
* @return {?}
|
|
154
|
+
*/
|
|
155
|
+
paymentGroupObj => paymentGroupObj['reference'].includes(this.paymentLibComponent.paymentReference)));
|
|
156
|
+
/** @type {?} */
|
|
157
|
+
const paymentAllocation = this.paymentGroup.payments[0].payment_allocation;
|
|
158
|
+
this.isStatusAllocated = paymentAllocation.length > 0 && paymentAllocation[0].allocation_status === 'Allocated' || paymentAllocation.length === 0;
|
|
159
|
+
this.refundFeesList();
|
|
160
|
+
}), (/**
|
|
161
|
+
* @param {?} error
|
|
162
|
+
* @return {?}
|
|
163
|
+
*/
|
|
164
|
+
(error) => this.errorMessage = error));
|
|
165
|
+
}
|
|
166
|
+
if (this.fees && this.viewCompStatus === 'issuerefund') {
|
|
167
|
+
this.refundFeesList();
|
|
168
|
+
}
|
|
109
169
|
if (this.viewCompStatus === '') {
|
|
110
170
|
this.viewStatus = 'main';
|
|
111
171
|
}
|
|
112
|
-
if (this.viewCompStatus === '
|
|
172
|
+
if (this.viewCompStatus === 'issuerefundpage1') {
|
|
113
173
|
this.refundService.getRefundReasons().subscribe((/**
|
|
114
174
|
* @param {?} refundReasons
|
|
115
175
|
* @return {?}
|
|
@@ -143,6 +203,115 @@ export class AddRemissionComponent {
|
|
|
143
203
|
if (this.viewCompStatus === 'processretroremissonpage' && this.isFromRefundListPage) {
|
|
144
204
|
this.viewStatus = 'processretroremissonpage';
|
|
145
205
|
}
|
|
206
|
+
if (this.orderDetail !== undefined) {
|
|
207
|
+
this.fees = this.orderDetail[0].fees;
|
|
208
|
+
this.paymentReference = this.orderDetail[0].payments[0].reference;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* @return {?}
|
|
213
|
+
*/
|
|
214
|
+
refundFeesList() {
|
|
215
|
+
/** @type {?} */
|
|
216
|
+
const creds = (/** @type {?} */ (this.remissionForm.controls.feesList));
|
|
217
|
+
for (var i = 0; i < this.fees.length; i++) {
|
|
218
|
+
creds.push(this.formBuilder.group({
|
|
219
|
+
id: this.fees[i].id,
|
|
220
|
+
code: this.fees[i].code,
|
|
221
|
+
volume: this.fees[i].volume,
|
|
222
|
+
calculated_amount: this.fees[i].calculated_amount,
|
|
223
|
+
apportion_amount: this.fees[i].apportion_amount,
|
|
224
|
+
ccd_case_number: this.fees[i].ccd_case_number,
|
|
225
|
+
description: this.fees[i].description,
|
|
226
|
+
net_amount: this.fees[i].net_amount,
|
|
227
|
+
version: this.fees[i].version,
|
|
228
|
+
amounttorefund: [''],
|
|
229
|
+
selected: [''],
|
|
230
|
+
updatedVolume: ''
|
|
231
|
+
}));
|
|
232
|
+
}
|
|
233
|
+
this.cd.detectChanges();
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* @return {?}
|
|
237
|
+
*/
|
|
238
|
+
get feesList() {
|
|
239
|
+
/** @type {?} */
|
|
240
|
+
const dd = (/** @type {?} */ (this.remissionForm.get('feesList')));
|
|
241
|
+
return (/** @type {?} */ (this.remissionForm.get('feesList')));
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* @return {?}
|
|
245
|
+
*/
|
|
246
|
+
noneSelected() {
|
|
247
|
+
if (!this.feesList.controls.some((/**
|
|
248
|
+
* @param {?} item
|
|
249
|
+
* @return {?}
|
|
250
|
+
*/
|
|
251
|
+
item => item.get('selected').value === true))) {
|
|
252
|
+
this.errorMsg = [];
|
|
253
|
+
[].forEach.call(document.querySelectorAll('input'), (/**
|
|
254
|
+
* @param {?} el
|
|
255
|
+
* @return {?}
|
|
256
|
+
*/
|
|
257
|
+
function (el) {
|
|
258
|
+
el.classList.remove('inline-error-class');
|
|
259
|
+
}));
|
|
260
|
+
}
|
|
261
|
+
return !this.feesList.controls.some((/**
|
|
262
|
+
* @param {?} item
|
|
263
|
+
* @return {?}
|
|
264
|
+
*/
|
|
265
|
+
item => item.get('selected').value === true));
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* @param {?} i
|
|
269
|
+
* @param {?} v1
|
|
270
|
+
* @param {?} AppAmt
|
|
271
|
+
* @param {?} Volume
|
|
272
|
+
* @return {?}
|
|
273
|
+
*/
|
|
274
|
+
check_en(i, v1, AppAmt, Volume) {
|
|
275
|
+
/** @type {?} */
|
|
276
|
+
const ele = (/** @type {?} */ (document.getElementById(v1)));
|
|
277
|
+
/** @type {?} */
|
|
278
|
+
const formArray = (/** @type {?} */ (this.remissionForm.controls.feesList));
|
|
279
|
+
if (ele.checked) {
|
|
280
|
+
formArray.at(i).get('amounttorefund').setValue(AppAmt);
|
|
281
|
+
formArray.at(i).get('volume').setValue(Volume);
|
|
282
|
+
formArray.at(i).get('selected').setValue(true);
|
|
283
|
+
formArray.at(i).get('updatedVolume').setValue(Volume);
|
|
284
|
+
((/** @type {?} */ (document.getElementById('feeAmount_' + v1)))).value = AppAmt;
|
|
285
|
+
document.getElementById('feeAmount_' + v1).removeAttribute("disabled");
|
|
286
|
+
if (Volume === 1) {
|
|
287
|
+
((/** @type {?} */ (document.getElementById('VolumeUpdated_' + v1)))).value = Volume;
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
((/** @type {?} */ (document.getElementById('feeVolumeUpdated_' + v1)))).value = Volume;
|
|
291
|
+
}
|
|
292
|
+
if (document.getElementById('feeVolumeUpdated_' + v1) !== null) {
|
|
293
|
+
document.getElementById('feeAmount_' + v1).removeAttribute("disabled");
|
|
294
|
+
document.getElementById('feeVolumeUpdated_' + v1).removeAttribute("disabled");
|
|
295
|
+
}
|
|
296
|
+
// this.remissionForm.value.feesList.find(x=>x=v1)['amounttorefund'] = AppAmt;
|
|
297
|
+
this.cd.detectChanges();
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
this.errorMsg = [];
|
|
301
|
+
document.getElementById('feeAmount_' + v1).setAttribute("disabled", "true");
|
|
302
|
+
this.remissionForm.value.feesList[i]["amounttorefund"] = '';
|
|
303
|
+
this.remissionForm.value.feesList[i]["volume"] = '';
|
|
304
|
+
this.remissionForm.value.feesList[i]["selected"] = false;
|
|
305
|
+
((/** @type {?} */ (document.getElementById('feeAmount_' + v1)))).value = '';
|
|
306
|
+
if (Volume > 1) {
|
|
307
|
+
this.remissionForm.value.feesList[i]["volume"] = '';
|
|
308
|
+
((/** @type {?} */ (document.getElementById('feeVolumeUpdated_' + v1)))).value = '';
|
|
309
|
+
}
|
|
310
|
+
if (document.getElementById('feeVolumeUpdated_' + v1) !== null) {
|
|
311
|
+
document.getElementById('feeVolumeUpdated_' + v1).removeAttribute("disabled");
|
|
312
|
+
}
|
|
313
|
+
this.cd.detectChanges();
|
|
314
|
+
}
|
|
146
315
|
}
|
|
147
316
|
/**
|
|
148
317
|
* @return {?}
|
|
@@ -252,6 +421,8 @@ export class AddRemissionComponent {
|
|
|
252
421
|
*/
|
|
253
422
|
addRemissionCode() {
|
|
254
423
|
this.errorMessage = false;
|
|
424
|
+
this.isFromCheckAnsPage = true;
|
|
425
|
+
this.errorMsg = [];
|
|
255
426
|
this.viewStatus = '';
|
|
256
427
|
this.isRefundRemission = false;
|
|
257
428
|
this.resetRemissionForm([false, false, false, false, false, false], 'All');
|
|
@@ -293,6 +464,8 @@ export class AddRemissionComponent {
|
|
|
293
464
|
*/
|
|
294
465
|
gotoAddRetroRemissionCodePage() {
|
|
295
466
|
this.errorMessage = false;
|
|
467
|
+
this.isFromCheckAnsPage = false;
|
|
468
|
+
this.errorMsg = [];
|
|
296
469
|
if (this.isRefundRemission) {
|
|
297
470
|
this.paymentLibComponent.iscancelClicked = true;
|
|
298
471
|
this.refundListAmount.emit();
|
|
@@ -310,6 +483,7 @@ export class AddRemissionComponent {
|
|
|
310
483
|
this.viewCompStatus = "addremission";
|
|
311
484
|
this.isRefundRemission = true;
|
|
312
485
|
this.errorMessage = '';
|
|
486
|
+
this.errorMsg = [];
|
|
313
487
|
if (this.isFromPaymentDetailPage) {
|
|
314
488
|
this.paymentLibComponent.viewName = 'payment-view';
|
|
315
489
|
}
|
|
@@ -362,6 +536,7 @@ export class AddRemissionComponent {
|
|
|
362
536
|
* @return {?}
|
|
363
537
|
*/
|
|
364
538
|
gotoAmountRetroRemission() {
|
|
539
|
+
this.isFromCheckAnsPage = false;
|
|
365
540
|
this.viewStatus = 'processretroremissonpage';
|
|
366
541
|
this.viewCompStatus = '';
|
|
367
542
|
this.isRefundRemission = true;
|
|
@@ -371,10 +546,12 @@ export class AddRemissionComponent {
|
|
|
371
546
|
* @return {?}
|
|
372
547
|
*/
|
|
373
548
|
gotoProcessRetroRemissionPage() {
|
|
549
|
+
this.isFromCheckAnsPage = true;
|
|
374
550
|
this.viewStatus = '';
|
|
375
551
|
this.viewCompStatus = 'addremission';
|
|
376
552
|
this.isRefundRemission = true;
|
|
377
553
|
this.errorMessage = '';
|
|
554
|
+
this.errorMsg = [];
|
|
378
555
|
}
|
|
379
556
|
/**
|
|
380
557
|
* @param {?=} note
|
|
@@ -384,6 +561,7 @@ export class AddRemissionComponent {
|
|
|
384
561
|
if (note) {
|
|
385
562
|
this.notification = { contact_details: note, notification_type: note.notification_type };
|
|
386
563
|
}
|
|
564
|
+
this.isFromCheckAnsPage = true;
|
|
387
565
|
this.viewStatus = 'remissionAddressPage';
|
|
388
566
|
this.viewCompStatus = '';
|
|
389
567
|
this.isRefundRemission = true;
|
|
@@ -425,6 +603,7 @@ export class AddRemissionComponent {
|
|
|
425
603
|
*/
|
|
426
604
|
processRefund() {
|
|
427
605
|
this.errorMessage = '';
|
|
606
|
+
this.errorMsg = [];
|
|
428
607
|
this.isConfirmationBtnDisabled = true;
|
|
429
608
|
if (this.isRefundRemission) {
|
|
430
609
|
this.retroRemission = true;
|
|
@@ -460,11 +639,30 @@ export class AddRemissionComponent {
|
|
|
460
639
|
* @return {?}
|
|
461
640
|
*/
|
|
462
641
|
gotoIssueRefundConfirmation(payment) {
|
|
642
|
+
if (this.isFromCheckAnsPage) {
|
|
643
|
+
this.totalRefundAmount = this.remissionForm.value.feesList.reduce((/**
|
|
644
|
+
* @param {?} a
|
|
645
|
+
* @param {?} c
|
|
646
|
+
* @return {?}
|
|
647
|
+
*/
|
|
648
|
+
(a, c) => a + c.amounttorefund * c.selected), 0);
|
|
649
|
+
this.isFromCheckAnsPage = false;
|
|
650
|
+
this.viewStatus = 'checkissuerefundpage';
|
|
651
|
+
this.viewCompStatus = '';
|
|
652
|
+
return;
|
|
653
|
+
}
|
|
463
654
|
this.paymentLibComponent.iscancelClicked = false;
|
|
464
655
|
if (this.paymentLibComponent.REFUNDLIST === "true") {
|
|
465
656
|
this.isFromRefundListPage = true;
|
|
466
657
|
}
|
|
658
|
+
this.totalRefundAmount = this.remissionForm.value.feesList.reduce((/**
|
|
659
|
+
* @param {?} a
|
|
660
|
+
* @param {?} c
|
|
661
|
+
* @return {?}
|
|
662
|
+
*/
|
|
663
|
+
(a, c) => a + c.amounttorefund * c.selected), 0);
|
|
467
664
|
this.errorMessage = '';
|
|
665
|
+
this.errorMsg = [];
|
|
468
666
|
this.refundReason = this.remissionForm.controls['refundReason'].value === null ? this.remissionForm.controls['refundDDReason'].value : this.remissionForm.controls['refundReason'].value;
|
|
469
667
|
if (!this.refundReason || this.refundReason === 'Select a different reason') {
|
|
470
668
|
this.refundHasError = true;
|
|
@@ -505,9 +703,123 @@ export class AddRemissionComponent {
|
|
|
505
703
|
this.viewStatus = '';
|
|
506
704
|
this.isRefundRemission = true;
|
|
507
705
|
this.errorMessage = false;
|
|
706
|
+
this.errorMsg = [];
|
|
508
707
|
this.refundHasError = false;
|
|
509
708
|
this.isReasonEmpty = false;
|
|
510
709
|
}
|
|
710
|
+
/**
|
|
711
|
+
* @return {?}
|
|
712
|
+
*/
|
|
713
|
+
gotoIssuePage() {
|
|
714
|
+
[].forEach.call(document.querySelectorAll('input'), (/**
|
|
715
|
+
* @param {?} el
|
|
716
|
+
* @return {?}
|
|
717
|
+
*/
|
|
718
|
+
function (el) {
|
|
719
|
+
el.classList.remove('inline-error-class');
|
|
720
|
+
}));
|
|
721
|
+
/** @type {?} */
|
|
722
|
+
var checkboxs = document.getElementsByTagName('input');
|
|
723
|
+
this.errorMessage = '';
|
|
724
|
+
this.totalRefundAmount = 0;
|
|
725
|
+
this.errorMsg = [];
|
|
726
|
+
for (var j = 0; j < checkboxs.length; j++) {
|
|
727
|
+
if (checkboxs[j].checked) {
|
|
728
|
+
this.fullRefund = false;
|
|
729
|
+
/** @type {?} */
|
|
730
|
+
let quantity = +((/** @type {?} */ (document.getElementById('feeVolume_' + checkboxs[j].value)))).value;
|
|
731
|
+
/** @type {?} */
|
|
732
|
+
let amountToRefund = +((/** @type {?} */ (document.getElementById('feeAmount_' + checkboxs[j].value)))).value;
|
|
733
|
+
/** @type {?} */
|
|
734
|
+
let apportionAmount = +((/** @type {?} */ (document.getElementById('feeApportionAmount_' + checkboxs[j].value)))).value;
|
|
735
|
+
/** @type {?} */
|
|
736
|
+
let calculatedAmount = +((/** @type {?} */ (document.getElementById('calculatedAmount_' + checkboxs[j].value)))).value;
|
|
737
|
+
if (amountToRefund === apportionAmount) {
|
|
738
|
+
this.fullRefund = true;
|
|
739
|
+
}
|
|
740
|
+
if (amountToRefund === 0) {
|
|
741
|
+
this.elementId = 'feeAmount_' + checkboxs[j].value;
|
|
742
|
+
this.errorMsg.push('You need to enter a refund amount');
|
|
743
|
+
this.getErrorClass(this.elementId);
|
|
744
|
+
}
|
|
745
|
+
if (quantity === 1) {
|
|
746
|
+
if (amountToRefund > 0 && amountToRefund > apportionAmount) {
|
|
747
|
+
this.elementId = 'feeAmount_' + checkboxs[j].value;
|
|
748
|
+
this.errorMsg.push('The amount you want to refund is more than the amount paid');
|
|
749
|
+
this.getErrorClass(this.elementId);
|
|
750
|
+
}
|
|
751
|
+
}
|
|
752
|
+
if (quantity > 1) {
|
|
753
|
+
this.quantityUpdated = +((/** @type {?} */ (document.getElementById('feeVolumeUpdated_' + checkboxs[j].value)))).value;
|
|
754
|
+
if (this.quantityUpdated === 0) {
|
|
755
|
+
this.elementId = 'feeVolumeUpdated_' + checkboxs[j].value;
|
|
756
|
+
this.errorMsg.push('You need to enter quantity');
|
|
757
|
+
this.getErrorClass(this.elementId);
|
|
758
|
+
}
|
|
759
|
+
if (this.fullRefund && quantity !== this.quantityUpdated) {
|
|
760
|
+
this.elementId = 'feeVolumeUpdated_' + checkboxs[j].value;
|
|
761
|
+
this.errorMsg.push('The quantity you want to refund should be maximun available quantity');
|
|
762
|
+
this.getErrorClass(this.elementId);
|
|
763
|
+
}
|
|
764
|
+
if (!this.fullRefund && this.quantityUpdated > 0 && amountToRefund > 0) {
|
|
765
|
+
this.refundAmtForFeeVolumes = +((/** @type {?} */ (document.getElementById('feeVOl_' + checkboxs[j].value)))).innerText;
|
|
766
|
+
this.allowedRefundAmount = this.quantityUpdated * this.refundAmtForFeeVolumes;
|
|
767
|
+
if (this.allowedRefundAmount !== amountToRefund) {
|
|
768
|
+
this.elementId = 'feeAmount_' + checkboxs[j].value;
|
|
769
|
+
this.errorMsg.push('The Amount to Refund should be equal to the product of Fee Amount and quantity');
|
|
770
|
+
this.getErrorClass(this.elementId);
|
|
771
|
+
}
|
|
772
|
+
}
|
|
773
|
+
if (!this.fullRefund && amountToRefund > apportionAmount) {
|
|
774
|
+
this.elementId = 'feeAmount_' + checkboxs[j].value;
|
|
775
|
+
this.errorMsg.push('The amount you want to refund is more than the amount paid');
|
|
776
|
+
this.getErrorClass(this.elementId);
|
|
777
|
+
}
|
|
778
|
+
if (!this.fullRefund && this.quantityUpdated > 0 && this.quantityUpdated > quantity) {
|
|
779
|
+
this.elementId = 'feeVolumeUpdated_' + checkboxs[j].value;
|
|
780
|
+
this.errorMsg.push('The quantity you want to refund is more than the available quantity');
|
|
781
|
+
this.getErrorClass(this.elementId);
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
//this.remissionForm.value.feesList.find(id=>id=checkboxs[j].value)['amounttorefund'] = apportionAmount;
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
if (this.errorMsg.length === 0) {
|
|
788
|
+
if (this.isFromCheckAnsPage) {
|
|
789
|
+
this.isFromCheckAnsPage = false;
|
|
790
|
+
this.totalRefundAmount = this.remissionForm.value.feesList.reduce((/**
|
|
791
|
+
* @param {?} a
|
|
792
|
+
* @param {?} c
|
|
793
|
+
* @return {?}
|
|
794
|
+
*/
|
|
795
|
+
(a, c) => a + c.amounttorefund * c.selected), 0);
|
|
796
|
+
this.viewStatus = 'checkissuerefundpage';
|
|
797
|
+
this.viewCompStatus = '';
|
|
798
|
+
return;
|
|
799
|
+
}
|
|
800
|
+
this.viewCompStatus = 'issuerefundpage1';
|
|
801
|
+
this.getRefundReasons();
|
|
802
|
+
}
|
|
803
|
+
}
|
|
804
|
+
/**
|
|
805
|
+
* @param {?} value
|
|
806
|
+
* @param {?} amount
|
|
807
|
+
* @param {?} volume
|
|
808
|
+
* @param {?} i
|
|
809
|
+
* @return {?}
|
|
810
|
+
*/
|
|
811
|
+
calAmtToRefund(value, amount, volume, i) {
|
|
812
|
+
/** @type {?} */
|
|
813
|
+
const volumeFee = amount / volume;
|
|
814
|
+
/** @type {?} */
|
|
815
|
+
const amtToRefund = value * volumeFee;
|
|
816
|
+
/** @type {?} */
|
|
817
|
+
const formArray = (/** @type {?} */ (this.remissionForm.controls.feesList));
|
|
818
|
+
formArray.at(i).get('amounttorefund').setValue(amtToRefund);
|
|
819
|
+
// (<HTMLInputElement>document.getElementById('feeAmount_'+i)).value = +amtToRefund;
|
|
820
|
+
// const formControl = this.remissionForm.controls.feesList['amounttorefund'].at(index);
|
|
821
|
+
// formControl.setValue(amtToRefund);
|
|
822
|
+
}
|
|
511
823
|
/**
|
|
512
824
|
* @param {?=} note
|
|
513
825
|
* @return {?}
|
|
@@ -522,15 +834,63 @@ export class AddRemissionComponent {
|
|
|
522
834
|
this.isRefundRemission = true;
|
|
523
835
|
this.errorMessage = false;
|
|
524
836
|
}
|
|
837
|
+
/**
|
|
838
|
+
* @return {?}
|
|
839
|
+
*/
|
|
840
|
+
getRefundReasons() {
|
|
841
|
+
if (this.viewCompStatus === 'issuerefundpage1') {
|
|
842
|
+
this.refundService.getRefundReasons().subscribe((/**
|
|
843
|
+
* @param {?} refundReasons
|
|
844
|
+
* @return {?}
|
|
845
|
+
*/
|
|
846
|
+
refundReasons => {
|
|
847
|
+
this.refundReasons = refundReasons.filter((/**
|
|
848
|
+
* @param {?} data
|
|
849
|
+
* @return {?}
|
|
850
|
+
*/
|
|
851
|
+
(data) => data.recently_used === false));
|
|
852
|
+
this.refundReasons = this.refundReasons.filter((/**
|
|
853
|
+
* @param {?} data
|
|
854
|
+
* @return {?}
|
|
855
|
+
*/
|
|
856
|
+
(data) => data.name !== 'Retrospective remission'));
|
|
857
|
+
this.cd.detectChanges();
|
|
858
|
+
this.commonRefundReasons = refundReasons.filter((/**
|
|
859
|
+
* @param {?} data
|
|
860
|
+
* @return {?}
|
|
861
|
+
*/
|
|
862
|
+
(data) => data.recently_used === true));
|
|
863
|
+
this.commonRefundReasons.sort((/**
|
|
864
|
+
* @param {?} a
|
|
865
|
+
* @param {?} b
|
|
866
|
+
* @return {?}
|
|
867
|
+
*/
|
|
868
|
+
(a, b) => a.toString().localeCompare(b)));
|
|
869
|
+
this.cd.detectChanges();
|
|
870
|
+
}));
|
|
871
|
+
}
|
|
872
|
+
}
|
|
873
|
+
/**
|
|
874
|
+
* @param {?} elementId
|
|
875
|
+
* @return {?}
|
|
876
|
+
*/
|
|
877
|
+
getErrorClass(elementId) {
|
|
878
|
+
if (this.errorMsg.length > 0) {
|
|
879
|
+
/** @type {?} */
|
|
880
|
+
const ele = document.getElementById(elementId);
|
|
881
|
+
ele.classList.add('inline-error-class');
|
|
882
|
+
}
|
|
883
|
+
}
|
|
525
884
|
/**
|
|
526
885
|
* @return {?}
|
|
527
886
|
*/
|
|
528
887
|
changeIssueRefundReason() {
|
|
529
|
-
|
|
888
|
+
this.isFromCheckAnsPage = true;
|
|
530
889
|
this.errorMessage = '';
|
|
890
|
+
this.errorMsg = [];
|
|
531
891
|
this.refundHasError = false;
|
|
532
892
|
this.isReasonEmpty = false;
|
|
533
|
-
this.viewCompStatus = '
|
|
893
|
+
this.viewCompStatus = 'issuerefundpage1';
|
|
534
894
|
this.viewStatus = '';
|
|
535
895
|
this.isRefundRemission = true;
|
|
536
896
|
}
|
|
@@ -540,11 +900,17 @@ export class AddRemissionComponent {
|
|
|
540
900
|
confirmIssueRefund() {
|
|
541
901
|
this.isConfirmationBtnDisabled = true;
|
|
542
902
|
this.errorMessage = '';
|
|
903
|
+
this.errorMsg = [];
|
|
543
904
|
if (this.isRefundRemission) {
|
|
544
905
|
this.retroRemission = true;
|
|
545
906
|
}
|
|
907
|
+
this.fees = this.remissionForm.value.feesList.filter((/**
|
|
908
|
+
* @param {?} value
|
|
909
|
+
* @return {?}
|
|
910
|
+
*/
|
|
911
|
+
value => value.selected === true));
|
|
546
912
|
/** @type {?} */
|
|
547
|
-
const requestBody = new PostRefundRetroRemission(this.payment.reference, this.refundReason, this.contactDetailsObj);
|
|
913
|
+
const requestBody = new PostRefundRetroRemission(this.ccdCaseNumber, this.payment.reference, this.refundReason, this.totalRefundAmount, this.fees, this.contactDetailsObj);
|
|
548
914
|
this.paymentViewService.postRefundsReason(requestBody).subscribe((/**
|
|
549
915
|
* @param {?} response
|
|
550
916
|
* @return {?}
|
|
@@ -569,39 +935,30 @@ export class AddRemissionComponent {
|
|
|
569
935
|
}));
|
|
570
936
|
}
|
|
571
937
|
// Retro Refund
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
}), (/**
|
|
597
|
-
* @param {?} error
|
|
598
|
-
* @return {?}
|
|
599
|
-
*/
|
|
600
|
-
(error) => {
|
|
601
|
-
this.errorMessage = error;
|
|
602
|
-
this.isConfirmationBtnDisabled = false;
|
|
603
|
-
}));
|
|
604
|
-
}
|
|
938
|
+
// confirmRetroRefund() {
|
|
939
|
+
// this.isConfirmationBtnDisabled = true;
|
|
940
|
+
// this.errorMessage = '';
|
|
941
|
+
// this.errorMsg = [];
|
|
942
|
+
// if( this.isRefundRemission) {
|
|
943
|
+
// this.retroRemission = true;
|
|
944
|
+
// }
|
|
945
|
+
// const requestBody = new PostRefundRetroRemission(this.payment.reference,'RR004-Retrospective remission', this.contactDetailsObj);
|
|
946
|
+
// this.paymentViewService.postRefundsReason(requestBody).subscribe(
|
|
947
|
+
// response => {
|
|
948
|
+
// if (JSON.parse(response)) {
|
|
949
|
+
// this.viewCompStatus = '';
|
|
950
|
+
// this.viewStatus = 'retrorefundconfirmationpage';
|
|
951
|
+
// this.refundReference =JSON.parse(response).refund_reference;
|
|
952
|
+
// if(JSON.parse(response).refund_amount) {
|
|
953
|
+
// this.refundAmount = JSON.parse(response).refund_amount;
|
|
954
|
+
// }
|
|
955
|
+
// }
|
|
956
|
+
// },
|
|
957
|
+
// (error: any) => {
|
|
958
|
+
// this.errorMessage = error;
|
|
959
|
+
// this.isConfirmationBtnDisabled = false;
|
|
960
|
+
// });
|
|
961
|
+
// }
|
|
605
962
|
/**
|
|
606
963
|
* @param {?} key
|
|
607
964
|
* @param {?} value
|
|
@@ -615,6 +972,7 @@ export class AddRemissionComponent {
|
|
|
615
972
|
remissionctrls['reason'].reset();
|
|
616
973
|
this.isRefundReasonsSelected = true;
|
|
617
974
|
this.errorMessage = false;
|
|
975
|
+
this.errorMsg = [];
|
|
618
976
|
this.isReasonEmpty = false;
|
|
619
977
|
this.showReasonText = false;
|
|
620
978
|
this.refundHasError = false;
|
|
@@ -661,6 +1019,8 @@ export class AddRemissionComponent {
|
|
|
661
1019
|
*/
|
|
662
1020
|
gotoServiceRequestPage(event) {
|
|
663
1021
|
this.errorMessage = '';
|
|
1022
|
+
this.errorMsg = [];
|
|
1023
|
+
this.isFromCheckAnsPage = false;
|
|
664
1024
|
event.preventDefault();
|
|
665
1025
|
if (this.isFromServiceRequestPage && !this.isFromPaymentDetailPage) {
|
|
666
1026
|
this.viewStatus = 'order-full-view';
|
|
@@ -791,6 +1151,7 @@ export class AddRemissionComponent {
|
|
|
791
1151
|
gotoCasetransationPage() {
|
|
792
1152
|
this.OrderslistService.setnavigationPage('casetransactions');
|
|
793
1153
|
this.errorMessage = '';
|
|
1154
|
+
this.errorMsg = [];
|
|
794
1155
|
this.paymentLibComponent.viewName = 'case-transactions';
|
|
795
1156
|
this.paymentLibComponent.VIEW = 'case-transactions';
|
|
796
1157
|
this.paymentLibComponent.ISTURNOFF = this.isTurnOff;
|
|
@@ -821,6 +1182,7 @@ export class AddRemissionComponent {
|
|
|
821
1182
|
*/
|
|
822
1183
|
gotoCasetransationPageCancelBtnClicked(event) {
|
|
823
1184
|
event.preventDefault();
|
|
1185
|
+
this.errorMsg = [];
|
|
824
1186
|
if (!this.paymentLibComponent.isFromServiceRequestPage) {
|
|
825
1187
|
this.OrderslistService.setnavigationPage('casetransactions');
|
|
826
1188
|
this.OrderslistService.setisFromServiceRequestPage(false);
|
|
@@ -910,6 +1272,14 @@ export class AddRemissionComponent {
|
|
|
910
1272
|
this.OrderslistService.setorderRemissionTotal(null);
|
|
911
1273
|
this.OrderslistService.setorderFeesTotal(null);
|
|
912
1274
|
}
|
|
1275
|
+
/**
|
|
1276
|
+
* @return {?}
|
|
1277
|
+
*/
|
|
1278
|
+
changeRefundAmount() {
|
|
1279
|
+
this.isFromCheckAnsPage = true;
|
|
1280
|
+
this.viewCompStatus = 'issuerefund';
|
|
1281
|
+
this.viewStatus = '';
|
|
1282
|
+
}
|
|
913
1283
|
/**
|
|
914
1284
|
* @param {?} currency
|
|
915
1285
|
* @return {?}
|
|
@@ -924,8 +1294,8 @@ export class AddRemissionComponent {
|
|
|
924
1294
|
AddRemissionComponent.decorators = [
|
|
925
1295
|
{ type: Component, args: [{
|
|
926
1296
|
selector: 'ccpay-add-remission',
|
|
927
|
-
template: "<div class=\"add-remission pagesize\">\n <div *ngIf=\"errorMessage\">\n <div class=\"error-summary\" role=\"group\" aria-labelledby=\"failure-error-summary-heading\" tabindex=\"-1\">\n <h2 class=\"heading-medium error-summary-heading\" id=\"failure-error-summary-heading\">\n Error in processing the request\n </h2>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"viewStatus === 'main' && !isRefundRemission \">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREMISSION'>\n <h1 class=\"heading-large\">Add remission </h1>\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-label--s\" for=\"remission-code\">\n Add remission to {{ fee?.code }}: {{ fee?.description }}\n <span class=\"form-hint\">Enter remission for reference. For example: HWF-A1B-23C OR PA21-123456</span>\n </label>\n <input [ngClass]=\"{'inline-error-class': isRemissionCodeEmpty || remissionCodeHasError}\" class=\"govuk-input govuk-input--width-20 govuk-!-margin-right-1\" id=\"remissionCode\" aria-label=\"remissionCode\" name=\"remissionCode\" type=\"text\" formControlName=\"remissionCode\">\n <p class=\"inline-error-message\" *ngIf=\"isRemissionCodeEmpty || remissionCodeHasError\">\n <span *ngIf=\"isRemissionCodeEmpty\">Enter a remission code</span>\n <span *ngIf=\"remissionCodeHasError\">Enter a vaild remission code</span>\n </p>\n </div>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-label--s\" for=\"amount\">\n How much does the applicant need to pay?\n </label>\n\n <div id=\"amount-currency\" class=\"govuk-visually-hidden\">in pounds</div>\n <div class=\"hmcts-currency-input\">\n <div class=\"hmcts-currency-input__symbol\" aria-hidden=\"true\">\u00A3</div>\n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isAmountEmpty || amountHasError || isRemissionLessThanFeeError}\" id=\"amount\" aria-label=\"amount\" name=\"amount\" type=\"text\" aria-describedby=\"amount-currency\" formControlName=\"amount\">\n <p class=\"inline-error-message\" *ngIf=\"isAmountEmpty || amountHasError || isRemissionLessThanFeeError\">\n <span *ngIf=\"isAmountEmpty\">Enter a amount</span>\n <span *ngIf=\"amountHasError\">Enter a vaild amount</span>\n <span *ngIf=\"isRemissionLessThanFeeError\">The remission amount must be less than the total fee</span>\n </p>\n </div>\n </div>\n </form>\n <button class=\"button\" type=\"submit\" (click)=\"addRemission()\">\n Submit\n </button>\n </div>\n </form>\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'confirmation'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREMISSIONCONFIRMATION'> \n <div class=\"govuk-warning-text\">\n <span class=\"govuk-warning-text__icon\" aria-hidden=\"true\">!</span>\n <strong class=\"govuk-warning-text__text\">\n <span class=\"govuk-warning-text__assistive\">Warning</span>\n Are you sure you want to add remission to this fee?\n </strong>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Remission code:</td>\n <td class=\"govuk-table__cell\">{{ remissionForm.controls.remissionCode.value }}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee code:</td>\n <td class=\"govuk-table__cell\">{{ fee.code }}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee description:</td>\n <td class=\"govuk-table__cell\">{{ fee.description }}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Amount the applicant must pay:</td>\n <td class=\"govuk-table__cell\">{{ remissionForm.controls.amount.value | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n </tr>\n </table>\n\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"cancelRemission.emit()\">\n Cancel\n </button>\n <button type=\"submit\"\n [disabled]=\"isConfirmationBtnDisabled\"\n [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"confirmRemission()\">\n Confirm\n </button>\n\n </ng-container>\n\n <!-- Add retro remission changes-->\n\n <ng-container *ngIf=\"viewCompStatus === 'addremission'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='PROCESSADDRETROREMISSIONPAGE'> \n <h1 class=\"heading-large\">Process remission</h1>\n <h1 class=\"heading-medium\">#{{ccdCaseNumber | ccdHyphens}}</h1>\n <h1 class=\"heading-large\">Enter help with fees or remission reference</h1>\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-label--s\" for=\"remission-code\">\n <span class=\"form-hint\">For example: HWF-A1B-23C OR PA21-123456</span>\n </label>\n <p class=\"inline-error-message\" *ngIf=\"isRemissionCodeEmpty || remissionCodeHasError\">\n <span *ngIf=\"isRemissionCodeEmpty\">Enter a remission code</span>\n <span *ngIf=\"remissionCodeHasError\">Enter a vaild remission code</span>\n </p>\n <input [ngClass]=\"{'inline-error-class': isRemissionCodeEmpty || remissionCodeHasError}\" class=\"govuk-input govuk-input--width-20 govuk-!-margin-right-1\" id=\"remissionCode\" aria-label=\"remissionCode\" name=\"remissionCode\" type=\"text\" formControlName=\"remissionCode\">\n \n </div>\n \n </form>\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoServiceRequestPage($event)\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button (click)=\"addRemissionCode()\" class=\"govuk-button\"> Continue</button>\n </div>\n <p><a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link pointer\" data-module=\"govuk-button\">Cancel</a></p>\n </div>\n </form>\n\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'processretroremissonpage'\" >\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='PROCESSRETROREMISSIONPAGE'> \n <h1 class=\"heading-large\">Process remission</h1>\n <h1 class=\"heading-medium\">#{{ccdCaseNumber | ccdHyphens }}</h1>\n <div class=\"govuk-form-group\">\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <fieldset class=\"govuk-fieldset\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--m\"> \n <h1 *ngIf=\"remessionPayment?.status === 'Success' || isFromRefundListPage\" class=\"heading-medium\">\n Enter the amount to be refunded\n </h1> \n <h1 *ngIf=\"remessionPayment?.status !== 'Success' && !isFromRefundListPage\" class=\"heading-medium\">\n Enter the remission amount\n </h1> \n <h1 *ngIf=\"remessionPayment?.status === 'undefined'\" class=\"heading-medium\">\n Enter the amount\n </h1> \n </legend>\n <div id=\"amount-currency\" class=\"govuk-visually-hidden\">in pounds</div>\n <p class=\"inline-error-message\" *ngIf=\"isAmountEmpty || amountHasError || isRemissionLessThanFeeError\">\n <span *ngIf=\"isAmountEmpty\">Enter a amount</span>\n <span *ngIf=\"amountHasError\">Enter a vaild amount</span>\n <span *ngIf=\"isRemissionLessThanFeeError\">You cannot add a remission that's more than the fee amount.</span>\n </p>\n <div class=\"hmcts-currency-input\">\n \n <div class=\"hmcts-currency-input__symbol\" aria-hidden=\"true\">\u00A3</div>\n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isAmountEmpty || amountHasError || isRemissionLessThanFeeError}\" id=\"amount\" aria-label=\"amount\" name=\"amount\" type=\"number\" aria-describedby=\"amount-currency\" formControlName=\"amount\">\n \n \n </div>\n </fieldset>\n </form>\n \n <div class=\"govuk-button-group\">\n <button (click)=\"gotoAddRetroRemissionCodePage()\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button (click)=\"gotoCheckRetroRemissionPage(payment)\" class=\"govuk-button\"> Continue</button>\n \n </div>\n <p>\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">Cancel</a>\n </p>\n </div>\n \n </form>\n </div>\n </ng-container>\n <ng-container *ngIf=\"viewStatus === 'checkretroremissionpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='CHECKRETROREMISSIONCONFIRMATION'> \n <div class=\"govuk-warning-text\">\n <h1 class=\"heading-large\"> Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{remessionPayment ? remessionPayment.reference: ' '}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment amount</td>\n <td class=\"govuk-table__cell\">\u00A3{{ remessionPayment ? getFormattedCurrency(remessionPayment.amount): ' ' | currency :'GBP':'symbol':'1.2-2'}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment status</td>\n <td class=\"govuk-table__cell\">{{remessionPayment ? remessionPayment.status: ''}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee</td>\n <td class=\"govuk-table__cell\">{{ fee.code }} - {{ fee.description }} ({{ fee.calculated_amount/fee.volume| currency:'GBP':'symbol-narrow':'1.2-2' }}) </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Help with fees or remission reference</td>\n <td class=\"govuk-table__cell\"> {{ remissionForm.controls.remissionCode.value }}\n <a (click)=\"gotoProcessRetroRemissionPage()\" class=\"govuk-link right\" >Change</a>\n </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td *ngIf=\"remessionPayment.status === 'Success'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td *ngIf=\"remessionPayment.status !== 'Success'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Remission amount</td>\n <td class=\"govuk-table__cell\">{{remissionForm.controls.amount.value | currency:'GBP':'symbol-narrow':'1.2-2' }}\n <a (click)=\"addRemissionCode()\" class=\"govuk-link right\" >Change</a>\n </td>\n </tr>\n </table>\n\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"gotoAmountRetroRemission()\">Previous</button>\n <button type=\"submit\" [disabled]=\"isConfirmationBtnDisabled\" [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"' (click)=\"confirmRetroRemission()\"> Add remission </button>\n <p> <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\"> Cancel</a> </p>\n\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'retroremissionconfirmationpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='RETROREMISSIONCONFIRMATIONPAGE'> \n <div class=\"govuk-grid-row\">\n <div >\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Remission added\n </h1>\n <div *ngIf=\"remessionPayment.status === 'Success'\" class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong>The amount to be refunded should be {{remissionForm.controls.amount.value | currency:'GBP':'symbol-narrow':'1.2-2' }}</strong></p>\n \n </div>\n </div>\n <div *ngIf=\"remessionPayment.status === 'Success'\" >\n <button type=\"submit\" [disabled]=\"!isRemissionApplied\" [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"' (click)=\"gotoProcessRetroRemission()\">Continue </button>\n </div>\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link pointer\" data-module=\"govuk-button\">\n Return to case\n </a>\n </p>\n </div>\n </div>\n </ng-container>\n\n\n <ng-container *ngIf=\"viewStatus === 'remissionAddressPage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDRESSDETAILSRETROREMISSIONPAGE'> \n <h1 class=\"govuk-heading-l\">Process refund</h1>\n <h2 class=\"govuk-heading-m govuk-font19px\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h2>\n <ccpay-contact-details\n [addressObj] = notification\n (assignContactDetails)=\"getContactDetails($event, 'checkaddRefundpage')\"\n (redirectToIssueRefund)=\"gotoRemissionSuccess($event)\" ></ccpay-contact-details>\n <p>\n <a (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'checkaddRefundpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='CHECKRETROREMISSIONCONFIRMATION'> \n <div class=\"govuk-warning-text\">\n <h1 class=\"heading-large\"> Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{remessionPayment ? remessionPayment.reference: ' '}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment amount</td>\n <td class=\"govuk-table__cell\">\u00A3{{ remessionPayment ? getFormattedCurrency(remessionPayment.amount): ' ' | currency :'GBP':'symbol':'1.2-2'}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment status</td>\n <td class=\"govuk-table__cell\">{{remessionPayment ? remessionPayment.status: ''}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee</td>\n <td class=\"govuk-table__cell\">{{ fee.code }} - {{ fee.description }} ({{ fee.calculated_amount/fee.volume| currency:'GBP':'symbol-narrow':'1.2-2' }}) </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Help with fees or remission reference</td>\n <td class=\"govuk-table__cell\"> {{ remissionForm.controls.remissionCode.value }}\n </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td *ngIf=\"remessionPayment.status === 'Success'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td *ngIf=\"remessionPayment.status !== 'Success'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Remission amount</td>\n <td class=\"govuk-table__cell\">{{remissionForm.controls.amount.value | currency:'GBP':'symbol-narrow':'1.2-2' }}\n </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send to</td>\n <td class=\"govuk-table__cell\">{{orderParty}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send via</td>\n <td class=\"govuk-table__cell\">\n <div *ngIf=\"contactDetailsObj?.notification_type === 'EMAIL'\" class=\"contactDetails-width\">\n <strong>Email</strong>\n <br/>\n {{contactDetailsObj?.email}}\n </div>\n <div *ngIf=\"contactDetailsObj?.notification_type === 'LETTER'\" class=\"contactDetails-width\">\n <strong>Post</strong>\n <br/>\n {{contactDetailsObj?.address_line}} {{contactDetailsObj?.city}} {{contactDetailsObj?.county}} {{contactDetailsObj?.country}} {{contactDetailsObj?.postal_code}}\n </div>\n <a (click)=\"gotoProcessRetroRemission(contactDetailsObj)\" class=\"govuk-link right margin-top--size\" >Change</a>\n </td>\n </tr>\n </table>\n\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"gotoProcessRetroRemission(contactDetailsObj)\">Previous</button>\n <button type=\"submit\" [disabled]=\"isConfirmationBtnDisabled\" [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"' (click)=\"processRefund()\"> Submit refund </button>\n <p> <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\"> Cancel</a> </p>\n\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'refundconfirmationpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='RETROREMISSIONREFUNDCONFIRMATIONPAGE'> \n <div class=\"govuk-grid-row\">\n <div >\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Refund submitted\n </h1>\n \n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong>Refund reference: {{refundReference}}</strong></p>\n </div>\n \n </div>\n <div *ngIf=\"isPaymentSuccess\">\n <h2 class=\"govuk-heading-l\">What happens next</h2>\n <p class=\"govuk-body\">\n A refund request for {{refundAmount | currency:'GBP':'symbol-narrow':'1.2-2' }} has been created and will be passed to a team leader to approve.\n </p>\n </div>\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link pointer\" data-module=\"govuk-button\">\n Return to case\n </a>\n </p>\n </div>\n </div>\n \n </ng-container>\n\n <!-- Issue Refund Section -->\n\n <ng-container *ngIf=\"viewCompStatus === 'issuerefund' && isRefundRemission\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ISSUEREFUNDPAGE'> \n <h1 class=\"heading-large\">Process refund</h1>\n <h1 class=\"heading-medium\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h1>\n <span id=\"how-contacted-conditional-hint govuk-font19px\" class=\"govuk-hint\">\n Payment reference: {{this.payment.reference}}\n </span>\n <h1 class=\"heading-large\">Why are you making this refund?\n </h1>\n \n\n <div class=\"govuk-form-group\">\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"how-contacted-conditional-hint\">\n \n <div\n [ngClass]=\"refundHasError ? 'govuk-radios govuk-radios--conditional form-group-error' : 'govuk-radios govuk-radios--conditional'\"\n data-module=\"govuk-radios\" >\n <p class=\"inline-error-message\" *ngIf=\"refundHasError\">\n <span *ngIf=\"refundHasError\">Select a reason why you\u2019re making this refund</span>\n </p>\n\n \n\n <div class = \"container-fluid\">\n <div class=\"row\">\n <div class=\"govuk-radios__item col-md-4\" *ngFor=\"let refund of commonRefundReasons; let i = index;\">\n <!-- <div *ngIf = \"{{refund.name}} !== 'Retrospective remission'\"> -->\n <input class=\"govuk-radios__input\" id=\"{{refund.name}}\" name=\"refundReason\" type=\"radio\"\n formControlName=\"refundReason\" value={{refund.code}}\n (change)=\"selectRadioButton(refund.name, refund.name)\">\n <label class=\"govuk-label--s govuk-radios__label govuk-font__custom\" for=\"how-contacted-conditional\">\n {{refund.name}}\n </label>\n\n <div class=\"govuk-radios__conditional\" *ngIf=\"isRefundReasonsSelected && showReasonText && selectedRefundReason === refund.name \" >\n <label class=\"govuk-label govuk-label--m\" for=\"{{refund.name}}\">\n Enter reason\n </label>\n <div [ngClass]=\"{'form-group-error': isReasonEmpty}\">\n <p class=\"inline-error-message\" *ngIf=\"isReasonEmpty\">\n <span *ngIf=\"isReasonEmpty\">Enter a reason why you\u2019re making this refund</span>\n </p>\n \n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isReasonEmpty}\" id=\"reason\" aria-label=\"reason\" name=\"reason\" type=\"text\" aria-describedby=\"reason\" maxlength=\"30\" formControlName=\"reason\">\n </div>\n </div>\n <!-- </div> -->\n </div>\n </div>\n </div>\n <br/>\n <div>\n <select formControlName=\"refundDDReason\" class=\"govuk-select\" id=\"sort\" (change)=\"selectchange($event)\">\n <option selected='selected' [defaultSelected]=true [value]=\"default\" >{{default}}</option> \n <!-- <option value=\"\" selected='selected'>Select a different reason</option> -->\n <option *ngFor=\"let refund of refundReasons;\" id=\"{{refund.name}}\" value=\"{{refund.code}}\">{{refund.name}}</option>\n </select>\n \n </div>\n <br/>\n <div class=\"govuk-radios__conditional\" *ngIf=\"showReasonText && !isRefundReasonsSelected\" >\n <div [ngClass]=\"{'form-group-error': isReasonEmpty}\">\n <label class=\"govuk-label govuk-label--m\" for=\"amount\">\n Enter reason\n </label>\n <p class=\"inline-error-message\" *ngIf=\"isReasonEmpty\">\n <span *ngIf=\"isReasonEmpty\">Enter a reason why you\u2019re making this refund</span>\n </p>\n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isReasonEmpty}\" id=\"reason\" aria-label=\"reason\" name=\"reason\" type=\"text\" aria-describedby=\"reason\" maxlength=\"{{reasonLength}}\" formControlName=\"reason\">\n </div>\n </div>\n\n \n </div>\n </fieldset>\n </form>\n </div>\n </form>\n </div>\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoServiceRequestPage($event)\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button (click)=\"gotoIssueRefundConfirmation(payment)\" class=\"govuk-button\"> Continue</button>\n </div>\n <p>\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n \n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'contactDetailsPage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='CAPTUREADDRESSDETAILSPAGE'> \n <h1 class=\"govuk-heading-l\">Process refund</h1>\n <h2 class=\"govuk-heading-m govuk-font19px\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h2>\n <span id=\"how-contacted-conditional-hint\" class=\"govuk-hint govuk-font19px\">\n Payment reference: {{this.payment.reference}}\n </span>\n <ccpay-contact-details\n [addressObj] = notification\n (assignContactDetails)=\"getContactDetails($event, 'checkissuerefundpage')\"\n (redirectToIssueRefund)=\"gotoIssueRefundPage()\" ></ccpay-contact-details>\n <p>\n <a (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'checkissuerefundpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='CHECKISSUEREFUNDPAGE'> \n <div class=\"govuk-warning-text\">\n \n <h1 class=\"heading-large\"> Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Reason for refund</td>\n <td class=\"govuk-table__cell\"> {{ displayRefundReason }} \n <a (click)=\"changeIssueRefundReason()\" class=\"govuk-link right\" >Change</a>\n </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{this.payment.reference}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment amount</td>\n <td class=\"govuk-table__cell\">{{this.payment.amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td class=\"govuk-table__cell\">{{this.payment.amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send to</td>\n <td class=\"govuk-table__cell\">{{orderParty}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send via</td>\n <td class=\"govuk-table__cell\">\n <div *ngIf=\"contactDetailsObj?.notification_type === 'EMAIL'\" class=\"contactDetails-width\">\n <strong>Email</strong>\n <br/>\n {{contactDetailsObj?.email}}\n </div>\n <div *ngIf=\"contactDetailsObj?.notification_type === 'LETTER'\" class=\"contactDetails-width\">\n <strong>Post</strong>\n <br/>\n {{contactDetailsObj?.address_line}} {{contactDetailsObj?.city}} {{contactDetailsObj?.county}} {{contactDetailsObj?.country}} {{contactDetailsObj?.postal_code}}\n </div>\n <a (click)=\"gotoContactDetailsPage(contactDetailsObj)\" class=\"govuk-link right margin-top--size\" >Change</a>\n </td>\n </tr>\n </table>\n <div class=\"govuk-button-group\">\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"gotoContactDetailsPage(contactDetailsObj)\"> Previous </button>\n <button type=\"submit\"\n [disabled]=\"isConfirmationBtnDisabled\"\n [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"confirmIssueRefund()\">\n Submit refund\n </button>\n </div>\n <p>\n <a (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n </ng-container>\n\n <!--Retro Refund-->\n <ng-container *ngIf=\"viewCompStatus === 'addrefundforremission'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDRESSDETAILSRETROREMISSIONPAGE'> \n <h1 class=\"govuk-heading-l\">Process refund</h1>\n <h2 class=\"govuk-heading-m govuk-font19px\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h2>\n <span id=\"how-contacted-conditional-hint\" class=\"govuk-hint govuk-font19px\">\n Payment reference: {{this.payment.reference}}\n </span>\n <ccpay-contact-details \n [addressObj] = notification\n (assignContactDetails)=\"getContactDetails($event, 'addrefundcheckandanswer')\"\n (redirectToIssueRefund)=\"gotoServiceRequestPage($event)\" ></ccpay-contact-details>\n <p>\n <a (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n </ng-container>\n <ng-container *ngIf=\"viewStatus === 'addrefundcheckandanswer'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREFUNDFORREMISSION'> \n <div class=\"govuk-warning-text\">\n \n <h1 class=\"heading-large\"> Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Reason for refund</td>\n <td class=\"govuk-table__cell\"> Retrospective remission </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{this.payment.reference}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td class=\"govuk-table__cell\">{{this.remission.hwf_amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee code</td>\n <td class=\"govuk-table__cell\">{{this.remission.fee_code}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee amount</td>\n <td class=\"govuk-table__cell\">{{feeamount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send to</td>\n <td class=\"govuk-table__cell\">{{orderParty}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send via</td>\n <td class=\"govuk-table__cell\">\n <div *ngIf=\"contactDetailsObj?.notification_type === 'EMAIL'\" class=\"contactDetails-width\">\n <strong>Email</strong>\n <br/>\n {{contactDetailsObj?.email}}\n </div>\n <div *ngIf=\"contactDetailsObj?.notification_type === 'LETTER'\" class=\"contactDetails-width\">\n <strong>Post</strong>\n <br/>\n {{contactDetailsObj?.address_line}} {{contactDetailsObj?.city}} {{contactDetailsObj?.county}} {{contactDetailsObj?.country}} {{contactDetailsObj?.postal_code}}\n </div>\n <a (click)=\"gotoAddressPage(contactDetailsObj)\" class=\"govuk-link right margin-top--size\" >Change</a>\n </td>\n </table>\n <div class=\"govuk-button-group\">\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"gotoAddressPage(contactDetailsObj)\">Previous</button>\n <button type=\"submit\"\n [disabled]=\"isConfirmationBtnDisabled\"\n [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"processRefund()\">\n Submit refund\n </button>\n </div>\n <p>\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'retrorefundconfirmationpage'\">\n <div class=\"govuk-grid-row\">\n <div >\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Refund submitted\n </h1>\n \n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong>Refund reference: {{refundReference}}</strong></p>\n </div>\n \n </div>\n <div *ngIf=\"isPaymentSuccess\">\n <h2 class=\"govuk-heading-l\">What happens next</h2>\n <p class=\"govuk-body\">\n A refund request for {{ refundAmount| currency:'GBP':'symbol-narrow':'1.2-2'}} has been passed to a team leader to approve.\n </p>\n </div>\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link pointer\" data-module=\"govuk-button\">\n Return to case\n </a>\n </p>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'order-full-view'\">\n <ccpay-service-request\n [viewStatus] = \"viewStatus\"\n [orderRef] = \"orderRef\"\n [orderStatus] = \"orderStatus\"\n [orderCreated] = \"orderCreated\"\n [orderParty] = \"orderParty\"\n [orderCCDEvent] = \"orderCCDEvent\"\n [orderDetail] = \"orderDetail\"\n [LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"\n [takePayment] = \"takePayment\"\n [ccdCaseNumber] = \"ccdCaseNumber\"\n [orderFeesTotal] = \"orderFeesTotal\"\n [orderTotalPayments] = \"orderTotalPayments\"\n [orderRemissionTotal] = \"orderRemissionTotal\">\n </ccpay-service-request>\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'payment-view'\">\n <ccpay-payment-view \n [LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"\n [isTurnOff] = \"isTurnOff\" \n [isTakePayment] = \"takePayment\" \n [caseType] = \"caseType\"\n [isOldPcipalOff] = \"isOldPcipalOff\"\n [isNewPcipalOff] = \"isNewPcipalOff\"\n [orderRef] = \"orderRef\"\n [orderStatus] = \"orderStatus\"\n [orderCreated] = \"orderCreated\"\n [orderParty] = \"orderParty\"\n [orderCCDEvent] = \"orderCCDEvent\"\n [orderDetail] = \"orderDetail\"\n [orderFeesTotal] = \"orderFeesTotal\"\n [orderTotalPayments] = \"orderTotalPayments\"\n [orderRemissionTotal] = \"orderRemissionTotal\"\n >\n </ccpay-payment-view>\n </ng-container>\n\n</div>\n\n\n\n",
|
|
928
|
-
styles: [".add-remission .button{padding:.5em;font-size:19px;font-weight:200;margin:20px 2px}.add-remission td.govuk-table__cell{width:50%}.add-remission .govuk-button--secondary{background-color:#dee0e2;box-shadow:0 2px 0 #858688;color:#0b0c0c;margin-right:.5em}.add-remission .
|
|
1297
|
+
template: "<div class=\"add-remission pagesize\">\n <div *ngIf=\"errorMessage\">\n <div class=\"error-summary\" role=\"group\" aria-labelledby=\"failure-error-summary-heading\" tabindex=\"-1\">\n <h2 class=\"heading-medium error-summary-heading\" id=\"failure-error-summary-heading\">\n Error in processing the request\n </h2>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n <div *ngIf=\"errorMsg.length > 0\">\n <div class=\"error-summary\" role=\"group\" aria-labelledby=\"failure-error-summary-heading\" tabindex=\"-1\">\n <h2 class=\"heading-medium error-summary-heading\" id=\"failure-error-summary-heading\">\n Error in processing the request\n </h2>\n <div *ngFor=\"let err of errorMsg; let i = index\" class=\"govuk-error-summary__body\">\n \n <li>{{err}}</li>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"viewStatus === 'main' && !isRefundRemission \">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREMISSION'>\n <h1 class=\"heading-large\">Add remission </h1>\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-label--s\" for=\"remission-code\">\n Add remission to {{ fee?.code }}: {{ fee?.description }}\n <span class=\"form-hint\">Enter remission for reference. For example: HWF-A1B-23C OR PA21-123456</span>\n </label>\n <input [ngClass]=\"{'inline-error-class': isRemissionCodeEmpty || remissionCodeHasError}\" class=\"govuk-input govuk-input--width-20 govuk-!-margin-right-1\" id=\"remissionCode\" aria-label=\"remissionCode\" name=\"remissionCode\" type=\"text\" formControlName=\"remissionCode\">\n <p class=\"inline-error-message\" *ngIf=\"isRemissionCodeEmpty || remissionCodeHasError\">\n <span *ngIf=\"isRemissionCodeEmpty\">Enter a remission code</span>\n <span *ngIf=\"remissionCodeHasError\">Enter a vaild remission code</span>\n </p>\n </div>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-label--s\" for=\"amount\">\n How much does the applicant need to pay?\n </label>\n\n <div id=\"amount-currency\" class=\"govuk-visually-hidden\">in pounds</div>\n <div class=\"hmcts-currency-input\">\n <div class=\"hmcts-currency-input__symbol\" aria-hidden=\"true\">\u00A3</div>\n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isAmountEmpty || amountHasError || isRemissionLessThanFeeError}\" id=\"amount\" aria-label=\"amount\" name=\"amount\" type=\"text\" aria-describedby=\"amount-currency\" formControlName=\"amount\">\n <p class=\"inline-error-message\" *ngIf=\"isAmountEmpty || amountHasError || isRemissionLessThanFeeError\">\n <span *ngIf=\"isAmountEmpty\">Enter a amount</span>\n <span *ngIf=\"amountHasError\">Enter a vaild amount</span>\n <span *ngIf=\"isRemissionLessThanFeeError\">The remission amount must be less than the total fee</span>\n </p>\n </div>\n </div>\n </form>\n <button class=\"button\" type=\"submit\" (click)=\"addRemission()\">\n Submit\n </button>\n </div>\n </form>\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'confirmation'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREMISSIONCONFIRMATION'> \n <div class=\"govuk-warning-text\">\n <span class=\"govuk-warning-text__icon\" aria-hidden=\"true\">!</span>\n <strong class=\"govuk-warning-text__text\">\n <span class=\"govuk-warning-text__assistive\">Warning</span>\n Are you sure you want to add remission to this fee?\n </strong>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Remission code:</td>\n <td class=\"govuk-table__cell\">{{ remissionForm.controls.remissionCode.value }}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee code:</td>\n <td class=\"govuk-table__cell\">{{ fee.code }}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee description:</td>\n <td class=\"govuk-table__cell\">{{ fee.description }}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Amount the applicant must pay:</td>\n <td class=\"govuk-table__cell\">{{ remissionForm.controls.amount.value | currency:'GBP':'symbol-narrow':'1.2-2' }}</td>\n </tr>\n </table>\n\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"cancelRemission.emit()\">\n Cancel\n </button>\n <button type=\"submit\"\n [disabled]=\"isConfirmationBtnDisabled\"\n [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"confirmRemission()\">\n Confirm\n </button>\n\n </ng-container>\n\n <!-- Add retro remission changes-->\n\n <ng-container *ngIf=\"viewCompStatus === 'addremission'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='PROCESSADDRETROREMISSIONPAGE'> \n <h1 class=\"heading-large\">Process remission</h1>\n <h1 class=\"heading-medium\">#{{ccdCaseNumber | ccdHyphens}}</h1>\n <h1 class=\"heading-large\">Enter help with fees or remission reference</h1>\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <div class=\"govuk-form-group\">\n <label class=\"govuk-label govuk-label--s\" for=\"remission-code\">\n <span class=\"form-hint\">For example: HWF-A1B-23C OR PA21-123456</span>\n </label>\n <p class=\"inline-error-message\" *ngIf=\"isRemissionCodeEmpty || remissionCodeHasError\">\n <span *ngIf=\"isRemissionCodeEmpty\">Enter a remission code</span>\n <span *ngIf=\"remissionCodeHasError\">Enter a vaild remission code</span>\n </p>\n <input [ngClass]=\"{'inline-error-class': isRemissionCodeEmpty || remissionCodeHasError}\" class=\"govuk-input govuk-input--width-20 govuk-!-margin-right-1\" id=\"remissionCode\" aria-label=\"remissionCode\" name=\"remissionCode\" type=\"text\" formControlName=\"remissionCode\">\n \n </div>\n \n </form>\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoServiceRequestPage($event)\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button (click)=\"addRemissionCode()\" class=\"govuk-button\"> Continue</button>\n </div>\n <p><a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link pointer\" data-module=\"govuk-button\">Cancel</a></p>\n </div>\n </form>\n\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'processretroremissonpage'\" >\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='PROCESSRETROREMISSIONPAGE'> \n <h1 class=\"heading-large\">Process remission</h1>\n <h1 class=\"heading-medium\">#{{ccdCaseNumber | ccdHyphens }}</h1>\n <div class=\"govuk-form-group\">\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <fieldset class=\"govuk-fieldset\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--m\"> \n <h1 *ngIf=\"remessionPayment?.status === 'Success' || isFromRefundListPage\" class=\"heading-medium\">\n Enter the amount to be refunded\n </h1> \n <h1 *ngIf=\"remessionPayment?.status !== 'Success' && !isFromRefundListPage\" class=\"heading-medium\">\n Enter the remission amount\n </h1> \n <h1 *ngIf=\"remessionPayment?.status === 'undefined'\" class=\"heading-medium\">\n Enter the amount\n </h1> \n </legend>\n <div id=\"amount-currency\" class=\"govuk-visually-hidden\">in pounds</div>\n <p class=\"inline-error-message\" *ngIf=\"isAmountEmpty || amountHasError || isRemissionLessThanFeeError\">\n <span *ngIf=\"isAmountEmpty\">Enter a amount</span>\n <span *ngIf=\"amountHasError\">Enter a vaild amount</span>\n <span *ngIf=\"isRemissionLessThanFeeError\">You cannot add a remission that's more than the fee amount.</span>\n </p>\n <div class=\"hmcts-currency-input\">\n \n <div class=\"hmcts-currency-input__symbol\" aria-hidden=\"true\">\u00A3</div>\n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isAmountEmpty || amountHasError || isRemissionLessThanFeeError}\" id=\"amount\" aria-label=\"amount\" name=\"amount\" type=\"number\" aria-describedby=\"amount-currency\" formControlName=\"amount\">\n \n \n </div>\n </fieldset>\n </form>\n \n <div class=\"govuk-button-group\">\n <button (click)=\"gotoAddRetroRemissionCodePage()\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button (click)=\"gotoCheckRetroRemissionPage(payment)\" class=\"govuk-button\"> Continue</button>\n \n </div>\n <p>\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">Cancel</a>\n </p>\n </div>\n \n </form>\n </div>\n </ng-container>\n <ng-container *ngIf=\"viewStatus === 'checkretroremissionpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='CHECKRETROREMISSIONCONFIRMATION'> \n <div class=\"govuk-warning-text\">\n <h1 class=\"heading-large\"> Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{remessionPayment ? remessionPayment.reference: ' '}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment amount</td>\n <td class=\"govuk-table__cell\">\u00A3{{ remessionPayment ? getFormattedCurrency(remessionPayment.amount): ' ' | currency :'GBP':'symbol':'1.2-2'}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment status</td>\n <td class=\"govuk-table__cell\">{{remessionPayment ? remessionPayment.status: ''}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee</td>\n <td class=\"govuk-table__cell\">{{ fee.code }} - {{ fee.description }} ({{ fee.calculated_amount/fee.volume| currency:'GBP':'symbol-narrow':'1.2-2' }}) </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Help with fees or remission reference</td>\n <td class=\"govuk-table__cell\"> {{ remissionForm.controls.remissionCode.value }}\n <a (click)=\"gotoProcessRetroRemissionPage()\" class=\"govuk-link right\" >Change</a>\n </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td *ngIf=\"remessionPayment.status === 'Success'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td *ngIf=\"remessionPayment.status !== 'Success'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Remission amount</td>\n <td class=\"govuk-table__cell\">{{remissionForm.controls.amount.value | currency:'GBP':'symbol-narrow':'1.2-2' }}\n <a (click)=\"addRemissionCode()\" class=\"govuk-link right\" >Change</a>\n </td>\n </tr>\n </table>\n\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"gotoAmountRetroRemission()\">Previous</button>\n <button type=\"submit\" [disabled]=\"isConfirmationBtnDisabled\" [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"' (click)=\"confirmRetroRemission()\"> Add remission </button>\n <p> <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\"> Cancel</a> </p>\n\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'retroremissionconfirmationpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='RETROREMISSIONCONFIRMATIONPAGE'> \n <div class=\"govuk-grid-row\">\n <div >\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Remission added\n </h1>\n <div *ngIf=\"remessionPayment.status === 'Success'\" class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong>The amount to be refunded should be {{remissionForm.controls.amount.value | currency:'GBP':'symbol-narrow':'1.2-2' }}</strong></p>\n \n </div>\n </div>\n <div *ngIf=\"remessionPayment.status === 'Success'\" >\n <button type=\"submit\" [disabled]=\"!isRemissionApplied\" [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"' (click)=\"gotoProcessRetroRemission()\">Continue </button>\n </div>\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link pointer\" data-module=\"govuk-button\">\n Return to case\n </a>\n </p>\n </div>\n </div>\n </ng-container>\n\n\n <ng-container *ngIf=\"viewStatus === 'remissionAddressPage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDRESSDETAILSRETROREMISSIONPAGE'> \n <h1 class=\"govuk-heading-l\">Process refund</h1>\n <h2 class=\"govuk-heading-m govuk-font19px\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h2>\n <ccpay-contact-details\n [addressObj] = notification\n (assignContactDetails)=\"getContactDetails($event, 'checkaddRefundpage')\"\n (redirectToIssueRefund)=\"gotoRemissionSuccess($event)\" ></ccpay-contact-details>\n <p>\n <a (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'checkaddRefundpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='CHECKRETROREMISSIONCONFIRMATION'> \n <div class=\"govuk-warning-text\">\n <h1 class=\"heading-large\"> Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{remessionPayment ? remessionPayment.reference: ' '}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment amount</td>\n <td class=\"govuk-table__cell\">\u00A3{{ remessionPayment ? getFormattedCurrency(remessionPayment.amount): ' ' | currency :'GBP':'symbol':'1.2-2'}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment status</td>\n <td class=\"govuk-table__cell\">{{remessionPayment ? remessionPayment.status: ''}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee</td>\n <td class=\"govuk-table__cell\">{{ fee.code }} - {{ fee.description }} ({{ fee.calculated_amount/fee.volume| currency:'GBP':'symbol-narrow':'1.2-2' }}) </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Help with fees or remission reference</td>\n <td class=\"govuk-table__cell\"> {{ remissionForm.controls.remissionCode.value }}\n </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td *ngIf=\"remessionPayment.status === 'Success'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td *ngIf=\"remessionPayment.status !== 'Success'\" class=\"govuk-table__cell govuk-!-font-weight-bold\">Remission amount</td>\n <td class=\"govuk-table__cell\">{{remissionForm.controls.amount.value | currency:'GBP':'symbol-narrow':'1.2-2' }}\n </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send to</td>\n <td class=\"govuk-table__cell\">{{orderParty}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send via</td>\n <td class=\"govuk-table__cell\">\n <div *ngIf=\"contactDetailsObj?.notification_type === 'EMAIL'\" class=\"contactDetails-width\">\n <strong>Email</strong>\n <br/>\n {{contactDetailsObj?.email}}\n </div>\n <div *ngIf=\"contactDetailsObj?.notification_type === 'LETTER'\" class=\"contactDetails-width\">\n <strong>Post</strong>\n <br/>\n {{contactDetailsObj?.address_line}} {{contactDetailsObj?.city}} {{contactDetailsObj?.county}} {{contactDetailsObj?.country}} {{contactDetailsObj?.postal_code}}\n </div>\n <a (click)=\"gotoProcessRetroRemission(contactDetailsObj)\" class=\"govuk-link right margin-top--size\" >Change</a>\n </td>\n </tr>\n </table>\n\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"gotoProcessRetroRemission(contactDetailsObj)\">Previous</button>\n <button type=\"submit\" [disabled]=\"isConfirmationBtnDisabled\" [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"' (click)=\"processRefund()\"> Submit refund </button>\n <p> <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\"> Cancel</a> </p>\n\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'refundconfirmationpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='RETROREMISSIONREFUNDCONFIRMATIONPAGE'> \n <div class=\"govuk-grid-row\">\n <div >\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Refund submitted\n </h1>\n \n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong>Refund reference: {{refundReference}}</strong></p>\n </div>\n \n </div>\n <div *ngIf=\"isPaymentSuccess\">\n <h2 class=\"govuk-heading-l\">What happens next</h2>\n <p class=\"govuk-body\">\n A refund request for {{refundAmount | currency:'GBP':'symbol-narrow':'1.2-2' }} has been created and will be passed to a team leader to approve.\n </p>\n </div>\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link pointer\" data-module=\"govuk-button\">\n Return to case\n </a>\n </p>\n </div>\n </div>\n \n </ng-container>\n\n <!-- Issue Refund Section -->\n <ng-container *ngIf=\"viewCompStatus === 'issuerefund' && isRefundRemission\">\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <h1 class=\"heading-large\">Issue refund</h1>\n <h2 class=\"heading-medium\">Case reference:#{{ccdCaseNumber | ccdHyphens }}</h2>\n <span id=\"how-contacted-conditional-hint\" class=\"form-hint\">\n Payment reference: {{paymentReference}}\n </span>\n <h3 class=\"heading-small\">Select fees to be refunded</h3>\n <!--TABLE-->\n <div>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-1\" scope=\"col\">Select</td>\n <td class=\"govuk-table__header col-18\" scope=\"col\">Fee description</td>\n <td class=\"govuk-table__header col-6\" scope=\"col\">Fee amount</td>\n <td class=\"govuk-table__header col-6\" scope=\"col\">Total paid</td>\n <td class=\"govuk-table__header col-6\" scope=\"col\">Quantity</td>\n <td class=\"govuk-table__header col-8\" scope=\"col\">Amount to refund</td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\">\n <tr class=\"govuk-table__row\" formArrayName=\"feesList\" *ngFor=\"let fee of feesList?.controls; let i = index\">\n <td class=\"govuk-table__cell\">\n <div [formGroupName]=\"i\" class=\"govuk-checkboxes govuk-checkboxes--large\" data-module=\"govuk-checkboxes\">\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" (click)=\"check_en(i,fee.controls['id'].value,fee.controls['apportion_amount'].value,fee.controls['volume'].value)\" id=\"{{fee.controls['id'].value}}\" name=\"organisation\" type=\"checkbox\" value=\"{{fee.controls['id'].value}}\" formControlName=\"selected\" >\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"{{fee.controls['id'].value}}\">\n <span style=\"display:none\">Select</span>\n </label>\n </div>\n </div>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{fee.controls['description'].value}} </td>\n <td class=\"govuk-table__cell whitespace-inherit left\" >\n <div type=\"hidden\" style=\"display:none;background-color:white;\" id=\"feeVOl_{{fee.controls['id'].value}}\">{{ fee.controls['calculated_amount'].value / fee.controls['volume'].value }}</div>\n {{ fee.controls['calculated_amount'].value / fee.controls['volume'].value | currency:'GBP':'symbol-narrow':'1.2-2' }}\n </td>\n <td class=\"govuk-table__cell whitespace-inherit left\" >{{ fee.controls['apportion_amount'].value | currency:'GBP':'symbol-narrow':'1.2-2'}} </td>\n <td class=\"govuk-table__cell whitespace-inherit left\" *ngIf=\"fee.controls['volume'].value >1\">\n <div [formGroupName]=\"i\">\n <input disabled=\"disabled\" class=\"govuk-input govuk-input--width-4 center\" id=\"feeVolumeUpdated_{{fee.controls['id'].value}}\" (keyup)=\"calAmtToRefund($event.target.value,fee.controls['calculated_amount'].value,fee.controls['volume'].value,i)\" name=\"feeVolumeUpdated_{{fee.controls['id'].value}}\" formControlName=\"updatedVolume\" type=\"text\" >\n </div>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit left\" *ngIf=\"fee.controls['volume'].value ===1\">\n <input disabled=\"disabled\" class=\"govuk-input govuk-input--width-4 center\" id=\"VolumeUpdated_{{fee.controls['id'].value}}\" name=\"VolumeUpdated_{{fee.controls['id'].value}}\" type=\"text\" value=\"{{fee.controls['volume'].value}}\">\n </td>\n <td class=\"govuk-table__cell whitespace-inherit center\" scope=\"row\">\n \n <div [formGroupName]=\"i\" class=\"hmcts-currency-input\">\n \n <div class=\"hmcts-currency-input__symbol\" aria-hidden=\"true\">\u00A3</div>\n <!-- <div *ngIf=\"fee.controls['volume'].value >1\"> -->\n <input disabled=\"disabled\" class=\"govuk-input govuk-input--width-10\" id=\"feeAmount_{{fee.controls['id'].value}}\" name=\"feeAmount_{{fee.controls['id'].value}}\" type=\"text\" aria-describedby=\"amount-currency \" pattern=\"[0-9]*\" formControlName=\"amounttorefund\">\n <!-- </div> -->\n <!-- <div *ngIf=\"fee.controls['volume'].value ===1\">\n <input disabled=\"disabled\" class=\"govuk-input govuk-input--width-10\" id=\"feeAmount_{{fee.controls['id'].value}}\" name=\"feeAmount_{{fee.controls['id'].value}}\" type=\"text\" aria-describedby=\"amount-currency \" pattern=\"[0-9]*\" formControlName=\"amounttorefund\">\n \n </div> -->\n <input id=\"feeVolume_{{fee.controls['id'].value}}\" name=\"feeVolume_{{fee.controls['id'].value}}\" value= \"{{fee.controls['volume'].value}}\" type=\"hidden\" formControlName=\"volume\">\n\t\t\t\t\t <input id=\"feeApportionAmount_{{fee.controls['id'].value}}\" name=\"feeApportionAmount_{{fee.controls['id'].value}}\" value= \"{{fee.controls['apportion_amount'].value}}\" type=\"hidden\" formControlName=\"apportion_amount\">\n\t\t\t\t\t <input id=\"calculatedAmount_{{fee.controls['id'].value}}\" name=\"calculatedAmount_{{fee.controls['id'].value}}\" value= \"{{fee.controls['calculated_amount'].value}}\" type=\"hidden\" formControlName=\"calculated_amount\">\n </div> \n \n </td>\n </tr>\n </tbody>\n\n <!-- <div formArrayName=\"feesList\" *ngFor=\"let item of feesList?.controls; let i = index\">\n <div [formGroupName]=\"i\">\n <label for=\"\">Your row</label>\n \n <input type=\"checkbox\" formControlName=\"selected\">\n <input formControlName=\"amouttorefund\"> -->\n <!-- <button (click)=\"removeProduct(group.value,i)\">remove</button> -->\n <!-- </div>\n </div> -->\n\n <!-- {{remissionForm?.value|json}} -->\n <tbody class=\"govuk-table__body\" *ngIf=\"fees?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No fees recorded</td>\n </tbody>\n </table>\n </div>\n <div class=\"govuk-button-group\">\n \n \n <a (click)=\"gotoServiceRequestPage($event)\" draggable=\"false\" class=\"govuk-button govuk-button--secondary\" data-module=\"govuk-button\">\n Previous\n </a>\n \n \n <button [disabled] = \"noneSelected()\" (click)=\"gotoIssuePage()\" class=\"govuk-button\">\n Continue\n </button>\n \n </div>\n <p>\n <a (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">Cancel</a>\n </p>\n </form>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"viewCompStatus === 'issuerefundpage1' && isRefundRemission\">\n\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ISSUEREFUNDPAGE'> \n <h1 class=\"heading-large\">Process refund</h1>\n <h1 class=\"heading-medium\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h1>\n <span id=\"how-contacted-conditional-hint govuk-font19px\" class=\"govuk-hint\">\n Payment reference: {{this.payment.reference}}\n </span>\n <h1 class=\"heading-large\">Why are you making this refund?\n </h1>\n \n\n <div class=\"govuk-form-group\">\n <form novalidate>\n <div class=\"govuk-form-group\">\n <form [formGroup]=\"remissionForm\" novalidate>\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"how-contacted-conditional-hint\">\n \n <div\n [ngClass]=\"refundHasError ? 'govuk-radios govuk-radios--conditional form-group-error' : 'govuk-radios govuk-radios--conditional'\"\n data-module=\"govuk-radios\" >\n <p class=\"inline-error-message\" *ngIf=\"refundHasError\">\n <span *ngIf=\"refundHasError\">Select a reason why you\u2019re making this refund</span>\n </p>\n\n \n\n <div class = \"container-fluid\">\n <div class=\"row\">\n <div class=\"govuk-radios__item col-md-4\" *ngFor=\"let refund of commonRefundReasons; let i = index;\">\n <!-- <div *ngIf = \"{{refund.name}} !== 'Retrospective remission'\"> -->\n <input class=\"govuk-radios__input\" id=\"{{refund.name}}\" name=\"refundReason\" type=\"radio\"\n formControlName=\"refundReason\" value={{refund.code}}\n (change)=\"selectRadioButton(refund.name, refund.name)\">\n <label class=\"govuk-label--s govuk-radios__label govuk-font__custom\" for=\"how-contacted-conditional\">\n {{refund.name}}\n </label>\n\n <div class=\"govuk-radios__conditional\" *ngIf=\"isRefundReasonsSelected && showReasonText && selectedRefundReason === refund.name \" >\n <label class=\"govuk-label govuk-label--m\" for=\"{{refund.name}}\">\n Enter reason\n </label>\n <div [ngClass]=\"{'form-group-error': isReasonEmpty}\">\n <p class=\"inline-error-message\" *ngIf=\"isReasonEmpty\">\n <span *ngIf=\"isReasonEmpty\">Enter a reason why you\u2019re making this refund</span>\n </p>\n \n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isReasonEmpty}\" id=\"reason\" aria-label=\"reason\" name=\"reason\" type=\"text\" aria-describedby=\"reason\" maxlength=\"30\" formControlName=\"reason\">\n </div>\n </div>\n <!-- </div> -->\n </div>\n </div>\n </div>\n <br/>\n <div>\n <select formControlName=\"refundDDReason\" class=\"govuk-select\" id=\"sort\" (change)=\"selectchange($event)\">\n <option selected='selected' [defaultSelected]=true [value]=\"default\" >{{default}}</option> \n <!-- <option value=\"\" selected='selected'>Select a different reason</option> -->\n <option *ngFor=\"let refund of refundReasons;\" id=\"{{refund.name}}\" value=\"{{refund.code}}\">{{refund.name}}</option>\n </select>\n \n </div>\n <br/>\n <div class=\"govuk-radios__conditional\" *ngIf=\"showReasonText && !isRefundReasonsSelected\" >\n <div [ngClass]=\"{'form-group-error': isReasonEmpty}\">\n <label class=\"govuk-label govuk-label--m\" for=\"amount\">\n Enter reason\n </label>\n <p class=\"inline-error-message\" *ngIf=\"isReasonEmpty\">\n <span *ngIf=\"isReasonEmpty\">Enter a reason why you\u2019re making this refund</span>\n </p>\n <input class=\"govuk-input govuk-input--width-10\" [ngClass]=\"{'inline-error-class': isReasonEmpty}\" id=\"reason\" aria-label=\"reason\" name=\"reason\" type=\"text\" aria-describedby=\"reason\" maxlength=\"{{reasonLength}}\" formControlName=\"reason\">\n </div>\n </div>\n\n \n </div>\n </fieldset>\n </form>\n </div>\n </form>\n </div>\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoServiceRequestPage($event)\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button (click)=\"gotoIssueRefundConfirmation(payment)\" class=\"govuk-button\"> Continue</button>\n </div>\n <p>\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n \n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'contactDetailsPage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='CAPTUREADDRESSDETAILSPAGE'> \n <h1 class=\"govuk-heading-l\">Process refund</h1>\n <h2 class=\"govuk-heading-m govuk-font19px\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h2>\n <span id=\"how-contacted-conditional-hint\" class=\"govuk-hint govuk-font19px\">\n Payment reference: {{this.payment.reference}}\n </span>\n <ccpay-contact-details\n [addressObj] = notification\n (assignContactDetails)=\"getContactDetails($event, 'checkissuerefundpage')\"\n (redirectToIssueRefund)=\"gotoIssueRefundPage()\" ></ccpay-contact-details>\n <p>\n <a (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'checkissuerefundpage'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='CHECKISSUEREFUNDPAGE'> \n <div class=\"govuk-warning-text\">\n \n <h1 class=\"heading-large\"> Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n \n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{this.payment.reference}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment amount</td>\n <td class=\"govuk-table__cell\">{{this.payment.amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr>\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Reason for refund</td>\n <td class=\"govuk-table__cell\"> {{ displayRefundReason }} \n <a (click)=\"changeIssueRefundReason()\" class=\"govuk-link right\" >Change</a>\n </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td class=\"govuk-table__cell\">{{totalRefundAmount | currency:'GBP':'symbol-narrow':'1.2-2'}}\n <a (click)=\"changeRefundAmount()\" class=\"govuk-link right\" >Change</a>\n </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send to</td>\n <td class=\"govuk-table__cell\">{{orderParty}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send via</td>\n <td class=\"govuk-table__cell\">\n <div *ngIf=\"contactDetailsObj?.notification_type === 'EMAIL'\" class=\"contactDetails-width\">\n <strong>Email</strong>\n <br/>\n {{contactDetailsObj?.email}}\n </div>\n <div *ngIf=\"contactDetailsObj?.notification_type === 'LETTER'\" class=\"contactDetails-width\">\n <strong>Post</strong>\n <br/>\n {{contactDetailsObj?.address_line}} {{contactDetailsObj?.city}} {{contactDetailsObj?.county}} {{contactDetailsObj?.country}} {{contactDetailsObj?.postal_code}}\n </div>\n <a (click)=\"gotoContactDetailsPage(contactDetailsObj)\" class=\"govuk-link right margin-top--size\" >Change</a>\n </td>\n </tr>\n </table>\n <div class=\"govuk-button-group\">\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"gotoContactDetailsPage(contactDetailsObj)\"> Previous </button>\n <button type=\"submit\"\n [disabled]=\"isConfirmationBtnDisabled\"\n [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"confirmIssueRefund()\">\n Submit refund\n </button>\n </div>\n <p>\n <a (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n </ng-container>\n\n <!--Retro Refund-->\n <ng-container *ngIf=\"viewCompStatus === 'addrefundforremission'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDRESSDETAILSRETROREMISSIONPAGE'> \n <h1 class=\"govuk-heading-l\">Process refund</h1>\n <h2 class=\"govuk-heading-m govuk-font19px\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h2>\n <span id=\"how-contacted-conditional-hint\" class=\"govuk-hint govuk-font19px\">\n Payment reference: {{this.payment.reference}}\n </span>\n <ccpay-contact-details \n [addressObj] = notification\n (assignContactDetails)=\"getContactDetails($event, 'addrefundcheckandanswer')\"\n (redirectToIssueRefund)=\"gotoServiceRequestPage($event)\" ></ccpay-contact-details>\n <p>\n <a (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n </ng-container>\n <ng-container *ngIf=\"viewStatus === 'addrefundcheckandanswer'\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='ADDREFUNDFORREMISSION'> \n <div class=\"govuk-warning-text\">\n \n <h1 class=\"heading-large\"> Check your answers</h1>\n </div>\n <table class=\"govuk-table\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Reason for refund</td>\n <td class=\"govuk-table__cell\"> Retrospective remission </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Payment reference</td>\n <td class=\"govuk-table__cell\">{{this.payment.reference}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund amount</td>\n <td class=\"govuk-table__cell\">{{this.remission.hwf_amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee code</td>\n <td class=\"govuk-table__cell\">{{this.remission.fee_code}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Fee amount</td>\n <td class=\"govuk-table__cell\">{{feeamount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send to</td>\n <td class=\"govuk-table__cell\">{{orderParty}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Send via</td>\n <td class=\"govuk-table__cell\">\n <div *ngIf=\"contactDetailsObj?.notification_type === 'EMAIL'\" class=\"contactDetails-width\">\n <strong>Email</strong>\n <br/>\n {{contactDetailsObj?.email}}\n </div>\n <div *ngIf=\"contactDetailsObj?.notification_type === 'LETTER'\" class=\"contactDetails-width\">\n <strong>Post</strong>\n <br/>\n {{contactDetailsObj?.address_line}} {{contactDetailsObj?.city}} {{contactDetailsObj?.county}} {{contactDetailsObj?.country}} {{contactDetailsObj?.postal_code}}\n </div>\n <a (click)=\"gotoAddressPage(contactDetailsObj)\" class=\"govuk-link right margin-top--size\" >Change</a>\n </td>\n </table>\n <div class=\"govuk-button-group\">\n <button type=\"submit\" class=\"button govuk-button--secondary\" (click)=\"gotoAddressPage(contactDetailsObj)\">Previous</button>\n <button type=\"submit\"\n [disabled]=\"isConfirmationBtnDisabled\"\n [ngClass]='isConfirmationBtnDisabled ? \"button button--disabled govuk-!-margin-right-1\" : \"button govuk-!-margin-right-1\"'\n (click)=\"processRefund()\">\n Submit refund\n </button>\n </div>\n <p>\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'retrorefundconfirmationpage'\">\n <div class=\"govuk-grid-row\">\n <div >\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel__title\">\n Refund submitted\n </h1>\n \n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong>Refund reference: {{refundReference}}</strong></p>\n </div>\n \n </div>\n <div *ngIf=\"isPaymentSuccess\">\n <h2 class=\"govuk-heading-l\">What happens next</h2>\n <p class=\"govuk-body\">\n A refund request for {{ refundAmount| currency:'GBP':'symbol-narrow':'1.2-2'}} has been passed to a team leader to approve.\n </p>\n </div>\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"gotoCasetransationPageCancelBtnClicked($event)\" class=\"govuk-link pointer\" data-module=\"govuk-button\">\n Return to case\n </a>\n </p>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'order-full-view'\">\n <ccpay-service-request\n [viewStatus] = \"viewStatus\"\n [orderRef] = \"orderRef\"\n [orderStatus] = \"orderStatus\"\n [orderCreated] = \"orderCreated\"\n [orderParty] = \"orderParty\"\n [orderCCDEvent] = \"orderCCDEvent\"\n [orderDetail] = \"orderDetail\"\n [LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"\n [takePayment] = \"takePayment\"\n [ccdCaseNumber] = \"ccdCaseNumber\"\n [orderFeesTotal] = \"orderFeesTotal\"\n [orderTotalPayments] = \"orderTotalPayments\"\n [orderRemissionTotal] = \"orderRemissionTotal\">\n </ccpay-service-request>\n </ng-container>\n\n <ng-container *ngIf=\"viewStatus === 'payment-view'\">\n <ccpay-payment-view \n [LOGGEDINUSERROLES] = \"LOGGEDINUSERROLES\"\n [isTurnOff] = \"isTurnOff\" \n [isTakePayment] = \"takePayment\" \n [caseType] = \"caseType\"\n [isOldPcipalOff] = \"isOldPcipalOff\"\n [isNewPcipalOff] = \"isNewPcipalOff\"\n [orderRef] = \"orderRef\"\n [orderStatus] = \"orderStatus\"\n [orderCreated] = \"orderCreated\"\n [orderParty] = \"orderParty\"\n [orderCCDEvent] = \"orderCCDEvent\"\n [orderDetail] = \"orderDetail\"\n [orderFeesTotal] = \"orderFeesTotal\"\n [orderTotalPayments] = \"orderTotalPayments\"\n [orderRemissionTotal] = \"orderRemissionTotal\"\n >\n </ccpay-payment-view>\n </ng-container>\n\n</div>\n\n\n\n",
|
|
1298
|
+
styles: [".add-remission .button{padding:.5em;font-size:19px;font-weight:200;margin:20px 2px}.add-remission td.govuk-table__cell{width:50%}.add-remission .govuk-button--secondary{background-color:#dee0e2;box-shadow:0 2px 0 #858688;color:#0b0c0c;margin-right:.5em}.add-remission .govuk-label--s,.add-remission .govuk-warning-text__text,.add-remission .hmcts-currency-input__symbol{font-size:19px;font-weight:400}.add-remission .inline-error-class{outline:#a71414 solid 3px;outline-offset:0;border-color:#a71414}.add-remission .inline-error-message{color:#a71414;border-color:#a71414;font-weight:700;margin-top:10px;font-size:20px}.add-remission .govuk-button,.add-remission .govuk-link{margin-right:1em;font-size:19px;font-weight:200}.add-remission .govuk-button-group{padding-top:2em}.add-remission .heading-medium{margin-top:.875em}.add-remission .heading-large{margin-top:.25em}.add-remission .govuk-panel--confirmation{color:#fff;background:#00703c}.add-remission .govuk-panel__title{font-size:5rem}.add-remission .govuk-body,.add-remission .govuk-body-m{font-size:2.1875rem}.add-remission .govuk-radios__item{clear:initial!important;display:inline-block;width:45%!important}.add-remission .govuk-radios__conditional{padding-top:12px!important}.add-remission .right{float:right;cursor:pointer}.add-remission .radio{float:right}.govuk-font19px,.govuk-input{font-size:19px}.govuk-select{font-size:19px;font-weight:400}.govuk-input--width-10{max-width:50ex}.govuk-label--m{font-size:19px;font-weight:400}.govuk-error-summary__body{font-size:19px!important}.govuk-error-summary__title{font-size:24px!important}.white{color:#fff}.pagesize{margin:2em;width:97%}.pointer{cursor:pointer}.col-18{min-width:18em}.col-6{min-width:6em}.col-8{min-width:8em}.col-1{min-width:1em}.col-25{width:25%!important}.col-24{width:24%!important}.left{text-align:left}.center{text-align:center}.col-60{width:60%;text-align:left}.margin-top--size{margin-top:-30px}.contactDetails-width{width:70%}.right{cursor:pointer}.form-hint{font-size:19px!important}"]
|
|
929
1299
|
}] }
|
|
930
1300
|
];
|
|
931
1301
|
/** @nocollapse */
|
|
@@ -940,6 +1310,7 @@ AddRemissionComponent.ctorParameters = () => [
|
|
|
940
1310
|
];
|
|
941
1311
|
AddRemissionComponent.propDecorators = {
|
|
942
1312
|
fee: [{ type: Input }],
|
|
1313
|
+
fees: [{ type: Input }],
|
|
943
1314
|
payment: [{ type: Input }],
|
|
944
1315
|
remission: [{ type: Input }],
|
|
945
1316
|
ccdCaseNumber: [{ type: Input }],
|
|
@@ -975,6 +1346,8 @@ if (false) {
|
|
|
975
1346
|
/** @type {?} */
|
|
976
1347
|
AddRemissionComponent.prototype.fee;
|
|
977
1348
|
/** @type {?} */
|
|
1349
|
+
AddRemissionComponent.prototype.fees;
|
|
1350
|
+
/** @type {?} */
|
|
978
1351
|
AddRemissionComponent.prototype.payment;
|
|
979
1352
|
/** @type {?} */
|
|
980
1353
|
AddRemissionComponent.prototype.remission;
|
|
@@ -1099,6 +1472,8 @@ if (false) {
|
|
|
1099
1472
|
/** @type {?} */
|
|
1100
1473
|
AddRemissionComponent.prototype.remissionamt;
|
|
1101
1474
|
/** @type {?} */
|
|
1475
|
+
AddRemissionComponent.prototype.elementId;
|
|
1476
|
+
/** @type {?} */
|
|
1102
1477
|
AddRemissionComponent.prototype.commonRefundReasons;
|
|
1103
1478
|
/** @type {?} */
|
|
1104
1479
|
AddRemissionComponent.prototype.showReasonText;
|
|
@@ -1119,6 +1494,32 @@ if (false) {
|
|
|
1119
1494
|
/** @type {?} */
|
|
1120
1495
|
AddRemissionComponent.prototype.sendOrderRef;
|
|
1121
1496
|
/** @type {?} */
|
|
1497
|
+
AddRemissionComponent.prototype.paymentReference;
|
|
1498
|
+
/** @type {?} */
|
|
1499
|
+
AddRemissionComponent.prototype.class;
|
|
1500
|
+
/** @type {?} */
|
|
1501
|
+
AddRemissionComponent.prototype.errorMsg;
|
|
1502
|
+
/** @type {?} */
|
|
1503
|
+
AddRemissionComponent.prototype.totalRefundAmount;
|
|
1504
|
+
/** @type {?} */
|
|
1505
|
+
AddRemissionComponent.prototype.quantityUpdated;
|
|
1506
|
+
/** @type {?} */
|
|
1507
|
+
AddRemissionComponent.prototype.fullRefund;
|
|
1508
|
+
/** @type {?} */
|
|
1509
|
+
AddRemissionComponent.prototype.allowedRefundAmount;
|
|
1510
|
+
/** @type {?} */
|
|
1511
|
+
AddRemissionComponent.prototype.isRemissionsMatch;
|
|
1512
|
+
/** @type {?} */
|
|
1513
|
+
AddRemissionComponent.prototype.paymentFees;
|
|
1514
|
+
/** @type {?} */
|
|
1515
|
+
AddRemissionComponent.prototype.paymentGroup;
|
|
1516
|
+
/** @type {?} */
|
|
1517
|
+
AddRemissionComponent.prototype.isStatusAllocated;
|
|
1518
|
+
/** @type {?} */
|
|
1519
|
+
AddRemissionComponent.prototype.isFromCheckAnsPage;
|
|
1520
|
+
/** @type {?} */
|
|
1521
|
+
AddRemissionComponent.prototype.refundAmtForFeeVolumes;
|
|
1522
|
+
/** @type {?} */
|
|
1122
1523
|
AddRemissionComponent.prototype.component;
|
|
1123
1524
|
/**
|
|
1124
1525
|
* @type {?}
|
|
@@ -1156,4 +1557,4 @@ if (false) {
|
|
|
1156
1557
|
*/
|
|
1157
1558
|
AddRemissionComponent.prototype.OrderslistService;
|
|
1158
1559
|
}
|
|
1159
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXJlbWlzc2lvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2FkZC1yZW1pc3Npb24vYWRkLXJlbWlzc2lvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFFLFdBQVcsRUFBYSxVQUFVLEVBQUUsV0FBVyxFQUFxQixNQUFNLGdCQUFnQixDQUFDO0FBRXBHLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFeEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFckYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDckYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDL0YsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWhELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOztNQUVoRSxjQUFjLEdBQUcsdUJBQXVCO0FBTzlDLE1BQU0sT0FBTyxxQkFBcUI7Ozs7Ozs7Ozs7SUFzRmhDLFlBQW9CLFdBQXdCLEVBQ2xDLE1BQWMsRUFDZCxrQkFBc0MsRUFDdEMsbUJBQXdDLEVBQ3hDLGFBQTZCLEVBQzdC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K0I7O0lBQy9CLGlEQUFrQzs7SUFDbEMsbURBQW9DOztJQUNwQyw2Q0FBb0I7O0lBRXBCLG9EQUFnQzs7SUFDaEMsK0NBQXdCOztJQUN4Qix3REFBaUM7O0lBQ2pDLHdDQUFnQjs7SUFDaEIsNkNBQXFCOztJQUNyQiw4Q0FBK0I7O0lBQy9CLHlDQUFpQjs7SUFDakIseUNBQWlCOztJQUNqQixnREFBdUI7O0lBQ3ZCLDZDQUFxQjs7SUFDckIsMENBQXdYOzs7OztJQUU1Vyw0Q0FBZ0M7Ozs7O0lBQzFDLHVDQUFzQjs7Ozs7SUFDdEIsbURBQThDOzs7OztJQUM5QyxvREFBZ0Q7Ozs7O0lBQ2hELDhDQUFxQzs7Ozs7SUFDckMsbUNBQTZCOzs7OztJQUM3QixrREFBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sLCBSZXF1aXJlZFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElGZWUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lGZWUnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBZGRSZW1pc3Npb25SZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9BZGRSZW1pc3Npb25SZXF1ZXN0JztcbmltcG9ydCB7IFBheW1lbnRWaWV3U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BheW1lbnQtdmlldy9wYXltZW50LXZpZXcuc2VydmljZSc7XG5pbXBvcnQgeyBQYXltZW50TGliQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuY29tcG9uZW50JztcbmltcG9ydCB7IElQYXltZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudCc7XG5pbXBvcnQgeyBSZWZ1bmRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlZnVuZHMvcmVmdW5kcy5zZXJ2aWNlJztcbmltcG9ydCB7IElSZWZ1bmRSZWFzb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUmVmdW5kUmVhc29ucyc7XG5pbXBvcnQgeyBBZGRSZXRyb1JlbWlzc2lvblJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0FkZFJldHJvUmVtaXNzaW9uUmVxdWVzdCc7XG5pbXBvcnQgeyBJUmVmdW5kQ29udGFjdERldGFpbHMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZWZ1bmRDb250YWN0RGV0YWlscyc7XG5pbXBvcnQgeyBQb3N0UmVmdW5kUmV0cm9SZW1pc3Npb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL1Bvc3RSZWZ1bmRSZXRyb1JlbWlzc2lvbic7XG5pbXBvcnQgeyBQb3N0SXNzdWVSZWZ1bmRSZXRyb1JlbWlzc2lvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvUG9zdElzc3VlUmVmdW5kUmV0cm9SZW1pc3Npb24nO1xuaW1wb3J0IHtDaGFuZ2VEZXRlY3RvclJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJUmVtaXNzaW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUmVtaXNzaW9uJztcbmltcG9ydCB7IE9yZGVyc2xpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb3JkZXJzbGlzdC5zZXJ2aWNlJztcblxuY29uc3QgQlNfRU5BQkxFX0ZMQUcgPSAnYnVsay1zY2FuLWVuYWJsaW5nLWZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktYWRkLXJlbWlzc2lvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZGQtcmVtaXNzaW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYWRkLXJlbWlzc2lvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEFkZFJlbWlzc2lvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGZlZTogSUZlZTtcbiAgQElucHV0KCkgcGF5bWVudDogSVBheW1lbnQ7XG4gIEBJbnB1dCgpIHJlbWlzc2lvbjogSVJlbWlzc2lvbjtcbiAgQElucHV0KCkgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBASW5wdXQoKSBjYXNlVHlwZTogc3RyaW5nO1xuICBASW5wdXQoKSB2aWV3Q29tcFN0YXR1czogc3RyaW5nO1xuICBASW5wdXQoKSBwYXltZW50R3JvdXBSZWY6IHN0cmluZztcbiAgQElucHV0KCkgaXNUdXJuT2ZmOiBib29sZWFuO1xuICBASW5wdXQoKSBpc1JlZnVuZFJlbWlzc2lvbjogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNPbGRQY2lwYWxPZmY6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzTmV3UGNpcGFsT2ZmOiBib29sZWFuO1xuICBASW5wdXQoKSBpc1N0cmF0ZWdpY0ZpeEVuYWJsZTogYm9vbGVhbjtcbiAgQElucHV0KCkgcGFpZEFtb3VudDogYW55O1xuICBASW5wdXQoKSBpc0Zyb21SZWZ1bmRMaXN0UGFnZTogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNGcm9tUGF5bWVudERldGFpbFBhZ2U6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZTogYm9vbGVhbjtcbiAgQElucHV0KCkgZmVlYW1vdW50OiBudW1iZXI7XG4gIEBJbnB1dCgnTE9HR0VESU5VU0VSUk9MRVMnKSBMT0dHRURJTlVTRVJST0xFUzogc3RyaW5nW107XG4gIEBJbnB1dCgnb3JkZXJEZXRhaWwnKSBvcmRlckRldGFpbDogYW55W107XG4gIEBJbnB1dCgnb3JkZXJSZWYnKSBvcmRlclJlZjogc3RyaW5nO1xuICBASW5wdXQoJ29yZGVyU3RhdHVzJykgb3JkZXJTdGF0dXM6IHN0cmluZztcbiAgQElucHV0KCdvcmRlclBhcnR5Jykgb3JkZXJQYXJ0eTogc3RyaW5nO1xuICBASW5wdXQoJ29yZGVyQ3JlYXRlZCcpIG9yZGVyQ3JlYXRlZDogRGF0ZTtcbiAgQElucHV0KCdvcmRlckNDREV2ZW50Jykgb3JkZXJDQ0RFdmVudDogc3RyaW5nO1xuICBASW5wdXQoJ3Rha2VwYXltZW50JykgdGFrZVBheW1lbnQ6IGJvb2xlYW47XG4gIEBJbnB1dCgnb3JkZXJGZWVzVG90YWwnKSBvcmRlckZlZXNUb3RhbDogbnVtYmVyO1xuICBASW5wdXQoJ29yZGVyVG90YWxQYXltZW50cycpIG9yZGVyVG90YWxQYXltZW50czogbnVtYmVyO1xuICBASW5wdXQoJ29yZGVyUmVtaXNzaW9uVG90YWwnKSBvcmRlclJlbWlzc2lvblRvdGFsOiBudW1iZXI7XG4gIEBPdXRwdXQoKSBjYW5jZWxSZW1pc3Npb246IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLy9AT3V0cHV0KCkgcmVmdW5kTGlzdFJlYXNvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKHtyZWFzb246c3RyaW5nLCBjb2RlOnN0cmluZ30pO1xuICBAT3V0cHV0KCkgcmVmdW5kTGlzdFJlYXNvbiA9IG5ldyBFdmVudEVtaXR0ZXI8e3JlYXNvbjogc3RyaW5nLCBjb2RlOiBzdHJpbmd9PigpO1xuICBAT3V0cHV0KCkgcmVmdW5kTGlzdEFtb3VudDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcmVmdW5kID0ge1xuICAgIHJlYXNvbjoge1xuICAgICAgZHVwbGljYXRlOiAnRHVwbGljYXRlIHBheW1lbnQnLFxuICAgICAgaHVtYW5lcnJvcjogJ0h1bWFuIGVycm9yJyxcbiAgICAgIGNhc2VXaXRoZHJhd246ICdDYXNlIHdpdGhkcmF3bicsXG4gICAgICBvdGhlcjogJ090aGVyJ1xuICAgIH1cbiAgfVxuICBjb250YWN0RGV0YWlsc09iajogSVJlZnVuZENvbnRhY3REZXRhaWxzO1xuICBub3RpZmljYXRpb246IGFueTtcbiAgcmVtaXNzaW9uRm9ybTogRm9ybUdyb3VwO1xuICBoYXNFcnJvcnMgPSBmYWxzZTtcbiAgdmlld1N0YXR1cyA9ICdtYWluJztcbiAgZXJyb3JNZXNzYWdlID0gbnVsbDtcbiAgb3B0aW9uOiBzdHJpbmcgPSBudWxsO1xuICBpc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGJzUGF5bWVudERjbk51bWJlcjogc3RyaW5nO1xuICBzZWxlY3RlZFZhbHVlID0gJ3llcyc7XG4gIGFtb3VudDogYW55O1xuICByZXRyb1JlbWlzc2lvbjogYm9vbGVhbiA9IGZhbHNlO1xuICByZW1pc3Npb25SZWZlcmVuY2U6IHN0cmluZyA9ICcnO1xuICByZWZ1bmRSZWZlcmVuY2U6IHN0cmluZztcbiAgcmVmdW5kQW1vdW50OiBzdHJpbmc7XG4gIHBheW1lbnRFeHBsYW5hdGlvbkhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHJlZnVuZFJlYXNvbjpzdHJpbmc7XG4gIHNlbGVjdGVkUmVmdW5kUmVhc29uOiBzdHJpbmc7XG4gIGRpc3BsYXlSZWZ1bmRSZWFzb246IHN0cmluZztcbiAgcmVmdW5kQ29kZTpzdHJpbmc7XG4gIHJlbWVzc2lvblBheW1lbnQ6SVBheW1lbnQ7XG4gIGlzUmVtaXNzaW9uQ29kZUVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIHJlbWlzc2lvbkNvZGVIYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0Ftb3VudEVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVhc29uRW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYW1vdW50SGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNSZW1pc3Npb25MZXNzVGhhbkZlZUVycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHJlZnVuZEhhc0Vycm9yOmJvb2xlYW4gPSBmYWxzZTtcbiAgaXNQYXltZW50U3VjY2VzczogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1JlbWlzc2lvbkFwcGxpZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVtaXNzaW9uYW10Om51bWJlcjtcbiAgLy8gcmVmdW5kUmVhc29uczogYW55W10gPSBbXTtcbiAgY29tbW9uUmVmdW5kUmVhc29uczogYW55W10gPSBbXTtcbiAgc2hvd1JlYXNvblRleHQ6IGJvb2xlYW47XG4gIGlzUmVmdW5kUmVhc29uc1NlbGVjdGVkOiBib29sZWFuO1xuICBkZWZhdWx0OiBzdHJpbmc7XG4gIHJlYXNvbkxlbmd0aDogbnVtYmVyO1xuICByZWZ1bmRSZWFzb25zOklSZWZ1bmRSZWFzb25zW107XG4gIHBhdHRlcm4xOiBzdHJpbmc7XG4gIHBhdHRlcm4yOiBzdHJpbmc7XG4gIHNlbmRPcmRlckRldGFpbDogYW55W107XG4gIHNlbmRPcmRlclJlZjogc3RyaW5nO1xuICBjb21wb25lbnQ6IHsgYWNjb3VudF9udW1iZXI6IHN0cmluZzsgYW1vdW50OiBudW1iZXI7IGNhc2VfcmVmZXJlbmNlOiBzdHJpbmc7IGNjZF9jYXNlX251bWJlcjogc3RyaW5nOyBjaGFubmVsOiBzdHJpbmc7IGN1cnJlbmN5OiBzdHJpbmc7IGN1c3RvbWVyX3JlZmVyZW5jZTogc3RyaW5nOyBkYXRlX2NyZWF0ZWQ6IHN0cmluZzsgZGF0ZV91cGRhdGVkOiBzdHJpbmc7IGRlc2NyaXB0aW9uOiBzdHJpbmc7IG1ldGhvZDogc3RyaW5nOyBvcmdhbmlzYXRpb25fbmFtZTogc3RyaW5nOyBwYXltZW50X2FsbG9jYXRpb246IGFueVtdOyByZWZlcmVuY2U6IHN0cmluZzsgc2VydmljZV9uYW1lOiBzdHJpbmc7IHNpdGVfaWQ6IHN0cmluZzsgc3RhdHVzOiBzdHJpbmc7IH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHBheW1lbnRWaWV3U2VydmljZTogUGF5bWVudFZpZXdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGF5bWVudExpYkNvbXBvbmVudDogUGF5bWVudExpYkNvbXBvbmVudCxcbiAgICBwcml2YXRlIHJlZnVuZFNlcnZpY2U6IFJlZnVuZHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgT3JkZXJzbGlzdFNlcnZpY2U6IE9yZGVyc2xpc3RTZXJ2aWNlKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmRlZmF1bHQgPSAnU2VsZWN0IGEgZGlmZmVyZW50IHJlYXNvbic7XG4gICAgdGhpcy5wYXR0ZXJuMSA9ICdeKFthLXpBLVowLTldezN9KS0oW2EtekEtWjAtOV17M30pLShbYS16QS1aMC05XXszfSkkJztcbiAgICB0aGlzLnBhdHRlcm4yID0gJ14oW0EtWmEtel17Mn1bMC05XXsyfSktKFswLTldezZ9KSQnO1xuICAgIGlmKHRoaXMudmlld0NvbXBTdGF0dXMgIT09ICcnICYmIHRoaXMudmlld0NvbXBTdGF0dXMgIT09IHVuZGVmaW5lZCl7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnJztcbiAgICAgIH1cbiAgICBpZih0aGlzLnJlbWlzc2lvbikge1xuICAgIH1cbiAgICBpZih0aGlzLmZlZSkge1xuICAgIHRoaXMuYW1vdW50ID0gKHRoaXMuZmVlLnZvbHVtZSAqIHRoaXMuZmVlLmNhbGN1bGF0ZWRfYW1vdW50KTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGF5bWVudCl7XG4gICAgICB0aGlzLnJlbWVzc2lvblBheW1lbnQgPSB0aGlzLnBheW1lbnQ7XG4gICAgICBpZih0aGlzLnBheW1lbnQuc3RhdHVzID09PSAnU3VjY2VzcycpIHtcbiAgICAgICAgdGhpcy5pc1BheW1lbnRTdWNjZXNzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5vcHRpb24gPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VMRUNURURfT1BUSU9OO1xuICAgIHRoaXMuYnNQYXltZW50RGNuTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbjtcbiAgICB0aGlzLnJlbWlzc2lvbkZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIHJlbWlzc2lvbkNvZGU6IG5ldyBGb3JtQ29udHJvbCgnJywgXG4gICAgICAgIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihgKCR7dGhpcy5wYXR0ZXJuMX0pfCgke3RoaXMucGF0dGVybjJ9KWApXG4gICAgICBdKSBcbiAgICAgICksXG4gICAgICBhbW91bnQ6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKCdeWzAtOV0rKFxcLlswLTldezEsMn0pPyQnKVxuICAgICAgXSkpLFxuICAgICAgcmVmdW5kUmVhc29uOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pKSxcbiAgICAgIHJlZnVuZEREUmVhc29uOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZF0pKSxcbiAgICAgIHJlYXNvbjogbmV3IEZvcm1Db250cm9sKClcbiAgICB9KTtcbiAgICBjb25zdCByZW1pc3Npb25jdHJscz10aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHM7XG4gICAgcmVtaXNzaW9uY3RybHNbJ3JlZnVuZEREUmVhc29uJ10uc2V0VmFsdWUoJ1NlbGVjdCBhIGRpZmZlcmVudCByZWFzb24nLCB7b25seVNlbGY6IHRydWV9KTtcbiAgICBcbiAgICBpZih0aGlzLnZpZXdDb21wU3RhdHVzID09PSAnJyl7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ21haW4nO1xuICAgIH1cbiBcbiAgICBpZih0aGlzLnZpZXdDb21wU3RhdHVzID09PSAnaXNzdWVyZWZ1bmQnKXtcbiAgICAgIHRoaXMucmVmdW5kU2VydmljZS5nZXRSZWZ1bmRSZWFzb25zKCkuc3Vic2NyaWJlKFxuICAgICAgICByZWZ1bmRSZWFzb25zID0+IHsgXG4gICAgICAgICAgdGhpcy5yZWZ1bmRSZWFzb25zID0gcmVmdW5kUmVhc29ucy5maWx0ZXIoKGRhdGEpID0+IGRhdGEucmVjZW50bHlfdXNlZCA9PT0gZmFsc2UpO1xuICAgICAgICAgIHRoaXMucmVmdW5kUmVhc29ucyA9IHRoaXMucmVmdW5kUmVhc29ucy5maWx0ZXIoKGRhdGEpID0+IGRhdGEubmFtZSAhPT0gJ1JldHJvc3BlY3RpdmUgcmVtaXNzaW9uJyk7XG4gICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgdGhpcy5jb21tb25SZWZ1bmRSZWFzb25zID0gcmVmdW5kUmVhc29ucy5maWx0ZXIoKGRhdGEpID0+IGRhdGEucmVjZW50bHlfdXNlZCA9PT0gdHJ1ZSk7XG4gICAgICAgICAgdGhpcy5jb21tb25SZWZ1bmRSZWFzb25zLnNvcnQoKGEsIGIpID0+IGEudG9TdHJpbmcoKS5sb2NhbGVDb21wYXJlKGIpKTtcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSApO1xuICAgIH1cbiAgICBcbiAgICBpZih0aGlzLnZpZXdDb21wU3RhdHVzID09PSAncHJvY2Vzc3JldHJvcmVtaXNzb25wYWdlJyAmJiB0aGlzLmlzRnJvbVJlZnVuZExpc3RQYWdlKXtcbiAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdwcm9jZXNzcmV0cm9yZW1pc3NvbnBhZ2UnO1xuICAgIH1cblxuICB9XG5cbiAgYWRkUmVtaXNzaW9uKCkge1xuICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ0FsbCcpO1xuICAgIGNvbnN0IHJlbWlzc2lvbmN0cmxzPXRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scyxcbiAgICAgIGlzUmVtaXNzaW9uTGVzc1RoYW5GZWUgPSB0aGlzLmZlZS5jYWxjdWxhdGVkX2Ftb3VudCA+IHJlbWlzc2lvbmN0cmxzLmFtb3VudC52YWx1ZTsgXG4gICAgICB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlZnVuZFJlYXNvbiddLnNldEVycm9ycyhudWxsKTtcbiAgICAgIHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVmdW5kRERSZWFzb24nXS5zZXRFcnJvcnMobnVsbCk7XG4gICAgaWYgKHRoaXMucmVtaXNzaW9uRm9ybS5kaXJ0eSAmJiB0aGlzLnJlbWlzc2lvbkZvcm0udmFsaWQgJiYgaXNSZW1pc3Npb25MZXNzVGhhbkZlZSkge1xuICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ2NvbmZpcm1hdGlvbic7XG4gICAgfWVsc2Uge1xuXG4gICAgICBpZihyZW1pc3Npb25jdHJsc1sncmVtaXNzaW9uQ29kZSddLnZhbHVlID09ICcnICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ3JlbWlzc2lvbkNvZGUnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydyZW1pc3Npb25Db2RlJ10udmFsdWUgIT0gJycgJiYgcmVtaXNzaW9uY3RybHNbJ3JlbWlzc2lvbkNvZGUnXS5pbnZhbGlkICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ3JlbWlzc2lvbkNvZGUnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSA9PSAnJyApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSAhPSAnJyAmJiByZW1pc3Npb25jdHJsc1snYW1vdW50J10uaW52YWxpZCApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHMuYW1vdW50LnZhbGlkICYmICFpc1JlbWlzc2lvbkxlc3NUaGFuRmVlKXtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25maXJtUmVtaXNzaW9uKCkge1xuICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgY29uc3QgbmV3TmV0QW1vdW50ID0gdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzLmFtb3VudC52YWx1ZSxcbiAgICAgcmVtaXNzaW9uQW1vdW50ID0gdGhpcy5mZWUubmV0X2Ftb3VudCAtIG5ld05ldEFtb3VudCxcbiAgICAgcmVxdWVzdEJvZHkgPSBuZXcgQWRkUmVtaXNzaW9uUmVxdWVzdFxuICAgICh0aGlzLmNjZENhc2VOdW1iZXIsIHRoaXMuZmVlLCByZW1pc3Npb25BbW91bnQsIHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scy5yZW1pc3Npb25Db2RlLnZhbHVlLCB0aGlzLmNhc2VUeXBlKTtcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5wb3N0UGF5bWVudEdyb3VwV2l0aFJlbWlzc2lvbnMoZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMucGF5bWVudEdyb3VwUmVmKS50cmltKCksIHRoaXMuZmVlLmlkLCByZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKFxuICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAoSlNPTi5wYXJzZShyZXNwb25zZSkuc3VjY2Vzcykge1xuICAgICAgICAgIGxldCBMRFVybCA9IHRoaXMuaXNUdXJuT2ZmID8gJyZpc1R1cm5PZmY9RW5hYmxlJyA6ICcmaXNUdXJuT2ZmPURpc2FibGUnXG4gICAgICAgICAgICBMRFVybCArPSBgJmNhc2VUeXBlPSR7dGhpcy5jYXNlVHlwZX1gXG4gICAgICAgICAgICBMRFVybCArPSB0aGlzLmlzTmV3UGNpcGFsT2ZmID8gJyZpc05ld1BjaXBhbE9mZj1FbmFibGUnIDogJyZpc05ld1BjaXBhbE9mZj1EaXNhYmxlJ1xuICAgICAgICAgICAgTERVcmwgKz0gdGhpcy5pc09sZFBjaXBhbE9mZiA/ICcmaXNPbGRQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNPbGRQY2lwYWxPZmY9RGlzYWJsZSdcbiAgICAgICAgICBpZiAodGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbikge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZFJldXNlUm91dGUgPSAoKSA9PiBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm9uU2FtZVVybE5hdmlnYXRpb24gPSAncmVsb2FkJztcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9wYXltZW50LWhpc3RvcnkvJHt0aGlzLmNjZENhc2VOdW1iZXJ9P3ZpZXc9ZmVlLXN1bW1hcnkmc2VsZWN0ZWRPcHRpb249JHt0aGlzLm9wdGlvbn0mcGF5bWVudEdyb3VwUmVmPSR7dGhpcy5wYXltZW50R3JvdXBSZWZ9JmRjbj0ke3RoaXMucGF5bWVudExpYkNvbXBvbmVudC5ic3BheW1lbnRkY259JHtMRFVybH1gKTtcbiAgICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdvdG9DYXNldHJhbnNhdGlvblBhZ2UoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICByZXNldFJlbWlzc2lvbkZvcm0odmFsLCBmaWVsZCl7XG4gICAgaWYgKGZpZWxkPT09J0FsbCcpe1xuICAgICAgdGhpcy5pc1JlbWlzc2lvbkNvZGVFbXB0eSA9IHZhbFswXTtcbiAgICAgIHRoaXMucmVtaXNzaW9uQ29kZUhhc0Vycm9yID0gdmFsWzFdO1xuICAgICAgdGhpcy5pc0Ftb3VudEVtcHR5ID0gdmFsWzJdO1xuICAgICAgdGhpcy5hbW91bnRIYXNFcnJvciA9IHZhbFszXTtcbiAgICAgIHRoaXMuaXNSZW1pc3Npb25MZXNzVGhhbkZlZUVycm9yID0gdmFsWzRdO1xuICAgICAgdGhpcy5pc1JlYXNvbkVtcHR5ID0gdmFsWzVdO1xuICAgIH0gZWxzZSBpZihmaWVsZD09PSdyZW1pc3Npb25Db2RlJyB8fCBmaWVsZD09PSdBbGwnKSB7XG4gICAgICB0aGlzLmlzUmVtaXNzaW9uQ29kZUVtcHR5ID0gdmFsWzBdO1xuICAgICAgdGhpcy5yZW1pc3Npb25Db2RlSGFzRXJyb3IgPSB2YWxbMV07XG4gICAgfSBlbHNlIGlmIChmaWVsZD09PSdhbW91bnQnIHx8IGZpZWxkPT09J0FsbCcpe1xuICAgICAgdGhpcy5pc0Ftb3VudEVtcHR5ID0gdmFsWzJdO1xuICAgICAgdGhpcy5hbW91bnRIYXNFcnJvciA9IHZhbFszXTtcbiAgICAgIHRoaXMuaXNSZW1pc3Npb25MZXNzVGhhbkZlZUVycm9yID0gdmFsWzRdO1xuICAgIH0gZWxzZSBpZiAoZmllbGQ9PT0ncmVhc29uJyB8fCBmaWVsZD09PSdBbGwnKXtcbiAgICAgIHRoaXMuaXNSZWFzb25FbXB0eSA9IHZhbFs1XTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgcmV0cm8gcmVtaXNzaW9uIGNoYW5nZXNcbiAgYWRkUmVtaXNzaW9uQ29kZSgpIHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGZhbHNlO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICcnO1xuICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24gPSBmYWxzZTtcbiAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdBbGwnKTtcbiAgICBjb25zdCByZW1pc3Npb25jdHJscz10aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNcbiAgICAgLy8gaXNSZW1pc3Npb25MZXNzVGhhbkZlZSA9IHRoaXMuZmVlLmNhbGN1bGF0ZWRfYW1vdW50ID49IHJlbWlzc2lvbmN0cmxzLmFtb3VudC52YWx1ZTsgXG4gICAgICB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlZnVuZFJlYXNvbiddLnNldEVycm9ycyhudWxsKTtcbiAgICAgIHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVmdW5kRERSZWFzb24nXS5zZXRFcnJvcnMobnVsbCk7XG4gICAgICB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ2Ftb3VudCddLnNldEVycm9ycyhudWxsKTtcbiAgICBpZiAodGhpcy5yZW1pc3Npb25Gb3JtLmRpcnR5ICYmIHRoaXMucmVtaXNzaW9uRm9ybS52YWxpZCApIHtcbiAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICAgIHRoaXMudmlld1N0YXR1cyA9IFwicHJvY2Vzc3JldHJvcmVtaXNzb25wYWdlXCI7XG4gICAgfWVsc2Uge1xuXG4gICAgICBpZihyZW1pc3Npb25jdHJsc1sncmVtaXNzaW9uQ29kZSddLnZhbHVlID09ICcnICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAncmVtaXNzaW9uQ29kZScpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ3JlbWlzc2lvbkNvZGUnXS52YWx1ZSAhPSAnJyAmJiByZW1pc3Npb25jdHJsc1sncmVtaXNzaW9uQ29kZSddLmludmFsaWQgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdyZW1pc3Npb25Db2RlJyk7XG4gICAgICB9XG4gICAgICBpZihyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgPT0gJycgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSAhPSAnJyAmJiByZW1pc3Npb25jdHJsc1snYW1vdW50J10uaW52YWxpZCApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2VdLCAnYW1vdW50Jyk7XG4gICAgICB9XG4gICAgICBpZihyZW1pc3Npb25jdHJsc1sncmVhc29uJ10udmFsdWUgPT0gJycpIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlXSwgJ3JlYXNvbicpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHMuYW1vdW50LnZhbGlkKXtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlXSwgJ2Ftb3VudCcpO1xuICAgICAgfVxuICAgIFxuICAgIH1cbiAgfVxuXG5cbiAgZ290b0FkZFJldHJvUmVtaXNzaW9uQ29kZVBhZ2UoKSB7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBmYWxzZTtcbiAgICBpZih0aGlzLmlzUmVmdW5kUmVtaXNzaW9uKSB7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNjYW5jZWxDbGlja2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVmdW5kTGlzdEFtb3VudC5lbWl0KCk7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICggdGhpcy5pc0Zyb21SZWZ1bmRMaXN0UGFnZSApIHtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc2NhbmNlbENsaWNrZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZWZ1bmRMaXN0UmVhc29uLmVtaXQoe3JlYXNvbjogdGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbiwgY29kZTogdGhpcy5yZWZ1bmRSZWFzb259KTtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9IFxuICAgIHRoaXMudmlld1N0YXR1cyA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9ICd5ZXMnO1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSBcImFkZHJlbWlzc2lvblwiO1xuICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24gPSB0cnVlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgaWYodGhpcy5pc0Zyb21QYXltZW50RGV0YWlsUGFnZSkge1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3BheW1lbnQtdmlldyc7XG4gICAgfVxuICB9XG5cbiAgZ290b0NoZWNrUmV0cm9SZW1pc3Npb25QYWdlKHBheW1lbnQ6IElQYXltZW50KSB7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzY2FuY2VsQ2xpY2tlZCA9IGZhbHNlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZV0sICdBbGwnKTtcbiAgICBpZiggIXRoaXMuaXNSZWZ1bmRSZW1pc3Npb24pIHtcbiAgICB2YXIgcmVtaXNzaW9uY3RybHM9dGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzLFxuICAgICAgaXNSZW1pc3Npb25MZXNzVGhhbkZlZSA9IHRoaXMuZmVlLmNhbGN1bGF0ZWRfYW1vdW50ID49IHJlbWlzc2lvbmN0cmxzLmFtb3VudC52YWx1ZTsgXG4gICAgaWYgKHRoaXMucmVtaXNzaW9uRm9ybS5kaXJ0eSApIHtcbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSA9PSAnJyB8fCByZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgPCAwKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH0gZWxzZSBpZihyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgIT0gJycgJiYgcmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLmludmFsaWQgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH0gZWxzZSBpZihyZW1pc3Npb25jdHJscy5hbW91bnQudmFsaWQgJiYgIWlzUmVtaXNzaW9uTGVzc1RoYW5GZWUpe1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWVdLCAnYW1vdW50Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSBcImNoZWNrcmV0cm9yZW1pc3Npb25wYWdlXCI7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciByZW1pc3Npb25jdHJscz10aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHM7XG4gICAgLy9pZiAodGhpcy5yZW1pc3Npb25Gb3JtLmRpcnR5ICkge1xuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLnZhbHVlID09ICcnIHx8IHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSA8IDAgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZV0sICdhbW91bnQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICcnO1xuICAgICAgICAgIHRoaXMudmlld1N0YXR1cyA9IFwiY2hlY2tyZXRyb3JlbWlzc2lvbnBhZ2VcIjtcbiAgICAgICAgICB0aGlzLnJlZnVuZExpc3RBbW91bnQuZW1pdChyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUpO1xuICAgICAgfVxuICAgIC8vfVxuICAgXG4gIH1cbiAgfVxuICBnb3RvQW1vdW50UmV0cm9SZW1pc3Npb24oKSB7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ3Byb2Nlc3NyZXRyb3JlbWlzc29ucGFnZSc7XG4gICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICcnO1xuICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24gPSB0cnVlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gIH1cbiAgZ290b1Byb2Nlc3NSZXRyb1JlbWlzc2lvblBhZ2UoKSB7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJyc7XG4gICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICdhZGRyZW1pc3Npb24nO1xuICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24gPSB0cnVlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gIH1cblxuICBnb3RvUHJvY2Vzc1JldHJvUmVtaXNzaW9uKG5vdGU/OiBJUmVmdW5kQ29udGFjdERldGFpbHMpIHtcbiAgICBpZihub3RlKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IHsgY29udGFjdF9kZXRhaWxzOiBub3RlLCBub3RpZmljYXRpb25fdHlwZTogbm90ZS5ub3RpZmljYXRpb25fdHlwZSB9O1xuICAgIH1cbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAncmVtaXNzaW9uQWRkcmVzc1BhZ2UnO1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICB9XG5cbiAgY29uZmlybVJldHJvUmVtaXNzaW9uKCkge1xuICAgIGlmKCF0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQpIHtcbiAgICB0aGlzLnJldHJvUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB0aGlzLnJlbWlzc2lvbmFtdCA9IHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scy5hbW91bnQudmFsdWU7XG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSBuZXcgQWRkUmV0cm9SZW1pc3Npb25SZXF1ZXN0KHRoaXMucmVtaXNzaW9uYW10LHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scy5yZW1pc3Npb25Db2RlLnZhbHVlIClcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5wb3N0UGF5bWVudEdyb3VwV2l0aFJldHJvUmVtaXNzaW9ucyhkZWNvZGVVUklDb21wb25lbnQodGhpcy5wYXltZW50R3JvdXBSZWYpLnRyaW0oKSwgdGhpcy5mZWUuaWQsIHJlcXVlc3RCb2R5KS5zdWJzY3JpYmUoXG4gICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgIGlmIChKU09OLnBhcnNlKHJlc3BvbnNlKSkge1xuICAgICAgICAgIHRoaXMuaXNSZW1pc3Npb25BcHBsaWVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnZpZXdDb21wU3RhdHVzICA9ICcnO1xuICAgICAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdyZXRyb3JlbWlzc2lvbmNvbmZpcm1hdGlvbnBhZ2UnO1xuICAgICAgICAgIHRoaXMucmVtaXNzaW9uUmVmZXJlbmNlID1KU09OLnBhcnNlKHJlc3BvbnNlKS5yZW1pc3Npb25fcmVmZXJlbmNlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1JlZnVuZCgpIHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgaWYoIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24pIHtcbiAgICAgIHRoaXMucmV0cm9SZW1pc3Npb24gPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZW1pc3Npb25SZWZlcmVuY2UgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnJlbWlzc2lvblJlZmVyZW5jZSA9PT0gJycpIHtcbiAgICAgIHRoaXMucmVtaXNzaW9uUmVmZXJlbmNlID0gdGhpcy5yZW1pc3Npb24ucmVtaXNzaW9uX3JlZmVyZW5jZTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdEJvZHkgPSBuZXcgUG9zdElzc3VlUmVmdW5kUmV0cm9SZW1pc3Npb24odGhpcy5yZW1pc3Npb25SZWZlcmVuY2UsIHRoaXMuY29udGFjdERldGFpbHNPYmopO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLnBvc3RSZWZ1bmRSZXRyb1JlbWlzc2lvbihyZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKFxuICAgICAgICByZXNwb25zZSA9PiB7XG4gICAgICBpZiAoSlNPTi5wYXJzZShyZXNwb25zZSkpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgID0gJyc7XG4gICAgICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAncmVmdW5kY29uZmlybWF0aW9ucGFnZSc7XG4gICAgICAgICAgICB0aGlzLnJlZnVuZFJlZmVyZW5jZSA9IEpTT04ucGFyc2UocmVzcG9uc2UpLnJlZnVuZF9yZWZlcmVuY2U7XG4gICAgICAgICAgICB0aGlzLnJlZnVuZEFtb3VudCA9IEpTT04ucGFyc2UocmVzcG9uc2UpLnJlZnVuZF9hbW91bnQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yO1xuICAgICAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIH0pXG4gIH1cblxuICAvLyBJc3N1ZSBSZWZ1bmQgY2hhbmdlc1xuXG4gIGdvdG9Jc3N1ZVJlZnVuZENvbmZpcm1hdGlvbihwYXltZW50OiBJUGF5bWVudCkge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc2NhbmNlbENsaWNrZWQgPSBmYWxzZTtcbiAgICBpZih0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuUkVGVU5ETElTVCA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgIHRoaXMuaXNGcm9tUmVmdW5kTGlzdFBhZ2UgPSB0cnVlOyBcbiAgICB9XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnJlZnVuZFJlYXNvbiA9IHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVmdW5kUmVhc29uJ10udmFsdWUgPT09IG51bGwgPyB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlZnVuZEREUmVhc29uJ10udmFsdWUgOiB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlZnVuZFJlYXNvbiddLnZhbHVlO1xuICAgIGlmKCF0aGlzLnJlZnVuZFJlYXNvbiB8fCB0aGlzLnJlZnVuZFJlYXNvbiA9PT0gJ1NlbGVjdCBhIGRpZmZlcmVudCByZWFzb24nKSB7XG4gICAgICB0aGlzLnJlZnVuZEhhc0Vycm9yID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYodGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbi5pbmNsdWRlcygnT3RoZXInKSAmJiAodGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWFzb24nXS52YWx1ZSA9PSAnJyB8fCB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlYXNvbiddLnZhbHVlID09IG51bGwpKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZV0sICdyZWFzb24nKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24uaW5jbHVkZXMoJ090aGVyJykgJiYgdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWFzb24nXS52YWx1ZSAhPT0gJycpIHtcbiAgICAgIHRoaXMucmVmdW5kSGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVmdW5kUmVhc29uICs9ICAnLScgKyB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlYXNvbiddLnZhbHVlO1xuICAgICAgdGhpcy5kaXNwbGF5UmVmdW5kUmVhc29uID0gdGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbiArICctJyArIHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVhc29uJ10udmFsdWU7XG4gICAgICBpZiAoIHRoaXMuaXNGcm9tUmVmdW5kTGlzdFBhZ2UgKSB7XG4gICAgICAgIHRoaXMucmVmdW5kTGlzdFJlYXNvbi5lbWl0KHtyZWFzb246IHRoaXMuZGlzcGxheVJlZnVuZFJlYXNvbiwgY29kZTogdGhpcy5yZWZ1bmRSZWFzb259KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ2NvbnRhY3REZXRhaWxzUGFnZSc7XG4gICAgICB9XG4gICAgICBcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5UmVmdW5kUmVhc29uID0gdGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbjtcbiAgICAgIGlmICggdGhpcy5pc0Zyb21SZWZ1bmRMaXN0UGFnZSApIHtcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVJlZnVuZFN0YXR1c1BhZ2UgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlZnVuZExpc3RSZWFzb24uZW1pdCh7cmVhc29uOiB0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uLCBjb2RlOiB0aGlzLnJlZnVuZFJlYXNvbn0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICcnO1xuICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnY29udGFjdERldGFpbHNQYWdlJztcbiAgICAgIH1cbiAgIFxuICAgIH1cbiAgfVxuXG4gIGdvdG9Jc3N1ZVJlZnVuZFBhZ2UoKSB7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJ2lzc3VlcmVmdW5kJztcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnJztcbiAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGZhbHNlO1xuICAgIHRoaXMucmVmdW5kSGFzRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLmlzUmVhc29uRW1wdHkgPSBmYWxzZTtcbiAgfVxuXG4gIGdvdG9Db250YWN0RGV0YWlsc1BhZ2Uobm90ZT86IElSZWZ1bmRDb250YWN0RGV0YWlscykge1xuICAgIGlmIChub3RlKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IHsgY29udGFjdF9kZXRhaWxzOiBub3RlLCBub3RpZmljYXRpb25fdHlwZTogbm90ZS5ub3RpZmljYXRpb25fdHlwZSB9O1xuICAgIH1cbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnY29udGFjdERldGFpbHNQYWdlJztcbiAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGZhbHNlO1xuICB9XG5cbiAgY2hhbmdlSXNzdWVSZWZ1bmRSZWFzb24oKSB7XG4gICAvLyB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlZnVuZFJlYXNvbiddLnNldFZhbHVlKCdEdXBsaWNhdGUgcGF5bWVudCcpO1xuICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnJlZnVuZEhhc0Vycm9yID0gZmFsc2U7XG4gICAgdGhpcy5pc1JlYXNvbkVtcHR5ID0gZmFsc2U7XG4gICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICdpc3N1ZXJlZnVuZCc7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJyc7XG4gICAgdGhpcy5pc1JlZnVuZFJlbWlzc2lvbiA9IHRydWU7XG4gIH1cblxuICBjb25maXJtSXNzdWVSZWZ1bmQoKSB7XG4gICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIGlmKCB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uKSB7XG4gICAgICB0aGlzLnJldHJvUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB9XG4gIFxuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gbmV3IFBvc3RSZWZ1bmRSZXRyb1JlbWlzc2lvbih0aGlzLnBheW1lbnQucmVmZXJlbmNlLHRoaXMucmVmdW5kUmVhc29uLCB0aGlzLmNvbnRhY3REZXRhaWxzT2JqKTtcbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5wb3N0UmVmdW5kc1JlYXNvbihyZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKFxuICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgIGlmIChKU09OLnBhcnNlKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyAgPSAnJztcbiAgICAgICAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdyZWZ1bmRjb25maXJtYXRpb25wYWdlJztcbiAgICAgICAgICAgIHRoaXMucmVmdW5kUmVmZXJlbmNlID1KU09OLnBhcnNlKHJlc3BvbnNlKS5yZWZ1bmRfcmVmZXJlbmNlO1xuICAgICAgICAgICAgaWYoSlNPTi5wYXJzZShyZXNwb25zZSkucmVmdW5kX2Ftb3VudCkge1xuICAgICAgICAgICAgdGhpcy5yZWZ1bmRBbW91bnQgPSBKU09OLnBhcnNlKHJlc3BvbnNlKS5yZWZ1bmRfYW1vdW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yO1xuICAgICAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KVxuICB9XG5cbi8vIFJldHJvIFJlZnVuZFxuXG4gIGNvbmZpcm1SZXRyb1JlZnVuZCgpIHtcbiAgICB0aGlzLmlzQ29uZmlybWF0aW9uQnRuRGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgaWYoIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24pIHtcbiAgICAgIHRoaXMucmV0cm9SZW1pc3Npb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gbmV3IFBvc3RSZWZ1bmRSZXRyb1JlbWlzc2lvbih0aGlzLnBheW1lbnQucmVmZXJlbmNlLCdSUjAwNC1SZXRyb3NwZWN0aXZlIHJlbWlzc2lvbicsIHRoaXMuY29udGFjdERldGFpbHNPYmopO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLnBvc3RSZWZ1bmRzUmVhc29uKHJlcXVlc3RCb2R5KS5zdWJzY3JpYmUoXG4gICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgICAgaWYgKEpTT04ucGFyc2UocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb21wU3RhdHVzICA9ICcnO1xuICAgICAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ3JldHJvcmVmdW5kY29uZmlybWF0aW9ucGFnZSc7XG4gICAgICAgICAgICB0aGlzLnJlZnVuZFJlZmVyZW5jZSA9SlNPTi5wYXJzZShyZXNwb25zZSkucmVmdW5kX3JlZmVyZW5jZTtcbiAgICAgICAgICAgIGlmKEpTT04ucGFyc2UocmVzcG9uc2UpLnJlZnVuZF9hbW91bnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZWZ1bmRBbW91bnQgPSBKU09OLnBhcnNlKHJlc3BvbnNlKS5yZWZ1bmRfYW1vdW50O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH1cblxuICBzZWxlY3RSYWRpb0J1dHRvbihrZXksIHZhbHVlKSB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJteXJhZGlvXCIsIGtleSk7XG4gICAgY29uc3QgcmVtaXNzaW9uY3RybHM9dGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzO1xuICAgIHJlbWlzc2lvbmN0cmxzWydyZWZ1bmRERFJlYXNvbiddLnNldFZhbHVlKCdTZWxlY3QgYSBkaWZmZXJlbnQgcmVhc29uJywge29ubHlTZWxmOiB0cnVlfSk7XG4gICAgcmVtaXNzaW9uY3RybHNbJ3JlYXNvbiddLnJlc2V0KCk7XG4gICAgdGhpcy5pc1JlZnVuZFJlYXNvbnNTZWxlY3RlZCA9IHRydWU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmlzUmVhc29uRW1wdHkgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dSZWFzb25UZXh0ID0gZmFsc2U7XG4gICAgdGhpcy5yZWZ1bmRIYXNFcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24gPSBrZXk7XG4gICAgaWYodGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbi5pbmNsdWRlcygnT3RoZXInKSkge1xuICAgICAgdGhpcy5zaG93UmVhc29uVGV4dCA9IHRydWU7XG4gICAgICB0aGlzLnJlZnVuZEhhc0Vycm9yID0gZmFsc2U7XG4gICAgICB0aGlzLnJlZnVuZFJlYXNvbiA9IGtleTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RjaGFuZ2UoYXJncykge1xuICAgIGNvbnN0IHJlbWlzc2lvbmN0cmxzPXRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scztcbiAgICByZW1pc3Npb25jdHJsc1sncmVmdW5kUmVhc29uJ10ucmVzZXQoKTtcbiAgICByZW1pc3Npb25jdHJsc1sncmVhc29uJ10ucmVzZXQoKTtcbiAgICB0aGlzLmlzUmVmdW5kUmVhc29uc1NlbGVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5zaG93UmVhc29uVGV4dCA9IGZhbHNlO1xuICAgIHRoaXMucmVmdW5kSGFzRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uID0gYXJncy50YXJnZXQub3B0aW9uc1thcmdzLnRhcmdldC5vcHRpb25zLnNlbGVjdGVkSW5kZXhdLmlkO1xuICAgIHRoaXMucmVhc29uTGVuZ3RoID0gKDI5LXRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24uc3BsaXQoJy0gJylbMV0ubGVuZ3RoKTtcblxuICAgIGlmKHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24uaW5jbHVkZXMoJ090aGVyJykpIHtcbiAgICAgIHRoaXMuc2hvd1JlYXNvblRleHQgPSB0cnVlO1xuICAgICAgdGhpcy5yZWZ1bmRIYXNFcnJvciA9IGZhbHNlO1xuICAgICAgdGhpcy5yZWZ1bmRSZWFzb24gPSBhcmdzLnRhcmdldC5vcHRpb25zW2FyZ3MudGFyZ2V0Lm9wdGlvbnMuc2VsZWN0ZWRJbmRleF0uaWQ7XG4gICAgfVxuXG5cbiAgfVxuICBnZXRDb250YWN0RGV0YWlscyhvYmo6SVJlZnVuZENvbnRhY3REZXRhaWxzLCB0eXBlKSB7XG4gICAgdGhpcy5jb250YWN0RGV0YWlsc09iaiA9IG9iajtcbiAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJyc7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gdHlwZTtcbiAgfVxuXG4gIGdvdG9TZXJ2aWNlUmVxdWVzdFBhZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0nJztcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICh0aGlzLmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSAmJiAhdGhpcy5pc0Zyb21QYXltZW50RGV0YWlsUGFnZSkge1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdvcmRlci1mdWxsLXZpZXcnO1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICB9IGVsc2UgaWYgKCB0aGlzLmlzRnJvbVJlZnVuZExpc3RQYWdlICkge1xuICAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNjYW5jZWxDbGlja2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWZ1bmRMaXN0UmVhc29uLmVtaXQoe3JlYXNvbjogdGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbiwgY29kZTogdGhpcy5yZWZ1bmRSZWFzb259KTtcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVJlZnVuZFN0YXR1c1BhZ2UgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudE1ldGhvZCA9IHRoaXMucGF5bWVudC5tZXRob2Q7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudEdyb3VwUmVmZXJlbmNlID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZVxuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRSZWZlcmVuY2UgPSB0aGlzLnBheW1lbnQucmVmZXJlbmNlO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3BheW1lbnQtdmlldyc7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldE9yZGVyUmVmKHRoaXMub3JkZXJSZWYpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlckNDREV2ZW50KHRoaXMub3JkZXJDQ0RFdmVudCk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyQ3JlYXRlZCh0aGlzLm9yZGVyQ3JlYXRlZCk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyRGV0YWlsKHRoaXMub3JkZXJEZXRhaWwpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlclBhcnR5KHRoaXMub3JkZXJQYXJ0eSk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyVG90YWxQYXltZW50cyh0aGlzLm9yZGVyVG90YWxQYXltZW50cyk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyUmVtaXNzaW9uVG90YWwodGhpcy5vcmRlclJlbWlzc2lvblRvdGFsKTtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJGZWVzVG90YWwodGhpcy5vcmRlckZlZXNUb3RhbCk7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAncGF5bWVudC12aWV3JztcbiAgICAgIHRoaXMuc2VuZE9yZGVyRGV0YWlsID0gdGhpcy5vcmRlckRldGFpbDtcbiAgICAgIHRoaXMuc2VuZE9yZGVyUmVmID0gdGhpcy5vcmRlclJlZjtcbiAgICAgIGlmKHRoaXMuTE9HR0VESU5VU0VSUk9MRVMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldFVzZXJSb2xlc0xpc3QoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHRoaXMuTE9HR0VESU5VU0VSUk9MRVMgPSBkYXRhKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICB9XG4gICAgLy8gaWYgKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9PT0gdW5kZWZpbmVkICYmIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5TRVJWSUNFUkVRVUVTVCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VSVklDRVJFUVVFU1QgPSAnZmFsc2UnO1xuICAgIC8vICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID0gZmFsc2U7XG4gICAgLy8gfVxuICAgIC8vIGlmICh0aGlzLmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSkge1xuICAgIC8vICAgLy90aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPSBmYWxzZTtcbiAgICAvLyAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlID0gZmFsc2U7XG4gICAgLy8gICB0aGlzLnZpZXdTdGF0dXMgPSAnbWFpbidcbiAgICAvLyAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgLy8gICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSh0cnVlKTtcbiAgICAvLyAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0bmF2aWdhdGlvblBhZ2UoJ3NlcnZpY2VyZXF1ZXN0cGFnZScpO1xuICAgIC8vIH1cbiAgICAvLyBpZiAoIHRoaXMuaXNGcm9tUmVmdW5kTGlzdFBhZ2UgKSB7XG4gICAgLy8gICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNjYW5jZWxDbGlja2VkID0gdHJ1ZTtcbiAgICAvLyAgIHRoaXMucmVmdW5kTGlzdFJlYXNvbi5lbWl0KHtyZWFzb246IHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24sIGNvZGU6IHRoaXMucmVmdW5kUmVhc29ufSk7XG4gICAgLy8gICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSA9IHRydWU7XG4gICAgLy8gfSBcbiAgICAvLyBpZighdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVJlZnVuZFN0YXR1c1BhZ2UpICB7XG4gICAgLy8gICAgIGlmKHRoaXMucGF5bWVudCkge1xuICAgIC8vICAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0cGF5bWVudFBhZ2VWaWV3KHttZXRob2Q6IHRoaXMucGF5bWVudC5tZXRob2QscGF5bWVudF9ncm91cF9yZWZlcmVuY2U6IHRoaXMucGF5bWVudEdyb3VwUmVmLCByZWZlcmVuY2U6dGhpcy5wYXltZW50LnJlZmVyZW5jZX0pO1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGlmICh0aGlzLmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSkgeyBcbiAgICAvLyAgICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG5hdmlnYXRpb25QYWdlKCdzZXJ2aWNlcmVxdWVzdHBhZ2UnKTtcbiAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG5hdmlnYXRpb25QYWdlKCdwYXltZW50ZGV0YWlsc3BhZ2UnKTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIC8vICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgIC8vICAgICAvLyB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPSB0cnVlO1xuICAgIC8vICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGID0gdGhpcy5pc1R1cm5PZmY7XG4gICAgLy8gICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU05FV1BDSVBBTE9GRiA9IHRoaXMuaXNOZXdQY2lwYWxPZmY7XG4gICAgLy8gICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU09MRFBDSVBBTE9GRiA9IHRoaXMuaXNPbGRQY2lwYWxPZmY7XG4gICAgLy8gICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UgPSB0cnVlOyAgXG4gICAgLy8gICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gdHJ1ZTtcbiAgICAvLyAgICAgbGV0IHBhcnRVcmwgPSB0aGlzLmJzUGF5bWVudERjbk51bWJlciA/IGAmZGNuPSR7dGhpcy5ic1BheW1lbnREY25OdW1iZXJ9YCA6ICcnO1xuICAgIC8vICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID8gJyZpc0J1bGtTY2FubmluZz1FbmFibGUnIDogJyZpc0J1bGtTY2FubmluZz1EaXNhYmxlJztcbiAgICAvLyAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGID8gJyZpc1R1cm5PZmY9RW5hYmxlJyA6ICcmaXNUdXJuT2ZmPURpc2FibGUnO1xuICAgIC8vICAgICBwYXJ0VXJsICs9IHRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUgPyAnJmlzU3RGaXhFbmFibGU9RW5hYmxlJyA6ICcmaXNTdEZpeEVuYWJsZT1EaXNhYmxlJztcbiAgICAvLyAgICAgcGFydFVybCArPSBgJmNhc2VUeXBlPSR7dGhpcy5jYXNlVHlwZX1gO1xuICAgIC8vICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU05FV1BDSVBBTE9GRiA/ICcmaXNOZXdQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNOZXdQY2lwYWxPZmY9RGlzYWJsZSc7XG4gICAgLy8gICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTT0xEUENJUEFMT0ZGID8gJyZpc09sZFBjaXBhbE9mZj1FbmFibGUnIDogJyZpc09sZFBjaXBhbE9mZj1EaXNhYmxlJztcbiAgICAvLyAgICAgaWYodGhpcy5pc0Zyb21QYXltZW50RGV0YWlsUGFnZSkge1xuICAgIC8vICAgICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVBheW1lbnREZXRhaWxQYWdlXG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgaWYoIXRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCkge1xuICAgIC8vICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9IHVuZGVmaW5lZDtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICBpZiAoIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5TRVJWSUNFUkVRVUVTVCkge1xuICAgIC8vICAgICAgIGNvbnN0IHVybCA9IGAvcGF5bWVudC1oaXN0b3J5LyR7dGhpcy5jY2RDYXNlTnVtYmVyfT92aWV3PWNhc2UtdHJhbnNhY3Rpb25zJnNlbGVjdGVkT3B0aW9uPSR7dGhpcy5vcHRpb259JHtwYXJ0VXJsfWA7XG4gICAgLy8gICAgICAgdGhpcy5yb3V0ZXIucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZFJldXNlUm91dGUgPSAoKSA9PiBmYWxzZTtcbiAgICAvLyAgICAgICB0aGlzLnJvdXRlci5vblNhbWVVcmxOYXZpZ2F0aW9uID0gJ3JlbG9hZCc7XG4gICAgLy8gICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xuICAgIC8vICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgIGNvbnN0IHVybCA9IGAvcGF5bWVudC1oaXN0b3J5LyR7dGhpcy5jY2RDYXNlTnVtYmVyfT92aWV3PWNhc2UtdHJhbnNhY3Rpb25zJnRha2VQYXltZW50PSR7dGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UfSZzZWxlY3RlZE9wdGlvbj0ke3RoaXMub3B0aW9ufSR7cGFydFVybH1gO1xuICAgIC8vICAgICAgIHRoaXMucm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gKCkgPT4gZmFsc2U7XG4gICAgLy8gICAgICAgdGhpcy5yb3V0ZXIub25TYW1lVXJsTmF2aWdhdGlvbiA9ICdyZWxvYWQnO1xuICAgIC8vICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsKTtcbiAgICAvLyAgICAgfVxuICAgICAgIFxuICAgIC8vIH0gZWxzZSB7XG4gICAgLy8gICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPT09ICdyZWZ1bmRzdGF0dXNsaXN0JztcbiAgICAvLyAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlID0gdHJ1ZTtcbiAgICAvLyB9XG4gIH1cbiAgZ290b0FkZHJlc3NQYWdlKG5vdGU/OiBJUmVmdW5kQ29udGFjdERldGFpbHMpIHtcbiAgICBpZiAobm90ZSkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb24gPSB7IGNvbnRhY3RfZGV0YWlsczogbm90ZSwgbm90aWZpY2F0aW9uX3R5cGU6IG5vdGUubm90aWZpY2F0aW9uX3R5cGUgfTtcbiAgICB9XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJ2FkZHJlZnVuZGZvcnJlbWlzc2lvbic7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJyc7XG4gICAgdGhpcy5pc1JlZnVuZFJlbWlzc2lvbiA9IHRydWU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBmYWxzZTtcbiAgfVxuICBnb3RvUmVtaXNzaW9uU3VjY2VzcyhldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICcnO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdyZXRyb3JlbWlzc2lvbmNvbmZpcm1hdGlvbnBhZ2UnO1xuICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24gPSB0cnVlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZmFsc2U7XG4gIH1cblxuICBnb3RvQ2FzZXRyYW5zYXRpb25QYWdlKCkge1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0bmF2aWdhdGlvblBhZ2UoJ2Nhc2V0cmFuc2FjdGlvbnMnKTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlZJRVcgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1RVUk5PRkYgPSB0aGlzLmlzVHVybk9mZjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNORVdQQ0lQQUxPRkYgPSB0aGlzLmlzTmV3UGNpcGFsT2ZmO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU09MRFBDSVBBTE9GRiA9IHRoaXMuaXNPbGRQY2lwYWxPZmY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSA9IHRydWU7ICBcbiAgICB0aGlzLnJlc2V0T3JkZXJEYXRhKCk7XG4gICAgbGV0IHBhcnRVcmwgPSB0aGlzLmJzUGF5bWVudERjbk51bWJlciA/IGAmZGNuPSR7dGhpcy5ic1BheW1lbnREY25OdW1iZXJ9YCA6ICcnO1xuICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID8gJyZpc0J1bGtTY2FubmluZz1FbmFibGUnIDogJyZpc0J1bGtTY2FubmluZz1EaXNhYmxlJztcbiAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGID8gJyZpc1R1cm5PZmY9RW5hYmxlJyA6ICcmaXNUdXJuT2ZmPURpc2FibGUnO1xuICAgICBwYXJ0VXJsICs9IHRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUgPyAnJmlzU3RGaXhFbmFibGU9RW5hYmxlJyA6ICcmaXNTdEZpeEVuYWJsZT1EaXNhYmxlJztcbiAgICAgcGFydFVybCArPSBgJmNhc2VUeXBlPSR7dGhpcy5jYXNlVHlwZX1gO1xuICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU05FV1BDSVBBTE9GRiA/ICcmaXNOZXdQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNOZXdQY2lwYWxPZmY9RGlzYWJsZSc7XG4gICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTT0xEUENJUEFMT0ZGID8gJyZpc09sZFBjaXBhbE9mZj1FbmFibGUnIDogJyZpc09sZFBjaXBhbE9mZj1EaXNhYmxlJztcbiAgICBjb25zdCB1cmwgPSBgL3BheW1lbnQtaGlzdG9yeS8ke3RoaXMuY2NkQ2FzZU51bWJlcn0/dmlldz1jYXNlLXRyYW5zYWN0aW9ucyZ0YWtlUGF5bWVudD0ke3RoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVH0mc2VsZWN0ZWRPcHRpb249JHt0aGlzLm9wdGlvbn0ke3BhcnRVcmx9YDtcbiAgICB0aGlzLnJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkUmV1c2VSb3V0ZSA9ICgpID0+IGZhbHNlO1xuICAgIHRoaXMucm91dGVyLm9uU2FtZVVybE5hdmlnYXRpb24gPSAncmVsb2FkJztcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybCk7XG4gIH1cblxuICBnb3RvQ2FzZXRyYW5zYXRpb25QYWdlQ2FuY2VsQnRuQ2xpY2tlZChldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmKCAhdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSkge1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRuYXZpZ2F0aW9uUGFnZSgnY2FzZXRyYW5zYWN0aW9ucycpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UoZmFsc2UpO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlZJRVcgPSdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSB0cnVlO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldyA9IGZhbHNlO1xuICAvLyAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0bmF2aWdhdGlvblBhZ2UoJ2Nhc2V0cmFuc2FjdGlvbnMnKTtcbiAgLy8gICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZShmYWxzZSk7XG4gIC8vICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlZJRVcgPSdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gIC8vICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgLy8gICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHRydWU7XG4gIC8vICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldyA9IGZhbHNlO1xuICAvLyAgIHRoaXMucmVzZXRPcmRlckRhdGEoKTsgbGV0IHBhcnRVcmwgPSB0aGlzLmJzUGF5bWVudERjbk51bWJlciA/IGAmZGNuPSR7dGhpcy5ic1BheW1lbnREY25OdW1iZXJ9YCA6ICcnO1xuICAvLyAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPyAnJmlzQnVsa1NjYW5uaW5nPUVuYWJsZScgOiAnJmlzQnVsa1NjYW5uaW5nPURpc2FibGUnO1xuICAvLyAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJztcbiAgLy8gICBwYXJ0VXJsICs9IHRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUgPyAnJmlzU3RGaXhFbmFibGU9RW5hYmxlJyA6ICcmaXNTdEZpeEVuYWJsZT1EaXNhYmxlJztcbiAgLy8gICBwYXJ0VXJsICs9IGAmY2FzZVR5cGU9JHt0aGlzLmNhc2VUeXBlfWA7XG4gIC8vICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNORVdQQ0lQQUxPRkYgPyAnJmlzTmV3UGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzTmV3UGNpcGFsT2ZmPURpc2FibGUnO1xuICAvLyAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTT0xEUENJUEFMT0ZGID8gJyZpc09sZFBjaXBhbE9mZj1FbmFibGUnIDogJyZpc09sZFBjaXBhbE9mZj1EaXNhYmxlJztcbiAgLy8gIGNvbnN0IHVybCA9IGAvcGF5bWVudC1oaXN0b3J5LyR7dGhpcy5jY2RDYXNlTnVtYmVyfT92aWV3PWNhc2UtdHJhbnNhY3Rpb25zJnRha2VQYXltZW50PSR7dGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UfSZzZWxlY3RlZE9wdGlvbj0ke3RoaXMub3B0aW9ufSR7cGFydFVybH1gO1xuICAvLyAgdGhpcy5yb3V0ZXIucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZFJldXNlUm91dGUgPSAoKSA9PiBmYWxzZTtcbiAgLy8gIHRoaXMucm91dGVyLm9uU2FtZVVybE5hdmlnYXRpb24gPSAncmVsb2FkJztcbiAgLy8gIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsKTtcbiAgICB9IGVsc2UgeyAgXG5cbiAgICBpZiAodGhpcy5wYXltZW50TGliQ29tcG9uZW50LlJFRlVORExJU1QpIHtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdyZWZ1bmQtbGlzdCc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VSVklDRVJFUVVFU1QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFUlZJQ0VSRVFVRVNUID0gJ2ZhbHNlJztcbiAgICB9XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UoZmFsc2UpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0cGF5bWVudFBhZ2VWaWV3KHttZXRob2Q6ICcnLHBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlOiAnJywgcmVmZXJlbmNlOicnfSk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRuYXZpZ2F0aW9uUGFnZSgnY2FzZXRyYW5zYWN0aW9ucycpO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGID0gdGhpcy5pc1R1cm5PZmY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTTkVXUENJUEFMT0ZGID0gdGhpcy5pc05ld1BjaXBhbE9mZjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNPTERQQ0lQQUxPRkYgPSB0aGlzLmlzT2xkUGNpcGFsT2ZmO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UgPSB0cnVlOyAgXG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSB0cnVlO1xuICAgIGxldCBwYXJ0VXJsID0gdGhpcy5ic1BheW1lbnREY25OdW1iZXIgPyBgJmRjbj0ke3RoaXMuYnNQYXltZW50RGNuTnVtYmVyfWAgOiAnJztcbiAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA/ICcmaXNCdWxrU2Nhbm5pbmc9RW5hYmxlJyA6ICcmaXNCdWxrU2Nhbm5pbmc9RGlzYWJsZSc7XG4gICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJztcbiAgICAgcGFydFVybCArPSB0aGlzLmlzU3RyYXRlZ2ljRml4RW5hYmxlID8gJyZpc1N0Rml4RW5hYmxlPUVuYWJsZScgOiAnJmlzU3RGaXhFbmFibGU9RGlzYWJsZSc7XG4gICAgIHBhcnRVcmwgKz0gYCZjYXNlVHlwZT0ke3RoaXMuY2FzZVR5cGV9YDtcbiAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNORVdQQ0lQQUxPRkYgPyAnJmlzTmV3UGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzTmV3UGNpcGFsT2ZmPURpc2FibGUnO1xuICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU09MRFBDSVBBTE9GRiA/ICcmaXNPbGRQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNPbGRQY2lwYWxPZmY9RGlzYWJsZSc7XG4gICAgIGlmKHRoaXMuaXNGcm9tUGF5bWVudERldGFpbFBhZ2UpIHtcbiAgICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21QYXltZW50RGV0YWlsUGFnZVxuICAgICB9XG5cbiAgICAgaWYoIXRoaXMucGF5bWVudExpYkNvbXBvbmVudC5TRVJWSUNFUkVRVUVTVCkge1xuICAgICAgY29uc3QgdXJsID0gYC9wYXltZW50LWhpc3RvcnkvJHt0aGlzLmNjZENhc2VOdW1iZXJ9P3ZpZXc9Y2FzZS10cmFuc2FjdGlvbnMmdGFrZVBheW1lbnQ9JHt0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlR9JnNlbGVjdGVkT3B0aW9uPSR7dGhpcy5vcHRpb259JHtwYXJ0VXJsfWA7XG4gICAgICB0aGlzLnJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkUmV1c2VSb3V0ZSA9ICgpID0+IGZhbHNlO1xuICAgICAgdGhpcy5yb3V0ZXIub25TYW1lVXJsTmF2aWdhdGlvbiA9ICdyZWxvYWQnO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xuICAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdXJsID1gL3BheW1lbnQtaGlzdG9yeS8ke3RoaXMuY2NkQ2FzZU51bWJlcn0/c2VsZWN0ZWRPcHRpb249JHt0aGlzLm9wdGlvbn0ke3BhcnRVcmx9YDtcbiAgICAgIHRoaXMucm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gKCkgPT4gZmFsc2U7XG4gICAgICB0aGlzLnJvdXRlci5vblNhbWVVcmxOYXZpZ2F0aW9uID0gJ3JlbG9hZCc7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybCk7XG4gICAgIH1cbiAgICB9XG4gICAgXG4gIH1cblxuICByZXNldE9yZGVyRGF0YSgpIHtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldE9yZGVyUmVmKG51bGwpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJDQ0RFdmVudChudWxsKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyQ3JlYXRlZChudWxsKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyRGV0YWlsKG51bGwpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJQYXJ0eShudWxsKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyVG90YWxQYXltZW50cyhudWxsKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyUmVtaXNzaW9uVG90YWwobnVsbCk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlckZlZXNUb3RhbChudWxsKTtcbiAgfVxuXG5cbiAgZ2V0Rm9ybWF0dGVkQ3VycmVuY3koY3VycmVuY3k6bnVtYmVyKXtcbiAgICBpZihjdXJyZW5jeS50b1N0cmluZygpLmluY2x1ZGVzKFwiLlwiKSl7XG4gICAgICByZXR1cm4gY3VycmVuY3lcbiAgICB9XG4gICAgIHJldHVybiBjdXJyZW5jeS50b1N0cmluZygpLmNvbmNhdChcIi4wMFwiKTtcbiAgfVxuICBcbn0iXX0=
|
|
1560
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXJlbWlzc2lvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AaG1jdHMvY2NwYXktd2ViLWNvbXBvbmVudC8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2FkZC1yZW1pc3Npb24vYWRkLXJlbWlzc2lvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFFLFdBQVcsRUFBYSxVQUFVLEVBQUUsV0FBVyxFQUFnQyxNQUFNLGdCQUFnQixDQUFDO0FBRS9HLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN0RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFeEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFckYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDckYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDL0YsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWhELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOztNQUdoRSxjQUFjLEdBQUcsdUJBQXVCOztNQUN4QyxlQUFlLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFPN0MsTUFBTSxPQUFPLHFCQUFxQjs7Ozs7Ozs7OztJQXNHaEMsWUFBb0IsV0FBd0IsRUFDbEMs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Q0FBUzs7SUFDVCx5Q0FBdUI7O0lBQ3ZCLGtEQUEwQjs7SUFDMUIsZ0RBQXdCOztJQUN4QiwyQ0FBb0I7O0lBQ3BCLG9EQUE0Qjs7SUFDNUIsa0RBQTJCOztJQUMzQiw0Q0FBb0I7O0lBQ3BCLDZDQUE0Qjs7SUFDNUIsa0RBQTJCOztJQUMzQixtREFBNEI7O0lBQzVCLHVEQUErQjs7SUFFL0IsMENBQXdYOzs7OztJQUU1Vyw0Q0FBZ0M7Ozs7O0lBQzFDLHVDQUFzQjs7Ozs7SUFDdEIsbURBQThDOzs7OztJQUM5QyxvREFBZ0Q7Ozs7O0lBQ2hELDhDQUFxQzs7Ozs7SUFDckMsbUNBQTZCOzs7OztJQUM3QixrREFBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIEZvcm1Db250cm9sLCBSZXF1aXJlZFZhbGlkYXRvciwgRm9ybUFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSUZlZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUZlZSc7XG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFkZFJlbWlzc2lvblJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0FkZFJlbWlzc2lvblJlcXVlc3QnO1xuaW1wb3J0IHsgUGF5bWVudFZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7IFBheW1lbnRMaWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSVBheW1lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50JztcbmltcG9ydCB7IFJlZnVuZHNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVmdW5kcy9yZWZ1bmRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgSVJlZnVuZFJlYXNvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZWZ1bmRSZWFzb25zJztcbmltcG9ydCB7IEFkZFJldHJvUmVtaXNzaW9uUmVxdWVzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvQWRkUmV0cm9SZW1pc3Npb25SZXF1ZXN0JztcbmltcG9ydCB7IElSZWZ1bmRDb250YWN0RGV0YWlscyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlZnVuZENvbnRhY3REZXRhaWxzJztcbmltcG9ydCB7IFBvc3RSZWZ1bmRSZXRyb1JlbWlzc2lvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvUG9zdFJlZnVuZFJldHJvUmVtaXNzaW9uJztcbmltcG9ydCB7IFBvc3RJc3N1ZVJlZnVuZFJldHJvUmVtaXNzaW9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9Qb3N0SXNzdWVSZWZ1bmRSZXRyb1JlbWlzc2lvbic7XG5pbXBvcnQge0NoYW5nZURldGVjdG9yUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElSZW1pc3Npb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZW1pc3Npb24nO1xuaW1wb3J0IHsgT3JkZXJzbGlzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vcmRlcnNsaXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgSVBheW1lbnRHcm91cCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnRHcm91cCc7XG5cbmNvbnN0IEJTX0VOQUJMRV9GTEFHID0gJ2J1bGstc2Nhbi1lbmFibGluZy1mZSc7XG5jb25zdCByZXNvbHZlZFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LWFkZC1yZW1pc3Npb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLXJlbWlzc2lvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FkZC1yZW1pc3Npb24uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBBZGRSZW1pc3Npb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBmZWU6IElGZWU7XG4gIEBJbnB1dCgpIGZlZXM6IGFueSBbXTtcbiAgQElucHV0KCkgcGF5bWVudDogSVBheW1lbnQ7XG4gIEBJbnB1dCgpIHJlbWlzc2lvbjogSVJlbWlzc2lvbjtcbiAgQElucHV0KCkgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBASW5wdXQoKSBjYXNlVHlwZTogc3RyaW5nO1xuICBASW5wdXQoKSB2aWV3Q29tcFN0YXR1czogc3RyaW5nO1xuICBASW5wdXQoKSBwYXltZW50R3JvdXBSZWY6IHN0cmluZztcbiAgQElucHV0KCkgaXNUdXJuT2ZmOiBib29sZWFuO1xuICBASW5wdXQoKSBpc1JlZnVuZFJlbWlzc2lvbjogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNPbGRQY2lwYWxPZmY6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzTmV3UGNpcGFsT2ZmOiBib29sZWFuO1xuICBASW5wdXQoKSBpc1N0cmF0ZWdpY0ZpeEVuYWJsZTogYm9vbGVhbjtcbiAgQElucHV0KCkgcGFpZEFtb3VudDogYW55O1xuICBASW5wdXQoKSBpc0Zyb21SZWZ1bmRMaXN0UGFnZTogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNGcm9tUGF5bWVudERldGFpbFBhZ2U6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZTogYm9vbGVhbjtcbiAgQElucHV0KCkgZmVlYW1vdW50OiBudW1iZXI7XG4gIEBJbnB1dCgnTE9HR0VESU5VU0VSUk9MRVMnKSBMT0dHRURJTlVTRVJST0xFUzogc3RyaW5nW107XG4gIEBJbnB1dCgnb3JkZXJEZXRhaWwnKSBvcmRlckRldGFpbDogYW55W107XG4gIEBJbnB1dCgnb3JkZXJSZWYnKSBvcmRlclJlZjogc3RyaW5nO1xuICBASW5wdXQoJ29yZGVyU3RhdHVzJykgb3JkZXJTdGF0dXM6IHN0cmluZztcbiAgQElucHV0KCdvcmRlclBhcnR5Jykgb3JkZXJQYXJ0eTogc3RyaW5nO1xuICBASW5wdXQoJ29yZGVyQ3JlYXRlZCcpIG9yZGVyQ3JlYXRlZDogRGF0ZTtcbiAgQElucHV0KCdvcmRlckNDREV2ZW50Jykgb3JkZXJDQ0RFdmVudDogc3RyaW5nO1xuICBASW5wdXQoJ3Rha2VwYXltZW50JykgdGFrZVBheW1lbnQ6IGJvb2xlYW47XG4gIEBJbnB1dCgnb3JkZXJGZWVzVG90YWwnKSBvcmRlckZlZXNUb3RhbDogbnVtYmVyO1xuICBASW5wdXQoJ29yZGVyVG90YWxQYXltZW50cycpIG9yZGVyVG90YWxQYXltZW50czogbnVtYmVyO1xuICBASW5wdXQoJ29yZGVyUmVtaXNzaW9uVG90YWwnKSBvcmRlclJlbWlzc2lvblRvdGFsOiBudW1iZXI7XG4gIEBPdXRwdXQoKSBjYW5jZWxSZW1pc3Npb246IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgLy9AT3V0cHV0KCkgcmVmdW5kTGlzdFJlYXNvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKHtyZWFzb246c3RyaW5nLCBjb2RlOnN0cmluZ30pO1xuICBAT3V0cHV0KCkgcmVmdW5kTGlzdFJlYXNvbiA9IG5ldyBFdmVudEVtaXR0ZXI8e3JlYXNvbjogc3RyaW5nLCBjb2RlOiBzdHJpbmd9PigpO1xuICBAT3V0cHV0KCkgcmVmdW5kTGlzdEFtb3VudDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcmVmdW5kID0ge1xuICAgIHJlYXNvbjoge1xuICAgICAgZHVwbGljYXRlOiAnRHVwbGljYXRlIHBheW1lbnQnLFxuICAgICAgaHVtYW5lcnJvcjogJ0h1bWFuIGVycm9yJyxcbiAgICAgIGNhc2VXaXRoZHJhd246ICdDYXNlIHdpdGhkcmF3bicsXG4gICAgICBvdGhlcjogJ090aGVyJ1xuICAgIH1cbiAgfVxuICBjb250YWN0RGV0YWlsc09iajogSVJlZnVuZENvbnRhY3REZXRhaWxzO1xuICBub3RpZmljYXRpb246IGFueTtcbiAgcmVtaXNzaW9uRm9ybTogRm9ybUdyb3VwO1xuICBoYXNFcnJvcnMgPSBmYWxzZTtcbiAgdmlld1N0YXR1cyA9ICdtYWluJztcbiAgZXJyb3JNZXNzYWdlID0gbnVsbDtcbiAgb3B0aW9uOiBzdHJpbmcgPSBudWxsO1xuICBpc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIGJzUGF5bWVudERjbk51bWJlcjogc3RyaW5nO1xuICBzZWxlY3RlZFZhbHVlID0gJ3llcyc7XG4gIGFtb3VudDogYW55O1xuICByZXRyb1JlbWlzc2lvbjogYm9vbGVhbiA9IGZhbHNlO1xuICByZW1pc3Npb25SZWZlcmVuY2U6IHN0cmluZyA9ICcnO1xuICByZWZ1bmRSZWZlcmVuY2U6IHN0cmluZztcbiAgcmVmdW5kQW1vdW50OiBzdHJpbmc7XG4gIHBheW1lbnRFeHBsYW5hdGlvbkhhc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHJlZnVuZFJlYXNvbjpzdHJpbmc7XG4gIHNlbGVjdGVkUmVmdW5kUmVhc29uOiBzdHJpbmc7XG4gIGRpc3BsYXlSZWZ1bmRSZWFzb246IHN0cmluZztcbiAgcmVmdW5kQ29kZTpzdHJpbmc7XG4gIHJlbWVzc2lvblBheW1lbnQ6SVBheW1lbnQ7XG4gIGlzUmVtaXNzaW9uQ29kZUVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIHJlbWlzc2lvbkNvZGVIYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0Ftb3VudEVtcHR5OiBib29sZWFuID0gZmFsc2U7XG4gIGlzUmVhc29uRW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgYW1vdW50SGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNSZW1pc3Npb25MZXNzVGhhbkZlZUVycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIHJlZnVuZEhhc0Vycm9yOmJvb2xlYW4gPSBmYWxzZTtcbiAgaXNQYXltZW50U3VjY2VzczogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1JlbWlzc2lvbkFwcGxpZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVtaXNzaW9uYW10Om51bWJlcjtcbiAgZWxlbWVudElkOmFueTtcbiAgLy8gcmVmdW5kUmVhc29uczogYW55W10gPSBbXTtcbiAgY29tbW9uUmVmdW5kUmVhc29uczogYW55W10gPSBbXTtcbiAgc2hvd1JlYXNvblRleHQ6IGJvb2xlYW47XG4gIGlzUmVmdW5kUmVhc29uc1NlbGVjdGVkOiBib29sZWFuO1xuICBkZWZhdWx0OiBzdHJpbmc7XG4gIHJlYXNvbkxlbmd0aDogbnVtYmVyO1xuICByZWZ1bmRSZWFzb25zOklSZWZ1bmRSZWFzb25zW107XG4gIHBhdHRlcm4xOiBzdHJpbmc7XG4gIHBhdHRlcm4yOiBzdHJpbmc7XG4gIHNlbmRPcmRlckRldGFpbDogYW55W107XG4gIHNlbmRPcmRlclJlZjogc3RyaW5nO1xuICBwYXltZW50UmVmZXJlbmNlIDogc3RyaW5nO1xuICBjbGFzcz0nJztcbiAgZXJyb3JNc2cgPSBuZXcgQXJyYXkoKTtcbiAgdG90YWxSZWZ1bmRBbW91bnQ6IG51bWJlcjtcbiAgcXVhbnRpdHlVcGRhdGVkOiBudW1iZXI7XG4gIGZ1bGxSZWZ1bmQ6IGJvb2xlYW47XG4gIGFsbG93ZWRSZWZ1bmRBbW91bnQ6IG51bWJlcjtcbiAgaXNSZW1pc3Npb25zTWF0Y2g6IGJvb2xlYW47XG4gIHBheW1lbnRGZWVzOiBJRmVlW107XG4gIHBheW1lbnRHcm91cDogSVBheW1lbnRHcm91cDtcbiAgaXNTdGF0dXNBbGxvY2F0ZWQ6IGJvb2xlYW47XG4gIGlzRnJvbUNoZWNrQW5zUGFnZTogYm9vbGVhbjtcbiAgcmVmdW5kQW10Rm9yRmVlVm9sdW1lczogbnVtYmVyO1xuICBcbiAgY29tcG9uZW50OiB7IGFjY291bnRfbnVtYmVyOiBzdHJpbmc7IGFtb3VudDogbnVtYmVyOyBjYXNlX3JlZmVyZW5jZTogc3RyaW5nOyBjY2RfY2FzZV9udW1iZXI6IHN0cmluZzsgY2hhbm5lbDogc3RyaW5nOyBjdXJyZW5jeTogc3RyaW5nOyBjdXN0b21lcl9yZWZlcmVuY2U6IHN0cmluZzsgZGF0ZV9jcmVhdGVkOiBzdHJpbmc7IGRhdGVfdXBkYXRlZDogc3RyaW5nOyBkZXNjcmlwdGlvbjogc3RyaW5nOyBtZXRob2Q6IHN0cmluZzsgb3JnYW5pc2F0aW9uX25hbWU6IHN0cmluZzsgcGF5bWVudF9hbGxvY2F0aW9uOiBhbnlbXTsgcmVmZXJlbmNlOiBzdHJpbmc7IHNlcnZpY2VfbmFtZTogc3RyaW5nOyBzaXRlX2lkOiBzdHJpbmc7IHN0YXR1czogc3RyaW5nOyB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBwYXltZW50Vmlld1NlcnZpY2U6IFBheW1lbnRWaWV3U2VydmljZSxcbiAgICBwcml2YXRlIHBheW1lbnRMaWJDb21wb25lbnQ6IFBheW1lbnRMaWJDb21wb25lbnQsXG4gICAgcHJpdmF0ZSByZWZ1bmRTZXJ2aWNlOiBSZWZ1bmRzU2VydmljZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIE9yZGVyc2xpc3RTZXJ2aWNlOiBPcmRlcnNsaXN0U2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLmVycm9yTXNnID0gW107XG4gICAgdGhpcy5kZWZhdWx0ID0gJ1NlbGVjdCBhIGRpZmZlcmVudCByZWFzb24nO1xuICAgIHRoaXMucGF0dGVybjEgPSAnXihbYS16QS1aMC05XXszfSktKFthLXpBLVowLTldezN9KS0oW2EtekEtWjAtOV17M30pJCc7XG4gICAgdGhpcy5wYXR0ZXJuMiA9ICdeKFtBLVphLXpdezJ9WzAtOV17Mn0pLShbMC05XXs2fSkkJztcbiAgICBpZih0aGlzLnZpZXdDb21wU3RhdHVzICE9PSAnJyAmJiB0aGlzLnZpZXdDb21wU3RhdHVzICE9PSB1bmRlZmluZWQpe1xuICAgICAgdGhpcy52aWV3U3RhdHVzID0gJyc7XG4gICAgICB9XG4gICAgaWYodGhpcy5yZW1pc3Npb24pIHtcbiAgICB9XG4gICAgaWYodGhpcy5mZWUpIHtcbiAgICB0aGlzLmFtb3VudCA9ICh0aGlzLmZlZS52b2x1bWUgKiB0aGlzLmZlZS5jYWxjdWxhdGVkX2Ftb3VudCk7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLnBheW1lbnQpe1xuICAgICAgdGhpcy5wYXltZW50UmVmZXJlbmNlID0gdGhpcy5wYXltZW50LnJlZmVyZW5jZTtcbiAgICAgIHRoaXMucmVtZXNzaW9uUGF5bWVudCA9IHRoaXMucGF5bWVudDtcbiAgICAgIGlmKHRoaXMucGF5bWVudC5zdGF0dXMgPT09ICdTdWNjZXNzJykge1xuICAgICAgICB0aGlzLmlzUGF5bWVudFN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9wdGlvbiA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5TRUxFQ1RFRF9PUFRJT047XG4gICAgdGhpcy5ic1BheW1lbnREY25OdW1iZXIgPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNuO1xuICAgIHRoaXMucmVtaXNzaW9uRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgcmVtaXNzaW9uQ29kZTogbmV3IEZvcm1Db250cm9sKCcnLCBcbiAgICAgICAgVmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKGAoJHt0aGlzLnBhdHRlcm4xfSl8KCR7dGhpcy5wYXR0ZXJuMn0pYClcbiAgICAgIF0pIFxuICAgICAgKSxcbiAgICAgIGFtb3VudDogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1xuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICBWYWxpZGF0b3JzLnBhdHRlcm4oJ15bMC05XSsoXFwuWzAtOV17MSwyfSk/JCcpXG4gICAgICBdKSksXG4gICAgICByZWZ1bmRSZWFzb246IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSkpLFxuICAgICAgcmVmdW5kRERSZWFzb246IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5jb21wb3NlKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSkpLFxuICAgICAgcmVhc29uOiBuZXcgRm9ybUNvbnRyb2woKSxcbiAgICAgIGZlZUFtb3VudDogbmV3IEZvcm1Db250cm9sKCksXG4gICAgICBmZWVzTGlzdDogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSlcbiAgICB9KTtcbiAgICBjb25zdCByZW1pc3Npb25jdHJscz10aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHM7XG4gICAgcmVtaXNzaW9uY3RybHNbJ3JlZnVuZEREUmVhc29uJ10uc2V0VmFsdWUoJ1NlbGVjdCBhIGRpZmZlcmVudCByZWFzb24nLCB7b25seVNlbGY6IHRydWV9KTtcblxuICAgIGlmKHRoaXMuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlKSB7XG4gICAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5nZXRBcHBvcnRpb25QYXltZW50RGV0YWlscyh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudFJlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgICBwYXltZW50R3JvdXAgPT4ge1xuICAgICAgICAgIGxldCBmZWVzID0gW107XG4gICAgICAgICAgcGF5bWVudEdyb3VwLmZlZXMuZm9yRWFjaChmZWUgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc1JlbWlzc2lvbnNNYXRjaCA9IGZhbHNlO1xuICBcbiAgICAgICAgICAgIHBheW1lbnRHcm91cC5yZW1pc3Npb25zLmZvckVhY2gocmVtID0+IHtcbiAgICAgICAgICAgICAgaWYgKHJlbS5mZWVfY29kZSA9PT0gZmVlLmNvZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzUmVtaXNzaW9uc01hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBmZWVbJ3JlbWlzc2lvbnMnXSA9IHJlbTtcbiAgICAgICAgICAgICAgICBmZWVzLnB1c2goZmVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNSZW1pc3Npb25zTWF0Y2gpIHtcbiAgICAgICAgICAgICAgZmVlcy5wdXNoKGZlZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcGF5bWVudEdyb3VwLmZlZXMgPSBmZWVzXG4gICAgICAgICAgdGhpcy5wYXltZW50RmVlcyA9ZmVlcztcbiAgICAgICAgICB0aGlzLmZlZXMgPSBmZWVzO1xuICAgICAgICAgIHRoaXMucGF5bWVudEdyb3VwID0gcGF5bWVudEdyb3VwO1xuICAgICAgICAgIFxuICAgICAgICAgIHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHMuZmlsdGVyXG4gICAgICAgICAgICAocGF5bWVudEdyb3VwT2JqID0+IHBheW1lbnRHcm91cE9ialsncmVmZXJlbmNlJ10uaW5jbHVkZXModGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRSZWZlcmVuY2UpKTtcbiAgICAgICAgICBjb25zdCBwYXltZW50QWxsb2NhdGlvbiA9IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLnBheW1lbnRfYWxsb2NhdGlvbjtcbiAgICAgICAgICB0aGlzLmlzU3RhdHVzQWxsb2NhdGVkID0gcGF5bWVudEFsbG9jYXRpb24ubGVuZ3RoID4gMCAmJiBwYXltZW50QWxsb2NhdGlvblswXS5hbGxvY2F0aW9uX3N0YXR1cyA9PT0gJ0FsbG9jYXRlZCcgfHwgcGF5bWVudEFsbG9jYXRpb24ubGVuZ3RoID09PSAwO1xuICAgICAgICAgIHRoaXMucmVmdW5kRmVlc0xpc3QoKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3JcbiAgICAgICk7XG4gICAgfVxuXG4gICAgXG4gICAgaWYgKHRoaXMuZmVlcyAmJiB0aGlzLnZpZXdDb21wU3RhdHVzID09PSAnaXNzdWVyZWZ1bmQnKSB7XG4gICAgICB0aGlzLnJlZnVuZEZlZXNMaXN0KCk7XG4gICAgfVxuXG4gICAgaWYodGhpcy52aWV3Q29tcFN0YXR1cyA9PT0gJycpe1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdtYWluJztcbiAgICB9XG4gXG4gICAgaWYodGhpcy52aWV3Q29tcFN0YXR1cyA9PT0gJ2lzc3VlcmVmdW5kcGFnZTEnKXtcbiAgICAgIHRoaXMucmVmdW5kU2VydmljZS5nZXRSZWZ1bmRSZWFzb25zKCkuc3Vic2NyaWJlKFxuICAgICAgICByZWZ1bmRSZWFzb25zID0+IHsgXG4gICAgICAgICAgdGhpcy5yZWZ1bmRSZWFzb25zID0gcmVmdW5kUmVhc29ucy5maWx0ZXIoKGRhdGEpID0+IGRhdGEucmVjZW50bHlfdXNlZCA9PT0gZmFsc2UpO1xuICAgICAgICAgIHRoaXMucmVmdW5kUmVhc29ucyA9IHRoaXMucmVmdW5kUmVhc29ucy5maWx0ZXIoKGRhdGEpID0+IGRhdGEubmFtZSAhPT0gJ1JldHJvc3BlY3RpdmUgcmVtaXNzaW9uJyk7XG4gICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgdGhpcy5jb21tb25SZWZ1bmRSZWFzb25zID0gcmVmdW5kUmVhc29ucy5maWx0ZXIoKGRhdGEpID0+IGRhdGEucmVjZW50bHlfdXNlZCA9PT0gdHJ1ZSk7XG4gICAgICAgICAgdGhpcy5jb21tb25SZWZ1bmRSZWFzb25zLnNvcnQoKGEsIGIpID0+IGEudG9TdHJpbmcoKS5sb2NhbGVDb21wYXJlKGIpKTtcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSApO1xuICAgIH1cbiAgICBcbiAgICBpZih0aGlzLnZpZXdDb21wU3RhdHVzID09PSAncHJvY2Vzc3JldHJvcmVtaXNzb25wYWdlJyAmJiB0aGlzLmlzRnJvbVJlZnVuZExpc3RQYWdlKXtcbiAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdwcm9jZXNzcmV0cm9yZW1pc3NvbnBhZ2UnO1xuICAgIH1cbiAgICBpZih0aGlzLm9yZGVyRGV0YWlsICE9PSB1bmRlZmluZWQpe1xuICAgICAgdGhpcy5mZWVzID0gdGhpcy5vcmRlckRldGFpbFswXS5mZWVzO1xuICAgICAgdGhpcy5wYXltZW50UmVmZXJlbmNlID0gdGhpcy5vcmRlckRldGFpbFswXS5wYXltZW50c1swXS5yZWZlcmVuY2U7XG4gICAgfVxuXG4gIH1cblxuICByZWZ1bmRGZWVzTGlzdCgpIHtcbiAgICBjb25zdCBjcmVkcyA9IHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scy5mZWVzTGlzdCBhcyBGb3JtQXJyYXk7XG4gICAgZm9yKHZhciBpPTA7aTx0aGlzLmZlZXMubGVuZ3RoO2krKykge1xuICAgICBjcmVkcy5wdXNoKHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgaWQ6IHRoaXMuZmVlc1tpXS5pZCxcbiAgICAgIGNvZGU6IHRoaXMuZmVlc1tpXS5jb2RlLFxuICAgICAgdm9sdW1lOiB0aGlzLmZlZXNbaV0udm9sdW1lLFxuICAgICAgY2FsY3VsYXRlZF9hbW91bnQ6IHRoaXMuZmVlc1tpXS5jYWxjdWxhdGVkX2Ftb3VudCxcbiAgICAgIGFwcG9ydGlvbl9hbW91bnQ6IHRoaXMuZmVlc1tpXS5hcHBvcnRpb25fYW1vdW50LFxuICAgICAgY2NkX2Nhc2VfbnVtYmVyOiB0aGlzLmZlZXNbaV0uY2NkX2Nhc2VfbnVtYmVyLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZmVlc1tpXS5kZXNjcmlwdGlvbixcbiAgICAgIG5ldF9hbW91bnQ6IHRoaXMuZmVlc1tpXS5uZXRfYW1vdW50LFxuICAgICAgdmVyc2lvbjogdGhpcy5mZWVzW2ldLnZlcnNpb24sXG4gICAgICBhbW91bnR0b3JlZnVuZCA6IFsnJ10sXG4gICAgICBzZWxlY3RlZDpbJyddICxcbiAgICAgIHVwZGF0ZWRWb2x1bWU6ICcnXG4gICAgIH0pKTtcbiAgIH1cbiAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZ2V0IGZlZXNMaXN0KClcbiAge1xuICAgIGNvbnN0IGRkID10aGlzLnJlbWlzc2lvbkZvcm0uZ2V0KCdmZWVzTGlzdCcpIGFzIEZvcm1BcnJheSA7XG4gICAgcmV0dXJuIHRoaXMucmVtaXNzaW9uRm9ybS5nZXQoJ2ZlZXNMaXN0JykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgbm9uZVNlbGVjdGVkKCl7XG4gICAgaWYoIXRoaXMuZmVlc0xpc3QuY29udHJvbHMuc29tZShpdGVtID0+IGl0ZW0uZ2V0KCdzZWxlY3RlZCcpLnZhbHVlID09PSB0cnVlKSkge1xuICAgICAgdGhpcy5lcnJvck1zZyA9IFtdO1xuICAgICAgW10uZm9yRWFjaC5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0JyksIGZ1bmN0aW9uIChlbCkge1xuICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdpbmxpbmUtZXJyb3ItY2xhc3MnKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAgICByZXR1cm4gICF0aGlzLmZlZXNMaXN0LmNvbnRyb2xzLnNvbWUoaXRlbSA9PiBpdGVtLmdldCgnc2VsZWN0ZWQnKS52YWx1ZSA9PT0gdHJ1ZSk7XG4gIH1cbiAgICBcbiAgY2hlY2tfZW4gKGksdjE6IGFueSwgQXBwQW10LFZvbHVtZSkge1xuICAgIGNvbnN0IGVsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHYxKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scy5mZWVzTGlzdCBhcyBGb3JtQXJyYXk7XG4gIFxuICAgIGlmKGVsZS5jaGVja2VkKXtcbiAgICAgIGZvcm1BcnJheS5hdChpKS5nZXQoJ2Ftb3VudHRvcmVmdW5kJykuc2V0VmFsdWUoQXBwQW10KTtcbiAgICAgIGZvcm1BcnJheS5hdChpKS5nZXQoJ3ZvbHVtZScpLnNldFZhbHVlKFZvbHVtZSk7XG4gICAgICBmb3JtQXJyYXkuYXQoaSkuZ2V0KCdzZWxlY3RlZCcpLnNldFZhbHVlKHRydWUpO1xuICAgICAgZm9ybUFycmF5LmF0KGkpLmdldCgndXBkYXRlZFZvbHVtZScpLnNldFZhbHVlKFZvbHVtZSk7XG4gICAgICAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZlZUFtb3VudF8nK3YxKSkudmFsdWUgPSBBcHBBbXQ7XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmVlQW1vdW50XycrdjEpLnJlbW92ZUF0dHJpYnV0ZShcImRpc2FibGVkXCIpOyBcbiAgICAgIGlmKFZvbHVtZSA9PT0gMSkge1xuICAgICAgICAgICAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1ZvbHVtZVVwZGF0ZWRfJyt2MSkpLnZhbHVlID0gVm9sdW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgKDxIVE1MSW5wdXRFbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmZWVWb2x1bWVVcGRhdGVkXycrdjEpKS52YWx1ZSA9IFZvbHVtZTtcbiAgICAgIH1cbiAgICBcbiAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmVlVm9sdW1lVXBkYXRlZF8nK3YxKSAhPT0gbnVsbCkge1xuICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmVlQW1vdW50XycrdjEpLnJlbW92ZUF0dHJpYnV0ZShcImRpc2FibGVkXCIpOyBcbiAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZlZVZvbHVtZVVwZGF0ZWRfJyt2MSkucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7ICAgXG4gICAgICB9ICAgXG4gICAgIC8vIHRoaXMucmVtaXNzaW9uRm9ybS52YWx1ZS5mZWVzTGlzdC5maW5kKHg9Png9djEpWydhbW91bnR0b3JlZnVuZCddID0gQXBwQW10O1xuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7IFxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVycm9yTXNnID0gW107ICBcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmZWVBbW91bnRfJyt2MSkuc2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIiwgXCJ0cnVlXCIpOyBcbiAgICAgIHRoaXMucmVtaXNzaW9uRm9ybS52YWx1ZS5mZWVzTGlzdFtpXVtcImFtb3VudHRvcmVmdW5kXCJdID0gJyc7IFxuICAgICAgdGhpcy5yZW1pc3Npb25Gb3JtLnZhbHVlLmZlZXNMaXN0W2ldW1widm9sdW1lXCJdID0gJyc7IFxuICAgICAgdGhpcy5yZW1pc3Npb25Gb3JtLnZhbHVlLmZlZXNMaXN0W2ldW1wic2VsZWN0ZWRcIl0gPSBmYWxzZTsgXG4gICAgICAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZlZUFtb3VudF8nK3YxKSkudmFsdWUgPSAnJztcbiAgICAgIGlmKFZvbHVtZT4xKSB7XG4gICAgICAgIHRoaXMucmVtaXNzaW9uRm9ybS52YWx1ZS5mZWVzTGlzdFtpXVtcInZvbHVtZVwiXSA9ICcnOyBcbiAgICAgICAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZlZVZvbHVtZVVwZGF0ZWRfJyt2MSkpLnZhbHVlID0gJyc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmVlVm9sdW1lVXBkYXRlZF8nK3YxKSAhPT0gbnVsbCkge1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZlZVZvbHVtZVVwZGF0ZWRfJyt2MSkucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIik7ICBcbiAgICAgIH1cbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gIFxuICB9XG5cblxuICBhZGRSZW1pc3Npb24oKSB7XG4gICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnQWxsJyk7XG4gICAgY29uc3QgcmVtaXNzaW9uY3RybHM9dGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzLFxuICAgICAgaXNSZW1pc3Npb25MZXNzVGhhbkZlZSA9IHRoaXMuZmVlLmNhbGN1bGF0ZWRfYW1vdW50ID4gcmVtaXNzaW9uY3RybHMuYW1vdW50LnZhbHVlOyBcbiAgICAgIHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVmdW5kUmVhc29uJ10uc2V0RXJyb3JzKG51bGwpO1xuICAgICAgdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWZ1bmRERFJlYXNvbiddLnNldEVycm9ycyhudWxsKTtcbiAgICBpZiAodGhpcy5yZW1pc3Npb25Gb3JtLmRpcnR5ICYmIHRoaXMucmVtaXNzaW9uRm9ybS52YWxpZCAmJiBpc1JlbWlzc2lvbkxlc3NUaGFuRmVlKSB7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnY29uZmlybWF0aW9uJztcbiAgICB9ZWxzZSB7XG5cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydyZW1pc3Npb25Db2RlJ10udmFsdWUgPT0gJycgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFt0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAncmVtaXNzaW9uQ29kZScpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ3JlbWlzc2lvbkNvZGUnXS52YWx1ZSAhPSAnJyAmJiByZW1pc3Npb25jdHJsc1sncmVtaXNzaW9uQ29kZSddLmludmFsaWQgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAncmVtaXNzaW9uQ29kZScpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLnZhbHVlID09ICcnICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLnZhbHVlICE9ICcnICYmIHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS5pbnZhbGlkICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIHRydWUsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2VdLCAnYW1vdW50Jyk7XG4gICAgICB9XG4gICAgICBpZihyZW1pc3Npb25jdHJscy5hbW91bnQudmFsaWQgJiYgIWlzUmVtaXNzaW9uTGVzc1RoYW5GZWUpe1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbmZpcm1SZW1pc3Npb24oKSB7XG4gICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICBjb25zdCBuZXdOZXRBbW91bnQgPSB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHMuYW1vdW50LnZhbHVlLFxuICAgICByZW1pc3Npb25BbW91bnQgPSB0aGlzLmZlZS5uZXRfYW1vdW50IC0gbmV3TmV0QW1vdW50LFxuICAgICByZXF1ZXN0Qm9keSA9IG5ldyBBZGRSZW1pc3Npb25SZXF1ZXN0XG4gICAgKHRoaXMuY2NkQ2FzZU51bWJlciwgdGhpcy5mZWUsIHJlbWlzc2lvbkFtb3VudCwgdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzLnJlbWlzc2lvbkNvZGUudmFsdWUsIHRoaXMuY2FzZVR5cGUpO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLnBvc3RQYXltZW50R3JvdXBXaXRoUmVtaXNzaW9ucyhkZWNvZGVVUklDb21wb25lbnQodGhpcy5wYXltZW50R3JvdXBSZWYpLnRyaW0oKSwgdGhpcy5mZWUuaWQsIHJlcXVlc3RCb2R5KS5zdWJzY3JpYmUoXG4gICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgIGlmIChKU09OLnBhcnNlKHJlc3BvbnNlKS5zdWNjZXNzKSB7XG4gICAgICAgICAgbGV0IExEVXJsID0gdGhpcy5pc1R1cm5PZmYgPyAnJmlzVHVybk9mZj1FbmFibGUnIDogJyZpc1R1cm5PZmY9RGlzYWJsZSdcbiAgICAgICAgICAgIExEVXJsICs9IGAmY2FzZVR5cGU9JHt0aGlzLmNhc2VUeXBlfWBcbiAgICAgICAgICAgIExEVXJsICs9IHRoaXMuaXNOZXdQY2lwYWxPZmYgPyAnJmlzTmV3UGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzTmV3UGNpcGFsT2ZmPURpc2FibGUnXG4gICAgICAgICAgICBMRFVybCArPSB0aGlzLmlzT2xkUGNpcGFsT2ZmID8gJyZpc09sZFBjaXBhbE9mZj1FbmFibGUnIDogJyZpc09sZFBjaXBhbE9mZj1EaXNhYmxlJ1xuICAgICAgICAgIGlmICh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuYnNwYXltZW50ZGNuKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkUmV1c2VSb3V0ZSA9ICgpID0+IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIub25TYW1lVXJsTmF2aWdhdGlvbiA9ICdyZWxvYWQnO1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChgL3BheW1lbnQtaGlzdG9yeS8ke3RoaXMuY2NkQ2FzZU51bWJlcn0/dmlldz1mZWUtc3VtbWFyeSZzZWxlY3RlZE9wdGlvbj0ke3RoaXMub3B0aW9ufSZwYXltZW50R3JvdXBSZWY9JHt0aGlzLnBheW1lbnRHcm91cFJlZn0mZGNuPSR7dGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbn0ke0xEVXJsfWApO1xuICAgICAgICAgIH1lbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvcjtcbiAgICAgICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHJlc2V0UmVtaXNzaW9uRm9ybSh2YWwsIGZpZWxkKXtcbiAgICBpZiAoZmllbGQ9PT0nQWxsJyl7XG4gICAgICB0aGlzLmlzUmVtaXNzaW9uQ29kZUVtcHR5ID0gdmFsWzBdO1xuICAgICAgdGhpcy5yZW1pc3Npb25Db2RlSGFzRXJyb3IgPSB2YWxbMV07XG4gICAgICB0aGlzLmlzQW1vdW50RW1wdHkgPSB2YWxbMl07XG4gICAgICB0aGlzLmFtb3VudEhhc0Vycm9yID0gdmFsWzNdO1xuICAgICAgdGhpcy5pc1JlbWlzc2lvbkxlc3NUaGFuRmVlRXJyb3IgPSB2YWxbNF07XG4gICAgICB0aGlzLmlzUmVhc29uRW1wdHkgPSB2YWxbNV07XG4gICAgfSBlbHNlIGlmKGZpZWxkPT09J3JlbWlzc2lvbkNvZGUnIHx8IGZpZWxkPT09J0FsbCcpIHtcbiAgICAgIHRoaXMuaXNSZW1pc3Npb25Db2RlRW1wdHkgPSB2YWxbMF07XG4gICAgICB0aGlzLnJlbWlzc2lvbkNvZGVIYXNFcnJvciA9IHZhbFsxXTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkPT09J2Ftb3VudCcgfHwgZmllbGQ9PT0nQWxsJyl7XG4gICAgICB0aGlzLmlzQW1vdW50RW1wdHkgPSB2YWxbMl07XG4gICAgICB0aGlzLmFtb3VudEhhc0Vycm9yID0gdmFsWzNdO1xuICAgICAgdGhpcy5pc1JlbWlzc2lvbkxlc3NUaGFuRmVlRXJyb3IgPSB2YWxbNF07XG4gICAgfSBlbHNlIGlmIChmaWVsZD09PSdyZWFzb24nIHx8IGZpZWxkPT09J0FsbCcpe1xuICAgICAgdGhpcy5pc1JlYXNvbkVtcHR5ID0gdmFsWzVdO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCByZXRybyByZW1pc3Npb24gY2hhbmdlc1xuICBhZGRSZW1pc3Npb25Db2RlKCkge1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZmFsc2U7XG4gICAgdGhpcy5pc0Zyb21DaGVja0Fuc1BhZ2UgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3JNc2cgPSBbXTtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnJztcbiAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gZmFsc2U7XG4gICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnQWxsJyk7XG4gICAgY29uc3QgcmVtaXNzaW9uY3RybHM9dGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzXG4gICAgIC8vIGlzUmVtaXNzaW9uTGVzc1RoYW5GZWUgPSB0aGlzLmZlZS5jYWxjdWxhdGVkX2Ftb3VudCA+PSByZW1pc3Npb25jdHJscy5hbW91bnQudmFsdWU7IFxuICAgICAgdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWZ1bmRSZWFzb24nXS5zZXRFcnJvcnMobnVsbCk7XG4gICAgICB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlZnVuZEREUmVhc29uJ10uc2V0RXJyb3JzKG51bGwpO1xuICAgICAgdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydhbW91bnQnXS5zZXRFcnJvcnMobnVsbCk7XG4gICAgaWYgKHRoaXMucmVtaXNzaW9uRm9ybS5kaXJ0eSAmJiB0aGlzLnJlbWlzc2lvbkZvcm0udmFsaWQgKSB7XG4gICAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJyc7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSBcInByb2Nlc3NyZXRyb3JlbWlzc29ucGFnZVwiO1xuICAgIH1lbHNlIHtcblxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ3JlbWlzc2lvbkNvZGUnXS52YWx1ZSA9PSAnJyApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW3RydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ3JlbWlzc2lvbkNvZGUnKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzWydyZW1pc3Npb25Db2RlJ10udmFsdWUgIT0gJycgJiYgcmVtaXNzaW9uY3RybHNbJ3JlbWlzc2lvbkNvZGUnXS5pbnZhbGlkICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAncmVtaXNzaW9uQ29kZScpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLnZhbHVlID09ICcnICkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2VdLCAnYW1vdW50Jyk7XG4gICAgICB9XG4gICAgICBpZihyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgIT0gJycgJiYgcmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLmludmFsaWQgKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfVxuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ3JlYXNvbiddLnZhbHVlID09ICcnKSB7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgdHJ1ZV0sICdyZWFzb24nKTtcbiAgICAgIH1cbiAgICAgIGlmKHJlbWlzc2lvbmN0cmxzLmFtb3VudC52YWxpZCl7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZV0sICdhbW91bnQnKTtcbiAgICAgIH1cbiAgICBcbiAgICB9XG4gIH1cblxuXG4gIGdvdG9BZGRSZXRyb1JlbWlzc2lvbkNvZGVQYWdlKCkge1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZmFsc2U7XG4gICAgdGhpcy5pc0Zyb21DaGVja0Fuc1BhZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmVycm9yTXNnID0gW107XG4gICAgaWYodGhpcy5pc1JlZnVuZFJlbWlzc2lvbikge1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzY2FuY2VsQ2xpY2tlZCA9IHRydWU7XG4gICAgICB0aGlzLnJlZnVuZExpc3RBbW91bnQuZW1pdCgpO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVJlZnVuZFN0YXR1c1BhZ2UgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIHRoaXMuaXNGcm9tUmVmdW5kTGlzdFBhZ2UgKSB7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNjYW5jZWxDbGlja2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVmdW5kTGlzdFJlYXNvbi5lbWl0KHtyZWFzb246IHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24sIGNvZGU6IHRoaXMucmVmdW5kUmVhc29ufSk7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfSBcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnJztcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSAneWVzJztcbiAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gXCJhZGRyZW1pc3Npb25cIjtcbiAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuZXJyb3JNc2cgPSBbXTtcbiAgICBpZih0aGlzLmlzRnJvbVBheW1lbnREZXRhaWxQYWdlKSB7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncGF5bWVudC12aWV3JztcbiAgICB9XG4gIH1cblxuICBnb3RvQ2hlY2tSZXRyb1JlbWlzc2lvblBhZ2UocGF5bWVudDogSVBheW1lbnQpIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNjYW5jZWxDbGlja2VkID0gZmFsc2U7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ0FsbCcpO1xuICAgIGlmKCAhdGhpcy5pc1JlZnVuZFJlbWlzc2lvbikge1xuICAgIHZhciByZW1pc3Npb25jdHJscz10aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHMsXG4gICAgICBpc1JlbWlzc2lvbkxlc3NUaGFuRmVlID0gdGhpcy5mZWUuY2FsY3VsYXRlZF9hbW91bnQgPj0gcmVtaXNzaW9uY3RybHMuYW1vdW50LnZhbHVlOyBcbiAgICBpZiAodGhpcy5yZW1pc3Npb25Gb3JtLmRpcnR5ICkge1xuICAgICAgaWYocmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLnZhbHVlID09ICcnIHx8IHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSA8IDApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfSBlbHNlIGlmKHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSAhPSAnJyAmJiByZW1pc3Npb25jdHJsc1snYW1vdW50J10uaW52YWxpZCApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfSBlbHNlIGlmKHJlbWlzc2lvbmN0cmxzLmFtb3VudC52YWxpZCAmJiAhaXNSZW1pc3Npb25MZXNzVGhhbkZlZSl7XG4gICAgICAgIHRoaXMucmVzZXRSZW1pc3Npb25Gb3JtKFtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZV0sICdhbW91bnQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICcnO1xuICAgICAgICAgIHRoaXMudmlld1N0YXR1cyA9IFwiY2hlY2tyZXRyb3JlbWlzc2lvbnBhZ2VcIjtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIHJlbWlzc2lvbmN0cmxzPXRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scztcbiAgICAvL2lmICh0aGlzLnJlbWlzc2lvbkZvcm0uZGlydHkgKSB7XG4gICAgICBpZihyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgPT0gJycgfHwgcmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLnZhbHVlIDwgMCApIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlXSwgJ2Ftb3VudCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJyc7XG4gICAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gXCJjaGVja3JldHJvcmVtaXNzaW9ucGFnZVwiO1xuICAgICAgICAgIHRoaXMucmVmdW5kTGlzdEFtb3VudC5lbWl0KHJlbWlzc2lvbmN0cmxzWydhbW91bnQnXS52YWx1ZSk7XG4gICAgICB9XG4gICAgLy99XG4gICBcbiAgfVxuICB9XG4gIGdvdG9BbW91bnRSZXRyb1JlbWlzc2lvbigpIHtcbiAgICB0aGlzLmlzRnJvbUNoZWNrQW5zUGFnZSA9IGZhbHNlO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICdwcm9jZXNzcmV0cm9yZW1pc3NvbnBhZ2UnO1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICB9XG4gIGdvdG9Qcm9jZXNzUmV0cm9SZW1pc3Npb25QYWdlKCkge1xuICAgIHRoaXMuaXNGcm9tQ2hlY2tBbnNQYWdlID0gdHJ1ZTtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnJztcbiAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJ2FkZHJlbWlzc2lvbic7XG4gICAgdGhpcy5pc1JlZnVuZFJlbWlzc2lvbiA9IHRydWU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLmVycm9yTXNnID0gW107XG4gIH1cblxuICBnb3RvUHJvY2Vzc1JldHJvUmVtaXNzaW9uKG5vdGU/OiBJUmVmdW5kQ29udGFjdERldGFpbHMpIHtcbiAgICBpZihub3RlKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IHsgY29udGFjdF9kZXRhaWxzOiBub3RlLCBub3RpZmljYXRpb25fdHlwZTogbm90ZS5ub3RpZmljYXRpb25fdHlwZSB9O1xuICAgIH1cbiAgICB0aGlzLmlzRnJvbUNoZWNrQW5zUGFnZSA9IHRydWU7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJ3JlbWlzc2lvbkFkZHJlc3NQYWdlJztcbiAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJyc7XG4gICAgdGhpcy5pc1JlZnVuZFJlbWlzc2lvbiA9IHRydWU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgfVxuXG4gIGNvbmZpcm1SZXRyb1JlbWlzc2lvbigpIHtcbiAgICBpZighdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkKSB7XG4gICAgdGhpcy5yZXRyb1JlbWlzc2lvbiA9IHRydWU7XG4gICAgdGhpcy5yZW1pc3Npb25hbXQgPSB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHMuYW1vdW50LnZhbHVlO1xuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gbmV3IEFkZFJldHJvUmVtaXNzaW9uUmVxdWVzdCh0aGlzLnJlbWlzc2lvbmFtdCx0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHMucmVtaXNzaW9uQ29kZS52YWx1ZSApXG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UucG9zdFBheW1lbnRHcm91cFdpdGhSZXRyb1JlbWlzc2lvbnMoZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMucGF5bWVudEdyb3VwUmVmKS50cmltKCksIHRoaXMuZmVlLmlkLCByZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKFxuICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAoSlNPTi5wYXJzZShyZXNwb25zZSkpIHtcbiAgICAgICAgICB0aGlzLmlzUmVtaXNzaW9uQXBwbGllZCA9IHRydWU7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyAgPSAnJztcbiAgICAgICAgICB0aGlzLnZpZXdTdGF0dXMgPSAncmV0cm9yZW1pc3Npb25jb25maXJtYXRpb25wYWdlJztcbiAgICAgICAgICB0aGlzLnJlbWlzc2lvblJlZmVyZW5jZSA9SlNPTi5wYXJzZShyZXNwb25zZSkucmVtaXNzaW9uX3JlZmVyZW5jZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NSZWZ1bmQoKSB7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLmVycm9yTXNnID0gW107XG4gICAgdGhpcy5pc0NvbmZpcm1hdGlvbkJ0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICBpZiggdGhpcy5pc1JlZnVuZFJlbWlzc2lvbikge1xuICAgICAgdGhpcy5yZXRyb1JlbWlzc2lvbiA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlbWlzc2lvblJlZmVyZW5jZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMucmVtaXNzaW9uUmVmZXJlbmNlID09PSAnJykge1xuICAgICAgdGhpcy5yZW1pc3Npb25SZWZlcmVuY2UgPSB0aGlzLnJlbWlzc2lvbi5yZW1pc3Npb25fcmVmZXJlbmNlO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0Qm9keSA9IG5ldyBQb3N0SXNzdWVSZWZ1bmRSZXRyb1JlbWlzc2lvbih0aGlzLnJlbWlzc2lvblJlZmVyZW5jZSwgdGhpcy5jb250YWN0RGV0YWlsc09iaik7XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UucG9zdFJlZnVuZFJldHJvUmVtaXNzaW9uKHJlcXVlc3RCb2R5KS5zdWJzY3JpYmUoXG4gICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgIGlmIChKU09OLnBhcnNlKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29tcFN0YXR1cyAgPSAnJztcbiAgICAgICAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdyZWZ1bmRjb25maXJtYXRpb25wYWdlJztcbiAgICAgICAgICAgIHRoaXMucmVmdW5kUmVmZXJlbmNlID0gSlNPTi5wYXJzZShyZXNwb25zZSkucmVmdW5kX3JlZmVyZW5jZTtcbiAgICAgICAgICAgIHRoaXMucmVmdW5kQW1vdW50ID0gSlNPTi5wYXJzZShyZXNwb25zZSkucmVmdW5kX2Ftb3VudDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfSlcbiAgfVxuXG4gIC8vIElzc3VlIFJlZnVuZCBjaGFuZ2VzXG5cbiAgZ290b0lzc3VlUmVmdW5kQ29uZmlybWF0aW9uKHBheW1lbnQ6IElQYXltZW50KSB7XG4gICAgaWYodGhpcy5pc0Zyb21DaGVja0Fuc1BhZ2UpIHtcbiAgICAgIHRoaXMudG90YWxSZWZ1bmRBbW91bnQgPSB0aGlzLnJlbWlzc2lvbkZvcm0udmFsdWUuZmVlc0xpc3QucmVkdWNlKChhLCBjKSA9PiBhICsgYy5hbW91bnR0b3JlZnVuZCAqIGMuc2VsZWN0ZWQsIDApO1xuICAgICAgdGhpcy5pc0Zyb21DaGVja0Fuc1BhZ2UgPSBmYWxzZTtcbiAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdjaGVja2lzc3VlcmVmdW5kcGFnZSc7XG4gICAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc2NhbmNlbENsaWNrZWQgPSBmYWxzZTtcbiAgICBpZih0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuUkVGVU5ETElTVCA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgIHRoaXMuaXNGcm9tUmVmdW5kTGlzdFBhZ2UgPSB0cnVlOyBcbiAgICB9XG5cbiAgICB0aGlzLnRvdGFsUmVmdW5kQW1vdW50ID0gdGhpcy5yZW1pc3Npb25Gb3JtLnZhbHVlLmZlZXNMaXN0LnJlZHVjZSgoYSwgYykgPT4gYSArIGMuYW1vdW50dG9yZWZ1bmQgKiBjLnNlbGVjdGVkLCAwKTtcblxuXG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLmVycm9yTXNnID0gW107XG4gICAgdGhpcy5yZWZ1bmRSZWFzb24gPSB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlZnVuZFJlYXNvbiddLnZhbHVlID09PSBudWxsID8gdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWZ1bmRERFJlYXNvbiddLnZhbHVlIDogdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWZ1bmRSZWFzb24nXS52YWx1ZTtcbiAgICBpZighdGhpcy5yZWZ1bmRSZWFzb24gfHwgdGhpcy5yZWZ1bmRSZWFzb24gPT09ICdTZWxlY3QgYSBkaWZmZXJlbnQgcmVhc29uJykge1xuICAgICAgdGhpcy5yZWZ1bmRIYXNFcnJvciA9IHRydWU7XG4gICAgfSBlbHNlIGlmKHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24uaW5jbHVkZXMoJ090aGVyJykgJiYgKHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVhc29uJ10udmFsdWUgPT0gJycgfHwgdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWFzb24nXS52YWx1ZSA9PSBudWxsKSkge1xuICAgICAgICB0aGlzLnJlc2V0UmVtaXNzaW9uRm9ybShbZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWVdLCAncmVhc29uJyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uLmluY2x1ZGVzKCdPdGhlcicpICYmIHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9sc1sncmVhc29uJ10udmFsdWUgIT09ICcnKSB7XG4gICAgICB0aGlzLnJlZnVuZEhhc0Vycm9yID0gZmFsc2U7XG4gICAgICB0aGlzLnJlZnVuZFJlYXNvbiArPSAgJy0nICsgdGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzWydyZWFzb24nXS52YWx1ZTtcbiAgICAgIHRoaXMuZGlzcGxheVJlZnVuZFJlYXNvbiA9IHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24gKyAnLScgKyB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHNbJ3JlYXNvbiddLnZhbHVlO1xuICAgICAgaWYgKCB0aGlzLmlzRnJvbVJlZnVuZExpc3RQYWdlICkge1xuICAgICAgICB0aGlzLnJlZnVuZExpc3RSZWFzb24uZW1pdCh7cmVhc29uOiB0aGlzLmRpc3BsYXlSZWZ1bmRSZWFzb24sIGNvZGU6IHRoaXMucmVmdW5kUmVhc29ufSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJyc7XG4gICAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdjb250YWN0RGV0YWlsc1BhZ2UnO1xuICAgICAgfVxuICAgICAgXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGxheVJlZnVuZFJlYXNvbiA9IHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb247XG4gICAgICBpZiAoIHRoaXMuaXNGcm9tUmVmdW5kTGlzdFBhZ2UgKSB7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWZ1bmRMaXN0UmVhc29uLmVtaXQoe3JlYXNvbjogdGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbiwgY29kZTogdGhpcy5yZWZ1bmRSZWFzb259KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ2NvbnRhY3REZXRhaWxzUGFnZSc7XG4gICAgICB9XG4gICBcbiAgICB9XG4gIH1cblxuICBnb3RvSXNzdWVSZWZ1bmRQYWdlKCkge1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICdpc3N1ZXJlZnVuZCc7XG4gICAgdGhpcy52aWV3U3RhdHVzID0gJyc7XG4gICAgdGhpcy5pc1JlZnVuZFJlbWlzc2lvbiA9IHRydWU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmVycm9yTXNnID0gW107XG4gICAgdGhpcy5yZWZ1bmRIYXNFcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuaXNSZWFzb25FbXB0eSA9IGZhbHNlO1xuICB9XG5cbiAgZ290b0lzc3VlUGFnZSgpe1xuXG4gICAgW10uZm9yRWFjaC5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0JyksIGZ1bmN0aW9uIChlbCkge1xuICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZSgnaW5saW5lLWVycm9yLWNsYXNzJyk7XG4gICAgfSk7XG5cblx0ICB2YXIgY2hlY2tib3hzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0Jyk7XG5cdCAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLnRvdGFsUmVmdW5kQW1vdW50ID0gMDtcbiAgICB0aGlzLmVycm9yTXNnID0gW107ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cdFx0XHRmb3IgKHZhciBqPTA7ajxjaGVja2JveHMubGVuZ3RoO2orKylcblx0XHRcdHtcblx0XHRcdFx0aWYoY2hlY2tib3hzW2pdLmNoZWNrZWQpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aGlzLmZ1bGxSZWZ1bmQgPSBmYWxzZTtcblx0XHRcdFx0XHRsZXQgcXVhbnRpdHk6IG51bWJlciA9ICsoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZlZVZvbHVtZV8nK2NoZWNrYm94c1tqXS52YWx1ZSkpLnZhbHVlO1xuICAgICAgICAgIGxldCBhbW91bnRUb1JlZnVuZDogbnVtYmVyID0gKyg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmVlQW1vdW50XycrY2hlY2tib3hzW2pdLnZhbHVlKSkudmFsdWU7XG5cdFx0XHRcdFx0bGV0IGFwcG9ydGlvbkFtb3VudDogbnVtYmVyID0gKyg8SFRNTElucHV0RWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmVlQXBwb3J0aW9uQW1vdW50XycrY2hlY2tib3hzW2pdLnZhbHVlKSkudmFsdWU7XG5cdFx0XHRcdFx0bGV0IGNhbGN1bGF0ZWRBbW91bnQ6IG51bWJlciA9ICsoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbGN1bGF0ZWRBbW91bnRfJytjaGVja2JveHNbal0udmFsdWUpKS52YWx1ZTsgXG4gICAgICAgICBcbiAgICAgICAgICBpZiggYW1vdW50VG9SZWZ1bmQgPT09IGFwcG9ydGlvbkFtb3VudCkge1xuICAgICAgICAgICAgdGhpcy5mdWxsUmVmdW5kID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZihhbW91bnRUb1JlZnVuZCA9PT0gMCl7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRJZCA9ICdmZWVBbW91bnRfJytjaGVja2JveHNbal0udmFsdWU7XG4gICAgICAgICAgICB0aGlzLmVycm9yTXNnLnB1c2goJ1lvdSBuZWVkIHRvIGVudGVyIGEgcmVmdW5kIGFtb3VudCcpO1xuICAgICAgICAgICAgdGhpcy5nZXRFcnJvckNsYXNzKHRoaXMuZWxlbWVudElkKTtcblx0XHRcdFx0XHR9XG5cbiAgICAgICAgIFxuXG4gICAgICAgICAgaWYgKHF1YW50aXR5ID09PSAxKVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmKGFtb3VudFRvUmVmdW5kID4gMCAmJiBhbW91bnRUb1JlZnVuZCA+IGFwcG9ydGlvbkFtb3VudCl7XG4gICAgICAgICAgICAgIHRoaXMuZWxlbWVudElkID0gJ2ZlZUFtb3VudF8nK2NoZWNrYm94c1tqXS52YWx1ZTtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvck1zZy5wdXNoKCdUaGUgYW1vdW50IHlvdSB3YW50IHRvIHJlZnVuZCBpcyBtb3JlIHRoYW4gdGhlIGFtb3VudCBwYWlkJyk7XG4gICAgICAgICAgICAgIHRoaXMuZ2V0RXJyb3JDbGFzcyh0aGlzLmVsZW1lbnRJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBcblxuXHRcdFx0XHRcdGlmKHF1YW50aXR5ID4gMSkge1xuXG5cdFx0XHRcdFx0XHR0aGlzLnF1YW50aXR5VXBkYXRlZCA9ICsoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZlZVZvbHVtZVVwZGF0ZWRfJytjaGVja2JveHNbal0udmFsdWUpKS52YWx1ZTtcblxuICAgICAgICAgICAgaWYodGhpcy5xdWFudGl0eVVwZGF0ZWQgPT09IDApe1xuICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRJZCA9ICdmZWVWb2x1bWVVcGRhdGVkXycrY2hlY2tib3hzW2pdLnZhbHVlO1xuICAgICAgICAgICAgICB0aGlzLmVycm9yTXNnLnB1c2goJ1lvdSBuZWVkIHRvIGVudGVyIHF1YW50aXR5JylcbiAgICAgICAgICAgICAgdGhpcy5nZXRFcnJvckNsYXNzKHRoaXMuZWxlbWVudElkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuZnVsbFJlZnVuZCAmJiBxdWFudGl0eSAhPT0gdGhpcy5xdWFudGl0eVVwZGF0ZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5lbGVtZW50SWQgPSAnZmVlVm9sdW1lVXBkYXRlZF8nK2NoZWNrYm94c1tqXS52YWx1ZTtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvck1zZy5wdXNoKCdUaGUgcXVhbnRpdHkgeW91IHdhbnQgdG8gcmVmdW5kIHNob3VsZCBiZSBtYXhpbXVuIGF2YWlsYWJsZSBxdWFudGl0eScpO1xuICAgICAgICAgICAgICB0aGlzLmdldEVycm9yQ2xhc3ModGhpcy5lbGVtZW50SWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMuZnVsbFJlZnVuZCAmJiB0aGlzLnF1YW50aXR5VXBkYXRlZCA+IDAgJiYgYW1vdW50VG9SZWZ1bmQgPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMucmVmdW5kQW10Rm9yRmVlVm9sdW1lcyA9ICsoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZlZVZPbF8nK2NoZWNrYm94c1tqXS52YWx1ZSkpLmlubmVyVGV4dDtcbiAgICAgICAgICAgICAgdGhpcy5hbGxvd2VkUmVmdW5kQW1vdW50ID0gdGhpcy5xdWFudGl0eVVwZGF0ZWQgKiB0aGlzLnJlZnVuZEFtdEZvckZlZVZvbHVtZXM7XG4gICAgICAgICAgICAgIGlmKCB0aGlzLmFsbG93ZWRSZWZ1bmRBbW91bnQgIT09IGFtb3VudFRvUmVmdW5kKSBcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudElkID0gJ2ZlZUFtb3VudF8nK2NoZWNrYm94c1tqXS52YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yTXNnLnB1c2goJ1RoZSBBbW91bnQgdG8gUmVmdW5kIHNob3VsZCBiZSBlcXVhbCB0byB0aGUgcHJvZHVjdCBvZiBGZWUgQW1vdW50IGFuZCBxdWFudGl0eScpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RXJyb3JDbGFzcyh0aGlzLmVsZW1lbnRJZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYoIXRoaXMuZnVsbFJlZnVuZCAmJiBhbW91bnRUb1JlZnVuZCA+IGFwcG9ydGlvbkFtb3VudClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhpcy5lbGVtZW50SWQgPSAnZmVlQW1vdW50XycrY2hlY2tib3hzW2pdLnZhbHVlO1xuICAgICAgICAgICAgICB0aGlzLmVycm9yTXNnLnB1c2goJ1RoZSBhbW91bnQgeW91IHdhbnQgdG8gcmVmdW5kIGlzIG1vcmUgdGhhbiB0aGUgYW1vdW50IHBhaWQnKTtcbiAgICAgICAgICAgICAgdGhpcy5nZXRFcnJvckNsYXNzKHRoaXMuZWxlbWVudElkKTtcbiAgICAgICAgICAgIH1cblx0XG4gICAgICAgICAgICBpZiggIXRoaXMuZnVsbFJlZnVuZCAmJiB0aGlzLnF1YW50aXR5VXBkYXRlZCA+MCAmJiB0aGlzLnF1YW50aXR5VXBkYXRlZCA+IHF1YW50aXR5KXtcbiAgICAgICAgICAgICAgdGhpcy5lbGVtZW50SWQgPSAnZmVlVm9sdW1lVXBkYXRlZF8nK2NoZWNrYm94c1tqXS52YWx1ZTtcbiAgICAgICAgICAgICAgdGhpcy5lcnJvck1zZy5wdXNoKCdUaGUgcXVhbnRpdHkgeW91IHdhbnQgdG8gcmVmdW5kIGlzIG1vcmUgdGhhbiB0aGUgYXZhaWxhYmxlIHF1YW50aXR5Jyk7XG4gICAgICAgICAgICAgIHRoaXMuZ2V0RXJyb3JDbGFzcyh0aGlzLmVsZW1lbnRJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy90aGlzLnJlbWlzc2lvbkZvcm0udmFsdWUuZmVlc0xpc3QuZmluZChpZD0+aWQ9Y2hlY2tib3hzW2pdLnZhbHVlKVsnYW1vdW50dG9yZWZ1bmQnXSA9IGFwcG9ydGlvbkFtb3VudDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG4gIGlmKHRoaXMuZXJyb3JNc2cubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKHRoaXMuaXNGcm9tQ2hlY2tBbnNQYWdlKSB7XG4gICAgICB0aGlzLmlzRnJvbUNoZWNrQW5zUGFnZSA9IGZhbHNlO1xuICAgICAgdGhpcy50b3RhbFJlZnVuZEFtb3VudCA9IHRoaXMucmVtaXNzaW9uRm9ybS52YWx1ZS5mZWVzTGlzdC5yZWR1Y2UoKGEsIGMpID0+IGEgKyBjLmFtb3VudHRvcmVmdW5kICogYy5zZWxlY3RlZCwgMCk7XG4gICAgICB0aGlzLnZpZXdTdGF0dXMgPSAnY2hlY2tpc3N1ZXJlZnVuZHBhZ2UnXG4gICAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnaXNzdWVyZWZ1bmRwYWdlMSc7XG4gICAgdGhpcy5nZXRSZWZ1bmRSZWFzb25zKCk7XG4gIH1cbiAgfVxuXG4gIGNhbEFtdFRvUmVmdW5kKHZhbHVlLGFtb3VudCx2b2x1bWUsIGk6IGFueSkge1xuICAgICBjb25zdCB2b2x1bWVGZWUgPSBhbW91bnQvdm9sdW1lO1xuICAgICBjb25zdCBhbXRUb1JlZnVuZCA9IHZhbHVlICogdm9sdW1lRmVlO1xuICAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHMuZmVlc0xpc3QgYXMgRm9ybUFycmF5O1xuICAgICBmb3JtQXJyYXkuYXQoaSkuZ2V0KCdhbW91bnR0b3JlZnVuZCcpLnNldFZhbHVlKGFtdFRvUmVmdW5kKTtcbiAgIC8vICAoPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZlZUFtb3VudF8nK2kpKS52YWx1ZSA9ICthbXRUb1JlZnVuZDtcbiAgICAvLyBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMucmVtaXNzaW9uRm9ybS5jb250cm9scy5mZWVzTGlzdFsnYW1vdW50dG9yZWZ1bmQnXS5hdChpbmRleCk7XG4gICAgIC8vIGZvcm1Db250cm9sLnNldFZhbHVlKGFtdFRvUmVmdW5kKTtcblxuICB9XG4gIGdvdG9Db250YWN0RGV0YWlsc1BhZ2Uobm90ZT86IElSZWZ1bmRDb250YWN0RGV0YWlscykge1xuICAgIGlmIChub3RlKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IHsgY29udGFjdF9kZXRhaWxzOiBub3RlLCBub3RpZmljYXRpb25fdHlwZTogbm90ZS5ub3RpZmljYXRpb25fdHlwZSB9O1xuICAgIH1cbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnY29udGFjdERldGFpbHNQYWdlJztcbiAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGZhbHNlO1xuICB9XG4gIFxuICBnZXRSZWZ1bmRSZWFzb25zKCl7XG4gIGlmKHRoaXMudmlld0NvbXBTdGF0dXMgPT09ICdpc3N1ZXJlZnVuZHBhZ2UxJyl7XG4gICAgdGhpcy5yZWZ1bmRTZXJ2aWNlLmdldFJlZnVuZFJlYXNvbnMoKS5zdWJzY3JpYmUoXG4gICAgICByZWZ1bmRSZWFzb25zID0+IHsgXG4gICAgICAgIHRoaXMucmVmdW5kUmVhc29ucyA9IHJlZnVuZFJlYXNvbnMuZmlsdGVyKChkYXRhKSA9PiBkYXRhLnJlY2VudGx5X3VzZWQgPT09IGZhbHNlKTtcbiAgICAgICAgdGhpcy5yZWZ1bmRSZWFzb25zID0gdGhpcy5yZWZ1bmRSZWFzb25zLmZpbHRlcigoZGF0YSkgPT4gZGF0YS5uYW1lICE9PSAnUmV0cm9zcGVjdGl2ZSByZW1pc3Npb24nKTtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuY29tbW9uUmVmdW5kUmVhc29ucyA9IHJlZnVuZFJlYXNvbnMuZmlsdGVyKChkYXRhKSA9PiBkYXRhLnJlY2VudGx5X3VzZWQgPT09IHRydWUpO1xuICAgICAgICB0aGlzLmNvbW1vblJlZnVuZFJlYXNvbnMuc29ydCgoYSwgYikgPT4gYS50b1N0cmluZygpLmxvY2FsZUNvbXBhcmUoYikpO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0gKTtcbiAgfVxufVxuICAgZ2V0RXJyb3JDbGFzcyhlbGVtZW50SWQpIHtcbiAgICAgaWYodGhpcy5lcnJvck1zZy5sZW5ndGggPiAwKSB7XG4gICAgICAgY29uc3QgZWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcbiAgICAgICBlbGUuY2xhc3NMaXN0LmFkZCgnaW5saW5lLWVycm9yLWNsYXNzJyk7XG4gICAgIH1cbiAgICAgIFxuICB9XG5cbiAgY2hhbmdlSXNzdWVSZWZ1bmRSZWFzb24oKSB7XG4gICAgdGhpcy5pc0Zyb21DaGVja0Fuc1BhZ2UgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5lcnJvck1zZyA9IFtdO1xuICAgIHRoaXMucmVmdW5kSGFzRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLmlzUmVhc29uRW1wdHkgPSBmYWxzZTtcbiAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJ2lzc3VlcmVmdW5kcGFnZTEnO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICcnO1xuICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24gPSB0cnVlO1xuICB9XG5cbiAgY29uZmlybUlzc3VlUmVmdW5kKCkge1xuICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLmVycm9yTXNnID0gW107XG4gICAgaWYoIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24pIHtcbiAgICAgIHRoaXMucmV0cm9SZW1pc3Npb24gPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLmZlZXMgPSB0aGlzLnJlbWlzc2lvbkZvcm0udmFsdWUuZmVlc0xpc3QuZmlsdGVyKHZhbHVlID0+IHZhbHVlLnNlbGVjdGVkPT09dHJ1ZSk7XG4gIFxuICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gbmV3IFBvc3RSZWZ1bmRSZXRyb1JlbWlzc2lvbih0aGlzLmNjZENhc2VOdW1iZXIsIHRoaXMucGF5bWVudC5yZWZlcmVuY2UsIHRoaXMucmVmdW5kUmVhc29uLCBcbiAgICB0aGlzLnRvdGFsUmVmdW5kQW1vdW50LCB0aGlzLmZlZXMsIHRoaXMuY29udGFjdERldGFpbHNPYmopO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLnBvc3RSZWZ1bmRzUmVhc29uKHJlcXVlc3RCb2R5KS5zdWJzY3JpYmUoXG4gICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgICAgaWYgKEpTT04ucGFyc2UocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb21wU3RhdHVzICA9ICcnO1xuICAgICAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ3JlZnVuZGNvbmZpcm1hdGlvbnBhZ2UnO1xuICAgICAgICAgICAgdGhpcy5yZWZ1bmRSZWZlcmVuY2UgPUpTT04ucGFyc2UocmVzcG9uc2UpLnJlZnVuZF9yZWZlcmVuY2U7XG4gICAgICAgICAgICBpZihKU09OLnBhcnNlKHJlc3BvbnNlKS5yZWZ1bmRfYW1vdW50KSB7XG4gICAgICAgICAgICB0aGlzLnJlZnVuZEFtb3VudCA9IEpTT04ucGFyc2UocmVzcG9uc2UpLnJlZnVuZF9hbW91bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gICAgICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pXG4gIH1cblxuLy8gUmV0cm8gUmVmdW5kXG5cbiAgLy8gY29uZmlybVJldHJvUmVmdW5kKCkge1xuICAvLyAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IHRydWU7XG4gIC8vICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgLy8gICB0aGlzLmVycm9yTXNnID0gW107XG4gIC8vICAgaWYoIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24pIHtcbiAgLy8gICAgIHRoaXMucmV0cm9SZW1pc3Npb24gPSB0cnVlO1xuICAvLyAgIH1cblxuICAvLyAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gbmV3IFBvc3RSZWZ1bmRSZXRyb1JlbWlzc2lvbih0aGlzLnBheW1lbnQucmVmZXJlbmNlLCdSUjAwNC1SZXRyb3NwZWN0aXZlIHJlbWlzc2lvbicsIHRoaXMuY29udGFjdERldGFpbHNPYmopO1xuICAvLyAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLnBvc3RSZWZ1bmRzUmVhc29uKHJlcXVlc3RCb2R5KS5zdWJzY3JpYmUoXG4gIC8vICAgICByZXNwb25zZSA9PiB7XG4gIC8vICAgICAgICAgaWYgKEpTT04ucGFyc2UocmVzcG9uc2UpKSB7XG4gIC8vICAgICAgICAgICB0aGlzLnZpZXdDb21wU3RhdHVzICA9ICcnO1xuICAvLyAgICAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ3JldHJvcmVmdW5kY29uZmlybWF0aW9ucGFnZSc7XG4gIC8vICAgICAgICAgICB0aGlzLnJlZnVuZFJlZmVyZW5jZSA9SlNPTi5wYXJzZShyZXNwb25zZSkucmVmdW5kX3JlZmVyZW5jZTtcbiAgLy8gICAgICAgICAgIGlmKEpTT04ucGFyc2UocmVzcG9uc2UpLnJlZnVuZF9hbW91bnQpIHtcbiAgLy8gICAgICAgICAgICAgdGhpcy5yZWZ1bmRBbW91bnQgPSBKU09OLnBhcnNlKHJlc3BvbnNlKS5yZWZ1bmRfYW1vdW50O1xuICAvLyAgICAgICAgICAgICB9XG4gIC8vICAgICAgICAgfVxuICAvLyAgICAgfSxcbiAgLy8gICAgIChlcnJvcjogYW55KSA9PiB7XG4gIC8vICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3I7XG4gIC8vICAgICAgIHRoaXMuaXNDb25maXJtYXRpb25CdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAvLyAgICAgfSk7XG4gIC8vIH1cblxuICBzZWxlY3RSYWRpb0J1dHRvbihrZXksIHZhbHVlKSB7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJteXJhZGlvXCIsIGtleSk7XG4gICAgY29uc3QgcmVtaXNzaW9uY3RybHM9dGhpcy5yZW1pc3Npb25Gb3JtLmNvbnRyb2xzO1xuICAgIHJlbWlzc2lvbmN0cmxzWydyZWZ1bmRERFJlYXNvbiddLnNldFZhbHVlKCdTZWxlY3QgYSBkaWZmZXJlbnQgcmVhc29uJywge29ubHlTZWxmOiB0cnVlfSk7XG4gICAgcmVtaXNzaW9uY3RybHNbJ3JlYXNvbiddLnJlc2V0KCk7XG4gICAgdGhpcy5pc1JlZnVuZFJlYXNvbnNTZWxlY3RlZCA9IHRydWU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBmYWxzZTtcbiAgICB0aGlzLmVycm9yTXNnID0gW107XG4gICAgdGhpcy5pc1JlYXNvbkVtcHR5ID0gZmFsc2U7XG4gICAgdGhpcy5zaG93UmVhc29uVGV4dCA9IGZhbHNlO1xuICAgIHRoaXMucmVmdW5kSGFzRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uID0ga2V5O1xuICAgIGlmKHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24uaW5jbHVkZXMoJ090aGVyJykpIHtcbiAgICAgIHRoaXMuc2hvd1JlYXNvblRleHQgPSB0cnVlO1xuICAgICAgdGhpcy5yZWZ1bmRIYXNFcnJvciA9IGZhbHNlO1xuICAgICAgdGhpcy5yZWZ1bmRSZWFzb24gPSBrZXk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0Y2hhbmdlKGFyZ3MpIHtcbiAgICBjb25zdCByZW1pc3Npb25jdHJscz10aGlzLnJlbWlzc2lvbkZvcm0uY29udHJvbHM7XG4gICAgcmVtaXNzaW9uY3RybHNbJ3JlZnVuZFJlYXNvbiddLnJlc2V0KCk7XG4gICAgcmVtaXNzaW9uY3RybHNbJ3JlYXNvbiddLnJlc2V0KCk7XG4gICAgdGhpcy5pc1JlZnVuZFJlYXNvbnNTZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd1JlYXNvblRleHQgPSBmYWxzZTtcbiAgICB0aGlzLnJlZnVuZEhhc0Vycm9yID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZFJlZnVuZFJlYXNvbiA9IGFyZ3MudGFyZ2V0Lm9wdGlvbnNbYXJncy50YXJnZXQub3B0aW9ucy5zZWxlY3RlZEluZGV4XS5pZDtcbiAgICB0aGlzLnJlYXNvbkxlbmd0aCA9ICgyOS10aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uLnNwbGl0KCctICcpWzFdLmxlbmd0aCk7XG5cbiAgICBpZih0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uLmluY2x1ZGVzKCdPdGhlcicpKSB7XG4gICAgICB0aGlzLnNob3dSZWFzb25UZXh0ID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVmdW5kSGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVmdW5kUmVhc29uID0gYXJncy50YXJnZXQub3B0aW9uc1thcmdzLnRhcmdldC5vcHRpb25zLnNlbGVjdGVkSW5kZXhdLmlkO1xuICAgIH1cblxuXG4gIH1cbiAgZ2V0Q29udGFjdERldGFpbHMob2JqOklSZWZ1bmRDb250YWN0RGV0YWlscywgdHlwZSkge1xuICAgIHRoaXMuY29udGFjdERldGFpbHNPYmogPSBvYmo7XG4gICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICcnO1xuICAgIHRoaXMudmlld1N0YXR1cyA9IHR5cGU7XG4gIH1cblxuICBnb3RvU2VydmljZVJlcXVlc3RQYWdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9Jyc7XG4gICAgdGhpcy5lcnJvck1zZyA9IFtdO1xuICAgIHRoaXMuaXNGcm9tQ2hlY2tBbnNQYWdlID0gZmFsc2U7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAodGhpcy5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UgJiYgIXRoaXMuaXNGcm9tUGF5bWVudERldGFpbFBhZ2UpIHtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnb3JkZXItZnVsbC12aWV3JztcbiAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJyc7XG4gICAgfSBlbHNlIGlmICggdGhpcy5pc0Zyb21SZWZ1bmRMaXN0UGFnZSApIHtcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzY2FuY2VsQ2xpY2tlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucmVmdW5kTGlzdFJlYXNvbi5lbWl0KHtyZWFzb246IHRoaXMuc2VsZWN0ZWRSZWZ1bmRSZWFzb24sIGNvZGU6IHRoaXMucmVmdW5kUmVhc29ufSk7XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRNZXRob2QgPSB0aGlzLnBheW1lbnQubWV0aG9kO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRHcm91cFJlZmVyZW5jZSA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2VcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50UmVmZXJlbmNlID0gdGhpcy5wYXltZW50LnJlZmVyZW5jZTtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdwYXltZW50LXZpZXcnO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRPcmRlclJlZih0aGlzLm9yZGVyUmVmKTtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJDQ0RFdmVudCh0aGlzLm9yZGVyQ0NERXZlbnQpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlckNyZWF0ZWQodGhpcy5vcmRlckNyZWF0ZWQpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlckRldGFpbCh0aGlzLm9yZGVyRGV0YWlsKTtcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJQYXJ0eSh0aGlzLm9yZGVyUGFydHkpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlclRvdGFsUGF5bWVudHModGhpcy5vcmRlclRvdGFsUGF5bWVudHMpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlclJlbWlzc2lvblRvdGFsKHRoaXMub3JkZXJSZW1pc3Npb25Ub3RhbCk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyRmVlc1RvdGFsKHRoaXMub3JkZXJGZWVzVG90YWwpO1xuICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ3BheW1lbnQtdmlldyc7XG4gICAgICB0aGlzLnNlbmRPcmRlckRldGFpbCA9IHRoaXMub3JkZXJEZXRhaWw7XG4gICAgICB0aGlzLnNlbmRPcmRlclJlZiA9IHRoaXMub3JkZXJSZWY7XG4gICAgICBpZih0aGlzLkxPR0dFRElOVVNFUlJPTEVTID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5nZXRVc2VyUm9sZXNMaXN0KCkuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLkxPR0dFRElOVVNFUlJPTEVTID0gZGF0YSk7XG4gICAgICB9XG4gICAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJyc7XG4gICAgfVxuICAgIC8vIGlmICh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VSVklDRVJFUVVFU1QgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFUlZJQ0VSRVFVRVNUID0gJ2ZhbHNlJztcbiAgICAvLyAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVCA9IGZhbHNlO1xuICAgIC8vIH1cbiAgICAvLyBpZiAodGhpcy5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UpIHtcbiAgICAvLyAgIC8vdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID0gZmFsc2U7XG4gICAgLy8gICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSA9IGZhbHNlO1xuICAgIC8vICAgdGhpcy52aWV3U3RhdHVzID0gJ21haW4nXG4gICAgLy8gICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgIC8vICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UodHJ1ZSk7XG4gICAgLy8gICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG5hdmlnYXRpb25QYWdlKCdzZXJ2aWNlcmVxdWVzdHBhZ2UnKTtcbiAgICAvLyB9XG4gICAgLy8gaWYgKCB0aGlzLmlzRnJvbVJlZnVuZExpc3RQYWdlICkge1xuICAgIC8vICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzY2FuY2VsQ2xpY2tlZCA9IHRydWU7XG4gICAgLy8gICB0aGlzLnJlZnVuZExpc3RSZWFzb24uZW1pdCh7cmVhc29uOiB0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uLCBjb2RlOiB0aGlzLnJlZnVuZFJlYXNvbn0pO1xuICAgIC8vICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVJlZnVuZFN0YXR1c1BhZ2UgPSB0cnVlO1xuICAgIC8vIH0gXG4gICAgLy8gaWYoIXRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlKSAge1xuICAgIC8vICAgICBpZih0aGlzLnBheW1lbnQpIHtcbiAgICAvLyAgICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldHBheW1lbnRQYWdlVmlldyh7bWV0aG9kOiB0aGlzLnBheW1lbnQubWV0aG9kLHBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlOiB0aGlzLnBheW1lbnRHcm91cFJlZiwgcmVmZXJlbmNlOnRoaXMucGF5bWVudC5yZWZlcmVuY2V9KTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICBpZiAodGhpcy5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UpIHsgXG4gICAgLy8gICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRuYXZpZ2F0aW9uUGFnZSgnc2VydmljZXJlcXVlc3RwYWdlJyk7XG4gICAgLy8gICAgIH0gZWxzZSB7XG4gICAgLy8gICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRuYXZpZ2F0aW9uUGFnZSgncGF5bWVudGRldGFpbHNwYWdlJyk7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICAvLyAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICAvLyAgICAgLy8gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UID0gdHJ1ZTtcbiAgICAvLyAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA9IHRoaXMuaXNUdXJuT2ZmO1xuICAgIC8vICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNORVdQQ0lQQUxPRkYgPSB0aGlzLmlzTmV3UGNpcGFsT2ZmO1xuICAgIC8vICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNPTERQQ0lQQUxPRkYgPSB0aGlzLmlzT2xkUGNpcGFsT2ZmO1xuICAgIC8vICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlID0gdHJ1ZTsgIFxuICAgIC8vICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHRydWU7XG4gICAgLy8gICAgIGxldCBwYXJ0VXJsID0gdGhpcy5ic1BheW1lbnREY25OdW1iZXIgPyBgJmRjbj0ke3RoaXMuYnNQYXltZW50RGNuTnVtYmVyfWAgOiAnJztcbiAgICAvLyAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA/ICcmaXNCdWxrU2Nhbm5pbmc9RW5hYmxlJyA6ICcmaXNCdWxrU2Nhbm5pbmc9RGlzYWJsZSc7XG4gICAgLy8gICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJztcbiAgICAvLyAgICAgcGFydFVybCArPSB0aGlzLmlzU3RyYXRlZ2ljRml4RW5hYmxlID8gJyZpc1N0Rml4RW5hYmxlPUVuYWJsZScgOiAnJmlzU3RGaXhFbmFibGU9RGlzYWJsZSc7XG4gICAgLy8gICAgIHBhcnRVcmwgKz0gYCZjYXNlVHlwZT0ke3RoaXMuY2FzZVR5cGV9YDtcbiAgICAvLyAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNORVdQQ0lQQUxPRkYgPyAnJmlzTmV3UGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzTmV3UGNpcGFsT2ZmPURpc2FibGUnO1xuICAgIC8vICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU09MRFBDSVBBTE9GRiA/ICcmaXNPbGRQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNPbGRQY2lwYWxPZmY9RGlzYWJsZSc7XG4gICAgLy8gICAgIGlmKHRoaXMuaXNGcm9tUGF5bWVudERldGFpbFBhZ2UpIHtcbiAgICAvLyAgICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21QYXltZW50RGV0YWlsUGFnZVxuICAgIC8vICAgICB9XG4gICAgLy8gICAgIGlmKCF0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQpIHtcbiAgICAvLyAgICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPSB1bmRlZmluZWQ7XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgaWYgKCB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VSVklDRVJFUVVFU1QpIHtcbiAgICAvLyAgICAgICBjb25zdCB1cmwgPSBgL3BheW1lbnQtaGlzdG9yeS8ke3RoaXMuY2NkQ2FzZU51bWJlcn0/dmlldz1jYXNlLXRyYW5zYWN0aW9ucyZzZWxlY3RlZE9wdGlvbj0ke3RoaXMub3B0aW9ufSR7cGFydFVybH1gO1xuICAgIC8vICAgICAgIHRoaXMucm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gKCkgPT4gZmFsc2U7XG4gICAgLy8gICAgICAgdGhpcy5yb3V0ZXIub25TYW1lVXJsTmF2aWdhdGlvbiA9ICdyZWxvYWQnO1xuICAgIC8vICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsKTtcbiAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICBjb25zdCB1cmwgPSBgL3BheW1lbnQtaGlzdG9yeS8ke3RoaXMuY2NkQ2FzZU51bWJlcn0/dmlldz1jYXNlLXRyYW5zYWN0aW9ucyZ0YWtlUGF5bWVudD0ke3RoaXMucGF5bWVudExpYkNvbXBvbmVudC5UQUtFUEFZTUVOVH0mc2VsZWN0ZWRPcHRpb249JHt0aGlzLm9wdGlvbn0ke3BhcnRVcmx9YDtcbiAgICAvLyAgICAgICB0aGlzLnJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkUmV1c2VSb3V0ZSA9ICgpID0+IGZhbHNlO1xuICAgIC8vICAgICAgIHRoaXMucm91dGVyLm9uU2FtZVVybE5hdmlnYXRpb24gPSAncmVsb2FkJztcbiAgICAvLyAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybCk7XG4gICAgLy8gICAgIH1cbiAgICAgICBcbiAgICAvLyB9IGVsc2Uge1xuICAgIC8vICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID09PSAncmVmdW5kc3RhdHVzbGlzdCc7XG4gICAgLy8gICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSA9IHRydWU7XG4gICAgLy8gfVxuICB9XG4gIGdvdG9BZGRyZXNzUGFnZShub3RlPzogSVJlZnVuZENvbnRhY3REZXRhaWxzKSB7XG4gICAgaWYgKG5vdGUpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uID0geyBjb250YWN0X2RldGFpbHM6IG5vdGUsIG5vdGlmaWNhdGlvbl90eXBlOiBub3RlLm5vdGlmaWNhdGlvbl90eXBlIH07XG4gICAgfVxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy52aWV3Q29tcFN0YXR1cyA9ICdhZGRyZWZ1bmRmb3JyZW1pc3Npb24nO1xuICAgIHRoaXMudmlld1N0YXR1cyA9ICcnO1xuICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24gPSB0cnVlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZmFsc2U7XG4gIH1cbiAgZ290b1JlbWlzc2lvblN1Y2Nlc3MoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMudmlld0NvbXBTdGF0dXMgPSAnJztcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAncmV0cm9yZW1pc3Npb25jb25maXJtYXRpb25wYWdlJztcbiAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGZhbHNlO1xuICB9XG5cbiAgZ290b0Nhc2V0cmFuc2F0aW9uUGFnZSgpIHtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG5hdmlnYXRpb25QYWdlKCdjYXNldHJhbnNhY3Rpb25zJyk7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLmVycm9yTXNnID0gW107XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVklFVyA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA9IHRoaXMuaXNUdXJuT2ZmO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU05FV1BDSVBBTE9GRiA9IHRoaXMuaXNOZXdQY2lwYWxPZmY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTT0xEUENJUEFMT0ZGID0gdGhpcy5pc09sZFBjaXBhbE9mZjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlID0gdHJ1ZTsgIFxuICAgIHRoaXMucmVzZXRPcmRlckRhdGEoKTtcbiAgICBsZXQgcGFydFVybCA9IHRoaXMuYnNQYXltZW50RGNuTnVtYmVyID8gYCZkY249JHt0aGlzLmJzUGF5bWVudERjbk51bWJlcn1gIDogJyc7XG4gICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPyAnJmlzQnVsa1NjYW5uaW5nPUVuYWJsZScgOiAnJmlzQnVsa1NjYW5uaW5nPURpc2FibGUnO1xuICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU1RVUk5PRkYgPyAnJmlzVHVybk9mZj1FbmFibGUnIDogJyZpc1R1cm5PZmY9RGlzYWJsZSc7XG4gICAgIHBhcnRVcmwgKz0gdGhpcy5pc1N0cmF0ZWdpY0ZpeEVuYWJsZSA/ICcmaXNTdEZpeEVuYWJsZT1FbmFibGUnIDogJyZpc1N0Rml4RW5hYmxlPURpc2FibGUnO1xuICAgICBwYXJ0VXJsICs9IGAmY2FzZVR5cGU9JHt0aGlzLmNhc2VUeXBlfWA7XG4gICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTTkVXUENJUEFMT0ZGID8gJyZpc05ld1BjaXBhbE9mZj1FbmFibGUnIDogJyZpc05ld1BjaXBhbE9mZj1EaXNhYmxlJztcbiAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNPTERQQ0lQQUxPRkYgPyAnJmlzT2xkUGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzT2xkUGNpcGFsT2ZmPURpc2FibGUnO1xuICAgIGNvbnN0IHVybCA9IGAvcGF5bWVudC1oaXN0b3J5LyR7dGhpcy5jY2RDYXNlTnVtYmVyfT92aWV3PWNhc2UtdHJhbnNhY3Rpb25zJnRha2VQYXltZW50PSR7dGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UfSZzZWxlY3RlZE9wdGlvbj0ke3RoaXMub3B0aW9ufSR7cGFydFVybH1gO1xuICAgIHRoaXMucm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gKCkgPT4gZmFsc2U7XG4gICAgdGhpcy5yb3V0ZXIub25TYW1lVXJsTmF2aWdhdGlvbiA9ICdyZWxvYWQnO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsKTtcbiAgfVxuXG4gIGdvdG9DYXNldHJhbnNhdGlvblBhZ2VDYW5jZWxCdG5DbGlja2VkKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5lcnJvck1zZyA9IFtdO1xuICAgIGlmKCAhdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZSkge1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRuYXZpZ2F0aW9uUGFnZSgnY2FzZXRyYW5zYWN0aW9ucycpO1xuICAgICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UoZmFsc2UpO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlZJRVcgPSdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAnY2FzZS10cmFuc2FjdGlvbnMnO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSB0cnVlO1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldyA9IGZhbHNlO1xuICAvLyAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0bmF2aWdhdGlvblBhZ2UoJ2Nhc2V0cmFuc2FjdGlvbnMnKTtcbiAgLy8gICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZShmYWxzZSk7XG4gIC8vICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlZJRVcgPSdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gIC8vICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgLy8gICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHRydWU7XG4gIC8vICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldyA9IGZhbHNlO1xuICAvLyAgIHRoaXMucmVzZXRPcmRlckRhdGEoKTsgbGV0IHBhcnRVcmwgPSB0aGlzLmJzUGF5bWVudERjbk51bWJlciA/IGAmZGNuPSR7dGhpcy5ic1BheW1lbnREY25OdW1iZXJ9YCA6ICcnO1xuICAvLyAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPyAnJmlzQnVsa1NjYW5uaW5nPUVuYWJsZScgOiAnJmlzQnVsa1NjYW5uaW5nPURpc2FibGUnO1xuICAvLyAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJztcbiAgLy8gICBwYXJ0VXJsICs9IHRoaXMuaXNTdHJhdGVnaWNGaXhFbmFibGUgPyAnJmlzU3RGaXhFbmFibGU9RW5hYmxlJyA6ICcmaXNTdEZpeEVuYWJsZT1EaXNhYmxlJztcbiAgLy8gICBwYXJ0VXJsICs9IGAmY2FzZVR5cGU9JHt0aGlzLmNhc2VUeXBlfWA7XG4gIC8vICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNORVdQQ0lQQUxPRkYgPyAnJmlzTmV3UGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzTmV3UGNpcGFsT2ZmPURpc2FibGUnO1xuICAvLyAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTT0xEUENJUEFMT0ZGID8gJyZpc09sZFBjaXBhbE9mZj1FbmFibGUnIDogJyZpc09sZFBjaXBhbE9mZj1EaXNhYmxlJztcbiAgLy8gIGNvbnN0IHVybCA9IGAvcGF5bWVudC1oaXN0b3J5LyR7dGhpcy5jY2RDYXNlTnVtYmVyfT92aWV3PWNhc2UtdHJhbnNhY3Rpb25zJnRha2VQYXltZW50PSR7dGhpcy5wYXltZW50TGliQ29tcG9uZW50LlRBS0VQQVlNRU5UfSZzZWxlY3RlZE9wdGlvbj0ke3RoaXMub3B0aW9ufSR7cGFydFVybH1gO1xuICAvLyAgdGhpcy5yb3V0ZXIucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZFJldXNlUm91dGUgPSAoKSA9PiBmYWxzZTtcbiAgLy8gIHRoaXMucm91dGVyLm9uU2FtZVVybE5hdmlnYXRpb24gPSAncmVsb2FkJztcbiAgLy8gIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodXJsKTtcbiAgICB9IGVsc2UgeyAgXG5cbiAgICBpZiAodGhpcy5wYXltZW50TGliQ29tcG9uZW50LlJFRlVORExJU1QpIHtcbiAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdyZWZ1bmQtbGlzdCc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlQgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuU0VSVklDRVJFUVVFU1QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFUlZJQ0VSRVFVRVNUID0gJ2ZhbHNlJztcbiAgICB9XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UoZmFsc2UpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0cGF5bWVudFBhZ2VWaWV3KHttZXRob2Q6ICcnLHBheW1lbnRfZ3JvdXBfcmVmZXJlbmNlOiAnJywgcmVmZXJlbmNlOicnfSk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRuYXZpZ2F0aW9uUGFnZSgnY2FzZXRyYW5zYWN0aW9ucycpO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNUVVJOT0ZGID0gdGhpcy5pc1R1cm5PZmY7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTTkVXUENJUEFMT0ZGID0gdGhpcy5pc05ld1BjaXBhbE9mZjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNPTERQQ0lQQUxPRkYgPSB0aGlzLmlzT2xkUGNpcGFsT2ZmO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UgPSB0cnVlOyAgXG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSB0cnVlO1xuICAgIGxldCBwYXJ0VXJsID0gdGhpcy5ic1BheW1lbnREY25OdW1iZXIgPyBgJmRjbj0ke3RoaXMuYnNQYXltZW50RGNuTnVtYmVyfWAgOiAnJztcbiAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA/ICcmaXNCdWxrU2Nhbm5pbmc9RW5hYmxlJyA6ICcmaXNCdWxrU2Nhbm5pbmc9RGlzYWJsZSc7XG4gICAgIHBhcnRVcmwgKz0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRiA/ICcmaXNUdXJuT2ZmPUVuYWJsZScgOiAnJmlzVHVybk9mZj1EaXNhYmxlJztcbiAgICAgcGFydFVybCArPSB0aGlzLmlzU3RyYXRlZ2ljRml4RW5hYmxlID8gJyZpc1N0Rml4RW5hYmxlPUVuYWJsZScgOiAnJmlzU3RGaXhFbmFibGU9RGlzYWJsZSc7XG4gICAgIHBhcnRVcmwgKz0gYCZjYXNlVHlwZT0ke3RoaXMuY2FzZVR5cGV9YDtcbiAgICAgcGFydFVybCArPSB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNORVdQQ0lQQUxPRkYgPyAnJmlzTmV3UGNpcGFsT2ZmPUVuYWJsZScgOiAnJmlzTmV3UGNpcGFsT2ZmPURpc2FibGUnO1xuICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU09MRFBDSVBBTE9GRiA/ICcmaXNPbGRQY2lwYWxPZmY9RW5hYmxlJyA6ICcmaXNPbGRQY2lwYWxPZmY9RGlzYWJsZSc7XG4gICAgIGlmKHRoaXMuaXNGcm9tUGF5bWVudERldGFpbFBhZ2UpIHtcbiAgICAgICBwYXJ0VXJsICs9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21QYXltZW50RGV0YWlsUGFnZVxuICAgICB9XG5cbiAgICAgaWYoIXRoaXMucGF5bWVudExpYkNvbXBvbmVudC5TRVJWSUNFUkVRVUVTVCkge1xuICAgICAgY29uc3QgdXJsID0gYC9wYXltZW50LWhpc3RvcnkvJHt0aGlzLmNjZENhc2VOdW1iZXJ9P3ZpZXc9Y2FzZS10cmFuc2FjdGlvbnMmdGFrZVBheW1lbnQ9JHt0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuVEFLRVBBWU1FTlR9JnNlbGVjdGVkT3B0aW9uPSR7dGhpcy5vcHRpb259JHtwYXJ0VXJsfWA7XG4gICAgICB0aGlzLnJvdXRlci5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkUmV1c2VSb3V0ZSA9ICgpID0+IGZhbHNlO1xuICAgICAgdGhpcy5yb3V0ZXIub25TYW1lVXJsTmF2aWdhdGlvbiA9ICdyZWxvYWQnO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmwpO1xuICAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdXJsID1gL3BheW1lbnQtaGlzdG9yeS8ke3RoaXMuY2NkQ2FzZU51bWJlcn0/c2VsZWN0ZWRPcHRpb249JHt0aGlzLm9wdGlvbn0ke3BhcnRVcmx9YDtcbiAgICAgIHRoaXMucm91dGVyLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRSZXVzZVJvdXRlID0gKCkgPT4gZmFsc2U7XG4gICAgICB0aGlzLnJvdXRlci5vblNhbWVVcmxOYXZpZ2F0aW9uID0gJ3JlbG9hZCc7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybCk7XG4gICAgIH1cbiAgICB9XG4gICAgXG4gIH1cblxuICByZXNldE9yZGVyRGF0YSgpIHtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldE9yZGVyUmVmKG51bGwpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJDQ0RFdmVudChudWxsKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyQ3JlYXRlZChudWxsKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyRGV0YWlsKG51bGwpO1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0b3JkZXJQYXJ0eShudWxsKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyVG90YWxQYXltZW50cyhudWxsKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG9yZGVyUmVtaXNzaW9uVG90YWwobnVsbCk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRvcmRlckZlZXNUb3RhbChudWxsKTtcbiAgfVxuXG4gIGNoYW5nZVJlZnVuZEFtb3VudCgpIHsgIFxuICAgIHRoaXMuaXNGcm9tQ2hlY2tBbnNQYWdlID0gdHJ1ZTtcbiAgICB0aGlzLnZpZXdDb21wU3RhdHVzID0gJ2lzc3VlcmVmdW5kJztcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnJztcbiAgfVxuXG4gIGdldEZvcm1hdHRlZEN1cnJlbmN5KGN1cnJlbmN5Om51bWJlcil7XG4gICAgaWYoY3VycmVuY3kudG9TdHJpbmcoKS5pbmNsdWRlcyhcIi5cIikpe1xuICAgICAgcmV0dXJuIGN1cnJlbmN5XG4gICAgfVxuICAgICByZXR1cm4gY3VycmVuY3kudG9TdHJpbmcoKS5jb25jYXQoXCIuMDBcIik7XG4gIH1cbiAgXG59Il19
|