@openziti/ziti-console-lib 0.7.1 → 0.8.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 (139) hide show
  1. package/assets/fonts/icomoon.eot +0 -0
  2. package/assets/fonts/icomoon.svg +118 -0
  3. package/assets/fonts/icomoon.ttf +0 -0
  4. package/assets/fonts/icomoon.woff +0 -0
  5. package/assets/fonts/icomoon.woff2 +0 -0
  6. package/assets/styles/global.scss +147 -3
  7. package/assets/styles/icons.css +13 -0
  8. package/esm2022/lib/features/card-list/card-list.component.mjs +12 -11
  9. package/esm2022/lib/features/creation-summary-dialog/creation-summary-dialog.component.mjs +1 -1
  10. package/esm2022/lib/features/dynamic-widgets/password/password-input.component.mjs +13 -3
  11. package/esm2022/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.mjs +1 -1
  12. package/esm2022/lib/features/dynamic-widgets/string/string-input.component.mjs +13 -3
  13. package/esm2022/lib/features/login/login-dialog.component.mjs +123 -0
  14. package/esm2022/lib/features/preview-selections/preview-selections.component.mjs +1 -1
  15. package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.component.mjs +4 -4
  16. package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.service.mjs +3 -15
  17. package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.mjs +404 -0
  18. package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.mjs +96 -0
  19. package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.mjs +222 -0
  20. package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.mjs +55 -0
  21. package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +3 -3
  22. package/esm2022/lib/features/projectable-forms/configuration/configuration.service.mjs +3 -15
  23. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +3 -3
  24. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.service.mjs +3 -15
  25. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +3 -3
  26. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.mjs +3 -15
  27. package/esm2022/lib/features/projectable-forms/form-field-container/form-field-container.component.mjs +24 -3
  28. package/esm2022/lib/features/projectable-forms/form-header/form-header.component.mjs +15 -3
  29. package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +3 -3
  30. package/esm2022/lib/features/projectable-forms/identity/identity-form.service.mjs +3 -15
  31. package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.mjs +24 -4
  32. package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.mjs +3 -15
  33. package/esm2022/lib/features/projectable-forms/projectable-form.class.mjs +24 -4
  34. package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +3 -3
  35. package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +3 -15
  36. package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +6 -6
  37. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +3 -3
  38. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.mjs +3 -15
  39. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +3 -3
  40. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.service.mjs +3 -15
  41. package/esm2022/lib/features/projectable-forms/terminator/terminator-form.component.mjs +3 -3
  42. package/esm2022/lib/features/sidebars/side-banner/side-banner.component.mjs +2 -2
  43. package/esm2022/lib/features/sidebars/side-toolbar/side-toolbar.component.mjs +2 -2
  44. package/esm2022/lib/features/wrappers/zac-wrapper.service.mjs +1 -4
  45. package/esm2022/lib/models/certificate-authority.mjs +16 -0
  46. package/esm2022/lib/models/jwt-signer.mjs +2 -1
  47. package/esm2022/lib/pages/auth-policies/auth-policies-page.component.mjs +3 -3
  48. package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.component.mjs +120 -0
  49. package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.service.mjs +240 -0
  50. package/esm2022/lib/pages/service-policies/service-policies-page.component.mjs +2 -1
  51. package/esm2022/lib/services/login-service.class.mjs +5 -1
  52. package/esm2022/lib/services/node-data.service.mjs +8 -13
  53. package/esm2022/lib/services/validation.service.mjs +3 -12
  54. package/esm2022/lib/services/ziti-controller-data.service.mjs +23 -5
  55. package/esm2022/lib/services/ziti-data.service.mjs +27 -2
  56. package/esm2022/lib/shared/list-page-service.class.mjs +9 -4
  57. package/esm2022/lib/ziti-console-lib.module.mjs +19 -5
  58. package/esm2022/public-api.mjs +7 -1
  59. package/fesm2022/openziti-ziti-console-lib.mjs +1493 -303
  60. package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
  61. package/lib/features/card-list/card-list.component.d.ts +3 -2
  62. package/lib/features/card-list/card-list.component.d.ts.map +1 -1
  63. package/lib/features/dynamic-widgets/password/password-input.component.d.ts +3 -1
  64. package/lib/features/dynamic-widgets/password/password-input.component.d.ts.map +1 -1
  65. package/lib/features/dynamic-widgets/string/string-input.component.d.ts +3 -1
  66. package/lib/features/dynamic-widgets/string/string-input.component.d.ts.map +1 -1
  67. package/lib/features/login/login-dialog.component.d.ts +29 -0
  68. package/lib/features/login/login-dialog.component.d.ts.map +1 -0
  69. package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts +1 -1
  70. package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts.map +1 -1
  71. package/lib/features/projectable-forms/auth-policy/auth-policy-form.service.d.ts.map +1 -1
  72. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts +81 -0
  73. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts.map +1 -0
  74. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.d.ts +37 -0
  75. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.d.ts.map +1 -0
  76. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts +63 -0
  77. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts.map +1 -0
  78. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.d.ts +28 -0
  79. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.d.ts.map +1 -0
  80. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts +1 -1
  81. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts.map +1 -1
  82. package/lib/features/projectable-forms/configuration/configuration.service.d.ts.map +1 -1
  83. package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts +1 -1
  84. package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts.map +1 -1
  85. package/lib/features/projectable-forms/edge-router/edge-router-form.service.d.ts.map +1 -1
  86. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts +1 -1
  87. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts.map +1 -1
  88. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts.map +1 -1
  89. package/lib/features/projectable-forms/form-field-container/form-field-container.component.d.ts +5 -1
  90. package/lib/features/projectable-forms/form-field-container/form-field-container.component.d.ts.map +1 -1
  91. package/lib/features/projectable-forms/form-header/form-header.component.d.ts +5 -1
  92. package/lib/features/projectable-forms/form-header/form-header.component.d.ts.map +1 -1
  93. package/lib/features/projectable-forms/identity/identity-form.component.d.ts +1 -1
  94. package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +1 -1
  95. package/lib/features/projectable-forms/identity/identity-form.service.d.ts.map +1 -1
  96. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts +4 -1
  97. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts.map +1 -1
  98. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.d.ts.map +1 -1
  99. package/lib/features/projectable-forms/projectable-form.class.d.ts +5 -1
  100. package/lib/features/projectable-forms/projectable-form.class.d.ts.map +1 -1
  101. package/lib/features/projectable-forms/service/service-form.component.d.ts +1 -1
  102. package/lib/features/projectable-forms/service/service-form.component.d.ts.map +1 -1
  103. package/lib/features/projectable-forms/service/service-form.service.d.ts.map +1 -1
  104. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts +3 -2
  105. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +1 -1
  106. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts +1 -1
  107. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts.map +1 -1
  108. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts.map +1 -1
  109. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts +1 -1
  110. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts.map +1 -1
  111. package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts.map +1 -1
  112. package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts +1 -1
  113. package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts.map +1 -1
  114. package/lib/features/wrappers/zac-wrapper.service.d.ts.map +1 -1
  115. package/lib/models/certificate-authority.d.ts +14 -0
  116. package/lib/models/certificate-authority.d.ts.map +1 -0
  117. package/lib/models/jwt-signer.d.ts +1 -0
  118. package/lib/models/jwt-signer.d.ts.map +1 -1
  119. package/lib/pages/certificate-authorities/certificate-authorities-page.component.d.ts +30 -0
  120. package/lib/pages/certificate-authorities/certificate-authorities-page.component.d.ts.map +1 -0
  121. package/lib/pages/certificate-authorities/certificate-authorities-page.service.d.ts +35 -0
  122. package/lib/pages/certificate-authorities/certificate-authorities-page.service.d.ts.map +1 -0
  123. package/lib/pages/service-policies/service-policies-page.component.d.ts.map +1 -1
  124. package/lib/services/login-service.class.d.ts +6 -2
  125. package/lib/services/login-service.class.d.ts.map +1 -1
  126. package/lib/services/node-data.service.d.ts +1 -0
  127. package/lib/services/node-data.service.d.ts.map +1 -1
  128. package/lib/services/validation.service.d.ts.map +1 -1
  129. package/lib/services/ziti-controller-data.service.d.ts +2 -2
  130. package/lib/services/ziti-controller-data.service.d.ts.map +1 -1
  131. package/lib/services/ziti-data.service.d.ts +6 -2
  132. package/lib/services/ziti-data.service.d.ts.map +1 -1
  133. package/lib/shared/list-page-service.class.d.ts +1 -0
  134. package/lib/shared/list-page-service.class.d.ts.map +1 -1
  135. package/lib/ziti-console-lib.module.d.ts +22 -18
  136. package/lib/ziti-console-lib.module.d.ts.map +1 -1
  137. package/package.json +1 -1
  138. package/public-api.d.ts +6 -0
  139. package/public-api.d.ts.map +1 -1
@@ -25,7 +25,7 @@ import * as i14 from "../../../services/settings.service";
25
25
  import * as i15 from "../../../services/ziti-data.service";
26
26
  class ServicePolicyFormComponent extends ProjectableForm {
27
27
  constructor(settingsService, svc, zitiService, growlerService, extService, router, route, location) {
28
- super(growlerService, extService, zitiService, router, route, location);
28
+ super(growlerService, extService, zitiService, router, route, location, settingsService);
29
29
  this.settingsService = settingsService;
30
30
  this.svc = svc;
31
31
  this.zitiService = zitiService;
@@ -252,7 +252,7 @@ class ServicePolicyFormComponent extends ProjectableForm {
252
252
  provide: MatDialogRef,
253
253
  useValue: {}
254
254
  }
255
- ], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Service Policy: ' : 'Create New Service Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n ></lib-form-header>\n <div class=\"service-policy-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Service Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this edge service policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Service Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100003'\"\n [helpText]=\"'Choose which services to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedServiceRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedServiceNamedAttributes\"\n [availableRoleAttributes]=\"svc.serviceRoleAttributes\"\n [availableNamedAttributes]=\"svc.serviceNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes)\"\n [placeholder]=\"'Select service attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Identity Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100002'\"\n [helpText]=\"'Choose which identities to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedIdentityRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedIdentityNamedAttributes\"\n [availableRoleAttributes]=\"svc.identityRoleAttributes\"\n [availableNamedAttributes]=\"svc.identityNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes)\"\n [placeholder]=\"'Select identity attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Posture Check Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100001'\"\n [helpText]=\"'Choose which posture checks to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedPostureRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedPostureNamedAttributes\"\n [(selectedRoleAttributes)]=\"svc.postureRoleAttributes\"\n [availableNamedAttributes]=\"svc.postureNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedPostureChecksByAttribute(selectedPostureRoleAttributes, selectedPostureNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedPostureChecksByAttribute(selectedPostureRoleAttributes, selectedPostureNamedAttributes)\"\n [placeholder]=\"'Select posture check attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Type'\"\n [title2]=\"'Semantic'\"\n [layout]=\"'row'\"\n >\n <select\n [(ngModel)]=\"formData.type\"\n id=\"PolicyType\"\n class=\"form-field-dropdown\"\n >\n <option value=\"Bind\">Bind</option>\n <option value=\"Dial\">Dial</option>\n </select>\n <select\n [(ngModel)]=\"formData.semantic\"\n id=\"PolicySemantic\"\n class=\"form-field-dropdown\"\n >\n <option value=\"AnyOf\">AnyOf</option>\n <option value=\"AllOf\">AllOf</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'Associated Services'\"\n [count]=\"svc.associatedServiceNames.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all services that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"svc.associatedServiceNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Identities'\"\n [count]=\"svc.associatedIdentityNames.length\"\n [helpText]=\"'Preview list of all Identities that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"identitiesLoading\"\n [allNames]=\"svc.associatedIdentityNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Posture Checks'\"\n [count]=\"svc.associatedPostureCheckNames.length\"\n [helpText]=\"'Preview list of all Posture Checks that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"postureChecksLoading\"\n [allNames]=\"svc.associatedPostureCheckNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"icon-copy copy\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>", styles: [""], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.FormHeaderComponent, selector: "lib-form-header", inputs: ["data", "title", "moreActions", "formView", "saveDisabled", "saveTooltip", "actionButtonText", "moreActionsText"], outputs: ["formViewChange", "actionRequested"] }, { kind: "component", type: i7.FormFieldContainerComponent, selector: "lib-form-field-container", inputs: ["title", "title2", "titleIcon", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "showHeader", "headerActions"], outputs: ["actionRequested"] }, { kind: "component", type: i8.PreviewListComponent, selector: "lib-preview-list", inputs: ["label", "clickable", "isLoading", "allNames", "items", "allowRemove", "tooltip", "showfilter"], outputs: ["itemSelected", "itemRemoved"] }, { kind: "component", type: i9.LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: i10.FormFieldToggleComponent, selector: "lib-form-field-toggle", inputs: ["label", "orientation", "labelOn", "labelOff", "toggleOn"], outputs: ["toggleOnChange"] }, { kind: "component", type: i11.JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }, { kind: "component", type: i12.TagSelectorComponent, selector: "lib-tag-selector", inputs: ["placeholder", "disableField", "disableCreate", "hideOption", "isLoading", "errorMessage", "focusOnInit", "selectedRoleAttributes", "selectedNamedAttributes", "hasError", "availableRoleAttributes", "availableNamedAttributes"], outputs: ["addRoleAttribute", "addNamedAttribute", "roleAttributeRemoved", "namedAttributeRemoved", "selectedRoleAttributesChange", "selectedNamedAttributesChange", "filterChange"] }, { kind: "component", type: i13.CustomTagsComponent, selector: "lib-custom-tags", inputs: ["tags"], outputs: ["tagsChange"] }] }); }
255
+ ], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"projectable-form-wrapper\"\n (keyup.enter)=\"save($event)\"\n (keyup.escape)=\"closeModal(false)\"\n>\n <lib-form-header\n [data]=\"formData\"\n [title]=\"formData.id ? 'Edit Service Policy: ' : 'Create New Service Policy'\"\n [moreActions]=\"moreActions\"\n (actionRequested)=\"headerActionRequested($event)\"\n [(formView)]=\"formView\"\n ></lib-form-header>\n <div class=\"service-policy-form-container projectable-form-container\">\n <div class=\"projectable-form-main-column form-group-row\" *ngIf=\"formView === 'simple'\">\n <div class=\"form-group-column three-fifths\">\n <lib-form-field-container [title]=\"'Service Policy Name'\" [label]=\"'REQUIRED'\">\n <input\n class=\"form-field-input\"\n placeholder=\"Name this edge service policy\"\n [ngClass]=\"{error: errors['name']}\"\n [(ngModel)]=\"formData.name\"\n autofocus\n #nameFieldInput\n />\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Service Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100003'\"\n [helpText]=\"'Choose which services to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedServiceRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedServiceNamedAttributes\"\n [availableRoleAttributes]=\"svc.serviceRoleAttributes\"\n [availableNamedAttributes]=\"svc.serviceNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedServicesByAttribute(selectedServiceRoleAttributes, selectedServiceNamedAttributes)\"\n [placeholder]=\"'Select service attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Identity Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100002'\"\n [helpText]=\"'Choose which identities to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedIdentityRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedIdentityNamedAttributes\"\n [availableRoleAttributes]=\"svc.identityRoleAttributes\"\n [availableNamedAttributes]=\"svc.identityNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedIdentitiesByAttribute(selectedIdentityRoleAttributes, selectedIdentityNamedAttributes)\"\n [placeholder]=\"'Select identity attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Select Posture Check Attributes'\"\n [label]=\"'OPTIONAL'\"\n [contentStyle]=\"'z-index: 100001'\"\n [helpText]=\"'Choose which posture checks to associate to this policy by picking from the list of available attributes'\"\n >\n <lib-tag-selector\n [(selectedRoleAttributes)]=\"selectedPostureRoleAttributes\"\n [(selectedNamedAttributes)]=\"selectedPostureNamedAttributes\"\n [(selectedRoleAttributes)]=\"svc.postureRoleAttributes\"\n [availableNamedAttributes]=\"svc.postureNamedAttributes\"\n (selectedNamedAttributesChange)=\"svc.getAssociatedPostureChecksByAttribute(selectedPostureRoleAttributes, selectedPostureNamedAttributes)\"\n (selectedRoleAttributesChange)=\"svc.getAssociatedPostureChecksByAttribute(selectedPostureRoleAttributes, selectedPostureNamedAttributes)\"\n [placeholder]=\"'Select posture check attributes'\"\n ></lib-tag-selector>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Type'\"\n [title2]=\"'Semantic'\"\n [layout]=\"'row'\"\n >\n <select\n [(ngModel)]=\"formData.type\"\n id=\"PolicyType\"\n class=\"form-field-dropdown\"\n >\n <option value=\"Bind\">Bind</option>\n <option value=\"Dial\">Dial</option>\n </select>\n <select\n [(ngModel)]=\"formData.semantic\"\n id=\"PolicySemantic\"\n class=\"form-field-dropdown\"\n >\n <option value=\"AnyOf\">AnyOf</option>\n <option value=\"AllOf\">AllOf</option>\n </select>\n </lib-form-field-container>\n <lib-form-field-toggle [(toggleOn)]=\"showMore\" (toggleOnChange)=\"showMoreChanged($event)\" style=\"margin: 0px 10px\"></lib-form-field-toggle>\n <div [hidden]=\"!showMore\" class=\"form-group-column\">\n <lib-form-field-container\n [title]=\"'Custom Tags'\"\n [label]=\"'OPTIONAL'\"\n class=\"form-field-advanced\"\n *ngIf=\"!hideTags\"\n >\n <lib-custom-tags [(tags)]=\"formData.tags\"></lib-custom-tags>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column two-fifths\">\n <lib-form-field-container\n [title]=\"'Associated Services'\"\n [count]=\"svc.associatedServiceNames.length\"\n [class]=\"'hide-overflow'\"\n [helpText]=\"'Preview list of all services that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"servicesLoading\"\n [allNames]=\"svc.associatedServiceNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Identities'\"\n [count]=\"svc.associatedIdentityNames.length\"\n [helpText]=\"'Preview list of all Identities that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"identitiesLoading\"\n [allNames]=\"svc.associatedIdentityNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'Associated Posture Checks'\"\n [count]=\"svc.associatedPostureCheckNames.length\"\n [helpText]=\"'Preview list of all Posture Checks that this Service Policy is associated with.'\"\n >\n <lib-preview-list\n [clickable]=\"false\"\n [isLoading]=\"postureChecksLoading\"\n [allNames]=\"svc.associatedPostureCheckNames\"\n ></lib-preview-list>\n </lib-form-field-container>\n <lib-form-field-container\n [title]=\"'API Calls'\"\n [headerActions]=\"apiOptions\"\n (actionRequested)=\"apiActionRequested($event)\"\n >\n <div class=\"form-row\">\n <input class=\"form-field-input\" [value]=\"apiCallURL\"/>\n <div class=\"icon-copy copy\" (click)=\"copyToClipboard(apiCallURL)\"></div>\n </div>\n <lib-json-view *ngIf=\"formData\" [(data)]=\"apiData\" [readOnly]=\"true\" [showCopy]=\"true\"></lib-json-view>\n </lib-form-field-container>\n </div>\n </div>\n <div class=\"form-group-column\" *ngIf=\"formView === 'raw'\">\n <lib-json-view *ngIf=\"formData\" [(data)]=\"formData\"></lib-json-view>\n </div>\n </div>\n</div>\n<lib-loading-indicator *ngIf=\"isLoading\" [isLoading]=\"isLoading\"></lib-loading-indicator>", styles: [""], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.FormHeaderComponent, selector: "lib-form-header", inputs: ["data", "badges", "title", "moreActions", "formView", "saveDisabled", "saveTooltip", "actionButtonText", "moreActionsText", "showHeaderToggle", "showHeaderButton"], outputs: ["formViewChange", "actionRequested"] }, { kind: "component", type: i7.FormFieldContainerComponent, selector: "lib-form-field-container", inputs: ["title", "title2", "titleIcon", "layout", "helpText", "helpText2", "label", "count", "action", "actionLabel", "class", "contentStyle", "showHeader", "showToggle", "headerActions", "headerToggle"], outputs: ["actionRequested", "headerToggleChange"] }, { kind: "component", type: i8.PreviewListComponent, selector: "lib-preview-list", inputs: ["label", "clickable", "isLoading", "allNames", "items", "allowRemove", "tooltip", "showfilter"], outputs: ["itemSelected", "itemRemoved"] }, { kind: "component", type: i9.LoadingIndicatorComponent, selector: "lib-loading-indicator", inputs: ["isLoading"] }, { kind: "component", type: i10.FormFieldToggleComponent, selector: "lib-form-field-toggle", inputs: ["label", "orientation", "labelOn", "labelOff", "toggleOn"], outputs: ["toggleOnChange"] }, { kind: "component", type: i11.JsonViewComponent, selector: "lib-json-view", inputs: ["data", "schema", "readOnly", "jsonInvalid", "showCopy"], outputs: ["dataChange", "jsonChange", "jsonInvalidChange"] }, { kind: "component", type: i12.TagSelectorComponent, selector: "lib-tag-selector", inputs: ["placeholder", "disableField", "disableCreate", "hideOption", "isLoading", "errorMessage", "focusOnInit", "selectedRoleAttributes", "selectedNamedAttributes", "hasError", "availableRoleAttributes", "availableNamedAttributes"], outputs: ["addRoleAttribute", "addNamedAttribute", "roleAttributeRemoved", "namedAttributeRemoved", "selectedRoleAttributesChange", "selectedNamedAttributesChange", "filterChange"] }, { kind: "component", type: i13.CustomTagsComponent, selector: "lib-custom-tags", inputs: ["tags"], outputs: ["tagsChange"] }] }); }
256
256
  }
257
257
  export { ServicePolicyFormComponent };
258
258
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ServicePolicyFormComponent, decorators: [{
@@ -277,4 +277,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
277
277
  }], close: [{
278
278
  type: Output
279
279
  }] } });
280
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1wb2xpY3ktZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvcHJvamVjdGFibGUtZm9ybXMvc2VydmljZS1wb2xpY3kvc2VydmljZS1wb2xpY3ktZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvcHJvamVjdGFibGUtZm9ybXMvc2VydmljZS1wb2xpY3kvc2VydmljZS1wb2xpY3ktZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUlOLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGdCQUFnQixFQUFrQixNQUFNLG9DQUFvQyxDQUFDO0FBRXJGLE9BQU8sRUFBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUNsRCxPQUFPLEVBQUMsaUJBQWlCLEVBQWtCLE1BQU0scUNBQXFDLENBQUM7QUFFdkYsT0FBTyxFQUEyQixnQ0FBZ0MsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3pHLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUV0RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0QsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQUkzRCxNQVdhLDBCQUEyQixTQUFRLGVBQWU7SUFzQjdELFlBQ3FDLGVBQWdDLEVBQzFELEdBQTZCLEVB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QUs7SUFDTCxDQUFDOytHQS9RVSwwQkFBMEIsa0JBdUJ6QixnQkFBZ0IscURBRWhCLGlCQUFpQiwyQ0FFakIsZ0NBQWdDO21HQTNCakMsMEJBQTBCLGlIQVAxQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxZQUFZO2dCQUNyQixRQUFRLEVBQUUsRUFBRTthQUNiO1NBQ0Ysc0VDcENILDZoVEErSnlGOztTRHpINUUsMEJBQTBCOzRGQUExQiwwQkFBMEI7a0JBWHRDLFNBQVM7K0JBQ0UseUJBQXlCLGFBR3hCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxZQUFZOzRCQUNyQixRQUFRLEVBQUUsRUFBRTt5QkFDYjtxQkFDRjs7MEJBeUJJLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFFdkIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUV4QixNQUFNOzJCQUFDLGdDQUFnQztxSEExQm5DLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0ksS0FBSztzQkFBZCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIEFmdGVyVmlld0luaXQsXG4gIEluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7UHJvamVjdGFibGVGb3JtfSBmcm9tIFwiLi4vcHJvamVjdGFibGUtZm9ybS5jbGFzc1wiO1xuaW1wb3J0IHtTRVRUSU5HU19TRVJWSUNFLCBTZXR0aW5nc1NlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy9zZXR0aW5ncy5zZXJ2aWNlXCI7XG5cbmltcG9ydCB7aXNFbXB0eSwgY2xvbmVEZWVwLCBpbnZlcnR9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1pJVElfREFUQV9TRVJWSUNFLCBaaXRpRGF0YVNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy96aXRpLWRhdGEuc2VydmljZVwiO1xuaW1wb3J0IHtHcm93bGVyU2VydmljZX0gZnJvbSBcIi4uLy4uL21lc3NhZ2luZy9ncm93bGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7U2VydmljZVBvbGljeUZvcm1TZXJ2aWNlLCBTRVJWSUNFX1BPTElDWV9FWFRFTlNJT05fU0VSVklDRX0gZnJvbSAnLi9zZXJ2aWNlLXBvbGljeS1mb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHtNYXREaWFsb2dSZWZ9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcbmltcG9ydCB7RXh0ZW5zaW9uU2VydmljZX0gZnJvbSBcIi4uLy4uL2V4dGVuZGFibGUvZXh0ZW5zaW9ucy1ub29wLnNlcnZpY2VcIjtcbmltcG9ydCB7U2VydmljZVBvbGljeX0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9zZXJ2aWNlLXBvbGljeVwiO1xuaW1wb3J0IHtHcm93bGVyTW9kZWx9IGZyb20gXCIuLi8uLi9tZXNzYWdpbmcvZ3Jvd2xlci5tb2RlbFwiO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQge0xvY2F0aW9ufSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1zZXJ2aWNlLXBvbGljeS1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlcnZpY2UtcG9saWN5LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zZXJ2aWNlLXBvbGljeS1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE1hdERpYWxvZ1JlZixcbiAgICAgIHVzZVZhbHVlOiB7fVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBTZXJ2aWNlUG9saWN5Rm9ybUNvbXBvbmVudCBleHRlbmRzIFByb2plY3RhYmxlRm9ybSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBmb3JtRGF0YTogU2VydmljZVBvbGljeSB8IGFueSA9IHt9O1xuICBAT3V0cHV0KCkgY2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgc2VsZWN0ZWRTZXJ2aWNlUm9sZUF0dHJpYnV0ZXMgPSBbXTtcbiAgc2VsZWN0ZWRTZXJ2aWNlTmFtZWRBdHRyaWJ1dGVzID0gW107XG4gIHNlbGVjdGVkSWRlbnRpdHlSb2xlQXR0cmlidXRlcyA9IFtdO1xuICBzZWxlY3RlZElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzID0gW107XG4gIHNlbGVjdGVkUG9zdHVyZVJvbGVBdHRyaWJ1dGVzID0gW107XG4gIHNlbGVjdGVkUG9zdHVyZU5hbWVkQXR0cmlidXRlcyA9IFtdO1xuXG4gIGZvcm1WaWV3ID0gJ3NpbXBsZSc7XG4gIGlzRWRpdGluZyA9IGZhbHNlO1xuICBzZXJ2aWNlc0xvYWRpbmcgPSBmYWxzZTtcbiAgaWRlbnRpdGllc0xvYWRpbmcgPSBmYWxzZTtcbiAgcG9zdHVyZUNoZWNrc0xvYWRpbmcgPSBmYWxzZTtcblxuICBzZXR0aW5nczogYW55ID0ge307XG5cbiAgb3ZlcnJpZGUgZW50aXR5VHlwZSA9ICdzZXJ2aWNlLXBvbGljaWVzJztcbiAgb3ZlcnJpZGUgZW50aXR5Q2xhc3MgPSBTZXJ2aWNlUG9saWN5O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgQEluamVjdChTRVRUSU5HU19TRVJWSUNFKSBwdWJsaWMgc2V0dGluZ3NTZXJ2aWNlOiBTZXR0aW5nc1NlcnZpY2UsXG4gICAgICBwdWJsaWMgc3ZjOiBTZXJ2aWNlUG9saWN5Rm9ybVNlcnZpY2UsXG4gICAgICBASW5qZWN0KFpJVElfREFUQV9TRVJWSUNFKSBvdmVycmlkZSB6aXRpU2VydmljZTogWml0aURhdGFTZXJ2aWNlLFxuICAgICAgZ3Jvd2xlclNlcnZpY2U6IEdyb3dsZXJTZXJ2aWNlLFxuICAgICAgQEluamVjdChTRVJWSUNFX1BPTElDWV9FWFRFTlNJT05fU0VSVklDRSkgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgICAgIHByb3RlY3RlZCBvdmVycmlkZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgIHByb3RlY3RlZCBvdmVycmlkZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICBsb2NhdGlvbjogTG9jYXRpb25cbiAgKSB7XG4gICAgc3VwZXIoZ3Jvd2xlclNlcnZpY2UsIGV4dFNlcnZpY2UsIHppdGlTZXJ2aWNlLCByb3V0ZXIsIHJvdXRlLCBsb2NhdGlvbik7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3NDaGFuZ2Uuc3Vic2NyaWJlKChyZXN1bHRzOmFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0dGluZ3MgPSByZXN1bHRzO1xuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICBvdmVycmlkZSBlbnRpdHlVcGRhdGVkKCkge1xuICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgcHJvbWlzZXMucHVzaCh0aGlzLnN2Yy5nZXRTZXJ2aWNlUm9sZUF0dHJpYnV0ZXMoKSk7XG4gICAgcHJvbWlzZXMucHVzaCh0aGlzLnN2Yy5nZXRJZGVudGl0eVJvbGVBdHRyaWJ1dGVzKCkpO1xuICAgIHByb21pc2VzLnB1c2godGhpcy5zdmMuZ2V0U2VydmljZU5hbWVkQXR0cmlidXRlcygpKTtcbiAgICBwcm9taXNlcy5wdXNoKHRoaXMuc3ZjLmdldElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzKCkpO1xuICAgIHByb21pc2VzLnB1c2godGhpcy5zdmMuZ2V0UG9zdHVyZU5hbWVkQXR0cmlidXRlcygpKTtcbiAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLmluaXRTZWxlY3RlZEF0dHJpYnV0ZXMoKTtcbiAgICB9KTtcbiAgICBpZiAoaXNFbXB0eSh0aGlzLmZvcm1EYXRhLmlkKSkge1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IG5ldyBTZXJ2aWNlUG9saWN5KCk7XG4gICAgfVxuICAgIHRoaXMuaW5pdERhdGEgPSBjbG9uZURlZXAodGhpcy5mb3JtRGF0YSk7XG4gICAgdGhpcy5leHRTZXJ2aWNlLnVwZGF0ZUZvcm1EYXRhKHRoaXMuZm9ybURhdGEpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgdGhpcy5leHRTZXJ2aWNlLmZvcm1EYXRhQ2hhbmdlZC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YS5pc0VtcHR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZm9ybURhdGEgPSBkYXRhO1xuICAgICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5pbml0RGF0YSA9IGNsb25lRGVlcCh0aGlzLmZvcm1EYXRhKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZXh0U2VydmljZS5jbG9zZWQuZW1pdCh7fSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICB0aGlzLmlzRWRpdGluZyA9ICFpc0VtcHR5KHRoaXMuZm9ybURhdGEuaWQpO1xuICB9XG5cbiAgaW5pdFNlbGVjdGVkQXR0cmlidXRlcygpIHtcbiAgICBpZiAoaXNFbXB0eSh0aGlzLmZvcm1EYXRhLmlkKSkge1xuICAgICAgdGhpcy5zdmMuYXNzb2NpYXRlZFNlcnZpY2VzID0gW107XG4gICAgICB0aGlzLnN2Yy5hc3NvY2lhdGVkU2VydmljZU5hbWVzID0gW107XG4gICAgICB0aGlzLnN2Yy5hc3NvY2lhdGVkSWRlbnRpdGllcyA9IFtdO1xuICAgICAgdGhpcy5zdmMuYXNzb2NpYXRlZElkZW50aXR5TmFtZXMgPSBbXTtcbiAgICAgIHRoaXMuc3ZjLmFzc29jaWF0ZWRQb3N0dXJlQ2hlY2tzID0gW107XG4gICAgICB0aGlzLnN2Yy5hc3NvY2lhdGVkUG9zdHVyZUNoZWNrTmFtZXMgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VydmljZUlkQXR0cmlidXRlc01hcCA9IGludmVydCh0aGlzLnN2Yy5zZXJ2aWNlTmFtZWRBdHRyaWJ1dGVzTWFwKTtcbiAgICBjb25zdCBpZGVudGl0eUlkQXR0cmlidXRlc01hcCA9IGludmVydCh0aGlzLnN2Yy5pZGVudGl0eU5hbWVkQXR0cmlidXRlc01hcCk7XG4gICAgY29uc3QgcG9zdHVyZUlkQXR0cmlidXRlc01hcCA9IGludmVydCh0aGlzLnN2Yy5wb3N0dXJlTmFtZWRBdHRyaWJ1dGVzTWFwKTtcbiAgICB0aGlzLnNlbGVjdGVkU2VydmljZVJvbGVBdHRyaWJ1dGVzID0gW107XG4gICAgdGhpcy5zZWxlY3RlZFNlcnZpY2VOYW1lZEF0dHJpYnV0ZXMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkSWRlbnRpdHlSb2xlQXR0cmlidXRlcyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRJZGVudGl0eU5hbWVkQXR0cmlidXRlcyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRQb3N0dXJlUm9sZUF0dHJpYnV0ZXMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkUG9zdHVyZU5hbWVkQXR0cmlidXRlcyA9IFtdO1xuICAgIHRoaXMuZm9ybURhdGEuc2VydmljZVJvbGVzPy5mb3JFYWNoKGF0dHIgPT4ge1xuICAgICAgaWYgKGF0dHIuaW5kZXhPZignQCcpID09PSAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlTmFtZWRBdHRyaWJ1dGVzLnB1c2goc2VydmljZUlkQXR0cmlidXRlc01hcFthdHRyLnN1YnN0cmluZygxKV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlcnZpY2VSb2xlQXR0cmlidXRlcy5wdXNoKGF0dHIuc3Vic3RyaW5nKDEpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmZvcm1EYXRhLmlkZW50aXR5Um9sZXM/LmZvckVhY2goYXR0ciA9PiB7XG4gICAgICBpZiAoYXR0ci5pbmRleE9mKCdAJykgPT09IDApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzLnB1c2goaWRlbnRpdHlJZEF0dHJpYnV0ZXNNYXBbYXR0ci5zdWJzdHJpbmcoMSldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZGVudGl0eVJvbGVBdHRyaWJ1dGVzLnB1c2goYXR0ci5zdWJzdHJpbmcoMSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZm9ybURhdGEucG9zdHVyZUNoZWNrUm9sZXM/LmZvckVhY2goYXR0ciA9PiB7XG4gICAgICBpZiAoYXR0ci5pbmRleE9mKCdAJykgPT09IDApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFBvc3R1cmVOYW1lZEF0dHJpYnV0ZXMucHVzaChwb3N0dXJlSWRBdHRyaWJ1dGVzTWFwW2F0dHIuc3Vic3RyaW5nKDEpXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUG9zdHVyZVJvbGVBdHRyaWJ1dGVzLnB1c2goYXR0ci5zdWJzdHJpbmcoMSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuc3ZjLmdldEFzc29jaWF0ZWRTZXJ2aWNlc0J5QXR0cmlidXRlKHRoaXMuc2VsZWN0ZWRTZXJ2aWNlUm9sZUF0dHJpYnV0ZXMsIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlTmFtZWRBdHRyaWJ1dGVzKTtcbiAgICB0aGlzLnN2Yy5nZXRBc3NvY2lhdGVkSWRlbnRpdGllc0J5QXR0cmlidXRlKHRoaXMuc2VsZWN0ZWRJZGVudGl0eVJvbGVBdHRyaWJ1dGVzLCB0aGlzLnNlbGVjdGVkSWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXMpO1xuICAgIHRoaXMuc3ZjLmdldEFzc29jaWF0ZWRQb3N0dXJlQ2hlY2tzQnlBdHRyaWJ1dGUodGhpcy5zZWxlY3RlZFBvc3R1cmVSb2xlQXR0cmlidXRlcywgdGhpcy5zZWxlY3RlZFBvc3R1cmVOYW1lZEF0dHJpYnV0ZXMpO1xuICB9XG5cbiAgaGVhZGVyQWN0aW9uUmVxdWVzdGVkKGFjdGlvbikge1xuICAgIHN3aXRjaChhY3Rpb24ubmFtZSkge1xuICAgICAgY2FzZSAnc2F2ZSc6XG4gICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Nsb3NlJzpcbiAgICAgICAgdGhpcy5yZXR1cm5Ub0xpc3RQYWdlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndG9nZ2xlLXZpZXcnOlxuICAgICAgICB0aGlzLmZvcm1WaWV3ID0gYWN0aW9uLmRhdGE7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmUoZXZlbnQ/KSB7XG4gICAgdGhpcy5mb3JtRGF0YS5uYW1lID0gdGhpcy5mb3JtRGF0YS5uYW1lLnRyaW0oKTtcbiAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZSgpO1xuICAgIGNvbnN0IGlzRXh0VmFsaWQgPSBhd2FpdCB0aGlzLmV4dFNlcnZpY2UudmFsaWRhdGVEYXRhKCk7XG4gICAgaWYoIWlzVmFsaWQgfHwgIWlzRXh0VmFsaWQpIHtcbiAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdFcnJvcicsXG4gICAgICAgICAgYERhdGEgSW52YWxpZGAsXG4gICAgICAgICAgYFNlcnZpY2UgUG9saWN5IGRhdGEgaXMgaW52YWxpZC4gUGxlYXNlIHVwZGF0ZSB0aGUgaGlnaGxpZ2h0ZWQgZmllbGRzIGFuZCB0cnkgYWdhaW4uYCxcbiAgICAgICk7XG4gICAgICB0aGlzLmdyb3dsZXJTZXJ2aWNlLnNob3coZ3Jvd2xlckRhdGEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmFwcGx5U2VsZWN0ZWRBdHRyaWJ1dGVzKCk7XG4gICAgdGhpcy5zdmMuc2F2ZSh0aGlzLmZvcm1EYXRhKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQ/LmNsb3NlKSB7XG4gICAgICAgIHRoaXMuY2xvc2VNb2RhbCh0cnVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGEgPSByZXN1bHQ/LmRhdGE/LmlkID8gcmVzdWx0LmRhdGEgOiByZXN1bHQ7XG4gICAgICB0aGlzLl9kYXRhQ2hhbmdlID0gZmFsc2U7XG4gICAgICBpZiAoIWlzRW1wdHkoZGF0YS5pZCkpIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IGRhdGEgfHwgdGhpcy5mb3JtRGF0YTtcbiAgICAgICAgdGhpcy5pbml0RGF0YSA9IHRoaXMuZm9ybURhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmluaXREYXRhID0gdGhpcy5mb3JtRGF0YTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmV0dXJuVG9MaXN0UGFnZSgpO1xuICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGx5U2VsZWN0ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHRoaXMuZm9ybURhdGEuc2VydmljZVJvbGVzID0gdGhpcy5zdmMuZ2V0U2VsZWN0ZWRSb2xlcyh0aGlzLnNlbGVjdGVkU2VydmljZVJvbGVBdHRyaWJ1dGVzLCB0aGlzLnNlbGVjdGVkU2VydmljZU5hbWVkQXR0cmlidXRlcywgdGhpcy5zdmMuc2VydmljZU5hbWVkQXR0cmlidXRlc01hcCk7XG4gICAgdGhpcy5mb3JtRGF0YS5pZGVudGl0eVJvbGVzID0gdGhpcy5zdmMuZ2V0U2VsZWN0ZWRSb2xlcyh0aGlzLnNlbGVjdGVkSWRlbnRpdHlSb2xlQXR0cmlidXRlcywgdGhpcy5zZWxlY3RlZElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzLCB0aGlzLnN2Yy5pZGVudGl0eU5hbWVkQXR0cmlidXRlc01hcCk7XG4gICAgdGhpcy5mb3JtRGF0YS5wb3N0dXJlQ2hlY2tSb2xlcyA9IHRoaXMuc3ZjLmdldFNlbGVjdGVkUm9sZXModGhpcy5zZWxlY3RlZFBvc3R1cmVSb2xlQXR0cmlidXRlcywgdGhpcy5zZWxlY3RlZFBvc3R1cmVOYW1lZEF0dHJpYnV0ZXMsIHRoaXMuc3ZjLnBvc3R1cmVOYW1lZEF0dHJpYnV0ZXNNYXApO1xuICB9XG5cbiAgdmFsaWRhdGUoKSB7XG4gICAgdGhpcy5lcnJvcnMgPSB7fTtcbiAgICBpZiAoaXNFbXB0eSh0aGlzLmZvcm1EYXRhLm5hbWUpKSB7XG4gICAgICB0aGlzLmVycm9yc1snbmFtZSddID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGlzRW1wdHkodGhpcy5lcnJvcnMpO1xuICB9XG5cbiAgYXBpQWN0aW9uUmVxdWVzdGVkKGFjdGlvbikge1xuICAgIHN3aXRjaCAoYWN0aW9uLmlkKSB7XG4gICAgICBjYXNlICdjbGknOlxuICAgICAgICB0aGlzLmNvcHlDTElDb21tYW5kKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY3VybCc6XG4gICAgICAgIHRoaXMuY29weUNVUkxDb21tYW5kKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGNvcHlDTElDb21tYW5kKCkge1xuICAgIGNvbnN0IHNlcnZpY2VSb2xlcyA9IHRoaXMuc3ZjLmdldFNlbGVjdGVkUm9sZXModGhpcy5zZWxlY3RlZFNlcnZpY2VSb2xlQXR0cmlidXRlcywgdGhpcy5zZWxlY3RlZFNlcnZpY2VOYW1lZEF0dHJpYnV0ZXMsIHRoaXMuc3ZjLnNlcnZpY2VOYW1lZEF0dHJpYnV0ZXNNYXApO1xuICAgIGNvbnN0IHNlcnZpY2VSb2xlc1ZhciA9IHRoaXMuZ2V0Um9sZXNDTElWYXJpYWJsZShzZXJ2aWNlUm9sZXMpO1xuXG4gICAgY29uc3QgaWRlbnRpdHlSb2xlcyA9IHRoaXMuc3ZjLmdldFNlbGVjdGVkUm9sZXModGhpcy5zZWxlY3RlZElkZW50aXR5Um9sZUF0dHJpYnV0ZXMsIHRoaXMuc2VsZWN0ZWRJZGVudGl0eU5hbWVkQXR0cmlidXRlcywgdGhpcy5zdmMuaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXNNYXApO1xuICAgIGNvbnN0IGlkZW50aXR5Um9sZXNWYXIgPSB0aGlzLmdldFJvbGVzQ0xJVmFyaWFibGUoaWRlbnRpdHlSb2xlcyk7XG5cbiAgICBjb25zdCBwY1JvbGVzID0gdGhpcy5zdmMuZ2V0U2VsZWN0ZWRSb2xlcyh0aGlzLnNlbGVjdGVkUG9zdHVyZVJvbGVBdHRyaWJ1dGVzLCB0aGlzLnNlbGVjdGVkUG9zdHVyZU5hbWVkQXR0cmlidXRlcywgdGhpcy5zdmMucG9zdHVyZU5hbWVkQXR0cmlidXRlc01hcCk7XG4gICAgY29uc3QgcGNSb2xlc1ZhciA9IHRoaXMuZ2V0Um9sZXNDTElWYXJpYWJsZShwY1JvbGVzKTtcblxuICAgIGNvbnN0IGNvbW1hbmQgPSBgeml0aSBlZGdlICR7dGhpcy5mb3JtRGF0YS5pZCA/ICd1cGRhdGUnIDogJ2NyZWF0ZSd9IHNlcnZpY2UtcG9saWN5ICR7dGhpcy5mb3JtRGF0YS5pZCA/IGAnJHt0aGlzLmZvcm1EYXRhLmlkfSdgIDogJyd9ICR7dGhpcy5mb3JtRGF0YS5pZCA/ICctLW5hbWUnIDogJyd9ICcke3RoaXMuZm9ybURhdGEubmFtZX0nICR7dGhpcy5mb3JtRGF0YS5pZCA/ICcnIDogdGhpcy5mb3JtRGF0YS50eXBlfSR7dGhpcy5mb3JtRGF0YS5pZCA/ICcnIDogYCAtLXNlbWFudGljICcke3RoaXMuZm9ybURhdGEuc2VtYW50aWN9J2B9IC0tc2VydmljZS1yb2xlcyAnJHtzZXJ2aWNlUm9sZXNWYXJ9JyAtLWlkZW50aXR5LXJvbGVzICcke2lkZW50aXR5Um9sZXNWYXJ9JyAtLXBvc3R1cmUtY2hlY2stcm9sZXMgJyR7cGNSb2xlc1Zhcn0nYDtcblxuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGNvbW1hbmQpO1xuICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgJ3N1Y2Nlc3MnLFxuICAgICAgICAnU3VjY2VzcycsXG4gICAgICAgIGBUZXh0IENvcGllZGAsXG4gICAgICAgIGBDTEkgY29tbWFuZCBjb3BpZWQgdG8gY2xpcGJvYXJkYCxcbiAgICApO1xuICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gIH1cblxuICBjb3B5Q1VSTENvbW1hbmQoKSB7XG4gICAgY29uc3Qgc2VydmljZVJvbGVzID0gdGhpcy5zdmMuZ2V0U2VsZWN0ZWRSb2xlcyh0aGlzLnNlbGVjdGVkU2VydmljZVJvbGVBdHRyaWJ1dGVzLCB0aGlzLnNlbGVjdGVkU2VydmljZU5hbWVkQXR0cmlidXRlcywgdGhpcy5zdmMuc2VydmljZU5hbWVkQXR0cmlidXRlc01hcCk7XG4gICAgY29uc3Qgc2VydmljZVJvbGVzVmFyID0gdGhpcy5nZXRSb2xlc0NVUkxWYXJpYWJsZShzZXJ2aWNlUm9sZXMpO1xuXG4gICAgY29uc3QgaWRlbnRpdHlSb2xlcyA9IHRoaXMuc3ZjLmdldFNlbGVjdGVkUm9sZXModGhpcy5zZWxlY3RlZElkZW50aXR5Um9sZUF0dHJpYnV0ZXMsIHRoaXMuc2VsZWN0ZWRJZGVudGl0eU5hbWVkQXR0cmlidXRlcywgdGhpcy5zdmMuaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXNNYXApO1xuICAgIGNvbnN0IGlkZW50aXR5Um9sZXNWYXIgPSB0aGlzLmdldFJvbGVzQ1VSTFZhcmlhYmxlKGlkZW50aXR5Um9sZXMpO1xuXG4gICAgY29uc3QgcGNSb2xlcyA9IHRoaXMuc3ZjLmdldFNlbGVjdGVkUm9sZXModGhpcy5zZWxlY3RlZFBvc3R1cmVSb2xlQXR0cmlidXRlcywgdGhpcy5zZWxlY3RlZFBvc3R1cmVOYW1lZEF0dHJpYnV0ZXMsIHRoaXMuc3ZjLnBvc3R1cmVOYW1lZEF0dHJpYnV0ZXNNYXApO1xuICAgIGNvbnN0IHBjUm9sZXNWYXIgPSB0aGlzLmdldFJvbGVzQ1VSTFZhcmlhYmxlKHBjUm9sZXMpO1xuXG4gICAgY29uc3QgY29tbWFuZCA9IGBjdXJsICcke3RoaXMuYXBpQ2FsbFVSTH0nIFxcXFxcbiAgICAke3RoaXMuZm9ybURhdGEuaWQgPyAnLS1yZXF1ZXN0IFBBVENIIFxcXFwnIDogJ1xcXFwnfVxuICAgIC1IICdhY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24nIFxcXFxcbiAgICAtSCAnY29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9qc29uJyBcXFxcXG4gICAgLUggJ3p0LXNlc3Npb246ICR7dGhpcy5zZXR0aW5ncy5zZXNzaW9uLmlkfScgXFxcXFxuICAgIC0tZGF0YS1yYXcgJ3tcIm5hbWVcIjpcIiR7dGhpcy5mb3JtRGF0YS5uYW1lfVwiLFwic2VydmljZVJvbGVzXCI6JHtzZXJ2aWNlUm9sZXNWYXJ9LFwiaWRlbnRpdHlSb2xlc1wiOiR7aWRlbnRpdHlSb2xlc1Zhcn0sXCJwb3N0dXJlQ2hlY2tSb2xlc1wiOiR7cGNSb2xlc1Zhcn0sXCJzZW1hbnRpY1wiOlwiJHt0aGlzLmZvcm1EYXRhLnNlbWFudGljfVwiLFwidHlwZVwiOlwiJHt0aGlzLmZvcm1EYXRhLnR5cGV9XCJ9J2A7XG5cbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChjb21tYW5kKTtcbiAgICBjb25zdCBncm93bGVyRGF0YSA9IG5ldyBHcm93bGVyTW9kZWwoXG4gICAgICAgICdzdWNjZXNzJyxcbiAgICAgICAgJ1N1Y2Nlc3MnLFxuICAgICAgICBgVGV4dCBDb3BpZWRgLFxuICAgICAgICBgQ1VSTCBjb21tYW5kIGNvcGllZCB0byBjbGlwYm9hcmRgLFxuICAgICk7XG4gICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgfVxuXG4gIGdldCBhcGlDYWxsVVJMKCkge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnNlbGVjdGVkRWRnZUNvbnRyb2xsZXIgKyAnL2VkZ2UvbWFuYWdlbWVudC92MS9zZXJ2aWNlLXBvbGljaWVzJyArICh0aGlzLmZvcm1EYXRhLmlkID8gYC8ke3RoaXMuZm9ybURhdGEuaWR9YCA6ICcnKTtcbiAgfVxuXG4gIGdldCBhcGlEYXRhKCkge1xuICAgIGNvbnN0IGRhdGE6IGFueSA9IHtcbiAgICAgIG5hbWU6IHRoaXMuZm9ybURhdGE/Lm5hbWUgfHwgJycsXG4gICAgICBhcHBEYXRhOiB0aGlzLmZvcm1EYXRhPy5hcHBEYXRhIHx8ICcnLFxuICAgICAgc2VydmljZVJvbGVzOiB0aGlzLnN2Yy5nZXRTZWxlY3RlZFJvbGVzKHRoaXMuc2VsZWN0ZWRTZXJ2aWNlUm9sZUF0dHJpYnV0ZXMsIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlTmFtZWRBdHRyaWJ1dGVzLCB0aGlzLnN2Yy5zZXJ2aWNlTmFtZWRBdHRyaWJ1dGVzTWFwKSxcbiAgICAgIGlkZW50aXR5Um9sZXM6IHRoaXMuc3ZjLmdldFNlbGVjdGVkUm9sZXModGhpcy5zZWxlY3RlZElkZW50aXR5Um9sZUF0dHJpYnV0ZXMsIHRoaXMuc2VsZWN0ZWRJZGVudGl0eU5hbWVkQXR0cmlidXRlcywgdGhpcy5zdmMuaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXNNYXApLFxuICAgICAgcG9zdHVyZUNoZWNrUm9sZXM6IHRoaXMuc3ZjLmdldFNlbGVjdGVkUm9sZXModGhpcy5zZWxlY3RlZFBvc3R1cmVSb2xlQXR0cmlidXRlcywgdGhpcy5zZWxlY3RlZFBvc3R1cmVOYW1lZEF0dHJpYnV0ZXMsIHRoaXMuc3ZjLnBvc3R1cmVOYW1lZEF0dHJpYnV0ZXNNYXApLFxuICAgICAgc2VtYW50aWM6IHRoaXMuZm9ybURhdGE/LnNlbWFudGljLFxuICAgICAgdHlwZTogdGhpcy5mb3JtRGF0YT8udHlwZSxcbiAgICAgIHRhZ3M6IHRoaXMuZm9ybURhdGE/LnRhZ3NcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBfYXBpRGF0YSA9IHt9O1xuICBzZXQgYXBpRGF0YShkYXRhKSB7XG4gICAgdGhpcy5fYXBpRGF0YSA9IGRhdGE7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInByb2plY3RhYmxlLWZvcm0td3JhcHBlclwiXG4gICAgIChrZXl1cC5lbnRlcik9XCJzYXZlKCRldmVudClcIlxuICAgICAoa2V5dXAuZXNjYXBlKT1cImNsb3NlTW9kYWwoZmFsc2UpXCJcbj5cbiAgICA8bGliLWZvcm0taGVhZGVyXG4gICAgICAgICAgICBbZGF0YV09XCJmb3JtRGF0YVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiZm9ybURhdGEuaWQgPyAnRWRpdCBTZXJ2aWNlIFBvbGljeTogJyA6ICdDcmVhdGUgTmV3IFNlcnZpY2UgUG9saWN5J1wiXG4gICAgICAgICAgICBbbW9yZUFjdGlvbnNdPVwibW9yZUFjdGlvbnNcIlxuICAgICAgICAgICAgKGFjdGlvblJlcXVlc3RlZCk9XCJoZWFkZXJBY3Rpb25SZXF1ZXN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICBbKGZvcm1WaWV3KV09XCJmb3JtVmlld1wiXG4gICAgPjwvbGliLWZvcm0taGVhZGVyPlxuICAgIDxkaXYgY2xhc3M9XCJzZXJ2aWNlLXBvbGljeS1mb3JtLWNvbnRhaW5lciBwcm9qZWN0YWJsZS1mb3JtLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvamVjdGFibGUtZm9ybS1tYWluLWNvbHVtbiBmb3JtLWdyb3VwLXJvd1wiICpuZ0lmPVwiZm9ybVZpZXcgPT09ICdzaW1wbGUnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cC1jb2x1bW4gdGhyZWUtZmlmdGhzXCI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLWNvbnRhaW5lciBbdGl0bGVdPVwiJ1NlcnZpY2UgUG9saWN5IE5hbWUnXCIgW2xhYmVsXT1cIidSRVFVSVJFRCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWZpZWxkLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIk5hbWUgdGhpcyBlZGdlIHNlcnZpY2UgcG9saWN5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ZXJyb3I6IGVycm9yc1snbmFtZSddfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtRGF0YS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvZm9jdXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbmFtZUZpZWxkSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2xpYi1mb3JtLWZpZWxkLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bGliLWZvcm0tZmllbGQtY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1NlbGVjdCBTZXJ2aWNlIEF0dHJpYnV0ZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInT1BUSU9OQUwnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50U3R5bGVdPVwiJ3otaW5kZXg6IDEwMDAwMydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hlbHBUZXh0XT1cIidDaG9vc2Ugd2hpY2ggc2VydmljZXMgdG8gYXNzb2NpYXRlIHRvIHRoaXMgcG9saWN5IGJ5IHBpY2tpbmcgZnJvbSB0aGUgbGlzdCBvZiBhdmFpbGFibGUgYXR0cmlidXRlcydcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGxpYi10YWctc2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkUm9sZUF0dHJpYnV0ZXMpXT1cInNlbGVjdGVkU2VydmljZVJvbGVBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzKV09XCJzZWxlY3RlZFNlcnZpY2VOYW1lZEF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVSb2xlQXR0cmlidXRlc109XCJzdmMuc2VydmljZVJvbGVBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlTmFtZWRBdHRyaWJ1dGVzXT1cInN2Yy5zZXJ2aWNlTmFtZWRBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXNDaGFuZ2UpPVwic3ZjLmdldEFzc29jaWF0ZWRTZXJ2aWNlc0J5QXR0cmlidXRlKHNlbGVjdGVkU2VydmljZVJvbGVBdHRyaWJ1dGVzLCBzZWxlY3RlZFNlcnZpY2VOYW1lZEF0dHJpYnV0ZXMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRSb2xlQXR0cmlidXRlc0NoYW5nZSk9XCJzdmMuZ2V0QXNzb2NpYXRlZFNlcnZpY2VzQnlBdHRyaWJ1dGUoc2VsZWN0ZWRTZXJ2aWNlUm9sZUF0dHJpYnV0ZXMsIHNlbGVjdGVkU2VydmljZU5hbWVkQXR0cmlidXRlcylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IHNlcnZpY2UgYXR0cmlidXRlcydcIlxuICAgICAgICAgICAgICAgICAgICA+PC9saWItdGFnLXNlbGVjdG9yPlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInU2VsZWN0IElkZW50aXR5IEF0dHJpYnV0ZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInT1BUSU9OQUwnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50U3R5bGVdPVwiJ3otaW5kZXg6IDEwMDAwMidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hlbHBUZXh0XT1cIidDaG9vc2Ugd2hpY2ggaWRlbnRpdGllcyB0byBhc3NvY2lhdGUgdG8gdGhpcyBwb2xpY3kgYnkgcGlja2luZyBmcm9tIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBhdHRyaWJ1dGVzJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bGliLXRhZy1zZWxlY3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWRSb2xlQXR0cmlidXRlcyldPVwic2VsZWN0ZWRJZGVudGl0eVJvbGVBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzKV09XCJzZWxlY3RlZElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlUm9sZUF0dHJpYnV0ZXNdPVwic3ZjLmlkZW50aXR5Um9sZUF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVOYW1lZEF0dHJpYnV0ZXNdPVwic3ZjLmlkZW50aXR5TmFtZWRBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXNDaGFuZ2UpPVwic3ZjLmdldEFzc29jaWF0ZWRJZGVudGl0aWVzQnlBdHRyaWJ1dGUoc2VsZWN0ZWRJZGVudGl0eVJvbGVBdHRyaWJ1dGVzLCBzZWxlY3RlZElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkUm9sZUF0dHJpYnV0ZXNDaGFuZ2UpPVwic3ZjLmdldEFzc29jaWF0ZWRJZGVudGl0aWVzQnlBdHRyaWJ1dGUoc2VsZWN0ZWRJZGVudGl0eVJvbGVBdHRyaWJ1dGVzLCBzZWxlY3RlZElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgaWRlbnRpdHkgYXR0cmlidXRlcydcIlxuICAgICAgICAgICAgICAgICAgICA+PC9saWItdGFnLXNlbGVjdG9yPlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInU2VsZWN0IFBvc3R1cmUgQ2hlY2sgQXR0cmlidXRlcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidPUFRJT05BTCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRTdHlsZV09XCInei1pbmRleDogMTAwMDAxJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGVscFRleHRdPVwiJ0Nob29zZSB3aGljaCBwb3N0dXJlIGNoZWNrcyB0byBhc3NvY2lhdGUgdG8gdGhpcyBwb2xpY3kgYnkgcGlja2luZyBmcm9tIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBhdHRyaWJ1dGVzJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bGliLXRhZy1zZWxlY3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWRSb2xlQXR0cmlidXRlcyldPVwic2VsZWN0ZWRQb3N0dXJlUm9sZUF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXMpXT1cInNlbGVjdGVkUG9zdHVyZU5hbWVkQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZFJvbGVBdHRyaWJ1dGVzKV09XCJzdmMucG9zdHVyZVJvbGVBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlTmFtZWRBdHRyaWJ1dGVzXT1cInN2Yy5wb3N0dXJlTmFtZWRBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXNDaGFuZ2UpPVwic3ZjLmdldEFzc29jaWF0ZWRQb3N0dXJlQ2hlY2tzQnlBdHRyaWJ1dGUoc2VsZWN0ZWRQb3N0dXJlUm9sZUF0dHJpYnV0ZXMsIHNlbGVjdGVkUG9zdHVyZU5hbWVkQXR0cmlidXRlcylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZFJvbGVBdHRyaWJ1dGVzQ2hhbmdlKT1cInN2Yy5nZXRBc3NvY2lhdGVkUG9zdHVyZUNoZWNrc0J5QXR0cmlidXRlKHNlbGVjdGVkUG9zdHVyZVJvbGVBdHRyaWJ1dGVzLCBzZWxlY3RlZFBvc3R1cmVOYW1lZEF0dHJpYnV0ZXMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBwb3N0dXJlIGNoZWNrIGF0dHJpYnV0ZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbGliLXRhZy1zZWxlY3Rvcj5cbiAgICAgICAgICAgICAgICA8L2xpYi1mb3JtLWZpZWxkLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bGliLWZvcm0tZmllbGQtY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1R5cGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZTJdPVwiJ1NlbWFudGljJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGF5b3V0XT1cIidyb3cnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1EYXRhLnR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiUG9saWN5VHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWZpZWxkLWRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkJpbmRcIj5CaW5kPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiRGlhbFwiPkRpYWw8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1EYXRhLnNlbWFudGljXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIlBvbGljeVNlbWFudGljXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQtZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQW55T2ZcIj5BbnlPZjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFsbE9mXCI+QWxsT2Y8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLXRvZ2dsZSBbKHRvZ2dsZU9uKV09XCJzaG93TW9yZVwiICh0b2dnbGVPbkNoYW5nZSk9XCJzaG93TW9yZUNoYW5nZWQoJGV2ZW50KVwiIHN0eWxlPVwibWFyZ2luOiAwcHggMTBweFwiPjwvbGliLWZvcm0tZmllbGQtdG9nZ2xlPlxuICAgICAgICAgICAgICAgIDxkaXYgW2hpZGRlbl09XCIhc2hvd01vcmVcIiBjbGFzcz1cImZvcm0tZ3JvdXAtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0N1c3RvbSBUYWdzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidPUFRJT05BTCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1maWVsZC1hZHZhbmNlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaGlkZVRhZ3NcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLWN1c3RvbS10YWdzIFsodGFncyldPVwiZm9ybURhdGEudGFnc1wiPjwvbGliLWN1c3RvbS10YWdzPlxuICAgICAgICAgICAgICAgICAgICA8L2xpYi1mb3JtLWZpZWxkLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtY29sdW1uIHR3by1maWZ0aHNcIj5cbiAgICAgICAgICAgICAgICA8bGliLWZvcm0tZmllbGQtY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0Fzc29jaWF0ZWQgU2VydmljZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb3VudF09XCJzdmMuYXNzb2NpYXRlZFNlcnZpY2VOYW1lcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIidoaWRlLW92ZXJmbG93J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGVscFRleHRdPVwiJ1ByZXZpZXcgbGlzdCBvZiBhbGwgc2VydmljZXMgdGhhdCB0aGlzIFNlcnZpY2UgUG9saWN5IGlzIGFzc29jaWF0ZWQgd2l0aC4nXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItcHJldmlldy1saXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsaWNrYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzTG9hZGluZ109XCJzZXJ2aWNlc0xvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbGxOYW1lc109XCJzdmMuYXNzb2NpYXRlZFNlcnZpY2VOYW1lc1wiXG4gICAgICAgICAgICAgICAgICAgID48L2xpYi1wcmV2aWV3LWxpc3Q+XG4gICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidBc3NvY2lhdGVkIElkZW50aXRpZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb3VudF09XCJzdmMuYXNzb2NpYXRlZElkZW50aXR5TmFtZXMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtoZWxwVGV4dF09XCInUHJldmlldyBsaXN0IG9mIGFsbCBJZGVudGl0aWVzIHRoYXQgdGhpcyBTZXJ2aWNlIFBvbGljeSBpcyBhc3NvY2lhdGVkIHdpdGguJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bGliLXByZXZpZXctbGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGlja2FibGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc0xvYWRpbmddPVwiaWRlbnRpdGllc0xvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbGxOYW1lc109XCJzdmMuYXNzb2NpYXRlZElkZW50aXR5TmFtZXNcIlxuICAgICAgICAgICAgICAgICAgICA+PC9saWItcHJldmlldy1saXN0PlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQXNzb2NpYXRlZCBQb3N0dXJlIENoZWNrcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvdW50XT1cInN2Yy5hc3NvY2lhdGVkUG9zdHVyZUNoZWNrTmFtZXMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtoZWxwVGV4dF09XCInUHJldmlldyBsaXN0IG9mIGFsbCBQb3N0dXJlIENoZWNrcyB0aGF0IHRoaXMgU2VydmljZSBQb2xpY3kgaXMgYXNzb2NpYXRlZCB3aXRoLidcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGxpYi1wcmV2aWV3LWxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xpY2thYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNMb2FkaW5nXT1cInBvc3R1cmVDaGVja3NMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxsTmFtZXNdPVwic3ZjLmFzc29jaWF0ZWRQb3N0dXJlQ2hlY2tOYW1lc1wiXG4gICAgICAgICAgICAgICAgICAgID48L2xpYi1wcmV2aWV3LWxpc3Q+XG4gICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidBUEkgQ2FsbHMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtoZWFkZXJBY3Rpb25zXT1cImFwaU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGFjdGlvblJlcXVlc3RlZCk9XCJhcGlBY3Rpb25SZXF1ZXN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tZmllbGQtaW5wdXRcIiBbdmFsdWVdPVwiYXBpQ2FsbFVSTFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWNvcHkgY29weVwiIChjbGljayk9XCJjb3B5VG9DbGlwYm9hcmQoYXBpQ2FsbFVSTClcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItanNvbi12aWV3ICpuZ0lmPVwiZm9ybURhdGFcIiBbKGRhdGEpXT1cImFwaURhdGFcIiBbcmVhZE9ubHldPVwidHJ1ZVwiIFtzaG93Q29weV09XCJ0cnVlXCI+PC9saWItanNvbi12aWV3PlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cC1jb2x1bW5cIiAqbmdJZj1cImZvcm1WaWV3ID09PSAncmF3J1wiPlxuICAgICAgICAgICAgPGxpYi1qc29uLXZpZXcgKm5nSWY9XCJmb3JtRGF0YVwiIFsoZGF0YSldPVwiZm9ybURhdGFcIj48L2xpYi1qc29uLXZpZXc+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG48bGliLWxvYWRpbmctaW5kaWNhdG9yICpuZ0lmPVwiaXNMb2FkaW5nXCIgW2lzTG9hZGluZ109XCJpc0xvYWRpbmdcIj48L2xpYi1sb2FkaW5nLWluZGljYXRvcj4iXX0=
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1wb2xpY3ktZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvcHJvamVjdGFibGUtZm9ybXMvc2VydmljZS1wb2xpY3kvc2VydmljZS1wb2xpY3ktZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvcHJvamVjdGFibGUtZm9ybXMvc2VydmljZS1wb2xpY3kvc2VydmljZS1wb2xpY3ktZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUlOLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFDLGdCQUFnQixFQUFrQixNQUFNLG9DQUFvQyxDQUFDO0FBRXJGLE9BQU8sRUFBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUNsRCxPQUFPLEVBQUMsaUJBQWlCLEVBQWtCLE1BQU0scUNBQXFDLENBQUM7QUFFdkYsT0FBTyxFQUEyQixnQ0FBZ0MsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3pHLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUV0RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0QsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQUkzRCxNQVdhLDBCQUEyQixTQUFRLGVBQWU7SUFzQjdELFlBQ2lELGVBQWdDLEVBQ3RFLEdBQTZCLEVB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QUM7SUFFRCxLQUFLO0lBQ0wsQ0FBQzsrR0EvUVUsMEJBQTBCLGtCQXVCekIsZ0JBQWdCLHFEQUVoQixpQkFBaUIsMkNBRWpCLGdDQUFnQzttR0EzQmpDLDBCQUEwQixpSEFQMUI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsWUFBWTtnQkFDckIsUUFBUSxFQUFFLEVBQUU7YUFDYjtTQUNGLHNFQ3BDSCw2aFRBK0p5Rjs7U0R6SDVFLDBCQUEwQjs0RkFBMUIsMEJBQTBCO2tCQVh0QyxTQUFTOytCQUNFLHlCQUF5QixhQUd4Qjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsWUFBWTs0QkFDckIsUUFBUSxFQUFFLEVBQUU7eUJBQ2I7cUJBQ0Y7OzBCQXlCSSxNQUFNOzJCQUFDLGdCQUFnQjs7MEJBRXZCLE1BQU07MkJBQUMsaUJBQWlCOzswQkFFeEIsTUFBTTsyQkFBQyxnQ0FBZ0M7cUhBMUJuQyxRQUFRO3NCQUFoQixLQUFLO2dCQUNJLEtBQUs7c0JBQWQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBBZnRlclZpZXdJbml0LFxuICBJbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1Byb2plY3RhYmxlRm9ybX0gZnJvbSBcIi4uL3Byb2plY3RhYmxlLWZvcm0uY2xhc3NcIjtcbmltcG9ydCB7U0VUVElOR1NfU0VSVklDRSwgU2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvc2V0dGluZ3Muc2VydmljZVwiO1xuXG5pbXBvcnQge2lzRW1wdHksIGNsb25lRGVlcCwgaW52ZXJ0fSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtaSVRJX0RBVEFfU0VSVklDRSwgWml0aURhdGFTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMveml0aS1kYXRhLnNlcnZpY2VcIjtcbmltcG9ydCB7R3Jvd2xlclNlcnZpY2V9IGZyb20gXCIuLi8uLi9tZXNzYWdpbmcvZ3Jvd2xlci5zZXJ2aWNlXCI7XG5pbXBvcnQge1NlcnZpY2VQb2xpY3lGb3JtU2VydmljZSwgU0VSVklDRV9QT0xJQ1lfRVhURU5TSU9OX1NFUlZJQ0V9IGZyb20gJy4vc2VydmljZS1wb2xpY3ktZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7TWF0RGlhbG9nUmVmfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nXCI7XG5pbXBvcnQge0V4dGVuc2lvblNlcnZpY2V9IGZyb20gXCIuLi8uLi9leHRlbmRhYmxlL2V4dGVuc2lvbnMtbm9vcC5zZXJ2aWNlXCI7XG5pbXBvcnQge1NlcnZpY2VQb2xpY3l9IGZyb20gXCIuLi8uLi8uLi9tb2RlbHMvc2VydmljZS1wb2xpY3lcIjtcbmltcG9ydCB7R3Jvd2xlck1vZGVsfSBmcm9tIFwiLi4vLi4vbWVzc2FnaW5nL2dyb3dsZXIubW9kZWxcIjtcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHtMb2NhdGlvbn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItc2VydmljZS1wb2xpY3ktZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZXJ2aWNlLXBvbGljeS1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VydmljZS1wb2xpY3ktZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBNYXREaWFsb2dSZWYsXG4gICAgICB1c2VWYWx1ZToge31cbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgU2VydmljZVBvbGljeUZvcm1Db21wb25lbnQgZXh0ZW5kcyBQcm9qZWN0YWJsZUZvcm0gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgZm9ybURhdGE6IFNlcnZpY2VQb2xpY3kgfCBhbnkgPSB7fTtcbiAgQE91dHB1dCgpIGNsb3NlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHNlbGVjdGVkU2VydmljZVJvbGVBdHRyaWJ1dGVzID0gW107XG4gIHNlbGVjdGVkU2VydmljZU5hbWVkQXR0cmlidXRlcyA9IFtdO1xuICBzZWxlY3RlZElkZW50aXR5Um9sZUF0dHJpYnV0ZXMgPSBbXTtcbiAgc2VsZWN0ZWRJZGVudGl0eU5hbWVkQXR0cmlidXRlcyA9IFtdO1xuICBzZWxlY3RlZFBvc3R1cmVSb2xlQXR0cmlidXRlcyA9IFtdO1xuICBzZWxlY3RlZFBvc3R1cmVOYW1lZEF0dHJpYnV0ZXMgPSBbXTtcblxuICBmb3JtVmlldyA9ICdzaW1wbGUnO1xuICBpc0VkaXRpbmcgPSBmYWxzZTtcbiAgc2VydmljZXNMb2FkaW5nID0gZmFsc2U7XG4gIGlkZW50aXRpZXNMb2FkaW5nID0gZmFsc2U7XG4gIHBvc3R1cmVDaGVja3NMb2FkaW5nID0gZmFsc2U7XG5cbiAgc2V0dGluZ3M6IGFueSA9IHt9O1xuXG4gIG92ZXJyaWRlIGVudGl0eVR5cGUgPSAnc2VydmljZS1wb2xpY2llcyc7XG4gIG92ZXJyaWRlIGVudGl0eUNsYXNzID0gU2VydmljZVBvbGljeTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIEBJbmplY3QoU0VUVElOR1NfU0VSVklDRSkgcHJvdGVjdGVkIG92ZXJyaWRlIHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxuICAgICAgcHVibGljIHN2YzogU2VydmljZVBvbGljeUZvcm1TZXJ2aWNlLFxuICAgICAgQEluamVjdChaSVRJX0RBVEFfU0VSVklDRSkgb3ZlcnJpZGUgeml0aVNlcnZpY2U6IFppdGlEYXRhU2VydmljZSxcbiAgICAgIGdyb3dsZXJTZXJ2aWNlOiBHcm93bGVyU2VydmljZSxcbiAgICAgIEBJbmplY3QoU0VSVklDRV9QT0xJQ1lfRVhURU5TSU9OX1NFUlZJQ0UpIGV4dFNlcnZpY2U6IEV4dGVuc2lvblNlcnZpY2UsXG4gICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgbG9jYXRpb246IExvY2F0aW9uXG4gICkge1xuICAgIHN1cGVyKGdyb3dsZXJTZXJ2aWNlLCBleHRTZXJ2aWNlLCB6aXRpU2VydmljZSwgcm91dGVyLCByb3V0ZSwgbG9jYXRpb24sIHNldHRpbmdzU2VydmljZSk7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3NDaGFuZ2Uuc3Vic2NyaWJlKChyZXN1bHRzOmFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0dGluZ3MgPSByZXN1bHRzO1xuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICBvdmVycmlkZSBlbnRpdHlVcGRhdGVkKCkge1xuICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgcHJvbWlzZXMucHVzaCh0aGlzLnN2Yy5nZXRTZXJ2aWNlUm9sZUF0dHJpYnV0ZXMoKSk7XG4gICAgcHJvbWlzZXMucHVzaCh0aGlzLnN2Yy5nZXRJZGVudGl0eVJvbGVBdHRyaWJ1dGVzKCkpO1xuICAgIHByb21pc2VzLnB1c2godGhpcy5zdmMuZ2V0U2VydmljZU5hbWVkQXR0cmlidXRlcygpKTtcbiAgICBwcm9taXNlcy5wdXNoKHRoaXMuc3ZjLmdldElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzKCkpO1xuICAgIHByb21pc2VzLnB1c2godGhpcy5zdmMuZ2V0UG9zdHVyZU5hbWVkQXR0cmlidXRlcygpKTtcbiAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLmluaXRTZWxlY3RlZEF0dHJpYnV0ZXMoKTtcbiAgICB9KTtcbiAgICBpZiAoaXNFbXB0eSh0aGlzLmZvcm1EYXRhLmlkKSkge1xuICAgICAgdGhpcy5mb3JtRGF0YSA9IG5ldyBTZXJ2aWNlUG9saWN5KCk7XG4gICAgfVxuICAgIHRoaXMuaW5pdERhdGEgPSBjbG9uZURlZXAodGhpcy5mb3JtRGF0YSk7XG4gICAgdGhpcy5leHRTZXJ2aWNlLnVwZGF0ZUZvcm1EYXRhKHRoaXMuZm9ybURhdGEpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgdGhpcy5leHRTZXJ2aWNlLmZvcm1EYXRhQ2hhbmdlZC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YS5pc0VtcHR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZm9ybURhdGEgPSBkYXRhO1xuICAgICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5pbml0RGF0YSA9IGNsb25lRGVlcCh0aGlzLmZvcm1EYXRhKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZXh0U2VydmljZS5jbG9zZWQuZW1pdCh7fSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICB0aGlzLmlzRWRpdGluZyA9ICFpc0VtcHR5KHRoaXMuZm9ybURhdGEuaWQpO1xuICB9XG5cbiAgaW5pdFNlbGVjdGVkQXR0cmlidXRlcygpIHtcbiAgICBpZiAoaXNFbXB0eSh0aGlzLmZvcm1EYXRhLmlkKSkge1xuICAgICAgdGhpcy5zdmMuYXNzb2NpYXRlZFNlcnZpY2VzID0gW107XG4gICAgICB0aGlzLnN2Yy5hc3NvY2lhdGVkU2VydmljZU5hbWVzID0gW107XG4gICAgICB0aGlzLnN2Yy5hc3NvY2lhdGVkSWRlbnRpdGllcyA9IFtdO1xuICAgICAgdGhpcy5zdmMuYXNzb2NpYXRlZElkZW50aXR5TmFtZXMgPSBbXTtcbiAgICAgIHRoaXMuc3ZjLmFzc29jaWF0ZWRQb3N0dXJlQ2hlY2tzID0gW107XG4gICAgICB0aGlzLnN2Yy5hc3NvY2lhdGVkUG9zdHVyZUNoZWNrTmFtZXMgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VydmljZUlkQXR0cmlidXRlc01hcCA9IGludmVydCh0aGlzLnN2Yy5zZXJ2aWNlTmFtZWRBdHRyaWJ1dGVzTWFwKTtcbiAgICBjb25zdCBpZGVudGl0eUlkQXR0cmlidXRlc01hcCA9IGludmVydCh0aGlzLnN2Yy5pZGVudGl0eU5hbWVkQXR0cmlidXRlc01hcCk7XG4gICAgY29uc3QgcG9zdHVyZUlkQXR0cmlidXRlc01hcCA9IGludmVydCh0aGlzLnN2Yy5wb3N0dXJlTmFtZWRBdHRyaWJ1dGVzTWFwKTtcbiAgICB0aGlzLnNlbGVjdGVkU2VydmljZVJvbGVBdHRyaWJ1dGVzID0gW107XG4gICAgdGhpcy5zZWxlY3RlZFNlcnZpY2VOYW1lZEF0dHJpYnV0ZXMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkSWRlbnRpdHlSb2xlQXR0cmlidXRlcyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRJZGVudGl0eU5hbWVkQXR0cmlidXRlcyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRQb3N0dXJlUm9sZUF0dHJpYnV0ZXMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkUG9zdHVyZU5hbWVkQXR0cmlidXRlcyA9IFtdO1xuICAgIHRoaXMuZm9ybURhdGEuc2VydmljZVJvbGVzPy5mb3JFYWNoKGF0dHIgPT4ge1xuICAgICAgaWYgKGF0dHIuaW5kZXhPZignQCcpID09PSAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlTmFtZWRBdHRyaWJ1dGVzLnB1c2goc2VydmljZUlkQXR0cmlidXRlc01hcFthdHRyLnN1YnN0cmluZygxKV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlcnZpY2VSb2xlQXR0cmlidXRlcy5wdXNoKGF0dHIuc3Vic3RyaW5nKDEpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmZvcm1EYXRhLmlkZW50aXR5Um9sZXM/LmZvckVhY2goYXR0ciA9PiB7XG4gICAgICBpZiAoYXR0ci5pbmRleE9mKCdAJykgPT09IDApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzLnB1c2goaWRlbnRpdHlJZEF0dHJpYnV0ZXNNYXBbYXR0ci5zdWJzdHJpbmcoMSldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJZGVudGl0eVJvbGVBdHRyaWJ1dGVzLnB1c2goYXR0ci5zdWJzdHJpbmcoMSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZm9ybURhdGEucG9zdHVyZUNoZWNrUm9sZXM/LmZvckVhY2goYXR0ciA9PiB7XG4gICAgICBpZiAoYXR0ci5pbmRleE9mKCdAJykgPT09IDApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFBvc3R1cmVOYW1lZEF0dHJpYnV0ZXMucHVzaChwb3N0dXJlSWRBdHRyaWJ1dGVzTWFwW2F0dHIuc3Vic3RyaW5nKDEpXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUG9zdHVyZVJvbGVBdHRyaWJ1dGVzLnB1c2goYXR0ci5zdWJzdHJpbmcoMSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuc3ZjLmdldEFzc29jaWF0ZWRTZXJ2aWNlc0J5QXR0cmlidXRlKHRoaXMuc2VsZWN0ZWRTZXJ2aWNlUm9sZUF0dHJpYnV0ZXMsIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlTmFtZWRBdHRyaWJ1dGVzKTtcbiAgICB0aGlzLnN2Yy5nZXRBc3NvY2lhdGVkSWRlbnRpdGllc0J5QXR0cmlidXRlKHRoaXMuc2VsZWN0ZWRJZGVudGl0eVJvbGVBdHRyaWJ1dGVzLCB0aGlzLnNlbGVjdGVkSWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXMpO1xuICAgIHRoaXMuc3ZjLmdldEFzc29jaWF0ZWRQb3N0dXJlQ2hlY2tzQnlBdHRyaWJ1dGUodGhpcy5zZWxlY3RlZFBvc3R1cmVSb2xlQXR0cmlidXRlcywgdGhpcy5zZWxlY3RlZFBvc3R1cmVOYW1lZEF0dHJpYnV0ZXMpO1xuICB9XG5cbiAgaGVhZGVyQWN0aW9uUmVxdWVzdGVkKGFjdGlvbikge1xuICAgIHN3aXRjaChhY3Rpb24ubmFtZSkge1xuICAgICAgY2FzZSAnc2F2ZSc6XG4gICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Nsb3NlJzpcbiAgICAgICAgdGhpcy5yZXR1cm5Ub0xpc3RQYWdlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndG9nZ2xlLXZpZXcnOlxuICAgICAgICB0aGlzLmZvcm1WaWV3ID0gYWN0aW9uLmRhdGE7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmUoZXZlbnQ/KSB7XG4gICAgdGhpcy5mb3JtRGF0YS5uYW1lID0gdGhpcy5mb3JtRGF0YS5uYW1lLnRyaW0oKTtcbiAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZSgpO1xuICAgIGNvbnN0IGlzRXh0VmFsaWQgPSBhd2FpdCB0aGlzLmV4dFNlcnZpY2UudmFsaWRhdGVEYXRhKCk7XG4gICAgaWYoIWlzVmFsaWQgfHwgIWlzRXh0VmFsaWQpIHtcbiAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdFcnJvcicsXG4gICAgICAgICAgYERhdGEgSW52YWxpZGAsXG4gICAgICAgICAgYFNlcnZpY2UgUG9saWN5IGRhdGEgaXMgaW52YWxpZC4gUGxlYXNlIHVwZGF0ZSB0aGUgaGlnaGxpZ2h0ZWQgZmllbGRzIGFuZCB0cnkgYWdhaW4uYCxcbiAgICAgICk7XG4gICAgICB0aGlzLmdyb3dsZXJTZXJ2aWNlLnNob3coZ3Jvd2xlckRhdGEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmFwcGx5U2VsZWN0ZWRBdHRyaWJ1dGVzKCk7XG4gICAgdGhpcy5zdmMuc2F2ZSh0aGlzLmZvcm1EYXRhKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQ/LmNsb3NlKSB7XG4gICAgICAgIHRoaXMuY2xvc2VNb2RhbCh0cnVlLCB0cnVlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGEgPSByZXN1bHQ/LmRhdGE/LmlkID8gcmVzdWx0LmRhdGEgOiByZXN1bHQ7XG4gICAgICB0aGlzLl9kYXRhQ2hhbmdlID0gZmFsc2U7XG4gICAgICBpZiAoIWlzRW1wdHkoZGF0YS5pZCkpIHtcbiAgICAgICAgdGhpcy5mb3JtRGF0YSA9IGRhdGEgfHwgdGhpcy5mb3JtRGF0YTtcbiAgICAgICAgdGhpcy5pbml0RGF0YSA9IHRoaXMuZm9ybURhdGE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmluaXREYXRhID0gdGhpcy5mb3JtRGF0YTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmV0dXJuVG9MaXN0UGFnZSgpO1xuICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIGFwcGx5U2VsZWN0ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHRoaXMuZm9ybURhdGEuc2VydmljZVJvbGVzID0gdGhpcy5zdmMuZ2V0U2VsZWN0ZWRSb2xlcyh0aGlzLnNlbGVjdGVkU2VydmljZVJvbGVBdHRyaWJ1dGVzLCB0aGlzLnNlbGVjdGVkU2VydmljZU5hbWVkQXR0cmlidXRlcywgdGhpcy5zdmMuc2VydmljZU5hbWVkQXR0cmlidXRlc01hcCk7XG4gICAgdGhpcy5mb3JtRGF0YS5pZGVudGl0eVJvbGVzID0gdGhpcy5zdmMuZ2V0U2VsZWN0ZWRSb2xlcyh0aGlzLnNlbGVjdGVkSWRlbnRpdHlSb2xlQXR0cmlidXRlcywgdGhpcy5zZWxlY3RlZElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzLCB0aGlzLnN2Yy5pZGVudGl0eU5hbWVkQXR0cmlidXRlc01hcCk7XG4gICAgdGhpcy5mb3JtRGF0YS5wb3N0dXJlQ2hlY2tSb2xlcyA9IHRoaXMuc3ZjLmdldFNlbGVjdGVkUm9sZXModGhpcy5zZWxlY3RlZFBvc3R1cmVSb2xlQXR0cmlidXRlcywgdGhpcy5zZWxlY3RlZFBvc3R1cmVOYW1lZEF0dHJpYnV0ZXMsIHRoaXMuc3ZjLnBvc3R1cmVOYW1lZEF0dHJpYnV0ZXNNYXApO1xuICB9XG5cbiAgdmFsaWRhdGUoKSB7XG4gICAgdGhpcy5lcnJvcnMgPSB7fTtcbiAgICBpZiAoaXNFbXB0eSh0aGlzLmZvcm1EYXRhLm5hbWUpKSB7XG4gICAgICB0aGlzLmVycm9yc1snbmFtZSddID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGlzRW1wdHkodGhpcy5lcnJvcnMpO1xuICB9XG5cbiAgYXBpQWN0aW9uUmVxdWVzdGVkKGFjdGlvbikge1xuICAgIHN3aXRjaCAoYWN0aW9uLmlkKSB7XG4gICAgICBjYXNlICdjbGknOlxuICAgICAgICB0aGlzLmNvcHlDTElDb21tYW5kKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY3VybCc6XG4gICAgICAgIHRoaXMuY29weUNVUkxDb21tYW5kKCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGNvcHlDTElDb21tYW5kKCkge1xuICAgIGNvbnN0IHNlcnZpY2VSb2xlcyA9IHRoaXMuc3ZjLmdldFNlbGVjdGVkUm9sZXModGhpcy5zZWxlY3RlZFNlcnZpY2VSb2xlQXR0cmlidXRlcywgdGhpcy5zZWxlY3RlZFNlcnZpY2VOYW1lZEF0dHJpYnV0ZXMsIHRoaXMuc3ZjLnNlcnZpY2VOYW1lZEF0dHJpYnV0ZXNNYXApO1xuICAgIGNvbnN0IHNlcnZpY2VSb2xlc1ZhciA9IHRoaXMuZ2V0Um9sZXNDTElWYXJpYWJsZShzZXJ2aWNlUm9sZXMpO1xuXG4gICAgY29uc3QgaWRlbnRpdHlSb2xlcyA9IHRoaXMuc3ZjLmdldFNlbGVjdGVkUm9sZXModGhpcy5zZWxlY3RlZElkZW50aXR5Um9sZUF0dHJpYnV0ZXMsIHRoaXMuc2VsZWN0ZWRJZGVudGl0eU5hbWVkQXR0cmlidXRlcywgdGhpcy5zdmMuaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXNNYXApO1xuICAgIGNvbnN0IGlkZW50aXR5Um9sZXNWYXIgPSB0aGlzLmdldFJvbGVzQ0xJVmFyaWFibGUoaWRlbnRpdHlSb2xlcyk7XG5cbiAgICBjb25zdCBwY1JvbGVzID0gdGhpcy5zdmMuZ2V0U2VsZWN0ZWRSb2xlcyh0aGlzLnNlbGVjdGVkUG9zdHVyZVJvbGVBdHRyaWJ1dGVzLCB0aGlzLnNlbGVjdGVkUG9zdHVyZU5hbWVkQXR0cmlidXRlcywgdGhpcy5zdmMucG9zdHVyZU5hbWVkQXR0cmlidXRlc01hcCk7XG4gICAgY29uc3QgcGNSb2xlc1ZhciA9IHRoaXMuZ2V0Um9sZXNDTElWYXJpYWJsZShwY1JvbGVzKTtcblxuICAgIGNvbnN0IGNvbW1hbmQgPSBgeml0aSBlZGdlICR7dGhpcy5mb3JtRGF0YS5pZCA/ICd1cGRhdGUnIDogJ2NyZWF0ZSd9IHNlcnZpY2UtcG9saWN5ICR7dGhpcy5mb3JtRGF0YS5pZCA/IGAnJHt0aGlzLmZvcm1EYXRhLmlkfSdgIDogJyd9ICR7dGhpcy5mb3JtRGF0YS5pZCA/ICctLW5hbWUnIDogJyd9ICcke3RoaXMuZm9ybURhdGEubmFtZX0nICR7dGhpcy5mb3JtRGF0YS5pZCA/ICcnIDogdGhpcy5mb3JtRGF0YS50eXBlfSR7dGhpcy5mb3JtRGF0YS5pZCA/ICcnIDogYCAtLXNlbWFudGljICcke3RoaXMuZm9ybURhdGEuc2VtYW50aWN9J2B9IC0tc2VydmljZS1yb2xlcyAnJHtzZXJ2aWNlUm9sZXNWYXJ9JyAtLWlkZW50aXR5LXJvbGVzICcke2lkZW50aXR5Um9sZXNWYXJ9JyAtLXBvc3R1cmUtY2hlY2stcm9sZXMgJyR7cGNSb2xlc1Zhcn0nYDtcblxuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGNvbW1hbmQpO1xuICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgJ3N1Y2Nlc3MnLFxuICAgICAgICAnU3VjY2VzcycsXG4gICAgICAgIGBUZXh0IENvcGllZGAsXG4gICAgICAgIGBDTEkgY29tbWFuZCBjb3BpZWQgdG8gY2xpcGJvYXJkYCxcbiAgICApO1xuICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gIH1cblxuICBjb3B5Q1VSTENvbW1hbmQoKSB7XG4gICAgY29uc3Qgc2VydmljZVJvbGVzID0gdGhpcy5zdmMuZ2V0U2VsZWN0ZWRSb2xlcyh0aGlzLnNlbGVjdGVkU2VydmljZVJvbGVBdHRyaWJ1dGVzLCB0aGlzLnNlbGVjdGVkU2VydmljZU5hbWVkQXR0cmlidXRlcywgdGhpcy5zdmMuc2VydmljZU5hbWVkQXR0cmlidXRlc01hcCk7XG4gICAgY29uc3Qgc2VydmljZVJvbGVzVmFyID0gdGhpcy5nZXRSb2xlc0NVUkxWYXJpYWJsZShzZXJ2aWNlUm9sZXMpO1xuXG4gICAgY29uc3QgaWRlbnRpdHlSb2xlcyA9IHRoaXMuc3ZjLmdldFNlbGVjdGVkUm9sZXModGhpcy5zZWxlY3RlZElkZW50aXR5Um9sZUF0dHJpYnV0ZXMsIHRoaXMuc2VsZWN0ZWRJZGVudGl0eU5hbWVkQXR0cmlidXRlcywgdGhpcy5zdmMuaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXNNYXApO1xuICAgIGNvbnN0IGlkZW50aXR5Um9sZXNWYXIgPSB0aGlzLmdldFJvbGVzQ1VSTFZhcmlhYmxlKGlkZW50aXR5Um9sZXMpO1xuXG4gICAgY29uc3QgcGNSb2xlcyA9IHRoaXMuc3ZjLmdldFNlbGVjdGVkUm9sZXModGhpcy5zZWxlY3RlZFBvc3R1cmVSb2xlQXR0cmlidXRlcywgdGhpcy5zZWxlY3RlZFBvc3R1cmVOYW1lZEF0dHJpYnV0ZXMsIHRoaXMuc3ZjLnBvc3R1cmVOYW1lZEF0dHJpYnV0ZXNNYXApO1xuICAgIGNvbnN0IHBjUm9sZXNWYXIgPSB0aGlzLmdldFJvbGVzQ1VSTFZhcmlhYmxlKHBjUm9sZXMpO1xuXG4gICAgY29uc3QgY29tbWFuZCA9IGBjdXJsICcke3RoaXMuYXBpQ2FsbFVSTH0nIFxcXFxcbiAgICAke3RoaXMuZm9ybURhdGEuaWQgPyAnLS1yZXF1ZXN0IFBBVENIIFxcXFwnIDogJ1xcXFwnfVxuICAgIC1IICdhY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24nIFxcXFxcbiAgICAtSCAnY29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9qc29uJyBcXFxcXG4gICAgLUggJ3p0LXNlc3Npb246ICR7dGhpcy5zZXR0aW5ncy5zZXNzaW9uLmlkfScgXFxcXFxuICAgIC0tZGF0YS1yYXcgJ3tcIm5hbWVcIjpcIiR7dGhpcy5mb3JtRGF0YS5uYW1lfVwiLFwic2VydmljZVJvbGVzXCI6JHtzZXJ2aWNlUm9sZXNWYXJ9LFwiaWRlbnRpdHlSb2xlc1wiOiR7aWRlbnRpdHlSb2xlc1Zhcn0sXCJwb3N0dXJlQ2hlY2tSb2xlc1wiOiR7cGNSb2xlc1Zhcn0sXCJzZW1hbnRpY1wiOlwiJHt0aGlzLmZvcm1EYXRhLnNlbWFudGljfVwiLFwidHlwZVwiOlwiJHt0aGlzLmZvcm1EYXRhLnR5cGV9XCJ9J2A7XG5cbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChjb21tYW5kKTtcbiAgICBjb25zdCBncm93bGVyRGF0YSA9IG5ldyBHcm93bGVyTW9kZWwoXG4gICAgICAgICdzdWNjZXNzJyxcbiAgICAgICAgJ1N1Y2Nlc3MnLFxuICAgICAgICBgVGV4dCBDb3BpZWRgLFxuICAgICAgICBgQ1VSTCBjb21tYW5kIGNvcGllZCB0byBjbGlwYm9hcmRgLFxuICAgICk7XG4gICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgfVxuXG4gIGdldCBhcGlDYWxsVVJMKCkge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnNlbGVjdGVkRWRnZUNvbnRyb2xsZXIgKyAnL2VkZ2UvbWFuYWdlbWVudC92MS9zZXJ2aWNlLXBvbGljaWVzJyArICh0aGlzLmZvcm1EYXRhLmlkID8gYC8ke3RoaXMuZm9ybURhdGEuaWR9YCA6ICcnKTtcbiAgfVxuXG4gIGdldCBhcGlEYXRhKCkge1xuICAgIGNvbnN0IGRhdGE6IGFueSA9IHtcbiAgICAgIG5hbWU6IHRoaXMuZm9ybURhdGE/Lm5hbWUgfHwgJycsXG4gICAgICBhcHBEYXRhOiB0aGlzLmZvcm1EYXRhPy5hcHBEYXRhIHx8ICcnLFxuICAgICAgc2VydmljZVJvbGVzOiB0aGlzLnN2Yy5nZXRTZWxlY3RlZFJvbGVzKHRoaXMuc2VsZWN0ZWRTZXJ2aWNlUm9sZUF0dHJpYnV0ZXMsIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlTmFtZWRBdHRyaWJ1dGVzLCB0aGlzLnN2Yy5zZXJ2aWNlTmFtZWRBdHRyaWJ1dGVzTWFwKSxcbiAgICAgIGlkZW50aXR5Um9sZXM6IHRoaXMuc3ZjLmdldFNlbGVjdGVkUm9sZXModGhpcy5zZWxlY3RlZElkZW50aXR5Um9sZUF0dHJpYnV0ZXMsIHRoaXMuc2VsZWN0ZWRJZGVudGl0eU5hbWVkQXR0cmlidXRlcywgdGhpcy5zdmMuaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXNNYXApLFxuICAgICAgcG9zdHVyZUNoZWNrUm9sZXM6IHRoaXMuc3ZjLmdldFNlbGVjdGVkUm9sZXModGhpcy5zZWxlY3RlZFBvc3R1cmVSb2xlQXR0cmlidXRlcywgdGhpcy5zZWxlY3RlZFBvc3R1cmVOYW1lZEF0dHJpYnV0ZXMsIHRoaXMuc3ZjLnBvc3R1cmVOYW1lZEF0dHJpYnV0ZXNNYXApLFxuICAgICAgc2VtYW50aWM6IHRoaXMuZm9ybURhdGE/LnNlbWFudGljLFxuICAgICAgdHlwZTogdGhpcy5mb3JtRGF0YT8udHlwZSxcbiAgICAgIHRhZ3M6IHRoaXMuZm9ybURhdGE/LnRhZ3NcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBfYXBpRGF0YSA9IHt9O1xuICBzZXQgYXBpRGF0YShkYXRhKSB7XG4gICAgdGhpcy5fYXBpRGF0YSA9IGRhdGE7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInByb2plY3RhYmxlLWZvcm0td3JhcHBlclwiXG4gICAgIChrZXl1cC5lbnRlcik9XCJzYXZlKCRldmVudClcIlxuICAgICAoa2V5dXAuZXNjYXBlKT1cImNsb3NlTW9kYWwoZmFsc2UpXCJcbj5cbiAgICA8bGliLWZvcm0taGVhZGVyXG4gICAgICAgICAgICBbZGF0YV09XCJmb3JtRGF0YVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiZm9ybURhdGEuaWQgPyAnRWRpdCBTZXJ2aWNlIFBvbGljeTogJyA6ICdDcmVhdGUgTmV3IFNlcnZpY2UgUG9saWN5J1wiXG4gICAgICAgICAgICBbbW9yZUFjdGlvbnNdPVwibW9yZUFjdGlvbnNcIlxuICAgICAgICAgICAgKGFjdGlvblJlcXVlc3RlZCk9XCJoZWFkZXJBY3Rpb25SZXF1ZXN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICBbKGZvcm1WaWV3KV09XCJmb3JtVmlld1wiXG4gICAgPjwvbGliLWZvcm0taGVhZGVyPlxuICAgIDxkaXYgY2xhc3M9XCJzZXJ2aWNlLXBvbGljeS1mb3JtLWNvbnRhaW5lciBwcm9qZWN0YWJsZS1mb3JtLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHJvamVjdGFibGUtZm9ybS1tYWluLWNvbHVtbiBmb3JtLWdyb3VwLXJvd1wiICpuZ0lmPVwiZm9ybVZpZXcgPT09ICdzaW1wbGUnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cC1jb2x1bW4gdGhyZWUtZmlmdGhzXCI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLWNvbnRhaW5lciBbdGl0bGVdPVwiJ1NlcnZpY2UgUG9saWN5IE5hbWUnXCIgW2xhYmVsXT1cIidSRVFVSVJFRCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWZpZWxkLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIk5hbWUgdGhpcyBlZGdlIHNlcnZpY2UgcG9saWN5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ZXJyb3I6IGVycm9yc1snbmFtZSddfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JtRGF0YS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvZm9jdXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbmFtZUZpZWxkSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2xpYi1mb3JtLWZpZWxkLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bGliLWZvcm0tZmllbGQtY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1NlbGVjdCBTZXJ2aWNlIEF0dHJpYnV0ZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInT1BUSU9OQUwnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50U3R5bGVdPVwiJ3otaW5kZXg6IDEwMDAwMydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hlbHBUZXh0XT1cIidDaG9vc2Ugd2hpY2ggc2VydmljZXMgdG8gYXNzb2NpYXRlIHRvIHRoaXMgcG9saWN5IGJ5IHBpY2tpbmcgZnJvbSB0aGUgbGlzdCBvZiBhdmFpbGFibGUgYXR0cmlidXRlcydcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGxpYi10YWctc2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkUm9sZUF0dHJpYnV0ZXMpXT1cInNlbGVjdGVkU2VydmljZVJvbGVBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzKV09XCJzZWxlY3RlZFNlcnZpY2VOYW1lZEF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVSb2xlQXR0cmlidXRlc109XCJzdmMuc2VydmljZVJvbGVBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlTmFtZWRBdHRyaWJ1dGVzXT1cInN2Yy5zZXJ2aWNlTmFtZWRBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXNDaGFuZ2UpPVwic3ZjLmdldEFzc29jaWF0ZWRTZXJ2aWNlc0J5QXR0cmlidXRlKHNlbGVjdGVkU2VydmljZVJvbGVBdHRyaWJ1dGVzLCBzZWxlY3RlZFNlcnZpY2VOYW1lZEF0dHJpYnV0ZXMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWRSb2xlQXR0cmlidXRlc0NoYW5nZSk9XCJzdmMuZ2V0QXNzb2NpYXRlZFNlcnZpY2VzQnlBdHRyaWJ1dGUoc2VsZWN0ZWRTZXJ2aWNlUm9sZUF0dHJpYnV0ZXMsIHNlbGVjdGVkU2VydmljZU5hbWVkQXR0cmlidXRlcylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IHNlcnZpY2UgYXR0cmlidXRlcydcIlxuICAgICAgICAgICAgICAgICAgICA+PC9saWItdGFnLXNlbGVjdG9yPlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInU2VsZWN0IElkZW50aXR5IEF0dHJpYnV0ZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInT1BUSU9OQUwnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50U3R5bGVdPVwiJ3otaW5kZXg6IDEwMDAwMidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hlbHBUZXh0XT1cIidDaG9vc2Ugd2hpY2ggaWRlbnRpdGllcyB0byBhc3NvY2lhdGUgdG8gdGhpcyBwb2xpY3kgYnkgcGlja2luZyBmcm9tIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBhdHRyaWJ1dGVzJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bGliLXRhZy1zZWxlY3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWRSb2xlQXR0cmlidXRlcyldPVwic2VsZWN0ZWRJZGVudGl0eVJvbGVBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHNlbGVjdGVkTmFtZWRBdHRyaWJ1dGVzKV09XCJzZWxlY3RlZElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlUm9sZUF0dHJpYnV0ZXNdPVwic3ZjLmlkZW50aXR5Um9sZUF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVOYW1lZEF0dHJpYnV0ZXNdPVwic3ZjLmlkZW50aXR5TmFtZWRBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXNDaGFuZ2UpPVwic3ZjLmdldEFzc29jaWF0ZWRJZGVudGl0aWVzQnlBdHRyaWJ1dGUoc2VsZWN0ZWRJZGVudGl0eVJvbGVBdHRyaWJ1dGVzLCBzZWxlY3RlZElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkUm9sZUF0dHJpYnV0ZXNDaGFuZ2UpPVwic3ZjLmdldEFzc29jaWF0ZWRJZGVudGl0aWVzQnlBdHRyaWJ1dGUoc2VsZWN0ZWRJZGVudGl0eVJvbGVBdHRyaWJ1dGVzLCBzZWxlY3RlZElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgaWRlbnRpdHkgYXR0cmlidXRlcydcIlxuICAgICAgICAgICAgICAgICAgICA+PC9saWItdGFnLXNlbGVjdG9yPlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInU2VsZWN0IFBvc3R1cmUgQ2hlY2sgQXR0cmlidXRlcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidPUFRJT05BTCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRTdHlsZV09XCInei1pbmRleDogMTAwMDAxJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGVscFRleHRdPVwiJ0Nob29zZSB3aGljaCBwb3N0dXJlIGNoZWNrcyB0byBhc3NvY2lhdGUgdG8gdGhpcyBwb2xpY3kgYnkgcGlja2luZyBmcm9tIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBhdHRyaWJ1dGVzJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bGliLXRhZy1zZWxlY3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWRSb2xlQXR0cmlidXRlcyldPVwic2VsZWN0ZWRQb3N0dXJlUm9sZUF0dHJpYnV0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXMpXT1cInNlbGVjdGVkUG9zdHVyZU5hbWVkQXR0cmlidXRlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhzZWxlY3RlZFJvbGVBdHRyaWJ1dGVzKV09XCJzdmMucG9zdHVyZVJvbGVBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXZhaWxhYmxlTmFtZWRBdHRyaWJ1dGVzXT1cInN2Yy5wb3N0dXJlTmFtZWRBdHRyaWJ1dGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWROYW1lZEF0dHJpYnV0ZXNDaGFuZ2UpPVwic3ZjLmdldEFzc29jaWF0ZWRQb3N0dXJlQ2hlY2tzQnlBdHRyaWJ1dGUoc2VsZWN0ZWRQb3N0dXJlUm9sZUF0dHJpYnV0ZXMsIHNlbGVjdGVkUG9zdHVyZU5hbWVkQXR0cmlidXRlcylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZFJvbGVBdHRyaWJ1dGVzQ2hhbmdlKT1cInN2Yy5nZXRBc3NvY2lhdGVkUG9zdHVyZUNoZWNrc0J5QXR0cmlidXRlKHNlbGVjdGVkUG9zdHVyZVJvbGVBdHRyaWJ1dGVzLCBzZWxlY3RlZFBvc3R1cmVOYW1lZEF0dHJpYnV0ZXMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBwb3N0dXJlIGNoZWNrIGF0dHJpYnV0ZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbGliLXRhZy1zZWxlY3Rvcj5cbiAgICAgICAgICAgICAgICA8L2xpYi1mb3JtLWZpZWxkLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bGliLWZvcm0tZmllbGQtY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1R5cGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZTJdPVwiJ1NlbWFudGljJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGF5b3V0XT1cIidyb3cnXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1EYXRhLnR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiUG9saWN5VHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWZpZWxkLWRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkJpbmRcIj5CaW5kPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiRGlhbFwiPkRpYWw8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZvcm1EYXRhLnNlbWFudGljXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIlBvbGljeVNlbWFudGljXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQtZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQW55T2ZcIj5BbnlPZjwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFsbE9mXCI+QWxsT2Y8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLXRvZ2dsZSBbKHRvZ2dsZU9uKV09XCJzaG93TW9yZVwiICh0b2dnbGVPbkNoYW5nZSk9XCJzaG93TW9yZUNoYW5nZWQoJGV2ZW50KVwiIHN0eWxlPVwibWFyZ2luOiAwcHggMTBweFwiPjwvbGliLWZvcm0tZmllbGQtdG9nZ2xlPlxuICAgICAgICAgICAgICAgIDxkaXYgW2hpZGRlbl09XCIhc2hvd01vcmVcIiBjbGFzcz1cImZvcm0tZ3JvdXAtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0N1c3RvbSBUYWdzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidPUFRJT05BTCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1maWVsZC1hZHZhbmNlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaGlkZVRhZ3NcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGliLWN1c3RvbS10YWdzIFsodGFncyldPVwiZm9ybURhdGEudGFnc1wiPjwvbGliLWN1c3RvbS10YWdzPlxuICAgICAgICAgICAgICAgICAgICA8L2xpYi1mb3JtLWZpZWxkLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtY29sdW1uIHR3by1maWZ0aHNcIj5cbiAgICAgICAgICAgICAgICA8bGliLWZvcm0tZmllbGQtY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0Fzc29jaWF0ZWQgU2VydmljZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb3VudF09XCJzdmMuYXNzb2NpYXRlZFNlcnZpY2VOYW1lcy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIidoaWRlLW92ZXJmbG93J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaGVscFRleHRdPVwiJ1ByZXZpZXcgbGlzdCBvZiBhbGwgc2VydmljZXMgdGhhdCB0aGlzIFNlcnZpY2UgUG9saWN5IGlzIGFzc29jaWF0ZWQgd2l0aC4nXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItcHJldmlldy1saXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsaWNrYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzTG9hZGluZ109XCJzZXJ2aWNlc0xvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbGxOYW1lc109XCJzdmMuYXNzb2NpYXRlZFNlcnZpY2VOYW1lc1wiXG4gICAgICAgICAgICAgICAgICAgID48L2xpYi1wcmV2aWV3LWxpc3Q+XG4gICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidBc3NvY2lhdGVkIElkZW50aXRpZXMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb3VudF09XCJzdmMuYXNzb2NpYXRlZElkZW50aXR5TmFtZXMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtoZWxwVGV4dF09XCInUHJldmlldyBsaXN0IG9mIGFsbCBJZGVudGl0aWVzIHRoYXQgdGhpcyBTZXJ2aWNlIFBvbGljeSBpcyBhc3NvY2lhdGVkIHdpdGguJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bGliLXByZXZpZXctbGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGlja2FibGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc0xvYWRpbmddPVwiaWRlbnRpdGllc0xvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthbGxOYW1lc109XCJzdmMuYXNzb2NpYXRlZElkZW50aXR5TmFtZXNcIlxuICAgICAgICAgICAgICAgICAgICA+PC9saWItcHJldmlldy1saXN0PlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxsaWItZm9ybS1maWVsZC1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQXNzb2NpYXRlZCBQb3N0dXJlIENoZWNrcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvdW50XT1cInN2Yy5hc3NvY2lhdGVkUG9zdHVyZUNoZWNrTmFtZXMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtoZWxwVGV4dF09XCInUHJldmlldyBsaXN0IG9mIGFsbCBQb3N0dXJlIENoZWNrcyB0aGF0IHRoaXMgU2VydmljZSBQb2xpY3kgaXMgYXNzb2NpYXRlZCB3aXRoLidcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGxpYi1wcmV2aWV3LWxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xpY2thYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNMb2FkaW5nXT1cInBvc3R1cmVDaGVja3NMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxsTmFtZXNdPVwic3ZjLmFzc29jaWF0ZWRQb3N0dXJlQ2hlY2tOYW1lc1wiXG4gICAgICAgICAgICAgICAgICAgID48L2xpYi1wcmV2aWV3LWxpc3Q+XG4gICAgICAgICAgICAgICAgPC9saWItZm9ybS1maWVsZC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGxpYi1mb3JtLWZpZWxkLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidBUEkgQ2FsbHMnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtoZWFkZXJBY3Rpb25zXT1cImFwaU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGFjdGlvblJlcXVlc3RlZCk9XCJhcGlBY3Rpb25SZXF1ZXN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tZmllbGQtaW5wdXRcIiBbdmFsdWVdPVwiYXBpQ2FsbFVSTFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWNvcHkgY29weVwiIChjbGljayk9XCJjb3B5VG9DbGlwYm9hcmQoYXBpQ2FsbFVSTClcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItanNvbi12aWV3ICpuZ0lmPVwiZm9ybURhdGFcIiBbKGRhdGEpXT1cImFwaURhdGFcIiBbcmVhZE9ubHldPVwidHJ1ZVwiIFtzaG93Q29weV09XCJ0cnVlXCI+PC9saWItanNvbi12aWV3PlxuICAgICAgICAgICAgICAgIDwvbGliLWZvcm0tZmllbGQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cC1jb2x1bW5cIiAqbmdJZj1cImZvcm1WaWV3ID09PSAncmF3J1wiPlxuICAgICAgICAgICAgPGxpYi1qc29uLXZpZXcgKm5nSWY9XCJmb3JtRGF0YVwiIFsoZGF0YSldPVwiZm9ybURhdGFcIj48L2xpYi1qc29uLXZpZXc+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG48bGliLWxvYWRpbmctaW5kaWNhdG9yICpuZ0lmPVwiaXNMb2FkaW5nXCIgW2lzTG9hZGluZ109XCJpc0xvYWRpbmdcIj48L2xpYi1sb2FkaW5nLWluZGljYXRvcj4iXX0=
@@ -53,20 +53,8 @@ class ServicePolicyFormService {
53
53
  return false;
54
54
  });
55
55
  }).catch((resp) => {
56
- let errorMessage;
57
- if (resp?.error?.error?.cause?.message) {
58
- errorMessage = resp?.error?.error?.cause?.message;
59
- }
60
- else if (resp?.error?.error?.cause?.reason) {
61
- errorMessage = resp?.error?.error?.cause?.reason;
62
- }
63
- else if (resp?.error?.message) {
64
- errorMessage = resp?.error?.message;
65
- }
66
- else {
67
- errorMessage = 'An unknown error occurred';
68
- }
69
- const growlerData = new GrowlerModel('error', 'Error', `Error Creating Service Policy`, errorMessage);
56
+ const errorMessage = this.zitiService.getErrorMessage(resp);
57
+ const growlerData = new GrowlerModel('error', 'Error', `Error ${isUpdate ? 'Updating' : 'Creating'} Service Policy`, errorMessage);
70
58
  this.growlerService.show(growlerData);
71
59
  throw resp;
72
60
  });
@@ -236,4 +224,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
236
224
  type: Inject,
237
225
  args: [SERVICE_POLICY_EXTENSION_SERVICE]
238
226
  }] }]; } });
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1wb2xpY3ktZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Byb2plY3RhYmxlLWZvcm1zL3NlcnZpY2UtcG9saWN5L3NlcnZpY2UtcG9saWN5LWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFDLE9BQU8sRUFBUyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUMsT0FBTyxFQUFDLGlCQUFpQixFQUFrQixNQUFNLHFDQUFxQyxDQUFDO0FBRXZGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQWtCLE1BQU0sb0NBQW9DLENBQUM7QUFHckYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUVsQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7Ozs7O0FBRTdELE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLElBQUksY0FBYyxDQUFNLGtDQUFrQyxDQUFDLENBQUM7QUFFNUcsTUFHYSx3QkFBd0I7SUFxQmpDLFlBQ3FDLGVBQWdDLEVBQzlCLFdBQTRCLEVBQ3ZELGNBQThCLEVBQ1csVUFBNEI7UUFINUMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQzlCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUN2RCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDVyxlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQXZCakYseUJBQW9CLEdBQVEsRUFBRSxDQUFDO1FBQy9CLDRCQUF1QixHQUFRLEVBQUUsQ0FBQztRQUNsQyw0QkFBdUIsR0FBUSxFQUFFLENBQUM7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QUFHLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2xFLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLEVBQUU7Z0JBQ3JELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDcEUsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLHNCQUFzQixHQUFHLGVBQWUsQ0FBQztZQUM5QyxPQUFPLGVBQWUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBOU9RLHdCQUF3QixrQkFzQnJCLGdCQUFnQixhQUNoQixpQkFBaUIsMkNBRWpCLGdDQUFnQzttSEF6Qm5DLHdCQUF3QixjQUZyQixNQUFNOztTQUVULHdCQUF3Qjs0RkFBeEIsd0JBQXdCO2tCQUhwQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBdUJRLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFDdkIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUV4QixNQUFNOzJCQUFDLGdDQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgSW5qZWN0LCBJbmplY3Rpb25Ub2tlbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7aXNFbXB0eSwgdW5zZXQsIGtleXN9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1pJVElfREFUQV9TRVJWSUNFLCBaaXRpRGF0YVNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy96aXRpLWRhdGEuc2VydmljZVwiO1xuaW1wb3J0IHtHcm93bGVyU2VydmljZX0gZnJvbSBcIi4uLy4uL21lc3NhZ2luZy9ncm93bGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7R3Jvd2xlck1vZGVsfSBmcm9tIFwiLi4vLi4vbWVzc2FnaW5nL2dyb3dsZXIubW9kZWxcIjtcbmltcG9ydCB7U0VUVElOR1NfU0VSVklDRSwgU2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvc2V0dGluZ3Muc2VydmljZVwiO1xuaW1wb3J0IHtFeHRlbnNpb25TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vZXh0ZW5kYWJsZS9leHRlbnNpb25zLW5vb3Auc2VydmljZVwiO1xuXG5pbXBvcnQge3NvcnRlZFVuaXF9IGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7U2VydmljZVBvbGljeX0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9zZXJ2aWNlLXBvbGljeVwiO1xuXG5leHBvcnQgY29uc3QgU0VSVklDRV9QT0xJQ1lfRVhURU5TSU9OX1NFUlZJQ0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48YW55PignU0VSVklDRV9QT0xJQ1lfRVhURU5TSU9OX1NFUlZJQ0UnKTtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTZXJ2aWNlUG9saWN5Rm9ybVNlcnZpY2Uge1xuXG4gICAgYXNzb2NpYXRlZElkZW50aXRpZXM6IGFueSA9IFtdO1xuICAgIGFzc29jaWF0ZWRJZGVudGl0eU5hbWVzOiBhbnkgPSBbXTtcbiAgICBhc3NvY2lhdGVkUG9zdHVyZUNoZWNrczogYW55ID0gW107XG4gICAgYXNzb2NpYXRlZFBvc3R1cmVDaGVja05hbWVzOiBhbnkgPSBbXTtcbiAgICBhc3NvY2lhdGVkU2VydmljZXM6IGFueSA9IFtdO1xuICAgIGFzc29jaWF0ZWRTZXJ2aWNlTmFtZXM6IGFueSA9IFtdO1xuXG4gICAgc2VydmljZU5hbWVkQXR0cmlidXRlc01hcDogYW55ID0ge307XG4gICAgaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXNNYXA6IGFueSA9IHt9O1xuICAgIHBvc3R1cmVOYW1lZEF0dHJpYnV0ZXNNYXA6IGFueSA9IHt9O1xuXG4gICAgaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXM6IGFueSA9IFtdO1xuICAgIHNlcnZpY2VOYW1lZEF0dHJpYnV0ZXM6IGFueSA9IFtdO1xuICAgIHBvc3R1cmVOYW1lZEF0dHJpYnV0ZXM6IGFueSA9IFtdO1xuXG4gICAgc2VydmljZVJvbGVBdHRyaWJ1dGVzOiBhbnkgPSBbXTtcbiAgICBpZGVudGl0eVJvbGVBdHRyaWJ1dGVzOiBhbnkgPSBbXTtcbiAgICBwb3N0dXJlUm9sZUF0dHJpYnV0ZXM6IGFueSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoU0VUVElOR1NfU0VSVklDRSkgcHVibGljIHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFpJVElfREFUQV9TRVJWSUNFKSBwcml2YXRlIHppdGlTZXJ2aWNlOiBaaXRpRGF0YVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZ3Jvd2xlclNlcnZpY2U6IEdyb3dsZXJTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFNFUlZJQ0VfUE9MSUNZX0VYVEVOU0lPTl9TRVJWSUNFKXByaXZhdGUgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZVxuICAgICkge31cblxuICAgIHNhdmUoZm9ybURhdGEpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBpc1VwZGF0ZSA9ICFpc0VtcHR5KGZvcm1EYXRhLmlkKTtcbiAgICAgICAgY29uc3QgZGF0YTogYW55ID0gdGhpcy5nZXRTZXJ2aWNlUG9saWN5RGF0YU1vZGVsKGZvcm1EYXRhLCBpc1VwZGF0ZSk7XG4gICAgICAgIGNvbnN0IHN2YyA9IGlzVXBkYXRlID8gdGhpcy56aXRpU2VydmljZS5wYXRjaC5iaW5kKHRoaXMueml0aVNlcnZpY2UpIDogdGhpcy56aXRpU2VydmljZS5wb3N0LmJpbmQodGhpcy56aXRpU2VydmljZSk7XG4gICAgICAgIHJldHVybiBzdmMoJ3NlcnZpY2UtcG9saWNpZXMnLCBkYXRhLCBmb3JtRGF0YS5pZCkudGhlbihhc3luYyAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gcmVzdWx0Py5kYXRhPy5pZCB8fCBmb3JtRGF0YS5pZDtcbiAgICAgICAgICAgIGxldCByb3V0ZXIgPSBhd2FpdCB0aGlzLnppdGlTZXJ2aWNlLmdldFN1YmRhdGEoJ3NlcnZpY2UtcG9saWNpZXMnLCBpZCwgJycpLnRoZW4oKHJvdXRlckRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm91dGVyRGF0YS5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5leHRTZXJ2aWNlLmZvcm1EYXRhU2F2ZWQocm91dGVyKS50aGVuKChmb3JtU2F2ZWRSZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogcm91dGVyLFxuICAgICAgICAgICAgICAgICAgICBjbG9zZTogdGhpcy5leHRTZXJ2aWNlLmNsb3NlQWZ0ZXJTYXZlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBncm93bGVyRGF0YSA9IG5ldyBHcm93bGVyTW9kZWwoXG4gICAgICAgICAgICAgICAgICAgICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgJ1N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICBgU2VydmljZSBQb2xpY3kgJHtpc1VwZGF0ZSA/ICdVcGRhdGVkJyA6ICdDcmVhdGVkJ31gLFxuICAgICAgICAgICAgICAgICAgICBgU3VjY2Vzc2Z1bGx5ICR7aXNVcGRhdGUgPyAndXBkYXRlZCcgOiAnY3JlYXRlZCd9IFNlcnZpY2UgUG9saWN5OiAke2Zvcm1EYXRhLm5hbWV9YCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbDtcbiAgICAgICAgICAgIH0pLmNhdGNoKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkuY2F0Y2goKHJlc3ApID0+IHtcbiAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICBpZiAocmVzcD8uZXJyb3I/LmVycm9yPy5jYXVzZT8ubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHJlc3A/LmVycm9yPy5lcnJvcj8uY2F1c2U/Lm1lc3NhZ2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3A/LmVycm9yPy5lcnJvcj8uY2F1c2U/LnJlYXNvbikge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHJlc3A/LmVycm9yPy5lcnJvcj8uY2F1c2U/LnJlYXNvbjtcbiAgICAgICAgICAgIH1lbHNlIGlmIChyZXNwPy5lcnJvcj8ubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHJlc3A/LmVycm9yPy5tZXNzYWdlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAnQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBncm93bGVyRGF0YSA9IG5ldyBHcm93bGVyTW9kZWwoXG4gICAgICAgICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAnRXJyb3InLFxuICAgICAgICAgICAgICAgIGBFcnJvciBDcmVhdGluZyBTZXJ2aWNlIFBvbGljeWAsXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICB0aHJvdyByZXNwO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldEFzc29jaWF0ZWRTZXJ2aWNlc0J5Um9sZShpZCkge1xuICAgICAgICB0aGlzLnppdGlTZXJ2aWNlLmdldFN1YmRhdGEoJ3NlcnZpY2UtcG9saWNpZXMnLCBpZCwgJ3NlcnZpY2VzJykudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VzID0gcmVzdWx0LmRhdGE7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlTmFtZXMgPSB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlcy5tYXAoKHN2YykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdmMubmFtZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRBc3NvY2lhdGVkSWRlbnRpdGllc0J5SWQoaWQpIHtcbiAgICAgICAgdGhpcy56aXRpU2VydmljZS5nZXRTdWJkYXRhKCdzZXJ2aWNlLXBvbGljaWVzJywgaWQsICdpZGVudGl0aWVzJykudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZElkZW50aXRpZXMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZElkZW50aXR5TmFtZXMgPSB0aGlzLmFzc29jaWF0ZWRJZGVudGl0aWVzLm1hcCgoaWRlbnQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWRlbnQubmFtZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRBc3NvY2lhdGVkUG9zdHVyZUNoZWNrc0J5SWQoaWQpIHtcbiAgICAgICAgdGhpcy56aXRpU2VydmljZS5nZXRTdWJkYXRhKCdzZXJ2aWNlLXBvbGljaWVzJywgaWQsICdwb3N0dXJlLWNoZWNrcycpLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRQb3N0dXJlQ2hlY2tzID0gcmVzdWx0LmRhdGE7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRQb3N0dXJlQ2hlY2tOYW1lcyA9IHRoaXMuYXNzb2NpYXRlZFBvc3R1cmVDaGVja3MubWFwKChwb3N0dXJlQ2hlY2spID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcG9zdHVyZUNoZWNrLm5hbWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0QXNzb2NpYXRlZFNlcnZpY2VzQnlBdHRyaWJ1dGUocm9sZUF0dHJpYnV0ZXMsIG5hbWVkQXR0cmlidXRlcykge1xuICAgICAgICB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlTmFtZXMgPSBbXTtcbiAgICAgICAgaWYgKGlzRW1wdHkocm9sZUF0dHJpYnV0ZXMpKSB7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlTmFtZXMgPSBbLi4ubmFtZWRBdHRyaWJ1dGVzXTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLnppdGlTZXJ2aWNlLmdldFJvbGVGaWx0ZXIocm9sZUF0dHJpYnV0ZXMpO1xuICAgICAgICBjb25zdCBwYWdpbmcgPSB0aGlzLnppdGlTZXJ2aWNlLkRFRkFVTFRfUEFHSU5HO1xuICAgICAgICBwYWdpbmcubm9TZWFyY2ggPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UuZ2V0KCdzZXJ2aWNlcycsIHBhZ2luZywgZmlsdGVycykudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VzID0gcmVzdWx0LmRhdGE7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlTmFtZXMgPSB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlcy5tYXAoKHN2YykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdmMubmFtZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkU2VydmljZU5hbWVzID0gWy4uLnRoaXMuYXNzb2NpYXRlZFNlcnZpY2VOYW1lcywgLi4ubmFtZWRBdHRyaWJ1dGVzXTtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VOYW1lcyA9IHNvcnRlZFVuaXEodGhpcy5hc3NvY2lhdGVkU2VydmljZU5hbWVzKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlcztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0QXNzb2NpYXRlZElkZW50aXRpZXNCeUF0dHJpYnV0ZShyb2xlQXR0cmlidXRlcywgbmFtZWRBdHRyaWJ1dGVzKSB7XG4gICAgICAgIHRoaXMuYXNzb2NpYXRlZElkZW50aXR5TmFtZXMgPSBbXTtcbiAgICAgICAgaWYgKGlzRW1wdHkocm9sZUF0dHJpYnV0ZXMpKSB7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRJZGVudGl0eU5hbWVzID0gWy4uLm5hbWVkQXR0cmlidXRlc107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsdGVycyA9IHRoaXMueml0aVNlcnZpY2UuZ2V0Um9sZUZpbHRlcihyb2xlQXR0cmlidXRlcyk7XG4gICAgICAgIGNvbnN0IHBhZ2luZyA9IHRoaXMueml0aVNlcnZpY2UuREVGQVVMVF9QQUdJTkc7XG4gICAgICAgIHBhZ2luZy5ub1NlYXJjaCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnppdGlTZXJ2aWNlLmdldCgnaWRlbnRpdGllcycsIHBhZ2luZywgZmlsdGVycykudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZElkZW50aXRpZXMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZElkZW50aXR5TmFtZXMgPSB0aGlzLmFzc29jaWF0ZWRJZGVudGl0aWVzLm1hcCgoc3ZjKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN2Yy5uYW1lO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRJZGVudGl0eU5hbWVzID0gWy4uLnRoaXMuYXNzb2NpYXRlZElkZW50aXR5TmFtZXMsIC4uLm5hbWVkQXR0cmlidXRlc107XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRJZGVudGl0eU5hbWVzID0gc29ydGVkVW5pcSh0aGlzLmFzc29jaWF0ZWRJZGVudGl0eU5hbWVzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0QXNzb2NpYXRlZFBvc3R1cmVDaGVja3NCeUF0dHJpYnV0ZShyb2xlQXR0cmlidXRlcywgbmFtZWRBdHRyaWJ1dGVzKSB7XG4gICAgICAgIHRoaXMuYXNzb2NpYXRlZFBvc3R1cmVDaGVja05hbWVzID0gW107XG4gICAgICAgIGlmIChpc0VtcHR5KHJvbGVBdHRyaWJ1dGVzKSkge1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkUG9zdHVyZUNoZWNrTmFtZXMgPSBbLi4ubmFtZWRBdHRyaWJ1dGVzXTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy56aXRpU2VydmljZS5nZXRSb2xlRmlsdGVyKHJvbGVBdHRyaWJ1dGVzKTtcbiAgICAgICAgY29uc3QgcGFnaW5nID0gdGhpcy56aXRpU2VydmljZS5ERUZBVUxUX1BBR0lORztcbiAgICAgICAgcGFnaW5nLm5vU2VhcmNoID0gZmFsc2U7XG4gICAgICAgIHRoaXMueml0aVNlcnZpY2UuZ2V0KCdwb3N0dXJlLWNoZWNrcycsIHBhZ2luZywgZmlsdGVycykudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFBvc3R1cmVDaGVja3MgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFBvc3R1cmVDaGVja05hbWVzID0gdGhpcy5hc3NvY2lhdGVkUG9zdHVyZUNoZWNrcy5tYXAoKHBvc3R1cmVDaGVjaykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBwb3N0dXJlQ2hlY2submFtZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkUG9zdHVyZUNoZWNrTmFtZXMgPSBbLi4udGhpcy5hc3NvY2lhdGVkUG9zdHVyZUNoZWNrTmFtZXMsIC4uLm5hbWVkQXR0cmlidXRlc107XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRQb3N0dXJlQ2hlY2tOYW1lcyA9IHNvcnRlZFVuaXEodGhpcy5hc3NvY2lhdGVkUG9zdHVyZUNoZWNrTmFtZXMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRTZXJ2aWNlUG9saWN5RGF0YU1vZGVsKGZvcm1EYXRhLCBpc1VwZGF0ZSkge1xuICAgICAgICBjb25zdCBzYXZlTW9kZWwgPSBuZXcgU2VydmljZVBvbGljeSgpO1xuICAgICAgICBjb25zdCBtb2RlbFByb3BlcnRpZXMgPSBrZXlzKHNhdmVNb2RlbCk7XG4gICAgICAgIG1vZGVsUHJvcGVydGllcy5mb3JFYWNoKChwcm9wKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2gocHJvcCkge1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHNhdmVNb2RlbFtwcm9wXSA9IGZvcm1EYXRhW3Byb3BdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHNhdmVNb2RlbDtcbiAgICB9XG5cbiAgICBjb3B5VG9DbGlwYm9hcmQodmFsKSB7XG4gICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHZhbCk7XG4gICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICdzdWNjZXNzJyxcbiAgICAgICAgICAgICdTdWNjZXNzJyxcbiAgICAgICAgICAgIGBUZXh0IENvcGllZGAsXG4gICAgICAgICAgICBgQVBJIGNhbGwgVVJMIGNvcGllZCB0byBjbGlwYm9hcmRgLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmdyb3dsZXJTZXJ2aWNlLnNob3coZ3Jvd2xlckRhdGEpO1xuICAgIH1cblxuICAgIGdldFNlbGVjdGVkUm9sZXMocm9sZUF0dHJpYnV0ZXMsIG5hbWVkQXR0cmlidXRlcywgbmFtZWRBdHRyaWJ1dGVNYXApIHtcbiAgICAgICAgY29uc3QgcHJlcGVuZGVkUm9sZUF0dHJpYnV0ZXMgPSByb2xlQXR0cmlidXRlcy5tYXAoKGF0dHIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAnIycgKyBhdHRyO1xuICAgICAgICB9KVxuICAgICAgICBjb25zdCBwcmVwZW5kZWROYW1lZEF0dHJpYnV0ZXMgPSBuYW1lZEF0dHJpYnV0ZXMubWFwKChhdHRyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gJ0AnICsgbmFtZWRBdHRyaWJ1dGVNYXBbYXR0cl07XG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiBbLi4ucHJlcGVuZGVkUm9sZUF0dHJpYnV0ZXMsIC4uLnByZXBlbmRlZE5hbWVkQXR0cmlidXRlc107XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNlcnZpY2VSb2xlQXR0cmlidXRlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UuZ2V0KCdzZXJ2aWNlLXJvbGUtYXR0cmlidXRlcycsIHt9LCBbXSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VSb2xlQXR0cmlidXRlcyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy56aXRpU2VydmljZS5nZXQoJ2lkZW50aXRpZXMnLCB7cmF3RmlsdGVyOiB0cnVlLCBmaWx0ZXI6ICcnLCBzb3J0OiAnbmFtZScsIG9yZGVyOiAnYXNjJywgdG90YWw6IC0xLCBwYWdlOiAxfSwgW10pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmFtZWRBdHRyaWJ1dGVzID0gcmVzdWx0LmRhdGEubWFwKChpZGVudGl0eSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXNNYXBbaWRlbnRpdHkubmFtZV0gPSBpZGVudGl0eS5pZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWRlbnRpdHkubmFtZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5pZGVudGl0eU5hbWVkQXR0cmlidXRlcyA9IG5hbWVkQXR0cmlidXRlcztcbiAgICAgICAgICAgIHJldHVybiBuYW1lZEF0dHJpYnV0ZXM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTZXJ2aWNlTmFtZWRBdHRyaWJ1dGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy56aXRpU2VydmljZS5nZXQoJ3NlcnZpY2VzJywge3Jhd0ZpbHRlcjogdHJ1ZSwgZmlsdGVyOiAnJywgc29ydDogJ25hbWUnLCBvcmRlcjogJ2FzYycsIHRvdGFsOiAtMSwgcGFnZTogMX0sIFtdKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVkQXR0cmlidXRlcyA9IHJlc3VsdC5kYXRhLm1hcCgoc2VydmljZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZU5hbWVkQXR0cmlidXRlc01hcFtzZXJ2aWNlLm5hbWVdID0gc2VydmljZS5pZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5uYW1lO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VOYW1lZEF0dHJpYnV0ZXMgPSBuYW1lZEF0dHJpYnV0ZXM7XG4gICAgICAgICAgICByZXR1cm4gbmFtZWRBdHRyaWJ1dGVzO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SWRlbnRpdHlSb2xlQXR0cmlidXRlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UuZ2V0KCdpZGVudGl0eS1yb2xlLWF0dHJpYnV0ZXMnLCB7fSwgW10pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pZGVudGl0eVJvbGVBdHRyaWJ1dGVzID0gcmVzdWx0LmRhdGE7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UG9zdHVyZU5hbWVkQXR0cmlidXRlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UuZ2V0KCdwb3N0dXJlLWNoZWNrcycsIHt9LCBbXSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuYW1lZEF0dHJpYnV0ZXMgPSByZXN1bHQuZGF0YS5tYXAoKHBvc3R1cmVDaGVjaykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucG9zdHVyZU5hbWVkQXR0cmlidXRlc01hcFtwb3N0dXJlQ2hlY2submFtZV0gPSBwb3N0dXJlQ2hlY2suaWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvc3R1cmVDaGVjay5uYW1lO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnBvc3R1cmVOYW1lZEF0dHJpYnV0ZXMgPSBuYW1lZEF0dHJpYnV0ZXM7XG4gICAgICAgICAgICByZXR1cm4gbmFtZWRBdHRyaWJ1dGVzO1xuICAgICAgICB9KTtcbiAgICB9XG59Il19
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1wb2xpY3ktZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL2ZlYXR1cmVzL3Byb2plY3RhYmxlLWZvcm1zL3NlcnZpY2UtcG9saWN5L3NlcnZpY2UtcG9saWN5LWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFDLE9BQU8sRUFBUyxJQUFJLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFDNUMsT0FBTyxFQUFDLGlCQUFpQixFQUFrQixNQUFNLHFDQUFxQyxDQUFDO0FBRXZGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQWtCLE1BQU0sb0NBQW9DLENBQUM7QUFHckYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUVsQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7Ozs7O0FBRTdELE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLElBQUksY0FBYyxDQUFNLGtDQUFrQyxDQUFDLENBQUM7QUFFNUcsTUFHYSx3QkFBd0I7SUFxQmpDLFlBQ3FDLGVBQWdDLEVBQzlCLFdBQTRCLEVBQ3ZELGNBQThCLEVBQ1csVUFBNEI7UUFINUMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQzlCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUN2RCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDVyxlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQXZCakYseUJBQW9CLEdBQVEsRUFBRSxDQUFDO1FBQy9CLDRCQUF1QixHQUFRLEVBQUUsQ0FBQztRQUNsQyw0QkFBdUIsR0FBUSxFQUFFLENBQUM7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Q0FBQztZQUM5QyxPQUFPLGVBQWUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBck9RLHdCQUF3QixrQkFzQnJCLGdCQUFnQixhQUNoQixpQkFBaUIsMkNBRWpCLGdDQUFnQzttSEF6Qm5DLHdCQUF3QixjQUZyQixNQUFNOztTQUVULHdCQUF3Qjs0RkFBeEIsd0JBQXdCO2tCQUhwQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBdUJRLE1BQU07MkJBQUMsZ0JBQWdCOzswQkFDdkIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUV4QixNQUFNOzJCQUFDLGdDQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgSW5qZWN0LCBJbmplY3Rpb25Ub2tlbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7aXNFbXB0eSwgdW5zZXQsIGtleXN9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1pJVElfREFUQV9TRVJWSUNFLCBaaXRpRGF0YVNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy96aXRpLWRhdGEuc2VydmljZVwiO1xuaW1wb3J0IHtHcm93bGVyU2VydmljZX0gZnJvbSBcIi4uLy4uL21lc3NhZ2luZy9ncm93bGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7R3Jvd2xlck1vZGVsfSBmcm9tIFwiLi4vLi4vbWVzc2FnaW5nL2dyb3dsZXIubW9kZWxcIjtcbmltcG9ydCB7U0VUVElOR1NfU0VSVklDRSwgU2V0dGluZ3NTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvc2V0dGluZ3Muc2VydmljZVwiO1xuaW1wb3J0IHtFeHRlbnNpb25TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vZXh0ZW5kYWJsZS9leHRlbnNpb25zLW5vb3Auc2VydmljZVwiO1xuXG5pbXBvcnQge3NvcnRlZFVuaXF9IGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7U2VydmljZVBvbGljeX0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9zZXJ2aWNlLXBvbGljeVwiO1xuXG5leHBvcnQgY29uc3QgU0VSVklDRV9QT0xJQ1lfRVhURU5TSU9OX1NFUlZJQ0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48YW55PignU0VSVklDRV9QT0xJQ1lfRVhURU5TSU9OX1NFUlZJQ0UnKTtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTZXJ2aWNlUG9saWN5Rm9ybVNlcnZpY2Uge1xuXG4gICAgYXNzb2NpYXRlZElkZW50aXRpZXM6IGFueSA9IFtdO1xuICAgIGFzc29jaWF0ZWRJZGVudGl0eU5hbWVzOiBhbnkgPSBbXTtcbiAgICBhc3NvY2lhdGVkUG9zdHVyZUNoZWNrczogYW55ID0gW107XG4gICAgYXNzb2NpYXRlZFBvc3R1cmVDaGVja05hbWVzOiBhbnkgPSBbXTtcbiAgICBhc3NvY2lhdGVkU2VydmljZXM6IGFueSA9IFtdO1xuICAgIGFzc29jaWF0ZWRTZXJ2aWNlTmFtZXM6IGFueSA9IFtdO1xuXG4gICAgc2VydmljZU5hbWVkQXR0cmlidXRlc01hcDogYW55ID0ge307XG4gICAgaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXNNYXA6IGFueSA9IHt9O1xuICAgIHBvc3R1cmVOYW1lZEF0dHJpYnV0ZXNNYXA6IGFueSA9IHt9O1xuXG4gICAgaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXM6IGFueSA9IFtdO1xuICAgIHNlcnZpY2VOYW1lZEF0dHJpYnV0ZXM6IGFueSA9IFtdO1xuICAgIHBvc3R1cmVOYW1lZEF0dHJpYnV0ZXM6IGFueSA9IFtdO1xuXG4gICAgc2VydmljZVJvbGVBdHRyaWJ1dGVzOiBhbnkgPSBbXTtcbiAgICBpZGVudGl0eVJvbGVBdHRyaWJ1dGVzOiBhbnkgPSBbXTtcbiAgICBwb3N0dXJlUm9sZUF0dHJpYnV0ZXM6IGFueSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoU0VUVElOR1NfU0VSVklDRSkgcHVibGljIHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFpJVElfREFUQV9TRVJWSUNFKSBwcml2YXRlIHppdGlTZXJ2aWNlOiBaaXRpRGF0YVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZ3Jvd2xlclNlcnZpY2U6IEdyb3dsZXJTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFNFUlZJQ0VfUE9MSUNZX0VYVEVOU0lPTl9TRVJWSUNFKXByaXZhdGUgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZVxuICAgICkge31cblxuICAgIHNhdmUoZm9ybURhdGEpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBpc1VwZGF0ZSA9ICFpc0VtcHR5KGZvcm1EYXRhLmlkKTtcbiAgICAgICAgY29uc3QgZGF0YTogYW55ID0gdGhpcy5nZXRTZXJ2aWNlUG9saWN5RGF0YU1vZGVsKGZvcm1EYXRhLCBpc1VwZGF0ZSk7XG4gICAgICAgIGNvbnN0IHN2YyA9IGlzVXBkYXRlID8gdGhpcy56aXRpU2VydmljZS5wYXRjaC5iaW5kKHRoaXMueml0aVNlcnZpY2UpIDogdGhpcy56aXRpU2VydmljZS5wb3N0LmJpbmQodGhpcy56aXRpU2VydmljZSk7XG4gICAgICAgIHJldHVybiBzdmMoJ3NlcnZpY2UtcG9saWNpZXMnLCBkYXRhLCBmb3JtRGF0YS5pZCkudGhlbihhc3luYyAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gcmVzdWx0Py5kYXRhPy5pZCB8fCBmb3JtRGF0YS5pZDtcbiAgICAgICAgICAgIGxldCByb3V0ZXIgPSBhd2FpdCB0aGlzLnppdGlTZXJ2aWNlLmdldFN1YmRhdGEoJ3NlcnZpY2UtcG9saWNpZXMnLCBpZCwgJycpLnRoZW4oKHJvdXRlckRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm91dGVyRGF0YS5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5leHRTZXJ2aWNlLmZvcm1EYXRhU2F2ZWQocm91dGVyKS50aGVuKChmb3JtU2F2ZWRSZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogcm91dGVyLFxuICAgICAgICAgICAgICAgICAgICBjbG9zZTogdGhpcy5leHRTZXJ2aWNlLmNsb3NlQWZ0ZXJTYXZlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBncm93bGVyRGF0YSA9IG5ldyBHcm93bGVyTW9kZWwoXG4gICAgICAgICAgICAgICAgICAgICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgJ1N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICBgU2VydmljZSBQb2xpY3kgJHtpc1VwZGF0ZSA/ICdVcGRhdGVkJyA6ICdDcmVhdGVkJ31gLFxuICAgICAgICAgICAgICAgICAgICBgU3VjY2Vzc2Z1bGx5ICR7aXNVcGRhdGUgPyAndXBkYXRlZCcgOiAnY3JlYXRlZCd9IFNlcnZpY2UgUG9saWN5OiAke2Zvcm1EYXRhLm5hbWV9YCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbDtcbiAgICAgICAgICAgIH0pLmNhdGNoKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkuY2F0Y2goKHJlc3ApID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHRoaXMueml0aVNlcnZpY2UuZ2V0RXJyb3JNZXNzYWdlKHJlc3ApO1xuICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgICAgICAgJ0Vycm9yJyxcbiAgICAgICAgICAgICAgICBgRXJyb3IgJHtpc1VwZGF0ZSA/ICdVcGRhdGluZycgOiAnQ3JlYXRpbmcnfSBTZXJ2aWNlIFBvbGljeWAsXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICB0aHJvdyByZXNwO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldEFzc29jaWF0ZWRTZXJ2aWNlc0J5Um9sZShpZCkge1xuICAgICAgICB0aGlzLnppdGlTZXJ2aWNlLmdldFN1YmRhdGEoJ3NlcnZpY2UtcG9saWNpZXMnLCBpZCwgJ3NlcnZpY2VzJykudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VzID0gcmVzdWx0LmRhdGE7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlTmFtZXMgPSB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlcy5tYXAoKHN2YykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdmMubmFtZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRBc3NvY2lhdGVkSWRlbnRpdGllc0J5SWQoaWQpIHtcbiAgICAgICAgdGhpcy56aXRpU2VydmljZS5nZXRTdWJkYXRhKCdzZXJ2aWNlLXBvbGljaWVzJywgaWQsICdpZGVudGl0aWVzJykudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZElkZW50aXRpZXMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZElkZW50aXR5TmFtZXMgPSB0aGlzLmFzc29jaWF0ZWRJZGVudGl0aWVzLm1hcCgoaWRlbnQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWRlbnQubmFtZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRBc3NvY2lhdGVkUG9zdHVyZUNoZWNrc0J5SWQoaWQpIHtcbiAgICAgICAgdGhpcy56aXRpU2VydmljZS5nZXRTdWJkYXRhKCdzZXJ2aWNlLXBvbGljaWVzJywgaWQsICdwb3N0dXJlLWNoZWNrcycpLnRoZW4oKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRQb3N0dXJlQ2hlY2tzID0gcmVzdWx0LmRhdGE7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRQb3N0dXJlQ2hlY2tOYW1lcyA9IHRoaXMuYXNzb2NpYXRlZFBvc3R1cmVDaGVja3MubWFwKChwb3N0dXJlQ2hlY2spID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcG9zdHVyZUNoZWNrLm5hbWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0QXNzb2NpYXRlZFNlcnZpY2VzQnlBdHRyaWJ1dGUocm9sZUF0dHJpYnV0ZXMsIG5hbWVkQXR0cmlidXRlcykge1xuICAgICAgICB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlTmFtZXMgPSBbXTtcbiAgICAgICAgaWYgKGlzRW1wdHkocm9sZUF0dHJpYnV0ZXMpKSB7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlTmFtZXMgPSBbLi4ubmFtZWRBdHRyaWJ1dGVzXTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLnppdGlTZXJ2aWNlLmdldFJvbGVGaWx0ZXIocm9sZUF0dHJpYnV0ZXMpO1xuICAgICAgICBjb25zdCBwYWdpbmcgPSB0aGlzLnppdGlTZXJ2aWNlLkRFRkFVTFRfUEFHSU5HO1xuICAgICAgICBwYWdpbmcubm9TZWFyY2ggPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UuZ2V0KCdzZXJ2aWNlcycsIHBhZ2luZywgZmlsdGVycykudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VzID0gcmVzdWx0LmRhdGE7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlTmFtZXMgPSB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlcy5tYXAoKHN2YykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdmMubmFtZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkU2VydmljZU5hbWVzID0gWy4uLnRoaXMuYXNzb2NpYXRlZFNlcnZpY2VOYW1lcywgLi4ubmFtZWRBdHRyaWJ1dGVzXTtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFNlcnZpY2VOYW1lcyA9IHNvcnRlZFVuaXEodGhpcy5hc3NvY2lhdGVkU2VydmljZU5hbWVzKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFzc29jaWF0ZWRTZXJ2aWNlcztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0QXNzb2NpYXRlZElkZW50aXRpZXNCeUF0dHJpYnV0ZShyb2xlQXR0cmlidXRlcywgbmFtZWRBdHRyaWJ1dGVzKSB7XG4gICAgICAgIHRoaXMuYXNzb2NpYXRlZElkZW50aXR5TmFtZXMgPSBbXTtcbiAgICAgICAgaWYgKGlzRW1wdHkocm9sZUF0dHJpYnV0ZXMpKSB7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRJZGVudGl0eU5hbWVzID0gWy4uLm5hbWVkQXR0cmlidXRlc107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsdGVycyA9IHRoaXMueml0aVNlcnZpY2UuZ2V0Um9sZUZpbHRlcihyb2xlQXR0cmlidXRlcyk7XG4gICAgICAgIGNvbnN0IHBhZ2luZyA9IHRoaXMueml0aVNlcnZpY2UuREVGQVVMVF9QQUdJTkc7XG4gICAgICAgIHBhZ2luZy5ub1NlYXJjaCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnppdGlTZXJ2aWNlLmdldCgnaWRlbnRpdGllcycsIHBhZ2luZywgZmlsdGVycykudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZElkZW50aXRpZXMgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZElkZW50aXR5TmFtZXMgPSB0aGlzLmFzc29jaWF0ZWRJZGVudGl0aWVzLm1hcCgoc3ZjKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN2Yy5uYW1lO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRJZGVudGl0eU5hbWVzID0gWy4uLnRoaXMuYXNzb2NpYXRlZElkZW50aXR5TmFtZXMsIC4uLm5hbWVkQXR0cmlidXRlc107XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRJZGVudGl0eU5hbWVzID0gc29ydGVkVW5pcSh0aGlzLmFzc29jaWF0ZWRJZGVudGl0eU5hbWVzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0QXNzb2NpYXRlZFBvc3R1cmVDaGVja3NCeUF0dHJpYnV0ZShyb2xlQXR0cmlidXRlcywgbmFtZWRBdHRyaWJ1dGVzKSB7XG4gICAgICAgIHRoaXMuYXNzb2NpYXRlZFBvc3R1cmVDaGVja05hbWVzID0gW107XG4gICAgICAgIGlmIChpc0VtcHR5KHJvbGVBdHRyaWJ1dGVzKSkge1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkUG9zdHVyZUNoZWNrTmFtZXMgPSBbLi4ubmFtZWRBdHRyaWJ1dGVzXTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy56aXRpU2VydmljZS5nZXRSb2xlRmlsdGVyKHJvbGVBdHRyaWJ1dGVzKTtcbiAgICAgICAgY29uc3QgcGFnaW5nID0gdGhpcy56aXRpU2VydmljZS5ERUZBVUxUX1BBR0lORztcbiAgICAgICAgcGFnaW5nLm5vU2VhcmNoID0gZmFsc2U7XG4gICAgICAgIHRoaXMueml0aVNlcnZpY2UuZ2V0KCdwb3N0dXJlLWNoZWNrcycsIHBhZ2luZywgZmlsdGVycykudGhlbigocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFBvc3R1cmVDaGVja3MgPSByZXN1bHQuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuYXNzb2NpYXRlZFBvc3R1cmVDaGVja05hbWVzID0gdGhpcy5hc3NvY2lhdGVkUG9zdHVyZUNoZWNrcy5tYXAoKHBvc3R1cmVDaGVjaykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBwb3N0dXJlQ2hlY2submFtZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hc3NvY2lhdGVkUG9zdHVyZUNoZWNrTmFtZXMgPSBbLi4udGhpcy5hc3NvY2lhdGVkUG9zdHVyZUNoZWNrTmFtZXMsIC4uLm5hbWVkQXR0cmlidXRlc107XG4gICAgICAgICAgICB0aGlzLmFzc29jaWF0ZWRQb3N0dXJlQ2hlY2tOYW1lcyA9IHNvcnRlZFVuaXEodGhpcy5hc3NvY2lhdGVkUG9zdHVyZUNoZWNrTmFtZXMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRTZXJ2aWNlUG9saWN5RGF0YU1vZGVsKGZvcm1EYXRhLCBpc1VwZGF0ZSkge1xuICAgICAgICBjb25zdCBzYXZlTW9kZWwgPSBuZXcgU2VydmljZVBvbGljeSgpO1xuICAgICAgICBjb25zdCBtb2RlbFByb3BlcnRpZXMgPSBrZXlzKHNhdmVNb2RlbCk7XG4gICAgICAgIG1vZGVsUHJvcGVydGllcy5mb3JFYWNoKChwcm9wKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2gocHJvcCkge1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHNhdmVNb2RlbFtwcm9wXSA9IGZvcm1EYXRhW3Byb3BdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHNhdmVNb2RlbDtcbiAgICB9XG5cbiAgICBjb3B5VG9DbGlwYm9hcmQodmFsKSB7XG4gICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHZhbCk7XG4gICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICdzdWNjZXNzJyxcbiAgICAgICAgICAgICdTdWNjZXNzJyxcbiAgICAgICAgICAgIGBUZXh0IENvcGllZGAsXG4gICAgICAgICAgICBgQVBJIGNhbGwgVVJMIGNvcGllZCB0byBjbGlwYm9hcmRgLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmdyb3dsZXJTZXJ2aWNlLnNob3coZ3Jvd2xlckRhdGEpO1xuICAgIH1cblxuICAgIGdldFNlbGVjdGVkUm9sZXMocm9sZUF0dHJpYnV0ZXMsIG5hbWVkQXR0cmlidXRlcywgbmFtZWRBdHRyaWJ1dGVNYXApIHtcbiAgICAgICAgY29uc3QgcHJlcGVuZGVkUm9sZUF0dHJpYnV0ZXMgPSByb2xlQXR0cmlidXRlcy5tYXAoKGF0dHIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAnIycgKyBhdHRyO1xuICAgICAgICB9KVxuICAgICAgICBjb25zdCBwcmVwZW5kZWROYW1lZEF0dHJpYnV0ZXMgPSBuYW1lZEF0dHJpYnV0ZXMubWFwKChhdHRyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gJ0AnICsgbmFtZWRBdHRyaWJ1dGVNYXBbYXR0cl07XG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiBbLi4ucHJlcGVuZGVkUm9sZUF0dHJpYnV0ZXMsIC4uLnByZXBlbmRlZE5hbWVkQXR0cmlidXRlc107XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNlcnZpY2VSb2xlQXR0cmlidXRlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UuZ2V0KCdzZXJ2aWNlLXJvbGUtYXR0cmlidXRlcycsIHt9LCBbXSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VSb2xlQXR0cmlidXRlcyA9IHJlc3VsdC5kYXRhO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldElkZW50aXR5TmFtZWRBdHRyaWJ1dGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy56aXRpU2VydmljZS5nZXQoJ2lkZW50aXRpZXMnLCB7cmF3RmlsdGVyOiB0cnVlLCBmaWx0ZXI6ICcnLCBzb3J0OiAnbmFtZScsIG9yZGVyOiAnYXNjJywgdG90YWw6IC0xLCBwYWdlOiAxfSwgW10pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmFtZWRBdHRyaWJ1dGVzID0gcmVzdWx0LmRhdGEubWFwKChpZGVudGl0eSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaWRlbnRpdHlOYW1lZEF0dHJpYnV0ZXNNYXBbaWRlbnRpdHkubmFtZV0gPSBpZGVudGl0eS5pZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWRlbnRpdHkubmFtZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5pZGVudGl0eU5hbWVkQXR0cmlidXRlcyA9IG5hbWVkQXR0cmlidXRlcztcbiAgICAgICAgICAgIHJldHVybiBuYW1lZEF0dHJpYnV0ZXM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTZXJ2aWNlTmFtZWRBdHRyaWJ1dGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy56aXRpU2VydmljZS5nZXQoJ3NlcnZpY2VzJywge3Jhd0ZpbHRlcjogdHJ1ZSwgZmlsdGVyOiAnJywgc29ydDogJ25hbWUnLCBvcmRlcjogJ2FzYycsIHRvdGFsOiAtMSwgcGFnZTogMX0sIFtdKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVkQXR0cmlidXRlcyA9IHJlc3VsdC5kYXRhLm1hcCgoc2VydmljZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZU5hbWVkQXR0cmlidXRlc01hcFtzZXJ2aWNlLm5hbWVdID0gc2VydmljZS5pZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZS5uYW1lO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2VOYW1lZEF0dHJpYnV0ZXMgPSBuYW1lZEF0dHJpYnV0ZXM7XG4gICAgICAgICAgICByZXR1cm4gbmFtZWRBdHRyaWJ1dGVzO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SWRlbnRpdHlSb2xlQXR0cmlidXRlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UuZ2V0KCdpZGVudGl0eS1yb2xlLWF0dHJpYnV0ZXMnLCB7fSwgW10pLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pZGVudGl0eVJvbGVBdHRyaWJ1dGVzID0gcmVzdWx0LmRhdGE7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UG9zdHVyZU5hbWVkQXR0cmlidXRlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueml0aVNlcnZpY2UuZ2V0KCdwb3N0dXJlLWNoZWNrcycsIHt9LCBbXSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuYW1lZEF0dHJpYnV0ZXMgPSByZXN1bHQuZGF0YS5tYXAoKHBvc3R1cmVDaGVjaykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucG9zdHVyZU5hbWVkQXR0cmlidXRlc01hcFtwb3N0dXJlQ2hlY2submFtZV0gPSBwb3N0dXJlQ2hlY2suaWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBvc3R1cmVDaGVjay5uYW1lO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnBvc3R1cmVOYW1lZEF0dHJpYnV0ZXMgPSBuYW1lZEF0dHJpYnV0ZXM7XG4gICAgICAgICAgICByZXR1cm4gbmFtZWRBdHRyaWJ1dGVzO1xuICAgICAgICB9KTtcbiAgICB9XG59Il19