@mediusinc/mng-commons 5.0.0-rc.1 → 5.0.0-rc.2

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 (123) hide show
  1. package/core/router/route-builder.d.ts +149 -26
  2. package/core/router/routes-builder.d.ts +28 -13
  3. package/esm2022/core/components/notification/notification-wrapper.component.mjs +3 -3
  4. package/esm2022/core/components/pages/error/error.page.component.mjs +3 -3
  5. package/esm2022/core/components/pages/not-found/not-found.page.component.mjs +3 -3
  6. package/esm2022/core/directives/component.directive.mjs +3 -3
  7. package/esm2022/core/directives/dialog-keydown-handler.directive.mjs +3 -3
  8. package/esm2022/core/directives/template.directive.mjs +3 -3
  9. package/esm2022/core/pipes/boolean.pipe.mjs +3 -3
  10. package/esm2022/core/pipes/class-map.pipe.mjs +3 -3
  11. package/esm2022/core/pipes/enum.pipe.mjs +3 -3
  12. package/esm2022/core/pipes/enumerate-async.pipe.mjs +3 -3
  13. package/esm2022/core/pipes/enumerate.pipe.mjs +3 -3
  14. package/esm2022/core/pipes/getter.pipe.mjs +3 -3
  15. package/esm2022/core/pipes/i18n-property.pipe.mjs +3 -3
  16. package/esm2022/core/pipes/json-path.pipe.mjs +3 -3
  17. package/esm2022/core/pipes/parametrize.pipe.mjs +3 -3
  18. package/esm2022/core/pipes/template.pipe.mjs +3 -3
  19. package/esm2022/core/router/route-builder.mjs +211 -84
  20. package/esm2022/core/router/routes-builder.mjs +41 -43
  21. package/esm2022/core/security/permission.service.mjs +3 -3
  22. package/esm2022/core/services/commons-init.service.mjs +3 -3
  23. package/esm2022/core/services/commons-router.service.mjs +3 -3
  24. package/esm2022/core/services/commons.service.mjs +3 -3
  25. package/esm2022/core/services/local-storage-config.service.mjs +3 -3
  26. package/esm2022/form/components/autocomplete/autocomplete.component.mjs +36 -42
  27. package/esm2022/form/components/date-range/date-range.component.mjs +3 -3
  28. package/esm2022/form/components/dropdown/dropdown.component.mjs +3 -3
  29. package/esm2022/form/directives/input-trim.directive.mjs +3 -3
  30. package/esm2022/table/components/column-filter-full/column-filter-full.component.mjs +3 -3
  31. package/esm2022/table/components/column-value/column-value.component.mjs +3 -3
  32. package/esm2022/table/components/table/table.component.mjs +3 -3
  33. package/esm2022/table/pipes/locale-default-row-class.pipe.mjs +3 -3
  34. package/esm2022/table/pipes/table-column-filter-class.pipe.mjs +3 -3
  35. package/esm2022/table/services/data-list.service.mjs +3 -3
  36. package/esm2022/tableview/action/components/action/action.component.mjs +3 -3
  37. package/esm2022/tableview/action/components/editor/action-editor.component.mjs +3 -3
  38. package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +20 -19
  39. package/esm2022/tableview/action/components/localization/data-language-dropdown.component.mjs +3 -3
  40. package/esm2022/tableview/action/components/route/action-route.component.mjs +6 -5
  41. package/esm2022/tableview/action/components/table/action-table.component.mjs +3 -3
  42. package/esm2022/tableview/action/models/execution/action-instance.model.mjs +1 -1
  43. package/esm2022/tableview/action/services/action-executor.service.mjs +2 -2
  44. package/esm2022/tableview/action/services/component-action-executor.service.mjs +3 -3
  45. package/esm2022/tableview/action/services/data-provider-executor.service.mjs +3 -3
  46. package/esm2022/tableview/action/services/navigation.service.mjs +3 -3
  47. package/esm2022/tableview/action/services/root-action-executor.service.mjs +3 -3
  48. package/esm2022/tableview/action/services/view-container.service.mjs +3 -3
  49. package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +9 -1
  50. package/esm2022/tableview/api/action/models/execution/action-instance.model.mjs +1 -1
  51. package/esm2022/tableview/api/editor/descriptors/editor.descriptor.mjs +18 -29
  52. package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +1 -1
  53. package/esm2022/tableview/api/editor/descriptors/field-group.descriptor.mjs +3 -3
  54. package/esm2022/tableview/api/editor/descriptors/field-validation.descriptor.mjs +1 -1
  55. package/esm2022/tableview/api/editor/descriptors/field.descriptor.mjs +36 -7
  56. package/esm2022/tableview/api/editor/helpers/field-validators.mjs +15 -25
  57. package/esm2022/tableview/api/editor/models/editor-fields.model.mjs +1 -1
  58. package/esm2022/tableview/api/editor/models/field.model.mjs +1 -1
  59. package/esm2022/tableview/api/editor/models/form-editor.event.mjs +1 -1
  60. package/esm2022/tableview/api/editor/models/form-editor.interface.mjs +1 -1
  61. package/esm2022/tableview/api/editor/models/formly-custom-field.model.mjs +3 -3
  62. package/esm2022/tableview/api/editor/models/formly-field.model.mjs +1 -1
  63. package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +12 -19
  64. package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +157 -137
  65. package/esm2022/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.mjs +3 -3
  66. package/esm2022/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +5 -7
  67. package/esm2022/tableview/editor/components/formly/fields/formly-field-custom/formly-field-custom.component.mjs +3 -3
  68. package/esm2022/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.mjs +103 -0
  69. package/esm2022/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +5 -7
  70. package/esm2022/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +3 -3
  71. package/esm2022/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.mjs +33 -50
  72. package/esm2022/tableview/editor/components/formly/fields/formly-field-label/formly-field-label.component.mjs +3 -3
  73. package/esm2022/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +5 -7
  74. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +6 -8
  75. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +14 -13
  76. package/esm2022/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +3 -3
  77. package/esm2022/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +3 -3
  78. package/esm2022/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +3 -3
  79. package/esm2022/tableview/editor/helpers/editor-formly.mjs +62 -54
  80. package/esm2022/tableview/editor/helpers/formly-config.mjs +5 -3
  81. package/esm2022/tableview/editor/models/formly-config.model.mjs +1 -1
  82. package/esm2022/tableview/tableview/components/route/tableview-route.component.mjs +10 -10
  83. package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +26 -43
  84. package/esm2022/tableview/tableview/router/tableview-route-builder.mjs +17 -43
  85. package/fesm2022/mediusinc-mng-commons-core.mjs +311 -186
  86. package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
  87. package/fesm2022/mediusinc-mng-commons-form.mjs +46 -51
  88. package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
  89. package/fesm2022/mediusinc-mng-commons-table.mjs +18 -18
  90. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +89 -80
  91. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
  92. package/fesm2022/mediusinc-mng-commons-tableview.mjs +497 -435
  93. package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
  94. package/form/components/autocomplete/autocomplete.component.d.ts +8 -7
  95. package/package.json +1 -1
  96. package/tableview/action/components/editor/injector-context/action-editor-injector-context.component.d.ts +1 -3
  97. package/tableview/action/components/route/action-route.component.d.ts +1 -1
  98. package/tableview/action/models/execution/action-instance.model.d.ts +2 -1
  99. package/tableview/api/action/descriptors/action-editor.descriptor.d.ts +8 -0
  100. package/tableview/api/action/models/execution/action-instance.model.d.ts +2 -1
  101. package/tableview/api/editor/descriptors/editor.descriptor.d.ts +14 -19
  102. package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +24 -24
  103. package/tableview/api/editor/descriptors/field-group.descriptor.d.ts +5 -5
  104. package/tableview/api/editor/descriptors/field-validation.descriptor.d.ts +10 -13
  105. package/tableview/api/editor/descriptors/field.descriptor.d.ts +15 -0
  106. package/tableview/api/editor/helpers/field-validators.d.ts +6 -2
  107. package/tableview/api/editor/models/editor-fields.model.d.ts +6 -4
  108. package/tableview/api/editor/models/field.model.d.ts +16 -7
  109. package/tableview/api/editor/models/form-editor.event.d.ts +6 -4
  110. package/tableview/api/editor/models/form-editor.interface.d.ts +37 -8
  111. package/tableview/api/editor/models/formly-custom-field.model.d.ts +1 -1
  112. package/tableview/api/editor/models/formly-field.model.d.ts +9 -7
  113. package/tableview/api/tableview/descriptors/tableview.descriptor.d.ts +6 -7
  114. package/tableview/editor/components/editor/form-editor.component.d.ts +51 -35
  115. package/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.d.ts +22 -0
  116. package/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.d.ts +5 -7
  117. package/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +0 -1
  118. package/tableview/editor/helpers/editor-formly.d.ts +11 -10
  119. package/tableview/editor/models/formly-config.model.d.ts +1 -1
  120. package/tableview/tableview/components/route/tableview-route.component.d.ts +2 -2
  121. package/tableview/tableview/components/tableview/tableview.component.d.ts +11 -10
  122. package/tableview/tableview/router/tableview-route-builder.d.ts +7 -13
  123. package/version-info.json +11 -0
@@ -359,30 +359,10 @@ export class EditorDescriptorInst {
359
359
  this.addFieldDescriptor(field);
360
360
  return field;
361
361
  }
362
- /**
363
- * Adds tables for many-to-many (m:n) relations.
364
- * @param property Model's property name.
365
- * @param mainTableDescriptor Main table descriptor for displaying items added to main model's property.
366
- * @param lookupTableDescriptor Lookup table descriptor for displaying items to be added to main model's property.
367
- */
368
- addFieldManyToManyEditor(property, mainTableDescriptor, lookupTableDescriptor) {
369
- return this.addFieldManyToManyEditorUnsafe(property, mainTableDescriptor, lookupTableDescriptor);
370
- }
371
- /**
372
- * Adds tables for many-to-many (m:n) relations (UNSAFE).
373
- * @param property Model's property name.
374
- * @param mainTableDescriptor Main table descriptor for displaying items added to main model's property.
375
- * @param lookupTableDescriptor Lookup table descriptor for displaying items to be added to main model's property.
376
- */
377
- addFieldManyToManyEditorUnsafe(property, mainTableDescriptor, lookupTableDescriptor) {
378
- const field = new FieldManyToManyEditorDescriptor(this, property, mainTableDescriptor, lookupTableDescriptor);
379
- this.addFieldDescriptor(field);
380
- return field;
381
- }
382
- addFieldManyToManyEditorWithProvider(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider) {
383
- return this.addFieldManyToManyEditorWithProviderUnsafe(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider);
362
+ addFieldManyToManyEditor(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider) {
363
+ return this.addFieldManyToManyEditorUnsafe(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider);
384
364
  }
385
- addFieldManyToManyEditorWithProviderUnsafe(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider) {
365
+ addFieldManyToManyEditorUnsafe(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider) {
386
366
  const cfg = fieldManyToManyGetProviderCfgObj(lookupDataProvider);
387
367
  const field = new FieldManyToManyEditorDescriptor(this, property, mainTableDescriptor, lookupTableDescriptor, {
388
368
  ...cfg
@@ -403,11 +383,23 @@ export class EditorDescriptorInst {
403
383
  * @param name Name of the validation.
404
384
  * @param validator Field validator function.
405
385
  * @param message Field validation message.
386
+ * @param opts Additional configuration for validation.
406
387
  */
407
- addValidation(name, validator, message) {
388
+ withValidation(name, validator, message, opts) {
389
+ return this.withValidationUnsafe(name, validator, message, opts);
390
+ }
391
+ /**
392
+ * Adds group validator to editor.
393
+ * @param name Name of the validation.
394
+ * @param validator Field validator function.
395
+ * @param message Field validation message.
396
+ * @param opts Additional configuration for validation.
397
+ */
398
+ withValidationUnsafe(name, validator, message, opts) {
408
399
  if (this._currentGroup) {
409
- this._currentGroup.withValidation(name, validator, message);
400
+ this._currentGroup.withValidation(name, validator, message, opts);
410
401
  }
402
+ return this;
411
403
  }
412
404
  /**
413
405
  * Creates a copy of editor descriptor object.
@@ -553,9 +545,6 @@ export class EditorDescriptorInst {
553
545
  data: data
554
546
  });
555
547
  }
556
- completeEvents() {
557
- this._eventsSubject.complete();
558
- }
559
548
  get events$() {
560
549
  return this._eventsSubject.asObservable();
561
550
  }
@@ -623,4 +612,4 @@ export class EditorDescriptor extends EditorDescriptorInst {
623
612
  return descriptor;
624
613
  }
625
614
  }
626
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90YWJsZXZpZXcvYXBpL3NyYy9lZGl0b3IvZGVzY3JpcHRvcnMvZWRpdG9yLmRlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBR0gsb0JBQW9CLEVBUXBCLFlBQVksRUFDWixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ3BCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFpQixlQUFlLEVBQWtCLGdCQUFnQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDL0csT0FBTyxFQUEwQyxrQ0FBa0MsRUFBRSxzQ0FBc0MsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBR3JLLE9BQU8sRUFBQywwQkFBMEIsRUFBRSwrQkFBK0IsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBR2pILE9BQU8sRUFBQyx5QkFBeUIsRUFBRSx1QkFBdUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzFGLE9BQU8sRUFBQyxrQkFBa0IsRUFBeUMsTUFBTSx1QkFBdUIsQ0FBQztBQUVqRyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RixPQUFPLEVBQUMscUJBQXFCLEVBQUUseUJBQXlCLEVBQTJCLDRCQUE0QixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbEosT0FBTyxFQUFDLHlCQUF5QixFQUFFLCtCQUErQixFQUFFLGdDQUFnQyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDckksT0FBTyxFQUFDLG9CQUFvQixFQUEyQixNQUFNLG9CQUFvQixDQUFDO0FBRWxGLE1BQU0sT0FBTyxvQkFBb0I7YUFDTixxQkFBZ0IsR0FBRyx5QkFBeUIsQUFBNUIsQ0FBNkI7SUFtQnBFOzs7O09BSUc7SUFDSCxZQUFzQixLQUFtQyxFQUFFLG1CQUFtQixHQUFHLHVCQUF1QixDQUFDLElBQUk7UUFwQjdHLGNBQWMsQ0FBb0IsVUFBSyxHQUFnRCxFQUFFLENBQUM7UUFDMUYsY0FBYyxDQUFvQixZQUFPLEdBQTZDLEVBQUUsQ0FBQztRQUN6RixjQUFjLENBQVcsWUFBTyxHQUE4QyxFQUFFLENBQUM7UUFJakYsY0FBYyxDQUFXLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFM0MsY0FBYyxDQUFXLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBSzlDLGNBQWMsQ0FBb0IsbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBMEIsQ0FBQztRQVFyRixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsbUJBQW1CLENBQUM7SUFDcEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxLQUFLO1FBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsSUFBSTtRQUNYLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLE1BQU07UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxtQkFBbUI7UUFDMUIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDckMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDbEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFXLDBCQUEwQjtRQUNqQyxPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBVyxnQ0FBZ0M7UUFDdkMsT0FBTyxJQUFJLENBQUMsaUNBQWlDLENBQUM7SUFDbEQsQ0FBQztJQUVELElBQVcsaUJBQWlCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ25DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksY0FBYyxDQUFDLElBQVksRUFBRSxLQUFjO1FBQzlDLE1BQU0sUUFBUSxHQUFHLElBQUksdUJBQXVCLENBQWMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNULEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsS0FBcUI7UUFDdkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxvQkFBb0IsQ0FBYyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckUsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNULEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBQ0QsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxRQUFRLENBQUMsUUFBMkI7UUFDdkMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQWtCLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksY0FBYyxDQUFDLFFBQWdCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQztJQUNuRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksV0FBVyxDQUFDLFFBQTJCO1FBQzFDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQWtCLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksaUJBQWlCLENBQUMsUUFBZ0I7UUFDckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ3RFLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLG9CQUFvQixDQUFDLFNBQVMsUUFBUSxrQkFBa0IsRUFBRSxFQUFDLElBQUksRUFBRSx1QkFBdUIsRUFBQyxDQUFDLENBQUM7UUFDekcsQ0FBQztRQUNELEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQy9CLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUM7WUFDNUcsSUFBSSxhQUFhLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3JCLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDdEMsTUFBTTtZQUNWLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxrQkFBa0IsQ0FBc0MsS0FBNEQ7UUFDdkgsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFFBQVEsQ0FBMEgsUUFBa0I7UUFDdkosTUFBTSxLQUFLLEdBQUcsSUFBSSxvQkFBb0IsQ0FBc0MsSUFBSSxFQUFFLFFBQWtCLENBQUMsQ0FBQztRQUN0RyxJQUFJLENBQUMsa0JBQWtCLENBQXlCLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksY0FBYyxDQUFpRSxRQUFnQjtRQUNsRyxNQUFNLEtBQUssR0FBRyxJQUFJLG9CQUFvQixDQUFzQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLGtCQUFrQixDQUF5QixLQUFLLENBQUMsQ0FBQztRQUN2RCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU0sU0FBUyxDQUFDLEdBQUcsVUFBaUM7UUFDakQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sY0FBYyxDQUFDLFVBQWtCO1FBQ3BDLE1BQU0sS0FBSyxHQUFHLElBQUkscUJBQXFCLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLGNBQWMsQ0FBc0csUUFBVyxFQUFFLElBQWtDO1FBQ3RLLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUEwQixRQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksb0JBQW9CLENBQXdDLFFBQWdCLEVBQUUsSUFBa0M7UUFDbkgsTUFBTSxLQUFLLEdBQUcsSUFBSSxxQkFBcUIsQ0FBa0QsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUNyRyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVM7U0FDeEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSSxzQ0FBc0MsQ0FLM0MsUUFBa0IsRUFBRSxJQUFpQyxFQUFFLDBCQUErQztRQUNwRyxPQUFPLElBQUksQ0FBQyw0Q0FBNEMsQ0FBMEIsUUFBa0IsRUFBRSxJQUFJLEVBQUUsMEJBQW9DLENBQUMsQ0FBQztJQUN0SixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNJLDRDQUE0QyxDQUMvQyxRQUFnQixFQUNoQixJQUFpQyxFQUNqQywwQkFBa0M7UUFFbEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxxQkFBcUIsQ0FBa0QsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUNyRyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVM7WUFDckIsb0JBQW9CLEVBQUUsMEJBQTBCO1NBQ25ELENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBMEIsS0FBSyxDQUFDLENBQUM7UUFDeEQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNJLDBCQUEwQixDQUM3QixRQUFrQixFQUNsQixRQUF1RCxFQUN2RCxJQUFrQztRQUVsQyxPQUFPLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBbUMsUUFBa0IsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkgsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNJLGdDQUFnQyxDQUNuQyxRQUFnQixFQUNoQixRQUF1RCxFQUN2RCxJQUFrQztRQUVsQyxNQUFNLEdBQUcsR0FBRyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRCxNQUFNLEtBQUssR0FBRyxJQUFJLHFCQUFxQixDQUFnRCxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ25HLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUztZQUNyQixHQUFHLEdBQUc7U0FDVCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0gsaURBQWlELENBTzdDLFFBQWtCLEVBQ2xCLFFBQXVELEVBQ3ZELElBQWlDLEVBQ2pDLDBCQUErQztRQUUvQyxPQUFPLElBQUksQ0FBQyx1REFBdUQsQ0FBQyxRQUFrQixFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsMEJBQW9DLENBQUMsQ0FBQztJQUNsSixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILHVEQUF1RCxDQUNuRCxRQUFnQixFQUNoQixRQUF1RCxFQUN2RCxJQUFpQyxFQUNqQywwQkFBa0M7UUFFbEMsTUFBTSxHQUFHLEdBQUcsNEJBQTRCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkQsTUFBTSxLQUFLLEdBQUcsSUFBSSxxQkFBcUIsQ0FBZ0QsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUNuRyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVM7WUFDckIsb0JBQW9CLEVBQUUsMEJBQTBCO1lBQ2hELEdBQUcsR0FBRztTQUNULENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU0sa0JBQWtCLENBQ3JCLFFBQTJCLEVBQzNCLFFBQThCLEVBQzlCLE9BQXFCO1FBRXJCLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFPLFFBQWtCLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLHdCQUF3QixDQUEwQixRQUFnQixFQUFFLFFBQThCLEVBQUUsT0FBcUI7UUFDNUgsTUFBTSxLQUFLLEdBQUcsSUFBSSx5QkFBeUIsQ0FBb0IsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksa0JBQWtCLENBQ3JCLFFBQWtCLEVBQ2xCLG1CQUF3RDtRQUV4RCxPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBeUIsUUFBa0IsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQzFHLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksd0JBQXdCLENBQXdDLFFBQWdCLEVBQUUsbUJBQXdEO1FBQzdJLE1BQU0sS0FBSyxHQUFHLElBQUkseUJBQXlCLENBQXNDLElBQUksRUFBRSxRQUFRLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUN0SCxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksd0JBQXdCLENBQzNCLFFBQWtCLEVBQ2xCLG1CQUFvRCxFQUNwRCxxQkFBc0Q7UUFFdEQsT0FBTyxJQUFJLENBQUMsOEJBQThCLENBQXlCLFFBQWtCLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLENBQUMsQ0FBQztJQUN2SSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSw4QkFBOEIsQ0FDakMsUUFBZ0IsRUFDaEIsbUJBQW9ELEVBQ3BELHFCQUFzRDtRQUV0RCxNQUFNLEtBQUssR0FBRyxJQUFJLCtCQUErQixDQUFpRCxJQUFJLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDOUosSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9CLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTSxvQ0FBb0MsQ0FNdkMsUUFBa0IsRUFDbEIsbUJBQW9ELEVBQ3BELHFCQUFzRCxFQUN0RCxrQkFBK0Q7UUFFL0QsT0FBTyxJQUFJLENBQUMsMENBQTBDLENBQ2xELFFBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsa0JBQWtCLENBQ3JCLENBQUM7SUFDTixDQUFDO0lBRU0sMENBQTBDLENBQzdDLFFBQWdCLEVBQ2hCLG1CQUFvRCxFQUNwRCxxQkFBc0QsRUFDdEQsa0JBQStEO1FBRS9ELE1BQU0sR0FBRyxHQUFHLGdDQUFnQyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDakUsTUFBTSxLQUFLLEdBQUcsSUFBSSwrQkFBK0IsQ0FBbUQsSUFBSSxFQUFFLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRTtZQUM1SixHQUFHLEdBQUc7U0FDVCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFlBQVksQ0FBQyxRQUFRLEdBQUcsSUFBSTtRQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxhQUFhLENBQUMsSUFBWSxFQUFFLFNBQTBCLEVBQUUsT0FBZ0M7UUFDM0YsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksSUFBSTtRQUNQLE1BQU0sTUFBTSxHQUFHLElBQUksb0JBQW9CLENBQWMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNsRyxLQUFLLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUNELEtBQUssTUFBTSxRQUFRLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xDLEtBQUssTUFBTSxVQUFVLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN2QyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QyxDQUFDO1lBQ0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqRyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDbEMsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSwwQkFBMEIsQ0FBQyxVQUE2QztRQUMzRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ08sd0JBQXdCLENBQUMsUUFBOEM7UUFDN0UsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztRQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssa0JBQWtCO1FBQ3RCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0sscUJBQXFCO1FBQ3pCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxxQkFBcUIsQ0FBQyxRQUEyQixFQUFFLFNBQTZCLEVBQUUsR0FBRyxJQUFXO1FBQ25HLE9BQU8sSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQWtCLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVNLDJCQUEyQixDQUFDLFFBQWdCLEVBQUUsU0FBNkIsRUFBRSxHQUFHLElBQVc7UUFDOUYsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkIsTUFBTSxJQUFJLG9CQUFvQixDQUFDLHlEQUF5RCxRQUFRLDhCQUE4QixDQUFDLENBQUM7UUFDcEksQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLDBCQUEwQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQztRQUM3RyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ1osU0FBUyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFDaEMsb0JBQW9CLENBQUMsMkJBQTJCLENBQzVDLElBQUksRUFDSixTQUFTLEVBQ1QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxFQUNoRCxHQUFHLElBQUksQ0FDVixDQUFDO1FBQ04sQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLHFCQUFxQixDQUN4QixRQUFrQixFQUNsQixTQUFnQyxFQUNoQyxNQUFvQjtRQUVwQixPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFrQixFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRU0sMkJBQTJCLENBQWEsUUFBZ0IsRUFBRSxRQUErQixFQUFFLE1BQW9CO1FBQ2xILElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyx5REFBeUQsUUFBUSw4QkFBOEIsQ0FBQyxDQUFDO1FBQ3BJLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDN0YsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNaLFNBQVMsQ0FBQyxTQUFTLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDO1lBQy9DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQztZQUM3RCxJQUFJLEtBQUssSUFBSSxLQUFLLFlBQVksb0JBQW9CLEVBQUUsQ0FBQztnQkFDakQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxRQUFRLElBQUksZ0JBQWdCLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFhLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN6SCxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLG1DQUFtQyxDQUN0QyxRQUEyQixFQUMzQixjQUE0RCxFQUM1RCxhQUFnQztRQUVoQyxPQUFPLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxRQUFrQixFQUFFLGNBQWMsRUFBRSxhQUF1QixDQUFDLENBQUM7SUFDdkgsQ0FBQztJQUVNLHlDQUF5QyxDQUM1QyxRQUFnQixFQUNoQixjQUF3RCxFQUN4RCxhQUFzQjtRQUV0QixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdDQUFnQyxDQUFzQixRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFcEgsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNmLEtBQXlDLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkYsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFNBQVMsQ0FDWixRQUFrQixFQUNsQixLQUF5QyxFQUN6QyxjQUF1QztRQUV2QyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBa0IsRUFBRSxLQUFLLEVBQUUsY0FBd0IsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFTSxlQUFlLENBQW1CLFFBQWdCLEVBQUUsS0FBd0MsRUFBRSxjQUFzQjtRQUN2SCxJQUFJLENBQUMsaUNBQWlDLEdBQUcsUUFBa0IsQ0FBQztRQUM1RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQywyQkFBMkIsR0FBRyxjQUF3QixDQUFDO1FBQzVELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXpCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxTQUFTLENBQUMsSUFBdUIsRUFBRSxPQUFrQixFQUFFLFdBQWdCLEVBQUUsSUFBa0M7UUFDOUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFDckIsSUFBSSxFQUFFLElBQUk7WUFDVixhQUFhLEVBQUUsT0FBTztZQUN0QixpQkFBaUIsRUFBRSxXQUFXO1lBQzlCLElBQUksRUFBRSxJQUFJO1NBQ2IsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLGNBQWM7UUFDakIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ08sTUFBTSxDQUFDLDJCQUEyQixDQUN4QyxVQUFtQyxFQUNuQyxTQUFrQyxFQUNsQyxLQUFnQyxFQUNoQyxHQUFHLElBQVc7UUFFZCxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNoQixLQUFLLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELElBQUksS0FBSyxZQUFZLG9CQUFvQixFQUFFLENBQUM7WUFDeEMsSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3JCLE9BQU8sS0FBSyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN2RSxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osTUFBTSxlQUFlLEdBQUcsc0NBQXNDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvRSxNQUFNLHNCQUFzQixHQUFHLGtDQUFrQyxDQUFDLGVBQWUsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25HLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxJQUFJLCtCQUErQixDQUFDLGVBQWUsRUFBRSxzQkFBc0IsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDbEksQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDOztBQUdMLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxvQkFBeUI7SUFDM0Q7UUFDSSxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxNQUFNLENBQ2hCLFVBQThCLEVBQzlCLGFBQWlDLEVBQ2pDLFdBQXlDLEVBQ3pDLG1CQUFtQixHQUFHLHVCQUF1QixDQUFDLElBQUk7UUFFbEQsT0FBTyxJQUFJLG9CQUFvQixDQUFjLGVBQWUsQ0FBQyxNQUFNLENBQWMsVUFBVSxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ25KLENBQUM7SUFFTSxNQUFNLENBQUMsU0FBUyxDQUNuQixJQUE0QixFQUM1QixVQUE4QixFQUM5QixhQUFpQyxFQUNqQyxXQUF5QyxFQUN6QyxtQkFBbUIsR0FBRyx1QkFBdUIsQ0FBQyxJQUFJO1FBRWxELE9BQU8sSUFBSSxvQkFBb0IsQ0FBYyxlQUFlLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFdBQVcsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDL0ksQ0FBQztJQUVNLE1BQU0sQ0FBQyxTQUFTLENBQWMsS0FBbUMsRUFBRSxtQkFBbUIsR0FBRyx1QkFBdUIsQ0FBQyxJQUFJO1FBQ3hILE9BQU8sSUFBSSxvQkFBb0IsQ0FBYyxLQUFLLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLHlCQUF5QixDQUNuQyxJQUE0QixFQUM1QixVQUE4QixFQUM5QixhQUFpQyxFQUNqQyxlQUFlLEdBQUcsdUJBQXVCLENBQUMsSUFBSTtRQUU5QyxPQUFPLGdCQUFnQixDQUFDLDJCQUEyQixDQUFDLElBQUksRUFBRSwwQkFBMEIsQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzVJLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFDLDJCQUEyQixDQUNyQyxJQUE0QixFQUM1QixVQUFxQyxFQUNyQyxVQUE4QixFQUM5QixhQUFpQyxFQUNqQyxlQUFlLEdBQUcsdUJBQXVCLENBQUMsSUFBSTtRQUU5QyxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBRTNHLFVBQVU7YUFDTCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDMUUsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ1osb0JBQW9CLENBQUMsMkJBQTJCLENBQzVDLFVBQVUsRUFDVixJQUFJLEVBQ0osVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDNUQsQ0FDSixDQUFDO1FBQ04sT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgICBBcnJheUl0ZW1UeXBlLFxuICAgIENsYXNzVHlwZSxcbiAgICBDb21tb25zSW50ZXJuYWxFcnJvcixcbiAgICBFbnVtQ29uc3RhbnRUeXBlLFxuICAgIEVudW1UeXBlLFxuICAgIElFZGl0b3JEZXNjcmlwdG9yLFxuICAgIElMb29rdXBEYXRhUHJvdmlkZXIsXG4gICAgSWRUeXBlLFxuICAgIEtleW9mQW5kT2ZUeXBlLFxuICAgIE51bGxhYmxlLFxuICAgIFR5cGVSZWdpc3RyeSxcbiAgICBnZXRJMThuVHlwZUdyb3VwS2V5LFxuICAgIGdldEkxOG5UeXBlVGFiS2V5XG59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0VudW1EZXNjcmlwdG9yLCBNb2RlbERlc2NyaXB0b3IsIFR5cGVEZXNjcmlwdG9yLCBlbnVtTW9kZWxHZW5lcmljfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL21vZGVsJztcbmltcG9ydCB7SVRhYmxlRGF0YVByb3ZpZGVyLCBUYWJsZURlc2NyaXB0b3JJbnN0LCBnZXRDb2x1bW5EaXNwbGF5VHlwZUZyb21Db2x1bW5UeXBlLCBnZXRDb2x1bW5UeXBlRnJvbUNsYXNzQXR0cmlidXRlRGVmVHlwZX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZS9hcGknO1xuXG5pbXBvcnQge1RhYmxldmlld0Rlc2NyaXB0b3JJbnN0fSBmcm9tICcuLi8uLi90YWJsZXZpZXcvZGVzY3JpcHRvcnMvdGFibGV2aWV3LmRlc2NyaXB0b3InO1xuaW1wb3J0IHtnZXRFZGl0b3JDbGFzc0F0dHJpYnV0ZURlZiwgZ2V0RmllbGRJbnB1dFR5cGVGcm9tQ29sdW1uVHlwZX0gZnJvbSAnLi4vaGVscGVycy9jbGFzcy1hdHRyaWJ1dGUtY29udmVydGVyJztcbmltcG9ydCB7RWRpdG9yQ2xhc3NBdHRyaWJ1dGVEZWZ9IGZyb20gJy4uL21vZGVscy9jbGFzcy10YWJsZXZpZXctYXR0cmlidXRlLm1vZGVsJztcbmltcG9ydCB7SUZpZWxkc01hbmFnZUludGVyZmFjZX0gZnJvbSAnLi4vbW9kZWxzL2VkaXRvci1maWVsZHMubW9kZWwnO1xuaW1wb3J0IHtFRElUT1JfREVGQVVMVF9HUk9VUF9OQU1FLCBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bX0gZnJvbSAnLi4vbW9kZWxzL2VkaXRvci5tb2RlbCc7XG5pbXBvcnQge0ZpZWxkSW5wdXRUeXBlRW51bSwgRmllbGRWYWxpZGF0aW9uTWVzc2FnZSwgRmllbGRWYWxpZGF0b3J9IGZyb20gJy4uL21vZGVscy9maWVsZC5tb2RlbCc7XG5pbXBvcnQge0ZpZWxkRXZlbnREYXRhLCBGb3JtRXZlbnQsIEZvcm1FdmVudFR5cGVFbnVtfSBmcm9tICcuLi9tb2RlbHMvZm9ybS1lZGl0b3IuZXZlbnQnO1xuaW1wb3J0IHtGaWVsZEFjdGlvbkRlc2NyaXB0b3J9IGZyb20gJy4vZmllbGQtYWN0aW9uLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtBRmllbGREZXNjcmlwdG9yfSBmcm9tICcuL2ZpZWxkLWJhc2UuZGVzY3JpcHRvcic7XG5pbXBvcnQge0ZpZWxkR3JvdXBEZXNjcmlwdG9yLCBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcn0gZnJvbSAnLi9maWVsZC1ncm91cC5kZXNjcmlwdG9yJztcbmltcG9ydCB7RmllbGRMb29rdXBEZXNjcmlwdG9yLCBGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yLCBGaWVsZExvb2t1cFByb3ZpZGVyVHlwZSwgZmllbGRMb29rdXBHZXRQcm92aWRlckNmZ09ian0gZnJvbSAnLi9maWVsZC1sb29rdXAuZGVzY3JpcHRvcic7XG5pbXBvcnQge0ZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IsIEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3IsIGZpZWxkTWFueVRvTWFueUdldFByb3ZpZGVyQ2ZnT2JqfSBmcm9tICcuL2ZpZWxkLW1hbnkuZGVzY3JpcHRvcic7XG5pbXBvcnQge0ZpZWxkSW5wdXREZXNjcmlwdG9yLCBGaWVsZElucHV0RGVzY3JpcHRvclR5cGV9IGZyb20gJy4vZmllbGQuZGVzY3JpcHRvcic7XG5cbmV4cG9ydCBjbGFzcyBFZGl0b3JEZXNjcmlwdG9ySW5zdDxFZGl0b3JNb2RlbD4gaW1wbGVtZW50cyBJRWRpdG9yRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4sIElGaWVsZHNNYW5hZ2VJbnRlcmZhY2U8RWRpdG9yTW9kZWw+IHtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGRlZmF1bHRHcm91cE5hbWUgPSBFRElUT1JfREVGQVVMVF9HUk9VUF9OQU1FO1xuXG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIHJlYWRvbmx5IF9tb2RlbDogTW9kZWxEZXNjcmlwdG9yPEVkaXRvck1vZGVsPjtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgcmVhZG9ubHkgX3RhYmxldmlld0VkaXRvclR5cGU6IFRhYmxldmlld0VkaXRvclR5cGVFbnVtO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCByZWFkb25seSBfdGFiczogQXJyYXk8RmllbGRUYWJHcm91cERlc2NyaXB0b3I8RWRpdG9yTW9kZWw+PiA9IFtdO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCByZWFkb25seSBfZ3JvdXBzOiBBcnJheTxGaWVsZEdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4+ID0gW107XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9maWVsZHM6IEFycmF5PEFGaWVsZERlc2NyaXB0b3I8YW55LCBFZGl0b3JNb2RlbD4+ID0gW107XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9jdXJyZW50VGFiR3JvdXA/OiBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD47XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9jdXJyZW50R3JvdXA/OiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD47XG5cbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2lzTG9jYWxpemVkID0gZmFsc2U7XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eT86IHN0cmluZztcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2xvY2FsaXphdGlvbk1vZGVsPzogTW9kZWxEZXNjcmlwdG9yPGFueT47XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9sb2NhbGl6YXRpb25Mb2NhbGl6YXRpb25Qcm9wZXJ0eT86IHN0cmluZztcblxuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCByZWFkb25seSBfZXZlbnRzU3ViamVjdCA9IG5ldyBTdWJqZWN0PEZvcm1FdmVudDxFZGl0b3JNb2RlbD4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIG5ldyBpbnN0YW5jZSBvZiBlZGl0b3IgZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gbW9kZWwgTW9kZWwgZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gdGFibGV2aWV3RWRpdG9yVHlwZSBUeXBlIG9mIGVkaXRvciBpbiB0YWJsZXZpZXcgKGFkZCwgZWRpdCwgdmlldyBvciBub25lKS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IobW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4sIHRhYmxldmlld0VkaXRvclR5cGUgPSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5Ob25lKSB7XG4gICAgICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XG4gICAgICAgIHRoaXMuX3RhYmxldmlld0VkaXRvclR5cGUgPSB0YWJsZXZpZXdFZGl0b3JUeXBlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vZGVsIGRlc2NyaXB0b3IgZm9yIGVkaXRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG1vZGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRWRpdG9yJ3MgdGFicy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHRhYnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVkaXRvcidzIGZpZWxkcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUeXBlIG9mIGVkaXRvciBmb3IgdGFibGV2aWV3LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdGFibGV2aWV3RWRpdG9yVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RhYmxldmlld0VkaXRvclR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSWYgZWRpdG9yIGlzIGRpc2FibGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzTG9jYWxpemVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9jYWxpemF0aW9uTG9jYWxpemF0aW9uUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGl6YXRpb25Qcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsaXphdGlvbk1vZGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemF0aW9uTW9kZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBuZXcgdGFiIGdyb3VwLiBOZXh0IGFkZGVkIGZpZWxkcyBhcmUgYWRkZWQgdG8gbmV3bHkgY3JlYXRlZCB0YWIgZ3JvdXAuXG4gICAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgZ3JvdXAuXG4gICAgICogQHBhcmFtIHRpdGxlIFRpdGxlIGtleSBmb3IgdGhlIHRhYi5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlVGFiR3JvdXAobmFtZTogc3RyaW5nLCB0aXRsZT86IHN0cmluZyk6IEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPiB7XG4gICAgICAgIGNvbnN0IHRhYkdyb3VwID0gbmV3IEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPih0aGlzLCBuYW1lKTtcbiAgICAgICAgaWYgKCF0aXRsZSkge1xuICAgICAgICAgICAgdGl0bGUgPSBnZXRJMThuVHlwZVRhYktleSh0aGlzLm1vZGVsLmkxOG5CYXNlS2V5LCBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB0YWJHcm91cC53aXRoVGl0bGUodGl0bGUpO1xuICAgICAgICB0aGlzLmNyZWF0ZVRhYkdyb3VwRGVzY3JpcHRvcih0YWJHcm91cCk7XG4gICAgICAgIHJldHVybiB0YWJHcm91cDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIG5ldyBmaWVsZCBncm91cC4gTmV4dCBhZGRlZCBmaWVsZHMgYXJlIGFkZGVkIHRvIG5ld2x5IGNyZWF0ZWQgZmllbGQgZ3JvdXAuXG4gICAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgZ3JvdXAuXG4gICAgICogQHBhcmFtIHRpdGxlIFRpdGxlIGtleSBmb3IgdGhlIGdyb3VwLlxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVGaWVsZEdyb3VwKG5hbWU6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcgfCBudWxsKTogRmllbGRHcm91cERlc2NyaXB0b3I8RWRpdG9yTW9kZWw+IHtcbiAgICAgICAgY29uc3QgZmllbGRHcm91cCA9IG5ldyBGaWVsZEdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4odGhpcywgbmFtZSk7XG4gICAgICAgIGlmICh0aXRsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCF0aXRsZSkge1xuICAgICAgICAgICAgICAgIHRpdGxlID0gZ2V0STE4blR5cGVHcm91cEtleSh0aGlzLm1vZGVsLmkxOG5CYXNlS2V5LCBuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpZWxkR3JvdXAud2l0aFRpdGxlKHRpdGxlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNyZWF0ZUZpZWxkR3JvdXBEZXNjcmlwdG9yKGZpZWxkR3JvdXApO1xuICAgICAgICByZXR1cm4gZmllbGRHcm91cDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGZpZWxkIGJ5IHRoZSBtb2RlbCBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBNb2RlbCBwcm9wZXJ0eSBuYW1lLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRGaWVsZChwcm9wZXJ0eToga2V5b2YgRWRpdG9yTW9kZWwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGZpZWxkIGJ5IHRoZSBtb2RlbCBwcm9wZXJ0eSBuYW1lIChVTlNBRkUpLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBNb2RlbCBwcm9wZXJ0eSBuYW1lLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRGaWVsZFVuc2FmZShwcm9wZXJ0eTogc3RyaW5nKTogQUZpZWxkRGVzY3JpcHRvcjxhbnksIEVkaXRvck1vZGVsPiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRzLmZpbmQoZiA9PiBmLnByb3BlcnR5ID09PSBwcm9wZXJ0eSkgPz8gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGZpZWxkIGJ5IHRoZSBtb2RlbCBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBNb2RlbCBwcm9wZXJ0eSBuYW1lLlxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVGaWVsZChwcm9wZXJ0eToga2V5b2YgRWRpdG9yTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlRmllbGRVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGZpZWxkIGJ5IHRoZSBtb2RlbCBwcm9wZXJ0eSBuYW1lIChVTlNBRkUpLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBNb2RlbCBwcm9wZXJ0eSBuYW1lLlxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmVGaWVsZFVuc2FmZShwcm9wZXJ0eTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpZWxkSWR4ID0gdGhpcy5fZmllbGRzLmZpbmRJbmRleChmID0+IGYucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgaWYgKGZpZWxkSWR4IDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGBGaWVsZCAke3Byb3BlcnR5fSBkb2VzIG5vdCBleGlzdC5gLCB7bmFtZTogJ0VkaXRvckRlc2NyaXB0b3JFcnJvcid9KTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHRoaXMuX2dyb3Vwcykge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXBGaWVsZElkeCA9IGdyb3VwLmZpZWxkcy5maW5kSW5kZXgoZiA9PiBmIGluc3RhbmNlb2YgQUZpZWxkRGVzY3JpcHRvciAmJiBmLnByb3BlcnR5ID09PSBwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoZ3JvdXBGaWVsZElkeCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXAuZmllbGRzLnNwbGljZShncm91cEZpZWxkSWR4LCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9maWVsZHMuc3BsaWNlKGZpZWxkSWR4LCAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGZpZWxkIGJ5IHRoZSBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBmaWVsZCBGaWVsZCBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbCwgRmllbGRWYWx1ZSA9IEZpZWxkTW9kZWw+KGZpZWxkOiBBRmllbGREZXNjcmlwdG9yPEZpZWxkTW9kZWwsIEVkaXRvck1vZGVsLCBGaWVsZFZhbHVlPik6IHRoaXMge1xuICAgICAgICB0aGlzLmNyZWF0ZURlZmF1bHRHcm91cCgpO1xuICAgICAgICB0aGlzLl9maWVsZHMucHVzaChmaWVsZCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRHcm91cD8uYWRkRmllbGQoZmllbGQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGZpZWxkIGJ5IHRoZSBtb2RlbCBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBNb2RlbCBwcm9wZXJ0eSBuYW1lLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWVsZDxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIEVkaXRvck1vZGVsLCBGaWVsZE1vZGVsID0gTm9uTnVsbGFibGU8RWRpdG9yTW9kZWxbUHJvcGVydHldPiwgRmllbGRWYWx1ZSA9IEVkaXRvck1vZGVsW1Byb3BlcnR5XT4ocHJvcGVydHk6IFByb3BlcnR5KSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkSW5wdXREZXNjcmlwdG9yPEVkaXRvck1vZGVsLCBGaWVsZE1vZGVsLCBGaWVsZFZhbHVlPih0aGlzLCBwcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcjxGaWVsZE1vZGVsLCBGaWVsZFZhbHVlPihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGZpZWxkIGJ5IHRoZSBtb2RlbCBwcm9wZXJ0eSBuYW1lIChVTlNBRkUpLiBQcm9wZXJ0eSBpcyBub3QgY2hlY2tlZCBvbiBlZGl0b3IgbW9kZWwuXG4gICAgICogVXNlIHthZGRGaWVsZH0gZm9yIHNhZmUgdXNhZ2UuXG4gICAgICogQHBhcmFtIHByb3BlcnR5IE1vZGVsIHByb3BlcnR5IG5hbWUuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkVW5zYWZlPEZpZWxkTW9kZWwgPSBGaWVsZElucHV0RGVzY3JpcHRvclR5cGUsIEZpZWxkVmFsdWUgPSBGaWVsZE1vZGVsPihwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkSW5wdXREZXNjcmlwdG9yPEVkaXRvck1vZGVsLCBGaWVsZE1vZGVsLCBGaWVsZFZhbHVlPih0aGlzLCBwcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yPEZpZWxkTW9kZWwsIEZpZWxkVmFsdWU+KGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZHMoLi4ucHJvcGVydGllczogKGtleW9mIEVkaXRvck1vZGVsKVtdKTogdGhpcyB7XG4gICAgICAgIHByb3BlcnRpZXMuZm9yRWFjaChwID0+IHRoaXMuYWRkRmllbGQocCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRBY3Rpb24oYWN0aW9uTmFtZTogc3RyaW5nKTogRmllbGRBY3Rpb25EZXNjcmlwdG9yPEVkaXRvck1vZGVsPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkQWN0aW9uRGVzY3JpcHRvcih0aGlzLCBhY3Rpb25OYW1lKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBsb29rdXAgZmllbGQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Byb3BlcnR5fSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIGVkaXRvci5cbiAgICAgKiBAcGFyYW0ge1R5cGVEZXNjcmlwdG9yPEZpZWxkTW9kZWw+fSB0eXBlIC0gVGhlIHR5cGUgZGVzY3JpcHRvciBmb3IgdGhlIGxvb2t1cCBtb2RlbC5cbiAgICAgKiBAdHlwZXBhcmFtIFByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgRWRpdG9yTW9kZWwuXG4gICAgICogQHR5cGVwYXJhbSBMb29rdXBNb2RlbCAtIFRoZSBmaWVsZCBtb2RlbCB0eXBlLCBkZWZhdWx0cyB0byB0aGUgbm9uLW51bGxhYmxlIHR5cGUgb2YgdGhlIGVkaXRvcidzIHByb3BlcnR5LlxuICAgICAqIEB0eXBlcGFyYW0gRmllbGRWYWx1ZSAtIFRoZSB2YWx1ZSB0eXBlIG9mIGZpZWxkIG9uIGVkaXRvci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsLCB1bmRlZmluZWQsIEZpZWxkVmFsdWU+fSAtIFRoZSBmaWVsZCBsb29rdXAgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXA8SyBleHRlbmRzIGtleW9mIEVkaXRvck1vZGVsLCBMb29rdXBNb2RlbCA9IE5vbk51bGxhYmxlPEVkaXRvck1vZGVsW0tdPiwgRmllbGRWYWx1ZSA9IEVkaXRvck1vZGVsW0tdPihwcm9wZXJ0eTogSywgdHlwZT86IFR5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPikge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGaWVsZExvb2t1cFVuc2FmZTxMb29rdXBNb2RlbCwgRmllbGRWYWx1ZT4ocHJvcGVydHkgYXMgc3RyaW5nLCB0eXBlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbVU5TQUZFXSBBZGRzIGxvb2t1cCBmaWVsZC5cbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBVTlNBRkUgYmVjYXVzZSBwcm9wZXJ0eSBpcyBub3QgdHlwZS1jaGVja2VkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IE1vZGVsIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHtUeXBlRGVzY3JpcHRvcjxGaWVsZE1vZGVsPn0gdHlwZSAtIFRoZSB0eXBlIGRlc2NyaXB0b3IgZm9yIHRoZSBsb29rdXAgbW9kZWwgKGRlZmluZXMgMm5kIGdlbmVyaWMpLlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwTW9kZWwgLSBUaGUgZmllbGQgbW9kZWwgdHlwZSwgZGVmYXVsdHMgdG8gdGhlIG5vbi1udWxsYWJsZSB0eXBlIG9mIHRoZSBlZGl0b3IncyBwcm9wZXJ0eS5cbiAgICAgKiBAdHlwZXBhcmFtIEZpZWxkVmFsdWUgLSBUaGUgdmFsdWUgdHlwZSBvZiBmaWVsZCBvbiBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7RmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgdW5kZWZpbmVkLCBGaWVsZFZhbHVlPn0gLSBUaGUgZmllbGQgbG9va3VwIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwVW5zYWZlPExvb2t1cE1vZGVsLCBGaWVsZFZhbHVlID0gTG9va3VwTW9kZWw+KHByb3BlcnR5OiBzdHJpbmcsIHR5cGU/OiBUeXBlRGVzY3JpcHRvcjxMb29rdXBNb2RlbD4pIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgdW5kZWZpbmVkLCBGaWVsZFZhbHVlPih0aGlzLCBwcm9wZXJ0eSwge1xuICAgICAgICAgICAgdHlwZTogdHlwZT8uY2xhc3NUeXBlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgZmllbGQgbG9va3VwIHdpdGggb3B0aW9ucyB2YWx1ZSBwcm9wZXJ0eSBmb3IgbG9va3VwIG1vZGVsLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtQcm9wZXJ0eX0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBlZGl0b3IuXG4gICAgICogQHBhcmFtIHtUeXBlRGVzY3JpcHRvcjxGaWVsZE1vZGVsPn0gdHlwZSAtIFRoZSB0eXBlIGRlc2NyaXB0b3IgZm9yIHRoZSBsb29rdXAgbW9kZWwuXG4gICAgICogQHBhcmFtIHtMb29rdXBWYWx1ZVByb3BlcnR5fSBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eSAtIFRoZSB2YWx1ZSBwcm9wZXJ0eSB1c2VkIGFzIHZhbHVlIGluIHRoZSBsb29rdXAgb3B0aW9ucy5cbiAgICAgKiBAdHlwZXBhcmFtIFByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgRWRpdG9yTW9kZWwuXG4gICAgICogQHR5cGVwYXJhbSBMb29rdXBNb2RlbCAtIFRoZSBmaWVsZCBtb2RlbCB0eXBlLCBkZWZhdWx0cyB0byB0aGUgbm9uLW51bGxhYmxlIHR5cGUgb2YgdGhlIGVkaXRvcidzIHByb3BlcnR5LlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwVmFsdWVQcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBvZiBsb29rdXAgbW9kZWwgdHlwZS5cbiAgICAgKiBAdHlwZXBhcmFtIEZpZWxkVmFsdWUgLSBUaGUgdmFsdWUgdHlwZSBvZiBmaWVsZCBvbiBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7RmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgdW5kZWZpbmVkLCBGaWVsZFZhbHVlPn0gLSBUaGUgZmllbGQgbG9va3VwIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwV2l0aE9wdGlvbnNWYWx1ZVByb3BlcnR5PFxuICAgICAgICBQcm9wZXJ0eSBleHRlbmRzIGtleW9mIEVkaXRvck1vZGVsLFxuICAgICAgICBMb29rdXBNb2RlbCxcbiAgICAgICAgTG9va3VwVmFsdWVQcm9wZXJ0eSBleHRlbmRzIEtleW9mQW5kT2ZUeXBlPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbFtQcm9wZXJ0eV0+LFxuICAgICAgICBGaWVsZFZhbHVlID0gRWRpdG9yTW9kZWxbUHJvcGVydHldXG4gICAgPihwcm9wZXJ0eTogUHJvcGVydHksIHR5cGU6IFR5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPiwgbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHk6IExvb2t1cFZhbHVlUHJvcGVydHkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmllbGRMb29rdXBXaXRoT3B0aW9uc1ZhbHVlUHJvcGVydHlVbnNhZmU8TG9va3VwTW9kZWwsIEZpZWxkVmFsdWU+KHByb3BlcnR5IGFzIHN0cmluZywgdHlwZSwgbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbVU5TQUZFXSBBZGRzIGEgZmllbGQgbG9va3VwIHdpdGggb3B0aW9ucyB2YWx1ZSBwcm9wZXJ0eSBmb3IgbG9va3VwIG1vZGVsLlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIFVOU0FGRSBiZWNhdXNlIHByb3BlcnR5IGlzIG5vdCB0eXBlLWNoZWNrZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Byb3BlcnR5fSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIGVkaXRvci5cbiAgICAgKiBAcGFyYW0ge1R5cGVEZXNjcmlwdG9yPEZpZWxkTW9kZWw+fSB0eXBlIC0gVGhlIHR5cGUgZGVzY3JpcHRvciBmb3IgdGhlIGxvb2t1cCBtb2RlbC5cbiAgICAgKiBAcGFyYW0ge0xvb2t1cFZhbHVlUHJvcGVydHl9IGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5IC0gVGhlIHZhbHVlIHByb3BlcnR5IHVzZWQgYXMgdmFsdWUgaW4gdGhlIGxvb2t1cCBvcHRpb25zLlxuICAgICAqIEB0eXBlcGFyYW0gUHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBFZGl0b3JNb2RlbC5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cE1vZGVsIC0gVGhlIGZpZWxkIG1vZGVsIHR5cGUsIGRlZmF1bHRzIHRvIHRoZSBub24tbnVsbGFibGUgdHlwZSBvZiB0aGUgZWRpdG9yJ3MgcHJvcGVydHkuXG4gICAgICogQHR5cGVwYXJhbSBMb29rdXBWYWx1ZVByb3BlcnR5IC0gVGhlIHByb3BlcnR5IG9mIGxvb2t1cCBtb2RlbCB0eXBlLlxuICAgICAqIEB0eXBlcGFyYW0gRmllbGRWYWx1ZSAtIFRoZSB2YWx1ZSB0eXBlIG9mIGZpZWxkIG9uIGVkaXRvci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsLCB1bmRlZmluZWQsIEZpZWxkVmFsdWU+fSAtIFRoZSBmaWVsZCBsb29rdXAgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXBXaXRoT3B0aW9uc1ZhbHVlUHJvcGVydHlVbnNhZmU8TG9va3VwTW9kZWwsIEZpZWxkVmFsdWUgPSBOdWxsYWJsZTxJZFR5cGU+PihcbiAgICAgICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICAgICAgdHlwZTogVHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+LFxuICAgICAgICBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eTogc3RyaW5nXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIHVuZGVmaW5lZCwgRmllbGRWYWx1ZT4odGhpcywgcHJvcGVydHksIHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGU/LmNsYXNzVHlwZSxcbiAgICAgICAgICAgIG9wdGlvbnNWYWx1ZVByb3BlcnR5OiBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIEZpZWxkVmFsdWU+KGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBmaWVsZCBsb29rdXAgd2l0aCBhIGRhdGEgcHJvdmlkZXIgb3Igc2VydmljZSB0byB0aGUgZWRpdG9yIG1vZGVsLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtQcm9wZXJ0eX0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBlZGl0b3IuXG4gICAgICogQHBhcmFtIHtGaWVsZExvb2t1cFByb3ZpZGVyVHlwZTxMb29rdXBNb2RlbCwgU2VydmljZT59IHByb3ZpZGVyIC0gVGhlIGZpZWxkIGxvb2t1cCBkYXRhIHByb3ZpZGVyIG9yIHNlcnZpY2UuXG4gICAgICogQHBhcmFtIHtUeXBlRGVzY3JpcHRvcjxMb29rdXBNb2RlbD59IFt0eXBlXSAtIFRoZSB0eXBlIG9mIGxvb2t1cCAtIGlmIGRhdGEgcHJvdmlkZXIgaXMgcGFzc2VkIGFzIHByZXZpb3VzIHBhcmFtZXRlciwgdHlwZSBjYW4gYmUgb21pdHRlZC4gSWYgc2VydmljZSBpcyBwcm92aWRlciwgdHlwZSBwYXJhbWV0ZXIgaXMgcHJvcG9zZWQgaW4gZmF2b3VyIG9mIGNvcnJlY3QgdHlwaW5nLlxuICAgICAqIEB0eXBlcGFyYW0gUHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBFZGl0b3JNb2RlbC5cbiAgICAgKiBAdHlwZXBhcmFtIFNlcnZpY2UgLSBUaGUgbG9va3VwIHNlcnZpY2UgdHlwZS5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cE1vZGVsIC0gVGhlIGZpZWxkIG1vZGVsIHR5cGUsIGRlZmF1bHRzIHRvIHRoZSBub24tbnVsbGFibGUgdHlwZSBvZiB0aGUgZWRpdG9yJ3MgcHJvcGVydHkuXG4gICAgICogQHR5cGVwYXJhbSBGaWVsZFZhbHVlIC0gVGhlIGZpZWxkIHZhbHVlIHR5cGUsIGRlZmF1bHRzIHRvIHRoZSBlZGl0b3IncyBwcm9wZXJ0eSB0eXBlLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0ZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIFNlcnZpY2UsIEZpZWxkVmFsdWU+fSBDcmVhdGVkIGZpZWxkIGxvb2t1cCBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWVsZExvb2t1cFdpdGhQcm92aWRlcjxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIEVkaXRvck1vZGVsLCBTZXJ2aWNlLCBMb29rdXBNb2RlbCA9IE5vbk51bGxhYmxlPEVkaXRvck1vZGVsW1Byb3BlcnR5XT4sIEZpZWxkVmFsdWUgPSBFZGl0b3JNb2RlbFtQcm9wZXJ0eV0+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIHByb3ZpZGVyOiBGaWVsZExvb2t1cFByb3ZpZGVyVHlwZTxMb29rdXBNb2RlbCwgU2VydmljZT4sXG4gICAgICAgIHR5cGU/OiBUeXBlRGVzY3JpcHRvcjxMb29rdXBNb2RlbD5cbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmllbGRMb29rdXBXaXRoUHJvdmlkZXJVbnNhZmU8TG9va3VwTW9kZWwsIFNlcnZpY2UsIEZpZWxkVmFsdWU+KHByb3BlcnR5IGFzIHN0cmluZywgcHJvdmlkZXIsIHR5cGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtVTlNBRkVdIEFkZHMgYSBmaWVsZCBsb29rdXAgd2l0aCBhIGRhdGEgcHJvdmlkZXIgb3Igc2VydmljZSB0byB0aGUgZWRpdG9yIG1vZGVsLlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIFVOU0FGRSBiZWNhdXNlIHByb3BlcnR5IGlzIG5vdCB0eXBlLWNoZWNrZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBlZGl0b3IuXG4gICAgICogQHBhcmFtIHtGaWVsZExvb2t1cFByb3ZpZGVyVHlwZTxMb29rdXBNb2RlbCwgU2VydmljZT59IHByb3ZpZGVyIC0gVGhlIGxvb2t1cCBwcm92aWRlciBvciBzZXJ2aWNlIGZvciB0aGUgZmllbGQgbG9va3VwLlxuICAgICAqIEBwYXJhbSB7VHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+P30gdHlwZSAtIE9wdGlvbmFsIHR5cGUgZGVzY3JpcHRvciBmb3IgdGhlIGZpZWxkIGxvb2t1cC5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cE1vZGVsIC0gVGhlIGZpZWxkIGxvb2t1cCBtb2RlbCB0eXBlLlxuICAgICAqIEB0eXBlcGFyYW0gU2VydmljZSAtIFRoZSBsb29rdXAgc2VydmljZSB0eXBlLlxuICAgICAqIEB0eXBlcGFyYW0gRmllbGRWYWx1ZSAtIFRoZSB2YWx1ZSB0eXBlIG9mIGZpZWxkIG9uIGVkaXRvci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsLCBTZXJ2aWNlLCBGaWVsZFZhbHVlPn0gLSBUaGUgZmllbGQgbG9va3VwIGRlc2NyaXB0b3IgYWRkZWQgdG8gdGhlIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWVsZExvb2t1cFdpdGhQcm92aWRlclVuc2FmZTxMb29rdXBNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZSA9IExvb2t1cE1vZGVsPihcbiAgICAgICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICAgICAgcHJvdmlkZXI6IEZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPExvb2t1cE1vZGVsLCBTZXJ2aWNlPixcbiAgICAgICAgdHlwZT86IFR5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPlxuICAgICkge1xuICAgICAgICBjb25zdCBjZmcgPSBmaWVsZExvb2t1cEdldFByb3ZpZGVyQ2ZnT2JqKHByb3ZpZGVyKTtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZT4odGhpcywgcHJvcGVydHksIHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGU/LmNsYXNzVHlwZSxcbiAgICAgICAgICAgIC4uLmNmZ1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGZpZWxkIGxvb2t1cCB3aXRoIGRhdGEgcHJvdmlkZXIgb3Igc2VydmljZSBhbmQgb3B0aW9ucyB2YWx1ZSBwcm9wZXJ0eSBmb3IgbG9va3VwIG1vZGVsLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtQcm9wZXJ0eX0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBlZGl0b3IuXG4gICAgICogQHBhcmFtIHtGaWVsZExvb2t1cFByb3ZpZGVyVHlwZTxGaWVsZE1vZGVsLCBTZXJ2aWNlPn0gcHJvdmlkZXIgLSBUaGUgbG9va3VwIHByb3ZpZGVyLlxuICAgICAqIEBwYXJhbSB7VHlwZURlc2NyaXB0b3I8RmllbGRNb2RlbD59IHR5cGUgLSBUaGUgdHlwZSBkZXNjcmlwdG9yIGZvciB0aGUgbG9va3VwIG1vZGVsLlxuICAgICAqIEBwYXJhbSB7TG9va3VwVmFsdWVQcm9wZXJ0eX0gbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHkgLSBUaGUgdmFsdWUgcHJvcGVydHkgdXNlZCBhcyB2YWx1ZSBpbiB0aGUgbG9va3VwIG9wdGlvbnMuXG4gICAgICogQHR5cGVwYXJhbSBQcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIEVkaXRvck1vZGVsLlxuICAgICAqIEB0eXBlcGFyYW0gU2VydmljZSAtIFRoZSBsb29rdXAgc2VydmljZSB0eXBlLlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwTW9kZWwgLSBUaGUgZmllbGQgbW9kZWwgdHlwZSwgZGVmYXVsdHMgdG8gdGhlIG5vbi1udWxsYWJsZSB0eXBlIG9mIHRoZSBlZGl0b3IncyBwcm9wZXJ0eS5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cFZhbHVlUHJvcGVydHkgLSBUaGUgcHJvcGVydHkgb2YgbG9va3VwIG1vZGVsIHR5cGUuXG4gICAgICogQHR5cGVwYXJhbSBGaWVsZFZhbHVlIC0gVGhlIHZhbHVlIHR5cGUgb2YgZmllbGQgb24gZWRpdG9yLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0ZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIFNlcnZpY2UsIEZpZWxkVmFsdWU+fSAtIFRoZSBmaWVsZCBsb29rdXAgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBhZGRGaWVsZExvb2t1cFdpdGhQcm92aWRlckFuZE9wdGlvbnNWYWx1ZVByb3BlcnR5PFxuICAgICAgICBQcm9wZXJ0eSBleHRlbmRzIGtleW9mIEVkaXRvck1vZGVsLFxuICAgICAgICBTZXJ2aWNlLFxuICAgICAgICBMb29rdXBNb2RlbCxcbiAgICAgICAgTG9va3VwVmFsdWVQcm9wZXJ0eSBleHRlbmRzIEtleW9mQW5kT2ZUeXBlPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbFtQcm9wZXJ0eV0+LFxuICAgICAgICBGaWVsZFZhbHVlID0gRWRpdG9yTW9kZWxbUHJvcGVydHldXG4gICAgPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICBwcm92aWRlcjogRmllbGRMb29rdXBQcm92aWRlclR5cGU8TG9va3VwTW9kZWwsIFNlcnZpY2U+LFxuICAgICAgICB0eXBlOiBUeXBlRGVzY3JpcHRvcjxMb29rdXBNb2RlbD4sXG4gICAgICAgIGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5OiBMb29rdXBWYWx1ZVByb3BlcnR5XG4gICAgKTogRmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGaWVsZExvb2t1cFdpdGhQcm92aWRlckFuZE9wdGlvbnNWYWx1ZVByb3BlcnR5VW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgcHJvdmlkZXIsIHR5cGUsIGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW1VOU0FGRV0gQWRkcyBhIGZpZWxkIGxvb2t1cCB3aXRoIGRhdGEgcHJvdmlkZXIgb3Igc2VydmljZSBhbmQgb3B0aW9ucyB2YWx1ZSBwcm9wZXJ0eSBmb3IgbG9va3VwIG1vZGVsLlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIFVOU0FGRSBiZWNhdXNlIHByb3BlcnR5IGlzIG5vdCB0eXBlLWNoZWNrZWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBlZGl0b3IuXG4gICAgICogQHBhcmFtIHtGaWVsZExvb2t1cFByb3ZpZGVyVHlwZTxGaWVsZE1vZGVsLCBTZXJ2aWNlPn0gcHJvdmlkZXIgLSBUaGUgbG9va3VwIHByb3ZpZGVyLlxuICAgICAqIEBwYXJhbSB7VHlwZURlc2NyaXB0b3I8RmllbGRNb2RlbD59IHR5cGUgLSBUaGUgdHlwZSBkZXNjcmlwdG9yIGZvciB0aGUgbG9va3VwIG1vZGVsLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eSAtIFRoZSB2YWx1ZSBwcm9wZXJ0eSB1c2VkIGluIHRoZSBsb29rdXAgb3B0aW9ucy5cbiAgICAgKiBAdHlwZXBhcmFtIFNlcnZpY2UgLSBUaGUgc2VydmljZSB0eXBlLlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwTW9kZWwgLSBUaGUgZmllbGQgbW9kZWwgdHlwZSwgZGVmYXVsdHMgdG8gdGhlIG5vbi1udWxsYWJsZSB0eXBlIG9mIHRoZSBlZGl0b3IncyBwcm9wZXJ0eS5cbiAgICAgKiBAdHlwZXBhcmFtIEZpZWxkVmFsdWUgLSBUaGUgdmFsdWUgdHlwZSBvZiBmaWVsZCBvbiBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7RmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZT59IC0gVGhlIGZpZWxkIGxvb2t1cCBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIGFkZEZpZWxkTG9va3VwV2l0aFByb3ZpZGVyQW5kT3B0aW9uc1ZhbHVlUHJvcGVydHlVbnNhZmU8U2VydmljZSwgTG9va3VwTW9kZWwsIEZpZWxkVmFsdWUgPSBMb29rdXBNb2RlbD4oXG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgICAgIHByb3ZpZGVyOiBGaWVsZExvb2t1cFByb3ZpZGVyVHlwZTxMb29rdXBNb2RlbCwgU2VydmljZT4sXG4gICAgICAgIHR5cGU6IFR5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPixcbiAgICAgICAgbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHk6IHN0cmluZ1xuICAgICk6IEZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIFNlcnZpY2UsIEZpZWxkVmFsdWU+IHtcbiAgICAgICAgY29uc3QgY2ZnID0gZmllbGRMb29rdXBHZXRQcm92aWRlckNmZ09iaihwcm92aWRlcik7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIFNlcnZpY2UsIEZpZWxkVmFsdWU+KHRoaXMsIHByb3BlcnR5LCB7XG4gICAgICAgICAgICB0eXBlOiB0eXBlPy5jbGFzc1R5cGUsXG4gICAgICAgICAgICBvcHRpb25zVmFsdWVQcm9wZXJ0eTogbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHksXG4gICAgICAgICAgICAuLi5jZmdcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZExvb2t1cEVudW08UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBFZGl0b3JNb2RlbCwgRW51bSBleHRlbmRzIE5vbk51bGxhYmxlPEVkaXRvck1vZGVsW1Byb3BlcnR5XT4+KFxuICAgICAgICBwcm9wZXJ0eToga2V5b2YgRWRpdG9yTW9kZWwsXG4gICAgICAgIGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxFbnVtPixcbiAgICAgICAgb3B0aW9ucz86IEFycmF5PEVudW0+XG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEZpZWxkTG9va3VwRW51bVVuc2FmZTxFbnVtPihwcm9wZXJ0eSBhcyBzdHJpbmcsIGVudW1EZXNjLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGVudW0gbG9va3VwIGZpZWxkLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBNb2RlbCdzIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIGVudW1EZXNjIFR5cGUgb2YgZW51bSBvciBlbnVtIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgUHJvdmlkZXMgc3Vic2V0IG9mIGVudW0ncyBhdmFpbGFibGUgY29uc3RhbnRzLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWVsZExvb2t1cEVudW1VbnNhZmU8RW51bSA9IEVudW1Db25zdGFudFR5cGU+KHByb3BlcnR5OiBzdHJpbmcsIGVudW1EZXNjOiBFbnVtRGVzY3JpcHRvcjxFbnVtPiwgb3B0aW9ucz86IEFycmF5PEVudW0+KSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3I8RW51bSwgRWRpdG9yTW9kZWw+KHRoaXMsIHByb3BlcnR5LCBlbnVtRGVzYywgb3B0aW9ucyk7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgdGFibGUvZGV0YWlscy9hZGQvZWRpdCBmaWVsZCBmb3Igb25lLXRvLW1hbnkgKDE6bikgcmVsYXRpb25zLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBNb2RlbCdzIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIHRhYmxldmlld0Rlc2NyaXB0b3IgVGFibGV2aWV3IGRlc2NyaXB0b3IgZm9yIHJlbGF0ZWQgbW9kZWwuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkTWFueUVkaXRvcjxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIEVkaXRvck1vZGVsLCBGaWVsZE1vZGVsID0gQXJyYXlJdGVtVHlwZTxFZGl0b3JNb2RlbFtQcm9wZXJ0eV0+LCBGaWVsZFZhbHVlID0gRWRpdG9yTW9kZWxbUHJvcGVydHldPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICB0YWJsZXZpZXdEZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPlxuICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGaWVsZE1hbnlFZGl0b3JVbnNhZmU8RmllbGRNb2RlbCwgRmllbGRWYWx1ZT4ocHJvcGVydHkgYXMgc3RyaW5nLCB0YWJsZXZpZXdEZXNjcmlwdG9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHRhYmxlL2RldGFpbHMvYWRkL2VkaXQgZmllbGQgZm9yIG9uZS10by1tYW55ICgxOm4pIHJlbGF0aW9ucyAoVU5TQUZFKS5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTW9kZWwncyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB0YWJsZXZpZXdEZXNjcmlwdG9yIFRhYmxldmlldyBkZXNjcmlwdG9yIGZvciByZWxhdGVkIG1vZGVsLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWVsZE1hbnlFZGl0b3JVbnNhZmU8RmllbGRNb2RlbCwgRmllbGRWYWx1ZSA9IEZpZWxkTW9kZWxbXT4ocHJvcGVydHk6IHN0cmluZywgdGFibGV2aWV3RGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD4pIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBuZXcgRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcjxGaWVsZE1vZGVsLCBFZGl0b3JNb2RlbCwgRmllbGRWYWx1ZT4odGhpcywgcHJvcGVydHksIHRhYmxldmlld0Rlc2NyaXB0b3IpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHRhYmxlcyBmb3IgbWFueS10by1tYW55IChtOm4pIHJlbGF0aW9ucy5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTW9kZWwncyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSBtYWluVGFibGVEZXNjcmlwdG9yIE1haW4gdGFibGUgZGVzY3JpcHRvciBmb3IgZGlzcGxheWluZyBpdGVtcyBhZGRlZCB0byBtYWluIG1vZGVsJ3MgcHJvcGVydHkuXG4gICAgICogQHBhcmFtIGxvb2t1cFRhYmxlRGVzY3JpcHRvciBMb29rdXAgdGFibGUgZGVzY3JpcHRvciBmb3IgZGlzcGxheWluZyBpdGVtcyB0byBiZSBhZGRlZCB0byBtYWluIG1vZGVsJ3MgcHJvcGVydHkuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkTWFueVRvTWFueUVkaXRvcjxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIEVkaXRvck1vZGVsLCBGaWVsZE1vZGVsID0gQXJyYXlJdGVtVHlwZTxFZGl0b3JNb2RlbFtQcm9wZXJ0eV0+LCBGaWVsZFZhbHVlID0gRWRpdG9yTW9kZWxbUHJvcGVydHldPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICBtYWluVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+LFxuICAgICAgICBsb29rdXBUYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD5cbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmllbGRNYW55VG9NYW55RWRpdG9yVW5zYWZlPEZpZWxkTW9kZWwsIEZpZWxkVmFsdWU+KHByb3BlcnR5IGFzIHN0cmluZywgbWFpblRhYmxlRGVzY3JpcHRvciwgbG9va3VwVGFibGVEZXNjcmlwdG9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHRhYmxlcyBmb3IgbWFueS10by1tYW55IChtOm4pIHJlbGF0aW9ucyAoVU5TQUZFKS5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTW9kZWwncyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSBtYWluVGFibGVEZXNjcmlwdG9yIE1haW4gdGFibGUgZGVzY3JpcHRvciBmb3IgZGlzcGxheWluZyBpdGVtcyBhZGRlZCB0byBtYWluIG1vZGVsJ3MgcHJvcGVydHkuXG4gICAgICogQHBhcmFtIGxvb2t1cFRhYmxlRGVzY3JpcHRvciBMb29rdXAgdGFibGUgZGVzY3JpcHRvciBmb3IgZGlzcGxheWluZyBpdGVtcyB0byBiZSBhZGRlZCB0byBtYWluIG1vZGVsJ3MgcHJvcGVydHkuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkTWFueVRvTWFueUVkaXRvclVuc2FmZTxGaWVsZE1vZGVsLCBGaWVsZFZhbHVlID0gRmllbGRNb2RlbFtdPihcbiAgICAgICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICAgICAgbWFpblRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPixcbiAgICAgICAgbG9va3VwVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+XG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3I8RmllbGRNb2RlbCwgRWRpdG9yTW9kZWwsIHVuZGVmaW5lZCwgRmllbGRWYWx1ZT4odGhpcywgcHJvcGVydHksIG1haW5UYWJsZURlc2NyaXB0b3IsIGxvb2t1cFRhYmxlRGVzY3JpcHRvcik7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZE1hbnlUb01hbnlFZGl0b3JXaXRoUHJvdmlkZXI8XG4gICAgICAgIFByb3BlcnR5IGV4dGVuZHMga2V5b2YgRWRpdG9yTW9kZWwsXG4gICAgICAgIFNlcnZpY2VUeXBlLFxuICAgICAgICBGaWVsZE1vZGVsID0gQXJyYXlJdGVtVHlwZTxFZGl0b3JNb2RlbFtQcm9wZXJ0eV0+LFxuICAgICAgICBGaWVsZFZhbHVlID0gRWRpdG9yTW9kZWxbUHJvcGVydHldXG4gICAgPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICBtYWluVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+LFxuICAgICAgICBsb29rdXBUYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD4sXG4gICAgICAgIGxvb2t1cERhdGFQcm92aWRlcjogSVRhYmxlRGF0YVByb3ZpZGVyPEZpZWxkTW9kZWwsIFNlcnZpY2VUeXBlPlxuICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGaWVsZE1hbnlUb01hbnlFZGl0b3JXaXRoUHJvdmlkZXJVbnNhZmU8RmllbGRNb2RlbCwgU2VydmljZVR5cGUsIEZpZWxkVmFsdWU+KFxuICAgICAgICAgICAgcHJvcGVydHkgYXMgc3RyaW5nLFxuICAgICAgICAgICAgbWFpblRhYmxlRGVzY3JpcHRvcixcbiAgICAgICAgICAgIGxvb2t1cFRhYmxlRGVzY3JpcHRvcixcbiAgICAgICAgICAgIGxvb2t1cERhdGFQcm92aWRlclxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZE1hbnlUb01hbnlFZGl0b3JXaXRoUHJvdmlkZXJVbnNhZmU8RmllbGRNb2RlbCwgU2VydmljZVR5cGUsIEZpZWxkVmFsdWUgPSBGaWVsZE1vZGVsW10+KFxuICAgICAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgICAgICBtYWluVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+LFxuICAgICAgICBsb29rdXBUYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD4sXG4gICAgICAgIGxvb2t1cERhdGFQcm92aWRlcjogSVRhYmxlRGF0YVByb3ZpZGVyPEZpZWxkTW9kZWwsIFNlcnZpY2VUeXBlPlxuICAgICk6IEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3I8RmllbGRNb2RlbCwgRWRpdG9yTW9kZWwsIFNlcnZpY2VUeXBlLCBGaWVsZFZhbHVlPiB7XG4gICAgICAgIGNvbnN0IGNmZyA9IGZpZWxkTWFueVRvTWFueUdldFByb3ZpZGVyQ2ZnT2JqKGxvb2t1cERhdGFQcm92aWRlcik7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3I8RmllbGRNb2RlbCwgRWRpdG9yTW9kZWwsIFNlcnZpY2VUeXBlLCBGaWVsZFZhbHVlPih0aGlzLCBwcm9wZXJ0eSwgbWFpblRhYmxlRGVzY3JpcHRvciwgbG9va3VwVGFibGVEZXNjcmlwdG9yLCB7XG4gICAgICAgICAgICAuLi5jZmdcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIGZpZWxkIG9uIGVkaXRvci5cbiAgICAgKiBAcGFyYW0gZGlzYWJsZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aERpc2FibGVkKGRpc2FibGVkID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGdyb3VwIHZhbGlkYXRvciB0byBlZGl0b3IuXG4gICAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgdmFsaWRhdGlvbi5cbiAgICAgKiBAcGFyYW0gdmFsaWRhdG9yIEZpZWxkIHZhbGlkYXRvciBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBGaWVsZCB2YWxpZGF0aW9uIG1lc3NhZ2UuXG4gICAgICovXG4gICAgcHVibGljIGFkZFZhbGlkYXRpb24obmFtZTogc3RyaW5nLCB2YWxpZGF0b3I/OiBGaWVsZFZhbGlkYXRvciwgbWVzc2FnZT86IEZpZWxkVmFsaWRhdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRHcm91cCkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudEdyb3VwLndpdGhWYWxpZGF0aW9uKG5hbWUsIHZhbGlkYXRvciwgbWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY29weSBvZiBlZGl0b3IgZGVzY3JpcHRvciBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGNvcHkoKTogRWRpdG9yRGVzY3JpcHRvckluc3Q8RWRpdG9yTW9kZWw+IHtcbiAgICAgICAgY29uc3QgZWRpdG9yID0gbmV3IEVkaXRvckRlc2NyaXB0b3JJbnN0PEVkaXRvck1vZGVsPih0aGlzLm1vZGVsLmNvcHkoKSwgdGhpcy50YWJsZXZpZXdFZGl0b3JUeXBlKTtcbiAgICAgICAgZm9yIChjb25zdCB0YWJHcm91cCBvZiB0aGlzLl90YWJzKSB7XG4gICAgICAgICAgICBlZGl0b3IuY3JlYXRlVGFiR3JvdXBEZXNjcmlwdG9yKHRhYkdyb3VwLmNvcHkoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB0YWJHcm91cCBvZiBlZGl0b3IuX3RhYnMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGRHcm91cCBvZiB0YWJHcm91cC5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICBlZGl0b3IuX2ZpZWxkcy5wdXNoKC4uLmZpZWxkR3JvdXAuZmllbGRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVkaXRvci5fZ3JvdXBzLnB1c2goLi4udGFiR3JvdXAuZmllbGRzKTtcbiAgICAgICAgfVxuICAgICAgICBlZGl0b3IuX2N1cnJlbnRUYWJHcm91cCA9IGVkaXRvci5fdGFic1tlZGl0b3IuX3RhYnMubGVuZ3RoIC0gMV07XG4gICAgICAgIGVkaXRvci5fY3VycmVudEdyb3VwID0gZWRpdG9yLl9jdXJyZW50VGFiR3JvdXAuZmllbGRzW2VkaXRvci5fY3VycmVudFRhYkdyb3VwLmZpZWxkcy5sZW5ndGggLSAxXTtcbiAgICAgICAgZWRpdG9yLl9kaXNhYmxlZCA9IHRoaXMuX2Rpc2FibGVkO1xuICAgICAgICByZXR1cm4gZWRpdG9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZWQgZ3JvdXAgZnJvbSBmaWVsZCBncm91cCBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBmaWVsZEdyb3VwIEZpZWxkIGdyb3VwIGRlc2NyaXB0b3IuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZUZpZWxkR3JvdXBEZXNjcmlwdG9yKGZpZWxkR3JvdXA6IEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLmNyZWF0ZURlZmF1bHRUYWJHcm91cCgpO1xuICAgICAgICB0aGlzLl9jdXJyZW50R3JvdXAgPSBmaWVsZEdyb3VwO1xuICAgICAgICB0aGlzLl9ncm91cHMucHVzaChmaWVsZEdyb3VwKTtcbiAgICAgICAgdGhpcy5fY3VycmVudFRhYkdyb3VwPy5hZGRGaWVsZChmaWVsZEdyb3VwKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyB0YWIgZ3JvdXAgZnJvbSB0YWIgZ3JvdXAgZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gdGFiR3JvdXAgVGFiIGdyb3VwIGRlc2NyaXB0b3IuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNyZWF0ZVRhYkdyb3VwRGVzY3JpcHRvcih0YWJHcm91cDogRmllbGRUYWJHcm91cERlc2NyaXB0b3I8RWRpdG9yTW9kZWw+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUYWJHcm91cCA9IHRhYkdyb3VwO1xuICAgICAgICB0aGlzLl90YWJzLnB1c2godGFiR3JvdXApO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGRlZmF1bHQgZmllbGQgZ3JvdXAuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVEZWZhdWx0R3JvdXAoKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlRGVmYXVsdFRhYkdyb3VwKCk7XG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50VGFiR3JvdXA/LmZpZWxkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRmllbGRHcm91cChFZGl0b3JEZXNjcmlwdG9ySW5zdC5kZWZhdWx0R3JvdXBOYW1lLCBudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgZGVmYXVsdCB0YWIgZ3JvdXAuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVEZWZhdWx0VGFiR3JvdXAoKSB7XG4gICAgICAgIGlmICh0aGlzLl90YWJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVUYWJHcm91cChFZGl0b3JEZXNjcmlwdG9ySW5zdC5kZWZhdWx0R3JvdXBOYW1lLCAnZ2VuZXJhbC5nZW5lcmFsJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb2RpZmllcyBzZWxlY3RlZCBmaWVsZCBieSBmaWVsZCBwcm9wZXJ0eS4gRm9yIGVudW1zIHVzZSB7d2l0aEZpZWxkTW9kaWZpZWRFbnVtfSBpbnN0ZWFkLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBNb2RlbCdzIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIGZpZWxkVHlwZSBuZXcgZmllbGQgdHlwZSBmb3Igc2VsZWN0ZWQgZmllbGRcbiAgICAgKiBAcGFyYW0gYXJncyBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGZpZWxkXG4gICAgICovXG4gICAgcHVibGljIHdpdGhGaWVsZE1vZGlmaWVkVHlwZShwcm9wZXJ0eToga2V5b2YgRWRpdG9yTW9kZWwsIGZpZWxkVHlwZTogRmllbGRJbnB1dFR5cGVFbnVtLCAuLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoRmllbGRNb2RpZmllZFR5cGVVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nLCBmaWVsZFR5cGUsIC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRmllbGRNb2RpZmllZFR5cGVVbnNhZmUocHJvcGVydHk6IHN0cmluZywgZmllbGRUeXBlOiBGaWVsZElucHV0VHlwZUVudW0sIC4uLmFyZ3M6IGFueVtdKTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5tb2RlbC50eXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYHdpdGhGaWVsZE1vZGlmaWVkVHlwZSBjYW5ub3QgYmUgZXhlY3V0ZWQgZm9yIHByb3BlcnR5ICR7cHJvcGVydHl9OiBNb2RlbCB0eXBlIGlzIG5vdCBkZWZpbmVkLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXR0cmlidXRlID0gZ2V0RWRpdG9yQ2xhc3NBdHRyaWJ1dGVEZWYodGhpcy5tb2RlbC50eXBlKS5maW5kKGF0dHJpYnV0ZSA9PiBhdHRyaWJ1dGUubmFtZSA9PT0gcHJvcGVydHkpO1xuICAgICAgICBpZiAoYXR0cmlidXRlKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGUuZmllbGRUeXBlID0gZmllbGRUeXBlO1xuICAgICAgICAgICAgRWRpdG9yRGVzY3JpcHRvckluc3QudXBzZXJ0RmllbGRGcm9tQXR0cmlidXRlRGVmKFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlLFxuICAgICAgICAgICAgICAgIHRoaXMuZmllbGRzLmZpbmQoZmkgPT4gZmkucHJvcGVydHkgPT09IHByb3BlcnR5KSxcbiAgICAgICAgICAgICAgICAuLi5hcmdzXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW9kaWZpZXMgc2VsZWN0ZWQgZmllbGQgd2l0aCBlbnVtIHR5cGUuXG4gICAgICogQHBhcmFtIHByb3BlcnR5IE1vZGVsJ3MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gZW51bU1vZGVsIEVudW0gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gdmFsdWVzXG4gICAgICovXG4gICAgcHVibGljIHdpdGhGaWVsZE1vZGlmaWVkRW51bTxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIEVkaXRvck1vZGVsLCBFbnVtIGV4dGVuZHMgTm9uTnVsbGFibGU8RWRpdG9yTW9kZWxbUHJvcGVydHldPj4oXG4gICAgICAgIHByb3BlcnR5OiBQcm9wZXJ0eSxcbiAgICAgICAgZW51bU1vZGVsPzogRW51bURlc2NyaXB0b3I8RW51bT4sXG4gICAgICAgIHZhbHVlcz86IEFycmF5PEVudW0+XG4gICAgKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhGaWVsZE1vZGlmaWVkRW51bVVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIGVudW1Nb2RlbCwgdmFsdWVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpZWxkTW9kaWZpZWRFbnVtVW5zYWZlPEVudW0gPSBhbnk+KHByb3BlcnR5OiBzdHJpbmcsIGVudW1EZXNjPzogRW51bURlc2NyaXB0b3I8RW51bT4sIHZhbHVlcz86IEFycmF5PEVudW0+KTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5tb2RlbC50eXBlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYHdpdGhGaWVsZE1vZGlmaWVkRW51bSBjYW5ub3QgYmUgZXhlY3V0ZWQgZm9yIHByb3BlcnR5ICR7cHJvcGVydHl9OiBNb2RlbCB0eXBlIGlzIG5vdCBkZWZpbmVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IGdldEVkaXRvckNsYXNzQXR0cmlidXRlRGVmKHRoaXMubW9kZWwudHlwZSkuZmluZChhID0+IGEubmFtZSA9PT0gcHJvcGVydHkpO1xuICAgICAgICBpZiAoYXR0cmlidXRlKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGUuZmllbGRUeXBlID0gRmllbGRJbnB1dFR5cGVFbnVtLlJhZGlvO1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKGYgPT4gZi5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGZpZWxkICYmIGZpZWxkIGluc3RhbmNlb2YgRmllbGRJbnB1dERlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5hc1JhZGlvRnJvbUVudW0oZW51bURlc2MgPz8gZW51bU1vZGVsR2VuZXJpYyhUeXBlUmVnaXN0cnkuZ2V0KCkuZmluZEVudW0oYXR0cmlidXRlLnR5cGUpIGFzIEVudW1UeXBlKSwgdmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vZGlmaWVzIHNlbGVjdGVkIGZpZWxkIHdpdGggbG9va3VwIGZpZWxkLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBNb2RlbCdzIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIGxvb2t1cFByb3ZpZGVyIHByb3ZpZGVyIHRvIGJlIGFkZGVkIHRvIGZpZWxkXG4gICAgICogQHBhcmFtIHRpdGxlUHJvcGVydHlcbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEZpZWxkTW9kaWZpZWRMb29rdXBXaXRoUHJvdmlkZXI8U2VydmljZVR5cGUsIEZpZWxkTW9kZWw+KFxuICAgICAgICBwcm9wZXJ0eToga2V5b2YgRWRpdG9yTW9kZWwsXG4gICAgICAgIGxvb2t1cFByb3ZpZGVyOiBJTG9va3VwRGF0YVByb3ZpZGVyPEZpZWxkTW9kZWwsIFNlcnZpY2VUeXBlPixcbiAgICAgICAgdGl0bGVQcm9wZXJ0eT86IGtleW9mIEZpZWxkTW9kZWxcbiAgICApOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aEZpZWxkTW9kaWZpZWRMb29rdXBXaXRoUHJvdmlkZXJVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nLCBsb29rdXBQcm92aWRlciwgdGl0bGVQcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRmllbGRNb2RpZmllZExvb2t1cFdpdGhQcm92aWRlclVuc2FmZTxTZXJ2aWNlLCBGaWVsZE1vZGVsPihcbiAgICAgICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICAgICAgbG9va3VwUHJvdmlkZXI6IElMb29rdXBEYXRhUHJvdmlkZXI8RmllbGRNb2RlbCwgU2VydmljZT4sXG4gICAgICAgIHRpdGxlUHJvcGVydHk/OiBzdHJpbmdcbiAgICApOiB0aGlzIHtcbiAgICAgICAgdGhpcy5yZW1vdmVGaWVsZFVuc2FmZShwcm9wZXJ0eSk7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5hZGRGaWVsZExvb2t1cFdpdGhQcm92aWRlclVuc2FmZTxGaWVsZE1vZGVsLCBTZXJ2aWNlPihwcm9wZXJ0eSwgbG9va3VwUHJvdmlkZXIpLmFzQXV0b2NvbXBsZXRlKCk7XG5cbiAgICAgICAgaWYgKHRpdGxlUHJvcGVydHkpIHtcbiAgICAgICAgICAgIChmaWVsZCBhcyBGaWVsZExvb2t1cERlc2NyaXB0b3I8YW55LCBhbnk+KS53aXRoT3B0aW9uc0xhYmVsUHJvcGVydHkodGl0bGVQcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCB0YWtlcyBjYXJlIG9mIGRpc3BsYXlpbmcgY29ycmVjdC9sb2NhbGl6ZWQgZGF0YSBpbiB0aGUgZWRpdG9yXG4gICAgICogQHBhcmFtIHByb3BlcnR5IHByb3BlcnR5IHRoYXQgdGVsbHMgdXMgd2hlcmUgb24gdGhlIG1vZGVsIGFyZSBsb2NhbGl6YXRpb25zIGFjY2Vzc2libGVcbiAgICAgKiBAcGFyYW0gbW9kZWwgTW9kZWwgZm9yIGxvY2FsaXphdGlvbnNcbiAgICAgKiBAcGFyYW0gbG9jYWxlUHJvcGVydHkgcHJvcGVydHkgYnkgd2hpY2ggd2UgZmluZCB0aGUgbG9jYWxlXG4gICAgICovXG4gICAgcHVibGljIGxvY2FsaXplZDxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIEVkaXRvck1vZGVsLCBMb2NhbGl6YXRpb25Nb2RlbCA9IEFycmF5SXRlbVR5cGU8RWRpdG9yTW9kZWxbUHJvcGVydHldPj4oXG4gICAgICAgIHByb3BlcnR5OiBQcm9wZXJ0eSxcbiAgICAgICAgbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxMb2NhbGl6YXRpb25Nb2RlbD4sXG4gICAgICAgIGxvY2FsZVByb3BlcnR5OiBrZXlvZiBMb2NhbGl6YXRpb25Nb2RlbFxuICAgICk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGl6ZWRVbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nLCBtb2RlbCwgbG9jYWxlUHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9jYWxpemVkVW5zYWZlPExvY2FsaXphdGlvblR5cGU+KHByb3BlcnR5OiBzdHJpbmcsIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TG9jYWxpemF0aW9uVHlwZT4sIGxvY2FsZVByb3BlcnR5OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbG9jYWxpemF0aW9uTG9jYWxpemF0aW9uUHJvcGVydHkgPSBwcm9wZXJ0eSBhcyBzdHJpbmc7XG4gICAgICAgIHRoaXMuX2xvY2FsaXphdGlvbk1vZGVsID0gbW9kZWw7XG4gICAgICAgIHRoaXMuX2xvY2FsaXphdGlvbkxvY2FsZVByb3BlcnR5ID0gbG9jYWxlUHJvcGVydHkgYXMgc3RyaW5nO1xuICAgICAgICB0aGlzLl9pc0xvY2FsaXplZCA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIG5leHRFdmVudCh0eXBlOiBGb3JtRXZlbnRUeXBlRW51bSwgY21wVHlwZTogVHlwZTxhbnk+LCBjbXBJbnN0YW5jZTogYW55LCBkYXRhPzogRmllbGRFdmVudERhdGE8RWRpdG9yTW9kZWw+KSB7XG4gICAgICAgIHRoaXMuX2V2ZW50c1N1YmplY3QubmV4dCh7XG4gICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgY29tcG9uZW50VHlwZTogY21wVHlwZSxcbiAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlOiBjbXBJbnN0YW5jZSxcbiAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbXBsZXRlRXZlbnRzKCkge1xuICAgICAgICB0aGlzLl9ldmVudHNTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBldmVudHMkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgZmllbGQgYmFzZWQgb24gYXR0cmlidXRlIGRlZmluaXRpb24sIHVzZWQgZm9yIGF1dG8gbW9kZWxcbiAgICAgKiBAcGFyYW0gZGVzY3JpcHRvciBFZGl0b3IgZGVzY3JpcHRvciBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gYXR0cmlidXRlIEF0dHJpYnV0ZSBkZWZpbml0aW9uLlxuICAgICAqIEBwYXJhbSBmaWVsZCBPcHRpb25hbCwgaWYgZGVmaW5lZCB3aWxsIGJlIHJlcGxhY2VkLCBvdGhlcndpc2UgbmV3IHdpbGwgYmUgZ2VuZXJhdGVkLlxuICAgICAqIEBwYXJhbSBhcmdzIE9wdGlvbmFsIGFkZGl0aW9uYWwgYXJndW1lbnRzIG1hcHBlZCB0byBmaWxlZCB0eXBlLiBBcmd1bWVudHMgZGVwZW5kIG9uIHBvc3NpYmxlIGFyZ3VtZW50cyBvbiBmaWVsZHMuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHN0YXRpYyB1cHNlcnRGaWVsZEZyb21BdHRyaWJ1dGVEZWY8VD4oXG4gICAgICAgIGRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3JJbnN0PFQ+LFxuICAgICAgICBhdHRyaWJ1dGU6IEVkaXRvckNsYXNzQXR0cmlidXRlRGVmLFxuICAgICAgICBmaWVsZD86IEFGaWVsZERlc2NyaXB0b3I8YW55LCBUPixcbiAgICAgICAgLi4uYXJnczogYW55W11cbiAgICApOiBBRmllbGREZXNjcmlwdG9yPGFueSwgVD4ge1xuICAgICAgICBpZiAoZmllbGQgPT0gbnVsbCkge1xuICAgICAgICAgICAgZmllbGQgPSBkZXNjcmlwdG9yLmFkZEZpZWxkVW5zYWZlKGF0dHJpYnV0ZS5uYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWVsZCBpbnN0YW5jZW9mIEZpZWxkSW5wdXREZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBpZiAoYXR0cmlidXRlLmVudW1UeXBlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkLmFzUmFkaW9Gcm9tRW51bShlbnVtTW9kZWxHZW5lcmljKGF0dHJpYnV0ZS5lbnVtVHlwZSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YWJsZUNvbHVtblR5cGUgPSBnZXRDb2x1bW5UeXBlRnJvbUNsYXNzQXR0cmlidXRlRGVmVHlwZShhdHRyaWJ1dGUudHlwZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFibGVDb2x1bW5EaXNwbGF5VHlwZSA9IGdldENvbHVtbkRpc3BsYXlUeXBlRnJvbUNvbHVtblR5cGUodGFibGVDb2x1bW5UeXBlLCBhdHRyaWJ1dGUudHlwZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkLmFzVHlwZShhdHRyaWJ1dGUuZmllbGRUeXBlID8/IGdldEZpZWxkSW5wdXRUeXBlRnJvbUNvbHVtblR5cGUodGFibGVDb2x1bW5UeXBlLCB0YWJsZUNvbHVtbkRpc3BsYXlUeXBlKSwgLi4uYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRWRpdG9yRGVzY3JpcHRvciBleHRlbmRzIEVkaXRvckRlc2NyaXB0b3JJbnN0PGFueT4ge1xuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoTW9kZWxEZXNjcmlwdG9yLmNyZWF0ZSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZTxFZGl0b3JNb2RlbD4oXG4gICAgICAgIGlkUHJvcGVydHk/OiBrZXlvZiBFZGl0b3JNb2RlbCxcbiAgICAgICAgdGl0bGVQcm9wZXJ0eT86IGtleW9mIEVkaXRvck1vZGVsLFxuICAgICAgICBpMThuQmFzZUtleT86IHN0cmluZyB8IENsYXNzVHlwZTx1bmtub3duPixcbiAgICAgICAgdGFibGV2aWV3RWRpdG9yVHlwZSA9IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLk5vbmVcbiAgICApOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxFZGl0b3JNb2RlbD4ge1xuICAgICAgICByZXR1cm4gbmV3IEVkaXRvckRlc2NyaXB0b3JJbnN0PEVkaXRvck1vZGVsPihNb2RlbERlc2NyaXB0b3IuY3JlYXRlPEVkaXRvck1vZGVsPihpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCBpMThuQmFzZUtleSksIHRhYmxldmlld0VkaXRvclR5cGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUNsYXNzPEVkaXRvck1vZGVsPihcbiAgICAgICAgdHlwZTogQ2xhc3NUeXBlPEVkaXRvck1vZGVsPixcbiAgICAgICAgaWRQcm9wZXJ0eT86IGtleW9mIEVkaXRvck1vZGVsLFxuICAgICAgICB0aXRsZVByb3BlcnR5Pzoga2V5b2YgRWRpdG9yTW9kZWwsXG4gICAgICAgIGkxOG5CYXNlS2V5PzogQ2xhc3NUeXBlPHVua25vd24+IHwgc3RyaW5nLFxuICAgICAgICB0YWJsZXZpZXdFZGl0b3JUeXBlID0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uTm9uZVxuICAgICk6IEVkaXRvckRlc2NyaXB0b3JJbnN0PEVkaXRvck1vZGVsPiB7XG4gICAgICAgIHJldHVybiBuZXcgRWRpdG9yRGVzY3JpcHRvckluc3Q8RWRpdG9yTW9kZWw+KE1vZGVsRGVzY3JpcHRvci5mcm9tQ2xhc3ModHlwZSwgaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSwgaTE4bkJhc2VLZXkpLCB0YWJsZXZpZXdFZGl0b3JUeXBlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21Nb2RlbDxFZGl0b3JNb2RlbD4obW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4sIHRhYmxldmlld0VkaXRvclR5cGUgPSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5Ob25lKTogRWRpdG9yRGVzY3JpcHRvckluc3Q8RWRpdG9yTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBFZGl0b3JEZXNjcmlwdG9ySW5zdDxFZGl0b3JNb2RlbD4obW9kZWwsIHRhYmxldmlld0VkaXRvclR5cGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgZWRpdG9yIGRlc2NyaXB0b3IgYXV0b21hdGljYWxseSBiYXNlZCBvbiBvcGVuYXBpIG1vZGVsJ3MgYXR0cmlidXRlcyBkZWZpbml0aW9uIHdoaWNoIGlzIGF1dG9tYXRpY2FsbHkgZXh0cmFjdGVkLiBBbGwgZmllbGRzIHdpbGwgYmUgaW5jbHVkZWQuXG4gICAgICogQHBhcmFtIHR5cGUgTW9kZWwncyBjbGFzcy5cbiAgICAgKiBAcGFyYW0gaWRQcm9wZXJ0eSBJZCBwcm9wZXJ0eSByZXByZXNlbnRpbmcgbW9kZWwgKG9wdGlvbmFsKS5cbiAgICAgKiBAcGFyYW0gdGl0bGVQcm9wZXJ0eSBUaXRsZSBwcm9wZXJ0eSByZXByZXNlbnRpbmcgbW9kZWwgKG9wdGlvbmFsKS4gSWYgbm90IHByb3ZpZGVkLCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2hvc2VuLlxuICAgICAqIEBwYXJhbSB0YWJsZUVkaXRvclR5cGUgVHlwZSBvZiBlZGl0b3IgaW4gdGFibGV2aWV3IChhZGQsIGVkaXQsIHZpZXcgb3Igbm9uZSkuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmcm9tQ2xhc3NXaXRoQXV0b0F0dHJzRGVmPEVkaXRvck1vZGVsPihcbiAgICAgICAgdHlwZTogQ2xhc3NUeXBlPEVkaXRvck1vZGVsPixcbiAgICAgICAgaWRQcm9wZXJ0eT86IGtleW9mIEVkaXRvck1vZGVsLFxuICAgICAgICB0aXRsZVByb3BlcnR5Pzoga2V5b2YgRWRpdG9yTW9kZWwsXG4gICAgICAgIHRhYmxlRWRpdG9yVHlwZSA9IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLk5vbmVcbiAgICApOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxFZGl0b3JNb2RlbD4ge1xuICAgICAgICByZXR1cm4gRWRpdG9yRGVzY3JpcHRvci5mcm9tQ2xhc3NXaXRoQ3VzdG9tQXR0cnNEZWYodHlwZSwgZ2V0RWRpdG9yQ2xhc3NBdHRyaWJ1dGVEZWYodHlwZSksIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHksIHRhYmxlRWRpdG9yVHlwZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBlZGl0b3IgZGVzY3JpcHRvciBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIG9wZW5hcGkgbW9kZWwncyBhdHRyaWJ1dGVzIGRlZmluaXRpb24gcHJvdmlkZWQgaW4gcGFyYW1ldGVycy4gT25seSBmaWVsZHMgZm9yIHByb3ZpZGVkIGF0dHJpYnV0ZXMgd2lsbCBiZSBpbmNsdWRlZC5cbiAgICAgKiBAcGFyYW0gdHlwZSBNb2RlbCdzIGNsYXNzLlxuICAgICAqIEBwYXJhbSBhdHRyaWJ1dGVzIExpc3Qgb2YgYXR0cmlidXRlIGRlZmluaXRpb25zIGZyb20gd2hpY2ggZmllbGRzIHNob3VsZCBiZSBjcmVhdGVkLlxuICAgICAqIEBwYXJhbSBpZFByb3BlcnR5IElkIHByb3BlcnR5IHJlcHJlc2VudGluZyBtb2RlbCAob3B0aW9uYWwpLlxuICAgICAqIEBwYXJhbSB0aXRsZVByb3BlcnR5IFRpdGxlIHByb3BlcnR5IHJlcHJlc2VudGluZyBtb2RlbCAob3B0aW9uYWwpLiBJZiBub3QgcHJvdmlkZWQsIGl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBjaG9zZW4uXG4gICAgICogQHBhcmFtIHRhYmxlRWRpdG9yVHlwZSBUeXBlIG9mIGVkaXRvciBpbiB0YWJsZXZpZXcgKGFkZCwgZWRpdCwgdmlldyBvciBub25lKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGZyb21DbGFzc1dpdGhDdXN0b21BdHRyc0RlZjxFZGl0b3JNb2RlbD4oXG4gICAgICAgIHR5cGU6IENsYXNzVHlwZTxFZGl0b3JNb2RlbD4sXG4gICAgICAgIGF0dHJpYnV0ZXM6IEVkaXRvckNsYXNzQXR0cmlidXRlRGVmW10sXG4gICAgICAgIGlkUHJvcGVydHk/OiBrZXlvZiBFZGl0b3JNb2RlbCxcbiAgICAgICAgdGl0bGVQcm9wZXJ0eT86IGtleW9mIEVkaXRvck1vZGVsLFxuICAgICAgICB0YWJsZUVkaXRvclR5cGUgPSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5Ob25lXG4gICAgKTogRWRpdG9yRGVzY3JpcHRvckluc3Q8RWRpdG9yTW9kZWw+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IEVkaXRvckRlc2NyaXB0b3IuZnJvbUNsYXNzKHR5cGUsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHksIHVuZGVmaW5lZCwgdGFibGVFZGl0b3JUeXBlKTtcblxuICAgICAgICBhdHRyaWJ1dGVzXG4gICAgICAgICAgICAuZmlsdGVyKGF0dHIgPT4gIWF0dHIudHlwZS5pbmNsdWRlcygnU2V0JykgJiYgIWF0dHIudHlwZS5pbmNsdWRlcygnQXJyYXknKSlcbiAgICAgICAgICAgIC5mb3JFYWNoKGF0dHIgPT5cbiAgICAgICAgICAgICAgICBFZGl0b3JEZXNjcmlwdG9ySW5zdC51cHNlcnRGaWVsZEZyb21BdHRyaWJ1dGVEZWYoXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IsXG4gICAgICAgICAgICAgICAgICAgIGF0dHIsXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuZmllbGRzLmZpbmQoY29sID0+IGNvbC5wcm9wZXJ0eSA9PT0gYXR0ci5uYW1lKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cbn1cbiJdfQ==
615
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90YWJsZXZpZXcvYXBpL3NyYy9lZGl0b3IvZGVzY3JpcHRvcnMvZWRpdG9yLmRlc2NyaXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBR0gsb0JBQW9CLEVBUXBCLFlBQVksRUFDWixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ3BCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFpQixlQUFlLEVBQWtCLGdCQUFnQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDL0csT0FBTyxFQUEwQyxrQ0FBa0MsRUFBRSxzQ0FBc0MsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBR3JLLE9BQU8sRUFBQywwQkFBMEIsRUFBRSwrQkFBK0IsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBR2pILE9BQU8sRUFBQyx5QkFBeUIsRUFBRSx1QkFBdUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQzFGLE9BQU8sRUFBQyxrQkFBa0IsRUFBdUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUvRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RixPQUFPLEVBQUMscUJBQXFCLEVBQUUseUJBQXlCLEVBQTJCLDRCQUE0QixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDbEosT0FBTyxFQUFDLHlCQUF5QixFQUFFLCtCQUErQixFQUFFLGdDQUFnQyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFckksT0FBTyxFQUFDLG9CQUFvQixFQUEyQixNQUFNLG9CQUFvQixDQUFD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LE9BQU8sZ0JBQWdCLENBQUMsMkJBQTJCLENBQUMsSUFBSSxFQUFFLDBCQUEwQixDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDNUksQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxNQUFNLENBQUMsMkJBQTJCLENBQ3JDLElBQTRCLEVBQzVCLFVBQXFDLEVBQ3JDLFVBQThCLEVBQzlCLGFBQWlDLEVBQ2pDLGVBQWUsR0FBRyx1QkFBdUIsQ0FBQyxJQUFJO1FBRTlDLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFM0csVUFBVTthQUNMLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUMxRSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDWixvQkFBb0IsQ0FBQywyQkFBMkIsQ0FDNUMsVUFBVSxFQUNWLElBQUksRUFDSixVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxDQUM1RCxDQUNKLENBQUM7UUFDTixPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1N1YmplY3R9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICAgIEFycmF5SXRlbVR5cGUsXG4gICAgQ2xhc3NUeXBlLFxuICAgIENvbW1vbnNJbnRlcm5hbEVycm9yLFxuICAgIEVudW1Db25zdGFudFR5cGUsXG4gICAgRW51bVR5cGUsXG4gICAgSUVkaXRvckRlc2NyaXB0b3IsXG4gICAgSUxvb2t1cERhdGFQcm92aWRlcixcbiAgICBJZFR5cGUsXG4gICAgS2V5b2ZBbmRPZlR5cGUsXG4gICAgTnVsbGFibGUsXG4gICAgVHlwZVJlZ2lzdHJ5LFxuICAgIGdldEkxOG5UeXBlR3JvdXBLZXksXG4gICAgZ2V0STE4blR5cGVUYWJLZXlcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7RW51bURlc2NyaXB0b3IsIE1vZGVsRGVzY3JpcHRvciwgVHlwZURlc2NyaXB0b3IsIGVudW1Nb2RlbEdlbmVyaWN9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvbW9kZWwnO1xuaW1wb3J0IHtJVGFibGVEYXRhUHJvdmlkZXIsIFRhYmxlRGVzY3JpcHRvckluc3QsIGdldENvbHVtbkRpc3BsYXlUeXBlRnJvbUNvbHVtblR5cGUsIGdldENvbHVtblR5cGVGcm9tQ2xhc3NBdHRyaWJ1dGVEZWZUeXBlfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxlL2FwaSc7XG5cbmltcG9ydCB7VGFibGV2aWV3RGVzY3JpcHRvckluc3R9IGZyb20gJy4uLy4uL3RhYmxldmlldy9kZXNjcmlwdG9ycy90YWJsZXZpZXcuZGVzY3JpcHRvcic7XG5pbXBvcnQge2dldEVkaXRvckNsYXNzQXR0cmlidXRlRGVmLCBnZXRGaWVsZElucHV0VHlwZUZyb21Db2x1bW5UeXBlfSBmcm9tICcuLi9oZWxwZXJzL2NsYXNzLWF0dHJpYnV0ZS1jb252ZXJ0ZXInO1xuaW1wb3J0IHtFZGl0b3JDbGFzc0F0dHJpYnV0ZURlZn0gZnJvbSAnLi4vbW9kZWxzL2NsYXNzLXRhYmxldmlldy1hdHRyaWJ1dGUubW9kZWwnO1xuaW1wb3J0IHtJRmllbGRzTWFuYWdlSW50ZXJmYWNlfSBmcm9tICcuLi9tb2RlbHMvZWRpdG9yLWZpZWxkcy5tb2RlbCc7XG5pbXBvcnQge0VESVRPUl9ERUZBVUxUX0dST1VQX05BTUUsIFRhYmxldmlld0VkaXRvclR5cGVFbnVtfSBmcm9tICcuLi9tb2RlbHMvZWRpdG9yLm1vZGVsJztcbmltcG9ydCB7RmllbGRJbnB1dFR5cGVFbnVtLCBGb3JtVmFsaWRhdGlvbk1lc3NhZ2UsIEZvcm1WYWxpZGF0b3J9IGZyb20gJy4uL21vZGVscy9maWVsZC5tb2RlbCc7XG5pbXBvcnQge0ZpZWxkRXZlbnREYXRhLCBGb3JtRXZlbnQsIEZvcm1FdmVudFR5cGVFbnVtfSBmcm9tICcuLi9tb2RlbHMvZm9ybS1lZGl0b3IuZXZlbnQnO1xuaW1wb3J0IHtGaWVsZEFjdGlvbkRlc2NyaXB0b3J9IGZyb20gJy4vZmllbGQtYWN0aW9uLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtBRmllbGREZXNjcmlwdG9yfSBmcm9tICcuL2ZpZWxkLWJhc2UuZGVzY3JpcHRvcic7XG5pbXBvcnQge0ZpZWxkR3JvdXBEZXNjcmlwdG9yLCBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcn0gZnJvbSAnLi9maWVsZC1ncm91cC5kZXNjcmlwdG9yJztcbmltcG9ydCB7RmllbGRMb29rdXBEZXNjcmlwdG9yLCBGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yLCBGaWVsZExvb2t1cFByb3ZpZGVyVHlwZSwgZmllbGRMb29rdXBHZXRQcm92aWRlckNmZ09ian0gZnJvbSAnLi9maWVsZC1sb29rdXAuZGVzY3JpcHRvcic7XG5pbXBvcnQge0ZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3IsIEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3IsIGZpZWxkTWFueVRvTWFueUdldFByb3ZpZGVyQ2ZnT2JqfSBmcm9tICcuL2ZpZWxkLW1hbnkuZGVzY3JpcHRvcic7XG5pbXBvcnQge0ZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3JPcHRzVHlwZX0gZnJvbSAnLi9maWVsZC12YWxpZGF0aW9uLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtGaWVsZElucHV0RGVzY3JpcHRvciwgRmllbGRJbnB1dERlc2NyaXB0b3JUeXBlfSBmcm9tICcuL2ZpZWxkLmRlc2NyaXB0b3InO1xuXG5leHBvcnQgY2xhc3MgRWRpdG9yRGVzY3JpcHRvckluc3Q8RWRpdG9yTW9kZWw+IGltcGxlbWVudHMgSUVkaXRvckRlc2NyaXB0b3I8RWRpdG9yTW9kZWw+LCBJRmllbGRzTWFuYWdlSW50ZXJmYWNlPEVkaXRvck1vZGVsPiB7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBkZWZhdWx0R3JvdXBOYW1lID0gRURJVE9SX0RFRkFVTFRfR1JPVVBfTkFNRTtcblxuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCByZWFkb25seSBfbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD47XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIHJlYWRvbmx5IF90YWJsZXZpZXdFZGl0b3JUeXBlOiBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bTtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgcmVhZG9ubHkgX3RhYnM6IEFycmF5PEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPj4gPSBbXTtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgcmVhZG9ubHkgX2dyb3VwczogQXJyYXk8RmllbGRHcm91cERlc2NyaXB0b3I8RWRpdG9yTW9kZWw+PiA9IFtdO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfZmllbGRzOiBBcnJheTxBRmllbGREZXNjcmlwdG9yPGFueSwgRWRpdG9yTW9kZWw+PiA9IFtdO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfY3VycmVudFRhYkdyb3VwPzogRmllbGRUYWJHcm91cERlc2NyaXB0b3I8RWRpdG9yTW9kZWw+O1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfY3VycmVudEdyb3VwPzogRmllbGRHcm91cERlc2NyaXB0b3I8RWRpdG9yTW9kZWw+O1xuXG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9kaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9pc0xvY2FsaXplZCA9IGZhbHNlO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHk/OiBzdHJpbmc7XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9sb2NhbGl6YXRpb25Nb2RlbD86IE1vZGVsRGVzY3JpcHRvcjxhbnk+O1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfbG9jYWxpemF0aW9uTG9jYWxpemF0aW9uUHJvcGVydHk/OiBzdHJpbmc7XG5cbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgcmVhZG9ubHkgX2V2ZW50c1N1YmplY3QgPSBuZXcgU3ViamVjdDxGb3JtRXZlbnQ8RWRpdG9yTW9kZWw+PigpO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBuZXcgaW5zdGFuY2Ugb2YgZWRpdG9yIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIG1vZGVsIE1vZGVsIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHRhYmxldmlld0VkaXRvclR5cGUgVHlwZSBvZiBlZGl0b3IgaW4gdGFibGV2aWV3IChhZGQsIGVkaXQsIHZpZXcgb3Igbm9uZSkuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8RWRpdG9yTW9kZWw+LCB0YWJsZXZpZXdFZGl0b3JUeXBlID0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uTm9uZSkge1xuICAgICAgICB0aGlzLl9tb2RlbCA9IG1vZGVsO1xuICAgICAgICB0aGlzLl90YWJsZXZpZXdFZGl0b3JUeXBlID0gdGFibGV2aWV3RWRpdG9yVHlwZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb2RlbCBkZXNjcmlwdG9yIGZvciBlZGl0b3IuXG4gICAgICovXG4gICAgcHVibGljIGdldCBtb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVkaXRvcidzIHRhYnMuXG4gICAgICovXG4gICAgcHVibGljIGdldCB0YWJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFicztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFZGl0b3IncyBmaWVsZHMuXG4gICAgICovXG4gICAgcHVibGljIGdldCBmaWVsZHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHlwZSBvZiBlZGl0b3IgZm9yIHRhYmxldmlldy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHRhYmxldmlld0VkaXRvclR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJsZXZpZXdFZGl0b3JUeXBlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElmIGVkaXRvciBpcyBkaXNhYmxlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc0xvY2FsaXplZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTG9jYWxpemVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxvY2FsaXphdGlvbkxvY2FsaXphdGlvblByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxpemF0aW9uTG9jYWxpemF0aW9uUHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsb2NhbGl6YXRpb25Nb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsaXphdGlvbk1vZGVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgbmV3IHRhYiBncm91cC4gTmV4dCBhZGRlZCBmaWVsZHMgYXJlIGFkZGVkIHRvIG5ld2x5IGNyZWF0ZWQgdGFiIGdyb3VwLlxuICAgICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGdyb3VwLlxuICAgICAqIEBwYXJhbSB0aXRsZSBUaXRsZSBrZXkgZm9yIHRoZSB0YWIuXG4gICAgICovXG4gICAgcHVibGljIGNyZWF0ZVRhYkdyb3VwKG5hbWU6IHN0cmluZywgdGl0bGU/OiBzdHJpbmcpOiBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4ge1xuICAgICAgICBjb25zdCB0YWJHcm91cCA9IG5ldyBGaWVsZFRhYkdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4odGhpcywgbmFtZSk7XG4gICAgICAgIGlmICghdGl0bGUpIHtcbiAgICAgICAgICAgIHRpdGxlID0gZ2V0STE4blR5cGVUYWJLZXkodGhpcy5tb2RlbC5pMThuQmFzZUtleSwgbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGFiR3JvdXAud2l0aFRpdGxlKHRpdGxlKTtcbiAgICAgICAgdGhpcy5jcmVhdGVUYWJHcm91cERlc2NyaXB0b3IodGFiR3JvdXApO1xuICAgICAgICByZXR1cm4gdGFiR3JvdXA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBuZXcgZmllbGQgZ3JvdXAuIE5leHQgYWRkZWQgZmllbGRzIGFyZSBhZGRlZCB0byBuZXdseSBjcmVhdGVkIGZpZWxkIGdyb3VwLlxuICAgICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIGdyb3VwLlxuICAgICAqIEBwYXJhbSB0aXRsZSBUaXRsZSBrZXkgZm9yIHRoZSBncm91cC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlRmllbGRHcm91cChuYW1lOiBzdHJpbmcsIHRpdGxlPzogc3RyaW5nIHwgbnVsbCk6IEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPiB7XG4gICAgICAgIGNvbnN0IGZpZWxkR3JvdXAgPSBuZXcgRmllbGRHcm91cERlc2NyaXB0b3I8RWRpdG9yTW9kZWw+KHRoaXMsIG5hbWUpO1xuICAgICAgICBpZiAodGl0bGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghdGl0bGUpIHtcbiAgICAgICAgICAgICAgICB0aXRsZSA9IGdldEkxOG5UeXBlR3JvdXBLZXkodGhpcy5tb2RlbC5pMThuQmFzZUtleSwgbmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWVsZEdyb3VwLndpdGhUaXRsZSh0aXRsZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jcmVhdGVGaWVsZEdyb3VwRGVzY3JpcHRvcihmaWVsZEdyb3VwKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkR3JvdXA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBmaWVsZCBieSB0aGUgbW9kZWwgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTW9kZWwgcHJvcGVydHkgbmFtZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RmllbGQocHJvcGVydHk6IGtleW9mIEVkaXRvck1vZGVsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZpZWxkVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBmaWVsZCBieSB0aGUgbW9kZWwgcHJvcGVydHkgbmFtZSAoVU5TQUZFKS5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTW9kZWwgcHJvcGVydHkgbmFtZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RmllbGRVbnNhZmUocHJvcGVydHk6IHN0cmluZyk6IEFGaWVsZERlc2NyaXB0b3I8YW55LCBFZGl0b3JNb2RlbD4gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkcy5maW5kKGYgPT4gZi5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpID8/IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBmaWVsZCBieSB0aGUgbW9kZWwgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTW9kZWwgcHJvcGVydHkgbmFtZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlRmllbGQocHJvcGVydHk6IGtleW9mIEVkaXRvck1vZGVsKTogdm9pZCB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbW92ZUZpZWxkVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBmaWVsZCBieSB0aGUgbW9kZWwgcHJvcGVydHkgbmFtZSAoVU5TQUZFKS5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTW9kZWwgcHJvcGVydHkgbmFtZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlRmllbGRVbnNhZmUocHJvcGVydHk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWVsZElkeCA9IHRoaXMuX2ZpZWxkcy5maW5kSW5kZXgoZiA9PiBmLnByb3BlcnR5ID09PSBwcm9wZXJ0eSk7XG4gICAgICAgIGlmIChmaWVsZElkeCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgRmllbGQgJHtwcm9wZXJ0eX0gZG9lcyBub3QgZXhpc3QuYCwge25hbWU6ICdFZGl0b3JEZXNjcmlwdG9yRXJyb3InfSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBncm91cCBvZiB0aGlzLl9ncm91cHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwRmllbGRJZHggPSBncm91cC5maWVsZHMuZmluZEluZGV4KGYgPT4gZiBpbnN0YW5jZW9mIEFGaWVsZERlc2NyaXB0b3IgJiYgZi5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKGdyb3VwRmllbGRJZHggPj0gMCkge1xuICAgICAgICAgICAgICAgIGdyb3VwLmZpZWxkcy5zcGxpY2UoZ3JvdXBGaWVsZElkeCwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZmllbGRzLnNwbGljZShmaWVsZElkeCwgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBmaWVsZCBieSB0aGUgZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gZmllbGQgRmllbGQgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGREZXNjcmlwdG9yPEZpZWxkTW9kZWwsIEZpZWxkVmFsdWUgPSBGaWVsZE1vZGVsPihmaWVsZDogQUZpZWxkRGVzY3JpcHRvcjxGaWVsZE1vZGVsLCBFZGl0b3JNb2RlbCwgRmllbGRWYWx1ZT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5jcmVhdGVEZWZhdWx0R3JvdXAoKTtcbiAgICAgICAgdGhpcy5fZmllbGRzLnB1c2goZmllbGQpO1xuICAgICAgICB0aGlzLl9jdXJyZW50R3JvdXA/LmFkZEZpZWxkKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBmaWVsZCBieSB0aGUgbW9kZWwgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTW9kZWwgcHJvcGVydHkgbmFtZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGQ8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBFZGl0b3JNb2RlbCwgRmllbGRNb2RlbCA9IE5vbk51bGxhYmxlPEVkaXRvck1vZGVsW1Byb3BlcnR5XT4sIEZpZWxkVmFsdWUgPSBFZGl0b3JNb2RlbFtQcm9wZXJ0eV0+KHByb3BlcnR5OiBQcm9wZXJ0eSkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZElucHV0RGVzY3JpcHRvcjxFZGl0b3JNb2RlbCwgRmllbGRNb2RlbCwgRmllbGRWYWx1ZT4odGhpcywgcHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbCwgRmllbGRWYWx1ZT4oZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBmaWVsZCBieSB0aGUgbW9kZWwgcHJvcGVydHkgbmFtZSAoVU5TQUZFKS4gUHJvcGVydHkgaXMgbm90IGNoZWNrZWQgb24gZWRpdG9yIG1vZGVsLlxuICAgICAqIFVzZSB7YWRkRmllbGR9IGZvciBzYWZlIHVzYWdlLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBNb2RlbCBwcm9wZXJ0eSBuYW1lLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWVsZFVuc2FmZTxGaWVsZE1vZGVsID0gRmllbGRJbnB1dERlc2NyaXB0b3JUeXBlLCBGaWVsZFZhbHVlID0gRmllbGRNb2RlbD4ocHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZElucHV0RGVzY3JpcHRvcjxFZGl0b3JNb2RlbCwgRmllbGRNb2RlbCwgRmllbGRWYWx1ZT4odGhpcywgcHJvcGVydHkpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcjxGaWVsZE1vZGVsLCBGaWVsZFZhbHVlPihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRzKC4uLnByb3BlcnRpZXM6IChrZXlvZiBFZGl0b3JNb2RlbClbXSk6IHRoaXMge1xuICAgICAgICBwcm9wZXJ0aWVzLmZvckVhY2gocCA9PiB0aGlzLmFkZEZpZWxkKHApKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkQWN0aW9uKGFjdGlvbk5hbWU6IHN0cmluZyk6IEZpZWxkQWN0aW9uRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZEFjdGlvbkRlc2NyaXB0b3IodGhpcywgYWN0aW9uTmFtZSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgbG9va3VwIGZpZWxkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtQcm9wZXJ0eX0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBlZGl0b3IuXG4gICAgICogQHBhcmFtIHtUeXBlRGVzY3JpcHRvcjxGaWVsZE1vZGVsPn0gdHlwZSAtIFRoZSB0eXBlIGRlc2NyaXB0b3IgZm9yIHRoZSBsb29rdXAgbW9kZWwuXG4gICAgICogQHR5cGVwYXJhbSBQcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIEVkaXRvck1vZGVsLlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwTW9kZWwgLSBUaGUgZmllbGQgbW9kZWwgdHlwZSwgZGVmYXVsdHMgdG8gdGhlIG5vbi1udWxsYWJsZSB0eXBlIG9mIHRoZSBlZGl0b3IncyBwcm9wZXJ0eS5cbiAgICAgKiBAdHlwZXBhcmFtIEZpZWxkVmFsdWUgLSBUaGUgdmFsdWUgdHlwZSBvZiBmaWVsZCBvbiBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7RmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgdW5kZWZpbmVkLCBGaWVsZFZhbHVlPn0gLSBUaGUgZmllbGQgbG9va3VwIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwPEsgZXh0ZW5kcyBrZXlvZiBFZGl0b3JNb2RlbCwgTG9va3VwTW9kZWwgPSBOb25OdWxsYWJsZTxFZGl0b3JNb2RlbFtLXT4sIEZpZWxkVmFsdWUgPSBFZGl0b3JNb2RlbFtLXT4ocHJvcGVydHk6IEssIHR5cGU/OiBUeXBlRGVzY3JpcHRvcjxMb29rdXBNb2RlbD4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmllbGRMb29rdXBVbnNhZmU8TG9va3VwTW9kZWwsIEZpZWxkVmFsdWU+KHByb3BlcnR5IGFzIHN0cmluZywgdHlwZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW1VOU0FGRV0gQWRkcyBsb29rdXAgZmllbGQuXG4gICAgICogVGhpcyBtZXRob2QgaXMgVU5TQUZFIGJlY2F1c2UgcHJvcGVydHkgaXMgbm90IHR5cGUtY2hlY2tlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSBNb2RlbCBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB7VHlwZURlc2NyaXB0b3I8RmllbGRNb2RlbD59IHR5cGUgLSBUaGUgdHlwZSBkZXNjcmlwdG9yIGZvciB0aGUgbG9va3VwIG1vZGVsIChkZWZpbmVzIDJuZCBnZW5lcmljKS5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cE1vZGVsIC0gVGhlIGZpZWxkIG1vZGVsIHR5cGUsIGRlZmF1bHRzIHRvIHRoZSBub24tbnVsbGFibGUgdHlwZSBvZiB0aGUgZWRpdG9yJ3MgcHJvcGVydHkuXG4gICAgICogQHR5cGVwYXJhbSBGaWVsZFZhbHVlIC0gVGhlIHZhbHVlIHR5cGUgb2YgZmllbGQgb24gZWRpdG9yLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0ZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIHVuZGVmaW5lZCwgRmllbGRWYWx1ZT59IC0gVGhlIGZpZWxkIGxvb2t1cCBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWVsZExvb2t1cFVuc2FmZTxMb29rdXBNb2RlbCwgRmllbGRWYWx1ZSA9IExvb2t1cE1vZGVsPihwcm9wZXJ0eTogc3RyaW5nLCB0eXBlPzogVHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+KSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIHVuZGVmaW5lZCwgRmllbGRWYWx1ZT4odGhpcywgcHJvcGVydHksIHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGU/LmNsYXNzVHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIGZpZWxkIGxvb2t1cCB3aXRoIG9wdGlvbnMgdmFsdWUgcHJvcGVydHkgZm9yIGxvb2t1cCBtb2RlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UHJvcGVydHl9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgZWRpdG9yLlxuICAgICAqIEBwYXJhbSB7VHlwZURlc2NyaXB0b3I8RmllbGRNb2RlbD59IHR5cGUgLSBUaGUgdHlwZSBkZXNjcmlwdG9yIGZvciB0aGUgbG9va3VwIG1vZGVsLlxuICAgICAqIEBwYXJhbSB7TG9va3VwVmFsdWVQcm9wZXJ0eX0gbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHkgLSBUaGUgdmFsdWUgcHJvcGVydHkgdXNlZCBhcyB2YWx1ZSBpbiB0aGUgbG9va3VwIG9wdGlvbnMuXG4gICAgICogQHR5cGVwYXJhbSBQcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIEVkaXRvck1vZGVsLlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwTW9kZWwgLSBUaGUgZmllbGQgbW9kZWwgdHlwZSwgZGVmYXVsdHMgdG8gdGhlIG5vbi1udWxsYWJsZSB0eXBlIG9mIHRoZSBlZGl0b3IncyBwcm9wZXJ0eS5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cFZhbHVlUHJvcGVydHkgLSBUaGUgcHJvcGVydHkgb2YgbG9va3VwIG1vZGVsIHR5cGUuXG4gICAgICogQHR5cGVwYXJhbSBGaWVsZFZhbHVlIC0gVGhlIHZhbHVlIHR5cGUgb2YgZmllbGQgb24gZWRpdG9yLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0ZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIHVuZGVmaW5lZCwgRmllbGRWYWx1ZT59IC0gVGhlIGZpZWxkIGxvb2t1cCBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWVsZExvb2t1cFdpdGhPcHRpb25zVmFsdWVQcm9wZXJ0eTxcbiAgICAgICAgUHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBFZGl0b3JNb2RlbCxcbiAgICAgICAgTG9va3VwTW9kZWwsXG4gICAgICAgIExvb2t1cFZhbHVlUHJvcGVydHkgZXh0ZW5kcyBLZXlvZkFuZE9mVHlwZTxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWxbUHJvcGVydHldPixcbiAgICAgICAgRmllbGRWYWx1ZSA9IEVkaXRvck1vZGVsW1Byb3BlcnR5XVxuICAgID4ocHJvcGVydHk6IFByb3BlcnR5LCB0eXBlOiBUeXBlRGVzY3JpcHRvcjxMb29rdXBNb2RlbD4sIGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5OiBMb29rdXBWYWx1ZVByb3BlcnR5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEZpZWxkTG9va3VwV2l0aE9wdGlvbnNWYWx1ZVByb3BlcnR5VW5zYWZlPExvb2t1cE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSBhcyBzdHJpbmcsIHR5cGUsIGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogW1VOU0FGRV0gQWRkcyBhIGZpZWxkIGxvb2t1cCB3aXRoIG9wdGlvbnMgdmFsdWUgcHJvcGVydHkgZm9yIGxvb2t1cCBtb2RlbC5cbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBVTlNBRkUgYmVjYXVzZSBwcm9wZXJ0eSBpcyBub3QgdHlwZS1jaGVja2VkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtQcm9wZXJ0eX0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBlZGl0b3IuXG4gICAgICogQHBhcmFtIHtUeXBlRGVzY3JpcHRvcjxGaWVsZE1vZGVsPn0gdHlwZSAtIFRoZSB0eXBlIGRlc2NyaXB0b3IgZm9yIHRoZSBsb29rdXAgbW9kZWwuXG4gICAgICogQHBhcmFtIHtMb29rdXBWYWx1ZVByb3BlcnR5fSBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eSAtIFRoZSB2YWx1ZSBwcm9wZXJ0eSB1c2VkIGFzIHZhbHVlIGluIHRoZSBsb29rdXAgb3B0aW9ucy5cbiAgICAgKiBAdHlwZXBhcmFtIFByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgRWRpdG9yTW9kZWwuXG4gICAgICogQHR5cGVwYXJhbSBMb29rdXBNb2RlbCAtIFRoZSBmaWVsZCBtb2RlbCB0eXBlLCBkZWZhdWx0cyB0byB0aGUgbm9uLW51bGxhYmxlIHR5cGUgb2YgdGhlIGVkaXRvcidzIHByb3BlcnR5LlxuICAgICAqIEB0eXBlcGFyYW0gTG9va3VwVmFsdWVQcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBvZiBsb29rdXAgbW9kZWwgdHlwZS5cbiAgICAgKiBAdHlwZXBhcmFtIEZpZWxkVmFsdWUgLSBUaGUgdmFsdWUgdHlwZSBvZiBmaWVsZCBvbiBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7RmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgdW5kZWZpbmVkLCBGaWVsZFZhbHVlPn0gLSBUaGUgZmllbGQgbG9va3VwIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZEZpZWxkTG9va3VwV2l0aE9wdGlvbnNWYWx1ZVByb3BlcnR5VW5zYWZlPExvb2t1cE1vZGVsLCBGaWVsZFZhbHVlID0gTnVsbGFibGU8SWRUeXBlPj4oXG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgICAgIHR5cGU6IFR5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPixcbiAgICAgICAgbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHk6IHN0cmluZ1xuICAgICkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsLCB1bmRlZmluZWQsIEZpZWxkVmFsdWU+KHRoaXMsIHByb3BlcnR5LCB7XG4gICAgICAgICAgICB0eXBlOiB0eXBlPy5jbGFzc1R5cGUsXG4gICAgICAgICAgICBvcHRpb25zVmFsdWVQcm9wZXJ0eTogbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHlcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBGaWVsZFZhbHVlPihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgZmllbGQgbG9va3VwIHdpdGggYSBkYXRhIHByb3ZpZGVyIG9yIHNlcnZpY2UgdG8gdGhlIGVkaXRvciBtb2RlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UHJvcGVydHl9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgZWRpdG9yLlxuICAgICAqIEBwYXJhbSB7RmllbGRMb29rdXBQcm92aWRlclR5cGU8TG9va3VwTW9kZWwsIFNlcnZpY2U+fSBwcm92aWRlciAtIFRoZSBmaWVsZCBsb29rdXAgZGF0YSBwcm92aWRlciBvciBzZXJ2aWNlLlxuICAgICAqIEBwYXJhbSB7VHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+fSBbdHlwZV0gLSBUaGUgdHlwZSBvZiBsb29rdXAgLSBpZiBkYXRhIHByb3ZpZGVyIGlzIHBhc3NlZCBhcyBwcmV2aW91cyBwYXJhbWV0ZXIsIHR5cGUgY2FuIGJlIG9taXR0ZWQuIElmIHNlcnZpY2UgaXMgcHJvdmlkZXIsIHR5cGUgcGFyYW1ldGVyIGlzIHByb3Bvc2VkIGluIGZhdm91ciBvZiBjb3JyZWN0IHR5cGluZy5cbiAgICAgKiBAdHlwZXBhcmFtIFByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgRWRpdG9yTW9kZWwuXG4gICAgICogQHR5cGVwYXJhbSBTZXJ2aWNlIC0gVGhlIGxvb2t1cCBzZXJ2aWNlIHR5cGUuXG4gICAgICogQHR5cGVwYXJhbSBMb29rdXBNb2RlbCAtIFRoZSBmaWVsZCBtb2RlbCB0eXBlLCBkZWZhdWx0cyB0byB0aGUgbm9uLW51bGxhYmxlIHR5cGUgb2YgdGhlIGVkaXRvcidzIHByb3BlcnR5LlxuICAgICAqIEB0eXBlcGFyYW0gRmllbGRWYWx1ZSAtIFRoZSBmaWVsZCB2YWx1ZSB0eXBlLCBkZWZhdWx0cyB0byB0aGUgZWRpdG9yJ3MgcHJvcGVydHkgdHlwZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsLCBTZXJ2aWNlLCBGaWVsZFZhbHVlPn0gQ3JlYXRlZCBmaWVsZCBsb29rdXAgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXBXaXRoUHJvdmlkZXI8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBFZGl0b3JNb2RlbCwgU2VydmljZSwgTG9va3VwTW9kZWwgPSBOb25OdWxsYWJsZTxFZGl0b3JNb2RlbFtQcm9wZXJ0eV0+LCBGaWVsZFZhbHVlID0gRWRpdG9yTW9kZWxbUHJvcGVydHldPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICBwcm92aWRlcjogRmllbGRMb29rdXBQcm92aWRlclR5cGU8TG9va3VwTW9kZWwsIFNlcnZpY2U+LFxuICAgICAgICB0eXBlPzogVHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+XG4gICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEZpZWxkTG9va3VwV2l0aFByb3ZpZGVyVW5zYWZlPExvb2t1cE1vZGVsLCBTZXJ2aWNlLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSBhcyBzdHJpbmcsIHByb3ZpZGVyLCB0eXBlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBbVU5TQUZFXSBBZGRzIGEgZmllbGQgbG9va3VwIHdpdGggYSBkYXRhIHByb3ZpZGVyIG9yIHNlcnZpY2UgdG8gdGhlIGVkaXRvciBtb2RlbC5cbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBVTlNBRkUgYmVjYXVzZSBwcm9wZXJ0eSBpcyBub3QgdHlwZS1jaGVja2VkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgZWRpdG9yLlxuICAgICAqIEBwYXJhbSB7RmllbGRMb29rdXBQcm92aWRlclR5cGU8TG9va3VwTW9kZWwsIFNlcnZpY2U+fSBwcm92aWRlciAtIFRoZSBsb29rdXAgcHJvdmlkZXIgb3Igc2VydmljZSBmb3IgdGhlIGZpZWxkIGxvb2t1cC5cbiAgICAgKiBAcGFyYW0ge1R5cGVEZXNjcmlwdG9yPExvb2t1cE1vZGVsPj99IHR5cGUgLSBPcHRpb25hbCB0eXBlIGRlc2NyaXB0b3IgZm9yIHRoZSBmaWVsZCBsb29rdXAuXG4gICAgICogQHR5cGVwYXJhbSBMb29rdXBNb2RlbCAtIFRoZSBmaWVsZCBsb29rdXAgbW9kZWwgdHlwZS5cbiAgICAgKiBAdHlwZXBhcmFtIFNlcnZpY2UgLSBUaGUgbG9va3VwIHNlcnZpY2UgdHlwZS5cbiAgICAgKiBAdHlwZXBhcmFtIEZpZWxkVmFsdWUgLSBUaGUgdmFsdWUgdHlwZSBvZiBmaWVsZCBvbiBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7RmllbGRMb29rdXBEZXNjcmlwdG9yPExvb2t1cE1vZGVsLCBFZGl0b3JNb2RlbCwgU2VydmljZSwgRmllbGRWYWx1ZT59IC0gVGhlIGZpZWxkIGxvb2t1cCBkZXNjcmlwdG9yIGFkZGVkIHRvIHRoZSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXBXaXRoUHJvdmlkZXJVbnNhZmU8TG9va3VwTW9kZWwsIFNlcnZpY2UsIEZpZWxkVmFsdWUgPSBMb29rdXBNb2RlbD4oXG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgICAgIHByb3ZpZGVyOiBGaWVsZExvb2t1cFByb3ZpZGVyVHlwZTxMb29rdXBNb2RlbCwgU2VydmljZT4sXG4gICAgICAgIHR5cGU/OiBUeXBlRGVzY3JpcHRvcjxMb29rdXBNb2RlbD5cbiAgICApIHtcbiAgICAgICAgY29uc3QgY2ZnID0gZmllbGRMb29rdXBHZXRQcm92aWRlckNmZ09iaihwcm92aWRlcik7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIFNlcnZpY2UsIEZpZWxkVmFsdWU+KHRoaXMsIHByb3BlcnR5LCB7XG4gICAgICAgICAgICB0eXBlOiB0eXBlPy5jbGFzc1R5cGUsXG4gICAgICAgICAgICAuLi5jZmdcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBmaWVsZCBsb29rdXAgd2l0aCBkYXRhIHByb3ZpZGVyIG9yIHNlcnZpY2UgYW5kIG9wdGlvbnMgdmFsdWUgcHJvcGVydHkgZm9yIGxvb2t1cCBtb2RlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UHJvcGVydHl9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgZWRpdG9yLlxuICAgICAqIEBwYXJhbSB7RmllbGRMb29rdXBQcm92aWRlclR5cGU8RmllbGRNb2RlbCwgU2VydmljZT59IHByb3ZpZGVyIC0gVGhlIGxvb2t1cCBwcm92aWRlci5cbiAgICAgKiBAcGFyYW0ge1R5cGVEZXNjcmlwdG9yPEZpZWxkTW9kZWw+fSB0eXBlIC0gVGhlIHR5cGUgZGVzY3JpcHRvciBmb3IgdGhlIGxvb2t1cCBtb2RlbC5cbiAgICAgKiBAcGFyYW0ge0xvb2t1cFZhbHVlUHJvcGVydHl9IGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5IC0gVGhlIHZhbHVlIHByb3BlcnR5IHVzZWQgYXMgdmFsdWUgaW4gdGhlIGxvb2t1cCBvcHRpb25zLlxuICAgICAqIEB0eXBlcGFyYW0gUHJvcGVydHkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSBFZGl0b3JNb2RlbC5cbiAgICAgKiBAdHlwZXBhcmFtIFNlcnZpY2UgLSBUaGUgbG9va3VwIHNlcnZpY2UgdHlwZS5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cE1vZGVsIC0gVGhlIGZpZWxkIG1vZGVsIHR5cGUsIGRlZmF1bHRzIHRvIHRoZSBub24tbnVsbGFibGUgdHlwZSBvZiB0aGUgZWRpdG9yJ3MgcHJvcGVydHkuXG4gICAgICogQHR5cGVwYXJhbSBMb29rdXBWYWx1ZVByb3BlcnR5IC0gVGhlIHByb3BlcnR5IG9mIGxvb2t1cCBtb2RlbCB0eXBlLlxuICAgICAqIEB0eXBlcGFyYW0gRmllbGRWYWx1ZSAtIFRoZSB2YWx1ZSB0eXBlIG9mIGZpZWxkIG9uIGVkaXRvci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsLCBTZXJ2aWNlLCBGaWVsZFZhbHVlPn0gLSBUaGUgZmllbGQgbG9va3VwIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgYWRkRmllbGRMb29rdXBXaXRoUHJvdmlkZXJBbmRPcHRpb25zVmFsdWVQcm9wZXJ0eTxcbiAgICAgICAgUHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBFZGl0b3JNb2RlbCxcbiAgICAgICAgU2VydmljZSxcbiAgICAgICAgTG9va3VwTW9kZWwsXG4gICAgICAgIExvb2t1cFZhbHVlUHJvcGVydHkgZXh0ZW5kcyBLZXlvZkFuZE9mVHlwZTxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWxbUHJvcGVydHldPixcbiAgICAgICAgRmllbGRWYWx1ZSA9IEVkaXRvck1vZGVsW1Byb3BlcnR5XVxuICAgID4oXG4gICAgICAgIHByb3BlcnR5OiBQcm9wZXJ0eSxcbiAgICAgICAgcHJvdmlkZXI6IEZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPExvb2t1cE1vZGVsLCBTZXJ2aWNlPixcbiAgICAgICAgdHlwZTogVHlwZURlc2NyaXB0b3I8TG9va3VwTW9kZWw+LFxuICAgICAgICBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eTogTG9va3VwVmFsdWVQcm9wZXJ0eVxuICAgICk6IEZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIFNlcnZpY2UsIEZpZWxkVmFsdWU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmllbGRMb29rdXBXaXRoUHJvdmlkZXJBbmRPcHRpb25zVmFsdWVQcm9wZXJ0eVVuc2FmZShwcm9wZXJ0eSBhcyBzdHJpbmcsIHByb3ZpZGVyLCB0eXBlLCBsb29rdXBPcHRpb25zVmFsdWVQcm9wZXJ0eSBhcyBzdHJpbmcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFtVTlNBRkVdIEFkZHMgYSBmaWVsZCBsb29rdXAgd2l0aCBkYXRhIHByb3ZpZGVyIG9yIHNlcnZpY2UgYW5kIG9wdGlvbnMgdmFsdWUgcHJvcGVydHkgZm9yIGxvb2t1cCBtb2RlbC5cbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBVTlNBRkUgYmVjYXVzZSBwcm9wZXJ0eSBpcyBub3QgdHlwZS1jaGVja2VkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgZWRpdG9yLlxuICAgICAqIEBwYXJhbSB7RmllbGRMb29rdXBQcm92aWRlclR5cGU8RmllbGRNb2RlbCwgU2VydmljZT59IHByb3ZpZGVyIC0gVGhlIGxvb2t1cCBwcm92aWRlci5cbiAgICAgKiBAcGFyYW0ge1R5cGVEZXNjcmlwdG9yPEZpZWxkTW9kZWw+fSB0eXBlIC0gVGhlIHR5cGUgZGVzY3JpcHRvciBmb3IgdGhlIGxvb2t1cCBtb2RlbC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbG9va3VwT3B0aW9uc1ZhbHVlUHJvcGVydHkgLSBUaGUgdmFsdWUgcHJvcGVydHkgdXNlZCBpbiB0aGUgbG9va3VwIG9wdGlvbnMuXG4gICAgICogQHR5cGVwYXJhbSBTZXJ2aWNlIC0gVGhlIHNlcnZpY2UgdHlwZS5cbiAgICAgKiBAdHlwZXBhcmFtIExvb2t1cE1vZGVsIC0gVGhlIGZpZWxkIG1vZGVsIHR5cGUsIGRlZmF1bHRzIHRvIHRoZSBub24tbnVsbGFibGUgdHlwZSBvZiB0aGUgZWRpdG9yJ3MgcHJvcGVydHkuXG4gICAgICogQHR5cGVwYXJhbSBGaWVsZFZhbHVlIC0gVGhlIHZhbHVlIHR5cGUgb2YgZmllbGQgb24gZWRpdG9yLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0ZpZWxkTG9va3VwRGVzY3JpcHRvcjxMb29rdXBNb2RlbCwgRWRpdG9yTW9kZWwsIFNlcnZpY2UsIEZpZWxkVmFsdWU+fSAtIFRoZSBmaWVsZCBsb29rdXAgZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBhZGRGaWVsZExvb2t1cFdpdGhQcm92aWRlckFuZE9wdGlvbnNWYWx1ZVByb3BlcnR5VW5zYWZlPFNlcnZpY2UsIExvb2t1cE1vZGVsLCBGaWVsZFZhbHVlID0gTG9va3VwTW9kZWw+KFxuICAgICAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgICAgICBwcm92aWRlcjogRmllbGRMb29rdXBQcm92aWRlclR5cGU8TG9va3VwTW9kZWwsIFNlcnZpY2U+LFxuICAgICAgICB0eXBlOiBUeXBlRGVzY3JpcHRvcjxMb29rdXBNb2RlbD4sXG4gICAgICAgIGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5OiBzdHJpbmdcbiAgICApOiBGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsLCBTZXJ2aWNlLCBGaWVsZFZhbHVlPiB7XG4gICAgICAgIGNvbnN0IGNmZyA9IGZpZWxkTG9va3VwR2V0UHJvdmlkZXJDZmdPYmoocHJvdmlkZXIpO1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZExvb2t1cERlc2NyaXB0b3I8TG9va3VwTW9kZWwsIEVkaXRvck1vZGVsLCBTZXJ2aWNlLCBGaWVsZFZhbHVlPih0aGlzLCBwcm9wZXJ0eSwge1xuICAgICAgICAgICAgdHlwZTogdHlwZT8uY2xhc3NUeXBlLFxuICAgICAgICAgICAgb3B0aW9uc1ZhbHVlUHJvcGVydHk6IGxvb2t1cE9wdGlvbnNWYWx1ZVByb3BlcnR5LFxuICAgICAgICAgICAgLi4uY2ZnXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXBFbnVtPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgRWRpdG9yTW9kZWwsIEVudW0gZXh0ZW5kcyBOb25OdWxsYWJsZTxFZGl0b3JNb2RlbFtQcm9wZXJ0eV0+PihcbiAgICAgICAgcHJvcGVydHk6IGtleW9mIEVkaXRvck1vZGVsLFxuICAgICAgICBlbnVtRGVzYzogRW51bURlc2NyaXB0b3I8RW51bT4sXG4gICAgICAgIG9wdGlvbnM/OiBBcnJheTxFbnVtPlxuICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRGaWVsZExvb2t1cEVudW1VbnNhZmU8RW51bT4ocHJvcGVydHkgYXMgc3RyaW5nLCBlbnVtRGVzYywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBlbnVtIGxvb2t1cCBmaWVsZC5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTW9kZWwncyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSBlbnVtRGVzYyBUeXBlIG9mIGVudW0gb3IgZW51bSBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFByb3ZpZGVzIHN1YnNldCBvZiBlbnVtJ3MgYXZhaWxhYmxlIGNvbnN0YW50cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRMb29rdXBFbnVtVW5zYWZlPEVudW0gPSBFbnVtQ29uc3RhbnRUeXBlPihwcm9wZXJ0eTogc3RyaW5nLCBlbnVtRGVzYzogRW51bURlc2NyaXB0b3I8RW51bT4sIG9wdGlvbnM/OiBBcnJheTxFbnVtPikge1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yPEVudW0sIEVkaXRvck1vZGVsPih0aGlzLCBwcm9wZXJ0eSwgZW51bURlc2MsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHRhYmxlL2RldGFpbHMvYWRkL2VkaXQgZmllbGQgZm9yIG9uZS10by1tYW55ICgxOm4pIHJlbGF0aW9ucy5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTW9kZWwncyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSB0YWJsZXZpZXdEZXNjcmlwdG9yIFRhYmxldmlldyBkZXNjcmlwdG9yIGZvciByZWxhdGVkIG1vZGVsLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGaWVsZE1hbnlFZGl0b3I8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBFZGl0b3JNb2RlbCwgRmllbGRNb2RlbCA9IEFycmF5SXRlbVR5cGU8RWRpdG9yTW9kZWxbUHJvcGVydHldPiwgRmllbGRWYWx1ZSA9IEVkaXRvck1vZGVsW1Byb3BlcnR5XT4oXG4gICAgICAgIHByb3BlcnR5OiBQcm9wZXJ0eSxcbiAgICAgICAgdGFibGV2aWV3RGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD5cbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmllbGRNYW55RWRpdG9yVW5zYWZlPEZpZWxkTW9kZWwsIEZpZWxkVmFsdWU+KHByb3BlcnR5IGFzIHN0cmluZywgdGFibGV2aWV3RGVzY3JpcHRvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyB0YWJsZS9kZXRhaWxzL2FkZC9lZGl0IGZpZWxkIGZvciBvbmUtdG8tbWFueSAoMTpuKSByZWxhdGlvbnMgKFVOU0FGRSkuXG4gICAgICogQHBhcmFtIHByb3BlcnR5IE1vZGVsJ3MgcHJvcGVydHkgbmFtZS5cbiAgICAgKiBAcGFyYW0gdGFibGV2aWV3RGVzY3JpcHRvciBUYWJsZXZpZXcgZGVzY3JpcHRvciBmb3IgcmVsYXRlZCBtb2RlbC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRmllbGRNYW55RWRpdG9yVW5zYWZlPEZpZWxkTW9kZWwsIEZpZWxkVmFsdWUgPSBGaWVsZE1vZGVsW10+KHByb3BlcnR5OiBzdHJpbmcsIHRhYmxldmlld0Rlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+KSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkTWFueUVkaXRvckRlc2NyaXB0b3I8RmllbGRNb2RlbCwgRWRpdG9yTW9kZWwsIEZpZWxkVmFsdWU+KHRoaXMsIHByb3BlcnR5LCB0YWJsZXZpZXdEZXNjcmlwdG9yKTtcbiAgICAgICAgdGhpcy5hZGRGaWVsZERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpZWxkTWFueVRvTWFueUVkaXRvcjxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIEVkaXRvck1vZGVsLCBTZXJ2aWNlVHlwZSwgRmllbGRNb2RlbCA9IEFycmF5SXRlbVR5cGU8RWRpdG9yTW9kZWxbUHJvcGVydHldPiwgRmllbGRWYWx1ZSA9IEVkaXRvck1vZGVsW1Byb3BlcnR5XT4oXG4gICAgICAgIHByb3BlcnR5OiBQcm9wZXJ0eSxcbiAgICAgICAgbWFpblRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPixcbiAgICAgICAgbG9va3VwVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+LFxuICAgICAgICBsb29rdXBEYXRhUHJvdmlkZXI6IElUYWJsZURhdGFQcm92aWRlcjxGaWVsZE1vZGVsLCBTZXJ2aWNlVHlwZT5cbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkRmllbGRNYW55VG9NYW55RWRpdG9yVW5zYWZlPEZpZWxkTW9kZWwsIFNlcnZpY2VUeXBlLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSBhcyBzdHJpbmcsIG1haW5UYWJsZURlc2NyaXB0b3IsIGxvb2t1cFRhYmxlRGVzY3JpcHRvciwgbG9va3VwRGF0YVByb3ZpZGVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGRNYW55VG9NYW55RWRpdG9yVW5zYWZlPEZpZWxkTW9kZWwsIFNlcnZpY2VUeXBlLCBGaWVsZFZhbHVlID0gRmllbGRNb2RlbFtdPihcbiAgICAgICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICAgICAgbWFpblRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPixcbiAgICAgICAgbG9va3VwVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+LFxuICAgICAgICBsb29rdXBEYXRhUHJvdmlkZXI6IElUYWJsZURhdGFQcm92aWRlcjxGaWVsZE1vZGVsLCBTZXJ2aWNlVHlwZT5cbiAgICApOiBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yPEZpZWxkTW9kZWwsIEVkaXRvck1vZGVsLCBTZXJ2aWNlVHlwZSwgRmllbGRWYWx1ZT4ge1xuICAgICAgICBjb25zdCBjZmcgPSBmaWVsZE1hbnlUb01hbnlHZXRQcm92aWRlckNmZ09iaihsb29rdXBEYXRhUHJvdmlkZXIpO1xuICAgICAgICBjb25zdCBmaWVsZCA9IG5ldyBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yPEZpZWxkTW9kZWwsIEVkaXRvck1vZGVsLCBTZXJ2aWNlVHlwZSwgRmllbGRWYWx1ZT4odGhpcywgcHJvcGVydHksIG1haW5UYWJsZURlc2NyaXB0b3IsIGxvb2t1cFRhYmxlRGVzY3JpcHRvciwge1xuICAgICAgICAgICAgLi4uY2ZnXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyBmaWVsZCBvbiBlZGl0b3IuXG4gICAgICogQHBhcmFtIGRpc2FibGVkXG4gICAgICovXG4gICAgcHVibGljIHdpdGhEaXNhYmxlZChkaXNhYmxlZCA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBncm91cCB2YWxpZGF0b3IgdG8gZWRpdG9yLlxuICAgICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHZhbGlkYXRpb24uXG4gICAgICogQHBhcmFtIHZhbGlkYXRvciBGaWVsZCB2YWxpZGF0b3IgZnVuY3Rpb24uXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgRmllbGQgdmFsaWRhdGlvbiBtZXNzYWdlLlxuICAgICAqIEBwYXJhbSBvcHRzIEFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdmFsaWRhdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFZhbGlkYXRpb248VmFsdWUgPSBFZGl0b3JNb2RlbD4oXG4gICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgICAgdmFsaWRhdG9yPzogRm9ybVZhbGlkYXRvcjxWYWx1ZT4sXG4gICAgICAgIG1lc3NhZ2U/OiBGb3JtVmFsaWRhdGlvbk1lc3NhZ2U8VmFsdWU+LFxuICAgICAgICBvcHRzPzogRmllbGRWYWxpZGF0aW9uRGVzY3JpcHRvck9wdHNUeXBlPGtleW9mIEVkaXRvck1vZGVsPlxuICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoVmFsaWRhdGlvblVuc2FmZShuYW1lLCB2YWxpZGF0b3IsIG1lc3NhZ2UsIG9wdHMgYXMgRmllbGRWYWxpZGF0aW9uRGVzY3JpcHRvck9wdHNUeXBlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGdyb3VwIHZhbGlkYXRvciB0byBlZGl0b3IuXG4gICAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgdmFsaWRhdGlvbi5cbiAgICAgKiBAcGFyYW0gdmFsaWRhdG9yIEZpZWxkIHZhbGlkYXRvciBmdW5jdGlvbi5cbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBGaWVsZCB2YWxpZGF0aW9uIG1lc3NhZ2UuXG4gICAgICogQHBhcmFtIG9wdHMgQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGZvciB2YWxpZGF0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoVmFsaWRhdGlvblVuc2FmZTxWYWx1ZSA9IEVkaXRvck1vZGVsPihcbiAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICB2YWxpZGF0b3I/OiBGb3JtVmFsaWRhdG9yPFZhbHVlPixcbiAgICAgICAgbWVzc2FnZT86IEZvcm1WYWxpZGF0aW9uTWVzc2FnZTxWYWx1ZT4sXG4gICAgICAgIG9wdHM/OiBGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yT3B0c1R5cGVcbiAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRHcm91cCkge1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudEdyb3VwLndpdGhWYWxpZGF0aW9uKG5hbWUsIHZhbGlkYXRvciwgbWVzc2FnZSwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNvcHkgb2YgZWRpdG9yIGRlc2NyaXB0b3Igb2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb3B5KCk6IEVkaXRvckRlc2NyaXB0b3JJbnN0PEVkaXRvck1vZGVsPiB7XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IG5ldyBFZGl0b3JEZXNjcmlwdG9ySW5zdDxFZGl0b3JNb2RlbD4odGhpcy5tb2RlbC5jb3B5KCksIHRoaXMudGFibGV2aWV3RWRpdG9yVHlwZSk7XG4gICAgICAgIGZvciAoY29uc3QgdGFiR3JvdXAgb2YgdGhpcy5fdGFicykge1xuICAgICAgICAgICAgZWRpdG9yLmNyZWF0ZVRhYkdyb3VwRGVzY3JpcHRvcih0YWJHcm91cC5jb3B5KCkpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgdGFiR3JvdXAgb2YgZWRpdG9yLl90YWJzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkR3JvdXAgb2YgdGFiR3JvdXAuZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgZWRpdG9yLl9maWVsZHMucHVzaCguLi5maWVsZEdyb3VwLmZpZWxkcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlZGl0b3IuX2dyb3Vwcy5wdXNoKC4uLnRhYkdyb3VwLmZpZWxkcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yLl9jdXJyZW50VGFiR3JvdXAgPSBlZGl0b3IuX3RhYnNbZWRpdG9yLl90YWJzLmxlbmd0aCAtIDFdO1xuICAgICAgICBlZGl0b3IuX2N1cnJlbnRHcm91cCA9IGVkaXRvci5fY3VycmVudFRhYkdyb3VwLmZpZWxkc1tlZGl0b3IuX2N1cnJlbnRUYWJHcm91cC5maWVsZHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGVkaXRvci5fZGlzYWJsZWQgPSB0aGlzLl9kaXNhYmxlZDtcbiAgICAgICAgcmV0dXJuIGVkaXRvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVkIGdyb3VwIGZyb20gZmllbGQgZ3JvdXAgZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gZmllbGRHcm91cCBGaWVsZCBncm91cCBkZXNjcmlwdG9yLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVGaWVsZEdyb3VwRGVzY3JpcHRvcihmaWVsZEdyb3VwOiBGaWVsZEdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5jcmVhdGVEZWZhdWx0VGFiR3JvdXAoKTtcbiAgICAgICAgdGhpcy5fY3VycmVudEdyb3VwID0gZmllbGRHcm91cDtcbiAgICAgICAgdGhpcy5fZ3JvdXBzLnB1c2goZmllbGRHcm91cCk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRUYWJHcm91cD8uYWRkRmllbGQoZmllbGRHcm91cCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgdGFiIGdyb3VwIGZyb20gdGFiIGdyb3VwIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHRhYkdyb3VwIFRhYiBncm91cCBkZXNjcmlwdG9yLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVUYWJHcm91cERlc2NyaXB0b3IodGFiR3JvdXA6IEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9jdXJyZW50VGFiR3JvdXAgPSB0YWJHcm91cDtcbiAgICAgICAgdGhpcy5fdGFicy5wdXNoKHRhYkdyb3VwKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBkZWZhdWx0IGZpZWxkIGdyb3VwLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlRGVmYXVsdEdyb3VwKCkge1xuICAgICAgICB0aGlzLmNyZWF0ZURlZmF1bHRUYWJHcm91cCgpO1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudFRhYkdyb3VwPy5maWVsZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZpZWxkR3JvdXAoRWRpdG9yRGVzY3JpcHRvckluc3QuZGVmYXVsdEdyb3VwTmFtZSwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGRlZmF1bHQgdGFiIGdyb3VwLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlRGVmYXVsdFRhYkdyb3VwKCkge1xuICAgICAgICBpZiAodGhpcy5fdGFicy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlVGFiR3JvdXAoRWRpdG9yRGVzY3JpcHRvckluc3QuZGVmYXVsdEdyb3VwTmFtZSwgJ2dlbmVyYWwuZ2VuZXJhbCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW9kaWZpZXMgc2VsZWN0ZWQgZmllbGQgYnkgZmllbGQgcHJvcGVydHkuIEZvciBlbnVtcyB1c2Uge3dpdGhGaWVsZE1vZGlmaWVkRW51bX0gaW5zdGVhZC5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTW9kZWwncyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSBmaWVsZFR5cGUgbmV3IGZpZWxkIHR5cGUgZm9yIHNlbGVjdGVkIGZpZWxkXG4gICAgICogQHBhcmFtIGFyZ3MgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZvciBmaWVsZFxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRmllbGRNb2RpZmllZFR5cGUocHJvcGVydHk6IGtleW9mIEVkaXRvck1vZGVsLCBmaWVsZFR5cGU6IEZpZWxkSW5wdXRUeXBlRW51bSwgLi4uYXJnczogYW55W10pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aEZpZWxkTW9kaWZpZWRUeXBlVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgZmllbGRUeXBlLCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpZWxkTW9kaWZpZWRUeXBlVW5zYWZlKHByb3BlcnR5OiBzdHJpbmcsIGZpZWxkVHlwZTogRmllbGRJbnB1dFR5cGVFbnVtLCAuLi5hcmdzOiBhbnlbXSk6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMubW9kZWwudHlwZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGB3aXRoRmllbGRNb2RpZmllZFR5cGUgY2Fubm90IGJlIGV4ZWN1dGVkIGZvciBwcm9wZXJ0eSAke3Byb3BlcnR5fTogTW9kZWwgdHlwZSBpcyBub3QgZGVmaW5lZC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IGdldEVkaXRvckNsYXNzQXR0cmlidXRlRGVmKHRoaXMubW9kZWwudHlwZSkuZmluZChhdHRyaWJ1dGUgPT4gYXR0cmlidXRlLm5hbWUgPT09IHByb3BlcnR5KTtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgYXR0cmlidXRlLmZpZWxkVHlwZSA9IGZpZWxkVHlwZTtcbiAgICAgICAgICAgIEVkaXRvckRlc2NyaXB0b3JJbnN0LnVwc2VydEZpZWxkRnJvbUF0dHJpYnV0ZURlZihcbiAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSxcbiAgICAgICAgICAgICAgICB0aGlzLmZpZWxkcy5maW5kKGZpID0+IGZpLnByb3BlcnR5ID09PSBwcm9wZXJ0eSksXG4gICAgICAgICAgICAgICAgLi4uYXJnc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vZGlmaWVzIHNlbGVjdGVkIGZpZWxkIHdpdGggZW51bSB0eXBlLlxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBNb2RlbCdzIHByb3BlcnR5IG5hbWUuXG4gICAgICogQHBhcmFtIGVudW1Nb2RlbCBFbnVtIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHZhbHVlc1xuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRmllbGRNb2RpZmllZEVudW08UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBFZGl0b3JNb2RlbCwgRW51bSBleHRlbmRzIE5vbk51bGxhYmxlPEVkaXRvck1vZGVsW1Byb3BlcnR5XT4+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIGVudW1Nb2RlbD86IEVudW1EZXNjcmlwdG9yPEVudW0+LFxuICAgICAgICB2YWx1ZXM/OiBBcnJheTxFbnVtPlxuICAgICk6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoRmllbGRNb2RpZmllZEVudW1VbnNhZmUocHJvcGVydHkgYXMgc3RyaW5nLCBlbnVtTW9kZWwsIHZhbHVlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGaWVsZE1vZGlmaWVkRW51bVVuc2FmZTxFbnVtID0gYW55Pihwcm9wZXJ0eTogc3RyaW5nLCBlbnVtRGVzYz86IEVudW1EZXNjcmlwdG9yPEVudW0+LCB2YWx1ZXM/OiBBcnJheTxFbnVtPik6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMubW9kZWwudHlwZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKGB3aXRoRmllbGRNb2RpZmllZEVudW0gY2Fubm90IGJlIGV4ZWN1dGVkIGZvciBwcm9wZXJ0eSAke3Byb3BlcnR5fTogTW9kZWwgdHlwZSBpcyBub3QgZGVmaW5lZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdHRyaWJ1dGUgPSBnZXRFZGl0b3JDbGFzc0F0dHJpYnV0ZURlZih0aGlzLm1vZGVsLnR5cGUpLmZpbmQoYSA9PiBhLm5hbWUgPT09IHByb3BlcnR5KTtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgYXR0cmlidXRlLmZpZWxkVHlwZSA9IEZpZWxkSW5wdXRUeXBlRW51bS5SYWRpbztcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHMuZmluZChmID0+IGYucHJvcGVydHkgPT09IHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChmaWVsZCAmJiBmaWVsZCBpbnN0YW5jZW9mIEZpZWxkSW5wdXREZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuYXNSYWRpb0Zyb21FbnVtKGVudW1EZXNjID8/IGVudW1Nb2RlbEdlbmVyaWMoVHlwZVJlZ2lzdHJ5LmdldCgpLmZpbmRFbnVtKGF0dHJpYnV0ZS50eXBlKSBhcyBFbnVtVHlwZSksIHZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb2RpZmllcyBzZWxlY3RlZCBmaWVsZCB3aXRoIGxvb2t1cCBmaWVsZC5cbiAgICAgKiBAcGFyYW0gcHJvcGVydHkgTW9kZWwncyBwcm9wZXJ0eSBuYW1lLlxuICAgICAqIEBwYXJhbSBsb29rdXBQcm92aWRlciBwcm92aWRlciB0byBiZSBhZGRlZCB0byBmaWVsZFxuICAgICAqIEBwYXJhbSB0aXRsZVByb3BlcnR5XG4gICAgICovXG4gICAgcHVibGljIHdpdGhGaWVsZE1vZGlmaWVkTG9va3VwV2l0aFByb3ZpZGVyPFNlcnZpY2VUeXBlLCBGaWVsZE1vZGVsPihcbiAgICAgICAgcHJvcGVydHk6IGtleW9mIEVkaXRvck1vZGVsLFxuICAgICAgICBsb29rdXBQcm92aWRlcjogSUxvb2t1cERhdGFQcm92aWRlcjxGaWVsZE1vZGVsLCBTZXJ2aWNlVHlwZT4sXG4gICAgICAgIHRpdGxlUHJvcGVydHk/OiBrZXlvZiBGaWVsZE1vZGVsXG4gICAgKTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhGaWVsZE1vZGlmaWVkTG9va3VwV2l0aFByb3ZpZGVyVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgbG9va3VwUHJvdmlkZXIsIHRpdGxlUHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZpZWxkTW9kaWZpZWRMb29rdXBXaXRoUHJvdmlkZXJVbnNhZmU8U2VydmljZSwgRmllbGRNb2RlbD4oXG4gICAgICAgIHByb3BlcnR5OiBzdHJpbmcsXG4gICAgICAgIGxvb2t1cFByb3ZpZGVyOiBJTG9va3VwRGF0YVByb3ZpZGVyPEZpZWxkTW9kZWwsIFNlcnZpY2U+LFxuICAgICAgICB0aXRsZVByb3BlcnR5Pzogc3RyaW5nXG4gICAgKTogdGhpcyB7XG4gICAgICAgIHRoaXMucmVtb3ZlRmllbGRVbnNhZmUocHJvcGVydHkpO1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuYWRkRmllbGRMb29rdXBXaXRoUHJvdmlkZXJVbnNhZmU8RmllbGRNb2RlbCwgU2VydmljZT4ocHJvcGVydHksIGxvb2t1cFByb3ZpZGVyKS5hc0F1dG9jb21wbGV0ZSgpO1xuXG4gICAgICAgIGlmICh0aXRsZVByb3BlcnR5KSB7XG4gICAgICAgICAgICAoZmllbGQgYXMgRmllbGRMb29rdXBEZXNjcmlwdG9yPGFueSwgYW55Pikud2l0aE9wdGlvbnNMYWJlbFByb3BlcnR5KHRpdGxlUHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgdGFrZXMgY2FyZSBvZiBkaXNwbGF5aW5nIGNvcnJlY3QvbG9jYWxpemVkIGRhdGEgaW4gdGhlIGVkaXRvclxuICAgICAqIEBwYXJhbSBwcm9wZXJ0eSBwcm9wZXJ0eSB0aGF0IHRlbGxzIHVzIHdoZXJlIG9uIHRoZSBtb2RlbCBhcmUgbG9jYWxpemF0aW9ucyBhY2Nlc3NpYmxlXG4gICAgICogQHBhcmFtIG1vZGVsIE1vZGVsIGZvciBsb2NhbGl6YXRpb25zXG4gICAgICogQHBhcmFtIGxvY2FsZVByb3BlcnR5IHByb3BlcnR5IGJ5IHdoaWNoIHdlIGZpbmQgdGhlIGxvY2FsZVxuICAgICAqL1xuICAgIHB1YmxpYyBsb2NhbGl6ZWQ8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBFZGl0b3JNb2RlbCwgTG9jYWxpemF0aW9uTW9kZWwgPSBBcnJheUl0ZW1UeXBlPEVkaXRvck1vZGVsW1Byb3BlcnR5XT4+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TG9jYWxpemF0aW9uTW9kZWw+LFxuICAgICAgICBsb2NhbGVQcm9wZXJ0eToga2V5b2YgTG9jYWxpemF0aW9uTW9kZWxcbiAgICApOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemVkVW5zYWZlKHByb3BlcnR5IGFzIHN0cmluZywgbW9kZWwsIGxvY2FsZVByb3BlcnR5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGxvY2FsaXplZFVuc2FmZTxMb2NhbGl6YXRpb25UeXBlPihwcm9wZXJ0eTogc3RyaW5nLCBtb2RlbDogTW9kZWxEZXNjcmlwdG9yPExvY2FsaXphdGlvblR5cGU+LCBsb2NhbGVQcm9wZXJ0eTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xvY2FsaXphdGlvbkxvY2FsaXphdGlvblByb3BlcnR5ID0gcHJvcGVydHkgYXMgc3RyaW5nO1xuICAgICAgICB0aGlzLl9sb2NhbGl6YXRpb25Nb2RlbCA9IG1vZGVsO1xuICAgICAgICB0aGlzLl9sb2NhbGl6YXRpb25Mb2NhbGVQcm9wZXJ0eSA9IGxvY2FsZVByb3BlcnR5IGFzIHN0cmluZztcbiAgICAgICAgdGhpcy5faXNMb2NhbGl6ZWQgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZXh0RXZlbnQodHlwZTogRm9ybUV2ZW50VHlwZUVudW0sIGNtcFR5cGU6IFR5cGU8YW55PiwgY21wSW5zdGFuY2U6IGFueSwgZGF0YT86IEZpZWxkRXZlbnREYXRhPEVkaXRvck1vZGVsPikge1xuICAgICAgICB0aGlzLl9ldmVudHNTdWJqZWN0Lm5leHQoe1xuICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgIGNvbXBvbmVudFR5cGU6IGNtcFR5cGUsXG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogY21wSW5zdGFuY2UsXG4gICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXZlbnRzJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50c1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGZpZWxkIGJhc2VkIG9uIGF0dHJpYnV0ZSBkZWZpbml0aW9uLCB1c2VkIGZvciBhdXRvIG1vZGVsXG4gICAgICogQHBhcmFtIGRlc2NyaXB0b3IgRWRpdG9yIGRlc2NyaXB0b3IgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIGF0dHJpYnV0ZSBBdHRyaWJ1dGUgZGVmaW5pdGlvbi5cbiAgICAgKiBAcGFyYW0gZmllbGQgT3B0aW9uYWwsIGlmIGRlZmluZWQgd2lsbCBiZSByZXBsYWNlZCwgb3RoZXJ3aXNlIG5ldyB3aWxsIGJlIGdlbmVyYXRlZC5cbiAgICAgKiBAcGFyYW0gYXJncyBPcHRpb25hbCBhZGRpdGlvbmFsIGFyZ3VtZW50cyBtYXBwZWQgdG8gZmlsZWQgdHlwZS4gQXJndW1lbnRzIGRlcGVuZCBvbiBwb3NzaWJsZSBhcmd1bWVudHMgb24gZmllbGRzLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzdGF0aWMgdXBzZXJ0RmllbGRGcm9tQXR0cmlidXRlRGVmPFQ+KFxuICAgICAgICBkZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxUPixcbiAgICAgICAgYXR0cmlidXRlOiBFZGl0b3JDbGFzc0F0dHJpYnV0ZURlZixcbiAgICAgICAgZmllbGQ/OiBBRmllbGREZXNjcmlwdG9yPGFueSwgVD4sXG4gICAgICAgIC4uLmFyZ3M6IGFueVtdXG4gICAgKTogQUZpZWxkRGVzY3JpcHRvcjxhbnksIFQ+IHtcbiAgICAgICAgaWYgKGZpZWxkID09IG51bGwpIHtcbiAgICAgICAgICAgIGZpZWxkID0gZGVzY3JpcHRvci5hZGRGaWVsZFVuc2FmZShhdHRyaWJ1dGUubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGQgaW5zdGFuY2VvZiBGaWVsZElucHV0RGVzY3JpcHRvcikge1xuICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS5lbnVtVHlwZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZC5hc1JhZGlvRnJvbUVudW0oZW51bU1vZGVsR2VuZXJpYyhhdHRyaWJ1dGUuZW51bVR5cGUpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFibGVDb2x1bW5UeXBlID0gZ2V0Q29sdW1uVHlwZUZyb21DbGFzc0F0dHJpYnV0ZURlZlR5cGUoYXR0cmlidXRlLnR5cGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlQ29sdW1uRGlzcGxheVR5cGUgPSBnZXRDb2x1bW5EaXNwbGF5VHlwZUZyb21Db2x1bW5UeXBlKHRhYmxlQ29sdW1uVHlwZSwgYXR0cmlidXRlLnR5cGUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZC5hc1R5cGUoYXR0cmlidXRlLmZpZWxkVHlwZSA/PyBnZXRGaWVsZElucHV0VHlwZUZyb21Db2x1bW5UeXBlKHRhYmxlQ29sdW1uVHlwZSwgdGFibGVDb2x1bW5EaXNwbGF5VHlwZSksIC4uLmFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEVkaXRvckRlc2NyaXB0b3IgZXh0ZW5kcyBFZGl0b3JEZXNjcmlwdG9ySW5zdDxhbnk+IHtcbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKE1vZGVsRGVzY3JpcHRvci5jcmVhdGUoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBjcmVhdGU8RWRpdG9yTW9kZWw+KFxuICAgICAgICBpZFByb3BlcnR5Pzoga2V5b2YgRWRpdG9yTW9kZWwsXG4gICAgICAgIHRpdGxlUHJvcGVydHk/OiBrZXlvZiBFZGl0b3JNb2RlbCxcbiAgICAgICAgaTE4bkJhc2VLZXk/OiBzdHJpbmcgfCBDbGFzc1R5cGU8dW5rbm93bj4sXG4gICAgICAgIHRhYmxldmlld0VkaXRvclR5cGUgPSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5Ob25lXG4gICAgKTogRWRpdG9yRGVzY3JpcHRvckluc3Q8RWRpdG9yTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBFZGl0b3JEZXNjcmlwdG9ySW5zdDxFZGl0b3JNb2RlbD4oTW9kZWxEZXNjcmlwdG9yLmNyZWF0ZTxFZGl0b3JNb2RlbD4oaWRQcm9wZXJ0eSwgdGl0bGVQcm9wZXJ0eSwgaTE4bkJhc2VLZXkpLCB0YWJsZXZpZXdFZGl0b3JUeXBlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21DbGFzczxFZGl0b3JNb2RlbD4oXG4gICAgICAgIHR5cGU6IENsYXNzVHlwZTxFZGl0b3JNb2RlbD4sXG4gICAgICAgIGlkUHJvcGVydHk/OiBrZXlvZiBFZGl0b3JNb2RlbCxcbiAgICAgICAgdGl0bGVQcm9wZXJ0eT86IGtleW9mIEVkaXRvck1vZGVsLFxuICAgICAgICBpMThuQmFzZUtleT86IENsYXNzVHlwZTx1bmtub3duPiB8IHN0cmluZyxcbiAgICAgICAgdGFibGV2aWV3RWRpdG9yVHlwZSA9IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLk5vbmVcbiAgICApOiBFZGl0b3JEZXNjcmlwdG9ySW5zdDxFZGl0b3JNb2RlbD4ge1xuICAgICAgICByZXR1cm4gbmV3IEVkaXRvckRlc2NyaXB0b3JJbnN0PEVkaXRvck1vZGVsPihNb2RlbERlc2NyaXB0b3IuZnJvbUNsYXNzKHR5cGUsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHksIGkxOG5CYXNlS2V5KSwgdGFibGV2aWV3RWRpdG9yVHlwZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBmcm9tTW9kZWw8RWRpdG9yTW9kZWw+KG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8RWRpdG9yTW9kZWw+LCB0YWJsZXZpZXdFZGl0b3JUeXBlID0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uTm9uZSk6IEVkaXRvckRlc2NyaXB0b3JJbnN0PEVkaXRvck1vZGVsPiB7XG4gICAgICAgIHJldHVybiBuZXcgRWRpdG9yRGVzY3JpcHRvckluc3Q8RWRpdG9yTW9kZWw+KG1vZGVsLCB0YWJsZXZpZXdFZGl0b3JUeXBlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGVkaXRvciBkZXNjcmlwdG9yIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gb3BlbmFwaSBtb2RlbCdzIGF0dHJpYnV0ZXMgZGVmaW5pdGlvbiB3aGljaCBpcyBhdXRvbWF0aWNhbGx5IGV4dHJhY3RlZC4gQWxsIGZpZWxkcyB3aWxsIGJlIGluY2x1ZGVkLlxuICAgICAqIEBwYXJhbSB0eXBlIE1vZGVsJ3MgY2xhc3MuXG4gICAgICogQHBhcmFtIGlkUHJvcGVydHkgSWQgcHJvcGVydHkgcmVwcmVzZW50aW5nIG1vZGVsIChvcHRpb25hbCkuXG4gICAgICogQHBhcmFtIHRpdGxlUHJvcGVydHkgVGl0bGUgcHJvcGVydHkgcmVwcmVzZW50aW5nIG1vZGVsIChvcHRpb25hbCkuIElmIG5vdCBwcm92aWRlZCwgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGNob3Nlbi5cbiAgICAgKiBAcGFyYW0gdGFibGVFZGl0b3JUeXBlIFR5cGUgb2YgZWRpdG9yIGluIHRhYmxldmlldyAoYWRkLCBlZGl0LCB2aWV3IG9yIG5vbmUpLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgZnJvbUNsYXNzV2l0aEF1dG9BdHRyc0RlZjxFZGl0b3JNb2RlbD4oXG4gICAgICAgIHR5cGU6IENsYXNzVHlwZTxFZGl0b3JNb2RlbD4sXG4gICAgICAgIGlkUHJvcGVydHk/OiBrZXlvZiBFZGl0b3JNb2RlbCxcbiAgICAgICAgdGl0bGVQcm9wZXJ0eT86IGtleW9mIEVkaXRvck1vZGVsLFxuICAgICAgICB0YWJsZUVkaXRvclR5cGUgPSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5Ob25lXG4gICAgKTogRWRpdG9yRGVzY3JpcHRvckluc3Q8RWRpdG9yTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIEVkaXRvckRlc2NyaXB0b3IuZnJvbUNsYXNzV2l0aEN1c3RvbUF0dHJzRGVmKHR5cGUsIGdldEVkaXRvckNsYXNzQXR0cmlidXRlRGVmKHR5cGUpLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCB0YWJsZUVkaXRvclR5cGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgZWRpdG9yIGRlc2NyaXB0b3IgYXV0b21hdGljYWxseSBiYXNlZCBvbiBvcGVuYXBpIG1vZGVsJ3MgYXR0cmlidXRlcyBkZWZpbml0aW9uIHByb3ZpZGVkIGluIHBhcmFtZXRlcnMuIE9ubHkgZmllbGRzIGZvciBwcm92aWRlZCBhdHRyaWJ1dGVzIHdpbGwgYmUgaW5jbHVkZWQuXG4gICAgICogQHBhcmFtIHR5cGUgTW9kZWwncyBjbGFzcy5cbiAgICAgKiBAcGFyYW0gYXR0cmlidXRlcyBMaXN0IG9mIGF0dHJpYnV0ZSBkZWZpbml0aW9ucyBmcm9tIHdoaWNoIGZpZWxkcyBzaG91bGQgYmUgY3JlYXRlZC5cbiAgICAgKiBAcGFyYW0gaWRQcm9wZXJ0eSBJZCBwcm9wZXJ0eSByZXByZXNlbnRpbmcgbW9kZWwgKG9wdGlvbmFsKS5cbiAgICAgKiBAcGFyYW0gdGl0bGVQcm9wZXJ0eSBUaXRsZSBwcm9wZXJ0eSByZXByZXNlbnRpbmcgbW9kZWwgKG9wdGlvbmFsKS4gSWYgbm90IHByb3ZpZGVkLCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2hvc2VuLlxuICAgICAqIEBwYXJhbSB0YWJsZUVkaXRvclR5cGUgVHlwZSBvZiBlZGl0b3IgaW4gdGFibGV2aWV3IChhZGQsIGVkaXQsIHZpZXcgb3Igbm9uZSkuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBmcm9tQ2xhc3NXaXRoQ3VzdG9tQXR0cnNEZWY8RWRpdG9yTW9kZWw+KFxuICAgICAgICB0eXBlOiBDbGFzc1R5cGU8RWRpdG9yTW9kZWw+LFxuICAgICAgICBhdHRyaWJ1dGVzOiBFZGl0b3JDbGFzc0F0dHJpYnV0ZURlZltdLFxuICAgICAgICBpZFByb3BlcnR5Pzoga2V5b2YgRWRpdG9yTW9kZWwsXG4gICAgICAgIHRpdGxlUHJvcGVydHk/OiBrZXlvZiBFZGl0b3JNb2RlbCxcbiAgICAgICAgdGFibGVFZGl0b3JUeXBlID0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uTm9uZVxuICAgICk6IEVkaXRvckRlc2NyaXB0b3JJbnN0PEVkaXRvck1vZGVsPiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBFZGl0b3JEZXNjcmlwdG9yLmZyb21DbGFzcyh0eXBlLCBpZFByb3BlcnR5LCB0aXRsZVByb3BlcnR5LCB1bmRlZmluZWQsIHRhYmxlRWRpdG9yVHlwZSk7XG5cbiAgICAgICAgYXR0cmlidXRlc1xuICAgICAgICAgICAgLmZpbHRlcihhdHRyID0+ICFhdHRyLnR5cGUuaW5jbHVkZXMoJ1NldCcpICYmICFhdHRyLnR5cGUuaW5jbHVkZXMoJ0FycmF5JykpXG4gICAgICAgICAgICAuZm9yRWFjaChhdHRyID0+XG4gICAgICAgICAgICAgICAgRWRpdG9yRGVzY3JpcHRvckluc3QudXBzZXJ0RmllbGRGcm9tQXR0cmlidXRlRGVmKFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLFxuICAgICAgICAgICAgICAgICAgICBhdHRyLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmZpZWxkcy5maW5kKGNvbCA9PiBjb2wucHJvcGVydHkgPT09IGF0dHIubmFtZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG59XG4iXX0=
@@ -285,4 +285,4 @@ export class AFieldDescriptor extends AGenericFieldDescriptor {
285
285
  obj._asyncValidations = this._asyncValidations.map(value => value.copy());
286
286
  }
287
287
  }
288
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtYmFzZS5kZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L2FwaS9zcmMvZWRpdG9yL2Rlc2NyaXB0b3JzL2ZpZWxkLWJhc2UuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQWEsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxvQkFBb0IsRUFBK0Isc0JBQXNCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUV0SCxPQUFPLEVBQW1DLGFBQWEsRUFBeUMsTUFBTSx1QkFBdUIsQ0FBQztBQUc5SCxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUV4RSxNQUFNLE9BQWdCLHVCQUF1QjtJQUl6QyxZQUFzQixNQUFzQztRQUZsRCxZQUFPLEdBQWdCLEVBQUUsQ0FBQztRQUdoQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFXLE1BQU07UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVNLFVBQVUsQ0FBQyxNQUFtQjtRQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ08sTUFBTTtRQUNaLE1BQU0sT0FBTyxHQUFHO1lBQ1osR0FBRyxJQUFJO1lBQ1AsT0FBTyxFQUFFLFNBQVM7U0FDckIsQ0FBQztRQUNGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFnQixnQkFBbUUsU0FBUSx1QkFBb0M7SUF1Q2pJLFlBQXNCLE1BQXNDLEVBQUUsUUFBZ0I7UUFDMUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBakNsQixjQUFjLENBQVcsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUMzQyxjQUFjLENBQVcsNkJBQXdCLEdBQUcsS0FBSyxDQUFDO1FBQzFELGNBQWMsQ0FBVyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBSTNDLGNBQWMsQ0FBVyxpQkFBWSxHQUFxQyxFQUFFLENBQUM7UUFDN0UsY0FBYyxDQUFXLHNCQUFpQixHQUFxQyxFQUFFLENBQUM7UUFJbEYsY0FBYyxDQUFXLGNBQVMsR0FBaUMsUUFBUSxDQUFDO1FBVTVFLGNBQWMsQ0FBVyxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBRXpDLGNBQWMsQ0FBVyxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUM5QyxjQUFjLENBQVcsb0JBQWUsR0FBRyxFQUFFLENBQUM7UUFDOUMsY0FBYyxDQUFXLFVBQUssR0FBa0IsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUVyRSxlQUFlO1FBQ2YsY0FBYyxDQUFXLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBRTlDLGNBQWMsQ0FBb0IsbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBMkMsQ0FBQztRQUl0RyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLHNCQUFzQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFXLEtBQUs7UUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQVcsV0FBVztRQUNsQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFXLHVCQUF1QjtRQUM5QixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFXLFlBQVk7UUFDbkIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFXLE1BQU07UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBVyxnQkFBZ0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQVcsa0JBQWtCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFXLGtCQUFrQjtRQUN6QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBVyxnQkFBZ0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDaEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFXLGdCQUFnQjtRQUN2QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBVyxhQUFhO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBVyxTQUFTO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBVyxjQUFjO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBVyxjQUFjO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBVyxjQUFjO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDbEIsT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLGFBQWEsQ0FBQyxLQUFLLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQVcsV0FBVztRQUNsQixPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssYUFBYSxDQUFDLEtBQUssQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM3QixDQUFDO0lBSU0sU0FBUyxDQUFDLEtBQW9CO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxlQUFlLENBQUMsV0FBbUI7UUFDdEMsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLFlBQVksQ0FBQyxRQUFnQjtRQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sWUFBWSxDQUFDLFFBQVEsR0FBRyxJQUFJLEVBQUUsa0JBQTRGLEVBQUUsZUFBZSxHQUFHLEtBQUs7UUFDdEosSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDMUIsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxrQkFBa0IsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHdCQUF3QixHQUFHLGVBQWUsQ0FBQztRQUNoRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sWUFBWSxDQUFDLFFBQVEsR0FBRyxJQUFJLEVBQUUsa0JBQTRGO1FBQzdILElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQzFCLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsa0JBQWtCLENBQUM7UUFDbEQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxVQUFVLENBQUMsZ0JBQXlGO1FBQ3ZHLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztRQUMxQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sWUFBWSxDQUFDLFFBQXNDO1FBQ3RELElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxVQUFVLENBQUMsTUFBNEI7UUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLGFBQWEsQ0FBQyxTQUErQjtRQUNoRCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sb0JBQW9CLENBQUMsZ0JBQXNDO1FBQzlELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQztRQUMxQyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0saUJBQWlCLENBQUMsYUFBbUM7UUFDeEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLGFBQWEsQ0FBQyxTQUErQjtRQUNoRCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0saUJBQWlCLENBQUMsYUFBcUU7UUFDMUYsSUFBSSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLGdCQUFnQixDQUFDLFlBQXdCO1FBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxVQUFVLENBQUMsRUFBc0M7UUFDcEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLFVBQVUsQ0FBQyxFQUFtRDtRQUNqRSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sY0FBYyxDQUFDLElBQVksRUFBRSxTQUEwQixFQUFFLE9BQWdDO1FBQzVGLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUkseUJBQXlCLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxJQUFZO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ25FLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxJQUFZLEVBQUUsY0FBb0MsRUFBRSxPQUFnQztRQUMzRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUkseUJBQXlCLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzFGLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxJQUFZO1FBQ3JDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztRQUM3RSxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sYUFBYSxDQUFDLFNBQWlCLEVBQUUsY0FBYyxHQUFHLEVBQUUsRUFBRSxjQUFjLEdBQUcsRUFBRSxFQUFFLGNBQXVCO1FBQ3JHLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzVCLElBQUksQ0FBQyxlQUFlLEdBQUcsY0FBYyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxlQUFlLEdBQUcsY0FBYyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxlQUFlLEdBQUcsY0FBYyxDQUFDO1FBQ3RDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxRQUFRLENBQUMsT0FBc0IsYUFBYSxDQUFDLE1BQU07UUFDdEQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFNBQVM7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksb0JBQW9CLENBQUMsd0NBQXdDLElBQUksQ0FBQyxRQUFRLGlEQUFpRCxDQUFDLENBQUM7UUFDM0ksQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxTQUFTLENBQUMsSUFBNEIsRUFBRSxPQUFrQixFQUFFLFdBQWdCLEVBQUUsSUFBa0Q7UUFDbkksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFDckIsSUFBSSxFQUFFLElBQUk7WUFDVixhQUFhLEVBQUUsT0FBTztZQUN0QixpQkFBaUIsRUFBRSxXQUFXO1lBQzlCLElBQUksRUFBRSxJQUFJO1NBQ2IsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRVMsWUFBWSxDQUFDLEdBQTBEO1FBQzdFLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN6QixHQUFHLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDckMsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQy9CLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUMvQixHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDL0IsR0FBRyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3ZDLEdBQUcsQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDbkQsR0FBRyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUMvQyxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDL0IsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNqQyxHQUFHLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDakMsR0FBRyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUMvQyxHQUFHLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDekMsR0FBRyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3pDLEdBQUcsQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDbkQsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2pDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN0QixHQUFHLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDM0IsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUNyQyxHQUFHLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDaEUsR0FBRyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5RSxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0Zvcm1seUZpZWxkQ29uZmlnfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7Q29tbW9uc0ludGVybmFsRXJyb3IsIEdldHRlckZuLCBJRWRpdG9yRGVzY3JpcHRvciwgZ2V0STE4blR5cGVQcm9wZXJ0eUtleX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcblxuaW1wb3J0IHtGaWVsZEFzeW5jVmFsaWRhdG9yLCBGaWVsZENvbmZpZywgRmllbGRTaXplRW51bSwgRmllbGRWYWxpZGF0aW9uTWVzc2FnZSwgRmllbGRWYWxpZGF0b3J9IGZyb20gJy4uL21vZGVscy9maWVsZC5tb2RlbCc7XG5pbXBvcnQge0Zvcm1GaWVsZEV2ZW50LCBGb3JtRmllbGRFdmVudERhdGEsIEZvcm1GaWVsZEV2ZW50VHlwZUVudW19IGZyb20gJy4uL21vZGVscy9mb3JtLWVkaXRvci5ldmVudCc7XG5pbXBvcnQge0NvbW1vbnNGb3JtbHlGaWVsZENvbmZpZywgQ29tbW9uc0Zvcm1seUhvb2tGbn0gZnJvbSAnLi4vbW9kZWxzL2Zvcm1seS1maWVsZC5tb2RlbCc7XG5pbXBvcnQge0ZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3J9IGZyb20gJy4vZmllbGQtdmFsaWRhdGlvbi5kZXNjcmlwdG9yJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVkaXRvck1vZGVsPiB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9lZGl0b3I6IElFZGl0b3JEZXNjcmlwdG9yPEVkaXRvck1vZGVsPjtcbiAgICBwcm90ZWN0ZWQgX2NvbmZpZzogRmllbGRDb25maWcgPSB7fTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihlZGl0b3I6IElFZGl0b3JEZXNjcmlwdG9yPEVkaXRvck1vZGVsPikge1xuICAgICAgICB0aGlzLl9lZGl0b3IgPSBlZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlZGl0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb25maWcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWc7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDb25maWcoY29uZmlnOiBGaWVsZENvbmZpZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE92ZXJyaWRlIHRvSlNPTiBpbXBsZW1lbnRhdGlvbiB0byBwcmV2ZW50IG92ZXJmbG93IHdpdGggY2lyY3VsYXIgZGVwZW5kZW5jeS5cbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHRvSlNPTigpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBqc29uT2JqID0ge1xuICAgICAgICAgICAgLi4udGhpcyxcbiAgICAgICAgICAgIF9lZGl0b3I6IHVuZGVmaW5lZFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBqc29uT2JqU3RyID0gSlNPTi5zdHJpbmdpZnkoanNvbk9iaik7XG4gICAgICAgIHJldHVybiBqc29uT2JqU3RyO1xuICAgIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbCwgRWRpdG9yTW9kZWwsIEZpZWxkVmFsdWUgPSBGaWVsZE1vZGVsPiBleHRlbmRzIEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVkaXRvck1vZGVsPiB7XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIHJlYWRvbmx5IF9wcm9wZXJ0eTogc3RyaW5nO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfbGFiZWw/OiBzdHJpbmcgfCBudWxsO1xuXG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9wbGFjZWhvbGRlcj86IHN0cmluZztcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2hlbHBUZXh0Pzogc3RyaW5nO1xuXG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9yZXF1aXJlZCA9IGZhbHNlO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfcmVxdWlyZWRIaWRlTGFiZWxNYXJrZXIgPSBmYWxzZTtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2Rpc2FibGVkID0gZmFsc2U7XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9kZWZhdWx0VmFsdWU/OiBGaWVsZFZhbHVlO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfZ2V0dGVyPzogR2V0dGVyRm48RmllbGRWYWx1ZSwgRWRpdG9yTW9kZWw+O1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfc2V0dGVyPzogKGl0ZW06IEVkaXRvck1vZGVsLCB2YWx1ZTogRmllbGRWYWx1ZSkgPT4gdm9pZDtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX3ZhbGlkYXRpb25zOiBBcnJheTxGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yPiA9IFtdO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfYXN5bmNWYWxpZGF0aW9uczogQXJyYXk8RmllbGRWYWxpZGF0aW9uRGVzY3JpcHRvcj4gPSBbXTtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX3JlcXVpcmVkRXhwcmVzc2lvbj86IHN0cmluZyB8ICgoZmllbGQ/OiBGb3JtbHlGaWVsZENvbmZpZykgPT4gYm9vbGVhbikgfCBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfZGlzYWJsZWRFeHByZXNzaW9uPzogc3RyaW5nIHwgKChmaWVsZD86IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBib29sZWFuKSB8IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9oaWRkZW5FeHByZXNzaW9uPzogc3RyaW5nIHwgKChmaWVsZD86IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBib29sZWFuKSB8IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF91cGRhdGVPbjogJ2NoYW5nZScgfCAnYmx1cicgfCAnc3VibWl0JyA9ICdjaGFuZ2UnO1xuXG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9vbkluaXQ/OiBDb21tb25zRm9ybWx5SG9va0ZuO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfb25DaGFuZ2VzPzogQ29tbW9uc0Zvcm1seUhvb2tGbjtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2FmdGVyQ29udGVudEluaXQ/OiBDb21tb25zRm9ybWx5SG9va0ZuO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfYWZ0ZXJWaWV3SW5pdD86IENvbW1vbnNGb3JtbHlIb29rRm47XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9vbkRlc3Ryb3k/OiBDb21tb25zRm9ybWx5SG9va0ZuO1xuXG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9vblZhbHVlQ2hhbmdlPzogKGZpZWxkOiBDb21tb25zRm9ybWx5RmllbGRDb25maWcsIHZhbHVlOiBhbnkpID0+IHZvaWQ7XG5cbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2NsYXNzTmFtZSA9ICcnO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfZmllbGRDbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9sYWJlbENsYXNzTmFtZSA9ICcnO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfaW5wdXRDbGFzc05hbWUgPSAnJztcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX3NpemU6IEZpZWxkU2l6ZUVudW0gPSBGaWVsZFNpemVFbnVtLk5vcm1hbDtcblxuICAgIC8vIGxvY2FsaXphdGlvblxuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfaXNMb2NhbGl6ZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCByZWFkb25seSBfZXZlbnRzU3ViamVjdCA9IG5ldyBTdWJqZWN0PEZvcm1GaWVsZEV2ZW50PEZpZWxkTW9kZWwsIEVkaXRvck1vZGVsPj4oKTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihlZGl0b3I6IElFZGl0b3JEZXNjcmlwdG9yPEVkaXRvck1vZGVsPiwgcHJvcGVydHk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihlZGl0b3IpO1xuICAgICAgICB0aGlzLl9wcm9wZXJ0eSA9IHByb3BlcnR5O1xuICAgICAgICB0aGlzLl9sYWJlbCA9IGdldEkxOG5UeXBlUHJvcGVydHlLZXkodGhpcy5fZWRpdG9yLm1vZGVsLmkxOG5CYXNlS2V5LCBwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbGFiZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYWJlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBsYWNlaG9sZGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoZWxwVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hlbHBUZXh0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVxdWlyZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJlcXVpcmVkSGlkZUxhYmVsTWFya2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWRIaWRlTGFiZWxNYXJrZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGVmYXVsdFZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZ2V0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0dGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2V0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2V0dGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdmFsaWRhdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFzeW5jVmFsaWRhdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hc3luY1ZhbGlkYXRpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVxdWlyZWRFeHByZXNzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWRFeHByZXNzaW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWRFeHByZXNzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWRFeHByZXNzaW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGlkZGVuRXhwcmVzc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZGRlbkV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB1cGRhdGVPbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VwZGF0ZU9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb25Jbml0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb25Jbml0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb25DaGFuZ2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb25DaGFuZ2VzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FmdGVyQ29udGVudEluaXQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhZnRlclZpZXdJbml0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWZ0ZXJWaWV3SW5pdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG9uRGVzdHJveSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29uRGVzdHJveTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG9uVmFsdWVDaGFuZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vblZhbHVlQ2hhbmdlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmllbGRDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZENsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxhYmVsQ2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFiZWxDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpbnB1dENsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0Q2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc1NpemVTbWFsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemUgPT09IEZpZWxkU2l6ZUVudW0uU21hbGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc1NpemVMYXJnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemUgPT09IEZpZWxkU2l6ZUVudW0uTGFyZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc0xvY2FsaXplZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTG9jYWxpemVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhYnN0cmFjdCBjb3B5KCk6IEFGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbCwgRWRpdG9yTW9kZWwsIEZpZWxkVmFsdWU+O1xuXG4gICAgcHVibGljIHdpdGhMYWJlbChsYWJlbDogc3RyaW5nIHwgbnVsbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9sYWJlbCA9IGxhYmVsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFBsYWNlaG9sZGVyKHBsYWNlaG9sZGVyOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhIZWxwVGV4dChoZWxwVGV4dDogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hlbHBUZXh0ID0gaGVscFRleHQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUmVxdWlyZWQocmVxdWlyZWQgPSB0cnVlLCByZXF1aXJlZEV4cHJlc3Npb24/OiBzdHJpbmcgfCAoKGZpZWxkPzogRm9ybWx5RmllbGRDb25maWcpID0+IGJvb2xlYW4pIHwgT2JzZXJ2YWJsZTxib29sZWFuPiwgaGlkZUxhYmVsTWFya2VyID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcmVxdWlyZWQgPSByZXF1aXJlZDtcbiAgICAgICAgaWYgKHJlcXVpcmVkRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgdGhpcy5fcmVxdWlyZWRFeHByZXNzaW9uID0gcmVxdWlyZWRFeHByZXNzaW9uO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JlcXVpcmVkSGlkZUxhYmVsTWFya2VyID0gaGlkZUxhYmVsTWFya2VyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERpc2FibGVkKGRpc2FibGVkID0gdHJ1ZSwgZGlzYWJsZWRFeHByZXNzaW9uPzogc3RyaW5nIHwgKChmaWVsZD86IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBib29sZWFuKSB8IE9ic2VydmFibGU8Ym9vbGVhbj4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICAgICAgaWYgKGRpc2FibGVkRXhwcmVzc2lvbikge1xuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWRFeHByZXNzaW9uID0gZGlzYWJsZWRFeHByZXNzaW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSGlkZGVuKGhpZGRlbkV4cHJlc3Npb246IHN0cmluZyB8ICgoZmllbGQ/OiBGb3JtbHlGaWVsZENvbmZpZykgPT4gYm9vbGVhbikgfCBPYnNlcnZhYmxlPGJvb2xlYW4+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hpZGRlbkV4cHJlc3Npb24gPSBoaWRkZW5FeHByZXNzaW9uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFVwZGF0ZU9uKHVwZGF0ZU9uOiAnY2hhbmdlJyB8ICdibHVyJyB8ICdzdWJtaXQnKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZU9uID0gdXBkYXRlT247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoT25Jbml0KG9uSW5pdD86IENvbW1vbnNGb3JtbHlIb29rRm4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fb25Jbml0ID0gb25Jbml0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE9uQ2hhbmdlcyhvbkNoYW5nZXM/OiBDb21tb25zRm9ybWx5SG9va0ZuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlcyA9IG9uQ2hhbmdlcztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhBZnRlckNvbnRlbnRJbml0KGFmdGVyQ29udGVudEluaXQ/OiBDb21tb25zRm9ybWx5SG9va0ZuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2FmdGVyQ29udGVudEluaXQgPSBhZnRlckNvbnRlbnRJbml0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEFmdGVyVmlld0luaXQoYWZ0ZXJWaWV3SW5pdD86IENvbW1vbnNGb3JtbHlIb29rRm4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fYWZ0ZXJWaWV3SW5pdCA9IGFmdGVyVmlld0luaXQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoT25EZXN0cm95KG9uRGVzdHJveT86IENvbW1vbnNGb3JtbHlIb29rRm4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95ID0gb25EZXN0cm95O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE9uVmFsdWVDaGFuZ2Uob25WYWx1ZUNoYW5nZT86IChmaWVsZDogQ29tbW9uc0Zvcm1seUZpZWxkQ29uZmlnLCB2YWx1ZTogYW55KSA9PiB2b2lkKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX29uVmFsdWVDaGFuZ2UgPSBvblZhbHVlQ2hhbmdlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERlZmF1bHRWYWx1ZShkZWZhdWx0VmFsdWU6IEZpZWxkVmFsdWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEdldHRlcihmbj86IEdldHRlckZuPEZpZWxkVmFsdWUsIEVkaXRvck1vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9nZXR0ZXIgPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTZXR0ZXIoZm4/OiAoaXRlbTogRWRpdG9yTW9kZWwsIHZhbHVlOiBGaWVsZFZhbHVlKSA9PiB2b2lkKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3NldHRlciA9IGZuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFZhbGlkYXRpb24obmFtZTogc3RyaW5nLCB2YWxpZGF0b3I/OiBGaWVsZFZhbGlkYXRvciwgbWVzc2FnZT86IEZpZWxkVmFsaWRhdGlvbk1lc3NhZ2UpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGlvbnMucHVzaChuZXcgRmllbGRWYWxpZGF0aW9uRGVzY3JpcHRvcihuYW1lLCB2YWxpZGF0b3IsIG1lc3NhZ2UpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZVZhbGlkYXRpb24obmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRpb25zID0gdGhpcy5fdmFsaWRhdGlvbnMuZmlsdGVyKHYgPT4gdi5uYW1lICE9PSBuYW1lKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhBc3luY1ZhbGlkYXRpb24obmFtZTogc3RyaW5nLCBhc3luY1ZhbGlkYXRvcj86IEZpZWxkQXN5bmNWYWxpZGF0b3IsIG1lc3NhZ2U/OiBGaWVsZFZhbGlkYXRpb25NZXNzYWdlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2FzeW5jVmFsaWRhdGlvbnMucHVzaChuZXcgRmllbGRWYWxpZGF0aW9uRGVzY3JpcHRvcihuYW1lLCBhc3luY1ZhbGlkYXRvciwgbWVzc2FnZSkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlQXN5bmNWYWxpZGF0aW9uKG5hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9hc3luY1ZhbGlkYXRpb25zID0gdGhpcy5fYXN5bmNWYWxpZGF0aW9ucy5maWx0ZXIodiA9PiB2Lm5hbWUgIT09IG5hbWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZywgbGFiZWxDbGFzc05hbWUgPSAnJywgaW5wdXRDbGFzc05hbWUgPSAnJywgZmllbGRDbGFzc05hbWU/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgICAgICB0aGlzLl9sYWJlbENsYXNzTmFtZSA9IGxhYmVsQ2xhc3NOYW1lO1xuICAgICAgICB0aGlzLl9pbnB1dENsYXNzTmFtZSA9IGlucHV0Q2xhc3NOYW1lO1xuICAgICAgICB0aGlzLl9maWVsZENsYXNzTmFtZSA9IGZpZWxkQ2xhc3NOYW1lO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNpemUoc2l6ZTogRmllbGRTaXplRW51bSA9IEZpZWxkU2l6ZUVudW0uTm9ybWFsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3NpemUgPSBzaXplO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBhZGRzIGFuIGljb24gd2l0aCB0ZXh0IFNob3cgYWxsIHRyYW5zbGF0aW9ucyBhYm92ZSB0aGUgZmllbGQgYW5kIGFmdGVyIGNsaWNraW5nIG9uIGl0LCBpdCBkaXNwbGF5cyBhIG5ldyBkaWFsb2cgd2l0aCB0YWJsZXZpZXcuXG4gICAgICogVGhpcyBuZXcgdGFibGUgdmlldyBzaG93cyBhbGwgYXZhaWxhYmxlIHRyYW5zbGF0aW9ucyBmb3Igc3BlY2lmaWMgcHJvcGVydHkgYW5kIGFsbG93cyBlZGl0aW5nIGl0LlxuICAgICAqL1xuICAgIHB1YmxpYyBsb2NhbGl6ZWQoKTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5lZGl0b3IuaXNMb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgTG9jYWxpemF0aW9uIGNhbm5vdCBiZSBzZXQgZm9yIGZpZWxkICR7dGhpcy5wcm9wZXJ0eX0sIGxvY2FsaXphdGlvbiBtdXN0IGJlIGVuYWJsZWQgb24gZWRpdG9yIGZpcnN0LmApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzTG9jYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIG5leHRFdmVudCh0eXBlOiBGb3JtRmllbGRFdmVudFR5cGVFbnVtLCBjbXBUeXBlOiBUeXBlPGFueT4sIGNtcEluc3RhbmNlOiBhbnksIGRhdGE/OiBGb3JtRmllbGRFdmVudERhdGE8RmllbGRNb2RlbCwgRWRpdG9yTW9kZWw+KSB7XG4gICAgICAgIHRoaXMuX2V2ZW50c1N1YmplY3QubmV4dCh7XG4gICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgY29tcG9uZW50VHlwZTogY21wVHlwZSxcbiAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlOiBjbXBJbnN0YW5jZSxcbiAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBldmVudHMkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY29weUZpZWxkc1RvKG9iajogQUZpZWxkRGVzY3JpcHRvcjxGaWVsZE1vZGVsLCBFZGl0b3JNb2RlbCwgRmllbGRWYWx1ZT4pIHtcbiAgICAgICAgb2JqLl9sYWJlbCA9IHRoaXMuX2xhYmVsO1xuICAgICAgICBvYmouX3BsYWNlaG9sZGVyID0gdGhpcy5fcGxhY2Vob2xkZXI7XG4gICAgICAgIG9iai5faGVscFRleHQgPSB0aGlzLl9oZWxwVGV4dDtcbiAgICAgICAgb2JqLl9yZXF1aXJlZCA9IHRoaXMuX3JlcXVpcmVkO1xuICAgICAgICBvYmouX2Rpc2FibGVkID0gdGhpcy5fZGlzYWJsZWQ7XG4gICAgICAgIG9iai5fZGVmYXVsdFZhbHVlID0gdGhpcy5fZGVmYXVsdFZhbHVlO1xuICAgICAgICBvYmouX3JlcXVpcmVkRXhwcmVzc2lvbiA9IHRoaXMuX3JlcXVpcmVkRXhwcmVzc2lvbjtcbiAgICAgICAgb2JqLl9oaWRkZW5FeHByZXNzaW9uID0gdGhpcy5faGlkZGVuRXhwcmVzc2lvbjtcbiAgICAgICAgb2JqLl91cGRhdGVPbiA9IHRoaXMuX3VwZGF0ZU9uO1xuICAgICAgICBvYmouX29uSW5pdCA9IHRoaXMuX29uSW5pdDtcbiAgICAgICAgb2JqLl9vbkNoYW5nZXMgPSB0aGlzLl9vbkNoYW5nZXM7XG4gICAgICAgIG9iai5fb25EZXN0cm95ID0gdGhpcy5fb25EZXN0cm95O1xuICAgICAgICBvYmouX2FmdGVyQ29udGVudEluaXQgPSB0aGlzLl9hZnRlckNvbnRlbnRJbml0O1xuICAgICAgICBvYmouX2FmdGVyVmlld0luaXQgPSB0aGlzLl9hZnRlclZpZXdJbml0O1xuICAgICAgICBvYmouX29uVmFsdWVDaGFuZ2UgPSB0aGlzLl9vblZhbHVlQ2hhbmdlO1xuICAgICAgICBvYmouX2Rpc2FibGVkRXhwcmVzc2lvbiA9IHRoaXMuX2Rpc2FibGVkRXhwcmVzc2lvbjtcbiAgICAgICAgb2JqLl9jbGFzc05hbWUgPSB0aGlzLl9jbGFzc05hbWU7XG4gICAgICAgIG9iai5fc2l6ZSA9IHRoaXMuc2l6ZTtcbiAgICAgICAgb2JqLl9nZXR0ZXIgPSB0aGlzLl9nZXR0ZXI7XG4gICAgICAgIG9iai5fc2V0dGVyID0gdGhpcy5fc2V0dGVyO1xuICAgICAgICBvYmouX2lzTG9jYWxpemVkID0gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgICAgIG9iai5fdmFsaWRhdGlvbnMgPSB0aGlzLl92YWxpZGF0aW9ucy5tYXAodmFsdWUgPT4gdmFsdWUuY29weSgpKTtcbiAgICAgICAgb2JqLl9hc3luY1ZhbGlkYXRpb25zID0gdGhpcy5fYXN5bmNWYWxpZGF0aW9ucy5tYXAodmFsdWUgPT4gdmFsdWUuY29weSgpKTtcbiAgICB9XG59XG4iXX0=
288
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtYmFzZS5kZXNjcmlwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L2FwaS9zcmMvZWRpdG9yL2Rlc2NyaXB0b3JzL2ZpZWxkLWJhc2UuZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQWEsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxvQkFBb0IsRUFBK0Isc0JBQXNCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUV0SCxPQUFPLEVBQWdGLGFBQWEsRUFBeUMsTUFBTSx1QkFBdUIsQ0FBQztBQUczSyxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUV4RSxNQUFNLE9BQWdCLHVCQUF1QjtJQUl6QyxZQUFzQixNQUFzQztRQUZsRCxZQUFPLEdBQWdCLEVBQUUsQ0FBQztRQUdoQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBVyxNQUFNO1FBQ2IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFXLE1BQU07UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVNLFVBQVUsQ0FBQyxNQUFtQjtRQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ08sTUFBTTtRQUNaLE1BQU0sT0FBTyxHQUFHO1lBQ1osR0FBRyxJQUFJO1lBQ1AsT0FBTyxFQUFFLFNBQVM7U0FDckIsQ0FBQztRQUNGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztDQUNKO0FBRUQsTUFBTSxPQUFnQixnQkFBbUUsU0FBUSx1QkFBb0M7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LENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDekMsR0FBRyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3pDLEdBQUcsQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFDbkQsR0FBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2pDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN0QixHQUFHLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDM0IsR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUNyQyxHQUFHLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDaEUsR0FBRyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5RSxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0Zvcm1seUZpZWxkQ29uZmlnfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7Q29tbW9uc0ludGVybmFsRXJyb3IsIEdldHRlckZuLCBJRWRpdG9yRGVzY3JpcHRvciwgZ2V0STE4blR5cGVQcm9wZXJ0eUtleX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcblxuaW1wb3J0IHtGaWVsZEFzeW5jQmFzZVZhbGlkYXRvciwgRmllbGRBc3luY1ZhbGlkYXRvciwgRmllbGRCYXNlVmFsaWRhdG9yLCBGaWVsZENvbmZpZywgRmllbGRTaXplRW51bSwgRmllbGRWYWxpZGF0aW9uTWVzc2FnZSwgRmllbGRWYWxpZGF0b3J9IGZyb20gJy4uL21vZGVscy9maWVsZC5tb2RlbCc7XG5pbXBvcnQge0Zvcm1GaWVsZEV2ZW50LCBGb3JtRmllbGRFdmVudERhdGEsIEZvcm1GaWVsZEV2ZW50VHlwZUVudW19IGZyb20gJy4uL21vZGVscy9mb3JtLWVkaXRvci5ldmVudCc7XG5pbXBvcnQge0NvbW1vbnNGb3JtbHlGaWVsZENvbmZpZywgQ29tbW9uc0Zvcm1seUhvb2tGbn0gZnJvbSAnLi4vbW9kZWxzL2Zvcm1seS1maWVsZC5tb2RlbCc7XG5pbXBvcnQge0ZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3J9IGZyb20gJy4vZmllbGQtdmFsaWRhdGlvbi5kZXNjcmlwdG9yJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVkaXRvck1vZGVsPiB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9lZGl0b3I6IElFZGl0b3JEZXNjcmlwdG9yPEVkaXRvck1vZGVsPjtcbiAgICBwcm90ZWN0ZWQgX2NvbmZpZzogRmllbGRDb25maWcgPSB7fTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihlZGl0b3I6IElFZGl0b3JEZXNjcmlwdG9yPEVkaXRvck1vZGVsPikge1xuICAgICAgICB0aGlzLl9lZGl0b3IgPSBlZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlZGl0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjb25maWcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWc7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDb25maWcoY29uZmlnOiBGaWVsZENvbmZpZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE92ZXJyaWRlIHRvSlNPTiBpbXBsZW1lbnRhdGlvbiB0byBwcmV2ZW50IG92ZXJmbG93IHdpdGggY2lyY3VsYXIgZGVwZW5kZW5jeS5cbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHRvSlNPTigpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBqc29uT2JqID0ge1xuICAgICAgICAgICAgLi4udGhpcyxcbiAgICAgICAgICAgIF9lZGl0b3I6IHVuZGVmaW5lZFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBqc29uT2JqU3RyID0gSlNPTi5zdHJpbmdpZnkoanNvbk9iaik7XG4gICAgICAgIHJldHVybiBqc29uT2JqU3RyO1xuICAgIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbCwgRWRpdG9yTW9kZWwsIEZpZWxkVmFsdWUgPSBGaWVsZE1vZGVsPiBleHRlbmRzIEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVkaXRvck1vZGVsPiB7XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIHJlYWRvbmx5IF9wcm9wZXJ0eTogc3RyaW5nO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfbGFiZWw/OiBzdHJpbmcgfCBudWxsO1xuXG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9wbGFjZWhvbGRlcj86IHN0cmluZztcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2hlbHBUZXh0Pzogc3RyaW5nO1xuXG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9yZXF1aXJlZCA9IGZhbHNlO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfcmVxdWlyZWRIaWRlTGFiZWxNYXJrZXIgPSBmYWxzZTtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2Rpc2FibGVkID0gZmFsc2U7XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9kZWZhdWx0VmFsdWU/OiBGaWVsZFZhbHVlO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfZ2V0dGVyPzogR2V0dGVyRm48RmllbGRWYWx1ZSwgRWRpdG9yTW9kZWw+O1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfc2V0dGVyPzogKGl0ZW06IEVkaXRvck1vZGVsLCB2YWx1ZTogRmllbGRWYWx1ZSkgPT4gdm9pZDtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX3ZhbGlkYXRpb25zOiBBcnJheTxGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yPGFueSwgYW55Pj4gPSBbXTtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2FzeW5jVmFsaWRhdGlvbnM6IEFycmF5PEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3I8YW55LCBhbnk+PiA9IFtdO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfcmVxdWlyZWRFeHByZXNzaW9uPzogc3RyaW5nIHwgKChmaWVsZD86IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBib29sZWFuKSB8IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9kaXNhYmxlZEV4cHJlc3Npb24/OiBzdHJpbmcgfCAoKGZpZWxkPzogRm9ybWx5RmllbGRDb25maWcpID0+IGJvb2xlYW4pIHwgT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2hpZGRlbkV4cHJlc3Npb24/OiBzdHJpbmcgfCAoKGZpZWxkPzogRm9ybWx5RmllbGRDb25maWcpID0+IGJvb2xlYW4pIHwgT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX3VwZGF0ZU9uOiAnY2hhbmdlJyB8ICdibHVyJyB8ICdzdWJtaXQnID0gJ2NoYW5nZSc7XG5cbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX29uSW5pdD86IENvbW1vbnNGb3JtbHlIb29rRm48RmllbGRWYWx1ZSwgRWRpdG9yTW9kZWw+O1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfb25DaGFuZ2VzPzogQ29tbW9uc0Zvcm1seUhvb2tGbjxGaWVsZFZhbHVlLCBFZGl0b3JNb2RlbD47XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9hZnRlckNvbnRlbnRJbml0PzogQ29tbW9uc0Zvcm1seUhvb2tGbjxGaWVsZFZhbHVlLCBFZGl0b3JNb2RlbD47XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9hZnRlclZpZXdJbml0PzogQ29tbW9uc0Zvcm1seUhvb2tGbjxGaWVsZFZhbHVlLCBFZGl0b3JNb2RlbD47XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9vbkRlc3Ryb3k/OiBDb21tb25zRm9ybWx5SG9va0ZuPEZpZWxkVmFsdWUsIEVkaXRvck1vZGVsPjtcblxuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfb25WYWx1ZUNoYW5nZT86IChmaWVsZDogQ29tbW9uc0Zvcm1seUZpZWxkQ29uZmlnPEZpZWxkVmFsdWUsIEVkaXRvck1vZGVsPiwgdmFsdWU6IGFueSkgPT4gdm9pZDtcblxuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfY2xhc3NOYW1lID0gJyc7XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9maWVsZENsYXNzTmFtZT86IHN0cmluZztcbiAgICAvKiogQGlnbm9yZSAqLyBwcm90ZWN0ZWQgX2xhYmVsQ2xhc3NOYW1lID0gJyc7XG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9pbnB1dENsYXNzTmFtZSA9ICcnO1xuICAgIC8qKiBAaWdub3JlICovIHByb3RlY3RlZCBfc2l6ZTogRmllbGRTaXplRW51bSA9IEZpZWxkU2l6ZUVudW0uTm9ybWFsO1xuXG4gICAgLy8gbG9jYWxpemF0aW9uXG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIF9pc0xvY2FsaXplZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBpZ25vcmUgKi8gcHJvdGVjdGVkIHJlYWRvbmx5IF9ldmVudHNTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Rm9ybUZpZWxkRXZlbnQ8RmllbGRNb2RlbCwgRWRpdG9yTW9kZWw+PigpO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGVkaXRvcjogSUVkaXRvckRlc2NyaXB0b3I8RWRpdG9yTW9kZWw+LCBwcm9wZXJ0eTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKGVkaXRvcik7XG4gICAgICAgIHRoaXMuX3Byb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgICAgIHRoaXMuX2xhYmVsID0gZ2V0STE4blR5cGVQcm9wZXJ0eUtleSh0aGlzLl9lZGl0b3IubW9kZWwuaTE4bkJhc2VLZXksIHByb3BlcnR5KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHByb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvcGVydHk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsYWJlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhYmVsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGxhY2Vob2xkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhlbHBUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGVscFRleHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXF1aXJlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVxdWlyZWRIaWRlTGFiZWxNYXJrZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZEhpZGVMYWJlbE1hcmtlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkZWZhdWx0VmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBnZXR0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXR0ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzZXR0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0ZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB2YWxpZGF0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXN5bmNWYWxpZGF0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FzeW5jVmFsaWRhdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXF1aXJlZEV4cHJlc3Npb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZEV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaXNhYmxlZEV4cHJlc3Npb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZEV4cHJlc3Npb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoaWRkZW5FeHByZXNzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlkZGVuRXhwcmVzc2lvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHVwZGF0ZU9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlT247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBvbkluaXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vbkluaXQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBvbkNoYW5nZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vbkNoYW5nZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWZ0ZXJDb250ZW50SW5pdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZnRlclZpZXdJbml0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb25EZXN0cm95KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb25EZXN0cm95O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb25WYWx1ZUNoYW5nZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29uVmFsdWVDaGFuZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaWVsZENsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkQ2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbGFiZWxDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sYWJlbENsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlucHV0Q2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzU2l6ZVNtYWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZSA9PT0gRmllbGRTaXplRW51bS5TbWFsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzU2l6ZUxhcmdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZSA9PT0gRmllbGRTaXplRW51bS5MYXJnZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzTG9jYWxpemVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNMb2NhbGl6ZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFic3RyYWN0IGNvcHkoKTogQUZpZWxkRGVzY3JpcHRvcjxGaWVsZE1vZGVsLCBFZGl0b3JNb2RlbCwgRmllbGRWYWx1ZT47XG5cbiAgICBwdWJsaWMgd2l0aExhYmVsKGxhYmVsOiBzdHJpbmcgfCBudWxsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xhYmVsID0gbGFiZWw7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUGxhY2Vob2xkZXIocGxhY2Vob2xkZXI6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEhlbHBUZXh0KGhlbHBUZXh0OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGVscFRleHQgPSBoZWxwVGV4dDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSZXF1aXJlZChyZXF1aXJlZCA9IHRydWUsIHJlcXVpcmVkRXhwcmVzc2lvbj86IHN0cmluZyB8ICgoZmllbGQ/OiBGb3JtbHlGaWVsZENvbmZpZykgPT4gYm9vbGVhbikgfCBPYnNlcnZhYmxlPGJvb2xlYW4+LCBoaWRlTGFiZWxNYXJrZXIgPSBmYWxzZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9yZXF1aXJlZCA9IHJlcXVpcmVkO1xuICAgICAgICBpZiAocmVxdWlyZWRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXF1aXJlZEV4cHJlc3Npb24gPSByZXF1aXJlZEV4cHJlc3Npb247XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmVxdWlyZWRIaWRlTGFiZWxNYXJrZXIgPSBoaWRlTGFiZWxNYXJrZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGlzYWJsZWQoZGlzYWJsZWQgPSB0cnVlLCBkaXNhYmxlZEV4cHJlc3Npb24/OiBzdHJpbmcgfCAoKGZpZWxkPzogRm9ybWx5RmllbGRDb25maWcpID0+IGJvb2xlYW4pIHwgT2JzZXJ2YWJsZTxib29sZWFuPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgICAgICBpZiAoZGlzYWJsZWRFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlZEV4cHJlc3Npb24gPSBkaXNhYmxlZEV4cHJlc3Npb247XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhIaWRkZW4oaGlkZGVuRXhwcmVzc2lvbjogc3RyaW5nIHwgKChmaWVsZD86IEZvcm1seUZpZWxkQ29uZmlnKSA9PiBib29sZWFuKSB8IE9ic2VydmFibGU8Ym9vbGVhbj4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGlkZGVuRXhwcmVzc2lvbiA9IGhpZGRlbkV4cHJlc3Npb247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVXBkYXRlT24odXBkYXRlT246ICdjaGFuZ2UnIHwgJ2JsdXInIHwgJ3N1Ym1pdCcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdXBkYXRlT24gPSB1cGRhdGVPbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhPbkluaXQob25Jbml0PzogQ29tbW9uc0Zvcm1seUhvb2tGbjxGaWVsZFZhbHVlLCBFZGl0b3JNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fb25Jbml0ID0gb25Jbml0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aE9uQ2hhbmdlcyhvbkNoYW5nZXM/OiBDb21tb25zRm9ybWx5SG9va0ZuPEZpZWxkVmFsdWUsIEVkaXRvck1vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZXMgPSBvbkNoYW5nZXM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQWZ0ZXJDb250ZW50SW5pdChhZnRlckNvbnRlbnRJbml0PzogQ29tbW9uc0Zvcm1seUhvb2tGbjxGaWVsZFZhbHVlLCBFZGl0b3JNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fYWZ0ZXJDb250ZW50SW5pdCA9IGFmdGVyQ29udGVudEluaXQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQWZ0ZXJWaWV3SW5pdChhZnRlclZpZXdJbml0PzogQ29tbW9uc0Zvcm1seUhvb2tGbjxGaWVsZFZhbHVlLCBFZGl0b3JNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fYWZ0ZXJWaWV3SW5pdCA9IGFmdGVyVmlld0luaXQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoT25EZXN0cm95KG9uRGVzdHJveT86IENvbW1vbnNGb3JtbHlIb29rRm48RmllbGRWYWx1ZSwgRWRpdG9yTW9kZWw+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSA9IG9uRGVzdHJveTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhPblZhbHVlQ2hhbmdlKG9uVmFsdWVDaGFuZ2U/OiAoZmllbGQ6IENvbW1vbnNGb3JtbHlGaWVsZENvbmZpZzxGaWVsZFZhbHVlLCBFZGl0b3JNb2RlbD4sIHZhbHVlOiBGaWVsZFZhbHVlKSA9PiB2b2lkKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX29uVmFsdWVDaGFuZ2UgPSBvblZhbHVlQ2hhbmdlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERlZmF1bHRWYWx1ZShkZWZhdWx0VmFsdWU6IEZpZWxkVmFsdWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEdldHRlcihmbj86IEdldHRlckZuPEZpZWxkVmFsdWUsIEVkaXRvck1vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9nZXR0ZXIgPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTZXR0ZXIoZm4/OiAoaXRlbTogRWRpdG9yTW9kZWwsIHZhbHVlOiBGaWVsZFZhbHVlKSA9PiB2b2lkKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3NldHRlciA9IGZuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFZhbGlkYXRpb248VmFsdWUgPSBGaWVsZFZhbHVlLCBFZGl0b3JWYWx1ZSA9IEVkaXRvck1vZGVsPihcbiAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICB2YWxpZGF0b3I/OiBGaWVsZFZhbGlkYXRvcjxWYWx1ZSwgRWRpdG9yVmFsdWU+LFxuICAgICAgICBtZXNzYWdlPzogRmllbGRWYWxpZGF0aW9uTWVzc2FnZTxWYWx1ZSwgRWRpdG9yVmFsdWU+XG4gICAgKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRpb25zLnB1c2gobmV3IEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3IobmFtZSwgdmFsaWRhdG9yIGFzIEZpZWxkQmFzZVZhbGlkYXRvcjxWYWx1ZSwgRWRpdG9yVmFsdWU+LCBtZXNzYWdlKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVWYWxpZGF0aW9uKG5hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl92YWxpZGF0aW9ucyA9IHRoaXMuX3ZhbGlkYXRpb25zLmZpbHRlcih2ID0+IHYubmFtZSAhPT0gbmFtZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQXN5bmNWYWxpZGF0aW9uPFZhbHVlID0gRmllbGRWYWx1ZSwgRWRpdG9yVmFsdWUgPSBFZGl0b3JNb2RlbD4oXG4gICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgICAgYXN5bmNWYWxpZGF0b3I/OiBGaWVsZEFzeW5jVmFsaWRhdG9yPFZhbHVlLCBFZGl0b3JWYWx1ZT4sXG4gICAgICAgIG1lc3NhZ2U/OiBGaWVsZFZhbGlkYXRpb25NZXNzYWdlPFZhbHVlLCBFZGl0b3JWYWx1ZT5cbiAgICApOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fYXN5bmNWYWxpZGF0aW9ucy5wdXNoKG5ldyBGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yKG5hbWUsIGFzeW5jVmFsaWRhdG9yIGFzIEZpZWxkQXN5bmNCYXNlVmFsaWRhdG9yPFZhbHVlLCBFZGl0b3JWYWx1ZT4sIG1lc3NhZ2UpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUFzeW5jVmFsaWRhdGlvbihuYW1lOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fYXN5bmNWYWxpZGF0aW9ucyA9IHRoaXMuX2FzeW5jVmFsaWRhdGlvbnMuZmlsdGVyKHYgPT4gdi5uYW1lICE9PSBuYW1lKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhDbGFzc05hbWUoY2xhc3NOYW1lOiBzdHJpbmcsIGxhYmVsQ2xhc3NOYW1lID0gJycsIGlucHV0Q2xhc3NOYW1lID0gJycsIGZpZWxkQ2xhc3NOYW1lPzogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgdGhpcy5fbGFiZWxDbGFzc05hbWUgPSBsYWJlbENsYXNzTmFtZTtcbiAgICAgICAgdGhpcy5faW5wdXRDbGFzc05hbWUgPSBpbnB1dENsYXNzTmFtZTtcbiAgICAgICAgdGhpcy5fZmllbGRDbGFzc05hbWUgPSBmaWVsZENsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTaXplKHNpemU6IEZpZWxkU2l6ZUVudW0gPSBGaWVsZFNpemVFbnVtLk5vcm1hbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9zaXplID0gc2l6ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgYWRkcyBhbiBpY29uIHdpdGggdGV4dCBTaG93IGFsbCB0cmFuc2xhdGlvbnMgYWJvdmUgdGhlIGZpZWxkIGFuZCBhZnRlciBjbGlja2luZyBvbiBpdCwgaXQgZGlzcGxheXMgYSBuZXcgZGlhbG9nIHdpdGggdGFibGV2aWV3LlxuICAgICAqIFRoaXMgbmV3IHRhYmxlIHZpZXcgc2hvd3MgYWxsIGF2YWlsYWJsZSB0cmFuc2xhdGlvbnMgZm9yIHNwZWNpZmljIHByb3BlcnR5IGFuZCBhbGxvd3MgZWRpdGluZyBpdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgbG9jYWxpemVkKCk6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMuZWRpdG9yLmlzTG9jYWxpemVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYExvY2FsaXphdGlvbiBjYW5ub3QgYmUgc2V0IGZvciBmaWVsZCAke3RoaXMucHJvcGVydHl9LCBsb2NhbGl6YXRpb24gbXVzdCBiZSBlbmFibGVkIG9uIGVkaXRvciBmaXJzdC5gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pc0xvY2FsaXplZCA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZXh0RXZlbnQodHlwZTogRm9ybUZpZWxkRXZlbnRUeXBlRW51bSwgY21wVHlwZTogVHlwZTxhbnk+LCBjbXBJbnN0YW5jZTogYW55LCBkYXRhPzogRm9ybUZpZWxkRXZlbnREYXRhPEZpZWxkTW9kZWwsIEVkaXRvck1vZGVsPikge1xuICAgICAgICB0aGlzLl9ldmVudHNTdWJqZWN0Lm5leHQoe1xuICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgIGNvbXBvbmVudFR5cGU6IGNtcFR5cGUsXG4gICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZTogY21wSW5zdGFuY2UsXG4gICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZXZlbnRzJCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50c1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNvcHlGaWVsZHNUbyhvYmo6IEFGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbCwgRWRpdG9yTW9kZWwsIEZpZWxkVmFsdWU+KSB7XG4gICAgICAgIG9iai5fbGFiZWwgPSB0aGlzLl9sYWJlbDtcbiAgICAgICAgb2JqLl9wbGFjZWhvbGRlciA9IHRoaXMuX3BsYWNlaG9sZGVyO1xuICAgICAgICBvYmouX2hlbHBUZXh0ID0gdGhpcy5faGVscFRleHQ7XG4gICAgICAgIG9iai5fcmVxdWlyZWQgPSB0aGlzLl9yZXF1aXJlZDtcbiAgICAgICAgb2JqLl9kaXNhYmxlZCA9IHRoaXMuX2Rpc2FibGVkO1xuICAgICAgICBvYmouX2RlZmF1bHRWYWx1ZSA9IHRoaXMuX2RlZmF1bHRWYWx1ZTtcbiAgICAgICAgb2JqLl9yZXF1aXJlZEV4cHJlc3Npb24gPSB0aGlzLl9yZXF1aXJlZEV4cHJlc3Npb247XG4gICAgICAgIG9iai5faGlkZGVuRXhwcmVzc2lvbiA9IHRoaXMuX2hpZGRlbkV4cHJlc3Npb247XG4gICAgICAgIG9iai5fdXBkYXRlT24gPSB0aGlzLl91cGRhdGVPbjtcbiAgICAgICAgb2JqLl9vbkluaXQgPSB0aGlzLl9vbkluaXQ7XG4gICAgICAgIG9iai5fb25DaGFuZ2VzID0gdGhpcy5fb25DaGFuZ2VzO1xuICAgICAgICBvYmouX29uRGVzdHJveSA9IHRoaXMuX29uRGVzdHJveTtcbiAgICAgICAgb2JqLl9hZnRlckNvbnRlbnRJbml0ID0gdGhpcy5fYWZ0ZXJDb250ZW50SW5pdDtcbiAgICAgICAgb2JqLl9hZnRlclZpZXdJbml0ID0gdGhpcy5fYWZ0ZXJWaWV3SW5pdDtcbiAgICAgICAgb2JqLl9vblZhbHVlQ2hhbmdlID0gdGhpcy5fb25WYWx1ZUNoYW5nZTtcbiAgICAgICAgb2JqLl9kaXNhYmxlZEV4cHJlc3Npb24gPSB0aGlzLl9kaXNhYmxlZEV4cHJlc3Npb247XG4gICAgICAgIG9iai5fY2xhc3NOYW1lID0gdGhpcy5fY2xhc3NOYW1lO1xuICAgICAgICBvYmouX3NpemUgPSB0aGlzLnNpemU7XG4gICAgICAgIG9iai5fZ2V0dGVyID0gdGhpcy5fZ2V0dGVyO1xuICAgICAgICBvYmouX3NldHRlciA9IHRoaXMuX3NldHRlcjtcbiAgICAgICAgb2JqLl9pc0xvY2FsaXplZCA9IHRoaXMuX2lzTG9jYWxpemVkO1xuICAgICAgICBvYmouX3ZhbGlkYXRpb25zID0gdGhpcy5fdmFsaWRhdGlvbnMubWFwKHZhbHVlID0+IHZhbHVlLmNvcHkoKSk7XG4gICAgICAgIG9iai5fYXN5bmNWYWxpZGF0aW9ucyA9IHRoaXMuX2FzeW5jVmFsaWRhdGlvbnMubWFwKHZhbHVlID0+IHZhbHVlLmNvcHkoKSk7XG4gICAgfVxufVxuIl19
@@ -33,8 +33,8 @@ export class AFieldGroupDescriptor extends AGenericFieldDescriptor {
33
33
  this._title = title;
34
34
  return this;
35
35
  }
36
- withValidation(name, validator, message) {
37
- this._validations.push(new FieldValidationDescriptor(name, validator, message));
36
+ withValidation(name, validator, message, opts) {
37
+ this._validations.push(new FieldValidationDescriptor(name, validator, message, opts));
38
38
  return this;
39
39
  }
40
40
  }
@@ -94,4 +94,4 @@ export class FieldGroupDescriptor extends AFieldGroupDescriptor {
94
94
  return group;
95
95
  }
96
96
  }
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtZ3JvdXAuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9hcGkvc3JjL2VkaXRvci9kZXNjcmlwdG9ycy9maWVsZC1ncm91cC5kZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxrQkFBa0IsRUFBeUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNqRyxPQUFPLEVBQW1CLHVCQUF1QixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDbEYsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFFeEUsTUFBTSxPQUFnQixxQkFBbUMsU0FBUSx1QkFBb0M7SUFPakcsWUFBc0IsTUFBc0MsRUFBRSxJQUFZO1FBQ3RFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUpSLFlBQU8sR0FBMkMsRUFBRSxDQUFDO1FBQ3JELGlCQUFZLEdBQXFDLEVBQUUsQ0FBQztRQUkxRCxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyx5QkFBeUIsQ0FBQztJQUN2RCxDQUFDO0lBRU0sV0FBVyxDQUNkLFFBQWdCLEVBQ2hCLGNBQTBHO1FBRTFHLElBQUksQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBSUQsSUFBVyxXQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBVyxRQUFR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SSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDN0csS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3pCLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDL0MsS0FBSyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SUVkaXRvckRlc2NyaXB0b3J9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5cbmltcG9ydCB7RURJVE9SX0RFRkFVTFRfR1JPVVBfTkFNRX0gZnJvbSAnLi4vbW9kZWxzL2VkaXRvci5tb2RlbCc7XG5pbXBvcnQge0ZpZWxkR3JvdXBUeXBlRW51bSwgRmllbGRWYWxpZGF0aW9uTWVzc2FnZSwgRmllbGRWYWxpZGF0b3J9IGZyb20gJy4uL21vZGVscy9maWVsZC5tb2RlbCc7XG5pbXBvcnQge0FGaWVsZERlc2NyaXB0b3IsIEFHZW5lcmljRmllbGREZXNjcmlwdG9yfSBmcm9tICcuL2ZpZWxkLWJhc2UuZGVzY3JpcHRvcic7XG5pbXBvcnQge0ZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3J9IGZyb20gJy4vZmllbGQtdmFsaWRhdGlvbi5kZXNjcmlwdG9yJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFGaWVsZEdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4gZXh0ZW5kcyBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfbmFtZTogc3RyaW5nO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfZGVmYXVsdDogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgX3RpdGxlPzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfZmllbGRzOiBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD5bXSA9IFtdO1xuICAgIHByb3RlY3RlZCBfdmFsaWRhdGlvbnM6IEFycmF5PEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3I+ID0gW107XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoZWRpdG9yOiBJRWRpdG9yRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4sIG5hbWU6IHN0cmluZykge1xuICAgICAgICBzdXBlcihlZGl0b3IpO1xuICAgICAgICB0aGlzLl9uYW1lID0gYCR7dGhpcy5iYXNlTmFtZX0ke25hbWV9YDtcbiAgICAgICAgdGhpcy5fZGVmYXVsdCA9IG5hbWUgPT09IEVESVRPUl9ERUZBVUxUX0dST1VQX05BTUU7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUZpZWxkKFxuICAgICAgICBwcm9wZXJ0eTogc3RyaW5nLFxuICAgICAgICBmaWx0ZXJGdW5jdGlvbjogKGZpZWxkczogQUdlbmVyaWNGaWVsZERlc2NyaXB0b3I8RWRpdG9yTW9kZWw+W10pID0+IEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVkaXRvck1vZGVsPltdXG4gICAgKTogQUdlbmVyaWNGaWVsZERlc2NyaXB0b3I8RWRpdG9yTW9kZWw+W10ge1xuICAgICAgICB0aGlzLl9maWVsZHMgPSBmaWx0ZXJGdW5jdGlvbih0aGlzLl9maWVsZHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZmllbGRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aXRsZTtcbiAgICB9XG5cbiAgICBhYnN0cmFjdCBnZXQgZmllbGRzKCk6IEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVkaXRvck1vZGVsPltdO1xuXG4gICAgcHVibGljIGdldCB2YWxpZGF0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYmFzZU5hbWUoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmdyb3VwTmFtZSgpfV9gO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdDtcbiAgICB9XG5cbiAgICBhYnN0cmFjdCBncm91cE5hbWUoKTogc3RyaW5nO1xuXG4gICAgYWJzdHJhY3QgYWRkRmllbGQoZmllbGQ6IEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVkaXRvck1vZGVsPik6IHRoaXM7XG5cbiAgICBhYnN0cmFjdCBjb3B5KCk6IEFGaWVsZEdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD47XG5cbiAgICBwdWJsaWMgd2l0aFRpdGxlKHRpdGxlOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGl0bGUgPSB0aXRsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhWYWxpZGF0aW9uKG5hbWU6IHN0cmluZywgdmFsaWRhdG9yPzogRmllbGRWYWxpZGF0b3IsIG1lc3NhZ2U/OiBGaWVsZFZhbGlkYXRpb25NZXNzYWdlKSB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRpb25zLnB1c2gobmV3IEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3IobmFtZSwgdmFsaWRhdG9yLCBtZXNzYWdlKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPiBleHRlbmRzIEFGaWVsZEdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4ge1xuICAgIGNvbnN0cnVjdG9yKGVkaXRvcjogSUVkaXRvckRlc2NyaXB0b3I8RWRpdG9yTW9kZWw+LCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yLCBuYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpZWxkcygpOiBBcnJheTxGaWVsZEdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkcyBhcyBBcnJheTxGaWVsZEdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4+O1xuICAgIH1cblxuICAgIHB1YmxpYyBncm91cE5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICd0YWInO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZChmaWVsZDogRmllbGRHcm91cERlc2NyaXB0b3I8RWRpdG9yTW9kZWw+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogRmllbGRUYWJHcm91cERlc2NyaXB0b3I8RWRpdG9yTW9kZWw+IHtcbiAgICAgICAgY29uc3QgdGFiID0gbmV3IEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPih0aGlzLl9lZGl0b3IsIHRoaXMubmFtZS5zdWJzdHJpbmcodGhpcy5iYXNlTmFtZS5sZW5ndGgpKTtcbiAgICAgICAgdGFiLl90aXRsZSA9IHRoaXMuX3RpdGxlO1xuICAgICAgICB0YWIuX2ZpZWxkcyA9IHRoaXMuZmllbGRzLm1hcChmID0+IGYuY29weSgpKTtcbiAgICAgICAgdGFiLl92YWxpZGF0aW9ucyA9IHRoaXMudmFsaWRhdGlvbnMubWFwKHYgPT4gdi5jb3B5KCkpO1xuICAgICAgICByZXR1cm4gdGFiO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPiBleHRlbmRzIEFGaWVsZEdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4ge1xuICAgIHByaXZhdGUgX3R5cGUgPSBGaWVsZEdyb3VwVHlwZUVudW0uRmllbGRzZXQ7XG5cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3I6IElFZGl0b3JEZXNjcmlwdG9yPEVkaXRvck1vZGVsPiwgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKGVkaXRvciwgbmFtZSk7XG4gICAgICAgIGlmICh0aGlzLl9kZWZhdWx0KSB7XG4gICAgICAgICAgICB0aGlzLmFzTG9naWNhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0eXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpZWxkcygpOiBBcnJheTxBRmllbGREZXNjcmlwdG9yPGFueSwgRWRpdG9yTW9kZWw+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZHMgYXMgQXJyYXk8QUZpZWxkRGVzY3JpcHRvcjxhbnksIEVkaXRvck1vZGVsPj47XG4gICAgfVxuXG4gICAgcHVibGljIGdyb3VwTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gJ2dyb3VwJztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGQoZmllbGQ6IEFGaWVsZERlc2NyaXB0b3I8YW55LCBFZGl0b3JNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRzLnB1c2goZmllbGQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNMb2dpY2FsKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl90eXBlID0gRmllbGRHcm91cFR5cGVFbnVtLkxvZ2ljYWw7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPiB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gbmV3IEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPih0aGlzLl9lZGl0b3IsIHRoaXMubmFtZS5zdWJzdHJpbmcodGhpcy5iYXNlTmFtZS5sZW5ndGgpKTtcbiAgICAgICAgZ3JvdXAuX3R5cGUgPSB0aGlzLl90eXBlO1xuICAgICAgICBncm91cC5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgZ3JvdXAuX2ZpZWxkcyA9IHRoaXMuZmllbGRzLm1hcChmID0+IGYuY29weSgpKTtcbiAgICAgICAgZ3JvdXAuX3ZhbGlkYXRpb25zID0gdGhpcy52YWxpZGF0aW9ucy5tYXAodiA9PiB2LmNvcHkoKSk7XG4gICAgICAgIHJldHVybiBncm91cDtcbiAgICB9XG59XG4iXX0=
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtZ3JvdXAuZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9hcGkvc3JjL2VkaXRvci9kZXNjcmlwdG9ycy9maWVsZC1ncm91cC5kZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sRUFBcUIsa0JBQWtCLEVBQXVDLE1BQU0sdUJBQXVCLENBQUM7QUFDbkgsT0FBTyxFQUFtQix1QkFBdUIsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ2xGLE9BQU8sRUFBQyx5QkFBeUIsRUFBb0MsTUFBTSwrQkFBK0IsQ0FBQztBQUUzRyxNQUFNLE9BQWdCLHFCQUFtQyxTQUFRLHVCQUFvQztJQU9qRyxZQUFzQixNQUFzQyxFQUFFLElBQVk7UUFDdEUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBSlIsWUFBTyxHQUEyQyxFQUFFLENBQUM7UUFDckQsaUJBQVksR0FBK0MsRUFBRSxDQUFDO1FBSXBFLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLHlCQUF5QixDQUFDO0lBQ3ZELENBQUM7SUFFTSxXQUFXLENBQ2QsUUFBZ0IsRUFDaEIsY0FBMEc7UUFFMUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBVyxLQUFLO1FBQ1osT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFJRCxJQUFXLFdBQVc7UUFDbEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFXLFFB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R0FBRyxJQUFJLG9CQUFvQixDQUFjLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzdHLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN6QixLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0lFZGl0b3JEZXNjcmlwdG9yfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuXG5pbXBvcnQge0VESVRPUl9ERUZBVUxUX0dST1VQX05BTUV9IGZyb20gJy4uL21vZGVscy9lZGl0b3IubW9kZWwnO1xuaW1wb3J0IHtGaWVsZEJhc2VWYWxpZGF0b3IsIEZpZWxkR3JvdXBUeXBlRW51bSwgRm9ybVZhbGlkYXRpb25NZXNzYWdlLCBGb3JtVmFsaWRhdG9yfSBmcm9tICcuLi9tb2RlbHMvZmllbGQubW9kZWwnO1xuaW1wb3J0IHtBRmllbGREZXNjcmlwdG9yLCBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcn0gZnJvbSAnLi9maWVsZC1iYXNlLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yLCBGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yT3B0c1R5cGV9IGZyb20gJy4vZmllbGQtdmFsaWRhdGlvbi5kZXNjcmlwdG9yJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFGaWVsZEdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4gZXh0ZW5kcyBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfbmFtZTogc3RyaW5nO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfZGVmYXVsdDogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgX3RpdGxlPzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfZmllbGRzOiBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD5bXSA9IFtdO1xuICAgIHByb3RlY3RlZCBfdmFsaWRhdGlvbnM6IEFycmF5PEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3I8YW55LCBhbnk+PiA9IFtdO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGVkaXRvcjogSUVkaXRvckRlc2NyaXB0b3I8RWRpdG9yTW9kZWw+LCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yKTtcbiAgICAgICAgdGhpcy5fbmFtZSA9IGAke3RoaXMuYmFzZU5hbWV9JHtuYW1lfWA7XG4gICAgICAgIHRoaXMuX2RlZmF1bHQgPSBuYW1lID09PSBFRElUT1JfREVGQVVMVF9HUk9VUF9OQU1FO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVGaWVsZChcbiAgICAgICAgcHJvcGVydHk6IHN0cmluZyxcbiAgICAgICAgZmlsdGVyRnVuY3Rpb246IChmaWVsZHM6IEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVkaXRvck1vZGVsPltdKSA9PiBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD5bXVxuICAgICk6IEFHZW5lcmljRmllbGREZXNjcmlwdG9yPEVkaXRvck1vZGVsPltdIHtcbiAgICAgICAgdGhpcy5fZmllbGRzID0gZmlsdGVyRnVuY3Rpb24odGhpcy5fZmllbGRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gICAgfVxuXG4gICAgYWJzdHJhY3QgZ2V0IGZpZWxkcygpOiBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD5bXTtcblxuICAgIHB1YmxpYyBnZXQgdmFsaWRhdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJhc2VOYW1lKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5ncm91cE5hbWUoKX1fYDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHQ7XG4gICAgfVxuXG4gICAgYWJzdHJhY3QgZ3JvdXBOYW1lKCk6IHN0cmluZztcblxuICAgIGFic3RyYWN0IGFkZEZpZWxkKGZpZWxkOiBBR2VuZXJpY0ZpZWxkRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4pOiB0aGlzO1xuXG4gICAgYWJzdHJhY3QgY29weSgpOiBBRmllbGRHcm91cERlc2NyaXB0b3I8RWRpdG9yTW9kZWw+O1xuXG4gICAgcHVibGljIHdpdGhUaXRsZSh0aXRsZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVmFsaWRhdGlvbjxWYWx1ZSA9IEVkaXRvck1vZGVsPihuYW1lOiBzdHJpbmcsIHZhbGlkYXRvcj86IEZvcm1WYWxpZGF0b3I8VmFsdWU+LCBtZXNzYWdlPzogRm9ybVZhbGlkYXRpb25NZXNzYWdlPFZhbHVlPiwgb3B0cz86IEZpZWxkVmFsaWRhdGlvbkRlc2NyaXB0b3JPcHRzVHlwZSkge1xuICAgICAgICB0aGlzLl92YWxpZGF0aW9ucy5wdXNoKG5ldyBGaWVsZFZhbGlkYXRpb25EZXNjcmlwdG9yPFZhbHVlLCBWYWx1ZT4obmFtZSwgdmFsaWRhdG9yIGFzIEZpZWxkQmFzZVZhbGlkYXRvcjxWYWx1ZSwgVmFsdWU+IHwgdW5kZWZpbmVkLCBtZXNzYWdlLCBvcHRzKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPiBleHRlbmRzIEFGaWVsZEdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4ge1xuICAgIGNvbnN0cnVjdG9yKGVkaXRvcjogSUVkaXRvckRlc2NyaXB0b3I8RWRpdG9yTW9kZWw+LCBuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yLCBuYW1lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpZWxkcygpOiBBcnJheTxGaWVsZEdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpZWxkcyBhcyBBcnJheTxGaWVsZEdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4+O1xuICAgIH1cblxuICAgIHB1YmxpYyBncm91cE5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICd0YWInO1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRGaWVsZChmaWVsZDogRmllbGRHcm91cERlc2NyaXB0b3I8RWRpdG9yTW9kZWw+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHkoKTogRmllbGRUYWJHcm91cERlc2NyaXB0b3I8RWRpdG9yTW9kZWw+IHtcbiAgICAgICAgY29uc3QgdGFiID0gbmV3IEZpZWxkVGFiR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPih0aGlzLl9lZGl0b3IsIHRoaXMubmFtZS5zdWJzdHJpbmcodGhpcy5iYXNlTmFtZS5sZW5ndGgpKTtcbiAgICAgICAgdGFiLl90aXRsZSA9IHRoaXMuX3RpdGxlO1xuICAgICAgICB0YWIuX2ZpZWxkcyA9IHRoaXMuZmllbGRzLm1hcChmID0+IGYuY29weSgpKTtcbiAgICAgICAgdGFiLl92YWxpZGF0aW9ucyA9IHRoaXMudmFsaWRhdGlvbnMubWFwKHYgPT4gdi5jb3B5KCkpO1xuICAgICAgICByZXR1cm4gdGFiO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPiBleHRlbmRzIEFGaWVsZEdyb3VwRGVzY3JpcHRvcjxFZGl0b3JNb2RlbD4ge1xuICAgIHByaXZhdGUgX3R5cGUgPSBGaWVsZEdyb3VwVHlwZUVudW0uRmllbGRzZXQ7XG5cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3I6IElFZGl0b3JEZXNjcmlwdG9yPEVkaXRvck1vZGVsPiwgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKGVkaXRvciwgbmFtZSk7XG4gICAgICAgIGlmICh0aGlzLl9kZWZhdWx0KSB7XG4gICAgICAgICAgICB0aGlzLmFzTG9naWNhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0eXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpZWxkcygpOiBBcnJheTxBRmllbGREZXNjcmlwdG9yPGFueSwgRWRpdG9yTW9kZWw+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWVsZHMgYXMgQXJyYXk8QUZpZWxkRGVzY3JpcHRvcjxhbnksIEVkaXRvck1vZGVsPj47XG4gICAgfVxuXG4gICAgcHVibGljIGdyb3VwTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gJ2dyb3VwJztcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkRmllbGQoZmllbGQ6IEFGaWVsZERlc2NyaXB0b3I8YW55LCBFZGl0b3JNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZmllbGRzLnB1c2goZmllbGQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXNMb2dpY2FsKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl90eXBlID0gRmllbGRHcm91cFR5cGVFbnVtLkxvZ2ljYWw7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5KCk6IEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPiB7XG4gICAgICAgIGNvbnN0IGdyb3VwID0gbmV3IEZpZWxkR3JvdXBEZXNjcmlwdG9yPEVkaXRvck1vZGVsPih0aGlzLl9lZGl0b3IsIHRoaXMubmFtZS5zdWJzdHJpbmcodGhpcy5iYXNlTmFtZS5sZW5ndGgpKTtcbiAgICAgICAgZ3JvdXAuX3R5cGUgPSB0aGlzLl90eXBlO1xuICAgICAgICBncm91cC5fdGl0bGUgPSB0aGlzLl90aXRsZTtcbiAgICAgICAgZ3JvdXAuX2ZpZWxkcyA9IHRoaXMuZmllbGRzLm1hcChmID0+IGYuY29weSgpKTtcbiAgICAgICAgZ3JvdXAuX3ZhbGlkYXRpb25zID0gdGhpcy52YWxpZGF0aW9ucy5tYXAodiA9PiB2LmNvcHkoKSk7XG4gICAgICAgIHJldHVybiBncm91cDtcbiAgICB9XG59XG4iXX0=