@angular/material 16.2.2 → 17.0.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (810) hide show
  1. package/_index.scss +21 -65
  2. package/autocomplete/index.d.ts +40 -71
  3. package/autocomplete/testing/index.d.ts +5 -23
  4. package/button/_button-base.scss +3 -3
  5. package/button/_button-theme-private.scss +3 -2
  6. package/button/_button-theme.scss +18 -25
  7. package/button/_fab-theme.scss +42 -48
  8. package/button/_icon-button-theme.scss +19 -26
  9. package/button/index.d.ts +22 -31
  10. package/card/_card-theme.scss +82 -51
  11. package/checkbox/_checkbox-theme.scss +72 -54
  12. package/checkbox/index.d.ts +22 -42
  13. package/checkbox/testing/index.d.ts +6 -12
  14. package/core/_core-theme.scss +24 -39
  15. package/core/index.d.ts +17 -28
  16. package/core/mdc-helpers/_mdc-helpers.scss +19 -22
  17. package/core/option/_optgroup-theme.scss +13 -23
  18. package/core/option/_option-theme.scss +23 -37
  19. package/core/ripple/_ripple-theme.scss +6 -10
  20. package/core/selection/pseudo-checkbox/_pseudo-checkbox-theme.scss +17 -24
  21. package/core/style/_private.scss +3 -3
  22. package/core/style/_sass-utils.scss +7 -0
  23. package/core/style/_validation.scss +43 -0
  24. package/core/theming/_inspection.scss +256 -0
  25. package/core/theming/_m2-inspection.scss +211 -0
  26. package/core/theming/_theming.scss +169 -16
  27. package/core/tokens/m2/mat/_card.scss +15 -21
  28. package/core/tokens/m2/mat/_form-field.scss +48 -19
  29. package/core/tokens/m2/mat/_optgroup.scss +12 -17
  30. package/core/tokens/m2/mat/_option.scss +16 -28
  31. package/core/tokens/m2/mat/_paginator.scss +16 -18
  32. package/core/tokens/m2/mat/_radio.scss +7 -10
  33. package/core/tokens/m2/mat/_slide-toggle.scss +9 -17
  34. package/core/tokens/m2/mat/_slider.scss +43 -0
  35. package/core/tokens/m2/mdc/_checkbox.scss +21 -20
  36. package/core/tokens/m2/mdc/_elevated-card.scss +6 -9
  37. package/core/tokens/m2/mdc/_extended-fab.scss +8 -17
  38. package/core/tokens/m2/mdc/_fab.scss +6 -7
  39. package/core/tokens/m2/mdc/_filled-text-field.scss +17 -23
  40. package/core/tokens/m2/mdc/_icon-button.scss +1 -1
  41. package/core/tokens/m2/mdc/_linear-progress.scss +9 -10
  42. package/core/tokens/m2/mdc/_list.scss +44 -42
  43. package/core/tokens/m2/mdc/_outlined-card.scss +7 -10
  44. package/core/tokens/m2/mdc/_outlined-text-field.scss +15 -21
  45. package/core/tokens/m2/mdc/_radio.scss +11 -11
  46. package/core/tokens/m2/mdc/_slider.scss +147 -0
  47. package/core/tokens/m2/mdc/_switch.scss +16 -19
  48. package/core/typography/_definition.scss +258 -0
  49. package/core/typography/_property-getters.scss +63 -0
  50. package/core/typography/_typography-utils.scss +9 -69
  51. package/core/typography/_typography.scss +10 -343
  52. package/core/typography/_versioning.scss +86 -0
  53. package/dialog/_dialog-theme.scss +10 -0
  54. package/dialog/index.d.ts +44 -86
  55. package/dialog/testing/index.d.ts +6 -18
  56. package/esm2022/autocomplete/autocomplete-origin.mjs +9 -17
  57. package/esm2022/autocomplete/autocomplete-trigger.mjs +32 -41
  58. package/esm2022/autocomplete/autocomplete.mjs +58 -71
  59. package/esm2022/autocomplete/testing/autocomplete-harness.mjs +20 -33
  60. package/esm2022/button/button-base.mjs +32 -27
  61. package/esm2022/button/button.mjs +6 -6
  62. package/esm2022/button/fab.mjs +25 -33
  63. package/esm2022/button/icon-button.mjs +6 -6
  64. package/esm2022/button/testing/button-harness.mjs +3 -3
  65. package/esm2022/card/card.mjs +2 -2
  66. package/esm2022/checkbox/checkbox.mjs +72 -79
  67. package/esm2022/checkbox/testing/checkbox-harness.mjs +41 -36
  68. package/esm2022/core/datetime/native-date-adapter.mjs +14 -11
  69. package/esm2022/core/option/optgroup.mjs +19 -26
  70. package/esm2022/core/option/option.mjs +25 -35
  71. package/esm2022/core/version.mjs +1 -1
  72. package/esm2022/datepicker/calendar.mjs +1 -1
  73. package/esm2022/datepicker/datepicker-base.mjs +2 -2
  74. package/esm2022/datepicker/datepicker-toggle.mjs +1 -1
  75. package/esm2022/dialog/dialog-container.mjs +52 -77
  76. package/esm2022/dialog/dialog-ref.mjs +1 -1
  77. package/esm2022/dialog/dialog.mjs +16 -46
  78. package/esm2022/dialog/public-api.mjs +2 -2
  79. package/esm2022/dialog/testing/dialog-harness.mjs +13 -16
  80. package/esm2022/dialog/testing/dialog-opener.mjs +17 -27
  81. package/esm2022/dialog/testing/index.mjs +2 -2
  82. package/esm2022/form-field/form-field.mjs +3 -3
  83. package/esm2022/form-field/testing/error-harness.mjs +10 -12
  84. package/esm2022/form-field/testing/form-field-harness.mjs +45 -48
  85. package/esm2022/list/action-list.mjs +2 -2
  86. package/esm2022/list/list.mjs +2 -2
  87. package/esm2022/list/nav-list.mjs +2 -2
  88. package/esm2022/list/selection-list.mjs +2 -2
  89. package/esm2022/menu/menu-content.mjs +9 -16
  90. package/esm2022/menu/menu-trigger.mjs +14 -25
  91. package/esm2022/menu/menu.mjs +15 -29
  92. package/esm2022/menu/public-api.mjs +3 -3
  93. package/esm2022/menu/testing/menu-harness.mjs +29 -43
  94. package/esm2022/paginator/paginator.mjs +24 -38
  95. package/esm2022/paginator/testing/paginator-harness.mjs +25 -27
  96. package/esm2022/progress-bar/progress-bar.mjs +2 -2
  97. package/esm2022/progress-spinner/progress-spinner.mjs +2 -2
  98. package/esm2022/radio/radio.mjs +58 -83
  99. package/esm2022/radio/testing/radio-harness.mjs +31 -38
  100. package/esm2022/select/select.mjs +194 -212
  101. package/esm2022/select/testing/select-harness.mjs +18 -23
  102. package/esm2022/slide-toggle/slide-toggle.mjs +43 -53
  103. package/esm2022/slide-toggle/testing/slide-toggle-harness.mjs +33 -40
  104. package/esm2022/slider/slider.mjs +2 -2
  105. package/esm2022/snack-bar/simple-snack-bar.mjs +1 -1
  106. package/esm2022/snack-bar/snack-bar-container.mjs +17 -32
  107. package/esm2022/snack-bar/snack-bar-ref.mjs +1 -1
  108. package/esm2022/snack-bar/snack-bar.mjs +11 -25
  109. package/esm2022/snack-bar/testing/snack-bar-harness.mjs +18 -31
  110. package/esm2022/table/table-data-source.mjs +15 -18
  111. package/esm2022/table/testing/cell-harness.mjs +4 -4
  112. package/esm2022/table/testing/row-harness.mjs +4 -4
  113. package/esm2022/table/testing/table-harness.mjs +22 -24
  114. package/esm2022/tabs/public-api.mjs +7 -8
  115. package/esm2022/tabs/tab-body.mjs +13 -29
  116. package/esm2022/tabs/tab-group.mjs +55 -79
  117. package/esm2022/tabs/tab-header.mjs +13 -34
  118. package/esm2022/tabs/tab-label-wrapper.mjs +6 -18
  119. package/esm2022/tabs/tab-nav-bar/tab-nav-bar.mjs +119 -168
  120. package/esm2022/tabs/tab.mjs +25 -37
  121. package/esm2022/tooltip/testing/tooltip-harness.mjs +21 -23
  122. package/esm2022/tooltip/tooltip.mjs +68 -101
  123. package/fesm2022/autocomplete/testing.mjs +20 -33
  124. package/fesm2022/autocomplete/testing.mjs.map +1 -1
  125. package/fesm2022/autocomplete.mjs +96 -126
  126. package/fesm2022/autocomplete.mjs.map +1 -1
  127. package/fesm2022/button/testing.mjs +2 -2
  128. package/fesm2022/button/testing.mjs.map +1 -1
  129. package/fesm2022/button.mjs +61 -63
  130. package/fesm2022/button.mjs.map +1 -1
  131. package/fesm2022/card.mjs +2 -2
  132. package/fesm2022/card.mjs.map +1 -1
  133. package/fesm2022/checkbox/testing.mjs +41 -36
  134. package/fesm2022/checkbox/testing.mjs.map +1 -1
  135. package/fesm2022/checkbox.mjs +72 -79
  136. package/fesm2022/checkbox.mjs.map +1 -1
  137. package/fesm2022/core.mjs +49 -61
  138. package/fesm2022/core.mjs.map +1 -1
  139. package/fesm2022/datepicker.mjs +3 -3
  140. package/fesm2022/datepicker.mjs.map +1 -1
  141. package/fesm2022/dialog/testing.mjs +30 -43
  142. package/fesm2022/dialog/testing.mjs.map +1 -1
  143. package/fesm2022/dialog.mjs +67 -122
  144. package/fesm2022/dialog.mjs.map +1 -1
  145. package/fesm2022/form-field/testing.mjs +54 -59
  146. package/fesm2022/form-field/testing.mjs.map +1 -1
  147. package/fesm2022/form-field.mjs +2 -2
  148. package/fesm2022/form-field.mjs.map +1 -1
  149. package/fesm2022/list.mjs +8 -8
  150. package/fesm2022/list.mjs.map +1 -1
  151. package/fesm2022/menu/testing.mjs +30 -44
  152. package/fesm2022/menu/testing.mjs.map +1 -1
  153. package/fesm2022/menu.mjs +34 -66
  154. package/fesm2022/menu.mjs.map +1 -1
  155. package/fesm2022/paginator/testing.mjs +25 -27
  156. package/fesm2022/paginator/testing.mjs.map +1 -1
  157. package/fesm2022/paginator.mjs +24 -38
  158. package/fesm2022/paginator.mjs.map +1 -1
  159. package/fesm2022/progress-bar.mjs +2 -2
  160. package/fesm2022/progress-bar.mjs.map +1 -1
  161. package/fesm2022/progress-spinner.mjs +2 -2
  162. package/fesm2022/progress-spinner.mjs.map +1 -1
  163. package/fesm2022/radio/testing.mjs +31 -38
  164. package/fesm2022/radio/testing.mjs.map +1 -1
  165. package/fesm2022/radio.mjs +59 -84
  166. package/fesm2022/radio.mjs.map +1 -1
  167. package/fesm2022/select/testing.mjs +18 -23
  168. package/fesm2022/select/testing.mjs.map +1 -1
  169. package/fesm2022/select.mjs +196 -214
  170. package/fesm2022/select.mjs.map +1 -1
  171. package/fesm2022/slide-toggle/testing.mjs +33 -40
  172. package/fesm2022/slide-toggle/testing.mjs.map +1 -1
  173. package/fesm2022/slide-toggle.mjs +43 -53
  174. package/fesm2022/slide-toggle.mjs.map +1 -1
  175. package/fesm2022/slider.mjs +2 -2
  176. package/fesm2022/slider.mjs.map +1 -1
  177. package/fesm2022/snack-bar/testing.mjs +19 -32
  178. package/fesm2022/snack-bar/testing.mjs.map +1 -1
  179. package/fesm2022/snack-bar.mjs +27 -56
  180. package/fesm2022/snack-bar.mjs.map +1 -1
  181. package/fesm2022/table/testing.mjs +28 -30
  182. package/fesm2022/table/testing.mjs.map +1 -1
  183. package/fesm2022/table.mjs +15 -18
  184. package/fesm2022/table.mjs.map +1 -1
  185. package/fesm2022/tabs.mjs +234 -368
  186. package/fesm2022/tabs.mjs.map +1 -1
  187. package/fesm2022/tooltip/testing.mjs +21 -23
  188. package/fesm2022/tooltip/testing.mjs.map +1 -1
  189. package/fesm2022/tooltip.mjs +69 -102
  190. package/fesm2022/tooltip.mjs.map +1 -1
  191. package/form-field/_form-field-density.scss +3 -4
  192. package/form-field/_form-field-focus-overlay.scss +13 -18
  193. package/form-field/_form-field-native-select.scss +30 -67
  194. package/form-field/_form-field-subscript.scss +4 -8
  195. package/form-field/_form-field-theme.scss +33 -76
  196. package/form-field/_mdc-text-field-structure-overrides.scss +20 -0
  197. package/form-field/testing/index.d.ts +14 -44
  198. package/input/_input-theme.scss +11 -23
  199. package/list/_list-theme.scss +34 -40
  200. package/menu/index.d.ts +22 -44
  201. package/menu/testing/index.d.ts +6 -23
  202. package/package.json +7 -286
  203. package/paginator/_paginator-theme.scss +15 -24
  204. package/paginator/index.d.ts +6 -22
  205. package/paginator/testing/index.d.ts +9 -22
  206. package/prebuilt-themes/deeppurple-amber.css +1 -1
  207. package/prebuilt-themes/indigo-pink.css +1 -1
  208. package/prebuilt-themes/pink-bluegrey.css +1 -1
  209. package/prebuilt-themes/purple-green.css +1 -1
  210. package/progress-bar/_progress-bar-theme.scss +25 -23
  211. package/progress-spinner/_progress-spinner-theme.scss +14 -3
  212. package/radio/_radio-theme.scss +23 -38
  213. package/radio/index.d.ts +22 -45
  214. package/radio/testing/index.d.ts +7 -23
  215. package/schematics/migration.json +4 -4
  216. package/schematics/ng-add/index.js +2 -2
  217. package/schematics/ng-add/index.mjs +2 -2
  218. package/schematics/ng-update/index_bundled.js +4 -4
  219. package/schematics/ng-update/index_bundled.js.map +1 -1
  220. package/select/index.d.ts +47 -68
  221. package/select/testing/index.d.ts +9 -22
  222. package/slide-toggle/_slide-toggle-theme.scss +23 -40
  223. package/slide-toggle/index.d.ts +17 -27
  224. package/slide-toggle/testing/index.d.ts +6 -13
  225. package/slider/_slider-theme.scss +65 -82
  226. package/snack-bar/_snack-bar-theme.scss +10 -2
  227. package/snack-bar/index.d.ts +40 -62
  228. package/snack-bar/testing/index.d.ts +5 -20
  229. package/table/index.d.ts +2 -31
  230. package/table/testing/index.d.ts +17 -34
  231. package/tabs/index.d.ts +60 -144
  232. package/tooltip/_tooltip-theme.scss +12 -3
  233. package/tooltip/index.d.ts +26 -49
  234. package/tooltip/testing/index.d.ts +7 -17
  235. package/_theming.scss +0 -43
  236. package/_token-theming.scss +0 -2
  237. package/autocomplete/_autocomplete-theme.import.scss +0 -1
  238. package/badge/_badge-legacy-index.scss +0 -3
  239. package/badge/_badge-theme.import.scss +0 -11
  240. package/bottom-sheet/_bottom-sheet-legacy-index.scss +0 -2
  241. package/bottom-sheet/_bottom-sheet-theme.import.scss +0 -10
  242. package/button/_button-base.import.scss +0 -4
  243. package/button/_button-theme.import.scss +0 -13
  244. package/button-toggle/_button-toggle-legacy-index.scss +0 -2
  245. package/button-toggle/_button-toggle-theme.import.scss +0 -15
  246. package/button-toggle/_button-toggle-variables.import.scss +0 -1
  247. package/button-toggle/_button-toggle-variables.scss +0 -16
  248. package/card/_card-theme.import.scss +0 -3
  249. package/checkbox/_checkbox-theme.import.scss +0 -10
  250. package/chips/_chips-theme.import.scss +0 -4
  251. package/core/_core-legacy-index.scss +0 -16
  252. package/core/_core.import.scss +0 -60
  253. package/core/color/_all-color.import.scss +0 -53
  254. package/core/color/_color-legacy-index.scss +0 -1
  255. package/core/density/private/_all-density.import.scss +0 -15
  256. package/core/density/private/_compatibility.import.scss +0 -4
  257. package/core/density/private/_density-legacy-index.scss +0 -5
  258. package/core/focus-indicators/_focus-indicators-legacy-index.scss +0 -5
  259. package/core/focus-indicators/_focus-indicators.import.scss +0 -23
  260. package/core/mdc-helpers/_mdc-helpers.import.scss +0 -9
  261. package/core/option/_optgroup-theme.import.scss +0 -4
  262. package/core/option/_option-legacy-index.scss +0 -5
  263. package/core/option/_option-theme.import.scss +0 -4
  264. package/core/ripple/_ripple-legacy-index.scss +0 -3
  265. package/core/ripple/_ripple.import.scss +0 -20
  266. package/core/selection/pseudo-checkbox/_pseudo-checkbox-legacy-index.scss +0 -2
  267. package/core/selection/pseudo-checkbox/_pseudo-checkbox-theme.import.scss +0 -17
  268. package/core/style/_button-common.import.scss +0 -4
  269. package/core/style/_checkbox-common.import.scss +0 -11
  270. package/core/style/_elevation.import.scss +0 -17
  271. package/core/style/_form-common.import.scss +0 -16
  272. package/core/style/_layout-common.import.scss +0 -1
  273. package/core/style/_list-common.import.scss +0 -2
  274. package/core/style/_menu-common.import.scss +0 -18
  275. package/core/style/_private.import.scss +0 -15
  276. package/core/style/_style-legacy-index.scss +0 -24
  277. package/core/style/_variables.import.scss +0 -8
  278. package/core/style/_vendor-prefixes.import.scss +0 -1
  279. package/core/theming/_all-theme.import.scss +0 -86
  280. package/core/theming/_palette.import.scss +0 -12
  281. package/core/theming/_theming-legacy-index.scss +0 -22
  282. package/core/theming/_theming.import.scss +0 -24
  283. package/core/typography/_all-typography.import.scss +0 -76
  284. package/core/typography/_typography-legacy-index.scss +0 -18
  285. package/core/typography/_typography-utils.import.scss +0 -9
  286. package/core/typography/_typography.import.scss +0 -14
  287. package/datepicker/_datepicker-legacy-index.scss +0 -9
  288. package/datepicker/_datepicker-theme.import.scss +0 -17
  289. package/dialog/_dialog-legacy-padding.import.scss +0 -1
  290. package/dialog/_dialog-theme.import.scss +0 -1
  291. package/dialog/_mdc-dialog-structure-overrides.import.scss +0 -1
  292. package/divider/_divider-legacy-index.scss +0 -3
  293. package/divider/_divider-offset.import.scss +0 -1
  294. package/divider/_divider-theme.import.scss +0 -6
  295. package/esm2022/legacy-autocomplete/autocomplete-module.mjs +0 -51
  296. package/esm2022/legacy-autocomplete/autocomplete-origin.mjs +0 -28
  297. package/esm2022/legacy-autocomplete/autocomplete-trigger.mjs +0 -60
  298. package/esm2022/legacy-autocomplete/autocomplete.mjs +0 -40
  299. package/esm2022/legacy-autocomplete/index.mjs +0 -9
  300. package/esm2022/legacy-autocomplete/legacy-autocomplete_public_index.mjs +0 -5
  301. package/esm2022/legacy-autocomplete/public-api.mjs +0 -48
  302. package/esm2022/legacy-autocomplete/testing/autocomplete-harness-filters.mjs +0 -9
  303. package/esm2022/legacy-autocomplete/testing/autocomplete-harness.mjs +0 -39
  304. package/esm2022/legacy-autocomplete/testing/index.mjs +0 -9
  305. package/esm2022/legacy-autocomplete/testing/public-api.mjs +0 -9
  306. package/esm2022/legacy-button/button-module.mjs +0 -29
  307. package/esm2022/legacy-button/button.mjs +0 -177
  308. package/esm2022/legacy-button/index.mjs +0 -9
  309. package/esm2022/legacy-button/legacy-button_public_index.mjs +0 -5
  310. package/esm2022/legacy-button/public-api.mjs +0 -10
  311. package/esm2022/legacy-button/testing/button-harness.mjs +0 -82
  312. package/esm2022/legacy-button/testing/index.mjs +0 -9
  313. package/esm2022/legacy-button/testing/public-api.mjs +0 -9
  314. package/esm2022/legacy-card/card-module.mjs +0 -87
  315. package/esm2022/legacy-card/card.mjs +0 -276
  316. package/esm2022/legacy-card/index.mjs +0 -9
  317. package/esm2022/legacy-card/legacy-card_public_index.mjs +0 -5
  318. package/esm2022/legacy-card/public-api.mjs +0 -10
  319. package/esm2022/legacy-card/testing/card-harness-filters.mjs +0 -9
  320. package/esm2022/legacy-card/testing/card-harness.mjs +0 -47
  321. package/esm2022/legacy-card/testing/index.mjs +0 -9
  322. package/esm2022/legacy-card/testing/public-api.mjs +0 -9
  323. package/esm2022/legacy-checkbox/checkbox-module.mjs +0 -31
  324. package/esm2022/legacy-checkbox/checkbox.mjs +0 -137
  325. package/esm2022/legacy-checkbox/index.mjs +0 -9
  326. package/esm2022/legacy-checkbox/legacy-checkbox_public_index.mjs +0 -5
  327. package/esm2022/legacy-checkbox/public-api.mjs +0 -36
  328. package/esm2022/legacy-checkbox/testing/checkbox-harness.mjs +0 -46
  329. package/esm2022/legacy-checkbox/testing/index.mjs +0 -9
  330. package/esm2022/legacy-checkbox/testing/public-api.mjs +0 -9
  331. package/esm2022/legacy-chips/chip-default-options.mjs +0 -15
  332. package/esm2022/legacy-chips/chip-input.mjs +0 -198
  333. package/esm2022/legacy-chips/chip-list.mjs +0 -718
  334. package/esm2022/legacy-chips/chip-text-control.mjs +0 -9
  335. package/esm2022/legacy-chips/chip.mjs +0 -445
  336. package/esm2022/legacy-chips/chips-module.mjs +0 -68
  337. package/esm2022/legacy-chips/index.mjs +0 -9
  338. package/esm2022/legacy-chips/legacy-chips_public_index.mjs +0 -5
  339. package/esm2022/legacy-chips/public-api.mjs +0 -13
  340. package/esm2022/legacy-chips/testing/chip-avatar-harness.mjs +0 -26
  341. package/esm2022/legacy-chips/testing/chip-harness-filters.mjs +0 -2
  342. package/esm2022/legacy-chips/testing/chip-harness.mjs +0 -95
  343. package/esm2022/legacy-chips/testing/chip-input-harness.mjs +0 -86
  344. package/esm2022/legacy-chips/testing/chip-list-harness.mjs +0 -90
  345. package/esm2022/legacy-chips/testing/chip-listbox-harness.mjs +0 -48
  346. package/esm2022/legacy-chips/testing/chip-option-harness.mjs +0 -49
  347. package/esm2022/legacy-chips/testing/chip-remove-harness.mjs +0 -30
  348. package/esm2022/legacy-chips/testing/index.mjs +0 -9
  349. package/esm2022/legacy-chips/testing/public-api.mjs +0 -14
  350. package/esm2022/legacy-core/index.mjs +0 -9
  351. package/esm2022/legacy-core/legacy-core_public_index.mjs +0 -5
  352. package/esm2022/legacy-core/option/index.mjs +0 -69
  353. package/esm2022/legacy-core/option/optgroup.mjs +0 -30
  354. package/esm2022/legacy-core/option/option.mjs +0 -54
  355. package/esm2022/legacy-core/public-api.mjs +0 -170
  356. package/esm2022/legacy-core/testing/index.mjs +0 -9
  357. package/esm2022/legacy-core/testing/optgroup-harness-filters.mjs +0 -9
  358. package/esm2022/legacy-core/testing/optgroup-harness.mjs +0 -47
  359. package/esm2022/legacy-core/testing/option-harness-filters.mjs +0 -9
  360. package/esm2022/legacy-core/testing/option-harness.mjs +0 -58
  361. package/esm2022/legacy-core/testing/public-api.mjs +0 -12
  362. package/esm2022/legacy-dialog/dialog-animations.mjs +0 -17
  363. package/esm2022/legacy-dialog/dialog-config.mjs +0 -22
  364. package/esm2022/legacy-dialog/dialog-container.mjs +0 -85
  365. package/esm2022/legacy-dialog/dialog-content-directives.mjs +0 -209
  366. package/esm2022/legacy-dialog/dialog-module.mjs +0 -57
  367. package/esm2022/legacy-dialog/dialog-ref.mjs +0 -16
  368. package/esm2022/legacy-dialog/dialog.mjs +0 -106
  369. package/esm2022/legacy-dialog/index.mjs +0 -9
  370. package/esm2022/legacy-dialog/legacy-dialog_public_index.mjs +0 -5
  371. package/esm2022/legacy-dialog/public-api.mjs +0 -40
  372. package/esm2022/legacy-dialog/testing/dialog-harness.mjs +0 -36
  373. package/esm2022/legacy-dialog/testing/dialog-opener.mjs +0 -56
  374. package/esm2022/legacy-dialog/testing/index.mjs +0 -9
  375. package/esm2022/legacy-dialog/testing/public-api.mjs +0 -10
  376. package/esm2022/legacy-form-field/error.mjs +0 -46
  377. package/esm2022/legacy-form-field/form-field-module.mjs +0 -67
  378. package/esm2022/legacy-form-field/form-field.mjs +0 -530
  379. package/esm2022/legacy-form-field/hint.mjs +0 -56
  380. package/esm2022/legacy-form-field/index.mjs +0 -9
  381. package/esm2022/legacy-form-field/label.mjs +0 -25
  382. package/esm2022/legacy-form-field/legacy-form-field_public_index.mjs +0 -5
  383. package/esm2022/legacy-form-field/placeholder.mjs +0 -26
  384. package/esm2022/legacy-form-field/prefix.mjs +0 -27
  385. package/esm2022/legacy-form-field/public-api.mjs +0 -62
  386. package/esm2022/legacy-form-field/suffix.mjs +0 -27
  387. package/esm2022/legacy-form-field/testing/error-harness.mjs +0 -26
  388. package/esm2022/legacy-form-field/testing/form-field-harness.mjs +0 -73
  389. package/esm2022/legacy-form-field/testing/index.mjs +0 -9
  390. package/esm2022/legacy-form-field/testing/public-api.mjs +0 -19
  391. package/esm2022/legacy-input/index.mjs +0 -9
  392. package/esm2022/legacy-input/input-module.mjs +0 -45
  393. package/esm2022/legacy-input/input.mjs +0 -62
  394. package/esm2022/legacy-input/legacy-input_public_index.mjs +0 -5
  395. package/esm2022/legacy-input/public-api.mjs +0 -21
  396. package/esm2022/legacy-input/testing/index.mjs +0 -9
  397. package/esm2022/legacy-input/testing/public-api.mjs +0 -24
  398. package/esm2022/legacy-list/index.mjs +0 -9
  399. package/esm2022/legacy-list/legacy-list_public_index.mjs +0 -5
  400. package/esm2022/legacy-list/list-module.mjs +0 -75
  401. package/esm2022/legacy-list/list.mjs +0 -223
  402. package/esm2022/legacy-list/public-api.mjs +0 -22
  403. package/esm2022/legacy-list/selection-list.mjs +0 -619
  404. package/esm2022/legacy-list/testing/action-list-harness.mjs +0 -67
  405. package/esm2022/legacy-list/testing/index.mjs +0 -9
  406. package/esm2022/legacy-list/testing/list-harness-base.mjs +0 -97
  407. package/esm2022/legacy-list/testing/list-harness-filters.mjs +0 -9
  408. package/esm2022/legacy-list/testing/list-harness.mjs +0 -51
  409. package/esm2022/legacy-list/testing/list-item-harness-base.mjs +0 -74
  410. package/esm2022/legacy-list/testing/nav-list-harness.mjs +0 -71
  411. package/esm2022/legacy-list/testing/public-api.mjs +0 -12
  412. package/esm2022/legacy-list/testing/selection-list-harness.mjs +0 -129
  413. package/esm2022/legacy-menu/index.mjs +0 -9
  414. package/esm2022/legacy-menu/legacy-menu_public_index.mjs +0 -5
  415. package/esm2022/legacy-menu/menu-content.mjs +0 -27
  416. package/esm2022/legacy-menu/menu-item.mjs +0 -41
  417. package/esm2022/legacy-menu/menu-module.mjs +0 -50
  418. package/esm2022/legacy-menu/menu-trigger.mjs +0 -31
  419. package/esm2022/legacy-menu/menu.mjs +0 -40
  420. package/esm2022/legacy-menu/public-api.mjs +0 -49
  421. package/esm2022/legacy-menu/testing/index.mjs +0 -9
  422. package/esm2022/legacy-menu/testing/menu-harness.mjs +0 -56
  423. package/esm2022/legacy-menu/testing/public-api.mjs +0 -9
  424. package/esm2022/legacy-paginator/index.mjs +0 -9
  425. package/esm2022/legacy-paginator/legacy-paginator_public_index.mjs +0 -5
  426. package/esm2022/legacy-paginator/paginator-module.mjs +0 -49
  427. package/esm2022/legacy-paginator/paginator.mjs +0 -53
  428. package/esm2022/legacy-paginator/public-api.mjs +0 -36
  429. package/esm2022/legacy-paginator/testing/index.mjs +0 -9
  430. package/esm2022/legacy-paginator/testing/paginator-harness.mjs +0 -41
  431. package/esm2022/legacy-paginator/testing/public-api.mjs +0 -15
  432. package/esm2022/legacy-progress-bar/index.mjs +0 -9
  433. package/esm2022/legacy-progress-bar/legacy-progress-bar_public_index.mjs +0 -5
  434. package/esm2022/legacy-progress-bar/progress-bar-module.mjs +0 -30
  435. package/esm2022/legacy-progress-bar/progress-bar.mjs +0 -190
  436. package/esm2022/legacy-progress-bar/public-api.mjs +0 -11
  437. package/esm2022/legacy-progress-bar/testing/index.mjs +0 -9
  438. package/esm2022/legacy-progress-bar/testing/progress-bar-harness.mjs +0 -38
  439. package/esm2022/legacy-progress-bar/testing/public-api.mjs +0 -9
  440. package/esm2022/legacy-progress-spinner/index.mjs +0 -9
  441. package/esm2022/legacy-progress-spinner/legacy-progress-spinner_public_index.mjs +0 -5
  442. package/esm2022/legacy-progress-spinner/progress-spinner-module.mjs +0 -30
  443. package/esm2022/legacy-progress-spinner/progress-spinner.mjs +0 -286
  444. package/esm2022/legacy-progress-spinner/public-api.mjs +0 -19
  445. package/esm2022/legacy-progress-spinner/testing/index.mjs +0 -9
  446. package/esm2022/legacy-progress-spinner/testing/progress-spinner-harness.mjs +0 -39
  447. package/esm2022/legacy-progress-spinner/testing/public-api.mjs +0 -9
  448. package/esm2022/legacy-radio/index.mjs +0 -9
  449. package/esm2022/legacy-radio/legacy-radio_public_index.mjs +0 -5
  450. package/esm2022/legacy-radio/public-api.mjs +0 -31
  451. package/esm2022/legacy-radio/radio-module.mjs +0 -29
  452. package/esm2022/legacy-radio/radio.mjs +0 -112
  453. package/esm2022/legacy-radio/testing/index.mjs +0 -9
  454. package/esm2022/legacy-radio/testing/public-api.mjs +0 -9
  455. package/esm2022/legacy-radio/testing/radio-harness.mjs +0 -58
  456. package/esm2022/legacy-select/index.mjs +0 -9
  457. package/esm2022/legacy-select/legacy-select_public_index.mjs +0 -5
  458. package/esm2022/legacy-select/public-api.mjs +0 -37
  459. package/esm2022/legacy-select/select-animations.mjs +0 -56
  460. package/esm2022/legacy-select/select-errors.mjs +0 -39
  461. package/esm2022/legacy-select/select-module.mjs +0 -51
  462. package/esm2022/legacy-select/select.mjs +0 -447
  463. package/esm2022/legacy-select/testing/index.mjs +0 -9
  464. package/esm2022/legacy-select/testing/public-api.mjs +0 -9
  465. package/esm2022/legacy-select/testing/select-harness-filters.mjs +0 -9
  466. package/esm2022/legacy-select/testing/select-harness.mjs +0 -36
  467. package/esm2022/legacy-slide-toggle/index.mjs +0 -9
  468. package/esm2022/legacy-slide-toggle/legacy-slide-toggle_public_index.mjs +0 -5
  469. package/esm2022/legacy-slide-toggle/public-api.mjs +0 -32
  470. package/esm2022/legacy-slide-toggle/slide-toggle-config.mjs +0 -18
  471. package/esm2022/legacy-slide-toggle/slide-toggle-module.mjs +0 -42
  472. package/esm2022/legacy-slide-toggle/slide-toggle.mjs +0 -137
  473. package/esm2022/legacy-slide-toggle/testing/index.mjs +0 -9
  474. package/esm2022/legacy-slide-toggle/testing/public-api.mjs +0 -15
  475. package/esm2022/legacy-slide-toggle/testing/slide-toggle-harness.mjs +0 -50
  476. package/esm2022/legacy-slider/index.mjs +0 -9
  477. package/esm2022/legacy-slider/legacy-slider_public_index.mjs +0 -5
  478. package/esm2022/legacy-slider/public-api.mjs +0 -10
  479. package/esm2022/legacy-slider/slider-module.mjs +0 -30
  480. package/esm2022/legacy-slider/slider.mjs +0 -847
  481. package/esm2022/legacy-slider/testing/index.mjs +0 -9
  482. package/esm2022/legacy-slider/testing/public-api.mjs +0 -9
  483. package/esm2022/legacy-slider/testing/slider-harness-filters.mjs +0 -2
  484. package/esm2022/legacy-slider/testing/slider-harness.mjs +0 -122
  485. package/esm2022/legacy-snack-bar/index.mjs +0 -9
  486. package/esm2022/legacy-snack-bar/legacy-snack-bar_public_index.mjs +0 -5
  487. package/esm2022/legacy-snack-bar/public-api.mjs +0 -53
  488. package/esm2022/legacy-snack-bar/simple-snack-bar.mjs +0 -45
  489. package/esm2022/legacy-snack-bar/snack-bar-container.mjs +0 -39
  490. package/esm2022/legacy-snack-bar/snack-bar-module.mjs +0 -34
  491. package/esm2022/legacy-snack-bar/snack-bar.mjs +0 -47
  492. package/esm2022/legacy-snack-bar/testing/index.mjs +0 -9
  493. package/esm2022/legacy-snack-bar/testing/public-api.mjs +0 -9
  494. package/esm2022/legacy-snack-bar/testing/snack-bar-harness.mjs +0 -46
  495. package/esm2022/legacy-table/cell.mjs +0 -163
  496. package/esm2022/legacy-table/index.mjs +0 -9
  497. package/esm2022/legacy-table/legacy-table_public_index.mjs +0 -5
  498. package/esm2022/legacy-table/public-api.mjs +0 -20
  499. package/esm2022/legacy-table/row.mjs +0 -165
  500. package/esm2022/legacy-table/table-data-source.mjs +0 -27
  501. package/esm2022/legacy-table/table-module.mjs +0 -98
  502. package/esm2022/legacy-table/table.mjs +0 -72
  503. package/esm2022/legacy-table/testing/cell-harness.mjs +0 -62
  504. package/esm2022/legacy-table/testing/index.mjs +0 -9
  505. package/esm2022/legacy-table/testing/public-api.mjs +0 -27
  506. package/esm2022/legacy-table/testing/row-harness.mjs +0 -76
  507. package/esm2022/legacy-table/testing/table-harness.mjs +0 -34
  508. package/esm2022/legacy-table/text-column.mjs +0 -65
  509. package/esm2022/legacy-tabs/index.mjs +0 -9
  510. package/esm2022/legacy-tabs/ink-bar.mjs +0 -73
  511. package/esm2022/legacy-tabs/legacy-tabs_public_index.mjs +0 -5
  512. package/esm2022/legacy-tabs/public-api.mjs +0 -94
  513. package/esm2022/legacy-tabs/tab-body.mjs +0 -64
  514. package/esm2022/legacy-tabs/tab-content.mjs +0 -27
  515. package/esm2022/legacy-tabs/tab-group.mjs +0 -72
  516. package/esm2022/legacy-tabs/tab-header.mjs +0 -75
  517. package/esm2022/legacy-tabs/tab-label-wrapper.mjs +0 -30
  518. package/esm2022/legacy-tabs/tab-label.mjs +0 -27
  519. package/esm2022/legacy-tabs/tab-nav-bar/index.mjs +0 -9
  520. package/esm2022/legacy-tabs/tab-nav-bar/tab-nav-bar.mjs +0 -164
  521. package/esm2022/legacy-tabs/tab.mjs +0 -46
  522. package/esm2022/legacy-tabs/tabs-module.mjs +0 -99
  523. package/esm2022/legacy-tabs/testing/index.mjs +0 -9
  524. package/esm2022/legacy-tabs/testing/public-api.mjs +0 -12
  525. package/esm2022/legacy-tabs/testing/tab-group-harness.mjs +0 -61
  526. package/esm2022/legacy-tabs/testing/tab-harness-filters.mjs +0 -2
  527. package/esm2022/legacy-tabs/testing/tab-harness.mjs +0 -71
  528. package/esm2022/legacy-tabs/testing/tab-link-harness.mjs +0 -45
  529. package/esm2022/legacy-tabs/testing/tab-nav-bar-harness.mjs +0 -70
  530. package/esm2022/legacy-tabs/testing/tab-nav-panel-harness.mjs +0 -31
  531. package/esm2022/legacy-tooltip/index.mjs +0 -9
  532. package/esm2022/legacy-tooltip/legacy-tooltip_public_index.mjs +0 -5
  533. package/esm2022/legacy-tooltip/public-api.mjs +0 -47
  534. package/esm2022/legacy-tooltip/testing/index.mjs +0 -9
  535. package/esm2022/legacy-tooltip/testing/public-api.mjs +0 -9
  536. package/esm2022/legacy-tooltip/testing/tooltip-harness.mjs +0 -35
  537. package/esm2022/legacy-tooltip/tooltip-animations.mjs +0 -28
  538. package/esm2022/legacy-tooltip/tooltip-module.mjs +0 -35
  539. package/esm2022/legacy-tooltip/tooltip.mjs +0 -108
  540. package/expansion/_expansion-legacy-index.scss +0 -2
  541. package/expansion/_expansion-theme.import.scss +0 -12
  542. package/expansion/_expansion-variables.import.scss +0 -1
  543. package/fesm2022/legacy-autocomplete/testing.mjs +0 -35
  544. package/fesm2022/legacy-autocomplete/testing.mjs.map +0 -1
  545. package/fesm2022/legacy-autocomplete.mjs +0 -146
  546. package/fesm2022/legacy-autocomplete.mjs.map +0 -1
  547. package/fesm2022/legacy-button/testing.mjs +0 -78
  548. package/fesm2022/legacy-button/testing.mjs.map +0 -1
  549. package/fesm2022/legacy-button.mjs +0 -194
  550. package/fesm2022/legacy-button.mjs.map +0 -1
  551. package/fesm2022/legacy-card/testing.mjs +0 -43
  552. package/fesm2022/legacy-card/testing.mjs.map +0 -1
  553. package/fesm2022/legacy-card.mjs +0 -353
  554. package/fesm2022/legacy-card.mjs.map +0 -1
  555. package/fesm2022/legacy-checkbox/testing.mjs +0 -42
  556. package/fesm2022/legacy-checkbox/testing.mjs.map +0 -1
  557. package/fesm2022/legacy-checkbox.mjs +0 -157
  558. package/fesm2022/legacy-checkbox.mjs.map +0 -1
  559. package/fesm2022/legacy-chips/testing.mjs +0 -365
  560. package/fesm2022/legacy-chips/testing.mjs.map +0 -1
  561. package/fesm2022/legacy-chips.mjs +0 -1399
  562. package/fesm2022/legacy-chips.mjs.map +0 -1
  563. package/fesm2022/legacy-core/testing.mjs +0 -92
  564. package/fesm2022/legacy-core/testing.mjs.map +0 -1
  565. package/fesm2022/legacy-core.mjs +0 -92
  566. package/fesm2022/legacy-core.mjs.map +0 -1
  567. package/fesm2022/legacy-dialog/testing.mjs +0 -80
  568. package/fesm2022/legacy-dialog/testing.mjs.map +0 -1
  569. package/fesm2022/legacy-dialog.mjs +0 -449
  570. package/fesm2022/legacy-dialog.mjs.map +0 -1
  571. package/fesm2022/legacy-form-field/testing.mjs +0 -87
  572. package/fesm2022/legacy-form-field/testing.mjs.map +0 -1
  573. package/fesm2022/legacy-form-field.mjs +0 -726
  574. package/fesm2022/legacy-form-field.mjs.map +0 -1
  575. package/fesm2022/legacy-input/testing.mjs +0 -2
  576. package/fesm2022/legacy-input/testing.mjs.map +0 -1
  577. package/fesm2022/legacy-input.mjs +0 -97
  578. package/fesm2022/legacy-input.mjs.map +0 -1
  579. package/fesm2022/legacy-list/testing.mjs +0 -436
  580. package/fesm2022/legacy-list/testing.mjs.map +0 -1
  581. package/fesm2022/legacy-list.mjs +0 -891
  582. package/fesm2022/legacy-list.mjs.map +0 -1
  583. package/fesm2022/legacy-menu/testing.mjs +0 -52
  584. package/fesm2022/legacy-menu/testing.mjs.map +0 -1
  585. package/fesm2022/legacy-menu.mjs +0 -145
  586. package/fesm2022/legacy-menu.mjs.map +0 -1
  587. package/fesm2022/legacy-paginator/testing.mjs +0 -38
  588. package/fesm2022/legacy-paginator/testing.mjs.map +0 -1
  589. package/fesm2022/legacy-paginator.mjs +0 -92
  590. package/fesm2022/legacy-paginator.mjs.map +0 -1
  591. package/fesm2022/legacy-progress-bar/testing.mjs +0 -34
  592. package/fesm2022/legacy-progress-bar/testing.mjs.map +0 -1
  593. package/fesm2022/legacy-progress-bar.mjs +0 -210
  594. package/fesm2022/legacy-progress-bar.mjs.map +0 -1
  595. package/fesm2022/legacy-progress-spinner/testing.mjs +0 -35
  596. package/fesm2022/legacy-progress-spinner/testing.mjs.map +0 -1
  597. package/fesm2022/legacy-progress-spinner.mjs +0 -312
  598. package/fesm2022/legacy-progress-spinner.mjs.map +0 -1
  599. package/fesm2022/legacy-radio/testing.mjs +0 -54
  600. package/fesm2022/legacy-radio/testing.mjs.map +0 -1
  601. package/fesm2022/legacy-radio.mjs +0 -130
  602. package/fesm2022/legacy-radio.mjs.map +0 -1
  603. package/fesm2022/legacy-select/testing.mjs +0 -32
  604. package/fesm2022/legacy-select/testing.mjs.map +0 -1
  605. package/fesm2022/legacy-select.mjs +0 -541
  606. package/fesm2022/legacy-select.mjs.map +0 -1
  607. package/fesm2022/legacy-slide-toggle/testing.mjs +0 -47
  608. package/fesm2022/legacy-slide-toggle/testing.mjs.map +0 -1
  609. package/fesm2022/legacy-slide-toggle.mjs +0 -177
  610. package/fesm2022/legacy-slide-toggle.mjs.map +0 -1
  611. package/fesm2022/legacy-slider/testing.mjs +0 -118
  612. package/fesm2022/legacy-slider/testing.mjs.map +0 -1
  613. package/fesm2022/legacy-slider.mjs +0 -863
  614. package/fesm2022/legacy-slider.mjs.map +0 -1
  615. package/fesm2022/legacy-snack-bar/testing.mjs +0 -42
  616. package/fesm2022/legacy-snack-bar/testing.mjs.map +0 -1
  617. package/fesm2022/legacy-snack-bar.mjs +0 -128
  618. package/fesm2022/legacy-snack-bar.mjs.map +0 -1
  619. package/fesm2022/legacy-table/testing.mjs +0 -150
  620. package/fesm2022/legacy-table/testing.mjs.map +0 -1
  621. package/fesm2022/legacy-table.mjs +0 -538
  622. package/fesm2022/legacy-table.mjs.map +0 -1
  623. package/fesm2022/legacy-tabs/testing.mjs +0 -239
  624. package/fesm2022/legacy-tabs/testing.mjs.map +0 -1
  625. package/fesm2022/legacy-tabs.mjs +0 -549
  626. package/fesm2022/legacy-tabs.mjs.map +0 -1
  627. package/fesm2022/legacy-tooltip/testing.mjs +0 -31
  628. package/fesm2022/legacy-tooltip/testing.mjs.map +0 -1
  629. package/fesm2022/legacy-tooltip.mjs +0 -148
  630. package/fesm2022/legacy-tooltip.mjs.map +0 -1
  631. package/form-field/_form-field-theme.import.scss +0 -29
  632. package/form-field/_mdc-text-field-theme-variable-refresh.scss +0 -88
  633. package/grid-list/_grid-list-legacy-index.scss +0 -2
  634. package/grid-list/_grid-list-theme.import.scss +0 -10
  635. package/icon/_icon-legacy-index.scss +0 -2
  636. package/icon/_icon-theme.import.scss +0 -5
  637. package/input/_input-theme.import.scss +0 -1
  638. package/legacy-autocomplete/_autocomplete-legacy-index.scss +0 -2
  639. package/legacy-autocomplete/_autocomplete-theme.import.scss +0 -7
  640. package/legacy-autocomplete/_autocomplete-theme.scss +0 -57
  641. package/legacy-autocomplete/index.d.ts +0 -115
  642. package/legacy-autocomplete/testing/index.d.ts +0 -41
  643. package/legacy-button/_button-base.import.scss +0 -21
  644. package/legacy-button/_button-base.scss +0 -114
  645. package/legacy-button/_button-legacy-index.scss +0 -22
  646. package/legacy-button/_button-theme.import.scss +0 -11
  647. package/legacy-button/_button-theme.scss +0 -223
  648. package/legacy-button/index.d.ts +0 -87
  649. package/legacy-button/testing/index.d.ts +0 -49
  650. package/legacy-card/_card-legacy-index.scss +0 -2
  651. package/legacy-card/_card-theme.import.scss +0 -10
  652. package/legacy-card/_card-theme.scss +0 -78
  653. package/legacy-card/index.d.ts +0 -201
  654. package/legacy-card/testing/index.d.ts +0 -56
  655. package/legacy-checkbox/_checkbox-legacy-index.scss +0 -2
  656. package/legacy-checkbox/_checkbox-theme.import.scss +0 -7
  657. package/legacy-checkbox/_checkbox-theme.scss +0 -138
  658. package/legacy-checkbox/index.d.ts +0 -116
  659. package/legacy-checkbox/testing/index.d.ts +0 -30
  660. package/legacy-chips/_chips-legacy-index.scss +0 -7
  661. package/legacy-chips/_chips-theme.import.scss +0 -14
  662. package/legacy-chips/_chips-theme.scss +0 -133
  663. package/legacy-chips/index.d.ts +0 -705
  664. package/legacy-chips/testing/index.d.ts +0 -316
  665. package/legacy-core/_core-theme.scss +0 -65
  666. package/legacy-core/_core.import.scss +0 -5
  667. package/legacy-core/_core.scss +0 -18
  668. package/legacy-core/color/_all-color.import.scss +0 -4
  669. package/legacy-core/color/_all-color.scss +0 -28
  670. package/legacy-core/density/private/_all-density.import.scss +0 -3
  671. package/legacy-core/density/private/_all-density.scss +0 -46
  672. package/legacy-core/density/private/_compatibility.import.scss +0 -4
  673. package/legacy-core/density/private/_compatibility.scss +0 -74
  674. package/legacy-core/index.d.ts +0 -218
  675. package/legacy-core/option/_optgroup-theme.import.scss +0 -27
  676. package/legacy-core/option/_optgroup-theme.scss +0 -52
  677. package/legacy-core/option/_option-legacy-index.scss +0 -5
  678. package/legacy-core/option/_option-theme.import.scss +0 -27
  679. package/legacy-core/option/_option-theme.scss +0 -86
  680. package/legacy-core/testing/index.d.ts +0 -80
  681. package/legacy-core/theming/_all-theme.import.scss +0 -3
  682. package/legacy-core/theming/_all-theme.scss +0 -89
  683. package/legacy-core/typography/_all-typography.import.scss +0 -4
  684. package/legacy-core/typography/_all-typography.scss +0 -105
  685. package/legacy-dialog/_dialog-legacy-index.scss +0 -2
  686. package/legacy-dialog/_dialog-theme.import.scss +0 -10
  687. package/legacy-dialog/_dialog-theme.scss +0 -53
  688. package/legacy-dialog/index.d.ts +0 -271
  689. package/legacy-dialog/testing/index.d.ts +0 -63
  690. package/legacy-form-field/_form-field-fill-theme.import.scss +0 -13
  691. package/legacy-form-field/_form-field-fill-theme.scss +0 -136
  692. package/legacy-form-field/_form-field-legacy-index.scss +0 -29
  693. package/legacy-form-field/_form-field-legacy-theme.import.scss +0 -14
  694. package/legacy-form-field/_form-field-legacy-theme.scss +0 -204
  695. package/legacy-form-field/_form-field-outline-theme.import.scss +0 -13
  696. package/legacy-form-field/_form-field-outline-theme.scss +0 -167
  697. package/legacy-form-field/_form-field-standard-theme.import.scss +0 -11
  698. package/legacy-form-field/_form-field-standard-theme.scss +0 -55
  699. package/legacy-form-field/_form-field-theme.import.scss +0 -29
  700. package/legacy-form-field/_form-field-theme.scss +0 -278
  701. package/legacy-form-field/index.d.ts +0 -370
  702. package/legacy-form-field/testing/index.d.ts +0 -76
  703. package/legacy-input/_input-legacy-index.scss +0 -2
  704. package/legacy-input/_input-theme.import.scss +0 -11
  705. package/legacy-input/_input-theme.scss +0 -115
  706. package/legacy-input/index.d.ts +0 -41
  707. package/legacy-input/testing/index.d.ts +0 -20
  708. package/legacy-list/_list-legacy-index.scss +0 -2
  709. package/legacy-list/_list-theme.import.scss +0 -10
  710. package/legacy-list/_list-theme.scss +0 -124
  711. package/legacy-list/index.d.ts +0 -396
  712. package/legacy-list/testing/index.d.ts +0 -419
  713. package/legacy-menu/_menu-legacy-index.scss +0 -2
  714. package/legacy-menu/_menu-theme.import.scss +0 -10
  715. package/legacy-menu/_menu-theme.scss +0 -84
  716. package/legacy-menu/index.d.ts +0 -127
  717. package/legacy-menu/testing/index.d.ts +0 -47
  718. package/legacy-paginator/_paginator-legacy-index.scss +0 -2
  719. package/legacy-paginator/_paginator-theme.import.scss +0 -11
  720. package/legacy-paginator/_paginator-theme.scss +0 -92
  721. package/legacy-paginator/_paginator-variables.import.scss +0 -1
  722. package/legacy-paginator/_paginator-variables.scss +0 -13
  723. package/legacy-paginator/index.d.ts +0 -87
  724. package/legacy-paginator/testing/index.d.ts +0 -36
  725. package/legacy-prebuilt-themes/legacy-deeppurple-amber.css +0 -1
  726. package/legacy-prebuilt-themes/legacy-indigo-pink.css +0 -1
  727. package/legacy-prebuilt-themes/legacy-pink-bluegrey.css +0 -1
  728. package/legacy-prebuilt-themes/legacy-purple-green.css +0 -1
  729. package/legacy-progress-bar/_progress-bar-legacy-index.scss +0 -2
  730. package/legacy-progress-bar/_progress-bar-theme.import.scss +0 -6
  731. package/legacy-progress-bar/_progress-bar-theme.scss +0 -93
  732. package/legacy-progress-bar/index.d.ts +0 -131
  733. package/legacy-progress-bar/testing/index.d.ts +0 -28
  734. package/legacy-progress-spinner/_progress-spinner-legacy-index.scss +0 -3
  735. package/legacy-progress-spinner/_progress-spinner-theme.import.scss +0 -7
  736. package/legacy-progress-spinner/_progress-spinner-theme.scss +0 -52
  737. package/legacy-progress-spinner/index.d.ts +0 -129
  738. package/legacy-progress-spinner/testing/index.d.ts +0 -29
  739. package/legacy-radio/_radio-legacy-index.scss +0 -2
  740. package/legacy-radio/_radio-theme.import.scss +0 -8
  741. package/legacy-radio/_radio-theme.scss +0 -104
  742. package/legacy-radio/index.d.ts +0 -75
  743. package/legacy-radio/testing/index.d.ts +0 -50
  744. package/legacy-select/_select-legacy-index.scss +0 -2
  745. package/legacy-select/_select-theme.import.scss +0 -11
  746. package/legacy-select/_select-theme.scss +0 -107
  747. package/legacy-select/index.d.ts +0 -230
  748. package/legacy-select/testing/index.d.ts +0 -38
  749. package/legacy-slide-toggle/_slide-toggle-legacy-index.scss +0 -3
  750. package/legacy-slide-toggle/_slide-toggle-theme.import.scss +0 -11
  751. package/legacy-slide-toggle/_slide-toggle-theme.scss +0 -111
  752. package/legacy-slide-toggle/index.d.ts +0 -113
  753. package/legacy-slide-toggle/testing/index.d.ts +0 -34
  754. package/legacy-slider/_slider-legacy-index.scss +0 -3
  755. package/legacy-slider/_slider-theme.import.scss +0 -8
  756. package/legacy-slider/_slider-theme.scss +0 -210
  757. package/legacy-slider/index.d.ts +0 -303
  758. package/legacy-slider/testing/index.d.ts +0 -68
  759. package/legacy-snack-bar/_snack-bar-legacy-index.scss +0 -2
  760. package/legacy-snack-bar/_snack-bar-theme.import.scss +0 -11
  761. package/legacy-snack-bar/_snack-bar-theme.scss +0 -72
  762. package/legacy-snack-bar/index.d.ts +0 -118
  763. package/legacy-snack-bar/testing/index.d.ts +0 -28
  764. package/legacy-table/_table-legacy-index.scss +0 -3
  765. package/legacy-table/_table-theme.import.scss +0 -8
  766. package/legacy-table/_table-theme.scss +0 -78
  767. package/legacy-table/index.d.ts +0 -298
  768. package/legacy-table/testing/index.d.ts +0 -149
  769. package/legacy-tabs/_tabs-common.import.scss +0 -11
  770. package/legacy-tabs/_tabs-common.scss +0 -173
  771. package/legacy-tabs/_tabs-legacy-index.scss +0 -6
  772. package/legacy-tabs/_tabs-theme.import.scss +0 -9
  773. package/legacy-tabs/_tabs-theme.scss +0 -188
  774. package/legacy-tabs/index.d.ts +0 -338
  775. package/legacy-tabs/testing/index.d.ts +0 -195
  776. package/legacy-tooltip/_tooltip-legacy-index.scss +0 -3
  777. package/legacy-tooltip/_tooltip-theme.import.scss +0 -9
  778. package/legacy-tooltip/_tooltip-theme.scss +0 -67
  779. package/legacy-tooltip/index.d.ts +0 -117
  780. package/legacy-tooltip/testing/index.d.ts +0 -30
  781. package/list/_list-theme.import.scss +0 -1
  782. package/menu/_menu-theme.import.scss +0 -2
  783. package/paginator/_paginator-theme.import.scss +0 -6
  784. package/paginator/_paginator-variables.import.scss +0 -1
  785. package/paginator/_paginator-variables.scss +0 -15
  786. package/progress-bar/_progress-bar-theme.import.scss +0 -3
  787. package/progress-spinner/_progress-spinner-theme.import.scss +0 -3
  788. package/radio/_radio-theme.import.scss +0 -4
  789. package/select/_select-theme.import.scss +0 -7
  790. package/sidenav/_sidenav-legacy-index.scss +0 -2
  791. package/sidenav/_sidenav-theme.import.scss +0 -8
  792. package/slide-toggle/_slide-toggle-theme.import.scss +0 -7
  793. package/slider/_slider-theme.import.scss +0 -2
  794. package/snack-bar/_snack-bar-theme.import.scss +0 -5
  795. package/sort/_sort-legacy-index.scss +0 -2
  796. package/sort/_sort-theme.import.scss +0 -5
  797. package/stepper/_stepper-legacy-index.scss +0 -7
  798. package/stepper/_stepper-theme.import.scss +0 -16
  799. package/stepper/_stepper-variables.import.scss +0 -6
  800. package/table/_table-flex-styles.import.scss +0 -1
  801. package/table/_table-theme.import.scss +0 -8
  802. package/tabs/_tabs-common.import.scss +0 -11
  803. package/tabs/_tabs-theme.import.scss +0 -5
  804. package/toolbar/_toolbar-legacy-index.scss +0 -4
  805. package/toolbar/_toolbar-theme.import.scss +0 -14
  806. package/toolbar/_toolbar-variables.import.scss +0 -1
  807. package/tooltip/_tooltip-theme.import.scss +0 -2
  808. package/tree/_tree-legacy-index.scss +0 -2
  809. package/tree/_tree-theme.import.scss +0 -9
  810. package/tree/_tree-variables.import.scss +0 -1
@@ -1,718 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import { FocusKeyManager } from '@angular/cdk/a11y';
9
- import { Directionality } from '@angular/cdk/bidi';
10
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
11
- import { SelectionModel } from '@angular/cdk/collections';
12
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, Input, Optional, Output, QueryList, Self, ViewEncapsulation, } from '@angular/core';
13
- import { FormGroupDirective, NgControl, NgForm, Validators, } from '@angular/forms';
14
- import { ErrorStateMatcher, mixinErrorState } from '@angular/material/core';
15
- import { MatLegacyFormFieldControl } from '@angular/material/legacy-form-field';
16
- import { merge, Subject } from 'rxjs';
17
- import { startWith, takeUntil } from 'rxjs/operators';
18
- import { MatLegacyChip } from './chip';
19
- import * as i0 from "@angular/core";
20
- import * as i1 from "@angular/cdk/bidi";
21
- import * as i2 from "@angular/forms";
22
- import * as i3 from "@angular/material/core";
23
- // Boilerplate for applying mixins to MatChipList.
24
- /** @docs-private */
25
- const _MatChipListBase = mixinErrorState(class {
26
- constructor(_defaultErrorStateMatcher, _parentForm, _parentFormGroup,
27
- /**
28
- * Form control bound to the component.
29
- * Implemented as part of `MatFormFieldControl`.
30
- * @docs-private
31
- */
32
- ngControl) {
33
- this._defaultErrorStateMatcher = _defaultErrorStateMatcher;
34
- this._parentForm = _parentForm;
35
- this._parentFormGroup = _parentFormGroup;
36
- this.ngControl = ngControl;
37
- /**
38
- * Emits whenever the component state changes and should cause the parent
39
- * form-field to update. Implemented as part of `MatFormFieldControl`.
40
- * @docs-private
41
- */
42
- this.stateChanges = new Subject();
43
- }
44
- });
45
- // Increasing integer for generating unique ids for chip-list components.
46
- let nextUniqueId = 0;
47
- /**
48
- * Change event object that is emitted when the chip list value has changed.
49
- * @deprecated Use `MatChipListChange` from `@angular/material/chips` instead. See https://material.angular.io/guide/mdc-migration for information about migrating.
50
- * @breaking-change 17.0.0
51
- */
52
- export class MatLegacyChipListChange {
53
- constructor(
54
- /** Chip list that emitted the event. */
55
- source,
56
- /** Value of the chip list when the event was emitted. */
57
- value) {
58
- this.source = source;
59
- this.value = value;
60
- }
61
- }
62
- /**
63
- * A material design chips component (named ChipList for its similarity to the List component).
64
- * @deprecated Use `MatChipList` from `@angular/material/chips` instead. See https://material.angular.io/guide/mdc-migration for information about migrating.
65
- * @breaking-change 17.0.0
66
- */
67
- export class MatLegacyChipList extends _MatChipListBase {
68
- /** The array of selected chips inside chip list. */
69
- get selected() {
70
- return this.multiple ? this._selectionModel?.selected || [] : this._selectionModel?.selected[0];
71
- }
72
- /** The ARIA role applied to the chip list. */
73
- get role() {
74
- if (this._explicitRole) {
75
- return this._explicitRole;
76
- }
77
- return this.empty ? null : 'listbox';
78
- }
79
- set role(role) {
80
- this._explicitRole = role;
81
- }
82
- /** Whether the user should be allowed to select multiple chips. */
83
- get multiple() {
84
- return this._multiple;
85
- }
86
- set multiple(value) {
87
- this._multiple = coerceBooleanProperty(value);
88
- this._syncChipsState();
89
- }
90
- /**
91
- * A function to compare the option values with the selected values. The first argument
92
- * is a value from an option. The second is a value from the selection. A boolean
93
- * should be returned.
94
- */
95
- get compareWith() {
96
- return this._compareWith;
97
- }
98
- set compareWith(fn) {
99
- this._compareWith = fn;
100
- if (this._selectionModel) {
101
- // A different comparator means the selection could change.
102
- this._initializeSelection();
103
- }
104
- }
105
- /**
106
- * Implemented as part of MatFormFieldControl.
107
- * @docs-private
108
- */
109
- get value() {
110
- return this._value;
111
- }
112
- set value(value) {
113
- this.writeValue(value);
114
- this._value = value;
115
- }
116
- /**
117
- * Implemented as part of MatFormFieldControl.
118
- * @docs-private
119
- */
120
- get id() {
121
- return this._chipInput ? this._chipInput.id : this._uid;
122
- }
123
- /**
124
- * Implemented as part of MatFormFieldControl.
125
- * @docs-private
126
- */
127
- get required() {
128
- return this._required ?? this.ngControl?.control?.hasValidator(Validators.required) ?? false;
129
- }
130
- set required(value) {
131
- this._required = coerceBooleanProperty(value);
132
- this.stateChanges.next();
133
- }
134
- /**
135
- * Implemented as part of MatFormFieldControl.
136
- * @docs-private
137
- */
138
- get placeholder() {
139
- return this._chipInput ? this._chipInput.placeholder : this._placeholder;
140
- }
141
- set placeholder(value) {
142
- this._placeholder = value;
143
- this.stateChanges.next();
144
- }
145
- /** Whether any chips or the matChipInput inside of this chip-list has focus. */
146
- get focused() {
147
- return (this._chipInput && this._chipInput.focused) || this._hasFocusedChip();
148
- }
149
- /**
150
- * Implemented as part of MatFormFieldControl.
151
- * @docs-private
152
- */
153
- get empty() {
154
- return (!this._chipInput || this._chipInput.empty) && (!this.chips || this.chips.length === 0);
155
- }
156
- /**
157
- * Implemented as part of MatFormFieldControl.
158
- * @docs-private
159
- */
160
- get shouldLabelFloat() {
161
- return !this.empty || this.focused;
162
- }
163
- /**
164
- * Implemented as part of MatFormFieldControl.
165
- * @docs-private
166
- */
167
- get disabled() {
168
- return this.ngControl ? !!this.ngControl.disabled : this._disabled;
169
- }
170
- set disabled(value) {
171
- this._disabled = coerceBooleanProperty(value);
172
- this._syncChipsState();
173
- }
174
- /**
175
- * Whether or not this chip list is selectable. When a chip list is not selectable,
176
- * the selected states for all the chips inside the chip list are always ignored.
177
- */
178
- get selectable() {
179
- return this._selectable;
180
- }
181
- set selectable(value) {
182
- this._selectable = coerceBooleanProperty(value);
183
- this._syncChipsState();
184
- }
185
- set tabIndex(value) {
186
- this._userTabIndex = value;
187
- this._tabIndex = value;
188
- }
189
- /** Combined stream of all of the child chips' selection change events. */
190
- get chipSelectionChanges() {
191
- return merge(...this.chips.map(chip => chip.selectionChange));
192
- }
193
- /** Combined stream of all of the child chips' focus change events. */
194
- get chipFocusChanges() {
195
- return merge(...this.chips.map(chip => chip._onFocus));
196
- }
197
- /** Combined stream of all of the child chips' blur change events. */
198
- get chipBlurChanges() {
199
- return merge(...this.chips.map(chip => chip._onBlur));
200
- }
201
- /** Combined stream of all of the child chips' remove change events. */
202
- get chipRemoveChanges() {
203
- return merge(...this.chips.map(chip => chip.destroyed));
204
- }
205
- constructor(_elementRef, _changeDetectorRef, _dir, _parentForm, _parentFormGroup, _defaultErrorStateMatcher, ngControl) {
206
- super(_defaultErrorStateMatcher, _parentForm, _parentFormGroup, ngControl);
207
- this._elementRef = _elementRef;
208
- this._changeDetectorRef = _changeDetectorRef;
209
- this._dir = _dir;
210
- /**
211
- * Implemented as part of MatFormFieldControl.
212
- * @docs-private
213
- */
214
- this.controlType = 'mat-chip-list';
215
- /**
216
- * When a chip is destroyed, we store the index of the destroyed chip until the chips
217
- * query list notifies about the update. This is necessary because we cannot determine an
218
- * appropriate chip that should receive focus until the array of chips updated completely.
219
- */
220
- this._lastDestroyedChipIndex = null;
221
- /** Subject that emits when the component has been destroyed. */
222
- this._destroyed = new Subject();
223
- /** Uid of the chip list */
224
- this._uid = `mat-chip-list-${nextUniqueId++}`;
225
- /** Tab index for the chip list. */
226
- this._tabIndex = 0;
227
- /**
228
- * User defined tab index.
229
- * When it is not null, use user defined tab index. Otherwise use _tabIndex
230
- */
231
- this._userTabIndex = null;
232
- /** Function when touched */
233
- this._onTouched = () => { };
234
- /** Function when changed */
235
- this._onChange = () => { };
236
- this._multiple = false;
237
- this._compareWith = (o1, o2) => o1 === o2;
238
- this._disabled = false;
239
- /** Orientation of the chip list. */
240
- this.ariaOrientation = 'horizontal';
241
- this._selectable = true;
242
- /** Event emitted when the selected chip list value has been changed by the user. */
243
- this.change = new EventEmitter();
244
- /**
245
- * Event that emits whenever the raw value of the chip-list changes. This is here primarily
246
- * to facilitate the two-way binding for the `value` input.
247
- * @docs-private
248
- */
249
- this.valueChange = new EventEmitter();
250
- if (this.ngControl) {
251
- this.ngControl.valueAccessor = this;
252
- }
253
- }
254
- ngAfterContentInit() {
255
- this._keyManager = new FocusKeyManager(this.chips)
256
- .withWrap()
257
- .withVerticalOrientation()
258
- .withHomeAndEnd()
259
- .withHorizontalOrientation(this._dir ? this._dir.value : 'ltr');
260
- if (this._dir) {
261
- this._dir.change
262
- .pipe(takeUntil(this._destroyed))
263
- .subscribe(dir => this._keyManager.withHorizontalOrientation(dir));
264
- }
265
- this._keyManager.tabOut.subscribe(() => this._allowFocusEscape());
266
- // When the list changes, re-subscribe
267
- this.chips.changes.pipe(startWith(null), takeUntil(this._destroyed)).subscribe(() => {
268
- if (this.disabled || !this.selectable) {
269
- // Since this happens after the content has been
270
- // checked, we need to defer it to the next tick.
271
- Promise.resolve().then(() => {
272
- this._syncChipsState();
273
- });
274
- }
275
- this._resetChips();
276
- // Reset chips selected/deselected status
277
- this._initializeSelection();
278
- // Check to see if we need to update our tab index
279
- this._updateTabIndex();
280
- // Check to see if we have a destroyed chip and need to refocus
281
- this._updateFocusForDestroyedChips();
282
- this.stateChanges.next();
283
- });
284
- }
285
- ngOnInit() {
286
- this._selectionModel = new SelectionModel(this.multiple, undefined, false);
287
- this.stateChanges.next();
288
- }
289
- ngDoCheck() {
290
- if (this.ngControl) {
291
- // We need to re-evaluate this on every change detection cycle, because there are some
292
- // error triggers that we can't subscribe to (e.g. parent form submissions). This means
293
- // that whatever logic is in here has to be super lean or we risk destroying the performance.
294
- this.updateErrorState();
295
- if (this.ngControl.disabled !== this._disabled) {
296
- this.disabled = !!this.ngControl.disabled;
297
- }
298
- }
299
- }
300
- ngOnDestroy() {
301
- this._keyManager?.destroy();
302
- this._destroyed.next();
303
- this._destroyed.complete();
304
- this.stateChanges.complete();
305
- this._dropSubscriptions();
306
- }
307
- /** Associates an HTML input element with this chip list. */
308
- registerInput(inputElement) {
309
- this._chipInput = inputElement;
310
- // We use this attribute to match the chip list to its input in test harnesses.
311
- // Set the attribute directly here to avoid "changed after checked" errors.
312
- this._elementRef.nativeElement.setAttribute('data-mat-chip-input', inputElement.id);
313
- }
314
- /**
315
- * Implemented as part of MatFormFieldControl.
316
- * @docs-private
317
- */
318
- setDescribedByIds(ids) {
319
- if (ids.length) {
320
- this._elementRef.nativeElement.setAttribute('aria-describedby', ids.join(' '));
321
- }
322
- else {
323
- this._elementRef.nativeElement.removeAttribute('aria-describedby');
324
- }
325
- }
326
- // Implemented as part of ControlValueAccessor.
327
- writeValue(value) {
328
- if (this.chips) {
329
- this._setSelectionByValue(value, false);
330
- }
331
- }
332
- // Implemented as part of ControlValueAccessor.
333
- registerOnChange(fn) {
334
- this._onChange = fn;
335
- }
336
- // Implemented as part of ControlValueAccessor.
337
- registerOnTouched(fn) {
338
- this._onTouched = fn;
339
- }
340
- // Implemented as part of ControlValueAccessor.
341
- setDisabledState(isDisabled) {
342
- this.disabled = isDisabled;
343
- this.stateChanges.next();
344
- }
345
- /**
346
- * Implemented as part of MatFormFieldControl.
347
- * @docs-private
348
- */
349
- onContainerClick(event) {
350
- if (!this._originatesFromChip(event)) {
351
- this.focus();
352
- }
353
- }
354
- /**
355
- * Focuses the first non-disabled chip in this chip list, or the associated input when there
356
- * are no eligible chips.
357
- */
358
- focus(options) {
359
- if (this.disabled) {
360
- return;
361
- }
362
- // TODO: ARIA says this should focus the first `selected` chip if any are selected.
363
- // Focus on first element if there's no chipInput inside chip-list
364
- if (this._chipInput && this._chipInput.focused) {
365
- // do nothing
366
- }
367
- else if (this.chips.length > 0) {
368
- this._keyManager.setFirstItemActive();
369
- this.stateChanges.next();
370
- }
371
- else {
372
- this._focusInput(options);
373
- this.stateChanges.next();
374
- }
375
- }
376
- /** Attempt to focus an input if we have one. */
377
- _focusInput(options) {
378
- if (this._chipInput) {
379
- this._chipInput.focus(options);
380
- }
381
- }
382
- /**
383
- * Pass events to the keyboard manager. Available here for tests.
384
- */
385
- _keydown(event) {
386
- const target = event.target;
387
- if (target && target.classList.contains('mat-chip')) {
388
- this._keyManager.onKeydown(event);
389
- this.stateChanges.next();
390
- }
391
- }
392
- /**
393
- * Check the tab index as you should not be allowed to focus an empty list.
394
- */
395
- _updateTabIndex() {
396
- // If we have 0 chips, we should not allow keyboard focus
397
- this._tabIndex = this._userTabIndex || (this.chips.length === 0 ? -1 : 0);
398
- }
399
- /**
400
- * If the amount of chips changed, we need to update the
401
- * key manager state and focus the next closest chip.
402
- */
403
- _updateFocusForDestroyedChips() {
404
- // Move focus to the closest chip. If no other chips remain, focus the chip-list itself.
405
- if (this._lastDestroyedChipIndex != null) {
406
- if (this.chips.length) {
407
- const newChipIndex = Math.min(this._lastDestroyedChipIndex, this.chips.length - 1);
408
- this._keyManager.setActiveItem(newChipIndex);
409
- }
410
- else {
411
- this.focus();
412
- }
413
- }
414
- this._lastDestroyedChipIndex = null;
415
- }
416
- /**
417
- * Utility to ensure all indexes are valid.
418
- *
419
- * @param index The index to be checked.
420
- * @returns True if the index is valid for our list of chips.
421
- */
422
- _isValidIndex(index) {
423
- return index >= 0 && index < this.chips.length;
424
- }
425
- _setSelectionByValue(value, isUserInput = true) {
426
- this._clearSelection();
427
- this.chips.forEach(chip => chip.deselect());
428
- if (Array.isArray(value)) {
429
- value.forEach(currentValue => this._selectValue(currentValue, isUserInput));
430
- this._sortValues();
431
- }
432
- else {
433
- const correspondingChip = this._selectValue(value, isUserInput);
434
- // Shift focus to the active item. Note that we shouldn't do this in multiple
435
- // mode, because we don't know what chip the user interacted with last.
436
- if (correspondingChip) {
437
- if (isUserInput) {
438
- this._keyManager.setActiveItem(correspondingChip);
439
- }
440
- }
441
- }
442
- }
443
- /**
444
- * Finds and selects the chip based on its value.
445
- * @returns Chip that has the corresponding value.
446
- */
447
- _selectValue(value, isUserInput = true) {
448
- const correspondingChip = this.chips.find(chip => {
449
- return chip.value != null && this._compareWith(chip.value, value);
450
- });
451
- if (correspondingChip) {
452
- isUserInput ? correspondingChip.selectViaInteraction() : correspondingChip.select();
453
- this._selectionModel.select(correspondingChip);
454
- }
455
- return correspondingChip;
456
- }
457
- _initializeSelection() {
458
- // Defer setting the value in order to avoid the "Expression
459
- // has changed after it was checked" errors from Angular.
460
- Promise.resolve().then(() => {
461
- if (this.ngControl || this._value) {
462
- this._setSelectionByValue(this.ngControl ? this.ngControl.value : this._value, false);
463
- this.stateChanges.next();
464
- }
465
- });
466
- }
467
- /**
468
- * Deselects every chip in the list.
469
- * @param skip Chip that should not be deselected.
470
- */
471
- _clearSelection(skip) {
472
- this._selectionModel.clear();
473
- this.chips.forEach(chip => {
474
- if (chip !== skip) {
475
- chip.deselect();
476
- }
477
- });
478
- this.stateChanges.next();
479
- }
480
- /**
481
- * Sorts the model values, ensuring that they keep the same
482
- * order that they have in the panel.
483
- */
484
- _sortValues() {
485
- if (this._multiple) {
486
- this._selectionModel.clear();
487
- this.chips.forEach(chip => {
488
- if (chip.selected) {
489
- this._selectionModel.select(chip);
490
- }
491
- });
492
- this.stateChanges.next();
493
- }
494
- }
495
- /** Emits change event to set the model value. */
496
- _propagateChanges(fallbackValue) {
497
- let valueToEmit = null;
498
- if (Array.isArray(this.selected)) {
499
- valueToEmit = this.selected.map(chip => chip.value);
500
- }
501
- else {
502
- valueToEmit = this.selected ? this.selected.value : fallbackValue;
503
- }
504
- this._value = valueToEmit;
505
- this.change.emit(new MatLegacyChipListChange(this, valueToEmit));
506
- this.valueChange.emit(valueToEmit);
507
- this._onChange(valueToEmit);
508
- this._changeDetectorRef.markForCheck();
509
- }
510
- /** When blurred, mark the field as touched when focus moved outside the chip list. */
511
- _blur() {
512
- if (!this._hasFocusedChip()) {
513
- this._keyManager.setActiveItem(-1);
514
- }
515
- if (!this.disabled) {
516
- if (this._chipInput) {
517
- // If there's a chip input, we should check whether the focus moved to chip input.
518
- // If the focus is not moved to chip input, mark the field as touched. If the focus moved
519
- // to chip input, do nothing.
520
- // Timeout is needed to wait for the focus() event trigger on chip input.
521
- setTimeout(() => {
522
- if (!this.focused) {
523
- this._markAsTouched();
524
- }
525
- });
526
- }
527
- else {
528
- // If there's no chip input, then mark the field as touched.
529
- this._markAsTouched();
530
- }
531
- }
532
- }
533
- /** Mark the field as touched */
534
- _markAsTouched() {
535
- this._onTouched();
536
- this._changeDetectorRef.markForCheck();
537
- this.stateChanges.next();
538
- }
539
- /**
540
- * Removes the `tabindex` from the chip list and resets it back afterwards, allowing the
541
- * user to tab out of it. This prevents the list from capturing focus and redirecting
542
- * it back to the first chip, creating a focus trap, if it user tries to tab away.
543
- */
544
- _allowFocusEscape() {
545
- if (this._tabIndex !== -1) {
546
- this._tabIndex = -1;
547
- setTimeout(() => {
548
- this._tabIndex = this._userTabIndex || 0;
549
- this._changeDetectorRef.markForCheck();
550
- });
551
- }
552
- }
553
- _resetChips() {
554
- this._dropSubscriptions();
555
- this._listenToChipsFocus();
556
- this._listenToChipsSelection();
557
- this._listenToChipsRemoved();
558
- }
559
- _dropSubscriptions() {
560
- if (this._chipFocusSubscription) {
561
- this._chipFocusSubscription.unsubscribe();
562
- this._chipFocusSubscription = null;
563
- }
564
- if (this._chipBlurSubscription) {
565
- this._chipBlurSubscription.unsubscribe();
566
- this._chipBlurSubscription = null;
567
- }
568
- if (this._chipSelectionSubscription) {
569
- this._chipSelectionSubscription.unsubscribe();
570
- this._chipSelectionSubscription = null;
571
- }
572
- if (this._chipRemoveSubscription) {
573
- this._chipRemoveSubscription.unsubscribe();
574
- this._chipRemoveSubscription = null;
575
- }
576
- }
577
- /** Listens to user-generated selection events on each chip. */
578
- _listenToChipsSelection() {
579
- this._chipSelectionSubscription = this.chipSelectionChanges.subscribe(event => {
580
- event.source.selected
581
- ? this._selectionModel.select(event.source)
582
- : this._selectionModel.deselect(event.source);
583
- // For single selection chip list, make sure the deselected value is unselected.
584
- if (!this.multiple) {
585
- this.chips.forEach(chip => {
586
- if (!this._selectionModel.isSelected(chip) && chip.selected) {
587
- chip.deselect();
588
- }
589
- });
590
- }
591
- if (event.isUserInput) {
592
- this._propagateChanges();
593
- }
594
- });
595
- }
596
- /** Listens to user-generated selection events on each chip. */
597
- _listenToChipsFocus() {
598
- this._chipFocusSubscription = this.chipFocusChanges.subscribe(event => {
599
- let chipIndex = this.chips.toArray().indexOf(event.chip);
600
- if (this._isValidIndex(chipIndex)) {
601
- this._keyManager.updateActiveItem(chipIndex);
602
- }
603
- this.stateChanges.next();
604
- });
605
- this._chipBlurSubscription = this.chipBlurChanges.subscribe(() => {
606
- this._blur();
607
- this.stateChanges.next();
608
- });
609
- }
610
- _listenToChipsRemoved() {
611
- this._chipRemoveSubscription = this.chipRemoveChanges.subscribe(event => {
612
- const chip = event.chip;
613
- const chipIndex = this.chips.toArray().indexOf(event.chip);
614
- // In case the chip that will be removed is currently focused, we temporarily store
615
- // the index in order to be able to determine an appropriate sibling chip that will
616
- // receive focus.
617
- if (this._isValidIndex(chipIndex) && chip._hasFocus) {
618
- this._lastDestroyedChipIndex = chipIndex;
619
- }
620
- });
621
- }
622
- /** Checks whether an event comes from inside a chip element. */
623
- _originatesFromChip(event) {
624
- let currentElement = event.target;
625
- while (currentElement && currentElement !== this._elementRef.nativeElement) {
626
- if (currentElement.classList.contains('mat-chip')) {
627
- return true;
628
- }
629
- currentElement = currentElement.parentElement;
630
- }
631
- return false;
632
- }
633
- /** Checks whether any of the chips is focused. */
634
- _hasFocusedChip() {
635
- return this.chips && this.chips.some(chip => chip._hasFocus);
636
- }
637
- /** Syncs the list's state with the individual chips. */
638
- _syncChipsState() {
639
- if (this.chips) {
640
- this.chips.forEach(chip => {
641
- chip._chipListDisabled = this._disabled;
642
- chip._chipListMultiple = this.multiple;
643
- chip.chipListSelectable = this._selectable;
644
- });
645
- }
646
- }
647
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: MatLegacyChipList, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.Directionality, optional: true }, { token: i2.NgForm, optional: true }, { token: i2.FormGroupDirective, optional: true }, { token: i3.ErrorStateMatcher }, { token: i2.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
648
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.1", type: MatLegacyChipList, selector: "mat-chip-list", inputs: { role: "role", userAriaDescribedBy: ["aria-describedby", "userAriaDescribedBy"], errorStateMatcher: "errorStateMatcher", multiple: "multiple", compareWith: "compareWith", value: "value", required: "required", placeholder: "placeholder", disabled: "disabled", ariaOrientation: ["aria-orientation", "ariaOrientation"], selectable: "selectable", tabIndex: "tabIndex" }, outputs: { change: "change", valueChange: "valueChange" }, host: { attributes: { "ngSkipHydration": "" }, listeners: { "focus": "focus()", "blur": "_blur()", "keydown": "_keydown($event)" }, properties: { "attr.tabindex": "disabled ? null : _tabIndex", "attr.aria-required": "role ? required : null", "attr.aria-disabled": "disabled.toString()", "attr.aria-invalid": "errorState", "attr.aria-multiselectable": "multiple", "attr.role": "role", "class.mat-chip-list-disabled": "disabled", "class.mat-chip-list-invalid": "errorState", "class.mat-chip-list-required": "required", "attr.aria-orientation": "ariaOrientation", "id": "_uid" }, classAttribute: "mat-chip-list" }, providers: [{ provide: MatLegacyFormFieldControl, useExisting: MatLegacyChipList }], queries: [{ propertyName: "chips", predicate: MatLegacyChip, descendants: true }], exportAs: ["matChipList"], usesInheritance: true, ngImport: i0, template: `<div class="mat-chip-list-wrapper"><ng-content></ng-content></div>`, isInline: true, styles: [".mat-chip{position:relative;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0);border:none;-webkit-appearance:none;-moz-appearance:none}.mat-chip::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px) * -1)}.mat-standard-chip{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);display:inline-flex;padding:7px 12px;border-radius:16px;align-items:center;cursor:default;min-height:32px;height:1px}.mat-standard-chip._mat-animation-noopable{transition:none !important;animation:none !important}.mat-standard-chip .mat-chip-remove{border:none;-webkit-appearance:none;-moz-appearance:none;padding:0;background:none}.mat-standard-chip .mat-chip-remove.mat-icon,.mat-standard-chip .mat-chip-remove .mat-icon{width:18px;height:18px;font-size:18px}.mat-standard-chip::after{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:inherit;opacity:0;content:\"\";pointer-events:none;transition:opacity 200ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-standard-chip:hover::after{opacity:.12}.mat-standard-chip:focus{outline:none}.mat-standard-chip:focus::after{opacity:.16}.cdk-high-contrast-active .mat-standard-chip{outline:solid 1px}.cdk-high-contrast-active .mat-standard-chip.mat-chip-selected{outline-width:3px}.mat-standard-chip.mat-chip-disabled::after{opacity:0}.mat-standard-chip.mat-chip-disabled .mat-chip-remove,.mat-standard-chip.mat-chip-disabled .mat-chip-trailing-icon{cursor:default}.mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar,.mat-standard-chip.mat-chip-with-avatar{padding-top:0;padding-bottom:0}.mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar{padding-right:8px;padding-left:0}[dir=rtl] .mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar{padding-left:8px;padding-right:0}.mat-standard-chip.mat-chip-with-trailing-icon{padding-top:7px;padding-bottom:7px;padding-right:8px;padding-left:12px}[dir=rtl] .mat-standard-chip.mat-chip-with-trailing-icon{padding-left:8px;padding-right:12px}.mat-standard-chip.mat-chip-with-avatar{padding-left:0;padding-right:12px}[dir=rtl] .mat-standard-chip.mat-chip-with-avatar{padding-right:0;padding-left:12px}.mat-standard-chip .mat-chip-avatar{width:24px;height:24px;margin-right:8px;margin-left:4px}[dir=rtl] .mat-standard-chip .mat-chip-avatar{margin-left:8px;margin-right:4px}.mat-standard-chip .mat-chip-remove,.mat-standard-chip .mat-chip-trailing-icon{width:18px;height:18px;cursor:pointer}.mat-standard-chip .mat-chip-remove,.mat-standard-chip .mat-chip-trailing-icon{margin-left:8px;margin-right:0}[dir=rtl] .mat-standard-chip .mat-chip-remove,[dir=rtl] .mat-standard-chip .mat-chip-trailing-icon{margin-right:8px;margin-left:0}.mat-chip-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit;overflow:hidden;transform:translateZ(0)}.mat-chip-list-wrapper{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;margin:-4px}.mat-chip-list-wrapper input.mat-input-element,.mat-chip-list-wrapper .mat-standard-chip{margin:4px}.mat-chip-list-stacked .mat-chip-list-wrapper{flex-direction:column;align-items:flex-start}.mat-chip-list-stacked .mat-chip-list-wrapper .mat-standard-chip{width:100%}.mat-chip-avatar{border-radius:50%;justify-content:center;align-items:center;display:flex;overflow:hidden;object-fit:cover}input.mat-chip-input{width:150px;margin:4px;flex:1 0 150px}"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
649
- }
650
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: MatLegacyChipList, decorators: [{
651
- type: Component,
652
- args: [{ selector: 'mat-chip-list', template: `<div class="mat-chip-list-wrapper"><ng-content></ng-content></div>`, exportAs: 'matChipList', host: {
653
- '[attr.tabindex]': 'disabled ? null : _tabIndex',
654
- '[attr.aria-required]': 'role ? required : null',
655
- '[attr.aria-disabled]': 'disabled.toString()',
656
- '[attr.aria-invalid]': 'errorState',
657
- '[attr.aria-multiselectable]': 'multiple',
658
- '[attr.role]': 'role',
659
- '[class.mat-chip-list-disabled]': 'disabled',
660
- '[class.mat-chip-list-invalid]': 'errorState',
661
- '[class.mat-chip-list-required]': 'required',
662
- '[attr.aria-orientation]': 'ariaOrientation',
663
- 'class': 'mat-chip-list',
664
- '(focus)': 'focus()',
665
- '(blur)': '_blur()',
666
- '(keydown)': '_keydown($event)',
667
- '[id]': '_uid',
668
- 'ngSkipHydration': '',
669
- }, providers: [{ provide: MatLegacyFormFieldControl, useExisting: MatLegacyChipList }], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".mat-chip{position:relative;box-sizing:border-box;-webkit-tap-highlight-color:rgba(0,0,0,0);border:none;-webkit-appearance:none;-moz-appearance:none}.mat-chip::before{margin:calc(calc(var(--mat-focus-indicator-border-width, 3px) + 2px) * -1)}.mat-standard-chip{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);display:inline-flex;padding:7px 12px;border-radius:16px;align-items:center;cursor:default;min-height:32px;height:1px}.mat-standard-chip._mat-animation-noopable{transition:none !important;animation:none !important}.mat-standard-chip .mat-chip-remove{border:none;-webkit-appearance:none;-moz-appearance:none;padding:0;background:none}.mat-standard-chip .mat-chip-remove.mat-icon,.mat-standard-chip .mat-chip-remove .mat-icon{width:18px;height:18px;font-size:18px}.mat-standard-chip::after{top:0;left:0;right:0;bottom:0;position:absolute;border-radius:inherit;opacity:0;content:\"\";pointer-events:none;transition:opacity 200ms cubic-bezier(0.35, 0, 0.25, 1)}.mat-standard-chip:hover::after{opacity:.12}.mat-standard-chip:focus{outline:none}.mat-standard-chip:focus::after{opacity:.16}.cdk-high-contrast-active .mat-standard-chip{outline:solid 1px}.cdk-high-contrast-active .mat-standard-chip.mat-chip-selected{outline-width:3px}.mat-standard-chip.mat-chip-disabled::after{opacity:0}.mat-standard-chip.mat-chip-disabled .mat-chip-remove,.mat-standard-chip.mat-chip-disabled .mat-chip-trailing-icon{cursor:default}.mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar,.mat-standard-chip.mat-chip-with-avatar{padding-top:0;padding-bottom:0}.mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar{padding-right:8px;padding-left:0}[dir=rtl] .mat-standard-chip.mat-chip-with-trailing-icon.mat-chip-with-avatar{padding-left:8px;padding-right:0}.mat-standard-chip.mat-chip-with-trailing-icon{padding-top:7px;padding-bottom:7px;padding-right:8px;padding-left:12px}[dir=rtl] .mat-standard-chip.mat-chip-with-trailing-icon{padding-left:8px;padding-right:12px}.mat-standard-chip.mat-chip-with-avatar{padding-left:0;padding-right:12px}[dir=rtl] .mat-standard-chip.mat-chip-with-avatar{padding-right:0;padding-left:12px}.mat-standard-chip .mat-chip-avatar{width:24px;height:24px;margin-right:8px;margin-left:4px}[dir=rtl] .mat-standard-chip .mat-chip-avatar{margin-left:8px;margin-right:4px}.mat-standard-chip .mat-chip-remove,.mat-standard-chip .mat-chip-trailing-icon{width:18px;height:18px;cursor:pointer}.mat-standard-chip .mat-chip-remove,.mat-standard-chip .mat-chip-trailing-icon{margin-left:8px;margin-right:0}[dir=rtl] .mat-standard-chip .mat-chip-remove,[dir=rtl] .mat-standard-chip .mat-chip-trailing-icon{margin-right:8px;margin-left:0}.mat-chip-ripple{top:0;left:0;right:0;bottom:0;position:absolute;pointer-events:none;border-radius:inherit;overflow:hidden;transform:translateZ(0)}.mat-chip-list-wrapper{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;margin:-4px}.mat-chip-list-wrapper input.mat-input-element,.mat-chip-list-wrapper .mat-standard-chip{margin:4px}.mat-chip-list-stacked .mat-chip-list-wrapper{flex-direction:column;align-items:flex-start}.mat-chip-list-stacked .mat-chip-list-wrapper .mat-standard-chip{width:100%}.mat-chip-avatar{border-radius:50%;justify-content:center;align-items:center;display:flex;overflow:hidden;object-fit:cover}input.mat-chip-input{width:150px;margin:4px;flex:1 0 150px}"] }]
670
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.Directionality, decorators: [{
671
- type: Optional
672
- }] }, { type: i2.NgForm, decorators: [{
673
- type: Optional
674
- }] }, { type: i2.FormGroupDirective, decorators: [{
675
- type: Optional
676
- }] }, { type: i3.ErrorStateMatcher }, { type: i2.NgControl, decorators: [{
677
- type: Optional
678
- }, {
679
- type: Self
680
- }] }]; }, propDecorators: { role: [{
681
- type: Input
682
- }], userAriaDescribedBy: [{
683
- type: Input,
684
- args: ['aria-describedby']
685
- }], errorStateMatcher: [{
686
- type: Input
687
- }], multiple: [{
688
- type: Input
689
- }], compareWith: [{
690
- type: Input
691
- }], value: [{
692
- type: Input
693
- }], required: [{
694
- type: Input
695
- }], placeholder: [{
696
- type: Input
697
- }], disabled: [{
698
- type: Input
699
- }], ariaOrientation: [{
700
- type: Input,
701
- args: ['aria-orientation']
702
- }], selectable: [{
703
- type: Input
704
- }], tabIndex: [{
705
- type: Input
706
- }], change: [{
707
- type: Output
708
- }], valueChange: [{
709
- type: Output
710
- }], chips: [{
711
- type: ContentChildren,
712
- args: [MatLegacyChip, {
713
- // We need to use `descendants: true`, because Ivy will no longer match
714
- // indirect descendants if it's left as false.
715
- descendants: true,
716
- }]
717
- }] } });
718
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21hdGVyaWFsL2xlZ2FjeS1jaGlwcy9jaGlwLWxpc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQWUscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFFZixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxJQUFJLEVBQ0osaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFTCxrQkFBa0IsRUFDbEIsU0FBUyxFQUNULE1BQU0sRUFDTixVQUFVLEdBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQXNCLGlCQUFpQixFQUFFLGVBQWUsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQy9GLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQzlFLE9BQU8sRUFBQyxLQUFLLEVBQWMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQzlELE9BQU8sRUFBQyxTQUFTLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFDLGFBQWEsRUFBbUQsTUFBTSxRQUFRLENBQUM7Ozs7O0FBR3ZGLGtEQUFrRDtBQUNsRCxvQkFBb0I7QUFDcEIsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQ3RDO0lBUUUsWUFDUyx5QkFBNEMsRUFD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O3NCQURkLEtBQUs7Z0JBb0NGLFFBQVE7c0JBRFgsS0FBSztnQkFXcUIsZUFBZTtzQkFBekMsS0FBSzt1QkFBQyxrQkFBa0I7Z0JBT3JCLFVBQVU7c0JBRGIsS0FBSztnQkFXRixRQUFRO3NCQURYLEtBQUs7Z0JBMkJhLE1BQU07c0JBQXhCLE1BQU07Z0JBT1ksV0FBVztzQkFBN0IsTUFBTTtnQkFRUCxLQUFLO3NCQUxKLGVBQWU7dUJBQUMsYUFBYSxFQUFFO3dCQUM5Qix1RUFBdUU7d0JBQ3ZFLDhDQUE4Qzt3QkFDOUMsV0FBVyxFQUFFLElBQUk7cUJBQ2xCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7Rm9jdXNLZXlNYW5hZ2VyfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQge0RpcmVjdGlvbmFsaXR5fSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XG5pbXBvcnQge0Jvb2xlYW5JbnB1dCwgY29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtTZWxlY3Rpb25Nb2RlbH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIERvQ2hlY2ssXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFNlbGYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtR3JvdXBEaXJlY3RpdmUsXG4gIE5nQ29udHJvbCxcbiAgTmdGb3JtLFxuICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0NhblVwZGF0ZUVycm9yU3RhdGUsIEVycm9yU3RhdGVNYXRjaGVyLCBtaXhpbkVycm9yU3RhdGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtNYXRMZWdhY3lGb3JtRmllbGRDb250cm9sfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktZm9ybS1maWVsZCc7XG5pbXBvcnQge21lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtzdGFydFdpdGgsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtNYXRMZWdhY3lDaGlwLCBNYXRMZWdhY3lDaGlwRXZlbnQsIE1hdExlZ2FjeUNoaXBTZWxlY3Rpb25DaGFuZ2V9IGZyb20gJy4vY2hpcCc7XG5pbXBvcnQge01hdExlZ2FjeUNoaXBUZXh0Q29udHJvbH0gZnJvbSAnLi9jaGlwLXRleHQtY29udHJvbCc7XG5cbi8vIEJvaWxlcnBsYXRlIGZvciBhcHBseWluZyBtaXhpbnMgdG8gTWF0Q2hpcExpc3QuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuY29uc3QgX01hdENoaXBMaXN0QmFzZSA9IG1peGluRXJyb3JTdGF0ZShcbiAgY2xhc3Mge1xuICAgIC8qKlxuICAgICAqIEVtaXRzIHdoZW5ldmVyIHRoZSBjb21wb25lbnQgc3RhdGUgY2hhbmdlcyBhbmQgc2hvdWxkIGNhdXNlIHRoZSBwYXJlbnRcbiAgICAgKiBmb3JtLWZpZWxkIHRvIHVwZGF0ZS4gSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBgTWF0Rm9ybUZpZWxkQ29udHJvbGAuXG4gICAgICogQGRvY3MtcHJpdmF0ZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IHN0YXRlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgIHB1YmxpYyBfZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlcixcbiAgICAgIHB1YmxpYyBfcGFyZW50Rm9ybTogTmdGb3JtLFxuICAgICAgcHVibGljIF9wYXJlbnRGb3JtR3JvdXA6IEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgICAgIC8qKlxuICAgICAgICogRm9ybSBjb250cm9sIGJvdW5kIHRvIHRoZSBjb21wb25lbnQuXG4gICAgICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIGBNYXRGb3JtRmllbGRDb250cm9sYC5cbiAgICAgICAqIEBkb2NzLXByaXZhdGVcbiAgICAgICAqL1xuICAgICAgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgICkge31cbiAgfSxcbik7XG5cbi8vIEluY3JlYXNpbmcgaW50ZWdlciBmb3IgZ2VuZXJhdGluZyB1bmlxdWUgaWRzIGZvciBjaGlwLWxpc3QgY29tcG9uZW50cy5cbmxldCBuZXh0VW5pcXVlSWQgPSAwO1xuXG4vKipcbiAqIENoYW5nZSBldmVudCBvYmplY3QgdGhhdCBpcyBlbWl0dGVkIHdoZW4gdGhlIGNoaXAgbGlzdCB2YWx1ZSBoYXMgY2hhbmdlZC5cbiAqIEBkZXByZWNhdGVkIFVzZSBgTWF0Q2hpcExpc3RDaGFuZ2VgIGZyb20gYEBhbmd1bGFyL21hdGVyaWFsL2NoaXBzYCBpbnN0ZWFkLiBTZWUgaHR0cHM6Ly9tYXRlcmlhbC5hbmd1bGFyLmlvL2d1aWRlL21kYy1taWdyYXRpb24gZm9yIGluZm9ybWF0aW9uIGFib3V0IG1pZ3JhdGluZy5cbiAqIEBicmVha2luZy1jaGFuZ2UgMTcuMC4wXG4gKi9cbmV4cG9ydCBjbGFzcyBNYXRMZWdhY3lDaGlwTGlzdENoYW5nZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIC8qKiBDaGlwIGxpc3QgdGhhdCBlbWl0dGVkIHRoZSBldmVudC4gKi9cbiAgICBwdWJsaWMgc291cmNlOiBNYXRMZWdhY3lDaGlwTGlzdCxcbiAgICAvKiogVmFsdWUgb2YgdGhlIGNoaXAgbGlzdCB3aGVuIHRoZSBldmVudCB3YXMgZW1pdHRlZC4gKi9cbiAgICBwdWJsaWMgdmFsdWU6IGFueSxcbiAgKSB7fVxufVxuXG4vKipcbiAqIEEgbWF0ZXJpYWwgZGVzaWduIGNoaXBzIGNvbXBvbmVudCAobmFtZWQgQ2hpcExpc3QgZm9yIGl0cyBzaW1pbGFyaXR5IHRvIHRoZSBMaXN0IGNvbXBvbmVudCkuXG4gKiBAZGVwcmVjYXRlZCBVc2UgYE1hdENoaXBMaXN0YCBmcm9tIGBAYW5ndWxhci9tYXRlcmlhbC9jaGlwc2AgaW5zdGVhZC4gU2VlIGh0dHBzOi8vbWF0ZXJpYWwuYW5ndWxhci5pby9ndWlkZS9tZGMtbWlncmF0aW9uIGZvciBpbmZvcm1hdGlvbiBhYm91dCBtaWdyYXRpbmcuXG4gKiBAYnJlYWtpbmctY2hhbmdlIDE3LjAuMFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtY2hpcC1saXN0JyxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwibWF0LWNoaXAtbGlzdC13cmFwcGVyXCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvZGl2PmAsXG4gIGV4cG9ydEFzOiAnbWF0Q2hpcExpc3QnLFxuICBob3N0OiB7XG4gICAgJ1thdHRyLnRhYmluZGV4XSc6ICdkaXNhYmxlZCA/IG51bGwgOiBfdGFiSW5kZXgnLFxuICAgICdbYXR0ci5hcmlhLXJlcXVpcmVkXSc6ICdyb2xlID8gcmVxdWlyZWQgOiBudWxsJyxcbiAgICAnW2F0dHIuYXJpYS1kaXNhYmxlZF0nOiAnZGlzYWJsZWQudG9TdHJpbmcoKScsXG4gICAgJ1thdHRyLmFyaWEtaW52YWxpZF0nOiAnZXJyb3JTdGF0ZScsXG4gICAgJ1thdHRyLmFyaWEtbXVsdGlzZWxlY3RhYmxlXSc6ICdtdWx0aXBsZScsXG4gICAgJ1thdHRyLnJvbGVdJzogJ3JvbGUnLFxuICAgICdbY2xhc3MubWF0LWNoaXAtbGlzdC1kaXNhYmxlZF0nOiAnZGlzYWJsZWQnLFxuICAgICdbY2xhc3MubWF0LWNoaXAtbGlzdC1pbnZhbGlkXSc6ICdlcnJvclN0YXRlJyxcbiAgICAnW2NsYXNzLm1hdC1jaGlwLWxpc3QtcmVxdWlyZWRdJzogJ3JlcXVpcmVkJyxcbiAgICAnW2F0dHIuYXJpYS1vcmllbnRhdGlvbl0nOiAnYXJpYU9yaWVudGF0aW9uJyxcbiAgICAnY2xhc3MnOiAnbWF0LWNoaXAtbGlzdCcsXG4gICAgJyhmb2N1cyknOiAnZm9jdXMoKScsXG4gICAgJyhibHVyKSc6ICdfYmx1cigpJyxcbiAgICAnKGtleWRvd24pJzogJ19rZXlkb3duKCRldmVudCknLFxuICAgICdbaWRdJzogJ191aWQnLFxuICAgICduZ1NraXBIeWRyYXRpb24nOiAnJyxcbiAgfSxcbiAgcHJvdmlkZXJzOiBbe3Byb3ZpZGU6IE1hdExlZ2FjeUZvcm1GaWVsZENvbnRyb2wsIHVzZUV4aXN0aW5nOiBNYXRMZWdhY3lDaGlwTGlzdH1dLFxuICBzdHlsZVVybHM6IFsnY2hpcHMuY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNYXRMZWdhY3lDaGlwTGlzdFxuICBleHRlbmRzIF9NYXRDaGlwTGlzdEJhc2VcbiAgaW1wbGVtZW50c1xuICAgIE1hdExlZ2FjeUZvcm1GaWVsZENvbnRyb2w8YW55PixcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIERvQ2hlY2ssXG4gICAgT25Jbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBDYW5VcGRhdGVFcnJvclN0YXRlXG57XG4gIC8qKlxuICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIE1hdEZvcm1GaWVsZENvbnRyb2wuXG4gICAqIEBkb2NzLXByaXZhdGVcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRyb2xUeXBlOiBzdHJpbmcgPSAnbWF0LWNoaXAtbGlzdCc7XG5cbiAgLyoqXG4gICAqIFdoZW4gYSBjaGlwIGlzIGRlc3Ryb3llZCwgd2Ugc3RvcmUgdGhlIGluZGV4IG9mIHRoZSBkZXN0cm95ZWQgY2hpcCB1bnRpbCB0aGUgY2hpcHNcbiAgICogcXVlcnkgbGlzdCBub3RpZmllcyBhYm91dCB0aGUgdXBkYXRlLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlIGNhbm5vdCBkZXRlcm1pbmUgYW5cbiAgICogYXBwcm9wcmlhdGUgY2hpcCB0aGF0IHNob3VsZCByZWNlaXZlIGZvY3VzIHVudGlsIHRoZSBhcnJheSBvZiBjaGlwcyB1cGRhdGVkIGNvbXBsZXRlbHkuXG4gICAqL1xuICBwcml2YXRlIF9sYXN0RGVzdHJveWVkQ2hpcEluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAvKiogU3ViamVjdCB0aGF0IGVtaXRzIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgYmVlbiBkZXN0cm95ZWQuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLyoqIFN1YnNjcmlwdGlvbiB0byBmb2N1cyBjaGFuZ2VzIGluIHRoZSBjaGlwcy4gKi9cbiAgcHJpdmF0ZSBfY2hpcEZvY3VzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsO1xuXG4gIC8qKiBTdWJzY3JpcHRpb24gdG8gYmx1ciBjaGFuZ2VzIGluIHRoZSBjaGlwcy4gKi9cbiAgcHJpdmF0ZSBfY2hpcEJsdXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGw7XG5cbiAgLyoqIFN1YnNjcmlwdGlvbiB0byBzZWxlY3Rpb24gY2hhbmdlcyBpbiBjaGlwcy4gKi9cbiAgcHJpdmF0ZSBfY2hpcFNlbGVjdGlvblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbDtcblxuICAvKiogU3Vic2NyaXB0aW9uIHRvIHJlbW92ZSBjaGFuZ2VzIGluIGNoaXBzLiAqL1xuICBwcml2YXRlIF9jaGlwUmVtb3ZlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsO1xuXG4gIC8qKiBUaGUgY2hpcCBpbnB1dCB0byBhZGQgbW9yZSBjaGlwcyAqL1xuICBwcm90ZWN0ZWQgX2NoaXBJbnB1dDogTWF0TGVnYWN5Q2hpcFRleHRDb250cm9sO1xuXG4gIC8qKiBVaWQgb2YgdGhlIGNoaXAgbGlzdCAqL1xuICBfdWlkOiBzdHJpbmcgPSBgbWF0LWNoaXAtbGlzdC0ke25leHRVbmlxdWVJZCsrfWA7XG5cbiAgLyoqIFRhYiBpbmRleCBmb3IgdGhlIGNoaXAgbGlzdC4gKi9cbiAgX3RhYkluZGV4ID0gMDtcblxuICAvKipcbiAgICogVXNlciBkZWZpbmVkIHRhYiBpbmRleC5cbiAgICogV2hlbiBpdCBpcyBub3QgbnVsbCwgdXNlIHVzZXIgZGVmaW5lZCB0YWIgaW5kZXguIE90aGVyd2lzZSB1c2UgX3RhYkluZGV4XG4gICAqL1xuICBfdXNlclRhYkluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAvKiogVGhlIEZvY3VzS2V5TWFuYWdlciB3aGljaCBoYW5kbGVzIGZvY3VzLiAqL1xuICBfa2V5TWFuYWdlcjogRm9jdXNLZXlNYW5hZ2VyPE1hdExlZ2FjeUNoaXA+O1xuXG4gIC8qKiBGdW5jdGlvbiB3aGVuIHRvdWNoZWQgKi9cbiAgX29uVG91Y2hlZCA9ICgpID0+IHt9O1xuXG4gIC8qKiBGdW5jdGlvbiB3aGVuIGNoYW5nZWQgKi9cbiAgX29uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIF9zZWxlY3Rpb25Nb2RlbDogU2VsZWN0aW9uTW9kZWw8TWF0TGVnYWN5Q2hpcD47XG5cbiAgLyoqIFRoZSBhcnJheSBvZiBzZWxlY3RlZCBjaGlwcyBpbnNpZGUgY2hpcCBsaXN0LiAqL1xuICBnZXQgc2VsZWN0ZWQoKTogTWF0TGVnYWN5Q2hpcFtdIHwgTWF0TGVnYWN5Q2hpcCB7XG4gICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgPyB0aGlzLl9zZWxlY3Rpb25Nb2RlbD8uc2VsZWN0ZWQgfHwgW10gOiB0aGlzLl9zZWxlY3Rpb25Nb2RlbD8uc2VsZWN0ZWRbMF07XG4gIH1cblxuICAvKiogVGhlIEFSSUEgcm9sZSBhcHBsaWVkIHRvIHRoZSBjaGlwIGxpc3QuICovXG4gIEBJbnB1dCgpXG4gIGdldCByb2xlKCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICh0aGlzLl9leHBsaWNpdFJvbGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9leHBsaWNpdFJvbGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZW1wdHkgPyBudWxsIDogJ2xpc3Rib3gnO1xuICB9XG4gIHNldCByb2xlKHJvbGU6IHN0cmluZyB8IG51bGwpIHtcbiAgICB0aGlzLl9leHBsaWNpdFJvbGUgPSByb2xlO1xuICB9XG4gIHByaXZhdGUgX2V4cGxpY2l0Um9sZT86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgTWF0Rm9ybUZpZWxkQ29udHJvbC5cbiAgICogQGRvY3MtcHJpdmF0ZVxuICAgKi9cbiAgQElucHV0KCdhcmlhLWRlc2NyaWJlZGJ5JykgdXNlckFyaWFEZXNjcmliZWRCeTogc3RyaW5nO1xuXG4gIC8qKiBBbiBvYmplY3QgdXNlZCB0byBjb250cm9sIHdoZW4gZXJyb3IgbWVzc2FnZXMgYXJlIHNob3duLiAqL1xuICBASW5wdXQoKSBvdmVycmlkZSBlcnJvclN0YXRlTWF0Y2hlcjogRXJyb3JTdGF0ZU1hdGNoZXI7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHVzZXIgc2hvdWxkIGJlIGFsbG93ZWQgdG8gc2VsZWN0IG11bHRpcGxlIGNoaXBzLiAqL1xuICBASW5wdXQoKVxuICBnZXQgbXVsdGlwbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX211bHRpcGxlO1xuICB9XG4gIHNldCBtdWx0aXBsZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fbXVsdGlwbGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIHRoaXMuX3N5bmNDaGlwc1N0YXRlKCk7XG4gIH1cbiAgcHJpdmF0ZSBfbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0byBjb21wYXJlIHRoZSBvcHRpb24gdmFsdWVzIHdpdGggdGhlIHNlbGVjdGVkIHZhbHVlcy4gVGhlIGZpcnN0IGFyZ3VtZW50XG4gICAqIGlzIGEgdmFsdWUgZnJvbSBhbiBvcHRpb24uIFRoZSBzZWNvbmQgaXMgYSB2YWx1ZSBmcm9tIHRoZSBzZWxlY3Rpb24uIEEgYm9vbGVhblxuICAgKiBzaG91bGQgYmUgcmV0dXJuZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgY29tcGFyZVdpdGgoKTogKG8xOiBhbnksIG8yOiBhbnkpID0+IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jb21wYXJlV2l0aDtcbiAgfVxuICBzZXQgY29tcGFyZVdpdGgoZm46IChvMTogYW55LCBvMjogYW55KSA9PiBib29sZWFuKSB7XG4gICAgdGhpcy5fY29tcGFyZVdpdGggPSBmbjtcbiAgICBpZiAodGhpcy5fc2VsZWN0aW9uTW9kZWwpIHtcbiAgICAgIC8vIEEgZGlmZmVyZW50IGNvbXBhcmF0b3IgbWVhbnMgdGhlIHNlbGVjdGlvbiBjb3VsZCBjaGFuZ2UuXG4gICAgICB0aGlzLl9pbml0aWFsaXplU2VsZWN0aW9uKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX2NvbXBhcmVXaXRoID0gKG8xOiBhbnksIG8yOiBhbnkpID0+IG8xID09PSBvMjtcblxuICAvKipcbiAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBNYXRGb3JtRmllbGRDb250cm9sLlxuICAgKiBAZG9jcy1wcml2YXRlXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLndyaXRlVmFsdWUodmFsdWUpO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHJvdGVjdGVkIF92YWx1ZTogYW55O1xuXG4gIC8qKlxuICAgKiBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIE1hdEZvcm1GaWVsZENvbnRyb2wuXG4gICAqIEBkb2NzLXByaXZhdGVcbiAgICovXG4gIGdldCBpZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jaGlwSW5wdXQgPyB0aGlzLl9jaGlwSW5wdXQuaWQgOiB0aGlzLl91aWQ7XG4gIH1cblxuICAvKipcbiAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBNYXRGb3JtRmllbGRDb250cm9sLlxuICAgKiBAZG9jcy1wcml2YXRlXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkID8/IHRoaXMubmdDb250cm9sPy5jb250cm9sPy5oYXNWYWxpZGF0b3IoVmFsaWRhdG9ycy5yZXF1aXJlZCkgPz8gZmFsc2U7XG4gIH1cbiAgc2V0IHJlcXVpcmVkKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG4gIHByb3RlY3RlZCBfcmVxdWlyZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgTWF0Rm9ybUZpZWxkQ29udHJvbC5cbiAgICogQGRvY3MtcHJpdmF0ZVxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IHBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2NoaXBJbnB1dCA/IHRoaXMuX2NoaXBJbnB1dC5wbGFjZWhvbGRlciA6IHRoaXMuX3BsYWNlaG9sZGVyO1xuICB9XG4gIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcGxhY2Vob2xkZXIgPSB2YWx1ZTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cbiAgcHJvdGVjdGVkIF9wbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gIC8qKiBXaGV0aGVyIGFueSBjaGlwcyBvciB0aGUgbWF0Q2hpcElucHV0IGluc2lkZSBvZiB0aGlzIGNoaXAtbGlzdCBoYXMgZm9jdXMuICovXG4gIGdldCBmb2N1c2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5fY2hpcElucHV0ICYmIHRoaXMuX2NoaXBJbnB1dC5mb2N1c2VkKSB8fCB0aGlzLl9oYXNGb2N1c2VkQ2hpcCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgTWF0Rm9ybUZpZWxkQ29udHJvbC5cbiAgICogQGRvY3MtcHJpdmF0ZVxuICAgKi9cbiAgZ2V0IGVtcHR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoIXRoaXMuX2NoaXBJbnB1dCB8fCB0aGlzLl9jaGlwSW5wdXQuZW1wdHkpICYmICghdGhpcy5jaGlwcyB8fCB0aGlzLmNoaXBzLmxlbmd0aCA9PT0gMCk7XG4gIH1cblxuICAvKipcbiAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBNYXRGb3JtRmllbGRDb250cm9sLlxuICAgKiBAZG9jcy1wcml2YXRlXG4gICAqL1xuICBnZXQgc2hvdWxkTGFiZWxGbG9hdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuZW1wdHkgfHwgdGhpcy5mb2N1c2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgTWF0Rm9ybUZpZWxkQ29udHJvbC5cbiAgICogQGRvY3MtcHJpdmF0ZVxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm5nQ29udHJvbCA/ICEhdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQgOiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB0aGlzLl9zeW5jQ2hpcHNTdGF0ZSgpO1xuICB9XG4gIHByb3RlY3RlZCBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogT3JpZW50YXRpb24gb2YgdGhlIGNoaXAgbGlzdC4gKi9cbiAgQElucHV0KCdhcmlhLW9yaWVudGF0aW9uJykgYXJpYU9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnID0gJ2hvcml6b250YWwnO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIGNoaXAgbGlzdCBpcyBzZWxlY3RhYmxlLiBXaGVuIGEgY2hpcCBsaXN0IGlzIG5vdCBzZWxlY3RhYmxlLFxuICAgKiB0aGUgc2VsZWN0ZWQgc3RhdGVzIGZvciBhbGwgdGhlIGNoaXBzIGluc2lkZSB0aGUgY2hpcCBsaXN0IGFyZSBhbHdheXMgaWdub3JlZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBzZWxlY3RhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RhYmxlO1xuICB9XG4gIHNldCBzZWxlY3RhYmxlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9zZWxlY3RhYmxlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB0aGlzLl9zeW5jQ2hpcHNTdGF0ZSgpO1xuICB9XG4gIHByb3RlY3RlZCBfc2VsZWN0YWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgc2V0IHRhYkluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl91c2VyVGFiSW5kZXggPSB2YWx1ZTtcbiAgICB0aGlzLl90YWJJbmRleCA9IHZhbHVlO1xuICB9XG5cbiAgLyoqIENvbWJpbmVkIHN0cmVhbSBvZiBhbGwgb2YgdGhlIGNoaWxkIGNoaXBzJyBzZWxlY3Rpb24gY2hhbmdlIGV2ZW50cy4gKi9cbiAgZ2V0IGNoaXBTZWxlY3Rpb25DaGFuZ2VzKCk6IE9ic2VydmFibGU8TWF0TGVnYWN5Q2hpcFNlbGVjdGlvbkNoYW5nZT4ge1xuICAgIHJldHVybiBtZXJnZSguLi50aGlzLmNoaXBzLm1hcChjaGlwID0+IGNoaXAuc2VsZWN0aW9uQ2hhbmdlKSk7XG4gIH1cblxuICAvKiogQ29tYmluZWQgc3RyZWFtIG9mIGFsbCBvZiB0aGUgY2hpbGQgY2hpcHMnIGZvY3VzIGNoYW5nZSBldmVudHMuICovXG4gIGdldCBjaGlwRm9jdXNDaGFuZ2VzKCk6IE9ic2VydmFibGU8TWF0TGVnYWN5Q2hpcEV2ZW50PiB7XG4gICAgcmV0dXJuIG1lcmdlKC4uLnRoaXMuY2hpcHMubWFwKGNoaXAgPT4gY2hpcC5fb25Gb2N1cykpO1xuICB9XG5cbiAgLyoqIENvbWJpbmVkIHN0cmVhbSBvZiBhbGwgb2YgdGhlIGNoaWxkIGNoaXBzJyBibHVyIGNoYW5nZSBldmVudHMuICovXG4gIGdldCBjaGlwQmx1ckNoYW5nZXMoKTogT2JzZXJ2YWJsZTxNYXRMZWdhY3lDaGlwRXZlbnQ+IHtcbiAgICByZXR1cm4gbWVyZ2UoLi4udGhpcy5jaGlwcy5tYXAoY2hpcCA9PiBjaGlwLl9vbkJsdXIpKTtcbiAgfVxuXG4gIC8qKiBDb21iaW5lZCBzdHJlYW0gb2YgYWxsIG9mIHRoZSBjaGlsZCBjaGlwcycgcmVtb3ZlIGNoYW5nZSBldmVudHMuICovXG4gIGdldCBjaGlwUmVtb3ZlQ2hhbmdlcygpOiBPYnNlcnZhYmxlPE1hdExlZ2FjeUNoaXBFdmVudD4ge1xuICAgIHJldHVybiBtZXJnZSguLi50aGlzLmNoaXBzLm1hcChjaGlwID0+IGNoaXAuZGVzdHJveWVkKSk7XG4gIH1cblxuICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBzZWxlY3RlZCBjaGlwIGxpc3QgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCBieSB0aGUgdXNlci4gKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TWF0TGVnYWN5Q2hpcExpc3RDaGFuZ2U+KCk7XG5cbiAgLyoqXG4gICAqIEV2ZW50IHRoYXQgZW1pdHMgd2hlbmV2ZXIgdGhlIHJhdyB2YWx1ZSBvZiB0aGUgY2hpcC1saXN0IGNoYW5nZXMuIFRoaXMgaXMgaGVyZSBwcmltYXJpbHlcbiAgICogdG8gZmFjaWxpdGF0ZSB0aGUgdHdvLXdheSBiaW5kaW5nIGZvciB0aGUgYHZhbHVlYCBpbnB1dC5cbiAgICogQGRvY3MtcHJpdmF0ZVxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqIFRoZSBjaGlwcyBjb250YWluZWQgd2l0aGluIHRoaXMgY2hpcCBsaXN0LiAqL1xuICBAQ29udGVudENoaWxkcmVuKE1hdExlZ2FjeUNoaXAsIHtcbiAgICAvLyBXZSBuZWVkIHRvIHVzZSBgZGVzY2VuZGFudHM6IHRydWVgLCBiZWNhdXNlIEl2eSB3aWxsIG5vIGxvbmdlciBtYXRjaFxuICAgIC8vIGluZGlyZWN0IGRlc2NlbmRhbnRzIGlmIGl0J3MgbGVmdCBhcyBmYWxzZS5cbiAgICBkZXNjZW5kYW50czogdHJ1ZSxcbiAgfSlcbiAgY2hpcHM6IFF1ZXJ5TGlzdDxNYXRMZWdhY3lDaGlwPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9kaXI6IERpcmVjdGlvbmFsaXR5LFxuICAgIEBPcHRpb25hbCgpIF9wYXJlbnRGb3JtOiBOZ0Zvcm0sXG4gICAgQE9wdGlvbmFsKCkgX3BhcmVudEZvcm1Hcm91cDogRm9ybUdyb3VwRGlyZWN0aXZlLFxuICAgIF9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyLFxuICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICkge1xuICAgIHN1cGVyKF9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXIsIF9wYXJlbnRGb3JtLCBfcGFyZW50Rm9ybUdyb3VwLCBuZ0NvbnRyb2wpO1xuICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuX2tleU1hbmFnZXIgPSBuZXcgRm9jdXNLZXlNYW5hZ2VyPE1hdExlZ2FjeUNoaXA+KHRoaXMuY2hpcHMpXG4gICAgICAud2l0aFdyYXAoKVxuICAgICAgLndpdGhWZXJ0aWNhbE9yaWVudGF0aW9uKClcbiAgICAgIC53aXRoSG9tZUFuZEVuZCgpXG4gICAgICAud2l0aEhvcml6b250YWxPcmllbnRhdGlvbih0aGlzLl9kaXIgPyB0aGlzLl9kaXIudmFsdWUgOiAnbHRyJyk7XG5cbiAgICBpZiAodGhpcy5fZGlyKSB7XG4gICAgICB0aGlzLl9kaXIuY2hhbmdlXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuICAgICAgICAuc3Vic2NyaWJlKGRpciA9PiB0aGlzLl9rZXlNYW5hZ2VyLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24oZGlyKSk7XG4gICAgfVxuXG4gICAgdGhpcy5fa2V5TWFuYWdlci50YWJPdXQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2FsbG93Rm9jdXNFc2NhcGUoKSk7XG5cbiAgICAvLyBXaGVuIHRoZSBsaXN0IGNoYW5nZXMsIHJlLXN1YnNjcmliZVxuICAgIHRoaXMuY2hpcHMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChudWxsKSwgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgIC8vIFNpbmNlIHRoaXMgaGFwcGVucyBhZnRlciB0aGUgY29udGVudCBoYXMgYmVlblxuICAgICAgICAvLyBjaGVja2VkLCB3ZSBuZWVkIHRvIGRlZmVyIGl0IHRvIHRoZSBuZXh0IHRpY2suXG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3N5bmNDaGlwc1N0YXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZXNldENoaXBzKCk7XG5cbiAgICAgIC8vIFJlc2V0IGNoaXBzIHNlbGVjdGVkL2Rlc2VsZWN0ZWQgc3RhdHVzXG4gICAgICB0aGlzLl9pbml0aWFsaXplU2VsZWN0aW9uKCk7XG5cbiAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIHVwZGF0ZSBvdXIgdGFiIGluZGV4XG4gICAgICB0aGlzLl91cGRhdGVUYWJJbmRleCgpO1xuXG4gICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIGRlc3Ryb3llZCBjaGlwIGFuZCBuZWVkIHRvIHJlZm9jdXNcbiAgICAgIHRoaXMuX3VwZGF0ZUZvY3VzRm9yRGVzdHJveWVkQ2hpcHMoKTtcblxuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWw8TWF0TGVnYWN5Q2hpcD4odGhpcy5tdWx0aXBsZSwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgbmdEb0NoZWNrKCkge1xuICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xuICAgICAgLy8gV2UgbmVlZCB0byByZS1ldmFsdWF0ZSB0aGlzIG9uIGV2ZXJ5IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUsIGJlY2F1c2UgdGhlcmUgYXJlIHNvbWVcbiAgICAgIC8vIGVycm9yIHRyaWdnZXJzIHRoYXQgd2UgY2FuJ3Qgc3Vic2NyaWJlIHRvIChlLmcuIHBhcmVudCBmb3JtIHN1Ym1pc3Npb25zKS4gVGhpcyBtZWFuc1xuICAgICAgLy8gdGhhdCB3aGF0ZXZlciBsb2dpYyBpcyBpbiBoZXJlIGhhcyB0byBiZSBzdXBlciBsZWFuIG9yIHdlIHJpc2sgZGVzdHJveWluZyB0aGUgcGVyZm9ybWFuY2UuXG4gICAgICB0aGlzLnVwZGF0ZUVycm9yU3RhdGUoKTtcblxuICAgICAgaWYgKHRoaXMubmdDb250cm9sLmRpc2FibGVkICE9PSB0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gISF0aGlzLm5nQ29udHJvbC5kaXNhYmxlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9rZXlNYW5hZ2VyPy5kZXN0cm95KCk7XG4gICAgdGhpcy5fZGVzdHJveWVkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2Ryb3BTdWJzY3JpcHRpb25zKCk7XG4gIH1cblxuICAvKiogQXNzb2NpYXRlcyBhbiBIVE1MIGlucHV0IGVsZW1lbnQgd2l0aCB0aGlzIGNoaXAgbGlzdC4gKi9cbiAgcmVnaXN0ZXJJbnB1dChpbnB1dEVsZW1lbnQ6IE1hdExlZ2FjeUNoaXBUZXh0Q29udHJvbCk6IHZvaWQge1xuICAgIHRoaXMuX2NoaXBJbnB1dCA9IGlucHV0RWxlbWVudDtcblxuICAgIC8vIFdlIHVzZSB0aGlzIGF0dHJpYnV0ZSB0byBtYXRjaCB0aGUgY2hpcCBsaXN0IHRvIGl0cyBpbnB1dCBpbiB0ZXN0IGhhcm5lc3Nlcy5cbiAgICAvLyBTZXQgdGhlIGF0dHJpYnV0ZSBkaXJlY3RseSBoZXJlIHRvIGF2b2lkIFwiY2hhbmdlZCBhZnRlciBjaGVja2VkXCIgZXJyb3JzLlxuICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtbWF0LWNoaXAtaW5wdXQnLCBpbnB1dEVsZW1lbnQuaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgTWF0Rm9ybUZpZWxkQ29udHJvbC5cbiAgICogQGRvY3MtcHJpdmF0ZVxuICAgKi9cbiAgc2V0RGVzY3JpYmVkQnlJZHMoaWRzOiBzdHJpbmdbXSkge1xuICAgIGlmIChpZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgaWRzLmpvaW4oJyAnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknKTtcbiAgICB9XG4gIH1cblxuICAvLyBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jaGlwcykge1xuICAgICAgdGhpcy5fc2V0U2VsZWN0aW9uQnlWYWx1ZSh2YWx1ZSwgZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XG4gIH1cblxuICAvLyBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogSW1wbGVtZW50ZWQgYXMgcGFydCBvZiBNYXRGb3JtRmllbGRDb250cm9sLlxuICAgKiBAZG9jcy1wcml2YXRlXG4gICAqL1xuICBvbkNvbnRhaW5lckNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLl9vcmlnaW5hdGVzRnJvbUNoaXAoZXZlbnQpKSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzZXMgdGhlIGZpcnN0IG5vbi1kaXNhYmxlZCBjaGlwIGluIHRoaXMgY2hpcCBsaXN0LCBvciB0aGUgYXNzb2NpYXRlZCBpbnB1dCB3aGVuIHRoZXJlXG4gICAqIGFyZSBubyBlbGlnaWJsZSBjaGlwcy5cbiAgICovXG4gIGZvY3VzKG9wdGlvbnM/OiBGb2N1c09wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRPRE86IEFSSUEgc2F5cyB0aGlzIHNob3VsZCBmb2N1cyB0aGUgZmlyc3QgYHNlbGVjdGVkYCBjaGlwIGlmIGFueSBhcmUgc2VsZWN0ZWQuXG4gICAgLy8gRm9jdXMgb24gZmlyc3QgZWxlbWVudCBpZiB0aGVyZSdzIG5vIGNoaXBJbnB1dCBpbnNpZGUgY2hpcC1saXN0XG4gICAgaWYgKHRoaXMuX2NoaXBJbnB1dCAmJiB0aGlzLl9jaGlwSW5wdXQuZm9jdXNlZCkge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH0gZWxzZSBpZiAodGhpcy5jaGlwcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9rZXlNYW5hZ2VyLnNldEZpcnN0SXRlbUFjdGl2ZSgpO1xuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9mb2N1c0lucHV0KG9wdGlvbnMpO1xuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBBdHRlbXB0IHRvIGZvY3VzIGFuIGlucHV0IGlmIHdlIGhhdmUgb25lLiAqL1xuICBfZm9jdXNJbnB1dChvcHRpb25zPzogRm9jdXNPcHRpb25zKSB7XG4gICAgaWYgKHRoaXMuX2NoaXBJbnB1dCkge1xuICAgICAgdGhpcy5fY2hpcElucHV0LmZvY3VzKG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQYXNzIGV2ZW50cyB0byB0aGUga2V5Ym9hcmQgbWFuYWdlci4gQXZhaWxhYmxlIGhlcmUgZm9yIHRlc3RzLlxuICAgKi9cbiAgX2tleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ21hdC1jaGlwJykpIHtcbiAgICAgIHRoaXMuX2tleU1hbmFnZXIub25LZXlkb3duKGV2ZW50KTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgdGhlIHRhYiBpbmRleCBhcyB5b3Ugc2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRvIGZvY3VzIGFuIGVtcHR5IGxpc3QuXG4gICAqL1xuICBwcm90ZWN0ZWQgX3VwZGF0ZVRhYkluZGV4KCk6IHZvaWQge1xuICAgIC8vIElmIHdlIGhhdmUgMCBjaGlwcywgd2Ugc2hvdWxkIG5vdCBhbGxvdyBrZXlib2FyZCBmb2N1c1xuICAgIHRoaXMuX3RhYkluZGV4ID0gdGhpcy5fdXNlclRhYkluZGV4IHx8ICh0aGlzLmNoaXBzLmxlbmd0aCA9PT0gMCA/IC0xIDogMCk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGFtb3VudCBvZiBjaGlwcyBjaGFuZ2VkLCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGVcbiAgICoga2V5IG1hbmFnZXIgc3RhdGUgYW5kIGZvY3VzIHRoZSBuZXh0IGNsb3Nlc3QgY2hpcC5cbiAgICovXG4gIHByb3RlY3RlZCBfdXBkYXRlRm9jdXNGb3JEZXN0cm95ZWRDaGlwcygpIHtcbiAgICAvLyBNb3ZlIGZvY3VzIHRvIHRoZSBjbG9zZXN0IGNoaXAuIElmIG5vIG90aGVyIGNoaXBzIHJlbWFpbiwgZm9jdXMgdGhlIGNoaXAtbGlzdCBpdHNlbGYuXG4gICAgaWYgKHRoaXMuX2xhc3REZXN0cm95ZWRDaGlwSW5kZXggIT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuY2hpcHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IG5ld0NoaXBJbmRleCA9IE1hdGgubWluKHRoaXMuX2xhc3REZXN0cm95ZWRDaGlwSW5kZXgsIHRoaXMuY2hpcHMubGVuZ3RoIC0gMSk7XG4gICAgICAgIHRoaXMuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbShuZXdDaGlwSW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2xhc3REZXN0cm95ZWRDaGlwSW5kZXggPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFV0aWxpdHkgdG8gZW5zdXJlIGFsbCBpbmRleGVzIGFyZSB2YWxpZC5cbiAgICpcbiAgICogQHBhcmFtIGluZGV4IFRoZSBpbmRleCB0byBiZSBjaGVja2VkLlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBpbmRleCBpcyB2YWxpZCBmb3Igb3VyIGxpc3Qgb2YgY2hpcHMuXG4gICAqL1xuICBwcml2YXRlIF9pc1ZhbGlkSW5kZXgoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy5jaGlwcy5sZW5ndGg7XG4gIH1cblxuICBfc2V0U2VsZWN0aW9uQnlWYWx1ZSh2YWx1ZTogYW55LCBpc1VzZXJJbnB1dDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICB0aGlzLl9jbGVhclNlbGVjdGlvbigpO1xuICAgIHRoaXMuY2hpcHMuZm9yRWFjaChjaGlwID0+IGNoaXAuZGVzZWxlY3QoKSk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlLmZvckVhY2goY3VycmVudFZhbHVlID0+IHRoaXMuX3NlbGVjdFZhbHVlKGN1cnJlbnRWYWx1ZSwgaXNVc2VySW5wdXQpKTtcbiAgICAgIHRoaXMuX3NvcnRWYWx1ZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29ycmVzcG9uZGluZ0NoaXAgPSB0aGlzLl9zZWxlY3RWYWx1ZSh2YWx1ZSwgaXNVc2VySW5wdXQpO1xuXG4gICAgICAvLyBTaGlmdCBmb2N1cyB0byB0aGUgYWN0aXZlIGl0ZW0uIE5vdGUgdGhhdCB3ZSBzaG91bGRuJ3QgZG8gdGhpcyBpbiBtdWx0aXBsZVxuICAgICAgLy8gbW9kZSwgYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoYXQgY2hpcCB0aGUgdXNlciBpbnRlcmFjdGVkIHdpdGggbGFzdC5cbiAgICAgIGlmIChjb3JyZXNwb25kaW5nQ2hpcCkge1xuICAgICAgICBpZiAoaXNVc2VySW5wdXQpIHtcbiAgICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oY29ycmVzcG9uZGluZ0NoaXApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGFuZCBzZWxlY3RzIHRoZSBjaGlwIGJhc2VkIG9uIGl0cyB2YWx1ZS5cbiAgICogQHJldHVybnMgQ2hpcCB0aGF0IGhhcyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZS5cbiAgICovXG4gIHByaXZhdGUgX3NlbGVjdFZhbHVlKHZhbHVlOiBhbnksIGlzVXNlcklucHV0OiBib29sZWFuID0gdHJ1ZSk6IE1hdExlZ2FjeUNoaXAgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNvcnJlc3BvbmRpbmdDaGlwID0gdGhpcy5jaGlwcy5maW5kKGNoaXAgPT4ge1xuICAgICAgcmV0dXJuIGNoaXAudmFsdWUgIT0gbnVsbCAmJiB0aGlzLl9jb21wYXJlV2l0aChjaGlwLnZhbHVlLCB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICBpZiAoY29ycmVzcG9uZGluZ0NoaXApIHtcbiAgICAgIGlzVXNlcklucHV0ID8gY29ycmVzcG9uZGluZ0NoaXAuc2VsZWN0VmlhSW50ZXJhY3Rpb24oKSA6IGNvcnJlc3BvbmRpbmdDaGlwLnNlbGVjdCgpO1xuICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGNvcnJlc3BvbmRpbmdDaGlwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29ycmVzcG9uZGluZ0NoaXA7XG4gIH1cblxuICBwcml2YXRlIF9pbml0aWFsaXplU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIC8vIERlZmVyIHNldHRpbmcgdGhlIHZhbHVlIGluIG9yZGVyIHRvIGF2b2lkIHRoZSBcIkV4cHJlc3Npb25cbiAgICAvLyBoYXMgY2hhbmdlZCBhZnRlciBpdCB3YXMgY2hlY2tlZFwiIGVycm9ycyBmcm9tIEFuZ3VsYXIuXG4gICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5uZ0NvbnRyb2wgfHwgdGhpcy5fdmFsdWUpIHtcbiAgICAgICAgdGhpcy5fc2V0U2VsZWN0aW9uQnlWYWx1ZSh0aGlzLm5nQ29udHJvbCA/IHRoaXMubmdDb250cm9sLnZhbHVlIDogdGhpcy5fdmFsdWUsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2VsZWN0cyBldmVyeSBjaGlwIGluIHRoZSBsaXN0LlxuICAgKiBAcGFyYW0gc2tpcCBDaGlwIHRoYXQgc2hvdWxkIG5vdCBiZSBkZXNlbGVjdGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBfY2xlYXJTZWxlY3Rpb24oc2tpcD86IE1hdExlZ2FjeUNoaXApOiB2b2lkIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5jbGVhcigpO1xuICAgIHRoaXMuY2hpcHMuZm9yRWFjaChjaGlwID0+IHtcbiAgICAgIGlmIChjaGlwICE9PSBza2lwKSB7XG4gICAgICAgIGNoaXAuZGVzZWxlY3QoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogU29ydHMgdGhlIG1vZGVsIHZhbHVlcywgZW5zdXJpbmcgdGhhdCB0aGV5IGtlZXAgdGhlIHNhbWVcbiAgICogb3JkZXIgdGhhdCB0aGV5IGhhdmUgaW4gdGhlIHBhbmVsLlxuICAgKi9cbiAgcHJpdmF0ZSBfc29ydFZhbHVlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG5cbiAgICAgIHRoaXMuY2hpcHMuZm9yRWFjaChjaGlwID0+IHtcbiAgICAgICAgaWYgKGNoaXAuc2VsZWN0ZWQpIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoY2hpcCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBFbWl0cyBjaGFuZ2UgZXZlbnQgdG8gc2V0IHRoZSBtb2RlbCB2YWx1ZS4gKi9cbiAgcHJpdmF0ZSBfcHJvcGFnYXRlQ2hhbmdlcyhmYWxsYmFja1ZhbHVlPzogYW55KTogdm9pZCB7XG4gICAgbGV0IHZhbHVlVG9FbWl0OiBhbnkgPSBudWxsO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RlZCkpIHtcbiAgICAgIHZhbHVlVG9FbWl0ID0gdGhpcy5zZWxlY3RlZC5tYXAoY2hpcCA9PiBjaGlwLnZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWVUb0VtaXQgPSB0aGlzLnNlbGVjdGVkID8gdGhpcy5zZWxlY3RlZC52YWx1ZSA6IGZhbGxiYWNrVmFsdWU7XG4gICAgfVxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWVUb0VtaXQ7XG4gICAgdGhpcy5jaGFuZ2UuZW1pdChuZXcgTWF0TGVnYWN5Q2hpcExpc3RDaGFuZ2UodGhpcywgdmFsdWVUb0VtaXQpKTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWVUb0VtaXQpO1xuICAgIHRoaXMuX29uQ2hhbmdlKHZhbHVlVG9FbWl0KTtcbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKiBXaGVuIGJsdXJyZWQsIG1hcmsgdGhlIGZpZWxkIGFzIHRvdWNoZWQgd2hlbiBmb2N1cyBtb3ZlZCBvdXRzaWRlIHRoZSBjaGlwIGxpc3QuICovXG4gIF9ibHVyKCkge1xuICAgIGlmICghdGhpcy5faGFzRm9jdXNlZENoaXAoKSkge1xuICAgICAgdGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKC0xKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGlmICh0aGlzLl9jaGlwSW5wdXQpIHtcbiAgICAgICAgLy8gSWYgdGhlcmUncyBhIGNoaXAgaW5wdXQsIHdlIHNob3VsZCBjaGVjayB3aGV0aGVyIHRoZSBmb2N1cyBtb3ZlZCB0byBjaGlwIGlucHV0LlxuICAgICAgICAvLyBJZiB0aGUgZm9jdXMgaXMgbm90IG1vdmVkIHRvIGNoaXAgaW5wdXQsIG1hcmsgdGhlIGZpZWxkIGFzIHRvdWNoZWQuIElmIHRoZSBmb2N1cyBtb3ZlZFxuICAgICAgICAvLyB0byBjaGlwIGlucHV0LCBkbyBub3RoaW5nLlxuICAgICAgICAvLyBUaW1lb3V0IGlzIG5lZWRlZCB0byB3YWl0IGZvciB0aGUgZm9jdXMoKSBldmVudCB0cmlnZ2VyIG9uIGNoaXAgaW5wdXQuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5mb2N1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gY2hpcCBpbnB1dCwgdGhlbiBtYXJrIHRoZSBmaWVsZCBhcyB0b3VjaGVkLlxuICAgICAgICB0aGlzLl9tYXJrQXNUb3VjaGVkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIE1hcmsgdGhlIGZpZWxkIGFzIHRvdWNoZWQgKi9cbiAgX21hcmtBc1RvdWNoZWQoKSB7XG4gICAgdGhpcy5fb25Ub3VjaGVkKCk7XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGB0YWJpbmRleGAgZnJvbSB0aGUgY2hpcCBsaXN0IGFuZCByZXNldHMgaXQgYmFjayBhZnRlcndhcmRzLCBhbGxvd2luZyB0aGVcbiAgICogdXNlciB0byB0YWIgb3V0IG9mIGl0LiBUaGlzIHByZXZlbnRzIHRoZSBsaXN0IGZyb20gY2FwdHVyaW5nIGZvY3VzIGFuZCByZWRpcmVjdGluZ1xuICAgKiBpdCBiYWNrIHRvIHRoZSBmaXJzdCBjaGlwLCBjcmVhdGluZyBhIGZvY3VzIHRyYXAsIGlmIGl0IHVzZXIgdHJpZXMgdG8gdGFiIGF3YXkuXG4gICAqL1xuICBfYWxsb3dGb2N1c0VzY2FwZSgpIHtcbiAgICBpZiAodGhpcy5fdGFiSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl90YWJJbmRleCA9IC0xO1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5fdGFiSW5kZXggPSB0aGlzLl91c2VyVGFiSW5kZXggfHwgMDtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZXNldENoaXBzKCkge1xuICAgIHRoaXMuX2Ryb3BTdWJzY3JpcHRpb25zKCk7XG4gICAgdGhpcy5fbGlzdGVuVG9DaGlwc0ZvY3VzKCk7XG4gICAgdGhpcy5fbGlzdGVuVG9DaGlwc1NlbGVjdGlvbigpO1xuICAgIHRoaXMuX2xpc3RlblRvQ2hpcHNSZW1vdmVkKCk7XG4gIH1cblxuICBwcml2YXRlIF9kcm9wU3Vic2NyaXB0aW9ucygpIHtcbiAgICBpZiAodGhpcy5fY2hpcEZvY3VzU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9jaGlwRm9jdXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuX2NoaXBGb2N1c1N1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NoaXBCbHVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9jaGlwQmx1clN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5fY2hpcEJsdXJTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jaGlwU2VsZWN0aW9uU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9jaGlwU2VsZWN0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLl9jaGlwU2VsZWN0aW9uU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY2hpcFJlbW92ZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fY2hpcFJlbW92ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5fY2hpcFJlbW92ZVN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqIExpc3RlbnMgdG8gdXNlci1nZW5lcmF0ZWQgc2VsZWN0aW9uIGV2ZW50cyBvbiBlYWNoIGNoaXAuICovXG4gIHByaXZhdGUgX2xpc3RlblRvQ2hpcHNTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fY2hpcFNlbGVjdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMuY2hpcFNlbGVjdGlvbkNoYW5nZXMuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgIGV2ZW50LnNvdXJjZS5zZWxlY3RlZFxuICAgICAgICA/IHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChldmVudC5zb3VyY2UpXG4gICAgICAgIDogdGhpcy5fc2VsZWN0aW9uTW9kZWwuZGVzZWxlY3QoZXZlbnQuc291cmNlKTtcblxuICAgICAgLy8gRm9yIHNpbmdsZSBzZWxlY3Rpb24gY2hpcCBsaXN0LCBtYWtlIHN1cmUgdGhlIGRlc2VsZWN0ZWQgdmFsdWUgaXMgdW5zZWxlY3RlZC5cbiAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICB0aGlzLmNoaXBzLmZvckVhY2goY2hpcCA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLl9zZWxlY3Rpb25Nb2RlbC5pc1NlbGVjdGVkKGNoaXApICYmIGNoaXAuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGNoaXAuZGVzZWxlY3QoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQuaXNVc2VySW5wdXQpIHtcbiAgICAgICAgdGhpcy5fcHJvcGFnYXRlQ2hhbmdlcygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqIExpc3RlbnMgdG8gdXNlci1nZW5lcmF0ZWQgc2VsZWN0aW9uIGV2ZW50cyBvbiBlYWNoIGNoaXAuICovXG4gIHByaXZhdGUgX2xpc3RlblRvQ2hpcHNGb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGlwRm9jdXNTdWJzY3JpcHRpb24gPSB0aGlzLmNoaXBGb2N1c0NoYW5nZXMuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgIGxldCBjaGlwSW5kZXg6IG51bWJlciA9IHRoaXMuY2hpcHMudG9BcnJheSgpLmluZGV4T2YoZXZlbnQuY2hpcCk7XG5cbiAgICAgIGlmICh0aGlzLl9pc1ZhbGlkSW5kZXgoY2hpcEluZGV4KSkge1xuICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0oY2hpcEluZGV4KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2NoaXBCbHVyU3Vic2NyaXB0aW9uID0gdGhpcy5jaGlwQmx1ckNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuX2JsdXIoKTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2xpc3RlblRvQ2hpcHNSZW1vdmVkKCk6IHZvaWQge1xuICAgIHRoaXMuX2NoaXBSZW1vdmVTdWJzY3JpcHRpb24gPSB0aGlzLmNoaXBSZW1vdmVDaGFuZ2VzLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICBjb25zdCBjaGlwID0gZXZlbnQuY2hpcDtcbiAgICAgIGNvbnN0IGNoaXBJbmRleCA9IHRoaXMuY2hpcHMudG9BcnJheSgpLmluZGV4T2YoZXZlbnQuY2hpcCk7XG5cbiAgICAgIC8vIEluIGNhc2UgdGhlIGNoaXAgdGhhdCB3aWxsIGJlIHJlbW92ZWQgaXMgY3VycmVudGx5IGZvY3VzZWQsIHdlIHRlbXBvcmFyaWx5IHN0b3JlXG4gICAgICAvLyB0aGUgaW5kZXggaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBkZXRlcm1pbmUgYW4gYXBwcm9wcmlhdGUgc2libGluZyBjaGlwIHRoYXQgd2lsbFxuICAgICAgLy8gcmVjZWl2ZSBmb2N1cy5cbiAgICAgIGlmICh0aGlzLl9pc1ZhbGlkSW5kZXgoY2hpcEluZGV4KSAmJiBjaGlwLl9oYXNGb2N1cykge1xuICAgICAgICB0aGlzLl9sYXN0RGVzdHJveWVkQ2hpcEluZGV4ID0gY2hpcEluZGV4O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqIENoZWNrcyB3aGV0aGVyIGFuIGV2ZW50IGNvbWVzIGZyb20gaW5zaWRlIGEgY2hpcCBlbGVtZW50LiAqL1xuICBwcml2YXRlIF9vcmlnaW5hdGVzRnJvbUNoaXAoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgbGV0IGN1cnJlbnRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAgIHdoaWxlIChjdXJyZW50RWxlbWVudCAmJiBjdXJyZW50RWxlbWVudCAhPT0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBpZiAoY3VycmVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdtYXQtY2hpcCcpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIENoZWNrcyB3aGV0aGVyIGFueSBvZiB0aGUgY2hpcHMgaXMgZm9jdXNlZC4gKi9cbiAgcHJpdmF0ZSBfaGFzRm9jdXNlZENoaXAoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpcHMgJiYgdGhpcy5jaGlwcy5zb21lKGNoaXAgPT4gY2hpcC5faGFzRm9jdXMpO1xuICB9XG5cbiAgLyoqIFN5bmNzIHRoZSBsaXN0J3Mgc3RhdGUgd2l0aCB0aGUgaW5kaXZpZHVhbCBjaGlwcy4gKi9cbiAgcHJpdmF0ZSBfc3luY0NoaXBzU3RhdGUoKSB7XG4gICAgaWYgKHRoaXMuY2hpcHMpIHtcbiAgICAgIHRoaXMuY2hpcHMuZm9yRWFjaChjaGlwID0+IHtcbiAgICAgICAgY2hpcC5fY2hpcExpc3REaXNhYmxlZCA9IHRoaXMuX2Rpc2FibGVkO1xuICAgICAgICBjaGlwLl9jaGlwTGlzdE11bHRpcGxlID0gdGhpcy5tdWx0aXBsZTtcbiAgICAgICAgY2hpcC5jaGlwTGlzdFNlbGVjdGFibGUgPSB0aGlzLl9zZWxlY3RhYmxlO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=