@gipisistemas/ng-core 1.0.67 → 1.0.68

Sign up to get free protection for your applications and to get access to all the features.
Files changed (782) hide show
  1. package/assets/styles/colors.scss +261 -0
  2. package/assets/styles/layout-grid.scss +146 -0
  3. package/assets/styles/styles.scss +149 -0
  4. package/assets/styles/theme.scss +22 -0
  5. package/assets/styles/typography.scss +54 -0
  6. package/assets/styles/variable.scss +41 -0
  7. package/bundles/gipisistemas-ng-core.umd.js +28311 -0
  8. package/bundles/gipisistemas-ng-core.umd.js.map +1 -0
  9. package/bundles/gipisistemas-ng-core.umd.min.js +66 -0
  10. package/bundles/gipisistemas-ng-core.umd.min.js.map +1 -0
  11. package/core/app-messages.d.ts +9 -0
  12. package/core/app.messages.d.ts +4 -0
  13. package/core/components/abstract-crud.component.d.ts +27 -0
  14. package/core/components/abstract-find.component.d.ts +43 -0
  15. package/core/components/abstract.component.d.ts +23 -0
  16. package/core/components/alert/alert.component.d.ts +7 -0
  17. package/core/core.module.d.ts +17 -0
  18. package/core/custom-breakpoints.d.ts +7 -0
  19. package/core/enums/local-time.enum.d.ts +5 -0
  20. package/core/extensions/string.extension.d.ts +3 -0
  21. package/core/gipi-components/components/abstract-crud.component.d.ts +25 -0
  22. package/core/gipi-components/components/abstract-find.component.d.ts +73 -0
  23. package/core/gipi-components/components/abstract.component.d.ts +38 -0
  24. package/core/gipi-components/decorators/autowired.decorator.d.ts +7 -0
  25. package/core/gipi-components/enums/sort-direction.enum.d.ts +5 -0
  26. package/core/gipi-components/interface/abstract-crud.interface.d.ts +5 -0
  27. package/core/gipi-components/interface/abstract-find.interface.d.ts +12 -0
  28. package/core/gipi-components/interface/abstract.interface.d.ts +11 -0
  29. package/core/gipi-components/interface/base-permission.interface.d.ts +9 -0
  30. package/core/gipi-components/models/abstract-filter.model.d.ts +9 -0
  31. package/core/gipi-components/models/abstract.model.d.ts +7 -0
  32. package/core/gipi-components/models/applied-filter.model.d.ts +9 -0
  33. package/core/gipi-components/models/dto/abstract.dto.d.ts +7 -0
  34. package/core/gipi-components/models/page-event.model.d.ts +18 -0
  35. package/core/gipi-components/models/page.model.d.ts +7 -0
  36. package/core/gipi-components/models/sort.model.d.ts +6 -0
  37. package/core/gipi-components/services/abstract-crud.service.d.ts +83 -0
  38. package/core/gipi-components/services/abstract.service.d.ts +19 -0
  39. package/core/gipi-components/services/base.service.d.ts +35 -0
  40. package/core/gipi-components/services/file.service.d.ts +6 -0
  41. package/core/gipi-components/services/session-storage.service.d.ts +8 -0
  42. package/core/gipi-components/types/generic.type.d.ts +1 -0
  43. package/core/gipi-components/types/uuid.type.d.ts +1 -0
  44. package/core/guards/auth.guard.d.ts +11 -0
  45. package/core/guards/permission.guard.d.ts +14 -0
  46. package/core/guards/public.guard.d.ts +11 -0
  47. package/core/interceptors/auth.interceptor.d.ts +9 -0
  48. package/core/interceptors/error.interceptor.d.ts +11 -0
  49. package/core/models/abstract.model.d.ts +3 -0
  50. package/core/models/archive.model.d.ts +4 -0
  51. package/core/models/authority.model.d.ts +3 -0
  52. package/core/models/base-user.model.d.ts +12 -0
  53. package/core/models/dto/abstract.dto.d.ts +2 -0
  54. package/core/models/dto/api-error.dto.d.ts +9 -0
  55. package/core/models/dto/api-sub-error.dto.d.ts +7 -0
  56. package/core/models/dto/chart.dto.d.ts +5 -0
  57. package/core/models/dto/confirmation.dto.d.ts +10 -0
  58. package/core/models/dto/dialog.dto.d.ts +36 -0
  59. package/core/models/dto/filter.dto.d.ts +8 -0
  60. package/core/models/dto/input-listbox.dto.d.ts +6 -0
  61. package/core/models/dto/menu.dto.d.ts +15 -0
  62. package/core/models/dto/message.dto.d.ts +7 -0
  63. package/core/models/dto/page.dto.d.ts +8 -0
  64. package/core/models/dto/sort.dto.d.ts +7 -0
  65. package/core/models/dto/tab.dto.d.ts +12 -0
  66. package/core/models/dto/table-column.dto.d.ts +21 -0
  67. package/core/models/dto/table-group-header.dto.d.ts +7 -0
  68. package/core/models/dto/table-page-event.dto.d.ts +6 -0
  69. package/core/models/dto/token.dto.d.ts +8 -0
  70. package/core/models/enums/criteria-operation.enum.d.ts +13 -0
  71. package/core/models/enums/criteria-sort-direction.enum.d.ts +4 -0
  72. package/core/models/enums/menu-type.enum.d.ts +6 -0
  73. package/core/models/enums/radio-button.enum.d.ts +6 -0
  74. package/core/models/enums/sort-direction.enum.d.ts +4 -0
  75. package/core/models/multitenant.model.d.ts +4 -0
  76. package/core/models/permission.model.d.ts +8 -0
  77. package/core/models/role.model.d.ts +7 -0
  78. package/core/pipes/local-time.pipe.d.ts +6 -0
  79. package/core/services/abstract-crud.service.d.ts +15 -0
  80. package/core/services/abstract-find.service.d.ts +30 -0
  81. package/core/services/abstract.service.d.ts +13 -0
  82. package/core/services/authentication.service.d.ts +23 -0
  83. package/core/services/breakpoint-observer.service.d.ts +9 -0
  84. package/core/services/confirmation.service.d.ts +8 -0
  85. package/core/services/dialog.service.d.ts +8 -0
  86. package/core/services/message.service.d.ts +8 -0
  87. package/core/services/nav.service.d.ts +16 -0
  88. package/core/services/svg-register.service.d.ts +22 -0
  89. package/core/types/local-time.type.d.ts +5 -0
  90. package/core/types/ng-class.type.d.ts +10 -0
  91. package/core/utils/array.util.d.ts +14 -0
  92. package/core/utils/browser.util.d.ts +4 -0
  93. package/core/utils/currency.util.d.ts +6 -0
  94. package/core/utils/date.util.d.ts +39 -0
  95. package/core/utils/document.util.d.ts +11 -0
  96. package/core/utils/email.util.d.ts +4 -0
  97. package/core/utils/number.util.d.ts +8 -0
  98. package/core/utils/object.util.d.ts +20 -0
  99. package/core/utils/password.util.d.ts +11 -0
  100. package/core/utils/phone.util.d.ts +13 -0
  101. package/core/utils/string.util.d.ts +9 -0
  102. package/core/utils/table-column-builder.d.ts +40 -0
  103. package/core/utils/time.util.d.ts +9 -0
  104. package/core/utils/url-params.util.d.ts +7 -0
  105. package/core/utils/uuid.util.d.ts +5 -0
  106. package/core/utils/zindex.util.d.ts +7 -0
  107. package/core.d.ts +88 -0
  108. package/esm2015/core/app-messages.js +1 -0
  109. package/esm2015/core/app.messages.js +12 -0
  110. package/esm2015/core/components/abstract-crud.component.js +97 -0
  111. package/esm2015/core/components/abstract-find.component.js +189 -0
  112. package/esm2015/core/components/abstract.component.js +110 -0
  113. package/esm2015/core/components/alert/alert.component.js +24 -0
  114. package/esm2015/core/core.module.js +103 -0
  115. package/esm2015/core/custom-breakpoints.js +87 -0
  116. package/esm2015/core/enums/local-time.enum.js +6 -0
  117. package/esm2015/core/extensions/string.extension.js +37 -0
  118. package/esm2015/core/gipi-components/components/abstract-crud.component.js +110 -0
  119. package/esm2015/core/gipi-components/components/abstract-find.component.js +471 -0
  120. package/esm2015/core/gipi-components/components/abstract.component.js +140 -0
  121. package/esm2015/core/gipi-components/decorators/autowired.decorator.js +47 -0
  122. package/esm2015/core/gipi-components/enums/sort-direction.enum.js +6 -0
  123. package/esm2015/core/gipi-components/interface/abstract-crud.interface.js +1 -0
  124. package/esm2015/core/gipi-components/interface/abstract-find.interface.js +1 -0
  125. package/esm2015/core/gipi-components/interface/abstract.interface.js +1 -0
  126. package/esm2015/core/gipi-components/interface/base-permission.interface.js +1 -0
  127. package/esm2015/core/gipi-components/models/abstract-filter.model.js +3 -0
  128. package/esm2015/core/gipi-components/models/abstract.model.js +3 -0
  129. package/esm2015/core/gipi-components/models/applied-filter.model.js +19 -0
  130. package/esm2015/core/gipi-components/models/dto/abstract.dto.js +3 -0
  131. package/esm2015/core/gipi-components/models/page-event.model.js +35 -0
  132. package/esm2015/core/gipi-components/models/page.model.js +7 -0
  133. package/esm2015/core/gipi-components/models/sort.model.js +7 -0
  134. package/esm2015/core/gipi-components/services/abstract-crud.service.js +109 -0
  135. package/esm2015/core/gipi-components/services/abstract.service.js +47 -0
  136. package/esm2015/core/gipi-components/services/base.service.js +102 -0
  137. package/esm2015/core/gipi-components/services/file.service.js +51 -0
  138. package/esm2015/core/gipi-components/services/session-storage.service.js +44 -0
  139. package/esm2015/core/gipi-components/types/generic.type.js +1 -0
  140. package/esm2015/core/gipi-components/types/uuid.type.js +1 -0
  141. package/esm2015/core/guards/auth.guard.js +48 -0
  142. package/esm2015/core/guards/permission.guard.js +61 -0
  143. package/esm2015/core/guards/public.guard.js +45 -0
  144. package/esm2015/core/interceptors/auth.interceptor.js +28 -0
  145. package/esm2015/core/interceptors/error.interceptor.js +110 -0
  146. package/esm2015/core/models/abstract.model.js +3 -0
  147. package/esm2015/core/models/archive.model.js +3 -0
  148. package/esm2015/core/models/authority.model.js +3 -0
  149. package/esm2015/core/models/base-user.model.js +8 -0
  150. package/esm2015/core/models/dto/abstract.dto.js +3 -0
  151. package/esm2015/core/models/dto/api-error.dto.js +8 -0
  152. package/esm2015/core/models/dto/api-sub-error.dto.js +4 -0
  153. package/esm2015/core/models/dto/chart.dto.js +4 -0
  154. package/esm2015/core/models/dto/confirmation.dto.js +8 -0
  155. package/esm2015/core/models/dto/dialog.dto.js +4 -0
  156. package/esm2015/core/models/dto/filter.dto.js +4 -0
  157. package/esm2015/core/models/dto/input-listbox.dto.js +7 -0
  158. package/esm2015/core/models/dto/menu.dto.js +9 -0
  159. package/esm2015/core/models/dto/message.dto.js +4 -0
  160. package/esm2015/core/models/dto/page.dto.js +9 -0
  161. package/esm2015/core/models/dto/sort.dto.js +9 -0
  162. package/esm2015/core/models/dto/tab.dto.js +10 -0
  163. package/esm2015/core/models/dto/table-column.dto.js +24 -0
  164. package/esm2015/core/models/dto/table-group-header.dto.js +10 -0
  165. package/esm2015/core/models/dto/table-page-event.dto.js +7 -0
  166. package/esm2015/core/models/dto/token.dto.js +4 -0
  167. package/esm2015/core/models/enums/criteria-operation.enum.js +15 -0
  168. package/esm2015/core/models/enums/criteria-sort-direction.enum.js +6 -0
  169. package/esm2015/core/models/enums/menu-type.enum.js +7 -0
  170. package/esm2015/core/models/enums/radio-button.enum.js +8 -0
  171. package/esm2015/core/models/enums/sort-direction.enum.js +6 -0
  172. package/esm2015/core/models/multitenant.model.js +4 -0
  173. package/esm2015/core/models/permission.model.js +11 -0
  174. package/esm2015/core/models/role.model.js +8 -0
  175. package/esm2015/core/pipes/local-time.pipe.js +21 -0
  176. package/esm2015/core/services/abstract-crud.service.js +24 -0
  177. package/esm2015/core/services/abstract-find.service.js +65 -0
  178. package/esm2015/core/services/abstract.service.js +30 -0
  179. package/esm2015/core/services/authentication.service.js +100 -0
  180. package/esm2015/core/services/breakpoint-observer.service.js +42 -0
  181. package/esm2015/core/services/confirmation.service.js +55 -0
  182. package/esm2015/core/services/dialog.service.js +41 -0
  183. package/esm2015/core/services/message.service.js +33 -0
  184. package/esm2015/core/services/nav.service.js +48 -0
  185. package/esm2015/core/services/svg-register.service.js +55 -0
  186. package/esm2015/core/types/local-time.type.js +1 -0
  187. package/esm2015/core/types/ng-class.type.js +1 -0
  188. package/esm2015/core/utils/array.util.js +110 -0
  189. package/esm2015/core/utils/browser.util.js +13 -0
  190. package/esm2015/core/utils/currency.util.js +21 -0
  191. package/esm2015/core/utils/date.util.js +257 -0
  192. package/esm2015/core/utils/document.util.js +153 -0
  193. package/esm2015/core/utils/email.util.js +25 -0
  194. package/esm2015/core/utils/number.util.js +28 -0
  195. package/esm2015/core/utils/object.util.js +199 -0
  196. package/esm2015/core/utils/password.util.js +38 -0
  197. package/esm2015/core/utils/phone.util.js +125 -0
  198. package/esm2015/core/utils/string.util.js +40 -0
  199. package/esm2015/core/utils/table-column-builder.js +85 -0
  200. package/esm2015/core/utils/time.util.js +59 -0
  201. package/esm2015/core/utils/url-params.util.js +12 -0
  202. package/esm2015/core/utils/uuid.util.js +17 -0
  203. package/esm2015/core/utils/zindex.util.js +35 -0
  204. package/esm2015/core.js +89 -0
  205. package/esm2015/gipi-components.js +105 -0
  206. package/esm2015/gipisistemas-ng-core.js +21 -0
  207. package/esm2015/public_api.js +4 -0
  208. package/esm2015/shared/api/generate-id-component.js +12 -0
  209. package/esm2015/shared/api/gipi-ng-config.js +76 -0
  210. package/esm2015/shared/api/overlay-message.js +1 -0
  211. package/esm2015/shared/api/throttle.js +60 -0
  212. package/esm2015/shared/api/translation.js +1 -0
  213. package/esm2015/shared/components/button/button.component.js +110 -0
  214. package/esm2015/shared/components/card/card.component.js +44 -0
  215. package/esm2015/shared/components/checkbox/checkbox.component.js +79 -0
  216. package/esm2015/shared/components/dom/connected-overlay-scroll-handler.js +27 -0
  217. package/esm2015/shared/components/dom/dom-handler.js +538 -0
  218. package/esm2015/shared/components/icon/icon.component.js +35 -0
  219. package/esm2015/shared/components/input/input.component.js +235 -0
  220. package/esm2015/shared/components/input-currency/input-currency.component.js +115 -0
  221. package/esm2015/shared/components/input-file/input-file.component.js +161 -0
  222. package/esm2015/shared/components/loading/loading.component.js +15 -0
  223. package/esm2015/shared/components/loading-overlay/loading-overlay.component.js +21 -0
  224. package/esm2015/shared/components/overlay-panel/overlay-panel.component.js +361 -0
  225. package/esm2015/shared/components/popover/popover-ref.js +25 -0
  226. package/esm2015/shared/components/popover/popover.component.js +34 -0
  227. package/esm2015/shared/components/popover/popover.service.js +85 -0
  228. package/esm2015/shared/components/radio-group-entity/radio-group-entity.component.js +74 -0
  229. package/esm2015/shared/components/radio-group-enum/radio-group-enum.component.js +126 -0
  230. package/esm2015/shared/components/select-button/select-button.component.js +181 -0
  231. package/esm2015/shared/components/select-entity/select-entity.component.js +262 -0
  232. package/esm2015/shared/components/select-entity-paged/select-entity-paged.component.js +419 -0
  233. package/esm2015/shared/components/select-entity-paged/shared/default-options.js +35 -0
  234. package/esm2015/shared/components/select-entity-paged/shared/select-button-add/select-button-add.component.js +69 -0
  235. package/esm2015/shared/components/select-entity-paged/shared/select-button-next-batch/select-button-next-batch.component.js +59 -0
  236. package/esm2015/shared/components/select-entity-paged/shared/select-no-entries-found.directive.js +20 -0
  237. package/esm2015/shared/components/select-entity-paged/shared/select-search/select-search.component.js +547 -0
  238. package/esm2015/shared/components/select-entity-paged/shared/select-search-clear.directive.js +18 -0
  239. package/esm2015/shared/components/select-enum/select-enum.component.js +117 -0
  240. package/esm2015/shared/components/select-month-period/select-month-period.component.js +87 -0
  241. package/esm2015/shared/components/slide-toggle/slide-toggle.component.js +75 -0
  242. package/esm2015/shared/components/stepper/stepper.component.js +32 -0
  243. package/esm2015/shared/components/tab/tab.component.js +57 -0
  244. package/esm2015/shared/components/tab-group/tab-group.component.js +117 -0
  245. package/esm2015/shared/components/table/table.component.js +523 -0
  246. package/esm2015/shared/components/table-scrolled/table-scrolled.component.js +105 -0
  247. package/esm2015/shared/components/textarea/textarea.component.js +156 -0
  248. package/esm2015/shared/directives/dynamic-tab.directive.js +18 -0
  249. package/esm2015/shared/directives/generic-template.directive.js +30 -0
  250. package/esm2015/shared/directives/input-select-infinite-scroll.directive.js +109 -0
  251. package/esm2015/shared/directives/lower-case.directive.js +47 -0
  252. package/esm2015/shared/directives/phone-mask.directive.js +60 -0
  253. package/esm2015/shared/directives/space-drop.directive.js +47 -0
  254. package/esm2015/shared/directives/upper-case.directive.js +47 -0
  255. package/esm2015/shared/gipi-components/abstract-form/abstract-form.component.js +119 -0
  256. package/esm2015/shared/gipi-components/action-row/action-row.component.js +30 -0
  257. package/esm2015/shared/gipi-components/badge/badge.component.js +44 -0
  258. package/esm2015/shared/gipi-components/button/button.component.js +251 -0
  259. package/esm2015/shared/gipi-components/chips/chips.component.js +149 -0
  260. package/esm2015/shared/gipi-components/confirmation-dialog/confirmation-dialog.component.js +44 -0
  261. package/esm2015/shared/gipi-components/datepicker/date-range-picker/date-range-picker.component.js +324 -0
  262. package/esm2015/shared/gipi-components/datepicker/date-range-picker/shared/max-range/max-range-selection-startegy.js +41 -0
  263. package/esm2015/shared/gipi-components/datepicker/date-range-picker/shared/max-range/max-range.directive.js +35 -0
  264. package/esm2015/shared/gipi-components/datepicker/date-range-picker/shared/preset-range/preset-range.component.js +259 -0
  265. package/esm2015/shared/gipi-components/datepicker/datepicker/datepicker.component.js +218 -0
  266. package/esm2015/shared/gipi-components/datepicker/datepicker.module.js +130 -0
  267. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/calendar-body.js +341 -0
  268. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/calendar.js +397 -0
  269. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/date-range-input-parts.js +325 -0
  270. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/date-range-input.js +329 -0
  271. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/date-range-picker.js +41 -0
  272. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/date-range-selection-strategy.js +61 -0
  273. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/date-selection-model.js +159 -0
  274. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker-animations.js +35 -0
  275. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker-base.js +555 -0
  276. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker-errors.js +14 -0
  277. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker-input-base.js +303 -0
  278. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker-input.js +179 -0
  279. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker-intl.js +51 -0
  280. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker-toggle.js +124 -0
  281. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/datepicker.js +29 -0
  282. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/month-view.js +365 -0
  283. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/multi-year-view.js +305 -0
  284. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/date-adapter.js +116 -0
  285. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/date-formats.js +10 -0
  286. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/native-date-adapter.js +294 -0
  287. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/native-date-formats.js +19 -0
  288. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/platform.js +81 -0
  289. package/esm2015/shared/gipi-components/datepicker/mat-datepicker/year-view.js +294 -0
  290. package/esm2015/shared/gipi-components/dom/connected-overlay-scroll-handler.js +27 -0
  291. package/esm2015/shared/gipi-components/dom/dom-handler.js +645 -0
  292. package/esm2015/shared/gipi-components/dropdown-menu/dropdown-menu.component.js +185 -0
  293. package/esm2015/shared/gipi-components/expansion-panel/expansion-panel.component.js +81 -0
  294. package/esm2015/shared/gipi-components/file-drag-and-drop/file-drag-and-drop.component.js +240 -0
  295. package/esm2015/shared/gipi-components/file-drag-and-drop/shared/file-drag-and-drop.directive.js +92 -0
  296. package/esm2015/shared/gipi-components/footer/footer.component.js +29 -0
  297. package/esm2015/shared/gipi-components/form-field/form-field.component.js +262 -0
  298. package/esm2015/shared/gipi-components/helpful-tip/helpful-tip.component.js +62 -0
  299. package/esm2015/shared/gipi-components/infinite-scroll/infinite-scroll.directive.js +103 -0
  300. package/esm2015/shared/gipi-components/input-checkbox/input-checkbox.component.js +112 -0
  301. package/esm2015/shared/gipi-components/input-currency/input-currency.component.js +197 -0
  302. package/esm2015/shared/gipi-components/input-monthpicker/input-monthpicker.component.js +408 -0
  303. package/esm2015/shared/gipi-components/input-select/input-select.component.js +655 -0
  304. package/esm2015/shared/gipi-components/input-select-enum/input-select-enum.component.js +311 -0
  305. package/esm2015/shared/gipi-components/input-select-listbox/input-select-listbox.component.js +422 -0
  306. package/esm2015/shared/gipi-components/input-select-paged/input-search/input-search.component.js +374 -0
  307. package/esm2015/shared/gipi-components/input-select-paged/input-select-paged.component.js +350 -0
  308. package/esm2015/shared/gipi-components/input-select-radio/input-select-radio.component.js +269 -0
  309. package/esm2015/shared/gipi-components/layout-grid/col.directive.js +161 -0
  310. package/esm2015/shared/gipi-components/layout-grid/row.directive.js +124 -0
  311. package/esm2015/shared/gipi-components/layout-grid/services/breakpoint.service.js +87 -0
  312. package/esm2015/shared/gipi-components/layout-grid/services/resize.service.js +64 -0
  313. package/esm2015/shared/gipi-components/month-year-picker/calendar-month-year/calendar-month-year.component.js +193 -0
  314. package/esm2015/shared/gipi-components/month-year-picker/mont-year-picker.module.js +47 -0
  315. package/esm2015/shared/gipi-components/month-year-picker/month-year-picker.component.js +460 -0
  316. package/esm2015/shared/gipi-components/notification/notification.component.js +104 -0
  317. package/esm2015/shared/gipi-components/novelties/novelties.component.js +109 -0
  318. package/esm2015/shared/gipi-components/overlay/overlay.component.js +565 -0
  319. package/esm2015/shared/gipi-components/overlay/shared/overlay-service.js +21 -0
  320. package/esm2015/shared/gipi-components/overlay/shared/overlay_options.js +1 -0
  321. package/esm2015/shared/gipi-components/password-requeriments/password-requeriments.component.js +127 -0
  322. package/esm2015/shared/gipi-components/popover/popover.component.js +397 -0
  323. package/esm2015/shared/gipi-components/popover/shared/popover-animations.js +29 -0
  324. package/esm2015/shared/gipi-components/popover/shared/popover-errors.js +27 -0
  325. package/esm2015/shared/gipi-components/popover/shared/popover-interfaces.js +1 -0
  326. package/esm2015/shared/gipi-components/popover/shared/popover-target.js +19 -0
  327. package/esm2015/shared/gipi-components/popover/shared/popover-trigger.js +514 -0
  328. package/esm2015/shared/gipi-components/popover/shared/popover-types.js +1 -0
  329. package/esm2015/shared/gipi-components/radio-group/radio-group.component.js +143 -0
  330. package/esm2015/shared/gipi-components/range-page/range-page.component.js +254 -0
  331. package/esm2015/shared/gipi-components/range-slider/range-slider.component.js +345 -0
  332. package/esm2015/shared/gipi-components/select/select.component.js +211 -0
  333. package/esm2015/shared/gipi-components/select-button/select-button.component.js +187 -0
  334. package/esm2015/shared/gipi-components/sidebar/container/container.component.js +83 -0
  335. package/esm2015/shared/gipi-components/sidebar/sidenav/sidenav.component.js +240 -0
  336. package/esm2015/shared/gipi-components/stepper/stepper.component.js +37 -0
  337. package/esm2015/shared/gipi-components/table/components/table-body/table-body.component.js +203 -0
  338. package/esm2015/shared/gipi-components/table/components/table-footer/table-footer.component.js +30 -0
  339. package/esm2015/shared/gipi-components/table/components/table-header/table-header.component.js +152 -0
  340. package/esm2015/shared/gipi-components/table/components/table-pagination/shared/paginate.pipe.js +122 -0
  341. package/esm2015/shared/gipi-components/table/components/table-pagination/shared/pagination-controls.directive.js +225 -0
  342. package/esm2015/shared/gipi-components/table/components/table-pagination/shared/pagination-instance.js +1 -0
  343. package/esm2015/shared/gipi-components/table/components/table-pagination/shared/pagination.service.js +105 -0
  344. package/esm2015/shared/gipi-components/table/components/table-pagination/table-pagination.component.js +102 -0
  345. package/esm2015/shared/gipi-components/table/components/table-progress-bar/table-progress-bar.component.js +30 -0
  346. package/esm2015/shared/gipi-components/table/models/pipe-transform.model.js +1 -0
  347. package/esm2015/shared/gipi-components/table/models/sort.model.js +19 -0
  348. package/esm2015/shared/gipi-components/table/models/sorted-column.model.js +2 -0
  349. package/esm2015/shared/gipi-components/table/models/table-column-builder.model.js +104 -0
  350. package/esm2015/shared/gipi-components/table/models/table-column.model.js +162 -0
  351. package/esm2015/shared/gipi-components/table/table.component.js +159 -0
  352. package/esm2015/shared/gipi-components/table/types/sort-direction.type.js +1 -0
  353. package/esm2015/shared/gipi-components/table/types/sort.type.js +1 -0
  354. package/esm2015/shared/gipi-components/template/template.directive.js +33 -0
  355. package/esm2015/shared/gipi-components/toolbar/toolbar.component.js +53 -0
  356. package/esm2015/shared/gipi-components/top-nav/top-nav.component.js +38 -0
  357. package/esm2015/shared/gipi-components/user-profile/user-profile.component.js +109 -0
  358. package/esm2015/shared/material.module.js +102 -0
  359. package/esm2015/shared/shared.module.js +339 -0
  360. package/esm2015/shared.js +36 -0
  361. package/esm5/core/app-messages.js +1 -0
  362. package/esm5/core/app.messages.js +12 -0
  363. package/esm5/core/components/abstract-crud.component.js +108 -0
  364. package/esm5/core/components/abstract-find.component.js +201 -0
  365. package/esm5/core/components/abstract.component.js +112 -0
  366. package/esm5/core/components/alert/alert.component.js +25 -0
  367. package/esm5/core/core.module.js +107 -0
  368. package/esm5/core/custom-breakpoints.js +87 -0
  369. package/esm5/core/enums/local-time.enum.js +6 -0
  370. package/esm5/core/extensions/string.extension.js +37 -0
  371. package/esm5/core/gipi-components/components/abstract-crud.component.js +122 -0
  372. package/esm5/core/gipi-components/components/abstract-find.component.js +507 -0
  373. package/esm5/core/gipi-components/components/abstract.component.js +152 -0
  374. package/esm5/core/gipi-components/decorators/autowired.decorator.js +52 -0
  375. package/esm5/core/gipi-components/enums/sort-direction.enum.js +6 -0
  376. package/esm5/core/gipi-components/interface/abstract-crud.interface.js +1 -0
  377. package/esm5/core/gipi-components/interface/abstract-find.interface.js +1 -0
  378. package/esm5/core/gipi-components/interface/abstract.interface.js +1 -0
  379. package/esm5/core/gipi-components/interface/base-permission.interface.js +1 -0
  380. package/esm5/core/gipi-components/models/abstract-filter.model.js +7 -0
  381. package/esm5/core/gipi-components/models/abstract.model.js +7 -0
  382. package/esm5/core/gipi-components/models/applied-filter.model.js +29 -0
  383. package/esm5/core/gipi-components/models/dto/abstract.dto.js +7 -0
  384. package/esm5/core/gipi-components/models/page-event.model.js +49 -0
  385. package/esm5/core/gipi-components/models/page.model.js +9 -0
  386. package/esm5/core/gipi-components/models/sort.model.js +9 -0
  387. package/esm5/core/gipi-components/services/abstract-crud.service.js +114 -0
  388. package/esm5/core/gipi-components/services/abstract.service.js +49 -0
  389. package/esm5/core/gipi-components/services/base.service.js +143 -0
  390. package/esm5/core/gipi-components/services/file.service.js +53 -0
  391. package/esm5/core/gipi-components/services/session-storage.service.js +45 -0
  392. package/esm5/core/gipi-components/types/generic.type.js +1 -0
  393. package/esm5/core/gipi-components/types/uuid.type.js +1 -0
  394. package/esm5/core/guards/auth.guard.js +50 -0
  395. package/esm5/core/guards/permission.guard.js +74 -0
  396. package/esm5/core/guards/public.guard.js +47 -0
  397. package/esm5/core/interceptors/auth.interceptor.js +29 -0
  398. package/esm5/core/interceptors/error.interceptor.js +129 -0
  399. package/esm5/core/models/abstract.model.js +7 -0
  400. package/esm5/core/models/archive.model.js +7 -0
  401. package/esm5/core/models/authority.model.js +7 -0
  402. package/esm5/core/models/base-user.model.js +13 -0
  403. package/esm5/core/models/dto/abstract.dto.js +7 -0
  404. package/esm5/core/models/dto/api-error.dto.js +13 -0
  405. package/esm5/core/models/dto/api-sub-error.dto.js +11 -0
  406. package/esm5/core/models/dto/chart.dto.js +11 -0
  407. package/esm5/core/models/dto/confirmation.dto.js +13 -0
  408. package/esm5/core/models/dto/dialog.dto.js +11 -0
  409. package/esm5/core/models/dto/filter.dto.js +11 -0
  410. package/esm5/core/models/dto/input-listbox.dto.js +11 -0
  411. package/esm5/core/models/dto/menu.dto.js +14 -0
  412. package/esm5/core/models/dto/message.dto.js +11 -0
  413. package/esm5/core/models/dto/page.dto.js +14 -0
  414. package/esm5/core/models/dto/sort.dto.js +14 -0
  415. package/esm5/core/models/dto/tab.dto.js +15 -0
  416. package/esm5/core/models/dto/table-column.dto.js +29 -0
  417. package/esm5/core/models/dto/table-group-header.dto.js +15 -0
  418. package/esm5/core/models/dto/table-page-event.dto.js +11 -0
  419. package/esm5/core/models/dto/token.dto.js +11 -0
  420. package/esm5/core/models/enums/criteria-operation.enum.js +15 -0
  421. package/esm5/core/models/enums/criteria-sort-direction.enum.js +6 -0
  422. package/esm5/core/models/enums/menu-type.enum.js +7 -0
  423. package/esm5/core/models/enums/radio-button.enum.js +8 -0
  424. package/esm5/core/models/enums/sort-direction.enum.js +6 -0
  425. package/esm5/core/models/multitenant.model.js +11 -0
  426. package/esm5/core/models/permission.model.js +16 -0
  427. package/esm5/core/models/role.model.js +13 -0
  428. package/esm5/core/pipes/local-time.pipe.js +26 -0
  429. package/esm5/core/services/abstract-crud.service.js +30 -0
  430. package/esm5/core/services/abstract-find.service.js +71 -0
  431. package/esm5/core/services/abstract.service.js +32 -0
  432. package/esm5/core/services/authentication.service.js +121 -0
  433. package/esm5/core/services/breakpoint-observer.service.js +52 -0
  434. package/esm5/core/services/confirmation.service.js +66 -0
  435. package/esm5/core/services/dialog.service.js +44 -0
  436. package/esm5/core/services/message.service.js +36 -0
  437. package/esm5/core/services/nav.service.js +51 -0
  438. package/esm5/core/services/svg-register.service.js +67 -0
  439. package/esm5/core/types/local-time.type.js +1 -0
  440. package/esm5/core/types/ng-class.type.js +1 -0
  441. package/esm5/core/utils/array.util.js +120 -0
  442. package/esm5/core/utils/browser.util.js +17 -0
  443. package/esm5/core/utils/currency.util.js +26 -0
  444. package/esm5/core/utils/date.util.js +269 -0
  445. package/esm5/core/utils/document.util.js +157 -0
  446. package/esm5/core/utils/email.util.js +29 -0
  447. package/esm5/core/utils/number.util.js +32 -0
  448. package/esm5/core/utils/object.util.js +204 -0
  449. package/esm5/core/utils/password.util.js +42 -0
  450. package/esm5/core/utils/phone.util.js +135 -0
  451. package/esm5/core/utils/string.util.js +44 -0
  452. package/esm5/core/utils/table-column-builder.js +87 -0
  453. package/esm5/core/utils/time.util.js +65 -0
  454. package/esm5/core/utils/url-params.util.js +16 -0
  455. package/esm5/core/utils/uuid.util.js +21 -0
  456. package/esm5/core/utils/zindex.util.js +35 -0
  457. package/esm5/core.js +89 -0
  458. package/esm5/gipi-components.js +105 -0
  459. package/esm5/gipisistemas-ng-core.js +21 -0
  460. package/esm5/public_api.js +4 -0
  461. package/esm5/shared/api/generate-id-component.js +16 -0
  462. package/esm5/shared/api/gipi-ng-config.js +77 -0
  463. package/esm5/shared/api/overlay-message.js +1 -0
  464. package/esm5/shared/api/throttle.js +60 -0
  465. package/esm5/shared/api/translation.js +1 -0
  466. package/esm5/shared/components/button/button.component.js +111 -0
  467. package/esm5/shared/components/card/card.component.js +45 -0
  468. package/esm5/shared/components/checkbox/checkbox.component.js +85 -0
  469. package/esm5/shared/components/dom/connected-overlay-scroll-handler.js +30 -0
  470. package/esm5/shared/components/dom/dom-handler.js +573 -0
  471. package/esm5/shared/components/icon/icon.component.js +38 -0
  472. package/esm5/shared/components/input/input.component.js +242 -0
  473. package/esm5/shared/components/input-currency/input-currency.component.js +121 -0
  474. package/esm5/shared/components/input-file/input-file.component.js +165 -0
  475. package/esm5/shared/components/loading/loading.component.js +18 -0
  476. package/esm5/shared/components/loading-overlay/loading-overlay.component.js +23 -0
  477. package/esm5/shared/components/overlay-panel/overlay-panel.component.js +366 -0
  478. package/esm5/shared/components/popover/popover-ref.js +28 -0
  479. package/esm5/shared/components/popover/popover.component.js +35 -0
  480. package/esm5/shared/components/popover/popover.service.js +88 -0
  481. package/esm5/shared/components/radio-group-entity/radio-group-entity.component.js +80 -0
  482. package/esm5/shared/components/radio-group-enum/radio-group-enum.component.js +138 -0
  483. package/esm5/shared/components/select-button/select-button.component.js +195 -0
  484. package/esm5/shared/components/select-entity/select-entity.component.js +269 -0
  485. package/esm5/shared/components/select-entity-paged/select-entity-paged.component.js +453 -0
  486. package/esm5/shared/components/select-entity-paged/shared/default-options.js +35 -0
  487. package/esm5/shared/components/select-entity-paged/shared/select-button-add/select-button-add.component.js +72 -0
  488. package/esm5/shared/components/select-entity-paged/shared/select-button-next-batch/select-button-next-batch.component.js +62 -0
  489. package/esm5/shared/components/select-entity-paged/shared/select-no-entries-found.directive.js +23 -0
  490. package/esm5/shared/components/select-entity-paged/shared/select-search/select-search.component.js +590 -0
  491. package/esm5/shared/components/select-entity-paged/shared/select-search-clear.directive.js +21 -0
  492. package/esm5/shared/components/select-enum/select-enum.component.js +124 -0
  493. package/esm5/shared/components/select-month-period/select-month-period.component.js +91 -0
  494. package/esm5/shared/components/slide-toggle/slide-toggle.component.js +81 -0
  495. package/esm5/shared/components/stepper/stepper.component.js +36 -0
  496. package/esm5/shared/components/tab/tab.component.js +58 -0
  497. package/esm5/shared/components/tab-group/tab-group.component.js +125 -0
  498. package/esm5/shared/components/table/table.component.js +538 -0
  499. package/esm5/shared/components/table-scrolled/table-scrolled.component.js +107 -0
  500. package/esm5/shared/components/textarea/textarea.component.js +174 -0
  501. package/esm5/shared/directives/dynamic-tab.directive.js +19 -0
  502. package/esm5/shared/directives/generic-template.directive.js +31 -0
  503. package/esm5/shared/directives/input-select-infinite-scroll.directive.js +113 -0
  504. package/esm5/shared/directives/lower-case.directive.js +48 -0
  505. package/esm5/shared/directives/phone-mask.directive.js +61 -0
  506. package/esm5/shared/directives/space-drop.directive.js +48 -0
  507. package/esm5/shared/directives/upper-case.directive.js +48 -0
  508. package/esm5/shared/gipi-components/abstract-form/abstract-form.component.js +141 -0
  509. package/esm5/shared/gipi-components/action-row/action-row.component.js +33 -0
  510. package/esm5/shared/gipi-components/badge/badge.component.js +46 -0
  511. package/esm5/shared/gipi-components/button/button.component.js +257 -0
  512. package/esm5/shared/gipi-components/chips/chips.component.js +159 -0
  513. package/esm5/shared/gipi-components/confirmation-dialog/confirmation-dialog.component.js +46 -0
  514. package/esm5/shared/gipi-components/datepicker/date-range-picker/date-range-picker.component.js +378 -0
  515. package/esm5/shared/gipi-components/datepicker/date-range-picker/shared/max-range/max-range-selection-startegy.js +42 -0
  516. package/esm5/shared/gipi-components/datepicker/date-range-picker/shared/max-range/max-range.directive.js +40 -0
  517. package/esm5/shared/gipi-components/datepicker/date-range-picker/shared/preset-range/preset-range.component.js +291 -0
  518. package/esm5/shared/gipi-components/datepicker/datepicker/datepicker.component.js +252 -0
  519. package/esm5/shared/gipi-components/datepicker/datepicker.module.js +133 -0
  520. package/esm5/shared/gipi-components/datepicker/mat-datepicker/calendar-body.js +349 -0
  521. package/esm5/shared/gipi-components/datepicker/mat-datepicker/calendar.js +441 -0
  522. package/esm5/shared/gipi-components/datepicker/mat-datepicker/date-range-input-parts.js +339 -0
  523. package/esm5/shared/gipi-components/datepicker/mat-datepicker/date-range-input.js +376 -0
  524. package/esm5/shared/gipi-components/datepicker/mat-datepicker/date-range-picker.js +46 -0
  525. package/esm5/shared/gipi-components/datepicker/mat-datepicker/date-range-selection-strategy.js +62 -0
  526. package/esm5/shared/gipi-components/datepicker/mat-datepicker/date-selection-model.js +167 -0
  527. package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker-animations.js +35 -0
  528. package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker-base.js +586 -0
  529. package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker-errors.js +14 -0
  530. package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker-input-base.js +327 -0
  531. package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker-input.js +199 -0
  532. package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker-intl.js +52 -0
  533. package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker-toggle.js +133 -0
  534. package/esm5/shared/gipi-components/datepicker/mat-datepicker/datepicker.js +34 -0
  535. package/esm5/shared/gipi-components/datepicker/mat-datepicker/month-view.js +384 -0
  536. package/esm5/shared/gipi-components/datepicker/mat-datepicker/multi-year-view.js +324 -0
  537. package/esm5/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/date-adapter.js +118 -0
  538. package/esm5/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/date-formats.js +10 -0
  539. package/esm5/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/native-date-adapter.js +300 -0
  540. package/esm5/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/native-date-formats.js +19 -0
  541. package/esm5/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/platform.js +82 -0
  542. package/esm5/shared/gipi-components/datepicker/mat-datepicker/year-view.js +313 -0
  543. package/esm5/shared/gipi-components/dom/connected-overlay-scroll-handler.js +30 -0
  544. package/esm5/shared/gipi-components/dom/dom-handler.js +681 -0
  545. package/esm5/shared/gipi-components/dropdown-menu/dropdown-menu.component.js +191 -0
  546. package/esm5/shared/gipi-components/expansion-panel/expansion-panel.component.js +83 -0
  547. package/esm5/shared/gipi-components/file-drag-and-drop/file-drag-and-drop.component.js +255 -0
  548. package/esm5/shared/gipi-components/file-drag-and-drop/shared/file-drag-and-drop.directive.js +93 -0
  549. package/esm5/shared/gipi-components/footer/footer.component.js +32 -0
  550. package/esm5/shared/gipi-components/form-field/form-field.component.js +276 -0
  551. package/esm5/shared/gipi-components/helpful-tip/helpful-tip.component.js +68 -0
  552. package/esm5/shared/gipi-components/infinite-scroll/infinite-scroll.directive.js +106 -0
  553. package/esm5/shared/gipi-components/input-checkbox/input-checkbox.component.js +118 -0
  554. package/esm5/shared/gipi-components/input-currency/input-currency.component.js +207 -0
  555. package/esm5/shared/gipi-components/input-monthpicker/input-monthpicker.component.js +426 -0
  556. package/esm5/shared/gipi-components/input-select/input-select.component.js +698 -0
  557. package/esm5/shared/gipi-components/input-select-enum/input-select-enum.component.js +351 -0
  558. package/esm5/shared/gipi-components/input-select-listbox/input-select-listbox.component.js +437 -0
  559. package/esm5/shared/gipi-components/input-select-paged/input-search/input-search.component.js +397 -0
  560. package/esm5/shared/gipi-components/input-select-paged/input-select-paged.component.js +384 -0
  561. package/esm5/shared/gipi-components/input-select-radio/input-select-radio.component.js +286 -0
  562. package/esm5/shared/gipi-components/layout-grid/col.directive.js +164 -0
  563. package/esm5/shared/gipi-components/layout-grid/row.directive.js +127 -0
  564. package/esm5/shared/gipi-components/layout-grid/services/breakpoint.service.js +90 -0
  565. package/esm5/shared/gipi-components/layout-grid/services/resize.service.js +68 -0
  566. package/esm5/shared/gipi-components/month-year-picker/calendar-month-year/calendar-month-year.component.js +200 -0
  567. package/esm5/shared/gipi-components/month-year-picker/mont-year-picker.module.js +50 -0
  568. package/esm5/shared/gipi-components/month-year-picker/month-year-picker.component.js +505 -0
  569. package/esm5/shared/gipi-components/notification/notification.component.js +106 -0
  570. package/esm5/shared/gipi-components/novelties/novelties.component.js +111 -0
  571. package/esm5/shared/gipi-components/overlay/overlay.component.js +670 -0
  572. package/esm5/shared/gipi-components/overlay/shared/overlay-service.js +22 -0
  573. package/esm5/shared/gipi-components/overlay/shared/overlay_options.js +1 -0
  574. package/esm5/shared/gipi-components/password-requeriments/password-requeriments.component.js +157 -0
  575. package/esm5/shared/gipi-components/popover/popover.component.js +473 -0
  576. package/esm5/shared/gipi-components/popover/shared/popover-animations.js +29 -0
  577. package/esm5/shared/gipi-components/popover/shared/popover-errors.js +21 -0
  578. package/esm5/shared/gipi-components/popover/shared/popover-interfaces.js +1 -0
  579. package/esm5/shared/gipi-components/popover/shared/popover-target.js +20 -0
  580. package/esm5/shared/gipi-components/popover/shared/popover-trigger.js +529 -0
  581. package/esm5/shared/gipi-components/popover/shared/popover-types.js +1 -0
  582. package/esm5/shared/gipi-components/radio-group/radio-group.component.js +155 -0
  583. package/esm5/shared/gipi-components/range-page/range-page.component.js +283 -0
  584. package/esm5/shared/gipi-components/range-slider/range-slider.component.js +364 -0
  585. package/esm5/shared/gipi-components/select/select.component.js +222 -0
  586. package/esm5/shared/gipi-components/select-button/select-button.component.js +206 -0
  587. package/esm5/shared/gipi-components/sidebar/container/container.component.js +96 -0
  588. package/esm5/shared/gipi-components/sidebar/sidenav/sidenav.component.js +267 -0
  589. package/esm5/shared/gipi-components/stepper/stepper.component.js +43 -0
  590. package/esm5/shared/gipi-components/table/components/table-body/table-body.component.js +209 -0
  591. package/esm5/shared/gipi-components/table/components/table-footer/table-footer.component.js +33 -0
  592. package/esm5/shared/gipi-components/table/components/table-header/table-header.component.js +155 -0
  593. package/esm5/shared/gipi-components/table/components/table-pagination/shared/paginate.pipe.js +123 -0
  594. package/esm5/shared/gipi-components/table/components/table-pagination/shared/pagination-controls.directive.js +228 -0
  595. package/esm5/shared/gipi-components/table/components/table-pagination/shared/pagination-instance.js +1 -0
  596. package/esm5/shared/gipi-components/table/components/table-pagination/shared/pagination.service.js +108 -0
  597. package/esm5/shared/gipi-components/table/components/table-pagination/table-pagination.component.js +116 -0
  598. package/esm5/shared/gipi-components/table/components/table-progress-bar/table-progress-bar.component.js +33 -0
  599. package/esm5/shared/gipi-components/table/models/pipe-transform.model.js +1 -0
  600. package/esm5/shared/gipi-components/table/models/sort.model.js +29 -0
  601. package/esm5/shared/gipi-components/table/models/sorted-column.model.js +2 -0
  602. package/esm5/shared/gipi-components/table/models/table-column-builder.model.js +106 -0
  603. package/esm5/shared/gipi-components/table/models/table-column.model.js +252 -0
  604. package/esm5/shared/gipi-components/table/table.component.js +161 -0
  605. package/esm5/shared/gipi-components/table/types/sort-direction.type.js +1 -0
  606. package/esm5/shared/gipi-components/table/types/sort.type.js +1 -0
  607. package/esm5/shared/gipi-components/template/template.directive.js +34 -0
  608. package/esm5/shared/gipi-components/toolbar/toolbar.component.js +56 -0
  609. package/esm5/shared/gipi-components/top-nav/top-nav.component.js +40 -0
  610. package/esm5/shared/gipi-components/user-profile/user-profile.component.js +115 -0
  611. package/esm5/shared/material.module.js +101 -0
  612. package/esm5/shared/shared.module.js +340 -0
  613. package/esm5/shared.js +36 -0
  614. package/fesm2015/gipisistemas-ng-core.js +25879 -0
  615. package/fesm2015/gipisistemas-ng-core.js.map +1 -0
  616. package/fesm5/gipisistemas-ng-core.js +27905 -0
  617. package/fesm5/gipisistemas-ng-core.js.map +1 -0
  618. package/gipi-components.d.ts +97 -0
  619. package/gipisistemas-ng-core.d.ts +20 -0
  620. package/gipisistemas-ng-core.metadata.json +1 -0
  621. package/package.json +31 -83
  622. package/public_api.d.ts +3 -0
  623. package/shared/api/generate-id-component.d.ts +3 -0
  624. package/shared/api/gipi-ng-config.d.ts +18 -0
  625. package/shared/api/overlay-message.d.ts +14 -0
  626. package/shared/api/throttle.d.ts +17 -0
  627. package/shared/api/translation.d.ts +45 -0
  628. package/shared/components/button/button.component.d.ts +26 -0
  629. package/shared/components/card/card.component.d.ts +10 -0
  630. package/shared/components/checkbox/checkbox.component.d.ts +20 -0
  631. package/shared/components/dom/connected-overlay-scroll-handler.d.ts +9 -0
  632. package/shared/components/dom/dom-handler.d.ts +74 -0
  633. package/shared/components/icon/icon.component.d.ts +9 -0
  634. package/shared/components/input/input.component.d.ts +52 -0
  635. package/shared/components/input-currency/input-currency.component.d.ts +29 -0
  636. package/shared/components/input-file/input-file.component.d.ts +28 -0
  637. package/shared/components/loading/loading.component.d.ts +4 -0
  638. package/shared/components/loading-overlay/loading-overlay.component.d.ts +6 -0
  639. package/shared/components/overlay-panel/overlay-panel.component.d.ts +67 -0
  640. package/shared/components/popover/popover-ref.d.ts +17 -0
  641. package/shared/components/popover/popover.component.d.ts +10 -0
  642. package/shared/components/popover/popover.service.d.ts +23 -0
  643. package/shared/components/radio-group-entity/radio-group-entity.component.d.ts +19 -0
  644. package/shared/components/radio-group-enum/radio-group-enum.component.d.ts +30 -0
  645. package/shared/components/select-button/select-button.component.d.ts +35 -0
  646. package/shared/components/select-entity/select-entity.component.d.ts +52 -0
  647. package/shared/components/select-entity-paged/select-entity-paged.component.d.ts +78 -0
  648. package/shared/components/select-entity-paged/shared/default-options.d.ts +25 -0
  649. package/shared/components/select-entity-paged/shared/select-button-add/select-button-add.component.d.ts +18 -0
  650. package/shared/components/select-entity-paged/shared/select-button-next-batch/select-button-next-batch.component.d.ts +16 -0
  651. package/shared/components/select-entity-paged/shared/select-no-entries-found.directive.d.ts +11 -0
  652. package/shared/components/select-entity-paged/shared/select-search/select-search.component.d.ts +119 -0
  653. package/shared/components/select-entity-paged/shared/select-search-clear.directive.d.ts +9 -0
  654. package/shared/components/select-enum/select-enum.component.d.ts +29 -0
  655. package/shared/components/select-month-period/select-month-period.component.d.ts +20 -0
  656. package/shared/components/slide-toggle/slide-toggle.component.d.ts +19 -0
  657. package/shared/components/stepper/stepper.component.d.ts +7 -0
  658. package/shared/components/tab/tab.component.d.ts +14 -0
  659. package/shared/components/tab-group/tab-group.component.d.ts +22 -0
  660. package/shared/components/table/table.component.d.ts +86 -0
  661. package/shared/components/table-scrolled/table-scrolled.component.d.ts +31 -0
  662. package/shared/components/textarea/textarea.component.d.ts +35 -0
  663. package/shared/directives/dynamic-tab.directive.d.ts +5 -0
  664. package/shared/directives/generic-template.directive.d.ts +8 -0
  665. package/shared/directives/input-select-infinite-scroll.directive.d.ts +35 -0
  666. package/shared/directives/lower-case.directive.d.ts +9 -0
  667. package/shared/directives/phone-mask.directive.d.ts +8 -0
  668. package/shared/directives/space-drop.directive.d.ts +9 -0
  669. package/shared/directives/upper-case.directive.d.ts +9 -0
  670. package/shared/gipi-components/abstract-form/abstract-form.component.d.ts +21 -0
  671. package/shared/gipi-components/action-row/action-row.component.d.ts +5 -0
  672. package/shared/gipi-components/badge/badge.component.d.ts +8 -0
  673. package/shared/gipi-components/button/button.component.d.ts +56 -0
  674. package/shared/gipi-components/chips/chips.component.d.ts +37 -0
  675. package/shared/gipi-components/confirmation-dialog/confirmation-dialog.component.d.ts +11 -0
  676. package/shared/gipi-components/datepicker/date-range-picker/date-range-picker.component.d.ts +71 -0
  677. package/shared/gipi-components/datepicker/date-range-picker/shared/max-range/max-range-selection-startegy.d.ts +11 -0
  678. package/shared/gipi-components/datepicker/date-range-picker/shared/max-range/max-range.directive.d.ts +6 -0
  679. package/shared/gipi-components/datepicker/date-range-picker/shared/preset-range/preset-range.component.d.ts +40 -0
  680. package/shared/gipi-components/datepicker/datepicker/datepicker.component.d.ts +49 -0
  681. package/shared/gipi-components/datepicker/datepicker.module.d.ts +2 -0
  682. package/shared/gipi-components/datepicker/mat-datepicker/calendar-body.d.ts +143 -0
  683. package/shared/gipi-components/datepicker/mat-datepicker/calendar.d.ts +152 -0
  684. package/shared/gipi-components/datepicker/mat-datepicker/date-range-input-parts.d.ts +102 -0
  685. package/shared/gipi-components/datepicker/mat-datepicker/date-range-input.d.ts +124 -0
  686. package/shared/gipi-components/datepicker/mat-datepicker/date-range-picker.d.ts +21 -0
  687. package/shared/gipi-components/datepicker/mat-datepicker/date-range-selection-strategy.d.ts +45 -0
  688. package/shared/gipi-components/datepicker/mat-datepicker/date-selection-model.d.ts +106 -0
  689. package/shared/gipi-components/datepicker/mat-datepicker/datepicker-animations.d.ts +16 -0
  690. package/shared/gipi-components/datepicker/mat-datepicker/datepicker-base.d.ts +209 -0
  691. package/shared/gipi-components/datepicker/mat-datepicker/datepicker-errors.d.ts +9 -0
  692. package/shared/gipi-components/datepicker/mat-datepicker/datepicker-input-base.d.ts +136 -0
  693. package/shared/gipi-components/datepicker/mat-datepicker/datepicker-input.d.ts +68 -0
  694. package/shared/gipi-components/datepicker/mat-datepicker/datepicker-intl.d.ts +38 -0
  695. package/shared/gipi-components/datepicker/mat-datepicker/datepicker-toggle.d.ts +39 -0
  696. package/shared/gipi-components/datepicker/mat-datepicker/datepicker.d.ts +11 -0
  697. package/shared/gipi-components/datepicker/mat-datepicker/month-view.d.ts +120 -0
  698. package/shared/gipi-components/datepicker/mat-datepicker/multi-year-view.d.ts +85 -0
  699. package/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/date-adapter.d.ts +225 -0
  700. package/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/date-formats.d.ts +20 -0
  701. package/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/native-date-adapter.d.ts +76 -0
  702. package/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/native-date-formats.d.ts +9 -0
  703. package/shared/gipi-components/datepicker/mat-datepicker/shared/adapter/platform.d.ts +33 -0
  704. package/shared/gipi-components/datepicker/mat-datepicker/year-view.d.ts +97 -0
  705. package/shared/gipi-components/dom/connected-overlay-scroll-handler.d.ts +9 -0
  706. package/shared/gipi-components/dom/dom-handler.d.ts +85 -0
  707. package/shared/gipi-components/dropdown-menu/dropdown-menu.component.d.ts +36 -0
  708. package/shared/gipi-components/expansion-panel/expansion-panel.component.d.ts +16 -0
  709. package/shared/gipi-components/file-drag-and-drop/file-drag-and-drop.component.d.ts +43 -0
  710. package/shared/gipi-components/file-drag-and-drop/shared/file-drag-and-drop.directive.d.ts +13 -0
  711. package/shared/gipi-components/footer/footer.component.d.ts +5 -0
  712. package/shared/gipi-components/form-field/form-field.component.d.ts +61 -0
  713. package/shared/gipi-components/helpful-tip/helpful-tip.component.d.ts +13 -0
  714. package/shared/gipi-components/infinite-scroll/infinite-scroll.directive.d.ts +27 -0
  715. package/shared/gipi-components/input-checkbox/input-checkbox.component.d.ts +28 -0
  716. package/shared/gipi-components/input-currency/input-currency.component.d.ts +48 -0
  717. package/shared/gipi-components/input-monthpicker/input-monthpicker.component.d.ts +89 -0
  718. package/shared/gipi-components/input-select/input-select.component.d.ts +120 -0
  719. package/shared/gipi-components/input-select-enum/input-select-enum.component.d.ts +65 -0
  720. package/shared/gipi-components/input-select-listbox/input-select-listbox.component.d.ts +85 -0
  721. package/shared/gipi-components/input-select-paged/input-search/input-search.component.d.ts +77 -0
  722. package/shared/gipi-components/input-select-paged/input-select-paged.component.d.ts +66 -0
  723. package/shared/gipi-components/input-select-radio/input-select-radio.component.d.ts +53 -0
  724. package/shared/gipi-components/layout-grid/col.directive.d.ts +38 -0
  725. package/shared/gipi-components/layout-grid/row.directive.d.ts +28 -0
  726. package/shared/gipi-components/layout-grid/services/breakpoint.service.d.ts +30 -0
  727. package/shared/gipi-components/layout-grid/services/resize.service.d.ts +17 -0
  728. package/shared/gipi-components/month-year-picker/calendar-month-year/calendar-month-year.component.d.ts +37 -0
  729. package/shared/gipi-components/month-year-picker/mont-year-picker.module.d.ts +2 -0
  730. package/shared/gipi-components/month-year-picker/month-year-picker.component.d.ts +104 -0
  731. package/shared/gipi-components/notification/notification.component.d.ts +21 -0
  732. package/shared/gipi-components/novelties/novelties.component.d.ts +22 -0
  733. package/shared/gipi-components/overlay/overlay.component.d.ts +113 -0
  734. package/shared/gipi-components/overlay/shared/overlay-service.d.ts +6 -0
  735. package/shared/gipi-components/overlay/shared/overlay_options.d.ts +50 -0
  736. package/shared/gipi-components/password-requeriments/password-requeriments.component.d.ts +27 -0
  737. package/shared/gipi-components/popover/popover.component.d.ts +133 -0
  738. package/shared/gipi-components/popover/shared/popover-animations.d.ts +13 -0
  739. package/shared/gipi-components/popover/shared/popover-errors.d.ts +14 -0
  740. package/shared/gipi-components/popover/shared/popover-interfaces.d.ts +43 -0
  741. package/shared/gipi-components/popover/shared/popover-target.d.ts +5 -0
  742. package/shared/gipi-components/popover/shared/popover-trigger.d.ts +140 -0
  743. package/shared/gipi-components/popover/shared/popover-types.d.ts +4 -0
  744. package/shared/gipi-components/radio-group/radio-group.component.d.ts +33 -0
  745. package/shared/gipi-components/range-page/range-page.component.d.ts +55 -0
  746. package/shared/gipi-components/range-slider/range-slider.component.d.ts +57 -0
  747. package/shared/gipi-components/select/select.component.d.ts +45 -0
  748. package/shared/gipi-components/select-button/select-button.component.d.ts +39 -0
  749. package/shared/gipi-components/sidebar/container/container.component.d.ts +15 -0
  750. package/shared/gipi-components/sidebar/sidenav/sidenav.component.d.ts +40 -0
  751. package/shared/gipi-components/stepper/stepper.component.d.ts +8 -0
  752. package/shared/gipi-components/table/components/table-body/table-body.component.d.ts +36 -0
  753. package/shared/gipi-components/table/components/table-footer/table-footer.component.d.ts +5 -0
  754. package/shared/gipi-components/table/components/table-header/table-header.component.d.ts +28 -0
  755. package/shared/gipi-components/table/components/table-pagination/shared/paginate.pipe.d.ts +40 -0
  756. package/shared/gipi-components/table/components/table-pagination/shared/pagination-controls.directive.d.ts +81 -0
  757. package/shared/gipi-components/table/components/table-pagination/shared/pagination-instance.d.ts +24 -0
  758. package/shared/gipi-components/table/components/table-pagination/shared/pagination.service.d.ts +45 -0
  759. package/shared/gipi-components/table/components/table-pagination/table-pagination.component.d.ts +21 -0
  760. package/shared/gipi-components/table/components/table-progress-bar/table-progress-bar.component.d.ts +5 -0
  761. package/shared/gipi-components/table/models/pipe-transform.model.d.ts +3 -0
  762. package/shared/gipi-components/table/models/sort.model.d.ts +10 -0
  763. package/shared/gipi-components/table/models/sorted-column.model.d.ts +6 -0
  764. package/shared/gipi-components/table/models/table-column-builder.model.d.ts +52 -0
  765. package/shared/gipi-components/table/models/table-column.model.d.ts +74 -0
  766. package/shared/gipi-components/table/table.component.d.ts +37 -0
  767. package/shared/gipi-components/table/types/sort-direction.type.d.ts +1 -0
  768. package/shared/gipi-components/table/types/sort.type.d.ts +1 -0
  769. package/shared/gipi-components/template/template.directive.d.ts +8 -0
  770. package/shared/gipi-components/toolbar/toolbar.component.d.ts +11 -0
  771. package/shared/gipi-components/top-nav/top-nav.component.d.ts +8 -0
  772. package/shared/gipi-components/user-profile/user-profile.component.d.ts +24 -0
  773. package/shared/material.module.d.ts +2 -0
  774. package/shared/shared.module.d.ts +6 -0
  775. package/shared.d.ts +35 -0
  776. package/README.md +0 -38
  777. package/_ITSS-NG-CI-CD.yml +0 -53
  778. package/_ITSS-NG-CI-PR.yml +0 -53
  779. package/angular-cli.json +0 -42
  780. package/azure-pipelines.yml +0 -35
  781. package/projects/itss-ng/ng-package.json +0 -7
  782. package/projects/itss-ng/package.json +0 -25
@@ -0,0 +1,586 @@
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 { __decorate, __extends, __metadata, __param } from "tslib";
9
+ import { Directionality } from '@angular/cdk/bidi';
10
+ import { ESCAPE, UP_ARROW } from '@angular/cdk/keycodes';
11
+ import { Overlay, OverlayConfig, } from '@angular/cdk/overlay';
12
+ import { ComponentPortal } from '@angular/cdk/portal';
13
+ import { DOCUMENT } from '@angular/common';
14
+ import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentRef, Directive, ElementRef, EventEmitter, Inject, InjectionToken, Input, NgZone, OnChanges, OnDestroy, Optional, Output, SimpleChanges, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation } from '@angular/core';
15
+ import { mixinColor, } from '@angular/material/core';
16
+ import { MatDialog } from '@angular/material/dialog';
17
+ import { merge, Subject, Subscription } from 'rxjs';
18
+ import { filter, take } from 'rxjs/operators';
19
+ import { MatCalendar } from './calendar';
20
+ import { MAT_DATE_RANGE_SELECTION_STRATEGY, } from './date-range-selection-strategy';
21
+ import { DateRange, ExtractDateTypeFromSelection, MatDateSelectionModel, } from './date-selection-model';
22
+ import { matDatepickerAnimations } from './datepicker-animations';
23
+ import { createMissingDateImplError } from './datepicker-errors';
24
+ import { DateAdapter } from './shared/adapter/date-adapter';
25
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
26
+ /** Used to generate a unique ID for each datepicker instance. */
27
+ var datepickerUid = 0;
28
+ /** Injection token that determines the scroll handling while the calendar is open. */
29
+ export var MAT_DATEPICKER_SCROLL_STRATEGY = new InjectionToken('mat-datepicker-scroll-strategy');
30
+ /** @docs-private */
31
+ export function MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY(overlay) {
32
+ return function () { return overlay.scrollStrategies.reposition(); };
33
+ }
34
+ /** @docs-private */
35
+ export var MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER = {
36
+ provide: MAT_DATEPICKER_SCROLL_STRATEGY,
37
+ deps: [Overlay],
38
+ useFactory: MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY,
39
+ };
40
+ // Boilerplate for applying mixins to MatDatepickerContent.
41
+ /** @docs-private */
42
+ var MatDatepickerContentBase = /** @class */ (function () {
43
+ function MatDatepickerContentBase(_elementRef) {
44
+ this._elementRef = _elementRef;
45
+ }
46
+ return MatDatepickerContentBase;
47
+ }());
48
+ var _MatDatepickerContentMixinBase = mixinColor(MatDatepickerContentBase);
49
+ /**
50
+ * Component used as the content for the datepicker dialog and popup. We use this instead of using
51
+ * MatCalendar directly as the content so we can control the initial focus. This also gives us a
52
+ * place to put additional features of the popup that are not part of the calendar itself in the
53
+ * future. (e.g. confirmation buttons).
54
+ * @docs-private
55
+ */
56
+ var MatDatepickerContent = /** @class */ (function (_super) {
57
+ __extends(MatDatepickerContent, _super);
58
+ function MatDatepickerContent(elementRef,
59
+ /**
60
+ * @deprecated `_changeDetectorRef`, `_model` and `_rangeSelectionStrategy`
61
+ * parameters to become required.
62
+ * @breaking-change 11.0.0
63
+ */
64
+ _changeDetectorRef, _model, _dateAdapter, _rangeSelectionStrategy) {
65
+ var _this = _super.call(this, elementRef) || this;
66
+ _this._changeDetectorRef = _changeDetectorRef;
67
+ _this._model = _model;
68
+ _this._dateAdapter = _dateAdapter;
69
+ _this._rangeSelectionStrategy = _rangeSelectionStrategy;
70
+ _this._subscriptions = new Subscription();
71
+ /** Current state of the animation. */
72
+ _this._animationState = 'enter';
73
+ /** Emits when an animation has finished. */
74
+ _this._animationDone = new Subject();
75
+ return _this;
76
+ }
77
+ MatDatepickerContent.prototype.ngAfterViewInit = function () {
78
+ var _this = this;
79
+ // @breaking-change 11.0.0 Remove null check for `_changeDetectorRef.
80
+ if (this._changeDetectorRef) {
81
+ this._subscriptions.add(this.datepicker._stateChanges.subscribe(function () {
82
+ _this._changeDetectorRef.markForCheck();
83
+ }));
84
+ }
85
+ this._calendar.focusActiveCell();
86
+ };
87
+ MatDatepickerContent.prototype.ngOnDestroy = function () {
88
+ this._subscriptions.unsubscribe();
89
+ this._animationDone.complete();
90
+ };
91
+ MatDatepickerContent.prototype._handleUserSelection = function (event) {
92
+ // @breaking-change 11.0.0 Remove null checks for _model,
93
+ // _rangeSelectionStrategy and _dateAdapter.
94
+ if (this._model && this._dateAdapter) {
95
+ var selection = this._model.selection;
96
+ var value = event.value;
97
+ var isRange = selection instanceof DateRange;
98
+ // If we're selecting a range and we have a selection strategy, always pass the value through
99
+ // there. Otherwise don't assign null values to the model, unless we're selecting a range.
100
+ // A null value when picking a range means that the user cancelled the selection (e.g. by
101
+ // pressing escape), whereas when selecting a single value it means that the value didn't
102
+ // change. This isn't very intuitive, but it's here for backwards-compatibility.
103
+ if (isRange && this._rangeSelectionStrategy) {
104
+ var newSelection = this._rangeSelectionStrategy.selectionFinished(value, selection, event.event);
105
+ this._model.updateSelection(newSelection, this);
106
+ }
107
+ else if (value && (isRange ||
108
+ !this._dateAdapter.sameDate(value, selection))) {
109
+ this._model.add(value);
110
+ }
111
+ }
112
+ if (!this._model || this._model.isComplete()) {
113
+ this.datepicker.close();
114
+ }
115
+ };
116
+ MatDatepickerContent.prototype._startExitAnimation = function () {
117
+ this._animationState = 'void';
118
+ // @breaking-change 11.0.0 Remove null check for `_changeDetectorRef`.
119
+ if (this._changeDetectorRef) {
120
+ this._changeDetectorRef.markForCheck();
121
+ }
122
+ };
123
+ MatDatepickerContent.prototype._getSelected = function () {
124
+ // @breaking-change 11.0.0 Remove null check for `_model`.
125
+ return this._model ? this._model.selection : null;
126
+ };
127
+ MatDatepickerContent.ctorParameters = function () { return [
128
+ { type: ElementRef },
129
+ { type: ChangeDetectorRef },
130
+ { type: MatDateSelectionModel },
131
+ { type: DateAdapter },
132
+ { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DATE_RANGE_SELECTION_STRATEGY,] }] }
133
+ ]; };
134
+ __decorate([
135
+ ViewChild(MatCalendar, { static: true }),
136
+ __metadata("design:type", MatCalendar)
137
+ ], MatDatepickerContent.prototype, "_calendar", void 0);
138
+ MatDatepickerContent = __decorate([
139
+ Component({
140
+ selector: 'gipi-mat-datepicker-content',
141
+ template: "<gipi-mat-calendar cdkTrapFocus\n [id]=\"datepicker.id\"\n [ngClass]=\"datepicker.panelClass\"\n [startAt]=\"datepicker.startAt\"\n [startView]=\"datepicker.startView\"\n [minDate]=\"datepicker._getMinDate()\"\n [maxDate]=\"datepicker._getMaxDate()\"\n [dateFilter]=\"datepicker._getDateFilter()\"\n [templatePresetRange]=\"datepicker.templatePresetRange\"\n [selected]=\"_getSelected()\"\n [dateClass]=\"datepicker.dateClass\"\n [comparisonStart]=\"comparisonStart\"\n [comparisonEnd]=\"comparisonEnd\"\n [@fadeInCalendar]=\"'enter'\"\n (yearSelected)=\"datepicker._selectYear($event)\"\n (monthSelected)=\"datepicker._selectMonth($event)\"\n (_userSelection)=\"_handleUserSelection($event)\">\n</gipi-mat-calendar>",
142
+ host: {
143
+ 'class': 'mat-datepicker-content',
144
+ '[@transformPanel]': '_animationState',
145
+ '(@transformPanel.done)': '_animationDone.next()',
146
+ '[class.mat-datepicker-content-touch]': 'datepicker.touchUi',
147
+ },
148
+ animations: [
149
+ matDatepickerAnimations.transformPanel,
150
+ matDatepickerAnimations.fadeInCalendar,
151
+ ],
152
+ exportAs: 'gipiMatDatepickerContent',
153
+ encapsulation: ViewEncapsulation.None,
154
+ changeDetection: ChangeDetectionStrategy.OnPush,
155
+ inputs: ['color'],
156
+ styles: [".mat-datepicker-content{display:block;border-radius:4px}.mat-datepicker-content .mat-calendar{min-width:296px;height:365px}.mat-datepicker-content .gipi-mat-calendar-wrapper .gipi-mat-calendar-content{min-width:296px;min-height:365px;border-left:1px solid rgba(0,0,0,.12)}.mat-datepicker-content-touch{display:block;max-height:80vh;overflow:auto;margin:-24px}.mat-datepicker-content-touch .mat-calendar{min-width:250px;min-height:312px;max-width:750px;max-height:788px}@media all and (orientation:landscape){.mat-datepicker-content-touch .mat-calendar{width:64vh;height:80vh}}@media all and (orientation:portrait){.mat-datepicker-content-touch .mat-calendar{width:80vw;height:100vw}}"]
157
+ }),
158
+ __param(4, Optional()), __param(4, Inject(MAT_DATE_RANGE_SELECTION_STRATEGY)),
159
+ __metadata("design:paramtypes", [ElementRef,
160
+ ChangeDetectorRef,
161
+ MatDateSelectionModel,
162
+ DateAdapter, Object])
163
+ ], MatDatepickerContent);
164
+ return MatDatepickerContent;
165
+ }(_MatDatepickerContentMixinBase));
166
+ export { MatDatepickerContent };
167
+ /** Base class for a datepicker. */
168
+ var MatDatepickerBase = /** @class */ (function () {
169
+ function MatDatepickerBase(_dialog, _overlay, _ngZone, _viewContainerRef, scrollStrategy, _dateAdapter, _dir, _document, _model) {
170
+ this._dialog = _dialog;
171
+ this._overlay = _overlay;
172
+ this._ngZone = _ngZone;
173
+ this._viewContainerRef = _viewContainerRef;
174
+ this._dateAdapter = _dateAdapter;
175
+ this._dir = _dir;
176
+ this._document = _document;
177
+ this._model = _model;
178
+ this._inputStateChanges = Subscription.EMPTY;
179
+ /** The view that the calendar should start in. */
180
+ this.startView = 'month';
181
+ this._touchUi = false;
182
+ /** Preferred position of the datepicker in the X axis. */
183
+ this.xPosition = 'start';
184
+ /** Preferred position of the datepicker in the Y axis. */
185
+ this.yPosition = 'below';
186
+ /**
187
+ * Emits selected year in multiyear view.
188
+ * This doesn't imply a change on the selected date.
189
+ */
190
+ this.yearSelected = new EventEmitter();
191
+ /**
192
+ * Emits selected month in year view.
193
+ * This doesn't imply a change on the selected date.
194
+ */
195
+ this.monthSelected = new EventEmitter();
196
+ /** Emits when the datepicker has been opened. */
197
+ this.openedStream = new EventEmitter();
198
+ /** Emits when the datepicker has been closed. */
199
+ this.closedStream = new EventEmitter();
200
+ this._opened = false;
201
+ /** The id for the datepicker calendar. */
202
+ this.id = "mat-datepicker-" + datepickerUid++;
203
+ /** The element that was focused before the datepicker was opened. */
204
+ this._focusedElementBeforeOpen = null;
205
+ /** Unique class that will be added to the backdrop so that the test harnesses can look it up. */
206
+ this._backdropHarnessClass = this.id + "-backdrop";
207
+ /** Emits when the datepicker's state changes. */
208
+ this._stateChanges = new Subject();
209
+ if (!this._dateAdapter) {
210
+ throw createMissingDateImplError('DateAdapter');
211
+ }
212
+ this._scrollStrategy = scrollStrategy;
213
+ }
214
+ Object.defineProperty(MatDatepickerBase.prototype, "startAt", {
215
+ /** The date to open the calendar to initially. */
216
+ get: function () {
217
+ // If an explicit startAt is set we start there, otherwise we start at whatever the currently
218
+ // selected value is.
219
+ return this._startAt || (this._datepickerInput ? this._datepickerInput.getStartValue() : null);
220
+ },
221
+ set: function (value) {
222
+ this._startAt = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
223
+ },
224
+ enumerable: false,
225
+ configurable: true
226
+ });
227
+ Object.defineProperty(MatDatepickerBase.prototype, "color", {
228
+ /** Color palette to use on the datepicker's calendar. */
229
+ get: function () {
230
+ return this._color || (this._datepickerInput ? this._datepickerInput.getThemePalette() : undefined);
231
+ },
232
+ set: function (value) {
233
+ this._color = value;
234
+ },
235
+ enumerable: false,
236
+ configurable: true
237
+ });
238
+ Object.defineProperty(MatDatepickerBase.prototype, "touchUi", {
239
+ /**
240
+ * Whether the calendar UI is in touch mode. In touch mode the calendar opens in a dialog rather
241
+ * than a popup and elements have more padding to allow for bigger touch targets.
242
+ */
243
+ get: function () { return this._touchUi; },
244
+ set: function (value) {
245
+ this._touchUi = coerceBooleanProperty(value);
246
+ },
247
+ enumerable: false,
248
+ configurable: true
249
+ });
250
+ Object.defineProperty(MatDatepickerBase.prototype, "disabled", {
251
+ /** Whether the datepicker pop-up should be disabled. */
252
+ get: function () {
253
+ return this._disabled === undefined && this._datepickerInput ?
254
+ this._datepickerInput.disabled : !!this._disabled;
255
+ },
256
+ set: function (value) {
257
+ var newValue = coerceBooleanProperty(value);
258
+ if (newValue !== this._disabled) {
259
+ this._disabled = newValue;
260
+ this._stateChanges.next(undefined);
261
+ }
262
+ },
263
+ enumerable: false,
264
+ configurable: true
265
+ });
266
+ Object.defineProperty(MatDatepickerBase.prototype, "opened", {
267
+ /** Whether the calendar is open. */
268
+ get: function () { return this._opened; },
269
+ set: function (value) {
270
+ coerceBooleanProperty(value) ? this.open() : this.close();
271
+ },
272
+ enumerable: false,
273
+ configurable: true
274
+ });
275
+ /** The minimum selectable date. */
276
+ MatDatepickerBase.prototype._getMinDate = function () {
277
+ return this._datepickerInput && this._datepickerInput.min;
278
+ };
279
+ /** The maximum selectable date. */
280
+ MatDatepickerBase.prototype._getMaxDate = function () {
281
+ return this._datepickerInput && this._datepickerInput.max;
282
+ };
283
+ MatDatepickerBase.prototype._getDateFilter = function () {
284
+ return this._datepickerInput && this._datepickerInput.dateFilter;
285
+ };
286
+ MatDatepickerBase.prototype.ngOnChanges = function (changes) {
287
+ var positionChange = changes['xPosition'] || changes['yPosition'];
288
+ if (positionChange && !positionChange.firstChange && this._popupRef) {
289
+ this._setConnectedPositions(this._popupRef.getConfig().positionStrategy);
290
+ if (this.opened) {
291
+ this._popupRef.updatePosition();
292
+ }
293
+ }
294
+ this._stateChanges.next(undefined);
295
+ };
296
+ MatDatepickerBase.prototype.ngOnDestroy = function () {
297
+ this._destroyPopup();
298
+ this.close();
299
+ this._inputStateChanges.unsubscribe();
300
+ this._stateChanges.complete();
301
+ };
302
+ /** Selects the given date */
303
+ MatDatepickerBase.prototype.select = function (date) {
304
+ this._model.add(date);
305
+ };
306
+ /** Emits the selected year in multiyear view */
307
+ MatDatepickerBase.prototype._selectYear = function (normalizedYear) {
308
+ this.yearSelected.emit(normalizedYear);
309
+ };
310
+ /** Emits selected month in year view */
311
+ MatDatepickerBase.prototype._selectMonth = function (normalizedMonth) {
312
+ this.monthSelected.emit(normalizedMonth);
313
+ };
314
+ /**
315
+ * Register an input with this datepicker.
316
+ * @param input The datepicker input to register with this datepicker.
317
+ * @returns Selection model that the input should hook itself up to.
318
+ */
319
+ MatDatepickerBase.prototype._registerInput = function (input) {
320
+ var _this = this;
321
+ if (this._datepickerInput) {
322
+ throw Error('A MatDatepicker can only be associated with a single input.');
323
+ }
324
+ this._inputStateChanges.unsubscribe();
325
+ this._datepickerInput = input;
326
+ this._inputStateChanges = input.stateChanges.subscribe(function () { return _this._stateChanges.next(undefined); });
327
+ return this._model;
328
+ };
329
+ /** Open the calendar. */
330
+ MatDatepickerBase.prototype.open = function () {
331
+ if (this._opened || this.disabled) {
332
+ return;
333
+ }
334
+ if (!this._datepickerInput) {
335
+ throw Error('Attempted to open an MatDatepicker with no associated input.');
336
+ }
337
+ if (this._document) {
338
+ this._focusedElementBeforeOpen = this._document.activeElement;
339
+ }
340
+ this.touchUi ? this._openAsDialog() : this._openAsPopup();
341
+ this._opened = true;
342
+ this.openedStream.emit();
343
+ };
344
+ /** Close the calendar. */
345
+ MatDatepickerBase.prototype.close = function () {
346
+ var _this = this;
347
+ if (!this._opened) {
348
+ return;
349
+ }
350
+ if (this._popupComponentRef && this._popupRef) {
351
+ var instance = this._popupComponentRef.instance;
352
+ instance._startExitAnimation();
353
+ instance._animationDone.pipe(take(1)).subscribe(function () { return _this._destroyPopup(); });
354
+ }
355
+ if (this._dialogRef) {
356
+ this._dialogRef.close();
357
+ this._dialogRef = null;
358
+ }
359
+ var completeClose = function () {
360
+ // The `_opened` could've been reset already if
361
+ // we got two events in quick succession.
362
+ if (_this._opened) {
363
+ _this._opened = false;
364
+ _this.closedStream.emit();
365
+ _this._focusedElementBeforeOpen = null;
366
+ }
367
+ };
368
+ if (this._focusedElementBeforeOpen &&
369
+ typeof this._focusedElementBeforeOpen.focus === 'function') {
370
+ // Because IE moves focus asynchronously, we can't count on it being restored before we've
371
+ // marked the datepicker as closed. If the event fires out of sequence and the element that
372
+ // we're refocusing opens the datepicker on focus, the user could be stuck with not being
373
+ // able to close the calendar at all. We work around it by making the logic, that marks
374
+ // the datepicker as closed, async as well.
375
+ this._focusedElementBeforeOpen.focus();
376
+ setTimeout(completeClose);
377
+ }
378
+ else {
379
+ completeClose();
380
+ }
381
+ };
382
+ /** Open the calendar as a dialog. */
383
+ MatDatepickerBase.prototype._openAsDialog = function () {
384
+ var _this = this;
385
+ // Usually this would be handled by `open` which ensures that we can only have one overlay
386
+ // open at a time, however since we reset the variables in async handlers some overlays
387
+ // may slip through if the user opens and closes multiple times in quick succession (e.g.
388
+ // by holding down the enter key).
389
+ if (this._dialogRef) {
390
+ this._dialogRef.close();
391
+ }
392
+ this._dialogRef = this._dialog.open(MatDatepickerContent, {
393
+ direction: this._dir ? this._dir.value : 'ltr',
394
+ viewContainerRef: this._viewContainerRef,
395
+ panelClass: 'mat-datepicker-dialog',
396
+ // These values are all the same as the defaults, but we set them explicitly so that the
397
+ // datepicker dialog behaves consistently even if the user changed the defaults.
398
+ hasBackdrop: true,
399
+ disableClose: false,
400
+ backdropClass: "cdk-overlay-dark-backdrop, " + this._backdropHarnessClass,
401
+ width: '',
402
+ height: '',
403
+ minWidth: '',
404
+ minHeight: '',
405
+ maxWidth: '80vw',
406
+ maxHeight: '',
407
+ position: {},
408
+ autoFocus: true,
409
+ // `MatDialog` has focus restoration built in, however we want to disable it since the
410
+ // datepicker also has focus restoration for dropdown mode. We want to do this, in order
411
+ // to ensure that the timing is consistent between dropdown and dialog modes since `MatDialog`
412
+ // restores focus when the animation is finished, but the datepicker does it immediately.
413
+ // Furthermore, this avoids any conflicts where the datepicker consumer might move focus
414
+ // inside the `closed` event which is dispatched immediately.
415
+ restoreFocus: false
416
+ });
417
+ this._dialogRef.afterClosed().subscribe(function () { return _this.close(); });
418
+ this._forwardContentValues(this._dialogRef.componentInstance);
419
+ };
420
+ /** Open the calendar as a popup. */
421
+ MatDatepickerBase.prototype._openAsPopup = function () {
422
+ var _this = this;
423
+ var portal = new ComponentPortal(MatDatepickerContent, this._viewContainerRef);
424
+ this._destroyPopup();
425
+ this._createPopup();
426
+ this._popupComponentRef = this._popupRef.attach(portal);
427
+ this._forwardContentValues(this._popupComponentRef.instance);
428
+ // Update the position once the calendar has rendered.
429
+ this._ngZone.onStable.pipe(take(1)).subscribe(function () {
430
+ _this._popupRef.updatePosition();
431
+ });
432
+ };
433
+ /** Forwards relevant values from the datepicker to the datepicker content inside the overlay. */
434
+ MatDatepickerBase.prototype._forwardContentValues = function (instance) {
435
+ instance.datepicker = this;
436
+ instance.color = this.color;
437
+ };
438
+ /** Create the popup. */
439
+ MatDatepickerBase.prototype._createPopup = function () {
440
+ var _this = this;
441
+ var positionStrategy = this._overlay.position()
442
+ .flexibleConnectedTo(this._datepickerInput.getConnectedOverlayOrigin())
443
+ .withTransformOriginOn('.mat-datepicker-content')
444
+ .withFlexibleDimensions(false)
445
+ .withViewportMargin(8)
446
+ .withLockedPosition();
447
+ var overlayConfig = new OverlayConfig({
448
+ positionStrategy: this._setConnectedPositions(positionStrategy),
449
+ hasBackdrop: true,
450
+ backdropClass: ['mat-overlay-transparent-backdrop', this._backdropHarnessClass],
451
+ direction: this._dir,
452
+ scrollStrategy: this._scrollStrategy(),
453
+ panelClass: 'mat-datepicker-popup',
454
+ });
455
+ this._popupRef = this._overlay.create(overlayConfig);
456
+ this._popupRef.overlayElement.setAttribute('role', 'dialog');
457
+ merge(this._popupRef.backdropClick(), this._popupRef.detachments(), this._popupRef.keydownEvents().pipe(filter(function (event) {
458
+ // Closing on alt + up is only valid when there's an input associated with the datepicker.
459
+ return event.keyCode === ESCAPE || (_this._datepickerInput && event.altKey && event.keyCode === UP_ARROW);
460
+ }))).subscribe(function (event) {
461
+ if (event) {
462
+ event.preventDefault();
463
+ }
464
+ _this.close();
465
+ });
466
+ };
467
+ /** Destroys the current popup overlay. */
468
+ MatDatepickerBase.prototype._destroyPopup = function () {
469
+ if (this._popupRef) {
470
+ this._popupRef.dispose();
471
+ this._popupRef = this._popupComponentRef = null;
472
+ }
473
+ };
474
+ /** Sets the positions of the datepicker in dropdown mode based on the current configuration. */
475
+ MatDatepickerBase.prototype._setConnectedPositions = function (strategy) {
476
+ var primaryX = this.xPosition === 'end' ? 'end' : 'start';
477
+ var secondaryX = primaryX === 'start' ? 'end' : 'start';
478
+ var primaryY = this.yPosition === 'above' ? 'bottom' : 'top';
479
+ var secondaryY = primaryY === 'top' ? 'bottom' : 'top';
480
+ return strategy.withPositions([
481
+ {
482
+ originX: primaryX,
483
+ originY: secondaryY,
484
+ overlayX: primaryX,
485
+ overlayY: primaryY
486
+ },
487
+ {
488
+ originX: primaryX,
489
+ originY: primaryY,
490
+ overlayX: primaryX,
491
+ overlayY: secondaryY
492
+ },
493
+ {
494
+ originX: secondaryX,
495
+ originY: secondaryY,
496
+ overlayX: secondaryX,
497
+ overlayY: primaryY
498
+ },
499
+ {
500
+ originX: secondaryX,
501
+ originY: primaryY,
502
+ overlayX: secondaryX,
503
+ overlayY: secondaryY
504
+ }
505
+ ]);
506
+ };
507
+ __decorate([
508
+ Input(),
509
+ __metadata("design:type", TemplateRef)
510
+ ], MatDatepickerBase.prototype, "templatePresetRange", void 0);
511
+ __decorate([
512
+ Input(),
513
+ __metadata("design:type", Object),
514
+ __metadata("design:paramtypes", [Object])
515
+ ], MatDatepickerBase.prototype, "startAt", null);
516
+ __decorate([
517
+ Input(),
518
+ __metadata("design:type", String)
519
+ ], MatDatepickerBase.prototype, "startView", void 0);
520
+ __decorate([
521
+ Input(),
522
+ __metadata("design:type", String),
523
+ __metadata("design:paramtypes", [String])
524
+ ], MatDatepickerBase.prototype, "color", null);
525
+ __decorate([
526
+ Input(),
527
+ __metadata("design:type", Boolean),
528
+ __metadata("design:paramtypes", [Boolean])
529
+ ], MatDatepickerBase.prototype, "touchUi", null);
530
+ __decorate([
531
+ Input(),
532
+ __metadata("design:type", Boolean),
533
+ __metadata("design:paramtypes", [Boolean])
534
+ ], MatDatepickerBase.prototype, "disabled", null);
535
+ __decorate([
536
+ Input(),
537
+ __metadata("design:type", String)
538
+ ], MatDatepickerBase.prototype, "xPosition", void 0);
539
+ __decorate([
540
+ Input(),
541
+ __metadata("design:type", String)
542
+ ], MatDatepickerBase.prototype, "yPosition", void 0);
543
+ __decorate([
544
+ Output(),
545
+ __metadata("design:type", EventEmitter)
546
+ ], MatDatepickerBase.prototype, "yearSelected", void 0);
547
+ __decorate([
548
+ Output(),
549
+ __metadata("design:type", EventEmitter)
550
+ ], MatDatepickerBase.prototype, "monthSelected", void 0);
551
+ __decorate([
552
+ Input(),
553
+ __metadata("design:type", Object)
554
+ ], MatDatepickerBase.prototype, "panelClass", void 0);
555
+ __decorate([
556
+ Input(),
557
+ __metadata("design:type", Function)
558
+ ], MatDatepickerBase.prototype, "dateClass", void 0);
559
+ __decorate([
560
+ Output('opened'),
561
+ __metadata("design:type", EventEmitter)
562
+ ], MatDatepickerBase.prototype, "openedStream", void 0);
563
+ __decorate([
564
+ Output('closed'),
565
+ __metadata("design:type", EventEmitter)
566
+ ], MatDatepickerBase.prototype, "closedStream", void 0);
567
+ __decorate([
568
+ Input(),
569
+ __metadata("design:type", Boolean),
570
+ __metadata("design:paramtypes", [Boolean])
571
+ ], MatDatepickerBase.prototype, "opened", null);
572
+ MatDatepickerBase = __decorate([
573
+ __param(4, Inject(MAT_DATEPICKER_SCROLL_STRATEGY)),
574
+ __param(5, Optional()),
575
+ __param(6, Optional()),
576
+ __param(7, Optional()), __param(7, Inject(DOCUMENT)),
577
+ __metadata("design:paramtypes", [MatDialog,
578
+ Overlay,
579
+ NgZone,
580
+ ViewContainerRef, Object, DateAdapter,
581
+ Directionality, Object, MatDateSelectionModel])
582
+ ], MatDatepickerBase);
583
+ return MatDatepickerBase;
584
+ }());
585
+ export { MatDatepickerBase };
586
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci1iYXNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdpcGlzaXN0ZW1hcy9uZy1jb3JlLyIsInNvdXJjZXMiOlsic2hhcmVkL2dpcGktY29tcG9uZW50cy9kYXRlcGlja2VyL21hdC1kYXRlcGlja2VyL2RhdGVwaWNrZXItYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7O0FBRUgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFxQyxPQUFPLEVBQUUsYUFBYSxHQUErQixNQUFNLHNCQUFzQixDQUFDO0FBQzlILE9BQU8sRUFBRSxlQUFlLEVBQWlCLE1BQU0scUJBQXFCLENBQUM7QUFDckUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ULE9BQU8sRUFBMEIsVUFBVSxHQUFpQixNQUFNLHdCQUF3QixDQUFDO0FBQzNGLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDbkUsT0FBTyxFQUFFLEtBQUssRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMs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eXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7IERpcmVjdGlvbmFsaXR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHsgRVNDQVBFLCBVUF9BUlJPVyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3ksIE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlSZWYsIFNjcm9sbFN0cmF0ZWd5LCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCwgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbXBvbmVudFJlZiwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5qZWN0aW9uVG9rZW4sIElucHV0LCBOZ1pvbmUsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPcHRpb25hbCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2FuQ29sb3IsIENhbkNvbG9yQ3RvciwgbWl4aW5Db2xvciwgVGhlbWVQYWxldHRlLCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWF0Q2FsZW5kYXIgfSBmcm9tICcuL2NhbGVuZGFyJztcbmltcG9ydCB7IE1hdENhbGVuZGFyQ2VsbENsYXNzRnVuY3Rpb24sIE1hdENhbGVuZGFyVXNlckV2ZW50IH0gZnJvbSAnLi9jYWxlbmRhci1ib2R5JztcbmltcG9ydCB7IE1BVF9EQVRFX1JBTkdFX1NFTEVDVElPTl9TVFJBVEVHWSwgTWF0RGF0ZVJhbmdlU2VsZWN0aW9uU3RyYXRlZ3ksIH0gZnJvbSAnLi9kYXRlLXJhbmdlLXNlbGVjdGlvbi1zdHJhdGVneSc7XG5pbXBvcnQgeyBEYXRlUmFuZ2UsIEV4dHJhY3REYXRlVHlwZUZyb21TZWxlY3Rpb24sIE1hdERhdGVTZWxlY3Rpb25Nb2RlbCwgfSBmcm9tICcuL2RhdGUtc2VsZWN0aW9uLW1vZGVsJztcbmltcG9ydCB7IG1hdERhdGVwaWNrZXJBbmltYXRpb25zIH0gZnJvbSAnLi9kYXRlcGlja2VyLWFuaW1hdGlvbnMnO1xuaW1wb3J0IHsgY3JlYXRlTWlzc2luZ0RhdGVJbXBsRXJyb3IgfSBmcm9tICcuL2RhdGVwaWNrZXItZXJyb3JzJztcbmltcG9ydCB7IERhdGVGaWx0ZXJGbiB9IGZyb20gJy4vZGF0ZXBpY2tlci1pbnB1dC1iYXNlJztcbmltcG9ydCB7IERhdGVBZGFwdGVyIH0gZnJvbSAnLi9zaGFyZWQvYWRhcHRlci9kYXRlLWFkYXB0ZXInO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcblxuLyoqIFVzZWQgdG8gZ2VuZXJhdGUgYSB1bmlxdWUgSUQgZm9yIGVhY2ggZGF0ZXBpY2tlciBpbnN0YW5jZS4gKi9cbmxldCBkYXRlcGlja2VyVWlkID0gMDtcblxuLyoqIEluamVjdGlvbiB0b2tlbiB0aGF0IGRldGVybWluZXMgdGhlIHNjcm9sbCBoYW5kbGluZyB3aGlsZSB0aGUgY2FsZW5kYXIgaXMgb3Blbi4gKi9cbmV4cG9ydCBjb25zdCBNQVRfREFURVBJQ0tFUl9TQ1JPTExfU1RSQVRFR1kgPSBuZXcgSW5qZWN0aW9uVG9rZW48KCkgPT4gU2Nyb2xsU3RyYXRlZ3k+KCdtYXQtZGF0ZXBpY2tlci1zY3JvbGwtc3RyYXRlZ3knKTtcblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBNQVRfREFURVBJQ0tFUl9TQ1JPTExfU1RSQVRFR1lfRkFDVE9SWShvdmVybGF5OiBPdmVybGF5KTogKCkgPT4gU2Nyb2xsU3RyYXRlZ3kge1xuICAgIHJldHVybiAoKSA9PiBvdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpO1xufVxuXG4vKiogUG9zc2libGUgcG9zaXRpb25zIGZvciB0aGUgZGF0ZXBpY2tlciBkcm9wZG93biBhbG9uZyB0aGUgWCBheGlzLiAqL1xuZXhwb3J0IHR5cGUgRGF0ZXBpY2tlckRyb3Bkb3duUG9zaXRpb25YID0gJ3N0YXJ0JyB8ICdlbmQnO1xuXG4vKiogUG9zc2libGUgcG9zaXRpb25zIGZvciB0aGUgZGF0ZXBpY2tlciBkcm9wZG93biBhbG9uZyB0aGUgWSBheGlzLiAqL1xuZXhwb3J0IHR5cGUgRGF0ZXBpY2tlckRyb3Bkb3duUG9zaXRpb25ZID0gJ2Fib3ZlJyB8ICdiZWxvdyc7XG5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5leHBvcnQgY29uc3QgTUFUX0RBVEVQSUNLRVJfU0NST0xMX1NUUkFURUdZX0ZBQ1RPUllfUFJPVklERVIgPSB7XG4gICAgcHJvdmlkZTogTUFUX0RBVEVQSUNLRVJfU0NST0xMX1NUUkFURUdZLFxuICAgIGRlcHM6IFtPdmVybGF5XSxcbiAgICB1c2VGYWN0b3J5OiBNQVRfREFURVBJQ0tFUl9TQ1JPTExfU1RSQVRFR1lfRkFDVE9SWSxcbn07XG5cbi8vIEJvaWxlcnBsYXRlIGZvciBhcHBseWluZyBtaXhpbnMgdG8gTWF0RGF0ZXBpY2tlckNvbnRlbnQuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuY2xhc3MgTWF0RGF0ZXBpY2tlckNvbnRlbnRCYXNlIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHsgfVxufVxuXG5jb25zdCBfTWF0RGF0ZXBpY2tlckNvbnRlbnRNaXhpbkJhc2U6IENhbkNvbG9yQ3RvciAmIHR5cGVvZiBNYXREYXRlcGlja2VyQ29udGVudEJhc2UgPSBtaXhpbkNvbG9yKE1hdERhdGVwaWNrZXJDb250ZW50QmFzZSk7XG5cbi8qKlxuICogQ29tcG9uZW50IHVzZWQgYXMgdGhlIGNvbnRlbnQgZm9yIHRoZSBkYXRlcGlja2VyIGRpYWxvZyBhbmQgcG9wdXAuIFdlIHVzZSB0aGlzIGluc3RlYWQgb2YgdXNpbmdcbiAqIE1hdENhbGVuZGFyIGRpcmVjdGx5IGFzIHRoZSBjb250ZW50IHNvIHdlIGNhbiBjb250cm9sIHRoZSBpbml0aWFsIGZvY3VzLiBUaGlzIGFsc28gZ2l2ZXMgdXMgYVxuICogcGxhY2UgdG8gcHV0IGFkZGl0aW9uYWwgZmVhdHVyZXMgb2YgdGhlIHBvcHVwIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBjYWxlbmRhciBpdHNlbGYgaW4gdGhlXG4gKiBmdXR1cmUuIChlLmcuIGNvbmZpcm1hdGlvbiBidXR0b25zKS5cbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdnaXBpLW1hdC1kYXRlcGlja2VyLWNvbnRlbnQnLFxuICAgIHRlbXBsYXRlVXJsOiAnZGF0ZXBpY2tlci1jb250ZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydkYXRlcGlja2VyLWNvbnRlbnQuc2NzcyddLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ2NsYXNzJzogJ21hdC1kYXRlcGlja2VyLWNvbnRlbnQnLFxuICAgICAgICAnW0B0cmFuc2Zvcm1QYW5lbF0nOiAnX2FuaW1hdGlvblN0YXRlJyxcbiAgICAgICAgJyhAdHJhbnNmb3JtUGFuZWwuZG9uZSknOiAnX2FuaW1hdGlvbkRvbmUubmV4dCgpJyxcbiAgICAgICAgJ1tjbGFzcy5tYXQtZGF0ZXBpY2tlci1jb250ZW50LXRvdWNoXSc6ICdkYXRlcGlja2VyLnRvdWNoVWknLFxuICAgIH0sXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICBtYXREYXRlcGlja2VyQW5pbWF0aW9ucy50cmFuc2Zvcm1QYW5lbCxcbiAgICAgICAgbWF0RGF0ZXBpY2tlckFuaW1hdGlvbnMuZmFkZUluQ2FsZW5kYXIsXG4gICAgXSxcbiAgICBleHBvcnRBczogJ2dpcGlNYXREYXRlcGlja2VyQ29udGVudCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBpbnB1dHM6IFsnY29sb3InXSxcbn0pXG5leHBvcnQgY2xhc3MgTWF0RGF0ZXBpY2tlckNvbnRlbnQ8UywgRCA9IEV4dHJhY3REYXRlVHlwZUZyb21TZWxlY3Rpb248Uz4+IGV4dGVuZHMgX01hdERhdGVwaWNrZXJDb250ZW50TWl4aW5CYXNlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDYW5Db2xvciB7XG5cbiAgICBwcml2YXRlIF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIFJlZmVyZW5jZSB0byB0aGUgaW50ZXJuYWwgY2FsZW5kYXIgY29tcG9uZW50LiAqL1xuICAgIEBWaWV3Q2hpbGQoTWF0Q2FsZW5kYXIsIHsgc3RhdGljOiB0cnVlIH0pIF9jYWxlbmRhcjogTWF0Q2FsZW5kYXI8RD47XG5cbiAgICAvKiogUmVmZXJlbmNlIHRvIHRoZSBkYXRlcGlja2VyIHRoYXQgY3JlYXRlZCB0aGUgb3ZlcmxheS4gKi9cbiAgICBkYXRlcGlja2VyOiBNYXREYXRlcGlja2VyQmFzZTxhbnksIFMsIEQ+O1xuXG4gICAgLyoqIFN0YXJ0IG9mIHRoZSBjb21wYXJpc29uIHJhbmdlLiAqL1xuICAgIGNvbXBhcmlzb25TdGFydDogRCB8IG51bGw7XG5cbiAgICAvKiogRW5kIG9mIHRoZSBjb21wYXJpc29uIHJhbmdlLiAqL1xuICAgIGNvbXBhcmlzb25FbmQ6IEQgfCBudWxsO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGRhdGVwaWNrZXIgaXMgYWJvdmUgb3IgYmVsb3cgdGhlIGlucHV0LiAqL1xuICAgIF9pc0Fib3ZlOiBib29sZWFuO1xuXG4gICAgLyoqIEN1cnJlbnQgc3RhdGUgb2YgdGhlIGFuaW1hdGlvbi4gKi9cbiAgICBfYW5pbWF0aW9uU3RhdGU6ICdlbnRlcicgfCAndm9pZCcgPSAnZW50ZXInO1xuXG4gICAgLyoqIEVtaXRzIHdoZW4gYW4gYW5pbWF0aW9uIGhhcyBmaW5pc2hlZC4gKi9cbiAgICBfYW5pbWF0aW9uRG9uZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBkZXByZWNhdGVkIGBfY2hhbmdlRGV0ZWN0b3JSZWZgLCBgX21vZGVsYCBhbmQgYF9yYW5nZVNlbGVjdGlvblN0cmF0ZWd5YFxuICAgICAgICAgKiBwYXJhbWV0ZXJzIHRvIGJlY29tZSByZXF1aXJlZC5cbiAgICAgICAgICogQGJyZWFraW5nLWNoYW5nZSAxMS4wLjBcbiAgICAgICAgICovXG4gICAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmPzogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgX21vZGVsPzogTWF0RGF0ZVNlbGVjdGlvbk1vZGVsPFMsIEQ+LFxuICAgICAgICBwcml2YXRlIF9kYXRlQWRhcHRlcj86IERhdGVBZGFwdGVyPEQ+LFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1BVF9EQVRFX1JBTkdFX1NFTEVDVElPTl9TVFJBVEVHWSlcbiAgICAgICAgcHJpdmF0ZSBfcmFuZ2VTZWxlY3Rpb25TdHJhdGVneT86IE1hdERhdGVSYW5nZVNlbGVjdGlvblN0cmF0ZWd5PEQ+XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnRSZWYpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgLy8gQGJyZWFraW5nLWNoYW5nZSAxMS4wLjAgUmVtb3ZlIG51bGwgY2hlY2sgZm9yIGBfY2hhbmdlRGV0ZWN0b3JSZWYuXG4gICAgICAgIGlmICh0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZikge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5kYXRlcGlja2VyLl9zdGF0ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZiEubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jYWxlbmRhci5mb2N1c0FjdGl2ZUNlbGwoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9hbmltYXRpb25Eb25lLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgX2hhbmRsZVVzZXJTZWxlY3Rpb24oZXZlbnQ6IE1hdENhbGVuZGFyVXNlckV2ZW50PEQgfCBudWxsPikge1xuICAgICAgICAvLyBAYnJlYWtpbmctY2hhbmdlIDExLjAuMCBSZW1vdmUgbnVsbCBjaGVja3MgZm9yIF9tb2RlbCxcbiAgICAgICAgLy8gX3JhbmdlU2VsZWN0aW9uU3RyYXRlZ3kgYW5kIF9kYXRlQWRhcHRlci5cbiAgICAgICAgaWYgKHRoaXMuX21vZGVsICYmIHRoaXMuX2RhdGVBZGFwdGVyKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLl9tb2RlbC5zZWxlY3Rpb247XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgaXNSYW5nZSA9IHNlbGVjdGlvbiBpbnN0YW5jZW9mIERhdGVSYW5nZTtcblxuICAgICAgICAgICAgLy8gSWYgd2UncmUgc2VsZWN0aW5nIGEgcmFuZ2UgYW5kIHdlIGhhdmUgYSBzZWxlY3Rpb24gc3RyYXRlZ3ksIGFsd2F5cyBwYXNzIHRoZSB2YWx1ZSB0aHJvdWdoXG4gICAgICAgICAgICAvLyB0aGVyZS4gT3RoZXJ3aXNlIGRvbid0IGFzc2lnbiBudWxsIHZhbHVlcyB0byB0aGUgbW9kZWwsIHVubGVzcyB3ZSdyZSBzZWxlY3RpbmcgYSByYW5nZS5cbiAgICAgICAgICAgIC8vIEEgbnVsbCB2YWx1ZSB3aGVuIHBpY2tpbmcgYSByYW5nZSBtZWFucyB0aGF0IHRoZSB1c2VyIGNhbmNlbGxlZCB0aGUgc2VsZWN0aW9uIChlLmcuIGJ5XG4gICAgICAgICAgICAvLyBwcmVzc2luZyBlc2NhcGUpLCB3aGVyZWFzIHdoZW4gc2VsZWN0aW5nIGEgc2luZ2xlIHZhbHVlIGl0IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGRpZG4ndFxuICAgICAgICAgICAgLy8gY2hhbmdlLiBUaGlzIGlzbid0IHZlcnkgaW50dWl0aXZlLCBidXQgaXQncyBoZXJlIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eS5cbiAgICAgICAgICAgIGlmIChpc1JhbmdlICYmIHRoaXMuX3JhbmdlU2VsZWN0aW9uU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLl9yYW5nZVNlbGVjdGlvblN0cmF0ZWd5LnNlbGVjdGlvbkZpbmlzaGVkKHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24gYXMgdW5rbm93biBhcyBEYXRlUmFuZ2U8RD4sIGV2ZW50LmV2ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbC51cGRhdGVTZWxlY3Rpb24obmV3U2VsZWN0aW9uIGFzIHVua25vd24gYXMgUywgdGhpcyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICYmIChpc1JhbmdlIHx8XG4gICAgICAgICAgICAgICAgIXRoaXMuX2RhdGVBZGFwdGVyLnNhbWVEYXRlKHZhbHVlLCBzZWxlY3Rpb24gYXMgdW5rbm93biBhcyBEKSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbC5hZGQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9tb2RlbCB8fCB0aGlzLl9tb2RlbC5pc0NvbXBsZXRlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZXBpY2tlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3N0YXJ0RXhpdEFuaW1hdGlvbigpIHtcbiAgICAgICAgdGhpcy5fYW5pbWF0aW9uU3RhdGUgPSAndm9pZCc7XG5cbiAgICAgICAgLy8gQGJyZWFraW5nLWNoYW5nZSAxMS4wLjAgUmVtb3ZlIG51bGwgY2hlY2sgZm9yIGBfY2hhbmdlRGV0ZWN0b3JSZWZgLlxuICAgICAgICBpZiAodGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2dldFNlbGVjdGVkKCkge1xuICAgICAgICAvLyBAYnJlYWtpbmctY2hhbmdlIDExLjAuMCBSZW1vdmUgbnVsbCBjaGVjayBmb3IgYF9tb2RlbGAuXG4gICAgICAgIHJldHVybiB0aGlzLl9tb2RlbCA/IHRoaXMuX21vZGVsLnNlbGVjdGlvbiBhcyB1bmtub3duIGFzIEQgfCBEYXRlUmFuZ2U8RD4gfCBudWxsIDogbnVsbDtcbiAgICB9XG59XG5cbi8qKiBGb3JtIGNvbnRyb2wgdGhhdCBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGEgZGF0ZXBpY2tlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWF0RGF0ZXBpY2tlckNvbnRyb2w8RD4ge1xuICAgIGdldFN0YXJ0VmFsdWUoKTogRCB8IG51bGw7XG4gICAgZ2V0VGhlbWVQYWxldHRlKCk6IFRoZW1lUGFsZXR0ZTtcbiAgICBtaW46IEQgfCBudWxsO1xuICAgIG1heDogRCB8IG51bGw7XG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgZGF0ZUZpbHRlcjogRGF0ZUZpbHRlckZuPEQ+O1xuICAgIGdldENvbm5lY3RlZE92ZXJsYXlPcmlnaW4oKTogRWxlbWVudFJlZjtcbiAgICBzdGF0ZUNoYW5nZXM6IE9ic2VydmFibGU8dm9pZD47XG59XG5cbi8qKiBCYXNlIGNsYXNzIGZvciBhIGRhdGVwaWNrZXIuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTWF0RGF0ZXBpY2tlckJhc2U8QyBleHRlbmRzIE1hdERhdGVwaWNrZXJDb250cm9sPEQ+LCBTLCBEID0gYW55PiBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcblxuICAgIHByaXZhdGUgX3Njcm9sbFN0cmF0ZWd5OiAoKSA9PiBTY3JvbGxTdHJhdGVneTtcbiAgICBwcml2YXRlIF9pbnB1dFN0YXRlQ2hhbmdlcyA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcblxuICAgIEBJbnB1dCgpIHRlbXBsYXRlUHJlc2V0UmFuZ2U6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogVGhlIGRhdGUgdG8gb3BlbiB0aGUgY2FsZW5kYXIgdG8gaW5pdGlhbGx5LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHN0YXJ0QXQoKTogRCB8IG51bGwge1xuICAgICAgICAvLyBJZiBhbiBleHBsaWNpdCBzdGFydEF0IGlzIHNldCB3ZSBzdGFydCB0aGVyZSwgb3RoZXJ3aXNlIHdlIHN0YXJ0IGF0IHdoYXRldmVyIHRoZSBjdXJyZW50bHlcbiAgICAgICAgLy8gc2VsZWN0ZWQgdmFsdWUgaXMuXG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFydEF0IHx8ICh0aGlzLl9kYXRlcGlja2VySW5wdXQgPyB0aGlzLl9kYXRlcGlja2VySW5wdXQuZ2V0U3RhcnRWYWx1ZSgpIDogbnVsbCk7XG4gICAgfVxuICAgIHNldCBzdGFydEF0KHZhbHVlOiBEIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9zdGFydEF0ID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XG4gICAgfVxuICAgIHByaXZhdGUgX3N0YXJ0QXQ6IEQgfCBudWxsO1xuXG4gICAgLyoqIFRoZSB2aWV3IHRoYXQgdGhlIGNhbGVuZGFyIHNob3VsZCBzdGFydCBpbi4gKi9cbiAgICBASW5wdXQoKSBzdGFydFZpZXc6ICdtb250aCcgfCAneWVhcicgfCAnbXVsdGkteWVhcicgPSAnbW9udGgnO1xuXG4gICAgLyoqIENvbG9yIHBhbGV0dGUgdG8gdXNlIG9uIHRoZSBkYXRlcGlja2VyJ3MgY2FsZW5kYXIuICovXG4gICAgQElucHV0KClcbiAgICBnZXQgY29sb3IoKTogVGhlbWVQYWxldHRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbG9yIHx8ICh0aGlzLl9kYXRlcGlja2VySW5wdXQgPyB0aGlzLl9kYXRlcGlja2VySW5wdXQuZ2V0VGhlbWVQYWxldHRlKCkgOiB1bmRlZmluZWQpO1xuICAgIH1cbiAgICBzZXQgY29sb3IodmFsdWU6IFRoZW1lUGFsZXR0ZSkge1xuICAgICAgICB0aGlzLl9jb2xvciA9IHZhbHVlO1xuICAgIH1cbiAgICBfY29sb3I6IFRoZW1lUGFsZXR0ZTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGNhbGVuZGFyIFVJIGlzIGluIHRvdWNoIG1vZGUuIEluIHRvdWNoIG1vZGUgdGhlIGNhbGVuZGFyIG9wZW5zIGluIGEgZGlhbG9nIHJhdGhlclxuICAgICAqIHRoYW4gYSBwb3B1cCBhbmQgZWxlbWVudHMgaGF2ZSBtb3JlIHBhZGRpbmcgdG8gYWxsb3cgZm9yIGJpZ2dlciB0b3VjaCB0YXJnZXRzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHRvdWNoVWkoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl90b3VjaFVpOyB9XG4gICAgc2V0IHRvdWNoVWkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fdG91Y2hVaSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX3RvdWNoVWkgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBkYXRlcGlja2VyIHBvcC11cCBzaG91bGQgYmUgZGlzYWJsZWQuICovXG4gICAgQElucHV0KClcbiAgICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZCA9PT0gdW5kZWZpbmVkICYmIHRoaXMuX2RhdGVwaWNrZXJJbnB1dCA/XG4gICAgICAgICAgICB0aGlzLl9kYXRlcGlja2VySW5wdXQuZGlzYWJsZWQgOiAhIXRoaXMuX2Rpc2FibGVkO1xuICAgIH1cbiAgICBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuXG4gICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gdGhpcy5fZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVkID0gbmV3VmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuO1xuXG4gICAgLyoqIFByZWZlcnJlZCBwb3NpdGlvbiBvZiB0aGUgZGF0ZXBpY2tlciBpbiB0aGUgWCBheGlzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgeFBvc2l0aW9uOiBEYXRlcGlja2VyRHJvcGRvd25Qb3NpdGlvblggPSAnc3RhcnQnO1xuXG4gICAgLyoqIFByZWZlcnJlZCBwb3NpdGlvbiBvZiB0aGUgZGF0ZXBpY2tlciBpbiB0aGUgWSBheGlzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgeVBvc2l0aW9uOiBEYXRlcGlja2VyRHJvcGRvd25Qb3NpdGlvblkgPSAnYmVsb3cnO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgc2VsZWN0ZWQgeWVhciBpbiBtdWx0aXllYXIgdmlldy5cbiAgICAgKiBUaGlzIGRvZXNuJ3QgaW1wbHkgYSBjaGFuZ2Ugb24gdGhlIHNlbGVjdGVkIGRhdGUuXG4gICAgICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHllYXJTZWxlY3RlZDogRXZlbnRFbWl0dGVyPEQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxEPigpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgc2VsZWN0ZWQgbW9udGggaW4geWVhciB2aWV3LlxuICAgICAqIFRoaXMgZG9lc24ndCBpbXBseSBhIGNoYW5nZSBvbiB0aGUgc2VsZWN0ZWQgZGF0ZS5cbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgbW9udGhTZWxlY3RlZDogRXZlbnRFbWl0dGVyPEQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxEPigpO1xuXG4gICAgLyoqIENsYXNzZXMgdG8gYmUgcGFzc2VkIHRvIHRoZSBkYXRlIHBpY2tlciBwYW5lbC4gU3VwcG9ydHMgdGhlIHNhbWUgc3ludGF4IGFzIGBuZ0NsYXNzYC4gKi9cbiAgICBASW5wdXQoKSBwYW5lbENsYXNzOiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAgIC8qKiBGdW5jdGlvbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGFkZCBjdXN0b20gQ1NTIGNsYXNzZXMgdG8gZGF0ZXMuICovXG4gICAgQElucHV0KCkgZGF0ZUNsYXNzOiBNYXRDYWxlbmRhckNlbGxDbGFzc0Z1bmN0aW9uPEQ+O1xuXG4gICAgLyoqIEVtaXRzIHdoZW4gdGhlIGRhdGVwaWNrZXIgaGFzIGJlZW4gb3BlbmVkLiAqL1xuICAgIEBPdXRwdXQoJ29wZW5lZCcpIG9wZW5lZFN0cmVhbTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEVtaXRzIHdoZW4gdGhlIGRhdGVwaWNrZXIgaGFzIGJlZW4gY2xvc2VkLiAqL1xuICAgIEBPdXRwdXQoJ2Nsb3NlZCcpIGNsb3NlZFN0cmVhbTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG5cbiAgICAvKiogV2hldGhlciB0aGUgY2FsZW5kYXIgaXMgb3Blbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBvcGVuZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9vcGVuZWQ7IH1cbiAgICBzZXQgb3BlbmVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSkgPyB0aGlzLm9wZW4oKSA6IHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfb3BlbmVkID0gZmFsc2U7XG5cbiAgICAvKiogVGhlIGlkIGZvciB0aGUgZGF0ZXBpY2tlciBjYWxlbmRhci4gKi9cbiAgICBpZDogc3RyaW5nID0gYG1hdC1kYXRlcGlja2VyLSR7ZGF0ZXBpY2tlclVpZCsrfWA7XG5cbiAgICAvKiogVGhlIG1pbmltdW0gc2VsZWN0YWJsZSBkYXRlLiAqL1xuICAgIF9nZXRNaW5EYXRlKCk6IEQgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVwaWNrZXJJbnB1dCAmJiB0aGlzLl9kYXRlcGlja2VySW5wdXQubWluO1xuICAgIH1cblxuICAgIC8qKiBUaGUgbWF4aW11bSBzZWxlY3RhYmxlIGRhdGUuICovXG4gICAgX2dldE1heERhdGUoKTogRCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZXBpY2tlcklucHV0ICYmIHRoaXMuX2RhdGVwaWNrZXJJbnB1dC5tYXg7XG4gICAgfVxuXG4gICAgX2dldERhdGVGaWx0ZXIoKTogRGF0ZUZpbHRlckZuPEQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVwaWNrZXJJbnB1dCAmJiB0aGlzLl9kYXRlcGlja2VySW5wdXQuZGF0ZUZpbHRlcjtcbiAgICB9XG5cbiAgICAvKiogQSByZWZlcmVuY2UgdG8gdGhlIG92ZXJsYXkgd2hlbiB0aGUgY2FsZW5kYXIgaXMgb3BlbmVkIGFzIGEgcG9wdXAuICovXG4gICAgcHJpdmF0ZSBfcG9wdXBSZWY6IE92ZXJsYXlSZWYgfCBudWxsO1xuXG4gICAgLyoqIEEgcmVmZXJlbmNlIHRvIHRoZSBkaWFsb2cgd2hlbiB0aGUgY2FsZW5kYXIgaXMgb3BlbmVkIGFzIGEgZGlhbG9nLiAqL1xuICAgIHByaXZhdGUgX2RpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPE1hdERhdGVwaWNrZXJDb250ZW50PFMsIEQ+PiB8IG51bGw7XG5cbiAgICAvKiogUmVmZXJlbmNlIHRvIHRoZSBjb21wb25lbnQgaW5zdGFudGlhdGVkIGluIHBvcHVwIG1vZGUuICovXG4gICAgcHJpdmF0ZSBfcG9wdXBDb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxNYXREYXRlcGlja2VyQ29udGVudDxTLCBEPj4gfCBudWxsO1xuXG4gICAgLyoqIFRoZSBlbGVtZW50IHRoYXQgd2FzIGZvY3VzZWQgYmVmb3JlIHRoZSBkYXRlcGlja2VyIHdhcyBvcGVuZWQuICovXG4gICAgcHJpdmF0ZSBfZm9jdXNlZEVsZW1lbnRCZWZvcmVPcGVuOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIFVuaXF1ZSBjbGFzcyB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGJhY2tkcm9wIHNvIHRoYXQgdGhlIHRlc3QgaGFybmVzc2VzIGNhbiBsb29rIGl0IHVwLiAqL1xuICAgIHByaXZhdGUgX2JhY2tkcm9wSGFybmVzc0NsYXNzID0gYCR7dGhpcy5pZH0tYmFja2Ryb3BgO1xuXG4gICAgLyoqIFRoZSBpbnB1dCBlbGVtZW50IHRoaXMgZGF0ZXBpY2tlciBpcyBhc3NvY2lhdGVkIHdpdGguICovXG4gICAgX2RhdGVwaWNrZXJJbnB1dDogQztcblxuICAgIC8qKiBFbWl0cyB3aGVuIHRoZSBkYXRlcGlja2VyJ3Mgc3RhdGUgY2hhbmdlcy4gKi9cbiAgICByZWFkb25seSBfc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgcHJpdmF0ZSBfb3ZlcmxheTogT3ZlcmxheSxcbiAgICAgICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIEBJbmplY3QoTUFUX0RBVEVQSUNLRVJfU0NST0xMX1NUUkFURUdZKSBzY3JvbGxTdHJhdGVneTogYW55LFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9kYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8RD4sXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgX2RpcjogRGlyZWN0aW9uYWxpdHksXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBhbnksXG4gICAgICAgIHByaXZhdGUgX21vZGVsOiBNYXREYXRlU2VsZWN0aW9uTW9kZWw8UywgRD5cbiAgICApIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRlQWRhcHRlcikge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlTWlzc2luZ0RhdGVJbXBsRXJyb3IoJ0RhdGVBZGFwdGVyJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zY3JvbGxTdHJhdGVneSA9IHNjcm9sbFN0cmF0ZWd5O1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb25DaGFuZ2UgPSBjaGFuZ2VzWyd4UG9zaXRpb24nXSB8fCBjaGFuZ2VzWyd5UG9zaXRpb24nXTtcblxuICAgICAgICBpZiAocG9zaXRpb25DaGFuZ2UgJiYgIXBvc2l0aW9uQ2hhbmdlLmZpcnN0Q2hhbmdlICYmIHRoaXMuX3BvcHVwUmVmKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRDb25uZWN0ZWRQb3NpdGlvbnModGhpcy5fcG9wdXBSZWYuZ2V0Q29uZmlnKCkucG9zaXRpb25TdHJhdGVneSBhcyBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wb3B1cFJlZi51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3RhdGVDaGFuZ2VzLm5leHQodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveVBvcHVwKCk7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5faW5wdXRTdGF0ZUNoYW5nZXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdHMgdGhlIGdpdmVuIGRhdGUgKi9cbiAgICBzZWxlY3QoZGF0ZTogRCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9tb2RlbC5hZGQoZGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIEVtaXRzIHRoZSBzZWxlY3RlZCB5ZWFyIGluIG11bHRpeWVhciB2aWV3ICovXG4gICAgX3NlbGVjdFllYXIobm9ybWFsaXplZFllYXI6IEQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy55ZWFyU2VsZWN0ZWQuZW1pdChub3JtYWxpemVkWWVhcik7XG4gICAgfVxuXG4gICAgLyoqIEVtaXRzIHNlbGVjdGVkIG1vbnRoIGluIHllYXIgdmlldyAqL1xuICAgIF9zZWxlY3RNb250aChub3JtYWxpemVkTW9udGg6IEQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb250aFNlbGVjdGVkLmVtaXQobm9ybWFsaXplZE1vbnRoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciBhbiBpbnB1dCB3aXRoIHRoaXMgZGF0ZXBpY2tlci5cbiAgICAgKiBAcGFyYW0gaW5wdXQgVGhlIGRhdGVwaWNrZXIgaW5wdXQgdG8gcmVnaXN0ZXIgd2l0aCB0aGlzIGRhdGVwaWNrZXIuXG4gICAgICogQHJldHVybnMgU2VsZWN0aW9uIG1vZGVsIHRoYXQgdGhlIGlucHV0IHNob3VsZCBob29rIGl0c2VsZiB1cCB0by5cbiAgICAgKi9cbiAgICBfcmVnaXN0ZXJJbnB1dChpbnB1dDogQyk6IE1hdERhdGVTZWxlY3Rpb25Nb2RlbDxTLCBEPiB7XG4gICAgICAgIGlmICh0aGlzLl9kYXRlcGlja2VySW5wdXQpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdBIE1hdERhdGVwaWNrZXIgY2FuIG9ubHkgYmUgYXNzb2NpYXRlZCB3aXRoIGEgc2luZ2xlIGlucHV0LicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lucHV0U3RhdGVDaGFuZ2VzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2RhdGVwaWNrZXJJbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9pbnB1dFN0YXRlQ2hhbmdlcyA9IGlucHV0LnN0YXRlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fc3RhdGVDaGFuZ2VzLm5leHQodW5kZWZpbmVkKSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb2RlbDtcbiAgICB9XG5cbiAgICAvKiogT3BlbiB0aGUgY2FsZW5kYXIuICovXG4gICAgb3BlbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX29wZW5lZCB8fCB0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9kYXRlcGlja2VySW5wdXQpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCdBdHRlbXB0ZWQgdG8gb3BlbiBhbiBNYXREYXRlcGlja2VyIHdpdGggbm8gYXNzb2NpYXRlZCBpbnB1dC4nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZG9jdW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2ZvY3VzZWRFbGVtZW50QmVmb3JlT3BlbiA9IHRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvdWNoVWkgPyB0aGlzLl9vcGVuQXNEaWFsb2coKSA6IHRoaXMuX29wZW5Bc1BvcHVwKCk7XG4gICAgICAgIHRoaXMuX29wZW5lZCA9IHRydWU7XG4gICAgICAgIHRoaXMub3BlbmVkU3RyZWFtLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQ2xvc2UgdGhlIGNhbGVuZGFyLiAqL1xuICAgIGNsb3NlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX29wZW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9wb3B1cENvbXBvbmVudFJlZiAmJiB0aGlzLl9wb3B1cFJlZikge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLl9wb3B1cENvbXBvbmVudFJlZi5pbnN0YW5jZTtcbiAgICAgICAgICAgIGluc3RhbmNlLl9zdGFydEV4aXRBbmltYXRpb24oKTtcbiAgICAgICAgICAgIGluc3RhbmNlLl9hbmltYXRpb25Eb25lLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2Rlc3Ryb3lQb3B1cCgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZGlhbG9nUmVmKSB7XG4gICAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZiA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb21wbGV0ZUNsb3NlID0gKCkgPT4ge1xuICAgICAgICAgICAgLy8gVGhlIGBfb3BlbmVkYCBjb3VsZCd2ZSBiZWVuIHJlc2V0IGFscmVhZHkgaWZcbiAgICAgICAgICAgIC8vIHdlIGdvdCB0d28gZXZlbnRzIGluIHF1aWNrIHN1Y2Nlc3Npb24uXG4gICAgICAgICAgICBpZiAodGhpcy5fb3BlbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZWRTdHJlYW0uZW1pdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZvY3VzZWRFbGVtZW50QmVmb3JlT3BlbiA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMuX2ZvY3VzZWRFbGVtZW50QmVmb3JlT3BlbiAmJlxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuX2ZvY3VzZWRFbGVtZW50QmVmb3JlT3Blbi5mb2N1cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgLy8gQmVjYXVzZSBJRSBtb3ZlcyBmb2N1cyBhc3luY2hyb25vdXNseSwgd2UgY2FuJ3QgY291bnQgb24gaXQgYmVpbmcgcmVzdG9yZWQgYmVmb3JlIHdlJ3ZlXG4gICAgICAgICAgICAvLyBtYXJrZWQgdGhlIGRhdGVwaWNrZXIgYXMgY2xvc2VkLiBJZiB0aGUgZXZlbnQgZmlyZXMgb3V0IG9mIHNlcXVlbmNlIGFuZCB0aGUgZWxlbWVudCB0aGF0XG4gICAgICAgICAgICAvLyB3ZSdyZSByZWZvY3VzaW5nIG9wZW5zIHRoZSBkYXRlcGlja2VyIG9uIGZvY3VzLCB0aGUgdXNlciBjb3VsZCBiZSBzdHVjayB3aXRoIG5vdCBiZWluZ1xuICAgICAgICAgICAgLy8gYWJsZSB0byBjbG9zZSB0aGUgY2FsZW5kYXIgYXQgYWxsLiBXZSB3b3JrIGFyb3VuZCBpdCBieSBtYWtpbmcgdGhlIGxvZ2ljLCB0aGF0IG1hcmtzXG4gICAgICAgICAgICAvLyB0aGUgZGF0ZXBpY2tlciBhcyBjbG9zZWQsIGFzeW5jIGFzIHdlbGwuXG4gICAgICAgICAgICB0aGlzLl9mb2N1c2VkRWxlbWVudEJlZm9yZU9wZW4uZm9jdXMoKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY29tcGxldGVDbG9zZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb21wbGV0ZUNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogT3BlbiB0aGUgY2FsZW5kYXIgYXMgYSBkaWFsb2cuICovXG4gICAgcHJpdmF0ZSBfb3BlbkFzRGlhbG9nKCk6IHZvaWQge1xuICAgICAgICAvLyBVc3VhbGx5IHRoaXMgd291bGQgYmUgaGFuZGxlZCBieSBgb3BlbmAgd2hpY2ggZW5zdXJlcyB0aGF0IHdlIGNhbiBvbmx5IGhhdmUgb25lIG92ZXJsYXlcbiAgICAgICAgLy8gb3BlbiBhdCBhIHRpbWUsIGhvd2V2ZXIgc2luY2Ugd2UgcmVzZXQgdGhlIHZhcmlhYmxlcyBpbiBhc3luYyBoYW5kbGVycyBzb21lIG92ZXJsYXlzXG4gICAgICAgIC8vIG1heSBzbGlwIHRocm91Z2ggaWYgdGhlIHVzZXIgb3BlbnMgYW5kIGNsb3NlcyBtdWx0aXBsZSB0aW1lcyBpbiBxdWljayBzdWNjZXNzaW9uIChlLmcuXG4gICAgICAgIC8vIGJ5IGhvbGRpbmcgZG93biB0aGUgZW50ZXIga2V5KS5cbiAgICAgICAgaWYgKHRoaXMuX2RpYWxvZ1JlZikge1xuICAgICAgICAgICAgdGhpcy5fZGlhbG9nUmVmLmNsb3NlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kaWFsb2dSZWYgPSB0aGlzLl9kaWFsb2cub3BlbjxNYXREYXRlcGlja2VyQ29udGVudDxTLCBEPj4oTWF0RGF0ZXBpY2tlckNvbnRlbnQsIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbjogdGhpcy5fZGlyID8gdGhpcy5fZGlyLnZhbHVlIDogJ2x0cicsXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmOiB0aGlzLl92aWV3Q29udGFpbmVyUmVmLFxuICAgICAgICAgICAgcGFuZWxDbGFzczogJ21hdC1kYXRlcGlja2VyLWRpYWxvZycsXG5cbiAgICAgICAgICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgYWxsIHRoZSBzYW1lIGFzIHRoZSBkZWZhdWx0cywgYnV0IHdlIHNldCB0aGVtIGV4cGxpY2l0bHkgc28gdGhhdCB0aGVcbiAgICAgICAgICAgIC8vIGRhdGVwaWNrZXIgZGlhbG9nIGJlaGF2ZXMgY29uc2lzdGVudGx5IGV2ZW4gaWYgdGhlIHVzZXIgY2hhbmdlZCB0aGUgZGVmYXVsdHMuXG4gICAgICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXG4gICAgICAgICAgICBiYWNrZHJvcENsYXNzOiBgY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcCwgJHt0aGlzLl9iYWNrZHJvcEhhcm5lc3NDbGFzc31gLFxuICAgICAgICAgICAgd2lkdGg6ICcnLFxuICAgICAgICAgICAgaGVpZ2h0OiAnJyxcbiAgICAgICAgICAgIG1pbldpZHRoOiAnJyxcbiAgICAgICAgICAgIG1pbkhlaWdodDogJycsXG4gICAgICAgICAgICBtYXhXaWR0aDogJzgwdncnLFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiAnJyxcbiAgICAgICAgICAgIHBvc2l0aW9uOiB7fSxcbiAgICAgICAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcblxuICAgICAgICAgICAgLy8gYE1hdERpYWxvZ2AgaGFzIGZvY3VzIHJlc3RvcmF0aW9uIGJ1aWx0IGluLCBob3dldmVyIHdlIHdhbnQgdG8gZGlzYWJsZSBpdCBzaW5jZSB0aGVcbiAgICAgICAgICAgIC8vIGRhdGVwaWNrZXIgYWxzbyBoYXMgZm9jdXMgcmVzdG9yYXRpb24gZm9yIGRyb3Bkb3duIG1vZGUuIFdlIHdhbnQgdG8gZG8gdGhpcywgaW4gb3JkZXJcbiAgICAgICAgICAgIC8vIHRvIGVuc3VyZSB0aGF0IHRoZSB0aW1pbmcgaXMgY29uc2lzdGVudCBiZXR3ZWVuIGRyb3Bkb3duIGFuZCBkaWFsb2cgbW9kZXMgc2luY2UgYE1hdERpYWxvZ2BcbiAgICAgICAgICAgIC8vIHJlc3RvcmVzIGZvY3VzIHdoZW4gdGhlIGFuaW1hdGlvbiBpcyBmaW5pc2hlZCwgYnV0IHRoZSBkYXRlcGlja2VyIGRvZXMgaXQgaW1tZWRpYXRlbHkuXG4gICAgICAgICAgICAvLyBGdXJ0aGVybW9yZSwgdGhpcyBhdm9pZHMgYW55IGNvbmZsaWN0cyB3aGVyZSB0aGUgZGF0ZXBpY2tlciBjb25zdW1lciBtaWdodCBtb3ZlIGZvY3VzXG4gICAgICAgICAgICAvLyBpbnNpZGUgdGhlIGBjbG9zZWRgIGV2ZW50IHdoaWNoIGlzIGRpc3BhdGNoZWQgaW1tZWRpYXRlbHkuXG4gICAgICAgICAgICByZXN0b3JlRm9jdXM6IGZhbHNlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlKCkpO1xuICAgICAgICB0aGlzLl9mb3J3YXJkQ29udGVudFZhbHVlcyh0aGlzLl9kaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UpO1xuICAgIH1cblxuICAgIC8qKiBPcGVuIHRoZSBjYWxlbmRhciBhcyBhIHBvcHVwLiAqL1xuICAgIHByaXZhdGUgX29wZW5Bc1BvcHVwKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsPE1hdERhdGVwaWNrZXJDb250ZW50PFMsIEQ+PihNYXREYXRlcGlja2VyQ29udGVudCwgdGhpcy5fdmlld0NvbnRhaW5lclJlZik7XG5cbiAgICAgICAgdGhpcy5fZGVzdHJveVBvcHVwKCk7XG4gICAgICAgIHRoaXMuX2NyZWF0ZVBvcHVwKCk7XG4gICAgICAgIHRoaXMuX3BvcHVwQ29tcG9uZW50UmVmID0gdGhpcy5fcG9wdXBSZWYhLmF0dGFjaChwb3J0YWwpO1xuICAgICAgICB0aGlzLl9mb3J3YXJkQ29udGVudFZhbHVlcyh0aGlzLl9wb3B1cENvbXBvbmVudFJlZi5pbnN0YW5jZSk7XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvbiBvbmNlIHRoZSBjYWxlbmRhciBoYXMgcmVuZGVyZWQuXG4gICAgICAgIHRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9wb3B1cFJlZiEudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEZvcndhcmRzIHJlbGV2YW50IHZhbHVlcyBmcm9tIHRoZSBkYXRlcGlja2VyIHRvIHRoZSBkYXRlcGlja2VyIGNvbnRlbnQgaW5zaWRlIHRoZSBvdmVybGF5LiAqL1xuICAgIHByb3RlY3RlZCBfZm9yd2FyZENvbnRlbnRWYWx1ZXMoaW5zdGFuY2U6IE1hdERhdGVwaWNrZXJDb250ZW50PFMsIEQ+KSB7XG4gICAgICAgIGluc3RhbmNlLmRhdGVwaWNrZXIgPSB0aGlzO1xuICAgICAgICBpbnN0YW5jZS5jb2xvciA9IHRoaXMuY29sb3I7XG4gICAgfVxuXG4gICAgLyoqIENyZWF0ZSB0aGUgcG9wdXAuICovXG4gICAgcHJpdmF0ZSBfY3JlYXRlUG9wdXAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLl9vdmVybGF5LnBvc2l0aW9uKClcbiAgICAgICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuX2RhdGVwaWNrZXJJbnB1dC5nZXRDb25uZWN0ZWRPdmVybGF5T3JpZ2luKCkpXG4gICAgICAgICAgICAud2l0aFRyYW5zZm9ybU9yaWdpbk9uKCcubWF0LWRhdGVwaWNrZXItY29udGVudCcpXG4gICAgICAgICAgICAud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcbiAgICAgICAgICAgIC53aXRoVmlld3BvcnRNYXJnaW4oOClcbiAgICAgICAgICAgIC53aXRoTG9ja2VkUG9zaXRpb24oKTtcblxuICAgICAgICBjb25zdCBvdmVybGF5Q29uZmlnID0gbmV3IE92ZXJsYXlDb25maWcoe1xuICAgICAgICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5fc2V0Q29ubmVjdGVkUG9zaXRpb25zKHBvc2l0aW9uU3RyYXRlZ3kpLFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICAgICAgICBiYWNrZHJvcENsYXNzOiBbJ21hdC1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wJywgdGhpcy5fYmFja2Ryb3BIYXJuZXNzQ2xhc3NdLFxuICAgICAgICAgICAgZGlyZWN0aW9uOiB0aGlzLl9kaXIsXG4gICAgICAgICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5fc2Nyb2xsU3RyYXRlZ3koKSxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdtYXQtZGF0ZXBpY2tlci1wb3B1cCcsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3BvcHVwUmVmID0gdGhpcy5fb3ZlcmxheS5jcmVhdGUob3ZlcmxheUNvbmZpZyk7XG4gICAgICAgIHRoaXMuX3BvcHVwUmVmLm92ZXJsYXlFbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdkaWFsb2cnKTtcblxuICAgICAgICBtZXJnZShcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwUmVmLmJhY2tkcm9wQ2xpY2soKSxcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwUmVmLmRldGFjaG1lbnRzKCksXG4gICAgICAgICAgICB0aGlzLl9wb3B1cFJlZi5rZXlkb3duRXZlbnRzKCkucGlwZShmaWx0ZXIoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIENsb3Npbmcgb24gYWx0ICsgdXAgaXMgb25seSB2YWxpZCB3aGVuIHRoZXJlJ3MgYW4gaW5wdXQgYXNzb2NpYXRlZCB3aXRoIHRoZSBkYXRlcGlja2VyLlxuICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5rZXlDb2RlID09PSBFU0NBUEUgfHwgKHRoaXMuX2RhdGVwaWNrZXJJbnB1dCAmJiBldmVudC5hbHRLZXkgJiYgZXZlbnQua2V5Q29kZSA9PT0gVVBfQVJST1cpO1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICkuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIERlc3Ryb3lzIHRoZSBjdXJyZW50IHBvcHVwIG92ZXJsYXkuICovXG4gICAgcHJpdmF0ZSBfZGVzdHJveVBvcHVwKCkge1xuICAgICAgICBpZiAodGhpcy5fcG9wdXBSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwUmVmLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwUmVmID0gdGhpcy5fcG9wdXBDb21wb25lbnRSZWYgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFNldHMgdGhlIHBvc2l0aW9ucyBvZiB0aGUgZGF0ZXBpY2tlciBpbiBkcm9wZG93biBtb2RlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uICovXG4gICAgcHJpdmF0ZSBfc2V0Q29ubmVjdGVkUG9zaXRpb25zKHN0cmF0ZWd5OiBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kpIHtcbiAgICAgICAgY29uc3QgcHJpbWFyeVggPSB0aGlzLnhQb3NpdGlvbiA9PT0gJ2VuZCcgPyAnZW5kJyA6ICdzdGFydCc7XG4gICAgICAgIGNvbnN0IHNlY29uZGFyeVggPSBwcmltYXJ5WCA9PT0gJ3N0YXJ0JyA/ICdlbmQnIDogJ3N0YXJ0JztcbiAgICAgICAgY29uc3QgcHJpbWFyeVkgPSB0aGlzLnlQb3NpdGlvbiA9PT0gJ2Fib3ZlJyA/ICdib3R0b20nIDogJ3RvcCc7XG4gICAgICAgIGNvbnN0IHNlY29uZGFyeVkgPSBwcmltYXJ5WSA9PT0gJ3RvcCcgPyAnYm90dG9tJyA6ICd0b3AnO1xuXG4gICAgICAgIHJldHVybiBzdHJhdGVneS53aXRoUG9zaXRpb25zKFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcmlnaW5YOiBwcmltYXJ5WCxcbiAgICAgICAgICAgICAgICBvcmlnaW5ZOiBzZWNvbmRhcnlZLFxuICAgICAgICAgICAgICAgIG92ZXJsYXlYOiBwcmltYXJ5WCxcbiAgICAgICAgICAgICAgICBvdmVybGF5WTogcHJpbWFyeVlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3JpZ2luWDogcHJpbWFyeVgsXG4gICAgICAgICAgICAgICAgb3JpZ2luWTogcHJpbWFyeVksXG4gICAgICAgICAgICAgICAgb3ZlcmxheVg6IHByaW1hcnlYLFxuICAgICAgICAgICAgICAgIG92ZXJsYXlZOiBzZWNvbmRhcnlZXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG9yaWdpblg6IHNlY29uZGFyeVgsXG4gICAgICAgICAgICAgICAgb3JpZ2luWTogc2Vjb25kYXJ5WSxcbiAgICAgICAgICAgICAgICBvdmVybGF5WDogc2Vjb25kYXJ5WCxcbiAgICAgICAgICAgICAgICBvdmVybGF5WTogcHJpbWFyeVlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb3JpZ2luWDogc2Vjb25kYXJ5WCxcbiAgICAgICAgICAgICAgICBvcmlnaW5ZOiBwcmltYXJ5WSxcbiAgICAgICAgICAgICAgICBvdmVybGF5WDogc2Vjb25kYXJ5WCxcbiAgICAgICAgICAgICAgICBvdmVybGF5WTogc2Vjb25kYXJ5WVxuICAgICAgICAgICAgfVxuICAgICAgICBdKTtcbiAgICB9XG5cbn1cbiJdfQ==