ontimize-web-ngx 15.6.0-next.1 → 15.6.0-next.11

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 (161) hide show
  1. package/esm2020/lib/components/app-header/o-app-header.component.mjs +3 -3
  2. package/esm2020/lib/components/app-sidenav/menu-group/o-app-sidenav-menu-group.component.mjs +19 -3
  3. package/esm2020/lib/components/app-sidenav/menu-item/o-app-sidenav-menu-item.component.mjs +17 -4
  4. package/esm2020/lib/components/app-sidenav/o-app-sidenav.component.mjs +7 -5
  5. package/esm2020/lib/components/filter-builder/o-filter-builder.component.mjs +1 -1
  6. package/esm2020/lib/components/form/navigation/o-form-navigation.component.mjs +42 -24
  7. package/esm2020/lib/components/form/o-form.component.mjs +4 -3
  8. package/esm2020/lib/components/form/services/o-form-message.service.mjs +2 -2
  9. package/esm2020/lib/components/grid/o-grid.component.mjs +19 -17
  10. package/esm2020/lib/components/grid/skeketon/o-grid-skeleton.component.mjs +12 -15
  11. package/esm2020/lib/components/index.mjs +2 -1
  12. package/esm2020/lib/components/input/file-input/o-file-input.component.mjs +3 -2
  13. package/esm2020/lib/components/input/o-boolean-form-data-component.class.mjs +9 -1
  14. package/esm2020/lib/components/input/o-form-service-component.class.mjs +4 -3
  15. package/esm2020/lib/components/list/list-item/o-list-item.component.mjs +8 -3
  16. package/esm2020/lib/components/list/o-list.component.mjs +41 -16
  17. package/esm2020/lib/components/list/skeleton/o-list-skeleton.component.mjs +12 -15
  18. package/esm2020/lib/components/o-form-data-component.class.mjs +2 -2
  19. package/esm2020/lib/components/o-repeatable-skeleton.component.mjs +33 -0
  20. package/esm2020/lib/components/o-service-base-component.class.mjs +5 -4
  21. package/esm2020/lib/components/o-service-component.class.mjs +10 -9
  22. package/esm2020/lib/components/o-skeleton.component.mjs +15 -6
  23. package/esm2020/lib/components/table/column/cell-editor/o-base-table-cell-editor.class.mjs +2 -2
  24. package/esm2020/lib/components/table/column/cell-renderer/o-base-table-cell-renderer.class.mjs +1 -1
  25. package/esm2020/lib/components/table/column/cell-renderer/service/o-table-cell-renderer-service.component.mjs +5 -4
  26. package/esm2020/lib/components/table/column/o-column.class.mjs +2 -1
  27. package/esm2020/lib/components/table/column/o-table-column.component.mjs +10 -4
  28. package/esm2020/lib/components/table/extensions/contextmenu/o-table-context-menu.component.mjs +24 -6
  29. package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.mjs +75 -87
  30. package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column.service.mjs +53 -0
  31. package/esm2020/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.mjs +12 -4
  32. package/esm2020/lib/components/table/extensions/header/table-menu/o-table-menu.component.mjs +2 -2
  33. package/esm2020/lib/components/table/extensions/o-table.dao.mjs +6 -4
  34. package/esm2020/lib/components/table/extensions/skeleton/o-table-skeleton.component.mjs +5 -19
  35. package/esm2020/lib/components/table/o-table-base.class.mjs +1 -1
  36. package/esm2020/lib/components/table/o-table.component.mjs +104 -10
  37. package/esm2020/lib/components/table/o-table.module.mjs +4 -1
  38. package/esm2020/lib/components/tree/o-tree.component.mjs +96 -14
  39. package/esm2020/lib/components/tree/o-tree.datasource.mjs +3 -3
  40. package/esm2020/lib/components/user-info/o-user-info.component.mjs +5 -4
  41. package/esm2020/lib/config/o-providers.mjs +5 -3
  42. package/esm2020/lib/i18n/i18n.mjs +6 -3
  43. package/esm2020/lib/injection-tokens/index.mjs +19 -0
  44. package/esm2020/lib/interfaces/base-response.interface.mjs +1 -1
  45. package/esm2020/lib/interfaces/form-layout-manager.interface.mjs +1 -1
  46. package/esm2020/lib/interfaces/index.mjs +3 -1
  47. package/esm2020/lib/interfaces/jsonapi-config.interface.mjs +3 -0
  48. package/esm2020/lib/interfaces/jsonapi-response.interface.mjs +2 -1
  49. package/esm2020/lib/interfaces/o-table-column.interface.mjs +1 -1
  50. package/esm2020/lib/interfaces/service-response.interface.mjs +1 -1
  51. package/esm2020/lib/layouts/app-layout/o-app-layout-base.class.mjs +1 -1
  52. package/esm2020/lib/layouts/app-layout/o-app-layout.component.mjs +26 -9
  53. package/esm2020/lib/layouts/form-layout/o-form-layout-manager.component.mjs +4 -3
  54. package/esm2020/lib/layouts/form-layout/split-pane/o-form-layout-split-pane.component.mjs +2 -2
  55. package/esm2020/lib/layouts/form-layout/tabgroup/o-form-layout-tabgroup.component.mjs +2 -1
  56. package/esm2020/lib/services/base-service.class.mjs +3 -3
  57. package/esm2020/lib/services/factories.mjs +25 -53
  58. package/esm2020/lib/services/index.mjs +2 -2
  59. package/esm2020/lib/services/jsonapi/jsonapi-preferences.service.mjs +2 -2
  60. package/esm2020/lib/services/jsonapi/jsonapi.service.mjs +53 -21
  61. package/esm2020/lib/services/request-adapter/base-request-argument.adapter.mjs +12 -0
  62. package/esm2020/lib/services/request-adapter/base-request-argument.interface.mjs +2 -0
  63. package/esm2020/lib/services/request-adapter/index.mjs +5 -0
  64. package/esm2020/lib/services/request-adapter/jsonapi-request-arguments.adapter.mjs +70 -0
  65. package/esm2020/lib/services/request-adapter/ontimize-request-arguments.adapter.mjs +19 -0
  66. package/esm2020/lib/services/state/o-filter-builder-component-state.service.mjs +1 -1
  67. package/esm2020/lib/services/state/o-table-component-state.class.mjs +7 -1
  68. package/esm2020/lib/services/state/o-table-component-state.service.mjs +8 -2
  69. package/esm2020/lib/services/translate/o-translate.service.mjs +3 -2
  70. package/esm2020/lib/types/config.type.mjs +1 -1
  71. package/esm2020/lib/types/form-layout-detail-component-data.type.mjs +1 -1
  72. package/esm2020/lib/types/index.mjs +1 -2
  73. package/esm2020/lib/types/service-configuration.type.mjs +1 -1
  74. package/esm2020/lib/types/table/index.mjs +2 -1
  75. package/esm2020/lib/types/table/o-column-value-filter.type.mjs +1 -1
  76. package/esm2020/lib/types/table/o-table-expandable-row-state.type.mjs +2 -0
  77. package/esm2020/lib/util/codes.mjs +3 -1
  78. package/esm2020/lib/util/errors.mjs +3 -9
  79. package/esm2020/lib/util/factory.util.mjs +67 -0
  80. package/esm2020/lib/util/index.mjs +3 -1
  81. package/esm2020/lib/util/injection-token.utils.mjs +4 -0
  82. package/esm2020/lib/util/preference-mapping-util.mjs +2 -2
  83. package/esm2020/lib/util/sqltypes.mjs +2 -2
  84. package/esm2020/lib/util/util.mjs +11 -53
  85. package/esm2020/public-api.mjs +2 -1
  86. package/fesm2015/ontimize-web-ngx.mjs +6995 -6537
  87. package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
  88. package/fesm2020/ontimize-web-ngx.mjs +6634 -6194
  89. package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
  90. package/lib/components/app-sidenav/menu-group/o-app-sidenav-menu-group.component.d.ts +3 -0
  91. package/lib/components/app-sidenav/menu-item/o-app-sidenav-menu-item.component.d.ts +1 -0
  92. package/lib/components/app-sidenav/o-app-sidenav.component.d.ts +2 -1
  93. package/lib/components/filter-builder/o-filter-builder.component.d.ts +1 -1
  94. package/lib/components/form/navigation/o-form-navigation.component.d.ts +7 -4
  95. package/lib/components/grid/skeketon/o-grid-skeleton.component.d.ts +4 -7
  96. package/lib/components/index.d.ts +1 -0
  97. package/lib/components/input/o-boolean-form-data-component.class.d.ts +1 -0
  98. package/lib/components/list/o-list.component.d.ts +5 -1
  99. package/lib/components/list/skeleton/o-list-skeleton.component.d.ts +4 -7
  100. package/lib/components/o-repeatable-skeleton.component.d.ts +9 -0
  101. package/lib/components/o-skeleton.component.d.ts +10 -5
  102. package/lib/components/table/column/cell-renderer/o-base-table-cell-renderer.class.d.ts +1 -1
  103. package/lib/components/table/column/o-column.class.d.ts +2 -1
  104. package/lib/components/table/column/o-table-column.component.d.ts +2 -2
  105. package/lib/components/table/extensions/contextmenu/o-table-context-menu.component.d.ts +2 -0
  106. package/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.d.ts +9 -6
  107. package/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column.service.d.ts +12 -0
  108. package/lib/components/table/extensions/header/o-table-header-components.d.ts +2 -2
  109. package/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.d.ts +1 -1
  110. package/lib/components/table/extensions/skeleton/o-table-skeleton.component.d.ts +1 -10
  111. package/lib/components/table/o-table-base.class.d.ts +2 -0
  112. package/lib/components/table/o-table.component.d.ts +12 -2
  113. package/lib/components/tree/o-tree.component.d.ts +10 -1
  114. package/lib/components/user-info/o-user-info.component.d.ts +2 -1
  115. package/lib/config/o-directives.d.ts +1 -1
  116. package/lib/i18n/i18n.d.ts +3 -0
  117. package/lib/injection-tokens/index.d.ts +33 -0
  118. package/lib/interfaces/base-response.interface.d.ts +0 -2
  119. package/lib/interfaces/form-layout-manager.interface.d.ts +1 -1
  120. package/lib/interfaces/index.d.ts +2 -0
  121. package/lib/interfaces/jsonapi-config.interface.d.ts +3 -0
  122. package/lib/interfaces/jsonapi-response.interface.d.ts +47 -7
  123. package/lib/interfaces/o-table-column.interface.d.ts +2 -1
  124. package/lib/interfaces/service-response.interface.d.ts +2 -0
  125. package/lib/layouts/app-layout/o-app-layout-base.class.d.ts +1 -1
  126. package/lib/layouts/app-layout/o-app-layout.component.d.ts +7 -3
  127. package/lib/services/base-service.class.d.ts +2 -2
  128. package/lib/services/factories.d.ts +7 -28
  129. package/lib/services/index.d.ts +1 -1
  130. package/lib/services/jsonapi/jsonapi.service.d.ts +7 -4
  131. package/lib/services/{query-arguments/base-query-argument.adapter.d.ts → request-adapter/base-request-argument.adapter.d.ts} +2 -1
  132. package/lib/services/{query-arguments/base-query-argument.interface.d.ts → request-adapter/base-request-argument.interface.d.ts} +1 -1
  133. package/lib/services/request-adapter/index.d.ts +4 -0
  134. package/lib/services/request-adapter/jsonapi-request-arguments.adapter.d.ts +13 -0
  135. package/lib/services/request-adapter/ontimize-request-arguments.adapter.d.ts +8 -0
  136. package/lib/services/state/o-filter-builder-component-state.service.d.ts +1 -1
  137. package/lib/services/state/o-table-component-state.class.d.ts +3 -0
  138. package/lib/types/config.type.d.ts +2 -2
  139. package/lib/types/form-layout-detail-component-data.type.d.ts +1 -1
  140. package/lib/types/index.d.ts +0 -1
  141. package/lib/types/service-configuration.type.d.ts +12 -2
  142. package/lib/types/table/index.d.ts +1 -0
  143. package/lib/types/table/o-column-value-filter.type.d.ts +3 -0
  144. package/lib/types/table/o-table-expandable-row-state.type.d.ts +5 -0
  145. package/lib/util/codes.d.ts +3 -0
  146. package/lib/util/factory.util.d.ts +10 -0
  147. package/lib/util/index.d.ts +2 -0
  148. package/lib/util/injection-token.utils.d.ts +2 -0
  149. package/lib/util/util.d.ts +1 -5
  150. package/package.json +1 -1
  151. package/public-api.d.ts +1 -0
  152. package/esm2020/lib/services/query-arguments/base-query-argument.adapter.mjs +0 -9
  153. package/esm2020/lib/services/query-arguments/base-query-argument.interface.mjs +0 -2
  154. package/esm2020/lib/services/query-arguments/index.mjs +0 -5
  155. package/esm2020/lib/services/query-arguments/jsonapi-query-arguments.adapter.mjs +0 -62
  156. package/esm2020/lib/services/query-arguments/ontimize-query-arguments.adapter.mjs +0 -19
  157. package/esm2020/lib/types/ontimize-service-config.type.mjs +0 -2
  158. package/lib/services/query-arguments/index.d.ts +0 -4
  159. package/lib/services/query-arguments/jsonapi-query-arguments.adapter.d.ts +0 -12
  160. package/lib/services/query-arguments/ontimize-query-arguments.adapter.d.ts +0 -8
  161. package/lib/types/ontimize-service-config.type.d.ts +0 -5
@@ -166,7 +166,7 @@ export class OFormDataComponent extends OBaseComponent {
166
166
  return !this.isReadOnly && this._fControl && this._fControl.touched && Util.isDefined(this._fControl.errors);
167
167
  }
168
168
  getErrorValue(error, prop) {
169
- return this._fControl && this._fControl.hasError(error) ? this._fControl.getError(error)[prop] || '' : '';
169
+ return this._fControl?.hasError(error) ? this._fControl.getError(error)[prop] ?? '' : '';
170
170
  }
171
171
  getActiveOErrors() {
172
172
  return ErrorsUtils.getActiveOErrors(this);
@@ -561,4 +561,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
561
561
  type: ContentChildren,
562
562
  args: [MatError]
563
563
  }] } });
564
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1mb3JtLWRhdGEtY29tcG9uZW50LmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvby1mb3JtLWRhdGEtY29tcG9uZW50LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFJTCxTQUFTLEVBRVQsWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0MsZ0JBQWdCLEVBQWUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakgsT0FBTyxFQUFrQixRQUFRLEVBQTBCLFNBQVMsRUFBbUIsTUFBTSw4QkFBOEIsQ0FBQztBQUc1SCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUd6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQU01RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVB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U25CLFFBQVEsZ0VBZFgsU0FBUyx1RUFZVCxrQkFBa0I7QUF4RWhDO0lBQUMscUJBQXFCLEVBQUU7O3VEQUNXO0FBQ25DO0lBQUMscUJBQXFCLEVBQUU7OzJEQUNlO0FBRXZDO0lBQUMscUJBQXFCLEVBQUU7O3VEQUNZO0FBR3BDO0lBQUMscUJBQXFCLEVBQUU7OzhEQUNtQjtBQUMzQztJQUFDLHFCQUFxQixFQUFFOzt3REFDWTtBQUNwQztJQUFDLHFCQUFxQixFQUFFOzs0REFDaUI7MkZBbEI5QixrQkFBa0I7a0JBSjlCLFNBQVM7bUJBQUM7b0JBQ1QsTUFBTSxFQUFFLG9DQUFvQztvQkFDNUMsT0FBTyxFQUFFLHFDQUFxQztpQkFDL0M7cUpBTVEsV0FBVyxNQUVYLGVBQWUsTUFHZixXQUFXLE1BSVgsa0JBQWtCLE1BRWxCLFlBQVksTUFFWixnQkFBZ0IsTUFJbkIsZUFBZTtzQkFEbEIsS0FBSztnQkFnQkYsU0FBUztzQkFEWixXQUFXO3VCQUFDLGFBQWE7Z0JBTTFCLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxPQUFPLEVBQUUsRUFBRTtnQkF3QmYsY0FBYztzQkFEdkIsWUFBWTt1QkFBQyxTQUFTO2dCQU12QixpQkFBaUI7c0JBRGhCLGVBQWU7dUJBQUMsbUJBQW1CO2dCQVFwQyxpQkFBaUI7c0JBRGhCLFlBQVk7dUJBQUMsa0JBQWtCO2dCQUVLLGNBQWM7c0JBQWxELGVBQWU7dUJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2UsXG4gIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFzeW5jVmFsaWRhdG9yRm4sIFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGbG9hdExhYmVsVHlwZSwgTWF0RXJyb3IsIE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UsIE1hdFN1ZmZpeCwgU3Vic2NyaXB0U2l6aW5nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgT19JTlBVVFNfT1BUSU9OUyB9IGZyb20gJy4uL2NvbmZpZy9hcHAtY29uZmlnJztcbmltcG9ydCB7IEJvb2xlYW5Db252ZXJ0ZXIsIEJvb2xlYW5JbnB1dENvbnZlcnRlciB9IGZyb20gJy4uL2RlY29yYXRvcnMvaW5wdXQtY29udmVydGVyJztcbmltcG9ydCB7IE9NYXRFcnJvckRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvby1tYXQtZXJyb3IuZGlyZWN0aXZlJztcbmltcG9ydCB7IElGb3JtRGF0YUNvbXBvbmVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZm9ybS1kYXRhLWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUZvcm1EYXRhVHlwZUNvbXBvbmVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZm9ybS1kYXRhLXR5cGUtY29tcG9uZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wZXJtaXNzaW9ucy9wZXJtaXNzaW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IE9WYWxpZGF0b3JDb21wb25lbnQgfSBmcm9tICcuLi9zaGFyZWQvY29tcG9uZW50cy92YWxpZGF0aW9uL28tdmFsaWRhdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFcnJvckRhdGEgfSBmcm9tICcuLi90eXBlcy9lcnJvci1kYXRhLnR5cGUnO1xuaW1wb3J0IHsgRm9ybVZhbHVlT3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzL2Zvcm0tdmFsdWUtb3B0aW9ucy50eXBlJztcbmltcG9ydCB7IE9JbnB1dHNPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMvby1pbnB1dHMtb3B0aW9ucy50eXBlJztcbmltcG9ydCB7IE9NYXRFcnJvck9wdGlvbnMgfSBmcm9tICcuLi90eXBlcy9vLW1hdC1lcnJvci50eXBlJztcbmltcG9ydCB7IE9QZXJtaXNzaW9ucyB9IGZyb20gJy4uL3R5cGVzL28tcGVybWlzc2lvbnMudHlwZSc7XG5pbXBvcnQgeyBDb2RlcyB9IGZyb20gJy4uL3V0aWwvY29kZXMnO1xuaW1wb3J0IHsgRXJyb3JzVXRpbHMgfSBmcm9tICcuLi91dGlsL2Vycm9ycyc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uc1V0aWxzIH0gZnJvbSAnLi4vdXRpbC9wZXJtaXNzaW9ucyc7XG5pbXBvcnQgeyBTUUxUeXBlcyB9IGZyb20gJy4uL3V0aWwvc3FsdHlwZXMnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBPRm9ybVZhbHVlIH0gZnJvbSAnLi9mb3JtL28tZm9ybS12YWx1ZSc7XG5pbXBvcnQgeyBPRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vZm9ybS9vLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IE9Gb3JtQ29udHJvbCB9IGZyb20gJy4vaW5wdXQvby1mb3JtLWNvbnRyb2wuY2xhc3MnO1xuaW1wb3J0IHsgT0Jhc2VDb21wb25lbnQgfSBmcm9tICcuL28tY29tcG9uZW50LmNsYXNzJztcbmltcG9ydCB7IE9WYWx1ZUNoYW5nZUV2ZW50IH0gZnJvbSAnLi9vLXZhbHVlLWNoYW5nZS1ldmVudC5jbGFzcyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX0ZPUk1fREFUQV9DT01QT05FTlQgPSBbXG4gICdvYXR0cjogYXR0cicsXG4gICdvbGFiZWw6IGxhYmVsJyxcbiAgJ2Zsb2F0TGFiZWw6IGZsb2F0LWxhYmVsJyxcbiAgJ29wbGFjZWhvbGRlcjogcGxhY2Vob2xkZXInLFxuICAndG9vbHRpcCcsXG4gICd0b29sdGlwUG9zaXRpb246IHRvb2x0aXAtcG9zaXRpb24nLFxuICAndG9vbHRpcFNob3dEZWxheTogdG9vbHRpcC1zaG93LWRlbGF5JyxcbiAgJ3Rvb2x0aXBIaWRlRGVsYXk6IHRvb2x0aXAtaGlkZS1kZWxheScsXG4gICdkYXRhJyxcbiAgJ2F1dG9CaW5kaW5nOiBhdXRvbWF0aWMtYmluZGluZycsXG4gICdhdXRvUmVnaXN0ZXJpbmc6IGF1dG9tYXRpYy1yZWdpc3RlcmluZycsXG4gICdlbmFibGVkJyxcbiAgJ29yZXF1aXJlZDogcmVxdWlyZWQnLFxuICAvLyBzcWx0eXBlW3N0cmluZ106IERhdGEgdHlwZSBhY2NvcmRpbmcgdG8gSmF2YSBzdGFuZGFyZC4gU2VlIFNRTFR5cGUgbmdDbGFzcy4gRGVmYXVsdDogJ09USEVSJ1xuICAnc3FsVHlwZTogc3FsLXR5cGUnLFxuICAnd2lkdGgnLFxuICAncmVhZE9ubHk6IHJlYWQtb25seScsXG4gICdjbGVhckJ1dHRvbjogY2xlYXItYnV0dG9uJyxcbiAgJ2FuZ3VsYXJWYWxpZGF0b3JzRm46IHZhbGlkYXRvcnMnLFxuICAnYW5ndWxhclZhbGlkYXRvcnNGbkVycm9yczogdmFsaWRhdG9ycy1lcnJvcnMnLFxuICAnYXBwZWFyYW5jZScsXG4gICdoaWRlUmVxdWlyZWRNYXJrZXI6aGlkZS1yZXF1aXJlZC1tYXJrZXInLFxuICAnbGFiZWxWaXNpYmxlOmxhYmVsLXZpc2libGUnLFxuICAnc2VsZWN0QWxsT25DbGljazpzZWxlY3QtYWxsLW9uLWNsaWNrJyxcbiAgJ2FuZ3VsYXJBc3luY1ZhbGlkYXRvcnNGbjogYXN5bmMtdmFsaWRhdG9ycycsXG5dO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9PVVRQVVRTX09fRk9STV9EQVRBX0NPTVBPTkVOVCA9IFtcbiAgJ29uQ2hhbmdlJyxcbiAgJ29uVmFsdWVDaGFuZ2UnLFxuICAnb25Gb2N1cycsXG4gICdvbkJsdXInXG5dO1xuXG5ARGlyZWN0aXZlKHtcbiAgaW5wdXRzOiBERUZBVUxUX0lOUFVUU19PX0ZPUk1fREFUQV9DT01QT05FTlQsXG4gIG91dHB1dHM6IERFRkFVTFRfT1VUUFVUU19PX0ZPUk1fREFUQV9DT01QT05FTlRcbn0pXG5leHBvcnQgY2xhc3MgT0Zvcm1EYXRhQ29tcG9uZW50IGV4dGVuZHMgT0Jhc2VDb21wb25lbnQgaW1wbGVtZW50cyBJRm9ybURhdGFDb21wb25lbnQsIElGb3JtRGF0YVR5cGVDb21wb25lbnQsXG4gIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICAvKiBJbnB1dHMgKi9cbiAgcHVibGljIHNxbFR5cGU6IHN0cmluZztcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBhdXRvQmluZGluZzogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgYXV0b1JlZ2lzdGVyaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIHdpZHRoOiBzdHJpbmc7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgY2xlYXJCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGFuZ3VsYXJWYWxpZGF0b3JzRm46IFZhbGlkYXRvckZuW10gPSBbXTtcbiAgcHVibGljIGFuZ3VsYXJWYWxpZGF0b3JzRm5FcnJvcnM6IEVycm9yRGF0YVtdID0gW107XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgaGlkZVJlcXVpcmVkTWFya2VyOiBib29sZWFuID0gZmFsc2U7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgbGFiZWxWaXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHB1YmxpYyBzZWxlY3RBbGxPbkNsaWNrOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBhbmd1bGFyQXN5bmNWYWxpZGF0b3JzRm46IEFzeW5jVmFsaWRhdG9yRm5bXSA9IFtdO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBzdWJzY3JpcHRTaXppbmcoKTogU3Vic2NyaXB0U2l6aW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3Vic2NyaXB0U2l6aW5nIHx8IHRoaXMuZXJyb3JPcHRpb25zPy50eXBlPT09J2xpdGUnPydkeW5hbWljJzonZml4ZWQnIDtcbiAgfVxuICBzZXQgc3Vic2NyaXB0U2l6aW5nKHZhbHVlOiBTdWJzY3JpcHRTaXppbmcpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRTaXppbmcgPSB2YWx1ZSB8fCB0aGlzLmVycm9yT3B0aW9ucz8udHlwZSA9PT0gJ2xpdGUnID8gJ2R5bmFtaWMnIDogJ2ZpeGVkJztcbiAgfVxuICBwcml2YXRlIF9zdWJzY3JpcHRTaXppbmc6IFN1YnNjcmlwdFNpemluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qIE91dHB1dHMgKi9cbiAgcHVibGljIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8b2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBwdWJsaWMgb25WYWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPE9WYWx1ZUNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8T1ZhbHVlQ2hhbmdlRXZlbnQ+KCk7XG4gIHB1YmxpYyBvbkZvY3VzOiBFdmVudEVtaXR0ZXI8b2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBwdWJsaWMgb25CbHVyOiBFdmVudEVtaXR0ZXI8b2JqZWN0PiA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuXG4gIEBIb3N0QmluZGluZygnc3R5bGUud2lkdGgnKVxuICBnZXQgaG9zdFdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMud2lkdGg7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFtdKVxuICBoYW5kbGVDbGljaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RBbGxPbkNsaWNrKSB7XG4gICAgICB0aGlzLnNlbGVjdFZhbHVlKCk7XG4gICAgfVxuICB9XG5cbiAgLyogSW50ZXJuYWwgdmFyaWFibGVzICovXG4gIHByb3RlY3RlZCB2YWx1ZTogT0Zvcm1WYWx1ZTtcbiAgcHJvdGVjdGVkIGRlZmF1bHRWYWx1ZTogYW55ID0gdm9pZCAwO1xuICBwcm90ZWN0ZWQgX1NRTFR5cGU6IG51bWJlciA9IFNRTFR5cGVzLk9USEVSO1xuICBwcm90ZWN0ZWQgX2RlZmF1bHRTUUxUeXBlS2V5OiBzdHJpbmcgPSAnT1RIRVInO1xuICBwcm90ZWN0ZWQgX2ZDb250cm9sOiBPRm9ybUNvbnRyb2w7XG4gIHByb3RlY3RlZCBfZkNvbnRyb2xTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIF9mR3JvdXA6IFVudHlwZWRGb3JtR3JvdXA7XG4gIHByb3RlY3RlZCBlbFJlZjogRWxlbWVudFJlZjtcbiAgcHJvdGVjdGVkIGZvcm06IE9Gb3JtQ29tcG9uZW50O1xuICBwcm90ZWN0ZWQgb2xkVmFsdWU6IGFueTtcblxuICBwcm90ZWN0ZWQgX2Zsb2F0TGFiZWw6IEZsb2F0TGFiZWxUeXBlO1xuICBwcm90ZWN0ZWQgX2FwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2U7XG5cbiAgcHJvdGVjdGVkIG1hdFN1ZmZpeFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBAVmlld0NoaWxkcmVuKE1hdFN1ZmZpeClcbiAgcHJvdGVjdGVkIF9tYXRTdWZmaXhMaXN0OiBRdWVyeUxpc3Q8TWF0U3VmZml4PjtcblxuICBlcnJvcnNEYXRhOiBFcnJvckRhdGFbXSA9IFtdO1xuICBwcm90ZWN0ZWQgdmFsaWRhdG9yc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBAQ29udGVudENoaWxkcmVuKE9WYWxpZGF0b3JDb21wb25lbnQpXG4gIHZhbGlkYXRvckNoaWxkcmVuOiBRdWVyeUxpc3Q8T1ZhbGlkYXRvckNvbXBvbmVudD47XG5cbiAgcHJvdGVjdGVkIHBlcm1pc3Npb25zU2VydmljZTogUGVybWlzc2lvbnNTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgbXV0YXRpb25PYnNlcnZlcjogTXV0YXRpb25PYnNlcnZlcjtcblxuICBlcnJvck9wdGlvbnM6IE9NYXRFcnJvck9wdGlvbnM7XG4gIEBWaWV3Q2hpbGRyZW4oT01hdEVycm9yRGlyZWN0aXZlKVxuICBvTWF0RXJyb3JDaGlsZHJlbjogUXVlcnlMaXN0PE9NYXRFcnJvckRpcmVjdGl2ZT47XG4gIEBDb250ZW50Q2hpbGRyZW4oTWF0RXJyb3IpIHByb3RlY3RlZCBfZXJyb3JDaGlsZHJlbjogUXVlcnlMaXN0PE1hdEVycm9yPjtcblxuICBwcm90ZWN0ZWQgb0lucHV0c09wdGlvbnM6IE9JbnB1dHNPcHRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGZvcm06IE9Gb3JtQ29tcG9uZW50LFxuICAgIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIGluamVjdG9yOiBJbmplY3RvclxuICApIHtcbiAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICB0aGlzLmVsUmVmID0gZWxSZWY7XG4gICAgdGhpcy5wZXJtaXNzaW9uc1NlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldDxQZXJtaXNzaW9uc1NlcnZpY2U+KFBlcm1pc3Npb25zU2VydmljZSk7XG4gICAgdGhpcy5lcnJvck9wdGlvbnMgPSBFcnJvcnNVdGlscy5nZXRFcnJvck9wdGlvbnModGhpcy5pbmplY3Rvcik7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsT25DbGljayA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9fSU5QVVRTX09QVElPTlMpLnNlbGVjdEFsbE9uQ2xpY2s7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5zZWxlY3RBbGxPbkNsaWNrID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbGl6ZSgpO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fbWF0U3VmZml4TGlzdCkge1xuICAgICAgdGhpcy5zZXRTdWZmaXhDbGFzcyh0aGlzLl9tYXRTdWZmaXhMaXN0Lmxlbmd0aCk7XG4gICAgICB0aGlzLm1hdFN1ZmZpeFN1YnNjcmlwdGlvbiA9IHRoaXMuX21hdFN1ZmZpeExpc3QuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN1ZmZpeENsYXNzKHRoaXMuX21hdFN1ZmZpeExpc3QubGVuZ3RoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZhbGlkYXRvckNoaWxkcmVuKSB7XG4gICAgICB0aGlzLnZhbGlkYXRvcnNTdWJzY3JpcHRpb24gPSB0aGlzLnZhbGlkYXRvckNoaWxkcmVuLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWxpZGF0b3JzKCk7XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLnZhbGlkYXRvckNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy51cGRhdGVWYWxpZGF0b3JzKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmhhc0VuYWJsZWRQZXJtaXNzaW9uKSB7XG4gICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIgPSBQZXJtaXNzaW9uc1V0aWxzLnJlZ2lzdGVyRGlzYWJsZWRDaGFuZ2VzSW5Eb20odGhpcy5nZXRNdXRhdGlvbk9ic2VydmVyVGFyZ2V0KCksIHtcbiAgICAgICAgY2FsbGJhY2s6IHRoaXMuZGlzYWJsZUZvcm1Db250cm9sLmJpbmQodGhpcylcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmFkZE9udGltaXplQ3VzdG9tQXBwZWFyYW5jZUNsYXNzKCk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub0lucHV0c09wdGlvbnMgPSB0aGlzLmluamVjdG9yLmdldChPX0lOUFVUU19PUFRJT05TKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLm9JbnB1dHNPcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgVXRpbC5wYXJzZU9JbnB1dHNPcHRpb25zKHRoaXMuZWxSZWYsIHRoaXMub0lucHV0c09wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBTaW1wbGVDaGFuZ2UgfSk6IHZvaWQge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjaGFuZ2VzLmFuZ3VsYXJWYWxpZGF0b3JzRm4pIHx8IFV0aWwuaXNEZWZpbmVkKGNoYW5nZXMuYW5ndWxhckFzeW5jVmFsaWRhdG9yc0ZuKSkge1xuICAgICAgdGhpcy51cGRhdGVWYWxpZGF0b3JzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhhc0VuYWJsZWRQZXJtaXNzaW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBlcm1pc3Npb25zID8gdGhpcy5wZXJtaXNzaW9ucy5lbmFibGVkIDogdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNWaXNpYmxlUGVybWlzc2lvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9ucyA/IHRoaXMucGVybWlzc2lvbnMudmlzaWJsZSA6IHRydWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0Rm9ybUdyb3VwKCk6IFVudHlwZWRGb3JtR3JvdXAge1xuICAgIGlmICh0aGlzLl9mR3JvdXApIHtcbiAgICAgIHJldHVybiB0aGlzLl9mR3JvdXA7XG4gICAgfVxuICAgIGxldCBmb3JtR3JvdXAgPSB0aGlzLmZvcm0gPyB0aGlzLmZvcm0uZm9ybUdyb3VwIDogdW5kZWZpbmVkO1xuICAgIGlmICgoIXRoaXMuaGFzRW5hYmxlZFBlcm1pc3Npb24oKSB8fCAhdGhpcy5oYXNWaXNpYmxlUGVybWlzc2lvbigpKSAmJiAhdGhpcy5fZkdyb3VwKSB7XG4gICAgICBjb25zdCBncm91cCA9IHt9O1xuICAgICAgZ3JvdXBbdGhpcy5vYXR0cl0gPSB0aGlzLl9mQ29udHJvbDtcbiAgICAgIHRoaXMuX2ZHcm91cCA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKGdyb3VwKTtcbiAgICAgIGZvcm1Hcm91cCA9IHRoaXMuX2ZHcm91cDtcbiAgICB9XG4gICAgcmV0dXJuIGZvcm1Hcm91cDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGb3JtQ29udHJvbCgpOiBVbnR5cGVkRm9ybUNvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLl9mQ29udHJvbDtcbiAgfVxuXG4gIHB1YmxpYyBoYXNFcnJvcihlcnJvcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzUmVhZE9ubHkgJiYgdGhpcy5fZkNvbnRyb2wgJiYgdGhpcy5fZkNvbnRyb2wudG91Y2hlZCAmJiB0aGlzLl9mQ29udHJvbC5oYXNFcnJvcihlcnJvcik7XG4gIH1cblxuICBwdWJsaWMgaGFzU29tZUVycm9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc1JlYWRPbmx5ICYmIHRoaXMuX2ZDb250cm9sICYmIHRoaXMuX2ZDb250cm9sLnRvdWNoZWQgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5fZkNvbnRyb2wuZXJyb3JzKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFcnJvclZhbHVlKGVycm9yOiBzdHJpbmcsIHByb3A6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2ZDb250cm9sICYmIHRoaXMuX2ZDb250cm9sLmhhc0Vycm9yKGVycm9yKSA/IHRoaXMuX2ZDb250cm9sLmdldEVycm9yKGVycm9yKVtwcm9wXSB8fCAnJyA6ICcnO1xuICB9XG5cbiAgcHVibGljIGdldEFjdGl2ZU9FcnJvcnMoKTogRXJyb3JEYXRhW10ge1xuICAgIHJldHVybiBFcnJvcnNVdGlscy5nZXRBY3RpdmVPRXJyb3JzKHRoaXMpO1xuICB9XG5cbiAgcHVibGljIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuXG4gICAgLy8gZW5zdXJpbmcgZm9ybUNvbnRyb2wgY3JlYXRpb25cbiAgICB0aGlzLmdldENvbnRyb2woKTtcblxuICAgIHRoaXMucGFyc2VQZXJtaXNzaW9ucygpO1xuXG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLnBlcm1pc3Npb25zKSkge1xuICAgICAgaWYgKHRoaXMuZm9ybSkge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyRm9ybUxpc3RlbmVycygpO1xuICAgICAgICB0aGlzLmlzUmVhZE9ubHkgPSAhKHRoaXMuZm9ybS5pc0luVXBkYXRlTW9kZSgpIHx8IHRoaXMuZm9ybS5pc0luSW5zZXJ0TW9kZSgpIHx8IHRoaXMuZm9ybS5pc0VkaXRhYmxlRGV0YWlsKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc1JlYWRPbmx5ID0gIXRoaXMuZW5hYmxlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVucmVnaXN0ZXJGb3JtTGlzdGVuZXJzKCk7XG4gICAgaWYgKHRoaXMubWF0U3VmZml4U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLm1hdFN1ZmZpeFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy52YWxpZGF0b3JzU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnZhbGlkYXRvcnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubXV0YXRpb25PYnNlcnZlcikge1xuICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2ZDb250cm9sU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9mQ29udHJvbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlckZvcm1MaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybSkge1xuICAgICAgdGhpcy5mb3JtLnJlZ2lzdGVyRm9ybUNvbXBvbmVudCh0aGlzKTtcbiAgICAgIHRoaXMuZm9ybS5yZWdpc3RlckZvcm1Db250cm9sQ29tcG9uZW50KHRoaXMpO1xuICAgICAgdGhpcy5mb3JtLnJlZ2lzdGVyU1FMVHlwZUZvcm1Db21wb25lbnQodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVucmVnaXN0ZXJGb3JtTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm0pIHtcbiAgICAgIHRoaXMuZm9ybS51bnJlZ2lzdGVyRm9ybUNvbXBvbmVudCh0aGlzKTtcbiAgICAgIHRoaXMuZm9ybS51bnJlZ2lzdGVyRm9ybUNvbnRyb2xDb21wb25lbnQodGhpcyk7XG4gICAgICB0aGlzLmZvcm0udW5yZWdpc3RlclNRTFR5cGVGb3JtQ29tcG9uZW50KHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIHNldCBkYXRhKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLnNldERhdGEodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHNldERhdGEobmV3VmFsdWU6IGFueSk6IHZvaWQge1xuICAgIC8vIGVtaXQgT1ZhbHVlQ2hhbmdlRXZlbnQuUFJPR1JBTU1BVElDX0NIQU5HRSB3aGVuIGFzc2lnbiB2YWx1ZSB0byBkYXRhXG4gICAgLy8gdGhpcyBtZXRob2Qgc2tpcHMgdGhlIGZvbGxvd2luZyBwZXJtaXNzaW9ucyBjaGVja2luZyBiZWNhdXNlIHRoZSBmb3JtIGlzXG4gICAgLy8gc2V0dGluZyBpdHMgcXVlcnkgcmVzdWx0IHVzaW5nIGl0XG4gICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHRoaXMub2xkVmFsdWU7XG4gICAgdGhpcy5zZXRGb3JtVmFsdWUobmV3VmFsdWUpO1xuICAgIHRoaXMuZW1pdE9uVmFsdWVDaGFuZ2UoT1ZhbHVlQ2hhbmdlRXZlbnQuUFJPR1JBTU1BVElDX0NIQU5HRSwgbmV3VmFsdWUsIHByZXZpb3VzVmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGlzQXV0b21hdGljQmluZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hdXRvQmluZGluZztcbiAgfVxuXG4gIHB1YmxpYyBpc0F1dG9tYXRpY1JlZ2lzdGVyaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmF1dG9SZWdpc3RlcmluZztcbiAgfVxuXG4gIHB1YmxpYyBnZXRWYWx1ZSgpOiBhbnkge1xuICAgIGlmICh0aGlzLnZhbHVlIGluc3RhbmNlb2YgT0Zvcm1WYWx1ZSkge1xuICAgICAgaWYgKHRoaXMudmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgcHVibGljIHNldFZhbHVlKHZhbDogYW55LCBvcHRpb25zOiBGb3JtVmFsdWVPcHRpb25zID0ge30sIHNldERpcnR5OiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAoIVBlcm1pc3Npb25zVXRpbHMuY2hlY2tFbmFibGVkUGVybWlzc2lvbih0aGlzLnBlcm1pc3Npb25zKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5vbGRWYWx1ZSAhPT0gdmFsKSB7XG4gICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gdGhpcy5vbGRWYWx1ZTtcbiAgICAgIHRoaXMuc2V0Rm9ybVZhbHVlKHZhbCwgb3B0aW9ucywgc2V0RGlydHkpO1xuICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lbWl0TW9kZWxUb1ZpZXdWYWx1ZUNoYW5nZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgY2hhbmdlVHlwZTogbnVtYmVyID0gKG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2NoYW5nZVR5cGUnKSkgPyBvcHRpb25zLmNoYW5nZVR5cGUgOiBPVmFsdWVDaGFuZ2VFdmVudC5QUk9HUkFNTUFUSUNfQ0hBTkdFO1xuICAgICAgICB0aGlzLmVtaXRPblZhbHVlQ2hhbmdlKGNoYW5nZVR5cGUsIHZhbCwgcHJldmlvdXNWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgY29tcG9uZW50IHZhbHVlLlxuICAgKi9cbiAgcHVibGljIGNsZWFyVmFsdWUob3B0aW9ucz86IEZvcm1WYWx1ZU9wdGlvbnMsIHNldERpcnR5OiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAoIVBlcm1pc3Npb25zVXRpbHMuY2hlY2tFbmFibGVkUGVybWlzc2lvbih0aGlzLnBlcm1pc3Npb25zKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNldFZhbHVlKHZvaWQgMCwgb3B0aW9ucywgc2V0RGlydHkpO1xuICB9XG5cbiAgcHVibGljIG9uQ2xpY2tDbGVhclZhbHVlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5jbGVhclZhbHVlKHsgY2hhbmdlVHlwZTogT1ZhbHVlQ2hhbmdlRXZlbnQuVVNFUl9DSEFOR0UgfSwgdHJ1ZSk7XG4gIH1cblxuICAvKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgaW4gb3V0cHV0IGNoYW5nZSBldmVudCwgbm90IGVtaXQgZXZlbnQgb25WYWx1ZUNoYW5nZSB3aGVuIG9sZHZhbHVlIGlzIHNhbWUgdGhhbiBuZXd2YWx1ZSovXG4gIHB1YmxpYyBvbkNoYW5nZUV2ZW50KGFyZzogYW55KTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XG4gICAgaWYgKHRoaXMub2xkVmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gdGhpcy5vbGRWYWx1ZTtcbiAgICAgIHRoaXMub2xkVmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuZW1pdE9uVmFsdWVDaGFuZ2UoT1ZhbHVlQ2hhbmdlRXZlbnQuVVNFUl9DSEFOR0UsIHZhbHVlLCBwcmV2aW91c1ZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2hvd0NsZWFyQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNsZWFyQnV0dG9uICYmICF0aGlzLmlzUmVhZE9ubHkgJiYgdGhpcy5lbmFibGVkICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuZ2V0VmFsdWUoKSk7XG4gIH1cblxuICBwdWJsaWMgb25Gb3JtQ29udHJvbENoYW5nZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgLy8gZXF1aXZhbGVudGUgYWwgaW5uZXJPbkNoYW5nZVxuICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZSA9IG5ldyBPRm9ybVZhbHVlKCk7XG4gICAgfVxuICAgIHRoaXMuZW5zdXJlT0Zvcm1WYWx1ZSh2YWx1ZSk7XG4gICAgdGhpcy5vbkNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBlbnN1cmVPRm9ybVZhbHVlKGFyZzogYW55KTogdm9pZCB7XG4gICAgaWYgKGFyZyBpbnN0YW5jZW9mIE9Gb3JtVmFsdWUpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBhcmc7XG4gICAgfSBlbHNlIGlmIChVdGlsLmlzRGVmaW5lZChhcmcpICYmICEoYXJnIGluc3RhbmNlb2YgT0Zvcm1WYWx1ZSkpIHtcbiAgICAgIGNvbnN0IHZhbDogT0Zvcm1WYWx1ZSA9IHRoaXMudmFsdWUgfHwgbmV3IE9Gb3JtVmFsdWUoKTtcbiAgICAgIHZhbC52YWx1ZSA9IGFyZztcbiAgICAgIHRoaXMudmFsdWUgPSB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSBuZXcgT0Zvcm1WYWx1ZSh0aGlzLmRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNob3VsZCBvdmVyd3JpdHRlbiBpbiB0aGUgY2hpbGQgY29tcG9uZW50IHdoZW4gaXQgaGF2ZSBhZGRpY2lvbmFsIGZvcm0gY29udHJvbCBvciBvdGhlciBvRm9ybURhdGFDb21wb25lbnRcbiAgICovXG4gIHB1YmxpYyBjcmVhdGVGb3JtQ29udHJvbChjZmc/LCB2YWxpZGF0b3JzPzogVmFsaWRhdG9yRm4gfCBWYWxpZGF0b3JGbltdLCBhc3luY1ZhbGlkYXRvcnM/OiBBc3luY1ZhbGlkYXRvckZuIHwgQXN5bmNWYWxpZGF0b3JGbltdKTogT0Zvcm1Db250cm9sIHtcbiAgICByZXR1cm4gbmV3IE9Gb3JtQ29udHJvbChjZmcsIHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9ycyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29udHJvbCgpOiBPRm9ybUNvbnRyb2wge1xuICAgIGlmICghdGhpcy5fZkNvbnRyb2wpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSB0aGlzLnJlc29sdmVWYWxpZGF0b3JzKCk7XG4gICAgICBjb25zdCBhc3luY1ZhbGlkYXRvcnM6IEFzeW5jVmFsaWRhdG9yRm5bXSA9IHRoaXMucmVzb2x2ZUFzeW5jVmFsaWRhdG9ycygpO1xuICAgICAgY29uc3QgY2ZnID0ge1xuICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUudmFsdWUgOiB1bmRlZmluZWQsXG4gICAgICAgIGRpc2FibGVkOiAhdGhpcy5lbmFibGVkXG4gICAgICB9O1xuICAgICAgdGhpcy5fZkNvbnRyb2wgPSB0aGlzLmNyZWF0ZUZvcm1Db250cm9sKGNmZywgdmFsaWRhdG9ycywgYXN5bmNWYWxpZGF0b3JzKTtcbiAgICAgIHRoaXMucmVnaXN0ZXJPbkZvcm1Db250cm9sQ2hhbmdlKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9mQ29udHJvbDtcbiAgfVxuXG4gIHB1YmxpYyByZXNvbHZlVmFsaWRhdG9ycygpOiBWYWxpZGF0b3JGbltdIHtcbiAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XG4gICAgaWYgKHRoaXMuYW5ndWxhclZhbGlkYXRvcnNGbiAmJiB0aGlzLmFuZ3VsYXJWYWxpZGF0b3JzRm4ubGVuZ3RoID4gMCkge1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKC4uLnRoaXMuYW5ndWxhclZhbGlkYXRvcnNGbik7XG4gICAgICBFcnJvcnNVdGlscy5wdXNoVG9FcnJvcnNEYXRhKHRoaXMsIHRoaXMuYW5ndWxhclZhbGlkYXRvcnNGbkVycm9ycyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3JlcXVpcmVkKSB7XG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgfVxuICAgIHJldHVybiB2YWxpZGF0b3JzO1xuICB9XG5cbiAgcHVibGljIHJlc29sdmVBc3luY1ZhbGlkYXRvcnMoKTogQXN5bmNWYWxpZGF0b3JGbltdIHtcbiAgICBpZiAodGhpcy5hbmd1bGFyQXN5bmNWYWxpZGF0b3JzRm4gJiYgdGhpcy5hbmd1bGFyQXN5bmNWYWxpZGF0b3JzRm4ubGVuZ3RoID4gMCkge1xuICAgICAgRXJyb3JzVXRpbHMucHVzaFRvRXJyb3JzRGF0YSh0aGlzLCB0aGlzLmFuZ3VsYXJWYWxpZGF0b3JzRm5FcnJvcnMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hbmd1bGFyQXN5bmNWYWxpZGF0b3JzRm4gfHwgW107XG4gIH1cblxuICBwdWJsaWMgZ2V0U1FMVHlwZSgpOiBudW1iZXIge1xuICAgIGNvbnN0IHNxbHQgPSB0aGlzLnNxbFR5cGUgJiYgdGhpcy5zcWxUeXBlLmxlbmd0aCA+IDAgPyB0aGlzLnNxbFR5cGUgOiB0aGlzLl9kZWZhdWx0U1FMVHlwZUtleTtcbiAgICB0aGlzLl9TUUxUeXBlID0gU1FMVHlwZXMuZ2V0U1FMVHlwZVZhbHVlKHNxbHQpO1xuICAgIHJldHVybiB0aGlzLl9TUUxUeXBlO1xuICB9XG5cbiAgZ2V0IGlzVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuX2ZDb250cm9sKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZkNvbnRyb2wudmFsaWQ7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLnZhbHVlIGluc3RhbmNlb2YgT0Zvcm1WYWx1ZSkge1xuICAgICAgaWYgKHRoaXMudmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIHNldEVuYWJsZWQodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBzdXBlci5zZXRFbmFibGVkKHZhbHVlKTtcbiAgICBpZiAodGhpcy5fZkNvbnRyb2wgJiYgdGhpcy5oYXNFbmFibGVkUGVybWlzc2lvbigpICYmIHRoaXMuaGFzVmlzaWJsZVBlcm1pc3Npb24oKSkge1xuICAgICAgdmFsdWUgPyB0aGlzLl9mQ29udHJvbC5lbmFibGUoKSA6IHRoaXMuX2ZDb250cm9sLmRpc2FibGUoKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZWxlbWVudFJlZigpOiBFbGVtZW50UmVmIHtcbiAgICByZXR1cm4gdGhpcy5lbFJlZjtcbiAgfVxuXG4gIGdldCBoYXNDdXN0b21XaWR0aCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy53aWR0aCAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IG9yZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fb3JlcXVpcmVkO1xuICB9XG5cbiAgc2V0IG9yZXF1aXJlZCh2YWw6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBvbGQgPSB0aGlzLl9vcmVxdWlyZWQ7XG4gICAgdGhpcy5fb3JlcXVpcmVkID0gQm9vbGVhbkNvbnZlcnRlcih2YWwpO1xuICAgIGlmICh2YWwgIT09IG9sZCkge1xuICAgICAgdGhpcy51cGRhdGVWYWxpZGF0b3JzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlubmVyT25Gb2N1cyhldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuXG4gICAgaWYgKCF0aGlzLmlzUmVhZE9ubHkgJiYgdGhpcy5lbmFibGVkKSB7XG4gICAgICB0aGlzLm9uRm9jdXMuZW1pdChldmVudCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlubmVyT25CbHVyKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSZWFkT25seSAmJiB0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMub25CbHVyLmVtaXQoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBhcHBlYXJhbmNlKCk6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2Uge1xuICAgIHJldHVybiB0aGlzLl9hcHBlYXJhbmNlO1xuICB9XG5cbiAgc2V0IGFwcGVhcmFuY2UodmFsdWU6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBbJ2ZpbGwnLCAnb3V0bGluZSddO1xuICAgIGlmICh2YWx1ZXMuaW5kZXhPZih2YWx1ZSkgPT09IC0xKSB7XG4gICAgICB2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5fYXBwZWFyYW5jZSA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGZsb2F0TGFiZWwoKTogRmxvYXRMYWJlbFR5cGUge1xuICAgIGlmICghdGhpcy5sYWJlbFZpc2libGUpIHtcbiAgICAgIHRoaXMuZmxvYXRMYWJlbCA9ICdhbHdheXMnO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZmxvYXRMYWJlbDtcbiAgfVxuXG4gIHNldCBmbG9hdExhYmVsKHZhbHVlOiBGbG9hdExhYmVsVHlwZSkge1xuICAgIGNvbnN0IHZhbHVlcyA9IFsnYWx3YXlzJywgJ2F1dG8nXTtcbiAgICBpZiAodmFsdWVzLmluZGV4T2YodmFsdWUpID09PSAtMSkge1xuICAgICAgdmFsdWUgPSAnYXV0byc7XG4gICAgfVxuICAgIHRoaXMuX2Zsb2F0TGFiZWwgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RWYWx1ZSgpIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCB0aGlzLmlzUmVhZE9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5wdXRFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMub2F0dHIpO1xuICAgIGlmIChpbnB1dEVsKSB7XG4gICAgICAoaW5wdXRFbCBhcyBIVE1MSW5wdXRFbGVtZW50KS5zZWxlY3QoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVnaXN0ZXJPbkZvcm1Db250cm9sQ2hhbmdlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9mQ29udHJvbCkge1xuICAgICAgdGhpcy5fZkNvbnRyb2xTdWJzY3JpcHRpb24gPSB0aGlzLl9mQ29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgdGhpcy5vbkZvcm1Db250cm9sQ2hhbmdlKHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBlbWl0T25WYWx1ZUNoYW5nZSh0eXBlLCBuZXdWYWx1ZSwgb2xkVmFsdWUpOiB2b2lkIHtcbiAgICBjb25zdCBldmVudCA9IG5ldyBPVmFsdWVDaGFuZ2VFdmVudCh0eXBlLCBuZXdWYWx1ZSwgb2xkVmFsdWUsIHRoaXMpO1xuICAgIHRoaXMub25WYWx1ZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRGb3JtVmFsdWUodmFsOiBhbnksIG9wdGlvbnM/OiBGb3JtVmFsdWVPcHRpb25zLCBzZXREaXJ0eTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy5lbnN1cmVPRm9ybVZhbHVlKHZhbCk7XG4gICAgaWYgKHRoaXMuX2ZDb250cm9sKSB7XG4gICAgICB0aGlzLnVwZGF0ZU9Gb3JtQ29udHJvbFZhbHVlKHRoaXMudmFsdWUudmFsdWUsIG9wdGlvbnMsIHNldERpcnR5KTtcbiAgICB9XG4gICAgdGhpcy5vbGRWYWx1ZSA9IHRoaXMudmFsdWUudmFsdWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlT0Zvcm1Db250cm9sVmFsdWUodmFsdWU6IGFueSwgb3B0aW9ucz86IEZvcm1WYWx1ZU9wdGlvbnMsIHNldERpcnR5OiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLl9mQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgaWYgKHNldERpcnR5KSB7XG4gICAgICB0aGlzLl9mQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZkNvbnRyb2wuaW52YWxpZCAmJiAhdGhpcy5mb3JtLmlzSW5JbnNlcnRNb2RlKCkpIHtcbiAgICAgIHRoaXMuX2ZDb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlVmFsaWRhdG9ycygpOiB2b2lkIHtcbiAgICBFcnJvcnNVdGlscy51cGRhdGVGb3JtQ29udHJvbFZhbGlkYXRvcnModGhpcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkT250aW1pemVDdXN0b21BcHBlYXJhbmNlQ2xhc3MoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmVsUmVmKSB7XG4gICAgICAgIGNvbnN0IG1hdEZvcm1GaWVsZEVsID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdtYXQtZm9ybS1maWVsZCcpO1xuICAgICAgICBpZiAobWF0Rm9ybUZpZWxkRWwgJiYgbWF0Rm9ybUZpZWxkRWwubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgbWF0Rm9ybUZpZWxkRWwuaXRlbSgwKS5jbGFzc0xpc3QuYWRkKCdtYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW9udGltaXplJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvL1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRUb29sdGlwQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRXJyb3JzVXRpbHMuZ2V0VG9vbHRpcENsYXNzZXModGhpcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VG9vbHRpcFRleHQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBsaXRlRXJyb3IgPSB0aGlzLmVycm9yT3B0aW9ucy50eXBlID09PSBDb2Rlcy5PX01BVF9FUlJPUl9MSVRFO1xuICAgIHJldHVybiBsaXRlRXJyb3IgJiYgdGhpcy5oYXNTb21lRXJyb3IoKSA/IEVycm9yc1V0aWxzLmdldEVycm9yc1Rvb2x0aXBUZXh0KHRoaXMpIDogc3VwZXIuZ2V0VG9vbHRpcFRleHQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVBlcm1pc3Npb25zKCk6IHZvaWQge1xuICAgIC8vIGlmIG9hdHRyIGluIGZvcm0sIGl0IGNhbiBoYXZlIHBlcm1pc3Npb25zXG4gICAgaWYgKCF0aGlzLmZvcm0gfHwgIVV0aWwuaXNEZWZpbmVkKHRoaXMuZm9ybS5vYXR0cikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGVybWlzc2lvbnM6IE9QZXJtaXNzaW9ucyA9IHRoaXMuZm9ybS5nZXRGb3JtQ29tcG9uZW50UGVybWlzc2lvbnModGhpcy5vYXR0cik7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZChwZXJtaXNzaW9ucykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHBlcm1pc3Npb25zLnZpc2libGUgPT09IGZhbHNlKSB7XG4gICAgICAvKiBoaWRlIGlucHV0IHBlciBwZXJtaXNzaW9ucyAqL1xuICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgfSBlbHNlIGlmIChwZXJtaXNzaW9ucy5lbmFibGVkID09PSBmYWxzZSkge1xuICAgICAgLyogZGlzYWJsZSBpbnB1dCBwZXIgcGVybWlzc2lvbnMgKi9cbiAgICAgIHRoaXMuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMuZm9ybSkge1xuICAgICAgICB0aGlzLmZvcm0ucmVnaXN0ZXJGb3JtQ29tcG9uZW50KHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnBlcm1pc3Npb25zID0gcGVybWlzc2lvbnM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TXV0YXRpb25PYnNlcnZlclRhcmdldCgpOiBhbnkge1xuICAgIGxldCByZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbnB1dCcpLml0ZW0oMCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vXG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0U3VmZml4Q2xhc3MoY291bnQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGljb25GaWVsZEVsID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ljb24tZmllbGQnKTtcbiAgICBpZiAoaWNvbkZpZWxkRWwubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBjbGFzc0xpc3Q6IEFycmF5PHN0cmluZz4gPSBBcnJheS5mcm9tKGljb25GaWVsZEVsWzBdLmNsYXNzTGlzdCB8fCBbXSk7XG4gICAgICBjbGFzc0xpc3QuZm9yRWFjaChjbGFzc05hbWUgPT4ge1xuICAgICAgICBpZiAoY2xhc3NOYW1lLnN0YXJ0c1dpdGgoJ2ljb24tZmllbGQtJykpIHtcbiAgICAgICAgICBpY29uRmllbGRFbFswXS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKGNvdW50ID4gMCkge1xuICAgICAgICBjb25zdCBtYXRTdWZmaXhDbGFzcyA9IGBpY29uLWZpZWxkLSR7Y291bnR9LXN1ZmZpeGA7XG4gICAgICAgIGljb25GaWVsZEVsWzBdLmNsYXNzTGlzdC5hZGQobWF0U3VmZml4Q2xhc3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEbyBub3QgYWxsb3cgdGhlIGRpc2FibGVkIGF0dHJpYnV0ZSB0byBjaGFuZ2UgYnkgY29kZSBvciBieSBpbnNwZWN0b3JcbiAgICovXG4gIHByaXZhdGUgZGlzYWJsZUZvcm1Db250cm9sKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldEZvcm1Db250cm9sKCk7XG4gICAgY29udHJvbC5kaXNhYmxlKHtcbiAgICAgIG9ubHlTZWxmOiB0cnVlLFxuICAgICAgZW1pdEV2ZW50OiBmYWxzZVxuICAgIH0pO1xuICB9XG59XG4iXX0=
564
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1mb3JtLWRhdGEtY29tcG9uZW50LmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvby1mb3JtLWRhdGEtY29tcG9uZW50LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUwsZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFJTCxTQUFTLEVBRVQsWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0MsZ0JBQWdCLEVBQWUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDakgsT0FBTyxFQUFrQixRQUFRLEVBQTBCLFNBQVMsRUFBbUIsTUFBTSw4QkFBOEIsQ0FBQztBQUc1SCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUd6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQU01RixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDNUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVB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dUVBWVQsa0JBQWtCO0FBeEVoQztJQUFDLHFCQUFxQixFQUFFOzt1REFDVztBQUNuQztJQUFDLHFCQUFxQixFQUFFOzsyREFDZTtBQUV2QztJQUFDLHFCQUFxQixFQUFFOzt1REFDWTtBQUdwQztJQUFDLHFCQUFxQixFQUFFOzs4REFDbUI7QUFDM0M7SUFBQyxxQkFBcUIsRUFBRTs7d0RBQ1k7QUFDcEM7SUFBQyxxQkFBcUIsRUFBRTs7NERBQ2lCOzJGQWxCOUIsa0JBQWtCO2tCQUo5QixTQUFTO21CQUFDO29CQUNULE1BQU0sRUFBRSxvQ0FBb0M7b0JBQzVDLE9BQU8sRUFBRSxxQ0FBcUM7aUJBQy9DO3FKQU1RLFdBQVcsTUFFWCxlQUFlLE1BR2YsV0FBVyxNQUlYLGtCQUFrQixNQUVsQixZQUFZLE1BRVosZ0JBQWdCLE1BSW5CLGVBQWU7c0JBRGxCLEtBQUs7Z0JBZ0JGLFNBQVM7c0JBRFosV0FBVzt1QkFBQyxhQUFhO2dCQU0xQixXQUFXO3NCQURWLFlBQVk7dUJBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBd0JmLGNBQWM7c0JBRHZCLFlBQVk7dUJBQUMsU0FBUztnQkFNdkIsaUJBQWlCO3NCQURoQixlQUFlO3VCQUFDLG1CQUFtQjtnQkFRcEMsaUJBQWlCO3NCQURoQixZQUFZO3VCQUFDLGtCQUFrQjtnQkFFSyxjQUFjO3NCQUFsRCxlQUFlO3VCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlLFxuICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBc3luY1ZhbGlkYXRvckZuLCBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRmxvYXRMYWJlbFR5cGUsIE1hdEVycm9yLCBNYXRGb3JtRmllbGRBcHBlYXJhbmNlLCBNYXRTdWZmaXgsIFN1YnNjcmlwdFNpemluZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE9fSU5QVVRTX09QVElPTlMgfSBmcm9tICcuLi9jb25maWcvYXBwLWNvbmZpZyc7XG5pbXBvcnQgeyBCb29sZWFuQ29udmVydGVyLCBCb29sZWFuSW5wdXRDb252ZXJ0ZXIgfSBmcm9tICcuLi9kZWNvcmF0b3JzL2lucHV0LWNvbnZlcnRlcic7XG5pbXBvcnQgeyBPTWF0RXJyb3JEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL28tbWF0LWVycm9yLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJRm9ybURhdGFDb21wb25lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Zvcm0tZGF0YS1jb21wb25lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElGb3JtRGF0YVR5cGVDb21wb25lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Zvcm0tZGF0YS10eXBlLWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUGVybWlzc2lvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcGVybWlzc2lvbnMvcGVybWlzc2lvbnMuc2VydmljZSc7XG5pbXBvcnQgeyBPVmFsaWRhdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vc2hhcmVkL2NvbXBvbmVudHMvdmFsaWRhdGlvbi9vLXZhbGlkYXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRXJyb3JEYXRhIH0gZnJvbSAnLi4vdHlwZXMvZXJyb3ItZGF0YS50eXBlJztcbmltcG9ydCB7IEZvcm1WYWx1ZU9wdGlvbnMgfSBmcm9tICcuLi90eXBlcy9mb3JtLXZhbHVlLW9wdGlvbnMudHlwZSc7XG5pbXBvcnQgeyBPSW5wdXRzT3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzL28taW5wdXRzLW9wdGlvbnMudHlwZSc7XG5pbXBvcnQgeyBPTWF0RXJyb3JPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMvby1tYXQtZXJyb3IudHlwZSc7XG5pbXBvcnQgeyBPUGVybWlzc2lvbnMgfSBmcm9tICcuLi90eXBlcy9vLXBlcm1pc3Npb25zLnR5cGUnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi91dGlsL2NvZGVzJztcbmltcG9ydCB7IEVycm9yc1V0aWxzIH0gZnJvbSAnLi4vdXRpbC9lcnJvcnMnO1xuaW1wb3J0IHsgUGVybWlzc2lvbnNVdGlscyB9IGZyb20gJy4uL3V0aWwvcGVybWlzc2lvbnMnO1xuaW1wb3J0IHsgU1FMVHlwZXMgfSBmcm9tICcuLi91dGlsL3NxbHR5cGVzJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgT0Zvcm1WYWx1ZSB9IGZyb20gJy4vZm9ybS9vLWZvcm0tdmFsdWUnO1xuaW1wb3J0IHsgT0Zvcm1Db21wb25lbnQgfSBmcm9tICcuL2Zvcm0vby1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPRm9ybUNvbnRyb2wgfSBmcm9tICcuL2lucHV0L28tZm9ybS1jb250cm9sLmNsYXNzJztcbmltcG9ydCB7IE9CYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9vLWNvbXBvbmVudC5jbGFzcyc7XG5pbXBvcnQgeyBPVmFsdWVDaGFuZ2VFdmVudCB9IGZyb20gJy4vby12YWx1ZS1jaGFuZ2UtZXZlbnQuY2xhc3MnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9JTlBVVFNfT19GT1JNX0RBVEFfQ09NUE9ORU5UID0gW1xuICAnb2F0dHI6IGF0dHInLFxuICAnb2xhYmVsOiBsYWJlbCcsXG4gICdmbG9hdExhYmVsOiBmbG9hdC1sYWJlbCcsXG4gICdvcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyJyxcbiAgJ3Rvb2x0aXAnLFxuICAndG9vbHRpcFBvc2l0aW9uOiB0b29sdGlwLXBvc2l0aW9uJyxcbiAgJ3Rvb2x0aXBTaG93RGVsYXk6IHRvb2x0aXAtc2hvdy1kZWxheScsXG4gICd0b29sdGlwSGlkZURlbGF5OiB0b29sdGlwLWhpZGUtZGVsYXknLFxuICAnZGF0YScsXG4gICdhdXRvQmluZGluZzogYXV0b21hdGljLWJpbmRpbmcnLFxuICAnYXV0b1JlZ2lzdGVyaW5nOiBhdXRvbWF0aWMtcmVnaXN0ZXJpbmcnLFxuICAnZW5hYmxlZCcsXG4gICdvcmVxdWlyZWQ6IHJlcXVpcmVkJyxcbiAgLy8gc3FsdHlwZVtzdHJpbmddOiBEYXRhIHR5cGUgYWNjb3JkaW5nIHRvIEphdmEgc3RhbmRhcmQuIFNlZSBTUUxUeXBlIG5nQ2xhc3MuIERlZmF1bHQ6ICdPVEhFUidcbiAgJ3NxbFR5cGU6IHNxbC10eXBlJyxcbiAgJ3dpZHRoJyxcbiAgJ3JlYWRPbmx5OiByZWFkLW9ubHknLFxuICAnY2xlYXJCdXR0b246IGNsZWFyLWJ1dHRvbicsXG4gICdhbmd1bGFyVmFsaWRhdG9yc0ZuOiB2YWxpZGF0b3JzJyxcbiAgJ2FuZ3VsYXJWYWxpZGF0b3JzRm5FcnJvcnM6IHZhbGlkYXRvcnMtZXJyb3JzJyxcbiAgJ2FwcGVhcmFuY2UnLFxuICAnaGlkZVJlcXVpcmVkTWFya2VyOmhpZGUtcmVxdWlyZWQtbWFya2VyJyxcbiAgJ2xhYmVsVmlzaWJsZTpsYWJlbC12aXNpYmxlJyxcbiAgJ3NlbGVjdEFsbE9uQ2xpY2s6c2VsZWN0LWFsbC1vbi1jbGljaycsXG4gICdhbmd1bGFyQXN5bmNWYWxpZGF0b3JzRm46IGFzeW5jLXZhbGlkYXRvcnMnLFxuXTtcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfT1VUUFVUU19PX0ZPUk1fREFUQV9DT01QT05FTlQgPSBbXG4gICdvbkNoYW5nZScsXG4gICdvblZhbHVlQ2hhbmdlJyxcbiAgJ29uRm9jdXMnLFxuICAnb25CbHVyJ1xuXTtcblxuQERpcmVjdGl2ZSh7XG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19GT1JNX0RBVEFfQ09NUE9ORU5ULFxuICBvdXRwdXRzOiBERUZBVUxUX09VVFBVVFNfT19GT1JNX0RBVEFfQ09NUE9ORU5UXG59KVxuZXhwb3J0IGNsYXNzIE9Gb3JtRGF0YUNvbXBvbmVudCBleHRlbmRzIE9CYXNlQ29tcG9uZW50IGltcGxlbWVudHMgSUZvcm1EYXRhQ29tcG9uZW50LCBJRm9ybURhdGFUeXBlQ29tcG9uZW50LFxuICBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgLyogSW5wdXRzICovXG4gIHB1YmxpYyBzcWxUeXBlOiBzdHJpbmc7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgYXV0b0JpbmRpbmc6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIGF1dG9SZWdpc3RlcmluZzogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyB3aWR0aDogc3RyaW5nO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIGNsZWFyQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBhbmd1bGFyVmFsaWRhdG9yc0ZuOiBWYWxpZGF0b3JGbltdID0gW107XG4gIHB1YmxpYyBhbmd1bGFyVmFsaWRhdG9yc0ZuRXJyb3JzOiBFcnJvckRhdGFbXSA9IFtdO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIGhpZGVSZXF1aXJlZE1hcmtlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcHVibGljIGxhYmVsVmlzaWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBwdWJsaWMgc2VsZWN0QWxsT25DbGljazogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYW5ndWxhckFzeW5jVmFsaWRhdG9yc0ZuOiBBc3luY1ZhbGlkYXRvckZuW10gPSBbXTtcblxuICBASW5wdXQoKVxuICBnZXQgc3Vic2NyaXB0U2l6aW5nKCk6IFN1YnNjcmlwdFNpemluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YnNjcmlwdFNpemluZyB8fCB0aGlzLmVycm9yT3B0aW9ucz8udHlwZT09PSdsaXRlJz8nZHluYW1pYyc6J2ZpeGVkJyA7XG4gIH1cbiAgc2V0IHN1YnNjcmlwdFNpemluZyh2YWx1ZTogU3Vic2NyaXB0U2l6aW5nKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0U2l6aW5nID0gdmFsdWUgfHwgdGhpcy5lcnJvck9wdGlvbnM/LnR5cGUgPT09ICdsaXRlJyA/ICdkeW5hbWljJyA6ICdmaXhlZCc7XG4gIH1cbiAgcHJpdmF0ZSBfc3Vic2NyaXB0U2l6aW5nOiBTdWJzY3JpcHRTaXppbmcgfCBudWxsID0gbnVsbDtcblxuICAvKiBPdXRwdXRzICovXG4gIHB1YmxpYyBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPG9iamVjdD4gPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcbiAgcHVibGljIG9uVmFsdWVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxPVmFsdWVDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPE9WYWx1ZUNoYW5nZUV2ZW50PigpO1xuICBwdWJsaWMgb25Gb2N1czogRXZlbnRFbWl0dGVyPG9iamVjdD4gPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcbiAgcHVibGljIG9uQmx1cjogRXZlbnRFbWl0dGVyPG9iamVjdD4gPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLndpZHRoJylcbiAgZ2V0IGhvc3RXaWR0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLndpZHRoO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbXSlcbiAgaGFuZGxlQ2xpY2soKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0QWxsT25DbGljaykge1xuICAgICAgdGhpcy5zZWxlY3RWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qIEludGVybmFsIHZhcmlhYmxlcyAqL1xuICBwcm90ZWN0ZWQgdmFsdWU6IE9Gb3JtVmFsdWU7XG4gIHByb3RlY3RlZCBkZWZhdWx0VmFsdWU6IGFueSA9IHZvaWQgMDtcbiAgcHJvdGVjdGVkIF9TUUxUeXBlOiBudW1iZXIgPSBTUUxUeXBlcy5PVEhFUjtcbiAgcHJvdGVjdGVkIF9kZWZhdWx0U1FMVHlwZUtleTogc3RyaW5nID0gJ09USEVSJztcbiAgcHJvdGVjdGVkIF9mQ29udHJvbDogT0Zvcm1Db250cm9sO1xuICBwcm90ZWN0ZWQgX2ZDb250cm9sU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBfZkdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBwcm90ZWN0ZWQgZWxSZWY6IEVsZW1lbnRSZWY7XG4gIHByb3RlY3RlZCBmb3JtOiBPRm9ybUNvbXBvbmVudDtcbiAgcHJvdGVjdGVkIG9sZFZhbHVlOiBhbnk7XG5cbiAgcHJvdGVjdGVkIF9mbG9hdExhYmVsOiBGbG9hdExhYmVsVHlwZTtcbiAgcHJvdGVjdGVkIF9hcHBlYXJhbmNlOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlO1xuXG4gIHByb3RlY3RlZCBtYXRTdWZmaXhTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgQFZpZXdDaGlsZHJlbihNYXRTdWZmaXgpXG4gIHByb3RlY3RlZCBfbWF0U3VmZml4TGlzdDogUXVlcnlMaXN0PE1hdFN1ZmZpeD47XG5cbiAgZXJyb3JzRGF0YTogRXJyb3JEYXRhW10gPSBbXTtcbiAgcHJvdGVjdGVkIHZhbGlkYXRvcnNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgQENvbnRlbnRDaGlsZHJlbihPVmFsaWRhdG9yQ29tcG9uZW50KVxuICB2YWxpZGF0b3JDaGlsZHJlbjogUXVlcnlMaXN0PE9WYWxpZGF0b3JDb21wb25lbnQ+O1xuXG4gIHByb3RlY3RlZCBwZXJtaXNzaW9uc1NlcnZpY2U6IFBlcm1pc3Npb25zU2VydmljZTtcbiAgcHJvdGVjdGVkIG11dGF0aW9uT2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXI7XG5cbiAgZXJyb3JPcHRpb25zOiBPTWF0RXJyb3JPcHRpb25zO1xuICBAVmlld0NoaWxkcmVuKE9NYXRFcnJvckRpcmVjdGl2ZSlcbiAgb01hdEVycm9yQ2hpbGRyZW46IFF1ZXJ5TGlzdDxPTWF0RXJyb3JEaXJlY3RpdmU+O1xuICBAQ29udGVudENoaWxkcmVuKE1hdEVycm9yKSBwcm90ZWN0ZWQgX2Vycm9yQ2hpbGRyZW46IFF1ZXJ5TGlzdDxNYXRFcnJvcj47XG5cbiAgcHJvdGVjdGVkIG9JbnB1dHNPcHRpb25zOiBPSW5wdXRzT3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBmb3JtOiBPRm9ybUNvbXBvbmVudCxcbiAgICBlbFJlZjogRWxlbWVudFJlZixcbiAgICBpbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgIHRoaXMuZm9ybSA9IGZvcm07XG4gICAgdGhpcy5lbFJlZiA9IGVsUmVmO1xuICAgIHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQ8UGVybWlzc2lvbnNTZXJ2aWNlPihQZXJtaXNzaW9uc1NlcnZpY2UpO1xuICAgIHRoaXMuZXJyb3JPcHRpb25zID0gRXJyb3JzVXRpbHMuZ2V0RXJyb3JPcHRpb25zKHRoaXMuaW5qZWN0b3IpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbE9uQ2xpY2sgPSB0aGlzLmluamVjdG9yLmdldChPX0lOUFVUU19PUFRJT05TKS5zZWxlY3RBbGxPbkNsaWNrO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0QWxsT25DbGljayA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX21hdFN1ZmZpeExpc3QpIHtcbiAgICAgIHRoaXMuc2V0U3VmZml4Q2xhc3ModGhpcy5fbWF0U3VmZml4TGlzdC5sZW5ndGgpO1xuICAgICAgdGhpcy5tYXRTdWZmaXhTdWJzY3JpcHRpb24gPSB0aGlzLl9tYXRTdWZmaXhMaXN0LmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdWZmaXhDbGFzcyh0aGlzLl9tYXRTdWZmaXhMaXN0Lmxlbmd0aCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52YWxpZGF0b3JDaGlsZHJlbikge1xuICAgICAgdGhpcy52YWxpZGF0b3JzU3Vic2NyaXB0aW9uID0gdGhpcy52YWxpZGF0b3JDaGlsZHJlbi5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsaWRhdG9ycygpO1xuICAgICAgfSk7XG4gICAgICBpZiAodGhpcy52YWxpZGF0b3JDaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsaWRhdG9ycygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpcy5oYXNFbmFibGVkUGVybWlzc2lvbikge1xuICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyID0gUGVybWlzc2lvbnNVdGlscy5yZWdpc3RlckRpc2FibGVkQ2hhbmdlc0luRG9tKHRoaXMuZ2V0TXV0YXRpb25PYnNlcnZlclRhcmdldCgpLCB7XG4gICAgICAgIGNhbGxiYWNrOiB0aGlzLmRpc2FibGVGb3JtQ29udHJvbC5iaW5kKHRoaXMpXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5hZGRPbnRpbWl6ZUN1c3RvbUFwcGVhcmFuY2VDbGFzcygpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLm9JbnB1dHNPcHRpb25zID0gdGhpcy5pbmplY3Rvci5nZXQoT19JTlBVVFNfT1BUSU9OUyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5vSW5wdXRzT3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIFV0aWwucGFyc2VPSW5wdXRzT3B0aW9ucyh0aGlzLmVsUmVmLCB0aGlzLm9JbnB1dHNPcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3koKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiB7IFtwcm9wTmFtZTogc3RyaW5nXTogU2ltcGxlQ2hhbmdlIH0pOiB2b2lkIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY2hhbmdlcy5hbmd1bGFyVmFsaWRhdG9yc0ZuKSB8fCBVdGlsLmlzRGVmaW5lZChjaGFuZ2VzLmFuZ3VsYXJBc3luY1ZhbGlkYXRvcnNGbikpIHtcbiAgICAgIHRoaXMudXBkYXRlVmFsaWRhdG9ycygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBoYXNFbmFibGVkUGVybWlzc2lvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9ucyA/IHRoaXMucGVybWlzc2lvbnMuZW5hYmxlZCA6IHRydWU7XG4gIH1cblxuICBwdWJsaWMgaGFzVmlzaWJsZVBlcm1pc3Npb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGVybWlzc2lvbnMgPyB0aGlzLnBlcm1pc3Npb25zLnZpc2libGUgOiB0cnVlO1xuICB9XG5cbiAgcHVibGljIGdldEZvcm1Hcm91cCgpOiBVbnR5cGVkRm9ybUdyb3VwIHtcbiAgICBpZiAodGhpcy5fZkdyb3VwKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZkdyb3VwO1xuICAgIH1cbiAgICBsZXQgZm9ybUdyb3VwID0gdGhpcy5mb3JtID8gdGhpcy5mb3JtLmZvcm1Hcm91cCA6IHVuZGVmaW5lZDtcbiAgICBpZiAoKCF0aGlzLmhhc0VuYWJsZWRQZXJtaXNzaW9uKCkgfHwgIXRoaXMuaGFzVmlzaWJsZVBlcm1pc3Npb24oKSkgJiYgIXRoaXMuX2ZHcm91cCkge1xuICAgICAgY29uc3QgZ3JvdXAgPSB7fTtcbiAgICAgIGdyb3VwW3RoaXMub2F0dHJdID0gdGhpcy5fZkNvbnRyb2w7XG4gICAgICB0aGlzLl9mR3JvdXAgPSBuZXcgVW50eXBlZEZvcm1Hcm91cChncm91cCk7XG4gICAgICBmb3JtR3JvdXAgPSB0aGlzLl9mR3JvdXA7XG4gICAgfVxuICAgIHJldHVybiBmb3JtR3JvdXA7XG4gIH1cblxuICBwdWJsaWMgZ2V0Rm9ybUNvbnRyb2woKTogVW50eXBlZEZvcm1Db250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5fZkNvbnRyb2w7XG4gIH1cblxuICBwdWJsaWMgaGFzRXJyb3IoZXJyb3I6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc1JlYWRPbmx5ICYmIHRoaXMuX2ZDb250cm9sICYmIHRoaXMuX2ZDb250cm9sLnRvdWNoZWQgJiYgdGhpcy5fZkNvbnRyb2wuaGFzRXJyb3IoZXJyb3IpO1xuICB9XG5cbiAgcHVibGljIGhhc1NvbWVFcnJvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaXNSZWFkT25seSAmJiB0aGlzLl9mQ29udHJvbCAmJiB0aGlzLl9mQ29udHJvbC50b3VjaGVkICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuX2ZDb250cm9sLmVycm9ycyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RXJyb3JWYWx1ZShlcnJvcjogc3RyaW5nLCBwcm9wOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9mQ29udHJvbD8uaGFzRXJyb3IoZXJyb3IpID8gdGhpcy5fZkNvbnRyb2wuZ2V0RXJyb3IoZXJyb3IpW3Byb3BdID8/ICcnIDogJyc7XG4gIH1cblxuICBwdWJsaWMgZ2V0QWN0aXZlT0Vycm9ycygpOiBFcnJvckRhdGFbXSB7XG4gICAgcmV0dXJuIEVycm9yc1V0aWxzLmdldEFjdGl2ZU9FcnJvcnModGhpcyk7XG4gIH1cblxuICBwdWJsaWMgaW5pdGlhbGl6ZSgpOiB2b2lkIHtcbiAgICBzdXBlci5pbml0aWFsaXplKCk7XG5cbiAgICAvLyBlbnN1cmluZyBmb3JtQ29udHJvbCBjcmVhdGlvblxuICAgIHRoaXMuZ2V0Q29udHJvbCgpO1xuXG4gICAgdGhpcy5wYXJzZVBlcm1pc3Npb25zKCk7XG5cbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHRoaXMucGVybWlzc2lvbnMpKSB7XG4gICAgICBpZiAodGhpcy5mb3JtKSB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJGb3JtTGlzdGVuZXJzKCk7XG4gICAgICAgIHRoaXMuaXNSZWFkT25seSA9ICEodGhpcy5mb3JtLmlzSW5VcGRhdGVNb2RlKCkgfHwgdGhpcy5mb3JtLmlzSW5JbnNlcnRNb2RlKCkgfHwgdGhpcy5mb3JtLmlzRWRpdGFibGVEZXRhaWwoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzUmVhZE9ubHkgPSAhdGhpcy5lbmFibGVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudW5yZWdpc3RlckZvcm1MaXN0ZW5lcnMoKTtcbiAgICBpZiAodGhpcy5tYXRTdWZmaXhTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMubWF0U3VmZml4U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnZhbGlkYXRvcnNTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudmFsaWRhdG9yc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5tdXRhdGlvbk9ic2VydmVyKSB7XG4gICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZkNvbnRyb2xTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX2ZDb250cm9sU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyRm9ybUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtKSB7XG4gICAgICB0aGlzLmZvcm0ucmVnaXN0ZXJGb3JtQ29tcG9uZW50KHRoaXMpO1xuICAgICAgdGhpcy5mb3JtLnJlZ2lzdGVyRm9ybUNvbnRyb2xDb21wb25lbnQodGhpcyk7XG4gICAgICB0aGlzLmZvcm0ucmVnaXN0ZXJTUUxUeXBlRm9ybUNvbXBvbmVudCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdW5yZWdpc3RlckZvcm1MaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybSkge1xuICAgICAgdGhpcy5mb3JtLnVucmVnaXN0ZXJGb3JtQ29tcG9uZW50KHRoaXMpO1xuICAgICAgdGhpcy5mb3JtLnVucmVnaXN0ZXJGb3JtQ29udHJvbENvbXBvbmVudCh0aGlzKTtcbiAgICAgIHRoaXMuZm9ybS51bnJlZ2lzdGVyU1FMVHlwZUZvcm1Db21wb25lbnQodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgc2V0IGRhdGEodmFsdWU6IGFueSkge1xuICAgIHRoaXMuc2V0RGF0YSh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0RGF0YShuZXdWYWx1ZTogYW55KTogdm9pZCB7XG4gICAgLy8gZW1pdCBPVmFsdWVDaGFuZ2VFdmVudC5QUk9HUkFNTUFUSUNfQ0hBTkdFIHdoZW4gYXNzaWduIHZhbHVlIHRvIGRhdGFcbiAgICAvLyB0aGlzIG1ldGhvZCBza2lwcyB0aGUgZm9sbG93aW5nIHBlcm1pc3Npb25zIGNoZWNraW5nIGJlY2F1c2UgdGhlIGZvcm0gaXNcbiAgICAvLyBzZXR0aW5nIGl0cyBxdWVyeSByZXN1bHQgdXNpbmcgaXRcbiAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gdGhpcy5vbGRWYWx1ZTtcbiAgICB0aGlzLnNldEZvcm1WYWx1ZShuZXdWYWx1ZSk7XG4gICAgdGhpcy5lbWl0T25WYWx1ZUNoYW5nZShPVmFsdWVDaGFuZ2VFdmVudC5QUk9HUkFNTUFUSUNfQ0hBTkdFLCBuZXdWYWx1ZSwgcHJldmlvdXNWYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgaXNBdXRvbWF0aWNCaW5kaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmF1dG9CaW5kaW5nO1xuICB9XG5cbiAgcHVibGljIGlzQXV0b21hdGljUmVnaXN0ZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYXV0b1JlZ2lzdGVyaW5nO1xuICB9XG5cbiAgcHVibGljIGdldFZhbHVlKCk6IGFueSB7XG4gICAgaWYgKHRoaXMudmFsdWUgaW5zdGFuY2VvZiBPRm9ybVZhbHVlKSB7XG4gICAgICBpZiAodGhpcy52YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlLnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0VmFsdWU7XG4gIH1cblxuICBwdWJsaWMgc2V0VmFsdWUodmFsOiBhbnksIG9wdGlvbnM6IEZvcm1WYWx1ZU9wdGlvbnMgPSB7fSwgc2V0RGlydHk6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmICghUGVybWlzc2lvbnNVdGlscy5jaGVja0VuYWJsZWRQZXJtaXNzaW9uKHRoaXMucGVybWlzc2lvbnMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm9sZFZhbHVlICE9PSB2YWwpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSB0aGlzLm9sZFZhbHVlO1xuICAgICAgdGhpcy5zZXRGb3JtVmFsdWUodmFsLCBvcHRpb25zLCBzZXREaXJ0eSk7XG4gICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVtaXRNb2RlbFRvVmlld1ZhbHVlQ2hhbmdlICE9PSBmYWxzZSkge1xuICAgICAgICBjb25zdCBjaGFuZ2VUeXBlOiBudW1iZXIgPSAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnY2hhbmdlVHlwZScpKSA/IG9wdGlvbnMuY2hhbmdlVHlwZSA6IE9WYWx1ZUNoYW5nZUV2ZW50LlBST0dSQU1NQVRJQ19DSEFOR0U7XG4gICAgICAgIHRoaXMuZW1pdE9uVmFsdWVDaGFuZ2UoY2hhbmdlVHlwZSwgdmFsLCBwcmV2aW91c1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBjb21wb25lbnQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgY2xlYXJWYWx1ZShvcHRpb25zPzogRm9ybVZhbHVlT3B0aW9ucywgc2V0RGlydHk6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIGlmICghUGVybWlzc2lvbnNVdGlscy5jaGVja0VuYWJsZWRQZXJtaXNzaW9uKHRoaXMucGVybWlzc2lvbnMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc2V0VmFsdWUodm9pZCAwLCBvcHRpb25zLCBzZXREaXJ0eSk7XG4gIH1cblxuICBwdWJsaWMgb25DbGlja0NsZWFyVmFsdWUoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmNsZWFyVmFsdWUoeyBjaGFuZ2VUeXBlOiBPVmFsdWVDaGFuZ2VFdmVudC5VU0VSX0NIQU5HRSB9LCB0cnVlKTtcbiAgfVxuXG4gIC8qIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBpbiBvdXRwdXQgY2hhbmdlIGV2ZW50LCBub3QgZW1pdCBldmVudCBvblZhbHVlQ2hhbmdlIHdoZW4gb2xkdmFsdWUgaXMgc2FtZSB0aGFuIG5ld3ZhbHVlKi9cbiAgcHVibGljIG9uQ2hhbmdlRXZlbnQoYXJnOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcbiAgICBpZiAodGhpcy5vbGRWYWx1ZSAhPT0gdmFsdWUpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSB0aGlzLm9sZFZhbHVlO1xuICAgICAgdGhpcy5vbGRWYWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5lbWl0T25WYWx1ZUNoYW5nZShPVmFsdWVDaGFuZ2VFdmVudC5VU0VSX0NIQU5HRSwgdmFsdWUsIHByZXZpb3VzVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzaG93Q2xlYXJCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2xlYXJCdXR0b24gJiYgIXRoaXMuaXNSZWFkT25seSAmJiB0aGlzLmVuYWJsZWQgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5nZXRWYWx1ZSgpKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkZvcm1Db250cm9sQ2hhbmdlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBlcXVpdmFsZW50ZSBhbCBpbm5lck9uQ2hhbmdlXG4gICAgaWYgKCF0aGlzLnZhbHVlKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbmV3IE9Gb3JtVmFsdWUoKTtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVPRm9ybVZhbHVlKHZhbHVlKTtcbiAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIGVuc3VyZU9Gb3JtVmFsdWUoYXJnOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoYXJnIGluc3RhbmNlb2YgT0Zvcm1WYWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZSA9IGFyZztcbiAgICB9IGVsc2UgaWYgKFV0aWwuaXNEZWZpbmVkKGFyZykgJiYgIShhcmcgaW5zdGFuY2VvZiBPRm9ybVZhbHVlKSkge1xuICAgICAgY29uc3QgdmFsOiBPRm9ybVZhbHVlID0gdGhpcy52YWx1ZSB8fCBuZXcgT0Zvcm1WYWx1ZSgpO1xuICAgICAgdmFsLnZhbHVlID0gYXJnO1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IG5ldyBPRm9ybVZhbHVlKHRoaXMuZGVmYXVsdFZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2Qgc2hvdWxkIG92ZXJ3cml0dGVuIGluIHRoZSBjaGlsZCBjb21wb25lbnQgd2hlbiBpdCBoYXZlIGFkZGljaW9uYWwgZm9ybSBjb250cm9sIG9yIG90aGVyIG9Gb3JtRGF0YUNvbXBvbmVudFxuICAgKi9cbiAgcHVibGljIGNyZWF0ZUZvcm1Db250cm9sKGNmZz8sIHZhbGlkYXRvcnM/OiBWYWxpZGF0b3JGbiB8IFZhbGlkYXRvckZuW10sIGFzeW5jVmFsaWRhdG9ycz86IEFzeW5jVmFsaWRhdG9yRm4gfCBBc3luY1ZhbGlkYXRvckZuW10pOiBPRm9ybUNvbnRyb2wge1xuICAgIHJldHVybiBuZXcgT0Zvcm1Db250cm9sKGNmZywgdmFsaWRhdG9ycywgYXN5bmNWYWxpZGF0b3JzKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb250cm9sKCk6IE9Gb3JtQ29udHJvbCB7XG4gICAgaWYgKCF0aGlzLl9mQ29udHJvbCkge1xuICAgICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IHRoaXMucmVzb2x2ZVZhbGlkYXRvcnMoKTtcbiAgICAgIGNvbnN0IGFzeW5jVmFsaWRhdG9yczogQXN5bmNWYWxpZGF0b3JGbltdID0gdGhpcy5yZXNvbHZlQXN5bmNWYWxpZGF0b3JzKCk7XG4gICAgICBjb25zdCBjZmcgPSB7XG4gICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZS52YWx1ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgZGlzYWJsZWQ6ICF0aGlzLmVuYWJsZWRcbiAgICAgIH07XG4gICAgICB0aGlzLl9mQ29udHJvbCA9IHRoaXMuY3JlYXRlRm9ybUNvbnRyb2woY2ZnLCB2YWxpZGF0b3JzLCBhc3luY1ZhbGlkYXRvcnMpO1xuICAgICAgdGhpcy5yZWdpc3Rlck9uRm9ybUNvbnRyb2xDaGFuZ2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2ZDb250cm9sO1xuICB9XG5cbiAgcHVibGljIHJlc29sdmVWYWxpZGF0b3JzKCk6IFZhbGlkYXRvckZuW10ge1xuICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcbiAgICBpZiAodGhpcy5hbmd1bGFyVmFsaWRhdG9yc0ZuICYmIHRoaXMuYW5ndWxhclZhbGlkYXRvcnNGbi5sZW5ndGggPiAwKSB7XG4gICAgICB2YWxpZGF0b3JzLnB1c2goLi4udGhpcy5hbmd1bGFyVmFsaWRhdG9yc0ZuKTtcbiAgICAgIEVycm9yc1V0aWxzLnB1c2hUb0Vycm9yc0RhdGEodGhpcywgdGhpcy5hbmd1bGFyVmFsaWRhdG9yc0ZuRXJyb3JzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcmVxdWlyZWQpIHtcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRvcnM7XG4gIH1cblxuICBwdWJsaWMgcmVzb2x2ZUFzeW5jVmFsaWRhdG9ycygpOiBBc3luY1ZhbGlkYXRvckZuW10ge1xuICAgIGlmICh0aGlzLmFuZ3VsYXJBc3luY1ZhbGlkYXRvcnNGbiAmJiB0aGlzLmFuZ3VsYXJBc3luY1ZhbGlkYXRvcnNGbi5sZW5ndGggPiAwKSB7XG4gICAgICBFcnJvcnNVdGlscy5wdXNoVG9FcnJvcnNEYXRhKHRoaXMsIHRoaXMuYW5ndWxhclZhbGlkYXRvcnNGbkVycm9ycyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFuZ3VsYXJBc3luY1ZhbGlkYXRvcnNGbiB8fCBbXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTUUxUeXBlKCk6IG51bWJlciB7XG4gICAgY29uc3Qgc3FsdCA9IHRoaXMuc3FsVHlwZSAmJiB0aGlzLnNxbFR5cGUubGVuZ3RoID4gMCA/IHRoaXMuc3FsVHlwZSA6IHRoaXMuX2RlZmF1bHRTUUxUeXBlS2V5O1xuICAgIHRoaXMuX1NRTFR5cGUgPSBTUUxUeXBlcy5nZXRTUUxUeXBlVmFsdWUoc3FsdCk7XG4gICAgcmV0dXJuIHRoaXMuX1NRTFR5cGU7XG4gIH1cblxuICBnZXQgaXNWYWxpZCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5fZkNvbnRyb2wpIHtcbiAgICAgIHJldHVybiB0aGlzLl9mQ29udHJvbC52YWxpZDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMudmFsdWUgaW5zdGFuY2VvZiBPRm9ybVZhbHVlKSB7XG4gICAgICBpZiAodGhpcy52YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgc2V0RW5hYmxlZCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHN1cGVyLnNldEVuYWJsZWQodmFsdWUpO1xuICAgIGlmICh0aGlzLl9mQ29udHJvbCAmJiB0aGlzLmhhc0VuYWJsZWRQZXJtaXNzaW9uKCkgJiYgdGhpcy5oYXNWaXNpYmxlUGVybWlzc2lvbigpKSB7XG4gICAgICB2YWx1ZSA/IHRoaXMuX2ZDb250cm9sLmVuYWJsZSgpIDogdGhpcy5fZkNvbnRyb2wuZGlzYWJsZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBlbGVtZW50UmVmKCk6IEVsZW1lbnRSZWYge1xuICAgIHJldHVybiB0aGlzLmVsUmVmO1xuICB9XG5cbiAgZ2V0IGhhc0N1c3RvbVdpZHRoKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLndpZHRoICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgb3JlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vcmVxdWlyZWQ7XG4gIH1cblxuICBzZXQgb3JlcXVpcmVkKHZhbDogYm9vbGVhbikge1xuICAgIGNvbnN0IG9sZCA9IHRoaXMuX29yZXF1aXJlZDtcbiAgICB0aGlzLl9vcmVxdWlyZWQgPSBCb29sZWFuQ29udmVydGVyKHZhbCk7XG4gICAgaWYgKHZhbCAhPT0gb2xkKSB7XG4gICAgICB0aGlzLnVwZGF0ZVZhbGlkYXRvcnMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaW5uZXJPbkZvY3VzKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG5cbiAgICBpZiAoIXRoaXMuaXNSZWFkT25seSAmJiB0aGlzLmVuYWJsZWQpIHtcbiAgICAgIHRoaXMub25Gb2N1cy5lbWl0KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaW5uZXJPbkJsdXIoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1JlYWRPbmx5ICYmIHRoaXMuZW5hYmxlZCkge1xuICAgICAgdGhpcy5vbkJsdXIuZW1pdChldmVudCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGFwcGVhcmFuY2UoKTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVhcmFuY2U7XG4gIH1cblxuICBzZXQgYXBwZWFyYW5jZSh2YWx1ZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSkge1xuICAgIGNvbnN0IHZhbHVlcyA9IFsnZmlsbCcsICdvdXRsaW5lJ107XG4gICAgaWYgKHZhbHVlcy5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIHtcbiAgICAgIHZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLl9hcHBlYXJhbmNlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgZmxvYXRMYWJlbCgpOiBGbG9hdExhYmVsVHlwZSB7XG4gICAgaWYgKCF0aGlzLmxhYmVsVmlzaWJsZSkge1xuICAgICAgdGhpcy5mbG9hdExhYmVsID0gJ2Fsd2F5cyc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9mbG9hdExhYmVsO1xuICB9XG5cbiAgc2V0IGZsb2F0TGFiZWwodmFsdWU6IEZsb2F0TGFiZWxUeXBlKSB7XG4gICAgY29uc3QgdmFsdWVzID0gWydhbHdheXMnLCAnYXV0byddO1xuICAgIGlmICh2YWx1ZXMuaW5kZXhPZih2YWx1ZSkgPT09IC0xKSB7XG4gICAgICB2YWx1ZSA9ICdhdXRvJztcbiAgICB9XG4gICAgdGhpcy5fZmxvYXRMYWJlbCA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdFZhbHVlKCkge1xuICAgIGlmICghdGhpcy5lbmFibGVkIHx8IHRoaXMuaXNSZWFkT25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbnB1dEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5vYXR0cik7XG4gICAgaWYgKGlucHV0RWwpIHtcbiAgICAgIChpbnB1dEVsIGFzIEhUTUxJbnB1dEVsZW1lbnQpLnNlbGVjdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCByZWdpc3Rlck9uRm9ybUNvbnRyb2xDaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2ZDb250cm9sKSB7XG4gICAgICB0aGlzLl9mQ29udHJvbFN1YnNjcmlwdGlvbiA9IHRoaXMuX2ZDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICB0aGlzLm9uRm9ybUNvbnRyb2xDaGFuZ2UodmFsdWUpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGVtaXRPblZhbHVlQ2hhbmdlKHR5cGUsIG5ld1ZhbHVlLCBvbGRWYWx1ZSk6IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IE9WYWx1ZUNoYW5nZUV2ZW50KHR5cGUsIG5ld1ZhbHVlLCBvbGRWYWx1ZSwgdGhpcyk7XG4gICAgdGhpcy5vblZhbHVlQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldEZvcm1WYWx1ZSh2YWw6IGFueSwgb3B0aW9ucz86IEZvcm1WYWx1ZU9wdGlvbnMsIHNldERpcnR5OiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLmVuc3VyZU9Gb3JtVmFsdWUodmFsKTtcbiAgICBpZiAodGhpcy5fZkNvbnRyb2wpIHtcbiAgICAgIHRoaXMudXBkYXRlT0Zvcm1Db250cm9sVmFsdWUodGhpcy52YWx1ZS52YWx1ZSwgb3B0aW9ucywgc2V0RGlydHkpO1xuICAgIH1cbiAgICB0aGlzLm9sZFZhbHVlID0gdGhpcy52YWx1ZS52YWx1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVPRm9ybUNvbnRyb2xWYWx1ZSh2YWx1ZTogYW55LCBvcHRpb25zPzogRm9ybVZhbHVlT3B0aW9ucywgc2V0RGlydHk6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgIHRoaXMuX2ZDb250cm9sLnNldFZhbHVlKHZhbHVlLCBvcHRpb25zKTtcbiAgICBpZiAoc2V0RGlydHkpIHtcbiAgICAgIHRoaXMuX2ZDb250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9mQ29udHJvbC5pbnZhbGlkICYmICF0aGlzLmZvcm0uaXNJbkluc2VydE1vZGUoKSkge1xuICAgICAgdGhpcy5fZkNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVWYWxpZGF0b3JzKCk6IHZvaWQge1xuICAgIEVycm9yc1V0aWxzLnVwZGF0ZUZvcm1Db250cm9sVmFsaWRhdG9ycyh0aGlzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhZGRPbnRpbWl6ZUN1c3RvbUFwcGVhcmFuY2VDbGFzcygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuZWxSZWYpIHtcbiAgICAgICAgY29uc3QgbWF0Rm9ybUZpZWxkRWwgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ21hdC1mb3JtLWZpZWxkJyk7XG4gICAgICAgIGlmIChtYXRGb3JtRmllbGRFbCAmJiBtYXRGb3JtRmllbGRFbC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBtYXRGb3JtRmllbGRFbC5pdGVtKDApLmNsYXNzTGlzdC5hZGQoJ21hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2Utb250aW1pemUnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vXG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldFRvb2x0aXBDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBFcnJvcnNVdGlscy5nZXRUb29sdGlwQ2xhc3Nlcyh0aGlzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRUb29sdGlwVGV4dCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxpdGVFcnJvciA9IHRoaXMuZXJyb3JPcHRpb25zLnR5cGUgPT09IENvZGVzLk9fTUFUX0VSUk9SX0xJVEU7XG4gICAgcmV0dXJuIGxpdGVFcnJvciAmJiB0aGlzLmhhc1NvbWVFcnJvcigpID8gRXJyb3JzVXRpbHMuZ2V0RXJyb3JzVG9vbHRpcFRleHQodGhpcykgOiBzdXBlci5nZXRUb29sdGlwVGV4dCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlUGVybWlzc2lvbnMoKTogdm9pZCB7XG4gICAgLy8gaWYgb2F0dHIgaW4gZm9ybSwgaXQgY2FuIGhhdmUgcGVybWlzc2lvbnNcbiAgICBpZiAoIXRoaXMuZm9ybSB8fCAhVXRpbC5pc0RlZmluZWQodGhpcy5mb3JtLm9hdHRyKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwZXJtaXNzaW9uczogT1Blcm1pc3Npb25zID0gdGhpcy5mb3JtLmdldEZvcm1Db21wb25lbnRQZXJtaXNzaW9ucyh0aGlzLm9hdHRyKTtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHBlcm1pc3Npb25zKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocGVybWlzc2lvbnMudmlzaWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgIC8qIGhpZGUgaW5wdXQgcGVyIHBlcm1pc3Npb25zICovXG4gICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9IGVsc2UgaWYgKHBlcm1pc3Npb25zLmVuYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICAvKiBkaXNhYmxlIGlucHV0IHBlciBwZXJtaXNzaW9ucyAqL1xuICAgICAgdGhpcy5lbmFibGVkID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy5mb3JtKSB7XG4gICAgICAgIHRoaXMuZm9ybS5yZWdpc3RlckZvcm1Db21wb25lbnQodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucGVybWlzc2lvbnMgPSBwZXJtaXNzaW9ucztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRNdXRhdGlvbk9ic2VydmVyVGFyZ2V0KCk6IGFueSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lucHV0JykuaXRlbSgwKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy9cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRTdWZmaXhDbGFzcyhjb3VudDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgaWNvbkZpZWxkRWwgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaWNvbi1maWVsZCcpO1xuICAgIGlmIChpY29uRmllbGRFbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IGNsYXNzTGlzdDogQXJyYXk8c3RyaW5nPiA9IEFycmF5LmZyb20oaWNvbkZpZWxkRWxbMF0uY2xhc3NMaXN0IHx8IFtdKTtcbiAgICAgIGNsYXNzTGlzdC5mb3JFYWNoKGNsYXNzTmFtZSA9PiB7XG4gICAgICAgIGlmIChjbGFzc05hbWUuc3RhcnRzV2l0aCgnaWNvbi1maWVsZC0nKSkge1xuICAgICAgICAgIGljb25GaWVsZEVsWzBdLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoY291bnQgPiAwKSB7XG4gICAgICAgIGNvbnN0IG1hdFN1ZmZpeENsYXNzID0gYGljb24tZmllbGQtJHtjb3VudH0tc3VmZml4YDtcbiAgICAgICAgaWNvbkZpZWxkRWxbMF0uY2xhc3NMaXN0LmFkZChtYXRTdWZmaXhDbGFzcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERvIG5vdCBhbGxvdyB0aGUgZGlzYWJsZWQgYXR0cmlidXRlIHRvIGNoYW5nZSBieSBjb2RlIG9yIGJ5IGluc3BlY3RvclxuICAgKi9cbiAgcHJpdmF0ZSBkaXNhYmxlRm9ybUNvbnRyb2woKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woKTtcbiAgICBjb250cm9sLmRpc2FibGUoe1xuICAgICAgb25seVNlbGY6IHRydWUsXG4gICAgICBlbWl0RXZlbnQ6IGZhbHNlXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,33 @@
1
+ import { Directive } from '@angular/core';
2
+ import { OSkeletonComponent } from './o-skeleton.component';
3
+ import { Util } from '../util/util';
4
+ import * as i0 from "@angular/core";
5
+ export class ORepeatableSkeletonComponent extends OSkeletonComponent {
6
+ getRows() {
7
+ const parentElement = this.getParentElement();
8
+ if (!parentElement) {
9
+ return [1];
10
+ }
11
+ const item = this.getSkeletonItemElement(parentElement);
12
+ let totalHeightItem = 0;
13
+ if (item) {
14
+ const itemComputedStyle = getComputedStyle(item);
15
+ const height = item.offsetHeight;
16
+ const marginBottom = parseFloat(itemComputedStyle.marginBottom);
17
+ const marginTop = parseFloat(itemComputedStyle.marginTop);
18
+ totalHeightItem = height + marginBottom + marginTop;
19
+ }
20
+ const availableHeight = parentElement?.offsetHeight - totalHeightItem;
21
+ if (!Util.isDefined(availableHeight) || availableHeight < 0) {
22
+ return [1];
23
+ }
24
+ return Array.from(new Array(Math.ceil(parentElement?.offsetHeight / totalHeightItem)), (x, i) => i + 1);
25
+ }
26
+ }
27
+ ORepeatableSkeletonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ORepeatableSkeletonComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
28
+ ORepeatableSkeletonComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: ORepeatableSkeletonComponent, usesInheritance: true, ngImport: i0 });
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ORepeatableSkeletonComponent, decorators: [{
30
+ type: Directive,
31
+ args: [{}]
32
+ }] });
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1yZXBlYXRhYmxlLXNrZWxldG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL28tcmVwZWF0YWJsZS1za2VsZXRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUdwQyxNQUFNLE9BQWdCLDRCQUE2QixTQUFRLGtCQUFrQjtJQUszRSxPQUFPO1FBRUwsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFOUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNsQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDWjtRQUdELE1BQU0sSUFBSSxHQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV2RCxJQUFJLGVBQWUsR0FBVyxDQUFDLENBQUM7UUFFaEMsSUFBSSxJQUFJLEVBQUU7WUFFUixNQUFNLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDakMsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2hFLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUcxRCxlQUFlLEdBQUcsTUFBTSxHQUFHLFlBQVksR0FBRyxTQUFTLENBQUM7U0FDckQ7UUFJRCxNQUFNLGVBQWUsR0FBRyxhQUFhLEVBQUUsWUFBWSxHQUFHLGVBQWUsQ0FBQztRQUN0RSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsSUFBSSxlQUFlLEdBQUcsQ0FBQyxFQUFFO1lBQzNELE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNaO1FBR0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFlBQVksR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRTFHLENBQUM7O3lIQXZDbUIsNEJBQTRCOzZHQUE1Qiw0QkFBNEI7MkZBQTVCLDRCQUE0QjtrQkFEakQsU0FBUzttQkFBQyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE9Ta2VsZXRvbkNvbXBvbmVudCB9IGZyb20gJy4vby1za2VsZXRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5cbkBEaXJlY3RpdmUoe30pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgT1JlcGVhdGFibGVTa2VsZXRvbkNvbXBvbmVudCBleHRlbmRzIE9Ta2VsZXRvbkNvbXBvbmVudCAge1xuXG4gIGFic3RyYWN0IGdldFBhcmVudEVsZW1lbnQoKTogSFRNTEVsZW1lbnQ7XG4gIGFic3RyYWN0IGdldFNrZWxldG9uSXRlbUVsZW1lbnQocGFyZW50RWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudDtcblxuICBnZXRSb3dzKCkge1xuXG4gICAgY29uc3QgcGFyZW50RWxlbWVudCA9IHRoaXMuZ2V0UGFyZW50RWxlbWVudCgpO1xuXG4gICAgaWYgKCFwYXJlbnRFbGVtZW50KSB7XG4gICAgICByZXR1cm4gWzFdO1xuICAgIH1cblxuICAgIC8qIGF2YWlsYWJsZSBwYXJlbnRIZWlnaHQgPSBwYXJlbnRFbGVtZW50IGhlaWdodCAgLSAoaGVhZGVyIHRhYmxlIGhlYWRlciBoZWlnaHQgKyBtYXJnaW4gYm90dG9tKSovXG4gICAgY29uc3QgaXRlbSA9dGhpcy5nZXRTa2VsZXRvbkl0ZW1FbGVtZW50KHBhcmVudEVsZW1lbnQpO1xuXG4gICAgbGV0IHRvdGFsSGVpZ2h0SXRlbTogbnVtYmVyID0gMDtcblxuICAgIGlmIChpdGVtKSB7XG4gICAgICAvLyBHZXQgdGhlIGVsZW1lbnQncyBkaW1lbnNpb25zIGFuZCBjb21wdXRlZCBzdHlsZXNcbiAgICAgIGNvbnN0IGl0ZW1Db21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShpdGVtKTtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGl0ZW0ub2Zmc2V0SGVpZ2h0OyAvLyBIZWlnaHQgaW5jbHVkaW5nIHBhZGRpbmdcbiAgICAgIGNvbnN0IG1hcmdpbkJvdHRvbSA9IHBhcnNlRmxvYXQoaXRlbUNvbXB1dGVkU3R5bGUubWFyZ2luQm90dG9tKTsgLy8gQm90dG9tIG1hcmdpblxuICAgICAgY29uc3QgbWFyZ2luVG9wID0gcGFyc2VGbG9hdChpdGVtQ29tcHV0ZWRTdHlsZS5tYXJnaW5Ub3ApO1xuXG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIHRvdGFsIHZlcnRpY2FsIHNwYWNlIHRha2VuIGJ5IHRoZSBpdGVtXG4gICAgICB0b3RhbEhlaWdodEl0ZW0gPSBoZWlnaHQgKyBtYXJnaW5Cb3R0b20gKyBtYXJnaW5Ub3A7XG4gICAgfVxuXG5cbiAgICAvLyBDYWxjdWxhdGUgdGhlIGF2YWlsYWJsZSBoZWlnaHQgaW4gdGhlIHBhcmVudCBjb250YWluZXIgKGV4Y2x1ZGluZyBvbmUgaXRlbSBoZWlnaHQpXG4gICAgY29uc3QgYXZhaWxhYmxlSGVpZ2h0ID0gcGFyZW50RWxlbWVudD8ub2Zmc2V0SGVpZ2h0IC0gdG90YWxIZWlnaHRJdGVtO1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQoYXZhaWxhYmxlSGVpZ2h0KSB8fCBhdmFpbGFibGVIZWlnaHQgPCAwKSB7XG4gICAgICByZXR1cm4gWzFdO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBhcnJheSB3aXRoIHRoZSBudW1iZXIgb2YgaXRlbXMgdGhhdCBjYW4gZml0IHdpdGhpbiB0aGUgcGFyZW50J3MgaGVpZ2h0XG4gICAgcmV0dXJuIEFycmF5LmZyb20obmV3IEFycmF5KE1hdGguY2VpbChwYXJlbnRFbGVtZW50Py5vZmZzZXRIZWlnaHQgLyB0b3RhbEhlaWdodEl0ZW0pKSwgKHgsIGkpID0+IGkgKyAxKTtcblxuICB9XG59XG4iXX0=
@@ -13,6 +13,7 @@ import { ServiceUtils } from '../util/service.utils';
13
13
  import { Util } from '../util/util';
14
14
  import { OExpandableContainerComponent } from './expandable-container/o-expandable-container.component';
15
15
  import { OFormComponent } from './form/o-form.component';
16
+ import { FactoryUtil } from '../util/factory.util';
16
17
  import * as i0 from "@angular/core";
17
18
  export const DEFAULT_INPUTS_O_SERVICE_BASE_COMPONENT = [
18
19
  'oattr: attr',
@@ -204,7 +205,7 @@ export class AbstractOServiceBaseComponent {
204
205
  if (Util.isDefined(this.configureServiceArgs)) {
205
206
  configureServiceArgs = { ...configureServiceArgs, ...this.configureServiceArgs };
206
207
  }
207
- this.dataService = Util.configureService(configureServiceArgs);
208
+ this.dataService = FactoryUtil.configureService(configureServiceArgs);
208
209
  this.updatePaginationContext({ pageNumber: 0, pageSize: this.queryRows, offset: 0, totalSize: 0 });
209
210
  }
210
211
  getDataArray() {
@@ -271,7 +272,7 @@ export class AbstractOServiceBaseComponent {
271
272
  return;
272
273
  }
273
274
  this.queryArguments = this.getQueryArguments(filter, ovrrArgs);
274
- this.querySubscription = this.dataService[queryMethodName](...this.dataService.queryArgumentAdapter.parseQueryParameters(this.queryArguments))
275
+ this.querySubscription = this.dataService[queryMethodName](...this.dataService.requestArgumentAdapter.parseQueryParameters(this.queryArguments))
275
276
  .subscribe((res) => {
276
277
  let data;
277
278
  this.sqlTypes = undefined;
@@ -355,7 +356,7 @@ export class AbstractOServiceBaseComponent {
355
356
  this.state.totalQueryRecordsNumber = queryRes.totalQueryRecordsNumber;
356
357
  }
357
358
  const pageNumber = this.state.queryRecordOffset == 0 ? 0 : this.dataService?.getPaginationContext().pageNumber;
358
- this.updatePaginationContext({ pageNumber: pageNumber, offset: this.state.queryRecordOffset, totalSize: this.state.totalQueryRecordsNumber });
359
+ this.updatePaginationContext({ pageNumber: pageNumber, offset: this.state.queryRecordOffset, totalSize: this.state.totalQueryRecordsNumber, pageSize: this.state.queryRows });
359
360
  }
360
361
  else {
361
362
  this.updatePaginationContext({ totalSize: queryRes.data.length });
@@ -446,4 +447,4 @@ OServiceBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0",
446
447
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OServiceBaseComponent, decorators: [{
447
448
  type: Directive
448
449
  }] });
449
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1zZXJ2aWNlLWJhc2UtY29tcG9uZW50LmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvby1zZXJ2aWNlLWJhc2UtY29tcG9uZW50LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFpQyxNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBS3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFeEUsT0FBTyxFQUFFLDZCQUE2QixFQUF1QyxNQUFNLDZDQUE2QyxDQUFDO0FBSWpJLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDeEcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUV6RCxNQUFNLENBQUMsTUFBTSx1Q0FBdUMsR0FBRztJQUVyRCxh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QUFxQixFQUFFOztpRUFDRztBQUMzQjtJQUFDLHFCQUFxQixFQUFFOzs4RUFDaUI7MkZBckRyQiw2QkFBNkI7a0JBSGxELFNBQVM7bUJBQUM7b0JBQ1QsTUFBTSxFQUFFLHVDQUF1QztpQkFDaEQ7K0ZBZUMsV0FBVyxNQUVYLFdBQVcsTUFHWCxRQUFRLE1BZ0NSLFVBQVUsTUFFVix1QkFBdUIsTUEwSnZCLG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyxxQkFBcUIsRUFBRSxFQUFFOztBQTRSekMsTUFBTSxPQUFPLDRCQUE2QixTQUFRLDZCQUFrRTs7eUhBQXZHLDRCQUE0Qjs2R0FBNUIsNEJBQTRCOzJGQUE1Qiw0QkFBNEI7a0JBRHhDLFNBQVM7O0FBT1YsTUFBTSxPQUFPLHFCQUFzQixTQUFRLDZCQUFrRTs7a0hBQWhHLHFCQUFxQjtzR0FBckIscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBRGpDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBIb3N0TGlzdGVuZXIsIEluamVjdG9yLCBpc0Rldk1vZGUsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEJvb2xlYW5JbnB1dENvbnZlcnRlciB9IGZyb20gJy4uL2RlY29yYXRvcnMvaW5wdXQtY29udmVydGVyJztcbmltcG9ydCB7IFBhZ2luYXRpb25Db250ZXh0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJTG9jYWxTdG9yYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9sb2NhbC1zdG9yYWdlLWNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2VydmljZVJlc3BvbnNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zZXJ2aWNlLXJlc3BvbnNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Jhc2Utc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBPRXJyb3JEaWFsb2dNYW5hZ2VyIH0gZnJvbSAnLi4vc2VydmljZXMvby1lcnJvci1kaWFsb2ctbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IE9udGltaXplU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL29udGltaXplL29udGltaXplLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWJzdHJhY3RTZXJ2aWNlQ29tcG9uZW50U3RhdGVDbGFzcyB9IGZyb20gJy4uL3NlcnZpY2VzL3N0YXRlL28tY29tcG9uZW50LXN0YXRlLmNsYXNzJztcbmltcG9ydCB7IEFic3RyYWN0Q29tcG9uZW50U3RhdGVTZXJ2aWNlLCBEZWZhdWx0U2VydmljZUNvbXBvbmVudFN0YXRlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0YXRlL28tY29tcG9uZW50LXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT0NvbmZpZ3VyZVNlcnZpY2VBcmdzIH0gZnJvbSAnLi4vdHlwZXMvY29uZmlndXJlLXNlcnZpY2UtYXJncy50eXBlJztcbmltcG9ydCB7IE9RdWVyeURhdGFBcmdzIH0gZnJvbSAnLi4vdHlwZXMvcXVlcnktZGF0YS1hcmdzLnR5cGUnO1xuaW1wb3J0IHsgT1F1ZXJ5UGFyYW1zIH0gZnJvbSAnLi4vdHlwZXMvcXVlcnktcGFyYW1zLnR5cGUnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi91dGlsL2NvZGVzJztcbmltcG9ydCB7IFNlcnZpY2VVdGlscyB9IGZyb20gJy4uL3V0aWwvc2VydmljZS51dGlscyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9FeHBhbmRhYmxlQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi9leHBhbmRhYmxlLWNvbnRhaW5lci9vLWV4cGFuZGFibGUtY29udGFpbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vZm9ybS9vLWZvcm0uY29tcG9uZW50JztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5QVVRTX09fU0VSVklDRV9CQVNFX0NPTVBPTkVOVCA9IFtcbiAgLy8gYXR0ciBbc3RyaW5nXTogbGlzdCBpZGVudGlmaWVyLiBJdCBpcyBtYW5kYXRvcnkgaWYgZGF0YSBhcmUgcHJvdmlkZWQgdGhyb3VnaCB0aGUgZGF0YSBhdHRyaWJ1dGUuIERlZmF1bHQ6IGVudGl0eSAoaWYgc2V0KS5cbiAgJ29hdHRyOiBhdHRyJyxcblxuICAvLyBzZXJ2aWNlIFtzdHJpbmddOiBKRUUgc2VydmljZSBwYXRoLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3NlcnZpY2UnLFxuXG4gICdzZXJ2aWNlVHlwZSA6IHNlcnZpY2UtdHlwZScsXG5cbiAgLy8gZW50aXR5IFtzdHJpbmddOiBlbnRpdHkgb2YgdGhlIHNlcnZpY2UuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnZW50aXR5JyxcblxuICAvLyBxdWVyeS1vbi1pbml0IFtub3x5ZXNdOiBxdWVyeSBvbiBpbml0LiBEZWZhdWx0OiB5ZXMuXG4gICdxdWVyeU9uSW5pdDogcXVlcnktb24taW5pdCcsXG5cbiAgLy8gcXVlcnktb24taW5pdCBbbm98eWVzXTogcXVlcnkgb24gYmluZC4gRGVmYXVsdDogeWVzLlxuICAncXVlcnlPbkJpbmQ6IHF1ZXJ5LW9uLWJpbmQnLFxuXG4gICdxdWVyeU9uRXZlbnQ6IHF1ZXJ5LW9uLWV2ZW50JyxcblxuICAncGFnZWFibGUnLFxuXG4gIC8vIGNvbHVtbnMgW3N0cmluZ106IGNvbHVtbnMgb2YgdGhlIGVudGl0eSwgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdjb2x1bW5zJyxcblxuICAvLyBrZXlzIFtzdHJpbmddOiBlbnRpdHkga2V5cywgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdrZXlzJyxcblxuICAvLyBwYXJlbnQta2V5cyBbc3RyaW5nXTogcGFyZW50IGtleXMgdG8gZmlsdGVyLCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3BhcmVudEtleXM6IHBhcmVudC1rZXlzJyxcblxuICAvLyBzdGF0aWMtZGF0YSBbQXJyYXk8YW55Pl0gOiB3YXkgdG8gcG9wdWxhdGUgd2l0aCBzdGF0aWMgZGF0YS4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdzdGF0aWNEYXRhOiBzdGF0aWMtZGF0YScsXG5cbiAgLy8gcXVlcnktbWV0aG9kIFtzdHJpbmddOiBuYW1lIG9mIHRoZSBzZXJ2aWNlIG1ldGhvZCB0byBwZXJmb3JtIHF1ZXJpZXMuIERlZmF1bHQ6IHF1ZXJ5LlxuICAncXVlcnlNZXRob2Q6IHF1ZXJ5LW1ldGhvZCcsXG5cbiAgLy8gcGFnaW5hdGVkLXF1ZXJ5LW1ldGhvZCBbc3RyaW5nXTogbmFtZSBvZiB0aGUgc2VydmljZSBtZXRob2QgdG8gcGVyZm9ybSBwYWdpbmF0ZWQgcXVlcmllcy4gRGVmYXVsdDogYWR2YW5jZWRRdWVyeS5cbiAgJ3BhZ2luYXRlZFF1ZXJ5TWV0aG9kIDogcGFnaW5hdGVkLXF1ZXJ5LW1ldGhvZCcsXG5cbiAgLy8gcXVlcnktcm93cyBbbnVtYmVyXTogbnVtYmVyIG9mIHJvd3MgcGVyIHBhZ2UuIERlZmF1bHQ6IDEwLlxuICAnb1F1ZXJ5Um93czogcXVlcnktcm93cycsXG5cbiAgLy8gaW5zZXJ0LW1ldGhvZCBbc3RyaW5nXTogbmFtZSBvZiB0aGUgc2VydmljZSBtZXRob2QgdG8gcGVyZm9ybSBpbnNlcnRzLiBEZWZhdWx0OiBpbnNlcnQuXG4gICdpbnNlcnRNZXRob2Q6IGluc2VydC1tZXRob2QnLFxuXG4gIC8vIHVwZGF0ZS1tZXRob2QgW3N0cmluZ106IG5hbWUgb2YgdGhlIHNlcnZpY2UgbWV0aG9kIHRvIHBlcmZvcm0gdXBkYXRlcy4gRGVmYXVsdDogdXBkYXRlLlxuICAndXBkYXRlTWV0aG9kOiB1cGRhdGUtbWV0aG9kJyxcblxuICAvLyBkZWxldGUtbWV0aG9kIFtzdHJpbmddOiBuYW1lIG9mIHRoZSBzZXJ2aWNlIG1ldGhvZCB0byBwZXJmb3JtIGRlbGV0aW9ucy4gRGVmYXVsdDogZGVsZXRlLlxuICAnZGVsZXRlTWV0aG9kOiBkZWxldGUtbWV0aG9kJyxcblxuICAnc3RvcmVTdGF0ZTogc3RvcmUtc3RhdGUnLFxuXG4gIC8vIHF1ZXJ5LXdpdGgtbnVsbC1wYXJlbnQta2V5cyBbc3RyaW5nXVt5ZXN8bm98dHJ1ZXxmYWxzZV06IEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0byB0cmlnZ2VyIHF1ZXJ5IG1ldGhvZCB3aGVuIHBhcmVudC1rZXlzIGZpbHRlciBpcyBudWxsLiBEZWZhdWx0OiBmYWxzZVxuICAncXVlcnlXaXRoTnVsbFBhcmVudEtleXM6IHF1ZXJ5LXdpdGgtbnVsbC1wYXJlbnQta2V5cycsXG5cbiAgLy8gW2Z1bmN0aW9uXTogZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbiBxdWVyeSBlcnJvci4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdxdWVyeUZhbGxiYWNrRnVuY3Rpb246IHF1ZXJ5LWZhbGxiYWNrLWZ1bmN0aW9uJyxcbiAgLy8gLFxuXG4gIC8vICdpbnNlcnRGYWxsYmFja0Z1bmN0aW9uOiBpbnNlcnQtZmFsbGJhY2stZnVuY3Rpb24nLFxuXG4gIC8vICd1cGRhdGVGYWxsYmFja0Z1bmN0aW9uOiB1cGRhdGUtZmFsbGJhY2stZnVuY3Rpb24nLFxuXG4gIC8vICdkZWxldGVGYWxsYmFja0Z1bmN0aW9uOiBkZWxldGUtZmFsbGJhY2stZnVuY3Rpb24nLFxuICAvLyAgY29uZmlndXJlLXNlcnZpY2UtYXJncyBbT0NvbmZpZ3VyZVNlcnZpY2VBcmdzXTogQWxsb3dzIGNvbmZpZ3VyZSBzZXJ2aWNlIC5cbiAgJ2NvbmZpZ3VyZVNlcnZpY2VBcmdzOiBjb25maWd1cmUtc2VydmljZS1hcmdzJ1xuXTtcblxuQERpcmVjdGl2ZSh7XG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19TRVJWSUNFX0JBU0VfQ09NUE9ORU5UXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0T1NlcnZpY2VCYXNlQ29tcG9uZW50PFQgZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudFN0YXRlU2VydmljZTxBYnN0cmFjdFNlcnZpY2VDb21wb25lbnRTdGF0ZUNsYXNzPj4gaW1wbGVtZW50cyBJTG9jYWxTdG9yYWdlQ29tcG9uZW50LCBPbkNoYW5nZXMge1xuXG4gIHByb3RlY3RlZCBsb2NhbFN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlO1xuICBjb21wb25lbnRTdGF0ZVNlcnZpY2U6IFQ7XG4gIHByb3RlY3RlZCBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgb0Vycm9yRGlhbG9nTWFuYWdlcjogT0Vycm9yRGlhbG9nTWFuYWdlcjtcbiAgcGFyZW50Q29tcG9uZW50OiBBYnN0cmFjdE9TZXJ2aWNlQmFzZUNvbXBvbmVudDxUPjtcblxuICAvKiBpbnB1dHMgdmFyaWFibGVzICovXG4gIG9hdHRyOiBzdHJpbmc7XG4gIHNlcnZpY2U6IHN0cmluZztcbiAgc2VydmljZVR5cGU6IHN0cmluZztcbiAgZW50aXR5OiBzdHJpbmc7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBxdWVyeU9uSW5pdDogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBxdWVyeU9uQmluZDogYm9vbGVhbiA9IHRydWU7XG4gIHF1ZXJ5T25FdmVudDogYW55O1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcGFnZWFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29sdW1uczogc3RyaW5nO1xuICBrZXlzOiBzdHJpbmc7XG4gIHBhcmVudEtleXM6IHN0cmluZztcbiAgc3RhdGljRGF0YTogQXJyYXk8YW55PjtcbiAgcXVlcnlNZXRob2Q6IHN0cmluZyA9IENvZGVzLlFVRVJZX01FVEhPRDtcbiAgcGFnaW5hdGVkUXVlcnlNZXRob2Q6IHN0cmluZyA9IENvZGVzLlBBR0lOQVRFRF9RVUVSWV9NRVRIT0Q7XG5cbiAgb3JpZ2luYWxRdWVyeVJvd3M6IG51bWJlciA9IENvZGVzLkRFRkFVTFRfUVVFUllfUk9XUztcbiAgcHJvdGVjdGVkIF9xdWVyeVJvd3MgPSB0aGlzLm9yaWdpbmFsUXVlcnlSb3dzO1xuXG4gIHNldCBvUXVlcnlSb3dzKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgPyBwYXJzZUludCh2YWx1ZSwgMTApIDogdmFsdWU7XG4gICAgICB0aGlzLm9yaWdpbmFsUXVlcnlSb3dzID0gdmFsdWU7XG4gICAgICB0aGlzLl9xdWVyeVJvd3MgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXQgcXVlcnlSb3dzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5Um93cztcbiAgfVxuXG4gIHNldCBxdWVyeVJvd3ModmFsdWU6IG51bWJlcikge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX3F1ZXJ5Um93cyA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICBpbnNlcnRNZXRob2Q6IHN0cmluZyA9IENvZGVzLklOU0VSVF9NRVRIT0Q7XG4gIHVwZGF0ZU1ldGhvZDogc3RyaW5nID0gQ29kZXMuVVBEQVRFX01FVEhPRDtcbiAgZGVsZXRlTWV0aG9kOiBzdHJpbmcgPSBDb2Rlcy5ERUxFVEVfTUVUSE9EO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc3RvcmVTdGF0ZTogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBxdWVyeVdpdGhOdWxsUGFyZW50S2V5czogYm9vbGVhbiA9IGZhbHNlO1xuICBxdWVyeUZhbGxiYWNrRnVuY3Rpb246IChlcnI6IGFueSkgPT4gdm9pZDtcbiAgLy8gaW5zZXJ0RmFsbGJhY2tGdW5jdGlvbjogKGVycjogYW55KSA9PiB2b2lkO1xuICAvLyB1cGRhdGVGYWxsYmFja0Z1bmN0aW9uOiAoZXJyOiBhbnkpID0+IHZvaWQ7XG4gIC8vIGRlbGV0ZUZhbGxiYWNrRnVuY3Rpb246IChlcnI6IGFueSkgPT4gdm9pZDtcbiAgLyogZW5kIG9mIGlucHV0cyB2YXJpYWJsZXMgKi9cblxuICAvKiBwYXJzZWQgaW5wdXRzIHZhcmlhYmxlcyAqL1xuICBwcm90ZWN0ZWQgY29sQXJyYXk6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgcHJvdGVjdGVkIGtleXNBcnJheTogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBwcm90ZWN0ZWQgX3BLZXlzRXF1aXYgPSB7fTtcbiAgZGF0YUFycmF5OiBBcnJheTxhbnk+ID0gW107XG4gIHByb3RlY3RlZCBvYXR0ckZyb21FbnRpdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyogZW5kIG9mIHBhcnNlZCBpbnB1dHMgdmFyaWFibGVzICovXG5cbiAgcHJvdGVjdGVkIG9uUm91dGVDaGFuZ2VTdG9yYWdlU3Vic2NyaXB0aW9uOiBhbnk7XG4gIHByb3RlY3RlZCBvbkZvcm1EYXRhU3Vic2NyaWJlOiBhbnk7XG5cbiAgcHJvdGVjdGVkIHF1ZXJ5U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBkYXRhU2VydmljZTogQmFzZVNlcnZpY2U8U2VydmljZVJlc3BvbnNlPjtcblxuICBwcm90ZWN0ZWQgbG9hZGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGxvYWRpbmc6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmxvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByb3RlY3RlZCBmb3JtOiBPRm9ybUNvbXBvbmVudDtcbiAgcHVibGljIGV4cGFuZGFibGVDb250YWluZXI6IE9FeHBhbmRhYmxlQ29udGFpbmVyQ29tcG9uZW50O1xuICBwcm90ZWN0ZWQgYWxyZWFkeVN0b3JlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBxdWVyeU9uRXZlbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGNkOiBDaGFuZ2VEZXRlY3RvclJlZjsgLy8gYm9ycmFyXG4gIHByb3RlY3RlZCBxdWVyeUFyZ3VtZW50czogT1F1ZXJ5UGFyYW1zO1xuXG4gIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcjtcbiAgcHJvdGVjdGVkIGFjdFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcblxuICBwcm90ZWN0ZWQgc3FsVHlwZXMgPSB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGFib3J0UXVlcnk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwcm90ZWN0ZWQgY29uZmlndXJlU2VydmljZUFyZ3M6IE9Db25maWd1cmVTZXJ2aWNlQXJncztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yXG4gICkge1xuICAgIHRoaXMuZGlhbG9nU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0PERpYWxvZ1NlcnZpY2U+KERpYWxvZ1NlcnZpY2UgYXMgVHlwZTxEaWFsb2dTZXJ2aWNlPik7XG4gICAgdGhpcy5vRXJyb3JEaWFsb2dNYW5hZ2VyID0gdGhpcy5pbmplY3Rvci5nZXQ8T0Vycm9yRGlhbG9nTWFuYWdlcj4oT0Vycm9yRGlhbG9nTWFuYWdlciBhcyBUeXBlPE9FcnJvckRpYWxvZ01hbmFnZXI+KTtcbiAgICB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldDxMb2NhbFN0b3JhZ2VTZXJ2aWNlPihMb2NhbFN0b3JhZ2VTZXJ2aWNlIGFzIFR5cGU8TG9jYWxTdG9yYWdlU2VydmljZT4pO1xuICAgIHRoaXMuY29tcG9uZW50U3RhdGVTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQ8VD4oQWJzdHJhY3RDb21wb25lbnRTdGF0ZVNlcnZpY2UgYXMgVHlwZTxUPik7XG4gICAgdGhpcy5yb3V0ZXIgPSB0aGlzLmluamVjdG9yLmdldDxSb3V0ZXI+KFJvdXRlciBhcyBUeXBlPFJvdXRlcj4pO1xuICAgIHRoaXMuYWN0Um91dGUgPSB0aGlzLmluamVjdG9yLmdldDxBY3RpdmF0ZWRSb3V0ZT4oQWN0aXZhdGVkUm91dGUgYXMgVHlwZTxBY3RpdmF0ZWRSb3V0ZT4pO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmNkID0gdGhpcy5pbmplY3Rvci5nZXQ8Q2hhbmdlRGV0ZWN0b3JSZWY+KENoYW5nZURldGVjdG9yUmVmIGFzIFR5cGU8Q2hhbmdlRGV0ZWN0b3JSZWY+KTtcbiAgICAgIHRoaXMuZm9ybSA9IHRoaXMuaW5qZWN0b3IuZ2V0PE9Gb3JtQ29tcG9uZW50PihPRm9ybUNvbXBvbmVudCBhcyBUeXBlPE9Gb3JtQ29tcG9uZW50Pik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gbm8gcGFyZW50IGZvcm1cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZXhwYW5kYWJsZUNvbnRhaW5lciA9IHRoaXMuaW5qZWN0b3IuZ2V0PE9FeHBhbmRhYmxlQ29udGFpbmVyQ29tcG9uZW50PihPRXhwYW5kYWJsZUNvbnRhaW5lckNvbXBvbmVudCBhcyBUeXBlPE9FeHBhbmRhYmxlQ29udGFpbmVyQ29tcG9uZW50Pik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gTm8gcGFyZW50IE9FeHBhbmRhYmxlQ29udGFpbmVyQ29tcG9uZW50XG4gICAgfVxuICB9XG5cbiAgZ2V0IHN0YXRlKCk6IEFic3RyYWN0U2VydmljZUNvbXBvbmVudFN0YXRlQ2xhc3Mge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFN0YXRlU2VydmljZS5zdGF0ZTtcbiAgfVxuXG4gIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLm9hdHRyKSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLmVudGl0eSkpIHtcbiAgICAgIHRoaXMub2F0dHIgPSB0aGlzLmVudGl0eS5yZXBsYWNlKCcuJywgJ18nKTtcbiAgICAgIHRoaXMub2F0dHJGcm9tRW50aXR5ID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5rZXlzQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5rZXlzKTtcbiAgICB0aGlzLmNoZWNrQ29sdW1ucygpO1xuICAgIGNvbnN0IHBrQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5wYXJlbnRLZXlzKTtcbiAgICB0aGlzLl9wS2V5c0VxdWl2ID0gVXRpbC5wYXJzZVBhcmVudEtleXNFcXVpdmFsZW5jZXMocGtBcnJheSwgQ29kZXMuQ09MVU1OU19BTElBU19TRVBBUkFUT1IpO1xuXG4gICAgdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2UuaW5pdGlhbGl6ZSh0aGlzKTtcblxuICAgIGlmICh0aGlzLnN0YXRpY0RhdGEpIHtcbiAgICAgIHRoaXMucXVlcnlPbkJpbmQgPSBmYWxzZTtcbiAgICAgIHRoaXMucXVlcnlPbkluaXQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0RGF0YUFycmF5KHRoaXMuc3RhdGljRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZmlndXJlU2VydmljZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZvcm0gJiYgVXRpbC5pc0RlZmluZWQodGhpcy5kYXRhU2VydmljZSkpIHtcbiAgICAgIHRoaXMuc2V0Rm9ybUNvbXBvbmVudCh0aGlzLmZvcm0pO1xuICAgIH1cblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnF1ZXJ5T25FdmVudCkgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5xdWVyeU9uRXZlbnQuc3Vic2NyaWJlKSkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnF1ZXJ5T25FdmVudFN1YnNjcmlwdGlvbiA9IHRoaXMucXVlcnlPbkV2ZW50LnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHZhbHVlKSB8fCB0aGlzLnF1ZXJ5V2l0aE51bGxQYXJlbnRLZXlzKSB7XG4gICAgICAgICAgc2VsZi5xdWVyeURhdGEoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLnF1ZXJ5RmFsbGJhY2tGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5xdWVyeUZhbGxiYWNrRnVuY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tDb2x1bW5zKCkge1xuICAgIHRoaXMuY29sQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5jb2x1bW5zLCB0cnVlKTtcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgIHRoaXMua2V5c0FycmF5LmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1ucy5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBJbiB0aGUgY29tcG9uZW50ICcke3RoaXMub2F0dHJ9JywgdGhlIGtleSAnJHtrZXl9JyBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGNvbHVtbnMgZGVmaW5pdGlvbiBhbmQgc29tZSBmdW5jdGlvbmFsaXRpZXMgbWF5IG5vdCB3b3JrIGNvcnJlY3RseWApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGFmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5yZWdpc3RlckxvY2FsU3RvcmFnZVNlcnZpY2VSb3V0ZUNoYW5nZSgpO1xuXG4gICAgdGhpcy5hYm9ydFF1ZXJ5LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMucXVlcnlTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXREYXRhKFtdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMub25Gb3JtRGF0YVN1YnNjcmliZSkge1xuICAgICAgdGhpcy5vbkZvcm1EYXRhU3Vic2NyaWJlLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9uUm91dGVDaGFuZ2VTdG9yYWdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLm9uUm91dGVDaGFuZ2VTdG9yYWdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXJ5T25FdmVudFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5xdWVyeU9uRXZlbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FuU2V0U3RhdGljRGF0YShzdGF0aWNEYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQoc3RhdGljRGF0YSlcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBTaW1wbGVDaGFuZ2UgfSkge1xuICAgIGlmICh0aGlzLmNhblNldFN0YXRpY0RhdGEoY2hhbmdlcy5zdGF0aWNEYXRhPy5jdXJyZW50VmFsdWUpKSB7XG4gICAgICB0aGlzLnNldERhdGEoY2hhbmdlcy5zdGF0aWNEYXRhLmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFtdKVxuICBiZWZvcmV1bmxvYWRIYW5kbGVyKCkge1xuICAgIHRoaXMudXBkYXRlU3RhdGVTdG9yYWdlKCk7XG4gIH1cblxuICBnZXRBdHRyaWJ1dGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5vYXR0cjtcbiAgfVxuXG4gIGdldENvbXBvbmVudEtleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgpO1xuICB9XG5cbiAgZ2V0RGF0YVRvU3RvcmUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZTtcbiAgfVxuXG4gIGdldFJvdXRlS2V5KCk6IHN0cmluZyB7XG4gICAgbGV0IHJvdXRlID0gdGhpcy5yb3V0ZXIudXJsO1xuICAgIHRoaXMuYWN0Um91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgT2JqZWN0LmtleXMocGFyYW1zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHJvdXRlID0gcm91dGUucmVwbGFjZShwYXJhbXNba2V5XSwga2V5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiByb3V0ZTtcbiAgfVxuXG4gIGdldEtleXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmtleXNBcnJheTtcbiAgfVxuXG4gIGNvbmZpZ3VyZVNlcnZpY2UoKSB7XG4gICAgbGV0IGNvbmZpZ3VyZVNlcnZpY2VBcmdzOiBPQ29uZmlndXJlU2VydmljZUFyZ3MgPSB7IGluamVjdG9yOiB0aGlzLmluamVjdG9yLCBiYXNlU2VydmljZTogT250aW1pemVTZXJ2aWNlLCBlbnRpdHk6IHRoaXMuZW50aXR5LCBzZXJ2aWNlOiB0aGlzLnNlcnZpY2UsIHNlcnZpY2VUeXBlOiB0aGlzLnNlcnZpY2VUeXBlIH1cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5jb25maWd1cmVTZXJ2aWNlQXJncykpIHtcbiAgICAgIGNvbmZpZ3VyZVNlcnZpY2VBcmdzID0geyAuLi5jb25maWd1cmVTZXJ2aWNlQXJncywgLi4udGhpcy5jb25maWd1cmVTZXJ2aWNlQXJncyB9O1xuICAgIH1cblxuICAgIHRoaXMuZGF0YVNlcnZpY2UgPSBVdGlsLmNvbmZpZ3VyZVNlcnZpY2UoY29uZmlndXJlU2VydmljZUFyZ3MpO1xuICAgIHRoaXMudXBkYXRlUGFnaW5hdGlvbkNvbnRleHQoeyBwYWdlTnVtYmVyOiAwLCBwYWdlU2l6ZTogdGhpcy5xdWVyeVJvd3MsIG9mZnNldDogMCwgdG90YWxTaXplOiAwIH0pO1xuICB9XG5cbiAgZ2V0RGF0YUFycmF5KCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFBcnJheTtcbiAgfVxuXG4gIHNldERhdGFBcnJheShkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICAvKiBUaGUgby10YWJsZSBoYXMgb3duIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kICovXG4gICAgaWYgKFV0aWwuaXNBcnJheShkYXRhKSkge1xuICAgICAgdGhpcy5kYXRhQXJyYXkgPSBkYXRhO1xuICAgIH0gZWxzZSBpZiAoVXRpbC5pc09iamVjdChkYXRhKSkge1xuICAgICAgdGhpcy5kYXRhQXJyYXkgPSBbZGF0YV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybignQ29tcG9uZW50IGhhcyByZWNlaXZlZCBub3Qgc3VwcG9ydGVkIHNlcnZpY2UgZGF0YS4gU3VwcG9ydGVkIGRhdGEgYXJlIEFycmF5IG9yIE9iamVjdCcpO1xuICAgICAgdGhpcy5kYXRhQXJyYXkgPSBbXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhQXJyYXkgaW5zdGFuY2VvZiBBcnJheSAmJiB0aGlzLmRhdGFBcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2U/LnJlaW5pdGlhbGl6ZVBhZ2luYXRpb25Db250ZXh0KHRoaXMucXVlcnlSb3dzKTtcbiAgICB9XG5cbiAgfVxuXG4gIHB1YmxpYyBzZXRGb3JtQ29tcG9uZW50KGZvcm06IE9Gb3JtQ29tcG9uZW50KTogdm9pZCB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLmZvcm0pKSB7XG4gICAgICB0aGlzLmZvcm0gPSBmb3JtO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnF1ZXJ5T25CaW5kKSB7XG4gICAgICB0aGlzLm9uRm9ybURhdGFTdWJzY3JpYmUgPSB0aGlzLmZvcm0ub25EYXRhTG9hZGVkLnN1YnNjcmliZSgoKSA9PiB0aGlzLnBhZ2VhYmxlID8gdGhpcy5yZWxvYWRQYWdpbmF0ZWREYXRhRnJvbVN0YXJ0KCkgOiB0aGlzLnJlbG9hZERhdGEoKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFBhcmVudEtleXNGcm9tQ29udGV4dChwYXJlbnRLZXlzOiBvYmplY3QsIGNvbnRleHQ6IGFueSkge1xuICAgIGxldCByZXN1bHQgPSB7fTtcbiAgICBjb25zdCBjaGVja1JvdXRlUGFyYW1zUmVjdXJzaXZlID0gdGhpcy5yb3V0ZXIucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSAhPT0gJ2Fsd2F5cyc7XG4gICAgaWYgKGNvbnRleHQgaW5zdGFuY2VvZiBPRXhwYW5kYWJsZUNvbnRhaW5lckNvbXBvbmVudCkge1xuICAgICAgcmVzdWx0ID0gU2VydmljZVV0aWxzLmdldFBhcmVudEtleXNGcm9tRXhwYW5kYWJsZUNvbnRhaW5lcihwYXJlbnRLZXlzLCBjb250ZXh0LCB0aGlzLmFjdFJvdXRlLCBjaGVja1JvdXRlUGFyYW1zUmVjdXJzaXZlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gU2VydmljZVV0aWxzLmdldFBhcmVudEtleXNGcm9tRm9ybShwYXJlbnRLZXlzLCBjb250ZXh0LCB0aGlzLmFjdFJvdXRlLCBjaGVja1JvdXRlUGFyYW1zUmVjdXJzaXZlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcblxuICB9XG5cbiAgcHVibGljIGNsZWFyRGF0YSgpIHtcbiAgICB0aGlzLnN0YXRlLnF1ZXJ5UmVjb3JkT2Zmc2V0ID0gMDtcbiAgICB0aGlzLnN0YXRlLnRvdGFsUXVlcnlSZWNvcmRzTnVtYmVyID0gMDtcbiAgICB0aGlzLnNldERhdGEoW10sIFtdKTtcbiAgfVxuXG4gIHB1YmxpYyBxdWVyeURhdGEoZmlsdGVyPzogYW55LCBvdnJyQXJncz86IE9RdWVyeURhdGFBcmdzKTogdm9pZCB7XG5cbiAgICBjb25zdCBxdWVyeU1ldGhvZE5hbWUgPSB0aGlzLnBhZ2VhYmxlID8gdGhpcy5wYWdpbmF0ZWRRdWVyeU1ldGhvZCA6IHRoaXMucXVlcnlNZXRob2Q7XG5cbiAgICBpZiAoIXRoaXMuZGF0YVNlcnZpY2UgfHwgIShxdWVyeU1ldGhvZE5hbWUgaW4gdGhpcy5kYXRhU2VydmljZSkgfHwgIXRoaXMuZW50aXR5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGZpbHRlclBhcmVudEtleXMgPSB0aGlzLmdldFBhcmVudEtleXNWYWx1ZXMoKTtcbiAgICBpZiAoIVNlcnZpY2VVdGlscy5maWx0ZXJDb250YWluc0FsbFBhcmVudEtleXMoZmlsdGVyUGFyZW50S2V5cywgdGhpcy5fcEtleXNFcXVpdikgJiYgIXRoaXMucXVlcnlXaXRoTnVsbFBhcmVudEtleXMpIHtcbiAgICAgIHRoaXMuc2V0RGF0YShbXSwgW10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5xdWVyeVN1YnNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XG5cbiAgICAgIC8vIGVuc3VyaW5nIGZhbHNlIHZhbHVlXG4gICAgICB0aGlzLmFib3J0UXVlcnkubmV4dChmYWxzZSk7XG5cblxuICAgICAgaWYgKHRoaXMuYWJvcnRRdWVyeS52YWx1ZSkge1xuICAgICAgICB0aGlzLmNsZWFyRGF0YSgpO1xuICAgICAgICAvKiogIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpIGlzIHVzZWQgdG8gdXBkYXRlIGxvYWRpbmdTdWJqZWN0IHZhbHVlICh0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7IGluIGxpbmUgMzc3KVxuICAgICAgICAgKiAgYmVmb3JlIHVzaW5nIHRoZSBuZXh0IGxpbmUgYW5kIHNvIHVwZGF0ZSB0aGUgb1RhYmxlRXhwYW5kZWRGb290ZXIgZGlyZWN0aXZlIGFuZCBkaXNwbGF5IHRoZSBtZXNzYWdlXG4gICAgICAgICAqIHRoYXQgdGhlcmUgYXJlIG5vIHJlc3VsdHMgd2hlbiB0aGUgcXVlcnkgaXMgYWJvcnRlZCovXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMucXVlcnlBcmd1bWVudHMgPSB0aGlzLmdldFF1ZXJ5QXJndW1lbnRzKGZpbHRlciwgb3ZyckFyZ3MpO1xuXG4gICAgICB0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhU2VydmljZVtxdWVyeU1ldGhvZE5hbWVdKC4uLnRoaXMuZGF0YVNlcnZpY2UucXVlcnlBcmd1bWVudEFkYXB0ZXIucGFyc2VRdWVyeVBhcmFtZXRlcnModGhpcy5xdWVyeUFyZ3VtZW50cykpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlczogU2VydmljZVJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgICAgdGhpcy5zcWxUeXBlcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBpZiAoVXRpbC5pc0FycmF5KHJlcykpIHtcbiAgICAgICAgICAgIGRhdGEgPSByZXM7XG4gICAgICAgICAgICB0aGlzLnNxbFR5cGVzID0ge307XG4gICAgICAgICAgfSBlbHNlIGlmIChyZXMuaXNTdWNjZXNzZnVsKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyckRhdGEgPSAocmVzLmRhdGEgIT09IHVuZGVmaW5lZCkgPyByZXMuZGF0YSA6IFtdO1xuICAgICAgICAgICAgZGF0YSA9IFV0aWwuaXNBcnJheShhcnJEYXRhKSA/IGFyckRhdGEgOiBbXTtcbiAgICAgICAgICAgIHRoaXMuc3FsVHlwZXMgPSByZXMuc3FsVHlwZXM7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb25JbmZvKHJlcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEsIHRoaXMuc3FsVHlwZXMsIChvdnJyQXJncyAmJiBvdnJyQXJncy5yZXBsYWNlKSk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICB0aGlzLnNldERhdGEoW10sIFtdKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnF1ZXJ5RmFsbGJhY2tGdW5jdGlvbikpIHtcbiAgICAgICAgICAgIHRoaXMucXVlcnlGYWxsYmFja0Z1bmN0aW9uKGVycik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub0Vycm9yRGlhbG9nTWFuYWdlci5vcGVuRXJyb3JEaWFsb2coZXJyKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZWxvYWREYXRhKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlEYXRhKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVsb2FkcyB0aGUgY29tcG9uZW50IGRhdGEgYW5kIHJlc3RhcnRzIHRoZSBwYWdpbmF0aW9uLlxuICAgKi9cbiAgcmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0aW5nIHRoZSBnaXZlbiByZWNvcmQga2V5c1xuICAgKiBAcGFyYW0gaXRlbSByZWNvcmQgb2JqZWN0XG4gICAqIEByZXR1cm5zIG9iamVjdCBjb250YWluaW5nIGl0ZW0gb2JqZWN0IHByb3BlcnRpZXMgY29udGFpbmVkIGluIGtleXNBcnJheVxuICAgKi9cbiAgZXh0cmFjdEtleXNGcm9tUmVjb3JkKGl0ZW06IGFueSk6IG9iamVjdCB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgaWYgKFV0aWwuaXNPYmplY3QoaXRlbSkpIHtcbiAgICAgIHRoaXMua2V5c0FycmF5LmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKGl0ZW1ba2V5XSkpIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IGl0ZW1ba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXRBdHRyaWJ1dGVzVmFsdWVzVG9RdWVyeSgpOiBBcnJheTxzdHJpbmc+IHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNvbEFycmF5O1xuICAgIHRoaXMua2V5c0FycmF5LmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaW5kZXhPZihrZXkpID09PSAtMSkge1xuICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuXG4gIGdldFF1ZXJ5QXJndW1lbnRzKGZpbHRlcjogb2JqZWN0LCBvdnJyQXJnczogT1F1ZXJ5RGF0YUFyZ3MgPSB7fSk6IE9RdWVyeVBhcmFtcyB7XG4gICAgY29uc3QgY29tcEZpbHRlciA9IHRoaXMuZ2V0Q29tcG9uZW50RmlsdGVyKGZpbHRlcik7XG4gICAgY29uc3QgcXVlcnlDb2xzID0gdGhpcy5nZXRBdHRyaWJ1dGVzVmFsdWVzVG9RdWVyeSgpO1xuICAgIGNvbnN0IHNxbFR5cGVzID0gKG92cnJBcmdzICYmIG92cnJBcmdzLmhhc093blByb3BlcnR5KCdzcWx0eXBlcycpKSA/IG92cnJBcmdzLnNxbHR5cGVzIDogdGhpcy5mb3JtID8gdGhpcy5mb3JtLmdldEF0dHJpYnV0ZXNTUUxUeXBlcygpIDoge307XG5cbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgY29uc3QgcXVlcnlSZWNvcmRPZmZzZXQgPSB0aGlzLnN0YXRlLnF1ZXJ5UmVjb3JkT2Zmc2V0ID8gdGhpcy5zdGF0ZS5xdWVyeVJlY29yZE9mZnNldCA6IDA7XG4gICAgICBvdnJyQXJncy5vZmZzZXQgPSBvdnJyQXJncz8uaGFzT3duUHJvcGVydHkoJ29mZnNldCcpID8gb3ZyckFyZ3Mub2Zmc2V0IDogcXVlcnlSZWNvcmRPZmZzZXQ7XG4gICAgICBvdnJyQXJncy5sZW5ndGggPSBvdnJyQXJncz8uaGFzT3duUHJvcGVydHkoJ2xlbmd0aCcpID8gb3ZyckFyZ3MubGVuZ3RoIDogdGhpcy5xdWVyeVJvd3M7XG5cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZmlsdGVyOiBjb21wRmlsdGVyLFxuICAgICAgY29sdW1uczogcXVlcnlDb2xzLFxuICAgICAgZW50aXR5OiB0aGlzLmVudGl0eSxcbiAgICAgIHBhZ2VhYmxlOiB0aGlzLnBhZ2VhYmxlLFxuICAgICAgc3FsVHlwZXM6IHNxbFR5cGVzLFxuICAgICAgb3ZyckFyZ3M6IG92cnJBcmdzLFxuICAgICAgc29ydDogbnVsbFxuICAgIH07XG4gIH1cblxuICB1cGRhdGVQYWdpbmF0aW9uSW5mbyhxdWVyeVJlczogU2VydmljZVJlc3BvbnNlKSB7XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIGlmIChxdWVyeVJlcy5zdGFydFJlY29yZEluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0RW5kSW5kZXggPSBxdWVyeVJlcy5zdGFydFJlY29yZEluZGV4ICsgKHF1ZXJ5UmVzLmRhdGEgPyBxdWVyeVJlcy5kYXRhLmxlbmd0aCA6IDApO1xuICAgICAgICB0aGlzLnN0YXRlLnF1ZXJ5UmVjb3JkT2Zmc2V0ID0gcmVzdWx0RW5kSW5kZXg7XG4gICAgICB9XG4gICAgICBpZiAocXVlcnlSZXMudG90YWxRdWVyeVJlY29yZHNOdW1iZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnN0YXRlLnRvdGFsUXVlcnlSZWNvcmRzTnVtYmVyID0gcXVlcnlSZXMudG90YWxRdWVyeVJlY29yZHNOdW1iZXI7XG4gICAgICB9XG4gICAgICAvKiBwYWdlTnVtYmVyID0gMCBpcyByZWluaXRpYWxpemVkIHdoZW4gaXQgZ2VuZXJhdGVzIGEgc2VhcmNoICAqL1xuICAgICAgY29uc3QgcGFnZU51bWJlciA9IHRoaXMuc3RhdGUucXVlcnlSZWNvcmRPZmZzZXQgPT0gMCA/IDAgOiB0aGlzLmRhdGFTZXJ2aWNlPy5nZXRQYWdpbmF0aW9uQ29udGV4dCgpLnBhZ2VOdW1iZXI7XG4gICAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb25Db250ZXh0KHsgcGFnZU51bWJlcjogcGFnZU51bWJlciwgb2Zmc2V0OiB0aGlzLnN0YXRlLnF1ZXJ5UmVjb3JkT2Zmc2V0LCB0b3RhbFNpemU6IHRoaXMuc3RhdGUudG90YWxRdWVyeVJlY29yZHNOdW1iZXIgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlUGFnaW5hdGlvbkNvbnRleHQoeyB0b3RhbFNpemU6IHF1ZXJ5UmVzLmRhdGEubGVuZ3RoIH0pO1xuICAgIH1cblxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQYWdpbmF0aW9uQ29udGV4dChwYWdpbmF0aW9uQ29udGV4dDogUGFnaW5hdGlvbkNvbnRleHQpIHtcbiAgICBpZiAoIXRoaXMucGFnZWFibGUpIHtcbiAgICAgIGRlbGV0ZSBwYWdpbmF0aW9uQ29udGV4dC5vZmZzZXQ7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhU2VydmljZT8uc2V0UGFnaW5hdGlvbkNvbnRleHQocGFnaW5hdGlvbkNvbnRleHQpO1xuICB9XG5cbiAgZ2V0VG90YWxSZWNvcmRzTnVtYmVyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUudG90YWxRdWVyeVJlY29yZHNOdW1iZXIpID8gdGhpcy5zdGF0ZS50b3RhbFF1ZXJ5UmVjb3Jkc051bWJlciA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldENvbnRleHRDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kYWJsZUNvbnRhaW5lciB8fCB0aGlzLmZvcm07XG4gIH1cblxuICBnZXRDb21wb25lbnRGaWx0ZXIoZXhpc3RpbmdGaWx0ZXI6IGFueSA9IHt9KTogYW55IHtcbiAgICBjb25zdCBmaWx0ZXJQYXJlbnRLZXlzID0gdGhpcy5nZXRQYXJlbnRLZXlzRnJvbUNvbnRleHQodGhpcy5fcEtleXNFcXVpdiwgdGhpcy5nZXRDb250ZXh0Q29tcG9uZW50KCkpO1xuICAgIGV4aXN0aW5nRmlsdGVyID0geyAuLi5leGlzdGluZ0ZpbHRlciB8fCB7fSwgLi4uZmlsdGVyUGFyZW50S2V5cyB9O1xuICAgIHJldHVybiBleGlzdGluZ0ZpbHRlcjtcbiAgfVxuXG4gIGdldFNxbFR5cGVzKCkge1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZCh0aGlzLnNxbFR5cGVzKSA/IHRoaXMuc3FsVHlwZXMgOiB7fTtcbiAgfVxuXG4gIGdldFBhcmVudEtleXNWYWx1ZXMoKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dENvbXBvbmVudCgpO1xuICAgIHJldHVybiB0aGlzLmdldFBhcmVudEtleXNGcm9tQ29udGV4dCh0aGlzLl9wS2V5c0VxdWl2LCBjb250ZXh0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVTdGF0ZVN0b3JhZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubG9jYWxTdG9yYWdlU2VydmljZSAmJiB0aGlzLnN0b3JlU3RhdGUgJiYgIXRoaXMuYWxyZWFkeVN0b3JlZCkge1xuICAgICAgdGhpcy5hbHJlYWR5U3RvcmVkID0gdHJ1ZTtcbiAgICAgIHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS51cGRhdGVDb21wb25lbnRTdG9yYWdlKHRoaXMsIHRoaXMuZ2V0Um91dGVLZXkoKSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNldERhdGEoZGF0YTogYW55LCBzcWxUeXBlcz86IGFueSwgcmVwbGFjZT86IGJvb2xlYW4pOiB2b2lkIHtcblxuICB9XG5cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyTG9jYWxTdG9yYWdlU2VydmljZVJvdXRlQ2hhbmdlKCkge1xuICAgIGlmICh0aGlzLnN0b3JlU3RhdGUpIHtcbiAgICAgIHRoaXMub25Sb3V0ZUNoYW5nZVN0b3JhZ2VTdWJzY3JpcHRpb24gPSB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2Uub25Sb3V0ZUNoYW5nZS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVTdGF0ZVN0b3JhZ2UoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG59XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIERlZmF1bHRPU2VydmljZUJhc2VDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdE9TZXJ2aWNlQmFzZUNvbXBvbmVudDxEZWZhdWx0U2VydmljZUNvbXBvbmVudFN0YXRlU2VydmljZT4ge1xuXG59XG5cbi8qIFRoaXMgY2xhc3MgaXMgYmVpbmcgZGVmaW5lZCB0byBtYW50YWluIHRoZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHByZXZpb3VzIHZlcnNpb25zLCB1c2UgRGVmYXVsdE9TZXJ2aWNlQmFzZUNvbXBvbmVudCovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBjbGFzcyBPU2VydmljZUJhc2VDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdE9TZXJ2aWNlQmFzZUNvbXBvbmVudDxEZWZhdWx0U2VydmljZUNvbXBvbmVudFN0YXRlU2VydmljZT4ge1xuXG59XG4iXX0=
450
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby1zZXJ2aWNlLWJhc2UtY29tcG9uZW50LmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvb250aW1pemUtd2ViLW5neC9zcmMvbGliL2NvbXBvbmVudHMvby1zZXJ2aWNlLWJhc2UtY29tcG9uZW50LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFpQyxNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBRWpFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBS3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFeEUsT0FBTyxFQUFFLDZCQUE2QixFQUF1QyxNQUFNLDZDQUE2QyxDQUFDO0FBSWpJLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDeEcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FB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RTs7a0VBQ0k7QUFDNUI7SUFBQyxxQkFBcUIsRUFBRTs7a0VBQ0k7QUFFNUI7SUFBQyxxQkFBcUIsRUFBRTs7K0RBQ0U7QUErQjFCO0lBQUMscUJBQXFCLEVBQUU7O2lFQUNHO0FBQzNCO0lBQUMscUJBQXFCLEVBQUU7OzhFQUNpQjsyRkFyRHJCLDZCQUE2QjtrQkFIbEQsU0FBUzttQkFBQztvQkFDVCxNQUFNLEVBQUUsdUNBQXVDO2lCQUNoRDsrRkFlQyxXQUFXLE1BRVgsV0FBVyxNQUdYLFFBQVEsTUFnQ1IsVUFBVSxNQUVWLHVCQUF1QixNQTBKdkIsbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLHFCQUFxQixFQUFFLEVBQUU7O0FBNFJ6QyxNQUFNLE9BQU8sNEJBQTZCLFNBQVEsNkJBQWtFOzt5SEFBdkcsNEJBQTRCOzZHQUE1Qiw0QkFBNEI7MkZBQTVCLDRCQUE0QjtrQkFEeEMsU0FBUzs7QUFPVixNQUFNLE9BQU8scUJBQXNCLFNBQVEsNkJBQWtFOztrSEFBaEcscUJBQXFCO3NHQUFyQixxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFEakMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgSW5qZWN0b3IsIGlzRGV2TW9kZSwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2UsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQm9vbGVhbklucHV0Q29udmVydGVyIH0gZnJvbSAnLi4vZGVjb3JhdG9ycy9pbnB1dC1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgUGFnaW5hdGlvbkNvbnRleHQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3BhZ2luYXRpb24tY29udGV4dC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUxvY2FsU3RvcmFnZUNvbXBvbmVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvbG9jYWwtc3RvcmFnZS1jb21wb25lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNlcnZpY2VSZXNwb25zZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VydmljZS1yZXNwb25zZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9iYXNlLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT0Vycm9yRGlhbG9nTWFuYWdlciB9IGZyb20gJy4uL3NlcnZpY2VzL28tZXJyb3ItZGlhbG9nLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBPbnRpbWl6ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9vbnRpbWl6ZS9vbnRpbWl6ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFic3RyYWN0U2VydmljZUNvbXBvbmVudFN0YXRlQ2xhc3MgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdGF0ZS9vLWNvbXBvbmVudC1zdGF0ZS5jbGFzcyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbXBvbmVudFN0YXRlU2VydmljZSwgRGVmYXVsdFNlcnZpY2VDb21wb25lbnRTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdGF0ZS9vLWNvbXBvbmVudC1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9Db25maWd1cmVTZXJ2aWNlQXJncyB9IGZyb20gJy4uL3R5cGVzL2NvbmZpZ3VyZS1zZXJ2aWNlLWFyZ3MudHlwZSc7XG5pbXBvcnQgeyBPUXVlcnlEYXRhQXJncyB9IGZyb20gJy4uL3R5cGVzL3F1ZXJ5LWRhdGEtYXJncy50eXBlJztcbmltcG9ydCB7IE9RdWVyeVBhcmFtcyB9IGZyb20gJy4uL3R5cGVzL3F1ZXJ5LXBhcmFtcy50eXBlJztcbmltcG9ydCB7IENvZGVzIH0gZnJvbSAnLi4vdXRpbC9jb2Rlcyc7XG5pbXBvcnQgeyBTZXJ2aWNlVXRpbHMgfSBmcm9tICcuLi91dGlsL3NlcnZpY2UudXRpbHMnO1xuaW1wb3J0IHsgVXRpbCB9IGZyb20gJy4uL3V0aWwvdXRpbCc7XG5pbXBvcnQgeyBPRXhwYW5kYWJsZUNvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4vZXhwYW5kYWJsZS1jb250YWluZXIvby1leHBhbmRhYmxlLWNvbnRhaW5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgT0Zvcm1Db21wb25lbnQgfSBmcm9tICcuL2Zvcm0vby1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGYWN0b3J5VXRpbCB9IGZyb20gJy4uL3V0aWwvZmFjdG9yeS51dGlsJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfSU5QVVRTX09fU0VSVklDRV9CQVNFX0NPTVBPTkVOVCA9IFtcbiAgLy8gYXR0ciBbc3RyaW5nXTogbGlzdCBpZGVudGlmaWVyLiBJdCBpcyBtYW5kYXRvcnkgaWYgZGF0YSBhcmUgcHJvdmlkZWQgdGhyb3VnaCB0aGUgZGF0YSBhdHRyaWJ1dGUuIERlZmF1bHQ6IGVudGl0eSAoaWYgc2V0KS5cbiAgJ29hdHRyOiBhdHRyJyxcblxuICAvLyBzZXJ2aWNlIFtzdHJpbmddOiBKRUUgc2VydmljZSBwYXRoLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3NlcnZpY2UnLFxuXG4gICdzZXJ2aWNlVHlwZSA6IHNlcnZpY2UtdHlwZScsXG5cbiAgLy8gZW50aXR5IFtzdHJpbmddOiBlbnRpdHkgb2YgdGhlIHNlcnZpY2UuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnZW50aXR5JyxcblxuICAvLyBxdWVyeS1vbi1pbml0IFtub3x5ZXNdOiBxdWVyeSBvbiBpbml0LiBEZWZhdWx0OiB5ZXMuXG4gICdxdWVyeU9uSW5pdDogcXVlcnktb24taW5pdCcsXG5cbiAgLy8gcXVlcnktb24taW5pdCBbbm98eWVzXTogcXVlcnkgb24gYmluZC4gRGVmYXVsdDogeWVzLlxuICAncXVlcnlPbkJpbmQ6IHF1ZXJ5LW9uLWJpbmQnLFxuXG4gICdxdWVyeU9uRXZlbnQ6IHF1ZXJ5LW9uLWV2ZW50JyxcblxuICAncGFnZWFibGUnLFxuXG4gIC8vIGNvbHVtbnMgW3N0cmluZ106IGNvbHVtbnMgb2YgdGhlIGVudGl0eSwgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdjb2x1bW5zJyxcblxuICAvLyBrZXlzIFtzdHJpbmddOiBlbnRpdHkga2V5cywgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdrZXlzJyxcblxuICAvLyBwYXJlbnQta2V5cyBbc3RyaW5nXTogcGFyZW50IGtleXMgdG8gZmlsdGVyLCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3BhcmVudEtleXM6IHBhcmVudC1rZXlzJyxcblxuICAvLyBzdGF0aWMtZGF0YSBbQXJyYXk8YW55Pl0gOiB3YXkgdG8gcG9wdWxhdGUgd2l0aCBzdGF0aWMgZGF0YS4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdzdGF0aWNEYXRhOiBzdGF0aWMtZGF0YScsXG5cbiAgLy8gcXVlcnktbWV0aG9kIFtzdHJpbmddOiBuYW1lIG9mIHRoZSBzZXJ2aWNlIG1ldGhvZCB0byBwZXJmb3JtIHF1ZXJpZXMuIERlZmF1bHQ6IHF1ZXJ5LlxuICAncXVlcnlNZXRob2Q6IHF1ZXJ5LW1ldGhvZCcsXG5cbiAgLy8gcGFnaW5hdGVkLXF1ZXJ5LW1ldGhvZCBbc3RyaW5nXTogbmFtZSBvZiB0aGUgc2VydmljZSBtZXRob2QgdG8gcGVyZm9ybSBwYWdpbmF0ZWQgcXVlcmllcy4gRGVmYXVsdDogYWR2YW5jZWRRdWVyeS5cbiAgJ3BhZ2luYXRlZFF1ZXJ5TWV0aG9kIDogcGFnaW5hdGVkLXF1ZXJ5LW1ldGhvZCcsXG5cbiAgLy8gcXVlcnktcm93cyBbbnVtYmVyXTogbnVtYmVyIG9mIHJvd3MgcGVyIHBhZ2UuIERlZmF1bHQ6IDEwLlxuICAnb1F1ZXJ5Um93czogcXVlcnktcm93cycsXG5cbiAgLy8gaW5zZXJ0LW1ldGhvZCBbc3RyaW5nXTogbmFtZSBvZiB0aGUgc2VydmljZSBtZXRob2QgdG8gcGVyZm9ybSBpbnNlcnRzLiBEZWZhdWx0OiBpbnNlcnQuXG4gICdpbnNlcnRNZXRob2Q6IGluc2VydC1tZXRob2QnLFxuXG4gIC8vIHVwZGF0ZS1tZXRob2QgW3N0cmluZ106IG5hbWUgb2YgdGhlIHNlcnZpY2UgbWV0aG9kIHRvIHBlcmZvcm0gdXBkYXRlcy4gRGVmYXVsdDogdXBkYXRlLlxuICAndXBkYXRlTWV0aG9kOiB1cGRhdGUtbWV0aG9kJyxcblxuICAvLyBkZWxldGUtbWV0aG9kIFtzdHJpbmddOiBuYW1lIG9mIHRoZSBzZXJ2aWNlIG1ldGhvZCB0byBwZXJmb3JtIGRlbGV0aW9ucy4gRGVmYXVsdDogZGVsZXRlLlxuICAnZGVsZXRlTWV0aG9kOiBkZWxldGUtbWV0aG9kJyxcblxuICAnc3RvcmVTdGF0ZTogc3RvcmUtc3RhdGUnLFxuXG4gIC8vIHF1ZXJ5LXdpdGgtbnVsbC1wYXJlbnQta2V5cyBbc3RyaW5nXVt5ZXN8bm98dHJ1ZXxmYWxzZV06IEluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0byB0cmlnZ2VyIHF1ZXJ5IG1ldGhvZCB3aGVuIHBhcmVudC1rZXlzIGZpbHRlciBpcyBudWxsLiBEZWZhdWx0OiBmYWxzZVxuICAncXVlcnlXaXRoTnVsbFBhcmVudEtleXM6IHF1ZXJ5LXdpdGgtbnVsbC1wYXJlbnQta2V5cycsXG5cbiAgLy8gW2Z1bmN0aW9uXTogZnVuY3Rpb24gdG8gZXhlY3V0ZSBvbiBxdWVyeSBlcnJvci4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICdxdWVyeUZhbGxiYWNrRnVuY3Rpb246IHF1ZXJ5LWZhbGxiYWNrLWZ1bmN0aW9uJyxcbiAgLy8gLFxuXG4gIC8vICdpbnNlcnRGYWxsYmFja0Z1bmN0aW9uOiBpbnNlcnQtZmFsbGJhY2stZnVuY3Rpb24nLFxuXG4gIC8vICd1cGRhdGVGYWxsYmFja0Z1bmN0aW9uOiB1cGRhdGUtZmFsbGJhY2stZnVuY3Rpb24nLFxuXG4gIC8vICdkZWxldGVGYWxsYmFja0Z1bmN0aW9uOiBkZWxldGUtZmFsbGJhY2stZnVuY3Rpb24nLFxuICAvLyAgY29uZmlndXJlLXNlcnZpY2UtYXJncyBbT0NvbmZpZ3VyZVNlcnZpY2VBcmdzXTogQWxsb3dzIGNvbmZpZ3VyZSBzZXJ2aWNlIC5cbiAgJ2NvbmZpZ3VyZVNlcnZpY2VBcmdzOiBjb25maWd1cmUtc2VydmljZS1hcmdzJ1xuXTtcblxuQERpcmVjdGl2ZSh7XG4gIGlucHV0czogREVGQVVMVF9JTlBVVFNfT19TRVJWSUNFX0JBU0VfQ09NUE9ORU5UXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0T1NlcnZpY2VCYXNlQ29tcG9uZW50PFQgZXh0ZW5kcyBBYnN0cmFjdENvbXBvbmVudFN0YXRlU2VydmljZTxBYnN0cmFjdFNlcnZpY2VDb21wb25lbnRTdGF0ZUNsYXNzPj4gaW1wbGVtZW50cyBJTG9jYWxTdG9yYWdlQ29tcG9uZW50LCBPbkNoYW5nZXMge1xuXG4gIHByb3RlY3RlZCBsb2NhbFN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlO1xuICBjb21wb25lbnRTdGF0ZVNlcnZpY2U6IFQ7XG4gIHByb3RlY3RlZCBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlO1xuICBwcm90ZWN0ZWQgb0Vycm9yRGlhbG9nTWFuYWdlcjogT0Vycm9yRGlhbG9nTWFuYWdlcjtcbiAgcGFyZW50Q29tcG9uZW50OiBBYnN0cmFjdE9TZXJ2aWNlQmFzZUNvbXBvbmVudDxUPjtcblxuICAvKiBpbnB1dHMgdmFyaWFibGVzICovXG4gIG9hdHRyOiBzdHJpbmc7XG4gIHNlcnZpY2U6IHN0cmluZztcbiAgc2VydmljZVR5cGU6IHN0cmluZztcbiAgZW50aXR5OiBzdHJpbmc7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBxdWVyeU9uSW5pdDogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBxdWVyeU9uQmluZDogYm9vbGVhbiA9IHRydWU7XG4gIHF1ZXJ5T25FdmVudDogYW55O1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcGFnZWFibGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29sdW1uczogc3RyaW5nO1xuICBrZXlzOiBzdHJpbmc7XG4gIHBhcmVudEtleXM6IHN0cmluZztcbiAgc3RhdGljRGF0YTogQXJyYXk8YW55PjtcbiAgcXVlcnlNZXRob2Q6IHN0cmluZyA9IENvZGVzLlFVRVJZX01FVEhPRDtcbiAgcGFnaW5hdGVkUXVlcnlNZXRob2Q6IHN0cmluZyA9IENvZGVzLlBBR0lOQVRFRF9RVUVSWV9NRVRIT0Q7XG5cbiAgb3JpZ2luYWxRdWVyeVJvd3M6IG51bWJlciA9IENvZGVzLkRFRkFVTFRfUVVFUllfUk9XUztcbiAgcHJvdGVjdGVkIF9xdWVyeVJvd3MgPSB0aGlzLm9yaWdpbmFsUXVlcnlSb3dzO1xuXG4gIHNldCBvUXVlcnlSb3dzKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgPyBwYXJzZUludCh2YWx1ZSwgMTApIDogdmFsdWU7XG4gICAgICB0aGlzLm9yaWdpbmFsUXVlcnlSb3dzID0gdmFsdWU7XG4gICAgICB0aGlzLl9xdWVyeVJvd3MgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXQgcXVlcnlSb3dzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5Um93cztcbiAgfVxuXG4gIHNldCBxdWVyeVJvd3ModmFsdWU6IG51bWJlcikge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX3F1ZXJ5Um93cyA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICBpbnNlcnRNZXRob2Q6IHN0cmluZyA9IENvZGVzLklOU0VSVF9NRVRIT0Q7XG4gIHVwZGF0ZU1ldGhvZDogc3RyaW5nID0gQ29kZXMuVVBEQVRFX01FVEhPRDtcbiAgZGVsZXRlTWV0aG9kOiBzdHJpbmcgPSBDb2Rlcy5ERUxFVEVfTUVUSE9EO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc3RvcmVTdGF0ZTogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBxdWVyeVdpdGhOdWxsUGFyZW50S2V5czogYm9vbGVhbiA9IGZhbHNlO1xuICBxdWVyeUZhbGxiYWNrRnVuY3Rpb246IChlcnI6IGFueSkgPT4gdm9pZDtcbiAgLy8gaW5zZXJ0RmFsbGJhY2tGdW5jdGlvbjogKGVycjogYW55KSA9PiB2b2lkO1xuICAvLyB1cGRhdGVGYWxsYmFja0Z1bmN0aW9uOiAoZXJyOiBhbnkpID0+IHZvaWQ7XG4gIC8vIGRlbGV0ZUZhbGxiYWNrRnVuY3Rpb246IChlcnI6IGFueSkgPT4gdm9pZDtcbiAgLyogZW5kIG9mIGlucHV0cyB2YXJpYWJsZXMgKi9cblxuICAvKiBwYXJzZWQgaW5wdXRzIHZhcmlhYmxlcyAqL1xuICBwcm90ZWN0ZWQgY29sQXJyYXk6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgcHJvdGVjdGVkIGtleXNBcnJheTogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICBwcm90ZWN0ZWQgX3BLZXlzRXF1aXYgPSB7fTtcbiAgZGF0YUFycmF5OiBBcnJheTxhbnk+ID0gW107XG4gIHByb3RlY3RlZCBvYXR0ckZyb21FbnRpdHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyogZW5kIG9mIHBhcnNlZCBpbnB1dHMgdmFyaWFibGVzICovXG5cbiAgcHJvdGVjdGVkIG9uUm91dGVDaGFuZ2VTdG9yYWdlU3Vic2NyaXB0aW9uOiBhbnk7XG4gIHByb3RlY3RlZCBvbkZvcm1EYXRhU3Vic2NyaWJlOiBhbnk7XG5cbiAgcHJvdGVjdGVkIHF1ZXJ5U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBkYXRhU2VydmljZTogQmFzZVNlcnZpY2U8U2VydmljZVJlc3BvbnNlPjtcblxuICBwcm90ZWN0ZWQgbG9hZGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGxvYWRpbmc6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmxvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHByb3RlY3RlZCBmb3JtOiBPRm9ybUNvbXBvbmVudDtcbiAgcHVibGljIGV4cGFuZGFibGVDb250YWluZXI6IE9FeHBhbmRhYmxlQ29udGFpbmVyQ29tcG9uZW50O1xuICBwcm90ZWN0ZWQgYWxyZWFkeVN0b3JlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBxdWVyeU9uRXZlbnRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGNkOiBDaGFuZ2VEZXRlY3RvclJlZjsgLy8gYm9ycmFyXG4gIHByb3RlY3RlZCBxdWVyeUFyZ3VtZW50czogT1F1ZXJ5UGFyYW1zO1xuXG4gIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcjtcbiAgcHJvdGVjdGVkIGFjdFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZTtcblxuICBwcm90ZWN0ZWQgc3FsVHlwZXMgPSB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGFib3J0UXVlcnk6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBwcm90ZWN0ZWQgY29uZmlndXJlU2VydmljZUFyZ3M6IE9Db25maWd1cmVTZXJ2aWNlQXJncztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yXG4gICkge1xuICAgIHRoaXMuZGlhbG9nU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0PERpYWxvZ1NlcnZpY2U+KERpYWxvZ1NlcnZpY2UgYXMgVHlwZTxEaWFsb2dTZXJ2aWNlPik7XG4gICAgdGhpcy5vRXJyb3JEaWFsb2dNYW5hZ2VyID0gdGhpcy5pbmplY3Rvci5nZXQ8T0Vycm9yRGlhbG9nTWFuYWdlcj4oT0Vycm9yRGlhbG9nTWFuYWdlciBhcyBUeXBlPE9FcnJvckRpYWxvZ01hbmFnZXI+KTtcbiAgICB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldDxMb2NhbFN0b3JhZ2VTZXJ2aWNlPihMb2NhbFN0b3JhZ2VTZXJ2aWNlIGFzIFR5cGU8TG9jYWxTdG9yYWdlU2VydmljZT4pO1xuICAgIHRoaXMuY29tcG9uZW50U3RhdGVTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQ8VD4oQWJzdHJhY3RDb21wb25lbnRTdGF0ZVNlcnZpY2UgYXMgVHlwZTxUPik7XG4gICAgdGhpcy5yb3V0ZXIgPSB0aGlzLmluamVjdG9yLmdldDxSb3V0ZXI+KFJvdXRlciBhcyBUeXBlPFJvdXRlcj4pO1xuICAgIHRoaXMuYWN0Um91dGUgPSB0aGlzLmluamVjdG9yLmdldDxBY3RpdmF0ZWRSb3V0ZT4oQWN0aXZhdGVkUm91dGUgYXMgVHlwZTxBY3RpdmF0ZWRSb3V0ZT4pO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmNkID0gdGhpcy5pbmplY3Rvci5nZXQ8Q2hhbmdlRGV0ZWN0b3JSZWY+KENoYW5nZURldGVjdG9yUmVmIGFzIFR5cGU8Q2hhbmdlRGV0ZWN0b3JSZWY+KTtcbiAgICAgIHRoaXMuZm9ybSA9IHRoaXMuaW5qZWN0b3IuZ2V0PE9Gb3JtQ29tcG9uZW50PihPRm9ybUNvbXBvbmVudCBhcyBUeXBlPE9Gb3JtQ29tcG9uZW50Pik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gbm8gcGFyZW50IGZvcm1cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZXhwYW5kYWJsZUNvbnRhaW5lciA9IHRoaXMuaW5qZWN0b3IuZ2V0PE9FeHBhbmRhYmxlQ29udGFpbmVyQ29tcG9uZW50PihPRXhwYW5kYWJsZUNvbnRhaW5lckNvbXBvbmVudCBhcyBUeXBlPE9FeHBhbmRhYmxlQ29udGFpbmVyQ29tcG9uZW50Pik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gTm8gcGFyZW50IE9FeHBhbmRhYmxlQ29udGFpbmVyQ29tcG9uZW50XG4gICAgfVxuICB9XG5cbiAgZ2V0IHN0YXRlKCk6IEFic3RyYWN0U2VydmljZUNvbXBvbmVudFN0YXRlQ2xhc3Mge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFN0YXRlU2VydmljZS5zdGF0ZTtcbiAgfVxuXG4gIGluaXRpYWxpemUoKTogdm9pZCB7XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLm9hdHRyKSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLmVudGl0eSkpIHtcbiAgICAgIHRoaXMub2F0dHIgPSB0aGlzLmVudGl0eS5yZXBsYWNlKCcuJywgJ18nKTtcbiAgICAgIHRoaXMub2F0dHJGcm9tRW50aXR5ID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5rZXlzQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5rZXlzKTtcbiAgICB0aGlzLmNoZWNrQ29sdW1ucygpO1xuICAgIGNvbnN0IHBrQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5wYXJlbnRLZXlzKTtcbiAgICB0aGlzLl9wS2V5c0VxdWl2ID0gVXRpbC5wYXJzZVBhcmVudEtleXNFcXVpdmFsZW5jZXMocGtBcnJheSwgQ29kZXMuQ09MVU1OU19BTElBU19TRVBBUkFUT1IpO1xuXG4gICAgdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2UuaW5pdGlhbGl6ZSh0aGlzKTtcblxuICAgIGlmICh0aGlzLnN0YXRpY0RhdGEpIHtcbiAgICAgIHRoaXMucXVlcnlPbkJpbmQgPSBmYWxzZTtcbiAgICAgIHRoaXMucXVlcnlPbkluaXQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0RGF0YUFycmF5KHRoaXMuc3RhdGljRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29uZmlndXJlU2VydmljZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZvcm0gJiYgVXRpbC5pc0RlZmluZWQodGhpcy5kYXRhU2VydmljZSkpIHtcbiAgICAgIHRoaXMuc2V0Rm9ybUNvbXBvbmVudCh0aGlzLmZvcm0pO1xuICAgIH1cblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnF1ZXJ5T25FdmVudCkgJiYgVXRpbC5pc0RlZmluZWQodGhpcy5xdWVyeU9uRXZlbnQuc3Vic2NyaWJlKSkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICB0aGlzLnF1ZXJ5T25FdmVudFN1YnNjcmlwdGlvbiA9IHRoaXMucXVlcnlPbkV2ZW50LnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHZhbHVlKSB8fCB0aGlzLnF1ZXJ5V2l0aE51bGxQYXJlbnRLZXlzKSB7XG4gICAgICAgICAgc2VsZi5xdWVyeURhdGEoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLnF1ZXJ5RmFsbGJhY2tGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5xdWVyeUZhbGxiYWNrRnVuY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tDb2x1bW5zKCkge1xuICAgIHRoaXMuY29sQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy5jb2x1bW5zLCB0cnVlKTtcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgIHRoaXMua2V5c0FycmF5LmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1ucy5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKGBJbiB0aGUgY29tcG9uZW50ICcke3RoaXMub2F0dHJ9JywgdGhlIGtleSAnJHtrZXl9JyBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGNvbHVtbnMgZGVmaW5pdGlvbiBhbmQgc29tZSBmdW5jdGlvbmFsaXRpZXMgbWF5IG5vdCB3b3JrIGNvcnJlY3RseWApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGFmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5yZWdpc3RlckxvY2FsU3RvcmFnZVNlcnZpY2VSb3V0ZUNoYW5nZSgpO1xuXG4gICAgdGhpcy5hYm9ydFF1ZXJ5LnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMucXVlcnlTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXREYXRhKFtdKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMub25Gb3JtRGF0YVN1YnNjcmliZSkge1xuICAgICAgdGhpcy5vbkZvcm1EYXRhU3Vic2NyaWJlLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXJ5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9uUm91dGVDaGFuZ2VTdG9yYWdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLm9uUm91dGVDaGFuZ2VTdG9yYWdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXJ5T25FdmVudFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5xdWVyeU9uRXZlbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FuU2V0U3RhdGljRGF0YShzdGF0aWNEYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQoc3RhdGljRGF0YSlcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBTaW1wbGVDaGFuZ2UgfSkge1xuICAgIGlmICh0aGlzLmNhblNldFN0YXRpY0RhdGEoY2hhbmdlcy5zdGF0aWNEYXRhPy5jdXJyZW50VmFsdWUpKSB7XG4gICAgICB0aGlzLnNldERhdGEoY2hhbmdlcy5zdGF0aWNEYXRhLmN1cnJlbnRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmJlZm9yZXVubG9hZCcsIFtdKVxuICBiZWZvcmV1bmxvYWRIYW5kbGVyKCkge1xuICAgIHRoaXMudXBkYXRlU3RhdGVTdG9yYWdlKCk7XG4gIH1cblxuICBnZXRBdHRyaWJ1dGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5vYXR0cjtcbiAgfVxuXG4gIGdldENvbXBvbmVudEtleSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgpO1xuICB9XG5cbiAgZ2V0RGF0YVRvU3RvcmUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZTtcbiAgfVxuXG4gIGdldFJvdXRlS2V5KCk6IHN0cmluZyB7XG4gICAgbGV0IHJvdXRlID0gdGhpcy5yb3V0ZXIudXJsO1xuICAgIHRoaXMuYWN0Um91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgT2JqZWN0LmtleXMocGFyYW1zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHJvdXRlID0gcm91dGUucmVwbGFjZShwYXJhbXNba2V5XSwga2V5KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiByb3V0ZTtcbiAgfVxuXG4gIGdldEtleXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmtleXNBcnJheTtcbiAgfVxuXG4gIGNvbmZpZ3VyZVNlcnZpY2UoKSB7XG4gICAgbGV0IGNvbmZpZ3VyZVNlcnZpY2VBcmdzOiBPQ29uZmlndXJlU2VydmljZUFyZ3MgPSB7IGluamVjdG9yOiB0aGlzLmluamVjdG9yLCBiYXNlU2VydmljZTogT250aW1pemVTZXJ2aWNlLCBlbnRpdHk6IHRoaXMuZW50aXR5LCBzZXJ2aWNlOiB0aGlzLnNlcnZpY2UsIHNlcnZpY2VUeXBlOiB0aGlzLnNlcnZpY2VUeXBlIH1cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5jb25maWd1cmVTZXJ2aWNlQXJncykpIHtcbiAgICAgIGNvbmZpZ3VyZVNlcnZpY2VBcmdzID0geyAuLi5jb25maWd1cmVTZXJ2aWNlQXJncywgLi4udGhpcy5jb25maWd1cmVTZXJ2aWNlQXJncyB9O1xuICAgIH1cblxuICAgIHRoaXMuZGF0YVNlcnZpY2UgPSBGYWN0b3J5VXRpbC5jb25maWd1cmVTZXJ2aWNlKGNvbmZpZ3VyZVNlcnZpY2VBcmdzKTtcbiAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb25Db250ZXh0KHsgcGFnZU51bWJlcjogMCwgcGFnZVNpemU6IHRoaXMucXVlcnlSb3dzLCBvZmZzZXQ6IDAsIHRvdGFsU2l6ZTogMCB9KTtcbiAgfVxuXG4gIGdldERhdGFBcnJheSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhQXJyYXk7XG4gIH1cblxuICBzZXREYXRhQXJyYXkoZGF0YTogYW55KTogdm9pZCB7XG4gICAgLyogVGhlIG8tdGFibGUgaGFzIG93biBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCAqL1xuICAgIGlmIChVdGlsLmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIHRoaXMuZGF0YUFycmF5ID0gZGF0YTtcbiAgICB9IGVsc2UgaWYgKFV0aWwuaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgIHRoaXMuZGF0YUFycmF5ID0gW2RhdGFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0NvbXBvbmVudCBoYXMgcmVjZWl2ZWQgbm90IHN1cHBvcnRlZCBzZXJ2aWNlIGRhdGEuIFN1cHBvcnRlZCBkYXRhIGFyZSBBcnJheSBvciBPYmplY3QnKTtcbiAgICAgIHRoaXMuZGF0YUFycmF5ID0gW107XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YUFycmF5IGluc3RhbmNlb2YgQXJyYXkgJiYgdGhpcy5kYXRhQXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlPy5yZWluaXRpYWxpemVQYWdpbmF0aW9uQ29udGV4dCh0aGlzLnF1ZXJ5Um93cyk7XG4gICAgfVxuXG4gIH1cblxuICBwdWJsaWMgc2V0Rm9ybUNvbXBvbmVudChmb3JtOiBPRm9ybUNvbXBvbmVudCk6IHZvaWQge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5mb3JtKSkge1xuICAgICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5xdWVyeU9uQmluZCkge1xuICAgICAgdGhpcy5vbkZvcm1EYXRhU3Vic2NyaWJlID0gdGhpcy5mb3JtLm9uRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wYWdlYWJsZSA/IHRoaXMucmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydCgpIDogdGhpcy5yZWxvYWREYXRhKCkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRQYXJlbnRLZXlzRnJvbUNvbnRleHQocGFyZW50S2V5czogb2JqZWN0LCBjb250ZXh0OiBhbnkpIHtcbiAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgY29uc3QgY2hlY2tSb3V0ZVBhcmFtc1JlY3Vyc2l2ZSA9IHRoaXMucm91dGVyLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kgIT09ICdhbHdheXMnO1xuICAgIGlmIChjb250ZXh0IGluc3RhbmNlb2YgT0V4cGFuZGFibGVDb250YWluZXJDb21wb25lbnQpIHtcbiAgICAgIHJlc3VsdCA9IFNlcnZpY2VVdGlscy5nZXRQYXJlbnRLZXlzRnJvbUV4cGFuZGFibGVDb250YWluZXIocGFyZW50S2V5cywgY29udGV4dCwgdGhpcy5hY3RSb3V0ZSwgY2hlY2tSb3V0ZVBhcmFtc1JlY3Vyc2l2ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IFNlcnZpY2VVdGlscy5nZXRQYXJlbnRLZXlzRnJvbUZvcm0ocGFyZW50S2V5cywgY29udGV4dCwgdGhpcy5hY3RSb3V0ZSwgY2hlY2tSb3V0ZVBhcmFtc1JlY3Vyc2l2ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG5cbiAgfVxuXG4gIHB1YmxpYyBjbGVhckRhdGEoKSB7XG4gICAgdGhpcy5zdGF0ZS5xdWVyeVJlY29yZE9mZnNldCA9IDA7XG4gICAgdGhpcy5zdGF0ZS50b3RhbFF1ZXJ5UmVjb3Jkc051bWJlciA9IDA7XG4gICAgdGhpcy5zZXREYXRhKFtdLCBbXSk7XG4gIH1cblxuICBwdWJsaWMgcXVlcnlEYXRhKGZpbHRlcj86IGFueSwgb3ZyckFyZ3M/OiBPUXVlcnlEYXRhQXJncyk6IHZvaWQge1xuXG4gICAgY29uc3QgcXVlcnlNZXRob2ROYW1lID0gdGhpcy5wYWdlYWJsZSA/IHRoaXMucGFnaW5hdGVkUXVlcnlNZXRob2QgOiB0aGlzLnF1ZXJ5TWV0aG9kO1xuXG4gICAgaWYgKCF0aGlzLmRhdGFTZXJ2aWNlIHx8ICEocXVlcnlNZXRob2ROYW1lIGluIHRoaXMuZGF0YVNlcnZpY2UpIHx8ICF0aGlzLmVudGl0eSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaWx0ZXJQYXJlbnRLZXlzID0gdGhpcy5nZXRQYXJlbnRLZXlzVmFsdWVzKCk7XG4gICAgaWYgKCFTZXJ2aWNlVXRpbHMuZmlsdGVyQ29udGFpbnNBbGxQYXJlbnRLZXlzKGZpbHRlclBhcmVudEtleXMsIHRoaXMuX3BLZXlzRXF1aXYpICYmICF0aGlzLnF1ZXJ5V2l0aE51bGxQYXJlbnRLZXlzKSB7XG4gICAgICB0aGlzLnNldERhdGEoW10sIFtdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucXVlcnlTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5xdWVyeVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xuXG4gICAgICAvLyBlbnN1cmluZyBmYWxzZSB2YWx1ZVxuICAgICAgdGhpcy5hYm9ydFF1ZXJ5Lm5leHQoZmFsc2UpO1xuXG5cbiAgICAgIGlmICh0aGlzLmFib3J0UXVlcnkudmFsdWUpIHtcbiAgICAgICAgdGhpcy5jbGVhckRhdGEoKTtcbiAgICAgICAgLyoqICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKSBpcyB1c2VkIHRvIHVwZGF0ZSBsb2FkaW5nU3ViamVjdCB2YWx1ZSAodGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpOyBpbiBsaW5lIDM3NylcbiAgICAgICAgICogIGJlZm9yZSB1c2luZyB0aGUgbmV4dCBsaW5lIGFuZCBzbyB1cGRhdGUgdGhlIG9UYWJsZUV4cGFuZGVkRm9vdGVyIGRpcmVjdGl2ZSBhbmQgZGlzcGxheSB0aGUgbWVzc2FnZVxuICAgICAgICAgKiB0aGF0IHRoZXJlIGFyZSBubyByZXN1bHRzIHdoZW4gdGhlIHF1ZXJ5IGlzIGFib3J0ZWQqL1xuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnF1ZXJ5QXJndW1lbnRzID0gdGhpcy5nZXRRdWVyeUFyZ3VtZW50cyhmaWx0ZXIsIG92cnJBcmdzKTtcblxuICAgICAgdGhpcy5xdWVyeVN1YnNjcmlwdGlvbiA9IHRoaXMuZGF0YVNlcnZpY2VbcXVlcnlNZXRob2ROYW1lXSguLi50aGlzLmRhdGFTZXJ2aWNlLnJlcXVlc3RBcmd1bWVudEFkYXB0ZXIucGFyc2VRdWVyeVBhcmFtZXRlcnModGhpcy5xdWVyeUFyZ3VtZW50cykpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlczogU2VydmljZVJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgICAgdGhpcy5zcWxUeXBlcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBpZiAoVXRpbC5pc0FycmF5KHJlcykpIHtcbiAgICAgICAgICAgIGRhdGEgPSByZXM7XG4gICAgICAgICAgICB0aGlzLnNxbFR5cGVzID0ge307XG4gICAgICAgICAgfSBlbHNlIGlmIChyZXMuaXNTdWNjZXNzZnVsKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyckRhdGEgPSAocmVzLmRhdGEgIT09IHVuZGVmaW5lZCkgPyByZXMuZGF0YSA6IFtdO1xuICAgICAgICAgICAgZGF0YSA9IFV0aWwuaXNBcnJheShhcnJEYXRhKSA/IGFyckRhdGEgOiBbXTtcbiAgICAgICAgICAgIHRoaXMuc3FsVHlwZXMgPSByZXMuc3FsVHlwZXM7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb25JbmZvKHJlcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEsIHRoaXMuc3FsVHlwZXMsIChvdnJyQXJncyAmJiBvdnJyQXJncy5yZXBsYWNlKSk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICB0aGlzLnNldERhdGEoW10sIFtdKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnF1ZXJ5RmFsbGJhY2tGdW5jdGlvbikpIHtcbiAgICAgICAgICAgIHRoaXMucXVlcnlGYWxsYmFja0Z1bmN0aW9uKGVycik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub0Vycm9yRGlhbG9nTWFuYWdlci5vcGVuRXJyb3JEaWFsb2coZXJyKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZWxvYWREYXRhKCk6IHZvaWQge1xuICAgIHRoaXMucXVlcnlEYXRhKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVsb2FkcyB0aGUgY29tcG9uZW50IGRhdGEgYW5kIHJlc3RhcnRzIHRoZSBwYWdpbmF0aW9uLlxuICAgKi9cbiAgcmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0aW5nIHRoZSBnaXZlbiByZWNvcmQga2V5c1xuICAgKiBAcGFyYW0gaXRlbSByZWNvcmQgb2JqZWN0XG4gICAqIEByZXR1cm5zIG9iamVjdCBjb250YWluaW5nIGl0ZW0gb2JqZWN0IHByb3BlcnRpZXMgY29udGFpbmVkIGluIGtleXNBcnJheVxuICAgKi9cbiAgZXh0cmFjdEtleXNGcm9tUmVjb3JkKGl0ZW06IGFueSk6IG9iamVjdCB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgaWYgKFV0aWwuaXNPYmplY3QoaXRlbSkpIHtcbiAgICAgIHRoaXMua2V5c0FycmF5LmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKGl0ZW1ba2V5XSkpIHtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IGl0ZW1ba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXRBdHRyaWJ1dGVzVmFsdWVzVG9RdWVyeSgpOiBBcnJheTxzdHJpbmc+IHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNvbEFycmF5O1xuICAgIHRoaXMua2V5c0FycmF5LmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaW5kZXhPZihrZXkpID09PSAtMSkge1xuICAgICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuXG4gIGdldFF1ZXJ5QXJndW1lbnRzKGZpbHRlcjogb2JqZWN0LCBvdnJyQXJnczogT1F1ZXJ5RGF0YUFyZ3MgPSB7fSk6IE9RdWVyeVBhcmFtcyB7XG4gICAgY29uc3QgY29tcEZpbHRlciA9IHRoaXMuZ2V0Q29tcG9uZW50RmlsdGVyKGZpbHRlcik7XG4gICAgY29uc3QgcXVlcnlDb2xzID0gdGhpcy5nZXRBdHRyaWJ1dGVzVmFsdWVzVG9RdWVyeSgpO1xuICAgIGNvbnN0IHNxbFR5cGVzID0gKG92cnJBcmdzICYmIG92cnJBcmdzLmhhc093blByb3BlcnR5KCdzcWx0eXBlcycpKSA/IG92cnJBcmdzLnNxbHR5cGVzIDogdGhpcy5mb3JtID8gdGhpcy5mb3JtLmdldEF0dHJpYnV0ZXNTUUxUeXBlcygpIDoge307XG5cbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgY29uc3QgcXVlcnlSZWNvcmRPZmZzZXQgPSB0aGlzLnN0YXRlLnF1ZXJ5UmVjb3JkT2Zmc2V0ID8gdGhpcy5zdGF0ZS5xdWVyeVJlY29yZE9mZnNldCA6IDA7XG4gICAgICBvdnJyQXJncy5vZmZzZXQgPSBvdnJyQXJncz8uaGFzT3duUHJvcGVydHkoJ29mZnNldCcpID8gb3ZyckFyZ3Mub2Zmc2V0IDogcXVlcnlSZWNvcmRPZmZzZXQ7XG4gICAgICBvdnJyQXJncy5sZW5ndGggPSBvdnJyQXJncz8uaGFzT3duUHJvcGVydHkoJ2xlbmd0aCcpID8gb3ZyckFyZ3MubGVuZ3RoIDogdGhpcy5xdWVyeVJvd3M7XG5cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZmlsdGVyOiBjb21wRmlsdGVyLFxuICAgICAgY29sdW1uczogcXVlcnlDb2xzLFxuICAgICAgZW50aXR5OiB0aGlzLmVudGl0eSxcbiAgICAgIHBhZ2VhYmxlOiB0aGlzLnBhZ2VhYmxlLFxuICAgICAgc3FsVHlwZXM6IHNxbFR5cGVzLFxuICAgICAgb3ZyckFyZ3M6IG92cnJBcmdzLFxuICAgICAgc29ydDogbnVsbFxuICAgIH07XG4gIH1cblxuICB1cGRhdGVQYWdpbmF0aW9uSW5mbyhxdWVyeVJlczogU2VydmljZVJlc3BvbnNlKSB7XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIGlmIChxdWVyeVJlcy5zdGFydFJlY29yZEluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0RW5kSW5kZXggPSBxdWVyeVJlcy5zdGFydFJlY29yZEluZGV4ICsgKHF1ZXJ5UmVzLmRhdGEgPyBxdWVyeVJlcy5kYXRhLmxlbmd0aCA6IDApO1xuICAgICAgICB0aGlzLnN0YXRlLnF1ZXJ5UmVjb3JkT2Zmc2V0ID0gcmVzdWx0RW5kSW5kZXg7XG4gICAgICB9XG4gICAgICBpZiAocXVlcnlSZXMudG90YWxRdWVyeVJlY29yZHNOdW1iZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnN0YXRlLnRvdGFsUXVlcnlSZWNvcmRzTnVtYmVyID0gcXVlcnlSZXMudG90YWxRdWVyeVJlY29yZHNOdW1iZXI7XG4gICAgICB9XG4gICAgICAvKiBwYWdlTnVtYmVyID0gMCBpcyByZWluaXRpYWxpemVkIHdoZW4gaXQgZ2VuZXJhdGVzIGEgc2VhcmNoICAqL1xuICAgICAgY29uc3QgcGFnZU51bWJlciA9IHRoaXMuc3RhdGUucXVlcnlSZWNvcmRPZmZzZXQgPT0gMCA/IDAgOiB0aGlzLmRhdGFTZXJ2aWNlPy5nZXRQYWdpbmF0aW9uQ29udGV4dCgpLnBhZ2VOdW1iZXI7XG4gICAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb25Db250ZXh0KHsgcGFnZU51bWJlcjogcGFnZU51bWJlciwgb2Zmc2V0OiB0aGlzLnN0YXRlLnF1ZXJ5UmVjb3JkT2Zmc2V0LCB0b3RhbFNpemU6IHRoaXMuc3RhdGUudG90YWxRdWVyeVJlY29yZHNOdW1iZXIsIHBhZ2VTaXplOiB0aGlzLnN0YXRlLnF1ZXJ5Um93cyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVQYWdpbmF0aW9uQ29udGV4dCh7IHRvdGFsU2l6ZTogcXVlcnlSZXMuZGF0YS5sZW5ndGggfSk7XG4gICAgfVxuXG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVBhZ2luYXRpb25Db250ZXh0KHBhZ2luYXRpb25Db250ZXh0OiBQYWdpbmF0aW9uQ29udGV4dCkge1xuICAgIGlmICghdGhpcy5wYWdlYWJsZSkge1xuICAgICAgZGVsZXRlIHBhZ2luYXRpb25Db250ZXh0Lm9mZnNldDtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGFTZXJ2aWNlPy5zZXRQYWdpbmF0aW9uQ29udGV4dChwYWdpbmF0aW9uQ29udGV4dCk7XG4gIH1cblxuICBnZXRUb3RhbFJlY29yZHNOdW1iZXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZS50b3RhbFF1ZXJ5UmVjb3Jkc051bWJlcikgPyB0aGlzLnN0YXRlLnRvdGFsUXVlcnlSZWNvcmRzTnVtYmVyIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0Q29udGV4dENvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5leHBhbmRhYmxlQ29udGFpbmVyIHx8IHRoaXMuZm9ybTtcbiAgfVxuXG4gIGdldENvbXBvbmVudEZpbHRlcihleGlzdGluZ0ZpbHRlcjogYW55ID0ge30pOiBhbnkge1xuICAgIGNvbnN0IGZpbHRlclBhcmVudEtleXMgPSB0aGlzLmdldFBhcmVudEtleXNGcm9tQ29udGV4dCh0aGlzLl9wS2V5c0VxdWl2LCB0aGlzLmdldENvbnRleHRDb21wb25lbnQoKSk7XG4gICAgZXhpc3RpbmdGaWx0ZXIgPSB7IC4uLmV4aXN0aW5nRmlsdGVyIHx8IHt9LCAuLi5maWx0ZXJQYXJlbnRLZXlzIH07XG4gICAgcmV0dXJuIGV4aXN0aW5nRmlsdGVyO1xuICB9XG5cbiAgZ2V0U3FsVHlwZXMoKSB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHRoaXMuc3FsVHlwZXMpID8gdGhpcy5zcWxUeXBlcyA6IHt9O1xuICB9XG5cbiAgZ2V0UGFyZW50S2V5c1ZhbHVlcygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0Q29tcG9uZW50KCk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UGFyZW50S2V5c0Zyb21Db250ZXh0KHRoaXMuX3BLZXlzRXF1aXYsIGNvbnRleHQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVN0YXRlU3RvcmFnZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlICYmIHRoaXMuc3RvcmVTdGF0ZSAmJiAhdGhpcy5hbHJlYWR5U3RvcmVkKSB7XG4gICAgICB0aGlzLmFscmVhZHlTdG9yZWQgPSB0cnVlO1xuICAgICAgdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZUNvbXBvbmVudFN0b3JhZ2UodGhpcywgdGhpcy5nZXRSb3V0ZUtleSgpKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RGF0YShkYXRhOiBhbnksIHNxbFR5cGVzPzogYW55LCByZXBsYWNlPzogYm9vbGVhbik6IHZvaWQge1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgcmVnaXN0ZXJMb2NhbFN0b3JhZ2VTZXJ2aWNlUm91dGVDaGFuZ2UoKSB7XG4gICAgaWYgKHRoaXMuc3RvcmVTdGF0ZSkge1xuICAgICAgdGhpcy5vblJvdXRlQ2hhbmdlU3RvcmFnZVN1YnNjcmlwdGlvbiA9IHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5vblJvdXRlQ2hhbmdlLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlU3RvcmFnZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbn1cblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgY2xhc3MgRGVmYXVsdE9TZXJ2aWNlQmFzZUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0T1NlcnZpY2VCYXNlQ29tcG9uZW50PERlZmF1bHRTZXJ2aWNlQ29tcG9uZW50U3RhdGVTZXJ2aWNlPiB7XG5cbn1cblxuLyogVGhpcyBjbGFzcyBpcyBiZWluZyBkZWZpbmVkIHRvIG1hbnRhaW4gdGhlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggcHJldmlvdXMgdmVyc2lvbnMsIHVzZSBEZWZhdWx0T1NlcnZpY2VCYXNlQ29tcG9uZW50Ki9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIE9TZXJ2aWNlQmFzZUNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0T1NlcnZpY2VCYXNlQ29tcG9uZW50PERlZmF1bHRTZXJ2aWNlQ29tcG9uZW50U3RhdGVTZXJ2aWNlPiB7XG5cbn1cbiJdfQ==