bways-report 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/README.md +46 -0
  2. package/esm2022/lib/core/models/report-grid.model.mjs +1 -1
  3. package/esm2022/lib/core/services/report-overlay.service.mjs +79 -0
  4. package/esm2022/lib/core/utils/report-parameter.util.mjs +68 -15
  5. package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +10 -2
  6. package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +10 -1
  7. package/esm2022/lib/data-access/adapters/http-datasource.adapter.mjs +10 -1
  8. package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +10 -1
  9. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +6 -4
  10. package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +11 -10
  11. package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +39 -6
  12. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +3 -3
  13. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +5 -3
  14. package/esm2022/lib/features/designer/designer.component.mjs +11 -6
  15. package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +2 -2
  16. package/esm2022/lib/features/runtime/report-execution.service.mjs +35 -4
  17. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +15 -20
  18. package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +21 -10
  19. package/esm2022/lib/primitives/components/radio/rpt-radio.component.mjs +15 -5
  20. package/esm2022/lib/primitives/components/searchable-select/rpt-searchable-select.component.mjs +6 -6
  21. package/fesm2022/bways-report.mjs +324 -88
  22. package/fesm2022/bways-report.mjs.map +1 -1
  23. package/lib/core/models/report-grid.model.d.ts +1 -1
  24. package/lib/core/services/report-overlay.service.d.ts +14 -0
  25. package/lib/core/utils/report-parameter.util.d.ts +13 -1
  26. package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +5 -0
  27. package/lib/features/designer/designer.component.d.ts +1 -0
  28. package/lib/features/runtime/report-grid-bridge.component.d.ts +2 -2
  29. package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +1 -2
  30. package/lib/primitives/components/searchable-select/rpt-searchable-select.component.d.ts +0 -1
  31. package/package.json +8 -5
  32. package/styles/theme.css +184 -0
  33. package/third-party-notices/angular-cdk-LICENSE.txt +21 -0
@@ -56,7 +56,7 @@ export class DynamicRendererComponent {
56
56
  inputs['config'] = comp;
57
57
  }
58
58
  if (comp.key && comp.type !== 'button' && comp.type !== 'kpi-card' && comp.type !== 'chart') {
59
- inputs['control'] = this.form().get(comp.key);
59
+ inputs['control'] = this.form().controls[comp.key];
60
60
  }
61
61
  if (comp.type === 'dropdown' || comp.type === 'radio') {
62
62
  inputs['parentForm'] = this.form();
@@ -463,4 +463,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
463
463
  </div>
464
464
  `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;box-sizing:border-box;font-family:var(--rpt-font-family, inherit)}.rpt-renderer-root{width:100%;box-sizing:border-box}.rpt-header{margin-bottom:20px}.rpt-title{font-size:var(--rpt-font-size-xl, 1.5rem);font-weight:700;color:var(--rpt-color-text, #0f172a);margin:0 0 6px;letter-spacing:-.02em}.rpt-description{font-size:var(--rpt-font-size-base, .875rem);color:var(--rpt-color-text-muted, #64748b);margin:0}.rpt-form{margin-bottom:24px}.rpt-layout-grid{display:grid;width:100%;align-items:start}.rpt-cell{box-sizing:border-box;min-width:0;display:flex;flex-direction:column}.rpt-cell>*{width:100%;display:flex;flex-direction:column;min-height:0;box-sizing:border-box}.rpt-unregistered-placeholder{padding:8px 12px;font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-danger, #ef4444);background-color:var(--rpt-color-danger-bg, #fef2f2);border:1px dashed var(--rpt-color-danger, #ef4444);border-radius:var(--rpt-border-radius, 6px)}.rpt-grid-section{width:100%;margin-top:16px}.rpt-grid-initial-state{padding:12px 0}.grid-initial-card{border:2px dashed var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-xl, 12px);background:var(--rpt-color-surface, #ffffff);padding:48px 24px;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center;box-shadow:var(--rpt-box-shadow-xs, 0 1px 2px rgba(0, 0, 0, .04))}.grid-initial-icon{width:52px;height:52px;border-radius:12px;background:#eff6ff;color:var(--rpt-color-primary, #2563eb);display:flex;align-items:center;justify-content:center;margin-bottom:14px}.grid-initial-title{font-size:var(--rpt-font-size-md, 1rem);font-weight:700;color:var(--rpt-color-text, #0f172a);margin:0 0 6px}.grid-initial-desc{font-size:var(--rpt-font-size-sm, .8125rem);color:var(--rpt-color-text-muted, #64748b);max-width:460px;line-height:1.5;margin:0 0 20px}.btn-grid-initial-exec{padding:8px 20px;background:var(--rpt-color-primary, #2563eb);color:#fff;border:none;border-radius:var(--rpt-border-radius, 6px);font-size:var(--rpt-font-size-sm, .75rem);font-weight:600;cursor:pointer;box-shadow:0 1px 3px #2563eb33;transition:all var(--rpt-transition-speed, .15s) ease}.btn-grid-initial-exec:hover{background:var(--rpt-color-primary-hover, #1d4ed8);transform:translateY(-1px)}\n"] }]
465
465
  }] });
466
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9ydW50aW1lL2R5bmFtaWMtcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBS3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN0Qix5QkFBeUIsRUFDMUIsTUFBTSwwQ0FBMEMsQ0FBQzs7OztBQStNbEQsTUFBTSxPQUFPLHdCQUF3QjtJQUNsQixRQUFRLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDckMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3pDLE1B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WUFDM0IsTUFBTTtZQUNOLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztZQUNkLFVBQVUsRUFBRSxnQkFBZ0I7U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQixDQUFDLElBQVc7UUFDL0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO3dHQXRWVSx3QkFBd0I7NEZBQXhCLHdCQUF3QixzNEJBek16Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtRlQsK3pFQXBGUyxZQUFZLHNTQUFFLG1CQUFtQixxYkFBRSx5QkFBeUI7OzRGQTBNM0Qsd0JBQXdCO2tCQTdNcEMsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixDQUFDLFlBQzdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1GVCxtQkFvSGdCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBUeXBlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1kZWZpbml0aW9uLm1vZGVsJztcbmltcG9ydCB7IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtY29tcG9uZW50Lm1vZGVsJztcbmltcG9ydCB7IENvbXBvbmVudEFjdGlvbkRlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9jb21wb25lbnQtZXZlbnQubW9kZWwnO1xuaW1wb3J0IHsgR3JpZENvbHVtbkRlZmluaXRpb24sIEdyaWRSb3dDbGlja0FjdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1ncmlkLm1vZGVsJztcbmltcG9ydCB7IENvbXBvbmVudFJlZ2lzdHJ5IH0gZnJvbSAnLi4vLi4vY29yZS9yZWdpc3RyeS9jb21wb25lbnQtcmVnaXN0cnknO1xuaW1wb3J0IHsgRHluYW1pY0Zvcm1CdWlsZGVyIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9keW5hbWljLWZvcm0tYnVpbGRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi9leHBvcnQvc2VydmljZXMvcmVwb3J0LWV4cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IGdldEZpZWxkQ2FzZUluc2Vuc2l0aXZlIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9kYXRhLW5vcm1hbGl6YXRpb24udXRpbCc7XG5pbXBvcnQgeyBSZXBvcnRHcmlkQnJpZGdlQ29tcG9uZW50IH0gZnJvbSAnLi9yZXBvcnQtZ3JpZC1icmlkZ2UuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZUdyaWRDb2x1bW4sXG4gIGNhbGN1bGF0ZUdyaWRSb3csXG4gIHJlc29sdmVDb21wb25lbnRIZWlnaHQsXG4gIHJlc29sdmVDb21wb25lbnRNaW5IZWlnaHRcbn0gZnJvbSAnLi4vZGVzaWduZXIvdXRpbGl0aWVzL2NhbnZhcy1sYXlvdXQudXRpbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JwdC1keW5hbWljLXJlbmRlcmVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgUmVwb3J0R3JpZEJyaWRnZUNvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJycHQtcmVuZGVyZXItcm9vdFwiXG4gICAgICBbc3R5bGUuZGlyZWN0aW9uXT1cImRlZmluaXRpb24oKS5sYXlvdXQuZGlyZWN0aW9uIHx8ICdsdHInXCJcbiAgICAgIFtzdHlsZS5wYWRkaW5nLnB4XT1cImRlZmluaXRpb24oKS5sYXlvdXQucGFkZGluZyA/PyAyNFwiXG4gICAgPlxuICAgICAgPCEtLSBSZXBvcnQgSGVhZGVyIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInJwdC1oZWFkZXJcIj5cbiAgICAgICAgPGgyIGNsYXNzPVwicnB0LXRpdGxlXCI+e3sgZGVmaW5pdGlvbigpLm5hbWUgfX08L2gyPlxuICAgICAgICBAaWYgKGRlZmluaXRpb24oKS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgIDxwIGNsYXNzPVwicnB0LWRlc2NyaXB0aW9uXCI+e3sgZGVmaW5pdGlvbigpLmRlc2NyaXB0aW9uIH19PC9wPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBDb250cm9scyBGb3JtIC8gUGFyYW1ldGVyIEZpbHRlciBCYXIgLS0+XG4gICAgICBAaWYgKGRlZmluaXRpb24oKS5jb21wb25lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtKClcIiAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiIGNsYXNzPVwicnB0LWZvcm1cIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInJwdC1sYXlvdXQtZ3JpZFwiXG4gICAgICAgICAgICBbc3R5bGUuZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXT1cImdyaWRDb2x1bW5zVGVtcGxhdGUoKVwiXG4gICAgICAgICAgICBbc3R5bGUuZ2FwLnB4XT1cImRlZmluaXRpb24oKS5sYXlvdXQuZ2FwID8/IDE2XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAZm9yIChjb21wIG9mIHNvcnRlZENvbXBvbmVudHMoKTsgdHJhY2sgY29tcC5pZCkge1xuICAgICAgICAgICAgICBAaWYgKGlzQ29tcG9uZW50VmlzaWJsZShjb21wKSkge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LWNlbGxcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmdyaWQtY29sdW1uXT1cImdldEdyaWRDb2x1bW4oY29tcClcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmdyaWQtcm93XT1cImdldEdyaWRSb3coY29tcClcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbXAubGF5b3V0Py53aWR0aCB8fCAnYXV0bydcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJnZXRDb21wb25lbnRIZWlnaHQoY29tcClcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHRdPVwiZ2V0Q29tcG9uZW50TWluSGVpZ2h0KGNvbXApXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cImNvbXAubGF5b3V0Py5tYXhIZWlnaHQgfHwgJ25vbmUnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBAaWYgKHJlc29sdmVDb21wb25lbnQoY29tcC50eXBlKTsgYXMgY29tcENsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDb21wb25lbnRPdXRsZXRdPVwiY29tcENsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDb21wb25lbnRPdXRsZXRJbnB1dHNdPVwiZ2V0Q29tcG9uZW50SW5wdXRzKGNvbXApXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXVucmVnaXN0ZXJlZC1wbGFjZWhvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIFVua25vd24gY29tcG9uZW50OiA8Y29kZT57eyBjb21wLnR5cGUgfX08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIH1cblxuICAgICAgPCEtLSBSZXN1bHQgR3JpZCBTZWN0aW9uIC0tPlxuICAgICAgQGlmIChkZWZpbml0aW9uKCkuZ3JpZCkge1xuICAgICAgICBAaWYgKHJlc3VsdERhdGEoKSAhPT0gbnVsbCAmJiByZXN1bHREYXRhKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtZ3JpZC1zZWN0aW9uXCI+XG4gICAgICAgICAgICA8cnB0LWdyaWQtYnJpZGdlXG4gICAgICAgICAgICAgIFtncmlkRGVmaW5pdGlvbl09XCJkZWZpbml0aW9uKCkuZ3JpZCFcIlxuICAgICAgICAgICAgICBbZGF0YV09XCJyZXN1bHREYXRhKCkhXCJcbiAgICAgICAgICAgICAgKGdyaWRTdGF0ZUNoYW5nZSk9XCJncmlkU3RhdGVDaGFuZ2VkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChjb2x1bW5EZWZzQ2hhbmdlKT1cImNvbHVtbkRlZnNDaGFuZ2VkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChyb3dDbGljayk9XCJvbkdyaWRSb3dDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkdyaWRTZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWdyaWQtc2VjdGlvbiBycHQtZ3JpZC1pbml0aWFsLXN0YXRlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1pbml0aWFsLWNhcmRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtaW5pdGlhbC1pY29uXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI4XCIgaGVpZ2h0PVwiMjhcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyAzaDE4djE4SDN6TTMgOWgxOE0zIDE1aDE4TTkgM3YxOE0xNSAzdjE4XCIvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGg0IGNsYXNzPVwiZ3JpZC1pbml0aWFsLXRpdGxlXCI+UmVwb3J0IFJlYWR5IHRvIEV4ZWN1dGU8L2g0PlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImdyaWQtaW5pdGlhbC1kZXNjXCI+XG4gICAgICAgICAgICAgICAgQ29uZmlndXJlIGZpbHRlciBwYXJhbWV0ZXJzIGFib3ZlIGFuZCBleGVjdXRlIHRoZSByZXBvcnQgdG8gcmV0cmlldmUgbGl2ZSByZWNvcmRzIGludG8gdGhlIGdyaWQgKHt7IGRlZmluaXRpb24oKS5ncmlkPy5jb2x1bW5zPy5sZW5ndGggPz8gMCB9fSBjb2x1bW5zIGNvbmZpZ3VyZWQpLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWdyaWQtaW5pdGlhbC1leGVjXCIgKGNsaWNrKT1cIm9uU3VibWl0KClcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5FeGVjdXRlIFJlcG9ydDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KTtcbiAgICB9XG4gICAgLnJwdC1yZW5kZXJlci1yb290IHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLnJwdC1oZWFkZXIge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICB9XG4gICAgLnJwdC10aXRsZSB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUteGwsIDEuNXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIG1hcmdpbjogMCAwIDZweCAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgfVxuICAgIC5ycHQtZGVzY3JpcHRpb24ge1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLWJhc2UsIDAuODc1cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuICAgIC5ycHQtZm9ybSB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICAgIH1cbiAgICAucnB0LWxheW91dC1ncmlkIHtcbiAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGFsaWduLWl0ZW1zOiBzdGFydDtcbiAgICB9XG4gICAgLnJwdC1jZWxsIHtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICB9XG4gICAgLnJwdC1jZWxsID4gKiB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5ycHQtdW5yZWdpc3RlcmVkLXBsYWNlaG9sZGVyIHtcbiAgICAgIHBhZGRpbmc6IDhweCAxMnB4O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItZGFuZ2VyLCAjZWY0NDQ0KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1kYW5nZXItYmcsICNmZWYyZjIpO1xuICAgICAgYm9yZGVyOiAxcHggZGFzaGVkIHZhcigtLXJwdC1jb2xvci1kYW5nZXIsICNlZjQ0NDQpO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gICAgfVxuICAgIC5ycHQtZ3JpZC1zZWN0aW9uIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICB9XG4gICAgLnJwdC1ncmlkLWluaXRpYWwtc3RhdGUge1xuICAgICAgcGFkZGluZzogMTJweCAwO1xuICAgIH1cbiAgICAuZ3JpZC1pbml0aWFsLWNhcmQge1xuICAgICAgYm9yZGVyOiAycHggZGFzaGVkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMteGwsIDEycHgpO1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmZmZmZmYpO1xuICAgICAgcGFkZGluZzogNDhweCAyNHB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS1ycHQtYm94LXNoYWRvdy14cywgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNCkpO1xuICAgIH1cbiAgICAuZ3JpZC1pbml0aWFsLWljb24ge1xuICAgICAgd2lkdGg6IDUycHg7XG4gICAgICBoZWlnaHQ6IDUycHg7XG4gICAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgICAgYmFja2dyb3VuZDogI2VmZjZmZjtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTRweDtcbiAgICB9XG4gICAgLmdyaWQtaW5pdGlhbC10aXRsZSB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtbWQsIDFyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICBtYXJnaW46IDAgMCA2cHggMDtcbiAgICB9XG4gICAgLmdyaWQtaW5pdGlhbC1kZXNjIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC44MTI1cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBtYXgtd2lkdGg6IDQ2MHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICAgIG1hcmdpbjogMCAwIDIwcHggMDtcbiAgICB9XG4gICAgLmJ0bi1ncmlkLWluaXRpYWwtZXhlYyB7XG4gICAgICBwYWRkaW5nOiA4cHggMjBweDtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDM3LCA5OSwgMjM1LCAwLjIpO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZTtcbiAgICB9XG4gICAgLmJ0bi1ncmlkLWluaXRpYWwtZXhlYzpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeS1ob3ZlciwgIzFkNGVkOCk7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG4gICAgfVxuICBgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNSZW5kZXJlckNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnaXN0cnkgPSBpbmplY3QoQ29tcG9uZW50UmVnaXN0cnkpO1xuICBwcml2YXRlIHJlYWRvbmx5IGZvcm1CdWlsZGVyID0gaW5qZWN0KER5bmFtaWNGb3JtQnVpbGRlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlciwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBleHBvcnRTZXJ2aWNlID0gaW5qZWN0KFJlcG9ydEV4cG9ydFNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHJlYWRvbmx5IGRlZmluaXRpb24gPSBpbnB1dC5yZXF1aXJlZDxSZXBvcnREZWZpbml0aW9uPigpO1xuICByZWFkb25seSBpbml0aWFsVmFsdWVzID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHt9KTtcbiAgcmVhZG9ubHkgcmVzdWx0RGF0YSA9IGlucHV0PHVua25vd25bXSB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IGV4ZWN1dGVSZXF1ZXN0ZWQgPSBvdXRwdXQ8e1xuICAgIGRlZmluaXRpb246IFJlcG9ydERlZmluaXRpb247XG4gICAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH0+KCk7XG5cbiAgcmVhZG9ubHkgcmVzZXRSZXF1ZXN0ZWQgPSBvdXRwdXQ8e1xuICAgIGRlZmluaXRpb246IFJlcG9ydERlZmluaXRpb247XG4gIH0+KCk7XG5cbiAgcmVhZG9ubHkgZXhwb3J0UmVxdWVzdGVkID0gb3V0cHV0PHtcbiAgICBmb3JtYXQ6IHN0cmluZztcbiAgICBmaWxlTmFtZT86IHN0cmluZztcbiAgICBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBkYXRhOiB1bmtub3duW10gfCBudWxsO1xuICB9PigpO1xuXG4gIHJlYWRvbmx5IHByaW50UmVxdWVzdGVkID0gb3V0cHV0PHtcbiAgICBycHRGaWxlTmFtZT86IHN0cmluZztcbiAgICBleHBvcnRUeXBlPzogc3RyaW5nO1xuICAgIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9PigpO1xuXG4gIHJlYWRvbmx5IGN1c3RvbUFjdGlvblRyaWdnZXJlZCA9IG91dHB1dDx7XG4gICAgYWN0aW9uOiBDb21wb25lbnRBY3Rpb25EZWZpbml0aW9uO1xuICAgIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbjtcbiAgICBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfT4oKTtcblxuICByZWFkb25seSBncmlkU3RhdGVDaGFuZ2VkID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgY29sdW1uRGVmc0NoYW5nZWQgPSBvdXRwdXQ8YW55PigpO1xuICByZWFkb25seSBzZWxlY3Rpb25DaGFuZ2UgPSBvdXRwdXQ8YW55W10+KCk7XG4gIHJlYWRvbmx5IHNlbGVjdGlvbkNoYW5nZWQgPSBvdXRwdXQ8YW55W10+KCk7XG4gIHJlYWRvbmx5IHJvd0FjdGlvblRyaWdnZXJlZCA9IG91dHB1dDx7XG4gICAgYWN0aW9uOiBHcmlkUm93Q2xpY2tBY3Rpb247XG4gICAgcm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfT4oKTtcblxuICByZWFkb25seSBmb3JtID0gY29tcHV0ZWQ8Rm9ybUdyb3VwPigoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIudG9Gb3JtR3JvdXAoXG4gICAgICB0aGlzLmRlZmluaXRpb24oKS5jb21wb25lbnRzLFxuICAgICAgdGhpcy5pbml0aWFsVmFsdWVzKClcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzb3J0ZWRDb21wb25lbnRzID0gY29tcHV0ZWQ8UmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbltdPigoKSA9PiB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmRlZmluaXRpb24oKS5jb21wb25lbnRzXS5zb3J0KFxuICAgICAgKGEsIGIpID0+IChhLm9yZGVyID8/IDApIC0gKGIub3JkZXIgPz8gMClcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSB0b3RhbEdyaWRDb2x1bW5zID0gY29tcHV0ZWQ8bnVtYmVyPigoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZGVmaW5pdGlvbigpLmxheW91dC5jb2x1bW5zIHx8IDEyO1xuICB9KTtcblxuICByZWFkb25seSBncmlkQ29sdW1uc1RlbXBsYXRlID0gY29tcHV0ZWQ8c3RyaW5nPigoKSA9PiB7XG4gICAgcmV0dXJuIGByZXBlYXQoJHt0aGlzLnRvdGFsR3JpZENvbHVtbnMoKX0sIG1pbm1heCgwLCAxZnIpKWA7XG4gIH0pO1xuXG4gIHJlc29sdmVDb21wb25lbnQodHlwZTogc3RyaW5nKTogVHlwZTx1bmtub3duPiB8IG51bGwge1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLnJlZ2lzdHJ5LnJlc29sdmUodHlwZSk7XG4gICAgcmV0dXJuIChtZXRhPy5jb21wb25lbnQgYXMgVHlwZTx1bmtub3duPikgPz8gbnVsbDtcbiAgfVxuXG4gIGdldENvbXBvbmVudElucHV0cyhjb21wOiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IGlucHV0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGlmIChjb21wLnR5cGUgPT09ICdrcGktY2FyZCcgfHwgY29tcC50eXBlID09PSAnY2hhcnQnKSB7XG4gICAgICBpbnB1dHNbJ2RlZmluaXRpb24nXSA9IGNvbXA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0c1snY29uZmlnJ10gPSBjb21wO1xuICAgIH1cblxuICAgIGlmIChjb21wLmtleSAmJiBjb21wLnR5cGUgIT09ICdidXR0b24nICYmIGNvbXAudHlwZSAhPT0gJ2twaS1jYXJkJyAmJiBjb21wLnR5cGUgIT09ICdjaGFydCcpIHtcbiAgICAgIGlucHV0c1snY29udHJvbCddID0gdGhpcy5mb3JtKCkuZ2V0KGNvbXAua2V5KTtcbiAgICB9XG5cbiAgICBpZiAoY29tcC50eXBlID09PSAnZHJvcGRvd24nIHx8IGNvbXAudHlwZSA9PT0gJ3JhZGlvJykge1xuICAgICAgaW5wdXRzWydwYXJlbnRGb3JtJ10gPSB0aGlzLmZvcm0oKTtcbiAgICB9XG5cbiAgICBpZiAoY29tcC50eXBlID09PSAnYnV0dG9uJykge1xuICAgICAgaW5wdXRzWydvbkFjdGlvbiddID0gKGFjdGlvbjogQ29tcG9uZW50QWN0aW9uRGVmaW5pdGlvbikgPT4gdGhpcy5oYW5kbGVBY3Rpb24oYWN0aW9uLCBjb21wKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5wdXRzO1xuICB9XG5cblxuICBnZXRHcmlkQ29sdW1uKGNvbXA6IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiBjYWxjdWxhdGVHcmlkQ29sdW1uKGNvbXAsIHRoaXMudG90YWxHcmlkQ29sdW1ucygpKTtcbiAgfVxuXG4gIGdldEdyaWRSb3coY29tcDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNhbGN1bGF0ZUdyaWRSb3coY29tcCk7XG4gIH1cblxuICBnZXRDb21wb25lbnRIZWlnaHQoY29tcDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbik6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNGb3JtSW5wdXQoY29tcC50eXBlKSkge1xuICAgICAgY29uc3QgaCA9IGNvbXAubGF5b3V0Py5oZWlnaHQ7XG4gICAgICBpZiAoaCA9PT0gJzg1cHgnIHx8ICFoIHx8IGggPT09ICdhdXRvJykgcmV0dXJuICdhdXRvJztcbiAgICB9XG4gICAgcmV0dXJuIHJlc29sdmVDb21wb25lbnRIZWlnaHQoY29tcCk7XG4gIH1cblxuICBnZXRDb21wb25lbnRNaW5IZWlnaHQoY29tcDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbik6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXNGb3JtSW5wdXQoY29tcC50eXBlKSkge1xuICAgICAgY29uc3QgbWluSCA9IGNvbXAubGF5b3V0Py5taW5IZWlnaHQ7XG4gICAgICBpZiAobWluSCA9PT0gJzg1cHgnIHx8ICFtaW5IIHx8IG1pbkggPT09ICdhdXRvJykgcmV0dXJuICdhdXRvJztcbiAgICB9XG4gICAgcmV0dXJuIHJlc29sdmVDb21wb25lbnRNaW5IZWlnaHQoY29tcCk7XG4gIH1cblxuICBpc0Zvcm1JbnB1dCh0eXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdHlwZSA9PT0gJ2lucHV0JyB8fFxuICAgICAgdHlwZSA9PT0gJ2Ryb3Bkb3duJyB8fFxuICAgICAgdHlwZSA9PT0gJ2RhdGUnIHx8XG4gICAgICB0eXBlID09PSAnZGF0ZS1yYW5nZScgfHxcbiAgICAgIHR5cGUgPT09ICdudW1iZXInIHx8XG4gICAgICB0eXBlID09PSAnY2hlY2tib3gnIHx8XG4gICAgICB0eXBlID09PSAncmFkaW8nIHx8XG4gICAgICB0eXBlID09PSAnYnV0dG9uJ1xuICAgICk7XG4gIH1cblxuICBpc0NvbXBvbmVudFZpc2libGUoY29tcDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZpcyA9IGNvbXAudmlzaWJpbGl0eTtcbiAgICBpZiAoIXZpcykgcmV0dXJuIHRydWU7XG4gICAgY29uc3QgY3RybCA9IHRoaXMuZm9ybSgpLmdldCh2aXMuZGVwZW5kc09uKTtcbiAgICBjb25zdCB2YWwgPSBjdHJsID8gY3RybC52YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICBzd2l0Y2ggKHZpcy5vcGVyYXRvcikge1xuICAgICAgY2FzZSAnZXF1YWxzJzpcbiAgICAgICAgcmV0dXJuIHZhbCA9PT0gdmlzLnZhbHVlO1xuICAgICAgY2FzZSAnbm90RXF1YWxzJzpcbiAgICAgICAgcmV0dXJuIHZhbCAhPT0gdmlzLnZhbHVlO1xuICAgICAgY2FzZSAnY29udGFpbnMnOlxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgdmFsLmluY2x1ZGVzKFN0cmluZyh2aXMudmFsdWUpKTtcbiAgICAgIGNhc2UgJ2dyZWF0ZXJUaGFuJzpcbiAgICAgICAgcmV0dXJuIE51bWJlcih2YWwpID4gTnVtYmVyKHZpcy52YWx1ZSk7XG4gICAgICBjYXNlICdsZXNzVGhhbic6XG4gICAgICAgIHJldHVybiBOdW1iZXIodmFsKSA8IE51bWJlcih2aXMudmFsdWUpO1xuICAgICAgY2FzZSAnaXNOb3RFbXB0eSc6XG4gICAgICAgIHJldHVybiB2YWwgIT09IG51bGwgJiYgdmFsICE9PSB1bmRlZmluZWQgJiYgdmFsICE9PSAnJztcbiAgICAgIGNhc2UgJ2lzRW1wdHknOlxuICAgICAgICByZXR1cm4gdmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkIHx8IHZhbCA9PT0gJyc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBvblN1Ym1pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBmID0gdGhpcy5mb3JtKCk7XG4gICAgaWYgKGYuaW52YWxpZCkge1xuICAgICAgZi5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHRoaXMuZm9ybUJ1aWxkZXIuZXh0cmFjdFZhbHVlcyhmKTtcbiAgICB0aGlzLmV4ZWN1dGVSZXF1ZXN0ZWQuZW1pdCh7XG4gICAgICBkZWZpbml0aW9uOiB0aGlzLmRlZmluaXRpb24oKSxcbiAgICAgIHBhcmFtZXRlcnMsXG4gICAgfSk7XG4gIH1cblxuICBoYW5kbGVBY3Rpb24oYWN0aW9uOiBDb21wb25lbnRBY3Rpb25EZWZpbml0aW9uLCBjb21wPzogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbik6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB0aGlzLmZvcm1CdWlsZGVyLmV4dHJhY3RWYWx1ZXModGhpcy5mb3JtKCkpO1xuXG4gICAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuICAgICAgY2FzZSAnZXhlY3V0ZS1yZXBvcnQnOlxuICAgICAgY2FzZSAnc3VibWl0JzpcbiAgICAgICAgdGhpcy5vblN1Ym1pdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncmVzZXQnOlxuICAgICAgICB0aGlzLmZvcm0oKS5yZXNldCh0aGlzLmluaXRpYWxWYWx1ZXMoKSk7XG4gICAgICAgIHRoaXMucmVzZXRSZXF1ZXN0ZWQuZW1pdCh7IGRlZmluaXRpb246IHRoaXMuZGVmaW5pdGlvbigpIH0pO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnZXhwb3J0Jzoge1xuICAgICAgICBjb25zdCBmb3JtYXQgPSAoYWN0aW9uLnBhcmFtcz8uWydmb3JtYXQnXSBhcyBzdHJpbmcpIHx8ICdleGNlbCc7XG4gICAgICAgIGNvbnN0IGRlZmF1bHROYW1lID0gdGhpcy5kZWZpbml0aW9uKCkubmFtZVxuICAgICAgICAgID8gdGhpcy5kZWZpbml0aW9uKCkubmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05Xy1dL2dpLCAnXycpXG4gICAgICAgICAgOiAncmVwb3J0JztcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSAoYWN0aW9uLnBhcmFtcz8uWydmaWxlTmFtZSddIGFzIHN0cmluZykgfHwgYCR7ZGVmYXVsdE5hbWV9XyR7RGF0ZS5ub3coKX1gO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5yZXN1bHREYXRhKCk7XG5cbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwICYmIHRoaXMuZXhwb3J0U2VydmljZSkge1xuICAgICAgICAgIGNvbnN0IGZtdCA9IGZvcm1hdC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGlmIChmbXQgPT09ICdjc3YnKSB7XG4gICAgICAgICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0Q3N2KGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSwge1xuICAgICAgICAgICAgICBmaWxlTmFtZTogYCR7ZmlsZU5hbWV9LmNzdmAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZtdCA9PT0gJ2V4Y2VsJyB8fCBmbXQgPT09ICd4bHN4JyB8fCBmbXQgPT09ICd4bHMnKSB7XG4gICAgICAgICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0RXhjZWwoZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLCB7XG4gICAgICAgICAgICAgIGZpbGVOYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChmbXQgPT09ICdodG1sJykge1xuICAgICAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydEh0bWwoZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLCB7XG4gICAgICAgICAgICAgIGZpbGVOYW1lOiBgJHtmaWxlTmFtZX0uaHRtbGAsXG4gICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmRlZmluaXRpb24oKT8ubmFtZSB8fCAnUmVwb3J0IEV4cG9ydCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZtdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0SnNvbihkYXRhLCB7XG4gICAgICAgICAgICAgIGZpbGVOYW1lOiBgJHtmaWxlTmFtZX0uanNvbmAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV4cG9ydFJlcXVlc3RlZC5lbWl0KHtcbiAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgZmlsZU5hbWUsXG4gICAgICAgICAgcGFyYW1ldGVycyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3ByaW50LXJlcG9ydCc6IHtcbiAgICAgICAgY29uc3QgcnB0RmlsZU5hbWUgPSAoYWN0aW9uLnBhcmFtcz8uWydycHRGaWxlTmFtZSddIGFzIHN0cmluZykgfHwgJyc7XG4gICAgICAgIGNvbnN0IGV4cG9ydFR5cGUgPSAoYWN0aW9uLnBhcmFtcz8uWydleHBvcnRUeXBlJ10gYXMgc3RyaW5nKSB8fCAncGRmJztcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMucmVzdWx0RGF0YSgpO1xuXG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCAmJiB0aGlzLmV4cG9ydFNlcnZpY2UgJiYgIXJwdEZpbGVOYW1lKSB7XG4gICAgICAgICAgdGhpcy5leHBvcnRTZXJ2aWNlLnByaW50UmVwb3J0KGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSwge1xuICAgICAgICAgICAgdGl0bGU6IHRoaXMuZGVmaW5pdGlvbigpPy5uYW1lIHx8ICdSZXBvcnQgUHJpbnQgUHJldmlldycsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByaW50UmVxdWVzdGVkLmVtaXQoe1xuICAgICAgICAgIHJwdEZpbGVOYW1lLFxuICAgICAgICAgIGV4cG9ydFR5cGUsXG4gICAgICAgICAgcGFyYW1ldGVycyxcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlICduYXZpZ2F0ZSc6IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0VXJsID0gKGFjdGlvbi5wYXJhbXM/LlsndGFyZ2V0VXJsJ10gYXMgc3RyaW5nKSB8fCAnJztcbiAgICAgICAgY29uc3Qgb3Blbk5ld1RhYiA9IGFjdGlvbi5wYXJhbXM/Llsnb3Blbk5ld1RhYiddID09PSB0cnVlO1xuXG4gICAgICAgIGlmICh0YXJnZXRVcmwpIHtcbiAgICAgICAgICBpZiAob3Blbk5ld1RhYiB8fCB0YXJnZXRVcmwuc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IHRhcmdldFVybC5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XG4gICAgICAgICAgICB3aW5kb3cub3Blbih0YXJnZXRVcmwsIG9wZW5OZXdUYWIgPyAnX2JsYW5rJyA6ICdfc2VsZicpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5yb3V0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0YXJnZXRVcmxdLCB7IHF1ZXJ5UGFyYW1zOiBwYXJhbWV0ZXJzIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHRhcmdldFVybDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2N1c3RvbS1ldmVudCc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoY29tcCkge1xuICAgICAgICAgIHRoaXMuY3VzdG9tQWN0aW9uVHJpZ2dlcmVkLmVtaXQoe1xuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgY29tcG9uZW50OiBjb21wLFxuICAgICAgICAgICAgcGFyYW1ldGVycyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvbkdyaWRSb3dDbGljayhldmVudDoge1xuICAgIHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29sdW1uPzogR3JpZENvbHVtbkRlZmluaXRpb247XG4gICAgZXZlbnQ/OiBNb3VzZUV2ZW50O1xuICB9KTogdm9pZCB7XG4gICAgY29uc3QgZ3JpZCA9IHRoaXMuZGVmaW5pdGlvbigpLmdyaWQ7XG4gICAgaWYgKCFncmlkKSByZXR1cm47XG5cbiAgICBjb25zdCBhY3Rpb24gPSBldmVudC5jb2x1bW4/LmFjdGlvbiA/PyBncmlkLnJvd0NsaWNrQWN0aW9uID8/IGdyaWQub3B0aW9ucz8ucm93Q2xpY2tBY3Rpb247XG4gICAgaWYgKCFhY3Rpb24pIHJldHVybjtcblxuICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSB0aGlzLmZvcm1CdWlsZGVyLmV4dHJhY3RWYWx1ZXModGhpcy5mb3JtKCkpO1xuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnNlc3Npb25TZXJ2aWNlPy5zZXNzaW9uQ29udGV4dCgpID8/IHt9O1xuICAgIGNvbnN0IG1hcHBlZFBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgICBpZiAoYWN0aW9uLnBhcmFtZXRlck1hcHBpbmcgJiYgT2JqZWN0LmtleXMoYWN0aW9uLnBhcmFtZXRlck1hcHBpbmcpLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgW3RhcmdldEtleSwgZXhwcl0gb2YgT2JqZWN0LmVudHJpZXMoYWN0aW9uLnBhcmFtZXRlck1hcHBpbmcpKSB7XG4gICAgICAgIGxldCB2YWw6IHVua25vd24gPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChleHByLnN0YXJ0c1dpdGgoJ3Jvdy4nKSkge1xuICAgICAgICAgIGNvbnN0IHJvd0ZpZWxkID0gZXhwci5zbGljZSg0KTtcbiAgICAgICAgICB2YWwgPSBnZXRGaWVsZENhc2VJbnNlbnNpdGl2ZShldmVudC5yb3csIHJvd0ZpZWxkKTtcbiAgICAgICAgfSBlbHNlIGlmIChleHByLnN0YXJ0c1dpdGgoJ2Zvcm0uJykgfHwgZXhwci5zdGFydHNXaXRoKCdmb3JtVmFsdWVzLicpKSB7XG4gICAgICAgICAgY29uc3QgZm9ybUZpZWxkID0gZXhwci5yZXBsYWNlKC9eZm9ybVxcLnxeZm9ybVZhbHVlc1xcLi8sICcnKTtcbiAgICAgICAgICB2YWwgPSBnZXRGaWVsZENhc2VJbnNlbnNpdGl2ZShmb3JtVmFsdWVzLCBmb3JtRmllbGQpO1xuICAgICAgICB9IGVsc2UgaWYgKGV4cHIuc3RhcnRzV2l0aCgnc2Vzc2lvbi4nKSkge1xuICAgICAgICAgIGNvbnN0IHNlc3Npb25GaWVsZCA9IGV4cHIuc2xpY2UoOCk7XG4gICAgICAgICAgdmFsID0gZ2V0RmllbGRDYXNlSW5zZW5zaXRpdmUoc2Vzc2lvbiwgc2Vzc2lvbkZpZWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBEaXJlY3Qgcm93IGZpZWxkIG9yIGxpdGVyYWxcbiAgICAgICAgICB2YWwgPSBnZXRGaWVsZENhc2VJbnNlbnNpdGl2ZShldmVudC5yb3csIGV4cHIpID8/IGV4cHI7XG4gICAgICAgIH1cbiAgICAgICAgbWFwcGVkUGFyYW1ldGVyc1t0YXJnZXRLZXldID0gdmFsICE9PSB1bmRlZmluZWQgPyB2YWwgOiAnJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGVmYXVsdDogY29weSBlbnRpcmUgcm93IGRhdGFcbiAgICAgIE9iamVjdC5hc3NpZ24obWFwcGVkUGFyYW1ldGVycywgZXZlbnQucm93KTtcbiAgICB9XG5cbiAgICBpZiAoYWN0aW9uLnR5cGUgPT09ICduYXZpZ2F0ZScgJiYgYWN0aW9uLnRhcmdldFVybCkge1xuICAgICAgbGV0IHRhcmdldFVybCA9IGFjdGlvbi50YXJnZXRVcmw7XG4gICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhldmVudC5yb3cpKSB7XG4gICAgICAgIHRhcmdldFVybCA9IHRhcmdldFVybC5yZXBsYWNlKFxuICAgICAgICAgIG5ldyBSZWdFeHAoYFxcXFx7XFxcXHtcXFxccyooPzpyb3dcXFxcLik/JHtrfVxcXFxzKlxcXFx9XFxcXH1gLCAnZ2knKSxcbiAgICAgICAgICBTdHJpbmcodiA/PyAnJylcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChhY3Rpb24ub3Blbk5ld1RhYiB8fCB0YXJnZXRVcmwuc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IHRhcmdldFVybC5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XG4gICAgICAgIHdpbmRvdy5vcGVuKHRhcmdldFVybCwgYWN0aW9uLm9wZW5OZXdUYWIgPyAnX2JsYW5rJyA6ICdfc2VsZicpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnJvdXRlcikge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRhcmdldFVybCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHRhcmdldFVybDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJvd0FjdGlvblRyaWdnZXJlZC5lbWl0KHtcbiAgICAgIGFjdGlvbixcbiAgICAgIHJvdzogZXZlbnQucm93LFxuICAgICAgcGFyYW1ldGVyczogbWFwcGVkUGFyYW1ldGVycyxcbiAgICB9KTtcbiAgfVxuXG4gIG9uR3JpZFNlbGVjdGlvbkNoYW5nZShyb3dzOiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQocm93cyk7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VkLmVtaXQocm93cyk7XG4gIH1cbn1cbiJdfQ==
466
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9mZWF0dXJlcy9ydW50aW1lL2R5bmFtaWMtcmVuZGVyZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLG1CQUFtQixFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBS3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN0Qix5QkFBeUIsRUFDMUIsTUFBTSwwQ0FBMEMsQ0FBQzs7OztBQStNbEQsTUFBTSxPQUFPLHdCQUF3QjtJQUNsQixRQUFRLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDckMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3pDLE1B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WUFDM0IsTUFBTTtZQUNOLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztZQUNkLFVBQVUsRUFBRSxnQkFBZ0I7U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQixDQUFDLElBQVc7UUFDL0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO3dHQXRWVSx3QkFBd0I7NEZBQXhCLHdCQUF3QixzNEJBek16Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtRlQsK3pFQXBGUyxZQUFZLHNTQUFFLG1CQUFtQixxYkFBRSx5QkFBeUI7OzRGQTBNM0Qsd0JBQXdCO2tCQTdNcEMsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLHlCQUF5QixDQUFDLFlBQzdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1GVCxtQkFvSGdCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBUeXBlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgUmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1kZWZpbml0aW9uLm1vZGVsJztcbmltcG9ydCB7IFJlcG9ydENvbXBvbmVudERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9yZXBvcnQtY29tcG9uZW50Lm1vZGVsJztcbmltcG9ydCB7IENvbXBvbmVudEFjdGlvbkRlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9jb21wb25lbnQtZXZlbnQubW9kZWwnO1xuaW1wb3J0IHsgR3JpZENvbHVtbkRlZmluaXRpb24sIEdyaWRSb3dDbGlja0FjdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1ncmlkLm1vZGVsJztcbmltcG9ydCB7IENvbXBvbmVudFJlZ2lzdHJ5IH0gZnJvbSAnLi4vLi4vY29yZS9yZWdpc3RyeS9jb21wb25lbnQtcmVnaXN0cnknO1xuaW1wb3J0IHsgRHluYW1pY0Zvcm1CdWlsZGVyIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9keW5hbWljLWZvcm0tYnVpbGRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi9leHBvcnQvc2VydmljZXMvcmVwb3J0LWV4cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IGdldEZpZWxkQ2FzZUluc2Vuc2l0aXZlIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9kYXRhLW5vcm1hbGl6YXRpb24udXRpbCc7XG5pbXBvcnQgeyBSZXBvcnRHcmlkQnJpZGdlQ29tcG9uZW50IH0gZnJvbSAnLi9yZXBvcnQtZ3JpZC1icmlkZ2UuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZUdyaWRDb2x1bW4sXG4gIGNhbGN1bGF0ZUdyaWRSb3csXG4gIHJlc29sdmVDb21wb25lbnRIZWlnaHQsXG4gIHJlc29sdmVDb21wb25lbnRNaW5IZWlnaHRcbn0gZnJvbSAnLi4vZGVzaWduZXIvdXRpbGl0aWVzL2NhbnZhcy1sYXlvdXQudXRpbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JwdC1keW5hbWljLXJlbmRlcmVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgUmVwb3J0R3JpZEJyaWRnZUNvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJycHQtcmVuZGVyZXItcm9vdFwiXG4gICAgICBbc3R5bGUuZGlyZWN0aW9uXT1cImRlZmluaXRpb24oKS5sYXlvdXQuZGlyZWN0aW9uIHx8ICdsdHInXCJcbiAgICAgIFtzdHlsZS5wYWRkaW5nLnB4XT1cImRlZmluaXRpb24oKS5sYXlvdXQucGFkZGluZyA/PyAyNFwiXG4gICAgPlxuICAgICAgPCEtLSBSZXBvcnQgSGVhZGVyIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInJwdC1oZWFkZXJcIj5cbiAgICAgICAgPGgyIGNsYXNzPVwicnB0LXRpdGxlXCI+e3sgZGVmaW5pdGlvbigpLm5hbWUgfX08L2gyPlxuICAgICAgICBAaWYgKGRlZmluaXRpb24oKS5kZXNjcmlwdGlvbikge1xuICAgICAgICAgIDxwIGNsYXNzPVwicnB0LWRlc2NyaXB0aW9uXCI+e3sgZGVmaW5pdGlvbigpLmRlc2NyaXB0aW9uIH19PC9wPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBDb250cm9scyBGb3JtIC8gUGFyYW1ldGVyIEZpbHRlciBCYXIgLS0+XG4gICAgICBAaWYgKGRlZmluaXRpb24oKS5jb21wb25lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtKClcIiAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiIGNsYXNzPVwicnB0LWZvcm1cIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInJwdC1sYXlvdXQtZ3JpZFwiXG4gICAgICAgICAgICBbc3R5bGUuZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXT1cImdyaWRDb2x1bW5zVGVtcGxhdGUoKVwiXG4gICAgICAgICAgICBbc3R5bGUuZ2FwLnB4XT1cImRlZmluaXRpb24oKS5sYXlvdXQuZ2FwID8/IDE2XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAZm9yIChjb21wIG9mIHNvcnRlZENvbXBvbmVudHMoKTsgdHJhY2sgY29tcC5pZCkge1xuICAgICAgICAgICAgICBAaWYgKGlzQ29tcG9uZW50VmlzaWJsZShjb21wKSkge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LWNlbGxcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmdyaWQtY29sdW1uXT1cImdldEdyaWRDb2x1bW4oY29tcClcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmdyaWQtcm93XT1cImdldEdyaWRSb3coY29tcClcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbXAubGF5b3V0Py53aWR0aCB8fCAnYXV0bydcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJnZXRDb21wb25lbnRIZWlnaHQoY29tcClcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHRdPVwiZ2V0Q29tcG9uZW50TWluSGVpZ2h0KGNvbXApXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cImNvbXAubGF5b3V0Py5tYXhIZWlnaHQgfHwgJ25vbmUnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBAaWYgKHJlc29sdmVDb21wb25lbnQoY29tcC50eXBlKTsgYXMgY29tcENsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDb21wb25lbnRPdXRsZXRdPVwiY29tcENsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDb21wb25lbnRPdXRsZXRJbnB1dHNdPVwiZ2V0Q29tcG9uZW50SW5wdXRzKGNvbXApXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXVucmVnaXN0ZXJlZC1wbGFjZWhvbGRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIFVua25vd24gY29tcG9uZW50OiA8Y29kZT57eyBjb21wLnR5cGUgfX08L2NvZGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIH1cblxuICAgICAgPCEtLSBSZXN1bHQgR3JpZCBTZWN0aW9uIC0tPlxuICAgICAgQGlmIChkZWZpbml0aW9uKCkuZ3JpZCkge1xuICAgICAgICBAaWYgKHJlc3VsdERhdGEoKSAhPT0gbnVsbCAmJiByZXN1bHREYXRhKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtZ3JpZC1zZWN0aW9uXCI+XG4gICAgICAgICAgICA8cnB0LWdyaWQtYnJpZGdlXG4gICAgICAgICAgICAgIFtncmlkRGVmaW5pdGlvbl09XCJkZWZpbml0aW9uKCkuZ3JpZCFcIlxuICAgICAgICAgICAgICBbZGF0YV09XCJyZXN1bHREYXRhKCkhXCJcbiAgICAgICAgICAgICAgKGdyaWRTdGF0ZUNoYW5nZSk9XCJncmlkU3RhdGVDaGFuZ2VkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChjb2x1bW5EZWZzQ2hhbmdlKT1cImNvbHVtbkRlZnNDaGFuZ2VkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChyb3dDbGljayk9XCJvbkdyaWRSb3dDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkdyaWRTZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWdyaWQtc2VjdGlvbiBycHQtZ3JpZC1pbml0aWFsLXN0YXRlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1pbml0aWFsLWNhcmRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtaW5pdGlhbC1pY29uXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI4XCIgaGVpZ2h0PVwiMjhcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjhcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyAzaDE4djE4SDN6TTMgOWgxOE0zIDE1aDE4TTkgM3YxOE0xNSAzdjE4XCIvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGg0IGNsYXNzPVwiZ3JpZC1pbml0aWFsLXRpdGxlXCI+UmVwb3J0IFJlYWR5IHRvIEV4ZWN1dGU8L2g0PlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImdyaWQtaW5pdGlhbC1kZXNjXCI+XG4gICAgICAgICAgICAgICAgQ29uZmlndXJlIGZpbHRlciBwYXJhbWV0ZXJzIGFib3ZlIGFuZCBleGVjdXRlIHRoZSByZXBvcnQgdG8gcmV0cmlldmUgbGl2ZSByZWNvcmRzIGludG8gdGhlIGdyaWQgKHt7IGRlZmluaXRpb24oKS5ncmlkPy5jb2x1bW5zPy5sZW5ndGggPz8gMCB9fSBjb2x1bW5zIGNvbmZpZ3VyZWQpLlxuICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWdyaWQtaW5pdGlhbC1leGVjXCIgKGNsaWNrKT1cIm9uU3VibWl0KClcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5FeGVjdXRlIFJlcG9ydDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KTtcbiAgICB9XG4gICAgLnJwdC1yZW5kZXJlci1yb290IHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB9XG4gICAgLnJwdC1oZWFkZXIge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICB9XG4gICAgLnJwdC10aXRsZSB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUteGwsIDEuNXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIG1hcmdpbjogMCAwIDZweCAwO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07XG4gICAgfVxuICAgIC5ycHQtZGVzY3JpcHRpb24ge1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLWJhc2UsIDAuODc1cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuICAgIC5ycHQtZm9ybSB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICAgIH1cbiAgICAucnB0LWxheW91dC1ncmlkIHtcbiAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGFsaWduLWl0ZW1zOiBzdGFydDtcbiAgICB9XG4gICAgLnJwdC1jZWxsIHtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBtaW4td2lkdGg6IDA7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICB9XG4gICAgLnJwdC1jZWxsID4gKiB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgfVxuICAgIC5ycHQtdW5yZWdpc3RlcmVkLXBsYWNlaG9sZGVyIHtcbiAgICAgIHBhZGRpbmc6IDhweCAxMnB4O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItZGFuZ2VyLCAjZWY0NDQ0KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1kYW5nZXItYmcsICNmZWYyZjIpO1xuICAgICAgYm9yZGVyOiAxcHggZGFzaGVkIHZhcigtLXJwdC1jb2xvci1kYW5nZXIsICNlZjQ0NDQpO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gICAgfVxuICAgIC5ycHQtZ3JpZC1zZWN0aW9uIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICB9XG4gICAgLnJwdC1ncmlkLWluaXRpYWwtc3RhdGUge1xuICAgICAgcGFkZGluZzogMTJweCAwO1xuICAgIH1cbiAgICAuZ3JpZC1pbml0aWFsLWNhcmQge1xuICAgICAgYm9yZGVyOiAycHggZGFzaGVkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMteGwsIDEycHgpO1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmZmZmZmYpO1xuICAgICAgcGFkZGluZzogNDhweCAyNHB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBib3gtc2hhZG93OiB2YXIoLS1ycHQtYm94LXNoYWRvdy14cywgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNCkpO1xuICAgIH1cbiAgICAuZ3JpZC1pbml0aWFsLWljb24ge1xuICAgICAgd2lkdGg6IDUycHg7XG4gICAgICBoZWlnaHQ6IDUycHg7XG4gICAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgICAgYmFja2dyb3VuZDogI2VmZjZmZjtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTRweDtcbiAgICB9XG4gICAgLmdyaWQtaW5pdGlhbC10aXRsZSB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtbWQsIDFyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICBtYXJnaW46IDAgMCA2cHggMDtcbiAgICB9XG4gICAgLmdyaWQtaW5pdGlhbC1kZXNjIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC44MTI1cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBtYXgtd2lkdGg6IDQ2MHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDEuNTtcbiAgICAgIG1hcmdpbjogMCAwIDIwcHggMDtcbiAgICB9XG4gICAgLmJ0bi1ncmlkLWluaXRpYWwtZXhlYyB7XG4gICAgICBwYWRkaW5nOiA4cHggMjBweDtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMsIDZweCk7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDM3LCA5OSwgMjM1LCAwLjIpO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZTtcbiAgICB9XG4gICAgLmJ0bi1ncmlkLWluaXRpYWwtZXhlYzpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeS1ob3ZlciwgIzFkNGVkOCk7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG4gICAgfVxuICBgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNSZW5kZXJlckNvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnaXN0cnkgPSBpbmplY3QoQ29tcG9uZW50UmVnaXN0cnkpO1xuICBwcml2YXRlIHJlYWRvbmx5IGZvcm1CdWlsZGVyID0gaW5qZWN0KER5bmFtaWNGb3JtQnVpbGRlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlciwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBleHBvcnRTZXJ2aWNlID0gaW5qZWN0KFJlcG9ydEV4cG9ydFNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIHJlYWRvbmx5IGRlZmluaXRpb24gPSBpbnB1dC5yZXF1aXJlZDxSZXBvcnREZWZpbml0aW9uPigpO1xuICByZWFkb25seSBpbml0aWFsVmFsdWVzID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHt9KTtcbiAgcmVhZG9ubHkgcmVzdWx0RGF0YSA9IGlucHV0PHVua25vd25bXSB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IGV4ZWN1dGVSZXF1ZXN0ZWQgPSBvdXRwdXQ8e1xuICAgIGRlZmluaXRpb246IFJlcG9ydERlZmluaXRpb247XG4gICAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH0+KCk7XG5cbiAgcmVhZG9ubHkgcmVzZXRSZXF1ZXN0ZWQgPSBvdXRwdXQ8e1xuICAgIGRlZmluaXRpb246IFJlcG9ydERlZmluaXRpb247XG4gIH0+KCk7XG5cbiAgcmVhZG9ubHkgZXhwb3J0UmVxdWVzdGVkID0gb3V0cHV0PHtcbiAgICBmb3JtYXQ6IHN0cmluZztcbiAgICBmaWxlTmFtZT86IHN0cmluZztcbiAgICBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBkYXRhOiB1bmtub3duW10gfCBudWxsO1xuICB9PigpO1xuXG4gIHJlYWRvbmx5IHByaW50UmVxdWVzdGVkID0gb3V0cHV0PHtcbiAgICBycHRGaWxlTmFtZT86IHN0cmluZztcbiAgICBleHBvcnRUeXBlPzogc3RyaW5nO1xuICAgIHBhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9PigpO1xuXG4gIHJlYWRvbmx5IGN1c3RvbUFjdGlvblRyaWdnZXJlZCA9IG91dHB1dDx7XG4gICAgYWN0aW9uOiBDb21wb25lbnRBY3Rpb25EZWZpbml0aW9uO1xuICAgIGNvbXBvbmVudDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbjtcbiAgICBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfT4oKTtcblxuICByZWFkb25seSBncmlkU3RhdGVDaGFuZ2VkID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgY29sdW1uRGVmc0NoYW5nZWQgPSBvdXRwdXQ8YW55PigpO1xuICByZWFkb25seSBzZWxlY3Rpb25DaGFuZ2UgPSBvdXRwdXQ8YW55W10+KCk7XG4gIHJlYWRvbmx5IHNlbGVjdGlvbkNoYW5nZWQgPSBvdXRwdXQ8YW55W10+KCk7XG4gIHJlYWRvbmx5IHJvd0FjdGlvblRyaWdnZXJlZCA9IG91dHB1dDx7XG4gICAgYWN0aW9uOiBHcmlkUm93Q2xpY2tBY3Rpb247XG4gICAgcm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfT4oKTtcblxuICByZWFkb25seSBmb3JtID0gY29tcHV0ZWQ8Rm9ybUdyb3VwPigoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUJ1aWxkZXIudG9Gb3JtR3JvdXAoXG4gICAgICB0aGlzLmRlZmluaXRpb24oKS5jb21wb25lbnRzLFxuICAgICAgdGhpcy5pbml0aWFsVmFsdWVzKClcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzb3J0ZWRDb21wb25lbnRzID0gY29tcHV0ZWQ8UmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbltdPigoKSA9PiB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmRlZmluaXRpb24oKS5jb21wb25lbnRzXS5zb3J0KFxuICAgICAgKGEsIGIpID0+IChhLm9yZGVyID8/IDApIC0gKGIub3JkZXIgPz8gMClcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSB0b3RhbEdyaWRDb2x1bW5zID0gY29tcHV0ZWQ8bnVtYmVyPigoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZGVmaW5pdGlvbigpLmxheW91dC5jb2x1bW5zIHx8IDEyO1xuICB9KTtcblxuICByZWFkb25seSBncmlkQ29sdW1uc1RlbXBsYXRlID0gY29tcHV0ZWQ8c3RyaW5nPigoKSA9PiB7XG4gICAgcmV0dXJuIGByZXBlYXQoJHt0aGlzLnRvdGFsR3JpZENvbHVtbnMoKX0sIG1pbm1heCgwLCAxZnIpKWA7XG4gIH0pO1xuXG4gIHJlc29sdmVDb21wb25lbnQodHlwZTogc3RyaW5nKTogVHlwZTx1bmtub3duPiB8IG51bGwge1xuICAgIGNvbnN0IG1ldGEgPSB0aGlzLnJlZ2lzdHJ5LnJlc29sdmUodHlwZSk7XG4gICAgcmV0dXJuIChtZXRhPy5jb21wb25lbnQgYXMgVHlwZTx1bmtub3duPikgPz8gbnVsbDtcbiAgfVxuXG4gIGdldENvbXBvbmVudElucHV0cyhjb21wOiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IGlucHV0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGlmIChjb21wLnR5cGUgPT09ICdrcGktY2FyZCcgfHwgY29tcC50eXBlID09PSAnY2hhcnQnKSB7XG4gICAgICBpbnB1dHNbJ2RlZmluaXRpb24nXSA9IGNvbXA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0c1snY29uZmlnJ10gPSBjb21wO1xuICAgIH1cblxuICAgIGlmIChjb21wLmtleSAmJiBjb21wLnR5cGUgIT09ICdidXR0b24nICYmIGNvbXAudHlwZSAhPT0gJ2twaS1jYXJkJyAmJiBjb21wLnR5cGUgIT09ICdjaGFydCcpIHtcbiAgICAgIGlucHV0c1snY29udHJvbCddID0gdGhpcy5mb3JtKCkuY29udHJvbHNbY29tcC5rZXldO1xuICAgIH1cblxuICAgIGlmIChjb21wLnR5cGUgPT09ICdkcm9wZG93bicgfHwgY29tcC50eXBlID09PSAncmFkaW8nKSB7XG4gICAgICBpbnB1dHNbJ3BhcmVudEZvcm0nXSA9IHRoaXMuZm9ybSgpO1xuICAgIH1cblxuICAgIGlmIChjb21wLnR5cGUgPT09ICdidXR0b24nKSB7XG4gICAgICBpbnB1dHNbJ29uQWN0aW9uJ10gPSAoYWN0aW9uOiBDb21wb25lbnRBY3Rpb25EZWZpbml0aW9uKSA9PiB0aGlzLmhhbmRsZUFjdGlvbihhY3Rpb24sIGNvbXApO1xuICAgIH1cblxuICAgIHJldHVybiBpbnB1dHM7XG4gIH1cblxuXG4gIGdldEdyaWRDb2x1bW4oY29tcDogUmVwb3J0Q29tcG9uZW50RGVmaW5pdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNhbGN1bGF0ZUdyaWRDb2x1bW4oY29tcCwgdGhpcy50b3RhbEdyaWRDb2x1bW5zKCkpO1xuICB9XG5cbiAgZ2V0R3JpZFJvdyhjb21wOiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2FsY3VsYXRlR3JpZFJvdyhjb21wKTtcbiAgfVxuXG4gIGdldENvbXBvbmVudEhlaWdodChjb21wOiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pc0Zvcm1JbnB1dChjb21wLnR5cGUpKSB7XG4gICAgICBjb25zdCBoID0gY29tcC5sYXlvdXQ/LmhlaWdodDtcbiAgICAgIGlmIChoID09PSAnODVweCcgfHwgIWggfHwgaCA9PT0gJ2F1dG8nKSByZXR1cm4gJ2F1dG8nO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZUNvbXBvbmVudEhlaWdodChjb21wKTtcbiAgfVxuXG4gIGdldENvbXBvbmVudE1pbkhlaWdodChjb21wOiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pc0Zvcm1JbnB1dChjb21wLnR5cGUpKSB7XG4gICAgICBjb25zdCBtaW5IID0gY29tcC5sYXlvdXQ/Lm1pbkhlaWdodDtcbiAgICAgIGlmIChtaW5IID09PSAnODVweCcgfHwgIW1pbkggfHwgbWluSCA9PT0gJ2F1dG8nKSByZXR1cm4gJ2F1dG8nO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb2x2ZUNvbXBvbmVudE1pbkhlaWdodChjb21wKTtcbiAgfVxuXG4gIGlzRm9ybUlucHV0KHR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlID09PSAnaW5wdXQnIHx8XG4gICAgICB0eXBlID09PSAnZHJvcGRvd24nIHx8XG4gICAgICB0eXBlID09PSAnZGF0ZScgfHxcbiAgICAgIHR5cGUgPT09ICdkYXRlLXJhbmdlJyB8fFxuICAgICAgdHlwZSA9PT0gJ251bWJlcicgfHxcbiAgICAgIHR5cGUgPT09ICdjaGVja2JveCcgfHxcbiAgICAgIHR5cGUgPT09ICdyYWRpbycgfHxcbiAgICAgIHR5cGUgPT09ICdidXR0b24nXG4gICAgKTtcbiAgfVxuXG4gIGlzQ29tcG9uZW50VmlzaWJsZShjb21wOiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmlzID0gY29tcC52aXNpYmlsaXR5O1xuICAgIGlmICghdmlzKSByZXR1cm4gdHJ1ZTtcbiAgICBjb25zdCBjdHJsID0gdGhpcy5mb3JtKCkuZ2V0KHZpcy5kZXBlbmRzT24pO1xuICAgIGNvbnN0IHZhbCA9IGN0cmwgPyBjdHJsLnZhbHVlIDogdW5kZWZpbmVkO1xuICAgIHN3aXRjaCAodmlzLm9wZXJhdG9yKSB7XG4gICAgICBjYXNlICdlcXVhbHMnOlxuICAgICAgICByZXR1cm4gdmFsID09PSB2aXMudmFsdWU7XG4gICAgICBjYXNlICdub3RFcXVhbHMnOlxuICAgICAgICByZXR1cm4gdmFsICE9PSB2aXMudmFsdWU7XG4gICAgICBjYXNlICdjb250YWlucyc6XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiB2YWwuaW5jbHVkZXMoU3RyaW5nKHZpcy52YWx1ZSkpO1xuICAgICAgY2FzZSAnZ3JlYXRlclRoYW4nOlxuICAgICAgICByZXR1cm4gTnVtYmVyKHZhbCkgPiBOdW1iZXIodmlzLnZhbHVlKTtcbiAgICAgIGNhc2UgJ2xlc3NUaGFuJzpcbiAgICAgICAgcmV0dXJuIE51bWJlcih2YWwpIDwgTnVtYmVyKHZpcy52YWx1ZSk7XG4gICAgICBjYXNlICdpc05vdEVtcHR5JzpcbiAgICAgICAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09ICcnO1xuICAgICAgY2FzZSAnaXNFbXB0eSc6XG4gICAgICAgIHJldHVybiB2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQgfHwgdmFsID09PSAnJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG9uU3VibWl0KCk6IHZvaWQge1xuICAgIGNvbnN0IGYgPSB0aGlzLmZvcm0oKTtcbiAgICBpZiAoZi5pbnZhbGlkKSB7XG4gICAgICBmLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gdGhpcy5mb3JtQnVpbGRlci5leHRyYWN0VmFsdWVzKGYpO1xuICAgIHRoaXMuZXhlY3V0ZVJlcXVlc3RlZC5lbWl0KHtcbiAgICAgIGRlZmluaXRpb246IHRoaXMuZGVmaW5pdGlvbigpLFxuICAgICAgcGFyYW1ldGVycyxcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZUFjdGlvbihhY3Rpb246IENvbXBvbmVudEFjdGlvbkRlZmluaXRpb24sIGNvbXA/OiBSZXBvcnRDb21wb25lbnREZWZpbml0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHRoaXMuZm9ybUJ1aWxkZXIuZXh0cmFjdFZhbHVlcyh0aGlzLmZvcm0oKSk7XG5cbiAgICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgICBjYXNlICdleGVjdXRlLXJlcG9ydCc6XG4gICAgICBjYXNlICdzdWJtaXQnOlxuICAgICAgICB0aGlzLm9uU3VibWl0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyZXNldCc6XG4gICAgICAgIHRoaXMuZm9ybSgpLnJlc2V0KHRoaXMuaW5pdGlhbFZhbHVlcygpKTtcbiAgICAgICAgdGhpcy5yZXNldFJlcXVlc3RlZC5lbWl0KHsgZGVmaW5pdGlvbjogdGhpcy5kZWZpbml0aW9uKCkgfSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdleHBvcnQnOiB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IChhY3Rpb24ucGFyYW1zPy5bJ2Zvcm1hdCddIGFzIHN0cmluZykgfHwgJ2V4Y2VsJztcbiAgICAgICAgY29uc3QgZGVmYXVsdE5hbWUgPSB0aGlzLmRlZmluaXRpb24oKS5uYW1lXG4gICAgICAgICAgPyB0aGlzLmRlZmluaXRpb24oKS5uYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTlfLV0vZ2ksICdfJylcbiAgICAgICAgICA6ICdyZXBvcnQnO1xuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IChhY3Rpb24ucGFyYW1zPy5bJ2ZpbGVOYW1lJ10gYXMgc3RyaW5nKSB8fCBgJHtkZWZhdWx0TmFtZX1fJHtEYXRlLm5vdygpfWA7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJlc3VsdERhdGEoKTtcblxuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDAgJiYgdGhpcy5leHBvcnRTZXJ2aWNlKSB7XG4gICAgICAgICAgY29uc3QgZm10ID0gZm9ybWF0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKGZtdCA9PT0gJ2NzdicpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnRDc3YoZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLCB7XG4gICAgICAgICAgICAgIGZpbGVOYW1lOiBgJHtmaWxlTmFtZX0uY3N2YCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZm10ID09PSAnZXhjZWwnIHx8IGZtdCA9PT0gJ3hsc3gnIHx8IGZtdCA9PT0gJ3hscycpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnRFeGNlbChkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sIHtcbiAgICAgICAgICAgICAgZmlsZU5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZtdCA9PT0gJ2h0bWwnKSB7XG4gICAgICAgICAgICB0aGlzLmV4cG9ydFNlcnZpY2UuZXhwb3J0SHRtbChkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10sIHtcbiAgICAgICAgICAgICAgZmlsZU5hbWU6IGAke2ZpbGVOYW1lfS5odG1sYCxcbiAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuZGVmaW5pdGlvbigpPy5uYW1lIHx8ICdSZXBvcnQgRXhwb3J0JyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZm10ID09PSAnanNvbicpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnRKc29uKGRhdGEsIHtcbiAgICAgICAgICAgICAgZmlsZU5hbWU6IGAke2ZpbGVOYW1lfS5qc29uYCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZXhwb3J0UmVxdWVzdGVkLmVtaXQoe1xuICAgICAgICAgIGZvcm1hdCxcbiAgICAgICAgICBmaWxlTmFtZSxcbiAgICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAncHJpbnQtcmVwb3J0Jzoge1xuICAgICAgICBjb25zdCBycHRGaWxlTmFtZSA9IChhY3Rpb24ucGFyYW1zPy5bJ3JwdEZpbGVOYW1lJ10gYXMgc3RyaW5nKSB8fCAnJztcbiAgICAgICAgY29uc3QgZXhwb3J0VHlwZSA9IChhY3Rpb24ucGFyYW1zPy5bJ2V4cG9ydFR5cGUnXSBhcyBzdHJpbmcpIHx8ICdwZGYnO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5yZXN1bHREYXRhKCk7XG5cbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwICYmIHRoaXMuZXhwb3J0U2VydmljZSAmJiAhcnB0RmlsZU5hbWUpIHtcbiAgICAgICAgICB0aGlzLmV4cG9ydFNlcnZpY2UucHJpbnRSZXBvcnQoZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdLCB7XG4gICAgICAgICAgICB0aXRsZTogdGhpcy5kZWZpbml0aW9uKCk/Lm5hbWUgfHwgJ1JlcG9ydCBQcmludCBQcmV2aWV3JyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJpbnRSZXF1ZXN0ZWQuZW1pdCh7XG4gICAgICAgICAgcnB0RmlsZU5hbWUsXG4gICAgICAgICAgZXhwb3J0VHlwZSxcbiAgICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ25hdmlnYXRlJzoge1xuICAgICAgICBjb25zdCB0YXJnZXRVcmwgPSAoYWN0aW9uLnBhcmFtcz8uWyd0YXJnZXRVcmwnXSBhcyBzdHJpbmcpIHx8ICcnO1xuICAgICAgICBjb25zdCBvcGVuTmV3VGFiID0gYWN0aW9uLnBhcmFtcz8uWydvcGVuTmV3VGFiJ10gPT09IHRydWU7XG5cbiAgICAgICAgaWYgKHRhcmdldFVybCkge1xuICAgICAgICAgIGlmIChvcGVuTmV3VGFiIHx8IHRhcmdldFVybC5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgdGFyZ2V0VXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKHRhcmdldFVybCwgb3Blbk5ld1RhYiA/ICdfYmxhbmsnIDogJ19zZWxmJyk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnJvdXRlcikge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RhcmdldFVybF0sIHsgcXVlcnlQYXJhbXM6IHBhcmFtZXRlcnMgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGFyZ2V0VXJsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSAnY3VzdG9tLWV2ZW50JzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChjb21wKSB7XG4gICAgICAgICAgdGhpcy5jdXN0b21BY3Rpb25UcmlnZ2VyZWQuZW1pdCh7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjb21wb25lbnQ6IGNvbXAsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIG9uR3JpZFJvd0NsaWNrKGV2ZW50OiB7XG4gICAgcm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb2x1bW4/OiBHcmlkQ29sdW1uRGVmaW5pdGlvbjtcbiAgICBldmVudD86IE1vdXNlRXZlbnQ7XG4gIH0pOiB2b2lkIHtcbiAgICBjb25zdCBncmlkID0gdGhpcy5kZWZpbml0aW9uKCkuZ3JpZDtcbiAgICBpZiAoIWdyaWQpIHJldHVybjtcblxuICAgIGNvbnN0IGFjdGlvbiA9IGV2ZW50LmNvbHVtbj8uYWN0aW9uID8/IGdyaWQucm93Q2xpY2tBY3Rpb24gPz8gZ3JpZC5vcHRpb25zPy5yb3dDbGlja0FjdGlvbjtcbiAgICBpZiAoIWFjdGlvbikgcmV0dXJuO1xuXG4gICAgY29uc3QgZm9ybVZhbHVlcyA9IHRoaXMuZm9ybUJ1aWxkZXIuZXh0cmFjdFZhbHVlcyh0aGlzLmZvcm0oKSk7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvblNlcnZpY2U/LnNlc3Npb25Db250ZXh0KCkgPz8ge307XG4gICAgY29uc3QgbWFwcGVkUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGlmIChhY3Rpb24ucGFyYW1ldGVyTWFwcGluZyAmJiBPYmplY3Qua2V5cyhhY3Rpb24ucGFyYW1ldGVyTWFwcGluZykubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBbdGFyZ2V0S2V5LCBleHByXSBvZiBPYmplY3QuZW50cmllcyhhY3Rpb24ucGFyYW1ldGVyTWFwcGluZykpIHtcbiAgICAgICAgbGV0IHZhbDogdW5rbm93biA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGV4cHIuc3RhcnRzV2l0aCgncm93LicpKSB7XG4gICAgICAgICAgY29uc3Qgcm93RmllbGQgPSBleHByLnNsaWNlKDQpO1xuICAgICAgICAgIHZhbCA9IGdldEZpZWxkQ2FzZUluc2Vuc2l0aXZlKGV2ZW50LnJvdywgcm93RmllbGQpO1xuICAgICAgICB9IGVsc2UgaWYgKGV4cHIuc3RhcnRzV2l0aCgnZm9ybS4nKSB8fCBleHByLnN0YXJ0c1dpdGgoJ2Zvcm1WYWx1ZXMuJykpIHtcbiAgICAgICAgICBjb25zdCBmb3JtRmllbGQgPSBleHByLnJlcGxhY2UoL15mb3JtXFwufF5mb3JtVmFsdWVzXFwuLywgJycpO1xuICAgICAgICAgIHZhbCA9IGdldEZpZWxkQ2FzZUluc2Vuc2l0aXZlKGZvcm1WYWx1ZXMsIGZvcm1GaWVsZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXhwci5zdGFydHNXaXRoKCdzZXNzaW9uLicpKSB7XG4gICAgICAgICAgY29uc3Qgc2Vzc2lvbkZpZWxkID0gZXhwci5zbGljZSg4KTtcbiAgICAgICAgICB2YWwgPSBnZXRGaWVsZENhc2VJbnNlbnNpdGl2ZShzZXNzaW9uLCBzZXNzaW9uRmllbGQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERpcmVjdCByb3cgZmllbGQgb3IgbGl0ZXJhbFxuICAgICAgICAgIHZhbCA9IGdldEZpZWxkQ2FzZUluc2Vuc2l0aXZlKGV2ZW50LnJvdywgZXhwcikgPz8gZXhwcjtcbiAgICAgICAgfVxuICAgICAgICBtYXBwZWRQYXJhbWV0ZXJzW3RhcmdldEtleV0gPSB2YWwgIT09IHVuZGVmaW5lZCA/IHZhbCA6ICcnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWZhdWx0OiBjb3B5IGVudGlyZSByb3cgZGF0YVxuICAgICAgT2JqZWN0LmFzc2lnbihtYXBwZWRQYXJhbWV0ZXJzLCBldmVudC5yb3cpO1xuICAgIH1cblxuICAgIGlmIChhY3Rpb24udHlwZSA9PT0gJ25hdmlnYXRlJyAmJiBhY3Rpb24udGFyZ2V0VXJsKSB7XG4gICAgICBsZXQgdGFyZ2V0VXJsID0gYWN0aW9uLnRhcmdldFVybDtcbiAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50LnJvdykpIHtcbiAgICAgICAgdGFyZ2V0VXJsID0gdGFyZ2V0VXJsLnJlcGxhY2UoXG4gICAgICAgICAgbmV3IFJlZ0V4cChgXFxcXHtcXFxce1xcXFxzKig/OnJvd1xcXFwuKT8ke2t9XFxcXHMqXFxcXH1cXFxcfWAsICdnaScpLFxuICAgICAgICAgIFN0cmluZyh2ID8/ICcnKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGFjdGlvbi5vcGVuTmV3VGFiIHx8IHRhcmdldFVybC5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgdGFyZ2V0VXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcbiAgICAgICAgd2luZG93Lm9wZW4odGFyZ2V0VXJsLCBhY3Rpb24ub3Blbk5ld1RhYiA/ICdfYmxhbmsnIDogJ19zZWxmJyk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucm91dGVyKSB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGFyZ2V0VXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdGFyZ2V0VXJsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucm93QWN0aW9uVHJpZ2dlcmVkLmVtaXQoe1xuICAgICAgYWN0aW9uLFxuICAgICAgcm93OiBldmVudC5yb3csXG4gICAgICBwYXJhbWV0ZXJzOiBtYXBwZWRQYXJhbWV0ZXJzLFxuICAgIH0pO1xuICB9XG5cbiAgb25HcmlkU2VsZWN0aW9uQ2hhbmdlKHJvd3M6IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChyb3dzKTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQuZW1pdChyb3dzKTtcbiAgfVxufVxuIl19
@@ -5,7 +5,7 @@ import { throwError, map, timeout, take } from 'rxjs';
5
5
  import { ReportDataSourceAdapter } from '../../data-access/contracts/data-source.contract';
6
6
  import { ReportSessionContextService } from '../../core/services/report-session-context.service';
7
7
  import { ReportApiExecutionService } from '../../core/services/report-api-execution.service';
8
- import { findMissingCanvasFields, resolveExecutionDataSource, resolveParameterMappings, } from '../../core/utils/report-parameter.util';
8
+ import { findMissingCanvasFields, normalizeParameterNames, resolveCanvasFieldValue, resolveExecutionDataSource, resolveParameterMappings, } from '../../core/utils/report-parameter.util';
9
9
  import * as i0 from "@angular/core";
10
10
  /**
11
11
  * Runs a report's result query. Shared by the Live Runtime, the designer's
@@ -37,7 +37,13 @@ export class ReportExecutionService {
37
37
  return throwError(() => new Error('No data source configured. Select the Run Report button and choose a stored procedure in its Report Data section.'));
38
38
  }
39
39
  const session = this.session?.getCurrentSessionContext() ?? {};
40
- const resolved = resolveParameterMappings(ds.parameterMappings, session, formValues);
40
+ let resolved;
41
+ try {
42
+ resolved = resolveParameterMappings(ds.parameterMappings, session, formValues);
43
+ }
44
+ catch (error) {
45
+ return throwError(() => error);
46
+ }
41
47
  // Expand compound objects (e.g. dateRange: { from, to }) into top-level parameters
42
48
  const flattenedFormValues = { ...formValues };
43
49
  for (const [k, v] of Object.entries(formValues)) {
@@ -55,7 +61,6 @@ export class ReportExecutionService {
55
61
  }
56
62
  }
57
63
  }
58
- const params = { ...flattenedFormValues, ...resolved };
59
64
  // Delegate to ReportApiExecutionService if data source is an API endpoint
60
65
  const isApiSource = ds.type === 'api' ||
61
66
  ds.endpoint.startsWith('http://') ||
@@ -74,6 +79,32 @@ export class ReportExecutionService {
74
79
  if (!this.adapter) {
75
80
  return throwError(() => new Error('No ReportDataSourceAdapter provided to execute the data source.'));
76
81
  }
82
+ const isProcedure = ds.method === 'STORED_PROCEDURE' || ds.type === 'stored_procedure' || ds.type === 'procedure' || !ds.type;
83
+ let params = { ...flattenedFormValues, ...resolved };
84
+ if (isProcedure) {
85
+ // Form controls are expression inputs, never an implicit SQL argument list.
86
+ const declared = {};
87
+ const mappedNames = new Set(Object.keys(resolved).map(key => key.toLowerCase()));
88
+ const keys = ds.parameterKeys ?? (ds.parameterMappings === undefined ? [
89
+ ...def.parameters.map(parameter => parameter.key),
90
+ ...def.components.flatMap(component => component.binding?.parameterKey ? [component.binding.parameterKey] : []),
91
+ ] : []);
92
+ for (const key of keys) {
93
+ if (mappedNames.has(key.replace(/^@+/, '').toLowerCase()))
94
+ continue;
95
+ const control = def.components.find(component => component.binding?.parameterKey === key);
96
+ const parameter = def.parameters.find(item => item.key === key);
97
+ const value = resolveCanvasFieldValue(formValues, control?.key || key) ?? resolveCanvasFieldValue(formValues, key.replace(/^@+/, '')) ?? parameter?.defaultValue;
98
+ if (value !== undefined)
99
+ Object.defineProperty(declared, key, { value, enumerable: true, configurable: true });
100
+ }
101
+ try {
102
+ params = normalizeParameterNames({ ...declared, ...resolved });
103
+ }
104
+ catch (error) {
105
+ return throwError(() => error);
106
+ }
107
+ }
77
108
  return this.guard(this.adapter.execute({ ...ds, name: ds.name || ds.endpoint, type: ds.type ?? 'stored_procedure' }, params));
78
109
  }
79
110
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportExecutionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
@@ -83,4 +114,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
83
114
  type: Injectable,
84
115
  args: [{ providedIn: 'root' }]
85
116
  }] });
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWV4ZWN1dGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvcnVudGltZS9yZXBvcnQtZXhlY3V0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDNUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFjLFVBQVUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM3RixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLDBCQUEwQixFQUMxQix3QkFBd0IsR0FDekIsTUFBTSx3Q0FBd0MsQ0FBQzs7QUFFaEQ7OztHQUdHO0FBRUgsTUFBTSxPQUFPLHNCQUFzQjtJQUNoQixNQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdEQsU0FBUyxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hFLEtBQUssQ0FBSSxNQUFxQjtRQUNwQyxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSx3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QUFZO2FBQzlCLEVBQ0QsbUJBQW1CLEVBQ25CLFFBQVEsQ0FDVCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDLENBQUM7UUFDeEcsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDcEMsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLGtCQUFrQixFQUFFLEVBQzVFLE1BQU0sQ0FDUCxDQUFDLENBQUM7SUFDTCxDQUFDO3dHQW5GVSxzQkFBc0I7NEdBQXRCLHNCQUFzQixjQURULE1BQU07OzRGQUNuQixzQkFBc0I7a0JBRGxDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQldBWVNfUkVQT1JUX0VORFBPSU5UUyB9IGZyb20gJy4uLy4uL2RhdGEtYWNjZXNzL2FkYXB0ZXJzL2VuZHBvaW50LXRva2Vucyc7XG5pbXBvcnQgeyBSRVBPUlRJTkdfQ09ORklHIH0gZnJvbSAnLi4vLi4vY29yZS90b2tlbnMvcmVwb3J0aW5nLWNvbmZpZy50b2tlbic7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IsIG1hcCwgdGltZW91dCwgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1kZWZpbml0aW9uLm1vZGVsJztcbmltcG9ydCB7IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyIH0gZnJvbSAnLi4vLi4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL2RhdGEtc291cmNlLmNvbnRyYWN0JztcbmltcG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydEFwaUV4ZWN1dGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1hcGktZXhlY3V0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgZmluZE1pc3NpbmdDYW52YXNGaWVsZHMsXG4gIHJlc29sdmVFeGVjdXRpb25EYXRhU291cmNlLFxuICByZXNvbHZlUGFyYW1ldGVyTWFwcGluZ3MsXG59IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMvcmVwb3J0LXBhcmFtZXRlci51dGlsJztcblxuLyoqXG4gKiBSdW5zIGEgcmVwb3J0J3MgcmVzdWx0IHF1ZXJ5LiBTaGFyZWQgYnkgdGhlIExpdmUgUnVudGltZSwgdGhlIGRlc2lnbmVyJ3NcbiAqIExpdmUgUHJldmlldyBhbmQgdGhlIGRlc2lnbmVyIGNhbnZhcyBzbyBhbGwgdGhyZWUgYmVoYXZlIGlkZW50aWNhbGx5LlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFJlcG9ydEV4ZWN1dGlvblNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdChSRVBPUlRJTkdfQ09ORklHLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGVuZHBvaW50cyA9IGluamVjdChCV0FZU19SRVBPUlRfRU5EUE9JTlRTLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIGd1YXJkPFQ+KHNvdXJjZTogT2JzZXJ2YWJsZTxUPik6IE9ic2VydmFibGU8VD4ge1xuICAgIGNvbnN0IGNvbnRleHQgPSAoKSA9PiBKU09OLnN0cmluZ2lmeShbdGhpcy5zZXNzaW9uPy5nZXRDdXJyZW50U2Vzc2lvbkNvbnRleHQoKSA/PyB7fSwgdGhpcy5lbmRwb2ludHMgPyB7IC4uLnRoaXMuZW5kcG9pbnRzIH0gOiBudWxsXSk7XG4gICAgY29uc3QgY2FwdHVyZWQgPSBjb250ZXh0KCk7XG4gICAgcmV0dXJuIHNvdXJjZS5waXBlKHRha2UoMSksIHRpbWVvdXQoeyBmaXJzdDogdGhpcy5jb25maWc/LmV4ZWN1dGlvblRpbWVvdXRNcyA/PyB0aGlzLmNvbmZpZz8ubG9va3VwVGltZW91dE1zID8/IDMwMDAwMCB9KSwgbWFwKHZhbHVlID0+IHtcbiAgICAgIGlmIChjYXB0dXJlZCAhPT0gY29udGV4dCgpKSB0aHJvdyBuZXcgRXJyb3IoJ1JlcG9ydGluZyBjb250ZXh0IGNoYW5nZWQuIFBsZWFzZSBydW4gdGhlIHJlcG9ydCBhZ2Fpbi4nKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KSk7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBhZGFwdGVyID0gaW5qZWN0KFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb24gPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGFwaUV4ZWN1dGlvblNlcnZpY2UgPSBpbmplY3QoUmVwb3J0QXBpRXhlY3V0aW9uU2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKiogQ2FudmFzIGZpZWxkIGtleXMgdGhlIHVzZXIgc3RpbGwgaGFzIHRvIGZpbGwgYmVmb3JlIHRoZSByZXBvcnQgY2FuIHJ1bi4gKi9cbiAgZ2V0TWlzc2luZ0ZpZWxkcyhkZWY6IFJlcG9ydERlZmluaXRpb24sIGZvcm1WYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGRzID0gcmVzb2x2ZUV4ZWN1dGlvbkRhdGFTb3VyY2UoZGVmKTtcbiAgICByZXR1cm4gZmluZE1pc3NpbmdDYW52YXNGaWVsZHMoZHM/LnBhcmFtZXRlck1hcHBpbmdzLCBmb3JtVmFsdWVzKTtcbiAgfVxuXG4gIGV4ZWN1dGUoZGVmOiBSZXBvcnREZWZpbml0aW9uLCBmb3JtVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IE9ic2VydmFibGU8dW5rbm93bltdPiB7XG4gICAgY29uc3QgZHMgPSByZXNvbHZlRXhlY3V0aW9uRGF0YVNvdXJjZShkZWYpO1xuICAgIGlmICghZHMpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKFxuICAgICAgICAoKSA9PlxuICAgICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICAgICdObyBkYXRhIHNvdXJjZSBjb25maWd1cmVkLiBTZWxlY3QgdGhlIFJ1biBSZXBvcnQgYnV0dG9uIGFuZCBjaG9vc2UgYSBzdG9yZWQgcHJvY2VkdXJlIGluIGl0cyBSZXBvcnQgRGF0YSBzZWN0aW9uLidcbiAgICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnNlc3Npb24/LmdldEN1cnJlbnRTZXNzaW9uQ29udGV4dCgpID8/IHt9O1xuICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVBhcmFtZXRlck1hcHBpbmdzKGRzLnBhcmFtZXRlck1hcHBpbmdzLCBzZXNzaW9uLCBmb3JtVmFsdWVzKTtcblxuICAgIC8vIEV4cGFuZCBjb21wb3VuZCBvYmplY3RzIChlLmcuIGRhdGVSYW5nZTogeyBmcm9tLCB0byB9KSBpbnRvIHRvcC1sZXZlbCBwYXJhbWV0ZXJzXG4gICAgY29uc3QgZmxhdHRlbmVkRm9ybVZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLmZvcm1WYWx1ZXMgfTtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhmb3JtVmFsdWVzKSkge1xuICAgICAgaWYgKHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHYgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGlmICgnZnJvbScgaW4gb2JqICYmICd0bycgaW4gb2JqKSB7XG4gICAgICAgICAgZmxhdHRlbmVkRm9ybVZhbHVlc1tgJHtrfV9mcm9tYF0gPSBvYmpbJ2Zyb20nXTtcbiAgICAgICAgICBmbGF0dGVuZWRGb3JtVmFsdWVzW2Ake2t9X3RvYF0gPSBvYmpbJ3RvJ107XG4gICAgICAgICAgZmxhdHRlbmVkRm9ybVZhbHVlc1tgJHtrfUZyb21gXSA9IG9ialsnZnJvbSddO1xuICAgICAgICAgIGZsYXR0ZW5lZEZvcm1WYWx1ZXNbYCR7a31Ub2BdID0gb2JqWyd0byddO1xuICAgICAgICAgIGlmICghZmxhdHRlbmVkRm9ybVZhbHVlc1snZnJvbURhdGUnXSkgZmxhdHRlbmVkRm9ybVZhbHVlc1snZnJvbURhdGUnXSA9IG9ialsnZnJvbSddO1xuICAgICAgICAgIGlmICghZmxhdHRlbmVkRm9ybVZhbHVlc1sndG9EYXRlJ10pIGZsYXR0ZW5lZEZvcm1WYWx1ZXNbJ3RvRGF0ZSddID0gb2JqWyd0byddO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zID0geyAuLi5mbGF0dGVuZWRGb3JtVmFsdWVzLCAuLi5yZXNvbHZlZCB9O1xuXG4gICAgLy8gRGVsZWdhdGUgdG8gUmVwb3J0QXBpRXhlY3V0aW9uU2VydmljZSBpZiBkYXRhIHNvdXJjZSBpcyBhbiBBUEkgZW5kcG9pbnRcbiAgICBjb25zdCBpc0FwaVNvdXJjZSA9XG4gICAgICBkcy50eXBlID09PSAnYXBpJyB8fFxuICAgICAgZHMuZW5kcG9pbnQuc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8XG4gICAgICBkcy5lbmRwb2ludC5zdGFydHNXaXRoKCdodHRwczovLycpIHx8XG4gICAgICAoZHMudHlwZSAhPT0gJ3RhYmxlJyAmJiBkcy50eXBlICE9PSAndmlldycgJiYgZHMudHlwZSAhPT0gJ3N0b3JlZF9wcm9jZWR1cmUnICYmIGRzLmVuZHBvaW50LnN0YXJ0c1dpdGgoJy8nKSk7XG5cbiAgICBpZiAoaXNBcGlTb3VyY2UgJiYgdGhpcy5hcGlFeGVjdXRpb25TZXJ2aWNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5ndWFyZCh0aGlzLmFwaUV4ZWN1dGlvblNlcnZpY2UuZXhlY3V0ZUFwaShcbiAgICAgICAge1xuICAgICAgICAgIGVuZHBvaW50OiBkcy5lbmRwb2ludCxcbiAgICAgICAgICBtZXRob2Q6IGRzLm1ldGhvZCBhcyBhbnksXG4gICAgICAgICAgZGF0YVBhdGg6IGRzLmRhdGFQYXRoLFxuICAgICAgICAgIGhlYWRlcnM6IGRzLmhlYWRlcnMsXG4gICAgICAgICAgdXNlUHJveHk6IGRzLnVzZVByb3h5LFxuICAgICAgICAgIGJvZHlUZW1wbGF0ZTogZHMuYm9keVRlbXBsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBmbGF0dGVuZWRGb3JtVmFsdWVzLFxuICAgICAgICByZXNvbHZlZFxuICAgICAgKSk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmFkYXB0ZXIpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignTm8gUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIgcHJvdmlkZWQgdG8gZXhlY3V0ZSB0aGUgZGF0YSBzb3VyY2UuJykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmd1YXJkKHRoaXMuYWRhcHRlci5leGVjdXRlKFxuICAgICAgeyAuLi5kcywgbmFtZTogZHMubmFtZSB8fCBkcy5lbmRwb2ludCwgdHlwZTogZHMudHlwZSA/PyAnc3RvcmVkX3Byb2NlZHVyZScgfSxcbiAgICAgIHBhcmFtc1xuICAgICkpO1xuICB9XG59XG4iXX0=
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWV4ZWN1dGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvZmVhdHVyZXMvcnVudGltZS9yZXBvcnQtZXhlY3V0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDcEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDNUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFjLFVBQVUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUNqRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUM3RixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLHVCQUF1QixFQUN2Qix1QkFBdUIsRUFDdkIsMEJBQTBCLEVBQzFCLHdCQUF3QixHQUN6QixNQUFNLHdDQUF3QyxDQUFDOztBQUVoRDs7O0dBR0c7QUFFSCxNQUFNLE9BQU8sc0JBQXNCO0lBQ2hCLE1BQU0sR0FBRyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0RCxTQUFTLEdBQUcsTUFBTSxDQUFDLHNCQUFzQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDeEUsS0FBSyxDQUFJLE1BQXFCO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMs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LEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUFDLENBQUM7WUFDdkUsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFBQyxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUFDLENBQUM7UUFDbkQsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDcEMsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLGtCQUFrQixFQUFFLEVBQzVFLE1BQU0sQ0FDUCxDQUFDLENBQUM7SUFDTCxDQUFDO3dHQTFHVSxzQkFBc0I7NEdBQXRCLHNCQUFzQixjQURULE1BQU07OzRGQUNuQixzQkFBc0I7a0JBRGxDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQldBWVNfUkVQT1JUX0VORFBPSU5UUyB9IGZyb20gJy4uLy4uL2RhdGEtYWNjZXNzL2FkYXB0ZXJzL2VuZHBvaW50LXRva2Vucyc7XG5pbXBvcnQgeyBSRVBPUlRJTkdfQ09ORklHIH0gZnJvbSAnLi4vLi4vY29yZS90b2tlbnMvcmVwb3J0aW5nLWNvbmZpZy50b2tlbic7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IsIG1hcCwgdGltZW91dCwgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmVwb3J0RGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1kZWZpbml0aW9uLm1vZGVsJztcbmltcG9ydCB7IFJlcG9ydERhdGFTb3VyY2VBZGFwdGVyIH0gZnJvbSAnLi4vLi4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL2RhdGEtc291cmNlLmNvbnRyYWN0JztcbmltcG9ydCB7IFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvcmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcG9ydEFwaUV4ZWN1dGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1hcGktZXhlY3V0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgZmluZE1pc3NpbmdDYW52YXNGaWVsZHMsXG4gIG5vcm1hbGl6ZVBhcmFtZXRlck5hbWVzLFxuICByZXNvbHZlQ2FudmFzRmllbGRWYWx1ZSxcbiAgcmVzb2x2ZUV4ZWN1dGlvbkRhdGFTb3VyY2UsXG4gIHJlc29sdmVQYXJhbWV0ZXJNYXBwaW5ncyxcbn0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9yZXBvcnQtcGFyYW1ldGVyLnV0aWwnO1xuXG4vKipcbiAqIFJ1bnMgYSByZXBvcnQncyByZXN1bHQgcXVlcnkuIFNoYXJlZCBieSB0aGUgTGl2ZSBSdW50aW1lLCB0aGUgZGVzaWduZXInc1xuICogTGl2ZSBQcmV2aWV3IGFuZCB0aGUgZGVzaWduZXIgY2FudmFzIHNvIGFsbCB0aHJlZSBiZWhhdmUgaWRlbnRpY2FsbHkuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUmVwb3J0RXhlY3V0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnID0gaW5qZWN0KFJFUE9SVElOR19DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5kcG9pbnRzID0gaW5qZWN0KEJXQVlTX1JFUE9SVF9FTkRQT0lOVFMsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgZ3VhcmQ8VD4oc291cmNlOiBPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgY29uc3QgY29udGV4dCA9ICgpID0+IEpTT04uc3RyaW5naWZ5KFt0aGlzLnNlc3Npb24/LmdldEN1cnJlbnRTZXNzaW9uQ29udGV4dCgpID8/IHt9LCB0aGlzLmVuZHBvaW50cyA/IHsgLi4udGhpcy5lbmRwb2ludHMgfSA6IG51bGxdKTtcbiAgICBjb25zdCBjYXB0dXJlZCA9IGNvbnRleHQoKTtcbiAgICByZXR1cm4gc291cmNlLnBpcGUodGFrZSgxKSwgdGltZW91dCh7IGZpcnN0OiB0aGlzLmNvbmZpZz8uZXhlY3V0aW9uVGltZW91dE1zID8/IHRoaXMuY29uZmlnPy5sb29rdXBUaW1lb3V0TXMgPz8gMzAwMDAwIH0pLCBtYXAodmFsdWUgPT4ge1xuICAgICAgaWYgKGNhcHR1cmVkICE9PSBjb250ZXh0KCkpIHRocm93IG5ldyBFcnJvcignUmVwb3J0aW5nIGNvbnRleHQgY2hhbmdlZC4gUGxlYXNlIHJ1biB0aGUgcmVwb3J0IGFnYWluLicpO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pKTtcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IGFkYXB0ZXIgPSBpbmplY3QoUmVwb3J0RGF0YVNvdXJjZUFkYXB0ZXIsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvbiA9IGluamVjdChSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpRXhlY3V0aW9uU2VydmljZSA9IGluamVjdChSZXBvcnRBcGlFeGVjdXRpb25TZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIC8qKiBDYW52YXMgZmllbGQga2V5cyB0aGUgdXNlciBzdGlsbCBoYXMgdG8gZmlsbCBiZWZvcmUgdGhlIHJlcG9ydCBjYW4gcnVuLiAqL1xuICBnZXRNaXNzaW5nRmllbGRzKGRlZjogUmVwb3J0RGVmaW5pdGlvbiwgZm9ybVZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZHMgPSByZXNvbHZlRXhlY3V0aW9uRGF0YVNvdXJjZShkZWYpO1xuICAgIHJldHVybiBmaW5kTWlzc2luZ0NhbnZhc0ZpZWxkcyhkcz8ucGFyYW1ldGVyTWFwcGluZ3MsIGZvcm1WYWx1ZXMpO1xuICB9XG5cbiAgZXhlY3V0ZShkZWY6IFJlcG9ydERlZmluaXRpb24sIGZvcm1WYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogT2JzZXJ2YWJsZTx1bmtub3duW10+IHtcbiAgICBjb25zdCBkcyA9IHJlc29sdmVFeGVjdXRpb25EYXRhU291cmNlKGRlZik7XG4gICAgaWYgKCFkcykge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgbmV3IEVycm9yKFxuICAgICAgICAgICAgJ05vIGRhdGEgc291cmNlIGNvbmZpZ3VyZWQuIFNlbGVjdCB0aGUgUnVuIFJlcG9ydCBidXR0b24gYW5kIGNob29zZSBhIHN0b3JlZCBwcm9jZWR1cmUgaW4gaXRzIFJlcG9ydCBEYXRhIHNlY3Rpb24uJ1xuICAgICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuc2Vzc2lvbj8uZ2V0Q3VycmVudFNlc3Npb25Db250ZXh0KCkgPz8ge307XG4gICAgbGV0IHJlc29sdmVkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICB0cnkgeyByZXNvbHZlZCA9IHJlc29sdmVQYXJhbWV0ZXJNYXBwaW5ncyhkcy5wYXJhbWV0ZXJNYXBwaW5ncywgc2Vzc2lvbiwgZm9ybVZhbHVlcyk7IH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpOyB9XG5cbiAgICAvLyBFeHBhbmQgY29tcG91bmQgb2JqZWN0cyAoZS5nLiBkYXRlUmFuZ2U6IHsgZnJvbSwgdG8gfSkgaW50byB0b3AtbGV2ZWwgcGFyYW1ldGVyc1xuICAgIGNvbnN0IGZsYXR0ZW5lZEZvcm1WYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyAuLi5mb3JtVmFsdWVzIH07XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoZm9ybVZhbHVlcykpIHtcbiAgICAgIGlmICh2ICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2KSkge1xuICAgICAgICBjb25zdCBvYmogPSB2IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICBpZiAoJ2Zyb20nIGluIG9iaiAmJiAndG8nIGluIG9iaikge1xuICAgICAgICAgIGZsYXR0ZW5lZEZvcm1WYWx1ZXNbYCR7a31fZnJvbWBdID0gb2JqWydmcm9tJ107XG4gICAgICAgICAgZmxhdHRlbmVkRm9ybVZhbHVlc1tgJHtrfV90b2BdID0gb2JqWyd0byddO1xuICAgICAgICAgIGZsYXR0ZW5lZEZvcm1WYWx1ZXNbYCR7a31Gcm9tYF0gPSBvYmpbJ2Zyb20nXTtcbiAgICAgICAgICBmbGF0dGVuZWRGb3JtVmFsdWVzW2Ake2t9VG9gXSA9IG9ialsndG8nXTtcbiAgICAgICAgICBpZiAoIWZsYXR0ZW5lZEZvcm1WYWx1ZXNbJ2Zyb21EYXRlJ10pIGZsYXR0ZW5lZEZvcm1WYWx1ZXNbJ2Zyb21EYXRlJ10gPSBvYmpbJ2Zyb20nXTtcbiAgICAgICAgICBpZiAoIWZsYXR0ZW5lZEZvcm1WYWx1ZXNbJ3RvRGF0ZSddKSBmbGF0dGVuZWRGb3JtVmFsdWVzWyd0b0RhdGUnXSA9IG9ialsndG8nXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuXG5cbiAgICAvLyBEZWxlZ2F0ZSB0byBSZXBvcnRBcGlFeGVjdXRpb25TZXJ2aWNlIGlmIGRhdGEgc291cmNlIGlzIGFuIEFQSSBlbmRwb2ludFxuICAgIGNvbnN0IGlzQXBpU291cmNlID1cbiAgICAgIGRzLnR5cGUgPT09ICdhcGknIHx8XG4gICAgICBkcy5lbmRwb2ludC5zdGFydHNXaXRoKCdodHRwOi8vJykgfHxcbiAgICAgIGRzLmVuZHBvaW50LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykgfHxcbiAgICAgIChkcy50eXBlICE9PSAndGFibGUnICYmIGRzLnR5cGUgIT09ICd2aWV3JyAmJiBkcy50eXBlICE9PSAnc3RvcmVkX3Byb2NlZHVyZScgJiYgZHMuZW5kcG9pbnQuc3RhcnRzV2l0aCgnLycpKTtcblxuICAgIGlmIChpc0FwaVNvdXJjZSAmJiB0aGlzLmFwaUV4ZWN1dGlvblNlcnZpY2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmd1YXJkKHRoaXMuYXBpRXhlY3V0aW9uU2VydmljZS5leGVjdXRlQXBpKFxuICAgICAgICB7XG4gICAgICAgICAgZW5kcG9pbnQ6IGRzLmVuZHBvaW50LFxuICAgICAgICAgIG1ldGhvZDogZHMubWV0aG9kIGFzIGFueSxcbiAgICAgICAgICBkYXRhUGF0aDogZHMuZGF0YVBhdGgsXG4gICAgICAgICAgaGVhZGVyczogZHMuaGVhZGVycyxcbiAgICAgICAgICB1c2VQcm94eTogZHMudXNlUHJveHksXG4gICAgICAgICAgYm9keVRlbXBsYXRlOiBkcy5ib2R5VGVtcGxhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGZsYXR0ZW5lZEZvcm1WYWx1ZXMsXG4gICAgICAgIHJlc29sdmVkXG4gICAgICApKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYWRhcHRlcikge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdObyBSZXBvcnREYXRhU291cmNlQWRhcHRlciBwcm92aWRlZCB0byBleGVjdXRlIHRoZSBkYXRhIHNvdXJjZS4nKSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNQcm9jZWR1cmUgPSBkcy5tZXRob2QgPT09ICdTVE9SRURfUFJPQ0VEVVJFJyB8fCBkcy50eXBlID09PSAnc3RvcmVkX3Byb2NlZHVyZScgfHwgZHMudHlwZSA9PT0gJ3Byb2NlZHVyZScgfHwgIWRzLnR5cGU7XG4gICAgbGV0IHBhcmFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLmZsYXR0ZW5lZEZvcm1WYWx1ZXMsIC4uLnJlc29sdmVkIH07XG4gICAgaWYgKGlzUHJvY2VkdXJlKSB7XG4gICAgICAvLyBGb3JtIGNvbnRyb2xzIGFyZSBleHByZXNzaW9uIGlucHV0cywgbmV2ZXIgYW4gaW1wbGljaXQgU1FMIGFyZ3VtZW50IGxpc3QuXG4gICAgICBjb25zdCBkZWNsYXJlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICAgIGNvbnN0IG1hcHBlZE5hbWVzID0gbmV3IFNldChPYmplY3Qua2V5cyhyZXNvbHZlZCkubWFwKGtleSA9PiBrZXkudG9Mb3dlckNhc2UoKSkpO1xuICAgICAgY29uc3Qga2V5cyA9IGRzLnBhcmFtZXRlcktleXMgPz8gKGRzLnBhcmFtZXRlck1hcHBpbmdzID09PSB1bmRlZmluZWQgPyBbXG4gICAgICAgIC4uLmRlZi5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVyLmtleSksXG4gICAgICAgIC4uLmRlZi5jb21wb25lbnRzLmZsYXRNYXAoY29tcG9uZW50ID0+IGNvbXBvbmVudC5iaW5kaW5nPy5wYXJhbWV0ZXJLZXkgPyBbY29tcG9uZW50LmJpbmRpbmcucGFyYW1ldGVyS2V5XSA6IFtdKSxcbiAgICAgIF0gOiBbXSk7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIGlmIChtYXBwZWROYW1lcy5oYXMoa2V5LnJlcGxhY2UoL15AKy8sICcnKS50b0xvd2VyQ2FzZSgpKSkgY29udGludWU7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBkZWYuY29tcG9uZW50cy5maW5kKGNvbXBvbmVudCA9PiBjb21wb25lbnQuYmluZGluZz8ucGFyYW1ldGVyS2V5ID09PSBrZXkpO1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXIgPSBkZWYucGFyYW1ldGVycy5maW5kKGl0ZW0gPT4gaXRlbS5rZXkgPT09IGtleSk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcmVzb2x2ZUNhbnZhc0ZpZWxkVmFsdWUoZm9ybVZhbHVlcywgY29udHJvbD8ua2V5IHx8IGtleSkgPz8gcmVzb2x2ZUNhbnZhc0ZpZWxkVmFsdWUoZm9ybVZhbHVlcywga2V5LnJlcGxhY2UoL15AKy8sICcnKSkgPz8gcGFyYW1ldGVyPy5kZWZhdWx0VmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVjbGFyZWQsIGtleSwgeyB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgICAgdHJ5IHsgcGFyYW1zID0gbm9ybWFsaXplUGFyYW1ldGVyTmFtZXMoeyAuLi5kZWNsYXJlZCwgLi4ucmVzb2x2ZWQgfSk7IH1cbiAgICAgIGNhdGNoIChlcnJvcikgeyByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7IH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5ndWFyZCh0aGlzLmFkYXB0ZXIuZXhlY3V0ZShcbiAgICAgIHsgLi4uZHMsIG5hbWU6IGRzLm5hbWUgfHwgZHMuZW5kcG9pbnQsIHR5cGU6IGRzLnR5cGUgPz8gJ3N0b3JlZF9wcm9jZWR1cmUnIH0sXG4gICAgICBwYXJhbXNcbiAgICApKTtcbiAgfVxufVxuIl19