@senior-gestao-relacionamento/angular-components 2.1.0-master-7706e113 → 2.1.0-master-5b5e43f1

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.
@@ -291,6 +291,19 @@ export class ScheduleFormComponent {
291
291
  }
292
292
  onRecurrenceDisabled() {
293
293
  this.recurrenceDescription = '';
294
+ if (this.scheduleForm) {
295
+ this.scheduleForm.patchValue({
296
+ endDate: null,
297
+ recurrence: null,
298
+ recurrenceInterval: null,
299
+ weekDays: null,
300
+ repeatWhen: null,
301
+ repeatWhenDay: null,
302
+ repeatWhenOrdinalWeekDay: null,
303
+ repeatWhenWeekMonth: null,
304
+ repeatWhenMonth: null
305
+ });
306
+ }
294
307
  }
295
308
  initForm() {
296
309
  const now = new Date();
@@ -733,4 +746,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
733
746
  type: ViewChild,
734
747
  args: ['detailForm']
735
748
  }] } });
736
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGUtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlL3NjaGVkdWxlLWZvcm0vc2NoZWR1bGUtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlL3NjaGVkdWxlLWZvcm0vc2NoZWR1bGUtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8s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LGlCQUFpQixjQUNmLElBQUksV0FDUDt3QkFDUCxZQUFZLEVBQUUsV0FBVyxFQUFFLG1CQUFtQjt3QkFDOUMsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsY0FBYzt3QkFDeEQsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGFBQWE7d0JBQzlELGFBQWEsRUFBRSxXQUFXLEVBQUUsa0JBQWtCO3dCQUM5QyxhQUFhLEVBQUUsb0JBQW9CO3FCQUNwQzswTkFLUSxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLEtBQUs7c0JBQWQsTUFBTTtnQkFFa0IsbUJBQW1CO3NCQUEzQyxTQUFTO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YmplY3QsIGRlYm91bmNlVGltZSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQgeyBEaWFsb2dNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RpYWxvZyc7XG5pbXBvcnQgeyBEcmF3ZXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RyYXdlcic7XG5pbXBvcnQgeyBEcm9wZG93bk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHJvcGRvd24nO1xuaW1wb3J0IHsgSW5wdXROdW1iZXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL2lucHV0bnVtYmVyJztcbmltcG9ydCB7IE11bHRpU2VsZWN0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9tdWx0aXNlbGVjdCc7XG5pbXBvcnQgeyBUYWdNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhZyc7XG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcbmltcG9ydCB7IERpdmlkZXJNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RpdmlkZXInO1xuaW1wb3J0IHsgVGFibGVNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcbmltcG9ydCB7IEF1dG9Db21wbGV0ZU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IER5bmFtaWNGb3JtQ29tcG9uZW50LCBEeW5hbWljRm9ybUZpZWxkQ29uZmlnLCBUcmFuc2xhdGVQaXBlLCBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvY29tcG9uZW50cy1haSc7XG5pbXBvcnQgeyBDdXJyZW50Q29sbGFib3JhdG9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2N1cnJlbnQtY29sbGFib3JhdG9yL2N1cnJlbnQtY29sbGFib3JhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NoZWR1bGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2NoZWR1bGUuc2VydmljZSc7XG5pbXBvcnQgeyBTY2hlZHVsZVR5cGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2NoZWR1bGUtdHlwZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNjaGVkdWxlUGFydGljaXBhbnQgfSBmcm9tICcuLi9lbnRpdGllcy9zY2hlZHVsZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUGFydGljaXBhbnRMb29rdXAsIFBhcnRpY2lwYW50T3JpZ2luIH0gZnJvbSAnLi4vZW50aXRpZXMvcGFydGljaXBhbnQtbG9va3VwLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTY2hlZHVsZVR5cGUgfSBmcm9tICcuLi9lbnRpdGllcy9zY2hlZHVsZS10eXBlLmludGVyZmFjZSc7XG5pbXBvcnQge1xuICBTY2hlZHVsZVByaW9yaXR5LCBTY2hlZHVsZVJlY3VycmVuY2UsIFdlZWtEYXksIFJlcGVhdFdoZW4sXG4gIE9yZGluYWxXZWVrRGF5LCBNb250aFxufSBmcm9tICcuLi9lbnVtcy9zY2hlZHVsZS5lbnVtcyc7XG5pbXBvcnQge1xuICBmb3JtYXREYXRlVG9TdHJpbmcsIHRvRGF0ZVN0cmluZywgdG9UaW1lU3RyaW5nLFxuICBnZXREZWZhdWx0U3RhcnRUaW1lLCBnZXREZWZhdWx0RW5kVGltZSxcbiAgZ2V0Q3VycmVudFdlZWtEYXksIGdldEN1cnJlbnRNb250aCwgZ2V0T3JkaW5hbEZvckRhdGVcbn0gZnJvbSAnLi4vaGVscGVycy9zY2hlZHVsZS1kYXRlLmhlbHBlcnMnO1xuaW1wb3J0IHtcbiAgZ2V0T3JpZ2luTGFiZWwgYXMgX2dldE9yaWdpbkxhYmVsLCBnZXRPcmlnaW5JY29uIGFzIF9nZXRPcmlnaW5JY29uLFxuICBnZXRQYXJ0aWNpcGFudE5hbWUgYXMgX2dldFBhcnRpY2lwYW50TmFtZSwgZ2V0UGFydGljaXBhbnRUeXBlIGFzIF9nZXRQYXJ0aWNpcGFudFR5cGUsXG4gIGdldFBhcnRpY2lwYW50VHlwZUljb24gYXMgX2dldFBhcnRpY2lwYW50VHlwZUljb24sIGdldFByaW9yaXR5U2V2ZXJpdHkgYXMgX2dldFByaW9yaXR5U2V2ZXJpdHksXG4gIGdldFByaW9yaXR5TGFiZWwgYXMgX2dldFByaW9yaXR5TGFiZWwsIGdldENvbmZpcm1hdGlvblNldmVyaXR5IGFzIF9nZXRDb25maXJtYXRpb25TZXZlcml0eSxcbiAgZ2V0Q29uZmlybWF0aW9uTGFiZWwgYXMgX2dldENvbmZpcm1hdGlvbkxhYmVsLFxuICBQcmlvcml0eVNldmVyaXR5LCBDb25maXJtYXRpb25TZXZlcml0eVxufSBmcm9tICcuLi9oZWxwZXJzL3NjaGVkdWxlLWRpc3BsYXkuaGVscGVycyc7XG5cbi8qKiBTMTA5OiBFeHRyYWN0IG1hZ2ljIG51bWJlcnMgdG8gbmFtZWQgY29uc3RhbnRzICovXG5jb25zdCBNQVhfTkFNRV9MRU5HVEggPSAyNTU7XG5jb25zdCBERUJPVU5DRV9NUyA9IDUwMDtcbmNvbnN0IFBBUlRJQ0lQQU5UX1NFQVJDSF9MSU1JVCA9IDU7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Mtc2NoZWR1bGUtZm9ybScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSwgRGlhbG9nTW9kdWxlLCBEcmF3ZXJNb2R1bGUsIERyb3Bkb3duTW9kdWxlLFxuICAgIElucHV0TnVtYmVyTW9kdWxlLCBNdWx0aVNlbGVjdE1vZHVsZSwgVGFnTW9kdWxlLCBUb29sdGlwTW9kdWxlLFxuICAgIERpdmlkZXJNb2R1bGUsIFRhYmxlTW9kdWxlLCBBdXRvQ29tcGxldGVNb2R1bGUsXG4gICAgVHJhbnNsYXRlUGlwZSwgRHluYW1pY0Zvcm1Db21wb25lbnRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3NjaGVkdWxlLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vc2NoZWR1bGUtZm9ybS5jb21wb25lbnQuc2Nzcydcbn0pXG5leHBvcnQgY2xhc3MgU2NoZWR1bGVGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgdmlzaWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBzZWxlY3RlZERhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBAT3V0cHV0KCkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIHNhdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgQFZpZXdDaGlsZCgnZGV0YWlsRm9ybScpIGRldGFpbEZvcm1Db21wb25lbnQhOiBEeW5hbWljRm9ybUNvbXBvbmVudDtcblxuICBzY2hlZHVsZURldGFpbEZpZWxkczogRHluYW1pY0Zvcm1GaWVsZENvbmZpZ1tdID0gW107XG4gIGVudGl0eURhdGFGb3JGb3JtOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgPSBudWxsO1xuICBzY2hlZHVsZUZvcm0hOiBGb3JtR3JvdXA7XG4gIGlzRWRpdGluZyA9IGZhbHNlO1xuICBjdXJyZW50Q29sbGFib3JhdG9ySWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICBzY2hlZHVsZVR5cGVzOiBTY2hlZHVsZVR5cGVbXSA9IFtdO1xuICBwYXJ0aWNpcGFudHM6IFNjaGVkdWxlUGFydGljaXBhbnRbXSA9IFtdO1xuICBwYXJ0aWNpcGFudHNMb2FkaW5nID0gZmFsc2U7XG4gIHJlY3VycmVuY2VEZXNjcmlwdGlvbiA9ICcnO1xuXG4gIC8qKiBTMjkzMzogTWFyayBhcyByZWFkb25seSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHJlY3VycmVuY2VDaGFuZ2UkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwYXJ0aWNpcGFudFN1Z2dlc3Rpb25zOiBQYXJ0aWNpcGFudExvb2t1cFtdID0gW107XG4gIHNlbGVjdGVkUGFydGljaXBhbnRMb29rdXA6IFBhcnRpY2lwYW50TG9va3VwIHwgbnVsbCA9IG51bGw7XG4gIGFkZGVkUGFydGljaXBhbnRzOiBQYXJ0aWNpcGFudExvb2t1cFtdID0gW107XG5cbiAgcHJpb3JpdHlPcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG4gIHJlY3VycmVuY2VPcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG4gIHdlZWtEYXlPcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG4gIHJlcGVhdFdoZW5PcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG4gIG9yZGluYWxPcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG4gIG1vbnRoT3B0aW9uczogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH1bXSA9IFtdO1xuXG4gIC8qKiBTMjkzMzogTWFyayBjb25zdHJ1Y3Rvci1pbmplY3RlZCBzZXJ2aWNlcyBhcyByZWFkb25seSAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNjaGVkdWxlU2VydmljZTogU2NoZWR1bGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NoZWR1bGVUeXBlU2VydmljZTogU2NoZWR1bGVUeXBlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGN1cnJlbnRDb2xsYWJvcmF0b3JTZXJ2aWNlOiBDdXJyZW50Q29sbGFib3JhdG9yU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHQ6IFRyYW5zbGF0aW9uU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0T3B0aW9ucygpO1xuICAgIHRoaXMuaW5pdERldGFpbEZpZWxkcygpO1xuICAgIHRoaXMuaW5pdEZvcm0oKTtcbiAgICB0aGlzLmxvYWRTY2hlZHVsZVR5cGVzKCk7XG4gICAgdGhpcy5sb2FkQ29sbGFib3JhdG9yKCk7XG4gICAgdGhpcy5zZXR1cFJlY3VycmVuY2VEZXNjcmlwdGlvbldhdGNoZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZENvbGxhYm9yYXRvcigpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRDb2xsYWJvcmF0b3JTZXJ2aWNlLmxvYWQoKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGNvbGxhYikgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRDb2xsYWJvcmF0b3JJZCA9IGNvbGxhYj8uaWQgPz8gbnVsbDtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRDb2xsYWJvcmF0b3JJZCA9IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRPcHRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMucHJpb3JpdHlPcHRpb25zID0gW1xuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3ByaW9yaXR5X2xvdycpLCB2YWx1ZTogU2NoZWR1bGVQcmlvcml0eS5Mb3cgfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9wcmlvcml0eV9tZWRpdW0nKSwgdmFsdWU6IFNjaGVkdWxlUHJpb3JpdHkuTWVkaXVtIH0sXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcHJpb3JpdHlfaGlnaCcpLCB2YWx1ZTogU2NoZWR1bGVQcmlvcml0eS5IaWdoIH0sXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcHJpb3JpdHlfY3JpdGljYWwnKSwgdmFsdWU6IFNjaGVkdWxlUHJpb3JpdHkuQ3JpdGljYWwgfVxuICAgIF07XG4gICAgdGhpcy5yZWN1cnJlbmNlT3B0aW9ucyA9IFtcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9yZWN1cnJlbmNlX2RhaWx5JyksIHZhbHVlOiBTY2hlZHVsZVJlY3VycmVuY2UuRGFpbHkgfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9yZWN1cnJlbmNlX3dlZWtseScpLCB2YWx1ZTogU2NoZWR1bGVSZWN1cnJlbmNlLldlZWtseSB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3JlY3VycmVuY2VfbW9udGhseScpLCB2YWx1ZTogU2NoZWR1bGVSZWN1cnJlbmNlLk1vbnRobHkgfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9yZWN1cnJlbmNlX3llYXJseScpLCB2YWx1ZTogU2NoZWR1bGVSZWN1cnJlbmNlLlllYXJseSB9XG4gICAgXTtcbiAgICB0aGlzLndlZWtEYXlPcHRpb25zID0gW1xuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3N1bmRheScpLCB2YWx1ZTogV2Vla0RheS5TdW5kYXkgfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9tb25kYXknKSwgdmFsdWU6IFdlZWtEYXkuTW9uZGF5IH0sXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfdHVlc2RheScpLCB2YWx1ZTogV2Vla0RheS5UdWVzZGF5IH0sXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfd2VkbmVzZGF5JyksIHZhbHVlOiBXZWVrRGF5LldlZG5lc2RheSB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3RodXJzZGF5JyksIHZhbHVlOiBXZWVrRGF5LlRodXJzZGF5IH0sXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfZnJpZGF5JyksIHZhbHVlOiBXZWVrRGF5LkZyaWRheSB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3NhdHVyZGF5JyksIHZhbHVlOiBXZWVrRGF5LlNhdHVyZGF5IH1cbiAgICBdO1xuICAgIHRoaXMucmVwZWF0V2hlbk9wdGlvbnMgPSBbXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcmVwZWF0X2luX2RheScpLCB2YWx1ZTogUmVwZWF0V2hlbi5JbkRheSB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3JlcGVhdF9pbl9vcmRpbmFsX3dlZWtfZGF5JyksIHZhbHVlOiBSZXBlYXRXaGVuLkluT3JkaW5hbFdlZWtEYXkgfVxuICAgIF07XG4gICAgdGhpcy5vcmRpbmFsT3B0aW9ucyA9IFtcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9vcmRpbmFsX2ZpcnN0JyksIHZhbHVlOiBPcmRpbmFsV2Vla0RheS5GaXJzdCB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX29yZGluYWxfc2Vjb25kJyksIHZhbHVlOiBPcmRpbmFsV2Vla0RheS5TZWNvbmQgfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9vcmRpbmFsX3RoaXJkJyksIHZhbHVlOiBPcmRpbmFsV2Vla0RheS5UaGlyZCB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX29yZGluYWxfZm91cnRoJyksIHZhbHVlOiBPcmRpbmFsV2Vla0RheS5Gb3VydGggfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9vcmRpbmFsX2xhc3QnKSwgdmFsdWU6IE9yZGluYWxXZWVrRGF5Lkxhc3QgfVxuICAgIF07XG4gICAgdGhpcy5tb250aE9wdGlvbnMgPSBPYmplY3QudmFsdWVzKE1vbnRoKS5tYXAobSA9PiAoe1xuICAgICAgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoYGNybXguY29tcG9uZW50cy5zY2hlZHVsZV8ke20udG9Mb3dlckNhc2UoKX1gKSwgdmFsdWU6IG1cbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGluaXREZXRhaWxGaWVsZHMoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBkZWZhdWx0U3RhcnQgPSB0aGlzLmdldERlZmF1bHRTdGFydFRpbWUobm93KTtcbiAgICBjb25zdCBkZWZhdWx0RW5kID0gdGhpcy5nZXREZWZhdWx0RW5kVGltZShkZWZhdWx0U3RhcnQpO1xuICAgIGNvbnN0IGZ1bGxSb3cgPSB7IHhsOiAxMiwgbGc6IDEyLCBtZDogMTIsIHNtOiAxMiB9O1xuICAgIGNvbnN0IGhhbGZSb3cgPSB7IHhsOiA2LCBsZzogNiwgbWQ6IDYsIHNtOiAxMiB9O1xuICAgIHRoaXMuc2NoZWR1bGVEZXRhaWxGaWVsZHMgPSBbXG4gICAgICB7IGZpZWxkOiAnbmFtZScsIGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfbmFtZScpLCB0eXBlOiAndGV4dCcsIHJlcXVpcmVkOiB0cnVlLCB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoTUFYX05BTUVfTEVOR1RIKV0sIHBsYWNlaG9sZGVyOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfZW50ZXJfbmFtZScpLCBtYXhMZW5ndGg6IE1BWF9OQU1FX0xFTkdUSCwgc2l6ZTogZnVsbFJvdyB9LFxuICAgICAgeyBmaWVsZDogJ3ByaW9yaXR5JywgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9wcmlvcml0eScpLCB0eXBlOiAnZHJvcGRvd24nLCByZXF1aXJlZDogdHJ1ZSwgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLCBvcHRpb25zOiB0aGlzLnByaW9yaXR5T3B0aW9ucywgb3B0aW9uTGFiZWw6ICdsYWJlbCcsIG9wdGlvblZhbHVlOiAndmFsdWUnLCBkZWZhdWx0VmFsdWU6IFNjaGVkdWxlUHJpb3JpdHkuTWVkaXVtLCBzaXplOiBmdWxsUm93IH0sXG4gICAgICB7IGZpZWxkOiAndHlwZScsIGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfdHlwZScpLCB0eXBlOiAnbG9va3VwJywgbG9va3VwU2VydmljZTogdGhpcy5zY2hlZHVsZVR5cGVTZXJ2aWNlLCBsb29rdXBEaXNwbGF5RmllbGQ6ICduYW1lJywgbG9va3VwVmFsdWVGaWVsZDogJ2lkJywgbG9va3VwU2VhcmNoRmllbGRzOiBbJ25hbWUnXSwgc2hvd0NsZWFyOiB0cnVlLCBsb29rdXBBdXRvY29tcGxldGU6IHRydWUsIGxvb2t1cENvbHVtbnM6IFt7IGZpZWxkOiAnbmFtZScsIGhlYWRlcjogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX25hbWUnKSB9XSwgbG9va3VwRmlsdGVyczogXCJzdGF0dXMgPSAnQUNUSVZFJ1wiLCBwbGFjZWhvbGRlcjogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3NlbGVjdF90eXBlJyksIHNpemU6IGZ1bGxSb3cgfSxcbiAgICAgIHsgZmllbGQ6ICdzdGFydERhdGUnLCBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3N0YXJ0X2RhdGUnKSwgdHlwZTogJ2RhdGUnLCByZXF1aXJlZDogdHJ1ZSwgdmFsaWRhdG9yczogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLCBkZWZhdWx0VmFsdWU6IGZvcm1hdERhdGVUb1N0cmluZyhub3cpLCBzaXplOiAodjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHZbJ3dpdGhSZWN1cnJlbmNlJ10gPyBoYWxmUm93IDogZnVsbFJvdyB9LFxuICAgICAgeyBmaWVsZDogJ2VuZERhdGUnLCBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX2VuZF9kYXRlJyksIHR5cGU6ICdkYXRlJywgdmlzaWJsZVdoZW46ICh2OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gdlsnd2l0aFJlY3VycmVuY2UnXSA9PT0gdHJ1ZSwgc2l6ZTogaGFsZlJvdyB9LFxuICAgICAgeyBmaWVsZDogJ3N0YXJ0VGltZScsIGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfc3RhcnRfdGltZScpLCB0eXBlOiAndGltZScsIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFN0YXJ0LCB2aXNpYmxlV2hlbjogKHY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2WydhbGxEYXknXSAhPT0gdHJ1ZSwgc2l6ZTogaGFsZlJvdyB9LFxuICAgICAgeyBmaWVsZDogJ2VuZFRpbWUnLCBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX2VuZF90aW1lJyksIHR5cGU6ICd0aW1lJywgZGVmYXVsdFZhbHVlOiBkZWZhdWx0RW5kLCB2aXNpYmxlV2hlbjogKHY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2WydhbGxEYXknXSAhPT0gdHJ1ZSwgc2l6ZTogaGFsZlJvdyB9LFxuICAgICAgeyBmaWVsZDogJ2FsbERheScsIGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfYWxsX2RheScpLCB0eXBlOiAnY2hlY2tib3gnLCBkZWZhdWx0VmFsdWU6IGZhbHNlLCBzaXplOiBoYWxmUm93IH0sXG4gICAgICB7IGZpZWxkOiAnd2l0aFJlY3VycmVuY2UnLCBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3dpdGhfcmVjdXJyZW5jZScpLCB0eXBlOiAnY2hlY2tib3gnLCBkZWZhdWx0VmFsdWU6IGZhbHNlLCBzaXplOiBoYWxmUm93IH0sXG4gICAgICB7IGZpZWxkOiAnY29tbWVudHMnLCBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX2NvbW1lbnRzJyksIHR5cGU6ICd0ZXh0YXJlYScsIHBsYWNlaG9sZGVyOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfZW50ZXJfY29tbWVudHMnKSwgcm93czogMywgc2l6ZTogZnVsbFJvdyB9XG4gICAgXTtcbiAgfVxuXG4gIG9uRGV0YWlsRm9ybVJlYWR5KGZvcm06IEZvcm1Hcm91cCk6IHZvaWQge1xuICAgIHRoaXMuc2NoZWR1bGVGb3JtID0gZm9ybTtcbiAgICB0aGlzLmFkZFJlY3VycmVuY2VDb250cm9scygpO1xuICAgIHRoaXMuc2NoZWR1bGVGb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB0aGlzLnJlY3VycmVuY2VDaGFuZ2UkLm5leHQoKVxuICAgICk7XG4gICAgdGhpcy5zZXR1cFJlY3VycmVuY2VGb3JtV2F0Y2hlcnMoKTtcbiAgfVxuXG4gIC8qKiBTMTIxOiBBZGQgYnJhY2VzIHRvIGFsbCBpZiBzdGF0ZW1lbnRzICovXG4gIHByaXZhdGUgYWRkUmVjdXJyZW5jZUNvbnRyb2xzKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgaWYgKCF0aGlzLnNjaGVkdWxlRm9ybS5jb250YWlucygnaWQnKSkge1xuICAgICAgdGhpcy5zY2hlZHVsZUZvcm0uYWRkQ29udHJvbCgnaWQnLCB0aGlzLmZiLmNvbnRyb2wobnVsbCkpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc2NoZWR1bGVGb3JtLmNvbnRhaW5zKCdyZWN1cnJlbmNlJykpIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmFkZENvbnRyb2woXG4gICAgICAgICdyZWN1cnJlbmNlJywgdGhpcy5mYi5jb250cm9sKFNjaGVkdWxlUmVjdXJyZW5jZS5EYWlseSlcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zY2hlZHVsZUZvcm0uY29udGFpbnMoJ3JlY3VycmVuY2VJbnRlcnZhbCcpKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRm9ybS5hZGRDb250cm9sKFxuICAgICAgICAncmVjdXJyZW5jZUludGVydmFsJywgdGhpcy5mYi5jb250cm9sKDEpXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc2NoZWR1bGVGb3JtLmNvbnRhaW5zKCd3ZWVrRGF5cycpKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRm9ybS5hZGRDb250cm9sKFxuICAgICAgICAnd2Vla0RheXMnLCB0aGlzLmZiLmNvbnRyb2woW2dldEN1cnJlbnRXZWVrRGF5KG5vdyldKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNjaGVkdWxlRm9ybS5jb250YWlucygncmVwZWF0V2hlbicpKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRm9ybS5hZGRDb250cm9sKFxuICAgICAgICAncmVwZWF0V2hlbicsIHRoaXMuZmIuY29udHJvbChSZXBlYXRXaGVuLkluRGF5KVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNjaGVkdWxlRm9ybS5jb250YWlucygncmVwZWF0V2hlbkRheScpKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRm9ybS5hZGRDb250cm9sKFxuICAgICAgICAncmVwZWF0V2hlbkRheScsIHRoaXMuZmIuY29udHJvbChub3cuZ2V0RGF0ZSgpKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNjaGVkdWxlRm9ybS5jb250YWlucygncmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5JykpIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmFkZENvbnRyb2woXG4gICAgICAgICdyZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXknLFxuICAgICAgICB0aGlzLmZiLmNvbnRyb2woZ2V0T3JkaW5hbEZvckRhdGUobm93KSlcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zY2hlZHVsZUZvcm0uY29udGFpbnMoJ3JlcGVhdFdoZW5XZWVrTW9udGgnKSkge1xuICAgICAgdGhpcy5zY2hlZHVsZUZvcm0uYWRkQ29udHJvbChcbiAgICAgICAgJ3JlcGVhdFdoZW5XZWVrTW9udGgnLFxuICAgICAgICB0aGlzLmZiLmNvbnRyb2woZ2V0Q3VycmVudFdlZWtEYXkobm93KSlcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zY2hlZHVsZUZvcm0uY29udGFpbnMoJ3JlcGVhdFdoZW5Nb250aCcpKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRm9ybS5hZGRDb250cm9sKFxuICAgICAgICAncmVwZWF0V2hlbk1vbnRoJyxcbiAgICAgICAgdGhpcy5mYi5jb250cm9sKGdldEN1cnJlbnRNb250aChub3cpKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUzE1NDE6IEJyZWFrIHNldHVwUmVjdXJyZW5jZUZvcm1XYXRjaGVycyBpbnRvIHNtYWxsZXIgaGVscGVyc1xuICAgKiB0byByZWR1Y2UgY3ljbG9tYXRpYyBjb21wbGV4aXR5XG4gICAqL1xuICBwcml2YXRlIHNldHVwUmVjdXJyZW5jZUZvcm1XYXRjaGVycygpOiB2b2lkIHtcbiAgICBjb25zdCBkID0gdGhpcy5zZWxlY3RlZERhdGUgfHwgbmV3IERhdGUoKTtcbiAgICB0aGlzLndhdGNoUmVjdXJyZW5jZUNoYW5nZXMoZCk7XG4gICAgdGhpcy53YXRjaFJlcGVhdFdoZW5DaGFuZ2VzKGQpO1xuICAgIHRoaXMud2F0Y2hXaXRoUmVjdXJyZW5jZUNoYW5nZXMoZCk7XG4gIH1cblxuICBwcml2YXRlIHdhdGNoUmVjdXJyZW5jZUNoYW5nZXMoZDogRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuc2NoZWR1bGVGb3JtLmdldCgncmVjdXJyZW5jZScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKFxuICAgICAgKHJlYzogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVjdXJyZW5jZVdlZWtEYXlzKHJlYywgZCk7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVjdXJyZW5jZU1vbnRobHlZZWFybHkocmVjLCBkKTtcbiAgICAgICAgdGhpcy5oYW5kbGVSZWN1cnJlbmNlWWVhcmx5TW9udGgocmVjLCBkKTtcbiAgICAgICAgdGhpcy5yZWN1cnJlbmNlQ2hhbmdlJC5uZXh0KCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUmVjdXJyZW5jZVdlZWtEYXlzKHJlYzogc3RyaW5nLCBkOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKHJlYyA9PT0gU2NoZWR1bGVSZWN1cnJlbmNlLldlZWtseSkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2NoZWR1bGVGb3JtLmdldCgnd2Vla0RheXMnKT8udmFsdWU7XG4gICAgICBpZiAoIWN1cnJlbnQgfHwgY3VycmVudC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZUZvcm0ucGF0Y2hWYWx1ZShcbiAgICAgICAgICB7IHdlZWtEYXlzOiBbZ2V0Q3VycmVudFdlZWtEYXkoZCldIH0sXG4gICAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zY2hlZHVsZUZvcm0ucGF0Y2hWYWx1ZShcbiAgICAgICAgeyB3ZWVrRGF5czogW10gfSxcbiAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVSZWN1cnJlbmNlTW9udGhseVllYXJseShcbiAgICByZWM6IHN0cmluZywgZDogRGF0ZVxuICApOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICByZWMgPT09IFNjaGVkdWxlUmVjdXJyZW5jZS5Nb250aGx5IHx8XG4gICAgICByZWMgPT09IFNjaGVkdWxlUmVjdXJyZW5jZS5ZZWFybHlcbiAgICApIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICByZXBlYXRXaGVuOlxuICAgICAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmdldCgncmVwZWF0V2hlbicpPy52YWx1ZSA/PyBSZXBlYXRXaGVuLkluRGF5LFxuICAgICAgICByZXBlYXRXaGVuRGF5OlxuICAgICAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmdldCgncmVwZWF0V2hlbkRheScpPy52YWx1ZSA/PyBkLmdldERhdGUoKSxcbiAgICAgICAgcmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5OlxuICAgICAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmdldCgncmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5Jyk/LnZhbHVlXG4gICAgICAgICAgICA/PyBnZXRPcmRpbmFsRm9yRGF0ZShkKSxcbiAgICAgICAgcmVwZWF0V2hlbldlZWtNb250aDpcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlRm9ybS5nZXQoJ3JlcGVhdFdoZW5XZWVrTW9udGgnKT8udmFsdWVcbiAgICAgICAgICAgID8/IGdldEN1cnJlbnRXZWVrRGF5KGQpXG4gICAgICB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICByZXBlYXRXaGVuOiBudWxsLFxuICAgICAgICByZXBlYXRXaGVuRGF5OiBudWxsLFxuICAgICAgICByZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXk6IG51bGwsXG4gICAgICAgIHJlcGVhdFdoZW5XZWVrTW9udGg6IG51bGwsXG4gICAgICAgIHJlcGVhdFdoZW5Nb250aDogbnVsbFxuICAgICAgfSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUmVjdXJyZW5jZVllYXJseU1vbnRoKHJlYzogc3RyaW5nLCBkOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKHJlYyA9PT0gU2NoZWR1bGVSZWN1cnJlbmNlLlllYXJseSkge1xuICAgICAgdGhpcy5zY2hlZHVsZUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIHJlcGVhdFdoZW5Nb250aDpcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlRm9ybS5nZXQoJ3JlcGVhdFdoZW5Nb250aCcpPy52YWx1ZVxuICAgICAgICAgICAgPz8gZ2V0Q3VycmVudE1vbnRoKGQpXG4gICAgICB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLnBhdGNoVmFsdWUoXG4gICAgICAgIHsgcmVwZWF0V2hlbk1vbnRoOiBudWxsIH0sXG4gICAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgd2F0Y2hSZXBlYXRXaGVuQ2hhbmdlcyhkOiBEYXRlKTogdm9pZCB7XG4gICAgdGhpcy5zY2hlZHVsZUZvcm0uZ2V0KCdyZXBlYXRXaGVuJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoXG4gICAgICAocnc6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAocncgPT09IFJlcGVhdFdoZW4uSW5EYXkpIHtcbiAgICAgICAgICB0aGlzLnNjaGVkdWxlRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgIHJlcGVhdFdoZW5EYXk6XG4gICAgICAgICAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmdldCgncmVwZWF0V2hlbkRheScpPy52YWx1ZSA/PyBkLmdldERhdGUoKSxcbiAgICAgICAgICAgIHJlcGVhdFdoZW5PcmRpbmFsV2Vla0RheTogbnVsbCxcbiAgICAgICAgICAgIHJlcGVhdFdoZW5XZWVrTW9udGg6IG51bGxcbiAgICAgICAgICB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAocncgPT09IFJlcGVhdFdoZW4uSW5PcmRpbmFsV2Vla0RheSkge1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgcmVwZWF0V2hlbkRheTogbnVsbCxcbiAgICAgICAgICAgIHJlcGVhdFdoZW5PcmRpbmFsV2Vla0RheTpcbiAgICAgICAgICAgICAgdGhpcy5zY2hlZHVsZUZvcm0uZ2V0KCdyZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXknKT8udmFsdWVcbiAgICAgICAgICAgICAgICA/PyBnZXRPcmRpbmFsRm9yRGF0ZShkKSxcbiAgICAgICAgICAgIHJlcGVhdFdoZW5XZWVrTW9udGg6XG4gICAgICAgICAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmdldCgncmVwZWF0V2hlbldlZWtNb250aCcpPy52YWx1ZVxuICAgICAgICAgICAgICAgID8/IGdldEN1cnJlbnRXZWVrRGF5KGQpXG4gICAgICAgICAgfSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5vIGFjdGlvbiBuZWVkZWQgZm9yIG90aGVyIHJlcGVhdFdoZW4gdmFsdWVzXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWN1cnJlbmNlQ2hhbmdlJC5uZXh0KCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgd2F0Y2hXaXRoUmVjdXJyZW5jZUNoYW5nZXMoZDogRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuc2NoZWR1bGVGb3JtLmdldCgnd2l0aFJlY3VycmVuY2UnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3QgZW5hYmxlZCA9IHRoaXMuc2NoZWR1bGVGb3JtLmdldCgnd2l0aFJlY3VycmVuY2UnKT8udmFsdWUgPT09IHRydWU7XG4gICAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgICAgdGhpcy5vblJlY3VycmVuY2VFbmFibGVkKGQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub25SZWN1cnJlbmNlRGlzYWJsZWQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uUmVjdXJyZW5jZUVuYWJsZWQoZDogRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMucmVzZXRSZWN1cnJlbmNlRGVmYXVsdHMoZCk7XG4gICAgdGhpcy5yZWN1cnJlbmNlQ2hhbmdlJC5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIG9uUmVjdXJyZW5jZURpc2FibGVkKCk6IHZvaWQge1xuICAgIHRoaXMucmVjdXJyZW5jZURlc2NyaXB0aW9uID0gJyc7XG4gIH1cblxuICBwcml2YXRlIGluaXRGb3JtKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgZGVmYXVsdFN0YXJ0ID0gdGhpcy5nZXREZWZhdWx0U3RhcnRUaW1lKG5vdyk7XG4gICAgY29uc3QgZGVmYXVsdEVuZCA9IHRoaXMuZ2V0RGVmYXVsdEVuZFRpbWUoZGVmYXVsdFN0YXJ0KTtcbiAgICB0aGlzLnNjaGVkdWxlRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgaWQ6IFtudWxsXSxcbiAgICAgIG5hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKE1BWF9OQU1FX0xFTkdUSCldXSxcbiAgICAgIHR5cGU6IFtudWxsXSxcbiAgICAgIHByaW9yaXR5OiBbU2NoZWR1bGVQcmlvcml0eS5NZWRpdW0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgYWxsRGF5OiBbZmFsc2VdLFxuICAgICAgd2l0aFJlY3VycmVuY2U6IFtmYWxzZV0sXG4gICAgICBzdGFydERhdGU6IFtcbiAgICAgICAgZm9ybWF0RGF0ZVRvU3RyaW5nKHRoaXMuc2VsZWN0ZWREYXRlIHx8IG5vdyksXG4gICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcbiAgICAgIF0sXG4gICAgICBlbmREYXRlOiBbbnVsbF0sXG4gICAgICBzdGFydFRpbWU6IFtkZWZhdWx0U3RhcnRdLFxuICAgICAgZW5kVGltZTogW2RlZmF1bHRFbmRdLFxuICAgICAgcmVjdXJyZW5jZTogW1NjaGVkdWxlUmVjdXJyZW5jZS5EYWlseV0sXG4gICAgICByZWN1cnJlbmNlSW50ZXJ2YWw6IFsxXSxcbiAgICAgIHdlZWtEYXlzOiBbW2dldEN1cnJlbnRXZWVrRGF5KG5vdyldXSxcbiAgICAgIHJlcGVhdFdoZW46IFtSZXBlYXRXaGVuLkluRGF5XSxcbiAgICAgIHJlcGVhdFdoZW5EYXk6IFtub3cuZ2V0RGF0ZSgpXSxcbiAgICAgIHJlcGVhdFdoZW5PcmRpbmFsV2Vla0RheTogW2dldE9yZGluYWxGb3JEYXRlKG5vdyldLFxuICAgICAgcmVwZWF0V2hlbldlZWtNb250aDogW2dldEN1cnJlbnRXZWVrRGF5KG5vdyldLFxuICAgICAgcmVwZWF0V2hlbk1vbnRoOiBbZ2V0Q3VycmVudE1vbnRoKG5vdyldLFxuICAgICAgY29tbWVudHM6IFsnJ11cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBSZWN1cnJlbmNlRGVzY3JpcHRpb25XYXRjaGVyKCk6IHZvaWQge1xuICAgIHRoaXMucmVjdXJyZW5jZUNoYW5nZSQucGlwZShcbiAgICAgIGRlYm91bmNlVGltZShERUJPVU5DRV9NUylcbiAgICApLnN1YnNjcmliZSgoKSA9PiB0aGlzLmZldGNoUmVjdXJyZW5jZURlc2NyaXB0aW9uKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmZXRjaFJlY3VycmVuY2VEZXNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2NoZWR1bGVGb3JtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHYgPSB0aGlzLnNjaGVkdWxlRm9ybS52YWx1ZTtcbiAgICBpZiAoIXYud2l0aFJlY3VycmVuY2UgfHwgIXYuc3RhcnREYXRlKSB7XG4gICAgICB0aGlzLnJlY3VycmVuY2VEZXNjcmlwdGlvbiA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNjaGVkdWxlU2VydmljZS5nZW5lcmF0ZVJlY3VycmVuY2VEZXNjcmlwdGlvbihcbiAgICAgIHRoaXMuYnVpbGRSZWN1cnJlbmNlUGF5bG9hZCh2KVxuICAgICkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyKSA9PiB7XG4gICAgICAgIHRoaXMucmVjdXJyZW5jZURlc2NyaXB0aW9uID0gci5kZXNjcmlwdGlvbiA/PyAnJztcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLnJlY3VycmVuY2VEZXNjcmlwdGlvbiA9ICcnO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFJlY3VycmVuY2VQYXlsb2FkKHY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmJ1aWxkRGF0ZVRpbWVQYXlsb2FkKHYpLFxuICAgICAgYWxsRGF5OiB2WydhbGxEYXknXSB8fCBmYWxzZSxcbiAgICAgIHdpdGhSZWN1cnJlbmNlOiB0cnVlLFxuICAgICAgcmVjdXJyZW5jZUludGVydmFsOiB2WydyZWN1cnJlbmNlSW50ZXJ2YWwnXSB8fCAxLFxuICAgICAgcmVjdXJyZW5jZTogdlsncmVjdXJyZW5jZSddLFxuICAgICAgLi4udGhpcy5idWlsZE51bGxhYmxlUmVjdXJyZW5jZUZpZWxkcyh2KVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRGF0ZVRpbWVQYXlsb2FkKHY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIHJldHVybiB7XG4gICAgICBzdGFydERhdGU6IHRvRGF0ZVN0cmluZyh2WydzdGFydERhdGUnXSksXG4gICAgICBlbmREYXRlOiB2WydlbmREYXRlJ10gPyB0b0RhdGVTdHJpbmcodlsnZW5kRGF0ZSddKSA6IG51bGwsXG4gICAgICBzdGFydFRpbWU6IHZbJ3N0YXJ0VGltZSddID8gdG9UaW1lU3RyaW5nKHZbJ3N0YXJ0VGltZSddKSA6IG51bGwsXG4gICAgICBlbmRUaW1lOiB2WydlbmRUaW1lJ10gPyB0b1RpbWVTdHJpbmcodlsnZW5kVGltZSddKSA6IG51bGxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZE51bGxhYmxlUmVjdXJyZW5jZUZpZWxkcyh2OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4ge1xuICAgICAgd2Vla0RheXM6IHZbJ3dlZWtEYXlzJ10gPz8gbnVsbCxcbiAgICAgIHJlcGVhdFdoZW46IHZbJ3JlcGVhdFdoZW4nXSA/PyBudWxsLFxuICAgICAgcmVwZWF0V2hlbkRheTogdlsncmVwZWF0V2hlbkRheSddID8/IG51bGwsXG4gICAgICByZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXk6IHZbJ3JlcGVhdFdoZW5PcmRpbmFsV2Vla0RheSddID8/IG51bGwsXG4gICAgICByZXBlYXRXaGVuV2Vla01vbnRoOiB2WydyZXBlYXRXaGVuV2Vla01vbnRoJ10gPz8gbnVsbCxcbiAgICAgIHJlcGVhdFdoZW5Nb250aDogdlsncmVwZWF0V2hlbk1vbnRoJ10gPz8gbnVsbFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGxvYWRTY2hlZHVsZVR5cGVzKCk6IHZvaWQge1xuICAgIHRoaXMuc2NoZWR1bGVUeXBlU2VydmljZS5saXN0KHtcbiAgICAgIHNpemU6IDEwMCxcbiAgICAgIGZpbHRlclF1ZXJ5OiBcInN0YXR1cyA9ICdBQ1RJVkUnXCJcbiAgICB9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHIpID0+IHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZVR5cGVzID0gci5jb250ZW50cztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9wZW5OZXcoKTogdm9pZCB7XG4gICAgdGhpcy5pc0VkaXRpbmcgPSBmYWxzZTtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IGRlZmF1bHRTdGFydCA9IHRoaXMuZ2V0RGVmYXVsdFN0YXJ0VGltZShub3cpO1xuICAgIGNvbnN0IGRlZmF1bHRFbmQgPSB0aGlzLmdldERlZmF1bHRFbmRUaW1lKGRlZmF1bHRTdGFydCk7XG4gICAgdGhpcy5lbnRpdHlEYXRhRm9yRm9ybSA9IG51bGw7XG4gICAgaWYgKHRoaXMuZGV0YWlsRm9ybUNvbXBvbmVudCkge1xuICAgICAgdGhpcy5kZXRhaWxGb3JtQ29tcG9uZW50LnJlc2V0Rm9ybSgpO1xuICAgIH1cbiAgICB0aGlzLmVudGl0eURhdGFGb3JGb3JtID0ge1xuICAgICAgc3RhcnREYXRlOiBmb3JtYXREYXRlVG9TdHJpbmcodGhpcy5zZWxlY3RlZERhdGUgfHwgbm93KSxcbiAgICAgIHByaW9yaXR5OiBTY2hlZHVsZVByaW9yaXR5Lk1lZGl1bSxcbiAgICAgIGFsbERheTogZmFsc2UsXG4gICAgICB3aXRoUmVjdXJyZW5jZTogZmFsc2UsXG4gICAgICBzdGFydFRpbWU6IGRlZmF1bHRTdGFydCxcbiAgICAgIGVuZFRpbWU6IGRlZmF1bHRFbmRcbiAgICB9O1xuICAgIHRoaXMucmVzZXRSZWN1cnJlbmNlRGVmYXVsdHModGhpcy5zZWxlY3RlZERhdGUgfHwgbm93KTtcbiAgICB0aGlzLnJlY3VycmVuY2VEZXNjcmlwdGlvbiA9ICcnO1xuICAgIHRoaXMucGFydGljaXBhbnRzID0gW107XG4gICAgdGhpcy5hZGRlZFBhcnRpY2lwYW50cyA9IFtdO1xuICAgIHRoaXMuc2VsZWN0ZWRQYXJ0aWNpcGFudExvb2t1cCA9IG51bGw7XG4gICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIG9wZW5FZGl0KHNjaGVkdWxlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaXNFZGl0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnBhcnRpY2lwYW50cyA9IFtdO1xuICAgIHRoaXMuYWRkZWRQYXJ0aWNpcGFudHMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkUGFydGljaXBhbnRMb29rdXAgPSBudWxsO1xuICAgIHRoaXMuc2NoZWR1bGVTZXJ2aWNlLmdldChzY2hlZHVsZUlkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgdGhpcy5lbnRpdHlEYXRhRm9yRm9ybSA9IHsgLi4uZGF0YSwgdHlwZTogZGF0YS50eXBlID8/IG51bGwgfTtcbiAgICAgICAgdGhpcy5sb2FkUGFydGljaXBhbnRzKHNjaGVkdWxlSWQpO1xuICAgICAgICB0aGlzLnZpc2libGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh0cnVlKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc2NoZWR1bGVGb3JtKSB7XG4gICAgICAgICAgICB0aGlzLnNjaGVkdWxlRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgaWQ6IGRhdGEuaWQsXG4gICAgICAgICAgICAgIHJlY3VycmVuY2U6IGRhdGEucmVjdXJyZW5jZSxcbiAgICAgICAgICAgICAgcmVjdXJyZW5jZUludGVydmFsOiBkYXRhLnJlY3VycmVuY2VJbnRlcnZhbCxcbiAgICAgICAgICAgICAgd2Vla0RheXM6IGRhdGEud2Vla0RheXMsXG4gICAgICAgICAgICAgIHJlcGVhdFdoZW46IGRhdGEucmVwZWF0V2hlbixcbiAgICAgICAgICAgICAgcmVwZWF0V2hlbkRheTogZGF0YS5yZXBlYXRXaGVuRGF5LFxuICAgICAgICAgICAgICByZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXk6IGRhdGEucmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5LFxuICAgICAgICAgICAgICByZXBlYXRXaGVuV2Vla01vbnRoOiBkYXRhLnJlcGVhdFdoZW5XZWVrTW9udGgsXG4gICAgICAgICAgICAgIHJlcGVhdFdoZW5Nb250aDogZGF0YS5yZXBlYXRXaGVuTW9udGhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRQYXJ0aWNpcGFudHMoc2NoZWR1bGVJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wYXJ0aWNpcGFudHNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnNjaGVkdWxlU2VydmljZS5saXN0UGFydGljaXBhbnRzKHNjaGVkdWxlSWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocikgPT4ge1xuICAgICAgICB0aGlzLnBhcnRpY2lwYW50cyA9IHIuY29udGVudHMgPz8gW107XG4gICAgICAgIHRoaXMuYWRkZWRQYXJ0aWNpcGFudHMgPSB0aGlzLnBhcnRpY2lwYW50c1xuICAgICAgICAgIC5maWx0ZXIocCA9PiAhcC5vcmdhbml6ZXIpXG4gICAgICAgICAgLm1hcChwID0+IHRoaXMucGFydGljaXBhbnRUb0xvb2t1cChwKSlcbiAgICAgICAgICAuZmlsdGVyKChwKTogcCBpcyBQYXJ0aWNpcGFudExvb2t1cCA9PiBwICE9PSBudWxsKTtcbiAgICAgICAgdGhpcy5wYXJ0aWNpcGFudHNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgdGhpcy5wYXJ0aWNpcGFudHNMb2FkaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnRpY2lwYW50VG9Mb29rdXAoXG4gICAgcDogU2NoZWR1bGVQYXJ0aWNpcGFudFxuICApOiBQYXJ0aWNpcGFudExvb2t1cCB8IG51bGwge1xuICAgIGlmIChwLmNvbGxhYm9yYXRvcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHAuY29sbGFib3JhdG9yLmlkLFxuICAgICAgICBuYW1lOiBwLmNvbGxhYm9yYXRvci5uYW1lLFxuICAgICAgICBvcmlnaW46ICdDT0xMQUJPUkFUT1InXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAocC5hY2NvdW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcC5hY2NvdW50LmlkLFxuICAgICAgICBuYW1lOiBwLmFjY291bnQubmFtZSxcbiAgICAgICAgb3JpZ2luOiAnQUNDT1VOVCdcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChwLmFjY291bnRDb250YWN0KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcC5hY2NvdW50Q29udGFjdC5pZCxcbiAgICAgICAgbmFtZTogcC5hY2NvdW50Q29udGFjdC5uYW1lLFxuICAgICAgICByZWZlcmVuY2VOYW1lOiBwLmFjY291bnRDb250YWN0LmFjY291bnQ/Lm5hbWUsXG4gICAgICAgIHJlZmVyZW5jZUlkOiBwLmFjY291bnRDb250YWN0LmFjY291bnQ/LmlkLFxuICAgICAgICBvcmlnaW46ICdBQ0NPVU5UX0NPTlRBQ1QnXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAocC5leHRlcm5hbFBhcnRpY2lwYW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcC5leHRlcm5hbFBhcnRpY2lwYW50LmlkLFxuICAgICAgICBuYW1lOiBwLmV4dGVybmFsUGFydGljaXBhbnQubmFtZSxcbiAgICAgICAgb3JpZ2luOiAnRVhURVJOQUxfUEFSVElDSVBBTlQnXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIG9uU2VhcmNoUGFydGljaXBhbnRzKGV2ZW50OiB7IHF1ZXJ5OiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIHRoaXMuc2NoZWR1bGVTZXJ2aWNlLnNlYXJjaFBhcnRpY2lwYW50TG9va3VwKFxuICAgICAgZXZlbnQucXVlcnkgPz8gJycsXG4gICAgICBQQVJUSUNJUEFOVF9TRUFSQ0hfTElNSVRcbiAgICApLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocikgPT4ge1xuICAgICAgICBjb25zdCBhZGRlZElkcyA9IG5ldyBTZXQoXG4gICAgICAgICAgdGhpcy5hZGRlZFBhcnRpY2lwYW50cy5tYXAocCA9PiBwLmlkICsgcC5vcmlnaW4pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucGFydGljaXBhbnRTdWdnZXN0aW9ucyA9IChyLmNvbnRlbnRzID8/IFtdKVxuICAgICAgICAgIC5maWx0ZXIocCA9PiAhYWRkZWRJZHMuaGFzKHAuaWQgKyBwLm9yaWdpbikpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMucGFydGljaXBhbnRTdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25TZWxlY3RQYXJ0aWNpcGFudChwYXJ0aWNpcGFudDogUGFydGljaXBhbnRMb29rdXApOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICAhdGhpcy5hZGRlZFBhcnRpY2lwYW50cy5zb21lKFxuICAgICAgICBwID0+IHAuaWQgPT09IHBhcnRpY2lwYW50LmlkICYmIHAub3JpZ2luID09PSBwYXJ0aWNpcGFudC5vcmlnaW5cbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRoaXMuYWRkZWRQYXJ0aWNpcGFudHMgPSBbLi4udGhpcy5hZGRlZFBhcnRpY2lwYW50cywgcGFydGljaXBhbnRdO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRQYXJ0aWNpcGFudExvb2t1cCA9IG51bGw7XG4gICAgfSk7XG4gIH1cblxuICBvblJlbW92ZVBhcnRpY2lwYW50KHBhcnRpY2lwYW50OiBQYXJ0aWNpcGFudExvb2t1cCk6IHZvaWQge1xuICAgIHRoaXMuYWRkZWRQYXJ0aWNpcGFudHMgPSB0aGlzLmFkZGVkUGFydGljaXBhbnRzLmZpbHRlcihcbiAgICAgIHAgPT4gIShwLmlkID09PSBwYXJ0aWNpcGFudC5pZCAmJiBwLm9yaWdpbiA9PT0gcGFydGljaXBhbnQub3JpZ2luKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUzE1NDE6IEJyZWFrIG9uU2F2ZSBpbnRvIHNtYWxsZXIgaGVscGVycyB0byByZWR1Y2UgY29tcGxleGl0eVxuICAgKiBTMTIxL1MyNjgxOiBBZGQgYnJhY2VzIHRvIGFsbCBpZiBzdGF0ZW1lbnRzXG4gICAqL1xuICBvblNhdmUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2NoZWR1bGVGb3JtLmludmFsaWQpIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB0aGlzLmJ1aWxkU2F2ZVBheWxvYWQoKTtcbiAgICBjb25zdCBvcCA9IHRoaXMuaXNFZGl0aW5nXG4gICAgICA/IHRoaXMuc2NoZWR1bGVTZXJ2aWNlLnVwZGF0ZShwYXlsb2FkWydpZCddIGFzIHN0cmluZywgcGF5bG9hZClcbiAgICAgIDogdGhpcy5zY2hlZHVsZVNlcnZpY2UuaW5zZXJ0KHBheWxvYWQpO1xuICAgIGxldCBzY2hlZHVsZUlkOiBzdHJpbmc7XG4gICAgb3AucGlwZShcbiAgICAgIHN3aXRjaE1hcCgocmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgICAgICBzY2hlZHVsZUlkID0gdGhpcy5pc0VkaXRpbmdcbiAgICAgICAgICA/IHBheWxvYWRbJ2lkJ10gYXMgc3RyaW5nXG4gICAgICAgICAgOiByZXN1bHQ/LlsnaWQnXSBhcyBzdHJpbmc7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVkdWxlU2VydmljZS5tYW5hZ2VQYXJ0aWNpcGFudHMoXG4gICAgICAgICAgc2NoZWR1bGVJZCxcbiAgICAgICAgICB0aGlzLmJ1aWxkTWFuYWdlUGFydGljaXBhbnRzUGF5bG9hZCgpXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5zYXZlZC5lbWl0KHNjaGVkdWxlSWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFNhdmVQYXlsb2FkKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICAgIC4uLnRoaXMuc2NoZWR1bGVGb3JtLnZhbHVlLFxuICAgICAgdHlwZTogdGhpcy5zY2hlZHVsZUZvcm0udmFsdWUudHlwZSB8fCBudWxsLFxuICAgICAgd2hlbk9jY3VyczogdGhpcy5yZWN1cnJlbmNlRGVzY3JpcHRpb24gPz8gbnVsbFxuICAgIH07XG4gICAgaWYgKHBheWxvYWRbJ3N0YXJ0RGF0ZSddKSB7XG4gICAgICBwYXlsb2FkWydzdGFydERhdGUnXSA9IHRvRGF0ZVN0cmluZyhwYXlsb2FkWydzdGFydERhdGUnXSk7XG4gICAgfVxuICAgIGlmIChwYXlsb2FkWydlbmREYXRlJ10pIHtcbiAgICAgIHBheWxvYWRbJ2VuZERhdGUnXSA9IHRvRGF0ZVN0cmluZyhwYXlsb2FkWydlbmREYXRlJ10pO1xuICAgIH1cbiAgICBpZiAocGF5bG9hZFsnc3RhcnRUaW1lJ10pIHtcbiAgICAgIHBheWxvYWRbJ3N0YXJ0VGltZSddID0gdG9UaW1lU3RyaW5nKHBheWxvYWRbJ3N0YXJ0VGltZSddKTtcbiAgICB9XG4gICAgaWYgKHBheWxvYWRbJ2VuZFRpbWUnXSkge1xuICAgICAgcGF5bG9hZFsnZW5kVGltZSddID0gdG9UaW1lU3RyaW5nKHBheWxvYWRbJ2VuZFRpbWUnXSk7XG4gICAgfVxuICAgIGlmICghcGF5bG9hZFsnd2l0aFJlY3VycmVuY2UnXSkge1xuICAgICAgdGhpcy5jbGVhclJlY3VycmVuY2VQYXlsb2FkKHBheWxvYWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFuUmVjdXJyZW5jZUZpZWxkcyhwYXlsb2FkKTtcbiAgICB9XG4gICAgaWYgKHBheWxvYWRbJ2FsbERheSddKSB7XG4gICAgICBwYXlsb2FkWydzdGFydFRpbWUnXSA9IG51bGw7XG4gICAgICBwYXlsb2FkWydlbmRUaW1lJ10gPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gcGF5bG9hZDtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJSZWN1cnJlbmNlUGF5bG9hZChwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIHBheWxvYWRbJ2VuZERhdGUnXSA9IG51bGw7XG4gICAgcGF5bG9hZFsncmVjdXJyZW5jZUludGVydmFsJ10gPSBudWxsO1xuICAgIHBheWxvYWRbJ3dlZWtEYXlzJ10gPSBudWxsO1xuICAgIHBheWxvYWRbJ3JlcGVhdFdoZW4nXSA9IG51bGw7XG4gICAgcGF5bG9hZFsncmVwZWF0V2hlbkRheSddID0gbnVsbDtcbiAgICBwYXlsb2FkWydyZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXknXSA9IG51bGw7XG4gICAgcGF5bG9hZFsncmVwZWF0V2hlbldlZWtNb250aCddID0gbnVsbDtcbiAgICBwYXlsb2FkWydyZXBlYXRXaGVuTW9udGgnXSA9IG51bGw7XG4gIH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLnZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTWFuYWdlUGFydGljaXBhbnRzUGF5bG9hZCgpOiB7XG4gICAgYWNjb3VudHNJZDogc3RyaW5nW107XG4gICAgYWNjb3VudENvbnRhY3RzSWQ6IHN0cmluZ1tdO1xuICAgIGNvbGxhYm9yYXRvcnNJZDogc3RyaW5nW107XG4gICAgZXh0ZXJuYWxQYXJ0aWNpcGFudHNJZDogc3RyaW5nW107XG4gIH0ge1xuICAgIGNvbnN0IGE6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgYWM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgYzogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBlOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLmFkZGVkUGFydGljaXBhbnRzKSB7XG4gICAgICBzd2l0Y2ggKHAub3JpZ2luKSB7XG4gICAgICAgIGNhc2UgJ0FDQ09VTlQnOiB7XG4gICAgICAgICAgYS5wdXNoKHAuaWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0FDQ09VTlRfQ09OVEFDVCc6IHtcbiAgICAgICAgICBhYy5wdXNoKHAuaWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0NPTExBQk9SQVRPUic6IHtcbiAgICAgICAgICBjLnB1c2gocC5pZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnRVhURVJOQUxfUEFSVElDSVBBTlQnOiB7XG4gICAgICAgICAgZS5wdXNoKHAuaWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBhY2NvdW50c0lkOiBhLFxuICAgICAgYWNjb3VudENvbnRhY3RzSWQ6IGFjLFxuICAgICAgY29sbGFib3JhdG9yc0lkOiBjLFxuICAgICAgZXh0ZXJuYWxQYXJ0aWNpcGFudHNJZDogZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUzE1NDE6IEJyZWFrIGNsZWFuUmVjdXJyZW5jZUZpZWxkcyBpbnRvIHNtYWxsZXIgaGVscGVyc1xuICAgKiBTMTIxL1MyNjgxOiBBZGQgYnJhY2VzIHRvIGFsbCBpZiBzdGF0ZW1lbnRzXG4gICAqL1xuICBwcml2YXRlIGNsZWFuUmVjdXJyZW5jZUZpZWxkcyhwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIGNvbnN0IHIgPSBwWydyZWN1cnJlbmNlJ10gYXMgc3RyaW5nO1xuICAgIGlmIChyICE9PSBTY2hlZHVsZVJlY3VycmVuY2UuV2Vla2x5KSB7XG4gICAgICBwWyd3ZWVrRGF5cyddID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5jbGVhbkRhaWx5V2Vla2x5RmllbGRzKHAsIHIpO1xuICAgIHRoaXMuY2xlYW5Nb250aGx5RmllbGRzKHAsIHIpO1xuICAgIHRoaXMuY2xlYW5ZZWFybHlGaWVsZHMocCwgcik7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuRGFpbHlXZWVrbHlGaWVsZHMocDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHI6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHIgPT09IFNjaGVkdWxlUmVjdXJyZW5jZS5EYWlseSB8fFxuICAgICAgciA9PT0gU2NoZWR1bGVSZWN1cnJlbmNlLldlZWtseVxuICAgICkge1xuICAgICAgcFsncmVwZWF0V2hlbiddID0gbnVsbDtcbiAgICAgIHBbJ3JlcGVhdFdoZW5EYXknXSA9IG51bGw7XG4gICAgICBwWydyZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXknXSA9IG51bGw7XG4gICAgICBwWydyZXBlYXRXaGVuV2Vla01vbnRoJ10gPSBudWxsO1xuICAgICAgcFsncmVwZWF0V2hlbk1vbnRoJ10gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5Nb250aGx5RmllbGRzKHA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCByOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAociA9PT0gU2NoZWR1bGVSZWN1cnJlbmNlLk1vbnRobHkpIHtcbiAgICAgIHBbJ3JlcGVhdFdoZW5Nb250aCddID0gbnVsbDtcbiAgICAgIHRoaXMuY2xlYW5SZXBlYXRXaGVuRmllbGRzKHApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5ZZWFybHlGaWVsZHMocDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHI6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChyID09PSBTY2hlZHVsZVJlY3VycmVuY2UuWWVhcmx5KSB7XG4gICAgICB0aGlzLmNsZWFuUmVwZWF0V2hlbkZpZWxkcyhwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFuUmVwZWF0V2hlbkZpZWxkcyhwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIGlmIChwWydyZXBlYXRXaGVuJ10gPT09IFJlcGVhdFdoZW4uSW5EYXkpIHtcbiAgICAgIHBbJ3JlcGVhdFdoZW5PcmRpbmFsV2Vla0RheSddID0gbnVsbDtcbiAgICAgIHBbJ3JlcGVhdFdoZW5XZWVrTW9udGgnXSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBbJ3JlcGVhdFdoZW5EYXknXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldFJlY3VycmVuY2VEZWZhdWx0cyhkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNjaGVkdWxlRm9ybSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkID0gZGF0ZSB8fCBuZXcgRGF0ZSgpO1xuICAgIHRoaXMuc2NoZWR1bGVGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgcmVjdXJyZW5jZTogU2NoZWR1bGVSZWN1cnJlbmNlLkRhaWx5LFxuICAgICAgcmVjdXJyZW5jZUludGVydmFsOiAxLFxuICAgICAgd2Vla0RheXM6IFtnZXRDdXJyZW50V2Vla0RheShkKV0sXG4gICAgICByZXBlYXRXaGVuOiBSZXBlYXRXaGVuLkluRGF5LFxuICAgICAgcmVwZWF0V2hlbkRheTogZC5nZXREYXRlKCksXG4gICAgICByZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXk6IGdldE9yZGluYWxGb3JEYXRlKGQpLFxuICAgICAgcmVwZWF0V2hlbldlZWtNb250aDogZ2V0Q3VycmVudFdlZWtEYXkoZCksXG4gICAgICByZXBlYXRXaGVuTW9udGg6IGdldEN1cnJlbnRNb250aChkKVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHNob3dSZWN1cnJlbmNlRmllbGRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNjaGVkdWxlRm9ybT8uZ2V0KCd3aXRoUmVjdXJyZW5jZScpPy52YWx1ZSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGdldCBjdXJyZW50UmVjdXJyZW5jZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNjaGVkdWxlRm9ybT8uZ2V0KCdyZWN1cnJlbmNlJyk/LnZhbHVlO1xuICB9XG5cbiAgZ2V0IGN1cnJlbnRSZXBlYXRXaGVuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc2NoZWR1bGVGb3JtPy5nZXQoJ3JlcGVhdFdoZW4nKT8udmFsdWU7XG4gIH1cblxuICBnZXQgc2hvd1dlZWtEYXlzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRSZWN1cnJlbmNlID09PSBTY2hlZHVsZVJlY3VycmVuY2UuV2Vla2x5O1xuICB9XG5cbiAgZ2V0IHNob3dSZXBlYXRXaGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmN1cnJlbnRSZWN1cnJlbmNlID09PSBTY2hlZHVsZVJlY3VycmVuY2UuTW9udGhseSB8fFxuICAgICAgdGhpcy5jdXJyZW50UmVjdXJyZW5jZSA9PT0gU2NoZWR1bGVSZWN1cnJlbmNlLlllYXJseVxuICAgICk7XG4gIH1cblxuICBnZXQgc2hvd1JlcGVhdFdoZW5EYXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd1JlcGVhdFdoZW4gJiYgdGhpcy5jdXJyZW50UmVwZWF0V2hlbiA9PT0gUmVwZWF0V2hlbi5JbkRheTtcbiAgfVxuXG4gIGdldCBzaG93T3JkaW5hbEZpZWxkcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5zaG93UmVwZWF0V2hlbiAmJlxuICAgICAgdGhpcy5jdXJyZW50UmVwZWF0V2hlbiA9PT0gUmVwZWF0V2hlbi5Jbk9yZGluYWxXZWVrRGF5XG4gICAgKTtcbiAgfVxuXG4gIGdldCBzaG93TW9udGhGaWVsZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UmVjdXJyZW5jZSA9PT0gU2NoZWR1bGVSZWN1cnJlbmNlLlllYXJseTtcbiAgfVxuXG4gIGdldE9yaWdpbkxhYmVsKG86IFBhcnRpY2lwYW50T3JpZ2luKTogc3RyaW5nIHsgcmV0dXJuIF9nZXRPcmlnaW5MYWJlbCh0aGlzLnQsIG8pOyB9XG4gIGdldE9yaWdpbkljb24obzogUGFydGljaXBhbnRPcmlnaW4pOiBzdHJpbmcgeyByZXR1cm4gX2dldE9yaWdpbkljb24obyk7IH1cbiAgZ2V0UGFydGljaXBhbnROYW1lKHA6IFNjaGVkdWxlUGFydGljaXBhbnQpOiBzdHJpbmcgeyByZXR1cm4gX2dldFBhcnRpY2lwYW50TmFtZShwKTsgfVxuICBnZXRQYXJ0aWNpcGFudFR5cGUocDogU2NoZWR1bGVQYXJ0aWNpcGFudCk6IHN0cmluZyB7IHJldHVybiBfZ2V0UGFydGljaXBhbnRUeXBlKHRoaXMudCwgcCk7IH1cbiAgZ2V0UGFydGljaXBhbnRUeXBlSWNvbihwOiBTY2hlZHVsZVBhcnRpY2lwYW50KTogc3RyaW5nIHsgcmV0dXJuIF9nZXRQYXJ0aWNpcGFudFR5cGVJY29uKHApOyB9XG4gIGdldFByaW9yaXR5U2V2ZXJpdHkocDogc3RyaW5nKTogUHJpb3JpdHlTZXZlcml0eSB7IHJldHVybiBfZ2V0UHJpb3JpdHlTZXZlcml0eShwKTsgfVxuICBnZXRQcmlvcml0eUxhYmVsKHA6IHN0cmluZyk6IHN0cmluZyB7IHJldHVybiBfZ2V0UHJpb3JpdHlMYWJlbCh0aGlzLnQsIHApOyB9XG4gIGdldENvbmZpcm1hdGlvblNldmVyaXR5KGM6IHN0cmluZyk6IENvbmZpcm1hdGlvblNldmVyaXR5IHsgcmV0dXJuIF9nZXRDb25maXJtYXRpb25TZXZlcml0eShjKTsgfVxuICBnZXRDb25maXJtYXRpb25MYWJlbChjOiBzdHJpbmcpOiBzdHJpbmcgeyByZXR1cm4gX2dldENvbmZpcm1hdGlvbkxhYmVsKHRoaXMudCwgYyk7IH1cblxuICBwcml2YXRlIGdldERlZmF1bHRTdGFydFRpbWUoZDogRGF0ZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldERlZmF1bHRTdGFydFRpbWUoZCk7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRFbmRUaW1lKHN0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXREZWZhdWx0RW5kVGltZShzdCk7XG4gIH1cbn1cbiIsIjwhLS0gU2NoZWR1bGUgRHJhd2VyIC0tPlxuPHAtZHJhd2VyXG4gIFsodmlzaWJsZSldPVwidmlzaWJsZVwiXG4gIHBvc2l0aW9uPVwicmlnaHRcIlxuICBbc3R5bGVdPVwieyB3aWR0aDogJzg1dncnLCAnbWF4LXdpZHRoJzogJzEyMDBweCcgfVwiXG4gIFttb2RhbF09XCJ0cnVlXCJcbiAgKG9uSGlkZSk9XCJvbkNhbmNlbCgpXCJcbj5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZHJhd2VyLXRpdGxlXCI+XG4gICAgICA8aSBjbGFzcz1cInBpIHBpLWNhbGVuZGFyXCI+PC9pPlxuICAgICAge3tcbiAgICAgICAgaXNFZGl0aW5nXG4gICAgICAgICAgPyAoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9zY2hlZHVsZV9lZGl0JyB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICA6ICgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3NjaGVkdWxlX25ldycgfCB0cmFuc2xhdGUpXG4gICAgICB9fVxuICAgIDwvc3Bhbj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8ZGl2IGNsYXNzPVwiZHJhd2VyLWxheW91dFwiICpuZ0lmPVwic2NoZWR1bGVGb3JtXCI+XG4gICAgPCEtLSBMZWZ0OiBGb3JtIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkcmF3ZXItbGVmdFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImRyYXdlci1zZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICB7eyAnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3NjaGVkdWxlX2RldGFpbHMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNpYS1keW5hbWljLWZvcm1cbiAgICAgICAgI2RldGFpbEZvcm1cbiAgICAgICAgW3NlY3Rpb25zXT1cIlt7IGZpZWxkczogc2NoZWR1bGVEZXRhaWxGaWVsZHMgfV1cIlxuICAgICAgICBbZW50aXR5RGF0YV09XCJlbnRpdHlEYXRhRm9yRm9ybVwiXG4gICAgICAgIFttb2RlXT1cIidmb3JtJ1wiXG4gICAgICAgIFtzaG93U3VibWl0QnV0dG9uXT1cImZhbHNlXCJcbiAgICAgICAgW3Nob3dDYW5jZWxCdXR0b25dPVwiZmFsc2VcIlxuICAgICAgICAoZm9ybVJlYWR5KT1cIm9uRGV0YWlsRm9ybVJlYWR5KCRldmVudClcIlxuICAgICAgPjwvc2lhLWR5bmFtaWMtZm9ybT5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUmlnaHQ6IFJlY3VycmVuY2UgKyBQYXJ0aWNpcGFudHMgLS0+XG4gICAgPGRpdiBjbGFzcz1cImRyYXdlci1yaWdodFwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImRyYXdlci1zZWN0aW9uXCJcbiAgICAgICAgKm5nSWY9XCJzaG93UmVjdXJyZW5jZUZpZWxkc1wiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcmF3ZXItc2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXJlcGxheVwiPjwvaT5cbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcmVjdXJyZW5jZV9jb25maWcnXG4gICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGZvcm1cbiAgICAgICAgICBbZm9ybUdyb3VwXT1cInNjaGVkdWxlRm9ybVwiXG4gICAgICAgICAgY2xhc3M9XCJkcmF3ZXItZm9ybVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkIGZsZXgtMVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicmVjdXJyZW5jZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcmVjdXJyZW5jZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHAtZHJvcGRvd25cbiAgICAgICAgICAgICAgICBpZD1cInJlY3VycmVuY2VcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJlY3VycmVuY2VcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInJlY3VycmVuY2VPcHRpb25zXCJcbiAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgICAgID48L3AtZHJvcGRvd24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkIGZsZXgtMVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicmVjdXJyZW5jZUludGVydmFsXCI+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcmVjdXJyZW5jZV9pbnRlcnZhbCdcbiAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlclxuICAgICAgICAgICAgICAgIGlkPVwicmVjdXJyZW5jZUludGVydmFsXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZWN1cnJlbmNlSW50ZXJ2YWxcIlxuICAgICAgICAgICAgICAgIFttaW5dPVwiMVwiXG4gICAgICAgICAgICAgICAgW21heF09XCI5OVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICA+PC9wLWlucHV0TnVtYmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXJvd1wiXG4gICAgICAgICAgICAqbmdJZj1cInNob3dXZWVrRGF5c1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQgZmxleC0xXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ3ZWVrRGF5c1wiPlxuICAgICAgICAgICAgICAgIHt7ICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfd2Vla19kYXlzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cC1tdWx0aVNlbGVjdFxuICAgICAgICAgICAgICAgIGlkPVwid2Vla0RheXNcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIndlZWtEYXlzXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJ3ZWVrRGF5T3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIlxuICAgICAgICAgICAgICAgICAgJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9zZWxlY3Rfd2Vla19kYXknXG4gICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbbWF4U2VsZWN0ZWRMYWJlbHNdPVwiN1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICA+PC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLXJvd1wiXG4gICAgICAgICAgICAqbmdJZj1cInNob3dSZXBlYXRXaGVuXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZCBmbGV4LTFcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInJlcGVhdFdoZW5cIj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9yZXBlYXRfd2hlbicgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgICAgICAgICAgIGlkPVwicmVwZWF0V2hlblwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicmVwZWF0V2hlblwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNdPVwicmVwZWF0V2hlbk9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICAgICAgPjwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQgZmxleC0xXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJzaG93UmVwZWF0V2hlbkRheVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJyZXBlYXRXaGVuRGF5XCI+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcmVwZWF0X3doZW5fZGF5J1xuICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwLWlucHV0TnVtYmVyXG4gICAgICAgICAgICAgICAgaWQ9XCJyZXBlYXRXaGVuRGF5XCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZXBlYXRXaGVuRGF5XCJcbiAgICAgICAgICAgICAgICBbbWluXT1cIjFcIlxuICAgICAgICAgICAgICAgIFttYXhdPVwiMzFcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICAgICAgPjwvcC1pbnB1dE51bWJlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQgZmxleC0xXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJzaG93T3JkaW5hbEZpZWxkc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJyZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXlcIj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9vcmRpbmFsX3dlZWtfZGF5J1xuICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgaWQ9XCJyZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXlcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJlcGVhdFdoZW5PcmRpbmFsV2Vla0RheVwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNdPVwib3JkaW5hbE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICAgICAgPjwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tZmllbGQgZmxleC0xXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJzaG93T3JkaW5hbEZpZWxkc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJyZXBlYXRXaGVuV2Vla01vbnRoXCI+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfd2Vla19tb250aCcgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgICAgICAgICAgIGlkPVwicmVwZWF0V2hlbldlZWtNb250aFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicmVwZWF0V2hlbldlZWtNb250aFwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNdPVwid2Vla0RheU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICAgICAgPjwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1yb3dcIlxuICAgICAgICAgICAgKm5nSWY9XCJzaG93TW9udGhGaWVsZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQgZmxleC0xXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJyZXBlYXRXaGVuTW9udGhcIj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9yZXBlYXRfbW9udGgnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHAtZHJvcGRvd25cbiAgICAgICAgICAgICAgICBpZD1cInJlcGVhdFdoZW5Nb250aFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicmVwZWF0V2hlbk1vbnRoXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJtb250aE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICAgICAgPjwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cInJlY3VycmVuY2UtZGVzY3JpcHRpb25cIlxuICAgICAgICAgICpuZ0lmPVwicmVjdXJyZW5jZURlc2NyaXB0aW9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktaW5mby1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgPHNwYW4+e3sgcmVjdXJyZW5jZURlc2NyaXB0aW9uIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8cC1kaXZpZGVyPjwvcC1kaXZpZGVyPlxuXG4gICAgICA8IS0tIFBhcnRpY2lwYW50cyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkcmF3ZXItc2VjdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJhd2VyLXNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS11c2Vyc1wiPjwvaT5cbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIHt7ICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcGFydGljaXBhbnRzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYXJ0aWNpcGFudC1zZWFyY2hcIj5cbiAgICAgICAgICA8cC1hdXRvQ29tcGxldGVcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRQYXJ0aWNpcGFudExvb2t1cFwiXG4gICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCJcbiAgICAgICAgICAgIFtzdWdnZXN0aW9uc109XCJwYXJ0aWNpcGFudFN1Z2dlc3Rpb25zXCJcbiAgICAgICAgICAgIChjb21wbGV0ZU1ldGhvZCk9XCJcbiAgICAgICAgICAgICAgb25TZWFyY2hQYXJ0aWNpcGFudHMoJGV2ZW50KVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChvblNlbGVjdCk9XCJcbiAgICAgICAgICAgICAgb25TZWxlY3RQYXJ0aWNpcGFudCgkZXZlbnQudmFsdWUpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKG9uRm9jdXMpPVwiXG4gICAgICAgICAgICAgIG9uU2VhcmNoUGFydGljaXBhbnRzKHsgcXVlcnk6ICcnIH0pXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJuYW1lXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9zZWFyY2hfcGFydGljaXBhbnQnXG4gICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbbWluTGVuZ3RoXT1cIjBcIlxuICAgICAgICAgICAgW2ZvcmNlU2VsZWN0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtmbHVpZF09XCJ0cnVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgbGV0LWl0ZW1cbiAgICAgICAgICAgICAgcFRlbXBsYXRlPVwiaXRlbVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXJ0aWNpcGFudC1zdWdnZXN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJnZXRPcmlnaW5JY29uKGl0ZW0ub3JpZ2luKVwiXG4gICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInBhcnRpY2lwYW50LXN1Z2dlc3Rpb24taW5mb1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYXJ0aWNpcGFudC1zdWdnZXN0aW9uLW5hbWVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGFydGljaXBhbnQtc3VnZ2VzdGlvbi1kZXRhaWxcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0ucmVmZXJlbmNlTmFtZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ucmVmZXJlbmNlTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInBhcnRpY2lwYW50LXN1Z2dlc3Rpb24tb3JpZ2luXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBnZXRPcmlnaW5MYWJlbChpdGVtLm9yaWdpbikgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L3AtYXV0b0NvbXBsZXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAhcGFydGljaXBhbnRzTG9hZGluZyAmJlxuICAgICAgICAgICAgYWRkZWRQYXJ0aWNpcGFudHMubGVuZ3RoID09PSAwXG4gICAgICAgICAgXCJcbiAgICAgICAgICBjbGFzcz1cInBhcnRpY2lwYW50cy1lbXB0eVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXVzZXJzXCI+PC9pPlxuICAgICAgICAgIDxwPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9ub19wYXJ0aWNpcGFudHMnXG4gICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPC9wPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHAtdGFibGVcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgIXBhcnRpY2lwYW50c0xvYWRpbmcgJiZcbiAgICAgICAgICAgIGFkZGVkUGFydGljaXBhbnRzLmxlbmd0aCA+IDBcbiAgICAgICAgICBcIlxuICAgICAgICAgIFt2YWx1ZV09XCJhZGRlZFBhcnRpY2lwYW50c1wiXG4gICAgICAgICAgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXNtIHAtZGF0YXRhYmxlLXN0cmlwZWRcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj5cbiAgICAgICAgICAgICAgICB7eyAnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX25hbWUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAgIHNjb3BlPVwiY29sXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1wYXJ0aWNpcGFudC10eXBlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3BhcnRpY2lwYW50X3R5cGUnXG4gICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLWFjdGlvbnNcIlxuICAgICAgICAgICAgICA+PC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1wPlxuICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhcnRpY2lwYW50LW5hbWUtY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgcC5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwLnJlZmVyZW5jZU5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBhcnRpY2lwYW50LXJlZmVyZW5jZVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IHAucmVmZXJlbmNlTmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhcnRpY2lwYW50LXR5cGUtY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImdldE9yaWdpbkljb24ocC5vcmlnaW4pXCJcbiAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0T3JpZ2luTGFiZWwocC5vcmlnaW4pIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS10cmFzaFwiXG4gICAgICAgICAgICAgICAgICBbcm91bmRlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk9XCJkYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwib25SZW1vdmVQYXJ0aWNpcGFudChwKVwiXG4gICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcmVtb3ZlJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgICAgICAgPjwvcC1idXR0b24+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvcC10YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZm9vdGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImRyYXdlci1mb290ZXJcIj5cbiAgICAgIDxwLWJ1dHRvblxuICAgICAgICBbbGFiZWxdPVwiJ2NybXguY29tcG9uZW50cy5jYW5jZWwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgaWNvbj1cInBpIHBpLXRpbWVzXCJcbiAgICAgICAgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIlxuICAgICAgICBbb3V0bGluZWRdPVwidHJ1ZVwiXG4gICAgICAgIChvbkNsaWNrKT1cIm9uQ2FuY2VsKClcIlxuICAgICAgPjwvcC1idXR0b24+XG4gICAgICA8cC1idXR0b25cbiAgICAgICAgW2xhYmVsXT1cIidjcm14LmNvbXBvbmVudHMuc2F2ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICBpY29uPVwicGkgcGktY2hlY2tcIlxuICAgICAgICAob25DbGljayk9XCJvblNhdmUoKVwiXG4gICAgICA+PC9wLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvcC1kcmF3ZXI+XG4iXX0=
749
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGUtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlL3NjaGVkdWxlLWZvcm0vc2NoZWR1bGUtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NjaGVkdWxlL3NjaGVkdWxlLWZvcm0vc2NoZWR1bGUtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBMEIsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEcsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8s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RSxDQUFDLENBQUM7SUFDL0IsQ0FBQzt3R0F4eUJVLHFCQUFxQjs0RkFBckIscUJBQXFCLHlUQzFEbEMscW5ZQWlZQSx1akhEaFZJLFlBQVksa0lBQUUsV0FBVyxtbUJBQUUsbUJBQW1CLCtVQUM5QyxZQUFZLHdoQkFBRSxZQUFZLDhCQUFFLFlBQVksaWFBQUUsY0FBYyxxckNBQ3hELGlCQUFpQixreUJBQUUsaUJBQWlCLGk1Q0FBRSxTQUFTLDhCQUFFLGFBQWEsc1hBQzlELGFBQWEsMkpBQUUsV0FBVyw0K0RBQUUsa0JBQWtCLGl3Q0FDOUMsYUFBYSxrREFBRSxvQkFBb0I7OzRGQUsxQixxQkFBcUI7a0JBYmpDLFNBQVM7K0JBQ0UsaUJBQWlCLGNBQ2YsSUFBSSxXQUNQO3dCQUNQLFlBQVksRUFBRSxXQUFXLEVBQUUsbUJBQW1CO3dCQUM5QyxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxjQUFjO3dCQUN4RCxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsYUFBYTt3QkFDOUQsYUFBYSxFQUFFLFdBQVcsRUFBRSxrQkFBa0I7d0JBQzlDLGFBQWEsRUFBRSxvQkFBb0I7cUJBQ3BDOzBOQUtRLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNO2dCQUVrQixtQkFBbUI7c0JBQTNDLFNBQVM7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3ViamVjdCwgZGVib3VuY2VUaW1lLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7IERpYWxvZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGlhbG9nJztcbmltcG9ydCB7IERyYXdlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHJhd2VyJztcbmltcG9ydCB7IERyb3Bkb3duTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9kcm9wZG93bic7XG5pbXBvcnQgeyBJbnB1dE51bWJlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvaW5wdXRudW1iZXInO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL211bHRpc2VsZWN0JztcbmltcG9ydCB7IFRhZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFnJztcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xuaW1wb3J0IHsgRGl2aWRlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZGl2aWRlcic7XG5pbXBvcnQgeyBUYWJsZU1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xuaW1wb3J0IHsgQXV0b0NvbXBsZXRlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgRHluYW1pY0Zvcm1Db21wb25lbnQsIER5bmFtaWNGb3JtRmllbGRDb25maWcsIFRyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9jb21wb25lbnRzLWFpJztcbmltcG9ydCB7IEN1cnJlbnRDb2xsYWJvcmF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY3VycmVudC1jb2xsYWJvcmF0b3IvY3VycmVudC1jb2xsYWJvcmF0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBTY2hlZHVsZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zY2hlZHVsZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNjaGVkdWxlVHlwZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zY2hlZHVsZS10eXBlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NoZWR1bGVQYXJ0aWNpcGFudCB9IGZyb20gJy4uL2VudGl0aWVzL3NjaGVkdWxlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQYXJ0aWNpcGFudExvb2t1cCwgUGFydGljaXBhbnRPcmlnaW4gfSBmcm9tICcuLi9lbnRpdGllcy9wYXJ0aWNpcGFudC1sb29rdXAuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNjaGVkdWxlVHlwZSB9IGZyb20gJy4uL2VudGl0aWVzL3NjaGVkdWxlLXR5cGUuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIFNjaGVkdWxlUHJpb3JpdHksIFNjaGVkdWxlUmVjdXJyZW5jZSwgV2Vla0RheSwgUmVwZWF0V2hlbixcbiAgT3JkaW5hbFdlZWtEYXksIE1vbnRoXG59IGZyb20gJy4uL2VudW1zL3NjaGVkdWxlLmVudW1zJztcbmltcG9ydCB7XG4gIGZvcm1hdERhdGVUb1N0cmluZywgdG9EYXRlU3RyaW5nLCB0b1RpbWVTdHJpbmcsXG4gIGdldERlZmF1bHRTdGFydFRpbWUsIGdldERlZmF1bHRFbmRUaW1lLFxuICBnZXRDdXJyZW50V2Vla0RheSwgZ2V0Q3VycmVudE1vbnRoLCBnZXRPcmRpbmFsRm9yRGF0ZVxufSBmcm9tICcuLi9oZWxwZXJzL3NjaGVkdWxlLWRhdGUuaGVscGVycyc7XG5pbXBvcnQge1xuICBnZXRPcmlnaW5MYWJlbCBhcyBfZ2V0T3JpZ2luTGFiZWwsIGdldE9yaWdpbkljb24gYXMgX2dldE9yaWdpbkljb24sXG4gIGdldFBhcnRpY2lwYW50TmFtZSBhcyBfZ2V0UGFydGljaXBhbnROYW1lLCBnZXRQYXJ0aWNpcGFudFR5cGUgYXMgX2dldFBhcnRpY2lwYW50VHlwZSxcbiAgZ2V0UGFydGljaXBhbnRUeXBlSWNvbiBhcyBfZ2V0UGFydGljaXBhbnRUeXBlSWNvbiwgZ2V0UHJpb3JpdHlTZXZlcml0eSBhcyBfZ2V0UHJpb3JpdHlTZXZlcml0eSxcbiAgZ2V0UHJpb3JpdHlMYWJlbCBhcyBfZ2V0UHJpb3JpdHlMYWJlbCwgZ2V0Q29uZmlybWF0aW9uU2V2ZXJpdHkgYXMgX2dldENvbmZpcm1hdGlvblNldmVyaXR5LFxuICBnZXRDb25maXJtYXRpb25MYWJlbCBhcyBfZ2V0Q29uZmlybWF0aW9uTGFiZWwsXG4gIFByaW9yaXR5U2V2ZXJpdHksIENvbmZpcm1hdGlvblNldmVyaXR5XG59IGZyb20gJy4uL2hlbHBlcnMvc2NoZWR1bGUtZGlzcGxheS5oZWxwZXJzJztcblxuLyoqIFMxMDk6IEV4dHJhY3QgbWFnaWMgbnVtYmVycyB0byBuYW1lZCBjb25zdGFudHMgKi9cbmNvbnN0IE1BWF9OQU1FX0xFTkdUSCA9IDI1NTtcbmNvbnN0IERFQk9VTkNFX01TID0gNTAwO1xuY29uc3QgUEFSVElDSVBBTlRfU0VBUkNIX0xJTUlUID0gNTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncy1zY2hlZHVsZS1mb3JtJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLCBEaWFsb2dNb2R1bGUsIERyYXdlck1vZHVsZSwgRHJvcGRvd25Nb2R1bGUsXG4gICAgSW5wdXROdW1iZXJNb2R1bGUsIE11bHRpU2VsZWN0TW9kdWxlLCBUYWdNb2R1bGUsIFRvb2x0aXBNb2R1bGUsXG4gICAgRGl2aWRlck1vZHVsZSwgVGFibGVNb2R1bGUsIEF1dG9Db21wbGV0ZU1vZHVsZSxcbiAgICBUcmFuc2xhdGVQaXBlLCBEeW5hbWljRm9ybUNvbXBvbmVudFxuICBdLFxuICB0ZW1wbGF0ZVVybDogJy4vc2NoZWR1bGUtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9zY2hlZHVsZS1mb3JtLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBTY2hlZHVsZUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSB2aXNpYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNlbGVjdGVkRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIEBPdXRwdXQoKSB2aXNpYmxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgc2F2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBAVmlld0NoaWxkKCdkZXRhaWxGb3JtJykgZGV0YWlsRm9ybUNvbXBvbmVudCE6IER5bmFtaWNGb3JtQ29tcG9uZW50O1xuXG4gIHNjaGVkdWxlRGV0YWlsRmllbGRzOiBEeW5hbWljRm9ybUZpZWxkQ29uZmlnW10gPSBbXTtcbiAgZW50aXR5RGF0YUZvckZvcm06IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCA9IG51bGw7XG4gIHNjaGVkdWxlRm9ybSE6IEZvcm1Hcm91cDtcbiAgaXNFZGl0aW5nID0gZmFsc2U7XG4gIGN1cnJlbnRDb2xsYWJvcmF0b3JJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHNjaGVkdWxlVHlwZXM6IFNjaGVkdWxlVHlwZVtdID0gW107XG4gIHBhcnRpY2lwYW50czogU2NoZWR1bGVQYXJ0aWNpcGFudFtdID0gW107XG4gIHBhcnRpY2lwYW50c0xvYWRpbmcgPSBmYWxzZTtcbiAgcmVjdXJyZW5jZURlc2NyaXB0aW9uID0gJyc7XG5cbiAgLyoqIFMyOTMzOiBNYXJrIGFzIHJlYWRvbmx5ICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVjdXJyZW5jZUNoYW5nZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHBhcnRpY2lwYW50U3VnZ2VzdGlvbnM6IFBhcnRpY2lwYW50TG9va3VwW10gPSBbXTtcbiAgc2VsZWN0ZWRQYXJ0aWNpcGFudExvb2t1cDogUGFydGljaXBhbnRMb29rdXAgfCBudWxsID0gbnVsbDtcbiAgYWRkZWRQYXJ0aWNpcGFudHM6IFBhcnRpY2lwYW50TG9va3VwW10gPSBbXTtcblxuICBwcmlvcml0eU9wdGlvbnM6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W10gPSBbXTtcbiAgcmVjdXJyZW5jZU9wdGlvbnM6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W10gPSBbXTtcbiAgd2Vla0RheU9wdGlvbnM6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W10gPSBbXTtcbiAgcmVwZWF0V2hlbk9wdGlvbnM6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W10gPSBbXTtcbiAgb3JkaW5hbE9wdGlvbnM6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W10gPSBbXTtcbiAgbW9udGhPcHRpb25zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG5cbiAgLyoqIFMyOTMzOiBNYXJrIGNvbnN0cnVjdG9yLWluamVjdGVkIHNlcnZpY2VzIGFzIHJlYWRvbmx5ICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NoZWR1bGVTZXJ2aWNlOiBTY2hlZHVsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzY2hlZHVsZVR5cGVTZXJ2aWNlOiBTY2hlZHVsZVR5cGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3VycmVudENvbGxhYm9yYXRvclNlcnZpY2U6IEN1cnJlbnRDb2xsYWJvcmF0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdDogVHJhbnNsYXRpb25TZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRPcHRpb25zKCk7XG4gICAgdGhpcy5pbml0RGV0YWlsRmllbGRzKCk7XG4gICAgdGhpcy5pbml0Rm9ybSgpO1xuICAgIHRoaXMubG9hZFNjaGVkdWxlVHlwZXMoKTtcbiAgICB0aGlzLmxvYWRDb2xsYWJvcmF0b3IoKTtcbiAgICB0aGlzLnNldHVwUmVjdXJyZW5jZURlc2NyaXB0aW9uV2F0Y2hlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkQ29sbGFib3JhdG9yKCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudENvbGxhYm9yYXRvclNlcnZpY2UubG9hZCgpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoY29sbGFiKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudENvbGxhYm9yYXRvcklkID0gY29sbGFiPy5pZCA/PyBudWxsO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuY3VycmVudENvbGxhYm9yYXRvcklkID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdE9wdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5wcmlvcml0eU9wdGlvbnMgPSBbXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcHJpb3JpdHlfbG93JyksIHZhbHVlOiBTY2hlZHVsZVByaW9yaXR5LkxvdyB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3ByaW9yaXR5X21lZGl1bScpLCB2YWx1ZTogU2NoZWR1bGVQcmlvcml0eS5NZWRpdW0gfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9wcmlvcml0eV9oaWdoJyksIHZhbHVlOiBTY2hlZHVsZVByaW9yaXR5LkhpZ2ggfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9wcmlvcml0eV9jcml0aWNhbCcpLCB2YWx1ZTogU2NoZWR1bGVQcmlvcml0eS5Dcml0aWNhbCB9XG4gICAgXTtcbiAgICB0aGlzLnJlY3VycmVuY2VPcHRpb25zID0gW1xuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3JlY3VycmVuY2VfZGFpbHknKSwgdmFsdWU6IFNjaGVkdWxlUmVjdXJyZW5jZS5EYWlseSB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3JlY3VycmVuY2Vfd2Vla2x5JyksIHZhbHVlOiBTY2hlZHVsZVJlY3VycmVuY2UuV2Vla2x5IH0sXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcmVjdXJyZW5jZV9tb250aGx5JyksIHZhbHVlOiBTY2hlZHVsZVJlY3VycmVuY2UuTW9udGhseSB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3JlY3VycmVuY2VfeWVhcmx5JyksIHZhbHVlOiBTY2hlZHVsZVJlY3VycmVuY2UuWWVhcmx5IH1cbiAgICBdO1xuICAgIHRoaXMud2Vla0RheU9wdGlvbnMgPSBbXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfc3VuZGF5JyksIHZhbHVlOiBXZWVrRGF5LlN1bmRheSB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX21vbmRheScpLCB2YWx1ZTogV2Vla0RheS5Nb25kYXkgfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV90dWVzZGF5JyksIHZhbHVlOiBXZWVrRGF5LlR1ZXNkYXkgfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV93ZWRuZXNkYXknKSwgdmFsdWU6IFdlZWtEYXkuV2VkbmVzZGF5IH0sXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfdGh1cnNkYXknKSwgdmFsdWU6IFdlZWtEYXkuVGh1cnNkYXkgfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9mcmlkYXknKSwgdmFsdWU6IFdlZWtEYXkuRnJpZGF5IH0sXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfc2F0dXJkYXknKSwgdmFsdWU6IFdlZWtEYXkuU2F0dXJkYXkgfVxuICAgIF07XG4gICAgdGhpcy5yZXBlYXRXaGVuT3B0aW9ucyA9IFtcbiAgICAgIHsgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9yZXBlYXRfaW5fZGF5JyksIHZhbHVlOiBSZXBlYXRXaGVuLkluRGF5IH0sXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcmVwZWF0X2luX29yZGluYWxfd2Vla19kYXknKSwgdmFsdWU6IFJlcGVhdFdoZW4uSW5PcmRpbmFsV2Vla0RheSB9XG4gICAgXTtcbiAgICB0aGlzLm9yZGluYWxPcHRpb25zID0gW1xuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX29yZGluYWxfZmlyc3QnKSwgdmFsdWU6IE9yZGluYWxXZWVrRGF5LkZpcnN0IH0sXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfb3JkaW5hbF9zZWNvbmQnKSwgdmFsdWU6IE9yZGluYWxXZWVrRGF5LlNlY29uZCB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX29yZGluYWxfdGhpcmQnKSwgdmFsdWU6IE9yZGluYWxXZWVrRGF5LlRoaXJkIH0sXG4gICAgICB7IGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfb3JkaW5hbF9mb3VydGgnKSwgdmFsdWU6IE9yZGluYWxXZWVrRGF5LkZvdXJ0aCB9LFxuICAgICAgeyBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX29yZGluYWxfbGFzdCcpLCB2YWx1ZTogT3JkaW5hbFdlZWtEYXkuTGFzdCB9XG4gICAgXTtcbiAgICB0aGlzLm1vbnRoT3B0aW9ucyA9IE9iamVjdC52YWx1ZXMoTW9udGgpLm1hcChtID0+ICh7XG4gICAgICBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZShgY3JteC5jb21wb25lbnRzLnNjaGVkdWxlXyR7bS50b0xvd2VyQ2FzZSgpfWApLCB2YWx1ZTogbVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdERldGFpbEZpZWxkcygpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IGRlZmF1bHRTdGFydCA9IHRoaXMuZ2V0RGVmYXVsdFN0YXJ0VGltZShub3cpO1xuICAgIGNvbnN0IGRlZmF1bHRFbmQgPSB0aGlzLmdldERlZmF1bHRFbmRUaW1lKGRlZmF1bHRTdGFydCk7XG4gICAgY29uc3QgZnVsbFJvdyA9IHsgeGw6IDEyLCBsZzogMTIsIG1kOiAxMiwgc206IDEyIH07XG4gICAgY29uc3QgaGFsZlJvdyA9IHsgeGw6IDYsIGxnOiA2LCBtZDogNiwgc206IDEyIH07XG4gICAgdGhpcy5zY2hlZHVsZURldGFpbEZpZWxkcyA9IFtcbiAgICAgIHsgZmllbGQ6ICduYW1lJywgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9uYW1lJyksIHR5cGU6ICd0ZXh0JywgcmVxdWlyZWQ6IHRydWUsIHZhbGlkYXRvcnM6IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aChNQVhfTkFNRV9MRU5HVEgpXSwgcGxhY2Vob2xkZXI6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9lbnRlcl9uYW1lJyksIG1heExlbmd0aDogTUFYX05BTUVfTEVOR1RILCBzaXplOiBmdWxsUm93IH0sXG4gICAgICB7IGZpZWxkOiAncHJpb3JpdHknLCBsYWJlbDogdGhpcy50LnRyYW5zbGF0ZSgnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3ByaW9yaXR5JyksIHR5cGU6ICdkcm9wZG93bicsIHJlcXVpcmVkOiB0cnVlLCB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sIG9wdGlvbnM6IHRoaXMucHJpb3JpdHlPcHRpb25zLCBvcHRpb25MYWJlbDogJ2xhYmVsJywgb3B0aW9uVmFsdWU6ICd2YWx1ZScsIGRlZmF1bHRWYWx1ZTogU2NoZWR1bGVQcmlvcml0eS5NZWRpdW0sIHNpemU6IGZ1bGxSb3cgfSxcbiAgICAgIHsgZmllbGQ6ICd0eXBlJywgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV90eXBlJyksIHR5cGU6ICdsb29rdXAnLCBsb29rdXBTZXJ2aWNlOiB0aGlzLnNjaGVkdWxlVHlwZVNlcnZpY2UsIGxvb2t1cERpc3BsYXlGaWVsZDogJ25hbWUnLCBsb29rdXBWYWx1ZUZpZWxkOiAnaWQnLCBsb29rdXBTZWFyY2hGaWVsZHM6IFsnbmFtZSddLCBzaG93Q2xlYXI6IHRydWUsIGxvb2t1cEF1dG9jb21wbGV0ZTogdHJ1ZSwgbG9va3VwQ29sdW1uczogW3sgZmllbGQ6ICduYW1lJywgaGVhZGVyOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfbmFtZScpIH1dLCBsb29rdXBGaWx0ZXJzOiBcInN0YXR1cyA9ICdBQ1RJVkUnXCIsIHBsYWNlaG9sZGVyOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfc2VsZWN0X3R5cGUnKSwgc2l6ZTogZnVsbFJvdyB9LFxuICAgICAgeyBmaWVsZDogJ3N0YXJ0RGF0ZScsIGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfc3RhcnRfZGF0ZScpLCB0eXBlOiAnZGF0ZScsIHJlcXVpcmVkOiB0cnVlLCB2YWxpZGF0b3JzOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sIGRlZmF1bHRWYWx1ZTogZm9ybWF0RGF0ZVRvU3RyaW5nKG5vdyksIHNpemU6ICh2OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gdlsnd2l0aFJlY3VycmVuY2UnXSA/IGhhbGZSb3cgOiBmdWxsUm93IH0sXG4gICAgICB7IGZpZWxkOiAnZW5kRGF0ZScsIGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfZW5kX2RhdGUnKSwgdHlwZTogJ2RhdGUnLCB2aXNpYmxlV2hlbjogKHY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2Wyd3aXRoUmVjdXJyZW5jZSddID09PSB0cnVlLCBzaXplOiBoYWxmUm93IH0sXG4gICAgICB7IGZpZWxkOiAnc3RhcnRUaW1lJywgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9zdGFydF90aW1lJyksIHR5cGU6ICd0aW1lJywgZGVmYXVsdFZhbHVlOiBkZWZhdWx0U3RhcnQsIHZpc2libGVXaGVuOiAodjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHZbJ2FsbERheSddICE9PSB0cnVlLCBzaXplOiBoYWxmUm93IH0sXG4gICAgICB7IGZpZWxkOiAnZW5kVGltZScsIGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfZW5kX3RpbWUnKSwgdHlwZTogJ3RpbWUnLCBkZWZhdWx0VmFsdWU6IGRlZmF1bHRFbmQsIHZpc2libGVXaGVuOiAodjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHZbJ2FsbERheSddICE9PSB0cnVlLCBzaXplOiBoYWxmUm93IH0sXG4gICAgICB7IGZpZWxkOiAnYWxsRGF5JywgbGFiZWw6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9hbGxfZGF5JyksIHR5cGU6ICdjaGVja2JveCcsIGRlZmF1bHRWYWx1ZTogZmFsc2UsIHNpemU6IGhhbGZSb3cgfSxcbiAgICAgIHsgZmllbGQ6ICd3aXRoUmVjdXJyZW5jZScsIGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfd2l0aF9yZWN1cnJlbmNlJyksIHR5cGU6ICdjaGVja2JveCcsIGRlZmF1bHRWYWx1ZTogZmFsc2UsIHNpemU6IGhhbGZSb3cgfSxcbiAgICAgIHsgZmllbGQ6ICdjb21tZW50cycsIGxhYmVsOiB0aGlzLnQudHJhbnNsYXRlKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfY29tbWVudHMnKSwgdHlwZTogJ3RleHRhcmVhJywgcGxhY2Vob2xkZXI6IHRoaXMudC50cmFuc2xhdGUoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9lbnRlcl9jb21tZW50cycpLCByb3dzOiAzLCBzaXplOiBmdWxsUm93IH1cbiAgICBdO1xuICB9XG5cbiAgb25EZXRhaWxGb3JtUmVhZHkoZm9ybTogRm9ybUdyb3VwKTogdm9pZCB7XG4gICAgdGhpcy5zY2hlZHVsZUZvcm0gPSBmb3JtO1xuICAgIHRoaXMuYWRkUmVjdXJyZW5jZUNvbnRyb2xzKCk7XG4gICAgdGhpcy5zY2hlZHVsZUZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZShcbiAgICAgICgpID0+IHRoaXMucmVjdXJyZW5jZUNoYW5nZSQubmV4dCgpXG4gICAgKTtcbiAgICB0aGlzLnNldHVwUmVjdXJyZW5jZUZvcm1XYXRjaGVycygpO1xuICB9XG5cbiAgLyoqIFMxMjE6IEFkZCBicmFjZXMgdG8gYWxsIGlmIHN0YXRlbWVudHMgKi9cbiAgcHJpdmF0ZSBhZGRSZWN1cnJlbmNlQ29udHJvbHMoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICBpZiAoIXRoaXMuc2NoZWR1bGVGb3JtLmNvbnRhaW5zKCdpZCcpKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRm9ybS5hZGRDb250cm9sKCdpZCcsIHRoaXMuZmIuY29udHJvbChudWxsKSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zY2hlZHVsZUZvcm0uY29udGFpbnMoJ3JlY3VycmVuY2UnKSkge1xuICAgICAgdGhpcy5zY2hlZHVsZUZvcm0uYWRkQ29udHJvbChcbiAgICAgICAgJ3JlY3VycmVuY2UnLCB0aGlzLmZiLmNvbnRyb2woU2NoZWR1bGVSZWN1cnJlbmNlLkRhaWx5KVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNjaGVkdWxlRm9ybS5jb250YWlucygncmVjdXJyZW5jZUludGVydmFsJykpIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmFkZENvbnRyb2woXG4gICAgICAgICdyZWN1cnJlbmNlSW50ZXJ2YWwnLCB0aGlzLmZiLmNvbnRyb2woMSlcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zY2hlZHVsZUZvcm0uY29udGFpbnMoJ3dlZWtEYXlzJykpIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmFkZENvbnRyb2woXG4gICAgICAgICd3ZWVrRGF5cycsIHRoaXMuZmIuY29udHJvbChbZ2V0Q3VycmVudFdlZWtEYXkobm93KV0pXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc2NoZWR1bGVGb3JtLmNvbnRhaW5zKCdyZXBlYXRXaGVuJykpIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmFkZENvbnRyb2woXG4gICAgICAgICdyZXBlYXRXaGVuJywgdGhpcy5mYi5jb250cm9sKFJlcGVhdFdoZW4uSW5EYXkpXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc2NoZWR1bGVGb3JtLmNvbnRhaW5zKCdyZXBlYXRXaGVuRGF5JykpIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmFkZENvbnRyb2woXG4gICAgICAgICdyZXBlYXRXaGVuRGF5JywgdGhpcy5mYi5jb250cm9sKG5vdy5nZXREYXRlKCkpXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc2NoZWR1bGVGb3JtLmNvbnRhaW5zKCdyZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXknKSkge1xuICAgICAgdGhpcy5zY2hlZHVsZUZvcm0uYWRkQ29udHJvbChcbiAgICAgICAgJ3JlcGVhdFdoZW5PcmRpbmFsV2Vla0RheScsXG4gICAgICAgIHRoaXMuZmIuY29udHJvbChnZXRPcmRpbmFsRm9yRGF0ZShub3cpKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNjaGVkdWxlRm9ybS5jb250YWlucygncmVwZWF0V2hlbldlZWtNb250aCcpKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRm9ybS5hZGRDb250cm9sKFxuICAgICAgICAncmVwZWF0V2hlbldlZWtNb250aCcsXG4gICAgICAgIHRoaXMuZmIuY29udHJvbChnZXRDdXJyZW50V2Vla0RheShub3cpKVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnNjaGVkdWxlRm9ybS5jb250YWlucygncmVwZWF0V2hlbk1vbnRoJykpIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmFkZENvbnRyb2woXG4gICAgICAgICdyZXBlYXRXaGVuTW9udGgnLFxuICAgICAgICB0aGlzLmZiLmNvbnRyb2woZ2V0Q3VycmVudE1vbnRoKG5vdykpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTMTU0MTogQnJlYWsgc2V0dXBSZWN1cnJlbmNlRm9ybVdhdGNoZXJzIGludG8gc21hbGxlciBoZWxwZXJzXG4gICAqIHRvIHJlZHVjZSBjeWNsb21hdGljIGNvbXBsZXhpdHlcbiAgICovXG4gIHByaXZhdGUgc2V0dXBSZWN1cnJlbmNlRm9ybVdhdGNoZXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IGQgPSB0aGlzLnNlbGVjdGVkRGF0ZSB8fCBuZXcgRGF0ZSgpO1xuICAgIHRoaXMud2F0Y2hSZWN1cnJlbmNlQ2hhbmdlcyhkKTtcbiAgICB0aGlzLndhdGNoUmVwZWF0V2hlbkNoYW5nZXMoZCk7XG4gICAgdGhpcy53YXRjaFdpdGhSZWN1cnJlbmNlQ2hhbmdlcyhkKTtcbiAgfVxuXG4gIHByaXZhdGUgd2F0Y2hSZWN1cnJlbmNlQ2hhbmdlcyhkOiBEYXRlKTogdm9pZCB7XG4gICAgdGhpcy5zY2hlZHVsZUZvcm0uZ2V0KCdyZWN1cnJlbmNlJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoXG4gICAgICAocmVjOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVSZWN1cnJlbmNlV2Vla0RheXMocmVjLCBkKTtcbiAgICAgICAgdGhpcy5oYW5kbGVSZWN1cnJlbmNlTW9udGhseVllYXJseShyZWMsIGQpO1xuICAgICAgICB0aGlzLmhhbmRsZVJlY3VycmVuY2VZZWFybHlNb250aChyZWMsIGQpO1xuICAgICAgICB0aGlzLnJlY3VycmVuY2VDaGFuZ2UkLm5leHQoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVSZWN1cnJlbmNlV2Vla0RheXMocmVjOiBzdHJpbmcsIGQ6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAocmVjID09PSBTY2hlZHVsZVJlY3VycmVuY2UuV2Vla2x5KSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zY2hlZHVsZUZvcm0uZ2V0KCd3ZWVrRGF5cycpPy52YWx1ZTtcbiAgICAgIGlmICghY3VycmVudCB8fCBjdXJyZW50Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnNjaGVkdWxlRm9ybS5wYXRjaFZhbHVlKFxuICAgICAgICAgIHsgd2Vla0RheXM6IFtnZXRDdXJyZW50V2Vla0RheShkKV0gfSxcbiAgICAgICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRm9ybS5wYXRjaFZhbHVlKFxuICAgICAgICB7IHdlZWtEYXlzOiBbXSB9LFxuICAgICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVJlY3VycmVuY2VNb250aGx5WWVhcmx5KFxuICAgIHJlYzogc3RyaW5nLCBkOiBEYXRlXG4gICk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHJlYyA9PT0gU2NoZWR1bGVSZWN1cnJlbmNlLk1vbnRobHkgfHxcbiAgICAgIHJlYyA9PT0gU2NoZWR1bGVSZWN1cnJlbmNlLlllYXJseVxuICAgICkge1xuICAgICAgdGhpcy5zY2hlZHVsZUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIHJlcGVhdFdoZW46XG4gICAgICAgICAgdGhpcy5zY2hlZHVsZUZvcm0uZ2V0KCdyZXBlYXRXaGVuJyk/LnZhbHVlID8/IFJlcGVhdFdoZW4uSW5EYXksXG4gICAgICAgIHJlcGVhdFdoZW5EYXk6XG4gICAgICAgICAgdGhpcy5zY2hlZHVsZUZvcm0uZ2V0KCdyZXBlYXRXaGVuRGF5Jyk/LnZhbHVlID8/IGQuZ2V0RGF0ZSgpLFxuICAgICAgICByZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXk6XG4gICAgICAgICAgdGhpcy5zY2hlZHVsZUZvcm0uZ2V0KCdyZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXknKT8udmFsdWVcbiAgICAgICAgICAgID8/IGdldE9yZGluYWxGb3JEYXRlKGQpLFxuICAgICAgICByZXBlYXRXaGVuV2Vla01vbnRoOlxuICAgICAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmdldCgncmVwZWF0V2hlbldlZWtNb250aCcpPy52YWx1ZVxuICAgICAgICAgICAgPz8gZ2V0Q3VycmVudFdlZWtEYXkoZClcbiAgICAgIH0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zY2hlZHVsZUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIHJlcGVhdFdoZW46IG51bGwsXG4gICAgICAgIHJlcGVhdFdoZW5EYXk6IG51bGwsXG4gICAgICAgIHJlcGVhdFdoZW5PcmRpbmFsV2Vla0RheTogbnVsbCxcbiAgICAgICAgcmVwZWF0V2hlbldlZWtNb250aDogbnVsbCxcbiAgICAgICAgcmVwZWF0V2hlbk1vbnRoOiBudWxsXG4gICAgICB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVSZWN1cnJlbmNlWWVhcmx5TW9udGgocmVjOiBzdHJpbmcsIGQ6IERhdGUpOiB2b2lkIHtcbiAgICBpZiAocmVjID09PSBTY2hlZHVsZVJlY3VycmVuY2UuWWVhcmx5KSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgcmVwZWF0V2hlbk1vbnRoOlxuICAgICAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLmdldCgncmVwZWF0V2hlbk1vbnRoJyk/LnZhbHVlXG4gICAgICAgICAgICA/PyBnZXRDdXJyZW50TW9udGgoZClcbiAgICAgIH0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zY2hlZHVsZUZvcm0ucGF0Y2hWYWx1ZShcbiAgICAgICAgeyByZXBlYXRXaGVuTW9udGg6IG51bGwgfSxcbiAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB3YXRjaFJlcGVhdFdoZW5DaGFuZ2VzKGQ6IERhdGUpOiB2b2lkIHtcbiAgICB0aGlzLnNjaGVkdWxlRm9ybS5nZXQoJ3JlcGVhdFdoZW4nKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZShcbiAgICAgIChydzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChydyA9PT0gUmVwZWF0V2hlbi5JbkRheSkge1xuICAgICAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgcmVwZWF0V2hlbkRheTpcbiAgICAgICAgICAgICAgdGhpcy5zY2hlZHVsZUZvcm0uZ2V0KCdyZXBlYXRXaGVuRGF5Jyk/LnZhbHVlID8/IGQuZ2V0RGF0ZSgpLFxuICAgICAgICAgICAgcmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5OiBudWxsLFxuICAgICAgICAgICAgcmVwZWF0V2hlbldlZWtNb250aDogbnVsbFxuICAgICAgICAgIH0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChydyA9PT0gUmVwZWF0V2hlbi5Jbk9yZGluYWxXZWVrRGF5KSB7XG4gICAgICAgICAgdGhpcy5zY2hlZHVsZUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICByZXBlYXRXaGVuRGF5OiBudWxsLFxuICAgICAgICAgICAgcmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5OlxuICAgICAgICAgICAgICB0aGlzLnNjaGVkdWxlRm9ybS5nZXQoJ3JlcGVhdFdoZW5PcmRpbmFsV2Vla0RheScpPy52YWx1ZVxuICAgICAgICAgICAgICAgID8/IGdldE9yZGluYWxGb3JEYXRlKGQpLFxuICAgICAgICAgICAgcmVwZWF0V2hlbldlZWtNb250aDpcbiAgICAgICAgICAgICAgdGhpcy5zY2hlZHVsZUZvcm0uZ2V0KCdyZXBlYXRXaGVuV2Vla01vbnRoJyk/LnZhbHVlXG4gICAgICAgICAgICAgICAgPz8gZ2V0Q3VycmVudFdlZWtEYXkoZClcbiAgICAgICAgICB9LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTm8gYWN0aW9uIG5lZWRlZCBmb3Igb3RoZXIgcmVwZWF0V2hlbiB2YWx1ZXNcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlY3VycmVuY2VDaGFuZ2UkLm5leHQoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB3YXRjaFdpdGhSZWN1cnJlbmNlQ2hhbmdlcyhkOiBEYXRlKTogdm9pZCB7XG4gICAgdGhpcy5zY2hlZHVsZUZvcm0uZ2V0KCd3aXRoUmVjdXJyZW5jZScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBlbmFibGVkID0gdGhpcy5zY2hlZHVsZUZvcm0uZ2V0KCd3aXRoUmVjdXJyZW5jZScpPy52YWx1ZSA9PT0gdHJ1ZTtcbiAgICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLm9uUmVjdXJyZW5jZUVuYWJsZWQoZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vblJlY3VycmVuY2VEaXNhYmxlZCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25SZWN1cnJlbmNlRW5hYmxlZChkOiBEYXRlKTogdm9pZCB7XG4gICAgdGhpcy5yZXNldFJlY3VycmVuY2VEZWZhdWx0cyhkKTtcbiAgICB0aGlzLnJlY3VycmVuY2VDaGFuZ2UkLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgb25SZWN1cnJlbmNlRGlzYWJsZWQoKTogdm9pZCB7XG4gICAgdGhpcy5yZWN1cnJlbmNlRGVzY3JpcHRpb24gPSAnJztcbiAgICBpZiAodGhpcy5zY2hlZHVsZUZvcm0pIHtcbiAgICAgIHRoaXMuc2NoZWR1bGVGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBlbmREYXRlOiBudWxsLFxuICAgICAgICByZWN1cnJlbmNlOiBudWxsLFxuICAgICAgICByZWN1cnJlbmNlSW50ZXJ2YWw6IG51bGwsXG4gICAgICAgIHdlZWtEYXlzOiBudWxsLFxuICAgICAgICByZXBlYXRXaGVuOiBudWxsLFxuICAgICAgICByZXBlYXRXaGVuRGF5OiBudWxsLFxuICAgICAgICByZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXk6IG51bGwsXG4gICAgICAgIHJlcGVhdFdoZW5XZWVrTW9udGg6IG51bGwsXG4gICAgICAgIHJlcGVhdFdoZW5Nb250aDogbnVsbFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0Rm9ybSgpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IGRlZmF1bHRTdGFydCA9IHRoaXMuZ2V0RGVmYXVsdFN0YXJ0VGltZShub3cpO1xuICAgIGNvbnN0IGRlZmF1bHRFbmQgPSB0aGlzLmdldERlZmF1bHRFbmRUaW1lKGRlZmF1bHRTdGFydCk7XG4gICAgdGhpcy5zY2hlZHVsZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGlkOiBbbnVsbF0sXG4gICAgICBuYW1lOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLm1heExlbmd0aChNQVhfTkFNRV9MRU5HVEgpXV0sXG4gICAgICB0eXBlOiBbbnVsbF0sXG4gICAgICBwcmlvcml0eTogW1NjaGVkdWxlUHJpb3JpdHkuTWVkaXVtLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIGFsbERheTogW2ZhbHNlXSxcbiAgICAgIHdpdGhSZWN1cnJlbmNlOiBbZmFsc2VdLFxuICAgICAgc3RhcnREYXRlOiBbXG4gICAgICAgIGZvcm1hdERhdGVUb1N0cmluZyh0aGlzLnNlbGVjdGVkRGF0ZSB8fCBub3cpLFxuICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXG4gICAgICBdLFxuICAgICAgZW5kRGF0ZTogW251bGxdLFxuICAgICAgc3RhcnRUaW1lOiBbZGVmYXVsdFN0YXJ0XSxcbiAgICAgIGVuZFRpbWU6IFtkZWZhdWx0RW5kXSxcbiAgICAgIHJlY3VycmVuY2U6IFtTY2hlZHVsZVJlY3VycmVuY2UuRGFpbHldLFxuICAgICAgcmVjdXJyZW5jZUludGVydmFsOiBbMV0sXG4gICAgICB3ZWVrRGF5czogW1tnZXRDdXJyZW50V2Vla0RheShub3cpXV0sXG4gICAgICByZXBlYXRXaGVuOiBbUmVwZWF0V2hlbi5JbkRheV0sXG4gICAgICByZXBlYXRXaGVuRGF5OiBbbm93LmdldERhdGUoKV0sXG4gICAgICByZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXk6IFtnZXRPcmRpbmFsRm9yRGF0ZShub3cpXSxcbiAgICAgIHJlcGVhdFdoZW5XZWVrTW9udGg6IFtnZXRDdXJyZW50V2Vla0RheShub3cpXSxcbiAgICAgIHJlcGVhdFdoZW5Nb250aDogW2dldEN1cnJlbnRNb250aChub3cpXSxcbiAgICAgIGNvbW1lbnRzOiBbJyddXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwUmVjdXJyZW5jZURlc2NyaXB0aW9uV2F0Y2hlcigpOiB2b2lkIHtcbiAgICB0aGlzLnJlY3VycmVuY2VDaGFuZ2UkLnBpcGUoXG4gICAgICBkZWJvdW5jZVRpbWUoREVCT1VOQ0VfTVMpXG4gICAgKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5mZXRjaFJlY3VycmVuY2VEZXNjcmlwdGlvbigpKTtcbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hSZWN1cnJlbmNlRGVzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNjaGVkdWxlRm9ybSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB2ID0gdGhpcy5zY2hlZHVsZUZvcm0udmFsdWU7XG4gICAgaWYgKCF2LndpdGhSZWN1cnJlbmNlIHx8ICF2LnN0YXJ0RGF0ZSkge1xuICAgICAgdGhpcy5yZWN1cnJlbmNlRGVzY3JpcHRpb24gPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zY2hlZHVsZVNlcnZpY2UuZ2VuZXJhdGVSZWN1cnJlbmNlRGVzY3JpcHRpb24oXG4gICAgICB0aGlzLmJ1aWxkUmVjdXJyZW5jZVBheWxvYWQodilcbiAgICApLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocikgPT4ge1xuICAgICAgICB0aGlzLnJlY3VycmVuY2VEZXNjcmlwdGlvbiA9IHIuZGVzY3JpcHRpb24gPz8gJyc7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgdGhpcy5yZWN1cnJlbmNlRGVzY3JpcHRpb24gPSAnJztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRSZWN1cnJlbmNlUGF5bG9hZCh2OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5idWlsZERhdGVUaW1lUGF5bG9hZCh2KSxcbiAgICAgIGFsbERheTogdlsnYWxsRGF5J10gfHwgZmFsc2UsXG4gICAgICB3aXRoUmVjdXJyZW5jZTogdHJ1ZSxcbiAgICAgIHJlY3VycmVuY2VJbnRlcnZhbDogdlsncmVjdXJyZW5jZUludGVydmFsJ10gfHwgMSxcbiAgICAgIHJlY3VycmVuY2U6IHZbJ3JlY3VycmVuY2UnXSxcbiAgICAgIC4uLnRoaXMuYnVpbGROdWxsYWJsZVJlY3VycmVuY2VGaWVsZHModilcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZERhdGVUaW1lUGF5bG9hZCh2OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnREYXRlOiB0b0RhdGVTdHJpbmcodlsnc3RhcnREYXRlJ10pLFxuICAgICAgZW5kRGF0ZTogdlsnZW5kRGF0ZSddID8gdG9EYXRlU3RyaW5nKHZbJ2VuZERhdGUnXSkgOiBudWxsLFxuICAgICAgc3RhcnRUaW1lOiB2WydzdGFydFRpbWUnXSA/IHRvVGltZVN0cmluZyh2WydzdGFydFRpbWUnXSkgOiBudWxsLFxuICAgICAgZW5kVGltZTogdlsnZW5kVGltZSddID8gdG9UaW1lU3RyaW5nKHZbJ2VuZFRpbWUnXSkgOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGROdWxsYWJsZVJlY3VycmVuY2VGaWVsZHModjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdlZWtEYXlzOiB2Wyd3ZWVrRGF5cyddID8/IG51bGwsXG4gICAgICByZXBlYXRXaGVuOiB2WydyZXBlYXRXaGVuJ10gPz8gbnVsbCxcbiAgICAgIHJlcGVhdFdoZW5EYXk6IHZbJ3JlcGVhdFdoZW5EYXknXSA/PyBudWxsLFxuICAgICAgcmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5OiB2WydyZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXknXSA/PyBudWxsLFxuICAgICAgcmVwZWF0V2hlbldlZWtNb250aDogdlsncmVwZWF0V2hlbldlZWtNb250aCddID8/IG51bGwsXG4gICAgICByZXBlYXRXaGVuTW9udGg6IHZbJ3JlcGVhdFdoZW5Nb250aCddID8/IG51bGxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkU2NoZWR1bGVUeXBlcygpOiB2b2lkIHtcbiAgICB0aGlzLnNjaGVkdWxlVHlwZVNlcnZpY2UubGlzdCh7XG4gICAgICBzaXplOiAxMDAsXG4gICAgICBmaWx0ZXJRdWVyeTogXCJzdGF0dXMgPSAnQUNUSVZFJ1wiXG4gICAgfSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyKSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVUeXBlcyA9IHIuY29udGVudHM7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvcGVuTmV3KCk6IHZvaWQge1xuICAgIHRoaXMuaXNFZGl0aW5nID0gZmFsc2U7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBkZWZhdWx0U3RhcnQgPSB0aGlzLmdldERlZmF1bHRTdGFydFRpbWUobm93KTtcbiAgICBjb25zdCBkZWZhdWx0RW5kID0gdGhpcy5nZXREZWZhdWx0RW5kVGltZShkZWZhdWx0U3RhcnQpO1xuICAgIHRoaXMuZW50aXR5RGF0YUZvckZvcm0gPSBudWxsO1xuICAgIGlmICh0aGlzLmRldGFpbEZvcm1Db21wb25lbnQpIHtcbiAgICAgIHRoaXMuZGV0YWlsRm9ybUNvbXBvbmVudC5yZXNldEZvcm0oKTtcbiAgICB9XG4gICAgdGhpcy5lbnRpdHlEYXRhRm9yRm9ybSA9IHtcbiAgICAgIHN0YXJ0RGF0ZTogZm9ybWF0RGF0ZVRvU3RyaW5nKHRoaXMuc2VsZWN0ZWREYXRlIHx8IG5vdyksXG4gICAgICBwcmlvcml0eTogU2NoZWR1bGVQcmlvcml0eS5NZWRpdW0sXG4gICAgICBhbGxEYXk6IGZhbHNlLFxuICAgICAgd2l0aFJlY3VycmVuY2U6IGZhbHNlLFxuICAgICAgc3RhcnRUaW1lOiBkZWZhdWx0U3RhcnQsXG4gICAgICBlbmRUaW1lOiBkZWZhdWx0RW5kXG4gICAgfTtcbiAgICB0aGlzLnJlc2V0UmVjdXJyZW5jZURlZmF1bHRzKHRoaXMuc2VsZWN0ZWREYXRlIHx8IG5vdyk7XG4gICAgdGhpcy5yZWN1cnJlbmNlRGVzY3JpcHRpb24gPSAnJztcbiAgICB0aGlzLnBhcnRpY2lwYW50cyA9IFtdO1xuICAgIHRoaXMuYWRkZWRQYXJ0aWNpcGFudHMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkUGFydGljaXBhbnRMb29rdXAgPSBudWxsO1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gIH1cblxuICBvcGVuRWRpdChzY2hlZHVsZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmlzRWRpdGluZyA9IHRydWU7XG4gICAgdGhpcy5wYXJ0aWNpcGFudHMgPSBbXTtcbiAgICB0aGlzLmFkZGVkUGFydGljaXBhbnRzID0gW107XG4gICAgdGhpcy5zZWxlY3RlZFBhcnRpY2lwYW50TG9va3VwID0gbnVsbDtcbiAgICB0aGlzLnNjaGVkdWxlU2VydmljZS5nZXQoc2NoZWR1bGVJZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhKSA9PiB7XG4gICAgICAgIHRoaXMuZW50aXR5RGF0YUZvckZvcm0gPSB7IC4uLmRhdGEsIHR5cGU6IGRhdGEudHlwZSA/PyBudWxsIH07XG4gICAgICAgIHRoaXMubG9hZFBhcnRpY2lwYW50cyhzY2hlZHVsZUlkKTtcbiAgICAgICAgdGhpcy52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnNjaGVkdWxlRm9ybSkge1xuICAgICAgICAgICAgdGhpcy5zY2hlZHVsZUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgICAgICAgICByZWN1cnJlbmNlOiBkYXRhLnJlY3VycmVuY2UsXG4gICAgICAgICAgICAgIHJlY3VycmVuY2VJbnRlcnZhbDogZGF0YS5yZWN1cnJlbmNlSW50ZXJ2YWwsXG4gICAgICAgICAgICAgIHdlZWtEYXlzOiBkYXRhLndlZWtEYXlzLFxuICAgICAgICAgICAgICByZXBlYXRXaGVuOiBkYXRhLnJlcGVhdFdoZW4sXG4gICAgICAgICAgICAgIHJlcGVhdFdoZW5EYXk6IGRhdGEucmVwZWF0V2hlbkRheSxcbiAgICAgICAgICAgICAgcmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5OiBkYXRhLnJlcGVhdFdoZW5PcmRpbmFsV2Vla0RheSxcbiAgICAgICAgICAgICAgcmVwZWF0V2hlbldlZWtNb250aDogZGF0YS5yZXBlYXRXaGVuV2Vla01vbnRoLFxuICAgICAgICAgICAgICByZXBlYXRXaGVuTW9udGg6IGRhdGEucmVwZWF0V2hlbk1vbnRoXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUGFydGljaXBhbnRzKHNjaGVkdWxlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucGFydGljaXBhbnRzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5zY2hlZHVsZVNlcnZpY2UubGlzdFBhcnRpY2lwYW50cyhzY2hlZHVsZUlkKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHIpID0+IHtcbiAgICAgICAgdGhpcy5wYXJ0aWNpcGFudHMgPSByLmNvbnRlbnRzID8/IFtdO1xuICAgICAgICB0aGlzLmFkZGVkUGFydGljaXBhbnRzID0gdGhpcy5wYXJ0aWNpcGFudHNcbiAgICAgICAgICAuZmlsdGVyKHAgPT4gIXAub3JnYW5pemVyKVxuICAgICAgICAgIC5tYXAocCA9PiB0aGlzLnBhcnRpY2lwYW50VG9Mb29rdXAocCkpXG4gICAgICAgICAgLmZpbHRlcigocCk6IHAgaXMgUGFydGljaXBhbnRMb29rdXAgPT4gcCAhPT0gbnVsbCk7XG4gICAgICAgIHRoaXMucGFydGljaXBhbnRzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMucGFydGljaXBhbnRzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJ0aWNpcGFudFRvTG9va3VwKFxuICAgIHA6IFNjaGVkdWxlUGFydGljaXBhbnRcbiAgKTogUGFydGljaXBhbnRMb29rdXAgfCBudWxsIHtcbiAgICBpZiAocC5jb2xsYWJvcmF0b3IpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBwLmNvbGxhYm9yYXRvci5pZCxcbiAgICAgICAgbmFtZTogcC5jb2xsYWJvcmF0b3IubmFtZSxcbiAgICAgICAgb3JpZ2luOiAnQ09MTEFCT1JBVE9SJ1xuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHAuYWNjb3VudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHAuYWNjb3VudC5pZCxcbiAgICAgICAgbmFtZTogcC5hY2NvdW50Lm5hbWUsXG4gICAgICAgIG9yaWdpbjogJ0FDQ09VTlQnXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAocC5hY2NvdW50Q29udGFjdCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHAuYWNjb3VudENvbnRhY3QuaWQsXG4gICAgICAgIG5hbWU6IHAuYWNjb3VudENvbnRhY3QubmFtZSxcbiAgICAgICAgcmVmZXJlbmNlTmFtZTogcC5hY2NvdW50Q29udGFjdC5hY2NvdW50Py5uYW1lLFxuICAgICAgICByZWZlcmVuY2VJZDogcC5hY2NvdW50Q29udGFjdC5hY2NvdW50Py5pZCxcbiAgICAgICAgb3JpZ2luOiAnQUNDT1VOVF9DT05UQUNUJ1xuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKHAuZXh0ZXJuYWxQYXJ0aWNpcGFudCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHAuZXh0ZXJuYWxQYXJ0aWNpcGFudC5pZCxcbiAgICAgICAgbmFtZTogcC5leHRlcm5hbFBhcnRpY2lwYW50Lm5hbWUsXG4gICAgICAgIG9yaWdpbjogJ0VYVEVSTkFMX1BBUlRJQ0lQQU5UJ1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBvblNlYXJjaFBhcnRpY2lwYW50cyhldmVudDogeyBxdWVyeTogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICB0aGlzLnNjaGVkdWxlU2VydmljZS5zZWFyY2hQYXJ0aWNpcGFudExvb2t1cChcbiAgICAgIGV2ZW50LnF1ZXJ5ID8/ICcnLFxuICAgICAgUEFSVElDSVBBTlRfU0VBUkNIX0xJTUlUXG4gICAgKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHIpID0+IHtcbiAgICAgICAgY29uc3QgYWRkZWRJZHMgPSBuZXcgU2V0KFxuICAgICAgICAgIHRoaXMuYWRkZWRQYXJ0aWNpcGFudHMubWFwKHAgPT4gcC5pZCArIHAub3JpZ2luKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnBhcnRpY2lwYW50U3VnZ2VzdGlvbnMgPSAoci5jb250ZW50cyA/PyBbXSlcbiAgICAgICAgICAuZmlsdGVyKHAgPT4gIWFkZGVkSWRzLmhhcyhwLmlkICsgcC5vcmlnaW4pKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLnBhcnRpY2lwYW50U3VnZ2VzdGlvbnMgPSBbXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uU2VsZWN0UGFydGljaXBhbnQocGFydGljaXBhbnQ6IFBhcnRpY2lwYW50TG9va3VwKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuYWRkZWRQYXJ0aWNpcGFudHMuc29tZShcbiAgICAgICAgcCA9PiBwLmlkID09PSBwYXJ0aWNpcGFudC5pZCAmJiBwLm9yaWdpbiA9PT0gcGFydGljaXBhbnQub3JpZ2luXG4gICAgICApXG4gICAgKSB7XG4gICAgICB0aGlzLmFkZGVkUGFydGljaXBhbnRzID0gWy4uLnRoaXMuYWRkZWRQYXJ0aWNpcGFudHMsIHBhcnRpY2lwYW50XTtcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkUGFydGljaXBhbnRMb29rdXAgPSBudWxsO1xuICAgIH0pO1xuICB9XG5cbiAgb25SZW1vdmVQYXJ0aWNpcGFudChwYXJ0aWNpcGFudDogUGFydGljaXBhbnRMb29rdXApOiB2b2lkIHtcbiAgICB0aGlzLmFkZGVkUGFydGljaXBhbnRzID0gdGhpcy5hZGRlZFBhcnRpY2lwYW50cy5maWx0ZXIoXG4gICAgICBwID0+ICEocC5pZCA9PT0gcGFydGljaXBhbnQuaWQgJiYgcC5vcmlnaW4gPT09IHBhcnRpY2lwYW50Lm9yaWdpbilcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFMxNTQxOiBCcmVhayBvblNhdmUgaW50byBzbWFsbGVyIGhlbHBlcnMgdG8gcmVkdWNlIGNvbXBsZXhpdHlcbiAgICogUzEyMS9TMjY4MTogQWRkIGJyYWNlcyB0byBhbGwgaWYgc3RhdGVtZW50c1xuICAgKi9cbiAgb25TYXZlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNjaGVkdWxlRm9ybS5pbnZhbGlkKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gdGhpcy5idWlsZFNhdmVQYXlsb2FkKCk7XG4gICAgY29uc3Qgb3AgPSB0aGlzLmlzRWRpdGluZ1xuICAgICAgPyB0aGlzLnNjaGVkdWxlU2VydmljZS51cGRhdGUocGF5bG9hZFsnaWQnXSBhcyBzdHJpbmcsIHBheWxvYWQpXG4gICAgICA6IHRoaXMuc2NoZWR1bGVTZXJ2aWNlLmluc2VydChwYXlsb2FkKTtcbiAgICBsZXQgc2NoZWR1bGVJZDogc3RyaW5nO1xuICAgIG9wLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgICAgc2NoZWR1bGVJZCA9IHRoaXMuaXNFZGl0aW5nXG4gICAgICAgICAgPyBwYXlsb2FkWydpZCddIGFzIHN0cmluZ1xuICAgICAgICAgIDogcmVzdWx0Py5bJ2lkJ10gYXMgc3RyaW5nO1xuICAgICAgICByZXR1cm4gdGhpcy5zY2hlZHVsZVNlcnZpY2UubWFuYWdlUGFydGljaXBhbnRzKFxuICAgICAgICAgIHNjaGVkdWxlSWQsXG4gICAgICAgICAgdGhpcy5idWlsZE1hbmFnZVBhcnRpY2lwYW50c1BheWxvYWQoKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnZpc2libGVDaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgICAgIHRoaXMuc2F2ZWQuZW1pdChzY2hlZHVsZUlkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTYXZlUGF5bG9hZCgpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICAuLi50aGlzLnNjaGVkdWxlRm9ybS52YWx1ZSxcbiAgICAgIHR5cGU6IHRoaXMuc2NoZWR1bGVGb3JtLnZhbHVlLnR5cGUgfHwgbnVsbCxcbiAgICAgIHdoZW5PY2N1cnM6IHRoaXMucmVjdXJyZW5jZURlc2NyaXB0aW9uID8/IG51bGxcbiAgICB9O1xuICAgIGlmIChwYXlsb2FkWydzdGFydERhdGUnXSkge1xuICAgICAgcGF5bG9hZFsnc3RhcnREYXRlJ10gPSB0b0RhdGVTdHJpbmcocGF5bG9hZFsnc3RhcnREYXRlJ10pO1xuICAgIH1cbiAgICBpZiAocGF5bG9hZFsnZW5kRGF0ZSddKSB7XG4gICAgICBwYXlsb2FkWydlbmREYXRlJ10gPSB0b0RhdGVTdHJpbmcocGF5bG9hZFsnZW5kRGF0ZSddKTtcbiAgICB9XG4gICAgaWYgKHBheWxvYWRbJ3N0YXJ0VGltZSddKSB7XG4gICAgICBwYXlsb2FkWydzdGFydFRpbWUnXSA9IHRvVGltZVN0cmluZyhwYXlsb2FkWydzdGFydFRpbWUnXSk7XG4gICAgfVxuICAgIGlmIChwYXlsb2FkWydlbmRUaW1lJ10pIHtcbiAgICAgIHBheWxvYWRbJ2VuZFRpbWUnXSA9IHRvVGltZVN0cmluZyhwYXlsb2FkWydlbmRUaW1lJ10pO1xuICAgIH1cbiAgICBpZiAoIXBheWxvYWRbJ3dpdGhSZWN1cnJlbmNlJ10pIHtcbiAgICAgIHRoaXMuY2xlYXJSZWN1cnJlbmNlUGF5bG9hZChwYXlsb2FkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbGVhblJlY3VycmVuY2VGaWVsZHMocGF5bG9hZCk7XG4gICAgfVxuICAgIGlmIChwYXlsb2FkWydhbGxEYXknXSkge1xuICAgICAgcGF5bG9hZFsnc3RhcnRUaW1lJ10gPSBudWxsO1xuICAgICAgcGF5bG9hZFsnZW5kVGltZSddID0gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHBheWxvYWQ7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyUmVjdXJyZW5jZVBheWxvYWQocGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICBwYXlsb2FkWydlbmREYXRlJ10gPSBudWxsO1xuICAgIHBheWxvYWRbJ3JlY3VycmVuY2VJbnRlcnZhbCddID0gbnVsbDtcbiAgICBwYXlsb2FkWyd3ZWVrRGF5cyddID0gbnVsbDtcbiAgICBwYXlsb2FkWydyZXBlYXRXaGVuJ10gPSBudWxsO1xuICAgIHBheWxvYWRbJ3JlcGVhdFdoZW5EYXknXSA9IG51bGw7XG4gICAgcGF5bG9hZFsncmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5J10gPSBudWxsO1xuICAgIHBheWxvYWRbJ3JlcGVhdFdoZW5XZWVrTW9udGgnXSA9IG51bGw7XG4gICAgcGF5bG9hZFsncmVwZWF0V2hlbk1vbnRoJ10gPSBudWxsO1xuICB9XG5cbiAgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy52aXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZE1hbmFnZVBhcnRpY2lwYW50c1BheWxvYWQoKToge1xuICAgIGFjY291bnRzSWQ6IHN0cmluZ1tdO1xuICAgIGFjY291bnRDb250YWN0c0lkOiBzdHJpbmdbXTtcbiAgICBjb2xsYWJvcmF0b3JzSWQ6IHN0cmluZ1tdO1xuICAgIGV4dGVybmFsUGFydGljaXBhbnRzSWQ6IHN0cmluZ1tdO1xuICB9IHtcbiAgICBjb25zdCBhOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGFjOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgZTogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHAgb2YgdGhpcy5hZGRlZFBhcnRpY2lwYW50cykge1xuICAgICAgc3dpdGNoIChwLm9yaWdpbikge1xuICAgICAgICBjYXNlICdBQ0NPVU5UJzoge1xuICAgICAgICAgIGEucHVzaChwLmlkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdBQ0NPVU5UX0NPTlRBQ1QnOiB7XG4gICAgICAgICAgYWMucHVzaChwLmlkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdDT0xMQUJPUkFUT1InOiB7XG4gICAgICAgICAgYy5wdXNoKHAuaWQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0VYVEVSTkFMX1BBUlRJQ0lQQU5UJzoge1xuICAgICAgICAgIGUucHVzaChwLmlkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYWNjb3VudHNJZDogYSxcbiAgICAgIGFjY291bnRDb250YWN0c0lkOiBhYyxcbiAgICAgIGNvbGxhYm9yYXRvcnNJZDogYyxcbiAgICAgIGV4dGVybmFsUGFydGljaXBhbnRzSWQ6IGVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFMxNTQxOiBCcmVhayBjbGVhblJlY3VycmVuY2VGaWVsZHMgaW50byBzbWFsbGVyIGhlbHBlcnNcbiAgICogUzEyMS9TMjY4MTogQWRkIGJyYWNlcyB0byBhbGwgaWYgc3RhdGVtZW50c1xuICAgKi9cbiAgcHJpdmF0ZSBjbGVhblJlY3VycmVuY2VGaWVsZHMocDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICBjb25zdCByID0gcFsncmVjdXJyZW5jZSddIGFzIHN0cmluZztcbiAgICBpZiAociAhPT0gU2NoZWR1bGVSZWN1cnJlbmNlLldlZWtseSkge1xuICAgICAgcFsnd2Vla0RheXMnXSA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuY2xlYW5EYWlseVdlZWtseUZpZWxkcyhwLCByKTtcbiAgICB0aGlzLmNsZWFuTW9udGhseUZpZWxkcyhwLCByKTtcbiAgICB0aGlzLmNsZWFuWWVhcmx5RmllbGRzKHAsIHIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbkRhaWx5V2Vla2x5RmllbGRzKHA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCByOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICByID09PSBTY2hlZHVsZVJlY3VycmVuY2UuRGFpbHkgfHxcbiAgICAgIHIgPT09IFNjaGVkdWxlUmVjdXJyZW5jZS5XZWVrbHlcbiAgICApIHtcbiAgICAgIHBbJ3JlcGVhdFdoZW4nXSA9IG51bGw7XG4gICAgICBwWydyZXBlYXRXaGVuRGF5J10gPSBudWxsO1xuICAgICAgcFsncmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5J10gPSBudWxsO1xuICAgICAgcFsncmVwZWF0V2hlbldlZWtNb250aCddID0gbnVsbDtcbiAgICAgIHBbJ3JlcGVhdFdoZW5Nb250aCddID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFuTW9udGhseUZpZWxkcyhwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHIgPT09IFNjaGVkdWxlUmVjdXJyZW5jZS5Nb250aGx5KSB7XG4gICAgICBwWydyZXBlYXRXaGVuTW9udGgnXSA9IG51bGw7XG4gICAgICB0aGlzLmNsZWFuUmVwZWF0V2hlbkZpZWxkcyhwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFuWWVhcmx5RmllbGRzKHA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCByOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAociA9PT0gU2NoZWR1bGVSZWN1cnJlbmNlLlllYXJseSkge1xuICAgICAgdGhpcy5jbGVhblJlcGVhdFdoZW5GaWVsZHMocCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblJlcGVhdFdoZW5GaWVsZHMocDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICBpZiAocFsncmVwZWF0V2hlbiddID09PSBSZXBlYXRXaGVuLkluRGF5KSB7XG4gICAgICBwWydyZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXknXSA9IG51bGw7XG4gICAgICBwWydyZXBlYXRXaGVuV2Vla01vbnRoJ10gPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBwWydyZXBlYXRXaGVuRGF5J10gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRSZWN1cnJlbmNlRGVmYXVsdHMoZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zY2hlZHVsZUZvcm0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZCA9IGRhdGUgfHwgbmV3IERhdGUoKTtcbiAgICB0aGlzLnNjaGVkdWxlRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIHJlY3VycmVuY2U6IFNjaGVkdWxlUmVjdXJyZW5jZS5EYWlseSxcbiAgICAgIHJlY3VycmVuY2VJbnRlcnZhbDogMSxcbiAgICAgIHdlZWtEYXlzOiBbZ2V0Q3VycmVudFdlZWtEYXkoZCldLFxuICAgICAgcmVwZWF0V2hlbjogUmVwZWF0V2hlbi5JbkRheSxcbiAgICAgIHJlcGVhdFdoZW5EYXk6IGQuZ2V0RGF0ZSgpLFxuICAgICAgcmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5OiBnZXRPcmRpbmFsRm9yRGF0ZShkKSxcbiAgICAgIHJlcGVhdFdoZW5XZWVrTW9udGg6IGdldEN1cnJlbnRXZWVrRGF5KGQpLFxuICAgICAgcmVwZWF0V2hlbk1vbnRoOiBnZXRDdXJyZW50TW9udGgoZClcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBzaG93UmVjdXJyZW5jZUZpZWxkcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zY2hlZHVsZUZvcm0/LmdldCgnd2l0aFJlY3VycmVuY2UnKT8udmFsdWUgPT09IHRydWU7XG4gIH1cblxuICBnZXQgY3VycmVudFJlY3VycmVuY2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zY2hlZHVsZUZvcm0/LmdldCgncmVjdXJyZW5jZScpPy52YWx1ZTtcbiAgfVxuXG4gIGdldCBjdXJyZW50UmVwZWF0V2hlbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNjaGVkdWxlRm9ybT8uZ2V0KCdyZXBlYXRXaGVuJyk/LnZhbHVlO1xuICB9XG5cbiAgZ2V0IHNob3dXZWVrRGF5cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50UmVjdXJyZW5jZSA9PT0gU2NoZWR1bGVSZWN1cnJlbmNlLldlZWtseTtcbiAgfVxuXG4gIGdldCBzaG93UmVwZWF0V2hlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5jdXJyZW50UmVjdXJyZW5jZSA9PT0gU2NoZWR1bGVSZWN1cnJlbmNlLk1vbnRobHkgfHxcbiAgICAgIHRoaXMuY3VycmVudFJlY3VycmVuY2UgPT09IFNjaGVkdWxlUmVjdXJyZW5jZS5ZZWFybHlcbiAgICApO1xuICB9XG5cbiAgZ2V0IHNob3dSZXBlYXRXaGVuRGF5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNob3dSZXBlYXRXaGVuICYmIHRoaXMuY3VycmVudFJlcGVhdFdoZW4gPT09IFJlcGVhdFdoZW4uSW5EYXk7XG4gIH1cblxuICBnZXQgc2hvd09yZGluYWxGaWVsZHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2hvd1JlcGVhdFdoZW4gJiZcbiAgICAgIHRoaXMuY3VycmVudFJlcGVhdFdoZW4gPT09IFJlcGVhdFdoZW4uSW5PcmRpbmFsV2Vla0RheVxuICAgICk7XG4gIH1cblxuICBnZXQgc2hvd01vbnRoRmllbGQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFJlY3VycmVuY2UgPT09IFNjaGVkdWxlUmVjdXJyZW5jZS5ZZWFybHk7XG4gIH1cblxuICBnZXRPcmlnaW5MYWJlbChvOiBQYXJ0aWNpcGFudE9yaWdpbik6IHN0cmluZyB7IHJldHVybiBfZ2V0T3JpZ2luTGFiZWwodGhpcy50LCBvKTsgfVxuICBnZXRPcmlnaW5JY29uKG86IFBhcnRpY2lwYW50T3JpZ2luKTogc3RyaW5nIHsgcmV0dXJuIF9nZXRPcmlnaW5JY29uKG8pOyB9XG4gIGdldFBhcnRpY2lwYW50TmFtZShwOiBTY2hlZHVsZVBhcnRpY2lwYW50KTogc3RyaW5nIHsgcmV0dXJuIF9nZXRQYXJ0aWNpcGFudE5hbWUocCk7IH1cbiAgZ2V0UGFydGljaXBhbnRUeXBlKHA6IFNjaGVkdWxlUGFydGljaXBhbnQpOiBzdHJpbmcgeyByZXR1cm4gX2dldFBhcnRpY2lwYW50VHlwZSh0aGlzLnQsIHApOyB9XG4gIGdldFBhcnRpY2lwYW50VHlwZUljb24ocDogU2NoZWR1bGVQYXJ0aWNpcGFudCk6IHN0cmluZyB7IHJldHVybiBfZ2V0UGFydGljaXBhbnRUeXBlSWNvbihwKTsgfVxuICBnZXRQcmlvcml0eVNldmVyaXR5KHA6IHN0cmluZyk6IFByaW9yaXR5U2V2ZXJpdHkgeyByZXR1cm4gX2dldFByaW9yaXR5U2V2ZXJpdHkocCk7IH1cbiAgZ2V0UHJpb3JpdHlMYWJlbChwOiBzdHJpbmcpOiBzdHJpbmcgeyByZXR1cm4gX2dldFByaW9yaXR5TGFiZWwodGhpcy50LCBwKTsgfVxuICBnZXRDb25maXJtYXRpb25TZXZlcml0eShjOiBzdHJpbmcpOiBDb25maXJtYXRpb25TZXZlcml0eSB7IHJldHVybiBfZ2V0Q29uZmlybWF0aW9uU2V2ZXJpdHkoYyk7IH1cbiAgZ2V0Q29uZmlybWF0aW9uTGFiZWwoYzogc3RyaW5nKTogc3RyaW5nIHsgcmV0dXJuIF9nZXRDb25maXJtYXRpb25MYWJlbCh0aGlzLnQsIGMpOyB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0U3RhcnRUaW1lKGQ6IERhdGUpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXREZWZhdWx0U3RhcnRUaW1lKGQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0RW5kVGltZShzdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0RGVmYXVsdEVuZFRpbWUoc3QpO1xuICB9XG59XG4iLCI8IS0tIFNjaGVkdWxlIERyYXdlciAtLT5cbjxwLWRyYXdlclxuICBbKHZpc2libGUpXT1cInZpc2libGVcIlxuICBwb3NpdGlvbj1cInJpZ2h0XCJcbiAgW3N0eWxlXT1cInsgd2lkdGg6ICc4NXZ3JywgJ21heC13aWR0aCc6ICcxMjAwcHgnIH1cIlxuICBbbW9kYWxdPVwidHJ1ZVwiXG4gIChvbkhpZGUpPVwib25DYW5jZWwoKVwiXG4+XG4gIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICA8c3BhbiBjbGFzcz1cImRyYXdlci10aXRsZVwiPlxuICAgICAgPGkgY2xhc3M9XCJwaSBwaS1jYWxlbmRhclwiPjwvaT5cbiAgICAgIHt7XG4gICAgICAgIGlzRWRpdGluZ1xuICAgICAgICAgID8gKCdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfc2NoZWR1bGVfZWRpdCcgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgOiAoJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9zY2hlZHVsZV9uZXcnIHwgdHJhbnNsYXRlKVxuICAgICAgfX1cbiAgICA8L3NwYW4+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPGRpdiBjbGFzcz1cImRyYXdlci1sYXlvdXRcIiAqbmdJZj1cInNjaGVkdWxlRm9ybVwiPlxuICAgIDwhLS0gTGVmdDogRm9ybSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZHJhd2VyLWxlZnRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkcmF3ZXItc2VjdGlvbi1oZWFkZXJcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAge3sgJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9zY2hlZHVsZV9kZXRhaWxzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzaWEtZHluYW1pYy1mb3JtXG4gICAgICAgICNkZXRhaWxGb3JtXG4gICAgICAgIFtzZWN0aW9uc109XCJbeyBmaWVsZHM6IHNjaGVkdWxlRGV0YWlsRmllbGRzIH1dXCJcbiAgICAgICAgW2VudGl0eURhdGFdPVwiZW50aXR5RGF0YUZvckZvcm1cIlxuICAgICAgICBbbW9kZV09XCInZm9ybSdcIlxuICAgICAgICBbc2hvd1N1Ym1pdEJ1dHRvbl09XCJmYWxzZVwiXG4gICAgICAgIFtzaG93Q2FuY2VsQnV0dG9uXT1cImZhbHNlXCJcbiAgICAgICAgKGZvcm1SZWFkeSk9XCJvbkRldGFpbEZvcm1SZWFkeSgkZXZlbnQpXCJcbiAgICAgID48L3NpYS1keW5hbWljLWZvcm0+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFJpZ2h0OiBSZWN1cnJlbmNlICsgUGFydGljaXBhbnRzIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkcmF3ZXItcmlnaHRcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJkcmF3ZXItc2VjdGlvblwiXG4gICAgICAgICpuZ0lmPVwic2hvd1JlY3VycmVuY2VGaWVsZHNcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJhd2VyLXNlY3Rpb24taGVhZGVyXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1yZXBsYXlcIj48L2k+XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3JlY3VycmVuY2VfY29uZmlnJ1xuICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxmb3JtXG4gICAgICAgICAgW2Zvcm1Hcm91cF09XCJzY2hlZHVsZUZvcm1cIlxuICAgICAgICAgIGNsYXNzPVwiZHJhd2VyLWZvcm1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZCBmbGV4LTFcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInJlY3VycmVuY2VcIj5cbiAgICAgICAgICAgICAgICB7eyAnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3JlY3VycmVuY2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgaWQ9XCJyZWN1cnJlbmNlXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZWN1cnJlbmNlXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJyZWN1cnJlbmNlT3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgb3B0aW9uTGFiZWw9XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgb3B0aW9uVmFsdWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICA+PC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZCBmbGV4LTFcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInJlY3VycmVuY2VJbnRlcnZhbFwiPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3JlY3VycmVuY2VfaW50ZXJ2YWwnXG4gICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHAtaW5wdXROdW1iZXJcbiAgICAgICAgICAgICAgICBpZD1cInJlY3VycmVuY2VJbnRlcnZhbFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicmVjdXJyZW5jZUludGVydmFsXCJcbiAgICAgICAgICAgICAgICBbbWluXT1cIjFcIlxuICAgICAgICAgICAgICAgIFttYXhdPVwiOTlcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICAgICAgPjwvcC1pbnB1dE51bWJlcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1yb3dcIlxuICAgICAgICAgICAgKm5nSWY9XCJzaG93V2Vla0RheXNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkIGZsZXgtMVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwid2Vla0RheXNcIj5cbiAgICAgICAgICAgICAgICB7eyAnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3dlZWtfZGF5cycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3RcbiAgICAgICAgICAgICAgICBpZD1cIndlZWtEYXlzXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ3ZWVrRGF5c1wiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNdPVwid2Vla0RheU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAgICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfc2VsZWN0X3dlZWtfZGF5J1xuICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW21heFNlbGVjdGVkTGFiZWxzXT1cIjdcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgICAgICAgPjwvcC1tdWx0aVNlbGVjdD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1yb3dcIlxuICAgICAgICAgICAgKm5nSWY9XCJzaG93UmVwZWF0V2hlblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQgZmxleC0xXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJyZXBlYXRXaGVuXCI+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcmVwZWF0X3doZW4nIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHAtZHJvcGRvd25cbiAgICAgICAgICAgICAgICBpZD1cInJlcGVhdFdoZW5cIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJlcGVhdFdoZW5cIlxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInJlcGVhdFdoZW5PcHRpb25zXCJcbiAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgICAgID48L3AtZHJvcGRvd24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWZpZWxkIGZsZXgtMVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwic2hvd1JlcGVhdFdoZW5EYXlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicmVwZWF0V2hlbkRheVwiPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3JlcGVhdF93aGVuX2RheSdcbiAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlclxuICAgICAgICAgICAgICAgIGlkPVwicmVwZWF0V2hlbkRheVwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicmVwZWF0V2hlbkRheVwiXG4gICAgICAgICAgICAgICAgW21pbl09XCIxXCJcbiAgICAgICAgICAgICAgICBbbWF4XT1cIjMxXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgICAgID48L3AtaW5wdXROdW1iZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWZpZWxkIGZsZXgtMVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwic2hvd09yZGluYWxGaWVsZHNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5XCI+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfb3JkaW5hbF93ZWVrX2RheSdcbiAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8cC1kcm9wZG93blxuICAgICAgICAgICAgICAgIGlkPVwicmVwZWF0V2hlbk9yZGluYWxXZWVrRGF5XCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZXBlYXRXaGVuT3JkaW5hbFdlZWtEYXlcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIm9yZGluYWxPcHRpb25zXCJcbiAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgICAgID48L3AtZHJvcGRvd24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWZpZWxkIGZsZXgtMVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwic2hvd09yZGluYWxGaWVsZHNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicmVwZWF0V2hlbldlZWtNb250aFwiPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3dlZWtfbW9udGgnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHAtZHJvcGRvd25cbiAgICAgICAgICAgICAgICBpZD1cInJlcGVhdFdoZW5XZWVrTW9udGhcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJlcGVhdFdoZW5XZWVrTW9udGhcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIndlZWtEYXlPcHRpb25zXCJcbiAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgICAgID48L3AtZHJvcGRvd24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tcm93XCJcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd01vbnRoRmllbGRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkIGZsZXgtMVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicmVwZWF0V2hlbk1vbnRoXCI+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfcmVwZWF0X21vbnRoJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgaWQ9XCJyZXBlYXRXaGVuTW9udGhcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJlcGVhdFdoZW5Nb250aFwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNdPVwibW9udGhPcHRpb25zXCJcbiAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgICAgICAgICAgID48L3AtZHJvcGRvd24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJyZWN1cnJlbmNlLWRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAqbmdJZj1cInJlY3VycmVuY2VEZXNjcmlwdGlvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgIDxzcGFuPnt7IHJlY3VycmVuY2VEZXNjcmlwdGlvbiB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPHAtZGl2aWRlcj48L3AtZGl2aWRlcj5cblxuICAgICAgPCEtLSBQYXJ0aWNpcGFudHMgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZHJhd2VyLXNlY3Rpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRyYXdlci1zZWN0aW9uLWhlYWRlclwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktdXNlcnNcIj48L2k+XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICB7eyAnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3BhcnRpY2lwYW50cycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFydGljaXBhbnQtc2VhcmNoXCI+XG4gICAgICAgICAgPHAtYXV0b0NvbXBsZXRlXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkUGFydGljaXBhbnRMb29rdXBcIlxuICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiXG4gICAgICAgICAgICBbc3VnZ2VzdGlvbnNdPVwicGFydGljaXBhbnRTdWdnZXN0aW9uc1wiXG4gICAgICAgICAgICAoY29tcGxldGVNZXRob2QpPVwiXG4gICAgICAgICAgICAgIG9uU2VhcmNoUGFydGljaXBhbnRzKCRldmVudClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAob25TZWxlY3QpPVwiXG4gICAgICAgICAgICAgIG9uU2VsZWN0UGFydGljaXBhbnQoJGV2ZW50LnZhbHVlKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChvbkZvY3VzKT1cIlxuICAgICAgICAgICAgICBvblNlYXJjaFBhcnRpY2lwYW50cyh7IHF1ZXJ5OiAnJyB9KVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibmFtZVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICAgICAgICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfc2VhcmNoX3BhcnRpY2lwYW50J1xuICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW21pbkxlbmd0aF09XCIwXCJcbiAgICAgICAgICAgIFtmb3JjZVNlbGVjdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZmx1aWRdPVwidHJ1ZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgIGxldC1pdGVtXG4gICAgICAgICAgICAgIHBUZW1wbGF0ZT1cIml0ZW1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFydGljaXBhbnQtc3VnZ2VzdGlvblwiPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZ2V0T3JpZ2luSWNvbihpdGVtLm9yaWdpbilcIlxuICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYXJ0aWNpcGFudC1zdWdnZXN0aW9uLWluZm9cIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicGFydGljaXBhbnQtc3VnZ2VzdGlvbi1uYW1lXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBhcnRpY2lwYW50LXN1Z2dlc3Rpb24tZGV0YWlsXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnJlZmVyZW5jZU5hbWVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnJlZmVyZW5jZU5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYXJ0aWNpcGFudC1zdWdnZXN0aW9uLW9yaWdpblwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgZ2V0T3JpZ2luTGFiZWwoaXRlbS5vcmlnaW4pIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9wLWF1dG9Db21wbGV0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgIXBhcnRpY2lwYW50c0xvYWRpbmcgJiZcbiAgICAgICAgICAgIGFkZGVkUGFydGljaXBhbnRzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgIFwiXG4gICAgICAgICAgY2xhc3M9XCJwYXJ0aWNpcGFudHMtZW1wdHlcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS11c2Vyc1wiPjwvaT5cbiAgICAgICAgICA8cD5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICdjcm14LmNvbXBvbmVudHMuc2NoZWR1bGVfbm9fcGFydGljaXBhbnRzJ1xuICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxwLXRhYmxlXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICFwYXJ0aWNpcGFudHNMb2FkaW5nICYmXG4gICAgICAgICAgICBhZGRlZFBhcnRpY2lwYW50cy5sZW5ndGggPiAwXG4gICAgICAgICAgXCJcbiAgICAgICAgICBbdmFsdWVdPVwiYWRkZWRQYXJ0aWNpcGFudHNcIlxuICAgICAgICAgIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1zbSBwLWRhdGF0YWJsZS1zdHJpcGVkXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+XG4gICAgICAgICAgICAgICAge3sgJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9uYW1lJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICBzY29wZT1cImNvbFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtcGFydGljaXBhbnQtdHlwZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgJ2NybXguY29tcG9uZW50cy5zY2hlZHVsZV9wYXJ0aWNpcGFudF90eXBlJ1xuICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAgIHNjb3BlPVwiY29sXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1hY3Rpb25zXCJcbiAgICAgICAgICAgICAgPjwvdGg+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtcD5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXJ0aWNpcGFudC1uYW1lLWNlbGxcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHAubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicC5yZWZlcmVuY2VOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYXJ0aWNpcGFudC1yZWZlcmVuY2VcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBwLnJlZmVyZW5jZU5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXJ0aWNpcGFudC10eXBlLWNlbGxcIj5cbiAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJnZXRPcmlnaW5JY29uKHAub3JpZ2luKVwiXG4gICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgIHt7IGdldE9yaWdpbkxhYmVsKHAub3JpZ2luKSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdHJhc2hcIlxuICAgICAgICAgICAgICAgICAgW3JvdW5kZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIHNldmVyaXR5PVwiZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm9uUmVtb3ZlUGFydGljaXBhbnQocClcIlxuICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIlxuICAgICAgICAgICAgICAgICAgICAnY3JteC5jb21wb25lbnRzLnNjaGVkdWxlX3JlbW92ZScgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIlxuICAgICAgICAgICAgICAgID48L3AtYnV0dG9uPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3AtdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJkcmF3ZXItZm9vdGVyXCI+XG4gICAgICA8cC1idXR0b25cbiAgICAgICAgW2xhYmVsXT1cIidjcm14LmNvbXBvbmVudHMuY2FuY2VsJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIGljb249XCJwaSBwaS10aW1lc1wiXG4gICAgICAgIHNldmVyaXR5PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgW291dGxpbmVkXT1cInRydWVcIlxuICAgICAgICAob25DbGljayk9XCJvbkNhbmNlbCgpXCJcbiAgICAgID48L3AtYnV0dG9uPlxuICAgICAgPHAtYnV0dG9uXG4gICAgICAgIFtsYWJlbF09XCInY3JteC5jb21wb25lbnRzLnNhdmUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgaWNvbj1cInBpIHBpLWNoZWNrXCJcbiAgICAgICAgKG9uQ2xpY2spPVwib25TYXZlKClcIlxuICAgICAgPjwvcC1idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L3AtZHJhd2VyPlxuIl19
@@ -1218,6 +1218,19 @@ class ScheduleFormComponent {
1218
1218
  }
1219
1219
  onRecurrenceDisabled() {
1220
1220
  this.recurrenceDescription = '';
1221
+ if (this.scheduleForm) {
1222
+ this.scheduleForm.patchValue({
1223
+ endDate: null,
1224
+ recurrence: null,
1225
+ recurrenceInterval: null,
1226
+ weekDays: null,
1227
+ repeatWhen: null,
1228
+ repeatWhenDay: null,
1229
+ repeatWhenOrdinalWeekDay: null,
1230
+ repeatWhenWeekMonth: null,
1231
+ repeatWhenMonth: null
1232
+ });
1233
+ }
1221
1234
  }
1222
1235
  initForm() {
1223
1236
  const now = new Date();
@@ -1 +1 @@
1
- {"version":3,"file":"senior-gestao-relacionamento-angular-components.mjs","sources":["../../projects/angular-components/src/lib/angular-components.module.ts","../../projects/angular-components/src/lib/services/storage/storage.service.ts","../../projects/angular-components/src/lib/services/current-collaborator/current-collaborator.service.ts","../../projects/angular-components/src/lib/config/provide-angular-components-translations.ts","../../projects/angular-components/src/lib/components/schedule/enums/schedule.enums.ts","../../projects/angular-components/src/lib/components/schedule/helpers/schedule-date.helpers.ts","../../projects/angular-components/src/lib/components/schedule/helpers/schedule-display.helpers.ts","../../projects/angular-components/src/lib/components/schedule/services/schedule.service.ts","../../projects/angular-components/src/lib/components/schedule/services/schedule-type.service.ts","../../projects/angular-components/src/lib/components/schedule/schedule-form/schedule-form.component.ts","../../projects/angular-components/src/lib/components/schedule/schedule-form/schedule-form.component.html","../../projects/angular-components/src/lib/components/schedule/schedule-detail/schedule-detail.component.ts","../../projects/angular-components/src/lib/components/schedule/schedule-detail/schedule-detail.component.html","../../projects/angular-components/src/public-api.ts","../../projects/angular-components/src/senior-gestao-relacionamento-angular-components.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Módulo principal da biblioteca @senior-gestao-relacionamento/angular-components\n */\n@NgModule({\n declarations: [],\n imports: [\n CommonModule\n ],\n exports: []\n})\nexport class AngularComponentsModule { }\n","import { Injectable } from '@angular/core';\n\nconst TOKEN_COOKIE_NAME = 'com.senior.token';\nconst STORAGE_PREFIX = 'crm';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StorageService {\n\n /**\n * Retorna o username do usuário logado a partir do cookie com.senior.token.\n */\n private getUsername(): string | null {\n if (typeof document === 'undefined') {\n return null;\n }\n\n const nameEQ = TOKEN_COOKIE_NAME + '=';\n const cookies = document.cookie.split(';');\n\n for (const cookie of cookies) {\n const trimmed = cookie.trim();\n if (trimmed.startsWith(nameEQ)) {\n try {\n const value = decodeURIComponent(trimmed.substring(nameEQ.length));\n const token = JSON.parse(value);\n return token?.username ?? null;\n } catch {\n return null;\n }\n }\n }\n\n return null;\n }\n\n /**\n * Monta a key completa com prefixo e username.\n * Formato: crm:{username}:{key}\n */\n private buildKey(key: string): string {\n const username = this.getUsername() ?? 'anonymous';\n return `${STORAGE_PREFIX}:${username}:${key}`;\n }\n\n /**\n * Salva um valor no localStorage.\n * Aceita qualquer tipo serializável.\n */\n set<T>(key: string, value: T): void {\n if (typeof localStorage === 'undefined') {\n return;\n }\n\n localStorage.setItem(this.buildKey(key), JSON.stringify(value));\n }\n\n /**\n * Recupera um valor do localStorage.\n * Retorna null se não existir ou falhar o parse.\n */\n get<T>(key: string): T | null {\n if (typeof localStorage === 'undefined') {\n return null;\n }\n\n try {\n const data = localStorage.getItem(this.buildKey(key));\n return data ? JSON.parse(data) as T : null;\n } catch {\n return null;\n }\n }\n\n /**\n * Salva um valor com TTL (tempo de expiração em minutos).\n */\n setWithTTL<T>(key: string, value: T, ttlMinutes: number): void {\n const wrapper = {\n value,\n expiresAt: Date.now() + ttlMinutes * 60 * 1000\n };\n this.set(key, wrapper);\n }\n\n /**\n * Recupera um valor com TTL. Retorna null se expirado.\n */\n getWithTTL<T>(key: string): T | null {\n const wrapper = this.get<{ value: T; expiresAt: number }>(key);\n\n if (!wrapper) {\n return null;\n }\n\n if (Date.now() > wrapper.expiresAt) {\n this.remove(key);\n return null;\n }\n\n return wrapper.value;\n }\n\n /**\n * Remove um item do localStorage.\n */\n remove(key: string): void {\n if (typeof localStorage === 'undefined') {\n return;\n }\n\n localStorage.removeItem(this.buildKey(key));\n }\n\n /**\n * Remove todos os itens do usuário atual.\n */\n clear(): void {\n if (typeof localStorage === 'undefined') {\n return;\n }\n\n const username = this.getUsername() ?? 'anonymous';\n const prefix = `${STORAGE_PREFIX}:${username}:`;\n\n const keysToRemove: string[] = [];\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(prefix)) {\n keysToRemove.push(key);\n }\n }\n\n keysToRemove.forEach((key) => localStorage.removeItem(key));\n }\n\n /**\n * Verifica se um item existe (e não está expirado, se tiver TTL).\n */\n has(key: string): boolean {\n return this.get(key) !== null;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { BehaviorSubject, Observable, of, tap } from 'rxjs';\nimport { Collaborator } from './models/collaborator.model';\nimport { StorageService } from '../storage/storage.service';\n\nconst CACHE_KEY = 'currentCollaborator';\nconst CACHE_TTL_MINUTES = 30;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CurrentCollaboratorService {\n private readonly API_PATH = '/crmx/collaborator/queries/getCurrentCollaborator';\n\n private readonly collaboratorSubject = new BehaviorSubject<Collaborator | null>(null);\n public readonly collaborator$ = this.collaboratorSubject.asObservable();\n\n constructor(\n private readonly http: HttpClient,\n private readonly storage: StorageService\n ) {\n const cached = this.storage.getWithTTL<Collaborator>(CACHE_KEY);\n if (cached) {\n this.collaboratorSubject.next(cached);\n }\n }\n\n /**\n * Busca o colaborador atual. Retorna do cache se disponível,\n * caso contrário consulta a API.\n */\n load(): Observable<Collaborator> {\n const cached = this.storage.getWithTTL<Collaborator>(CACHE_KEY);\n\n if (cached) {\n this.collaboratorSubject.next(cached);\n return of(cached);\n }\n\n return this.http.get<Collaborator>(this.API_PATH).pipe(\n tap((collaborator) => {\n this.storage.setWithTTL(CACHE_KEY, collaborator, CACHE_TTL_MINUTES);\n this.collaboratorSubject.next(collaborator);\n })\n );\n }\n\n /**\n * Força a atualização do cache consultando a API.\n */\n refresh(): Observable<Collaborator> {\n this.storage.remove(CACHE_KEY);\n this.collaboratorSubject.next(null);\n\n return this.http.get<Collaborator>(this.API_PATH).pipe(\n tap((collaborator) => {\n this.storage.setWithTTL(CACHE_KEY, collaborator, CACHE_TTL_MINUTES);\n this.collaboratorSubject.next(collaborator);\n })\n );\n }\n\n /**\n * Retorna o colaborador atual do cache (sem request).\n */\n get(): Collaborator | null {\n return this.collaboratorSubject.value;\n }\n\n /**\n * Limpa o cache do colaborador.\n */\n clearCache(): void {\n this.storage.remove(CACHE_KEY);\n this.collaboratorSubject.next(null);\n }\n}\n","import { Provider } from '@angular/core';\nimport { TranslationLoader } from '@seniorsistemas/components-ai';\n\nimport ptBR from '../i18n/pt-BR.json';\nimport enUS from '../i18n/en-US.json';\nimport esES from '../i18n/es-ES.json';\n\nconst LIB_TRANSLATIONS: Record<string, Record<string, string>> = {\n 'pt-BR': ptBR,\n 'en-US': enUS,\n 'es-ES': esES\n};\n\n/**\n * Cria um TranslationLoader que combina as traduções do angular-components\n * com as traduções da aplicação consumidora.\n *\n * Uso no app.config.ts:\n * ```ts\n * import { provideAngularComponentsTranslations } from '@senior-gestao-relacionamento/angular-components';\n *\n * export const appConfig = {\n * providers: [\n * provideAngularComponentsTranslations(async (language) => {\n * const translations = await import(`../locale/${language}.json`);\n * return translations.default || translations;\n * })\n * ]\n * };\n * ```\n */\nexport function provideAngularComponentsTranslations(\n appLoader?: (language: string) => Promise<Record<string, string>>\n): Provider {\n return {\n provide: 'TranslationLoader',\n useValue: {\n loadTranslations: async (language: string): Promise<Record<string, string>> => {\n const libTranslations = LIB_TRANSLATIONS[language] ?? {};\n if (appLoader) {\n const appTranslations = await appLoader(language);\n return { ...libTranslations, ...appTranslations };\n }\n return libTranslations;\n }\n } as TranslationLoader\n };\n}\n","export enum SchedulePriority {\n Low = 'LOW',\n Medium = 'MEDIUM',\n High = 'HIGH',\n Critical = 'CRITICAL'\n}\n\nexport enum ScheduleRecurrence {\n Daily = 'DAILY',\n Weekly = 'WEEKLY',\n Monthly = 'MONTHLY',\n Yearly = 'YEARLY'\n}\n\nexport enum WeekDay {\n Sunday = 'SUNDAY',\n Monday = 'MONDAY',\n Tuesday = 'TUESDAY',\n Wednesday = 'WEDNESDAY',\n Thursday = 'THURSDAY',\n Friday = 'FRIDAY',\n Saturday = 'SATURDAY'\n}\n\nexport enum Month {\n January = 'JANUARY',\n February = 'FEBRUARY',\n March = 'MARCH',\n April = 'APRIL',\n May = 'MAY',\n June = 'JUNE',\n July = 'JULY',\n August = 'AUGUST',\n September = 'SEPTEMBER',\n October = 'OCTOBER',\n November = 'NOVEMBER',\n December = 'DECEMBER'\n}\n\nexport enum RepeatWhen {\n InDay = 'IN_DAY',\n InOrdinalWeekDay = 'IN_ORDINAL_WEEK_DAY'\n}\n\nexport enum OrdinalWeekDay {\n First = 'FIRST',\n Second = 'SECOND',\n Third = 'THIRD',\n Fourth = 'FOURTH',\n Last = 'LAST'\n}\n\nexport enum ParticipantConfirmation {\n Yes = 'YES',\n Pending = 'PENDING',\n No = 'NO'\n}\n\nexport enum Status {\n Active = 'ACTIVE',\n Inactive = 'INACTIVE',\n Deleted = 'DELETED'\n}\n","import { WeekDay, Month, OrdinalWeekDay } from '../enums/schedule.enums';\n\nconst MINUTES_HALF_HOUR = 30;\nconst DAYS_IN_WEEK = 7;\nconst ORDINAL_THIRD_WEEK = 3;\nconst HOURS_IN_DAY = 24;\nconst MINUTES_IN_HOUR = 60;\nconst DATE_STRING_LENGTH = 10;\nconst TIME_SHORT_LENGTH = 5;\n\nexport function formatDateToString(d: Date): string {\n return d.toISOString().split('T')[0];\n}\n\nexport function toDateString(v: unknown): string {\n if (!v) {\n return '';\n }\n if (v instanceof Date) {\n return formatDateToString(v);\n }\n const s = String(v);\n return s.length > DATE_STRING_LENGTH ? s.substring(0, DATE_STRING_LENGTH) : s;\n}\n\nexport function toTimeString(v: unknown): string {\n if (!v) {\n return '';\n }\n if (v instanceof Date) {\n return formatTime(v.getHours(), v.getMinutes());\n }\n const s = String(v);\n if (s.includes('T')) {\n const d = new Date(s);\n return formatTime(d.getHours(), d.getMinutes());\n }\n return s.length === TIME_SHORT_LENGTH ? s + ':00' : s;\n}\n\nexport function getDefaultStartTime(d: Date): string {\n let h = d.getHours();\n let m = d.getMinutes();\n if (m < MINUTES_HALF_HOUR) {\n m = MINUTES_HALF_HOUR;\n } else {\n h++;\n m = 0;\n }\n if (h >= HOURS_IN_DAY) {\n h = 0;\n }\n return formatTime(h, m);\n}\n\nexport function getDefaultEndTime(startTime: string): string {\n const [hS, mS] = startTime.split(':');\n let h = +hS;\n let m = +mS + MINUTES_HALF_HOUR;\n if (m >= MINUTES_IN_HOUR) {\n h++;\n m -= MINUTES_IN_HOUR;\n }\n if (h >= HOURS_IN_DAY) {\n h = 0;\n }\n return formatTime(h, m);\n}\n\nexport function getCurrentWeekDay(d: Date): WeekDay {\n const days = [\n WeekDay.Sunday, WeekDay.Monday, WeekDay.Tuesday,\n WeekDay.Wednesday, WeekDay.Thursday, WeekDay.Friday,\n WeekDay.Saturday\n ];\n return days[d.getDay()];\n}\n\nexport function getCurrentMonth(d: Date): Month {\n const months = [\n Month.January, Month.February, Month.March,\n Month.April, Month.May, Month.June,\n Month.July, Month.August, Month.September,\n Month.October, Month.November, Month.December\n ];\n return months[d.getMonth()];\n}\n\nexport function getOrdinalForDate(d: Date): OrdinalWeekDay {\n const dom = d.getDate();\n const wn = Math.ceil(dom / DAYS_IN_WEEK);\n const ld = new Date(d.getFullYear(), d.getMonth() + 1, 0).getDate();\n if (dom + DAYS_IN_WEEK > ld && wn >= 4) {\n return OrdinalWeekDay.Last;\n }\n switch (wn) {\n case 1: {\n return OrdinalWeekDay.First;\n }\n case 2: {\n return OrdinalWeekDay.Second;\n }\n case ORDINAL_THIRD_WEEK: {\n return OrdinalWeekDay.Third;\n }\n case 4: {\n return OrdinalWeekDay.Fourth;\n }\n default: {\n return OrdinalWeekDay.Last;\n }\n }\n}\n\nfunction formatTime(h: number, m: number): string {\n return `${String(h).padStart(2, '0')}:${String(m).padStart(2, '0')}:00`;\n}\n","import { ScheduleParticipant } from '../entities/schedule.interface';\nimport { ParticipantOrigin } from '../entities/participant-lookup.interface';\nimport { SchedulePriority } from '../enums/schedule.enums';\n\nexport type PrioritySeverity = 'success' | 'info' | 'warn' | 'danger';\nexport type ConfirmationSeverity = 'success' | 'warn' | 'danger';\n\ninterface Translator {\n translate(key: string): string;\n}\n\nconst ICON_PI_USER = 'pi pi-user';\n\nconst ORIGIN_LABELS: Record<string, string> = {\n ACCOUNT: 'crmx.components.schedule_participant_account',\n ACCOUNT_CONTACT: 'crmx.components.schedule_participant_account_contact',\n COLLABORATOR: 'crmx.components.schedule_participant_collaborator',\n EXTERNAL_PARTICIPANT: 'crmx.components.schedule_participant_external'\n};\n\nconst ORIGIN_ICONS: Record<string, string> = {\n ACCOUNT: 'pi pi-building',\n ACCOUNT_CONTACT: 'pi pi-id-card',\n COLLABORATOR: ICON_PI_USER,\n EXTERNAL_PARTICIPANT: 'pi pi-user-plus'\n};\n\nexport function getOriginLabel(t: Translator, o: ParticipantOrigin): string {\n return t.translate(ORIGIN_LABELS[o] ?? o);\n}\n\nexport function getOriginIcon(o: ParticipantOrigin): string {\n return ORIGIN_ICONS[o] ?? ICON_PI_USER;\n}\n\nexport function getParticipantName(p: ScheduleParticipant): string {\n const candidates = [\n p.collaborator?.name,\n p.account?.name,\n p.accountContact?.name,\n p.externalParticipant?.name\n ];\n return candidates.find(name => name != null) ?? '-';\n}\n\nexport function getParticipantType(t: Translator, p: ScheduleParticipant): string {\n if (p.collaborator) {\n return t.translate('crmx.components.schedule_participant_collaborator');\n }\n if (p.account) {\n return t.translate('crmx.components.schedule_participant_account');\n }\n if (p.accountContact) {\n return t.translate('crmx.components.schedule_participant_account_contact');\n }\n if (p.externalParticipant) {\n return t.translate('crmx.components.schedule_participant_external');\n }\n return '-';\n}\n\nexport function getParticipantTypeIcon(p: ScheduleParticipant): string {\n if (p.collaborator) {\n return ICON_PI_USER;\n }\n if (p.account) {\n return 'pi pi-building';\n }\n if (p.accountContact) {\n return 'pi pi-id-card';\n }\n if (p.externalParticipant) {\n return 'pi pi-user-plus';\n }\n return ICON_PI_USER;\n}\n\nexport function getPrioritySeverity(p: string): PrioritySeverity {\n switch (p) {\n case SchedulePriority.Low: {\n return 'success';\n }\n case SchedulePriority.Medium: {\n return 'info';\n }\n case SchedulePriority.High: {\n return 'warn';\n }\n case SchedulePriority.Critical: {\n return 'danger';\n }\n default: {\n return 'info';\n }\n }\n}\n\nexport function getPriorityLabel(t: Translator, p: string): string {\n return t.translate(`crmx.components.schedule_priority_${p.toLowerCase()}`);\n}\n\nexport function getConfirmationSeverity(c: string): ConfirmationSeverity {\n switch (c) {\n case 'YES': {\n return 'success';\n }\n case 'NO': {\n return 'danger';\n }\n default: {\n return 'warn';\n }\n }\n}\n\nexport function getConfirmationLabel(t: Translator, c: string): string {\n switch (c) {\n case 'YES': {\n return t.translate('crmx.components.schedule_confirmation_yes');\n }\n case 'NO': {\n return t.translate('crmx.components.schedule_confirmation_no');\n }\n default: {\n return t.translate('crmx.components.schedule_confirmation_pending');\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { Schedule, RecurrenceDatesRecord, ScheduleParticipant } from '../entities/schedule.interface';\nimport { ParticipantLookup, ScheduleSummaryByDate } from '../entities/participant-lookup.interface';\n\ninterface GetRecurrencesByDateResponse {\n dates: RecurrenceDatesRecord[];\n schedules: ScheduleSummaryByDate[];\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ScheduleService {\n private readonly entityUrl = 'crmx/schedule/entities/schedule';\n private readonly actionsUrl = 'crmx/schedule/actions';\n private readonly queriesUrl = 'crmx/schedule/queries';\n\n constructor(private readonly http: HttpClient) {}\n\n get(id: string): Observable<Schedule> {\n return this.http.get<Schedule>(`/${this.entityUrl}/${id}`);\n }\n\n insert(entity: Record<string, unknown>): Observable<Record<string, unknown>> {\n return this.http.post<Record<string, unknown>>(`/${this.entityUrl}`, entity);\n }\n\n update(id: string, entity: Record<string, unknown>): Observable<Record<string, unknown>> {\n return this.http.put<Record<string, unknown>>(`/${this.entityUrl}/${id}`, entity);\n }\n\n delete(id: string): Observable<void> {\n return this.http.delete<void>(`/${this.entityUrl}/${id}`);\n }\n\n getRecurrencesByDate(startDate: string, endDate: string): Observable<GetRecurrencesByDateResponse> {\n return this.http.post<GetRecurrencesByDateResponse>(\n `/${this.queriesUrl}/getRecurrencesByDate`, { startDate, endDate }\n );\n }\n\n generateRecurrenceDescription(payload: Record<string, unknown>): Observable<{ description: string }> {\n return this.http.post<{ description: string }>(\n `/${this.queriesUrl}/generateRecurrenceDescription`, payload\n );\n }\n\n acceptSchedule(scheduleId: string, participantId?: string, date?: string): Observable<{ accepted: boolean }> {\n return this.http.post<{ accepted: boolean }>(\n `/${this.actionsUrl}/acceptSchedule`, { scheduleId, participantId, date }\n );\n }\n\n rejectSchedule(scheduleId: string, participantId?: string, date?: string): Observable<{ rejected: boolean }> {\n return this.http.post<{ rejected: boolean }>(\n `/${this.actionsUrl}/rejectSchedule`, { scheduleId, participantId, date }\n );\n }\n\n cancelSchedule(scheduleId: string, date?: string): Observable<{ accepted: boolean }> {\n return this.http.post<{ accepted: boolean }>(\n `/${this.actionsUrl}/cancelSchedule`, { scheduleId, date }\n );\n }\n\n manageParticipants(scheduleId: string, participants: {\n accountsId?: string[];\n accountContactsId?: string[];\n collaboratorsId?: string[];\n externalParticipantsId?: string[];\n }): Observable<void> {\n return this.http.post<void>(\n `/crmx/schedule/signals/manageScheduleParticipants`, { scheduleId, ...participants }\n );\n }\n\n listParticipants(scheduleId: string): Observable<{ contents: ScheduleParticipant[] }> {\n return this.http.get<{ contents: ScheduleParticipant[] }>(\n `/${this.entityUrl}/${scheduleId}/participants`\n );\n }\n\n searchParticipantLookup(filter: string, size = 10, offset = 0): Observable<{ contents: ParticipantLookup[]; totalElements: number; totalPages: number }> {\n return this.http.post<{ contents: ParticipantLookup[]; totalElements: number; totalPages: number }>(\n `/${this.queriesUrl}/listParticipants`, { filter, size, offset, orderBy: 'name ASC' }\n );\n }\n\n list(params: { size?: number; filterQuery?: string } = {}): Observable<{ contents: Record<string, unknown>[]; totalElements: number }> {\n let httpParams = new HttpParams();\n if (params.size) {\n httpParams = httpParams.set('size', String(params.size));\n }\n if (params.filterQuery) {\n httpParams = httpParams.set('filter', params.filterQuery);\n }\n return this.http.get<{ contents: Record<string, unknown>[]; totalElements: number }>(`/${this.entityUrl}`, { params: httpParams });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { ScheduleType } from '../entities/schedule-type.interface';\n\n@Injectable({ providedIn: 'root' })\nexport class ScheduleTypeService {\n private readonly entityUrl = 'crmx/schedule/entities/scheduleType';\n\n constructor(private readonly http: HttpClient) {}\n\n list(params: { size?: number; filterQuery?: string } = {}): Observable<{ contents: ScheduleType[]; totalElements: number }> {\n let httpParams = new HttpParams();\n if (params.size) {\n httpParams = httpParams.set('size', String(params.size));\n }\n const statusFilter = \"status != 'DELETED'\";\n const filter = params.filterQuery\n ? `(${params.filterQuery}) and ${statusFilter}`\n : statusFilter;\n httpParams = httpParams.set('filter', filter);\n return this.http.get<{ contents: ScheduleType[]; totalElements: number }>(`/${this.entityUrl}`, { params: httpParams });\n }\n\n get(id: string): Observable<ScheduleType> {\n return this.http.get<ScheduleType>(`/${this.entityUrl}/${id}`);\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Subject, debounceTime, switchMap } from 'rxjs';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\nimport { DrawerModule } from 'primeng/drawer';\nimport { DropdownModule } from 'primeng/dropdown';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { TagModule } from 'primeng/tag';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DividerModule } from 'primeng/divider';\nimport { TableModule } from 'primeng/table';\nimport { AutoCompleteModule } from 'primeng/autocomplete';\nimport { DynamicFormComponent, DynamicFormFieldConfig, TranslatePipe, TranslationService } from '@seniorsistemas/components-ai';\nimport { CurrentCollaboratorService } from '../../../services/current-collaborator/current-collaborator.service';\nimport { ScheduleService } from '../services/schedule.service';\nimport { ScheduleTypeService } from '../services/schedule-type.service';\nimport { ScheduleParticipant } from '../entities/schedule.interface';\nimport { ParticipantLookup, ParticipantOrigin } from '../entities/participant-lookup.interface';\nimport { ScheduleType } from '../entities/schedule-type.interface';\nimport {\n SchedulePriority, ScheduleRecurrence, WeekDay, RepeatWhen,\n OrdinalWeekDay, Month\n} from '../enums/schedule.enums';\nimport {\n formatDateToString, toDateString, toTimeString,\n getDefaultStartTime, getDefaultEndTime,\n getCurrentWeekDay, getCurrentMonth, getOrdinalForDate\n} from '../helpers/schedule-date.helpers';\nimport {\n getOriginLabel as _getOriginLabel, getOriginIcon as _getOriginIcon,\n getParticipantName as _getParticipantName, getParticipantType as _getParticipantType,\n getParticipantTypeIcon as _getParticipantTypeIcon, getPrioritySeverity as _getPrioritySeverity,\n getPriorityLabel as _getPriorityLabel, getConfirmationSeverity as _getConfirmationSeverity,\n getConfirmationLabel as _getConfirmationLabel,\n PrioritySeverity, ConfirmationSeverity\n} from '../helpers/schedule-display.helpers';\n\n/** S109: Extract magic numbers to named constants */\nconst MAX_NAME_LENGTH = 255;\nconst DEBOUNCE_MS = 500;\nconst PARTICIPANT_SEARCH_LIMIT = 5;\n\n@Component({\n selector: 's-schedule-form',\n standalone: true,\n imports: [\n CommonModule, FormsModule, ReactiveFormsModule,\n ButtonModule, DialogModule, DrawerModule, DropdownModule,\n InputNumberModule, MultiSelectModule, TagModule, TooltipModule,\n DividerModule, TableModule, AutoCompleteModule,\n TranslatePipe, DynamicFormComponent\n ],\n templateUrl: './schedule-form.component.html',\n styleUrl: './schedule-form.component.scss'\n})\nexport class ScheduleFormComponent implements OnInit {\n @Input() visible = false;\n @Input() selectedDate: Date = new Date();\n @Output() visibleChange = new EventEmitter<boolean>();\n @Output() saved = new EventEmitter<string>();\n\n @ViewChild('detailForm') detailFormComponent!: DynamicFormComponent;\n\n scheduleDetailFields: DynamicFormFieldConfig[] = [];\n entityDataForForm: Record<string, unknown> | null = null;\n scheduleForm!: FormGroup;\n isEditing = false;\n currentCollaboratorId: string | null = null;\n scheduleTypes: ScheduleType[] = [];\n participants: ScheduleParticipant[] = [];\n participantsLoading = false;\n recurrenceDescription = '';\n\n /** S2933: Mark as readonly */\n private readonly recurrenceChange$ = new Subject<void>();\n\n participantSuggestions: ParticipantLookup[] = [];\n selectedParticipantLookup: ParticipantLookup | null = null;\n addedParticipants: ParticipantLookup[] = [];\n\n priorityOptions: { label: string; value: string }[] = [];\n recurrenceOptions: { label: string; value: string }[] = [];\n weekDayOptions: { label: string; value: string }[] = [];\n repeatWhenOptions: { label: string; value: string }[] = [];\n ordinalOptions: { label: string; value: string }[] = [];\n monthOptions: { label: string; value: string }[] = [];\n\n /** S2933: Mark constructor-injected services as readonly */\n constructor(\n private readonly fb: FormBuilder,\n private readonly scheduleService: ScheduleService,\n private readonly scheduleTypeService: ScheduleTypeService,\n private readonly currentCollaboratorService: CurrentCollaboratorService,\n private readonly t: TranslationService\n ) {}\n\n ngOnInit(): void {\n this.initOptions();\n this.initDetailFields();\n this.initForm();\n this.loadScheduleTypes();\n this.loadCollaborator();\n this.setupRecurrenceDescriptionWatcher();\n }\n\n private loadCollaborator(): void {\n this.currentCollaboratorService.load().subscribe({\n next: (collab) => {\n this.currentCollaboratorId = collab?.id ?? null;\n },\n error: () => {\n this.currentCollaboratorId = null;\n }\n });\n }\n\n private initOptions(): void {\n this.priorityOptions = [\n { label: this.t.translate('crmx.components.schedule_priority_low'), value: SchedulePriority.Low },\n { label: this.t.translate('crmx.components.schedule_priority_medium'), value: SchedulePriority.Medium },\n { label: this.t.translate('crmx.components.schedule_priority_high'), value: SchedulePriority.High },\n { label: this.t.translate('crmx.components.schedule_priority_critical'), value: SchedulePriority.Critical }\n ];\n this.recurrenceOptions = [\n { label: this.t.translate('crmx.components.schedule_recurrence_daily'), value: ScheduleRecurrence.Daily },\n { label: this.t.translate('crmx.components.schedule_recurrence_weekly'), value: ScheduleRecurrence.Weekly },\n { label: this.t.translate('crmx.components.schedule_recurrence_monthly'), value: ScheduleRecurrence.Monthly },\n { label: this.t.translate('crmx.components.schedule_recurrence_yearly'), value: ScheduleRecurrence.Yearly }\n ];\n this.weekDayOptions = [\n { label: this.t.translate('crmx.components.schedule_sunday'), value: WeekDay.Sunday },\n { label: this.t.translate('crmx.components.schedule_monday'), value: WeekDay.Monday },\n { label: this.t.translate('crmx.components.schedule_tuesday'), value: WeekDay.Tuesday },\n { label: this.t.translate('crmx.components.schedule_wednesday'), value: WeekDay.Wednesday },\n { label: this.t.translate('crmx.components.schedule_thursday'), value: WeekDay.Thursday },\n { label: this.t.translate('crmx.components.schedule_friday'), value: WeekDay.Friday },\n { label: this.t.translate('crmx.components.schedule_saturday'), value: WeekDay.Saturday }\n ];\n this.repeatWhenOptions = [\n { label: this.t.translate('crmx.components.schedule_repeat_in_day'), value: RepeatWhen.InDay },\n { label: this.t.translate('crmx.components.schedule_repeat_in_ordinal_week_day'), value: RepeatWhen.InOrdinalWeekDay }\n ];\n this.ordinalOptions = [\n { label: this.t.translate('crmx.components.schedule_ordinal_first'), value: OrdinalWeekDay.First },\n { label: this.t.translate('crmx.components.schedule_ordinal_second'), value: OrdinalWeekDay.Second },\n { label: this.t.translate('crmx.components.schedule_ordinal_third'), value: OrdinalWeekDay.Third },\n { label: this.t.translate('crmx.components.schedule_ordinal_fourth'), value: OrdinalWeekDay.Fourth },\n { label: this.t.translate('crmx.components.schedule_ordinal_last'), value: OrdinalWeekDay.Last }\n ];\n this.monthOptions = Object.values(Month).map(m => ({\n label: this.t.translate(`crmx.components.schedule_${m.toLowerCase()}`), value: m\n }));\n }\n\n private initDetailFields(): void {\n const now = new Date();\n const defaultStart = this.getDefaultStartTime(now);\n const defaultEnd = this.getDefaultEndTime(defaultStart);\n const fullRow = { xl: 12, lg: 12, md: 12, sm: 12 };\n const halfRow = { xl: 6, lg: 6, md: 6, sm: 12 };\n this.scheduleDetailFields = [\n { field: 'name', label: this.t.translate('crmx.components.schedule_name'), type: 'text', required: true, validators: [Validators.required, Validators.maxLength(MAX_NAME_LENGTH)], placeholder: this.t.translate('crmx.components.schedule_enter_name'), maxLength: MAX_NAME_LENGTH, size: fullRow },\n { field: 'priority', label: this.t.translate('crmx.components.schedule_priority'), type: 'dropdown', required: true, validators: [Validators.required], options: this.priorityOptions, optionLabel: 'label', optionValue: 'value', defaultValue: SchedulePriority.Medium, size: fullRow },\n { field: 'type', label: this.t.translate('crmx.components.schedule_type'), type: 'lookup', lookupService: this.scheduleTypeService, lookupDisplayField: 'name', lookupValueField: 'id', lookupSearchFields: ['name'], showClear: true, lookupAutocomplete: true, lookupColumns: [{ field: 'name', header: this.t.translate('crmx.components.schedule_name') }], lookupFilters: \"status = 'ACTIVE'\", placeholder: this.t.translate('crmx.components.schedule_select_type'), size: fullRow },\n { field: 'startDate', label: this.t.translate('crmx.components.schedule_start_date'), type: 'date', required: true, validators: [Validators.required], defaultValue: formatDateToString(now), size: (v: Record<string, unknown>) => v['withRecurrence'] ? halfRow : fullRow },\n { field: 'endDate', label: this.t.translate('crmx.components.schedule_end_date'), type: 'date', visibleWhen: (v: Record<string, unknown>) => v['withRecurrence'] === true, size: halfRow },\n { field: 'startTime', label: this.t.translate('crmx.components.schedule_start_time'), type: 'time', defaultValue: defaultStart, visibleWhen: (v: Record<string, unknown>) => v['allDay'] !== true, size: halfRow },\n { field: 'endTime', label: this.t.translate('crmx.components.schedule_end_time'), type: 'time', defaultValue: defaultEnd, visibleWhen: (v: Record<string, unknown>) => v['allDay'] !== true, size: halfRow },\n { field: 'allDay', label: this.t.translate('crmx.components.schedule_all_day'), type: 'checkbox', defaultValue: false, size: halfRow },\n { field: 'withRecurrence', label: this.t.translate('crmx.components.schedule_with_recurrence'), type: 'checkbox', defaultValue: false, size: halfRow },\n { field: 'comments', label: this.t.translate('crmx.components.schedule_comments'), type: 'textarea', placeholder: this.t.translate('crmx.components.schedule_enter_comments'), rows: 3, size: fullRow }\n ];\n }\n\n onDetailFormReady(form: FormGroup): void {\n this.scheduleForm = form;\n this.addRecurrenceControls();\n this.scheduleForm.valueChanges.subscribe(\n () => this.recurrenceChange$.next()\n );\n this.setupRecurrenceFormWatchers();\n }\n\n /** S121: Add braces to all if statements */\n private addRecurrenceControls(): void {\n const now = new Date();\n if (!this.scheduleForm.contains('id')) {\n this.scheduleForm.addControl('id', this.fb.control(null));\n }\n if (!this.scheduleForm.contains('recurrence')) {\n this.scheduleForm.addControl(\n 'recurrence', this.fb.control(ScheduleRecurrence.Daily)\n );\n }\n if (!this.scheduleForm.contains('recurrenceInterval')) {\n this.scheduleForm.addControl(\n 'recurrenceInterval', this.fb.control(1)\n );\n }\n if (!this.scheduleForm.contains('weekDays')) {\n this.scheduleForm.addControl(\n 'weekDays', this.fb.control([getCurrentWeekDay(now)])\n );\n }\n if (!this.scheduleForm.contains('repeatWhen')) {\n this.scheduleForm.addControl(\n 'repeatWhen', this.fb.control(RepeatWhen.InDay)\n );\n }\n if (!this.scheduleForm.contains('repeatWhenDay')) {\n this.scheduleForm.addControl(\n 'repeatWhenDay', this.fb.control(now.getDate())\n );\n }\n if (!this.scheduleForm.contains('repeatWhenOrdinalWeekDay')) {\n this.scheduleForm.addControl(\n 'repeatWhenOrdinalWeekDay',\n this.fb.control(getOrdinalForDate(now))\n );\n }\n if (!this.scheduleForm.contains('repeatWhenWeekMonth')) {\n this.scheduleForm.addControl(\n 'repeatWhenWeekMonth',\n this.fb.control(getCurrentWeekDay(now))\n );\n }\n if (!this.scheduleForm.contains('repeatWhenMonth')) {\n this.scheduleForm.addControl(\n 'repeatWhenMonth',\n this.fb.control(getCurrentMonth(now))\n );\n }\n }\n\n /**\n * S1541: Break setupRecurrenceFormWatchers into smaller helpers\n * to reduce cyclomatic complexity\n */\n private setupRecurrenceFormWatchers(): void {\n const d = this.selectedDate || new Date();\n this.watchRecurrenceChanges(d);\n this.watchRepeatWhenChanges(d);\n this.watchWithRecurrenceChanges(d);\n }\n\n private watchRecurrenceChanges(d: Date): void {\n this.scheduleForm.get('recurrence')?.valueChanges.subscribe(\n (rec: string) => {\n this.handleRecurrenceWeekDays(rec, d);\n this.handleRecurrenceMonthlyYearly(rec, d);\n this.handleRecurrenceYearlyMonth(rec, d);\n this.recurrenceChange$.next();\n }\n );\n }\n\n private handleRecurrenceWeekDays(rec: string, d: Date): void {\n if (rec === ScheduleRecurrence.Weekly) {\n const current = this.scheduleForm.get('weekDays')?.value;\n if (!current || current.length === 0) {\n this.scheduleForm.patchValue(\n { weekDays: [getCurrentWeekDay(d)] },\n { emitEvent: false }\n );\n }\n } else {\n this.scheduleForm.patchValue(\n { weekDays: [] },\n { emitEvent: false }\n );\n }\n }\n\n private handleRecurrenceMonthlyYearly(\n rec: string, d: Date\n ): void {\n if (\n rec === ScheduleRecurrence.Monthly ||\n rec === ScheduleRecurrence.Yearly\n ) {\n this.scheduleForm.patchValue({\n repeatWhen:\n this.scheduleForm.get('repeatWhen')?.value ?? RepeatWhen.InDay,\n repeatWhenDay:\n this.scheduleForm.get('repeatWhenDay')?.value ?? d.getDate(),\n repeatWhenOrdinalWeekDay:\n this.scheduleForm.get('repeatWhenOrdinalWeekDay')?.value\n ?? getOrdinalForDate(d),\n repeatWhenWeekMonth:\n this.scheduleForm.get('repeatWhenWeekMonth')?.value\n ?? getCurrentWeekDay(d)\n }, { emitEvent: false });\n } else {\n this.scheduleForm.patchValue({\n repeatWhen: null,\n repeatWhenDay: null,\n repeatWhenOrdinalWeekDay: null,\n repeatWhenWeekMonth: null,\n repeatWhenMonth: null\n }, { emitEvent: false });\n }\n }\n\n private handleRecurrenceYearlyMonth(rec: string, d: Date): void {\n if (rec === ScheduleRecurrence.Yearly) {\n this.scheduleForm.patchValue({\n repeatWhenMonth:\n this.scheduleForm.get('repeatWhenMonth')?.value\n ?? getCurrentMonth(d)\n }, { emitEvent: false });\n } else {\n this.scheduleForm.patchValue(\n { repeatWhenMonth: null },\n { emitEvent: false }\n );\n }\n }\n\n private watchRepeatWhenChanges(d: Date): void {\n this.scheduleForm.get('repeatWhen')?.valueChanges.subscribe(\n (rw: string) => {\n if (rw === RepeatWhen.InDay) {\n this.scheduleForm.patchValue({\n repeatWhenDay:\n this.scheduleForm.get('repeatWhenDay')?.value ?? d.getDate(),\n repeatWhenOrdinalWeekDay: null,\n repeatWhenWeekMonth: null\n }, { emitEvent: false });\n } else if (rw === RepeatWhen.InOrdinalWeekDay) {\n this.scheduleForm.patchValue({\n repeatWhenDay: null,\n repeatWhenOrdinalWeekDay:\n this.scheduleForm.get('repeatWhenOrdinalWeekDay')?.value\n ?? getOrdinalForDate(d),\n repeatWhenWeekMonth:\n this.scheduleForm.get('repeatWhenWeekMonth')?.value\n ?? getCurrentWeekDay(d)\n }, { emitEvent: false });\n } else {\n // No action needed for other repeatWhen values\n }\n this.recurrenceChange$.next();\n }\n );\n }\n\n private watchWithRecurrenceChanges(d: Date): void {\n this.scheduleForm.get('withRecurrence')?.valueChanges.subscribe(\n () => {\n const enabled = this.scheduleForm.get('withRecurrence')?.value === true;\n if (enabled) {\n this.onRecurrenceEnabled(d);\n } else {\n this.onRecurrenceDisabled();\n }\n }\n );\n }\n\n private onRecurrenceEnabled(d: Date): void {\n this.resetRecurrenceDefaults(d);\n this.recurrenceChange$.next();\n }\n\n private onRecurrenceDisabled(): void {\n this.recurrenceDescription = '';\n }\n\n private initForm(): void {\n const now = new Date();\n const defaultStart = this.getDefaultStartTime(now);\n const defaultEnd = this.getDefaultEndTime(defaultStart);\n this.scheduleForm = this.fb.group({\n id: [null],\n name: ['', [Validators.required, Validators.maxLength(MAX_NAME_LENGTH)]],\n type: [null],\n priority: [SchedulePriority.Medium, Validators.required],\n allDay: [false],\n withRecurrence: [false],\n startDate: [\n formatDateToString(this.selectedDate || now),\n Validators.required\n ],\n endDate: [null],\n startTime: [defaultStart],\n endTime: [defaultEnd],\n recurrence: [ScheduleRecurrence.Daily],\n recurrenceInterval: [1],\n weekDays: [[getCurrentWeekDay(now)]],\n repeatWhen: [RepeatWhen.InDay],\n repeatWhenDay: [now.getDate()],\n repeatWhenOrdinalWeekDay: [getOrdinalForDate(now)],\n repeatWhenWeekMonth: [getCurrentWeekDay(now)],\n repeatWhenMonth: [getCurrentMonth(now)],\n comments: ['']\n });\n }\n\n private setupRecurrenceDescriptionWatcher(): void {\n this.recurrenceChange$.pipe(\n debounceTime(DEBOUNCE_MS)\n ).subscribe(() => this.fetchRecurrenceDescription());\n }\n\n private fetchRecurrenceDescription(): void {\n if (!this.scheduleForm) {\n return;\n }\n const v = this.scheduleForm.value;\n if (!v.withRecurrence || !v.startDate) {\n this.recurrenceDescription = '';\n return;\n }\n this.scheduleService.generateRecurrenceDescription(\n this.buildRecurrencePayload(v)\n ).subscribe({\n next: (r) => {\n this.recurrenceDescription = r.description ?? '';\n },\n error: () => {\n this.recurrenceDescription = '';\n }\n });\n }\n\n private buildRecurrencePayload(v: Record<string, unknown>): Record<string, unknown> {\n return {\n ...this.buildDateTimePayload(v),\n allDay: v['allDay'] || false,\n withRecurrence: true,\n recurrenceInterval: v['recurrenceInterval'] || 1,\n recurrence: v['recurrence'],\n ...this.buildNullableRecurrenceFields(v)\n };\n }\n\n private buildDateTimePayload(v: Record<string, unknown>): Record<string, unknown> {\n return {\n startDate: toDateString(v['startDate']),\n endDate: v['endDate'] ? toDateString(v['endDate']) : null,\n startTime: v['startTime'] ? toTimeString(v['startTime']) : null,\n endTime: v['endTime'] ? toTimeString(v['endTime']) : null\n };\n }\n\n private buildNullableRecurrenceFields(v: Record<string, unknown>): Record<string, unknown> {\n return {\n weekDays: v['weekDays'] ?? null,\n repeatWhen: v['repeatWhen'] ?? null,\n repeatWhenDay: v['repeatWhenDay'] ?? null,\n repeatWhenOrdinalWeekDay: v['repeatWhenOrdinalWeekDay'] ?? null,\n repeatWhenWeekMonth: v['repeatWhenWeekMonth'] ?? null,\n repeatWhenMonth: v['repeatWhenMonth'] ?? null\n };\n }\n\n private loadScheduleTypes(): void {\n this.scheduleTypeService.list({\n size: 100,\n filterQuery: \"status = 'ACTIVE'\"\n }).subscribe({\n next: (r) => {\n this.scheduleTypes = r.contents;\n }\n });\n }\n\n openNew(): void {\n this.isEditing = false;\n const now = new Date();\n const defaultStart = this.getDefaultStartTime(now);\n const defaultEnd = this.getDefaultEndTime(defaultStart);\n this.entityDataForForm = null;\n if (this.detailFormComponent) {\n this.detailFormComponent.resetForm();\n }\n this.entityDataForForm = {\n startDate: formatDateToString(this.selectedDate || now),\n priority: SchedulePriority.Medium,\n allDay: false,\n withRecurrence: false,\n startTime: defaultStart,\n endTime: defaultEnd\n };\n this.resetRecurrenceDefaults(this.selectedDate || now);\n this.recurrenceDescription = '';\n this.participants = [];\n this.addedParticipants = [];\n this.selectedParticipantLookup = null;\n this.visible = true;\n this.visibleChange.emit(true);\n }\n\n openEdit(scheduleId: string): void {\n this.isEditing = true;\n this.participants = [];\n this.addedParticipants = [];\n this.selectedParticipantLookup = null;\n this.scheduleService.get(scheduleId).subscribe({\n next: (data) => {\n this.entityDataForForm = { ...data, type: data.type ?? null };\n this.loadParticipants(scheduleId);\n this.visible = true;\n this.visibleChange.emit(true);\n setTimeout(() => {\n if (this.scheduleForm) {\n this.scheduleForm.patchValue({\n id: data.id,\n recurrence: data.recurrence,\n recurrenceInterval: data.recurrenceInterval,\n weekDays: data.weekDays,\n repeatWhen: data.repeatWhen,\n repeatWhenDay: data.repeatWhenDay,\n repeatWhenOrdinalWeekDay: data.repeatWhenOrdinalWeekDay,\n repeatWhenWeekMonth: data.repeatWhenWeekMonth,\n repeatWhenMonth: data.repeatWhenMonth\n });\n }\n });\n }\n });\n }\n\n private loadParticipants(scheduleId: string): void {\n this.participantsLoading = true;\n this.scheduleService.listParticipants(scheduleId).subscribe({\n next: (r) => {\n this.participants = r.contents ?? [];\n this.addedParticipants = this.participants\n .filter(p => !p.organizer)\n .map(p => this.participantToLookup(p))\n .filter((p): p is ParticipantLookup => p !== null);\n this.participantsLoading = false;\n },\n error: () => {\n this.participantsLoading = false;\n }\n });\n }\n\n private participantToLookup(\n p: ScheduleParticipant\n ): ParticipantLookup | null {\n if (p.collaborator) {\n return {\n id: p.collaborator.id,\n name: p.collaborator.name,\n origin: 'COLLABORATOR'\n };\n }\n if (p.account) {\n return {\n id: p.account.id,\n name: p.account.name,\n origin: 'ACCOUNT'\n };\n }\n if (p.accountContact) {\n return {\n id: p.accountContact.id,\n name: p.accountContact.name,\n referenceName: p.accountContact.account?.name,\n referenceId: p.accountContact.account?.id,\n origin: 'ACCOUNT_CONTACT'\n };\n }\n if (p.externalParticipant) {\n return {\n id: p.externalParticipant.id,\n name: p.externalParticipant.name,\n origin: 'EXTERNAL_PARTICIPANT'\n };\n }\n return null;\n }\n\n onSearchParticipants(event: { query: string }): void {\n this.scheduleService.searchParticipantLookup(\n event.query ?? '',\n PARTICIPANT_SEARCH_LIMIT\n ).subscribe({\n next: (r) => {\n const addedIds = new Set(\n this.addedParticipants.map(p => p.id + p.origin)\n );\n this.participantSuggestions = (r.contents ?? [])\n .filter(p => !addedIds.has(p.id + p.origin));\n },\n error: () => {\n this.participantSuggestions = [];\n }\n });\n }\n\n onSelectParticipant(participant: ParticipantLookup): void {\n if (\n !this.addedParticipants.some(\n p => p.id === participant.id && p.origin === participant.origin\n )\n ) {\n this.addedParticipants = [...this.addedParticipants, participant];\n }\n setTimeout(() => {\n this.selectedParticipantLookup = null;\n });\n }\n\n onRemoveParticipant(participant: ParticipantLookup): void {\n this.addedParticipants = this.addedParticipants.filter(\n p => !(p.id === participant.id && p.origin === participant.origin)\n );\n }\n\n /**\n * S1541: Break onSave into smaller helpers to reduce complexity\n * S121/S2681: Add braces to all if statements\n */\n onSave(): void {\n if (this.scheduleForm.invalid) {\n this.scheduleForm.markAllAsTouched();\n return;\n }\n const payload: Record<string, unknown> = this.buildSavePayload();\n const op = this.isEditing\n ? this.scheduleService.update(payload['id'] as string, payload)\n : this.scheduleService.insert(payload);\n let scheduleId: string;\n op.pipe(\n switchMap((result: Record<string, unknown>) => {\n scheduleId = this.isEditing\n ? payload['id'] as string\n : result?.['id'] as string;\n return this.scheduleService.manageParticipants(\n scheduleId,\n this.buildManageParticipantsPayload()\n );\n })\n ).subscribe({\n next: () => {\n this.visible = false;\n this.visibleChange.emit(false);\n this.saved.emit(scheduleId);\n }\n });\n }\n\n private buildSavePayload(): Record<string, unknown> {\n const payload: Record<string, unknown> = {\n ...this.scheduleForm.value,\n type: this.scheduleForm.value.type || null,\n whenOccurs: this.recurrenceDescription ?? null\n };\n if (payload['startDate']) {\n payload['startDate'] = toDateString(payload['startDate']);\n }\n if (payload['endDate']) {\n payload['endDate'] = toDateString(payload['endDate']);\n }\n if (payload['startTime']) {\n payload['startTime'] = toTimeString(payload['startTime']);\n }\n if (payload['endTime']) {\n payload['endTime'] = toTimeString(payload['endTime']);\n }\n if (!payload['withRecurrence']) {\n this.clearRecurrencePayload(payload);\n } else {\n this.cleanRecurrenceFields(payload);\n }\n if (payload['allDay']) {\n payload['startTime'] = null;\n payload['endTime'] = null;\n }\n return payload;\n }\n\n private clearRecurrencePayload(payload: Record<string, unknown>): void {\n payload['endDate'] = null;\n payload['recurrenceInterval'] = null;\n payload['weekDays'] = null;\n payload['repeatWhen'] = null;\n payload['repeatWhenDay'] = null;\n payload['repeatWhenOrdinalWeekDay'] = null;\n payload['repeatWhenWeekMonth'] = null;\n payload['repeatWhenMonth'] = null;\n }\n\n onCancel(): void {\n this.visible = false;\n this.visibleChange.emit(false);\n }\n\n private buildManageParticipantsPayload(): {\n accountsId: string[];\n accountContactsId: string[];\n collaboratorsId: string[];\n externalParticipantsId: string[];\n } {\n const a: string[] = [];\n const ac: string[] = [];\n const c: string[] = [];\n const e: string[] = [];\n for (const p of this.addedParticipants) {\n switch (p.origin) {\n case 'ACCOUNT': {\n a.push(p.id);\n break;\n }\n case 'ACCOUNT_CONTACT': {\n ac.push(p.id);\n break;\n }\n case 'COLLABORATOR': {\n c.push(p.id);\n break;\n }\n case 'EXTERNAL_PARTICIPANT': {\n e.push(p.id);\n break;\n }\n }\n }\n return {\n accountsId: a,\n accountContactsId: ac,\n collaboratorsId: c,\n externalParticipantsId: e\n };\n }\n\n /**\n * S1541: Break cleanRecurrenceFields into smaller helpers\n * S121/S2681: Add braces to all if statements\n */\n private cleanRecurrenceFields(p: Record<string, unknown>): void {\n const r = p['recurrence'] as string;\n if (r !== ScheduleRecurrence.Weekly) {\n p['weekDays'] = null;\n }\n this.cleanDailyWeeklyFields(p, r);\n this.cleanMonthlyFields(p, r);\n this.cleanYearlyFields(p, r);\n }\n\n private cleanDailyWeeklyFields(p: Record<string, unknown>, r: string): void {\n if (\n r === ScheduleRecurrence.Daily ||\n r === ScheduleRecurrence.Weekly\n ) {\n p['repeatWhen'] = null;\n p['repeatWhenDay'] = null;\n p['repeatWhenOrdinalWeekDay'] = null;\n p['repeatWhenWeekMonth'] = null;\n p['repeatWhenMonth'] = null;\n }\n }\n\n private cleanMonthlyFields(p: Record<string, unknown>, r: string): void {\n if (r === ScheduleRecurrence.Monthly) {\n p['repeatWhenMonth'] = null;\n this.cleanRepeatWhenFields(p);\n }\n }\n\n private cleanYearlyFields(p: Record<string, unknown>, r: string): void {\n if (r === ScheduleRecurrence.Yearly) {\n this.cleanRepeatWhenFields(p);\n }\n }\n\n private cleanRepeatWhenFields(p: Record<string, unknown>): void {\n if (p['repeatWhen'] === RepeatWhen.InDay) {\n p['repeatWhenOrdinalWeekDay'] = null;\n p['repeatWhenWeekMonth'] = null;\n } else {\n p['repeatWhenDay'] = null;\n }\n }\n\n private resetRecurrenceDefaults(date: Date): void {\n if (!this.scheduleForm) {\n return;\n }\n const d = date || new Date();\n this.scheduleForm.patchValue({\n recurrence: ScheduleRecurrence.Daily,\n recurrenceInterval: 1,\n weekDays: [getCurrentWeekDay(d)],\n repeatWhen: RepeatWhen.InDay,\n repeatWhenDay: d.getDate(),\n repeatWhenOrdinalWeekDay: getOrdinalForDate(d),\n repeatWhenWeekMonth: getCurrentWeekDay(d),\n repeatWhenMonth: getCurrentMonth(d)\n });\n }\n\n get showRecurrenceFields(): boolean {\n return this.scheduleForm?.get('withRecurrence')?.value === true;\n }\n\n get currentRecurrence(): string {\n return this.scheduleForm?.get('recurrence')?.value;\n }\n\n get currentRepeatWhen(): string {\n return this.scheduleForm?.get('repeatWhen')?.value;\n }\n\n get showWeekDays(): boolean {\n return this.currentRecurrence === ScheduleRecurrence.Weekly;\n }\n\n get showRepeatWhen(): boolean {\n return (\n this.currentRecurrence === ScheduleRecurrence.Monthly ||\n this.currentRecurrence === ScheduleRecurrence.Yearly\n );\n }\n\n get showRepeatWhenDay(): boolean {\n return this.showRepeatWhen && this.currentRepeatWhen === RepeatWhen.InDay;\n }\n\n get showOrdinalFields(): boolean {\n return (\n this.showRepeatWhen &&\n this.currentRepeatWhen === RepeatWhen.InOrdinalWeekDay\n );\n }\n\n get showMonthField(): boolean {\n return this.currentRecurrence === ScheduleRecurrence.Yearly;\n }\n\n getOriginLabel(o: ParticipantOrigin): string { return _getOriginLabel(this.t, o); }\n getOriginIcon(o: ParticipantOrigin): string { return _getOriginIcon(o); }\n getParticipantName(p: ScheduleParticipant): string { return _getParticipantName(p); }\n getParticipantType(p: ScheduleParticipant): string { return _getParticipantType(this.t, p); }\n getParticipantTypeIcon(p: ScheduleParticipant): string { return _getParticipantTypeIcon(p); }\n getPrioritySeverity(p: string): PrioritySeverity { return _getPrioritySeverity(p); }\n getPriorityLabel(p: string): string { return _getPriorityLabel(this.t, p); }\n getConfirmationSeverity(c: string): ConfirmationSeverity { return _getConfirmationSeverity(c); }\n getConfirmationLabel(c: string): string { return _getConfirmationLabel(this.t, c); }\n\n private getDefaultStartTime(d: Date): string {\n return getDefaultStartTime(d);\n }\n\n private getDefaultEndTime(st: string): string {\n return getDefaultEndTime(st);\n }\n}\n","<!-- Schedule Drawer -->\n<p-drawer\n [(visible)]=\"visible\"\n position=\"right\"\n [style]=\"{ width: '85vw', 'max-width': '1200px' }\"\n [modal]=\"true\"\n (onHide)=\"onCancel()\"\n>\n <ng-template pTemplate=\"header\">\n <span class=\"drawer-title\">\n <i class=\"pi pi-calendar\"></i>\n {{\n isEditing\n ? ('crmx.components.schedule_schedule_edit' | translate)\n : ('crmx.components.schedule_schedule_new' | translate)\n }}\n </span>\n </ng-template>\n\n <div class=\"drawer-layout\" *ngIf=\"scheduleForm\">\n <!-- Left: Form -->\n <div class=\"drawer-left\">\n <div class=\"drawer-section-header\">\n <i class=\"pi pi-info-circle\"></i>\n <span>\n {{ 'crmx.components.schedule_schedule_details' | translate }}\n </span>\n </div>\n <sia-dynamic-form\n #detailForm\n [sections]=\"[{ fields: scheduleDetailFields }]\"\n [entityData]=\"entityDataForForm\"\n [mode]=\"'form'\"\n [showSubmitButton]=\"false\"\n [showCancelButton]=\"false\"\n (formReady)=\"onDetailFormReady($event)\"\n ></sia-dynamic-form>\n </div>\n\n <!-- Right: Recurrence + Participants -->\n <div class=\"drawer-right\">\n <div\n class=\"drawer-section\"\n *ngIf=\"showRecurrenceFields\"\n >\n <div class=\"drawer-section-header\">\n <i class=\"pi pi-replay\"></i>\n <span>\n {{\n 'crmx.components.schedule_recurrence_config'\n | translate\n }}\n </span>\n </div>\n <form\n [formGroup]=\"scheduleForm\"\n class=\"drawer-form\"\n >\n <div class=\"form-row\">\n <div class=\"form-field flex-1\">\n <label for=\"recurrence\">\n {{ 'crmx.components.schedule_recurrence' | translate }}\n </label>\n <p-dropdown\n id=\"recurrence\"\n formControlName=\"recurrence\"\n [options]=\"recurrenceOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n <div class=\"form-field flex-1\">\n <label for=\"recurrenceInterval\">\n {{\n 'crmx.components.schedule_recurrence_interval'\n | translate\n }}\n </label>\n <p-inputNumber\n id=\"recurrenceInterval\"\n formControlName=\"recurrenceInterval\"\n [min]=\"1\"\n [max]=\"99\"\n class=\"w-full\"\n ></p-inputNumber>\n </div>\n </div>\n <div\n class=\"form-row\"\n *ngIf=\"showWeekDays\"\n >\n <div class=\"form-field flex-1\">\n <label for=\"weekDays\">\n {{ 'crmx.components.schedule_week_days' | translate }}\n </label>\n <p-multiSelect\n id=\"weekDays\"\n formControlName=\"weekDays\"\n [options]=\"weekDayOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [placeholder]=\"\n 'crmx.components.schedule_select_week_day'\n | translate\n \"\n [maxSelectedLabels]=\"7\"\n class=\"w-full\"\n ></p-multiSelect>\n </div>\n </div>\n <div\n class=\"form-row\"\n *ngIf=\"showRepeatWhen\"\n >\n <div class=\"form-field flex-1\">\n <label for=\"repeatWhen\">\n {{\n 'crmx.components.schedule_repeat_when' | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhen\"\n formControlName=\"repeatWhen\"\n [options]=\"repeatWhenOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n <div\n class=\"form-field flex-1\"\n *ngIf=\"showRepeatWhenDay\"\n >\n <label for=\"repeatWhenDay\">\n {{\n 'crmx.components.schedule_repeat_when_day'\n | translate\n }}\n </label>\n <p-inputNumber\n id=\"repeatWhenDay\"\n formControlName=\"repeatWhenDay\"\n [min]=\"1\"\n [max]=\"31\"\n class=\"w-full\"\n ></p-inputNumber>\n </div>\n <div\n class=\"form-field flex-1\"\n *ngIf=\"showOrdinalFields\"\n >\n <label for=\"repeatWhenOrdinalWeekDay\">\n {{\n 'crmx.components.schedule_ordinal_week_day'\n | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhenOrdinalWeekDay\"\n formControlName=\"repeatWhenOrdinalWeekDay\"\n [options]=\"ordinalOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n <div\n class=\"form-field flex-1\"\n *ngIf=\"showOrdinalFields\"\n >\n <label for=\"repeatWhenWeekMonth\">\n {{\n 'crmx.components.schedule_week_month' | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhenWeekMonth\"\n formControlName=\"repeatWhenWeekMonth\"\n [options]=\"weekDayOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n </div>\n <div\n class=\"form-row\"\n *ngIf=\"showMonthField\"\n >\n <div class=\"form-field flex-1\">\n <label for=\"repeatWhenMonth\">\n {{\n 'crmx.components.schedule_repeat_month' | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhenMonth\"\n formControlName=\"repeatWhenMonth\"\n [options]=\"monthOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n </div>\n </form>\n <div\n class=\"recurrence-description\"\n *ngIf=\"recurrenceDescription\"\n >\n <i class=\"pi pi-info-circle\"></i>\n <span>{{ recurrenceDescription }}</span>\n </div>\n </div>\n\n <p-divider></p-divider>\n\n <!-- Participants -->\n <div class=\"drawer-section\">\n <div class=\"drawer-section-header\">\n <i class=\"pi pi-users\"></i>\n <span>\n {{ 'crmx.components.schedule_participants' | translate }}\n </span>\n </div>\n <div class=\"participant-search\">\n <p-autoComplete\n [(ngModel)]=\"selectedParticipantLookup\"\n [ngModelOptions]=\"{standalone: true}\"\n [suggestions]=\"participantSuggestions\"\n (completeMethod)=\"\n onSearchParticipants($event)\n \"\n (onSelect)=\"\n onSelectParticipant($event.value)\n \"\n (onFocus)=\"\n onSearchParticipants({ query: '' })\n \"\n optionLabel=\"name\"\n [placeholder]=\"\n 'crmx.components.schedule_search_participant'\n | translate\n \"\n [minLength]=\"0\"\n [forceSelection]=\"true\"\n [showClear]=\"true\"\n [fluid]=\"true\"\n >\n <ng-template\n let-item\n pTemplate=\"item\"\n >\n <div class=\"participant-suggestion\">\n <i\n [class]=\"getOriginIcon(item.origin)\"\n ></i>\n <div\n class=\"participant-suggestion-info\"\n >\n <span\n class=\"participant-suggestion-name\"\n >\n {{ item.name }}\n </span>\n <span\n class=\"participant-suggestion-detail\"\n *ngIf=\"item.referenceName\"\n >\n {{ item.referenceName }}\n </span>\n </div>\n <span\n class=\"participant-suggestion-origin\"\n >\n {{ getOriginLabel(item.origin) }}\n </span>\n </div>\n </ng-template>\n </p-autoComplete>\n </div>\n <div\n *ngIf=\"\n !participantsLoading &&\n addedParticipants.length === 0\n \"\n class=\"participants-empty\"\n >\n <i class=\"pi pi-users\"></i>\n <p>\n {{\n 'crmx.components.schedule_no_participants'\n | translate\n }}\n </p>\n </div>\n <p-table\n *ngIf=\"\n !participantsLoading &&\n addedParticipants.length > 0\n \"\n [value]=\"addedParticipants\"\n styleClass=\"p-datatable-sm p-datatable-striped\"\n >\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"col\">\n {{ 'crmx.components.schedule_name' | translate }}\n </th>\n <th\n scope=\"col\"\n class=\"col-participant-type\"\n >\n {{\n 'crmx.components.schedule_participant_type'\n | translate\n }}\n </th>\n <th\n scope=\"col\"\n class=\"col-actions\"\n ></th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-p>\n <tr>\n <td>\n <div class=\"participant-name-cell\">\n <span>{{ p.name }}</span>\n <span\n *ngIf=\"p.referenceName\"\n class=\"participant-reference\"\n >\n {{ p.referenceName }}\n </span>\n </div>\n </td>\n <td>\n <div class=\"participant-type-cell\">\n <i\n [class]=\"getOriginIcon(p.origin)\"\n ></i>\n <span>\n {{ getOriginLabel(p.origin) }}\n </span>\n </div>\n </td>\n <td>\n <p-button\n icon=\"pi pi-trash\"\n [rounded]=\"true\"\n [text]=\"true\"\n severity=\"danger\"\n (onClick)=\"onRemoveParticipant(p)\"\n [pTooltip]=\"\n 'crmx.components.schedule_remove' | translate\n \"\n tooltipPosition=\"top\"\n ></p-button>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n </div>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"drawer-footer\">\n <p-button\n [label]=\"'crmx.components.cancel' | translate\"\n icon=\"pi pi-times\"\n severity=\"secondary\"\n [outlined]=\"true\"\n (onClick)=\"onCancel()\"\n ></p-button>\n <p-button\n [label]=\"'crmx.components.save' | translate\"\n icon=\"pi pi-check\"\n (onClick)=\"onSave()\"\n ></p-button>\n </div>\n </ng-template>\n</p-drawer>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DialogModule } from 'primeng/dialog';\nimport { DividerModule } from 'primeng/divider';\nimport { TagModule } from 'primeng/tag';\nimport { TableModule } from 'primeng/table';\nimport { TranslatePipe, TranslationService, DateFormatPipe } from '@seniorsistemas/components-ai';\nimport { ScheduleService } from '../services/schedule.service';\nimport { Schedule, ScheduleParticipant } from '../entities/schedule.interface';\nimport {\n getParticipantName, getParticipantType, getParticipantTypeIcon,\n getPrioritySeverity, getPriorityLabel, getConfirmationSeverity,\n getConfirmationLabel, PrioritySeverity, ConfirmationSeverity\n} from '../helpers/schedule-display.helpers';\n\n@Component({\n selector: 's-schedule-detail',\n standalone: true,\n imports: [CommonModule, DialogModule, DividerModule, TagModule, TableModule, TranslatePipe, DateFormatPipe],\n templateUrl: './schedule-detail.component.html',\n styleUrl: './schedule-detail.component.scss'\n})\nexport class ScheduleDetailComponent {\n @Input() visible = false;\n @Output() visibleChange = new EventEmitter<boolean>();\n\n schedule: {\n id: string; name: string;\n scheduleType: { id: string; name: string } | null;\n withRecurrence: boolean; whenOccurs: string;\n allDay: boolean; startTime?: string; endTime?: string;\n priority: string; [key: string]: unknown;\n } | null = null;\n scheduleData: Schedule | null = null;\n participants: ScheduleParticipant[] = [];\n participantsLoading = false;\n loading = false;\n\n constructor(\n private readonly scheduleService: ScheduleService,\n private readonly t: TranslationService\n ) {}\n\n open(scheduleId: string): void {\n this.schedule = null;\n this.scheduleData = null;\n this.participants = [];\n this.loading = true;\n this.participantsLoading = true;\n this.visible = true;\n this.visibleChange.emit(true);\n\n this.scheduleService.get(scheduleId).subscribe({\n next: (data) => {\n this.scheduleData = data;\n this.schedule = {\n id: data.id, name: data.name,\n scheduleType: data.type ?? null,\n withRecurrence: data.withRecurrence,\n whenOccurs: data.whenOccurs ?? '',\n allDay: data.allDay, startTime: data.startTime,\n endTime: data.endTime, priority: data.priority\n };\n this.loading = false;\n },\n error: () => { this.loading = false; }\n });\n this.scheduleService.listParticipants(scheduleId).subscribe({\n next: (r) => { this.participants = r.contents ?? []; this.participantsLoading = false; },\n error: () => { this.participantsLoading = false; }\n });\n }\n\n onClose(): void { this.visible = false; this.visibleChange.emit(false); }\n\n getParticipantName(p: ScheduleParticipant): string { return getParticipantName(p); }\n getParticipantType(p: ScheduleParticipant): string { return getParticipantType(this.t, p); }\n getParticipantTypeIcon(p: ScheduleParticipant): string { return getParticipantTypeIcon(p); }\n getPrioritySeverity(p: string): PrioritySeverity { return getPrioritySeverity(p); }\n getPriorityLabel(p: string): string { return getPriorityLabel(this.t, p); }\n getConfirmationSeverity(c: string): ConfirmationSeverity { return getConfirmationSeverity(c); }\n getConfirmationLabel(c: string): string { return getConfirmationLabel(this.t, c); }\n}\n","<p-dialog\n [(visible)]=\"visible\"\n [header]=\"schedule?.name || ''\"\n [modal]=\"true\"\n styleClass=\"detail-dialog\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n (onHide)=\"onClose()\"\n>\n <div class=\"detail-dialog-body\" *ngIf=\"schedule\">\n <div\n class=\"detail-dialog-section\"\n *ngIf=\"scheduleData\"\n >\n <div class=\"detail-dialog-row\">\n <span class=\"detail-label\">\n {{ 'crmx.components.schedule_priority' | translate }}\n </span>\n <p-tag\n [value]=\"getPriorityLabel(schedule.priority)\"\n [severity]=\"getPrioritySeverity(schedule.priority)\"\n ></p-tag>\n </div>\n <div\n class=\"detail-dialog-row\"\n *ngIf=\"schedule.scheduleType\"\n >\n <span class=\"detail-label\">\n {{ 'crmx.components.schedule_type' | translate }}\n </span>\n <span>{{ schedule.scheduleType.name }}</span>\n </div>\n <div\n class=\"detail-dialog-row\"\n *ngIf=\"schedule.whenOccurs\"\n >\n <span class=\"detail-label\">\n {{ 'crmx.components.schedule_recurrence' | translate }}\n </span>\n <span>{{ schedule.whenOccurs }}</span>\n </div>\n <div\n class=\"detail-dialog-row\"\n *ngIf=\"scheduleData.comments\"\n >\n <span class=\"detail-label\">\n {{ 'crmx.components.schedule_comments' | translate }}\n </span>\n <span>{{ scheduleData.comments }}</span>\n </div>\n </div>\n <p-divider *ngIf=\"scheduleData\"></p-divider>\n <div\n class=\"detail-dialog-section\"\n *ngIf=\"scheduleData\"\n >\n <div class=\"detail-section-header\">\n <i class=\"pi pi-users\"></i>\n <span>\n {{ 'crmx.components.schedule_participants' | translate }}\n </span>\n </div>\n <p-table\n [value]=\"participants\"\n [loading]=\"participantsLoading\"\n styleClass=\"p-datatable-sm p-datatable-striped\"\n >\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"col\">\n {{ 'crmx.components.schedule_name' | translate }}\n </th>\n <th\n scope=\"col\"\n class=\"col-participant-type\"\n >\n {{ 'crmx.components.schedule_participant_type' | translate }}\n </th>\n <th\n scope=\"col\"\n class=\"col-status\"\n >\n {{ 'crmx.components.schedule_status' | translate }}\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-p>\n <tr>\n <td>\n <span>{{ getParticipantName(p) }}</span>\n </td>\n <td>\n <div class=\"participant-type-cell\">\n <i\n [class]=\"getParticipantTypeIcon(p)\"\n ></i>\n <span>\n {{ getParticipantType(p) }}\n </span>\n </div>\n </td>\n <td>\n <p-tag\n *ngIf=\"p.organizer\"\n [value]=\"\n 'crmx.components.schedule_participant_organizer_label'\n | translate\n \"\n severity=\"info\"\n ></p-tag>\n <p-tag\n *ngIf=\"!p.organizer\"\n [value]=\"\n getConfirmationLabel(p.confirmation)\n \"\n [severity]=\"\n getConfirmationSeverity(p.confirmation)\n \"\n ></p-tag>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td colspan=\"3\">\n <div class=\"participants-empty\">\n <i class=\"pi pi-users\"></i>\n <p>\n {{\n 'crmx.components.schedule_no_participants'\n | translate\n }}\n </p>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n</p-dialog>\n","/*\n * Public API Surface of @senior-gestao-relacionamento/angular-components\n */\n\nexport { AngularComponentsModule } from './lib/angular-components.module';\n\n// Services\nexport { StorageService } from './lib/services/storage/storage.service';\nexport { CurrentCollaboratorService } from './lib/services/current-collaborator/current-collaborator.service';\n\n// Config\nexport { provideAngularComponentsTranslations } from './lib/config/provide-angular-components-translations';\n\n// Models\nexport type {\n Collaborator,\n CollaboratorLeader,\n CollaboratorBranch,\n Branch,\n Company,\n JobTitle\n} from './lib/services/current-collaborator/models/collaborator.model';\n\n// Schedule\nexport { ScheduleFormComponent } from './lib/components/schedule/schedule-form/schedule-form.component';\nexport { ScheduleDetailComponent } from './lib/components/schedule/schedule-detail/schedule-detail.component';\nexport { ScheduleService } from './lib/components/schedule/services/schedule.service';\nexport { ScheduleTypeService } from './lib/components/schedule/services/schedule-type.service';\nexport type { Schedule, ScheduleRecurrenceItem, RecurrenceDatesRecord, ScheduleParticipant } from './lib/components/schedule/entities/schedule.interface';\nexport type { ScheduleType } from './lib/components/schedule/entities/schedule-type.interface';\nexport type { ParticipantLookup, ParticipantOrigin, ScheduleSummaryByDate } from './lib/components/schedule/entities/participant-lookup.interface';\nexport { SchedulePriority, ScheduleRecurrence, WeekDay, Month, RepeatWhen, OrdinalWeekDay, ParticipantConfirmation, Status } from './lib/components/schedule/enums/schedule.enums';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.StorageService","_getOriginLabel","_getOriginIcon","_getParticipantName","_getParticipantType","_getParticipantTypeIcon","_getPrioritySeverity","_getPriorityLabel","_getConfirmationSeverity","_getConfirmationLabel","i1","i2.ScheduleService","i3.ScheduleTypeService","i4.CurrentCollaboratorService","i1.ScheduleService","i2","i3","i5","i6","i7"],"mappings":"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"}
1
+ {"version":3,"file":"senior-gestao-relacionamento-angular-components.mjs","sources":["../../projects/angular-components/src/lib/angular-components.module.ts","../../projects/angular-components/src/lib/services/storage/storage.service.ts","../../projects/angular-components/src/lib/services/current-collaborator/current-collaborator.service.ts","../../projects/angular-components/src/lib/config/provide-angular-components-translations.ts","../../projects/angular-components/src/lib/components/schedule/enums/schedule.enums.ts","../../projects/angular-components/src/lib/components/schedule/helpers/schedule-date.helpers.ts","../../projects/angular-components/src/lib/components/schedule/helpers/schedule-display.helpers.ts","../../projects/angular-components/src/lib/components/schedule/services/schedule.service.ts","../../projects/angular-components/src/lib/components/schedule/services/schedule-type.service.ts","../../projects/angular-components/src/lib/components/schedule/schedule-form/schedule-form.component.ts","../../projects/angular-components/src/lib/components/schedule/schedule-form/schedule-form.component.html","../../projects/angular-components/src/lib/components/schedule/schedule-detail/schedule-detail.component.ts","../../projects/angular-components/src/lib/components/schedule/schedule-detail/schedule-detail.component.html","../../projects/angular-components/src/public-api.ts","../../projects/angular-components/src/senior-gestao-relacionamento-angular-components.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Módulo principal da biblioteca @senior-gestao-relacionamento/angular-components\n */\n@NgModule({\n declarations: [],\n imports: [\n CommonModule\n ],\n exports: []\n})\nexport class AngularComponentsModule { }\n","import { Injectable } from '@angular/core';\n\nconst TOKEN_COOKIE_NAME = 'com.senior.token';\nconst STORAGE_PREFIX = 'crm';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class StorageService {\n\n /**\n * Retorna o username do usuário logado a partir do cookie com.senior.token.\n */\n private getUsername(): string | null {\n if (typeof document === 'undefined') {\n return null;\n }\n\n const nameEQ = TOKEN_COOKIE_NAME + '=';\n const cookies = document.cookie.split(';');\n\n for (const cookie of cookies) {\n const trimmed = cookie.trim();\n if (trimmed.startsWith(nameEQ)) {\n try {\n const value = decodeURIComponent(trimmed.substring(nameEQ.length));\n const token = JSON.parse(value);\n return token?.username ?? null;\n } catch {\n return null;\n }\n }\n }\n\n return null;\n }\n\n /**\n * Monta a key completa com prefixo e username.\n * Formato: crm:{username}:{key}\n */\n private buildKey(key: string): string {\n const username = this.getUsername() ?? 'anonymous';\n return `${STORAGE_PREFIX}:${username}:${key}`;\n }\n\n /**\n * Salva um valor no localStorage.\n * Aceita qualquer tipo serializável.\n */\n set<T>(key: string, value: T): void {\n if (typeof localStorage === 'undefined') {\n return;\n }\n\n localStorage.setItem(this.buildKey(key), JSON.stringify(value));\n }\n\n /**\n * Recupera um valor do localStorage.\n * Retorna null se não existir ou falhar o parse.\n */\n get<T>(key: string): T | null {\n if (typeof localStorage === 'undefined') {\n return null;\n }\n\n try {\n const data = localStorage.getItem(this.buildKey(key));\n return data ? JSON.parse(data) as T : null;\n } catch {\n return null;\n }\n }\n\n /**\n * Salva um valor com TTL (tempo de expiração em minutos).\n */\n setWithTTL<T>(key: string, value: T, ttlMinutes: number): void {\n const wrapper = {\n value,\n expiresAt: Date.now() + ttlMinutes * 60 * 1000\n };\n this.set(key, wrapper);\n }\n\n /**\n * Recupera um valor com TTL. Retorna null se expirado.\n */\n getWithTTL<T>(key: string): T | null {\n const wrapper = this.get<{ value: T; expiresAt: number }>(key);\n\n if (!wrapper) {\n return null;\n }\n\n if (Date.now() > wrapper.expiresAt) {\n this.remove(key);\n return null;\n }\n\n return wrapper.value;\n }\n\n /**\n * Remove um item do localStorage.\n */\n remove(key: string): void {\n if (typeof localStorage === 'undefined') {\n return;\n }\n\n localStorage.removeItem(this.buildKey(key));\n }\n\n /**\n * Remove todos os itens do usuário atual.\n */\n clear(): void {\n if (typeof localStorage === 'undefined') {\n return;\n }\n\n const username = this.getUsername() ?? 'anonymous';\n const prefix = `${STORAGE_PREFIX}:${username}:`;\n\n const keysToRemove: string[] = [];\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(prefix)) {\n keysToRemove.push(key);\n }\n }\n\n keysToRemove.forEach((key) => localStorage.removeItem(key));\n }\n\n /**\n * Verifica se um item existe (e não está expirado, se tiver TTL).\n */\n has(key: string): boolean {\n return this.get(key) !== null;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { BehaviorSubject, Observable, of, tap } from 'rxjs';\nimport { Collaborator } from './models/collaborator.model';\nimport { StorageService } from '../storage/storage.service';\n\nconst CACHE_KEY = 'currentCollaborator';\nconst CACHE_TTL_MINUTES = 30;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CurrentCollaboratorService {\n private readonly API_PATH = '/crmx/collaborator/queries/getCurrentCollaborator';\n\n private readonly collaboratorSubject = new BehaviorSubject<Collaborator | null>(null);\n public readonly collaborator$ = this.collaboratorSubject.asObservable();\n\n constructor(\n private readonly http: HttpClient,\n private readonly storage: StorageService\n ) {\n const cached = this.storage.getWithTTL<Collaborator>(CACHE_KEY);\n if (cached) {\n this.collaboratorSubject.next(cached);\n }\n }\n\n /**\n * Busca o colaborador atual. Retorna do cache se disponível,\n * caso contrário consulta a API.\n */\n load(): Observable<Collaborator> {\n const cached = this.storage.getWithTTL<Collaborator>(CACHE_KEY);\n\n if (cached) {\n this.collaboratorSubject.next(cached);\n return of(cached);\n }\n\n return this.http.get<Collaborator>(this.API_PATH).pipe(\n tap((collaborator) => {\n this.storage.setWithTTL(CACHE_KEY, collaborator, CACHE_TTL_MINUTES);\n this.collaboratorSubject.next(collaborator);\n })\n );\n }\n\n /**\n * Força a atualização do cache consultando a API.\n */\n refresh(): Observable<Collaborator> {\n this.storage.remove(CACHE_KEY);\n this.collaboratorSubject.next(null);\n\n return this.http.get<Collaborator>(this.API_PATH).pipe(\n tap((collaborator) => {\n this.storage.setWithTTL(CACHE_KEY, collaborator, CACHE_TTL_MINUTES);\n this.collaboratorSubject.next(collaborator);\n })\n );\n }\n\n /**\n * Retorna o colaborador atual do cache (sem request).\n */\n get(): Collaborator | null {\n return this.collaboratorSubject.value;\n }\n\n /**\n * Limpa o cache do colaborador.\n */\n clearCache(): void {\n this.storage.remove(CACHE_KEY);\n this.collaboratorSubject.next(null);\n }\n}\n","import { Provider } from '@angular/core';\nimport { TranslationLoader } from '@seniorsistemas/components-ai';\n\nimport ptBR from '../i18n/pt-BR.json';\nimport enUS from '../i18n/en-US.json';\nimport esES from '../i18n/es-ES.json';\n\nconst LIB_TRANSLATIONS: Record<string, Record<string, string>> = {\n 'pt-BR': ptBR,\n 'en-US': enUS,\n 'es-ES': esES\n};\n\n/**\n * Cria um TranslationLoader que combina as traduções do angular-components\n * com as traduções da aplicação consumidora.\n *\n * Uso no app.config.ts:\n * ```ts\n * import { provideAngularComponentsTranslations } from '@senior-gestao-relacionamento/angular-components';\n *\n * export const appConfig = {\n * providers: [\n * provideAngularComponentsTranslations(async (language) => {\n * const translations = await import(`../locale/${language}.json`);\n * return translations.default || translations;\n * })\n * ]\n * };\n * ```\n */\nexport function provideAngularComponentsTranslations(\n appLoader?: (language: string) => Promise<Record<string, string>>\n): Provider {\n return {\n provide: 'TranslationLoader',\n useValue: {\n loadTranslations: async (language: string): Promise<Record<string, string>> => {\n const libTranslations = LIB_TRANSLATIONS[language] ?? {};\n if (appLoader) {\n const appTranslations = await appLoader(language);\n return { ...libTranslations, ...appTranslations };\n }\n return libTranslations;\n }\n } as TranslationLoader\n };\n}\n","export enum SchedulePriority {\n Low = 'LOW',\n Medium = 'MEDIUM',\n High = 'HIGH',\n Critical = 'CRITICAL'\n}\n\nexport enum ScheduleRecurrence {\n Daily = 'DAILY',\n Weekly = 'WEEKLY',\n Monthly = 'MONTHLY',\n Yearly = 'YEARLY'\n}\n\nexport enum WeekDay {\n Sunday = 'SUNDAY',\n Monday = 'MONDAY',\n Tuesday = 'TUESDAY',\n Wednesday = 'WEDNESDAY',\n Thursday = 'THURSDAY',\n Friday = 'FRIDAY',\n Saturday = 'SATURDAY'\n}\n\nexport enum Month {\n January = 'JANUARY',\n February = 'FEBRUARY',\n March = 'MARCH',\n April = 'APRIL',\n May = 'MAY',\n June = 'JUNE',\n July = 'JULY',\n August = 'AUGUST',\n September = 'SEPTEMBER',\n October = 'OCTOBER',\n November = 'NOVEMBER',\n December = 'DECEMBER'\n}\n\nexport enum RepeatWhen {\n InDay = 'IN_DAY',\n InOrdinalWeekDay = 'IN_ORDINAL_WEEK_DAY'\n}\n\nexport enum OrdinalWeekDay {\n First = 'FIRST',\n Second = 'SECOND',\n Third = 'THIRD',\n Fourth = 'FOURTH',\n Last = 'LAST'\n}\n\nexport enum ParticipantConfirmation {\n Yes = 'YES',\n Pending = 'PENDING',\n No = 'NO'\n}\n\nexport enum Status {\n Active = 'ACTIVE',\n Inactive = 'INACTIVE',\n Deleted = 'DELETED'\n}\n","import { WeekDay, Month, OrdinalWeekDay } from '../enums/schedule.enums';\n\nconst MINUTES_HALF_HOUR = 30;\nconst DAYS_IN_WEEK = 7;\nconst ORDINAL_THIRD_WEEK = 3;\nconst HOURS_IN_DAY = 24;\nconst MINUTES_IN_HOUR = 60;\nconst DATE_STRING_LENGTH = 10;\nconst TIME_SHORT_LENGTH = 5;\n\nexport function formatDateToString(d: Date): string {\n return d.toISOString().split('T')[0];\n}\n\nexport function toDateString(v: unknown): string {\n if (!v) {\n return '';\n }\n if (v instanceof Date) {\n return formatDateToString(v);\n }\n const s = String(v);\n return s.length > DATE_STRING_LENGTH ? s.substring(0, DATE_STRING_LENGTH) : s;\n}\n\nexport function toTimeString(v: unknown): string {\n if (!v) {\n return '';\n }\n if (v instanceof Date) {\n return formatTime(v.getHours(), v.getMinutes());\n }\n const s = String(v);\n if (s.includes('T')) {\n const d = new Date(s);\n return formatTime(d.getHours(), d.getMinutes());\n }\n return s.length === TIME_SHORT_LENGTH ? s + ':00' : s;\n}\n\nexport function getDefaultStartTime(d: Date): string {\n let h = d.getHours();\n let m = d.getMinutes();\n if (m < MINUTES_HALF_HOUR) {\n m = MINUTES_HALF_HOUR;\n } else {\n h++;\n m = 0;\n }\n if (h >= HOURS_IN_DAY) {\n h = 0;\n }\n return formatTime(h, m);\n}\n\nexport function getDefaultEndTime(startTime: string): string {\n const [hS, mS] = startTime.split(':');\n let h = +hS;\n let m = +mS + MINUTES_HALF_HOUR;\n if (m >= MINUTES_IN_HOUR) {\n h++;\n m -= MINUTES_IN_HOUR;\n }\n if (h >= HOURS_IN_DAY) {\n h = 0;\n }\n return formatTime(h, m);\n}\n\nexport function getCurrentWeekDay(d: Date): WeekDay {\n const days = [\n WeekDay.Sunday, WeekDay.Monday, WeekDay.Tuesday,\n WeekDay.Wednesday, WeekDay.Thursday, WeekDay.Friday,\n WeekDay.Saturday\n ];\n return days[d.getDay()];\n}\n\nexport function getCurrentMonth(d: Date): Month {\n const months = [\n Month.January, Month.February, Month.March,\n Month.April, Month.May, Month.June,\n Month.July, Month.August, Month.September,\n Month.October, Month.November, Month.December\n ];\n return months[d.getMonth()];\n}\n\nexport function getOrdinalForDate(d: Date): OrdinalWeekDay {\n const dom = d.getDate();\n const wn = Math.ceil(dom / DAYS_IN_WEEK);\n const ld = new Date(d.getFullYear(), d.getMonth() + 1, 0).getDate();\n if (dom + DAYS_IN_WEEK > ld && wn >= 4) {\n return OrdinalWeekDay.Last;\n }\n switch (wn) {\n case 1: {\n return OrdinalWeekDay.First;\n }\n case 2: {\n return OrdinalWeekDay.Second;\n }\n case ORDINAL_THIRD_WEEK: {\n return OrdinalWeekDay.Third;\n }\n case 4: {\n return OrdinalWeekDay.Fourth;\n }\n default: {\n return OrdinalWeekDay.Last;\n }\n }\n}\n\nfunction formatTime(h: number, m: number): string {\n return `${String(h).padStart(2, '0')}:${String(m).padStart(2, '0')}:00`;\n}\n","import { ScheduleParticipant } from '../entities/schedule.interface';\nimport { ParticipantOrigin } from '../entities/participant-lookup.interface';\nimport { SchedulePriority } from '../enums/schedule.enums';\n\nexport type PrioritySeverity = 'success' | 'info' | 'warn' | 'danger';\nexport type ConfirmationSeverity = 'success' | 'warn' | 'danger';\n\ninterface Translator {\n translate(key: string): string;\n}\n\nconst ICON_PI_USER = 'pi pi-user';\n\nconst ORIGIN_LABELS: Record<string, string> = {\n ACCOUNT: 'crmx.components.schedule_participant_account',\n ACCOUNT_CONTACT: 'crmx.components.schedule_participant_account_contact',\n COLLABORATOR: 'crmx.components.schedule_participant_collaborator',\n EXTERNAL_PARTICIPANT: 'crmx.components.schedule_participant_external'\n};\n\nconst ORIGIN_ICONS: Record<string, string> = {\n ACCOUNT: 'pi pi-building',\n ACCOUNT_CONTACT: 'pi pi-id-card',\n COLLABORATOR: ICON_PI_USER,\n EXTERNAL_PARTICIPANT: 'pi pi-user-plus'\n};\n\nexport function getOriginLabel(t: Translator, o: ParticipantOrigin): string {\n return t.translate(ORIGIN_LABELS[o] ?? o);\n}\n\nexport function getOriginIcon(o: ParticipantOrigin): string {\n return ORIGIN_ICONS[o] ?? ICON_PI_USER;\n}\n\nexport function getParticipantName(p: ScheduleParticipant): string {\n const candidates = [\n p.collaborator?.name,\n p.account?.name,\n p.accountContact?.name,\n p.externalParticipant?.name\n ];\n return candidates.find(name => name != null) ?? '-';\n}\n\nexport function getParticipantType(t: Translator, p: ScheduleParticipant): string {\n if (p.collaborator) {\n return t.translate('crmx.components.schedule_participant_collaborator');\n }\n if (p.account) {\n return t.translate('crmx.components.schedule_participant_account');\n }\n if (p.accountContact) {\n return t.translate('crmx.components.schedule_participant_account_contact');\n }\n if (p.externalParticipant) {\n return t.translate('crmx.components.schedule_participant_external');\n }\n return '-';\n}\n\nexport function getParticipantTypeIcon(p: ScheduleParticipant): string {\n if (p.collaborator) {\n return ICON_PI_USER;\n }\n if (p.account) {\n return 'pi pi-building';\n }\n if (p.accountContact) {\n return 'pi pi-id-card';\n }\n if (p.externalParticipant) {\n return 'pi pi-user-plus';\n }\n return ICON_PI_USER;\n}\n\nexport function getPrioritySeverity(p: string): PrioritySeverity {\n switch (p) {\n case SchedulePriority.Low: {\n return 'success';\n }\n case SchedulePriority.Medium: {\n return 'info';\n }\n case SchedulePriority.High: {\n return 'warn';\n }\n case SchedulePriority.Critical: {\n return 'danger';\n }\n default: {\n return 'info';\n }\n }\n}\n\nexport function getPriorityLabel(t: Translator, p: string): string {\n return t.translate(`crmx.components.schedule_priority_${p.toLowerCase()}`);\n}\n\nexport function getConfirmationSeverity(c: string): ConfirmationSeverity {\n switch (c) {\n case 'YES': {\n return 'success';\n }\n case 'NO': {\n return 'danger';\n }\n default: {\n return 'warn';\n }\n }\n}\n\nexport function getConfirmationLabel(t: Translator, c: string): string {\n switch (c) {\n case 'YES': {\n return t.translate('crmx.components.schedule_confirmation_yes');\n }\n case 'NO': {\n return t.translate('crmx.components.schedule_confirmation_no');\n }\n default: {\n return t.translate('crmx.components.schedule_confirmation_pending');\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { Schedule, RecurrenceDatesRecord, ScheduleParticipant } from '../entities/schedule.interface';\nimport { ParticipantLookup, ScheduleSummaryByDate } from '../entities/participant-lookup.interface';\n\ninterface GetRecurrencesByDateResponse {\n dates: RecurrenceDatesRecord[];\n schedules: ScheduleSummaryByDate[];\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ScheduleService {\n private readonly entityUrl = 'crmx/schedule/entities/schedule';\n private readonly actionsUrl = 'crmx/schedule/actions';\n private readonly queriesUrl = 'crmx/schedule/queries';\n\n constructor(private readonly http: HttpClient) {}\n\n get(id: string): Observable<Schedule> {\n return this.http.get<Schedule>(`/${this.entityUrl}/${id}`);\n }\n\n insert(entity: Record<string, unknown>): Observable<Record<string, unknown>> {\n return this.http.post<Record<string, unknown>>(`/${this.entityUrl}`, entity);\n }\n\n update(id: string, entity: Record<string, unknown>): Observable<Record<string, unknown>> {\n return this.http.put<Record<string, unknown>>(`/${this.entityUrl}/${id}`, entity);\n }\n\n delete(id: string): Observable<void> {\n return this.http.delete<void>(`/${this.entityUrl}/${id}`);\n }\n\n getRecurrencesByDate(startDate: string, endDate: string): Observable<GetRecurrencesByDateResponse> {\n return this.http.post<GetRecurrencesByDateResponse>(\n `/${this.queriesUrl}/getRecurrencesByDate`, { startDate, endDate }\n );\n }\n\n generateRecurrenceDescription(payload: Record<string, unknown>): Observable<{ description: string }> {\n return this.http.post<{ description: string }>(\n `/${this.queriesUrl}/generateRecurrenceDescription`, payload\n );\n }\n\n acceptSchedule(scheduleId: string, participantId?: string, date?: string): Observable<{ accepted: boolean }> {\n return this.http.post<{ accepted: boolean }>(\n `/${this.actionsUrl}/acceptSchedule`, { scheduleId, participantId, date }\n );\n }\n\n rejectSchedule(scheduleId: string, participantId?: string, date?: string): Observable<{ rejected: boolean }> {\n return this.http.post<{ rejected: boolean }>(\n `/${this.actionsUrl}/rejectSchedule`, { scheduleId, participantId, date }\n );\n }\n\n cancelSchedule(scheduleId: string, date?: string): Observable<{ accepted: boolean }> {\n return this.http.post<{ accepted: boolean }>(\n `/${this.actionsUrl}/cancelSchedule`, { scheduleId, date }\n );\n }\n\n manageParticipants(scheduleId: string, participants: {\n accountsId?: string[];\n accountContactsId?: string[];\n collaboratorsId?: string[];\n externalParticipantsId?: string[];\n }): Observable<void> {\n return this.http.post<void>(\n `/crmx/schedule/signals/manageScheduleParticipants`, { scheduleId, ...participants }\n );\n }\n\n listParticipants(scheduleId: string): Observable<{ contents: ScheduleParticipant[] }> {\n return this.http.get<{ contents: ScheduleParticipant[] }>(\n `/${this.entityUrl}/${scheduleId}/participants`\n );\n }\n\n searchParticipantLookup(filter: string, size = 10, offset = 0): Observable<{ contents: ParticipantLookup[]; totalElements: number; totalPages: number }> {\n return this.http.post<{ contents: ParticipantLookup[]; totalElements: number; totalPages: number }>(\n `/${this.queriesUrl}/listParticipants`, { filter, size, offset, orderBy: 'name ASC' }\n );\n }\n\n list(params: { size?: number; filterQuery?: string } = {}): Observable<{ contents: Record<string, unknown>[]; totalElements: number }> {\n let httpParams = new HttpParams();\n if (params.size) {\n httpParams = httpParams.set('size', String(params.size));\n }\n if (params.filterQuery) {\n httpParams = httpParams.set('filter', params.filterQuery);\n }\n return this.http.get<{ contents: Record<string, unknown>[]; totalElements: number }>(`/${this.entityUrl}`, { params: httpParams });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { ScheduleType } from '../entities/schedule-type.interface';\n\n@Injectable({ providedIn: 'root' })\nexport class ScheduleTypeService {\n private readonly entityUrl = 'crmx/schedule/entities/scheduleType';\n\n constructor(private readonly http: HttpClient) {}\n\n list(params: { size?: number; filterQuery?: string } = {}): Observable<{ contents: ScheduleType[]; totalElements: number }> {\n let httpParams = new HttpParams();\n if (params.size) {\n httpParams = httpParams.set('size', String(params.size));\n }\n const statusFilter = \"status != 'DELETED'\";\n const filter = params.filterQuery\n ? `(${params.filterQuery}) and ${statusFilter}`\n : statusFilter;\n httpParams = httpParams.set('filter', filter);\n return this.http.get<{ contents: ScheduleType[]; totalElements: number }>(`/${this.entityUrl}`, { params: httpParams });\n }\n\n get(id: string): Observable<ScheduleType> {\n return this.http.get<ScheduleType>(`/${this.entityUrl}/${id}`);\n }\n}\n","import { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Subject, debounceTime, switchMap } from 'rxjs';\nimport { ButtonModule } from 'primeng/button';\nimport { DialogModule } from 'primeng/dialog';\nimport { DrawerModule } from 'primeng/drawer';\nimport { DropdownModule } from 'primeng/dropdown';\nimport { InputNumberModule } from 'primeng/inputnumber';\nimport { MultiSelectModule } from 'primeng/multiselect';\nimport { TagModule } from 'primeng/tag';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DividerModule } from 'primeng/divider';\nimport { TableModule } from 'primeng/table';\nimport { AutoCompleteModule } from 'primeng/autocomplete';\nimport { DynamicFormComponent, DynamicFormFieldConfig, TranslatePipe, TranslationService } from '@seniorsistemas/components-ai';\nimport { CurrentCollaboratorService } from '../../../services/current-collaborator/current-collaborator.service';\nimport { ScheduleService } from '../services/schedule.service';\nimport { ScheduleTypeService } from '../services/schedule-type.service';\nimport { ScheduleParticipant } from '../entities/schedule.interface';\nimport { ParticipantLookup, ParticipantOrigin } from '../entities/participant-lookup.interface';\nimport { ScheduleType } from '../entities/schedule-type.interface';\nimport {\n SchedulePriority, ScheduleRecurrence, WeekDay, RepeatWhen,\n OrdinalWeekDay, Month\n} from '../enums/schedule.enums';\nimport {\n formatDateToString, toDateString, toTimeString,\n getDefaultStartTime, getDefaultEndTime,\n getCurrentWeekDay, getCurrentMonth, getOrdinalForDate\n} from '../helpers/schedule-date.helpers';\nimport {\n getOriginLabel as _getOriginLabel, getOriginIcon as _getOriginIcon,\n getParticipantName as _getParticipantName, getParticipantType as _getParticipantType,\n getParticipantTypeIcon as _getParticipantTypeIcon, getPrioritySeverity as _getPrioritySeverity,\n getPriorityLabel as _getPriorityLabel, getConfirmationSeverity as _getConfirmationSeverity,\n getConfirmationLabel as _getConfirmationLabel,\n PrioritySeverity, ConfirmationSeverity\n} from '../helpers/schedule-display.helpers';\n\n/** S109: Extract magic numbers to named constants */\nconst MAX_NAME_LENGTH = 255;\nconst DEBOUNCE_MS = 500;\nconst PARTICIPANT_SEARCH_LIMIT = 5;\n\n@Component({\n selector: 's-schedule-form',\n standalone: true,\n imports: [\n CommonModule, FormsModule, ReactiveFormsModule,\n ButtonModule, DialogModule, DrawerModule, DropdownModule,\n InputNumberModule, MultiSelectModule, TagModule, TooltipModule,\n DividerModule, TableModule, AutoCompleteModule,\n TranslatePipe, DynamicFormComponent\n ],\n templateUrl: './schedule-form.component.html',\n styleUrl: './schedule-form.component.scss'\n})\nexport class ScheduleFormComponent implements OnInit {\n @Input() visible = false;\n @Input() selectedDate: Date = new Date();\n @Output() visibleChange = new EventEmitter<boolean>();\n @Output() saved = new EventEmitter<string>();\n\n @ViewChild('detailForm') detailFormComponent!: DynamicFormComponent;\n\n scheduleDetailFields: DynamicFormFieldConfig[] = [];\n entityDataForForm: Record<string, unknown> | null = null;\n scheduleForm!: FormGroup;\n isEditing = false;\n currentCollaboratorId: string | null = null;\n scheduleTypes: ScheduleType[] = [];\n participants: ScheduleParticipant[] = [];\n participantsLoading = false;\n recurrenceDescription = '';\n\n /** S2933: Mark as readonly */\n private readonly recurrenceChange$ = new Subject<void>();\n\n participantSuggestions: ParticipantLookup[] = [];\n selectedParticipantLookup: ParticipantLookup | null = null;\n addedParticipants: ParticipantLookup[] = [];\n\n priorityOptions: { label: string; value: string }[] = [];\n recurrenceOptions: { label: string; value: string }[] = [];\n weekDayOptions: { label: string; value: string }[] = [];\n repeatWhenOptions: { label: string; value: string }[] = [];\n ordinalOptions: { label: string; value: string }[] = [];\n monthOptions: { label: string; value: string }[] = [];\n\n /** S2933: Mark constructor-injected services as readonly */\n constructor(\n private readonly fb: FormBuilder,\n private readonly scheduleService: ScheduleService,\n private readonly scheduleTypeService: ScheduleTypeService,\n private readonly currentCollaboratorService: CurrentCollaboratorService,\n private readonly t: TranslationService\n ) {}\n\n ngOnInit(): void {\n this.initOptions();\n this.initDetailFields();\n this.initForm();\n this.loadScheduleTypes();\n this.loadCollaborator();\n this.setupRecurrenceDescriptionWatcher();\n }\n\n private loadCollaborator(): void {\n this.currentCollaboratorService.load().subscribe({\n next: (collab) => {\n this.currentCollaboratorId = collab?.id ?? null;\n },\n error: () => {\n this.currentCollaboratorId = null;\n }\n });\n }\n\n private initOptions(): void {\n this.priorityOptions = [\n { label: this.t.translate('crmx.components.schedule_priority_low'), value: SchedulePriority.Low },\n { label: this.t.translate('crmx.components.schedule_priority_medium'), value: SchedulePriority.Medium },\n { label: this.t.translate('crmx.components.schedule_priority_high'), value: SchedulePriority.High },\n { label: this.t.translate('crmx.components.schedule_priority_critical'), value: SchedulePriority.Critical }\n ];\n this.recurrenceOptions = [\n { label: this.t.translate('crmx.components.schedule_recurrence_daily'), value: ScheduleRecurrence.Daily },\n { label: this.t.translate('crmx.components.schedule_recurrence_weekly'), value: ScheduleRecurrence.Weekly },\n { label: this.t.translate('crmx.components.schedule_recurrence_monthly'), value: ScheduleRecurrence.Monthly },\n { label: this.t.translate('crmx.components.schedule_recurrence_yearly'), value: ScheduleRecurrence.Yearly }\n ];\n this.weekDayOptions = [\n { label: this.t.translate('crmx.components.schedule_sunday'), value: WeekDay.Sunday },\n { label: this.t.translate('crmx.components.schedule_monday'), value: WeekDay.Monday },\n { label: this.t.translate('crmx.components.schedule_tuesday'), value: WeekDay.Tuesday },\n { label: this.t.translate('crmx.components.schedule_wednesday'), value: WeekDay.Wednesday },\n { label: this.t.translate('crmx.components.schedule_thursday'), value: WeekDay.Thursday },\n { label: this.t.translate('crmx.components.schedule_friday'), value: WeekDay.Friday },\n { label: this.t.translate('crmx.components.schedule_saturday'), value: WeekDay.Saturday }\n ];\n this.repeatWhenOptions = [\n { label: this.t.translate('crmx.components.schedule_repeat_in_day'), value: RepeatWhen.InDay },\n { label: this.t.translate('crmx.components.schedule_repeat_in_ordinal_week_day'), value: RepeatWhen.InOrdinalWeekDay }\n ];\n this.ordinalOptions = [\n { label: this.t.translate('crmx.components.schedule_ordinal_first'), value: OrdinalWeekDay.First },\n { label: this.t.translate('crmx.components.schedule_ordinal_second'), value: OrdinalWeekDay.Second },\n { label: this.t.translate('crmx.components.schedule_ordinal_third'), value: OrdinalWeekDay.Third },\n { label: this.t.translate('crmx.components.schedule_ordinal_fourth'), value: OrdinalWeekDay.Fourth },\n { label: this.t.translate('crmx.components.schedule_ordinal_last'), value: OrdinalWeekDay.Last }\n ];\n this.monthOptions = Object.values(Month).map(m => ({\n label: this.t.translate(`crmx.components.schedule_${m.toLowerCase()}`), value: m\n }));\n }\n\n private initDetailFields(): void {\n const now = new Date();\n const defaultStart = this.getDefaultStartTime(now);\n const defaultEnd = this.getDefaultEndTime(defaultStart);\n const fullRow = { xl: 12, lg: 12, md: 12, sm: 12 };\n const halfRow = { xl: 6, lg: 6, md: 6, sm: 12 };\n this.scheduleDetailFields = [\n { field: 'name', label: this.t.translate('crmx.components.schedule_name'), type: 'text', required: true, validators: [Validators.required, Validators.maxLength(MAX_NAME_LENGTH)], placeholder: this.t.translate('crmx.components.schedule_enter_name'), maxLength: MAX_NAME_LENGTH, size: fullRow },\n { field: 'priority', label: this.t.translate('crmx.components.schedule_priority'), type: 'dropdown', required: true, validators: [Validators.required], options: this.priorityOptions, optionLabel: 'label', optionValue: 'value', defaultValue: SchedulePriority.Medium, size: fullRow },\n { field: 'type', label: this.t.translate('crmx.components.schedule_type'), type: 'lookup', lookupService: this.scheduleTypeService, lookupDisplayField: 'name', lookupValueField: 'id', lookupSearchFields: ['name'], showClear: true, lookupAutocomplete: true, lookupColumns: [{ field: 'name', header: this.t.translate('crmx.components.schedule_name') }], lookupFilters: \"status = 'ACTIVE'\", placeholder: this.t.translate('crmx.components.schedule_select_type'), size: fullRow },\n { field: 'startDate', label: this.t.translate('crmx.components.schedule_start_date'), type: 'date', required: true, validators: [Validators.required], defaultValue: formatDateToString(now), size: (v: Record<string, unknown>) => v['withRecurrence'] ? halfRow : fullRow },\n { field: 'endDate', label: this.t.translate('crmx.components.schedule_end_date'), type: 'date', visibleWhen: (v: Record<string, unknown>) => v['withRecurrence'] === true, size: halfRow },\n { field: 'startTime', label: this.t.translate('crmx.components.schedule_start_time'), type: 'time', defaultValue: defaultStart, visibleWhen: (v: Record<string, unknown>) => v['allDay'] !== true, size: halfRow },\n { field: 'endTime', label: this.t.translate('crmx.components.schedule_end_time'), type: 'time', defaultValue: defaultEnd, visibleWhen: (v: Record<string, unknown>) => v['allDay'] !== true, size: halfRow },\n { field: 'allDay', label: this.t.translate('crmx.components.schedule_all_day'), type: 'checkbox', defaultValue: false, size: halfRow },\n { field: 'withRecurrence', label: this.t.translate('crmx.components.schedule_with_recurrence'), type: 'checkbox', defaultValue: false, size: halfRow },\n { field: 'comments', label: this.t.translate('crmx.components.schedule_comments'), type: 'textarea', placeholder: this.t.translate('crmx.components.schedule_enter_comments'), rows: 3, size: fullRow }\n ];\n }\n\n onDetailFormReady(form: FormGroup): void {\n this.scheduleForm = form;\n this.addRecurrenceControls();\n this.scheduleForm.valueChanges.subscribe(\n () => this.recurrenceChange$.next()\n );\n this.setupRecurrenceFormWatchers();\n }\n\n /** S121: Add braces to all if statements */\n private addRecurrenceControls(): void {\n const now = new Date();\n if (!this.scheduleForm.contains('id')) {\n this.scheduleForm.addControl('id', this.fb.control(null));\n }\n if (!this.scheduleForm.contains('recurrence')) {\n this.scheduleForm.addControl(\n 'recurrence', this.fb.control(ScheduleRecurrence.Daily)\n );\n }\n if (!this.scheduleForm.contains('recurrenceInterval')) {\n this.scheduleForm.addControl(\n 'recurrenceInterval', this.fb.control(1)\n );\n }\n if (!this.scheduleForm.contains('weekDays')) {\n this.scheduleForm.addControl(\n 'weekDays', this.fb.control([getCurrentWeekDay(now)])\n );\n }\n if (!this.scheduleForm.contains('repeatWhen')) {\n this.scheduleForm.addControl(\n 'repeatWhen', this.fb.control(RepeatWhen.InDay)\n );\n }\n if (!this.scheduleForm.contains('repeatWhenDay')) {\n this.scheduleForm.addControl(\n 'repeatWhenDay', this.fb.control(now.getDate())\n );\n }\n if (!this.scheduleForm.contains('repeatWhenOrdinalWeekDay')) {\n this.scheduleForm.addControl(\n 'repeatWhenOrdinalWeekDay',\n this.fb.control(getOrdinalForDate(now))\n );\n }\n if (!this.scheduleForm.contains('repeatWhenWeekMonth')) {\n this.scheduleForm.addControl(\n 'repeatWhenWeekMonth',\n this.fb.control(getCurrentWeekDay(now))\n );\n }\n if (!this.scheduleForm.contains('repeatWhenMonth')) {\n this.scheduleForm.addControl(\n 'repeatWhenMonth',\n this.fb.control(getCurrentMonth(now))\n );\n }\n }\n\n /**\n * S1541: Break setupRecurrenceFormWatchers into smaller helpers\n * to reduce cyclomatic complexity\n */\n private setupRecurrenceFormWatchers(): void {\n const d = this.selectedDate || new Date();\n this.watchRecurrenceChanges(d);\n this.watchRepeatWhenChanges(d);\n this.watchWithRecurrenceChanges(d);\n }\n\n private watchRecurrenceChanges(d: Date): void {\n this.scheduleForm.get('recurrence')?.valueChanges.subscribe(\n (rec: string) => {\n this.handleRecurrenceWeekDays(rec, d);\n this.handleRecurrenceMonthlyYearly(rec, d);\n this.handleRecurrenceYearlyMonth(rec, d);\n this.recurrenceChange$.next();\n }\n );\n }\n\n private handleRecurrenceWeekDays(rec: string, d: Date): void {\n if (rec === ScheduleRecurrence.Weekly) {\n const current = this.scheduleForm.get('weekDays')?.value;\n if (!current || current.length === 0) {\n this.scheduleForm.patchValue(\n { weekDays: [getCurrentWeekDay(d)] },\n { emitEvent: false }\n );\n }\n } else {\n this.scheduleForm.patchValue(\n { weekDays: [] },\n { emitEvent: false }\n );\n }\n }\n\n private handleRecurrenceMonthlyYearly(\n rec: string, d: Date\n ): void {\n if (\n rec === ScheduleRecurrence.Monthly ||\n rec === ScheduleRecurrence.Yearly\n ) {\n this.scheduleForm.patchValue({\n repeatWhen:\n this.scheduleForm.get('repeatWhen')?.value ?? RepeatWhen.InDay,\n repeatWhenDay:\n this.scheduleForm.get('repeatWhenDay')?.value ?? d.getDate(),\n repeatWhenOrdinalWeekDay:\n this.scheduleForm.get('repeatWhenOrdinalWeekDay')?.value\n ?? getOrdinalForDate(d),\n repeatWhenWeekMonth:\n this.scheduleForm.get('repeatWhenWeekMonth')?.value\n ?? getCurrentWeekDay(d)\n }, { emitEvent: false });\n } else {\n this.scheduleForm.patchValue({\n repeatWhen: null,\n repeatWhenDay: null,\n repeatWhenOrdinalWeekDay: null,\n repeatWhenWeekMonth: null,\n repeatWhenMonth: null\n }, { emitEvent: false });\n }\n }\n\n private handleRecurrenceYearlyMonth(rec: string, d: Date): void {\n if (rec === ScheduleRecurrence.Yearly) {\n this.scheduleForm.patchValue({\n repeatWhenMonth:\n this.scheduleForm.get('repeatWhenMonth')?.value\n ?? getCurrentMonth(d)\n }, { emitEvent: false });\n } else {\n this.scheduleForm.patchValue(\n { repeatWhenMonth: null },\n { emitEvent: false }\n );\n }\n }\n\n private watchRepeatWhenChanges(d: Date): void {\n this.scheduleForm.get('repeatWhen')?.valueChanges.subscribe(\n (rw: string) => {\n if (rw === RepeatWhen.InDay) {\n this.scheduleForm.patchValue({\n repeatWhenDay:\n this.scheduleForm.get('repeatWhenDay')?.value ?? d.getDate(),\n repeatWhenOrdinalWeekDay: null,\n repeatWhenWeekMonth: null\n }, { emitEvent: false });\n } else if (rw === RepeatWhen.InOrdinalWeekDay) {\n this.scheduleForm.patchValue({\n repeatWhenDay: null,\n repeatWhenOrdinalWeekDay:\n this.scheduleForm.get('repeatWhenOrdinalWeekDay')?.value\n ?? getOrdinalForDate(d),\n repeatWhenWeekMonth:\n this.scheduleForm.get('repeatWhenWeekMonth')?.value\n ?? getCurrentWeekDay(d)\n }, { emitEvent: false });\n } else {\n // No action needed for other repeatWhen values\n }\n this.recurrenceChange$.next();\n }\n );\n }\n\n private watchWithRecurrenceChanges(d: Date): void {\n this.scheduleForm.get('withRecurrence')?.valueChanges.subscribe(\n () => {\n const enabled = this.scheduleForm.get('withRecurrence')?.value === true;\n if (enabled) {\n this.onRecurrenceEnabled(d);\n } else {\n this.onRecurrenceDisabled();\n }\n }\n );\n }\n\n private onRecurrenceEnabled(d: Date): void {\n this.resetRecurrenceDefaults(d);\n this.recurrenceChange$.next();\n }\n\n private onRecurrenceDisabled(): void {\n this.recurrenceDescription = '';\n if (this.scheduleForm) {\n this.scheduleForm.patchValue({\n endDate: null,\n recurrence: null,\n recurrenceInterval: null,\n weekDays: null,\n repeatWhen: null,\n repeatWhenDay: null,\n repeatWhenOrdinalWeekDay: null,\n repeatWhenWeekMonth: null,\n repeatWhenMonth: null\n });\n }\n }\n\n private initForm(): void {\n const now = new Date();\n const defaultStart = this.getDefaultStartTime(now);\n const defaultEnd = this.getDefaultEndTime(defaultStart);\n this.scheduleForm = this.fb.group({\n id: [null],\n name: ['', [Validators.required, Validators.maxLength(MAX_NAME_LENGTH)]],\n type: [null],\n priority: [SchedulePriority.Medium, Validators.required],\n allDay: [false],\n withRecurrence: [false],\n startDate: [\n formatDateToString(this.selectedDate || now),\n Validators.required\n ],\n endDate: [null],\n startTime: [defaultStart],\n endTime: [defaultEnd],\n recurrence: [ScheduleRecurrence.Daily],\n recurrenceInterval: [1],\n weekDays: [[getCurrentWeekDay(now)]],\n repeatWhen: [RepeatWhen.InDay],\n repeatWhenDay: [now.getDate()],\n repeatWhenOrdinalWeekDay: [getOrdinalForDate(now)],\n repeatWhenWeekMonth: [getCurrentWeekDay(now)],\n repeatWhenMonth: [getCurrentMonth(now)],\n comments: ['']\n });\n }\n\n private setupRecurrenceDescriptionWatcher(): void {\n this.recurrenceChange$.pipe(\n debounceTime(DEBOUNCE_MS)\n ).subscribe(() => this.fetchRecurrenceDescription());\n }\n\n private fetchRecurrenceDescription(): void {\n if (!this.scheduleForm) {\n return;\n }\n const v = this.scheduleForm.value;\n if (!v.withRecurrence || !v.startDate) {\n this.recurrenceDescription = '';\n return;\n }\n this.scheduleService.generateRecurrenceDescription(\n this.buildRecurrencePayload(v)\n ).subscribe({\n next: (r) => {\n this.recurrenceDescription = r.description ?? '';\n },\n error: () => {\n this.recurrenceDescription = '';\n }\n });\n }\n\n private buildRecurrencePayload(v: Record<string, unknown>): Record<string, unknown> {\n return {\n ...this.buildDateTimePayload(v),\n allDay: v['allDay'] || false,\n withRecurrence: true,\n recurrenceInterval: v['recurrenceInterval'] || 1,\n recurrence: v['recurrence'],\n ...this.buildNullableRecurrenceFields(v)\n };\n }\n\n private buildDateTimePayload(v: Record<string, unknown>): Record<string, unknown> {\n return {\n startDate: toDateString(v['startDate']),\n endDate: v['endDate'] ? toDateString(v['endDate']) : null,\n startTime: v['startTime'] ? toTimeString(v['startTime']) : null,\n endTime: v['endTime'] ? toTimeString(v['endTime']) : null\n };\n }\n\n private buildNullableRecurrenceFields(v: Record<string, unknown>): Record<string, unknown> {\n return {\n weekDays: v['weekDays'] ?? null,\n repeatWhen: v['repeatWhen'] ?? null,\n repeatWhenDay: v['repeatWhenDay'] ?? null,\n repeatWhenOrdinalWeekDay: v['repeatWhenOrdinalWeekDay'] ?? null,\n repeatWhenWeekMonth: v['repeatWhenWeekMonth'] ?? null,\n repeatWhenMonth: v['repeatWhenMonth'] ?? null\n };\n }\n\n private loadScheduleTypes(): void {\n this.scheduleTypeService.list({\n size: 100,\n filterQuery: \"status = 'ACTIVE'\"\n }).subscribe({\n next: (r) => {\n this.scheduleTypes = r.contents;\n }\n });\n }\n\n openNew(): void {\n this.isEditing = false;\n const now = new Date();\n const defaultStart = this.getDefaultStartTime(now);\n const defaultEnd = this.getDefaultEndTime(defaultStart);\n this.entityDataForForm = null;\n if (this.detailFormComponent) {\n this.detailFormComponent.resetForm();\n }\n this.entityDataForForm = {\n startDate: formatDateToString(this.selectedDate || now),\n priority: SchedulePriority.Medium,\n allDay: false,\n withRecurrence: false,\n startTime: defaultStart,\n endTime: defaultEnd\n };\n this.resetRecurrenceDefaults(this.selectedDate || now);\n this.recurrenceDescription = '';\n this.participants = [];\n this.addedParticipants = [];\n this.selectedParticipantLookup = null;\n this.visible = true;\n this.visibleChange.emit(true);\n }\n\n openEdit(scheduleId: string): void {\n this.isEditing = true;\n this.participants = [];\n this.addedParticipants = [];\n this.selectedParticipantLookup = null;\n this.scheduleService.get(scheduleId).subscribe({\n next: (data) => {\n this.entityDataForForm = { ...data, type: data.type ?? null };\n this.loadParticipants(scheduleId);\n this.visible = true;\n this.visibleChange.emit(true);\n setTimeout(() => {\n if (this.scheduleForm) {\n this.scheduleForm.patchValue({\n id: data.id,\n recurrence: data.recurrence,\n recurrenceInterval: data.recurrenceInterval,\n weekDays: data.weekDays,\n repeatWhen: data.repeatWhen,\n repeatWhenDay: data.repeatWhenDay,\n repeatWhenOrdinalWeekDay: data.repeatWhenOrdinalWeekDay,\n repeatWhenWeekMonth: data.repeatWhenWeekMonth,\n repeatWhenMonth: data.repeatWhenMonth\n });\n }\n });\n }\n });\n }\n\n private loadParticipants(scheduleId: string): void {\n this.participantsLoading = true;\n this.scheduleService.listParticipants(scheduleId).subscribe({\n next: (r) => {\n this.participants = r.contents ?? [];\n this.addedParticipants = this.participants\n .filter(p => !p.organizer)\n .map(p => this.participantToLookup(p))\n .filter((p): p is ParticipantLookup => p !== null);\n this.participantsLoading = false;\n },\n error: () => {\n this.participantsLoading = false;\n }\n });\n }\n\n private participantToLookup(\n p: ScheduleParticipant\n ): ParticipantLookup | null {\n if (p.collaborator) {\n return {\n id: p.collaborator.id,\n name: p.collaborator.name,\n origin: 'COLLABORATOR'\n };\n }\n if (p.account) {\n return {\n id: p.account.id,\n name: p.account.name,\n origin: 'ACCOUNT'\n };\n }\n if (p.accountContact) {\n return {\n id: p.accountContact.id,\n name: p.accountContact.name,\n referenceName: p.accountContact.account?.name,\n referenceId: p.accountContact.account?.id,\n origin: 'ACCOUNT_CONTACT'\n };\n }\n if (p.externalParticipant) {\n return {\n id: p.externalParticipant.id,\n name: p.externalParticipant.name,\n origin: 'EXTERNAL_PARTICIPANT'\n };\n }\n return null;\n }\n\n onSearchParticipants(event: { query: string }): void {\n this.scheduleService.searchParticipantLookup(\n event.query ?? '',\n PARTICIPANT_SEARCH_LIMIT\n ).subscribe({\n next: (r) => {\n const addedIds = new Set(\n this.addedParticipants.map(p => p.id + p.origin)\n );\n this.participantSuggestions = (r.contents ?? [])\n .filter(p => !addedIds.has(p.id + p.origin));\n },\n error: () => {\n this.participantSuggestions = [];\n }\n });\n }\n\n onSelectParticipant(participant: ParticipantLookup): void {\n if (\n !this.addedParticipants.some(\n p => p.id === participant.id && p.origin === participant.origin\n )\n ) {\n this.addedParticipants = [...this.addedParticipants, participant];\n }\n setTimeout(() => {\n this.selectedParticipantLookup = null;\n });\n }\n\n onRemoveParticipant(participant: ParticipantLookup): void {\n this.addedParticipants = this.addedParticipants.filter(\n p => !(p.id === participant.id && p.origin === participant.origin)\n );\n }\n\n /**\n * S1541: Break onSave into smaller helpers to reduce complexity\n * S121/S2681: Add braces to all if statements\n */\n onSave(): void {\n if (this.scheduleForm.invalid) {\n this.scheduleForm.markAllAsTouched();\n return;\n }\n const payload: Record<string, unknown> = this.buildSavePayload();\n const op = this.isEditing\n ? this.scheduleService.update(payload['id'] as string, payload)\n : this.scheduleService.insert(payload);\n let scheduleId: string;\n op.pipe(\n switchMap((result: Record<string, unknown>) => {\n scheduleId = this.isEditing\n ? payload['id'] as string\n : result?.['id'] as string;\n return this.scheduleService.manageParticipants(\n scheduleId,\n this.buildManageParticipantsPayload()\n );\n })\n ).subscribe({\n next: () => {\n this.visible = false;\n this.visibleChange.emit(false);\n this.saved.emit(scheduleId);\n }\n });\n }\n\n private buildSavePayload(): Record<string, unknown> {\n const payload: Record<string, unknown> = {\n ...this.scheduleForm.value,\n type: this.scheduleForm.value.type || null,\n whenOccurs: this.recurrenceDescription ?? null\n };\n if (payload['startDate']) {\n payload['startDate'] = toDateString(payload['startDate']);\n }\n if (payload['endDate']) {\n payload['endDate'] = toDateString(payload['endDate']);\n }\n if (payload['startTime']) {\n payload['startTime'] = toTimeString(payload['startTime']);\n }\n if (payload['endTime']) {\n payload['endTime'] = toTimeString(payload['endTime']);\n }\n if (!payload['withRecurrence']) {\n this.clearRecurrencePayload(payload);\n } else {\n this.cleanRecurrenceFields(payload);\n }\n if (payload['allDay']) {\n payload['startTime'] = null;\n payload['endTime'] = null;\n }\n return payload;\n }\n\n private clearRecurrencePayload(payload: Record<string, unknown>): void {\n payload['endDate'] = null;\n payload['recurrenceInterval'] = null;\n payload['weekDays'] = null;\n payload['repeatWhen'] = null;\n payload['repeatWhenDay'] = null;\n payload['repeatWhenOrdinalWeekDay'] = null;\n payload['repeatWhenWeekMonth'] = null;\n payload['repeatWhenMonth'] = null;\n }\n\n onCancel(): void {\n this.visible = false;\n this.visibleChange.emit(false);\n }\n\n private buildManageParticipantsPayload(): {\n accountsId: string[];\n accountContactsId: string[];\n collaboratorsId: string[];\n externalParticipantsId: string[];\n } {\n const a: string[] = [];\n const ac: string[] = [];\n const c: string[] = [];\n const e: string[] = [];\n for (const p of this.addedParticipants) {\n switch (p.origin) {\n case 'ACCOUNT': {\n a.push(p.id);\n break;\n }\n case 'ACCOUNT_CONTACT': {\n ac.push(p.id);\n break;\n }\n case 'COLLABORATOR': {\n c.push(p.id);\n break;\n }\n case 'EXTERNAL_PARTICIPANT': {\n e.push(p.id);\n break;\n }\n }\n }\n return {\n accountsId: a,\n accountContactsId: ac,\n collaboratorsId: c,\n externalParticipantsId: e\n };\n }\n\n /**\n * S1541: Break cleanRecurrenceFields into smaller helpers\n * S121/S2681: Add braces to all if statements\n */\n private cleanRecurrenceFields(p: Record<string, unknown>): void {\n const r = p['recurrence'] as string;\n if (r !== ScheduleRecurrence.Weekly) {\n p['weekDays'] = null;\n }\n this.cleanDailyWeeklyFields(p, r);\n this.cleanMonthlyFields(p, r);\n this.cleanYearlyFields(p, r);\n }\n\n private cleanDailyWeeklyFields(p: Record<string, unknown>, r: string): void {\n if (\n r === ScheduleRecurrence.Daily ||\n r === ScheduleRecurrence.Weekly\n ) {\n p['repeatWhen'] = null;\n p['repeatWhenDay'] = null;\n p['repeatWhenOrdinalWeekDay'] = null;\n p['repeatWhenWeekMonth'] = null;\n p['repeatWhenMonth'] = null;\n }\n }\n\n private cleanMonthlyFields(p: Record<string, unknown>, r: string): void {\n if (r === ScheduleRecurrence.Monthly) {\n p['repeatWhenMonth'] = null;\n this.cleanRepeatWhenFields(p);\n }\n }\n\n private cleanYearlyFields(p: Record<string, unknown>, r: string): void {\n if (r === ScheduleRecurrence.Yearly) {\n this.cleanRepeatWhenFields(p);\n }\n }\n\n private cleanRepeatWhenFields(p: Record<string, unknown>): void {\n if (p['repeatWhen'] === RepeatWhen.InDay) {\n p['repeatWhenOrdinalWeekDay'] = null;\n p['repeatWhenWeekMonth'] = null;\n } else {\n p['repeatWhenDay'] = null;\n }\n }\n\n private resetRecurrenceDefaults(date: Date): void {\n if (!this.scheduleForm) {\n return;\n }\n const d = date || new Date();\n this.scheduleForm.patchValue({\n recurrence: ScheduleRecurrence.Daily,\n recurrenceInterval: 1,\n weekDays: [getCurrentWeekDay(d)],\n repeatWhen: RepeatWhen.InDay,\n repeatWhenDay: d.getDate(),\n repeatWhenOrdinalWeekDay: getOrdinalForDate(d),\n repeatWhenWeekMonth: getCurrentWeekDay(d),\n repeatWhenMonth: getCurrentMonth(d)\n });\n }\n\n get showRecurrenceFields(): boolean {\n return this.scheduleForm?.get('withRecurrence')?.value === true;\n }\n\n get currentRecurrence(): string {\n return this.scheduleForm?.get('recurrence')?.value;\n }\n\n get currentRepeatWhen(): string {\n return this.scheduleForm?.get('repeatWhen')?.value;\n }\n\n get showWeekDays(): boolean {\n return this.currentRecurrence === ScheduleRecurrence.Weekly;\n }\n\n get showRepeatWhen(): boolean {\n return (\n this.currentRecurrence === ScheduleRecurrence.Monthly ||\n this.currentRecurrence === ScheduleRecurrence.Yearly\n );\n }\n\n get showRepeatWhenDay(): boolean {\n return this.showRepeatWhen && this.currentRepeatWhen === RepeatWhen.InDay;\n }\n\n get showOrdinalFields(): boolean {\n return (\n this.showRepeatWhen &&\n this.currentRepeatWhen === RepeatWhen.InOrdinalWeekDay\n );\n }\n\n get showMonthField(): boolean {\n return this.currentRecurrence === ScheduleRecurrence.Yearly;\n }\n\n getOriginLabel(o: ParticipantOrigin): string { return _getOriginLabel(this.t, o); }\n getOriginIcon(o: ParticipantOrigin): string { return _getOriginIcon(o); }\n getParticipantName(p: ScheduleParticipant): string { return _getParticipantName(p); }\n getParticipantType(p: ScheduleParticipant): string { return _getParticipantType(this.t, p); }\n getParticipantTypeIcon(p: ScheduleParticipant): string { return _getParticipantTypeIcon(p); }\n getPrioritySeverity(p: string): PrioritySeverity { return _getPrioritySeverity(p); }\n getPriorityLabel(p: string): string { return _getPriorityLabel(this.t, p); }\n getConfirmationSeverity(c: string): ConfirmationSeverity { return _getConfirmationSeverity(c); }\n getConfirmationLabel(c: string): string { return _getConfirmationLabel(this.t, c); }\n\n private getDefaultStartTime(d: Date): string {\n return getDefaultStartTime(d);\n }\n\n private getDefaultEndTime(st: string): string {\n return getDefaultEndTime(st);\n }\n}\n","<!-- Schedule Drawer -->\n<p-drawer\n [(visible)]=\"visible\"\n position=\"right\"\n [style]=\"{ width: '85vw', 'max-width': '1200px' }\"\n [modal]=\"true\"\n (onHide)=\"onCancel()\"\n>\n <ng-template pTemplate=\"header\">\n <span class=\"drawer-title\">\n <i class=\"pi pi-calendar\"></i>\n {{\n isEditing\n ? ('crmx.components.schedule_schedule_edit' | translate)\n : ('crmx.components.schedule_schedule_new' | translate)\n }}\n </span>\n </ng-template>\n\n <div class=\"drawer-layout\" *ngIf=\"scheduleForm\">\n <!-- Left: Form -->\n <div class=\"drawer-left\">\n <div class=\"drawer-section-header\">\n <i class=\"pi pi-info-circle\"></i>\n <span>\n {{ 'crmx.components.schedule_schedule_details' | translate }}\n </span>\n </div>\n <sia-dynamic-form\n #detailForm\n [sections]=\"[{ fields: scheduleDetailFields }]\"\n [entityData]=\"entityDataForForm\"\n [mode]=\"'form'\"\n [showSubmitButton]=\"false\"\n [showCancelButton]=\"false\"\n (formReady)=\"onDetailFormReady($event)\"\n ></sia-dynamic-form>\n </div>\n\n <!-- Right: Recurrence + Participants -->\n <div class=\"drawer-right\">\n <div\n class=\"drawer-section\"\n *ngIf=\"showRecurrenceFields\"\n >\n <div class=\"drawer-section-header\">\n <i class=\"pi pi-replay\"></i>\n <span>\n {{\n 'crmx.components.schedule_recurrence_config'\n | translate\n }}\n </span>\n </div>\n <form\n [formGroup]=\"scheduleForm\"\n class=\"drawer-form\"\n >\n <div class=\"form-row\">\n <div class=\"form-field flex-1\">\n <label for=\"recurrence\">\n {{ 'crmx.components.schedule_recurrence' | translate }}\n </label>\n <p-dropdown\n id=\"recurrence\"\n formControlName=\"recurrence\"\n [options]=\"recurrenceOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n <div class=\"form-field flex-1\">\n <label for=\"recurrenceInterval\">\n {{\n 'crmx.components.schedule_recurrence_interval'\n | translate\n }}\n </label>\n <p-inputNumber\n id=\"recurrenceInterval\"\n formControlName=\"recurrenceInterval\"\n [min]=\"1\"\n [max]=\"99\"\n class=\"w-full\"\n ></p-inputNumber>\n </div>\n </div>\n <div\n class=\"form-row\"\n *ngIf=\"showWeekDays\"\n >\n <div class=\"form-field flex-1\">\n <label for=\"weekDays\">\n {{ 'crmx.components.schedule_week_days' | translate }}\n </label>\n <p-multiSelect\n id=\"weekDays\"\n formControlName=\"weekDays\"\n [options]=\"weekDayOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [placeholder]=\"\n 'crmx.components.schedule_select_week_day'\n | translate\n \"\n [maxSelectedLabels]=\"7\"\n class=\"w-full\"\n ></p-multiSelect>\n </div>\n </div>\n <div\n class=\"form-row\"\n *ngIf=\"showRepeatWhen\"\n >\n <div class=\"form-field flex-1\">\n <label for=\"repeatWhen\">\n {{\n 'crmx.components.schedule_repeat_when' | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhen\"\n formControlName=\"repeatWhen\"\n [options]=\"repeatWhenOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n <div\n class=\"form-field flex-1\"\n *ngIf=\"showRepeatWhenDay\"\n >\n <label for=\"repeatWhenDay\">\n {{\n 'crmx.components.schedule_repeat_when_day'\n | translate\n }}\n </label>\n <p-inputNumber\n id=\"repeatWhenDay\"\n formControlName=\"repeatWhenDay\"\n [min]=\"1\"\n [max]=\"31\"\n class=\"w-full\"\n ></p-inputNumber>\n </div>\n <div\n class=\"form-field flex-1\"\n *ngIf=\"showOrdinalFields\"\n >\n <label for=\"repeatWhenOrdinalWeekDay\">\n {{\n 'crmx.components.schedule_ordinal_week_day'\n | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhenOrdinalWeekDay\"\n formControlName=\"repeatWhenOrdinalWeekDay\"\n [options]=\"ordinalOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n <div\n class=\"form-field flex-1\"\n *ngIf=\"showOrdinalFields\"\n >\n <label for=\"repeatWhenWeekMonth\">\n {{\n 'crmx.components.schedule_week_month' | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhenWeekMonth\"\n formControlName=\"repeatWhenWeekMonth\"\n [options]=\"weekDayOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n </div>\n <div\n class=\"form-row\"\n *ngIf=\"showMonthField\"\n >\n <div class=\"form-field flex-1\">\n <label for=\"repeatWhenMonth\">\n {{\n 'crmx.components.schedule_repeat_month' | translate\n }}\n </label>\n <p-dropdown\n id=\"repeatWhenMonth\"\n formControlName=\"repeatWhenMonth\"\n [options]=\"monthOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n class=\"w-full\"\n ></p-dropdown>\n </div>\n </div>\n </form>\n <div\n class=\"recurrence-description\"\n *ngIf=\"recurrenceDescription\"\n >\n <i class=\"pi pi-info-circle\"></i>\n <span>{{ recurrenceDescription }}</span>\n </div>\n </div>\n\n <p-divider></p-divider>\n\n <!-- Participants -->\n <div class=\"drawer-section\">\n <div class=\"drawer-section-header\">\n <i class=\"pi pi-users\"></i>\n <span>\n {{ 'crmx.components.schedule_participants' | translate }}\n </span>\n </div>\n <div class=\"participant-search\">\n <p-autoComplete\n [(ngModel)]=\"selectedParticipantLookup\"\n [ngModelOptions]=\"{standalone: true}\"\n [suggestions]=\"participantSuggestions\"\n (completeMethod)=\"\n onSearchParticipants($event)\n \"\n (onSelect)=\"\n onSelectParticipant($event.value)\n \"\n (onFocus)=\"\n onSearchParticipants({ query: '' })\n \"\n optionLabel=\"name\"\n [placeholder]=\"\n 'crmx.components.schedule_search_participant'\n | translate\n \"\n [minLength]=\"0\"\n [forceSelection]=\"true\"\n [showClear]=\"true\"\n [fluid]=\"true\"\n >\n <ng-template\n let-item\n pTemplate=\"item\"\n >\n <div class=\"participant-suggestion\">\n <i\n [class]=\"getOriginIcon(item.origin)\"\n ></i>\n <div\n class=\"participant-suggestion-info\"\n >\n <span\n class=\"participant-suggestion-name\"\n >\n {{ item.name }}\n </span>\n <span\n class=\"participant-suggestion-detail\"\n *ngIf=\"item.referenceName\"\n >\n {{ item.referenceName }}\n </span>\n </div>\n <span\n class=\"participant-suggestion-origin\"\n >\n {{ getOriginLabel(item.origin) }}\n </span>\n </div>\n </ng-template>\n </p-autoComplete>\n </div>\n <div\n *ngIf=\"\n !participantsLoading &&\n addedParticipants.length === 0\n \"\n class=\"participants-empty\"\n >\n <i class=\"pi pi-users\"></i>\n <p>\n {{\n 'crmx.components.schedule_no_participants'\n | translate\n }}\n </p>\n </div>\n <p-table\n *ngIf=\"\n !participantsLoading &&\n addedParticipants.length > 0\n \"\n [value]=\"addedParticipants\"\n styleClass=\"p-datatable-sm p-datatable-striped\"\n >\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"col\">\n {{ 'crmx.components.schedule_name' | translate }}\n </th>\n <th\n scope=\"col\"\n class=\"col-participant-type\"\n >\n {{\n 'crmx.components.schedule_participant_type'\n | translate\n }}\n </th>\n <th\n scope=\"col\"\n class=\"col-actions\"\n ></th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-p>\n <tr>\n <td>\n <div class=\"participant-name-cell\">\n <span>{{ p.name }}</span>\n <span\n *ngIf=\"p.referenceName\"\n class=\"participant-reference\"\n >\n {{ p.referenceName }}\n </span>\n </div>\n </td>\n <td>\n <div class=\"participant-type-cell\">\n <i\n [class]=\"getOriginIcon(p.origin)\"\n ></i>\n <span>\n {{ getOriginLabel(p.origin) }}\n </span>\n </div>\n </td>\n <td>\n <p-button\n icon=\"pi pi-trash\"\n [rounded]=\"true\"\n [text]=\"true\"\n severity=\"danger\"\n (onClick)=\"onRemoveParticipant(p)\"\n [pTooltip]=\"\n 'crmx.components.schedule_remove' | translate\n \"\n tooltipPosition=\"top\"\n ></p-button>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n </div>\n\n <ng-template pTemplate=\"footer\">\n <div class=\"drawer-footer\">\n <p-button\n [label]=\"'crmx.components.cancel' | translate\"\n icon=\"pi pi-times\"\n severity=\"secondary\"\n [outlined]=\"true\"\n (onClick)=\"onCancel()\"\n ></p-button>\n <p-button\n [label]=\"'crmx.components.save' | translate\"\n icon=\"pi pi-check\"\n (onClick)=\"onSave()\"\n ></p-button>\n </div>\n </ng-template>\n</p-drawer>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DialogModule } from 'primeng/dialog';\nimport { DividerModule } from 'primeng/divider';\nimport { TagModule } from 'primeng/tag';\nimport { TableModule } from 'primeng/table';\nimport { TranslatePipe, TranslationService, DateFormatPipe } from '@seniorsistemas/components-ai';\nimport { ScheduleService } from '../services/schedule.service';\nimport { Schedule, ScheduleParticipant } from '../entities/schedule.interface';\nimport {\n getParticipantName, getParticipantType, getParticipantTypeIcon,\n getPrioritySeverity, getPriorityLabel, getConfirmationSeverity,\n getConfirmationLabel, PrioritySeverity, ConfirmationSeverity\n} from '../helpers/schedule-display.helpers';\n\n@Component({\n selector: 's-schedule-detail',\n standalone: true,\n imports: [CommonModule, DialogModule, DividerModule, TagModule, TableModule, TranslatePipe, DateFormatPipe],\n templateUrl: './schedule-detail.component.html',\n styleUrl: './schedule-detail.component.scss'\n})\nexport class ScheduleDetailComponent {\n @Input() visible = false;\n @Output() visibleChange = new EventEmitter<boolean>();\n\n schedule: {\n id: string; name: string;\n scheduleType: { id: string; name: string } | null;\n withRecurrence: boolean; whenOccurs: string;\n allDay: boolean; startTime?: string; endTime?: string;\n priority: string; [key: string]: unknown;\n } | null = null;\n scheduleData: Schedule | null = null;\n participants: ScheduleParticipant[] = [];\n participantsLoading = false;\n loading = false;\n\n constructor(\n private readonly scheduleService: ScheduleService,\n private readonly t: TranslationService\n ) {}\n\n open(scheduleId: string): void {\n this.schedule = null;\n this.scheduleData = null;\n this.participants = [];\n this.loading = true;\n this.participantsLoading = true;\n this.visible = true;\n this.visibleChange.emit(true);\n\n this.scheduleService.get(scheduleId).subscribe({\n next: (data) => {\n this.scheduleData = data;\n this.schedule = {\n id: data.id, name: data.name,\n scheduleType: data.type ?? null,\n withRecurrence: data.withRecurrence,\n whenOccurs: data.whenOccurs ?? '',\n allDay: data.allDay, startTime: data.startTime,\n endTime: data.endTime, priority: data.priority\n };\n this.loading = false;\n },\n error: () => { this.loading = false; }\n });\n this.scheduleService.listParticipants(scheduleId).subscribe({\n next: (r) => { this.participants = r.contents ?? []; this.participantsLoading = false; },\n error: () => { this.participantsLoading = false; }\n });\n }\n\n onClose(): void { this.visible = false; this.visibleChange.emit(false); }\n\n getParticipantName(p: ScheduleParticipant): string { return getParticipantName(p); }\n getParticipantType(p: ScheduleParticipant): string { return getParticipantType(this.t, p); }\n getParticipantTypeIcon(p: ScheduleParticipant): string { return getParticipantTypeIcon(p); }\n getPrioritySeverity(p: string): PrioritySeverity { return getPrioritySeverity(p); }\n getPriorityLabel(p: string): string { return getPriorityLabel(this.t, p); }\n getConfirmationSeverity(c: string): ConfirmationSeverity { return getConfirmationSeverity(c); }\n getConfirmationLabel(c: string): string { return getConfirmationLabel(this.t, c); }\n}\n","<p-dialog\n [(visible)]=\"visible\"\n [header]=\"schedule?.name || ''\"\n [modal]=\"true\"\n styleClass=\"detail-dialog\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n (onHide)=\"onClose()\"\n>\n <div class=\"detail-dialog-body\" *ngIf=\"schedule\">\n <div\n class=\"detail-dialog-section\"\n *ngIf=\"scheduleData\"\n >\n <div class=\"detail-dialog-row\">\n <span class=\"detail-label\">\n {{ 'crmx.components.schedule_priority' | translate }}\n </span>\n <p-tag\n [value]=\"getPriorityLabel(schedule.priority)\"\n [severity]=\"getPrioritySeverity(schedule.priority)\"\n ></p-tag>\n </div>\n <div\n class=\"detail-dialog-row\"\n *ngIf=\"schedule.scheduleType\"\n >\n <span class=\"detail-label\">\n {{ 'crmx.components.schedule_type' | translate }}\n </span>\n <span>{{ schedule.scheduleType.name }}</span>\n </div>\n <div\n class=\"detail-dialog-row\"\n *ngIf=\"schedule.whenOccurs\"\n >\n <span class=\"detail-label\">\n {{ 'crmx.components.schedule_recurrence' | translate }}\n </span>\n <span>{{ schedule.whenOccurs }}</span>\n </div>\n <div\n class=\"detail-dialog-row\"\n *ngIf=\"scheduleData.comments\"\n >\n <span class=\"detail-label\">\n {{ 'crmx.components.schedule_comments' | translate }}\n </span>\n <span>{{ scheduleData.comments }}</span>\n </div>\n </div>\n <p-divider *ngIf=\"scheduleData\"></p-divider>\n <div\n class=\"detail-dialog-section\"\n *ngIf=\"scheduleData\"\n >\n <div class=\"detail-section-header\">\n <i class=\"pi pi-users\"></i>\n <span>\n {{ 'crmx.components.schedule_participants' | translate }}\n </span>\n </div>\n <p-table\n [value]=\"participants\"\n [loading]=\"participantsLoading\"\n styleClass=\"p-datatable-sm p-datatable-striped\"\n >\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"col\">\n {{ 'crmx.components.schedule_name' | translate }}\n </th>\n <th\n scope=\"col\"\n class=\"col-participant-type\"\n >\n {{ 'crmx.components.schedule_participant_type' | translate }}\n </th>\n <th\n scope=\"col\"\n class=\"col-status\"\n >\n {{ 'crmx.components.schedule_status' | translate }}\n </th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-p>\n <tr>\n <td>\n <span>{{ getParticipantName(p) }}</span>\n </td>\n <td>\n <div class=\"participant-type-cell\">\n <i\n [class]=\"getParticipantTypeIcon(p)\"\n ></i>\n <span>\n {{ getParticipantType(p) }}\n </span>\n </div>\n </td>\n <td>\n <p-tag\n *ngIf=\"p.organizer\"\n [value]=\"\n 'crmx.components.schedule_participant_organizer_label'\n | translate\n \"\n severity=\"info\"\n ></p-tag>\n <p-tag\n *ngIf=\"!p.organizer\"\n [value]=\"\n getConfirmationLabel(p.confirmation)\n \"\n [severity]=\"\n getConfirmationSeverity(p.confirmation)\n \"\n ></p-tag>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr>\n <td colspan=\"3\">\n <div class=\"participants-empty\">\n <i class=\"pi pi-users\"></i>\n <p>\n {{\n 'crmx.components.schedule_no_participants'\n | translate\n }}\n </p>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n </div>\n</p-dialog>\n","/*\n * Public API Surface of @senior-gestao-relacionamento/angular-components\n */\n\nexport { AngularComponentsModule } from './lib/angular-components.module';\n\n// Services\nexport { StorageService } from './lib/services/storage/storage.service';\nexport { CurrentCollaboratorService } from './lib/services/current-collaborator/current-collaborator.service';\n\n// Config\nexport { provideAngularComponentsTranslations } from './lib/config/provide-angular-components-translations';\n\n// Models\nexport type {\n Collaborator,\n CollaboratorLeader,\n CollaboratorBranch,\n Branch,\n Company,\n JobTitle\n} from './lib/services/current-collaborator/models/collaborator.model';\n\n// Schedule\nexport { ScheduleFormComponent } from './lib/components/schedule/schedule-form/schedule-form.component';\nexport { ScheduleDetailComponent } from './lib/components/schedule/schedule-detail/schedule-detail.component';\nexport { ScheduleService } from './lib/components/schedule/services/schedule.service';\nexport { ScheduleTypeService } from './lib/components/schedule/services/schedule-type.service';\nexport type { Schedule, ScheduleRecurrenceItem, RecurrenceDatesRecord, ScheduleParticipant } from './lib/components/schedule/entities/schedule.interface';\nexport type { ScheduleType } from './lib/components/schedule/entities/schedule-type.interface';\nexport type { ParticipantLookup, ParticipantOrigin, ScheduleSummaryByDate } from './lib/components/schedule/entities/participant-lookup.interface';\nexport { SchedulePriority, ScheduleRecurrence, WeekDay, Month, RepeatWhen, OrdinalWeekDay, ParticipantConfirmation, Status } from './lib/components/schedule/enums/schedule.enums';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.StorageService","_getOriginLabel","_getOriginIcon","_getParticipantName","_getParticipantType","_getParticipantTypeIcon","_getPrioritySeverity","_getPriorityLabel","_getConfirmationSeverity","_getConfirmationLabel","i1","i2.ScheduleService","i3.ScheduleTypeService","i4.CurrentCollaboratorService","i1.ScheduleService","i2","i3","i5","i6","i7"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@senior-gestao-relacionamento/angular-components",
3
- "version": "2.1.0-master-7706e113",
3
+ "version": "2.1.0-master-5b5e43f1",
4
4
  "description": "Biblioteca de componentes reutilizáveis para aplicações Angular do CRM Senior Sistemas",
5
5
  "keywords": [
6
6
  "angular",