@mtna/web-form-angular 1.0.6-SNAPSHOT.2 → 1.0.6-SNAPSHOT.20

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 (41) hide show
  1. package/bundles/mtna-web-form-angular.umd.js +375 -355
  2. package/bundles/mtna-web-form-angular.umd.js.map +1 -1
  3. package/esm2015/lib/components/form/form.component.js +1 -1
  4. package/esm2015/lib/components/form-item-impl/form-group/form-group.component.js +2 -2
  5. package/esm2015/lib/components/form-item-impl/form-section/form-section.component.js +2 -2
  6. package/esm2015/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.component.js +6 -7
  7. package/esm2015/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.module.js +1 -5
  8. package/esm2015/lib/components/form-item-impl/search/resource-search.component.js +5 -2
  9. package/esm2015/lib/components/form-item-injector/form-item-injector.component.js +25 -3
  10. package/esm2015/lib/components/step-card/step-card.component.js +26 -5
  11. package/esm2015/lib/components/template-item-impl/template-item-component-provider/template-item-injected-components.js +12 -10
  12. package/esm2015/lib/models/design/design-mapper/bulleted-list-item-template-mapper.js +3 -4
  13. package/esm2015/lib/models/design/design-mapper/numbered-list-item-template-mapper.js +3 -4
  14. package/esm2015/lib/models/design/design-mapper/option-selector-mapper.js +1 -1
  15. package/esm2015/lib/models/form-stepper/index.js +2 -1
  16. package/esm2015/lib/models/form-stepper/step-constants.model.js +2 -0
  17. package/esm2015/lib/models/i18n-constants.model.js +7 -1
  18. package/esm2015/lib/models/index.js +1 -2
  19. package/esm2015/lib/pipes/index.js +1 -2
  20. package/esm2015/lib/services/api.service.js +13 -10
  21. package/esm2015/lib/services/dialog.service.js +6 -1
  22. package/esm2015/lib/services/form-manager.service.js +5 -3
  23. package/esm2015/lib/services/template-transformation.service.js +11 -8
  24. package/esm2015/lib/utilities/template-design-util.js +6 -6
  25. package/fesm2015/mtna-web-form-angular.js +119 -100
  26. package/fesm2015/mtna-web-form-angular.js.map +1 -1
  27. package/lib/components/form-item-impl/repeatable-item-container/repeatable-item-container.module.d.ts +2 -3
  28. package/lib/components/form-item-injector/form-item-injector.component.d.ts +4 -0
  29. package/lib/components/step-card/step-card.component.d.ts +4 -0
  30. package/lib/models/form-stepper/index.d.ts +1 -0
  31. package/lib/models/form-stepper/step-constants.model.d.ts +1 -0
  32. package/lib/models/i18n-constants.model.d.ts +6 -0
  33. package/lib/models/index.d.ts +0 -1
  34. package/lib/pipes/index.d.ts +0 -1
  35. package/lib/services/api.service.d.ts +6 -5
  36. package/lib/services/template-transformation.service.d.ts +5 -4
  37. package/package.json +1 -1
  38. package/esm2015/lib/models/api-config.js +0 -3
  39. package/esm2015/lib/pipes/coerce-form-item.pipe.js +0 -36
  40. package/lib/models/api-config.d.ts +0 -5
  41. package/lib/pipes/coerce-form-item.pipe.d.ts +0 -14
@@ -60,7 +60,7 @@ export class MtnaWfManagerService {
60
60
  }
61
61
  else {
62
62
  this.apiService
63
- .getRepeatableItem(this._mtnaForm.instanceId, change.id)
63
+ .getRepeatableItem(this._mtnaForm.templateId, change.templateId)
64
64
  .pipe(take(1))
65
65
  .subscribe((newItem) => {
66
66
  const newFormControl = this.serializeMtnaFormItem(newItem);
@@ -304,6 +304,7 @@ export class MtnaWfManagerService {
304
304
  * @param change The change that recently occurred in the mtnaForm
305
305
  */
306
306
  _modifyFormItemConditions(form, change) {
307
+ var _a, _b;
307
308
  let newForm = form;
308
309
  if (change.conditionChanges) {
309
310
  const formItems = {};
@@ -320,7 +321,8 @@ export class MtnaWfManagerService {
320
321
  ? [...itemConditionItemIds, cc.enablerId]
321
322
  : itemConditionItemIds.filter((i) => i !== cc.enablerId);
322
323
  const newItem = Object.assign(Object.assign({}, formItem), { condition: Object.assign(Object.assign({}, formItem.condition), { itemIds }) });
323
- const newChange = new MtnaWfFormItemChange(newItem.instanceId, (formItemComponent === null || formItemComponent === void 0 ? void 0 : formItemComponent.parentIds) || [], 'REPLACE');
324
+ const templateId = (_b = (_a = formItem) === null || _a === void 0 ? void 0 : _a.templateId) !== null && _b !== void 0 ? _b : newItem.instanceId;
325
+ const newChange = new MtnaWfFormItemChange(newItem.instanceId, templateId, (formItemComponent === null || formItemComponent === void 0 ? void 0 : formItemComponent.parentIds) || [], 'REPLACE');
324
326
  newForm = this._modifyFormItem(newForm, newChange, newItem);
325
327
  formItems[toggledId] = newItem;
326
328
  }
@@ -473,4 +475,4 @@ MtnaWfManagerService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0",
473
475
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaWfManagerService, decorators: [{
474
476
  type: Injectable
475
477
  }], ctorParameters: function () { return [{ type: i1.MtnaWfApiService }, { type: i2.MtnaWfNgFormService }, { type: i3.MtnaWfUIService }]; } });
476
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvZm9ybS1tYW5hZ2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFRTCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsV0FBVyxFQUNYLG9CQUFvQixHQVdyQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3RDLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7O0FBaUJqRTs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFvQi9CLFlBQXNCLFVBQTRCLEVBQVksYUFBa0MsRUFBWSxTQUEwQjtRQUFoSCxlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUFZLGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtRQUFZLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBbkI1SCxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUM7UUFDbkQsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBMEIsQ0FBQztRQUNwRCwyQkFBc0IsR0FBRyxJQUFJLE9BQU8sRUFBbUIsQ0FBQztRQUNsRSxnRUFBZ0U7UUFDdEQsK0JBQTBCLEdBQTZDLEVBQUUsQ0FBQztRQStLcEY7Ozs7Ozs7V0FPRztRQUNPLDJCQUFzQixHQUFnQyxH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QUksQ0FBQywwQkFBMEIsR0FBRyxFQUFFLENBQUM7UUFDckMsSUFBSSxNQUFBLElBQUksQ0FBQyxTQUFTLDBDQUFFLGdCQUFnQixFQUFFO1lBQ3BDLEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyx5QkFBeUIsRUFBRTtnQkFDOUUsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLEtBQUssUUFBUSxFQUFFO29CQUN4QywrRUFBK0U7b0JBQy9FLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDO29CQUNwRCx3REFBd0Q7b0JBQ3hELHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ3ZDO2FBQ0Y7U0FDRjtRQUVELDRDQUE0QztRQUM1QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFDLElBQUksSUFBSSxFQUFFO1lBQ1IsS0FBSyxNQUFNLEVBQUUsSUFBSSxzQkFBc0IsRUFBRTtnQkFDdkMsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxPQUFPLEVBQUU7b0JBQ1gsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7aUJBQ2xDO2FBQ0Y7U0FDRjtJQUNILENBQUM7O2tIQTVqQlUsb0JBQW9CO3NIQUFwQixvQkFBb0I7NEZBQXBCLG9CQUFvQjtrQkFEaEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGlzVHlwZSB9IGZyb20gJ0BtdG5hL2NvcmUtdHMnO1xuaW1wb3J0IHtcbiAgQ29uZGl0aW9uYWxJdGVtLFxuICBDb25kaXRpb25DaGFuZ2UsXG4gIEZvcm0sXG4gIEZvcm1JdGVtLFxuICBGb3JtSXRlbUdyb3VwLFxuICBGb3JtSXRlbUltcGwsXG4gIEZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdCxcbiAgaXNDb25kaXRpb25hbEl0ZW0sXG4gIGlzRm9ybSxcbiAgaXNGb3JtSXRlbUdyb3VwSW1wbCxcbiAgaXNPcHRpb25Hcm91cEl0ZW1JbXBsLFxuICBpc09wdGlvbkl0ZW1JbXBsLFxuICBpc1JlcGVhdGFibGVJdGVtLFxuICBpc1NlY3Rpb24sXG4gIGlzVGFibGVJdGVtLFxuICBNdG5hV2ZGb3JtSXRlbUNoYW5nZSxcbiAgTXRuYVdmRm9ybUl0ZW1DaGFuZ2VBY3Rpb24sXG4gIE9wdGlvbixcbiAgT3B0aW9uR3JvdXBJdGVtSW1wbCxcbiAgT3B0aW9uSXRlbUltcGwsXG4gIFByb2dyZXNzaXZlRm9ybSxcbiAgUmVwZWF0YWJsZUl0ZW0sXG4gIFNlY3Rpb24sXG4gIFRhYmxlSXRlbSxcbiAgVGFibGVSb3dJdGVtLFxuICBWYWx1ZUl0ZW0sXG59IGZyb20gJ0BtdG5hL3dlYi1mb3JtLXRzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEJhc2VGb3JtSXRlbSB9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBmaW5kRm9ybUNvbnRyb2wsIE10bmFXZlNlcmlhbGl6ZXIgfSBmcm9tICcuLi91dGlsaXRpZXMnO1xuaW1wb3J0IHsgTXRuYVdmQXBpU2VydmljZSB9IGZyb20gJy4vYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgTXRuYVdmTmdGb3JtU2VydmljZSB9IGZyb20gJy4vbmctZm9ybS5zZXJ2aWNlJztcbmltcG9ydCB7IE10bmFXZlVJU2VydmljZSB9IGZyb20gJy4vdWkuc2VydmljZSc7XG5cbi8qKlxuICogdHlwZXMgb2YgRm9ybUl0ZW1zIHRoYXQgY2FuIGJlIHBhc3NlZCBpbnRvIHRoZSAnbW9kaWZ5TXRuYUZvcm1JdGVtJyBtZXRob2QgdG8gYWRkL3JlbW92ZSBpdGVtc1xuICovXG50eXBlIFBhcmVudEl0ZW1VbmlvbiA9XG4gIHwgRm9ybVxuICB8IFNlY3Rpb25cbiAgfCBGb3JtSXRlbUdyb3VwXG4gIHwgUmVwZWF0YWJsZUl0ZW1cbiAgfCBUYWJsZUl0ZW1cbiAgfCBPcHRpb25JdGVtSW1wbDxPcHRpb248dW5rbm93bj4sIHVua25vd24+XG4gIHwgT3B0aW9uR3JvdXBJdGVtSW1wbDxPcHRpb248dW5rbm93bj4+O1xuXG4vKipcbiAqIEFsbG93cyBhIGNhbGxlciB0byAoZGUpc2VyaWFsaXphZSBhbiBNdG5hRm9ybS4gSXQgY29udGFpbnMgdGhlIGRldGVybWluaW5nIGxvZ2ljIGZvciByZXR1cm5pbmcgc3BlY2lmaWMgZm9ybSBjb250cm9sc1xuICogYW5kIGRlc2VyaWFsaXppbmcgbmV3IE10bmFGb3JtcyBmcm9tIHRoZSByZWFjdGl2ZSB2YWx1ZXMsIGFzIHdlbGwgYXMgcmVnaXN0ZXJpbmcgY3VzdG9tIEZvcm0gSXRlbXMgJiBmdW5jdGlvbnMuXG4gKlxuICogQGV4cG9ydFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTXRuYVdmTWFuYWdlclNlcnZpY2Uge1xuICBwcm90ZWN0ZWQgY29tcG9uZW50cyA9IG5ldyBNYXA8c3RyaW5nLCBUeXBlPEJhc2VGb3JtSXRlbT4+KCk7XG4gIHByb3RlY3RlZCBmb3JtQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PEZvcm0gfCBQcm9ncmVzc2l2ZUZvcm0+KCk7XG4gIHByb3RlY3RlZCBwcm9ncmVzc2l2ZUZvcm1DaGFuZ2UkID0gbmV3IFN1YmplY3Q8UHJvZ3Jlc3NpdmVGb3JtPigpO1xuICAvKiogQSBtYXAgb2YgYWxsIHtAbGluayBGb3JtSXRlbVZhbGlkYXRpb25SZXN1bHR9IGtleWVkIG9uIGlkICovXG4gIHByb3RlY3RlZCBfZm9ybUl0ZW1WYWxpZGF0aW9uUmVzdWx0czogUmVjb3JkPHN0cmluZywgRm9ybUl0ZW1WYWxpZGF0aW9uUmVzdWx0PiA9IHt9O1xuICAvKiogQ29uZGl0aW9uQ2hhbmdlcyBvbiAnYWRkJyBtdXN0IHdhaXQgdW50aWwgdGhlIGZvcm0gcmVyZW5kZXJzIHRvIHRvZ2dsZSBpdGVtcyAqL1xuICBwcm90ZWN0ZWQgaXRlbVRvZ2dsZVF1ZTogQXJyYXk8Q29uZGl0aW9uQ2hhbmdlPiB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBfbXRuYUZvcm06IEZvcm0gfCB1bmRlZmluZWQ7XG4gIHByb3RlY3RlZCBfbXRuYVByb2dyZXNzaXZlRm9ybTogUHJvZ3Jlc3NpdmVGb3JtIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBPYnNlcnZhYmxlIHN0cmVhbSBvZiBNdG5hRm9ybSBjaGFuZ2VzLiBVc2VkIHRvIGluZm9ybSBhIHN1YnNjcmliZXIgdGhhdCBhbiBNdG5hRm9ybSBoYXMgYmVlbiBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPE10bmFGb3JtPiB0byB3aGljaCBhIGNhbGxlciBjYW4gc3Vic2NyaWJlXG4gICAqL1xuICBnZXQgZm9ybUNoYW5nZXMoKTogT2JzZXJ2YWJsZTxGb3JtPiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUNoYW5nZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYXBpU2VydmljZTogTXRuYVdmQXBpU2VydmljZSwgcHJvdGVjdGVkIG5nRm9ybVNlcnZpY2U6IE10bmFXZk5nRm9ybVNlcnZpY2UsIHByb3RlY3RlZCB1aVNlcnZpY2U6IE10bmFXZlVJU2VydmljZSkge31cblxuICAvKipcbiAgICogQWRkcyBvciByZW1vdmVzIGEgRm9ybUl0ZW0gZnJvbSB0aGUgZm9ybSAmIG1vZGlmaWVzIG90aGVyIGFmZmVjdGVkIEZvcm1JdGVtc1xuICAgKiBAcGFyYW0gY2hhbmdlIE10bmFXZkZvcm1JdGVtQ2hhbmdlXG4gICAqL1xuICBjaGFuZ2VNdG5hRm9ybUl0ZW0oY2hhbmdlOiBNdG5hV2ZGb3JtSXRlbUNoYW5nZSkge1xuICAgIGlmICghdGhpcy5fbXRuYUZvcm0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlLmFjdGlvblR5cGUgPT09ICdSRU1PVkUnKSB7XG4gICAgICAvLyByZW1vdmUgdGhlIHJlcGVhdGFibGUgaXRlbSBmcm9tIHRoZSBtdG5hZm9ybVxuICAgICAgbGV0IG5ld0Zvcm0gPSB0aGlzLl9tb2RpZnlGb3JtSXRlbSh0aGlzLl9tdG5hRm9ybSwgY2hhbmdlKSBhcyBGb3JtO1xuICAgICAgLy8gbW9kaWZ5IHRoZSBjb25kaXRpb25zIG9mIGFsbCBlZmZlY3RlZCBmb3JtIGl0ZW1zXG4gICAgICBuZXdGb3JtID0gdGhpcy5fbW9kaWZ5Rm9ybUl0ZW1Db25kaXRpb25zKG5ld0Zvcm0sIGNoYW5nZSk7XG5cbiAgICAgIHRoaXMubmdGb3JtU2VydmljZS5yZW1vdmVDb250cm9sKGNoYW5nZS5pZCwgY2hhbmdlLnBhcmVudElkcyk7XG4gICAgICB0aGlzLmZvcm1DaGFuZ2UkLm5leHQobmV3Rm9ybSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXBpU2VydmljZVxuICAgICAgICAuZ2V0UmVwZWF0YWJsZUl0ZW0odGhpcy5fbXRuYUZvcm0uaW5zdGFuY2VJZCwgY2hhbmdlLmlkKVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKChuZXdJdGVtOiBGb3JtSXRlbUltcGw8dW5rbm93bj4pID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdGb3JtQ29udHJvbCA9IHRoaXMuc2VyaWFsaXplTXRuYUZvcm1JdGVtKG5ld0l0ZW0pO1xuICAgICAgICAgIGlmIChuZXdGb3JtQ29udHJvbCAmJiB0aGlzLl9tdG5hRm9ybSkge1xuICAgICAgICAgICAgdGhpcy5uZ0Zvcm1TZXJ2aWNlLmFkZENvbnRyb2wobmV3SXRlbS5pbnN0YW5jZUlkLCBjaGFuZ2UucGFyZW50SWRzLCBuZXdGb3JtQ29udHJvbCk7XG4gICAgICAgICAgICAvLyBBZGQgdGhlIG5ldyByZXBlYXRhYmxlIGl0ZW0gaW50byB0aGUgbXRuYWZvcm1cbiAgICAgICAgICAgIGxldCBuZXdGb3JtID0gdGhpcy5fbW9kaWZ5Rm9ybUl0ZW0oXG4gICAgICAgICAgICAgIHRoaXMuX210bmFGb3JtLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4uY2hhbmdlLFxuICAgICAgICAgICAgICAgIGlkOiBuZXdJdGVtLmluc3RhbmNlSWQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG5ld0l0ZW1cbiAgICAgICAgICAgICkgYXMgRm9ybTtcblxuICAgICAgICAgICAgLy8gR2VuZXJhdGUgYSBsaXN0IG9mIGFsbCBmb3JtaXRlbSBjb25kaXRpb25zIG5lZWRpbmcgY2hhbmdlICYgbW9kaWZ5IHRob3NlIGl0ZW1zIGluIHRoZSBmb3JtXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb25DaGFuZ2VzID0gdGhpcy5nZW5lcmF0ZUNvbmRpdGlvbkNoYW5nZUFycmF5KG5ld0l0ZW0sICdBREQnKTtcbiAgICAgICAgICAgIG5ld0Zvcm0gPSB0aGlzLl9tb2RpZnlGb3JtSXRlbUNvbmRpdGlvbnMobmV3Rm9ybSwgeyAuLi5jaGFuZ2UsIGNvbmRpdGlvbkNoYW5nZXMgfSk7XG4gICAgICAgICAgICB0aGlzLml0ZW1Ub2dnbGVRdWUgPSBjb25kaXRpb25DaGFuZ2VzO1xuICAgICAgICAgICAgLy8gZW1pdCB0aGUgbmV3IG10bmFmb3JtXG4gICAgICAgICAgICB0aGlzLmZvcm1DaGFuZ2UkLm5leHQobmV3Rm9ybSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIENvbmRpdGlvbkNoYW5nZSBhcnJheSBmb3IgaXRlbXMgZXhpc3RpbmcgaW4gdGhlIDxpdGVtPiB3aGljaCBlbmFibGUvZGlzYWJsZSBGb3JtSXRlbXMgb3V0c2lkZSB0aGUgPGl0ZW0+J3Mgc2NvcGUuXG4gICAqIEBwYXJhbSBpdGVtIEZvcm1JdGVtIHRoYXQgZWZmZWN0cyB0aGUgY29uZGl0aW9uIG9mIG90aGVyIEZvcm1JdGVtc1xuICAgKiBAcGFyYW0gYWN0aW9uIFdoZXRoZXIgdGhpcyBpdGVtIHdhcyBhZGRlZCAoQUREKSwgb3IgcmVtb3ZlZCAoUkVNT1ZFKVxuICAgKiBAcmV0dXJucyBBcnJheTxDb25kaXRpb25DaGFuZ2U+XG4gICAqL1xuICBnZW5lcmF0ZUNvbmRpdGlvbkNoYW5nZUFycmF5KGl0ZW06IEZvcm1JdGVtLCBhY3Rpb24/OiBNdG5hV2ZGb3JtSXRlbUNoYW5nZUFjdGlvbik6IEFycmF5PENvbmRpdGlvbkNoYW5nZT4ge1xuICAgIGNvbnN0IGludGVybmFsTWFwID0ge307XG4gICAgdGhpcy5fYnVpbGRJbnRlcm5hbElkc01hcChpdGVtLCBpbnRlcm5hbE1hcCk7XG4gICAgY29uc3QgY29uZGl0aW9uQ2hhbmdlcyA9IG5ldyBBcnJheTxDb25kaXRpb25DaGFuZ2U+KCk7XG4gICAgdGhpcy5fYnVpbGRDb25kaXRpb25DaGFuZ2VBcnJheShpdGVtLCBjb25kaXRpb25DaGFuZ2VzLCBpbnRlcm5hbE1hcCwgYWN0aW9uKTtcbiAgICByZXR1cm4gY29uZGl0aW9uQ2hhbmdlcztcbiAgfVxuXG4gIC8qKiBAcmV0dXJucyBUaGUgdG9wIGxldmVsIHZhbGlkYXRpb24gcmVzdWx0cyAodXN1YWxseSB0aGUgZXJyb3JzKSwga2V5ZWQgb24gSUQuICovXG4gIGdldEZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMoKTogUmVjb3JkPHN0cmluZywgRm9ybUl0ZW1WYWxpZGF0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBNdG5hRm9ybSB1c2luZyB0aGUgTXRuYUZvcm0gJiByZWFjaXZlIGZvcm0gdmFsdWVzIGZyb20gdGhlIE10bmFXZk5nRm9ybVNlcnZpY2UncyBpbnRlcm5hbCBmb3JtLlxuICAgKlxuICAgKiBAcGFyYW0gbmdGb3JtVmFsdWVzIEpTT04gb2JqZWN0IG9mIG5nRm9ybVZhbHVlc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdXBkYXRlRm9ybShuZ0Zvcm1WYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogRm9ybSB7XG4gICAgY29uc3QgY3VycmVudEZvcm0gPSB0aGlzLm5nRm9ybVNlcnZpY2UuZ2V0Rm9ybVZhbHVlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmN1cnJlbnRGb3JtLFxuICAgICAgaXRlbXM6IE10bmFXZlNlcmlhbGl6ZXIuaW5zZXJ0Rm9ybUl0ZW1WYWx1ZXMoXG4gICAgICAgIGN1cnJlbnRGb3JtLFxuICAgICAgICBuZ0Zvcm1WYWx1ZXMsXG4gICAgICAgIHRoaXMudWlTZXJ2aWNlLmdldERpc2FibGVkU3RhdGVzKCksXG4gICAgICAgIHRoaXMuZHluYW1pY0Zvcm1Db25kaXRpb25hbCxcbiAgICAgICAgdGhpcy5keW5hbWljV2ViRm9ybUl0ZW1CdWlsZGVyXG4gICAgICApLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBNdG5hRm9ybSB1c2luZyB0aGUgcHJldmlvdXMgTXRuYUZvcm0gJiByZWFjdGl2ZSBmb3JtIHZhbHVlcy5cbiAgICpcbiAgICogQHBhcmFtIG10bmFGb3JtIE10bmFGb3JtIHJlcXVpcmluZyB2YWx1ZSBpbnNlcnRpb25cbiAgICogQHBhcmFtIG5nRm9ybVZhbHVlcyBKU09OIG9iamVjdCBvZiAgbmdGb3JtIHZhbHVlc1xuICAgKiBAcmV0dXJucyBuZXcgTXRuYUZvcm1cbiAgICovXG4gIGluc2VydE5ld1ZhbHVlcyhtdG5hRm9ybTogRm9ybSwgbmdGb3JtVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IEZvcm0ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5tdG5hRm9ybSxcbiAgICAgIGl0ZW1zOiBNdG5hV2ZTZXJpYWxpemVyLmluc2VydEZvcm1JdGVtVmFsdWVzKFxuICAgICAgICBtdG5hRm9ybSxcbiAgICAgICAgbmdGb3JtVmFsdWVzLFxuICAgICAgICB0aGlzLnVpU2VydmljZS5nZXREaXNhYmxlZFN0YXRlcygpLFxuICAgICAgICB0aGlzLmR5bmFtaWNGb3JtQ29uZGl0aW9uYWwsXG4gICAgICAgIHRoaXMuZHluYW1pY1dlYkZvcm1JdGVtQnVpbGRlclxuICAgICAgKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZXMgYSBGb3JtIHwgRm9ybUl0ZW0gaW50byBGb3JtQ29udHJvbChzKVxuICAgKlxuICAgKiBAcGFyYW0gaXRlbSBGb3JtIHwgRm9ybUl0ZW0gcmVxdWlyaW5nIHNlcmlhbGl6YXRpb25cbiAgICogQHJldHVybnMgRm9ybUdyb3VwIHwgRm9ybUNvbnRyb2xcbiAgICovXG4gIHNlcmlhbGl6ZU10bmFGb3JtSXRlbShpdGVtOiBGb3JtIHwgRm9ybUl0ZW1JbXBsPHVua25vd24+KTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XG4gICAgcmV0dXJuIE10bmFXZlNlcmlhbGl6ZXIuZGV0ZXJtaW5lU2VyaWFsaXplRnVuY3Rpb25Ub1VzZShcbiAgICAgIGl0ZW0sXG4gICAgICB0aGlzLFxuICAgICAgdGhpcy5keW5hbWljRm9ybUNvbmRpdGlvbmFsLFxuICAgICAgdGhpcy5keW5hbWljUmVhY3RpdmVGb3JtQ29udHJvbEJ1aWxkZXJcbiAgICApO1xuICB9XG5cbiAgLy8jcmVnaW9uIEN1c3RvbSBDb21wb25lbnQvRnVuY3Rpb24gUmVnaXN0cmF0aW9uXG4gIGdldER5bmFtaWNDb21wb25lbnQoaWQ6IHN0cmluZyk6IFR5cGU8QmFzZUZvcm1JdGVtPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50cy5nZXQoaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIG1hcCBvZiBjb21wb25lbnRzIHRvIGJlIGR5bmFtaWNhbGx5IHJlbmRlcmVkIGluc2lkZSBhbiBNdG5hRm9ybS5cbiAgICpcbiAgICogQHBhcmFtIGNvbXBvbmVudHMgdGhlIG1hcCBvZiBjb21wb25lbnRzIHRoYXQgYSBWYWx1ZUl0ZW0gd2lsbCB1c2UgZm9yIHJlbmRlcmluZ1xuICAgKiBAcHJvcCBzdHJpbmcgLSB0aGUgdHlwZShpdGVtSWQgc3VmZml4KSBvZiBjb21wb25lbnQsIHVzZWQgZm9yIHJldHJpZXZhbFxuICAgKiBAcHJvcCBUeXBlIC0gdGhlIGNvbXBvbmVudCB0byBiZSByZW5kZXJlZCwgYW4gZXh0ZW5zaW9uIG9mIEJhc2VGb3JtSXRlbVxuICAgKi9cbiAgcmVnaXN0ZXJEeW5hbWljQ29tcG9uZW50cyhjb21wb25lbnRzOiBNYXA8c3RyaW5nLCBUeXBlPEJhc2VGb3JtSXRlbT4+KSB7XG4gICAgdGhpcy5jb21wb25lbnRzID0gY29tcG9uZW50cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGFuIE10bmFGb3JtIG9uIHRoZSBzZXJ2aWNlXG4gICAqIEBwYXJhbSBmb3JtIE10bmFGb3JtIHRvIGJlIHVzZWQgZm9yIGludGVybmFsIG1vZGlmaWNhdGlvblxuICAgKi9cbiAgc2V0TXRuYUZvcm0oZm9ybTogRm9ybSkge1xuICAgIHRoaXMuX210bmFGb3JtID0geyAuLi5mb3JtIH07XG4gICAgaWYgKCEhdGhpcy5pdGVtVG9nZ2xlUXVlICYmICEhdGhpcy5pdGVtVG9nZ2xlUXVlLmxlbmd0aCkge1xuICAgICAgLy8gVGhlIGZvcm0gbmVlZHMgdGltZSB0byByZXJlbmRlciwgc28gd2UgcHVzaCB0aGlzIGxvb3AgdG8gdGhlIGVuZCBvZiB0aGUgc3RhY2tcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pdGVtVG9nZ2xlUXVlKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgdGhpcy5pdGVtVG9nZ2xlUXVlKSB7XG4gICAgICAgICAgICB0aGlzLnVpU2VydmljZS50b2dnbGVGb3JtSXRlbXMoY2hhbmdlLmVuYWJsZWRJdGVtcywgY2hhbmdlLmRpc2FibGVkSXRlbXMsICEhY2hhbmdlLmVuYWJsZSwgY2hhbmdlLmVuYWJsZXJJZCwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXRlbVRvZ2dsZVF1ZSA9IG51bGw7XG4gICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICAvLyBLZWVwIHRyYWNrIG9mIGFueSBlcnJvcnMgY29taW5nIGZyb20gdGhlIHNlcnZlciBhbmQgcmV2YWxpZGF0ZSB0aG9zZSBjb250cm9sc1xuICAgIHRoaXMuX3VwZGF0ZVNlcnZlclNpZGVFcnJvcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbnkgRm9ybVNlcnZpY2UgZXh0ZW5zaW9uIGNsYXNzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCBpbiBvcmRlciB0byBjYWxsIHRoZVxuICAgKiBkeW5hbWljV2ViRm9ybUl0ZW1CdWlsZGVyL2R5bmFtaWNSZWFjdGl2ZUZvcm1Db250cm9sQnVpbGRlciBtZXRob2RzLiBEdXJpbmcgd2ViIGZvcm0gZ2VuZXJhdGlvbiwgdGhpcyBtZXRob2QgaXMgY2hlY2tlZCAmXG4gICAqIHRoZSBjdXJyZW50IEZvcm1JdGVtIGlzIHBhc3NlZCBpbiwgd2hpY2ggY2FuIGJlIHVzZWQgYnkgdGhlIG92ZXJyaWRpbmcgbWV0aG9kLlxuICAgKlxuICAgKiBAZXhhbXBsZSBkeW5hbWljRm9ybUNvbmRpdGlvbmFsID0gKGl0ZW06IEZvcm1JdGVtKSA9PiBpdGVtLml0ZW1JZC5pbmNsdWRlcyh7c29tZSBpdGVtSWR9KVxuICAgKlxuICAgKi9cbiAgcHJvdGVjdGVkIGR5bmFtaWNGb3JtQ29uZGl0aW9uYWw6IChpdGVtOiBGb3JtSXRlbSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBiZSBvdmVycmlkZGVuIGJ5IGV4dGVuZGVkIHNlcnZpY2UgaW4gb3JkZXIgdG8gaGFuZGxlIGZvcm0gZ2VuZXJhdGlvbiBmb3IgYW55IGFwcGxpY2F0aW9uLXNwZWNpZmljIGR5bmFtaWMgZm9ybSBjb21wb25lbnRzLlxuICAgKiBTaG91bGQgcmV0dXJuIGEgbmV3IFZhbHVlSXRlbTxhbnk+LlxuICAgKiBTdGVwIDNcbiAgICpcbiAgICogQGV4YW1wbGUgZHluYW1pY1dlYkZvcm1JdGVtQnVpbGRlcihzZWN0aW9uOiBTZWN0aW9uIHwgRm9ybSwgaXRlbTogRm9ybUl0ZW0sIG5nRm9ybVZhbHVlOiBhbnkpOiBWYWx1ZUl0ZW0ge1xuICAgKiBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuZ2VuZXJhdGVOZXdWYWx1ZShpdGVtLCByZlZhbHVlLCBzZWN0aW9uKTtcbiAgICogcmV0dXJuIHsgLi4uaXRlbSwgLi4ubmV3VmFsdWUgfVxuICAgKiB9XG4gICAqIEBwYXJhbSBzZWN0aW9uIHRoZSBjdXJyZW50IEZvcm1TZWN0aW9uXG4gICAqIEBwYXJhbSBpdGVtIHRoZSBjdXJyZW50IEZvcm1JdGVtXG4gICAqIEBwYXJhbSBuZ0Zvcm1WYWx1ZSB0aGUgbmdGb3JtIEpTT04gdmFsdWVcbiAgICogQHJldHVybnMgYSBuZXcgVmFsdWVJdGVtXG4gICAqL1xuICBwcm90ZWN0ZWQgZHluYW1pY1dlYkZvcm1JdGVtQnVpbGRlcihcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbiAgICBzZWN0aW9uOiBGb3JtIHwgRm9ybUl0ZW1Hcm91cCB8IFJlcGVhdGFibGVJdGVtIHwgdW5kZWZpbmVkLFxuICAgIGl0ZW06IEZvcm1JdGVtLFxuICAgIG5nRm9ybVZhbHVlOiB1bmtub3duLFxuICAgIGRpc2FibGVkU3RhdGU/OiB7IFtpbnN0YW5jZUlkOiBzdHJpbmddOiBib29sZWFuIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xuICApOiBWYWx1ZUl0ZW08dW5rbm93bj4gfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiB0byBiZSBvdmVycmlkZGVuIGJ5IGV4dGVuZGVkIHNlcnZpY2UgaW4gb3JkZXIgdG8gaGFuZGxlIHJlYWN0aXZlIGZvcm0gZ2VuZXJhdGlvblxuICAgKiBmb3IgYW55IGFwcGxpY2F0aW9uLXNwZWNpZmljIGR5bmFtaWMgZm9ybSBjb21wb25lbnRzLlxuICAgKiBTaG91bGQgcmV0dXJuIEZvcm1Db250cm9sIHwgRm9ybUdyb3VwLlxuICAgKlxuICAgKiBAZXhhbXBsZSBkeW5hbWljUmVhY3RpdmVGb3JtQ29udHJvbEJ1aWxkZXIoaXRlbTogRm9ybUl0ZW0pIHtcbiAgICogcmV0dXJuIHRoaXMuYnVpbGRGb3JtQ29udHJvbEZvckR5bmFtaWNDb21wb25lbnQoaXRlbTogRm9ybUl0ZW0pO1xuICAgKiB9XG4gICAqIEBwYXJhbSBpdGVtIEZvcm1JdGVtIHVzZWQgdG8gZ2VuZXJhdGUgZm9ybSBjb250cm9sc1xuICAgKiBAcmV0dXJucyBGb3JtQ29udHJvbCB8IEZvcm1Hcm91cFxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBwcm90ZWN0ZWQgZHluYW1pY1JlYWN0aXZlRm9ybUNvbnRyb2xCdWlsZGVyKGl0ZW06IEZvcm1JdGVtKTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyNlbmRyZWdpb25cblxuICAvLyNyZWdpb24gSU5URVJOQUwgTUVUSE9EU1xuICAvKipcbiAgICogUmVjdXJzaXZlbHkgdHJhdmVyc2VzIGEgRm9ybSB0byBpbnNlcnQgb3IgcmVtb3ZlIGEgZGVzaWduYXRlZCBGb3JtSXRlbS5cbiAgICogQHBhcmFtIGl0ZW0gTXRuYUZvcm0gdG8gc2VhcmNoIHRocm91Z2hcbiAgICogQHBhcmFtIGNoYW5nZTogTXRuYVdmRm9ybUl0ZW1DaGFuZ2UgZm9yIGFkZGluZyBvciByZW1vdmluZyBhIEZvcm1JdGVtXG4gICAqIEBwYXJhbSBuZXdJdGVtIEZvcm1JdGVtIHRvIGFkZCB0byBpdHMgcGFyZW50XG4gICAqL1xuICBwcm90ZWN0ZWQgX21vZGlmeUZvcm1JdGVtPEkgZXh0ZW5kcyBGb3JtIHwgU2VjdGlvbiB8IEZvcm1JdGVtIHwgRm9ybUl0ZW1JbXBsPHVua25vd24+PihcbiAgICBpdGVtOiBJLFxuICAgIGNoYW5nZTogTXRuYVdmRm9ybUl0ZW1DaGFuZ2UsXG4gICAgbmV3SXRlbT86IEZvcm1JdGVtXG4gICk6IEZvcm0gfCBTZWN0aW9uIHwgRm9ybUl0ZW0gfCBGb3JtSXRlbUltcGw8dW5rbm93bj4ge1xuICAgIGlmICghY2hhbmdlLnBhcmVudElkcy5sZW5ndGgpIHtcbiAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIHJlYWNoIHRoZSBQYXJlbnQgRm9ybUl0ZW1cbiAgICAgIGlmIChjaGFuZ2UuYWN0aW9uVHlwZSA9PT0gJ1JFUExBQ0UnKSB7XG4gICAgICAgIGlmICgnaXRlbXMnIGluIGl0ZW0pIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW0uaXRlbXMuZmluZEluZGV4KChpKSA9PiBpLmluc3RhbmNlSWQgPT09IG5ld0l0ZW0/Lmluc3RhbmNlSWQpO1xuICAgICAgICAgIGNvbnN0IG5ld0l0ZW1zID0gWy4uLml0ZW0uaXRlbXNdO1xuICAgICAgICAgIGlmIChuZXdJdGVtKSB7XG4gICAgICAgICAgICBuZXdJdGVtcy5zcGxpY2UoaW5kZXgsIDEsIG5ld0l0ZW0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyAuLi5pdGVtLCBpdGVtczogbmV3SXRlbXMgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH0gZWxzZSBpZiAoaXNSZXBlYXRhYmxlSXRlbShpdGVtKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgaXRlbXM6IGNoYW5nZS5hY3Rpb25UeXBlID09PSAnQUREJyA/IGl0ZW0uaXRlbXMuY29uY2F0KG5ld0l0ZW0gfHwgW10pIDogaXRlbS5pdGVtcy5maWx0ZXIoKGkpID0+IGkuaW5zdGFuY2VJZCAhPT0gY2hhbmdlLmlkKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc0Zvcm0oaXRlbSkgfHwgaXNTZWN0aW9uKGl0ZW0pIHx8IGlzRm9ybUl0ZW1Hcm91cEltcGwoaXRlbSkgfHwgaXNSZXBlYXRhYmxlSXRlbShpdGVtKSkge1xuICAgICAgY29uc3QgaXRlbXMgPSBbLi4uaXRlbS5pdGVtc107XG4gICAgICBjb25zdCBpbmRleFRvTW9kaWZ5ID0gaXRlbS5pdGVtcy5maW5kSW5kZXgoKGkpID0+IGkuaW5zdGFuY2VJZCA9PT0gY2hhbmdlLnBhcmVudElkc1swXSk7XG4gICAgICBjb25zdCBpdGVtVG9Nb2RpZnkgPSBpdGVtLml0ZW1zW2luZGV4VG9Nb2RpZnldIGFzIFBhcmVudEl0ZW1VbmlvbjtcblxuICAgICAgaXRlbXMuc3BsaWNlKFxuICAgICAgICBpbmRleFRvTW9kaWZ5LFxuICAgICAgICAxLFxuICAgICAgICB0aGlzLl9tb2RpZnlGb3JtSXRlbShcbiAgICAgICAgICBpdGVtVG9Nb2RpZnksXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4uY2hhbmdlLFxuICAgICAgICAgICAgcGFyZW50SWRzOiBjaGFuZ2UucGFyZW50SWRzLnNsaWNlKDEpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbmV3SXRlbVxuICAgICAgICApIGFzIEZvcm1JdGVtXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgaXRlbXMsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXNUYWJsZUl0ZW0oaXRlbSkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tb2RpZnlUYWJsZUl0ZW0oaXRlbSBhcyBUYWJsZUl0ZW0sIGNoYW5nZSwgbmV3SXRlbSk7XG4gICAgfSBlbHNlIGlmIChpc09wdGlvbkl0ZW1JbXBsKGl0ZW0pIHx8IGlzT3B0aW9uR3JvdXBJdGVtSW1wbChpdGVtKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX21vZGlmeU9wdGlvbkl0ZW0oXG4gICAgICAgIGl0ZW0gYXMgT3B0aW9uSXRlbUltcGw8T3B0aW9uPHVua25vd24+LCB1bmtub3duPiB8IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgICAgICAgY2hhbmdlLFxuICAgICAgICBuZXdJdGVtXG4gICAgICApWzBdO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmF2ZXJzZXMgYW4gT3B0aW9uSXRlbU1hcCBvZiBhIEZvcm1JdGVtIHRvIGluc2VydCBvciByZW1vdmUgYSBkZXNpZ25hdGVkIEZvcm1JdGVtXG4gICAqIEBwYXJhbSBvcHRpb25JdGVtIEZvcm1JdGVtIHdpdGggYW4gb3B0aW9uSXRlbU1hcCwgZS5nLiBPcHRpb25JdGVtSW1wbCB8IE9wdGlvbkdyb3VwSXRlbUltcGxcbiAgICogQHBhcmFtIGNoYW5nZSBNdG5hV2ZGb3JtSXRlbUNoYW5nZSBmb3IgYWRkaW5nIG9yIHJlbW92aW5nIGEgRm9ybUl0ZW1cbiAgICogQHBhcmFtIG5ld0l0ZW0gRm9ybUl0ZW0gdG8gYmUgYWRkZWQgdG8gaXRzIHBhcmVudFxuICAgKiBAcmV0dXJucyBGb3JtSXRlbSB3aXRoIGFuIG9wdGlvbkl0ZW1NYXAgY29udGFpbmluZyBGb3JtSXRlbXNcbiAgICovXG4gIHByaXZhdGUgX21vZGlmeU9wdGlvbkl0ZW0oXG4gICAgb3B0aW9uSXRlbTogT3B0aW9uSXRlbUltcGw8T3B0aW9uPHVua25vd24+LCB1bmtub3duPiB8IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgICBjaGFuZ2U6IE10bmFXZkZvcm1JdGVtQ2hhbmdlLFxuICAgIG5ld0l0ZW0/OiBGb3JtSXRlbVxuICApOiBbT3B0aW9uSXRlbUltcGw8T3B0aW9uPHVua25vd24+LCB1bmtub3duPiB8IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PiwgYm9vbGVhbl0ge1xuICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgIGNvbnN0IG9wdGlvbkl0ZW1NYXA6IHsgW2lkOiBzdHJpbmddOiBGb3JtSXRlbSB9ID0ge307XG4gICAgLy8gTG9vcCB0aHJvdWdoIHRoZSBtYXAgYW5kIHNldCB0aGUgaXRlbXMgdG8gYSBuZXcgbWFwXG4gICAgLy8gQ2hlY2sgaWYgYW55IEZvcm1JdGVtIGluIHRoZSBtYXAgbWF0Y2hlcyB0aGUgbmV4dCBwYXJlbnQgSURcbiAgICBmb3IgKGNvbnN0IGlkIGluIG9wdGlvbkl0ZW0ub3B0aW9uSXRlbU1hcCkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25JdGVtLm9wdGlvbkl0ZW1NYXAsIGlkKSkge1xuICAgICAgICAvLyBJZiBvbmUgbWF0Y2hlcywgbW9kaWZ5ICYgc2V0IGl0IG9uIHRoZSBuZXcgbWFwXG4gICAgICAgIGlmIChvcHRpb25JdGVtLm9wdGlvbkl0ZW1NYXBbaWRdLmluc3RhbmNlSWQgPT09IGNoYW5nZS5wYXJlbnRJZHNbMF0pIHtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgb3B0aW9uSXRlbU1hcFtpZF0gPSB0aGlzLl9tb2RpZnlGb3JtSXRlbShcbiAgICAgICAgICAgIG9wdGlvbkl0ZW0ub3B0aW9uSXRlbU1hcFtpZF0gYXMgUGFyZW50SXRlbVVuaW9uLFxuICAgICAgICAgICAgeyAuLi5jaGFuZ2UsIHBhcmVudElkczogY2hhbmdlLnBhcmVudElkcy5zbGljZSgxKSB9LFxuICAgICAgICAgICAgbmV3SXRlbVxuICAgICAgICAgICkgYXMgRm9ybUl0ZW07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9uSXRlbU1hcFtpZF0gPSBvcHRpb25JdGVtLm9wdGlvbkl0ZW1NYXBbaWRdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHJldHVybiB0aGUgaXRlbSB3aXRoIGl0cyBuZXcgb3B0aW9uSXRlbU1hcCwgJiB3aGV0aGVyIHdlIGZvdW5kIHRoZSBtYXRjaGluZyBpdGVtXG4gICAgcmV0dXJuIFt7IC4uLm9wdGlvbkl0ZW0sIG9wdGlvbkl0ZW1NYXAgfSwgZm91bmRdO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlcyB0YWJsZSByb3dzIHRvIGluc2VydCBvciByZW1vdmUgYSBGb3JtSXRlbVxuICAgKiBAcGFyYW0gdGFibGVJdGVtIFRhYmxlSXRlbSB0byB0cmF2ZXJzZVxuICAgKiBAcGFyYW0gY2hhbmdlIE10bmFXZkZvcm1JdGVtQ2hhbmdlIGZvciBhZGRpbmcgb3IgcmVtb3ZpbmcgYSBGb3JtSXRlbVxuICAgKiBAcGFyYW0gbmV3SXRlbSBGb3JtSXRlbSB0byBiZSBhZGRlZCB0byBpdHMgcGFyZW50XG4gICAqIEByZXR1cm5zIFRhYmxlSXRlbSB3aXRoIGEgRm9ybUl0ZW0gYWRkZWQgb3IgcmVtb3ZlZFxuICAgKi9cbiAgcHJpdmF0ZSBfbW9kaWZ5VGFibGVJdGVtKHRhYmxlSXRlbTogVGFibGVJdGVtLCBjaGFuZ2U6IE10bmFXZkZvcm1JdGVtQ2hhbmdlLCBuZXdJdGVtPzogRm9ybUl0ZW0pOiBUYWJsZUl0ZW0ge1xuICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgIC8vIE1hcCB0aGUgdGFibGUgcm93cyB0byBmaW5kIHRoZSBGb3JtSXRlbSB3aXRoIG1hdGNoaW5nIGluc3RhbmNlSWRcbiAgICBjb25zdCB0YWJsZVJvd3M6IFRhYmxlUm93SXRlbVtdID0gdGFibGVJdGVtLnRhYmxlUm93cy5tYXAoKHJvdzogVGFibGVSb3dJdGVtKSA9PiB7XG4gICAgICAvLyBJZiB0aGUgaXRlbSB3YXMgZm91bmQsIHNraXAgbWFwcGluZyBmdXJ0aGVyIHJvd3NcbiAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5yb3csXG4gICAgICAgICAgaXRlbXM6IHJvdy5pdGVtcy5tYXAoKHJvd0l0ZW06IEZvcm1JdGVtKSA9PiB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBmb3VuZCB0aGUgbmV4dCBtYXRjaGluZyBGb3JtSXRlbSwgdG9nZ2xlICdmb3VuZCcsIGFuZCByZXR1cm4gdGhlIG1vZGlmaWVkIEZvcm1JdGVtXG4gICAgICAgICAgICBpZiAoISFyb3dJdGVtICYmIHJvd0l0ZW0uaW5zdGFuY2VJZCA9PT0gY2hhbmdlLnBhcmVudElkc1swXSkge1xuICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb2RpZnlGb3JtSXRlbShcbiAgICAgICAgICAgICAgICByb3dJdGVtIGFzIFBhcmVudEl0ZW1VbmlvbixcbiAgICAgICAgICAgICAgICB7IC4uLmNoYW5nZSwgcGFyZW50SWRzOiBjaGFuZ2UucGFyZW50SWRzLnNsaWNlKDEpIH0sXG4gICAgICAgICAgICAgICAgbmV3SXRlbVxuICAgICAgICAgICAgICApIGFzIEZvcm1JdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlIEZvcm1JdGVtIGluc3RhbmNlSWQgZG9lc24ndCBtYXRjaCwgYnV0IGl0IGhhcyBGb3JtSXRlbXMgaW4gaXRzICdvcHRpb25JdGVtTWFwJyxcbiAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgYSBtYXRjaGluZyBGb3JtSXRlbSBleGlzdHMgaW4gaXRzIG1hcFxuICAgICAgICAgICAgaWYgKCdvcHRpb25JdGVtTWFwJyBpbiByb3dJdGVtKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJldHVybmVkID0gdGhpcy5fbW9kaWZ5T3B0aW9uSXRlbShcbiAgICAgICAgICAgICAgICByb3dJdGVtIGFzIE9wdGlvbkl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPiwgdW5rbm93bj4gfCBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj4sXG4gICAgICAgICAgICAgICAgY2hhbmdlLFxuICAgICAgICAgICAgICAgIG5ld0l0ZW1cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgZm91bmQgPSByZXR1cm5lZFsxXTtcbiAgICAgICAgICAgICAgcmV0dXJuIHJldHVybmVkWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJvd0l0ZW07XG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gcm93O1xuICAgIH0pO1xuICAgIHJldHVybiB7IC4uLnRhYmxlSXRlbSwgdGFibGVSb3dzIH07XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBvciByZW1vdmVzIGluc3RhbmNlSWRzIGZyb20gdGhlICdpdGVtSWRzJyBpbiBhIEZvcm1JdGVtJ3MgY29uZGl0aW9uXG4gICAqIEBwYXJhbSBmb3JtIE10bmFGb3JtIHRvIHNlYXJjaCB0aHJvdWdoICYgcmVwbGFjZSBmb3JtaXRlbXMgd2l0aCB0aGUgbmV3IGNvbmRpdGlvblxuICAgKiBAcGFyYW0gY2hhbmdlIFRoZSBjaGFuZ2UgdGhhdCByZWNlbnRseSBvY2N1cnJlZCBpbiB0aGUgbXRuYUZvcm1cbiAgICovXG4gIHByaXZhdGUgX21vZGlmeUZvcm1JdGVtQ29uZGl0aW9ucyhmb3JtOiBGb3JtLCBjaGFuZ2U6IE10bmFXZkZvcm1JdGVtQ2hhbmdlKTogRm9ybSB7XG4gICAgbGV0IG5ld0Zvcm0gPSBmb3JtO1xuICAgIGlmIChjaGFuZ2UuY29uZGl0aW9uQ2hhbmdlcykge1xuICAgICAgY29uc3QgZm9ybUl0ZW1zOiB7IFtrZXk6IHN0cmluZ106IEZvcm1JdGVtIHwgQ29uZGl0aW9uYWxJdGVtIH0gPSB7fTtcbiAgICAgIGZvciAoY29uc3QgY2Mgb2YgY2hhbmdlLmNvbmRpdGlvbkNoYW5nZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCB0b2dnbGVkSWQgb2YgWy4uLmNjLmVuYWJsZWRJdGVtcywgLi4uY2MuZGlzYWJsZWRJdGVtc10pIHtcbiAgICAgICAgICBsZXQgZm9ybUl0ZW0gPSBmb3JtSXRlbXNbdG9nZ2xlZElkXTtcbiAgICAgICAgICBjb25zdCBmb3JtSXRlbUNvbXBvbmVudCA9IHRoaXMudWlTZXJ2aWNlLmdldEl0ZW0odG9nZ2xlZElkKTtcbiAgICAgICAgICBpZiAoIWZvcm1JdGVtICYmIGZvcm1JdGVtQ29tcG9uZW50Py5pdGVtKSB7XG4gICAgICAgICAgICBmb3JtSXRlbSA9IGZvcm1JdGVtQ29tcG9uZW50Py5pdGVtO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNDb25kaXRpb25hbEl0ZW0oZm9ybUl0ZW0pICYmIGZvcm1JdGVtLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgY29uc3QgaXRlbUNvbmRpdGlvbkl0ZW1JZHMgPSBmb3JtSXRlbS5jb25kaXRpb24uaXRlbUlkcyB8fCBbXTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1JZHMgPVxuICAgICAgICAgICAgICBjaGFuZ2UuYWN0aW9uVHlwZSA9PT0gJ0FERCdcbiAgICAgICAgICAgICAgICA/IFsuLi5pdGVtQ29uZGl0aW9uSXRlbUlkcywgY2MuZW5hYmxlcklkXVxuICAgICAgICAgICAgICAgIDogaXRlbUNvbmRpdGlvbkl0ZW1JZHMuZmlsdGVyKChpKSA9PiBpICE9PSBjYy5lbmFibGVySWQpO1xuXG4gICAgICAgICAgICBjb25zdCBuZXdJdGVtOiBDb25kaXRpb25hbEl0ZW0gPSB7IC4uLmZvcm1JdGVtLCBjb25kaXRpb246IHsgLi4uZm9ybUl0ZW0uY29uZGl0aW9uLCBpdGVtSWRzIH0gfTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NoYW5nZSA9IG5ldyBNdG5hV2ZGb3JtSXRlbUNoYW5nZShuZXdJdGVtLmluc3RhbmNlSWQsIGZvcm1JdGVtQ29tcG9uZW50Py5wYXJlbnRJZHMgfHwgW10sICdSRVBMQUNFJyk7XG5cbiAgICAgICAgICAgIG5ld0Zvcm0gPSB0aGlzLl9tb2RpZnlGb3JtSXRlbShuZXdGb3JtLCBuZXdDaGFuZ2UsIG5ld0l0ZW0gYXMgRm9ybUl0ZW0gJiBDb25kaXRpb25hbEl0ZW0pIGFzIEZvcm07XG4gICAgICAgICAgICBmb3JtSXRlbXNbdG9nZ2xlZElkXSA9IG5ld0l0ZW07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2UuYWN0aW9uVHlwZSA9PT0gJ1JFTU9WRScpIHtcbiAgICAgICAgICB0aGlzLnVpU2VydmljZS50b2dnbGVGb3JtSXRlbXMoY2MuZW5hYmxlZEl0ZW1zLCBjYy5kaXNhYmxlZEl0ZW1zLCAhIWNjLmVuYWJsZSwgY2MuZW5hYmxlcklkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3Rm9ybTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBtYXAgb2YgYWxsIGluc3RhbmNlSWRzIGluc2lkZSBhbiBpdGVtLiBDaGVja3MgJ2l0ZW1zJyAmICdvcHRpb25JdGVtTWFwJ1xuICAgKiBAcGFyYW0gaXRlbSBJdGVtIHRvIHJlY3Vyc2VcbiAgICogQHBhcmFtIGlkTWFwIG1hcCBvZiB0aGUgaXRlbSdzIGludGVybmFsIGluc3RhbmNlSWRzXG4gICAqL1xuICBwcml2YXRlIF9idWlsZEludGVybmFsSWRzTWFwKGl0ZW06IEZvcm1JdGVtLCBpZE1hcDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pIHtcbiAgICBpZE1hcFtpdGVtLmluc3RhbmNlSWRdID0gdHJ1ZTtcbiAgICBpZiAoaXNUeXBlPHsgaXRlbXM6IEZvcm1JdGVtW10gfT4oaXRlbSwgJ2l0ZW1zJykpIHtcbiAgICAgIGNvbnN0IGl0ZW1zOiBGb3JtSXRlbVtdID0gaXRlbS5pdGVtcztcbiAgICAgIGZvciAoY29uc3Qgc3ViSXRlbSBvZiBpdGVtcykge1xuICAgICAgICB0aGlzLl9idWlsZEludGVybmFsSWRzTWFwKHN1Ykl0ZW0sIGlkTWFwKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzVHlwZTx7IG9wdGlvbkl0ZW1NYXA6IHsgW2lkOiBzdHJpbmddOiBGb3JtSXRlbSB9IH0+KGl0ZW0sICdvcHRpb25JdGVtTWFwJykpIHtcbiAgICAgIGNvbnN0IG1hcDogeyBbaWQ6IHN0cmluZ106IEZvcm1JdGVtIH0gPSBpdGVtLm9wdGlvbkl0ZW1NYXA7XG4gICAgICBmb3IgKGNvbnN0IGlkIGluIG1hcCkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hcCwgaWQpKSB7XG4gICAgICAgICAgdGhpcy5fYnVpbGRJbnRlcm5hbElkc01hcChtYXBbaWRdLCBpZE1hcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGFuIGFycmF5IG9mIENvbmRpdGlvbkNoYW5nZXMgdG8gYmUgaW1wbGVtZW50ZWQgaW4gYW4gTXRuYUZvcm0uXG4gICAqIEBwYXJhbSBpdGVtIEZvcm1JdGVtIHRoYXQgd2FzIGFkZGVkL3JlbW92ZWQsIHdoaWNoIGFmZmVjdHMgY29uZGl0aW9ucyBvZiBvdGhlciBGb3JtSXRlbXNcbiAgICogQHBhcmFtIGNoYW5nZXMgQXJyYXkgdG8gYnVpbGQgdXBcbiAgICogQHBhcmFtIGludGVybmFsSWRNYXAgTWFwIG9mIGFsbCBpbnN0YW5jZUlkcyBsb2NhdGVkIGluIHRoZSBpdGVtOyBpbiBvcmRlciB0byBleGNsdWRlIHRoZW0gZnJvbSB0aGUgY29uZGl0aW9uIGNoYW5nZXNcbiAgICogQHBhcmFtIGFjdGlvbiBXaGV0aGVyIHRoZSBpdGVtIHdhcyBhZGRlZCBvciByZW1vdmVkXG4gICAqL1xuICBwcml2YXRlIF9idWlsZENvbmRpdGlvbkNoYW5nZUFycmF5KFxuICAgIGl0ZW06IEZvcm1JdGVtLFxuICAgIGNoYW5nZXM6IEFycmF5PENvbmRpdGlvbkNoYW5nZT4sXG4gICAgaW50ZXJuYWxJZE1hcDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sXG4gICAgYWN0aW9uPzogTXRuYVdmRm9ybUl0ZW1DaGFuZ2VBY3Rpb25cbiAgKSB7XG4gICAgaWYgKGlzT3B0aW9uSXRlbUltcGwoaXRlbSkpIHtcbiAgICAgIGNvbnN0IGVuYWJsZSA9ICEhYWN0aW9uICYmIGFjdGlvbiA9PT0gJ0FERCcgPyBpdGVtLm9wdGlvbi5zZWxlY3RlZCB8fCBpdGVtLnZhbHVlID09PSBpdGVtLm9wdGlvbi5vcHRpb24uaWQgOiBmYWxzZTtcbiAgICAgIHRoaXMuX3B1c2hDb25kaXRpb25Ub0FycmF5KGl0ZW0uaW5zdGFuY2VJZCwgaXRlbS5vcHRpb24uZW5hYmxlZEl0ZW1zLCBpdGVtLm9wdGlvbi5kaXNhYmxlZEl0ZW1zLCBjaGFuZ2VzLCBpbnRlcm5hbElkTWFwLCBlbmFibGUpO1xuICAgICAgdGhpcy5fYnVpbGRBcnJheUZyb21PcHRpb25JdGVtTWFwKGl0ZW0sIGNoYW5nZXMsIGludGVybmFsSWRNYXApO1xuICAgIH0gZWxzZSBpZiAoaXNPcHRpb25Hcm91cEl0ZW1JbXBsKGl0ZW0pKSB7XG4gICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBpdGVtLm9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZW5hYmxlID1cbiAgICAgICAgICAhIWFjdGlvbiAmJiBhY3Rpb24gPT09ICdBREQnID8gb3B0aW9uLnNlbGVjdGVkIHx8ICghIWl0ZW0udmFsdWUgJiYgaXRlbS52YWx1ZS5zb21lKCh2KSA9PiB2ID09PSBvcHRpb24ub3B0aW9uLmlkKSkgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5fcHVzaENvbmRpdGlvblRvQXJyYXkoaXRlbS5pbnN0YW5jZUlkLCBvcHRpb24uZW5hYmxlZEl0ZW1zLCBvcHRpb24uZGlzYWJsZWRJdGVtcywgY2hhbmdlcywgaW50ZXJuYWxJZE1hcCwgZW5hYmxlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2J1aWxkQXJyYXlGcm9tT3B0aW9uSXRlbU1hcChpdGVtLCBjaGFuZ2VzLCBpbnRlcm5hbElkTWFwLCBhY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAoaXNUeXBlPHsgaXRlbXM6IEZvcm1JdGVtW10gfT4oaXRlbSwgJ2l0ZW1zJykpIHtcbiAgICAgIGNvbnN0IGl0ZW1zOiBGb3JtSXRlbVtdID0gaXRlbS5pdGVtcztcbiAgICAgIGZvciAoY29uc3Qgc3ViSXRlbSBvZiBpdGVtcykge1xuICAgICAgICB0aGlzLl9idWlsZENvbmRpdGlvbkNoYW5nZUFycmF5KHN1Ykl0ZW0sIGNoYW5nZXMsIGludGVybmFsSWRNYXAsIGFjdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhbiBhcnJheSBvZiBDb25kaXRpb25DaGFuZ2VzIGZyb20gYW4gaXRlbSdzIG9wdGlvbkl0ZW1NYXBcbiAgICogQHBhcmFtIGl0ZW0gRm9ybUl0ZW0gd2l0aCBhbiBvcHRpb25JdGVtTWFwXG4gICAqIEBwYXJhbSBjb25kaXRpb25zIEFycmF5IG9mIENvbmRpdGlvbkNoYW5nZXMgdG8gcHVzaCBvbiBuZXcgY2hhbmdlc1xuICAgKiBAcGFyYW0gaXRlbU1hcCBtYXAgb2YgaW5zdGFuY2VJZHMgZXhpc2l0aW5nIGluIGFuIGl0ZW07IGluIG9yZGVyIHRvIGV4Y2x1ZGUgdGhlbSBmcm9tIHRoZSBjaGFuZ2VzXG4gICAqIEBwYXJhbSBhY3Rpb24gV2hldGhlciBhbiBpdGVtIHdhcyBhZGRlZCBvciByZW1vdmVkXG4gICAqL1xuICBwcml2YXRlIF9idWlsZEFycmF5RnJvbU9wdGlvbkl0ZW1NYXAoXG4gICAgaXRlbTogT3B0aW9uSXRlbUltcGw8T3B0aW9uPHVua25vd24+LCB1bmtub3duPiB8IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgICBjb25kaXRpb25zOiBBcnJheTxDb25kaXRpb25DaGFuZ2U+LFxuICAgIGl0ZW1NYXA6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+LFxuICAgIGFjdGlvbj86IE10bmFXZkZvcm1JdGVtQ2hhbmdlQWN0aW9uXG4gICkge1xuICAgIGlmIChpdGVtLm9wdGlvbkl0ZW1NYXApIHtcbiAgICAgIGZvciAoY29uc3QgaWQgaW4gaXRlbS5vcHRpb25JdGVtTWFwKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaXRlbS5vcHRpb25JdGVtTWFwLCBpZCkpIHtcbiAgICAgICAgICBjb25zdCBzdWJJdGVtID0gaXRlbS5vcHRpb25JdGVtTWFwW2lkXTtcbiAgICAgICAgICB0aGlzLl9idWlsZENvbmRpdGlvbkNoYW5nZUFycmF5KHN1Ykl0ZW0sIGNvbmRpdGlvbnMsIGl0ZW1NYXAsIGFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHVzaGVzIGEgbmV3IENvbmRpdGlvbkNoYW5nZSBvbnRvIHRoZSBjb25kaXRpb25zIGFycmF5LiBJZiBhIENvbmRpdGlvbkNoYW5nZSB3aXRoIG1hdGNoaW5nIGlkIGV4aXN0cyxcbiAgICogaXQgbWVyZ2VzIHRoZSBuZXcgdmFsdWVzIGludG8gaXRcbiAgICogQHBhcmFtIGVuYWJsZXJJZCBpbnN0YW5jZUlkIG9mIHRoZSBpdGVtIHRoYXQgZW5hYmxlcyBvdGhlciBGb3JtSXRlbXNcbiAgICogQHBhcmFtIGVuYWJsZWQgdGhlIGl0ZW0ncyAnZW5hYmxlZEl0ZW1zJyBhcnJheVxuICAgKiBAcGFyYW0gZGlzYWJsZWQgdGhlIGl0ZW0ncyAnZGlzYWJsZWRJdGVtcycgYXJyYXlcbiAgICogQHBhcmFtIGNvbmRpdGlvbnMgQXJyYXkgb2YgQ29uZGl0aW9uQ2hhbmdlcyB0byBidWlsZCB1cFxuICAgKiBAcGFyYW0gaXRlbU1hcCBtYXAgb2YgaW5zdGFuY2VJZHMgaW5zaWRlIGFuIGl0ZW07IHRvIGVuc3VyZSBubyBpbnRlcm5hbCBpZHMgYXJlIGluY2x1ZGVkIGluIGEgY2hhbmdlXG4gICAqIEBwYXJhbSBlbmFibGUgV2hldGhlciB0aGUgJ2VuYWJsZWRJdGVtcycgc2hvdWxkIHRvZ2dsZWQgZW5hYmxlZFxuICAgKi9cbiAgcHJpdmF0ZSBfcHVzaENvbmRpdGlvblRvQXJyYXkoXG4gICAgZW5hYmxlcklkOiBzdHJpbmcsXG4gICAgZW5hYmxlZDogc3RyaW5nW10sXG4gICAgZGlzYWJsZWQ6IHN0cmluZ1tdLFxuICAgIGNvbmRpdGlvbnM6IEFycmF5PENvbmRpdGlvbkNoYW5nZT4sXG4gICAgaXRlbU1hcDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sXG4gICAgZW5hYmxlOiBib29sZWFuXG4gICkge1xuICAgIGNvbnN0IGVuYWJsZWRJdGVtcyA9IGVuYWJsZWQuZmlsdGVyKChlKSA9PiAhaXRlbU1hcFtlXSk7XG4gICAgY29uc3QgZGlzYWJsZWRJdGVtcyA9IGRpc2FibGVkLmZpbHRlcigoZCkgPT4gIWl0ZW1NYXBbZF0pO1xuICAgIGlmICghIWVuYWJsZWRJdGVtcy5sZW5ndGggfHwgISFkaXNhYmxlZEl0ZW1zLmxlbmd0aCkge1xuICAgICAgY29uc3QgaW5kZXggPSBjb25kaXRpb25zLmZpbmRJbmRleCgoYykgPT4gYy5lbmFibGVySWQgPT09IGVuYWJsZXJJZCk7XG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIGNvbmRpdGlvbnMucHVzaCh7IGVuYWJsZXJJZDogZW5hYmxlcklkLCBlbmFibGVkSXRlbXMsIGRpc2FibGVkSXRlbXMsIGVuYWJsZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHByZXYgPSBjb25kaXRpb25zW2luZGV4XTtcbiAgICAgICAgY29uc3QgbmV3SWQ6IENvbmRpdGlvbkNoYW5nZSA9IHtcbiAgICAgICAgICBlbmFibGVySWQsXG4gICAgICAgICAgZW5hYmxlZEl0ZW1zOiBbLi4ucHJldi5lbmFibGVkSXRlbXMsIC4uLmVuYWJsZWRJdGVtc10sXG4gICAgICAgICAgZGlzYWJsZWRJdGVtczogWy4uLnByZXYuZGlzYWJsZWRJdGVtcywgLi4uZGlzYWJsZWRJdGVtc10sXG4gICAgICAgICAgZW5hYmxlLFxuICAgICAgICB9O1xuICAgICAgICBjb25kaXRpb25zLnNwbGljZShpbmRleCwgMSwgbmV3SWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSBhbGwgdmFsaWRhdGlvbiBlcnJvcnMgb24gdGhlIHNlcnZpY2UuXG4gICAqIFJldmFsaWRhdGUgZm9ybSBjb250cm9scyB0aGF0IHByZXZpb3VzbHkgaGFkIGVycm9ycyBvciBoYXZlIG5ldyBlcnJvcnMgbm93LlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlU2VydmVyU2lkZUVycm9ycygpIHtcbiAgICAvLyBLZWVwIHRyYWNrIG9mIElEcyBmb3IgZWFjaCBjb250cm9sIHRoYXQgbmVlZHMgdG8gYmUgcmV2YWxpZGF0ZWRcbiAgICBjb25zdCBjb250cm9sSWRzVG9SZXZhbGlkYXRlID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAvLyBDb2xsZWN0IGNvbnRyb2xzIHByZXZpb3VzbHkgaW4gZXJyb3IgdG8gcmV2YWxpZGF0ZVxuICAgIGlmICh0aGlzLl9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzKSB7XG4gICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX2Zvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzLCBpZCkpIHtcbiAgICAgICAgICBjb250cm9sSWRzVG9SZXZhbGlkYXRlLmFkZChpZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDbGVhciBvdXQgYWxsIHByZXZpb3VzIHN0b3JlZCBlcnJvcnNcbiAgICB0aGlzLl9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzID0ge307XG4gICAgaWYgKHRoaXMuX210bmFGb3JtPy52YWxpZGF0aW9uUmVzdWx0KSB7XG4gICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiB0aGlzLl9tdG5hRm9ybS52YWxpZGF0aW9uUmVzdWx0LmZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMpIHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uU3RhdHVzID09PSAnRVJST1JTJykge1xuICAgICAgICAgIC8vIFN0b3JlIGVycm9ycyBzbyB0aGF0IHRoZSB2YWxpZGF0aW9uUmVzdWx0VmFsaWRhdG9yIGNhbiB2YWxpZGF0ZSBlYWNoIGNvbnRyb2xcbiAgICAgICAgICB0aGlzLl9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzW3Jlc3VsdC5pZF0gPSByZXN1bHQ7XG4gICAgICAgICAgLy8gV2UgbmVlZCB0byByZXZhbGlkYXRlIHRoZXNlIGNvbnRyb2xzIHRoYXQgaGF2ZSBlcnJvcnNcbiAgICAgICAgICBjb250cm9sSWRzVG9SZXZhbGlkYXRlLmFkZChyZXN1bHQuaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT25seSByZXZhbGlkYXRlIGNvbnRyb2xzIGFjdHVhbGx5IGNoYW5nZXNcbiAgICBjb25zdCBmb3JtID0gdGhpcy5uZ0Zvcm1TZXJ2aWNlLmdldEZvcm0oKTtcbiAgICBpZiAoZm9ybSkge1xuICAgICAgZm9yIChjb25zdCBpZCBvZiBjb250cm9sSWRzVG9SZXZhbGlkYXRlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmaW5kRm9ybUNvbnRyb2woaWQsIGZvcm0pO1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG59XG4iXX0=
478
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvZm9ybS1tYW5hZ2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFRTCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsV0FBVyxFQUNYLG9CQUFvQixHQVdyQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3RDLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7O0FBaUJqRTs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTyxvQkFBb0I7SUFvQi9CLFlBQXNCLFVBQTRCLEVBQVksYUFBa0MsRUFBWSxTQUEwQjtRQUFoSCxlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUFZLGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtRQUFZLGNBQVMsR0FBVCxTQUFTLENBQWlCO1FBbkI1SCxlQUFVLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUM7UUFDbkQsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBMEIsQ0FBQztRQUNwRCwyQkFBc0IsR0FBRyxJQUFJLE9BQU8sRUFBbUIsQ0FBQztRQUNsRSxnRUFBZ0U7UUFDdEQsK0JBQTBCLEdBQTZDLEVBQUUsQ0FBQztRQStLcEY7Ozs7Ozs7V0FPRztRQUNPLDJCQUFzQixHQUFnQyxH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RUFBRTtvQkFDN0Usc0JBQXNCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUNoQzthQUNGO1NBQ0Y7UUFFRCx1Q0FBdUM7UUFDdkMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLEVBQUUsQ0FBQztRQUNyQyxJQUFJLE1BQUEsSUFBSSxDQUFDLFNBQVMsMENBQUUsZ0JBQWdCLEVBQUU7WUFDcEMsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixFQUFFO2dCQUM5RSxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsS0FBSyxRQUFRLEVBQUU7b0JBQ3hDLCtFQUErRTtvQkFDL0UsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUM7b0JBQ3BELHdEQUF3RDtvQkFDeEQsc0JBQXNCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDdkM7YUFDRjtTQUNGO1FBRUQsNENBQTRDO1FBQzVDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUMsSUFBSSxJQUFJLEVBQUU7WUFDUixLQUFLLE1BQU0sRUFBRSxJQUFJLHNCQUFzQixFQUFFO2dCQUN2QyxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLE9BQU8sRUFBRTtvQkFDWCxPQUFPLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztpQkFDbEM7YUFDRjtTQUNGO0lBQ0gsQ0FBQzs7a0hBNWpCVSxvQkFBb0I7c0hBQXBCLG9CQUFvQjs0RkFBcEIsb0JBQW9CO2tCQURoQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgaXNUeXBlIH0gZnJvbSAnQG10bmEvY29yZS10cyc7XG5pbXBvcnQge1xuICBDb25kaXRpb25hbEl0ZW0sXG4gIENvbmRpdGlvbkNoYW5nZSxcbiAgRm9ybSxcbiAgRm9ybUl0ZW0sXG4gIEZvcm1JdGVtR3JvdXAsXG4gIEZvcm1JdGVtSW1wbCxcbiAgRm9ybUl0ZW1WYWxpZGF0aW9uUmVzdWx0LFxuICBpc0NvbmRpdGlvbmFsSXRlbSxcbiAgaXNGb3JtLFxuICBpc0Zvcm1JdGVtR3JvdXBJbXBsLFxuICBpc09wdGlvbkdyb3VwSXRlbUltcGwsXG4gIGlzT3B0aW9uSXRlbUltcGwsXG4gIGlzUmVwZWF0YWJsZUl0ZW0sXG4gIGlzU2VjdGlvbixcbiAgaXNUYWJsZUl0ZW0sXG4gIE10bmFXZkZvcm1JdGVtQ2hhbmdlLFxuICBNdG5hV2ZGb3JtSXRlbUNoYW5nZUFjdGlvbixcbiAgT3B0aW9uLFxuICBPcHRpb25Hcm91cEl0ZW1JbXBsLFxuICBPcHRpb25JdGVtSW1wbCxcbiAgUHJvZ3Jlc3NpdmVGb3JtLFxuICBSZXBlYXRhYmxlSXRlbSxcbiAgU2VjdGlvbixcbiAgVGFibGVJdGVtLFxuICBUYWJsZVJvd0l0ZW0sXG4gIFZhbHVlSXRlbSxcbn0gZnJvbSAnQG10bmEvd2ViLWZvcm0tdHMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQmFzZUZvcm1JdGVtIH0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7IGZpbmRGb3JtQ29udHJvbCwgTXRuYVdmU2VyaWFsaXplciB9IGZyb20gJy4uL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBNdG5hV2ZBcGlTZXJ2aWNlIH0gZnJvbSAnLi9hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBNdG5hV2ZOZ0Zvcm1TZXJ2aWNlIH0gZnJvbSAnLi9uZy1mb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgTXRuYVdmVUlTZXJ2aWNlIH0gZnJvbSAnLi91aS5zZXJ2aWNlJztcblxuLyoqXG4gKiB0eXBlcyBvZiBGb3JtSXRlbXMgdGhhdCBjYW4gYmUgcGFzc2VkIGludG8gdGhlICdtb2RpZnlNdG5hRm9ybUl0ZW0nIG1ldGhvZCB0byBhZGQvcmVtb3ZlIGl0ZW1zXG4gKi9cbnR5cGUgUGFyZW50SXRlbVVuaW9uID1cbiAgfCBGb3JtXG4gIHwgU2VjdGlvblxuICB8IEZvcm1JdGVtR3JvdXBcbiAgfCBSZXBlYXRhYmxlSXRlbVxuICB8IFRhYmxlSXRlbVxuICB8IE9wdGlvbkl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPiwgdW5rbm93bj5cbiAgfCBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj47XG5cbi8qKlxuICogQWxsb3dzIGEgY2FsbGVyIHRvIChkZSlzZXJpYWxpemFlIGFuIE10bmFGb3JtLiBJdCBjb250YWlucyB0aGUgZGV0ZXJtaW5pbmcgbG9naWMgZm9yIHJldHVybmluZyBzcGVjaWZpYyBmb3JtIGNvbnRyb2xzXG4gKiBhbmQgZGVzZXJpYWxpemluZyBuZXcgTXRuYUZvcm1zIGZyb20gdGhlIHJlYWN0aXZlIHZhbHVlcywgYXMgd2VsbCBhcyByZWdpc3RlcmluZyBjdXN0b20gRm9ybSBJdGVtcyAmIGZ1bmN0aW9ucy5cbiAqXG4gKiBAZXhwb3J0XG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBNdG5hV2ZNYW5hZ2VyU2VydmljZSB7XG4gIHByb3RlY3RlZCBjb21wb25lbnRzID0gbmV3IE1hcDxzdHJpbmcsIFR5cGU8QmFzZUZvcm1JdGVtPj4oKTtcbiAgcHJvdGVjdGVkIGZvcm1DaGFuZ2UkID0gbmV3IFN1YmplY3Q8Rm9ybSB8IFByb2dyZXNzaXZlRm9ybT4oKTtcbiAgcHJvdGVjdGVkIHByb2dyZXNzaXZlRm9ybUNoYW5nZSQgPSBuZXcgU3ViamVjdDxQcm9ncmVzc2l2ZUZvcm0+KCk7XG4gIC8qKiBBIG1hcCBvZiBhbGwge0BsaW5rIEZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdH0ga2V5ZWQgb24gaWQgKi9cbiAgcHJvdGVjdGVkIF9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBGb3JtSXRlbVZhbGlkYXRpb25SZXN1bHQ+ID0ge307XG4gIC8qKiBDb25kaXRpb25DaGFuZ2VzIG9uICdhZGQnIG11c3Qgd2FpdCB1bnRpbCB0aGUgZm9ybSByZXJlbmRlcnMgdG8gdG9nZ2xlIGl0ZW1zICovXG4gIHByb3RlY3RlZCBpdGVtVG9nZ2xlUXVlOiBBcnJheTxDb25kaXRpb25DaGFuZ2U+IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIF9tdG5hRm9ybTogRm9ybSB8IHVuZGVmaW5lZDtcbiAgcHJvdGVjdGVkIF9tdG5hUHJvZ3Jlc3NpdmVGb3JtOiBQcm9ncmVzc2l2ZUZvcm0gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgc3RyZWFtIG9mIE10bmFGb3JtIGNoYW5nZXMuIFVzZWQgdG8gaW5mb3JtIGEgc3Vic2NyaWJlciB0aGF0IGFuIE10bmFGb3JtIGhhcyBiZWVuIGNoYW5nZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8TXRuYUZvcm0+IHRvIHdoaWNoIGEgY2FsbGVyIGNhbiBzdWJzY3JpYmVcbiAgICovXG4gIGdldCBmb3JtQ2hhbmdlcygpOiBPYnNlcnZhYmxlPEZvcm0+IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ2hhbmdlJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBhcGlTZXJ2aWNlOiBNdG5hV2ZBcGlTZXJ2aWNlLCBwcm90ZWN0ZWQgbmdGb3JtU2VydmljZTogTXRuYVdmTmdGb3JtU2VydmljZSwgcHJvdGVjdGVkIHVpU2VydmljZTogTXRuYVdmVUlTZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBBZGRzIG9yIHJlbW92ZXMgYSBGb3JtSXRlbSBmcm9tIHRoZSBmb3JtICYgbW9kaWZpZXMgb3RoZXIgYWZmZWN0ZWQgRm9ybUl0ZW1zXG4gICAqIEBwYXJhbSBjaGFuZ2UgTXRuYVdmRm9ybUl0ZW1DaGFuZ2VcbiAgICovXG4gIGNoYW5nZU10bmFGb3JtSXRlbShjaGFuZ2U6IE10bmFXZkZvcm1JdGVtQ2hhbmdlKSB7XG4gICAgaWYgKCF0aGlzLl9tdG5hRm9ybSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2UuYWN0aW9uVHlwZSA9PT0gJ1JFTU9WRScpIHtcbiAgICAgIC8vIHJlbW92ZSB0aGUgcmVwZWF0YWJsZSBpdGVtIGZyb20gdGhlIG10bmFmb3JtXG4gICAgICBsZXQgbmV3Rm9ybSA9IHRoaXMuX21vZGlmeUZvcm1JdGVtKHRoaXMuX210bmFGb3JtLCBjaGFuZ2UpIGFzIEZvcm07XG4gICAgICAvLyBtb2RpZnkgdGhlIGNvbmRpdGlvbnMgb2YgYWxsIGVmZmVjdGVkIGZvcm0gaXRlbXNcbiAgICAgIG5ld0Zvcm0gPSB0aGlzLl9tb2RpZnlGb3JtSXRlbUNvbmRpdGlvbnMobmV3Rm9ybSwgY2hhbmdlKTtcblxuICAgICAgdGhpcy5uZ0Zvcm1TZXJ2aWNlLnJlbW92ZUNvbnRyb2woY2hhbmdlLmlkLCBjaGFuZ2UucGFyZW50SWRzKTtcbiAgICAgIHRoaXMuZm9ybUNoYW5nZSQubmV4dChuZXdGb3JtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcGlTZXJ2aWNlXG4gICAgICAgIC5nZXRSZXBlYXRhYmxlSXRlbSh0aGlzLl9tdG5hRm9ybS50ZW1wbGF0ZUlkLCBjaGFuZ2UudGVtcGxhdGVJZClcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgLnN1YnNjcmliZSgobmV3SXRlbTogRm9ybUl0ZW1JbXBsPHVua25vd24+KSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3Rm9ybUNvbnRyb2wgPSB0aGlzLnNlcmlhbGl6ZU10bmFGb3JtSXRlbShuZXdJdGVtKTtcbiAgICAgICAgICBpZiAobmV3Rm9ybUNvbnRyb2wgJiYgdGhpcy5fbXRuYUZvcm0pIHtcbiAgICAgICAgICAgIHRoaXMubmdGb3JtU2VydmljZS5hZGRDb250cm9sKG5ld0l0ZW0uaW5zdGFuY2VJZCwgY2hhbmdlLnBhcmVudElkcywgbmV3Rm9ybUNvbnRyb2wpO1xuICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXcgcmVwZWF0YWJsZSBpdGVtIGludG8gdGhlIG10bmFmb3JtXG4gICAgICAgICAgICBsZXQgbmV3Rm9ybSA9IHRoaXMuX21vZGlmeUZvcm1JdGVtKFxuICAgICAgICAgICAgICB0aGlzLl9tdG5hRm9ybSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC4uLmNoYW5nZSxcbiAgICAgICAgICAgICAgICBpZDogbmV3SXRlbS5pbnN0YW5jZUlkLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBuZXdJdGVtXG4gICAgICAgICAgICApIGFzIEZvcm07XG5cbiAgICAgICAgICAgIC8vIEdlbmVyYXRlIGEgbGlzdCBvZiBhbGwgZm9ybWl0ZW0gY29uZGl0aW9ucyBuZWVkaW5nIGNoYW5nZSAmIG1vZGlmeSB0aG9zZSBpdGVtcyBpbiB0aGUgZm9ybVxuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uQ2hhbmdlcyA9IHRoaXMuZ2VuZXJhdGVDb25kaXRpb25DaGFuZ2VBcnJheShuZXdJdGVtLCAnQUREJyk7XG4gICAgICAgICAgICBuZXdGb3JtID0gdGhpcy5fbW9kaWZ5Rm9ybUl0ZW1Db25kaXRpb25zKG5ld0Zvcm0sIHsgLi4uY2hhbmdlLCBjb25kaXRpb25DaGFuZ2VzIH0pO1xuICAgICAgICAgICAgdGhpcy5pdGVtVG9nZ2xlUXVlID0gY29uZGl0aW9uQ2hhbmdlcztcbiAgICAgICAgICAgIC8vIGVtaXQgdGhlIG5ldyBtdG5hZm9ybVxuICAgICAgICAgICAgdGhpcy5mb3JtQ2hhbmdlJC5uZXh0KG5ld0Zvcm0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBDb25kaXRpb25DaGFuZ2UgYXJyYXkgZm9yIGl0ZW1zIGV4aXN0aW5nIGluIHRoZSA8aXRlbT4gd2hpY2ggZW5hYmxlL2Rpc2FibGUgRm9ybUl0ZW1zIG91dHNpZGUgdGhlIDxpdGVtPidzIHNjb3BlLlxuICAgKiBAcGFyYW0gaXRlbSBGb3JtSXRlbSB0aGF0IGVmZmVjdHMgdGhlIGNvbmRpdGlvbiBvZiBvdGhlciBGb3JtSXRlbXNcbiAgICogQHBhcmFtIGFjdGlvbiBXaGV0aGVyIHRoaXMgaXRlbSB3YXMgYWRkZWQgKEFERCksIG9yIHJlbW92ZWQgKFJFTU9WRSlcbiAgICogQHJldHVybnMgQXJyYXk8Q29uZGl0aW9uQ2hhbmdlPlxuICAgKi9cbiAgZ2VuZXJhdGVDb25kaXRpb25DaGFuZ2VBcnJheShpdGVtOiBGb3JtSXRlbSwgYWN0aW9uPzogTXRuYVdmRm9ybUl0ZW1DaGFuZ2VBY3Rpb24pOiBBcnJheTxDb25kaXRpb25DaGFuZ2U+IHtcbiAgICBjb25zdCBpbnRlcm5hbE1hcCA9IHt9O1xuICAgIHRoaXMuX2J1aWxkSW50ZXJuYWxJZHNNYXAoaXRlbSwgaW50ZXJuYWxNYXApO1xuICAgIGNvbnN0IGNvbmRpdGlvbkNoYW5nZXMgPSBuZXcgQXJyYXk8Q29uZGl0aW9uQ2hhbmdlPigpO1xuICAgIHRoaXMuX2J1aWxkQ29uZGl0aW9uQ2hhbmdlQXJyYXkoaXRlbSwgY29uZGl0aW9uQ2hhbmdlcywgaW50ZXJuYWxNYXAsIGFjdGlvbik7XG4gICAgcmV0dXJuIGNvbmRpdGlvbkNoYW5nZXM7XG4gIH1cblxuICAvKiogQHJldHVybnMgVGhlIHRvcCBsZXZlbCB2YWxpZGF0aW9uIHJlc3VsdHMgKHVzdWFsbHkgdGhlIGVycm9ycyksIGtleWVkIG9uIElELiAqL1xuICBnZXRGb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzKCk6IFJlY29yZDxzdHJpbmcsIEZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLl9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBuZXcgTXRuYUZvcm0gdXNpbmcgdGhlIE10bmFGb3JtICYgcmVhY2l2ZSBmb3JtIHZhbHVlcyBmcm9tIHRoZSBNdG5hV2ZOZ0Zvcm1TZXJ2aWNlJ3MgaW50ZXJuYWwgZm9ybS5cbiAgICpcbiAgICogQHBhcmFtIG5nRm9ybVZhbHVlcyBKU09OIG9iamVjdCBvZiBuZ0Zvcm1WYWx1ZXNcbiAgICogQHJldHVybnNcbiAgICovXG4gIHVwZGF0ZUZvcm0obmdGb3JtVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IEZvcm0ge1xuICAgIGNvbnN0IGN1cnJlbnRGb3JtID0gdGhpcy5uZ0Zvcm1TZXJ2aWNlLmdldEZvcm1WYWx1ZSgpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5jdXJyZW50Rm9ybSxcbiAgICAgIGl0ZW1zOiBNdG5hV2ZTZXJpYWxpemVyLmluc2VydEZvcm1JdGVtVmFsdWVzKFxuICAgICAgICBjdXJyZW50Rm9ybSxcbiAgICAgICAgbmdGb3JtVmFsdWVzLFxuICAgICAgICB0aGlzLnVpU2VydmljZS5nZXREaXNhYmxlZFN0YXRlcygpLFxuICAgICAgICB0aGlzLmR5bmFtaWNGb3JtQ29uZGl0aW9uYWwsXG4gICAgICAgIHRoaXMuZHluYW1pY1dlYkZvcm1JdGVtQnVpbGRlclxuICAgICAgKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBuZXcgTXRuYUZvcm0gdXNpbmcgdGhlIHByZXZpb3VzIE10bmFGb3JtICYgcmVhY3RpdmUgZm9ybSB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBtdG5hRm9ybSBNdG5hRm9ybSByZXF1aXJpbmcgdmFsdWUgaW5zZXJ0aW9uXG4gICAqIEBwYXJhbSBuZ0Zvcm1WYWx1ZXMgSlNPTiBvYmplY3Qgb2YgIG5nRm9ybSB2YWx1ZXNcbiAgICogQHJldHVybnMgbmV3IE10bmFGb3JtXG4gICAqL1xuICBpbnNlcnROZXdWYWx1ZXMobXRuYUZvcm06IEZvcm0sIG5nRm9ybVZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBGb3JtIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ubXRuYUZvcm0sXG4gICAgICBpdGVtczogTXRuYVdmU2VyaWFsaXplci5pbnNlcnRGb3JtSXRlbVZhbHVlcyhcbiAgICAgICAgbXRuYUZvcm0sXG4gICAgICAgIG5nRm9ybVZhbHVlcyxcbiAgICAgICAgdGhpcy51aVNlcnZpY2UuZ2V0RGlzYWJsZWRTdGF0ZXMoKSxcbiAgICAgICAgdGhpcy5keW5hbWljRm9ybUNvbmRpdGlvbmFsLFxuICAgICAgICB0aGlzLmR5bmFtaWNXZWJGb3JtSXRlbUJ1aWxkZXJcbiAgICAgICksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemVzIGEgRm9ybSB8IEZvcm1JdGVtIGludG8gRm9ybUNvbnRyb2wocylcbiAgICpcbiAgICogQHBhcmFtIGl0ZW0gRm9ybSB8IEZvcm1JdGVtIHJlcXVpcmluZyBzZXJpYWxpemF0aW9uXG4gICAqIEByZXR1cm5zIEZvcm1Hcm91cCB8IEZvcm1Db250cm9sXG4gICAqL1xuICBzZXJpYWxpemVNdG5hRm9ybUl0ZW0oaXRlbTogRm9ybSB8IEZvcm1JdGVtSW1wbDx1bmtub3duPik6IEFic3RyYWN0Q29udHJvbCB8IG51bGwge1xuICAgIHJldHVybiBNdG5hV2ZTZXJpYWxpemVyLmRldGVybWluZVNlcmlhbGl6ZUZ1bmN0aW9uVG9Vc2UoXG4gICAgICBpdGVtLFxuICAgICAgdGhpcyxcbiAgICAgIHRoaXMuZHluYW1pY0Zvcm1Db25kaXRpb25hbCxcbiAgICAgIHRoaXMuZHluYW1pY1JlYWN0aXZlRm9ybUNvbnRyb2xCdWlsZGVyXG4gICAgKTtcbiAgfVxuXG4gIC8vI3JlZ2lvbiBDdXN0b20gQ29tcG9uZW50L0Z1bmN0aW9uIFJlZ2lzdHJhdGlvblxuICBnZXREeW5hbWljQ29tcG9uZW50KGlkOiBzdHJpbmcpOiBUeXBlPEJhc2VGb3JtSXRlbT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudHMuZ2V0KGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBtYXAgb2YgY29tcG9uZW50cyB0byBiZSBkeW5hbWljYWxseSByZW5kZXJlZCBpbnNpZGUgYW4gTXRuYUZvcm0uXG4gICAqXG4gICAqIEBwYXJhbSBjb21wb25lbnRzIHRoZSBtYXAgb2YgY29tcG9uZW50cyB0aGF0IGEgVmFsdWVJdGVtIHdpbGwgdXNlIGZvciByZW5kZXJpbmdcbiAgICogQHByb3Agc3RyaW5nIC0gdGhlIHR5cGUoaXRlbUlkIHN1ZmZpeCkgb2YgY29tcG9uZW50LCB1c2VkIGZvciByZXRyaWV2YWxcbiAgICogQHByb3AgVHlwZSAtIHRoZSBjb21wb25lbnQgdG8gYmUgcmVuZGVyZWQsIGFuIGV4dGVuc2lvbiBvZiBCYXNlRm9ybUl0ZW1cbiAgICovXG4gIHJlZ2lzdGVyRHluYW1pY0NvbXBvbmVudHMoY29tcG9uZW50czogTWFwPHN0cmluZywgVHlwZTxCYXNlRm9ybUl0ZW0+Pikge1xuICAgIHRoaXMuY29tcG9uZW50cyA9IGNvbXBvbmVudHM7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhbiBNdG5hRm9ybSBvbiB0aGUgc2VydmljZVxuICAgKiBAcGFyYW0gZm9ybSBNdG5hRm9ybSB0byBiZSB1c2VkIGZvciBpbnRlcm5hbCBtb2RpZmljYXRpb25cbiAgICovXG4gIHNldE10bmFGb3JtKGZvcm06IEZvcm0pIHtcbiAgICB0aGlzLl9tdG5hRm9ybSA9IHsgLi4uZm9ybSB9O1xuICAgIGlmICghIXRoaXMuaXRlbVRvZ2dsZVF1ZSAmJiAhIXRoaXMuaXRlbVRvZ2dsZVF1ZS5sZW5ndGgpIHtcbiAgICAgIC8vIFRoZSBmb3JtIG5lZWRzIHRpbWUgdG8gcmVyZW5kZXIsIHNvIHdlIHB1c2ggdGhpcyBsb29wIHRvIHRoZSBlbmQgb2YgdGhlIHN0YWNrXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXRlbVRvZ2dsZVF1ZSkge1xuICAgICAgICAgIGZvciAoY29uc3QgY2hhbmdlIG9mIHRoaXMuaXRlbVRvZ2dsZVF1ZSkge1xuICAgICAgICAgICAgdGhpcy51aVNlcnZpY2UudG9nZ2xlRm9ybUl0ZW1zKGNoYW5nZS5lbmFibGVkSXRlbXMsIGNoYW5nZS5kaXNhYmxlZEl0ZW1zLCAhIWNoYW5nZS5lbmFibGUsIGNoYW5nZS5lbmFibGVySWQsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLml0ZW1Ub2dnbGVRdWUgPSBudWxsO1xuICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgLy8gS2VlcCB0cmFjayBvZiBhbnkgZXJyb3JzIGNvbWluZyBmcm9tIHRoZSBzZXJ2ZXIgYW5kIHJldmFsaWRhdGUgdGhvc2UgY29udHJvbHNcbiAgICB0aGlzLl91cGRhdGVTZXJ2ZXJTaWRlRXJyb3JzKCk7XG4gIH1cblxuICAvKipcbiAgICogQW55IEZvcm1TZXJ2aWNlIGV4dGVuc2lvbiBjbGFzcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRob2QgaW4gb3JkZXIgdG8gY2FsbCB0aGVcbiAgICogZHluYW1pY1dlYkZvcm1JdGVtQnVpbGRlci9keW5hbWljUmVhY3RpdmVGb3JtQ29udHJvbEJ1aWxkZXIgbWV0aG9kcy4gRHVyaW5nIHdlYiBmb3JtIGdlbmVyYXRpb24sIHRoaXMgbWV0aG9kIGlzIGNoZWNrZWQgJlxuICAgKiB0aGUgY3VycmVudCBGb3JtSXRlbSBpcyBwYXNzZWQgaW4sIHdoaWNoIGNhbiBiZSB1c2VkIGJ5IHRoZSBvdmVycmlkaW5nIG1ldGhvZC5cbiAgICpcbiAgICogQGV4YW1wbGUgZHluYW1pY0Zvcm1Db25kaXRpb25hbCA9IChpdGVtOiBGb3JtSXRlbSkgPT4gaXRlbS5pdGVtSWQuaW5jbHVkZXMoe3NvbWUgaXRlbUlkfSlcbiAgICpcbiAgICovXG4gIHByb3RlY3RlZCBkeW5hbWljRm9ybUNvbmRpdGlvbmFsOiAoaXRlbTogRm9ybUl0ZW0pID0+IGJvb2xlYW4gPSAoKSA9PiBmYWxzZTtcblxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gYmUgb3ZlcnJpZGRlbiBieSBleHRlbmRlZCBzZXJ2aWNlIGluIG9yZGVyIHRvIGhhbmRsZSBmb3JtIGdlbmVyYXRpb24gZm9yIGFueSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBkeW5hbWljIGZvcm0gY29tcG9uZW50cy5cbiAgICogU2hvdWxkIHJldHVybiBhIG5ldyBWYWx1ZUl0ZW08YW55Pi5cbiAgICogU3RlcCAzXG4gICAqXG4gICAqIEBleGFtcGxlIGR5bmFtaWNXZWJGb3JtSXRlbUJ1aWxkZXIoc2VjdGlvbjogU2VjdGlvbiB8IEZvcm0sIGl0ZW06IEZvcm1JdGVtLCBuZ0Zvcm1WYWx1ZTogYW55KTogVmFsdWVJdGVtIHtcbiAgICogY29uc3QgbmV3VmFsdWUgPSB0aGlzLmdlbmVyYXRlTmV3VmFsdWUoaXRlbSwgcmZWYWx1ZSwgc2VjdGlvbik7XG4gICAqIHJldHVybiB7IC4uLml0ZW0sIC4uLm5ld1ZhbHVlIH1cbiAgICogfVxuICAgKiBAcGFyYW0gc2VjdGlvbiB0aGUgY3VycmVudCBGb3JtU2VjdGlvblxuICAgKiBAcGFyYW0gaXRlbSB0aGUgY3VycmVudCBGb3JtSXRlbVxuICAgKiBAcGFyYW0gbmdGb3JtVmFsdWUgdGhlIG5nRm9ybSBKU09OIHZhbHVlXG4gICAqIEByZXR1cm5zIGEgbmV3IFZhbHVlSXRlbVxuICAgKi9cbiAgcHJvdGVjdGVkIGR5bmFtaWNXZWJGb3JtSXRlbUJ1aWxkZXIoXG4gICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG4gICAgc2VjdGlvbjogRm9ybSB8IEZvcm1JdGVtR3JvdXAgfCBSZXBlYXRhYmxlSXRlbSB8IHVuZGVmaW5lZCxcbiAgICBpdGVtOiBGb3JtSXRlbSxcbiAgICBuZ0Zvcm1WYWx1ZTogdW5rbm93bixcbiAgICBkaXNhYmxlZFN0YXRlPzogeyBbaW5zdGFuY2VJZDogc3RyaW5nXTogYm9vbGVhbiB9XG4gICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbiAgKTogVmFsdWVJdGVtPHVua25vd24+IHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gYmUgb3ZlcnJpZGRlbiBieSBleHRlbmRlZCBzZXJ2aWNlIGluIG9yZGVyIHRvIGhhbmRsZSByZWFjdGl2ZSBmb3JtIGdlbmVyYXRpb25cbiAgICogZm9yIGFueSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBkeW5hbWljIGZvcm0gY29tcG9uZW50cy5cbiAgICogU2hvdWxkIHJldHVybiBGb3JtQ29udHJvbCB8IEZvcm1Hcm91cC5cbiAgICpcbiAgICogQGV4YW1wbGUgZHluYW1pY1JlYWN0aXZlRm9ybUNvbnRyb2xCdWlsZGVyKGl0ZW06IEZvcm1JdGVtKSB7XG4gICAqIHJldHVybiB0aGlzLmJ1aWxkRm9ybUNvbnRyb2xGb3JEeW5hbWljQ29tcG9uZW50KGl0ZW06IEZvcm1JdGVtKTtcbiAgICogfVxuICAgKiBAcGFyYW0gaXRlbSBGb3JtSXRlbSB1c2VkIHRvIGdlbmVyYXRlIGZvcm0gY29udHJvbHNcbiAgICogQHJldHVybnMgRm9ybUNvbnRyb2wgfCBGb3JtR3JvdXBcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgcHJvdGVjdGVkIGR5bmFtaWNSZWFjdGl2ZUZvcm1Db250cm9sQnVpbGRlcihpdGVtOiBGb3JtSXRlbSk6IEFic3RyYWN0Q29udHJvbCB8IG51bGwge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG5cbiAgLy8jcmVnaW9uIElOVEVSTkFMIE1FVEhPRFNcbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlcyBhIEZvcm0gdG8gaW5zZXJ0IG9yIHJlbW92ZSBhIGRlc2lnbmF0ZWQgRm9ybUl0ZW0uXG4gICAqIEBwYXJhbSBpdGVtIE10bmFGb3JtIHRvIHNlYXJjaCB0aHJvdWdoXG4gICAqIEBwYXJhbSBjaGFuZ2U6IE10bmFXZkZvcm1JdGVtQ2hhbmdlIGZvciBhZGRpbmcgb3IgcmVtb3ZpbmcgYSBGb3JtSXRlbVxuICAgKiBAcGFyYW0gbmV3SXRlbSBGb3JtSXRlbSB0byBhZGQgdG8gaXRzIHBhcmVudFxuICAgKi9cbiAgcHJvdGVjdGVkIF9tb2RpZnlGb3JtSXRlbTxJIGV4dGVuZHMgRm9ybSB8IFNlY3Rpb24gfCBGb3JtSXRlbSB8IEZvcm1JdGVtSW1wbDx1bmtub3duPj4oXG4gICAgaXRlbTogSSxcbiAgICBjaGFuZ2U6IE10bmFXZkZvcm1JdGVtQ2hhbmdlLFxuICAgIG5ld0l0ZW0/OiBGb3JtSXRlbVxuICApOiBGb3JtIHwgU2VjdGlvbiB8IEZvcm1JdGVtIHwgRm9ybUl0ZW1JbXBsPHVua25vd24+IHtcbiAgICBpZiAoIWNoYW5nZS5wYXJlbnRJZHMubGVuZ3RoKSB7XG4gICAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSByZWFjaCB0aGUgUGFyZW50IEZvcm1JdGVtXG4gICAgICBpZiAoY2hhbmdlLmFjdGlvblR5cGUgPT09ICdSRVBMQUNFJykge1xuICAgICAgICBpZiAoJ2l0ZW1zJyBpbiBpdGVtKSB7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBpdGVtLml0ZW1zLmZpbmRJbmRleCgoaSkgPT4gaS5pbnN0YW5jZUlkID09PSBuZXdJdGVtPy5pbnN0YW5jZUlkKTtcbiAgICAgICAgICBjb25zdCBuZXdJdGVtcyA9IFsuLi5pdGVtLml0ZW1zXTtcbiAgICAgICAgICBpZiAobmV3SXRlbSkge1xuICAgICAgICAgICAgbmV3SXRlbXMuc3BsaWNlKGluZGV4LCAxLCBuZXdJdGVtKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSwgaXRlbXM6IG5ld0l0ZW1zIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9IGVsc2UgaWYgKGlzUmVwZWF0YWJsZUl0ZW0oaXRlbSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgIGl0ZW1zOiBjaGFuZ2UuYWN0aW9uVHlwZSA9PT0gJ0FERCcgPyBpdGVtLml0ZW1zLmNvbmNhdChuZXdJdGVtIHx8IFtdKSA6IGl0ZW0uaXRlbXMuZmlsdGVyKChpKSA9PiBpLmluc3RhbmNlSWQgIT09IGNoYW5nZS5pZCksXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNGb3JtKGl0ZW0pIHx8IGlzU2VjdGlvbihpdGVtKSB8fCBpc0Zvcm1JdGVtR3JvdXBJbXBsKGl0ZW0pIHx8IGlzUmVwZWF0YWJsZUl0ZW0oaXRlbSkpIHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gWy4uLml0ZW0uaXRlbXNdO1xuICAgICAgY29uc3QgaW5kZXhUb01vZGlmeSA9IGl0ZW0uaXRlbXMuZmluZEluZGV4KChpKSA9PiBpLmluc3RhbmNlSWQgPT09IGNoYW5nZS5wYXJlbnRJZHNbMF0pO1xuICAgICAgY29uc3QgaXRlbVRvTW9kaWZ5ID0gaXRlbS5pdGVtc1tpbmRleFRvTW9kaWZ5XSBhcyBQYXJlbnRJdGVtVW5pb247XG5cbiAgICAgIGl0ZW1zLnNwbGljZShcbiAgICAgICAgaW5kZXhUb01vZGlmeSxcbiAgICAgICAgMSxcbiAgICAgICAgdGhpcy5fbW9kaWZ5Rm9ybUl0ZW0oXG4gICAgICAgICAgaXRlbVRvTW9kaWZ5LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLmNoYW5nZSxcbiAgICAgICAgICAgIHBhcmVudElkczogY2hhbmdlLnBhcmVudElkcy5zbGljZSgxKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5ld0l0ZW1cbiAgICAgICAgKSBhcyBGb3JtSXRlbVxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLml0ZW0sXG4gICAgICAgIGl0ZW1zLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGlzVGFibGVJdGVtKGl0ZW0pKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbW9kaWZ5VGFibGVJdGVtKGl0ZW0gYXMgVGFibGVJdGVtLCBjaGFuZ2UsIG5ld0l0ZW0pO1xuICAgIH0gZWxzZSBpZiAoaXNPcHRpb25JdGVtSW1wbChpdGVtKSB8fCBpc09wdGlvbkdyb3VwSXRlbUltcGwoaXRlbSkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tb2RpZnlPcHRpb25JdGVtKFxuICAgICAgICBpdGVtIGFzIE9wdGlvbkl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPiwgdW5rbm93bj4gfCBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj4sXG4gICAgICAgIGNoYW5nZSxcbiAgICAgICAgbmV3SXRlbVxuICAgICAgKVswXTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cblxuICAvKipcbiAgICogVHJhdmVyc2VzIGFuIE9wdGlvbkl0ZW1NYXAgb2YgYSBGb3JtSXRlbSB0byBpbnNlcnQgb3IgcmVtb3ZlIGEgZGVzaWduYXRlZCBGb3JtSXRlbVxuICAgKiBAcGFyYW0gb3B0aW9uSXRlbSBGb3JtSXRlbSB3aXRoIGFuIG9wdGlvbkl0ZW1NYXAsIGUuZy4gT3B0aW9uSXRlbUltcGwgfCBPcHRpb25Hcm91cEl0ZW1JbXBsXG4gICAqIEBwYXJhbSBjaGFuZ2UgTXRuYVdmRm9ybUl0ZW1DaGFuZ2UgZm9yIGFkZGluZyBvciByZW1vdmluZyBhIEZvcm1JdGVtXG4gICAqIEBwYXJhbSBuZXdJdGVtIEZvcm1JdGVtIHRvIGJlIGFkZGVkIHRvIGl0cyBwYXJlbnRcbiAgICogQHJldHVybnMgRm9ybUl0ZW0gd2l0aCBhbiBvcHRpb25JdGVtTWFwIGNvbnRhaW5pbmcgRm9ybUl0ZW1zXG4gICAqL1xuICBwcml2YXRlIF9tb2RpZnlPcHRpb25JdGVtKFxuICAgIG9wdGlvbkl0ZW06IE9wdGlvbkl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPiwgdW5rbm93bj4gfCBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj4sXG4gICAgY2hhbmdlOiBNdG5hV2ZGb3JtSXRlbUNoYW5nZSxcbiAgICBuZXdJdGVtPzogRm9ybUl0ZW1cbiAgKTogW09wdGlvbkl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPiwgdW5rbm93bj4gfCBPcHRpb25Hcm91cEl0ZW1JbXBsPE9wdGlvbjx1bmtub3duPj4sIGJvb2xlYW5dIHtcbiAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICBjb25zdCBvcHRpb25JdGVtTWFwOiB7IFtpZDogc3RyaW5nXTogRm9ybUl0ZW0gfSA9IHt9O1xuICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgbWFwIGFuZCBzZXQgdGhlIGl0ZW1zIHRvIGEgbmV3IG1hcFxuICAgIC8vIENoZWNrIGlmIGFueSBGb3JtSXRlbSBpbiB0aGUgbWFwIG1hdGNoZXMgdGhlIG5leHQgcGFyZW50IElEXG4gICAgZm9yIChjb25zdCBpZCBpbiBvcHRpb25JdGVtLm9wdGlvbkl0ZW1NYXApIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9uSXRlbS5vcHRpb25JdGVtTWFwLCBpZCkpIHtcbiAgICAgICAgLy8gSWYgb25lIG1hdGNoZXMsIG1vZGlmeSAmIHNldCBpdCBvbiB0aGUgbmV3IG1hcFxuICAgICAgICBpZiAob3B0aW9uSXRlbS5vcHRpb25JdGVtTWFwW2lkXS5pbnN0YW5jZUlkID09PSBjaGFuZ2UucGFyZW50SWRzWzBdKSB7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIG9wdGlvbkl0ZW1NYXBbaWRdID0gdGhpcy5fbW9kaWZ5Rm9ybUl0ZW0oXG4gICAgICAgICAgICBvcHRpb25JdGVtLm9wdGlvbkl0ZW1NYXBbaWRdIGFzIFBhcmVudEl0ZW1VbmlvbixcbiAgICAgICAgICAgIHsgLi4uY2hhbmdlLCBwYXJlbnRJZHM6IGNoYW5nZS5wYXJlbnRJZHMuc2xpY2UoMSkgfSxcbiAgICAgICAgICAgIG5ld0l0ZW1cbiAgICAgICAgICApIGFzIEZvcm1JdGVtO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbkl0ZW1NYXBbaWRdID0gb3B0aW9uSXRlbS5vcHRpb25JdGVtTWFwW2lkXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyByZXR1cm4gdGhlIGl0ZW0gd2l0aCBpdHMgbmV3IG9wdGlvbkl0ZW1NYXAsICYgd2hldGhlciB3ZSBmb3VuZCB0aGUgbWF0Y2hpbmcgaXRlbVxuICAgIHJldHVybiBbeyAuLi5vcHRpb25JdGVtLCBvcHRpb25JdGVtTWFwIH0sIGZvdW5kXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmF2ZXJzZXMgdGFibGUgcm93cyB0byBpbnNlcnQgb3IgcmVtb3ZlIGEgRm9ybUl0ZW1cbiAgICogQHBhcmFtIHRhYmxlSXRlbSBUYWJsZUl0ZW0gdG8gdHJhdmVyc2VcbiAgICogQHBhcmFtIGNoYW5nZSBNdG5hV2ZGb3JtSXRlbUNoYW5nZSBmb3IgYWRkaW5nIG9yIHJlbW92aW5nIGEgRm9ybUl0ZW1cbiAgICogQHBhcmFtIG5ld0l0ZW0gRm9ybUl0ZW0gdG8gYmUgYWRkZWQgdG8gaXRzIHBhcmVudFxuICAgKiBAcmV0dXJucyBUYWJsZUl0ZW0gd2l0aCBhIEZvcm1JdGVtIGFkZGVkIG9yIHJlbW92ZWRcbiAgICovXG4gIHByaXZhdGUgX21vZGlmeVRhYmxlSXRlbSh0YWJsZUl0ZW06IFRhYmxlSXRlbSwgY2hhbmdlOiBNdG5hV2ZGb3JtSXRlbUNoYW5nZSwgbmV3SXRlbT86IEZvcm1JdGVtKTogVGFibGVJdGVtIHtcbiAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAvLyBNYXAgdGhlIHRhYmxlIHJvd3MgdG8gZmluZCB0aGUgRm9ybUl0ZW0gd2l0aCBtYXRjaGluZyBpbnN0YW5jZUlkXG4gICAgY29uc3QgdGFibGVSb3dzOiBUYWJsZVJvd0l0ZW1bXSA9IHRhYmxlSXRlbS50YWJsZVJvd3MubWFwKChyb3c6IFRhYmxlUm93SXRlbSkgPT4ge1xuICAgICAgLy8gSWYgdGhlIGl0ZW0gd2FzIGZvdW5kLCBza2lwIG1hcHBpbmcgZnVydGhlciByb3dzXG4gICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucm93LFxuICAgICAgICAgIGl0ZW1zOiByb3cuaXRlbXMubWFwKChyb3dJdGVtOiBGb3JtSXRlbSkgPT4ge1xuICAgICAgICAgICAgLy8gSWYgd2UgZm91bmQgdGhlIG5leHQgbWF0Y2hpbmcgRm9ybUl0ZW0sIHRvZ2dsZSAnZm91bmQnLCBhbmQgcmV0dXJuIHRoZSBtb2RpZmllZCBGb3JtSXRlbVxuICAgICAgICAgICAgaWYgKCEhcm93SXRlbSAmJiByb3dJdGVtLmluc3RhbmNlSWQgPT09IGNoYW5nZS5wYXJlbnRJZHNbMF0pIHtcbiAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9kaWZ5Rm9ybUl0ZW0oXG4gICAgICAgICAgICAgICAgcm93SXRlbSBhcyBQYXJlbnRJdGVtVW5pb24sXG4gICAgICAgICAgICAgICAgeyAuLi5jaGFuZ2UsIHBhcmVudElkczogY2hhbmdlLnBhcmVudElkcy5zbGljZSgxKSB9LFxuICAgICAgICAgICAgICAgIG5ld0l0ZW1cbiAgICAgICAgICAgICAgKSBhcyBGb3JtSXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHRoZSBGb3JtSXRlbSBpbnN0YW5jZUlkIGRvZXNuJ3QgbWF0Y2gsIGJ1dCBpdCBoYXMgRm9ybUl0ZW1zIGluIGl0cyAnb3B0aW9uSXRlbU1hcCcsXG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIGEgbWF0Y2hpbmcgRm9ybUl0ZW0gZXhpc3RzIGluIGl0cyBtYXBcbiAgICAgICAgICAgIGlmICgnb3B0aW9uSXRlbU1hcCcgaW4gcm93SXRlbSkge1xuICAgICAgICAgICAgICBjb25zdCByZXR1cm5lZCA9IHRoaXMuX21vZGlmeU9wdGlvbkl0ZW0oXG4gICAgICAgICAgICAgICAgcm93SXRlbSBhcyBPcHRpb25JdGVtSW1wbDxPcHRpb248dW5rbm93bj4sIHVua25vd24+IHwgT3B0aW9uR3JvdXBJdGVtSW1wbDxPcHRpb248dW5rbm93bj4+LFxuICAgICAgICAgICAgICAgIGNoYW5nZSxcbiAgICAgICAgICAgICAgICBuZXdJdGVtXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGZvdW5kID0gcmV0dXJuZWRbMV07XG4gICAgICAgICAgICAgIHJldHVybiByZXR1cm5lZFswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByb3dJdGVtO1xuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJvdztcbiAgICB9KTtcbiAgICByZXR1cm4geyAuLi50YWJsZUl0ZW0sIHRhYmxlUm93cyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgb3IgcmVtb3ZlcyBpbnN0YW5jZUlkcyBmcm9tIHRoZSAnaXRlbUlkcycgaW4gYSBGb3JtSXRlbSdzIGNvbmRpdGlvblxuICAgKiBAcGFyYW0gZm9ybSBNdG5hRm9ybSB0byBzZWFyY2ggdGhyb3VnaCAmIHJlcGxhY2UgZm9ybWl0ZW1zIHdpdGggdGhlIG5ldyBjb25kaXRpb25cbiAgICogQHBhcmFtIGNoYW5nZSBUaGUgY2hhbmdlIHRoYXQgcmVjZW50bHkgb2NjdXJyZWQgaW4gdGhlIG10bmFGb3JtXG4gICAqL1xuICBwcml2YXRlIF9tb2RpZnlGb3JtSXRlbUNvbmRpdGlvbnMoZm9ybTogRm9ybSwgY2hhbmdlOiBNdG5hV2ZGb3JtSXRlbUNoYW5nZSk6IEZvcm0ge1xuICAgIGxldCBuZXdGb3JtID0gZm9ybTtcbiAgICBpZiAoY2hhbmdlLmNvbmRpdGlvbkNoYW5nZXMpIHtcbiAgICAgIGNvbnN0IGZvcm1JdGVtczogeyBba2V5OiBzdHJpbmddOiBGb3JtSXRlbSB8IENvbmRpdGlvbmFsSXRlbSB9ID0ge307XG4gICAgICBmb3IgKGNvbnN0IGNjIG9mIGNoYW5nZS5jb25kaXRpb25DaGFuZ2VzKSB7XG4gICAgICAgIGZvciAoY29uc3QgdG9nZ2xlZElkIG9mIFsuLi5jYy5lbmFibGVkSXRlbXMsIC4uLmNjLmRpc2FibGVkSXRlbXNdKSB7XG4gICAgICAgICAgbGV0IGZvcm1JdGVtID0gZm9ybUl0ZW1zW3RvZ2dsZWRJZF07XG4gICAgICAgICAgY29uc3QgZm9ybUl0ZW1Db21wb25lbnQgPSB0aGlzLnVpU2VydmljZS5nZXRJdGVtKHRvZ2dsZWRJZCk7XG4gICAgICAgICAgaWYgKCFmb3JtSXRlbSAmJiBmb3JtSXRlbUNvbXBvbmVudD8uaXRlbSkge1xuICAgICAgICAgICAgZm9ybUl0ZW0gPSBmb3JtSXRlbUNvbXBvbmVudD8uaXRlbTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzQ29uZGl0aW9uYWxJdGVtKGZvcm1JdGVtKSAmJiBmb3JtSXRlbS5jb25kaXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1Db25kaXRpb25JdGVtSWRzID0gZm9ybUl0ZW0uY29uZGl0aW9uLml0ZW1JZHMgfHwgW107XG4gICAgICAgICAgICBjb25zdCBpdGVtSWRzID1cbiAgICAgICAgICAgICAgY2hhbmdlLmFjdGlvblR5cGUgPT09ICdBREQnXG4gICAgICAgICAgICAgICAgPyBbLi4uaXRlbUNvbmRpdGlvbkl0ZW1JZHMsIGNjLmVuYWJsZXJJZF1cbiAgICAgICAgICAgICAgICA6IGl0ZW1Db25kaXRpb25JdGVtSWRzLmZpbHRlcigoaSkgPT4gaSAhPT0gY2MuZW5hYmxlcklkKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0l0ZW06IENvbmRpdGlvbmFsSXRlbSA9IHsgLi4uZm9ybUl0ZW0sIGNvbmRpdGlvbjogeyAuLi5mb3JtSXRlbS5jb25kaXRpb24sIGl0ZW1JZHMgfSB9O1xuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGVJZCA9IChmb3JtSXRlbSBhcyBhbnkpPy50ZW1wbGF0ZUlkID8/IG5ld0l0ZW0uaW5zdGFuY2VJZDtcbiAgICAgICAgICAgIGNvbnN0IG5ld0NoYW5nZSA9IG5ldyBNdG5hV2ZGb3JtSXRlbUNoYW5nZShuZXdJdGVtLmluc3RhbmNlSWQsIHRlbXBsYXRlSWQsIGZvcm1JdGVtQ29tcG9uZW50Py5wYXJlbnRJZHMgfHwgW10sICdSRVBMQUNFJyk7XG5cbiAgICAgICAgICAgIG5ld0Zvcm0gPSB0aGlzLl9tb2RpZnlGb3JtSXRlbShuZXdGb3JtLCBuZXdDaGFuZ2UsIG5ld0l0ZW0gYXMgRm9ybUl0ZW0gJiBDb25kaXRpb25hbEl0ZW0pIGFzIEZvcm07XG4gICAgICAgICAgICBmb3JtSXRlbXNbdG9nZ2xlZElkXSA9IG5ld0l0ZW07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2UuYWN0aW9uVHlwZSA9PT0gJ1JFTU9WRScpIHtcbiAgICAgICAgICB0aGlzLnVpU2VydmljZS50b2dnbGVGb3JtSXRlbXMoY2MuZW5hYmxlZEl0ZW1zLCBjYy5kaXNhYmxlZEl0ZW1zLCAhIWNjLmVuYWJsZSwgY2MuZW5hYmxlcklkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3Rm9ybTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBtYXAgb2YgYWxsIGluc3RhbmNlSWRzIGluc2lkZSBhbiBpdGVtLiBDaGVja3MgJ2l0ZW1zJyAmICdvcHRpb25JdGVtTWFwJ1xuICAgKiBAcGFyYW0gaXRlbSBJdGVtIHRvIHJlY3Vyc2VcbiAgICogQHBhcmFtIGlkTWFwIG1hcCBvZiB0aGUgaXRlbSdzIGludGVybmFsIGluc3RhbmNlSWRzXG4gICAqL1xuICBwcml2YXRlIF9idWlsZEludGVybmFsSWRzTWFwKGl0ZW06IEZvcm1JdGVtLCBpZE1hcDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pIHtcbiAgICBpZE1hcFtpdGVtLmluc3RhbmNlSWRdID0gdHJ1ZTtcbiAgICBpZiAoaXNUeXBlPHsgaXRlbXM6IEZvcm1JdGVtW10gfT4oaXRlbSwgJ2l0ZW1zJykpIHtcbiAgICAgIGNvbnN0IGl0ZW1zOiBGb3JtSXRlbVtdID0gaXRlbS5pdGVtcztcbiAgICAgIGZvciAoY29uc3Qgc3ViSXRlbSBvZiBpdGVtcykge1xuICAgICAgICB0aGlzLl9idWlsZEludGVybmFsSWRzTWFwKHN1Ykl0ZW0sIGlkTWFwKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzVHlwZTx7IG9wdGlvbkl0ZW1NYXA6IHsgW2lkOiBzdHJpbmddOiBGb3JtSXRlbSB9IH0+KGl0ZW0sICdvcHRpb25JdGVtTWFwJykpIHtcbiAgICAgIGNvbnN0IG1hcDogeyBbaWQ6IHN0cmluZ106IEZvcm1JdGVtIH0gPSBpdGVtLm9wdGlvbkl0ZW1NYXA7XG4gICAgICBmb3IgKGNvbnN0IGlkIGluIG1hcCkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1hcCwgaWQpKSB7XG4gICAgICAgICAgdGhpcy5fYnVpbGRJbnRlcm5hbElkc01hcChtYXBbaWRdLCBpZE1hcCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGFuIGFycmF5IG9mIENvbmRpdGlvbkNoYW5nZXMgdG8gYmUgaW1wbGVtZW50ZWQgaW4gYW4gTXRuYUZvcm0uXG4gICAqIEBwYXJhbSBpdGVtIEZvcm1JdGVtIHRoYXQgd2FzIGFkZGVkL3JlbW92ZWQsIHdoaWNoIGFmZmVjdHMgY29uZGl0aW9ucyBvZiBvdGhlciBGb3JtSXRlbXNcbiAgICogQHBhcmFtIGNoYW5nZXMgQXJyYXkgdG8gYnVpbGQgdXBcbiAgICogQHBhcmFtIGludGVybmFsSWRNYXAgTWFwIG9mIGFsbCBpbnN0YW5jZUlkcyBsb2NhdGVkIGluIHRoZSBpdGVtOyBpbiBvcmRlciB0byBleGNsdWRlIHRoZW0gZnJvbSB0aGUgY29uZGl0aW9uIGNoYW5nZXNcbiAgICogQHBhcmFtIGFjdGlvbiBXaGV0aGVyIHRoZSBpdGVtIHdhcyBhZGRlZCBvciByZW1vdmVkXG4gICAqL1xuICBwcml2YXRlIF9idWlsZENvbmRpdGlvbkNoYW5nZUFycmF5KFxuICAgIGl0ZW06IEZvcm1JdGVtLFxuICAgIGNoYW5nZXM6IEFycmF5PENvbmRpdGlvbkNoYW5nZT4sXG4gICAgaW50ZXJuYWxJZE1hcDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sXG4gICAgYWN0aW9uPzogTXRuYVdmRm9ybUl0ZW1DaGFuZ2VBY3Rpb25cbiAgKSB7XG4gICAgaWYgKGlzT3B0aW9uSXRlbUltcGwoaXRlbSkpIHtcbiAgICAgIGNvbnN0IGVuYWJsZSA9ICEhYWN0aW9uICYmIGFjdGlvbiA9PT0gJ0FERCcgPyBpdGVtLm9wdGlvbi5zZWxlY3RlZCB8fCBpdGVtLnZhbHVlID09PSBpdGVtLm9wdGlvbi5vcHRpb24uaWQgOiBmYWxzZTtcbiAgICAgIHRoaXMuX3B1c2hDb25kaXRpb25Ub0FycmF5KGl0ZW0uaW5zdGFuY2VJZCwgaXRlbS5vcHRpb24uZW5hYmxlZEl0ZW1zLCBpdGVtLm9wdGlvbi5kaXNhYmxlZEl0ZW1zLCBjaGFuZ2VzLCBpbnRlcm5hbElkTWFwLCBlbmFibGUpO1xuICAgICAgdGhpcy5fYnVpbGRBcnJheUZyb21PcHRpb25JdGVtTWFwKGl0ZW0sIGNoYW5nZXMsIGludGVybmFsSWRNYXApO1xuICAgIH0gZWxzZSBpZiAoaXNPcHRpb25Hcm91cEl0ZW1JbXBsKGl0ZW0pKSB7XG4gICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBpdGVtLm9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZW5hYmxlID1cbiAgICAgICAgICAhIWFjdGlvbiAmJiBhY3Rpb24gPT09ICdBREQnID8gb3B0aW9uLnNlbGVjdGVkIHx8ICghIWl0ZW0udmFsdWUgJiYgaXRlbS52YWx1ZS5zb21lKCh2KSA9PiB2ID09PSBvcHRpb24ub3B0aW9uLmlkKSkgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5fcHVzaENvbmRpdGlvblRvQXJyYXkoaXRlbS5pbnN0YW5jZUlkLCBvcHRpb24uZW5hYmxlZEl0ZW1zLCBvcHRpb24uZGlzYWJsZWRJdGVtcywgY2hhbmdlcywgaW50ZXJuYWxJZE1hcCwgZW5hYmxlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2J1aWxkQXJyYXlGcm9tT3B0aW9uSXRlbU1hcChpdGVtLCBjaGFuZ2VzLCBpbnRlcm5hbElkTWFwLCBhY3Rpb24pO1xuICAgIH0gZWxzZSBpZiAoaXNUeXBlPHsgaXRlbXM6IEZvcm1JdGVtW10gfT4oaXRlbSwgJ2l0ZW1zJykpIHtcbiAgICAgIGNvbnN0IGl0ZW1zOiBGb3JtSXRlbVtdID0gaXRlbS5pdGVtcztcbiAgICAgIGZvciAoY29uc3Qgc3ViSXRlbSBvZiBpdGVtcykge1xuICAgICAgICB0aGlzLl9idWlsZENvbmRpdGlvbkNoYW5nZUFycmF5KHN1Ykl0ZW0sIGNoYW5nZXMsIGludGVybmFsSWRNYXAsIGFjdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhbiBhcnJheSBvZiBDb25kaXRpb25DaGFuZ2VzIGZyb20gYW4gaXRlbSdzIG9wdGlvbkl0ZW1NYXBcbiAgICogQHBhcmFtIGl0ZW0gRm9ybUl0ZW0gd2l0aCBhbiBvcHRpb25JdGVtTWFwXG4gICAqIEBwYXJhbSBjb25kaXRpb25zIEFycmF5IG9mIENvbmRpdGlvbkNoYW5nZXMgdG8gcHVzaCBvbiBuZXcgY2hhbmdlc1xuICAgKiBAcGFyYW0gaXRlbU1hcCBtYXAgb2YgaW5zdGFuY2VJZHMgZXhpc2l0aW5nIGluIGFuIGl0ZW07IGluIG9yZGVyIHRvIGV4Y2x1ZGUgdGhlbSBmcm9tIHRoZSBjaGFuZ2VzXG4gICAqIEBwYXJhbSBhY3Rpb24gV2hldGhlciBhbiBpdGVtIHdhcyBhZGRlZCBvciByZW1vdmVkXG4gICAqL1xuICBwcml2YXRlIF9idWlsZEFycmF5RnJvbU9wdGlvbkl0ZW1NYXAoXG4gICAgaXRlbTogT3B0aW9uSXRlbUltcGw8T3B0aW9uPHVua25vd24+LCB1bmtub3duPiB8IE9wdGlvbkdyb3VwSXRlbUltcGw8T3B0aW9uPHVua25vd24+PixcbiAgICBjb25kaXRpb25zOiBBcnJheTxDb25kaXRpb25DaGFuZ2U+LFxuICAgIGl0ZW1NYXA6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+LFxuICAgIGFjdGlvbj86IE10bmFXZkZvcm1JdGVtQ2hhbmdlQWN0aW9uXG4gICkge1xuICAgIGlmIChpdGVtLm9wdGlvbkl0ZW1NYXApIHtcbiAgICAgIGZvciAoY29uc3QgaWQgaW4gaXRlbS5vcHRpb25JdGVtTWFwKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaXRlbS5vcHRpb25JdGVtTWFwLCBpZCkpIHtcbiAgICAgICAgICBjb25zdCBzdWJJdGVtID0gaXRlbS5vcHRpb25JdGVtTWFwW2lkXTtcbiAgICAgICAgICB0aGlzLl9idWlsZENvbmRpdGlvbkNoYW5nZUFycmF5KHN1Ykl0ZW0sIGNvbmRpdGlvbnMsIGl0ZW1NYXAsIGFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHVzaGVzIGEgbmV3IENvbmRpdGlvbkNoYW5nZSBvbnRvIHRoZSBjb25kaXRpb25zIGFycmF5LiBJZiBhIENvbmRpdGlvbkNoYW5nZSB3aXRoIG1hdGNoaW5nIGlkIGV4aXN0cyxcbiAgICogaXQgbWVyZ2VzIHRoZSBuZXcgdmFsdWVzIGludG8gaXRcbiAgICogQHBhcmFtIGVuYWJsZXJJZCBpbnN0YW5jZUlkIG9mIHRoZSBpdGVtIHRoYXQgZW5hYmxlcyBvdGhlciBGb3JtSXRlbXNcbiAgICogQHBhcmFtIGVuYWJsZWQgdGhlIGl0ZW0ncyAnZW5hYmxlZEl0ZW1zJyBhcnJheVxuICAgKiBAcGFyYW0gZGlzYWJsZWQgdGhlIGl0ZW0ncyAnZGlzYWJsZWRJdGVtcycgYXJyYXlcbiAgICogQHBhcmFtIGNvbmRpdGlvbnMgQXJyYXkgb2YgQ29uZGl0aW9uQ2hhbmdlcyB0byBidWlsZCB1cFxuICAgKiBAcGFyYW0gaXRlbU1hcCBtYXAgb2YgaW5zdGFuY2VJZHMgaW5zaWRlIGFuIGl0ZW07IHRvIGVuc3VyZSBubyBpbnRlcm5hbCBpZHMgYXJlIGluY2x1ZGVkIGluIGEgY2hhbmdlXG4gICAqIEBwYXJhbSBlbmFibGUgV2hldGhlciB0aGUgJ2VuYWJsZWRJdGVtcycgc2hvdWxkIHRvZ2dsZWQgZW5hYmxlZFxuICAgKi9cbiAgcHJpdmF0ZSBfcHVzaENvbmRpdGlvblRvQXJyYXkoXG4gICAgZW5hYmxlcklkOiBzdHJpbmcsXG4gICAgZW5hYmxlZDogc3RyaW5nW10sXG4gICAgZGlzYWJsZWQ6IHN0cmluZ1tdLFxuICAgIGNvbmRpdGlvbnM6IEFycmF5PENvbmRpdGlvbkNoYW5nZT4sXG4gICAgaXRlbU1hcDogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sXG4gICAgZW5hYmxlOiBib29sZWFuXG4gICkge1xuICAgIGNvbnN0IGVuYWJsZWRJdGVtcyA9IGVuYWJsZWQuZmlsdGVyKChlKSA9PiAhaXRlbU1hcFtlXSk7XG4gICAgY29uc3QgZGlzYWJsZWRJdGVtcyA9IGRpc2FibGVkLmZpbHRlcigoZCkgPT4gIWl0ZW1NYXBbZF0pO1xuICAgIGlmICghIWVuYWJsZWRJdGVtcy5sZW5ndGggfHwgISFkaXNhYmxlZEl0ZW1zLmxlbmd0aCkge1xuICAgICAgY29uc3QgaW5kZXggPSBjb25kaXRpb25zLmZpbmRJbmRleCgoYykgPT4gYy5lbmFibGVySWQgPT09IGVuYWJsZXJJZCk7XG4gICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIGNvbmRpdGlvbnMucHVzaCh7IGVuYWJsZXJJZDogZW5hYmxlcklkLCBlbmFibGVkSXRlbXMsIGRpc2FibGVkSXRlbXMsIGVuYWJsZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHByZXYgPSBjb25kaXRpb25zW2luZGV4XTtcbiAgICAgICAgY29uc3QgbmV3SWQ6IENvbmRpdGlvbkNoYW5nZSA9IHtcbiAgICAgICAgICBlbmFibGVySWQsXG4gICAgICAgICAgZW5hYmxlZEl0ZW1zOiBbLi4ucHJldi5lbmFibGVkSXRlbXMsIC4uLmVuYWJsZWRJdGVtc10sXG4gICAgICAgICAgZGlzYWJsZWRJdGVtczogWy4uLnByZXYuZGlzYWJsZWRJdGVtcywgLi4uZGlzYWJsZWRJdGVtc10sXG4gICAgICAgICAgZW5hYmxlLFxuICAgICAgICB9O1xuICAgICAgICBjb25kaXRpb25zLnNwbGljZShpbmRleCwgMSwgbmV3SWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSBhbGwgdmFsaWRhdGlvbiBlcnJvcnMgb24gdGhlIHNlcnZpY2UuXG4gICAqIFJldmFsaWRhdGUgZm9ybSBjb250cm9scyB0aGF0IHByZXZpb3VzbHkgaGFkIGVycm9ycyBvciBoYXZlIG5ldyBlcnJvcnMgbm93LlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlU2VydmVyU2lkZUVycm9ycygpIHtcbiAgICAvLyBLZWVwIHRyYWNrIG9mIElEcyBmb3IgZWFjaCBjb250cm9sIHRoYXQgbmVlZHMgdG8gYmUgcmV2YWxpZGF0ZWRcbiAgICBjb25zdCBjb250cm9sSWRzVG9SZXZhbGlkYXRlID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAvLyBDb2xsZWN0IGNvbnRyb2xzIHByZXZpb3VzbHkgaW4gZXJyb3IgdG8gcmV2YWxpZGF0ZVxuICAgIGlmICh0aGlzLl9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzKSB7XG4gICAgICBmb3IgKGNvbnN0IGlkIGluIHRoaXMuX2Zvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLl9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzLCBpZCkpIHtcbiAgICAgICAgICBjb250cm9sSWRzVG9SZXZhbGlkYXRlLmFkZChpZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDbGVhciBvdXQgYWxsIHByZXZpb3VzIHN0b3JlZCBlcnJvcnNcbiAgICB0aGlzLl9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzID0ge307XG4gICAgaWYgKHRoaXMuX210bmFGb3JtPy52YWxpZGF0aW9uUmVzdWx0KSB7XG4gICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiB0aGlzLl9tdG5hRm9ybS52YWxpZGF0aW9uUmVzdWx0LmZvcm1JdGVtVmFsaWRhdGlvblJlc3VsdHMpIHtcbiAgICAgICAgaWYgKHJlc3VsdC52YWxpZGF0aW9uU3RhdHVzID09PSAnRVJST1JTJykge1xuICAgICAgICAgIC8vIFN0b3JlIGVycm9ycyBzbyB0aGF0IHRoZSB2YWxpZGF0aW9uUmVzdWx0VmFsaWRhdG9yIGNhbiB2YWxpZGF0ZSBlYWNoIGNvbnRyb2xcbiAgICAgICAgICB0aGlzLl9mb3JtSXRlbVZhbGlkYXRpb25SZXN1bHRzW3Jlc3VsdC5pZF0gPSByZXN1bHQ7XG4gICAgICAgICAgLy8gV2UgbmVlZCB0byByZXZhbGlkYXRlIHRoZXNlIGNvbnRyb2xzIHRoYXQgaGF2ZSBlcnJvcnNcbiAgICAgICAgICBjb250cm9sSWRzVG9SZXZhbGlkYXRlLmFkZChyZXN1bHQuaWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT25seSByZXZhbGlkYXRlIGNvbnRyb2xzIGFjdHVhbGx5IGNoYW5nZXNcbiAgICBjb25zdCBmb3JtID0gdGhpcy5uZ0Zvcm1TZXJ2aWNlLmdldEZvcm0oKTtcbiAgICBpZiAoZm9ybSkge1xuICAgICAgZm9yIChjb25zdCBpZCBvZiBjb250cm9sSWRzVG9SZXZhbGlkYXRlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmaW5kRm9ybUNvbnRyb2woaWQsIGZvcm0pO1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8jZW5kcmVnaW9uXG59XG4iXX0=
@@ -1,13 +1,16 @@
1
1
  import { Inject, Injectable } from '@angular/core';
2
- import { MTNA_WF_API_TOKEN } from '../models';
3
2
  import { of } from 'rxjs';
3
+ import { BaseUrlService, MTNA_API_CONFIG } from '@mtna/core-angular';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "@angular/common/http";
6
- export class MtnaTemplateTransformationService {
7
- constructor(apiConfig, http) {
6
+ import * as i2 from "@mtna/core-angular";
7
+ export class MtnaTemplateTransformationService extends BaseUrlService {
8
+ constructor(apiConfig, http, logger) {
9
+ super(apiConfig, http, logger);
8
10
  this.apiConfig = apiConfig;
9
11
  this.http = http;
10
- this.API_URL = `${this.apiConfig.baseUrl}/api`;
12
+ this.logger = logger;
13
+ this.API_URL = `${this.BASE_URL}`;
11
14
  }
12
15
  convertTemplateToForm(request) {
13
16
  // return this.http.post<Form>(`${this.API_URL}/template/convert`, request);
@@ -15,13 +18,13 @@ export class MtnaTemplateTransformationService {
15
18
  return of(undefined);
16
19
  }
17
20
  }
18
- MtnaTemplateTransformationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaTemplateTransformationService, deps: [{ token: MTNA_WF_API_TOKEN }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
21
+ MtnaTemplateTransformationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaTemplateTransformationService, deps: [{ token: MTNA_API_CONFIG }, { token: i1.HttpClient }, { token: i2.MtnaLogger }], target: i0.ɵɵFactoryTarget.Injectable });
19
22
  MtnaTemplateTransformationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaTemplateTransformationService, providedIn: 'root' });
20
23
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MtnaTemplateTransformationService, decorators: [{
21
24
  type: Injectable,
22
25
  args: [{ providedIn: 'root' }]
23
26
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
24
27
  type: Inject,
25
- args: [MTNA_WF_API_TOKEN]
26
- }] }, { type: i1.HttpClient }]; } });
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtdHJhbnNmb3JtYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy90ZW1wbGF0ZS10cmFuc2Zvcm1hdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxpQkFBaUIsRUFBbUIsTUFBTSxXQUFXLENBQUM7QUFHL0QsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBR3RDLE1BQU0sT0FBTyxpQ0FBaUM7SUFHNUMsWUFBaUQsU0FBMEIsRUFBWSxJQUFnQjtRQUF0RCxjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUFZLFNBQUksR0FBSixJQUFJLENBQVk7UUFGdkcsWUFBTyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLE1BQU0sQ0FBQztJQUVnRSxDQUFDO0lBRTNHLHFCQUFxQixDQUFDLE9BQXNFO1FBQzFGLDRFQUE0RTtRQUM1RSw0Q0FBNEM7UUFDNUMsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkIsQ0FBQzs7K0hBVFUsaUNBQWlDLGtCQUd4QixpQkFBaUI7bUlBSDFCLGlDQUFpQyxjQURwQixNQUFNOzRGQUNuQixpQ0FBaUM7a0JBRDdDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFJbkIsTUFBTTsyQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1UTkFfV0ZfQVBJX1RPS0VOLCBNdG5hV2ZBcGlDb25maWcgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEZvcm0sIEZvcm1PcHRpb25TZWxlY3RvciwgT3B0aW9uLCBUZW1wbGF0ZSwgVGVtcGxhdGVJdGVtIH0gZnJvbSAnQG10bmEvd2ViLWZvcm0tdHMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBNdG5hVGVtcGxhdGVUcmFuc2Zvcm1hdGlvblNlcnZpY2Uge1xuICBBUElfVVJMID0gYCR7dGhpcy5hcGlDb25maWcuYmFzZVVybH0vYXBpYDtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KE1UTkFfV0ZfQVBJX1RPS0VOKSBwcm90ZWN0ZWQgYXBpQ29uZmlnOiBNdG5hV2ZBcGlDb25maWcsIHByb3RlY3RlZCBodHRwOiBIdHRwQ2xpZW50KSB7fVxuXG4gIGNvbnZlcnRUZW1wbGF0ZVRvRm9ybShyZXF1ZXN0OiBUZW1wbGF0ZSB8IFRlbXBsYXRlSXRlbSB8IEZvcm1PcHRpb25TZWxlY3RvcjxPcHRpb248dW5rbm93bj4+KTogT2JzZXJ2YWJsZTxGb3JtIHwgdW5kZWZpbmVkPiB7XG4gICAgLy8gcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEZvcm0+KGAke3RoaXMuQVBJX1VSTH0vdGVtcGxhdGUvY29udmVydGAsIHJlcXVlc3QpO1xuICAgIC8vIHJldHVybiBvZihNSERPX0ZPUk1fVEVNUExBVEVfT05fUFJFTUlTRSk7XG4gICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gIH1cbn1cbiJdfQ==
28
+ args: [MTNA_API_CONFIG]
29
+ }] }, { type: i1.HttpClient }, { type: i2.MtnaLogger }]; } });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtdHJhbnNmb3JtYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3dlYi1mb3JtLWFuZ3VsYXIvc3JjL2xpYi9zZXJ2aWNlcy90ZW1wbGF0ZS10cmFuc2Zvcm1hdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR25ELE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQTZCLE1BQU0sb0JBQW9CLENBQUM7Ozs7QUFHaEcsTUFBTSxPQUFPLGlDQUFrQyxTQUFRLGNBQWM7SUFHbkUsWUFBK0MsU0FBd0IsRUFBWSxJQUFnQixFQUFZLE1BQWtCO1FBQy9ILEtBQUssQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRGMsY0FBUyxHQUFULFNBQVMsQ0FBZTtRQUFZLFNBQUksR0FBSixJQUFJLENBQVk7UUFBWSxXQUFNLEdBQU4sTUFBTSxDQUFZO1FBRmpJLFlBQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUk3QixDQUFDO0lBRUQscUJBQXFCLENBQUMsT0FBc0U7UUFDMUYsNEVBQTRFO1FBQzVFLDRDQUE0QztRQUM1QyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2QixDQUFDOzsrSEFYVSxpQ0FBaUMsa0JBR3hCLGVBQWU7bUlBSHhCLGlDQUFpQyxjQURwQixNQUFNOzRGQUNuQixpQ0FBaUM7a0JBRDdDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFJbkIsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgRm9ybSwgRm9ybU9wdGlvblNlbGVjdG9yLCBPcHRpb24sIFRlbXBsYXRlLCBUZW1wbGF0ZUl0ZW0gfSBmcm9tICdAbXRuYS93ZWItZm9ybS10cyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQmFzZVVybFNlcnZpY2UsIE1UTkFfQVBJX0NPTkZJRywgTXRuYUFwaUNvbmZpZywgTXRuYUxvZ2dlciB9IGZyb20gJ0BtdG5hL2NvcmUtYW5ndWxhcic7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTXRuYVRlbXBsYXRlVHJhbnNmb3JtYXRpb25TZXJ2aWNlIGV4dGVuZHMgQmFzZVVybFNlcnZpY2Uge1xuICBBUElfVVJMID0gYCR7dGhpcy5CQVNFX1VSTH1gO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoTVROQV9BUElfQ09ORklHKSBwcm90ZWN0ZWQgYXBpQ29uZmlnOiBNdG5hQXBpQ29uZmlnLCBwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCwgcHJvdGVjdGVkIGxvZ2dlcjogTXRuYUxvZ2dlcikge1xuICAgIHN1cGVyKGFwaUNvbmZpZywgaHR0cCwgbG9nZ2VyKTtcbiAgfVxuXG4gIGNvbnZlcnRUZW1wbGF0ZVRvRm9ybShyZXF1ZXN0OiBUZW1wbGF0ZSB8IFRlbXBsYXRlSXRlbSB8IEZvcm1PcHRpb25TZWxlY3RvcjxPcHRpb248dW5rbm93bj4+KTogT2JzZXJ2YWJsZTxGb3JtIHwgdW5kZWZpbmVkPiB7XG4gICAgLy8gcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEZvcm0+KGAke3RoaXMuQVBJX1VSTH0vdGVtcGxhdGUvY29udmVydGAsIHJlcXVlc3QpO1xuICAgIC8vIHJldHVybiBvZihNSERPX0ZPUk1fVEVNUExBVEVfT05fUFJFTUlTRSk7XG4gICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,4 +1,4 @@
1
- import { BOOLEAN_ITEM_TEMPLATE_ID, CHECKBOX_GRID_TEMPLATE_ID, CHECKBOX_ITEM_TEMPLATE_ID, DATE_ITEM_TEMPLATE_ID, DECIMAL_ANSWER_ITEM_TEMPLATE_ID, DROPDOWN_ITEM_TEMPLATE_ID, FILE_UPLOAD_ITEM_TEMPLATE_ID, HIDDEN_REFERENCE_ITEM_TEMPLATE_ID, instanceOfBooleanItemTemplate, instanceOfCheckboxGridTemplate, instanceOfCheckboxItemTemplate, instanceOfDateItemTemplate, instanceOfDecimalAnswerItemTemplate, instanceOfDropdownItemTemplate, instanceOfFileUploadItemTemplate, instanceOfHiddenReferenceItemTemplate, instanceOfInternationalizedParagraphAnswerItemTemplate, instanceOfInternationalizedShortAnswerItemTemplate, instanceOfLinearScaleItemTemplate, instanceOfMultipleChoiceGridItemTemplate, instanceOfMultipleChoiceItemTemplate, instanceOfOffsetDateRangeTemplate, instanceOfParagraphAnswerItemTemplate, instanceOfRepeatableItemTemplate, instanceOfRequestIdItemTemplate, instanceOfShortAnswerItemTemplate, instanceOfTemplateItemGroupImpl, instanceOfTemplateSectionImpl, instanceOfTextItemTemplate, instanceOfTimeItemTemplate, instanceOfTitleItemTemplate, instanceOfWholeNumberAnswerItemTemplate, instanceOfYearQuarterRangeTemplate, INTERNATIONALIZED_PARAGRAPH_ANSWER_ITEM_TEMPLATE_ID, INTERNATIONALIZED_SHORT_ANSWER_ITEM_TEMPLATE_ID, LINEAR_SCALE_ITEM_TEMPLATE_ID, MULTIPLE_CHOICE_GRID_ITEM_TEMPLATE_ID, MULTIPLE_CHOICE_ITEM_TEMPLATE_ID, OFFSET_DATE_RANGE_ITEM_TEMPLATE_ID, PARAGRAPH_ANSWER_ITEM_TEMPLATE_ID, REPEATABLE_ITEM_TEMPLATE_IMPL_ID, REQUEST_ID_ITEM_TEMPLATE_ID, SHORT_ANSWER_ITEM_TEMPLATE_ID, TEMPLATE_IMPL_ID, TEMPLATE_ITEM_GROUP_IMPL_ID, TEMPLATE_SECTION_IMPL_ID, TEXT_ITEM_TEMPLATE_ID, TIME_ITEM_TEMPLATE_ID, TITLE_ITEM_TEMPLATE_ID, WHOLE_NUMBER_ANSWER_ITEM_TEMPLATE_ID, YEAR_QUARTER_RANGE_ITEM_TEMPLATE_ID, } from '@mtna/web-form-ts';
1
+ import { BOOLEAN_ITEM_TEMPLATE_ID, BULLETED_LIST_ITEM_TEMPLATE_ID, CHECKBOX_GRID_TEMPLATE_ID, CHECKBOX_ITEM_TEMPLATE_ID, DATE_ITEM_TEMPLATE_ID, DECIMAL_ANSWER_ITEM_TEMPLATE_ID, DROPDOWN_ITEM_TEMPLATE_ID, FILE_UPLOAD_ITEM_TEMPLATE_ID, HIDDEN_REFERENCE_ITEM_TEMPLATE_ID, instanceOfBooleanItemTemplate, instanceOfBulletedListItemTemplate, instanceOfCheckboxGridTemplate, instanceOfCheckboxItemTemplate, instanceOfDateItemTemplate, instanceOfDecimalAnswerItemTemplate, instanceOfDropdownItemTemplate, instanceOfFileUploadItemTemplate, instanceOfHiddenReferenceItemTemplate, instanceOfInternationalizedParagraphAnswerItemTemplate, instanceOfInternationalizedShortAnswerItemTemplate, instanceOfLinearScaleItemTemplate, instanceOfMultipleChoiceGridItemTemplate, instanceOfMultipleChoiceItemTemplate, instanceOfNumberedListItemTemplate, instanceOfOffsetDateRangeTemplate, instanceOfParagraphAnswerItemTemplate, instanceOfRepeatableItemTemplate, instanceOfRequestIdItemTemplate, instanceOfShortAnswerItemTemplate, instanceOfTemplateItemGroupImpl, instanceOfTemplateSectionImpl, instanceOfTextItemTemplate, instanceOfTimeItemTemplate, instanceOfTitleItemTemplate, instanceOfWholeNumberAnswerItemTemplate, instanceOfYearQuarterRangeTemplate, INTERNATIONALIZED_PARAGRAPH_ANSWER_ITEM_TEMPLATE_ID, INTERNATIONALIZED_SHORT_ANSWER_ITEM_TEMPLATE_ID, LINEAR_SCALE_ITEM_TEMPLATE_ID, MULTIPLE_CHOICE_GRID_ITEM_TEMPLATE_ID, MULTIPLE_CHOICE_ITEM_TEMPLATE_ID, NUMBERED_LIST_ITEM_TEMPLATE_ID, OFFSET_DATE_RANGE_ITEM_TEMPLATE_ID, PARAGRAPH_ANSWER_ITEM_TEMPLATE_ID, REPEATABLE_ITEM_TEMPLATE_IMPL_ID, REQUEST_ID_ITEM_TEMPLATE_ID, SHORT_ANSWER_ITEM_TEMPLATE_ID, TEMPLATE_IMPL_ID, TEMPLATE_ITEM_GROUP_IMPL_ID, TEMPLATE_SECTION_IMPL_ID, TEXT_ITEM_TEMPLATE_ID, TIME_ITEM_TEMPLATE_ID, TITLE_ITEM_TEMPLATE_ID, WHOLE_NUMBER_ANSWER_ITEM_TEMPLATE_ID, YEAR_QUARTER_RANGE_ITEM_TEMPLATE_ID, } from '@mtna/web-form-ts';
2
2
  import { getI18nString } from '@mtna/core-i18n-angular';
3
3
  import { TemplateMapper } from '../models/design/design-mapper/template-mapper';
4
4
  import { isPresent } from '@mtna/core-ts';
@@ -20,7 +20,7 @@ export function isTemplateDesign(design) {
20
20
  export function isTemplateItemDesign(design) {
21
21
  switch (design.type) {
22
22
  case BOOLEAN_ITEM_TEMPLATE_ID:
23
- // case BULLETED_LIST_ITEM_TEMPLATE_ID:
23
+ case BULLETED_LIST_ITEM_TEMPLATE_ID:
24
24
  case CHECKBOX_GRID_TEMPLATE_ID:
25
25
  case CHECKBOX_ITEM_TEMPLATE_ID:
26
26
  case DATE_ITEM_TEMPLATE_ID:
@@ -33,7 +33,7 @@ export function isTemplateItemDesign(design) {
33
33
  case LINEAR_SCALE_ITEM_TEMPLATE_ID:
34
34
  case MULTIPLE_CHOICE_GRID_ITEM_TEMPLATE_ID:
35
35
  case MULTIPLE_CHOICE_ITEM_TEMPLATE_ID:
36
- // case NUMBERED_LIST_ITEM_TEMPLATE_ID:
36
+ case NUMBERED_LIST_ITEM_TEMPLATE_ID:
37
37
  case OFFSET_DATE_RANGE_ITEM_TEMPLATE_ID:
38
38
  case PARAGRAPH_ANSWER_ITEM_TEMPLATE_ID:
39
39
  case REPEATABLE_ITEM_TEMPLATE_IMPL_ID:
@@ -53,7 +53,7 @@ export function isTemplateItemDesign(design) {
53
53
  }
54
54
  export function isTemplateItem(something) {
55
55
  return (instanceOfBooleanItemTemplate(something) ||
56
- // instanceOfBulletedListItemTemplate(something) ||
56
+ instanceOfBulletedListItemTemplate(something) ||
57
57
  instanceOfCheckboxGridTemplate(something) ||
58
58
  instanceOfCheckboxItemTemplate(something) ||
59
59
  instanceOfDateItemTemplate(something) ||
@@ -66,7 +66,7 @@ export function isTemplateItem(something) {
66
66
  instanceOfLinearScaleItemTemplate(something) ||
67
67
  instanceOfMultipleChoiceGridItemTemplate(something) ||
68
68
  instanceOfMultipleChoiceItemTemplate(something) ||
69
- // instanceOfNumberedListItemTemplate(something) ||
69
+ instanceOfNumberedListItemTemplate(something) ||
70
70
  instanceOfOffsetDateRangeTemplate(something) ||
71
71
  instanceOfParagraphAnswerItemTemplate(something) ||
72
72
  instanceOfRepeatableItemTemplate(something) ||
@@ -106,4 +106,4 @@ export function getText(properties, key, i18n, languageId, fallback = '') {
106
106
  return fallback;
107
107
  }
108
108
  }
109
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtZGVzaWduLXV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvdXRpbGl0aWVzL3RlbXBsYXRlLWRlc2lnbi11dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6QixxQkFBcUIsRUFDckIsK0JBQStCLEVBQy9CLHlCQUF5QixFQUN6Qiw0QkFBNEIsRUFDNUIsaUNBQWlDLEVBQ2pDLDZCQUE2QixFQUM3Qiw4QkFBOEIsRUFDOUIsOEJBQThCLEVBQzlCLDBCQUEwQixFQUMxQixtQ0FBbUMsRUFDbkMsOEJBQThCLEVBQzlCLGdDQUFnQyxFQUNoQyxxQ0FBcUMsRUFDckMsc0RBQXNELEVBQ3RELGtEQUFrRCxFQUNsRCxpQ0FBaUMsRUFDakMsd0NBQXdDLEVBQ3hDLG9DQUFvQyxFQUNwQyxpQ0FBaUMsRUFDakMscUNBQXFDLEVBQ3JDLGdDQUFnQyxFQUNoQywrQkFBK0IsRUFDL0IsaUNBQWlDLEVBQ2pDLCtCQUErQixFQUMvQiw2QkFBNkIsRUFDN0IsMEJBQTBCLEVBQzFCLDBCQUEwQixFQUMxQiwyQkFBMkIsRUFDM0IsdUNBQXVDLEVBQ3ZDLGtDQUFrQyxFQUNsQyxtREFBbUQsRUFDbkQsK0NBQStDLEVBQy9DLDZCQUE2QixFQUM3QixxQ0FBcUMsRUFDckMsZ0NBQWdDLEVBQ2hDLGtDQUFrQyxFQUNsQyxpQ0FBaUMsRUFDakMsZ0NBQWdDLEVBQ2hDLDJCQUEyQixFQUMzQiw2QkFBNkIsRUFFN0IsZ0JBQWdCLEVBQ2hCLDJCQUEyQixFQUMzQix3QkFBd0IsRUFFeEIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixzQkFBc0IsRUFDdEIsb0NBQW9DLEVBQ3BDLG1DQUFtQyxHQUNwQyxNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE9BQU8sRUFBRSxhQUFh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R0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxtQ0FBSSxFQUFFLENBQUM7U0FDL0Q7YUFBTTtZQUNMLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3hCO0tBQ0Y7U0FBTTtRQUNMLE9BQU8sUUFBUSxDQUFDO0tBQ2pCO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJPT0xFQU5fSVRFTV9URU1QTEFURV9JRCxcbiAgQ0hFQ0tCT1hfR1JJRF9URU1QTEFURV9JRCxcbiAgQ0hFQ0tCT1hfSVRFTV9URU1QTEFURV9JRCxcbiAgREFURV9JVEVNX1RFTVBMQVRFX0lELFxuICBERUNJTUFMX0FOU1dFUl9JVEVNX1RFTVBMQVRFX0lELFxuICBEUk9QRE9XTl9JVEVNX1RFTVBMQVRFX0lELFxuICBGSUxFX1VQTE9BRF9JVEVNX1RFTVBMQVRFX0lELFxuICBISURERU5fUkVGRVJFTkNFX0lURU1fVEVNUExBVEVfSUQsXG4gIGluc3RhbmNlT2ZCb29sZWFuSXRlbVRlbXBsYXRlLFxuICBpbnN0YW5jZU9mQ2hlY2tib3hHcmlkVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZDaGVja2JveEl0ZW1UZW1wbGF0ZSxcbiAgaW5zdGFuY2VPZkRhdGVJdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZEZWNpbWFsQW5zd2VySXRlbVRlbXBsYXRlLFxuICBpbnN0YW5jZU9mRHJvcGRvd25JdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZGaWxlVXBsb2FkSXRlbVRlbXBsYXRlLFxuICBpbnN0YW5jZU9mSGlkZGVuUmVmZXJlbmNlSXRlbVRlbXBsYXRlLFxuICBpbnN0YW5jZU9mSW50ZXJuYXRpb25hbGl6ZWRQYXJhZ3JhcGhBbnN3ZXJJdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZJbnRlcm5hdGlvbmFsaXplZFNob3J0QW5zd2VySXRlbVRlbXBsYXRlLFxuICBpbnN0YW5jZU9mTGluZWFyU2NhbGVJdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZNdWx0aXBsZUNob2ljZUdyaWRJdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZNdWx0aXBsZUNob2ljZUl0ZW1UZW1wbGF0ZSxcbiAgaW5zdGFuY2VPZk9mZnNldERhdGVSYW5nZVRlbXBsYXRlLFxuICBpbnN0YW5jZU9mUGFyYWdyYXBoQW5zd2VySXRlbVRlbXBsYXRlLFxuICBpbnN0YW5jZU9mUmVwZWF0YWJsZUl0ZW1UZW1wbGF0ZSxcbiAgaW5zdGFuY2VPZlJlcXVlc3RJZEl0ZW1UZW1wbGF0ZSxcbiAgaW5zdGFuY2VPZlNob3J0QW5zd2VySXRlbVRlbXBsYXRlLFxuICBpbnN0YW5jZU9mVGVtcGxhdGVJdGVtR3JvdXBJbXBsLFxuICBpbnN0YW5jZU9mVGVtcGxhdGVTZWN0aW9uSW1wbCxcbiAgaW5zdGFuY2VPZlRleHRJdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZUaW1lSXRlbVRlbXBsYXRlLFxuICBpbnN0YW5jZU9mVGl0bGVJdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZXaG9sZU51bWJlckFuc3dlckl0ZW1UZW1wbGF0ZSxcbiAgaW5zdGFuY2VPZlllYXJRdWFydGVyUmFuZ2VUZW1wbGF0ZSxcbiAgSU5URVJOQVRJT05BTElaRURfUEFSQUdSQVBIX0FOU1dFUl9JVEVNX1RFTVBMQVRFX0lELFxuICBJTlRFUk5BVElPTkFMSVpFRF9TSE9SVF9BTlNXRVJfSVRFTV9URU1QTEFURV9JRCxcbiAgTElORUFSX1NDQUxFX0lURU1fVEVNUExBVEVfSUQsXG4gIE1VTFRJUExFX0NIT0lDRV9HUklEX0lURU1fVEVNUExBVEVfSUQsXG4gIE1VTFRJUExFX0NIT0lDRV9JVEVNX1RFTVBMQVRFX0lELFxuICBPRkZTRVRfREFURV9SQU5HRV9JVEVNX1RFTVBMQVRFX0lELFxuICBQQVJBR1JBUEhfQU5TV0VSX0lURU1fVEVNUExBVEVfSUQsXG4gIFJFUEVBVEFCTEVfSVRFTV9URU1QTEFURV9JTVBMX0lELFxuICBSRVFVRVNUX0lEX0lURU1fVEVNUExBVEVfSUQsXG4gIFNIT1JUX0FOU1dFUl9JVEVNX1RFTVBMQVRFX0lELFxuICBUZW1wbGF0ZSxcbiAgVEVNUExBVEVfSU1QTF9JRCxcbiAgVEVNUExBVEVfSVRFTV9HUk9VUF9JTVBMX0lELFxuICBURU1QTEFURV9TRUNUSU9OX0lNUExfSUQsXG4gIFRlbXBsYXRlSXRlbSxcbiAgVEVYVF9JVEVNX1RFTVBMQVRFX0lELFxuICBUSU1FX0lURU1fVEVNUExBVEVfSUQsXG4gIFRJVExFX0lURU1fVEVNUExBVEVfSUQsXG4gIFdIT0xFX05VTUJFUl9BTlNXRVJfSVRFTV9URU1QTEFURV9JRCxcbiAgWUVBUl9RVUFSVEVSX1JBTkdFX0lURU1fVEVNUExBVEVfSUQsXG59IGZyb20gJ0BtdG5hL3dlYi1mb3JtLXRzJztcbmltcG9ydCB7IENvbnRleHQsIERlc2lnbiwgRGVzaWduQmFzZSwgRGVzaWduUHJvcGVydHkgfSBmcm9tICdAbXRuYS9kZXNpZ25lci10cyc7XG5pbXBvcnQgeyBnZXRJMThuU3RyaW5nLCBNdG5hTGFuZ3VhZ2VJZCB9IGZyb20gJ0BtdG5hL2NvcmUtaTE4bi1hbmd1bGFyJztcbmltcG9ydCB7IFRlbXBsYXRlTWFwcGVyIH0gZnJvbSAnLi4vbW9kZWxzL2Rlc2lnbi9kZXNpZ24tbWFwcGVyL3RlbXBsYXRlLW1hcHBlcic7XG5pbXBvcnQgeyBpc1ByZXNlbnQgfSBmcm9tICdAbXRuYS9jb3JlLXRzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5ld1RlbXBsYXRlKGRlc2lnbkJhc2U6IERlc2lnbkJhc2UpOiBUZW1wbGF0ZSB7XG4gIHJldHVybiB7XG4gICAgZGVzY3JpcHRpdmVUZXh0OiBbXSxcbiAgICBpZDogZGVzaWduQmFzZS5pZCxcbiAgICBpdGVtSWQ6IGRlc2lnbkJhc2UudHlwZSxcbiAgICBpdGVtczogW10sXG4gICAgdGl0bGU6IFtdLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZURlc2lnbihkZXNpZ25CYXNlOiBEZXNpZ25CYXNlKTogRGVzaWduIHtcbiAgcmV0dXJuIHsgLi4uZGVzaWduQmFzZSwgc2VjdGlvbnM6IFtdIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RlbXBsYXRlRGVzaWduKGRlc2lnbjogRGVzaWduQmFzZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gZGVzaWduLnR5cGUgPT09IFRFTVBMQVRFX0lNUExfSUQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RlbXBsYXRlSXRlbURlc2lnbihkZXNpZ246IERlc2lnbkJhc2UpOiBib29sZWFuIHtcbiAgc3dpdGNoIChkZXNpZ24udHlwZSkge1xuICAgIGNhc2UgQk9PTEVBTl9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIC8vIGNhc2UgQlVMTEVURURfTElTVF9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIGNhc2UgQ0hFQ0tCT1hfR1JJRF9URU1QTEFURV9JRDpcbiAgICBjYXNlIENIRUNLQk9YX0lURU1fVEVNUExBVEVfSUQ6XG4gICAgY2FzZSBEQVRFX0lURU1fVEVNUExBVEVfSUQ6XG4gICAgY2FzZSBERUNJTUFMX0FOU1dFUl9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIGNhc2UgRFJPUERPV05fSVRFTV9URU1QTEFURV9JRDpcbiAgICBjYXNlIEZJTEVfVVBMT0FEX0lURU1fVEVNUExBVEVfSUQ6XG4gICAgY2FzZSBISURERU5fUkVGRVJFTkNFX0lURU1fVEVNUExBVEVfSUQ6XG4gICAgY2FzZSBJTlRFUk5BVElPTkFMSVpFRF9QQVJBR1JBUEhfQU5TV0VSX0lURU1fVEVNUExBVEVfSUQ6XG4gICAgY2FzZSBJTlRFUk5BVElPTkFMSVpFRF9TSE9SVF9BTlNXRVJfSVRFTV9URU1QTEFURV9JRDpcbiAgICBjYXNlIExJTkVBUl9TQ0FMRV9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIGNhc2UgTVVMVElQTEVfQ0hPSUNFX0dSSURfSVRFTV9URU1QTEFURV9JRDpcbiAgICBjYXNlIE1VTFRJUExFX0NIT0lDRV9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIC8vIGNhc2UgTlVNQkVSRURfTElTVF9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIGNhc2UgT0ZGU0VUX0RBVEVfUkFOR0VfSVRFTV9URU1QTEFURV9JRDpcbiAgICBjYXNlIFBBUkFHUkFQSF9BTlNXRVJfSVRFTV9URU1QTEFURV9JRDpcbiAgICBjYXNlIFJFUEVBVEFCTEVfSVRFTV9URU1QTEFURV9JTVBMX0lEOlxuICAgIGNhc2UgUkVRVUVTVF9JRF9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIGNhc2UgU0hPUlRfQU5TV0VSX0lURU1fVEVNUExBVEVfSUQ6XG4gICAgY2FzZSBURU1QTEFURV9JVEVNX0dST1VQX0lNUExfSUQ6XG4gICAgY2FzZSBURU1QTEFURV9TRUNUSU9OX0lNUExfSUQ6XG4gICAgY2FzZSBURVhUX0lURU1fVEVNUExBVEVfSUQ6XG4gICAgY2FzZSBUSU1FX0lURU1fVEVNUExBVEVfSUQ6XG4gICAgY2FzZSBUSVRMRV9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIGNhc2UgV0hPTEVfTlVNQkVSX0FOU1dFUl9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIGNhc2UgWUVBUl9RVUFSVEVSX1JBTkdFX0lURU1fVEVNUExBVEVfSUQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1RlbXBsYXRlSXRlbShzb21ldGhpbmc6IHVua25vd24pOiBzb21ldGhpbmcgaXMgVGVtcGxhdGVJdGVtIHtcbiAgcmV0dXJuIChcbiAgICBpbnN0YW5jZU9mQm9vbGVhbkl0ZW1UZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgLy8gaW5zdGFuY2VPZkJ1bGxldGVkTGlzdEl0ZW1UZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZkNoZWNrYm94R3JpZFRlbXBsYXRlKHNvbWV0aGluZykgfHxcbiAgICBpbnN0YW5jZU9mQ2hlY2tib3hJdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZEYXRlSXRlbVRlbXBsYXRlKHNvbWV0aGluZykgfHxcbiAgICBpbnN0YW5jZU9mRGVjaW1hbEFuc3dlckl0ZW1UZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZkRyb3Bkb3duSXRlbVRlbXBsYXRlKHNvbWV0aGluZykgfHxcbiAgICBpbnN0YW5jZU9mRmlsZVVwbG9hZEl0ZW1UZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZkhpZGRlblJlZmVyZW5jZUl0ZW1UZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZkludGVybmF0aW9uYWxpemVkUGFyYWdyYXBoQW5zd2VySXRlbVRlbXBsYXRlKHNvbWV0aGluZykgfHxcbiAgICBpbnN0YW5jZU9mSW50ZXJuYXRpb25hbGl6ZWRTaG9ydEFuc3dlckl0ZW1UZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZkxpbmVhclNjYWxlSXRlbVRlbXBsYXRlKHNvbWV0aGluZykgfHxcbiAgICBpbnN0YW5jZU9mTXVsdGlwbGVDaG9pY2VHcmlkSXRlbVRlbXBsYXRlKHNvbWV0aGluZykgfHxcbiAgICBpbnN0YW5jZU9mTXVsdGlwbGVDaG9pY2VJdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIC8vIGluc3RhbmNlT2ZOdW1iZXJlZExpc3RJdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZPZmZzZXREYXRlUmFuZ2VUZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZlBhcmFncmFwaEFuc3dlckl0ZW1UZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZlJlcGVhdGFibGVJdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZSZXF1ZXN0SWRJdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZTaG9ydEFuc3dlckl0ZW1UZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZlRlbXBsYXRlSXRlbUdyb3VwSW1wbChzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZlRlbXBsYXRlU2VjdGlvbkltcGwoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZUZXh0SXRlbVRlbXBsYXRlKHNvbWV0aGluZykgfHxcbiAgICBpbnN0YW5jZU9mVGltZUl0ZW1UZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZlRpdGxlSXRlbVRlbXBsYXRlKHNvbWV0aGluZykgfHxcbiAgICBpbnN0YW5jZU9mV2hvbGVOdW1iZXJBbnN3ZXJJdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZZZWFyUXVhcnRlclJhbmdlVGVtcGxhdGUoc29tZXRoaW5nKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVtcGxhdGVQb3RlbnRpYWxEZXNpZ25zKGRlc2lnbjogRGVzaWduLCBwcm9wZXJ0eTogRGVzaWduUHJvcGVydHkpOiBEZXNpZ25CYXNlW10ge1xuICByZXR1cm4gZ2V0VGVtcGxhdGVNYXBwZXJGcm9tRGVzaWduKGRlc2lnbikuZ2V0UG90ZW50aWFsRGVzaWducyhwcm9wZXJ0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZW1wbGF0ZVRvRGVzaWduKHRlbXBsYXRlOiBUZW1wbGF0ZSwgbGFuZ3VhZ2VJZDogTXRuYUxhbmd1YWdlSWQsIGNvbnRleHQ/OiBDb250ZXh0KTogRGVzaWduIHtcbiAgcmV0dXJuIG5ldyBUZW1wbGF0ZU1hcHBlcih7IG1vZGVsOiB0ZW1wbGF0ZSwgbGFuZ3VhZ2VJZCwgY29udGV4dCB9KS5nZXREZXNpZ24oKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvVGVtcGxhdGUoZGVzaWduOiBEZXNpZ24sIGNvbnRleHQ/OiBDb250ZXh0KTogVGVtcGxhdGUge1xuICByZXR1cm4gbmV3IFRlbXBsYXRlTWFwcGVyKHsgZGVzaWduLCBjb250ZXh0IH0pLmdldE1vZGVsKCk7XG59XG5cbmZ1bmN0aW9uIGdldFRlbXBsYXRlTWFwcGVyRnJvbURlc2lnbihkZXNpZ246IERlc2lnbik6IFRlbXBsYXRlTWFwcGVyIHtcbiAgcmV0dXJuIG5ldyBUZW1wbGF0ZU1hcHBlcih7IGRlc2lnbiB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHQocHJvcGVydGllczogeyBbcDogc3RyaW5nXTogYW55IH0sIGtleTogc3RyaW5nLCBpMThuOiBib29sZWFuLCBsYW5ndWFnZUlkOiBNdG5hTGFuZ3VhZ2VJZCwgZmFsbGJhY2sgPSAnJyk6IHN0cmluZyB7XG4gIGlmIChpc1ByZXNlbnQocHJvcGVydGllc1trZXldKSAmJiBwcm9wZXJ0aWVzW2tleV0gIT09ICcnKSB7XG4gICAgaWYgKGkxOG4pIHtcbiAgICAgIHJldHVybiBnZXRJMThuU3RyaW5nKHByb3BlcnRpZXNba2V5XSwgbGFuZ3VhZ2VJZCwgdHJ1ZSkgPz8gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwcm9wZXJ0aWVzW2tleV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxsYmFjaztcbiAgfVxufVxuIl19
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtZGVzaWduLXV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy93ZWItZm9ybS1hbmd1bGFyL3NyYy9saWIvdXRpbGl0aWVzL3RlbXBsYXRlLWRlc2lnbi11dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsOEJBQThCLEVBQzlCLHlCQUF5QixFQUN6Qix5QkFBeUIsRUFDekIscUJBQXFCLEVBQ3JCLCtCQUErQixFQUMvQix5QkFBeUIsRUFDekIsNEJBQTRCLEVBQzVCLGlDQUFpQyxFQUNqQyw2QkFBNkIsRUFDN0Isa0NBQWtDLEVBQ2xDLDhCQUE4QixFQUM5Qiw4QkFBOEIsRUFDOUIsMEJBQTBCLEVBQzFCLG1DQUFtQyxFQUNuQyw4QkFBOEIsRUFDOUIsZ0NBQWdDLEVBQ2hDLHFDQUFxQyxFQUNyQyxzREFBc0QsRUFDdEQsa0RBQWtELEVBQ2xELGlDQUFpQyxFQUNqQyx3Q0FBd0MsRUFDeEMsb0NBQW9DLEVBQ3BDLGtDQUFrQyxFQUNsQyxpQ0FBaUMsRUFDakMscUNBQXFDLEVBQ3JDLGdDQUFnQyxFQUNoQywrQkFBK0IsRUFDL0IsaUNBQWlDLEVBQ2pDLCtCQUErQixFQUMvQiw2QkFBNkIsRUFDN0IsMEJBQTBCLEVBQzFCLDBCQUEwQixFQUMxQiwyQkFBMkIsRUFDM0IsdUNBQXVDLEVBQ3ZDLGtDQUFrQyxFQUNsQyxtREFBbUQsRUFDbkQsK0NBQStDLEVBQy9DLDZCQUE2QixFQUM3QixxQ0FBcUMsRUFDckMsZ0NBQWdDLEVBQ2hDLDhCQUE4QixFQUM5QixrQ0FBa0MsRUFDbEMsaUNBQWlDLEVBQ2pDLGdDQUFnQyxFQUNoQywyQkFBMkIsRUFDM0IsNkJBQTZCLEVBRTdCLGdCQUFnQixFQUNoQiwyQkFBMkIsRUFDM0Isd0JBQXdCLEVBRXhCLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLG9DQUFvQyxFQUNw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LENBQUMsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ3hELElBQUksSUFBSSxFQUFFO1lBQ1IsT0FBTyxNQUFBLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxtQ0FBSSxFQUFFLENBQUM7U0FDL0Q7YUFBTTtZQUNMLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3hCO0tBQ0Y7U0FBTTtRQUNMLE9BQU8sUUFBUSxDQUFDO0tBQ2pCO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEJPT0xFQU5fSVRFTV9URU1QTEFURV9JRCxcbiAgQlVMTEVURURfTElTVF9JVEVNX1RFTVBMQVRFX0lELFxuICBDSEVDS0JPWF9HUklEX1RFTVBMQVRFX0lELFxuICBDSEVDS0JPWF9JVEVNX1RFTVBMQVRFX0lELFxuICBEQVRFX0lURU1fVEVNUExBVEVfSUQsXG4gIERFQ0lNQUxfQU5TV0VSX0lURU1fVEVNUExBVEVfSUQsXG4gIERST1BET1dOX0lURU1fVEVNUExBVEVfSUQsXG4gIEZJTEVfVVBMT0FEX0lURU1fVEVNUExBVEVfSUQsXG4gIEhJRERFTl9SRUZFUkVOQ0VfSVRFTV9URU1QTEFURV9JRCxcbiAgaW5zdGFuY2VPZkJvb2xlYW5JdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZCdWxsZXRlZExpc3RJdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZDaGVja2JveEdyaWRUZW1wbGF0ZSxcbiAgaW5zdGFuY2VPZkNoZWNrYm94SXRlbVRlbXBsYXRlLFxuICBpbnN0YW5jZU9mRGF0ZUl0ZW1UZW1wbGF0ZSxcbiAgaW5zdGFuY2VPZkRlY2ltYWxBbnN3ZXJJdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZEcm9wZG93bkl0ZW1UZW1wbGF0ZSxcbiAgaW5zdGFuY2VPZkZpbGVVcGxvYWRJdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZIaWRkZW5SZWZlcmVuY2VJdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZJbnRlcm5hdGlvbmFsaXplZFBhcmFncmFwaEFuc3dlckl0ZW1UZW1wbGF0ZSxcbiAgaW5zdGFuY2VPZkludGVybmF0aW9uYWxpemVkU2hvcnRBbnN3ZXJJdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZMaW5lYXJTY2FsZUl0ZW1UZW1wbGF0ZSxcbiAgaW5zdGFuY2VPZk11bHRpcGxlQ2hvaWNlR3JpZEl0ZW1UZW1wbGF0ZSxcbiAgaW5zdGFuY2VPZk11bHRpcGxlQ2hvaWNlSXRlbVRlbXBsYXRlLFxuICBpbnN0YW5jZU9mTnVtYmVyZWRMaXN0SXRlbVRlbXBsYXRlLFxuICBpbnN0YW5jZU9mT2Zmc2V0RGF0ZVJhbmdlVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZQYXJhZ3JhcGhBbnN3ZXJJdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZSZXBlYXRhYmxlSXRlbVRlbXBsYXRlLFxuICBpbnN0YW5jZU9mUmVxdWVzdElkSXRlbVRlbXBsYXRlLFxuICBpbnN0YW5jZU9mU2hvcnRBbnN3ZXJJdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZUZW1wbGF0ZUl0ZW1Hcm91cEltcGwsXG4gIGluc3RhbmNlT2ZUZW1wbGF0ZVNlY3Rpb25JbXBsLFxuICBpbnN0YW5jZU9mVGV4dEl0ZW1UZW1wbGF0ZSxcbiAgaW5zdGFuY2VPZlRpbWVJdGVtVGVtcGxhdGUsXG4gIGluc3RhbmNlT2ZUaXRsZUl0ZW1UZW1wbGF0ZSxcbiAgaW5zdGFuY2VPZldob2xlTnVtYmVyQW5zd2VySXRlbVRlbXBsYXRlLFxuICBpbnN0YW5jZU9mWWVhclF1YXJ0ZXJSYW5nZVRlbXBsYXRlLFxuICBJTlRFUk5BVElPTkFMSVpFRF9QQVJBR1JBUEhfQU5TV0VSX0lURU1fVEVNUExBVEVfSUQsXG4gIElOVEVSTkFUSU9OQUxJWkVEX1NIT1JUX0FOU1dFUl9JVEVNX1RFTVBMQVRFX0lELFxuICBMSU5FQVJfU0NBTEVfSVRFTV9URU1QTEFURV9JRCxcbiAgTVVMVElQTEVfQ0hPSUNFX0dSSURfSVRFTV9URU1QTEFURV9JRCxcbiAgTVVMVElQTEVfQ0hPSUNFX0lURU1fVEVNUExBVEVfSUQsXG4gIE5VTUJFUkVEX0xJU1RfSVRFTV9URU1QTEFURV9JRCxcbiAgT0ZGU0VUX0RBVEVfUkFOR0VfSVRFTV9URU1QTEFURV9JRCxcbiAgUEFSQUdSQVBIX0FOU1dFUl9JVEVNX1RFTVBMQVRFX0lELFxuICBSRVBFQVRBQkxFX0lURU1fVEVNUExBVEVfSU1QTF9JRCxcbiAgUkVRVUVTVF9JRF9JVEVNX1RFTVBMQVRFX0lELFxuICBTSE9SVF9BTlNXRVJfSVRFTV9URU1QTEFURV9JRCxcbiAgVGVtcGxhdGUsXG4gIFRFTVBMQVRFX0lNUExfSUQsXG4gIFRFTVBMQVRFX0lURU1fR1JPVVBfSU1QTF9JRCxcbiAgVEVNUExBVEVfU0VDVElPTl9JTVBMX0lELFxuICBUZW1wbGF0ZUl0ZW0sXG4gIFRFWFRfSVRFTV9URU1QTEFURV9JRCxcbiAgVElNRV9JVEVNX1RFTVBMQVRFX0lELFxuICBUSVRMRV9JVEVNX1RFTVBMQVRFX0lELFxuICBXSE9MRV9OVU1CRVJfQU5TV0VSX0lURU1fVEVNUExBVEVfSUQsXG4gIFlFQVJfUVVBUlRFUl9SQU5HRV9JVEVNX1RFTVBMQVRFX0lELFxufSBmcm9tICdAbXRuYS93ZWItZm9ybS10cyc7XG5pbXBvcnQgeyBDb250ZXh0LCBEZXNpZ24sIERlc2lnbkJhc2UsIERlc2lnblByb3BlcnR5IH0gZnJvbSAnQG10bmEvZGVzaWduZXItdHMnO1xuaW1wb3J0IHsgZ2V0STE4blN0cmluZywgTXRuYUxhbmd1YWdlSWQgfSBmcm9tICdAbXRuYS9jb3JlLWkxOG4tYW5ndWxhcic7XG5pbXBvcnQgeyBUZW1wbGF0ZU1hcHBlciB9IGZyb20gJy4uL21vZGVscy9kZXNpZ24vZGVzaWduLW1hcHBlci90ZW1wbGF0ZS1tYXBwZXInO1xuaW1wb3J0IHsgaXNQcmVzZW50IH0gZnJvbSAnQG10bmEvY29yZS10cyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXdUZW1wbGF0ZShkZXNpZ25CYXNlOiBEZXNpZ25CYXNlKTogVGVtcGxhdGUge1xuICByZXR1cm4ge1xuICAgIGRlc2NyaXB0aXZlVGV4dDogW10sXG4gICAgaWQ6IGRlc2lnbkJhc2UuaWQsXG4gICAgaXRlbUlkOiBkZXNpZ25CYXNlLnR5cGUsXG4gICAgaXRlbXM6IFtdLFxuICAgIHRpdGxlOiBbXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVEZXNpZ24oZGVzaWduQmFzZTogRGVzaWduQmFzZSk6IERlc2lnbiB7XG4gIHJldHVybiB7IC4uLmRlc2lnbkJhc2UsIHNlY3Rpb25zOiBbXSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wbGF0ZURlc2lnbihkZXNpZ246IERlc2lnbkJhc2UpOiBib29sZWFuIHtcbiAgcmV0dXJuIGRlc2lnbi50eXBlID09PSBURU1QTEFURV9JTVBMX0lEO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wbGF0ZUl0ZW1EZXNpZ24oZGVzaWduOiBEZXNpZ25CYXNlKTogYm9vbGVhbiB7XG4gIHN3aXRjaCAoZGVzaWduLnR5cGUpIHtcbiAgICBjYXNlIEJPT0xFQU5fSVRFTV9URU1QTEFURV9JRDpcbiAgICBjYXNlIEJVTExFVEVEX0xJU1RfSVRFTV9URU1QTEFURV9JRDpcbiAgICBjYXNlIENIRUNLQk9YX0dSSURfVEVNUExBVEVfSUQ6XG4gICAgY2FzZSBDSEVDS0JPWF9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIGNhc2UgREFURV9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIGNhc2UgREVDSU1BTF9BTlNXRVJfSVRFTV9URU1QTEFURV9JRDpcbiAgICBjYXNlIERST1BET1dOX0lURU1fVEVNUExBVEVfSUQ6XG4gICAgY2FzZSBGSUxFX1VQTE9BRF9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIGNhc2UgSElEREVOX1JFRkVSRU5DRV9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIGNhc2UgSU5URVJOQVRJT05BTElaRURfUEFSQUdSQVBIX0FOU1dFUl9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIGNhc2UgSU5URVJOQVRJT05BTElaRURfU0hPUlRfQU5TV0VSX0lURU1fVEVNUExBVEVfSUQ6XG4gICAgY2FzZSBMSU5FQVJfU0NBTEVfSVRFTV9URU1QTEFURV9JRDpcbiAgICBjYXNlIE1VTFRJUExFX0NIT0lDRV9HUklEX0lURU1fVEVNUExBVEVfSUQ6XG4gICAgY2FzZSBNVUxUSVBMRV9DSE9JQ0VfSVRFTV9URU1QTEFURV9JRDpcbiAgICBjYXNlIE5VTUJFUkVEX0xJU1RfSVRFTV9URU1QTEFURV9JRDpcbiAgICBjYXNlIE9GRlNFVF9EQVRFX1JBTkdFX0lURU1fVEVNUExBVEVfSUQ6XG4gICAgY2FzZSBQQVJBR1JBUEhfQU5TV0VSX0lURU1fVEVNUExBVEVfSUQ6XG4gICAgY2FzZSBSRVBFQVRBQkxFX0lURU1fVEVNUExBVEVfSU1QTF9JRDpcbiAgICBjYXNlIFJFUVVFU1RfSURfSVRFTV9URU1QTEFURV9JRDpcbiAgICBjYXNlIFNIT1JUX0FOU1dFUl9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIGNhc2UgVEVNUExBVEVfSVRFTV9HUk9VUF9JTVBMX0lEOlxuICAgIGNhc2UgVEVNUExBVEVfU0VDVElPTl9JTVBMX0lEOlxuICAgIGNhc2UgVEVYVF9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIGNhc2UgVElNRV9JVEVNX1RFTVBMQVRFX0lEOlxuICAgIGNhc2UgVElUTEVfSVRFTV9URU1QTEFURV9JRDpcbiAgICBjYXNlIFdIT0xFX05VTUJFUl9BTlNXRVJfSVRFTV9URU1QTEFURV9JRDpcbiAgICBjYXNlIFlFQVJfUVVBUlRFUl9SQU5HRV9JVEVNX1RFTVBMQVRFX0lEOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wbGF0ZUl0ZW0oc29tZXRoaW5nOiB1bmtub3duKTogc29tZXRoaW5nIGlzIFRlbXBsYXRlSXRlbSB7XG4gIHJldHVybiAoXG4gICAgaW5zdGFuY2VPZkJvb2xlYW5JdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZCdWxsZXRlZExpc3RJdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZDaGVja2JveEdyaWRUZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZkNoZWNrYm94SXRlbVRlbXBsYXRlKHNvbWV0aGluZykgfHxcbiAgICBpbnN0YW5jZU9mRGF0ZUl0ZW1UZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZkRlY2ltYWxBbnN3ZXJJdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZEcm9wZG93bkl0ZW1UZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZkZpbGVVcGxvYWRJdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZIaWRkZW5SZWZlcmVuY2VJdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZJbnRlcm5hdGlvbmFsaXplZFBhcmFncmFwaEFuc3dlckl0ZW1UZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZkludGVybmF0aW9uYWxpemVkU2hvcnRBbnN3ZXJJdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZMaW5lYXJTY2FsZUl0ZW1UZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZk11bHRpcGxlQ2hvaWNlR3JpZEl0ZW1UZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZk11bHRpcGxlQ2hvaWNlSXRlbVRlbXBsYXRlKHNvbWV0aGluZykgfHxcbiAgICBpbnN0YW5jZU9mTnVtYmVyZWRMaXN0SXRlbVRlbXBsYXRlKHNvbWV0aGluZykgfHxcbiAgICBpbnN0YW5jZU9mT2Zmc2V0RGF0ZVJhbmdlVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZQYXJhZ3JhcGhBbnN3ZXJJdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZSZXBlYXRhYmxlSXRlbVRlbXBsYXRlKHNvbWV0aGluZykgfHxcbiAgICBpbnN0YW5jZU9mUmVxdWVzdElkSXRlbVRlbXBsYXRlKHNvbWV0aGluZykgfHxcbiAgICBpbnN0YW5jZU9mU2hvcnRBbnN3ZXJJdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZUZW1wbGF0ZUl0ZW1Hcm91cEltcGwoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZUZW1wbGF0ZVNlY3Rpb25JbXBsKHNvbWV0aGluZykgfHxcbiAgICBpbnN0YW5jZU9mVGV4dEl0ZW1UZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZlRpbWVJdGVtVGVtcGxhdGUoc29tZXRoaW5nKSB8fFxuICAgIGluc3RhbmNlT2ZUaXRsZUl0ZW1UZW1wbGF0ZShzb21ldGhpbmcpIHx8XG4gICAgaW5zdGFuY2VPZldob2xlTnVtYmVyQW5zd2VySXRlbVRlbXBsYXRlKHNvbWV0aGluZykgfHxcbiAgICBpbnN0YW5jZU9mWWVhclF1YXJ0ZXJSYW5nZVRlbXBsYXRlKHNvbWV0aGluZylcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRlbXBsYXRlUG90ZW50aWFsRGVzaWducyhkZXNpZ246IERlc2lnbiwgcHJvcGVydHk6IERlc2lnblByb3BlcnR5KTogRGVzaWduQmFzZVtdIHtcbiAgcmV0dXJuIGdldFRlbXBsYXRlTWFwcGVyRnJvbURlc2lnbihkZXNpZ24pLmdldFBvdGVudGlhbERlc2lnbnMocHJvcGVydHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGVUb0Rlc2lnbih0ZW1wbGF0ZTogVGVtcGxhdGUsIGxhbmd1YWdlSWQ6IE10bmFMYW5ndWFnZUlkLCBjb250ZXh0PzogQ29udGV4dCk6IERlc2lnbiB7XG4gIHJldHVybiBuZXcgVGVtcGxhdGVNYXBwZXIoeyBtb2RlbDogdGVtcGxhdGUsIGxhbmd1YWdlSWQsIGNvbnRleHQgfSkuZ2V0RGVzaWduKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1RlbXBsYXRlKGRlc2lnbjogRGVzaWduLCBjb250ZXh0PzogQ29udGV4dCk6IFRlbXBsYXRlIHtcbiAgcmV0dXJuIG5ldyBUZW1wbGF0ZU1hcHBlcih7IGRlc2lnbiwgY29udGV4dCB9KS5nZXRNb2RlbCgpO1xufVxuXG5mdW5jdGlvbiBnZXRUZW1wbGF0ZU1hcHBlckZyb21EZXNpZ24oZGVzaWduOiBEZXNpZ24pOiBUZW1wbGF0ZU1hcHBlciB7XG4gIHJldHVybiBuZXcgVGVtcGxhdGVNYXBwZXIoeyBkZXNpZ24gfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZXh0KHByb3BlcnRpZXM6IHsgW3A6IHN0cmluZ106IGFueSB9LCBrZXk6IHN0cmluZywgaTE4bjogYm9vbGVhbiwgbGFuZ3VhZ2VJZDogTXRuYUxhbmd1YWdlSWQsIGZhbGxiYWNrID0gJycpOiBzdHJpbmcge1xuICBpZiAoaXNQcmVzZW50KHByb3BlcnRpZXNba2V5XSkgJiYgcHJvcGVydGllc1trZXldICE9PSAnJykge1xuICAgIGlmIChpMThuKSB7XG4gICAgICByZXR1cm4gZ2V0STE4blN0cmluZyhwcm9wZXJ0aWVzW2tleV0sIGxhbmd1YWdlSWQsIHRydWUpID8/ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcHJvcGVydGllc1trZXldO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsbGJhY2s7XG4gIH1cbn1cbiJdfQ==