design-angular-kit 1.0.0-1 → 1.0.0-2

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 (217) hide show
  1. package/README.md +152 -18
  2. package/assets/i18n/it.json +81 -0
  3. package/esm2020/lib/abstracts/abstract-form-component.mjs +165 -0
  4. package/esm2020/lib/abstracts/abstract.component.mjs +20 -0
  5. package/esm2020/lib/components/core/accordion/accordion.component.mjs +20 -0
  6. package/esm2020/lib/components/core/alert/alert.component.mjs +29 -0
  7. package/esm2020/lib/components/core/badge/badge.directive.mjs +34 -0
  8. package/esm2020/lib/components/core/button/button.directive.mjs +78 -0
  9. package/esm2020/lib/components/core/callout/callout.component.mjs +59 -0
  10. package/esm2020/lib/components/core/card/card.component.mjs +58 -0
  11. package/esm2020/lib/components/core/carousel/carousel/carousel.component.mjs +66 -0
  12. package/esm2020/lib/components/core/carousel/carousel-item/carousel-item.component.mjs +14 -0
  13. package/esm2020/lib/components/core/chip/chip.component.mjs +89 -0
  14. package/esm2020/lib/components/core/collapse/collapse.component.mjs +96 -0
  15. package/esm2020/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.mjs +24 -0
  16. package/esm2020/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.mjs +11 -0
  17. package/esm2020/lib/components/core/dimmer/dimmer.component.mjs +59 -0
  18. package/esm2020/lib/components/core/dropdown/dropdown/dropdown.component.mjs +60 -0
  19. package/esm2020/lib/components/core/dropdown/dropdown-item/dropdown-item.component.mjs +71 -0
  20. package/esm2020/lib/components/core/forward/forward.directive.mjs +51 -0
  21. package/esm2020/lib/components/core/link/link.component.mjs +39 -0
  22. package/esm2020/lib/components/core/list/list/list.component.mjs +13 -0
  23. package/esm2020/lib/components/core/list/list-item/list-item.component.mjs +36 -0
  24. package/esm2020/lib/components/core/modal/modal.component.mjs +98 -0
  25. package/esm2020/lib/components/core/notifications/notifications.component.mjs +66 -0
  26. package/esm2020/lib/components/core/pagination/pagination.component.mjs +51 -0
  27. package/esm2020/lib/components/core/popover/popover.directive.mjs +176 -0
  28. package/esm2020/lib/components/core/progress-bar/progress-bar.component.mjs +34 -0
  29. package/esm2020/lib/components/core/progress-button/progress-button.component.mjs +27 -0
  30. package/esm2020/lib/components/core/spinner/spinner.component.mjs +35 -0
  31. package/esm2020/lib/components/core/tab/tab-container/tab-container.component.mjs +33 -0
  32. package/esm2020/lib/components/core/tab/tab-item/tab-item.component.mjs +36 -0
  33. package/esm2020/lib/components/core/table/table.component.mjs +57 -0
  34. package/esm2020/lib/components/core/tooltip/tooltip.directive.mjs +140 -0
  35. package/esm2020/lib/components/form/checkbox/checkbox.component.mjs +40 -0
  36. package/esm2020/lib/components/form/input/input.component.mjs +159 -0
  37. package/esm2020/lib/components/form/password-input/password-input.component.mjs +112 -0
  38. package/esm2020/lib/components/form/radio-button/radio-button.component.mjs +53 -0
  39. package/esm2020/lib/components/form/select/select.component.mjs +62 -0
  40. package/esm2020/lib/components/form/textarea/textarea.component.mjs +46 -0
  41. package/esm2020/lib/components/form/upload-drag-drop/upload-drag-drop.component.mjs +134 -0
  42. package/esm2020/lib/components/form/upload-file-list/upload-file-list.component.mjs +99 -0
  43. package/esm2020/lib/components/navigation/back-button/back-button.component.mjs +69 -0
  44. package/esm2020/lib/components/navigation/back-to-top/back-to-top.component.mjs +39 -0
  45. package/esm2020/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.mjs +45 -0
  46. package/esm2020/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.mjs +23 -0
  47. package/esm2020/lib/components/navigation/header/header.component.mjs +61 -0
  48. package/esm2020/lib/components/utils/icon/icon.component.mjs +54 -0
  49. package/esm2020/lib/components/utils/not-found-page/not-found-page.component.mjs +13 -0
  50. package/esm2020/lib/design-angular-kit.module.mjs +32 -132
  51. package/esm2020/lib/interfaces/core.mjs +16 -0
  52. package/esm2020/lib/interfaces/form.mjs +2 -0
  53. package/esm2020/lib/interfaces/icon.mjs +2 -0
  54. package/esm2020/lib/modules/components.module.mjs +241 -0
  55. package/esm2020/lib/services/notifications/notifications.service.mjs +122 -0
  56. package/esm2020/lib/utils/boolean-input.mjs +15 -0
  57. package/esm2020/lib/utils/file-utils.mjs +65 -0
  58. package/esm2020/lib/utils/regex.mjs +26 -0
  59. package/esm2020/lib/validators/it-validators.mjs +131 -0
  60. package/esm2020/public_api.mjs +60 -36
  61. package/fesm2015/design-angular-kit.mjs +2750 -2660
  62. package/fesm2015/design-angular-kit.mjs.map +1 -1
  63. package/fesm2020/design-angular-kit.mjs +2726 -2655
  64. package/fesm2020/design-angular-kit.mjs.map +1 -1
  65. package/lib/abstracts/abstract-form-component.d.ts +84 -0
  66. package/lib/abstracts/abstract.component.d.ts +14 -0
  67. package/lib/components/core/accordion/accordion.component.d.ts +16 -0
  68. package/lib/components/core/alert/alert.component.d.ts +17 -0
  69. package/lib/components/core/badge/badge.directive.d.ts +16 -0
  70. package/lib/components/core/button/button.directive.d.ts +38 -0
  71. package/lib/components/core/callout/callout.component.d.ts +36 -0
  72. package/lib/components/core/card/card.component.d.ts +41 -0
  73. package/lib/components/core/carousel/carousel/carousel.component.d.ts +46 -0
  74. package/lib/components/core/carousel/carousel-item/carousel-item.component.d.ts +10 -0
  75. package/lib/components/core/chip/chip.component.d.ts +62 -0
  76. package/lib/components/core/collapse/collapse.component.d.ts +59 -0
  77. package/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.d.ts +12 -0
  78. package/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.d.ts +5 -0
  79. package/lib/components/core/dimmer/dimmer.component.d.ts +24 -0
  80. package/lib/components/core/dropdown/dropdown/dropdown.component.d.ts +43 -0
  81. package/lib/components/core/dropdown/dropdown-item/dropdown-item.component.d.ts +44 -0
  82. package/lib/components/core/forward/forward.directive.d.ts +14 -0
  83. package/lib/components/core/link/link.component.d.ts +34 -0
  84. package/lib/components/core/list/list/list.component.d.ts +10 -0
  85. package/lib/components/core/list/list-item/list-item.component.d.ts +24 -0
  86. package/lib/components/core/modal/modal.component.d.ts +59 -0
  87. package/lib/components/core/notifications/notifications.component.d.ts +30 -0
  88. package/lib/components/core/pagination/pagination.component.d.ts +31 -0
  89. package/lib/components/core/popover/popover.directive.d.ts +97 -0
  90. package/lib/components/core/progress-bar/progress-bar.component.d.ts +28 -0
  91. package/lib/components/core/progress-button/progress-button.component.d.ts +22 -0
  92. package/lib/components/core/spinner/spinner.component.d.ts +21 -0
  93. package/lib/components/core/tab/tab-container/tab-container.component.d.ts +28 -0
  94. package/lib/components/core/tab/tab-item/tab-item.component.d.ts +34 -0
  95. package/lib/components/core/table/table.component.d.ts +54 -0
  96. package/lib/components/core/tooltip/tooltip.directive.d.ts +80 -0
  97. package/lib/components/form/checkbox/checkbox.component.d.ts +30 -0
  98. package/lib/components/form/input/input.component.d.ts +66 -0
  99. package/lib/components/form/password-input/password-input.component.d.ts +54 -0
  100. package/lib/components/form/radio-button/radio-button.component.d.ts +29 -0
  101. package/lib/components/form/select/select.component.d.ts +30 -0
  102. package/lib/components/form/textarea/textarea.component.d.ts +24 -0
  103. package/lib/components/form/upload-drag-drop/upload-drag-drop.component.d.ts +53 -0
  104. package/lib/components/form/upload-file-list/upload-file-list.component.d.ts +57 -0
  105. package/lib/components/navigation/back-button/back-button.component.d.ts +47 -0
  106. package/lib/components/navigation/back-to-top/back-to-top.component.d.ts +27 -0
  107. package/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.d.ts +30 -0
  108. package/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.d.ts +22 -0
  109. package/lib/components/navigation/header/header.component.d.ts +28 -0
  110. package/lib/components/utils/icon/icon.component.d.ts +40 -0
  111. package/lib/components/utils/not-found-page/not-found-page.component.d.ts +5 -0
  112. package/lib/design-angular-kit.module.d.ts +4 -24
  113. package/lib/interfaces/core.d.ts +36 -0
  114. package/lib/interfaces/form.d.ts +43 -0
  115. package/lib/interfaces/icon.d.ts +3 -0
  116. package/lib/modules/components.module.d.ts +57 -0
  117. package/lib/services/notifications/notifications.service.d.ts +63 -0
  118. package/lib/utils/boolean-input.d.ts +11 -0
  119. package/lib/utils/file-utils.d.ts +27 -0
  120. package/lib/utils/regex.d.ts +25 -0
  121. package/lib/validators/it-validators.d.ts +58 -0
  122. package/package.json +20 -13
  123. package/public_api.d.ts +53 -35
  124. package/esm2020/lib/badge/badge.directive.mjs +0 -83
  125. package/esm2020/lib/breadcrumb/breadcrumb-item.component.mjs +0 -66
  126. package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +0 -89
  127. package/esm2020/lib/button/button.directive.mjs +0 -185
  128. package/esm2020/lib/button/button.module.mjs +0 -18
  129. package/esm2020/lib/checkbox/checkbox.component.mjs +0 -138
  130. package/esm2020/lib/collapse/collapse-group.component.mjs +0 -57
  131. package/esm2020/lib/collapse/collapse-item.component.mjs +0 -79
  132. package/esm2020/lib/collapse/collapse.config.mjs +0 -12
  133. package/esm2020/lib/collapse/collapse.directive.mjs +0 -55
  134. package/esm2020/lib/collapse/collapse.module.mjs +0 -22
  135. package/esm2020/lib/dropdown/dropdown-divider.component.mjs +0 -11
  136. package/esm2020/lib/dropdown/dropdown-item.component.mjs +0 -97
  137. package/esm2020/lib/dropdown/dropdown.component.mjs +0 -143
  138. package/esm2020/lib/dropdown/dropdown.config.mjs +0 -12
  139. package/esm2020/lib/dropdown/dropdown.directive.mjs +0 -156
  140. package/esm2020/lib/dropdown/dropdown.module.mjs +0 -25
  141. package/esm2020/lib/enums/icons.enum.mjs +0 -27
  142. package/esm2020/lib/form-input/form-input-password.utils.mjs +0 -154
  143. package/esm2020/lib/form-input/form-input.component.mjs +0 -495
  144. package/esm2020/lib/form-input/it-prefix.directive.mjs +0 -13
  145. package/esm2020/lib/form-input/it-suffix.directive.mjs +0 -13
  146. package/esm2020/lib/form-input/it-text-prefix.directive.mjs +0 -13
  147. package/esm2020/lib/form-input/it-text-suffix.directive.mjs +0 -13
  148. package/esm2020/lib/form-input/mark-matching-text.pipe.mjs +0 -36
  149. package/esm2020/lib/icon/icon.component.mjs +0 -87
  150. package/esm2020/lib/icon/icon.module.mjs +0 -18
  151. package/esm2020/lib/models/Alignment.mjs +0 -15
  152. package/esm2020/lib/models/ButtonSize.mjs +0 -15
  153. package/esm2020/lib/models/InputType.mjs +0 -44
  154. package/esm2020/lib/models/ThemeColor.mjs +0 -30
  155. package/esm2020/lib/popover/popover.config.mjs +0 -17
  156. package/esm2020/lib/popover/popover.directive.mjs +0 -33
  157. package/esm2020/lib/popover/popover.module.mjs +0 -19
  158. package/esm2020/lib/progress-bar/progress-bar.component.mjs +0 -98
  159. package/esm2020/lib/radio/radio.component.mjs +0 -287
  160. package/esm2020/lib/radio/unique-selection-dispatcher.mjs +0 -55
  161. package/esm2020/lib/tabs/tab-group.component.mjs +0 -177
  162. package/esm2020/lib/tabs/tab.component.mjs +0 -73
  163. package/esm2020/lib/tabs/tabs.module.mjs +0 -20
  164. package/esm2020/lib/toggle/toggle.component.mjs +0 -86
  165. package/esm2020/lib/tooltip/tooltip.config.mjs +0 -17
  166. package/esm2020/lib/tooltip/tooltip.directive.mjs +0 -43
  167. package/esm2020/lib/tooltip/tooltip.module.mjs +0 -19
  168. package/esm2020/lib/util/focus-mouse.directive.mjs +0 -32
  169. package/esm2020/lib/util/util.mjs +0 -12
  170. package/esm2020/lib/util/utils.module.mjs +0 -16
  171. package/lib/badge/badge.directive.d.ts +0 -33
  172. package/lib/breadcrumb/breadcrumb-item.component.d.ts +0 -33
  173. package/lib/breadcrumb/breadcrumb.component.d.ts +0 -33
  174. package/lib/button/button.directive.d.ts +0 -72
  175. package/lib/button/button.module.d.ts +0 -8
  176. package/lib/checkbox/checkbox.component.d.ts +0 -61
  177. package/lib/collapse/collapse-group.component.d.ts +0 -16
  178. package/lib/collapse/collapse-item.component.d.ts +0 -46
  179. package/lib/collapse/collapse.config.d.ts +0 -6
  180. package/lib/collapse/collapse.directive.d.ts +0 -25
  181. package/lib/collapse/collapse.module.d.ts +0 -12
  182. package/lib/dropdown/dropdown-divider.component.d.ts +0 -5
  183. package/lib/dropdown/dropdown-item.component.d.ts +0 -56
  184. package/lib/dropdown/dropdown.component.d.ts +0 -65
  185. package/lib/dropdown/dropdown.config.d.ts +0 -6
  186. package/lib/dropdown/dropdown.directive.d.ts +0 -77
  187. package/lib/dropdown/dropdown.module.d.ts +0 -15
  188. package/lib/enums/icons.enum.d.ts +0 -23
  189. package/lib/form-input/form-input-password.utils.d.ts +0 -45
  190. package/lib/form-input/form-input.component.d.ts +0 -283
  191. package/lib/form-input/it-prefix.directive.d.ts +0 -5
  192. package/lib/form-input/it-suffix.directive.d.ts +0 -5
  193. package/lib/form-input/it-text-prefix.directive.d.ts +0 -5
  194. package/lib/form-input/it-text-suffix.directive.d.ts +0 -5
  195. package/lib/form-input/mark-matching-text.pipe.d.ts +0 -10
  196. package/lib/icon/icon.component.d.ts +0 -34
  197. package/lib/icon/icon.module.d.ts +0 -8
  198. package/lib/models/Alignment.d.ts +0 -12
  199. package/lib/models/ButtonSize.d.ts +0 -11
  200. package/lib/models/InputType.d.ts +0 -36
  201. package/lib/models/ThemeColor.d.ts +0 -21
  202. package/lib/popover/popover.config.d.ts +0 -11
  203. package/lib/popover/popover.directive.d.ts +0 -20
  204. package/lib/popover/popover.module.d.ts +0 -9
  205. package/lib/progress-bar/progress-bar.component.d.ts +0 -55
  206. package/lib/radio/radio.component.d.ts +0 -116
  207. package/lib/radio/unique-selection-dispatcher.d.ts +0 -36
  208. package/lib/tabs/tab-group.component.d.ts +0 -71
  209. package/lib/tabs/tab.component.d.ts +0 -44
  210. package/lib/tabs/tabs.module.d.ts +0 -10
  211. package/lib/toggle/toggle.component.d.ts +0 -46
  212. package/lib/tooltip/tooltip.config.d.ts +0 -11
  213. package/lib/tooltip/tooltip.directive.d.ts +0 -27
  214. package/lib/tooltip/tooltip.module.d.ts +0 -9
  215. package/lib/util/focus-mouse.directive.d.ts +0 -13
  216. package/lib/util/util.d.ts +0 -5
  217. package/lib/util/utils.module.d.ts +0 -7
@@ -1,154 +0,0 @@
1
- /**
2
- * Classe di utility creata sulla base del seguente sorgente di bootstrap-italia: https://github.com/italia/bootstrap-italia/blob/main/src/js/plugins/input-password.js
3
- * TODO: Da sostituire una volta che i metodi scoreText, scoreColor, e calculateScore
4
- * saranno importabili dalla libreria bootstrap-italia.
5
- */
6
- export class FormInputPasswordUtils {
7
- constructor(_config) {
8
- this._config = _config;
9
- }
10
- /**
11
- * Returns a value between -1 and 100 to score
12
- * the user's password.
13
- *
14
- * @param string password The password to be checked.
15
- * @return int
16
- */
17
- calculateScore(password) {
18
- var score = 0;
19
- // empty password
20
- if (password.trim().length === 0) {
21
- return -2;
22
- }
23
- // password < this._config.minimumLength
24
- if (password.length < this._config.minimumLength) {
25
- return -1;
26
- }
27
- // password length
28
- score += password.length * 4;
29
- score += this._checkRepetition(1, password).length - password.length;
30
- score += this._checkRepetition(2, password).length - password.length;
31
- score += this._checkRepetition(3, password).length - password.length;
32
- score += this._checkRepetition(4, password).length - password.length;
33
- // password has 3 numbers
34
- if (password.match(/(.*[0-9].*[0-9].*[0-9])/)) {
35
- score += 5;
36
- }
37
- // password has at least 2 sybols
38
- let symbols = '.*[!,@,#,$,%,^,&,*,?,_,~]';
39
- symbols = new RegExp('(' + symbols + symbols + ')');
40
- if (password.match(symbols)) {
41
- score += 5;
42
- }
43
- // password has Upper and Lower chars
44
- if (password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)) {
45
- score += 10;
46
- }
47
- // password has number and chars
48
- if (password.match(/([a-zA-Z])/) && password.match(/([0-9])/)) {
49
- score += 15;
50
- }
51
- // password has number and symbol
52
- if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([0-9])/)) {
53
- score += 15;
54
- }
55
- // password has char and symbol
56
- if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([a-zA-Z])/)) {
57
- score += 15;
58
- }
59
- // password is just numbers or chars
60
- if (password.match(/^\w+$/) || password.match(/^\d+$/)) {
61
- score -= 10;
62
- }
63
- if (score > 100) {
64
- score = 100;
65
- }
66
- if (score < 0) {
67
- score = 0;
68
- }
69
- return score;
70
- }
71
- /**
72
- * Checks for repetition of characters in
73
- * a string
74
- *
75
- * @param int rLen Repetition length.
76
- * @param string str The string to be checked.
77
- * @return string
78
- */
79
- _checkRepetition(rLen, str) {
80
- var res = '', repeated = false;
81
- for (var i = 0; i < str.length; i++) {
82
- repeated = true;
83
- for (var j = 0; j < rLen && j + i + rLen < str.length; j++) {
84
- repeated = repeated && str.charAt(j + i) === str.charAt(j + i + rLen);
85
- }
86
- if (j < rLen) {
87
- repeated = false;
88
- }
89
- if (repeated) {
90
- i += rLen - 1;
91
- repeated = false;
92
- }
93
- else {
94
- res += str.charAt(i);
95
- }
96
- }
97
- return res;
98
- }
99
- /**
100
- * Returns strings based on the score given.
101
- *
102
- * @param int score Score base.
103
- * @return string
104
- */
105
- scoreText(score) {
106
- if (score === -1) {
107
- return this._config.shortPass;
108
- }
109
- else if (score === -2) {
110
- return this._config.enterPass;
111
- }
112
- score = score < 0 ? 0 : score;
113
- if (score < 26) {
114
- return this._config.shortPass;
115
- }
116
- if (score < 51) {
117
- return this._config.badPass;
118
- }
119
- if (score < 76) {
120
- return this._config.goodPass;
121
- }
122
- return this._config.strongPass;
123
- }
124
- scoreColor(score) {
125
- if (score === -1) {
126
- return 'danger';
127
- }
128
- if (score === -2) {
129
- return 'muted';
130
- }
131
- score = score < 0 ? 0 : score;
132
- if (score < 26) {
133
- return 'danger';
134
- }
135
- if (score < 51) {
136
- return 'warning';
137
- }
138
- if (score < 76) {
139
- return 'success';
140
- }
141
- return 'success';
142
- }
143
- }
144
- FormInputPasswordUtils.DEFAULT_CONFIG = {
145
- shortPass: 'Password molto debole',
146
- badPass: 'Password debole',
147
- goodPass: 'Password sicura',
148
- strongPass: 'Password molto sicura',
149
- enterPass: 'Inserisci almeno 8 caratteri e una lettera maiuscola',
150
- alertCaps: 'CAPS LOCK inserito',
151
- showText: true,
152
- minimumLength: 4,
153
- };
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1pbnB1dC1wYXNzd29yZC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL2Zvcm0taW5wdXQvZm9ybS1pbnB1dC1wYXNzd29yZC51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLHNCQUFzQjtJQWFqQyxZQUFvQixPQUFvQztRQUFwQyxZQUFPLEdBQVAsT0FBTyxDQUE2QjtJQUFHLENBQUM7SUFFMUQ7Ozs7OztLQU1DO0lBQ0ksY0FBYyxDQUFDLFFBQWdCO1FBQ3BDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQTtRQUViLGlCQUFpQjtRQUNqQixJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ2hDLE9BQU8sQ0FBQyxDQUFDLENBQUE7U0FDVjtRQUVELHdDQUF3QztRQUN4QyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDaEQsT0FBTyxDQUFDLENBQUMsQ0FBQTtTQUNWO1FBRUQsa0JBQWtCO1FBQ2xCLEtBQUssSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQTtRQUM1QixLQUFLLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQTtRQUNwRSxLQUFLLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQTtRQUNwRSxLQUFLLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQTtRQUNwRSxL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Q0FBQTtTQUNqQjtRQUNELElBQUksS0FBSyxHQUFHLEVBQUUsRUFBRTtZQUNkLE9BQU8sU0FBUyxDQUFBO1NBQ2pCO1FBRUQsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQzs7QUF2S3NCLHFDQUFjLEdBQUk7SUFDdkMsU0FBUyxFQUFFLHVCQUF1QjtJQUNsQyxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFFBQVEsRUFBRSxpQkFBaUI7SUFDM0IsVUFBVSxFQUFFLHVCQUF1QjtJQUNuQyxTQUFTLEVBQUUsc0RBQXNEO0lBQ2pFLFNBQVMsRUFBRSxvQkFBb0I7SUFDL0IsUUFBUSxFQUFFLElBQUk7SUFDZCxhQUFhLEVBQUUsQ0FBQztDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFzc3dvcmRTdHJlbmd0aE1ldGVyQ29uZmlnIH0gZnJvbSBcIi4vZm9ybS1pbnB1dC5jb21wb25lbnRcIlxuXG4vKipcbiAqIENsYXNzZSBkaSB1dGlsaXR5IGNyZWF0YSBzdWxsYSBiYXNlIGRlbCBzZWd1ZW50ZSBzb3JnZW50ZSBkaSBib290c3RyYXAtaXRhbGlhOiBodHRwczovL2dpdGh1Yi5jb20vaXRhbGlhL2Jvb3RzdHJhcC1pdGFsaWEvYmxvYi9tYWluL3NyYy9qcy9wbHVnaW5zL2lucHV0LXBhc3N3b3JkLmpzXG4gKiBUT0RPOiBEYSBzb3N0aXR1aXJlIHVuYSB2b2x0YSBjaGUgaSBtZXRvZGkgc2NvcmVUZXh0LCBzY29yZUNvbG9yLCBlIGNhbGN1bGF0ZVNjb3JlIFxuICogc2FyYW5ubyBpbXBvcnRhYmlsaSBkYWxsYSBsaWJyZXJpYSBib290c3RyYXAtaXRhbGlhLlxuICovXG5leHBvcnQgY2xhc3MgRm9ybUlucHV0UGFzc3dvcmRVdGlscyB7XG5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0NPTkZJRyA9ICB7XG4gICAgc2hvcnRQYXNzOiAnUGFzc3dvcmQgbW9sdG8gZGVib2xlJyxcbiAgICBiYWRQYXNzOiAnUGFzc3dvcmQgZGVib2xlJyxcbiAgICBnb29kUGFzczogJ1Bhc3N3b3JkIHNpY3VyYScsXG4gICAgc3Ryb25nUGFzczogJ1Bhc3N3b3JkIG1vbHRvIHNpY3VyYScsXG4gICAgZW50ZXJQYXNzOiAnSW5zZXJpc2NpIGFsbWVubyA4IGNhcmF0dGVyaSBlIHVuYSBsZXR0ZXJhIG1haXVzY29sYScsXG4gICAgYWxlcnRDYXBzOiAnQ0FQUyBMT0NLIGluc2VyaXRvJyxcbiAgICBzaG93VGV4dDogdHJ1ZSxcbiAgICBtaW5pbXVtTGVuZ3RoOiA0LFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NvbmZpZzogUGFzc3dvcmRTdHJlbmd0aE1ldGVyQ29uZmlnKSB7fVxuXG4gICAgLyoqXG4gICAqIFJldHVybnMgYSB2YWx1ZSBiZXR3ZWVuIC0xIGFuZCAxMDAgdG8gc2NvcmVcbiAgICogdGhlIHVzZXIncyBwYXNzd29yZC5cbiAgICpcbiAgICogQHBhcmFtICBzdHJpbmcgcGFzc3dvcmQgVGhlIHBhc3N3b3JkIHRvIGJlIGNoZWNrZWQuXG4gICAqIEByZXR1cm4gaW50XG4gICAqL1xuICBwdWJsaWMgY2FsY3VsYXRlU2NvcmUocGFzc3dvcmQ6IHN0cmluZykge1xuICAgIHZhciBzY29yZSA9IDBcblxuICAgIC8vIGVtcHR5IHBhc3N3b3JkXG4gICAgaWYgKHBhc3N3b3JkLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMlxuICAgIH1cblxuICAgIC8vIHBhc3N3b3JkIDwgdGhpcy5fY29uZmlnLm1pbmltdW1MZW5ndGhcbiAgICBpZiAocGFzc3dvcmQubGVuZ3RoIDwgdGhpcy5fY29uZmlnLm1pbmltdW1MZW5ndGgpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIC8vIHBhc3N3b3JkIGxlbmd0aFxuICAgIHNjb3JlICs9IHBhc3N3b3JkLmxlbmd0aCAqIDRcbiAgICBzY29yZSArPSB0aGlzLl9jaGVja1JlcGV0aXRpb24oMSwgcGFzc3dvcmQpLmxlbmd0aCAtIHBhc3N3b3JkLmxlbmd0aFxuICAgIHNjb3JlICs9IHRoaXMuX2NoZWNrUmVwZXRpdGlvbigyLCBwYXNzd29yZCkubGVuZ3RoIC0gcGFzc3dvcmQubGVuZ3RoXG4gICAgc2NvcmUgKz0gdGhpcy5fY2hlY2tSZXBldGl0aW9uKDMsIHBhc3N3b3JkKS5sZW5ndGggLSBwYXNzd29yZC5sZW5ndGhcbiAgICBzY29yZSArPSB0aGlzLl9jaGVja1JlcGV0aXRpb24oNCwgcGFzc3dvcmQpLmxlbmd0aCAtIHBhc3N3b3JkLmxlbmd0aFxuXG4gICAgLy8gcGFzc3dvcmQgaGFzIDMgbnVtYmVyc1xuICAgIGlmIChwYXNzd29yZC5tYXRjaCgvKC4qWzAtOV0uKlswLTldLipbMC05XSkvKSkge1xuICAgICAgc2NvcmUgKz0gNVxuICAgIH1cblxuICAgIC8vIHBhc3N3b3JkIGhhcyBhdCBsZWFzdCAyIHN5Ym9sc1xuICAgIGxldCBzeW1ib2xzOiBSZWdFeHAgfCBzdHJpbmcgPSAnLipbISxALCMsJCwlLF4sJiwqLD8sXyx+XSc7XG4gICAgc3ltYm9scyA9IG5ldyBSZWdFeHAoJygnICsgc3ltYm9scyArIHN5bWJvbHMgKyAnKScpXG4gICAgaWYgKHBhc3N3b3JkLm1hdGNoKHN5bWJvbHMpKSB7XG4gICAgICBzY29yZSArPSA1XG4gICAgfVxuXG4gICAgLy8gcGFzc3dvcmQgaGFzIFVwcGVyIGFuZCBMb3dlciBjaGFyc1xuICAgIGlmIChwYXNzd29yZC5tYXRjaCgvKFthLXpdLipbQS1aXSl8KFtBLVpdLipbYS16XSkvKSkge1xuICAgICAgc2NvcmUgKz0gMTBcbiAgICB9XG5cbiAgICAvLyBwYXNzd29yZCBoYXMgbnVtYmVyIGFuZCBjaGFyc1xuICAgIGlmIChwYXNzd29yZC5tYXRjaCgvKFthLXpBLVpdKS8pICYmIHBhc3N3b3JkLm1hdGNoKC8oWzAtOV0pLykpIHtcbiAgICAgIHNjb3JlICs9IDE1XG4gICAgfVxuXG4gICAgLy8gcGFzc3dvcmQgaGFzIG51bWJlciBhbmQgc3ltYm9sXG4gICAgaWYgKHBhc3N3b3JkLm1hdGNoKC8oWyEsQCwjLCQsJSxeLCYsKiw/LF8sfl0pLykgJiYgcGFzc3dvcmQubWF0Y2goLyhbMC05XSkvKSkge1xuICAgICAgc2NvcmUgKz0gMTVcbiAgICB9XG5cbiAgICAvLyBwYXNzd29yZCBoYXMgY2hhciBhbmQgc3ltYm9sXG4gICAgaWYgKHBhc3N3b3JkLm1hdGNoKC8oWyEsQCwjLCQsJSxeLCYsKiw/LF8sfl0pLykgJiYgcGFzc3dvcmQubWF0Y2goLyhbYS16QS1aXSkvKSkge1xuICAgICAgc2NvcmUgKz0gMTVcbiAgICB9XG5cbiAgICAvLyBwYXNzd29yZCBpcyBqdXN0IG51bWJlcnMgb3IgY2hhcnNcbiAgICBpZiAocGFzc3dvcmQubWF0Y2goL15cXHcrJC8pIHx8IHBhc3N3b3JkLm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgc2NvcmUgLT0gMTBcbiAgICB9XG5cbiAgICBpZiAoc2NvcmUgPiAxMDApIHtcbiAgICAgIHNjb3JlID0gMTAwXG4gICAgfVxuXG4gICAgaWYgKHNjb3JlIDwgMCkge1xuICAgICAgc2NvcmUgPSAwXG4gICAgfVxuXG4gICAgcmV0dXJuIHNjb3JlXG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGZvciByZXBldGl0aW9uIG9mIGNoYXJhY3RlcnMgaW5cbiAgICogYSBzdHJpbmdcbiAgICpcbiAgICogQHBhcmFtIGludCByTGVuIFJlcGV0aXRpb24gbGVuZ3RoLlxuICAgKiBAcGFyYW0gc3RyaW5nIHN0ciBUaGUgc3RyaW5nIHRvIGJlIGNoZWNrZWQuXG4gICAqIEByZXR1cm4gc3RyaW5nXG4gICAqL1xuICBwcml2YXRlIF9jaGVja1JlcGV0aXRpb24ockxlbiwgc3RyKSB7XG4gICAgdmFyIHJlcyA9ICcnLFxuICAgICAgcmVwZWF0ZWQgPSBmYWxzZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXBlYXRlZCA9IHRydWVcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgckxlbiAmJiBqICsgaSArIHJMZW4gPCBzdHIubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgcmVwZWF0ZWQgPSByZXBlYXRlZCAmJiBzdHIuY2hhckF0KGogKyBpKSA9PT0gc3RyLmNoYXJBdChqICsgaSArIHJMZW4pXG4gICAgICB9XG4gICAgICBpZiAoaiA8IHJMZW4pIHtcbiAgICAgICAgcmVwZWF0ZWQgPSBmYWxzZVxuICAgICAgfVxuICAgICAgaWYgKHJlcGVhdGVkKSB7XG4gICAgICAgIGkgKz0gckxlbiAtIDFcbiAgICAgICAgcmVwZWF0ZWQgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzICs9IHN0ci5jaGFyQXQoaSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgc3RyaW5ncyBiYXNlZCBvbiB0aGUgc2NvcmUgZ2l2ZW4uXG4gICAqXG4gICAqIEBwYXJhbSBpbnQgc2NvcmUgU2NvcmUgYmFzZS5cbiAgICogQHJldHVybiBzdHJpbmdcbiAgICovXG4gICBwdWJsaWMgc2NvcmVUZXh0KHNjb3JlKSB7XG5cbiAgICBpZiAoc2NvcmUgPT09IC0xKSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29uZmlnLnNob3J0UGFzcztcbiAgICB9IGVsc2UgaWYgKHNjb3JlID09PSAtMikge1xuICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5lbnRlclBhc3M7XG4gICAgfVxuXG4gICAgc2NvcmUgPSBzY29yZSA8IDAgPyAwIDogc2NvcmVcblxuICAgIGlmIChzY29yZSA8IDI2KSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29uZmlnLnNob3J0UGFzc1xuICAgIH1cbiAgICBpZiAoc2NvcmUgPCA1MSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5iYWRQYXNzXG4gICAgfVxuICAgIGlmIChzY29yZSA8IDc2KSB7XG4gICAgICByZXR1cm4gdGhpcy5fY29uZmlnLmdvb2RQYXNzXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5zdHJvbmdQYXNzXG4gIH1cblxuICBwdWJsaWMgc2NvcmVDb2xvcihzY29yZSkge1xuICAgIGlmIChzY29yZSA9PT0gLTEpIHtcbiAgICAgIHJldHVybiAnZGFuZ2VyJ1xuICAgIH1cbiAgICBpZiAoc2NvcmUgPT09IC0yKSB7XG4gICAgICByZXR1cm4gJ211dGVkJ1xuICAgIH1cblxuICAgIHNjb3JlID0gc2NvcmUgPCAwID8gMCA6IHNjb3JlXG5cbiAgICBpZiAoc2NvcmUgPCAyNikge1xuICAgICAgcmV0dXJuICdkYW5nZXInXG4gICAgfVxuICAgIGlmIChzY29yZSA8IDUxKSB7XG4gICAgICByZXR1cm4gJ3dhcm5pbmcnXG4gICAgfVxuICAgIGlmIChzY29yZSA8IDc2KSB7XG4gICAgICByZXR1cm4gJ3N1Y2Nlc3MnXG4gICAgfVxuXG4gICAgcmV0dXJuICdzdWNjZXNzJ1xuICB9XG59Il19