iptdevs-design-system 3.1.4395 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/esm2020/lib/cod/cod-form/cod-form.component.mjs +34 -21
  2. package/esm2020/lib/cod/logic/calculate-quotes.service.mjs +73 -53
  3. package/esm2020/lib/cod/modal-referred/modal-referred.component.mjs +2 -2
  4. package/esm2020/lib/cod/steps/cod-form-step-five/cod-form-step-five.component.mjs +18 -24
  5. package/esm2020/lib/cod/steps/cod-form-step-four/cod-form-step-four.component.mjs +85 -76
  6. package/esm2020/lib/cod/steps/cod-form-step-one/cod-form-step-one.component.mjs +225 -92
  7. package/esm2020/lib/cod/steps/cod-form-step-three/cod-form-step-three.component.mjs +14 -18
  8. package/esm2020/lib/cod/steps/cod-form-step-two/cod-form-step-two.component.mjs +95 -70
  9. package/esm2020/lib/cod-self-managed/cod-form-self-managed/cod-self-managed.component.mjs +190 -22
  10. package/esm2020/lib/cod-self-managed/cod-self-managed.module.mjs +28 -4
  11. package/esm2020/lib/cod-self-managed/logic/calculate-quotes.service.mjs +99 -0
  12. package/esm2020/lib/cod-self-managed/logic/cod-self-managed-controls.mjs +16 -44
  13. package/esm2020/lib/cod-self-managed/logic/cod-self-managed-steps.mjs +1 -1
  14. package/esm2020/lib/cod-self-managed/steps/cod-form-step-four/cod-self-form-step-four.component.mjs +244 -7
  15. package/esm2020/lib/cod-self-managed/steps/cod-form-step-one/cod-self-form-step-one.component.mjs +102 -18
  16. package/esm2020/lib/cod-self-managed/steps/cod-form-step-three/cod-self-form-step-three.component.mjs +255 -7
  17. package/esm2020/lib/cod-self-managed/steps/cod-form-step-two/cod-self-form-step-two.component.mjs +144 -32
  18. package/esm2020/lib/components/atoms/button/button.component.mjs +2 -2
  19. package/esm2020/lib/components/atoms/datalist/datalist.component.mjs +26 -17
  20. package/esm2020/lib/components/atoms/input/input.component.mjs +2 -2
  21. package/esm2020/lib/components/atoms/level-button/level-button.component.mjs +2 -2
  22. package/esm2020/lib/components/atoms/loader/loader.component.mjs +2 -2
  23. package/esm2020/lib/components/atoms/select/select.component.mjs +10 -8
  24. package/esm2020/lib/components/components.module.mjs +54 -8
  25. package/esm2020/lib/components/forms/create-user-form/create-user-form.component.mjs +3 -3
  26. package/esm2020/lib/components/forms/update-user-form/update-user-form.component.mjs +843 -0
  27. package/esm2020/lib/components/molecules/card-course/card-course.component.mjs +95 -0
  28. package/esm2020/lib/components/molecules/card-select-course/card-select-course.component.mjs +52 -0
  29. package/esm2020/lib/components/molecules/sidenav/sidenav.component.mjs +5 -5
  30. package/esm2020/lib/core/core.module.mjs +9 -3
  31. package/esm2020/lib/core/models/academic/academic.component.mjs +1 -1
  32. package/esm2020/lib/core/models/announcement/announcement-user-rq.model.mjs +2 -0
  33. package/esm2020/lib/core/models/announcement/announcement-user-rs.model.mjs +3 -0
  34. package/esm2020/lib/core/models/attendance/attendance.interface.mjs +1 -1
  35. package/esm2020/lib/core/models/budget/budget.model.mjs +1 -1
  36. package/esm2020/lib/core/models/cod/cod-rq.model.mjs +1 -1
  37. package/esm2020/lib/core/models/commercial/commercial.model.mjs +1 -1
  38. package/esm2020/lib/core/models/course/course-rq.model.mjs +1 -1
  39. package/esm2020/lib/core/models/course/courses.model.mjs +1 -1
  40. package/esm2020/lib/core/models/epayco/epayco.interfaces.mjs +2 -0
  41. package/esm2020/lib/core/models/notes/INotesTemplate.mjs +1 -1
  42. package/esm2020/lib/core/models/notes/notes.interface.mjs +1 -1
  43. package/esm2020/lib/core/models/parameters/parameters-rs.model.mjs +1 -1
  44. package/esm2020/lib/core/models/payment/payment-rq.model.mjs +1 -1
  45. package/esm2020/lib/core/models/student/student.interface.mjs +1 -1
  46. package/esm2020/lib/core/models/terms/terms-rs.model.mjs +2 -0
  47. package/esm2020/lib/core/models/transfer/transfer.model.mjs +2 -0
  48. package/esm2020/lib/core/models/user/user-rq.model.mjs +1 -1
  49. package/esm2020/lib/core/models/user/user-rs.model.mjs +3 -1
  50. package/esm2020/lib/core/pipes/course-pipes/schedule-form.pipe.mjs +47 -0
  51. package/esm2020/lib/core/pipes/course-pipes/time-form.pipe.mjs +34 -0
  52. package/esm2020/lib/core/pipes/course-pipes/type-level.pipe.mjs +57 -0
  53. package/esm2020/lib/core/pipes/parameter-pipes/gender-display.pipe.mjs +22 -0
  54. package/esm2020/lib/core/pipes/pipe.module.mjs +37 -0
  55. package/esm2020/lib/core/services/academic-service/academic.service.mjs +64 -1
  56. package/esm2020/lib/core/services/announcement/announcement.service.mjs +57 -0
  57. package/esm2020/lib/core/services/attendance-service/attendance.service.mjs +31 -1
  58. package/esm2020/lib/core/services/budget-service/budget-service.mjs +297 -1
  59. package/esm2020/lib/core/services/certificate-service/certificate.service.mjs +21 -1
  60. package/esm2020/lib/core/services/commercial-service/comercial.service.mjs +95 -1
  61. package/esm2020/lib/core/services/course-service/course-service.model.mjs +96 -1
  62. package/esm2020/lib/core/services/ePayco/epayco.service.mjs +37 -0
  63. package/esm2020/lib/core/services/notes-service/notes.service.mjs +6 -1
  64. package/esm2020/lib/core/services/parameters-service/parameters.service.mjs +13 -1
  65. package/esm2020/lib/core/services/user-service/user-service.mjs +55 -1
  66. package/esm2020/public-api.mjs +13 -1
  67. package/fesm2015/iptdevs-design-system.mjs +4357 -1296
  68. package/fesm2015/iptdevs-design-system.mjs.map +1 -1
  69. package/fesm2020/iptdevs-design-system.mjs +7080 -4043
  70. package/fesm2020/iptdevs-design-system.mjs.map +1 -1
  71. package/lib/cod/cod-form/cod-form.component.d.ts +7 -2
  72. package/lib/cod/logic/calculate-quotes.service.d.ts +3 -0
  73. package/lib/cod/steps/cod-form-step-five/cod-form-step-five.component.d.ts +4 -4
  74. package/lib/cod/steps/cod-form-step-four/cod-form-step-four.component.d.ts +6 -9
  75. package/lib/cod/steps/cod-form-step-one/cod-form-step-one.component.d.ts +9 -7
  76. package/lib/cod/steps/cod-form-step-three/cod-form-step-three.component.d.ts +4 -4
  77. package/lib/cod/steps/cod-form-step-two/cod-form-step-two.component.d.ts +8 -5
  78. package/lib/cod-self-managed/cod-form-self-managed/cod-self-managed.component.d.ts +31 -7
  79. package/lib/cod-self-managed/cod-self-managed.module.d.ts +7 -1
  80. package/lib/cod-self-managed/logic/calculate-quotes.service.d.ts +16 -0
  81. package/lib/cod-self-managed/steps/cod-form-step-four/cod-self-form-step-four.component.d.ts +46 -2
  82. package/lib/cod-self-managed/steps/cod-form-step-one/cod-self-form-step-one.component.d.ts +17 -5
  83. package/lib/cod-self-managed/steps/cod-form-step-three/cod-self-form-step-three.component.d.ts +48 -3
  84. package/lib/cod-self-managed/steps/cod-form-step-two/cod-self-form-step-two.component.d.ts +43 -9
  85. package/lib/components/atoms/datalist/datalist.component.d.ts +7 -3
  86. package/lib/components/atoms/select/select.component.d.ts +2 -1
  87. package/lib/components/components.module.d.ts +14 -5
  88. package/lib/components/forms/update-user-form/update-user-form.component.d.ts +87 -0
  89. package/lib/components/molecules/card-course/card-course.component.d.ts +21 -0
  90. package/lib/components/molecules/card-select-course/card-select-course.component.d.ts +13 -0
  91. package/lib/core/models/academic/academic.component.d.ts +143 -1
  92. package/lib/core/models/announcement/announcement-user-rq.model.d.ts +12 -0
  93. package/lib/core/models/announcement/announcement-user-rs.model.d.ts +7 -0
  94. package/lib/core/models/attendance/attendance.interface.d.ts +146 -0
  95. package/lib/core/models/budget/budget.model.d.ts +554 -0
  96. package/lib/core/models/cod/cod-rq.model.d.ts +193 -0
  97. package/lib/core/models/commercial/commercial.model.d.ts +91 -0
  98. package/lib/core/models/course/course-rq.model.d.ts +296 -22
  99. package/lib/core/models/course/courses.model.d.ts +51 -0
  100. package/lib/core/models/epayco/epayco.interfaces.d.ts +6 -0
  101. package/lib/core/models/notes/INotesTemplate.d.ts +57 -0
  102. package/lib/core/models/notes/notes.interface.d.ts +13 -0
  103. package/lib/core/models/parameters/parameters-rs.model.d.ts +78 -1
  104. package/lib/core/models/payment/payment-rq.model.d.ts +168 -0
  105. package/lib/core/models/student/student.interface.d.ts +18 -0
  106. package/lib/core/models/terms/terms-rs.model.d.ts +435 -0
  107. package/lib/core/models/transfer/transfer.model.d.ts +89 -0
  108. package/lib/core/models/user/user-rq.model.d.ts +78 -0
  109. package/lib/core/models/user/user-rs.model.d.ts +11 -0
  110. package/lib/core/pipes/course-pipes/schedule-form.pipe.d.ts +7 -0
  111. package/lib/core/pipes/course-pipes/time-form.pipe.d.ts +9 -0
  112. package/lib/core/pipes/course-pipes/type-level.pipe.d.ts +7 -0
  113. package/lib/core/pipes/parameter-pipes/gender-display.pipe.d.ts +7 -0
  114. package/lib/core/pipes/pipe.module.d.ts +11 -0
  115. package/lib/core/services/academic-service/academic.service.d.ts +18 -3
  116. package/lib/core/services/announcement/announcement.service.d.ts +18 -0
  117. package/lib/core/services/attendance-service/attendance.service.d.ts +7 -1
  118. package/lib/core/services/budget-service/budget-service.d.ts +57 -3
  119. package/lib/core/services/certificate-service/certificate.service.d.ts +5 -0
  120. package/lib/core/services/commercial-service/comercial.service.d.ts +23 -2
  121. package/lib/core/services/course-service/course-service.model.d.ts +22 -1
  122. package/lib/core/services/ePayco/epayco.service.d.ts +17 -0
  123. package/lib/core/services/notes-service/notes.service.d.ts +2 -1
  124. package/lib/core/services/parameters-service/parameters.service.d.ts +3 -0
  125. package/lib/core/services/user-service/user-service.d.ts +12 -1
  126. package/package.json +1 -1
  127. package/public-api.d.ts +11 -0
@@ -1,15 +1,263 @@
1
- import { Component } from '@angular/core';
1
+ import { Component, EventEmitter, Output } from '@angular/core';
2
+ import { Validators } from '@angular/forms';
3
+ //import services
4
+ import { CodSelfManagedControls } from './../../logic/cod-self-managed-controls';
2
5
  import { CodSelfManagedSteps } from '../../logic/cod-self-managed-steps';
6
+ import Swal from 'sweetalert2';
3
7
  import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/forms";
9
+ import * as i2 from "primeng/api";
10
+ import * as i3 from "../../../core/services/commercial-service/comercial.service";
11
+ import * as i4 from "./../../../core/utils/base-service/base.service";
12
+ import * as i5 from "./../../logic/cod-self-managed-controls";
13
+ import * as i6 from "./../../logic/calculate-quotes.service";
14
+ import * as i7 from "@angular/common";
15
+ import * as i8 from "../../../components/atoms/input/input.component";
16
+ import * as i9 from "../../../components/atoms/loader/loader.component";
17
+ import * as i10 from "../../../components/atoms/select/select.component";
18
+ import * as i11 from "primeng/tooltip";
19
+ import * as i12 from "primeng/button";
20
+ import * as i13 from "primeng/toast";
21
+ import * as i14 from "primeng/radiobutton";
22
+ import * as i15 from "primeng/table";
4
23
  export class CodSelfFormStepThreeComponent extends CodSelfManagedSteps {
5
- constructor() {
24
+ constructor(fb, messageService, commercialService, baseService, codFormControls, calculateQuotesService) {
6
25
  super();
26
+ this.fb = fb;
27
+ this.messageService = messageService;
28
+ this.commercialService = commercialService;
29
+ this.baseService = baseService;
30
+ this.codFormControls = codFormControls;
31
+ this.calculateQuotesService = calculateQuotesService;
32
+ this.completed = new EventEmitter();
33
+ this.financingData = new EventEmitter();
34
+ this.controls = new CodSelfManagedControls().controls[2];
35
+ this.messageInfo = "Selecciona un plan de pagos";
36
+ this.visible = false;
37
+ this.paymentMethods = [
38
+ { code: '1', name: 'Financiado' },
39
+ { code: '2', name: 'Contado' },
40
+ ];
41
+ this.feeResponse = false;
42
+ this.thereArePlans = false;
43
+ this.isFinancing = false;
44
+ this.dataFinancingMaster = [];
45
+ this.dataFinancing = [];
46
+ this.selectedRow = null;
47
+ this.errorMessage = 'Faltan campos por llenar.';
48
+ this.isLoadingSelectLevels = false;
49
+ this.initForm();
50
+ }
51
+ initForm() {
52
+ this.codSelfFormStepThree = this.fb.group({
53
+ program_price: [{ value: '', disabled: true }, [Validators.required]],
54
+ payment_date: ['', [Validators.required]],
55
+ payment_method: ['', [Validators.required]],
56
+ quota_times: [{ value: '', disabled: true }, [Validators.required]],
57
+ total_price: [{ value: '', disabled: true }, [Validators.required]],
58
+ paid_level: ['', [Validators.required]],
59
+ quota_price: ['', [Validators.required]],
60
+ fee_number: ['', [Validators.required]],
61
+ selectedRow: [null],
62
+ });
63
+ this.listenPaymentMethodField();
64
+ }
65
+ ngOnInit() {
66
+ this.startLocalStorageWork();
67
+ const currentDate = new Date().toISOString().split('T')[0];
68
+ this.codSelfFormStepThree.controls['payment_date'].setValue(currentDate);
69
+ this.codSelfFormStepThree.get('payment_method')?.valueChanges.subscribe(() => {
70
+ this.selectedRow = null;
71
+ this.codSelfFormStepThree.controls['selectedRow'].setValue(null);
72
+ this.codSelfFormStepThree.controls['fee_number'].setValue(null);
73
+ this.codSelfFormStepThree.controls['quota_price'].setValue(null);
74
+ this.codSelfFormStepThree.controls['paid_level'].setValue(null);
75
+ this.codSelfFormStepThree.controls['selectedRow'].setValue(null);
76
+ });
77
+ }
78
+ startLocalStorageWork() {
79
+ this.controls.forEach(control => {
80
+ let localStorageValue = this.readAndWriteLS(3, control.name);
81
+ this.codSelfFormStepThree.controls[control.name].setValue(localStorageValue.value);
82
+ this.listenFormChanges(3, control.name, this.codSelfFormStepThree.controls[control.name].valueChanges);
83
+ });
84
+ }
85
+ listenPaymentMethodField() {
86
+ const control = this.codSelfFormStepThree.get('payment_method');
87
+ control?.valueChanges.subscribe((change) => {
88
+ // Financiado
89
+ if (change === '1') {
90
+ // Poner validaciones
91
+ this.codSelfFormStepThree.controls['program_price'].setValidators([Validators.required]);
92
+ this.codSelfFormStepThree.controls['payment_date'].setValidators([Validators.required]);
93
+ this.codSelfFormStepThree.controls['quota_times'].setValidators([Validators.required]);
94
+ this.codSelfFormStepThree.controls['total_price'].setValidators([Validators.required]);
95
+ this.updateValueAndValidity();
96
+ this.updateGlobalControls(change);
97
+ }
98
+ // de contado
99
+ if (change === '2') {
100
+ // Quitar las validaciones
101
+ this.codSelfFormStepThree.controls['program_price'].setValidators([Validators.required]);
102
+ this.codSelfFormStepThree.controls['payment_date'].setValidators([Validators.required]);
103
+ this.codSelfFormStepThree.controls['quota_times'].clearValidators();
104
+ this.codSelfFormStepThree.controls['total_price'].setValidators([Validators.required]);
105
+ this.updateValueAndValidity();
106
+ this.updateGlobalControls(change);
107
+ }
108
+ });
109
+ }
110
+ updateGlobalControls(change) {
111
+ let controls = this.controls.filter(control => control.name !== 'payment_method');
112
+ controls.forEach(control => {
113
+ if (change === '1')
114
+ this.codFormControls.changeValue(3, control.name, true);
115
+ if (change === '2') {
116
+ if (control.name === 'quota_times')
117
+ this.codFormControls.changeValue(3, control.name, false);
118
+ }
119
+ });
120
+ }
121
+ onReject() {
122
+ this.messageService.clear('confirm');
123
+ this.visible = false;
124
+ }
125
+ showConfirm() {
126
+ if (!this.visible) {
127
+ this.messageService.add({ key: 'confirm', sticky: true, severity: 'success', summary: 'Can you send me the report?', life: 5000 });
128
+ this.visible = true;
129
+ }
130
+ }
131
+ selectPaymentMethod(paymentMethod) {
132
+ this.feeResponse = true;
133
+ this.thereArePlans = false;
134
+ if (paymentMethod !== '') {
135
+ const request = {
136
+ token: this.baseService.getUserToken(),
137
+ course_type: Number(this.localStorageCOD.getCodFormData(2, 'course_type')),
138
+ agreement: Number(this.localStorageCOD.getCodFormData(1, 'agreement_by_category')),
139
+ course_modality: Number(this.localStorageCOD.getCodFormData(2, 'course_modality')),
140
+ payment_method: parseInt(paymentMethod)
141
+ };
142
+ this.commercialService.ObtainCodPricesCodSelfManaged(request).subscribe((response) => {
143
+ if (response.data != null) {
144
+ this.dataPrices = response.data;
145
+ this.feeResponse = false;
146
+ this.thereArePlans = true;
147
+ }
148
+ else {
149
+ this.thereArePlans = false;
150
+ this.feeResponse = false;
151
+ Swal.fire({
152
+ position: 'center',
153
+ icon: 'warning',
154
+ title: '<p style="font-family: Poppins"">Oops.. no hay planes de pagos, \n en el curso elegido.</p>',
155
+ showConfirmButton: false,
156
+ timer: 3000,
157
+ });
158
+ this.clearInputPayment();
159
+ }
160
+ });
161
+ this.codSelfFormStepThree.controls['payment_method'].setValue(paymentMethod);
162
+ }
163
+ else {
164
+ this.codSelfFormStepThree.controls['payment_method'].setValue(null);
165
+ }
166
+ }
167
+ clearInputPayment() {
168
+ this.codSelfFormStepThree.controls['program_price'].setValue(null);
169
+ this.codSelfFormStepThree.controls['quota_times'].setValue(null);
170
+ this.codSelfFormStepThree.controls['total_price'].setValue(null);
171
+ }
172
+ back() {
173
+ this.completed.emit(1);
174
+ }
175
+ sendForm() {
176
+ this.completed.emit(3);
177
+ }
178
+ showTable() {
179
+ this.isLoadingSelectLevels = true;
180
+ this.isFinancing = true;
181
+ this.financingData.emit(null);
182
+ const total_price = this.codSelfFormStepThree.controls['total_price'].value;
183
+ if ((total_price === 'null') || this.codSelfFormStepThree.invalid) {
184
+ Swal.fire({
185
+ title: 'Error table',
186
+ text: 'Debes ingresar el monto total de la matrícula y la cuota inicial',
187
+ icon: 'error'
188
+ });
189
+ return;
190
+ }
191
+ // Calcular cuotas
192
+ this.dataFinancing = [];
193
+ let params = {
194
+ date: new Date(this.codSelfFormStepThree.controls['payment_date'].value),
195
+ quotaValues: Number(this.codSelfFormStepThree.controls['quota_price'].value),
196
+ quotaTimes: Number(this.codSelfFormStepThree.controls['fee_number'].value),
197
+ totalPrice: this.codSelfFormStepThree.controls['total_price'].value,
198
+ };
199
+ this.dataFinancingMaster = this.calculateQuotesService.calculateQuotes(params);
200
+ if (this.dataFinancingMaster.length > 1) {
201
+ const enrollmentValue = this.dataFinancingMaster[0][1];
202
+ const firstQuotaValue = this.dataFinancingMaster[1][1];
203
+ this.totalInitialPaymentSpan = parseFloat(enrollmentValue.replace(/[^\d.-]/g, '')) + parseFloat(firstQuotaValue.replace(/[^\d.-]/g, ''));
204
+ const enrollmentValueTwo = parseFloat(this.dataFinancingMaster[0][1].replace(/[^\d.-]/g, ''));
205
+ const firstQuotaValueTwo = parseFloat(this.dataFinancingMaster[1][1].replace(/[^\d.-]/g, ''));
206
+ this.totalInitialPayment = enrollmentValueTwo + firstQuotaValueTwo;
207
+ const totalInitialPaymentInteger = Math.round(this.totalInitialPayment);
208
+ const formattedTotalInitialPayment = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', minimumFractionDigits: 0 }).format(totalInitialPaymentInteger);
209
+ const combinedRecord = [
210
+ this.dataFinancingMaster[0][0],
211
+ formattedTotalInitialPayment,
212
+ this.dataFinancingMaster[0][2]
213
+ ];
214
+ this.dataFinancing = [combinedRecord, ...this.dataFinancingMaster.slice(2)];
215
+ }
216
+ this.isFinancing = true;
217
+ this.financingData.emit(this.dataFinancingMaster);
218
+ this.isLoadingSelectLevels = false;
219
+ }
220
+ selectLevels(dataPayment, rowIndex) {
221
+ rowIndex;
222
+ if (this.codSelfFormStepThree.get('payment_method')?.value == 1) {
223
+ this.selectedRow = rowIndex;
224
+ this.codSelfFormStepThree.controls['selectedRow'].setValue(rowIndex);
225
+ this.codSelfFormStepThree.controls['quota_times'].setValue(dataPayment.code);
226
+ this.codSelfFormStepThree.controls['total_price'].setValue(dataPayment.enrollment);
227
+ this.codSelfFormStepThree.controls['program_price'].setValue(dataPayment.financed_price);
228
+ this.codSelfFormStepThree.controls['paid_level'].setValue(dataPayment.paid_level - 1);
229
+ this.codSelfFormStepThree.controls['fee_number'].setValue(dataPayment.fee_number);
230
+ this.codSelfFormStepThree.controls['quota_price'].setValue(dataPayment.quota_price);
231
+ this.updateValueAndValidity();
232
+ this.showTable();
233
+ }
234
+ else if (this.codSelfFormStepThree.get('payment_method')?.value == 2) {
235
+ this.selectedRow = rowIndex;
236
+ this.codSelfFormStepThree.controls['selectedRow'].setValue(rowIndex);
237
+ this.codSelfFormStepThree.controls['quota_times'].setValue(dataPayment.code);
238
+ this.codSelfFormStepThree.controls['total_price'].setValue(dataPayment.enrollment);
239
+ this.codSelfFormStepThree.controls['program_price'].setValue(dataPayment.normal_price);
240
+ this.codSelfFormStepThree.controls['paid_level'].setValue(dataPayment.paid_level - 1);
241
+ this.codSelfFormStepThree.controls['fee_number'].setValue(dataPayment.fee_number);
242
+ this.codSelfFormStepThree.controls['quota_price'].setValue(dataPayment.quota_price);
243
+ this.updateValueAndValidity();
244
+ }
245
+ }
246
+ updateValueAndValidity() {
247
+ this.codSelfFormStepThree.controls['program_price'].updateValueAndValidity();
248
+ this.codSelfFormStepThree.controls['payment_date'].updateValueAndValidity();
249
+ this.codSelfFormStepThree.controls['quota_times'].updateValueAndValidity();
250
+ this.codSelfFormStepThree.controls['total_price'].updateValueAndValidity();
7
251
  }
8
252
  }
9
- CodSelfFormStepThreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: CodSelfFormStepThreeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
10
- CodSelfFormStepThreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.7", type: CodSelfFormStepThreeComponent, selector: "app-cod-self-form-step-three", usesInheritance: true, ngImport: i0, template: "<span>step 3</span>\n", styles: [""] });
253
+ CodSelfFormStepThreeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: CodSelfFormStepThreeComponent, deps: [{ token: i1.FormBuilder }, { token: i2.MessageService }, { token: i3.CommercialService }, { token: i4.BaseService }, { token: i5.CodSelfManagedControls }, { token: i6.CalculateQuotesService }], target: i0.ɵɵFactoryTarget.Component });
254
+ CodSelfFormStepThreeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.7", type: CodSelfFormStepThreeComponent, selector: "app-cod-self-form-step-three", outputs: { completed: "completed", financingData: "financingData" }, usesInheritance: true, ngImport: i0, template: "<div class=\"container-main\">\n <div class=\"container-form\">\n <h2>Pagos</h2>\n <p-toast position=\"top-center\" key=\"confirm\" (onClose)=\"onReject()\" [baseZIndex]=\"10\">\n <ng-template let-message pTemplate=\"message\">\n <div class=\"flex flex-column align-items-start\" style=\"flex: 1\">\n <div class=\"flex align-items-center gap-2\">\n <img src=\"./assets/logos/reading.png\" style=\"width: 65px;\" shape=\"circle\" />\n <span class=\"font-bold text-900\">Jacob</span>\n </div>\n <div class=\"font-medium text-lg my-3 text-900\">{{ messageInfo }}</div>\n </div>\n </ng-template>\n </p-toast>\n <i class=\"pi pi-exclamation-circle cursor-pointer w-auto\" (click)=\"showConfirm()\" pTooltip=\"Mas info.\" tooltipPosition=\"bottom\"></i>\n <div class=\"animate__animated animate__slideInRight ng-star-inserted\">\n <div class=\"container__body__select flex justify-content-center flex-wrap\">\n\n <form autocomplete=\"off\" [formGroup]=\"codSelfFormStepThree\" class=\"grid mt-2 flex flex-column align-items-center\">\n\n <div class=\"container_selects col-12\">\n <ipt-select\n [initialValue]=\"codSelfFormStepThree.controls['payment_method'].value\"\n [control]=\"codSelfFormStepThree.controls['payment_method']\"\n (eventSelect)=\"selectPaymentMethod($event)\"\n [data]=\"paymentMethods\"\n [defaultText]=\"'M\u00E9todo de pago'\"\n ></ipt-select>\n <ipt-loader *ngIf=\"feeResponse\"></ipt-loader>\n\n <div class=\"col-12\" *ngIf=\"thereArePlans\">\n <p-table\n [value]=\"dataPrices\"\n [tableStyle]=\"{'min-width': '100%'}\"\n [rowHover]=\"true\"\n >\n <ng-template pTemplate=\"caption\">\n <div class=\"flex align-items-center\">\n Click en niveles a cancelar\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th class=\"bg-blue-200 text-center font-medium pt-2 pb-2\"></th>\n <th class=\"bg-blue-200 text-center font-medium pt-2 pb-2\">Cancelar</th>\n <th class=\"bg-blue-200 text-center font-medium pt-2 pb-2\">Cuotas</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-data let-rowIndex=\"rowIndex\">\n <tr [class.selected-row]=\"selectedRow === rowIndex\" (click)=\"selectLevels(data, rowIndex)\">\n <td class=\"pt-0 pb-0 text-center\">\n <p-radioButton [value]=\"rowIndex\" formControlName=\"selectedRow\"></p-radioButton>\n </td>\n <td class=\"pt-1 pb-1\">{{ data.paid_level }} {{ data.paid_level == 1 ? \"Nivel\" : \"Niveles\"}}</td>\n <td class=\"pt-1 pb-1 text-center\">{{ data.fee_number }}</td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n\n <div class=\"container_selects col-12\">\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Monto total de la matr\u00EDcula'\"\n [control]=\"codSelfFormStepThree.controls['total_price']\"\n [withPipe]=\"true\"\n ></ipt-input>\n </div>\n\n <div class=\"container_selects col-12\">\n <ipt-input\n [withPipe]=\"true\"\n [inputType]=\"'text'\"\n [control]=\"codSelfFormStepThree.controls['program_price']\"\n [placeHolder]=\"'Valor total del programa'\"\n ></ipt-input>\n </div>\n\n <div class=\"flex justify-content-center flex-wrap m-2\">\n </div>\n\n <!-- Tabla de financiaci\u00F3n -->\n <div class=\"col-12\" *ngIf=\"codSelfFormStepThree.controls['payment_method'].value === '1' && isFinancing\">\n <div class=\"flex gap-1 md:gap-4 xl:gap-8 m-1 p-2 border-round bg-blue-500 text-white\">\n <div class=\"container_icon flex mr-4 justify-content-center align-items-start mt-1\">\n <i class=\"pi pi-info-circle cursor-pointer w-auto mb-4\" pTooltip=\"Mas info.\" tooltipPosition=\"bottom\"></i>\n </div>\n <div class=\"flex flex-column container_info_span flex align-items-center justify-content-center\">\n <span><strong>NOTA:</strong> Deber\u00E1 pagar la matr\u00EDcula y la primera cuota <strong>(total: ${{ totalInitialPaymentSpan }})</strong> para completar el proceso de inscripci\u00F3n.</span><br>\n <span>Recuerda que las fechas cambian de acuerdo a la fecha que comienza el plan</span>\n </div>\n </div>\n\n <p-table\n *ngIf=\"!isLoadingSelectLevels\"\n [value]=\"dataFinancing\"\n [tableStyle]=\"{'min-width': '100%'}\"\n [rowHover]=\"true\"\n >\n <ng-template pTemplate=\"caption\">\n <div class=\"flex align-items-center\">\n C\u00E1lculo de cuotas\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th class=\"bg-blue-200 text-center font-medium pt-2 pb-2\">#</th>\n <th class=\"bg-blue-200 text-center font-medium pt-2 pb-2\">Valor</th>\n <th class=\"bg-blue-200 text-center font-medium pt-2 pb-2\">Fecha</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-data>\n <tr>\n <td class=\"p-0 text-center text-sm\">{{ data[0] }}</td>\n <td class=\"p-0 text-center text-sm\">{{ data[1] }}</td>\n <td class=\"p-0 text-center text-sm\">{{ data[2] }}</td>\n </tr>\n </ng-template>\n </p-table>\n <ipt-loader *ngIf=\"isLoadingSelectLevels\"></ipt-loader>\n </div>\n\n </form>\n </div>\n\n <div class=\"flex justify-content-between mt-3 align-items-center gap-3\">\n <!-- <span *ngIf=\"codSelfFormStepOne.invalid && codSelfFormStepOne.touched\" class=\"text-red-500 font-bold text-center mt-1 py-2 bg-red-100 w-full border-round-xl\">{{ errorMessage }}</span> -->\n <button\n pButton\n icon=\"pi pi-arrow-left\"\n type=\"submit\"\n (click)=\"back()\"\n ></button>\n\n <button\n pButton\n icon=\"pi pi-arrow-right\"\n [disabled]=\"!codSelfFormStepThree.valid\"\n (click)=\"sendForm()\"\n ></button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".error-message{font-size:x-small;color:red}:host ::ng-deep .p-toast{width:20rem!important}.container-form{margin:5%;border-radius:3px;border:1px solid #2563eb;box-shadow:#3c40434d 0 1px 2px,#3c404326 0 2px 6px 2px;padding:1rem}:host ::ng-deep .p-datatable.p-datatable-hoverable-rows .p-datatable-tbody>tr:not(.p-highlight):hover{color:#1c77f7!important}.selected-row{background-color:#bfdbfe!important;color:#1c77f7!important}tr{cursor:pointer}td,.header-reports-advisers{font-family:Poppins,sans-serif}:host ::ng-deep .p-datatable .p-datatable-header{background:#f8f9fa;color:#f8f9fa;border:none;padding:1rem;font-weight:700;background-color:#1c77f7;border-radius:10px 10px 0 0}:host ::ng-deep .p-datatable{position:relative;border-radius:10px;border:1px solid #1c77f7}:host ::ng-deep .p-datatable>.p-datatable-wrapper{border-radius:0 0 10px 10px}.container_selects{width:16rem}.p-datatable .p-datatable-tbody>tr>td{padding:.1rem .5rem}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td{padding:0rem!important}\n"], dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.InputComponent, selector: "ipt-input", inputs: ["inputType", "placeHolder", "validateText", "withPipe", "list", "iconUrl", "control", "prefix", "thousands", "decimal", "disabledSel"], outputs: ["dateSelected"] }, { kind: "component", type: i9.LoaderComponent, selector: "ipt-loader", inputs: ["message", "isDialog"] }, { kind: "component", type: i10.SelectComponent, selector: "ipt-select", inputs: ["isRequired", "data", "defaultText", "selectCode", "disabledSel", "initialValue", "label", "control"], outputs: ["eventSelect"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i11.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "fitContent", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i12.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i13.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { kind: "directive", type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i14.RadioButton, selector: "p-radioButton", inputs: ["value", "formControlName", "name", "disabled", "label", "tabindex", "inputId", "ariaLabelledBy", "ariaLabel", "style", "styleClass", "labelStyleClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i15.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "virtualRowHeight", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }] });
11
255
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.7", ngImport: i0, type: CodSelfFormStepThreeComponent, decorators: [{
12
256
  type: Component,
13
- args: [{ selector: 'app-cod-self-form-step-three', template: "<span>step 3</span>\n" }]
14
- }], ctorParameters: function () { return []; } });
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLXNlbGYtZm9ybS1zdGVwLXRocmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2Rlc2lnbi1zeXN0ZW0vc3JjL2xpYi9jb2Qtc2VsZi1tYW5hZ2VkL3N0ZXBzL2NvZC1mb3JtLXN0ZXAtdGhyZWUvY29kLXNlbGYtZm9ybS1zdGVwLXRocmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2Rlc2lnbi1zeXN0ZW0vc3JjL2xpYi9jb2Qtc2VsZi1tYW5hZ2VkL3N0ZXBzL2NvZC1mb3JtLXN0ZXAtdGhyZWUvY29kLXNlbGYtZm9ybS1zdGVwLXRocmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBVXpFLE1BQU0sT0FBTyw2QkFBOEIsU0FBUSxtQkFBbUI7SUFFcEU7UUFDRSxLQUFLLEVBQUUsQ0FBQztJQUNWLENBQUM7OzBIQUpVLDZCQUE2Qjs4R0FBN0IsNkJBQTZCLDJGQ1gxQyx1QkFDQTsyRkRVYSw2QkFBNkI7a0JBTHpDLFNBQVM7K0JBQ0UsOEJBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb2RTZWxmTWFuYWdlZFN0ZXBzIH0gZnJvbSAnLi4vLi4vbG9naWMvY29kLXNlbGYtbWFuYWdlZC1zdGVwcyc7XG5cblxuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jb2Qtc2VsZi1mb3JtLXN0ZXAtdGhyZWUnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29kLXNlbGYtZm9ybS1zdGVwLXRocmVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29kLXNlbGYtZm9ybS1zdGVwLXRocmVlLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29kU2VsZkZvcm1TdGVwVGhyZWVDb21wb25lbnQgZXh0ZW5kcyBDb2RTZWxmTWFuYWdlZFN0ZXBzIHtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG59XG4iLCI8c3Bhbj5zdGVwIDM8L3NwYW4+XG4iXX0=
257
+ args: [{ selector: 'app-cod-self-form-step-three', template: "<div class=\"container-main\">\n <div class=\"container-form\">\n <h2>Pagos</h2>\n <p-toast position=\"top-center\" key=\"confirm\" (onClose)=\"onReject()\" [baseZIndex]=\"10\">\n <ng-template let-message pTemplate=\"message\">\n <div class=\"flex flex-column align-items-start\" style=\"flex: 1\">\n <div class=\"flex align-items-center gap-2\">\n <img src=\"./assets/logos/reading.png\" style=\"width: 65px;\" shape=\"circle\" />\n <span class=\"font-bold text-900\">Jacob</span>\n </div>\n <div class=\"font-medium text-lg my-3 text-900\">{{ messageInfo }}</div>\n </div>\n </ng-template>\n </p-toast>\n <i class=\"pi pi-exclamation-circle cursor-pointer w-auto\" (click)=\"showConfirm()\" pTooltip=\"Mas info.\" tooltipPosition=\"bottom\"></i>\n <div class=\"animate__animated animate__slideInRight ng-star-inserted\">\n <div class=\"container__body__select flex justify-content-center flex-wrap\">\n\n <form autocomplete=\"off\" [formGroup]=\"codSelfFormStepThree\" class=\"grid mt-2 flex flex-column align-items-center\">\n\n <div class=\"container_selects col-12\">\n <ipt-select\n [initialValue]=\"codSelfFormStepThree.controls['payment_method'].value\"\n [control]=\"codSelfFormStepThree.controls['payment_method']\"\n (eventSelect)=\"selectPaymentMethod($event)\"\n [data]=\"paymentMethods\"\n [defaultText]=\"'M\u00E9todo de pago'\"\n ></ipt-select>\n <ipt-loader *ngIf=\"feeResponse\"></ipt-loader>\n\n <div class=\"col-12\" *ngIf=\"thereArePlans\">\n <p-table\n [value]=\"dataPrices\"\n [tableStyle]=\"{'min-width': '100%'}\"\n [rowHover]=\"true\"\n >\n <ng-template pTemplate=\"caption\">\n <div class=\"flex align-items-center\">\n Click en niveles a cancelar\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th class=\"bg-blue-200 text-center font-medium pt-2 pb-2\"></th>\n <th class=\"bg-blue-200 text-center font-medium pt-2 pb-2\">Cancelar</th>\n <th class=\"bg-blue-200 text-center font-medium pt-2 pb-2\">Cuotas</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-data let-rowIndex=\"rowIndex\">\n <tr [class.selected-row]=\"selectedRow === rowIndex\" (click)=\"selectLevels(data, rowIndex)\">\n <td class=\"pt-0 pb-0 text-center\">\n <p-radioButton [value]=\"rowIndex\" formControlName=\"selectedRow\"></p-radioButton>\n </td>\n <td class=\"pt-1 pb-1\">{{ data.paid_level }} {{ data.paid_level == 1 ? \"Nivel\" : \"Niveles\"}}</td>\n <td class=\"pt-1 pb-1 text-center\">{{ data.fee_number }}</td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n\n <div class=\"container_selects col-12\">\n <ipt-input\n [inputType]=\"'text'\"\n [placeHolder]=\"'Monto total de la matr\u00EDcula'\"\n [control]=\"codSelfFormStepThree.controls['total_price']\"\n [withPipe]=\"true\"\n ></ipt-input>\n </div>\n\n <div class=\"container_selects col-12\">\n <ipt-input\n [withPipe]=\"true\"\n [inputType]=\"'text'\"\n [control]=\"codSelfFormStepThree.controls['program_price']\"\n [placeHolder]=\"'Valor total del programa'\"\n ></ipt-input>\n </div>\n\n <div class=\"flex justify-content-center flex-wrap m-2\">\n </div>\n\n <!-- Tabla de financiaci\u00F3n -->\n <div class=\"col-12\" *ngIf=\"codSelfFormStepThree.controls['payment_method'].value === '1' && isFinancing\">\n <div class=\"flex gap-1 md:gap-4 xl:gap-8 m-1 p-2 border-round bg-blue-500 text-white\">\n <div class=\"container_icon flex mr-4 justify-content-center align-items-start mt-1\">\n <i class=\"pi pi-info-circle cursor-pointer w-auto mb-4\" pTooltip=\"Mas info.\" tooltipPosition=\"bottom\"></i>\n </div>\n <div class=\"flex flex-column container_info_span flex align-items-center justify-content-center\">\n <span><strong>NOTA:</strong> Deber\u00E1 pagar la matr\u00EDcula y la primera cuota <strong>(total: ${{ totalInitialPaymentSpan }})</strong> para completar el proceso de inscripci\u00F3n.</span><br>\n <span>Recuerda que las fechas cambian de acuerdo a la fecha que comienza el plan</span>\n </div>\n </div>\n\n <p-table\n *ngIf=\"!isLoadingSelectLevels\"\n [value]=\"dataFinancing\"\n [tableStyle]=\"{'min-width': '100%'}\"\n [rowHover]=\"true\"\n >\n <ng-template pTemplate=\"caption\">\n <div class=\"flex align-items-center\">\n C\u00E1lculo de cuotas\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th class=\"bg-blue-200 text-center font-medium pt-2 pb-2\">#</th>\n <th class=\"bg-blue-200 text-center font-medium pt-2 pb-2\">Valor</th>\n <th class=\"bg-blue-200 text-center font-medium pt-2 pb-2\">Fecha</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-data>\n <tr>\n <td class=\"p-0 text-center text-sm\">{{ data[0] }}</td>\n <td class=\"p-0 text-center text-sm\">{{ data[1] }}</td>\n <td class=\"p-0 text-center text-sm\">{{ data[2] }}</td>\n </tr>\n </ng-template>\n </p-table>\n <ipt-loader *ngIf=\"isLoadingSelectLevels\"></ipt-loader>\n </div>\n\n </form>\n </div>\n\n <div class=\"flex justify-content-between mt-3 align-items-center gap-3\">\n <!-- <span *ngIf=\"codSelfFormStepOne.invalid && codSelfFormStepOne.touched\" class=\"text-red-500 font-bold text-center mt-1 py-2 bg-red-100 w-full border-round-xl\">{{ errorMessage }}</span> -->\n <button\n pButton\n icon=\"pi pi-arrow-left\"\n type=\"submit\"\n (click)=\"back()\"\n ></button>\n\n <button\n pButton\n icon=\"pi pi-arrow-right\"\n [disabled]=\"!codSelfFormStepThree.valid\"\n (click)=\"sendForm()\"\n ></button>\n </div>\n </div>\n </div>\n</div>\n", styles: [".error-message{font-size:x-small;color:red}:host ::ng-deep .p-toast{width:20rem!important}.container-form{margin:5%;border-radius:3px;border:1px solid #2563eb;box-shadow:#3c40434d 0 1px 2px,#3c404326 0 2px 6px 2px;padding:1rem}:host ::ng-deep .p-datatable.p-datatable-hoverable-rows .p-datatable-tbody>tr:not(.p-highlight):hover{color:#1c77f7!important}.selected-row{background-color:#bfdbfe!important;color:#1c77f7!important}tr{cursor:pointer}td,.header-reports-advisers{font-family:Poppins,sans-serif}:host ::ng-deep .p-datatable .p-datatable-header{background:#f8f9fa;color:#f8f9fa;border:none;padding:1rem;font-weight:700;background-color:#1c77f7;border-radius:10px 10px 0 0}:host ::ng-deep .p-datatable{position:relative;border-radius:10px;border:1px solid #1c77f7}:host ::ng-deep .p-datatable>.p-datatable-wrapper{border-radius:0 0 10px 10px}.container_selects{width:16rem}.p-datatable .p-datatable-tbody>tr>td{padding:.1rem .5rem}:host ::ng-deep .p-datatable .p-datatable-tbody>tr>td{padding:0rem!important}\n"] }]
258
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i2.MessageService }, { type: i3.CommercialService }, { type: i4.BaseService }, { type: i5.CodSelfManagedControls }, { type: i6.CalculateQuotesService }]; }, propDecorators: { completed: [{
259
+ type: Output
260
+ }], financingData: [{
261
+ type: Output
262
+ }] } });
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kLXNlbGYtZm9ybS1zdGVwLXRocmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2Rlc2lnbi1zeXN0ZW0vc3JjL2xpYi9jb2Qtc2VsZi1tYW5hZ2VkL3N0ZXBzL2NvZC1mb3JtLXN0ZXAtdGhyZWUvY29kLXNlbGYtZm9ybS1zdGVwLXRocmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2Rlc2lnbi1zeXN0ZW0vc3JjL2xpYi9jb2Qtc2VsZi1tYW5hZ2VkL3N0ZXBzL2NvZC1mb3JtLXN0ZXAtdGhyZWUvY29kLXNlbGYtZm9ybS1zdGVwLXRocmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQWEsVUFBVSxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEUsaUJBQWlCO0FBQ2pCLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBS2pGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBS3pFLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPL0IsTUFBTSxPQUFPLDZCQUE4QixTQUFRLG1CQUFtQjtJQXlCcEUsWUFDVSxFQUFlLEVBQ2YsY0FBOEIsRUFDOUIsaUJBQW9DLEVBQ3BDLFdBQXdCLEVBQ3hCLGVBQXVDLEVBQ3ZDLHNCQUE4QztRQUN0RCxLQUFLLEVBQUUsQ0FBQztRQU5BLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7UUFDdkMsMkJB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QVEsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEYsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM3RSxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDNUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQzNFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUM3RSxDQUFDOzswSEE5UFUsNkJBQTZCOzhHQUE3Qiw2QkFBNkIsZ0tDckIxQyx3ek5BaUpBOzJGRDVIYSw2QkFBNkI7a0JBTHpDLFNBQVM7K0JBQ0UsOEJBQThCO21RQU05QixTQUFTO3NCQUFsQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgVmFsaWRhdG9ycywgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbi8vaW1wb3J0IHNlcnZpY2VzXG5pbXBvcnQgeyBDb2RTZWxmTWFuYWdlZENvbnRyb2xzIH0gZnJvbSAnLi8uLi8uLi9sb2dpYy9jb2Qtc2VsZi1tYW5hZ2VkLWNvbnRyb2xzJztcbmltcG9ydCB7IGxvY2FsU3RvcmFnZVZhbHVlc1R3byB9IGZyb20gJy4vLi4vLi4vbG9naWMvY29kLXNlbGYtbWFuYWdlZC1zdGVwcyc7XG5pbXBvcnQgeyBDYWxjdWxhdGVRdW90ZXNQYXJhbXMsIENhbGN1bGF0ZVF1b3Rlc1NlcnZpY2UgfSBmcm9tICcuLy4uLy4uL2xvZ2ljL2NhbGN1bGF0ZS1xdW90ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4vLi4vLi4vLi4vY29yZS91dGlscy9iYXNlLXNlcnZpY2UvYmFzZS5zZXJ2aWNlJztcbmltcG9ydCB7IElPYnRhaW5Db2RQcmljZXNScSB9IGZyb20gJy4vLi4vLi4vLi4vY29yZS9tb2RlbHMvY29tbWVyY2lhbC9jb21tZXJjaWFsLm1vZGVsJztcbmltcG9ydCB7IENvZFNlbGZNYW5hZ2VkU3RlcHMgfSBmcm9tICcuLi8uLi9sb2dpYy9jb2Qtc2VsZi1tYW5hZ2VkLXN0ZXBzJztcbmltcG9ydCB7IENvbW1lcmNpYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9jb21tZXJjaWFsLXNlcnZpY2UvY29tZXJjaWFsLnNlcnZpY2UnO1xuXG4vL2ltcG9ydCBQcmltZSBuZyBhbmQgTGlicmFyeSBBbGVydFxuaW1wb3J0IHsgTWVzc2FnZVNlcnZpY2UgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgU3dhbCBmcm9tICdzd2VldGFsZXJ0Mic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jb2Qtc2VsZi1mb3JtLXN0ZXAtdGhyZWUnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29kLXNlbGYtZm9ybS1zdGVwLXRocmVlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29kLXNlbGYtZm9ybS1zdGVwLXRocmVlLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29kU2VsZkZvcm1TdGVwVGhyZWVDb21wb25lbnQgZXh0ZW5kcyBDb2RTZWxmTWFuYWdlZFN0ZXBzIGltcGxlbWVudHMgT25Jbml0IHtcblxuICBAT3V0cHV0KCkgY29tcGxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBmaW5hbmNpbmdEYXRhID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgY29udHJvbHMgPSBuZXcgQ29kU2VsZk1hbmFnZWRDb250cm9scygpLmNvbnRyb2xzWzJdO1xuICBtZXNzYWdlSW5mbzpzdHJpbmcgPSBcIlNlbGVjY2lvbmEgdW4gcGxhbiBkZSBwYWdvc1wiO1xuICB2aXNpYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIGNvZFNlbGZGb3JtU3RlcFRocmVlITogRm9ybUdyb3VwO1xuICBwYXltZW50TWV0aG9kczogYW55W10gPSBbXG4gICAgeyBjb2RlOiAnMScsIG5hbWU6ICdGaW5hbmNpYWRvJyB9LFxuICAgIHsgY29kZTogJzInLCBuYW1lOiAnQ29udGFkbycgfSxcbiAgXTtcbiAgZmVlUmVzcG9uc2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdGhlcmVBcmVQbGFuczogYm9vbGVhbiA9IGZhbHNlO1xuICBkYXRhUHJpY2VzOmFueTtcbiAgaXNGaW5hbmNpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZGF0YUZpbmFuY2luZ01hc3RlcjogYW55W10gPSBbXTtcbiAgZGF0YUZpbmFuY2luZzogYW55W10gPSBbXTtcbiAgc2VsZWN0ZWRSb3c6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBlcnJvck1lc3NhZ2U6IHN0cmluZyA9ICdGYWx0YW4gY2FtcG9zIHBvciBsbGVuYXIuJztcbiAgdG90YWxJbml0aWFsUGF5bWVudFNwYW4/OiBudW1iZXI7XG4gIGlzTG9hZGluZ1NlbGVjdExldmVscyA9IGZhbHNlO1xuICB0b3RhbEluaXRpYWxQYXltZW50PzogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tbWVyY2lhbFNlcnZpY2U6IENvbW1lcmNpYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgYmFzZVNlcnZpY2U6IEJhc2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29kRm9ybUNvbnRyb2xzOiBDb2RTZWxmTWFuYWdlZENvbnRyb2xzLFxuICAgIHByaXZhdGUgY2FsY3VsYXRlUXVvdGVzU2VydmljZTogQ2FsY3VsYXRlUXVvdGVzU2VydmljZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5pbml0Rm9ybSgpO1xuICB9XG5cbiAgaW5pdEZvcm0oKSB7XG4gICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBUaHJlZSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgcHJvZ3JhbV9wcmljZTogW3sgdmFsdWU6ICcnLCBkaXNhYmxlZDogdHJ1ZSB9LCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgcGF5bWVudF9kYXRlOiBbJycgLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgcGF5bWVudF9tZXRob2Q6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIHF1b3RhX3RpbWVzOiBbeyB2YWx1ZTogJycsIGRpc2FibGVkOiB0cnVlIH0sIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICB0b3RhbF9wcmljZTogW3sgdmFsdWU6ICcnLCBkaXNhYmxlZDogdHJ1ZSB9LCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgcGFpZF9sZXZlbDogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgcXVvdGFfcHJpY2U6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIGZlZV9udW1iZXI6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIHNlbGVjdGVkUm93OiBbbnVsbF0sXG4gICAgfSk7XG4gICAgdGhpcy5saXN0ZW5QYXltZW50TWV0aG9kRmllbGQoKTtcbiAgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXJ0TG9jYWxTdG9yYWdlV29yaygpO1xuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMF07XG4gICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGF5bWVudF9kYXRlJ10uc2V0VmFsdWUoY3VycmVudERhdGUpXG5cbiAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcFRocmVlLmdldCgncGF5bWVudF9tZXRob2QnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93ID0gbnVsbDtcbiAgICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3NlbGVjdGVkUm93J10uc2V0VmFsdWUobnVsbCk7XG4gICAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydmZWVfbnVtYmVyJ10uc2V0VmFsdWUobnVsbCk7XG4gICAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydxdW90YV9wcmljZSddLnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFpZF9sZXZlbCddLnNldFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBUaHJlZS5jb250cm9sc1snc2VsZWN0ZWRSb3cnXS5zZXRWYWx1ZShudWxsKTtcbiAgICB9KTtcbiAgfVxuICBzdGFydExvY2FsU3RvcmFnZVdvcmsoKSB7XG4gICAgdGhpcy5jb250cm9scy5mb3JFYWNoKGNvbnRyb2wgPT4ge1xuICAgICAgbGV0IGxvY2FsU3RvcmFnZVZhbHVlOiBsb2NhbFN0b3JhZ2VWYWx1ZXNUd28gPSB0aGlzLnJlYWRBbmRXcml0ZUxTKDMsIGNvbnRyb2wubmFtZSk7XG4gICAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcFRocmVlLmNvbnRyb2xzW2NvbnRyb2wubmFtZV0uc2V0VmFsdWUobG9jYWxTdG9yYWdlVmFsdWUudmFsdWUpO1xuICAgICAgdGhpcy5saXN0ZW5Gb3JtQ2hhbmdlcygzLCBjb250cm9sLm5hbWUsIHRoaXMuY29kU2VsZkZvcm1TdGVwVGhyZWUuY29udHJvbHNbY29udHJvbC5uYW1lXS52YWx1ZUNoYW5nZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgbGlzdGVuUGF5bWVudE1ldGhvZEZpZWxkKCkge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmNvZFNlbGZGb3JtU3RlcFRocmVlLmdldCgncGF5bWVudF9tZXRob2QnKTtcbiAgICBjb250cm9sPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChjaGFuZ2UpID0+IHtcbiAgICAgIC8vIEZpbmFuY2lhZG9cbiAgICAgIGlmIChjaGFuZ2UgPT09ICcxJykge1xuICAgICAgICAvLyBQb25lciB2YWxpZGFjaW9uZXNcbiAgICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncHJvZ3JhbV9wcmljZSddLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGF5bWVudF9kYXRlJ10uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydxdW90YV90aW1lcyddLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sndG90YWxfcHJpY2UnXS5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIHRoaXMudXBkYXRlR2xvYmFsQ29udHJvbHMoY2hhbmdlKVxuICAgICAgfVxuXG4gICAgICAvLyBkZSBjb250YWRvXG4gICAgICBpZiAoY2hhbmdlID09PSAnMicpIHtcbiAgICAgICAgLy8gUXVpdGFyIGxhcyB2YWxpZGFjaW9uZXNcbiAgICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncHJvZ3JhbV9wcmljZSddLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGF5bWVudF9kYXRlJ10uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydxdW90YV90aW1lcyddLmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcFRocmVlLmNvbnRyb2xzWyd0b3RhbF9wcmljZSddLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgdGhpcy51cGRhdGVHbG9iYWxDb250cm9scyhjaGFuZ2UpXG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgdXBkYXRlR2xvYmFsQ29udHJvbHMoY2hhbmdlOiBzdHJpbmcpIHtcbiAgICBsZXQgY29udHJvbHMgPSB0aGlzLmNvbnRyb2xzLmZpbHRlcihjb250cm9sID0+IGNvbnRyb2wubmFtZSAhPT0gJ3BheW1lbnRfbWV0aG9kJyk7XG4gICAgY29udHJvbHMuZm9yRWFjaChjb250cm9sID0+IHtcbiAgICAgIGlmIChjaGFuZ2UgPT09ICcxJykgdGhpcy5jb2RGb3JtQ29udHJvbHMuY2hhbmdlVmFsdWUoMywgY29udHJvbC5uYW1lLCB0cnVlKVxuICAgICAgaWYgKGNoYW5nZSA9PT0gJzInKSB7XG4gICAgICAgIGlmIChjb250cm9sLm5hbWUgPT09ICdxdW90YV90aW1lcycpIHRoaXMuY29kRm9ybUNvbnRyb2xzLmNoYW5nZVZhbHVlKDMsIGNvbnRyb2wubmFtZSwgZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIG9uUmVqZWN0KCkge1xuICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuY2xlYXIoJ2NvbmZpcm0nKTtcbiAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgfVxuXG4gIHNob3dDb25maXJtKCkge1xuICAgIGlmICghdGhpcy52aXNpYmxlKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsga2V5OiAnY29uZmlybScsIHN0aWNreTogdHJ1ZSwgc2V2ZXJpdHk6ICdzdWNjZXNzJywgc3VtbWFyeTogJ0NhbiB5b3Ugc2VuZCBtZSB0aGUgcmVwb3J0PycsIGxpZmU6IDUwMDAgfSk7XG4gICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0UGF5bWVudE1ldGhvZChwYXltZW50TWV0aG9kOiBhbnkpIHtcbiAgICB0aGlzLmZlZVJlc3BvbnNlID0gdHJ1ZTtcbiAgICB0aGlzLnRoZXJlQXJlUGxhbnMgPSBmYWxzZTtcblxuICAgIGlmIChwYXltZW50TWV0aG9kICE9PSAnJykge1xuICAgICAgY29uc3QgcmVxdWVzdDogSU9idGFpbkNvZFByaWNlc1JxID0ge1xuICAgICAgICB0b2tlbjogICAgICAgICAgICB0aGlzLmJhc2VTZXJ2aWNlLmdldFVzZXJUb2tlbigpLFxuICAgICAgICBjb3Vyc2VfdHlwZTogICAgICBOdW1iZXIodGhpcy5sb2NhbFN0b3JhZ2VDT0QuZ2V0Q29kRm9ybURhdGEoMiwgJ2NvdXJzZV90eXBlJykpLFxuICAgICAgICBhZ3JlZW1lbnQ6ICAgICAgICBOdW1iZXIodGhpcy5sb2NhbFN0b3JhZ2VDT0QuZ2V0Q29kRm9ybURhdGEoMSwgJ2FncmVlbWVudF9ieV9jYXRlZ29yeScpKSxcbiAgICAgICAgY291cnNlX21vZGFsaXR5OiAgTnVtYmVyKHRoaXMubG9jYWxTdG9yYWdlQ09ELmdldENvZEZvcm1EYXRhKDIsICdjb3Vyc2VfbW9kYWxpdHknKSksXG4gICAgICAgIHBheW1lbnRfbWV0aG9kOiAgIHBhcnNlSW50KHBheW1lbnRNZXRob2QpXG4gICAgICB9XG4gICAgICB0aGlzLmNvbW1lcmNpYWxTZXJ2aWNlLk9idGFpbkNvZFByaWNlc0NvZFNlbGZNYW5hZ2VkKHJlcXVlc3QpLnN1YnNjcmliZSgocmVzcG9uc2UpPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSAhPSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5kYXRhUHJpY2VzID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICB0aGlzLmZlZVJlc3BvbnNlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy50aGVyZUFyZVBsYW5zID0gdHJ1ZTtcbiAgICAgICAgfWVsc2Uge1xuICAgICAgICAgIHRoaXMudGhlcmVBcmVQbGFucyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZmVlUmVzcG9uc2UgPSBmYWxzZTtcbiAgICAgICAgICBTd2FsLmZpcmUoe1xuICAgICAgICAgICAgcG9zaXRpb246ICdjZW50ZXInLFxuICAgICAgICAgICAgaWNvbjogJ3dhcm5pbmcnLFxuICAgICAgICAgICAgdGl0bGU6XG4gICAgICAgICAgICAgICc8cCBzdHlsZT1cImZvbnQtZmFtaWx5OiBQb3BwaW5zXCJcIj5Pb3BzLi4gbm8gaGF5IHBsYW5lcyBkZSBwYWdvcywgXFxuIGVuIGVsIGN1cnNvIGVsZWdpZG8uPC9wPicsXG4gICAgICAgICAgICBzaG93Q29uZmlybUJ1dHRvbjogZmFsc2UsXG4gICAgICAgICAgICB0aW1lcjogMzAwMCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmNsZWFySW5wdXRQYXltZW50KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGF5bWVudF9tZXRob2QnXS5zZXRWYWx1ZShwYXltZW50TWV0aG9kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGF5bWVudF9tZXRob2QnXS5zZXRWYWx1ZShudWxsKTtcbiAgICB9XG4gIH1cblxuICBjbGVhcklucHV0UGF5bWVudCgpe1xuICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3Byb2dyYW1fcHJpY2UnXS5zZXRWYWx1ZShudWxsKTtcbiAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydxdW90YV90aW1lcyddLnNldFZhbHVlKG51bGwpO1xuICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3RvdGFsX3ByaWNlJ10uc2V0VmFsdWUobnVsbCk7XG4gIH1cbiAgYmFjaygpIHtcbiAgICB0aGlzLmNvbXBsZXRlZC5lbWl0KDEpO1xuICB9XG5cbiAgc2VuZEZvcm0oKSB7XG5cbiAgICB0aGlzLmNvbXBsZXRlZC5lbWl0KDMpO1xuICB9XG5cbiAgc2hvd1RhYmxlKCkge1xuICAgIHRoaXMuaXNMb2FkaW5nU2VsZWN0TGV2ZWxzID0gdHJ1ZTtcbiAgICB0aGlzLmlzRmluYW5jaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmZpbmFuY2luZ0RhdGEuZW1pdChudWxsKTtcbiAgICBjb25zdCB0b3RhbF9wcmljZSA9IHRoaXMuY29kU2VsZkZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3RvdGFsX3ByaWNlJ10udmFsdWU7XG4gICAgaWYgKCh0b3RhbF9wcmljZSA9PT0gJ251bGwnKSB8fCB0aGlzLmNvZFNlbGZGb3JtU3RlcFRocmVlLmludmFsaWQpIHtcbiAgICAgIFN3YWwuZmlyZSh7XG4gICAgICAgIHRpdGxlOiAnRXJyb3IgdGFibGUnLFxuICAgICAgICB0ZXh0OiAnRGViZXMgaW5ncmVzYXIgZWwgbW9udG8gdG90YWwgZGUgbGEgbWF0csOtY3VsYSB5IGxhIGN1b3RhIGluaWNpYWwnLFxuICAgICAgICBpY29uOiAnZXJyb3InXG4gICAgICB9KVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENhbGN1bGFyIGN1b3Rhc1xuICAgIHRoaXMuZGF0YUZpbmFuY2luZyA9IFtdO1xuXG4gICAgbGV0IHBhcmFtczogQ2FsY3VsYXRlUXVvdGVzUGFyYW1zID0ge1xuICAgICAgZGF0ZTogbmV3IERhdGUodGhpcy5jb2RTZWxmRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGF5bWVudF9kYXRlJ10udmFsdWUpLFxuICAgICAgcXVvdGFWYWx1ZXM6IE51bWJlcih0aGlzLmNvZFNlbGZGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydxdW90YV9wcmljZSddLnZhbHVlKSxcbiAgICAgIHF1b3RhVGltZXM6IE51bWJlcih0aGlzLmNvZFNlbGZGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydmZWVfbnVtYmVyJ10udmFsdWUpLFxuICAgICAgdG90YWxQcmljZTogdGhpcy5jb2RTZWxmRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sndG90YWxfcHJpY2UnXS52YWx1ZSxcbiAgICB9XG5cbiAgICB0aGlzLmRhdGFGaW5hbmNpbmdNYXN0ZXIgPSB0aGlzLmNhbGN1bGF0ZVF1b3Rlc1NlcnZpY2UuY2FsY3VsYXRlUXVvdGVzKHBhcmFtcyk7XG4gICAgaWYgKHRoaXMuZGF0YUZpbmFuY2luZ01hc3Rlci5sZW5ndGggPiAxKSB7XG5cbiAgICAgIGNvbnN0IGVucm9sbG1lbnRWYWx1ZSA9IHRoaXMuZGF0YUZpbmFuY2luZ01hc3RlclswXVsxXTtcbiAgICAgIGNvbnN0IGZpcnN0UXVvdGFWYWx1ZSA9IHRoaXMuZGF0YUZpbmFuY2luZ01hc3RlclsxXVsxXTtcbiAgICAgIHRoaXMudG90YWxJbml0aWFsUGF5bWVudFNwYW4gPSBwYXJzZUZsb2F0KGVucm9sbG1lbnRWYWx1ZS5yZXBsYWNlKC9bXlxcZC4tXS9nLCAnJykpICsgcGFyc2VGbG9hdChmaXJzdFF1b3RhVmFsdWUucmVwbGFjZSgvW15cXGQuLV0vZywgJycpKTtcblxuICAgICAgY29uc3QgZW5yb2xsbWVudFZhbHVlVHdvID0gcGFyc2VGbG9hdCh0aGlzLmRhdGFGaW5hbmNpbmdNYXN0ZXJbMF1bMV0ucmVwbGFjZSgvW15cXGQuLV0vZywgJycpKTtcbiAgICAgIGNvbnN0IGZpcnN0UXVvdGFWYWx1ZVR3byA9IHBhcnNlRmxvYXQodGhpcy5kYXRhRmluYW5jaW5nTWFzdGVyWzFdWzFdLnJlcGxhY2UoL1teXFxkLi1dL2csICcnKSk7XG4gICAgICB0aGlzLnRvdGFsSW5pdGlhbFBheW1lbnQgPSBlbnJvbGxtZW50VmFsdWVUd28gKyBmaXJzdFF1b3RhVmFsdWVUd287XG5cbiAgICAgIGNvbnN0IHRvdGFsSW5pdGlhbFBheW1lbnRJbnRlZ2VyID0gTWF0aC5yb3VuZCh0aGlzLnRvdGFsSW5pdGlhbFBheW1lbnQpO1xuXG4gICAgICBjb25zdCBmb3JtYXR0ZWRUb3RhbEluaXRpYWxQYXltZW50ID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KCdlbi1VUycsIHsgc3R5bGU6ICdjdXJyZW5jeScsIGN1cnJlbmN5OiAnVVNEJyxtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAgfSkuZm9ybWF0KHRvdGFsSW5pdGlhbFBheW1lbnRJbnRlZ2VyKTtcblxuICAgICAgY29uc3QgY29tYmluZWRSZWNvcmQgPSBbXG4gICAgICAgIHRoaXMuZGF0YUZpbmFuY2luZ01hc3RlclswXVswXSxcbiAgICAgICAgZm9ybWF0dGVkVG90YWxJbml0aWFsUGF5bWVudCxcbiAgICAgICAgdGhpcy5kYXRhRmluYW5jaW5nTWFzdGVyWzBdWzJdXG4gICAgICBdO1xuICAgICAgdGhpcy5kYXRhRmluYW5jaW5nID0gW2NvbWJpbmVkUmVjb3JkLCAuLi50aGlzLmRhdGFGaW5hbmNpbmdNYXN0ZXIuc2xpY2UoMildO1xuICAgIH1cbiAgICB0aGlzLmlzRmluYW5jaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmZpbmFuY2luZ0RhdGEuZW1pdCh0aGlzLmRhdGFGaW5hbmNpbmdNYXN0ZXIpO1xuICAgIHRoaXMuaXNMb2FkaW5nU2VsZWN0TGV2ZWxzID0gZmFsc2U7XG4gIH1cblxuICBzZWxlY3RMZXZlbHMoZGF0YVBheW1lbnQ6IGFueSwgcm93SW5kZXg6IG51bWJlcil7XG4gICAgcm93SW5kZXhcbiAgICBpZiAodGhpcy5jb2RTZWxmRm9ybVN0ZXBUaHJlZS5nZXQoJ3BheW1lbnRfbWV0aG9kJyk/LnZhbHVlID09IDEpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3cgPSByb3dJbmRleDtcbiAgICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3NlbGVjdGVkUm93J10uc2V0VmFsdWUocm93SW5kZXgpO1xuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncXVvdGFfdGltZXMnXS5zZXRWYWx1ZShkYXRhUGF5bWVudC5jb2RlKTtcbiAgICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3RvdGFsX3ByaWNlJ10uc2V0VmFsdWUoZGF0YVBheW1lbnQuZW5yb2xsbWVudCk7XG4gICAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwcm9ncmFtX3ByaWNlJ10uc2V0VmFsdWUoZGF0YVBheW1lbnQuZmluYW5jZWRfcHJpY2UpO1xuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGFpZF9sZXZlbCddLnNldFZhbHVlKGRhdGFQYXltZW50LnBhaWRfbGV2ZWwgLSAxKTtcbiAgICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ2ZlZV9udW1iZXInXS5zZXRWYWx1ZShkYXRhUGF5bWVudC5mZWVfbnVtYmVyKTtcbiAgICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3F1b3RhX3ByaWNlJ10uc2V0VmFsdWUoZGF0YVBheW1lbnQucXVvdGFfcHJpY2UpO1xuICAgICAgdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB0aGlzLnNob3dUYWJsZSgpO1xuICAgIH0gZWxzZSBpZih0aGlzLmNvZFNlbGZGb3JtU3RlcFRocmVlLmdldCgncGF5bWVudF9tZXRob2QnKT8udmFsdWUgPT0gMil7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93ID0gcm93SW5kZXg7XG4gICAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydzZWxlY3RlZFJvdyddLnNldFZhbHVlKHJvd0luZGV4KTtcbiAgICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3F1b3RhX3RpbWVzJ10uc2V0VmFsdWUoZGF0YVBheW1lbnQuY29kZSk7XG4gICAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcFRocmVlLmNvbnRyb2xzWyd0b3RhbF9wcmljZSddLnNldFZhbHVlKGRhdGFQYXltZW50LmVucm9sbG1lbnQpO1xuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncHJvZ3JhbV9wcmljZSddLnNldFZhbHVlKGRhdGFQYXltZW50Lm5vcm1hbF9wcmljZSk7XG4gICAgICB0aGlzLmNvZFNlbGZGb3JtU3RlcFRocmVlLmNvbnRyb2xzWydwYWlkX2xldmVsJ10uc2V0VmFsdWUoZGF0YVBheW1lbnQucGFpZF9sZXZlbCAtIDEpO1xuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBUaHJlZS5jb250cm9sc1snZmVlX251bWJlciddLnNldFZhbHVlKGRhdGFQYXltZW50LmZlZV9udW1iZXIpO1xuICAgICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncXVvdGFfcHJpY2UnXS5zZXRWYWx1ZShkYXRhUGF5bWVudC5xdW90YV9wcmljZSk7XG4gICAgICB0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCkge1xuICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3Byb2dyYW1fcHJpY2UnXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgdGhpcy5jb2RTZWxmRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGF5bWVudF9kYXRlJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3F1b3RhX3RpbWVzJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIHRoaXMuY29kU2VsZkZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3RvdGFsX3ByaWNlJ10udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb250YWluZXItbWFpblwiPlxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZvcm1cIj5cbiAgICA8aDI+UGFnb3M8L2gyPlxuICAgIDxwLXRvYXN0IHBvc2l0aW9uPVwidG9wLWNlbnRlclwiIGtleT1cImNvbmZpcm1cIiAob25DbG9zZSk9XCJvblJlamVjdCgpXCIgW2Jhc2VaSW5kZXhdPVwiMTBcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtbWVzc2FnZSBwVGVtcGxhdGU9XCJtZXNzYWdlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtc3RhcnRcIiBzdHlsZT1cImZsZXg6IDFcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi4vYXNzZXRzL2xvZ29zL3JlYWRpbmcucG5nXCIgc3R5bGU9XCJ3aWR0aDogNjVweDtcIiBzaGFwZT1cImNpcmNsZVwiIC8+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZCB0ZXh0LTkwMFwiPkphY29iPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtbWVkaXVtIHRleHQtbGcgbXktMyB0ZXh0LTkwMFwiPnt7IG1lc3NhZ2VJbmZvIH19PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvcC10b2FzdD5cbiAgICA8aSBjbGFzcz1cInBpIHBpLWV4Y2xhbWF0aW9uLWNpcmNsZSBjdXJzb3ItcG9pbnRlciB3LWF1dG9cIiAoY2xpY2spPVwic2hvd0NvbmZpcm0oKVwiIHBUb29sdGlwPVwiTWFzIGluZm8uXCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCI+PC9pPlxuICAgIDxkaXYgY2xhc3M9XCJhbmltYXRlX19hbmltYXRlZCBhbmltYXRlX19zbGlkZUluUmlnaHQgbmctc3Rhci1pbnNlcnRlZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lcl9fYm9keV9fc2VsZWN0IGZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LXdyYXBcIj5cblxuICAgICAgICA8Zm9ybSBhdXRvY29tcGxldGU9XCJvZmZcIiBbZm9ybUdyb3VwXT1cImNvZFNlbGZGb3JtU3RlcFRocmVlXCIgY2xhc3M9XCJncmlkIG10LTIgZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJfc2VsZWN0cyBjb2wtMTJcIj5cbiAgICAgICAgICAgIDxpcHQtc2VsZWN0XG4gICAgICAgICAgICAgIFtpbml0aWFsVmFsdWVdPVwiY29kU2VsZkZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3BheW1lbnRfbWV0aG9kJ10udmFsdWVcIlxuICAgICAgICAgICAgICBbY29udHJvbF09XCJjb2RTZWxmRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGF5bWVudF9tZXRob2QnXVwiXG4gICAgICAgICAgICAgIChldmVudFNlbGVjdCk9XCJzZWxlY3RQYXltZW50TWV0aG9kKCRldmVudClcIlxuICAgICAgICAgICAgICBbZGF0YV09XCJwYXltZW50TWV0aG9kc1wiXG4gICAgICAgICAgICAgIFtkZWZhdWx0VGV4dF09XCInTcOpdG9kbyBkZSBwYWdvJ1wiXG4gICAgICAgICAgICA+PC9pcHQtc2VsZWN0PlxuICAgICAgICAgICAgPGlwdC1sb2FkZXIgKm5nSWY9XCJmZWVSZXNwb25zZVwiPjwvaXB0LWxvYWRlcj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiICpuZ0lmPVwidGhlcmVBcmVQbGFuc1wiPlxuICAgICAgICAgICAgICA8cC10YWJsZVxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJkYXRhUHJpY2VzXCJcbiAgICAgICAgICAgICAgICBbdGFibGVTdHlsZV09XCJ7J21pbi13aWR0aCc6ICcxMDAlJ31cIlxuICAgICAgICAgICAgICAgIFtyb3dIb3Zlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgQ2xpY2sgZW4gbml2ZWxlcyBhIGNhbmNlbGFyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiYmctYmx1ZS0yMDAgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0gcHQtMiBwYi0yXCI+PC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiYmctYmx1ZS0yMDAgdGV4dC1jZW50ZXIgZm9udC1tZWRpdW0gcHQtMiBwYi0yXCI+Q2FuY2VsYXI8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJiZy1ibHVlLTIwMCB0ZXh0LWNlbnRlciBmb250LW1lZGl1bSBwdC0yIHBiLTJcIj5DdW90YXM8L3RoPlxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LWRhdGEgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgIDx0ciBbY2xhc3Muc2VsZWN0ZWQtcm93XT1cInNlbGVjdGVkUm93ID09PSByb3dJbmRleFwiIChjbGljayk9XCJzZWxlY3RMZXZlbHMoZGF0YSwgcm93SW5kZXgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInB0LTAgcGItMCB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxwLXJhZGlvQnV0dG9uIFt2YWx1ZV09XCJyb3dJbmRleFwiIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdGVkUm93XCI+PC9wLXJhZGlvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJwdC0xIHBiLTFcIj57eyBkYXRhLnBhaWRfbGV2ZWwgfX0ge3sgZGF0YS5wYWlkX2xldmVsID09IDEgPyBcIk5pdmVsXCIgOiBcIk5pdmVsZXNcIn19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicHQtMSBwYi0xIHRleHQtY2VudGVyXCI+e3sgZGF0YS5mZWVfbnVtYmVyIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9wLXRhYmxlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyX3NlbGVjdHMgY29sLTEyXCI+XG4gICAgICAgICAgICA8aXB0LWlucHV0XG4gICAgICAgICAgICAgIFtpbnB1dFR5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgICAgW3BsYWNlSG9sZGVyXT1cIidNb250byB0b3RhbCBkZSBsYSBtYXRyw61jdWxhJ1wiXG4gICAgICAgICAgICAgIFtjb250cm9sXT1cImNvZFNlbGZGb3JtU3RlcFRocmVlLmNvbnRyb2xzWyd0b3RhbF9wcmljZSddXCJcbiAgICAgICAgICAgICAgW3dpdGhQaXBlXT1cInRydWVcIlxuICAgICAgICAgICAgPjwvaXB0LWlucHV0PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lcl9zZWxlY3RzIGNvbC0xMlwiPlxuICAgICAgICAgICAgPGlwdC1pbnB1dFxuICAgICAgICAgICAgICBbd2l0aFBpcGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtpbnB1dFR5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgICAgW2NvbnRyb2xdPVwiY29kU2VsZkZvcm1TdGVwVGhyZWUuY29udHJvbHNbJ3Byb2dyYW1fcHJpY2UnXVwiXG4gICAgICAgICAgICAgIFtwbGFjZUhvbGRlcl09XCInVmFsb3IgdG90YWwgZGVsIHByb2dyYW1hJ1wiXG4gICAgICAgICAgICA+PC9pcHQtaW5wdXQ+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtd3JhcCBtLTJcIj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gVGFibGEgZGUgZmluYW5jaWFjacOzbiAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCIgKm5nSWY9XCJjb2RTZWxmRm9ybVN0ZXBUaHJlZS5jb250cm9sc1sncGF5bWVudF9tZXRob2QnXS52YWx1ZSA9PT0gJzEnICYmIGlzRmluYW5jaW5nXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMSBtZDpnYXAtNCB4bDpnYXAtOCBtLTEgcC0yIGJvcmRlci1yb3VuZCBiZy1ibHVlLTUwMCB0ZXh0LXdoaXRlXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJfaWNvbiBmbGV4IG1yLTQganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1zdGFydCBtdC0xXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1pbmZvLWNpcmNsZSBjdXJzb3ItcG9pbnRlciB3LWF1dG8gbWItNFwiIHBUb29sdGlwPVwiTWFzIGluZm8uXCIgdG9vbHRpcFBvc2l0aW9uPVwiYm90dG9tXCI+PC9pPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gY29udGFpbmVyX2luZm9fc3BhbiBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+PHN0cm9uZz5OT1RBOjwvc3Ryb25nPiBEZWJlcsOhIHBhZ2FyIGxhIG1hdHLDrWN1bGEgeSBsYSBwcmltZXJhIGN1b3RhIDxzdHJvbmc+KHRvdGFsOiAke3sgdG90YWxJbml0aWFsUGF5bWVudFNwYW4gfX0pPC9zdHJvbmc+IHBhcmEgY29tcGxldGFyIGVsIHByb2Nlc28gZGUgaW5zY3JpcGNpw7NuLjwvc3Bhbj48YnI+XG4gICAgICAgICAgICAgICAgPHNwYW4+UmVjdWVyZGEgcXVlIGxhcyBmZWNoYXMgY2FtYmlhbiBkZSBhY3VlcmRvIGEgbGEgZmVjaGEgcXVlIGNvbWllbnphIGVsIHBsYW48L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxwLXRhYmxlXG4gICAgICAgICAgICAgICpuZ0lmPVwiIWlzTG9hZGluZ1NlbGVjdExldmVsc1wiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJkYXRhRmluYW5jaW5nXCJcbiAgICAgICAgICAgICAgW3RhYmxlU3R5bGVdPVwieydtaW4td2lkdGgnOiAnMTAwJSd9XCJcbiAgICAgICAgICAgICAgW3Jvd0hvdmVyXT1cInRydWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgQ8OhbGN1bG8gZGUgY3VvdGFzXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJiZy1ibHVlLTIwMCB0ZXh0LWNlbnRlciBmb250LW1lZGl1bSBwdC0yIHBiLTJcIj4jPC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImJnLWJsdWUtMjAwIHRleHQtY2VudGVyIGZvbnQtbWVkaXVtIHB0LTIgcGItMlwiPlZhbG9yPC90aD5cbiAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImJnLWJsdWUtMjAwIHRleHQtY2VudGVyIGZvbnQtbWVkaXVtIHB0LTIgcGItMlwiPkZlY2hhPC90aD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1kYXRhPlxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInAtMCB0ZXh0LWNlbnRlciB0ZXh0LXNtXCI+e3sgZGF0YVswXSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJwLTAgdGV4dC1jZW50ZXIgdGV4dC1zbVwiPnt7IGRhdGFbMV0gfX08L3RkPlxuICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicC0wIHRleHQtY2VudGVyIHRleHQtc21cIj57eyBkYXRhWzJdIH19PC90ZD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wLXRhYmxlPlxuICAgICAgICAgICAgPGlwdC1sb2FkZXIgKm5nSWY9XCJpc0xvYWRpbmdTZWxlY3RMZXZlbHNcIj48L2lwdC1sb2FkZXI+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG10LTMgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgIDwhLS0gPHNwYW4gKm5nSWY9XCJjb2RTZWxmRm9ybVN0ZXBPbmUuaW52YWxpZCAmJiBjb2RTZWxmRm9ybVN0ZXBPbmUudG91Y2hlZFwiIGNsYXNzPVwidGV4dC1yZWQtNTAwIGZvbnQtYm9sZCB0ZXh0LWNlbnRlciBtdC0xIHB5LTIgYmctcmVkLTEwMCB3LWZ1bGwgYm9yZGVyLXJvdW5kLXhsXCI+e3sgZXJyb3JNZXNzYWdlIH19PC9zcGFuPiAtLT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICBwQnV0dG9uXG4gICAgICAgIGljb249XCJwaSBwaS1hcnJvdy1sZWZ0XCJcbiAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgIChjbGljayk9XCJiYWNrKClcIlxuICAgICAgICA+PC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICBwQnV0dG9uXG4gICAgICAgIGljb249XCJwaSBwaS1hcnJvdy1yaWdodFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhY29kU2VsZkZvcm1TdGVwVGhyZWUudmFsaWRcIlxuICAgICAgICAoY2xpY2spPVwic2VuZEZvcm0oKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19