geonetwork-ui 2.3.0 → 2.4.0-dev.656babc7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.converter.mjs +4 -4
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +4 -4
  3. package/esm2022/libs/api/metadata-converter/src/lib/gn4/metadata-url.service.mjs +4 -4
  4. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/index.mjs +2 -1
  5. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/keywords.model.mjs +2 -0
  6. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +1 -1
  7. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.mjs +1 -1
  8. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +1 -1
  9. package/esm2022/libs/api/repository/src/lib/gn4/auth/auth.service.mjs +4 -4
  10. package/esm2022/libs/api/repository/src/lib/gn4/auth/gravatar.service.mjs +4 -4
  11. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +4 -4
  12. package/esm2022/libs/api/repository/src/lib/gn4/favorites/favorites.service.mjs +4 -4
  13. package/esm2022/libs/api/repository/src/lib/gn4/gn4-repository.mjs +59 -11
  14. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-groups.service.mjs +4 -4
  15. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +4 -4
  16. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +14 -6
  17. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +36 -16
  18. package/esm2022/libs/api/repository/src/lib/gn4/selection/selection.service.mjs +4 -4
  19. package/esm2022/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.mjs +4 -4
  20. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  21. package/esm2022/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.mjs +1 -1
  22. package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
  23. package/esm2022/libs/common/domain/src/lib/repository/records-repository.interface.mjs +1 -1
  24. package/esm2022/libs/data-access/gn4/src/openapi/api/atom.api.service.mjs +4 -4
  25. package/esm2022/libs/data-access/gn4/src/openapi/api/customstyle.api.service.mjs +4 -4
  26. package/esm2022/libs/data-access/gn4/src/openapi/api/formatters.api.service.mjs +4 -4
  27. package/esm2022/libs/data-access/gn4/src/openapi/api/groups.api.service.mjs +4 -4
  28. package/esm2022/libs/data-access/gn4/src/openapi/api/harvesters.api.service.mjs +4 -4
  29. package/esm2022/libs/data-access/gn4/src/openapi/api/identifiers.api.service.mjs +4 -4
  30. package/esm2022/libs/data-access/gn4/src/openapi/api/languages.api.service.mjs +4 -4
  31. package/esm2022/libs/data-access/gn4/src/openapi/api/links.api.service.mjs +4 -4
  32. package/esm2022/libs/data-access/gn4/src/openapi/api/logos.api.service.mjs +4 -4
  33. package/esm2022/libs/data-access/gn4/src/openapi/api/mapservers.api.service.mjs +4 -4
  34. package/esm2022/libs/data-access/gn4/src/openapi/api/mapservices.api.service.mjs +4 -4
  35. package/esm2022/libs/data-access/gn4/src/openapi/api/me.api.service.mjs +4 -4
  36. package/esm2022/libs/data-access/gn4/src/openapi/api/operations.api.service.mjs +4 -4
  37. package/esm2022/libs/data-access/gn4/src/openapi/api/pages.api.service.mjs +4 -4
  38. package/esm2022/libs/data-access/gn4/src/openapi/api/processes.api.service.mjs +4 -4
  39. package/esm2022/libs/data-access/gn4/src/openapi/api/records.api.service.mjs +5 -5
  40. package/esm2022/libs/data-access/gn4/src/openapi/api/regions.api.service.mjs +4 -4
  41. package/esm2022/libs/data-access/gn4/src/openapi/api/registries.api.service.mjs +4 -4
  42. package/esm2022/libs/data-access/gn4/src/openapi/api/related.api.service.mjs +4 -4
  43. package/esm2022/libs/data-access/gn4/src/openapi/api/search.api.service.mjs +4 -4
  44. package/esm2022/libs/data-access/gn4/src/openapi/api/selections.api.service.mjs +4 -4
  45. package/esm2022/libs/data-access/gn4/src/openapi/api/site.api.service.mjs +4 -4
  46. package/esm2022/libs/data-access/gn4/src/openapi/api/sources.api.service.mjs +4 -4
  47. package/esm2022/libs/data-access/gn4/src/openapi/api/standards.api.service.mjs +4 -4
  48. package/esm2022/libs/data-access/gn4/src/openapi/api/status.api.service.mjs +4 -4
  49. package/esm2022/libs/data-access/gn4/src/openapi/api/tags.api.service.mjs +4 -4
  50. package/esm2022/libs/data-access/gn4/src/openapi/api/tools.api.service.mjs +4 -4
  51. package/esm2022/libs/data-access/gn4/src/openapi/api/ui.api.service.mjs +4 -4
  52. package/esm2022/libs/data-access/gn4/src/openapi/api/userfeedback.api.service.mjs +4 -4
  53. package/esm2022/libs/data-access/gn4/src/openapi/api/users.api.service.mjs +4 -4
  54. package/esm2022/libs/data-access/gn4/src/openapi/api/usersearches.api.service.mjs +4 -4
  55. package/esm2022/libs/data-access/gn4/src/openapi/api/userselections.api.service.mjs +4 -4
  56. package/esm2022/libs/data-access/gn4/src/openapi/api.module.mjs +5 -5
  57. package/esm2022/libs/feature/auth/src/lib/feature-auth.module.mjs +5 -5
  58. package/esm2022/libs/feature/catalog/src/lib/feature-catalog.module.mjs +5 -5
  59. package/esm2022/libs/feature/catalog/src/lib/my-org/my-org.service.mjs +4 -4
  60. package/esm2022/libs/feature/catalog/src/lib/organisations/organisations.component.mjs +4 -4
  61. package/esm2022/libs/feature/catalog/src/lib/records/records.service.mjs +4 -4
  62. package/esm2022/libs/feature/catalog/src/lib/site-title/site-title.component.mjs +4 -4
  63. package/esm2022/libs/feature/catalog/src/lib/source-label/source-label.component.mjs +4 -4
  64. package/esm2022/libs/feature/catalog/src/lib/sources/sources.service.mjs +4 -4
  65. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +4 -4
  66. package/esm2022/libs/feature/dataviz/src/lib/feature-dataviz.module.mjs +5 -5
  67. package/esm2022/libs/feature/dataviz/src/lib/figure/figure-container/figure-container.component.mjs +4 -4
  68. package/esm2022/libs/feature/dataviz/src/lib/figure/figure.service.mjs +4 -4
  69. package/esm2022/libs/feature/dataviz/src/lib/geo-table-view/geo-table-view.component.mjs +4 -4
  70. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +4 -4
  71. package/esm2022/libs/feature/dataviz/src/lib/table-view/table-view.component.mjs +4 -4
  72. package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +1 -1
  73. package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +14 -6
  74. package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +8 -6
  75. package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +6 -2
  76. package/esm2022/libs/feature/editor/src/lib/+state/editor.selectors.mjs +3 -1
  77. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-array/form-field-array.component.mjs +4 -4
  78. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-file/form-field-file.component.mjs +4 -4
  79. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.mjs +87 -0
  80. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-license/form-field-license.component.mjs +4 -4
  81. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-object/form-field-object.component.mjs +4 -4
  82. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-resource-updated/form-field-resource-updated.component.mjs +4 -4
  83. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-rich/form-field-rich.component.mjs +4 -4
  84. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-simple/form-field-simple.component.mjs +4 -4
  85. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-spatial-extent/form-field-spatial-extent.component.mjs +4 -4
  86. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-date/form-field-temporal-extents-date.component.mjs +17 -0
  87. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-range/form-field-temporal-extents-range.component.mjs +17 -0
  88. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.mjs +105 -0
  89. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-update-frequency/form-field-update-frequency.component.mjs +4 -4
  90. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +15 -12
  91. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/index.mjs +5 -2
  92. package/esm2022/libs/feature/editor/src/lib/components/record-form/record-form.component.mjs +4 -4
  93. package/esm2022/libs/feature/editor/src/lib/components/wizard/wizard.component.mjs +4 -4
  94. package/esm2022/libs/feature/editor/src/lib/components/wizard-field/wizard-field.component.mjs +4 -4
  95. package/esm2022/libs/feature/editor/src/lib/components/wizard-summarize/wizard-summarize.component.mjs +4 -4
  96. package/esm2022/libs/feature/editor/src/lib/feature-editor.module.mjs +7 -6
  97. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +15 -1
  98. package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +22 -42
  99. package/esm2022/libs/feature/editor/src/lib/services/wizard.service.mjs +4 -4
  100. package/esm2022/libs/feature/map/src/lib/+state/map.effects.mjs +4 -4
  101. package/esm2022/libs/feature/map/src/lib/+state/map.facade.mjs +4 -4
  102. package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-from-catalog.component.mjs +4 -4
  103. package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component.mjs +4 -4
  104. package/esm2022/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.mjs +4 -4
  105. package/esm2022/libs/feature/map/src/lib/add-layer-from-ogc-api/add-layer-from-ogc-api.component.mjs +4 -4
  106. package/esm2022/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.mjs +4 -4
  107. package/esm2022/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.mjs +4 -4
  108. package/esm2022/libs/feature/map/src/lib/feature-info/feature-info.service.mjs +4 -4
  109. package/esm2022/libs/feature/map/src/lib/feature-map.module.mjs +5 -5
  110. package/esm2022/libs/feature/map/src/lib/geocoding/geocoding.component.mjs +4 -4
  111. package/esm2022/libs/feature/map/src/lib/geocoding.service.mjs +4 -4
  112. package/esm2022/libs/feature/map/src/lib/layers-panel/layers-panel.component.mjs +4 -4
  113. package/esm2022/libs/feature/map/src/lib/manager/map-instance.directive.mjs +4 -4
  114. package/esm2022/libs/feature/map/src/lib/manager/map-manager.service.mjs +4 -4
  115. package/esm2022/libs/feature/map/src/lib/map-container/map-container.component.mjs +4 -4
  116. package/esm2022/libs/feature/map/src/lib/map-context/component/map-context.component.mjs +4 -4
  117. package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +4 -4
  118. package/esm2022/libs/feature/map/src/lib/style/map-style.service.mjs +4 -4
  119. package/esm2022/libs/feature/map/src/lib/utils/map-utils.service.mjs +4 -4
  120. package/esm2022/libs/feature/notifications/src/lib/feature-notifications.module.mjs +5 -5
  121. package/esm2022/libs/feature/notifications/src/lib/notifications-container/notifications-container.component.mjs +4 -4
  122. package/esm2022/libs/feature/notifications/src/lib/notifications.service.mjs +4 -4
  123. package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +4 -4
  124. package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +4 -4
  125. package/esm2022/libs/feature/record/src/lib/data-view-share/data-view-share.component.mjs +4 -4
  126. package/esm2022/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.mjs +4 -4
  127. package/esm2022/libs/feature/record/src/lib/external-viewer-button/external-viewer-button.component.mjs +4 -4
  128. package/esm2022/libs/feature/record/src/lib/feature-record.module.mjs +5 -5
  129. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +4 -4
  130. package/esm2022/libs/feature/record/src/lib/state/mdview.effects.mjs +5 -5
  131. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +4 -4
  132. package/esm2022/libs/feature/router/src/lib/default/container/search-router.container.directive.mjs +4 -4
  133. package/esm2022/libs/feature/router/src/lib/default/router.module.mjs +5 -5
  134. package/esm2022/libs/feature/router/src/lib/default/router.service.mjs +4 -4
  135. package/esm2022/libs/feature/router/src/lib/default/services/router-search.service.mjs +4 -4
  136. package/esm2022/libs/feature/router/src/lib/default/state/router.effects.mjs +4 -4
  137. package/esm2022/libs/feature/router/src/lib/default/state/router.facade.mjs +4 -4
  138. package/esm2022/libs/feature/search/src/lib/facets/facets-container/facets-container.component.mjs +4 -4
  139. package/esm2022/libs/feature/search/src/lib/facets/facets.module.mjs +5 -5
  140. package/esm2022/libs/feature/search/src/lib/facets/facets.service.mjs +4 -4
  141. package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +4 -4
  142. package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +5 -5
  143. package/esm2022/libs/feature/search/src/lib/filter-dropdown/filter-dropdown.component.mjs +4 -4
  144. package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +4 -4
  145. package/esm2022/libs/feature/search/src/lib/records-metrics/records-metrics.component.mjs +4 -4
  146. package/esm2022/libs/feature/search/src/lib/results-hits-number/results-hits.container.component.mjs +4 -4
  147. package/esm2022/libs/feature/search/src/lib/results-layout/results-layout.component.mjs +4 -4
  148. package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +4 -4
  149. package/esm2022/libs/feature/search/src/lib/results-table/results-table.component.mjs +20 -12
  150. package/esm2022/libs/feature/search/src/lib/sort-by/sort-by.component.mjs +4 -4
  151. package/esm2022/libs/feature/search/src/lib/state/container/search-state.container.directive.mjs +4 -4
  152. package/esm2022/libs/feature/search/src/lib/state/effects.mjs +4 -4
  153. package/esm2022/libs/feature/search/src/lib/state/search.facade.mjs +4 -4
  154. package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +4 -4
  155. package/esm2022/libs/feature/search/src/lib/utils/service/search.service.mjs +4 -4
  156. package/esm2022/libs/ui/catalog/src/lib/catalog-title/catalog-title.component.mjs +4 -4
  157. package/esm2022/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.mjs +4 -4
  158. package/esm2022/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.mjs +4 -4
  159. package/esm2022/libs/ui/catalog/src/lib/organisations-filter/organisations-filter.component.mjs +4 -4
  160. package/esm2022/libs/ui/catalog/src/lib/organisations-result/organisations-result.component.mjs +4 -4
  161. package/esm2022/libs/ui/catalog/src/lib/ui-catalog.module.mjs +5 -5
  162. package/esm2022/libs/ui/dataviz/src/lib/chart/chart.component.mjs +4 -4
  163. package/esm2022/libs/ui/dataviz/src/lib/figure/figure.component.mjs +4 -4
  164. package/esm2022/libs/ui/dataviz/src/lib/table/table.component.mjs +4 -4
  165. package/esm2022/libs/ui/dataviz/src/lib/ui-dataviz.module.mjs +5 -5
  166. package/esm2022/libs/ui/elements/src/index.mjs +4 -3
  167. package/esm2022/libs/ui/elements/src/lib/api-card/api-card.component.mjs +4 -4
  168. package/esm2022/libs/ui/elements/src/lib/avatar/avatar.component.mjs +4 -4
  169. package/esm2022/libs/ui/elements/src/lib/content-ghost/content-ghost.component.mjs +4 -4
  170. package/esm2022/libs/ui/elements/src/lib/download-item/download-item.component.mjs +4 -4
  171. package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +4 -4
  172. package/esm2022/libs/ui/elements/src/lib/error/error.component.mjs +4 -4
  173. package/esm2022/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.mjs +4 -4
  174. package/esm2022/libs/ui/elements/src/lib/link-card/link-card.component.mjs +4 -4
  175. package/esm2022/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.mjs +4 -4
  176. package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +4 -4
  177. package/esm2022/libs/ui/elements/src/lib/max-lines/max-lines.component.mjs +4 -4
  178. package/esm2022/libs/ui/elements/src/lib/metadata-catalog/metadata-catalog.component.mjs +4 -4
  179. package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +4 -4
  180. package/esm2022/libs/ui/elements/src/lib/metadata-info/linkify.directive.mjs +4 -4
  181. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +8 -8
  182. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +4 -4
  183. package/esm2022/libs/ui/elements/src/lib/metadata-quality-item/metadata-quality-item.component.mjs +4 -4
  184. package/esm2022/libs/ui/elements/src/lib/notification/notification.component.mjs +4 -4
  185. package/esm2022/libs/ui/elements/src/lib/pagination/pagination.component.mjs +4 -4
  186. package/esm2022/libs/ui/elements/src/lib/pagination-buttons/pagination-buttons.component.mjs +4 -4
  187. package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +4 -4
  188. package/esm2022/libs/ui/elements/src/lib/related-record-card/related-record-card.component.mjs +4 -4
  189. package/esm2022/libs/ui/elements/src/lib/sortable-list/sortable-list.component.mjs +43 -0
  190. package/esm2022/libs/ui/elements/src/lib/thumbnail/thumbnail.component.mjs +4 -4
  191. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +11 -8
  192. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.mjs +4 -4
  193. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.mjs +4 -4
  194. package/esm2022/libs/ui/elements/src/lib/user-preview/user-preview.component.mjs +4 -4
  195. package/esm2022/libs/ui/inputs/src/index.mjs +2 -1
  196. package/esm2022/libs/ui/inputs/src/lib/autocomplete/autocomplete.component.mjs +4 -4
  197. package/esm2022/libs/ui/inputs/src/lib/badge/badge.component.mjs +28 -0
  198. package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +4 -4
  199. package/esm2022/libs/ui/inputs/src/lib/check-toggle/check-toggle.component.mjs +4 -4
  200. package/esm2022/libs/ui/inputs/src/lib/checkbox/checkbox.component.mjs +4 -4
  201. package/esm2022/libs/ui/inputs/src/lib/chips-input/chips-input.component.mjs +4 -4
  202. package/esm2022/libs/ui/inputs/src/lib/copy-text-button/copy-text-button.component.mjs +4 -4
  203. package/esm2022/libs/ui/inputs/src/lib/date-picker/date-picker.component.mjs +6 -6
  204. package/esm2022/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.mjs +19 -13
  205. package/esm2022/libs/ui/inputs/src/lib/drag-and-drop-file-input/drag-and-drop-file-input.component.mjs +4 -4
  206. package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +4 -4
  207. package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +4 -4
  208. package/esm2022/libs/ui/inputs/src/lib/editable-label/editable-label.directive.mjs +4 -4
  209. package/esm2022/libs/ui/inputs/src/lib/files-drop/files-drop.directive.mjs +4 -4
  210. package/esm2022/libs/ui/inputs/src/lib/image-input/image-input.component.mjs +4 -4
  211. package/esm2022/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.mjs +4 -4
  212. package/esm2022/libs/ui/inputs/src/lib/previous-next-buttons/previous-next-buttons.component.mjs +4 -4
  213. package/esm2022/libs/ui/inputs/src/lib/search-input/search-input.component.mjs +4 -4
  214. package/esm2022/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.mjs +4 -4
  215. package/esm2022/libs/ui/inputs/src/lib/text-area/text-area.component.mjs +4 -4
  216. package/esm2022/libs/ui/inputs/src/lib/text-input/text-input.component.mjs +4 -4
  217. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +14 -8
  218. package/esm2022/libs/ui/inputs/src/lib/viewport-intersector/viewport-intersector.component.mjs +4 -4
  219. package/esm2022/libs/ui/layout/src/lib/anchor-link/anchor-link.directive.mjs +4 -4
  220. package/esm2022/libs/ui/layout/src/lib/block-list/block-list.component.mjs +4 -4
  221. package/esm2022/libs/ui/layout/src/lib/carousel/carousel.component.mjs +4 -4
  222. package/esm2022/libs/ui/layout/src/lib/expandable-panel/expandable-panel.component.mjs +4 -4
  223. package/esm2022/libs/ui/layout/src/lib/expandable-panel-button/expandable-panel-button.component.mjs +4 -4
  224. package/esm2022/libs/ui/layout/src/lib/form-field-wrapper/form-field-wrapper.component.mjs +4 -4
  225. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.mjs +4 -4
  226. package/esm2022/libs/ui/layout/src/lib/interactive-table/interactive-table.component.mjs +4 -4
  227. package/esm2022/libs/ui/layout/src/lib/sticky-header/sticky-header.component.mjs +4 -4
  228. package/esm2022/libs/ui/layout/src/lib/ui-layout.module.mjs +5 -5
  229. package/esm2022/libs/ui/map/src/lib/components/feature-detail/feature-detail.component.mjs +4 -4
  230. package/esm2022/libs/ui/map/src/lib/components/map/map.component.mjs +4 -4
  231. package/esm2022/libs/ui/map/src/lib/ui-map.module.mjs +5 -5
  232. package/esm2022/libs/ui/search/src/lib/facets/facet-block/facet-block.component.mjs +7 -7
  233. package/esm2022/libs/ui/search/src/lib/facets/facet-item/facet-item.component.mjs +7 -7
  234. package/esm2022/libs/ui/search/src/lib/facets/facet-list/facet-list.component.mjs +4 -4
  235. package/esm2022/libs/ui/search/src/lib/facets/facets.module.mjs +5 -5
  236. package/esm2022/libs/ui/search/src/lib/record-metric/record-metric.component.mjs +4 -4
  237. package/esm2022/libs/ui/search/src/lib/record-preview/record-preview.component.mjs +4 -4
  238. package/esm2022/libs/ui/search/src/lib/record-preview-card/record-preview-card.component.mjs +4 -4
  239. package/esm2022/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.mjs +4 -4
  240. package/esm2022/libs/ui/search/src/lib/record-preview-list/record-preview-list.component.mjs +4 -4
  241. package/esm2022/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.mjs +4 -4
  242. package/esm2022/libs/ui/search/src/lib/record-preview-text/record-preview-text.component.mjs +4 -4
  243. package/esm2022/libs/ui/search/src/lib/record-preview-title/record-preview-title.component.mjs +4 -4
  244. package/esm2022/libs/ui/search/src/lib/results-hits-number/results-hits-number.component.mjs +4 -4
  245. package/esm2022/libs/ui/search/src/lib/results-list/results-list.component.mjs +4 -4
  246. package/esm2022/libs/ui/search/src/lib/results-list-item/results-list-item.component.mjs +4 -4
  247. package/esm2022/libs/ui/search/src/lib/ui-search.module.mjs +5 -5
  248. package/esm2022/libs/ui/widgets/src/index.mjs +1 -2
  249. package/esm2022/libs/ui/widgets/src/lib/color-scale/color-scale.component.mjs +4 -4
  250. package/esm2022/libs/ui/widgets/src/lib/loading-mask/loading-mask.component.mjs +4 -4
  251. package/esm2022/libs/ui/widgets/src/lib/popup-alert/popup-alert.component.mjs +4 -4
  252. package/esm2022/libs/ui/widgets/src/lib/progress-bar/progress-bar.component.mjs +4 -4
  253. package/esm2022/libs/ui/widgets/src/lib/spinning-loader/spinning-loader.component.mjs +4 -4
  254. package/esm2022/libs/ui/widgets/src/lib/step-bar/step-bar.component.mjs +4 -4
  255. package/esm2022/libs/ui/widgets/src/lib/ui-widgets.module.mjs +5 -10
  256. package/esm2022/libs/util/i18n/src/lib/i18n.interceptor.mjs +4 -4
  257. package/esm2022/libs/util/i18n/src/lib/lang.service.mjs +4 -4
  258. package/esm2022/libs/util/i18n/src/lib/util-i18n.module.mjs +5 -5
  259. package/esm2022/libs/util/shared/src/lib/image-fallback.directive.mjs +4 -4
  260. package/esm2022/libs/util/shared/src/lib/links/link-classifier.service.mjs +4 -4
  261. package/esm2022/libs/util/shared/src/lib/services/log.service.mjs +4 -4
  262. package/esm2022/libs/util/shared/src/lib/services/proxy.service.mjs +4 -4
  263. package/esm2022/libs/util/shared/src/lib/services/theme.service.mjs +4 -4
  264. package/esm2022/libs/util/shared/src/lib/util-shared.module.mjs +5 -5
  265. package/esm2022/translations/de.json +10 -1
  266. package/esm2022/translations/en.json +10 -1
  267. package/esm2022/translations/es.json +10 -1
  268. package/esm2022/translations/fr.json +10 -1
  269. package/esm2022/translations/it.json +10 -1
  270. package/esm2022/translations/nl.json +10 -1
  271. package/esm2022/translations/pt.json +10 -1
  272. package/fesm2022/geonetwork-ui.mjs +1364 -966
  273. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  274. package/libs/api/metadata-converter/src/lib/gn4/types/index.d.ts +1 -0
  275. package/libs/api/metadata-converter/src/lib/gn4/types/index.d.ts.map +1 -1
  276. package/libs/api/metadata-converter/src/lib/gn4/types/keywords.model.d.ts +31 -0
  277. package/libs/api/metadata-converter/src/lib/gn4/types/keywords.model.d.ts.map +1 -0
  278. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +3 -2
  279. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  280. package/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.d.ts +1 -1
  281. package/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.d.ts.map +1 -1
  282. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +3 -2
  283. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  284. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts +15 -3
  285. package/libs/api/repository/src/lib/gn4/gn4-repository.d.ts.map +1 -1
  286. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts +3 -3
  287. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
  288. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +8 -5
  289. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  290. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +4 -7
  291. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  292. package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts +12 -5
  293. package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts.map +1 -1
  294. package/libs/common/domain/src/lib/platform.service.interface.d.ts +3 -3
  295. package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
  296. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts +24 -1
  297. package/libs/common/domain/src/lib/repository/records-repository.interface.d.ts.map +1 -1
  298. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts +6 -6
  299. package/libs/data-access/gn4/src/openapi/api/records.api.service.d.ts.map +1 -1
  300. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +4 -0
  301. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -1
  302. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts +5 -0
  303. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts.map +1 -1
  304. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +9 -8
  305. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -1
  306. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts +10 -0
  307. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -1
  308. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +2 -0
  309. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -1
  310. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.d.ts +35 -0
  311. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.d.ts.map +1 -0
  312. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-date/form-field-temporal-extents-date.component.d.ts +8 -0
  313. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-date/form-field-temporal-extents-date.component.d.ts.map +1 -0
  314. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-range/form-field-temporal-extents-range.component.d.ts +8 -0
  315. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-range/form-field-temporal-extents-range.component.d.ts.map +1 -0
  316. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.d.ts +31 -0
  317. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.d.ts.map +1 -0
  318. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +2 -1
  319. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  320. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts +4 -1
  321. package/libs/feature/editor/src/lib/components/record-form/form-field/index.d.ts.map +1 -1
  322. package/libs/feature/editor/src/lib/feature-editor.module.d.ts.map +1 -1
  323. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  324. package/libs/feature/editor/src/lib/services/editor.service.d.ts +6 -9
  325. package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
  326. package/libs/feature/record/src/lib/state/mdview.effects.d.ts.map +1 -1
  327. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts +4 -1
  328. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  329. package/libs/ui/elements/src/index.d.ts +3 -2
  330. package/libs/ui/elements/src/index.d.ts.map +1 -1
  331. package/libs/ui/elements/src/lib/sortable-list/sortable-list.component.d.ts +22 -0
  332. package/libs/ui/elements/src/lib/sortable-list/sortable-list.component.d.ts.map +1 -0
  333. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +2 -1
  334. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  335. package/libs/ui/inputs/src/index.d.ts +1 -0
  336. package/libs/ui/inputs/src/index.d.ts.map +1 -1
  337. package/libs/ui/inputs/src/lib/badge/badge.component.d.ts +11 -0
  338. package/libs/ui/inputs/src/lib/badge/badge.component.d.ts.map +1 -0
  339. package/libs/ui/inputs/src/lib/date-picker/date-picker.component.d.ts.map +1 -1
  340. package/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.d.ts +4 -4
  341. package/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.d.ts.map +1 -1
  342. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +2 -1
  343. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts.map +1 -1
  344. package/libs/ui/widgets/src/index.d.ts +0 -1
  345. package/libs/ui/widgets/src/index.d.ts.map +1 -1
  346. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts +10 -11
  347. package/libs/ui/widgets/src/lib/ui-widgets.module.d.ts.map +1 -1
  348. package/package.json +1 -1
  349. package/src/libs/api/metadata-converter/src/lib/gn4/types/index.ts +1 -0
  350. package/src/libs/api/metadata-converter/src/lib/gn4/types/keywords.model.ts +31 -0
  351. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +2 -2
  352. package/src/libs/api/metadata-converter/src/lib/iso19139/utils/keyword.mapper.ts +1 -1
  353. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +2 -2
  354. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +145 -7
  355. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +24 -3
  356. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +70 -21
  357. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +4 -9
  358. package/src/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.ts +13 -6
  359. package/src/libs/common/domain/src/lib/platform.service.interface.ts +3 -3
  360. package/src/libs/common/domain/src/lib/repository/records-repository.interface.ts +36 -3
  361. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +203 -0
  362. package/src/libs/data-access/gn4/src/openapi/api/records.api.service.ts +9 -9
  363. package/src/libs/data-access/gn4/src/spec.yaml +4 -5
  364. package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +5 -1
  365. package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +31 -3
  366. package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +13 -3
  367. package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +22 -5
  368. package/src/libs/feature/editor/src/lib/+state/editor.selectors.ts +10 -0
  369. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.html +20 -0
  370. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-keywords/form-field-keywords.component.ts +119 -0
  371. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-date/form-field-temporal-extents-date.component.html +7 -0
  372. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-date/form-field-temporal-extents-date.component.ts +16 -0
  373. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-range/form-field-temporal-extents-range.component.css +0 -0
  374. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-range/form-field-temporal-extents-range.component.html +13 -0
  375. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-range/form-field-temporal-extents-range.component.ts +16 -0
  376. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.css +0 -0
  377. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.html +6 -0
  378. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents.component.ts +130 -0
  379. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +9 -2
  380. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +14 -7
  381. package/src/libs/feature/editor/src/lib/components/record-form/form-field/index.ts +4 -1
  382. package/src/libs/feature/editor/src/lib/feature-editor.module.ts +2 -1
  383. package/src/libs/feature/editor/src/lib/fields.config.ts +14 -0
  384. package/src/libs/feature/editor/src/lib/services/editor.service.ts +17 -52
  385. package/src/libs/feature/record/src/lib/state/mdview.effects.ts +1 -3
  386. package/src/libs/feature/search/src/lib/results-table/results-table.component.html +12 -1
  387. package/src/libs/feature/search/src/lib/results-table/results-table.component.ts +9 -2
  388. package/src/libs/ui/elements/src/index.ts +3 -2
  389. package/src/libs/ui/elements/src/lib/sortable-list/sortable-list.component.css +18 -0
  390. package/src/libs/ui/elements/src/lib/sortable-list/sortable-list.component.html +36 -0
  391. package/src/libs/ui/elements/src/lib/sortable-list/sortable-list.component.ts +56 -0
  392. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +2 -1
  393. package/src/libs/ui/inputs/src/index.ts +1 -0
  394. package/src/libs/ui/inputs/src/lib/badge/badge.component.css +0 -0
  395. package/src/libs/ui/inputs/src/lib/badge/badge.component.html +18 -0
  396. package/src/libs/ui/inputs/src/lib/badge/badge.component.ts +27 -0
  397. package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.html +2 -1
  398. package/src/libs/ui/inputs/src/lib/date-picker/date-picker.component.ts +8 -1
  399. package/src/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.html +7 -7
  400. package/src/libs/ui/inputs/src/lib/date-range-picker/date-range-picker.component.ts +13 -15
  401. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +3 -0
  402. package/src/libs/ui/widgets/src/index.ts +0 -1
  403. package/src/libs/ui/widgets/src/lib/ui-widgets.module.ts +0 -3
  404. package/tailwind.base.css +26 -1
  405. package/translations/de.json +10 -1
  406. package/translations/en.json +10 -1
  407. package/translations/es.json +10 -1
  408. package/translations/fr.json +10 -1
  409. package/translations/it.json +10 -1
  410. package/translations/nl.json +10 -1
  411. package/translations/pt.json +10 -1
  412. package/translations/sk.json +10 -1
  413. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extent/form-field-temporal-extent.component.mjs +0 -11
  414. package/esm2022/libs/ui/widgets/src/lib/badge/badge.component.mjs +0 -17
  415. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extent/form-field-temporal-extent.component.d.ts +0 -6
  416. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extent/form-field-temporal-extent.component.d.ts.map +0 -1
  417. package/libs/ui/widgets/src/lib/badge/badge.component.d.ts +0 -7
  418. package/libs/ui/widgets/src/lib/badge/badge.component.d.ts.map +0 -1
  419. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extent/form-field-temporal-extent.component.html +0 -1
  420. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extent/form-field-temporal-extent.component.ts +0 -10
  421. package/src/libs/ui/widgets/src/lib/badge/badge.component.html +0 -10
  422. package/src/libs/ui/widgets/src/lib/badge/badge.component.ts +0 -11
  423. /package/src/libs/feature/editor/src/lib/components/record-form/form-field/{form-field-temporal-extent/form-field-temporal-extent.component.css → form-field-keywords/form-field-keywords.component.css} +0 -0
  424. /package/src/libs/{ui/widgets/src/lib/badge/badge.component.css → feature/editor/src/lib/components/record-form/form-field/form-field-temporal-extents/form-field-temporal-extents-date/form-field-temporal-extents-date.component.css} +0 -0
@@ -411,4 +411,4 @@ export function writeTemporalExtents(record, rootEl) {
411
411
  ? setTextContent(format(extent.start, 'yyyy-MM-dd'))
412
412
  : addAttribute('indeterminatePosition', 'unknown'))))))))))(rootEl);
413
413
  }
414
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtcGFydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjL2xpYi9pc28xOTEzOS93cml0ZS1wYXJ0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxNQUFNLE1BQU0saUJBQWlCLENBQUE7QUFDcEMsT0FBTyxFQUVMLFFBQVEsRUFDUixXQUFXLEVBQ1gsVUFBVSxFQUNWLEdBQUcsRUFDSCxRQUFRLEVBQ1IsSUFBSSxFQUNKLElBQUksRUFDSixHQUFHLEdBQ0osTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBRUwsWUFBWSxFQUNaLGNBQWMsRUFDZCxXQUFXLEVBQ1gsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUN2QixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLGNBQWMsR0FDZixNQUFNLGNBQWMsQ0FBQTtBQUNyQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3ZDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUV6RCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLElBQVk7SUFFWixPQUFPLEdBQUcsQ0FDUixJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDckUsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUMxQixHQUFRO0lBRVIsT0FBTyxHQUFHLENBQ1IsSUFBSSxDQUNGLHVCQUF1QixDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsRUFDakQsY0FBYyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUMvQixDQUNGLENBQUE7QUFDSCxDQUFDO0FBRUQs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QUUsU0FBUyxDQUFDLENBQ3JELENBQ0YsQ0FDRixDQUNGLENBQ04sQ0FDRixDQUNGLENBQ0YsQ0FDRixDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENhdGFsb2dSZWNvcmQsXG4gIENvbnN0cmFpbnQsXG4gIERhdGFzZXREaXN0cmlidXRpb24sXG4gIERhdGFzZXRSZWNvcmQsXG4gIERhdGFzZXRTZXJ2aWNlRGlzdHJpYnV0aW9uLFxuICBJbmRpdmlkdWFsLFxuICBLZXl3b3JkLFxuICBLZXl3b3JkVGhlc2F1cnVzLFxuICBSZWNvcmRTdGF0dXMsXG4gIFJvbGUsXG4gIFNlcnZpY2VFbmRwb2ludCxcbiAgU2VydmljZU9ubGluZVJlc291cmNlLFxuICBTZXJ2aWNlUmVjb3JkLFxuICBVcGRhdGVGcmVxdWVuY3lDb2RlLFxuICBVcGRhdGVGcmVxdWVuY3lDdXN0b20sXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCBmb3JtYXQgZnJvbSAnZGF0ZS1mbnMvZm9ybWF0J1xuaW1wb3J0IHtcbiAgQ2hhaW5hYmxlRnVuY3Rpb24sXG4gIGZhbGxiYWNrLFxuICBmaWx0ZXJBcnJheSxcbiAgZ2V0QXRJbmRleCxcbiAgbWFwLFxuICBtYXBBcnJheSxcbiAgbm9vcCxcbiAgcGlwZSxcbiAgdGFwLFxufSBmcm9tICcuLi9mdW5jdGlvbi11dGlscydcbmltcG9ydCB7XG4gIFhtbEVsZW1lbnQsXG4gIGFkZEF0dHJpYnV0ZSxcbiAgYXBwZW5kQ2hpbGRyZW4sXG4gIGNyZWF0ZUNoaWxkLFxuICBjcmVhdGVFbGVtZW50LFxuICBmaW5kQ2hpbGRFbGVtZW50LFxuICBmaW5kQ2hpbGRPckNyZWF0ZSxcbiAgZmluZENoaWxkcmVuRWxlbWVudCxcbiAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUsXG4gIGZpbmROZXN0ZWRFbGVtZW50cyxcbiAgcmVhZEF0dHJpYnV0ZSxcbiAgcmVtb3ZlQWxsQ2hpbGRyZW4sXG4gIHJlbW92ZUNoaWxkcmVuLFxuICByZW1vdmVDaGlsZHJlbkJ5TmFtZSxcbiAgc2V0VGV4dENvbnRlbnQsXG59IGZyb20gJy4uL3htbC11dGlscydcbmltcG9ydCB7IHJlYWRLaW5kIH0gZnJvbSAnLi9yZWFkLXBhcnRzJ1xuaW1wb3J0IHsgbmFtZVBhcnRzVG9GdWxsIH0gZnJvbSAnLi91dGlscy9pbmRpdmlkdWFsLW5hbWUnXG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUNoYXJhY3RlclN0cmluZyhcbiAgdGV4dDogc3RyaW5nXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiB0YXAoXG4gICAgcGlwZShmaW5kQ2hpbGRPckNyZWF0ZSgnZ2NvOkNoYXJhY3RlclN0cmluZycpLCBzZXRUZXh0Q29udGVudCh0ZXh0KSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMaW5rYWdlKFxuICB1cmw6IFVSTFxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoXG4gICAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmxpbmthZ2UnLCAnZ21kOlVSTCcpLFxuICAgICAgc2V0VGV4dENvbnRlbnQodXJsLnRvU3RyaW5nKCkpXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUFuY2hvcihcbiAgdXJsOiBVUkwsXG4gIHRleHQ/OiBzdHJpbmdcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHRhcChcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkT3JDcmVhdGUoJ2dteDpBbmNob3InKSxcbiAgICAgIGFkZEF0dHJpYnV0ZSgneGxpbms6aHJlZicsIHVybC50b1N0cmluZygpKSxcbiAgICAgIHRleHQgPyBzZXRUZXh0Q29udGVudCh0ZXh0KSA6IG5vb3BcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlRGF0ZVRpbWUoXG4gIGRhdGU6IERhdGVcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHRhcChcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkT3JDcmVhdGUoJ2djbzpEYXRlVGltZScpLFxuICAgICAgc2V0VGV4dENvbnRlbnQoZm9ybWF0KGRhdGUsIFwieXl5eS1NTS1kZCdUJ0hIOm1tOnNzXCIpKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVEYXRlKFxuICBkYXRlOiBEYXRlXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiB0YXAoXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZE9yQ3JlYXRlKCdnY286RGF0ZScpLFxuICAgICAgc2V0VGV4dENvbnRlbnQoZm9ybWF0KGRhdGUsICd5eXl5LU1NLWRkJykpXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9ncmVzc0NvZGUoc3RhdHVzOiBSZWNvcmRTdGF0dXMpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHN0YXR1cykge1xuICAgIGNhc2UgJ2NvbXBsZXRlZCc6XG4gICAgICByZXR1cm4gJ2NvbXBsZXRlZCdcbiAgICBjYXNlICdkZXByZWNhdGVkJzpcbiAgICAgIHJldHVybiAnZGVwcmVjYXRlZCdcbiAgICBjYXNlICdvbmdvaW5nJzpcbiAgICAgIHJldHVybiAnb25Hb2luZydcbiAgICBjYXNlICdyZW1vdmVkJzpcbiAgICAgIHJldHVybiAncmVtb3ZlZCdcbiAgICBjYXNlICd1bmRlcl9kZXZlbG9wbWVudCc6XG4gICAgICByZXR1cm4gJ3VuZGVyRGV2ZWxvcG1lbnQnXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgcHJvZ3Jlc3MgY29kZSBmcm9tIHN0YXR1czogJHtzdGF0dXN9YFxuICAgICAgKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb2xlQ29kZShyb2xlOiBSb2xlKTogc3RyaW5nIHtcbiAgc3dpdGNoIChyb2xlKSB7XG4gICAgY2FzZSAnYXV0aG9yJzpcbiAgICAgIHJldHVybiAnYXV0aG9yJ1xuICAgIGNhc2UgJ2NvbGxhYm9yYXRvcic6XG4gICAgICByZXR1cm4gJ2NvbGxhYm9yYXRvcidcbiAgICBjYXNlICdjb250cmlidXRvcic6XG4gICAgICByZXR1cm4gJ2NvbnRyaWJ1dG9yJ1xuICAgIGNhc2UgJ2N1c3RvZGlhbic6XG4gICAgICByZXR1cm4gJ2N1c3RvZGlhbidcbiAgICBjYXNlICdkaXN0cmlidXRvcic6XG4gICAgICByZXR1cm4gJ2Rpc3RyaWJ1dG9yJ1xuICAgIGNhc2UgJ2VkaXRvcic6XG4gICAgICByZXR1cm4gJ2VkaXRvcidcbiAgICBjYXNlICdmdW5kZXInOlxuICAgICAgcmV0dXJuICdmdW5kZXInXG4gICAgY2FzZSAnbWVkaWF0b3InOlxuICAgICAgcmV0dXJuICdtZWRpYXRvcidcbiAgICBjYXNlICdvcmlnaW5hdG9yJzpcbiAgICAgIHJldHVybiAnb3JpZ2luYXRvcidcbiAgICBjYXNlICdvdGhlcic6XG4gICAgICByZXR1cm4gJ290aGVyJ1xuICAgIGNhc2UgJ293bmVyJzpcbiAgICAgIHJldHVybiAnb3duZXInXG4gICAgY2FzZSAncG9pbnRfb2ZfY29udGFjdCc6XG4gICAgICByZXR1cm4gJ3BvaW50T2ZDb250YWN0J1xuICAgIGNhc2UgJ3ByaW5jaXBhbF9pbnZlc3RpZ2F0b3InOlxuICAgICAgcmV0dXJuICdwcmluY2lwYWxJbnZlc3RpZ2F0b3InXG4gICAgY2FzZSAncHJvY2Vzc29yJzpcbiAgICAgIHJldHVybiAncHJvY2Vzc29yJ1xuICAgIGNhc2UgJ3B1Ymxpc2hlcic6XG4gICAgICByZXR1cm4gJ3B1Ymxpc2hlcidcbiAgICBjYXNlICdyZXNvdXJjZV9wcm92aWRlcic6XG4gICAgICByZXR1cm4gJ3Jlc291cmNlUHJvdmlkZXInXG4gICAgY2FzZSAncmlnaHRzX2hvbGRlcic6XG4gICAgICByZXR1cm4gJ3JpZ2h0c0hvbGRlcidcbiAgICBjYXNlICdzcG9uc29yJzpcbiAgICAgIHJldHVybiAnc3BvbnNvcidcbiAgICBjYXNlICdzdGFrZWhvbGRlcic6XG4gICAgICByZXR1cm4gJ3N0YWtlaG9sZGVyJ1xuICAgIGNhc2UgJ3Vuc3BlY2lmaWVkJzpcbiAgICAgIHJldHVybiAndW5zcGVjaWZpZWQnXG4gICAgY2FzZSAndXNlcic6XG4gICAgICByZXR1cm4gJ3VzZXInXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGRldGVybWluZSByb2xlIGNvZGUgZnJvbSByb2xlOiAke3JvbGV9YClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlzdHJpYnV0aW9uUHJvdG9jb2woXG4gIGRpc3RyaWJ1dGlvbjogRGF0YXNldFNlcnZpY2VEaXN0cmlidXRpb25cbik6IHN0cmluZyB7XG4gIHN3aXRjaCAoZGlzdHJpYnV0aW9uLmFjY2Vzc1NlcnZpY2VQcm90b2NvbC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnd2ZzJzpcbiAgICAgIHJldHVybiAnT0dDOldGUydcbiAgICBjYXNlICd3bXMnOlxuICAgICAgcmV0dXJuICdPR0M6V01TJ1xuICAgIGNhc2UgJ3dwcyc6XG4gICAgICByZXR1cm4gJ09HQzpXUFMnXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBkaXN0cmlidXRpb24uYWNjZXNzU2VydmljZVByb3RvY29sXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1haW50ZW5hbmNlRnJlcXVlbmN5Q29kZShcbiAgdXBkYXRlRnJlcXVlbmN5OiBVcGRhdGVGcmVxdWVuY3lDb2RlXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgc3dpdGNoICh1cGRhdGVGcmVxdWVuY3kpIHtcbiAgICBjYXNlICdhc05lZWRlZCc6XG4gICAgICByZXR1cm4gJ2FzTmVlZGVkJ1xuICAgIGNhc2UgJ3Vua25vd24nOlxuICAgICAgcmV0dXJuICd1bmtub3duJ1xuICAgIGNhc2UgJ2lycmVndWxhcic6XG4gICAgICByZXR1cm4gJ2lycmVndWxhcidcbiAgICBjYXNlICdub3RQbGFubmVkJzpcbiAgICAgIHJldHVybiAnbm90UGxhbm5lZCdcbiAgICBjYXNlICdjb250aW51YWwnOlxuICAgICAgcmV0dXJuICdjb250aW51YWwnXG4gICAgY2FzZSAncGVyaW9kaWMnOlxuICAgICAgcmV0dXJuICdwZXJpb2RpYydcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SVNPRHVyYXRpb24odXBkYXRlRnJlcXVlbmN5OiBVcGRhdGVGcmVxdWVuY3lDdXN0b20pOiBzdHJpbmcge1xuICBjb25zdCBkdXJhdGlvbiA9IHtcbiAgICB5ZWFyczogMCxcbiAgICBtb250aHM6IDAsXG4gICAgd2Vla3M6IDAsXG4gICAgZGF5czogMCxcbiAgICBob3VyczogMCxcbiAgfVxuICBzd2l0Y2ggKHVwZGF0ZUZyZXF1ZW5jeS5wZXIpIHtcbiAgICBjYXNlICdkYXknOlxuICAgICAgaWYgKHVwZGF0ZUZyZXF1ZW5jeS51cGRhdGVkVGltZXMgPD0gMSkgZHVyYXRpb24uZGF5cyA9IDFcbiAgICAgIGVsc2UgZHVyYXRpb24uaG91cnMgPSBNYXRoLnJvdW5kKDI0IC8gdXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcylcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnd2Vlayc6XG4gICAgICBkdXJhdGlvbi5kYXlzID0gTWF0aC5yb3VuZCg3IC8gdXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcyAtIDAuMDAwMSkgLy8gdGhpcyBpcyB0byBtYWtlIHN1cmUgdGhhdCAnMiB0aW1lcyBwZXIgd2VlaycgPSAnZXZlcnkgMyBkYXlzJ1xuICAgICAgYnJlYWtcbiAgICBjYXNlICdtb250aCc6XG4gICAgICBpZiAodXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcyA8PSAxKSBkdXJhdGlvbi5tb250aHMgPSAxXG4gICAgICBlbHNlIGR1cmF0aW9uLmRheXMgPSBNYXRoLnJvdW5kKDMwIC8gdXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcylcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAneWVhcic6XG4gICAgICBpZiAodXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcyA8PSAxKSBkdXJhdGlvbi55ZWFycyA9IDFcbiAgICAgIGVsc2UgZHVyYXRpb24ubW9udGhzID0gTWF0aC5yb3VuZCgxMiAvIHVwZGF0ZUZyZXF1ZW5jeS51cGRhdGVkVGltZXMpXG4gICAgICBicmVha1xuICB9XG4gIGNvbnN0IGhvdXJzID0gZHVyYXRpb24uaG91cnMgPiAwID8gYFQke2R1cmF0aW9uLmhvdXJzfUhgIDogJydcbiAgcmV0dXJuIGBQJHtkdXJhdGlvbi55ZWFyc31ZJHtkdXJhdGlvbi5tb250aHN9TSR7ZHVyYXRpb24uZGF5c31EJHtob3Vyc31gXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRSZXNwb25zaWJsZVBhcnR5KGNvbnRhY3Q6IEluZGl2aWR1YWwpIHtcbiAgY29uc3QgZnVsbE5hbWUgPSBuYW1lUGFydHNUb0Z1bGwoY29udGFjdC5maXJzdE5hbWUsIGNvbnRhY3QubGFzdE5hbWUpXG5cbiAgY29uc3QgY3JlYXRlQWRkcmVzcyA9IHBpcGUoXG4gICAgY3JlYXRlRWxlbWVudCgnZ21kOmFkZHJlc3MnKSxcbiAgICBjcmVhdGVDaGlsZCgnZ21kOkNJX0FkZHJlc3MnKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDplbGVjdHJvbmljTWFpbEFkZHJlc3MnKSxcbiAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoY29udGFjdC5lbWFpbClcbiAgICAgIClcbiAgICApLFxuICAgIGNvbnRhY3QuYWRkcmVzc1xuICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmRlbGl2ZXJ5UG9pbnQnKSxcbiAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnRhY3QuYWRkcmVzcylcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIDogbm9vcFxuICApXG5cbiAgY29uc3QgY3JlYXRlQ29udGFjdCA9IHBpcGUoXG4gICAgY3JlYXRlRWxlbWVudCgnZ21kOmNvbnRhY3RJbmZvJyksXG4gICAgY3JlYXRlQ2hpbGQoJ2dtZDpDSV9Db250YWN0JyksXG4gICAgY29udGFjdC5waG9uZVxuICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnBob25lJyksXG4gICAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOkNJX1RlbGVwaG9uZScpLFxuICAgICAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDp2b2ljZScpLFxuICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoY29udGFjdC5waG9uZSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIDogbm9vcCxcbiAgICBhcHBlbmRDaGlsZHJlbihjcmVhdGVBZGRyZXNzKSxcbiAgICAnd2Vic2l0ZScgaW4gY29udGFjdC5vcmdhbml6YXRpb25cbiAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpvbmxpbmVSZXNvdXJjZScpLFxuICAgICAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZScpLFxuICAgICAgICAgICAgd3JpdGVMaW5rYWdlKGNvbnRhY3Qub3JnYW5pemF0aW9uLndlYnNpdGUpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICA6IG5vb3BcbiAgKVxuXG4gIHJldHVybiBhcHBlbmRDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOkNJX1Jlc3BvbnNpYmxlUGFydHknKSxcbiAgICAgIGZ1bGxOYW1lXG4gICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6aW5kaXZpZHVhbE5hbWUnKSxcbiAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoZnVsbE5hbWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICBjb250YWN0LnBvc2l0aW9uXG4gICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6cG9zaXRpb25OYW1lJyksXG4gICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnRhY3QucG9zaXRpb24pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6b3JnYW5pc2F0aW9uTmFtZScpLFxuICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnRhY3Qub3JnYW5pemF0aW9uLm5hbWUpXG4gICAgICAgICksXG4gICAgICAgIGNyZWF0ZUNvbnRhY3QsXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnJvbGUnKSxcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOkNJX1JvbGVDb2RlJyksXG4gICAgICAgICAgYWRkQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI0NJX1JvbGVDb2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgYWRkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgZ2V0Um9sZUNvZGUoY29udGFjdC5yb2xlKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQ2l0YXRpb25EYXRlKFxuICBkYXRlOiBEYXRlLFxuICB0eXBlOiAncmV2aXNpb24nIHwgJ2NyZWF0aW9uJyB8ICdwdWJsaWNhdGlvbidcbikge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpkYXRlJywgJ2dtZDpDSV9EYXRlJyksXG4gICAgZmlsdGVyQXJyYXkoXG4gICAgICBwaXBlKFxuICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6Q0lfRGF0ZVR5cGVDb2RlJyksXG4gICAgICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdmFsdWUgPT09IHR5cGUpXG4gICAgICApXG4gICAgKSxcbiAgICBnZXRBdEluZGV4KDApLFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpkYXRlJyksXG4gICAgcmVtb3ZlQWxsQ2hpbGRyZW4oKSxcbiAgICB3cml0ZURhdGVUaW1lKGRhdGUpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZENpdGF0aW9uRGF0ZShcbiAgZGF0ZTogRGF0ZSxcbiAgdHlwZTogJ3JldmlzaW9uJyB8ICdjcmVhdGlvbicgfCAncHVibGljYXRpb24nXG4pIHtcbiAgcmV0dXJuIGFwcGVuZENoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZGF0ZScpLFxuICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpDSV9EYXRlJyksXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6ZGF0ZScpLCB3cml0ZURhdGVUaW1lKGRhdGUpKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZGF0ZVR5cGUnKSxcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOkNJX0RhdGVUeXBlQ29kZScpLFxuICAgICAgICAgIGFkZEF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNDSV9EYXRlVHlwZUNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBhZGRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCB0eXBlKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVLZXl3b3JkcygpIHtcbiAgcmV0dXJuIHJlbW92ZUNoaWxkcmVuKHBpcGUoZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6ZGVzY3JpcHRpdmVLZXl3b3JkcycpKSlcbn1cblxuLy8gcmV0dXJucyBhIDxnbWQ6dGhlc2F1cnVzTmFtZT4gZWxlbWVudFxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRoZXNhdXJ1cyh0aGVzYXVydXM6IEtleXdvcmRUaGVzYXVydXMpIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgY3JlYXRlRWxlbWVudCgnZ21kOnRoZXNhdXJ1c05hbWUnKSxcbiAgICBjcmVhdGVDaGlsZCgnZ21kOkNJX0NpdGF0aW9uJyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dGl0bGUnKSxcbiAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcodGhlc2F1cnVzLm5hbWUgfHwgdGhlc2F1cnVzLmlkKVxuICAgICAgKSxcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDppZGVudGlmaWVyJyksXG4gICAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6TURfSWRlbnRpZmllcicpLFxuICAgICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmNvZGUnKSxcbiAgICAgICAgICAgIHRoZXNhdXJ1cy51cmxcbiAgICAgICAgICAgICAgPyB3cml0ZUFuY2hvcih0aGVzYXVydXMudXJsLCB0aGVzYXVydXMuaWQpXG4gICAgICAgICAgICAgIDogd3JpdGVDaGFyYWN0ZXJTdHJpbmcodGhlc2F1cnVzLmlkKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kS2V5d29yZHMoa2V5d29yZHM6IEtleXdvcmRbXSkge1xuICAvLyBrZXl3b3JkcyBhcmUgZ3JvdXBlZCBieSB0aGVzYXVydXMgaWYgdGhleSBoYXZlIG9uZSwgb3RoZXJ3aXNlIGJ5IHR5cGVcbiAgY29uc3Qga2V5d29yZHNCeVRoZXNhdXJ1czogS2V5d29yZFtdW10gPSBrZXl3b3Jkcy5yZWR1Y2UoKGFjYywga2V5d29yZCkgPT4ge1xuICAgIGNvbnN0IHRoZXNhdXJ1c0lkID0ga2V5d29yZC50aGVzYXVydXM/LmlkXG4gICAgY29uc3QgdHlwZSA9IGtleXdvcmQudHlwZVxuICAgIGxldCBleGlzdGluZ0dyb3VwID0gYWNjLmZpbmQoKGdyb3VwKSA9PlxuICAgICAgdGhlc2F1cnVzSWRcbiAgICAgICAgPyBncm91cFswXS50aGVzYXVydXM/LmlkID09PSB0aGVzYXVydXNJZFxuICAgICAgICA6IGdyb3VwWzBdLnR5cGUgPT09IHR5cGUgJiYgIWdyb3VwWzBdLnRoZXNhdXJ1c1xuICAgIClcbiAgICBpZiAoIWV4aXN0aW5nR3JvdXApIHtcbiAgICAgIGV4aXN0aW5nR3JvdXAgPSBbXVxuICAgICAgYWNjLnB1c2goZXhpc3RpbmdHcm91cClcbiAgICB9XG4gICAgZXhpc3RpbmdHcm91cC5wdXNoKGtleXdvcmQpXG4gICAgcmV0dXJuIGFjY1xuICB9LCBbXSlcbiAgcmV0dXJuIGFwcGVuZENoaWxkcmVuKFxuICAgIC4uLmtleXdvcmRzQnlUaGVzYXVydXMubWFwKChrZXl3b3JkcykgPT5cbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpkZXNjcmlwdGl2ZUtleXdvcmRzJyksXG4gICAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6TURfS2V5d29yZHMnKSxcbiAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDp0eXBlJyksXG4gICAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX0tleXdvcmRUeXBlQ29kZScpLFxuICAgICAgICAgICAgYWRkQXR0cmlidXRlKFxuICAgICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9LZXl3b3JkVHlwZUNvZGUnXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYWRkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywga2V5d29yZHNbMF0udHlwZSlcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIGtleXdvcmRzWzBdLnRoZXNhdXJ1c1xuICAgICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oY3JlYXRlVGhlc2F1cnVzKGtleXdvcmRzWzBdLnRoZXNhdXJ1cykpXG4gICAgICAgICAgOiBub29wLFxuICAgICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAuLi5rZXl3b3Jkcy5tYXAoKGtleXdvcmQpID0+XG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6a2V5d29yZCcpLFxuICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhrZXl3b3JkLmxhYmVsKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uc3RyYWludChcbiAgY29uc3RyYWludDogQ29uc3RyYWludCxcbiAgdHlwZTogJ2xlZ2FsJyB8ICdzZWN1cml0eScgfCAnb3RoZXInXG4pIHtcbiAgaWYgKHR5cGUgPT09ICdzZWN1cml0eScpIHtcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyksXG4gICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX1NlY3VyaXR5Q29uc3RyYWludHMnKSxcbiAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpjbGFzc2lmaWNhdGlvbicpLFxuICAgICAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6TURfQ2xhc3NpZmljYXRpb25Db2RlJyksXG4gICAgICAgICAgYWRkQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX0NsYXNzaWZpY2F0aW9uQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIGFkZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsICdyZXN0cmljdGVkJylcbiAgICAgICAgKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnN0cmFpbnQudGV4dClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbGVnYWwnKSB7XG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycpLFxuICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9MZWdhbENvbnN0cmFpbnRzJyksXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6YWNjZXNzQ29uc3RyYWludHMnKSxcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX1Jlc3RyaWN0aW9uQ29kZScpLFxuICAgICAgICAgIGFkZEF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9SZXN0cmljdGlvbkNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBhZGRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCAnb3RoZXJSZXN0cmljdGlvbnMnKVxuICAgICAgICApLFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpvdGhlckNvbnN0cmFpbnRzJyksXG4gICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoY29uc3RyYWludC50ZXh0KVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHBpcGUoXG4gICAgY3JlYXRlRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX0NvbnN0cmFpbnRzJyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhjb25zdHJhaW50LnRleHQpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVPdGhlckNvbnN0cmFpbnRzKCkge1xuICByZXR1cm4gcmVtb3ZlQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyksXG4gICAgICBmaWx0ZXJBcnJheShcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpNRF9Db25zdHJhaW50cycsICdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgICAgICAgIChhcnJheSkgPT4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVTZWN1cml0eUNvbnN0cmFpbnRzKCkge1xuICByZXR1cm4gcmVtb3ZlQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyksXG4gICAgICBmaWx0ZXJBcnJheShcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpNRF9TZWN1cml0eUNvbnN0cmFpbnRzJywgJ2dtZDp1c2VMaW1pdGF0aW9uJyksXG4gICAgICAgICAgKGFycmF5KSA9PiBhcnJheS5sZW5ndGggPiAwXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxlZ2FsQ29uc3RyYWludHMoKSB7XG4gIHJldHVybiByZW1vdmVDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICAgIGZpbHRlckFycmF5KFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICAgICAgICdnbWQ6TURfTGVnYWxDb25zdHJhaW50cycsXG4gICAgICAgICAgICAnZ21kOmFjY2Vzc0NvbnN0cmFpbnRzJyxcbiAgICAgICAgICAgICdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgbWFwQXJyYXkocmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpKSxcbiAgICAgICAgICAocmVzdHJpY3Rpb25Db2RlcykgPT5cbiAgICAgICAgICAgIHJlc3RyaWN0aW9uQ29kZXMuZXZlcnkoKGNvZGUpID0+IGNvZGUgIT09ICdsaWNlbnNlJylcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGljZW5zZXMoKSB7XG4gIHJldHVybiByZW1vdmVDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICAgIGZpbHRlckFycmF5KFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICAgICAgICdnbWQ6TURfTGVnYWxDb25zdHJhaW50cycsXG4gICAgICAgICAgICAnZ21kOmFjY2Vzc0NvbnN0cmFpbnRzJyxcbiAgICAgICAgICAgICdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgbWFwQXJyYXkocmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpKSxcbiAgICAgICAgICAocmVzdHJpY3Rpb25Db2RlcykgPT5cbiAgICAgICAgICAgIHJlc3RyaWN0aW9uQ29kZXMuc29tZSgoY29kZSkgPT4gY29kZSA9PT0gJ2xpY2Vuc2UnKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMaWNlbnNlKGxpY2Vuc2U6IENvbnN0cmFpbnQpIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgY3JlYXRlRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX0xlZ2FsQ29uc3RyYWludHMnKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDphY2Nlc3NDb25zdHJhaW50cycpLFxuICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX1Jlc3RyaWN0aW9uQ29kZScpLFxuICAgICAgICBhZGRBdHRyaWJ1dGUoXG4gICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9SZXN0cmljdGlvbkNvZGUnXG4gICAgICAgICksXG4gICAgICAgIGFkZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsICdsaWNlbnNlJylcbiAgICAgICksXG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6YWNjZXNzQ29uc3RyYWludHMnKSxcbiAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9SZXN0cmljdGlvbkNvZGUnKSxcbiAgICAgICAgYWRkQXR0cmlidXRlKFxuICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfUmVzdHJpY3Rpb25Db2RlJ1xuICAgICAgICApLFxuICAgICAgICBhZGRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCAnb3RoZXJSZXN0cmljdGlvbnMnKVxuICAgICAgKSxcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpvdGhlckNvbnN0cmFpbnRzJyksXG4gICAgICAgICd1cmwnIGluIGxpY2Vuc2VcbiAgICAgICAgICA/IHdyaXRlQW5jaG9yKGxpY2Vuc2UudXJsLCBsaWNlbnNlLnRleHQpXG4gICAgICAgICAgOiB3cml0ZUNoYXJhY3RlclN0cmluZyhsaWNlbnNlLnRleHQpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEaXN0cmlidXRpb25zKCkge1xuICByZXR1cm4gcGlwZShyZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOmRpc3RyaWJ1dGlvbkluZm8nKSlcbn1cblxuZnVuY3Rpb24gYXBwZW5kRGlzdHJpYnV0aW9uRm9ybWF0KG1pbWVUeXBlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGFwcGVuZENoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZGlzdHJpYnV0aW9uRm9ybWF0JyksXG4gICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX0Zvcm1hdCcpLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnZ21kOm5hbWUnKSwgd3JpdGVDaGFyYWN0ZXJTdHJpbmcobWltZVR5cGUpKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dmVyc2lvbicpLFxuICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKCcxLjAnKSAvLyBoYXJkY29kaW5nIHRoaXMgYXMgaXQgbW9zdCBsaWtlbHkgd29uJ3QgYmUgdXNlZCBidXQgaXMgbWFuZGF0b3J5XG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURpc3RyaWJ1dGlvbkluZm8oKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpkaXN0cmlidXRpb25JbmZvJyksXG4gICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9EaXN0cmlidXRpb24nKVxuICApXG59XG5cbi8vIGFwcGx5IHRvIE1EX0Rpc3RyaWJ1dGlvblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZERpc3RyaWJ1dGlvbihcbiAgZGlzdHJpYnV0aW9uOiBEYXRhc2V0RGlzdHJpYnV0aW9uLFxuICBhcHBlbmRGb3JtYXRGbjogKFxuICAgIG1pbWVUeXBlOiBzdHJpbmdcbiAgKSA9PiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PlxuKSB7XG4gIGxldCBuYW1lOiBzdHJpbmdcbiAgbGV0IGZ1bmN0aW9uQ29kZTogc3RyaW5nXG4gIGxldCBwcm90b2NvbDogc3RyaW5nXG4gIGlmIChkaXN0cmlidXRpb24udHlwZSA9PT0gJ3NlcnZpY2UnKSB7XG4gICAgbmFtZSA9IGRpc3RyaWJ1dGlvbi5pZGVudGlmaWVySW5TZXJ2aWNlIC8vIHRoaXMgaXMgZm9yIEdlb05ldHdvcmsgdG8ga25vdyB0aGUgbGF5ZXIgbmFtZVxuICAgIGZ1bmN0aW9uQ29kZSA9ICdkb3dubG9hZCdcbiAgICBwcm90b2NvbCA9IGdldERpc3RyaWJ1dGlvblByb3RvY29sKGRpc3RyaWJ1dGlvbilcbiAgfSBlbHNlIGlmIChkaXN0cmlidXRpb24udHlwZSA9PT0gJ2Rvd25sb2FkJykge1xuICAgIG5hbWUgPSBkaXN0cmlidXRpb24ubmFtZVxuICAgIGZ1bmN0aW9uQ29kZSA9ICdkb3dubG9hZCdcbiAgICBwcm90b2NvbCA9ICdXV1c6RE9XTkxPQUQnXG4gIH0gZWxzZSB7XG4gICAgbmFtZSA9IGRpc3RyaWJ1dGlvbi5uYW1lXG4gICAgZnVuY3Rpb25Db2RlID0gJ2luZm9ybWF0aW9uJ1xuICAgIHByb3RvY29sID0gJ1dXVzpMSU5LJ1xuICB9XG4gIGNvbnN0IGFwcGVuZFRyYW5zZmVyT3B0aW9ucyA9IGFwcGVuZENoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dHJhbnNmZXJPcHRpb25zJyksXG4gICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX0RpZ2l0YWxUcmFuc2Zlck9wdGlvbnMnKSxcbiAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6b25MaW5lJyksXG4gICAgICBjcmVhdGVDaGlsZCgnZ21kOkNJX09ubGluZVJlc291cmNlJyksXG4gICAgICB3cml0ZUxpbmthZ2UoZGlzdHJpYnV0aW9uLnVybCksXG4gICAgICAnZGVzY3JpcHRpb24nIGluIGRpc3RyaWJ1dGlvblxuICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmRlc2NyaXB0aW9uJyksXG4gICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGRpc3RyaWJ1dGlvbi5kZXNjcmlwdGlvbilcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIDogbm9vcCxcbiAgICAgIG5hbWUgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6bmFtZScpLCB3cml0ZUNoYXJhY3RlclN0cmluZyhuYW1lKSlcbiAgICAgICAgICApXG4gICAgICAgIDogbm9vcCxcbiAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICBwaXBlKGNyZWF0ZUVsZW1lbnQoJ2dtZDpwcm90b2NvbCcpLCB3cml0ZUNoYXJhY3RlclN0cmluZyhwcm90b2NvbCkpLFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpmdW5jdGlvbicpLFxuICAgICAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6Q0lfT25MaW5lRnVuY3Rpb25Db2RlJyksXG4gICAgICAgICAgYWRkQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI0NJX09uTGluZUZ1bmN0aW9uQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIGFkZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGZ1bmN0aW9uQ29kZSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICAnbWltZVR5cGUnIGluIGRpc3RyaWJ1dGlvbiA/IGFwcGVuZEZvcm1hdEZuKGRpc3RyaWJ1dGlvbi5taW1lVHlwZSkgOiBub29wLFxuICAgIGFwcGVuZFRyYW5zZmVyT3B0aW9uc1xuICApXG59XG5cbi8qKlxuICogTG9va3MgZm9yIHNydjpTVl9TZXJ2aWNlSWRlbnRpZmljYXRpb24gb3IgZ21kOk1EX0RhdGFJZGVudGlmaWNhdGlvbiBlbGVtZW50XG4gKiBkZXBlbmRpbmcgb24gcmVjb3JkIHR5cGUsIGNyZWF0ZSBpZiBtaXNzaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpIHtcbiAgcmV0dXJuIChyb290RWw6IFhtbEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBraW5kID0gcmVhZEtpbmQocm9vdEVsKVxuICAgIGxldCBlbHROYW1lID0gJ2dtZDpNRF9EYXRhSWRlbnRpZmljYXRpb24nXG4gICAgaWYgKGtpbmQgPT09ICdzZXJ2aWNlJykgZWx0TmFtZSA9ICdzcnY6U1ZfU2VydmljZUlkZW50aWZpY2F0aW9uJ1xuICAgIHJldHVybiBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmlkZW50aWZpY2F0aW9uSW5mbycsIGVsdE5hbWUpKHJvb3RFbClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZE9yQ3JlYXRlRGlzdHJpYnV0aW9uKCkge1xuICByZXR1cm4gKHJvb3RFbDogWG1sRWxlbWVudCkgPT4ge1xuICAgIHJldHVybiBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZShcbiAgICAgICdnbWQ6ZGlzdHJpYnV0aW9uSW5mbycsXG4gICAgICAnZ21kOk1EX0Rpc3RyaWJ1dGlvbidcbiAgICApKHJvb3RFbClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVVbmlxdWVJZGVudGlmaWVyKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDpmaWxlSWRlbnRpZmllcicpLFxuICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKHJlY29yZC51bmlxdWVJZGVudGlmaWVyKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlS2luZChyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6aGllcmFyY2h5TGV2ZWwnLCAnZ21kOk1EX1Njb3BlQ29kZScpLFxuICAgIGFkZEF0dHJpYnV0ZShcbiAgICAgICdjb2RlTGlzdCcsXG4gICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9TY29wZUNvZGUnXG4gICAgKSxcbiAgICBhZGRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCByZWNvcmQua2luZClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZU93bmVyT3JnYW5pemF0aW9uKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIC8vIGlmIG5vIGNvbnRhY3QgbWF0Y2hlcyB0aGUgb3duZXIgb3JnLCBjcmVhdGUgYW4gZW1wdHkgb25lXG4gIGNvbnN0IG93bmVyQ29udGFjdDogSW5kaXZpZHVhbCA9IHJlY29yZC5jb250YWN0cy5maW5kKFxuICAgIChjb250YWN0KSA9PiBjb250YWN0Lm9yZ2FuaXphdGlvbi5uYW1lID09PSByZWNvcmQub3duZXJPcmdhbml6YXRpb24ubmFtZVxuICApXG4gIHBpcGUoXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDpjb250YWN0JyksXG4gICAgcmVtb3ZlQWxsQ2hpbGRyZW4oKSxcbiAgICBhcHBlbmRSZXNwb25zaWJsZVBhcnR5KFxuICAgICAgb3duZXJDb250YWN0XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4ub3duZXJDb250YWN0LFxuICAgICAgICAgICAgLy8gb3duZXIgcmVzcG9uc2libGUgcGFydHkgaXMgYWx3YXlzIHBvaW50IG9mIGNvbnRhY3RcbiAgICAgICAgICAgIHJvbGU6ICdwb2ludF9vZl9jb250YWN0JyxcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgb3JnYW5pemF0aW9uOiByZWNvcmQub3duZXJPcmdhbml6YXRpb24sXG4gICAgICAgICAgICBlbWFpbDogJycsXG4gICAgICAgICAgICByb2xlOiAncG9pbnRfb2ZfY29udGFjdCcsXG4gICAgICAgICAgfVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVJlY29yZFVwZGF0ZWQocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ21kOmRhdGVTdGFtcCcpLFxuICAgIHJlbW92ZUFsbENoaWxkcmVuKCksXG4gICAgd3JpdGVEYXRlVGltZShyZWNvcmQucmVjb3JkVXBkYXRlZClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVRpdGxlKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmNpdGF0aW9uJywgJ2dtZDpDSV9DaXRhdGlvbicsICdnbWQ6dGl0bGUnKSxcbiAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhyZWNvcmQudGl0bGUpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVBYnN0cmFjdChyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDphYnN0cmFjdCcpLFxuICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKHJlY29yZC5hYnN0cmFjdClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVN0YXR1cyhyZWNvcmQ6IERhdGFzZXRSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpzdGF0dXMnLCAnZ21kOk1EX1Byb2dyZXNzQ29kZScpLFxuICAgIGFkZEF0dHJpYnV0ZShcbiAgICAgICdjb2RlTGlzdCcsXG4gICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9Qcm9ncmVzc0NvZGUnXG4gICAgKSxcbiAgICBhZGRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBnZXRQcm9ncmVzc0NvZGUocmVjb3JkLnN0YXR1cykpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVDb250YWN0cyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6Y29udGFjdCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLmNvbnRhY3RzLm1hcCgoY29udGFjdCkgPT5cbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6Y29udGFjdCcpLCBhcHBlbmRSZXNwb25zaWJsZVBhcnR5KGNvbnRhY3QpKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUNvbnRhY3RzRm9yUmVzb3VyY2UoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6cG9pbnRPZkNvbnRhY3QnKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOmNvbnRhY3QnKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC5jb250YWN0c0ZvclJlc291cmNlLm1hcCgoY29udGFjdCkgPT5cbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6cG9pbnRPZkNvbnRhY3QnKSxcbiAgICAgICAgICBhcHBlbmRSZXNwb25zaWJsZVBhcnR5KGNvbnRhY3QpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVLZXl3b3JkcyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlS2V5d29yZHMoKSxcbiAgICBhcHBlbmRLZXl3b3JkcyhyZWNvcmQua2V5d29yZHMpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVUb3BpY3MocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6dG9waWNDYXRlZ29yeScpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLnRvcGljcy5tYXAoKHRvcGljKSA9PlxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDp0b3BpY0NhdGVnb3J5JyksXG4gICAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9Ub3BpY0NhdGVnb3J5Q29kZScpLFxuICAgICAgICAgIHNldFRleHRDb250ZW50KHRvcGljKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlTGljZW5zZXMocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIHJlbW92ZUxpY2Vuc2VzKCksXG4gICAgYXBwZW5kQ2hpbGRyZW4oLi4ucmVjb3JkLmxpY2Vuc2VzLm1hcChjcmVhdGVMaWNlbnNlKSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUxlZ2FsQ29uc3RyYWludHMoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIHJlbW92ZUxlZ2FsQ29uc3RyYWludHMoKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC5sZWdhbENvbnN0cmFpbnRzLm1hcCgoYykgPT4gY3JlYXRlQ29uc3RyYWludChjLCAnbGVnYWwnKSlcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVTZWN1cml0eUNvbnN0cmFpbnRzKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVTZWN1cml0eUNvbnN0cmFpbnRzKCksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQuc2VjdXJpdHlDb25zdHJhaW50cy5tYXAoKGMpID0+IGNyZWF0ZUNvbnN0cmFpbnQoYywgJ3NlY3VyaXR5JykpXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlT3RoZXJDb25zdHJhaW50cyhcbiAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlT3RoZXJDb25zdHJhaW50cygpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLm90aGVyQ29uc3RyYWludHMubWFwKChjKSA9PiBjcmVhdGVDb25zdHJhaW50KGMsICdvdGhlcicpKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVVwZGF0ZUZyZXF1ZW5jeShcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDpyZXNvdXJjZU1haW50ZW5hbmNlJyksXG4gICAgcmVtb3ZlQWxsQ2hpbGRyZW4oKSxcbiAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ21kOk1EX01haW50ZW5hbmNlSW5mb3JtYXRpb24nKSxcbiAgICB0eXBlb2YgcmVjb3JkLnVwZGF0ZUZyZXF1ZW5jeSA9PT0gJ29iamVjdCdcbiAgICAgID8gcGlwZShcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOnVzZXJEZWZpbmVkTWFpbnRlbmFuY2VGcmVxdWVuY3knKSxcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ3RzOlRNX1BlcmlvZER1cmF0aW9uJyksXG4gICAgICAgICAgc2V0VGV4dENvbnRlbnQoZ2V0SVNPRHVyYXRpb24ocmVjb3JkLnVwZGF0ZUZyZXF1ZW5jeSkpXG4gICAgICAgIClcbiAgICAgIDogcGlwZShcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOm1haW50ZW5hbmNlQW5kVXBkYXRlRnJlcXVlbmN5JyksXG4gICAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9NYWludGVuYW5jZUZyZXF1ZW5jeUNvZGUnKSxcbiAgICAgICAgICBhZGRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfTWFpbnRlbmFuY2VGcmVxdWVuY3lDb2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgYWRkQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0VmFsdWUnLFxuICAgICAgICAgICAgZ2V0TWFpbnRlbmFuY2VGcmVxdWVuY3lDb2RlKHJlY29yZC51cGRhdGVGcmVxdWVuY3kpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVSZXNvdXJjZUNyZWF0ZWQoXG4gIHJlY29yZDogRGF0YXNldFJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgaWYgKCEoJ3Jlc291cmNlQ3JlYXRlZCcgaW4gcmVjb3JkKSkgcmV0dXJuXG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmNpdGF0aW9uJywgJ2dtZDpDSV9DaXRhdGlvbicpLFxuICAgIGZhbGxiYWNrKFxuICAgICAgdXBkYXRlQ2l0YXRpb25EYXRlKHJlY29yZC5yZXNvdXJjZUNyZWF0ZWQsICdjcmVhdGlvbicpLFxuICAgICAgYXBwZW5kQ2l0YXRpb25EYXRlKHJlY29yZC5yZXNvdXJjZUNyZWF0ZWQsICdjcmVhdGlvbicpXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUmVzb3VyY2VVcGRhdGVkKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIGlmICghKCdyZXNvdXJjZVVwZGF0ZWQnIGluIHJlY29yZCkpIHJldHVyblxuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpjaXRhdGlvbicsICdnbWQ6Q0lfQ2l0YXRpb24nKSxcbiAgICBmYWxsYmFjayhcbiAgICAgIHVwZGF0ZUNpdGF0aW9uRGF0ZShyZWNvcmQucmVzb3VyY2VVcGRhdGVkLCAncmV2aXNpb24nKSxcbiAgICAgIGFwcGVuZENpdGF0aW9uRGF0ZShyZWNvcmQucmVzb3VyY2VVcGRhdGVkLCAncmV2aXNpb24nKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVJlc291cmNlUHVibGlzaGVkKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIGlmICghKCdyZXNvdXJjZVB1Ymxpc2hlZCcgaW4gcmVjb3JkKSkgcmV0dXJuXG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmNpdGF0aW9uJywgJ2dtZDpDSV9DaXRhdGlvbicpLFxuICAgIGZhbGxiYWNrKFxuICAgICAgdXBkYXRlQ2l0YXRpb25EYXRlKHJlY29yZC5yZXNvdXJjZVB1Ymxpc2hlZCwgJ3B1YmxpY2F0aW9uJyksXG4gICAgICBhcHBlbmRDaXRhdGlvbkRhdGUocmVjb3JkLnJlc291cmNlUHVibGlzaGVkLCAncHVibGljYXRpb24nKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVNwYXRpYWxSZXByZXNlbnRhdGlvbihcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoXG4gICAgICAnZ21kOnNwYXRpYWxSZXByZXNlbnRhdGlvblR5cGUnLFxuICAgICAgJ2dtZDpNRF9TcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlQ29kZSdcbiAgICApLFxuICAgIGFkZEF0dHJpYnV0ZShcbiAgICAgICdjb2RlTGlzdCcsXG4gICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9TcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlQ29kZSdcbiAgICApLFxuICAgIGFkZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIHJlY29yZC5zcGF0aWFsUmVwcmVzZW50YXRpb24pXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVHcmFwaGljT3ZlcnZpZXdzKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOmdyYXBoaWNPdmVydmlldycpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLm92ZXJ2aWV3cy5tYXAoKG92ZXJ2aWV3KSA9PlxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpncmFwaGljT3ZlcnZpZXcnKSxcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX0Jyb3dzZUdyYXBoaWMnKSxcbiAgICAgICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpmaWxlTmFtZScpLFxuICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhvdmVydmlldy51cmwudG9TdHJpbmcoKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgICdkZXNjcmlwdGlvbicgaW4gb3ZlcnZpZXdcbiAgICAgICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpmaWxlRGVzY3JpcHRpb24nKSxcbiAgICAgICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKG92ZXJ2aWV3LmRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBub29wXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVEaXN0cmlidXRpb25zKHJlY29yZDogRGF0YXNldFJlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgcmVtb3ZlRGlzdHJpYnV0aW9ucygpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLmRpc3RyaWJ1dGlvbnMubWFwKChkKSA9PlxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZURpc3RyaWJ1dGlvbkluZm8oKSxcbiAgICAgICAgICBhcHBlbmREaXN0cmlidXRpb24oZCwgYXBwZW5kRGlzdHJpYnV0aW9uRm9ybWF0KVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlTGluZWFnZShyZWNvcmQ6IERhdGFzZXRSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKFxuICAgICAgJ2dtZDpkYXRhUXVhbGl0eUluZm8nLFxuICAgICAgJ2dtZDpEUV9EYXRhUXVhbGl0eScsXG4gICAgICAnZ21kOmxpbmVhZ2UnLFxuICAgICAgJ2dtZDpMSV9MaW5lYWdlJyxcbiAgICAgICdnbWQ6c3RhdGVtZW50J1xuICAgICksXG4gICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcocmVjb3JkLmxpbmVhZ2UpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VydmljZUVuZHBvaW50UHJvdG9jb2woZW5kcG9pbnQ6IFNlcnZpY2VFbmRwb2ludCk6IHN0cmluZyB7XG4gIHN3aXRjaCAoZW5kcG9pbnQucHJvdG9jb2wudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ3dmcyc6XG4gICAgICByZXR1cm4gJ09HQzpXRlMnXG4gICAgY2FzZSAnd21zJzpcbiAgICAgIHJldHVybiAnT0dDOldNUydcbiAgICBjYXNlICd3cHMnOlxuICAgICAgcmV0dXJuICdPR0M6V1BTJ1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZW5kcG9pbnQucHJvdG9jb2xcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT25saW5lUmVzb3VyY2Uob25saW5lUmVzb3VyY2U6IFNlcnZpY2VPbmxpbmVSZXNvdXJjZSkge1xuICBsZXQgbGlua2FnZVVybCwgZnVuY3Rpb25Db2RlLCBwcm90b2NvbFxuICBpZiAob25saW5lUmVzb3VyY2UudHlwZSA9PT0gJ2VuZHBvaW50Jykge1xuICAgIGxpbmthZ2VVcmwgPSBvbmxpbmVSZXNvdXJjZS5lbmRwb2ludFVybC50b1N0cmluZygpXG4gICAgcHJvdG9jb2wgPSBnZXRTZXJ2aWNlRW5kcG9pbnRQcm90b2NvbChvbmxpbmVSZXNvdXJjZSlcbiAgICBmdW5jdGlvbkNvZGUgPSAnZG93bmxvYWQnXG4gIH0gZWxzZSB7XG4gICAgbGlua2FnZVVybCA9IG9ubGluZVJlc291cmNlLnVybC50b1N0cmluZygpXG4gICAgZnVuY3Rpb25Db2RlID0gJ2luZm9ybWF0aW9uJ1xuICAgIHByb3RvY29sID0gJ1dXVzpMSU5LJ1xuICB9XG4gIGNvbnN0IGFwcGVuZFRyYW5zZmVyT3B0aW9ucyA9IGFwcGVuZENoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dHJhbnNmZXJPcHRpb25zJyksXG4gICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX0RpZ2l0YWxUcmFuc2Zlck9wdGlvbnMnKSxcbiAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6b25MaW5lJyksXG4gICAgICBjcmVhdGVDaGlsZCgnZ21kOkNJX09ubGluZVJlc291cmNlJyksXG4gICAgICB3cml0ZUxpbmthZ2UobGlua2FnZVVybCksXG4gICAgICAnZGVzY3JpcHRpb24nIGluIG9ubGluZVJlc291cmNlXG4gICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZGVzY3JpcHRpb24nKSxcbiAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcob25saW5lUmVzb3VyY2UuZGVzY3JpcHRpb24pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICAnbmFtZScgaW4gb25saW5lUmVzb3VyY2VcbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpuYW1lJyksXG4gICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKG9ubGluZVJlc291cmNlLm5hbWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6cHJvdG9jb2wnKSwgd3JpdGVDaGFyYWN0ZXJTdHJpbmcocHJvdG9jb2wpKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZnVuY3Rpb24nKSxcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOkNJX09uTGluZUZ1bmN0aW9uQ29kZScpLFxuICAgICAgICAgIGFkZEF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNDSV9PbkxpbmVGdW5jdGlvbkNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBhZGRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBmdW5jdGlvbkNvZGUpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbiAgcmV0dXJuIHBpcGUoXG4gICAgY3JlYXRlRWxlbWVudCgnZ21kOmRpc3RyaWJ1dGlvbkluZm8nKSxcbiAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX0Rpc3RyaWJ1dGlvbicpLFxuICAgIGFwcGVuZFRyYW5zZmVyT3B0aW9uc1xuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZU9ubGluZVJlc291cmNlcyhcbiAgcmVjb3JkOiBTZXJ2aWNlUmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIHJlbW92ZURpc3RyaWJ1dGlvbnMoKSxcbiAgICBhcHBlbmRDaGlsZHJlbiguLi5yZWNvcmQub25saW5lUmVzb3VyY2VzLm1hcChjcmVhdGVPbmxpbmVSZXNvdXJjZSkpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVUZW1wb3JhbEV4dGVudHMoXG4gIHJlY29yZDogRGF0YXNldFJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6ZXh0ZW50JywgJ2dtZDpFWF9FeHRlbnQnKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOnRlbXBvcmFsRWxlbWVudCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLnRlbXBvcmFsRXh0ZW50cy5tYXAoKGV4dGVudCkgPT5cbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dGVtcG9yYWxFbGVtZW50JyksXG4gICAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpFWF9UZW1wb3JhbEV4dGVudCcpLFxuICAgICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgJ3N0YXJ0JyBpbiBleHRlbnQgJiYgJ2VuZCcgaW4gZXh0ZW50XG4gICAgICAgICAgICAgID8gcGlwZShcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpleHRlbnQnKSxcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZUNoaWxkKCdnbWw6VGltZVBlcmlvZCcpLFxuICAgICAgICAgICAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21sOmJlZ2luUG9zaXRpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW50LnN0YXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gc2V0VGV4dENvbnRlbnQoZm9ybWF0KGV4dGVudC5zdGFydCwgJ3l5eXktTU0tZGQnKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhZGRBdHRyaWJ1dGUoJ2luZGV0ZXJtaW5hdGVQb3NpdGlvbicsICd1bmtub3duJylcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21sOmVuZFBvc2l0aW9uJyksXG4gICAgICAgICAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVudC5lbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZXRUZXh0Q29udGVudChmb3JtYXQoZXh0ZW50LmVuZCwgJ3l5eXktTU0tZGQnKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhZGRBdHRyaWJ1dGUoJ2luZGV0ZXJtaW5hdGVQb3NpdGlvbicsICd1bmtub3duJylcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogcGlwZShcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpleHRlbnQnKSxcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZUNoaWxkKCdnbWw6VGltZUluc3RhbnQnKSxcbiAgICAgICAgICAgICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtbDp0aW1lUG9zaXRpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW50LnN0YXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gc2V0VGV4dENvbnRlbnQoZm9ybWF0KGV4dGVudC5zdGFydCwgJ3l5eXktTU0tZGQnKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhZGRBdHRyaWJ1dGUoJ2luZGV0ZXJtaW5hdGVQb3NpdGlvbicsICd1bmtub3duJylcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbn1cbiJdfQ==
414
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtcGFydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjL2xpYi9pc28xOTEzOS93cml0ZS1wYXJ0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFnQkEsT0FBTyxNQUFNLE1BQU0saUJBQWlCLENBQUE7QUFDcEMsT0FBTyxFQUVMLFFBQVEsRUFDUixXQUFXLEVBQ1gsVUFBVSxFQUNWLEdBQUcsRUFDSCxRQUFRLEVBQ1IsSUFBSSxFQUNKLElBQUksRUFDSixHQUFHLEdBQ0osTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBRUwsWUFBWSxFQUNaLGNBQWMsRUFDZCxXQUFXLEVBQ1gsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUN2QixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLGNBQWMsR0FDZixNQUFNLGNBQWMsQ0FBQTtBQUNyQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ3ZDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUd6RCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLElBQVk7SUFFWixPQUFPLEdBQUcsQ0FDUixJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDckUsQ0FBQTtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUMxQixHQUFRO0lBRVIsT0FBTyxHQUFHLENBQ1IsSUFBSSxDQUNGLHVCQUF1QixDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsRUFDakQsY0FBYyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUMvQixDQUNGLENBQUE7QUFDSCxDQUFDO0FBRUQs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QUUsU0FBUyxDQUFDLENBQ3JELENBQ0YsQ0FDRixDQUNGLENBQ04sQ0FDRixDQUNGLENBQ0YsQ0FDRixDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENhdGFsb2dSZWNvcmQsXG4gIENvbnN0cmFpbnQsXG4gIERhdGFzZXREaXN0cmlidXRpb24sXG4gIERhdGFzZXRSZWNvcmQsXG4gIERhdGFzZXRTZXJ2aWNlRGlzdHJpYnV0aW9uLFxuICBJbmRpdmlkdWFsLFxuICBLZXl3b3JkLFxuICBSZWNvcmRTdGF0dXMsXG4gIFJvbGUsXG4gIFNlcnZpY2VFbmRwb2ludCxcbiAgU2VydmljZU9ubGluZVJlc291cmNlLFxuICBTZXJ2aWNlUmVjb3JkLFxuICBVcGRhdGVGcmVxdWVuY3lDb2RlLFxuICBVcGRhdGVGcmVxdWVuY3lDdXN0b20sXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCBmb3JtYXQgZnJvbSAnZGF0ZS1mbnMvZm9ybWF0J1xuaW1wb3J0IHtcbiAgQ2hhaW5hYmxlRnVuY3Rpb24sXG4gIGZhbGxiYWNrLFxuICBmaWx0ZXJBcnJheSxcbiAgZ2V0QXRJbmRleCxcbiAgbWFwLFxuICBtYXBBcnJheSxcbiAgbm9vcCxcbiAgcGlwZSxcbiAgdGFwLFxufSBmcm9tICcuLi9mdW5jdGlvbi11dGlscydcbmltcG9ydCB7XG4gIFhtbEVsZW1lbnQsXG4gIGFkZEF0dHJpYnV0ZSxcbiAgYXBwZW5kQ2hpbGRyZW4sXG4gIGNyZWF0ZUNoaWxkLFxuICBjcmVhdGVFbGVtZW50LFxuICBmaW5kQ2hpbGRFbGVtZW50LFxuICBmaW5kQ2hpbGRPckNyZWF0ZSxcbiAgZmluZENoaWxkcmVuRWxlbWVudCxcbiAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUsXG4gIGZpbmROZXN0ZWRFbGVtZW50cyxcbiAgcmVhZEF0dHJpYnV0ZSxcbiAgcmVtb3ZlQWxsQ2hpbGRyZW4sXG4gIHJlbW92ZUNoaWxkcmVuLFxuICByZW1vdmVDaGlsZHJlbkJ5TmFtZSxcbiAgc2V0VGV4dENvbnRlbnQsXG59IGZyb20gJy4uL3htbC11dGlscydcbmltcG9ydCB7IHJlYWRLaW5kIH0gZnJvbSAnLi9yZWFkLXBhcnRzJ1xuaW1wb3J0IHsgbmFtZVBhcnRzVG9GdWxsIH0gZnJvbSAnLi91dGlscy9pbmRpdmlkdWFsLW5hbWUnXG5pbXBvcnQgeyBUaGVzYXVydXNNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3RoZXNhdXJ1cydcblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKFxuICB0ZXh0OiBzdHJpbmdcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHRhcChcbiAgICBwaXBlKGZpbmRDaGlsZE9yQ3JlYXRlKCdnY286Q2hhcmFjdGVyU3RyaW5nJyksIHNldFRleHRDb250ZW50KHRleHQpKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUxpbmthZ2UoXG4gIHVybDogVVJMXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiB0YXAoXG4gICAgcGlwZShcbiAgICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6bGlua2FnZScsICdnbWQ6VVJMJyksXG4gICAgICBzZXRUZXh0Q29udGVudCh1cmwudG9TdHJpbmcoKSlcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlQW5jaG9yKFxuICB1cmw6IFVSTCxcbiAgdGV4dD86IHN0cmluZ1xuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ214OkFuY2hvcicpLFxuICAgICAgYWRkQXR0cmlidXRlKCd4bGluazpocmVmJywgdXJsLnRvU3RyaW5nKCkpLFxuICAgICAgdGV4dCA/IHNldFRleHRDb250ZW50KHRleHQpIDogbm9vcFxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVEYXRlVGltZShcbiAgZGF0ZTogRGF0ZVxuKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ2NvOkRhdGVUaW1lJyksXG4gICAgICBzZXRUZXh0Q29udGVudChmb3JtYXQoZGF0ZSwgXCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3NcIikpXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZURhdGUoXG4gIGRhdGU6IERhdGVcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHRhcChcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkT3JDcmVhdGUoJ2djbzpEYXRlJyksXG4gICAgICBzZXRUZXh0Q29udGVudChmb3JtYXQoZGF0ZSwgJ3l5eXktTU0tZGQnKSlcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb2dyZXNzQ29kZShzdGF0dXM6IFJlY29yZFN0YXR1cyk6IHN0cmluZyB7XG4gIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgY2FzZSAnY29tcGxldGVkJzpcbiAgICAgIHJldHVybiAnY29tcGxldGVkJ1xuICAgIGNhc2UgJ2RlcHJlY2F0ZWQnOlxuICAgICAgcmV0dXJuICdkZXByZWNhdGVkJ1xuICAgIGNhc2UgJ29uZ29pbmcnOlxuICAgICAgcmV0dXJuICdvbkdvaW5nJ1xuICAgIGNhc2UgJ3JlbW92ZWQnOlxuICAgICAgcmV0dXJuICdyZW1vdmVkJ1xuICAgIGNhc2UgJ3VuZGVyX2RldmVsb3BtZW50JzpcbiAgICAgIHJldHVybiAndW5kZXJEZXZlbG9wbWVudCdcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBwcm9ncmVzcyBjb2RlIGZyb20gc3RhdHVzOiAke3N0YXR1c31gXG4gICAgICApXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFJvbGVDb2RlKHJvbGU6IFJvbGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHJvbGUpIHtcbiAgICBjYXNlICdhdXRob3InOlxuICAgICAgcmV0dXJuICdhdXRob3InXG4gICAgY2FzZSAnY29sbGFib3JhdG9yJzpcbiAgICAgIHJldHVybiAnY29sbGFib3JhdG9yJ1xuICAgIGNhc2UgJ2NvbnRyaWJ1dG9yJzpcbiAgICAgIHJldHVybiAnY29udHJpYnV0b3InXG4gICAgY2FzZSAnY3VzdG9kaWFuJzpcbiAgICAgIHJldHVybiAnY3VzdG9kaWFuJ1xuICAgIGNhc2UgJ2Rpc3RyaWJ1dG9yJzpcbiAgICAgIHJldHVybiAnZGlzdHJpYnV0b3InXG4gICAgY2FzZSAnZWRpdG9yJzpcbiAgICAgIHJldHVybiAnZWRpdG9yJ1xuICAgIGNhc2UgJ2Z1bmRlcic6XG4gICAgICByZXR1cm4gJ2Z1bmRlcidcbiAgICBjYXNlICdtZWRpYXRvcic6XG4gICAgICByZXR1cm4gJ21lZGlhdG9yJ1xuICAgIGNhc2UgJ29yaWdpbmF0b3InOlxuICAgICAgcmV0dXJuICdvcmlnaW5hdG9yJ1xuICAgIGNhc2UgJ290aGVyJzpcbiAgICAgIHJldHVybiAnb3RoZXInXG4gICAgY2FzZSAnb3duZXInOlxuICAgICAgcmV0dXJuICdvd25lcidcbiAgICBjYXNlICdwb2ludF9vZl9jb250YWN0JzpcbiAgICAgIHJldHVybiAncG9pbnRPZkNvbnRhY3QnXG4gICAgY2FzZSAncHJpbmNpcGFsX2ludmVzdGlnYXRvcic6XG4gICAgICByZXR1cm4gJ3ByaW5jaXBhbEludmVzdGlnYXRvcidcbiAgICBjYXNlICdwcm9jZXNzb3InOlxuICAgICAgcmV0dXJuICdwcm9jZXNzb3InXG4gICAgY2FzZSAncHVibGlzaGVyJzpcbiAgICAgIHJldHVybiAncHVibGlzaGVyJ1xuICAgIGNhc2UgJ3Jlc291cmNlX3Byb3ZpZGVyJzpcbiAgICAgIHJldHVybiAncmVzb3VyY2VQcm92aWRlcidcbiAgICBjYXNlICdyaWdodHNfaG9sZGVyJzpcbiAgICAgIHJldHVybiAncmlnaHRzSG9sZGVyJ1xuICAgIGNhc2UgJ3Nwb25zb3InOlxuICAgICAgcmV0dXJuICdzcG9uc29yJ1xuICAgIGNhc2UgJ3N0YWtlaG9sZGVyJzpcbiAgICAgIHJldHVybiAnc3Rha2Vob2xkZXInXG4gICAgY2FzZSAndW5zcGVjaWZpZWQnOlxuICAgICAgcmV0dXJuICd1bnNwZWNpZmllZCdcbiAgICBjYXNlICd1c2VyJzpcbiAgICAgIHJldHVybiAndXNlcidcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZGV0ZXJtaW5lIHJvbGUgY29kZSBmcm9tIHJvbGU6ICR7cm9sZX1gKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXN0cmlidXRpb25Qcm90b2NvbChcbiAgZGlzdHJpYnV0aW9uOiBEYXRhc2V0U2VydmljZURpc3RyaWJ1dGlvblxuKTogc3RyaW5nIHtcbiAgc3dpdGNoIChkaXN0cmlidXRpb24uYWNjZXNzU2VydmljZVByb3RvY29sLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICd3ZnMnOlxuICAgICAgcmV0dXJuICdPR0M6V0ZTJ1xuICAgIGNhc2UgJ3dtcyc6XG4gICAgICByZXR1cm4gJ09HQzpXTVMnXG4gICAgY2FzZSAnd3BzJzpcbiAgICAgIHJldHVybiAnT0dDOldQUydcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRpc3RyaWJ1dGlvbi5hY2Nlc3NTZXJ2aWNlUHJvdG9jb2xcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFpbnRlbmFuY2VGcmVxdWVuY3lDb2RlKFxuICB1cGRhdGVGcmVxdWVuY3k6IFVwZGF0ZUZyZXF1ZW5jeUNvZGVcbik6IHN0cmluZyB8IG51bGwge1xuICBzd2l0Y2ggKHVwZGF0ZUZyZXF1ZW5jeSkge1xuICAgIGNhc2UgJ2FzTmVlZGVkJzpcbiAgICAgIHJldHVybiAnYXNOZWVkZWQnXG4gICAgY2FzZSAndW5rbm93bic6XG4gICAgICByZXR1cm4gJ3Vua25vd24nXG4gICAgY2FzZSAnaXJyZWd1bGFyJzpcbiAgICAgIHJldHVybiAnaXJyZWd1bGFyJ1xuICAgIGNhc2UgJ25vdFBsYW5uZWQnOlxuICAgICAgcmV0dXJuICdub3RQbGFubmVkJ1xuICAgIGNhc2UgJ2NvbnRpbnVhbCc6XG4gICAgICByZXR1cm4gJ2NvbnRpbnVhbCdcbiAgICBjYXNlICdwZXJpb2RpYyc6XG4gICAgICByZXR1cm4gJ3BlcmlvZGljJ1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJU09EdXJhdGlvbih1cGRhdGVGcmVxdWVuY3k6IFVwZGF0ZUZyZXF1ZW5jeUN1c3RvbSk6IHN0cmluZyB7XG4gIGNvbnN0IGR1cmF0aW9uID0ge1xuICAgIHllYXJzOiAwLFxuICAgIG1vbnRoczogMCxcbiAgICB3ZWVrczogMCxcbiAgICBkYXlzOiAwLFxuICAgIGhvdXJzOiAwLFxuICB9XG4gIHN3aXRjaCAodXBkYXRlRnJlcXVlbmN5LnBlcikge1xuICAgIGNhc2UgJ2RheSc6XG4gICAgICBpZiAodXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcyA8PSAxKSBkdXJhdGlvbi5kYXlzID0gMVxuICAgICAgZWxzZSBkdXJhdGlvbi5ob3VycyA9IE1hdGgucm91bmQoMjQgLyB1cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICd3ZWVrJzpcbiAgICAgIGR1cmF0aW9uLmRheXMgPSBNYXRoLnJvdW5kKDcgLyB1cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzIC0gMC4wMDAxKSAvLyB0aGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGF0ICcyIHRpbWVzIHBlciB3ZWVrJyA9ICdldmVyeSAzIGRheXMnXG4gICAgICBicmVha1xuICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIGlmICh1cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzIDw9IDEpIGR1cmF0aW9uLm1vbnRocyA9IDFcbiAgICAgIGVsc2UgZHVyYXRpb24uZGF5cyA9IE1hdGgucm91bmQoMzAgLyB1cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICd5ZWFyJzpcbiAgICAgIGlmICh1cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzIDw9IDEpIGR1cmF0aW9uLnllYXJzID0gMVxuICAgICAgZWxzZSBkdXJhdGlvbi5tb250aHMgPSBNYXRoLnJvdW5kKDEyIC8gdXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcylcbiAgICAgIGJyZWFrXG4gIH1cbiAgY29uc3QgaG91cnMgPSBkdXJhdGlvbi5ob3VycyA+IDAgPyBgVCR7ZHVyYXRpb24uaG91cnN9SGAgOiAnJ1xuICByZXR1cm4gYFAke2R1cmF0aW9uLnllYXJzfVkke2R1cmF0aW9uLm1vbnRoc31NJHtkdXJhdGlvbi5kYXlzfUQke2hvdXJzfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZFJlc3BvbnNpYmxlUGFydHkoY29udGFjdDogSW5kaXZpZHVhbCkge1xuICBjb25zdCBmdWxsTmFtZSA9IG5hbWVQYXJ0c1RvRnVsbChjb250YWN0LmZpcnN0TmFtZSwgY29udGFjdC5sYXN0TmFtZSlcblxuICBjb25zdCBjcmVhdGVBZGRyZXNzID0gcGlwZShcbiAgICBjcmVhdGVFbGVtZW50KCdnbWQ6YWRkcmVzcycpLFxuICAgIGNyZWF0ZUNoaWxkKCdnbWQ6Q0lfQWRkcmVzcycpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmVsZWN0cm9uaWNNYWlsQWRkcmVzcycpLFxuICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhjb250YWN0LmVtYWlsKVxuICAgICAgKVxuICAgICksXG4gICAgY29udGFjdC5hZGRyZXNzXG4gICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZGVsaXZlcnlQb2ludCcpLFxuICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoY29udGFjdC5hZGRyZXNzKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgOiBub29wXG4gIClcblxuICBjb25zdCBjcmVhdGVDb250YWN0ID0gcGlwZShcbiAgICBjcmVhdGVFbGVtZW50KCdnbWQ6Y29udGFjdEluZm8nKSxcbiAgICBjcmVhdGVDaGlsZCgnZ21kOkNJX0NvbnRhY3QnKSxcbiAgICBjb250YWN0LnBob25lXG4gICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6cGhvbmUnKSxcbiAgICAgICAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6Q0lfVGVsZXBob25lJyksXG4gICAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOnZvaWNlJyksXG4gICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhjb250YWN0LnBob25lKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgOiBub29wLFxuICAgIGFwcGVuZENoaWxkcmVuKGNyZWF0ZUFkZHJlc3MpLFxuICAgICd3ZWJzaXRlJyBpbiBjb250YWN0Lm9yZ2FuaXphdGlvblxuICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOm9ubGluZVJlc291cmNlJyksXG4gICAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOkNJX09ubGluZVJlc291cmNlJyksXG4gICAgICAgICAgICB3cml0ZUxpbmthZ2UoY29udGFjdC5vcmdhbml6YXRpb24ud2Vic2l0ZSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIDogbm9vcFxuICApXG5cbiAgcmV0dXJuIGFwcGVuZENoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6Q0lfUmVzcG9uc2libGVQYXJ0eScpLFxuICAgICAgZnVsbE5hbWVcbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDppbmRpdmlkdWFsTmFtZScpLFxuICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhmdWxsTmFtZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIDogbm9vcCxcbiAgICAgIGNvbnRhY3QucG9zaXRpb25cbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpwb3NpdGlvbk5hbWUnKSxcbiAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoY29udGFjdC5wb3NpdGlvbilcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIDogbm9vcCxcbiAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpvcmdhbmlzYXRpb25OYW1lJyksXG4gICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoY29udGFjdC5vcmdhbml6YXRpb24ubmFtZSlcbiAgICAgICAgKSxcbiAgICAgICAgY3JlYXRlQ29udGFjdCxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6cm9sZScpLFxuICAgICAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6Q0lfUm9sZUNvZGUnKSxcbiAgICAgICAgICBhZGRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjQ0lfUm9sZUNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBhZGRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBnZXRSb2xlQ29kZShjb250YWN0LnJvbGUpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVDaXRhdGlvbkRhdGUoXG4gIGRhdGU6IERhdGUsXG4gIHR5cGU6ICdyZXZpc2lvbicgfCAnY3JlYXRpb24nIHwgJ3B1YmxpY2F0aW9uJ1xuKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOmRhdGUnLCAnZ21kOkNJX0RhdGUnKSxcbiAgICBmaWx0ZXJBcnJheShcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpDSV9EYXRlVHlwZUNvZGUnKSxcbiAgICAgICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgICAgICBtYXAoKHZhbHVlKSA9PiB2YWx1ZSA9PT0gdHlwZSlcbiAgICAgIClcbiAgICApLFxuICAgIGdldEF0SW5kZXgoMCksXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmRhdGUnKSxcbiAgICByZW1vdmVBbGxDaGlsZHJlbigpLFxuICAgIHdyaXRlRGF0ZVRpbWUoZGF0ZSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kQ2l0YXRpb25EYXRlKFxuICBkYXRlOiBEYXRlLFxuICB0eXBlOiAncmV2aXNpb24nIHwgJ2NyZWF0aW9uJyB8ICdwdWJsaWNhdGlvbidcbikge1xuICByZXR1cm4gYXBwZW5kQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpkYXRlJyksXG4gICAgICBjcmVhdGVDaGlsZCgnZ21kOkNJX0RhdGUnKSxcbiAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICBwaXBlKGNyZWF0ZUVsZW1lbnQoJ2dtZDpkYXRlJyksIHdyaXRlRGF0ZVRpbWUoZGF0ZSkpLFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpkYXRlVHlwZScpLFxuICAgICAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6Q0lfRGF0ZVR5cGVDb2RlJyksXG4gICAgICAgICAgYWRkQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI0NJX0RhdGVUeXBlQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIGFkZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIHR5cGUpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUtleXdvcmRzKCkge1xuICByZXR1cm4gcmVtb3ZlQ2hpbGRyZW4ocGlwZShmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpkZXNjcmlwdGl2ZUtleXdvcmRzJykpKVxufVxuXG4vLyByZXR1cm5zIGEgPGdtZDp0aGVzYXVydXNOYW1lPiBlbGVtZW50XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGhlc2F1cnVzKHRoZXNhdXJ1czogVGhlc2F1cnVzTW9kZWwpIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgY3JlYXRlRWxlbWVudCgnZ21kOnRoZXNhdXJ1c05hbWUnKSxcbiAgICBjcmVhdGVDaGlsZCgnZ21kOkNJX0NpdGF0aW9uJyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dGl0bGUnKSxcbiAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcodGhlc2F1cnVzLm5hbWUgfHwgdGhlc2F1cnVzLmlkKVxuICAgICAgKSxcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDppZGVudGlmaWVyJyksXG4gICAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6TURfSWRlbnRpZmllcicpLFxuICAgICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmNvZGUnKSxcbiAgICAgICAgICAgIHRoZXNhdXJ1cy51cmxcbiAgICAgICAgICAgICAgPyB3cml0ZUFuY2hvcih0aGVzYXVydXMudXJsLCB0aGVzYXVydXMuaWQpXG4gICAgICAgICAgICAgIDogd3JpdGVDaGFyYWN0ZXJTdHJpbmcodGhlc2F1cnVzLmlkKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kS2V5d29yZHMoa2V5d29yZHM6IEtleXdvcmRbXSkge1xuICAvLyBrZXl3b3JkcyBhcmUgZ3JvdXBlZCBieSB0aGVzYXVydXMgaWYgdGhleSBoYXZlIG9uZSwgb3RoZXJ3aXNlIGJ5IHR5cGVcbiAgY29uc3Qga2V5d29yZHNCeVRoZXNhdXJ1czogS2V5d29yZFtdW10gPSBrZXl3b3Jkcy5yZWR1Y2UoKGFjYywga2V5d29yZCkgPT4ge1xuICAgIGNvbnN0IHRoZXNhdXJ1c0lkID0ga2V5d29yZC50aGVzYXVydXM/LmlkXG4gICAgY29uc3QgdHlwZSA9IGtleXdvcmQudHlwZVxuICAgIGxldCBleGlzdGluZ0dyb3VwID0gYWNjLmZpbmQoKGdyb3VwKSA9PlxuICAgICAgdGhlc2F1cnVzSWRcbiAgICAgICAgPyBncm91cFswXS50aGVzYXVydXM/LmlkID09PSB0aGVzYXVydXNJZFxuICAgICAgICA6IGdyb3VwWzBdLnR5cGUgPT09IHR5cGUgJiYgIWdyb3VwWzBdLnRoZXNhdXJ1c1xuICAgIClcbiAgICBpZiAoIWV4aXN0aW5nR3JvdXApIHtcbiAgICAgIGV4aXN0aW5nR3JvdXAgPSBbXVxuICAgICAgYWNjLnB1c2goZXhpc3RpbmdHcm91cClcbiAgICB9XG4gICAgZXhpc3RpbmdHcm91cC5wdXNoKGtleXdvcmQpXG4gICAgcmV0dXJuIGFjY1xuICB9LCBbXSlcbiAgcmV0dXJuIGFwcGVuZENoaWxkcmVuKFxuICAgIC4uLmtleXdvcmRzQnlUaGVzYXVydXMubWFwKChrZXl3b3JkcykgPT5cbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpkZXNjcmlwdGl2ZUtleXdvcmRzJyksXG4gICAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6TURfS2V5d29yZHMnKSxcbiAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgcGlwZShcbiAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDp0eXBlJyksXG4gICAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX0tleXdvcmRUeXBlQ29kZScpLFxuICAgICAgICAgICAgYWRkQXR0cmlidXRlKFxuICAgICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9LZXl3b3JkVHlwZUNvZGUnXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgYWRkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywga2V5d29yZHNbMF0udHlwZSlcbiAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIGtleXdvcmRzWzBdLnRoZXNhdXJ1c1xuICAgICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oY3JlYXRlVGhlc2F1cnVzKGtleXdvcmRzWzBdLnRoZXNhdXJ1cykpXG4gICAgICAgICAgOiBub29wLFxuICAgICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAuLi5rZXl3b3Jkcy5tYXAoKGtleXdvcmQpID0+XG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6a2V5d29yZCcpLFxuICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhrZXl3b3JkLmxhYmVsKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uc3RyYWludChcbiAgY29uc3RyYWludDogQ29uc3RyYWludCxcbiAgdHlwZTogJ2xlZ2FsJyB8ICdzZWN1cml0eScgfCAnb3RoZXInXG4pIHtcbiAgaWYgKHR5cGUgPT09ICdzZWN1cml0eScpIHtcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyksXG4gICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX1NlY3VyaXR5Q29uc3RyYWludHMnKSxcbiAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpjbGFzc2lmaWNhdGlvbicpLFxuICAgICAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6TURfQ2xhc3NpZmljYXRpb25Db2RlJyksXG4gICAgICAgICAgYWRkQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX0NsYXNzaWZpY2F0aW9uQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIGFkZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsICdyZXN0cmljdGVkJylcbiAgICAgICAgKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnN0cmFpbnQudGV4dClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbGVnYWwnKSB7XG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycpLFxuICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9MZWdhbENvbnN0cmFpbnRzJyksXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6YWNjZXNzQ29uc3RyYWludHMnKSxcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX1Jlc3RyaWN0aW9uQ29kZScpLFxuICAgICAgICAgIGFkZEF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9SZXN0cmljdGlvbkNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBhZGRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCAnb3RoZXJSZXN0cmljdGlvbnMnKVxuICAgICAgICApLFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpvdGhlckNvbnN0cmFpbnRzJyksXG4gICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoY29uc3RyYWludC50ZXh0KVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHBpcGUoXG4gICAgY3JlYXRlRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX0NvbnN0cmFpbnRzJyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhjb25zdHJhaW50LnRleHQpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVPdGhlckNvbnN0cmFpbnRzKCkge1xuICByZXR1cm4gcmVtb3ZlQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyksXG4gICAgICBmaWx0ZXJBcnJheShcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpNRF9Db25zdHJhaW50cycsICdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgICAgICAgIChhcnJheSkgPT4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVTZWN1cml0eUNvbnN0cmFpbnRzKCkge1xuICByZXR1cm4gcmVtb3ZlQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyksXG4gICAgICBmaWx0ZXJBcnJheShcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpNRF9TZWN1cml0eUNvbnN0cmFpbnRzJywgJ2dtZDp1c2VMaW1pdGF0aW9uJyksXG4gICAgICAgICAgKGFycmF5KSA9PiBhcnJheS5sZW5ndGggPiAwXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUxlZ2FsQ29uc3RyYWludHMoKSB7XG4gIHJldHVybiByZW1vdmVDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICAgIGZpbHRlckFycmF5KFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICAgICAgICdnbWQ6TURfTGVnYWxDb25zdHJhaW50cycsXG4gICAgICAgICAgICAnZ21kOmFjY2Vzc0NvbnN0cmFpbnRzJyxcbiAgICAgICAgICAgICdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgbWFwQXJyYXkocmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpKSxcbiAgICAgICAgICAocmVzdHJpY3Rpb25Db2RlcykgPT5cbiAgICAgICAgICAgIHJlc3RyaWN0aW9uQ29kZXMuZXZlcnkoKGNvZGUpID0+IGNvZGUgIT09ICdsaWNlbnNlJylcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlTGljZW5zZXMoKSB7XG4gIHJldHVybiByZW1vdmVDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICAgIGZpbHRlckFycmF5KFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICAgICAgICdnbWQ6TURfTGVnYWxDb25zdHJhaW50cycsXG4gICAgICAgICAgICAnZ21kOmFjY2Vzc0NvbnN0cmFpbnRzJyxcbiAgICAgICAgICAgICdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgbWFwQXJyYXkocmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpKSxcbiAgICAgICAgICAocmVzdHJpY3Rpb25Db2RlcykgPT5cbiAgICAgICAgICAgIHJlc3RyaWN0aW9uQ29kZXMuc29tZSgoY29kZSkgPT4gY29kZSA9PT0gJ2xpY2Vuc2UnKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMaWNlbnNlKGxpY2Vuc2U6IENvbnN0cmFpbnQpIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgY3JlYXRlRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX0xlZ2FsQ29uc3RyYWludHMnKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDphY2Nlc3NDb25zdHJhaW50cycpLFxuICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX1Jlc3RyaWN0aW9uQ29kZScpLFxuICAgICAgICBhZGRBdHRyaWJ1dGUoXG4gICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9SZXN0cmljdGlvbkNvZGUnXG4gICAgICAgICksXG4gICAgICAgIGFkZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsICdsaWNlbnNlJylcbiAgICAgICksXG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6YWNjZXNzQ29uc3RyYWludHMnKSxcbiAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9SZXN0cmljdGlvbkNvZGUnKSxcbiAgICAgICAgYWRkQXR0cmlidXRlKFxuICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfUmVzdHJpY3Rpb25Db2RlJ1xuICAgICAgICApLFxuICAgICAgICBhZGRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCAnb3RoZXJSZXN0cmljdGlvbnMnKVxuICAgICAgKSxcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpvdGhlckNvbnN0cmFpbnRzJyksXG4gICAgICAgICd1cmwnIGluIGxpY2Vuc2VcbiAgICAgICAgICA/IHdyaXRlQW5jaG9yKGxpY2Vuc2UudXJsLCBsaWNlbnNlLnRleHQpXG4gICAgICAgICAgOiB3cml0ZUNoYXJhY3RlclN0cmluZyhsaWNlbnNlLnRleHQpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVEaXN0cmlidXRpb25zKCkge1xuICByZXR1cm4gcGlwZShyZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOmRpc3RyaWJ1dGlvbkluZm8nKSlcbn1cblxuZnVuY3Rpb24gYXBwZW5kRGlzdHJpYnV0aW9uRm9ybWF0KG1pbWVUeXBlOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGFwcGVuZENoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZGlzdHJpYnV0aW9uRm9ybWF0JyksXG4gICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX0Zvcm1hdCcpLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnZ21kOm5hbWUnKSwgd3JpdGVDaGFyYWN0ZXJTdHJpbmcobWltZVR5cGUpKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dmVyc2lvbicpLFxuICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKCcxLjAnKSAvLyBoYXJkY29kaW5nIHRoaXMgYXMgaXQgbW9zdCBsaWtlbHkgd29uJ3QgYmUgdXNlZCBidXQgaXMgbWFuZGF0b3J5XG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURpc3RyaWJ1dGlvbkluZm8oKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpkaXN0cmlidXRpb25JbmZvJyksXG4gICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9EaXN0cmlidXRpb24nKVxuICApXG59XG5cbi8vIGFwcGx5IHRvIE1EX0Rpc3RyaWJ1dGlvblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZERpc3RyaWJ1dGlvbihcbiAgZGlzdHJpYnV0aW9uOiBEYXRhc2V0RGlzdHJpYnV0aW9uLFxuICBhcHBlbmRGb3JtYXRGbjogKFxuICAgIG1pbWVUeXBlOiBzdHJpbmdcbiAgKSA9PiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PlxuKSB7XG4gIGxldCBuYW1lOiBzdHJpbmdcbiAgbGV0IGZ1bmN0aW9uQ29kZTogc3RyaW5nXG4gIGxldCBwcm90b2NvbDogc3RyaW5nXG4gIGlmIChkaXN0cmlidXRpb24udHlwZSA9PT0gJ3NlcnZpY2UnKSB7XG4gICAgbmFtZSA9IGRpc3RyaWJ1dGlvbi5pZGVudGlmaWVySW5TZXJ2aWNlIC8vIHRoaXMgaXMgZm9yIEdlb05ldHdvcmsgdG8ga25vdyB0aGUgbGF5ZXIgbmFtZVxuICAgIGZ1bmN0aW9uQ29kZSA9ICdkb3dubG9hZCdcbiAgICBwcm90b2NvbCA9IGdldERpc3RyaWJ1dGlvblByb3RvY29sKGRpc3RyaWJ1dGlvbilcbiAgfSBlbHNlIGlmIChkaXN0cmlidXRpb24udHlwZSA9PT0gJ2Rvd25sb2FkJykge1xuICAgIG5hbWUgPSBkaXN0cmlidXRpb24ubmFtZVxuICAgIGZ1bmN0aW9uQ29kZSA9ICdkb3dubG9hZCdcbiAgICBwcm90b2NvbCA9ICdXV1c6RE9XTkxPQUQnXG4gIH0gZWxzZSB7XG4gICAgbmFtZSA9IGRpc3RyaWJ1dGlvbi5uYW1lXG4gICAgZnVuY3Rpb25Db2RlID0gJ2luZm9ybWF0aW9uJ1xuICAgIHByb3RvY29sID0gJ1dXVzpMSU5LJ1xuICB9XG4gIGNvbnN0IGFwcGVuZFRyYW5zZmVyT3B0aW9ucyA9IGFwcGVuZENoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dHJhbnNmZXJPcHRpb25zJyksXG4gICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX0RpZ2l0YWxUcmFuc2Zlck9wdGlvbnMnKSxcbiAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6b25MaW5lJyksXG4gICAgICBjcmVhdGVDaGlsZCgnZ21kOkNJX09ubGluZVJlc291cmNlJyksXG4gICAgICB3cml0ZUxpbmthZ2UoZGlzdHJpYnV0aW9uLnVybCksXG4gICAgICAnZGVzY3JpcHRpb24nIGluIGRpc3RyaWJ1dGlvblxuICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmRlc2NyaXB0aW9uJyksXG4gICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGRpc3RyaWJ1dGlvbi5kZXNjcmlwdGlvbilcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIDogbm9vcCxcbiAgICAgIG5hbWUgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6bmFtZScpLCB3cml0ZUNoYXJhY3RlclN0cmluZyhuYW1lKSlcbiAgICAgICAgICApXG4gICAgICAgIDogbm9vcCxcbiAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICBwaXBlKGNyZWF0ZUVsZW1lbnQoJ2dtZDpwcm90b2NvbCcpLCB3cml0ZUNoYXJhY3RlclN0cmluZyhwcm90b2NvbCkpLFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpmdW5jdGlvbicpLFxuICAgICAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6Q0lfT25MaW5lRnVuY3Rpb25Db2RlJyksXG4gICAgICAgICAgYWRkQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI0NJX09uTGluZUZ1bmN0aW9uQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIGFkZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGZ1bmN0aW9uQ29kZSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICAnbWltZVR5cGUnIGluIGRpc3RyaWJ1dGlvbiA/IGFwcGVuZEZvcm1hdEZuKGRpc3RyaWJ1dGlvbi5taW1lVHlwZSkgOiBub29wLFxuICAgIGFwcGVuZFRyYW5zZmVyT3B0aW9uc1xuICApXG59XG5cbi8qKlxuICogTG9va3MgZm9yIHNydjpTVl9TZXJ2aWNlSWRlbnRpZmljYXRpb24gb3IgZ21kOk1EX0RhdGFJZGVudGlmaWNhdGlvbiBlbGVtZW50XG4gKiBkZXBlbmRpbmcgb24gcmVjb3JkIHR5cGUsIGNyZWF0ZSBpZiBtaXNzaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpIHtcbiAgcmV0dXJuIChyb290RWw6IFhtbEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBraW5kID0gcmVhZEtpbmQocm9vdEVsKVxuICAgIGxldCBlbHROYW1lID0gJ2dtZDpNRF9EYXRhSWRlbnRpZmljYXRpb24nXG4gICAgaWYgKGtpbmQgPT09ICdzZXJ2aWNlJykgZWx0TmFtZSA9ICdzcnY6U1ZfU2VydmljZUlkZW50aWZpY2F0aW9uJ1xuICAgIHJldHVybiBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmlkZW50aWZpY2F0aW9uSW5mbycsIGVsdE5hbWUpKHJvb3RFbClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZE9yQ3JlYXRlRGlzdHJpYnV0aW9uKCkge1xuICByZXR1cm4gKHJvb3RFbDogWG1sRWxlbWVudCkgPT4ge1xuICAgIHJldHVybiBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZShcbiAgICAgICdnbWQ6ZGlzdHJpYnV0aW9uSW5mbycsXG4gICAgICAnZ21kOk1EX0Rpc3RyaWJ1dGlvbidcbiAgICApKHJvb3RFbClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVVbmlxdWVJZGVudGlmaWVyKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDpmaWxlSWRlbnRpZmllcicpLFxuICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKHJlY29yZC51bmlxdWVJZGVudGlmaWVyKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlS2luZChyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6aGllcmFyY2h5TGV2ZWwnLCAnZ21kOk1EX1Njb3BlQ29kZScpLFxuICAgIGFkZEF0dHJpYnV0ZShcbiAgICAgICdjb2RlTGlzdCcsXG4gICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9TY29wZUNvZGUnXG4gICAgKSxcbiAgICBhZGRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCByZWNvcmQua2luZClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZU93bmVyT3JnYW5pemF0aW9uKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIC8vIGlmIG5vIGNvbnRhY3QgbWF0Y2hlcyB0aGUgb3duZXIgb3JnLCBjcmVhdGUgYW4gZW1wdHkgb25lXG4gIGNvbnN0IG93bmVyQ29udGFjdDogSW5kaXZpZHVhbCA9IHJlY29yZC5jb250YWN0cy5maW5kKFxuICAgIChjb250YWN0KSA9PiBjb250YWN0Lm9yZ2FuaXphdGlvbi5uYW1lID09PSByZWNvcmQub3duZXJPcmdhbml6YXRpb24ubmFtZVxuICApXG4gIHBpcGUoXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDpjb250YWN0JyksXG4gICAgcmVtb3ZlQWxsQ2hpbGRyZW4oKSxcbiAgICBhcHBlbmRSZXNwb25zaWJsZVBhcnR5KFxuICAgICAgb3duZXJDb250YWN0XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4ub3duZXJDb250YWN0LFxuICAgICAgICAgICAgLy8gb3duZXIgcmVzcG9uc2libGUgcGFydHkgaXMgYWx3YXlzIHBvaW50IG9mIGNvbnRhY3RcbiAgICAgICAgICAgIHJvbGU6ICdwb2ludF9vZl9jb250YWN0JyxcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgb3JnYW5pemF0aW9uOiByZWNvcmQub3duZXJPcmdhbml6YXRpb24sXG4gICAgICAgICAgICBlbWFpbDogJycsXG4gICAgICAgICAgICByb2xlOiAncG9pbnRfb2ZfY29udGFjdCcsXG4gICAgICAgICAgfVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVJlY29yZFVwZGF0ZWQocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ21kOmRhdGVTdGFtcCcpLFxuICAgIHJlbW92ZUFsbENoaWxkcmVuKCksXG4gICAgd3JpdGVEYXRlVGltZShyZWNvcmQucmVjb3JkVXBkYXRlZClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVRpdGxlKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmNpdGF0aW9uJywgJ2dtZDpDSV9DaXRhdGlvbicsICdnbWQ6dGl0bGUnKSxcbiAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhyZWNvcmQudGl0bGUpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVBYnN0cmFjdChyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDphYnN0cmFjdCcpLFxuICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKHJlY29yZC5hYnN0cmFjdClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVN0YXR1cyhyZWNvcmQ6IERhdGFzZXRSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpzdGF0dXMnLCAnZ21kOk1EX1Byb2dyZXNzQ29kZScpLFxuICAgIGFkZEF0dHJpYnV0ZShcbiAgICAgICdjb2RlTGlzdCcsXG4gICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9Qcm9ncmVzc0NvZGUnXG4gICAgKSxcbiAgICBhZGRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBnZXRQcm9ncmVzc0NvZGUocmVjb3JkLnN0YXR1cykpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVDb250YWN0cyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6Y29udGFjdCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLmNvbnRhY3RzLm1hcCgoY29udGFjdCkgPT5cbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6Y29udGFjdCcpLCBhcHBlbmRSZXNwb25zaWJsZVBhcnR5KGNvbnRhY3QpKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUNvbnRhY3RzRm9yUmVzb3VyY2UoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6cG9pbnRPZkNvbnRhY3QnKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOmNvbnRhY3QnKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC5jb250YWN0c0ZvclJlc291cmNlLm1hcCgoY29udGFjdCkgPT5cbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6cG9pbnRPZkNvbnRhY3QnKSxcbiAgICAgICAgICBhcHBlbmRSZXNwb25zaWJsZVBhcnR5KGNvbnRhY3QpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVLZXl3b3JkcyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlS2V5d29yZHMoKSxcbiAgICBhcHBlbmRLZXl3b3JkcyhyZWNvcmQua2V5d29yZHMpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVUb3BpY3MocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIHJlbW92ZUNoaWxkcmVuQnlOYW1lKCdnbWQ6dG9waWNDYXRlZ29yeScpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLnRvcGljcy5tYXAoKHRvcGljKSA9PlxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDp0b3BpY0NhdGVnb3J5JyksXG4gICAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9Ub3BpY0NhdGVnb3J5Q29kZScpLFxuICAgICAgICAgIHNldFRleHRDb250ZW50KHRvcGljKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlTGljZW5zZXMocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIHJlbW92ZUxpY2Vuc2VzKCksXG4gICAgYXBwZW5kQ2hpbGRyZW4oLi4ucmVjb3JkLmxpY2Vuc2VzLm1hcChjcmVhdGVMaWNlbnNlKSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUxlZ2FsQ29uc3RyYWludHMoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIHJlbW92ZUxlZ2FsQ29uc3RyYWludHMoKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC5sZWdhbENvbnN0cmFpbnRzLm1hcCgoYykgPT4gY3JlYXRlQ29uc3RyYWludChjLCAnbGVnYWwnKSlcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVTZWN1cml0eUNvbnN0cmFpbnRzKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVTZWN1cml0eUNvbnN0cmFpbnRzKCksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQuc2VjdXJpdHlDb25zdHJhaW50cy5tYXAoKGMpID0+IGNyZWF0ZUNvbnN0cmFpbnQoYywgJ3NlY3VyaXR5JykpXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlT3RoZXJDb25zdHJhaW50cyhcbiAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlT3RoZXJDb25zdHJhaW50cygpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLm90aGVyQ29uc3RyYWludHMubWFwKChjKSA9PiBjcmVhdGVDb25zdHJhaW50KGMsICdvdGhlcicpKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVVwZGF0ZUZyZXF1ZW5jeShcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDpyZXNvdXJjZU1haW50ZW5hbmNlJyksXG4gICAgcmVtb3ZlQWxsQ2hpbGRyZW4oKSxcbiAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ21kOk1EX01haW50ZW5hbmNlSW5mb3JtYXRpb24nKSxcbiAgICB0eXBlb2YgcmVjb3JkLnVwZGF0ZUZyZXF1ZW5jeSA9PT0gJ29iamVjdCdcbiAgICAgID8gcGlwZShcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOnVzZXJEZWZpbmVkTWFpbnRlbmFuY2VGcmVxdWVuY3knKSxcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ3RzOlRNX1BlcmlvZER1cmF0aW9uJyksXG4gICAgICAgICAgc2V0VGV4dENvbnRlbnQoZ2V0SVNPRHVyYXRpb24ocmVjb3JkLnVwZGF0ZUZyZXF1ZW5jeSkpXG4gICAgICAgIClcbiAgICAgIDogcGlwZShcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOm1haW50ZW5hbmNlQW5kVXBkYXRlRnJlcXVlbmN5JyksXG4gICAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9NYWludGVuYW5jZUZyZXF1ZW5jeUNvZGUnKSxcbiAgICAgICAgICBhZGRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfTWFpbnRlbmFuY2VGcmVxdWVuY3lDb2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgYWRkQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0VmFsdWUnLFxuICAgICAgICAgICAgZ2V0TWFpbnRlbmFuY2VGcmVxdWVuY3lDb2RlKHJlY29yZC51cGRhdGVGcmVxdWVuY3kpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVSZXNvdXJjZUNyZWF0ZWQoXG4gIHJlY29yZDogRGF0YXNldFJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgaWYgKCEoJ3Jlc291cmNlQ3JlYXRlZCcgaW4gcmVjb3JkKSkgcmV0dXJuXG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmNpdGF0aW9uJywgJ2dtZDpDSV9DaXRhdGlvbicpLFxuICAgIGZhbGxiYWNrKFxuICAgICAgdXBkYXRlQ2l0YXRpb25EYXRlKHJlY29yZC5yZXNvdXJjZUNyZWF0ZWQsICdjcmVhdGlvbicpLFxuICAgICAgYXBwZW5kQ2l0YXRpb25EYXRlKHJlY29yZC5yZXNvdXJjZUNyZWF0ZWQsICdjcmVhdGlvbicpXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUmVzb3VyY2VVcGRhdGVkKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIGlmICghKCdyZXNvdXJjZVVwZGF0ZWQnIGluIHJlY29yZCkpIHJldHVyblxuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpjaXRhdGlvbicsICdnbWQ6Q0lfQ2l0YXRpb24nKSxcbiAgICBmYWxsYmFjayhcbiAgICAgIHVwZGF0ZUNpdGF0aW9uRGF0ZShyZWNvcmQucmVzb3VyY2VVcGRhdGVkLCAncmV2aXNpb24nKSxcbiAgICAgIGFwcGVuZENpdGF0aW9uRGF0ZShyZWNvcmQucmVzb3VyY2VVcGRhdGVkLCAncmV2aXNpb24nKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVJlc291cmNlUHVibGlzaGVkKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIGlmICghKCdyZXNvdXJjZVB1Ymxpc2hlZCcgaW4gcmVjb3JkKSkgcmV0dXJuXG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmNpdGF0aW9uJywgJ2dtZDpDSV9DaXRhdGlvbicpLFxuICAgIGZhbGxiYWNrKFxuICAgICAgdXBkYXRlQ2l0YXRpb25EYXRlKHJlY29yZC5yZXNvdXJjZVB1Ymxpc2hlZCwgJ3B1YmxpY2F0aW9uJyksXG4gICAgICBhcHBlbmRDaXRhdGlvbkRhdGUocmVjb3JkLnJlc291cmNlUHVibGlzaGVkLCAncHVibGljYXRpb24nKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVNwYXRpYWxSZXByZXNlbnRhdGlvbihcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoXG4gICAgICAnZ21kOnNwYXRpYWxSZXByZXNlbnRhdGlvblR5cGUnLFxuICAgICAgJ2dtZDpNRF9TcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlQ29kZSdcbiAgICApLFxuICAgIGFkZEF0dHJpYnV0ZShcbiAgICAgICdjb2RlTGlzdCcsXG4gICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9TcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlQ29kZSdcbiAgICApLFxuICAgIGFkZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIHJlY29yZC5zcGF0aWFsUmVwcmVzZW50YXRpb24pXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVHcmFwaGljT3ZlcnZpZXdzKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOmdyYXBoaWNPdmVydmlldycpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLm92ZXJ2aWV3cy5tYXAoKG92ZXJ2aWV3KSA9PlxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpncmFwaGljT3ZlcnZpZXcnKSxcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX0Jyb3dzZUdyYXBoaWMnKSxcbiAgICAgICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpmaWxlTmFtZScpLFxuICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhvdmVydmlldy51cmwudG9TdHJpbmcoKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgICdkZXNjcmlwdGlvbicgaW4gb3ZlcnZpZXdcbiAgICAgICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpmaWxlRGVzY3JpcHRpb24nKSxcbiAgICAgICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKG92ZXJ2aWV3LmRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBub29wXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVEaXN0cmlidXRpb25zKHJlY29yZDogRGF0YXNldFJlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgcmVtb3ZlRGlzdHJpYnV0aW9ucygpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLmRpc3RyaWJ1dGlvbnMubWFwKChkKSA9PlxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZURpc3RyaWJ1dGlvbkluZm8oKSxcbiAgICAgICAgICBhcHBlbmREaXN0cmlidXRpb24oZCwgYXBwZW5kRGlzdHJpYnV0aW9uRm9ybWF0KVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlTGluZWFnZShyZWNvcmQ6IERhdGFzZXRSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKFxuICAgICAgJ2dtZDpkYXRhUXVhbGl0eUluZm8nLFxuICAgICAgJ2dtZDpEUV9EYXRhUXVhbGl0eScsXG4gICAgICAnZ21kOmxpbmVhZ2UnLFxuICAgICAgJ2dtZDpMSV9MaW5lYWdlJyxcbiAgICAgICdnbWQ6c3RhdGVtZW50J1xuICAgICksXG4gICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcocmVjb3JkLmxpbmVhZ2UpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VydmljZUVuZHBvaW50UHJvdG9jb2woZW5kcG9pbnQ6IFNlcnZpY2VFbmRwb2ludCk6IHN0cmluZyB7XG4gIHN3aXRjaCAoZW5kcG9pbnQucHJvdG9jb2wudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ3dmcyc6XG4gICAgICByZXR1cm4gJ09HQzpXRlMnXG4gICAgY2FzZSAnd21zJzpcbiAgICAgIHJldHVybiAnT0dDOldNUydcbiAgICBjYXNlICd3cHMnOlxuICAgICAgcmV0dXJuICdPR0M6V1BTJ1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZW5kcG9pbnQucHJvdG9jb2xcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlT25saW5lUmVzb3VyY2Uob25saW5lUmVzb3VyY2U6IFNlcnZpY2VPbmxpbmVSZXNvdXJjZSkge1xuICBsZXQgbGlua2FnZVVybCwgZnVuY3Rpb25Db2RlLCBwcm90b2NvbFxuICBpZiAob25saW5lUmVzb3VyY2UudHlwZSA9PT0gJ2VuZHBvaW50Jykge1xuICAgIGxpbmthZ2VVcmwgPSBvbmxpbmVSZXNvdXJjZS5lbmRwb2ludFVybC50b1N0cmluZygpXG4gICAgcHJvdG9jb2wgPSBnZXRTZXJ2aWNlRW5kcG9pbnRQcm90b2NvbChvbmxpbmVSZXNvdXJjZSlcbiAgICBmdW5jdGlvbkNvZGUgPSAnZG93bmxvYWQnXG4gIH0gZWxzZSB7XG4gICAgbGlua2FnZVVybCA9IG9ubGluZVJlc291cmNlLnVybC50b1N0cmluZygpXG4gICAgZnVuY3Rpb25Db2RlID0gJ2luZm9ybWF0aW9uJ1xuICAgIHByb3RvY29sID0gJ1dXVzpMSU5LJ1xuICB9XG4gIGNvbnN0IGFwcGVuZFRyYW5zZmVyT3B0aW9ucyA9IGFwcGVuZENoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dHJhbnNmZXJPcHRpb25zJyksXG4gICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX0RpZ2l0YWxUcmFuc2Zlck9wdGlvbnMnKSxcbiAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6b25MaW5lJyksXG4gICAgICBjcmVhdGVDaGlsZCgnZ21kOkNJX09ubGluZVJlc291cmNlJyksXG4gICAgICB3cml0ZUxpbmthZ2UobGlua2FnZVVybCksXG4gICAgICAnZGVzY3JpcHRpb24nIGluIG9ubGluZVJlc291cmNlXG4gICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZGVzY3JpcHRpb24nKSxcbiAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcob25saW5lUmVzb3VyY2UuZGVzY3JpcHRpb24pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICAnbmFtZScgaW4gb25saW5lUmVzb3VyY2VcbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpuYW1lJyksXG4gICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKG9ubGluZVJlc291cmNlLm5hbWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6cHJvdG9jb2wnKSwgd3JpdGVDaGFyYWN0ZXJTdHJpbmcocHJvdG9jb2wpKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZnVuY3Rpb24nKSxcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOkNJX09uTGluZUZ1bmN0aW9uQ29kZScpLFxuICAgICAgICAgIGFkZEF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNDSV9PbkxpbmVGdW5jdGlvbkNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBhZGRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBmdW5jdGlvbkNvZGUpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbiAgcmV0dXJuIHBpcGUoXG4gICAgY3JlYXRlRWxlbWVudCgnZ21kOmRpc3RyaWJ1dGlvbkluZm8nKSxcbiAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX0Rpc3RyaWJ1dGlvbicpLFxuICAgIGFwcGVuZFRyYW5zZmVyT3B0aW9uc1xuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZU9ubGluZVJlc291cmNlcyhcbiAgcmVjb3JkOiBTZXJ2aWNlUmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIHJlbW92ZURpc3RyaWJ1dGlvbnMoKSxcbiAgICBhcHBlbmRDaGlsZHJlbiguLi5yZWNvcmQub25saW5lUmVzb3VyY2VzLm1hcChjcmVhdGVPbmxpbmVSZXNvdXJjZSkpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVUZW1wb3JhbEV4dGVudHMoXG4gIHJlY29yZDogRGF0YXNldFJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6ZXh0ZW50JywgJ2dtZDpFWF9FeHRlbnQnKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOnRlbXBvcmFsRWxlbWVudCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLnRlbXBvcmFsRXh0ZW50cy5tYXAoKGV4dGVudCkgPT5cbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dGVtcG9yYWxFbGVtZW50JyksXG4gICAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpFWF9UZW1wb3JhbEV4dGVudCcpLFxuICAgICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgJ3N0YXJ0JyBpbiBleHRlbnQgJiYgJ2VuZCcgaW4gZXh0ZW50XG4gICAgICAgICAgICAgID8gcGlwZShcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpleHRlbnQnKSxcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZUNoaWxkKCdnbWw6VGltZVBlcmlvZCcpLFxuICAgICAgICAgICAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21sOmJlZ2luUG9zaXRpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW50LnN0YXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gc2V0VGV4dENvbnRlbnQoZm9ybWF0KGV4dGVudC5zdGFydCwgJ3l5eXktTU0tZGQnKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhZGRBdHRyaWJ1dGUoJ2luZGV0ZXJtaW5hdGVQb3NpdGlvbicsICd1bmtub3duJylcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21sOmVuZFBvc2l0aW9uJyksXG4gICAgICAgICAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVudC5lbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZXRUZXh0Q29udGVudChmb3JtYXQoZXh0ZW50LmVuZCwgJ3l5eXktTU0tZGQnKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhZGRBdHRyaWJ1dGUoJ2luZGV0ZXJtaW5hdGVQb3NpdGlvbicsICd1bmtub3duJylcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogcGlwZShcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpleHRlbnQnKSxcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZUNoaWxkKCdnbWw6VGltZUluc3RhbnQnKSxcbiAgICAgICAgICAgICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtbDp0aW1lUG9zaXRpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW50LnN0YXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gc2V0VGV4dENvbnRlbnQoZm9ybWF0KGV4dGVudC5zdGFydCwgJ3l5eXktTU0tZGQnKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhZGRBdHRyaWJ1dGUoJ2luZGV0ZXJtaW5hdGVQb3NpdGlvbicsICd1bmtub3duJylcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbn1cbiJdfQ==
@@ -23,10 +23,10 @@ export class AuthService {
23
23
  this.translateService = translateService;
24
24
  this.baseLoginUrl = this.baseLoginUrlToken || DEFAULT_GN4_LOGIN_URL;
25
25
  }
26
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AuthService, deps: [{ token: LOGIN_URL, optional: true }, { token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
27
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AuthService, providedIn: 'root' }); }
26
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AuthService, deps: [{ token: LOGIN_URL, optional: true }, { token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
27
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AuthService, providedIn: 'root' }); }
28
28
  }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AuthService, decorators: [{
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AuthService, decorators: [{
30
30
  type: Injectable,
31
31
  args: [{
32
32
  providedIn: 'root',
@@ -37,4 +37,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
37
37
  type: Inject,
38
38
  args: [LOGIN_URL]
39
39
  }] }, { type: i1.TranslateService }]; } });
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcGkvcmVwb3NpdG9yeS9zcmMvbGliL2duNC9hdXRoL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzVFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFBO0FBQzVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFBOzs7QUFFdEQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsbUVBQW1FLENBQUE7QUFDeEcsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLElBQUksY0FBYyxDQUFTLFVBQVUsQ0FBQyxDQUFBO0FBSy9ELE1BQU0sT0FBTyxXQUFXO0lBRXRCLElBQUksUUFBUTtRQUNWLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUE7UUFDL0IsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUE7UUFDdkQsMEVBQTBFO1FBQzFFLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLHNCQUFzQixFQUFFO1lBQ25FLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtTQUNwQztRQUNELE9BQU8sT0FBTzthQUNYLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ3JELE9BQU8sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQzthQUN0RCxPQUFPLENBQ04sVUFBVSxFQUNWLGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FDdEQsQ0FBQTtJQUNMLENBQUM7SUFDRCxZQUdVLGlCQUF5QixFQUN6QixnQkFBa0M7UUFEbEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFRO1FBQ3pCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFwQjVDLGlCQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixJQUFJLHFCQUFxQixDQUFBO0lBcUIzRCxDQUFDOzhHQXRCTyxXQUFXLGtCQW1CWixTQUFTO2tIQW5CUixXQUFXLGNBRlYsTUFBTTs7MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQW1CSSxRQUFROzswQkFDUixNQUFNOzJCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBMQU5HXzJfVE9fM19NQVBQRVIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvaTE4bi9zcmMnXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfR040X0xPR0lOX1VSTCA9IGAvZ2VvbmV0d29yay9zcnYvXFwke2xhbmczfS9jYXRhbG9nLnNpZ25pbj9yZWRpcmVjdD1cXCR7Y3VycmVudF91cmx9YFxuZXhwb3J0IGNvbnN0IExPR0lOX1VSTCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdsb2dpblVybCcpXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XG4gIGJhc2VMb2dpblVybCA9IHRoaXMuYmFzZUxvZ2luVXJsVG9rZW4gfHwgREVGQVVMVF9HTjRfTE9HSU5fVVJMXG4gIGdldCBsb2dpblVybCgpIHtcbiAgICBsZXQgYmFzZVVybCA9IHRoaXMuYmFzZUxvZ2luVXJsXG4gICAgY29uc3QgbG9jYXRpb25IYXNRdWVyeVBhcmFtcyA9ICEhd2luZG93LmxvY2F0aW9uLnNlYXJjaFxuICAgIC8vIHRoaXMgaXMgc3BlY2lmaWMgdG8gZ2VvcmNoZXN0cmEgbG9naW4gVVJMIGJhc2VkIG9uIGEgP2xvZ2luIHF1ZXJ5IHBhcmFtXG4gICAgaWYgKGJhc2VVcmwuc3RhcnRzV2l0aCgnJHtjdXJyZW50X3VybH0/JykgJiYgbG9jYXRpb25IYXNRdWVyeVBhcmFtcykge1xuICAgICAgYmFzZVVybCA9IGJhc2VVcmwucmVwbGFjZSgnPycsICcmJylcbiAgICB9XG4gICAgcmV0dXJuIGJhc2VVcmxcbiAgICAgIC5yZXBsYWNlKCcke2N1cnJlbnRfdXJsfScsIHdpbmRvdy5sb2NhdGlvbi50b1N0cmluZygpKVxuICAgICAgLnJlcGxhY2UoJyR7bGFuZzJ9JywgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nKVxuICAgICAgLnJlcGxhY2UoXG4gICAgICAgICcke2xhbmczfScsXG4gICAgICAgIExBTkdfMl9UT18zX01BUFBFUlt0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmddXG4gICAgICApXG4gIH1cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KExPR0lOX1VSTClcbiAgICBwcml2YXRlIGJhc2VMb2dpblVybFRva2VuOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICkge31cbn1cbiJdfQ==
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcGkvcmVwb3NpdG9yeS9zcmMvbGliL2duNC9hdXRoL2F1dGguc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzVFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFBO0FBQzVFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFBOzs7QUFFdEQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsbUVBQW1FLENBQUE7QUFDeEcsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLElBQUksY0FBYyxDQUFTLFVBQVUsQ0FBQyxDQUFBO0FBSy9ELE1BQU0sT0FBTyxXQUFXO0lBRXRCLElBQUksUUFBUTtRQUNWLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUE7UUFDL0IsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUE7UUFDdkQsMEVBQTBFO1FBQzFFLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLHNCQUFzQixFQUFFO1lBQ25FLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtTQUNwQztRQUNELE9BQU8sT0FBTzthQUNYLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ3JELE9BQU8sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQzthQUN0RCxPQUFPLENBQ04sVUFBVSxFQUNWLGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FDdEQsQ0FBQTtJQUNMLENBQUM7SUFDRCxZQUdVLGlCQUF5QixFQUN6QixnQkFBa0M7UUFEbEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFRO1FBQ3pCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFwQjVDLGlCQUFZLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixJQUFJLHFCQUFxQixDQUFBO0lBcUIzRCxDQUFDOytHQXRCTyxXQUFXLGtCQW1CWixTQUFTO21IQW5CUixXQUFXLGNBRlYsTUFBTTs7NEZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQW1CSSxRQUFROzswQkFDUixNQUFNOzJCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBMQU5HXzJfVE9fM19NQVBQRVIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvaTE4bi9zcmMnXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfR040X0xPR0lOX1VSTCA9IGAvZ2VvbmV0d29yay9zcnYvXFwke2xhbmczfS9jYXRhbG9nLnNpZ25pbj9yZWRpcmVjdD1cXCR7Y3VycmVudF91cmx9YFxuZXhwb3J0IGNvbnN0IExPR0lOX1VSTCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdsb2dpblVybCcpXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmljZSB7XG4gIGJhc2VMb2dpblVybCA9IHRoaXMuYmFzZUxvZ2luVXJsVG9rZW4gfHwgREVGQVVMVF9HTjRfTE9HSU5fVVJMXG4gIGdldCBsb2dpblVybCgpIHtcbiAgICBsZXQgYmFzZVVybCA9IHRoaXMuYmFzZUxvZ2luVXJsXG4gICAgY29uc3QgbG9jYXRpb25IYXNRdWVyeVBhcmFtcyA9ICEhd2luZG93LmxvY2F0aW9uLnNlYXJjaFxuICAgIC8vIHRoaXMgaXMgc3BlY2lmaWMgdG8gZ2VvcmNoZXN0cmEgbG9naW4gVVJMIGJhc2VkIG9uIGEgP2xvZ2luIHF1ZXJ5IHBhcmFtXG4gICAgaWYgKGJhc2VVcmwuc3RhcnRzV2l0aCgnJHtjdXJyZW50X3VybH0/JykgJiYgbG9jYXRpb25IYXNRdWVyeVBhcmFtcykge1xuICAgICAgYmFzZVVybCA9IGJhc2VVcmwucmVwbGFjZSgnPycsICcmJylcbiAgICB9XG4gICAgcmV0dXJuIGJhc2VVcmxcbiAgICAgIC5yZXBsYWNlKCcke2N1cnJlbnRfdXJsfScsIHdpbmRvdy5sb2NhdGlvbi50b1N0cmluZygpKVxuICAgICAgLnJlcGxhY2UoJyR7bGFuZzJ9JywgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nKVxuICAgICAgLnJlcGxhY2UoXG4gICAgICAgICcke2xhbmczfScsXG4gICAgICAgIExBTkdfMl9UT18zX01BUFBFUlt0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmddXG4gICAgICApXG4gIH1cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KExPR0lOX1VSTClcbiAgICBwcml2YXRlIGJhc2VMb2dpblVybFRva2VuOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICkge31cbn1cbiJdfQ==
@@ -27,13 +27,13 @@ export class GravatarService {
27
27
  }
28
28
  return iconUrl;
29
29
  }
30
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GravatarService, deps: [{ token: i1.Gn4SettingsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
31
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GravatarService, providedIn: 'root' }); }
30
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GravatarService, deps: [{ token: i1.Gn4SettingsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
31
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GravatarService, providedIn: 'root' }); }
32
32
  }
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: GravatarService, decorators: [{
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GravatarService, decorators: [{
34
34
  type: Injectable,
35
35
  args: [{
36
36
  providedIn: 'root',
37
37
  }]
38
38
  }], ctorParameters: function () { return [{ type: i1.Gn4SettingsService }]; } });
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhdmF0YXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL3JlcG9zaXRvcnkvc3JjL2xpYi9nbjQvYXV0aC9ncmF2YXRhci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFMUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUE7QUFDckUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3BDLE9BQU8sRUFBRSxjQUFjLEVBQWMsTUFBTSxNQUFNLENBQUE7OztBQUtqRCxNQUFNLE9BQU8sZUFBZTtJQVExQixZQUFvQixrQkFBc0M7UUFBdEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQVBsRCxpQkFBWSxHQUFHLGtDQUFrQyxDQUFBO1FBQ2pELHVCQUFrQixHQUFHLElBQUksQ0FBQTtRQUVoQixlQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ25FLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FDeEQsQ0FBQTtJQUU0RCxDQUFDO0lBRTlELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDaEMsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFZO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ3pCLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUN4RCxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLE1BQU0sU0FBUyxFQUFFLENBQUMsQ0FDakUsQ0FBQTtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBYztRQUNwQyxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUE7UUFDaEIsSUFBSTtZQUNGLE9BQU8sR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7U0FDNUQ7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU8sRUFBRSxDQUFBO1NBQ1Y7UUFDRCxPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDOzhHQTdCVSxlQUFlO2tIQUFmLGVBQWUsY0FGZCxNQUFNOzsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQXZhdGFyU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4vYXZhdGFyLnNlcnZpY2UuaW50ZXJmYWNlJ1xuaW1wb3J0IHsgR240U2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vc2V0dGluZ3MvZ240LXNldHRpbmdzLnNlcnZpY2UnXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEdyYXZhdGFyU2VydmljZSBpbXBsZW1lbnRzIEF2YXRhclNlcnZpY2VJbnRlcmZhY2Uge1xuICBwcml2YXRlIEdSQVZBVEFSX1VSTCA9ICdodHRwczovL3d3dy5ncmF2YXRhci5jb20vYXZhdGFyLydcbiAgcHJpdmF0ZSBHUkFWQVRBUl9JREVOVElDT04gPSAnbXAnXG5cbiAgcHJpdmF0ZSByZWFkb25seSBpZGVudGljb24kID0gdGhpcy5nbjRTZXR0aW5nc1NlcnZpY2UuaWRlbnRpY29uJC5waXBlKFxuICAgIG1hcCgoaWRlbnRpY29uKSA9PiBpZGVudGljb24/LnJlcGxhY2UoJ2dyYXZhdGFyOicsICcnKSlcbiAgKVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZ240U2V0dGluZ3NTZXJ2aWNlOiBHbjRTZXR0aW5nc1NlcnZpY2UpIHt9XG5cbiAgZ2V0UGxhY2Vob2xkZXIoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9maWxlSWNvbignJylcbiAgfVxuXG4gIGdldFByb2ZpbGVJY29uKGhhc2g6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpY29uJC5waXBlKFxuICAgICAgbWFwKChpZGVudGljb24pID0+IGlkZW50aWNvbiB8fCB0aGlzLkdSQVZBVEFSX0lERU5USUNPTiksXG4gICAgICBtYXAoKGlkZW50aWNvbikgPT4gYCR7dGhpcy5HUkFWQVRBUl9VUkx9JHtoYXNofT9kPSR7aWRlbnRpY29ufWApXG4gICAgKVxuICB9XG5cbiAgYXN5bmMgZ2V0UHJvZmlsZUljb25VcmwodXNlcklkOiBzdHJpbmcpIHtcbiAgICBsZXQgaWNvblVybCA9ICcnXG4gICAgdHJ5IHtcbiAgICAgIGljb25VcmwgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmdldFByb2ZpbGVJY29uKHVzZXJJZCkpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICByZXR1cm4gaWNvblVybFxuICB9XG59XG4iXX0=
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhdmF0YXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL3JlcG9zaXRvcnkvc3JjL2xpYi9nbjQvYXV0aC9ncmF2YXRhci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFMUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUE7QUFDckUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3BDLE9BQU8sRUFBRSxjQUFjLEVBQWMsTUFBTSxNQUFNLENBQUE7OztBQUtqRCxNQUFNLE9BQU8sZUFBZTtJQVExQixZQUFvQixrQkFBc0M7UUFBdEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQVBsRCxpQkFBWSxHQUFHLGtDQUFrQyxDQUFBO1FBQ2pELHVCQUFrQixHQUFHLElBQUksQ0FBQTtRQUVoQixlQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ25FLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FDeEQsQ0FBQTtJQUU0RCxDQUFDO0lBRTlELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDaEMsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFZO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ3pCLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUN4RCxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLE1BQU0sU0FBUyxFQUFFLENBQUMsQ0FDakUsQ0FBQTtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBYztRQUNwQyxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUE7UUFDaEIsSUFBSTtZQUNGLE9BQU8sR0FBRyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7U0FDNUQ7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU8sRUFBRSxDQUFBO1NBQ1Y7UUFDRCxPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDOytHQTdCVSxlQUFlO21IQUFmLGVBQWUsY0FGZCxNQUFNOzs0RkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQXZhdGFyU2VydmljZUludGVyZmFjZSB9IGZyb20gJy4vYXZhdGFyLnNlcnZpY2UuaW50ZXJmYWNlJ1xuaW1wb3J0IHsgR240U2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vc2V0dGluZ3MvZ240LXNldHRpbmdzLnNlcnZpY2UnXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEdyYXZhdGFyU2VydmljZSBpbXBsZW1lbnRzIEF2YXRhclNlcnZpY2VJbnRlcmZhY2Uge1xuICBwcml2YXRlIEdSQVZBVEFSX1VSTCA9ICdodHRwczovL3d3dy5ncmF2YXRhci5jb20vYXZhdGFyLydcbiAgcHJpdmF0ZSBHUkFWQVRBUl9JREVOVElDT04gPSAnbXAnXG5cbiAgcHJpdmF0ZSByZWFkb25seSBpZGVudGljb24kID0gdGhpcy5nbjRTZXR0aW5nc1NlcnZpY2UuaWRlbnRpY29uJC5waXBlKFxuICAgIG1hcCgoaWRlbnRpY29uKSA9PiBpZGVudGljb24/LnJlcGxhY2UoJ2dyYXZhdGFyOicsICcnKSlcbiAgKVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZ240U2V0dGluZ3NTZXJ2aWNlOiBHbjRTZXR0aW5nc1NlcnZpY2UpIHt9XG5cbiAgZ2V0UGxhY2Vob2xkZXIoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRQcm9maWxlSWNvbignJylcbiAgfVxuXG4gIGdldFByb2ZpbGVJY29uKGhhc2g6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpY29uJC5waXBlKFxuICAgICAgbWFwKChpZGVudGljb24pID0+IGlkZW50aWNvbiB8fCB0aGlzLkdSQVZBVEFSX0lERU5USUNPTiksXG4gICAgICBtYXAoKGlkZW50aWNvbikgPT4gYCR7dGhpcy5HUkFWQVRBUl9VUkx9JHtoYXNofT9kPSR7aWRlbnRpY29ufWApXG4gICAgKVxuICB9XG5cbiAgYXN5bmMgZ2V0UHJvZmlsZUljb25VcmwodXNlcklkOiBzdHJpbmcpIHtcbiAgICBsZXQgaWNvblVybCA9ICcnXG4gICAgdHJ5IHtcbiAgICAgIGljb25VcmwgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmdldFByb2ZpbGVJY29uKHVzZXJJZCkpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICByZXR1cm4gaWNvblVybFxuICB9XG59XG4iXX0=