@hmcts/ccpay-web-component 4.0.0-beta55 → 4.0.0-beta550

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.
Files changed (205) hide show
  1. package/bundles/hmcts-ccpay-web-component.umd.js +6873 -2576
  2. package/bundles/hmcts-ccpay-web-component.umd.js.map +1 -1
  3. package/bundles/hmcts-ccpay-web-component.umd.min.js +1 -1
  4. package/bundles/hmcts-ccpay-web-component.umd.min.js.map +1 -1
  5. package/esm2015/hmcts-ccpay-web-component.js +32 -26
  6. package/esm2015/lib/components/add-remission/add-remission.component.js +868 -137
  7. package/esm2015/lib/components/allocate-payments/allocate-payments.component.js +336 -318
  8. package/esm2015/lib/components/card-details/card-details.component.js +22 -57
  9. package/esm2015/lib/components/case-transactions/case-transactions.component.js +951 -350
  10. package/esm2015/lib/components/error-banner/error-banner.component.js +5 -17
  11. package/esm2015/lib/components/fee-summary/fee-summary.component.js +261 -258
  12. package/esm2015/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.js +137 -156
  13. package/esm2015/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.js +178 -177
  14. package/esm2015/lib/components/page-not-found.component.js +3 -4
  15. package/esm2015/lib/components/payment-list/payment-list.component.js +22 -80
  16. package/esm2015/lib/components/payment-view/payment-view.component.js +351 -130
  17. package/esm2015/lib/components/pba-details/pba-details.component.js +5 -39
  18. package/esm2015/lib/components/process-refund/process-refund.component.js +391 -0
  19. package/esm2015/lib/components/processed-payments/processed-payments.component.js +13 -41
  20. package/esm2015/lib/components/refund-list/refund-list.component.js +131 -0
  21. package/esm2015/lib/components/refund-status/refund-status.component.js +511 -0
  22. package/esm2015/lib/components/reports/reports.component.js +96 -107
  23. package/esm2015/lib/components/status-history/status-history.component.js +28 -35
  24. package/esm2015/lib/components/table/table.component.js +179 -0
  25. package/esm2015/lib/components/unprocessed-payments/unprocessed-payments.component.js +168 -91
  26. package/esm2015/lib/interfaces/AddRemissionRequest.js +6 -7
  27. package/esm2015/lib/interfaces/AddRetroRemissionRequest.js +21 -0
  28. package/esm2015/lib/interfaces/AllocatePaymentRequest.js +11 -9
  29. package/esm2015/lib/interfaces/IAllocationPaymentsRequest.js +2 -3
  30. package/esm2015/lib/interfaces/IBSPayments.js +38 -35
  31. package/esm2015/lib/interfaces/ICardDetails.js +14 -13
  32. package/esm2015/lib/interfaces/IFee.js +44 -29
  33. package/esm2015/lib/interfaces/IOrderReferenceFee.js +25 -0
  34. package/esm2015/lib/interfaces/IPatchRefundAction.js +15 -0
  35. package/esm2015/lib/interfaces/IPayment.js +56 -55
  36. package/esm2015/lib/interfaces/IPaymentGroup.js +12 -11
  37. package/esm2015/lib/interfaces/IPaymentStatus.js +2 -3
  38. package/esm2015/lib/interfaces/IPaymentView.js +17 -0
  39. package/esm2015/lib/interfaces/IPayments.js +6 -5
  40. package/esm2015/lib/interfaces/IRefundAction.js +15 -0
  41. package/esm2015/lib/interfaces/IRefundList.js +29 -0
  42. package/esm2015/lib/interfaces/IRefundReasons.js +19 -0
  43. package/esm2015/lib/interfaces/IRefundRejectReason.js +15 -0
  44. package/esm2015/lib/interfaces/IRefundStatus.js +23 -0
  45. package/esm2015/lib/interfaces/IRefundStatusHistory.js +15 -0
  46. package/esm2015/lib/interfaces/IRemission.js +18 -17
  47. package/esm2015/lib/interfaces/IResubmitRefundRequest.js +21 -0
  48. package/esm2015/lib/interfaces/IStatusHistories.js +12 -11
  49. package/esm2015/lib/interfaces/IStatusHistory.js +14 -13
  50. package/esm2015/lib/interfaces/IssueRefundRequest.js +25 -0
  51. package/esm2015/lib/interfaces/PayhubAntennaRequest.js +28 -0
  52. package/esm2015/lib/interfaces/PaymentToPayhubRequest.js +7 -12
  53. package/esm2015/lib/interfaces/PostIssueRefundRetroRemission.js +17 -0
  54. package/esm2015/lib/interfaces/PostRefundRetroRemission.js +21 -0
  55. package/esm2015/lib/interfaces/RefundsRequest.js +21 -0
  56. package/esm2015/lib/interfaces/UnidentifiedPaymentsRequest.js +2 -3
  57. package/esm2015/lib/interfaces/UnsolicitedPaymentsRequest.js +2 -3
  58. package/esm2015/lib/payment-lib.component.js +124 -20
  59. package/esm2015/lib/payment-lib.module.js +27 -6
  60. package/esm2015/lib/payment-lib.service.js +18 -4
  61. package/esm2015/lib/pipes/capitalize.pipe.js +24 -0
  62. package/esm2015/lib/pipes/ccd-hyphens.pipe.js +3 -4
  63. package/esm2015/lib/pipes/key-value.pipe.js +3 -4
  64. package/esm2015/lib/pipes/sanitize-html.pipe.js +7 -5
  65. package/esm2015/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.js +52 -14
  66. package/esm2015/lib/services/card-details/card-details.service.js +19 -8
  67. package/esm2015/lib/services/case-transactions/case-transactions.service.js +19 -8
  68. package/esm2015/lib/services/orderslist.service.js +211 -0
  69. package/esm2015/lib/services/payment-list/payment-list.service.js +19 -8
  70. package/esm2015/lib/services/payment-view/payment-view.service.js +102 -14
  71. package/esm2015/lib/services/refunds/refunds.service.js +203 -0
  72. package/esm2015/lib/services/shared/error-handler.service.js +11 -4
  73. package/esm2015/lib/services/shared/httpclient/webcomponent.http.client.js +27 -9
  74. package/esm2015/lib/services/shared/logger/console-logger.service.js +7 -5
  75. package/esm2015/lib/services/shared/logger/logger.service.js +7 -5
  76. package/esm2015/lib/services/status-history/status-history.service.js +19 -8
  77. package/esm2015/lib/services/xl-file/xl-file.service.js +56 -51
  78. package/esm2015/public_api.js +1 -2
  79. package/esm5/hmcts-ccpay-web-component.js +32 -26
  80. package/esm5/lib/components/add-remission/add-remission.component.js +935 -46
  81. package/esm5/lib/components/allocate-payments/allocate-payments.component.js +349 -115
  82. package/esm5/lib/components/card-details/card-details.component.js +22 -9
  83. package/esm5/lib/components/case-transactions/case-transactions.component.js +1030 -110
  84. package/esm5/lib/components/error-banner/error-banner.component.js +3 -4
  85. package/esm5/lib/components/fee-summary/fee-summary.component.js +280 -86
  86. package/esm5/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.js +136 -45
  87. package/esm5/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.js +179 -65
  88. package/esm5/lib/components/page-not-found.component.js +3 -4
  89. package/esm5/lib/components/payment-list/payment-list.component.js +21 -8
  90. package/esm5/lib/components/payment-view/payment-view.component.js +418 -21
  91. package/esm5/lib/components/pba-details/pba-details.component.js +5 -6
  92. package/esm5/lib/components/process-refund/process-refund.component.js +468 -0
  93. package/esm5/lib/components/processed-payments/processed-payments.component.js +12 -7
  94. package/esm5/lib/components/refund-list/refund-list.component.js +134 -0
  95. package/esm5/lib/components/refund-status/refund-status.component.js +570 -0
  96. package/esm5/lib/components/reports/reports.component.js +97 -26
  97. package/esm5/lib/components/status-history/status-history.component.js +27 -9
  98. package/esm5/lib/components/table/table.component.js +214 -0
  99. package/esm5/lib/components/unprocessed-payments/unprocessed-payments.component.js +178 -27
  100. package/esm5/lib/interfaces/AddRemissionRequest.js +5 -6
  101. package/esm5/lib/interfaces/AddRetroRemissionRequest.js +19 -0
  102. package/esm5/lib/interfaces/AllocatePaymentRequest.js +9 -8
  103. package/esm5/lib/interfaces/IAllocationPaymentsRequest.js +2 -3
  104. package/esm5/lib/interfaces/IBSPayments.js +38 -35
  105. package/esm5/lib/interfaces/ICardDetails.js +14 -13
  106. package/esm5/lib/interfaces/IFee.js +44 -29
  107. package/esm5/lib/interfaces/IOrderReferenceFee.js +25 -0
  108. package/esm5/lib/interfaces/IPatchRefundAction.js +15 -0
  109. package/esm5/lib/interfaces/IPayment.js +56 -55
  110. package/esm5/lib/interfaces/IPaymentGroup.js +12 -11
  111. package/esm5/lib/interfaces/IPaymentStatus.js +2 -3
  112. package/esm5/lib/interfaces/IPaymentView.js +17 -0
  113. package/esm5/lib/interfaces/IPayments.js +6 -5
  114. package/esm5/lib/interfaces/IRefundAction.js +15 -0
  115. package/esm5/lib/interfaces/IRefundList.js +29 -0
  116. package/esm5/lib/interfaces/IRefundReasons.js +19 -0
  117. package/esm5/lib/interfaces/IRefundRejectReason.js +15 -0
  118. package/esm5/lib/interfaces/IRefundStatus.js +23 -0
  119. package/esm5/lib/interfaces/IRefundStatusHistory.js +15 -0
  120. package/esm5/lib/interfaces/IRemission.js +18 -17
  121. package/esm5/lib/interfaces/IResubmitRefundRequest.js +19 -0
  122. package/esm5/lib/interfaces/IStatusHistories.js +12 -11
  123. package/esm5/lib/interfaces/IStatusHistory.js +14 -13
  124. package/esm5/lib/interfaces/IssueRefundRequest.js +22 -0
  125. package/esm5/lib/interfaces/PayhubAntennaRequest.js +25 -0
  126. package/esm5/lib/interfaces/PaymentToPayhubRequest.js +6 -10
  127. package/esm5/lib/interfaces/PostIssueRefundRetroRemission.js +16 -0
  128. package/esm5/lib/interfaces/PostRefundRetroRemission.js +19 -0
  129. package/esm5/lib/interfaces/RefundsRequest.js +19 -0
  130. package/esm5/lib/interfaces/UnidentifiedPaymentsRequest.js +2 -3
  131. package/esm5/lib/interfaces/UnsolicitedPaymentsRequest.js +2 -3
  132. package/esm5/lib/payment-lib.component.js +99 -14
  133. package/esm5/lib/payment-lib.module.js +27 -6
  134. package/esm5/lib/payment-lib.service.js +25 -4
  135. package/esm5/lib/pipes/capitalize.pipe.js +32 -0
  136. package/esm5/lib/pipes/ccd-hyphens.pipe.js +3 -4
  137. package/esm5/lib/pipes/key-value.pipe.js +3 -4
  138. package/esm5/lib/pipes/sanitize-html.pipe.js +7 -5
  139. package/esm5/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.js +61 -14
  140. package/esm5/lib/services/card-details/card-details.service.js +19 -8
  141. package/esm5/lib/services/case-transactions/case-transactions.service.js +19 -8
  142. package/esm5/lib/services/orderslist.service.js +276 -0
  143. package/esm5/lib/services/payment-list/payment-list.service.js +19 -8
  144. package/esm5/lib/services/payment-view/payment-view.service.js +142 -16
  145. package/esm5/lib/services/refunds/refunds.service.js +243 -0
  146. package/esm5/lib/services/shared/error-handler.service.js +11 -4
  147. package/esm5/lib/services/shared/httpclient/webcomponent.http.client.js +27 -9
  148. package/esm5/lib/services/shared/logger/console-logger.service.js +7 -5
  149. package/esm5/lib/services/shared/logger/logger.service.js +7 -5
  150. package/esm5/lib/services/status-history/status-history.service.js +19 -8
  151. package/esm5/lib/services/xl-file/xl-file.service.js +62 -51
  152. package/esm5/public_api.js +1 -2
  153. package/fesm2015/hmcts-ccpay-web-component.js +4606 -2121
  154. package/fesm2015/hmcts-ccpay-web-component.js.map +1 -1
  155. package/fesm5/hmcts-ccpay-web-component.js +7026 -2577
  156. package/fesm5/hmcts-ccpay-web-component.js.map +1 -1
  157. package/hmcts-ccpay-web-component.d.ts +30 -23
  158. package/hmcts-ccpay-web-component.metadata.json +1 -1
  159. package/lib/components/add-remission/add-remission.component.d.ts +97 -3
  160. package/lib/components/allocate-payments/allocate-payments.component.d.ts +29 -9
  161. package/lib/components/case-transactions/case-transactions.component.d.ts +69 -5
  162. package/lib/components/fee-summary/fee-summary.component.d.ts +16 -4
  163. package/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.d.ts +2 -0
  164. package/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.d.ts +4 -0
  165. package/lib/components/payment-view/payment-view.component.d.ts +41 -1
  166. package/lib/components/process-refund/process-refund.component.d.ts +53 -0
  167. package/lib/components/refund-list/refund-list.component.d.ts +23 -0
  168. package/lib/components/refund-status/refund-status.component.d.ts +68 -0
  169. package/lib/components/reports/reports.component.d.ts +4 -1
  170. package/lib/components/status-history/status-history.component.d.ts +1 -0
  171. package/lib/components/table/table.component.d.ts +36 -0
  172. package/lib/components/unprocessed-payments/unprocessed-payments.component.d.ts +24 -4
  173. package/lib/interfaces/AddRemissionRequest.d.ts +2 -2
  174. package/lib/interfaces/AddRetroRemissionRequest.d.ts +5 -0
  175. package/lib/interfaces/AllocatePaymentRequest.d.ts +16 -3
  176. package/lib/interfaces/IBSPayments.d.ts +1 -0
  177. package/lib/interfaces/IFee.d.ts +7 -0
  178. package/lib/interfaces/IOrderReferenceFee.d.ts +9 -0
  179. package/lib/interfaces/IPatchRefundAction.d.ts +4 -0
  180. package/lib/interfaces/IPaymentView.d.ts +5 -0
  181. package/lib/interfaces/IRefundAction.d.ts +4 -0
  182. package/lib/interfaces/IRefundList.d.ts +14 -0
  183. package/lib/interfaces/IRefundReasons.d.ts +6 -0
  184. package/lib/interfaces/IRefundRejectReason.d.ts +4 -0
  185. package/lib/interfaces/IRefundStatus.d.ts +8 -0
  186. package/lib/interfaces/IRefundStatusHistory.d.ts +5 -0
  187. package/lib/interfaces/IResubmitRefundRequest.d.ts +5 -0
  188. package/lib/interfaces/IssueRefundRequest.d.ts +6 -0
  189. package/lib/interfaces/PayhubAntennaRequest.d.ts +7 -0
  190. package/lib/interfaces/PaymentToPayhubRequest.d.ts +2 -3
  191. package/lib/interfaces/PostIssueRefundRetroRemission.d.ts +4 -0
  192. package/lib/interfaces/PostRefundRetroRemission.d.ts +5 -0
  193. package/lib/interfaces/RefundsRequest.d.ts +5 -0
  194. package/lib/payment-lib.component.d.ts +30 -4
  195. package/lib/payment-lib.service.d.ts +3 -0
  196. package/lib/pipes/capitalize.pipe.d.ts +5 -0
  197. package/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.d.ts +2 -0
  198. package/lib/services/orderslist.service.d.ts +40 -0
  199. package/lib/services/payment-view/payment-view.service.d.ts +17 -3
  200. package/lib/services/refunds/refunds.service.d.ts +30 -0
  201. package/lib/services/xl-file/xl-file.service.d.ts +6 -6
  202. package/package.json +5 -1
  203. package/esm2015/lib/interfaces/IPaymentList.js +0 -48
  204. package/esm5/lib/interfaces/IPaymentList.js +0 -47
  205. package/lib/interfaces/IPaymentList.d.ts +0 -15
@@ -1,20 +1,57 @@
1
1
  /**
2
2
  * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
3
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
4
  */
5
- import { Component } from '@angular/core';
5
+ import { Component, Input } from '@angular/core';
6
6
  import { PaymentViewService } from '../../services/payment-view/payment-view.service';
7
7
  import { PaymentLibComponent } from '../../payment-lib.component';
8
8
  /** @type {?} */
9
9
  const BS_ENABLE_FLAG = 'bulk-scan-enabling-fe';
10
+ import { ChangeDetectorRef } from '@angular/core';
11
+ import { OrderslistService } from '../../services/orderslist.service';
10
12
  export class PaymentViewComponent {
11
13
  /**
12
14
  * @param {?} paymentViewService
13
15
  * @param {?} paymentLibComponent
16
+ * @param {?} cd
17
+ * @param {?} OrderslistService
14
18
  */
15
- constructor(paymentViewService, paymentLibComponent) {
19
+ constructor(paymentViewService, paymentLibComponent, cd, OrderslistService) {
16
20
  this.paymentViewService = paymentViewService;
17
21
  this.paymentLibComponent = paymentLibComponent;
22
+ this.cd = cd;
23
+ this.OrderslistService = OrderslistService;
24
+ this.isRefundRemission = false;
25
+ this.isAddFeeBtnEnabled = false;
26
+ this.isIssueRefunfBtnEnable = false;
27
+ this.allowedRolesToAccessRefund = ['payments-refund-approver', 'payments-refund'];
28
+ this.remissions = [];
29
+ this.check4AllowedRoles2AccessRefund = (/**
30
+ * @return {?}
31
+ */
32
+ () => {
33
+ return this.allowedRolesToAccessRefund.some((/**
34
+ * @param {?} role
35
+ * @return {?}
36
+ */
37
+ role => this.LOGGEDINUSERROLES.indexOf(role) !== -1));
38
+ });
39
+ this.allowFurtherAccessAfter4Days = (/**
40
+ * @param {?} payment
41
+ * @return {?}
42
+ */
43
+ (payment) => {
44
+ /** @type {?} */
45
+ let tmp4DayAgo = new Date();
46
+ tmp4DayAgo.setDate(tmp4DayAgo.getDate() - 4);
47
+ return tmp4DayAgo >= new Date(payment.date_created);
48
+ });
49
+ }
50
+ /**
51
+ * @return {?}
52
+ */
53
+ ngAfterContentChecked() {
54
+ this.cd.detectChanges();
18
55
  }
19
56
  /**
20
57
  * @return {?}
@@ -23,13 +60,52 @@ export class PaymentViewComponent {
23
60
  this.ccdCaseNumber = this.paymentLibComponent.CCD_CASE_NUMBER;
24
61
  this.selectedOption = this.paymentLibComponent.SELECTED_OPTION;
25
62
  this.dcnNumber = this.paymentLibComponent.DCN_NUMBER;
26
- this.paymentViewService.getPaymentGroupDetails(this.paymentLibComponent.paymentGroupReference, this.paymentLibComponent.paymentMethod).subscribe(paymentGroup => {
63
+ this.isTurnOff = this.paymentLibComponent.ISTURNOFF;
64
+ this.viewStatus = 'paymentview';
65
+ this.paymentViewService.getApportionPaymentDetails(this.paymentLibComponent.paymentReference).subscribe((/**
66
+ * @param {?} paymentGroup
67
+ * @return {?}
68
+ */
69
+ paymentGroup => {
70
+ /** @type {?} */
71
+ let fees = [];
72
+ paymentGroup.fees.forEach((/**
73
+ * @param {?} fee
74
+ * @return {?}
75
+ */
76
+ fee => {
77
+ this.isRemissionsMatch = false;
78
+ paymentGroup.remissions.forEach((/**
79
+ * @param {?} rem
80
+ * @return {?}
81
+ */
82
+ rem => {
83
+ if (rem.fee_code === fee.code) {
84
+ this.isRemissionsMatch = true;
85
+ fee['remissions'] = rem;
86
+ fees.push(fee);
87
+ }
88
+ }));
89
+ if (!this.isRemissionsMatch) {
90
+ fees.push(fee);
91
+ }
92
+ }));
93
+ paymentGroup.fees = fees;
27
94
  this.paymentGroup = paymentGroup;
28
- this.paymentGroup.payments = this.paymentGroup.payments.filter(paymentGroupObj => paymentGroupObj['reference'].includes(this.paymentLibComponent.paymentReference));
95
+ this.paymentGroup.payments = this.paymentGroup.payments.filter((/**
96
+ * @param {?} paymentGroupObj
97
+ * @return {?}
98
+ */
99
+ paymentGroupObj => paymentGroupObj['reference'].includes(this.paymentLibComponent.paymentReference)));
29
100
  /** @type {?} */
30
101
  const paymentAllocation = this.paymentGroup.payments[0].payment_allocation;
31
102
  this.isStatusAllocated = paymentAllocation.length > 0 && paymentAllocation[0].allocation_status === 'Allocated' || paymentAllocation.length === 0;
32
- }, (error) => this.errorMessage = error);
103
+ console.log(this.paymentGroup.payments[0] + '1');
104
+ }), (/**
105
+ * @param {?} error
106
+ * @return {?}
107
+ */
108
+ (error) => this.errorMessage = error));
33
109
  }
34
110
  /**
35
111
  * @return {?}
@@ -55,139 +131,243 @@ export class PaymentViewComponent {
55
131
  */
56
132
  goToCaseTransationPage(event) {
57
133
  event.preventDefault();
134
+ this.OrderslistService.setnavigationPage('casetransactions');
135
+ this.OrderslistService.setisFromServiceRequestPage(false);
58
136
  this.paymentLibComponent.viewName = 'case-transactions';
59
- this.paymentViewService.getBSfeature().subscribe(features => {
60
- /** @type {?} */
61
- let result = JSON.parse(features).filter(feature => feature.uid === BS_ENABLE_FLAG);
62
- this.paymentLibComponent.ISBSENABLE = result[0] ? result[0].enable : false;
63
- }, err => {
64
- this.paymentLibComponent.ISBSENABLE = false;
65
- });
137
+ this.paymentLibComponent.ISBSENABLE = true;
138
+ // this.paymentViewService.getBSfeature().subscribe(
139
+ // features => {
140
+ // let result = JSON.parse(features).filter(feature => feature.uid === BS_ENABLE_FLAG);
141
+ // this.paymentLibComponent.ISBSENABLE = result[0] ? result[0].enable : false;
142
+ // },
143
+ // err => {
144
+ // this.paymentLibComponent.ISBSENABLE = false;
145
+ // }
146
+ // );
147
+ }
148
+ /**
149
+ * @param {?} fee
150
+ * @return {?}
151
+ */
152
+ addRemission(fee) {
153
+ if (this.chkForAddRemission(fee.code)) {
154
+ this.feeId = fee;
155
+ this.paymentViewService.getApportionPaymentDetails(this.paymentGroup.payments[0].reference).subscribe((/**
156
+ * @param {?} paymentGroup
157
+ * @return {?}
158
+ */
159
+ paymentGroup => {
160
+ this.paymentGroup = paymentGroup;
161
+ this.paymentGroup.payments = this.paymentGroup.payments.filter((/**
162
+ * @param {?} paymentGroupObj
163
+ * @return {?}
164
+ */
165
+ paymentGroupObj => paymentGroupObj['reference'].includes(this.paymentLibComponent.paymentReference)));
166
+ this.payment = this.paymentGroup.payments[0];
167
+ this.paymentLibComponent.isFromPaymentDetailPage = true;
168
+ this.viewStatus = 'addremission';
169
+ this.isRefundRemission = true;
170
+ this.cd.detectChanges();
171
+ }), (/**
172
+ * @param {?} error
173
+ * @return {?}
174
+ */
175
+ (error) => this.errorMessage = error));
176
+ }
177
+ }
178
+ /**
179
+ * @param {?} paymentGroup
180
+ * @return {?}
181
+ */
182
+ checkForFees(paymentGroup) {
183
+ if (paymentGroup !== null && paymentGroup !== undefined) {
184
+ if (paymentGroup.fees !== null && paymentGroup.fees !== undefined) {
185
+ return true;
186
+ }
187
+ }
188
+ return false;
189
+ }
190
+ /**
191
+ * @param {?} payment
192
+ * @param {?} remission
193
+ * @param {?} fees
194
+ * @return {?}
195
+ */
196
+ addRefundForRemission(payment, remission, fees) {
197
+ if (this.chkIsRefundRemissionBtnEnable()) {
198
+ this.payment = payment;
199
+ this.paymentViewService.getApportionPaymentDetails(this.payment.reference).subscribe((/**
200
+ * @param {?} paymentGroup
201
+ * @return {?}
202
+ */
203
+ paymentGroup => {
204
+ this.paymentGroup = paymentGroup;
205
+ this.paymentGroup.payments = this.paymentGroup.payments.filter((/**
206
+ * @param {?} paymentGroupObj
207
+ * @return {?}
208
+ */
209
+ paymentGroupObj => paymentGroupObj['reference'].includes(this.payment.reference)));
210
+ this.payment = this.paymentGroup.payments[0];
211
+ this.remissions = remission;
212
+ this.remissionFeeAmt = fees.filter((/**
213
+ * @param {?} data
214
+ * @return {?}
215
+ */
216
+ data => data.code === this.remissions['fee_code']))[0].net_amount;
217
+ this.viewStatus = 'addrefundforremission';
218
+ // const paymentAllocation = this.paymentGroup.payments[0].payment_allocation;
219
+ // this.isStatusAllocated = paymentAllocation.length > 0 && paymentAllocation[0].allocation_status === 'Allocated' || paymentAllocation.length === 0;
220
+ }), (/**
221
+ * @param {?} error
222
+ * @return {?}
223
+ */
224
+ (error) => this.errorMessage = error));
225
+ }
226
+ }
227
+ /**
228
+ * @return {?}
229
+ */
230
+ chkIsRefundRemissionBtnEnable() {
231
+ this.paymentGroup.payments.forEach((/**
232
+ * @param {?} payment
233
+ * @return {?}
234
+ */
235
+ payment => {
236
+ if (payment.method.toLocaleLowerCase() === 'payment by account' && payment.status.toLocaleLowerCase() === 'success' && this.allowFurtherAccessAfter4Days(payment)) {
237
+ this.isRefundRemissionBtnEnable = true;
238
+ }
239
+ }));
240
+ if (this.isRefundRemissionBtnEnable) {
241
+ return true;
242
+ }
243
+ else {
244
+ return false;
245
+ }
246
+ ;
247
+ }
248
+ /**
249
+ * @param {?} paymentgrp
250
+ * @return {?}
251
+ */
252
+ issueRefund(paymentgrp) {
253
+ if (this.chkIssueRefundBtnEnable(paymentgrp.payments[0])) {
254
+ this.paymentGroup = paymentgrp;
255
+ this.viewStatus = 'issuerefund';
256
+ this.isRefundRemission = true;
257
+ }
258
+ }
259
+ /**
260
+ * @param {?} feeCode
261
+ * @param {?} remissions
262
+ * @return {?}
263
+ */
264
+ getRemissionByFeeCode(feeCode, remissions) {
265
+ if (remissions && remissions.length > 0) {
266
+ for (const remission of remissions) {
267
+ if (remission.fee_code === feeCode) {
268
+ return remission;
269
+ // this.isAddFeeBtnEnabled = true;
270
+ }
271
+ }
272
+ }
273
+ return null;
274
+ }
275
+ /**
276
+ * @param {?} payment
277
+ * @return {?}
278
+ */
279
+ chkIssueRefundBtnEnable(payment) {
280
+ if (this.check4AllowedRoles2AccessRefund() && this.allowFurtherAccessAfter4Days(payment) &&
281
+ payment.method === 'payment by account' && payment.status.toLocaleLowerCase() === 'success') {
282
+ this.isIssueRefunfBtnEnable = true;
283
+ }
284
+ if (this.isIssueRefunfBtnEnable) {
285
+ return true;
286
+ }
287
+ else {
288
+ return false;
289
+ }
290
+ ;
291
+ }
292
+ /**
293
+ * @return {?}
294
+ */
295
+ chkForPBAPayment() {
296
+ /** @type {?} */
297
+ let payment = this.paymentGroup.payments[0];
298
+ if (payment.method.toLocaleLowerCase() === 'payment by account' && this.allowFurtherAccessAfter4Days(payment)) {
299
+ return true;
300
+ }
301
+ return false;
302
+ }
303
+ /**
304
+ * @param {?} feeCode
305
+ * @return {?}
306
+ */
307
+ chkForAddRemission(feeCode) {
308
+ if (this.chkForPBAPayment() && this.check4AllowedRoles2AccessRefund() && this.allowFurtherAccessAfter4Days(this.paymentGroup.payments[0])) {
309
+ if (this.paymentGroup.remissions && this.paymentGroup.remissions.length > 0) {
310
+ for (const remission of this.paymentGroup.remissions) {
311
+ if (remission.fee_code === feeCode) {
312
+ return false;
313
+ }
314
+ }
315
+ return true;
316
+ }
317
+ return true;
318
+ }
319
+ else {
320
+ return false;
321
+ }
66
322
  }
67
323
  }
68
324
  PaymentViewComponent.decorators = [
69
325
  { type: Component, args: [{
70
326
  selector: 'ccpay-payment-view',
71
- template: `<div class="govuk-width-container">
72
-
73
- <div class="govuk-breadcrumbs">
74
- <ol class="govuk-breadcrumbs__list">
75
- <li class="govuk-breadcrumbs__list-item">
76
- <a href="#" (click)="goToCaseTransationPage($event)" class="govuk-back-link">Back</a>
77
- </li>
78
- </ol>
79
- </div>
80
-
81
- <main class="govuk-main-wrapper " id="main-content" role="main">
82
-
83
- <div *ngIf="errorMessage">
84
- <div class="error-summary" role="group" aria-labelledby="failure-error-summary-heading" tabindex="-1">
85
- <h2 class="heading-medium error-summary-heading" id="failure-error-summary-heading">
86
- Payment details could not be retrieved
87
- </h2>
88
- <div class="govuk-error-summary__body">
89
- {{ errorMessage }}
90
- </div>
91
- </div>
92
- </div>
93
-
94
- <div *ngIf="!errorMessage && paymentGroup">
95
-
96
- <div class="govuk-grid-row">
97
- <div class="column">
98
- <h1 class="heading-medium">Payment details</h1>
99
- </div>
100
- </div>
101
-
102
- <hr class="govuk-section-break govuk-section-break--m govuk-section-break--visible">
103
- <table>
104
- <tbody>
105
- <tr class="section">
106
- <td class="bold" width="330px">Payment group reference</td>
107
- <td>{{ paymentGroup.payment_group_reference }}</td>
108
- </tr>
109
- <tr class="section">
110
- <td class="bold" width="330px">Payment reference</td>
111
- <td>{{ paymentGroup.payments[0].reference }}</td>
112
- </tr>
113
- <tr class="section">
114
- <td class="bold" width="330px">Total payment amount</td>
115
- <td>£{{ paymentGroup.payments[0].amount | number:'.2' }}</td>
116
- </tr>
117
-
118
- <tr class="section" *ngIf="paymentGroup.payments[0] && paymentGroup.payments[0].document_control_number">
119
- <td class="bold" width="330px">Payment asset number(DCN)</td>
120
- <td>{{ paymentGroup.payments[0].document_control_number }}</td>
121
- </tr>
122
- <tr class="section" *ngIf="paymentGroup.payments[0] && paymentGroup.payments[0].document_control_number">
123
- <td class="bold" width="330px">Banked date</td>
124
- <td>{{ paymentGroup.payments[0].banked_date | date:'dd MMM yyyy' }}</td>
125
- </tr>
126
- </tbody>
127
- </table>
128
-
129
- <div class="govuk-grid-row">
130
- <div class="column">
131
- <h2 class="heading-medium">Fee and remission details</h2>
132
- </div>
133
- </div>
134
-
135
- <div *ngFor="let fee of paymentGroup.fees">
136
- <table class="table">
137
- <tbody>
138
- <tr class="section">
139
- <td class="bold" width="330px">Description</td>
140
- <td>Application for {{ fee.description }}</td>
141
- </tr>
142
- <tr class="section">
143
- <td class="bold" width="330px">Fee code</td>
144
- <td>{{ fee.code }}</td>
145
- </tr>
146
- <tr class="section">
147
- <td class="bold" width="330px">Fee amount</td>
148
- <td>£{{ fee.calculated_amount | number:'.2' }}</td>
149
- </tr>
150
- <tr *ngIf="fee.net_amount">
151
- <td class="bold" width="330px">Net amount</td>
152
- <td>£{{ fee.net_amount | number:'.2' }}</td>
153
- </tr>
154
- <tr *ngIf="paymentGroup.remissions?.length > 0">
155
- <td class="bold" width="330px">Remission code</td>
156
- <td>{{paymentGroup.remissions[0].hwf_reference}}</td>
157
- </tr>
158
- <tr *ngIf="paymentGroup.remissions?.length > 0">
159
- <td class="bold" width="330px">Remission amount</td>
160
- <td>£{{ paymentGroup.remissions[0].hwf_amount | number:'.2'}}</td>
161
- </tr>
162
- </tbody>
163
- </table>
164
-
165
- <hr class="govuk-section-break govuk-section-break--m govuk-section-break--visible">
166
- </div>
167
-
168
- <!-- card details -->
169
- <ccpay-card-details *ngIf="isCardPayment && !isTelephonyPayment"></ccpay-card-details>
170
-
171
- <!-- pba details -->
172
- <ccpay-pba-details *ngIf="!isCardPayment" [payment]="paymentGroup.payments[0]"></ccpay-pba-details>
173
-
174
- <!-- Status histories -->
175
- <ccpay-payment-statuses *ngIf="isStatusAllocated"></ccpay-payment-statuses>
176
-
177
- </div>
178
-
179
- </main>
180
- </div>
181
- `,
182
- styles: [``]
183
- },] },
327
+ template: "\n<ng-container *ngIf=\"viewStatus === 'paymentview'\">\n<div class=\"govuk-width-container\">\n\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)=\"goToCaseTransationPage($event)\" class=\"govuk-back-link\">Back</a>\n </li>\n </ol>\n </div>\n\n <main class=\"govuk-main-wrapper govuk-!-padding-top-0\" id=\"main-content\" role=\"main\">\n\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 Payment details could not be retrieved\n </h2>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n\n <div class=\"payment-view-alignment\" *ngIf=\"!errorMessage\">\n\n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='PAYMENTDETAILS'>\n <div class=\"govuk-grid-row\">\n <div class=\"column\">\n <h1 class=\"heading-large govuk-!-margin-top-0\">Payment details</h1>\n </div>\n </div>\n <table>\n <tbody>\n <!-- <tr class=\"section\" *ngIf=\"isTurnOff\">\n <td class=\"bold tb-col-w\">Payment group reference</td>\n <td>{{ paymentGroup.payment_group_reference }}</td>\n </tr> -->\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment reference</td>\n <td>{{ paymentGroup?.payments[0]?.reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment amount</td>\n <td>\u00A3{{ paymentGroup?.payments[0]?.amount | number:'.2' }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment method</td>\n <td>{{ paymentGroup?.payments[0]?.method }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Type</td>\n <td *ngIf=\"paymentGroup?.payments[0]?.method !== 'card'\">Credit</td>\n <td *ngIf=\"paymentGroup?.payments[0]?.method === 'card'\">CARD</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Channel</td>\n <td>{{ paymentGroup?.payments[0]?.channel }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Method</td>\n <td *ngIf=\"paymentGroup?.payments[0]?.method !== 'card'\">{{ paymentGroup?.payments[0]?.method }}</td>\n <td *ngIf=\"paymentGroup?.payments[0]?.method === 'card'\">CARD</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Status</td>\n <td>{{ paymentGroup?.payments[0]?.status }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Allocaton Status</td>\n <td>{{ paymentGroup?.payments[0]?.payment_allocation[0]?.allocation_status }}</td>\n </tr>\n \n </tbody>\n </table>\n\n <div>\n <!-- Status histories -->\n <ccpay-payment-statuses *ngIf=\"isStatusAllocated\" [isTakePayment]=\"isTakePayment\"></ccpay-payment-statuses>\n </div>\n <div class=\"remission\">\n <button [disabled]=\"!chkIssueRefundBtnEnable(paymentGroup?.payments[0])\" (click)=\"issueRefund(paymentGroup)\" class=\"govuk-button govuk-button--secondary\">Issue refund</button>\n </div>\n \n <div *ngIf=\"checkForFees(paymentGroup)\">\n <div class=\"govuk-grid-row\" *ngIf=\"paymentGroup.fees.length > 0\">\n <div class=\"column\">\n \n <h2 class=\"heading-large\">Fee and remission details</h2>\n \n </div>\n </div>\n \n <div *ngFor=\"let fee of paymentGroup.fees\">\n <table class=\"table\">\n <tbody>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Description</td>\n <td>Application for {{ fee.description }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Fee code</td>\n <td>{{ fee.code }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\" [ngClass]=\"{'tr-border': !fee.apportion_amount && !fee.remissions && !isTurnOff }\">Fee amount</td>\n <td [ngClass]=\"{'tr-border': !fee.apportion_amount && !fee.remissions && !isTurnOff }\">\u00A3{{ fee.calculated_amount | number:'.2' }}</td>\n </tr>\n \n <tr *ngIf=\"fee.apportion_amount\">\n <td class=\"bold tb-col-w tr-border\" [ngClass]=\"{'tr-border': !fee.remissions}\">Allocated amount</td>\n <td [ngClass]=\"{'tr-border': !fee.remissions}\">\u00A3{{ fee.apportion_amount | number:'.2' }}</td>\n </tr>\n\n </tbody>\n </table>\n <button [disabled]=\"!chkForAddRemission(fee.code)\" (click)=\"addRemission(fee)\" class=\"govuk-button govuk-button--secondary\"> Add remission</button>\n\n\n \n <!-- <button *ngIf=\"paymentGroup.payments[0].method === 'payment by account'\" (click)=\"addRemission(fee)\" class=\"govuk-button govuk-button--secondary\"> Add remission</button>\n -->\n\n </div>\n\n <!-- remissions -->\n <div class=\"order-class\">\n <div class=\"column\">\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\">Help with fees or remission code</td>\n <td class=\"govuk-table__header col-27 whitespace-inherit\" scope=\"col\">Reference</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Fee</td>\n <td class=\"govuk-table__header whitespace-inherit\" scope=\"col\">Amount</td>\n <td class=\"govuk-table__header whitespace-inherit refundBtn\" scope=\"col\"></td>\n </tr>\n </thead>\n <tbody class=\"govuk-table__body\" *ngFor=\"let remission of paymentGroup.remissions\">\n <tr class=\"govuk-table__row\">\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.remission_reference }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.fee_code }}</td>\n <td class=\"govuk-table__cell whitespace-inherit\">{{ remission.hwf_amount | currency:'GBP':'symbol-narrow':'1.2-2'}}</td>\n <td class=\"govuk-table__cell refundBtn whitespace-inherit\" >\n <button [disabled]=\"!chkIsRefundRemissionBtnEnable()\" (click)=\"addRefundForRemission(paymentGroup.payments[0],remission,paymentGroup.fees)\" class=\"govuk-button govuk-button--secondary\"> Add refund</button>\n </td>\n <!-- <td *ngIf=\"!chkIsRefundRemissionBtnEnable()\" class=\"govuk-table__cell refundBtn whitespace-inherit\" >\n \n </td> -->\n </tr>\n </tbody>\n \n\n </table>\n </div></div>\n \n <div *ngIf=\"paymentGroup.remissions?.length === 0\">\n <span class=\"mar-17\" >No help with fees or remissions.</span>\n </div>\n \n </div>\n\n\n\n <!-- card details -->\n <!-- <ccpay-card-details *ngIf=\"isCardPayment && !isTelephonyPayment\"></ccpay-card-details> -->\n\n <!-- pba details -->\n <!-- <ccpay-pba-details *ngIf=\"!isCardPayment\" [payment]=\"paymentGroup.payments[0]\"></ccpay-pba-details> -->\n\n \n\n </div>\n\n </main>\n</div>\n\n</ng-container>\n<ng-container *ngIf=\"viewStatus === 'addremission' && feeId\">\n<ccpay-add-remission \n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\" \n[isOldPcipalOff]=\"isOldPcipalOff\" \n[viewCompStatus]= \"viewStatus\"\n[isNewPcipalOff]=\"isNewPcipalOff\" \n[fee]=\"feeId\" \n[payment] = \"payment\"\n[orderStatus] =\"paymentGroup.payments[0].status\"\n[paidAmount]= \"paymentGroup.payments[0].amount\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\" \n[paymentGroupRef]=\"paymentGroup.payment_group_reference\" \n[isFromPaymentDetailPage] = \"true\"\n[ccdCaseNumber]=\"ccdCaseNumber\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'addrefundforremission' && payment\">\n\n<ccpay-add-remission \n[isTurnOff]=\"isTurnOff\"\n[isStrategicFixEnable]=\"isStrategicFixEnable\" \n[isOldPcipalOff]=\"isOldPcipalOff\" \n[viewCompStatus]= \"viewStatus\"\n[isNewPcipalOff]=\"isNewPcipalOff\" \n[payment]=\"payment\" \n[orderStatus] =\"orderStatus\"\n[paidAmount]= \"orderTotalPayments\"\n[isRefundRemission]=\"isRefundRemission\"\n[caseType]=\"caseType\" \n[feeamount]=\"remissionFeeAmt\"\n[remission] = \"remissions\"\n[isFromServiceRequestPage]=\"false\" \n[paymentGroupRef]=\"paymentGroup.payment_group_reference\"\n[ccdCaseNumber]=\"ccdCaseNumber\"></ccpay-add-remission>\n</ng-container>\n\n<ng-container *ngIf=\"viewStatus === 'issuerefund'\">\n <ccpay-add-remission \n [isTurnOff]=\"isTurnOff\"\n [isStrategicFixEnable]=\"isStrategicFixEnable\" \n [isOldPcipalOff]=\"isOldPcipalOff\" \n [payment] = 'paymentGroup.payments[0]'\n [viewCompStatus]= \"viewStatus\"\n [isNewPcipalOff]=\"isNewPcipalOff\" \n [orderStatus] =\"paymentGroup.payments[0].status\"\n [paidAmount]= \"paymentGroup.payments[0].amount\"\n [isRefundRemission]=\"isRefundRemission\"\n [caseType]=\"caseType\" \n [paymentGroupRef]=\"paymentGroup.payment_group_reference\" \n [ccdCaseNumber]=\"ccdCaseNumber\"></ccpay-add-remission>\n</ng-container>\n<!-- <ng-container *ngIf=\"isTakePayment\">\n <div class=\"govuk-width-container\">\n <div class=\"govuk-breadcrumbs\">\n <ol class=\"govuk-breadcrumbs__list\">\n <li class=\"govuk-breadcrumbs__list-item\">\n <a href=\"#\" (click)=\"goToCaseTransationPage($event)\" class=\"govuk-back-link\">Back</a>\n </li>\n </ol>\n </div>\n \n <main class=\"govuk-main-wrapper govuk-!-padding-top-0\" id=\"main-content\" role=\"main\">\n \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 Payment details could not be retrieved\n </h2>\n <div class=\"govuk-error-summary__body\">\n {{ errorMessage }}\n </div>\n </div>\n </div>\n \n <div class=\"payment-view-alignment\" *ngIf=\"!errorMessage && paymentGroup\">\n \n <input #myInput type='hidden' id='iFrameDrivenImageValue' value='PAYMENTDETAILS'>\n <div class=\"govuk-grid-row\">\n <div class=\"column\">\n <h1 class=\"heading-large govuk-!-margin-top-0\">Payment details</h1>\n </div>\n </div>\n <table>\n <tbody>\n <tr class=\"section\" *ngIf=\"isTurnOff\">\n <td class=\"bold tb-col-w\">Payment group reference</td>\n <td>{{ paymentGroup.payment_group_reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment reference</td>\n <td>{{ paymentGroup.payments[0].reference }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Payment amount</td>\n <td>\u00A3{{ paymentGroup.payments[0].amount | number:'.2' }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup.payments[0] && paymentGroup.payments[0].external_reference\">\n <td class=\"bold tb-col-w\">GovPay Transaction ID</td>\n <td>{{ paymentGroup.payments[0].external_reference }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup.payments[0] && paymentGroup.payments[0].document_control_number && !paymentGroup.payments[0].external_reference\">\n <td class=\"bold tb-col-w\">Payment asset number(DCN)</td>\n <td>{{ paymentGroup.payments[0].document_control_number }}</td>\n </tr>\n <tr class=\"section\" *ngIf=\"paymentGroup.payments[0] && paymentGroup.payments[0].document_control_number && !paymentGroup.payments[0].external_reference\">\n <td class=\"bold tb-col-w\">Banked date</td>\n <td>{{ paymentGroup.payments[0].banked_date | date:'dd MMM yyyy' }}</td>\n </tr>\n </tbody>\n </table>\n \n <div class=\"govuk-grid-row\" *ngIf=\"paymentGroup.fees.length > 0\">\n <div class=\"column\">\n <h2 class=\"heading-large\">Fee and remission details</h2>\n </div>\n </div>\n \n <div *ngFor=\"let fee of paymentGroup.fees\">\n <table class=\"table\">\n <tbody>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Description</td>\n <td>Application for {{ fee.description }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\">Fee code</td>\n <td>{{ fee.code }}</td>\n </tr>\n <tr class=\"section\">\n <td class=\"bold tb-col-w\" [ngClass]=\"{'tr-border': !fee.apportion_amount && !fee.remissions && !isTurnOff }\">Fee amount</td>\n <td [ngClass]=\"{'tr-border': !fee.apportion_amount && !fee.remissions && !isTurnOff }\">\u00A3{{ fee.calculated_amount | number:'.2' }}</td>\n </tr>\n <tr *ngIf=\"fee.net_amount && isTurnOff\">\n <td class=\"bold tb-col-w\" [ngClass]=\"{'tr-border': !fee.apportion_amount && !fee.remissions}\" >Net amount</td>\n <td [ngClass]=\"{'tr-border': !fee.apportion_amount && !fee.remissions}\">\u00A3{{ fee.net_amount | number:'.2' }}</td>\n </tr>\n <tr *ngIf=\"fee.apportion_amount\">\n <td class=\"bold tb-col-w tr-border\" [ngClass]=\"{'tr-border': !fee.remissions}\">Allocated amount</td>\n <td [ngClass]=\"{'tr-border': !fee.remissions}\">\u00A3{{ fee.apportion_amount | number:'.2' }}</td>\n </tr>\n \n <tr *ngIf=\"fee.remissions\">\n <td class=\"bold tb-col-w\">Remission code</td>\n <td>{{fee.remissions.hwf_reference}}</td>\n </tr>\n <tr *ngIf=\"fee.remissions\">\n <td class=\"bold tb-col-w tr-border\">Remission amount</td>\n <td class=\"tr-border\">\u00A3{{ fee.remissions.hwf_amount | number:'.2'}}</td>\n </tr>\n </tbody>\n </table>\n \n </div>\n \n <!-- card details -->\n <!-- <ccpay-card-details *ngIf=\"isCardPayment && !isTelephonyPayment\"></ccpay-card-details>\n -->\n <!-- pba details -->\n <!-- <ccpay-pba-details *ngIf=\"!isCardPayment\" [payment]=\"paymentGroup.payments[0]\"></ccpay-pba-details> -->\n <!-- Status histories -->\n <!-- <ccpay-payment-statuses *ngIf=\"isStatusAllocated\"[isTakePayment]=\"isTakePayment\" ></ccpay-payment-statuses>\n \n </div>\n \n </main>\n </div> -->\n<!-- </ng-container> --> \n",
328
+ styles: [".tb-col-w{width:330px}.tr-border{border-bottom:2px solid}.payment-view-alignment{margin-left:30px}.govuk-button{font-size:19px;float:left;margin-top:2em}.remission{margin-bottom:7em}.govuk-error-summary__title{font-size:24px!important}.govuk-table__cell,.govuk-table__header{padding:0;line-height:1.3}.govuk-table__row{line-height:1.3}.govuk-table__cell:last-child{text-align:right}"]
329
+ }] }
184
330
  ];
185
331
  /** @nocollapse */
186
332
  PaymentViewComponent.ctorParameters = () => [
187
333
  { type: PaymentViewService },
188
- { type: PaymentLibComponent }
334
+ { type: PaymentLibComponent },
335
+ { type: ChangeDetectorRef },
336
+ { type: OrderslistService }
189
337
  ];
338
+ PaymentViewComponent.propDecorators = {
339
+ isTurnOff: [{ type: Input }],
340
+ isTakePayment: [{ type: Input }],
341
+ caseType: [{ type: Input }],
342
+ isNewPcipalOff: [{ type: Input }],
343
+ isOldPcipalOff: [{ type: Input }],
344
+ orderRef: [{ type: Input }],
345
+ orderStatus: [{ type: Input }],
346
+ orderTotalPayments: [{ type: Input }],
347
+ payment: [{ type: Input }],
348
+ LOGGEDINUSERROLES: [{ type: Input, args: ['LOGGEDINUSERROLES',] }]
349
+ };
190
350
  if (false) {
351
+ /** @type {?} */
352
+ PaymentViewComponent.prototype.isTurnOff;
353
+ /** @type {?} */
354
+ PaymentViewComponent.prototype.isTakePayment;
355
+ /** @type {?} */
356
+ PaymentViewComponent.prototype.caseType;
357
+ /** @type {?} */
358
+ PaymentViewComponent.prototype.isNewPcipalOff;
359
+ /** @type {?} */
360
+ PaymentViewComponent.prototype.isOldPcipalOff;
361
+ /** @type {?} */
362
+ PaymentViewComponent.prototype.orderRef;
363
+ /** @type {?} */
364
+ PaymentViewComponent.prototype.orderStatus;
365
+ /** @type {?} */
366
+ PaymentViewComponent.prototype.orderTotalPayments;
367
+ /** @type {?} */
368
+ PaymentViewComponent.prototype.payment;
369
+ /** @type {?} */
370
+ PaymentViewComponent.prototype.LOGGEDINUSERROLES;
191
371
  /** @type {?} */
192
372
  PaymentViewComponent.prototype.paymentGroup;
193
373
  /** @type {?} */
@@ -201,9 +381,50 @@ if (false) {
201
381
  /** @type {?} */
202
382
  PaymentViewComponent.prototype.isStatusAllocated;
203
383
  /** @type {?} */
204
- PaymentViewComponent.prototype.paymentViewService;
384
+ PaymentViewComponent.prototype.isRemissionsMatch;
385
+ /** @type {?} */
386
+ PaymentViewComponent.prototype.feeId;
205
387
  /** @type {?} */
388
+ PaymentViewComponent.prototype.viewStatus;
389
+ /** @type {?} */
390
+ PaymentViewComponent.prototype.isRefundRemission;
391
+ /** @type {?} */
392
+ PaymentViewComponent.prototype.isStrategicFixEnable;
393
+ /** @type {?} */
394
+ PaymentViewComponent.prototype.isAddFeeBtnEnabled;
395
+ /** @type {?} */
396
+ PaymentViewComponent.prototype.isIssueRefunfBtnEnable;
397
+ /** @type {?} */
398
+ PaymentViewComponent.prototype.allowedRolesToAccessRefund;
399
+ /** @type {?} */
400
+ PaymentViewComponent.prototype.remissions;
401
+ /** @type {?} */
402
+ PaymentViewComponent.prototype.remissionFeeAmt;
403
+ /** @type {?} */
404
+ PaymentViewComponent.prototype.isRefundRemissionBtnEnable;
405
+ /** @type {?} */
406
+ PaymentViewComponent.prototype.check4AllowedRoles2AccessRefund;
407
+ /** @type {?} */
408
+ PaymentViewComponent.prototype.allowFurtherAccessAfter4Days;
409
+ /**
410
+ * @type {?}
411
+ * @private
412
+ */
413
+ PaymentViewComponent.prototype.paymentViewService;
414
+ /**
415
+ * @type {?}
416
+ * @private
417
+ */
206
418
  PaymentViewComponent.prototype.paymentLibComponent;
419
+ /**
420
+ * @type {?}
421
+ * @private
422
+ */
423
+ PaymentViewComponent.prototype.cd;
424
+ /**
425
+ * @type {?}
426
+ * @private
427
+ */
428
+ PaymentViewComponent.prototype.OrderslistService;
207
429
  }
208
-
209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50LyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDcEYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7O0FBR2hFLE1BQU0sY0FBYyxHQUFHLHVCQUF1QixDQUFDO0FBcUgvQyxNQUFNOzs7OztJQVFKLFlBQW9CLGtCQUFzQyxFQUN0QztRQURBLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsd0JBQW1CLEdBQW5CLG1CQUFtQjtLQUN0Qzs7OztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLENBQUM7UUFDOUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDO1FBQy9ELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQztRQUdyRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixFQUMzRixJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUyxDQUNqRCxZQUFZLENBQUMsRUFBRTtZQUNiLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FDN0QsZUFBZSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7O1lBQ3RHLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUM7WUFDM0UsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLEtBQUssV0FBVyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7U0FDbkosRUFDRCxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQzFDLENBQUM7S0FFSDs7OztJQUVELElBQUksYUFBYTtRQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDO0tBQ3hEOzs7O0lBRUQsSUFBSSxrQkFBa0I7UUFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxXQUFXLENBQUM7S0FDOUQ7Ozs7SUFFTSxlQUFlO1FBQ3BCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDOzs7Ozs7SUFHckQsc0JBQXNCLENBQUMsS0FBVTtRQUMvQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUE7UUFDdEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQztRQUN4RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUMsU0FBUyxDQUM5QyxRQUFRLENBQUMsRUFBRTs7WUFDVCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssY0FBYyxDQUFDLENBQUM7WUFDcEYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztTQUM1RSxFQUNELEdBQUcsQ0FBQyxFQUFFO1lBQ0osSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7U0FDN0MsQ0FDRixDQUFDO0tBQ0g7OztZQTNLRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtnQkFDOUIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQThHWDtnQkFDQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7YUFDYjs7OztZQXhITyxrQkFBa0I7WUFDbEIsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BheW1lbnRWaWV3U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7UGF5bWVudExpYkNvbXBvbmVudH0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuY29tcG9uZW50JztcbmltcG9ydCB7SVBheW1lbnRHcm91cH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUGF5bWVudEdyb3VwJztcblxuY29uc3QgQlNfRU5BQkxFX0ZMQUcgPSAnYnVsay1zY2FuLWVuYWJsaW5nLWZlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktcGF5bWVudC12aWV3JyxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwiZ292dWstd2lkdGgtY29udGFpbmVyXCI+XG5cbiAgPGRpdiBjbGFzcz1cImdvdnVrLWJyZWFkY3J1bWJzXCI+XG4gICAgPG9sIGNsYXNzPVwiZ292dWstYnJlYWRjcnVtYnNfX2xpc3RcIj5cbiAgICAgIDxsaSBjbGFzcz1cImdvdnVrLWJyZWFkY3J1bWJzX19saXN0LWl0ZW1cIj5cbiAgICAgICAgPGEgaHJlZj1cIiNcIiAoY2xpY2spPVwiZ29Ub0Nhc2VUcmFuc2F0aW9uUGFnZSgkZXZlbnQpXCIgY2xhc3M9XCJnb3Z1ay1iYWNrLWxpbmtcIj5CYWNrPC9hPlxuICAgICAgPC9saT5cbiAgICA8L29sPlxuICA8L2Rpdj5cblxuICA8bWFpbiBjbGFzcz1cImdvdnVrLW1haW4td3JhcHBlciBcIiBpZD1cIm1haW4tY29udGVudFwiIHJvbGU9XCJtYWluXCI+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JNZXNzYWdlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZXJyb3Itc3VtbWFyeVwiIHJvbGU9XCJncm91cFwiIGFyaWEtbGFiZWxsZWRieT1cImZhaWx1cmUtZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICA8aDIgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bSBlcnJvci1zdW1tYXJ5LWhlYWRpbmdcIiBpZD1cImZhaWx1cmUtZXJyb3Itc3VtbWFyeS1oZWFkaW5nXCI+XG4gICAgICAgICAgUGF5bWVudCBkZXRhaWxzIGNvdWxkIG5vdCBiZSByZXRyaWV2ZWRcbiAgICAgICAgPC9oMj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWVycm9yLXN1bW1hcnlfX2JvZHlcIj5cbiAgICAgICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCIhZXJyb3JNZXNzYWdlICYmIHBheW1lbnRHcm91cFwiPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZ292dWstZ3JpZC1yb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtblwiPlxuICAgICAgICAgIDxoMSBjbGFzcz1cImhlYWRpbmctbWVkaXVtXCI+UGF5bWVudCBkZXRhaWxzPC9oMT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGhyIGNsYXNzPVwiZ292dWstc2VjdGlvbi1icmVhayBnb3Z1ay1zZWN0aW9uLWJyZWFrLS1tIGdvdnVrLXNlY3Rpb24tYnJlYWstLXZpc2libGVcIj4gXG4gICAgICA8dGFibGU+XG4gICAgICAgIDx0Ym9keT5cbiAgICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGRcIiB3aWR0aD1cIjMzMHB4XCI+UGF5bWVudCBncm91cCByZWZlcmVuY2U8L3RkPlxuICAgICAgICAgIDx0ZD57eyBwYXltZW50R3JvdXAucGF5bWVudF9ncm91cF9yZWZlcmVuY2UgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZFwiIHdpZHRoPVwiMzMwcHhcIj5QYXltZW50IHJlZmVyZW5jZTwvdGQ+XG4gICAgICAgICAgPHRkPnt7IHBheW1lbnRHcm91cC5wYXltZW50c1swXS5yZWZlcmVuY2UgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZFwiIHdpZHRoPVwiMzMwcHhcIj5Ub3RhbCBwYXltZW50IGFtb3VudDwvdGQ+XG4gICAgICAgICAgPHRkPsKje3sgcGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLmFtb3VudCB8IG51bWJlcjonLjInIH19PC90ZD5cbiAgICAgICAgPC90cj5cblxuICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCIgKm5nSWY9XCJwYXltZW50R3JvdXAucGF5bWVudHNbMF0gJiYgcGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLmRvY3VtZW50X2NvbnRyb2xfbnVtYmVyXCI+XG4gICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZFwiIHdpZHRoPVwiMzMwcHhcIj5QYXltZW50IGFzc2V0IG51bWJlcihEQ04pPC90ZD5cbiAgICAgICAgICA8dGQ+e3sgcGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLmRvY3VtZW50X2NvbnRyb2xfbnVtYmVyIH19PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiICpuZ0lmPVwicGF5bWVudEdyb3VwLnBheW1lbnRzWzBdICYmIHBheW1lbnRHcm91cC5wYXltZW50c1swXS5kb2N1bWVudF9jb250cm9sX251bWJlclwiPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGRcIiB3aWR0aD1cIjMzMHB4XCI+QmFua2VkIGRhdGU8L3RkPlxuICAgICAgICAgIDx0ZD57eyBwYXltZW50R3JvdXAucGF5bWVudHNbMF0uYmFua2VkX2RhdGUgfCBkYXRlOidkZCBNTU0geXl5eScgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgPC90YWJsZT5cblxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWdyaWQtcm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cbiAgICAgICAgICA8aDIgY2xhc3M9XCJoZWFkaW5nLW1lZGl1bVwiPkZlZSBhbmQgcmVtaXNzaW9uIGRldGFpbHM8L2gyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmZWUgb2YgcGF5bWVudEdyb3VwLmZlZXNcIj5cbiAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGVcIj5cbiAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZFwiIHdpZHRoPVwiMzMwcHhcIj5EZXNjcmlwdGlvbjwvdGQ+XG4gICAgICAgICAgICA8dGQ+QXBwbGljYXRpb24gZm9yIHt7IGZlZS5kZXNjcmlwdGlvbiB9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkXCIgd2lkdGg9XCIzMzBweFwiPkZlZSBjb2RlPC90ZD5cbiAgICAgICAgICAgIDx0ZD57eyBmZWUuY29kZSB9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHIgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkXCIgd2lkdGg9XCIzMzBweFwiPkZlZSBhbW91bnQ8L3RkPlxuICAgICAgICAgICAgPHRkPsKje3sgZmVlLmNhbGN1bGF0ZWRfYW1vdW50IHwgbnVtYmVyOicuMicgfX08L3RkPlxuICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPHRyICpuZ0lmPVwiZmVlLm5ldF9hbW91bnRcIj5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImJvbGRcIiB3aWR0aD1cIjMzMHB4XCI+TmV0IGFtb3VudDwvdGQ+XG4gICAgICAgICAgICA8dGQ+wqN7eyBmZWUubmV0X2Ftb3VudCB8IG51bWJlcjonLjInIH19PC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDx0ciAqbmdJZj1cInBheW1lbnRHcm91cC5yZW1pc3Npb25zPy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJib2xkXCIgd2lkdGg9XCIzMzBweFwiPlJlbWlzc2lvbiBjb2RlPC90ZD5cbiAgICAgICAgICAgIDx0ZD57e3BheW1lbnRHcm91cC5yZW1pc3Npb25zWzBdLmh3Zl9yZWZlcmVuY2V9fTwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICA8dHIgKm5nSWY9XCJwYXltZW50R3JvdXAucmVtaXNzaW9ucz8ubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYm9sZFwiIHdpZHRoPVwiMzMwcHhcIj5SZW1pc3Npb24gYW1vdW50PC90ZD5cbiAgICAgICAgICAgIDx0ZD7Co3t7IHBheW1lbnRHcm91cC5yZW1pc3Npb25zWzBdLmh3Zl9hbW91bnQgfCBudW1iZXI6Jy4yJ319PC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG5cbiAgICAgICAgPGhyIGNsYXNzPVwiZ292dWstc2VjdGlvbi1icmVhayBnb3Z1ay1zZWN0aW9uLWJyZWFrLS1tIGdvdnVrLXNlY3Rpb24tYnJlYWstLXZpc2libGVcIj4gXG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBjYXJkIGRldGFpbHMgLS0+XG4gICAgICA8Y2NwYXktY2FyZC1kZXRhaWxzICpuZ0lmPVwiaXNDYXJkUGF5bWVudCAmJiAhaXNUZWxlcGhvbnlQYXltZW50XCI+PC9jY3BheS1jYXJkLWRldGFpbHM+XG5cbiAgICAgIDwhLS0gcGJhIGRldGFpbHMgLS0+XG4gICAgICA8Y2NwYXktcGJhLWRldGFpbHMgKm5nSWY9XCIhaXNDYXJkUGF5bWVudFwiIFtwYXltZW50XT1cInBheW1lbnRHcm91cC5wYXltZW50c1swXVwiPjwvY2NwYXktcGJhLWRldGFpbHM+XG5cbiAgICAgIDwhLS0gU3RhdHVzIGhpc3RvcmllcyAtLT5cbiAgICAgIDxjY3BheS1wYXltZW50LXN0YXR1c2VzICpuZ0lmPVwiaXNTdGF0dXNBbGxvY2F0ZWRcIj48L2NjcGF5LXBheW1lbnQtc3RhdHVzZXM+XG5cbiAgICA8L2Rpdj5cblxuICA8L21haW4+XG48L2Rpdj5cbmAsXG4gIHN0eWxlczogW2BgXVxufSlcbmV4cG9ydCBjbGFzcyBQYXltZW50Vmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHBheW1lbnRHcm91cDogSVBheW1lbnRHcm91cDtcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gIGNjZENhc2VOdW1iZXI6IHN0cmluZztcbiAgc2VsZWN0ZWRPcHRpb246IHN0cmluZztcbiAgZGNuTnVtYmVyOiBzdHJpbmc7XG4gIGlzU3RhdHVzQWxsb2NhdGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGF5bWVudFZpZXdTZXJ2aWNlOiBQYXltZW50Vmlld1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgcGF5bWVudExpYkNvbXBvbmVudDogUGF5bWVudExpYkNvbXBvbmVudCkge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFTEVDVEVEX09QVElPTjtcbiAgICB0aGlzLmRjbk51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5EQ05fTlVNQkVSO1xuXG5cbiAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5nZXRQYXltZW50R3JvdXBEZXRhaWxzKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50R3JvdXBSZWZlcmVuY2UsXG4gICAgICB0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudE1ldGhvZCkuc3Vic2NyaWJlKFxuICAgICAgcGF5bWVudEdyb3VwID0+IHtcbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAgPSBwYXltZW50R3JvdXA7XG4gICAgICAgIHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHMuZmlsdGVyXG4gICAgICAgIChwYXltZW50R3JvdXBPYmogPT4gcGF5bWVudEdyb3VwT2JqWydyZWZlcmVuY2UnXS5pbmNsdWRlcyh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudFJlZmVyZW5jZSkpO1xuICAgICAgICBjb25zdCBwYXltZW50QWxsb2NhdGlvbiA9IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLnBheW1lbnRfYWxsb2NhdGlvbjtcbiAgICAgICAgdGhpcy5pc1N0YXR1c0FsbG9jYXRlZCA9IHBheW1lbnRBbGxvY2F0aW9uLmxlbmd0aCA+IDAgJiYgcGF5bWVudEFsbG9jYXRpb25bMF0uYWxsb2NhdGlvbl9zdGF0dXMgPT09ICdBbGxvY2F0ZWQnIHx8IHBheW1lbnRBbGxvY2F0aW9uLmxlbmd0aCA9PT0gMDtcbiAgICAgIH0sICBcbiAgICAgIChlcnJvcjogYW55KSA9PiB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yXG4gICAgKTtcbiAgIFxuICB9XG5cbiAgZ2V0IGlzQ2FyZFBheW1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLm1ldGhvZCA9PT0gJ2NhcmQnO1xuICB9XG5cbiAgZ2V0IGlzVGVsZXBob255UGF5bWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0uY2hhbm5lbCA9PT0gJ3RlbGVwaG9ueSc7XG4gIH1cblxuICBwdWJsaWMgZ29Ub1BheW1lbnRMaXN0KCk6IHZvaWQge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdwYXltZW50LWxpc3QnO1xuICB9XG5cbiAgZ29Ub0Nhc2VUcmFuc2F0aW9uUGFnZShldmVudDogYW55KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZ2V0QlNmZWF0dXJlKCkuc3Vic2NyaWJlKFxuICAgICAgZmVhdHVyZXMgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gSlNPTi5wYXJzZShmZWF0dXJlcykuZmlsdGVyKGZlYXR1cmUgPT4gZmVhdHVyZS51aWQgPT09IEJTX0VOQUJMRV9GTEFHKTtcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSByZXN1bHRbMF0gPyByZXN1bHRbMF0uZW5hYmxlIDogZmFsc2U7XG4gICAgICB9LFxuICAgICAgZXJyID0+IHtcbiAgICAgICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbn1cbiJdfQ==
430
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bWVudC12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BobWN0cy9jY3BheS13ZWItY29tcG9uZW50LyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztNQUs1RCxjQUFjLEdBQUcsdUJBQXVCO0FBQzlDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQU90RSxNQUFNLE9BQU8sb0JBQW9COzs7Ozs7O0lBOEIvQixZQUFvQixrQkFBc0MsRUFDaEQsbUJBQXdDLEVBQ3hDLEVBQXFCLEVBQ3JCLGlCQUFvQztRQUgxQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ2hELHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUFDckIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQVo5QyxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFFbkMsdUJBQWtCLEdBQVksS0FBSyxDQUFDO1FBQ3BDLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUN4QywrQkFBMEIsR0FBRyxDQUFDLDBCQUEwQixFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDN0UsZUFBVSxHQUFpQixFQUFFLENBQUM7UUEwTTlCLG9DQUErQjs7O1FBQUcsR0FBWSxFQUFFO1lBQzlDLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUk7Ozs7WUFBQyxJQUFJLENB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QUM7U0FFYjthQUFNO1lBQ0wsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7OztZQXZPRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtnQkFDOUIsMGhmQUE0Qzs7YUFFN0M7Ozs7WUFkUSxrQkFBa0I7WUFDbEIsbUJBQW1CO1lBTW5CLGlCQUFpQjtZQUNqQixpQkFBaUI7Ozt3QkFRdkIsS0FBSzs0QkFDTCxLQUFLO3VCQUNMLEtBQUs7NkJBQ0wsS0FBSzs2QkFDTCxLQUFLO3VCQUNMLEtBQUs7MEJBQ0wsS0FBSztpQ0FDTCxLQUFLO3NCQUNMLEtBQUs7Z0NBQ0wsS0FBSyxTQUFDLG1CQUFtQjs7OztJQVQxQix5Q0FBNEI7O0lBQzVCLDZDQUFnQzs7SUFDaEMsd0NBQTJCOztJQUMzQiw4Q0FBaUM7O0lBQ2pDLDhDQUFpQzs7SUFDakMsd0NBQTJCOztJQUMzQiwyQ0FBOEI7O0lBQzlCLGtEQUFxQzs7SUFDckMsdUNBQTJCOztJQUMzQixpREFBd0Q7O0lBRXhELDRDQUE0Qjs7SUFDNUIsNENBQXFCOztJQUNyQiw2Q0FBc0I7O0lBQ3RCLDhDQUF1Qjs7SUFDdkIseUNBQWtCOztJQUNsQixpREFBMkI7O0lBQzNCLGlEQUEyQjs7SUFDM0IscUNBQVk7O0lBQ1osMENBQW1COztJQUNuQixpREFBbUM7O0lBQ25DLG9EQUE4Qjs7SUFDOUIsa0RBQW9DOztJQUNwQyxzREFBd0M7O0lBQ3hDLDBEQUE2RTs7SUFDN0UsMENBQThCOztJQUM5QiwrQ0FBd0I7O0lBQ3hCLDBEQUFvQzs7SUF3TXBDLCtEQUlDOztJQUVELDREQUlDOzs7OztJQWhOVyxrREFBOEM7Ozs7O0lBQ3hELG1EQUFnRDs7Ozs7SUFDaEQsa0NBQTZCOzs7OztJQUM3QixpREFBNEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBheW1lbnRWaWV3U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BheW1lbnQtdmlldy9wYXltZW50LXZpZXcuc2VydmljZSc7XG5pbXBvcnQgeyBQYXltZW50TGliQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcGF5bWVudC1saWIuY29tcG9uZW50JztcbmltcG9ydCB7IElQYXltZW50R3JvdXAgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50R3JvdXAnO1xuaW1wb3J0IHsgSUZlZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSUZlZSc7XG5pbXBvcnQgeyBJUGF5bWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVBheW1lbnQnO1xuaW1wb3J0IHsgSVJlbWlzc2lvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVJlbWlzc2lvbic7XG5jb25zdCBCU19FTkFCTEVfRkxBRyA9ICdidWxrLXNjYW4tZW5hYmxpbmctZmUnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9yZGVyc2xpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb3JkZXJzbGlzdC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NwYXktcGF5bWVudC12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BheW1lbnQtdmlldy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BheW1lbnQtdmlldy5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUGF5bWVudFZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBpc1R1cm5PZmY6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzVGFrZVBheW1lbnQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNhc2VUeXBlOiBib29sZWFuO1xuICBASW5wdXQoKSBpc05ld1BjaXBhbE9mZjogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNPbGRQY2lwYWxPZmY6IGJvb2xlYW47XG4gIEBJbnB1dCgpIG9yZGVyUmVmOiBib29sZWFuO1xuICBASW5wdXQoKSBvcmRlclN0YXR1czogYm9vbGVhbjtcbiAgQElucHV0KCkgb3JkZXJUb3RhbFBheW1lbnRzOiBib29sZWFuO1xuICBASW5wdXQoKSBwYXltZW50OiBJUGF5bWVudDtcbiAgQElucHV0KCdMT0dHRURJTlVTRVJST0xFUycpIExPR0dFRElOVVNFUlJPTEVTOiBzdHJpbmdbXTtcblxuICBwYXltZW50R3JvdXA6IElQYXltZW50R3JvdXA7XG4gIGVycm9yTWVzc2FnZTogc3RyaW5nO1xuICBjY2RDYXNlTnVtYmVyOiBzdHJpbmc7XG4gIHNlbGVjdGVkT3B0aW9uOiBzdHJpbmc7XG4gIGRjbk51bWJlcjogc3RyaW5nO1xuICBpc1N0YXR1c0FsbG9jYXRlZDogYm9vbGVhbjtcbiAgaXNSZW1pc3Npb25zTWF0Y2g6IGJvb2xlYW47XG4gIGZlZUlkOiBJRmVlO1xuICB2aWV3U3RhdHVzOiBzdHJpbmc7XG4gIGlzUmVmdW5kUmVtaXNzaW9uOiBib29sZWFuID0gZmFsc2U7XG4gIGlzU3RyYXRlZ2ljRml4RW5hYmxlOiBib29sZWFuO1xuICBpc0FkZEZlZUJ0bkVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNJc3N1ZVJlZnVuZkJ0bkVuYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBhbGxvd2VkUm9sZXNUb0FjY2Vzc1JlZnVuZCA9IFsncGF5bWVudHMtcmVmdW5kLWFwcHJvdmVyJywgJ3BheW1lbnRzLXJlZnVuZCddO1xuICByZW1pc3Npb25zOiBJUmVtaXNzaW9uW10gPSBbXTtcbiAgcmVtaXNzaW9uRmVlQW10OiBudW1iZXI7XG4gIGlzUmVmdW5kUmVtaXNzaW9uQnRuRW5hYmxlOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGF5bWVudFZpZXdTZXJ2aWNlOiBQYXltZW50Vmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBwYXltZW50TGliQ29tcG9uZW50OiBQYXltZW50TGliQ29tcG9uZW50LFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgT3JkZXJzbGlzdFNlcnZpY2U6IE9yZGVyc2xpc3RTZXJ2aWNlKSB7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gfSAgXG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jY2RDYXNlTnVtYmVyID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LkNDRF9DQVNFX05VTUJFUjtcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LlNFTEVDVEVEX09QVElPTjtcbiAgICB0aGlzLmRjbk51bWJlciA9IHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5EQ05fTlVNQkVSO1xuICAgIHRoaXMuaXNUdXJuT2ZmID0gdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTVFVSTk9GRjtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAncGF5bWVudHZpZXcnO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldEFwcG9ydGlvblBheW1lbnREZXRhaWxzKHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5wYXltZW50UmVmZXJlbmNlKS5zdWJzY3JpYmUoXG4gICAgICBwYXltZW50R3JvdXAgPT4ge1xuICAgICAgICBsZXQgZmVlcyA9IFtdO1xuICAgICAgICBwYXltZW50R3JvdXAuZmVlcy5mb3JFYWNoKGZlZSA9PiB7XG4gICAgICAgICAgdGhpcy5pc1JlbWlzc2lvbnNNYXRjaCA9IGZhbHNlO1xuXG4gICAgICAgICAgcGF5bWVudEdyb3VwLnJlbWlzc2lvbnMuZm9yRWFjaChyZW0gPT4ge1xuICAgICAgICAgICAgaWYgKHJlbS5mZWVfY29kZSA9PT0gZmVlLmNvZGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5pc1JlbWlzc2lvbnNNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgIGZlZVsncmVtaXNzaW9ucyddID0gcmVtO1xuICAgICAgICAgICAgICBmZWVzLnB1c2goZmVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoIXRoaXMuaXNSZW1pc3Npb25zTWF0Y2gpIHtcbiAgICAgICAgICAgIGZlZXMucHVzaChmZWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHBheW1lbnRHcm91cC5mZWVzID0gZmVlc1xuICAgICAgICB0aGlzLnBheW1lbnRHcm91cCA9IHBheW1lbnRHcm91cDtcblxuICAgICAgICB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cyA9IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzLmZpbHRlclxuICAgICAgICAgIChwYXltZW50R3JvdXBPYmogPT4gcGF5bWVudEdyb3VwT2JqWydyZWZlcmVuY2UnXS5pbmNsdWRlcyh0aGlzLnBheW1lbnRMaWJDb21wb25lbnQucGF5bWVudFJlZmVyZW5jZSkpO1xuICAgICAgICBjb25zdCBwYXltZW50QWxsb2NhdGlvbiA9IHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLnBheW1lbnRfYWxsb2NhdGlvbjtcbiAgICAgICAgdGhpcy5pc1N0YXR1c0FsbG9jYXRlZCA9IHBheW1lbnRBbGxvY2F0aW9uLmxlbmd0aCA+IDAgJiYgcGF5bWVudEFsbG9jYXRpb25bMF0uYWxsb2NhdGlvbl9zdGF0dXMgPT09ICdBbGxvY2F0ZWQnIHx8IHBheW1lbnRBbGxvY2F0aW9uLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0gKyAnMScpO1xuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yXG4gICAgKTtcblxuICB9XG5cbiAgZ2V0IGlzQ2FyZFBheW1lbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLm1ldGhvZCA9PT0gJ2NhcmQnO1xuICB9XG5cbiAgZ2V0IGlzVGVsZXBob255UGF5bWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0uY2hhbm5lbCA9PT0gJ3RlbGVwaG9ueSc7XG4gIH1cblxuICBwdWJsaWMgZ29Ub1BheW1lbnRMaXN0KCk6IHZvaWQge1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdwYXltZW50LWxpc3QnO1xuICB9XG5cbiAgZ29Ub0Nhc2VUcmFuc2F0aW9uUGFnZShldmVudDogYW55KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLk9yZGVyc2xpc3RTZXJ2aWNlLnNldG5hdmlnYXRpb25QYWdlKCdjYXNldHJhbnNhY3Rpb25zJyk7XG4gICAgdGhpcy5PcmRlcnNsaXN0U2VydmljZS5zZXRpc0Zyb21TZXJ2aWNlUmVxdWVzdFBhZ2UoZmFsc2UpO1xuICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC52aWV3TmFtZSA9ICdjYXNlLXRyYW5zYWN0aW9ucyc7XG4gICAgdGhpcy5wYXltZW50TGliQ29tcG9uZW50LklTQlNFTkFCTEUgPSB0cnVlO1xuICAgIC8vIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldEJTZmVhdHVyZSgpLnN1YnNjcmliZShcbiAgICAvLyAgIGZlYXR1cmVzID0+IHtcbiAgICAvLyAgICAgbGV0IHJlc3VsdCA9IEpTT04ucGFyc2UoZmVhdHVyZXMpLmZpbHRlcihmZWF0dXJlID0+IGZlYXR1cmUudWlkID09PSBCU19FTkFCTEVfRkxBRyk7XG4gICAgLy8gICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gcmVzdWx0WzBdID8gcmVzdWx0WzBdLmVuYWJsZSA6IGZhbHNlO1xuICAgIC8vICAgfSxcbiAgICAvLyAgIGVyciA9PiB7XG4gICAgLy8gICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5JU0JTRU5BQkxFID0gZmFsc2U7XG4gICAgLy8gICB9XG4gICAgLy8gKTtcbiAgfVxuXG4gIGFkZFJlbWlzc2lvbihmZWU6IElGZWUpIHtcbiAgICBpZih0aGlzLmNoa0ZvckFkZFJlbWlzc2lvbihmZWUuY29kZSkpIHtcbiAgICB0aGlzLmZlZUlkID0gZmVlO1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldEFwcG9ydGlvblBheW1lbnREZXRhaWxzKHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzWzBdLnJlZmVyZW5jZSkuc3Vic2NyaWJlKFxuICAgICAgcGF5bWVudEdyb3VwID0+IHtcbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAgPSBwYXltZW50R3JvdXA7XG5cbiAgICAgICAgdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHMgPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cy5maWx0ZXJcbiAgICAgICAgICAocGF5bWVudEdyb3VwT2JqID0+IHBheW1lbnRHcm91cE9ialsncmVmZXJlbmNlJ10uaW5jbHVkZXModGhpcy5wYXltZW50TGliQ29tcG9uZW50LnBheW1lbnRSZWZlcmVuY2UpKTtcbiAgICAgICAgdGhpcy5wYXltZW50ID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF07XG4gICAgICAgIHRoaXMucGF5bWVudExpYkNvbXBvbmVudC5pc0Zyb21QYXltZW50RGV0YWlsUGFnZSA9IHRydWU7XG4gICAgICAgIHRoaXMudmlld1N0YXR1cyA9ICdhZGRyZW1pc3Npb24nO1xuICAgICAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgICAgKGVycm9yOiBhbnkpID0+IHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3JcbiAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrRm9yRmVlcyhwYXltZW50R3JvdXA6IGFueSkge1xuICAgIGlmKHBheW1lbnRHcm91cCAhPT0gbnVsbCAmJiBwYXltZW50R3JvdXAgIT09IHVuZGVmaW5lZClcbiAgICB7XG4gICAgICBpZiAocGF5bWVudEdyb3VwLmZlZXMgIT09IG51bGwgJiYgcGF5bWVudEdyb3VwLmZlZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgXG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGFkZFJlZnVuZEZvclJlbWlzc2lvbihwYXltZW50OiBJUGF5bWVudCwgcmVtaXNzaW9uOiBJUmVtaXNzaW9uW10sZmVlczphbnkpIHtcbiBpZih0aGlzLmNoa0lzUmVmdW5kUmVtaXNzaW9uQnRuRW5hYmxlKCkpIHtcbiAgICB0aGlzLnBheW1lbnQgPSBwYXltZW50O1xuICAgIHRoaXMucGF5bWVudFZpZXdTZXJ2aWNlLmdldEFwcG9ydGlvblBheW1lbnREZXRhaWxzKHRoaXMucGF5bWVudC5yZWZlcmVuY2UpLnN1YnNjcmliZShcbiAgICAgIHBheW1lbnRHcm91cCA9PiB7XG4gICAgICAgIHRoaXMucGF5bWVudEdyb3VwID0gcGF5bWVudEdyb3VwO1xuXG4gICAgICAgIHRoaXMucGF5bWVudEdyb3VwLnBheW1lbnRzID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHMuZmlsdGVyXG4gICAgICAgICAgKHBheW1lbnRHcm91cE9iaiA9PiBwYXltZW50R3JvdXBPYmpbJ3JlZmVyZW5jZSddLmluY2x1ZGVzKHRoaXMucGF5bWVudC5yZWZlcmVuY2UpKTtcbiAgICAgICAgdGhpcy5wYXltZW50ID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF07XG4gICAgICAgIHRoaXMucmVtaXNzaW9ucyA9IHJlbWlzc2lvbjtcbiAgICAgICAgdGhpcy5yZW1pc3Npb25GZWVBbXQgPSBmZWVzLmZpbHRlcihkYXRhPT5kYXRhLmNvZGUgPT09IHRoaXMucmVtaXNzaW9uc1snZmVlX2NvZGUnXSlbMF0ubmV0X2Ftb3VudDtcbiAgICAgICAgdGhpcy52aWV3U3RhdHVzID0gJ2FkZHJlZnVuZGZvcnJlbWlzc2lvbic7XG4gICAgICAgIC8vIGNvbnN0IHBheW1lbnRBbGxvY2F0aW9uID0gdGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0ucGF5bWVudF9hbGxvY2F0aW9uO1xuICAgICAgICAvLyB0aGlzLmlzU3RhdHVzQWxsb2NhdGVkID0gcGF5bWVudEFsbG9jYXRpb24ubGVuZ3RoID4gMCAmJiBwYXltZW50QWxsb2NhdGlvblswXS5hbGxvY2F0aW9uX3N0YXR1cyA9PT0gJ0FsbG9jYXRlZCcgfHwgcGF5bWVudEFsbG9jYXRpb24ubGVuZ3RoID09PSAwO1xuICAgICAgfSxcbiAgICAgIChlcnJvcjogYW55KSA9PiB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yXG4gICAgKTtcbiB9XG4gIH1cblxuICBjaGtJc1JlZnVuZFJlbWlzc2lvbkJ0bkVuYWJsZSgpOiBib29sZWFuIHtcbiAgICB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50cy5mb3JFYWNoKHBheW1lbnQgPT4ge1xuICAgICAgICAgIGlmIChwYXltZW50Lm1ldGhvZC50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAncGF5bWVudCBieSBhY2NvdW50JyAmJiBwYXltZW50LnN0YXR1cy50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAnc3VjY2VzcycgJiYgdGhpcy5hbGxvd0Z1cnRoZXJBY2Nlc3NBZnRlcjREYXlzKHBheW1lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLmlzUmVmdW5kUmVtaXNzaW9uQnRuRW5hYmxlID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIGlmICh0aGlzLmlzUmVmdW5kUmVtaXNzaW9uQnRuRW5hYmxlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gIH1cblxuICBpc3N1ZVJlZnVuZChwYXltZW50Z3JwOiBJUGF5bWVudEdyb3VwKSB7XG4gICAgaWYodGhpcy5jaGtJc3N1ZVJlZnVuZEJ0bkVuYWJsZShwYXltZW50Z3JwLnBheW1lbnRzWzBdKSkge1xuICAgIHRoaXMucGF5bWVudEdyb3VwID0gcGF5bWVudGdycDtcbiAgICB0aGlzLnZpZXdTdGF0dXMgPSAnaXNzdWVyZWZ1bmQnO1xuICAgIHRoaXMuaXNSZWZ1bmRSZW1pc3Npb24gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGdldFJlbWlzc2lvbkJ5RmVlQ29kZShmZWVDb2RlOiBzdHJpbmcsIHJlbWlzc2lvbnM6IElSZW1pc3Npb25bXSk6IElSZW1pc3Npb24ge1xuICAgIGlmIChyZW1pc3Npb25zICYmIHJlbWlzc2lvbnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCByZW1pc3Npb24gb2YgcmVtaXNzaW9ucykge1xuICAgICAgICBpZiAocmVtaXNzaW9uLmZlZV9jb2RlID09PSBmZWVDb2RlKSB7XG4gICAgICAgICAgcmV0dXJuIHJlbWlzc2lvbjtcbiAgICAgICAgICAvLyB0aGlzLmlzQWRkRmVlQnRuRW5hYmxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjaGtJc3N1ZVJlZnVuZEJ0bkVuYWJsZShwYXltZW50OiBJUGF5bWVudCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNoZWNrNEFsbG93ZWRSb2xlczJBY2Nlc3NSZWZ1bmQoKSAmJiB0aGlzLmFsbG93RnVydGhlckFjY2Vzc0FmdGVyNERheXMocGF5bWVudCkgJiZcbiAgICAgIHBheW1lbnQubWV0aG9kID09PSAncGF5bWVudCBieSBhY2NvdW50JyAmJiBwYXltZW50LnN0YXR1cy50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSAnc3VjY2VzcycpIHtcbiAgICAgIHRoaXMuaXNJc3N1ZVJlZnVuZkJ0bkVuYWJsZSA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzSXNzdWVSZWZ1bmZCdG5FbmFibGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgfVxuXG4gIGNoa0ZvclBCQVBheW1lbnQoKTogYm9vbGVhbiB7XG4gICAgbGV0IHBheW1lbnQgPSB0aGlzLnBheW1lbnRHcm91cC5wYXltZW50c1swXTtcbiAgICBpZiAocGF5bWVudC5tZXRob2QudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gJ3BheW1lbnQgYnkgYWNjb3VudCcgJiYgdGhpcy5hbGxvd0Z1cnRoZXJBY2Nlc3NBZnRlcjREYXlzKHBheW1lbnQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY2hrRm9yQWRkUmVtaXNzaW9uKGZlZUNvZGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmNoa0ZvclBCQVBheW1lbnQoKSAmJiB0aGlzLmNoZWNrNEFsbG93ZWRSb2xlczJBY2Nlc3NSZWZ1bmQoKSAmJiB0aGlzLmFsbG93RnVydGhlckFjY2Vzc0FmdGVyNERheXModGhpcy5wYXltZW50R3JvdXAucGF5bWVudHNbMF0pKSB7XG4gICAgICBpZiAodGhpcy5wYXltZW50R3JvdXAucmVtaXNzaW9ucyAmJiB0aGlzLnBheW1lbnRHcm91cC5yZW1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yIChjb25zdCByZW1pc3Npb24gb2YgdGhpcy5wYXltZW50R3JvdXAucmVtaXNzaW9ucykge1xuICAgICAgICAgIGlmIChyZW1pc3Npb24uZmVlX2NvZGUgPT09IGZlZUNvZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgY2hlY2s0QWxsb3dlZFJvbGVzMkFjY2Vzc1JlZnVuZCA9ICgpOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gdGhpcy5hbGxvd2VkUm9sZXNUb0FjY2Vzc1JlZnVuZC5zb21lKHJvbGUgPT5cbiAgICAgIHRoaXMuTE9HR0VESU5VU0VSUk9MRVMuaW5kZXhPZihyb2xlKSAhPT0gLTFcbiAgICApO1xuICB9XG5cbiAgYWxsb3dGdXJ0aGVyQWNjZXNzQWZ0ZXI0RGF5cyA9IChwYXltZW50OiBJUGF5bWVudCk6IGJvb2xlYW4gPT4ge1xuICAgIGxldCB0bXA0RGF5QWdvID0gbmV3IERhdGUoKTtcbiAgICB0bXA0RGF5QWdvLnNldERhdGUodG1wNERheUFnby5nZXREYXRlKCkgLSA0KTtcbiAgICByZXR1cm4gdG1wNERheUFnbyA+PSBuZXcgRGF0ZShwYXltZW50LmRhdGVfY3JlYXRlZCk7XG4gIH1cbn0iXX0=