@hmcts/ccpay-web-component 6.5.15-beta1 → 6.5.15-beta4
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/fesm2022/hmcts-ccpay-web-component.mjs +260 -184
- package/fesm2022/hmcts-ccpay-web-component.mjs.map +1 -1
- package/index.d.ts +2348 -5
- package/package.json +3 -5
- package/esm2022/hmcts-ccpay-web-component.mjs +0 -5
- package/esm2022/lib/components/add-remission/add-remission.component.mjs +0 -1276
- package/esm2022/lib/components/allocate-payments/allocate-payments.component.mjs +0 -423
- package/esm2022/lib/components/card-details/card-details.component.mjs +0 -32
- package/esm2022/lib/components/case-transactions/case-transactions.component.mjs +0 -885
- package/esm2022/lib/components/contact-details/contact-details.component.mjs +0 -338
- package/esm2022/lib/components/error-banner/error-banner.component.mjs +0 -18
- package/esm2022/lib/components/fee-summary/fee-summary.component.mjs +0 -280
- package/esm2022/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.mjs +0 -195
- package/esm2022/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.mjs +0 -275
- package/esm2022/lib/components/notification-preview/notification-preview.component.mjs +0 -79
- package/esm2022/lib/components/page-not-found.component.mjs +0 -17
- package/esm2022/lib/components/payment-list/payment-list.component.mjs +0 -36
- package/esm2022/lib/components/payment-view/payment-view.component.mjs +0 -467
- package/esm2022/lib/components/pba-details/pba-details.component.mjs +0 -18
- package/esm2022/lib/components/pba-payment/pba-payment.component.mjs +0 -163
- package/esm2022/lib/components/process-refund/process-refund.component.mjs +0 -417
- package/esm2022/lib/components/processed-payments/processed-payments.component.mjs +0 -37
- package/esm2022/lib/components/refund-list/refund-list.component.mjs +0 -73
- package/esm2022/lib/components/refund-status/refund-status.component.mjs +0 -481
- package/esm2022/lib/components/reports/reports.component.mjs +0 -337
- package/esm2022/lib/components/service-request/service-request.component.mjs +0 -516
- package/esm2022/lib/components/status-history/status-history.component.mjs +0 -33
- package/esm2022/lib/components/table/table.component.mjs +0 -127
- package/esm2022/lib/components/unprocessed-payments/unprocessed-payments.component.mjs +0 -236
- package/esm2022/lib/interfaces/AddRemissionRequest.mjs +0 -17
- package/esm2022/lib/interfaces/AddRetroRemissionRequest.mjs +0 -9
- package/esm2022/lib/interfaces/AllocatePaymentRequest.mjs +0 -41
- package/esm2022/lib/interfaces/IAllocationPaymentsRequest.mjs +0 -20
- package/esm2022/lib/interfaces/IBSPayments.mjs +0 -2
- package/esm2022/lib/interfaces/ICardDetails.mjs +0 -2
- package/esm2022/lib/interfaces/IFee.mjs +0 -2
- package/esm2022/lib/interfaces/INotificationPreview.mjs +0 -2
- package/esm2022/lib/interfaces/IOrderReferenceFee.mjs +0 -2
- package/esm2022/lib/interfaces/IPatchRefundAction.mjs +0 -2
- package/esm2022/lib/interfaces/IPayment.mjs +0 -2
- package/esm2022/lib/interfaces/IPaymentFailure.mjs +0 -2
- package/esm2022/lib/interfaces/IPaymentGroup.mjs +0 -2
- package/esm2022/lib/interfaces/IPaymentStatus.mjs +0 -12
- package/esm2022/lib/interfaces/IPaymentView.mjs +0 -2
- package/esm2022/lib/interfaces/IPayments.mjs +0 -2
- package/esm2022/lib/interfaces/IPutNotificationRequest.mjs +0 -13
- package/esm2022/lib/interfaces/IRefundAction.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundContactDetails.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundFee.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundList.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundReasons.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundRejectReason.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundStatus.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundStatusHistory.mjs +0 -2
- package/esm2022/lib/interfaces/IRefundsNotifications.mjs +0 -2
- package/esm2022/lib/interfaces/IRemission.mjs +0 -2
- package/esm2022/lib/interfaces/IResubmitRefundRequest.mjs +0 -13
- package/esm2022/lib/interfaces/IStatusHistories.mjs +0 -2
- package/esm2022/lib/interfaces/IStatusHistory.mjs +0 -2
- package/esm2022/lib/interfaces/IserviceRequestCardPayment.mjs +0 -11
- package/esm2022/lib/interfaces/IserviceRequestPbaPayment.mjs +0 -15
- package/esm2022/lib/interfaces/IssueRefundRequest.mjs +0 -11
- package/esm2022/lib/interfaces/NotificationPreviewRequest.mjs +0 -46
- package/esm2022/lib/interfaces/PayhubAntennaRequest.mjs +0 -14
- package/esm2022/lib/interfaces/PaymentToPayhubRequest.mjs +0 -17
- package/esm2022/lib/interfaces/PostIssueRefundRetroRemission.mjs +0 -9
- package/esm2022/lib/interfaces/PostRefundRetroRemission.mjs +0 -18
- package/esm2022/lib/interfaces/RefundsRequest.mjs +0 -9
- package/esm2022/lib/interfaces/UnidentifiedPaymentsRequest.mjs +0 -16
- package/esm2022/lib/interfaces/UnsolicitedPaymentsRequest.mjs +0 -22
- package/esm2022/lib/payment-lib.component.mjs +0 -430
- package/esm2022/lib/payment-lib.module.mjs +0 -181
- package/esm2022/lib/payment-lib.service.mjs +0 -49
- package/esm2022/lib/pipes/capitalize.pipe.mjs +0 -18
- package/esm2022/lib/pipes/ccd-hyphens.pipe.mjs +0 -22
- package/esm2022/lib/pipes/key-value.pipe.mjs +0 -23
- package/esm2022/lib/pipes/sanitize-html.pipe.mjs +0 -20
- package/esm2022/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.mjs +0 -87
- package/esm2022/lib/services/card-details/card-details.service.mjs +0 -39
- package/esm2022/lib/services/case-transactions/case-transactions.service.mjs +0 -39
- package/esm2022/lib/services/notification/notification.service.mjs +0 -70
- package/esm2022/lib/services/orderslist.service.mjs +0 -154
- package/esm2022/lib/services/payment-list/payment-list.service.mjs +0 -40
- package/esm2022/lib/services/payment-view/payment-view.service.mjs +0 -156
- package/esm2022/lib/services/refunds/refunds.service.mjs +0 -120
- package/esm2022/lib/services/shared/error-handler.service.mjs +0 -76
- package/esm2022/lib/services/shared/httpclient/webcomponent.http.client.mjs +0 -64
- package/esm2022/lib/services/shared/logger/console-logger.service.mjs +0 -43
- package/esm2022/lib/services/shared/logger/logger.service.mjs +0 -23
- package/esm2022/lib/services/status-history/status-history.service.mjs +0 -41
- package/esm2022/lib/services/xl-file/xl-file.service.mjs +0 -197
- package/esm2022/public_api.mjs +0 -7
- package/lib/components/add-remission/add-remission.component.d.ts +0 -208
- package/lib/components/allocate-payments/allocate-payments.component.d.ts +0 -115
- package/lib/components/card-details/card-details.component.d.ts +0 -18
- package/lib/components/case-transactions/case-transactions.component.d.ts +0 -143
- package/lib/components/contact-details/contact-details.component.d.ts +0 -54
- package/lib/components/error-banner/error-banner.component.d.ts +0 -9
- package/lib/components/fee-summary/fee-summary.component.d.ts +0 -72
- package/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.d.ts +0 -52
- package/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.d.ts +0 -63
- package/lib/components/notification-preview/notification-preview.component.d.ts +0 -30
- package/lib/components/page-not-found.component.d.ts +0 -5
- package/lib/components/payment-list/payment-list.component.d.ts +0 -19
- package/lib/components/payment-view/payment-view.component.d.ts +0 -110
- package/lib/components/pba-details/pba-details.component.d.ts +0 -10
- package/lib/components/pba-payment/pba-payment.component.d.ts +0 -41
- package/lib/components/process-refund/process-refund.component.d.ts +0 -82
- package/lib/components/processed-payments/processed-payments.component.d.ts +0 -17
- package/lib/components/refund-list/refund-list.component.d.ts +0 -26
- package/lib/components/refund-status/refund-status.component.d.ts +0 -119
- package/lib/components/reports/reports.component.d.ts +0 -49
- package/lib/components/service-request/service-request.component.d.ts +0 -141
- package/lib/components/status-history/status-history.component.d.ts +0 -19
- package/lib/components/table/table.component.d.ts +0 -45
- package/lib/components/unprocessed-payments/unprocessed-payments.component.d.ts +0 -61
- package/lib/interfaces/AddRemissionRequest.d.ts +0 -11
- package/lib/interfaces/AddRetroRemissionRequest.d.ts +0 -5
- package/lib/interfaces/AllocatePaymentRequest.d.ts +0 -31
- package/lib/interfaces/IAllocationPaymentsRequest.d.ts +0 -9
- package/lib/interfaces/IBSPayments.d.ts +0 -19
- package/lib/interfaces/ICardDetails.d.ts +0 -7
- package/lib/interfaces/IFee.d.ts +0 -29
- package/lib/interfaces/INotificationPreview.d.ts +0 -27
- package/lib/interfaces/IOrderReferenceFee.d.ts +0 -9
- package/lib/interfaces/IPatchRefundAction.d.ts +0 -4
- package/lib/interfaces/IPayment.d.ts +0 -35
- package/lib/interfaces/IPaymentFailure.d.ts +0 -13
- package/lib/interfaces/IPaymentGroup.d.ts +0 -11
- package/lib/interfaces/IPaymentStatus.d.ts +0 -11
- package/lib/interfaces/IPaymentView.d.ts +0 -5
- package/lib/interfaces/IPayments.d.ts +0 -4
- package/lib/interfaces/IPutNotificationRequest.d.ts +0 -6
- package/lib/interfaces/IRefundAction.d.ts +0 -4
- package/lib/interfaces/IRefundContactDetails.d.ts +0 -9
- package/lib/interfaces/IRefundFee.d.ts +0 -7
- package/lib/interfaces/IRefundList.d.ts +0 -20
- package/lib/interfaces/IRefundReasons.d.ts +0 -6
- package/lib/interfaces/IRefundRejectReason.d.ts +0 -4
- package/lib/interfaces/IRefundStatus.d.ts +0 -8
- package/lib/interfaces/IRefundStatusHistory.d.ts +0 -5
- package/lib/interfaces/IRefundsNotifications.d.ts +0 -16
- package/lib/interfaces/IRemission.d.ts +0 -14
- package/lib/interfaces/IResubmitRefundRequest.d.ts +0 -9
- package/lib/interfaces/IStatusHistories.d.ts +0 -7
- package/lib/interfaces/IStatusHistory.d.ts +0 -7
- package/lib/interfaces/IserviceRequestCardPayment.d.ts +0 -6
- package/lib/interfaces/IserviceRequestPbaPayment.d.ts +0 -8
- package/lib/interfaces/IssueRefundRequest.d.ts +0 -6
- package/lib/interfaces/NotificationPreviewRequest.d.ts +0 -25
- package/lib/interfaces/PayhubAntennaRequest.d.ts +0 -8
- package/lib/interfaces/PaymentToPayhubRequest.d.ts +0 -11
- package/lib/interfaces/PostIssueRefundRetroRemission.d.ts +0 -6
- package/lib/interfaces/PostRefundRetroRemission.d.ts +0 -11
- package/lib/interfaces/RefundsRequest.d.ts +0 -5
- package/lib/interfaces/UnidentifiedPaymentsRequest.d.ts +0 -7
- package/lib/interfaces/UnsolicitedPaymentsRequest.d.ts +0 -10
- package/lib/payment-lib.component.d.ts +0 -156
- package/lib/payment-lib.module.d.ts +0 -42
- package/lib/payment-lib.service.d.ts +0 -21
- package/lib/pipes/capitalize.pipe.d.ts +0 -8
- package/lib/pipes/ccd-hyphens.pipe.d.ts +0 -8
- package/lib/pipes/key-value.pipe.d.ts +0 -8
- package/lib/pipes/sanitize-html.pipe.d.ts +0 -10
- package/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.d.ts +0 -27
- package/lib/services/card-details/card-details.service.d.ts +0 -17
- package/lib/services/case-transactions/case-transactions.service.d.ts +0 -17
- package/lib/services/notification/notification.service.d.ts +0 -21
- package/lib/services/orderslist.service.d.ts +0 -77
- package/lib/services/payment-list/payment-list.service.d.ts +0 -18
- package/lib/services/payment-view/payment-view.service.d.ts +0 -61
- package/lib/services/refunds/refunds.service.d.ts +0 -36
- package/lib/services/shared/error-handler.service.d.ts +0 -14
- package/lib/services/shared/httpclient/webcomponent.http.client.d.ts +0 -17
- package/lib/services/shared/logger/console-logger.service.d.ts +0 -11
- package/lib/services/shared/logger/logger.service.d.ts +0 -14
- package/lib/services/status-history/status-history.service.d.ts +0 -17
- package/lib/services/xl-file/xl-file.service.d.ts +0 -16
- package/public_api.d.ts +0 -3
|
@@ -1,481 +0,0 @@
|
|
|
1
|
-
import { Component, forwardRef, Inject, Input } from '@angular/core';
|
|
2
|
-
import { RefundsService } from '../../services/refunds/refunds.service';
|
|
3
|
-
import { NotificationService } from '../../services/notification/notification.service';
|
|
4
|
-
import { FormBuilder, FormControl, Validators } from '@angular/forms';
|
|
5
|
-
import { OrderslistService } from '../../services/orderslist.service';
|
|
6
|
-
import { IPutNotificationRequest } from '../../interfaces/IPutNotificationRequest';
|
|
7
|
-
import { IResubmitRefundRequest } from '../../interfaces/IResubmitRefundRequest';
|
|
8
|
-
import { PaymentViewService } from '../../services/payment-view/payment-view.service';
|
|
9
|
-
import { CommonModule } from '@angular/common';
|
|
10
|
-
import { NotificationPreviewComponent } from '../notification-preview/notification-preview.component';
|
|
11
|
-
import { ContactDetailsComponent } from '../contact-details/contact-details.component';
|
|
12
|
-
import { AddRemissionComponent } from '../add-remission/add-remission.component';
|
|
13
|
-
import { CcdHyphensPipe } from '../../pipes/ccd-hyphens.pipe';
|
|
14
|
-
import { CapitalizePipe } from '../../pipes/capitalize.pipe';
|
|
15
|
-
import * as i0 from "@angular/core";
|
|
16
|
-
import * as i1 from "@angular/forms";
|
|
17
|
-
import * as i2 from "../../services/refunds/refunds.service";
|
|
18
|
-
import * as i3 from "../../services/notification/notification.service";
|
|
19
|
-
import * as i4 from "../../services/orderslist.service";
|
|
20
|
-
import * as i5 from "../../services/payment-view/payment-view.service";
|
|
21
|
-
import * as i6 from "@angular/common";
|
|
22
|
-
export class RefundStatusComponent {
|
|
23
|
-
formBuilder;
|
|
24
|
-
refundService;
|
|
25
|
-
notificationService;
|
|
26
|
-
paymentLibComponent;
|
|
27
|
-
OrderslistService;
|
|
28
|
-
paymentViewService;
|
|
29
|
-
LOGGEDINUSERROLES = [];
|
|
30
|
-
API_ROOT;
|
|
31
|
-
ccdCaseNumber;
|
|
32
|
-
isTurnOff;
|
|
33
|
-
orderParty;
|
|
34
|
-
refundStatusForm;
|
|
35
|
-
selectedRefundReason;
|
|
36
|
-
rejectedRefundList = [];
|
|
37
|
-
notificationList;
|
|
38
|
-
notification;
|
|
39
|
-
approvalStatus = 'Sent for approval';
|
|
40
|
-
rejectStatus = 'Update required';
|
|
41
|
-
errorMessage = null;
|
|
42
|
-
viewName;
|
|
43
|
-
refundReason;
|
|
44
|
-
refundlist;
|
|
45
|
-
bsPaymentDcnNumber;
|
|
46
|
-
isCallFromRefundList;
|
|
47
|
-
refundButtonState = '';
|
|
48
|
-
isAmountEmpty = false;
|
|
49
|
-
isReasonEmpty = false;
|
|
50
|
-
amountHasError = false;
|
|
51
|
-
isRemissionLessThanFeeError = false;
|
|
52
|
-
refundHasError = false;
|
|
53
|
-
refundReasons = [];
|
|
54
|
-
refundStatusHistories;
|
|
55
|
-
refundNotifications;
|
|
56
|
-
isResendOperationSuccess = false;
|
|
57
|
-
isEditDetailsClicked = false;
|
|
58
|
-
isEditAddressDeatilsClicked = false;
|
|
59
|
-
addressDetails;
|
|
60
|
-
refundReference;
|
|
61
|
-
refundAmount;
|
|
62
|
-
refundCode;
|
|
63
|
-
isRefundBtnDisabled = true;
|
|
64
|
-
isFromPayBubble = false;
|
|
65
|
-
oldRefundReason;
|
|
66
|
-
refundreason;
|
|
67
|
-
navigationpage;
|
|
68
|
-
isLastUpdatedByCurrentUser = true;
|
|
69
|
-
isProcessRefund = false;
|
|
70
|
-
changedAmount;
|
|
71
|
-
isRemissionsMatch;
|
|
72
|
-
payment;
|
|
73
|
-
changeRefundReason;
|
|
74
|
-
fees;
|
|
75
|
-
refundFees;
|
|
76
|
-
paymentObj;
|
|
77
|
-
templateInstructionType;
|
|
78
|
-
notificationSentViewIndex = -1;
|
|
79
|
-
notificationPreview = false;
|
|
80
|
-
notificationSentView = false;
|
|
81
|
-
allowedRolesToAccessRefund = ['payments-refund-approver', 'payments-refund', 'payments'];
|
|
82
|
-
isRefundStatusResetBtnDisabled = false;
|
|
83
|
-
constructor(formBuilder, refundService, notificationService, paymentLibComponent, OrderslistService, paymentViewService) {
|
|
84
|
-
this.formBuilder = formBuilder;
|
|
85
|
-
this.refundService = refundService;
|
|
86
|
-
this.notificationService = notificationService;
|
|
87
|
-
this.paymentLibComponent = paymentLibComponent;
|
|
88
|
-
this.OrderslistService = OrderslistService;
|
|
89
|
-
this.paymentViewService = paymentViewService;
|
|
90
|
-
}
|
|
91
|
-
ngOnInit() {
|
|
92
|
-
this.resetRemissionForm([false, false, false, false], 'All');
|
|
93
|
-
this.bsPaymentDcnNumber = this.paymentLibComponent.bspaymentdcn;
|
|
94
|
-
this.isCallFromRefundList = this.paymentLibComponent.isCallFromRefundList;
|
|
95
|
-
if (this.API_ROOT == 'api/payment-history') {
|
|
96
|
-
this.isFromPayBubble = true;
|
|
97
|
-
}
|
|
98
|
-
if (this.paymentLibComponent.isRefundStatusView) {
|
|
99
|
-
this.viewName = 'refundview';
|
|
100
|
-
this.OrderslistService.getRefundView().subscribe((data) => this.refundlist = data);
|
|
101
|
-
this.OrderslistService.getCCDCaseNumberforRefund.subscribe((data) => this.ccdCaseNumber = data);
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
this.viewName = 'refundstatuslist';
|
|
105
|
-
this.refundService.getRefundStatusList(this.ccdCaseNumber).subscribe(refundList => {
|
|
106
|
-
this.rejectedRefundList = refundList['refund_list'];
|
|
107
|
-
}),
|
|
108
|
-
(error) => {
|
|
109
|
-
this.errorMessage = error.replace(/"/g, "");
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
this.refundStatusForm = this.formBuilder.group({
|
|
113
|
-
amount: new FormControl('', Validators.compose([
|
|
114
|
-
Validators.required,
|
|
115
|
-
Validators.pattern('^[0-9]+(\.[0-9]{1,2})?$')
|
|
116
|
-
])),
|
|
117
|
-
refundReason: new FormControl('', Validators.compose([Validators.required])),
|
|
118
|
-
reason: new FormControl()
|
|
119
|
-
});
|
|
120
|
-
if (this.refundlist !== undefined) {
|
|
121
|
-
this.getRefundsNotification();
|
|
122
|
-
this.getRefundsStatusHistoryList();
|
|
123
|
-
if (this.LOGGEDINUSERROLES.some(i => i.includes('payments-refund-approver'))) {
|
|
124
|
-
this.isProcessRefund = true;
|
|
125
|
-
this.refundButtonState = this.refundlist.refund_status.name;
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
if (this.LOGGEDINUSERROLES.some(i => i.includes('payments-refund'))) {
|
|
129
|
-
this.isProcessRefund = false;
|
|
130
|
-
this.refundButtonState = this.refundlist.refund_status.name;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
getRefundsStatusHistoryList() {
|
|
135
|
-
if (this.refundlist !== undefined) {
|
|
136
|
-
this.refundService.getRefundStatusHistory(this.refundlist.refund_reference).subscribe(statusHistoryList => {
|
|
137
|
-
this.refundStatusHistories = statusHistoryList.status_history_dto_list;
|
|
138
|
-
this.isLastUpdatedByCurrentUser = statusHistoryList.last_updated_by_current_user;
|
|
139
|
-
}),
|
|
140
|
-
(error) => {
|
|
141
|
-
this.errorMessage = error.replace(/"/g, "");
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
getRefundsNotification() {
|
|
146
|
-
this.notificationService.getRefundNotification(this.refundlist.refund_reference).subscribe(refundsNotification => {
|
|
147
|
-
this.notificationList = refundsNotification['notifications'];
|
|
148
|
-
}),
|
|
149
|
-
(error) => {
|
|
150
|
-
this.errorMessage = error.replace(/"/g, "");
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
goToRefundView(refundlist, navigationpage) {
|
|
154
|
-
this.OrderslistService.setRefundView(refundlist);
|
|
155
|
-
this.OrderslistService.setCCDCaseNumber(this.ccdCaseNumber);
|
|
156
|
-
this.paymentLibComponent.viewName = 'refundstatuslist';
|
|
157
|
-
this.paymentLibComponent.isRefundStatusView = true;
|
|
158
|
-
this.refundlist = refundlist;
|
|
159
|
-
this.OrderslistService.setnavigationPage(navigationpage);
|
|
160
|
-
}
|
|
161
|
-
loadCaseTransactionPage() {
|
|
162
|
-
this.OrderslistService.setnavigationPage('casetransactions');
|
|
163
|
-
this.OrderslistService.setisFromServiceRequestPage(false);
|
|
164
|
-
this.paymentLibComponent.viewName = 'case-transactions';
|
|
165
|
-
this.paymentLibComponent.ISBSENABLE = true;
|
|
166
|
-
this.paymentLibComponent.isRefundStatusView = false;
|
|
167
|
-
}
|
|
168
|
-
loadRefundListPage() {
|
|
169
|
-
this.OrderslistService.getnavigationPageValue().subscribe((data) => this.navigationpage = data);
|
|
170
|
-
if (this.navigationpage === 'casetransactions') {
|
|
171
|
-
this.loadCaseTransactionPage();
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
this.paymentLibComponent.viewName = 'refund-list';
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
gotoReviewDetailsPage(event) {
|
|
178
|
-
// event.preventDefault();
|
|
179
|
-
this.errorMessage = false;
|
|
180
|
-
this.paymentLibComponent.isRefundStatusView = true;
|
|
181
|
-
this.ngOnInit();
|
|
182
|
-
}
|
|
183
|
-
gotoReviewAndReSubmitPage() {
|
|
184
|
-
this.viewName = 'reviewandsubmitview';
|
|
185
|
-
this.getTemplateInstructionType(this.paymentObj, this.refundlist.payment_reference);
|
|
186
|
-
this.oldRefundReason = this.refundlist.reason;
|
|
187
|
-
this.changedAmount = this.refundlist.amount;
|
|
188
|
-
this.refundreason = this.refundStatusHistories.filter(data => data.status.toLowerCase() === 'update required')[0].notes;
|
|
189
|
-
this.refundService.getRefundReasons().subscribe(refundReasons => {
|
|
190
|
-
this.refundReasons = refundReasons;
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
gotoRefundReasonPage(refundReason) {
|
|
194
|
-
this.isRefundBtnDisabled = false;
|
|
195
|
-
this.paymentLibComponent.REFUNDLIST = "true";
|
|
196
|
-
this.paymentLibComponent.isFromRefundStatusPage = true;
|
|
197
|
-
this.ccdCaseNumber = this.paymentLibComponent.CCD_CASE_NUMBER;
|
|
198
|
-
this.errorMessage = false;
|
|
199
|
-
this.changeRefundReason = refundReason;
|
|
200
|
-
this.viewName = 'issuerefundpage1';
|
|
201
|
-
}
|
|
202
|
-
gotoAmountPage() {
|
|
203
|
-
this.errorMessage = false;
|
|
204
|
-
this.paymentLibComponent.REFUNDLIST = "true";
|
|
205
|
-
this.isRefundBtnDisabled = false;
|
|
206
|
-
this.ccdCaseNumber = this.paymentLibComponent.CCD_CASE_NUMBER;
|
|
207
|
-
this.paymentLibComponent.isFromRefundStatusPage = true;
|
|
208
|
-
if (this.refundlist.reason == 'Retrospective remission') {
|
|
209
|
-
this.viewName = 'processretroremissonpage';
|
|
210
|
-
}
|
|
211
|
-
else {
|
|
212
|
-
this.viewName = 'issuerefund';
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
goToReviewAndSubmitView() {
|
|
216
|
-
const remissionctrls = this.refundStatusForm.controls;
|
|
217
|
-
if (this.refundStatusForm.dirty) {
|
|
218
|
-
if (remissionctrls['amount'].value == '') {
|
|
219
|
-
this.resetRemissionForm([true, false, false, false], 'amount');
|
|
220
|
-
}
|
|
221
|
-
else if (remissionctrls['amount'].value != '' && remissionctrls['amount'].invalid) {
|
|
222
|
-
this.resetRemissionForm([false, true, false, false], 'amount');
|
|
223
|
-
}
|
|
224
|
-
else if (remissionctrls['reason'].value == '') {
|
|
225
|
-
this.resetRemissionForm([false, false, false, true], 'reason');
|
|
226
|
-
}
|
|
227
|
-
else {
|
|
228
|
-
this.refundlist.reason = remissionctrls['reason'].value;
|
|
229
|
-
this.viewName = 'reviewandsubmitview';
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
resetRemissionForm(val, field) {
|
|
234
|
-
if (field === 'All') {
|
|
235
|
-
this.isAmountEmpty = val[0];
|
|
236
|
-
this.amountHasError = val[1];
|
|
237
|
-
this.isRemissionLessThanFeeError = val[2];
|
|
238
|
-
this.isReasonEmpty = val[3];
|
|
239
|
-
}
|
|
240
|
-
else if (field === 'amount' || field === 'All') {
|
|
241
|
-
this.isAmountEmpty = val[0];
|
|
242
|
-
this.amountHasError = val[1];
|
|
243
|
-
this.isRemissionLessThanFeeError = val[2];
|
|
244
|
-
}
|
|
245
|
-
else if (field === 'reason' || field === 'All') {
|
|
246
|
-
this.isReasonEmpty = val[3];
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
selectRadioButton(key, value) {
|
|
250
|
-
this.refundHasError = false;
|
|
251
|
-
this.selectedRefundReason = key;
|
|
252
|
-
if (key === 'Other') {
|
|
253
|
-
this.refundHasError = false;
|
|
254
|
-
this.refundReason = key;
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
getRefundListReason(refundListReason) {
|
|
258
|
-
if (this.paymentLibComponent.isFromRefundStatusPage && !this.paymentLibComponent.iscancelClicked) {
|
|
259
|
-
if (refundListReason.reason != undefined && refundListReason.reason != null && refundListReason.reason != this.refundlist.reason) {
|
|
260
|
-
this.refundlist.reason = refundListReason.reason;
|
|
261
|
-
this.refundlist.reason_code = refundListReason.code.split('-')[0].trim();
|
|
262
|
-
this.refundlist.code = refundListReason.code;
|
|
263
|
-
this.refundCode = refundListReason.code;
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
else {
|
|
267
|
-
this.isRefundBtnDisabled = true;
|
|
268
|
-
}
|
|
269
|
-
this.notificationPreview = false;
|
|
270
|
-
this.viewName = 'reviewandsubmitview';
|
|
271
|
-
this.paymentLibComponent.CCD_CASE_NUMBER = this.ccdCaseNumber;
|
|
272
|
-
}
|
|
273
|
-
getRefundAmount(amount) {
|
|
274
|
-
if (this.paymentLibComponent.isFromRefundStatusPage && !this.paymentLibComponent.iscancelClicked) {
|
|
275
|
-
if (amount > 0) {
|
|
276
|
-
this.changedAmount = amount;
|
|
277
|
-
// this.refundlist.amount = amount;
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
else {
|
|
281
|
-
this.isRefundBtnDisabled = true;
|
|
282
|
-
}
|
|
283
|
-
this.notificationPreview = false;
|
|
284
|
-
this.viewName = 'reviewandsubmitview';
|
|
285
|
-
this.paymentLibComponent.CCD_CASE_NUMBER = this.ccdCaseNumber;
|
|
286
|
-
}
|
|
287
|
-
getRefundFees(fees) {
|
|
288
|
-
this.fees = fees;
|
|
289
|
-
this.refundFees = this.fees.map(obj => ({
|
|
290
|
-
fee_id: obj.id,
|
|
291
|
-
code: obj.code,
|
|
292
|
-
version: obj.version,
|
|
293
|
-
volume: obj.updated_volume ? obj.updated_volume : obj.volume,
|
|
294
|
-
refund_amount: obj.refund_amount
|
|
295
|
-
}));
|
|
296
|
-
}
|
|
297
|
-
gotoReviewRefundConfirmationPage() {
|
|
298
|
-
// if (this.oldRefundReason === this.refundlist.reason) {
|
|
299
|
-
// this.refundCode = '';
|
|
300
|
-
// }
|
|
301
|
-
if (this.refundFees === undefined) {
|
|
302
|
-
this.refundFees = this.refundlist['refund_fees'];
|
|
303
|
-
}
|
|
304
|
-
if (this.refundlist.reason == 'Retrospective remission') {
|
|
305
|
-
this.refundFees[0].refund_amount = this.changedAmount;
|
|
306
|
-
}
|
|
307
|
-
this.refundCode = this.refundlist.code;
|
|
308
|
-
const resubmitRequest = new IResubmitRefundRequest(this.refundCode, this.changedAmount, this.refundlist.contact_details, this.refundFees);
|
|
309
|
-
this.refundService.patchResubmitRefund(resubmitRequest, this.refundlist.refund_reference).subscribe(response => {
|
|
310
|
-
if (JSON.parse(response)) {
|
|
311
|
-
this.refundReference = JSON.parse(response).refund_reference;
|
|
312
|
-
this.refundAmount = JSON.parse(response).refund_amount;
|
|
313
|
-
this.viewName = 'reviewrefundconfirmationpage';
|
|
314
|
-
}
|
|
315
|
-
}, (error) => {
|
|
316
|
-
this.errorMessage = error.replace(/"/g, "");
|
|
317
|
-
});
|
|
318
|
-
}
|
|
319
|
-
gotoEditAddressDetails(note) {
|
|
320
|
-
this.notification = note;
|
|
321
|
-
this.isEditDetailsClicked = true;
|
|
322
|
-
this.viewName = 'refundEditView';
|
|
323
|
-
}
|
|
324
|
-
getContactDetails(obj) {
|
|
325
|
-
this.addressDetails = obj;
|
|
326
|
-
this.getTemplateInstructionType(this.paymentObj, this.refundlist.payment_reference);
|
|
327
|
-
this.notificationPreview = false;
|
|
328
|
-
this.viewName = 'revieweditdetailsconfirmationpage';
|
|
329
|
-
}
|
|
330
|
-
getContactDetailsForRefundList(obj) {
|
|
331
|
-
this.refundlist.contact_details = obj;
|
|
332
|
-
this.getTemplateInstructionType(this.paymentObj, this.refundlist.payment_reference);
|
|
333
|
-
this.notificationPreview = false;
|
|
334
|
-
this.isEditDetailsClicked = false;
|
|
335
|
-
this.isRefundBtnDisabled = false;
|
|
336
|
-
this.viewName = 'reviewandsubmitview';
|
|
337
|
-
}
|
|
338
|
-
gotoEditDetailsPage(note, view) {
|
|
339
|
-
if (note) {
|
|
340
|
-
this.notification = { contact_details: note, notification_type: note.notification_type };
|
|
341
|
-
}
|
|
342
|
-
this.isEditDetailsClicked = true;
|
|
343
|
-
this.viewName = view;
|
|
344
|
-
}
|
|
345
|
-
submitEditDetail() {
|
|
346
|
-
this.isResendOperationSuccess = false;
|
|
347
|
-
const contactDetails = this.addressDetails.notification_type === 'EMAIL' ? this.addressDetails.email :
|
|
348
|
-
{
|
|
349
|
-
address_line: this.addressDetails.address_line,
|
|
350
|
-
city: this.addressDetails.city,
|
|
351
|
-
county: this.addressDetails.county,
|
|
352
|
-
country: this.addressDetails.country,
|
|
353
|
-
postal_code: this.addressDetails.postal_code,
|
|
354
|
-
};
|
|
355
|
-
const resendRequest = new IPutNotificationRequest(contactDetails, this.addressDetails.notification_type);
|
|
356
|
-
this.refundService.putResendOrEdit(resendRequest, this.refundlist.refund_reference, this.addressDetails.notification_type).subscribe((response) => {
|
|
357
|
-
this.isResendOperationSuccess = response;
|
|
358
|
-
}, (error) => {
|
|
359
|
-
this.isResendOperationSuccess = false;
|
|
360
|
-
this.errorMessage = error.replace(/"/g, "");
|
|
361
|
-
});
|
|
362
|
-
}
|
|
363
|
-
putResend(notification) {
|
|
364
|
-
this.isResendOperationSuccess = false;
|
|
365
|
-
const contactDetails = notification.notification_type === 'EMAIL' ? notification.contact_details.email :
|
|
366
|
-
{
|
|
367
|
-
address_line: notification.contact_details.address_line,
|
|
368
|
-
city: notification.contact_details.city,
|
|
369
|
-
county: notification.contact_details.county,
|
|
370
|
-
country: notification.contact_details.country,
|
|
371
|
-
postal_code: notification.contact_details.postal_code,
|
|
372
|
-
};
|
|
373
|
-
const resendRequest = new IPutNotificationRequest(contactDetails, notification.notification_type);
|
|
374
|
-
this.refundService.putResendOrEdit(resendRequest, this.refundlist.refund_reference, notification.notification_type).subscribe((response) => {
|
|
375
|
-
this.isResendOperationSuccess = response;
|
|
376
|
-
}, (error) => {
|
|
377
|
-
this.isResendOperationSuccess = false;
|
|
378
|
-
this.errorMessage = error.replace(/"/g, "");
|
|
379
|
-
});
|
|
380
|
-
}
|
|
381
|
-
gotoRefundViewPageCancelBtnClicked(event) {
|
|
382
|
-
event.preventDefault();
|
|
383
|
-
this.isEditDetailsClicked = false;
|
|
384
|
-
this.viewName = 'refundview';
|
|
385
|
-
}
|
|
386
|
-
gotoRefundReviewAndSubmitViewPageCancelBtnClicked(event) {
|
|
387
|
-
event.preventDefault();
|
|
388
|
-
this.isEditDetailsClicked = false;
|
|
389
|
-
this.viewName = 'reviewandsubmitview';
|
|
390
|
-
}
|
|
391
|
-
goToRefundProcessComponent(refundReference, refundList) {
|
|
392
|
-
this.paymentLibComponent.refundlistsource = refundList;
|
|
393
|
-
this.paymentLibComponent.refundReference = refundReference;
|
|
394
|
-
this.paymentLibComponent.isFromPayBubble = true;
|
|
395
|
-
this.paymentLibComponent.viewName = 'process-refund';
|
|
396
|
-
}
|
|
397
|
-
getTemplateInstructionType(payment, paymentReference) {
|
|
398
|
-
if (payment == undefined || payment == null || payment.reference != paymentReference) {
|
|
399
|
-
this.paymentViewService.getPaymentDetails(paymentReference).subscribe(payment => {
|
|
400
|
-
this.paymentObj = payment;
|
|
401
|
-
this.paymentObj.reference = paymentReference;
|
|
402
|
-
this.templateInstructionType = this.notificationService.getNotificationInstructionType(this.paymentObj.channel, this.paymentObj.method);
|
|
403
|
-
}, (error) => {
|
|
404
|
-
this.templateInstructionType = 'Template';
|
|
405
|
-
});
|
|
406
|
-
}
|
|
407
|
-
else {
|
|
408
|
-
this.templateInstructionType = this.notificationService.getNotificationInstructionType(payment.channel, payment.method);
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
showNotificationPreview() {
|
|
412
|
-
this.notificationPreview = true;
|
|
413
|
-
}
|
|
414
|
-
hideNotificationPreview() {
|
|
415
|
-
this.notificationPreview = false;
|
|
416
|
-
}
|
|
417
|
-
showNotificationSentView(index) {
|
|
418
|
-
this.notificationSentViewIndex = index;
|
|
419
|
-
this.notificationSentView = true;
|
|
420
|
-
}
|
|
421
|
-
hideNotificationSentView() {
|
|
422
|
-
this.notificationSentViewIndex = -1;
|
|
423
|
-
this.notificationSentView = false;
|
|
424
|
-
}
|
|
425
|
-
check4AllowedRoles2DisplayEditRefundBtn = () => {
|
|
426
|
-
return this.allowedRolesToAccessRefund.some(role => this.LOGGEDINUSERROLES.indexOf(role) !== -1);
|
|
427
|
-
};
|
|
428
|
-
displayResetRefundConfirmation() {
|
|
429
|
-
this.isRefundStatusResetBtnDisabled = true;
|
|
430
|
-
this.viewName = 'confirmSubmitResetRefund';
|
|
431
|
-
}
|
|
432
|
-
redirectToRefundListPage() {
|
|
433
|
-
this.viewName = 'refundview';
|
|
434
|
-
this.isRefundStatusResetBtnDisabled = false;
|
|
435
|
-
this.paymentLibComponent.viewName = 'refundstatuslist';
|
|
436
|
-
}
|
|
437
|
-
postResetRefund() {
|
|
438
|
-
this.refundService.postResetRefund(this.refundlist.refund_reference).subscribe((response) => {
|
|
439
|
-
this.isResendOperationSuccess = response;
|
|
440
|
-
this.loadRefundListPage();
|
|
441
|
-
}, (error) => {
|
|
442
|
-
this.isResendOperationSuccess = false;
|
|
443
|
-
this.errorMessage = error.replace(/"/g, "");
|
|
444
|
-
});
|
|
445
|
-
}
|
|
446
|
-
getResetRefundVisibility() {
|
|
447
|
-
this.check4AllowedRoles2DisplayEditRefundBtn && this.isCurrentRefundVisibleForReset();
|
|
448
|
-
}
|
|
449
|
-
isCurrentRefundVisibleForReset() {
|
|
450
|
-
return this.refundlist.refund_status.name === 'Expired';
|
|
451
|
-
}
|
|
452
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RefundStatusComponent, deps: [{ token: i1.FormBuilder }, { token: i2.RefundsService }, { token: i3.NotificationService }, { token: 'PAYMENT_LIB' }, { token: i4.OrderslistService }, { token: i5.PaymentViewService }], target: i0.ɵɵFactoryTarget.Component });
|
|
453
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RefundStatusComponent, isStandalone: true, selector: "ccpay-refund-status", inputs: { LOGGEDINUSERROLES: "LOGGEDINUSERROLES", API_ROOT: "API_ROOT", ccdCaseNumber: "ccdCaseNumber", isTurnOff: "isTurnOff", orderParty: "orderParty" }, ngImport: i0, template: "\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=\"viewName==='refundstatuslist' && rejectedRefundList && !isResendOperationSuccess && !isEditDetailsClicked\">\n <!-- payments -->\n\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-16\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-11\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header col-18\" scope=\"col\">Date</td>\n <td class=\"govuk-table__header col-25\" scope=\"col\">Refund reference</td>\n <td class=\"govuk-table__header col-24 \" scope=\"col\">Reason</td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"rejectedRefundList?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let refundList of rejectedRefundList\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ refundList?.refund_status['name'] }}</td>\n <td class=\"channel govuk-table__cell whitespace-inherit\">\u00A3{{ refundList?.amount | number:'.2' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ refundList?.date_updated | date:'dd MMM yyyy'}}\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ refundList?.refund_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"> {{refundList?.reason}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToRefundView(refundList,'casetransactions')\">Review</a>\n </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"rejectedRefundList?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No refunds recorded</td>\n </tbody>\n </table>\n</ng-container>\n\n<ng-container *ngIf=\"viewName==='refundview' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"javascript:void(0)\" (click)=\"loadRefundListPage()\" class=\"govuk-back-link govuk-label\">Back</a>\n </li>\n </ol>\n </div>\n <h2 class=\"govuk-heading-l\">Refund details</h2>\n <table>\n\n <tbody>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Refund reference</td>\n <td>{{ refundlist?.refund_reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment to be refunded</td>\n <td>{{refundlist?.payment_reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Reason for refund</td>\n <td>{{ refundlist?.reason }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Amount refunded</td>\n <td>\u00A3{{refundlist?.amount | number:'.2' }}</td>\n </tr>\n\n </tbody>\n </table>\n\n\n <!-- Notification sent details -->\n <div>\n <br />\n <h2 class=\"govuk-heading-m\">Notifications sent</h2>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-24 whitespace-inherit\" scope=\"col\">Date and time</td>\n <td class=\"govuk-table__header col-27 whitespace-inherit\" scope=\"col\">Sent to</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Sent via</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Actions</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"notificationList\">\n <ng-container *ngFor=\"let notification of notificationList; let i = index;\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{notification.date_created | date:'dd MMMM yyyy HH:mm:ss'}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{orderParty}}</td>\n <td class=\"govuk-table__cell whitespace-inherit col-40\">\n <div *ngIf=\"notification?.notification_type === 'EMAIL'\">\n <strong>Email</strong><br>\n {{notification?.contact_details?.email?.trim()}}\n </div>\n <div *ngIf=\"notification?.notification_type === 'LETTER'\">\n <strong>Post</strong><br>\n {{notification?.contact_details?.address_line?.trim()}} {{notification?.contact_details?.city?.trim()}} {{notification?.contact_details?.county?.trim()}} {{notification?.contact_details?.country?.trim()}} {{notification?.contact_details?.postal_code?.trim()}}\n </div>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\" *ngIf=\"i === 0\"><a href=\"Javascript:void(0);\" (click)=\"putResend(notification)\">Resend</a> | <a href=\"Javascript:void(0);\" (click)=\"gotoEditAddressDetails(notification)\">Edit details</a> | <a *ngIf=\"!notificationSentView || i != notificationSentViewIndex\" href=\"Javascript:void(0);\" (click)=\"showNotificationSentView(i)\">View</a><a *ngIf=\"i === notificationSentViewIndex && notificationSentView\" href=\"Javascript:void(0);\" (click)=\"hideNotificationSentView()\">Hide</a></td>\n <td class=\"govuk-table__cell whitespace-inherit\" *ngIf=\"i > 0\"><a *ngIf=\"!notificationSentView || i != notificationSentViewIndex\" href=\"Javascript:void(0);\" (click)=\"showNotificationSentView(i)\">View</a><a *ngIf=\"i === notificationSentViewIndex && notificationSentView\" href=\"Javascript:void(0);\" (click)=\"hideNotificationSentView()\">Hide</a></td>\n </tr>\n <tr *ngIf=\"i === notificationSentViewIndex && notificationSentView\">\n <td class=\"govuk-table__cell\" colspan=\"4\">\n <app-notification-preview\n [previewJourney]=\"'Notifications sent'\" [notificationSent]=\"notification?.sent_notification\">\n </app-notification-preview>\n </td>\n </tr>\n </ng-container>\n\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"!notificationList\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell whitespace-inherit\" colspan=\"4\">No record found ... </td>\n </tr>\n </tbody>\n </table>\n </div>\n <!-- Status history -->\n <div>\n <br />\n <div class=\"refund-status-history-header govuk-flex\">\n <h2 class=\"govuk-heading-m\">Refund status history</h2>\n <div *ngIf=\"check4AllowedRoles2DisplayEditRefundBtn && isCurrentRefundVisibleForReset()\">\n <button\n type=\"button\"\n [disabled]=\"isRefundStatusResetBtnDisabled\"\n class=\"govuk-button govuk-button--secondary\"\n (click)=\"displayResetRefundConfirmation()\">\n Reset Refund\n </button>\n </div>\n </div>\n <div *ngIf=\"refundStatusHistories\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-24 whitespace-inherit\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-27 whitespace-inherit\" scope=\"col\">Date and time</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Users</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Notes</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngFor=\"let refundStatusHistory of refundStatusHistories;\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{refundStatusHistory.status}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n {{refundStatusHistory.date_created | date:'dd MMMM yyyy HH:mm:ss'}}\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{refundStatusHistory.created_by}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{refundStatusHistory.notes}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n </div>\n\n <ng-container *ngIf=\"viewName==='refundview' && !isFromPayBubble && !isResendOperationSuccess && !isEditDetailsClicked\">\n <div *ngIf=\"refundButtonState==='Update required'\" >\n <!-- <div *ngIf=\"refundButtonState==='sent back'\"> -->\n <br />\n <button type=\"submit\" class=\"button govuk-button--secondary btnmargin\"\n (click)=\"gotoReviewAndReSubmitPage()\">Change refund details</button>\n </div>\n <div *ngIf=\"isProcessRefund && !isLastUpdatedByCurrentUser && refundButtonState==='Sent for approval'\" >\n <!-- <div *ngIf=\"isProcessRefund && !isLastUpdatedByCurrentUser && refundButtonState==='sent for approval'\"> -->\n <br />\n <button type=\"submit\" class=\"button govuk-button--secondary\"\n (click)=\"goToRefundProcessComponent(refundlist.refund_reference,refundlist)\">Process refund</button>\n </div>\n </ng-container>\n\n\n</ng-container>\n\n<ng-container *ngIf=\"viewName==='reviewandsubmitview' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <!-- <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a (click)=\"gotoReviewDetailsPage($event)\" class=\"govuk-back-link govuk-label\">Back</a>\n </li>\n </ol>\n </div> -->\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\">{{ refundlist?.payment_reference}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Reason for return</td>\n <td class=\"govuk-table__cell\">{{refundreason}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund reference</td>\n <td class=\"govuk-table__cell\">{{ refundlist?.refund_reference}} </td>\n </tr>\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\">{{ refundlist?.reason?.trim()}}\n <a (click)=\"gotoRefundReasonPage(refundlist?.reason)\" *ngIf=\"refundlist?.reason !== 'Retrospective remission' && refundlist?.reason !== 'Overpayment'\"\n class=\"govuk-link right\">Change</a>\n </td>\n\n <!-- <td class=\"govuk-table__cell\">{{ refundlist?.reason }}</td>\n <a (click)=\"gotoRefundReasonPage()\" class=\"govuk-link right\">Change</a> -->\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\">\u00A3{{ changedAmount ? changedAmount : refundlist?.amount | number:'.2' }}\n <a (click)=\"gotoAmountPage()\" *ngIf=\"refundlist?.reason !== 'Overpayment'\"\n class=\"govuk-link right\">Change</a>\n </td>\n\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 whitespace-inherit\">\n <div *ngIf=\"refundlist?.contact_details?.notification_type === 'EMAIL'\" class=\"contactDetails-width font-size-19px\">\n <strong>Email</strong>\n <br/>\n {{refundlist?.contact_details?.email?.trim()}}\n </div>\n <div *ngIf=\"refundlist?.contact_details?.notification_type === 'LETTER'\" class=\"contactDetails-width font-size-19px\">\n <strong>Post</strong>\n <br/>\n {{refundlist?.contact_details?.address_line?.trim()}} {{refundlist?.contact_details?.city?.trim()}} {{refundlist?.contact_details?.county?.trim()}} {{refundlist?.contact_details?.country?.trim()}} {{refundlist?.contact_details?.postal_code?.trim()}}\n </div>\n <a class=\"govuk-link\" href=\"Javascript:void(0)\" *ngIf=\"refundlist?.contact_details !=null\" class=\"govuk-link right\" (click)=\"gotoEditDetailsPage(refundlist?.contact_details, 'reviewandsubmitEditview')\">\n Change\n </a>\n </td>\n </tr>\n\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Notification</td>\n <td class=\"govuk-table__cell\">{{templateInstructionType}}\n <a *ngIf=\"!notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"showNotificationPreview()\">\n Preview\n </a>\n <a *ngIf=\"notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"hideNotificationPreview()\">\n Hide Preview\n </a>\n </td>\n </tr>\n </table>\n <app-notification-preview *ngIf=\"notificationPreview\"\n [paymentReference]=\"refundlist?.payment_reference\"\n [payment]=\"paymentObj\"\n [contactDetails]=\"refundlist?.contact_details\"\n [refundReason]=\"refundlist?.reason_code\"\n [refundAmount]=\"changedAmount ? changedAmount : refundlist?.amount\"\n [refundReference]=\"refundlist?.refund_reference\"></app-notification-preview>\n\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoReviewDetailsPage($event)\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button [disabled]=\"isRefundBtnDisabled\" (click)=\"gotoReviewRefundConfirmationPage()\" class=\"govuk-button button\"\n data-module=\"govuk-button\">\n Submit refund\n </button>\n</div>\n<p><a href=\"javascript:void(0)\" (click)=\"loadRefundListPage()\" class=\"govuk-link\" data-module=\"govuk-button\">Cancel</a></p>\n <!-- <div class=\"govuk-button-group\">\n <button [disabled]=\"isRefundBtnDisabled\" (click)=\"gotoReviewRefundConfirmationPage()\" class=\"govuk-button button\"\n data-module=\"govuk-button\">\n Submit refund\n </button>\n </div> -->\n <!-- <p>\n <a (click)=\"loadRefundListPage()\" href=\"\" class=\"cancelbtn\">Cancel</a>\n </p> -->\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'reviewandsubmitEditview' && isEditDetailsClicked\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='EDITDETAILSPAGE'>\n <h1 class=\"govuk-heading-l\">Edit contact details</h1>\n <h2 class=\"govuk-heading-m govuk-font19px\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h2>\n <span class=\"govuk-hint font-size-19px\">\n Refund reference: {{ refundlist?.refund_reference}}\n </span>\n <ccpay-contact-details\n [isEditOperationInRefundList] = isEditDetailsClicked\n [addressObj] = notification\n (assignContactDetailsInFefundsList)=\"getContactDetailsForRefundList($event)\"\n (redirectToIssueRefund)=\"gotoRefundReviewAndSubmitViewPageCancelBtnClicked($event)\" ></ccpay-contact-details>\n <p>\n <a (click)=\"loadRefundListPage()\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'issuerefundpage1' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <ccpay-add-remission [isFromRefundListPage]=\"true\" [viewCompStatus]=\"viewName\" [isRefundRemission]=\"true\" [isFromRefundStatusPage] = \"true\"\n [changeRefundReason]= \"changeRefundReason\" [ccdCaseNumber]=\"ccdCaseNumber\" (refundListReason)=\"getRefundListReason($event)\" [refundPaymentReference]= \"refundlist?.payment_reference\" ></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'processretroremissonpage' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <ccpay-add-remission [isFromRefundListPage]=\"true\" [viewCompStatus]=\"viewName\" [isRefundRemission]=\"true\"\n [ccdCaseNumber]=\"ccdCaseNumber\" [refundPaymentReference]= \"refundlist?.payment_reference\" (refundListAmount)=\"getRefundAmount($event)\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'issuerefund' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <ccpay-add-remission [isFromRefundListPage]=\"true\" [viewCompStatus]=\"viewName\" [isRefundRemission]=\"true\" [isFromServiceRequestPage] = \"true\"\n [ccdCaseNumber]=\"ccdCaseNumber\" [refundPaymentReference]= \"refundlist?.payment_reference\" [isFromRefundStatusPage]=\"true\" (refundListAmount)=\"getRefundAmount($event)\" (refundFees)=\"getRefundFees($event)\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'reviewrefundconfirmationpage' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <div class=\"govuk-grid-row pagesize\">\n <div>\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel_refund_title\">\n Refund submitted\n </h1>\n\n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong class=\"white\">Refund reference:{{refundReference}} </strong></p>\n </div>\n\n </div>\n\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\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"loadRefundListPage()\" class=\"govuk-link\">Return to case</a>\n </p>\n </div>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isResendOperationSuccess\">\n <div class=\"govuk-grid-row pagesize\">\n <div>\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel_refund_title\">\n Notification sent\n </h1>\n\n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong class=\"white\">Refund reference: {{ refundlist?.refund_reference}} </strong></p>\n </div>\n\n </div>\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"loadRefundListPage()\" class=\"govuk-link\">Return to case</a>\n </p>\n </div>\n </div>\n</ng-container>\n<ng-container *ngIf=\"viewName === 'refundEditView' && isEditDetailsClicked\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='EDITDETAILSPAGE'>\n <h1 class=\"govuk-heading-l\">Edit contact details</h1>\n <h2 class=\"govuk-heading-m govuk-font19px\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h2>\n <span class=\"govuk-hint font-size-19px\">\n Refund reference: {{ refundlist?.refund_reference}}\n </span>\n <ccpay-contact-details\n [isEditOperationInRefundList] = isEditDetailsClicked\n [addressObj] = notification\n (assignContactDetailsInFefundsList)=\"getContactDetails($event)\"\n (redirectToIssueRefund)=\"gotoRefundViewPageCancelBtnClicked($event)\" ></ccpay-contact-details>\n <p>\n <a (click)=\"loadRefundListPage()\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n<ng-container *ngIf=\"viewName === 'revieweditdetailsconfirmationpage' && !isResendOperationSuccess && isEditDetailsClicked\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='EDITDETAILSCHECKANDANSWERPAGE'>\n <h1 class=\"govuk-heading-l\">Check your answers</h1>\n <dl class=\"govuk-summary-list\">\n <div class=\"govuk-summary-list__row font-size-19px\">\n <dt class=\"govuk-summary-list__key\">\n Refund reference\n </dt>\n <dd class=\"govuk-summary-list__value\">\n {{ refundlist?.refund_reference}}\n </dd>\n <span class=\"govuk-summary-list__actions\"></span>\n </div>\n <div class=\"govuk-summary-list__row font-size-19px\">\n <dt class=\"govuk-summary-list__key\">\n Send via\n <br/>\n </dt>\n <dd class=\"govuk-summary-list__value\">\n <div *ngIf=\"addressDetails?.notification_type === 'EMAIL'\" class=\"contactDetails-width font-size-19px\">\n <strong>Email</strong>\n <br/>\n {{addressDetails?.email?.trim()}}\n </div>\n <div *ngIf=\"addressDetails?.notification_type === 'LETTER'\" class=\"contactDetails-width font-size-19px\">\n <strong>Post</strong>\n <br/>\n {{addressDetails?.address_line?.trim()}} {{addressDetails?.city?.trim()}} {{addressDetails?.county?.trim()}} {{addressDetails?.country?.trim()}} {{addressDetails?.postal_code?.trim()}}\n </div>\n </dd>\n <dd class=\"govuk-summary-list__actions\">\n <a class=\"govuk-link\" href=\"Javascript:void(0)\" (click)=\"gotoEditDetailsPage(addressDetails, 'refundEditView')\">\n Change\n </a>\n </dd>\n </div>\n <div class=\"govuk-summary-list__row font-size-19px\">\n <dt class=\"govuk-summary-list__key\">\n Notification\n </dt>\n <dd class=\"govuk-summary-list__value\">\n {{templateInstructionType}}\n </dd>\n <span class=\"govuk-summary-list__actions\">\n <a *ngIf=\"!notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"showNotificationPreview()\">\n Preview\n </a>\n <a *ngIf=\"notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"hideNotificationPreview()\">\n Hide Preview\n </a>\n </span>\n </div>\n </dl>\n\n <app-notification-preview *ngIf=\"notificationPreview\" [paymentReference]=\"refundlist?.payment_reference\"\n [payment]=\"paymentObj\"\n [contactDetails]=\"addressDetails\"\n [refundReason]=\"refundlist?.reason_code\"\n [refundAmount]=\"refundlist?.amount\"\n [refundReference]=\"refundlist?.refund_reference\">\n </app-notification-preview>\n\n\n\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoEditDetailsPage(addressDetails, 'refundEditView')\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button (click)=\"submitEditDetail()\" class=\"govuk-button button\"\n data-module=\"govuk-button\">\n Send notification\n </button>\n </div>\n <p>\n <a (click)=\"loadRefundListPage()\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n\n\n<ng-container *ngIf=\"viewName === 'confirmSubmitResetRefund'\">\n\n <h1 class=\"govuk-heading-l\">Reset Refund</h1>\n\n\n <!DOCTYPE html>\n <html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\">\n <title>Refund Actions</title>\n </head>\n <body>\n <div class=\"refund-list\">\n <ul>\n <li>Close the current Refund {{ refundlist?.refund_reference }}</li>\n <li>Reissue the refund with a new refund reference</li>\n <li>Send a new Offer and Contact notification for the issued refund</li>\n </ul>\n </div>\n </body>\n </html>\n\n <div class=\"govuk-button-group\">\n <button (click)=\"postResetRefund()\" class=\"govuk-button\"> Continue</button>\n <button (click)=\"redirectToRefundListPage()\" class=\"govuk-button govuk-button--secondary\"> Cancel</button>\n </div>\n\n</ng-container>\n", styles: [".right{float:right!important}.button{margin-bottom:3em;font-size:19px}.cancelbtn{font-size:19px;font-weight:400}.btnmargin{margin-bottom:2em}.govuk-button--secondary{background-color:#dee0e2;box-shadow:0 2px #858688;color:#0b0c0c;margin-right:.5em}.govuk-warning-text__text,.govuk-label--s,.refund__symbol{font-size:19px;font-weight:400}.inline-error-class{outline:3px solid #a71414;outline-offset:0}.inline-error-message{color:#a71414;font-weight:700;margin-top:10px;font-size:20px}.govuk-button,.govuk-link{margin-right:1em;font-size:19px;font-weight:200}.govuk-button-group{padding-top:2em}.heading-medium{margin-top:.875em}.heading-large{margin-top:.25em}.govuk-panel--confirmation{color:#fff;background:#00703c}.govuk-heading-l{font-size:36px}.govuk-heading-m{font-size:24px}.govuk-panel__title{font-size:5rem}.govuk-panel_refund_title{margin-top:0;margin-bottom:30px;color:#fff;font-family:nta,Arial,sans-serif;-webkit-font-smoothing:antialiased;font-weight:700;font-size:48px}.govuk-body-m,.govuk-body{font-size:2.1875rem}.govuk-input--width-10{max-width:36ex}.col-14{width:14%!important}.col-10{width:10%!important}.col-11{width:11%!important}.col-18{width:18%!important}.col-21{width:21%!important}.col-9{width:9%!important}.col-40{width:40%!important}.col-15{width:15%!important}.col-16{width:16%!important}.col-25{width:25%!important}.col-24{width:24%!important}.govuk-error-summary__title{font-size:24px!important}.govuk-error-summary__body{font-size:19px!important}.font-size-19px{font-size:19px}.white{color:#fff}.pagesize{margin:2em;width:97%}.govuk-link{cursor:pointer}.contactDetails-width{width:70%}.whitespace-inherit{white-space:inherit!important}.hmcts-currency-input__symbol{font-family:nta,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;line-height:initial;position:absolute;font-weight:200;padding:8px 10px;height:40px;box-sizing:border-box;background-color:#dee0e2;border:2px solid #0b0c0c}.refund-status-history-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1em}.govuk-button--secondary{margin-bottom:0}.refund-list{text-align:left;margin-left:20px}.refund-list ul{list-style-type:disc;padding-left:20px}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i6.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i6.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i0.forwardRef(() => i6.DecimalPipe), name: "number" }, { kind: "pipe", type: i0.forwardRef(() => i6.CurrencyPipe), name: "currency" }, { kind: "pipe", type: i0.forwardRef(() => i6.DatePipe), name: "date" }, { kind: "component", type: i0.forwardRef(() => NotificationPreviewComponent), selector: "app-notification-preview", inputs: ["payment", "contactDetails", "refundReason", "refundAmount", "paymentReference", "refundReference", "previewJourney", "notificationSent"], outputs: ["notificationPreviewEvent"] }, { kind: "component", type: i0.forwardRef(() => ContactDetailsComponent), selector: "ccpay-contact-details", inputs: ["isEditOperation", "isEditOperationInRefundList", "addressObj"], outputs: ["assignContactDetails", "assignContactDetailsInFefundsList", "redirectToIssueRefund"] }, { kind: "component", type: i0.forwardRef(() => AddRemissionComponent), selector: "ccpay-add-remission", inputs: ["fee", "fees", "payment", "remission", "ccdCaseNumber", "caseType", "viewCompStatus", "paymentGroupRef", "isTurnOff", "isRefundRemission", "isStrategicFixEnable", "paidAmount", "isFromRefundListPage", "isFromPaymentDetailPage", "isFromServiceRequestPage", "isFullyRefund", "feeamount", "refundPaymentReference", "isFromRefundStatusPage", "changeRefundReason", "isServiceRequest", "LOGGEDINUSERROLES", "orderDetail", "orderRef", "orderStatus", "orderParty", "orderCreated", "orderCCDEvent", "takepayment", "orderFeesTotal", "orderTotalPayments", "orderRemissionTotal"], outputs: ["cancelRemission", "refundListReason", "refundListAmount", "refundFees"] }, { kind: "pipe", type: i0.forwardRef(() => CcdHyphensPipe), name: "ccdHyphens" }] });
|
|
454
|
-
}
|
|
455
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RefundStatusComponent, decorators: [{
|
|
456
|
-
type: Component,
|
|
457
|
-
args: [{ selector: 'ccpay-refund-status', imports: [
|
|
458
|
-
CommonModule,
|
|
459
|
-
forwardRef(() => NotificationPreviewComponent),
|
|
460
|
-
forwardRef(() => ContactDetailsComponent),
|
|
461
|
-
forwardRef(() => AddRemissionComponent),
|
|
462
|
-
CcdHyphensPipe,
|
|
463
|
-
CapitalizePipe,
|
|
464
|
-
], standalone: true, template: "\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=\"viewName==='refundstatuslist' && rejectedRefundList && !isResendOperationSuccess && !isEditDetailsClicked\">\n <!-- payments -->\n\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-16\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-11\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header col-18\" scope=\"col\">Date</td>\n <td class=\"govuk-table__header col-25\" scope=\"col\">Refund reference</td>\n <td class=\"govuk-table__header col-24 \" scope=\"col\">Reason</td>\n <td class=\"govuk-table__header\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"rejectedRefundList?.length > 0\">\n <tr class=\"govuk-table__row\" *ngFor=\"let refundList of rejectedRefundList\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ refundList?.refund_status['name'] }}</td>\n <td class=\"channel govuk-table__cell whitespace-inherit\">\u00A3{{ refundList?.amount | number:'.2' }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ refundList?.date_updated | date:'dd MMM yyyy'}}\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ refundList?.refund_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\"> {{refundList?.reason}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n <a href=\"javascript:void(0)\" (click)=\"goToRefundView(refundList,'casetransactions')\">Review</a>\n </td>\n </tr>\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"rejectedRefundList?.length === 0\">\n <td class=\"govuk-table__cell\" colspan=\"6\">No refunds recorded</td>\n </tbody>\n </table>\n</ng-container>\n\n<ng-container *ngIf=\"viewName==='refundview' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"javascript:void(0)\" (click)=\"loadRefundListPage()\" class=\"govuk-back-link govuk-label\">Back</a>\n </li>\n </ol>\n </div>\n <h2 class=\"govuk-heading-l\">Refund details</h2>\n <table>\n\n <tbody>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Refund reference</td>\n <td>{{ refundlist?.refund_reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment to be refunded</td>\n <td>{{refundlist?.payment_reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Reason for refund</td>\n <td>{{ refundlist?.reason }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Amount refunded</td>\n <td>\u00A3{{refundlist?.amount | number:'.2' }}</td>\n </tr>\n\n </tbody>\n </table>\n\n\n <!-- Notification sent details -->\n <div>\n <br />\n <h2 class=\"govuk-heading-m\">Notifications sent</h2>\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-24 whitespace-inherit\" scope=\"col\">Date and time</td>\n <td class=\"govuk-table__header col-27 whitespace-inherit\" scope=\"col\">Sent to</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Sent via</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Actions</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngIf=\"notificationList\">\n <ng-container *ngFor=\"let notification of notificationList; let i = index;\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{notification.date_created | date:'dd MMMM yyyy HH:mm:ss'}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{orderParty}}</td>\n <td class=\"govuk-table__cell whitespace-inherit col-40\">\n <div *ngIf=\"notification?.notification_type === 'EMAIL'\">\n <strong>Email</strong><br>\n {{notification?.contact_details?.email?.trim()}}\n </div>\n <div *ngIf=\"notification?.notification_type === 'LETTER'\">\n <strong>Post</strong><br>\n {{notification?.contact_details?.address_line?.trim()}} {{notification?.contact_details?.city?.trim()}} {{notification?.contact_details?.county?.trim()}} {{notification?.contact_details?.country?.trim()}} {{notification?.contact_details?.postal_code?.trim()}}\n </div>\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\" *ngIf=\"i === 0\"><a href=\"Javascript:void(0);\" (click)=\"putResend(notification)\">Resend</a> | <a href=\"Javascript:void(0);\" (click)=\"gotoEditAddressDetails(notification)\">Edit details</a> | <a *ngIf=\"!notificationSentView || i != notificationSentViewIndex\" href=\"Javascript:void(0);\" (click)=\"showNotificationSentView(i)\">View</a><a *ngIf=\"i === notificationSentViewIndex && notificationSentView\" href=\"Javascript:void(0);\" (click)=\"hideNotificationSentView()\">Hide</a></td>\n <td class=\"govuk-table__cell whitespace-inherit\" *ngIf=\"i > 0\"><a *ngIf=\"!notificationSentView || i != notificationSentViewIndex\" href=\"Javascript:void(0);\" (click)=\"showNotificationSentView(i)\">View</a><a *ngIf=\"i === notificationSentViewIndex && notificationSentView\" href=\"Javascript:void(0);\" (click)=\"hideNotificationSentView()\">Hide</a></td>\n </tr>\n <tr *ngIf=\"i === notificationSentViewIndex && notificationSentView\">\n <td class=\"govuk-table__cell\" colspan=\"4\">\n <app-notification-preview\n [previewJourney]=\"'Notifications sent'\" [notificationSent]=\"notification?.sent_notification\">\n </app-notification-preview>\n </td>\n </tr>\n </ng-container>\n\n </tbody>\n <tbody class=\"govuk-table__body\" *ngIf=\"!notificationList\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell whitespace-inherit\" colspan=\"4\">No record found ... </td>\n </tr>\n </tbody>\n </table>\n </div>\n <!-- Status history -->\n <div>\n <br />\n <div class=\"refund-status-history-header govuk-flex\">\n <h2 class=\"govuk-heading-m\">Refund status history</h2>\n <div *ngIf=\"check4AllowedRoles2DisplayEditRefundBtn && isCurrentRefundVisibleForReset()\">\n <button\n type=\"button\"\n [disabled]=\"isRefundStatusResetBtnDisabled\"\n class=\"govuk-button govuk-button--secondary\"\n (click)=\"displayResetRefundConfirmation()\">\n Reset Refund\n </button>\n </div>\n </div>\n <div *ngIf=\"refundStatusHistories\">\n <table class=\"govuk-table\">\n <thead class=\"govuk-table__head\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__header col-24 whitespace-inherit\" scope=\"col\">Status</td>\n <td class=\"govuk-table__header col-27 whitespace-inherit\" scope=\"col\">Date and time</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Users</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Notes</td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngFor=\"let refundStatusHistory of refundStatusHistories;\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{refundStatusHistory.status}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">\n {{refundStatusHistory.date_created | date:'dd MMMM yyyy HH:mm:ss'}}\n </td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{refundStatusHistory.created_by}}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{refundStatusHistory.notes}}</td>\n </tr>\n </tbody>\n </table>\n </div>\n\n </div>\n\n <ng-container *ngIf=\"viewName==='refundview' && !isFromPayBubble && !isResendOperationSuccess && !isEditDetailsClicked\">\n <div *ngIf=\"refundButtonState==='Update required'\" >\n <!-- <div *ngIf=\"refundButtonState==='sent back'\"> -->\n <br />\n <button type=\"submit\" class=\"button govuk-button--secondary btnmargin\"\n (click)=\"gotoReviewAndReSubmitPage()\">Change refund details</button>\n </div>\n <div *ngIf=\"isProcessRefund && !isLastUpdatedByCurrentUser && refundButtonState==='Sent for approval'\" >\n <!-- <div *ngIf=\"isProcessRefund && !isLastUpdatedByCurrentUser && refundButtonState==='sent for approval'\"> -->\n <br />\n <button type=\"submit\" class=\"button govuk-button--secondary\"\n (click)=\"goToRefundProcessComponent(refundlist.refund_reference,refundlist)\">Process refund</button>\n </div>\n </ng-container>\n\n\n</ng-container>\n\n<ng-container *ngIf=\"viewName==='reviewandsubmitview' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <!-- <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a (click)=\"gotoReviewDetailsPage($event)\" class=\"govuk-back-link govuk-label\">Back</a>\n </li>\n </ol>\n </div> -->\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\">{{ refundlist?.payment_reference}} </td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Reason for return</td>\n <td class=\"govuk-table__cell\">{{refundreason}}</td>\n </tr>\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Refund reference</td>\n <td class=\"govuk-table__cell\">{{ refundlist?.refund_reference}} </td>\n </tr>\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\">{{ refundlist?.reason?.trim()}}\n <a (click)=\"gotoRefundReasonPage(refundlist?.reason)\" *ngIf=\"refundlist?.reason !== 'Retrospective remission' && refundlist?.reason !== 'Overpayment'\"\n class=\"govuk-link right\">Change</a>\n </td>\n\n <!-- <td class=\"govuk-table__cell\">{{ refundlist?.reason }}</td>\n <a (click)=\"gotoRefundReasonPage()\" class=\"govuk-link right\">Change</a> -->\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\">\u00A3{{ changedAmount ? changedAmount : refundlist?.amount | number:'.2' }}\n <a (click)=\"gotoAmountPage()\" *ngIf=\"refundlist?.reason !== 'Overpayment'\"\n class=\"govuk-link right\">Change</a>\n </td>\n\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 whitespace-inherit\">\n <div *ngIf=\"refundlist?.contact_details?.notification_type === 'EMAIL'\" class=\"contactDetails-width font-size-19px\">\n <strong>Email</strong>\n <br/>\n {{refundlist?.contact_details?.email?.trim()}}\n </div>\n <div *ngIf=\"refundlist?.contact_details?.notification_type === 'LETTER'\" class=\"contactDetails-width font-size-19px\">\n <strong>Post</strong>\n <br/>\n {{refundlist?.contact_details?.address_line?.trim()}} {{refundlist?.contact_details?.city?.trim()}} {{refundlist?.contact_details?.county?.trim()}} {{refundlist?.contact_details?.country?.trim()}} {{refundlist?.contact_details?.postal_code?.trim()}}\n </div>\n <a class=\"govuk-link\" href=\"Javascript:void(0)\" *ngIf=\"refundlist?.contact_details !=null\" class=\"govuk-link right\" (click)=\"gotoEditDetailsPage(refundlist?.contact_details, 'reviewandsubmitEditview')\">\n Change\n </a>\n </td>\n </tr>\n\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell govuk-!-font-weight-bold\">Notification</td>\n <td class=\"govuk-table__cell\">{{templateInstructionType}}\n <a *ngIf=\"!notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"showNotificationPreview()\">\n Preview\n </a>\n <a *ngIf=\"notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"hideNotificationPreview()\">\n Hide Preview\n </a>\n </td>\n </tr>\n </table>\n <app-notification-preview *ngIf=\"notificationPreview\"\n [paymentReference]=\"refundlist?.payment_reference\"\n [payment]=\"paymentObj\"\n [contactDetails]=\"refundlist?.contact_details\"\n [refundReason]=\"refundlist?.reason_code\"\n [refundAmount]=\"changedAmount ? changedAmount : refundlist?.amount\"\n [refundReference]=\"refundlist?.refund_reference\"></app-notification-preview>\n\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoReviewDetailsPage($event)\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button [disabled]=\"isRefundBtnDisabled\" (click)=\"gotoReviewRefundConfirmationPage()\" class=\"govuk-button button\"\n data-module=\"govuk-button\">\n Submit refund\n </button>\n</div>\n<p><a href=\"javascript:void(0)\" (click)=\"loadRefundListPage()\" class=\"govuk-link\" data-module=\"govuk-button\">Cancel</a></p>\n <!-- <div class=\"govuk-button-group\">\n <button [disabled]=\"isRefundBtnDisabled\" (click)=\"gotoReviewRefundConfirmationPage()\" class=\"govuk-button button\"\n data-module=\"govuk-button\">\n Submit refund\n </button>\n </div> -->\n <!-- <p>\n <a (click)=\"loadRefundListPage()\" href=\"\" class=\"cancelbtn\">Cancel</a>\n </p> -->\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'reviewandsubmitEditview' && isEditDetailsClicked\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='EDITDETAILSPAGE'>\n <h1 class=\"govuk-heading-l\">Edit contact details</h1>\n <h2 class=\"govuk-heading-m govuk-font19px\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h2>\n <span class=\"govuk-hint font-size-19px\">\n Refund reference: {{ refundlist?.refund_reference}}\n </span>\n <ccpay-contact-details\n [isEditOperationInRefundList] = isEditDetailsClicked\n [addressObj] = notification\n (assignContactDetailsInFefundsList)=\"getContactDetailsForRefundList($event)\"\n (redirectToIssueRefund)=\"gotoRefundReviewAndSubmitViewPageCancelBtnClicked($event)\" ></ccpay-contact-details>\n <p>\n <a (click)=\"loadRefundListPage()\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'issuerefundpage1' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <ccpay-add-remission [isFromRefundListPage]=\"true\" [viewCompStatus]=\"viewName\" [isRefundRemission]=\"true\" [isFromRefundStatusPage] = \"true\"\n [changeRefundReason]= \"changeRefundReason\" [ccdCaseNumber]=\"ccdCaseNumber\" (refundListReason)=\"getRefundListReason($event)\" [refundPaymentReference]= \"refundlist?.payment_reference\" ></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'processretroremissonpage' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <ccpay-add-remission [isFromRefundListPage]=\"true\" [viewCompStatus]=\"viewName\" [isRefundRemission]=\"true\"\n [ccdCaseNumber]=\"ccdCaseNumber\" [refundPaymentReference]= \"refundlist?.payment_reference\" (refundListAmount)=\"getRefundAmount($event)\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'issuerefund' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <ccpay-add-remission [isFromRefundListPage]=\"true\" [viewCompStatus]=\"viewName\" [isRefundRemission]=\"true\" [isFromServiceRequestPage] = \"true\"\n [ccdCaseNumber]=\"ccdCaseNumber\" [refundPaymentReference]= \"refundlist?.payment_reference\" [isFromRefundStatusPage]=\"true\" (refundListAmount)=\"getRefundAmount($event)\" (refundFees)=\"getRefundFees($event)\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewName === 'reviewrefundconfirmationpage' && !isResendOperationSuccess && !isEditDetailsClicked\">\n <div class=\"govuk-grid-row pagesize\">\n <div>\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel_refund_title\">\n Refund submitted\n </h1>\n\n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong class=\"white\">Refund reference:{{refundReference}} </strong></p>\n </div>\n\n </div>\n\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\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"loadRefundListPage()\" class=\"govuk-link\">Return to case</a>\n </p>\n </div>\n </div>\n</ng-container>\n\n<ng-container *ngIf=\"isResendOperationSuccess\">\n <div class=\"govuk-grid-row pagesize\">\n <div>\n <div class=\"govuk-panel govuk-panel--confirmation\">\n <h1 class=\"govuk-panel_refund_title\">\n Notification sent\n </h1>\n\n <div class=\"govuk-panel__body\">\n <p class=\"govuk-body white\"><strong class=\"white\">Refund reference: {{ refundlist?.refund_reference}} </strong></p>\n </div>\n\n </div>\n <p class=\"govuk-body\">\n <a href=\"javascript:void(0)\" (click)=\"loadRefundListPage()\" class=\"govuk-link\">Return to case</a>\n </p>\n </div>\n </div>\n</ng-container>\n<ng-container *ngIf=\"viewName === 'refundEditView' && isEditDetailsClicked\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='EDITDETAILSPAGE'>\n <h1 class=\"govuk-heading-l\">Edit contact details</h1>\n <h2 class=\"govuk-heading-m govuk-font19px\">Case reference: {{ccdCaseNumber | ccdHyphens }}</h2>\n <span class=\"govuk-hint font-size-19px\">\n Refund reference: {{ refundlist?.refund_reference}}\n </span>\n <ccpay-contact-details\n [isEditOperationInRefundList] = isEditDetailsClicked\n [addressObj] = notification\n (assignContactDetailsInFefundsList)=\"getContactDetails($event)\"\n (redirectToIssueRefund)=\"gotoRefundViewPageCancelBtnClicked($event)\" ></ccpay-contact-details>\n <p>\n <a (click)=\"loadRefundListPage()\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n<ng-container *ngIf=\"viewName === 'revieweditdetailsconfirmationpage' && !isResendOperationSuccess && isEditDetailsClicked\">\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='EDITDETAILSCHECKANDANSWERPAGE'>\n <h1 class=\"govuk-heading-l\">Check your answers</h1>\n <dl class=\"govuk-summary-list\">\n <div class=\"govuk-summary-list__row font-size-19px\">\n <dt class=\"govuk-summary-list__key\">\n Refund reference\n </dt>\n <dd class=\"govuk-summary-list__value\">\n {{ refundlist?.refund_reference}}\n </dd>\n <span class=\"govuk-summary-list__actions\"></span>\n </div>\n <div class=\"govuk-summary-list__row font-size-19px\">\n <dt class=\"govuk-summary-list__key\">\n Send via\n <br/>\n </dt>\n <dd class=\"govuk-summary-list__value\">\n <div *ngIf=\"addressDetails?.notification_type === 'EMAIL'\" class=\"contactDetails-width font-size-19px\">\n <strong>Email</strong>\n <br/>\n {{addressDetails?.email?.trim()}}\n </div>\n <div *ngIf=\"addressDetails?.notification_type === 'LETTER'\" class=\"contactDetails-width font-size-19px\">\n <strong>Post</strong>\n <br/>\n {{addressDetails?.address_line?.trim()}} {{addressDetails?.city?.trim()}} {{addressDetails?.county?.trim()}} {{addressDetails?.country?.trim()}} {{addressDetails?.postal_code?.trim()}}\n </div>\n </dd>\n <dd class=\"govuk-summary-list__actions\">\n <a class=\"govuk-link\" href=\"Javascript:void(0)\" (click)=\"gotoEditDetailsPage(addressDetails, 'refundEditView')\">\n Change\n </a>\n </dd>\n </div>\n <div class=\"govuk-summary-list__row font-size-19px\">\n <dt class=\"govuk-summary-list__key\">\n Notification\n </dt>\n <dd class=\"govuk-summary-list__value\">\n {{templateInstructionType}}\n </dd>\n <span class=\"govuk-summary-list__actions\">\n <a *ngIf=\"!notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"showNotificationPreview()\">\n Preview\n </a>\n <a *ngIf=\"notificationPreview\" href=\"Javascript:void(0)\" class=\"govuk-link right\" (click)=\"hideNotificationPreview()\">\n Hide Preview\n </a>\n </span>\n </div>\n </dl>\n\n <app-notification-preview *ngIf=\"notificationPreview\" [paymentReference]=\"refundlist?.payment_reference\"\n [payment]=\"paymentObj\"\n [contactDetails]=\"addressDetails\"\n [refundReason]=\"refundlist?.reason_code\"\n [refundAmount]=\"refundlist?.amount\"\n [refundReference]=\"refundlist?.refund_reference\">\n </app-notification-preview>\n\n\n\n <div class=\"govuk-button-group\">\n <button (click)=\"gotoEditDetailsPage(addressDetails, 'refundEditView')\" class=\"govuk-button govuk-button--secondary\"> Previous</button>\n <button (click)=\"submitEditDetail()\" class=\"govuk-button button\"\n data-module=\"govuk-button\">\n Send notification\n </button>\n </div>\n <p>\n <a (click)=\"loadRefundListPage()\" class=\"govuk-link\" data-module=\"govuk-button\">\n Cancel\n </a>\n </p>\n\n</ng-container>\n\n\n<ng-container *ngIf=\"viewName === 'confirmSubmitResetRefund'\">\n\n <h1 class=\"govuk-heading-l\">Reset Refund</h1>\n\n\n <!DOCTYPE html>\n <html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\">\n <title>Refund Actions</title>\n </head>\n <body>\n <div class=\"refund-list\">\n <ul>\n <li>Close the current Refund {{ refundlist?.refund_reference }}</li>\n <li>Reissue the refund with a new refund reference</li>\n <li>Send a new Offer and Contact notification for the issued refund</li>\n </ul>\n </div>\n </body>\n </html>\n\n <div class=\"govuk-button-group\">\n <button (click)=\"postResetRefund()\" class=\"govuk-button\"> Continue</button>\n <button (click)=\"redirectToRefundListPage()\" class=\"govuk-button govuk-button--secondary\"> Cancel</button>\n </div>\n\n</ng-container>\n", styles: [".right{float:right!important}.button{margin-bottom:3em;font-size:19px}.cancelbtn{font-size:19px;font-weight:400}.btnmargin{margin-bottom:2em}.govuk-button--secondary{background-color:#dee0e2;box-shadow:0 2px #858688;color:#0b0c0c;margin-right:.5em}.govuk-warning-text__text,.govuk-label--s,.refund__symbol{font-size:19px;font-weight:400}.inline-error-class{outline:3px solid #a71414;outline-offset:0}.inline-error-message{color:#a71414;font-weight:700;margin-top:10px;font-size:20px}.govuk-button,.govuk-link{margin-right:1em;font-size:19px;font-weight:200}.govuk-button-group{padding-top:2em}.heading-medium{margin-top:.875em}.heading-large{margin-top:.25em}.govuk-panel--confirmation{color:#fff;background:#00703c}.govuk-heading-l{font-size:36px}.govuk-heading-m{font-size:24px}.govuk-panel__title{font-size:5rem}.govuk-panel_refund_title{margin-top:0;margin-bottom:30px;color:#fff;font-family:nta,Arial,sans-serif;-webkit-font-smoothing:antialiased;font-weight:700;font-size:48px}.govuk-body-m,.govuk-body{font-size:2.1875rem}.govuk-input--width-10{max-width:36ex}.col-14{width:14%!important}.col-10{width:10%!important}.col-11{width:11%!important}.col-18{width:18%!important}.col-21{width:21%!important}.col-9{width:9%!important}.col-40{width:40%!important}.col-15{width:15%!important}.col-16{width:16%!important}.col-25{width:25%!important}.col-24{width:24%!important}.govuk-error-summary__title{font-size:24px!important}.govuk-error-summary__body{font-size:19px!important}.font-size-19px{font-size:19px}.white{color:#fff}.pagesize{margin:2em;width:97%}.govuk-link{cursor:pointer}.contactDetails-width{width:70%}.whitespace-inherit{white-space:inherit!important}.hmcts-currency-input__symbol{font-family:nta,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;line-height:initial;position:absolute;font-weight:200;padding:8px 10px;height:40px;box-sizing:border-box;background-color:#dee0e2;border:2px solid #0b0c0c}.refund-status-history-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:1em}.govuk-button--secondary{margin-bottom:0}.refund-list{text-align:left;margin-left:20px}.refund-list ul{list-style-type:disc;padding-left:20px}\n"] }]
|
|
465
|
-
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.RefundsService }, { type: i3.NotificationService }, { type: undefined, decorators: [{
|
|
466
|
-
type: Inject,
|
|
467
|
-
args: ['PAYMENT_LIB']
|
|
468
|
-
}] }, { type: i4.OrderslistService }, { type: i5.PaymentViewService }], propDecorators: { LOGGEDINUSERROLES: [{
|
|
469
|
-
type: Input,
|
|
470
|
-
args: ['LOGGEDINUSERROLES']
|
|
471
|
-
}], API_ROOT: [{
|
|
472
|
-
type: Input,
|
|
473
|
-
args: ['API_ROOT']
|
|
474
|
-
}], ccdCaseNumber: [{
|
|
475
|
-
type: Input
|
|
476
|
-
}], isTurnOff: [{
|
|
477
|
-
type: Input
|
|
478
|
-
}], orderParty: [{
|
|
479
|
-
type: Input
|
|
480
|
-
}] } });
|
|
481
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmdW5kLXN0YXR1cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXltZW50LWxpYi9zcmMvbGliL2NvbXBvbmVudHMvcmVmdW5kLXN0YXR1cy9yZWZ1bmQtc3RhdHVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BheW1lbnQtbGliL3NyYy9saWIvY29tcG9uZW50cy9yZWZ1bmQtc3RhdHVzL3JlZnVuZC1zdGF0dXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFDdEUsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDckYsT0FBTyxFQUFDLFdBQVcsRUFBRSxXQUFXLEVBQWEsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHL0UsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFHakYsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDL0UsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFJcEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLHdEQUF3RCxDQUFDO0FBQ3BHLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQy9FLE9BQU8sRUFBQyxj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MkJBQUMsYUFBYTswR0ExREssaUJBQWlCO3NCQUE1QyxLQUFLO3VCQUFDLG1CQUFtQjtnQkFDUCxRQUFRO3NCQUExQixLQUFLO3VCQUFDLFVBQVU7Z0JBQ1IsYUFBYTtzQkFBckIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5qZWN0LCBJbnB1dCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UmVmdW5kc1NlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlZnVuZHMvcmVmdW5kcy5zZXJ2aWNlJztcbmltcG9ydCB7Tm90aWZpY2F0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7Rm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7SVJlZnVuZExpc3R9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlZnVuZExpc3QnO1xuaW1wb3J0IHtJUmVmdW5kc05vdGlmaWNhdGlvbnN9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlZnVuZHNOb3RpZmljYXRpb25zJztcbmltcG9ydCB7T3JkZXJzbGlzdFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29yZGVyc2xpc3Quc2VydmljZSc7XG5pbXBvcnQge0lQdXROb3RpZmljYXRpb25SZXF1ZXN0fSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQdXROb3RpZmljYXRpb25SZXF1ZXN0JztcbmltcG9ydCB7SVJlZnVuZENvbnRhY3REZXRhaWxzfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZWZ1bmRDb250YWN0RGV0YWlscyc7XG5pbXBvcnQge0lSZWZ1bmRTdGF0dXN9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlZnVuZFN0YXR1cyc7XG5pbXBvcnQge0lSZXN1Ym1pdFJlZnVuZFJlcXVlc3R9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlc3VibWl0UmVmdW5kUmVxdWVzdCc7XG5pbXBvcnQge1BheW1lbnRWaWV3U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7SVBheW1lbnR9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnQnO1xuaW1wb3J0IHtJRmVlfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lGZWUnO1xuaW1wb3J0IHtJUmVmdW5kRmVlfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lSZWZ1bmRGZWUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge05vdGlmaWNhdGlvblByZXZpZXdDb21wb25lbnR9IGZyb20gJy4uL25vdGlmaWNhdGlvbi1wcmV2aWV3L25vdGlmaWNhdGlvbi1wcmV2aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQge0NvbnRhY3REZXRhaWxzQ29tcG9uZW50fSBmcm9tICcuLi9jb250YWN0LWRldGFpbHMvY29udGFjdC1kZXRhaWxzLmNvbXBvbmVudCc7XG5pbXBvcnQge0FkZFJlbWlzc2lvbkNvbXBvbmVudH0gZnJvbSAnLi4vYWRkLXJlbWlzc2lvbi9hZGQtcmVtaXNzaW9uLmNvbXBvbmVudCc7XG5pbXBvcnQge0NjZEh5cGhlbnNQaXBlfSBmcm9tICcuLi8uLi9waXBlcy9jY2QtaHlwaGVucy5waXBlJztcbmltcG9ydCB7Q2FwaXRhbGl6ZVBpcGV9IGZyb20gJy4uLy4uL3BpcGVzL2NhcGl0YWxpemUucGlwZSc7XG5pbXBvcnQgdHlwZSB7IFBheW1lbnRMaWJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYXltZW50LWxpYi5jb21wb25lbnQnO1xuXG50eXBlIFBheW1lbnRMaWJBbGlhcyA9IFBheW1lbnRMaWJDb21wb25lbnQ7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjcGF5LXJlZnVuZC1zdGF0dXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmVmdW5kLXN0YXR1cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JlZnVuZC1zdGF0dXMuY29tcG9uZW50LmNzcyddLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIGZvcndhcmRSZWYoKCkgPT4gTm90aWZpY2F0aW9uUHJldmlld0NvbXBvbmVudCksXG4gICAgZm9yd2FyZFJlZigoKSA9PiBDb250YWN0RGV0YWlsc0NvbXBvbmVudCksXG4gICAgZm9yd2FyZFJlZigoKSA9PiBBZGRSZW1pc3Npb25Db21wb25lbnQpLFxuICAgIENjZEh5cGhlbnNQaXBlLFxuICAgIENhcGl0YWxpemVQaXBlLFxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIFJlZnVuZFN0YXR1c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgnTE9HR0VESU5VU0VSUk9MRVMnKSBMT0dHRURJTlVTRVJST0xFUzogc3RyaW5nW10gPSBbXTtcbiAgQElucHV0KCdBUElfUk9PVCcpIEFQSV9ST09UOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNjZENhc2VOdW1iZXI6IHN0cmluZztcbiAgQElucHV0KCkgaXNUdXJuT2ZmOiBib29sZWFuO1xuICBASW5wdXQoKSBvcmRlclBhcnR5OiBzdHJpbmc7XG4gIHJlZnVuZFN0YXR1c0Zvcm06IEZvcm1Hcm91cDtcbiAgc2VsZWN0ZWRSZWZ1bmRSZWFzb246IHN0cmluZztcbiAgcmVqZWN0ZWRSZWZ1bmRMaXN0OiBJUmVmdW5kTGlzdFtdID0gW107XG4gIG5vdGlmaWNhdGlvbkxpc3Q6IGFueTtcbiAgbm90aWZpY2F0aW9uOiBhbnk7XG4gIGFwcHJvdmFsU3RhdHVzID0gJ1NlbnQgZm9yIGFwcHJvdmFsJztcbiAgcmVqZWN0U3RhdHVzID0gJ1VwZGF0ZSByZXF1aXJlZCc7XG4gIGVycm9yTWVzc2FnZSA9IG51bGw7XG4gIHZpZXdOYW1lOiBzdHJpbmc7XG4gIHJlZnVuZFJlYXNvbjogc3RyaW5nO1xuICByZWZ1bmRsaXN0OiBJUmVmdW5kTGlzdDtcbiAgYnNQYXltZW50RGNuTnVtYmVyOiBzdHJpbmc7XG4gIGlzQ2FsbEZyb21SZWZ1bmRMaXN0OiBib29sZWFuO1xuICByZWZ1bmRCdXR0b25TdGF0ZTogc3RyaW5nID0gJyc7XG4gIGlzQW1vdW50RW1wdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNSZWFzb25FbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBhbW91bnRIYXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1JlbWlzc2lvbkxlc3NUaGFuRmVlRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVmdW5kSGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVmdW5kUmVhc29uczogYW55W10gPSBbXTtcbiAgcmVmdW5kU3RhdHVzSGlzdG9yaWVzOiBJUmVmdW5kU3RhdHVzW107XG4gIHJlZnVuZE5vdGlmaWNhdGlvbnM6IElSZWZ1bmRTdGF0dXNbXTtcbiAgaXNSZXNlbmRPcGVyYXRpb25TdWNjZXNzOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRWRpdERldGFpbHNDbGlja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIGlzRWRpdEFkZHJlc3NEZWF0aWxzQ2xpY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBhZGRyZXNzRGV0YWlsczogSVJlZnVuZENvbnRhY3REZXRhaWxzO1xuICByZWZ1bmRSZWZlcmVuY2U6IHN0cmluZztcbiAgcmVmdW5kQW1vdW50OiBzdHJpbmc7XG4gIHJlZnVuZENvZGU6IHN0cmluZztcbiAgaXNSZWZ1bmRCdG5EaXNhYmxlZDogYm9vbGVhbiA9IHRydWU7XG4gIGlzRnJvbVBheUJ1YmJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBvbGRSZWZ1bmRSZWFzb246IHN0cmluZztcbiAgcmVmdW5kcmVhc29uOiBzdHJpbmc7XG4gIG5hdmlnYXRpb25wYWdlOiBzdHJpbmc7XG4gIGlzTGFzdFVwZGF0ZWRCeUN1cnJlbnRVc2VyOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNQcm9jZXNzUmVmdW5kOiBib29sZWFuID0gZmFsc2U7XG4gIGNoYW5nZWRBbW91bnQ6IG51bWJlcjtcbiAgaXNSZW1pc3Npb25zTWF0Y2g6IGJvb2xlYW47XG4gIHBheW1lbnQ6IElQYXltZW50O1xuICBjaGFuZ2VSZWZ1bmRSZWFzb246IHN0cmluZztcbiAgZmVlczogSUZlZVtdO1xuICByZWZ1bmRGZWVzOiBJUmVmdW5kRmVlW107XG4gIHBheW1lbnRPYmo6IElQYXltZW50O1xuICB0ZW1wbGF0ZUluc3RydWN0aW9uVHlwZTogc3RyaW5nO1xuICBub3RpZmljYXRpb25TZW50Vmlld0luZGV4OiBudW1iZXIgPSAtMTtcbiAgbm90aWZpY2F0aW9uUHJldmlldzogYm9vbGVhbiA9IGZhbHNlO1xuICBub3RpZmljYXRpb25TZW50VmlldzogYm9vbGVhbiA9IGZhbHNlO1xuICBhbGxvd2VkUm9sZXNUb0FjY2Vzc1JlZnVuZCA9IFsncGF5bWVudHMtcmVmdW5kLWFwcHJvdmVyJywgJ3BheW1lbnRzLXJlZnVuZCcsICdwYXltZW50cyddO1xuICBpc1JlZnVuZFN0YXR1c1Jlc2V0QnRuRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHJlZnVuZFNlcnZpY2U6IFJlZnVuZHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBASW5qZWN0KCdQQVlNRU5UX0xJQicpIHByaXZhdGUgcGF5bWVudExpYkNvbXBvbmVudDogUGF5bWVudExpYkFsaWFzLFxuICAgIHByaXZhdGUgT3JkZXJzbGlzdFNlcnZpY2U6IE9yZGVyc2xpc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGF5bWVudFZpZXdTZXJ2aWNlOiBQYXltZW50Vmlld1NlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlXSwgJ0FsbCcpO1xuICAgIHRoaXMuYnNQYXltZW50RGNuTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmJzcGF5bWVudGRjbjtcbiAgICB0aGlzLmlzQ2FsbEZyb21SZWZ1bmRMaXN0ID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzQ2FsbEZyb21SZWZ1bmRMaXN0O1xuICAgIGlmICh0aGlzLkFQSV9ST09UID09ICdhcGkvcGF5bWVudC1oaXN0b3J5Jykge1xuICAgICAgdGhpcy5pc0Zyb21QYXlCdWJibGUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldykge1xuICAgICAgdGhpcy52aWV3TmFtZSA9ICdyZWZ1bmR2aWV3JztcbiAgICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0UmVmdW5kVmlldygpLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5yZWZ1bmRsaXN0ID0gZGF0YSk7XG4gICAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLmdldENDRENhc2VOdW1iZXJmb3JSZWZ1bmQuc3Vic2NyaWJlKChkYXRhKSA9PiB0aGlzLmNjZENhc2VOdW1iZXIgPSBkYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52aWV3TmFtZSA9ICdyZWZ1bmRzdGF0dXNsaXN0JztcbiAgICAgIHRoaXMucmVmdW5kU2VydmljZS5nZXRSZWZ1bmRTdGF0dXNMaXN0KHRoaXMuY2NkQ2FzZU51bWJlcikuc3Vic2NyaWJlKFxuICAgICAgICByZWZ1bmRMaXN0ID0+IHtcbiAgICAgICAgICB0aGlzLnJlamVjdGVkUmVmdW5kTGlzdCA9IHJlZnVuZExpc3RbJ3JlZnVuZF9saXN0J107XG4gICAgICAgIH1cbiAgICAgICksXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvci5yZXBsYWNlKC9cIi9nLCBcIlwiKTtcbiAgICAgICAgfTtcbiAgICB9XG5cblxuICAgIHRoaXMucmVmdW5kU3RhdHVzRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgYW1vdW50OiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMuY29tcG9zZShbXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgIFZhbGlkYXRvcnMucGF0dGVybignXlswLTldKyhcXC5bMC05XXsxLDJ9KT8kJylcbiAgICAgIF0pKSxcbiAgICAgIHJlZnVuZFJlYXNvbjogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSksXG4gICAgICByZWFzb246IG5ldyBGb3JtQ29udHJvbCgpXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5yZWZ1bmRsaXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZ2V0UmVmdW5kc05vdGlmaWNhdGlvbigpO1xuICAgICAgdGhpcy5nZXRSZWZ1bmRzU3RhdHVzSGlzdG9yeUxpc3QoKTtcblxuICAgICAgaWYgKHRoaXMuTE9HR0VESU5VU0VSUk9MRVMuc29tZShpID0+IGkuaW5jbHVkZXMoJ3BheW1lbnRzLXJlZnVuZC1hcHByb3ZlcicpKSkge1xuICAgICAgICB0aGlzLmlzUHJvY2Vzc1JlZnVuZCA9IHRydWU7XG4gICAgICAgIHRoaXMucmVmdW5kQnV0dG9uU3RhdGUgPSB0aGlzLnJlZnVuZGxpc3QucmVmdW5kX3N0YXR1cy5uYW1lO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLkxPR0dFRElOVVNFUlJPTEVTLnNvbWUoaSA9PiBpLmluY2x1ZGVzKCdwYXltZW50cy1yZWZ1bmQnKSkpIHtcbiAgICAgICAgdGhpcy5pc1Byb2Nlc3NSZWZ1bmQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZWZ1bmRCdXR0b25TdGF0ZSA9IHRoaXMucmVmdW5kbGlzdC5yZWZ1bmRfc3RhdHVzLm5hbWU7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICBnZXRSZWZ1bmRzU3RhdHVzSGlzdG9yeUxpc3QoKSB7XG4gICAgaWYgKHRoaXMucmVmdW5kbGlzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnJlZnVuZFNlcnZpY2UuZ2V0UmVmdW5kU3RhdHVzSGlzdG9yeSh0aGlzLnJlZnVuZGxpc3QucmVmdW5kX3JlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgICBzdGF0dXNIaXN0b3J5TGlzdCA9PiB7XG4gICAgICAgICAgdGhpcy5yZWZ1bmRTdGF0dXNIaXN0b3JpZXMgPSBzdGF0dXNIaXN0b3J5TGlzdC5zdGF0dXNfaGlzdG9yeV9kdG9fbGlzdDtcbiAgICAgICAgICB0aGlzLmlzTGFzdFVwZGF0ZWRCeUN1cnJlbnRVc2VyID0gc3RhdHVzSGlzdG9yeUxpc3QubGFzdF91cGRhdGVkX2J5X2N1cnJlbnRfdXNlcjtcbiAgICAgICAgfVxuICAgICAgKSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yLnJlcGxhY2UoL1wiL2csIFwiXCIpO1xuICAgICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGdldFJlZnVuZHNOb3RpZmljYXRpb24oKSB7XG4gICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmdldFJlZnVuZE5vdGlmaWNhdGlvbih0aGlzLnJlZnVuZGxpc3QucmVmdW5kX3JlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgcmVmdW5kc05vdGlmaWNhdGlvbiA9PiB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uTGlzdCA9IHJlZnVuZHNOb3RpZmljYXRpb25bJ25vdGlmaWNhdGlvbnMnXTtcbiAgICAgIH1cbiAgICApLFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvci5yZXBsYWNlKC9cIi9nLCBcIlwiKTtcbiAgICAgIH07XG4gIH1cblxuICBnb1RvUmVmdW5kVmlldyhyZWZ1bmRsaXN0OiBJUmVmdW5kTGlzdCwgbmF2aWdhdGlvbnBhZ2U6IHN0cmluZykge1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0UmVmdW5kVmlldyhyZWZ1bmRsaXN0KTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldENDRENhc2VOdW1iZXIodGhpcy5jY2RDYXNlTnVtYmVyKTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncmVmdW5kc3RhdHVzbGlzdCc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldyA9IHRydWU7XG4gICAgdGhpcy5yZWZ1bmRsaXN0ID0gcmVmdW5kbGlzdDtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG5hdmlnYXRpb25QYWdlKG5hdmlnYXRpb25wYWdlKTtcbiAgfVxuXG4gIGxvYWRDYXNlVHJhbnNhY3Rpb25QYWdlKCkge1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2Uuc2V0bmF2aWdhdGlvblBhZ2UoJ2Nhc2V0cmFuc2FjdGlvbnMnKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldGlzRnJvbVNlcnZpY2VSZXF1ZXN0UGFnZShmYWxzZSk7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ2Nhc2UtdHJhbnNhY3Rpb25zJztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuSVNCU0VOQUJMRSA9IHRydWU7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LmlzUmVmdW5kU3RhdHVzVmlldyA9IGZhbHNlO1xuICB9XG5cbiAgbG9hZFJlZnVuZExpc3RQYWdlKCkge1xuICAgIHRoaXMuT3JkZXJzbGlzdFNlcnZpY2UuZ2V0bmF2aWdhdGlvblBhZ2VWYWx1ZSgpLnN1YnNjcmliZSgoZGF0YSkgPT4gdGhpcy5uYXZpZ2F0aW9ucGFnZSA9IGRhdGEpO1xuICAgIGlmICh0aGlzLm5hdmlnYXRpb25wYWdlID09PSAnY2FzZXRyYW5zYWN0aW9ucycpIHtcbiAgICAgIHRoaXMubG9hZENhc2VUcmFuc2FjdGlvblBhZ2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnZpZXdOYW1lID0gJ3JlZnVuZC1saXN0JztcbiAgICB9XG4gIH1cblxuICBnb3RvUmV2aWV3RGV0YWlsc1BhZ2UoZXZlbnQ6IGFueSkge1xuICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBmYWxzZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNSZWZ1bmRTdGF0dXNWaWV3ID0gdHJ1ZTtcbiAgICB0aGlzLm5nT25Jbml0KCk7XG4gIH1cblxuICBnb3RvUmV2aWV3QW5kUmVTdWJtaXRQYWdlKCkge1xuICAgIHRoaXMudmlld05hbWUgPSAncmV2aWV3YW5kc3VibWl0dmlldyc7XG4gICAgdGhpcy5nZXRUZW1wbGF0ZUluc3RydWN0aW9uVHlwZSh0aGlzLnBheW1lbnRPYmosIHRoaXMucmVmdW5kbGlzdC5wYXltZW50X3JlZmVyZW5jZSk7XG4gICAgdGhpcy5vbGRSZWZ1bmRSZWFzb24gPSB0aGlzLnJlZnVuZGxpc3QucmVhc29uO1xuICAgIHRoaXMuY2hhbmdlZEFtb3VudCA9IHRoaXMucmVmdW5kbGlzdC5hbW91bnQ7XG4gICAgdGhpcy5yZWZ1bmRyZWFzb24gPSB0aGlzLnJlZnVuZFN0YXR1c0hpc3Rvcmllcy5maWx0ZXIoZGF0YSA9PiBkYXRhLnN0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAndXBkYXRlIHJlcXVpcmVkJylbMF0ubm90ZXM7XG4gICAgdGhpcy5yZWZ1bmRTZXJ2aWNlLmdldFJlZnVuZFJlYXNvbnMoKS5zdWJzY3JpYmUoXG4gICAgICByZWZ1bmRSZWFzb25zID0+IHtcbiAgICAgICAgdGhpcy5yZWZ1bmRSZWFzb25zID0gcmVmdW5kUmVhc29ucztcbiAgICAgIH0pO1xuICB9XG4gIGdvdG9SZWZ1bmRSZWFzb25QYWdlKHJlZnVuZFJlYXNvbjogc3RyaW5nKSB7XG4gICAgdGhpcy5pc1JlZnVuZEJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlJFRlVORExJU1QgPSBcInRydWVcIjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSA9IHRydWU7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGZhbHNlO1xuICAgIHRoaXMuY2hhbmdlUmVmdW5kUmVhc29uID0gcmVmdW5kUmVhc29uO1xuICAgIHRoaXMudmlld05hbWUgPSAnaXNzdWVyZWZ1bmRwYWdlMSc7XG4gIH1cblxuICBnb3RvQW1vdW50UGFnZSgpIHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGZhbHNlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5SRUZVTkRMSVNUID0gXCJ0cnVlXCI7XG4gICAgdGhpcy5pc1JlZnVuZEJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUmVmdW5kU3RhdHVzUGFnZSA9IHRydWU7XG4gICAgaWYgKHRoaXMucmVmdW5kbGlzdC5yZWFzb24gPT0gJ1JldHJvc3BlY3RpdmUgcmVtaXNzaW9uJykge1xuICAgICAgdGhpcy52aWV3TmFtZSA9ICdwcm9jZXNzcmV0cm9yZW1pc3NvbnBhZ2UnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZpZXdOYW1lID0gJ2lzc3VlcmVmdW5kJztcbiAgICB9XG4gIH1cblxuICBnb1RvUmV2aWV3QW5kU3VibWl0VmlldygpIHtcbiAgICBjb25zdCByZW1pc3Npb25jdHJscyA9IHRoaXMucmVmdW5kU3RhdHVzRm9ybS5jb250cm9sc1xuICAgIGlmICh0aGlzLnJlZnVuZFN0YXR1c0Zvcm0uZGlydHkpIHtcbiAgICAgIGlmIChyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgPT0gJycpIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW3RydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2VdLCAnYW1vdW50Jyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChyZW1pc3Npb25jdHJsc1snYW1vdW50J10udmFsdWUgIT0gJycgJiYgcmVtaXNzaW9uY3RybHNbJ2Ftb3VudCddLmludmFsaWQpIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCB0cnVlLCBmYWxzZSwgZmFsc2VdLCAnYW1vdW50Jyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChyZW1pc3Npb25jdHJsc1sncmVhc29uJ10udmFsdWUgPT0gJycpIHtcbiAgICAgICAgdGhpcy5yZXNldFJlbWlzc2lvbkZvcm0oW2ZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWVdLCAncmVhc29uJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlZnVuZGxpc3QucmVhc29uID0gcmVtaXNzaW9uY3RybHNbJ3JlYXNvbiddLnZhbHVlO1xuICAgICAgICB0aGlzLnZpZXdOYW1lID0gJ3Jldmlld2FuZHN1Ym1pdHZpZXcnO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgcmVzZXRSZW1pc3Npb25Gb3JtKHZhbCwgZmllbGQpIHtcbiAgICBpZiAoZmllbGQgPT09ICdBbGwnKSB7XG4gICAgICB0aGlzLmlzQW1vdW50RW1wdHkgPSB2YWxbMF07XG4gICAgICB0aGlzLmFtb3VudEhhc0Vycm9yID0gdmFsWzFdO1xuICAgICAgdGhpcy5pc1JlbWlzc2lvbkxlc3NUaGFuRmVlRXJyb3IgPSB2YWxbMl07XG4gICAgICB0aGlzLmlzUmVhc29uRW1wdHkgPSB2YWxbM107XG4gICAgfSBlbHNlIGlmIChmaWVsZCA9PT0gJ2Ftb3VudCcgfHwgZmllbGQgPT09ICdBbGwnKSB7XG4gICAgICB0aGlzLmlzQW1vdW50RW1wdHkgPSB2YWxbMF07XG4gICAgICB0aGlzLmFtb3VudEhhc0Vycm9yID0gdmFsWzFdO1xuICAgICAgdGhpcy5pc1JlbWlzc2lvbkxlc3NUaGFuRmVlRXJyb3IgPSB2YWxbMl07XG4gICAgfSBlbHNlIGlmIChmaWVsZCA9PT0gJ3JlYXNvbicgfHwgZmllbGQgPT09ICdBbGwnKSB7XG4gICAgICB0aGlzLmlzUmVhc29uRW1wdHkgPSB2YWxbM107XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0UmFkaW9CdXR0b24oa2V5LCB2YWx1ZSkge1xuICAgIHRoaXMucmVmdW5kSGFzRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLnNlbGVjdGVkUmVmdW5kUmVhc29uID0ga2V5O1xuICAgIGlmIChrZXkgPT09ICdPdGhlcicpIHtcbiAgICAgIHRoaXMucmVmdW5kSGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVmdW5kUmVhc29uID0ga2V5O1xuICAgIH1cbiAgfVxuXG4gIGdldFJlZnVuZExpc3RSZWFzb24ocmVmdW5kTGlzdFJlYXNvbjogYW55KSB7XG4gICAgaWYgKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlICYmICF0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNjYW5jZWxDbGlja2VkKSB7XG4gICAgICBpZiAocmVmdW5kTGlzdFJlYXNvbi5yZWFzb24gIT0gdW5kZWZpbmVkICYmIHJlZnVuZExpc3RSZWFzb24ucmVhc29uICE9IG51bGwgJiYgcmVmdW5kTGlzdFJlYXNvbi5yZWFzb24gIT0gdGhpcy5yZWZ1bmRsaXN0LnJlYXNvbikge1xuICAgICAgICB0aGlzLnJlZnVuZGxpc3QucmVhc29uID0gcmVmdW5kTGlzdFJlYXNvbi5yZWFzb247XG4gICAgICAgIHRoaXMucmVmdW5kbGlzdC5yZWFzb25fY29kZSA9IHJlZnVuZExpc3RSZWFzb24uY29kZS5zcGxpdCgnLScpWzBdLnRyaW0oKTtcbiAgICAgICAgdGhpcy5yZWZ1bmRsaXN0LmNvZGUgPSByZWZ1bmRMaXN0UmVhc29uLmNvZGU7XG4gICAgICAgIHRoaXMucmVmdW5kQ29kZSA9IHJlZnVuZExpc3RSZWFzb24uY29kZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1JlZnVuZEJ0bkRpc2FibGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5ub3RpZmljYXRpb25QcmV2aWV3ID0gZmFsc2U7XG4gICAgdGhpcy52aWV3TmFtZSA9ICdyZXZpZXdhbmRzdWJtaXR2aWV3JztcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuQ0NEX0NBU0VfTlVNQkVSID0gdGhpcy5jY2RDYXNlTnVtYmVyO1xuICB9XG5cbiAgZ2V0UmVmdW5kQW1vdW50KGFtb3VudDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21SZWZ1bmRTdGF0dXNQYWdlICYmICF0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNjYW5jZWxDbGlja2VkKSB7XG4gICAgICBpZiAoYW1vdW50ID4gMCkge1xuICAgICAgICB0aGlzLmNoYW5nZWRBbW91bnQgPSBhbW91bnQ7XG4gICAgICAgIC8vIHRoaXMucmVmdW5kbGlzdC5hbW91bnQgPSBhbW91bnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNSZWZ1bmRCdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMubm90aWZpY2F0aW9uUHJldmlldyA9IGZhbHNlO1xuICAgIHRoaXMudmlld05hbWUgPSAncmV2aWV3YW5kc3VibWl0dmlldyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUiA9IHRoaXMuY2NkQ2FzZU51bWJlcjtcbiAgfVxuXG4gIGdldFJlZnVuZEZlZXMoZmVlczogSUZlZVtdKSB7XG4gICAgdGhpcy5mZWVzID0gZmVlcztcbiAgICB0aGlzLnJlZnVuZEZlZXMgPSB0aGlzLmZlZXMubWFwKG9iaiA9PiAoe1xuICAgICAgZmVlX2lkOiBvYmouaWQsXG4gICAgICBjb2RlOiBvYmouY29kZSxcbiAgICAgIHZlcnNpb246IG9iai52ZXJzaW9uLFxuICAgICAgdm9sdW1lOiBvYmoudXBkYXRlZF92b2x1bWUgPyBvYmoudXBkYXRlZF92b2x1bWUgOiBvYmoudm9sdW1lLFxuICAgICAgcmVmdW5kX2Ftb3VudDogb2JqLnJlZnVuZF9hbW91bnRcbiAgICB9KSk7XG4gIH1cblxuICBnb3RvUmV2aWV3UmVmdW5kQ29uZmlybWF0aW9uUGFnZSgpIHtcbiAgICAvLyBpZiAodGhpcy5vbGRSZWZ1bmRSZWFzb24gPT09IHRoaXMucmVmdW5kbGlzdC5yZWFzb24pIHtcbiAgICAvLyAgIHRoaXMucmVmdW5kQ29kZSA9ICcnO1xuICAgIC8vIH1cbiAgICBpZiAodGhpcy5yZWZ1bmRGZWVzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucmVmdW5kRmVlcyA9IHRoaXMucmVmdW5kbGlzdFsncmVmdW5kX2ZlZXMnXTtcbiAgICB9XG4gICAgaWYgKHRoaXMucmVmdW5kbGlzdC5yZWFzb24gPT0gJ1JldHJvc3BlY3RpdmUgcmVtaXNzaW9uJykge1xuICAgICAgdGhpcy5yZWZ1bmRGZWVzWzBdLnJlZnVuZF9hbW91bnQgPSB0aGlzLmNoYW5nZWRBbW91bnQ7XG4gICAgfVxuICAgIHRoaXMucmVmdW5kQ29kZSA9IHRoaXMucmVmdW5kbGlzdC5jb2RlO1xuICAgIGNvbnN0IHJlc3VibWl0UmVxdWVzdCA9IG5ldyBJUmVzdWJtaXRSZWZ1bmRSZXF1ZXN0KHRoaXMucmVmdW5kQ29kZSwgdGhpcy5jaGFuZ2VkQW1vdW50LCB0aGlzLnJlZnVuZGxpc3QuY29udGFjdF9kZXRhaWxzLCB0aGlzLnJlZnVuZEZlZXMpO1xuICAgIHRoaXMucmVmdW5kU2VydmljZS5wYXRjaFJlc3VibWl0UmVmdW5kKHJlc3VibWl0UmVxdWVzdCwgdGhpcy5yZWZ1bmRsaXN0LnJlZnVuZF9yZWZlcmVuY2UpLnN1YnNjcmliZShcbiAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKEpTT04ucGFyc2UocmVzcG9uc2UpKSB7XG4gICAgICAgICAgdGhpcy5yZWZ1bmRSZWZlcmVuY2UgPSBKU09OLnBhcnNlKHJlc3BvbnNlKS5yZWZ1bmRfcmVmZXJlbmNlO1xuICAgICAgICAgIHRoaXMucmVmdW5kQW1vdW50ID0gSlNPTi5wYXJzZShyZXNwb25zZSkucmVmdW5kX2Ftb3VudDtcbiAgICAgICAgICB0aGlzLnZpZXdOYW1lID0gJ3Jldmlld3JlZnVuZGNvbmZpcm1hdGlvbnBhZ2UnO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvci5yZXBsYWNlKC9cIi9nLCBcIlwiKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgZ290b0VkaXRBZGRyZXNzRGV0YWlscyhub3RlOiBJUmVmdW5kc05vdGlmaWNhdGlvbnMpIHtcbiAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IG5vdGU7XG4gICAgdGhpcy5pc0VkaXREZXRhaWxzQ2xpY2tlZCA9IHRydWU7XG4gICAgdGhpcy52aWV3TmFtZSA9ICdyZWZ1bmRFZGl0VmlldydcbiAgfVxuICBnZXRDb250YWN0RGV0YWlscyhvYmo6IElSZWZ1bmRDb250YWN0RGV0YWlscykge1xuICAgIHRoaXMuYWRkcmVzc0RldGFpbHMgPSBvYmo7XG4gICAgdGhpcy5nZXRUZW1wbGF0ZUluc3RydWN0aW9uVHlwZSh0aGlzLnBheW1lbnRPYmosIHRoaXMucmVmdW5kbGlzdC5wYXltZW50X3JlZmVyZW5jZSk7XG4gICAgdGhpcy5ub3RpZmljYXRpb25QcmV2aWV3ID0gZmFsc2U7XG4gICAgdGhpcy52aWV3TmFtZSA9ICdyZXZpZXdlZGl0ZGV0YWlsc2NvbmZpcm1hdGlvbnBhZ2UnO1xuICB9XG4gIGdldENvbnRhY3REZXRhaWxzRm9yUmVmdW5kTGlzdChvYmo6IElSZWZ1bmRDb250YWN0RGV0YWlscykge1xuICAgIHRoaXMucmVmdW5kbGlzdC5jb250YWN0X2RldGFpbHMgPSBvYmo7XG4gICAgdGhpcy5nZXRUZW1wbGF0ZUluc3RydWN0aW9uVHlwZSh0aGlzLnBheW1lbnRPYmosIHRoaXMucmVmdW5kbGlzdC5wYXltZW50X3JlZmVyZW5jZSk7XG4gICAgdGhpcy5ub3RpZmljYXRpb25QcmV2aWV3ID0gZmFsc2U7XG4gICAgdGhpcy5pc0VkaXREZXRhaWxzQ2xpY2tlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNSZWZ1bmRCdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMudmlld05hbWUgPSAncmV2aWV3YW5kc3VibWl0dmlldyc7XG4gIH1cbiAgZ290b0VkaXREZXRhaWxzUGFnZShub3RlPzogYW55LCB2aWV3Pzogc3RyaW5nKSB7XG4gICAgaWYgKG5vdGUpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uID0geyBjb250YWN0X2RldGFpbHM6IG5vdGUsIG5vdGlmaWNhdGlvbl90eXBlOiBub3RlLm5vdGlmaWNhdGlvbl90eXBlIH07XG4gICAgfVxuICAgIHRoaXMuaXNFZGl0RGV0YWlsc0NsaWNrZWQgPSB0cnVlO1xuICAgIHRoaXMudmlld05hbWUgPSB2aWV3O1xuICB9XG4gIHN1Ym1pdEVkaXREZXRhaWwoKSB7XG4gICAgdGhpcy5pc1Jlc2VuZE9wZXJhdGlvblN1Y2Nlc3MgPSBmYWxzZTtcbiAgICBjb25zdCBjb250YWN0RGV0YWlscyA9IHRoaXMuYWRkcmVzc0RldGFpbHMubm90aWZpY2F0aW9uX3R5cGUgPT09ICdFTUFJTCcgPyB0aGlzLmFkZHJlc3NEZXRhaWxzLmVtYWlsIDpcbiAgICAgIHtcbiAgICAgICAgYWRkcmVzc19saW5lOiB0aGlzLmFkZHJlc3NEZXRhaWxzLmFkZHJlc3NfbGluZSxcbiAgICAgICAgY2l0eTogdGhpcy5hZGRyZXNzRGV0YWlscy5jaXR5LFxuICAgICAgICBjb3VudHk6IHRoaXMuYWRkcmVzc0RldGFpbHMuY291bnR5LFxuICAgICAgICBjb3VudHJ5OiB0aGlzLmFkZHJlc3NEZXRhaWxzLmNvdW50cnksXG4gICAgICAgIHBvc3RhbF9jb2RlOiB0aGlzLmFkZHJlc3NEZXRhaWxzLnBvc3RhbF9jb2RlLFxuICAgICAgfTtcbiAgICBjb25zdCByZXNlbmRSZXF1ZXN0ID0gbmV3IElQdXROb3RpZmljYXRpb25SZXF1ZXN0KGNvbnRhY3REZXRhaWxzLCB0aGlzLmFkZHJlc3NEZXRhaWxzLm5vdGlmaWNhdGlvbl90eXBlKTtcblxuICAgIHRoaXMucmVmdW5kU2VydmljZS5wdXRSZXNlbmRPckVkaXQocmVzZW5kUmVxdWVzdCwgdGhpcy5yZWZ1bmRsaXN0LnJlZnVuZF9yZWZlcmVuY2UsIHRoaXMuYWRkcmVzc0RldGFpbHMubm90aWZpY2F0aW9uX3R5cGUpLnN1YnNjcmliZShcbiAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmlzUmVzZW5kT3BlcmF0aW9uU3VjY2VzcyA9IHJlc3BvbnNlO1xuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuaXNSZXNlbmRPcGVyYXRpb25TdWNjZXNzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3IucmVwbGFjZSgvXCIvZywgXCJcIik7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBwdXRSZXNlbmQobm90aWZpY2F0aW9uOiBJUmVmdW5kc05vdGlmaWNhdGlvbnMpIHtcbiAgICB0aGlzLmlzUmVzZW5kT3BlcmF0aW9uU3VjY2VzcyA9IGZhbHNlO1xuICAgIGNvbnN0IGNvbnRhY3REZXRhaWxzID0gbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbl90eXBlID09PSAnRU1BSUwnID8gbm90aWZpY2F0aW9uLmNvbnRhY3RfZGV0YWlscy5lbWFpbCA6XG4gICAgICB7XG4gICAgICAgIGFkZHJlc3NfbGluZTogbm90aWZpY2F0aW9uLmNvbnRhY3RfZGV0YWlscy5hZGRyZXNzX2xpbmUsXG4gICAgICAgIGNpdHk6IG5vdGlmaWNhdGlvbi5jb250YWN0X2RldGFpbHMuY2l0eSxcbiAgICAgICAgY291bnR5OiBub3RpZmljYXRpb24uY29udGFjdF9kZXRhaWxzLmNvdW50eSxcbiAgICAgICAgY291bnRyeTogbm90aWZpY2F0aW9uLmNvbnRhY3RfZGV0YWlscy5jb3VudHJ5LFxuICAgICAgICBwb3N0YWxfY29kZTogbm90aWZpY2F0aW9uLmNvbnRhY3RfZGV0YWlscy5wb3N0YWxfY29kZSxcbiAgICAgIH07XG4gICAgY29uc3QgcmVzZW5kUmVxdWVzdCA9IG5ldyBJUHV0Tm90aWZpY2F0aW9uUmVxdWVzdChjb250YWN0RGV0YWlscywgbm90aWZpY2F0aW9uLm5vdGlmaWNhdGlvbl90eXBlKTtcblxuICAgIHRoaXMucmVmdW5kU2VydmljZS5wdXRSZXNlbmRPckVkaXQocmVzZW5kUmVxdWVzdCwgdGhpcy5yZWZ1bmRsaXN0LnJlZnVuZF9yZWZlcmVuY2UsIG5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb25fdHlwZSkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuaXNSZXNlbmRPcGVyYXRpb25TdWNjZXNzID0gcmVzcG9uc2U7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5pc1Jlc2VuZE9wZXJhdGlvblN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvci5yZXBsYWNlKC9cIi9nLCBcIlwiKTtcbiAgICAgIH1cbiAgICApO1xuXG4gIH1cblxuICBnb3RvUmVmdW5kVmlld1BhZ2VDYW5jZWxCdG5DbGlja2VkKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5pc0VkaXREZXRhaWxzQ2xpY2tlZCA9IGZhbHNlO1xuICAgIHRoaXMudmlld05hbWUgPSAncmVmdW5kdmlldyc7XG4gIH1cblxuICBnb3RvUmVmdW5kUmV2aWV3QW5kU3VibWl0Vmlld1BhZ2VDYW5jZWxCdG5DbGlja2VkKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5pc0VkaXREZXRhaWxzQ2xpY2tlZCA9IGZhbHNlO1xuICAgIHRoaXMudmlld05hbWUgPSAncmV2aWV3YW5kc3VibWl0dmlldyc7XG4gIH1cblxuICBnb1RvUmVmdW5kUHJvY2Vzc0NvbXBvbmVudChyZWZ1bmRSZWZlcmVuY2U6IHN0cmluZywgcmVmdW5kTGlzdDogSVJlZnVuZExpc3QpIHtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucmVmdW5kbGlzdHNvdXJjZSA9IHJlZnVuZExpc3Q7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LnJlZnVuZFJlZmVyZW5jZSA9IHJlZnVuZFJlZmVyZW5jZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQuaXNGcm9tUGF5QnViYmxlID0gdHJ1ZTtcbiAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQudmlld05hbWUgPSAncHJvY2Vzcy1yZWZ1bmQnO1xuICB9XG5cbiAgZ2V0VGVtcGxhdGVJbnN0cnVjdGlvblR5cGUocGF5bWVudDogSVBheW1lbnQsIHBheW1lbnRSZWZlcmVuY2U6IHN0cmluZyk6IHZvaWQge1xuXG4gICAgaWYgKHBheW1lbnQgPT0gdW5kZWZpbmVkIHx8IHBheW1lbnQgPT0gbnVsbCB8fCBwYXltZW50LnJlZmVyZW5jZSAhPSBwYXltZW50UmVmZXJlbmNlKSB7XG5cbiAgICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldFBheW1lbnREZXRhaWxzKHBheW1lbnRSZWZlcmVuY2UpLnN1YnNjcmliZShcbiAgICAgICAgcGF5bWVudCA9PiB7XG4gICAgICAgICAgdGhpcy5wYXltZW50T2JqID0gcGF5bWVudDtcbiAgICAgICAgICB0aGlzLnBheW1lbnRPYmoucmVmZXJlbmNlID0gcGF5bWVudFJlZmVyZW5jZTtcbiAgICAgICAgICB0aGlzLnRlbXBsYXRlSW5zdHJ1Y3Rpb25UeXBlID0gdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmdldE5vdGlmaWNhdGlvbkluc3RydWN0aW9uVHlwZSh0aGlzLnBheW1lbnRPYmouY2hhbm5lbCwgdGhpcy5wYXltZW50T2JqLm1ldGhvZCk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy50ZW1wbGF0ZUluc3RydWN0aW9uVHlwZSA9ICdUZW1wbGF0ZSc7XG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGVtcGxhdGVJbnN0cnVjdGlvblR5cGUgPSB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZ2V0Tm90aWZpY2F0aW9uSW5zdHJ1Y3Rpb25UeXBlKHBheW1lbnQuY2hhbm5lbCwgcGF5bWVudC5tZXRob2QpO1xuICAgIH1cbiAgfVxuXG4gIHNob3dOb3RpZmljYXRpb25QcmV2aWV3KCk6IHZvaWQge1xuICAgIHRoaXMubm90aWZpY2F0aW9uUHJldmlldyA9IHRydWU7XG4gIH1cblxuICBoaWRlTm90aWZpY2F0aW9uUHJldmlldygpOiB2b2lkIHtcbiAgICB0aGlzLm5vdGlmaWNhdGlvblByZXZpZXcgPSBmYWxzZTtcbiAgfVxuXG4gIHNob3dOb3RpZmljYXRpb25TZW50VmlldyhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5ub3RpZmljYXRpb25TZW50Vmlld0luZGV4ID0gaW5kZXg7XG4gICAgdGhpcy5ub3RpZmljYXRpb25TZW50VmlldyA9IHRydWU7XG4gIH1cblxuICBoaWRlTm90aWZpY2F0aW9uU2VudFZpZXcoKTogdm9pZCB7XG4gICAgdGhpcy5ub3RpZmljYXRpb25TZW50Vmlld0luZGV4ID0gLTE7XG4gICAgdGhpcy5ub3RpZmljYXRpb25TZW50VmlldyA9IGZhbHNlO1xuICB9XG5cbiAgY2hlY2s0QWxsb3dlZFJvbGVzMkRpc3BsYXlFZGl0UmVmdW5kQnRuID0gKCk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiB0aGlzLmFsbG93ZWRSb2xlc1RvQWNjZXNzUmVmdW5kLnNvbWUocm9sZSA9PlxuICAgICAgdGhpcy5MT0dHRURJTlVTRVJST0xFUy5pbmRleE9mKHJvbGUpICE9PSAtMVxuICAgICk7XG4gIH07XG5cblxuICBkaXNwbGF5UmVzZXRSZWZ1bmRDb25maXJtYXRpb24oKXtcbiAgICB0aGlzLmlzUmVmdW5kU3RhdHVzUmVzZXRCdG5EaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy52aWV3TmFtZSA9ICdjb25maXJtU3VibWl0UmVzZXRSZWZ1bmQnO1xuICB9XG5cblxuICByZWRpcmVjdFRvUmVmdW5kTGlzdFBhZ2UoKSB7XG4gICAgdGhpcy52aWV3TmFtZSA9ICdyZWZ1bmR2aWV3JztcbiAgICB0aGlzLmlzUmVmdW5kU3RhdHVzUmVzZXRCdG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdyZWZ1bmRzdGF0dXNsaXN0JztcbiAgfVxuXG5cbiAgcG9zdFJlc2V0UmVmdW5kKCkge1xuXG4gICAgdGhpcy5yZWZ1bmRTZXJ2aWNlLnBvc3RSZXNldFJlZnVuZCh0aGlzLnJlZnVuZGxpc3QucmVmdW5kX3JlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuaXNSZXNlbmRPcGVyYXRpb25TdWNjZXNzID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMubG9hZFJlZnVuZExpc3RQYWdlKCk7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5pc1Jlc2VuZE9wZXJhdGlvblN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvci5yZXBsYWNlKC9cIi9nLCBcIlwiKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgZ2V0UmVzZXRSZWZ1bmRWaXNpYmlsaXR5KCl7XG4gICAgdGhpcy5jaGVjazRBbGxvd2VkUm9sZXMyRGlzcGxheUVkaXRSZWZ1bmRCdG4gJiYgdGhpcy5pc0N1cnJlbnRSZWZ1bmRWaXNpYmxlRm9yUmVzZXQoKTtcbiAgfVxuXG4gIGlzQ3VycmVudFJlZnVuZFZpc2libGVGb3JSZXNldCgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWZ1bmRsaXN0LnJlZnVuZF9zdGF0dXMubmFtZSAgPT09ICdFeHBpcmVkJ1xuICB9XG5cbn1cbiIsIlxuPGRpdiAqbmdJZj1cImVycm9yTWVzc2FnZVwiPlxuICA8ZGl2IGNsYXNzPVwiZXJyb3Itc3VtbWFyeVwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWxsZWRieT1cImZhaWx1cmUtZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgIDxoMiBjbGFzcz1cImhlYWRpbmctbWVkaXVtIGVycm9yLXN1bW1hcnktaGVhZGluZ1wiIGlkPVwiZmFpbHVyZS1lcnJvci1zdW1tYXJ5LWhlYWRpbmdcIj5cbiAgICAgIEVycm9yIGluIHByb2Nlc3NpbmcgdGhlIHJlcXVlc3RcbiAgICA8L2gyPlxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1lcnJvci1zdW1tYXJ5X19ib2R5XCI+XG4gICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdOYW1lPT09J3JlZnVuZHN0YXR1c2xpc3QnICYmIHJlamVjdGVkUmVmdW5kTGlzdCAmJiAhaXNSZXNlbmRPcGVyYXRpb25TdWNjZXNzICYmICFpc0VkaXREZXRhaWxzQ2xpY2tlZFwiPlxuICA8IS0tIHBheW1lbnRzIC0tPlxuXG4gIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciBjb2wtMTZcIiBzY29wZT1cImNvbFwiPlN0YXR1czwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgY29sLTExXCIgc2NvcGU9XCJjb2xcIj5BbW91bnQ8L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyIGNvbC0xOFwiIHNjb3BlPVwiY29sXCI+RGF0ZTwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgY29sLTI1XCIgc2NvcGU9XCJjb2xcIj5SZWZ1bmQgcmVmZXJlbmNlPC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciBjb2wtMjQgXCIgc2NvcGU9XCJjb2xcIj5SZWFzb248L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyXCIgc2NvcGU9XCJjb2xcIj48L3RkPlxuICAgICAgPC90cj5cbiAgICA8L3RoZWFkPlxuICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJyZWplY3RlZFJlZnVuZExpc3Q/Lmxlbmd0aCA+IDBcIj5cbiAgICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIiAqbmdGb3I9XCJsZXQgcmVmdW5kTGlzdCBvZiByZWplY3RlZFJlZnVuZExpc3RcIj5cbiAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+e3sgcmVmdW5kTGlzdD8ucmVmdW5kX3N0YXR1c1snbmFtZSddIH19PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwiY2hhbm5lbCBnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj7Co3t7IHJlZnVuZExpc3Q/LmFtb3VudCB8IG51bWJlcjonLjInIH19PC90ZD5cbiAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlZnVuZExpc3Q/LmRhdGVfdXBkYXRlZCB8IGRhdGU6J2RkIE1NTSB5eXl5J319XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7IHJlZnVuZExpc3Q/LnJlZnVuZF9yZWZlcmVuY2UgfX08L3RkPlxuICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCB3aGl0ZXNwYWNlLWluaGVyaXRcIj4ge3tyZWZ1bmRMaXN0Py5yZWFzb259fTwvdGQ+XG4gICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPlxuICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwiZ29Ub1JlZnVuZFZpZXcocmVmdW5kTGlzdCwnY2FzZXRyYW5zYWN0aW9ucycpXCI+UmV2aWV3PC9hPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cbiAgICA8L3Rib2R5PlxuICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJyZWplY3RlZFJlZnVuZExpc3Q/Lmxlbmd0aCA9PT0gMFwiPlxuICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiBjb2xzcGFuPVwiNlwiPk5vIHJlZnVuZHMgcmVjb3JkZWQ8L3RkPlxuICAgIDwvdGJvZHk+XG4gIDwvdGFibGU+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdOYW1lPT09J3JlZnVuZHZpZXcnICYmICFpc1Jlc2VuZE9wZXJhdGlvblN1Y2Nlc3MgJiYgIWlzRWRpdERldGFpbHNDbGlja2VkXCI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1icmVhZGNydW1ic1wiPlxuICAgIDxvbCBjbGFzcz1cImdvdnVrLWJyZWFkY3J1bWJzX19saXN0XCI+XG4gICAgICA8bGkgY2xhc3M9XCJnb3Z1ay1icmVhZGNydW1ic19fbGlzdC1pdGVtXCI+XG4gICAgICAgIDxhICBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cImxvYWRSZWZ1bmRMaXN0UGFnZSgpXCIgY2xhc3M9XCJnb3Z1ay1iYWNrLWxpbmsgZ292dWstbGFiZWxcIj5CYWNrPC9hPlxuICAgICAgPC9saT5cbiAgICA8L29sPlxuICA8L2Rpdj5cbiAgPGgyIGNsYXNzPVwiZ292dWstaGVhZGluZy1sXCI+UmVmdW5kIGRldGFpbHM8L2gyPlxuICA8dGFibGU+XG5cbiAgICA8dGJvZHk+XG4gICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5SZWZ1bmQgcmVmZXJlbmNlPC90ZD5cbiAgICAgICAgPHRkPnt7IHJlZnVuZGxpc3Q/LnJlZnVuZF9yZWZlcmVuY2UgfX08L3RkPlxuICAgICAgPC90cj5cbiAgICAgIDx0ciBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgPHRkIGNsYXNzPVwiYm9sZCB0Yi1jb2wtd1wiPlBheW1lbnQgdG8gYmUgcmVmdW5kZWQ8L3RkPlxuICAgICAgICA8dGQ+e3tyZWZ1bmRsaXN0Py5wYXltZW50X3JlZmVyZW5jZSB9fTwvdGQ+XG4gICAgICA8L3RyPlxuICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICA8dGQgY2xhc3M9XCJib2xkIHRiLWNvbC13XCI+UmVhc29uIGZvciByZWZ1bmQ8L3RkPlxuICAgICAgICA8dGQ+e3sgcmVmdW5kbGlzdD8ucmVhc29uIH19PC90ZD5cbiAgICAgIDwvdHI+XG4gICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgIDx0ZCBjbGFzcz1cImJvbGQgdGItY29sLXdcIj5BbW91bnQgcmVmdW5kZWQ8L3RkPlxuICAgICAgICA8dGQ+wqN7e3JlZnVuZGxpc3Q/LmFtb3VudCB8IG51bWJlcjonLjInIH19PC90ZD5cbiAgICAgIDwvdHI+XG5cbiAgICA8L3Rib2R5PlxuICA8L3RhYmxlPlxuXG5cbiAgICA8IS0tIE5vdGlmaWNhdGlvbiBzZW50IGRldGFpbHMgLS0+XG4gICAgPGRpdj5cbiAgICAgIDxiciAvPlxuICAgICAgPGgyIGNsYXNzPVwiZ292dWstaGVhZGluZy1tXCI+Tm90aWZpY2F0aW9ucyBzZW50PC9oMj5cbiAgICAgIDx0YWJsZSBjbGFzcz1cImdvdnVrLXRhYmxlXCI+XG4gICAgICAgIDx0aGVhZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkXCI+XG4gICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciBjb2wtMjQgd2hpdGVzcGFjZS1pbmhlcml0XCIgc2NvcGU9XCJjb2xcIj5EYXRlIGFuZCB0aW1lPC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgY29sLTI3IHdoaXRlc3BhY2UtaW5oZXJpdFwiIHNjb3BlPVwiY29sXCI+U2VudCB0bzwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyIHdoaXRlc3BhY2UtaW5oZXJpdFwiIHNjb3BlPVwiY29sXCI+U2VudCB2aWE8L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciB3aGl0ZXNwYWNlLWluaGVyaXRcIiBzY29wZT1cImNvbFwiPkFjdGlvbnM8L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keSBjbGFzcz1cImdvdnVrLXRhYmxlX19ib2R5XCIgKm5nSWY9XCJub3RpZmljYXRpb25MaXN0XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbm90aWZpY2F0aW9uIG9mIG5vdGlmaWNhdGlvbkxpc3Q7IGxldCBpID0gaW5kZXg7XCI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7bm90aWZpY2F0aW9uLmRhdGVfY3JlYXRlZCB8IGRhdGU6J2RkIE1NTU0geXl5eSBISDptbTpzcyd9fTwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7b3JkZXJQYXJ0eX19PC90ZD5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0IGNvbC00MFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJub3RpZmljYXRpb24/Lm5vdGlmaWNhdGlvbl90eXBlID09PSAnRU1BSUwnXCI+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPkVtYWlsPC9zdHJvbmc+PGJyPlxuICAgICAgICAgICAgICAgICAge3tub3RpZmljYXRpb24/LmNvbnRhY3RfZGV0YWlscz8uZW1haWw/LnRyaW0oKX19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm5vdGlmaWNhdGlvbj8ubm90aWZpY2F0aW9uX3R5cGUgPT09ICdMRVRURVInXCI+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPlBvc3Q8L3N0cm9uZz48YnI+XG4gICAgICAgICAgICAgICAgICB7e25vdGlmaWNhdGlvbj8uY29udGFjdF9kZXRhaWxzPy5hZGRyZXNzX2xpbmU/LnRyaW0oKX19IHt7bm90aWZpY2F0aW9uPy5jb250YWN0X2RldGFpbHM/LmNpdHk/LnRyaW0oKX19IHt7bm90aWZpY2F0aW9uPy5jb250YWN0X2RldGFpbHM/LmNvdW50eT8udHJpbSgpfX0ge3tub3RpZmljYXRpb24/LmNvbnRhY3RfZGV0YWlscz8uY291bnRyeT8udHJpbSgpfX0ge3tub3RpZmljYXRpb24/LmNvbnRhY3RfZGV0YWlscz8ucG9zdGFsX2NvZGU/LnRyaW0oKX19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiICpuZ0lmPVwiaSA9PT0gMFwiPjxhIGhyZWY9XCJKYXZhc2NyaXB0OnZvaWQoMCk7XCIgKGNsaWNrKT1cInB1dFJlc2VuZChub3RpZmljYXRpb24pXCI+UmVzZW5kPC9hPiZuYnNwOyZuYnNwO3wmbmJzcDsmbmJzcDs8YSBocmVmPVwiSmF2YXNjcmlwdDp2b2lkKDApO1wiIChjbGljayk9XCJnb3RvRWRpdEFkZHJlc3NEZXRhaWxzKG5vdGlmaWNhdGlvbilcIj5FZGl0IGRldGFpbHM8L2E+Jm5ic3A7Jm5ic3A7fCZuYnNwOyZuYnNwOzxhICpuZ0lmPVwiIW5vdGlmaWNhdGlvblNlbnRWaWV3IHx8IGkgIT0gbm90aWZpY2F0aW9uU2VudFZpZXdJbmRleFwiIGhyZWY9XCJKYXZhc2NyaXB0OnZvaWQoMCk7XCIgKGNsaWNrKT1cInNob3dOb3RpZmljYXRpb25TZW50VmlldyhpKVwiPlZpZXc8L2E+PGEgKm5nSWY9XCJpID09PSBub3RpZmljYXRpb25TZW50Vmlld0luZGV4ICYmIG5vdGlmaWNhdGlvblNlbnRWaWV3XCIgaHJlZj1cIkphdmFzY3JpcHQ6dm9pZCgwKTtcIiAoY2xpY2spPVwiaGlkZU5vdGlmaWNhdGlvblNlbnRWaWV3KClcIj5IaWRlPC9hPjwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiICpuZ0lmPVwiaSA+IDBcIj48YSAqbmdJZj1cIiFub3RpZmljYXRpb25TZW50VmlldyB8fCBpICE9IG5vdGlmaWNhdGlvblNlbnRWaWV3SW5kZXhcIiBocmVmPVwiSmF2YXNjcmlwdDp2b2lkKDApO1wiIChjbGljayk9XCJzaG93Tm90aWZpY2F0aW9uU2VudFZpZXcoaSlcIj5WaWV3PC9hPjxhICpuZ0lmPVwiaSA9PT0gbm90aWZpY2F0aW9uU2VudFZpZXdJbmRleCAmJiBub3RpZmljYXRpb25TZW50Vmlld1wiIGhyZWY9XCJKYXZhc2NyaXB0OnZvaWQoMCk7XCIgKGNsaWNrKT1cImhpZGVOb3RpZmljYXRpb25TZW50VmlldygpXCI+SGlkZTwvYT48L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDx0ciAqbmdJZj1cImkgPT09IG5vdGlmaWNhdGlvblNlbnRWaWV3SW5kZXggJiYgbm90aWZpY2F0aW9uU2VudFZpZXdcIj5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIiBjb2xzcGFuPVwiNFwiPlxuICAgICAgICAgICAgICAgIDxhcHAtbm90aWZpY2F0aW9uLXByZXZpZXdcbiAgICAgICAgICAgICAgICAgIFtwcmV2aWV3Sm91cm5leV09XCInTm90aWZpY2F0aW9ucyBzZW50J1wiIFtub3RpZmljYXRpb25TZW50XT1cIm5vdGlmaWNhdGlvbj8uc2VudF9ub3RpZmljYXRpb25cIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1ub3RpZmljYXRpb24tcHJldmlldz5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgICAgPHRib2R5IGNsYXNzPVwiZ292dWstdGFibGVfX2JvZHlcIiAqbmdJZj1cIiFub3RpZmljYXRpb25MaXN0XCI+XG4gICAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCIgY29sc3Bhbj1cIjRcIj5ObyByZWNvcmQgZm91bmQgLi4uIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9kaXY+XG4gIDwhLS0gU3RhdHVzIGhpc3RvcnkgLS0+XG4gIDxkaXY+XG4gICAgPGJyIC8+XG4gICAgPGRpdiBjbGFzcz1cInJlZnVuZC1zdGF0dXMtaGlzdG9yeS1oZWFkZXIgZ292dWstZmxleFwiPlxuICAgICAgPGgyIGNsYXNzPVwiZ292dWstaGVhZGluZy1tXCI+UmVmdW5kIHN0YXR1cyBoaXN0b3J5PC9oMj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImNoZWNrNEFsbG93ZWRSb2xlczJEaXNwbGF5RWRpdFJlZnVuZEJ0biAmJiBpc0N1cnJlbnRSZWZ1bmRWaXNpYmxlRm9yUmVzZXQoKVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVmdW5kU3RhdHVzUmVzZXRCdG5EaXNhYmxlZFwiXG4gICAgICAgICAgY2xhc3M9XCJnb3Z1ay1idXR0b24gZ292dWstYnV0dG9uLS1zZWNvbmRhcnlcIlxuICAgICAgICAgIChjbGljayk9XCJkaXNwbGF5UmVzZXRSZWZ1bmRDb25maXJtYXRpb24oKVwiPlxuICAgICAgICAgIFJlc2V0IFJlZnVuZFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJyZWZ1bmRTdGF0dXNIaXN0b3JpZXNcIj5cbiAgICA8dGFibGUgY2xhc3M9XCJnb3Z1ay10YWJsZVwiPlxuICAgICAgPHRoZWFkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRcIj5cbiAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgY29sLTI0IHdoaXRlc3BhY2UtaW5oZXJpdFwiIHNjb3BlPVwiY29sXCI+U3RhdHVzPC90ZD5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9faGVhZGVyIGNvbC0yNyB3aGl0ZXNwYWNlLWluaGVyaXRcIiBzY29wZT1cImNvbFwiPkRhdGUgYW5kIHRpbWU8L3RkPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19oZWFkZXIgd2hpdGVzcGFjZS1pbmhlcml0XCIgc2NvcGU9XCJjb2xcIj5Vc2VyczwvdGQ+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2hlYWRlciB3aGl0ZXNwYWNlLWluaGVyaXRcIiBzY29wZT1cImNvbFwiPk5vdGVzPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHkgY2xhc3M9XCJnb3Z1ay10YWJsZV9fYm9keVwiICpuZ0Zvcj1cImxldCByZWZ1bmRTdGF0dXNIaXN0b3J5IG9mIHJlZnVuZFN0YXR1c0hpc3RvcmllcztcIj5cbiAgICAgICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7cmVmdW5kU3RhdHVzSGlzdG9yeS5zdGF0dXN9fTwvdGQ+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgd2hpdGVzcGFjZS1pbmhlcml0XCI+XG4gICAgICAgICAgICAge3tyZWZ1bmRTdGF0dXNIaXN0b3J5LmRhdGVfY3JlYXRlZCB8IGRhdGU6J2RkIE1NTU0geXl5eSBISDptbTpzcyd9fVxuICAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7cmVmdW5kU3RhdHVzSGlzdG9yeS5jcmVhdGVkX2J5fX08L3RkPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPnt7cmVmdW5kU3RhdHVzSGlzdG9yeS5ub3Rlc319PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbiAgPC9kaXY+XG5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdOYW1lPT09J3JlZnVuZHZpZXcnICYmICFpc0Zyb21QYXlCdWJibGUgJiYgIWlzUmVzZW5kT3BlcmF0aW9uU3VjY2VzcyAmJiAhaXNFZGl0RGV0YWlsc0NsaWNrZWRcIj5cbiAgICA8ZGl2ICAqbmdJZj1cInJlZnVuZEJ1dHRvblN0YXRlPT09J1VwZGF0ZSByZXF1aXJlZCdcIiA+XG4gICAgICA8IS0tIDxkaXYgKm5nSWY9XCJyZWZ1bmRCdXR0b25TdGF0ZT09PSdzZW50IGJhY2snXCI+IC0tPlxuICAgICAgPGJyIC8+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeSBidG5tYXJnaW5cIlxuICAgICAgICAoY2xpY2spPVwiZ290b1Jldmlld0FuZFJlU3VibWl0UGFnZSgpXCI+Q2hhbmdlIHJlZnVuZCBkZXRhaWxzPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImlzUHJvY2Vzc1JlZnVuZCAmJiAhaXNMYXN0VXBkYXRlZEJ5Q3VycmVudFVzZXIgJiYgcmVmdW5kQnV0dG9uU3RhdGU9PT0nU2VudCBmb3IgYXBwcm92YWwnXCIgPlxuICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiaXNQcm9jZXNzUmVmdW5kICYmICFpc0xhc3RVcGRhdGVkQnlDdXJyZW50VXNlciAmJiByZWZ1bmRCdXR0b25TdGF0ZT09PSdzZW50IGZvciBhcHByb3ZhbCdcIj4gLS0+XG4gICAgICA8YnIgLz5cbiAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCJcbiAgICAgICAgKGNsaWNrKT1cImdvVG9SZWZ1bmRQcm9jZXNzQ29tcG9uZW50KHJlZnVuZGxpc3QucmVmdW5kX3JlZmVyZW5jZSxyZWZ1bmRsaXN0KVwiPlByb2Nlc3MgcmVmdW5kPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG5cbjwvbmctY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwidmlld05hbWU9PT0ncmV2aWV3YW5kc3VibWl0dmlldycgJiYgIWlzUmVzZW5kT3BlcmF0aW9uU3VjY2VzcyAmJiAhaXNFZGl0RGV0YWlsc0NsaWNrZWRcIj5cbiAgPCEtLSA8ZGl2IGNsYXNzPVwiZ292dWstYnJlYWRjcnVtYnNcIj5cbiAgICA8b2wgY2xhc3M9XCJnb3Z1ay1icmVhZGNydW1ic19fbGlzdFwiPlxuICAgICAgPGxpIGNsYXNzPVwiZ292dWstYnJlYWRjcnVtYnNfX2xpc3QtaXRlbVwiPlxuICAgICAgICA8YSAoY2xpY2spPVwiZ290b1Jldmlld0RldGFpbHNQYWdlKCRldmVudClcIiBjbGFzcz1cImdvdnVrLWJhY2stbGluayBnb3Z1ay1sYWJlbFwiPkJhY2s8L2E+XG4gICAgICA8L2xpPlxuICAgIDwvb2w+XG4gIDwvZGl2PiAtLT5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLXdhcm5pbmctdGV4dFwiPlxuICAgIDxoMSBjbGFzcz1cImhlYWRpbmctbGFyZ2VcIj5DaGVjayB5b3VyIGFuc3dlcnM8L2gxPlxuICA8L2Rpdj5cbiAgPHRhYmxlIGNsYXNzPVwiZ292dWstdGFibGVcIj5cbiAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGRcIj5QYXltZW50IHJlZmVyZW5jZTwvdGQ+XG4gICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7IHJlZnVuZGxpc3Q/LnBheW1lbnRfcmVmZXJlbmNlfX0gPC90ZD5cbiAgICA8L3RyPlxuICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLSEtZm9udC13ZWlnaHQtYm9sZFwiPlJlYXNvbiBmb3IgcmV0dXJuPC90ZD5cbiAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3tyZWZ1bmRyZWFzb259fTwvdGQ+XG4gICAgPC90cj5cbiAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGRcIj5SZWZ1bmQgcmVmZXJlbmNlPC90ZD5cbiAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3sgcmVmdW5kbGlzdD8ucmVmdW5kX3JlZmVyZW5jZX19IDwvdGQ+XG4gICAgPC90cj5cbiAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGRcIj5SZWFzb24gZm9yIHJlZnVuZDwvdGQ+XG4gICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPnt7IHJlZnVuZGxpc3Q/LnJlYXNvbj8udHJpbSgpfX1cbiAgICAgICAgPGEgKGNsaWNrKT1cImdvdG9SZWZ1bmRSZWFzb25QYWdlKHJlZnVuZGxpc3Q/LnJlYXNvbilcIiAqbmdJZj1cInJlZnVuZGxpc3Q/LnJlYXNvbiAhPT0gJ1JldHJvc3BlY3RpdmUgcmVtaXNzaW9uJyAmJiByZWZ1bmRsaXN0Py5yZWFzb24gIT09ICdPdmVycGF5bWVudCdcIlxuICAgICAgICAgIGNsYXNzPVwiZ292dWstbGluayByaWdodFwiPkNoYW5nZTwvYT5cbiAgICAgIDwvdGQ+XG5cbiAgICAgIDwhLS0gPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj57eyByZWZ1bmRsaXN0Py5yZWFzb24gfX08L3RkPlxuICAgICAgPGEgKGNsaWNrKT1cImdvdG9SZWZ1bmRSZWFzb25QYWdlKClcIiBjbGFzcz1cImdvdnVrLWxpbmsgcmlnaHRcIj5DaGFuZ2U8L2E+IC0tPlxuICAgIDwvdHI+XG4gICAgPHRyIGNsYXNzPVwiZ292dWstdGFibGVfX3Jvd1wiPlxuICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGwgZ292dWstIS1mb250LXdlaWdodC1ib2xkXCI+UmVmdW5kIGFtb3VudDwvdGQ+XG4gICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbFwiPsKje3sgY2hhbmdlZEFtb3VudCA/IGNoYW5nZWRBbW91bnQgOiByZWZ1bmRsaXN0Py5hbW91bnQgfCBudW1iZXI6Jy4yJyB9fVxuICAgICAgICA8YSAoY2xpY2spPVwiZ290b0Ftb3VudFBhZ2UoKVwiICpuZ0lmPVwicmVmdW5kbGlzdD8ucmVhc29uICE9PSAnT3ZlcnBheW1lbnQnXCJcbiAgICAgICAgICBjbGFzcz1cImdvdnVrLWxpbmsgcmlnaHRcIj5DaGFuZ2U8L2E+XG4gICAgICA8L3RkPlxuXG4gICAgPC90cj5cbiAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGRcIj5TZW5kIHRvPC90ZD5cbiAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsXCI+e3tvcmRlclBhcnR5fX0gPC90ZD5cbiAgICA8L3RyPlxuICAgIDx0ciBjbGFzcz1cImdvdnVrLXRhYmxlX19yb3dcIj5cbiAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIGdvdnVrLSEtZm9udC13ZWlnaHQtYm9sZFwiPlNlbmQgdmlhPC90ZD5cbiAgICAgIDx0ZCBjbGFzcz1cImdvdnVrLXRhYmxlX19jZWxsIHdoaXRlc3BhY2UtaW5oZXJpdFwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicmVmdW5kbGlzdD8uY29udGFjdF9kZXRhaWxzPy5ub3RpZmljYXRpb25fdHlwZSA9PT0gJ0VNQUlMJ1wiIGNsYXNzPVwiY29udGFjdERldGFpbHMtd2lkdGggZm9udC1zaXplLTE5cHhcIj5cbiAgICAgICAgICA8c3Ryb25nPkVtYWlsPC9zdHJvbmc+XG4gICAgICAgICAgPGJyLz5cbiAgICAgICAgICB7e3JlZnVuZGxpc3Q/LmNvbnRhY3RfZGV0YWlscz8uZW1haWw/LnRyaW0oKX19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicmVmdW5kbGlzdD8uY29udGFjdF9kZXRhaWxzPy5ub3RpZmljYXRpb25fdHlwZSA9PT0gJ0xFVFRFUidcIiBjbGFzcz1cImNvbnRhY3REZXRhaWxzLXdpZHRoIGZvbnQtc2l6ZS0xOXB4XCI+XG4gICAgICAgICAgPHN0cm9uZz5Qb3N0PC9zdHJvbmc+XG4gICAgICAgICAgPGJyLz5cbiAgICAgICAgICB7e3JlZnVuZGxpc3Q/LmNvbnRhY3RfZGV0YWlscz8uYWRkcmVzc19saW5lPy50cmltKCl9fSB7e3JlZnVuZGxpc3Q/LmNvbnRhY3RfZGV0YWlscz8uY2l0eT8udHJpbSgpfX0ge3tyZWZ1bmRsaXN0Py5jb250YWN0X2RldGFpbHM/LmNvdW50eT8udHJpbSgpfX0ge3tyZWZ1bmRsaXN0Py5jb250YWN0X2RldGFpbHM/LmNvdW50cnk/LnRyaW0oKX19IHt7cmVmdW5kbGlzdD8uY29udGFjdF9kZXRhaWxzPy5wb3N0YWxfY29kZT8udHJpbSgpfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxhIGNsYXNzPVwiZ292dWstbGlua1wiIGhyZWY9XCJKYXZhc2NyaXB0OnZvaWQoMClcIiAqbmdJZj1cInJlZnVuZGxpc3Q/LmNvbnRhY3RfZGV0YWlscyAhPW51bGxcIiAgY2xhc3M9XCJnb3Z1ay1saW5rIHJpZ2h0XCIgKGNsaWNrKT1cImdvdG9FZGl0RGV0YWlsc1BhZ2UocmVmdW5kbGlzdD8uY29udGFjdF9kZXRhaWxzLCAncmV2aWV3YW5kc3VibWl0RWRpdHZpZXcnKVwiPlxuICAgICAgICAgIENoYW5nZVxuICAgICAgICA8L2E+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG5cbiAgICA8dHIgY2xhc3M9XCJnb3Z1ay10YWJsZV9fcm93XCI+XG4gICAgICA8dGQgY2xhc3M9XCJnb3Z1ay10YWJsZV9fY2VsbCBnb3Z1ay0hLWZvbnQtd2VpZ2h0LWJvbGRcIj5Ob3RpZmljYXRpb248L3RkPlxuICAgICAgPHRkIGNsYXNzPVwiZ292dWstdGFibGVfX2NlbGxcIj57e3RlbXBsYXRlSW5zdHJ1Y3Rpb25UeXBlfX1cbiAgICAgICAgICA8YSAqbmdJZj1cIiFub3RpZmljYXRpb25QcmV2aWV3XCIgaHJlZj1cIkphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwiZ292dWstbGluayByaWdodFwiIChjbGljayk9XCJzaG93Tm90aWZpY2F0aW9uUHJldmlldygpXCI+XG4gICAgICAgICAgICBQcmV2aWV3XG4gICAgICAgICAgPC9hPlxuICAgICAgICAgIDxhICpuZ0lmPVwibm90aWZpY2F0aW9uUHJldmlld1wiIGhyZWY9XCJKYXZhc2NyaXB0OnZvaWQoMClcIiBjbGFzcz1cImdvdnVrLWxpbmsgcmlnaHRcIiAoY2xpY2spPVwiaGlkZU5vdGlmaWNhdGlvblByZXZpZXcoKVwiPlxuICAgICAgICAgICAgSGlkZSBQcmV2aWV3XG4gICAgICAgICAgPC9hPlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICA8L3RhYmxlPlxuICA8YXBwLW5vdGlmaWNhdGlvbi1wcmV2aWV3ICpuZ0lmPVwibm90aWZpY2F0aW9uUHJldmlld1wiXG4gIFtwYXltZW50UmVmZXJlbmNlXT1cInJlZnVuZGxpc3Q/LnBheW1lbnRfcmVmZXJlbmNlXCJcbiAgW3BheW1lbnRdPVwicGF5bWVudE9ialwiXG4gIFtjb250YWN0RGV0YWlsc109XCJyZWZ1bmRsaXN0Py5jb250YWN0X2RldGFpbHNcIlxuICBbcmVmdW5kUmVhc29uXT1cInJlZnVuZGxpc3Q/LnJlYXNvbl9jb2RlXCJcbiAgW3JlZnVuZEFtb3VudF09XCJjaGFuZ2VkQW1vdW50ID8gY2hhbmdlZEFtb3VudCA6IHJlZnVuZGxpc3Q/LmFtb3VudFwiXG4gIFtyZWZ1bmRSZWZlcmVuY2VdPVwicmVmdW5kbGlzdD8ucmVmdW5kX3JlZmVyZW5jZVwiPjwvYXBwLW5vdGlmaWNhdGlvbi1wcmV2aWV3PlxuXG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1idXR0b24tZ3JvdXBcIj5cbiAgICA8YnV0dG9uIChjbGljayk9XCJnb3RvUmV2aWV3RGV0YWlsc1BhZ2UoJGV2ZW50KVwiIGNsYXNzPVwiZ292dWstYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCI+IFByZXZpb3VzPC9idXR0b24+XG4gICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiaXNSZWZ1bmRCdG5EaXNhYmxlZFwiIChjbGljayk9XCJnb3RvUmV2aWV3UmVmdW5kQ29uZmlybWF0aW9uUGFnZSgpXCIgY2xhc3M9XCJnb3Z1ay1idXR0b24gYnV0dG9uXCJcbiAgICAgIGRhdGEtbW9kdWxlPVwiZ292dWstYnV0dG9uXCI+XG4gICAgICBTdWJtaXQgcmVmdW5kXG4gICAgPC9idXR0b24+XG48L2Rpdj5cbjxwPjxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwibG9hZFJlZnVuZExpc3RQYWdlKClcIiBjbGFzcz1cImdvdnVrLWxpbmtcIiBkYXRhLW1vZHVsZT1cImdvdnVrLWJ1dHRvblwiPkNhbmNlbDwvYT48L3A+XG4gIDwhLS0gPGRpdiBjbGFzcz1cImdvdnVrLWJ1dHRvbi1ncm91cFwiPlxuICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImlzUmVmdW5kQnRuRGlzYWJsZWRcIiAoY2xpY2spPVwiZ290b1Jldmlld1JlZnVuZENvbmZpcm1hdGlvblBhZ2UoKVwiIGNsYXNzPVwiZ292dWstYnV0dG9uIGJ1dHRvblwiXG4gICAgICBkYXRhLW1vZHVsZT1cImdvdnVrLWJ1dHRvblwiPlxuICAgICAgU3VibWl0IHJlZnVuZFxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj4gLS0+XG4gIDwhLS0gPHA+XG4gICAgPGEgKGNsaWNrKT1cImxvYWRSZWZ1bmRMaXN0UGFnZSgpXCIgaHJlZj1cIlwiIGNsYXNzPVwiY2FuY2VsYnRuXCI+Q2FuY2VsPC9hPlxuICA8L3A+IC0tPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3TmFtZSA9PT0gJ3Jldmlld2FuZHN1Ym1pdEVkaXR2aWV3JyAmJiBpc0VkaXREZXRhaWxzQ2xpY2tlZFwiPlxuICA8aW5wdXQgI215SW5wdXQgdHlwZT0naGlkZGVuJyBpZD0naUZyYW1lRHJpdmVuSW1hZ2VWYWx1ZScgdmFsdWU9J0VESVRERVRBSUxTUEFHRSc+XG4gICAgPGgxIGNsYXNzPVwiZ292dWstaGVhZGluZy1sXCI+RWRpdCBjb250YWN0IGRldGFpbHM8L2gxPlxuICAgIDxoMiBjbGFzcz1cImdvdnVrLWhlYWRpbmctbSBnb3Z1ay1mb250MTlweFwiPkNhc2UgcmVmZXJlbmNlOiB7e2NjZENhc2VOdW1iZXIgfCBjY2RIeXBoZW5zIH19PC9oMj5cbiAgICA8c3BhbiBjbGFzcz1cImdvdnVrLWhpbnQgZm9udC1zaXplLTE5cHhcIj5cbiAgICAgIFJlZnVuZCByZWZlcmVuY2U6IHt7IHJlZnVuZGxpc3Q/LnJlZnVuZF9yZWZlcmVuY2V9fVxuICAgIDwvc3Bhbj5cbiAgICA8Y2NwYXktY29udGFjdC1kZXRhaWxzXG4gICAgW2lzRWRpdE9wZXJhdGlvbkluUmVmdW5kTGlzdF0gPSBpc0VkaXREZXRhaWxzQ2xpY2tlZFxuICAgIFthZGRyZXNzT2JqXSA9IG5vdGlmaWNhdGlvblxuICAgIChhc3NpZ25Db250YWN0RGV0YWlsc0luRmVmdW5kc0xpc3QpPVwiZ2V0Q29udGFjdERldGFpbHNGb3JSZWZ1bmRMaXN0KCRldmVudClcIlxuICAgIChyZWRpcmVjdFRvSXNzdWVSZWZ1bmQpPVwiZ290b1JlZnVuZFJldmlld0FuZFN1Ym1pdFZpZXdQYWdlQ2FuY2VsQnRuQ2xpY2tlZCgkZXZlbnQpXCIgPjwvY2NwYXktY29udGFjdC1kZXRhaWxzPlxuICA8cD5cbiAgICAgIDxhIChjbGljayk9XCJsb2FkUmVmdW5kTGlzdFBhZ2UoKVwiIGNsYXNzPVwiZ292dWstbGlua1wiIGRhdGEtbW9kdWxlPVwiZ292dWstYnV0dG9uXCI+XG4gICAgICAgICAgQ2FuY2VsXG4gICAgICA8L2E+XG4gIDwvcD5cblxuPC9uZy1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3TmFtZSA9PT0gJ2lzc3VlcmVmdW5kcGFnZTEnICYmICFpc1Jlc2VuZE9wZXJhdGlvblN1Y2Nlc3MgJiYgIWlzRWRpdERldGFpbHNDbGlja2VkXCI+XG4gIDxjY3BheS1hZGQtcmVtaXNzaW9uIFtpc0Zyb21SZWZ1bmRMaXN0UGFnZV09XCJ0cnVlXCIgW3ZpZXdDb21wU3RhdHVzXT1cInZpZXdOYW1lXCIgW2lzUmVmdW5kUmVtaXNzaW9uXT1cInRydWVcIiBbaXNGcm9tUmVmdW5kU3RhdHVzUGFnZV0gPSBcInRydWVcIlxuICAgW2NoYW5nZVJlZnVuZFJlYXNvbl09IFwiY2hhbmdlUmVmdW5kUmVhc29uXCIgW2NjZENhc2VOdW1iZXJdPVwiY2NkQ2FzZU51bWJlclwiIChyZWZ1bmRMaXN0UmVhc29uKT1cImdldFJlZnVuZExpc3RSZWFzb24oJGV2ZW50KVwiIFtyZWZ1bmRQYXltZW50UmVmZXJlbmNlXT0gXCJyZWZ1bmRsaXN0Py5wYXltZW50X3JlZmVyZW5jZVwiID48L2NjcGF5LWFkZC1yZW1pc3Npb24+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdOYW1lID09PSAncHJvY2Vzc3JldHJvcmVtaXNzb25wYWdlJyAmJiAhaXNSZXNlbmRPcGVyYXRpb25TdWNjZXNzICYmICFpc0VkaXREZXRhaWxzQ2xpY2tlZFwiPlxuICA8Y2NwYXktYWRkLXJlbWlzc2lvbiBbaXNGcm9tUmVmdW5kTGlzdFBhZ2VdPVwidHJ1ZVwiIFt2aWV3Q29tcFN0YXR1c109XCJ2aWV3TmFtZVwiIFtpc1JlZnVuZFJlbWlzc2lvbl09XCJ0cnVlXCJcbiAgICBbY2NkQ2FzZU51bWJlcl09XCJjY2RDYXNlTnVtYmVyXCIgW3JlZnVuZFBheW1lbnRSZWZlcmVuY2VdPSBcInJlZnVuZGxpc3Q/LnBheW1lbnRfcmVmZXJlbmNlXCIgKHJlZnVuZExpc3RBbW91bnQpPVwiZ2V0UmVmdW5kQW1vdW50KCRldmVudClcIj48L2NjcGF5LWFkZC1yZW1pc3Npb24+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdOYW1lID09PSAnaXNzdWVyZWZ1bmQnICYmICFpc1Jlc2VuZE9wZXJhdGlvblN1Y2Nlc3MgJiYgIWlzRWRpdERldGFpbHNDbGlja2VkXCI+XG4gIDxjY3BheS1hZGQtcmVtaXNzaW9uIFtpc0Zyb21SZWZ1bmRMaXN0UGFnZV09XCJ0cnVlXCIgW3ZpZXdDb21wU3RhdHVzXT1cInZpZXdOYW1lXCIgW2lzUmVmdW5kUmVtaXNzaW9uXT1cInRydWVcIiBbaXNGcm9tU2VydmljZVJlcXVlc3RQYWdlXSA9IFwidHJ1ZVwiXG4gICAgW2NjZENhc2VOdW1iZXJdPVwiY2NkQ2FzZU51bWJlclwiIFtyZWZ1bmRQYXltZW50UmVmZXJlbmNlXT0gXCJyZWZ1bmRsaXN0Py5wYXltZW50X3JlZmVyZW5jZVwiIFtpc0Zyb21SZWZ1bmRTdGF0dXNQYWdlXT1cInRydWVcIiAgKHJlZnVuZExpc3RBbW91bnQpPVwiZ2V0UmVmdW5kQW1vdW50KCRldmVudClcIiAgKHJlZnVuZEZlZXMpPVwiZ2V0UmVmdW5kRmVlcygkZXZlbnQpXCI+PC9jY3BheS1hZGQtcmVtaXNzaW9uPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3TmFtZSA9PT0gJ3Jldmlld3JlZnVuZGNvbmZpcm1hdGlvbnBhZ2UnICYmICFpc1Jlc2VuZE9wZXJhdGlvblN1Y2Nlc3MgJiYgIWlzRWRpdERldGFpbHNDbGlja2VkXCI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvdyBwYWdlc2l6ZVwiPlxuICAgIDxkaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstcGFuZWwgZ292dWstcGFuZWwtLWNvbmZpcm1hdGlvblwiPlxuICAgICAgICA8aDEgY2xhc3M9XCJnb3Z1ay1wYW5lbF9yZWZ1bmRfdGl0bGVcIj5cbiAgICAgICAgICBSZWZ1bmQgc3VibWl0dGVkXG4gICAgICAgIDwvaDE+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXBhbmVsX19ib2R5XCI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJnb3Z1ay1ib2R5IHdoaXRlXCI+PHN0cm9uZyBjbGFzcz1cIndoaXRlXCI+UmVmdW5kIHJlZmVyZW5jZTp7e3JlZnVuZFJlZmVyZW5jZX19IDwvc3Ryb25nPjwvcD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8aDIgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLWxcIj5XaGF0IGhhcHBlbnMgbmV4dDwvaDI+XG4gICAgICA8cCBjbGFzcz1cImdvdnVrLWJvZHlcIj5cbiAgICAgICAgQSByZWZ1bmQgcmVxdWVzdCBmb3Ige3tyZWZ1bmRBbW91bnR8IGN1cnJlbmN5OidHQlAnOidzeW1ib2wtbmFycm93JzonMS4yLTInfX0gaGFzIGJlZW4gY3JlYXRlZCBhbmQgd2lsbCBiZSBwYXNzZWQgdG8gYSB0ZWFtIGxlYWRlciB0byBhcHByb3ZlLlxuICAgICAgPC9wPlxuXG4gICAgICA8cCBjbGFzcz1cImdvdnVrLWJvZHlcIj5cbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJsb2FkUmVmdW5kTGlzdFBhZ2UoKVwiIGNsYXNzPVwiZ292dWstbGlua1wiPlJldHVybiB0byBjYXNlPC9hPlxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiaXNSZXNlbmRPcGVyYXRpb25TdWNjZXNzXCI+XG4gIDxkaXYgY2xhc3M9XCJnb3Z1ay1ncmlkLXJvdyBwYWdlc2l6ZVwiPlxuICAgIDxkaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstcGFuZWwgZ292dWstcGFuZWwtLWNvbmZpcm1hdGlvblwiPlxuICAgICAgICA8aDEgY2xhc3M9XCJnb3Z1ay1wYW5lbF9yZWZ1bmRfdGl0bGVcIj5cbiAgICAgICAgICBOb3RpZmljYXRpb24gc2VudFxuICAgICAgICA8L2gxPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1wYW5lbF9fYm9keVwiPlxuICAgICAgICAgIDxwIGNsYXNzPVwiZ292dWstYm9keSB3aGl0ZVwiPjxzdHJvbmcgY2xhc3M9XCJ3aGl0ZVwiPlJlZnVuZCByZWZlcmVuY2U6IHt7IHJlZnVuZGxpc3Q/LnJlZnVuZF9yZWZlcmVuY2V9fSA8L3N0cm9uZz48L3A+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICA8L2Rpdj5cbiAgICAgIDxwIGNsYXNzPVwiZ292dWstYm9keVwiPlxuICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cImxvYWRSZWZ1bmRMaXN0UGFnZSgpXCIgY2xhc3M9XCJnb3Z1ay1saW5rXCI+UmV0dXJuIHRvIGNhc2U8L2E+XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ0lmPVwidmlld05hbWUgPT09ICdyZWZ1bmRFZGl0VmlldycgJiYgaXNFZGl0RGV0YWlsc0NsaWNrZWRcIj5cbiAgPGlucHV0ICNteUlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdFRElUREVUQUlMU1BBR0UnPlxuICAgIDxoMSBjbGFzcz1cImdvdnVrLWhlYWRpbmctbFwiPkVkaXQgY29udGFjdCBkZXRhaWxzPC9oMT5cbiAgICA8aDIgY2xhc3M9XCJnb3Z1ay1oZWFkaW5nLW0gZ292dWstZm9udDE5cHhcIj5DYXNlIHJlZmVyZW5jZToge3tjY2RDYXNlTnVtYmVyIHwgY2NkSHlwaGVucyB9fTwvaDI+XG4gICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay1oaW50IGZvbnQtc2l6ZS0xOXB4XCI+XG4gICAgICBSZWZ1bmQgcmVmZXJlbmNlOiB7eyByZWZ1bmRsaXN0Py5yZWZ1bmRfcmVmZXJlbmNlfX1cbiAgICA8L3NwYW4+XG4gICAgPGNjcGF5LWNvbnRhY3QtZGV0YWlsc1xuICAgIFtpc0VkaXRPcGVyYXRpb25JblJlZnVuZExpc3RdID0gaXNFZGl0RGV0YWlsc0NsaWNrZWRcbiAgICBbYWRkcmVzc09ial0gPSBub3RpZmljYXRpb25cbiAgICAoYXNzaWduQ29udGFjdERldGFpbHNJbkZlZnVuZHNMaXN0KT1cImdldENvbnRhY3REZXRhaWxzKCRldmVudClcIlxuICAgIChyZWRpcmVjdFRvSXNzdWVSZWZ1bmQpPVwiZ290b1JlZnVuZFZpZXdQYWdlQ2FuY2VsQnRuQ2xpY2tlZCgkZXZlbnQpXCIgPjwvY2NwYXktY29udGFjdC1kZXRhaWxzPlxuICA8cD5cbiAgICAgIDxhIChjbGljayk9XCJsb2FkUmVmdW5kTGlzdFBhZ2UoKVwiIGNsYXNzPVwiZ292dWstbGlua1wiIGRhdGEtbW9kdWxlPVwiZ292dWstYnV0dG9uXCI+XG4gICAgICAgICAgQ2FuY2VsXG4gICAgICA8L2E+XG4gIDwvcD5cblxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ0lmPVwidmlld05hbWUgPT09ICdyZXZpZXdlZGl0ZGV0YWlsc2NvbmZpcm1hdGlvbnBhZ2UnICYmICFpc1Jlc2VuZE9wZXJhdGlvblN1Y2Nlc3MgJiYgaXNFZGl0RGV0YWlsc0NsaWNrZWRcIj5cbiAgPGlucHV0ICNteUlucHV0IHR5cGU9J2hpZGRlbicgaWQ9J2lGcmFtZURyaXZlbkltYWdlVmFsdWUnIHZhbHVlPSdFRElUREVUQUlMU0NIRUNLQU5EQU5TV0VSUEFHRSc+XG4gICAgPGgxIGNsYXNzPVwiZ292dWstaGVhZGluZy1sXCI+Q2hlY2sgeW91ciBhbnN3ZXJzPC9oMT5cbiAgICA8ZGwgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX3JvdyBmb250LXNpemUtMTlweFwiPlxuICAgICAgICA8ZHQgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX2tleVwiPlxuICAgICAgICAgIFJlZnVuZCByZWZlcmVuY2VcbiAgICAgICAgPC9kdD5cbiAgICAgICAgPGRkIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X192YWx1ZVwiPlxuICAgICAgICAgIHt7IHJlZnVuZGxpc3Q/LnJlZnVuZF9yZWZlcmVuY2V9fVxuICAgICAgICA8L2RkPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fYWN0aW9uc1wiPjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fcm93IGZvbnQtc2l6ZS0xOXB4XCI+XG4gICAgICAgIDxkdCBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fa2V5XCI+XG4gICAgICAgICAgU2VuZCB2aWFcbiAgICAgICAgICA8YnIvPlxuICAgICAgICA8L2R0PlxuICAgICAgICA8ZGQgY2xhc3M9XCJnb3Z1ay1zdW1tYXJ5LWxpc3RfX3ZhbHVlXCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImFkZHJlc3NEZXRhaWxzPy5ub3RpZmljYXRpb25fdHlwZSA9PT0gJ0VNQUlMJ1wiIGNsYXNzPVwiY29udGFjdERldGFpbHMtd2lkdGggZm9udC1zaXplLTE5cHhcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+RW1haWw8L3N0cm9uZz5cbiAgICAgICAgICAgIDxici8+XG4gICAgICAgICAgICB7e2FkZHJlc3NEZXRhaWxzPy5lbWFpbD8udHJpbSgpfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWRkcmVzc0RldGFpbHM/Lm5vdGlmaWNhdGlvbl90eXBlID09PSAnTEVUVEVSJ1wiIGNsYXNzPVwiY29udGFjdERldGFpbHMtd2lkdGggZm9udC1zaXplLTE5cHhcIj5cbiAgICAgICAgICAgIDxzdHJvbmc+UG9zdDwvc3Ryb25nPlxuICAgICAgICAgICAgPGJyLz5cbiAgICAgICAgICAgIHt7YWRkcmVzc0RldGFpbHM/LmFkZHJlc3NfbGluZT8udHJpbSgpfX0ge3thZGRyZXNzRGV0YWlscz8uY2l0eT8udHJpbSgpfX0ge3thZGRyZXNzRGV0YWlscz8uY291bnR5Py50cmltKCl9fSB7e2FkZHJlc3NEZXRhaWxzPy5jb3VudHJ5Py50cmltKCl9fSB7e2FkZHJlc3NEZXRhaWxzPy5wb3N0YWxfY29kZT8udHJpbSgpfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kZD5cbiAgICAgICAgPGRkIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19hY3Rpb25zXCI+XG4gICAgICAgICAgPGEgY2xhc3M9XCJnb3Z1ay1saW5rXCIgaHJlZj1cIkphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJnb3RvRWRpdERldGFpbHNQYWdlKGFkZHJlc3NEZXRhaWxzLCAncmVmdW5kRWRpdFZpZXcnKVwiPlxuICAgICAgICAgICAgQ2hhbmdlXG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2RkPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19yb3cgZm9udC1zaXplLTE5cHhcIj5cbiAgICAgICAgPGR0IGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X19rZXlcIj5cbiAgICAgICAgICBOb3RpZmljYXRpb25cbiAgICAgICAgPC9kdD5cbiAgICAgICAgPGRkIGNsYXNzPVwiZ292dWstc3VtbWFyeS1saXN0X192YWx1ZVwiPlxuICAgICAgICAgIHt7dGVtcGxhdGVJbnN0cnVjdGlvblR5cGV9fVxuICAgICAgICA8L2RkPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXN1bW1hcnktbGlzdF9fYWN0aW9uc1wiPlxuICAgICAgICAgIDxhICpuZ0lmPVwiIW5vdGlmaWNhdGlvblByZXZpZXdcIiBocmVmPVwiSmF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJnb3Z1ay1saW5rIHJpZ2h0XCIgKGNsaWNrKT1cInNob3dOb3RpZmljYXRpb25QcmV2aWV3KClcIj5cbiAgICAgICAgICAgIFByZXZpZXdcbiAgICAgICAgICA8L2E+XG4gICAgICAgICAgPGEgKm5nSWY9XCJub3RpZmljYXRpb25QcmV2aWV3XCIgaHJlZj1cIkphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwiZ292dWstbGluayByaWdodFwiIChjbGljayk9XCJoaWRlTm90aWZpY2F0aW9uUHJldmlldygpXCI+XG4gICAgICAgICAgICBIaWRlIFByZXZpZXdcbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGw+XG5cbiAgICA8YXBwLW5vdGlmaWNhdGlvbi1wcmV2aWV3ICpuZ0lmPVwibm90aWZpY2F0aW9uUHJldmlld1wiIFtwYXltZW50UmVmZXJlbmNlXT1cInJlZnVuZGxpc3Q/LnBheW1lbnRfcmVmZXJlbmNlXCJcbiAgICBbcGF5bWVudF09XCJwYXltZW50T2JqXCJcbiAgICBbY29udGFjdERldGFpbHNdPVwiYWRkcmVzc0RldGFpbHNcIlxuICAgIFtyZWZ1bmRSZWFzb25dPVwicmVmdW5kbGlzdD8ucmVhc29uX2NvZGVcIlxuICAgIFtyZWZ1bmRBbW91bnRdPVwicmVmdW5kbGlzdD8uYW1vdW50XCJcbiAgICBbcmVmdW5kUmVmZXJlbmNlXT1cInJlZnVuZGxpc3Q/LnJlZnVuZF9yZWZlcmVuY2VcIj5cbiAgPC9hcHAtbm90aWZpY2F0aW9uLXByZXZpZXc+XG5cblxuXG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLWJ1dHRvbi1ncm91cFwiPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZ290b0VkaXREZXRhaWxzUGFnZShhZGRyZXNzRGV0YWlscywgJ3JlZnVuZEVkaXRWaWV3JylcIiBjbGFzcz1cImdvdnVrLWJ1dHRvbiBnb3Z1ay1idXR0b24tLXNlY29uZGFyeVwiPiBQcmV2aW91czwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic3VibWl0RWRpdERldGFpbCgpXCIgY2xhc3M9XCJnb3Z1ay1idXR0b24gYnV0dG9uXCJcbiAgICAgICAgZGF0YS1tb2R1bGU9XCJnb3Z1ay1idXR0b25cIj5cbiAgICAgICAgICBTZW5kIG5vdGlmaWNhdGlvblxuICAgICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8cD5cbiAgICAgIDxhIChjbGljayk9XCJsb2FkUmVmdW5kTGlzdFBhZ2UoKVwiIGNsYXNzPVwiZ292dWstbGlua1wiIGRhdGEtbW9kdWxlPVwiZ292dWstYnV0dG9uXCI+XG4gICAgICAgICAgQ2FuY2VsXG4gICAgICA8L2E+XG4gIDwvcD5cblxuPC9uZy1jb250YWluZXI+XG5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdOYW1lID09PSAnY29uZmlybVN1Ym1pdFJlc2V0UmVmdW5kJ1wiPlxuXG4gIDxoMSBjbGFzcz1cImdvdnVrLWhlYWRpbmctbFwiPlJlc2V0IFJlZnVuZDwvaDE+XG5cblxuICA8IURPQ1RZUEUgaHRtbD5cbiAgPGh0bWwgbGFuZz1cImVuXCI+XG4gIDxoZWFkPlxuICAgIDxtZXRhIGNoYXJzZXQ9XCJVVEYtOFwiPlxuICAgIDx0aXRsZT5SZWZ1bmQgQWN0aW9uczwvdGl0bGU+XG4gIDwvaGVhZD5cbiAgPGJvZHk+XG4gIDxkaXYgY2xhc3M9XCJyZWZ1bmQtbGlzdFwiPlxuICAgIDx1bD5cbiAgICAgIDxsaT5DbG9zZSB0aGUgY3VycmVudCBSZWZ1bmQge3sgcmVmdW5kbGlzdD8ucmVmdW5kX3JlZmVyZW5jZSB9fTwvbGk+XG4gICAgICA8bGk+UmVpc3N1ZSB0aGUgcmVmdW5kIHdpdGggYSBuZXcgcmVmdW5kIHJlZmVyZW5jZTwvbGk+XG4gICAgICA8bGk+U2VuZCBhIG5ldyBPZmZlciBhbmQgQ29udGFjdCBub3RpZmljYXRpb24gZm9yIHRoZSBpc3N1ZWQgcmVmdW5kPC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbiAgPC9ib2R5PlxuICA8L2h0bWw+XG5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLWJ1dHRvbi1ncm91cFwiPlxuICAgIDxidXR0b24gKGNsaWNrKT1cInBvc3RSZXNldFJlZnVuZCgpXCIgY2xhc3M9XCJnb3Z1ay1idXR0b25cIj4gQ29udGludWU8L2J1dHRvbj5cbiAgICA8YnV0dG9uIChjbGljayk9XCJyZWRpcmVjdFRvUmVmdW5kTGlzdFBhZ2UoKVwiIGNsYXNzPVwiZ292dWstYnV0dG9uIGdvdnVrLWJ1dHRvbi0tc2Vjb25kYXJ5XCI+IENhbmNlbDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuPC9uZy1jb250YWluZXI+XG4iXX0=
|