@smarterplan/ngx-smarterplan-core 1.1.14 → 1.1.15

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.
@@ -1263,7 +1263,7 @@ export class MatterportService {
1263
1263
  modelNode.obj3D.controls = myControl; // store gizmoCtrl inside object
1264
1264
  if (!this.lastObject3D || !this.lastObject3D.controls) {
1265
1265
  try {
1266
- modelNode.obj3D.id = this.lastObject3D.uuid || this.lastObject3D.id;
1266
+ modelNode.obj3D.uuid = this.lastObject3D.uuid || this.lastObject3D.id;
1267
1267
  }
1268
1268
  catch (e) {
1269
1269
  console.log(`id obj in Scene was not assigned to id from DB since`);
@@ -1289,4 +1289,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
1289
1289
  type: Inject,
1290
1290
  args: ['config']
1291
1291
  }] }, { type: i1.Router }, { type: i2.BaseVisibilityService }, { type: i0.NgZone }]; } });
1292
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tYXR0ZXJwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLGVBQWUsRUFDZixJQUFJLEdBQ0wsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxFQUVMLFdBQVcsRUFFWCxtQkFBbUIsRUFFbkIsT0FBTyxFQUNQLFFBQVEsRUFDUixTQUFTLEVBQ1Qsa0JBQWtCLEdBQ25CLE1BQU0sa0JBQWtCLENBQUM7QUFJMUIsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGtCQUFrQixDQUFDOzs7OztBQXNCNUMsTUFBTSxPQUFPLGlCQUFpQjtJQTJJNUIsWUFDb0IsTUFBYyxFQUN4QixNQUFjLEVBQ2QsaUJBQXdDLEVBQ3hDLE1BQWM7UUFGZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUF1QjtRQUN4QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBaEloQixrQ0FBNkIsR0FBRyxLQUFLLENBQUM7UUFLOUMsZUFBZTtRQUNQLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBRXhCLG9CQUFlLEdBQVcsa0JBQWtCLENBQUMsT0FBTyxDQUFDO1FBRTdELDhEQUE4RDtRQUN0RCxpQkFBWSxHQUFrQixFQUFFLENBQUM7UUFFekMsMERBQTBEO1FBQ2xELG9CQUFlLEdBQStCLElBQUksR0FBRyxFQUFFLENBQUM7UUFFeEQseUJBQW9CLEdBQXFC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TyxDQUFDLEdBQUcsQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO2FBQ3JFO1lBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1NBQ3JDO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELHlCQUF5QjtRQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQzdELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUNwQyxDQUFDOzs4R0Ezb0RVLGlCQUFpQixrQkE0SWxCLFFBQVE7a0hBNUlQLGlCQUFpQixjQUZoQixNQUFNOzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQTZJSSxNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgTmdab25lfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgZ2V0RGlzdGFuY2VCZXR3ZWVuVHdvUG9pbnRzLFxyXG4gIHBvaVR5cGVUb1N0cmluZyxcclxuICB3YWl0LFxyXG59IGZyb20gJy4uL2hlbHBlcnMuc2VydmljZSc7XHJcbmltcG9ydCB7TWF0dGVydGFnRGF0YX0gZnJvbSAnLi4vbWF0dGVydGFnRGF0YSc7XHJcbmltcG9ydCB7XHJcbiAgRGJPYmplY3RUeXBlLFxyXG4gIEZlYXR1cmVUeXBlLFxyXG4gIElPYmplY3QzRCxcclxuICBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLFxyXG4gIFBPSSxcclxuICBQb2lUeXBlLFxyXG4gIFNwTW9kdWxlLFxyXG4gIFRhZ0FjdGlvbixcclxuICBWaWV3ZXJJbnRlcmFjdGlvbnMsXHJcbn0gZnJvbSAnLi4vdHlwZXMuc2VydmljZSc7XHJcbmltcG9ydCB7QmFzZVRhZ1NlcnZpY2V9IGZyb20gJy4vdGFnLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Jhc2VWaXNpYmlsaXR5U2VydmljZX0gZnJvbSAnLi9iYXNlVmlzaWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZyc7XHJcbmltcG9ydCB7Q2FtZXJhTW9kZX0gZnJvbSAnLi4vdHlwZXMuc2VydmljZSc7XHJcblxyXG4vKipcclxuICogQ3VzdG9tIFRocmVlanMgT2JqZWN0IDNEIGludGVyZmFjZVxyXG4gKi9cclxuaW50ZXJmYWNlIFRocmVlSlNPYmplY3QzRCB7XHJcbiAgaWQ6IHN0cmluZztcclxuICB1dWlkPzogc3RyaW5nO1xyXG4gIHBvc2l0aW9uPzogeyB4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyIH1cclxuICByb3RhdGlvbj86IHsgeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciB9XHJcbiAgc2NhbGU/OiB7IHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIgfVxyXG59XHJcblxyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XHJcbiAgICBNUF9TREs6IHsgY29ubmVjdDogRnVuY3Rpb24gfTtcclxuICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXR0ZXJwb3J0U2VydmljZSB7XHJcbiAgcHVibGljIHNkazogYW55O1xyXG5cclxuICBwcml2YXRlIGNvbnRhaW5lcjogYW55O1xyXG5cclxuICAvLyBQb3NpdGlvbiBjYW1lcmFcclxuICBwcml2YXRlIHBvc2VNYXR0ZXJwb3J0OiBhbnk7XHJcblxyXG4gIHB1YmxpYyBwb3NlQ2FtZXJhOiB7IHJvdGF0aW9uOiBhbnk7IHBvc2l0aW9uOiBhbnk7IHN3ZWVwOiBhbnkgfTtcclxuXHJcbiAgLy8gUG9pbnRlciB0cmlja1xyXG4gIHByaXZhdGUgcG9pbnRlckJ1dHRvbjogYW55O1xyXG5cclxuICAvLyBEaXNwbGF5IGFuZCBnZXQgY3VycmVudCBwb3NpdGlvbiBvZiBjdXJzb3IgKGZvciBBZG1pbnMgb25seSlcclxuICBwcml2YXRlIGdldEN1cnNvclBvc2l0aW9uQnV0dG9uOiBhbnk7XHJcbiAgcHJpdmF0ZSBjdXJzb3JQb3NpdGlvbkJ1dHRvbkRpc3BsYXllZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgaW50ZXJ2YWxDdXJzb3JQb2ludGVyUG9zaXRpb246IGFueTtcclxuICBwcml2YXRlIHRleHREaXNwbGF5Q3Vyc29yUG9zaXRpb25QYW5lbDogYW55O1xyXG5cclxuICBwcml2YXRlIG9sZFBvc2VNYXR0ZXJwb3J0UG9zaXRpb246IGFueTtcclxuICAvLyBNZWFzdXJlIG1vZGVcclxuICBwcml2YXRlIGlzTWVhc3VyZU1vZGVPbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGludGVyYWN0aW9uTW9kZTogbnVtYmVyID0gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFQ7XHJcblxyXG4gIC8vIExpc3Qgb2YgY3JlYXRlZCBNYXR0ZXJ0YWcgSURzIGluIHRoZSBjdXJyZW50IHZpZXdlciBzZXNzaW9uXHJcbiAgcHJpdmF0ZSBtYXR0ZXJ0YWdJRHM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuXHJcbiAgLy8gRGljdGlvbm5hcnkgb2YgTWF0dGVydGFnSUQgYW5kIGl0cyBkYXRhIChtYXR0ZXJ0YWdEYXRhKVxyXG4gIHByaXZhdGUgZGljdGlvbm5hcnlUYWdzOiBNYXA8c3RyaW5nLCBNYXR0ZXJ0YWdEYXRhPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgcHJpdmF0ZSBkaWN0aW9ubmFyeU9iamVjdHMzRDogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgcHJpdmF0ZSBkaWN0aW9ubmFyeVNjZW5lT2JqZWN0czNEOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBwcml2YXRlIHRocmVlSlNTY2VuZTogYW55OyAvLyBnbG9iYWwgcm9vdCBzY2VuZSAobm90IHVzZWQgbm93ISlcclxuXHJcbiAgcHJpdmF0ZSBsYXN0TWVhc3VyZSA9IFtdO1xyXG5cclxuICBwcml2YXRlIGRpc3RhbmNlc0xhc3RNZWFzdXJlOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIHJlc29sdXRpb24gPSB7XHJcbiAgICB3aWR0aDogNTAwLFxyXG4gICAgaGVpZ2h0OiA2MDAsXHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSB2aXNpYmlsaXR5ID0ge1xyXG4gICAgbWF0dGVydGFnczogZmFsc2UsXHJcbiAgICBzd2VlcHM6IHRydWUsXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIHRhZ3NBdHRhY2htZW50czogT2JqZWN0ID0ge307XHJcblxyXG4gIHByaXZhdGUgbGFzdFNjcmVlbnNob3RVcmk6IGFueTtcclxuXHJcbiAgcHVibGljIHN3ZWVwczogQXJyYXk8c3RyaW5nPiB8IG51bGw7XHJcblxyXG4gIHB1YmxpYyBjdXJyZW50U3dlZXA6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIC8vY2FtZXJhIHBvc2l0aW9uIHdpdGggcm90YXRpb25cclxuICBwdWJsaWMgY3VycmVudENhbWVyYVBvc2U6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHByaXZhdGUgZmxvb3JzPzogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHNlcXVlbmNlOiBudW1iZXIgfT4gfCBudWxsO1xyXG5cclxuICBwcml2YXRlIF9jdXJyZW50U3BhY2VJRDogc3RyaW5nO1xyXG5cclxuICBwcml2YXRlIGxhc3RPYmplY3QzRDogYW55OyAvLyBUaHJlZSBKUyBvYmplY3RcclxuXHJcbiAgcHJpdmF0ZSBjdXJyZW50Rmxvb3I7XHJcblxyXG4gIHB1YmxpYyBnZXQgY3VycmVudFNwYWNlSUQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3BhY2VJRDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgY3VycmVudFNwYWNlSUQodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fY3VycmVudFNwYWNlSUQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHRpbWVyUG9pbnRlcjogYW55O1xyXG5cclxuICBmb3JiaWRkZW5Td2VlcHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIHB1YmxpYyB0YWdBY3Rpb246IFN1YmplY3Q8eyBhY3Rpb246IHN0cmluZzsgZGF0YTogc3RyaW5nIH0+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHVibGljIG1hdHRlcnRhZ1RvRm9sbG93OiBzdHJpbmcgfCBudWxsO1xyXG5cclxuICB0YWdTZXJ2aWNlOiBCYXNlVGFnU2VydmljZTtcclxuXHJcbiAgY29uZmlnOiBDb25maWc7XHJcblxyXG4gIHB1YmxpYyBpblRyYW5zaXRpb25Nb2RlID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBpblRyYW5zaXRpb25Td2VlcCA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIG5vTGlnaHRGb3JPYmplY3RzID0gdHJ1ZTtcclxuXHJcbiAgcHVibGljIGN1cnJlbnRDYW1lcmFNb2RlOiBDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5PVVRTSURFO1xyXG5cclxuICBwdWJsaWMgb25DYW1lcmFNb2RlQ2hhbmdlZCA9IG5ldyBTdWJqZWN0PENhbWVyYU1vZGU+KCk7XHJcblxyXG4gIHB1YmxpYyBvbkdvVG9UYWcgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcblxyXG4gIHRhZ01lc3Nlbmdlck9uID0gZmFsc2U7XHJcblxyXG4gIFNQTW9kdWxlOiBTcE1vZHVsZTtcclxuXHJcbiAgcHVibGljIG9iamVjdENvbnRyb2w6IGFueTtcclxuXHJcbiAgLyoqXHJcbiAgICogQWN0aW9ucyBvbiBsZWZ0IGNsaWNrIHdoZW4gcG9zaXRpb25pbmcgbWF0dGVydGFnIGluIHZpc2l0XHJcbiAgICovXHJcbiAgcG9pbnRlckxlZnRDbGlja0hhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICBpZiAodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdykge1xyXG4gICAgICBjb25zdCBtYXR0ZXJ0YWdEYXRhID0gdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpO1xyXG4gICAgICBtYXR0ZXJ0YWdEYXRhLnNldFBvc2l0aW9uKHsuLi50aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9ufSk7IC8vIGNvcHkhISBub3QgdGhlIHJlZmVyZW5jZVxyXG4gICAgICBtYXR0ZXJ0YWdEYXRhLnNldE5vcm1hbCh7Li4udGhpcy5wb3NlTWF0dGVycG9ydC5ub3JtYWx9KTsgLy8gY29weSEhIG5vdCB0aGUgcmVmZXJlbmNlXHJcbiAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLnNldCh0aGlzLm1hdHRlcnRhZ1RvRm9sbG93LCBtYXR0ZXJ0YWdEYXRhKTtcclxuICAgICAgdGhpcy51cGRhdGVNYXR0ZXJUYWdDb250ZW50Rm9yVGFnSUQodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uVmFsaWRhdGVkTWF0dGVydGFnKCk7XHJcbiAgfTtcclxuXHJcbiAgcG9pbnRlclJpZ2h0Q2xpY2tIYW5kbGVyID0gKGUpID0+IHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMuY2FuY2VsRm9sbG93aW5nQ3Vyc29yKCk7XHJcbiAgICBhbGVydCgnYWN0aW9uIGNhbmNlbGxlZCcpO1xyXG4gIH07XHJcblxyXG4gIHBvaW50ZXJNaWRkbGVDbGlja0hhbmRsZXIgPSAoZSkgPT4ge1xyXG4gICAgdGhpcy50ZXh0RGlzcGxheUN1cnNvclBvc2l0aW9uUGFuZWwuaW5uZXJIVE1MID0gYHBvc2l0aW9uOlxyXG4gICAgICAgJHt0aGlzLnBvaW50VG9TdHJpbmcodGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbil9XFxuXHJcbiAgICAgICBub3JtYWw6XHJcbiAgICAgICAke3RoaXMucG9pbnRUb1N0cmluZyh0aGlzLnBvc2VNYXR0ZXJwb3J0Lm5vcm1hbCl9XFxuXHJcbiAgICAgICBmbG9vcklkOlxyXG4gICAgICAgJHt0aGlzLnBvc2VNYXR0ZXJwb3J0LmZsb29ySWR9YDtcclxuICAgIC8vIHRoaXMudGV4dERpc3BsYXlDdXJzb3JQb3NpdGlvblBhbmVsLnN0eWxlLmRpc3BsYXkgPSAndmlzaWJsZSc7XHJcbiAgICB0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoJ2NvbmZpZycpIGNvbmZpZzogQ29uZmlnLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgdmlzaWJpbGl0eVNlcnZpY2U6IEJhc2VWaXNpYmlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcclxuICApIHtcclxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xyXG5cclxuICAgIC8vIFRPRE86IG9ubHkgZm9yIGRldiFcclxuICAgIGlmIChkb2N1bWVudC5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJy1kZXYnKSAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5pbnRlcnZhbEN1cnNvclBvaW50ZXJQb3NpdGlvbiA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMucG9zZU1hdHRlcnBvcnQpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG5leHRTaG93ID0gdGhpcy5wb3NlTWF0dGVycG9ydC50aW1lICsgMTAwMDtcclxuICAgICAgICBpZiAobmV3IERhdGUoKS5nZXRUaW1lKCkgPiBuZXh0U2hvdykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb25CdXR0b25EaXNwbGF5ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IHNpemUgPSB7XHJcbiAgICAgICAgICAgIHc6IHRoaXMuY29udGFpbmVyLmNsaWVudFdpZHRoLFxyXG4gICAgICAgICAgICBoOiB0aGlzLmNvbnRhaW5lci5jbGllbnRIZWlnaHQsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgY29uc3QgY29vcmQgPSB0aGlzLnNkay5Db252ZXJzaW9uLndvcmxkVG9TY3JlZW4odGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbiwgdGhpcy5wb3NlQ2FtZXJhLCBzaXplKTtcclxuICAgICAgICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24uc3R5bGUubGVmdCA9IGAke2Nvb3JkLnggLSAyNX1weGA7XHJcbiAgICAgICAgICB0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uLnN0eWxlLnRvcCA9IGAke2Nvb3JkLnkgLSAyMn1weGA7XHJcbiAgICAgICAgICB0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgLy8gdGhpcy50ZXh0RGlzcGxheUN1cnNvclBvc2l0aW9uUGFuZWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb25CdXR0b25EaXNwbGF5ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVzIE1hdHRlcnBvcnQgYW5kIGFsbCBsaXN0ZW5lcnMvZGF0YVxyXG4gICAqIEBwYXJhbSB0YWdTZXJ2aWNlIEJhc2VUYWdTZXJ2aWNlICh0byBpbmplY3QgaHRtbClcclxuICAgKiBAcGFyYW0gbW9kdWxlIFNwTW9kdWxlIChNdXNldW0sIEltbW8pIHRvIHN1YnNjcmliZSBvbmx5IHRvIG5lZWRlZCBmdW5jdGlvbm5uYWxpdGllc1xyXG4gICAqIEByZXR1cm5zIGJvb2xlYW5cclxuICAgKi9cclxuICBhc3luYyBpbml0U2RrKFxyXG4gICAgdGFnU2VydmljZTogQmFzZVRhZ1NlcnZpY2UsXHJcbiAgICBtb2R1bGU6IFNwTW9kdWxlID0gU3BNb2R1bGUuSU1NT1xyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKHRoaXMuc2RrKSB7XHJcbiAgICAgIC8vIGNsZWFuIGlmIHNkayBpcyBydW5uaW5nIGFscmVhZHlcclxuICAgICAgYXdhaXQgdGhpcy5hY3Rpb25fZGVsZXRlX2FsbF9tYXR0ZXJ0YWdzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRhZ1NlcnZpY2UgPSB0YWdTZXJ2aWNlO1xyXG4gICAgdGhpcy5TUE1vZHVsZSA9IG1vZHVsZTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIC8vIFJldHJpZXZlIERPTSBlbGVtZW50c1xyXG4gICAgICB0aGlzLnBvaW50ZXJCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICcjdmlld2VyLXBvaW50ZXItdHJpY2snXHJcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3ZpZXdlci1tb2R1bGUnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAnI3ZpZXdlci1tb2R1bGUnXHJcbiAgICAgICkgYXMgSFRNTElGcmFtZUVsZW1lbnQ7XHJcbiAgICAgIGlmICghaWZyYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBBZGQgbGlzdGVuZXJzXHJcbiAgICAgIGlmICh0aGlzLnBvaW50ZXJCdXR0b24pIHtcclxuICAgICAgICB0aGlzLnBvaW50ZXJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICAgICdjbGljaycsXHJcbiAgICAgICAgICB0aGlzLnBvaW50ZXJMZWZ0Q2xpY2tIYW5kbGVyXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjYW5jZWwgb24gcmlnaHQgY2xpY2tcclxuICAgICAgICB0aGlzLnBvaW50ZXJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICAgICdjb250ZXh0bWVudScsXHJcbiAgICAgICAgICB0aGlzLnBvaW50ZXJSaWdodENsaWNrSGFuZGxlclxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gUmV0cmlldmUgRE9NIGVsZW1lbnRzXHJcbiAgICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICcjYnV0dG9uJ1xyXG4gICAgICApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICB0aGlzLnRleHREaXNwbGF5Q3Vyc29yUG9zaXRpb25QYW5lbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgJyN0ZXh0J1xyXG4gICAgICApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAodGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbikge1xyXG4gICAgICAgIC8vIGdldCBwb3NpdGlvbiBvbiBNYXR0ZXJwb3J0IFwibW9kZWxcIiBvbiBtaWRkbGUgY2xpY2tcclxuICAgICAgICB0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgICAnY2xpY2snLFxyXG4gICAgICAgICAgdGhpcy5wb2ludGVyTWlkZGxlQ2xpY2tIYW5kbGVyXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTG9hZCBTREtcclxuICAgICAgY29uc29sZS5sb2coJ0xvYWRpbmcgTWF0dGVycG9ydCBTREsnKTtcclxuICAgICAgY29uc3Qgc2hvd2Nhc2VXaW5kb3cgPSBpZnJhbWUuY29udGVudFdpbmRvdztcclxuICAgICAgaWZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgJ2xvYWQnLFxyXG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrID0gYXdhaXQgc2hvd2Nhc2VXaW5kb3cuTVBfU0RLLmNvbm5lY3QoXHJcbiAgICAgICAgICAgICAgc2hvd2Nhc2VXaW5kb3csXHJcbiAgICAgICAgICAgICAgJ3FuOXdzYXN1eTVoMmZ6cmJybjFuenIwaWQnLFxyXG4gICAgICAgICAgICAgICczLjUnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBMb2FkIE1hdHRlcnRhZyBpY29ucyBhbmQgY3VzdG9tIHN1YnNjcmlwdGlvbnNcclxuICAgICAgICAgIHN3aXRjaCAobW9kdWxlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgU3BNb2R1bGUuSU1NTzpcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbi10aWNrZXQnLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fdGlja2V0XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbi1lcXVpcG1lbnQnLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fZXF1aXBtZW50XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbi1tZWFzdXJlJyxcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX21lYXN1cmVcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICdpY29uLWRhdGEnLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fZGF0YVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgJ2ljb24tb2JqZWN0M2QnLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fb2JqZWN0M2RcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnNkay5NZWFzdXJlbWVudHMuZGF0YS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgb25BZGRlZDogZnVuY3Rpb24gKFxyXG4gICAgICAgICAgICAgICAgICBpbmRleDogYW55LFxyXG4gICAgICAgICAgICAgICAgICBpdGVtOiB7IHBvaW50czogYW55IH0sXHJcbiAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb246IGFueVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICAgICAvLyAgICAgXCJpdGVtIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uXCIsXHJcbiAgICAgICAgICAgICAgICAgIC8vICAgICBpbmRleCxcclxuICAgICAgICAgICAgICAgICAgLy8gICAgIGl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgIC8vICk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMubWVhc3VyZW1lbnRzW2luZGV4XSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGFzdE1lYXN1cmUgPSBpdGVtLnBvaW50cztcclxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIChjb2xsZWN0aW9uOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ3RoZSBlbnRpcmUgdXAtdG8tZGF0ZSBjb2xsZWN0aW9uJywgY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGlzdGFuY2VGb3JMYXN0TWVhc3VyZW1lbnQoKTtcclxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB0aGlzLnNkay5NZWFzdXJlbWVudHMubW9kZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAobWVhc3VyZW1lbnRNb2RlU3RhdGU6IHsgYWN0aXZlOiBhbnkgfSkge1xyXG4gICAgICAgICAgICAgICAgICAvLyBtZWFzdXJlbWVudCBtb2RlIHN0YXRlIGhhcyBjaGFuZ2VkXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXNNZWFzdXJlTW9kZU9uID0gbWVhc3VyZW1lbnRNb2RlU3RhdGUuYWN0aXZlO1xyXG4gICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnSXMgbWVhc3VyZW1lbnQgbW9kZSBjdXJyZW50bHkgYWN0aXZlPyAnLCBtZWFzdXJlbWVudE1vZGVTdGF0ZS5hY3RpdmUpO1xyXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTcE1vZHVsZS5NVVNFVU06XHJcbiAgICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgJ2ljb24tZGF0YScsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9kYXRhXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTcE1vZHVsZS5IT1RFTDpcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbl9yb29tX2F2YWlsYWJsZScsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9yb29tX2F2YWlsYWJsZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgJ2ljb25fcm9vbV91bmF2YWlsYWJsZScsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9yb29tX3VuYXZhaWxhYmxlXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbl9yb29tX2Nob3NlbicsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9yb29tX2Nob3NlblxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgJ2ljb25fcm9vbV92aWV3ZWQnLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fcm9vbV92aWV3ZWRcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgJ2ljb24tcG9zaXRpb24nLFxyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9wb3NpdGlvblxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIC8vIDNEIHBvc2l0aW9uJ3MgcG9pbnRlclxyXG4gICAgICAgICAgdGhpcy5zZGsuUG9pbnRlci5pbnRlcnNlY3Rpb24uc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoaW50ZXJzZWN0aW9uOiBhbnkpIHtcclxuICAgICAgICAgICAgICB0aGlzLnBvc2VNYXR0ZXJwb3J0ID0gaW50ZXJzZWN0aW9uO1xyXG4gICAgICAgICAgICAgIHRoaXMucG9zZU1hdHRlcnBvcnQudGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5vbGRQb3NlTWF0dGVycG9ydFBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9sZFBvc2VNYXR0ZXJwb3J0UG9zaXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgICAgICAgIHk6IDAsXHJcbiAgICAgICAgICAgICAgICAgIHo6IDAsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcmFjdGlvbk1vZGUgIT09IFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUICYmXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93XHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBmb2xsb3cgdGhlIHBvaW50ZXIgYW5kIGNoYW5nZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IHRhZ1xyXG4gICAgICAgICAgICAgICAgLy8gKHdlIGFyZSBhYm91dCB0byB2YWxpZGF0ZSwgYnV0IGl0IGV4aXN0cyBpbiBzZGsgYWxyZWFkeSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlX2ZvbGxvd2luZ190YWcodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChkb2N1bWVudC5VUkwuaW5kZXhPZignaHR0cHM6Ly9kZXYuc21hcnRlcnBsYW4uaW8nKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb25CdXR0b25EaXNwbGF5ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAvL0NhbWVyYSBtb2RlXHJcbiAgICAgICAgICB0aGlzLnNkay5Nb2RlLmN1cnJlbnQuc3Vic2NyaWJlKChtb2RlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAnbW9kZS5kb2xsaG91c2UnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuRE9MTEhPVVNFO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnbW9kZS5mbG9vcnBsYW4nOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuRkxPT1JQTEFOO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnbW9kZS5pbnNpZGUnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuSU5TSURFO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnbW9kZS50cmFuc2l0aW9uaW5nJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbWVyYU1vZGUgPSBDYW1lcmFNb2RlLlRSQU5TSVRJT05JTkc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuT1VUU0lERTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm9uQ2FtZXJhTW9kZUNoYW5nZWQubmV4dCh0aGlzLmN1cnJlbnRDYW1lcmFNb2RlKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIC8vIENhbWVyYSdzIHZpZXdwb2ludFxyXG4gICAgICAgICAgdGhpcy5zZGsuQ2FtZXJhLnBvc2Uuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzdWJzY3IocG9zZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wb3NlQ2FtZXJhID0gcG9zZTtcclxuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFQb3NlLm5leHQocG9zZSk7XHJcbiAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0N1cnJlbnQgcG9zaXRpb24gaXMgJywgcG9zZS5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ1JvdGF0aW9uIGFuZ2xlIGlzICcsIHBvc2Uucm90YXRpb24pO1xyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU3dlZXAgVVVJRCBpc1wiLCBwb3NlLnN3ZWVwKTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8vIHN1YnNjcmliZSB0byBzd2VlcHNcclxuICAgICAgICAgIHRoaXMuc2RrLlN3ZWVwLmRhdGEuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgb25Db2xsZWN0aW9uVXBkYXRlZDogZnVuY3Rpb24gc3Vic2NyKGNvbGxlY3Rpb246IHt9KSB7XHJcbiAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJTd2VlcCBjb2xsZWN0aW9uIHVwZGF0ZWRcIik7XHJcbiAgICAgICAgICAgICAgdGhpcy5zd2VlcHMgPSBPYmplY3Qua2V5cyhjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgLy8gc3Vic2NyaWJlIHRvIGN1cnJlbnQgc3dlZXBcclxuICAgICAgICAgIHRoaXMuc2RrLlN3ZWVwLmN1cnJlbnQuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzdWJzY3IoY3VycmVudFN3ZWVwOiB7IHNpZDogc3RyaW5nIH0pIHtcclxuICAgICAgICAgICAgICAvLyBDaGFuZ2UgdG8gdGhlIGN1cnJlbnQgc3dlZXAgaGFzIG9jY3VycmVkLlxyXG4gICAgICAgICAgICAgIGlmIChjdXJyZW50U3dlZXAuc2lkID09PSAnJykge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ05vdCBjdXJyZW50bHkgc3RhdGlvbmVkIGF0IGEgc3dlZXAgcG9zaXRpb24nKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJlbW1pdGluZyBzd2VlcFwiLCBjdXJyZW50U3dlZXAuc2lkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN3ZWVwLm5leHQoY3VycmVudFN3ZWVwLnNpZCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIEZsb29yIGRhdGFcclxuICAgICAgICAgIHRoaXMuc2RrLkZsb29yLmRhdGEuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgb25Db2xsZWN0aW9uVXBkYXRlZDogZnVuY3Rpb24gdXBkKHRoaXM6IGFueSwgY29sbGVjdGlvbjogYW55KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mbG9vcnMgPSBPYmplY3QudmFsdWVzKGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvLyBvbiB0YWcgY2xpY2sgb3BlbiBkZXRhaWxzIHBhZ2VcclxuICAgICAgICAgIHRoaXMuc2RrLm9uKCd0YWcuY2xpY2snLCAoc2lkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgLy8gZ2V0IG9iamVjdCBvZiB0aGlzIHRhZ1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG1hdHRlcnRhZ0RhdGEgPSB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQoc2lkKTtcclxuICAgICAgICAgICAgICBjb25zdCB1cmwgPSB0YWdTZXJ2aWNlLmdldFVybEZvclNlZURldGFpbHMoXHJcbiAgICAgICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLmdldE9iamVjdCgpLFxyXG4gICAgICAgICAgICAgICAgbWF0dGVydGFnRGF0YS5nZXRUeXBlKClcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGlmICh1cmwgIT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2liaWxpdHlTZXJ2aWNlLmRldGFpbFNob3dpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBzaG93IGRldGFpbHMgZm9yIHRhZycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvLyBQb2ludGVyIHRyaWNrXHJcbiAgICAgICAgICAvLyBDcmVhdGUgYSBkaXYgdGhhdCB3aWxsIGFwcGVhciB3aGVuIHRoZSBjdXJzb3IgaXMgc3RpbGxcclxuICAgICAgICAgIC8vIEl0IHdpbGwgaW50ZXJjZXB0IHRoZSBjbGljayBvZiB0aGUgbW91c2UgYmVmb3JlIGl0IHRyaWdlcnJpbmcgdGhlIE1hdHRlcnBvcnQncyB0b3VyIG5hdmlnYXRpb25cclxuICAgICAgICAgIHRoaXMudGltZXJQb2ludGVyID0gc2V0SW50ZXJ2YWwoXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9pbnRlclRyaWNrLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIDUwXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICogVHJhbnNpdGlvbnNcclxuICAgICAgICAgICAqL1xyXG4gICAgICAgICAgdGhpcy5zZGsub24oXHJcbiAgICAgICAgICAgICd2aWV3bW9kZS5jaGFuZ2VzdGFydCcsXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICh0bywgZnJvbSkge1xyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdTdGFydGluZyB0byBtb3ZlIHRvICcgKyB0byArICcgZnJvbSAnICsgZnJvbSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Nb2RlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIHRoaXMuc2RrLm9uKFxyXG4gICAgICAgICAgICAndmlld21vZGUuY2hhbmdlZW5kJyxcclxuICAgICAgICAgICAgZnVuY3Rpb24gKG9sZE1vZGUsIG5ld01vZGUpIHtcclxuICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnRW5kZWQgdG8gbW92ZSB0byAnICsgbmV3TW9kZSArICcgZnJvbSAnICsgb2xkTW9kZSk7XHJcbiAgICAgICAgICAgICAgaWYgKG5ld01vZGUgIT09ICdtb2RlLnRyYW5zaXRpb25pbmcnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluVHJhbnNpdGlvbk1vZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnNkay5vbihcclxuICAgICAgICAgICAgdGhpcy5zZGsuU3dlZXAuRXZlbnQuRU5URVIsXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIChvbGRTd2VlcCwgbmV3U3dlZXApIHtcclxuICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnTGVhdmluZyBzd2VlcCAnICsgb2xkU3dlZXApO1xyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdFbnRlcmluZyBzd2VlcCAnICsgbmV3U3dlZXApO1xyXG4gICAgICAgICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5zZGsub24oXHJcbiAgICAgICAgICAgIHRoaXMuc2RrLlN3ZWVwLkV2ZW50LkVYSVQsXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIChmcm9tU3dlZXAsIHRvU3dlZXApIHtcclxuICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCdMZWF2aW5nIHN3ZWVwICcgKyBmcm9tU3dlZXApO1xyXG4gICAgICAgICAgICAgIC8vICAgY29uc29sZS5sb2coJ1RyYW5zaXRpb25pbmcgdG8gc3dlZXAgJyArIHRvU3dlZXApO1xyXG4gICAgICAgICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwb2ludFRvU3RyaW5nKHBvaW50OiB7IHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIgfSk6IHN0cmluZyB7XHJcbiAgICB2YXIgeCA9IHBvaW50LngudG9GaXhlZCgzKTtcclxuICAgIHZhciB5ID0gcG9pbnQueS50b0ZpeGVkKDMpO1xyXG4gICAgdmFyIHogPSBwb2ludC56LnRvRml4ZWQoMyk7XHJcblxyXG4gICAgcmV0dXJuIGB7IHg6ICR7eH0sIHk6ICR7eX0sIHo6ICR7en0gfWA7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0gTWVhc3VyZW1lbnRzIHJlbGF0ZWQgLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLyoqXHJcbiAgICogQ2FsbGJhY2sgYWZ0ZXIgbWVhc3VyZW1lbnQgaXMgcGVyZm9ybWVkXHJcbiAgICovXHJcbiAgZ2V0RGlzdGFuY2VGb3JMYXN0TWVhc3VyZW1lbnQoKSB7XHJcbiAgICBpZiAodGhpcy5sYXN0TWVhc3VyZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IG51bWJlclBvaW50cyA9IHRoaXMubGFzdE1lYXN1cmUubGVuZ3RoO1xyXG4gICAgICB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlID0gW107XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBudW1iZXJQb2ludHM7IGluZGV4ICs9IDEpIHtcclxuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGdldERpc3RhbmNlQmV0d2VlblR3b1BvaW50cyhcclxuICAgICAgICAgIHRoaXMubGFzdE1lYXN1cmVbaW5kZXggLSAxXSxcclxuICAgICAgICAgIHRoaXMubGFzdE1lYXN1cmVbaW5kZXhdXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlLnB1c2goZGlzdGFuY2UpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudGFrZVNjcmVlblNob3QoKS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vYWRkX21lYXN1cmVtZW50YF0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldExhc3REaXN0YW5jZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXN0YW5jZXNMYXN0TWVhc3VyZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRha2VzIHNjcmVlbnNob3QgYW5kIHNhdmVzIGJhc2U2NCBpbiBsYXN0U2NyZWVuc2hvdFVyaVxyXG4gICAqIEByZXR1cm5zIFByb21pc2VcclxuICAgKi9cclxuICB0YWtlU2NyZWVuU2hvdCgpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2RrLlJlbmRlcmVyLnRha2VTY3JlZW5TaG90KFxyXG4gICAgICB0aGlzLnJlc29sdXRpb24sXHJcbiAgICAgIHRoaXMudmlzaWJpbGl0eVxyXG4gICAgKS50aGVuKFxyXG4gICAgICBmdW5jdGlvbiAoc2NyZWVuU2hvdFVyaTogYW55KSB7XHJcbiAgICAgICAgLy8gYmFzZTY0IHN0cmluZ1xyXG4gICAgICAgIHRoaXMubGFzdFNjcmVlbnNob3RVcmkgPSBzY3JlZW5TaG90VXJpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2NyZWVuU2hvdFVyaSgpIHtcclxuICAgIHJldHVybiB0aGlzLmxhc3RTY3JlZW5zaG90VXJpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGFzdE1lYXN1cmVtZW50KCk6IE9iamVjdCB7XHJcbiAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICBtZWFzdXJlOiB0aGlzLmxhc3RNZWFzdXJlLFxyXG4gICAgICBzd2VlcDogdGhpcy5wb3NlQ2FtZXJhLnN3ZWVwLFxyXG4gICAgfTtcclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tIFV0aWxzIC0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8qKlxyXG4gICAqIFN0eWxpbmcgb2YgcG9pbnRlclxyXG4gICAqL1xyXG4gIHVwZGF0ZVBvaW50ZXJUcmljaygpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5pbnRlcmFjdGlvbk1vZGUgIT09IFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUICYmXHJcbiAgICAgIHRoaXMubWF0dGVydGFnVG9Gb2xsb3cgJiZcclxuICAgICAgdGhpcy5wb3NlTWF0dGVycG9ydCAmJlxyXG4gICAgICB0aGlzLmdldERpc3RQb3NpdGlvbihcclxuICAgICAgICB0aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLFxyXG4gICAgICAgIHRoaXMub2xkUG9zZU1hdHRlcnBvcnRQb3NpdGlvblxyXG4gICAgICApID4gMjVcclxuICAgICkge1xyXG4gICAgICB0aGlzLnBvaW50ZXJCdXR0b24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHJcbiAgICAgIGNvbnN0IHNpemUgPSB7XHJcbiAgICAgICAgdzogdGhpcy5jb250YWluZXIuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgaDogdGhpcy5jb250YWluZXIuY2xpZW50SGVpZ2h0LFxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBjb29yZHMgPSB0aGlzLnNkay5Db252ZXJzaW9uLndvcmxkVG9TY3JlZW4oXHJcbiAgICAgICAgdGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbixcclxuICAgICAgICB0aGlzLnBvc2VDYW1lcmEsXHJcbiAgICAgICAgc2l6ZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnBvaW50ZXJCdXR0b24uc3R5bGUubGVmdCA9IGAke1xyXG4gICAgICAgIGNvb3Jkcy54ICogTWF0aC5zaWduKGNvb3Jkcy54KSAtIDI1XHJcbiAgICAgIH1weGA7XHJcbiAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5zdHlsZS50b3AgPSBgJHtjb29yZHMueSAqIE1hdGguc2lnbihjb29yZHMueCkgLSAyNX1weGA7XHJcbiAgICAgIHRoaXMub2xkUG9zZU1hdHRlcnBvcnRQb3NpdGlvbiA9IHtcclxuICAgICAgICAuLi50aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVhbHRpbWUgbWF0dGVydGFnIGZvbGxvd2luZyB0aGUgY3Vyc29yXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZyBzdHJpbmdcclxuICAgKi9cclxuICBlbmFibGVfZm9sbG93aW5nX3RhZyhtYXR0ZXJ0YWc6IHN0cmluZykge1xyXG4gICAgdGhpcy5zZGsuVGFnLmVkaXRQb3NpdGlvbihtYXR0ZXJ0YWcsIHtcclxuICAgICAgYW5jaG9yUG9zaXRpb246IHtcclxuICAgICAgICB4OiB0aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLnggKiAxLFxyXG4gICAgICAgIHk6IHRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24ueSAqIDEsXHJcbiAgICAgICAgejogdGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbi56ICogMSxcclxuICAgICAgfSxcclxuICAgICAgc3RlbVZlY3Rvcjoge1xyXG4gICAgICAgIHg6IHRoaXMucG9zZU1hdHRlcnBvcnQubm9ybWFsLnggKiAwLjMsXHJcbiAgICAgICAgeTogdGhpcy5wb3NlTWF0dGVycG9ydC5ub3JtYWwueSAqIDAuMyxcclxuICAgICAgICB6OiB0aGlzLnBvc2VNYXR0ZXJwb3J0Lm5vcm1hbC56ICogMC4zLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGRpc3RhbmNlIGJldHd3ZWVuIHR3byAzRCBwb3NpdGlvbnNcclxuICAgKiBVc2VkIGluIG9yZGVyIHRvIHNlZSBob3cgbXVjaCB0aGUgY3Vyc29yIGhhcyBtb3ZlZCBmcm9tIHRoZSBwcmV2aW91cyBwb3NpdGlvblxyXG4gICAqIEBwYXJhbSBwb3MxXHJcbiAgICogQHBhcmFtIHBvczJcclxuICAgKi9cclxuICBnZXREaXN0UG9zaXRpb24ocG9zMTogYW55LCBwb3MyOiBhbnkpIHtcclxuICAgIGNvbnN0IHNpemUgPSB7XHJcbiAgICAgIHc6IHRoaXMuY29udGFpbmVyLmNsaWVudFdpZHRoLFxyXG4gICAgICBoOiB0aGlzLmNvbnRhaW5lci5jbGllbnRIZWlnaHQsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgY29vcmRzMSA9IHRoaXMuc2RrLkNvbnZlcnNpb24ud29ybGRUb1NjcmVlbihcclxuICAgICAgcG9zMSxcclxuICAgICAgdGhpcy5wb3NlQ2FtZXJhLFxyXG4gICAgICBzaXplXHJcbiAgICApO1xyXG4gICAgY29uc3QgY29vcmRzMiA9IHRoaXMuc2RrLkNvbnZlcnNpb24ud29ybGRUb1NjcmVlbihcclxuICAgICAgcG9zMixcclxuICAgICAgdGhpcy5wb3NlQ2FtZXJhLFxyXG4gICAgICBzaXplXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIE1hdGguc3FydChcclxuICAgICAgKGNvb3JkczEueCAtIGNvb3JkczIueCkgKiogMiArIChjb29yZHMxLnkgLSBjb29yZHMyLnkpICoqIDJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0gTWF0dGVydGFnIHJlbGF0ZWQgLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyB0aGUgTWF0dGVydGFnIHRoYXQgd2lsbCBmb2xsb3cgdGhlIGN1cnNvclxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdEYXRhIE1hdHRlcnRhZ0RhdGFcclxuICAgKi9cclxuICBhc3luYyBhZGRDdXJzb3JNYXR0ZXJ0YWcobWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YSkge1xyXG4gICAgaWYgKCF0aGlzLnBvc2VNYXR0ZXJwb3J0KSByZXR1cm47XHJcbiAgICB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93ID0gYXdhaXQgdGhpcy5hZGRNYXR0ZXJ0YWdUb1ZpZXdlcihtYXR0ZXJ0YWdEYXRhKTtcclxuICAgIGNvbnNvbGUubG9nKCdmb2xsb3dpbmcgdGhlIHRhZycsIHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpO1xyXG4gICAgdGhpcy5zZGsuVGFnLmVkaXRJY29uKHRoaXMubWF0dGVydGFnVG9Gb2xsb3csICdpY29uLXBvc2l0aW9uJyk7XHJcbiAgICB0aGlzLnNkay5UYWcuZWRpdE9wYWNpdHkodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdywgMSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIE1hdHRlcnRhZyB0byB2aWV3ZXIgZm9yIGFuIGV4aXN0aW5nIG9iamVjdCB3aXRoIGNvb3JkaW5hdGVzIChpbiBtYXR0ZXJ0YWdEYXRhLnBvaSlcclxuICAgKiAocG9zaXRpb24sIGluamVjdGVkIGh0bWwsIHNldCBpY29uKVxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdEYXRhXHJcbiAgICogcmV0dXJucyBtYXR0ZXJ0YWdJRFxyXG4gICAqL1xyXG4gIGFzeW5jIGFkZE1hdHRlcnRhZ1RvVmlld2VyKFxyXG4gICAgbWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YVxyXG4gICk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xyXG4gICAgbGV0IHNpZExpc3Q7XHJcbiAgICBpZiAoIXRoaXMuc2RrKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgc2lkTGlzdCA9IGF3YWl0IHRoaXMuc2RrLlRhZy5hZGQobWF0dGVydGFnRGF0YS5nZXREYXRhKCkpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgJ1RhZyBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIHZpc2l0JyxcclxuICAgICAgICBlcnJvcixcclxuICAgICAgICBtYXR0ZXJ0YWdEYXRhLmdldERhdGEoKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHNpZExpc3QpIHtcclxuICAgICAgY29uc3QgbWF0dGVydGFnSUQgPSBzaWRMaXN0WzBdO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhcImFkZGVkIHRhZ1wiLCBtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKSwgbWF0dGVydGFnSUQpO1xyXG4gICAgICB0aGlzLm1hdHRlcnRhZ0lEcy5wdXNoKG1hdHRlcnRhZ0lEKTtcclxuICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3Muc2V0KG1hdHRlcnRhZ0lELCBtYXR0ZXJ0YWdEYXRhKTtcclxuICAgICAgcmV0dXJuIG1hdHRlcnRhZ0lEO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBY3Rpb25zIHdoZW4gcG9zaXRpb24gb2YgbWF0dGVydGFnIGlzIHZhbGlkYXRlZCBieSBsZWZ0IGNsaWNrXHJcbiAgICovXHJcbiAgb25WYWxpZGF0ZWRNYXR0ZXJ0YWcoKSB7XHJcbiAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVCk7XHJcbiAgICBjb25zdCBsYXN0VGFnID0gdGhpcy5nZXRMYXN0VGFnKCk7XHJcbiAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICBjb25zdCBjYWxsYmFja01vZGUgPSB0aGlzLmRpY3Rpb25uYXJ5VGFnc1xyXG4gICAgICAgIC5nZXQobGFzdFRhZylcclxuICAgICAgICAuZ2V0Q2FsbGJhY2tBY3Rpb25Nb2RlKCk7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2tBZnRlck1hdHRlcnRhZ1ZhbGlkYXRpb24oY2FsbGJhY2tNb2RlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZ2lzdGVycyBuZXcgaWNvbiAocGF0aCB0byBpbWFnZSkgYW5kIHNldCBpdHMgZm9yIE1hdHRlcnRhZ1xyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRCBzdHJpbmdcclxuICAgKiBAcGFyYW0gaWNvblBhdGggc3RyaW5nXHJcbiAgICovXHJcbiAgYXN5bmMgYWRkTmV3SWNvbkFuZFNldEZvclRhZyhtYXR0ZXJ0YWdJRDogc3RyaW5nLCBpY29uUGF0aDogc3RyaW5nKSB7XHJcbiAgICBhd2FpdCB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoYGljb25fJHttYXR0ZXJ0YWdJRH1gLCBpY29uUGF0aCk7XHJcbiAgICB0aGlzLnNkay5UYWcuZWRpdEljb24obWF0dGVydGFnSUQsIGBpY29uXyR7bWF0dGVydGFnSUR9YCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGFuZ2VzIGljb24gb2YgTWF0dGVydGFnICh0aGUgaWNvbk5hbWUgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgPSBvbmUgb2YgZGVmYXVsdCBvbmVzKVxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRCBzdHJpbmdcclxuICAgKiBAcGFyYW0gaWNvbk5hbWUgc3RyaW5nXHJcbiAgICovXHJcbiAgYXN5bmMgc2V0UmVnaXN0cmVkSWNvbkZvclRhZyhtYXR0ZXJ0YWdJRDogc3RyaW5nLCBpY29uTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnNkay5UYWcuZWRpdEljb24obWF0dGVydGFnSUQsIGljb25OYW1lKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgJ2NvdWxkIG5vdCBlZGl0IEljb24gd2l0aCBuYW1lICcsXHJcbiAgICAgICAgaWNvbk5hbWUsXHJcbiAgICAgICAgJy4gSXMgaXQgcmVnaXN0ZXJlZD8nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIGRlZmF1bHQgaWNvbiBmb3IgYSB0YWcgKHJlZ2lzdGVyZWQgaW4gaW5pdFNkaykgT1IgdXNlcyB0YWdJY29uIGZyb20gUE9JIChhdmFpbGFibGUgZnJvbSBNYXR0ZXJ0YWdEYXRhKVxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRCBzdHJpbmdcclxuICAgKiBAcGFyYW0gbWF0dGVydGFnRGF0YSBNYXR0ZXJ0YWdEYXRhXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBhc3luYyBzZXRUYWdJY29uQW5kT3BhY2l0eShcclxuICAgIG1hdHRlcnRhZ0lEOiBzdHJpbmcsXHJcbiAgICBtYXR0ZXJ0YWdEYXRhOiBNYXR0ZXJ0YWdEYXRhXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5TUE1vZHVsZSA9PT0gU3BNb2R1bGUuSE9URUwpIHtcclxuICAgICAgY29uc3Qgcm9vbSA9IG1hdHRlcnRhZ0RhdGEuZ2V0T2JqZWN0KCk7XHJcbiAgICAgIGxldCBpY29uTmFtZSA9IGBpY29uX3Jvb21gO1xyXG4gICAgICBpZiAocm9vbS5hdmFpbGFibGUpIHtcclxuICAgICAgICBpY29uTmFtZSA9IGAke2ljb25OYW1lfV9hdmFpbGFibGVgO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGljb25OYW1lID0gYCR7aWNvbk5hbWV9X3VuYXZhaWxhYmxlYDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNkay5UYWcuZWRpdEljb24obWF0dGVydGFnSUQsIGljb25OYW1lKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc3RyaW5nVGFnVHlwZSA9IHBvaVR5cGVUb1N0cmluZyhtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKSk7XHJcbiAgICBsZXQgb3BhY2l0eSA9IHRoaXMuY29uZmlnLm15X2NvbmZpZy5ERUZBVUxUX09QQUNJVFlfVEFHO1xyXG4gICAgbGV0IGljb25OYW1lID0gYGljb24tJHtzdHJpbmdUYWdUeXBlfWA7XHJcbiAgICBjb25zdCBwb2kgPSBtYXR0ZXJ0YWdEYXRhLmdldFBvaSgpO1xyXG4gICAgaWYgKHBvaSAmJiBwb2kudGFnSWNvbikge1xyXG4gICAgICBjb25zdCB0YWdJY29uID0gSlNPTi5wYXJzZShwb2kudGFnSWNvbik7XHJcbiAgICAgIGlmIChtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKSA9PT0gUG9pVHlwZS5EQVRBKSB7XHJcbiAgICAgICAgY29uc3QgZmVhdHVyZSA9IG1hdHRlcnRhZ0RhdGEuZ2V0T2JqZWN0KCk7XHJcbiAgICAgICAgaWYgKGZlYXR1cmUudHlwZSA9PT0gRmVhdHVyZVR5cGUuSU5ESUNBVE9SX1RFTVApIHtcclxuICAgICAgICAgIHRhZ0ljb24uc3JjID0gdGhpcy50YWdTZXJ2aWNlLmdldEljb25UYWdJbWFnZUZvckZlYXR1cmUoZmVhdHVyZSwgcG9pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRhZ0ljb24uc3JjKSB7XHJcbiAgICAgICAgY29uc3QgcGF0aFNpZ25lZCA9IGF3YWl0IHRoaXMudGFnU2VydmljZS5nZXRTaWduZWRUYWdJY29uU291cmNlKFxyXG4gICAgICAgICAgdGFnSWNvbi5zcmNcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChwYXRoU2lnbmVkKSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpY29uTmFtZSA9IGBpY29uLSR7c3RyaW5nVGFnVHlwZX0tJHttYXR0ZXJ0YWdJRH0tJHttYXR0ZXJ0YWdEYXRhLmN1c3RvbUljb25JbmRleH1gO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoaWNvbk5hbWUsIHBhdGhTaWduZWQpO1xyXG4gICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLmN1c3RvbUljb25JbmRleCArPSAxO1xyXG4gICAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciByZWdpc3Rlckljb24nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRhZ0ljb24ub3BhY2l0eSkge1xyXG4gICAgICAgIG9wYWNpdHkgPSB0YWdJY29uLm9wYWNpdHk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2RrLlRhZy5lZGl0SWNvbihtYXR0ZXJ0YWdJRCwgaWNvbk5hbWUpO1xyXG4gICAgICB0aGlzLnNkay5UYWcuZWRpdE9wYWNpdHkobWF0dGVydGFnSUQsIG9wYWNpdHkpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGVkaXRJY29uIG9yIG9wYWNpdHknLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNb3ZlcyB2aWV3ZXIgdG8gbGFzdCB0YWcgY3JlYXRlZFxyXG4gICAqL1xyXG4gIGdvVG9MYXN0VGFnKCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxhc3RUYWcgPSB0aGlzLmdldExhc3RUYWcoKTtcclxuICAgICAgdGhpcy5nb1RvVGFnKGxhc3RUYWcpO1xyXG4gICAgfSwgMjAwMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNb3ZlcyB2aWV3ZXIgdG8gTWF0dGVydGFnIHdpdGggSUQgcHJvdmlkZWRcclxuICAgKiBAcGFyYW0gbWF0dGVydGFnSUQgc3RyaW5nXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBhc3luYyBnb1RvVGFnKG1hdHRlcnRhZ0lEOiBzdHJpbmcpIHtcclxuICAgIGlmIChtYXR0ZXJ0YWdJRCA9PT0gJycpIHJldHVybjtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMub25Hb1RvVGFnLm5leHQobWF0dGVydGFnSUQpO1xyXG4gICAgICBhd2FpdCB0aGlzLnNkay5Td2VlcC5jdXJyZW50LndhaXRVbnRpbChcclxuICAgICAgICAoY3VycmVudFN3ZWVwKSA9PiBjdXJyZW50U3dlZXAgIT09ICcnXHJcbiAgICAgICk7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2RrLk1hdHRlcnRhZy5uYXZpZ2F0ZVRvVGFnKFxyXG4gICAgICAgIG1hdHRlcnRhZ0lELFxyXG4gICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5UcmFuc2l0aW9uLkZMWVxyXG4gICAgICApO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coJ2Nhbm5vdCBuYXZpZ2F0ZSB0byB0YWcnLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIGNvbnRlbnQgb2YgTWF0dGVydGFnIHdpdGggbWF0dGVydGFnSUQgKGJpbGxib2FyZCwgaW5qZWN0ZWQgaHRtbCwgdGFnIGljb24pXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBvYmplY3QgVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUsIGV0Y1xyXG4gICAqIEBwYXJhbSB0YWdUeXBlIFBvaVR5cGVcclxuICAgKi9cclxuICBhc3luYyB1cGRhdGVNYXR0ZXJUYWdDb250ZW50Rm9yVGFnSUQoXHJcbiAgICBtYXR0ZXJ0YWdJRDogc3RyaW5nLFxyXG4gICAgb2JqZWN0OiBEYk9iamVjdFR5cGUgPSBudWxsLFxyXG4gICAgdGFnVHlwZTogUG9pVHlwZSA9IG51bGxcclxuICApIHtcclxuICAgIHRoaXMuc2RrLlRhZy5lZGl0QmlsbGJvYXJkKFxyXG4gICAgICBtYXR0ZXJ0YWdJRCxcclxuICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKS5nZXREYXRhKClcclxuICAgICk7XHJcbiAgICBpZiAob2JqZWN0ICYmIHRhZ1R5cGUpIHtcclxuICAgICAgYXdhaXQgdGhpcy5pbmplY3RIdG1sSW5UYWcodGFnVHlwZSwgb2JqZWN0LCBtYXR0ZXJ0YWdJRCk7XHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLnNldFRhZ0ljb25BbmRPcGFjaXR5KFxyXG4gICAgICBtYXR0ZXJ0YWdJRCxcclxuICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgaW5qZWN0ZWQgaHRtbCBmb3IgTWF0dGVydGFnXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBvYmplY3QgVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUsIGV0Y1xyXG4gICAqIEBwYXJhbSB0YWdUeXBlIFBvaVR5cGVcclxuICAgKi9cclxuICBhc3luYyB1cGRhdGVJbmplY3RlZEh0bWxGb3JUYWdJRChcclxuICAgIG1hdHRlcnRhZ0lEOiBzdHJpbmcsXHJcbiAgICBvYmplY3Q6IGFueSxcclxuICAgIHRhZ1R5cGU6IFBvaVR5cGVcclxuICApIHtcclxuICAgIGF3YWl0IHRoaXMuaW5qZWN0SHRtbEluVGFnKHRhZ1R5cGUsIG9iamVjdCwgbWF0dGVydGFnSUQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlcyBNYXR0ZXJ0YWcgZnJvbSBWaWV3ZXIgYnkgaXRzIElEXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEIHN0cmluZ1xyXG4gICAqL1xyXG4gIGRlbGV0ZU1hdHRlcnRhZ0Zyb21JZChtYXR0ZXJ0YWdJRDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNkay5UYWcucmVtb3ZlKG1hdHRlcnRhZ0lEKTtcclxuICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmRlbGV0ZShtYXR0ZXJ0YWdJRCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGVzIGxhdGVzdCBjcmVhdGVkIG1hdHRlcnRhZ1xyXG4gICAqL1xyXG4gIGRlbGV0ZUxhc3RNYXR0ZXJ0YWcoKSB7XHJcbiAgICBjb25zdCBtYXR0ZXJ0YWdJRCA9IHRoaXMubWF0dGVydGFnSURzLnBvcCgpO1xyXG4gICAgaWYgKG1hdHRlcnRhZ0lEKSB7XHJcbiAgICAgIHRoaXMuZGVsZXRlTWF0dGVydGFnRnJvbUlkKG1hdHRlcnRhZ0lEKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExlZ2FjeTogdXNlZCB0byBiZSBjYWxsZWQgYWN0aW9uX2FkZF9tYXR0ZXJ0YWdfZnJvbV9QT0lcclxuICAgKiBBZGRzIGFuZCBjb25maWd1cmVzIE1hdHRlcnRhZyBmb3IgYW4gb2JqZWN0IChUaWNrZXQsIEVxdWlwbWVudCwgRmVhdHVyZSwgZXRjKSB0aGF0IGNvcnJlc3BvbmRzIHRvIFBPSSAoY29vcmRpbmF0ZXMsIHRhZ0ljb24pXHJcbiAgICogQHBhcmFtIHRhZ1R5cGUgUG9pVHlwZVxyXG4gICAqIEBwYXJhbSBvYmplY3QgVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUuLi5cclxuICAgKiBAcGFyYW0gcG9pIFBPSVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgYXN5bmMgY3JlYXRlTWF0dGVydGFnRnJvbVBPSShcclxuICAgIHRhZ1R5cGU6IFBvaVR5cGUsXHJcbiAgICBvYmplY3Q6IERiT2JqZWN0VHlwZSxcclxuICAgIHBvaTogUE9JXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIC8vIGNoZWNrIGlmIHRhZyBleGlzdHMgYWxyZWFkeVxyXG4gICAgY29uc3Qge3RhZywgc3dlZXB9ID0gdGhpcy5nZXRUYWdGcm9tRWxlbWVudElkKG9iamVjdC5pZCk7XHJcbiAgICBpZiAodGFnKSB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwidGFnIGV4aXN0c1wiLCBvYmplY3QpXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IG1hdHRlcnRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGEgPSBuZXcgTWF0dGVydGFnRGF0YSh0YWdUeXBlKTtcclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0T2JqZWN0KG9iamVjdCwgdGFnVHlwZSk7XHJcbiAgICBpZiAocG9pLmNvb3JkaW5hdGUpIHtcclxuICAgICAgbWF0dGVydGFnRGF0YS5zZXRQb3NpdGlvbihKU09OLnBhcnNlKHBvaS5jb29yZGluYXRlKSk7XHJcbiAgICB9XHJcbiAgICBpZiAocG9pLm1ldGFkYXRhKSB7XHJcbiAgICAgIGNvbnN0IHRhZ01ldGFkYXRhID0gSlNPTi5wYXJzZShwb2kubWV0YWRhdGEpO1xyXG4gICAgICBpZiAodGFnTWV0YWRhdGEubm9ybWFsKSB7XHJcbiAgICAgICAgbWF0dGVydGFnRGF0YS5zZXROb3JtYWwodGFnTWV0YWRhdGEubm9ybWFsKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldE5vcm1hbCh7eDogMCwgeTogLTAuMTUsIHo6IDB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHBvaS5tYXR0ZXJwb3J0U3dlZXBJRCkge1xyXG4gICAgICBtYXR0ZXJ0YWdEYXRhLnNldFN3ZWVwSUQocG9pLm1hdHRlcnBvcnRTd2VlcElEKTtcclxuICAgIH1cclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0UG9pKHBvaSk7XHJcblxyXG4gICAgY29uc3QgY3JlYXRlZFRhZ0lEID0gYXdhaXQgdGhpcy5hZGRNYXR0ZXJ0YWdUb1ZpZXdlcihtYXR0ZXJ0YWdEYXRhKTtcclxuICAgIGlmIChjcmVhdGVkVGFnSUQgJiYgdGhpcy5zZGspIHtcclxuICAgICAgYXdhaXQgdGhpcy5zZXRUYWdJY29uQW5kT3BhY2l0eShjcmVhdGVkVGFnSUQsIG1hdHRlcnRhZ0RhdGEpO1xyXG4gICAgICBhd2FpdCB0aGlzLmluamVjdEh0bWxJblRhZyh0YWdUeXBlLCBvYmplY3QsIGNyZWF0ZWRUYWdJRCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmplY3QgY3VzdG9tIEhUTUwgYXMgTWF0dGVydGFnIGNvbnRlbnRcclxuICAgKiBAcGFyYW0gdGFnVHlwZSBQb2lUeXBlXHJcbiAgICogQHBhcmFtIG9iamVjdCBUaWNrZXQsIEVxdWlwbWVudCwgRmVhdHVyZSBldGNcclxuICAgKiBAcGFyYW0gdGFnSUQgc3RyaW5nXHJcbiAgICovXHJcbiAgYXN5bmMgaW5qZWN0SHRtbEluVGFnKHRhZ1R5cGU6IFBvaVR5cGUsIG9iamVjdDogRGJPYmplY3RUeXBlLCB0YWdJRDogc3RyaW5nKSB7XHJcbiAgICBsZXQgaHRtbCA9IGF3YWl0IHRoaXMudGFnU2VydmljZS5nZXRIdG1sVG9JbmplY3QodGFnVHlwZSwgb2JqZWN0KTtcclxuICAgIGlmIChodG1sICE9PSAnJyAmJiB0aGlzLnNkaykge1xyXG4gICAgICBjb25zdCBzY3JpcHRUYWcgPSB0aGlzLnRhZ1NlcnZpY2UuZ2V0U2NyaXB0Rm9yVGFnKG9iamVjdCwgdGFnVHlwZSk7XHJcbiAgICAgIGh0bWwgKz0gYCR7c2NyaXB0VGFnfWA7XHJcbiAgICAgIC8vIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgdGhlIHNhbmRib3hcclxuICAgICAgY29uc3QgW3NhbmRib3hJZCwgbWVzc2VuZ2VyXSA9IGF3YWl0IHRoaXMuc2RrLlRhZy5yZWdpc3RlclNhbmRib3goaHRtbCk7XHJcblxyXG4gICAgICAvLyBkZXRhY2ggcHJldmlvdXMgc2FuZGJveCBmcm9tIGEgdGFnXHJcbiAgICAgIGxldCBhdHRhY2htZW50SUQgPSB0aGlzLnRhZ3NBdHRhY2htZW50c1t0YWdJRF07XHJcbiAgICAgIGlmIChhdHRhY2htZW50SUQpIHtcclxuICAgICAgICB0aGlzLnNkay5UYWcuZGV0YWNoKHRhZ0lELCBhdHRhY2htZW50SUQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudGFnc0F0dGFjaG1lbnRzW3RhZ0lEXSA9IHNhbmRib3hJZDtcclxuXHJcbiAgICAgIC8vIGF0dGFjaCB0aGUgc2FuZGJveCB0byBhIHRhZ1xyXG4gICAgICB0aGlzLnNkay5UYWcuYXR0YWNoKHRhZ0lELCBzYW5kYm94SWQpO1xyXG4gICAgICAvLyByZWNlaXZlIGRhdGEgZnJvbSB0aGUgc2FuZGJveFxyXG4gICAgICAvLyB0YWdNZXNzZW5nZXJPbiBhbGxvd3MgdG8gZ28gaGVyZSBvbmx5IG9uY2VcclxuICAgICAgaWYgKCF0aGlzLnRhZ01lc3Nlbmdlck9uKSB7XHJcbiAgICAgICAgdGhpcy50YWdNZXNzZW5nZXJPbiA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VDbGljayA9IChmZWF0dXJlSUQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJpbWFnZSBjbGljayBoYW5kbGVyXCIsIGZlYXR1cmVJRCk7XHJcbiAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25JbWFnZUNsaWNrKGZlYXR1cmVJRCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgYXVkaW9DbGljayA9IChhdWRpb0NvbW1lbnRJRDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImF1ZGlvIGNsaWNrIGhhbmRsZXJcIiwgYXVkaW9Db21tZW50SUQpO1xyXG4gICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uQXVkaW9DbGljayhhdWRpb0NvbW1lbnRJRCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCB2aWRlb0NsaWNrID0gKHVybDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25WaWRlb0NsaWNrKHVybCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBtZXNzZW5nZXIub24oXHJcbiAgICAgICAgICBUYWdBY3Rpb24uREVUQUlMX0NMSUNLLFxyXG4gICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uRGV0YWlsQ2xpY2suYmluZCh0aGlzLnRhZ1NlcnZpY2UpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBtZXNzZW5nZXIub24oXHJcbiAgICAgICAgICBUYWdBY3Rpb24uVElDS0VUX0NMSUNLLFxyXG4gICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uRGV0YWlsQ2xpY2suYmluZCh0aGlzLnRhZ1NlcnZpY2UpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBtZXNzZW5nZXIub24oVGFnQWN0aW9uLkFVRElPX0NMSUNLLCBhdWRpb0NsaWNrKTtcclxuICAgICAgICBtZXNzZW5nZXIub24oVGFnQWN0aW9uLklNQUdFX0NMSUNLLCBpbWFnZUNsaWNrKTtcclxuICAgICAgICBtZXNzZW5nZXIub24oVGFnQWN0aW9uLlZJREVPX0NMSUNLLCB2aWRlb0NsaWNrKTtcclxuICAgICAgICBtZXNzZW5nZXIub24oXHJcbiAgICAgICAgICBUYWdBY3Rpb24uRE9DX0NMSUNLLFxyXG4gICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uRG9jQ2xpY2suYmluZCh0aGlzLnRhZ1NlcnZpY2UpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBtZXNzZW5nZXIub24oXHJcbiAgICAgICAgICBUYWdBY3Rpb24uWU9VVFVCRV9DTElDSyxcclxuICAgICAgICAgIHRoaXMudGFnU2VydmljZS5vbkFjdGlvbllvdXR1YmVDbGljay5iaW5kKHRoaXMudGFnU2VydmljZSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBpZiBodG1sIGlzIGVtcHR5IChjYXNlIG9mIEVNQkVEIGNvbnRlbnQpLCB3ZSBlZGl0IGJpbGxib2FyZCBmb3IgRmVhdHVyZSBhbmQgYXR0YWNoIG5ldyBjb250ZW50XHJcbiAgICAgIGNvbnN0IHtjb21tZW50LCB0YWdEZXNjcmlwdGlvbn0gPVxyXG4gICAgICAgIHRoaXMudGFnU2VydmljZS5nZXRCaWxsYm9hcmRNZWRpYVRvRW1iZWQob2JqZWN0KTtcclxuICAgICAgaWYgKGNvbW1lbnQpIHtcclxuICAgICAgICAvLyByZWdpc3RlciB0aGUgbWVkaWFcclxuICAgICAgICBjb25zdCBbYXR0YWNobWVudElEXSA9IGF3YWl0IHRoaXMuc2RrLlRhZy5yZWdpc3RlckF0dGFjaG1lbnQoXHJcbiAgICAgICAgICBjb21tZW50LmV4dGVybmFsTGlua1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gYXR0YWNoXHJcbiAgICAgICAgdGhpcy5zZGsuVGFnLmF0dGFjaCh0YWdJRCwgYXR0YWNobWVudElEKTtcclxuICAgICAgICB0aGlzLnNkay5UYWcuZWRpdEJpbGxib2FyZCh0YWdJRCwge1xyXG4gICAgICAgICAgbGFiZWw6IG9iamVjdC50aXRsZSxcclxuICAgICAgICAgIGRlc2NyaXB0aW9uOiB0YWdEZXNjcmlwdGlvbixcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWN0aW9uX2RlbGV0ZV9hbGxfbWF0dGVydGFncygpIHtcclxuICAgIGF3YWl0IHRoaXMuc2RrLlRhZy5yZW1vdmUoLi4udGhpcy5tYXR0ZXJ0YWdJRHMpO1xyXG4gICAgdGhpcy5tYXR0ZXJ0YWdJRHMgPSBbXTtcclxuICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGVzIE1hdHRlcnRhZyBmcm9tIHZpc2l0IGFzc29jaWF0ZWQgd2l0aCBvYmplY3QgSUQgKHRpY2tldElELCBldGMpXHJcbiAgICogQHBhcmFtIGVsZW1lbnRJRCBzdHJpbmdcclxuICAgKi9cclxuICBhc3luYyBkZWxldGVNYXR0ZXJ0YWdGb3JPYmplY3QoZWxlbWVudElEOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG1hdHRlclRhZ0lEID0gdGhpcy5nZXRUYWdGcm9tRWxlbWVudElkKGVsZW1lbnRJRCkudGFnO1xyXG4gICAgaWYgKG1hdHRlclRhZ0lEKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZGsuVGFnLnJlbW92ZShtYXR0ZXJUYWdJRCk7XHJcbiAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZGVsZXRlKG1hdHRlclRhZ0lEKTtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubWF0dGVydGFnSURzLmluZGV4T2YobWF0dGVyVGFnSUQpO1xyXG4gICAgICAgIHRoaXMubWF0dGVydGFnSURzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBkZWxldGUgdGFnJywgbWF0dGVyVGFnSUQsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogdXVpZCBmcm9tIHRocmVlanNcclxuICAgKiBAcGFyYW0gdXVpZFxyXG4gICAqL1xyXG4gIGFzeW5jIGRlbGV0ZU9iamVjdDNEKHV1aWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5kaWN0aW9ubmFyeU9iamVjdHMzRC5nZXQodXVpZCkub2JqM0QudmlzaWJsZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0T2JqZWN0M0RNb2RlbE5vZGVGcm9tRGljdGlvbm5hcnkodXVpZDogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmRpY3Rpb25uYXJ5T2JqZWN0czNELmdldCh1dWlkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgIE1hdHRlcnRhZ0RhdGEgYW5kIHN0YXJ0IHJlcG9zaXRpb25pbmcgKGNyZWF0ZXMgdGVtcG9yYXJ5IG1hdHRlcnRhZyB0aGF0IGZvbGxvd3MgdGhlIGN1cnNvcilcclxuICAgKiBAcGFyYW0gcG9pVHlwZSBQb2lUeXBlXHJcbiAgICogQHBhcmFtIGVsZW1lbnQgVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUsIGV0Y1xyXG4gICAqL1xyXG4gIGFzeW5jIGFkZE1hdHRlcnRhZ1doZW5SZXBvc2l0aW9uaW5nKHBvaVR5cGU6IFBvaVR5cGUsIGVsZW1lbnQ6IERiT2JqZWN0VHlwZSkge1xyXG4gICAgY29uc3QgbWF0dGVydGFnRGF0YSA9IG5ldyBNYXR0ZXJ0YWdEYXRhKHBvaVR5cGUpO1xyXG4gICAgLy8gc2V0IHRoZSBjb29yZGluYXRlcyBvZiB0aGUgZXhpc3RpbmcgdGFnXHJcbiAgICBjb25zdCBbcG9pXSA9IGVsZW1lbnQucG9pcy5pdGVtcztcclxuICAgIGlmIChwb2kgJiYgcG9pLmNvb3JkaW5hdGUpIHtcclxuICAgICAgbWF0dGVydGFnRGF0YS5zZXRQb3NpdGlvbihKU09OLnBhcnNlKHBvaS5jb29yZGluYXRlKSk7XHJcbiAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0UG9pKHBvaSk7IC8vIHRvIGtlZXAgY3VzdG9tIHRhZ0ljb24gYW5kIG9wYWNpdHlcclxuICAgIH1cclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0U3dlZXBJRCh0aGlzLnBvc2VDYW1lcmEuc3dlZXApO1xyXG4gICAgbWF0dGVydGFnRGF0YS5zZXRSb3RhdGlvbih0aGlzLnBvc2VDYW1lcmEucm90YXRpb24pO1xyXG4gICAgbWF0dGVydGFnRGF0YS5zZXRPYmplY3QoZWxlbWVudCwgcG9pVHlwZSk7XHJcbiAgICB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93ID0gYXdhaXQgdGhpcy5hZGRNYXR0ZXJ0YWdUb1ZpZXdlcihtYXR0ZXJ0YWdEYXRhKTtcclxuICAgIHRoaXMuc2V0SW50ZXJhY3Rpb25Nb2RlKFZpZXdlckludGVyYWN0aW9ucy5QT1NJVElPTklORyk7XHJcbiAgICBhd2FpdCB0aGlzLmFkZEN1cnNvck1hdHRlcnRhZyhtYXR0ZXJ0YWdEYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgTWF0dGVydGFnRGF0YSBhbmQgbWF0dGVydGFnIHRoYXQgZm9sbG93cyB0aGUgY3Vyc29yIHdoZW4gY2hvb3NpbmcgcG9zaXRpb24gZm9yIGEgbmV3IG9iamVjdFxyXG4gICAqIEBwYXJhbSBwb2lUeXBlXHJcbiAgICovXHJcbiAgYXN5bmMgYWRkTWF0dGVydGFnV2hlbkFkZGluZyhwb2lUeXBlOiBQb2lUeXBlKSB7XHJcbiAgICBjb25zdCBtYXR0ZXJ0YWdEYXRhID0gbmV3IE1hdHRlcnRhZ0RhdGEocG9pVHlwZSk7XHJcbiAgICBtYXR0ZXJ0YWdEYXRhLnNldFN3ZWVwSUQodGhpcy5wb3NlQ2FtZXJhLnN3ZWVwKTtcclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0Um90YXRpb24odGhpcy5wb3NlQ2FtZXJhLnJvdGF0aW9uKTtcclxuICAgIHRoaXMuc2V0SW50ZXJhY3Rpb25Nb2RlKFZpZXdlckludGVyYWN0aW9ucy5BRERJTkcpO1xyXG4gICAgYXdhaXQgdGhpcy5hZGRDdXJzb3JNYXR0ZXJ0YWcobWF0dGVydGFnRGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYW5jZWxzIGZvbGxvd2luZyBvZiBjdXJzb3IgKG1lYW5pbmcgZGVsZXRpbmcgbGFzdCBNYXR0ZXJ0YWcpXHJcbiAgICovXHJcbiAgY2FuY2VsRm9sbG93aW5nQ3Vyc29yKCkge1xyXG4gICAgdGhpcy5kZWxldGVMYXN0TWF0dGVydGFnKCk7XHJcbiAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVCk7XHJcbiAgfVxyXG5cclxuICBzZXRMYXN0T2JqZWN0M0QobGFzdE9iamVjdDNEOiBUaHJlZUpTT2JqZWN0M0QpIHtcclxuICAgIHRoaXMubGFzdE9iamVjdDNEID0gbGFzdE9iamVjdDNEO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGFzdE9iamVjdDNEKCk6IFRocmVlSlNPYmplY3QzRCB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXN0T2JqZWN0M0Q7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQZXJmb3JtcyBjYWxsYmFjayBhZnRlciBtYXR0ZXJ0YWcgcG9zaXRpb24gd2FzIHZhbGlkYXRlZCAoY3JlYXRpb24gb2Ygb2JqZWN0IG9yIHJlcG9zaXRpb25pbmcpXHJcbiAgICogQHBhcmFtIG1vZGUgTWF0dGVydGFnQWN0aW9uTW9kZVxyXG4gICAqL1xyXG4gIGNhbGxiYWNrQWZ0ZXJNYXR0ZXJ0YWdWYWxpZGF0aW9uKG1vZGU6IE1hdHRlcnRhZ0FjdGlvbk1vZGUpIHtcclxuICAgIHRoaXMudmlzaWJpbGl0eVNlcnZpY2UuZGV0YWlsU2hvd2luZy5uZXh0KHRydWUpO1xyXG4gICAgY29uc3QgbGFzdFRhZyA9IHRoaXMuZ2V0TGFzdFRhZygpO1xyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5BRERfRVFVSVBNRU5UOlxyXG4gICAgICAgIHRoaXMuZ29Ub0xhc3RUYWcoKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vYWRkX2VxdWlwYF0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuQUREX1RJQ0tFVDpcclxuICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2B2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2FkZF90aWNrZXRgXSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5BRERfT0JKRUNUM0Q6XHJcbiAgICAgICAgdGhpcy5nb1RvTGFzdFRhZygpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9hZGRfb2JqZWN0M2RgXSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5BRERfREFUQTpcclxuICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgICAgIGlmICh0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoJz8nKSkge1xyXG4gICAgICAgICAgdXJsID0gdGhpcy5yb3V0ZXIudXJsLnN1YnN0cmluZygwLCB0aGlzLnJvdXRlci51cmwuaW5kZXhPZignPycpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdXJsID0gdGhpcy5yb3V0ZXIudXJsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYCR7dXJsfS9hZGRfZmVhdHVyZWBdKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLkFERF9ERVNLOlxyXG4gICAgICAgIHRoaXMuZ29Ub0xhc3RUYWcoKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vYWRkX2ZlYXR1cmVgXSwge1xyXG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHtpc0Rlc2s6IHRydWV9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuQUREX1JPT006XHJcbiAgICAgICAgdGhpcy5nb1RvTGFzdFRhZygpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9hZGRfcm9vbWBdKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLlBPU0lUSU9OX09CSkVDVDNEOlxyXG4gICAgICAgIGlmIChsYXN0VGFnKSB7XHJcbiAgICAgICAgICAvLyBETyBOb3RoaW5nIChyb3V0aW5nKSwganVzdFxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgIFtgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9vYmplY3QzZC8ke3RoaXMubGFzdE9iamVjdDNELmlkfWBdLFxyXG4gICAgICAgICAgICB7cXVlcnlQYXJhbXM6IHtwb3NpdGlvbmluZzogdHJ1ZX19XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLlBPU0lUSU9OX1RJQ0tFVDpcclxuICAgICAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICBgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9kZXRhaWwvJHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChsYXN0VGFnKS5lbGVtZW50SURcclxuICAgICAgICAgICAgICB9YCxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAge3F1ZXJ5UGFyYW1zOiB7cG9zaXRpb25pbmc6IHRydWV9fVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5QT1NJVElPTl9FUVVJUE1FTlQ6XHJcbiAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vZXF1aXAvJHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChsYXN0VGFnKS5lbGVtZW50SURcclxuICAgICAgICAgICAgICB9YCxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAge3F1ZXJ5UGFyYW1zOiB7cG9zaXRpb25pbmc6IHRydWV9fVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5QT1NJVElPTl9EQVRBOlxyXG4gICAgICAgIGlmIChsYXN0VGFnKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYCR7dGhpcy5yb3V0ZXIudXJsfWBdLCB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7cG9zaXRpb25pbmc6IHRydWV9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuUE9TSVRJT05fUk9PTTpcclxuICAgICAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Ake3RoaXMucm91dGVyLnVybH1gXSwge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtczoge3Bvc2l0aW9uaW5nOiB0cnVlfSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYCR7dGhpcy5yb3V0ZXIudXJsfWBdKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bGx5IHVwZGF0ZXMgZXhpc3RpbmcgTWF0dGVydGFnIGNvbnRlbnQgd2l0aCBkYXRhIG9mIG9iamVjdCAoVGlja2V0LCBFcXVpcG1lbnQsIERlc2spXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBvYmplY3QgVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUsIERlc2tcclxuICAgKiBAcGFyYW0gcG9pVHlwZSBQb2lUeXBlXHJcbiAgICogQHBhcmFtIHBvaSBQT0lcclxuICAgKi9cclxuICBhc3luYyBzZXRPYmplY3RBbmRQb2lJblRhZyhcclxuICAgIG1hdHRlcnRhZ0lEOiBzdHJpbmcsXHJcbiAgICBvYmplY3Q6IERiT2JqZWN0VHlwZSxcclxuICAgIHBvaVR5cGU6IFBvaVR5cGUsXHJcbiAgICBwb2k6IFBPSSB8IG51bGwgPSBudWxsXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobWF0dGVydGFnSUQpLnNldE9iamVjdChvYmplY3QsIHBvaVR5cGUpO1xyXG4gICAgaWYgKHBvaSkge1xyXG4gICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobWF0dGVydGFnSUQpLnNldFBvaShwb2kpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKS5lbGVtZW50SUQgPSBvYmplY3QuaWQ7XHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZU1hdHRlclRhZ0NvbnRlbnRGb3JUYWdJRChtYXR0ZXJ0YWdJRCwgb2JqZWN0LCBwb2lUeXBlKTtcclxuICAgICAgLy8gVE9ETzogZml4IHRoaXNcclxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVNYXR0ZXJUYWdQb3NJblNka1ZpZXdlcihcclxuICAgICAgICBtYXR0ZXJ0YWdJRCxcclxuICAgICAgICBvYmplY3QsXHJcbiAgICAgICAgcG9pVHlwZSxcclxuICAgICAgICBwb2lcclxuICAgICAgKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coYGVycm9yIGluIHNldE9iamVjdEFuZFBvaUluVGFnOiAke2V9YCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVNYXR0ZXJUYWdQb3NJblNka1ZpZXdlcihcclxuICAgIG1hdHRlcnRhZ0lEOiBzdHJpbmcsXHJcbiAgICBvYmplY3Q6IERiT2JqZWN0VHlwZSxcclxuICAgIHBvaVR5cGU6IFBvaVR5cGUsXHJcbiAgICBwb2k6IFBPSSB8IG51bGwgPSBudWxsXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBJbmRleFRvVXBkYXRlID0gb2JqZWN0LnBvaXMuaXRlbXMuZmluZEluZGV4KCh1KSA9PiB1LmlkID09PSBwb2kuaWQpO1xyXG4gICAgb2JqZWN0LnBvaXMuaXRlbXNbSW5kZXhUb1VwZGF0ZV0gPSBwb2k7XHJcbiAgICBjb25zdCB7eCwgeSwgen0gPSBKU09OLnBhcnNlKHBvaS5jb29yZGluYXRlKTtcclxuICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0ge1xyXG4gICAgICBhbmNob3JQb3NpdGlvbjoge1xyXG4gICAgICAgIHg6IHgsXHJcbiAgICAgICAgeTogeSxcclxuICAgICAgICB6OiB6LFxyXG4gICAgICB9LFxyXG4gICAgICBzdGVtVmVjdG9yOiB7XHJcbiAgICAgICAgLy8gbWFrZSB0aGUgVGFnIHN0aWNrIHN0cmFpZ2h0IHVwIGFuZCBtYWtlIGl0IDAuMzAgbWV0ZXJzICh+MSBmb290KSB0YWxsXHJcbiAgICAgICAgeDogMCxcclxuICAgICAgICB5OiAwLjMsXHJcbiAgICAgICAgejogMCxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLnNkay5NYXR0ZXJ0YWcuZWRpdFBvc2l0aW9uKG1hdHRlcnRhZ0lELCBuZXdQb3NpdGlvbik7XHJcbiAgICB0aGlzLnNkay5UYWcuZWRpdFBvc2l0aW9uKG1hdHRlcnRhZ0lELCBuZXdQb3NpdGlvbik7XHJcbiAgICB0aGlzLmRpY3Rpb25uYXJ5VGFnc1xyXG4gICAgICAuZ2V0KG1hdHRlcnRhZ0lEKVxyXG4gICAgICAuc2V0UG9zaXRpb24obmV3UG9zaXRpb24uYW5jaG9yUG9zaXRpb24pO1xyXG5cclxuICAgIGZvciAobGV0IHRhZ0lkIG9mIHRoaXMubWF0dGVydGFnSURzKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRUYWcgPSB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQodGFnSWQpO1xyXG4gICAgICBpZiAoIWN1cnJlbnRUYWcpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY3VycmVudFRhZy5lbGVtZW50SUQgPT09IG9iamVjdC5pZCAmJiB0YWdJZCAhPT0gbWF0dGVydGFnSUQpIHtcclxuICAgICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5kZWxldGUodGFnSWQpO1xyXG4gICAgICAgIHRoaXMuc2RrLlRhZy5yZW1vdmUodGFnSWQpO1xyXG4gICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5yZW1vdmUodGFnSWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIG1hdHRlclRhZ0lEIGFuZCBpdHMgc3dlZXAgZm9yIGFuIG9iamVjdCBJRCAodGlja2V0IElELCBldGMpXHJcbiAgICogQHBhcmFtIGVsZW1lbnRJRCBzdHJpbmdcclxuICAgKiBAcmV0dXJucyB7dGFnOiBzdHJpbmcgfCBudWxsLCBzd2VlcDogc3RyaW5nIHwgbnVsbH1cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0VGFnRnJvbUVsZW1lbnRJZChlbGVtZW50SUQ6IHN0cmluZyk6IHtcclxuICAgIHRhZzogc3RyaW5nIHwgbnVsbDtcclxuICAgIHN3ZWVwOiBzdHJpbmcgfCBudWxsO1xyXG4gIH0ge1xyXG4gICAgbGV0IHRhZ0lEID0gbnVsbDtcclxuICAgIGxldCBzd2VlcElEID0gbnVsbDtcclxuICAgIGZvciAobGV0IFttYXR0ZXJ0YWdJRCwgbWF0dGVydGFnRGF0YV0gb2YgdGhpcy5kaWN0aW9ubmFyeVRhZ3MpIHtcclxuICAgICAgaWYgKG1hdHRlcnRhZ0RhdGEuZWxlbWVudElEID09PSBlbGVtZW50SUQpIHtcclxuICAgICAgICB0YWdJRCA9IG1hdHRlcnRhZ0lEO1xyXG4gICAgICAgIGNvbnN0IHN3ZWVwID0gbWF0dGVydGFnRGF0YS5nZXRTd2VlcElEKCk7XHJcbiAgICAgICAgaWYgKHN3ZWVwICYmIHRoaXMuc3dlZXBzICYmIHRoaXMuc3dlZXBzLmluY2x1ZGVzKHN3ZWVwKSkge1xyXG4gICAgICAgICAgc3dlZXBJRCA9IHN3ZWVwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHt0YWc6IHRhZ0lELCBzd2VlcDogc3dlZXBJRH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGxhdGVzdCB0YWcgY3JlYXRlZCBpbiB0aGUgdmlzaXQgKHdoZW4gZm9sbG93aW5nIHRoZSBjdXJzb3IgdG8gcG9zaXRpb24pXHJcbiAgICogQHJldHVybnMgc3RyaW5nIG1hdHRlcnRhZ0lEXHJcbiAgICovXHJcbiAgZ2V0TGFzdFRhZygpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICh0aGlzLm1hdHRlcnRhZ1RvRm9sbG93KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMubWF0dGVydGFnSURzLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgID8gbnVsbFxyXG4gICAgICAgIDogdGhpcy5tYXR0ZXJ0YWdJRHNbdGhpcy5tYXR0ZXJ0YWdJRHMubGVuZ3RoIC0gMV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIE1hdHRlcnRhZ0RhdGEgZm9yIE1hdHRlcnRhZyAocmVwbGFjZXMgZ2V0VGFnRGF0YUZyb21JZClcclxuICAgKiBAcGFyYW0gbWF0dGVydGFnSURcclxuICAgKiBAcmV0dXJucyBNYXR0ZXJ0YWdEYXRhXHJcbiAgICovXHJcbiAgZ2V0TWF0dGVyVGFnRGF0YUZvck1hdHRlcnRhZyhtYXR0ZXJ0YWdJRDogc3RyaW5nKTogTWF0dGVydGFnRGF0YSB8IG51bGwge1xyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChtYXR0ZXJ0YWdJRCk7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgY29uc29sZS5sb2coJ2Nhbm5vdCByZXRyaWV2ZSBtYXR0ZXJ0YWdEYXRhIGZvciB0YWcnLCBtYXR0ZXJ0YWdJRCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vXHJcbiAgLy8gLS0tLS0tLS0tLSBWaWV3ZXIgcmVsYXRlZCAoc3dpdGNoIHZpZXdzLCBnbyB0bykgLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgYXN5bmMgYWN0aW9uX3Rvb2xib3hfZmxvb3JwbGFuKCkge1xyXG4gICAgaWYgKHRoaXMuaW5UcmFuc2l0aW9uTW9kZSB8fCB0aGlzLmluVHJhbnNpdGlvblN3ZWVwKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCd2aWV3ZXIgaXMgaW4gdHJhbnNpdGlvbiwgY2Fubm90IGdvIGZsb29ycGxhbicpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLnNkay5Nb2RlLm1vdmVUbygnbW9kZS5mbG9vcnBsYW4nKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coJ2Nhbm5vdCBnbyB0byBmbG9vcnBsYW4nLCBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFjdGlvbl90b29sYm94X2luc2lkZV92aWV3KCkge1xyXG4gICAgdGhpcy5zZGsuTW9kZS5tb3ZlVG8oJ21vZGUuaW5zaWRlJyk7XHJcbiAgfVxyXG5cclxuICBhY3Rpb25TaG93QWxsRmxvb3JzKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZGsuRmxvb3Iuc2hvd0FsbCgpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnY2Fubm90IHNob3cgYWxsIGZsb29ycycsIGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWN0aW9uX3Rvb2xib3hfZG9sbGhvdXNlKCkge1xyXG4gICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwibW9kZTogXCIsIHRoaXMuaW5UcmFuc2l0aW9uTW9kZSwgXCIgc3dlZXA6IFwiLCB0aGlzLmluVHJhbnNpdGlvblN3ZWVwKTtcclxuICAgICAgaWYgKHRoaXMuaW5UcmFuc2l0aW9uTW9kZSB8fCB0aGlzLmluVHJhbnNpdGlvblN3ZWVwKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3ZpZXdlciBpcyBpbiB0cmFuc2l0aW9uLCBjYW5ub3QgZ28gZG9sbGhvdXNlJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZGsuTW9kZS5tb3ZlVG8oJ21vZGUuZG9sbGhvdXNlJyk7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnY2Fubm90IGdvIHRvIGRvbGxob3VzZScsIGUpO1xyXG4gICAgICB9XHJcbiAgICB9LCAxMjAwKTtcclxuICB9XHJcblxyXG4gIGFjdGlvbl90b29sYm94X21lc3VyZSgpIHtcclxuICAgIGNvbnN0IG5ld1N0YXRlID0gIXRoaXMuaXNNZWFzdXJlTW9kZU9uO1xyXG4gICAgdGhpcy5zZGsuTWVhc3VyZW1lbnRzLnRvZ2dsZU1vZGUobmV3U3RhdGUpLnRoZW4oKCkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICBgTWVhc3VyZW1lbnQgbW9kZSBpcyBub3cgJHtuZXdTdGF0ZSA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCd9YFxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhY3Rpb25fdG9vbGJveF9jYW5jZWxfbWVzdXJlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNNZWFzdXJlTW9kZU9uKSB7XHJcbiAgICAgIHRoaXMuYWN0aW9uX3Rvb2xib3hfbWVzdXJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBhY3Rpb25fZ29fdG9fZmxvb3IoXHJcbiAgICBmbG9vck5hbWU6IHN0cmluZyxcclxuICAgIG1hdHRlcnBvcnRGbG9vclNlcXVlbmNlOiBudW1iZXIgPSBudWxsXHJcbiAgKSB7XHJcbiAgICBpZiAoIXRoaXMuZmxvb3JzKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdGbG9vciBhcmUgbm90IGxvYWRlZCB5ZXQnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5mbG9vcnMpO1xyXG4gICAgLy8gbG9vayB1cCBmb3Igc2VxdWVuY2UgbnVtYmVyICh0aGUgc2FmZXN0IG1ldGhvZClcclxuICAgIGxldCBmbG9vck1hdHRlcnBvcnQgPSB0aGlzLmZsb29ycy5maW5kKFxyXG4gICAgICAoZmxvb3IpID0+IGZsb29yLnNlcXVlbmNlID09PSBtYXR0ZXJwb3J0Rmxvb3JTZXF1ZW5jZVxyXG4gICAgKTtcclxuICAgIGlmICghZmxvb3JNYXR0ZXJwb3J0KSB7XHJcbiAgICAgIGZsb29yTWF0dGVycG9ydCA9IHRoaXMuZmxvb3JzLmZpbmQoXHJcbiAgICAgICAgKGZsb29yKSA9PiBmbG9vck5hbWUuaW5jbHVkZXMoZmxvb3IubmFtZSkgJiYgZmxvb3IubmFtZSAhPSAnJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKCFmbG9vck1hdHRlcnBvcnQpIHtcclxuICAgICAgZmxvb3JNYXR0ZXJwb3J0ID0gdGhpcy5mbG9vcnMuZmluZCgoZmxvb3IpID0+XHJcbiAgICAgICAgZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLmlkKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coZmxvb3JNYXR0ZXJwb3J0KVxyXG4gICAgaWYgKGZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICBsZXQgcmV0cnkgPSB0cnVlO1xyXG4gICAgICB3aGlsZSAocmV0cnkpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgZmxvb3JJbmRleCA9IGF3YWl0IHRoaXMuc2RrLkZsb29yLm1vdmVUbyhcclxuICAgICAgICAgICAgZmxvb3JNYXR0ZXJwb3J0LnNlcXVlbmNlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJtb3ZlZCB0byBmbG9vckluZGV4XCIsIGZsb29ySW5kZXgpO1xyXG4gICAgICAgICAgcmV0cnkgPSBmYWxzZTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBtb3ZlIHRvIEZsb29yJywgZXJyb3IpO1xyXG4gICAgICAgICAgYXdhaXQgd2FpdCgxMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCdObyBtYXR0ZXJwb3J0IGZsb29yIGZvdW5kIHRvIG1vdmUgdG8nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGFjdGlvbl9nb190b19zd2VlcChcclxuICAgIHN3ZWVwOiBzdHJpbmcsXHJcbiAgICByb3RhdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9ID0gbnVsbFxyXG4gICkge1xyXG4gICAgaWYgKHRoaXMuZm9yYmlkZGVuU3dlZXBzLmluY2x1ZGVzKHN3ZWVwKSkge1xyXG4gICAgICBjb25zb2xlLmxvZygndXNlciBpcyBub3QgYWxsb3dlZCB0byBnbyB0byB0aGlzIHN3ZWVwJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKFwiZ29pbmcgdG8gc3dlZXBcIiwgc3dlZXAsIFwid2l0aCByb3RhdGlvbjpcIiwgcm90YXRpb24pO1xyXG4gICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmluVHJhbnNpdGlvbk1vZGUgfHwgdGhpcy5pblRyYW5zaXRpb25Td2VlcCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYW5ub3QgZ28gdG8gc3dlZXAsIGluIHRyYW5zaXRpb24nKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmluVHJhbnNpdGlvblN3ZWVwID0gdHJ1ZTtcclxuICAgICAgICBhd2FpdCB0aGlzLnNkay5Td2VlcC5tb3ZlVG8oc3dlZXAsIHtcclxuICAgICAgICAgIHRyYW5zaXRpb246ICd0cmFuc2l0aW9uLmluc3RhbnQnLFxyXG4gICAgICAgICAgdHJhbnNpdGlvblRpbWU6IDE1MDAsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Td2VlcCA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYW5ub3QgbW92ZSB0byBzd2VlcCcsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocm90YXRpb24pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnNkay5DYW1lcmEuc2V0Um90YXRpb24ocm90YXRpb24sIHtzcGVlZDogMTAwfSk7IC8vIHNwZWVkIGlzIGRlZ3JlZXMgcGVyIHNlY29uZFxyXG4gICAgICB9XHJcbiAgICB9LCAxMDAwKTtcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnRTd2VlcCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICh0aGlzLnBvc2VDYW1lcmEpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucG9zZUNhbWVyYS5zd2VlcDtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VycmVudENhbWVyYVBvc2l0aW9uKCk6IHtcclxuICAgIHJvdGF0aW9uOiBhbnk7XHJcbiAgICBwb3NpdGlvbjogYW55O1xyXG4gICAgc3dlZXA6IGFueTtcclxuICB9IHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy5wb3NlQ2FtZXJhKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBvc2VDYW1lcmE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHNldEludGVyYWN0aW9uTW9kZShpbnRlcmFjdGlvbk1vZGU6IG51bWJlcikge1xyXG4gICAgdGhpcy5pbnRlcmFjdGlvbk1vZGUgPSBpbnRlcmFjdGlvbk1vZGU7XHJcbiAgfVxyXG5cclxuICBnZXRJbnRlcmFjdGlvbk1vZGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbnRlcmFjdGlvbk1vZGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciBhbGwgdmFyaWFibGVzLCBkZWxldGVzIGFsbCB0YWdzICh3aGVuIHZpZXdlciBpcyByZW1vdmVyIG9yIG1vZGVsIGNoYW5nZWQ9cmVsb2FkIG5lZWRlZClcclxuICAgKi9cclxuICBhc3luYyBjbGVhckFsbCgpIHtcclxuICAgIGNvbnNvbGUubG9nKCdyZW1vdmluZyB2aWV3ZXInKTtcclxuICAgIHRoaXMuYWN0aW9uX2RlbGV0ZV9hbGxfbWF0dGVydGFncygpO1xyXG4gICAgdGhpcy5mbG9vcnMgPSBudWxsO1xyXG4gICAgdGhpcy5zd2VlcHMgPSBudWxsO1xyXG4gICAgdGhpcy5zZGsgPSBudWxsO1xyXG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyUG9pbnRlcik7XHJcbiAgICB0aGlzLmZvcmJpZGRlblN3ZWVwcyA9IFtdO1xyXG4gICAgdGhpcy50YWdNZXNzZW5nZXJPbiA9IGZhbHNlO1xyXG4gICAgLy8gY2FuY2VsIHN1YnNjcmlwdGlvbnNcclxuICAgIHRoaXMucG9pbnRlckJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFxyXG4gICAgICAnY2xpY2snLFxyXG4gICAgICB0aGlzLnBvaW50ZXJMZWZ0Q2xpY2tIYW5kbGVyXHJcbiAgICApO1xyXG4gICAgdGhpcy5wb2ludGVyQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICdjb250ZXh0bWVudScsXHJcbiAgICAgIHRoaXMucG9pbnRlclJpZ2h0Q2xpY2tIYW5kbGVyXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFRPRE86IG9ubHkgRm9yIEFkbWluc1xyXG4gICAgaWYgKHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24pIHtcclxuICAgICAgdGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICdhdXhjbGljaycsXHJcbiAgICAgICAgdGhpcy5wb2ludGVyTWlkZGxlQ2xpY2tIYW5kbGVyXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvLyBUT0RPOiBvbmx5IGZvciBkZXYhXHJcbiAgICBpZiAoZG9jdW1lbnQubG9jYXRpb24uaHJlZi5pbmRleE9mKCctZGV2JykgIT09IC0xKSB7XHJcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbEN1cnNvclBvaW50ZXJQb3NpdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW1vdmVGb3JiaWRkZW5Td2VlcHMoZm9yYmlkZGVuU3dlZXBzOiBzdHJpbmdbXSkge1xyXG4gICAgdGhpcy5mb3JiaWRkZW5Td2VlcHMgPSBbLi4uZm9yYmlkZGVuU3dlZXBzXTtcclxuICAgIGxldCByZW1vdmVkID0gMDtcclxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICBmb3JiaWRkZW5Td2VlcHMubWFwKGFzeW5jIChzd2VlcCkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnNkay5Td2VlcC5kaXNhYmxlKHN3ZWVwKTtcclxuICAgICAgICAgIHJlbW92ZWQgKz0gMTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICBjb25zb2xlLmxvZygncmVtb3ZlZCBzd2VlcHM6JywgcmVtb3ZlZCk7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0gM0Qgb2JqZWN0cyAoU0RLIEJ1bmRsZSBvbmx5KSAtLS0tLS0tLS0tXHJcbiAgLy9cclxuICBhc3luYyBpbml0M0RPYmplY3RWaWV3ZXIoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcclxuICAgICAgdmFyIFtzY2VuZU9iamVjdF0gPSBhd2FpdCB0aGlzLnNkay5TY2VuZS5jcmVhdGVPYmplY3RzKDEpO1xyXG5cclxuICAgICAgdmFyIG5vZGUgPSBzY2VuZU9iamVjdC5hZGROb2RlKCk7XHJcblxyXG4gICAgICAvLyBUT0RPIGNoYW5nZSB0aGlzIPCfpK5cclxuICAgICAgbm9kZS5hZGRDb21wb25lbnQoJ21wLmxpZ2h0cycpO1xyXG4gICAgICBub2RlLmFkZENvbXBvbmVudCgnbXAubGlnaHRzJyk7XHJcbiAgICAgIG5vZGUuYWRkQ29tcG9uZW50KCdtcC5saWdodHMnKTtcclxuICAgICAgbm9kZS5hZGRDb21wb25lbnQoJ21wLmxpZ2h0cycpO1xyXG4gICAgICBub2RlLnN0YXJ0KCk7XHJcblxyXG4gICAgICBjb25zdCBub2RlQ29udHJvbCA9IHNjZW5lT2JqZWN0LmFkZE5vZGUoKTtcclxuICAgICAgdGhpcy5vYmplY3RDb250cm9sID0gbm9kZUNvbnRyb2wuYWRkQ29tcG9uZW50KCdtcC50cmFuc2Zvcm1Db250cm9scycpO1xyXG4gICAgICBub2RlQ29udHJvbC5zdGFydCgpO1xyXG5cclxuICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGQzRE9iamVjdChcclxuICAgIG9iajogSU9iamVjdDNELFxyXG4gICAgbW9kZT86ICd0cmFuc2xhdGUnIHwgJ3JvdGF0ZSdcclxuICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIGNvbnN0IFtzY2VuZU9iamVjdF0gPSBhd2FpdCB0aGlzLnNkay5TY2VuZS5jcmVhdGVPYmplY3RzKDEpO1xyXG5cclxuICAgICAgY29uc3QgbW9kZWxOb2RlID0gc2NlbmVPYmplY3QuYWRkTm9kZSgpO1xyXG4gICAgICBjb25zdCBpbml0aWFsID0ge1xyXG4gICAgICAgIHVybDogYC9hc3NldHMvM0RvYmplY3RzL29iamVjdHMvJHtvYmoub2JqZWN0fSR7XHJcbiAgICAgICAgICBvYmouZm9ybWF0LmluZGV4T2YoJy4nKSA9PT0gLTEgPyAnLicgKyBvYmouZm9ybWF0IDogb2JqLmZvcm1hdFxyXG4gICAgICAgIH1gLFxyXG4gICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgY29sbGlkZXJFbmFibGVkOiB0cnVlXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBzd2l0Y2ggKG9iai5mb3JtYXQpIHtcclxuICAgICAgICBjYXNlICcub2JqJzpcclxuICAgICAgICBjYXNlICdvYmonOlxyXG4gICAgICAgICAgbW9kZWxOb2RlLmFkZENvbXBvbmVudCgnbXAub2JqTG9hZGVyJywgaW5pdGlhbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICcuZmJ4JzpcclxuICAgICAgICBjYXNlICdmYngnOlxyXG4gICAgICAgICAgbW9kZWxOb2RlLmFkZENvbXBvbmVudCgnbXAuZmJ4TG9hZGVyJywgaW5pdGlhbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICcuZ2x0Zic6XHJcbiAgICAgICAgY2FzZSAnZ2x0Zic6XHJcbiAgICAgICAgICBtb2RlbE5vZGUuYWRkQ29tcG9uZW50KCdtcC5nbHRmTG9hZGVyJywgaW5pdGlhbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICcuZ2xiJzpcclxuICAgICAgICBjYXNlICdnbGInOlxyXG4gICAgICAgICAgbW9kZWxOb2RlLmFkZENvbXBvbmVudCgnbXAuZ2x0ZkxvYWRlcicsIGluaXRpYWwpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnLmRhZSc6XHJcbiAgICAgICAgY2FzZSAnZGFlJzpcclxuICAgICAgICAgIG1vZGVsTm9kZS5hZGRDb21wb25lbnQoJ21wLmRhZUxvYWRlcicsIGluaXRpYWwpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnRm9ybWF0IG5vdCBzdXBwb3J0ZWQnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBVc2UgMyA/ISBBbWJpZW50IGxpZ2h0aW5nc1xyXG4gICAgICBpZiAodGhpcy5ub0xpZ2h0Rm9yT2JqZWN0cykge1xyXG4gICAgICAgIGNvbnN0IGxpZ2h0c05vZGUgPSBzY2VuZU9iamVjdC5hZGROb2RlKCk7XHJcbiAgICAgICAgbGlnaHRzTm9kZS5hZGRDb21wb25lbnQoJ21wLmFtYmllbnRMaWdodCcsIHtcclxuICAgICAgICAgIGludGVuc2l0eTogMSxcclxuICAgICAgICAgIGNvbG9yOiB7cjogMS4wLCBnOiAxLjAsIGI6IDEuMH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5ub0xpZ2h0Rm9yT2JqZWN0cyA9IGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBpZiAob2JqLm1vZGUpIHtcclxuICAgICAgLy8gICB0aGlzLnNldDNET2JqZWN0TW9kZShub2RlLCBvYmoubW9kZSk7XHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIG1vZGVsTm9kZS5vYmozRC5wb3NpdGlvbi5zZXQoXHJcbiAgICAgICAgb2JqLnBvc2l0aW9uLngsXHJcbiAgICAgICAgb2JqLnBvc2l0aW9uLnksXHJcbiAgICAgICAgb2JqLnBvc2l0aW9uLnpcclxuICAgICAgKTtcclxuXHJcbiAgICAgIG1vZGVsTm9kZS5vYmozRC5yb3RhdGlvbi5zZXQoXHJcbiAgICAgICAgb2JqLnJvdGF0aW9uLngsXHJcbiAgICAgICAgb2JqLnJvdGF0aW9uLnksXHJcbiAgICAgICAgb2JqLnJvdGF0aW9uLnpcclxuICAgICAgKTtcclxuICAgICAgbW9kZWxOb2RlLm9iajNELnNjYWxlLnNldChvYmouc2NhbGUueCwgb2JqLnNjYWxlLnksIG9iai5zY2FsZS56KTtcclxuXHJcbiAgICAgIC8vIEJ5IGRlZmF1dCwgZHVyaW5nIGNyZWF0aW9uLCBvYmplY3QgaGFzIHRyYW5zbGF0aW9uIGdpem1vXHJcbiAgICAgIC8vID0+IFVzZXIgaGFzIHRvIGNsaWNrIG9uIGxhdGVyYWwgcGFuZWwsIGFuZCBzYXZlIGl0cyBwb3NpdGlvbiBhZnRlciBwbGF5aW5nIHdpdGggaXQhXHJcbiAgICAgIGlmIChtb2RlKSB7XHJcbiAgICAgICAgdGhpcy5hdHRhY2hHaXptb0NvbnRyb2xUbzNET2JqZWN0KFxyXG4gICAgICAgICAgbW9kZWxOb2RlLFxyXG4gICAgICAgICAgc2NlbmVPYmplY3QsXHJcbiAgICAgICAgICBtb2RlLFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICkuY2F0Y2goKGUpID0+IGNvbnNvbGUubG9nKGUpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMubGFzdE9iamVjdDNEICYmIHR5cGVvZiB0aGlzLmxhc3RPYmplY3QzRC5pZCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAvLyBwcm9tcHQgVGhyZWVKUyBVVUlEIHRvIG1hdGNoIG91ciBsYXN0IGdlbmVyYXRlZCBvYmplY3QgaWYgbmV3IChub3QgZnJvbSBEYilcclxuICAgICAgICBtb2RlbE5vZGUub2JqM0QudXVpZCA9IHRoaXMubGFzdE9iamVjdDNELmlkO1xyXG4gICAgICB9IGVsc2UgaWYgKG9iai5pZCkge1xyXG4gICAgICAgIG1vZGVsTm9kZS5vYmozRC51dWlkID0gb2JqLmlkO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubGFzdE9iamVjdDNEID0gbW9kZWxOb2RlLm9iajNEO1xyXG5cclxuICAgICAgLy8gU3RvcmUgdGhpcyBpbiBtZW1vcnkgTWFwIGRpY3Rpb25uYXJ5XHJcbiAgICAgIHRoaXMuZGljdGlvbm5hcnlPYmplY3RzM0Quc2V0KG1vZGVsTm9kZS5vYmozRC51dWlkLCBtb2RlbE5vZGUpO1xyXG4gICAgICB0aGlzLmRpY3Rpb25uYXJ5U2NlbmVPYmplY3RzM0Quc2V0KG1vZGVsTm9kZS5vYmozRC51dWlkLCBzY2VuZU9iamVjdCk7XHJcblxyXG4gICAgICBzY2VuZU9iamVjdC5zdGFydCgpO1xyXG4gICAgICByZXNvbHZlKHRoaXMubGFzdE9iamVjdDNEKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2NlbmVOb2RlRnJvbU9iamVjdDNESWQodXVpZDogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmRpY3Rpb25uYXJ5U2NlbmVPYmplY3RzM0QuZ2V0KHV1aWQpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYXR0YWNoR2l6bW9Db250cm9sVG8zRE9iamVjdChcclxuICAgIG1vZGVsTm9kZTogYW55LFxyXG4gICAgc2NlbmVPYmplY3Q6IGFueSxcclxuICAgIG1vZGU6ICd0cmFuc2xhdGUnIHwgJ3JvdGF0ZScgfCAnc2NhbGUnLFxyXG4gICAgdmlzaWJsZTogYm9vbGVhblxyXG4gICk6IFByb21pc2U8YW55PiB7XHJcbiAgICAvLyBDcmVhdGUgYSBzY2VuZSBub2RlIHdpdGggYSB0cmFuc2Zvcm0gY29udHJvbCBjb21wb25lbnQuXHJcbiAgICBsZXQgbm9kZSA9IG51bGw7XHJcbiAgICBub2RlID0gc2NlbmVPYmplY3QuYWRkTm9kZSgpO1xyXG4gICAgaWYgKCFub2RlKSB7XHJcbiAgICAgIGNvbnN0IFtzY2VuZU9iamVjdF0gPSBhd2FpdCB0aGlzLnNkay5TY2VuZS5jcmVhdGVPYmplY3RzKDEpO1xyXG4gICAgICBub2RlID0gc2NlbmVPYmplY3QuYWRkTm9kZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG15Q29udHJvbCA9IG5vZGUuYWRkQ29tcG9uZW50KCdtcC50cmFuc2Zvcm1Db250cm9scycpO1xyXG4gICAgbm9kZS5zdGFydCgpO1xyXG4gICAgLy9cclxuICAgIC8vIC8vIE1ha2UgdGhlIHRyYW5zZm9ybSBjb250cm9sIHZpc2libGUgc28gdGhhdCB0aGUgdXNlciBjYW4gbWFuaXB1bGF0ZSB0aGUgY29udHJvbCBzZWxlY3Rpb24uXHJcbiAgICBteUNvbnRyb2wuaW5wdXRzLnZpc2libGUgPSB2aXNpYmxlO1xyXG4gICAgLy9cclxuICAgIC8vIC8vIEF0dGFjaCB0aGUgbW9kZWwgdG8gdGhlIHRyYW5zZm9ybSBjb250cm9sXHJcbiAgICBteUNvbnRyb2wuaW5wdXRzLnNlbGVjdGlvbiA9IG1vZGVsTm9kZTtcclxuICAgIC8vXHJcbiAgICAvLyAvLyBzZXQgJ3RyYW5zbGF0ZScgbW9kZSB0byBwb3NpdGlvbiB0aGUgc2VsZWN0aW9uLlxyXG4gICAgbXlDb250cm9sLmlucHV0cy5tb2RlID0gbW9kZTtcclxuICAgIG1vZGVsTm9kZS5vYmozRC5jb250cm9scyA9IG15Q29udHJvbDsgLy8gc3RvcmUgZ2l6bW9DdHJsIGluc2lkZSBvYmplY3RcclxuXHJcbiAgICBpZiAoIXRoaXMubGFzdE9iamVjdDNEIHx8ICF0aGlzLmxhc3RPYmplY3QzRC5jb250cm9scykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIG1vZGVsTm9kZS5vYmozRC5pZCA9IHRoaXMubGFzdE9iamVjdDNELnV1aWQgfHwgdGhpcy5sYXN0T2JqZWN0M0QuaWQ7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgaWQgb2JqIGluIFNjZW5lIHdhcyBub3QgYXNzaWduZWQgdG8gaWQgZnJvbSBEQiBzaW5jZWApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubGFzdE9iamVjdDNEID0gbW9kZWxOb2RlLm9iajNEO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtb2RlbE5vZGU7XHJcbiAgfVxyXG5cclxuICByZW1vdmVHaXptb0Zyb21MYXN0T2JqZWN0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sYXN0T2JqZWN0M0QuY29udHJvbHMudHJhbnNmb3JtQ29udHJvbHMudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5sYXN0T2JqZWN0M0QuY29udHJvbHMudHJhbnNmb3JtQ29udHJvbHMuZGlzcG9zZSgpO1xyXG4gICAgdGhpcy5sYXN0T2JqZWN0M0QuY29udHJvbHMgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8gcHVibGljIHNldDNET2JqZWN0TW9kZShtb2RlbE5vZGU6IGFueSwgbW9kZT86IHN0cmluZykge1xyXG4gIC8vICAgaWYgKG1vZGUpIHtcclxuICAvLyAgICAgdGhpcy5vYmplY3RDb250cm9sLmlucHV0cy5zZWxlY3Rpb24gPSBtb2RlbE5vZGU7XHJcbiAgLy8gICAgIHRoaXMub2JqZWN0Q29udHJvbC5pbnB1dHMudmlzaWJsZSA9IHRydWU7XHJcbiAgLy8gICAgIHRoaXMub2JqZWN0Q29udHJvbC5pbnB1dHMubW9kZSA9IG1vZGU7XHJcbiAgLy9cclxuICAvLyAgICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gIC8vICAgICAgIGNvbnNvbGUubG9nKG1vZGVsTm9kZSk7XHJcbiAgLy8gICAgIH0sIDUwMDApO1xyXG4gIC8vXHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICB0aGlzLm9iamVjdENvbnRyb2wuaW5wdXRzLnZpc2libGUgPSB0cnVlO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxufVxyXG4iXX0=
1292
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tYXR0ZXJwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLGVBQWUsRUFDZixJQUFJLEdBQ0wsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxFQUVMLFdBQVcsRUFFWCxtQkFBbUIsRUFFbkIsT0FBTyxFQUNQLFFBQVEsRUFDUixTQUFTLEVBQ1Qsa0JBQWtCLEdBQ25CLE1BQU0sa0JBQWtCLENBQUM7QUFJMUIsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGtCQUFrQixDQUFDOzs7OztBQXNCNUMsTUFBTSxPQUFPLGlCQUFpQjtJQTJJNUIsWUFDb0IsTUFBYyxFQUN4QixNQUFjLEVBQ2QsaUJBQXdDLEVBQ3hDLE1BQWM7UUFGZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2Qsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUF1QjtRQUN4QyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBaEloQixrQ0FBNkIsR0FBRyxLQUFLLENBQUM7UUFLOUMsZUFBZTtRQUNQLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBRXhCLG9CQUFlLEdBQVcsa0JBQWtCLENBQUMsT0FBTyxDQUFDO1FBRTdELDhEQUE4RDtRQUN0RCxpQkFBWSxHQUFrQixFQUFFLENBQUM7UUFFekMsMERBQTBEO1FBQ2xELG9CQUFlLEdBQStCLElBQUksR0FBRyxFQUFFLENBQUM7UUFFeEQseUJBQW9CLEdBQXFC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TyxDQUFDLEdBQUcsQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO2FBQ3JFO1lBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1NBQ3JDO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELHlCQUF5QjtRQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQzdELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUNwQyxDQUFDOzs4R0Ezb0RVLGlCQUFpQixrQkE0SWxCLFFBQVE7a0hBNUlQLGlCQUFpQixjQUZoQixNQUFNOzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQTZJSSxNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgTmdab25lfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgZ2V0RGlzdGFuY2VCZXR3ZWVuVHdvUG9pbnRzLFxyXG4gIHBvaVR5cGVUb1N0cmluZyxcclxuICB3YWl0LFxyXG59IGZyb20gJy4uL2hlbHBlcnMuc2VydmljZSc7XHJcbmltcG9ydCB7TWF0dGVydGFnRGF0YX0gZnJvbSAnLi4vbWF0dGVydGFnRGF0YSc7XHJcbmltcG9ydCB7XHJcbiAgRGJPYmplY3RUeXBlLFxyXG4gIEZlYXR1cmVUeXBlLFxyXG4gIElPYmplY3QzRCxcclxuICBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLFxyXG4gIFBPSSxcclxuICBQb2lUeXBlLFxyXG4gIFNwTW9kdWxlLFxyXG4gIFRhZ0FjdGlvbixcclxuICBWaWV3ZXJJbnRlcmFjdGlvbnMsXHJcbn0gZnJvbSAnLi4vdHlwZXMuc2VydmljZSc7XHJcbmltcG9ydCB7QmFzZVRhZ1NlcnZpY2V9IGZyb20gJy4vdGFnLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Jhc2VWaXNpYmlsaXR5U2VydmljZX0gZnJvbSAnLi9iYXNlVmlzaWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZyc7XHJcbmltcG9ydCB7Q2FtZXJhTW9kZX0gZnJvbSAnLi4vdHlwZXMuc2VydmljZSc7XHJcblxyXG4vKipcclxuICogQ3VzdG9tIFRocmVlanMgT2JqZWN0IDNEIGludGVyZmFjZVxyXG4gKi9cclxuaW50ZXJmYWNlIFRocmVlSlNPYmplY3QzRCB7XHJcbiAgaWQ6IHN0cmluZztcclxuICB1dWlkPzogc3RyaW5nO1xyXG4gIHBvc2l0aW9uPzogeyB4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyIH1cclxuICByb3RhdGlvbj86IHsgeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciB9XHJcbiAgc2NhbGU/OiB7IHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIgfVxyXG59XHJcblxyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XHJcbiAgICBNUF9TREs6IHsgY29ubmVjdDogRnVuY3Rpb24gfTtcclxuICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXR0ZXJwb3J0U2VydmljZSB7XHJcbiAgcHVibGljIHNkazogYW55O1xyXG5cclxuICBwcml2YXRlIGNvbnRhaW5lcjogYW55O1xyXG5cclxuICAvLyBQb3NpdGlvbiBjYW1lcmFcclxuICBwcml2YXRlIHBvc2VNYXR0ZXJwb3J0OiBhbnk7XHJcblxyXG4gIHB1YmxpYyBwb3NlQ2FtZXJhOiB7IHJvdGF0aW9uOiBhbnk7IHBvc2l0aW9uOiBhbnk7IHN3ZWVwOiBhbnkgfTtcclxuXHJcbiAgLy8gUG9pbnRlciB0cmlja1xyXG4gIHByaXZhdGUgcG9pbnRlckJ1dHRvbjogYW55O1xyXG5cclxuICAvLyBEaXNwbGF5IGFuZCBnZXQgY3VycmVudCBwb3NpdGlvbiBvZiBjdXJzb3IgKGZvciBBZG1pbnMgb25seSlcclxuICBwcml2YXRlIGdldEN1cnNvclBvc2l0aW9uQnV0dG9uOiBhbnk7XHJcbiAgcHJpdmF0ZSBjdXJzb3JQb3NpdGlvbkJ1dHRvbkRpc3BsYXllZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgaW50ZXJ2YWxDdXJzb3JQb2ludGVyUG9zaXRpb246IGFueTtcclxuICBwcml2YXRlIHRleHREaXNwbGF5Q3Vyc29yUG9zaXRpb25QYW5lbDogYW55O1xyXG5cclxuICBwcml2YXRlIG9sZFBvc2VNYXR0ZXJwb3J0UG9zaXRpb246IGFueTtcclxuICAvLyBNZWFzdXJlIG1vZGVcclxuICBwcml2YXRlIGlzTWVhc3VyZU1vZGVPbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGludGVyYWN0aW9uTW9kZTogbnVtYmVyID0gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFQ7XHJcblxyXG4gIC8vIExpc3Qgb2YgY3JlYXRlZCBNYXR0ZXJ0YWcgSURzIGluIHRoZSBjdXJyZW50IHZpZXdlciBzZXNzaW9uXHJcbiAgcHJpdmF0ZSBtYXR0ZXJ0YWdJRHM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuXHJcbiAgLy8gRGljdGlvbm5hcnkgb2YgTWF0dGVydGFnSUQgYW5kIGl0cyBkYXRhIChtYXR0ZXJ0YWdEYXRhKVxyXG4gIHByaXZhdGUgZGljdGlvbm5hcnlUYWdzOiBNYXA8c3RyaW5nLCBNYXR0ZXJ0YWdEYXRhPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgcHJpdmF0ZSBkaWN0aW9ubmFyeU9iamVjdHMzRDogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgcHJpdmF0ZSBkaWN0aW9ubmFyeVNjZW5lT2JqZWN0czNEOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBwcml2YXRlIHRocmVlSlNTY2VuZTogYW55OyAvLyBnbG9iYWwgcm9vdCBzY2VuZSAobm90IHVzZWQgbm93ISlcclxuXHJcbiAgcHJpdmF0ZSBsYXN0TWVhc3VyZSA9IFtdO1xyXG5cclxuICBwcml2YXRlIGRpc3RhbmNlc0xhc3RNZWFzdXJlOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIHJlc29sdXRpb24gPSB7XHJcbiAgICB3aWR0aDogNTAwLFxyXG4gICAgaGVpZ2h0OiA2MDAsXHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSB2aXNpYmlsaXR5ID0ge1xyXG4gICAgbWF0dGVydGFnczogZmFsc2UsXHJcbiAgICBzd2VlcHM6IHRydWUsXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIHRhZ3NBdHRhY2htZW50czogT2JqZWN0ID0ge307XHJcblxyXG4gIHByaXZhdGUgbGFzdFNjcmVlbnNob3RVcmk6IGFueTtcclxuXHJcbiAgcHVibGljIHN3ZWVwczogQXJyYXk8c3RyaW5nPiB8IG51bGw7XHJcblxyXG4gIHB1YmxpYyBjdXJyZW50U3dlZXA6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIC8vY2FtZXJhIHBvc2l0aW9uIHdpdGggcm90YXRpb25cclxuICBwdWJsaWMgY3VycmVudENhbWVyYVBvc2U6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHByaXZhdGUgZmxvb3JzPzogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHNlcXVlbmNlOiBudW1iZXIgfT4gfCBudWxsO1xyXG5cclxuICBwcml2YXRlIF9jdXJyZW50U3BhY2VJRDogc3RyaW5nO1xyXG5cclxuICBwcml2YXRlIGxhc3RPYmplY3QzRDogYW55OyAvLyBUaHJlZSBKUyBvYmplY3RcclxuXHJcbiAgcHJpdmF0ZSBjdXJyZW50Rmxvb3I7XHJcblxyXG4gIHB1YmxpYyBnZXQgY3VycmVudFNwYWNlSUQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3BhY2VJRDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgY3VycmVudFNwYWNlSUQodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fY3VycmVudFNwYWNlSUQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHRpbWVyUG9pbnRlcjogYW55O1xyXG5cclxuICBmb3JiaWRkZW5Td2VlcHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIHB1YmxpYyB0YWdBY3Rpb246IFN1YmplY3Q8eyBhY3Rpb246IHN0cmluZzsgZGF0YTogc3RyaW5nIH0+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHVibGljIG1hdHRlcnRhZ1RvRm9sbG93OiBzdHJpbmcgfCBudWxsO1xyXG5cclxuICB0YWdTZXJ2aWNlOiBCYXNlVGFnU2VydmljZTtcclxuXHJcbiAgY29uZmlnOiBDb25maWc7XHJcblxyXG4gIHB1YmxpYyBpblRyYW5zaXRpb25Nb2RlID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBpblRyYW5zaXRpb25Td2VlcCA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIG5vTGlnaHRGb3JPYmplY3RzID0gdHJ1ZTtcclxuXHJcbiAgcHVibGljIGN1cnJlbnRDYW1lcmFNb2RlOiBDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5PVVRTSURFO1xyXG5cclxuICBwdWJsaWMgb25DYW1lcmFNb2RlQ2hhbmdlZCA9IG5ldyBTdWJqZWN0PENhbWVyYU1vZGU+KCk7XHJcblxyXG4gIHB1YmxpYyBvbkdvVG9UYWcgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcblxyXG4gIHRhZ01lc3Nlbmdlck9uID0gZmFsc2U7XHJcblxyXG4gIFNQTW9kdWxlOiBTcE1vZHVsZTtcclxuXHJcbiAgcHVibGljIG9iamVjdENvbnRyb2w6IGFueTtcclxuXHJcbiAgLyoqXHJcbiAgICogQWN0aW9ucyBvbiBsZWZ0IGNsaWNrIHdoZW4gcG9zaXRpb25pbmcgbWF0dGVydGFnIGluIHZpc2l0XHJcbiAgICovXHJcbiAgcG9pbnRlckxlZnRDbGlja0hhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICBpZiAodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdykge1xyXG4gICAgICBjb25zdCBtYXR0ZXJ0YWdEYXRhID0gdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpO1xyXG4gICAgICBtYXR0ZXJ0YWdEYXRhLnNldFBvc2l0aW9uKHsuLi50aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9ufSk7IC8vIGNvcHkhISBub3QgdGhlIHJlZmVyZW5jZVxyXG4gICAgICBtYXR0ZXJ0YWdEYXRhLnNldE5vcm1hbCh7Li4udGhpcy5wb3NlTWF0dGVycG9ydC5ub3JtYWx9KTsgLy8gY29weSEhIG5vdCB0aGUgcmVmZXJlbmNlXHJcbiAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLnNldCh0aGlzLm1hdHRlcnRhZ1RvRm9sbG93LCBtYXR0ZXJ0YWdEYXRhKTtcclxuICAgICAgdGhpcy51cGRhdGVNYXR0ZXJUYWdDb250ZW50Rm9yVGFnSUQodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uVmFsaWRhdGVkTWF0dGVydGFnKCk7XHJcbiAgfTtcclxuXHJcbiAgcG9pbnRlclJpZ2h0Q2xpY2tIYW5kbGVyID0gKGUpID0+IHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMuY2FuY2VsRm9sbG93aW5nQ3Vyc29yKCk7XHJcbiAgICBhbGVydCgnYWN0aW9uIGNhbmNlbGxlZCcpO1xyXG4gIH07XHJcblxyXG4gIHBvaW50ZXJNaWRkbGVDbGlja0hhbmRsZXIgPSAoZSkgPT4ge1xyXG4gICAgdGhpcy50ZXh0RGlzcGxheUN1cnNvclBvc2l0aW9uUGFuZWwuaW5uZXJIVE1MID0gYHBvc2l0aW9uOlxyXG4gICAgICAgJHt0aGlzLnBvaW50VG9TdHJpbmcodGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbil9XFxuXHJcbiAgICAgICBub3JtYWw6XHJcbiAgICAgICAke3RoaXMucG9pbnRUb1N0cmluZyh0aGlzLnBvc2VNYXR0ZXJwb3J0Lm5vcm1hbCl9XFxuXHJcbiAgICAgICBmbG9vcklkOlxyXG4gICAgICAgJHt0aGlzLnBvc2VNYXR0ZXJwb3J0LmZsb29ySWR9YDtcclxuICAgIC8vIHRoaXMudGV4dERpc3BsYXlDdXJzb3JQb3NpdGlvblBhbmVsLnN0eWxlLmRpc3BsYXkgPSAndmlzaWJsZSc7XHJcbiAgICB0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoJ2NvbmZpZycpIGNvbmZpZzogQ29uZmlnLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgdmlzaWJpbGl0eVNlcnZpY2U6IEJhc2VWaXNpYmlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcclxuICApIHtcclxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xyXG5cclxuICAgIC8vIFRPRE86IG9ubHkgZm9yIGRldiFcclxuICAgIGlmIChkb2N1bWVudC5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJy1kZXYnKSAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5pbnRlcnZhbEN1cnNvclBvaW50ZXJQb3NpdGlvbiA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMucG9zZU1hdHRlcnBvcnQpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG5leHRTaG93ID0gdGhpcy5wb3NlTWF0dGVycG9ydC50aW1lICsgMTAwMDtcclxuICAgICAgICBpZiAobmV3IERhdGUoKS5nZXRUaW1lKCkgPiBuZXh0U2hvdykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb25CdXR0b25EaXNwbGF5ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IHNpemUgPSB7XHJcbiAgICAgICAgICAgIHc6IHRoaXMuY29udGFpbmVyLmNsaWVudFdpZHRoLFxyXG4gICAgICAgICAgICBoOiB0aGlzLmNvbnRhaW5lci5jbGllbnRIZWlnaHQsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgY29uc3QgY29vcmQgPSB0aGlzLnNkay5Db252ZXJzaW9uLndvcmxkVG9TY3JlZW4odGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbiwgdGhpcy5wb3NlQ2FtZXJhLCBzaXplKTtcclxuICAgICAgICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24uc3R5bGUubGVmdCA9IGAke2Nvb3JkLnggLSAyNX1weGA7XHJcbiAgICAgICAgICB0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uLnN0eWxlLnRvcCA9IGAke2Nvb3JkLnkgLSAyMn1weGA7XHJcbiAgICAgICAgICB0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgLy8gdGhpcy50ZXh0RGlzcGxheUN1cnNvclBvc2l0aW9uUGFuZWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb25CdXR0b25EaXNwbGF5ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVzIE1hdHRlcnBvcnQgYW5kIGFsbCBsaXN0ZW5lcnMvZGF0YVxyXG4gICAqIEBwYXJhbSB0YWdTZXJ2aWNlIEJhc2VUYWdTZXJ2aWNlICh0byBpbmplY3QgaHRtbClcclxuICAgKiBAcGFyYW0gbW9kdWxlIFNwTW9kdWxlIChNdXNldW0sIEltbW8pIHRvIHN1YnNjcmliZSBvbmx5IHRvIG5lZWRlZCBmdW5jdGlvbm5uYWxpdGllc1xyXG4gICAqIEByZXR1cm5zIGJvb2xlYW5cclxuICAgKi9cclxuICBhc3luYyBpbml0U2RrKFxyXG4gICAgdGFnU2VydmljZTogQmFzZVRhZ1NlcnZpY2UsXHJcbiAgICBtb2R1bGU6IFNwTW9kdWxlID0gU3BNb2R1bGUuSU1NT1xyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKHRoaXMuc2RrKSB7XHJcbiAgICAgIC8vIGNsZWFuIGlmIHNkayBpcyBydW5uaW5nIGFscmVhZHlcclxuICAgICAgYXdhaXQgdGhpcy5hY3Rpb25fZGVsZXRlX2FsbF9tYXR0ZXJ0YWdzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRhZ1NlcnZpY2UgPSB0YWdTZXJ2aWNlO1xyXG4gICAgdGhpcy5TUE1vZHVsZSA9IG1vZHVsZTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIC8vIFJldHJpZXZlIERPTSBlbGVtZW50c1xyXG4gICAgICB0aGlzLnBvaW50ZXJCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICcjdmlld2VyLXBvaW50ZXItdHJpY2snXHJcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3ZpZXdlci1tb2R1bGUnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAnI3ZpZXdlci1tb2R1bGUnXHJcbiAgICAgICkgYXMgSFRNTElGcmFtZUVsZW1lbnQ7XHJcbiAgICAgIGlmICghaWZyYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBBZGQgbGlzdGVuZXJzXHJcbiAgICAgIGlmICh0aGlzLnBvaW50ZXJCdXR0b24pIHtcclxuICAgICAgICB0aGlzLnBvaW50ZXJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICAgICdjbGljaycsXHJcbiAgICAgICAgICB0aGlzLnBvaW50ZXJMZWZ0Q2xpY2tIYW5kbGVyXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjYW5jZWwgb24gcmlnaHQgY2xpY2tcclxuICAgICAgICB0aGlzLnBvaW50ZXJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICAgICdjb250ZXh0bWVudScsXHJcbiAgICAgICAgICB0aGlzLnBvaW50ZXJSaWdodENsaWNrSGFuZGxlclxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gUmV0cmlldmUgRE9NIGVsZW1lbnRzXHJcbiAgICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICcjYnV0dG9uJ1xyXG4gICAgICApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICB0aGlzLnRleHREaXNwbGF5Q3Vyc29yUG9zaXRpb25QYW5lbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgJyN0ZXh0J1xyXG4gICAgICApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAodGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbikge1xyXG4gICAgICAgIC8vIGdldCBwb3NpdGlvbiBvbiBNYXR0ZXJwb3J0IFwibW9kZWxcIiBvbiBtaWRkbGUgY2xpY2tcclxuICAgICAgICB0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgICAnY2xpY2snLFxyXG4gICAgICAgICAgdGhpcy5wb2ludGVyTWlkZGxlQ2xpY2tIYW5kbGVyXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTG9hZCBTREtcclxuICAgICAgY29uc29sZS5sb2coJ0xvYWRpbmcgTWF0dGVycG9ydCBTREsnKTtcclxuICAgICAgY29uc3Qgc2hvd2Nhc2VXaW5kb3cgPSBpZnJhbWUuY29udGVudFdpbmRvdztcclxuICAgICAgaWZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgJ2xvYWQnLFxyXG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrID0gYXdhaXQgc2hvd2Nhc2VXaW5kb3cuTVBfU0RLLmNvbm5lY3QoXHJcbiAgICAgICAgICAgICAgc2hvd2Nhc2VXaW5kb3csXHJcbiAgICAgICAgICAgICAgJ3FuOXdzYXN1eTVoMmZ6cmJybjFuenIwaWQnLFxyXG4gICAgICAgICAgICAgICczLjUnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBMb2FkIE1hdHRlcnRhZyBpY29ucyBhbmQgY3VzdG9tIHN1YnNjcmlwdGlvbnNcclxuICAgICAgICAgIHN3aXRjaCAobW9kdWxlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgU3BNb2R1bGUuSU1NTzpcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbi10aWNrZXQnLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fdGlja2V0XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbi1lcXVpcG1lbnQnLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fZXF1aXBtZW50XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbi1tZWFzdXJlJyxcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX21lYXN1cmVcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICdpY29uLWRhdGEnLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fZGF0YVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgJ2ljb24tb2JqZWN0M2QnLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fb2JqZWN0M2RcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnNkay5NZWFzdXJlbWVudHMuZGF0YS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgb25BZGRlZDogZnVuY3Rpb24gKFxyXG4gICAgICAgICAgICAgICAgICBpbmRleDogYW55LFxyXG4gICAgICAgICAgICAgICAgICBpdGVtOiB7IHBvaW50czogYW55IH0sXHJcbiAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb246IGFueVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICAgICAvLyAgICAgXCJpdGVtIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uXCIsXHJcbiAgICAgICAgICAgICAgICAgIC8vICAgICBpbmRleCxcclxuICAgICAgICAgICAgICAgICAgLy8gICAgIGl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgIC8vICk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMubWVhc3VyZW1lbnRzW2luZGV4XSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGFzdE1lYXN1cmUgPSBpdGVtLnBvaW50cztcclxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIChjb2xsZWN0aW9uOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ3RoZSBlbnRpcmUgdXAtdG8tZGF0ZSBjb2xsZWN0aW9uJywgY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGlzdGFuY2VGb3JMYXN0TWVhc3VyZW1lbnQoKTtcclxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB0aGlzLnNkay5NZWFzdXJlbWVudHMubW9kZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAobWVhc3VyZW1lbnRNb2RlU3RhdGU6IHsgYWN0aXZlOiBhbnkgfSkge1xyXG4gICAgICAgICAgICAgICAgICAvLyBtZWFzdXJlbWVudCBtb2RlIHN0YXRlIGhhcyBjaGFuZ2VkXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXNNZWFzdXJlTW9kZU9uID0gbWVhc3VyZW1lbnRNb2RlU3RhdGUuYWN0aXZlO1xyXG4gICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnSXMgbWVhc3VyZW1lbnQgbW9kZSBjdXJyZW50bHkgYWN0aXZlPyAnLCBtZWFzdXJlbWVudE1vZGVTdGF0ZS5hY3RpdmUpO1xyXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTcE1vZHVsZS5NVVNFVU06XHJcbiAgICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgJ2ljb24tZGF0YScsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9kYXRhXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTcE1vZHVsZS5IT1RFTDpcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbl9yb29tX2F2YWlsYWJsZScsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9yb29tX2F2YWlsYWJsZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgJ2ljb25fcm9vbV91bmF2YWlsYWJsZScsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9yb29tX3VuYXZhaWxhYmxlXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbl9yb29tX2Nob3NlbicsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9yb29tX2Nob3NlblxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgJ2ljb25fcm9vbV92aWV3ZWQnLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fcm9vbV92aWV3ZWRcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgJ2ljb24tcG9zaXRpb24nLFxyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9wb3NpdGlvblxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIC8vIDNEIHBvc2l0aW9uJ3MgcG9pbnRlclxyXG4gICAgICAgICAgdGhpcy5zZGsuUG9pbnRlci5pbnRlcnNlY3Rpb24uc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoaW50ZXJzZWN0aW9uOiBhbnkpIHtcclxuICAgICAgICAgICAgICB0aGlzLnBvc2VNYXR0ZXJwb3J0ID0gaW50ZXJzZWN0aW9uO1xyXG4gICAgICAgICAgICAgIHRoaXMucG9zZU1hdHRlcnBvcnQudGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5vbGRQb3NlTWF0dGVycG9ydFBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9sZFBvc2VNYXR0ZXJwb3J0UG9zaXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgICAgICAgIHk6IDAsXHJcbiAgICAgICAgICAgICAgICAgIHo6IDAsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcmFjdGlvbk1vZGUgIT09IFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUICYmXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93XHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBmb2xsb3cgdGhlIHBvaW50ZXIgYW5kIGNoYW5nZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IHRhZ1xyXG4gICAgICAgICAgICAgICAgLy8gKHdlIGFyZSBhYm91dCB0byB2YWxpZGF0ZSwgYnV0IGl0IGV4aXN0cyBpbiBzZGsgYWxyZWFkeSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlX2ZvbGxvd2luZ190YWcodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChkb2N1bWVudC5VUkwuaW5kZXhPZignaHR0cHM6Ly9kZXYuc21hcnRlcnBsYW4uaW8nKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb25CdXR0b25EaXNwbGF5ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAvL0NhbWVyYSBtb2RlXHJcbiAgICAgICAgICB0aGlzLnNkay5Nb2RlLmN1cnJlbnQuc3Vic2NyaWJlKChtb2RlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAnbW9kZS5kb2xsaG91c2UnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuRE9MTEhPVVNFO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnbW9kZS5mbG9vcnBsYW4nOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuRkxPT1JQTEFOO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnbW9kZS5pbnNpZGUnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuSU5TSURFO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnbW9kZS50cmFuc2l0aW9uaW5nJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbWVyYU1vZGUgPSBDYW1lcmFNb2RlLlRSQU5TSVRJT05JTkc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuT1VUU0lERTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm9uQ2FtZXJhTW9kZUNoYW5nZWQubmV4dCh0aGlzLmN1cnJlbnRDYW1lcmFNb2RlKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIC8vIENhbWVyYSdzIHZpZXdwb2ludFxyXG4gICAgICAgICAgdGhpcy5zZGsuQ2FtZXJhLnBvc2Uuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzdWJzY3IocG9zZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wb3NlQ2FtZXJhID0gcG9zZTtcclxuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFQb3NlLm5leHQocG9zZSk7XHJcbiAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0N1cnJlbnQgcG9zaXRpb24gaXMgJywgcG9zZS5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ1JvdGF0aW9uIGFuZ2xlIGlzICcsIHBvc2Uucm90YXRpb24pO1xyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU3dlZXAgVVVJRCBpc1wiLCBwb3NlLnN3ZWVwKTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8vIHN1YnNjcmliZSB0byBzd2VlcHNcclxuICAgICAgICAgIHRoaXMuc2RrLlN3ZWVwLmRhdGEuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgb25Db2xsZWN0aW9uVXBkYXRlZDogZnVuY3Rpb24gc3Vic2NyKGNvbGxlY3Rpb246IHt9KSB7XHJcbiAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJTd2VlcCBjb2xsZWN0aW9uIHVwZGF0ZWRcIik7XHJcbiAgICAgICAgICAgICAgdGhpcy5zd2VlcHMgPSBPYmplY3Qua2V5cyhjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgLy8gc3Vic2NyaWJlIHRvIGN1cnJlbnQgc3dlZXBcclxuICAgICAgICAgIHRoaXMuc2RrLlN3ZWVwLmN1cnJlbnQuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzdWJzY3IoY3VycmVudFN3ZWVwOiB7IHNpZDogc3RyaW5nIH0pIHtcclxuICAgICAgICAgICAgICAvLyBDaGFuZ2UgdG8gdGhlIGN1cnJlbnQgc3dlZXAgaGFzIG9jY3VycmVkLlxyXG4gICAgICAgICAgICAgIGlmIChjdXJyZW50U3dlZXAuc2lkID09PSAnJykge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ05vdCBjdXJyZW50bHkgc3RhdGlvbmVkIGF0IGEgc3dlZXAgcG9zaXRpb24nKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJlbW1pdGluZyBzd2VlcFwiLCBjdXJyZW50U3dlZXAuc2lkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN3ZWVwLm5leHQoY3VycmVudFN3ZWVwLnNpZCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIEZsb29yIGRhdGFcclxuICAgICAgICAgIHRoaXMuc2RrLkZsb29yLmRhdGEuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgb25Db2xsZWN0aW9uVXBkYXRlZDogZnVuY3Rpb24gdXBkKHRoaXM6IGFueSwgY29sbGVjdGlvbjogYW55KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mbG9vcnMgPSBPYmplY3QudmFsdWVzKGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvLyBvbiB0YWcgY2xpY2sgb3BlbiBkZXRhaWxzIHBhZ2VcclxuICAgICAgICAgIHRoaXMuc2RrLm9uKCd0YWcuY2xpY2snLCAoc2lkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgLy8gZ2V0IG9iamVjdCBvZiB0aGlzIHRhZ1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG1hdHRlcnRhZ0RhdGEgPSB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQoc2lkKTtcclxuICAgICAgICAgICAgICBjb25zdCB1cmwgPSB0YWdTZXJ2aWNlLmdldFVybEZvclNlZURldGFpbHMoXHJcbiAgICAgICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLmdldE9iamVjdCgpLFxyXG4gICAgICAgICAgICAgICAgbWF0dGVydGFnRGF0YS5nZXRUeXBlKClcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGlmICh1cmwgIT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2liaWxpdHlTZXJ2aWNlLmRldGFpbFNob3dpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBzaG93IGRldGFpbHMgZm9yIHRhZycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvLyBQb2ludGVyIHRyaWNrXHJcbiAgICAgICAgICAvLyBDcmVhdGUgYSBkaXYgdGhhdCB3aWxsIGFwcGVhciB3aGVuIHRoZSBjdXJzb3IgaXMgc3RpbGxcclxuICAgICAgICAgIC8vIEl0IHdpbGwgaW50ZXJjZXB0IHRoZSBjbGljayBvZiB0aGUgbW91c2UgYmVmb3JlIGl0IHRyaWdlcnJpbmcgdGhlIE1hdHRlcnBvcnQncyB0b3VyIG5hdmlnYXRpb25cclxuICAgICAgICAgIHRoaXMudGltZXJQb2ludGVyID0gc2V0SW50ZXJ2YWwoXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9pbnRlclRyaWNrLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIDUwXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICogVHJhbnNpdGlvbnNcclxuICAgICAgICAgICAqL1xyXG4gICAgICAgICAgdGhpcy5zZGsub24oXHJcbiAgICAgICAgICAgICd2aWV3bW9kZS5jaGFuZ2VzdGFydCcsXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICh0bywgZnJvbSkge1xyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdTdGFydGluZyB0byBtb3ZlIHRvICcgKyB0byArICcgZnJvbSAnICsgZnJvbSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Nb2RlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIHRoaXMuc2RrLm9uKFxyXG4gICAgICAgICAgICAndmlld21vZGUuY2hhbmdlZW5kJyxcclxuICAgICAgICAgICAgZnVuY3Rpb24gKG9sZE1vZGUsIG5ld01vZGUpIHtcclxuICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnRW5kZWQgdG8gbW92ZSB0byAnICsgbmV3TW9kZSArICcgZnJvbSAnICsgb2xkTW9kZSk7XHJcbiAgICAgICAgICAgICAgaWYgKG5ld01vZGUgIT09ICdtb2RlLnRyYW5zaXRpb25pbmcnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluVHJhbnNpdGlvbk1vZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnNkay5vbihcclxuICAgICAgICAgICAgdGhpcy5zZGsuU3dlZXAuRXZlbnQuRU5URVIsXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIChvbGRTd2VlcCwgbmV3U3dlZXApIHtcclxuICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnTGVhdmluZyBzd2VlcCAnICsgb2xkU3dlZXApO1xyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdFbnRlcmluZyBzd2VlcCAnICsgbmV3U3dlZXApO1xyXG4gICAgICAgICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5zZGsub24oXHJcbiAgICAgICAgICAgIHRoaXMuc2RrLlN3ZWVwLkV2ZW50LkVYSVQsXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIChmcm9tU3dlZXAsIHRvU3dlZXApIHtcclxuICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCdMZWF2aW5nIHN3ZWVwICcgKyBmcm9tU3dlZXApO1xyXG4gICAgICAgICAgICAgIC8vICAgY29uc29sZS5sb2coJ1RyYW5zaXRpb25pbmcgdG8gc3dlZXAgJyArIHRvU3dlZXApO1xyXG4gICAgICAgICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwb2ludFRvU3RyaW5nKHBvaW50OiB7IHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIgfSk6IHN0cmluZyB7XHJcbiAgICB2YXIgeCA9IHBvaW50LngudG9GaXhlZCgzKTtcclxuICAgIHZhciB5ID0gcG9pbnQueS50b0ZpeGVkKDMpO1xyXG4gICAgdmFyIHogPSBwb2ludC56LnRvRml4ZWQoMyk7XHJcblxyXG4gICAgcmV0dXJuIGB7IHg6ICR7eH0sIHk6ICR7eX0sIHo6ICR7en0gfWA7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0gTWVhc3VyZW1lbnRzIHJlbGF0ZWQgLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLyoqXHJcbiAgICogQ2FsbGJhY2sgYWZ0ZXIgbWVhc3VyZW1lbnQgaXMgcGVyZm9ybWVkXHJcbiAgICovXHJcbiAgZ2V0RGlzdGFuY2VGb3JMYXN0TWVhc3VyZW1lbnQoKSB7XHJcbiAgICBpZiAodGhpcy5sYXN0TWVhc3VyZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IG51bWJlclBvaW50cyA9IHRoaXMubGFzdE1lYXN1cmUubGVuZ3RoO1xyXG4gICAgICB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlID0gW107XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBudW1iZXJQb2ludHM7IGluZGV4ICs9IDEpIHtcclxuICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGdldERpc3RhbmNlQmV0d2VlblR3b1BvaW50cyhcclxuICAgICAgICAgIHRoaXMubGFzdE1lYXN1cmVbaW5kZXggLSAxXSxcclxuICAgICAgICAgIHRoaXMubGFzdE1lYXN1cmVbaW5kZXhdXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlLnB1c2goZGlzdGFuY2UpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudGFrZVNjcmVlblNob3QoKS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vYWRkX21lYXN1cmVtZW50YF0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldExhc3REaXN0YW5jZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kaXN0YW5jZXNMYXN0TWVhc3VyZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRha2VzIHNjcmVlbnNob3QgYW5kIHNhdmVzIGJhc2U2NCBpbiBsYXN0U2NyZWVuc2hvdFVyaVxyXG4gICAqIEByZXR1cm5zIFByb21pc2VcclxuICAgKi9cclxuICB0YWtlU2NyZWVuU2hvdCgpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2RrLlJlbmRlcmVyLnRha2VTY3JlZW5TaG90KFxyXG4gICAgICB0aGlzLnJlc29sdXRpb24sXHJcbiAgICAgIHRoaXMudmlzaWJpbGl0eVxyXG4gICAgKS50aGVuKFxyXG4gICAgICBmdW5jdGlvbiAoc2NyZWVuU2hvdFVyaTogYW55KSB7XHJcbiAgICAgICAgLy8gYmFzZTY0IHN0cmluZ1xyXG4gICAgICAgIHRoaXMubGFzdFNjcmVlbnNob3RVcmkgPSBzY3JlZW5TaG90VXJpO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2NyZWVuU2hvdFVyaSgpIHtcclxuICAgIHJldHVybiB0aGlzLmxhc3RTY3JlZW5zaG90VXJpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGFzdE1lYXN1cmVtZW50KCk6IE9iamVjdCB7XHJcbiAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICBtZWFzdXJlOiB0aGlzLmxhc3RNZWFzdXJlLFxyXG4gICAgICBzd2VlcDogdGhpcy5wb3NlQ2FtZXJhLnN3ZWVwLFxyXG4gICAgfTtcclxuICAgIHJldHVybiBkYXRhO1xyXG4gIH1cclxuXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tIFV0aWxzIC0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8qKlxyXG4gICAqIFN0eWxpbmcgb2YgcG9pbnRlclxyXG4gICAqL1xyXG4gIHVwZGF0ZVBvaW50ZXJUcmljaygpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5pbnRlcmFjdGlvbk1vZGUgIT09IFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUICYmXHJcbiAgICAgIHRoaXMubWF0dGVydGFnVG9Gb2xsb3cgJiZcclxuICAgICAgdGhpcy5wb3NlTWF0dGVycG9ydCAmJlxyXG4gICAgICB0aGlzLmdldERpc3RQb3NpdGlvbihcclxuICAgICAgICB0aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLFxyXG4gICAgICAgIHRoaXMub2xkUG9zZU1hdHRlcnBvcnRQb3NpdGlvblxyXG4gICAgICApID4gMjVcclxuICAgICkge1xyXG4gICAgICB0aGlzLnBvaW50ZXJCdXR0b24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuXHJcbiAgICAgIGNvbnN0IHNpemUgPSB7XHJcbiAgICAgICAgdzogdGhpcy5jb250YWluZXIuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgaDogdGhpcy5jb250YWluZXIuY2xpZW50SGVpZ2h0LFxyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBjb29yZHMgPSB0aGlzLnNkay5Db252ZXJzaW9uLndvcmxkVG9TY3JlZW4oXHJcbiAgICAgICAgdGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbixcclxuICAgICAgICB0aGlzLnBvc2VDYW1lcmEsXHJcbiAgICAgICAgc2l6ZVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnBvaW50ZXJCdXR0b24uc3R5bGUubGVmdCA9IGAke1xyXG4gICAgICAgIGNvb3Jkcy54ICogTWF0aC5zaWduKGNvb3Jkcy54KSAtIDI1XHJcbiAgICAgIH1weGA7XHJcbiAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5zdHlsZS50b3AgPSBgJHtjb29yZHMueSAqIE1hdGguc2lnbihjb29yZHMueCkgLSAyNX1weGA7XHJcbiAgICAgIHRoaXMub2xkUG9zZU1hdHRlcnBvcnRQb3NpdGlvbiA9IHtcclxuICAgICAgICAuLi50aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVhbHRpbWUgbWF0dGVydGFnIGZvbGxvd2luZyB0aGUgY3Vyc29yXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZyBzdHJpbmdcclxuICAgKi9cclxuICBlbmFibGVfZm9sbG93aW5nX3RhZyhtYXR0ZXJ0YWc6IHN0cmluZykge1xyXG4gICAgdGhpcy5zZGsuVGFnLmVkaXRQb3NpdGlvbihtYXR0ZXJ0YWcsIHtcclxuICAgICAgYW5jaG9yUG9zaXRpb246IHtcclxuICAgICAgICB4OiB0aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLnggKiAxLFxyXG4gICAgICAgIHk6IHRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24ueSAqIDEsXHJcbiAgICAgICAgejogdGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbi56ICogMSxcclxuICAgICAgfSxcclxuICAgICAgc3RlbVZlY3Rvcjoge1xyXG4gICAgICAgIHg6IHRoaXMucG9zZU1hdHRlcnBvcnQubm9ybWFsLnggKiAwLjMsXHJcbiAgICAgICAgeTogdGhpcy5wb3NlTWF0dGVycG9ydC5ub3JtYWwueSAqIDAuMyxcclxuICAgICAgICB6OiB0aGlzLnBvc2VNYXR0ZXJwb3J0Lm5vcm1hbC56ICogMC4zLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGRpc3RhbmNlIGJldHd3ZWVuIHR3byAzRCBwb3NpdGlvbnNcclxuICAgKiBVc2VkIGluIG9yZGVyIHRvIHNlZSBob3cgbXVjaCB0aGUgY3Vyc29yIGhhcyBtb3ZlZCBmcm9tIHRoZSBwcmV2aW91cyBwb3NpdGlvblxyXG4gICAqIEBwYXJhbSBwb3MxXHJcbiAgICogQHBhcmFtIHBvczJcclxuICAgKi9cclxuICBnZXREaXN0UG9zaXRpb24ocG9zMTogYW55LCBwb3MyOiBhbnkpIHtcclxuICAgIGNvbnN0IHNpemUgPSB7XHJcbiAgICAgIHc6IHRoaXMuY29udGFpbmVyLmNsaWVudFdpZHRoLFxyXG4gICAgICBoOiB0aGlzLmNvbnRhaW5lci5jbGllbnRIZWlnaHQsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgY29vcmRzMSA9IHRoaXMuc2RrLkNvbnZlcnNpb24ud29ybGRUb1NjcmVlbihcclxuICAgICAgcG9zMSxcclxuICAgICAgdGhpcy5wb3NlQ2FtZXJhLFxyXG4gICAgICBzaXplXHJcbiAgICApO1xyXG4gICAgY29uc3QgY29vcmRzMiA9IHRoaXMuc2RrLkNvbnZlcnNpb24ud29ybGRUb1NjcmVlbihcclxuICAgICAgcG9zMixcclxuICAgICAgdGhpcy5wb3NlQ2FtZXJhLFxyXG4gICAgICBzaXplXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIE1hdGguc3FydChcclxuICAgICAgKGNvb3JkczEueCAtIGNvb3JkczIueCkgKiogMiArIChjb29yZHMxLnkgLSBjb29yZHMyLnkpICoqIDJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0gTWF0dGVydGFnIHJlbGF0ZWQgLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyB0aGUgTWF0dGVydGFnIHRoYXQgd2lsbCBmb2xsb3cgdGhlIGN1cnNvclxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdEYXRhIE1hdHRlcnRhZ0RhdGFcclxuICAgKi9cclxuICBhc3luYyBhZGRDdXJzb3JNYXR0ZXJ0YWcobWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YSkge1xyXG4gICAgaWYgKCF0aGlzLnBvc2VNYXR0ZXJwb3J0KSByZXR1cm47XHJcbiAgICB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93ID0gYXdhaXQgdGhpcy5hZGRNYXR0ZXJ0YWdUb1ZpZXdlcihtYXR0ZXJ0YWdEYXRhKTtcclxuICAgIGNvbnNvbGUubG9nKCdmb2xsb3dpbmcgdGhlIHRhZycsIHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpO1xyXG4gICAgdGhpcy5zZGsuVGFnLmVkaXRJY29uKHRoaXMubWF0dGVydGFnVG9Gb2xsb3csICdpY29uLXBvc2l0aW9uJyk7XHJcbiAgICB0aGlzLnNkay5UYWcuZWRpdE9wYWNpdHkodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdywgMSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIE1hdHRlcnRhZyB0byB2aWV3ZXIgZm9yIGFuIGV4aXN0aW5nIG9iamVjdCB3aXRoIGNvb3JkaW5hdGVzIChpbiBtYXR0ZXJ0YWdEYXRhLnBvaSlcclxuICAgKiAocG9zaXRpb24sIGluamVjdGVkIGh0bWwsIHNldCBpY29uKVxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdEYXRhXHJcbiAgICogcmV0dXJucyBtYXR0ZXJ0YWdJRFxyXG4gICAqL1xyXG4gIGFzeW5jIGFkZE1hdHRlcnRhZ1RvVmlld2VyKFxyXG4gICAgbWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YVxyXG4gICk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xyXG4gICAgbGV0IHNpZExpc3Q7XHJcbiAgICBpZiAoIXRoaXMuc2RrKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgc2lkTGlzdCA9IGF3YWl0IHRoaXMuc2RrLlRhZy5hZGQobWF0dGVydGFnRGF0YS5nZXREYXRhKCkpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgJ1RhZyBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIHZpc2l0JyxcclxuICAgICAgICBlcnJvcixcclxuICAgICAgICBtYXR0ZXJ0YWdEYXRhLmdldERhdGEoKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHNpZExpc3QpIHtcclxuICAgICAgY29uc3QgbWF0dGVydGFnSUQgPSBzaWRMaXN0WzBdO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhcImFkZGVkIHRhZ1wiLCBtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKSwgbWF0dGVydGFnSUQpO1xyXG4gICAgICB0aGlzLm1hdHRlcnRhZ0lEcy5wdXNoKG1hdHRlcnRhZ0lEKTtcclxuICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3Muc2V0KG1hdHRlcnRhZ0lELCBtYXR0ZXJ0YWdEYXRhKTtcclxuICAgICAgcmV0dXJuIG1hdHRlcnRhZ0lEO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBY3Rpb25zIHdoZW4gcG9zaXRpb24gb2YgbWF0dGVydGFnIGlzIHZhbGlkYXRlZCBieSBsZWZ0IGNsaWNrXHJcbiAgICovXHJcbiAgb25WYWxpZGF0ZWRNYXR0ZXJ0YWcoKSB7XHJcbiAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVCk7XHJcbiAgICBjb25zdCBsYXN0VGFnID0gdGhpcy5nZXRMYXN0VGFnKCk7XHJcbiAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICBjb25zdCBjYWxsYmFja01vZGUgPSB0aGlzLmRpY3Rpb25uYXJ5VGFnc1xyXG4gICAgICAgIC5nZXQobGFzdFRhZylcclxuICAgICAgICAuZ2V0Q2FsbGJhY2tBY3Rpb25Nb2RlKCk7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2tBZnRlck1hdHRlcnRhZ1ZhbGlkYXRpb24oY2FsbGJhY2tNb2RlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZ2lzdGVycyBuZXcgaWNvbiAocGF0aCB0byBpbWFnZSkgYW5kIHNldCBpdHMgZm9yIE1hdHRlcnRhZ1xyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRCBzdHJpbmdcclxuICAgKiBAcGFyYW0gaWNvblBhdGggc3RyaW5nXHJcbiAgICovXHJcbiAgYXN5bmMgYWRkTmV3SWNvbkFuZFNldEZvclRhZyhtYXR0ZXJ0YWdJRDogc3RyaW5nLCBpY29uUGF0aDogc3RyaW5nKSB7XHJcbiAgICBhd2FpdCB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoYGljb25fJHttYXR0ZXJ0YWdJRH1gLCBpY29uUGF0aCk7XHJcbiAgICB0aGlzLnNkay5UYWcuZWRpdEljb24obWF0dGVydGFnSUQsIGBpY29uXyR7bWF0dGVydGFnSUR9YCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGFuZ2VzIGljb24gb2YgTWF0dGVydGFnICh0aGUgaWNvbk5hbWUgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgPSBvbmUgb2YgZGVmYXVsdCBvbmVzKVxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRCBzdHJpbmdcclxuICAgKiBAcGFyYW0gaWNvbk5hbWUgc3RyaW5nXHJcbiAgICovXHJcbiAgYXN5bmMgc2V0UmVnaXN0cmVkSWNvbkZvclRhZyhtYXR0ZXJ0YWdJRDogc3RyaW5nLCBpY29uTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnNkay5UYWcuZWRpdEljb24obWF0dGVydGFnSUQsIGljb25OYW1lKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgJ2NvdWxkIG5vdCBlZGl0IEljb24gd2l0aCBuYW1lICcsXHJcbiAgICAgICAgaWNvbk5hbWUsXHJcbiAgICAgICAgJy4gSXMgaXQgcmVnaXN0ZXJlZD8nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIGRlZmF1bHQgaWNvbiBmb3IgYSB0YWcgKHJlZ2lzdGVyZWQgaW4gaW5pdFNkaykgT1IgdXNlcyB0YWdJY29uIGZyb20gUE9JIChhdmFpbGFibGUgZnJvbSBNYXR0ZXJ0YWdEYXRhKVxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRCBzdHJpbmdcclxuICAgKiBAcGFyYW0gbWF0dGVydGFnRGF0YSBNYXR0ZXJ0YWdEYXRhXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBhc3luYyBzZXRUYWdJY29uQW5kT3BhY2l0eShcclxuICAgIG1hdHRlcnRhZ0lEOiBzdHJpbmcsXHJcbiAgICBtYXR0ZXJ0YWdEYXRhOiBNYXR0ZXJ0YWdEYXRhXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5TUE1vZHVsZSA9PT0gU3BNb2R1bGUuSE9URUwpIHtcclxuICAgICAgY29uc3Qgcm9vbSA9IG1hdHRlcnRhZ0RhdGEuZ2V0T2JqZWN0KCk7XHJcbiAgICAgIGxldCBpY29uTmFtZSA9IGBpY29uX3Jvb21gO1xyXG4gICAgICBpZiAocm9vbS5hdmFpbGFibGUpIHtcclxuICAgICAgICBpY29uTmFtZSA9IGAke2ljb25OYW1lfV9hdmFpbGFibGVgO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGljb25OYW1lID0gYCR7aWNvbk5hbWV9X3VuYXZhaWxhYmxlYDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNkay5UYWcuZWRpdEljb24obWF0dGVydGFnSUQsIGljb25OYW1lKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc3RyaW5nVGFnVHlwZSA9IHBvaVR5cGVUb1N0cmluZyhtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKSk7XHJcbiAgICBsZXQgb3BhY2l0eSA9IHRoaXMuY29uZmlnLm15X2NvbmZpZy5ERUZBVUxUX09QQUNJVFlfVEFHO1xyXG4gICAgbGV0IGljb25OYW1lID0gYGljb24tJHtzdHJpbmdUYWdUeXBlfWA7XHJcbiAgICBjb25zdCBwb2kgPSBtYXR0ZXJ0YWdEYXRhLmdldFBvaSgpO1xyXG4gICAgaWYgKHBvaSAmJiBwb2kudGFnSWNvbikge1xyXG4gICAgICBjb25zdCB0YWdJY29uID0gSlNPTi5wYXJzZShwb2kudGFnSWNvbik7XHJcbiAgICAgIGlmIChtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKSA9PT0gUG9pVHlwZS5EQVRBKSB7XHJcbiAgICAgICAgY29uc3QgZmVhdHVyZSA9IG1hdHRlcnRhZ0RhdGEuZ2V0T2JqZWN0KCk7XHJcbiAgICAgICAgaWYgKGZlYXR1cmUudHlwZSA9PT0gRmVhdHVyZVR5cGUuSU5ESUNBVE9SX1RFTVApIHtcclxuICAgICAgICAgIHRhZ0ljb24uc3JjID0gdGhpcy50YWdTZXJ2aWNlLmdldEljb25UYWdJbWFnZUZvckZlYXR1cmUoZmVhdHVyZSwgcG9pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRhZ0ljb24uc3JjKSB7XHJcbiAgICAgICAgY29uc3QgcGF0aFNpZ25lZCA9IGF3YWl0IHRoaXMudGFnU2VydmljZS5nZXRTaWduZWRUYWdJY29uU291cmNlKFxyXG4gICAgICAgICAgdGFnSWNvbi5zcmNcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChwYXRoU2lnbmVkKSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpY29uTmFtZSA9IGBpY29uLSR7c3RyaW5nVGFnVHlwZX0tJHttYXR0ZXJ0YWdJRH0tJHttYXR0ZXJ0YWdEYXRhLmN1c3RvbUljb25JbmRleH1gO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoaWNvbk5hbWUsIHBhdGhTaWduZWQpO1xyXG4gICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLmN1c3RvbUljb25JbmRleCArPSAxO1xyXG4gICAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciByZWdpc3Rlckljb24nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRhZ0ljb24ub3BhY2l0eSkge1xyXG4gICAgICAgIG9wYWNpdHkgPSB0YWdJY29uLm9wYWNpdHk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2RrLlRhZy5lZGl0SWNvbihtYXR0ZXJ0YWdJRCwgaWNvbk5hbWUpO1xyXG4gICAgICB0aGlzLnNkay5UYWcuZWRpdE9wYWNpdHkobWF0dGVydGFnSUQsIG9wYWNpdHkpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGVkaXRJY29uIG9yIG9wYWNpdHknLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNb3ZlcyB2aWV3ZXIgdG8gbGFzdCB0YWcgY3JlYXRlZFxyXG4gICAqL1xyXG4gIGdvVG9MYXN0VGFnKCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxhc3RUYWcgPSB0aGlzLmdldExhc3RUYWcoKTtcclxuICAgICAgdGhpcy5nb1RvVGFnKGxhc3RUYWcpO1xyXG4gICAgfSwgMjAwMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNb3ZlcyB2aWV3ZXIgdG8gTWF0dGVydGFnIHdpdGggSUQgcHJvdmlkZWRcclxuICAgKiBAcGFyYW0gbWF0dGVydGFnSUQgc3RyaW5nXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBhc3luYyBnb1RvVGFnKG1hdHRlcnRhZ0lEOiBzdHJpbmcpIHtcclxuICAgIGlmIChtYXR0ZXJ0YWdJRCA9PT0gJycpIHJldHVybjtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMub25Hb1RvVGFnLm5leHQobWF0dGVydGFnSUQpO1xyXG4gICAgICBhd2FpdCB0aGlzLnNkay5Td2VlcC5jdXJyZW50LndhaXRVbnRpbChcclxuICAgICAgICAoY3VycmVudFN3ZWVwKSA9PiBjdXJyZW50U3dlZXAgIT09ICcnXHJcbiAgICAgICk7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2RrLk1hdHRlcnRhZy5uYXZpZ2F0ZVRvVGFnKFxyXG4gICAgICAgIG1hdHRlcnRhZ0lELFxyXG4gICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5UcmFuc2l0aW9uLkZMWVxyXG4gICAgICApO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coJ2Nhbm5vdCBuYXZpZ2F0ZSB0byB0YWcnLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIGNvbnRlbnQgb2YgTWF0dGVydGFnIHdpdGggbWF0dGVydGFnSUQgKGJpbGxib2FyZCwgaW5qZWN0ZWQgaHRtbCwgdGFnIGljb24pXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBvYmplY3QgVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUsIGV0Y1xyXG4gICAqIEBwYXJhbSB0YWdUeXBlIFBvaVR5cGVcclxuICAgKi9cclxuICBhc3luYyB1cGRhdGVNYXR0ZXJUYWdDb250ZW50Rm9yVGFnSUQoXHJcbiAgICBtYXR0ZXJ0YWdJRDogc3RyaW5nLFxyXG4gICAgb2JqZWN0OiBEYk9iamVjdFR5cGUgPSBudWxsLFxyXG4gICAgdGFnVHlwZTogUG9pVHlwZSA9IG51bGxcclxuICApIHtcclxuICAgIHRoaXMuc2RrLlRhZy5lZGl0QmlsbGJvYXJkKFxyXG4gICAgICBtYXR0ZXJ0YWdJRCxcclxuICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKS5nZXREYXRhKClcclxuICAgICk7XHJcbiAgICBpZiAob2JqZWN0ICYmIHRhZ1R5cGUpIHtcclxuICAgICAgYXdhaXQgdGhpcy5pbmplY3RIdG1sSW5UYWcodGFnVHlwZSwgb2JqZWN0LCBtYXR0ZXJ0YWdJRCk7XHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLnNldFRhZ0ljb25BbmRPcGFjaXR5KFxyXG4gICAgICBtYXR0ZXJ0YWdJRCxcclxuICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgaW5qZWN0ZWQgaHRtbCBmb3IgTWF0dGVydGFnXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBvYmplY3QgVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUsIGV0Y1xyXG4gICAqIEBwYXJhbSB0YWdUeXBlIFBvaVR5cGVcclxuICAgKi9cclxuICBhc3luYyB1cGRhdGVJbmplY3RlZEh0bWxGb3JUYWdJRChcclxuICAgIG1hdHRlcnRhZ0lEOiBzdHJpbmcsXHJcbiAgICBvYmplY3Q6IGFueSxcclxuICAgIHRhZ1R5cGU6IFBvaVR5cGVcclxuICApIHtcclxuICAgIGF3YWl0IHRoaXMuaW5qZWN0SHRtbEluVGFnKHRhZ1R5cGUsIG9iamVjdCwgbWF0dGVydGFnSUQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlcyBNYXR0ZXJ0YWcgZnJvbSBWaWV3ZXIgYnkgaXRzIElEXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEIHN0cmluZ1xyXG4gICAqL1xyXG4gIGRlbGV0ZU1hdHRlcnRhZ0Zyb21JZChtYXR0ZXJ0YWdJRDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNkay5UYWcucmVtb3ZlKG1hdHRlcnRhZ0lEKTtcclxuICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmRlbGV0ZShtYXR0ZXJ0YWdJRCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGVzIGxhdGVzdCBjcmVhdGVkIG1hdHRlcnRhZ1xyXG4gICAqL1xyXG4gIGRlbGV0ZUxhc3RNYXR0ZXJ0YWcoKSB7XHJcbiAgICBjb25zdCBtYXR0ZXJ0YWdJRCA9IHRoaXMubWF0dGVydGFnSURzLnBvcCgpO1xyXG4gICAgaWYgKG1hdHRlcnRhZ0lEKSB7XHJcbiAgICAgIHRoaXMuZGVsZXRlTWF0dGVydGFnRnJvbUlkKG1hdHRlcnRhZ0lEKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExlZ2FjeTogdXNlZCB0byBiZSBjYWxsZWQgYWN0aW9uX2FkZF9tYXR0ZXJ0YWdfZnJvbV9QT0lcclxuICAgKiBBZGRzIGFuZCBjb25maWd1cmVzIE1hdHRlcnRhZyBmb3IgYW4gb2JqZWN0IChUaWNrZXQsIEVxdWlwbWVudCwgRmVhdHVyZSwgZXRjKSB0aGF0IGNvcnJlc3BvbmRzIHRvIFBPSSAoY29vcmRpbmF0ZXMsIHRhZ0ljb24pXHJcbiAgICogQHBhcmFtIHRhZ1R5cGUgUG9pVHlwZVxyXG4gICAqIEBwYXJhbSBvYmplY3QgVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUuLi5cclxuICAgKiBAcGFyYW0gcG9pIFBPSVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgYXN5bmMgY3JlYXRlTWF0dGVydGFnRnJvbVBPSShcclxuICAgIHRhZ1R5cGU6IFBvaVR5cGUsXHJcbiAgICBvYmplY3Q6IERiT2JqZWN0VHlwZSxcclxuICAgIHBvaTogUE9JXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIC8vIGNoZWNrIGlmIHRhZyBleGlzdHMgYWxyZWFkeVxyXG4gICAgY29uc3Qge3RhZywgc3dlZXB9ID0gdGhpcy5nZXRUYWdGcm9tRWxlbWVudElkKG9iamVjdC5pZCk7XHJcbiAgICBpZiAodGFnKSB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwidGFnIGV4aXN0c1wiLCBvYmplY3QpXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IG1hdHRlcnRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGEgPSBuZXcgTWF0dGVydGFnRGF0YSh0YWdUeXBlKTtcclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0T2JqZWN0KG9iamVjdCwgdGFnVHlwZSk7XHJcbiAgICBpZiAocG9pLmNvb3JkaW5hdGUpIHtcclxuICAgICAgbWF0dGVydGFnRGF0YS5zZXRQb3NpdGlvbihKU09OLnBhcnNlKHBvaS5jb29yZGluYXRlKSk7XHJcbiAgICB9XHJcbiAgICBpZiAocG9pLm1ldGFkYXRhKSB7XHJcbiAgICAgIGNvbnN0IHRhZ01ldGFkYXRhID0gSlNPTi5wYXJzZShwb2kubWV0YWRhdGEpO1xyXG4gICAgICBpZiAodGFnTWV0YWRhdGEubm9ybWFsKSB7XHJcbiAgICAgICAgbWF0dGVydGFnRGF0YS5zZXROb3JtYWwodGFnTWV0YWRhdGEubm9ybWFsKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldE5vcm1hbCh7eDogMCwgeTogLTAuMTUsIHo6IDB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHBvaS5tYXR0ZXJwb3J0U3dlZXBJRCkge1xyXG4gICAgICBtYXR0ZXJ0YWdEYXRhLnNldFN3ZWVwSUQocG9pLm1hdHRlcnBvcnRTd2VlcElEKTtcclxuICAgIH1cclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0UG9pKHBvaSk7XHJcblxyXG4gICAgY29uc3QgY3JlYXRlZFRhZ0lEID0gYXdhaXQgdGhpcy5hZGRNYXR0ZXJ0YWdUb1ZpZXdlcihtYXR0ZXJ0YWdEYXRhKTtcclxuICAgIGlmIChjcmVhdGVkVGFnSUQgJiYgdGhpcy5zZGspIHtcclxuICAgICAgYXdhaXQgdGhpcy5zZXRUYWdJY29uQW5kT3BhY2l0eShjcmVhdGVkVGFnSUQsIG1hdHRlcnRhZ0RhdGEpO1xyXG4gICAgICBhd2FpdCB0aGlzLmluamVjdEh0bWxJblRhZyh0YWdUeXBlLCBvYmplY3QsIGNyZWF0ZWRUYWdJRCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbmplY3QgY3VzdG9tIEhUTUwgYXMgTWF0dGVydGFnIGNvbnRlbnRcclxuICAgKiBAcGFyYW0gdGFnVHlwZSBQb2lUeXBlXHJcbiAgICogQHBhcmFtIG9iamVjdCBUaWNrZXQsIEVxdWlwbWVudCwgRmVhdHVyZSBldGNcclxuICAgKiBAcGFyYW0gdGFnSUQgc3RyaW5nXHJcbiAgICovXHJcbiAgYXN5bmMgaW5qZWN0SHRtbEluVGFnKHRhZ1R5cGU6IFBvaVR5cGUsIG9iamVjdDogRGJPYmplY3RUeXBlLCB0YWdJRDogc3RyaW5nKSB7XHJcbiAgICBsZXQgaHRtbCA9IGF3YWl0IHRoaXMudGFnU2VydmljZS5nZXRIdG1sVG9JbmplY3QodGFnVHlwZSwgb2JqZWN0KTtcclxuICAgIGlmIChodG1sICE9PSAnJyAmJiB0aGlzLnNkaykge1xyXG4gICAgICBjb25zdCBzY3JpcHRUYWcgPSB0aGlzLnRhZ1NlcnZpY2UuZ2V0U2NyaXB0Rm9yVGFnKG9iamVjdCwgdGFnVHlwZSk7XHJcbiAgICAgIGh0bWwgKz0gYCR7c2NyaXB0VGFnfWA7XHJcbiAgICAgIC8vIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgdGhlIHNhbmRib3hcclxuICAgICAgY29uc3QgW3NhbmRib3hJZCwgbWVzc2VuZ2VyXSA9IGF3YWl0IHRoaXMuc2RrLlRhZy5yZWdpc3RlclNhbmRib3goaHRtbCk7XHJcblxyXG4gICAgICAvLyBkZXRhY2ggcHJldmlvdXMgc2FuZGJveCBmcm9tIGEgdGFnXHJcbiAgICAgIGxldCBhdHRhY2htZW50SUQgPSB0aGlzLnRhZ3NBdHRhY2htZW50c1t0YWdJRF07XHJcbiAgICAgIGlmIChhdHRhY2htZW50SUQpIHtcclxuICAgICAgICB0aGlzLnNkay5UYWcuZGV0YWNoKHRhZ0lELCBhdHRhY2htZW50SUQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudGFnc0F0dGFjaG1lbnRzW3RhZ0lEXSA9IHNhbmRib3hJZDtcclxuXHJcbiAgICAgIC8vIGF0dGFjaCB0aGUgc2FuZGJveCB0byBhIHRhZ1xyXG4gICAgICB0aGlzLnNkay5UYWcuYXR0YWNoKHRhZ0lELCBzYW5kYm94SWQpO1xyXG4gICAgICAvLyByZWNlaXZlIGRhdGEgZnJvbSB0aGUgc2FuZGJveFxyXG4gICAgICAvLyB0YWdNZXNzZW5nZXJPbiBhbGxvd3MgdG8gZ28gaGVyZSBvbmx5IG9uY2VcclxuICAgICAgaWYgKCF0aGlzLnRhZ01lc3Nlbmdlck9uKSB7XHJcbiAgICAgICAgdGhpcy50YWdNZXNzZW5nZXJPbiA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VDbGljayA9IChmZWF0dXJlSUQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJpbWFnZSBjbGljayBoYW5kbGVyXCIsIGZlYXR1cmVJRCk7XHJcbiAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25JbWFnZUNsaWNrKGZlYXR1cmVJRCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgYXVkaW9DbGljayA9IChhdWRpb0NvbW1lbnRJRDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImF1ZGlvIGNsaWNrIGhhbmRsZXJcIiwgYXVkaW9Db21tZW50SUQpO1xyXG4gICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uQXVkaW9DbGljayhhdWRpb0NvbW1lbnRJRCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCB2aWRlb0NsaWNrID0gKHVybDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25WaWRlb0NsaWNrKHVybCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBtZXNzZW5nZXIub24oXHJcbiAgICAgICAgICBUYWdBY3Rpb24uREVUQUlMX0NMSUNLLFxyXG4gICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uRGV0YWlsQ2xpY2suYmluZCh0aGlzLnRhZ1NlcnZpY2UpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBtZXNzZW5nZXIub24oXHJcbiAgICAgICAgICBUYWdBY3Rpb24uVElDS0VUX0NMSUNLLFxyXG4gICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uRGV0YWlsQ2xpY2suYmluZCh0aGlzLnRhZ1NlcnZpY2UpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBtZXNzZW5nZXIub24oVGFnQWN0aW9uLkFVRElPX0NMSUNLLCBhdWRpb0NsaWNrKTtcclxuICAgICAgICBtZXNzZW5nZXIub24oVGFnQWN0aW9uLklNQUdFX0NMSUNLLCBpbWFnZUNsaWNrKTtcclxuICAgICAgICBtZXNzZW5nZXIub24oVGFnQWN0aW9uLlZJREVPX0NMSUNLLCB2aWRlb0NsaWNrKTtcclxuICAgICAgICBtZXNzZW5nZXIub24oXHJcbiAgICAgICAgICBUYWdBY3Rpb24uRE9DX0NMSUNLLFxyXG4gICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uRG9jQ2xpY2suYmluZCh0aGlzLnRhZ1NlcnZpY2UpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBtZXNzZW5nZXIub24oXHJcbiAgICAgICAgICBUYWdBY3Rpb24uWU9VVFVCRV9DTElDSyxcclxuICAgICAgICAgIHRoaXMudGFnU2VydmljZS5vbkFjdGlvbllvdXR1YmVDbGljay5iaW5kKHRoaXMudGFnU2VydmljZSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBpZiBodG1sIGlzIGVtcHR5IChjYXNlIG9mIEVNQkVEIGNvbnRlbnQpLCB3ZSBlZGl0IGJpbGxib2FyZCBmb3IgRmVhdHVyZSBhbmQgYXR0YWNoIG5ldyBjb250ZW50XHJcbiAgICAgIGNvbnN0IHtjb21tZW50LCB0YWdEZXNjcmlwdGlvbn0gPVxyXG4gICAgICAgIHRoaXMudGFnU2VydmljZS5nZXRCaWxsYm9hcmRNZWRpYVRvRW1iZWQob2JqZWN0KTtcclxuICAgICAgaWYgKGNvbW1lbnQpIHtcclxuICAgICAgICAvLyByZWdpc3RlciB0aGUgbWVkaWFcclxuICAgICAgICBjb25zdCBbYXR0YWNobWVudElEXSA9IGF3YWl0IHRoaXMuc2RrLlRhZy5yZWdpc3RlckF0dGFjaG1lbnQoXHJcbiAgICAgICAgICBjb21tZW50LmV4dGVybmFsTGlua1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gYXR0YWNoXHJcbiAgICAgICAgdGhpcy5zZGsuVGFnLmF0dGFjaCh0YWdJRCwgYXR0YWNobWVudElEKTtcclxuICAgICAgICB0aGlzLnNkay5UYWcuZWRpdEJpbGxib2FyZCh0YWdJRCwge1xyXG4gICAgICAgICAgbGFiZWw6IG9iamVjdC50aXRsZSxcclxuICAgICAgICAgIGRlc2NyaXB0aW9uOiB0YWdEZXNjcmlwdGlvbixcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWN0aW9uX2RlbGV0ZV9hbGxfbWF0dGVydGFncygpIHtcclxuICAgIGF3YWl0IHRoaXMuc2RrLlRhZy5yZW1vdmUoLi4udGhpcy5tYXR0ZXJ0YWdJRHMpO1xyXG4gICAgdGhpcy5tYXR0ZXJ0YWdJRHMgPSBbXTtcclxuICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGVzIE1hdHRlcnRhZyBmcm9tIHZpc2l0IGFzc29jaWF0ZWQgd2l0aCBvYmplY3QgSUQgKHRpY2tldElELCBldGMpXHJcbiAgICogQHBhcmFtIGVsZW1lbnRJRCBzdHJpbmdcclxuICAgKi9cclxuICBhc3luYyBkZWxldGVNYXR0ZXJ0YWdGb3JPYmplY3QoZWxlbWVudElEOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG1hdHRlclRhZ0lEID0gdGhpcy5nZXRUYWdGcm9tRWxlbWVudElkKGVsZW1lbnRJRCkudGFnO1xyXG4gICAgaWYgKG1hdHRlclRhZ0lEKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZGsuVGFnLnJlbW92ZShtYXR0ZXJUYWdJRCk7XHJcbiAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZGVsZXRlKG1hdHRlclRhZ0lEKTtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubWF0dGVydGFnSURzLmluZGV4T2YobWF0dGVyVGFnSUQpO1xyXG4gICAgICAgIHRoaXMubWF0dGVydGFnSURzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBkZWxldGUgdGFnJywgbWF0dGVyVGFnSUQsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogdXVpZCBmcm9tIHRocmVlanNcclxuICAgKiBAcGFyYW0gdXVpZFxyXG4gICAqL1xyXG4gIGFzeW5jIGRlbGV0ZU9iamVjdDNEKHV1aWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5kaWN0aW9ubmFyeU9iamVjdHMzRC5nZXQodXVpZCkub2JqM0QudmlzaWJsZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0T2JqZWN0M0RNb2RlbE5vZGVGcm9tRGljdGlvbm5hcnkodXVpZDogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmRpY3Rpb25uYXJ5T2JqZWN0czNELmdldCh1dWlkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgIE1hdHRlcnRhZ0RhdGEgYW5kIHN0YXJ0IHJlcG9zaXRpb25pbmcgKGNyZWF0ZXMgdGVtcG9yYXJ5IG1hdHRlcnRhZyB0aGF0IGZvbGxvd3MgdGhlIGN1cnNvcilcclxuICAgKiBAcGFyYW0gcG9pVHlwZSBQb2lUeXBlXHJcbiAgICogQHBhcmFtIGVsZW1lbnQgVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUsIGV0Y1xyXG4gICAqL1xyXG4gIGFzeW5jIGFkZE1hdHRlcnRhZ1doZW5SZXBvc2l0aW9uaW5nKHBvaVR5cGU6IFBvaVR5cGUsIGVsZW1lbnQ6IERiT2JqZWN0VHlwZSkge1xyXG4gICAgY29uc3QgbWF0dGVydGFnRGF0YSA9IG5ldyBNYXR0ZXJ0YWdEYXRhKHBvaVR5cGUpO1xyXG4gICAgLy8gc2V0IHRoZSBjb29yZGluYXRlcyBvZiB0aGUgZXhpc3RpbmcgdGFnXHJcbiAgICBjb25zdCBbcG9pXSA9IGVsZW1lbnQucG9pcy5pdGVtcztcclxuICAgIGlmIChwb2kgJiYgcG9pLmNvb3JkaW5hdGUpIHtcclxuICAgICAgbWF0dGVydGFnRGF0YS5zZXRQb3NpdGlvbihKU09OLnBhcnNlKHBvaS5jb29yZGluYXRlKSk7XHJcbiAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0UG9pKHBvaSk7IC8vIHRvIGtlZXAgY3VzdG9tIHRhZ0ljb24gYW5kIG9wYWNpdHlcclxuICAgIH1cclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0U3dlZXBJRCh0aGlzLnBvc2VDYW1lcmEuc3dlZXApO1xyXG4gICAgbWF0dGVydGFnRGF0YS5zZXRSb3RhdGlvbih0aGlzLnBvc2VDYW1lcmEucm90YXRpb24pO1xyXG4gICAgbWF0dGVydGFnRGF0YS5zZXRPYmplY3QoZWxlbWVudCwgcG9pVHlwZSk7XHJcbiAgICB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93ID0gYXdhaXQgdGhpcy5hZGRNYXR0ZXJ0YWdUb1ZpZXdlcihtYXR0ZXJ0YWdEYXRhKTtcclxuICAgIHRoaXMuc2V0SW50ZXJhY3Rpb25Nb2RlKFZpZXdlckludGVyYWN0aW9ucy5QT1NJVElPTklORyk7XHJcbiAgICBhd2FpdCB0aGlzLmFkZEN1cnNvck1hdHRlcnRhZyhtYXR0ZXJ0YWdEYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgTWF0dGVydGFnRGF0YSBhbmQgbWF0dGVydGFnIHRoYXQgZm9sbG93cyB0aGUgY3Vyc29yIHdoZW4gY2hvb3NpbmcgcG9zaXRpb24gZm9yIGEgbmV3IG9iamVjdFxyXG4gICAqIEBwYXJhbSBwb2lUeXBlXHJcbiAgICovXHJcbiAgYXN5bmMgYWRkTWF0dGVydGFnV2hlbkFkZGluZyhwb2lUeXBlOiBQb2lUeXBlKSB7XHJcbiAgICBjb25zdCBtYXR0ZXJ0YWdEYXRhID0gbmV3IE1hdHRlcnRhZ0RhdGEocG9pVHlwZSk7XHJcbiAgICBtYXR0ZXJ0YWdEYXRhLnNldFN3ZWVwSUQodGhpcy5wb3NlQ2FtZXJhLnN3ZWVwKTtcclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0Um90YXRpb24odGhpcy5wb3NlQ2FtZXJhLnJvdGF0aW9uKTtcclxuICAgIHRoaXMuc2V0SW50ZXJhY3Rpb25Nb2RlKFZpZXdlckludGVyYWN0aW9ucy5BRERJTkcpO1xyXG4gICAgYXdhaXQgdGhpcy5hZGRDdXJzb3JNYXR0ZXJ0YWcobWF0dGVydGFnRGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYW5jZWxzIGZvbGxvd2luZyBvZiBjdXJzb3IgKG1lYW5pbmcgZGVsZXRpbmcgbGFzdCBNYXR0ZXJ0YWcpXHJcbiAgICovXHJcbiAgY2FuY2VsRm9sbG93aW5nQ3Vyc29yKCkge1xyXG4gICAgdGhpcy5kZWxldGVMYXN0TWF0dGVydGFnKCk7XHJcbiAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVCk7XHJcbiAgfVxyXG5cclxuICBzZXRMYXN0T2JqZWN0M0QobGFzdE9iamVjdDNEOiBUaHJlZUpTT2JqZWN0M0QpIHtcclxuICAgIHRoaXMubGFzdE9iamVjdDNEID0gbGFzdE9iamVjdDNEO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGFzdE9iamVjdDNEKCk6IFRocmVlSlNPYmplY3QzRCB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXN0T2JqZWN0M0Q7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQZXJmb3JtcyBjYWxsYmFjayBhZnRlciBtYXR0ZXJ0YWcgcG9zaXRpb24gd2FzIHZhbGlkYXRlZCAoY3JlYXRpb24gb2Ygb2JqZWN0IG9yIHJlcG9zaXRpb25pbmcpXHJcbiAgICogQHBhcmFtIG1vZGUgTWF0dGVydGFnQWN0aW9uTW9kZVxyXG4gICAqL1xyXG4gIGNhbGxiYWNrQWZ0ZXJNYXR0ZXJ0YWdWYWxpZGF0aW9uKG1vZGU6IE1hdHRlcnRhZ0FjdGlvbk1vZGUpIHtcclxuICAgIHRoaXMudmlzaWJpbGl0eVNlcnZpY2UuZGV0YWlsU2hvd2luZy5uZXh0KHRydWUpO1xyXG4gICAgY29uc3QgbGFzdFRhZyA9IHRoaXMuZ2V0TGFzdFRhZygpO1xyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5BRERfRVFVSVBNRU5UOlxyXG4gICAgICAgIHRoaXMuZ29Ub0xhc3RUYWcoKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vYWRkX2VxdWlwYF0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuQUREX1RJQ0tFVDpcclxuICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2B2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2FkZF90aWNrZXRgXSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5BRERfT0JKRUNUM0Q6XHJcbiAgICAgICAgdGhpcy5nb1RvTGFzdFRhZygpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9hZGRfb2JqZWN0M2RgXSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5BRERfREFUQTpcclxuICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgICAgIGlmICh0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoJz8nKSkge1xyXG4gICAgICAgICAgdXJsID0gdGhpcy5yb3V0ZXIudXJsLnN1YnN0cmluZygwLCB0aGlzLnJvdXRlci51cmwuaW5kZXhPZignPycpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdXJsID0gdGhpcy5yb3V0ZXIudXJsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYCR7dXJsfS9hZGRfZmVhdHVyZWBdKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLkFERF9ERVNLOlxyXG4gICAgICAgIHRoaXMuZ29Ub0xhc3RUYWcoKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vYWRkX2ZlYXR1cmVgXSwge1xyXG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHtpc0Rlc2s6IHRydWV9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuQUREX1JPT006XHJcbiAgICAgICAgdGhpcy5nb1RvTGFzdFRhZygpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9hZGRfcm9vbWBdKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLlBPU0lUSU9OX09CSkVDVDNEOlxyXG4gICAgICAgIGlmIChsYXN0VGFnKSB7XHJcbiAgICAgICAgICAvLyBETyBOb3RoaW5nIChyb3V0aW5nKSwganVzdFxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgIFtgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9vYmplY3QzZC8ke3RoaXMubGFzdE9iamVjdDNELmlkfWBdLFxyXG4gICAgICAgICAgICB7cXVlcnlQYXJhbXM6IHtwb3NpdGlvbmluZzogdHJ1ZX19XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLlBPU0lUSU9OX1RJQ0tFVDpcclxuICAgICAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICBgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9kZXRhaWwvJHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChsYXN0VGFnKS5lbGVtZW50SURcclxuICAgICAgICAgICAgICB9YCxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAge3F1ZXJ5UGFyYW1zOiB7cG9zaXRpb25pbmc6IHRydWV9fVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5QT1NJVElPTl9FUVVJUE1FTlQ6XHJcbiAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vZXF1aXAvJHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChsYXN0VGFnKS5lbGVtZW50SURcclxuICAgICAgICAgICAgICB9YCxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAge3F1ZXJ5UGFyYW1zOiB7cG9zaXRpb25pbmc6IHRydWV9fVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5QT1NJVElPTl9EQVRBOlxyXG4gICAgICAgIGlmIChsYXN0VGFnKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYCR7dGhpcy5yb3V0ZXIudXJsfWBdLCB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7cG9zaXRpb25pbmc6IHRydWV9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuUE9TSVRJT05fUk9PTTpcclxuICAgICAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Ake3RoaXMucm91dGVyLnVybH1gXSwge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtczoge3Bvc2l0aW9uaW5nOiB0cnVlfSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYCR7dGhpcy5yb3V0ZXIudXJsfWBdKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bGx5IHVwZGF0ZXMgZXhpc3RpbmcgTWF0dGVydGFnIGNvbnRlbnQgd2l0aCBkYXRhIG9mIG9iamVjdCAoVGlja2V0LCBFcXVpcG1lbnQsIERlc2spXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBvYmplY3QgVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUsIERlc2tcclxuICAgKiBAcGFyYW0gcG9pVHlwZSBQb2lUeXBlXHJcbiAgICogQHBhcmFtIHBvaSBQT0lcclxuICAgKi9cclxuICBhc3luYyBzZXRPYmplY3RBbmRQb2lJblRhZyhcclxuICAgIG1hdHRlcnRhZ0lEOiBzdHJpbmcsXHJcbiAgICBvYmplY3Q6IERiT2JqZWN0VHlwZSxcclxuICAgIHBvaVR5cGU6IFBvaVR5cGUsXHJcbiAgICBwb2k6IFBPSSB8IG51bGwgPSBudWxsXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobWF0dGVydGFnSUQpLnNldE9iamVjdChvYmplY3QsIHBvaVR5cGUpO1xyXG4gICAgaWYgKHBvaSkge1xyXG4gICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobWF0dGVydGFnSUQpLnNldFBvaShwb2kpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKS5lbGVtZW50SUQgPSBvYmplY3QuaWQ7XHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZU1hdHRlclRhZ0NvbnRlbnRGb3JUYWdJRChtYXR0ZXJ0YWdJRCwgb2JqZWN0LCBwb2lUeXBlKTtcclxuICAgICAgLy8gVE9ETzogZml4IHRoaXNcclxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVNYXR0ZXJUYWdQb3NJblNka1ZpZXdlcihcclxuICAgICAgICBtYXR0ZXJ0YWdJRCxcclxuICAgICAgICBvYmplY3QsXHJcbiAgICAgICAgcG9pVHlwZSxcclxuICAgICAgICBwb2lcclxuICAgICAgKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coYGVycm9yIGluIHNldE9iamVjdEFuZFBvaUluVGFnOiAke2V9YCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVNYXR0ZXJUYWdQb3NJblNka1ZpZXdlcihcclxuICAgIG1hdHRlcnRhZ0lEOiBzdHJpbmcsXHJcbiAgICBvYmplY3Q6IERiT2JqZWN0VHlwZSxcclxuICAgIHBvaVR5cGU6IFBvaVR5cGUsXHJcbiAgICBwb2k6IFBPSSB8IG51bGwgPSBudWxsXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBJbmRleFRvVXBkYXRlID0gb2JqZWN0LnBvaXMuaXRlbXMuZmluZEluZGV4KCh1KSA9PiB1LmlkID09PSBwb2kuaWQpO1xyXG4gICAgb2JqZWN0LnBvaXMuaXRlbXNbSW5kZXhUb1VwZGF0ZV0gPSBwb2k7XHJcbiAgICBjb25zdCB7eCwgeSwgen0gPSBKU09OLnBhcnNlKHBvaS5jb29yZGluYXRlKTtcclxuICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0ge1xyXG4gICAgICBhbmNob3JQb3NpdGlvbjoge1xyXG4gICAgICAgIHg6IHgsXHJcbiAgICAgICAgeTogeSxcclxuICAgICAgICB6OiB6LFxyXG4gICAgICB9LFxyXG4gICAgICBzdGVtVmVjdG9yOiB7XHJcbiAgICAgICAgLy8gbWFrZSB0aGUgVGFnIHN0aWNrIHN0cmFpZ2h0IHVwIGFuZCBtYWtlIGl0IDAuMzAgbWV0ZXJzICh+MSBmb290KSB0YWxsXHJcbiAgICAgICAgeDogMCxcclxuICAgICAgICB5OiAwLjMsXHJcbiAgICAgICAgejogMCxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLnNkay5NYXR0ZXJ0YWcuZWRpdFBvc2l0aW9uKG1hdHRlcnRhZ0lELCBuZXdQb3NpdGlvbik7XHJcbiAgICB0aGlzLnNkay5UYWcuZWRpdFBvc2l0aW9uKG1hdHRlcnRhZ0lELCBuZXdQb3NpdGlvbik7XHJcbiAgICB0aGlzLmRpY3Rpb25uYXJ5VGFnc1xyXG4gICAgICAuZ2V0KG1hdHRlcnRhZ0lEKVxyXG4gICAgICAuc2V0UG9zaXRpb24obmV3UG9zaXRpb24uYW5jaG9yUG9zaXRpb24pO1xyXG5cclxuICAgIGZvciAobGV0IHRhZ0lkIG9mIHRoaXMubWF0dGVydGFnSURzKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRUYWcgPSB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQodGFnSWQpO1xyXG4gICAgICBpZiAoIWN1cnJlbnRUYWcpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY3VycmVudFRhZy5lbGVtZW50SUQgPT09IG9iamVjdC5pZCAmJiB0YWdJZCAhPT0gbWF0dGVydGFnSUQpIHtcclxuICAgICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5kZWxldGUodGFnSWQpO1xyXG4gICAgICAgIHRoaXMuc2RrLlRhZy5yZW1vdmUodGFnSWQpO1xyXG4gICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5yZW1vdmUodGFnSWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIG1hdHRlclRhZ0lEIGFuZCBpdHMgc3dlZXAgZm9yIGFuIG9iamVjdCBJRCAodGlja2V0IElELCBldGMpXHJcbiAgICogQHBhcmFtIGVsZW1lbnRJRCBzdHJpbmdcclxuICAgKiBAcmV0dXJucyB7dGFnOiBzdHJpbmcgfCBudWxsLCBzd2VlcDogc3RyaW5nIHwgbnVsbH1cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0VGFnRnJvbUVsZW1lbnRJZChlbGVtZW50SUQ6IHN0cmluZyk6IHtcclxuICAgIHRhZzogc3RyaW5nIHwgbnVsbDtcclxuICAgIHN3ZWVwOiBzdHJpbmcgfCBudWxsO1xyXG4gIH0ge1xyXG4gICAgbGV0IHRhZ0lEID0gbnVsbDtcclxuICAgIGxldCBzd2VlcElEID0gbnVsbDtcclxuICAgIGZvciAobGV0IFttYXR0ZXJ0YWdJRCwgbWF0dGVydGFnRGF0YV0gb2YgdGhpcy5kaWN0aW9ubmFyeVRhZ3MpIHtcclxuICAgICAgaWYgKG1hdHRlcnRhZ0RhdGEuZWxlbWVudElEID09PSBlbGVtZW50SUQpIHtcclxuICAgICAgICB0YWdJRCA9IG1hdHRlcnRhZ0lEO1xyXG4gICAgICAgIGNvbnN0IHN3ZWVwID0gbWF0dGVydGFnRGF0YS5nZXRTd2VlcElEKCk7XHJcbiAgICAgICAgaWYgKHN3ZWVwICYmIHRoaXMuc3dlZXBzICYmIHRoaXMuc3dlZXBzLmluY2x1ZGVzKHN3ZWVwKSkge1xyXG4gICAgICAgICAgc3dlZXBJRCA9IHN3ZWVwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHt0YWc6IHRhZ0lELCBzd2VlcDogc3dlZXBJRH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGxhdGVzdCB0YWcgY3JlYXRlZCBpbiB0aGUgdmlzaXQgKHdoZW4gZm9sbG93aW5nIHRoZSBjdXJzb3IgdG8gcG9zaXRpb24pXHJcbiAgICogQHJldHVybnMgc3RyaW5nIG1hdHRlcnRhZ0lEXHJcbiAgICovXHJcbiAgZ2V0TGFzdFRhZygpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICh0aGlzLm1hdHRlcnRhZ1RvRm9sbG93KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMubWF0dGVydGFnSURzLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgID8gbnVsbFxyXG4gICAgICAgIDogdGhpcy5tYXR0ZXJ0YWdJRHNbdGhpcy5tYXR0ZXJ0YWdJRHMubGVuZ3RoIC0gMV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIE1hdHRlcnRhZ0RhdGEgZm9yIE1hdHRlcnRhZyAocmVwbGFjZXMgZ2V0VGFnRGF0YUZyb21JZClcclxuICAgKiBAcGFyYW0gbWF0dGVydGFnSURcclxuICAgKiBAcmV0dXJucyBNYXR0ZXJ0YWdEYXRhXHJcbiAgICovXHJcbiAgZ2V0TWF0dGVyVGFnRGF0YUZvck1hdHRlcnRhZyhtYXR0ZXJ0YWdJRDogc3RyaW5nKTogTWF0dGVydGFnRGF0YSB8IG51bGwge1xyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChtYXR0ZXJ0YWdJRCk7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgY29uc29sZS5sb2coJ2Nhbm5vdCByZXRyaWV2ZSBtYXR0ZXJ0YWdEYXRhIGZvciB0YWcnLCBtYXR0ZXJ0YWdJRCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vXHJcbiAgLy8gLS0tLS0tLS0tLSBWaWV3ZXIgcmVsYXRlZCAoc3dpdGNoIHZpZXdzLCBnbyB0bykgLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgYXN5bmMgYWN0aW9uX3Rvb2xib3hfZmxvb3JwbGFuKCkge1xyXG4gICAgaWYgKHRoaXMuaW5UcmFuc2l0aW9uTW9kZSB8fCB0aGlzLmluVHJhbnNpdGlvblN3ZWVwKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCd2aWV3ZXIgaXMgaW4gdHJhbnNpdGlvbiwgY2Fubm90IGdvIGZsb29ycGxhbicpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLnNkay5Nb2RlLm1vdmVUbygnbW9kZS5mbG9vcnBsYW4nKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coJ2Nhbm5vdCBnbyB0byBmbG9vcnBsYW4nLCBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFjdGlvbl90b29sYm94X2luc2lkZV92aWV3KCkge1xyXG4gICAgdGhpcy5zZGsuTW9kZS5tb3ZlVG8oJ21vZGUuaW5zaWRlJyk7XHJcbiAgfVxyXG5cclxuICBhY3Rpb25TaG93QWxsRmxvb3JzKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZGsuRmxvb3Iuc2hvd0FsbCgpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnY2Fubm90IHNob3cgYWxsIGZsb29ycycsIGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWN0aW9uX3Rvb2xib3hfZG9sbGhvdXNlKCkge1xyXG4gICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwibW9kZTogXCIsIHRoaXMuaW5UcmFuc2l0aW9uTW9kZSwgXCIgc3dlZXA6IFwiLCB0aGlzLmluVHJhbnNpdGlvblN3ZWVwKTtcclxuICAgICAgaWYgKHRoaXMuaW5UcmFuc2l0aW9uTW9kZSB8fCB0aGlzLmluVHJhbnNpdGlvblN3ZWVwKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3ZpZXdlciBpcyBpbiB0cmFuc2l0aW9uLCBjYW5ub3QgZ28gZG9sbGhvdXNlJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZGsuTW9kZS5tb3ZlVG8oJ21vZGUuZG9sbGhvdXNlJyk7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnY2Fubm90IGdvIHRvIGRvbGxob3VzZScsIGUpO1xyXG4gICAgICB9XHJcbiAgICB9LCAxMjAwKTtcclxuICB9XHJcblxyXG4gIGFjdGlvbl90b29sYm94X21lc3VyZSgpIHtcclxuICAgIGNvbnN0IG5ld1N0YXRlID0gIXRoaXMuaXNNZWFzdXJlTW9kZU9uO1xyXG4gICAgdGhpcy5zZGsuTWVhc3VyZW1lbnRzLnRvZ2dsZU1vZGUobmV3U3RhdGUpLnRoZW4oKCkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICBgTWVhc3VyZW1lbnQgbW9kZSBpcyBub3cgJHtuZXdTdGF0ZSA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCd9YFxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhY3Rpb25fdG9vbGJveF9jYW5jZWxfbWVzdXJlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNNZWFzdXJlTW9kZU9uKSB7XHJcbiAgICAgIHRoaXMuYWN0aW9uX3Rvb2xib3hfbWVzdXJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBhY3Rpb25fZ29fdG9fZmxvb3IoXHJcbiAgICBmbG9vck5hbWU6IHN0cmluZyxcclxuICAgIG1hdHRlcnBvcnRGbG9vclNlcXVlbmNlOiBudW1iZXIgPSBudWxsXHJcbiAgKSB7XHJcbiAgICBpZiAoIXRoaXMuZmxvb3JzKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdGbG9vciBhcmUgbm90IGxvYWRlZCB5ZXQnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5mbG9vcnMpO1xyXG4gICAgLy8gbG9vayB1cCBmb3Igc2VxdWVuY2UgbnVtYmVyICh0aGUgc2FmZXN0IG1ldGhvZClcclxuICAgIGxldCBmbG9vck1hdHRlcnBvcnQgPSB0aGlzLmZsb29ycy5maW5kKFxyXG4gICAgICAoZmxvb3IpID0+IGZsb29yLnNlcXVlbmNlID09PSBtYXR0ZXJwb3J0Rmxvb3JTZXF1ZW5jZVxyXG4gICAgKTtcclxuICAgIGlmICghZmxvb3JNYXR0ZXJwb3J0KSB7XHJcbiAgICAgIGZsb29yTWF0dGVycG9ydCA9IHRoaXMuZmxvb3JzLmZpbmQoXHJcbiAgICAgICAgKGZsb29yKSA9PiBmbG9vck5hbWUuaW5jbHVkZXMoZmxvb3IubmFtZSkgJiYgZmxvb3IubmFtZSAhPSAnJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKCFmbG9vck1hdHRlcnBvcnQpIHtcclxuICAgICAgZmxvb3JNYXR0ZXJwb3J0ID0gdGhpcy5mbG9vcnMuZmluZCgoZmxvb3IpID0+XHJcbiAgICAgICAgZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLmlkKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coZmxvb3JNYXR0ZXJwb3J0KVxyXG4gICAgaWYgKGZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICBsZXQgcmV0cnkgPSB0cnVlO1xyXG4gICAgICB3aGlsZSAocmV0cnkpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgZmxvb3JJbmRleCA9IGF3YWl0IHRoaXMuc2RrLkZsb29yLm1vdmVUbyhcclxuICAgICAgICAgICAgZmxvb3JNYXR0ZXJwb3J0LnNlcXVlbmNlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJtb3ZlZCB0byBmbG9vckluZGV4XCIsIGZsb29ySW5kZXgpO1xyXG4gICAgICAgICAgcmV0cnkgPSBmYWxzZTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBtb3ZlIHRvIEZsb29yJywgZXJyb3IpO1xyXG4gICAgICAgICAgYXdhaXQgd2FpdCgxMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCdObyBtYXR0ZXJwb3J0IGZsb29yIGZvdW5kIHRvIG1vdmUgdG8nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGFjdGlvbl9nb190b19zd2VlcChcclxuICAgIHN3ZWVwOiBzdHJpbmcsXHJcbiAgICByb3RhdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9ID0gbnVsbFxyXG4gICkge1xyXG4gICAgaWYgKHRoaXMuZm9yYmlkZGVuU3dlZXBzLmluY2x1ZGVzKHN3ZWVwKSkge1xyXG4gICAgICBjb25zb2xlLmxvZygndXNlciBpcyBub3QgYWxsb3dlZCB0byBnbyB0byB0aGlzIHN3ZWVwJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKFwiZ29pbmcgdG8gc3dlZXBcIiwgc3dlZXAsIFwid2l0aCByb3RhdGlvbjpcIiwgcm90YXRpb24pO1xyXG4gICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmluVHJhbnNpdGlvbk1vZGUgfHwgdGhpcy5pblRyYW5zaXRpb25Td2VlcCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYW5ub3QgZ28gdG8gc3dlZXAsIGluIHRyYW5zaXRpb24nKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmluVHJhbnNpdGlvblN3ZWVwID0gdHJ1ZTtcclxuICAgICAgICBhd2FpdCB0aGlzLnNkay5Td2VlcC5tb3ZlVG8oc3dlZXAsIHtcclxuICAgICAgICAgIHRyYW5zaXRpb246ICd0cmFuc2l0aW9uLmluc3RhbnQnLFxyXG4gICAgICAgICAgdHJhbnNpdGlvblRpbWU6IDE1MDAsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Td2VlcCA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYW5ub3QgbW92ZSB0byBzd2VlcCcsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocm90YXRpb24pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnNkay5DYW1lcmEuc2V0Um90YXRpb24ocm90YXRpb24sIHtzcGVlZDogMTAwfSk7IC8vIHNwZWVkIGlzIGRlZ3JlZXMgcGVyIHNlY29uZFxyXG4gICAgICB9XHJcbiAgICB9LCAxMDAwKTtcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnRTd2VlcCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICh0aGlzLnBvc2VDYW1lcmEpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucG9zZUNhbWVyYS5zd2VlcDtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VycmVudENhbWVyYVBvc2l0aW9uKCk6IHtcclxuICAgIHJvdGF0aW9uOiBhbnk7XHJcbiAgICBwb3NpdGlvbjogYW55O1xyXG4gICAgc3dlZXA6IGFueTtcclxuICB9IHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy5wb3NlQ2FtZXJhKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBvc2VDYW1lcmE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHNldEludGVyYWN0aW9uTW9kZShpbnRlcmFjdGlvbk1vZGU6IG51bWJlcikge1xyXG4gICAgdGhpcy5pbnRlcmFjdGlvbk1vZGUgPSBpbnRlcmFjdGlvbk1vZGU7XHJcbiAgfVxyXG5cclxuICBnZXRJbnRlcmFjdGlvbk1vZGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbnRlcmFjdGlvbk1vZGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciBhbGwgdmFyaWFibGVzLCBkZWxldGVzIGFsbCB0YWdzICh3aGVuIHZpZXdlciBpcyByZW1vdmVyIG9yIG1vZGVsIGNoYW5nZWQ9cmVsb2FkIG5lZWRlZClcclxuICAgKi9cclxuICBhc3luYyBjbGVhckFsbCgpIHtcclxuICAgIGNvbnNvbGUubG9nKCdyZW1vdmluZyB2aWV3ZXInKTtcclxuICAgIHRoaXMuYWN0aW9uX2RlbGV0ZV9hbGxfbWF0dGVydGFncygpO1xyXG4gICAgdGhpcy5mbG9vcnMgPSBudWxsO1xyXG4gICAgdGhpcy5zd2VlcHMgPSBudWxsO1xyXG4gICAgdGhpcy5zZGsgPSBudWxsO1xyXG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVyUG9pbnRlcik7XHJcbiAgICB0aGlzLmZvcmJpZGRlblN3ZWVwcyA9IFtdO1xyXG4gICAgdGhpcy50YWdNZXNzZW5nZXJPbiA9IGZhbHNlO1xyXG4gICAgLy8gY2FuY2VsIHN1YnNjcmlwdGlvbnNcclxuICAgIHRoaXMucG9pbnRlckJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFxyXG4gICAgICAnY2xpY2snLFxyXG4gICAgICB0aGlzLnBvaW50ZXJMZWZ0Q2xpY2tIYW5kbGVyXHJcbiAgICApO1xyXG4gICAgdGhpcy5wb2ludGVyQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICdjb250ZXh0bWVudScsXHJcbiAgICAgIHRoaXMucG9pbnRlclJpZ2h0Q2xpY2tIYW5kbGVyXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFRPRE86IG9ubHkgRm9yIEFkbWluc1xyXG4gICAgaWYgKHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24pIHtcclxuICAgICAgdGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICdhdXhjbGljaycsXHJcbiAgICAgICAgdGhpcy5wb2ludGVyTWlkZGxlQ2xpY2tIYW5kbGVyXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvLyBUT0RPOiBvbmx5IGZvciBkZXYhXHJcbiAgICBpZiAoZG9jdW1lbnQubG9jYXRpb24uaHJlZi5pbmRleE9mKCctZGV2JykgIT09IC0xKSB7XHJcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbEN1cnNvclBvaW50ZXJQb3NpdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW1vdmVGb3JiaWRkZW5Td2VlcHMoZm9yYmlkZGVuU3dlZXBzOiBzdHJpbmdbXSkge1xyXG4gICAgdGhpcy5mb3JiaWRkZW5Td2VlcHMgPSBbLi4uZm9yYmlkZGVuU3dlZXBzXTtcclxuICAgIGxldCByZW1vdmVkID0gMDtcclxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICBmb3JiaWRkZW5Td2VlcHMubWFwKGFzeW5jIChzd2VlcCkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnNkay5Td2VlcC5kaXNhYmxlKHN3ZWVwKTtcclxuICAgICAgICAgIHJlbW92ZWQgKz0gMTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICBjb25zb2xlLmxvZygncmVtb3ZlZCBzd2VlcHM6JywgcmVtb3ZlZCk7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0gM0Qgb2JqZWN0cyAoU0RLIEJ1bmRsZSBvbmx5KSAtLS0tLS0tLS0tXHJcbiAgLy9cclxuICBhc3luYyBpbml0M0RPYmplY3RWaWV3ZXIoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcclxuICAgICAgdmFyIFtzY2VuZU9iamVjdF0gPSBhd2FpdCB0aGlzLnNkay5TY2VuZS5jcmVhdGVPYmplY3RzKDEpO1xyXG5cclxuICAgICAgdmFyIG5vZGUgPSBzY2VuZU9iamVjdC5hZGROb2RlKCk7XHJcblxyXG4gICAgICAvLyBUT0RPIGNoYW5nZSB0aGlzIPCfpK5cclxuICAgICAgbm9kZS5hZGRDb21wb25lbnQoJ21wLmxpZ2h0cycpO1xyXG4gICAgICBub2RlLmFkZENvbXBvbmVudCgnbXAubGlnaHRzJyk7XHJcbiAgICAgIG5vZGUuYWRkQ29tcG9uZW50KCdtcC5saWdodHMnKTtcclxuICAgICAgbm9kZS5hZGRDb21wb25lbnQoJ21wLmxpZ2h0cycpO1xyXG4gICAgICBub2RlLnN0YXJ0KCk7XHJcblxyXG4gICAgICBjb25zdCBub2RlQ29udHJvbCA9IHNjZW5lT2JqZWN0LmFkZE5vZGUoKTtcclxuICAgICAgdGhpcy5vYmplY3RDb250cm9sID0gbm9kZUNvbnRyb2wuYWRkQ29tcG9uZW50KCdtcC50cmFuc2Zvcm1Db250cm9scycpO1xyXG4gICAgICBub2RlQ29udHJvbC5zdGFydCgpO1xyXG5cclxuICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGQzRE9iamVjdChcclxuICAgIG9iajogSU9iamVjdDNELFxyXG4gICAgbW9kZT86ICd0cmFuc2xhdGUnIHwgJ3JvdGF0ZSdcclxuICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIGNvbnN0IFtzY2VuZU9iamVjdF0gPSBhd2FpdCB0aGlzLnNkay5TY2VuZS5jcmVhdGVPYmplY3RzKDEpO1xyXG5cclxuICAgICAgY29uc3QgbW9kZWxOb2RlID0gc2NlbmVPYmplY3QuYWRkTm9kZSgpO1xyXG4gICAgICBjb25zdCBpbml0aWFsID0ge1xyXG4gICAgICAgIHVybDogYC9hc3NldHMvM0RvYmplY3RzL29iamVjdHMvJHtvYmoub2JqZWN0fSR7XHJcbiAgICAgICAgICBvYmouZm9ybWF0LmluZGV4T2YoJy4nKSA9PT0gLTEgPyAnLicgKyBvYmouZm9ybWF0IDogb2JqLmZvcm1hdFxyXG4gICAgICAgIH1gLFxyXG4gICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgY29sbGlkZXJFbmFibGVkOiB0cnVlXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBzd2l0Y2ggKG9iai5mb3JtYXQpIHtcclxuICAgICAgICBjYXNlICcub2JqJzpcclxuICAgICAgICBjYXNlICdvYmonOlxyXG4gICAgICAgICAgbW9kZWxOb2RlLmFkZENvbXBvbmVudCgnbXAub2JqTG9hZGVyJywgaW5pdGlhbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICcuZmJ4JzpcclxuICAgICAgICBjYXNlICdmYngnOlxyXG4gICAgICAgICAgbW9kZWxOb2RlLmFkZENvbXBvbmVudCgnbXAuZmJ4TG9hZGVyJywgaW5pdGlhbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICcuZ2x0Zic6XHJcbiAgICAgICAgY2FzZSAnZ2x0Zic6XHJcbiAgICAgICAgICBtb2RlbE5vZGUuYWRkQ29tcG9uZW50KCdtcC5nbHRmTG9hZGVyJywgaW5pdGlhbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICcuZ2xiJzpcclxuICAgICAgICBjYXNlICdnbGInOlxyXG4gICAgICAgICAgbW9kZWxOb2RlLmFkZENvbXBvbmVudCgnbXAuZ2x0ZkxvYWRlcicsIGluaXRpYWwpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnLmRhZSc6XHJcbiAgICAgICAgY2FzZSAnZGFlJzpcclxuICAgICAgICAgIG1vZGVsTm9kZS5hZGRDb21wb25lbnQoJ21wLmRhZUxvYWRlcicsIGluaXRpYWwpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnRm9ybWF0IG5vdCBzdXBwb3J0ZWQnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBVc2UgMyA/ISBBbWJpZW50IGxpZ2h0aW5nc1xyXG4gICAgICBpZiAodGhpcy5ub0xpZ2h0Rm9yT2JqZWN0cykge1xyXG4gICAgICAgIGNvbnN0IGxpZ2h0c05vZGUgPSBzY2VuZU9iamVjdC5hZGROb2RlKCk7XHJcbiAgICAgICAgbGlnaHRzTm9kZS5hZGRDb21wb25lbnQoJ21wLmFtYmllbnRMaWdodCcsIHtcclxuICAgICAgICAgIGludGVuc2l0eTogMSxcclxuICAgICAgICAgIGNvbG9yOiB7cjogMS4wLCBnOiAxLjAsIGI6IDEuMH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5ub0xpZ2h0Rm9yT2JqZWN0cyA9IGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBpZiAob2JqLm1vZGUpIHtcclxuICAgICAgLy8gICB0aGlzLnNldDNET2JqZWN0TW9kZShub2RlLCBvYmoubW9kZSk7XHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIG1vZGVsTm9kZS5vYmozRC5wb3NpdGlvbi5zZXQoXHJcbiAgICAgICAgb2JqLnBvc2l0aW9uLngsXHJcbiAgICAgICAgb2JqLnBvc2l0aW9uLnksXHJcbiAgICAgICAgb2JqLnBvc2l0aW9uLnpcclxuICAgICAgKTtcclxuXHJcbiAgICAgIG1vZGVsTm9kZS5vYmozRC5yb3RhdGlvbi5zZXQoXHJcbiAgICAgICAgb2JqLnJvdGF0aW9uLngsXHJcbiAgICAgICAgb2JqLnJvdGF0aW9uLnksXHJcbiAgICAgICAgb2JqLnJvdGF0aW9uLnpcclxuICAgICAgKTtcclxuICAgICAgbW9kZWxOb2RlLm9iajNELnNjYWxlLnNldChvYmouc2NhbGUueCwgb2JqLnNjYWxlLnksIG9iai5zY2FsZS56KTtcclxuXHJcbiAgICAgIC8vIEJ5IGRlZmF1dCwgZHVyaW5nIGNyZWF0aW9uLCBvYmplY3QgaGFzIHRyYW5zbGF0aW9uIGdpem1vXHJcbiAgICAgIC8vID0+IFVzZXIgaGFzIHRvIGNsaWNrIG9uIGxhdGVyYWwgcGFuZWwsIGFuZCBzYXZlIGl0cyBwb3NpdGlvbiBhZnRlciBwbGF5aW5nIHdpdGggaXQhXHJcbiAgICAgIGlmIChtb2RlKSB7XHJcbiAgICAgICAgdGhpcy5hdHRhY2hHaXptb0NvbnRyb2xUbzNET2JqZWN0KFxyXG4gICAgICAgICAgbW9kZWxOb2RlLFxyXG4gICAgICAgICAgc2NlbmVPYmplY3QsXHJcbiAgICAgICAgICBtb2RlLFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICkuY2F0Y2goKGUpID0+IGNvbnNvbGUubG9nKGUpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMubGFzdE9iamVjdDNEICYmIHR5cGVvZiB0aGlzLmxhc3RPYmplY3QzRC5pZCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAvLyBwcm9tcHQgVGhyZWVKUyBVVUlEIHRvIG1hdGNoIG91ciBsYXN0IGdlbmVyYXRlZCBvYmplY3QgaWYgbmV3IChub3QgZnJvbSBEYilcclxuICAgICAgICBtb2RlbE5vZGUub2JqM0QudXVpZCA9IHRoaXMubGFzdE9iamVjdDNELmlkO1xyXG4gICAgICB9IGVsc2UgaWYgKG9iai5pZCkge1xyXG4gICAgICAgIG1vZGVsTm9kZS5vYmozRC51dWlkID0gb2JqLmlkO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubGFzdE9iamVjdDNEID0gbW9kZWxOb2RlLm9iajNEO1xyXG5cclxuICAgICAgLy8gU3RvcmUgdGhpcyBpbiBtZW1vcnkgTWFwIGRpY3Rpb25uYXJ5XHJcbiAgICAgIHRoaXMuZGljdGlvbm5hcnlPYmplY3RzM0Quc2V0KG1vZGVsTm9kZS5vYmozRC51dWlkLCBtb2RlbE5vZGUpO1xyXG4gICAgICB0aGlzLmRpY3Rpb25uYXJ5U2NlbmVPYmplY3RzM0Quc2V0KG1vZGVsTm9kZS5vYmozRC51dWlkLCBzY2VuZU9iamVjdCk7XHJcblxyXG4gICAgICBzY2VuZU9iamVjdC5zdGFydCgpO1xyXG4gICAgICByZXNvbHZlKHRoaXMubGFzdE9iamVjdDNEKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2NlbmVOb2RlRnJvbU9iamVjdDNESWQodXVpZDogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmRpY3Rpb25uYXJ5U2NlbmVPYmplY3RzM0QuZ2V0KHV1aWQpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYXR0YWNoR2l6bW9Db250cm9sVG8zRE9iamVjdChcclxuICAgIG1vZGVsTm9kZTogYW55LFxyXG4gICAgc2NlbmVPYmplY3Q6IGFueSxcclxuICAgIG1vZGU6ICd0cmFuc2xhdGUnIHwgJ3JvdGF0ZScgfCAnc2NhbGUnLFxyXG4gICAgdmlzaWJsZTogYm9vbGVhblxyXG4gICk6IFByb21pc2U8YW55PiB7XHJcbiAgICAvLyBDcmVhdGUgYSBzY2VuZSBub2RlIHdpdGggYSB0cmFuc2Zvcm0gY29udHJvbCBjb21wb25lbnQuXHJcbiAgICBsZXQgbm9kZSA9IG51bGw7XHJcbiAgICBub2RlID0gc2NlbmVPYmplY3QuYWRkTm9kZSgpO1xyXG4gICAgaWYgKCFub2RlKSB7XHJcbiAgICAgIGNvbnN0IFtzY2VuZU9iamVjdF0gPSBhd2FpdCB0aGlzLnNkay5TY2VuZS5jcmVhdGVPYmplY3RzKDEpO1xyXG4gICAgICBub2RlID0gc2NlbmVPYmplY3QuYWRkTm9kZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG15Q29udHJvbCA9IG5vZGUuYWRkQ29tcG9uZW50KCdtcC50cmFuc2Zvcm1Db250cm9scycpO1xyXG4gICAgbm9kZS5zdGFydCgpO1xyXG4gICAgLy9cclxuICAgIC8vIC8vIE1ha2UgdGhlIHRyYW5zZm9ybSBjb250cm9sIHZpc2libGUgc28gdGhhdCB0aGUgdXNlciBjYW4gbWFuaXB1bGF0ZSB0aGUgY29udHJvbCBzZWxlY3Rpb24uXHJcbiAgICBteUNvbnRyb2wuaW5wdXRzLnZpc2libGUgPSB2aXNpYmxlO1xyXG4gICAgLy9cclxuICAgIC8vIC8vIEF0dGFjaCB0aGUgbW9kZWwgdG8gdGhlIHRyYW5zZm9ybSBjb250cm9sXHJcbiAgICBteUNvbnRyb2wuaW5wdXRzLnNlbGVjdGlvbiA9IG1vZGVsTm9kZTtcclxuICAgIC8vXHJcbiAgICAvLyAvLyBzZXQgJ3RyYW5zbGF0ZScgbW9kZSB0byBwb3NpdGlvbiB0aGUgc2VsZWN0aW9uLlxyXG4gICAgbXlDb250cm9sLmlucHV0cy5tb2RlID0gbW9kZTtcclxuICAgIG1vZGVsTm9kZS5vYmozRC5jb250cm9scyA9IG15Q29udHJvbDsgLy8gc3RvcmUgZ2l6bW9DdHJsIGluc2lkZSBvYmplY3RcclxuXHJcbiAgICBpZiAoIXRoaXMubGFzdE9iamVjdDNEIHx8ICF0aGlzLmxhc3RPYmplY3QzRC5jb250cm9scykge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIG1vZGVsTm9kZS5vYmozRC51dWlkID0gdGhpcy5sYXN0T2JqZWN0M0QudXVpZCB8fCB0aGlzLmxhc3RPYmplY3QzRC5pZDtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBpZCBvYmogaW4gU2NlbmUgd2FzIG5vdCBhc3NpZ25lZCB0byBpZCBmcm9tIERCIHNpbmNlYCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5sYXN0T2JqZWN0M0QgPSBtb2RlbE5vZGUub2JqM0Q7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1vZGVsTm9kZTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUdpem1vRnJvbUxhc3RPYmplY3QoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxhc3RPYmplY3QzRC5jb250cm9scy50cmFuc2Zvcm1Db250cm9scy52aXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmxhc3RPYmplY3QzRC5jb250cm9scy50cmFuc2Zvcm1Db250cm9scy5kaXNwb3NlKCk7XHJcbiAgICB0aGlzLmxhc3RPYmplY3QzRC5jb250cm9scyA9IG51bGw7XHJcbiAgfVxyXG5cclxuICAvLyBwdWJsaWMgc2V0M0RPYmplY3RNb2RlKG1vZGVsTm9kZTogYW55LCBtb2RlPzogc3RyaW5nKSB7XHJcbiAgLy8gICBpZiAobW9kZSkge1xyXG4gIC8vICAgICB0aGlzLm9iamVjdENvbnRyb2wuaW5wdXRzLnNlbGVjdGlvbiA9IG1vZGVsTm9kZTtcclxuICAvLyAgICAgdGhpcy5vYmplY3RDb250cm9sLmlucHV0cy52aXNpYmxlID0gdHJ1ZTtcclxuICAvLyAgICAgdGhpcy5vYmplY3RDb250cm9sLmlucHV0cy5tb2RlID0gbW9kZTtcclxuICAvL1xyXG4gIC8vICAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgLy8gICAgICAgY29uc29sZS5sb2cobW9kZWxOb2RlKTtcclxuICAvLyAgICAgfSwgNTAwMCk7XHJcbiAgLy9cclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHRoaXMub2JqZWN0Q29udHJvbC5pbnB1dHMudmlzaWJsZSA9IHRydWU7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG59XHJcbiJdfQ==