ng-pli-commons 1.0.135 → 1.0.137

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 (226) hide show
  1. package/esm2022/lib/components/backoffice.commons.component.mjs +41 -0
  2. package/esm2022/lib/components/common.lists.component.mjs +177 -0
  3. package/esm2022/lib/components/configuration-token/configuration-token-subject.service.mjs +23 -0
  4. package/esm2022/lib/components/configuration-token/configuration-token.component.mjs +665 -0
  5. package/esm2022/lib/components/configuration-token/guarantee-token/guarantee-token.component.mjs +103 -0
  6. package/esm2022/lib/components/configuration-token/snapshot-token/snapshot-token.component.mjs +108 -0
  7. package/esm2022/lib/components/configuration.commons.component.mjs +41 -0
  8. package/esm2022/lib/components/dashboard.commons.component.mjs +85 -0
  9. package/esm2022/lib/components/dynamic-filter/dynamic-filter.component.mjs +131 -0
  10. package/esm2022/lib/components/excel-to-json/excel-to-json.component.mjs +54 -0
  11. package/esm2022/lib/components/frontoffice.commons.component.mjs +89 -0
  12. package/esm2022/lib/components/pdf-analyzer/pdf-analyzer.component.mjs +162 -0
  13. package/esm2022/lib/components/pdf-config/pdf-config.component.mjs +170 -0
  14. package/esm2022/lib/components/pdf-generator/pdf-generator.component.mjs +207 -0
  15. package/esm2022/lib/components/pdf-merge-visualizer/pdf-merge-visualizer.component.mjs +307 -0
  16. package/esm2022/lib/components/pdf-visualizer/pdf-visualizer.component.mjs +387 -0
  17. package/esm2022/lib/components/progress-bar/progress-bar.component.mjs +92 -0
  18. package/esm2022/lib/components/segmentation-tokens/segmentation-tokens.component.mjs +199 -0
  19. package/esm2022/lib/components/select-ppp/select-ppp.component.mjs +200 -0
  20. package/esm2022/lib/components/show-hide-columns/show-hide-columns-table.component.mjs +116 -0
  21. package/esm2022/lib/components/token/token.component.mjs +1047 -0
  22. package/esm2022/lib/components/tokens-calculator/tokens-calculator.component.mjs +128 -0
  23. package/esm2022/lib/directives/currency-colfuturo-formatter.directive.mjs +48 -0
  24. package/esm2022/lib/directives/currency-decimal-colfuturo-formatter.directive.mjs +35 -0
  25. package/esm2022/lib/ng-pli-commons.module.mjs +385 -0
  26. package/esm2022/lib/ng-pli-commons.service.mjs +14 -0
  27. package/esm2022/lib/pipes/currency-colfuturo.pipe.mjs +36 -0
  28. package/esm2022/lib/pipes/currency-decimal-colfuturo.pipe.mjs +39 -0
  29. package/esm2022/lib/pipes/currency-print-colfuturo.pipe.mjs +34 -0
  30. package/esm2022/lib/pipes/thousands.pipe.mjs +61 -0
  31. package/esm2022/lib/services/application-fill-percentage.service.mjs +30 -0
  32. package/esm2022/lib/services/application-pdf-form.service.mjs +27 -0
  33. package/esm2022/lib/services/application-tag.service.mjs +56 -0
  34. package/esm2022/lib/services/application.service.mjs +253 -0
  35. package/esm2022/lib/services/assign-task.service.mjs +30 -0
  36. package/esm2022/lib/services/authentication.service.mjs +133 -0
  37. package/esm2022/lib/services/blocked-beneficiary.service.mjs +42 -0
  38. package/esm2022/lib/services/budget-application.service.mjs +265 -0
  39. package/esm2022/lib/services/budget-setup.service.mjs +26 -0
  40. package/esm2022/lib/services/budget-simulation.service.mjs +65 -0
  41. package/esm2022/lib/services/budget.service.mjs +205 -0
  42. package/esm2022/lib/services/closure-wallet.service.mjs +39 -0
  43. package/esm2022/lib/services/cnf-correspondence-document-manager.service.mjs +39 -0
  44. package/esm2022/lib/services/codebtors.service.mjs +28 -0
  45. package/esm2022/lib/services/committee-assistant.service.mjs +55 -0
  46. package/esm2022/lib/services/committee-money.service.mjs +44 -0
  47. package/esm2022/lib/services/committee-pdf.service.mjs +27 -0
  48. package/esm2022/lib/services/committee-snapshot.service.mjs +60 -0
  49. package/esm2022/lib/services/common-info.service.mjs +51 -0
  50. package/esm2022/lib/services/common.service.mjs +285 -0
  51. package/esm2022/lib/services/configuration-document.service.mjs +297 -0
  52. package/esm2022/lib/services/configuration-minisite.service.mjs +26 -0
  53. package/esm2022/lib/services/configuration.service.mjs +53 -0
  54. package/esm2022/lib/services/correspondence-document-category.service.mjs +31 -0
  55. package/esm2022/lib/services/correspondence-manager.service.mjs +74 -0
  56. package/esm2022/lib/services/credit-score.service.mjs +48 -0
  57. package/esm2022/lib/services/credit-study.service.mjs +292 -0
  58. package/esm2022/lib/services/cube.service.mjs +27 -0
  59. package/esm2022/lib/services/data-form-history.service.mjs +25 -0
  60. package/esm2022/lib/services/data-form.service.mjs +176 -0
  61. package/esm2022/lib/services/data-letter-segmentation.service.mjs +64 -0
  62. package/esm2022/lib/services/document-analysis-auto.service.mjs +27 -0
  63. package/esm2022/lib/services/document-history.service.mjs +43 -0
  64. package/esm2022/lib/services/document-management.service.mjs +57 -0
  65. package/esm2022/lib/services/document-process.service.mjs +27 -0
  66. package/esm2022/lib/services/document-validation-attempt.service.mjs +32 -0
  67. package/esm2022/lib/services/document.service.mjs +144 -0
  68. package/esm2022/lib/services/documentary.type.service.mjs +69 -0
  69. package/esm2022/lib/services/email.service.mjs +30 -0
  70. package/esm2022/lib/services/evaluation.service.mjs +181 -0
  71. package/esm2022/lib/services/export-excel.service.mjs +32 -0
  72. package/esm2022/lib/services/file.service.mjs +153 -0
  73. package/esm2022/lib/services/form.service.mjs +112 -0
  74. package/esm2022/lib/services/gic-client-disbursement-metadata.service.mjs +31 -0
  75. package/esm2022/lib/services/gic-client.service.mjs +49 -0
  76. package/esm2022/lib/services/gic-cnf-bankvision-transaction.service.mjs +31 -0
  77. package/esm2022/lib/services/gic-cnf-closing-date.service.mjs +34 -0
  78. package/esm2022/lib/services/gic-cnf-maintenance.service.mjs +30 -0
  79. package/esm2022/lib/services/gic-collection.service.mjs +53 -0
  80. package/esm2022/lib/services/gic-disbursement.service.mjs +39 -0
  81. package/esm2022/lib/services/gic-extract.service.mjs +41 -0
  82. package/esm2022/lib/services/gic-log.service.mjs +41 -0
  83. package/esm2022/lib/services/gic-payment-application.service.mjs +35 -0
  84. package/esm2022/lib/services/gic-payment-plan-cube.service.mjs +27 -0
  85. package/esm2022/lib/services/gic-payment-plan.service.mjs +32 -0
  86. package/esm2022/lib/services/gic-trm.service.mjs +27 -0
  87. package/esm2022/lib/services/global.show.task.service.mjs +37 -0
  88. package/esm2022/lib/services/guarantee-document.service.mjs +52 -0
  89. package/esm2022/lib/services/guarantee-enrollment.service.mjs +37 -0
  90. package/esm2022/lib/services/guarantee.service.mjs +128 -0
  91. package/esm2022/lib/services/guarantees-summary-service.mjs +26 -0
  92. package/esm2022/lib/services/hash.service.mjs +36 -0
  93. package/esm2022/lib/services/import-data.service.mjs +27 -0
  94. package/esm2022/lib/services/import-excel-gic.service.mjs +53 -0
  95. package/esm2022/lib/services/initial-configuration-gic-parameters.service.mjs +51 -0
  96. package/esm2022/lib/services/initial-record.service.mjs +51 -0
  97. package/esm2022/lib/services/integration-ado.service.mjs +54 -0
  98. package/esm2022/lib/services/interaction-application-user.service.mjs +81 -0
  99. package/esm2022/lib/services/interest-adjustment.service.mjs +34 -0
  100. package/esm2022/lib/services/keys-assignation.service.mjs +127 -0
  101. package/esm2022/lib/services/legalization.service.mjs +150 -0
  102. package/esm2022/lib/services/letter-campaing.service.mjs +49 -0
  103. package/esm2022/lib/services/letter-task-mapping.service.mjs +40 -0
  104. package/esm2022/lib/services/log.service.mjs +41 -0
  105. package/esm2022/lib/services/maintenance.service.mjs +86 -0
  106. package/esm2022/lib/services/master-category.service.mjs +66 -0
  107. package/esm2022/lib/services/master-program.service.mjs +78 -0
  108. package/esm2022/lib/services/master-university.service.mjs +79 -0
  109. package/esm2022/lib/services/migration-plis.service.mjs +27 -0
  110. package/esm2022/lib/services/migration-survey-queue.service.mjs +24 -0
  111. package/esm2022/lib/services/openkm-document.service.mjs +27 -0
  112. package/esm2022/lib/services/page.service.mjs +38 -0
  113. package/esm2022/lib/services/partner-system.service.mjs +30 -0
  114. package/esm2022/lib/services/partner.service.mjs +34 -0
  115. package/esm2022/lib/services/pdf-analyzer.service.mjs +33 -0
  116. package/esm2022/lib/services/people-master.service.mjs +42 -0
  117. package/esm2022/lib/services/permission.service.mjs +29 -0
  118. package/esm2022/lib/services/pli-cnf-acuity-fields.service.mjs +34 -0
  119. package/esm2022/lib/services/pli-cnf-app-card-filter.service.mjs +40 -0
  120. package/esm2022/lib/services/pli-cnf-appointment-type.service.mjs +41 -0
  121. package/esm2022/lib/services/pli-cnf-budget-program-type.service.mjs +54 -0
  122. package/esm2022/lib/services/pli-cnf-budget.service.mjs +31 -0
  123. package/esm2022/lib/services/pli-cnf-cloning.service.mjs +27 -0
  124. package/esm2022/lib/services/pli-cnf-committee-pdf-config-table-config.service.mjs +47 -0
  125. package/esm2022/lib/services/pli-cnf-committee-pdf-gen-status.service.mjs +30 -0
  126. package/esm2022/lib/services/pli-cnf-committee-valpro-columns.service.mjs +42 -0
  127. package/esm2022/lib/services/pli-cnf-committee-visualization-mode.service.mjs +42 -0
  128. package/esm2022/lib/services/pli-cnf-committee.service.mjs +66 -0
  129. package/esm2022/lib/services/pli-cnf-config-minisite.service.mjs +90 -0
  130. package/esm2022/lib/services/pli-cnf-configuration-credit-study.service.mjs +41 -0
  131. package/esm2022/lib/services/pli-cnf-document-management.service.mjs +40 -0
  132. package/esm2022/lib/services/pli-cnf-dynamic-keys-assign.service.mjs +52 -0
  133. package/esm2022/lib/services/pli-cnf-evaluation-task-mailing.service.mjs +31 -0
  134. package/esm2022/lib/services/pli-cnf-evaluation-task-template.service.mjs +39 -0
  135. package/esm2022/lib/services/pli-cnf-evaluation-task.service.mjs +112 -0
  136. package/esm2022/lib/services/pli-cnf-evaluation-template.service.mjs +95 -0
  137. package/esm2022/lib/services/pli-cnf-form-edit.service.mjs +68 -0
  138. package/esm2022/lib/services/pli-cnf-form-multiaplicacion.service.mjs +46 -0
  139. package/esm2022/lib/services/pli-cnf-guarantee-documents-template.service.mjs +40 -0
  140. package/esm2022/lib/services/pli-cnf-guarantee-token.service.mjs +42 -0
  141. package/esm2022/lib/services/pli-cnf-header.service.mjs +39 -0
  142. package/esm2022/lib/services/pli-cnf-indicator.service.mjs +39 -0
  143. package/esm2022/lib/services/pli-cnf-information-system.service.mjs +24 -0
  144. package/esm2022/lib/services/pli-cnf-interaction.service.mjs +78 -0
  145. package/esm2022/lib/services/pli-cnf-letter-template-type.service.mjs +29 -0
  146. package/esm2022/lib/services/pli-cnf-letter-template.service.mjs +48 -0
  147. package/esm2022/lib/services/pli-cnf-look-and-feel.service.mjs +28 -0
  148. package/esm2022/lib/services/pli-cnf-mail.service.mjs +30 -0
  149. package/esm2022/lib/services/pli-cnf-menu-form.service.mjs +34 -0
  150. package/esm2022/lib/services/pli-cnf-migration-plis-field-budget.service.mjs +34 -0
  151. package/esm2022/lib/services/pli-cnf-migration-plis-field.service.mjs +47 -0
  152. package/esm2022/lib/services/pli-cnf-migration-status-plis.service.mjs +44 -0
  153. package/esm2022/lib/services/pli-cnf-page-section-form.service.mjs +66 -0
  154. package/esm2022/lib/services/pli-cnf-page-sub-process.service.mjs +25 -0
  155. package/esm2022/lib/services/pli-cnf-pdfs.service.mjs +31 -0
  156. package/esm2022/lib/services/pli-cnf-profile-form.service.mjs +40 -0
  157. package/esm2022/lib/services/pli-cnf-profile-user.service.mjs +49 -0
  158. package/esm2022/lib/services/pli-cnf-project-summary.service.mjs +39 -0
  159. package/esm2022/lib/services/pli-cnf-scenario.service.mjs +47 -0
  160. package/esm2022/lib/services/pli-cnf-segmentation.service.mjs +72 -0
  161. package/esm2022/lib/services/pli-cnf-snapshot-token.service.mjs +42 -0
  162. package/esm2022/lib/services/pli-cnf-status-flow-interaction.service.mjs +74 -0
  163. package/esm2022/lib/services/pli-cnf-status-flow.service.mjs +56 -0
  164. package/esm2022/lib/services/pli-cnf-support-document-category.service.mjs +47 -0
  165. package/esm2022/lib/services/pli-cnf-support-document.service.mjs +56 -0
  166. package/esm2022/lib/services/pli-cnf-survey-document.service.mjs +37 -0
  167. package/esm2022/lib/services/pli-cnf-survey-pdf.service.mjs +34 -0
  168. package/esm2022/lib/services/pli-cnf-survey.service.mjs +46 -0
  169. package/esm2022/lib/services/pli-cnf-task-group.service.mjs +33 -0
  170. package/esm2022/lib/services/pli-cnf-text-category.service.mjs +38 -0
  171. package/esm2022/lib/services/pli-cnf-text-option.service.mjs +39 -0
  172. package/esm2022/lib/services/pli-cnf-text.service.mjs +62 -0
  173. package/esm2022/lib/services/pli-cnf-type-text.service.mjs +45 -0
  174. package/esm2022/lib/services/pli-cnf-university-article.service.mjs +39 -0
  175. package/esm2022/lib/services/pli-cnf-user-calendar.service.mjs +36 -0
  176. package/esm2022/lib/services/pli-cnf-user-workspace.service.mjs +35 -0
  177. package/esm2022/lib/services/pli-cnf-valpro-keys.service.mjs +35 -0
  178. package/esm2022/lib/services/pli-cnf-workspace-segmentation.service.mjs +31 -0
  179. package/esm2022/lib/services/pli-message-type.service.mjs +40 -0
  180. package/esm2022/lib/services/pli-multiple-value-filter.service.mjs +39 -0
  181. package/esm2022/lib/services/pli-promocion-username.service.mjs +57 -0
  182. package/esm2022/lib/services/pli-seg-action-user.service.mjs +37 -0
  183. package/esm2022/lib/services/pli-segmentation.service.mjs +130 -0
  184. package/esm2022/lib/services/pli-tag-assignment.service.mjs +36 -0
  185. package/esm2022/lib/services/pli-tag.service.mjs +55 -0
  186. package/esm2022/lib/services/pli-user.service.mjs +51 -0
  187. package/esm2022/lib/services/plis-beneficiario.service.mjs +29 -0
  188. package/esm2022/lib/services/plis-estatus-change.service.mjs +30 -0
  189. package/esm2022/lib/services/post-selection.service.mjs +25 -0
  190. package/esm2022/lib/services/ppp.service.mjs +360 -0
  191. package/esm2022/lib/services/profile.service.mjs +60 -0
  192. package/esm2022/lib/services/progress-bar.service.mjs +40 -0
  193. package/esm2022/lib/services/promotion-score.service.mjs +44 -0
  194. package/esm2022/lib/services/registry-identifier.service.mjs +49 -0
  195. package/esm2022/lib/services/return-refund.service.mjs +53 -0
  196. package/esm2022/lib/services/segmentation-tokens.service.mjs +43 -0
  197. package/esm2022/lib/services/segmentation-user-service.service.mjs +94 -0
  198. package/esm2022/lib/services/segmentation.service.mjs +31 -0
  199. package/esm2022/lib/services/send-application.service.mjs +541 -0
  200. package/esm2022/lib/services/sesion-form.service.mjs +31 -0
  201. package/esm2022/lib/services/sesion.service.mjs +48 -0
  202. package/esm2022/lib/services/spinner.service.mjs +16 -0
  203. package/esm2022/lib/services/sponsorship-letter.service.mjs +68 -0
  204. package/esm2022/lib/services/status.service.mjs +104 -0
  205. package/esm2022/lib/services/summary-budget.service.mjs +24 -0
  206. package/esm2022/lib/services/survey-metadata.service.mjs +28 -0
  207. package/esm2022/lib/services/survey-queue.service.mjs +24 -0
  208. package/esm2022/lib/services/survey.service.mjs +52 -0
  209. package/esm2022/lib/services/tag-management.service.mjs +58 -0
  210. package/esm2022/lib/services/tasa.cambio.service.mjs +35 -0
  211. package/esm2022/lib/services/token-transformation.service.mjs +62 -0
  212. package/esm2022/lib/services/token.service.mjs +1477 -0
  213. package/esm2022/lib/services/university.service.mjs +50 -0
  214. package/esm2022/lib/services/upload-documents.service.mjs +60 -0
  215. package/esm2022/lib/services/user.service.mjs +28 -0
  216. package/esm2022/lib/services/visualization-committee.service.mjs +91 -0
  217. package/esm2022/lib/utils/custom-validator.mjs +95 -0
  218. package/esm2022/lib/utils/form-util.mjs +35 -0
  219. package/esm2022/lib/utils/formio-util.mjs +582 -0
  220. package/esm2022/lib/utils/version-commons.mjs +10 -0
  221. package/esm2022/ng-pli-commons.mjs +5 -0
  222. package/esm2022/public-api.mjs +226 -0
  223. package/esm2022/version.mjs +29 -0
  224. package/fesm2022/ng-pli-commons.mjs +657 -657
  225. package/fesm2022/ng-pli-commons.mjs.map +1 -1
  226. package/package.json +3 -1
@@ -0,0 +1,665 @@
1
+ import { Component, Input, LOCALE_ID, Inject, Output, EventEmitter } from '@angular/core';
2
+ import { CommonListsComponent } from '../common.lists.component';
3
+ import { UntypedFormGroup, UntypedFormControl, Validators } from '@angular/forms';
4
+ import { Token, UtilString, ETipoPresupuesto } from 'ng-pli-util';
5
+ import { CurrencyPipe } from '@angular/common';
6
+ import { TokenService } from '../../services/token.service';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "ngx-toastr";
9
+ import * as i2 from "../../services/common.service";
10
+ import * as i3 from "../../services/ppp.service";
11
+ import * as i4 from "@angular/router";
12
+ import * as i5 from "../../services/budget.service";
13
+ import * as i6 from "../../services/token.service";
14
+ import * as i7 from "../../services/pli-cnf-snapshot-token.service";
15
+ import * as i8 from "../../services/configuration-document.service";
16
+ import * as i9 from "./../../services/pli-cnf-evaluation-task.service";
17
+ import * as i10 from "../../services/pli-cnf-guarantee-token.service";
18
+ import * as i11 from "./configuration-token-subject.service";
19
+ import * as i12 from "@angular/common";
20
+ import * as i13 from "@angular/forms";
21
+ import * as i14 from "primeng/accordion";
22
+ import * as i15 from "primeng/api";
23
+ import * as i16 from "primeng/table";
24
+ import * as i17 from "ng-pli-util";
25
+ import * as i18 from "./snapshot-token/snapshot-token.component";
26
+ import * as i19 from "./guarantee-token/guarantee-token.component";
27
+ export class ConfigurationTokenComponent extends CommonListsComponent {
28
+ constructor(toastrService, cdRef, commonService, pppService, router, budgetService, tokenService, snapshotTokenService, configurationDocumentService, pliCnfTaskService, pliCnfGuaranteeTokenService, configurationTokenSubjectService) {
29
+ super(commonService, cdRef);
30
+ this.toastrService = toastrService;
31
+ this.cdRef = cdRef;
32
+ this.commonService = commonService;
33
+ this.pppService = pppService;
34
+ this.router = router;
35
+ this.budgetService = budgetService;
36
+ this.tokenService = tokenService;
37
+ this.snapshotTokenService = snapshotTokenService;
38
+ this.configurationDocumentService = configurationDocumentService;
39
+ this.pliCnfTaskService = pliCnfTaskService;
40
+ this.pliCnfGuaranteeTokenService = pliCnfGuaranteeTokenService;
41
+ this.configurationTokenSubjectService = configurationTokenSubjectService;
42
+ /** It contains if visible frm tokens */
43
+ this.showFrm = false;
44
+ /** It contains if visible frm tokens */
45
+ this.showFrmMultiple = false;
46
+ /** It contains if visible static tokens */
47
+ this.showStatic = false;
48
+ /** It contains if visible budget tokens */
49
+ this.showBudget = false;
50
+ /** It contains if visible calculated tokens */
51
+ this.showCalculated = false;
52
+ /** It contains if visible calculated form */
53
+ this.showCalculatedForm = false;
54
+ /** It contains if visible calculated tokens */
55
+ this.showSnapshot = false;
56
+ /** It contains if visible calculated form */
57
+ this.showSnapshotForm = false;
58
+ /** It contains if visible budget tokens */
59
+ this.showDocument = true;
60
+ /** It contains if visible budget tokens */
61
+ this.showTask = true;
62
+ /* It contains if visible guarantee tokens*/
63
+ this.showGuatantee = false;
64
+ /* It contains if visible guarantee-form tokens*/
65
+ this.showDocumentAutoAnalysis = false;
66
+ /* It contains if visible guarantee-form tokens*/
67
+ this.showGuatanteeForm = false;
68
+ /** It returns the list token */
69
+ this.onStaticToken = new EventEmitter();
70
+ /*It contains the guarantee token */
71
+ this.lGuaranteeTokens = [];
72
+ this.showAsTitle = false;
73
+ /** Valida si finalizo */
74
+ this.ready = false;
75
+ /** List of tokens static and dynamic form */
76
+ this.lStaticToken = [];
77
+ /** List of calculated tokens */
78
+ this.lCalculatedToken = [];
79
+ /** */
80
+ this.callBudgetService = false;
81
+ this.readyAccordeon = false;
82
+ this.currencyPipe = new CurrencyPipe(this.locale);
83
+ }
84
+ ngOnInit() {
85
+ super.ngOnInit();
86
+ this.ready = false;
87
+ this.getTokenSnapshot();
88
+ this.getTokenGuarantee();
89
+ if (this.showFrm ||
90
+ this.showFrmMultiple ||
91
+ this.showStatic ||
92
+ this.showBudget ||
93
+ this.showCalculated)
94
+ this.initListTokens();
95
+ }
96
+ /**
97
+ * Get the info of tokens from dynamic form, static tokens and calculated.
98
+ */
99
+ initListTokens() {
100
+ if (!this.promCodigo) {
101
+ return;
102
+ }
103
+ this.patCodigo = this.pppService.getPatCodigoByPromCodigo(this.promCodigo);
104
+ this.lStaticToken = [];
105
+ this.lCalculatedToken = [];
106
+ this.initListTokenForm();
107
+ }
108
+ initListTokenForm() {
109
+ this.tokenService.getFormFieldsByPromCodeWithEditGrids(this.promCodigo).then((lStaticToken) => {
110
+ if (lStaticToken) {
111
+ for (let staticToken of lStaticToken) {
112
+ staticToken.tokenType = TokenService.TOKEN_LABEL_FORM;
113
+ let staticTokenValue = [];
114
+ for (let formField of staticToken.value) {
115
+ staticTokenValue.push(formField);
116
+ // Validation to add the country token País
117
+ //"http://servicioslocales.colfuturo.org:32151/data/getUniversitiesByName"
118
+ if (formField.type &&
119
+ formField.type === 'select' &&
120
+ formField.data &&
121
+ formField.data.url &&
122
+ formField.data.url.indexOf('getUniversitiesByName') >= 0) {
123
+ staticTokenValue.push({
124
+ type: 'select-attribute',
125
+ label: 'País',
126
+ key: formField.key + '_level1'
127
+ });
128
+ }
129
+ }
130
+ staticToken.value = staticTokenValue;
131
+ }
132
+ Array.prototype.push.apply(this.lStaticToken, lStaticToken);
133
+ }
134
+ this.initListTokenDocuments();
135
+ //this.initListTokenPresupuesto();
136
+ // this.initListTokenTasks();
137
+ }, (error) => {
138
+ console.log('Error initListTokenForm-getFormFieldsByPromCode', error);
139
+ this.toastrService.error('Error consultando tokens de formulario');
140
+ });
141
+ }
142
+ initListTokenDocuments() {
143
+ this.configurationDocumentService.getListByPromCodigo(this.promCodigo).subscribe((lConfigurationDocument) => {
144
+ if (lConfigurationDocument) {
145
+ this.lStaticToken[this.lStaticToken.length] = {
146
+ title: {
147
+ key: TokenService.getKeyDocument(),
148
+ value: TokenService.TOKEN_LABEL_DOCUMENTO
149
+ },
150
+ tokenType: TokenService.TOKEN_LABEL_DOCUMENTO,
151
+ value: []
152
+ };
153
+ lConfigurationDocument.forEach((cDocument) => {
154
+ this.lStaticToken[this.lStaticToken.length - 1].value.push({
155
+ key: cDocument.id + '_info',
156
+ label: cDocument.name
157
+ });
158
+ });
159
+ }
160
+ this.initListDocumentAnalysis();
161
+ }, (error) => this.toastrService.error('Error consultando la información de documentos'));
162
+ }
163
+ initListDocumentAnalysis() {
164
+ this.configurationDocumentService
165
+ .getByPromCodigoAndAutomaticValidation(this.promCodigo)
166
+ .subscribe({
167
+ next: (lConfigurationDocument) => {
168
+ if (lConfigurationDocument) {
169
+ this.lStaticToken[this.lStaticToken.length] = {
170
+ title: {
171
+ key: TokenService.getKeyDocumentAnalysis(),
172
+ value: TokenService.TOKEN_LABEL_DOCUMENTO_ANALISIS_AUTOMATICO
173
+ },
174
+ tokenType: TokenService.TOKEN_DOCUMENTO_ANALYSIS_TYPE,
175
+ value: []
176
+ };
177
+ lConfigurationDocument.forEach((cDocument) => {
178
+ this.lStaticToken[this.lStaticToken.length - 1].value.push({
179
+ key: cDocument.id + '_partial',
180
+ label: cDocument.name + ' - Análisis parcial'
181
+ });
182
+ this.lStaticToken[this.lStaticToken.length - 1].value.push({
183
+ key: cDocument.id + '_total',
184
+ label: cDocument.name + ' - Análisis total'
185
+ });
186
+ });
187
+ }
188
+ this.initListTokenPresupuesto();
189
+ },
190
+ error: (err) => {
191
+ this.toastrService.error('Error consultando la información de análisis automático de documentos');
192
+ }
193
+ });
194
+ }
195
+ initListTokenPresupuesto() {
196
+ this.budgetService.lGlobalBudgetChanged.subscribe({
197
+ next: (lGlobalBudget) => {
198
+ if (!this.callBudgetService) {
199
+ return;
200
+ }
201
+ this.callBudgetService = false;
202
+ if (lGlobalBudget) {
203
+ let budgetType = [];
204
+ for (let globalBudget of lGlobalBudget) {
205
+ if (globalBudget.pliTipoPresupuesto.tpresCodigo === ETipoPresupuesto.PRIMARY) {
206
+ budgetType.push(globalBudget);
207
+ }
208
+ else if (globalBudget.pliTipoPresupuesto.tpresCodigo ===
209
+ ETipoPresupuesto.SECONDARY) {
210
+ budgetType.push(globalBudget);
211
+ }
212
+ }
213
+ if (budgetType && Object.keys(budgetType).length > 0) {
214
+ this.lStaticToken[this.lStaticToken.length] = {
215
+ title: {
216
+ key: TokenService.getKeyBudget(),
217
+ value: TokenService.TOKEN_LABEL_BUDGET
218
+ },
219
+ tokenType: TokenService.TOKEN_LABEL_BUDGET,
220
+ value: []
221
+ };
222
+ for (let budget of budgetType) {
223
+ const tpresCodigo = budget.pliTipoPresupuesto.tpresCodigo;
224
+ // Add date of financing
225
+ this.lStaticToken[this.lStaticToken.length - 1].value.push({
226
+ key: tpresCodigo +
227
+ '_' +
228
+ TokenService.BUDGET_TOKENS_KEY_FECHA_FINANCING_START,
229
+ label: budget.cpreNombre + ' fecha inicio financiación'
230
+ });
231
+ this.lStaticToken[this.lStaticToken.length - 1].value.push({
232
+ key: tpresCodigo +
233
+ '_' +
234
+ TokenService.BUDGET_TOKENS_KEY_FECHA_FINANCING_END,
235
+ label: budget.cpreNombre + ' fecha fin financiación'
236
+ });
237
+ // Add the total amount
238
+ // this.lStaticToken[this.lStaticToken.length - 1].value.push({
239
+ // key:
240
+ // tpresCodigo + '_' + TokenService.BUDGET_TOKENS_KEY_TOTAL_AMOUNT,
241
+ // label: budget.cpreNombre + ' total'
242
+ // });
243
+ // Add the Convocatoria process total amount
244
+ this.lStaticToken[this.lStaticToken.length - 1].value.push({
245
+ key: tpresCodigo +
246
+ '_' +
247
+ TokenService.BUDGET_TOKENS_KEY_APPLICATION_PROCESS_TOTAL_AMOUNT,
248
+ label: 'Convocatoria- ' + budget.cpreNombre + ' total'
249
+ });
250
+ // Add the Convocatoria process own founds
251
+ this.lStaticToken[this.lStaticToken.length - 1].value.push({
252
+ key: tpresCodigo +
253
+ '_' +
254
+ TokenService.BUDGET_TOKENS_KEY_APPLICATION_PROCESS_TOTAL_OWN_FOUNDS,
255
+ label: 'Convocatoria- ' + budget.cpreNombre + ' fondos propios'
256
+ });
257
+ // Add the Convocatoria process financing
258
+ this.lStaticToken[this.lStaticToken.length - 1].value.push({
259
+ key: tpresCodigo +
260
+ '_' +
261
+ TokenService.BUDGET_TOKENS_KEY_APPLICATION_PROCESS_TOTAL_FINANCING,
262
+ label: 'Convocatoria- ' + budget.cpreNombre + ' financiación'
263
+ });
264
+ // Add the Convocatoria process total amount
265
+ this.lStaticToken[this.lStaticToken.length - 1].value.push({
266
+ key: tpresCodigo +
267
+ '_' +
268
+ TokenService.BUDGET_TOKENS_KEY_LEGALIZATION_PROCESS_TOTAL_AMOUNT,
269
+ label: 'Legalización- ' + budget.cpreNombre + ' total'
270
+ });
271
+ // Add the Convocatoria process own founds
272
+ this.lStaticToken[this.lStaticToken.length - 1].value.push({
273
+ key: tpresCodigo +
274
+ '_' +
275
+ TokenService.BUDGET_TOKENS_KEY_LEGALIZATION_PROCESS_TOTAL_OWN_FOUNDS,
276
+ label: 'Legalización- ' + budget.cpreNombre + ' fondos propios'
277
+ });
278
+ // Add the Convocatoria process financing
279
+ this.lStaticToken[this.lStaticToken.length - 1].value.push({
280
+ key: tpresCodigo +
281
+ '_' +
282
+ TokenService.BUDGET_TOKENS_KEY_LEGALIZATION_PROCESS_TOTAL_FINANCING,
283
+ label: 'Legalización- ' + budget.cpreNombre + ' financiación'
284
+ });
285
+ // Add the Convocatoria process financing
286
+ this.lStaticToken[this.lStaticToken.length - 1].value.push({
287
+ key: tpresCodigo +
288
+ '_' +
289
+ TokenService.BUDGET_TOKENS_KEY_INSURANCE_AMOUNT,
290
+ label: 'Legalización- ' + budget.cpreNombre + ' financiación + seguro'
291
+ });
292
+ // JMP - Mantis 6674 - add token legalization or application total financing
293
+ this.lStaticToken[this.lStaticToken.length - 1].value.push({
294
+ key: tpresCodigo +
295
+ '_' +
296
+ TokenService.LEGALIZATION_OR_APPLICATION_TOTAL_FINANCING,
297
+ label: 'Financiación - ' +
298
+ budget.cpreNombre +
299
+ ' legalización (+ seguro) o Convocatoria '
300
+ });
301
+ this.lStaticToken[this.lStaticToken.length - 1].value.push({
302
+ key: tpresCodigo +
303
+ '_' +
304
+ TokenService.BUDGET_TOKENS_KEY_RESUME_CATEGORY_YEAR,
305
+ label: budget.cpreNombre + ' resumen rubro y año'
306
+ });
307
+ this.lStaticToken[this.lStaticToken.length - 1].value.push({
308
+ key: tpresCodigo + '_' + TokenService.BUDGET_TOKENS_DURATION_STUDIES,
309
+ label: budget.cpreNombre + ' duración de estudios en meses'
310
+ });
311
+ this.lStaticToken[this.lStaticToken.length - 1].value.push({
312
+ key: tpresCodigo +
313
+ '_' +
314
+ TokenService.BUDGET_TOKENS_FINANCING_DURATION,
315
+ label: budget.cpreNombre + ' duración de financiación en meses'
316
+ });
317
+ }
318
+ }
319
+ this.initListTokenTasks();
320
+ }
321
+ },
322
+ error: (error) => {
323
+ console.error('ERROR del servicio: ', error);
324
+ }
325
+ });
326
+ this.budgetService.getListPresupuestoGlobal(this.promCodigo);
327
+ this.callBudgetService = true;
328
+ }
329
+ initListTokenTasks() {
330
+ this.pliCnfTaskService
331
+ .getByPromCodigo(this.promCodigo)
332
+ .subscribe((listTask) => {
333
+ if (listTask) {
334
+ let tokenTaskArr = [];
335
+ for (let i = 0; i < listTask.length; i++) {
336
+ tokenTaskArr.push(listTask[i]);
337
+ tokenTaskArr[i]['formulaToken'] =
338
+ this.camelize(this.eliminarDiacriticos(listTask[i].name)) +
339
+ '_' +
340
+ listTask[i].id;
341
+ }
342
+ this.lStaticToken[this.lStaticToken.length] = {
343
+ title: {
344
+ key: TokenService.TOKEN_LABEL_TASKL,
345
+ value: TokenService.TOKEN_LABEL_TASK
346
+ },
347
+ tokenType: TokenService.TOKEN_LABEL_TASK,
348
+ value: []
349
+ };
350
+ tokenTaskArr.forEach((cTask) => {
351
+ this.lStaticToken[this.lStaticToken.length - 1].value.push({
352
+ key: cTask.formulaToken,
353
+ label: cTask.name
354
+ });
355
+ });
356
+ this.adjustStaticTokensInfo();
357
+ this.getTokenCalculated();
358
+ }
359
+ });
360
+ }
361
+ adjustStaticTokensInfo() {
362
+ // Add the static tokens
363
+ this.lStaticToken[this.lStaticToken.length] = {
364
+ title: {
365
+ key: TokenService.getKeyStatic(),
366
+ value: TokenService.TOKEN_LABEL_STATIC
367
+ },
368
+ tokenType: TokenService.TOKEN_LABEL_STATIC,
369
+ value: TokenService.STATIC_TOKENS
370
+ };
371
+ this.readyAccordeon = true;
372
+ let colMax = 4;
373
+ //Organize depends of the panels
374
+ for (let groupToken of this.lStaticToken) {
375
+ let panel = [];
376
+ if (groupToken.tokenType == TokenService.TOKEN_LABEL_FORM) {
377
+ let panelName = null;
378
+ let lastPanelName = null;
379
+ for (let staticToken of groupToken.value) {
380
+ if (!this.showFrmMultiple &&
381
+ staticToken.editgrid &&
382
+ staticToken.editgrid === true) {
383
+ continue;
384
+ }
385
+ if (staticToken.panelName) {
386
+ panelName = staticToken.panelName;
387
+ }
388
+ if (panelName !== null && panelName != lastPanelName) {
389
+ panel.push({
390
+ title: {
391
+ value: panelName
392
+ },
393
+ value: []
394
+ });
395
+ }
396
+ else if (panelName === null && panel.length === 0) {
397
+ panel.push({
398
+ title: {
399
+ value: groupToken.title.value
400
+ },
401
+ value: []
402
+ });
403
+ }
404
+ panel[panel.length - 1].value.push(staticToken);
405
+ lastPanelName = panelName;
406
+ }
407
+ }
408
+ else {
409
+ panel.push({
410
+ title: {
411
+ value: groupToken.title.value
412
+ },
413
+ value: []
414
+ });
415
+ for (let staticToken of groupToken.value) {
416
+ panel[panel.length - 1].value.push(staticToken);
417
+ }
418
+ }
419
+ groupToken.value = panel;
420
+ }
421
+ for (let panel of this.lStaticToken) {
422
+ for (let groupToken of panel.value) {
423
+ let iCol = 0;
424
+ let iRow = 0;
425
+ let lStaticTokenTmp = [];
426
+ lStaticTokenTmp[iRow] = [];
427
+ for (let staticToken of groupToken.value) {
428
+ if (staticToken.type && staticToken.type === 'button') {
429
+ continue;
430
+ }
431
+ if (!lStaticTokenTmp[iRow]) {
432
+ lStaticTokenTmp[iRow] = [];
433
+ }
434
+ if (panel.tokenType === TokenService.TOKEN_LABEL_TASK) {
435
+ lStaticTokenTmp[iRow].push({
436
+ key: '${' + panel.title.key + '_' + staticToken.key + '}',
437
+ value: staticToken.label,
438
+ object: staticToken
439
+ });
440
+ }
441
+ else {
442
+ lStaticTokenTmp[iRow].push({
443
+ key: '${' + panel.title.key + '_' + staticToken.key + '}',
444
+ value: staticToken.label,
445
+ object: staticToken
446
+ });
447
+ }
448
+ iCol++;
449
+ if (iCol == colMax) {
450
+ iRow++;
451
+ iCol = 0;
452
+ }
453
+ }
454
+ if (iCol > 0) {
455
+ for (let i = iCol; i < colMax; i++) {
456
+ lStaticTokenTmp[iRow].push({
457
+ key: null,
458
+ value: null
459
+ });
460
+ }
461
+ }
462
+ groupToken.value = lStaticTokenTmp;
463
+ }
464
+ }
465
+ this.onStaticToken.emit(this.lStaticToken);
466
+ this.configurationTokenSubjectService.setSubjectConfigurationTokens(this.lStaticToken);
467
+ }
468
+ getTokenCalculated() {
469
+ this.tokenService.getListByPromCodigo(this.promCodigo).subscribe((lToken) => {
470
+ this.lCalculatedToken = lToken;
471
+ this.ready = true;
472
+ }, (error) => {
473
+ console.log('Error getTokenCalculated -getListByPromCodigo', error);
474
+ this.toastrService.error('Error el formulario');
475
+ });
476
+ }
477
+ getTokenSnapshot() {
478
+ if (this.showSnapshot) {
479
+ this.snapshotTokenService.getAllByPromCode(this.promCodigo).subscribe((tokens) => {
480
+ this.snapShotTokens = tokens;
481
+ this.ready = true;
482
+ });
483
+ }
484
+ }
485
+ getTokenGuarantee() {
486
+ if (this.showGuatantee) {
487
+ this.pliCnfGuaranteeTokenService.getAllByPromCodigo(this.promCodigo).subscribe({
488
+ next: (result) => {
489
+ this.lGuaranteeTokens = result;
490
+ this.ready = true;
491
+ },
492
+ error: (error) => {
493
+ this.toastrService.error('Error al obtener los token de garantias', 'Error');
494
+ }
495
+ });
496
+ }
497
+ }
498
+ eliminarDiacriticos(texto) {
499
+ return texto.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
500
+ }
501
+ camelize(str) {
502
+ return str
503
+ .trim()
504
+ .split(/\s+/)
505
+ .map((a) => a.trim())
506
+ .filter((a) => a.length > 0)
507
+ .map((a) => a[0].toUpperCase() + a.substring(1))
508
+ .join('');
509
+ }
510
+ /** It deletes a sponsor */
511
+ delete(token) {
512
+ if (confirm('¿Está seguro que desea eliminar el token ' + token.name + '?')) {
513
+ this.tokenService.delete(token.id).subscribe((result) => {
514
+ this.toastrService.success('El token fué eliminada exitosamente');
515
+ this.getTokenCalculated();
516
+ }, (error) => {
517
+ this.toastrService.error('Error al intentar eliminar el token');
518
+ });
519
+ }
520
+ }
521
+ /** Tet the label to calculated tokens */
522
+ labelCalculated(token) {
523
+ return '${' + TokenService.getKeyCalculated(token) + '}';
524
+ }
525
+ /** Tet the label to calculated tokens */
526
+ labelSnapshot(token) {
527
+ return '${' + TokenService.getKeySnapshot(token) + '}';
528
+ }
529
+ /* The label to guarantee tokens */
530
+ labelGuarantee(token) {
531
+ return '${' + TokenService.getKeyGuarantee(token) + '}';
532
+ }
533
+ initForm(tokenSelected) {
534
+ this.tokenSelected =
535
+ tokenSelected == null
536
+ ? new Token()
537
+ : Object.assign(new Token(), JSON.parse(JSON.stringify(tokenSelected)));
538
+ if (!this.tokenSelected.promCodigo) {
539
+ this.tokenSelected.promCodigo = this.promCodigo;
540
+ }
541
+ this.controlName = new UntypedFormControl(this.tokenSelected.name, Validators.required);
542
+ this.controlFormula = new UntypedFormControl(this.tokenSelected.formula, Validators.required);
543
+ this.frmToken = new UntypedFormGroup({
544
+ controlName: this.controlName,
545
+ controlFormula: this.controlFormula
546
+ });
547
+ }
548
+ resolveKeyCalculatedToken() {
549
+ return UtilString.replaceAccentSpacesOthers(this.tokenSelected.name);
550
+ }
551
+ save() {
552
+ if (this.isFormValid(this.frmToken)) {
553
+ // Validate if the name is unique
554
+ if (this.lCalculatedToken && this.lCalculatedToken.length > 0) {
555
+ for (let calToken of this.lCalculatedToken) {
556
+ if (UtilString.replaceAccentSpacesOthers(calToken.name) ===
557
+ UtilString.replaceAccentSpacesOthers(this.tokenSelected.name) &&
558
+ (!this.tokenSelected.id || this.tokenSelected.id !== calToken.id)) {
559
+ this.toastrService.warning('El token ' + calToken.name + ' tiene la misma llave', 'Alerta!');
560
+ return;
561
+ }
562
+ }
563
+ }
564
+ let evalFormula = false;
565
+ try {
566
+ evalFormula = this.tokenService.validateFormula(this.lStaticToken, this.tokenSelected.name, this.tokenSelected.formula);
567
+ }
568
+ catch (error) {
569
+ console.error(error.error);
570
+ this.toastrService.error(error.message, error.title);
571
+ return;
572
+ }
573
+ if (!evalFormula) {
574
+ this.toastrService.error('No se logro evaluar la formular', 'Error!');
575
+ return;
576
+ }
577
+ // Save the tokenSelected
578
+ this.tokenService.save(this.tokenSelected).subscribe((tokenSave) => {
579
+ this.toastrService.success('Se ha guardado exitosamente ', 'Guardado exitoso!');
580
+ this.tokenSelected = null;
581
+ this.getTokenCalculated();
582
+ }, (error) => {
583
+ console.error(error);
584
+ this.toastrService.error('Error al intentar guardar el token', 'Error!');
585
+ });
586
+ }
587
+ }
588
+ cancel() {
589
+ this.tokenSelected = null;
590
+ }
591
+ /** It validates if type is frm */
592
+ isGroupFrm(type) {
593
+ return type === TokenService.TOKEN_LABEL_FORM;
594
+ }
595
+ /** It validates if type is static */
596
+ isGroupStatic(type) {
597
+ return type === TokenService.TOKEN_LABEL_STATIC;
598
+ }
599
+ /** It validates if type is budget */
600
+ isGroupBudget(type) {
601
+ return type === TokenService.TOKEN_LABEL_BUDGET;
602
+ }
603
+ /** It validates if type is document */
604
+ isGroupDocument(type) {
605
+ return type === TokenService.TOKEN_LABEL_DOCUMENTO;
606
+ }
607
+ isGroupDocumentAnalysis(type) {
608
+ return type === TokenService.TOKEN_DOCUMENTO_ANALYSIS_TYPE;
609
+ }
610
+ /** It validates if type is task */
611
+ isGroupTask(type) {
612
+ return type === TokenService.TOKEN_LABEL_TASK;
613
+ }
614
+ /** It validates visibility to all tokens mixed */
615
+ validateVisibility(type) {
616
+ return ((this.isGroupFrm(type) && this.showFrm) ||
617
+ (this.isGroupStatic(type) && this.showStatic) ||
618
+ (this.isGroupBudget(type) && this.showBudget) ||
619
+ (this.isGroupDocument(type) && this.showDocument) ||
620
+ (this.isGroupTask(type) && this.showTask) ||
621
+ (this.isGroupDocumentAnalysis(type) && this.showDocumentAutoAnalysis));
622
+ }
623
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ConfigurationTokenComponent, deps: [{ token: i1.ToastrService }, { token: i0.ChangeDetectorRef }, { token: i2.CommonService }, { token: i3.PppService }, { token: i4.Router }, { token: i5.BudgetService }, { token: i6.TokenService }, { token: i7.PliCnfSnapshotTokenServices }, { token: i8.ConfigurationDocumentService }, { token: i9.PliCnfEvaluationTaskService }, { token: i10.PliCnfGuaranteeTokenService }, { token: i11.ConfigurationTokenSubjectService }], target: i0.ɵɵFactoryTarget.Component }); }
624
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ConfigurationTokenComponent, selector: "pli-configuration-token", inputs: { promCodigo: "promCodigo", showFrm: "showFrm", showFrmMultiple: "showFrmMultiple", showStatic: "showStatic", showBudget: "showBudget", showCalculated: "showCalculated", showCalculatedForm: "showCalculatedForm", showSnapshot: "showSnapshot", showSnapshotForm: "showSnapshotForm", showDocument: "showDocument", showTask: "showTask", showGuatantee: "showGuatantee", showDocumentAutoAnalysis: "showDocumentAutoAnalysis", showGuatanteeForm: "showGuatanteeForm", showAsTitle: "showAsTitle" }, outputs: { onStaticToken: "onStaticToken" }, usesInheritance: true, ngImport: i0, template: "<div\r\n\t*ngIf=\"readyAccordeon && ready\"\r\n\tpliAuthorityDirective\r\n\t[authorities]=\"[p('ROLE_TOKENS_CONSULTAR')]\"\r\n\t[patCodigo]=\"patCodigo\"\r\n\t[externalAllowed]=\"false\"\r\n>\r\n\t<div class=\"row\">\r\n\t\t<div class=\"col-md-12\">\r\n\t\t\t<h4 class=\"no-margin-top\" *ngIf=\"!showAsTitle\">\r\n\t\t\t\tTokens formulario, documentos, presupuesto, tareas y est\u00E1ticos\r\n\t\t\t</h4>\r\n\t\t\t<label class=\"no-margin-top form-control-label\" *ngIf=\"showAsTitle\">\r\n\t\t\t\tTokens formulario, documentos, presupuesto, tareas y est\u00E1ticos\r\n\t\t\t</label>\r\n\t\t\t<p-accordion [multiple]=\"true\">\r\n\t\t\t\t<ng-container *ngFor=\"let groupToken of lStaticToken\">\r\n\t\t\t\t\t<p-accordionTab\r\n\t\t\t\t\t\t*ngIf=\"validateVisibility(groupToken.tokenType)\"\r\n\t\t\t\t\t\theader=\"{{ groupToken.title.value }}\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<div *ngFor=\"let panel of groupToken.value\">\r\n\t\t\t\t\t\t\t<h4 *ngIf=\"groupToken.value && groupToken.value.length > 1\">\r\n\t\t\t\t\t\t\t\t{{ panel.title.value }}\r\n\t\t\t\t\t\t\t</h4>\r\n\t\t\t\t\t\t\t<hr\r\n\t\t\t\t\t\t\t\t*ngIf=\"groupToken.value && groupToken.value.length > 1\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin: 5px 0\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<div *ngFor=\"let staticToken of panel.value\" class=\"ui-g\">\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[0] && staticToken[0].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[0].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[0].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[0].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[0].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[1] && staticToken[1].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[1].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[1].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[1].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[1].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[2] && staticToken[2].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[2].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[2].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[2].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[2].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[3] && staticToken[3].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[3].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[3].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[3].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[3].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</p-accordionTab>\r\n\t\t\t\t</ng-container>\r\n\t\t\t\t<p-accordionTab\r\n\t\t\t\t\t*ngIf=\"\r\n\t\t\t\t\t\tlCalculatedToken && showCalculatedForm === false && showCalculated === true\r\n\t\t\t\t\t\"\r\n\t\t\t\t\theader=\"Tokens calculados\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<div *ngFor=\"let token of lCalculatedToken\" class=\"ui-g\">\r\n\t\t\t\t\t\t<div class=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelCalculated(token))\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelCalculated(token) }}\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<span title=\"{{ token.name }}\">{{ token.name }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-accordionTab>\r\n\t\t\t\t<p-accordionTab *ngIf=\"snapShotTokens && showSnapshot\" header=\"Tokens snapshot\">\r\n\t\t\t\t\t<div *ngFor=\"let token of snapShotTokens\" class=\"ui-g\">\r\n\t\t\t\t\t\t<div class=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelSnapshot(token))\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelSnapshot(token) }}\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<span title=\"{{ token.name }}\">{{ token.name }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-accordionTab>\r\n\t\t\t\t<p-accordionTab *ngIf=\"lGuaranteeTokens && showGuatantee\" header=\"Tokens Garantias\">\r\n\t\t\t\t\t<div *ngFor=\"let token of lGuaranteeTokens\" class=\"ui-g\">\r\n\t\t\t\t\t\t<div class=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelGuarantee(token))\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelGuarantee(token) }}\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<span title=\"{{ token.name }}\">{{ token.name }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-accordionTab>\r\n\t\t\t</p-accordion>\r\n\t\t</div>\r\n\t\t<div\r\n\t\t\tclass=\"col-md-12\"\r\n\t\t\t*ngIf=\"lCalculatedToken && showCalculatedForm === true && showCalculated === true\"\r\n\t\t>\r\n\t\t\t<span style=\"width: 1px; height: 10px\">&nbsp;</span>\r\n\t\t\t<h4 class=\"no-margin-top\">Tokens calculados</h4>\r\n\t\t\t<p-table [value]=\"lCalculatedToken\" [responsive]=\"true\">\r\n\t\t\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t\t\t<tr class=\"text-align-center\">\r\n\t\t\t\t\t\t<th class=\"text-align-center\" width=\"40%\">Nombre</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Formula</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Creado</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Modificado</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Acciones</th>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</ng-template>\r\n\t\t\t\t<ng-template pTemplate=\"body\" let-token>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelCalculated(token))\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelCalculated(token) }}\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t{{ token.name }}\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t<td class=\"cut-line\">{{ token.formula }}</td>\r\n\t\t\t\t\t\t<td>{{ token.createdAt | date: 'dd MMM yyyy' | lowercase }}</td>\r\n\t\t\t\t\t\t<td>{{ token.modifiedAt | date: 'dd MMM yyyy' | lowercase }}</td>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<div class=\"btn-group\" role=\"group\">\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\tclass=\"btn btn-default\"\r\n\t\t\t\t\t\t\t\t\t(click)=\"initForm(token)\"\r\n\t\t\t\t\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_CREAR_EDITAR')]\"\r\n\t\t\t\t\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\tEditar\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\tclass=\"btn btn-default dropdown-toggle\"\r\n\t\t\t\t\t\t\t\t\tdata-toggle=\"dropdown\"\r\n\t\t\t\t\t\t\t\t\taria-haspopup=\"true\"\r\n\t\t\t\t\t\t\t\t\taria-expanded=\"false\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<span class=\"caret\"></span>\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<ul class=\"dropdown-menu\">\r\n\t\t\t\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\t\t\t\t\t(click)=\"delete(token)\"\r\n\t\t\t\t\t\t\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t\t\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_ELIMINAR')]\"\r\n\t\t\t\t\t\t\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t\t\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t>Eliminar</a\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</ng-template>\r\n\t\t\t</p-table>\r\n\t\t\t<div class=\"text-align-right\" style=\"padding: 0.75rem 1.25rem\">\r\n\t\t\t\t<button\r\n\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\tclass=\"btn btn-primary\"\r\n\t\t\t\t\t(click)=\"initForm(null)\"\r\n\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_CREAR_EDITAR')]\"\r\n\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t>\r\n\t\t\t\t\tAgregar nuevo\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div>\r\n\t\t\t\t<form [formGroup]=\"frmToken\" (ngSubmit)=\"save()\" *ngIf=\"tokenSelected\">\r\n\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t<div class=\"col-md-12\">\r\n\t\t\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t\t\t<div class=\"col-sm-6 col-md-6\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"form-group required\">\r\n\t\t\t\t\t\t\t\t\t\t<label for=\"name\" class=\"form-control-label\">Nombre</label>\r\n\r\n\t\t\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\t\t\ttype=\"input\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"form-control\"\r\n\t\t\t\t\t\t\t\t\t\t\tname=\"name\"\r\n\t\t\t\t\t\t\t\t\t\t\tid=\"name\"\r\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Nombre\"\r\n\t\t\t\t\t\t\t\t\t\t\tformControlName=\"controlName\"\r\n\t\t\t\t\t\t\t\t\t\t\t[(ngModel)]=\"tokenSelected.name\"\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t<br /><br />\r\n\t\t\t\t\t\t\t\t\t\t<label class=\"form-control-label\">Llave:</label\r\n\t\t\t\t\t\t\t\t\t\t>&nbsp;&nbsp;<span style=\"font-weight: bold\">{{\r\n\t\t\t\t\t\t\t\t\t\t\tresolveKeyCalculatedToken()\r\n\t\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"form-control-error\">\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"hasError(controlName, 'required')\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>Nombre es requerido</small\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\t\t<div class=\"col-sm-6 col-md-6\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"form-group required\">\r\n\t\t\t\t\t\t\t\t\t\t<label for=\"formula\" class=\"form-control-label\"\r\n\t\t\t\t\t\t\t\t\t\t\t>Formula</label\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\r\n\t\t\t\t\t\t\t\t\t\t<!-- <input type=\"input\" class=\"form-control\" name=\"formula\" id=\"formula\" placeholder=\"F\u00F3rmula\"\r\n formControlName=\"formula\" [(ngModel)]=\"tokenSelected.formula\" /> -->\r\n\t\t\t\t\t\t\t\t\t\t<textarea\r\n\t\t\t\t\t\t\t\t\t\t\tcols=\"50\"\r\n\t\t\t\t\t\t\t\t\t\t\trows=\"4\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"form-control\"\r\n\t\t\t\t\t\t\t\t\t\t\tname=\"formula\"\r\n\t\t\t\t\t\t\t\t\t\t\tid=\"formula\"\r\n\t\t\t\t\t\t\t\t\t\t\tformControlName=\"controlFormula\"\r\n\t\t\t\t\t\t\t\t\t\t\t[(ngModel)]=\"tokenSelected.formula\"\r\n\t\t\t\t\t\t\t\t\t\t></textarea>\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"form-control-error\">\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"hasError(controlFormula, 'required')\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>F\u00F3rmula es requerida</small\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"card-footer text-align-right\">\r\n\t\t\t\t\t\t\t\t<button type=\"button\" (click)=\"cancel()\" class=\"btn btn-link\">\r\n\t\t\t\t\t\t\t\t\tCancelar\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"submit\"\r\n\t\t\t\t\t\t\t\t\tclass=\"btn btn-success\"\r\n\t\t\t\t\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_CREAR_EDITAR')]\"\r\n\t\t\t\t\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\tGuardar\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</form>\r\n\t\t\t</div>\r\n\t\t\t<pli-snapshot-token\r\n\t\t\t\t[promCodigo]=\"promCodigo\"\r\n\t\t\t\t*ngIf=\"showSnapshotForm\"\r\n\t\t\t></pli-snapshot-token>\r\n\t\t</div>\r\n\t</div>\r\n\t<div class=\"row\">\r\n\t\t<div class=\"col-sm-12 col-md-12 col-lg-12\">\r\n\t\t\t<pli-guarantee-token [promCodigo]=\"promCodigo\" *ngIf=\"showGuatanteeForm\">\r\n\t\t\t</pli-guarantee-token>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i13.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i13.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i13.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i14.Accordion, selector: "p-accordion", inputs: ["multiple", "style", "styleClass", "expandIcon", "collapseIcon", "activeIndex", "selectOnFocus", "headerAriaLevel"], outputs: ["onClose", "onOpen", "activeIndexChange"] }, { kind: "component", type: i14.AccordionTab, selector: "p-accordionTab", inputs: ["id", "header", "headerStyle", "tabStyle", "contentStyle", "tabStyleClass", "headerStyleClass", "contentStyleClass", "disabled", "cache", "transitionOptions", "iconPos", "selected", "headerAriaLevel"], outputs: ["selectedChange"] }, { kind: "directive", type: i15.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i16.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "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", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i13.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i13.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i17.AuthorityDirectiveDirective, selector: "[pliAuthorityDirective]", inputs: ["authorities", "patCodigo", "externalAllowed"] }, { kind: "component", type: i18.SnapshotTokenComponent, selector: "pli-snapshot-token", inputs: ["promCodigo"] }, { kind: "component", type: i19.GuaranteeTokenComponent, selector: "pli-guarantee-token", inputs: ["promCodigo"] }, { kind: "pipe", type: i12.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: i12.DatePipe, name: "date" }] }); }
625
+ }
626
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ConfigurationTokenComponent, decorators: [{
627
+ type: Component,
628
+ args: [{ selector: 'pli-configuration-token', standalone: false, template: "<div\r\n\t*ngIf=\"readyAccordeon && ready\"\r\n\tpliAuthorityDirective\r\n\t[authorities]=\"[p('ROLE_TOKENS_CONSULTAR')]\"\r\n\t[patCodigo]=\"patCodigo\"\r\n\t[externalAllowed]=\"false\"\r\n>\r\n\t<div class=\"row\">\r\n\t\t<div class=\"col-md-12\">\r\n\t\t\t<h4 class=\"no-margin-top\" *ngIf=\"!showAsTitle\">\r\n\t\t\t\tTokens formulario, documentos, presupuesto, tareas y est\u00E1ticos\r\n\t\t\t</h4>\r\n\t\t\t<label class=\"no-margin-top form-control-label\" *ngIf=\"showAsTitle\">\r\n\t\t\t\tTokens formulario, documentos, presupuesto, tareas y est\u00E1ticos\r\n\t\t\t</label>\r\n\t\t\t<p-accordion [multiple]=\"true\">\r\n\t\t\t\t<ng-container *ngFor=\"let groupToken of lStaticToken\">\r\n\t\t\t\t\t<p-accordionTab\r\n\t\t\t\t\t\t*ngIf=\"validateVisibility(groupToken.tokenType)\"\r\n\t\t\t\t\t\theader=\"{{ groupToken.title.value }}\"\r\n\t\t\t\t\t>\r\n\t\t\t\t\t\t<div *ngFor=\"let panel of groupToken.value\">\r\n\t\t\t\t\t\t\t<h4 *ngIf=\"groupToken.value && groupToken.value.length > 1\">\r\n\t\t\t\t\t\t\t\t{{ panel.title.value }}\r\n\t\t\t\t\t\t\t</h4>\r\n\t\t\t\t\t\t\t<hr\r\n\t\t\t\t\t\t\t\t*ngIf=\"groupToken.value && groupToken.value.length > 1\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin: 5px 0\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t<div *ngFor=\"let staticToken of panel.value\" class=\"ui-g\">\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[0] && staticToken[0].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[0].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[0].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[0].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[0].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[1] && staticToken[1].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[1].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[1].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[1].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[1].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[2] && staticToken[2].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[2].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[2].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[2].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[2].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\t\t*ngIf=\"staticToken[3] && staticToken[3].key\"\r\n\t\t\t\t\t\t\t\t\tclass=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\t(click)=\"copyMessage(staticToken[3].key)\"\r\n\t\t\t\t\t\t\t\t\t\ttitle=\"{{ staticToken[3].key }}\"\r\n\t\t\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<span title=\"{{ staticToken[3].value }}\">{{\r\n\t\t\t\t\t\t\t\t\t\tstaticToken[3].value\r\n\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</p-accordionTab>\r\n\t\t\t\t</ng-container>\r\n\t\t\t\t<p-accordionTab\r\n\t\t\t\t\t*ngIf=\"\r\n\t\t\t\t\t\tlCalculatedToken && showCalculatedForm === false && showCalculated === true\r\n\t\t\t\t\t\"\r\n\t\t\t\t\theader=\"Tokens calculados\"\r\n\t\t\t\t>\r\n\t\t\t\t\t<div *ngFor=\"let token of lCalculatedToken\" class=\"ui-g\">\r\n\t\t\t\t\t\t<div class=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelCalculated(token))\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelCalculated(token) }}\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<span title=\"{{ token.name }}\">{{ token.name }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-accordionTab>\r\n\t\t\t\t<p-accordionTab *ngIf=\"snapShotTokens && showSnapshot\" header=\"Tokens snapshot\">\r\n\t\t\t\t\t<div *ngFor=\"let token of snapShotTokens\" class=\"ui-g\">\r\n\t\t\t\t\t\t<div class=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelSnapshot(token))\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelSnapshot(token) }}\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<span title=\"{{ token.name }}\">{{ token.name }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-accordionTab>\r\n\t\t\t\t<p-accordionTab *ngIf=\"lGuaranteeTokens && showGuatantee\" header=\"Tokens Garantias\">\r\n\t\t\t\t\t<div *ngFor=\"let token of lGuaranteeTokens\" class=\"ui-g\">\r\n\t\t\t\t\t\t<div class=\"ui-g-12 ui-md-6 ui-lg-3 cut-line\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelGuarantee(token))\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelGuarantee(token) }}\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<span title=\"{{ token.name }}\">{{ token.name }}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-accordionTab>\r\n\t\t\t</p-accordion>\r\n\t\t</div>\r\n\t\t<div\r\n\t\t\tclass=\"col-md-12\"\r\n\t\t\t*ngIf=\"lCalculatedToken && showCalculatedForm === true && showCalculated === true\"\r\n\t\t>\r\n\t\t\t<span style=\"width: 1px; height: 10px\">&nbsp;</span>\r\n\t\t\t<h4 class=\"no-margin-top\">Tokens calculados</h4>\r\n\t\t\t<p-table [value]=\"lCalculatedToken\" [responsive]=\"true\">\r\n\t\t\t\t<ng-template pTemplate=\"header\">\r\n\t\t\t\t\t<tr class=\"text-align-center\">\r\n\t\t\t\t\t\t<th class=\"text-align-center\" width=\"40%\">Nombre</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Formula</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Creado</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Modificado</th>\r\n\t\t\t\t\t\t<th class=\"text-align-center\">Acciones</th>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</ng-template>\r\n\t\t\t\t<ng-template pTemplate=\"body\" let-token>\r\n\t\t\t\t\t<tr>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t(click)=\"copyMessage(labelCalculated(token))\"\r\n\t\t\t\t\t\t\t\tstyle=\"margin-right: 8px\"\r\n\t\t\t\t\t\t\t\ttitle=\"{{ labelCalculated(token) }}\"\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t<span class=\"fa fa-clipboard\"></span>\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t{{ token.name }}\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t\t<td class=\"cut-line\">{{ token.formula }}</td>\r\n\t\t\t\t\t\t<td>{{ token.createdAt | date: 'dd MMM yyyy' | lowercase }}</td>\r\n\t\t\t\t\t\t<td>{{ token.modifiedAt | date: 'dd MMM yyyy' | lowercase }}</td>\r\n\t\t\t\t\t\t<td>\r\n\t\t\t\t\t\t\t<div class=\"btn-group\" role=\"group\">\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\tclass=\"btn btn-default\"\r\n\t\t\t\t\t\t\t\t\t(click)=\"initForm(token)\"\r\n\t\t\t\t\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_CREAR_EDITAR')]\"\r\n\t\t\t\t\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\tEditar\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\tclass=\"btn btn-default dropdown-toggle\"\r\n\t\t\t\t\t\t\t\t\tdata-toggle=\"dropdown\"\r\n\t\t\t\t\t\t\t\t\taria-haspopup=\"true\"\r\n\t\t\t\t\t\t\t\t\taria-expanded=\"false\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<span class=\"caret\"></span>\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<ul class=\"dropdown-menu\">\r\n\t\t\t\t\t\t\t\t\t<li>\r\n\t\t\t\t\t\t\t\t\t\t<a\r\n\t\t\t\t\t\t\t\t\t\t\thref=\"Javascript:;\"\r\n\t\t\t\t\t\t\t\t\t\t\t(click)=\"delete(token)\"\r\n\t\t\t\t\t\t\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t\t\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_ELIMINAR')]\"\r\n\t\t\t\t\t\t\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t\t\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t\t\t\t\t\t\t\t>Eliminar</a\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</td>\r\n\t\t\t\t\t</tr>\r\n\t\t\t\t</ng-template>\r\n\t\t\t</p-table>\r\n\t\t\t<div class=\"text-align-right\" style=\"padding: 0.75rem 1.25rem\">\r\n\t\t\t\t<button\r\n\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\tclass=\"btn btn-primary\"\r\n\t\t\t\t\t(click)=\"initForm(null)\"\r\n\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_CREAR_EDITAR')]\"\r\n\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t>\r\n\t\t\t\t\tAgregar nuevo\r\n\t\t\t\t</button>\r\n\t\t\t</div>\r\n\r\n\t\t\t<div>\r\n\t\t\t\t<form [formGroup]=\"frmToken\" (ngSubmit)=\"save()\" *ngIf=\"tokenSelected\">\r\n\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t<div class=\"col-md-12\">\r\n\t\t\t\t\t\t\t<div class=\"row\">\r\n\t\t\t\t\t\t\t\t<div class=\"col-sm-6 col-md-6\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"form-group required\">\r\n\t\t\t\t\t\t\t\t\t\t<label for=\"name\" class=\"form-control-label\">Nombre</label>\r\n\r\n\t\t\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\t\t\ttype=\"input\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"form-control\"\r\n\t\t\t\t\t\t\t\t\t\t\tname=\"name\"\r\n\t\t\t\t\t\t\t\t\t\t\tid=\"name\"\r\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Nombre\"\r\n\t\t\t\t\t\t\t\t\t\t\tformControlName=\"controlName\"\r\n\t\t\t\t\t\t\t\t\t\t\t[(ngModel)]=\"tokenSelected.name\"\r\n\t\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\t<br /><br />\r\n\t\t\t\t\t\t\t\t\t\t<label class=\"form-control-label\">Llave:</label\r\n\t\t\t\t\t\t\t\t\t\t>&nbsp;&nbsp;<span style=\"font-weight: bold\">{{\r\n\t\t\t\t\t\t\t\t\t\t\tresolveKeyCalculatedToken()\r\n\t\t\t\t\t\t\t\t\t\t}}</span>\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"form-control-error\">\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"hasError(controlName, 'required')\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>Nombre es requerido</small\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\r\n\t\t\t\t\t\t\t\t<div class=\"col-sm-6 col-md-6\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"form-group required\">\r\n\t\t\t\t\t\t\t\t\t\t<label for=\"formula\" class=\"form-control-label\"\r\n\t\t\t\t\t\t\t\t\t\t\t>Formula</label\r\n\t\t\t\t\t\t\t\t\t\t>\r\n\r\n\t\t\t\t\t\t\t\t\t\t<!-- <input type=\"input\" class=\"form-control\" name=\"formula\" id=\"formula\" placeholder=\"F\u00F3rmula\"\r\n formControlName=\"formula\" [(ngModel)]=\"tokenSelected.formula\" /> -->\r\n\t\t\t\t\t\t\t\t\t\t<textarea\r\n\t\t\t\t\t\t\t\t\t\t\tcols=\"50\"\r\n\t\t\t\t\t\t\t\t\t\t\trows=\"4\"\r\n\t\t\t\t\t\t\t\t\t\t\tclass=\"form-control\"\r\n\t\t\t\t\t\t\t\t\t\t\tname=\"formula\"\r\n\t\t\t\t\t\t\t\t\t\t\tid=\"formula\"\r\n\t\t\t\t\t\t\t\t\t\t\tformControlName=\"controlFormula\"\r\n\t\t\t\t\t\t\t\t\t\t\t[(ngModel)]=\"tokenSelected.formula\"\r\n\t\t\t\t\t\t\t\t\t\t></textarea>\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"form-control-error\">\r\n\t\t\t\t\t\t\t\t\t\t\t<small *ngIf=\"hasError(controlFormula, 'required')\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t>F\u00F3rmula es requerida</small\r\n\t\t\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t<div class=\"card-footer text-align-right\">\r\n\t\t\t\t\t\t\t\t<button type=\"button\" (click)=\"cancel()\" class=\"btn btn-link\">\r\n\t\t\t\t\t\t\t\t\tCancelar\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"submit\"\r\n\t\t\t\t\t\t\t\t\tclass=\"btn btn-success\"\r\n\t\t\t\t\t\t\t\t\tpliAuthorityDirective\r\n\t\t\t\t\t\t\t\t\t[authorities]=\"[p('ROLE_TOKENS_CREAR_EDITAR')]\"\r\n\t\t\t\t\t\t\t\t\t[patCodigo]=\"patCodigo\"\r\n\t\t\t\t\t\t\t\t\t[externalAllowed]=\"false\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\tGuardar\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</form>\r\n\t\t\t</div>\r\n\t\t\t<pli-snapshot-token\r\n\t\t\t\t[promCodigo]=\"promCodigo\"\r\n\t\t\t\t*ngIf=\"showSnapshotForm\"\r\n\t\t\t></pli-snapshot-token>\r\n\t\t</div>\r\n\t</div>\r\n\t<div class=\"row\">\r\n\t\t<div class=\"col-sm-12 col-md-12 col-lg-12\">\r\n\t\t\t<pli-guarantee-token [promCodigo]=\"promCodigo\" *ngIf=\"showGuatanteeForm\">\r\n\t\t\t</pli-guarantee-token>\r\n\t\t</div>\r\n\t</div>\r\n</div>\r\n" }]
629
+ }], ctorParameters: () => [{ type: i1.ToastrService }, { type: i0.ChangeDetectorRef }, { type: i2.CommonService }, { type: i3.PppService }, { type: i4.Router }, { type: i5.BudgetService }, { type: i6.TokenService }, { type: i7.PliCnfSnapshotTokenServices }, { type: i8.ConfigurationDocumentService }, { type: i9.PliCnfEvaluationTaskService }, { type: i10.PliCnfGuaranteeTokenService }, { type: i11.ConfigurationTokenSubjectService }], propDecorators: { promCodigo: [{
630
+ type: Input
631
+ }], showFrm: [{
632
+ type: Input
633
+ }], showFrmMultiple: [{
634
+ type: Input
635
+ }], showStatic: [{
636
+ type: Input
637
+ }], showBudget: [{
638
+ type: Input
639
+ }], showCalculated: [{
640
+ type: Input
641
+ }], showCalculatedForm: [{
642
+ type: Input
643
+ }], showSnapshot: [{
644
+ type: Input
645
+ }], showSnapshotForm: [{
646
+ type: Input
647
+ }], showDocument: [{
648
+ type: Input
649
+ }], showTask: [{
650
+ type: Input
651
+ }], showGuatantee: [{
652
+ type: Input
653
+ }], showDocumentAutoAnalysis: [{
654
+ type: Input
655
+ }], showGuatanteeForm: [{
656
+ type: Input
657
+ }], onStaticToken: [{
658
+ type: Output
659
+ }], showAsTitle: [{
660
+ type: Input
661
+ }], locale: [{
662
+ type: Inject,
663
+ args: [LOCALE_ID]
664
+ }] } });
665
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi10b2tlbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wbGktY29tbW9ucy9zcmMvbGliL2NvbXBvbmVudHMvY29uZmlndXJhdGlvbi10b2tlbi9jb25maWd1cmF0aW9uLXRva2VuLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXBsaS1jb21tb25zL3NyYy9saWIvY29tcG9uZW50cy9jb25maWd1cmF0aW9uLXRva2VuL2NvbmZpZ3VyYXRpb24tdG9rZW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNOLFNBQVMsRUFFVCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFFTixNQUFNLEVBQ04sWUFBWSxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRixPQUFPLEVBQ04sS0FBSyxFQUVMLFVBQVUsRUFDVixnQkFBZ0IsRUFLaEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBTS9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBWTVELE1BQU0sT0FBTywyQkFBNEIsU0FBUSxvQkFBb0I7SUEyRHBFLFlBQ1MsYUFBNEIsRUFDMUIsS0FBd0IsRUFDeEIsYUFBNEIsRUFDOUIsVUFBc0IsRUFDdEIsTUFBYyxFQUNkLGFBQTRCLEVBQzVCLFlBQTBCLEVBQzFCLG9CQUFpRCxFQUNqRCw0QkFBMEQsRUFDMUQsaUJBQThDLEVBQzlDLDJCQUF3RCxFQUN4RCxnQ0FBa0U7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QkFBZixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFFRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFRRSxXQUFXO3NCQUFuQixLQUFLO2dCQW1Cb0IsTUFBTTtzQkFBL0IsTUFBTTt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxpQ25mRXZhbHVhdGlvblRhc2tTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi9zZXJ2aWNlcy9wbGktY25mLWV2YWx1YXRpb24tdGFzay5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuXHRDb21wb25lbnQsXHJcblx0T25Jbml0LFxyXG5cdElucHV0LFxyXG5cdExPQ0FMRV9JRCxcclxuXHRJbmplY3QsXHJcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXHJcblx0T3V0cHV0LFxyXG5cdEV2ZW50RW1pdHRlclxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25MaXN0c0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbW1vbi5saXN0cy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwLCBVbnR5cGVkRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7XHJcblx0VG9rZW4sXHJcblx0UGxpQ25mUHJlc3VwdWVzdG9HbG9iYWwsXHJcblx0VXRpbFN0cmluZyxcclxuXHRFVGlwb1ByZXN1cHVlc3RvLFxyXG5cdFBsaUNuZlNuYXBzaG90VG9rZW4sXHJcblx0Q29uZmlndXJhdGlvbkRvY3VtZW50LFxyXG5cdFBsaUNuZkV2YWx1YXRpb25UYXNrLFxyXG5cdFBsaUNuZkd1YXJhbnRlZVRva2VuXHJcbn0gZnJvbSAnbmctcGxpLXV0aWwnO1xyXG5pbXBvcnQgeyBDdXJyZW5jeVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFBwcFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wcHAuc2VydmljZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEJ1ZGdldFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9idWRnZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRva2VuU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Rva2VuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQbGlDbmZTbmFwc2hvdFRva2VuU2VydmljZXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wbGktY25mLXNuYXBzaG90LXRva2VuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uRG9jdW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29uZmlndXJhdGlvbi1kb2N1bWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGxpQ25mR3VhcmFudGVlVG9rZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGxpLWNuZi1ndWFyYW50ZWUtdG9rZW4uc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25Ub2tlblN1YmplY3RTZXJ2aWNlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLXRva2VuLXN1YmplY3Quc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncGxpLWNvbmZpZ3VyYXRpb24tdG9rZW4nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbmZpZ3VyYXRpb24tdG9rZW4uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY29uZmlndXJhdGlvbi10b2tlbi5jb21wb25lbnQuY3NzJ10sXHJcbiAgICBzdGFuZGFsb25lOiBmYWxzZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvblRva2VuQ29tcG9uZW50IGV4dGVuZHMgQ29tbW9uTGlzdHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cdC8qKiBpdCBjb250YWlucyB0aGUgcHJvbSBjb2RpZ28gKi9cclxuXHRASW5wdXQoKSBwcm9tQ29kaWdvOiBudW1iZXI7XHJcblx0LyoqIEl0IGNvbnRhaW5zIGlmIHZpc2libGUgZnJtIHRva2VucyAqL1xyXG5cdEBJbnB1dCgpIHNob3dGcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHQvKiogSXQgY29udGFpbnMgaWYgdmlzaWJsZSBmcm0gdG9rZW5zICovXHJcblx0QElucHV0KCkgc2hvd0ZybU11bHRpcGxlOiBib29sZWFuID0gZmFsc2U7XHJcblx0LyoqIEl0IGNvbnRhaW5zIGlmIHZpc2libGUgc3RhdGljIHRva2VucyAqL1xyXG5cdEBJbnB1dCgpIHNob3dTdGF0aWM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHQvKiogSXQgY29udGFpbnMgaWYgdmlzaWJsZSBidWRnZXQgdG9rZW5zICovXHJcblx0QElucHV0KCkgc2hvd0J1ZGdldDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKiBJdCBjb250YWlucyBpZiB2aXNpYmxlIGNhbGN1bGF0ZWQgdG9rZW5zICovXHJcblx0QElucHV0KCkgc2hvd0NhbGN1bGF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHQvKiogSXQgY29udGFpbnMgaWYgdmlzaWJsZSBjYWxjdWxhdGVkIGZvcm0gKi9cclxuXHRASW5wdXQoKSBzaG93Q2FsY3VsYXRlZEZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHQvKiogSXQgY29udGFpbnMgaWYgdmlzaWJsZSBjYWxjdWxhdGVkIHRva2VucyAqL1xyXG5cdEBJbnB1dCgpIHNob3dTbmFwc2hvdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKiBJdCBjb250YWlucyBpZiB2aXNpYmxlIGNhbGN1bGF0ZWQgZm9ybSAqL1xyXG5cdEBJbnB1dCgpIHNob3dTbmFwc2hvdEZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHQvKiogSXQgY29udGFpbnMgaWYgdmlzaWJsZSBidWRnZXQgdG9rZW5zICovXHJcblx0QElucHV0KCkgc2hvd0RvY3VtZW50OiBib29sZWFuID0gdHJ1ZTtcclxuXHQvKiogSXQgY29udGFpbnMgaWYgdmlzaWJsZSBidWRnZXQgdG9rZW5zICovXHJcblx0QElucHV0KCkgc2hvd1Rhc2s6IGJvb2xlYW4gPSB0cnVlO1xyXG5cdC8qIEl0IGNvbnRhaW5zIGlmIHZpc2libGUgZ3VhcmFudGVlIHRva2VucyovXHJcblx0QElucHV0KCkgc2hvd0d1YXRhbnRlZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qIEl0IGNvbnRhaW5zIGlmIHZpc2libGUgZ3VhcmFudGVlLWZvcm0gdG9rZW5zKi9cclxuXHRASW5wdXQoKSBzaG93RG9jdW1lbnRBdXRvQW5hbHlzaXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHQvKiBJdCBjb250YWlucyBpZiB2aXNpYmxlIGd1YXJhbnRlZS1mb3JtIHRva2VucyovXHJcblx0QElucHV0KCkgc2hvd0d1YXRhbnRlZUZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHQvKiogSXQgcmV0dXJucyB0aGUgbGlzdCB0b2tlbiAqL1xyXG5cdEBPdXRwdXQoKSBvblN0YXRpY1Rva2VuID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblx0LyoqIGl0IGNvbnRhaW5zIHRoZSBwYXQgY29kaWdvICovXHJcblx0cGF0Q29kaWdvOiBudW1iZXI7XHJcblx0LyoqIGl0IGNvbnRhaW5zIHRoZSBzbmFwU2hvdCB0b2tlbnMgKi9cclxuXHRzbmFwU2hvdFRva2VuczogUGxpQ25mU25hcHNob3RUb2tlbltdO1xyXG5cdC8qSXQgY29udGFpbnMgdGhlIGd1YXJhbnRlZSB0b2tlbiAqL1xyXG5cdGxHdWFyYW50ZWVUb2tlbnM6IFBsaUNuZkd1YXJhbnRlZVRva2VuW10gPSBbXTtcclxuXHJcblx0QElucHV0KCkgc2hvd0FzVGl0bGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqIFZhbGlkYSBzaSBmaW5hbGl6byAgKi9cclxuXHRyZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKiBMaXN0IG9mIHRva2VucyBzdGF0aWMgYW5kIGR5bmFtaWMgZm9ybSAqL1xyXG5cdGxTdGF0aWNUb2tlbjogYW55ID0gW107XHJcblx0LyoqIExpc3Qgb2YgY2FsY3VsYXRlZCB0b2tlbnMgKi9cclxuXHRsQ2FsY3VsYXRlZFRva2VuOiBhbnkgPSBbXTtcclxuXHQvKiogSXQgY29udGFpbnMgdGhlIGZvcm0gZ3JvdXAgb2YgVG9rZW4gKi9cclxuXHRmcm1Ub2tlbjogVW50eXBlZEZvcm1Hcm91cDtcclxuXHRjb250cm9sTmFtZTogVW50eXBlZEZvcm1Db250cm9sO1xyXG5cdGNvbnRyb2xGb3JtdWxhOiBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcblxyXG5cdC8qKiBPYmplY3QgVG9rZW4gbmV3IG9yIHNlbGVjdGVkIHRvIGVkaXQgKi9cclxuXHR0b2tlblNlbGVjdGVkOiBUb2tlbjtcclxuXHQvKiogKi9cclxuXHRjYWxsQnVkZ2V0U2VydmljZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdC8qKiAqL1xyXG5cdHByaXZhdGUgY3VycmVuY3lQaXBlOiBDdXJyZW5jeVBpcGU7XHJcblx0QEluamVjdChMT0NBTEVfSUQpIHB1YmxpYyBsb2NhbGU6IHN0cmluZztcclxuXHRyZWFkeUFjY29yZGVvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSB0b2FzdHJTZXJ2aWNlOiBUb2FzdHJTZXJ2aWNlLFxyXG5cdFx0cHJvdGVjdGVkIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuXHRcdHByb3RlY3RlZCBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcHBTZXJ2aWNlOiBQcHBTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuXHRcdHByaXZhdGUgYnVkZ2V0U2VydmljZTogQnVkZ2V0U2VydmljZSxcclxuXHRcdHByaXZhdGUgdG9rZW5TZXJ2aWNlOiBUb2tlblNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHNuYXBzaG90VG9rZW5TZXJ2aWNlOiBQbGlDbmZTbmFwc2hvdFRva2VuU2VydmljZXMsXHJcblx0XHRwcml2YXRlIGNvbmZpZ3VyYXRpb25Eb2N1bWVudFNlcnZpY2U6IENvbmZpZ3VyYXRpb25Eb2N1bWVudFNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHBsaUNuZlRhc2tTZXJ2aWNlOiBQbGlDbmZFdmFsdWF0aW9uVGFza1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIHBsaUNuZkd1YXJhbnRlZVRva2VuU2VydmljZTogUGxpQ25mR3VhcmFudGVlVG9rZW5TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjb25maWd1cmF0aW9uVG9rZW5TdWJqZWN0U2VydmljZTogQ29uZmlndXJhdGlvblRva2VuU3ViamVjdFNlcnZpY2VcclxuXHQpIHtcclxuXHRcdHN1cGVyKGNvbW1vblNlcnZpY2UsIGNkUmVmKTtcclxuXHRcdHRoaXMuY3VycmVuY3lQaXBlID0gbmV3IEN1cnJlbmN5UGlwZSh0aGlzLmxvY2FsZSk7XHJcblx0fVxyXG5cclxuXHRuZ09uSW5pdCgpIHtcclxuXHRcdHN1cGVyLm5nT25Jbml0KCk7XHJcblx0XHR0aGlzLnJlYWR5ID0gZmFsc2U7XHJcblx0XHR0aGlzLmdldFRva2VuU25hcHNob3QoKTtcclxuXHRcdHRoaXMuZ2V0VG9rZW5HdWFyYW50ZWUoKTtcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5zaG93RnJtIHx8XHJcblx0XHRcdHRoaXMuc2hvd0ZybU11bHRpcGxlIHx8XHJcblx0XHRcdHRoaXMuc2hvd1N0YXRpYyB8fFxyXG5cdFx0XHR0aGlzLnNob3dCdWRnZXQgfHxcclxuXHRcdFx0dGhpcy5zaG93Q2FsY3VsYXRlZFxyXG5cdFx0KVxyXG5cdFx0XHR0aGlzLmluaXRMaXN0VG9rZW5zKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgdGhlIGluZm8gb2YgdG9rZW5zIGZyb20gZHluYW1pYyBmb3JtLCBzdGF0aWMgdG9rZW5zIGFuZCBjYWxjdWxhdGVkLlxyXG5cdCAqL1xyXG5cdGluaXRMaXN0VG9rZW5zKCkge1xyXG5cdFx0aWYgKCF0aGlzLnByb21Db2RpZ28pIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5wYXRDb2RpZ28gPSB0aGlzLnBwcFNlcnZpY2UuZ2V0UGF0Q29kaWdvQnlQcm9tQ29kaWdvKHRoaXMucHJvbUNvZGlnbyk7XHJcblx0XHR0aGlzLmxTdGF0aWNUb2tlbiA9IFtdO1xyXG5cdFx0dGhpcy5sQ2FsY3VsYXRlZFRva2VuID0gW107XHJcblx0XHR0aGlzLmluaXRMaXN0VG9rZW5Gb3JtKCk7XHJcblx0fVxyXG5cclxuXHRpbml0TGlzdFRva2VuRm9ybSgpIHtcclxuXHRcdHRoaXMudG9rZW5TZXJ2aWNlLmdldEZvcm1GaWVsZHNCeVByb21Db2RlV2l0aEVkaXRHcmlkcyh0aGlzLnByb21Db2RpZ28pLnRoZW4oXHJcblx0XHRcdChsU3RhdGljVG9rZW46IGFueVtdKSA9PiB7XHJcblx0XHRcdFx0aWYgKGxTdGF0aWNUb2tlbikge1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgc3RhdGljVG9rZW4gb2YgbFN0YXRpY1Rva2VuKSB7XHJcblx0XHRcdFx0XHRcdHN0YXRpY1Rva2VuLnRva2VuVHlwZSA9IFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9GT1JNO1xyXG5cdFx0XHRcdFx0XHRsZXQgc3RhdGljVG9rZW5WYWx1ZSA9IFtdO1xyXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBmb3JtRmllbGQgb2Ygc3RhdGljVG9rZW4udmFsdWUpIHtcclxuXHRcdFx0XHRcdFx0XHRzdGF0aWNUb2tlblZhbHVlLnB1c2goZm9ybUZpZWxkKTtcclxuXHRcdFx0XHRcdFx0XHQvLyBWYWxpZGF0aW9uIHRvIGFkZCB0aGUgY291bnRyeSB0b2tlbiBQYcOtc1xyXG5cdFx0XHRcdFx0XHRcdC8vXCJodHRwOi8vc2VydmljaW9zbG9jYWxlcy5jb2xmdXR1cm8ub3JnOjMyMTUxL2RhdGEvZ2V0VW5pdmVyc2l0aWVzQnlOYW1lXCJcclxuXHRcdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0XHRmb3JtRmllbGQudHlwZSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybUZpZWxkLnR5cGUgPT09ICdzZWxlY3QnICYmXHJcblx0XHRcdFx0XHRcdFx0XHRmb3JtRmllbGQuZGF0YSAmJlxyXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybUZpZWxkLmRhdGEudXJsICYmXHJcblx0XHRcdFx0XHRcdFx0XHRmb3JtRmllbGQuZGF0YS51cmwuaW5kZXhPZignZ2V0VW5pdmVyc2l0aWVzQnlOYW1lJykgPj0gMFxyXG5cdFx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdFx0c3RhdGljVG9rZW5WYWx1ZS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogJ3NlbGVjdC1hdHRyaWJ1dGUnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRsYWJlbDogJ1Bhw61zJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0a2V5OiBmb3JtRmllbGQua2V5ICsgJ19sZXZlbDEnXHJcblx0XHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0c3RhdGljVG9rZW4udmFsdWUgPSBzdGF0aWNUb2tlblZhbHVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5sU3RhdGljVG9rZW4sIGxTdGF0aWNUb2tlbik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuaW5pdExpc3RUb2tlbkRvY3VtZW50cygpO1xyXG5cdFx0XHRcdC8vdGhpcy5pbml0TGlzdFRva2VuUHJlc3VwdWVzdG8oKTtcclxuXHRcdFx0XHQvLyB0aGlzLmluaXRMaXN0VG9rZW5UYXNrcygpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZygnRXJyb3IgaW5pdExpc3RUb2tlbkZvcm0tZ2V0Rm9ybUZpZWxkc0J5UHJvbUNvZGUnLCBlcnJvcik7XHJcblx0XHRcdFx0dGhpcy50b2FzdHJTZXJ2aWNlLmVycm9yKCdFcnJvciBjb25zdWx0YW5kbyB0b2tlbnMgZGUgZm9ybXVsYXJpbycpO1xyXG5cdFx0XHR9XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0aW5pdExpc3RUb2tlbkRvY3VtZW50cygpIHtcclxuXHRcdHRoaXMuY29uZmlndXJhdGlvbkRvY3VtZW50U2VydmljZS5nZXRMaXN0QnlQcm9tQ29kaWdvKHRoaXMucHJvbUNvZGlnbykuc3Vic2NyaWJlKFxyXG5cdFx0XHQobENvbmZpZ3VyYXRpb25Eb2N1bWVudDogQ29uZmlndXJhdGlvbkRvY3VtZW50W10pID0+IHtcclxuXHRcdFx0XHRpZiAobENvbmZpZ3VyYXRpb25Eb2N1bWVudCkge1xyXG5cdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoXSA9IHtcclxuXHRcdFx0XHRcdFx0dGl0bGU6IHtcclxuXHRcdFx0XHRcdFx0XHRrZXk6IFRva2VuU2VydmljZS5nZXRLZXlEb2N1bWVudCgpLFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfRE9DVU1FTlRPXHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHRva2VuVHlwZTogVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0RPQ1VNRU5UTyxcclxuXHRcdFx0XHRcdFx0dmFsdWU6IFtdXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0bENvbmZpZ3VyYXRpb25Eb2N1bWVudC5mb3JFYWNoKChjRG9jdW1lbnQpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0a2V5OiBjRG9jdW1lbnQuaWQgKyAnX2luZm8nLFxyXG5cdFx0XHRcdFx0XHRcdGxhYmVsOiBjRG9jdW1lbnQubmFtZVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLmluaXRMaXN0RG9jdW1lbnRBbmFseXNpcygpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHQoZXJyb3IpID0+IHRoaXMudG9hc3RyU2VydmljZS5lcnJvcignRXJyb3IgY29uc3VsdGFuZG8gbGEgaW5mb3JtYWNpw7NuIGRlIGRvY3VtZW50b3MnKVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdGluaXRMaXN0RG9jdW1lbnRBbmFseXNpcygpIHtcclxuXHRcdHRoaXMuY29uZmlndXJhdGlvbkRvY3VtZW50U2VydmljZVxyXG5cdFx0XHQuZ2V0QnlQcm9tQ29kaWdvQW5kQXV0b21hdGljVmFsaWRhdGlvbih0aGlzLnByb21Db2RpZ28pXHJcblx0XHRcdC5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdG5leHQ6IChsQ29uZmlndXJhdGlvbkRvY3VtZW50OiBDb25maWd1cmF0aW9uRG9jdW1lbnRbXSkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGxDb25maWd1cmF0aW9uRG9jdW1lbnQpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoXSA9IHtcclxuXHRcdFx0XHRcdFx0XHR0aXRsZToge1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuZ2V0S2V5RG9jdW1lbnRBbmFseXNpcygpLFxyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9ET0NVTUVOVE9fQU5BTElTSVNfQVVUT01BVElDT1xyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0dG9rZW5UeXBlOiBUb2tlblNlcnZpY2UuVE9LRU5fRE9DVU1FTlRPX0FOQUxZU0lTX1RZUEUsXHJcblx0XHRcdFx0XHRcdFx0dmFsdWU6IFtdXHJcblx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdGxDb25maWd1cmF0aW9uRG9jdW1lbnQuZm9yRWFjaCgoY0RvY3VtZW50KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6IGNEb2N1bWVudC5pZCArICdfcGFydGlhbCcsXHJcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogY0RvY3VtZW50Lm5hbWUgKyAnIC0gQW7DoWxpc2lzIHBhcmNpYWwnXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6IGNEb2N1bWVudC5pZCArICdfdG90YWwnLFxyXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGNEb2N1bWVudC5uYW1lICsgJyAtIEFuw6FsaXNpcyB0b3RhbCdcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLmluaXRMaXN0VG9rZW5QcmVzdXB1ZXN0bygpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0ZXJyb3I6IChlcnIpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMudG9hc3RyU2VydmljZS5lcnJvcihcclxuXHRcdFx0XHRcdFx0J0Vycm9yIGNvbnN1bHRhbmRvIGxhIGluZm9ybWFjacOzbiBkZSBhbsOhbGlzaXMgYXV0b23DoXRpY28gZGUgZG9jdW1lbnRvcydcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGluaXRMaXN0VG9rZW5QcmVzdXB1ZXN0bygpIHtcclxuXHRcdHRoaXMuYnVkZ2V0U2VydmljZS5sR2xvYmFsQnVkZ2V0Q2hhbmdlZC5zdWJzY3JpYmUoe1xyXG5cdFx0XHRuZXh0OiAobEdsb2JhbEJ1ZGdldDogUGxpQ25mUHJlc3VwdWVzdG9HbG9iYWxbXSkgPT4ge1xyXG5cdFx0XHRcdGlmICghdGhpcy5jYWxsQnVkZ2V0U2VydmljZSkge1xyXG5cdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0aGlzLmNhbGxCdWRnZXRTZXJ2aWNlID0gZmFsc2U7XHJcblx0XHRcdFx0aWYgKGxHbG9iYWxCdWRnZXQpIHtcclxuXHRcdFx0XHRcdGxldCBidWRnZXRUeXBlOiBQbGlDbmZQcmVzdXB1ZXN0b0dsb2JhbFtdID0gW107XHJcblx0XHRcdFx0XHRmb3IgKGxldCBnbG9iYWxCdWRnZXQgb2YgbEdsb2JhbEJ1ZGdldCkge1xyXG5cdFx0XHRcdFx0XHRpZiAoXHJcblx0XHRcdFx0XHRcdFx0Z2xvYmFsQnVkZ2V0LnBsaVRpcG9QcmVzdXB1ZXN0by50cHJlc0NvZGlnbyA9PT0gRVRpcG9QcmVzdXB1ZXN0by5QUklNQVJZXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdGJ1ZGdldFR5cGUucHVzaChnbG9iYWxCdWRnZXQpO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRcdFx0XHRcdGdsb2JhbEJ1ZGdldC5wbGlUaXBvUHJlc3VwdWVzdG8udHByZXNDb2RpZ28gPT09XHJcblx0XHRcdFx0XHRcdFx0RVRpcG9QcmVzdXB1ZXN0by5TRUNPTkRBUllcclxuXHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0YnVkZ2V0VHlwZS5wdXNoKGdsb2JhbEJ1ZGdldCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmIChidWRnZXRUeXBlICYmIE9iamVjdC5rZXlzKGJ1ZGdldFR5cGUpLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoXSA9IHtcclxuXHRcdFx0XHRcdFx0XHR0aXRsZToge1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuZ2V0S2V5QnVkZ2V0KCksXHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0JVREdFVFxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0dG9rZW5UeXBlOiBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfQlVER0VULFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBbXVxyXG5cdFx0XHRcdFx0XHR9O1xyXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBidWRnZXQgb2YgYnVkZ2V0VHlwZSkge1xyXG5cdFx0XHRcdFx0XHRcdGNvbnN0IHRwcmVzQ29kaWdvID0gYnVkZ2V0LnBsaVRpcG9QcmVzdXB1ZXN0by50cHJlc0NvZGlnbztcclxuXHRcdFx0XHRcdFx0XHQvLyBBZGQgZGF0ZSBvZiBmaW5hbmNpbmdcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmxTdGF0aWNUb2tlblt0aGlzLmxTdGF0aWNUb2tlbi5sZW5ndGggLSAxXS52YWx1ZS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTpcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHByZXNDb2RpZ28gK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQnXycgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfRkVDSEFfRklOQU5DSU5HX1NUQVJULFxyXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGJ1ZGdldC5jcHJlTm9tYnJlICsgJyBmZWNoYSBpbmljaW8gZmluYW5jaWFjacOzbidcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmxTdGF0aWNUb2tlblt0aGlzLmxTdGF0aWNUb2tlbi5sZW5ndGggLSAxXS52YWx1ZS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTpcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHByZXNDb2RpZ28gK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQnXycgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfRkVDSEFfRklOQU5DSU5HX0VORCxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiBidWRnZXQuY3ByZU5vbWJyZSArICcgZmVjaGEgZmluIGZpbmFuY2lhY2nDs24nXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gQWRkIHRoZSB0b3RhbCBhbW91bnRcclxuXHRcdFx0XHRcdFx0XHQvLyB0aGlzLmxTdGF0aWNUb2tlblt0aGlzLmxTdGF0aWNUb2tlbi5sZW5ndGggLSAxXS52YWx1ZS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHQvLyBcdGtleTpcclxuXHRcdFx0XHRcdFx0XHQvLyBcdFx0dHByZXNDb2RpZ28gKyAnXycgKyBUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfVE9UQUxfQU1PVU5ULFxyXG5cdFx0XHRcdFx0XHRcdC8vIFx0bGFiZWw6IGJ1ZGdldC5jcHJlTm9tYnJlICsgJyB0b3RhbCdcclxuXHRcdFx0XHRcdFx0XHQvLyB9KTtcclxuXHRcdFx0XHRcdFx0XHQvLyBBZGQgdGhlIENvbnZvY2F0b3JpYSBwcm9jZXNzIHRvdGFsIGFtb3VudFxyXG5cdFx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0cHJlc0NvZGlnbyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdfJyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9BUFBMSUNBVElPTl9QUk9DRVNTX1RPVEFMX0FNT1VOVCxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiAnQ29udm9jYXRvcmlhLSAnICsgYnVkZ2V0LmNwcmVOb21icmUgKyAnIHRvdGFsJ1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdC8vIEFkZCB0aGUgQ29udm9jYXRvcmlhIHByb2Nlc3Mgb3duIGZvdW5kc1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0cHJlc0NvZGlnbyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdfJyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9BUFBMSUNBVElPTl9QUk9DRVNTX1RPVEFMX09XTl9GT1VORFMsXHJcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDogJ0NvbnZvY2F0b3JpYS0gJyArIGJ1ZGdldC5jcHJlTm9tYnJlICsgJyBmb25kb3MgcHJvcGlvcydcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHQvLyBBZGQgdGhlIENvbnZvY2F0b3JpYSBwcm9jZXNzIGZpbmFuY2luZ1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0cHJlc0NvZGlnbyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdfJyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9BUFBMSUNBVElPTl9QUk9DRVNTX1RPVEFMX0ZJTkFOQ0lORyxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiAnQ29udm9jYXRvcmlhLSAnICsgYnVkZ2V0LmNwcmVOb21icmUgKyAnIGZpbmFuY2lhY2nDs24nXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0Ly8gQWRkIHRoZSBDb252b2NhdG9yaWEgcHJvY2VzcyB0b3RhbCBhbW91bnRcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmxTdGF0aWNUb2tlblt0aGlzLmxTdGF0aWNUb2tlbi5sZW5ndGggLSAxXS52YWx1ZS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTpcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHByZXNDb2RpZ28gK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQnXycgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfTEVHQUxJWkFUSU9OX1BST0NFU1NfVE9UQUxfQU1PVU5ULFxyXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6ICdMZWdhbGl6YWNpw7NuLSAnICsgYnVkZ2V0LmNwcmVOb21icmUgKyAnIHRvdGFsJ1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdC8vIEFkZCB0aGUgQ29udm9jYXRvcmlhIHByb2Nlc3Mgb3duIGZvdW5kc1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aCAtIDFdLnZhbHVlLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdFx0a2V5OlxyXG5cdFx0XHRcdFx0XHRcdFx0XHR0cHJlc0NvZGlnbyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdfJyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9MRUdBTElaQVRJT05fUFJPQ0VTU19UT1RBTF9PV05fRk9VTkRTLFxyXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6ICdMZWdhbGl6YWNpw7NuLSAnICsgYnVkZ2V0LmNwcmVOb21icmUgKyAnIGZvbmRvcyBwcm9waW9zJ1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdC8vIEFkZCB0aGUgQ29udm9jYXRvcmlhIHByb2Nlc3MgZmluYW5jaW5nXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRwcmVzQ29kaWdvICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0J18nICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0VG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX0xFR0FMSVpBVElPTl9QUk9DRVNTX1RPVEFMX0ZJTkFOQ0lORyxcclxuXHRcdFx0XHRcdFx0XHRcdGxhYmVsOiAnTGVnYWxpemFjacOzbi0gJyArIGJ1ZGdldC5jcHJlTm9tYnJlICsgJyBmaW5hbmNpYWNpw7NuJ1xyXG5cdFx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHRcdC8vIEFkZCB0aGUgQ29udm9jYXRvcmlhIHByb2Nlc3MgZmluYW5jaW5nXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRwcmVzQ29kaWdvICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0J18nICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0VG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX0lOU1VSQU5DRV9BTU9VTlQsXHJcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDpcclxuXHRcdFx0XHRcdFx0XHRcdFx0J0xlZ2FsaXphY2nDs24tICcgKyBidWRnZXQuY3ByZU5vbWJyZSArICcgZmluYW5jaWFjacOzbiArIHNlZ3VybydcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHQvLyBKTVAgLSBNYW50aXMgNjY3NCAtIGFkZCB0b2tlbiBsZWdhbGl6YXRpb24gb3IgYXBwbGljYXRpb24gdG90YWwgZmluYW5jaW5nXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRwcmVzQ29kaWdvICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0J18nICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0VG9rZW5TZXJ2aWNlLkxFR0FMSVpBVElPTl9PUl9BUFBMSUNBVElPTl9UT1RBTF9GSU5BTkNJTkcsXHJcblx0XHRcdFx0XHRcdFx0XHRsYWJlbDpcclxuXHRcdFx0XHRcdFx0XHRcdFx0J0ZpbmFuY2lhY2nDs24gLSAnICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0YnVkZ2V0LmNwcmVOb21icmUgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHQnIGxlZ2FsaXphY2nDs24gKCsgc2VndXJvKSBvIENvbnZvY2F0b3JpYSAnXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRwcmVzQ29kaWdvICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0J18nICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0VG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX1JFU1VNRV9DQVRFR09SWV9ZRUFSLFxyXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGJ1ZGdldC5jcHJlTm9tYnJlICsgJyByZXN1bWVuIHJ1YnJvIHkgYcOxbydcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmxTdGF0aWNUb2tlblt0aGlzLmxTdGF0aWNUb2tlbi5sZW5ndGggLSAxXS52YWx1ZS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRcdGtleTpcclxuXHRcdFx0XHRcdFx0XHRcdFx0dHByZXNDb2RpZ28gKyAnXycgKyBUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19EVVJBVElPTl9TVFVESUVTLFxyXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGJ1ZGdldC5jcHJlTm9tYnJlICsgJyBkdXJhY2nDs24gZGUgZXN0dWRpb3MgZW4gbWVzZXMnXHJcblx0XHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW5bdGhpcy5sU3RhdGljVG9rZW4ubGVuZ3RoIC0gMV0udmFsdWUucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0XHRrZXk6XHJcblx0XHRcdFx0XHRcdFx0XHRcdHRwcmVzQ29kaWdvICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0J18nICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0VG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfRklOQU5DSU5HX0RVUkFUSU9OLFxyXG5cdFx0XHRcdFx0XHRcdFx0bGFiZWw6IGJ1ZGdldC5jcHJlTm9tYnJlICsgJyBkdXJhY2nDs24gZGUgZmluYW5jaWFjacOzbiBlbiBtZXNlcydcclxuXHRcdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dGhpcy5pbml0TGlzdFRva2VuVGFza3MoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0sXHJcblx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRjb25zb2xlLmVycm9yKCdFUlJPUiBkZWwgc2VydmljaW86ICcsIGVycm9yKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmJ1ZGdldFNlcnZpY2UuZ2V0TGlzdFByZXN1cHVlc3RvR2xvYmFsKHRoaXMucHJvbUNvZGlnbyk7XHJcblx0XHR0aGlzLmNhbGxCdWRnZXRTZXJ2aWNlID0gdHJ1ZTtcclxuXHR9XHJcblxyXG5cdGluaXRMaXN0VG9rZW5UYXNrcygpIHtcclxuXHRcdHRoaXMucGxpQ25mVGFza1NlcnZpY2VcclxuXHRcdFx0LmdldEJ5UHJvbUNvZGlnbyh0aGlzLnByb21Db2RpZ28pXHJcblx0XHRcdC5zdWJzY3JpYmUoKGxpc3RUYXNrOiBQbGlDbmZFdmFsdWF0aW9uVGFza1tdKSA9PiB7XHJcblx0XHRcdFx0aWYgKGxpc3RUYXNrKSB7XHJcblx0XHRcdFx0XHRsZXQgdG9rZW5UYXNrQXJyID0gW107XHJcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGxpc3RUYXNrLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdHRva2VuVGFza0Fyci5wdXNoKGxpc3RUYXNrW2ldKTtcclxuXHRcdFx0XHRcdFx0dG9rZW5UYXNrQXJyW2ldWydmb3JtdWxhVG9rZW4nXSA9XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5jYW1lbGl6ZSh0aGlzLmVsaW1pbmFyRGlhY3JpdGljb3MobGlzdFRhc2tbaV0ubmFtZSkpICtcclxuXHRcdFx0XHRcdFx0XHQnXycgK1xyXG5cdFx0XHRcdFx0XHRcdGxpc3RUYXNrW2ldLmlkO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHRoaXMubFN0YXRpY1Rva2VuW3RoaXMubFN0YXRpY1Rva2VuLmxlbmd0aF0gPSB7XHJcblx0XHRcdFx0XHRcdHRpdGxlOiB7XHJcblx0XHRcdFx0XHRcdFx0a2V5OiBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfVEFTS0wsXHJcblx0XHRcdFx0XHRcdFx0dmFsdWU6IFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9UQVNLXHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHRva2VuVHlwZTogVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX1RBU0ssXHJcblx0XHRcdFx0XHRcdHZhbHVlOiBbXVxyXG5cdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdHRva2VuVGFza0Fyci5mb3JFYWNoKChjVGFzaykgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxTdGF0aWNUb2tlblt0aGlzLmxTdGF0aWNUb2tlbi5sZW5ndGggLSAxXS52YWx1ZS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRrZXk6IGNUYXNrLmZvcm11bGFUb2tlbixcclxuXHRcdFx0XHRcdFx0XHRsYWJlbDogY1Rhc2submFtZVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0dGhpcy5hZGp1c3RTdGF0aWNUb2tlbnNJbmZvKCk7XHJcblx0XHRcdFx0XHR0aGlzLmdldFRva2VuQ2FsY3VsYXRlZCgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cclxuXHRhZGp1c3RTdGF0aWNUb2tlbnNJbmZvKCkge1xyXG5cdFx0Ly8gQWRkIHRoZSBzdGF0aWMgdG9rZW5zXHJcblx0XHR0aGlzLmxTdGF0aWNUb2tlblt0aGlzLmxTdGF0aWNUb2tlbi5sZW5ndGhdID0ge1xyXG5cdFx0XHR0aXRsZToge1xyXG5cdFx0XHRcdGtleTogVG9rZW5TZXJ2aWNlLmdldEtleVN0YXRpYygpLFxyXG5cdFx0XHRcdHZhbHVlOiBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfU1RBVElDXHJcblx0XHRcdH0sXHJcblx0XHRcdHRva2VuVHlwZTogVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX1NUQVRJQyxcclxuXHRcdFx0dmFsdWU6IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TXHJcblx0XHR9O1xyXG5cdFx0dGhpcy5yZWFkeUFjY29yZGVvbiA9IHRydWU7XHJcblx0XHRsZXQgY29sTWF4ID0gNDtcclxuXHRcdC8vT3JnYW5pemUgZGVwZW5kcyBvZiB0aGUgcGFuZWxzXHJcblx0XHRmb3IgKGxldCBncm91cFRva2VuIG9mIHRoaXMubFN0YXRpY1Rva2VuKSB7XHJcblx0XHRcdGxldCBwYW5lbDogYW55ID0gW107XHJcblx0XHRcdGlmIChncm91cFRva2VuLnRva2VuVHlwZSA9PSBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfRk9STSkge1xyXG5cdFx0XHRcdGxldCBwYW5lbE5hbWU6IHN0cmluZyA9IG51bGw7XHJcblx0XHRcdFx0bGV0IGxhc3RQYW5lbE5hbWU6IHN0cmluZyA9IG51bGw7XHJcblx0XHRcdFx0Zm9yIChsZXQgc3RhdGljVG9rZW4gb2YgZ3JvdXBUb2tlbi52YWx1ZSkge1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHQhdGhpcy5zaG93RnJtTXVsdGlwbGUgJiZcclxuXHRcdFx0XHRcdFx0c3RhdGljVG9rZW4uZWRpdGdyaWQgJiZcclxuXHRcdFx0XHRcdFx0c3RhdGljVG9rZW4uZWRpdGdyaWQgPT09IHRydWVcclxuXHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmIChzdGF0aWNUb2tlbi5wYW5lbE5hbWUpIHtcclxuXHRcdFx0XHRcdFx0cGFuZWxOYW1lID0gc3RhdGljVG9rZW4ucGFuZWxOYW1lO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKHBhbmVsTmFtZSAhPT0gbnVsbCAmJiBwYW5lbE5hbWUgIT0gbGFzdFBhbmVsTmFtZSkge1xyXG5cdFx0XHRcdFx0XHRwYW5lbC5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHR0aXRsZToge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWU6IHBhbmVsTmFtZVxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0dmFsdWU6IFtdXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fSBlbHNlIGlmIChwYW5lbE5hbWUgPT09IG51bGwgJiYgcGFuZWwubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdFx0XHRcdHBhbmVsLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogZ3JvdXBUb2tlbi50aXRsZS52YWx1ZVxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0dmFsdWU6IFtdXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0cGFuZWxbcGFuZWwubGVuZ3RoIC0gMV0udmFsdWUucHVzaChzdGF0aWNUb2tlbik7XHJcblx0XHRcdFx0XHRsYXN0UGFuZWxOYW1lID0gcGFuZWxOYW1lO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRwYW5lbC5wdXNoKHtcclxuXHRcdFx0XHRcdHRpdGxlOiB7XHJcblx0XHRcdFx0XHRcdHZhbHVlOiBncm91cFRva2VuLnRpdGxlLnZhbHVlXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0dmFsdWU6IFtdXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0Zm9yIChsZXQgc3RhdGljVG9rZW4gb2YgZ3JvdXBUb2tlbi52YWx1ZSkge1xyXG5cdFx0XHRcdFx0cGFuZWxbcGFuZWwubGVuZ3RoIC0gMV0udmFsdWUucHVzaChzdGF0aWNUb2tlbik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGdyb3VwVG9rZW4udmFsdWUgPSBwYW5lbDtcclxuXHRcdH1cclxuXHRcdGZvciAobGV0IHBhbmVsIG9mIHRoaXMubFN0YXRpY1Rva2VuKSB7XHJcblx0XHRcdGZvciAobGV0IGdyb3VwVG9rZW4gb2YgcGFuZWwudmFsdWUpIHtcclxuXHRcdFx0XHRsZXQgaUNvbCA9IDA7XHJcblx0XHRcdFx0bGV0IGlSb3cgPSAwO1xyXG5cdFx0XHRcdGxldCBsU3RhdGljVG9rZW5UbXAgPSBbXTtcclxuXHRcdFx0XHRsU3RhdGljVG9rZW5UbXBbaVJvd10gPSBbXTtcclxuXHRcdFx0XHRmb3IgKGxldCBzdGF0aWNUb2tlbiBvZiBncm91cFRva2VuLnZhbHVlKSB7XHJcblx0XHRcdFx0XHRpZiAoc3RhdGljVG9rZW4udHlwZSAmJiBzdGF0aWNUb2tlbi50eXBlID09PSAnYnV0dG9uJykge1xyXG5cdFx0XHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICghbFN0YXRpY1Rva2VuVG1wW2lSb3ddKSB7XHJcblx0XHRcdFx0XHRcdGxTdGF0aWNUb2tlblRtcFtpUm93XSA9IFtdO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKHBhbmVsLnRva2VuVHlwZSA9PT0gVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX1RBU0spIHtcclxuXHRcdFx0XHRcdFx0bFN0YXRpY1Rva2VuVG1wW2lSb3ddLnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdGtleTogJyR7JyArIHBhbmVsLnRpdGxlLmtleSArICdfJyArIHN0YXRpY1Rva2VuLmtleSArICd9JyxcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogc3RhdGljVG9rZW4ubGFiZWwsXHJcblx0XHRcdFx0XHRcdFx0b2JqZWN0OiBzdGF0aWNUb2tlblxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGxTdGF0aWNUb2tlblRtcFtpUm93XS5wdXNoKHtcclxuXHRcdFx0XHRcdFx0XHRrZXk6ICckeycgKyBwYW5lbC50aXRsZS5rZXkgKyAnXycgKyBzdGF0aWNUb2tlbi5rZXkgKyAnfScsXHJcblx0XHRcdFx0XHRcdFx0dmFsdWU6IHN0YXRpY1Rva2VuLmxhYmVsLFxyXG5cdFx0XHRcdFx0XHRcdG9iamVjdDogc3RhdGljVG9rZW5cclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0aUNvbCsrO1xyXG5cdFx0XHRcdFx0aWYgKGlDb2wgPT0gY29sTWF4KSB7XHJcblx0XHRcdFx0XHRcdGlSb3crKztcclxuXHRcdFx0XHRcdFx0aUNvbCA9IDA7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChpQ29sID4gMCkge1xyXG5cdFx0XHRcdFx0Zm9yIChsZXQgaSA9IGlDb2w7IGkgPCBjb2xNYXg7IGkrKykge1xyXG5cdFx0XHRcdFx0XHRsU3RhdGljVG9rZW5UbXBbaVJvd10ucHVzaCh7XHJcblx0XHRcdFx0XHRcdFx0a2V5OiBudWxsLFxyXG5cdFx0XHRcdFx0XHRcdHZhbHVlOiBudWxsXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRncm91cFRva2VuLnZhbHVlID0gbFN0YXRpY1Rva2VuVG1wO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHR0aGlzLm9uU3RhdGljVG9rZW4uZW1pdCh0aGlzLmxTdGF0aWNUb2tlbik7XHJcblx0XHR0aGlzLmNvbmZpZ3VyYXRpb25Ub2tlblN1YmplY3RTZXJ2aWNlLnNldFN1YmplY3RDb25maWd1cmF0aW9uVG9rZW5zKHRoaXMubFN0YXRpY1Rva2VuKTtcclxuXHR9XHJcblxyXG5cdGdldFRva2VuQ2FsY3VsYXRlZCgpIHtcclxuXHRcdHRoaXMudG9rZW5TZXJ2aWNlLmdldExpc3RCeVByb21Db2RpZ28odGhpcy5wcm9tQ29kaWdvKS5zdWJzY3JpYmUoXHJcblx0XHRcdChsVG9rZW46IFRva2VuW10pID0+IHtcclxuXHRcdFx0XHR0aGlzLmxDYWxjdWxhdGVkVG9rZW4gPSBsVG9rZW47XHJcblx0XHRcdFx0dGhpcy5yZWFkeSA9IHRydWU7XHJcblx0XHRcdH0sXHJcblx0XHRcdChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCdFcnJvciBnZXRUb2tlbkNhbGN1bGF0ZWQgLWdldExpc3RCeVByb21Db2RpZ28nLCBlcnJvcik7XHJcblx0XHRcdFx0dGhpcy50b2FzdHJTZXJ2aWNlLmVycm9yKCdFcnJvciBlbCBmb3JtdWxhcmlvJyk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXRUb2tlblNuYXBzaG90KCkge1xyXG5cdFx0aWYgKHRoaXMuc2hvd1NuYXBzaG90KSB7XHJcblx0XHRcdHRoaXMuc25hcHNob3RUb2tlblNlcnZpY2UuZ2V0QWxsQnlQcm9tQ29kZSh0aGlzLnByb21Db2RpZ28pLnN1YnNjcmliZSgodG9rZW5zKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5zbmFwU2hvdFRva2VucyA9IHRva2VucztcclxuXHRcdFx0XHR0aGlzLnJlYWR5ID0gdHJ1ZTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRnZXRUb2tlbkd1YXJhbnRlZSgpIHtcclxuXHRcdGlmICh0aGlzLnNob3dHdWF0YW50ZWUpIHtcclxuXHRcdFx0dGhpcy5wbGlDbmZHdWFyYW50ZWVUb2tlblNlcnZpY2UuZ2V0QWxsQnlQcm9tQ29kaWdvKHRoaXMucHJvbUNvZGlnbykuc3Vic2NyaWJlKHtcclxuXHRcdFx0XHRuZXh0OiAocmVzdWx0OiBQbGlDbmZHdWFyYW50ZWVUb2tlbltdKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmxHdWFyYW50ZWVUb2tlbnMgPSByZXN1bHQ7XHJcblx0XHRcdFx0XHR0aGlzLnJlYWR5ID0gdHJ1ZTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMudG9hc3RyU2VydmljZS5lcnJvcignRXJyb3IgYWwgb2J0ZW5lciBsb3MgdG9rZW4gZGUgZ2FyYW50aWFzJywgJ0Vycm9yJyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGVsaW1pbmFyRGlhY3JpdGljb3ModGV4dG8pIHtcclxuXHRcdHJldHVybiB0ZXh0by5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuXHR9XHJcblxyXG5cdGNhbWVsaXplKHN0cikge1xyXG5cdFx0cmV0dXJuIHN0clxyXG5cdFx0XHQudHJpbSgpXHJcblx0XHRcdC5zcGxpdCgvXFxzKy8pXHJcblx0XHRcdC5tYXAoKGEpID0+IGEudHJpbSgpKVxyXG5cdFx0XHQuZmlsdGVyKChhKSA9PiBhLmxlbmd0aCA+IDApXHJcblx0XHRcdC5tYXAoKGEpID0+IGFbMF0udG9VcHBlckNhc2UoKSArIGEuc3Vic3RyaW5nKDEpKVxyXG5cdFx0XHQuam9pbignJyk7XHJcblx0fVxyXG5cclxuXHQvKiogSXQgZGVsZXRlcyBhIHNwb25zb3IgKi9cclxuXHRkZWxldGUodG9rZW46IFRva2VuKSB7XHJcblx0XHRpZiAoY29uZmlybSgnwr9Fc3TDoSBzZWd1cm8gcXVlIGRlc2VhIGVsaW1pbmFyIGVsIHRva2VuICcgKyB0b2tlbi5uYW1lICsgJz8nKSkge1xyXG5cdFx0XHR0aGlzLnRva2VuU2VydmljZS5kZWxldGUodG9rZW4uaWQpLnN1YnNjcmliZShcclxuXHRcdFx0XHQocmVzdWx0KSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnRvYXN0clNlcnZpY2Uuc3VjY2VzcygnRWwgdG9rZW4gZnXDqSBlbGltaW5hZGEgZXhpdG9zYW1lbnRlJyk7XHJcblx0XHRcdFx0XHR0aGlzLmdldFRva2VuQ2FsY3VsYXRlZCgpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0KGVycm9yKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnRvYXN0clNlcnZpY2UuZXJyb3IoJ0Vycm9yIGFsIGludGVudGFyIGVsaW1pbmFyIGVsIHRva2VuJyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqIFRldCB0aGUgbGFiZWwgdG8gY2FsY3VsYXRlZCB0b2tlbnMgKi9cclxuXHRsYWJlbENhbGN1bGF0ZWQodG9rZW46IFRva2VuKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiAnJHsnICsgVG9rZW5TZXJ2aWNlLmdldEtleUNhbGN1bGF0ZWQodG9rZW4pICsgJ30nO1xyXG5cdH1cclxuXHJcblx0LyoqIFRldCB0aGUgbGFiZWwgdG8gY2FsY3VsYXRlZCB0b2tlbnMgKi9cclxuXHRsYWJlbFNuYXBzaG90KHRva2VuOiBQbGlDbmZTbmFwc2hvdFRva2VuKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiAnJHsnICsgVG9rZW5TZXJ2aWNlLmdldEtleVNuYXBzaG90KHRva2VuKSArICd9JztcclxuXHR9XHJcblxyXG5cdC8qIFRoZSBsYWJlbCB0byBndWFyYW50ZWUgdG9rZW5zICovXHJcblx0bGFiZWxHdWFyYW50ZWUodG9rZW46IFBsaUNuZkd1YXJhbnRlZVRva2VuKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiAnJHsnICsgVG9rZW5TZXJ2aWNlLmdldEtleUd1YXJhbnRlZSh0b2tlbikgKyAnfSc7XHJcblx0fVxyXG5cclxuXHRpbml0Rm9ybSh0b2tlblNlbGVjdGVkOiBUb2tlbikge1xyXG5cdFx0dGhpcy50b2tlblNlbGVjdGVkID1cclxuXHRcdFx0dG9rZW5TZWxlY3RlZCA9PSBudWxsXHJcblx0XHRcdFx0PyBuZXcgVG9rZW4oKVxyXG5cdFx0XHRcdDogT2JqZWN0LmFzc2lnbihuZXcgVG9rZW4oKSwgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0b2tlblNlbGVjdGVkKSkpO1xyXG5cdFx0aWYgKCF0aGlzLnRva2VuU2VsZWN0ZWQucHJvbUNvZGlnbykge1xyXG5cdFx0XHR0aGlzLnRva2VuU2VsZWN0ZWQucHJvbUNvZGlnbyA9IHRoaXMucHJvbUNvZGlnbztcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmNvbnRyb2xOYW1lID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCh0aGlzLnRva2VuU2VsZWN0ZWQubmFtZSwgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcblx0XHR0aGlzLmNvbnRyb2xGb3JtdWxhID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbChcclxuXHRcdFx0dGhpcy50b2tlblNlbGVjdGVkLmZvcm11bGEsXHJcblx0XHRcdFZhbGlkYXRvcnMucmVxdWlyZWRcclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy5mcm1Ub2tlbiA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHtcclxuXHRcdFx0Y29udHJvbE5hbWU6IHRoaXMuY29udHJvbE5hbWUsXHJcblx0XHRcdGNvbnRyb2xGb3JtdWxhOiB0aGlzLmNvbnRyb2xGb3JtdWxhXHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHJlc29sdmVLZXlDYWxjdWxhdGVkVG9rZW4oKSB7XHJcblx0XHRyZXR1cm4gVXRpbFN0cmluZy5yZXBsYWNlQWNjZW50U3BhY2VzT3RoZXJzKHRoaXMudG9rZW5TZWxlY3RlZC5uYW1lKTtcclxuXHR9XHJcblxyXG5cdHNhdmUoKSB7XHJcblx0XHRpZiAodGhpcy5pc0Zvcm1WYWxpZCh0aGlzLmZybVRva2VuKSkge1xyXG5cdFx0XHQvLyBWYWxpZGF0ZSBpZiB0aGUgbmFtZSBpcyB1bmlxdWVcclxuXHRcdFx0aWYgKHRoaXMubENhbGN1bGF0ZWRUb2tlbiAmJiB0aGlzLmxDYWxjdWxhdGVkVG9rZW4ubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdGZvciAobGV0IGNhbFRva2VuIG9mIHRoaXMubENhbGN1bGF0ZWRUb2tlbikge1xyXG5cdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRVdGlsU3RyaW5nLnJlcGxhY2VBY2NlbnRTcGFjZXNPdGhlcnMoY2FsVG9rZW4ubmFtZSkgPT09XHJcblx0XHRcdFx0XHRcdFx0VXRpbFN0cmluZy5yZXBsYWNlQWNjZW50U3BhY2VzT3RoZXJzKHRoaXMudG9rZW5TZWxlY3RlZC5uYW1lKSAmJlxyXG5cdFx0XHRcdFx0XHQoIXRoaXMudG9rZW5TZWxlY3RlZC5pZCB8fCB0aGlzLnRva2VuU2VsZWN0ZWQuaWQgIT09IGNhbFRva2VuLmlkKVxyXG5cdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdHRoaXMudG9hc3RyU2VydmljZS53YXJuaW5nKFxyXG5cdFx0XHRcdFx0XHRcdCdFbCB0b2tlbiAnICsgY2FsVG9rZW4ubmFtZSArICcgdGllbmUgbGEgbWlzbWEgbGxhdmUnLFxyXG5cdFx0XHRcdFx0XHRcdCdBbGVydGEhJ1xyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGxldCBldmFsRm9ybXVsYTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGV2YWxGb3JtdWxhID0gdGhpcy50b2tlblNlcnZpY2UudmFsaWRhdGVGb3JtdWxhKFxyXG5cdFx0XHRcdFx0dGhpcy5sU3RhdGljVG9rZW4sXHJcblx0XHRcdFx0XHR0aGlzLnRva2VuU2VsZWN0ZWQubmFtZSxcclxuXHRcdFx0XHRcdHRoaXMudG9rZW5TZWxlY3RlZC5mb3JtdWxhXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yLmVycm9yKTtcclxuXHRcdFx0XHR0aGlzLnRvYXN0clNlcnZpY2UuZXJyb3IoZXJyb3IubWVzc2FnZSwgZXJyb3IudGl0bGUpO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIWV2YWxGb3JtdWxhKSB7XHJcblx0XHRcdFx0dGhpcy50b2FzdHJTZXJ2aWNlLmVycm9yKCdObyBzZSBsb2dybyBldmFsdWFyIGxhIGZvcm11bGFyJywgJ0Vycm9yIScpO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHQvLyBTYXZlIHRoZSB0b2tlblNlbGVjdGVkXHJcblx0XHRcdHRoaXMudG9rZW5TZXJ2aWNlLnNhdmUodGhpcy50b2tlblNlbGVjdGVkKS5zdWJzY3JpYmUoXHJcblx0XHRcdFx0KHRva2VuU2F2ZTogYW55KSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnRvYXN0clNlcnZpY2Uuc3VjY2VzcygnU2UgaGEgZ3VhcmRhZG8gZXhpdG9zYW1lbnRlICcsICdHdWFyZGFkbyBleGl0b3NvIScpO1xyXG5cdFx0XHRcdFx0dGhpcy50b2tlblNlbGVjdGVkID0gbnVsbDtcclxuXHRcdFx0XHRcdHRoaXMuZ2V0VG9rZW5DYWxjdWxhdGVkKCk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG5cdFx0XHRcdFx0dGhpcy50b2FzdHJTZXJ2aWNlLmVycm9yKCdFcnJvciBhbCBpbnRlbnRhciBndWFyZGFyIGVsIHRva2VuJywgJ0Vycm9yIScpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGNhbmNlbCgpIHtcclxuXHRcdHRoaXMudG9rZW5TZWxlY3RlZCA9IG51bGw7XHJcblx0fVxyXG5cclxuXHQvKiogSXQgdmFsaWRhdGVzIGlmIHR5cGUgaXMgZnJtICovXHJcblx0aXNHcm91cEZybSh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0eXBlID09PSBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfRk9STTtcclxuXHR9XHJcblxyXG5cdC8qKiBJdCB2YWxpZGF0ZXMgaWYgdHlwZSBpcyBzdGF0aWMgKi9cclxuXHRpc0dyb3VwU3RhdGljKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHR5cGUgPT09IFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9TVEFUSUM7XHJcblx0fVxyXG5cclxuXHQvKiogSXQgdmFsaWRhdGVzIGlmIHR5cGUgaXMgYnVkZ2V0ICovXHJcblx0aXNHcm91cEJ1ZGdldCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0eXBlID09PSBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfQlVER0VUO1xyXG5cdH1cclxuXHJcblx0LyoqIEl0IHZhbGlkYXRlcyBpZiB0eXBlIGlzIGRvY3VtZW50ICovXHJcblx0aXNHcm91cERvY3VtZW50KHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHR5cGUgPT09IFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9ET0NVTUVOVE87XHJcblx0fVxyXG5cclxuXHRpc0dyb3VwRG9jdW1lbnRBbmFseXNpcyh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0eXBlID09PSBUb2tlblNlcnZpY2UuVE9LRU5fRE9DVU1FTlRPX0FOQUxZU0lTX1RZUEU7XHJcblx0fVxyXG5cclxuXHQvKiogSXQgdmFsaWRhdGVzIGlmIHR5cGUgaXMgdGFzayAqL1xyXG5cdGlzR3JvdXBUYXNrKHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHR5cGUgPT09IFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9UQVNLO1xyXG5cdH1cclxuXHJcblx0LyoqIEl0IHZhbGlkYXRlcyB2aXNpYmlsaXR5IHRvIGFsbCB0b2tlbnMgbWl4ZWQgKi9cclxuXHR2YWxpZGF0ZVZpc2liaWxpdHkodHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHQodGhpcy5pc0dyb3VwRnJtKHR5cGUpICYmIHRoaXMuc2hvd0ZybSkgfHxcclxuXHRcdFx0KHRoaXMuaXNHcm91cFN0YXRpYyh0eXBlKSAmJiB0aGlzLnNob3dTdGF0aWMpIHx8XHJcblx0XHRcdCh0aGlzLmlzR3JvdXBCdWRnZXQodHlwZSkgJiYgdGhpcy5zaG93QnVkZ2V0KSB8fFxyXG5cdFx0XHQodGhpcy5pc0dyb3VwRG9jdW1lbnQodHlwZSkgJiYgdGhpcy5zaG93RG9jdW1lbnQpIHx8XHJcblx0XHRcdCh0aGlzLmlzR3JvdXBUYXNrKHR5cGUpICYmIHRoaXMuc2hvd1Rhc2spIHx8XHJcblx0XHRcdCh0aGlzLmlzR3JvdXBEb2N1bWVudEFuYWx5c2lzKHR5cGUpICYmIHRoaXMuc2hvd0RvY3VtZW50QXV0b0FuYWx5c2lzKVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiPGRpdlxyXG5cdCpuZ0lmPVwicmVhZHlBY2NvcmRlb24gJiYgcmVhZHlcIlxyXG5cdHBsaUF1dGhvcml0eURpcmVjdGl2ZVxyXG5cdFthdXRob3JpdGllc109XCJbcCgnUk9MRV9UT0tFTlNfQ09OU1VMVEFSJyldXCJcclxuXHRbcGF0Q29kaWdvXT1cInBhdENvZGlnb1wiXHJcblx0W2V4dGVybmFsQWxsb3dlZF09XCJmYWxzZVwiXHJcbj5cclxuXHQ8ZGl2IGNsYXNzPVwicm93XCI+XHJcblx0XHQ8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcblx0XHRcdDxoNCBjbGFzcz1cIm5vLW1hcmdpbi10b3BcIiAqbmdJZj1cIiFzaG93QXNUaXRsZVwiPlxyXG5cdFx0XHRcdFRva2VucyBmb3JtdWxhcmlvLCBkb2N1bWVudG9zLCBwcmVzdXB1ZXN0bywgdGFyZWFzIHkgZXN0w6F0aWNvc1xyXG5cdFx0XHQ8L2g0PlxyXG5cdFx0XHQ8bGFiZWwgY2xhc3M9XCJuby1tYXJnaW4tdG9wIGZvcm0tY29udHJvbC1sYWJlbFwiICpuZ0lmPVwic2hvd0FzVGl0bGVcIj5cclxuXHRcdFx0XHRUb2tlbnMgZm9ybXVsYXJpbywgZG9jdW1lbnRvcywgcHJlc3VwdWVzdG8sIHRhcmVhcyB5IGVzdMOhdGljb3NcclxuXHRcdFx0PC9sYWJlbD5cclxuXHRcdFx0PHAtYWNjb3JkaW9uIFttdWx0aXBsZV09XCJ0cnVlXCI+XHJcblx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZ3JvdXBUb2tlbiBvZiBsU3RhdGljVG9rZW5cIj5cclxuXHRcdFx0XHRcdDxwLWFjY29yZGlvblRhYlxyXG5cdFx0XHRcdFx0XHQqbmdJZj1cInZhbGlkYXRlVmlzaWJpbGl0eShncm91cFRva2VuLnRva2VuVHlwZSlcIlxyXG5cdFx0XHRcdFx0XHRoZWFkZXI9XCJ7eyBncm91cFRva2VuLnRpdGxlLnZhbHVlIH19XCJcclxuXHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0PGRpdiAqbmdGb3I9XCJsZXQgcGFuZWwgb2YgZ3JvdXBUb2tlbi52YWx1ZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxoNCAqbmdJZj1cImdyb3VwVG9rZW4udmFsdWUgJiYgZ3JvdXBUb2tlbi52YWx1ZS5sZW5ndGggPiAxXCI+XHJcblx0XHRcdFx0XHRcdFx0XHR7eyBwYW5lbC50aXRsZS52YWx1ZSB9fVxyXG5cdFx0XHRcdFx0XHRcdDwvaDQ+XHJcblx0XHRcdFx0XHRcdFx0PGhyXHJcblx0XHRcdFx0XHRcdFx0XHQqbmdJZj1cImdyb3VwVG9rZW4udmFsdWUgJiYgZ3JvdXBUb2tlbi52YWx1ZS5sZW5ndGggPiAxXCJcclxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwibWFyZ2luOiA1cHggMFwiXHJcblx0XHRcdFx0XHRcdFx0Lz5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2ICpuZ0Zvcj1cImxldCBzdGF0aWNUb2tlbiBvZiBwYW5lbC52YWx1ZVwiIGNsYXNzPVwidWktZ1wiPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGRpdlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQqbmdJZj1cInN0YXRpY1Rva2VuWzBdICYmIHN0YXRpY1Rva2VuWzBdLmtleVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwidWktZy0xMiB1aS1tZC02IHVpLWxnLTMgY3V0LWxpbmVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImNvcHlNZXNzYWdlKHN0YXRpY1Rva2VuWzBdLmtleSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlPVwie3sgc3RhdGljVG9rZW5bMF0ua2V5IH19XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cIm1hcmdpbi1yaWdodDogOHB4XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZmEgZmEtY2xpcGJvYXJkXCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gdGl0bGU9XCJ7eyBzdGF0aWNUb2tlblswXS52YWx1ZSB9fVwiPnt7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhdGljVG9rZW5bMF0udmFsdWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0fX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdDxkaXZcclxuXHRcdFx0XHRcdFx0XHRcdFx0Km5nSWY9XCJzdGF0aWNUb2tlblsxXSAmJiBzdGF0aWNUb2tlblsxXS5rZXlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInVpLWctMTIgdWktbWQtNiB1aS1sZy0zIGN1dC1saW5lXCJcclxuXHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdChjbGljayk9XCJjb3B5TWVzc2FnZShzdGF0aWNUb2tlblsxXS5rZXkpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT1cInt7IHN0YXRpY1Rva2VuWzFdLmtleSB9fVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDhweFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZhIGZhLWNsaXBib2FyZFwiPjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIHRpdGxlPVwie3sgc3RhdGljVG9rZW5bMV0udmFsdWUgfX1cIj57e1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0YXRpY1Rva2VuWzFdLnZhbHVlXHJcblx0XHRcdFx0XHRcdFx0XHRcdH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2XHJcblx0XHRcdFx0XHRcdFx0XHRcdCpuZ0lmPVwic3RhdGljVG9rZW5bMl0gJiYgc3RhdGljVG9rZW5bMl0ua2V5XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ1aS1nLTEyIHVpLW1kLTYgdWktbGctMyBjdXQtbGluZVwiXHJcblx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoY2xpY2spPVwiY29weU1lc3NhZ2Uoc3RhdGljVG9rZW5bMl0ua2V5KVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU9XCJ7eyBzdGF0aWNUb2tlblsyXS5rZXkgfX1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA4cHhcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmYSBmYS1jbGlwYm9hcmRcIj48L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiB0aXRsZT1cInt7IHN0YXRpY1Rva2VuWzJdLnZhbHVlIH19XCI+e3tcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdGF0aWNUb2tlblsyXS52YWx1ZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0PGRpdlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQqbmdJZj1cInN0YXRpY1Rva2VuWzNdICYmIHN0YXRpY1Rva2VuWzNdLmtleVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwidWktZy0xMiB1aS1tZC02IHVpLWxnLTMgY3V0LWxpbmVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImNvcHlNZXNzYWdlKHN0YXRpY1Rva2VuWzNdLmtleSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlPVwie3sgc3RhdGljVG9rZW5bM10ua2V5IH19XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRzdHlsZT1cIm1hcmdpbi1yaWdodDogOHB4XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZmEgZmEtY2xpcGJvYXJkXCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gdGl0bGU9XCJ7eyBzdGF0aWNUb2tlblszXS52YWx1ZSB9fVwiPnt7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0c3RhdGljVG9rZW5bM10udmFsdWVcclxuXHRcdFx0XHRcdFx0XHRcdFx0fX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L3AtYWNjb3JkaW9uVGFiPlxyXG5cdFx0XHRcdDwvbmctY29udGFpbmVyPlxyXG5cdFx0XHRcdDxwLWFjY29yZGlvblRhYlxyXG5cdFx0XHRcdFx0Km5nSWY9XCJcclxuXHRcdFx0XHRcdFx0bENhbGN1bGF0ZWRUb2tlbiAmJiBzaG93Q2FsY3VsYXRlZEZvcm0gPT09IGZhbHNlICYmIHNob3dDYWxjdWxhdGVkID09PSB0cnVlXHJcblx0XHRcdFx0XHRcIlxyXG5cdFx0XHRcdFx0aGVhZGVyPVwiVG9rZW5zIGNhbGN1bGFkb3NcIlxyXG5cdFx0XHRcdD5cclxuXHRcdFx0XHRcdDxkaXYgKm5nRm9yPVwibGV0IHRva2VuIG9mIGxDYWxjdWxhdGVkVG9rZW5cIiBjbGFzcz1cInVpLWdcIj5cclxuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInVpLWctMTIgdWktbWQtNiB1aS1sZy0zIGN1dC1saW5lXCI+XHJcblx0XHRcdFx0XHRcdFx0PGJ1dHRvblxyXG5cdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXHJcblx0XHRcdFx0XHRcdFx0XHQoY2xpY2spPVwiY29weU1lc3NhZ2UobGFiZWxDYWxjdWxhdGVkKHRva2VuKSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU9XCJ7eyBsYWJlbENhbGN1bGF0ZWQodG9rZW4pIH19XCJcclxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA4cHhcIlxyXG5cdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZmEgZmEtY2xpcGJvYXJkXCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHRcdDxzcGFuIHRpdGxlPVwie3sgdG9rZW4ubmFtZSB9fVwiPnt7IHRva2VuLm5hbWUgfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC9wLWFjY29yZGlvblRhYj5cclxuXHRcdFx0XHQ8cC1hY2NvcmRpb25UYWIgKm5nSWY9XCJzbmFwU2hvdFRva2VucyAmJiBzaG93U25hcHNob3RcIiBoZWFkZXI9XCJUb2tlbnMgc25hcHNob3RcIj5cclxuXHRcdFx0XHRcdDxkaXYgKm5nRm9yPVwibGV0IHRva2VuIG9mIHNuYXBTaG90VG9rZW5zXCIgY2xhc3M9XCJ1aS1nXCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ1aS1nLTEyIHVpLW1kLTYgdWktbGctMyBjdXQtbGluZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxyXG5cdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImNvcHlNZXNzYWdlKGxhYmVsU25hcHNob3QodG9rZW4pKVwiXHJcblx0XHRcdFx0XHRcdFx0XHR0aXRsZT1cInt7IGxhYmVsU25hcHNob3QodG9rZW4pIH19XCJcclxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA4cHhcIlxyXG5cdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZmEgZmEtY2xpcGJvYXJkXCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0XHRcdDxzcGFuIHRpdGxlPVwie3sgdG9rZW4ubmFtZSB9fVwiPnt7IHRva2VuLm5hbWUgfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC9wLWFjY29yZGlvblRhYj5cclxuXHRcdFx0XHQ8cC1hY2NvcmRpb25UYWIgKm5nSWY9XCJsR3VhcmFudGVlVG9rZW5zICYmIHNob3dHdWF0YW50ZWVcIiBoZWFkZXI9XCJUb2tlbnMgR2FyYW50aWFzXCI+XHJcblx0XHRcdFx0XHQ8ZGl2ICpuZ0Zvcj1cImxldCB0b2tlbiBvZiBsR3VhcmFudGVlVG9rZW5zXCIgY2xhc3M9XCJ1aS1nXCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJ1aS1nLTEyIHVpLW1kLTYgdWktbGctMyBjdXQtbGluZVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxyXG5cdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImNvcHlNZXNzYWdlKGxhYmVsR3VhcmFudGVlKHRva2VuKSlcIlxyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU9XCJ7eyBsYWJlbEd1YXJhbnRlZSh0b2tlbikgfX1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDhweFwiXHJcblx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJmYSBmYS1jbGlwYm9hcmRcIj48L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gdGl0bGU9XCJ7eyB0b2tlbi5uYW1lIH19XCI+e3sgdG9rZW4ubmFtZSB9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHQ8L3AtYWNjb3JkaW9uVGFiPlxyXG5cdFx0XHQ8L3AtYWNjb3JkaW9uPlxyXG5cdFx0PC9kaXY+XHJcblx0XHQ8ZGl2XHJcblx0XHRcdGNsYXNzPVwiY29sLW1kLTEyXCJcclxuXHRcdFx0Km5nSWY9XCJsQ2FsY3VsYXRlZFRva2VuICYmIHNob3dDYWxjdWxhdGVkRm9ybSA9PT0gdHJ1ZSAmJiBzaG93Q2FsY3VsYXRlZCA9PT0gdHJ1ZVwiXHJcblx0XHQ+XHJcblx0XHRcdDxzcGFuIHN0eWxlPVwid2lkdGg6IDFweDsgaGVpZ2h0OiAxMHB4XCI+Jm5ic3A7PC9zcGFuPlxyXG5cdFx0XHQ8aDQgY2xhc3M9XCJuby1tYXJnaW4tdG9wXCI+VG9rZW5zIGNhbGN1bGFkb3M8L2g0PlxyXG5cdFx0XHQ8cC10YWJsZSBbdmFsdWVdPVwibENhbGN1bGF0ZWRUb2tlblwiIFtyZXNwb25zaXZlXT1cInRydWVcIj5cclxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XHJcblx0XHRcdFx0XHQ8dHIgY2xhc3M9XCJ0ZXh0LWFsaWduLWNlbnRlclwiPlxyXG5cdFx0XHRcdFx0XHQ8dGggY2xhc3M9XCJ0ZXh0LWFsaWduLWNlbnRlclwiIHdpZHRoPVwiNDAlXCI+Tm9tYnJlPC90aD5cclxuXHRcdFx0XHRcdFx0PHRoIGNsYXNzPVwidGV4dC1hbGlnbi1jZW50ZXJcIj5Gb3JtdWxhPC90aD5cclxuXHRcdFx0XHRcdFx0PHRoIGNsYXNzPVwidGV4dC1hbGlnbi1jZW50ZXJcIj5DcmVhZG88L3RoPlxyXG5cdFx0XHRcdFx0XHQ8dGggY2xhc3M9XCJ0ZXh0LWFsaWduLWNlbnRlclwiPk1vZGlmaWNhZG88L3RoPlxyXG5cdFx0XHRcdFx0XHQ8dGggY2xhc3M9XCJ0ZXh0LWFsaWduLWNlbnRlclwiPkFjY2lvbmVzPC90aD5cclxuXHRcdFx0XHRcdDwvdHI+XHJcblx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cclxuXHRcdFx0XHQ8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC10b2tlbj5cclxuXHRcdFx0XHRcdDx0cj5cclxuXHRcdFx0XHRcdFx0PHRkPlxyXG5cdFx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxyXG5cdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImNvcHlNZXNzYWdlKGxhYmVsQ2FsY3VsYXRlZCh0b2tlbikpXCJcclxuXHRcdFx0XHRcdFx0XHRcdHN0eWxlPVwibWFyZ2luLXJpZ2h0OiA4cHhcIlxyXG5cdFx0XHRcdFx0XHRcdFx0dGl0bGU9XCJ7eyBsYWJlbENhbGN1bGF0ZWQodG9rZW4pIH19XCJcclxuXHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImZhIGZhLWNsaXBib2FyZFwiPjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHR7eyB0b2tlbi5uYW1lIH19XHJcblx0XHRcdFx0XHRcdDwvdGQ+XHJcblx0XHRcdFx0XHRcdDx0ZCBjbGFzcz1cImN1dC1saW5lXCI+e3sgdG9rZW4uZm9ybXVsYSB9fTwvdGQ+XHJcblx0XHRcdFx0XHRcdDx0ZD57eyB0b2tlbi5jcmVhdGVkQXQgfCBkYXRlOiAnZGQgTU1NIHl5eXknIHwgbG93ZXJjYXNlIH19PC90ZD5cclxuXHRcdFx0XHRcdFx0PHRkPnt7IHRva2VuLm1vZGlmaWVkQXQgfCBkYXRlOiAnZGQgTU1NIHl5eXknIHwgbG93ZXJjYXNlIH19PC90ZD5cclxuXHRcdFx0XHRcdFx0PHRkPlxyXG5cdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cImJ1dHRvblwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImluaXRGb3JtKHRva2VuKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdHBsaUF1dGhvcml0eURpcmVjdGl2ZVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRbYXV0aG9yaXRpZXNdPVwiW3AoJ1JPTEVfVE9LRU5TX0NSRUFSX0VESVRBUicpXVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFtwYXRDb2RpZ29dPVwicGF0Q29kaWdvXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0W2V4dGVybmFsQWxsb3dlZF09XCJmYWxzZVwiXHJcblx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdEVkaXRhclxyXG5cdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBkcm9wZG93bi10b2dnbGVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0YXJpYS1oYXNwb3B1cD1cInRydWVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0XHQ8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxsaT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8YVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aHJlZj1cIkphdmFzY3JpcHQ6O1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoY2xpY2spPVwiZGVsZXRlKHRva2VuKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwbGlBdXRob3JpdHlEaXJlY3RpdmVcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFthdXRob3JpdGllc109XCJbcCgnUk9MRV9UT0tFTlNfRUxJTUlOQVInKV1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0W3BhdENvZGlnb109XCJwYXRDb2RpZ29cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0W2V4dGVybmFsQWxsb3dlZF09XCJmYWxzZVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+RWxpbWluYXI8L2FcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L3VsPlxyXG5cdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdFx0PC90cj5cclxuXHRcdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0XHQ8L3AtdGFibGU+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ0ZXh0LWFsaWduLXJpZ2h0XCIgc3R5bGU9XCJwYWRkaW5nOiAwLjc1cmVtIDEuMjVyZW1cIj5cclxuXHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHR0eXBlPVwiYnV0dG9uXCJcclxuXHRcdFx0XHRcdGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuXHRcdFx0XHRcdChjbGljayk9XCJpbml0Rm9ybShudWxsKVwiXHJcblx0XHRcdFx0XHRwbGlBdXRob3JpdHlEaXJlY3RpdmVcclxuXHRcdFx0XHRcdFthdXRob3JpdGllc109XCJbcCgnUk9MRV9UT0tFTlNfQ1JFQVJfRURJVEFSJyldXCJcclxuXHRcdFx0XHRcdFtwYXRDb2RpZ29dPVwicGF0Q29kaWdvXCJcclxuXHRcdFx0XHRcdFtleHRlcm5hbEFsbG93ZWRdPVwiZmFsc2VcIlxyXG5cdFx0XHRcdD5cclxuXHRcdFx0XHRcdEFncmVnYXIgbnVldm9cclxuXHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0PC9kaXY+XHJcblxyXG5cdFx0XHQ8ZGl2PlxyXG5cdFx0XHRcdDxmb3JtIFtmb3JtR3JvdXBdPVwiZnJtVG9rZW5cIiAobmdTdWJtaXQpPVwic2F2ZSgpXCIgKm5nSWY9XCJ0b2tlblNlbGVjdGVkXCI+XHJcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicm93XCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuXHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwicm93XCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY29sLXNtLTYgY29sLW1kLTZcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcmVxdWlyZWRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwibmFtZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCI+Tm9tYnJlPC9sYWJlbD5cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGlucHV0XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiaW5wdXRcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZT1cIm5hbWVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9XCJuYW1lXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBsYWNlaG9sZGVyPVwiTm9tYnJlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZvcm1Db250cm9sTmFtZT1cImNvbnRyb2xOYW1lXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFsobmdNb2RlbCldPVwidG9rZW5TZWxlY3RlZC5uYW1lXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxiciAvPjxiciAvPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxsYWJlbCBjbGFzcz1cImZvcm0tY29udHJvbC1sYWJlbFwiPkxsYXZlOjwvbGFiZWxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+Jm5ic3A7Jm5ic3A7PHNwYW4gc3R5bGU9XCJmb250LXdlaWdodDogYm9sZFwiPnt7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlS2V5Q2FsY3VsYXRlZFRva2VuKClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sLWVycm9yXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c21hbGwgKm5nSWY9XCJoYXNFcnJvcihjb250cm9sTmFtZSwgJ3JlcXVpcmVkJylcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+Tm9tYnJlIGVzIHJlcXVlcmlkbzwvc21hbGxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHJcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiY29sLXNtLTYgY29sLW1kLTZcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcmVxdWlyZWRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGFiZWwgZm9yPVwiZm9ybXVsYVwiIGNsYXNzPVwiZm9ybS1jb250cm9sLWxhYmVsXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5Gb3JtdWxhPC9sYWJlbFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD5cclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PCEtLSA8aW5wdXQgdHlwZT1cImlucHV0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwiZm9ybXVsYVwiIGlkPVwiZm9ybXVsYVwiIHBsYWNlaG9sZGVyPVwiRsOzcm11bGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmb3JtdWxhXCIgWyhuZ01vZGVsKV09XCJ0b2tlblNlbGVjdGVkLmZvcm11bGFcIiAvPiAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8dGV4dGFyZWFcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbHM9XCI1MFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyb3dzPVwiNFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lPVwiZm9ybXVsYVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD1cImZvcm11bGFcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9ybUNvbnRyb2xOYW1lPVwiY29udHJvbEZvcm11bGFcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0WyhuZ01vZGVsKV09XCJ0b2tlblNlbGVjdGVkLmZvcm11bGFcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdD48L3RleHRhcmVhPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wtZXJyb3JcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzbWFsbCAqbmdJZj1cImhhc0Vycm9yKGNvbnRyb2xGb3JtdWxhLCAncmVxdWlyZWQnKVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5Gw7NybXVsYSBlcyByZXF1ZXJpZGE8L3NtYWxsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cImNhcmQtZm9vdGVyIHRleHQtYWxpZ24tcmlnaHRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjYW5jZWwoKVwiIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdENhbmNlbGFyXHJcblx0XHRcdFx0XHRcdFx0XHQ8L2J1dHRvbj5cclxuXHRcdFx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cInN1Ym1pdFwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0cGxpQXV0aG9yaXR5RGlyZWN0aXZlXHJcblx0XHRcdFx0XHRcdFx0XHRcdFthdXRob3JpdGllc109XCJbcCgnUk9MRV9UT0tFTlNfQ1JFQVJfRURJVEFSJyldXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0W3BhdENvZGlnb109XCJwYXRDb2RpZ29cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRbZXh0ZXJuYWxBbGxvd2VkXT1cImZhbHNlXCJcclxuXHRcdFx0XHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0XHRcdFx0R3VhcmRhclxyXG5cdFx0XHRcdFx0XHRcdFx0PC9idXR0b24+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC9mb3JtPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdFx0PHBsaS1zbmFwc2hvdC10b2tlblxyXG5cdFx0XHRcdFtwcm9tQ29kaWdvXT1cInByb21Db2RpZ29cIlxyXG5cdFx0XHRcdCpuZ0lmPVwic2hvd1NuYXBzaG90Rm9ybVwiXHJcblx0XHRcdD48L3BsaS1zbmFwc2hvdC10b2tlbj5cclxuXHRcdDwvZGl2PlxyXG5cdDwvZGl2PlxyXG5cdDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuXHRcdDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMlwiPlxyXG5cdFx0XHQ8cGxpLWd1YXJhbnRlZS10b2tlbiBbcHJvbUNvZGlnb109XCJwcm9tQ29kaWdvXCIgKm5nSWY9XCJzaG93R3VhdGFudGVlRm9ybVwiPlxyXG5cdFx0XHQ8L3BsaS1ndWFyYW50ZWUtdG9rZW4+XHJcblx0XHQ8L2Rpdj5cclxuXHQ8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==