@magic-xpa/angular 4.801.0-dev481.239 → 4.801.0-dev481.243

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.
@@ -1,7 +1,6 @@
1
1
  import { Injectable, Injector, NgModuleFactoryLoader } from '@angular/core';
2
2
  import { TaskMagicService } from './task.magics.service';
3
- import { List } from '@magic-xpa/mscorelib';
4
- import { isNullOrUndefined } from 'util';
3
+ import { List, isNullOrUndefined } from '@magic-xpa/mscorelib';
5
4
  import { ComponentListMagicService } from './component-list.magic.service';
6
5
  import { ActivatedRoute, Router } from '@angular/router';
7
6
  import { CommandsCollectorMagicService } from './commands-collector.magic.service';
@@ -179,4 +178,4 @@ SubformMagicService.ɵprov = i0.ɵɵdefineInjectable({ token: SubformMagicServic
179
178
  (function () { i0.ɵsetClassMetadata(SubformMagicService, [{
180
179
  type: Injectable
181
180
  }], function () { return [{ type: i1.TaskMagicService }, { type: i2.ActivatedRoute }, { type: i3.ComponentListMagicService }, { type: i4.CommandsCollectorMagicService }, { type: i2.Router }, { type: i5.RouterCommandsMagicService }, { type: i3.ComponentListMagicService }, { type: i0.NgModuleFactoryLoader }, { type: i0.Injector }]; }, null); })();
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViZm9ybS5tYWdpYy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvc2VydmljZXMvc3ViZm9ybS5tYWdpYy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBWSxVQUFVLEVBQUUsUUFBUSxFQUFtQixxQkFBcUIsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUNuSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXpDLE9BQU8sRUFBQyx5QkFBeUIsRUFBYSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFbkYsT0FBTyxFQUFnQiwwQkFBMEIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDOzs7Ozs7O0FBU3JHLE1BQU0sT0FBTyxtQkFBbUI7SUFVOUIsWUFBb0IsSUFBc0IsRUFDcEIsY0FBOEIsRUFDOUIsYUFBd0MsRUFDeEMsd0JBQXVELEVBQ3ZELE1BQWMsRUFDZCwwQkFBc0QsRUFDeEQseUJBQW9ELEVBQ3BELE1BQTZCLEVBQzdCLFFBQWtCO1FBUmxCLFNBQUksR0FBSixJQUFJLENBQWtCO1FBQ3BCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixrQkFBYSxHQUFiLGFBQWEsQ0FBMkI7UUFDeEMsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUErQjtRQUN2RCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUE0QjtRQUN4RCw4QkFBeUIsR0FBekIseUJBQXlCLENB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YWJsZSwgSW5qZWN0b3IsIE5nTW9kdWxlRmFjdG9yeSwgTmdNb2R1bGVGYWN0b3J5TG9hZGVyLCBOZ01vZHVsZVJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUYXNrTWFnaWNTZXJ2aWNlIH0gZnJvbSAnLi90YXNrLm1hZ2ljcy5zZXJ2aWNlJztcbmltcG9ydCB7IExpc3QgfSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XG5pbXBvcnQgeyBpc051bGxPclVuZGVmaW5lZCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHsgR3VpQ29tbWFuZCB9IGZyb20gJ0BtYWdpYy14cGEvZ3VpJztcbmltcG9ydCB7Q29tcG9uZW50TGlzdE1hZ2ljU2VydmljZSwgTW9kdWxlRGF0YX0gZnJvbSAnLi9jb21wb25lbnQtbGlzdC5tYWdpYy5zZXJ2aWNlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ29tbWFuZHNDb2xsZWN0b3JNYWdpY1NlcnZpY2UgfSBmcm9tICcuL2NvbW1hbmRzLWNvbGxlY3Rvci5tYWdpYy5zZXJ2aWNlJztcbmltcG9ydCB7IFJvdXRlRGVmaW5pdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvc3ViLWZvcm0tZGVmaW5pdGlvbi5pdGVyZmFjZSc7XG5pbXBvcnQgeyBSb3V0ZUNvbW1hbmQsIFJvdXRlckNvbW1hbmRzTWFnaWNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcm91dGVyLWNvbW1hbmRzLm1hZ2ljLnNlcnZpY2UnO1xuaW1wb3J0IHsgSVN1YmZvcm1NYWdpY1NlcnZpY2UgfSBmcm9tICcuL0lTdWJmb3JtTWFnaWNTZXJ2aWNlJztcbmltcG9ydCB7IFJvdXRlckNvbnRhaW5lck1hZ2ljQ29tcG9uZW50IH0gZnJvbSAnLi4vdWkvcm91dGVyLWNvbnRhaW5lci5tYWdpYy5jb21wb25lbnQnO1xuXG5cbi8qKlxuICogU2VydmljZSBmb3IgbWFuYWdpbmcgc3ViZm9ybXMgYW5kIHJvdXRpbmdcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFN1YmZvcm1NYWdpY1NlcnZpY2UgaW1wbGVtZW50cyBJU3ViZm9ybU1hZ2ljU2VydmljZXtcblxuICBzdWJmb3Jtc0RpY3QgLyo6eyBbeDogc3RyaW5nXTogU3ViZm9ybURlZmluaXRpb24gfSovID0ge307XG4gIHJvdXRlc0RpY3Q6IHsgW3g6IHN0cmluZ106IHN0cmluZyB9ID0ge307IC8vIGRpY3Rpb25hcnkgb2Ygcm91dGVyIG91dGxldCB0byByb3V0ZXIgcGF0aFxuICBjdXJyZW50Um91dGVEZWZpbml0aW9uOiBSb3V0ZURlZmluaXRpb24gPSBudWxsO1xuXG4gIHN0YXRpYyBjdXJyZW50Q2FsbGVyTWdTdWJmb3JtU2VydmljZVJlZjogYW55ID0gbnVsbDtcblxuICBzdGF0aWMgcm91dGVyQ29udGFpbmVyczogQXJyYXk8Um91dGVyQ29udGFpbmVyTWFnaWNDb21wb25lbnQ+ID0gbmV3IEFycmF5KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0YXNrOiBUYXNrTWFnaWNTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgY29tcG9uZW50TGlzdDogQ29tcG9uZW50TGlzdE1hZ2ljU2VydmljZSxcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIHBlbmRpbmdDb21tYW5kc0NvbGxlY3RvcjogQ29tbWFuZHNDb2xsZWN0b3JNYWdpY1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIHJvdXRlckNvbW1hbmRzTWFnaWNTZXJ2aWNlOiBSb3V0ZXJDb21tYW5kc01hZ2ljU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjb21wb25lbnRMaXN0TWFnaWNTZXJ2aWNlOiBDb21wb25lbnRMaXN0TWFnaWNTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIGxvYWRlcjogTmdNb2R1bGVGYWN0b3J5TG9hZGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3Rvcikge1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGFuZCByZXR1cm5zIHRoZSBjb21wb25lbnQgYWNjb3JkaW5nIHRvIHRoZSBzdWJmb3JtIG5hbWVcbiAgICogQHBhcmFtIHN1YmZvcm1OYW1lXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBtZ0dldENvbXAoc3ViZm9ybU5hbWU6IHN0cmluZyk6IENvbXBvbmVudCB7XG4gICAgaWYgKHN1YmZvcm1OYW1lIGluIHRoaXMuc3ViZm9ybXNEaWN0KSB7XG4gICAgICBsZXQgZm9ybU5hbWU6IHN0cmluZyA9IHRoaXMuc3ViZm9ybXNEaWN0W3N1YmZvcm1OYW1lXS5mb3JtTmFtZTtcbiAgICAgIGlmIChmb3JtTmFtZSlcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcG9uZW50TGlzdC5nZXRDb21wb25lbnQoZm9ybU5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSBzdWJmb3JtXG4gICAqIEBwYXJhbSBzdWJmb3JtTmFtZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgbWdHZXRQYXJhbWV0ZXJzKHN1YmZvcm1OYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmIChzdWJmb3JtTmFtZSBpbiB0aGlzLnN1YmZvcm1zRGljdCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3ViZm9ybXNEaWN0W3N1YmZvcm1OYW1lXS5wYXJhbWV0ZXJzO1xuICAgIH1cbiAgICBlbHNlXG4gICAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBkZWxldGVTdWJmb3JtQ29tcCAoc3ViZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcsIGZvcm1OYW1lOiBzdHJpbmcpICB7XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnN1YmZvcm1zRGljdCkuaW5kZXhPZihzdWJmb3JtQ29udHJvbE5hbWUpID49IDApXG4gICAgICB7XG4gICAgICAgIGlmICh0aGlzLnN1YmZvcm1zRGljdFtzdWJmb3JtQ29udHJvbE5hbWVdLmZvcm1OYW1lID09PSBmb3JtTmFtZSkge1xuXG4gICAgICAgIHRoaXMuc3ViZm9ybXNEaWN0W3N1YmZvcm1Db250cm9sTmFtZV0gPSB7fTtcbiAgICAgICAgdGhpcy50YXNrLnJlZnJlc2hWaWV3KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBhZGRTdWJmb3JtQ29tcCAoc3ViZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcsIGZvcm1OYW1lOiBzdHJpbmcsIHRhc2tJZDogc3RyaW5nLCB0YXNrRGVzY3JpcHRpb246IGFueSwgcm91dGVyUGF0aDogc3RyaW5nLCBwYXJhbXM6IExpc3Q8YW55PiwgaW5EZWZhdWx0T3V0bGV0OiBib29sZWFuKSAge1xuICAgIHRoaXMucGVuZGluZ0NvbW1hbmRzQ29sbGVjdG9yLnN0YXJ0Q29sbGVjdGluZygpO1xuXG4gICAgbGV0IHJlZnJlc2hOZWVkZWQgPSBmYWxzZTtcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQocm91dGVyUGF0aCkpIHsgLy8gY2FsbCBpbiBkZXN0aW5hdGlvbiBzdWJmb3JtXG4gICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5zdWJmb3Jtc0RpY3QpLmluZGV4T2Yoc3ViZm9ybUNvbnRyb2xOYW1lKSA+PSAwKVxuICAgICAge1xuICAgICAgICBpZiAodGhpcy5zdWJmb3Jtc0RpY3Rbc3ViZm9ybUNvbnRyb2xOYW1lXS5mb3JtTmFtZSA9PT0gZm9ybU5hbWUpIHtcblxuICAgICAgICAgIHRoaXMuc3ViZm9ybXNEaWN0W3N1YmZvcm1Db250cm9sTmFtZV0gPSB7fTtcbiAgICAgICAgICB0aGlzLnRhc2sucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBMb2FkIHRoZSBsYXp5IGxvYWQgbW9kdWxlLCBpZiBuZWVkZWRcbiAgICAgIGxldCBtb2R1bGVSZWY6IE5nTW9kdWxlUmVmPGFueT4gPSB0aGlzLmNvbXBvbmVudExpc3RNYWdpY1NlcnZpY2UuZ2V0TW9kdWxlUmVmKGZvcm1OYW1lKTtcblxuICAgICAgaWYgKG1vZHVsZVJlZiA9PSBudWxsKSB7XG4gICAgICAgIGxldCBsYXp5TG9hZE1vZHVsZTogTW9kdWxlRGF0YSA9IHRoaXMuY29tcG9uZW50TGlzdE1hZ2ljU2VydmljZS5nZXRMYXp5TG9hZE1vZHVsZURhdGEoZm9ybU5hbWUpO1xuXG4gICAgICAgIGlmIChsYXp5TG9hZE1vZHVsZSAhPSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5sb2FkZXJcbiAgICAgICAgICAgIC5sb2FkKGxhenlMb2FkTW9kdWxlLm1vZHVsZVBhdGggKyBcIiNcIiArIGxhenlMb2FkTW9kdWxlLm1vZHVsZU5hbWUpXG4gICAgICAgICAgICAudGhlbigobW9kdWxlRmFjdG9yeTogTmdNb2R1bGVGYWN0b3J5PGFueT4pID0+IHtcbiAgICAgICAgICAgICAgbW9kdWxlUmVmID0gbW9kdWxlRmFjdG9yeS5jcmVhdGUodGhpcy5pbmplY3Rvcik7XG4gICAgICAgICAgICAgIHRoaXMuc3ViZm9ybXNEaWN0W3N1YmZvcm1Db250cm9sTmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgZm9ybU5hbWUsXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyczoge3Rhc2tJZFBhcmFtOiB0YXNrSWQsIHRhc2tEZXNjcmlwdGlvbjogdGFza0Rlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB0aGlzLnRhc2sucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5zdWJmb3Jtc0RpY3Rbc3ViZm9ybUNvbnRyb2xOYW1lXSA9IHtcbiAgICAgICAgICBmb3JtTmFtZSxcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7dGFza0lkUGFyYW06IHRhc2tJZCwgdGFza0Rlc2NyaXB0aW9uOiB0YXNrRGVzY3JpcHRpb259XG4gICAgICAgIH07XG4gICAgICAgIC8vdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICByZWZyZXNoTmVlZGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7IC8vIGNhbGwgcm91dGVcbiAgICAgIGlmIChpbkRlZmF1bHRPdXRsZXQpXG4gICAgICAgIHN1YmZvcm1Db250cm9sTmFtZSA9IFwicHJpbWFyeVwiO1xuXG4gICAgICBsZXQgcm91dGVQYXJhbXM6IExpc3Q8YW55PiA9IG5ldyBMaXN0KCk7XG4gICAgICByb3V0ZVBhcmFtcy5wdXNoKHJvdXRlclBhdGgpO1xuICAgICAgaWYgKHBhcmFtcyAhPT0gbnVsbCkge1xuICAgICAgICByb3V0ZVBhcmFtcyA9IDxMaXN0PGFueT4+cm91dGVQYXJhbXMuY29uY2F0KHBhcmFtcyk7XG4gICAgICB9XG5cbiAgICAgIGxldCByb3V0ZUNvbW1hbmQ6IFJvdXRlQ29tbWFuZCA9IHtcbiAgICAgICAgY2FsbGVyTWdTdWJmb3JtU2VydmljZVJlZjogdGhpcyxcbiAgICAgICAgcm91dGVyT3V0bGV0TmFtZTogc3ViZm9ybUNvbnRyb2xOYW1lLFxuICAgICAgICBmb3JtTmFtZTogZm9ybU5hbWUsXG4gICAgICAgIHBhcmFtZXRlcnM6IHt0YXNrSWRQYXJhbTogdGFza0lkLCB0YXNrRGVzY3JpcHRpb246IHRhc2tEZXNjcmlwdGlvbn0sXG4gICAgICAgIHJvdXRlUGFyYW1zOiByb3V0ZVBhcmFtc1xuICAgICAgfTtcblxuICAgICAgLy8gSWYgU3ViZm9ybU1hZ2ljU2VydmljZS5jdXJyZW50Q2FsbGVyTWdTdWJmb3JtU2VydmljZVJlZiAhPT0gbnVsbCBtZWFucyB0aGF0IHJvdXRlci5uYXZpZ2F0ZSgpIGlzIGFscmVhZHlcbiAgICAgIC8vIGNhbGxlZCBvbmNlLCBidXQgYW5ndWxhciBoYXMgbm90IHlldCBleGVjdXRlZCBpdCAobmdPbkluaXQgb2YgdGhlIG5ldyBjb21wb25lbnQgaXMgbm90IGNhbGxlZCkuXG4gICAgICAvLyBJbiBzdWNoIGEgY2FzZSwgZG8gbm90IGV4ZWN1dGVkIHJvdXRlci5uYXZpZ2F0ZSgpIGFnYWluLiBCZWNhdXNlLCBhbmd1bGFyIGlnbm9yZXMgdGhlIHByZXZpb3VzIG9uZS5cbiAgICAgIC8vIFNvLCBwdXQgYSBjb21tYW5kIGluIHRoZSBxdWV1ZSB3aGljaCB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSBmaXJzdCBvbmUgaXMgZXhlY3V0ZWQuXG4gICAgaWYgKFN1YmZvcm1NYWdpY1NlcnZpY2UuY3VycmVudENhbGxlck1nU3ViZm9ybVNlcnZpY2VSZWYgPT09IG51bGwpXG4gICAgICAgIHRoaXMuRXhlY3V0ZVJvdXRlQ29tbWFuZChyb3V0ZUNvbW1hbmQpO1xuICAgICAgZWxzZVxuICAgICAgICB0aGlzLnJvdXRlckNvbW1hbmRzTWFnaWNTZXJ2aWNlLkFkZFJvdXRlQ29tbWFuZChyb3V0ZUNvbW1hbmQpO1xuICAgIH1cbiAgICBpZiAoIHJlZnJlc2hOZWVkZWQpXG4gICAgICB0aGlzLnRhc2sucmVmcmVzaFZpZXcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIHRoZSBzdWJmb3JtIHVzaW5nIGEgcm91dGUgY29tbWFuZFxuICAgKi9cbiAgRXhlY3V0ZVJvdXRlQ29tbWFuZChyb3V0ZUNvbW1hbmQ6IFJvdXRlQ29tbWFuZClcbiAge1xuICAgIGxldCByZXVzaW5nQ29tcG9uZW50ID0gZmFsc2U7XG5cbiAgICBsZXQgY3VycmVudFN1YmZvcm1NYWdpY1NlcnZpY2U6IFN1YmZvcm1NYWdpY1NlcnZpY2UgPSA8U3ViZm9ybU1hZ2ljU2VydmljZT5yb3V0ZUNvbW1hbmQuY2FsbGVyTWdTdWJmb3JtU2VydmljZVJlZjtcbiAgICBsZXQgcmVsYXRpdmVSb3V0ZSA9ICBTdWJmb3JtTWFnaWNTZXJ2aWNlLmdldFJlbGF0aXZlUm91dGUoY3VycmVudFN1YmZvcm1NYWdpY1NlcnZpY2UuYWN0aXZhdGVkUm91dGUpO1xuXG4gICAgaWYgKGN1cnJlbnRTdWJmb3JtTWFnaWNTZXJ2aWNlLnJvdXRlc0RpY3Rbcm91dGVDb21tYW5kLnJvdXRlck91dGxldE5hbWVdID09PSByb3V0ZUNvbW1hbmQucm91dGVQYXJhbXNbMF0pXG4gICAge1xuICAgICAgLy8gSWYgdGhlIHNwZWNpZmllZCByb3V0ZXIgb3V0bGV0IGFscmVhZHkgaG9zdHMgdGhlIHNhbWUgcm91dGVyIHBhdGgsIHJvdXRlci5uYXZpZ2F0ZSgpIGRvZXNuJ3QgYWN0dWFsbHkgbmF2aWdhdGUuXG4gICAgICAvLyBTbywgZmlyc3QgY2xlYXIgdGhlIG91dGxldCAocGFzc2luZyBudWxsIHJvdXRlIHBhcmFtcywgY2xlYXJzIHRoZSBvdXRsZXQpIGFuZCB0aGVuIG5hdmlnYXRlIGFnYWluLlxuICAgICAgY3VycmVudFN1YmZvcm1NYWdpY1NlcnZpY2Uucm91dGVyLm5hdmlnYXRlKFt7b3V0bGV0czoge1tyb3V0ZUNvbW1hbmQucm91dGVyT3V0bGV0TmFtZV06IG51bGx9fV0sIHtyZWxhdGl2ZVRvOiByZWxhdGl2ZVJvdXRlfSlcbiAgICAgICAgLnRoZW4oKHJlc3VsdDpib29sZWFuKSA9PiB7XG4gICAgICAgICAgU3ViZm9ybU1hZ2ljU2VydmljZS5jdXJyZW50Q2FsbGVyTWdTdWJmb3JtU2VydmljZVJlZiA9IGN1cnJlbnRTdWJmb3JtTWFnaWNTZXJ2aWNlO1xuICAgICAgICAgIGN1cnJlbnRTdWJmb3JtTWFnaWNTZXJ2aWNlLmN1cnJlbnRSb3V0ZURlZmluaXRpb24gPSB7XG4gICAgICAgICAgICBmb3JtTmFtZTogcm91dGVDb21tYW5kLmZvcm1OYW1lLFxuICAgICAgICAgICAgcGFyYW1ldGVyczogcm91dGVDb21tYW5kLnBhcmFtZXRlcnNcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY3VycmVudFN1YmZvcm1NYWdpY1NlcnZpY2UuUGVyZm9ybVJvdXRlck5hdmlnYXRlKHJvdXRlQ29tbWFuZC5yb3V0ZXJPdXRsZXROYW1lLCByb3V0ZUNvbW1hbmQucm91dGVQYXJhbXMpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgU3ViZm9ybU1hZ2ljU2VydmljZS5jdXJyZW50Q2FsbGVyTWdTdWJmb3JtU2VydmljZVJlZiA9IGN1cnJlbnRTdWJmb3JtTWFnaWNTZXJ2aWNlO1xuICAgICAgY3VycmVudFN1YmZvcm1NYWdpY1NlcnZpY2UuY3VycmVudFJvdXRlRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgZm9ybU5hbWU6IHJvdXRlQ29tbWFuZC5mb3JtTmFtZSxcbiAgICAgICAgcGFyYW1ldGVyczogcm91dGVDb21tYW5kLnBhcmFtZXRlcnNcbiAgICAgIH07XG5cbiAgICAgIGlmIChTdWJmb3JtTWFnaWNTZXJ2aWNlLnJvdXRlckNvbnRhaW5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgcm91dGVDb250YWluZXIgPSBTdWJmb3JtTWFnaWNTZXJ2aWNlLnJvdXRlckNvbnRhaW5lcnNbMF07XG4gICAgICAgIFN1YmZvcm1NYWdpY1NlcnZpY2Uucm91dGVyQ29udGFpbmVycy5zaGlmdCgpO1xuICAgICAgICByb3V0ZUNvbnRhaW5lci5pbml0aWFsaXplQ29tcG9uZW50KCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY3VycmVudFN1YmZvcm1NYWdpY1NlcnZpY2UuUGVyZm9ybVJvdXRlck5hdmlnYXRlKHJvdXRlQ29tbWFuZC5yb3V0ZXJPdXRsZXROYW1lLCByb3V0ZUNvbW1hbmQucm91dGVQYXJhbXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgUGVyZm9ybVJvdXRlck5hdmlnYXRlKHJvdXRlck91dGxldE5hbWU6IHN0cmluZywgcm91dGVQYXJhbXM6IExpc3Q8YW55PilcbiAge1xuICAgIGxldCByZWxhdGl2ZVJvdXRlID0gIFN1YmZvcm1NYWdpY1NlcnZpY2UuZ2V0UmVsYXRpdmVSb3V0ZSh0aGlzLmFjdGl2YXRlZFJvdXRlKTtcblxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt7IG91dGxldHM6IHsgW3JvdXRlck91dGxldE5hbWVdOiByb3V0ZVBhcmFtcyB9IH1dLCB7IHJlbGF0aXZlVG86IHJlbGF0aXZlUm91dGUgfSlcbiAgICAgIC50aGVuKChyZXN1bHQ6Ym9vbGVhbik9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCAhPT0gbnVsbCAmJiAhcmVzdWx0KSB7XG4gICAgICAgICAgICBsZXQgc3ViZm9ybU1hZ2ljU2VydmljZTogU3ViZm9ybU1hZ2ljU2VydmljZSA9IFN1YmZvcm1NYWdpY1NlcnZpY2UuY3VycmVudENhbGxlck1nU3ViZm9ybVNlcnZpY2VSZWY7XG4gICAgICAgICAgICBzdWJmb3JtTWFnaWNTZXJ2aWNlLmN1cnJlbnRSb3V0ZURlZmluaXRpb24gPSBudWxsO1xuXG4gICAgICAgICAgICBTdWJmb3JtTWFnaWNTZXJ2aWNlLmN1cnJlbnRDYWxsZXJNZ1N1YmZvcm1TZXJ2aWNlUmVmID0gbnVsbDtcbiAgICAgICAgICAgIHN1YmZvcm1NYWdpY1NlcnZpY2UucGVuZGluZ0NvbW1hbmRzQ29sbGVjdG9yLnN0b3BDb2xsZWN0aW5nKCk7XG4gICAgICAgICAgICBzdWJmb3JtTWFnaWNTZXJ2aWNlLnJvdXRlckNvbW1hbmRzTWFnaWNTZXJ2aWNlLkV4ZWN1dGVOZXh0Q29tbWFuZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBpbml0KClcbiAge1xuICAgIC8vIElmIGNvbW1hbmRzIHdlcmUgaXNzdWVkIGZvciB0aGlzIHRhc2sgYmVmb3JlIG5nT25Jbml0KCksIHRoZXkgd2VyZSBub3QgZXhlY3V0ZWQgYmVjYXVzZSB0YXNrIGhhZCBub3QgcmVnaXN0ZXJlZCBmb3IgdGhlbS5cbiAgICAvLyBTbywgZXhlY3V0ZSB0aGVtIG5vdy5cbiAgICBjb25zdCBwZW5kaW5nQ29tbWFuZHM6IEd1aUNvbW1hbmRbXSA9IHRoaXMucGVuZGluZ0NvbW1hbmRzQ29sbGVjdG9yLkdldENvbW1hbmRzKHRoaXMudGFzay50YXNrSWQpO1xuICAgIGlmIChwZW5kaW5nQ29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ0NvbW1hbmRzLmZvckVhY2goY29tbWFuZCA9PiB7dGhpcy50YXNrLmV4ZWN1dGVDb21tYW5kKGNvbW1hbmQpO30pO1xuICAgICAgdGhpcy50YXNrLnJlZnJlc2hWaWV3KCk7XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nQ29tbWFuZHNDb2xsZWN0b3Iuc3RvcENvbGxlY3RpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICByZWZyZXNoVmlldygpIHtcbiAgICB0aGlzLnRhc2sucmVmcmVzaFZpZXcoKTtcbiAgfVxuXG4gIC8vL1xuICAvLyByZXR1cm4gdGhlIHJlbGF0aXZlIHJvdXRlXG4gIC8vXG4gIHN0YXRpYyBnZXRSZWxhdGl2ZVJvdXRlKHNlbmRBY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUpe1xuICAgIGxldCBjdXJyZW50QWN0aXZlUm91dGUgPSBzZW5kQWN0aXZhdGVkUm91dGU7XG4gICAgaWYgKGN1cnJlbnRBY3RpdmVSb3V0ZS5zbmFwc2hvdC5yb3V0ZUNvbmZpZyAhPT0gbnVsbCAmJiBjdXJyZW50QWN0aXZlUm91dGUuc25hcHNob3Qucm91dGVDb25maWcucGF0aCA9PT0gJycpIHtcbiAgICAgIGN1cnJlbnRBY3RpdmVSb3V0ZSA9IGN1cnJlbnRBY3RpdmVSb3V0ZS5wYXJlbnQ7XG4gICAgICBpZiAoIWN1cnJlbnRBY3RpdmVSb3V0ZS5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5sb2FkQ2hpbGRyZW4pXG4gICAgICAgIGNvbnNvbGUubG9nKFwiZ2V0UmVsYXRpdmVSb3V0ZSgpOiBib3RoIHBhdGggYW5kIGN1cnJlbnRBY3RpdmVSb3V0ZS5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5sb2FkQ2hpbGRyZW4gYXJlIGVtcHR5LlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRBY3RpdmVSb3V0ZTtcbiAgfVxufVxuIl19
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViZm9ybS5tYWdpYy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvc2VydmljZXMvc3ViZm9ybS5tYWdpYy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBWSxVQUFVLEVBQUUsUUFBUSxFQUFtQixxQkFBcUIsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUNuSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFL0QsT0FBTyxFQUFDLHlCQUF5QixFQUFhLE1BQU0sZ0NBQWdDLENBQUM7QUFDckYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVuRixPQUFPLEVBQWdCLDBCQUEwQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7Ozs7Ozs7QUFTckcsTUFBTSxPQUFPLG1CQUFtQjtJQVU5QixZQUFvQixJQUFzQixFQUNwQixjQUE4QixFQUM5QixhQUF3QyxFQUN4Qyx3QkFBdUQsRUFDdkQsTUFBYyxFQUNkLDBCQUFzRCxFQUN4RCx5QkFBb0QsRUFDcEQsTUFBNkIsRUFDN0IsUUFBa0I7UUFSbEIsU0FBSSxHQUFKLElBQUksQ0FBa0I7UUFDcEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUEyQjtRQUN4Qyw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQStCO1FBQ3ZELFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCwrQkFBMEIsR0FBMUIsMEJBQTBCLENBQTRCO1FBQ3hELDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUFDcEQsV0FBTSxHQUFOLE1BQU0sQ0FBdUI7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QyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEcsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5QixlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3pCO1FBRUQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFLRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBS0QsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQztRQUN4RCxJQUFJLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBQzVDLElBQUksa0JBQWtCLENBQUMsUUFBUSxDQUFDLFdBQVcsS0FBSyxJQUFJLElBQUksa0JBQWtCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUFFO1lBQzNHLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztZQUMvQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxZQUFZO2dCQUN2RCxPQUFPLENBQUMsR0FBRyxDQUFDLG1HQUFtRyxDQUFDLENBQUM7U0FDcEg7UUFDRCxPQUFPLGtCQUFrQixDQUFDO0lBQzVCLENBQUM7O0FBcE9NLG9EQUFnQyxHQUFRLElBQUksQ0FBQztBQUU3QyxvQ0FBZ0IsR0FBeUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztzRkFSakUsbUJBQW1COzJEQUFuQixtQkFBbUIsV0FBbkIsbUJBQW1CO29DQUFuQixtQkFBbUI7Y0FEL0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbmplY3RhYmxlLCBJbmplY3RvciwgTmdNb2R1bGVGYWN0b3J5LCBOZ01vZHVsZUZhY3RvcnlMb2FkZXIsIE5nTW9kdWxlUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRhc2tNYWdpY1NlcnZpY2UgfSBmcm9tICcuL3Rhc2subWFnaWNzLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGlzdCwgaXNOdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAbWFnaWMteHBhL21zY29yZWxpYic7XG5pbXBvcnQgeyBHdWlDb21tYW5kIH0gZnJvbSAnQG1hZ2ljLXhwYS9ndWknO1xuaW1wb3J0IHtDb21wb25lbnRMaXN0TWFnaWNTZXJ2aWNlLCBNb2R1bGVEYXRhfSBmcm9tICcuL2NvbXBvbmVudC1saXN0Lm1hZ2ljLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBDb21tYW5kc0NvbGxlY3Rvck1hZ2ljU2VydmljZSB9IGZyb20gJy4vY29tbWFuZHMtY29sbGVjdG9yLm1hZ2ljLnNlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGVEZWZpbml0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zdWItZm9ybS1kZWZpbml0aW9uLml0ZXJmYWNlJztcbmltcG9ydCB7IFJvdXRlQ29tbWFuZCwgUm91dGVyQ29tbWFuZHNNYWdpY1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9yb3V0ZXItY29tbWFuZHMubWFnaWMuc2VydmljZSc7XG5pbXBvcnQgeyBJU3ViZm9ybU1hZ2ljU2VydmljZSB9IGZyb20gJy4vSVN1YmZvcm1NYWdpY1NlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGVyQ29udGFpbmVyTWFnaWNDb21wb25lbnQgfSBmcm9tICcuLi91aS9yb3V0ZXItY29udGFpbmVyLm1hZ2ljLmNvbXBvbmVudCc7XG5cblxuLyoqXG4gKiBTZXJ2aWNlIGZvciBtYW5hZ2luZyBzdWJmb3JtcyBhbmQgcm91dGluZ1xuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU3ViZm9ybU1hZ2ljU2VydmljZSBpbXBsZW1lbnRzIElTdWJmb3JtTWFnaWNTZXJ2aWNle1xuXG4gIHN1YmZvcm1zRGljdCAvKjp7IFt4OiBzdHJpbmddOiBTdWJmb3JtRGVmaW5pdGlvbiB9Ki8gPSB7fTtcbiAgcm91dGVzRGljdDogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTsgLy8gZGljdGlvbmFyeSBvZiByb3V0ZXIgb3V0bGV0IHRvIHJvdXRlciBwYXRoXG4gIGN1cnJlbnRSb3V0ZURlZmluaXRpb246IFJvdXRlRGVmaW5pdGlvbiA9IG51bGw7XG5cbiAgc3RhdGljIGN1cnJlbnRDYWxsZXJNZ1N1YmZvcm1TZXJ2aWNlUmVmOiBhbnkgPSBudWxsO1xuXG4gIHN0YXRpYyByb3V0ZXJDb250YWluZXJzOiBBcnJheTxSb3V0ZXJDb250YWluZXJNYWdpY0NvbXBvbmVudD4gPSBuZXcgQXJyYXkoKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRhc2s6IFRhc2tNYWdpY1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByb3RlY3RlZCBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgIHByb3RlY3RlZCBjb21wb25lbnRMaXN0OiBDb21wb25lbnRMaXN0TWFnaWNTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgcGVuZGluZ0NvbW1hbmRzQ29sbGVjdG9yOiBDb21tYW5kc0NvbGxlY3Rvck1hZ2ljU2VydmljZSxcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgcm91dGVyQ29tbWFuZHNNYWdpY1NlcnZpY2U6IFJvdXRlckNvbW1hbmRzTWFnaWNTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIGNvbXBvbmVudExpc3RNYWdpY1NlcnZpY2U6IENvbXBvbmVudExpc3RNYWdpY1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgbG9hZGVyOiBOZ01vZHVsZUZhY3RvcnlMb2FkZXIsXG4gICAgICAgICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYW5kIHJldHVybnMgdGhlIGNvbXBvbmVudCBhY2NvcmRpbmcgdG8gdGhlIHN1YmZvcm0gbmFtZVxuICAgKiBAcGFyYW0gc3ViZm9ybU5hbWVcbiAgICogQHJldHVybnNcbiAgICovXG4gIG1nR2V0Q29tcChzdWJmb3JtTmFtZTogc3RyaW5nKTogQ29tcG9uZW50IHtcbiAgICBpZiAoc3ViZm9ybU5hbWUgaW4gdGhpcy5zdWJmb3Jtc0RpY3QpIHtcbiAgICAgIGxldCBmb3JtTmFtZTogc3RyaW5nID0gdGhpcy5zdWJmb3Jtc0RpY3Rbc3ViZm9ybU5hbWVdLmZvcm1OYW1lO1xuICAgICAgaWYgKGZvcm1OYW1lKVxuICAgICAgICByZXR1cm4gdGhpcy5jb21wb25lbnRMaXN0LmdldENvbXBvbmVudChmb3JtTmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIHN1YmZvcm1cbiAgICogQHBhcmFtIHN1YmZvcm1OYW1lXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBtZ0dldFBhcmFtZXRlcnMoc3ViZm9ybU5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKHN1YmZvcm1OYW1lIGluIHRoaXMuc3ViZm9ybXNEaWN0KSB7XG4gICAgICByZXR1cm4gdGhpcy5zdWJmb3Jtc0RpY3Rbc3ViZm9ybU5hbWVdLnBhcmFtZXRlcnM7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGRlbGV0ZVN1YmZvcm1Db21wIChzdWJmb3JtQ29udHJvbE5hbWU6IHN0cmluZywgZm9ybU5hbWU6IHN0cmluZykgIHtcblxuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuc3ViZm9ybXNEaWN0KS5pbmRleE9mKHN1YmZvcm1Db250cm9sTmFtZSkgPj0gMClcbiAgICAgIHtcbiAgICAgICAgaWYgKHRoaXMuc3ViZm9ybXNEaWN0W3N1YmZvcm1Db250cm9sTmFtZV0uZm9ybU5hbWUgPT09IGZvcm1OYW1lKSB7XG5cbiAgICAgICAgdGhpcy5zdWJmb3Jtc0RpY3Rbc3ViZm9ybUNvbnRyb2xOYW1lXSA9IHt9O1xuICAgICAgICB0aGlzLnRhc2sucmVmcmVzaFZpZXcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGFkZFN1YmZvcm1Db21wIChzdWJmb3JtQ29udHJvbE5hbWU6IHN0cmluZywgZm9ybU5hbWU6IHN0cmluZywgdGFza0lkOiBzdHJpbmcsIHRhc2tEZXNjcmlwdGlvbjogYW55LCByb3V0ZXJQYXRoOiBzdHJpbmcsIHBhcmFtczogTGlzdDxhbnk+LCBpbkRlZmF1bHRPdXRsZXQ6IGJvb2xlYW4pICB7XG4gICAgdGhpcy5wZW5kaW5nQ29tbWFuZHNDb2xsZWN0b3Iuc3RhcnRDb2xsZWN0aW5nKCk7XG5cbiAgICBsZXQgcmVmcmVzaE5lZWRlZCA9IGZhbHNlO1xuICAgIGlmIChpc051bGxPclVuZGVmaW5lZChyb3V0ZXJQYXRoKSkgeyAvLyBjYWxsIGluIGRlc3RpbmF0aW9uIHN1YmZvcm1cbiAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnN1YmZvcm1zRGljdCkuaW5kZXhPZihzdWJmb3JtQ29udHJvbE5hbWUpID49IDApXG4gICAgICB7XG4gICAgICAgIGlmICh0aGlzLnN1YmZvcm1zRGljdFtzdWJmb3JtQ29udHJvbE5hbWVdLmZvcm1OYW1lID09PSBmb3JtTmFtZSkge1xuXG4gICAgICAgICAgdGhpcy5zdWJmb3Jtc0RpY3Rbc3ViZm9ybUNvbnRyb2xOYW1lXSA9IHt9O1xuICAgICAgICAgIHRoaXMudGFzay5yZWZyZXNoVmlldygpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIExvYWQgdGhlIGxhenkgbG9hZCBtb2R1bGUsIGlmIG5lZWRlZFxuICAgICAgbGV0IG1vZHVsZVJlZjogTmdNb2R1bGVSZWY8YW55PiA9IHRoaXMuY29tcG9uZW50TGlzdE1hZ2ljU2VydmljZS5nZXRNb2R1bGVSZWYoZm9ybU5hbWUpO1xuXG4gICAgICBpZiAobW9kdWxlUmVmID09IG51bGwpIHtcbiAgICAgICAgbGV0IGxhenlMb2FkTW9kdWxlOiBNb2R1bGVEYXRhID0gdGhpcy5jb21wb25lbnRMaXN0TWFnaWNTZXJ2aWNlLmdldExhenlMb2FkTW9kdWxlRGF0YShmb3JtTmFtZSk7XG5cbiAgICAgICAgaWYgKGxhenlMb2FkTW9kdWxlICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmxvYWRlclxuICAgICAgICAgICAgLmxvYWQobGF6eUxvYWRNb2R1bGUubW9kdWxlUGF0aCArIFwiI1wiICsgbGF6eUxvYWRNb2R1bGUubW9kdWxlTmFtZSlcbiAgICAgICAgICAgIC50aGVuKChtb2R1bGVGYWN0b3J5OiBOZ01vZHVsZUZhY3Rvcnk8YW55PikgPT4ge1xuICAgICAgICAgICAgICBtb2R1bGVSZWYgPSBtb2R1bGVGYWN0b3J5LmNyZWF0ZSh0aGlzLmluamVjdG9yKTtcbiAgICAgICAgICAgICAgdGhpcy5zdWJmb3Jtc0RpY3Rbc3ViZm9ybUNvbnRyb2xOYW1lXSA9IHtcbiAgICAgICAgICAgICAgICBmb3JtTmFtZSxcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB7dGFza0lkUGFyYW06IHRhc2tJZCwgdGFza0Rlc2NyaXB0aW9uOiB0YXNrRGVzY3JpcHRpb259XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHRoaXMudGFzay5yZWZyZXNoVmlldygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLnN1YmZvcm1zRGljdFtzdWJmb3JtQ29udHJvbE5hbWVdID0ge1xuICAgICAgICAgIGZvcm1OYW1lLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHt0YXNrSWRQYXJhbTogdGFza0lkLCB0YXNrRGVzY3JpcHRpb246IHRhc2tEZXNjcmlwdGlvbn1cbiAgICAgICAgfTtcbiAgICAgICAgLy90aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHJlZnJlc2hOZWVkZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHsgLy8gY2FsbCByb3V0ZVxuICAgICAgaWYgKGluRGVmYXVsdE91dGxldClcbiAgICAgICAgc3ViZm9ybUNvbnRyb2xOYW1lID0gXCJwcmltYXJ5XCI7XG5cbiAgICAgIGxldCByb3V0ZVBhcmFtczogTGlzdDxhbnk+ID0gbmV3IExpc3QoKTtcbiAgICAgIHJvdXRlUGFyYW1zLnB1c2gocm91dGVyUGF0aCk7XG4gICAgICBpZiAocGFyYW1zICE9PSBudWxsKSB7XG4gICAgICAgIHJvdXRlUGFyYW1zID0gPExpc3Q8YW55Pj5yb3V0ZVBhcmFtcy5jb25jYXQocGFyYW1zKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHJvdXRlQ29tbWFuZDogUm91dGVDb21tYW5kID0ge1xuICAgICAgICBjYWxsZXJNZ1N1YmZvcm1TZXJ2aWNlUmVmOiB0aGlzLFxuICAgICAgICByb3V0ZXJPdXRsZXROYW1lOiBzdWJmb3JtQ29udHJvbE5hbWUsXG4gICAgICAgIGZvcm1OYW1lOiBmb3JtTmFtZSxcbiAgICAgICAgcGFyYW1ldGVyczoge3Rhc2tJZFBhcmFtOiB0YXNrSWQsIHRhc2tEZXNjcmlwdGlvbjogdGFza0Rlc2NyaXB0aW9ufSxcbiAgICAgICAgcm91dGVQYXJhbXM6IHJvdXRlUGFyYW1zXG4gICAgICB9O1xuXG4gICAgICAvLyBJZiBTdWJmb3JtTWFnaWNTZXJ2aWNlLmN1cnJlbnRDYWxsZXJNZ1N1YmZvcm1TZXJ2aWNlUmVmICE9PSBudWxsIG1lYW5zIHRoYXQgcm91dGVyLm5hdmlnYXRlKCkgaXMgYWxyZWFkeVxuICAgICAgLy8gY2FsbGVkIG9uY2UsIGJ1dCBhbmd1bGFyIGhhcyBub3QgeWV0IGV4ZWN1dGVkIGl0IChuZ09uSW5pdCBvZiB0aGUgbmV3IGNvbXBvbmVudCBpcyBub3QgY2FsbGVkKS5cbiAgICAgIC8vIEluIHN1Y2ggYSBjYXNlLCBkbyBub3QgZXhlY3V0ZWQgcm91dGVyLm5hdmlnYXRlKCkgYWdhaW4uIEJlY2F1c2UsIGFuZ3VsYXIgaWdub3JlcyB0aGUgcHJldmlvdXMgb25lLlxuICAgICAgLy8gU28sIHB1dCBhIGNvbW1hbmQgaW4gdGhlIHF1ZXVlIHdoaWNoIHdpbGwgYmUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGZpcnN0IG9uZSBpcyBleGVjdXRlZC5cbiAgICBpZiAoU3ViZm9ybU1hZ2ljU2VydmljZS5jdXJyZW50Q2FsbGVyTWdTdWJmb3JtU2VydmljZVJlZiA9PT0gbnVsbClcbiAgICAgICAgdGhpcy5FeGVjdXRlUm91dGVDb21tYW5kKHJvdXRlQ29tbWFuZCk7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMucm91dGVyQ29tbWFuZHNNYWdpY1NlcnZpY2UuQWRkUm91dGVDb21tYW5kKHJvdXRlQ29tbWFuZCk7XG4gICAgfVxuICAgIGlmICggcmVmcmVzaE5lZWRlZClcbiAgICAgIHRoaXMudGFzay5yZWZyZXNoVmlldygpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gdGhlIHN1YmZvcm0gdXNpbmcgYSByb3V0ZSBjb21tYW5kXG4gICAqL1xuICBFeGVjdXRlUm91dGVDb21tYW5kKHJvdXRlQ29tbWFuZDogUm91dGVDb21tYW5kKVxuICB7XG4gICAgbGV0IHJldXNpbmdDb21wb25lbnQgPSBmYWxzZTtcblxuICAgIGxldCBjdXJyZW50U3ViZm9ybU1hZ2ljU2VydmljZTogU3ViZm9ybU1hZ2ljU2VydmljZSA9IDxTdWJmb3JtTWFnaWNTZXJ2aWNlPnJvdXRlQ29tbWFuZC5jYWxsZXJNZ1N1YmZvcm1TZXJ2aWNlUmVmO1xuICAgIGxldCByZWxhdGl2ZVJvdXRlID0gIFN1YmZvcm1NYWdpY1NlcnZpY2UuZ2V0UmVsYXRpdmVSb3V0ZShjdXJyZW50U3ViZm9ybU1hZ2ljU2VydmljZS5hY3RpdmF0ZWRSb3V0ZSk7XG5cbiAgICBpZiAoY3VycmVudFN1YmZvcm1NYWdpY1NlcnZpY2Uucm91dGVzRGljdFtyb3V0ZUNvbW1hbmQucm91dGVyT3V0bGV0TmFtZV0gPT09IHJvdXRlQ29tbWFuZC5yb3V0ZVBhcmFtc1swXSlcbiAgICB7XG4gICAgICAvLyBJZiB0aGUgc3BlY2lmaWVkIHJvdXRlciBvdXRsZXQgYWxyZWFkeSBob3N0cyB0aGUgc2FtZSByb3V0ZXIgcGF0aCwgcm91dGVyLm5hdmlnYXRlKCkgZG9lc24ndCBhY3R1YWxseSBuYXZpZ2F0ZS5cbiAgICAgIC8vIFNvLCBmaXJzdCBjbGVhciB0aGUgb3V0bGV0IChwYXNzaW5nIG51bGwgcm91dGUgcGFyYW1zLCBjbGVhcnMgdGhlIG91dGxldCkgYW5kIHRoZW4gbmF2aWdhdGUgYWdhaW4uXG4gICAgICBjdXJyZW50U3ViZm9ybU1hZ2ljU2VydmljZS5yb3V0ZXIubmF2aWdhdGUoW3tvdXRsZXRzOiB7W3JvdXRlQ29tbWFuZC5yb3V0ZXJPdXRsZXROYW1lXTogbnVsbH19XSwge3JlbGF0aXZlVG86IHJlbGF0aXZlUm91dGV9KVxuICAgICAgICAudGhlbigocmVzdWx0OmJvb2xlYW4pID0+IHtcbiAgICAgICAgICBTdWJmb3JtTWFnaWNTZXJ2aWNlLmN1cnJlbnRDYWxsZXJNZ1N1YmZvcm1TZXJ2aWNlUmVmID0gY3VycmVudFN1YmZvcm1NYWdpY1NlcnZpY2U7XG4gICAgICAgICAgY3VycmVudFN1YmZvcm1NYWdpY1NlcnZpY2UuY3VycmVudFJvdXRlRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICAgIGZvcm1OYW1lOiByb3V0ZUNvbW1hbmQuZm9ybU5hbWUsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiByb3V0ZUNvbW1hbmQucGFyYW1ldGVyc1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBjdXJyZW50U3ViZm9ybU1hZ2ljU2VydmljZS5QZXJmb3JtUm91dGVyTmF2aWdhdGUocm91dGVDb21tYW5kLnJvdXRlck91dGxldE5hbWUsIHJvdXRlQ29tbWFuZC5yb3V0ZVBhcmFtcyk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBTdWJmb3JtTWFnaWNTZXJ2aWNlLmN1cnJlbnRDYWxsZXJNZ1N1YmZvcm1TZXJ2aWNlUmVmID0gY3VycmVudFN1YmZvcm1NYWdpY1NlcnZpY2U7XG4gICAgICBjdXJyZW50U3ViZm9ybU1hZ2ljU2VydmljZS5jdXJyZW50Um91dGVEZWZpbml0aW9uID0ge1xuICAgICAgICBmb3JtTmFtZTogcm91dGVDb21tYW5kLmZvcm1OYW1lLFxuICAgICAgICBwYXJhbWV0ZXJzOiByb3V0ZUNvbW1hbmQucGFyYW1ldGVyc1xuICAgICAgfTtcblxuICAgICAgaWYgKFN1YmZvcm1NYWdpY1NlcnZpY2Uucm91dGVyQ29udGFpbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGxldCByb3V0ZUNvbnRhaW5lciA9IFN1YmZvcm1NYWdpY1NlcnZpY2Uucm91dGVyQ29udGFpbmVyc1swXTtcbiAgICAgICAgU3ViZm9ybU1hZ2ljU2VydmljZS5yb3V0ZXJDb250YWluZXJzLnNoaWZ0KCk7XG4gICAgICAgIHJvdXRlQ29udGFpbmVyLmluaXRpYWxpemVDb21wb25lbnQoKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjdXJyZW50U3ViZm9ybU1hZ2ljU2VydmljZS5QZXJmb3JtUm91dGVyTmF2aWdhdGUocm91dGVDb21tYW5kLnJvdXRlck91dGxldE5hbWUsIHJvdXRlQ29tbWFuZC5yb3V0ZVBhcmFtcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBQZXJmb3JtUm91dGVyTmF2aWdhdGUocm91dGVyT3V0bGV0TmFtZTogc3RyaW5nLCByb3V0ZVBhcmFtczogTGlzdDxhbnk+KVxuICB7XG4gICAgbGV0IHJlbGF0aXZlUm91dGUgPSAgU3ViZm9ybU1hZ2ljU2VydmljZS5nZXRSZWxhdGl2ZVJvdXRlKHRoaXMuYWN0aXZhdGVkUm91dGUpO1xuXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3sgb3V0bGV0czogeyBbcm91dGVyT3V0bGV0TmFtZV06IHJvdXRlUGFyYW1zIH0gfV0sIHsgcmVsYXRpdmVUbzogcmVsYXRpdmVSb3V0ZSB9KVxuICAgICAgLnRoZW4oKHJlc3VsdDpib29sZWFuKT0+IHtcbiAgICAgICAgICBpZiAocmVzdWx0ICE9PSBudWxsICYmICFyZXN1bHQpIHtcbiAgICAgICAgICAgIGxldCBzdWJmb3JtTWFnaWNTZXJ2aWNlOiBTdWJmb3JtTWFnaWNTZXJ2aWNlID0gU3ViZm9ybU1hZ2ljU2VydmljZS5jdXJyZW50Q2FsbGVyTWdTdWJmb3JtU2VydmljZVJlZjtcbiAgICAgICAgICAgIHN1YmZvcm1NYWdpY1NlcnZpY2UuY3VycmVudFJvdXRlRGVmaW5pdGlvbiA9IG51bGw7XG5cbiAgICAgICAgICAgIFN1YmZvcm1NYWdpY1NlcnZpY2UuY3VycmVudENhbGxlck1nU3ViZm9ybVNlcnZpY2VSZWYgPSBudWxsO1xuICAgICAgICAgICAgc3ViZm9ybU1hZ2ljU2VydmljZS5wZW5kaW5nQ29tbWFuZHNDb2xsZWN0b3Iuc3RvcENvbGxlY3RpbmcoKTtcbiAgICAgICAgICAgIHN1YmZvcm1NYWdpY1NlcnZpY2Uucm91dGVyQ29tbWFuZHNNYWdpY1NlcnZpY2UuRXhlY3V0ZU5leHRDb21tYW5kKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGluaXQoKVxuICB7XG4gICAgLy8gSWYgY29tbWFuZHMgd2VyZSBpc3N1ZWQgZm9yIHRoaXMgdGFzayBiZWZvcmUgbmdPbkluaXQoKSwgdGhleSB3ZXJlIG5vdCBleGVjdXRlZCBiZWNhdXNlIHRhc2sgaGFkIG5vdCByZWdpc3RlcmVkIGZvciB0aGVtLlxuICAgIC8vIFNvLCBleGVjdXRlIHRoZW0gbm93LlxuICAgIGNvbnN0IHBlbmRpbmdDb21tYW5kczogR3VpQ29tbWFuZFtdID0gdGhpcy5wZW5kaW5nQ29tbWFuZHNDb2xsZWN0b3IuR2V0Q29tbWFuZHModGhpcy50YXNrLnRhc2tJZCk7XG4gICAgaWYgKHBlbmRpbmdDb21tYW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nQ29tbWFuZHMuZm9yRWFjaChjb21tYW5kID0+IHt0aGlzLnRhc2suZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCk7fSk7XG4gICAgICB0aGlzLnRhc2sucmVmcmVzaFZpZXcoKTtcbiAgICB9XG5cbiAgICB0aGlzLnBlbmRpbmdDb21tYW5kc0NvbGxlY3Rvci5zdG9wQ29sbGVjdGluZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHJlZnJlc2hWaWV3KCkge1xuICAgIHRoaXMudGFzay5yZWZyZXNoVmlldygpO1xuICB9XG5cbiAgLy8vXG4gIC8vIHJldHVybiB0aGUgcmVsYXRpdmUgcm91dGVcbiAgLy9cbiAgc3RhdGljIGdldFJlbGF0aXZlUm91dGUoc2VuZEFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSl7XG4gICAgbGV0IGN1cnJlbnRBY3RpdmVSb3V0ZSA9IHNlbmRBY3RpdmF0ZWRSb3V0ZTtcbiAgICBpZiAoY3VycmVudEFjdGl2ZVJvdXRlLnNuYXBzaG90LnJvdXRlQ29uZmlnICE9PSBudWxsICYmIGN1cnJlbnRBY3RpdmVSb3V0ZS5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRoID09PSAnJykge1xuICAgICAgY3VycmVudEFjdGl2ZVJvdXRlID0gY3VycmVudEFjdGl2ZVJvdXRlLnBhcmVudDtcbiAgICAgIGlmICghY3VycmVudEFjdGl2ZVJvdXRlLnNuYXBzaG90LnJvdXRlQ29uZmlnLmxvYWRDaGlsZHJlbilcbiAgICAgICAgY29uc29sZS5sb2coXCJnZXRSZWxhdGl2ZVJvdXRlKCk6IGJvdGggcGF0aCBhbmQgY3VycmVudEFjdGl2ZVJvdXRlLnNuYXBzaG90LnJvdXRlQ29uZmlnLmxvYWRDaGlsZHJlbiBhcmUgZW1wdHkuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudEFjdGl2ZVJvdXRlO1xuICB9XG59XG4iXX0=
@@ -2,7 +2,7 @@ import { EventEmitter, Injectable } from '@angular/core';
2
2
  import { FormControl, FormGroup } from '@angular/forms';
3
3
  import { filter } from 'rxjs/operators';
4
4
  import { Subject } from 'rxjs';
5
- import { isNullOrUndefined, isUndefined } from 'util';
5
+ import { isNullOrUndefined, isUndefined } from '@magic-xpa/mscorelib';
6
6
  import { StylesMapManager } from './StylesMapManager';
7
7
  import { EngineMagicService } from './engine.magic.service';
8
8
  import { Records } from '../controls.metadata.model';
@@ -608,4 +608,4 @@ TaskMagicService.ɵprov = i0.ɵɵdefineInjectable({ token: TaskMagicService, fac
608
608
  (function () { i0.ɵsetClassMetadata(TaskMagicService, [{
609
609
  type: Injectable
610
610
  }], function () { return [{ type: i1.EngineMagicService }, { type: i2.OverlayWindowService }]; }, null); })();
611
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay5tYWdpY3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL3NlcnZpY2VzL3Rhc2subWFnaWNzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFrQixXQUFXLEVBQUUsU0FBUyxFQUFnQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RHLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFFcEQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFrQixPQUFPLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsV0FBVyxFQUErQixZQUFZLEVBQWtCLGNBQWMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXRILE9BQU8sRUFBQyxPQUFPLEVBQUUsYUFBYSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDNUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFDLGNBQWMsRUFBWSxNQUFNLG1CQUFtQixDQUFDO0FBSTVELE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDOzs7O0FBTTVELE1BQU0sT0FBTyxnQkFBZ0I7SUFxRjNCLFlBQXNCLEtBQXlCLEVBQVUsb0JBQTBDO1FB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QUFNLEVBQUUsQ0FBQyxFQUFFO1lBQy9DLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBS00sUUFBUTtRQUNiLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFLRCxZQUFZLENBQUMsUUFBZ0IsRUFBRSxFQUFlLEVBQUUsSUFBWTtRQUMxRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNqQixJQUFJO2dCQUNGLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbkQsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNsQjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2FBQ1g7U0FDRjtJQUNILENBQUM7O2dGQXZoQ1UsZ0JBQWdCO3dEQUFoQixnQkFBZ0IsV0FBaEIsZ0JBQWdCO29DQUFoQixnQkFBZ0I7Y0FENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7ZmlsdGVyfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7U3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7aXNOdWxsT3JVbmRlZmluZWQsIGlzVW5kZWZpbmVkfSBmcm9tICd1dGlsJztcclxuaW1wb3J0IHtTdHlsZXNNYXBNYW5hZ2VyfSBmcm9tICcuL1N0eWxlc01hcE1hbmFnZXInO1xyXG5cclxuaW1wb3J0IHtFbmdpbmVNYWdpY1NlcnZpY2V9IGZyb20gJy4vZW5naW5lLm1hZ2ljLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NvbnRyb2xNZXRhZGF0YSwgUmVjb3Jkc30gZnJvbSAnLi4vY29udHJvbHMubWV0YWRhdGEubW9kZWwnO1xyXG5pbXBvcnQge0NvbW1hbmRUeXBlLCBDdXN0b21WYWxpZGF0b3IsIEd1aUNvbW1hbmQsIEd1aUNvbnN0YW50cywgR3VpSW50ZXJhY3RpdmUsIEh0bWxQcm9wZXJ0aWVzfSBmcm9tICdAbWFnaWMteHBhL2d1aSc7XHJcblxyXG5pbXBvcnQge05TdHJpbmcsIFN0cmluZ0J1aWxkZXJ9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHtTdG9yYWdlQXR0cmlidXRlfSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHtnZXRHdWlFdmVudE9iaiwgSUd1aUV2ZW50fSBmcm9tICdAbWFnaWMteHBhL2VuZ2luZSc7XHJcbmltcG9ydCB7U3ViZm9ybU1hZ2ljU2VydmljZX0gZnJvbSAnLi9zdWJmb3JtLm1hZ2ljLnNlcnZpY2UnO1xyXG5pbXBvcnQge1RpdGxlTWFnaWNTZXJ2aWNlfSBmcm9tICcuL3RpdGxlLm1hZ2ljLnNlcnZpY2UnO1xyXG5pbXBvcnQge0FjY2Vzc29yTWFnaWNTZXJ2aWNlfSBmcm9tICcuL2FjY2Vzc29yLm1hZ2ljLnNlcnZpY2UnO1xyXG5pbXBvcnQge0d1aUludGVyYWN0aXZlRXhlY3V0b3J9IGZyb20gJy4uL3VpL0d1aUludGVyYWN0aXZlRXhlY3V0b3InO1xyXG5pbXBvcnQge092ZXJsYXlXaW5kb3dTZXJ2aWNlfSBmcm9tICcuL092ZXJsYXlXaW5kb3dTZXJ2aWNlJztcclxuXHJcbi8qKlxyXG4gKiBNYWluIHNlcnZpY2UgdG8gY29ubmVjdCB0aGUgVUkgd2l0aCB0aGUgTWFnaWMgV2ViQ0xpZW50XHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBUYXNrTWFnaWNTZXJ2aWNlIHtcclxuXHJcbiAgLyoqXHJcbiAgICogU2VydmljZSB0byBwcm92aWRlIHRhYmxlLXJlbGF0ZWQgZnVuY3Rpb25hbGl0aWVzXHJcbiAgICovXHJcbiAgcHVibGljIHRhYmxlU2VydmljZTogYW55O1xyXG4gIC8qKlxyXG4gICAqIENvbGxlY3Rpb24gb2YgZGF0YSBmb3IgYWxsIGNvbnRyb2xzXHJcbiAgICovXHJcbiAgUmVjb3JkczogYW55ID0gbmV3IFJlY29yZHMoKTtcclxuICAvKipcclxuICAgKiBGb3JtR3JvdXAgY29sbGVjdGlvbiBmb3IgbGluZSBtb2RlXHJcbiAgICovXHJcbiAgZm9ybUdyb3VwczogQXJyYXk8Rm9ybUdyb3VwPiA9IFtdO1xyXG4gIC8qKlxyXG4gICAqIEZvcm1Hcm91cCBmb3IgYWxsIGNvbnRyb2xzIGluIHNjcmVlbiBtb2RlXHJcbiAgICovXHJcbiAgU2NyZWVuTW9kZUNvbnRyb2xzOiBGb3JtR3JvdXA7XHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHJlZnJlc2hEb206IFN1YmplY3Q8R3VpQ29tbWFuZD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBzdWJzY3JpYmVSZWZyZXNoRG9tOiBTdWJzY3JpcHRpb247XHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGRldGVjdENoYW5nZXM6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHN1YnNjcmliZUludGVyYWN0aXZlQ29tbWFuZHM6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGludGVyYWN0aXZlQ29tbWFuZHM6IFN1YmplY3Q8R3VpSW50ZXJhY3RpdmU+PSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICogVGhpcyBldmVudCBpcyBlbWl0dGVkIHdoZW4gdGhlIHNlbGVjdGVkIHJvdyBpbiBhIHRhYmxlIGNoYW5nZXMuXHJcbiAgICovXHJcbiAgT25TZWxlY3RlZFJvd0NoYW5nZWQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBjdXN0b21Qcm9wZXJ0aWVzU3ViamVjdDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICByZWNvcmRzQ291bnRDaGFuZ2VTdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcHVibGljIHRlbXBsYXRlOiB7IFtpZDogc3RyaW5nXTogc3RyaW5nOyB9O1xyXG4gIC8qKlxyXG4gICAqIFNlcnZpY2UgdG8gcHJvdmlkZSBzdWJmb3JtLXJlbGF0ZWQgZnVuY3Rpb25hbGl0aWVzXHJcbiAgICovXHJcbiAgcHVibGljIG1nU3ViZm9ybVNlcnZpY2U6IFN1YmZvcm1NYWdpY1NlcnZpY2U7XHJcbiAgLyoqXHJcbiAgICogU2VydmljZSB0byBwcm92aWRlIHRoZSB0aXRsZS1jaGFuZ2UgZnVuY3Rpb25hbGl0eVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtZ1RpdGxlU2VydmljZTogVGl0bGVNYWdpY1NlcnZpY2U7XHJcbiAgLyoqXHJcbiAgICogU2VydmljZSB3aGljaCBlbmFibGVzIGdldHRpbmcvc2V0dGluZyB2YWx1ZXMgZnJvbS90byB0aGUgTWFnaWMgV2ViQ2xpZW50IGVuZ2luZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtZ0FjY2Vzc29yU2VydmljZTogQWNjZXNzb3JNYWdpY1NlcnZpY2U7XHJcblxyXG4gIHB1YmxpYyBtZ0lucHV0RGF0ZUZvcm1hdDtcclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIG9sZFBhZ2VTaXplID0gMDtcclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gIG1hZ2ljXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIG1hZ2ljOiBFbmdpbmVNYWdpY1NlcnZpY2UsIHByaXZhdGUgb3ZlcmxheVdpbmRvd1NlcnZpY2U6IE92ZXJsYXlXaW5kb3dTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLlJlY29yZHMuc2V0R3VpVG9wSW5kZXgoMCk7XHJcbiAgICB0aGlzLm1nSW5wdXREYXRlRm9ybWF0ID0gbnVsbDtcclxuICB9XHJcblxyXG4gICAvKipcclxuICAgKiByZXR1cm5zIHRydWUgaWYgdXNlZCBpcyBsb2dnZWQgaW5cclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRJc0xvZ2dlbkluKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubWFnaWMuZ2V0SXNMb2dnZWRJbigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWQgb2YgdGFzayB0byB3aGljaCB0aGlzIHNlcnZpY2UgcmVmZXJzXHJcbiAgICovXHJcbiAgX3Rhc2tJZDogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiByZXR1cm5zIHRoZSB0YXNrIElkXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBnZXQgdGFza0lkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Rhc2tJZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHRhc2sgSWRcclxuICAgKiBAcGFyYW0gdmFsdWUgdGhlIHRhc2sgaWQgdG8gc2V0XHJcbiAgICovXHJcbiAgc2V0IHRhc2tJZCh2YWx1ZSkge1xyXG4gICAgLy8gZGVidWdnZXI7XHJcbiAgICB0aGlzLl90YXNrSWQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHRhc2sncyBkYXRhIGluIFNjcmVlbiBtb2RlXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBnZXQgU2NyZWVuQ29udHJvbHNEYXRhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuUmVjb3Jkcy5saXN0WycwJ107XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgc2V0dGVtcGxhdGUodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy50ZW1wbGF0ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEJ1aWxkcyB0aGUgRm9ybUNvbnRyb2wgZm9yIGVhY2ggYW5kIGV2ZXJ5IGNvbnRyb2xcclxuICAgKi9cclxuICBidWlsZFNjcmVlbk1vZGVDb250cm9scygpIHtcclxuICAgIGNvbnN0IGdyb3VwOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMudGVtcGxhdGUpIHtcclxuXHJcbiAgICAgIGlmICh0aGlzLnRlbXBsYXRlW2tleV0gPT0gJzAnKSB7XHJcbiAgICAgICAgbGV0IGZjID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuICAgICAgICB0aGlzLnNldFN0dWJWYWx1ZSgwLCBmYywga2V5KTtcclxuICAgICAgICBncm91cC5hZGRDb250cm9sKGtleSwgZmMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5TY3JlZW5Nb2RlQ29udHJvbHMgPSBncm91cDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElzIHRoZSBjb250cm9sIGEgdGFibGUgY29udHJvbFxyXG4gICAqIEBwYXJhbSBpZCBJZCBvZiB0aGUgY29udHJvbFxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgaXNUYWJsZUNvbnRyb2woaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVbaWRdID09ICcxJztcclxuICB9XHJcblxyXG4gIGdldE1nSW5wdXREYXRlRm9ybWF0KCk6IHN0cmluZyB7cmV0dXJuIHRoaXMubWdJbnB1dERhdGVGb3JtYXQ7fVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBGb3JtQ29udHJvbCBvZiBhIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gZ3VpUm93aWQgSWQgb2YgdGhlIHJlcXVlc3RlZCByb3dcclxuICAgKiBAcGFyYW0gaWQgSWQgb2YgdGhlIGNvbnRyb2xcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGdldEZvcm1Db250cm9sKGd1aVJvd2lkOiBzdHJpbmcsIGlkOiBzdHJpbmcpOiBBYnN0cmFjdENvbnRyb2wge1xyXG4gICAgbGV0IGM6IEFic3RyYWN0Q29udHJvbDtcclxuICAgIGxldCBncm91cDogRm9ybUdyb3VwID0gdGhpcy5pc1RhYmxlQ29udHJvbChpZCkgPyB0aGlzLmZvcm1Hcm91cHNbZ3VpUm93aWRdIDogdGhpcy5TY3JlZW5Nb2RlQ29udHJvbHM7XHJcbiAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGdyb3VwKSkge1xyXG4gICAgICBncm91cC5nZXQoaWQpO1xyXG4gICAgICBjID0gZ3JvdXAuY29udHJvbHNbaWRdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBoYW5kbGUgdGhlIGNoYW5nZSBvZiB0ZXh0IGZvciBpbnB1dCBjb250cm9sIGluc2lkZSB0YWJsZVxyXG4gICAqIEBwYXJhbSAgZ3VpUm93SWQgSWQgb2YgdGhlIHJvdyBmb3Igd2hpY2ggdGhlIEZvcm1Db250cm9scyBhcmUgYnVpbHRcclxuICAgKiBzZXQgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgZm9ybWNvbnRyb2xcclxuICAgKi9cclxuICBzZXRJbnB1dFRleHRWYWx1ZShjb250cm9sSWQ6IHN0cmluZywgZ3VpUm93aWQ6IHN0cmluZywgdmFsOiBhbnkpIHtcclxuICAgIHRoaXMuc2V0VmFsdWUoY29udHJvbElkLCBndWlSb3dpZCwgdGhpcy5Db252ZXJ0VmFsVG9OYXRpdmUoY29udHJvbElkLCAwLCB2YWwpKTtcclxuXHJcbiAgICBjb25zdCBmYyA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woZ3VpUm93aWQsIGNvbnRyb2xJZCk7XHJcbiAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHZhbCkpXHJcbiAgICAgIGZjLnNldFZhbHVlKHZhbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBCdWlsZCB0aGUgRm9ybUNvbnRyb2xzIGZvciBhIHRhYmxlIHJvd1xyXG4gICAqIEBwYXJhbSAgZ3VpUm93SWQgSWQgb2YgdGhlIHJvdyBmb3Igd2hpY2ggdGhlIEZvcm1Db250cm9scyBhcmUgYnVpbHRcclxuICAgKi9cclxuICBidWlsZFRhYmxlUm93Q29udHJvbHMoZ3VpUm93SWQ6IG51bWJlcikge1xyXG5cclxuICAgIGNvbnN0IGdyb3VwOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnRlbXBsYXRlKSB7XHJcblxyXG4gICAgICBpZiAodGhpcy50ZW1wbGF0ZVtrZXldID09ICcxJykge1xyXG4gICAgICAgIGxldCBmYyA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XHJcbiAgICAgICAgdGhpcy5zZXRTdHViVmFsdWUoZ3VpUm93SWQsIGZjLCBrZXkpO1xyXG4gICAgICAgIGdyb3VwLmFkZENvbnRyb2woa2V5LCBmYyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZm9ybUdyb3Vwc1tndWlSb3dJZF0gPSBncm91cDtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICB1cGRhdGVSZWNvcmRzQmVmb3JlQ3VycmVudFZpZXcodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5SZWNvcmRzLnJlY29yZHNCZWZvcmVDdXJyZW50VmlldyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHNldEluY2x1ZGVzRmlyc3QodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuUmVjb3Jkcy5pbmNsdWRlc0ZpcnN0ID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgc2V0SW5jbHVkZXNMYXN0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLlJlY29yZHMuaW5jbHVkZXNMYXN0ID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgbWFya1Jvd0FzQ3JlYXRlZChndWlSb3dJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLlJlY29yZHMubWFya1Jvd0FzQ3JlYXRlZChndWlSb3dJZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgbWFya1Jvd0FzTm90Q3JlYXRlZChndWlSb3dJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLlJlY29yZHMubWFya1Jvd0FzTm90Q3JlYXRlZChndWlSb3dJZCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHN0YXJ0Um93RWRpdGluZyhndWlSb3dJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLlJlY29yZHMuc3RhcnRSb3dFZGl0aW5nKGd1aVJvd0lkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBzdG9wUm93RWRpdGluZyhndWlSb3dJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLlJlY29yZHMuc3RvcFJvd0VkaXRpbmcoZ3VpUm93SWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGlzUm93SW5Sb3dFZGl0aW5nKGd1aVJvd0lkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLlJlY29yZHMuaXNSb3dJblJvd0VkaXRpbmcoZ3VpUm93SWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHNldElzRW1wdHlEYXRhVmlldyhpc0VtcHR5OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5SZWNvcmRzLmlzRW1wdHlEYXRhVmlldyAhPT0gaXNFbXB0eSkge1xyXG5cclxuICAgICAgaWYgKGlzRW1wdHkpXHJcbiAgICAgICAgdGhpcy5yZWNvcmRzQ291bnRDaGFuZ2VTdWJqZWN0Lm5leHQoMCk7XHJcblxyXG4gICAgICB0aGlzLlJlY29yZHMuaXNFbXB0eURhdGFWaWV3ID0gaXNFbXB0eTtcclxuICAgICAgdGhpcy50YWJsZVNlcnZpY2UucmVmcmVzaERhdGFTb3VyY2UoKTtcclxuICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSB0aGUgc2VydmljZSB0byB3b3JrIHdpdGggdGhlIHRhc2tcclxuICAgKiBAcGFyYW0gdGFza0lkIElkIG9mIHRoZSB0YXNrXHJcbiAgICogQHBhcmFtIHRhc2tEZXNjcmlwdGlvblxyXG4gICAqL1xyXG4gIGluaXRUYXNrKHRhc2tJZCwgdGFza0Rlc2NyaXB0aW9uKSB7XHJcbiAgICB0aGlzLlJlY29yZHMuY3JlYXRlRmlyc3QoKTtcclxuICAgIHRoaXMub2xkUGFnZVNpemUgPSAwO1xyXG4gICAgaWYgKHRoaXMuSXNTdHViKCkpIHtcclxuICAgICAgdGhpcy5sb2FkRGF0YSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50YXNrSWQgPSB0YXNrSWQ7XHJcbiAgICAgIHRoaXMuc2V0dGVtcGxhdGUodGFza0Rlc2NyaXB0aW9uKTtcclxuICAgIH1cclxuICAgIHRoaXMuYnVpbGRTY3JlZW5Nb2RlQ29udHJvbHMoKTtcclxuXHJcbiAgICAvLyByZW1vdmUgcHJldmlvdXMgc3Vic2NyaXB0aW9uc1xyXG4gICAgaWYoIWlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuc3Vic2NyaWJlUmVmcmVzaERvbSkpXHJcbiAgICAgIHRoaXMuc3Vic2NyaWJlUmVmcmVzaERvbS51bnN1YnNjcmliZSgpO1xyXG4gICAgaWYoIWlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuc3Vic2NyaWJlSW50ZXJhY3RpdmVDb21tYW5kcykpXHJcbiAgICAgIHRoaXMuc3Vic2NyaWJlSW50ZXJhY3RpdmVDb21tYW5kcy51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaWJlUmVmcmVzaERvbSA9IHRoaXMubWFnaWMucmVmcmVzaERvbS5waXBlKGZpbHRlcihjb21tYW5kID0+IGNvbW1hbmQuVGFza1RhZyA9PT0gdGhpcy50YXNrSWQpKVxyXG4gICAgICAuc3Vic2NyaWJlKGNvbW1hbmQgPT4ge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiVGFzayBcIiArIGNvbW1hbmQuVGFza1RhZyArIFwiY29tbWFuZCBcIiArIGNvbW1hbmQuQ29tbWFuZFR5cGUpO1xyXG4gICAgICAgIHRoaXMuZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5zdWJzY3JpYmVJbnRlcmFjdGl2ZUNvbW1hbmRzID0gdGhpcy5tYWdpYy5pbnRlcmFjdGl2ZUNvbW1hbmRzXHJcbiAgICAgIC5waXBlKGZpbHRlcihjb21tYW5kID0+IGNvbW1hbmQuVGFza1RhZyA9PT0gdGhpcy50YXNrSWQpKVxyXG4gICAgICAuc3Vic2NyaWJlKGNvbW1hbmQgPT4ge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiVGFzayBcIiArIGNvbW1hbmQuVGFza1RhZyArIFwiY29tbWFuZCBcIiArIGNvbW1hbmQuQ29tbWFuZFR5cGUpO1xyXG4gICAgICAgIHRoaXMuZXhlY3V0ZUludGVyYWN0aXZlQ29tbWFuZChjb21tYW5kKTtcclxuICAgICAgfSk7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICByZWZyZXNoVmlldygpIHtcclxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcy5uZXh0KCcnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluc2VydCBhbiBldmVudCB0byB0aGUgTWFnaWMgV2ViQ2xpZW50IGV2ZW50IHF1ZXVlXHJcbiAgICogQHBhcmFtIGd1aUV2ZW50IFRoZSBldmVudCB0byBpbnNlcnRcclxuICAgKi9cclxuICBpbnNlcnRFdmVudChndWlFdmVudDogSUd1aUV2ZW50KTogdm9pZCB7XHJcbiAgICBndWlFdmVudC5UYXNrSUQgPSB0aGlzLnRhc2tJZDtcclxuICAgIHRoaXMubWFnaWMuaW5zZXJ0RXZlbnQoZ3VpRXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIEdldENvbnRyb2xQaWN0dXJlTWFzayhjb250cm9sTmFtZTogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLm1hZ2ljLkdldENvbnRyb2xQaWN0dXJlTWFzayh0aGlzLnRhc2tJZCwgY29udHJvbE5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdGVzIHRoZSBjb250cm9sIHZhbHVlLCB1c2luZyB0aGUgTWFnaWMgV2ViQ2xpZW50XHJcbiAgICogQHBhcmFtIGNvbnRyb2xOYW1lIElkIG9mIHZhbGlkYXRlZCBjb250cm9sXHJcbiAgICogQHBhcmFtIHZhbHVlIHZhbHVlIHRvIGJlIHZhbGlkYXRlZFxyXG4gICAqIEByZXR1cm5zIElmIHZhbGlkYXRpb24gZmFpbHMsIHJldHVybnMgZXJyb3IgbWVzc2FnZSwgZWxzZSByZXR1cm5zIG51bGxcclxuICAgKi9cclxuICBWYWxpZGF0ZUNvbnRyb2xWYWx1ZShjb250cm9sTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm1hZ2ljLlZhbGlkYXRlQ29udHJvbFZhbHVlKHRoaXMudGFza0lkLCBjb250cm9sTmFtZSwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIEdldFJhbmdlZFZhbHVlKGNvbnRyb2xOYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubWFnaWMuR2V0UmFuZ2VkVmFsdWUodGhpcy50YXNrSWQsIGNvbnRyb2xOYW1lLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgR2V0RmxkUmFuZ2VzKGNvbnRyb2xOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubWFnaWMuR2V0RmxkUmFuZ2VzKHRoaXMudGFza0lkLCBjb250cm9sTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiByZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IG9mIHRoZSBjb250cm9sXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtIHByb3AgUHJvcGVydHlcclxuICAgKiBAcGFyYW0gZ3VpUm93SWQgUm93IElkLCBpZiBhcHBsaWNhYmxlXHJcbiAgICogQHJldHVybnMgUHJvcGVydHkgdmFsdWVcclxuICAgKi9cclxuICBnZXRQcm9wZXJ0eShjb250cm9sSWQ6IHN0cmluZywgcHJvcDogSHRtbFByb3BlcnRpZXMsIGd1aVJvd0lkPzogc3RyaW5nKSB7XHJcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoZ3VpUm93SWQpKVxyXG4gICAgICBndWlSb3dJZCA9ICcwJztcclxuICAgIGlmICh0aGlzLklzU3R1YigpKVxyXG4gICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVN0dWIodGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLCBjb250cm9sSWQsIHByb3ApO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCByZWMgPSB0aGlzLlJlY29yZHMubGlzdFtndWlSb3dJZF07XHJcbiAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZChyZWMpKVxyXG4gICAgICAgIGRlYnVnZ2VyO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuUmVjb3Jkcy5saXN0W2d1aVJvd0lkXS5nZXRQcm9wZXJ0eShjb250cm9sSWQsIHByb3ApO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBnZXRQcm9wZXJ0eVN0dWIoQ29udHJvbHNQcm9wZXJ0aWVzOiBhbnksIGNvbnRyb2xJZCwgcHJvcCkge1xyXG4gICAgQ29udHJvbHNQcm9wZXJ0aWVzID0gQ29udHJvbHNQcm9wZXJ0aWVzLkNvbnRyb2xzUHJvcGVydGllcztcclxuICAgIGlmIChjb250cm9sSWQgaW4gQ29udHJvbHNQcm9wZXJ0aWVzKSB7XHJcbiAgICAgIGlmIChwcm9wIGluIENvbnRyb2xzUHJvcGVydGllc1tjb250cm9sSWRdLnByb3BlcnRpZXMpIHtcclxuICAgICAgICByZXR1cm4gQ29udHJvbHNQcm9wZXJ0aWVzW2NvbnRyb2xJZF0ucHJvcGVydGllc1twcm9wXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGdldFN0eWxlU3R1YihDb250cm9sc1Byb3BlcnRpZXM6IGFueSwgY29udHJvbElkLCBzdHlsZU5hbWU6IHN0cmluZykge1xyXG4gICAgQ29udHJvbHNQcm9wZXJ0aWVzID0gQ29udHJvbHNQcm9wZXJ0aWVzLkNvbnRyb2xzUHJvcGVydGllcztcclxuICAgIHJldHVybiBDb250cm9sc1Byb3BlcnRpZXNbY29udHJvbElkXS5zdHlsZXNNYXAuZ2V0KHN0eWxlTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIENTUyBjbGFzc2VzIHVzZWQgZm9yIHRoaXMgY29udHJvbFxyXG4gICAqIEBwYXJhbSBjb250cm9sSWQgSWQgb2YgY29udHJvbFxyXG4gICAqIEBwYXJhbSBndWlSb3dJZCBSb3cgSWQsIGlmIGFwcGxpY2FibGVcclxuICAgKiBAcmV0dXJucyBTdHJpbmcgY29udGFpbmluZyB0aGUgY2xhc3NlcyBjdXJyZW50bHkgZGVmaW5lZCBmb3IgdGhpcyBjb250cm9sXHJcbiAgICovXHJcbiAgZ2V0Q2xhc3Nlcyhjb250cm9sSWQ6IHN0cmluZywgZ3VpUm93SWQ/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGd1aVJvd0lkKSlcclxuICAgICAgZ3VpUm93SWQgPSAnMCc7XHJcbiAgICByZXR1cm4gdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLmdldENvbnRyb2xNZXRhZGF0YShjb250cm9sSWQpLmNsYXNzZXM7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiBhIHN0eWxlIHVzZWQgZm9yIGEgY29udHJvbFxyXG4gICAqIEBwYXJhbSBjb250cm9sSWQgSWQgb2YgY29udHJvbFxyXG4gICAqIEBwYXJhbSBzdHlsZU5hbWUgTmFtZSBvZiBzdHlsZVxyXG4gICAqIEBwYXJhbSBndWlSb3dJZCBSb3cgSWQsIGlmIGFwcGxpY2FibGVcclxuICAgKiBAcmV0dXJucyB2YWx1ZSBvZiBzdHlsZSBvZiB0aGUgY29udHJvbFxyXG4gICAqL1xyXG4gIGdldFN0eWxlKGNvbnRyb2xJZDogc3RyaW5nLCBzdHlsZU5hbWU6IHN0cmluZywgZ3VpUm93SWQ/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGd1aVJvd0lkKSlcclxuICAgICAgZ3VpUm93SWQgPSAnMCc7XHJcbiAgICBpZiAodGhpcy5Jc1N0dWIoKSlcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0U3R5bGVTdHViKHRoaXMuUmVjb3Jkcy5saXN0W2d1aVJvd0lkXSwgY29udHJvbElkLCBzdHlsZU5hbWUpO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBtYWdpY1ZhbHVlID0gdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLmdldENvbnRyb2xNZXRhZGF0YShjb250cm9sSWQpLnN0eWxlc01hcC5nZXQoc3R5bGVOYW1lKTtcclxuICAgICAgcmV0dXJuIFN0eWxlc01hcE1hbmFnZXIubWFnaWNWYWx1ZUdldFN0eWxlKHN0eWxlTmFtZSwgbWFnaWNWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIGEgY29udHJvbFxyXG4gICAqIEBwYXJhbSBjb250cm9sSWQgSWQgb2YgY29udHJvbFxyXG4gICAqIEBwYXJhbSBndWlSb3dJZCBSb3cgSWQsIGlmIGFwcGxpY2FibGVcclxuICAgKiBAcmV0dXJucyB2YWx1ZSBvZiB0aGUgY29udHJvbFxyXG4gICAqL1xyXG4gIGdldFZhbHVlKGNvbnRyb2xJZDogc3RyaW5nLCBndWlSb3dJZD86IHN0cmluZykge1xyXG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGd1aVJvd0lkKSlcclxuICAgICAgZ3VpUm93SWQgPSAnMCc7XHJcbiAgICByZXR1cm4gdGhpcy5SZWNvcmRzLmxpc3QubGVuZ3RoID4gK2d1aVJvd0lkID8gdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLnZhbHVlc1tjb250cm9sSWRdIDogJyc7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgdmFsdWUgb2YgYSBjb250cm9sXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtIGd1aVJvd0lkIFJvdyBJZCwgaWYgYXBwbGljYWJsZVxyXG4gICAqIEByZXR1cm5zIHZhbHVlIG9mIHRoZSBjb250cm9sXHJcbiAgICovXHJcbiAgZ2V0Rm9ybWF0dGVkVmFsdWUoY29udHJvbE5hbWU6IHN0cmluZywgdmFsOiBhbnkpOiBzdHJpbmcge1xyXG5cclxuICAgIHJldHVybiB0aGlzLm1hZ2ljLkdldEZvcm1hdHRlZFZhbHVlKHRoaXMudGFza0lkLCBjb250cm9sTmFtZSwgdmFsKTtcclxuIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgdmFsdWUgb2YgYSBjb250cm9sXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtIGd1aVJvd0lkIFJvdyBJZCwgaWYgYXBwbGljYWJsZVxyXG4gICAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byBzZXRcclxuICAgKi9cclxuICBzZXRWYWx1ZShjb250cm9sSWQ6IHN0cmluZywgZ3VpUm93SWQ6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgcmV0dXJuIHRoaXMuUmVjb3Jkcy5saXN0W2d1aVJvd0lkXS5zZXRWYWx1ZShjb250cm9sSWQsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZXhlY3V0ZUludGVyYWN0aXZlQ29tbWFuZChndWlJbnRlcmFjdGl2ZUNvbW1hbmQ6IEd1aUludGVyYWN0aXZlKVxyXG4gIHtcclxuICAgIEd1aUludGVyYWN0aXZlRXhlY3V0b3IuZXhlY3V0ZUludGVyYWN0aXZlQ29tbWFuZCh0aGlzLCBndWlJbnRlcmFjdGl2ZUNvbW1hbmQsIHRoaXMub3ZlcmxheVdpbmRvd1NlcnZpY2UpO1xyXG4gICAgdGhpcy5pbnRlcmFjdGl2ZUNvbW1hbmRzLm5leHQoZ3VpSW50ZXJhY3RpdmVDb21tYW5kKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGhhbmRsZVNldFByb3BlcnR5KGNvbW1hbmQ6IEd1aUNvbW1hbmQsIGlzVGFibGVDaGlsZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgbGV0IGNvbnRyb2xJZCA9IGNvbW1hbmQuQ3RybE5hbWU7XHJcbiAgICBsZXQgZHZSb3dJZDogbnVtYmVyID0gKGNvbW1hbmQubGluZSB8fCAwKTtcclxuICAgIGxldCBndWlSb3dJZDogbnVtYmVyID0gdGhpcy5nZXRHdWlSb3dJZChkdlJvd0lkLCBpc1RhYmxlQ2hpbGQpO1xyXG4gICAgbGV0IHByb3BlcnRpZXM6IENvbnRyb2xNZXRhZGF0YTtcclxuXHJcbiAgICBpZiAoY29tbWFuZC5PcGVyYXRpb24gPT09IEh0bWxQcm9wZXJ0aWVzLlNlbGVjdGVkUm93KSB7XHJcbiAgICAgIGlmIChjb21tYW5kLm9iajEgIT09IEd1aUNvbnN0YW50cy5OT19ST1dfU0VMRUNURUQpIHtcclxuICAgICAgICBndWlSb3dJZCA9IHRoaXMuZ2V0R3VpUm93SWQoY29tbWFuZC5vYmoxLCB0cnVlKTtcclxuICAgICAgICBwcm9wZXJ0aWVzID0gdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLmdldENvbnRyb2xNZXRhZGF0YShjb250cm9sSWQpO1xyXG4gICAgICAgIHByb3BlcnRpZXMucHJvcGVydGllcy5zZXQoY29tbWFuZC5PcGVyYXRpb24sIGNvbW1hbmQubGluZSk7XHJcbiAgICAgICAgdGhpcy50YWJsZVNlcnZpY2Uuc2VsZWN0Um93KGd1aVJvd0lkLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIHRoaXMuT25TZWxlY3RlZFJvd0NoYW5nZWQuZW1pdChndWlSb3dJZC50b1N0cmluZygpKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChjb21tYW5kLk9wZXJhdGlvbiA9PT0gSHRtbFByb3BlcnRpZXMuRW5hYmxlZCkge1xyXG4gICAgICBsZXQgYyA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woZ3VpUm93SWQudG9TdHJpbmcoKSwgY29udHJvbElkKTtcclxuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChjKSkge1xyXG4gICAgICAgIGlmIChjb21tYW5kLm9iajEpXHJcbiAgICAgICAgICBjLmVuYWJsZSgpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGMuZGlzYWJsZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHByb3BlcnRpZXMgPSB0aGlzLlJlY29yZHMubGlzdFtndWlSb3dJZF0uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCk7XHJcbiAgICAgIHByb3BlcnRpZXMucHJvcGVydGllcy5zZXQoY29tbWFuZC5PcGVyYXRpb24sIGNvbW1hbmQub2JqMSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwcm9wZXJ0aWVzID0gdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLmdldENvbnRyb2xNZXRhZGF0YShjb250cm9sSWQpO1xyXG4gICAgICBwcm9wZXJ0aWVzLnByb3BlcnRpZXMuc2V0KDxIdG1sUHJvcGVydGllcz5jb21tYW5kLk9wZXJhdGlvbiwgY29tbWFuZC5vYmoxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBleGVjdXRlQ29tbWFuZChjb21tYW5kOiBHdWlDb21tYW5kKTogdm9pZCB7XHJcbiAgICBsZXQgZHZSb3dJZDogbnVtYmVyID0gKGNvbW1hbmQubGluZSB8fCAwKTtcclxuICAgIGxldCBndWlSb3dJZDogbnVtYmVyID0gMDtcclxuICAgIGxldCBjb250cm9sSWQgPSBjb21tYW5kLkN0cmxOYW1lO1xyXG4gICAgbGV0IHByb3BlcnRpZXM6IENvbnRyb2xNZXRhZGF0YTtcclxuICAgIGxldCBpc1RhYmxlQ2hpbGQ6IGJvb2xlYW4gPSB0aGlzLmlzVGFibGVDb250cm9sKGNvbnRyb2xJZCk7XHJcblxyXG4gICAgLy8gRm9yIG5vbi1pbnB1dCB0eXBlIGNvbnRyb2xzIG9uIHRhYmxlLlxyXG4gICAgaWYgKGNvbW1hbmQub2JqICE9PSBudWxsKVxyXG4gICAgICBpc1RhYmxlQ2hpbGQgPSBpc1RhYmxlQ2hpbGQgfHwgY29tbWFuZC5vYmouSXNUYWJsZUNoaWxkO1xyXG5cclxuICAgIGd1aVJvd0lkID0gdGhpcy5nZXRHdWlSb3dJZChkdlJvd0lkLCBpc1RhYmxlQ2hpbGQpO1xyXG5cclxuICAgIHN3aXRjaCAoY29tbWFuZC5Db21tYW5kVHlwZSkge1xyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9JU19MT0dHRURfSU46XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9UQUJMRV9UT1BfSU5ERVg6XHJcbiAgICAgICAgdGhpcy50YWJsZVNlcnZpY2Uuc2V0VGFibGVUb3BJbmRleChjb21tYW5kLm51bWJlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuUkVGUkVTSF9UQVNLOlxyXG4gICAgICAgIHRoaXMudGFibGVTZXJ2aWNlLnJlZnJlc2hEYXRhU291cmNlKCk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5TRVRfVEFCTEVfSVRFTVNfQ09VTlQ6XHJcbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChjb21tYW5kLm51bWJlcikpIHtcclxuICAgICAgICAgIHRoaXMudGFibGVTZXJ2aWNlLnVwZGF0ZVRhYmxlU2l6ZShjb21tYW5kLm51bWJlcik7XHJcblxyXG4gICAgICAgICAgaWYgKGNvbW1hbmQubnVtYmVyID4gMCAmJiB0aGlzLlJlY29yZHMuc2l6ZVVwZGF0ZWQgJiZcclxuICAgICAgICAgICAgIXRoaXMuUmVjb3Jkcy5pc0VtcHR5RGF0YVZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWNvcmRzQ291bnRDaGFuZ2VTdWJqZWN0Lm5leHQoY29tbWFuZC5udW1iZXIpO1xyXG4gICAgICAgICAgICB0aGlzLlJlY29yZHMuc2l6ZVVwZGF0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9SRUNPUkRTX0JFRk9SRV9DVVJSRU5UX1ZJRVc6XHJcbiAgICAgICAgdGhpcy51cGRhdGVSZWNvcmRzQmVmb3JlQ3VycmVudFZpZXcoY29tbWFuZC5udW1iZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5DUkVBVEVfVEFCTEVfUk9XOlxyXG4gICAgICAgIGd1aVJvd0lkID0gdGhpcy5nZXRHdWlSb3dJZChjb21tYW5kLm51bWJlciwgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5idWlsZFRhYmxlUm93Q29udHJvbHMoZ3VpUm93SWQpO1xyXG4gICAgICAgIHRoaXMubWFya1Jvd0FzQ3JlYXRlZChndWlSb3dJZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9JU19ST1dfRURJVElORzpcclxuICAgICAgICBndWlSb3dJZCA9IHRoaXMuZ2V0R3VpUm93SWQoY29tbWFuZC5saW5lLCBjb21tYW5kLnZhbHVlKTtcclxuICAgICAgICB0aGlzLnN0YXJ0Um93RWRpdGluZyhndWlSb3dJZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9OT1RfSVNfUk9XX0VESVRJTkc6XHJcbiAgICAgICAgZ3VpUm93SWQgPSB0aGlzLmdldEd1aVJvd0lkKGNvbW1hbmQubGluZSwgY29tbWFuZC52YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zdG9wUm93RWRpdGluZyhndWlSb3dJZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5VTkRPX0NSRUFURV9UQUJMRV9ST1c6XHJcbiAgICAgICAgdGhpcy5tYXJrUm93QXNOb3RDcmVhdGVkKHRoaXMuZ2V0R3VpUm93SWQoY29tbWFuZC5udW1iZXIsIHRydWUpKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9UQUJMRV9JTkNMVURFU19GSVJTVDpcclxuICAgICAgICB0aGlzLnNldEluY2x1ZGVzRmlyc3QoY29tbWFuZC5Cb29sMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuU0VUX1RBQkxFX0lOQ0xVREVTX0xBU1Q6XHJcbiAgICAgICAgdGhpcy5zZXRJbmNsdWRlc0xhc3QoY29tbWFuZC5Cb29sMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5TRVRfUFJPUEVSVFk6XHJcbiAgICAgICAgdGhpcy5oYW5kbGVTZXRQcm9wZXJ0eShjb21tYW5kLCBpc1RhYmxlQ2hpbGQpO1xyXG4gICAgICAgIGlmIChjb21tYW5kLk9wZXJhdGlvbiA9PSBIdG1sUHJvcGVydGllcy5SZWFkT25seSlcclxuICAgICAgICAgIHRoaXMucmVmcmVzaERvbS5uZXh0KGNvbW1hbmQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5QUk9QX1NFVF9VU0VSX1BST1BFUlRZOlxyXG4gICAgICAgIHByb3BlcnRpZXMgPSB0aGlzLlJlY29yZHMubGlzdFtndWlSb3dJZF0uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCk7XHJcbiAgICAgICAgLy8gaWYgdGhlIHByb3BlcnR5IGhhcyBjaGFuZ2VkLCBzZXQgdGhlIHByb3BlcnR5IGFuZCByYWlzZSB0aGUgc3ViamVjdFxyXG4gICAgICAgIGlmKHByb3BlcnRpZXMudXNlclByb3BlcnRpZXMuZ2V0KGNvbW1hbmQuT3BlcmF0aW9uKSE9PSBjb21tYW5kLm9iajEpIHtcclxuICAgICAgICAgIHByb3BlcnRpZXMudXNlclByb3BlcnRpZXMuc2V0KGNvbW1hbmQuT3BlcmF0aW9uLCBjb21tYW5kLm9iajEpO1xyXG4gICAgICAgICAgLy8gdGhlIHByb3BlcnR5IG5hbWUgaXMgb2YgZm9ybWF0IDxjb250cm9sTmFtZT5+PHByb3BlcnR5TmFtZT5cclxuICAgICAgICAgIHRoaXMuY3VzdG9tUHJvcGVydGllc1N1YmplY3QubmV4dCh7IHByb3BlcnR5TmFtZTogY29udHJvbElkICsgJ34nICsgY29tbWFuZC5PcGVyYXRpb24sIHZhbHVlOiBjb21tYW5kLm9iajEsIHJvd0lkOiBndWlSb3dJZCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlBST1BfU0VUX0NVU1RPTV9WQUxJREFUT1I6IHtcclxuICAgICAgICAgIHByb3BlcnRpZXMgPSB0aGlzLlJlY29yZHMubGlzdFtndWlSb3dJZF0uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCk7XHJcblxyXG4gICAgICAgICAgbGV0IGNvbnRyb2wgPSB0aGlzLmdldEZvcm1Db250cm9sKGd1aVJvd0lkLnRvU3RyaW5nKCksIGNvbnRyb2xJZCk7XHJcbiAgICAgICAgICBpZiAoY29udHJvbCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHByb3BlcnRpZXMuY3VzdG9tVmFsaWRhdG9ycy5zZXQoY29tbWFuZC5PcGVyYXRpb24sIGNvbW1hbmQub2JqMSk7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sLnZhbGlkYXRvciAhPSBudWxsKVxyXG4gICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhbY29udHJvbC52YWxpZGF0b3IsIHRoaXMuY3VzdG9tVmFsaWRhdG9yKGd1aVJvd0lkLnRvU3RyaW5nKCksIGNvbnRyb2xJZCldKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLmN1c3RvbVZhbGlkYXRvcihndWlSb3dJZC50b1N0cmluZygpLCBjb250cm9sSWQpKTtcclxuXHJcbiAgICAgICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9DTEFTUzpcclxuICAgICAgICBwcm9wZXJ0aWVzID0gdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLmdldENvbnRyb2xNZXRhZGF0YShjb250cm9sSWQpO1xyXG4gICAgICAgIHByb3BlcnRpZXMuc2V0Q2xhc3MoY29tbWFuZC5PcGVyYXRpb24sIGNvbW1hbmQub2JqMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9TVFlMRTpcclxuICAgICAgICBwcm9wZXJ0aWVzID0gdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLmdldENvbnRyb2xNZXRhZGF0YShjb250cm9sSWQpO1xyXG4gICAgICAgIHByb3BlcnRpZXMuc2V0U3R5bGUoY29tbWFuZC5PcGVyYXRpb24sIGNvbW1hbmQub2JqMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9BVFRSSUJVVEU6XHJcbiAgICAgICAgcHJvcGVydGllcyA9IHRoaXMuUmVjb3Jkcy5saXN0WzBdLmdldENvbnRyb2xNZXRhZGF0YShjb250cm9sSWQpO1xyXG4gICAgICAgIHByb3BlcnRpZXMuZGF0YVR5cGUgPSA8U3RvcmFnZUF0dHJpYnV0ZT5TdHJpbmcuZnJvbUNoYXJDb2RlKGNvbW1hbmQubnVtYmVyKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgIENvbW1hbmRUeXBlLlNFVF9WQUxVRTpcclxuICAgICAgICB0aGlzLlJlY29yZHMubGlzdFtndWlSb3dJZF0udmFsdWVzW2NvbnRyb2xJZF0gPSBjb21tYW5kLnZhbHVlO1xyXG4gICAgICAgIGxldCBjID0gdGhpcy5nZXRGb3JtQ29udHJvbChndWlSb3dJZC50b1N0cmluZygpLCBjb250cm9sSWQpO1xyXG4gICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoYykpIHtcclxuICAgICAgICAgIGMuc2V0VmFsdWUodGhpcy5Db252ZXJ0VmFsRnJvbU5hdGl2ZShjb250cm9sSWQsIGNvbW1hbmQubGluZSwgY29tbWFuZC52YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLkNSRUFURV9TVUJfRk9STTpcclxuICAgICAgICB0aGlzLm1nU3ViZm9ybVNlcnZpY2UuYWRkU3ViZm9ybUNvbXAoY29tbWFuZC5DdHJsTmFtZSwgY29tbWFuZC51c2VyRHJvcEZvcm1hdC50b1N0cmluZygpLCBjb21tYW5kLnN0ciwgY29tbWFuZC5maWxlTmFtZSwgY29tbWFuZC5jb250ZXh0SUQsIGNvbW1hbmQucGFyYW1zLCBjb21tYW5kLkJvb2wxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuQ0xPU0VfU1VCX0ZPUk06XHJcbiAgICAgICAgdGhpcy5tZ1N1YmZvcm1TZXJ2aWNlLmRlbGV0ZVN1YmZvcm1Db21wKGNvbW1hbmQuQ3RybE5hbWUsIGNvbW1hbmQudXNlckRyb3BGb3JtYXQudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9FTVBUWV9EQVRBVklFVzpcclxuICAgICAgICB0aGlzLnNldElzRW1wdHlEYXRhVmlldyhjb21tYW5kLkJvb2wxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuU0VUX0ZPQ1VTOlxyXG4gICAgICAgIHRoaXMucmVmcmVzaERvbS5uZXh0KGNvbW1hbmQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIGN1c3RvbSB2YWxpZGF0b3JcclxuICAqL1xyXG4gIGN1c3RvbVZhbGlkYXRvcihyb3dpZDogc3RyaW5nLCBpZDogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG5cclxuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyA9PiB7XHJcbiAgICAgIGxldCBjb250cm9sTWV0YWRhdGE6IENvbnRyb2xNZXRhZGF0YTtcclxuICAgICAgY29udHJvbE1ldGFkYXRhID0gdGhpcy5SZWNvcmRzLmxpc3Rbcm93aWRdLmdldENvbnRyb2xNZXRhZGF0YShpZCk7XHJcbiAgICAgIGZvciAobGV0IGtleSBvZiBjb250cm9sTWV0YWRhdGEuY3VzdG9tVmFsaWRhdG9ycy5rZXlzKCkpIHtcclxuICAgICAgICBsZXQgdmFsaWRhdG9yID0gY29udHJvbE1ldGFkYXRhLmN1c3RvbVZhbGlkYXRvcnMuZ2V0KGtleSk7XHJcbiAgICAgICAgaWYgKCEoPEN1c3RvbVZhbGlkYXRvcj52YWxpZGF0b3IpLmlzVmFsaWQoKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHsgW2tleV06IHRydWUgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ09udmVydCBhIHZhbHVlIGZyb20gTWFnaWMgZm9ybWF0IHRvIG5hdGl2ZSBmb3JtYXRcclxuICAgKiBAcGFyYW0gY29udHJvbElkIElkIG9mIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gIHJvd0lkIFJvdyBJZCwgaWYgYXBwbGljYWJsZVxyXG4gICAqIEBwYXJhbSB2YWwgVmFsdWUgdG8gY29udmVydFxyXG4gICAqIEByZXR1cm5zIENvbnZlcnRlZCB2YWx1ZVxyXG4gICAqL1xyXG4gIENvbnZlcnRWYWxUb05hdGl2ZShjb250cm9sSWQ6IHN0cmluZywgcm93SWQ6IG51bWJlciwgdmFsOiBhbnkpOiBhbnkge1xyXG5cclxuICAgIGxldCBwcm9wZXJ0aWVzOiBDb250cm9sTWV0YWRhdGE7XHJcbiAgICBwcm9wZXJ0aWVzID0gdGhpcy5SZWNvcmRzLmxpc3RbMF0uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCk7XHJcblxyXG4gICAgc3dpdGNoIChwcm9wZXJ0aWVzLmRhdGFUeXBlKSB7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjoge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgbGV0IHJhbmdlczogc3RyaW5nID0gdGhpcy5HZXRGbGRSYW5nZXMoY29udHJvbElkKTtcclxuICAgICAgICAgIGxldCBmb3VuZDogbnVtYmVyID0gcmFuZ2VzLmluZGV4T2YoJywnKTtcclxuICAgICAgICAgIGxldCB0cnVlT3B0aW9uOiBzdHJpbmcgPSByYW5nZXMuc3Vic3RyKDAsIGZvdW5kKTtcclxuICAgICAgICAgIGxldCBmYWxzZU9wdGlvbjogc3RyaW5nID0gcmFuZ2VzLnN1YnN0cihmb3VuZCArIDEpO1xyXG4gICAgICAgICAgaWYgKE5TdHJpbmcuRXF1YWxzKHZhbCwgdHJ1ZU9wdGlvbiwgdHJ1ZSkpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgZWxzZSBpZiAoTlN0cmluZy5FcXVhbHModmFsLCBmYWxzZU9wdGlvbiwgdHJ1ZSkpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgIHJldHVybiB2YWw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKXtcclxuICAgICAgICBsZXQgaWR4ID0gdmFsLmluZGV4T2YoJzonLDApO1xyXG4gICAgICAgIGxldCBob3VyczogbnVtYmVyID0gK3ZhbC5zdWJzdHIoMCwgaWR4KTtcclxuICAgICAgICBsZXQgbWludXRlczogbnVtYmVyID0gK3ZhbC5zdWJzdHIoaWR4KzEsIDIpO1xyXG4gICAgICAgIGxldCBzZWNvbmRzID0gMDtcclxuICAgICAgICBpZiAodmFsLmxlbmd0aCA+IDUpIHtcclxuICAgICAgICAgIGlkeCA9IHZhbC5pbmRleE9mKCc6JywgaWR4ICsgMSk7XHJcbiAgICAgICAgICBpZiAoaWR4ID49IDApXHJcbiAgICAgICAgICAgIHNlY29uZHMgPSArdmFsLnN1YnN0cihpZHggKyAxLCAyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbC5pbmRleE9mKCdQTScpPjApXHJcbiAgICAgICAgICBob3VycyArPSAxMjtcclxuICAgICAgICBsZXQgZHQ6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGR0LnNldEhvdXJzKGhvdXJzKTtcclxuICAgICAgICBkdC5zZXRNaW51dGVzKG1pbnV0ZXMpO1xyXG4gICAgICAgIGR0LnNldFNlY29uZHMoc2Vjb25kcyk7XHJcblxyXG5cclxuICAgICAgICByZXR1cm4gZHQ7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgICByZXR1cm4gKHZhbCA9PT0gbnVsbCkgPyAwIDogdmFsO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0IGEgdmFsdWUgZnJvbSBuYXRpdmUgdG8gTWFnaWMgZm9ybWF0XHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtICByb3dJZCBSb3cgSWQsIGlmIGFwcGxpY2FibGVcclxuICAgKiBAcGFyYW0gdmFsIFZhbHVlIHRvIGNvbnZlcnRcclxuICAgKiBAcmV0dXJucyBDb252ZXJ0ZWQgdmFsdWVcclxuICAgKi9cclxuICBDb252ZXJ0VmFsRnJvbU5hdGl2ZShjb250cm9sSWQ6IHN0cmluZywgcm93SWQ6IG51bWJlciwgdmFsOiBhbnkpOiBhbnkge1xyXG5cclxuICAgIGxldCBwcm9wZXJ0aWVzOiBDb250cm9sTWV0YWRhdGE7XHJcbiAgICBwcm9wZXJ0aWVzID0gdGhpcy5SZWNvcmRzLmxpc3RbMF0uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCk7XHJcblxyXG4gICAgc3dpdGNoIChwcm9wZXJ0aWVzLmRhdGFUeXBlKSB7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRToge1xyXG4gICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICBsZXQgc3RyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICAgICAgICAgIGxldCBmb3JtYXQ6IHN0cmluZyA9IHZhbC5nZXRIb3VycygpID4gOSA/ICd7MH0nIDogJzB7MH0nO1xyXG4gICAgICAgICAgc3RyLkFwcGVuZEZvcm1hdChmb3JtYXQsIHZhbC5nZXRIb3VycygpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgc3RyLkFwcGVuZCgnOicpO1xyXG4gICAgICAgICAgZm9ybWF0ID0gdmFsLmdldE1pbnV0ZXMoKSA+IDkgPyAnezB9JyA6ICcwezB9JztcclxuICAgICAgICAgIHN0ci5BcHBlbmRGb3JtYXQoZm9ybWF0LCB2YWwuZ2V0TWludXRlcygpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgaWYgKCB2YWwuZ2V0U2Vjb25kcygpID4gMCkge1xyXG4gICAgICAgICAgICBzdHIuQXBwZW5kKCc6Jyk7XHJcbiAgICAgICAgICAgIGZvcm1hdCA9IHZhbC5nZXRTZWNvbmRzKCkgPiA5ID8gJ3swfScgOiAnMHswfSc7XHJcbiAgICAgICAgICAgIHN0ci5BcHBlbmRGb3JtYXQoZm9ybWF0LCB2YWwuZ2V0U2Vjb25kcygpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHN0ci5Ub1N0cmluZygpO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgfVxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjoge1xyXG4gICAgICAgIGxldCBwcm9wZXJ0aWVzOiBDb250cm9sTWV0YWRhdGE7XHJcbiAgICAgICAgcHJvcGVydGllcyA9IHRoaXMuUmVjb3Jkcy5saXN0WycwJ10uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdib29sZWFuJyAmJiBwcm9wZXJ0aWVzLnJhbmdlVmFsaWRhdG9yKSB7XHJcbiAgICAgICAgICBsZXQgcmFuZ2VzOiBzdHJpbmcgPSB0aGlzLkdldEZsZFJhbmdlcyhjb250cm9sSWQpO1xyXG4gICAgICAgICAgbGV0IGZvdW5kOiBudW1iZXIgPSByYW5nZXMuaW5kZXhPZignLCcpO1xyXG4gICAgICAgICAgbGV0IHRydWVPcHRpb246IHN0cmluZyA9IHJhbmdlcy5zdWJzdHIoMCwgZm91bmQpO1xyXG4gICAgICAgICAgbGV0IGZhbHNlT3B0aW9uOiBzdHJpbmcgPSByYW5nZXMuc3Vic3RyKGZvdW5kICsgMSk7XHJcbiAgICAgICAgICBpZiAodmFsKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZU9wdGlvbjtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlT3B0aW9uO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIHJlc2l6ZSBhbmQgYWxzbyBmZXRjaCBjaHVuayBvZiByZWNvcmRzIGlmIGhhdmluZyBhbiBlbXB0eSB2aWV3LlxyXG4gICAqIEBpZ25vcmVcclxuICAgKiBAcGFyYW0gcGFnZVNpemUgOiBQYWdlU2l6ZVxyXG4gICAqIEBwYXJhbSB0b3BHdWlSb3dJZCA6IEd1aVJvd0lkIG9mIGZpcnN0IHJlY29yZCBpbiB2aWV3LlxyXG4gICAqL1xyXG4gICByZXNpemUocGFnZVNpemU6IG51bWJlciwgdG9wR3VpUm93SWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgbGV0IGd1aUV2ZW50OiBJR3VpRXZlbnQgPSBnZXRHdWlFdmVudE9iaigncmVzaXplJywgJ3RhYmxlJywgMCk7XHJcbiAgICBndWlFdmVudC5QYWdlU2l6ZSA9IHBhZ2VTaXplO1xyXG5cclxuICAgIC8vQXMgJ2dldFJvd3MnIGV2ZW50IGFsc28gZ2V0cyBleGVjdXRlZCwgc2V0IHRoZSBndWlFdmVudC5MaW5lIHBhcmFtZXRlci5cclxuICAgIGd1aUV2ZW50LkxpbmUgPSB0b3BHdWlSb3dJZDtcclxuICAgIHRoaXMuaW5zZXJ0RXZlbnQoZ3VpRXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyBkYXRhIGZvciBuZXcgdGFibGUgcm93cyB3aGVuIHNjcm9sbGluZyBkb25lXHJcbiAgICovXHJcbiAgb25TY3JvbGxEb3duKCkge1xyXG4gICAgaWYgKCF0aGlzLlJlY29yZHMuaW5jbHVkZXNMYXN0KSB7XHJcbiAgICAgIGxldCBndWlFdmVudDogSUd1aUV2ZW50ID0gZ2V0R3VpRXZlbnRPYmooJ2dldFJvd3MnLCAndGFibGUnLCAwKTtcclxuICAgICAgZ3VpRXZlbnQuTGluZSA9IHRoaXMuZm9ybUdyb3Vwcy5sZW5ndGg7XHJcbiAgICAgIHRoaXMuaW5zZXJ0RXZlbnQoZ3VpRXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgbmV3IGJyb3dzZXIgd2luZG93IHRpdGxlXHJcbiAgICogQHBhcmFtIG5ld1RpdGxlIE5ldyB3aW5kb3cgdGl0bGVcclxuICAgKi9cclxuICBzZXRUaXRsZShuZXdUaXRsZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm1nVGl0bGVTZXJ2aWNlLnNldFRpdGxlKG5ld1RpdGxlKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgZ2V0R3VpUm93SWQoZHZSb3dJZDogbnVtYmVyLCBpc1RhYmxlQ29udHJvbDogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKGlzVGFibGVDb250cm9sID8gZHZSb3dJZCArIHRoaXMuUmVjb3Jkcy5yZWNvcmRzQmVmb3JlQ3VycmVudFZpZXcgOiAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGdldER2Um93SWQoZ3VpUm93SWQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKGd1aVJvd0lkIC0gdGhpcy5SZWNvcmRzLnJlY29yZHNCZWZvcmVDdXJyZW50Vmlldyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhbiB1cCB0aGUgc2VydmljZSB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWRcclxuICAgKi9cclxuICBkaXNwb3NlKCkge1xyXG4gICAgIHRoaXMucmVmcmVzaERvbS5jb21wbGV0ZSgpO1xyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLnN1YnNjcmliZUludGVyYWN0aXZlQ29tbWFuZHMudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlUmVmcmVzaERvbS51bnN1YnNjcmliZSgpO1xyXG4gICAgIHRoaXMuaW50ZXJhY3RpdmVDb21tYW5kcy5jb21wbGV0ZSgpO1xyXG4gICAgIHRoaXMuY3VzdG9tUHJvcGVydGllc1N1YmplY3QuY29tcGxldGUoKTtcclxuICAgICB0aGlzLk9uU2VsZWN0ZWRSb3dDaGFuZ2VkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgLy9FdmVudHM6XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSB0aGUgQ29tYm9ib3ggXCJjaGFuZ2VcIiBldmVudFxyXG4gICAqIEBwYXJhbSBldmVudCAgVGhlIGV2ZW50IHJlY2VpdmVkIGZyb20gdGhlIFVJXHJcbiAgICogQHBhcmFtIGlkeCBJZCBvZiB0aGUgY29udHJvbCByYWlzaW5nIHRoZSBldmVudFxyXG4gICAqIEBwYXJhbSBsaW5lIFJvdyBJZCwgaWYgYXBwbGljYWJsZVxyXG4gICAqL1xyXG4gIG9uQ29tYm9ib3hTZWxlY3Rpb25DaGFuZ2VkKGV2ZW50OiBFdmVudCwgaWR4OiBzdHJpbmcsIGxpbmU6IG51bWJlcikge1xyXG4gICAgbGV0IGd1aUV2ZW50OiBJR3VpRXZlbnQgPSBnZXRHdWlFdmVudE9iaignc2VsZWN0aW9uY2hhbmdlZCcsIGlkeCwgbGluZSk7XHJcblxyXG4gICAgaWYgKHR5cGVvZiAoZXZlbnQpID09ICdudW1iZXInKSB7XHJcbiAgICAgICAgZ3VpRXZlbnQuVmFsdWUgPSBldmVudDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoZXZlbnQudGFyZ2V0KSkge1xyXG4gICAgICAgICAgICBsZXQgaW5kZXhlczogbnVtYmVyW10gPSBuZXcgQXJyYXk8bnVtYmVyPigoPGFueT5ldmVudC50YXJnZXQpLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGgpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICg8YW55PmV2ZW50LnRhcmdldCkuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpbmRleGVzW2ldID0gKDxIVE1MT3B0aW9uRWxlbWVudD4oPGFueT5ldmVudC50YXJnZXQpLnNlbGVjdGVkT3B0aW9uc1tpXSkuaW5kZXg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ3VpRXZlbnQuVmFsdWUgPSBpbmRleGVzLmpvaW4oJywnKTtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgZ3VpRXZlbnQuVmFsdWUgPSAoPGFueT5ldmVudCkudmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbnNlcnRFdmVudChndWlFdmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgdGhlIExpc3Rib3ggXCJjaGFuZ2VcIiBldmVudFxyXG4gICAqIEBwYXJhbSAgZXZlbnQgVGhlIGV2ZW50IHJlY2VpdmVkIGZyb20gdGhlIFVJXHJcbiAgICogQHBhcmFtIGlkeCBJZCBvZiB0aGUgY29udHJvbCByYWlzaW5nIHRoZSBldmVudFxyXG4gICAqL1xyXG4gIG9uTGlzdEJveFNlbGVjdGlvbkNoYW5nZWQoZXZlbnQ6IEV2ZW50LCBpZHg6IHN0cmluZykge1xyXG4gICAgbGV0IGd1aUV2ZW50OiBJR3VpRXZlbnQgPSBnZXRHdWlFdmVudE9iaignc2VsZWN0aW9uY2hhbmdlZCcsIGlkeCwgMCk7XHJcblxyXG4gICAgbGV0IHNlbGVjdGVkT3B0aW9ucztcclxuICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoZXZlbnQudGFyZ2V0KSlcclxuICAgICAgc2VsZWN0ZWRPcHRpb25zID0gKDxhbnk+ZXZlbnQudGFyZ2V0KS5zZWxlY3RlZE9wdGlvbnM7XHJcbiAgICBlbHNlXHJcbiAgICAgIHNlbGVjdGVkT3B0aW9ucyA9ICg8YW55PmV2ZW50KS5zb3VyY2Uuc2VsZWN0ZWRPcHRpb25zLnNlbGVjdGVkO1xyXG5cclxuICAgIGxldCBsZW5ndGggPSBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoO1xyXG4gICAgbGV0IGluZGV4ZXM6IG51bWJlcltdID0gbmV3IEFycmF5PG51bWJlcj4obGVuZ3RoKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoZXZlbnQudGFyZ2V0KSlcclxuICAgICAgICBpbmRleGVzW2ldID0gKHNlbGVjdGVkT3B0aW9uc1tpXSkuaW5kZXg7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBpbmRleGVzW2ldID0gKHNlbGVjdGVkT3B0aW9uc1tpXSkudmFsdWU7XHJcbiAgICB9XHJcbiAgICBndWlFdmVudC5WYWx1ZSA9IDxhbnk+aW5kZXhlczsgLy8gVE9ETzogZml4XHJcbiAgICB0aGlzLmluc2VydEV2ZW50KGd1aUV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSB0aGUgQ2hlY2tib3ggXCJjaGFuZ2VcIiBldmVudFxyXG4gICAqIEBwYXJhbSAgZXZlbnQgVGhlIGV2ZW50IHJlY2VpdmVkIGZyb20gdGhlIFVJXHJcbiAgICogQHBhcmFtIGlkeCBJZCBvZiB0aGUgY29udHJvbCByYWlzaW5nIHRoZSBldmVudFxyXG4gICAqIEBwYXJhbSAgcm93SWQgUm93IElkLCBpZiBhcHBsaWNhYmxlXHJcbiAgICovXHJcbiAgb25DaGVja0NoYW5nZWQoZXZlbnQ6IEV2ZW50LCBpZHg6IHN0cmluZywgcm93SWQ6IG51bWJlcikge1xyXG4gICAgaWYgKHR5cGVvZiByb3dJZCA9PT0gJ3VuZGVmaW5lZCcpXHJcbiAgICAgIHJvd0lkID0gMDtcclxuICAgIGxldCBndWlFdmVudDogSUd1aUV2ZW50ID0gZ2V0R3VpRXZlbnRPYmooJ3NlbGVjdGlvbmNoYW5nZWQnLCBpZHgsIHJvd0lkKTtcclxuXHJcbiAgICBpZiAodHlwZW9mIChldmVudCkgPT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgZ3VpRXZlbnQuVmFsdWUgPSBldmVudDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnQudGFyZ2V0ID09PSAndW5kZWZpbmVkJylcclxuICAgICAgICAgICAgZ3VpRXZlbnQuVmFsdWUgPSAoPGFueT4oZXZlbnQpKS5jaGVja2VkO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgZ3VpRXZlbnQuVmFsdWUgPSAoPGFueT4oZXZlbnQudGFyZ2V0KSkuY2hlY2tlZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluc2VydEV2ZW50KGd1aUV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSB0YWIgc2VsZWN0aW9uIGNoYW5nZSwgY2F1c2VkIGJ5IFVJIGV2ZW50c1xyXG4gICAqIEBwYXJhbSBpZHggSWQgb2YgdGhlIGNvbnRyb2wgcmFpc2luZyB0aGUgZXZlbnRcclxuICAgKiBAcGFyYW0gIGxheWVyIElkIG9mIHNlbGVjdGVkIHRhYnBhZ2VcclxuICAgKi9cclxuICBtZ09uVGFiU2VsZWN0aW9uQ2hhbmdlZChpZHg6IHN0cmluZywgbGF5ZXI6IG51bWJlcikge1xyXG4gICAgbGV0IGd1aUV2ZW50OiBJR3VpRXZlbnQgPSBnZXRHdWlFdmVudE9iaignc2VsZWN0aW9uY2hhbmdlZCcsIGlkeCwgMCk7XHJcbiAgICBndWlFdmVudC5WYWx1ZSA9IGxheWVyLnRvU3RyaW5nKCk7XHJcbiAgICB0aGlzLmluc2VydEV2ZW50KGd1aUV2ZW50KTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgdGhlIFJhZGlvIGJ1dHRvbiBcImNoYW5nZVwiIGV2ZW50XHJcbiAgICogQHBhcmFtICBldmVudCBUaGUgZXZlbnQgcmVjZWl2ZWQgZnJvbSB0aGUgVUlcclxuICAgKiBAcGFyYW0gaWR4IElkIG9mIHRoZSBjb250cm9sIHJhaXNpbmcgdGhlIGV2ZW50XHJcbiAgICovXHJcbiAgbWdPblJhZGlvU2VsZWN0aW9uQ2hhbmdlZChldmVudDogRXZlbnQsIGlkeDogc3RyaW5nKSB7XHJcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5nZXRGb3JtQ29udHJvbCgnMCcsIGlkeCk7XHJcbiAgICBsZXQgZ3VpRXZlbnQ6IElHdWlFdmVudCA9IGdldEd1aUV2ZW50T2JqKCdzZWxlY3Rpb25jaGFuZ2VkJywgaWR4LCAwKTtcclxuICAgIGlmKHR5cGVvZiByZXN1bHQudmFsdWUgIT09ICdzdHJpbmcnKVxyXG4gICAgICBndWlFdmVudC5WYWx1ZSA9IHJlc3VsdC52YWx1ZS5pbmRleDtcclxuICAgIGVsc2VcclxuICAgICAgZ3VpRXZlbnQuVmFsdWUgPSAgcmVzdWx0LnZhbHVlO1xyXG4gICAgdGhpcy5pbnNlcnRFdmVudChndWlFdmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbnNlcnRzIHRoZSBcImNsb3NlXCIgZXZlbnQgdG8gdGhlIG1hZ2ljIFdlYkNsaWVudCBldmVudCBxdWV1ZVxyXG4gICAqL1xyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5pbnNlcnRFdmVudChnZXRHdWlFdmVudE9iaignY2xvc2UnLCBudWxsLCAwKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIElzU3R1YigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1hZ2ljLmlzU3R1YjtcclxuXHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIC8vL1N0dWIgaGFuZGxpbmdcclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAganNvbkRhdGE6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHNhdmVEYXRhKGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5tYWdpYy5zYXZlRGF0YShkYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwdWJsaWMgY3JlYXRlRGF0YSgpIHtcclxuICAgIGxldCBteURhdGEgPSB7XHJcbiAgICAgIHJlY29yZHM6IHRoaXMuUmVjb3JkcyxcclxuICAgICAgdGVtcGxhdGU6IHRoaXMudGVtcGxhdGVcclxuICAgIH07XHJcbiAgICBsZXQgdGV4dDogc3RyaW5nID0gJ2xvYWREYXRhKCk6YW55ICAge1xcbicgK1xyXG4gICAgICAnICAgIGxldCBzdHViRGF0YSA9ICcgKyBKU09OLnN0cmluZ2lmeShteURhdGEpICsgJztcXG4nICtcclxuICAgICAgJyAgICB0aGlzLmxvYWRTdHViRGF0YShzdHViRGF0YSk7fSc7XHJcbiAgICBjb25zb2xlLmxvZyh0ZXh0KTtcclxuICAgIHRoaXMuc2F2ZURhdGEodGV4dCk7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBsb2FkU3R1YkRhdGEoc3R1YkRhdGE6IGFueSkge1xyXG5cclxuICAgIHRoaXMuUmVjb3JkcyA9IHN0dWJEYXRhLnJlY29yZHM7XHJcbiAgICB0aGlzLnNldHRlbXBsYXRlKHN0dWJEYXRhLnRlbXBsYXRlKTtcclxuICAgIHRoaXMudGFza0lkID0gJzEnO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLlJlY29yZHMubGlzdC5sZW5ndGg7IGkrKylcclxuICAgICAgdGhpcy5idWlsZFRhYmxlUm93Q29udHJvbHMoaSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcHVibGljIGxvYWREYXRhKCkge1xyXG4gICAgYWxlcnQoJ1BsZWFzZSwgb3ZlcndyaXRlIG1ldGhvZCBsb2FkRGF0YScpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHNldFN0dWJWYWx1ZShndWlSb3dJZDogbnVtYmVyLCBmYzogRm9ybUNvbnRyb2wsIG5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuSXNTdHViKCkpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBsZXQgdmFsID0gdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLnZhbHVlc1tuYW1lXTtcclxuICAgICAgICBmYy5zZXRWYWx1ZSh2YWwpO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEVuZCBvZiBzdHViIGhhbmRsaW5cclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG59XHJcblxyXG4iXX0=
611
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay5tYWdpY3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL3NlcnZpY2VzL3Rhc2subWFnaWNzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFrQixXQUFXLEVBQUUsU0FBUyxFQUFnQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3RHLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBRTNDLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVwRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQWtCLE9BQU8sRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxXQUFXLEVBQStCLFlBQVksRUFBa0IsY0FBYyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEgsT0FBTyxFQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUMsY0FBYyxFQUFZLE1BQU0sbUJBQW1CLENBQUM7QUFJNUQsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDcEUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7Ozs7QUFNNUQsTUFBTSxPQUFPLGdCQUFnQjtJQXFGM0IsWUFBc0IsS0FBeUIsRUFBVSxvQkFBMEM7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LE1BQU0sRUFBRSxDQUFDLEVBQUU7WUFDL0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFLTSxRQUFRO1FBQ2IsS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUtELFlBQVksQ0FBQyxRQUFnQixFQUFFLEVBQWUsRUFBRSxJQUFZO1FBQzFELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2pCLElBQUk7Z0JBQ0YsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuRCxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2xCO1lBQUMsT0FBTyxDQUFDLEVBQUU7YUFDWDtTQUNGO0lBQ0gsQ0FBQzs7Z0ZBdmhDVSxnQkFBZ0I7d0RBQWhCLGdCQUFnQixXQUFoQixnQkFBZ0I7b0NBQWhCLGdCQUFnQjtjQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtFdmVudEVtaXR0ZXIsIEluamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtmaWx0ZXJ9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHtpc051bGxPclVuZGVmaW5lZCwgaXNVbmRlZmluZWR9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHtTdHlsZXNNYXBNYW5hZ2VyfSBmcm9tICcuL1N0eWxlc01hcE1hbmFnZXInO1xyXG5cclxuaW1wb3J0IHtFbmdpbmVNYWdpY1NlcnZpY2V9IGZyb20gJy4vZW5naW5lLm1hZ2ljLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NvbnRyb2xNZXRhZGF0YSwgUmVjb3Jkc30gZnJvbSAnLi4vY29udHJvbHMubWV0YWRhdGEubW9kZWwnO1xyXG5pbXBvcnQge0NvbW1hbmRUeXBlLCBDdXN0b21WYWxpZGF0b3IsIEd1aUNvbW1hbmQsIEd1aUNvbnN0YW50cywgR3VpSW50ZXJhY3RpdmUsIEh0bWxQcm9wZXJ0aWVzfSBmcm9tICdAbWFnaWMteHBhL2d1aSc7XHJcblxyXG5pbXBvcnQge05TdHJpbmcsIFN0cmluZ0J1aWxkZXJ9IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHtTdG9yYWdlQXR0cmlidXRlfSBmcm9tICdAbWFnaWMteHBhL3V0aWxzJztcclxuaW1wb3J0IHtnZXRHdWlFdmVudE9iaiwgSUd1aUV2ZW50fSBmcm9tICdAbWFnaWMteHBhL2VuZ2luZSc7XHJcbmltcG9ydCB7U3ViZm9ybU1hZ2ljU2VydmljZX0gZnJvbSAnLi9zdWJmb3JtLm1hZ2ljLnNlcnZpY2UnO1xyXG5pbXBvcnQge1RpdGxlTWFnaWNTZXJ2aWNlfSBmcm9tICcuL3RpdGxlLm1hZ2ljLnNlcnZpY2UnO1xyXG5pbXBvcnQge0FjY2Vzc29yTWFnaWNTZXJ2aWNlfSBmcm9tICcuL2FjY2Vzc29yLm1hZ2ljLnNlcnZpY2UnO1xyXG5pbXBvcnQge0d1aUludGVyYWN0aXZlRXhlY3V0b3J9IGZyb20gJy4uL3VpL0d1aUludGVyYWN0aXZlRXhlY3V0b3InO1xyXG5pbXBvcnQge092ZXJsYXlXaW5kb3dTZXJ2aWNlfSBmcm9tICcuL092ZXJsYXlXaW5kb3dTZXJ2aWNlJztcclxuXHJcbi8qKlxyXG4gKiBNYWluIHNlcnZpY2UgdG8gY29ubmVjdCB0aGUgVUkgd2l0aCB0aGUgTWFnaWMgV2ViQ0xpZW50XHJcbiAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBUYXNrTWFnaWNTZXJ2aWNlIHtcclxuXHJcbiAgLyoqXHJcbiAgICogU2VydmljZSB0byBwcm92aWRlIHRhYmxlLXJlbGF0ZWQgZnVuY3Rpb25hbGl0aWVzXHJcbiAgICovXHJcbiAgcHVibGljIHRhYmxlU2VydmljZTogYW55O1xyXG4gIC8qKlxyXG4gICAqIENvbGxlY3Rpb24gb2YgZGF0YSBmb3IgYWxsIGNvbnRyb2xzXHJcbiAgICovXHJcbiAgUmVjb3JkczogYW55ID0gbmV3IFJlY29yZHMoKTtcclxuICAvKipcclxuICAgKiBGb3JtR3JvdXAgY29sbGVjdGlvbiBmb3IgbGluZSBtb2RlXHJcbiAgICovXHJcbiAgZm9ybUdyb3VwczogQXJyYXk8Rm9ybUdyb3VwPiA9IFtdO1xyXG4gIC8qKlxyXG4gICAqIEZvcm1Hcm91cCBmb3IgYWxsIGNvbnRyb2xzIGluIHNjcmVlbiBtb2RlXHJcbiAgICovXHJcbiAgU2NyZWVuTW9kZUNvbnRyb2xzOiBGb3JtR3JvdXA7XHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHJlZnJlc2hEb206IFN1YmplY3Q8R3VpQ29tbWFuZD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBzdWJzY3JpYmVSZWZyZXNoRG9tOiBTdWJzY3JpcHRpb247XHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGRldGVjdENoYW5nZXM6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHN1YnNjcmliZUludGVyYWN0aXZlQ29tbWFuZHM6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGludGVyYWN0aXZlQ29tbWFuZHM6IFN1YmplY3Q8R3VpSW50ZXJhY3RpdmU+PSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICogVGhpcyBldmVudCBpcyBlbWl0dGVkIHdoZW4gdGhlIHNlbGVjdGVkIHJvdyBpbiBhIHRhYmxlIGNoYW5nZXMuXHJcbiAgICovXHJcbiAgT25TZWxlY3RlZFJvd0NoYW5nZWQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBjdXN0b21Qcm9wZXJ0aWVzU3ViamVjdDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICByZWNvcmRzQ291bnRDaGFuZ2VTdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcHVibGljIHRlbXBsYXRlOiB7IFtpZDogc3RyaW5nXTogc3RyaW5nOyB9O1xyXG4gIC8qKlxyXG4gICAqIFNlcnZpY2UgdG8gcHJvdmlkZSBzdWJmb3JtLXJlbGF0ZWQgZnVuY3Rpb25hbGl0aWVzXHJcbiAgICovXHJcbiAgcHVibGljIG1nU3ViZm9ybVNlcnZpY2U6IFN1YmZvcm1NYWdpY1NlcnZpY2U7XHJcbiAgLyoqXHJcbiAgICogU2VydmljZSB0byBwcm92aWRlIHRoZSB0aXRsZS1jaGFuZ2UgZnVuY3Rpb25hbGl0eVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtZ1RpdGxlU2VydmljZTogVGl0bGVNYWdpY1NlcnZpY2U7XHJcbiAgLyoqXHJcbiAgICogU2VydmljZSB3aGljaCBlbmFibGVzIGdldHRpbmcvc2V0dGluZyB2YWx1ZXMgZnJvbS90byB0aGUgTWFnaWMgV2ViQ2xpZW50IGVuZ2luZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBtZ0FjY2Vzc29yU2VydmljZTogQWNjZXNzb3JNYWdpY1NlcnZpY2U7XHJcblxyXG4gIHB1YmxpYyBtZ0lucHV0RGF0ZUZvcm1hdDtcclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIG9sZFBhZ2VTaXplID0gMDtcclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gIG1hZ2ljXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIG1hZ2ljOiBFbmdpbmVNYWdpY1NlcnZpY2UsIHByaXZhdGUgb3ZlcmxheVdpbmRvd1NlcnZpY2U6IE92ZXJsYXlXaW5kb3dTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLlJlY29yZHMuc2V0R3VpVG9wSW5kZXgoMCk7XHJcbiAgICB0aGlzLm1nSW5wdXREYXRlRm9ybWF0ID0gbnVsbDtcclxuICB9XHJcblxyXG4gICAvKipcclxuICAgKiByZXR1cm5zIHRydWUgaWYgdXNlZCBpcyBsb2dnZWQgaW5cclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRJc0xvZ2dlbkluKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubWFnaWMuZ2V0SXNMb2dnZWRJbigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSWQgb2YgdGFzayB0byB3aGljaCB0aGlzIHNlcnZpY2UgcmVmZXJzXHJcbiAgICovXHJcbiAgX3Rhc2tJZDogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiByZXR1cm5zIHRoZSB0YXNrIElkXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBnZXQgdGFza0lkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Rhc2tJZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHRhc2sgSWRcclxuICAgKiBAcGFyYW0gdmFsdWUgdGhlIHRhc2sgaWQgdG8gc2V0XHJcbiAgICovXHJcbiAgc2V0IHRhc2tJZCh2YWx1ZSkge1xyXG4gICAgLy8gZGVidWdnZXI7XHJcbiAgICB0aGlzLl90YXNrSWQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHRhc2sncyBkYXRhIGluIFNjcmVlbiBtb2RlXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBnZXQgU2NyZWVuQ29udHJvbHNEYXRhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuUmVjb3Jkcy5saXN0WycwJ107XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgc2V0dGVtcGxhdGUodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy50ZW1wbGF0ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEJ1aWxkcyB0aGUgRm9ybUNvbnRyb2wgZm9yIGVhY2ggYW5kIGV2ZXJ5IGNvbnRyb2xcclxuICAgKi9cclxuICBidWlsZFNjcmVlbk1vZGVDb250cm9scygpIHtcclxuICAgIGNvbnN0IGdyb3VwOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMudGVtcGxhdGUpIHtcclxuXHJcbiAgICAgIGlmICh0aGlzLnRlbXBsYXRlW2tleV0gPT0gJzAnKSB7XHJcbiAgICAgICAgbGV0IGZjID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuICAgICAgICB0aGlzLnNldFN0dWJWYWx1ZSgwLCBmYywga2V5KTtcclxuICAgICAgICBncm91cC5hZGRDb250cm9sKGtleSwgZmMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5TY3JlZW5Nb2RlQ29udHJvbHMgPSBncm91cDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIElzIHRoZSBjb250cm9sIGEgdGFibGUgY29udHJvbFxyXG4gICAqIEBwYXJhbSBpZCBJZCBvZiB0aGUgY29udHJvbFxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgaXNUYWJsZUNvbnRyb2woaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVbaWRdID09ICcxJztcclxuICB9XHJcblxyXG4gIGdldE1nSW5wdXREYXRlRm9ybWF0KCk6IHN0cmluZyB7cmV0dXJuIHRoaXMubWdJbnB1dERhdGVGb3JtYXQ7fVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBGb3JtQ29udHJvbCBvZiBhIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gZ3VpUm93aWQgSWQgb2YgdGhlIHJlcXVlc3RlZCByb3dcclxuICAgKiBAcGFyYW0gaWQgSWQgb2YgdGhlIGNvbnRyb2xcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGdldEZvcm1Db250cm9sKGd1aVJvd2lkOiBzdHJpbmcsIGlkOiBzdHJpbmcpOiBBYnN0cmFjdENvbnRyb2wge1xyXG4gICAgbGV0IGM6IEFic3RyYWN0Q29udHJvbDtcclxuICAgIGxldCBncm91cDogRm9ybUdyb3VwID0gdGhpcy5pc1RhYmxlQ29udHJvbChpZCkgPyB0aGlzLmZvcm1Hcm91cHNbZ3VpUm93aWRdIDogdGhpcy5TY3JlZW5Nb2RlQ29udHJvbHM7XHJcbiAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGdyb3VwKSkge1xyXG4gICAgICBncm91cC5nZXQoaWQpO1xyXG4gICAgICBjID0gZ3JvdXAuY29udHJvbHNbaWRdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBoYW5kbGUgdGhlIGNoYW5nZSBvZiB0ZXh0IGZvciBpbnB1dCBjb250cm9sIGluc2lkZSB0YWJsZVxyXG4gICAqIEBwYXJhbSAgZ3VpUm93SWQgSWQgb2YgdGhlIHJvdyBmb3Igd2hpY2ggdGhlIEZvcm1Db250cm9scyBhcmUgYnVpbHRcclxuICAgKiBzZXQgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgZm9ybWNvbnRyb2xcclxuICAgKi9cclxuICBzZXRJbnB1dFRleHRWYWx1ZShjb250cm9sSWQ6IHN0cmluZywgZ3VpUm93aWQ6IHN0cmluZywgdmFsOiBhbnkpIHtcclxuICAgIHRoaXMuc2V0VmFsdWUoY29udHJvbElkLCBndWlSb3dpZCwgdGhpcy5Db252ZXJ0VmFsVG9OYXRpdmUoY29udHJvbElkLCAwLCB2YWwpKTtcclxuXHJcbiAgICBjb25zdCBmYyA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woZ3VpUm93aWQsIGNvbnRyb2xJZCk7XHJcbiAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHZhbCkpXHJcbiAgICAgIGZjLnNldFZhbHVlKHZhbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBCdWlsZCB0aGUgRm9ybUNvbnRyb2xzIGZvciBhIHRhYmxlIHJvd1xyXG4gICAqIEBwYXJhbSAgZ3VpUm93SWQgSWQgb2YgdGhlIHJvdyBmb3Igd2hpY2ggdGhlIEZvcm1Db250cm9scyBhcmUgYnVpbHRcclxuICAgKi9cclxuICBidWlsZFRhYmxlUm93Q29udHJvbHMoZ3VpUm93SWQ6IG51bWJlcikge1xyXG5cclxuICAgIGNvbnN0IGdyb3VwOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnRlbXBsYXRlKSB7XHJcblxyXG4gICAgICBpZiAodGhpcy50ZW1wbGF0ZVtrZXldID09ICcxJykge1xyXG4gICAgICAgIGxldCBmYyA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XHJcbiAgICAgICAgdGhpcy5zZXRTdHViVmFsdWUoZ3VpUm93SWQsIGZjLCBrZXkpO1xyXG4gICAgICAgIGdyb3VwLmFkZENvbnRyb2woa2V5LCBmYyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZm9ybUdyb3Vwc1tndWlSb3dJZF0gPSBncm91cDtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICB1cGRhdGVSZWNvcmRzQmVmb3JlQ3VycmVudFZpZXcodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5SZWNvcmRzLnJlY29yZHNCZWZvcmVDdXJyZW50VmlldyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHNldEluY2x1ZGVzRmlyc3QodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuUmVjb3Jkcy5pbmNsdWRlc0ZpcnN0ID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgc2V0SW5jbHVkZXNMYXN0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLlJlY29yZHMuaW5jbHVkZXNMYXN0ID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgbWFya1Jvd0FzQ3JlYXRlZChndWlSb3dJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLlJlY29yZHMubWFya1Jvd0FzQ3JlYXRlZChndWlSb3dJZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgbWFya1Jvd0FzTm90Q3JlYXRlZChndWlSb3dJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLlJlY29yZHMubWFya1Jvd0FzTm90Q3JlYXRlZChndWlSb3dJZCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHN0YXJ0Um93RWRpdGluZyhndWlSb3dJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLlJlY29yZHMuc3RhcnRSb3dFZGl0aW5nKGd1aVJvd0lkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBzdG9wUm93RWRpdGluZyhndWlSb3dJZDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLlJlY29yZHMuc3RvcFJvd0VkaXRpbmcoZ3VpUm93SWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGlzUm93SW5Sb3dFZGl0aW5nKGd1aVJvd0lkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLlJlY29yZHMuaXNSb3dJblJvd0VkaXRpbmcoZ3VpUm93SWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHNldElzRW1wdHlEYXRhVmlldyhpc0VtcHR5OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5SZWNvcmRzLmlzRW1wdHlEYXRhVmlldyAhPT0gaXNFbXB0eSkge1xyXG5cclxuICAgICAgaWYgKGlzRW1wdHkpXHJcbiAgICAgICAgdGhpcy5yZWNvcmRzQ291bnRDaGFuZ2VTdWJqZWN0Lm5leHQoMCk7XHJcblxyXG4gICAgICB0aGlzLlJlY29yZHMuaXNFbXB0eURhdGFWaWV3ID0gaXNFbXB0eTtcclxuICAgICAgdGhpcy50YWJsZVNlcnZpY2UucmVmcmVzaERhdGFTb3VyY2UoKTtcclxuICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSB0aGUgc2VydmljZSB0byB3b3JrIHdpdGggdGhlIHRhc2tcclxuICAgKiBAcGFyYW0gdGFza0lkIElkIG9mIHRoZSB0YXNrXHJcbiAgICogQHBhcmFtIHRhc2tEZXNjcmlwdGlvblxyXG4gICAqL1xyXG4gIGluaXRUYXNrKHRhc2tJZCwgdGFza0Rlc2NyaXB0aW9uKSB7XHJcbiAgICB0aGlzLlJlY29yZHMuY3JlYXRlRmlyc3QoKTtcclxuICAgIHRoaXMub2xkUGFnZVNpemUgPSAwO1xyXG4gICAgaWYgKHRoaXMuSXNTdHViKCkpIHtcclxuICAgICAgdGhpcy5sb2FkRGF0YSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50YXNrSWQgPSB0YXNrSWQ7XHJcbiAgICAgIHRoaXMuc2V0dGVtcGxhdGUodGFza0Rlc2NyaXB0aW9uKTtcclxuICAgIH1cclxuICAgIHRoaXMuYnVpbGRTY3JlZW5Nb2RlQ29udHJvbHMoKTtcclxuXHJcbiAgICAvLyByZW1vdmUgcHJldmlvdXMgc3Vic2NyaXB0aW9uc1xyXG4gICAgaWYoIWlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuc3Vic2NyaWJlUmVmcmVzaERvbSkpXHJcbiAgICAgIHRoaXMuc3Vic2NyaWJlUmVmcmVzaERvbS51bnN1YnNjcmliZSgpO1xyXG4gICAgaWYoIWlzTnVsbE9yVW5kZWZpbmVkKHRoaXMuc3Vic2NyaWJlSW50ZXJhY3RpdmVDb21tYW5kcykpXHJcbiAgICAgIHRoaXMuc3Vic2NyaWJlSW50ZXJhY3RpdmVDb21tYW5kcy51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaWJlUmVmcmVzaERvbSA9IHRoaXMubWFnaWMucmVmcmVzaERvbS5waXBlKGZpbHRlcihjb21tYW5kID0+IGNvbW1hbmQuVGFza1RhZyA9PT0gdGhpcy50YXNrSWQpKVxyXG4gICAgICAuc3Vic2NyaWJlKGNvbW1hbmQgPT4ge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiVGFzayBcIiArIGNvbW1hbmQuVGFza1RhZyArIFwiY29tbWFuZCBcIiArIGNvbW1hbmQuQ29tbWFuZFR5cGUpO1xyXG4gICAgICAgIHRoaXMuZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5zdWJzY3JpYmVJbnRlcmFjdGl2ZUNvbW1hbmRzID0gdGhpcy5tYWdpYy5pbnRlcmFjdGl2ZUNvbW1hbmRzXHJcbiAgICAgIC5waXBlKGZpbHRlcihjb21tYW5kID0+IGNvbW1hbmQuVGFza1RhZyA9PT0gdGhpcy50YXNrSWQpKVxyXG4gICAgICAuc3Vic2NyaWJlKGNvbW1hbmQgPT4ge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiVGFzayBcIiArIGNvbW1hbmQuVGFza1RhZyArIFwiY29tbWFuZCBcIiArIGNvbW1hbmQuQ29tbWFuZFR5cGUpO1xyXG4gICAgICAgIHRoaXMuZXhlY3V0ZUludGVyYWN0aXZlQ29tbWFuZChjb21tYW5kKTtcclxuICAgICAgfSk7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICByZWZyZXNoVmlldygpIHtcclxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcy5uZXh0KCcnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluc2VydCBhbiBldmVudCB0byB0aGUgTWFnaWMgV2ViQ2xpZW50IGV2ZW50IHF1ZXVlXHJcbiAgICogQHBhcmFtIGd1aUV2ZW50IFRoZSBldmVudCB0byBpbnNlcnRcclxuICAgKi9cclxuICBpbnNlcnRFdmVudChndWlFdmVudDogSUd1aUV2ZW50KTogdm9pZCB7XHJcbiAgICBndWlFdmVudC5UYXNrSUQgPSB0aGlzLnRhc2tJZDtcclxuICAgIHRoaXMubWFnaWMuaW5zZXJ0RXZlbnQoZ3VpRXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIEdldENvbnRyb2xQaWN0dXJlTWFzayhjb250cm9sTmFtZTogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLm1hZ2ljLkdldENvbnRyb2xQaWN0dXJlTWFzayh0aGlzLnRhc2tJZCwgY29udHJvbE5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdGVzIHRoZSBjb250cm9sIHZhbHVlLCB1c2luZyB0aGUgTWFnaWMgV2ViQ2xpZW50XHJcbiAgICogQHBhcmFtIGNvbnRyb2xOYW1lIElkIG9mIHZhbGlkYXRlZCBjb250cm9sXHJcbiAgICogQHBhcmFtIHZhbHVlIHZhbHVlIHRvIGJlIHZhbGlkYXRlZFxyXG4gICAqIEByZXR1cm5zIElmIHZhbGlkYXRpb24gZmFpbHMsIHJldHVybnMgZXJyb3IgbWVzc2FnZSwgZWxzZSByZXR1cm5zIG51bGxcclxuICAgKi9cclxuICBWYWxpZGF0ZUNvbnRyb2xWYWx1ZShjb250cm9sTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLm1hZ2ljLlZhbGlkYXRlQ29udHJvbFZhbHVlKHRoaXMudGFza0lkLCBjb250cm9sTmFtZSwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIEdldFJhbmdlZFZhbHVlKGNvbnRyb2xOYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubWFnaWMuR2V0UmFuZ2VkVmFsdWUodGhpcy50YXNrSWQsIGNvbnRyb2xOYW1lLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgR2V0RmxkUmFuZ2VzKGNvbnRyb2xOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMubWFnaWMuR2V0RmxkUmFuZ2VzKHRoaXMudGFza0lkLCBjb250cm9sTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiByZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IG9mIHRoZSBjb250cm9sXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtIHByb3AgUHJvcGVydHlcclxuICAgKiBAcGFyYW0gZ3VpUm93SWQgUm93IElkLCBpZiBhcHBsaWNhYmxlXHJcbiAgICogQHJldHVybnMgUHJvcGVydHkgdmFsdWVcclxuICAgKi9cclxuICBnZXRQcm9wZXJ0eShjb250cm9sSWQ6IHN0cmluZywgcHJvcDogSHRtbFByb3BlcnRpZXMsIGd1aVJvd0lkPzogc3RyaW5nKSB7XHJcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQoZ3VpUm93SWQpKVxyXG4gICAgICBndWlSb3dJZCA9ICcwJztcclxuICAgIGlmICh0aGlzLklzU3R1YigpKVxyXG4gICAgICByZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eVN0dWIodGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLCBjb250cm9sSWQsIHByb3ApO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCByZWMgPSB0aGlzLlJlY29yZHMubGlzdFtndWlSb3dJZF07XHJcbiAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZChyZWMpKVxyXG4gICAgICAgIGRlYnVnZ2VyO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuUmVjb3Jkcy5saXN0W2d1aVJvd0lkXS5nZXRQcm9wZXJ0eShjb250cm9sSWQsIHByb3ApO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBnZXRQcm9wZXJ0eVN0dWIoQ29udHJvbHNQcm9wZXJ0aWVzOiBhbnksIGNvbnRyb2xJZCwgcHJvcCkge1xyXG4gICAgQ29udHJvbHNQcm9wZXJ0aWVzID0gQ29udHJvbHNQcm9wZXJ0aWVzLkNvbnRyb2xzUHJvcGVydGllcztcclxuICAgIGlmIChjb250cm9sSWQgaW4gQ29udHJvbHNQcm9wZXJ0aWVzKSB7XHJcbiAgICAgIGlmIChwcm9wIGluIENvbnRyb2xzUHJvcGVydGllc1tjb250cm9sSWRdLnByb3BlcnRpZXMpIHtcclxuICAgICAgICByZXR1cm4gQ29udHJvbHNQcm9wZXJ0aWVzW2NvbnRyb2xJZF0ucHJvcGVydGllc1twcm9wXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGdldFN0eWxlU3R1YihDb250cm9sc1Byb3BlcnRpZXM6IGFueSwgY29udHJvbElkLCBzdHlsZU5hbWU6IHN0cmluZykge1xyXG4gICAgQ29udHJvbHNQcm9wZXJ0aWVzID0gQ29udHJvbHNQcm9wZXJ0aWVzLkNvbnRyb2xzUHJvcGVydGllcztcclxuICAgIHJldHVybiBDb250cm9sc1Byb3BlcnRpZXNbY29udHJvbElkXS5zdHlsZXNNYXAuZ2V0KHN0eWxlTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIENTUyBjbGFzc2VzIHVzZWQgZm9yIHRoaXMgY29udHJvbFxyXG4gICAqIEBwYXJhbSBjb250cm9sSWQgSWQgb2YgY29udHJvbFxyXG4gICAqIEBwYXJhbSBndWlSb3dJZCBSb3cgSWQsIGlmIGFwcGxpY2FibGVcclxuICAgKiBAcmV0dXJucyBTdHJpbmcgY29udGFpbmluZyB0aGUgY2xhc3NlcyBjdXJyZW50bHkgZGVmaW5lZCBmb3IgdGhpcyBjb250cm9sXHJcbiAgICovXHJcbiAgZ2V0Q2xhc3Nlcyhjb250cm9sSWQ6IHN0cmluZywgZ3VpUm93SWQ/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGd1aVJvd0lkKSlcclxuICAgICAgZ3VpUm93SWQgPSAnMCc7XHJcbiAgICByZXR1cm4gdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLmdldENvbnRyb2xNZXRhZGF0YShjb250cm9sSWQpLmNsYXNzZXM7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiBhIHN0eWxlIHVzZWQgZm9yIGEgY29udHJvbFxyXG4gICAqIEBwYXJhbSBjb250cm9sSWQgSWQgb2YgY29udHJvbFxyXG4gICAqIEBwYXJhbSBzdHlsZU5hbWUgTmFtZSBvZiBzdHlsZVxyXG4gICAqIEBwYXJhbSBndWlSb3dJZCBSb3cgSWQsIGlmIGFwcGxpY2FibGVcclxuICAgKiBAcmV0dXJucyB2YWx1ZSBvZiBzdHlsZSBvZiB0aGUgY29udHJvbFxyXG4gICAqL1xyXG4gIGdldFN0eWxlKGNvbnRyb2xJZDogc3RyaW5nLCBzdHlsZU5hbWU6IHN0cmluZywgZ3VpUm93SWQ/OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGd1aVJvd0lkKSlcclxuICAgICAgZ3VpUm93SWQgPSAnMCc7XHJcbiAgICBpZiAodGhpcy5Jc1N0dWIoKSlcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0U3R5bGVTdHViKHRoaXMuUmVjb3Jkcy5saXN0W2d1aVJvd0lkXSwgY29udHJvbElkLCBzdHlsZU5hbWUpO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBtYWdpY1ZhbHVlID0gdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLmdldENvbnRyb2xNZXRhZGF0YShjb250cm9sSWQpLnN0eWxlc01hcC5nZXQoc3R5bGVOYW1lKTtcclxuICAgICAgcmV0dXJuIFN0eWxlc01hcE1hbmFnZXIubWFnaWNWYWx1ZUdldFN0eWxlKHN0eWxlTmFtZSwgbWFnaWNWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIGEgY29udHJvbFxyXG4gICAqIEBwYXJhbSBjb250cm9sSWQgSWQgb2YgY29udHJvbFxyXG4gICAqIEBwYXJhbSBndWlSb3dJZCBSb3cgSWQsIGlmIGFwcGxpY2FibGVcclxuICAgKiBAcmV0dXJucyB2YWx1ZSBvZiB0aGUgY29udHJvbFxyXG4gICAqL1xyXG4gIGdldFZhbHVlKGNvbnRyb2xJZDogc3RyaW5nLCBndWlSb3dJZD86IHN0cmluZykge1xyXG4gICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGd1aVJvd0lkKSlcclxuICAgICAgZ3VpUm93SWQgPSAnMCc7XHJcbiAgICByZXR1cm4gdGhpcy5SZWNvcmRzLmxpc3QubGVuZ3RoID4gK2d1aVJvd0lkID8gdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLnZhbHVlc1tjb250cm9sSWRdIDogJyc7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBmb3JtYXR0ZWQgdmFsdWUgb2YgYSBjb250cm9sXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtIGd1aVJvd0lkIFJvdyBJZCwgaWYgYXBwbGljYWJsZVxyXG4gICAqIEByZXR1cm5zIHZhbHVlIG9mIHRoZSBjb250cm9sXHJcbiAgICovXHJcbiAgZ2V0Rm9ybWF0dGVkVmFsdWUoY29udHJvbE5hbWU6IHN0cmluZywgdmFsOiBhbnkpOiBzdHJpbmcge1xyXG5cclxuICAgIHJldHVybiB0aGlzLm1hZ2ljLkdldEZvcm1hdHRlZFZhbHVlKHRoaXMudGFza0lkLCBjb250cm9sTmFtZSwgdmFsKTtcclxuIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgdmFsdWUgb2YgYSBjb250cm9sXHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtIGd1aVJvd0lkIFJvdyBJZCwgaWYgYXBwbGljYWJsZVxyXG4gICAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byBzZXRcclxuICAgKi9cclxuICBzZXRWYWx1ZShjb250cm9sSWQ6IHN0cmluZywgZ3VpUm93SWQ6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgcmV0dXJuIHRoaXMuUmVjb3Jkcy5saXN0W2d1aVJvd0lkXS5zZXRWYWx1ZShjb250cm9sSWQsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZXhlY3V0ZUludGVyYWN0aXZlQ29tbWFuZChndWlJbnRlcmFjdGl2ZUNvbW1hbmQ6IEd1aUludGVyYWN0aXZlKVxyXG4gIHtcclxuICAgIEd1aUludGVyYWN0aXZlRXhlY3V0b3IuZXhlY3V0ZUludGVyYWN0aXZlQ29tbWFuZCh0aGlzLCBndWlJbnRlcmFjdGl2ZUNvbW1hbmQsIHRoaXMub3ZlcmxheVdpbmRvd1NlcnZpY2UpO1xyXG4gICAgdGhpcy5pbnRlcmFjdGl2ZUNvbW1hbmRzLm5leHQoZ3VpSW50ZXJhY3RpdmVDb21tYW5kKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGhhbmRsZVNldFByb3BlcnR5KGNvbW1hbmQ6IEd1aUNvbW1hbmQsIGlzVGFibGVDaGlsZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgbGV0IGNvbnRyb2xJZCA9IGNvbW1hbmQuQ3RybE5hbWU7XHJcbiAgICBsZXQgZHZSb3dJZDogbnVtYmVyID0gKGNvbW1hbmQubGluZSB8fCAwKTtcclxuICAgIGxldCBndWlSb3dJZDogbnVtYmVyID0gdGhpcy5nZXRHdWlSb3dJZChkdlJvd0lkLCBpc1RhYmxlQ2hpbGQpO1xyXG4gICAgbGV0IHByb3BlcnRpZXM6IENvbnRyb2xNZXRhZGF0YTtcclxuXHJcbiAgICBpZiAoY29tbWFuZC5PcGVyYXRpb24gPT09IEh0bWxQcm9wZXJ0aWVzLlNlbGVjdGVkUm93KSB7XHJcbiAgICAgIGlmIChjb21tYW5kLm9iajEgIT09IEd1aUNvbnN0YW50cy5OT19ST1dfU0VMRUNURUQpIHtcclxuICAgICAgICBndWlSb3dJZCA9IHRoaXMuZ2V0R3VpUm93SWQoY29tbWFuZC5vYmoxLCB0cnVlKTtcclxuICAgICAgICBwcm9wZXJ0aWVzID0gdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLmdldENvbnRyb2xNZXRhZGF0YShjb250cm9sSWQpO1xyXG4gICAgICAgIHByb3BlcnRpZXMucHJvcGVydGllcy5zZXQoY29tbWFuZC5PcGVyYXRpb24sIGNvbW1hbmQubGluZSk7XHJcbiAgICAgICAgdGhpcy50YWJsZVNlcnZpY2Uuc2VsZWN0Um93KGd1aVJvd0lkLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIHRoaXMuT25TZWxlY3RlZFJvd0NoYW5nZWQuZW1pdChndWlSb3dJZC50b1N0cmluZygpKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChjb21tYW5kLk9wZXJhdGlvbiA9PT0gSHRtbFByb3BlcnRpZXMuRW5hYmxlZCkge1xyXG4gICAgICBsZXQgYyA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2woZ3VpUm93SWQudG9TdHJpbmcoKSwgY29udHJvbElkKTtcclxuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChjKSkge1xyXG4gICAgICAgIGlmIChjb21tYW5kLm9iajEpXHJcbiAgICAgICAgICBjLmVuYWJsZSgpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGMuZGlzYWJsZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHByb3BlcnRpZXMgPSB0aGlzLlJlY29yZHMubGlzdFtndWlSb3dJZF0uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCk7XHJcbiAgICAgIHByb3BlcnRpZXMucHJvcGVydGllcy5zZXQoY29tbWFuZC5PcGVyYXRpb24sIGNvbW1hbmQub2JqMSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwcm9wZXJ0aWVzID0gdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLmdldENvbnRyb2xNZXRhZGF0YShjb250cm9sSWQpO1xyXG4gICAgICBwcm9wZXJ0aWVzLnByb3BlcnRpZXMuc2V0KDxIdG1sUHJvcGVydGllcz5jb21tYW5kLk9wZXJhdGlvbiwgY29tbWFuZC5vYmoxKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBleGVjdXRlQ29tbWFuZChjb21tYW5kOiBHdWlDb21tYW5kKTogdm9pZCB7XHJcbiAgICBsZXQgZHZSb3dJZDogbnVtYmVyID0gKGNvbW1hbmQubGluZSB8fCAwKTtcclxuICAgIGxldCBndWlSb3dJZDogbnVtYmVyID0gMDtcclxuICAgIGxldCBjb250cm9sSWQgPSBjb21tYW5kLkN0cmxOYW1lO1xyXG4gICAgbGV0IHByb3BlcnRpZXM6IENvbnRyb2xNZXRhZGF0YTtcclxuICAgIGxldCBpc1RhYmxlQ2hpbGQ6IGJvb2xlYW4gPSB0aGlzLmlzVGFibGVDb250cm9sKGNvbnRyb2xJZCk7XHJcblxyXG4gICAgLy8gRm9yIG5vbi1pbnB1dCB0eXBlIGNvbnRyb2xzIG9uIHRhYmxlLlxyXG4gICAgaWYgKGNvbW1hbmQub2JqICE9PSBudWxsKVxyXG4gICAgICBpc1RhYmxlQ2hpbGQgPSBpc1RhYmxlQ2hpbGQgfHwgY29tbWFuZC5vYmouSXNUYWJsZUNoaWxkO1xyXG5cclxuICAgIGd1aVJvd0lkID0gdGhpcy5nZXRHdWlSb3dJZChkdlJvd0lkLCBpc1RhYmxlQ2hpbGQpO1xyXG5cclxuICAgIHN3aXRjaCAoY29tbWFuZC5Db21tYW5kVHlwZSkge1xyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9JU19MT0dHRURfSU46XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9UQUJMRV9UT1BfSU5ERVg6XHJcbiAgICAgICAgdGhpcy50YWJsZVNlcnZpY2Uuc2V0VGFibGVUb3BJbmRleChjb21tYW5kLm51bWJlcik7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuUkVGUkVTSF9UQVNLOlxyXG4gICAgICAgIHRoaXMudGFibGVTZXJ2aWNlLnJlZnJlc2hEYXRhU291cmNlKCk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoVmlldygpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5TRVRfVEFCTEVfSVRFTVNfQ09VTlQ6XHJcbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChjb21tYW5kLm51bWJlcikpIHtcclxuICAgICAgICAgIHRoaXMudGFibGVTZXJ2aWNlLnVwZGF0ZVRhYmxlU2l6ZShjb21tYW5kLm51bWJlcik7XHJcblxyXG4gICAgICAgICAgaWYgKGNvbW1hbmQubnVtYmVyID4gMCAmJiB0aGlzLlJlY29yZHMuc2l6ZVVwZGF0ZWQgJiZcclxuICAgICAgICAgICAgIXRoaXMuUmVjb3Jkcy5pc0VtcHR5RGF0YVZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWNvcmRzQ291bnRDaGFuZ2VTdWJqZWN0Lm5leHQoY29tbWFuZC5udW1iZXIpO1xyXG4gICAgICAgICAgICB0aGlzLlJlY29yZHMuc2l6ZVVwZGF0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9SRUNPUkRTX0JFRk9SRV9DVVJSRU5UX1ZJRVc6XHJcbiAgICAgICAgdGhpcy51cGRhdGVSZWNvcmRzQmVmb3JlQ3VycmVudFZpZXcoY29tbWFuZC5udW1iZXIpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5DUkVBVEVfVEFCTEVfUk9XOlxyXG4gICAgICAgIGd1aVJvd0lkID0gdGhpcy5nZXRHdWlSb3dJZChjb21tYW5kLm51bWJlciwgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5idWlsZFRhYmxlUm93Q29udHJvbHMoZ3VpUm93SWQpO1xyXG4gICAgICAgIHRoaXMubWFya1Jvd0FzQ3JlYXRlZChndWlSb3dJZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9JU19ST1dfRURJVElORzpcclxuICAgICAgICBndWlSb3dJZCA9IHRoaXMuZ2V0R3VpUm93SWQoY29tbWFuZC5saW5lLCBjb21tYW5kLnZhbHVlKTtcclxuICAgICAgICB0aGlzLnN0YXJ0Um93RWRpdGluZyhndWlSb3dJZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9OT1RfSVNfUk9XX0VESVRJTkc6XHJcbiAgICAgICAgZ3VpUm93SWQgPSB0aGlzLmdldEd1aVJvd0lkKGNvbW1hbmQubGluZSwgY29tbWFuZC52YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zdG9wUm93RWRpdGluZyhndWlSb3dJZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5VTkRPX0NSRUFURV9UQUJMRV9ST1c6XHJcbiAgICAgICAgdGhpcy5tYXJrUm93QXNOb3RDcmVhdGVkKHRoaXMuZ2V0R3VpUm93SWQoY29tbWFuZC5udW1iZXIsIHRydWUpKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9UQUJMRV9JTkNMVURFU19GSVJTVDpcclxuICAgICAgICB0aGlzLnNldEluY2x1ZGVzRmlyc3QoY29tbWFuZC5Cb29sMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuU0VUX1RBQkxFX0lOQ0xVREVTX0xBU1Q6XHJcbiAgICAgICAgdGhpcy5zZXRJbmNsdWRlc0xhc3QoY29tbWFuZC5Cb29sMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5TRVRfUFJPUEVSVFk6XHJcbiAgICAgICAgdGhpcy5oYW5kbGVTZXRQcm9wZXJ0eShjb21tYW5kLCBpc1RhYmxlQ2hpbGQpO1xyXG4gICAgICAgIGlmIChjb21tYW5kLk9wZXJhdGlvbiA9PSBIdG1sUHJvcGVydGllcy5SZWFkT25seSlcclxuICAgICAgICAgIHRoaXMucmVmcmVzaERvbS5uZXh0KGNvbW1hbmQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBDb21tYW5kVHlwZS5QUk9QX1NFVF9VU0VSX1BST1BFUlRZOlxyXG4gICAgICAgIHByb3BlcnRpZXMgPSB0aGlzLlJlY29yZHMubGlzdFtndWlSb3dJZF0uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCk7XHJcbiAgICAgICAgLy8gaWYgdGhlIHByb3BlcnR5IGhhcyBjaGFuZ2VkLCBzZXQgdGhlIHByb3BlcnR5IGFuZCByYWlzZSB0aGUgc3ViamVjdFxyXG4gICAgICAgIGlmKHByb3BlcnRpZXMudXNlclByb3BlcnRpZXMuZ2V0KGNvbW1hbmQuT3BlcmF0aW9uKSE9PSBjb21tYW5kLm9iajEpIHtcclxuICAgICAgICAgIHByb3BlcnRpZXMudXNlclByb3BlcnRpZXMuc2V0KGNvbW1hbmQuT3BlcmF0aW9uLCBjb21tYW5kLm9iajEpO1xyXG4gICAgICAgICAgLy8gdGhlIHByb3BlcnR5IG5hbWUgaXMgb2YgZm9ybWF0IDxjb250cm9sTmFtZT5+PHByb3BlcnR5TmFtZT5cclxuICAgICAgICAgIHRoaXMuY3VzdG9tUHJvcGVydGllc1N1YmplY3QubmV4dCh7IHByb3BlcnR5TmFtZTogY29udHJvbElkICsgJ34nICsgY29tbWFuZC5PcGVyYXRpb24sIHZhbHVlOiBjb21tYW5kLm9iajEsIHJvd0lkOiBndWlSb3dJZCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlBST1BfU0VUX0NVU1RPTV9WQUxJREFUT1I6IHtcclxuICAgICAgICAgIHByb3BlcnRpZXMgPSB0aGlzLlJlY29yZHMubGlzdFtndWlSb3dJZF0uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCk7XHJcblxyXG4gICAgICAgICAgbGV0IGNvbnRyb2wgPSB0aGlzLmdldEZvcm1Db250cm9sKGd1aVJvd0lkLnRvU3RyaW5nKCksIGNvbnRyb2xJZCk7XHJcbiAgICAgICAgICBpZiAoY29udHJvbCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHByb3BlcnRpZXMuY3VzdG9tVmFsaWRhdG9ycy5zZXQoY29tbWFuZC5PcGVyYXRpb24sIGNvbW1hbmQub2JqMSk7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sLnZhbGlkYXRvciAhPSBudWxsKVxyXG4gICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhbY29udHJvbC52YWxpZGF0b3IsIHRoaXMuY3VzdG9tVmFsaWRhdG9yKGd1aVJvd0lkLnRvU3RyaW5nKCksIGNvbnRyb2xJZCldKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLmN1c3RvbVZhbGlkYXRvcihndWlSb3dJZC50b1N0cmluZygpLCBjb250cm9sSWQpKTtcclxuXHJcbiAgICAgICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9DTEFTUzpcclxuICAgICAgICBwcm9wZXJ0aWVzID0gdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLmdldENvbnRyb2xNZXRhZGF0YShjb250cm9sSWQpO1xyXG4gICAgICAgIHByb3BlcnRpZXMuc2V0Q2xhc3MoY29tbWFuZC5PcGVyYXRpb24sIGNvbW1hbmQub2JqMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9TVFlMRTpcclxuICAgICAgICBwcm9wZXJ0aWVzID0gdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLmdldENvbnRyb2xNZXRhZGF0YShjb250cm9sSWQpO1xyXG4gICAgICAgIHByb3BlcnRpZXMuc2V0U3R5bGUoY29tbWFuZC5PcGVyYXRpb24sIGNvbW1hbmQub2JqMSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9BVFRSSUJVVEU6XHJcbiAgICAgICAgcHJvcGVydGllcyA9IHRoaXMuUmVjb3Jkcy5saXN0WzBdLmdldENvbnRyb2xNZXRhZGF0YShjb250cm9sSWQpO1xyXG4gICAgICAgIHByb3BlcnRpZXMuZGF0YVR5cGUgPSA8U3RvcmFnZUF0dHJpYnV0ZT5TdHJpbmcuZnJvbUNoYXJDb2RlKGNvbW1hbmQubnVtYmVyKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgIENvbW1hbmRUeXBlLlNFVF9WQUxVRTpcclxuICAgICAgICB0aGlzLlJlY29yZHMubGlzdFtndWlSb3dJZF0udmFsdWVzW2NvbnRyb2xJZF0gPSBjb21tYW5kLnZhbHVlO1xyXG4gICAgICAgIGxldCBjID0gdGhpcy5nZXRGb3JtQ29udHJvbChndWlSb3dJZC50b1N0cmluZygpLCBjb250cm9sSWQpO1xyXG4gICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoYykpIHtcclxuICAgICAgICAgIGMuc2V0VmFsdWUodGhpcy5Db252ZXJ0VmFsRnJvbU5hdGl2ZShjb250cm9sSWQsIGNvbW1hbmQubGluZSwgY29tbWFuZC52YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLkNSRUFURV9TVUJfRk9STTpcclxuICAgICAgICB0aGlzLm1nU3ViZm9ybVNlcnZpY2UuYWRkU3ViZm9ybUNvbXAoY29tbWFuZC5DdHJsTmFtZSwgY29tbWFuZC51c2VyRHJvcEZvcm1hdC50b1N0cmluZygpLCBjb21tYW5kLnN0ciwgY29tbWFuZC5maWxlTmFtZSwgY29tbWFuZC5jb250ZXh0SUQsIGNvbW1hbmQucGFyYW1zLCBjb21tYW5kLkJvb2wxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuQ0xPU0VfU1VCX0ZPUk06XHJcbiAgICAgICAgdGhpcy5tZ1N1YmZvcm1TZXJ2aWNlLmRlbGV0ZVN1YmZvcm1Db21wKGNvbW1hbmQuQ3RybE5hbWUsIGNvbW1hbmQudXNlckRyb3BGb3JtYXQudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIENvbW1hbmRUeXBlLlNFVF9FTVBUWV9EQVRBVklFVzpcclxuICAgICAgICB0aGlzLnNldElzRW1wdHlEYXRhVmlldyhjb21tYW5kLkJvb2wxKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgQ29tbWFuZFR5cGUuU0VUX0ZPQ1VTOlxyXG4gICAgICAgIHRoaXMucmVmcmVzaERvbS5uZXh0KGNvbW1hbmQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIGN1c3RvbSB2YWxpZGF0b3JcclxuICAqL1xyXG4gIGN1c3RvbVZhbGlkYXRvcihyb3dpZDogc3RyaW5nLCBpZDogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xyXG5cclxuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyA9PiB7XHJcbiAgICAgIGxldCBjb250cm9sTWV0YWRhdGE6IENvbnRyb2xNZXRhZGF0YTtcclxuICAgICAgY29udHJvbE1ldGFkYXRhID0gdGhpcy5SZWNvcmRzLmxpc3Rbcm93aWRdLmdldENvbnRyb2xNZXRhZGF0YShpZCk7XHJcbiAgICAgIGZvciAobGV0IGtleSBvZiBjb250cm9sTWV0YWRhdGEuY3VzdG9tVmFsaWRhdG9ycy5rZXlzKCkpIHtcclxuICAgICAgICBsZXQgdmFsaWRhdG9yID0gY29udHJvbE1ldGFkYXRhLmN1c3RvbVZhbGlkYXRvcnMuZ2V0KGtleSk7XHJcbiAgICAgICAgaWYgKCEoPEN1c3RvbVZhbGlkYXRvcj52YWxpZGF0b3IpLmlzVmFsaWQoKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHsgW2tleV06IHRydWUgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ09udmVydCBhIHZhbHVlIGZyb20gTWFnaWMgZm9ybWF0IHRvIG5hdGl2ZSBmb3JtYXRcclxuICAgKiBAcGFyYW0gY29udHJvbElkIElkIG9mIGNvbnRyb2xcclxuICAgKiBAcGFyYW0gIHJvd0lkIFJvdyBJZCwgaWYgYXBwbGljYWJsZVxyXG4gICAqIEBwYXJhbSB2YWwgVmFsdWUgdG8gY29udmVydFxyXG4gICAqIEByZXR1cm5zIENvbnZlcnRlZCB2YWx1ZVxyXG4gICAqL1xyXG4gIENvbnZlcnRWYWxUb05hdGl2ZShjb250cm9sSWQ6IHN0cmluZywgcm93SWQ6IG51bWJlciwgdmFsOiBhbnkpOiBhbnkge1xyXG5cclxuICAgIGxldCBwcm9wZXJ0aWVzOiBDb250cm9sTWV0YWRhdGE7XHJcbiAgICBwcm9wZXJ0aWVzID0gdGhpcy5SZWNvcmRzLmxpc3RbMF0uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCk7XHJcblxyXG4gICAgc3dpdGNoIChwcm9wZXJ0aWVzLmRhdGFUeXBlKSB7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjoge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgbGV0IHJhbmdlczogc3RyaW5nID0gdGhpcy5HZXRGbGRSYW5nZXMoY29udHJvbElkKTtcclxuICAgICAgICAgIGxldCBmb3VuZDogbnVtYmVyID0gcmFuZ2VzLmluZGV4T2YoJywnKTtcclxuICAgICAgICAgIGxldCB0cnVlT3B0aW9uOiBzdHJpbmcgPSByYW5nZXMuc3Vic3RyKDAsIGZvdW5kKTtcclxuICAgICAgICAgIGxldCBmYWxzZU9wdGlvbjogc3RyaW5nID0gcmFuZ2VzLnN1YnN0cihmb3VuZCArIDEpO1xyXG4gICAgICAgICAgaWYgKE5TdHJpbmcuRXF1YWxzKHZhbCwgdHJ1ZU9wdGlvbiwgdHJ1ZSkpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgZWxzZSBpZiAoTlN0cmluZy5FcXVhbHModmFsLCBmYWxzZU9wdGlvbiwgdHJ1ZSkpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgIHJldHVybiB2YWw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKXtcclxuICAgICAgICBsZXQgaWR4ID0gdmFsLmluZGV4T2YoJzonLDApO1xyXG4gICAgICAgIGxldCBob3VyczogbnVtYmVyID0gK3ZhbC5zdWJzdHIoMCwgaWR4KTtcclxuICAgICAgICBsZXQgbWludXRlczogbnVtYmVyID0gK3ZhbC5zdWJzdHIoaWR4KzEsIDIpO1xyXG4gICAgICAgIGxldCBzZWNvbmRzID0gMDtcclxuICAgICAgICBpZiAodmFsLmxlbmd0aCA+IDUpIHtcclxuICAgICAgICAgIGlkeCA9IHZhbC5pbmRleE9mKCc6JywgaWR4ICsgMSk7XHJcbiAgICAgICAgICBpZiAoaWR4ID49IDApXHJcbiAgICAgICAgICAgIHNlY29uZHMgPSArdmFsLnN1YnN0cihpZHggKyAxLCAyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbC5pbmRleE9mKCdQTScpPjApXHJcbiAgICAgICAgICBob3VycyArPSAxMjtcclxuICAgICAgICBsZXQgZHQ6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGR0LnNldEhvdXJzKGhvdXJzKTtcclxuICAgICAgICBkdC5zZXRNaW51dGVzKG1pbnV0ZXMpO1xyXG4gICAgICAgIGR0LnNldFNlY29uZHMoc2Vjb25kcyk7XHJcblxyXG5cclxuICAgICAgICByZXR1cm4gZHQ7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgICByZXR1cm4gKHZhbCA9PT0gbnVsbCkgPyAwIDogdmFsO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0IGEgdmFsdWUgZnJvbSBuYXRpdmUgdG8gTWFnaWMgZm9ybWF0XHJcbiAgICogQHBhcmFtIGNvbnRyb2xJZCBJZCBvZiBjb250cm9sXHJcbiAgICogQHBhcmFtICByb3dJZCBSb3cgSWQsIGlmIGFwcGxpY2FibGVcclxuICAgKiBAcGFyYW0gdmFsIFZhbHVlIHRvIGNvbnZlcnRcclxuICAgKiBAcmV0dXJucyBDb252ZXJ0ZWQgdmFsdWVcclxuICAgKi9cclxuICBDb252ZXJ0VmFsRnJvbU5hdGl2ZShjb250cm9sSWQ6IHN0cmluZywgcm93SWQ6IG51bWJlciwgdmFsOiBhbnkpOiBhbnkge1xyXG5cclxuICAgIGxldCBwcm9wZXJ0aWVzOiBDb250cm9sTWV0YWRhdGE7XHJcbiAgICBwcm9wZXJ0aWVzID0gdGhpcy5SZWNvcmRzLmxpc3RbMF0uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCk7XHJcblxyXG4gICAgc3dpdGNoIChwcm9wZXJ0aWVzLmRhdGFUeXBlKSB7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVElNRToge1xyXG4gICAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgICBsZXQgc3RyOiBTdHJpbmdCdWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTtcclxuICAgICAgICAgIGxldCBmb3JtYXQ6IHN0cmluZyA9IHZhbC5nZXRIb3VycygpID4gOSA/ICd7MH0nIDogJzB7MH0nO1xyXG4gICAgICAgICAgc3RyLkFwcGVuZEZvcm1hdChmb3JtYXQsIHZhbC5nZXRIb3VycygpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgc3RyLkFwcGVuZCgnOicpO1xyXG4gICAgICAgICAgZm9ybWF0ID0gdmFsLmdldE1pbnV0ZXMoKSA+IDkgPyAnezB9JyA6ICcwezB9JztcclxuICAgICAgICAgIHN0ci5BcHBlbmRGb3JtYXQoZm9ybWF0LCB2YWwuZ2V0TWludXRlcygpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgaWYgKCB2YWwuZ2V0U2Vjb25kcygpID4gMCkge1xyXG4gICAgICAgICAgICBzdHIuQXBwZW5kKCc6Jyk7XHJcbiAgICAgICAgICAgIGZvcm1hdCA9IHZhbC5nZXRTZWNvbmRzKCkgPiA5ID8gJ3swfScgOiAnMHswfSc7XHJcbiAgICAgICAgICAgIHN0ci5BcHBlbmRGb3JtYXQoZm9ybWF0LCB2YWwuZ2V0U2Vjb25kcygpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIHN0ci5Ub1N0cmluZygpO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgfVxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjoge1xyXG4gICAgICAgIGxldCBwcm9wZXJ0aWVzOiBDb250cm9sTWV0YWRhdGE7XHJcbiAgICAgICAgcHJvcGVydGllcyA9IHRoaXMuUmVjb3Jkcy5saXN0WycwJ10uZ2V0Q29udHJvbE1ldGFkYXRhKGNvbnRyb2xJZCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdib29sZWFuJyAmJiBwcm9wZXJ0aWVzLnJhbmdlVmFsaWRhdG9yKSB7XHJcbiAgICAgICAgICBsZXQgcmFuZ2VzOiBzdHJpbmcgPSB0aGlzLkdldEZsZFJhbmdlcyhjb250cm9sSWQpO1xyXG4gICAgICAgICAgbGV0IGZvdW5kOiBudW1iZXIgPSByYW5nZXMuaW5kZXhPZignLCcpO1xyXG4gICAgICAgICAgbGV0IHRydWVPcHRpb246IHN0cmluZyA9IHJhbmdlcy5zdWJzdHIoMCwgZm91bmQpO1xyXG4gICAgICAgICAgbGV0IGZhbHNlT3B0aW9uOiBzdHJpbmcgPSByYW5nZXMuc3Vic3RyKGZvdW5kICsgMSk7XHJcbiAgICAgICAgICBpZiAodmFsKVxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZU9wdGlvbjtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlT3B0aW9uO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgfVxyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gdmFsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlIHJlc2l6ZSBhbmQgYWxzbyBmZXRjaCBjaHVuayBvZiByZWNvcmRzIGlmIGhhdmluZyBhbiBlbXB0eSB2aWV3LlxyXG4gICAqIEBpZ25vcmVcclxuICAgKiBAcGFyYW0gcGFnZVNpemUgOiBQYWdlU2l6ZVxyXG4gICAqIEBwYXJhbSB0b3BHdWlSb3dJZCA6IEd1aVJvd0lkIG9mIGZpcnN0IHJlY29yZCBpbiB2aWV3LlxyXG4gICAqL1xyXG4gICByZXNpemUocGFnZVNpemU6IG51bWJlciwgdG9wR3VpUm93SWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgbGV0IGd1aUV2ZW50OiBJR3VpRXZlbnQgPSBnZXRHdWlFdmVudE9iaigncmVzaXplJywgJ3RhYmxlJywgMCk7XHJcbiAgICBndWlFdmVudC5QYWdlU2l6ZSA9IHBhZ2VTaXplO1xyXG5cclxuICAgIC8vQXMgJ2dldFJvd3MnIGV2ZW50IGFsc28gZ2V0cyBleGVjdXRlZCwgc2V0IHRoZSBndWlFdmVudC5MaW5lIHBhcmFtZXRlci5cclxuICAgIGd1aUV2ZW50LkxpbmUgPSB0b3BHdWlSb3dJZDtcclxuICAgIHRoaXMuaW5zZXJ0RXZlbnQoZ3VpRXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyBkYXRhIGZvciBuZXcgdGFibGUgcm93cyB3aGVuIHNjcm9sbGluZyBkb25lXHJcbiAgICovXHJcbiAgb25TY3JvbGxEb3duKCkge1xyXG4gICAgaWYgKCF0aGlzLlJlY29yZHMuaW5jbHVkZXNMYXN0KSB7XHJcbiAgICAgIGxldCBndWlFdmVudDogSUd1aUV2ZW50ID0gZ2V0R3VpRXZlbnRPYmooJ2dldFJvd3MnLCAndGFibGUnLCAwKTtcclxuICAgICAgZ3VpRXZlbnQuTGluZSA9IHRoaXMuZm9ybUdyb3Vwcy5sZW5ndGg7XHJcbiAgICAgIHRoaXMuaW5zZXJ0RXZlbnQoZ3VpRXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgbmV3IGJyb3dzZXIgd2luZG93IHRpdGxlXHJcbiAgICogQHBhcmFtIG5ld1RpdGxlIE5ldyB3aW5kb3cgdGl0bGVcclxuICAgKi9cclxuICBzZXRUaXRsZShuZXdUaXRsZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm1nVGl0bGVTZXJ2aWNlLnNldFRpdGxlKG5ld1RpdGxlKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgZ2V0R3VpUm93SWQoZHZSb3dJZDogbnVtYmVyLCBpc1RhYmxlQ29udHJvbDogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKGlzVGFibGVDb250cm9sID8gZHZSb3dJZCArIHRoaXMuUmVjb3Jkcy5yZWNvcmRzQmVmb3JlQ3VycmVudFZpZXcgOiAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIGdldER2Um93SWQoZ3VpUm93SWQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gKGd1aVJvd0lkIC0gdGhpcy5SZWNvcmRzLnJlY29yZHNCZWZvcmVDdXJyZW50Vmlldyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhbiB1cCB0aGUgc2VydmljZSB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWRcclxuICAgKi9cclxuICBkaXNwb3NlKCkge1xyXG4gICAgIHRoaXMucmVmcmVzaERvbS5jb21wbGV0ZSgpO1xyXG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzLmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLnN1YnNjcmliZUludGVyYWN0aXZlQ29tbWFuZHMudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlUmVmcmVzaERvbS51bnN1YnNjcmliZSgpO1xyXG4gICAgIHRoaXMuaW50ZXJhY3RpdmVDb21tYW5kcy5jb21wbGV0ZSgpO1xyXG4gICAgIHRoaXMuY3VzdG9tUHJvcGVydGllc1N1YmplY3QuY29tcGxldGUoKTtcclxuICAgICB0aGlzLk9uU2VsZWN0ZWRSb3dDaGFuZ2VkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgLy9FdmVudHM6XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSB0aGUgQ29tYm9ib3ggXCJjaGFuZ2VcIiBldmVudFxyXG4gICAqIEBwYXJhbSBldmVudCAgVGhlIGV2ZW50IHJlY2VpdmVkIGZyb20gdGhlIFVJXHJcbiAgICogQHBhcmFtIGlkeCBJZCBvZiB0aGUgY29udHJvbCByYWlzaW5nIHRoZSBldmVudFxyXG4gICAqIEBwYXJhbSBsaW5lIFJvdyBJZCwgaWYgYXBwbGljYWJsZVxyXG4gICAqL1xyXG4gIG9uQ29tYm9ib3hTZWxlY3Rpb25DaGFuZ2VkKGV2ZW50OiBFdmVudCwgaWR4OiBzdHJpbmcsIGxpbmU6IG51bWJlcikge1xyXG4gICAgbGV0IGd1aUV2ZW50OiBJR3VpRXZlbnQgPSBnZXRHdWlFdmVudE9iaignc2VsZWN0aW9uY2hhbmdlZCcsIGlkeCwgbGluZSk7XHJcblxyXG4gICAgaWYgKHR5cGVvZiAoZXZlbnQpID09ICdudW1iZXInKSB7XHJcbiAgICAgICAgZ3VpRXZlbnQuVmFsdWUgPSBldmVudDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoZXZlbnQudGFyZ2V0KSkge1xyXG4gICAgICAgICAgICBsZXQgaW5kZXhlczogbnVtYmVyW10gPSBuZXcgQXJyYXk8bnVtYmVyPigoPGFueT5ldmVudC50YXJnZXQpLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGgpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICg8YW55PmV2ZW50LnRhcmdldCkuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpbmRleGVzW2ldID0gKDxIVE1MT3B0aW9uRWxlbWVudD4oPGFueT5ldmVudC50YXJnZXQpLnNlbGVjdGVkT3B0aW9uc1tpXSkuaW5kZXg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZ3VpRXZlbnQuVmFsdWUgPSBpbmRleGVzLmpvaW4oJywnKTtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgZ3VpRXZlbnQuVmFsdWUgPSAoPGFueT5ldmVudCkudmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbnNlcnRFdmVudChndWlFdmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgdGhlIExpc3Rib3ggXCJjaGFuZ2VcIiBldmVudFxyXG4gICAqIEBwYXJhbSAgZXZlbnQgVGhlIGV2ZW50IHJlY2VpdmVkIGZyb20gdGhlIFVJXHJcbiAgICogQHBhcmFtIGlkeCBJZCBvZiB0aGUgY29udHJvbCByYWlzaW5nIHRoZSBldmVudFxyXG4gICAqL1xyXG4gIG9uTGlzdEJveFNlbGVjdGlvbkNoYW5nZWQoZXZlbnQ6IEV2ZW50LCBpZHg6IHN0cmluZykge1xyXG4gICAgbGV0IGd1aUV2ZW50OiBJR3VpRXZlbnQgPSBnZXRHdWlFdmVudE9iaignc2VsZWN0aW9uY2hhbmdlZCcsIGlkeCwgMCk7XHJcblxyXG4gICAgbGV0IHNlbGVjdGVkT3B0aW9ucztcclxuICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoZXZlbnQudGFyZ2V0KSlcclxuICAgICAgc2VsZWN0ZWRPcHRpb25zID0gKDxhbnk+ZXZlbnQudGFyZ2V0KS5zZWxlY3RlZE9wdGlvbnM7XHJcbiAgICBlbHNlXHJcbiAgICAgIHNlbGVjdGVkT3B0aW9ucyA9ICg8YW55PmV2ZW50KS5zb3VyY2Uuc2VsZWN0ZWRPcHRpb25zLnNlbGVjdGVkO1xyXG5cclxuICAgIGxldCBsZW5ndGggPSBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoO1xyXG4gICAgbGV0IGluZGV4ZXM6IG51bWJlcltdID0gbmV3IEFycmF5PG51bWJlcj4obGVuZ3RoKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQoZXZlbnQudGFyZ2V0KSlcclxuICAgICAgICBpbmRleGVzW2ldID0gKHNlbGVjdGVkT3B0aW9uc1tpXSkuaW5kZXg7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBpbmRleGVzW2ldID0gKHNlbGVjdGVkT3B0aW9uc1tpXSkudmFsdWU7XHJcbiAgICB9XHJcbiAgICBndWlFdmVudC5WYWx1ZSA9IDxhbnk+aW5kZXhlczsgLy8gVE9ETzogZml4XHJcbiAgICB0aGlzLmluc2VydEV2ZW50KGd1aUV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSB0aGUgQ2hlY2tib3ggXCJjaGFuZ2VcIiBldmVudFxyXG4gICAqIEBwYXJhbSAgZXZlbnQgVGhlIGV2ZW50IHJlY2VpdmVkIGZyb20gdGhlIFVJXHJcbiAgICogQHBhcmFtIGlkeCBJZCBvZiB0aGUgY29udHJvbCByYWlzaW5nIHRoZSBldmVudFxyXG4gICAqIEBwYXJhbSAgcm93SWQgUm93IElkLCBpZiBhcHBsaWNhYmxlXHJcbiAgICovXHJcbiAgb25DaGVja0NoYW5nZWQoZXZlbnQ6IEV2ZW50LCBpZHg6IHN0cmluZywgcm93SWQ6IG51bWJlcikge1xyXG4gICAgaWYgKHR5cGVvZiByb3dJZCA9PT0gJ3VuZGVmaW5lZCcpXHJcbiAgICAgIHJvd0lkID0gMDtcclxuICAgIGxldCBndWlFdmVudDogSUd1aUV2ZW50ID0gZ2V0R3VpRXZlbnRPYmooJ3NlbGVjdGlvbmNoYW5nZWQnLCBpZHgsIHJvd0lkKTtcclxuXHJcbiAgICBpZiAodHlwZW9mIChldmVudCkgPT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgZ3VpRXZlbnQuVmFsdWUgPSBldmVudDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXZlbnQudGFyZ2V0ID09PSAndW5kZWZpbmVkJylcclxuICAgICAgICAgICAgZ3VpRXZlbnQuVmFsdWUgPSAoPGFueT4oZXZlbnQpKS5jaGVja2VkO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgZ3VpRXZlbnQuVmFsdWUgPSAoPGFueT4oZXZlbnQudGFyZ2V0KSkuY2hlY2tlZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluc2VydEV2ZW50KGd1aUV2ZW50KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZSB0YWIgc2VsZWN0aW9uIGNoYW5nZSwgY2F1c2VkIGJ5IFVJIGV2ZW50c1xyXG4gICAqIEBwYXJhbSBpZHggSWQgb2YgdGhlIGNvbnRyb2wgcmFpc2luZyB0aGUgZXZlbnRcclxuICAgKiBAcGFyYW0gIGxheWVyIElkIG9mIHNlbGVjdGVkIHRhYnBhZ2VcclxuICAgKi9cclxuICBtZ09uVGFiU2VsZWN0aW9uQ2hhbmdlZChpZHg6IHN0cmluZywgbGF5ZXI6IG51bWJlcikge1xyXG4gICAgbGV0IGd1aUV2ZW50OiBJR3VpRXZlbnQgPSBnZXRHdWlFdmVudE9iaignc2VsZWN0aW9uY2hhbmdlZCcsIGlkeCwgMCk7XHJcbiAgICBndWlFdmVudC5WYWx1ZSA9IGxheWVyLnRvU3RyaW5nKCk7XHJcbiAgICB0aGlzLmluc2VydEV2ZW50KGd1aUV2ZW50KTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgdGhlIFJhZGlvIGJ1dHRvbiBcImNoYW5nZVwiIGV2ZW50XHJcbiAgICogQHBhcmFtICBldmVudCBUaGUgZXZlbnQgcmVjZWl2ZWQgZnJvbSB0aGUgVUlcclxuICAgKiBAcGFyYW0gaWR4IElkIG9mIHRoZSBjb250cm9sIHJhaXNpbmcgdGhlIGV2ZW50XHJcbiAgICovXHJcbiAgbWdPblJhZGlvU2VsZWN0aW9uQ2hhbmdlZChldmVudDogRXZlbnQsIGlkeDogc3RyaW5nKSB7XHJcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5nZXRGb3JtQ29udHJvbCgnMCcsIGlkeCk7XHJcbiAgICBsZXQgZ3VpRXZlbnQ6IElHdWlFdmVudCA9IGdldEd1aUV2ZW50T2JqKCdzZWxlY3Rpb25jaGFuZ2VkJywgaWR4LCAwKTtcclxuICAgIGlmKHR5cGVvZiByZXN1bHQudmFsdWUgIT09ICdzdHJpbmcnKVxyXG4gICAgICBndWlFdmVudC5WYWx1ZSA9IHJlc3VsdC52YWx1ZS5pbmRleDtcclxuICAgIGVsc2VcclxuICAgICAgZ3VpRXZlbnQuVmFsdWUgPSAgcmVzdWx0LnZhbHVlO1xyXG4gICAgdGhpcy5pbnNlcnRFdmVudChndWlFdmVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbnNlcnRzIHRoZSBcImNsb3NlXCIgZXZlbnQgdG8gdGhlIG1hZ2ljIFdlYkNsaWVudCBldmVudCBxdWV1ZVxyXG4gICAqL1xyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5pbnNlcnRFdmVudChnZXRHdWlFdmVudE9iaignY2xvc2UnLCBudWxsLCAwKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIElzU3R1YigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLm1hZ2ljLmlzU3R1YjtcclxuXHJcbiAgfVxyXG5cclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gIC8vL1N0dWIgaGFuZGxpbmdcclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAganNvbkRhdGE6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHNhdmVEYXRhKGRhdGE6IHN0cmluZykge1xyXG4gICAgdGhpcy5tYWdpYy5zYXZlRGF0YShkYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEBpZ25vcmVcclxuICAgKi9cclxuICBwdWJsaWMgY3JlYXRlRGF0YSgpIHtcclxuICAgIGxldCBteURhdGEgPSB7XHJcbiAgICAgIHJlY29yZHM6IHRoaXMuUmVjb3JkcyxcclxuICAgICAgdGVtcGxhdGU6IHRoaXMudGVtcGxhdGVcclxuICAgIH07XHJcbiAgICBsZXQgdGV4dDogc3RyaW5nID0gJ2xvYWREYXRhKCk6YW55ICAge1xcbicgK1xyXG4gICAgICAnICAgIGxldCBzdHViRGF0YSA9ICcgKyBKU09OLnN0cmluZ2lmeShteURhdGEpICsgJztcXG4nICtcclxuICAgICAgJyAgICB0aGlzLmxvYWRTdHViRGF0YShzdHViRGF0YSk7fSc7XHJcbiAgICBjb25zb2xlLmxvZyh0ZXh0KTtcclxuICAgIHRoaXMuc2F2ZURhdGEodGV4dCk7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBsb2FkU3R1YkRhdGEoc3R1YkRhdGE6IGFueSkge1xyXG5cclxuICAgIHRoaXMuUmVjb3JkcyA9IHN0dWJEYXRhLnJlY29yZHM7XHJcbiAgICB0aGlzLnNldHRlbXBsYXRlKHN0dWJEYXRhLnRlbXBsYXRlKTtcclxuICAgIHRoaXMudGFza0lkID0gJzEnO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLlJlY29yZHMubGlzdC5sZW5ndGg7IGkrKylcclxuICAgICAgdGhpcy5idWlsZFRhYmxlUm93Q29udHJvbHMoaSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaWdub3JlXHJcbiAgICovXHJcbiAgcHVibGljIGxvYWREYXRhKCkge1xyXG4gICAgYWxlcnQoJ1BsZWFzZSwgb3ZlcndyaXRlIG1ldGhvZCBsb2FkRGF0YScpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGlnbm9yZVxyXG4gICAqL1xyXG4gIHNldFN0dWJWYWx1ZShndWlSb3dJZDogbnVtYmVyLCBmYzogRm9ybUNvbnRyb2wsIG5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuSXNTdHViKCkpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBsZXQgdmFsID0gdGhpcy5SZWNvcmRzLmxpc3RbZ3VpUm93SWRdLnZhbHVlc1tuYW1lXTtcclxuICAgICAgICBmYy5zZXRWYWx1ZSh2YWwpO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEVuZCBvZiBzdHViIGhhbmRsaW5cclxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG59XHJcblxyXG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import { InteractiveCommandType } from '@magic-xpa/gui';
2
- import { isNullOrUndefined } from 'util';
2
+ import { isNullOrUndefined } from '@magic-xpa/mscorelib';
3
3
  import { RouterContainerMagicComponent } from "./router-container.magic.component";
4
4
  export class GuiInteractiveExecutor {
5
5
  Run() {
@@ -95,4 +95,4 @@ export class GuiInteractiveExecutor {
95
95
  this.command.resultString = RouterContainerMagicComponent.LastRoute;
96
96
  }
97
97
  }
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3VpSW50ZXJhY3RpdmVFeGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL3VpL0d1aUludGVyYWN0aXZlRXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixzQkFBc0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXRFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUd2QyxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQU1qRixNQUFNLE9BQU8sc0JBQXNCO0lBT2pDLEdBQUc7UUFFRCxJQUFJO1lBQ0YsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtnQkFFakMsS0FBSyxzQkFBc0IsQ0FBQyxTQUFTO29CQUNuQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ2YsTUFBTTtnQkFFUixLQUFLLHNCQUFzQixDQUFDLGdCQUFnQjtvQkFDMUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUN2QixNQUFNO2dCQUNSLEtBQUssc0JBQXNCLENBQUMsK0JBQStCO29CQUN6RCxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztvQkFDcEMsTUFBTTtnQkFDUixLQUFLLHNCQUFzQixDQUFDLFdBQVc7b0JBQ3JDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDcEIsTUFBTTtnQkFDUixLQUFLLHNCQUFzQixDQUFDLGFBQWE7b0JBQ3ZDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDckIsTUFBTTtnQkFDUixLQUFLLHNCQUFzQixDQUFDLGtCQUFrQjtvQkFDNUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7b0JBQ3pCLE1BQU07Z0JBQ1IsS0FBSyxzQkFBc0IsQ0FBQyxTQUFTO29CQUNuQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQ2xCLE1BQU07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Q0FBQyxTQUFTLENBQUM7SUFDdEUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtHdWlJbnRlcmFjdGl2ZSwgSW50ZXJhY3RpdmVDb21tYW5kVHlwZX0gZnJvbSAnQG1hZ2ljLXhwYS9ndWknO1xyXG5pbXBvcnQge1Rhc2tCYXNlTWFnaWNDb21wb25lbnR9IGZyb20gJy4vdGFzay1iYXNlLm1hZ2ljLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7aXNOdWxsT3JVbmRlZmluZWR9IGZyb20gJ3V0aWwnO1xyXG5pbXBvcnQge1Rhc2tNYWdpY1NlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL3Rhc2subWFnaWNzLnNlcnZpY2UnO1xyXG5pbXBvcnQge092ZXJsYXlXaW5kb3dTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9PdmVybGF5V2luZG93U2VydmljZSc7XHJcbmltcG9ydCB7Um91dGVyQ29udGFpbmVyTWFnaWNDb21wb25lbnR9IGZyb20gXCIuL3JvdXRlci1jb250YWluZXIubWFnaWMuY29tcG9uZW50XCI7XHJcblxyXG5cclxuLyoqXHJcbiAqIEBpZ25vcmVcclxuICovXHJcbmV4cG9ydCBjbGFzcyBHdWlJbnRlcmFjdGl2ZUV4ZWN1dG9yIHtcclxuICBjb21tYW5kOiBHdWlJbnRlcmFjdGl2ZTtcclxuICBjb21wb25lbnQ6IFRhc2tCYXNlTWFnaWNDb21wb25lbnQ7XHJcbiAgdGFzazogVGFza01hZ2ljU2VydmljZTtcclxuICBvdmVybGF5U2VydmljZTogT3ZlcmxheVdpbmRvd1NlcnZpY2U7XHJcblxyXG5cclxuICBSdW4oKTogdm9pZCB7XHJcbiAgICAvLyBTZXRzIHRoZSBjdXJyZW50Q29udGV4dElEXHJcbiAgICB0cnkge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuY29tbWFuZC5fY29tbWFuZFR5cGUpIHtcclxuXHJcbiAgICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9WQUxVRTpcclxuICAgICAgICAgIHRoaXMub25WYWx1ZSgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfUk9XU19JTl9QQUdFOlxyXG4gICAgICAgICAgdGhpcy5vbkdldFJvd3NJblBhZ2UoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfTUFYX1JPV1NfSU5fUEFHSU5BVEVEX1RBQkxFOlxyXG4gICAgICAgICAgdGhpcy5vbkdldE1heFJvd3NJblBhZ2luYXRlZFRhYmxlKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuTUVTU0FHRV9CT1g6XHJcbiAgICAgICAgICB0aGlzLk9uTWVzc2FnZUJveCgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9UT1BfSU5ERVg6XHJcbiAgICAgICAgICB0aGlzLk9uR2V0VG9wSW5kZXgoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfSVNfUk9XX0VESVRJTkc6XHJcbiAgICAgICAgICB0aGlzLk9uR2V0SXNSb3dFZGl0aW5nKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuU0VUX1RJVExFOlxyXG4gICAgICAgICAgdGhpcy5PblNldFRpdGxlKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuUkVGUkVTSF9QQUdFOlxyXG4gICAgICAgICAgdGhpcy5PblJlZnJlc2hQYWdlKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0xBU1RfUk9VVEU6XHJcbiAgICAgICAgICB0aGlzLk9uR2V0TGFzdFJvdXRlKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgdGhyb3cgZXg7XHJcbiAgICAgIC8vd2FudCB0byBzZWUgYWxsIHRoZSBleGNlcHRpb25zIGZvciBub3dcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgc3RhdGljIGV4ZWN1dGVJbnRlcmFjdGl2ZUNvbW1hbmQodGFzazogVGFza01hZ2ljU2VydmljZSwgZ3VpSW50YWN0aXZlQ29tbWFuZDogR3VpSW50ZXJhY3RpdmUsIG92ZXJsYXlTZXJ2aWNlOiBPdmVybGF5V2luZG93U2VydmljZSkge1xyXG4gICAgbGV0IGV4ZWN1dG9yID0gbmV3IEd1aUludGVyYWN0aXZlRXhlY3V0b3IoKTtcclxuICAgIGV4ZWN1dG9yLnRhc2sgPSB0YXNrO1xyXG4gICAgZXhlY3V0b3IuY29tbWFuZCA9IGd1aUludGFjdGl2ZUNvbW1hbmQ7XHJcbiAgICBleGVjdXRvci5vdmVybGF5U2VydmljZSA9IG92ZXJsYXlTZXJ2aWNlO1xyXG4gICAgZXhlY3V0b3IuUnVuKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uVmFsdWUoKTogdm9pZCB7XHJcbiAgICBsZXQgZ3VpUm93SWQ6IG51bWJlciA9IHRoaXMudGFzay5nZXRHdWlSb3dJZCgrdGhpcy5jb21tYW5kLl9saW5lLCB0aGlzLnRhc2suaXNUYWJsZUNvbnRyb2wodGhpcy5jb21tYW5kLmNvbnRyb2xOYW1lKSB8fCB0aGlzLmNvbW1hbmQuX29iajIuSXNUYWJsZUNoaWxkKTtcclxuICAgIGxldCByZXN1bHQgPSB0aGlzLnRhc2suZ2V0Rm9ybUNvbnRyb2woZ3VpUm93SWQudG9TdHJpbmcoKSwgdGhpcy5jb21tYW5kLmNvbnRyb2xOYW1lKTtcclxuICAgIGxldCB2YWw6IGFueTtcclxuICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVzdWx0KSkge1xyXG4gICAgICB2YWwgPSByZXN1bHQudmFsdWU7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMudGFzay5pc1RhYmxlQ29udHJvbCh0aGlzLmNvbW1hbmQuY29udHJvbE5hbWUpKVxyXG4gICAgICB2YWwgPSB0aGlzLnRhc2suZ2V0VmFsdWUodGhpcy5jb21tYW5kLmNvbnRyb2xOYW1lLCBndWlSb3dJZC50b1N0cmluZygpKTtcclxuXHJcbiAgICB2YWwgPSB0aGlzLnRhc2suQ29udmVydFZhbFRvTmF0aXZlKHRoaXMuY29tbWFuZC5jb250cm9sTmFtZSwgZ3VpUm93SWQsIHZhbCk7XHJcblxyXG4gICAgdGhpcy5jb21tYW5kLl9tZ1ZhbHVlLm9iaiA9IHZhbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25HZXRSb3dzSW5QYWdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb21tYW5kLl9pbnRWYWwxID0gdGhpcy50YXNrLnRhYmxlU2VydmljZS5nZXRQYWdlU2l6ZSgpO1xyXG4gICAgaWYgKHRoaXMudGFzay5vbGRQYWdlU2l6ZSA9PSAwKVxyXG4gICAgICB0aGlzLnRhc2sub2xkUGFnZVNpemUgPSB0aGlzLmNvbW1hbmQuX2ludFZhbDE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uR2V0TWF4Um93c0luUGFnaW5hdGVkVGFibGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbW1hbmQuX2ludFZhbDEgPSB0aGlzLnRhc2sudGFibGVTZXJ2aWNlLmdldE1heFJvd3NJblRhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIE9uTWVzc2FnZUJveCgpIHtcclxuICAgIHRoaXMub3ZlcmxheVNlcnZpY2Uub3BlbkNvbmZpcm1hdGlvbkJveCh0aGlzLmNvbW1hbmQuX21nVmFsdWUudGl0bGUsIHRoaXMuY29tbWFuZC5fbWdWYWx1ZS5zdHIsIHRoaXMuY29tbWFuZC5fbWdWYWx1ZS5zdHlsZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIE9uU2V0VGl0bGUoKSB7XHJcbiAgICB0aGlzLnRhc2suc2V0VGl0bGUodGhpcy5jb21tYW5kLl9tZ1ZhbHVlLnRpdGxlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgT25SZWZyZXNoUGFnZSgpIHtcclxuICAgIGxldCBuYXZpZ2F0ZVRvUm9vdFJvdXRlID0gdGhpcy5jb21tYW5kLl9ib29sVmFsO1xyXG4gICAgbGV0IGluaXRpYWxVcmw6c3RyaW5nID0gdGhpcy5jb21tYW5kLl9vYmoxO1xyXG4gICAgaWYgKG5hdmlnYXRlVG9Sb290Um91dGUpXHJcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlIChpbml0aWFsVXJsKTtcclxuICAgIGVsc2VcclxuICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBPbkdldFRvcEluZGV4KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb21tYW5kLl9pbnRWYWwxID0gdGhpcy50YXNrLnRhYmxlU2VydmljZS5nZXRUYWJsZVRvcEluZGV4KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIE9uR2V0SXNSb3dFZGl0aW5nKCk6IHZvaWQge1xyXG4gICAgbGV0IGR2Um93SW5kZXg6IG51bWJlciA9IHRoaXMuY29tbWFuZC5faW50VmFsMTtcclxuICAgIGxldCBndWlSb3dJbmRleDogbnVtYmVyID0gdGhpcy50YXNrLmdldEd1aVJvd0lkKGR2Um93SW5kZXgsIHRydWUpO1xyXG4gICAgbGV0IGlzTGluZU1vZGU6IGJvb2xlYW4gPSB0aGlzLmNvbW1hbmQuX2Jvb2xWYWw7XHJcblxyXG4gICAgaWYgKGlzTGluZU1vZGUgJiYgKGlzTnVsbE9yVW5kZWZpbmVkKGd1aVJvd0luZGV4KSB8fCBpc051bGxPclVuZGVmaW5lZCh0aGlzLnRhc2suUmVjb3Jkcy5saXN0W2d1aVJvd0luZGV4XSkpKVxyXG4gICAgICB0aGlzLmNvbW1hbmQuX2Jvb2xWYWwgPSBmYWxzZTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5jb21tYW5kLl9ib29sVmFsID0gdGhpcy50YXNrLlJlY29yZHMubGlzdFtndWlSb3dJbmRleF0uaXNFZGl0aW5nO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBPbkdldExhc3RSb3V0ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY29tbWFuZC5yZXN1bHRTdHJpbmcgPSBSb3V0ZXJDb250YWluZXJNYWdpY0NvbXBvbmVudC5MYXN0Um91dGU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3VpSW50ZXJhY3RpdmVFeGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXIvc3JjL3VpL0d1aUludGVyYWN0aXZlRXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixzQkFBc0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXRFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBR3ZELE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBTWpGLE1BQU0sT0FBTyxzQkFBc0I7SUFPakMsR0FBRztRQUVELElBQUk7WUFDRixRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO2dCQUVqQyxLQUFLLHNCQUFzQixDQUFDLFNBQVM7b0JBQ25DLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDZixNQUFNO2dCQUVSLEtBQUssc0JBQXNCLENBQUMsZ0JBQWdCO29CQUMxQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ3ZCLE1BQU07Z0JBQ1IsS0FBSyxzQkFBc0IsQ0FBQywrQkFBK0I7b0JBQ3pELElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO29CQUNwQyxNQUFNO2dCQUNSLEtBQUssc0JBQXNCLENBQUMsV0FBVztvQkFDckMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNwQixNQUFNO2dCQUNSLEtBQUssc0JBQXNCLENBQUMsYUFBYTtvQkFDdkMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUNyQixNQUFNO2dCQUNSLEtBQUssc0JBQXNCLENBQUMsa0JBQWtCO29CQUM1QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztvQkFDekIsTUFBTTtnQkFDUixLQUFLLHNCQUFzQixDQUFDLFNBQVM7b0JBQ25DLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDbEIsTUFB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QixDQUFDLFNBQVMsQ0FBQztJQUN0RSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0d1aUludGVyYWN0aXZlLCBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlfSBmcm9tICdAbWFnaWMteHBhL2d1aSc7XHJcbmltcG9ydCB7VGFza0Jhc2VNYWdpY0NvbXBvbmVudH0gZnJvbSAnLi90YXNrLWJhc2UubWFnaWMuY29tcG9uZW50JztcclxuaW1wb3J0IHtpc051bGxPclVuZGVmaW5lZH0gZnJvbSAnQG1hZ2ljLXhwYS9tc2NvcmVsaWInO1xyXG5pbXBvcnQge1Rhc2tNYWdpY1NlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL3Rhc2subWFnaWNzLnNlcnZpY2UnO1xyXG5pbXBvcnQge092ZXJsYXlXaW5kb3dTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9PdmVybGF5V2luZG93U2VydmljZSc7XHJcbmltcG9ydCB7Um91dGVyQ29udGFpbmVyTWFnaWNDb21wb25lbnR9IGZyb20gXCIuL3JvdXRlci1jb250YWluZXIubWFnaWMuY29tcG9uZW50XCI7XHJcblxyXG5cclxuLyoqXHJcbiAqIEBpZ25vcmVcclxuICovXHJcbmV4cG9ydCBjbGFzcyBHdWlJbnRlcmFjdGl2ZUV4ZWN1dG9yIHtcclxuICBjb21tYW5kOiBHdWlJbnRlcmFjdGl2ZTtcclxuICBjb21wb25lbnQ6IFRhc2tCYXNlTWFnaWNDb21wb25lbnQ7XHJcbiAgdGFzazogVGFza01hZ2ljU2VydmljZTtcclxuICBvdmVybGF5U2VydmljZTogT3ZlcmxheVdpbmRvd1NlcnZpY2U7XHJcblxyXG5cclxuICBSdW4oKTogdm9pZCB7XHJcbiAgICAvLyBTZXRzIHRoZSBjdXJyZW50Q29udGV4dElEXHJcbiAgICB0cnkge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuY29tbWFuZC5fY29tbWFuZFR5cGUpIHtcclxuXHJcbiAgICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9WQUxVRTpcclxuICAgICAgICAgIHRoaXMub25WYWx1ZSgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfUk9XU19JTl9QQUdFOlxyXG4gICAgICAgICAgdGhpcy5vbkdldFJvd3NJblBhZ2UoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfTUFYX1JPV1NfSU5fUEFHSU5BVEVEX1RBQkxFOlxyXG4gICAgICAgICAgdGhpcy5vbkdldE1heFJvd3NJblBhZ2luYXRlZFRhYmxlKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuTUVTU0FHRV9CT1g6XHJcbiAgICAgICAgICB0aGlzLk9uTWVzc2FnZUJveCgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBJbnRlcmFjdGl2ZUNvbW1hbmRUeXBlLkdFVF9UT1BfSU5ERVg6XHJcbiAgICAgICAgICB0aGlzLk9uR2V0VG9wSW5kZXgoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgSW50ZXJhY3RpdmVDb21tYW5kVHlwZS5HRVRfSVNfUk9XX0VESVRJTkc6XHJcbiAgICAgICAgICB0aGlzLk9uR2V0SXNSb3dFZGl0aW5nKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuU0VUX1RJVExFOlxyXG4gICAgICAgICAgdGhpcy5PblNldFRpdGxlKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuUkVGUkVTSF9QQUdFOlxyXG4gICAgICAgICAgdGhpcy5PblJlZnJlc2hQYWdlKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIEludGVyYWN0aXZlQ29tbWFuZFR5cGUuR0VUX0xBU1RfUk9VVEU6XHJcbiAgICAgICAgICB0aGlzLk9uR2V0TGFzdFJvdXRlKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXgpIHtcclxuICAgICAgdGhyb3cgZXg7XHJcbiAgICAgIC8vd2FudCB0byBzZWUgYWxsIHRoZSBleGNlcHRpb25zIGZvciBub3dcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBwdWJsaWMgc3RhdGljIGV4ZWN1dGVJbnRlcmFjdGl2ZUNvbW1hbmQodGFzazogVGFza01hZ2ljU2VydmljZSwgZ3VpSW50YWN0aXZlQ29tbWFuZDogR3VpSW50ZXJhY3RpdmUsIG92ZXJsYXlTZXJ2aWNlOiBPdmVybGF5V2luZG93U2VydmljZSkge1xyXG4gICAgbGV0IGV4ZWN1dG9yID0gbmV3IEd1aUludGVyYWN0aXZlRXhlY3V0b3IoKTtcclxuICAgIGV4ZWN1dG9yLnRhc2sgPSB0YXNrO1xyXG4gICAgZXhlY3V0b3IuY29tbWFuZCA9IGd1aUludGFjdGl2ZUNvbW1hbmQ7XHJcbiAgICBleGVjdXRvci5vdmVybGF5U2VydmljZSA9IG92ZXJsYXlTZXJ2aWNlO1xyXG4gICAgZXhlY3V0b3IuUnVuKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uVmFsdWUoKTogdm9pZCB7XHJcbiAgICBsZXQgZ3VpUm93SWQ6IG51bWJlciA9IHRoaXMudGFzay5nZXRHdWlSb3dJZCgrdGhpcy5jb21tYW5kLl9saW5lLCB0aGlzLnRhc2suaXNUYWJsZUNvbnRyb2wodGhpcy5jb21tYW5kLmNvbnRyb2xOYW1lKSB8fCB0aGlzLmNvbW1hbmQuX29iajIuSXNUYWJsZUNoaWxkKTtcclxuICAgIGxldCByZXN1bHQgPSB0aGlzLnRhc2suZ2V0Rm9ybUNvbnRyb2woZ3VpUm93SWQudG9TdHJpbmcoKSwgdGhpcy5jb21tYW5kLmNvbnRyb2xOYW1lKTtcclxuICAgIGxldCB2YWw6IGFueTtcclxuICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQocmVzdWx0KSkge1xyXG4gICAgICB2YWwgPSByZXN1bHQudmFsdWU7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMudGFzay5pc1RhYmxlQ29udHJvbCh0aGlzLmNvbW1hbmQuY29udHJvbE5hbWUpKVxyXG4gICAgICB2YWwgPSB0aGlzLnRhc2suZ2V0VmFsdWUodGhpcy5jb21tYW5kLmNvbnRyb2xOYW1lLCBndWlSb3dJZC50b1N0cmluZygpKTtcclxuXHJcbiAgICB2YWwgPSB0aGlzLnRhc2suQ29udmVydFZhbFRvTmF0aXZlKHRoaXMuY29tbWFuZC5jb250cm9sTmFtZSwgZ3VpUm93SWQsIHZhbCk7XHJcblxyXG4gICAgdGhpcy5jb21tYW5kLl9tZ1ZhbHVlLm9iaiA9IHZhbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25HZXRSb3dzSW5QYWdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb21tYW5kLl9pbnRWYWwxID0gdGhpcy50YXNrLnRhYmxlU2VydmljZS5nZXRQYWdlU2l6ZSgpO1xyXG4gICAgaWYgKHRoaXMudGFzay5vbGRQYWdlU2l6ZSA9PSAwKVxyXG4gICAgICB0aGlzLnRhc2sub2xkUGFnZVNpemUgPSB0aGlzLmNvbW1hbmQuX2ludFZhbDE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uR2V0TWF4Um93c0luUGFnaW5hdGVkVGFibGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbW1hbmQuX2ludFZhbDEgPSB0aGlzLnRhc2sudGFibGVTZXJ2aWNlLmdldE1heFJvd3NJblRhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIE9uTWVzc2FnZUJveCgpIHtcclxuICAgIHRoaXMub3ZlcmxheVNlcnZpY2Uub3BlbkNvbmZpcm1hdGlvbkJveCh0aGlzLmNvbW1hbmQuX21nVmFsdWUudGl0bGUsIHRoaXMuY29tbWFuZC5fbWdWYWx1ZS5zdHIsIHRoaXMuY29tbWFuZC5fbWdWYWx1ZS5zdHlsZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIE9uU2V0VGl0bGUoKSB7XHJcbiAgICB0aGlzLnRhc2suc2V0VGl0bGUodGhpcy5jb21tYW5kLl9tZ1ZhbHVlLnRpdGxlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgT25SZWZyZXNoUGFnZSgpIHtcclxuICAgIGxldCBuYXZpZ2F0ZVRvUm9vdFJvdXRlID0gdGhpcy5jb21tYW5kLl9ib29sVmFsO1xyXG4gICAgbGV0IGluaXRpYWxVcmw6c3RyaW5nID0gdGhpcy5jb21tYW5kLl9vYmoxO1xyXG4gICAgaWYgKG5hdmlnYXRlVG9Sb290Um91dGUpXHJcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlIChpbml0aWFsVXJsKTtcclxuICAgIGVsc2VcclxuICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBPbkdldFRvcEluZGV4KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb21tYW5kLl9pbnRWYWwxID0gdGhpcy50YXNrLnRhYmxlU2VydmljZS5nZXRUYWJsZVRvcEluZGV4KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIE9uR2V0SXNSb3dFZGl0aW5nKCk6IHZvaWQge1xyXG4gICAgbGV0IGR2Um93SW5kZXg6IG51bWJlciA9IHRoaXMuY29tbWFuZC5faW50VmFsMTtcclxuICAgIGxldCBndWlSb3dJbmRleDogbnVtYmVyID0gdGhpcy50YXNrLmdldEd1aVJvd0lkKGR2Um93SW5kZXgsIHRydWUpO1xyXG4gICAgbGV0IGlzTGluZU1vZGU6IGJvb2xlYW4gPSB0aGlzLmNvbW1hbmQuX2Jvb2xWYWw7XHJcblxyXG4gICAgaWYgKGlzTGluZU1vZGUgJiYgKGlzTnVsbE9yVW5kZWZpbmVkKGd1aVJvd0luZGV4KSB8fCBpc051bGxPclVuZGVmaW5lZCh0aGlzLnRhc2suUmVjb3Jkcy5saXN0W2d1aVJvd0luZGV4XSkpKVxyXG4gICAgICB0aGlzLmNvbW1hbmQuX2Jvb2xWYWwgPSBmYWxzZTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5jb21tYW5kLl9ib29sVmFsID0gdGhpcy50YXNrLlJlY29yZHMubGlzdFtndWlSb3dJbmRleF0uaXNFZGl0aW5nO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBPbkdldExhc3RSb3V0ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY29tbWFuZC5yZXN1bHRTdHJpbmcgPSBSb3V0ZXJDb250YWluZXJNYWdpY0NvbXBvbmVudC5MYXN0Um91dGU7XHJcbiAgfVxyXG59XHJcbiJdfQ==