@eo-sdk/client 10.6.26 → 10.6.28

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 (30) hide show
  1. package/app/eo-framework/actions/actions/custom-actions/custom-actions.component.d.ts.map +1 -1
  2. package/app/eo-framework/actions/actions/share-object-action/share-object/share-object.component.d.ts.map +1 -1
  3. package/app/eo-framework/form-elements/datetime-range/datetime-range.component.d.ts.map +1 -1
  4. package/app/eo-framework/media/media.component.d.ts +3 -2
  5. package/app/eo-framework/media/media.component.d.ts.map +1 -1
  6. package/app/eo-framework/object-details/object-details.component.d.ts +11 -2
  7. package/app/eo-framework/object-details/object-details.component.d.ts.map +1 -1
  8. package/app/eo-framework-core/search/app-search.service.d.ts.map +1 -1
  9. package/esm2020/app/eo-client/about-state/about-state.component.mjs +3 -3
  10. package/esm2020/app/eo-framework/actions/actions/custom-actions/custom-actions.component.mjs +2 -1
  11. package/esm2020/app/eo-framework/actions/actions/share-object-action/share-object/share-object.component.mjs +5 -2
  12. package/esm2020/app/eo-framework/app-shell/app-bar/app-search/app-search.component.mjs +3 -3
  13. package/esm2020/app/eo-framework/form-elements/datetime-range/datetime-range.component.mjs +6 -1
  14. package/esm2020/app/eo-framework/form-elements/dynamic-list/dynamic-list.component.mjs +3 -3
  15. package/esm2020/app/eo-framework/form-elements/organization/organization.component.mjs +3 -3
  16. package/esm2020/app/eo-framework/grid/filters/organization-filter.component.mjs +3 -3
  17. package/esm2020/app/eo-framework/media/media.component.mjs +8 -4
  18. package/esm2020/app/eo-framework/object-details/object-details.component.mjs +20 -10
  19. package/esm2020/app/eo-framework/object-form/object-form/form-element-table/form-element-table.component.mjs +1 -1
  20. package/esm2020/app/eo-framework/prepare-details/prepare-details.component.mjs +1 -1
  21. package/esm2020/app/eo-framework/recyclebin-details/recyclebin-details.component.mjs +1 -1
  22. package/esm2020/app/eo-framework/ui/indexdata-summary/indexdata-summary.component.mjs +2 -2
  23. package/esm2020/app/eo-framework-core/search/app-search.service.mjs +6 -2
  24. package/fesm2015/eo-sdk-client.mjs +55 -28
  25. package/fesm2015/eo-sdk-client.mjs.map +1 -1
  26. package/fesm2020/eo-sdk-client.mjs +55 -28
  27. package/fesm2020/eo-sdk-client.mjs.map +1 -1
  28. package/package.json +3 -3
  29. package/scss/_migrationTemp.scss +1 -0
  30. package/styles.css +2 -1
@@ -60,7 +60,11 @@ export class AppSearchService {
60
60
  }
61
61
  setDefaultAggs() {
62
62
  this.aggs = {
63
- type: {}
63
+ type: {},
64
+ mimetypegroup: {},
65
+ filesize: {},
66
+ created: {},
67
+ modified: {},
64
68
  };
65
69
  }
66
70
  // helper method for sorting the entries of an object type group
@@ -384,4 +388,4 @@ AppSearchService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", ver
384
388
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: AppSearchService, decorators: [{
385
389
  type: Injectable
386
390
  }], ctorParameters: function () { return [{ type: i1.SearchService }, { type: i1.EventService }, { type: i1.SystemService }]; } });
387
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXNlYXJjaC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmstY29yZS9zZWFyY2gvYXBwLXNlYXJjaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLElBQUksY0FBYyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDeEYsT0FBTyxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQ1MsV0FBVyxFQUFFLFdBQVcsRUFDRyxVQUFVLEVBQUUsS0FBSyxFQUMzRCxNQUFNLGNBQWMsQ0FBQzs7O0FBRXRCOzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8sZ0JBQWdCO0lBMkIzQixZQUFvQixhQUE0QixFQUN0QyxZQUEwQixFQUMxQixNQUFxQjtRQUZYLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQ3RDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLFdBQU0sR0FBTixNQUFNLENBQWU7UUEzQnZCLFVBQUssR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBRTFCLGNBQVMsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzlCLGVBQVUsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBS3ZDLHlFQUF5RTtRQUN6RSxxSkFBcUo7UUFDckosb0dBQW9HO1FBQzVGLGdCQUFXLEdBQUcsSUFBSSxhQUFhLENBQWMsQ0FBQyxDQUFDLENBQUM7UUFDaEQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQWMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTdFLHlGQUF5RjtRQUN6Riw2RkFBNkY7UUFDN0YsdUJBQXVCO1FBQ2hCLFdBQU0sR0FBNEIsSUFBSSxDQUFDLFdB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QUFLLEtBQUssZUFBZSxDQUFDLENBQUM7WUFDMUYsQ0FBQyxFQUFFLENBQUM7U0FDTDtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7NkdBbGFVLGdCQUFnQjtpSEFBaEIsZ0JBQWdCOzJGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Zyb20gYXMgb2JzZXJ2YWJsZUZyb20sIEJlaGF2aW9yU3ViamVjdCwgUmVwbGF5U3ViamVjdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2dyb3VwQnksIHJlZHVjZSwgbWVyZ2VNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBTZWFyY2hGaWx0ZXIsIFNlYXJjaFF1ZXJ5LCBTZWFyY2hTdGF0ZSwgU3lzdGVtU2VydmljZSxcbiAgT2JqZWN0VHlwZSwgU2VhcmNoU2VydmljZSwgRXZlbnRTZXJ2aWNlLCBFbmFpb0V2ZW50LCBVdGlscywgUXVlcnlTY29wZVxufSBmcm9tICdAZW8tc2RrL2NvcmUnO1xuXG4vKipcbiAqIEFwcFNlYXJjaFNlcnZpY2UgaXMgdGhlIGFwcHMgbWFpbiBlbnRyeSBwb2ludCBmb3Igc2VhcmNoaW5nICh1c2VkIGJ5IHRoZSBhcHBCYXJTZWFyY2ggY29tcG9uZW50KS5cbiAqIEl0IHByb3ZpZGVzIGFuIGBxdWVyeSRgIG9ic2VydmFibGUgY29tcG9uZW50cyBjYW4gc3Vic2NyaWJlIHRvLCB0b1xuICogc3RheSBpbiB0b3VjaCB3aXRoIHVwZGF0ZXMgdG8gdGhlIHF1ZXJ5LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXBwU2VhcmNoU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBxdWVyeSA9IG5ldyBTZWFyY2hRdWVyeSgpO1xuICBwcml2YXRlIGFnZ3M6IGFueTtcbiAgcHJpdmF0ZSBsYXN0UXVlcnkgPSBuZXcgU2VhcmNoUXVlcnkoKTtcbiAgcHJpdmF0ZSBxdWVyeVN0YXRlID0gbmV3IFNlYXJjaFN0YXRlKCk7XG4gIC8vIEhvbGRzIHRoZSBsYXN0IGFnZ3JlZ2F0aW9uIHByb3BlcnRpZXMgc2VudCB0byB0aGUgc2VydmVyXG4gIC8vIFVzZWQgZm9yIHByZXZlbnRpbmcgcmVkdW5kYW50IGNhbGxzXG4gIHByaXZhdGUgbGFzdEFnZ0NhbGxDb21wYXJhdG9yOiBzdHJpbmc7XG5cbiAgLy8gU3ViamVjdCBob2xkaW5nIHRoZSBjdXJyZW50IHF1ZXJ5IChpbml0aWFsIHZhbHVlIGlzIGEgbmV3IFNlYXJjaFF1ZXJ5KVxuICAvLyBAc2VlOiBodHRwOi8vYmxvZy5hbmd1bGFyLXVuaXZlcnNpdHkuaW8vaG93LXRvLWJ1aWxkLWFuZ3VsYXIyLWFwcHMtdXNpbmctcnhqcy1vYnNlcnZhYmxlLWRhdGEtc2VydmljZXMtcGl0ZmFsbHMtdG8tYXZvaWQvI3J4anNzdWJqZWN0YW5kaG93dG91c2VpdFxuICAvLyB0b2RvOiBtYXliZSBhZGQgc3VwcG9ydCBmb3IgaG9sZGluZyBhIHF1ZXJ5IGhpc3RvcnksIHNvIHRoZSB1c2VyIGNhbiByZWxvYWQgb2xkZXIgcXVlcmllcyBhcyB3ZWxsXG4gIHByaXZhdGUgcXVlcnlTb3VyY2UgPSBuZXcgUmVwbGF5U3ViamVjdDxTZWFyY2hRdWVyeT4oMSk7XG4gIHByaXZhdGUgcXVlcnlTdGF0ZVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VhcmNoU3RhdGU+KHRoaXMucXVlcnlTdGF0ZSk7XG5cbiAgLy8gRXhwb3NlIGFuIG9ic2VydmFibGUgaW5zdGVhZCBvZiB0aGUgc3ViamVjdCBpdHNlbGYgdG8gcHJldmVudCB0aGUgc2VydmljZSBjbGllbnRzIGZyb21cbiAgLy8gdGhlbXNlbHZlcyBlbWl0dGluZyBzdG9yZSB2YWx1ZXMgZGlyZWN0bHkgaW5zdGVhZCBvZiBjYWxsaW5nIGFjdGlvbiBtZXRob2RzLCBhbmQgdGhlcmVmb3JlXG4gIC8vIGJ5cGFzc2luZyB0aGUgc3RvcmUuXG4gIHB1YmxpYyBxdWVyeSQ6IE9ic2VydmFibGU8U2VhcmNoUXVlcnk+ID0gdGhpcy5xdWVyeVNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgLy8gU2VhcmNoIHNlcnZpY2UgYWxzbyBleHBvc2VzIGFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgcXVlcnkuXG4gIC8vIFdlIHNlcGFyYXRlIHRoZSBzdGF0ZSBvZiB0aGUgcXVlcnkgZnJvbSB0aGUgcXVlcnkgaXRzZWxmIGFzIG90aGVyd2lzZSBjaGFuZ2hpbmcgdGhlIHF1ZXJpZXNcbiAgLy8gc3RhdGUgd2lsbCB0cmlnZ2VyIGFsbCBzdWJzY3JpYmVycyBvZiB0aGUgcXVlcnkgb2JzZXJ2YWxlIGFuZCBsZWFkIHRvIHVuZGVzaXJlZCBiZWhhdmlvdXJcbiAgcHVibGljIHF1ZXJ5U3RhdGUkOiBPYnNlcnZhYmxlPFNlYXJjaFN0YXRlPiA9IHRoaXMucXVlcnlTdGF0ZVNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgcHVibGljIG9iamVjdFR5cGVHcm91cHMgPSBbXTtcbiAgcHVibGljIHR5cGVzQWxsb3dlZFVuZGVyU3lzcm9vdCA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VhcmNoU2VydmljZTogU2VhcmNoU2VydmljZSxcbiAgICBwcml2YXRlIGV2ZW50U2VydmljZTogRXZlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3lzdGVtOiBTeXN0ZW1TZXJ2aWNlKSB7XG5cbiAgICB0aGlzLnNldERlZmF1bHRBZ2dzKCk7XG4gICAgdGhpcy5ldmVudFNlcnZpY2Uub24oRW5haW9FdmVudC5MT0dPVVQpXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMucXVlcnlTb3VyY2UubmV4dCh0aGlzLnF1ZXJ5KTtcblxuICAgIC8vIEZldGNoIG9iamVjdCB0eXBlcyBhbmQgZ3JvdXBzIHRoYXQgc2VydmUgYXMgc2VhcmNoIGZpbHRlciBwYXJhbXMuXG4gICAgLy8gVGhlc2UgZ3JvdXBzIGFyZSBwcm92aWRlZCB0aHJvdWdoIHRoZSBzZXJ2aWNlcyBgb2JqZWN0VHlwZUdyb3Vwc2AgcHJvcGVydHkuXG4gICAgdGhpcy5zeXN0ZW0uc3lzdGVtJC5zdWJzY3JpYmUoKHN5c3RlbURlZmluaXRpb24pID0+IHtcblxuICAgICAgdGhpcy50eXBlc0FsbG93ZWRVbmRlclN5c3Jvb3QgPSBzeXN0ZW1EZWZpbml0aW9uLnR5cGVzLmZpbHRlcih0eXBlID0+IHR5cGUucGFyZW50dHlwZXMuaW5jbHVkZXMoJ3N5c3Jvb3QnKSk7XG5cbiAgICAgIGxldCBncm91cHMgPSBbXTtcbiAgICAgIG9ic2VydmFibGVGcm9tKHN5c3RlbURlZmluaXRpb24udHlwZXMpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGdyb3VwQnkoKHR5cGU6IGFueSkgPT4gdHlwZS5ncm91cCB8fCAnMCcpLFxuICAgICAgICAgIG1lcmdlTWFwKGcgPT4gZy5waXBlKHJlZHVjZSgoYWNjLCBjdXJyKSA9PiBbLi4uYWNjLCBjdXJyXSwgW10pKSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKG90ZyA9PiB7XG4gICAgICAgICAgZ3JvdXBzLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6IG90Z1swXS5ncm91cCB8fCAnMCcsXG4gICAgICAgICAgICB0eXBlczogdGhpcy5zb3J0T2JqZWN0VHlwZUdyb3VwKG90ZylcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB0aGlzLm9iamVjdFR5cGVHcm91cHMgPSBncm91cHMuc29ydChVdGlscy5zb3J0VmFsdWVzKCdsYWJlbCcpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlc2V0QWdncygpIHtcbiAgICB0aGlzLnNldERlZmF1bHRBZ2dzKCk7XG4gICAgdGhpcy5sYXN0QWdnQ2FsbENvbXBhcmF0b3IgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREZWZhdWx0QWdncygpIHtcbiAgICB0aGlzLmFnZ3MgPSB7XG4gICAgICB0eXBlOiB7fVxuICAgIH07XG4gIH1cblxuICAvLyBoZWxwZXIgbWV0aG9kIGZvciBzb3J0aW5nIHRoZSBlbnRyaWVzIG9mIGFuIG9iamVjdCB0eXBlIGdyb3VwXG4gIHByaXZhdGUgc29ydE9iamVjdFR5cGVHcm91cCh0eXBlcykge1xuICAgIHJldHVybiB0eXBlcy5zb3J0KChhLCBiKSA9PiB7XG5cbiAgICAgIGlmIChhLmlzQ29udGV4dEZvbGRlciAmJiAhYi5pc0NvbnRleHRGb2xkZXIpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgaWYgKCFhLmlzQ29udGV4dEZvbGRlciAmJiBiLmlzQ29udGV4dEZvbGRlcikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICAgIGlmIChhLmlzRm9sZGVyICYmICFiLmlzRm9sZGVyKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIGlmICghYS5pc0ZvbGRlciAmJiBiLmlzRm9sZGVyKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgICAgaWYgKGEuaXNGb2xkZXIgJiYgYi5pc0ZvbGRlcikge1xuICAgICAgICByZXR1cm4gVXRpbHMuc29ydFZhbHVlcygnbGFiZWwnKS5jYWxsKHRoaXMsIGEsIGIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFV0aWxzLnNvcnRWYWx1ZXMoJ2xhYmVsJykuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEV4dGVuZHMgdGhlIG9iamVjdFR5cGVzR3JvdXBzIGJ5IHRoZSBlbGVtZW50cyBmb3IgZWFjaCBvYmplY3QgdHlwZVxuICAvLyBVc2VkIGluIGV4cGVydCBzZWFyY2ggbW9kZVxuICBwdWJsaWMgYnVpbGRUeXBlR3JvdXBUcmVlKCkge1xuXG4gICAgbGV0IGdUcmVlID0gW107XG4gICAgbGV0IGkgPSAwO1xuICAgIGZvciAobGV0IGdyb3VwIG9mIHRoaXMub2JqZWN0VHlwZUdyb3Vwcykge1xuICAgICAgbGV0IGcgPSB7XG4gICAgICAgIGlkOiBpKyssXG4gICAgICAgIGxhYmVsOiBncm91cC5sYWJlbCxcbiAgICAgICAgdHJlZTogW11cbiAgICAgIH07XG4gICAgICBsZXQgdHlwZXMgPSBbXTtcbiAgICAgIGZvciAobGV0IG9iamVjdFR5cGUgb2YgZ3JvdXAudHlwZXMpIHtcblxuICAgICAgICBsZXQgdCA9IHtcbiAgICAgICAgICBpZDogb2JqZWN0VHlwZS5pZCxcbiAgICAgICAgICBsYWJlbDogb2JqZWN0VHlwZS5sYWJlbCxcbiAgICAgICAgICBjaGlsZHJlbjogW11cbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGNoaWxkcmVuID0gW107XG4gICAgICAgIGZvciAobGV0IGVsIG9mIG9iamVjdFR5cGUuZWxlbWVudHMpIHtcbiAgICAgICAgICBjaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgICAgIGxhYmVsOiBlbC5sYWJlbCxcbiAgICAgICAgICAgIHR5cGU6IGVsLnR5cGUsXG4gICAgICAgICAgICBkYXRhOiBlbC5xbmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNvcnQgYnkgbGFiZWxcbiAgICAgICAgdC5jaGlsZHJlbiA9IGNoaWxkcmVuLnNvcnQoVXRpbHMuc29ydFZhbHVlcygnbGFiZWwnKSk7XG4gICAgICAgIHR5cGVzLnB1c2godCk7XG4gICAgICB9XG4gICAgICBnLnRyZWUgPSB0eXBlcy5zb3J0KFV0aWxzLnNvcnRWYWx1ZXMoJ2xhYmVsJykpO1xuXG5cbiAgICAgIGdUcmVlLnB1c2goZyk7XG4gICAgfVxuICAgIHJldHVybiBnVHJlZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgY3VycmVudCBxdWVyeSBieSBhIGRpZmZlcmVudCBvbmUuXG4gICAqIFRoaXMgY291bGQgYmUgZG9uZSBieSBmb3IgZXhhbXBsZSBsb2FkaW5nIGEgc3RvcmVkIHF1ZXJ5LlxuICAgKlxuICAgKiBAcGFyYW0gcXVlcnkgLSB0aGUgcXVlcnkgdGhhdCBzaG91bGQgcmVwbGFjZSB0aGUgY3VycmVudCBxdWVyeSwgdGhpcyBtYXkgYmUgZWl0aGVyIGEgU2VhcmNoUXVlcnkgaW5zdGFuY2UsXG4gICAqIGEgSlNPTiBzdHJpbmcgb2YgYW4gb2JqZWN0IG1hdGNoaW5nIHRoZSBzZWFyY2ggYXBpXG4gICAqL1xuICBwdWJsaWMgc2V0UXVlcnkocXVlcnk6IFNlYXJjaFF1ZXJ5KSB7XG4gICAgaWYgKHRoaXMuaXNOZXdRdWVyeShxdWVyeSkpIHtcbiAgICAgIHRoaXMuc2V0RGVmYXVsdEFnZ3MoKTtcbiAgICAgIHRoaXMucXVlcnkgPSBxdWVyeTtcbiAgICAgIHRoaXMucXVlcnlTb3VyY2UubmV4dCh0aGlzLnF1ZXJ5KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBjdXJyZW50IHF1ZXJ5LlxuICAgKi9cbiAgcHVibGljIGNsZWFyUXVlcnkoKSB7XG4gICAgdGhpcy5zZXRRdWVyeShuZXcgU2VhcmNoUXVlcnkoKSk7XG4gIH1cblxuICBwcml2YXRlIGlzTmV3UXVlcnkocXVlcnk6IFNlYXJjaFF1ZXJ5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHF1ZXJ5LmdldFF1ZXJ5SnNvbigpKSAhPT0gSlNPTi5zdHJpbmdpZnkodGhpcy5xdWVyeS5nZXRRdWVyeUpzb24oKSk7XG4gIH1cblxuICAvKipcbiAgICogdG9nZ2xlcyB0aGUgc2VhcmNobW9kZSBmcm9tIHJlZ3VsYXIgc2VhcmNoIHRvIGV4cGVydCBzZWFyY2ggYW5kIHZpY2UgdmVyc2FcbiAgICovXG4gIHB1YmxpYyB0b2dnbGVFeHBlcnRNb2RlKCkge1xuICAgIGlmICghdGhpcy5xdWVyeS5leHBlcnRNb2RlKSB7XG4gICAgICB0aGlzLmxhc3RRdWVyeSA9IHRoaXMucXVlcnk7XG4gICAgICB0aGlzLnNldERlZmF1bHRBZ2dzKCk7XG4gICAgICB0aGlzLnF1ZXJ5ID0gbmV3IFNlYXJjaFF1ZXJ5KCk7XG4gICAgICB0aGlzLnF1ZXJ5LmV4cGVydE1vZGUgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5sYXN0UXVlcnk7XG4gICAgfVxuICAgIHRoaXMucXVlcnkuX191cGRhdGVDYXVzZSA9IFNlYXJjaFF1ZXJ5LlVQREFURV9DQVVTRS5UT0dHTEVEX0VYUEVSVE1PREU7XG4gICAgdGhpcy5xdWVyeVNvdXJjZS5uZXh0KHRoaXMucXVlcnkpO1xuICAgIHRoaXMuYWdncmVnYXRlKCk7XG5cbiAgfVxuXG4gIHB1YmxpYyBzZXRUZXJtKHRlcm06IHN0cmluZykge1xuICAgIHRoaXMucXVlcnkudGVybSA9IHRlcm07XG4gICAgdGhpcy5xdWVyeS5fX3VwZGF0ZUNhdXNlID0gU2VhcmNoUXVlcnkuVVBEQVRFX0NBVVNFLlRFUk1fU0VUO1xuICAgIHRoaXMucXVlcnlTb3VyY2UubmV4dCh0aGlzLnF1ZXJ5KTtcbiAgICB0aGlzLmFnZ3JlZ2F0ZSgpO1xuICB9XG5cbiAgcHVibGljIHNldFF1ZXJ5U2NvcGUoc2NvcGU6IFF1ZXJ5U2NvcGUpIHtcbiAgICB0aGlzLnF1ZXJ5LnNjb3BlID0gc2NvcGU7XG4gICAgdGhpcy5xdWVyeVNvdXJjZS5uZXh0KHRoaXMucXVlcnkpO1xuICAgIHRoaXMuYWdncmVnYXRlKCk7XG4gIH1cblxuICAvLyBzZXQgYWdncmVnYXRpb24gcHJvcGVydGllcyB0byBiZSBhcHBsaWVkIHRvIE9OTFkgYWdncmVnYXRlIHNlYXJjaCBxdWVyaWVzXG4gIHB1YmxpYyBzZXRBZ2dzKGFnZ3M6IGFueSwgZXh0ZW5kID0gZmFsc2UpIHtcbiAgICB0aGlzLmFnZ3MgPSBleHRlbmQgPyB7Li4udGhpcy5hZ2dzLCAuLi5hZ2dzfSA6IGFnZ3M7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyBhIHR5cGUgZmlsdGVyLlxuICAgKiBAcGFyYW0gdHlwZSAtIG9iamVjdCB0eXBlXG4gICAqL1xuICBwdWJsaWMgdG9nZ2xlUXVlcnlUeXBlKHR5cGU6IE9iamVjdFR5cGUpIHtcbiAgICB0aGlzLnF1ZXJ5LnRvZ2dsZVR5cGUodHlwZSk7XG4gICAgdGhpcy5xdWVyeS5fX3VwZGF0ZUNhdXNlID0gU2VhcmNoUXVlcnkuVVBEQVRFX0NBVVNFLlRPR0dMRURfVFlQRTtcbiAgICB0aGlzLnF1ZXJ5U291cmNlLm5leHQodGhpcy5xdWVyeSk7XG4gICAgdGhpcy5hZ2dyZWdhdGUoU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuVFlQRSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcXVlcmllcyB0YXJnZXQgdHlwZXMuXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlcyAtIGFycmF5IG9mIE9iamVjdFR5cGVzXG4gICAqIEBwYXJhbSBzaWxlbnQgSWYgc2V0IHRvIHRydWUgYWdncmVnYXRlIHdvbid0IGJlIGNhbGxlZFxuICAgKi9cbiAgcHVibGljIHNldFF1ZXJ5VHlwZXModHlwZXM6IE9iamVjdFR5cGVbXSwgc2lsZW50PzogYm9vbGVhbikge1xuICAgIHRoaXMucXVlcnkudHlwZXMgPSB0eXBlcztcbiAgICB0aGlzLmFnZ3MgPSB7XG4gICAgICB0eXBlOiB7XG4gICAgICAgIHN1Yjoge1xuICAgICAgICAgIGNvbnRleHRmb2xkZXJ0eXBlOiB7fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnF1ZXJ5Ll9fdXBkYXRlQ2F1c2UgPSBTZWFyY2hRdWVyeS5VUERBVEVfQ0FVU0UuVFlQRVNfU0VUO1xuICAgIHRoaXMucXVlcnlTb3VyY2UubmV4dCh0aGlzLnF1ZXJ5KTtcbiAgICBpZiAoIXNpbGVudCkge1xuICAgICAgdGhpcy5hZ2dyZWdhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcXVlcmllcyB0YXJnZXQgY29udGV4dCB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0gdHlwZSBUaGUgY29udGV4dCB0eXBlIHRvIGJlIHNldCBvciBudWxsIGZvciByZXNldHRpbmdcbiAgICogQHBhcmFtIHNpbGVudCBJZiBzZXQgdG8gdHJ1ZSBhZ2dyZWdhdGUgd29uJ3QgYmUgY2FsbGVkXG4gICAqL1xuICBwdWJsaWMgc2V0Q29udGV4dFR5cGUodHlwZTogT2JqZWN0VHlwZSwgc2lsZW50PzogYm9vbGVhbikge1xuXG4gICAgaWYgKHRoaXMucXVlcnkuY29udGV4dEZvbGRlclR5cGVzLmxlbmd0aCAmJiAhdHlwZSkge1xuICAgICAgLy8gY2xlYXIgY29udGV4dCBmb2xkZXJcbiAgICAgIHRoaXMuZW1pdE5ld0NvbnRleHRGb2xkZXJUeXBlKG51bGwpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMubGVuZ3RoICYmIHR5cGUubmFtZSAhPT0gdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXNbMF0ubmFtZSkge1xuICAgICAgLy8gZ290IGEgdHlwZSB0byBiZSBzZXQgdXAgdGhhdCBkaWZmZXJzIGZyb20gdGhlIGN1cnJlbnQgb25lXG4gICAgICB0aGlzLmVtaXROZXdDb250ZXh0Rm9sZGVyVHlwZSh0eXBlKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLnF1ZXJ5LmNvbnRleHRGb2xkZXJUeXBlcy5sZW5ndGgpIHtcbiAgICAgIC8vIG5vdGhpbmcgc2V0IHVwIHNvIGZhclxuICAgICAgdGhpcy5lbWl0TmV3Q29udGV4dEZvbGRlclR5cGUodHlwZSk7XG4gICAgfVxuICAgIC8vIHRyeWluZyB0byBzZXR1cCB0aGUgc2FtZSB0eXBlIGFzIHRoZSBjdXJyZW50IG9uIHNob3VsZCBub3QgZW1pdCBhIG5ldyB2YWx1ZVxuICB9XG5cbiAgcHJpdmF0ZSBlbWl0TmV3Q29udGV4dEZvbGRlclR5cGUodHlwZSwgc2lsZW50PzogYm9vbGVhbikge1xuICAgIGlmICghdHlwZSAmJiB0aGlzLnF1ZXJ5LmNvbnRleHRGb2xkZXJUeXBlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hZ2dzID0ge1xuICAgICAgdHlwZToge1xuICAgICAgICBzdWI6IHtcbiAgICAgICAgICBjb250ZXh0Zm9sZGVydHlwZToge31cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMgPSB0eXBlID8gW3R5cGVdIDogW107XG4gICAgdGhpcy5xdWVyeS5fX3VwZGF0ZUNhdXNlID0gU2VhcmNoUXVlcnkuVVBEQVRFX0NBVVNFLkNPTlRFWFRfRk9MREVSX1NFVDtcbiAgICB0aGlzLnF1ZXJ5U291cmNlLm5leHQodGhpcy5xdWVyeSk7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIHRoaXMuYWdncmVnYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgYSBjcmVhdGVkIGZpbHRlci5cbiAgICogQHBhcmFtIGZpbHRlciAtIHRoZSBmaWx0ZXIgdG8gYmUgdG9nZ2xlZFxuICAgKi9cbiAgcHVibGljIHRvZ2dsZVF1ZXJ5RmlsdGVyKGZpbHRlcjogU2VhcmNoRmlsdGVyLCBvdmVycmlkZT86IGJvb2xlYW4pIHtcbiAgICB0aGlzLnF1ZXJ5LnRvZ2dsZUZpbHRlcihmaWx0ZXIsIG92ZXJyaWRlKTtcbiAgICB0aGlzLnF1ZXJ5Ll9fdXBkYXRlQ2F1c2UgPSBTZWFyY2hRdWVyeS5VUERBVEVfQ0FVU0UuVE9HR0xFRF9GSUxURVI7XG4gICAgdGhpcy5xdWVyeVNvdXJjZS5uZXh0KHRoaXMucXVlcnkpO1xuICAgIHRoaXMuYWdncmVnYXRlKGZpbHRlci5wcm9wZXJ0eSk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyBjcmVhdGVkIGZpbHRlcnMgYW5kIGFnZ3JlZ2F0ZXMgdGhlbSB0b2dldGhlci5cbiAgICogQHBhcmFtIGZpbHRlcnMgLSB0aGUgZmlsdGVycyB0byBiZSB0b2dnbGVkXG4gICAqL1xuICBwdWJsaWMgdG9nZ2xlUXVlcnlGaWx0ZXJzKGZpbHRlcnM6IFNlYXJjaEZpbHRlcltdLCBvdmVycmlkZT86IGJvb2xlYW4pIHtcbiAgICBsZXQgYmFzZVBhcmFtID0gJyc7XG4gICAgZmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICB0aGlzLnF1ZXJ5LnRvZ2dsZUZpbHRlcihmaWx0ZXIsIG92ZXJyaWRlKTtcbiAgICAgIHRoaXMucXVlcnkuX191cGRhdGVDYXVzZSA9IFNlYXJjaFF1ZXJ5LlVQREFURV9DQVVTRS5UT0dHTEVEX0ZJTFRFUjtcbiAgICAgIGJhc2VQYXJhbSArPSBmaWx0ZXIucHJvcGVydHkgKyAnICc7XG4gICAgfSk7XG5cbiAgICB0aGlzLnF1ZXJ5U291cmNlLm5leHQodGhpcy5xdWVyeSk7XG4gICAgdGhpcy5hZ2dyZWdhdGUoYmFzZVBhcmFtLnRyaW0oKSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGZpbHRlciB0byB0aGUgcXVlcnkuXG4gICAqIEBwYXJhbSBmaWx0ZXIgLSB0aGUgZmlsdGVyIHRvIGJlIGFkZGVkXG4gICAqL1xuICBwdWJsaWMgYWRkUXVlcnlGaWx0ZXIoZmlsdGVyOiBTZWFyY2hGaWx0ZXIpIHtcbiAgICB0aGlzLnF1ZXJ5LmFkZEZpbHRlcihmaWx0ZXIpO1xuICAgIHRoaXMucXVlcnkuX191cGRhdGVDYXVzZSA9IFNlYXJjaFF1ZXJ5LlVQREFURV9DQVVTRS5BRERFRF9GSUxURVI7XG4gICAgdGhpcy5xdWVyeVNvdXJjZS5uZXh0KHRoaXMucXVlcnkpO1xuICAgIHRoaXMuYWdncmVnYXRlKGZpbHRlci5wcm9wZXJ0eSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIGZpbHRlciB0byB0aGUgcXVlcnkuXG4gICAqIEBwYXJhbSBmaWx0ZXIgLSB0aGUgZmlsdGVyIHRvIGJlIHJlbW92ZWRcbiAgICovXG4gIHB1YmxpYyByZW1vdmVRdWVyeUZpbHRlcihmaWx0ZXI6IFNlYXJjaEZpbHRlcikge1xuICAgIHRoaXMucXVlcnkucmVtb3ZlRmlsdGVyKGZpbHRlci5wcm9wZXJ0eSk7XG4gICAgdGhpcy5xdWVyeS5fX3VwZGF0ZUNhdXNlID0gU2VhcmNoUXVlcnkuVVBEQVRFX0NBVVNFLlJFTU9WRURfRklMVEVSO1xuICAgIHRoaXMucXVlcnlTb3VyY2UubmV4dCh0aGlzLnF1ZXJ5KTtcbiAgICB0aGlzLmFnZ3JlZ2F0ZShmaWx0ZXIucHJvcGVydHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGZpbHRlcnMgZm9yIGFuIGluZGV4ZGF0YSBzZWFyY2guXG4gICAqIFNldHRpbmcgdGhlbSB3aWxsIGFsc28gcmVtb3ZlIGFsbCBpbmRleGRhdGEgZmlsdGVycyBzZXQgYmVmb3JlLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsdGVycyAtIHRoZSBmaWx0ZXJzIHRvIGJlIHNldFxuICAgKiBAcGFyYW0gc2lsZW50IElmIHNldCB0byB0cnVlIGFnZ3JlZ2F0ZSB3b24ndCBiZSBjYWxsZWRcbiAgICovXG4gIHB1YmxpYyBzZXRJbmRleFNlYXJjaFF1ZXJ5RmlsdGVycyhmaWx0ZXJzOiBTZWFyY2hGaWx0ZXJbXSwgc2lsZW50PzogYm9vbGVhbikge1xuXG4gICAgLy8gcmVtb3ZlIHByZXZpb3VzIGZpbHRlcnMgKGFsbCBmaWx0ZXJzIHRoYXQgYXJlIG5vdCBiYXNlcGFyYW0gZmlsdGVycylcbiAgICB0aGlzLnF1ZXJ5LmZpbHRlcnMgPSB0aGlzLnF1ZXJ5LmZpbHRlcnMuZmlsdGVyKChmKSA9PiB0aGlzLmlzQmFzZVBhcmFtRmlsdGVyKGYpKTtcbiAgICBmb3IgKGxldCBmIG9mIGZpbHRlcnMpIHtcbiAgICAgIHRoaXMucXVlcnkuYWRkRmlsdGVyKGYpO1xuICAgIH1cbiAgICBpZiAoIXNpbGVudCkge1xuICAgICAgdGhpcy5hZ2dyZWdhdGUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0SW5kZXhTZWFyY2hRdWVyeUZpbHRlcnMocXVlcnk/OiBTZWFyY2hRdWVyeSk6IFNlYXJjaEZpbHRlcltdIHtcbiAgICBsZXQgcSA9IHF1ZXJ5IHx8IHRoaXMucXVlcnk7XG4gICAgcmV0dXJuIHEuZmlsdGVycy5maWx0ZXIoKGYpID0+ICF0aGlzLmlzQmFzZVBhcmFtRmlsdGVyKGYpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSBwcm92aWRlZCBzZWFyY2ggZmlsdGVyIGJlbG9uZ3MgdG8gYSBiYXNlIHBhcmFtLlxuICAgKlxuICAgKiBAcGFyYW0gZmlsdGVyIC0gdGhlIGZpbHRlciB0byBiZSBjaGVja2VkXG4gICAqL1xuICBwdWJsaWMgaXNCYXNlUGFyYW1GaWx0ZXIoZmlsdGVyOiBTZWFyY2hGaWx0ZXIpOiBib29sZWFuIHtcbiAgICAvL3JldHVybiBPYmplY3QudmFsdWVzKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TKS5zb21lKChicCkgPT4gZmlsdGVyLnByb3BlcnR5ID09PSBicCk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TKS5zb21lKChicEtleSkgPT4gZmlsdGVyLnByb3BlcnR5ID09PSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNU1ticEtleV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBjdXJyZW50IHF1ZXJ5IGFzIGFnZ3JlZ2F0ZSBzZWFyY2hcbiAgICovXG4gIHB1YmxpYyBhZ2dyZWdhdGUoYmFzZVBhcmFtID0gJycpIHtcblxuICAgIGNvbnN0IGFnZ1F1ZXJ5ID0ge2FnZ3M6IHRoaXMuYWdncywgLi4udGhpcy5xdWVyeS5nZXRRdWVyeUpzb24oKX07XG4gICAgLy8gY29tcGFyZSB0aGUgY2FsbCB0byBiZSBtYWRlIHdpdGggYSBmb3JtZXIgcmVxdWVzdFxuICAgIGlmICh0aGlzLmxhc3RBZ2dDYWxsQ29tcGFyYXRvciAhPT0gSlNPTi5zdHJpbmdpZnkoYWdnUXVlcnkpKSB7XG4gICAgICB0aGlzLmxhc3RBZ2dDYWxsQ29tcGFyYXRvciA9IEpTT04uc3RyaW5naWZ5KGFnZ1F1ZXJ5KTtcbiAgICAgIHRoaXMuZ2V0U2VhcmNoU3RhdGUoYWdnUXVlcnkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHF1ZXJ5U3RhdGU6IFNlYXJjaFN0YXRlKSA9PiB7XG4gICAgICAgICAgcXVlcnlTdGF0ZS5sYXN0Q2hhbmdlID0gYmFzZVBhcmFtO1xuICAgICAgICAgIHRoaXMucXVlcnlTdGF0ZSA9IHF1ZXJ5U3RhdGU7XG4gICAgICAgICAgdGhpcy5xdWVyeVN0YXRlU291cmNlLm5leHQodGhpcy5xdWVyeVN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBxdWVyeVxuICAgKi9cbiAgcHVibGljIHJlc2V0KHNpbGVudD86IGJvb2xlYW4pIHtcbiAgICB0aGlzLnF1ZXJ5ID0gbmV3IFNlYXJjaFF1ZXJ5KCk7XG4gICAgdGhpcy5zZXREZWZhdWx0QWdncygpO1xuICAgIHRoaXMucXVlcnlTb3VyY2UubmV4dCh0aGlzLnF1ZXJ5KTtcbiAgICBpZiAoIXNpbGVudCkge1xuICAgICAgdGhpcy5hZ2dyZWdhdGUoKTtcbiAgICB9XG4gIH1cblxuICBleGl0SW5kZXhkYXRhU2VhcmNoKCkge1xuICAgIHRoaXMuc2V0SW5kZXhTZWFyY2hRdWVyeUZpbHRlcnMoW10sIHRydWUpO1xuICAgIHRoaXMuc2V0UXVlcnlUeXBlcyhbXSwgdHJ1ZSk7XG4gICAgdGhpcy5zZXRDb250ZXh0VHlwZShudWxsLCB0cnVlKTtcbiAgICB0aGlzLmFnZ3JlZ2F0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSBjdXJyZW50IHF1ZXJ5IGFzIGFnZ3JlZ2F0ZSBzZWFyY2hcbiAgICovXG4gIHB1YmxpYyBnZXRTZWFyY2hTdGF0ZShxdWVyeUpzb246IGFueSkge1xuICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0U2VhcmNoU3RhdGUocXVlcnlKc29uKTtcbiAgfVxuXG4gIHB1YmxpYyBhdXRvY29tcGxldGUodGVybTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoU2VydmljZS5hdXRvY29tcGxldGUodGVybSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIG9iamVjdCB0eXBlIGVsZW1lbnQgaW5zaWRlIG9mIHRoZSBxdWVyaWVzIHRhcmdldCB0eXBlc1xuICAgKiBmb3IgYSBmb3JtIGVsZW1lbnRzIG5hbWUuIFVzZWQgZS5nLiBmb3IgdGhlIHNlYXJjaCBzdW1tYXJ5IHBhbmVsLlxuICAgKlxuICAgKiBAcGFyYW0gZm9ybUVsZW1lbnROYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGZvcm0gZWxlbWVudFxuICAgKiBAcmV0dXJuIHRoZSBvYmplY3QgdHlwZSBlbGVtZW50IG1hdGNoaW5nIHRoZSBmb3JtIGVsZW1lbnRzIG5hbWVcbiAgICovXG4gIHB1YmxpYyBnZXRUYXJnZXRUeXBlRWxlbWVudEJ5TmFtZShmb3JtRWxlbWVudE5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBtYXRjaDtcbiAgICB3aGlsZSAoIW1hdGNoICYmIGkgPCB0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCkge1xuICAgICAgbWF0Y2ggPSB0aGlzLnF1ZXJ5LnR5cGVzW2ldLmVsZW1lbnRzLmZpbmQoKGVsZW1lbnQpID0+IGVsZW1lbnQucW5hbWUgPT09IGZvcm1FbGVtZW50TmFtZSk7XG4gICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiBtYXRjaDtcbiAgfVxufVxuIl19
391
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXNlYXJjaC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmstY29yZS9zZWFyY2gvYXBwLXNlYXJjaC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLElBQUksY0FBYyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDeEYsT0FBTyxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQ1MsV0FBVyxFQUFFLFdBQVcsRUFDRyxVQUFVLEVBQUUsS0FBSyxFQUMzRCxNQUFNLGNBQWMsQ0FBQzs7O0FBRXRCOzs7O0dBSUc7QUFFSCxNQUFNLE9BQU8sZ0JBQWdCO0lBMkIzQixZQUFvQixhQUE0QixFQUN0QyxZQUEwQixFQUMxQixNQUFxQjtRQUZYLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQ3RDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLFdBQU0sR0FBTixNQUFNLENBQWU7UUEzQnZCLFVBQUssR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBRTFCLGNBQVMsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzlCLGVBQVUsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBS3ZDLHlFQUF5RTtRQUN6RSxxSkFBcUo7UUFDckosb0dBQW9HO1FBQzVGLGdCQUFXLEdBQUcsSUFBSSxhQUFhLENBQWMsQ0FBQyxDQUFDLENBQUM7UUFDaEQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQWMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTdFLHlGQUF5RjtRQUN6Riw2RkFBNkY7UUFDN0YsdUJBQXVCO1FBQ2hCLFdBQU0sR0FBNEIsSUFBSSxDQUFDLFdB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S0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssZUFBZSxDQUFDLENBQUM7WUFDMUYsQ0FBQyxFQUFFLENBQUM7U0FDTDtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7NkdBdmFVLGdCQUFnQjtpSEFBaEIsZ0JBQWdCOzJGQUFoQixnQkFBZ0I7a0JBRDVCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2Zyb20gYXMgb2JzZXJ2YWJsZUZyb20sIEJlaGF2aW9yU3ViamVjdCwgUmVwbGF5U3ViamVjdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2dyb3VwQnksIHJlZHVjZSwgbWVyZ2VNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBTZWFyY2hGaWx0ZXIsIFNlYXJjaFF1ZXJ5LCBTZWFyY2hTdGF0ZSwgU3lzdGVtU2VydmljZSxcbiAgT2JqZWN0VHlwZSwgU2VhcmNoU2VydmljZSwgRXZlbnRTZXJ2aWNlLCBFbmFpb0V2ZW50LCBVdGlscywgUXVlcnlTY29wZVxufSBmcm9tICdAZW8tc2RrL2NvcmUnO1xuXG4vKipcbiAqIEFwcFNlYXJjaFNlcnZpY2UgaXMgdGhlIGFwcHMgbWFpbiBlbnRyeSBwb2ludCBmb3Igc2VhcmNoaW5nICh1c2VkIGJ5IHRoZSBhcHBCYXJTZWFyY2ggY29tcG9uZW50KS5cbiAqIEl0IHByb3ZpZGVzIGFuIGBxdWVyeSRgIG9ic2VydmFibGUgY29tcG9uZW50cyBjYW4gc3Vic2NyaWJlIHRvLCB0b1xuICogc3RheSBpbiB0b3VjaCB3aXRoIHVwZGF0ZXMgdG8gdGhlIHF1ZXJ5LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXBwU2VhcmNoU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBxdWVyeSA9IG5ldyBTZWFyY2hRdWVyeSgpO1xuICBwcml2YXRlIGFnZ3M6IGFueTtcbiAgcHJpdmF0ZSBsYXN0UXVlcnkgPSBuZXcgU2VhcmNoUXVlcnkoKTtcbiAgcHJpdmF0ZSBxdWVyeVN0YXRlID0gbmV3IFNlYXJjaFN0YXRlKCk7XG4gIC8vIEhvbGRzIHRoZSBsYXN0IGFnZ3JlZ2F0aW9uIHByb3BlcnRpZXMgc2VudCB0byB0aGUgc2VydmVyXG4gIC8vIFVzZWQgZm9yIHByZXZlbnRpbmcgcmVkdW5kYW50IGNhbGxzXG4gIHByaXZhdGUgbGFzdEFnZ0NhbGxDb21wYXJhdG9yOiBzdHJpbmc7XG5cbiAgLy8gU3ViamVjdCBob2xkaW5nIHRoZSBjdXJyZW50IHF1ZXJ5IChpbml0aWFsIHZhbHVlIGlzIGEgbmV3IFNlYXJjaFF1ZXJ5KVxuICAvLyBAc2VlOiBodHRwOi8vYmxvZy5hbmd1bGFyLXVuaXZlcnNpdHkuaW8vaG93LXRvLWJ1aWxkLWFuZ3VsYXIyLWFwcHMtdXNpbmctcnhqcy1vYnNlcnZhYmxlLWRhdGEtc2VydmljZXMtcGl0ZmFsbHMtdG8tYXZvaWQvI3J4anNzdWJqZWN0YW5kaG93dG91c2VpdFxuICAvLyB0b2RvOiBtYXliZSBhZGQgc3VwcG9ydCBmb3IgaG9sZGluZyBhIHF1ZXJ5IGhpc3RvcnksIHNvIHRoZSB1c2VyIGNhbiByZWxvYWQgb2xkZXIgcXVlcmllcyBhcyB3ZWxsXG4gIHByaXZhdGUgcXVlcnlTb3VyY2UgPSBuZXcgUmVwbGF5U3ViamVjdDxTZWFyY2hRdWVyeT4oMSk7XG4gIHByaXZhdGUgcXVlcnlTdGF0ZVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VhcmNoU3RhdGU+KHRoaXMucXVlcnlTdGF0ZSk7XG5cbiAgLy8gRXhwb3NlIGFuIG9ic2VydmFibGUgaW5zdGVhZCBvZiB0aGUgc3ViamVjdCBpdHNlbGYgdG8gcHJldmVudCB0aGUgc2VydmljZSBjbGllbnRzIGZyb21cbiAgLy8gdGhlbXNlbHZlcyBlbWl0dGluZyBzdG9yZSB2YWx1ZXMgZGlyZWN0bHkgaW5zdGVhZCBvZiBjYWxsaW5nIGFjdGlvbiBtZXRob2RzLCBhbmQgdGhlcmVmb3JlXG4gIC8vIGJ5cGFzc2luZyB0aGUgc3RvcmUuXG4gIHB1YmxpYyBxdWVyeSQ6IE9ic2VydmFibGU8U2VhcmNoUXVlcnk+ID0gdGhpcy5xdWVyeVNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgLy8gU2VhcmNoIHNlcnZpY2UgYWxzbyBleHBvc2VzIGFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgcXVlcnkuXG4gIC8vIFdlIHNlcGFyYXRlIHRoZSBzdGF0ZSBvZiB0aGUgcXVlcnkgZnJvbSB0aGUgcXVlcnkgaXRzZWxmIGFzIG90aGVyd2lzZSBjaGFuZ2hpbmcgdGhlIHF1ZXJpZXNcbiAgLy8gc3RhdGUgd2lsbCB0cmlnZ2VyIGFsbCBzdWJzY3JpYmVycyBvZiB0aGUgcXVlcnkgb2JzZXJ2YWxlIGFuZCBsZWFkIHRvIHVuZGVzaXJlZCBiZWhhdmlvdXJcbiAgcHVibGljIHF1ZXJ5U3RhdGUkOiBPYnNlcnZhYmxlPFNlYXJjaFN0YXRlPiA9IHRoaXMucXVlcnlTdGF0ZVNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgcHVibGljIG9iamVjdFR5cGVHcm91cHMgPSBbXTtcbiAgcHVibGljIHR5cGVzQWxsb3dlZFVuZGVyU3lzcm9vdCA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VhcmNoU2VydmljZTogU2VhcmNoU2VydmljZSxcbiAgICBwcml2YXRlIGV2ZW50U2VydmljZTogRXZlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3lzdGVtOiBTeXN0ZW1TZXJ2aWNlKSB7XG5cbiAgICB0aGlzLnNldERlZmF1bHRBZ2dzKCk7XG4gICAgdGhpcy5ldmVudFNlcnZpY2Uub24oRW5haW9FdmVudC5MT0dPVVQpXG4gICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMucXVlcnlTb3VyY2UubmV4dCh0aGlzLnF1ZXJ5KTtcblxuICAgIC8vIEZldGNoIG9iamVjdCB0eXBlcyBhbmQgZ3JvdXBzIHRoYXQgc2VydmUgYXMgc2VhcmNoIGZpbHRlciBwYXJhbXMuXG4gICAgLy8gVGhlc2UgZ3JvdXBzIGFyZSBwcm92aWRlZCB0aHJvdWdoIHRoZSBzZXJ2aWNlcyBgb2JqZWN0VHlwZUdyb3Vwc2AgcHJvcGVydHkuXG4gICAgdGhpcy5zeXN0ZW0uc3lzdGVtJC5zdWJzY3JpYmUoKHN5c3RlbURlZmluaXRpb24pID0+IHtcblxuICAgICAgdGhpcy50eXBlc0FsbG93ZWRVbmRlclN5c3Jvb3QgPSBzeXN0ZW1EZWZpbml0aW9uLnR5cGVzLmZpbHRlcih0eXBlID0+IHR5cGUucGFyZW50dHlwZXMuaW5jbHVkZXMoJ3N5c3Jvb3QnKSk7XG5cbiAgICAgIGxldCBncm91cHMgPSBbXTtcbiAgICAgIG9ic2VydmFibGVGcm9tKHN5c3RlbURlZmluaXRpb24udHlwZXMpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGdyb3VwQnkoKHR5cGU6IGFueSkgPT4gdHlwZS5ncm91cCB8fCAnMCcpLFxuICAgICAgICAgIG1lcmdlTWFwKGcgPT4gZy5waXBlKHJlZHVjZSgoYWNjLCBjdXJyKSA9PiBbLi4uYWNjLCBjdXJyXSwgW10pKSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKG90ZyA9PiB7XG4gICAgICAgICAgZ3JvdXBzLnB1c2goe1xuICAgICAgICAgICAgbGFiZWw6IG90Z1swXS5ncm91cCB8fCAnMCcsXG4gICAgICAgICAgICB0eXBlczogdGhpcy5zb3J0T2JqZWN0VHlwZUdyb3VwKG90ZylcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB0aGlzLm9iamVjdFR5cGVHcm91cHMgPSBncm91cHMuc29ydChVdGlscy5zb3J0VmFsdWVzKCdsYWJlbCcpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlc2V0QWdncygpIHtcbiAgICB0aGlzLnNldERlZmF1bHRBZ2dzKCk7XG4gICAgdGhpcy5sYXN0QWdnQ2FsbENvbXBhcmF0b3IgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREZWZhdWx0QWdncygpIHtcbiAgICB0aGlzLmFnZ3MgPSB7XG4gICAgICB0eXBlOiB7fSxcbiAgICAgIG1pbWV0eXBlZ3JvdXA6IHt9LFxuICAgICAgZmlsZXNpemU6IHt9LFxuICAgICAgY3JlYXRlZDoge30sXG4gICAgICBtb2RpZmllZDoge30sXG5cbiAgICB9O1xuICB9XG5cbiAgLy8gaGVscGVyIG1ldGhvZCBmb3Igc29ydGluZyB0aGUgZW50cmllcyBvZiBhbiBvYmplY3QgdHlwZSBncm91cFxuICBwcml2YXRlIHNvcnRPYmplY3RUeXBlR3JvdXAodHlwZXMpIHtcbiAgICByZXR1cm4gdHlwZXMuc29ydCgoYSwgYikgPT4ge1xuXG4gICAgICBpZiAoYS5pc0NvbnRleHRGb2xkZXIgJiYgIWIuaXNDb250ZXh0Rm9sZGVyKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIGlmICghYS5pc0NvbnRleHRGb2xkZXIgJiYgYi5pc0NvbnRleHRGb2xkZXIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICBpZiAoYS5pc0ZvbGRlciAmJiAhYi5pc0ZvbGRlcikge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBpZiAoIWEuaXNGb2xkZXIgJiYgYi5pc0ZvbGRlcikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICAgIGlmIChhLmlzRm9sZGVyICYmIGIuaXNGb2xkZXIpIHtcbiAgICAgICAgcmV0dXJuIFV0aWxzLnNvcnRWYWx1ZXMoJ2xhYmVsJykuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBVdGlscy5zb3J0VmFsdWVzKCdsYWJlbCcpLmNhbGwodGhpcywgYSwgYik7XG4gICAgfSk7XG4gIH1cblxuICAvLyBFeHRlbmRzIHRoZSBvYmplY3RUeXBlc0dyb3VwcyBieSB0aGUgZWxlbWVudHMgZm9yIGVhY2ggb2JqZWN0IHR5cGVcbiAgLy8gVXNlZCBpbiBleHBlcnQgc2VhcmNoIG1vZGVcbiAgcHVibGljIGJ1aWxkVHlwZUdyb3VwVHJlZSgpIHtcblxuICAgIGxldCBnVHJlZSA9IFtdO1xuICAgIGxldCBpID0gMDtcbiAgICBmb3IgKGxldCBncm91cCBvZiB0aGlzLm9iamVjdFR5cGVHcm91cHMpIHtcbiAgICAgIGxldCBnID0ge1xuICAgICAgICBpZDogaSsrLFxuICAgICAgICBsYWJlbDogZ3JvdXAubGFiZWwsXG4gICAgICAgIHRyZWU6IFtdXG4gICAgICB9O1xuICAgICAgbGV0IHR5cGVzID0gW107XG4gICAgICBmb3IgKGxldCBvYmplY3RUeXBlIG9mIGdyb3VwLnR5cGVzKSB7XG5cbiAgICAgICAgbGV0IHQgPSB7XG4gICAgICAgICAgaWQ6IG9iamVjdFR5cGUuaWQsXG4gICAgICAgICAgbGFiZWw6IG9iamVjdFR5cGUubGFiZWwsXG4gICAgICAgICAgY2hpbGRyZW46IFtdXG4gICAgICAgIH07XG4gICAgICAgIGxldCBjaGlsZHJlbiA9IFtdO1xuICAgICAgICBmb3IgKGxldCBlbCBvZiBvYmplY3RUeXBlLmVsZW1lbnRzKSB7XG4gICAgICAgICAgY2hpbGRyZW4ucHVzaCh7XG4gICAgICAgICAgICBsYWJlbDogZWwubGFiZWwsXG4gICAgICAgICAgICB0eXBlOiBlbC50eXBlLFxuICAgICAgICAgICAgZGF0YTogZWwucW5hbWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzb3J0IGJ5IGxhYmVsXG4gICAgICAgIHQuY2hpbGRyZW4gPSBjaGlsZHJlbi5zb3J0KFV0aWxzLnNvcnRWYWx1ZXMoJ2xhYmVsJykpO1xuICAgICAgICB0eXBlcy5wdXNoKHQpO1xuICAgICAgfVxuICAgICAgZy50cmVlID0gdHlwZXMuc29ydChVdGlscy5zb3J0VmFsdWVzKCdsYWJlbCcpKTtcblxuXG4gICAgICBnVHJlZS5wdXNoKGcpO1xuICAgIH1cbiAgICByZXR1cm4gZ1RyZWU7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIGN1cnJlbnQgcXVlcnkgYnkgYSBkaWZmZXJlbnQgb25lLlxuICAgKiBUaGlzIGNvdWxkIGJlIGRvbmUgYnkgZm9yIGV4YW1wbGUgbG9hZGluZyBhIHN0b3JlZCBxdWVyeS5cbiAgICpcbiAgICogQHBhcmFtIHF1ZXJ5IC0gdGhlIHF1ZXJ5IHRoYXQgc2hvdWxkIHJlcGxhY2UgdGhlIGN1cnJlbnQgcXVlcnksIHRoaXMgbWF5IGJlIGVpdGhlciBhIFNlYXJjaFF1ZXJ5IGluc3RhbmNlLFxuICAgKiBhIEpTT04gc3RyaW5nIG9mIGFuIG9iamVjdCBtYXRjaGluZyB0aGUgc2VhcmNoIGFwaVxuICAgKi9cbiAgcHVibGljIHNldFF1ZXJ5KHF1ZXJ5OiBTZWFyY2hRdWVyeSkge1xuICAgIGlmICh0aGlzLmlzTmV3UXVlcnkocXVlcnkpKSB7XG4gICAgICB0aGlzLnNldERlZmF1bHRBZ2dzKCk7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnk7XG4gICAgICB0aGlzLnF1ZXJ5U291cmNlLm5leHQodGhpcy5xdWVyeSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgY3VycmVudCBxdWVyeS5cbiAgICovXG4gIHB1YmxpYyBjbGVhclF1ZXJ5KCkge1xuICAgIHRoaXMuc2V0UXVlcnkobmV3IFNlYXJjaFF1ZXJ5KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc05ld1F1ZXJ5KHF1ZXJ5OiBTZWFyY2hRdWVyeSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShxdWVyeS5nZXRRdWVyeUpzb24oKSkgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMucXVlcnkuZ2V0UXVlcnlKc29uKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIHRvZ2dsZXMgdGhlIHNlYXJjaG1vZGUgZnJvbSByZWd1bGFyIHNlYXJjaCB0byBleHBlcnQgc2VhcmNoIGFuZCB2aWNlIHZlcnNhXG4gICAqL1xuICBwdWJsaWMgdG9nZ2xlRXhwZXJ0TW9kZSgpIHtcbiAgICBpZiAoIXRoaXMucXVlcnkuZXhwZXJ0TW9kZSkge1xuICAgICAgdGhpcy5sYXN0UXVlcnkgPSB0aGlzLnF1ZXJ5O1xuICAgICAgdGhpcy5zZXREZWZhdWx0QWdncygpO1xuICAgICAgdGhpcy5xdWVyeSA9IG5ldyBTZWFyY2hRdWVyeSgpO1xuICAgICAgdGhpcy5xdWVyeS5leHBlcnRNb2RlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWVyeSA9IHRoaXMubGFzdFF1ZXJ5O1xuICAgIH1cbiAgICB0aGlzLnF1ZXJ5Ll9fdXBkYXRlQ2F1c2UgPSBTZWFyY2hRdWVyeS5VUERBVEVfQ0FVU0UuVE9HR0xFRF9FWFBFUlRNT0RFO1xuICAgIHRoaXMucXVlcnlTb3VyY2UubmV4dCh0aGlzLnF1ZXJ5KTtcbiAgICB0aGlzLmFnZ3JlZ2F0ZSgpO1xuXG4gIH1cblxuICBwdWJsaWMgc2V0VGVybSh0ZXJtOiBzdHJpbmcpIHtcbiAgICB0aGlzLnF1ZXJ5LnRlcm0gPSB0ZXJtO1xuICAgIHRoaXMucXVlcnkuX191cGRhdGVDYXVzZSA9IFNlYXJjaFF1ZXJ5LlVQREFURV9DQVVTRS5URVJNX1NFVDtcbiAgICB0aGlzLnF1ZXJ5U291cmNlLm5leHQodGhpcy5xdWVyeSk7XG4gICAgdGhpcy5hZ2dyZWdhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRRdWVyeVNjb3BlKHNjb3BlOiBRdWVyeVNjb3BlKSB7XG4gICAgdGhpcy5xdWVyeS5zY29wZSA9IHNjb3BlO1xuICAgIHRoaXMucXVlcnlTb3VyY2UubmV4dCh0aGlzLnF1ZXJ5KTtcbiAgICB0aGlzLmFnZ3JlZ2F0ZSgpO1xuICB9XG5cbiAgLy8gc2V0IGFnZ3JlZ2F0aW9uIHByb3BlcnRpZXMgdG8gYmUgYXBwbGllZCB0byBPTkxZIGFnZ3JlZ2F0ZSBzZWFyY2ggcXVlcmllc1xuICBwdWJsaWMgc2V0QWdncyhhZ2dzOiBhbnksIGV4dGVuZCA9IGZhbHNlKSB7XG4gICAgdGhpcy5hZ2dzID0gZXh0ZW5kID8gey4uLnRoaXMuYWdncywgLi4uYWdnc30gOiBhZ2dzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgYSB0eXBlIGZpbHRlci5cbiAgICogQHBhcmFtIHR5cGUgLSBvYmplY3QgdHlwZVxuICAgKi9cbiAgcHVibGljIHRvZ2dsZVF1ZXJ5VHlwZSh0eXBlOiBPYmplY3RUeXBlKSB7XG4gICAgdGhpcy5xdWVyeS50b2dnbGVUeXBlKHR5cGUpO1xuICAgIHRoaXMucXVlcnkuX191cGRhdGVDYXVzZSA9IFNlYXJjaFF1ZXJ5LlVQREFURV9DQVVTRS5UT0dHTEVEX1RZUEU7XG4gICAgdGhpcy5xdWVyeVNvdXJjZS5uZXh0KHRoaXMucXVlcnkpO1xuICAgIHRoaXMuYWdncmVnYXRlKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLlRZUEUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHF1ZXJpZXMgdGFyZ2V0IHR5cGVzLlxuICAgKlxuICAgKiBAcGFyYW0gdHlwZXMgLSBhcnJheSBvZiBPYmplY3RUeXBlc1xuICAgKiBAcGFyYW0gc2lsZW50IElmIHNldCB0byB0cnVlIGFnZ3JlZ2F0ZSB3b24ndCBiZSBjYWxsZWRcbiAgICovXG4gIHB1YmxpYyBzZXRRdWVyeVR5cGVzKHR5cGVzOiBPYmplY3RUeXBlW10sIHNpbGVudD86IGJvb2xlYW4pIHtcbiAgICB0aGlzLnF1ZXJ5LnR5cGVzID0gdHlwZXM7XG4gICAgdGhpcy5hZ2dzID0ge1xuICAgICAgdHlwZToge1xuICAgICAgICBzdWI6IHtcbiAgICAgICAgICBjb250ZXh0Zm9sZGVydHlwZToge31cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5xdWVyeS5fX3VwZGF0ZUNhdXNlID0gU2VhcmNoUXVlcnkuVVBEQVRFX0NBVVNFLlRZUEVTX1NFVDtcbiAgICB0aGlzLnF1ZXJ5U291cmNlLm5leHQodGhpcy5xdWVyeSk7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIHRoaXMuYWdncmVnYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHF1ZXJpZXMgdGFyZ2V0IGNvbnRleHQgdHlwZS5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgVGhlIGNvbnRleHQgdHlwZSB0byBiZSBzZXQgb3IgbnVsbCBmb3IgcmVzZXR0aW5nXG4gICAqIEBwYXJhbSBzaWxlbnQgSWYgc2V0IHRvIHRydWUgYWdncmVnYXRlIHdvbid0IGJlIGNhbGxlZFxuICAgKi9cbiAgcHVibGljIHNldENvbnRleHRUeXBlKHR5cGU6IE9iamVjdFR5cGUsIHNpbGVudD86IGJvb2xlYW4pIHtcblxuICAgIGlmICh0aGlzLnF1ZXJ5LmNvbnRleHRGb2xkZXJUeXBlcy5sZW5ndGggJiYgIXR5cGUpIHtcbiAgICAgIC8vIGNsZWFyIGNvbnRleHQgZm9sZGVyXG4gICAgICB0aGlzLmVtaXROZXdDb250ZXh0Rm9sZGVyVHlwZShudWxsKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucXVlcnkuY29udGV4dEZvbGRlclR5cGVzLmxlbmd0aCAmJiB0eXBlLm5hbWUgIT09IHRoaXMucXVlcnkuY29udGV4dEZvbGRlclR5cGVzWzBdLm5hbWUpIHtcbiAgICAgIC8vIGdvdCBhIHR5cGUgdG8gYmUgc2V0IHVwIHRoYXQgZGlmZmVycyBmcm9tIHRoZSBjdXJyZW50IG9uZVxuICAgICAgdGhpcy5lbWl0TmV3Q29udGV4dEZvbGRlclR5cGUodHlwZSk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMubGVuZ3RoKSB7XG4gICAgICAvLyBub3RoaW5nIHNldCB1cCBzbyBmYXJcbiAgICAgIHRoaXMuZW1pdE5ld0NvbnRleHRGb2xkZXJUeXBlKHR5cGUpO1xuICAgIH1cbiAgICAvLyB0cnlpbmcgdG8gc2V0dXAgdGhlIHNhbWUgdHlwZSBhcyB0aGUgY3VycmVudCBvbiBzaG91bGQgbm90IGVtaXQgYSBuZXcgdmFsdWVcbiAgfVxuXG4gIHByaXZhdGUgZW1pdE5ld0NvbnRleHRGb2xkZXJUeXBlKHR5cGUsIHNpbGVudD86IGJvb2xlYW4pIHtcbiAgICBpZiAoIXR5cGUgJiYgdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYWdncyA9IHtcbiAgICAgIHR5cGU6IHtcbiAgICAgICAgc3ViOiB7XG4gICAgICAgICAgY29udGV4dGZvbGRlcnR5cGU6IHt9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMucXVlcnkuY29udGV4dEZvbGRlclR5cGVzID0gdHlwZSA/IFt0eXBlXSA6IFtdO1xuICAgIHRoaXMucXVlcnkuX191cGRhdGVDYXVzZSA9IFNlYXJjaFF1ZXJ5LlVQREFURV9DQVVTRS5DT05URVhUX0ZPTERFUl9TRVQ7XG4gICAgdGhpcy5xdWVyeVNvdXJjZS5uZXh0KHRoaXMucXVlcnkpO1xuICAgIGlmICghc2lsZW50KSB7XG4gICAgICB0aGlzLmFnZ3JlZ2F0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIGEgY3JlYXRlZCBmaWx0ZXIuXG4gICAqIEBwYXJhbSBmaWx0ZXIgLSB0aGUgZmlsdGVyIHRvIGJlIHRvZ2dsZWRcbiAgICovXG4gIHB1YmxpYyB0b2dnbGVRdWVyeUZpbHRlcihmaWx0ZXI6IFNlYXJjaEZpbHRlciwgb3ZlcnJpZGU/OiBib29sZWFuKSB7XG4gICAgdGhpcy5xdWVyeS50b2dnbGVGaWx0ZXIoZmlsdGVyLCBvdmVycmlkZSk7XG4gICAgdGhpcy5xdWVyeS5fX3VwZGF0ZUNhdXNlID0gU2VhcmNoUXVlcnkuVVBEQVRFX0NBVVNFLlRPR0dMRURfRklMVEVSO1xuICAgIHRoaXMucXVlcnlTb3VyY2UubmV4dCh0aGlzLnF1ZXJ5KTtcbiAgICB0aGlzLmFnZ3JlZ2F0ZShmaWx0ZXIucHJvcGVydHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgY3JlYXRlZCBmaWx0ZXJzIGFuZCBhZ2dyZWdhdGVzIHRoZW0gdG9nZXRoZXIuXG4gICAqIEBwYXJhbSBmaWx0ZXJzIC0gdGhlIGZpbHRlcnMgdG8gYmUgdG9nZ2xlZFxuICAgKi9cbiAgcHVibGljIHRvZ2dsZVF1ZXJ5RmlsdGVycyhmaWx0ZXJzOiBTZWFyY2hGaWx0ZXJbXSwgb3ZlcnJpZGU/OiBib29sZWFuKSB7XG4gICAgbGV0IGJhc2VQYXJhbSA9ICcnO1xuICAgIGZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgdGhpcy5xdWVyeS50b2dnbGVGaWx0ZXIoZmlsdGVyLCBvdmVycmlkZSk7XG4gICAgICB0aGlzLnF1ZXJ5Ll9fdXBkYXRlQ2F1c2UgPSBTZWFyY2hRdWVyeS5VUERBVEVfQ0FVU0UuVE9HR0xFRF9GSUxURVI7XG4gICAgICBiYXNlUGFyYW0gKz0gZmlsdGVyLnByb3BlcnR5ICsgJyAnO1xuICAgIH0pO1xuXG4gICAgdGhpcy5xdWVyeVNvdXJjZS5uZXh0KHRoaXMucXVlcnkpO1xuICAgIHRoaXMuYWdncmVnYXRlKGJhc2VQYXJhbS50cmltKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBmaWx0ZXIgdG8gdGhlIHF1ZXJ5LlxuICAgKiBAcGFyYW0gZmlsdGVyIC0gdGhlIGZpbHRlciB0byBiZSBhZGRlZFxuICAgKi9cbiAgcHVibGljIGFkZFF1ZXJ5RmlsdGVyKGZpbHRlcjogU2VhcmNoRmlsdGVyKSB7XG4gICAgdGhpcy5xdWVyeS5hZGRGaWx0ZXIoZmlsdGVyKTtcbiAgICB0aGlzLnF1ZXJ5Ll9fdXBkYXRlQ2F1c2UgPSBTZWFyY2hRdWVyeS5VUERBVEVfQ0FVU0UuQURERURfRklMVEVSO1xuICAgIHRoaXMucXVlcnlTb3VyY2UubmV4dCh0aGlzLnF1ZXJ5KTtcbiAgICB0aGlzLmFnZ3JlZ2F0ZShmaWx0ZXIucHJvcGVydHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBmaWx0ZXIgdG8gdGhlIHF1ZXJ5LlxuICAgKiBAcGFyYW0gZmlsdGVyIC0gdGhlIGZpbHRlciB0byBiZSByZW1vdmVkXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlUXVlcnlGaWx0ZXIoZmlsdGVyOiBTZWFyY2hGaWx0ZXIpIHtcbiAgICB0aGlzLnF1ZXJ5LnJlbW92ZUZpbHRlcihmaWx0ZXIucHJvcGVydHkpO1xuICAgIHRoaXMucXVlcnkuX191cGRhdGVDYXVzZSA9IFNlYXJjaFF1ZXJ5LlVQREFURV9DQVVTRS5SRU1PVkVEX0ZJTFRFUjtcbiAgICB0aGlzLnF1ZXJ5U291cmNlLm5leHQodGhpcy5xdWVyeSk7XG4gICAgdGhpcy5hZ2dyZWdhdGUoZmlsdGVyLnByb3BlcnR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBmaWx0ZXJzIGZvciBhbiBpbmRleGRhdGEgc2VhcmNoLlxuICAgKiBTZXR0aW5nIHRoZW0gd2lsbCBhbHNvIHJlbW92ZSBhbGwgaW5kZXhkYXRhIGZpbHRlcnMgc2V0IGJlZm9yZS5cbiAgICpcbiAgICogQHBhcmFtIGZpbHRlcnMgLSB0aGUgZmlsdGVycyB0byBiZSBzZXRcbiAgICogQHBhcmFtIHNpbGVudCBJZiBzZXQgdG8gdHJ1ZSBhZ2dyZWdhdGUgd29uJ3QgYmUgY2FsbGVkXG4gICAqL1xuICBwdWJsaWMgc2V0SW5kZXhTZWFyY2hRdWVyeUZpbHRlcnMoZmlsdGVyczogU2VhcmNoRmlsdGVyW10sIHNpbGVudD86IGJvb2xlYW4pIHtcblxuICAgIC8vIHJlbW92ZSBwcmV2aW91cyBmaWx0ZXJzIChhbGwgZmlsdGVycyB0aGF0IGFyZSBub3QgYmFzZXBhcmFtIGZpbHRlcnMpXG4gICAgdGhpcy5xdWVyeS5maWx0ZXJzID0gdGhpcy5xdWVyeS5maWx0ZXJzLmZpbHRlcigoZikgPT4gdGhpcy5pc0Jhc2VQYXJhbUZpbHRlcihmKSk7XG4gICAgZm9yIChsZXQgZiBvZiBmaWx0ZXJzKSB7XG4gICAgICB0aGlzLnF1ZXJ5LmFkZEZpbHRlcihmKTtcbiAgICB9XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIHRoaXMuYWdncmVnYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldEluZGV4U2VhcmNoUXVlcnlGaWx0ZXJzKHF1ZXJ5PzogU2VhcmNoUXVlcnkpOiBTZWFyY2hGaWx0ZXJbXSB7XG4gICAgbGV0IHEgPSBxdWVyeSB8fCB0aGlzLnF1ZXJ5O1xuICAgIHJldHVybiBxLmZpbHRlcnMuZmlsdGVyKChmKSA9PiAhdGhpcy5pc0Jhc2VQYXJhbUZpbHRlcihmKSk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGUgcHJvdmlkZWQgc2VhcmNoIGZpbHRlciBiZWxvbmdzIHRvIGEgYmFzZSBwYXJhbS5cbiAgICpcbiAgICogQHBhcmFtIGZpbHRlciAtIHRoZSBmaWx0ZXIgdG8gYmUgY2hlY2tlZFxuICAgKi9cbiAgcHVibGljIGlzQmFzZVBhcmFtRmlsdGVyKGZpbHRlcjogU2VhcmNoRmlsdGVyKTogYm9vbGVhbiB7XG4gICAgLy9yZXR1cm4gT2JqZWN0LnZhbHVlcyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUykuc29tZSgoYnApID0+IGZpbHRlci5wcm9wZXJ0eSA9PT0gYnApO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUykuc29tZSgoYnBLZXkpID0+IGZpbHRlci5wcm9wZXJ0eSA9PT0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVNbYnBLZXldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgY3VycmVudCBxdWVyeSBhcyBhZ2dyZWdhdGUgc2VhcmNoXG4gICAqL1xuICBwdWJsaWMgYWdncmVnYXRlKGJhc2VQYXJhbSA9ICcnKSB7XG5cbiAgICBjb25zdCBhZ2dRdWVyeSA9IHthZ2dzOiB0aGlzLmFnZ3MsIC4uLnRoaXMucXVlcnkuZ2V0UXVlcnlKc29uKCl9O1xuICAgIC8vIGNvbXBhcmUgdGhlIGNhbGwgdG8gYmUgbWFkZSB3aXRoIGEgZm9ybWVyIHJlcXVlc3RcbiAgICBpZiAodGhpcy5sYXN0QWdnQ2FsbENvbXBhcmF0b3IgIT09IEpTT04uc3RyaW5naWZ5KGFnZ1F1ZXJ5KSkge1xuICAgICAgdGhpcy5sYXN0QWdnQ2FsbENvbXBhcmF0b3IgPSBKU09OLnN0cmluZ2lmeShhZ2dRdWVyeSk7XG4gICAgICB0aGlzLmdldFNlYXJjaFN0YXRlKGFnZ1F1ZXJ5KVxuICAgICAgICAuc3Vic2NyaWJlKChxdWVyeVN0YXRlOiBTZWFyY2hTdGF0ZSkgPT4ge1xuICAgICAgICAgIHF1ZXJ5U3RhdGUubGFzdENoYW5nZSA9IGJhc2VQYXJhbTtcbiAgICAgICAgICB0aGlzLnF1ZXJ5U3RhdGUgPSBxdWVyeVN0YXRlO1xuICAgICAgICAgIHRoaXMucXVlcnlTdGF0ZVNvdXJjZS5uZXh0KHRoaXMucXVlcnlTdGF0ZSk7XG4gICAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgcXVlcnlcbiAgICovXG4gIHB1YmxpYyByZXNldChzaWxlbnQ/OiBib29sZWFuKSB7XG4gICAgdGhpcy5xdWVyeSA9IG5ldyBTZWFyY2hRdWVyeSgpO1xuICAgIHRoaXMuc2V0RGVmYXVsdEFnZ3MoKTtcbiAgICB0aGlzLnF1ZXJ5U291cmNlLm5leHQodGhpcy5xdWVyeSk7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIHRoaXMuYWdncmVnYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgZXhpdEluZGV4ZGF0YVNlYXJjaCgpIHtcbiAgICB0aGlzLnNldEluZGV4U2VhcmNoUXVlcnlGaWx0ZXJzKFtdLCB0cnVlKTtcbiAgICB0aGlzLnNldFF1ZXJ5VHlwZXMoW10sIHRydWUpO1xuICAgIHRoaXMuc2V0Q29udGV4dFR5cGUobnVsbCwgdHJ1ZSk7XG4gICAgdGhpcy5hZ2dyZWdhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgY3VycmVudCBxdWVyeSBhcyBhZ2dyZWdhdGUgc2VhcmNoXG4gICAqL1xuICBwdWJsaWMgZ2V0U2VhcmNoU3RhdGUocXVlcnlKc29uOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLmdldFNlYXJjaFN0YXRlKHF1ZXJ5SnNvbik7XG4gIH1cblxuICBwdWJsaWMgYXV0b2NvbXBsZXRlKHRlcm06IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2UuYXV0b2NvbXBsZXRlKHRlcm0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBvYmplY3QgdHlwZSBlbGVtZW50IGluc2lkZSBvZiB0aGUgcXVlcmllcyB0YXJnZXQgdHlwZXNcbiAgICogZm9yIGEgZm9ybSBlbGVtZW50cyBuYW1lLiBVc2VkIGUuZy4gZm9yIHRoZSBzZWFyY2ggc3VtbWFyeSBwYW5lbC5cbiAgICpcbiAgICogQHBhcmFtIGZvcm1FbGVtZW50TmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBmb3JtIGVsZW1lbnRcbiAgICogQHJldHVybiB0aGUgb2JqZWN0IHR5cGUgZWxlbWVudCBtYXRjaGluZyB0aGUgZm9ybSBlbGVtZW50cyBuYW1lXG4gICAqL1xuICBwdWJsaWMgZ2V0VGFyZ2V0VHlwZUVsZW1lbnRCeU5hbWUoZm9ybUVsZW1lbnROYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgbWF0Y2g7XG4gICAgd2hpbGUgKCFtYXRjaCAmJiBpIDwgdGhpcy5xdWVyeS50eXBlcy5sZW5ndGgpIHtcbiAgICAgIG1hdGNoID0gdGhpcy5xdWVyeS50eXBlc1tpXS5lbGVtZW50cy5maW5kKChlbGVtZW50KSA9PiBlbGVtZW50LnFuYW1lID09PSBmb3JtRWxlbWVudE5hbWUpO1xuICAgICAgaSsrO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cbn1cbiJdfQ==