keevo-components 1.8.47 → 1.8.48

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 (202) hide show
  1. package/README.md +24 -24
  2. package/esm2022/keevo-components.mjs +4 -4
  3. package/esm2022/lib/api/base-components/base-component-button.mjs +36 -36
  4. package/esm2022/lib/api/base-components/base-component-chart.mjs +92 -92
  5. package/esm2022/lib/api/base-components/base-component-crud-form.mjs +298 -298
  6. package/esm2022/lib/api/base-components/base-component-crud-list.mjs +78 -78
  7. package/esm2022/lib/api/base-components/base-component-crud.mjs +65 -65
  8. package/esm2022/lib/api/base-components/base-component-dropdown-external.mjs +31 -31
  9. package/esm2022/lib/api/base-components/base-component-dropdown.mjs +169 -169
  10. package/esm2022/lib/api/base-components/base-component-input.mjs +94 -94
  11. package/esm2022/lib/api/base-components/base-component-multi-select.mjs +130 -130
  12. package/esm2022/lib/api/base-components/base-component.mjs +51 -51
  13. package/esm2022/lib/api/components/chart/chart.config.mjs +2 -2
  14. package/esm2022/lib/api/components/chart/chart.model.mjs +2 -2
  15. package/esm2022/lib/api/components/chart/orchart.config.mjs +2 -2
  16. package/esm2022/lib/api/components/chart/orchart.item.mjs +2 -2
  17. package/esm2022/lib/api/components/dropdown/filtro.combo.mjs +2 -2
  18. package/esm2022/lib/api/components/table/action-item.mjs +2 -2
  19. package/esm2022/lib/api/components/table/kv-menuitem.mjs +3 -3
  20. package/esm2022/lib/api/components/table/table-dropdown-control.mjs +2 -2
  21. package/esm2022/lib/api/components/table/table.config.column.mjs +2 -2
  22. package/esm2022/lib/api/components/table/table.config.mjs +2 -2
  23. package/esm2022/lib/api/components/table/table.paginate.mjs +9 -9
  24. package/esm2022/lib/api/components/table/tabledit.config.mjs +2 -2
  25. package/esm2022/lib/api/components/table/tableedit.config.column.mjs +2 -2
  26. package/esm2022/lib/api/directives/template/template.directive.mjs +24 -24
  27. package/esm2022/lib/api/helpers/component-providers.mjs +16 -16
  28. package/esm2022/lib/api/helpers/keevo-validators.mjs +72 -72
  29. package/esm2022/lib/api/helpers/translate-primeng.mjs +23 -23
  30. package/esm2022/lib/api/modules/primeng.module.mjs +255 -255
  31. package/esm2022/lib/api/pipes/cpfcnpj.pipe.mjs +25 -25
  32. package/esm2022/lib/api/pipes/mask.pipe.mjs +29 -29
  33. package/esm2022/lib/api/pipes/pipes.module.mjs +34 -34
  34. package/esm2022/lib/api/pipes/telefone.pipe.mjs +45 -45
  35. package/esm2022/lib/api/services/base.api.service.mjs +74 -74
  36. package/esm2022/lib/api/services/breadcrumbs.service.mjs +57 -57
  37. package/esm2022/lib/api/services/component.service.mjs +27 -27
  38. package/esm2022/lib/api/services/form.service.mjs +85 -85
  39. package/esm2022/lib/api/services/imagens.service.mjs +28 -28
  40. package/esm2022/lib/api/services/notification.service.mjs +67 -67
  41. package/esm2022/lib/api/services/object.service.mjs +39 -39
  42. package/esm2022/lib/components/keevo-components.module.mjs +137 -137
  43. package/esm2022/lib/components/kv-avatar/kv-avatar.component.mjs +78 -78
  44. package/esm2022/lib/components/kv-avatar/kv-avatar.module.mjs +32 -32
  45. package/esm2022/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.mjs +31 -31
  46. package/esm2022/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.mjs +31 -31
  47. package/esm2022/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.mjs +17 -17
  48. package/esm2022/lib/components/kv-buttons/kv-button-success/kv-button-success.component.mjs +17 -17
  49. package/esm2022/lib/components/kv-buttons/kv-button.module.mjs +39 -39
  50. package/esm2022/lib/components/kv-carousel/kv-carousel.component.mjs +92 -92
  51. package/esm2022/lib/components/kv-carousel/kv-carousel.module.mjs +28 -28
  52. package/esm2022/lib/components/kv-chart/kv-chart.component.mjs +145 -145
  53. package/esm2022/lib/components/kv-chart/kv-chart.module.mjs +32 -32
  54. package/esm2022/lib/components/kv-error/kv-error.component.mjs +26 -26
  55. package/esm2022/lib/components/kv-error/kv-error.module.mjs +35 -35
  56. package/esm2022/lib/components/kv-inputs/kv-check/kv-check.component.mjs +26 -26
  57. package/esm2022/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.mjs +37 -37
  58. package/esm2022/lib/components/kv-inputs/kv-editor/kv-editor.component.mjs +88 -88
  59. package/esm2022/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.mjs +89 -89
  60. package/esm2022/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.mjs +29 -29
  61. package/esm2022/lib/components/kv-inputs/kv-input-number/kv-input-number.component.mjs +59 -59
  62. package/esm2022/lib/components/kv-inputs/kv-input-password/kv-input-password.component.mjs +33 -33
  63. package/esm2022/lib/components/kv-inputs/kv-input-text/kv-input-text.component.mjs +25 -25
  64. package/esm2022/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.mjs +42 -42
  65. package/esm2022/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.mjs +43 -43
  66. package/esm2022/lib/components/kv-inputs/kv-input-time/kv-input-time.component.mjs +24 -24
  67. package/esm2022/lib/components/kv-inputs/kv-inputs.module.mjs +108 -108
  68. package/esm2022/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.mjs +44 -44
  69. package/esm2022/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.mjs +53 -53
  70. package/esm2022/lib/components/kv-inputs/kv-switch/kv-switch.component.mjs +34 -34
  71. package/esm2022/lib/components/kv-label/kv-label.component.mjs +15 -15
  72. package/esm2022/lib/components/kv-label/kv-label.module.mjs +24 -24
  73. package/esm2022/lib/components/kv-loader/kv-loader.component.mjs +17 -17
  74. package/esm2022/lib/components/kv-loader/kv-loader.module.mjs +28 -28
  75. package/esm2022/lib/components/kv-loader/kv-loader.service.mjs +29 -29
  76. package/esm2022/lib/components/kv-login/kv-login.component.mjs +52 -52
  77. package/esm2022/lib/components/kv-login/kv-login.module.mjs +47 -47
  78. package/esm2022/lib/components/kv-menu/kv-menu.component.mjs +190 -190
  79. package/esm2022/lib/components/kv-menu/kv-menu.module.mjs +47 -47
  80. package/esm2022/lib/components/kv-modal/kv-modal.component.mjs +69 -67
  81. package/esm2022/lib/components/kv-modal/kv-modal.module.mjs +31 -31
  82. package/esm2022/lib/components/kv-orgchart/kv-orgchart.component.mjs +100 -100
  83. package/esm2022/lib/components/kv-orgchart/kv-orgchart.module.mjs +24 -24
  84. package/esm2022/lib/components/kv-page-form/kv-page-form.component.mjs +147 -147
  85. package/esm2022/lib/components/kv-page-form/kv-page-form.module.mjs +38 -38
  86. package/esm2022/lib/components/kv-pick-list/kv-pick-list.component.mjs +48 -48
  87. package/esm2022/lib/components/kv-pick-list/kv-pick-list.module.mjs +32 -32
  88. package/esm2022/lib/components/kv-progress-bar/kv-progress-bar.component.mjs +58 -58
  89. package/esm2022/lib/components/kv-progress-bar/kv-progress-bar.module.mjs +28 -28
  90. package/esm2022/lib/components/kv-table/kv-table.component.mjs +553 -553
  91. package/esm2022/lib/components/kv-table/kv-table.module.mjs +36 -36
  92. package/esm2022/lib/components/kv-table-edit/kv-table-edit.component.mjs +564 -564
  93. package/esm2022/lib/components/kv-table-edit/kv-table-edit.module.mjs +34 -34
  94. package/esm2022/lib/components/kv-tree-table/kv-tree-table.component.mjs +220 -220
  95. package/esm2022/lib/components/kv-tree-table/kv-tree-table.module.mjs +28 -28
  96. package/esm2022/lib/components/kv-tree-view/kv-tree-view.component.mjs +30 -30
  97. package/esm2022/lib/components/kv-tree-view/kv-tree-view.module.mjs +28 -28
  98. package/esm2022/lib/components/kv-workspace/kv-workspace.component.mjs +178 -178
  99. package/esm2022/lib/components/kv-workspace/kv-workspace.module.mjs +51 -51
  100. package/esm2022/public-api.mjs +166 -166
  101. package/fesm2022/keevo-components.mjs +5393 -5391
  102. package/fesm2022/keevo-components.mjs.map +1 -1
  103. package/index.d.ts +5 -5
  104. package/lib/api/base-components/base-component-button.d.ts +14 -14
  105. package/lib/api/base-components/base-component-chart.d.ts +40 -40
  106. package/lib/api/base-components/base-component-crud-form.d.ts +145 -145
  107. package/lib/api/base-components/base-component-crud-list.d.ts +63 -63
  108. package/lib/api/base-components/base-component-crud.d.ts +36 -36
  109. package/lib/api/base-components/base-component-dropdown-external.d.ts +15 -15
  110. package/lib/api/base-components/base-component-dropdown.d.ts +44 -44
  111. package/lib/api/base-components/base-component-input.d.ts +31 -31
  112. package/lib/api/base-components/base-component-multi-select.d.ts +35 -35
  113. package/lib/api/base-components/base-component.d.ts +22 -22
  114. package/lib/api/components/chart/chart.config.d.ts +11 -11
  115. package/lib/api/components/chart/chart.model.d.ts +9 -9
  116. package/lib/api/components/chart/orchart.config.d.ts +35 -35
  117. package/lib/api/components/chart/orchart.item.d.ts +26 -26
  118. package/lib/api/components/dropdown/filtro.combo.d.ts +4 -4
  119. package/lib/api/components/table/action-item.d.ts +11 -11
  120. package/lib/api/components/table/kv-menuitem.d.ts +10 -10
  121. package/lib/api/components/table/table-dropdown-control.d.ts +6 -6
  122. package/lib/api/components/table/table.config.column.d.ts +25 -25
  123. package/lib/api/components/table/table.config.d.ts +19 -19
  124. package/lib/api/components/table/table.paginate.d.ts +6 -6
  125. package/lib/api/components/table/tabledit.config.d.ts +8 -8
  126. package/lib/api/components/table/tableedit.config.column.d.ts +10 -10
  127. package/lib/api/directives/template/template.directive.d.ts +11 -11
  128. package/lib/api/helpers/component-providers.d.ts +2 -2
  129. package/lib/api/helpers/keevo-validators.d.ts +11 -11
  130. package/lib/api/helpers/translate-primeng.d.ts +4 -4
  131. package/lib/api/modules/primeng.module.d.ts +62 -62
  132. package/lib/api/pipes/cpfcnpj.pipe.d.ts +7 -7
  133. package/lib/api/pipes/mask.pipe.d.ts +7 -7
  134. package/lib/api/pipes/pipes.module.d.ts +10 -10
  135. package/lib/api/pipes/telefone.pipe.d.ts +7 -7
  136. package/lib/api/services/base.api.service.d.ts +25 -25
  137. package/lib/api/services/breadcrumbs.service.d.ts +15 -15
  138. package/lib/api/services/component.service.d.ts +11 -11
  139. package/lib/api/services/form.service.d.ts +28 -28
  140. package/lib/api/services/imagens.service.d.ts +10 -10
  141. package/lib/api/services/notification.service.d.ts +25 -25
  142. package/lib/api/services/object.service.d.ts +9 -9
  143. package/lib/components/keevo-components.module.d.ts +24 -24
  144. package/lib/components/kv-avatar/kv-avatar.component.d.ts +22 -22
  145. package/lib/components/kv-avatar/kv-avatar.module.d.ts +10 -10
  146. package/lib/components/kv-buttons/kv-button-personalize/kv-button-personalize.component.d.ts +13 -13
  147. package/lib/components/kv-buttons/kv-button-popup/kv-button-popup.component.d.ts +13 -13
  148. package/lib/components/kv-buttons/kv-button-secondary/kv-button-secondary.component.d.ts +7 -7
  149. package/lib/components/kv-buttons/kv-button-success/kv-button-success.component.d.ts +7 -7
  150. package/lib/components/kv-buttons/kv-button.module.d.ts +11 -11
  151. package/lib/components/kv-carousel/kv-carousel.component.d.ts +16 -16
  152. package/lib/components/kv-carousel/kv-carousel.module.d.ts +9 -9
  153. package/lib/components/kv-chart/kv-chart.component.d.ts +56 -56
  154. package/lib/components/kv-chart/kv-chart.module.d.ts +10 -10
  155. package/lib/components/kv-error/kv-error.component.d.ts +12 -12
  156. package/lib/components/kv-error/kv-error.module.d.ts +10 -10
  157. package/lib/components/kv-inputs/kv-check/kv-check.component.d.ts +11 -11
  158. package/lib/components/kv-inputs/kv-dropdown/kv-dropdown.component.d.ts +14 -14
  159. package/lib/components/kv-inputs/kv-editor/kv-editor.component.d.ts +36 -36
  160. package/lib/components/kv-inputs/kv-input-calendar/kv-input-calendar.component.d.ts +27 -27
  161. package/lib/components/kv-inputs/kv-input-mask/kv-input-mask.component.d.ts +12 -12
  162. package/lib/components/kv-inputs/kv-input-number/kv-input-number.component.d.ts +19 -19
  163. package/lib/components/kv-inputs/kv-input-password/kv-input-password.component.d.ts +13 -13
  164. package/lib/components/kv-inputs/kv-input-text/kv-input-text.component.d.ts +10 -10
  165. package/lib/components/kv-inputs/kv-input-text-checkbox/kv-input-text-checkbox.component.d.ts +16 -16
  166. package/lib/components/kv-inputs/kv-input-textarea/kv-input-textarea.component.d.ts +16 -16
  167. package/lib/components/kv-inputs/kv-input-time/kv-input-time.component.d.ts +10 -10
  168. package/lib/components/kv-inputs/kv-inputs.module.d.ts +25 -25
  169. package/lib/components/kv-inputs/kv-multi-select/kv-multi-select.component.d.ts +15 -15
  170. package/lib/components/kv-inputs/kv-radio-group/kv-radio-group.component.d.ts +18 -18
  171. package/lib/components/kv-inputs/kv-switch/kv-switch.component.d.ts +14 -14
  172. package/lib/components/kv-label/kv-label.component.d.ts +7 -7
  173. package/lib/components/kv-label/kv-label.module.d.ts +8 -8
  174. package/lib/components/kv-loader/kv-loader.component.d.ts +8 -8
  175. package/lib/components/kv-loader/kv-loader.module.d.ts +9 -9
  176. package/lib/components/kv-loader/kv-loader.service.d.ts +10 -10
  177. package/lib/components/kv-login/kv-login.component.d.ts +30 -30
  178. package/lib/components/kv-login/kv-login.module.d.ts +13 -13
  179. package/lib/components/kv-menu/kv-menu.component.d.ts +58 -58
  180. package/lib/components/kv-menu/kv-menu.module.d.ts +13 -13
  181. package/lib/components/kv-modal/kv-modal.component.d.ts +20 -20
  182. package/lib/components/kv-modal/kv-modal.module.d.ts +10 -10
  183. package/lib/components/kv-orgchart/kv-orgchart.component.d.ts +27 -27
  184. package/lib/components/kv-orgchart/kv-orgchart.module.d.ts +9 -9
  185. package/lib/components/kv-page-form/kv-page-form.component.d.ts +70 -70
  186. package/lib/components/kv-page-form/kv-page-form.module.d.ts +11 -11
  187. package/lib/components/kv-pick-list/kv-pick-list.component.d.ts +20 -20
  188. package/lib/components/kv-pick-list/kv-pick-list.module.d.ts +10 -10
  189. package/lib/components/kv-progress-bar/kv-progress-bar.component.d.ts +67 -67
  190. package/lib/components/kv-progress-bar/kv-progress-bar.module.d.ts +9 -9
  191. package/lib/components/kv-table/kv-table.component.d.ts +112 -112
  192. package/lib/components/kv-table/kv-table.module.d.ts +11 -11
  193. package/lib/components/kv-table-edit/kv-table-edit.component.d.ts +115 -115
  194. package/lib/components/kv-table-edit/kv-table-edit.module.d.ts +12 -12
  195. package/lib/components/kv-tree-table/kv-tree-table.component.d.ts +43 -43
  196. package/lib/components/kv-tree-table/kv-tree-table.module.d.ts +9 -9
  197. package/lib/components/kv-tree-view/kv-tree-view.component.d.ts +14 -14
  198. package/lib/components/kv-tree-view/kv-tree-view.module.d.ts +9 -9
  199. package/lib/components/kv-workspace/kv-workspace.component.d.ts +46 -46
  200. package/lib/components/kv-workspace/kv-workspace.module.d.ts +14 -14
  201. package/package.json +1 -1
  202. package/public-api.d.ts +162 -162
@@ -1,190 +1,190 @@
1
- import { Component, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "@angular/router";
4
- import * as i2 from "@angular/common";
5
- import * as i3 from "primeng/api";
6
- import * as i4 from "primeng/breadcrumb";
7
- import * as i5 from "primeng/tooltip";
8
- import * as i6 from "primeng/button";
9
- import * as i7 from "primeng/card";
10
- import * as i8 from "primeng/divider";
11
- import * as i9 from "primeng/overlaypanel";
12
- import * as i10 from "primeng/ripple";
13
- import * as i11 from "primeng/sidebar";
14
- import * as i12 from "primeng/styleclass";
15
- import * as i13 from "../../api/pipes/cpfcnpj.pipe";
16
- export class KvMenuComponent {
17
- constructor(cdr, router, route) {
18
- this.cdr = cdr;
19
- this.router = router;
20
- this.route = route;
21
- this.aplicativos = [];
22
- this.breadCrumbItems = [];
23
- this.licencas = [];
24
- this.expandMenuEmit = new EventEmitter();
25
- this.gerenciarKeePassEvent = new EventEmitter();
26
- this.licencaChange = new EventEmitter();
27
- this.sairEvent = new EventEmitter();
28
- this.trocarLicencaEmit = new EventEmitter();
29
- this.menus = [];
30
- this.expandMenu = true;
31
- this.visibleDialogLicenca = false;
32
- }
33
- ajustarHeigthCard() {
34
- if (this.widthCard > 400) {
35
- if (this.breadCrumbItems.length > 0)
36
- return 105;
37
- else
38
- return 85;
39
- }
40
- else
41
- return 83;
42
- }
43
- callRoute(e, expand) {
44
- if (!expand)
45
- !this.expandMenu ? this.expandMenu = !this.expandMenu : '';
46
- this.router.navigateByUrl(e);
47
- }
48
- closeCallback(e) {
49
- this.sidebarRef.close(e);
50
- }
51
- configurarLicencas() {
52
- setTimeout(() => {
53
- this.definirMenusPorSistema(this.aplicativos[0]?.idaplicativo);
54
- }, 1);
55
- }
56
- definirMenusPorSistema(idaplicativo) {
57
- this.menus = this.aplicativos.find((x) => x.idaplicativo == idaplicativo)?.menus || [];
58
- if (this.router.url && this.menus.length > 0) {
59
- if (this.router.url === '/') {
60
- this.navigateToFirstMenu();
61
- }
62
- else {
63
- const menuSelecionado = this.menus.find((menu) => menu.link.includes(this.router.url.slice(1)));
64
- if (menuSelecionado) {
65
- this.navigateToMenu(menuSelecionado);
66
- }
67
- }
68
- }
69
- this.sistemasPanel.hide();
70
- }
71
- expandMenuEvent() {
72
- this.expandMenuEmit.emit(this.expandMenu);
73
- }
74
- gerenciarKeePass(event) {
75
- this.sistemasPanel.hide();
76
- this.gerenciarKeePassEvent.emit(event);
77
- }
78
- mascaraNomeLicenca(nomeLicenca) {
79
- if (nomeLicenca) {
80
- if (nomeLicenca.length > 23)
81
- return nomeLicenca.substring(0, 23) + '...';
82
- else
83
- return nomeLicenca;
84
- }
85
- else
86
- return '';
87
- }
88
- navigateToFirstMenu() {
89
- const firstMenu = this.menus[0];
90
- if (firstMenu.indmenupai) {
91
- const filhos = this.retornarMenuFilhos(firstMenu.idaplicativo, firstMenu.idmenu);
92
- if (filhos) {
93
- this.callRoute(filhos[0].link, true);
94
- }
95
- }
96
- else {
97
- this.callRoute(firstMenu.link, true);
98
- }
99
- }
100
- navigateToMenu(menu) {
101
- if (menu.menupai) {
102
- const filhos = this.retornarMenuFilhos(menu.idsistema, menu.idmenu);
103
- if (filhos) {
104
- this.callRoute(filhos[0].link, true);
105
- }
106
- }
107
- else {
108
- this.callRoute(menu.link, true);
109
- }
110
- }
111
- ngOnInit() {
112
- this.configurarLicencas();
113
- this.heigthCard = Number(document.getElementById('page-content')?.offsetHeight);
114
- this.widthCard = Number(window.innerWidth) - (this.expandMenu ? 333 : 93);
115
- this.expandMenuEvent();
116
- }
117
- onMouseEnter(index) {
118
- this.mouseOverIndex = index;
119
- }
120
- onMouseFilhoEnter(index) {
121
- this.mouseOverFilhoIndex = index;
122
- }
123
- onMouseLeave() {
124
- this.mouseOverIndex = null;
125
- this.mouseOverFilhoIndex = null;
126
- }
127
- onWindowResize() {
128
- this.heigthCard = Number(document.getElementById('page-content')?.offsetHeight);
129
- this.widthCard = Number(window.innerWidth) - (this.expandMenu ? 333 : 93);
130
- this.cdr.detectChanges();
131
- }
132
- retornarMenuFilhos(idaplicativo, idmenu) {
133
- return this.aplicativos.find((x) => x.idaplicativo == idaplicativo)?.menus.filter((x) => x.idmenupai == idmenu);
134
- }
135
- sair(event) {
136
- this.sistemasPanel.hide();
137
- this.sairEvent.emit(event);
138
- }
139
- toggleMenu() {
140
- this.expandMenu = !this.expandMenu;
141
- this.expandMenuEvent();
142
- }
143
- trocarLicenca() {
144
- this.trocarLicencaEmit.emit();
145
- }
146
- verificarPaginaSelecionada(link) {
147
- return this.router.url.includes(link);
148
- }
149
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: KvMenuComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
150
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: KvMenuComponent, selector: "kv-menu", inputs: { aplicativos: "aplicativos", breadCrumbItems: "breadCrumbItems", licencas: "licencas", licencaSelecionada: "licencaSelecionada", logoImage: "logoImage", nomeUsuario: "nomeUsuario" }, outputs: { expandMenuEmit: "expandMenuEmit", gerenciarKeePassEvent: "gerenciarKeePassEvent", licencaChange: "licencaChange", sairEvent: "sairEvent", trocarLicencaEmit: "trocarLicencaEmit" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, viewQueries: [{ propertyName: "meusDadosPanel", first: true, predicate: ["meusDadosPanel"], descendants: true }, { propertyName: "sidebarRef", first: true, predicate: ["sidebarRef"], descendants: true }, { propertyName: "sistemasPanel", first: true, predicate: ["sistemasPanel"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-row overflow-y-hidden w- full-container\">\n\n <div [style]=\"{minWidth: expandMenu ? '300px' : '60px'}\"></div>\n\n <p-sidebar\n #sidebarRef\n [visible]=\"true\"\n [showCloseIcon]=\"false\"\n [modal]=\"false\"\n [style]=\"{width: expandMenu ? '300px' : '60px'}\">\n <ng-template pTemplate=\"headless\">\n <div class=\"flex flex-column mx-1\">\n <div\n class=\"flex flex-column gap-2 justify-content-between flex-shrink-0 mx-2\">\n <div\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}} py-3\">\n <img\n *ngIf=\"expandMenu\"\n alt=\"Card\"\n [src]=\"logoImage\"\n width=\"150\" />\n\n <button\n pButton\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\n (click)=\"toggleMenu()\"\n [pTooltip]=\"expandMenu ? 'Ocutar Menu' : 'Expandir Menu'\"\n [tooltipPosition]=\"'right'\">\n <i class=\"material-symbols-outlined\">\n menu\n </i>\n </button>\n </div>\n\n <div\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}}\">\n <div\n class=\"flex flex-column cursor-pointer\"\n *ngIf=\"expandMenu\"\n (click)=\"trocarLicenca()\">\n <span\n class=\"text-sm font-semibold mr-2\"\n [pTooltip]=\"this.licencaSelecionada.nome\"\n [tooltipPosition]=\"'right'\">\n {{mascaraNomeLicenca(this.licencaSelecionada.nome)}}\n </span>\n <span class=\"text-sm mt-1\">{{this.licencaSelecionada.cpfcnpj |\n cpfCnpj }}</span>\n </div>\n\n <button\n pButton\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\n (click)=\"trocarLicenca()\"\n [pTooltip]=\"'Alterar workspace'\"\n [tooltipPosition]=\"'right'\">\n <i class=\"material-symbols-outlined\">\n sync_alt\n </i>\n </button>\n\n </div>\n <p-divider type=\"solid\"></p-divider>\n </div>\n\n <div\n class=\"list-none m-0 card-container {{expandMenu ? 'mx-1' : ''}}\"\n [style.max-height]=\"(heigthCard - 220) + 'px'\"\n style=\"overflow-y: auto;\">\n <!-- menus -->\n <li *ngFor=\"let menu of menus; let i = index\">\n <!-- menu que n\u00E3o tem filho -->\n <a\n (mouseenter)=\"onMouseEnter(i)\"\n (mouseleave)=\"onMouseLeave()\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\n (click)=\"callRoute(menu.link)\"\n *ngIf=\"!menu.indmenupai && (!menu.idmenupai || menu.idmenupai == 0)\"\n pRipple\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\n [tooltipPosition]=\"'right'\"\n class=\"{{verificarPaginaSelecionada(menu.link) ? 'bg-green-600' : ''}} menu-option flex align-items-center no-underline {{!expandMenu ? 'justify-content-center' : ''}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\">\n\n <i\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color {{verificarPaginaSelecionada(menu.link) ? 'text-white' : ''}}\"\n *ngIf=\"menu.icone\">\n {{ menu.icone }}\n </i>\n <span\n class=\"text-base text-blue-900 font-medium {{verificarPaginaSelecionada(menu.link) ? 'text-white' : ''}}\"\n *ngIf=\"expandMenu\">{{ menu.descricaomenu }}</span>\n </a>\n <!-- menu com filho -->\n <div *ngIf=\"menu.indmenupai\">\n <a\n (mouseenter)=\"onMouseEnter(i)\"\n (mouseleave)=\"onMouseLeave()\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\n pRipple\n pStyleClass=\"@next\"\n enterClass=\"hidden\"\n enterActiveClass=\"slidedown\"\n leaveToClass=\"hidden\"\n leaveActiveClass=\"slideup\"\n class=\"menu-option flex align-items-center {{!expandMenu ? 'justify-content-center' : 'justify-content-between'}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\"\n [tooltipPosition]=\"'right'\"\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\n (click)=\"!expandMenu ? expandMenu = !expandMenu : ''\">\n <div class=\"flex flex-row align-items-center\">\n\n <i\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color\"\n *ngIf=\"menu.icone\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\">\n {{ menu.icone }}\n </i>\n <span\n class=\"text-base text-blue-900 font-medium\"\n *ngIf=\"expandMenu\">{{ menu.descricaomenu }}</span>\n </div>\n <i\n class=\"pi pi-chevron-down text-blue-900 mr-1 icon-hover-color\"\n *ngIf=\"expandMenu\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"></i>\n </a>\n\n <!-- filhos -->\n <div\n class=\"list-none py-0 pl-3 pr-0 m-0 hidden overflow-y-hidden transition-all transition-duration-400 transition-ease-in-out\">\n <li *ngFor=\"\n let filho of retornarMenuFilhos(menu.idaplicativo, menu.idmenu); let iFilho = index\n \">\n <a\n (mouseenter)=\"onMouseFilhoEnter(filho.idmenu)\"\n (mouseleave)=\"onMouseLeave()\"\n [ngClass]=\"{'hover-color': mouseOverFilhoIndex === filho.idmenu}\"\n *ngIf=\"expandMenu\"\n (click)=\"callRoute(filho.link)\"\n pRipple\n class=\"{{verificarPaginaSelecionada(filho.link) ? 'bg-green-600' : ''}} menu-option flex align-items-center no-underline cursor-pointer border-round text-700 hover:bg-green-600 transition-duration-150 transition-colors p-ripple p-2\">\n <i\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color\"\n *ngIf=\"filho.icone\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\">\n {{ filho.icone }}\n </i>\n <span\n class=\"text-base text-blue-900 ml-4 {{verificarPaginaSelecionada(filho.link) ? 'text-white' : ''}}\"\n *ngIf=\"expandMenu\">{{ filho.descricaomenu }}</span>\n </a>\n </li>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </p-sidebar>\n\n <div\n class=\"w-auto h-screen page-content overflow-y-hidden\"\n id=\"page-content\">\n\n <div class=\"flex flex-row align-items-center justify-content-between m-3\">\n <div>\n <p class=\"text-xl font-semibold text-blue-900 breadcrumb-title\">{{breadCrumbItems[breadCrumbItems.length - 1]?.label}}</p>\n <p-breadcrumb\n *ngIf=\"widthCard > 400\"\n styleClass=\"border-none p-0 flex align-items-center h-2rem !important;\"\n [model]=\"breadCrumbItems\"\n [style]=\"{backgroundColor: '#d4d3d3'}\"\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"></p-breadcrumb>\n </div>\n\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\n\n <p-button\n styleClass=\"w-2rem h-2rem text-blue-900 hover:bg-green-600 hover:text-white\"\n icon=\"pi pi-th-large\"\n [rounded]=\"true\"\n [text]=\"true\"\n (click)=\"sistemasPanel.toggle($event)\"\n [pTooltip]=\"'Sistemas'\"\n [tooltipPosition]=\"'left'\"></p-button>\n\n <p-button\n styleClass=\"w-2rem h-2rem text-blue-900 hover:bg-green-600 hover:text-white\"\n icon=\"pi pi-user\"\n [rounded]=\"true\"\n [text]=\"true\"\n [pTooltip]=\"'Menu do Usu\u00E1rio'\"\n [tooltipPosition]=\"'left'\"\n (click)=\"meusDadosPanel.toggle($event)\"></p-button>\n\n </div>\n </div>\n\n <p-card\n class=\"card-container\"\n styleClass=\"m-3 border-noround overflow-y-auto card-container\"\n [style]=\"{height: heigthCard - ajustarHeigthCard() + 'px'}\">\n <div class=\"card-container w-full\" [style]=\"{width: widthCard + 'px'}\">\n <ng-content></ng-content>\n </div>\n </p-card>\n\n </div>\n\n <p-overlayPanel\n #sistemasPanel\n [showTransitionOptions]=\"'350ms ease-out'\"\n [hideTransitionOptions]=\"'250ms ease-in'\">\n <ng-template pTemplate=\"container\">\n <p class=\"title-style mt-3\">Sistemas</p>\n <div\n class=\"flex flex-row flex-wrap gap-2 align-items-center justify-content-center mt-5 mb-3\"\n style=\"width: 250px; height: 100%;\">\n <button\n *ngFor=\"let aplicativo of aplicativos\"\n pButton\n pRipple\n class=\"btn-sistema-2 btn-sistema hover-btn-cor-padrao remove-focus h-4rem w-4rem\"\n (click)=\"definirMenusPorSistema(aplicativo.idaplicativo)\"\n [pTooltip]=\"aplicativo?.descricaoaplicativo\"\n [tooltipPosition]=\"'left'\">\n {{ aplicativo.nomeaplicativo.charAt(0).toUpperCase() }}\n </button>\n </div>\n </ng-template>\n </p-overlayPanel>\n\n <p-overlayPanel\n #meusDadosPanel\n [showTransitionOptions]=\"'350ms ease-out'\"\n [hideTransitionOptions]=\"'250ms ease-in'\">\n\n <ng-template pTemplate=\"container\">\n\n <p class=\"title-style mt-3\">Ol\u00E1, {{nomeUsuario ?\n nomeUsuario.split(' ')[0] : 'Usu\u00E1rio'}} !</p>\n <div class=\"mt-5 mb-3\">\n\n </div>\n\n <p-button\n icon=\"pi pi-lock\"\n label=\"Ger\u00EAnciar KeevoPass\"\n (onClick)=\"gerenciarKeePass($event)\"\n styleClass=\"border-noround w-full text-blue-900\"\n [text]=\"true\"\n [disabled]=\"true\"></p-button>\n <p-button\n icon=\"pi pi-sign-out\"\n label=\"Sair\"\n (onClick)=\"sair($event)\"\n styleClass=\"border-noround w-full text-blue-900\"\n [text]=\"true\"></p-button>\n </ng-template>\n\n </p-overlayPanel>", styles: [".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:1em;display:inline-block;width:1em;height:1em;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}::ng-deep .p-button:focus{box-shadow:none;-webkit-box-shadow:none;-moz-box-shadow:none}::ng-deep .p-overlaypanel .p-overlaypanel-content{padding:0}::ng-deep .hover-btn-cor-padrao.p-button:enabled:hover{background:#0c3e66;border-color:#002542}.p-button.p-button-icon-only.p-button-rounded{background:#0c3e66;border-color:#002542}::ng-deep .remove-focus:focus{border:none}::ng-deep .p-sidebar .p-sidebar-content{padding:0}::ng-deep .sidebar-header-sistema.p-sidebar .p-sidebar-header{padding-top:.5rem;padding-right:0;padding-bottom:0;padding-left:0;display:block}.btn-sistema{display:flex;align-items:center;justify-content:center;background-color:#0c3e66;font-size:20px}::ng-deep .p-sidebar .p-sidebar-header{padding:0rem!important}::ng-deep body{margin:0!important}::ng-deep .p-breadcrumb ul li.p-breadcrumb-chevron{position:relative;top:3px;color:#0c3e66!important}.page-content{background:linear-gradient(to bottom,#d4d3d3 16%,#fff 19%)}*{margin:0}p .item-menu{color:#0c3e66;font-family:Inter var,Roboto,Arial,Helvetica,sans-serif!important}span{font-size:.9rem!important}.breadcrumb-title{font-size:1rem!important;font-family:Inter var,Roboto,Arial,Helvetica,sans-serif!important}::ng-deep .card-container{overflow-x:hidden}::ng-deep .card-container::-webkit-scrollbar{width:6px}::ng-deep .card-container::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .card-container::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .card-container:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .card-container::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.title-style{position:relative;top:10px;margin-left:20px;font-size:25px;color:#002542;border-bottom:2px solid green;font-weight:600;display:inline}::ng-deep p-sidebar .p-sidebar-content{overflow-y:hidden}::ng-deep p-dialog .p-dialog-content{overflow-y:unset}.icon-menu{color:#002542;display:flex;justify-content:center;align-items:center}::ng-deep .padding-style{padding:15px!important}::ng-deep .menu-option{padding:15px 5px!important}::ng-deep .p-breadcrumb .p-breadcrumb-list .p-menuitem-text{color:#183462!important;opacity:.95;font-weight:500;font-size:.8rem!important}::ng-deep .p-breadcrumb .p-breadcrumb-list .p-menuitem-text:hover{opacity:.7}.pl-3{padding-left:0rem!important}::ng-deep svg.p-icon{width:.7rem;height:1rem}.hover-color .text-base,.hover-color .icon-hover-color{color:#fff!important}::ng-deep .p-card .p-card-body{padding:0rem!important}::ng-deep .p-card .p-card-content{padding:0rem!important}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i4.Breadcrumb, selector: "p-breadcrumb", inputs: ["model", "style", "styleClass", "home", "homeAriaLabel"], outputs: ["onItemClick"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i6.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i6.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "size", "style", "styleClass", "badgeClass", "ariaLabel"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i7.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }, { kind: "component", type: i8.Divider, selector: "p-divider", inputs: ["style", "styleClass", "layout", "type", "align"] }, { kind: "component", type: i9.OverlayPanel, selector: "p-overlayPanel", inputs: ["dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i10.Ripple, selector: "[pRipple]" }, { kind: "component", type: i11.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i12.StyleClass, selector: "[pStyleClass]", inputs: ["pStyleClass", "enterClass", "enterActiveClass", "enterToClass", "leaveClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass", "hideOnEscape"] }, { kind: "pipe", type: i13.CpfCnpjPipe, name: "cpfCnpj" }] }); }
151
- }
152
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: KvMenuComponent, decorators: [{
153
- type: Component,
154
- args: [{ selector: 'kv-menu', template: "<div class=\"flex flex-row overflow-y-hidden w- full-container\">\n\n <div [style]=\"{minWidth: expandMenu ? '300px' : '60px'}\"></div>\n\n <p-sidebar\n #sidebarRef\n [visible]=\"true\"\n [showCloseIcon]=\"false\"\n [modal]=\"false\"\n [style]=\"{width: expandMenu ? '300px' : '60px'}\">\n <ng-template pTemplate=\"headless\">\n <div class=\"flex flex-column mx-1\">\n <div\n class=\"flex flex-column gap-2 justify-content-between flex-shrink-0 mx-2\">\n <div\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}} py-3\">\n <img\n *ngIf=\"expandMenu\"\n alt=\"Card\"\n [src]=\"logoImage\"\n width=\"150\" />\n\n <button\n pButton\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\n (click)=\"toggleMenu()\"\n [pTooltip]=\"expandMenu ? 'Ocutar Menu' : 'Expandir Menu'\"\n [tooltipPosition]=\"'right'\">\n <i class=\"material-symbols-outlined\">\n menu\n </i>\n </button>\n </div>\n\n <div\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}}\">\n <div\n class=\"flex flex-column cursor-pointer\"\n *ngIf=\"expandMenu\"\n (click)=\"trocarLicenca()\">\n <span\n class=\"text-sm font-semibold mr-2\"\n [pTooltip]=\"this.licencaSelecionada.nome\"\n [tooltipPosition]=\"'right'\">\n {{mascaraNomeLicenca(this.licencaSelecionada.nome)}}\n </span>\n <span class=\"text-sm mt-1\">{{this.licencaSelecionada.cpfcnpj |\n cpfCnpj }}</span>\n </div>\n\n <button\n pButton\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\n (click)=\"trocarLicenca()\"\n [pTooltip]=\"'Alterar workspace'\"\n [tooltipPosition]=\"'right'\">\n <i class=\"material-symbols-outlined\">\n sync_alt\n </i>\n </button>\n\n </div>\n <p-divider type=\"solid\"></p-divider>\n </div>\n\n <div\n class=\"list-none m-0 card-container {{expandMenu ? 'mx-1' : ''}}\"\n [style.max-height]=\"(heigthCard - 220) + 'px'\"\n style=\"overflow-y: auto;\">\n <!-- menus -->\n <li *ngFor=\"let menu of menus; let i = index\">\n <!-- menu que n\u00E3o tem filho -->\n <a\n (mouseenter)=\"onMouseEnter(i)\"\n (mouseleave)=\"onMouseLeave()\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\n (click)=\"callRoute(menu.link)\"\n *ngIf=\"!menu.indmenupai && (!menu.idmenupai || menu.idmenupai == 0)\"\n pRipple\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\n [tooltipPosition]=\"'right'\"\n class=\"{{verificarPaginaSelecionada(menu.link) ? 'bg-green-600' : ''}} menu-option flex align-items-center no-underline {{!expandMenu ? 'justify-content-center' : ''}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\">\n\n <i\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color {{verificarPaginaSelecionada(menu.link) ? 'text-white' : ''}}\"\n *ngIf=\"menu.icone\">\n {{ menu.icone }}\n </i>\n <span\n class=\"text-base text-blue-900 font-medium {{verificarPaginaSelecionada(menu.link) ? 'text-white' : ''}}\"\n *ngIf=\"expandMenu\">{{ menu.descricaomenu }}</span>\n </a>\n <!-- menu com filho -->\n <div *ngIf=\"menu.indmenupai\">\n <a\n (mouseenter)=\"onMouseEnter(i)\"\n (mouseleave)=\"onMouseLeave()\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\n pRipple\n pStyleClass=\"@next\"\n enterClass=\"hidden\"\n enterActiveClass=\"slidedown\"\n leaveToClass=\"hidden\"\n leaveActiveClass=\"slideup\"\n class=\"menu-option flex align-items-center {{!expandMenu ? 'justify-content-center' : 'justify-content-between'}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\"\n [tooltipPosition]=\"'right'\"\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\n (click)=\"!expandMenu ? expandMenu = !expandMenu : ''\">\n <div class=\"flex flex-row align-items-center\">\n\n <i\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color\"\n *ngIf=\"menu.icone\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\">\n {{ menu.icone }}\n </i>\n <span\n class=\"text-base text-blue-900 font-medium\"\n *ngIf=\"expandMenu\">{{ menu.descricaomenu }}</span>\n </div>\n <i\n class=\"pi pi-chevron-down text-blue-900 mr-1 icon-hover-color\"\n *ngIf=\"expandMenu\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"></i>\n </a>\n\n <!-- filhos -->\n <div\n class=\"list-none py-0 pl-3 pr-0 m-0 hidden overflow-y-hidden transition-all transition-duration-400 transition-ease-in-out\">\n <li *ngFor=\"\n let filho of retornarMenuFilhos(menu.idaplicativo, menu.idmenu); let iFilho = index\n \">\n <a\n (mouseenter)=\"onMouseFilhoEnter(filho.idmenu)\"\n (mouseleave)=\"onMouseLeave()\"\n [ngClass]=\"{'hover-color': mouseOverFilhoIndex === filho.idmenu}\"\n *ngIf=\"expandMenu\"\n (click)=\"callRoute(filho.link)\"\n pRipple\n class=\"{{verificarPaginaSelecionada(filho.link) ? 'bg-green-600' : ''}} menu-option flex align-items-center no-underline cursor-pointer border-round text-700 hover:bg-green-600 transition-duration-150 transition-colors p-ripple p-2\">\n <i\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color\"\n *ngIf=\"filho.icone\"\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\">\n {{ filho.icone }}\n </i>\n <span\n class=\"text-base text-blue-900 ml-4 {{verificarPaginaSelecionada(filho.link) ? 'text-white' : ''}}\"\n *ngIf=\"expandMenu\">{{ filho.descricaomenu }}</span>\n </a>\n </li>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </p-sidebar>\n\n <div\n class=\"w-auto h-screen page-content overflow-y-hidden\"\n id=\"page-content\">\n\n <div class=\"flex flex-row align-items-center justify-content-between m-3\">\n <div>\n <p class=\"text-xl font-semibold text-blue-900 breadcrumb-title\">{{breadCrumbItems[breadCrumbItems.length - 1]?.label}}</p>\n <p-breadcrumb\n *ngIf=\"widthCard > 400\"\n styleClass=\"border-none p-0 flex align-items-center h-2rem !important;\"\n [model]=\"breadCrumbItems\"\n [style]=\"{backgroundColor: '#d4d3d3'}\"\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"></p-breadcrumb>\n </div>\n\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\n\n <p-button\n styleClass=\"w-2rem h-2rem text-blue-900 hover:bg-green-600 hover:text-white\"\n icon=\"pi pi-th-large\"\n [rounded]=\"true\"\n [text]=\"true\"\n (click)=\"sistemasPanel.toggle($event)\"\n [pTooltip]=\"'Sistemas'\"\n [tooltipPosition]=\"'left'\"></p-button>\n\n <p-button\n styleClass=\"w-2rem h-2rem text-blue-900 hover:bg-green-600 hover:text-white\"\n icon=\"pi pi-user\"\n [rounded]=\"true\"\n [text]=\"true\"\n [pTooltip]=\"'Menu do Usu\u00E1rio'\"\n [tooltipPosition]=\"'left'\"\n (click)=\"meusDadosPanel.toggle($event)\"></p-button>\n\n </div>\n </div>\n\n <p-card\n class=\"card-container\"\n styleClass=\"m-3 border-noround overflow-y-auto card-container\"\n [style]=\"{height: heigthCard - ajustarHeigthCard() + 'px'}\">\n <div class=\"card-container w-full\" [style]=\"{width: widthCard + 'px'}\">\n <ng-content></ng-content>\n </div>\n </p-card>\n\n </div>\n\n <p-overlayPanel\n #sistemasPanel\n [showTransitionOptions]=\"'350ms ease-out'\"\n [hideTransitionOptions]=\"'250ms ease-in'\">\n <ng-template pTemplate=\"container\">\n <p class=\"title-style mt-3\">Sistemas</p>\n <div\n class=\"flex flex-row flex-wrap gap-2 align-items-center justify-content-center mt-5 mb-3\"\n style=\"width: 250px; height: 100%;\">\n <button\n *ngFor=\"let aplicativo of aplicativos\"\n pButton\n pRipple\n class=\"btn-sistema-2 btn-sistema hover-btn-cor-padrao remove-focus h-4rem w-4rem\"\n (click)=\"definirMenusPorSistema(aplicativo.idaplicativo)\"\n [pTooltip]=\"aplicativo?.descricaoaplicativo\"\n [tooltipPosition]=\"'left'\">\n {{ aplicativo.nomeaplicativo.charAt(0).toUpperCase() }}\n </button>\n </div>\n </ng-template>\n </p-overlayPanel>\n\n <p-overlayPanel\n #meusDadosPanel\n [showTransitionOptions]=\"'350ms ease-out'\"\n [hideTransitionOptions]=\"'250ms ease-in'\">\n\n <ng-template pTemplate=\"container\">\n\n <p class=\"title-style mt-3\">Ol\u00E1, {{nomeUsuario ?\n nomeUsuario.split(' ')[0] : 'Usu\u00E1rio'}} !</p>\n <div class=\"mt-5 mb-3\">\n\n </div>\n\n <p-button\n icon=\"pi pi-lock\"\n label=\"Ger\u00EAnciar KeevoPass\"\n (onClick)=\"gerenciarKeePass($event)\"\n styleClass=\"border-noround w-full text-blue-900\"\n [text]=\"true\"\n [disabled]=\"true\"></p-button>\n <p-button\n icon=\"pi pi-sign-out\"\n label=\"Sair\"\n (onClick)=\"sair($event)\"\n styleClass=\"border-noround w-full text-blue-900\"\n [text]=\"true\"></p-button>\n </ng-template>\n\n </p-overlayPanel>", styles: [".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:1em;display:inline-block;width:1em;height:1em;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}::ng-deep .p-button:focus{box-shadow:none;-webkit-box-shadow:none;-moz-box-shadow:none}::ng-deep .p-overlaypanel .p-overlaypanel-content{padding:0}::ng-deep .hover-btn-cor-padrao.p-button:enabled:hover{background:#0c3e66;border-color:#002542}.p-button.p-button-icon-only.p-button-rounded{background:#0c3e66;border-color:#002542}::ng-deep .remove-focus:focus{border:none}::ng-deep .p-sidebar .p-sidebar-content{padding:0}::ng-deep .sidebar-header-sistema.p-sidebar .p-sidebar-header{padding-top:.5rem;padding-right:0;padding-bottom:0;padding-left:0;display:block}.btn-sistema{display:flex;align-items:center;justify-content:center;background-color:#0c3e66;font-size:20px}::ng-deep .p-sidebar .p-sidebar-header{padding:0rem!important}::ng-deep body{margin:0!important}::ng-deep .p-breadcrumb ul li.p-breadcrumb-chevron{position:relative;top:3px;color:#0c3e66!important}.page-content{background:linear-gradient(to bottom,#d4d3d3 16%,#fff 19%)}*{margin:0}p .item-menu{color:#0c3e66;font-family:Inter var,Roboto,Arial,Helvetica,sans-serif!important}span{font-size:.9rem!important}.breadcrumb-title{font-size:1rem!important;font-family:Inter var,Roboto,Arial,Helvetica,sans-serif!important}::ng-deep .card-container{overflow-x:hidden}::ng-deep .card-container::-webkit-scrollbar{width:6px}::ng-deep .card-container::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .card-container::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .card-container:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .card-container::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.title-style{position:relative;top:10px;margin-left:20px;font-size:25px;color:#002542;border-bottom:2px solid green;font-weight:600;display:inline}::ng-deep p-sidebar .p-sidebar-content{overflow-y:hidden}::ng-deep p-dialog .p-dialog-content{overflow-y:unset}.icon-menu{color:#002542;display:flex;justify-content:center;align-items:center}::ng-deep .padding-style{padding:15px!important}::ng-deep .menu-option{padding:15px 5px!important}::ng-deep .p-breadcrumb .p-breadcrumb-list .p-menuitem-text{color:#183462!important;opacity:.95;font-weight:500;font-size:.8rem!important}::ng-deep .p-breadcrumb .p-breadcrumb-list .p-menuitem-text:hover{opacity:.7}.pl-3{padding-left:0rem!important}::ng-deep svg.p-icon{width:.7rem;height:1rem}.hover-color .text-base,.hover-color .icon-hover-color{color:#fff!important}::ng-deep .p-card .p-card-body{padding:0rem!important}::ng-deep .p-card .p-card-content{padding:0rem!important}\n"] }]
155
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.Router }, { type: i1.ActivatedRoute }]; }, propDecorators: { aplicativos: [{
156
- type: Input
157
- }], breadCrumbItems: [{
158
- type: Input
159
- }], licencas: [{
160
- type: Input
161
- }], licencaSelecionada: [{
162
- type: Input
163
- }], logoImage: [{
164
- type: Input
165
- }], nomeUsuario: [{
166
- type: Input
167
- }], expandMenuEmit: [{
168
- type: Output
169
- }], gerenciarKeePassEvent: [{
170
- type: Output
171
- }], licencaChange: [{
172
- type: Output
173
- }], sairEvent: [{
174
- type: Output
175
- }], trocarLicencaEmit: [{
176
- type: Output
177
- }], meusDadosPanel: [{
178
- type: ViewChild,
179
- args: ['meusDadosPanel']
180
- }], sidebarRef: [{
181
- type: ViewChild,
182
- args: ['sidebarRef']
183
- }], sistemasPanel: [{
184
- type: ViewChild,
185
- args: ['sistemasPanel']
186
- }], onWindowResize: [{
187
- type: HostListener,
188
- args: ['window:resize', ['$event']]
189
- }] } });
190
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi1tZW51L2t2LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtbWVudS9rdi1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBZ0J2QixNQUFNLE9BQU8sZUFBZTtJQTRCMUIsWUFBb0IsR0FBc0IsRUFBWSxNQUFjLEVBQVUsS0FBcUI7UUFBL0UsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBWSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUExQjFGLGdCQUFXLEdBQXNCLEVBQUUsQ0FBQztRQUNwQyxvQkFBZSxHQUE0QyxFQUFFLENBQUM7UUFDOUQsYUFBUSxHQUF1QixFQUFFLENBQUM7UUFLakMsbUJBQWMsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMzRCwwQkFBcUIsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM5RCxrQkFBYSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3RELGNBQVMsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsRCxzQkFBaUIsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQU14RSxVQUFLLEdBQWdCLEVBQUUsQ0FBQztRQUV4QixlQUFVLEdBQVksSUFBSSxDQUFDO1FBSTNCLHlCQUFvQixHQUFZLEtBQUssQ0FBQztJQUdpRSxDQUFDO0lBRXhH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QUFVLENBQUM7UUFDbkMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO0lBQ3hCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxJQUFTO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7K0dBL0pVLGVBQWU7bUdBQWYsZUFBZSxneUJDL0I1Qixxa1dBa1FxQjs7NEZEbk9SLGVBQWU7a0JBTDNCLFNBQVM7K0JBQ0UsU0FBUzswSkFNVixXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBRXNCLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUNGLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFDSyxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBb0gxQixjQUFjO3NCQURiLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQge1xuICBBY3RpdmF0ZWRSb3V0ZSxcbiAgUm91dGVyXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgQXBsaWNhdGl2b01vZGVsLFxuICBNYXN0ZXJDb21ib01vZGVsLFxuICBNZW51TW9kZWxcbn0gZnJvbSAna2Vldm8tYXBpLXNlcnZpY2VzLWtlZXZvY2VudGVyJztcblxuaW1wb3J0IHsgT3ZlcmxheVBhbmVsIH0gZnJvbSAncHJpbWVuZy9vdmVybGF5cGFuZWwnO1xuaW1wb3J0IHsgU2lkZWJhciB9IGZyb20gJ3ByaW1lbmcvc2lkZWJhcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2t2LW1lbnUnLFxuICB0ZW1wbGF0ZVVybDogJy4va3YtbWVudS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2t2LW1lbnUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgS3ZNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKSBhcGxpY2F0aXZvczogQXBsaWNhdGl2b01vZGVsW10gPSBbXTtcbiAgQElucHV0KCkgYnJlYWRDcnVtYkl0ZW1zOiB7IGxhYmVsOiBzdHJpbmcsIHJvdXRlckxpbms6IHN0cmluZyB9W10gPSBbXTtcbiAgQElucHV0KCkgbGljZW5jYXM6IE1hc3RlckNvbWJvTW9kZWxbXSA9IFtdO1xuICBASW5wdXQoKSBsaWNlbmNhU2VsZWNpb25hZGEhOiBNYXN0ZXJDb21ib01vZGVsO1xuICBASW5wdXQoKSBsb2dvSW1hZ2UhOiBhbnk7XG4gIEBJbnB1dCgpIG5vbWVVc3VhcmlvITogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKSBleHBhbmRNZW51RW1pdDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZ2VyZW5jaWFyS2VlUGFzc0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGxpY2VuY2FDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2FpckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHRyb2NhckxpY2VuY2FFbWl0OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQFZpZXdDaGlsZCgnbWV1c0RhZG9zUGFuZWwnKSBtZXVzRGFkb3NQYW5lbCE6IE92ZXJsYXlQYW5lbDtcbiAgQFZpZXdDaGlsZCgnc2lkZWJhclJlZicpIHNpZGViYXJSZWYhOiBTaWRlYmFyO1xuICBAVmlld0NoaWxkKCdzaXN0ZW1hc1BhbmVsJykgc2lzdGVtYXNQYW5lbCE6IE92ZXJsYXlQYW5lbDtcblxuICBtZW51czogTWVudU1vZGVsW10gPSBbXTtcblxuICBleHBhbmRNZW51OiBib29sZWFuID0gdHJ1ZTtcbiAgaGVpZ3RoQ2FyZCE6IG51bWJlcjtcbiAgbW91c2VPdmVyRmlsaG9JbmRleDogYW55O1xuICBtb3VzZU92ZXJJbmRleDogYW55O1xuICB2aXNpYmxlRGlhbG9nTGljZW5jYTogYm9vbGVhbiA9IGZhbHNlO1xuICB3aWR0aENhcmQhOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7IH1cblxuICBhanVzdGFySGVpZ3RoQ2FyZCgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLndpZHRoQ2FyZCA+IDQwMCkge1xuICAgICAgaWYgKHRoaXMuYnJlYWRDcnVtYkl0ZW1zLmxlbmd0aCA+IDApIHJldHVybiAxMDVcbiAgICAgIGVsc2UgcmV0dXJuIDg1XG4gICAgfSBlbHNlIHJldHVybiA4M1xuICB9XG5cbiAgY2FsbFJvdXRlKGU6IGFueSwgZXhwYW5kPzogYm9vbGVhbikge1xuICAgIGlmICghZXhwYW5kKVxuICAgICAgIXRoaXMuZXhwYW5kTWVudSA/IHRoaXMuZXhwYW5kTWVudSA9ICF0aGlzLmV4cGFuZE1lbnUgOiAnJztcblxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoZSlcbiAgfVxuXG4gIGNsb3NlQ2FsbGJhY2soZTogRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNpZGViYXJSZWYuY2xvc2UoZSk7XG4gIH1cblxuICBjb25maWd1cmFyTGljZW5jYXMoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmRlZmluaXJNZW51c1BvclNpc3RlbWEodGhpcy5hcGxpY2F0aXZvc1swXT8uaWRhcGxpY2F0aXZvKVxuICAgIH0sIDEpO1xuICB9XG5cbiAgZGVmaW5pck1lbnVzUG9yU2lzdGVtYShpZGFwbGljYXRpdm86IG51bWJlcikge1xuICAgIHRoaXMubWVudXMgPSB0aGlzLmFwbGljYXRpdm9zLmZpbmQoKHgpID0+IHguaWRhcGxpY2F0aXZvID09IGlkYXBsaWNhdGl2byk/Lm1lbnVzIHx8IFtdO1xuXG4gICAgaWYgKHRoaXMucm91dGVyLnVybCAmJiB0aGlzLm1lbnVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0aGlzLnJvdXRlci51cmwgPT09ICcvJykge1xuICAgICAgICB0aGlzLm5hdmlnYXRlVG9GaXJzdE1lbnUoKVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IG1lbnVTZWxlY2lvbmFkbyA9IHRoaXMubWVudXMuZmluZCgobWVudTogYW55KSA9PiBtZW51LmxpbmsuaW5jbHVkZXModGhpcy5yb3V0ZXIudXJsLnNsaWNlKDEpKSk7XG4gICAgICAgIGlmIChtZW51U2VsZWNpb25hZG8pIHtcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9NZW51KG1lbnVTZWxlY2lvbmFkbyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNpc3RlbWFzUGFuZWwuaGlkZSgpO1xuICB9XG5cbiAgZXhwYW5kTWVudUV2ZW50KCkge1xuICAgIHRoaXMuZXhwYW5kTWVudUVtaXQuZW1pdCh0aGlzLmV4cGFuZE1lbnUpO1xuICB9XG5cbiAgZ2VyZW5jaWFyS2VlUGFzcyhldmVudDogYW55KSB7XG4gICAgdGhpcy5zaXN0ZW1hc1BhbmVsLmhpZGUoKTtcbiAgICB0aGlzLmdlcmVuY2lhcktlZVBhc3NFdmVudC5lbWl0KGV2ZW50KVxuICB9XG5cbiAgbWFzY2FyYU5vbWVMaWNlbmNhKG5vbWVMaWNlbmNhOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmIChub21lTGljZW5jYSkge1xuICAgICAgaWYgKG5vbWVMaWNlbmNhLmxlbmd0aCA+IDIzKVxuICAgICAgICByZXR1cm4gbm9tZUxpY2VuY2Euc3Vic3RyaW5nKDAsIDIzKSArICcuLi4nO1xuICAgICAgZWxzZSByZXR1cm4gbm9tZUxpY2VuY2E7XG4gICAgfSBlbHNlIHJldHVybiAnJztcbiAgfVxuXG4gIG5hdmlnYXRlVG9GaXJzdE1lbnUoKTogdm9pZCB7XG4gICAgY29uc3QgZmlyc3RNZW51ID0gdGhpcy5tZW51c1swXTtcbiAgICBpZiAoZmlyc3RNZW51LmluZG1lbnVwYWkpIHtcbiAgICAgIGNvbnN0IGZpbGhvcyA9IHRoaXMucmV0b3JuYXJNZW51RmlsaG9zKGZpcnN0TWVudS5pZGFwbGljYXRpdm8sIGZpcnN0TWVudS5pZG1lbnUpO1xuICAgICAgaWYgKGZpbGhvcykge1xuICAgICAgICB0aGlzLmNhbGxSb3V0ZShmaWxob3NbMF0ubGluaywgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FsbFJvdXRlKGZpcnN0TWVudS5saW5rLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBuYXZpZ2F0ZVRvTWVudShtZW51OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAobWVudS5tZW51cGFpKSB7XG4gICAgICBjb25zdCBmaWxob3MgPSB0aGlzLnJldG9ybmFyTWVudUZpbGhvcyhtZW51Lmlkc2lzdGVtYSwgbWVudS5pZG1lbnUpO1xuICAgICAgaWYgKGZpbGhvcykge1xuICAgICAgICB0aGlzLmNhbGxSb3V0ZShmaWxob3NbMF0ubGluaywgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FsbFJvdXRlKG1lbnUubGluaywgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWd1cmFyTGljZW5jYXMoKTtcbiAgICB0aGlzLmhlaWd0aENhcmQgPSBOdW1iZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2UtY29udGVudCcpPy5vZmZzZXRIZWlnaHQpO1xuICAgIHRoaXMud2lkdGhDYXJkID0gTnVtYmVyKHdpbmRvdy5pbm5lcldpZHRoKSAtICh0aGlzLmV4cGFuZE1lbnUgPyAzMzMgOiA5Myk7XG4gICAgdGhpcy5leHBhbmRNZW51RXZlbnQoKVxuICB9XG5cbiAgb25Nb3VzZUVudGVyKGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLm1vdXNlT3ZlckluZGV4ID0gaW5kZXg7XG4gIH1cblxuICBvbk1vdXNlRmlsaG9FbnRlcihpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5tb3VzZU92ZXJGaWxob0luZGV4ID0gaW5kZXg7XG4gIH1cblxuICBvbk1vdXNlTGVhdmUoKSB7XG4gICAgdGhpcy5tb3VzZU92ZXJJbmRleCA9IG51bGw7XG4gICAgdGhpcy5tb3VzZU92ZXJGaWxob0luZGV4ID0gbnVsbDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICBvbldpbmRvd1Jlc2l6ZSgpIHtcbiAgICB0aGlzLmhlaWd0aENhcmQgPSBOdW1iZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2UtY29udGVudCcpPy5vZmZzZXRIZWlnaHQpO1xuICAgIHRoaXMud2lkdGhDYXJkID0gTnVtYmVyKHdpbmRvdy5pbm5lcldpZHRoKSAtICh0aGlzLmV4cGFuZE1lbnUgPyAzMzMgOiA5Myk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcmV0b3JuYXJNZW51RmlsaG9zKGlkYXBsaWNhdGl2bzogbnVtYmVyLCBpZG1lbnU6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmFwbGljYXRpdm9zLmZpbmQoKHgpID0+IHguaWRhcGxpY2F0aXZvID09IGlkYXBsaWNhdGl2byk/Lm1lbnVzLmZpbHRlcigoeCkgPT4geC5pZG1lbnVwYWkgPT0gaWRtZW51KTtcbiAgfVxuXG4gIHNhaXIoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuc2lzdGVtYXNQYW5lbC5oaWRlKCk7XG4gICAgdGhpcy5zYWlyRXZlbnQuZW1pdChldmVudClcbiAgfVxuXG4gIHRvZ2dsZU1lbnUoKSB7XG4gICAgdGhpcy5leHBhbmRNZW51ID0gIXRoaXMuZXhwYW5kTWVudTtcbiAgICB0aGlzLmV4cGFuZE1lbnVFdmVudCgpXG4gIH1cblxuICB0cm9jYXJMaWNlbmNhKCkge1xuICAgIHRoaXMudHJvY2FyTGljZW5jYUVtaXQuZW1pdCgpO1xuICB9XG5cbiAgdmVyaWZpY2FyUGFnaW5hU2VsZWNpb25hZGEobGluazogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVyLnVybC5pbmNsdWRlcyhsaW5rKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgb3ZlcmZsb3cteS1oaWRkZW4gdy0gZnVsbC1jb250YWluZXJcIj5cblxuICA8ZGl2IFtzdHlsZV09XCJ7bWluV2lkdGg6IGV4cGFuZE1lbnUgPyAnMzAwcHgnIDogJzYwcHgnfVwiPjwvZGl2PlxuXG4gIDxwLXNpZGViYXJcbiAgICAjc2lkZWJhclJlZlxuICAgIFt2aXNpYmxlXT1cInRydWVcIlxuICAgIFtzaG93Q2xvc2VJY29uXT1cImZhbHNlXCJcbiAgICBbbW9kYWxdPVwiZmFsc2VcIlxuICAgIFtzdHlsZV09XCJ7d2lkdGg6IGV4cGFuZE1lbnUgPyAnMzAwcHgnIDogJzYwcHgnfVwiPlxuICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkbGVzc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gbXgtMVwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGdhcC0yIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGZsZXgtc2hyaW5rLTAgbXgtMlwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIge3tleHBhbmRNZW51ID8gJ2p1c3RpZnktY29udGVudC1iZXR3ZWVuJyA6ICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ319IHB5LTNcIj5cbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgKm5nSWY9XCJleHBhbmRNZW51XCJcbiAgICAgICAgICAgICAgYWx0PVwiQ2FyZFwiXG4gICAgICAgICAgICAgIFtzcmNdPVwibG9nb0ltYWdlXCJcbiAgICAgICAgICAgICAgd2lkdGg9XCIxNTBcIiAvPlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgcGFkZGluZy1zdHlsZSBoLTJyZW0gdy0ycmVtIGhvdmVyOmJnLWdyZWVuLTYwMCBob3Zlcjp0ZXh0LXdoaXRlIGljb24tbWVudVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVNZW51KClcIlxuICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiZXhwYW5kTWVudSA/ICdPY3V0YXIgTWVudScgOiAnRXhwYW5kaXIgTWVudSdcIlxuICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidyaWdodCdcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+XG4gICAgICAgICAgICAgICAgbWVudVxuICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIge3tleHBhbmRNZW51ID8gJ2p1c3RpZnktY29udGVudC1iZXR3ZWVuJyA6ICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ319XCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiZXhwYW5kTWVudVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0cm9jYXJMaWNlbmNhKClcIj5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtc20gZm9udC1zZW1pYm9sZCBtci0yXCJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwidGhpcy5saWNlbmNhU2VsZWNpb25hZGEubm9tZVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCIncmlnaHQnXCI+XG4gICAgICAgICAgICAgICAge3ttYXNjYXJhTm9tZUxpY2VuY2EodGhpcy5saWNlbmNhU2VsZWNpb25hZGEubm9tZSl9fVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSBtdC0xXCI+e3t0aGlzLmxpY2VuY2FTZWxlY2lvbmFkYS5jcGZjbnBqIHxcbiAgICAgICAgICAgICAgICBjcGZDbnBqIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBwYWRkaW5nLXN0eWxlIGgtMnJlbSB3LTJyZW0gaG92ZXI6YmctZ3JlZW4tNjAwIGhvdmVyOnRleHQtd2hpdGUgaWNvbi1tZW51XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRyb2NhckxpY2VuY2EoKVwiXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWx0ZXJhciB3b3Jrc3BhY2UnXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCIncmlnaHQnXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPlxuICAgICAgICAgICAgICAgIHN5bmNfYWx0XG4gICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHAtZGl2aWRlciB0eXBlPVwic29saWRcIj48L3AtZGl2aWRlcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwibGlzdC1ub25lIG0tMCAgY2FyZC1jb250YWluZXIge3tleHBhbmRNZW51ID8gJ214LTEnIDogJyd9fVwiXG4gICAgICAgICAgW3N0eWxlLm1heC1oZWlnaHRdPVwiKGhlaWd0aENhcmQgLSAyMjApICsgJ3B4J1wiXG4gICAgICAgICAgc3R5bGU9XCJvdmVyZmxvdy15OiBhdXRvO1wiPlxuICAgICAgICAgIDwhLS0gbWVudXMgLS0+XG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBtZW51IG9mIG1lbnVzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICA8IS0tIG1lbnUgcXVlIG7Do28gdGVtIGZpbGhvIC0tPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwib25Nb3VzZUVudGVyKGkpXCJcbiAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25Nb3VzZUxlYXZlKClcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2hvdmVyLWNvbG9yJzogbW91c2VPdmVySW5kZXggPT09IGl9XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbGxSb3V0ZShtZW51LmxpbmspXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhbWVudS5pbmRtZW51cGFpICYmICghbWVudS5pZG1lbnVwYWkgfHwgbWVudS5pZG1lbnVwYWkgPT0gMClcIlxuICAgICAgICAgICAgICBwUmlwcGxlXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCIhZXhwYW5kTWVudSA/IG1lbnUuZGVzY3JpY2FvbWVudSA6ICcnXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCIncmlnaHQnXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ7e3ZlcmlmaWNhclBhZ2luYVNlbGVjaW9uYWRhKG1lbnUubGluaykgPyAnYmctZ3JlZW4tNjAwJyA6ICcnfX0gbWVudS1vcHRpb24gZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbm8tdW5kZXJsaW5lIHt7IWV4cGFuZE1lbnUgPyAnanVzdGlmeS1jb250ZW50LWNlbnRlcicgOiAnJ319IGN1cnNvci1wb2ludGVyIGJvcmRlci1yb3VuZCB0ZXh0LTcwMCBob3ZlcjpiZy1ncmVlbi02MDAgaG92ZXI6dGV4dC13aGl0ZSB0cmFuc2l0aW9uLWR1cmF0aW9uLTE1MCB0cmFuc2l0aW9uLWNvbG9ycyBwLXJpcHBsZVwiPlxuXG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb24tbWVudSB7e2V4cGFuZE1lbnUgPyAnbWwtMSBtci0yJyA6ICcnfX0gIGljb24taG92ZXItY29sb3Ige3t2ZXJpZmljYXJQYWdpbmFTZWxlY2lvbmFkYShtZW51LmxpbmspID8gJ3RleHQtd2hpdGUnIDogJyd9fVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51Lmljb25lXCI+XG4gICAgICAgICAgICAgICAge3sgbWVudS5pY29uZSB9fVxuICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWJhc2UgdGV4dC1ibHVlLTkwMCBmb250LW1lZGl1bSB7e3ZlcmlmaWNhclBhZ2luYVNlbGVjaW9uYWRhKG1lbnUubGluaykgPyAndGV4dC13aGl0ZScgOiAnJ319XCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImV4cGFuZE1lbnVcIj57eyBtZW51LmRlc2NyaWNhb21lbnUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8IS0tIG1lbnUgY29tIGZpbGhvIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1lbnUuaW5kbWVudXBhaVwiPlxuICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIm9uTW91c2VFbnRlcihpKVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25Nb3VzZUxlYXZlKClcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaG92ZXItY29sb3InOiBtb3VzZU92ZXJJbmRleCA9PT0gaX1cIlxuICAgICAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgICAgICBwU3R5bGVDbGFzcz1cIkBuZXh0XCJcbiAgICAgICAgICAgICAgICBlbnRlckNsYXNzPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICBlbnRlckFjdGl2ZUNsYXNzPVwic2xpZGVkb3duXCJcbiAgICAgICAgICAgICAgICBsZWF2ZVRvQ2xhc3M9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgIGxlYXZlQWN0aXZlQ2xhc3M9XCJzbGlkZXVwXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1lbnUtb3B0aW9uIGZsZXggYWxpZ24taXRlbXMtY2VudGVyIHt7IWV4cGFuZE1lbnUgPyAnanVzdGlmeS1jb250ZW50LWNlbnRlcicgOiAnanVzdGlmeS1jb250ZW50LWJldHdlZW4nfX0gY3Vyc29yLXBvaW50ZXIgYm9yZGVyLXJvdW5kIHRleHQtNzAwIGhvdmVyOmJnLWdyZWVuLTYwMCBob3Zlcjp0ZXh0LXdoaXRlIHRyYW5zaXRpb24tZHVyYXRpb24tMTUwIHRyYW5zaXRpb24tY29sb3JzIHAtcmlwcGxlXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidyaWdodCdcIlxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCIhZXhwYW5kTWVudSA/IG1lbnUuZGVzY3JpY2FvbWVudSA6ICcnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiIWV4cGFuZE1lbnUgPyBleHBhbmRNZW51ID0gIWV4cGFuZE1lbnUgOiAnJ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuXG4gICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvbi1tZW51IHt7ZXhwYW5kTWVudSA/ICdtbC0xIG1yLTInIDogJyd9fSBpY29uLWhvdmVyLWNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJtZW51Lmljb25lXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydob3Zlci1jb2xvcic6IG1vdXNlT3ZlckluZGV4ID09PSBpfVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBtZW51Lmljb25lIH19XG4gICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtYmFzZSB0ZXh0LWJsdWUtOTAwIGZvbnQtbWVkaXVtXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJleHBhbmRNZW51XCI+e3sgbWVudS5kZXNjcmljYW9tZW51IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInBpIHBpLWNoZXZyb24tZG93biB0ZXh0LWJsdWUtOTAwIG1yLTEgaWNvbi1ob3Zlci1jb2xvclwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImV4cGFuZE1lbnVcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydob3Zlci1jb2xvcic6IG1vdXNlT3ZlckluZGV4ID09PSBpfVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICAgIDwhLS0gZmlsaG9zIC0tPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJsaXN0LW5vbmUgcHktMCBwbC0zIHByLTAgbS0wIGhpZGRlbiBvdmVyZmxvdy15LWhpZGRlbiB0cmFuc2l0aW9uLWFsbCB0cmFuc2l0aW9uLWR1cmF0aW9uLTQwMCB0cmFuc2l0aW9uLWVhc2UtaW4tb3V0XCI+XG4gICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICBsZXQgZmlsaG8gb2YgcmV0b3JuYXJNZW51RmlsaG9zKG1lbnUuaWRhcGxpY2F0aXZvLCBtZW51LmlkbWVudSk7ICBsZXQgaUZpbGhvID0gaW5kZXhcbiAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwib25Nb3VzZUZpbGhvRW50ZXIoZmlsaG8uaWRtZW51KVwiXG4gICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm9uTW91c2VMZWF2ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydob3Zlci1jb2xvcic6IG1vdXNlT3ZlckZpbGhvSW5kZXggPT09IGZpbGhvLmlkbWVudX1cIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImV4cGFuZE1lbnVcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FsbFJvdXRlKGZpbGhvLmxpbmspXCJcbiAgICAgICAgICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7dmVyaWZpY2FyUGFnaW5hU2VsZWNpb25hZGEoZmlsaG8ubGluaykgPyAnYmctZ3JlZW4tNjAwJyA6ICcnfX0gbWVudS1vcHRpb24gZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbm8tdW5kZXJsaW5lIGN1cnNvci1wb2ludGVyIGJvcmRlci1yb3VuZCB0ZXh0LTcwMCBob3ZlcjpiZy1ncmVlbi02MDAgdHJhbnNpdGlvbi1kdXJhdGlvbi0xNTAgdHJhbnNpdGlvbi1jb2xvcnMgcC1yaXBwbGUgcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uLW1lbnUge3tleHBhbmRNZW51ID8gJ21sLTEgbXItMicgOiAnJ319IGljb24taG92ZXItY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpbGhvLmljb25lXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydob3Zlci1jb2xvcic6IG1vdXNlT3ZlckluZGV4ID09PSBpfVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBmaWxoby5pY29uZSB9fVxuICAgICAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1iYXNlIHRleHQtYmx1ZS05MDAgbWwtNCB7e3ZlcmlmaWNhclBhZ2luYVNlbGVjaW9uYWRhKGZpbGhvLmxpbmspID8gJ3RleHQtd2hpdGUnIDogJyd9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJleHBhbmRNZW51XCI+e3sgZmlsaG8uZGVzY3JpY2FvbWVudSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9wLXNpZGViYXI+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInctYXV0byBoLXNjcmVlbiBwYWdlLWNvbnRlbnQgb3ZlcmZsb3cteS1oaWRkZW5cIlxuICAgICAgaWQ9XCJwYWdlLWNvbnRlbnRcIj5cblxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG0tM1wiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC14bCBmb250LXNlbWlib2xkIHRleHQtYmx1ZS05MDAgYnJlYWRjcnVtYi10aXRsZVwiPnt7YnJlYWRDcnVtYkl0ZW1zW2JyZWFkQ3J1bWJJdGVtcy5sZW5ndGggLSAxXT8ubGFiZWx9fTwvcD5cbiAgICAgICAgICA8cC1icmVhZGNydW1iXG4gICAgICAgICAgICAqbmdJZj1cIndpZHRoQ2FyZCA+IDQwMFwiXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwiYm9yZGVyLW5vbmUgcC0wIGZsZXggYWxpZ24taXRlbXMtY2VudGVyIGgtMnJlbSAhaW1wb3J0YW50O1wiXG4gICAgICAgICAgICBbbW9kZWxdPVwiYnJlYWRDcnVtYkl0ZW1zXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJ7YmFja2dyb3VuZENvbG9yOiAnI2Q0ZDNkMyd9XCJcbiAgICAgICAgICAgIChvbkl0ZW1DbGljayk9XCJjYWxsUm91dGUoJGV2ZW50Lml0ZW0ucm91dGVyTGluaywgdHJ1ZSlcIj48L3AtYnJlYWRjcnVtYj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctYXV0byBmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuXG4gICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwidy0ycmVtIGgtMnJlbSB0ZXh0LWJsdWUtOTAwIGhvdmVyOmJnLWdyZWVuLTYwMCBob3Zlcjp0ZXh0LXdoaXRlXCJcbiAgICAgICAgICAgIGljb249XCJwaSBwaS10aC1sYXJnZVwiXG4gICAgICAgICAgICBbcm91bmRlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNpc3RlbWFzUGFuZWwudG9nZ2xlKCRldmVudClcIlxuICAgICAgICAgICAgW3BUb29sdGlwXT1cIidTaXN0ZW1hcydcIlxuICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInbGVmdCdcIj48L3AtYnV0dG9uPlxuXG4gICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwidy0ycmVtIGgtMnJlbSB0ZXh0LWJsdWUtOTAwIGhvdmVyOmJnLWdyZWVuLTYwMCBob3Zlcjp0ZXh0LXdoaXRlXCJcbiAgICAgICAgICAgIGljb249XCJwaSBwaS11c2VyXCJcbiAgICAgICAgICAgIFtyb3VuZGVkXT1cInRydWVcIlxuICAgICAgICAgICAgW3RleHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ01lbnUgZG8gVXN1w6FyaW8nXCJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJtZXVzRGFkb3NQYW5lbC50b2dnbGUoJGV2ZW50KVwiPjwvcC1idXR0b24+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPHAtY2FyZFxuICAgICAgICBjbGFzcz1cImNhcmQtY29udGFpbmVyXCJcbiAgICAgICAgc3R5bGVDbGFzcz1cIm0tMyBib3JkZXItbm9yb3VuZCBvdmVyZmxvdy15LWF1dG8gY2FyZC1jb250YWluZXJcIlxuICAgICAgICBbc3R5bGVdPVwie2hlaWdodDogaGVpZ3RoQ2FyZCAtIGFqdXN0YXJIZWlndGhDYXJkKCkgKyAncHgnfVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1jb250YWluZXIgdy1mdWxsXCIgW3N0eWxlXT1cInt3aWR0aDogd2lkdGhDYXJkICsgJ3B4J31cIj5cbiAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9wLWNhcmQ+XG5cbiAgICA8L2Rpdj5cblxuICAgIDxwLW92ZXJsYXlQYW5lbFxuICAgICAgI3Npc3RlbWFzUGFuZWxcbiAgICAgIFtzaG93VHJhbnNpdGlvbk9wdGlvbnNdPVwiJzM1MG1zIGVhc2Utb3V0J1wiXG4gICAgICBbaGlkZVRyYW5zaXRpb25PcHRpb25zXT1cIicyNTBtcyBlYXNlLWluJ1wiPlxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRhaW5lclwiPlxuICAgICAgICA8cCBjbGFzcz1cInRpdGxlLXN0eWxlIG10LTNcIj5TaXN0ZW1hczwvcD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBmbGV4LXdyYXAgZ2FwLTIgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgbXQtNSBtYi0zXCJcbiAgICAgICAgICBzdHlsZT1cIndpZHRoOiAyNTBweDsgaGVpZ2h0OiAxMDAlO1wiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhcGxpY2F0aXZvIG9mIGFwbGljYXRpdm9zXCJcbiAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLXNpc3RlbWEtMiBidG4tc2lzdGVtYSBob3Zlci1idG4tY29yLXBhZHJhbyByZW1vdmUtZm9jdXMgaC00cmVtIHctNHJlbVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZGVmaW5pck1lbnVzUG9yU2lzdGVtYShhcGxpY2F0aXZvLmlkYXBsaWNhdGl2bylcIlxuICAgICAgICAgICAgW3BUb29sdGlwXT1cImFwbGljYXRpdm8/LmRlc2NyaWNhb2FwbGljYXRpdm9cIlxuICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInbGVmdCdcIj5cbiAgICAgICAgICAgIHt7IGFwbGljYXRpdm8ubm9tZWFwbGljYXRpdm8uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvcC1vdmVybGF5UGFuZWw+XG5cbiAgICA8cC1vdmVybGF5UGFuZWxcbiAgICAgICNtZXVzRGFkb3NQYW5lbFxuICAgICAgW3Nob3dUcmFuc2l0aW9uT3B0aW9uc109XCInMzUwbXMgZWFzZS1vdXQnXCJcbiAgICAgIFtoaWRlVHJhbnNpdGlvbk9wdGlvbnNdPVwiJzI1MG1zIGVhc2UtaW4nXCI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjb250YWluZXJcIj5cblxuICAgICAgICA8cCBjbGFzcz1cInRpdGxlLXN0eWxlIG10LTNcIj5PbMOhLCB7e25vbWVVc3VhcmlvID9cbiAgICAgICAgICBub21lVXN1YXJpby5zcGxpdCgnICcpWzBdIDogJ1VzdcOhcmlvJ319ICE8L3A+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC01IG1iLTNcIj5cblxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICBpY29uPVwicGkgcGktbG9ja1wiXG4gICAgICAgICAgbGFiZWw9XCJHZXLDqm5jaWFyIEtlZXZvUGFzc1wiXG4gICAgICAgICAgKG9uQ2xpY2spPVwiZ2VyZW5jaWFyS2VlUGFzcygkZXZlbnQpXCJcbiAgICAgICAgICBzdHlsZUNsYXNzPVwiYm9yZGVyLW5vcm91bmQgdy1mdWxsIHRleHQtYmx1ZS05MDBcIlxuICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCI+PC9wLWJ1dHRvbj5cbiAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgaWNvbj1cInBpIHBpLXNpZ24tb3V0XCJcbiAgICAgICAgICBsYWJlbD1cIlNhaXJcIlxuICAgICAgICAgIChvbkNsaWNrKT1cInNhaXIoJGV2ZW50KVwiXG4gICAgICAgICAgc3R5bGVDbGFzcz1cImJvcmRlci1ub3JvdW5kIHctZnVsbCB0ZXh0LWJsdWUtOTAwXCJcbiAgICAgICAgICBbdGV4dF09XCJ0cnVlXCI+PC9wLWJ1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8L3Atb3ZlcmxheVBhbmVsPiJdfQ==
1
+ import { Component, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/router";
4
+ import * as i2 from "@angular/common";
5
+ import * as i3 from "primeng/api";
6
+ import * as i4 from "primeng/breadcrumb";
7
+ import * as i5 from "primeng/tooltip";
8
+ import * as i6 from "primeng/button";
9
+ import * as i7 from "primeng/card";
10
+ import * as i8 from "primeng/divider";
11
+ import * as i9 from "primeng/overlaypanel";
12
+ import * as i10 from "primeng/ripple";
13
+ import * as i11 from "primeng/sidebar";
14
+ import * as i12 from "primeng/styleclass";
15
+ import * as i13 from "../../api/pipes/cpfcnpj.pipe";
16
+ export class KvMenuComponent {
17
+ constructor(cdr, router, route) {
18
+ this.cdr = cdr;
19
+ this.router = router;
20
+ this.route = route;
21
+ this.aplicativos = [];
22
+ this.breadCrumbItems = [];
23
+ this.licencas = [];
24
+ this.expandMenuEmit = new EventEmitter();
25
+ this.gerenciarKeePassEvent = new EventEmitter();
26
+ this.licencaChange = new EventEmitter();
27
+ this.sairEvent = new EventEmitter();
28
+ this.trocarLicencaEmit = new EventEmitter();
29
+ this.menus = [];
30
+ this.expandMenu = true;
31
+ this.visibleDialogLicenca = false;
32
+ }
33
+ ajustarHeigthCard() {
34
+ if (this.widthCard > 400) {
35
+ if (this.breadCrumbItems.length > 0)
36
+ return 105;
37
+ else
38
+ return 85;
39
+ }
40
+ else
41
+ return 83;
42
+ }
43
+ callRoute(e, expand) {
44
+ if (!expand)
45
+ !this.expandMenu ? this.expandMenu = !this.expandMenu : '';
46
+ this.router.navigateByUrl(e);
47
+ }
48
+ closeCallback(e) {
49
+ this.sidebarRef.close(e);
50
+ }
51
+ configurarLicencas() {
52
+ setTimeout(() => {
53
+ this.definirMenusPorSistema(this.aplicativos[0]?.idaplicativo);
54
+ }, 1);
55
+ }
56
+ definirMenusPorSistema(idaplicativo) {
57
+ this.menus = this.aplicativos.find((x) => x.idaplicativo == idaplicativo)?.menus || [];
58
+ if (this.router.url && this.menus.length > 0) {
59
+ if (this.router.url === '/') {
60
+ this.navigateToFirstMenu();
61
+ }
62
+ else {
63
+ const menuSelecionado = this.menus.find((menu) => menu.link.includes(this.router.url.slice(1)));
64
+ if (menuSelecionado) {
65
+ this.navigateToMenu(menuSelecionado);
66
+ }
67
+ }
68
+ }
69
+ this.sistemasPanel.hide();
70
+ }
71
+ expandMenuEvent() {
72
+ this.expandMenuEmit.emit(this.expandMenu);
73
+ }
74
+ gerenciarKeePass(event) {
75
+ this.sistemasPanel.hide();
76
+ this.gerenciarKeePassEvent.emit(event);
77
+ }
78
+ mascaraNomeLicenca(nomeLicenca) {
79
+ if (nomeLicenca) {
80
+ if (nomeLicenca.length > 23)
81
+ return nomeLicenca.substring(0, 23) + '...';
82
+ else
83
+ return nomeLicenca;
84
+ }
85
+ else
86
+ return '';
87
+ }
88
+ navigateToFirstMenu() {
89
+ const firstMenu = this.menus[0];
90
+ if (firstMenu.indmenupai) {
91
+ const filhos = this.retornarMenuFilhos(firstMenu.idaplicativo, firstMenu.idmenu);
92
+ if (filhos) {
93
+ this.callRoute(filhos[0].link, true);
94
+ }
95
+ }
96
+ else {
97
+ this.callRoute(firstMenu.link, true);
98
+ }
99
+ }
100
+ navigateToMenu(menu) {
101
+ if (menu.menupai) {
102
+ const filhos = this.retornarMenuFilhos(menu.idsistema, menu.idmenu);
103
+ if (filhos) {
104
+ this.callRoute(filhos[0].link, true);
105
+ }
106
+ }
107
+ else {
108
+ this.callRoute(menu.link, true);
109
+ }
110
+ }
111
+ ngOnInit() {
112
+ this.configurarLicencas();
113
+ this.heigthCard = Number(document.getElementById('page-content')?.offsetHeight);
114
+ this.widthCard = Number(window.innerWidth) - (this.expandMenu ? 333 : 93);
115
+ this.expandMenuEvent();
116
+ }
117
+ onMouseEnter(index) {
118
+ this.mouseOverIndex = index;
119
+ }
120
+ onMouseFilhoEnter(index) {
121
+ this.mouseOverFilhoIndex = index;
122
+ }
123
+ onMouseLeave() {
124
+ this.mouseOverIndex = null;
125
+ this.mouseOverFilhoIndex = null;
126
+ }
127
+ onWindowResize() {
128
+ this.heigthCard = Number(document.getElementById('page-content')?.offsetHeight);
129
+ this.widthCard = Number(window.innerWidth) - (this.expandMenu ? 333 : 93);
130
+ this.cdr.detectChanges();
131
+ }
132
+ retornarMenuFilhos(idaplicativo, idmenu) {
133
+ return this.aplicativos.find((x) => x.idaplicativo == idaplicativo)?.menus.filter((x) => x.idmenupai == idmenu);
134
+ }
135
+ sair(event) {
136
+ this.sistemasPanel.hide();
137
+ this.sairEvent.emit(event);
138
+ }
139
+ toggleMenu() {
140
+ this.expandMenu = !this.expandMenu;
141
+ this.expandMenuEvent();
142
+ }
143
+ trocarLicenca() {
144
+ this.trocarLicencaEmit.emit();
145
+ }
146
+ verificarPaginaSelecionada(link) {
147
+ return this.router.url.includes(link);
148
+ }
149
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: KvMenuComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Router }, { token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
150
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: KvMenuComponent, selector: "kv-menu", inputs: { aplicativos: "aplicativos", breadCrumbItems: "breadCrumbItems", licencas: "licencas", licencaSelecionada: "licencaSelecionada", logoImage: "logoImage", nomeUsuario: "nomeUsuario" }, outputs: { expandMenuEmit: "expandMenuEmit", gerenciarKeePassEvent: "gerenciarKeePassEvent", licencaChange: "licencaChange", sairEvent: "sairEvent", trocarLicencaEmit: "trocarLicencaEmit" }, host: { listeners: { "window:resize": "onWindowResize($event)" } }, viewQueries: [{ propertyName: "meusDadosPanel", first: true, predicate: ["meusDadosPanel"], descendants: true }, { propertyName: "sidebarRef", first: true, predicate: ["sidebarRef"], descendants: true }, { propertyName: "sistemasPanel", first: true, predicate: ["sistemasPanel"], descendants: true }], ngImport: i0, template: "<div class=\"flex flex-row overflow-y-hidden w- full-container\">\r\n\r\n <div [style]=\"{minWidth: expandMenu ? '300px' : '60px'}\"></div>\r\n\r\n <p-sidebar\r\n #sidebarRef\r\n [visible]=\"true\"\r\n [showCloseIcon]=\"false\"\r\n [modal]=\"false\"\r\n [style]=\"{width: expandMenu ? '300px' : '60px'}\">\r\n <ng-template pTemplate=\"headless\">\r\n <div class=\"flex flex-column mx-1\">\r\n <div\r\n class=\"flex flex-column gap-2 justify-content-between flex-shrink-0 mx-2\">\r\n <div\r\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}} py-3\">\r\n <img\r\n *ngIf=\"expandMenu\"\r\n alt=\"Card\"\r\n [src]=\"logoImage\"\r\n width=\"150\" />\r\n\r\n <button\r\n pButton\r\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\r\n (click)=\"toggleMenu()\"\r\n [pTooltip]=\"expandMenu ? 'Ocutar Menu' : 'Expandir Menu'\"\r\n [tooltipPosition]=\"'right'\">\r\n <i class=\"material-symbols-outlined\">\r\n menu\r\n </i>\r\n </button>\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}}\">\r\n <div\r\n class=\"flex flex-column cursor-pointer\"\r\n *ngIf=\"expandMenu\"\r\n (click)=\"trocarLicenca()\">\r\n <span\r\n class=\"text-sm font-semibold mr-2\"\r\n [pTooltip]=\"this.licencaSelecionada.nome\"\r\n [tooltipPosition]=\"'right'\">\r\n {{mascaraNomeLicenca(this.licencaSelecionada.nome)}}\r\n </span>\r\n <span class=\"text-sm mt-1\">{{this.licencaSelecionada.cpfcnpj |\r\n cpfCnpj }}</span>\r\n </div>\r\n\r\n <button\r\n pButton\r\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\r\n (click)=\"trocarLicenca()\"\r\n [pTooltip]=\"'Alterar workspace'\"\r\n [tooltipPosition]=\"'right'\">\r\n <i class=\"material-symbols-outlined\">\r\n sync_alt\r\n </i>\r\n </button>\r\n\r\n </div>\r\n <p-divider type=\"solid\"></p-divider>\r\n </div>\r\n\r\n <div\r\n class=\"list-none m-0 card-container {{expandMenu ? 'mx-1' : ''}}\"\r\n [style.max-height]=\"(heigthCard - 220) + 'px'\"\r\n style=\"overflow-y: auto;\">\r\n <!-- menus -->\r\n <li *ngFor=\"let menu of menus; let i = index\">\r\n <!-- menu que n\u00E3o tem filho -->\r\n <a\r\n (mouseenter)=\"onMouseEnter(i)\"\r\n (mouseleave)=\"onMouseLeave()\"\r\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\r\n (click)=\"callRoute(menu.link)\"\r\n *ngIf=\"!menu.indmenupai && (!menu.idmenupai || menu.idmenupai == 0)\"\r\n pRipple\r\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\r\n [tooltipPosition]=\"'right'\"\r\n class=\"{{verificarPaginaSelecionada(menu.link) ? 'bg-green-600' : ''}} menu-option flex align-items-center no-underline {{!expandMenu ? 'justify-content-center' : ''}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\">\r\n\r\n <i\r\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color {{verificarPaginaSelecionada(menu.link) ? 'text-white' : ''}}\"\r\n *ngIf=\"menu.icone\">\r\n {{ menu.icone }}\r\n </i>\r\n <span\r\n class=\"text-base text-blue-900 font-medium {{verificarPaginaSelecionada(menu.link) ? 'text-white' : ''}}\"\r\n *ngIf=\"expandMenu\">{{ menu.descricaomenu }}</span>\r\n </a>\r\n <!-- menu com filho -->\r\n <div *ngIf=\"menu.indmenupai\">\r\n <a\r\n (mouseenter)=\"onMouseEnter(i)\"\r\n (mouseleave)=\"onMouseLeave()\"\r\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\r\n pRipple\r\n pStyleClass=\"@next\"\r\n enterClass=\"hidden\"\r\n enterActiveClass=\"slidedown\"\r\n leaveToClass=\"hidden\"\r\n leaveActiveClass=\"slideup\"\r\n class=\"menu-option flex align-items-center {{!expandMenu ? 'justify-content-center' : 'justify-content-between'}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\"\r\n [tooltipPosition]=\"'right'\"\r\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\r\n (click)=\"!expandMenu ? expandMenu = !expandMenu : ''\">\r\n <div class=\"flex flex-row align-items-center\">\r\n\r\n <i\r\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color\"\r\n *ngIf=\"menu.icone\"\r\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\">\r\n {{ menu.icone }}\r\n </i>\r\n <span\r\n class=\"text-base text-blue-900 font-medium\"\r\n *ngIf=\"expandMenu\">{{ menu.descricaomenu }}</span>\r\n </div>\r\n <i\r\n class=\"pi pi-chevron-down text-blue-900 mr-1 icon-hover-color\"\r\n *ngIf=\"expandMenu\"\r\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"></i>\r\n </a>\r\n\r\n <!-- filhos -->\r\n <div\r\n class=\"list-none py-0 pl-3 pr-0 m-0 hidden overflow-y-hidden transition-all transition-duration-400 transition-ease-in-out\">\r\n <li *ngFor=\"\r\n let filho of retornarMenuFilhos(menu.idaplicativo, menu.idmenu); let iFilho = index\r\n \">\r\n <a\r\n (mouseenter)=\"onMouseFilhoEnter(filho.idmenu)\"\r\n (mouseleave)=\"onMouseLeave()\"\r\n [ngClass]=\"{'hover-color': mouseOverFilhoIndex === filho.idmenu}\"\r\n *ngIf=\"expandMenu\"\r\n (click)=\"callRoute(filho.link)\"\r\n pRipple\r\n class=\"{{verificarPaginaSelecionada(filho.link) ? 'bg-green-600' : ''}} menu-option flex align-items-center no-underline cursor-pointer border-round text-700 hover:bg-green-600 transition-duration-150 transition-colors p-ripple p-2\">\r\n <i\r\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color\"\r\n *ngIf=\"filho.icone\"\r\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\">\r\n {{ filho.icone }}\r\n </i>\r\n <span\r\n class=\"text-base text-blue-900 ml-4 {{verificarPaginaSelecionada(filho.link) ? 'text-white' : ''}}\"\r\n *ngIf=\"expandMenu\">{{ filho.descricaomenu }}</span>\r\n </a>\r\n </li>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-sidebar>\r\n\r\n <div\r\n class=\"w-auto h-screen page-content overflow-y-hidden\"\r\n id=\"page-content\">\r\n\r\n <div class=\"flex flex-row align-items-center justify-content-between m-3\">\r\n <div>\r\n <p class=\"text-xl font-semibold text-blue-900 breadcrumb-title\">{{breadCrumbItems[breadCrumbItems.length - 1]?.label}}</p>\r\n <p-breadcrumb\r\n *ngIf=\"widthCard > 400\"\r\n styleClass=\"border-none p-0 flex align-items-center h-2rem !important;\"\r\n [model]=\"breadCrumbItems\"\r\n [style]=\"{backgroundColor: '#d4d3d3'}\"\r\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"></p-breadcrumb>\r\n </div>\r\n\r\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\r\n\r\n <p-button\r\n styleClass=\"w-2rem h-2rem text-blue-900 hover:bg-green-600 hover:text-white\"\r\n icon=\"pi pi-th-large\"\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n (click)=\"sistemasPanel.toggle($event)\"\r\n [pTooltip]=\"'Sistemas'\"\r\n [tooltipPosition]=\"'left'\"></p-button>\r\n\r\n <p-button\r\n styleClass=\"w-2rem h-2rem text-blue-900 hover:bg-green-600 hover:text-white\"\r\n icon=\"pi pi-user\"\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n [pTooltip]=\"'Menu do Usu\u00E1rio'\"\r\n [tooltipPosition]=\"'left'\"\r\n (click)=\"meusDadosPanel.toggle($event)\"></p-button>\r\n\r\n </div>\r\n </div>\r\n\r\n <p-card\r\n class=\"card-container\"\r\n styleClass=\"m-3 border-noround overflow-y-auto card-container\"\r\n [style]=\"{height: heigthCard - ajustarHeigthCard() + 'px'}\">\r\n <div class=\"card-container w-full\" [style]=\"{width: widthCard + 'px'}\">\r\n <ng-content></ng-content>\r\n </div>\r\n </p-card>\r\n\r\n </div>\r\n\r\n <p-overlayPanel\r\n #sistemasPanel\r\n [showTransitionOptions]=\"'350ms ease-out'\"\r\n [hideTransitionOptions]=\"'250ms ease-in'\">\r\n <ng-template pTemplate=\"container\">\r\n <p class=\"title-style mt-3\">Sistemas</p>\r\n <div\r\n class=\"flex flex-row flex-wrap gap-2 align-items-center justify-content-center mt-5 mb-3\"\r\n style=\"width: 250px; height: 100%;\">\r\n <button\r\n *ngFor=\"let aplicativo of aplicativos\"\r\n pButton\r\n pRipple\r\n class=\"btn-sistema-2 btn-sistema hover-btn-cor-padrao remove-focus h-4rem w-4rem\"\r\n (click)=\"definirMenusPorSistema(aplicativo.idaplicativo)\"\r\n [pTooltip]=\"aplicativo?.descricaoaplicativo\"\r\n [tooltipPosition]=\"'left'\">\r\n {{ aplicativo.nomeaplicativo.charAt(0).toUpperCase() }}\r\n </button>\r\n </div>\r\n </ng-template>\r\n </p-overlayPanel>\r\n\r\n <p-overlayPanel\r\n #meusDadosPanel\r\n [showTransitionOptions]=\"'350ms ease-out'\"\r\n [hideTransitionOptions]=\"'250ms ease-in'\">\r\n\r\n <ng-template pTemplate=\"container\">\r\n\r\n <p class=\"title-style mt-3\">Ol\u00E1, {{nomeUsuario ?\r\n nomeUsuario.split(' ')[0] : 'Usu\u00E1rio'}} !</p>\r\n <div class=\"mt-5 mb-3\">\r\n\r\n </div>\r\n\r\n <p-button\r\n icon=\"pi pi-lock\"\r\n label=\"Ger\u00EAnciar KeevoPass\"\r\n (onClick)=\"gerenciarKeePass($event)\"\r\n styleClass=\"border-noround w-full text-blue-900\"\r\n [text]=\"true\"\r\n [disabled]=\"true\"></p-button>\r\n <p-button\r\n icon=\"pi pi-sign-out\"\r\n label=\"Sair\"\r\n (onClick)=\"sair($event)\"\r\n styleClass=\"border-noround w-full text-blue-900\"\r\n [text]=\"true\"></p-button>\r\n </ng-template>\r\n\r\n </p-overlayPanel>", styles: [".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:1em;display:inline-block;width:1em;height:1em;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}::ng-deep .p-button:focus{box-shadow:none;-webkit-box-shadow:none;-moz-box-shadow:none}::ng-deep .p-overlaypanel .p-overlaypanel-content{padding:0}::ng-deep .hover-btn-cor-padrao.p-button:enabled:hover{background:#0c3e66;border-color:#002542}.p-button.p-button-icon-only.p-button-rounded{background:#0c3e66;border-color:#002542}::ng-deep .remove-focus:focus{border:none}::ng-deep .p-sidebar .p-sidebar-content{padding:0}::ng-deep .sidebar-header-sistema.p-sidebar .p-sidebar-header{padding-top:.5rem;padding-right:0;padding-bottom:0;padding-left:0;display:block}.btn-sistema{display:flex;align-items:center;justify-content:center;background-color:#0c3e66;font-size:20px}::ng-deep .p-sidebar .p-sidebar-header{padding:0rem!important}::ng-deep body{margin:0!important}::ng-deep .p-breadcrumb ul li.p-breadcrumb-chevron{position:relative;top:3px;color:#0c3e66!important}.page-content{background:linear-gradient(to bottom,#d4d3d3 16%,#fff 19%)}*{margin:0}p .item-menu{color:#0c3e66;font-family:Inter var,Roboto,Arial,Helvetica,sans-serif!important}span{font-size:.9rem!important}.breadcrumb-title{font-size:1rem!important;font-family:Inter var,Roboto,Arial,Helvetica,sans-serif!important}::ng-deep .card-container{overflow-x:hidden}::ng-deep .card-container::-webkit-scrollbar{width:6px}::ng-deep .card-container::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .card-container::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .card-container:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .card-container::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.title-style{position:relative;top:10px;margin-left:20px;font-size:25px;color:#002542;border-bottom:2px solid green;font-weight:600;display:inline}::ng-deep p-sidebar .p-sidebar-content{overflow-y:hidden}::ng-deep p-dialog .p-dialog-content{overflow-y:unset}.icon-menu{color:#002542;display:flex;justify-content:center;align-items:center}::ng-deep .padding-style{padding:15px!important}::ng-deep .menu-option{padding:15px 5px!important}::ng-deep .p-breadcrumb .p-breadcrumb-list .p-menuitem-text{color:#183462!important;opacity:.95;font-weight:500;font-size:.8rem!important}::ng-deep .p-breadcrumb .p-breadcrumb-list .p-menuitem-text:hover{opacity:.7}.pl-3{padding-left:0rem!important}::ng-deep svg.p-icon{width:.7rem;height:1rem}.hover-color .text-base,.hover-color .icon-hover-color{color:#fff!important}::ng-deep .p-card .p-card-body{padding:0rem!important}::ng-deep .p-card .p-card-content{padding:0rem!important}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i4.Breadcrumb, selector: "p-breadcrumb", inputs: ["model", "style", "styleClass", "home", "homeAriaLabel"], outputs: ["onItemClick"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "directive", type: i6.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i6.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "size", "style", "styleClass", "badgeClass", "ariaLabel"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i7.Card, selector: "p-card", inputs: ["header", "subheader", "style", "styleClass"] }, { kind: "component", type: i8.Divider, selector: "p-divider", inputs: ["style", "styleClass", "layout", "type", "align"] }, { kind: "component", type: i9.OverlayPanel, selector: "p-overlayPanel", inputs: ["dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i10.Ripple, selector: "[pRipple]" }, { kind: "component", type: i11.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i12.StyleClass, selector: "[pStyleClass]", inputs: ["pStyleClass", "enterClass", "enterActiveClass", "enterToClass", "leaveClass", "leaveActiveClass", "leaveToClass", "hideOnOutsideClick", "toggleClass", "hideOnEscape"] }, { kind: "pipe", type: i13.CpfCnpjPipe, name: "cpfCnpj" }] }); }
151
+ }
152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: KvMenuComponent, decorators: [{
153
+ type: Component,
154
+ args: [{ selector: 'kv-menu', template: "<div class=\"flex flex-row overflow-y-hidden w- full-container\">\r\n\r\n <div [style]=\"{minWidth: expandMenu ? '300px' : '60px'}\"></div>\r\n\r\n <p-sidebar\r\n #sidebarRef\r\n [visible]=\"true\"\r\n [showCloseIcon]=\"false\"\r\n [modal]=\"false\"\r\n [style]=\"{width: expandMenu ? '300px' : '60px'}\">\r\n <ng-template pTemplate=\"headless\">\r\n <div class=\"flex flex-column mx-1\">\r\n <div\r\n class=\"flex flex-column gap-2 justify-content-between flex-shrink-0 mx-2\">\r\n <div\r\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}} py-3\">\r\n <img\r\n *ngIf=\"expandMenu\"\r\n alt=\"Card\"\r\n [src]=\"logoImage\"\r\n width=\"150\" />\r\n\r\n <button\r\n pButton\r\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\r\n (click)=\"toggleMenu()\"\r\n [pTooltip]=\"expandMenu ? 'Ocutar Menu' : 'Expandir Menu'\"\r\n [tooltipPosition]=\"'right'\">\r\n <i class=\"material-symbols-outlined\">\r\n menu\r\n </i>\r\n </button>\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-row align-items-center {{expandMenu ? 'justify-content-between' : 'justify-content-center'}}\">\r\n <div\r\n class=\"flex flex-column cursor-pointer\"\r\n *ngIf=\"expandMenu\"\r\n (click)=\"trocarLicenca()\">\r\n <span\r\n class=\"text-sm font-semibold mr-2\"\r\n [pTooltip]=\"this.licencaSelecionada.nome\"\r\n [tooltipPosition]=\"'right'\">\r\n {{mascaraNomeLicenca(this.licencaSelecionada.nome)}}\r\n </span>\r\n <span class=\"text-sm mt-1\">{{this.licencaSelecionada.cpfcnpj |\r\n cpfCnpj }}</span>\r\n </div>\r\n\r\n <button\r\n pButton\r\n class=\"p-button-rounded p-button-text padding-style h-2rem w-2rem hover:bg-green-600 hover:text-white icon-menu\"\r\n (click)=\"trocarLicenca()\"\r\n [pTooltip]=\"'Alterar workspace'\"\r\n [tooltipPosition]=\"'right'\">\r\n <i class=\"material-symbols-outlined\">\r\n sync_alt\r\n </i>\r\n </button>\r\n\r\n </div>\r\n <p-divider type=\"solid\"></p-divider>\r\n </div>\r\n\r\n <div\r\n class=\"list-none m-0 card-container {{expandMenu ? 'mx-1' : ''}}\"\r\n [style.max-height]=\"(heigthCard - 220) + 'px'\"\r\n style=\"overflow-y: auto;\">\r\n <!-- menus -->\r\n <li *ngFor=\"let menu of menus; let i = index\">\r\n <!-- menu que n\u00E3o tem filho -->\r\n <a\r\n (mouseenter)=\"onMouseEnter(i)\"\r\n (mouseleave)=\"onMouseLeave()\"\r\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\r\n (click)=\"callRoute(menu.link)\"\r\n *ngIf=\"!menu.indmenupai && (!menu.idmenupai || menu.idmenupai == 0)\"\r\n pRipple\r\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\r\n [tooltipPosition]=\"'right'\"\r\n class=\"{{verificarPaginaSelecionada(menu.link) ? 'bg-green-600' : ''}} menu-option flex align-items-center no-underline {{!expandMenu ? 'justify-content-center' : ''}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\">\r\n\r\n <i\r\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color {{verificarPaginaSelecionada(menu.link) ? 'text-white' : ''}}\"\r\n *ngIf=\"menu.icone\">\r\n {{ menu.icone }}\r\n </i>\r\n <span\r\n class=\"text-base text-blue-900 font-medium {{verificarPaginaSelecionada(menu.link) ? 'text-white' : ''}}\"\r\n *ngIf=\"expandMenu\">{{ menu.descricaomenu }}</span>\r\n </a>\r\n <!-- menu com filho -->\r\n <div *ngIf=\"menu.indmenupai\">\r\n <a\r\n (mouseenter)=\"onMouseEnter(i)\"\r\n (mouseleave)=\"onMouseLeave()\"\r\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"\r\n pRipple\r\n pStyleClass=\"@next\"\r\n enterClass=\"hidden\"\r\n enterActiveClass=\"slidedown\"\r\n leaveToClass=\"hidden\"\r\n leaveActiveClass=\"slideup\"\r\n class=\"menu-option flex align-items-center {{!expandMenu ? 'justify-content-center' : 'justify-content-between'}} cursor-pointer border-round text-700 hover:bg-green-600 hover:text-white transition-duration-150 transition-colors p-ripple\"\r\n [tooltipPosition]=\"'right'\"\r\n [pTooltip]=\"!expandMenu ? menu.descricaomenu : ''\"\r\n (click)=\"!expandMenu ? expandMenu = !expandMenu : ''\">\r\n <div class=\"flex flex-row align-items-center\">\r\n\r\n <i\r\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color\"\r\n *ngIf=\"menu.icone\"\r\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\">\r\n {{ menu.icone }}\r\n </i>\r\n <span\r\n class=\"text-base text-blue-900 font-medium\"\r\n *ngIf=\"expandMenu\">{{ menu.descricaomenu }}</span>\r\n </div>\r\n <i\r\n class=\"pi pi-chevron-down text-blue-900 mr-1 icon-hover-color\"\r\n *ngIf=\"expandMenu\"\r\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\"></i>\r\n </a>\r\n\r\n <!-- filhos -->\r\n <div\r\n class=\"list-none py-0 pl-3 pr-0 m-0 hidden overflow-y-hidden transition-all transition-duration-400 transition-ease-in-out\">\r\n <li *ngFor=\"\r\n let filho of retornarMenuFilhos(menu.idaplicativo, menu.idmenu); let iFilho = index\r\n \">\r\n <a\r\n (mouseenter)=\"onMouseFilhoEnter(filho.idmenu)\"\r\n (mouseleave)=\"onMouseLeave()\"\r\n [ngClass]=\"{'hover-color': mouseOverFilhoIndex === filho.idmenu}\"\r\n *ngIf=\"expandMenu\"\r\n (click)=\"callRoute(filho.link)\"\r\n pRipple\r\n class=\"{{verificarPaginaSelecionada(filho.link) ? 'bg-green-600' : ''}} menu-option flex align-items-center no-underline cursor-pointer border-round text-700 hover:bg-green-600 transition-duration-150 transition-colors p-ripple p-2\">\r\n <i\r\n class=\"material-symbols-outlined icon-menu {{expandMenu ? 'ml-1 mr-2' : ''}} icon-hover-color\"\r\n *ngIf=\"filho.icone\"\r\n [ngClass]=\"{'hover-color': mouseOverIndex === i}\">\r\n {{ filho.icone }}\r\n </i>\r\n <span\r\n class=\"text-base text-blue-900 ml-4 {{verificarPaginaSelecionada(filho.link) ? 'text-white' : ''}}\"\r\n *ngIf=\"expandMenu\">{{ filho.descricaomenu }}</span>\r\n </a>\r\n </li>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </p-sidebar>\r\n\r\n <div\r\n class=\"w-auto h-screen page-content overflow-y-hidden\"\r\n id=\"page-content\">\r\n\r\n <div class=\"flex flex-row align-items-center justify-content-between m-3\">\r\n <div>\r\n <p class=\"text-xl font-semibold text-blue-900 breadcrumb-title\">{{breadCrumbItems[breadCrumbItems.length - 1]?.label}}</p>\r\n <p-breadcrumb\r\n *ngIf=\"widthCard > 400\"\r\n styleClass=\"border-none p-0 flex align-items-center h-2rem !important;\"\r\n [model]=\"breadCrumbItems\"\r\n [style]=\"{backgroundColor: '#d4d3d3'}\"\r\n (onItemClick)=\"callRoute($event.item.routerLink, true)\"></p-breadcrumb>\r\n </div>\r\n\r\n <div class=\"w-auto flex flex-row align-items-center gap-2\">\r\n\r\n <p-button\r\n styleClass=\"w-2rem h-2rem text-blue-900 hover:bg-green-600 hover:text-white\"\r\n icon=\"pi pi-th-large\"\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n (click)=\"sistemasPanel.toggle($event)\"\r\n [pTooltip]=\"'Sistemas'\"\r\n [tooltipPosition]=\"'left'\"></p-button>\r\n\r\n <p-button\r\n styleClass=\"w-2rem h-2rem text-blue-900 hover:bg-green-600 hover:text-white\"\r\n icon=\"pi pi-user\"\r\n [rounded]=\"true\"\r\n [text]=\"true\"\r\n [pTooltip]=\"'Menu do Usu\u00E1rio'\"\r\n [tooltipPosition]=\"'left'\"\r\n (click)=\"meusDadosPanel.toggle($event)\"></p-button>\r\n\r\n </div>\r\n </div>\r\n\r\n <p-card\r\n class=\"card-container\"\r\n styleClass=\"m-3 border-noround overflow-y-auto card-container\"\r\n [style]=\"{height: heigthCard - ajustarHeigthCard() + 'px'}\">\r\n <div class=\"card-container w-full\" [style]=\"{width: widthCard + 'px'}\">\r\n <ng-content></ng-content>\r\n </div>\r\n </p-card>\r\n\r\n </div>\r\n\r\n <p-overlayPanel\r\n #sistemasPanel\r\n [showTransitionOptions]=\"'350ms ease-out'\"\r\n [hideTransitionOptions]=\"'250ms ease-in'\">\r\n <ng-template pTemplate=\"container\">\r\n <p class=\"title-style mt-3\">Sistemas</p>\r\n <div\r\n class=\"flex flex-row flex-wrap gap-2 align-items-center justify-content-center mt-5 mb-3\"\r\n style=\"width: 250px; height: 100%;\">\r\n <button\r\n *ngFor=\"let aplicativo of aplicativos\"\r\n pButton\r\n pRipple\r\n class=\"btn-sistema-2 btn-sistema hover-btn-cor-padrao remove-focus h-4rem w-4rem\"\r\n (click)=\"definirMenusPorSistema(aplicativo.idaplicativo)\"\r\n [pTooltip]=\"aplicativo?.descricaoaplicativo\"\r\n [tooltipPosition]=\"'left'\">\r\n {{ aplicativo.nomeaplicativo.charAt(0).toUpperCase() }}\r\n </button>\r\n </div>\r\n </ng-template>\r\n </p-overlayPanel>\r\n\r\n <p-overlayPanel\r\n #meusDadosPanel\r\n [showTransitionOptions]=\"'350ms ease-out'\"\r\n [hideTransitionOptions]=\"'250ms ease-in'\">\r\n\r\n <ng-template pTemplate=\"container\">\r\n\r\n <p class=\"title-style mt-3\">Ol\u00E1, {{nomeUsuario ?\r\n nomeUsuario.split(' ')[0] : 'Usu\u00E1rio'}} !</p>\r\n <div class=\"mt-5 mb-3\">\r\n\r\n </div>\r\n\r\n <p-button\r\n icon=\"pi pi-lock\"\r\n label=\"Ger\u00EAnciar KeevoPass\"\r\n (onClick)=\"gerenciarKeePass($event)\"\r\n styleClass=\"border-noround w-full text-blue-900\"\r\n [text]=\"true\"\r\n [disabled]=\"true\"></p-button>\r\n <p-button\r\n icon=\"pi pi-sign-out\"\r\n label=\"Sair\"\r\n (onClick)=\"sair($event)\"\r\n styleClass=\"border-noround w-full text-blue-900\"\r\n [text]=\"true\"></p-button>\r\n </ng-template>\r\n\r\n </p-overlayPanel>", styles: [".material-icons{font-family:Material Icons;font-weight:400;font-style:normal;font-size:1em;display:inline-block;width:1em;height:1em;line-height:1;text-transform:none;letter-spacing:normal;word-wrap:normal;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}::ng-deep .p-button:focus{box-shadow:none;-webkit-box-shadow:none;-moz-box-shadow:none}::ng-deep .p-overlaypanel .p-overlaypanel-content{padding:0}::ng-deep .hover-btn-cor-padrao.p-button:enabled:hover{background:#0c3e66;border-color:#002542}.p-button.p-button-icon-only.p-button-rounded{background:#0c3e66;border-color:#002542}::ng-deep .remove-focus:focus{border:none}::ng-deep .p-sidebar .p-sidebar-content{padding:0}::ng-deep .sidebar-header-sistema.p-sidebar .p-sidebar-header{padding-top:.5rem;padding-right:0;padding-bottom:0;padding-left:0;display:block}.btn-sistema{display:flex;align-items:center;justify-content:center;background-color:#0c3e66;font-size:20px}::ng-deep .p-sidebar .p-sidebar-header{padding:0rem!important}::ng-deep body{margin:0!important}::ng-deep .p-breadcrumb ul li.p-breadcrumb-chevron{position:relative;top:3px;color:#0c3e66!important}.page-content{background:linear-gradient(to bottom,#d4d3d3 16%,#fff 19%)}*{margin:0}p .item-menu{color:#0c3e66;font-family:Inter var,Roboto,Arial,Helvetica,sans-serif!important}span{font-size:.9rem!important}.breadcrumb-title{font-size:1rem!important;font-family:Inter var,Roboto,Arial,Helvetica,sans-serif!important}::ng-deep .card-container{overflow-x:hidden}::ng-deep .card-container::-webkit-scrollbar{width:6px}::ng-deep .card-container::-webkit-scrollbar:hover{background-color:#dededebf}::ng-deep .card-container::-webkit-scrollbar-thumb{border-radius:4px;background-color:transparent}::ng-deep .card-container:hover::-webkit-scrollbar-thumb{border-left:2px solid white;background-color:#00000080}::ng-deep .card-container::-webkit-scrollbar-track{border-left:2px solid white;background-color:#dededebf}.title-style{position:relative;top:10px;margin-left:20px;font-size:25px;color:#002542;border-bottom:2px solid green;font-weight:600;display:inline}::ng-deep p-sidebar .p-sidebar-content{overflow-y:hidden}::ng-deep p-dialog .p-dialog-content{overflow-y:unset}.icon-menu{color:#002542;display:flex;justify-content:center;align-items:center}::ng-deep .padding-style{padding:15px!important}::ng-deep .menu-option{padding:15px 5px!important}::ng-deep .p-breadcrumb .p-breadcrumb-list .p-menuitem-text{color:#183462!important;opacity:.95;font-weight:500;font-size:.8rem!important}::ng-deep .p-breadcrumb .p-breadcrumb-list .p-menuitem-text:hover{opacity:.7}.pl-3{padding-left:0rem!important}::ng-deep svg.p-icon{width:.7rem;height:1rem}.hover-color .text-base,.hover-color .icon-hover-color{color:#fff!important}::ng-deep .p-card .p-card-body{padding:0rem!important}::ng-deep .p-card .p-card-content{padding:0rem!important}\n"] }]
155
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.Router }, { type: i1.ActivatedRoute }]; }, propDecorators: { aplicativos: [{
156
+ type: Input
157
+ }], breadCrumbItems: [{
158
+ type: Input
159
+ }], licencas: [{
160
+ type: Input
161
+ }], licencaSelecionada: [{
162
+ type: Input
163
+ }], logoImage: [{
164
+ type: Input
165
+ }], nomeUsuario: [{
166
+ type: Input
167
+ }], expandMenuEmit: [{
168
+ type: Output
169
+ }], gerenciarKeePassEvent: [{
170
+ type: Output
171
+ }], licencaChange: [{
172
+ type: Output
173
+ }], sairEvent: [{
174
+ type: Output
175
+ }], trocarLicencaEmit: [{
176
+ type: Output
177
+ }], meusDadosPanel: [{
178
+ type: ViewChild,
179
+ args: ['meusDadosPanel']
180
+ }], sidebarRef: [{
181
+ type: ViewChild,
182
+ args: ['sidebarRef']
183
+ }], sistemasPanel: [{
184
+ type: ViewChild,
185
+ args: ['sistemasPanel']
186
+ }], onWindowResize: [{
187
+ type: HostListener,
188
+ args: ['window:resize', ['$event']]
189
+ }] } });
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3YtbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9rdi1tZW51L2t2LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2Vldm8tY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMva3YtbWVudS9rdi1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBZ0J2QixNQUFNLE9BQU8sZUFBZTtJQTRCMUIsWUFBb0IsR0FBc0IsRUFBWSxNQUFjLEVBQVUsS0FBcUI7UUFBL0UsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBWSxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUExQjFGLGdCQUFXLEdBQXNCLEVBQUUsQ0FBQztRQUNwQyxvQkFBZSxHQUE0QyxFQUFFLENBQUM7UUFDOUQsYUFBUSxHQUF1QixFQUFFLENBQUM7UUFLakMsbUJBQWMsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMzRCwwQkFBcUIsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM5RCxrQkFBYSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3RELGNBQVMsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsRCxzQkFBaUIsR0FBMEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQU14RSxVQUFLLEdBQWdCLEVBQUUsQ0FBQztRQUV4QixlQUFVLEdBQVksSUFBSSxDQUFDO1FBSTNCLHlCQUFvQixHQUFZLEtBQUssQ0FBQztJQUdpRSxDQUFDO0lBRXhH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QUFVLENBQUM7UUFDbkMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO0lBQ3hCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxJQUFTO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7K0dBL0pVLGVBQWU7bUdBQWYsZUFBZSxneUJDL0I1Qix5a1hBa1FxQjs7NEZEbk9SLGVBQWU7a0JBTDNCLFNBQVM7K0JBQ0UsU0FBUzswSkFNVixXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0cscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBRXNCLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUNGLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFDSyxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWU7Z0JBb0gxQixjQUFjO3NCQURiLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmltcG9ydCB7XHJcbiAgQWN0aXZhdGVkUm91dGUsXHJcbiAgUm91dGVyXHJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQXBsaWNhdGl2b01vZGVsLFxyXG4gIE1hc3RlckNvbWJvTW9kZWwsXHJcbiAgTWVudU1vZGVsXHJcbn0gZnJvbSAna2Vldm8tYXBpLXNlcnZpY2VzLWtlZXZvY2VudGVyJztcclxuXHJcbmltcG9ydCB7IE92ZXJsYXlQYW5lbCB9IGZyb20gJ3ByaW1lbmcvb3ZlcmxheXBhbmVsJztcclxuaW1wb3J0IHsgU2lkZWJhciB9IGZyb20gJ3ByaW1lbmcvc2lkZWJhcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2t2LW1lbnUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9rdi1tZW51LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9rdi1tZW51LmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBLdk1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoKSBhcGxpY2F0aXZvczogQXBsaWNhdGl2b01vZGVsW10gPSBbXTtcclxuICBASW5wdXQoKSBicmVhZENydW1iSXRlbXM6IHsgbGFiZWw6IHN0cmluZywgcm91dGVyTGluazogc3RyaW5nIH1bXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGxpY2VuY2FzOiBNYXN0ZXJDb21ib01vZGVsW10gPSBbXTtcclxuICBASW5wdXQoKSBsaWNlbmNhU2VsZWNpb25hZGEhOiBNYXN0ZXJDb21ib01vZGVsO1xyXG4gIEBJbnB1dCgpIGxvZ29JbWFnZSE6IGFueTtcclxuICBASW5wdXQoKSBub21lVXN1YXJpbyE6IHN0cmluZztcclxuXHJcbiAgQE91dHB1dCgpIGV4cGFuZE1lbnVFbWl0OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGdlcmVuY2lhcktlZVBhc3NFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGxpY2VuY2FDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzYWlyRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSB0cm9jYXJMaWNlbmNhRW1pdDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBAVmlld0NoaWxkKCdtZXVzRGFkb3NQYW5lbCcpIG1ldXNEYWRvc1BhbmVsITogT3ZlcmxheVBhbmVsO1xyXG4gIEBWaWV3Q2hpbGQoJ3NpZGViYXJSZWYnKSBzaWRlYmFyUmVmITogU2lkZWJhcjtcclxuICBAVmlld0NoaWxkKCdzaXN0ZW1hc1BhbmVsJykgc2lzdGVtYXNQYW5lbCE6IE92ZXJsYXlQYW5lbDtcclxuXHJcbiAgbWVudXM6IE1lbnVNb2RlbFtdID0gW107XHJcblxyXG4gIGV4cGFuZE1lbnU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGhlaWd0aENhcmQhOiBudW1iZXI7XHJcbiAgbW91c2VPdmVyRmlsaG9JbmRleDogYW55O1xyXG4gIG1vdXNlT3ZlckluZGV4OiBhbnk7XHJcbiAgdmlzaWJsZURpYWxvZ0xpY2VuY2E6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB3aWR0aENhcmQhOiBudW1iZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkgeyB9XHJcblxyXG4gIGFqdXN0YXJIZWlndGhDYXJkKCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy53aWR0aENhcmQgPiA0MDApIHtcclxuICAgICAgaWYgKHRoaXMuYnJlYWRDcnVtYkl0ZW1zLmxlbmd0aCA+IDApIHJldHVybiAxMDVcclxuICAgICAgZWxzZSByZXR1cm4gODVcclxuICAgIH0gZWxzZSByZXR1cm4gODNcclxuICB9XHJcblxyXG4gIGNhbGxSb3V0ZShlOiBhbnksIGV4cGFuZD86IGJvb2xlYW4pIHtcclxuICAgIGlmICghZXhwYW5kKVxyXG4gICAgICAhdGhpcy5leHBhbmRNZW51ID8gdGhpcy5leHBhbmRNZW51ID0gIXRoaXMuZXhwYW5kTWVudSA6ICcnO1xyXG5cclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoZSlcclxuICB9XHJcblxyXG4gIGNsb3NlQ2FsbGJhY2soZTogRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuc2lkZWJhclJlZi5jbG9zZShlKTtcclxuICB9XHJcblxyXG4gIGNvbmZpZ3VyYXJMaWNlbmNhcygpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmRlZmluaXJNZW51c1BvclNpc3RlbWEodGhpcy5hcGxpY2F0aXZvc1swXT8uaWRhcGxpY2F0aXZvKVxyXG4gICAgfSwgMSk7XHJcbiAgfVxyXG5cclxuICBkZWZpbmlyTWVudXNQb3JTaXN0ZW1hKGlkYXBsaWNhdGl2bzogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm1lbnVzID0gdGhpcy5hcGxpY2F0aXZvcy5maW5kKCh4KSA9PiB4LmlkYXBsaWNhdGl2byA9PSBpZGFwbGljYXRpdm8pPy5tZW51cyB8fCBbXTtcclxuXHJcbiAgICBpZiAodGhpcy5yb3V0ZXIudXJsICYmIHRoaXMubWVudXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBpZiAodGhpcy5yb3V0ZXIudXJsID09PSAnLycpIHtcclxuICAgICAgICB0aGlzLm5hdmlnYXRlVG9GaXJzdE1lbnUoKVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IG1lbnVTZWxlY2lvbmFkbyA9IHRoaXMubWVudXMuZmluZCgobWVudTogYW55KSA9PiBtZW51LmxpbmsuaW5jbHVkZXModGhpcy5yb3V0ZXIudXJsLnNsaWNlKDEpKSk7XHJcbiAgICAgICAgaWYgKG1lbnVTZWxlY2lvbmFkbykge1xyXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvTWVudShtZW51U2VsZWNpb25hZG8pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2lzdGVtYXNQYW5lbC5oaWRlKCk7XHJcbiAgfVxyXG5cclxuICBleHBhbmRNZW51RXZlbnQoKSB7XHJcbiAgICB0aGlzLmV4cGFuZE1lbnVFbWl0LmVtaXQodGhpcy5leHBhbmRNZW51KTtcclxuICB9XHJcblxyXG4gIGdlcmVuY2lhcktlZVBhc3MoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zaXN0ZW1hc1BhbmVsLmhpZGUoKTtcclxuICAgIHRoaXMuZ2VyZW5jaWFyS2VlUGFzc0V2ZW50LmVtaXQoZXZlbnQpXHJcbiAgfVxyXG5cclxuICBtYXNjYXJhTm9tZUxpY2VuY2Eobm9tZUxpY2VuY2E6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAobm9tZUxpY2VuY2EpIHtcclxuICAgICAgaWYgKG5vbWVMaWNlbmNhLmxlbmd0aCA+IDIzKVxyXG4gICAgICAgIHJldHVybiBub21lTGljZW5jYS5zdWJzdHJpbmcoMCwgMjMpICsgJy4uLic7XHJcbiAgICAgIGVsc2UgcmV0dXJuIG5vbWVMaWNlbmNhO1xyXG4gICAgfSBlbHNlIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlVG9GaXJzdE1lbnUoKTogdm9pZCB7XHJcbiAgICBjb25zdCBmaXJzdE1lbnUgPSB0aGlzLm1lbnVzWzBdO1xyXG4gICAgaWYgKGZpcnN0TWVudS5pbmRtZW51cGFpKSB7XHJcbiAgICAgIGNvbnN0IGZpbGhvcyA9IHRoaXMucmV0b3JuYXJNZW51RmlsaG9zKGZpcnN0TWVudS5pZGFwbGljYXRpdm8sIGZpcnN0TWVudS5pZG1lbnUpO1xyXG4gICAgICBpZiAoZmlsaG9zKSB7XHJcbiAgICAgICAgdGhpcy5jYWxsUm91dGUoZmlsaG9zWzBdLmxpbmssIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNhbGxSb3V0ZShmaXJzdE1lbnUubGluaywgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuYXZpZ2F0ZVRvTWVudShtZW51OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChtZW51Lm1lbnVwYWkpIHtcclxuICAgICAgY29uc3QgZmlsaG9zID0gdGhpcy5yZXRvcm5hck1lbnVGaWxob3MobWVudS5pZHNpc3RlbWEsIG1lbnUuaWRtZW51KTtcclxuICAgICAgaWYgKGZpbGhvcykge1xyXG4gICAgICAgIHRoaXMuY2FsbFJvdXRlKGZpbGhvc1swXS5saW5rLCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jYWxsUm91dGUobWVudS5saW5rLCB0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maWd1cmFyTGljZW5jYXMoKTtcclxuICAgIHRoaXMuaGVpZ3RoQ2FyZCA9IE51bWJlcihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFnZS1jb250ZW50Jyk/Lm9mZnNldEhlaWdodCk7XHJcbiAgICB0aGlzLndpZHRoQ2FyZCA9IE51bWJlcih3aW5kb3cuaW5uZXJXaWR0aCkgLSAodGhpcy5leHBhbmRNZW51ID8gMzMzIDogOTMpO1xyXG4gICAgdGhpcy5leHBhbmRNZW51RXZlbnQoKVxyXG4gIH1cclxuXHJcbiAgb25Nb3VzZUVudGVyKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMubW91c2VPdmVySW5kZXggPSBpbmRleDtcclxuICB9XHJcblxyXG4gIG9uTW91c2VGaWxob0VudGVyKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMubW91c2VPdmVyRmlsaG9JbmRleCA9IGluZGV4O1xyXG4gIH1cclxuXHJcbiAgb25Nb3VzZUxlYXZlKCkge1xyXG4gICAgdGhpcy5tb3VzZU92ZXJJbmRleCA9IG51bGw7XHJcbiAgICB0aGlzLm1vdXNlT3ZlckZpbGhvSW5kZXggPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXHJcbiAgb25XaW5kb3dSZXNpemUoKSB7XHJcbiAgICB0aGlzLmhlaWd0aENhcmQgPSBOdW1iZXIoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhZ2UtY29udGVudCcpPy5vZmZzZXRIZWlnaHQpO1xyXG4gICAgdGhpcy53aWR0aENhcmQgPSBOdW1iZXIod2luZG93LmlubmVyV2lkdGgpIC0gKHRoaXMuZXhwYW5kTWVudSA/IDMzMyA6IDkzKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHJldG9ybmFyTWVudUZpbGhvcyhpZGFwbGljYXRpdm86IG51bWJlciwgaWRtZW51OiBudW1iZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmFwbGljYXRpdm9zLmZpbmQoKHgpID0+IHguaWRhcGxpY2F0aXZvID09IGlkYXBsaWNhdGl2byk/Lm1lbnVzLmZpbHRlcigoeCkgPT4geC5pZG1lbnVwYWkgPT0gaWRtZW51KTtcclxuICB9XHJcblxyXG4gIHNhaXIoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zaXN0ZW1hc1BhbmVsLmhpZGUoKTtcclxuICAgIHRoaXMuc2FpckV2ZW50LmVtaXQoZXZlbnQpXHJcbiAgfVxyXG5cclxuICB0b2dnbGVNZW51KCkge1xyXG4gICAgdGhpcy5leHBhbmRNZW51ID0gIXRoaXMuZXhwYW5kTWVudTtcclxuICAgIHRoaXMuZXhwYW5kTWVudUV2ZW50KClcclxuICB9XHJcblxyXG4gIHRyb2NhckxpY2VuY2EoKSB7XHJcbiAgICB0aGlzLnRyb2NhckxpY2VuY2FFbWl0LmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHZlcmlmaWNhclBhZ2luYVNlbGVjaW9uYWRhKGxpbms6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucm91dGVyLnVybC5pbmNsdWRlcyhsaW5rKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgb3ZlcmZsb3cteS1oaWRkZW4gdy0gZnVsbC1jb250YWluZXJcIj5cclxuXHJcbiAgPGRpdiBbc3R5bGVdPVwie21pbldpZHRoOiBleHBhbmRNZW51ID8gJzMwMHB4JyA6ICc2MHB4J31cIj48L2Rpdj5cclxuXHJcbiAgPHAtc2lkZWJhclxyXG4gICAgI3NpZGViYXJSZWZcclxuICAgIFt2aXNpYmxlXT1cInRydWVcIlxyXG4gICAgW3Nob3dDbG9zZUljb25dPVwiZmFsc2VcIlxyXG4gICAgW21vZGFsXT1cImZhbHNlXCJcclxuICAgIFtzdHlsZV09XCJ7d2lkdGg6IGV4cGFuZE1lbnUgPyAnMzAwcHgnIDogJzYwcHgnfVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRsZXNzXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIG14LTFcIj5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gZ2FwLTIganVzdGlmeS1jb250ZW50LWJldHdlZW4gZmxleC1zaHJpbmstMCBteC0yXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIge3tleHBhbmRNZW51ID8gJ2p1c3RpZnktY29udGVudC1iZXR3ZWVuJyA6ICdqdXN0aWZ5LWNvbnRlbnQtY2VudGVyJ319IHB5LTNcIj5cclxuICAgICAgICAgICAgPGltZ1xyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZXhwYW5kTWVudVwiXHJcbiAgICAgICAgICAgICAgYWx0PVwiQ2FyZFwiXHJcbiAgICAgICAgICAgICAgW3NyY109XCJsb2dvSW1hZ2VcIlxyXG4gICAgICAgICAgICAgIHdpZHRoPVwiMTUwXCIgLz5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICBwQnV0dG9uXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgcGFkZGluZy1zdHlsZSBoLTJyZW0gdy0ycmVtIGhvdmVyOmJnLWdyZWVuLTYwMCBob3Zlcjp0ZXh0LXdoaXRlIGljb24tbWVudVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU1lbnUoKVwiXHJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cImV4cGFuZE1lbnUgPyAnT2N1dGFyIE1lbnUnIDogJ0V4cGFuZGlyIE1lbnUnXCJcclxuICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidyaWdodCdcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5cclxuICAgICAgICAgICAgICAgIG1lbnVcclxuICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIHt7ZXhwYW5kTWVudSA/ICdqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbicgOiAnanVzdGlmeS1jb250ZW50LWNlbnRlcid9fVwiPlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sdW1uIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAqbmdJZj1cImV4cGFuZE1lbnVcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0cm9jYXJMaWNlbmNhKClcIj5cclxuICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgbXItMlwiXHJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwidGhpcy5saWNlbmNhU2VsZWNpb25hZGEubm9tZVwiXHJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidyaWdodCdcIj5cclxuICAgICAgICAgICAgICAgIHt7bWFzY2FyYU5vbWVMaWNlbmNhKHRoaXMubGljZW5jYVNlbGVjaW9uYWRhLm5vbWUpfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIG10LTFcIj57e3RoaXMubGljZW5jYVNlbGVjaW9uYWRhLmNwZmNucGogfFxyXG4gICAgICAgICAgICAgICAgY3BmQ25waiB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgcEJ1dHRvblxyXG4gICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IHBhZGRpbmctc3R5bGUgaC0ycmVtIHctMnJlbSBob3ZlcjpiZy1ncmVlbi02MDAgaG92ZXI6dGV4dC13aGl0ZSBpY29uLW1lbnVcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0cm9jYXJMaWNlbmNhKClcIlxyXG4gICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWx0ZXJhciB3b3Jrc3BhY2UnXCJcclxuICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidyaWdodCdcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5cclxuICAgICAgICAgICAgICAgIHN5bmNfYWx0XHJcbiAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxwLWRpdmlkZXIgdHlwZT1cInNvbGlkXCI+PC9wLWRpdmlkZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzPVwibGlzdC1ub25lIG0tMCAgY2FyZC1jb250YWluZXIge3tleHBhbmRNZW51ID8gJ214LTEnIDogJyd9fVwiXHJcbiAgICAgICAgICBbc3R5bGUubWF4LWhlaWdodF09XCIoaGVpZ3RoQ2FyZCAtIDIyMCkgKyAncHgnXCJcclxuICAgICAgICAgIHN0eWxlPVwib3ZlcmZsb3cteTogYXV0bztcIj5cclxuICAgICAgICAgIDwhLS0gbWVudXMgLS0+XHJcbiAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IG1lbnUgb2YgbWVudXM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgPCEtLSBtZW51IHF1ZSBuw6NvIHRlbSBmaWxobyAtLT5cclxuICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJvbk1vdXNlRW50ZXIoaSlcIlxyXG4gICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm9uTW91c2VMZWF2ZSgpXCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2hvdmVyLWNvbG9yJzogbW91c2VPdmVySW5kZXggPT09IGl9XCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2FsbFJvdXRlKG1lbnUubGluaylcIlxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiIW1lbnUuaW5kbWVudXBhaSAmJiAoIW1lbnUuaWRtZW51cGFpIHx8IG1lbnUuaWRtZW51cGFpID09IDApXCJcclxuICAgICAgICAgICAgICBwUmlwcGxlXHJcbiAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIiFleHBhbmRNZW51ID8gbWVudS5kZXNjcmljYW9tZW51IDogJydcIlxyXG4gICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ3JpZ2h0J1wiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ7e3ZlcmlmaWNhclBhZ2luYVNlbGVjaW9uYWRhKG1lbnUubGluaykgPyAnYmctZ3JlZW4tNjAwJyA6ICcnfX0gbWVudS1vcHRpb24gZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbm8tdW5kZXJsaW5lIHt7IWV4cGFuZE1lbnUgPyAnanVzdGlmeS1jb250ZW50LWNlbnRlcicgOiAnJ319IGN1cnNvci1wb2ludGVyIGJvcmRlci1yb3VuZCB0ZXh0LTcwMCBob3ZlcjpiZy1ncmVlbi02MDAgaG92ZXI6dGV4dC13aGl0ZSB0cmFuc2l0aW9uLWR1cmF0aW9uLTE1MCB0cmFuc2l0aW9uLWNvbG9ycyBwLXJpcHBsZVwiPlxyXG5cclxuICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGljb24tbWVudSB7e2V4cGFuZE1lbnUgPyAnbWwtMSBtci0yJyA6ICcnfX0gIGljb24taG92ZXItY29sb3Ige3t2ZXJpZmljYXJQYWdpbmFTZWxlY2lvbmFkYShtZW51LmxpbmspID8gJ3RleHQtd2hpdGUnIDogJyd9fVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1lbnUuaWNvbmVcIj5cclxuICAgICAgICAgICAgICAgIHt7IG1lbnUuaWNvbmUgfX1cclxuICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1iYXNlIHRleHQtYmx1ZS05MDAgZm9udC1tZWRpdW0ge3t2ZXJpZmljYXJQYWdpbmFTZWxlY2lvbmFkYShtZW51LmxpbmspID8gJ3RleHQtd2hpdGUnIDogJyd9fVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImV4cGFuZE1lbnVcIj57eyBtZW51LmRlc2NyaWNhb21lbnUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPCEtLSBtZW51IGNvbSBmaWxobyAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1lbnUuaW5kbWVudXBhaVwiPlxyXG4gICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJvbk1vdXNlRW50ZXIoaSlcIlxyXG4gICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25Nb3VzZUxlYXZlKClcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydob3Zlci1jb2xvcic6IG1vdXNlT3ZlckluZGV4ID09PSBpfVwiXHJcbiAgICAgICAgICAgICAgICBwUmlwcGxlXHJcbiAgICAgICAgICAgICAgICBwU3R5bGVDbGFzcz1cIkBuZXh0XCJcclxuICAgICAgICAgICAgICAgIGVudGVyQ2xhc3M9XCJoaWRkZW5cIlxyXG4gICAgICAgICAgICAgICAgZW50ZXJBY3RpdmVDbGFzcz1cInNsaWRlZG93blwiXHJcbiAgICAgICAgICAgICAgICBsZWF2ZVRvQ2xhc3M9XCJoaWRkZW5cIlxyXG4gICAgICAgICAgICAgICAgbGVhdmVBY3RpdmVDbGFzcz1cInNsaWRldXBcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtZW51LW9wdGlvbiBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciB7eyFleHBhbmRNZW51ID8gJ2p1c3RpZnktY29udGVudC1jZW50ZXInIDogJ2p1c3RpZnktY29udGVudC1iZXR3ZWVuJ319IGN1cnNvci1wb2ludGVyIGJvcmRlci1yb3VuZCB0ZXh0LTcwMCBob3ZlcjpiZy1ncmVlbi02MDAgaG92ZXI6dGV4dC13aGl0ZSB0cmFuc2l0aW9uLWR1cmF0aW9uLTE1MCB0cmFuc2l0aW9uLWNvbG9ycyBwLXJpcHBsZVwiXHJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidyaWdodCdcIlxyXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIiFleHBhbmRNZW51ID8gbWVudS5kZXNjcmljYW9tZW51IDogJydcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIiFleHBhbmRNZW51ID8gZXhwYW5kTWVudSA9ICFleHBhbmRNZW51IDogJydcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaWNvbi1tZW51IHt7ZXhwYW5kTWVudSA/ICdtbC0xIG1yLTInIDogJyd9fSBpY29uLWhvdmVyLWNvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm1lbnUuaWNvbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaG92ZXItY29sb3InOiBtb3VzZU92ZXJJbmRleCA9PT0gaX1cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBtZW51Lmljb25lIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtYmFzZSB0ZXh0LWJsdWUtOTAwIGZvbnQtbWVkaXVtXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImV4cGFuZE1lbnVcIj57eyBtZW51LmRlc2NyaWNhb21lbnUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGkgcGktY2hldnJvbi1kb3duIHRleHQtYmx1ZS05MDAgbXItMSBpY29uLWhvdmVyLWNvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJleHBhbmRNZW51XCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydob3Zlci1jb2xvcic6IG1vdXNlT3ZlckluZGV4ID09PSBpfVwiPjwvaT5cclxuICAgICAgICAgICAgICA8L2E+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gZmlsaG9zIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibGlzdC1ub25lIHB5LTAgcGwtMyBwci0wIG0tMCBoaWRkZW4gb3ZlcmZsb3cteS1oaWRkZW4gdHJhbnNpdGlvbi1hbGwgdHJhbnNpdGlvbi1kdXJhdGlvbi00MDAgdHJhbnNpdGlvbi1lYXNlLWluLW91dFwiPlxyXG4gICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgIGxldCBmaWxobyBvZiByZXRvcm5hck1lbnVGaWxob3MobWVudS5pZGFwbGljYXRpdm8sIG1lbnUuaWRtZW51KTsgIGxldCBpRmlsaG8gPSBpbmRleFxyXG4gICAgICAgICAgICBcIj5cclxuICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJvbk1vdXNlRmlsaG9FbnRlcihmaWxoby5pZG1lbnUpXCJcclxuICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJvbk1vdXNlTGVhdmUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydob3Zlci1jb2xvcic6IG1vdXNlT3ZlckZpbGhvSW5kZXggPT09IGZpbGhvLmlkbWVudX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZXhwYW5kTWVudVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbGxSb3V0ZShmaWxoby5saW5rKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgcFJpcHBsZVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3t2ZXJpZmljYXJQYWdpbmFTZWxlY2lvbmFkYShmaWxoby5saW5rKSA/ICdiZy1ncmVlbi02MDAnIDogJyd9fSBtZW51LW9wdGlvbiBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBuby11bmRlcmxpbmUgY3Vyc29yLXBvaW50ZXIgYm9yZGVyLXJvdW5kIHRleHQtNzAwIGhvdmVyOmJnLWdyZWVuLTYwMCB0cmFuc2l0aW9uLWR1cmF0aW9uLTE1MCB0cmFuc2l0aW9uLWNvbG9ycyBwLXJpcHBsZSBwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpY29uLW1lbnUge3tleHBhbmRNZW51ID8gJ21sLTEgbXItMicgOiAnJ319IGljb24taG92ZXItY29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmlsaG8uaWNvbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaG92ZXItY29sb3InOiBtb3VzZU92ZXJJbmRleCA9PT0gaX1cIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBmaWxoby5pY29uZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1iYXNlIHRleHQtYmx1ZS05MDAgbWwtNCB7e3ZlcmlmaWNhclBhZ2luYVNlbGVjaW9uYWRhKGZpbGhvLmxpbmspID8gJ3RleHQtd2hpdGUnIDogJyd9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImV4cGFuZE1lbnVcIj57eyBmaWxoby5kZXNjcmljYW9tZW51IH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9wLXNpZGViYXI+XHJcblxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cInctYXV0byBoLXNjcmVlbiBwYWdlLWNvbnRlbnQgb3ZlcmZsb3cteS1oaWRkZW5cIlxyXG4gICAgICBpZD1cInBhZ2UtY29udGVudFwiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG0tM1wiPlxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICA8cCBjbGFzcz1cInRleHQteGwgZm9udC1zZW1pYm9sZCB0ZXh0LWJsdWUtOTAwIGJyZWFkY3J1bWItdGl0bGVcIj57e2JyZWFkQ3J1bWJJdGVtc1ticmVhZENydW1iSXRlbXMubGVuZ3RoIC0gMV0/LmxhYmVsfX08L3A+XHJcbiAgICAgICAgICA8cC1icmVhZGNydW1iXHJcbiAgICAgICAgICAgICpuZ0lmPVwid2lkdGhDYXJkID4gNDAwXCJcclxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cImJvcmRlci1ub25lIHAtMCBmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBoLTJyZW0gIWltcG9ydGFudDtcIlxyXG4gICAgICAgICAgICBbbW9kZWxdPVwiYnJlYWRDcnVtYkl0ZW1zXCJcclxuICAgICAgICAgICAgW3N0eWxlXT1cIntiYWNrZ3JvdW5kQ29sb3I6ICcjZDRkM2QzJ31cIlxyXG4gICAgICAgICAgICAob25JdGVtQ2xpY2spPVwiY2FsbFJvdXRlKCRldmVudC5pdGVtLnJvdXRlckxpbmssIHRydWUpXCI+PC9wLWJyZWFkY3J1bWI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LWF1dG8gZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuXHJcbiAgICAgICAgICA8cC1idXR0b25cclxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInctMnJlbSBoLTJyZW0gdGV4dC1ibHVlLTkwMCBob3ZlcjpiZy1ncmVlbi02MDAgaG92ZXI6dGV4dC13aGl0ZVwiXHJcbiAgICAgICAgICAgIGljb249XCJwaSBwaS10aC1sYXJnZVwiXHJcbiAgICAgICAgICAgIFtyb3VuZGVkXT1cInRydWVcIlxyXG4gICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInNpc3RlbWFzUGFuZWwudG9nZ2xlKCRldmVudClcIlxyXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ1Npc3RlbWFzJ1wiXHJcbiAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCI+PC9wLWJ1dHRvbj5cclxuXHJcbiAgICAgICAgICA8cC1idXR0b25cclxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInctMnJlbSBoLTJyZW0gdGV4dC1ibHVlLTkwMCBob3ZlcjpiZy1ncmVlbi02MDAgaG92ZXI6dGV4dC13aGl0ZVwiXHJcbiAgICAgICAgICAgIGljb249XCJwaSBwaS11c2VyXCJcclxuICAgICAgICAgICAgW3JvdW5kZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxyXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ01lbnUgZG8gVXN1w6FyaW8nXCJcclxuICAgICAgICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCInbGVmdCdcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwibWV1c0RhZG9zUGFuZWwudG9nZ2xlKCRldmVudClcIj48L3AtYnV0dG9uPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8cC1jYXJkXHJcbiAgICAgICAgY2xhc3M9XCJjYXJkLWNvbnRhaW5lclwiXHJcbiAgICAgICAgc3R5bGVDbGFzcz1cIm0tMyBib3JkZXItbm9yb3VuZCBvdmVyZmxvdy15LWF1dG8gY2FyZC1jb250YWluZXJcIlxyXG4gICAgICAgIFtzdHlsZV09XCJ7aGVpZ2h0OiBoZWlndGhDYXJkIC0gYWp1c3RhckhlaWd0aENhcmQoKSArICdweCd9XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29udGFpbmVyIHctZnVsbFwiIFtzdHlsZV09XCJ7d2lkdGg6IHdpZHRoQ2FyZCArICdweCd9XCI+XHJcbiAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvcC1jYXJkPlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxwLW92ZXJsYXlQYW5lbFxyXG4gICAgICAjc2lzdGVtYXNQYW5lbFxyXG4gICAgICBbc2hvd1RyYW5zaXRpb25PcHRpb25zXT1cIiczNTBtcyBlYXNlLW91dCdcIlxyXG4gICAgICBbaGlkZVRyYW5zaXRpb25PcHRpb25zXT1cIicyNTBtcyBlYXNlLWluJ1wiPlxyXG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY29udGFpbmVyXCI+XHJcbiAgICAgICAgPHAgY2xhc3M9XCJ0aXRsZS1zdHlsZSBtdC0zXCI+U2lzdGVtYXM8L3A+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGZsZXgtd3JhcCBnYXAtMiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBtdC01IG1iLTNcIlxyXG4gICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMjUwcHg7IGhlaWdodDogMTAwJTtcIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFwbGljYXRpdm8gb2YgYXBsaWNhdGl2b3NcIlxyXG4gICAgICAgICAgICBwQnV0dG9uXHJcbiAgICAgICAgICAgIHBSaXBwbGVcclxuICAgICAgICAgICAgY2xhc3M9XCJidG4tc2lzdGVtYS0yIGJ0bi1zaXN0ZW1hIGhvdmVyLWJ0bi1jb3ItcGFkcmFvIHJlbW92ZS1mb2N1cyBoLTRyZW0gdy00cmVtXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImRlZmluaXJNZW51c1BvclNpc3RlbWEoYXBsaWNhdGl2by5pZGFwbGljYXRpdm8pXCJcclxuICAgICAgICAgICAgW3BUb29sdGlwXT1cImFwbGljYXRpdm8/LmRlc2NyaWNhb2FwbGljYXRpdm9cIlxyXG4gICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIidsZWZ0J1wiPlxyXG4gICAgICAgICAgICB7eyBhcGxpY2F0aXZvLm5vbWVhcGxpY2F0aXZvLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpIH19XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvcC1vdmVybGF5UGFuZWw+XHJcblxyXG4gICAgPHAtb3ZlcmxheVBhbmVsXHJcbiAgICAgICNtZXVzRGFkb3NQYW5lbFxyXG4gICAgICBbc2hvd1RyYW5zaXRpb25PcHRpb25zXT1cIiczNTBtcyBlYXNlLW91dCdcIlxyXG4gICAgICBbaGlkZVRyYW5zaXRpb25PcHRpb25zXT1cIicyNTBtcyBlYXNlLWluJ1wiPlxyXG5cclxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNvbnRhaW5lclwiPlxyXG5cclxuICAgICAgICA8cCBjbGFzcz1cInRpdGxlLXN0eWxlIG10LTNcIj5PbMOhLCB7e25vbWVVc3VhcmlvID9cclxuICAgICAgICAgIG5vbWVVc3VhcmlvLnNwbGl0KCcgJylbMF0gOiAnVXN1w6FyaW8nfX0gITwvcD5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNSBtYi0zXCI+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8cC1idXR0b25cclxuICAgICAgICAgIGljb249XCJwaSBwaS1sb2NrXCJcclxuICAgICAgICAgIGxhYmVsPVwiR2Vyw6puY2lhciBLZWV2b1Bhc3NcIlxyXG4gICAgICAgICAgKG9uQ2xpY2spPVwiZ2VyZW5jaWFyS2VlUGFzcygkZXZlbnQpXCJcclxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJib3JkZXItbm9yb3VuZCB3LWZ1bGwgdGV4dC1ibHVlLTkwMFwiXHJcbiAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCI+PC9wLWJ1dHRvbj5cclxuICAgICAgICA8cC1idXR0b25cclxuICAgICAgICAgIGljb249XCJwaSBwaS1zaWduLW91dFwiXHJcbiAgICAgICAgICBsYWJlbD1cIlNhaXJcIlxyXG4gICAgICAgICAgKG9uQ2xpY2spPVwic2FpcigkZXZlbnQpXCJcclxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJib3JkZXItbm9yb3VuZCB3LWZ1bGwgdGV4dC1ibHVlLTkwMFwiXHJcbiAgICAgICAgICBbdGV4dF09XCJ0cnVlXCI+PC9wLWJ1dHRvbj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8L3Atb3ZlcmxheVBhbmVsPiJdfQ==