tnx-shared 5.3.357 → 5.3.359

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/bundles/tnx-shared.umd.js +81 -47
  2. package/bundles/tnx-shared.umd.js.map +1 -1
  3. package/bundles/tnx-shared.umd.min.js +1 -1
  4. package/bundles/tnx-shared.umd.min.js.map +1 -1
  5. package/classes/form-schema.d.ts +3 -0
  6. package/classes/form-schema.d.ts.map +1 -1
  7. package/components/entity-picker/entity-picker-box/entity-picker-box.component.d.ts +2 -1
  8. package/components/entity-picker/entity-picker-box/entity-picker-box.component.d.ts.map +1 -1
  9. package/components/entity-picker/entity-picker-dialog/components/entity-picker-data/entity-picker-data.component.d.ts +3 -2
  10. package/components/entity-picker/entity-picker-dialog/components/entity-picker-data/entity-picker-data.component.d.ts.map +1 -1
  11. package/components/entity-picker/entity-picker-dialog/components/entity-picker-selected/entity-picker-selected.component.d.ts +3 -2
  12. package/components/entity-picker/entity-picker-dialog/components/entity-picker-selected/entity-picker-selected.component.d.ts.map +1 -1
  13. package/components/entity-picker/entity-picker.component.d.ts +1 -0
  14. package/components/entity-picker/entity-picker.component.d.ts.map +1 -1
  15. package/esm2015/classes/form-schema.js +1 -1
  16. package/esm2015/components/autocomplete-datasource/autocomplete-datasource.component.js +3 -3
  17. package/esm2015/components/autocomplete-picker/autocomplete-picker.component.js +15 -15
  18. package/esm2015/components/entity-picker/entity-picker-box/entity-picker-box.component.js +4 -3
  19. package/esm2015/components/entity-picker/entity-picker-dialog/components/entity-picker-data/entity-picker-data.component.js +8 -3
  20. package/esm2015/components/entity-picker/entity-picker-dialog/components/entity-picker-selected/entity-picker-selected.component.js +8 -3
  21. package/esm2015/components/entity-picker/entity-picker.component.js +10 -2
  22. package/esm2015/components/user-picker/user-picker.component.js +15 -15
  23. package/fesm2015/tnx-shared.js +53 -34
  24. package/fesm2015/tnx-shared.js.map +1 -1
  25. package/package.json +2 -2
  26. package/tnx-shared.metadata.json +1 -1
@@ -362,20 +362,20 @@ export class UserPickerComponent extends ComponentBase {
362
362
  this.onBlur.emit();
363
363
  }
364
364
  handleKeyUp(evt) {
365
- let hideSuggessions = false;
366
- if (this.control.multiple) {
367
- hideSuggessions = evt.target.parentNode.parentNode.parentNode.childElementCount == 1;
368
- if (this.selectedValueObject && this.selectedValueObject.length > 0
369
- && evt.keyCode == 40 && hideSuggessions) {
370
- this.results = [];
371
- }
372
- }
373
- else {
374
- hideSuggessions = evt.target.parentNode.childElementCount == 1;
375
- }
376
- if (evt.target.value == '' && hideSuggessions && evt.keyCode != 40 && evt.keyCode != 38) {
377
- this.results = [];
378
- }
365
+ // let hideSuggessions = false;
366
+ // if (this.control.multiple) {
367
+ // hideSuggessions = evt.target.parentNode.parentNode.parentNode.childElementCount == 1;
368
+ // if (this.selectedValueObject && this.selectedValueObject.length > 0
369
+ // && evt.keyCode == 40 && hideSuggessions) {
370
+ // this.results = [];
371
+ // }
372
+ // }
373
+ // else {
374
+ // hideSuggessions = evt.target.parentNode.childElementCount == 1;
375
+ // }
376
+ // if (evt.target.value == '' && hideSuggessions && evt.keyCode != 40 && evt.keyCode != 38) {
377
+ // this.results = [];
378
+ // }
379
379
  }
380
380
  // Handle select item trong entity picker box (Không cần emit change)
381
381
  handleSelectEntity(evt) {
@@ -629,4 +629,4 @@ UserPickerComponent.propDecorators = {
629
629
  onReady: [{ type: Output, args: ['onReady',] }],
630
630
  onAdjustedValue: [{ type: Output, args: ['onAdjustedValue',] }]
631
631
  };
632
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NvbXBvbmVudHMvdXNlci1waWNrZXIvdXNlci1waWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBRUgsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLHlCQUF5QixFQUN6QixVQUFVLEVBQ1YsUUFBUSxFQUNSLFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsUUFBUSxFQUNYLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFB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SSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQU87UUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQzs7O1lBbnFCSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLHUzRkFBMkM7Z0JBRTNDLFNBQVMsRUFBRTtvQkFDUDt3QkFDSSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDO3dCQUNsRCxLQUFLLEVBQUUsSUFBSTtxQkFDZDtvQkFDRCx1QkFBdUI7aUJBQzFCOzthQUNKOzs7WUE5Q0csUUFBUTtZQTZCSCxhQUFhO1lBRGIsZUFBZTs7OzhCQW9CbkIsU0FBUyxTQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtzQkFJN0MsS0FBSzt3QkFDTCxLQUFLO3lCQUtMLEtBQUs7dUJBQ0wsS0FBSzt1QkFDTCxLQUFLOzZCQUVMLEtBQUs7cUJBU0wsTUFBTTt1QkFDTixNQUFNLFNBQUMsVUFBVTt5QkFDakIsTUFBTSxTQUFDLFlBQVk7d0JBQ25CLE1BQU0sU0FBQyxXQUFXO3NCQUNsQixNQUFNLFNBQUMsU0FBUztxQkFDaEIsTUFBTSxTQUFDLFFBQVE7c0JBQ2YsTUFBTSxTQUFDLFNBQVM7OEJBQ2hCLE1BQU0sU0FBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgZm9yd2FyZFJlZixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFNlbGVjdEl0ZW0gfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Jhc2UvY29tcG9uZW50LWJhc2UnO1xuaW1wb3J0IHsgaXNMaXRlcmFsT2JqZWN0IH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9lbnZpcm9ubWVudC1zY2hlbWEnO1xuaW1wb3J0IHtcbiAgICBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hLFxuICAgIENydWRMaXN0U2V0dGluZyxcbiAgICBEcm9wZG93bkNvbnRyb2xTY2hlbWEsXG4gICAgRHJvcGRvd25PcHRpb25zLFxuICAgIEVudGl0eVBpY2tlckNvbHVtbixcbiAgICBFbnRpdHlQaWNrZXJDb250cm9sU2NoZW1hLFxuICAgIEhlaWdodFR5cGUsXG4gICAgT3BlcmF0b3IsXG4gICAgUG9wdXBTaXplLFxuICAgIFVzZXJQaWNrZXJDb250cm9sU2NoZW1hLFxuICAgIFVzZXJUeXBlXG59IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtaW5mbyc7XG5pbXBvcnQgeyBGb3JtU3RhdGUgfSBmcm9tICcuLi8uLi9wdWJsaWMtYXBpJztcbmltcG9ydCB7IERtQ2h1Y1Z1U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RtLWNodWN2dS5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJWNVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLXY1LnNlcnZpY2UnO1xuaW1wb3J0IHsgYXBwZW5kRGVmYXVsdEZpbHRlciB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbic7XG5pbXBvcnQgeyBBZHZhbmNlRGF0YUVudGl0eVBpY2tlciB9IGZyb20gJy4uL2VudGl0eS1waWNrZXIvbW9kZWwvYWR2YW5jZS1kYXRhJztcbmltcG9ydCB7IFVzZXJQaWNrZXJCb3hDb21wb25lbnQgfSBmcm9tICcuL3VzZXItcGlja2VyLWJveC91c2VyLXBpY2tlci1ib3guY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd1c2VyLXBpY2tlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VzZXItcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi91c2VyLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFVzZXJQaWNrZXJDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgQ29tcG9uZW50Q29udGV4dFNlcnZpY2VcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gICAgQFZpZXdDaGlsZCgnZmlsdGVyQ2h1Y1Z1UmVmJywgeyBzdGF0aWM6IHRydWUgfSkgZmlsdGVyQ2h1Y1Z1UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIG9uQ2hhbmdlQmFzZTogRnVuY3Rpb247XG4gICAgb25Ub3VjaGVkOiBGdW5jdGlvbjtcblxuICAgIEBJbnB1dCgpIGNvbnRyb2w6IFVzZXJQaWNrZXJDb250cm9sU2NoZW1hO1xuICAgIEBJbnB1dCgpIHBvcHVwU2l6ZTogUG9wdXBTaXplID0gbmV3IFBvcHVwU2l6ZSh7XG4gICAgICAgIHdpZHRoOiAxMTAwLFxuICAgICAgICBoZWlnaHQ6IDkwMCxcbiAgICAgICAgbWF4aW1pemU6IHRydWVcbiAgICB9KTtcbiAgICBASW5wdXQoKSBoaWRkZW5Db2xzOiBzdHJpbmdbXSA9IFtdO1xuICAgIEBJbnB1dCgpIG11bHRpcGxlID0gZmFsc2U7XG4gICAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgICBfcmVhZE9ubHlWYWx1ZXM6IHN0cmluZ1tdO1xuICAgIEBJbnB1dCgpIHNldCByZWFkT25seVZhbHVlcyh2YWx1ZTogc3RyaW5nW10pIHtcbiAgICAgICAgdGhpcy5fcmVhZE9ubHlWYWx1ZXMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy51cGRhdGVGdW5jQ2hlY2tSZWFkT25seUl0ZW0oKTtcbiAgICAgICAgdGhpcy51cGRhdGVSZWFkT25seUl0ZW0oKTtcbiAgICB9XG4gICAgZ2V0IHJlYWRPbmx5VmFsdWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlWYWx1ZXM7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIG9uSW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoJ29uU2VsZWN0Jykgb25TZWxlY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgnb25VblNlbGVjdCcpIG9uVW5TZWxlY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgnb25DaGFuZ2VkJykgb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoJ29uRm9jdXMnKSBvbkZvY3VzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoJ29uQmx1cicpIG9uQmx1cjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCdvblJlYWR5Jykgb25SZWFkeTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCdvbkFkanVzdGVkVmFsdWUnKSBvbkFkanVzdGVkVmFsdWU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBjb250cm9sUGlja2VyOiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hO1xuICAgIHNldHRpbmdQaWNrZXI6IENydWRMaXN0U2V0dGluZyA9IG5ldyBDcnVkTGlzdFNldHRpbmcoKTtcbiAgICBhZHZhbmNlRGF0YVBpY2tlcjogQWR2YW5jZURhdGFFbnRpdHlQaWNrZXIgPSBuZXcgQWR2YW5jZURhdGFFbnRpdHlQaWNrZXIoKTtcblxuICAgIHZhbHVlOiBhbnk7XG4gICAgZnVuY1JldHVyblZhbHVlOiAodmFsdWUpID0+IHt9ID0gdmFsdWUgPT4gdmFsdWU7XG4gICAgc2VsZWN0ZWRSb3dEYXRhOiBhbnk7XG4gICAgc2VsZWN0ZWRWYWx1ZTogYW55O1xuICAgIHNlbGVjdGVkVmFsdWVPYmplY3Q6IGFueTtcbiAgICBkYXRhU291cmNlOiBhbnlbXSA9IFtdO1xuICAgIGZ1bmNDaGVja1JlYWRPbmx5SXRlbTogKGl0ZW06IGFueSkgPT4gdm9pZDtcblxuICAgIGZpZWxkU2VhcmNoVGV4dDogc3RyaW5nW10gPSBbXTtcblxuICAgIHJlc3VsdHM6IGFueVtdID0gW107XG5cbiAgICBzaG93Rm9ybVBpY2tlciA9IGZhbHNlO1xuICAgIGRpcnR5ID0gZmFsc2U7XG5cbiAgICB0b29sdGlwID0gJyc7XG4gICAgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICBzZWFyY2hTY2hlbWE6IGFueSA9IHt9O1xuICAgIHNlYXJjaERhdGE6IGFueSA9IHt9O1xuXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJPblNlYXJjaD86IEZ1bmN0aW9uO1xuICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2U7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHB1YmxpYyBfdXNlclY1U2VydmljZTogVXNlclY1U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBfZG1fQ2h1Y1Z1U2VydmljZTogRG1DaHVjVnVTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSBfaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmNvbnRyb2wuX2NvbXBvbmVudCA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGNvbW1vbkZpZWxkUGx1cyA9ICdtYUNodWNWdSxsc3RUZW5Eb25WaSxpZHNEb25WaSc7XG4gICAgICAgIHRoaXMuY29udHJvbFBpY2tlciA9IG5ldyBFbnRpdHlQaWNrZXJDb250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgIC4uLnRoaXMuY29udHJvbCxcbiAgICAgICAgICAgIGZpZWxkOiAnYXJySWROZ3VvaUR1bmcnLFxuICAgICAgICAgICAgbGFiZWw6ICdOZ8aw4budaSBkw7luZycsXG4gICAgICAgICAgICB0aXRsZTogJ0No4buNbiBuZ8aw4budaSBkw7luZycsXG4gICAgICAgICAgICBiYXNlU2VydmljZTogdGhpcy5fdXNlclY1U2VydmljZSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgZGlzcGxheUZpZWxkOiB0aGlzLmNvbnRyb2wuZ2V0RGlzcGxheU5hbWUgPyAnZGlzcGxheU5hbWUnIDogdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZCxcbiAgICAgICAgICAgIGZpZWxkUGx1czogdGhpcy5jb250cm9sLmZpZWxkUGx1cyA/IGAke3RoaXMuY29udHJvbC5maWVsZFBsdXN9LCR7Y29tbW9uRmllbGRQbHVzfWAgOiBjb21tb25GaWVsZFBsdXMsXG4gICAgICAgICAgICB2YWx1ZUZpZWxkOiB0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCxcbiAgICAgICAgICAgIGRlZmF1bHRGaWx0ZXJzOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICBhd2FpdCBhcHBlbmREZWZhdWx0RmlsdGVyKGZpbHRlcnMsIHRoaXMuY29udHJvbC5kZWZhdWx0RmlsdGVycyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5mb3JtU3RhdGUgPT0gRm9ybVN0YXRlLkFERCkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIoJ2xvY2tvdXRFbmFibGVkJywgT3BlcmF0b3IuZXF1YWwsIGZhbHNlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG11bHRpcGxlOiB0aGlzLmNvbnRyb2wubXVsdGlwbGUsXG4gICAgICAgICAgICBmdW5jR2V0TGFiZWw6IChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwpIHJldHVybiB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKGl0ZW0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmRpc3BsYXlOYW1lID8/IHRoaXMuX3VzZXJWNVNlcnZpY2UuZ2V0VXNlck5hbWUoaXRlbSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gcGFnZVNpemU6IHRoaXMuY29udHJvbC5wYWdlU2l6ZSxcbiAgICAgICAgICAgIC8vIGZpZWxkUGx1czogJ2hvLHRlbicsXG4gICAgICAgICAgICAvLyBmaWVsZFNlYXJjaFRleHQ6IFsnaG8nLCAndGVuJ10sXG4gICAgICAgICAgICAvLyBhZnRlckdldERhdGE6IHRoaXMuZ2VuZXJhdGVIb1RlbixcbiAgICAgICAgICAgIC8vIGFmdGVyR2V0RGF0YVVuUGlja2VkOiB0aGlzLmdlbmVyYXRlSG9UZW4sXG4gICAgICAgICAgICAvLyBhZnRlckdldERhdGFQaWNrZWQ6IHRoaXMuZ2VuZXJhdGVIb1RlbixcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuY29udHJvbC5jb2x1bW5zIHx8IFtcbiAgICAgICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdUw6BpIGtob+G6o24nLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAndXNlck5hbWUnLFxuICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxuICAgICAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxMDBweCdcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdNw6MnLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnY29kZScsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzE2MHB4J1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0jhu40gdsOgIHTDqm4nLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnZnVsbE5hbWVOZXcnLFxuICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxuICAgICAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxNjBweCdcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdIw7JtIHRoxrAnLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnZW1haWwnLFxuICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzE2MHB4J1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0No4bupYyB24bulJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ2xzdFRlbkNodWNWdScsXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvZGU6ICdtYUNodWNWdScsXG4gICAgICAgICAgICAgICAgICAgIC8vIGJhc2VTZXJ2aWNlOiB0aGlzLl9kbV9DaHVjVnVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUZpbHRlcjogdGhpcy5maWx0ZXJDaHVjVnVSZWYsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTYwcHgnXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnR2nhuqNuZyB2acOqbicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdpc0dpYW5nVmllbicsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnOTBweCcsXG4gICAgICAgICAgICAgICAgICAgIGlzRGlzcGxheTogdGhpcy5jb250cm9sLnVzZXJUeXBlID09PSBVc2VyVHlwZS5DYW5CbyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdDaHV5w6puIHZpw6puJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ2lzQ2h1eWVuVmllbicsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnOTBweCcsXG4gICAgICAgICAgICAgICAgICAgIGlzRGlzcGxheTogdGhpcy5jb250cm9sLnVzZXJUeXBlID09PSBVc2VyVHlwZS5DYW5CbyxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIG1kV2lkdGg6IDEyXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZpZWxkU2VhcmNoVGV4dCA9IFsuLi50aGlzLmNvbnRyb2xQaWNrZXIuZmllbGRTZWFyY2hUZXh0XTtcbiAgICAgICAgLy8gQ8WpXG4gICAgICAgIC8vIGlmICghdGhpcy5maWVsZFNlYXJjaFRleHQuc29tZShpdGVtID0+IGl0ZW0gPT0gdGhpcy5jb250cm9sUGlja2VyLmRpc3BsYXlGaWVsZCkpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuZmllbGRTZWFyY2hUZXh0LnB1c2godGhpcy5jb250cm9sUGlja2VyLmRpc3BsYXlGaWVsZCk7XG4gICAgICAgIC8vIH1cblxuICAgICAgICAvLyBN4bubaSAtIE7hur91IGtvIGPDsyBmaWVsZFNlYXJjaFRleHQgdGjDrCBkw7luZyBkaXNwbGF5RmllbGQgxJHhu4Mgc2VhcmNoXG4gICAgICAgIGlmICh0aGlzLmZpZWxkU2VhcmNoVGV4dC5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5maWVsZFNlYXJjaFRleHQucHVzaCh0aGlzLmNvbnRyb2xQaWNrZXIuZGlzcGxheUZpZWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOG6qG4gY+G7mXQga2hpIGPDsyBnacOhIHRy4buLIMSRxrDhu6NjIHRyeeG7gW4gdsOgbyBoaWRkZW5Db2xzXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuaGlkZGVuQ29scy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbFBpY2tlci5jb2x1bW5zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5oaWRkZW5Db2xzLmluY2x1ZGVzKGl0ZW0uY29kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5pc0Rpc3BsYXkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5yZXR1cm5UeXBlID09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgIHRoaXMuZnVuY1JldHVyblZhbHVlID0gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZ1bmNSZXR1cm5WYWx1ZSA9IHZhbHVlID0+IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVpbGRGaWx0ZXJLZXl3b3JkKCk7XG4gICAgICAgIHRoaXMuYnVpbGRTZXR0aW5nRW50aXR5UGlja2VyKCk7XG4gICAgICAgIHRoaXMuY3JlYXRlU2NoZW1hU2VhcmNoKCk7XG4gICAgICAgIHRoaXMudXBkYXRlRnVuY0NoZWNrUmVhZE9ubHlJdGVtKCk7XG4gICAgICAgIHRoaXMub25SZWFkeS5lbWl0KCk7XG4gICAgICAgIHRoaXMub25Jbml0LmVtaXQodGhpcyk7XG4gICAgfVxuXG4gICAgdXBkYXRlRnVuY0NoZWNrUmVhZE9ubHlJdGVtKCkge1xuICAgICAgICBpZiAodGhpcy5yZWFkT25seVZhbHVlcyAmJiB0aGlzLnJlYWRPbmx5VmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5mdW5jQ2hlY2tSZWFkT25seUl0ZW0gPSB0aGlzLl9mdW5jQ2hlY2tSZWFkT25seUl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZ1bmNDaGVja1JlYWRPbmx5SXRlbSA9IChpdGVtOiBhbnkpID0+IHsgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGNyZWF0ZVNjaGVtYVNlYXJjaCgpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hTY2hlbWEuaWRDaHVjVnVzID0gbmV3IERyb3Bkb3duQ29udHJvbFNjaGVtYSh7XG4gICAgICAgICAgICBmaWVsZDogJ2lkQ2h1Y1Z1cycsXG4gICAgICAgICAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnQ2jhu41uIGNo4bupYyB24bulJyxcbiAgICAgICAgICAgIGJhc2VTZXJ2aWNlOiB0aGlzLl9kbV9DaHVjVnVTZXJ2aWNlLFxuICAgICAgICAgICAgc29ydEZpZWxkOiAnc29UaHVUdScsXG4gICAgICAgICAgICBsb2FkT25Jbml0OiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGJ1aWxkRmlsdGVyS2V5d29yZCgpIHtcbiAgICAgICAgY29uc3Qgb3BlcmF0b3IgPSB0aGlzLmNvbnRyb2xQaWNrZXIub3BlcmF0b3JGaWVsZFNlYXJjaFRleHQgPz8gT3BlcmF0b3IuY29udGFpbjtcbiAgICAgICAgaWYgKHRoaXMuZmllbGRTZWFyY2hUZXh0Lmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmdldEZpbHRlck9uU2VhcmNoID0gdmFsdWUgPT4gdGhpcy5uZXdGaWx0ZXIodGhpcy5maWVsZFNlYXJjaFRleHRbMF0sIG9wZXJhdG9yLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmdldEZpbHRlck9uU2VhcmNoID0gdmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ29yJyxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogW11cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkU2VhcmNoIG9mIHRoaXMuZmllbGRTZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5maWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIoZmllbGRTZWFyY2gsIG9wZXJhdG9yLCB2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJ1aWxkU2V0dGluZ0VudGl0eVBpY2tlcigpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nUGlja2VyLmNvbHMgPSBbXTtcbiAgICAgICAgdGhpcy5zZXR0aW5nUGlja2VyLnRpdGxlID0gJyc7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIucGFnZVNpemUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ1BpY2tlci5wYWdlU2V0dGluZy5wYWdlU2l6ZSA9IHRoaXMuY29udHJvbFBpY2tlci5wYWdlU2l6ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuYmFzZVNlcnZpY2UgPSB0aGlzLmNvbnRyb2xQaWNrZXIuYmFzZVNlcnZpY2U7XG4gICAgICAgIHRoaXMuc2V0dGluZ1BpY2tlci5oZWlnaHRUeXBlID0gSGVpZ2h0VHlwZS5keW5hbWljO1xuICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuaGlkZGVuQ2hlY2tib3ggPSB0cnVlO1xuICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuc2V0dGluZ0tleSA9ICd1c2VyUGlja2VyJztcbiAgICAgICAgdGhpcy5zZXR0aW5nUGlja2VyLmhpZGRlblNldHRpbmdXb3JrZmxvdyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0dGluZ1BpY2tlci5oaWRkZW5TZXR0aW5nUGVybWlzc2lvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0dGluZ1BpY2tlci5maWVsZFNlYXJjaFRleHQgPSB0aGlzLmNvbnRyb2xQaWNrZXIuZmllbGRTZWFyY2hUZXh0O1xuICAgICAgICB0aGlzLmNvbnRyb2xQaWNrZXIuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLmlzRGlzcGxheSkge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT0gJ2N1c3RvbScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nUGlja2VyLmNvbHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogY29sdW1uLmNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGNvbHVtbi5sYWJlbCksXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVNlcnZpY2U6IGNvbHVtbi5iYXNlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRmllbGQ6IGNvbHVtbi52YWx1ZUZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkOiBjb2x1bW4uZGlzcGxheUZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRQbHVzOiBjb2x1bW4uZmllbGRQbHVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgc29ydEZpZWxkOiBjb2x1bW4uc29ydEZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgc29ydERpcjogY29sdW1uLnNvcnREaXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jR2V0TGFiZWw6IGNvbHVtbi5mdW5jR2V0TGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlOiBjb2x1bW4uZGF0YVNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwQ29kZTogY29sdW1uLmdyb3VwQ29kZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ1BpY2tlci5jb2xzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5jb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChjb2x1bW4ubGFiZWwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFkdmFuY2VEYXRhUGlja2VyLmZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzKCk7XG4gICAgfVxuXG4gICAgLy8gTOG6pXkgdW5pb24gY+G7p2E6IHNlbGVjdGVkRmllbGQsIGZpZWxkUGx1cywgZGlzcGxheSBmaWVsZHMgY8OzIHRyb25nIHRhYmxlLlxuICAgIGdldEZpZWxkcygpIHtcbiAgICAgICAgY29uc3QgYXJyRmllbGQ6IHN0cmluZ1tdID0gW3RoaXMuY29udHJvbFBpY2tlci5kaXNwbGF5RmllbGQsICdpZCddO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQgJiYgdGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQgIT0gJ2lkJykge1xuICAgICAgICAgICAgYXJyRmllbGQucHVzaCh0aGlzLmNvbnRyb2xQaWNrZXIudmFsdWVGaWVsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb250cm9sUGlja2VyLmZpZWxkUGx1cykge1xuICAgICAgICAgICAgYXJyRmllbGQucHVzaCguLi50aGlzLmNvbnRyb2xQaWNrZXIuZmllbGRQbHVzLnNwbGl0KCcsJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJyRGlzcGxheUZpZWxkID0gdGhpcy5jb250cm9sUGlja2VyLmNvbHVtbnNcbiAgICAgICAgICAgIC5maWx0ZXIoeCA9PiB4LmlzRGlzcGxheSA9PSB0cnVlICYmICF4Lm5vdEluRmllbGRzICYmIHguZGF0YVR5cGUgIT0gJ2N1c3RvbScpXG4gICAgICAgICAgICAubWFwKHggPT4geC5jb2RlKTtcblxuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmFkZERpc3RpbmN0KGFyckRpc3BsYXlGaWVsZCwgYXJyRmllbGQpO1xuICAgICAgICByZXR1cm4gYXJyRmllbGQudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBnZXREcm9wZG93bk9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRHJvcGRvd25PcHRpb25zKHtcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogdGhpcy5jb250cm9sUGlja2VyLmRpc3BsYXlGaWVsZCxcbiAgICAgICAgICAgIHZhbHVlRmllbGQ6IHRoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkLFxuICAgICAgICAgICAgZmllbGRQbHVzOiB0aGlzLmNvbnRyb2xQaWNrZXIuZmllbGRQbHVzLFxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiB0aGlzLmNvbnRyb2xQaWNrZXIuZnVuY0dldExhYmVsLFxuICAgICAgICAgICAgcGx1c1VybDogdGhpcy5jb250cm9sUGlja2VyLnBsdXNVcmxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2hvd1BpY2tGb3JtKCkge1xuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd0Zvcm1QaWNrZXIgPSB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIGdldERhdGEoa2V5V29yZCkge1xuICAgICAgICBjb25zdCBmaWx0ZXJzID0gW107XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2xQaWNrZXIudmFsdWVGaWVsZCwgT3BlcmF0b3Iubm90SW4sIHRoaXMudmFsdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkLCBPcGVyYXRvci5ub3RFcXVhbCwgdGhpcy52YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgYXBwZW5kRGVmYXVsdEZpbHRlcihmaWx0ZXJzLCB0aGlzLmNvbnRyb2wuZGVmYXVsdEZpbHRlcnMpO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmZvcm1TdGF0ZSA9PSBGb3JtU3RhdGUuQUREKSB7XG4gICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIoJ2xvY2tvdXRFbmFibGVkJywgT3BlcmF0b3IuZXF1YWwsIGZhbHNlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleVdvcmQgJiYga2V5V29yZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5nZXRGaWx0ZXJPblNlYXJjaChrZXlXb3JkKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGF3YWl0IHRoaXMuY29udHJvbFBpY2tlci5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcbiAgICAgICAgICAgIGZpbHRlcnMsIHRoaXMuZ2V0RHJvcGRvd25PcHRpb25zKClcbiAgICAgICAgKTtcbiAgICAgICAgYXdhaXQgdGhpcy5yZVN0cnVjdHVyZURhdGFTb3VyY2UoZGF0YVNvdXJjZSk7XG4gICAgICAgIHRoaXMucmVzdWx0cyA9IHRoaXMuZGF0YVNvdXJjZTtcbiAgICAgICAgLy8gUmV0dXJuIMSR4buDIG3hu5l0IHPhu5EgbsahaSBraMOhYyBkw7luZywgayByZW1vdmVcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0cztcbiAgICB9XG5cbiAgICBzZWFyY2goZXZlbnQpIHtcbiAgICAgICAgdGhpcy5nZXREYXRhKGV2ZW50LnF1ZXJ5KTtcbiAgICB9XG5cbiAgICBjbGVhclZhbHVlKCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sUGlja2VyLm11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xuICAgICAgICB0aGlzLmhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMub25VblNlbGVjdC5lbWl0KHtcbiAgICAgICAgICAgIGl0ZW06IHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNlbGVjdGVkVmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZUV2ZW50KCk7XG4gICAgfVxuXG4gICAgaGFuZGxlUm93U2VsZWN0KGl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0RhdGEgPSBpdGVtO1xuICAgIH1cblxuICAgIC8vIFNlbGVjdCBpdGVtIGPhu6dhIGF1dG9jb21wbGV0ZVxuICAgIGhhbmRsZVNlbGVjdChpdGVtKSB7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xuICAgICAgICBjb25zdCBldnQgPSB7XG4gICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0ZWRWYWx1ZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uU2VsZWN0LmVtaXQoZXZ0KTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlRXZlbnQoKTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbFBpY2tlci5jYWxsQmFjayAmJiB0aGlzLmNvbnRyb2xQaWNrZXIuY2FsbEJhY2suc2VsZWN0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xQaWNrZXIuY2FsbEJhY2suc2VsZWN0KGl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQuG7jyBzZWxlY3QgaXRlbSBj4bunYSBhdXRvY29tcGxldGVcbiAgICBoYW5kbGVVblNlbGVjdCgkZXZlbnQpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IGV2dCA9IHtcbiAgICAgICAgICAgIGl0ZW06ICRldmVudCxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNlbGVjdGVkVmFsdWVcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vblVuU2VsZWN0LmVtaXQoZXZ0KTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlRXZlbnQoKTtcbiAgICB9XG5cbiAgICBoYW5kbGVGb2N1cyhldnQpIHtcbiAgICAgICAgaWYgKGV2dC50YXJnZXQudmFsdWUpIHtcbiAgICAgICAgICAgIGV2dC50YXJnZXQuc2VsZWN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkZvY3VzLmVtaXQoZXZ0KTtcbiAgICB9XG5cbiAgICBoYW5kbGVCbHVyKCRldmVudCkge1xuICAgICAgICB0aGlzLm9uQmx1ci5lbWl0KCk7XG4gICAgfVxuXG4gICAgaGFuZGxlS2V5VXAoZXZ0KSB7XG4gICAgICAgIGxldCBoaWRlU3VnZ2Vzc2lvbnMgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgaGlkZVN1Z2dlc3Npb25zID0gZXZ0LnRhcmdldC5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jaGlsZEVsZW1lbnRDb3VudCA9PSAxO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCAmJiB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICYmIGV2dC5rZXlDb2RlID09IDQwICYmIGhpZGVTdWdnZXNzaW9ucykge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaGlkZVN1Z2dlc3Npb25zID0gZXZ0LnRhcmdldC5wYXJlbnROb2RlLmNoaWxkRWxlbWVudENvdW50ID09IDE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZ0LnRhcmdldC52YWx1ZSA9PSAnJyAmJiBoaWRlU3VnZ2Vzc2lvbnMgJiYgZXZ0LmtleUNvZGUgIT0gNDAgJiYgZXZ0LmtleUNvZGUgIT0gMzgpIHtcbiAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHNlbGVjdCBpdGVtIHRyb25nIGVudGl0eSBwaWNrZXIgYm94IChLaMO0bmcgY+G6p24gZW1pdCBjaGFuZ2UpXG4gICAgaGFuZGxlU2VsZWN0RW50aXR5KGV2dCkge1xuICAgICAgICB0aGlzLm9uU2VsZWN0LmVtaXQoZXZ0KTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdW5zZWxlY3QgaXRlbSB0cm9uZyBlbnRpdHkgcGlja2VyIGJveCAoS2jDtG5nIGPhuqduIGVtaXQgY2hhbmdlKVxuICAgIGhhbmRsZVVuU2VsZWN0RW50aXR5KGV2dCkge1xuICAgICAgICB0aGlzLm9uVW5TZWxlY3QuZW1pdChldnQpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBjaGFuZ2UgaXRlbSB0cm9uZyBlbnRpdHkgcGlja2VyIGJveFxuICAgIGhhbmRsZUNoYW5nZUVudGl0eShldnQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gZXZ0LnZhbHVlO1xuICAgICAgICB0aGlzLnVwZGF0ZVB1cmVWYWx1ZSgpO1xuICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlRXZlbnQoKTtcbiAgICB9XG5cbiAgICBfZnVuY0NoZWNrUmVhZE9ubHlJdGVtKGl0ZW06IGFueSkge1xuICAgICAgICBpZiAodGhpcy5yZWFkT25seVZhbHVlcy5zb21lKHEgPT4gcSA9PSBpdGVtLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSkpIHtcbiAgICAgICAgICAgIGl0ZW0uX2Rpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVJlYWRPbmx5SXRlbSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSAmJiB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZnVuY0NoZWNrUmVhZE9ubHlJdGVtKGl0ZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGVTZWxlY3RlZFZhbHVlKCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sUGlja2VyLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gW107XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlLnB1c2goaXRlbS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mdW5jQ2hlY2tSZWFkT25seUl0ZW0oaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHNlbGVjdGVkVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlUHVyZVZhbHVlKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlUHVyZVZhbHVlKCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sUGlja2VyLm11bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGRdKTtcbiAgICAgICAgICAgIHRoaXMuaGFzVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoID4gMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVbdGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGRdO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0VmFsdWVSZXR1cm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZ1bmNSZXR1cm5WYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWUpO1xuICAgIH1cblxuICAgIGZpcmVDaGFuZ2VFdmVudCgpIHtcbiAgICAgICAgY29uc3QgdmFsdWVSZXR1cm4gPSB0aGlzLmdldFZhbHVlUmV0dXJuKCk7XG4gICAgICAgIHRoaXMub25DaGFuZ2VCYXNlKHZhbHVlUmV0dXJuKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZWQuZW1pdCh7XG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVSZXR1cm5cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgaGFuZGxlSGlkZShldnQpIHtcbiAgICAgICAgdGhpcy5zaG93Rm9ybVBpY2tlciA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5kaXJ0eSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbFBpY2tlci5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIGxldCBkYXRhU291cmNlID0gW107XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UgPSBhd2FpdCB0aGlzLmNvbnRyb2xQaWNrZXIuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQsIE9wZXJhdG9yLmluLCB0aGlzLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSwgdGhpcy5nZXREcm9wZG93bk9wdGlvbnMoKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVTdHJ1Y3R1cmVEYXRhU291cmNlKGRhdGFTb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSB0aGlzLmRhdGFTb3VyY2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5jb250cm9sUGlja2VyLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkLCBPcGVyYXRvci5lcXVhbCwgdGhpcy52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sIHRoaXMuZ2V0RHJvcGRvd25PcHRpb25zKClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZVN0cnVjdHVyZURhdGFTb3VyY2UoZGF0YVNvdXJjZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IHRoaXMuZGF0YVNvdXJjZVswXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sdGlwID0gdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0LmxhYmVsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sdGlwID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2xpY2tTdWJtaXRCdXR0b24oZXZ0LCB1c2VyUGlja2VyQm94OiBVc2VyUGlja2VyQm94Q29tcG9uZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlSGlkZShldnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRSb3dEYXRhKSB7XG4gICAgICAgICAgICBpZiAodXNlclBpY2tlckJveCAmJiB1c2VyUGlja2VyQm94LmVudGl0eVBpY2tlckJveCkge1xuICAgICAgICAgICAgICAgIHVzZXJQaWNrZXJCb3guZW50aXR5UGlja2VyQm94LmhhbmRsZVBpY2sodGhpcy5zZWxlY3RlZFJvd0RhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93Rm9ybVBpY2tlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZVN0cnVjdHVyZURhdGFTb3VyY2Uoc291cmNlczogYW55W10pIHtcbiAgICAgICAgaWYgKHNvdXJjZXMgIT0gbnVsbCAmJiBzb3VyY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIEzhuqV5IHRow6ptIHRow7RuZyB0aW4gY2jhu6ljIHbhu6UgxJHhu4MgaGnhu4NuIHRo4buLXG4gICAgICAgICAgICBjb25zdCBhcnIgPSBbXTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2Ygc291cmNlcykge1xuICAgICAgICAgICAgICAgIGl0ZW0gPSB0aGlzLnJlU3RydWN0dXJlSXRlbU9iamVjdChpdGVtKTtcbiAgICAgICAgICAgICAgICBhcnIucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIubW9kaWZ5RGF0YVNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb250cm9sUGlja2VyLm1vZGlmeURhdGFTZWxlY3RlZChhcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlID0gYXJyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlID0gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZVN0cnVjdHVyZUl0ZW1PYmplY3QoaXRlbSk6IFNlbGVjdEl0ZW0ge1xuICAgICAgICBjb25zdCB0ZW1wOiBTZWxlY3RJdGVtID0geyB2YWx1ZTogaXRlbSB9O1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCkge1xuICAgICAgICAgICAgdGVtcC5sYWJlbCA9IHRoaXMuY29udHJvbFBpY2tlci5mdW5jR2V0TGFiZWwoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5kaXNwbGF5RmllbGQgIT09ICdmdWxsTmFtZU5ldycpIHtcbiAgICAgICAgICAgIHRlbXAubGFiZWwgPSBpdGVtW3RoaXMuY29udHJvbFBpY2tlci5kaXNwbGF5RmllbGRdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gY29uc3QgdGVuRG9uVmkgPSBpdGVtLmxzdFRlbkRvblZpICYmIGl0ZW0ubHN0VGVuRG9uVmkubGVuZ3RoID4gMCA/IGl0ZW0ubHN0VGVuRG9uVmkuc3BsaXQoJywnKVswXSA6ICcnO1xuICAgICAgICAgICAgdGVtcC5sYWJlbCA9IChpdGVtLm1hQ2h1Y1Z1ID8gYCR7aXRlbS5tYUNodWNWdX0uIGAgOiAnJykgKyBgJHt0ZW1wLmxhYmVsIHx8IHRoaXMuZ2V0RGlzcGxheU5hbWUoaXRlbSl9YCArIChpdGVtLnRlbkRvblZpID8gYCAtICR7aXRlbS50ZW5Eb25WaX1gIDogJycpO1xuICAgICAgICB9XG4gICAgICAgIHRlbXAudmFsdWUuX2Ryb3Bkb3dudmFsdWUgPSB0aGlzLmNvbnRyb2xQaWNrZXIudmFsdWVGaWVsZDtcbiAgICAgICAgcmV0dXJuIHRlbXA7XG4gICAgfVxuXG4gICAgZ2V0RGlzcGxheU5hbWUoaXRlbSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBpdGVtLmRpc3BsYXlOYW1lID8gaXRlbS5kaXNwbGF5TmFtZSA6IGl0ZW0uZnVsbE5hbWVOZXc7XG4gICAgfVxuXG4gICAgYXN5bmMgd3JpdGVWYWx1ZShvYmo6IGFueSkge1xuICAgICAgICB0aGlzLmhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGlmIChvYmogIT0gbnVsbCAmJiBvYmoubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW107XG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgb2JqKSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgYXBwZW5kRGVmYXVsdEZpbHRlcihmaWx0ZXJzLCB0aGlzLmNvbnRyb2wuZGVmYXVsdEZpbHRlcnMpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sUGlja2VyLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldERyb3Bkb3duT3B0aW9ucygpXG4gICAgICAgICAgICAgICAgKS50aGVuKGFzeW5jIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVTdHJ1Y3R1cmVEYXRhU291cmNlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IHRoaXMuZGF0YVNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gdGhpcy5kYXRhU291cmNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQWRqdXN0ZWRWYWx1ZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5vbkFkanVzdGVkVmFsdWUuZW1pdCh0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKG9iaiAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gIWlzTGl0ZXJhbE9iamVjdChvYmopID8gb2JqIDogb2JqW3RoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkXTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xQaWNrZXIuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIFt0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2xQaWNrZXIudmFsdWVGaWVsZCwgT3BlcmF0b3IuZXF1YWwsIHZhbHVlKV0sXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RHJvcGRvd25PcHRpb25zKClcbiAgICAgICAgICAgICAgICApLnRoZW4oYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlU3RydWN0dXJlRGF0YVNvdXJjZShyZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gdGhpcy5kYXRhU291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gdGhpcy5kYXRhU291cmNlWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkFkanVzdGVkVmFsdWUuZW1pdCh0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QubGFiZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sUGlja2VyLmNhbGxCYWNrICYmIHRoaXMuY29udHJvbFBpY2tlci5jYWxsQmFjay5zZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xQaWNrZXIuY2FsbEJhY2suc2VsZWN0KHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkFkanVzdGVkVmFsdWUuZW1pdCh0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2VCYXNlID0gZm47XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cbn1cbiJdfQ==
632
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NvbXBvbmVudHMvdXNlci1waWNrZXIvdXNlci1waWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBRUgsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLHlCQUF5QixFQUN6QixVQUFVLEVBQ1YsUUFBUSxFQUNSLFNBQVMsRUFDVCx1QkFBdUIsRUFDdkIsUUFBUSxFQUNYLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFB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SUFBSSxFQUFFO3NCQUk3QyxLQUFLO3dCQUNMLEtBQUs7eUJBS0wsS0FBSzt1QkFDTCxLQUFLO3VCQUNMLEtBQUs7NkJBRUwsS0FBSztxQkFTTCxNQUFNO3VCQUNOLE1BQU0sU0FBQyxVQUFVO3lCQUNqQixNQUFNLFNBQUMsWUFBWTt3QkFDbkIsTUFBTSxTQUFDLFdBQVc7c0JBQ2xCLE1BQU0sU0FBQyxTQUFTO3FCQUNoQixNQUFNLFNBQUMsUUFBUTtzQkFDZixNQUFNLFNBQUMsU0FBUzs4QkFDaEIsTUFBTSxTQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgU2VsZWN0SXRlbSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvYmFzZS9jb21wb25lbnQtYmFzZSc7XG5pbXBvcnQgeyBpc0xpdGVyYWxPYmplY3QgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Vudmlyb25tZW50LXNjaGVtYSc7XG5pbXBvcnQge1xuICAgIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEsXG4gICAgQ3J1ZExpc3RTZXR0aW5nLFxuICAgIERyb3Bkb3duQ29udHJvbFNjaGVtYSxcbiAgICBEcm9wZG93bk9wdGlvbnMsXG4gICAgRW50aXR5UGlja2VyQ29sdW1uLFxuICAgIEVudGl0eVBpY2tlckNvbnRyb2xTY2hlbWEsXG4gICAgSGVpZ2h0VHlwZSxcbiAgICBPcGVyYXRvcixcbiAgICBQb3B1cFNpemUsXG4gICAgVXNlclBpY2tlckNvbnRyb2xTY2hlbWEsXG4gICAgVXNlclR5cGVcbn0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcbmltcG9ydCB7IEZvcm1TdGF0ZSB9IGZyb20gJy4uLy4uL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgRG1DaHVjVnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZG0tY2h1Y3Z1LnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclY1U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXItdjUuc2VydmljZSc7XG5pbXBvcnQgeyBhcHBlbmREZWZhdWx0RmlsdGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tbW9uJztcbmltcG9ydCB7IEFkdmFuY2VEYXRhRW50aXR5UGlja2VyIH0gZnJvbSAnLi4vZW50aXR5LXBpY2tlci9tb2RlbC9hZHZhbmNlLWRhdGEnO1xuaW1wb3J0IHsgVXNlclBpY2tlckJveENvbXBvbmVudCB9IGZyb20gJy4vdXNlci1waWNrZXItYm94L3VzZXItcGlja2VyLWJveC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3VzZXItcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdXNlci1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3VzZXItcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVXNlclBpY2tlckNvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBDb21wb25lbnRDb250ZXh0U2VydmljZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVXNlclBpY2tlckNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBAVmlld0NoaWxkKCdmaWx0ZXJDaHVjVnVSZWYnLCB7IHN0YXRpYzogdHJ1ZSB9KSBmaWx0ZXJDaHVjVnVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgb25DaGFuZ2VCYXNlOiBGdW5jdGlvbjtcbiAgICBvblRvdWNoZWQ6IEZ1bmN0aW9uO1xuXG4gICAgQElucHV0KCkgY29udHJvbDogVXNlclBpY2tlckNvbnRyb2xTY2hlbWE7XG4gICAgQElucHV0KCkgcG9wdXBTaXplOiBQb3B1cFNpemUgPSBuZXcgUG9wdXBTaXplKHtcbiAgICAgICAgd2lkdGg6IDExMDAsXG4gICAgICAgIGhlaWdodDogOTAwLFxuICAgICAgICBtYXhpbWl6ZTogdHJ1ZVxuICAgIH0pO1xuICAgIEBJbnB1dCgpIGhpZGRlbkNvbHM6IHN0cmluZ1tdID0gW107XG4gICAgQElucHV0KCkgbXVsdGlwbGUgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICAgIF9yZWFkT25seVZhbHVlczogc3RyaW5nW107XG4gICAgQElucHV0KCkgc2V0IHJlYWRPbmx5VmFsdWVzKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgICAgICB0aGlzLl9yZWFkT25seVZhbHVlcyA9IHZhbHVlO1xuICAgICAgICB0aGlzLnVwZGF0ZUZ1bmNDaGVja1JlYWRPbmx5SXRlbSgpO1xuICAgICAgICB0aGlzLnVwZGF0ZVJlYWRPbmx5SXRlbSgpO1xuICAgIH1cbiAgICBnZXQgcmVhZE9ubHlWYWx1ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWFkT25seVZhbHVlcztcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgb25Jbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgnb25TZWxlY3QnKSBvblNlbGVjdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCdvblVuU2VsZWN0Jykgb25VblNlbGVjdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCdvbkNoYW5nZWQnKSBvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgnb25Gb2N1cycpIG9uRm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgnb25CbHVyJykgb25CbHVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoJ29uUmVhZHknKSBvblJlYWR5OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoJ29uQWRqdXN0ZWRWYWx1ZScpIG9uQWRqdXN0ZWRWYWx1ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIGNvbnRyb2xQaWNrZXI6IEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWE7XG4gICAgc2V0dGluZ1BpY2tlcjogQ3J1ZExpc3RTZXR0aW5nID0gbmV3IENydWRMaXN0U2V0dGluZygpO1xuICAgIGFkdmFuY2VEYXRhUGlja2VyOiBBZHZhbmNlRGF0YUVudGl0eVBpY2tlciA9IG5ldyBBZHZhbmNlRGF0YUVudGl0eVBpY2tlcigpO1xuXG4gICAgdmFsdWU6IGFueTtcbiAgICBmdW5jUmV0dXJuVmFsdWU6ICh2YWx1ZSkgPT4ge30gPSB2YWx1ZSA9PiB2YWx1ZTtcbiAgICBzZWxlY3RlZFJvd0RhdGE6IGFueTtcbiAgICBzZWxlY3RlZFZhbHVlOiBhbnk7XG4gICAgc2VsZWN0ZWRWYWx1ZU9iamVjdDogYW55O1xuICAgIGRhdGFTb3VyY2U6IGFueVtdID0gW107XG4gICAgZnVuY0NoZWNrUmVhZE9ubHlJdGVtOiAoaXRlbTogYW55KSA9PiB2b2lkO1xuXG4gICAgZmllbGRTZWFyY2hUZXh0OiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgcmVzdWx0czogYW55W10gPSBbXTtcblxuICAgIHNob3dGb3JtUGlja2VyID0gZmFsc2U7XG4gICAgZGlydHkgPSBmYWxzZTtcblxuICAgIHRvb2x0aXAgPSAnJztcbiAgICBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgIHNlYXJjaFNjaGVtYTogYW55ID0ge307XG4gICAgc2VhcmNoRGF0YTogYW55ID0ge307XG5cbiAgICBwcml2YXRlIGdldEZpbHRlck9uU2VhcmNoPzogRnVuY3Rpb247XG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZTtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHVibGljIF91c2VyVjVTZXJ2aWNlOiBVc2VyVjVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIF9kbV9DaHVjVnVTZXJ2aWNlOiBEbUNodWNWdVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZSA9IF9pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuY29udHJvbC5fY29tcG9uZW50ID0gdGhpcztcbiAgICAgICAgY29uc3QgY29tbW9uRmllbGRQbHVzID0gJ21hQ2h1Y1Z1LGxzdFRlbkRvblZpLGlkc0RvblZpJztcbiAgICAgICAgdGhpcy5jb250cm9sUGlja2VyID0gbmV3IEVudGl0eVBpY2tlckNvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgLi4udGhpcy5jb250cm9sLFxuICAgICAgICAgICAgZmllbGQ6ICdhcnJJZE5ndW9pRHVuZycsXG4gICAgICAgICAgICBsYWJlbDogJ05nxrDhu51pIGTDuW5nJyxcbiAgICAgICAgICAgIHRpdGxlOiAnQ2jhu41uIG5nxrDhu51pIGTDuW5nJyxcbiAgICAgICAgICAgIGJhc2VTZXJ2aWNlOiB0aGlzLl91c2VyVjVTZXJ2aWNlLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICBkaXNwbGF5RmllbGQ6IHRoaXMuY29udHJvbC5nZXREaXNwbGF5TmFtZSA/ICdkaXNwbGF5TmFtZScgOiB0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkLFxuICAgICAgICAgICAgZmllbGRQbHVzOiB0aGlzLmNvbnRyb2wuZmllbGRQbHVzID8gYCR7dGhpcy5jb250cm9sLmZpZWxkUGx1c30sJHtjb21tb25GaWVsZFBsdXN9YCA6IGNvbW1vbkZpZWxkUGx1cyxcbiAgICAgICAgICAgIHZhbHVlRmllbGQ6IHRoaXMuY29udHJvbC52YWx1ZUZpZWxkLFxuICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnM6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgZmlsdGVycyA9IFtdO1xuICAgICAgICAgICAgICAgIGF3YWl0IGFwcGVuZERlZmF1bHRGaWx0ZXIoZmlsdGVycywgdGhpcy5jb250cm9sLmRlZmF1bHRGaWx0ZXJzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmZvcm1TdGF0ZSA9PSBGb3JtU3RhdGUuQUREKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcignbG9ja291dEVuYWJsZWQnLCBPcGVyYXRvci5lcXVhbCwgZmFsc2UpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlcnM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbXVsdGlwbGU6IHRoaXMuY29udHJvbC5tdWx0aXBsZSxcbiAgICAgICAgICAgIGZ1bmNHZXRMYWJlbDogKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCkgcmV0dXJuIHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwoaXRlbSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZGlzcGxheU5hbWUgPz8gdGhpcy5fdXNlclY1U2VydmljZS5nZXRVc2VyTmFtZShpdGVtKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBwYWdlU2l6ZTogdGhpcy5jb250cm9sLnBhZ2VTaXplLFxuICAgICAgICAgICAgLy8gZmllbGRQbHVzOiAnaG8sdGVuJyxcbiAgICAgICAgICAgIC8vIGZpZWxkU2VhcmNoVGV4dDogWydobycsICd0ZW4nXSxcbiAgICAgICAgICAgIC8vIGFmdGVyR2V0RGF0YTogdGhpcy5nZW5lcmF0ZUhvVGVuLFxuICAgICAgICAgICAgLy8gYWZ0ZXJHZXREYXRhVW5QaWNrZWQ6IHRoaXMuZ2VuZXJhdGVIb1RlbixcbiAgICAgICAgICAgIC8vIGFmdGVyR2V0RGF0YVBpY2tlZDogdGhpcy5nZW5lcmF0ZUhvVGVuLFxuICAgICAgICAgICAgY29sdW1uczogdGhpcy5jb250cm9sLmNvbHVtbnMgfHwgW1xuICAgICAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ1TDoGkga2hv4bqjbicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICd1c2VyTmFtZScsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMHB4J1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ03DoycsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdjb2RlJyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbixcbiAgICAgICAgICAgICAgICAgICAgZnVsbFRleHRTZWFyY2g6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTYwcHgnXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnSOG7jSB2w6AgdMOqbicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdmdWxsTmFtZU5ldycsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzE2MHB4J1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0jDsm0gdGjGsCcsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdlbWFpbCcsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgZnVsbFRleHRTZWFyY2g6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTYwcHgnXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnQ2jhu6ljIHbhu6UnLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnbHN0VGVuQ2h1Y1Z1JyxcbiAgICAgICAgICAgICAgICAgICAgLy8gY29kZTogJ21hQ2h1Y1Z1JyxcbiAgICAgICAgICAgICAgICAgICAgLy8gYmFzZVNlcnZpY2U6IHRoaXMuX2RtX0NodWNWdVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRmlsdGVyOiB0aGlzLmZpbHRlckNodWNWdVJlZixcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcxNjBweCdcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdHaeG6o25nIHZpw6puJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ2lzR2lhbmdWaWVuJyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICc5MHB4JyxcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNwbGF5OiB0aGlzLmNvbnRyb2wudXNlclR5cGUgPT09IFVzZXJUeXBlLkNhbkJvLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0NodXnDqm4gdmnDqm4nLFxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnaXNDaHV5ZW5WaWVuJyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICc5MHB4JyxcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNwbGF5OiB0aGlzLmNvbnRyb2wudXNlclR5cGUgPT09IFVzZXJUeXBlLkNhbkJvLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbWRXaWR0aDogMTJcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZmllbGRTZWFyY2hUZXh0ID0gWy4uLnRoaXMuY29udHJvbFBpY2tlci5maWVsZFNlYXJjaFRleHRdO1xuICAgICAgICAvLyBDxalcbiAgICAgICAgLy8gaWYgKCF0aGlzLmZpZWxkU2VhcmNoVGV4dC5zb21lKGl0ZW0gPT4gaXRlbSA9PSB0aGlzLmNvbnRyb2xQaWNrZXIuZGlzcGxheUZpZWxkKSkge1xuICAgICAgICAvLyAgICAgdGhpcy5maWVsZFNlYXJjaFRleHQucHVzaCh0aGlzLmNvbnRyb2xQaWNrZXIuZGlzcGxheUZpZWxkKTtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIC8vIE3hu5tpIC0gTuG6v3Uga28gY8OzIGZpZWxkU2VhcmNoVGV4dCB0aMOsIGTDuW5nIGRpc3BsYXlGaWVsZCDEkeG7gyBzZWFyY2hcbiAgICAgICAgaWYgKHRoaXMuZmllbGRTZWFyY2hUZXh0Lmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkU2VhcmNoVGV4dC5wdXNoKHRoaXMuY29udHJvbFBpY2tlci5kaXNwbGF5RmllbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g4bqobiBj4buZdCBraGkgY8OzIGdpw6EgdHLhu4sgxJHGsOG7o2MgdHJ54buBbiB2w6BvIGhpZGRlbkNvbHNcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5oaWRkZW5Db2xzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sUGlja2VyLmNvbHVtbnMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmhpZGRlbkNvbHMuaW5jbHVkZXMoaXRlbS5jb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmlzRGlzcGxheSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb250cm9sLnJldHVyblR5cGUgPT0gJ3ZhbHVlJykge1xuICAgICAgICAgICAgdGhpcy5mdW5jUmV0dXJuVmFsdWUgPSAodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKGl0ZW0gPT4gaXRlbVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZnVuY1JldHVyblZhbHVlID0gdmFsdWUgPT4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idWlsZEZpbHRlcktleXdvcmQoKTtcbiAgICAgICAgdGhpcy5idWlsZFNldHRpbmdFbnRpdHlQaWNrZXIoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVTY2hlbWFTZWFyY2goKTtcbiAgICAgICAgdGhpcy51cGRhdGVGdW5jQ2hlY2tSZWFkT25seUl0ZW0oKTtcbiAgICAgICAgdGhpcy5vblJlYWR5LmVtaXQoKTtcbiAgICAgICAgdGhpcy5vbkluaXQuZW1pdCh0aGlzKTtcbiAgICB9XG5cbiAgICB1cGRhdGVGdW5jQ2hlY2tSZWFkT25seUl0ZW0oKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5VmFsdWVzICYmIHRoaXMucmVhZE9ubHlWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmZ1bmNDaGVja1JlYWRPbmx5SXRlbSA9IHRoaXMuX2Z1bmNDaGVja1JlYWRPbmx5SXRlbTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZnVuY0NoZWNrUmVhZE9ubHlJdGVtID0gKGl0ZW06IGFueSkgPT4geyB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgY3JlYXRlU2NoZW1hU2VhcmNoKCkge1xuICAgICAgICB0aGlzLnNlYXJjaFNjaGVtYS5pZENodWNWdXMgPSBuZXcgRHJvcGRvd25Db250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgIGZpZWxkOiAnaWRDaHVjVnVzJyxcbiAgICAgICAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdDaOG7jW4gY2jhu6ljIHbhu6UnLFxuICAgICAgICAgICAgYmFzZVNlcnZpY2U6IHRoaXMuX2RtX0NodWNWdVNlcnZpY2UsXG4gICAgICAgICAgICBzb3J0RmllbGQ6ICdzb1RodVR1JyxcbiAgICAgICAgICAgIGxvYWRPbkluaXQ6IHRydWVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYnVpbGRGaWx0ZXJLZXl3b3JkKCkge1xuICAgICAgICBjb25zdCBvcGVyYXRvciA9IHRoaXMuY29udHJvbFBpY2tlci5vcGVyYXRvckZpZWxkU2VhcmNoVGV4dCA/PyBPcGVyYXRvci5jb250YWluO1xuICAgICAgICBpZiAodGhpcy5maWVsZFNlYXJjaFRleHQubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RmlsdGVyT25TZWFyY2ggPSB2YWx1ZSA9PiB0aGlzLm5ld0ZpbHRlcih0aGlzLmZpZWxkU2VhcmNoVGV4dFswXSwgb3BlcmF0b3IsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RmlsdGVyT25TZWFyY2ggPSB2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEZpbHRlcih7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2ljOiAnb3InLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGRTZWFyY2ggb2YgdGhpcy5maWVsZFNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcihmaWVsZFNlYXJjaCwgb3BlcmF0b3IsIHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYnVpbGRTZXR0aW5nRW50aXR5UGlja2VyKCkge1xuICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuY29scyA9IFtdO1xuICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIudGl0bGUgPSAnJztcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbFBpY2tlci5wYWdlU2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nUGlja2VyLnBhZ2VTZXR0aW5nLnBhZ2VTaXplID0gdGhpcy5jb250cm9sUGlja2VyLnBhZ2VTaXplO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0dGluZ1BpY2tlci5iYXNlU2VydmljZSA9IHRoaXMuY29udHJvbFBpY2tlci5iYXNlU2VydmljZTtcbiAgICAgICAgdGhpcy5zZXR0aW5nUGlja2VyLmhlaWdodFR5cGUgPSBIZWlnaHRUeXBlLmR5bmFtaWM7XG4gICAgICAgIHRoaXMuc2V0dGluZ1BpY2tlci5oaWRkZW5DaGVja2JveCA9IHRydWU7XG4gICAgICAgIHRoaXMuc2V0dGluZ1BpY2tlci5zZXR0aW5nS2V5ID0gJ3VzZXJQaWNrZXInO1xuICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuaGlkZGVuU2V0dGluZ1dvcmtmbG93ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXR0aW5nUGlja2VyLmhpZGRlblNldHRpbmdQZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXR0aW5nUGlja2VyLmZpZWxkU2VhcmNoVGV4dCA9IHRoaXMuY29udHJvbFBpY2tlci5maWVsZFNlYXJjaFRleHQ7XG4gICAgICAgIHRoaXMuY29udHJvbFBpY2tlci5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4uaXNEaXNwbGF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5kYXRhVHlwZSA9PSAnY3VzdG9tJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuY29scy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBjb2x1bW4uY29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoY29sdW1uLmxhYmVsKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYXNlU2VydmljZTogY29sdW1uLmJhc2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogY29sdW1uLnZhbHVlRmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQ6IGNvbHVtbi5kaXNwbGF5RmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZFBsdXM6IGNvbHVtbi5maWVsZFBsdXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0RmllbGQ6IGNvbHVtbi5zb3J0RmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0RGlyOiBjb2x1bW4uc29ydERpcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNHZXRMYWJlbDogY29sdW1uLmZ1bmNHZXRMYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IGNvbHVtbi5kYXRhU291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBDb2RlOiBjb2x1bW4uZ3JvdXBDb2RlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nUGlja2VyLmNvbHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGNvbHVtbi5sYWJlbCksXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWR2YW5jZURhdGFQaWNrZXIuZmllbGRzID0gdGhpcy5nZXRGaWVsZHMoKTtcbiAgICB9XG5cbiAgICAvLyBM4bqleSB1bmlvbiBj4bunYTogc2VsZWN0ZWRGaWVsZCwgZmllbGRQbHVzLCBkaXNwbGF5IGZpZWxkcyBjw7MgdHJvbmcgdGFibGUuXG4gICAgZ2V0RmllbGRzKCkge1xuICAgICAgICBjb25zdCBhcnJGaWVsZDogc3RyaW5nW10gPSBbdGhpcy5jb250cm9sUGlja2VyLmRpc3BsYXlGaWVsZCwgJ2lkJ107XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIudmFsdWVGaWVsZCAmJiB0aGlzLmNvbnRyb2xQaWNrZXIudmFsdWVGaWVsZCAhPSAnaWQnKSB7XG4gICAgICAgICAgICBhcnJGaWVsZC5wdXNoKHRoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIuZmllbGRQbHVzKSB7XG4gICAgICAgICAgICBhcnJGaWVsZC5wdXNoKC4uLnRoaXMuY29udHJvbFBpY2tlci5maWVsZFBsdXMuc3BsaXQoJywnKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcnJEaXNwbGF5RmllbGQgPSB0aGlzLmNvbnRyb2xQaWNrZXIuY29sdW1uc1xuICAgICAgICAgICAgLmZpbHRlcih4ID0+IHguaXNEaXNwbGF5ID09IHRydWUgJiYgIXgubm90SW5GaWVsZHMgJiYgeC5kYXRhVHlwZSAhPSAnY3VzdG9tJylcbiAgICAgICAgICAgIC5tYXAoeCA9PiB4LmNvZGUpO1xuXG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UuYWRkRGlzdGluY3QoYXJyRGlzcGxheUZpZWxkLCBhcnJGaWVsZCk7XG4gICAgICAgIHJldHVybiBhcnJGaWVsZC50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGdldERyb3Bkb3duT3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wZG93bk9wdGlvbnMoe1xuICAgICAgICAgICAgZGlzcGxheUZpZWxkOiB0aGlzLmNvbnRyb2xQaWNrZXIuZGlzcGxheUZpZWxkLFxuICAgICAgICAgICAgdmFsdWVGaWVsZDogdGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQsXG4gICAgICAgICAgICBmaWVsZFBsdXM6IHRoaXMuY29udHJvbFBpY2tlci5maWVsZFBsdXMsXG4gICAgICAgICAgICBmdW5jR2V0TGFiZWw6IHRoaXMuY29udHJvbFBpY2tlci5mdW5jR2V0TGFiZWwsXG4gICAgICAgICAgICBwbHVzVXJsOiB0aGlzLmNvbnRyb2xQaWNrZXIucGx1c1VybFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBzaG93UGlja0Zvcm0oKSB7XG4gICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93Rm9ybVBpY2tlciA9IHRydWU7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0RGF0YShrZXlXb3JkKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbFBpY2tlci5tdWx0aXBsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkLCBPcGVyYXRvci5ub3RJbiwgdGhpcy52YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQsIE9wZXJhdG9yLm5vdEVxdWFsLCB0aGlzLnZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBhcHBlbmREZWZhdWx0RmlsdGVyKGZpbHRlcnMsIHRoaXMuY29udHJvbC5kZWZhdWx0RmlsdGVycyk7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZm9ybVN0YXRlID09IEZvcm1TdGF0ZS5BREQpIHtcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcignbG9ja291dEVuYWJsZWQnLCBPcGVyYXRvci5lcXVhbCwgZmFsc2UpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5V29yZCAmJiBrZXlXb3JkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLmdldEZpbHRlck9uU2VhcmNoKGtleVdvcmQpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5jb250cm9sUGlja2VyLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxuICAgICAgICAgICAgZmlsdGVycywgdGhpcy5nZXREcm9wZG93bk9wdGlvbnMoKVxuICAgICAgICApO1xuICAgICAgICBhd2FpdCB0aGlzLnJlU3RydWN0dXJlRGF0YVNvdXJjZShkYXRhU291cmNlKTtcbiAgICAgICAgdGhpcy5yZXN1bHRzID0gdGhpcy5kYXRhU291cmNlO1xuICAgICAgICAvLyBSZXR1cm4gxJHhu4MgbeG7mXQgc+G7kSBuxqFpIGtow6FjIGTDuW5nLCBrIHJlbW92ZVxuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRzO1xuICAgIH1cblxuICAgIHNlYXJjaChldmVudCkge1xuICAgICAgICB0aGlzLmdldERhdGEoZXZlbnQucXVlcnkpO1xuICAgIH1cblxuICAgIGNsZWFyVmFsdWUoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKCk7XG4gICAgICAgIHRoaXMuaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vblVuU2VsZWN0LmVtaXQoe1xuICAgICAgICAgICAgaXRlbTogdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0LFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0ZWRWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlRXZlbnQoKTtcbiAgICB9XG5cbiAgICBoYW5kbGVSb3dTZWxlY3QoaXRlbSkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGVkUm93RGF0YSA9IGl0ZW07XG4gICAgfVxuXG4gICAgLy8gU2VsZWN0IGl0ZW0gY+G7p2EgYXV0b2NvbXBsZXRlXG4gICAgaGFuZGxlU2VsZWN0KGl0ZW0pIHtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKCk7XG4gICAgICAgIGNvbnN0IGV2dCA9IHtcbiAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zZWxlY3RlZFZhbHVlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub25TZWxlY3QuZW1pdChldnQpO1xuICAgICAgICB0aGlzLmZpcmVDaGFuZ2VFdmVudCgpO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sUGlja2VyLmNhbGxCYWNrICYmIHRoaXMuY29udHJvbFBpY2tlci5jYWxsQmFjay5zZWxlY3QpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbFBpY2tlci5jYWxsQmFjay5zZWxlY3QoaXRlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBC4buPIHNlbGVjdCBpdGVtIGPhu6dhIGF1dG9jb21wbGV0ZVxuICAgIGhhbmRsZVVuU2VsZWN0KCRldmVudCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcbiAgICAgICAgY29uc3QgZXZ0ID0ge1xuICAgICAgICAgICAgaXRlbTogJGV2ZW50LFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0ZWRWYWx1ZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uVW5TZWxlY3QuZW1pdChldnQpO1xuICAgICAgICB0aGlzLmZpcmVDaGFuZ2VFdmVudCgpO1xuICAgIH1cblxuICAgIGhhbmRsZUZvY3VzKGV2dCkge1xuICAgICAgICBpZiAoZXZ0LnRhcmdldC52YWx1ZSkge1xuICAgICAgICAgICAgZXZ0LnRhcmdldC5zZWxlY3QoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uRm9jdXMuZW1pdChldnQpO1xuICAgIH1cblxuICAgIGhhbmRsZUJsdXIoJGV2ZW50KSB7XG4gICAgICAgIHRoaXMub25CbHVyLmVtaXQoKTtcbiAgICB9XG5cbiAgICBoYW5kbGVLZXlVcChldnQpIHtcbiAgICAgICAgLy8gbGV0IGhpZGVTdWdnZXNzaW9ucyA9IGZhbHNlO1xuICAgICAgICAvLyBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgIC8vICAgICBoaWRlU3VnZ2Vzc2lvbnMgPSBldnQudGFyZ2V0LnBhcmVudE5vZGUucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkRWxlbWVudENvdW50ID09IDE7XG4gICAgICAgIC8vICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdC5sZW5ndGggPiAwXG4gICAgICAgIC8vICAgICAgICAgJiYgZXZ0LmtleUNvZGUgPT0gNDAgJiYgaGlkZVN1Z2dlc3Npb25zKSB7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gZWxzZSB7XG4gICAgICAgIC8vICAgICBoaWRlU3VnZ2Vzc2lvbnMgPSBldnQudGFyZ2V0LnBhcmVudE5vZGUuY2hpbGRFbGVtZW50Q291bnQgPT0gMTtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIC8vIGlmIChldnQudGFyZ2V0LnZhbHVlID09ICcnICYmIGhpZGVTdWdnZXNzaW9ucyAmJiBldnQua2V5Q29kZSAhPSA0MCAmJiBldnQua2V5Q29kZSAhPSAzOCkge1xuICAgICAgICAvLyAgICAgdGhpcy5yZXN1bHRzID0gW107XG4gICAgICAgIC8vIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgc2VsZWN0IGl0ZW0gdHJvbmcgZW50aXR5IHBpY2tlciBib3ggKEtow7RuZyBj4bqnbiBlbWl0IGNoYW5nZSlcbiAgICBoYW5kbGVTZWxlY3RFbnRpdHkoZXZ0KSB7XG4gICAgICAgIHRoaXMub25TZWxlY3QuZW1pdChldnQpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSB1bnNlbGVjdCBpdGVtIHRyb25nIGVudGl0eSBwaWNrZXIgYm94IChLaMO0bmcgY+G6p24gZW1pdCBjaGFuZ2UpXG4gICAgaGFuZGxlVW5TZWxlY3RFbnRpdHkoZXZ0KSB7XG4gICAgICAgIHRoaXMub25VblNlbGVjdC5lbWl0KGV2dCk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGNoYW5nZSBpdGVtIHRyb25nIGVudGl0eSBwaWNrZXIgYm94XG4gICAgaGFuZGxlQ2hhbmdlRW50aXR5KGV2dCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBldnQudmFsdWU7XG4gICAgICAgIHRoaXMudXBkYXRlUHVyZVZhbHVlKCk7XG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xuICAgICAgICB0aGlzLmZpcmVDaGFuZ2VFdmVudCgpO1xuICAgIH1cblxuICAgIF9mdW5jQ2hlY2tSZWFkT25seUl0ZW0oaXRlbTogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5VmFsdWVzLnNvbWUocSA9PiBxID09IGl0ZW0udmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKSkge1xuICAgICAgICAgICAgaXRlbS5fZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlUmVhZE9ubHlJdGVtKCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mdW5jQ2hlY2tSZWFkT25seUl0ZW0oaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVNlbGVjdGVkVmFsdWUoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkVmFsdWUucHVzaChpdGVtLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZ1bmNDaGVja1JlYWRPbmx5SXRlbShpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gc2VsZWN0ZWRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVQdXJlVmFsdWUoKTtcbiAgICB9XG5cbiAgICB1cGRhdGVQdXJlVmFsdWUoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWUubWFwKGl0ZW0gPT4gaXRlbVt0aGlzLmNvbnRyb2xQaWNrZXIudmFsdWVGaWVsZF0pO1xuICAgICAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZS5sZW5ndGggPiAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZVt0aGlzLmNvbnRyb2xQaWNrZXIudmFsdWVGaWVsZF07XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRWYWx1ZVJldHVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnVuY1JldHVyblZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG4gICAgfVxuXG4gICAgZmlyZUNoYW5nZUV2ZW50KCkge1xuICAgICAgICBjb25zdCB2YWx1ZVJldHVybiA9IHRoaXMuZ2V0VmFsdWVSZXR1cm4oKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUJhc2UodmFsdWVSZXR1cm4pO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlZC5lbWl0KHtcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVJldHVyblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBoYW5kbGVIaWRlKGV2dCkge1xuICAgICAgICB0aGlzLnNob3dGb3JtUGlja2VyID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmRpcnR5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sUGlja2VyLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZSA9IGF3YWl0IHRoaXMuY29udHJvbFBpY2tlci5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2xQaWNrZXIudmFsdWVGaWVsZCwgT3BlcmF0b3IuaW4sIHRoaXMudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBdLCB0aGlzLmdldERyb3Bkb3duT3B0aW9ucygpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZVN0cnVjdHVyZURhdGFTb3VyY2UoZGF0YVNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IHRoaXMuZGF0YVNvdXJjZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UgPSBhd2FpdCB0aGlzLmNvbnRyb2xQaWNrZXIuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgXSwgdGhpcy5nZXREcm9wZG93bk9wdGlvbnMoKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlU3RydWN0dXJlRGF0YVNvdXJjZShkYXRhU291cmNlKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhU291cmNlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gdGhpcy5kYXRhU291cmNlWzBdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QubGFiZWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DbGlja1N1Ym1pdEJ1dHRvbihldnQsIHVzZXJQaWNrZXJCb3g6IFVzZXJQaWNrZXJCb3hDb21wb25lbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVIaWRlKGV2dCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5zZWxlY3RlZFJvd0RhdGEpIHtcbiAgICAgICAgICAgIGlmICh1c2VyUGlja2VyQm94ICYmIHVzZXJQaWNrZXJCb3guZW50aXR5UGlja2VyQm94KSB7XG4gICAgICAgICAgICAgICAgdXNlclBpY2tlckJveC5lbnRpdHlQaWNrZXJCb3guaGFuZGxlUGljayh0aGlzLnNlbGVjdGVkUm93RGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dGb3JtUGlja2VyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJlU3RydWN0dXJlRGF0YVNvdXJjZShzb3VyY2VzOiBhbnlbXSkge1xuICAgICAgICBpZiAoc291cmNlcyAhPSBudWxsICYmIHNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gTOG6pXkgdGjDqm0gdGjDtG5nIHRpbiBjaOG7qWMgduG7pSDEkeG7gyBoaeG7g24gdGjhu4tcbiAgICAgICAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBzb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgaXRlbSA9IHRoaXMucmVTdHJ1Y3R1cmVJdGVtT2JqZWN0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbFBpY2tlci5tb2RpZnlEYXRhU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNvbnRyb2xQaWNrZXIubW9kaWZ5RGF0YVNlbGVjdGVkKGFycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBhcnI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlU3RydWN0dXJlSXRlbU9iamVjdChpdGVtKTogU2VsZWN0SXRlbSB7XG4gICAgICAgIGNvbnN0IHRlbXA6IFNlbGVjdEl0ZW0gPSB7IHZhbHVlOiBpdGVtIH07XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKSB7XG4gICAgICAgICAgICB0ZW1wLmxhYmVsID0gdGhpcy5jb250cm9sUGlja2VyLmZ1bmNHZXRMYWJlbChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZCAhPT0gJ2Z1bGxOYW1lTmV3Jykge1xuICAgICAgICAgICAgdGVtcC5sYWJlbCA9IGl0ZW1bdGhpcy5jb250cm9sUGlja2VyLmRpc3BsYXlGaWVsZF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBjb25zdCB0ZW5Eb25WaSA9IGl0ZW0ubHN0VGVuRG9uVmkgJiYgaXRlbS5sc3RUZW5Eb25WaS5sZW5ndGggPiAwID8gaXRlbS5sc3RUZW5Eb25WaS5zcGxpdCgnLCcpWzBdIDogJyc7XG4gICAgICAgICAgICB0ZW1wLmxhYmVsID0gKGl0ZW0ubWFDaHVjVnUgPyBgJHtpdGVtLm1hQ2h1Y1Z1fS4gYCA6ICcnKSArIGAke3RlbXAubGFiZWwgfHwgdGhpcy5nZXREaXNwbGF5TmFtZShpdGVtKX1gICsgKGl0ZW0udGVuRG9uVmkgPyBgIC0gJHtpdGVtLnRlbkRvblZpfWAgOiAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGVtcC52YWx1ZS5fZHJvcGRvd252YWx1ZSA9IHRoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkO1xuICAgICAgICByZXR1cm4gdGVtcDtcbiAgICB9XG5cbiAgICBnZXREaXNwbGF5TmFtZShpdGVtKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uZGlzcGxheU5hbWUgPyBpdGVtLmRpc3BsYXlOYW1lIDogaXRlbS5mdWxsTmFtZU5ldztcbiAgICB9XG5cbiAgICBhc3luYyB3cml0ZVZhbHVlKG9iajogYW55KSB7XG4gICAgICAgIHRoaXMuaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbFBpY2tlci5tdWx0aXBsZSkge1xuICAgICAgICAgICAgaWYgKG9iaiAhPSBudWxsICYmIG9iai5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyczogRmlsdGVyW10gPSBbXTtcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQsIE9wZXJhdG9yLmluLCBvYmopKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBhcHBlbmREZWZhdWx0RmlsdGVyKGZpbHRlcnMsIHRoaXMuY29udHJvbC5kZWZhdWx0RmlsdGVycyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xQaWNrZXIuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RHJvcGRvd25PcHRpb25zKClcbiAgICAgICAgICAgICAgICApLnRoZW4oYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZVN0cnVjdHVyZURhdGFTb3VyY2UocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gdGhpcy5kYXRhU291cmNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSB0aGlzLmRhdGFTb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25BZGp1c3RlZFZhbHVlLmVtaXQodGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQWRqdXN0ZWRWYWx1ZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAob2JqICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSAhaXNMaXRlcmFsT2JqZWN0KG9iaikgPyBvYmogOiBvYmpbdGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGRdO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbFBpY2tlci5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgW3RoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkLCBPcGVyYXRvci5lcXVhbCwgdmFsdWUpXSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXREcm9wZG93bk9wdGlvbnMoKVxuICAgICAgICAgICAgICAgICkudGhlbihhc3luYyByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVTdHJ1Y3R1cmVEYXRhU291cmNlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSB0aGlzLmRhdGFTb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSB0aGlzLmRhdGFTb3VyY2VbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQWRqdXN0ZWRWYWx1ZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdC5sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIuY2FsbEJhY2sgJiYgdGhpcy5jb250cm9sUGlja2VyLmNhbGxCYWNrLnNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbFBpY2tlci5jYWxsQmFjay5zZWxlY3QodGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQWRqdXN0ZWRWYWx1ZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUJhc2UgPSBmbjtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxufVxuIl19
@@ -25947,8 +25947,8 @@ class AutocompleteDatasourceComponent {
25947
25947
  }
25948
25948
  }
25949
25949
  handleKeyUp(evt) {
25950
- if (evt.target.value == '' && evt.target.parentNode.childElementCount == 2 && evt.keyCode != 40 && evt.keyCode != 38)
25951
- this.lstDataSuggest = [];
25950
+ // if (evt.target.value == '' && evt.target.parentNode.childElementCount == 2 && evt.keyCode != 40 && evt.keyCode != 38)
25951
+ // this.lstDataSuggest = [];
25952
25952
  }
25953
25953
  writeValue(obj) {
25954
25954
  this.selectedValue = obj;
@@ -38927,6 +38927,10 @@ class EntityPickerDataComponent extends DataListBase {
38927
38927
  data.forEach(item => {
38928
38928
  item._dropdownvalue = this.control.valueField;
38929
38929
  });
38930
+ if (this.control.beforeRenderDataSourceUnPicked) {
38931
+ yield this.control.beforeRenderDataSourceUnPicked(data, this);
38932
+ }
38933
+ return data;
38930
38934
  });
38931
38935
  }
38932
38936
  afterGetData() {
@@ -38967,7 +38971,7 @@ class EntityPickerDataComponent extends DataListBase {
38967
38971
  EntityPickerDataComponent.decorators = [
38968
38972
  { type: Component, args: [{
38969
38973
  selector: 'app-entity-picker-data',
38970
- template: "<crud-list #crudList [menuButtons]=\"getMenuButtons\" [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\"\n [showScrollHorizontal]=\"true\" (onContentInit)=\"onContentInit.emit($event)\" (onReload)=\"_triggerProcessData($event)\"\n (onAdd)=\"_add($event)\" (onRowSelect)=\"handleRowSelect($event)\" (onEdit)=\"_edit($event)\" (onView)=\"_view($event)\"\n (onDelete)=\"_delete($event)\" (onDeleteMultiple)=\"_deleteMultiple($event)\" (onReloaded)=\"_unmarkLoading()\">\n <ng-template #customTitle>\n <h1 [innerHTML]=\"dom.bypassSecurityTrustHtml(control.titleUnPicked)\"></h1>\n </ng-template>\n <ng-template #toolbar let-crudList=\"crudList\" let-selectedItems=\"selectedItems\">\n <button *ngIf=\"!model.dataSource.length && setting.hiddenAdvanceSearch\" pButton\n style=\"visibility: hidden\"></button>\n <button *ngIf=\"!isSingleSelection && model.total > 0\" type=\"button\" pButton pRipple\n label=\"L\u1EA5y t\u1EA5t c\u1EA3 ({{model.total}})\" icon=\"pi pi-angle-double-right\" class=\"p-button-text p-button-success\"\n [disabled]=\"model.loading\" (click)=\"pickAll()\"></button>\n <button *ngIf=\"!isSingleSelection && selectedItems.length > 0\" type=\"button\" pButton pRipple\n label=\"L\u1EA5y m\u1EE5c \u0111\u00E3 ch\u1ECDn ({{selectedItems.length}})\" icon=\"pi pi-angle-right\"\n class=\"p-button-text p-button-success\" [disabled]=\"model.loading\"\n (click)=\"pickSelected(selectedItems)\"></button>\n <button *ngIf=\"datasourceFieldFilter.length\" type=\"button\" pButton pRipple label=\"T\u00ECm ki\u1EBFm nhi\u1EC1u ng\u01B0\u1EDDi d\u00F9ng\"\n icon=\"pi pi-search\" class=\"p-button-text p-button-primary\" [disabled]=\"model.loading\"\n (click)=\"handleAdvansearch()\"></button>\n <button *ngIf=\"datasourceFieldFilter.length && searchData\" type=\"button\" pButton pRipple\n label=\"X\u00F3a danh s\u00E1ch t\u00ECm ki\u1EBFm\" pTooltip=\"X\u00F3a t\u1EA5t c\u1EA3 ng\u01B0\u1EDDi d\u00F9ng \u1EDF Danh s\u00E1ch t\u00ECm ki\u1EBFm\" icon=\"pi pi-times\"\n class=\"p-button-text p-button-primary\" [disabled]=\"model.loading\" (click)=\"handleSearch(null)\"></button>\n </ng-template>\n <ng-template let-crudList=\"crudList\" #function let-rowData=\"rowData\">\n <button pButton type=\"button\" class=\"link-or-action p-button-success p-button-text p-button-rounded\"\n icon=\"pi pi-check\" pTooltip=\"Ch\u1ECDn m\u1EE5c n\u00E0y\" tooltipPosition=\"top\" [disabled]=\"rowData.disabled\"\n (click)=\"pickEntity(rowData)\"></button>\n </ng-template>\n</crud-list>\n\n\n<tn-dialog *ngIf=\"showFormAdvancedSearch\" #dialog [styleClass]=\"'address-form'\" [header]=\"'T\u00ECm ki\u1EBFm nhi\u1EC1u ng\u01B0\u1EDDi d\u00F9ng'\"\n [popupSize]=\"popupSizeSearchForm\" [maskClass]=\"setting.maskClass\" (onHide)=\"showFormAdvancedSearch = false\">\n <entity-picker-search-form #formBase [parentModel]=\"model\" [parentContext]=\"context\" [parentSetting]=\"setting\"\n [datasourceFieldFilter]=\"datasourceFieldFilter\" [lstDataNotExist]=\"lstDataNotExist\" [model]=\"formModel\"\n (onSearch)=\"handleSearch($event)\" (onCancel)=\"showFormAdvancedSearch = false;\">\n </entity-picker-search-form>\n</tn-dialog>",
38974
+ template: "<crud-list #crudList [templates]=\"templates\" [menuButtons]=\"getMenuButtons\" [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\"\n [showScrollHorizontal]=\"true\" (onContentInit)=\"onContentInit.emit($event)\" (onReload)=\"_triggerProcessData($event)\"\n (onAdd)=\"_add($event)\" (onRowSelect)=\"handleRowSelect($event)\" (onEdit)=\"_edit($event)\" (onView)=\"_view($event)\"\n (onDelete)=\"_delete($event)\" (onDeleteMultiple)=\"_deleteMultiple($event)\" (onReloaded)=\"_unmarkLoading()\">\n <ng-template #customTitle>\n <h1 [innerHTML]=\"dom.bypassSecurityTrustHtml(control.titleUnPicked)\"></h1>\n </ng-template>\n <ng-template #toolbar let-crudList=\"crudList\" let-selectedItems=\"selectedItems\">\n <button *ngIf=\"(isSingleSelection || model.total <= 0) && !model.dataSource.length && setting.hiddenAdvanceSearch\" pButton\n style=\"visibility: hidden\"></button>\n <button *ngIf=\"!isSingleSelection && model.total > 0\" type=\"button\" pButton pRipple\n label=\"L\u1EA5y t\u1EA5t c\u1EA3 ({{model.total}})\" icon=\"pi pi-angle-double-right\" class=\"p-button-text p-button-success\"\n [disabled]=\"model.loading\" (click)=\"pickAll()\"></button>\n <button *ngIf=\"!isSingleSelection && selectedItems.length > 0\" type=\"button\" pButton pRipple\n label=\"L\u1EA5y m\u1EE5c \u0111\u00E3 ch\u1ECDn ({{selectedItems.length}})\" icon=\"pi pi-angle-right\"\n class=\"p-button-text p-button-success\" [disabled]=\"model.loading\"\n (click)=\"pickSelected(selectedItems)\"></button>\n <button *ngIf=\"datasourceFieldFilter.length\" type=\"button\" pButton pRipple label=\"T\u00ECm ki\u1EBFm nhi\u1EC1u ng\u01B0\u1EDDi d\u00F9ng\"\n icon=\"pi pi-search\" class=\"p-button-text p-button-primary\" [disabled]=\"model.loading\"\n (click)=\"handleAdvansearch()\"></button>\n <button *ngIf=\"datasourceFieldFilter.length && searchData\" type=\"button\" pButton pRipple\n label=\"X\u00F3a danh s\u00E1ch t\u00ECm ki\u1EBFm\" pTooltip=\"X\u00F3a t\u1EA5t c\u1EA3 ng\u01B0\u1EDDi d\u00F9ng \u1EDF Danh s\u00E1ch t\u00ECm ki\u1EBFm\" icon=\"pi pi-times\"\n class=\"p-button-text p-button-primary\" [disabled]=\"model.loading\" (click)=\"handleSearch(null)\"></button>\n </ng-template>\n <ng-template let-crudList=\"crudList\" #function let-rowData=\"rowData\">\n <button pButton type=\"button\" class=\"link-or-action p-button-success p-button-text p-button-rounded\"\n icon=\"pi pi-check\" pTooltip=\"Ch\u1ECDn m\u1EE5c n\u00E0y\" tooltipPosition=\"top\" [disabled]=\"rowData.disabled\"\n (click)=\"pickEntity(rowData)\"></button>\n </ng-template>\n</crud-list>\n\n\n<tn-dialog *ngIf=\"showFormAdvancedSearch\" #dialog [styleClass]=\"'address-form'\" [header]=\"'T\u00ECm ki\u1EBFm nhi\u1EC1u ng\u01B0\u1EDDi d\u00F9ng'\"\n [popupSize]=\"popupSizeSearchForm\" [maskClass]=\"setting.maskClass\" (onHide)=\"showFormAdvancedSearch = false\">\n <entity-picker-search-form #formBase [parentModel]=\"model\" [parentContext]=\"context\" [parentSetting]=\"setting\"\n [datasourceFieldFilter]=\"datasourceFieldFilter\" [lstDataNotExist]=\"lstDataNotExist\" [model]=\"formModel\"\n (onSearch)=\"handleSearch($event)\" (onCancel)=\"showFormAdvancedSearch = false;\">\n </entity-picker-search-form>\n</tn-dialog>",
38971
38975
  providers: [ComponentContextService],
38972
38976
  styles: ["::ng-deep app-entity-picker-data .custom-card{padding:.5em!important}"]
38973
38977
  },] }
@@ -38978,6 +38982,7 @@ EntityPickerDataComponent.ctorParameters = () => [
38978
38982
  { type: DomSanitizer }
38979
38983
  ];
38980
38984
  EntityPickerDataComponent.propDecorators = {
38985
+ templates: [{ type: Input }],
38981
38986
  parentSetting: [{ type: Input }],
38982
38987
  advanceData: [{ type: Input }],
38983
38988
  control: [{ type: Input }],
@@ -39153,6 +39158,10 @@ class EntityPickerSelectedComponent extends DataListBase {
39153
39158
  this.itemCanDeletes.push(item);
39154
39159
  }
39155
39160
  });
39161
+ if (this.control.beforeRenderDataSourcePicked) {
39162
+ yield this.control.beforeRenderDataSourcePicked(data, this);
39163
+ }
39164
+ return data;
39156
39165
  });
39157
39166
  }
39158
39167
  afterGetData() {
@@ -39186,7 +39195,7 @@ EntityPickerSelectedComponent.decorators = [
39186
39195
  { type: Component, args: [{
39187
39196
  // tslint:disable-next-line: component-selector
39188
39197
  selector: 'app-entity-picker-selected',
39189
- template: "<crud-list #crudList [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [showScrollHorizontal]=\"true\"\n (onContentInit)=\"onContentInit.emit($event)\" (onReload)=\"_triggerProcessData($event)\" (onAdd)=\"_add($event)\"\n (onEdit)=\"_edit($event)\" (onView)=\"_view($event)\" (onDelete)=\"_delete($event)\"\n (onDeleteMultiple)=\"_deleteMultiple($event)\" (onReloaded)=\"_unmarkLoading()\">\n <ng-template #customTitle>\n <h1 [innerHTML]=\"dom.bypassSecurityTrustHtml(control.titlePicked)\"></h1>\n </ng-template>\n <ng-template #toolbar let-crudList=\"crudList\" let-selectedItems=\"selectedItems\">\n <button *ngIf=\"!model.dataSource.length && setting.hiddenAdvanceSearch\" pButton\n style=\"visibility: hidden\"></button>\n <button *ngIf=\"itemCanDeletes.length\" type=\"button\" pButton pRipple\n label=\"B\u1ECF t\u1EA5t c\u1EA3 ({{_selectedValue.length}})\" icon=\"pi pi-angle-double-left\"\n class=\"p-button-text p-button-danger\" [disabled]=\"model.loading\" (click)=\"unPickAll()\"></button>\n <button *ngIf=\"selectedItems.length > 0\" type=\"button\" pButton pRipple\n label=\"B\u1ECF m\u1EE5c \u0111\u00E3 ch\u1ECDn ({{selectedItems.length}})\" icon=\"pi pi-angle-left\"\n class=\"p-button-text p-button-danger\" [disabled]=\"model.loading\"\n (click)=\"unPickSelected(selectedItems)\"></button>\n </ng-template>\n\n <ng-template let-crudList=\"crudList\" #function let-rowData=\"rowData\">\n <button *ngIf=\"!rowData.hiddenDelete\" pButton type=\"button\"\n class=\"link-or-action p-button-danger p-button-text p-button-rounded\" icon=\"pi pi-times\"\n pTooltip=\"B\u1ECF ch\u1ECDn m\u1EE5c n\u00E0y\" tooltipPosition=\"top\" (click)=\"unPickEntity(rowData)\"></button>\n </ng-template>\n\n</crud-list>",
39198
+ template: "<crud-list #crudList [templates]=\"templates\" [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\" [showScrollHorizontal]=\"true\"\n (onContentInit)=\"onContentInit.emit($event)\" (onReload)=\"_triggerProcessData($event)\" (onAdd)=\"_add($event)\"\n (onEdit)=\"_edit($event)\" (onView)=\"_view($event)\" (onDelete)=\"_delete($event)\"\n (onDeleteMultiple)=\"_deleteMultiple($event)\" (onReloaded)=\"_unmarkLoading()\">\n <ng-template #customTitle>\n <h1 [innerHTML]=\"dom.bypassSecurityTrustHtml(control.titlePicked)\"></h1>\n </ng-template>\n <ng-template #toolbar let-crudList=\"crudList\" let-selectedItems=\"selectedItems\">\n <button *ngIf=\"!itemCanDeletes.length && !model.dataSource.length && setting.hiddenAdvanceSearch\" pButton\n style=\"visibility: hidden\"></button>\n <button *ngIf=\"itemCanDeletes.length\" type=\"button\" pButton pRipple\n label=\"B\u1ECF t\u1EA5t c\u1EA3 ({{_selectedValue.length}})\" icon=\"pi pi-angle-double-left\"\n class=\"p-button-text p-button-danger\" [disabled]=\"model.loading\" (click)=\"unPickAll()\"></button>\n <button *ngIf=\"selectedItems.length > 0\" type=\"button\" pButton pRipple\n label=\"B\u1ECF m\u1EE5c \u0111\u00E3 ch\u1ECDn ({{selectedItems.length}})\" icon=\"pi pi-angle-left\"\n class=\"p-button-text p-button-danger\" [disabled]=\"model.loading\"\n (click)=\"unPickSelected(selectedItems)\"></button>\n </ng-template>\n\n <ng-template let-crudList=\"crudList\" #function let-rowData=\"rowData\">\n <button *ngIf=\"!rowData.hiddenDelete\" pButton type=\"button\"\n class=\"link-or-action p-button-danger p-button-text p-button-rounded\" icon=\"pi pi-times\"\n pTooltip=\"B\u1ECF ch\u1ECDn m\u1EE5c n\u00E0y\" tooltipPosition=\"top\" (click)=\"unPickEntity(rowData)\"></button>\n </ng-template>\n\n</crud-list>",
39190
39199
  providers: [ComponentContextService],
39191
39200
  styles: ["::ng-deep app-entity-picker-selected .custom-card{padding:.5em .5em 0!important}"]
39192
39201
  },] }
@@ -39196,6 +39205,7 @@ EntityPickerSelectedComponent.ctorParameters = () => [
39196
39205
  { type: DomSanitizer }
39197
39206
  ];
39198
39207
  EntityPickerSelectedComponent.propDecorators = {
39208
+ templates: [{ type: Input }],
39199
39209
  parentSetting: [{ type: Input }],
39200
39210
  advanceData: [{ type: Input }],
39201
39211
  control: [{ type: Input }],
@@ -39325,7 +39335,7 @@ class EntityPickerBoxComponent extends ComponentBase {
39325
39335
  EntityPickerBoxComponent.decorators = [
39326
39336
  { type: Component, args: [{
39327
39337
  selector: 'entity-picker-box',
39328
- template: "<div #el class=\"entityPicker tn-l-entity-picker-box\">\n <div #scrollContainer class=\"p-grid tn-l-entity-picker-box-inner\"\n (scroll)=\"handleScrollContainer($event, el, scrollContainer)\">\n <div class=\"p-col-12\" [ngClass]=\"control.multiple ? 'p-md-6 picker-left' : ''\">\n <app-entity-picker-data *ngIf=\"!control.isTree\" [currentNode]=\"currentNode\" [control]=\"control\" [datasourceFieldFilter]=\"datasourceFieldFilter\"\n [parentSetting]=\"parentSetting\" [advanceData]=\"advanceData\" [selectedValue]=\"selectedValue\"\n [isSingleSelection]=\"!control.multiple\" (onContentInit)=\"onContentLeftInit.emit($event)\"\n (onPick)=\"handlePick($event)\" (onPickSelected)=\"selectEntity($event)\" (onPickAll)=\"selectEntity($event)\"\n (onRowSelect)=\"handleRowSelect($event)\">\n </app-entity-picker-data>\n\n <app-entity-picker-tree-data *ngIf=\"control.isTree\" [currentNode]=\"currentNode\" [control]=\"control\"\n [parentSetting]=\"parentSetting\" [advanceData]=\"advanceData\" [selectedValue]=\"selectedValue\"\n [isSingleSelection]=\"!control.multiple\" (onContentInit)=\"onContentLeftInit.emit($event)\"\n (onPick)=\"handlePick($event)\" (onPickSelected)=\"selectEntity($event)\" (onPickAll)=\"selectEntity($event)\"\n (onRowSelect)=\"handleRowSelect($event)\">\n </app-entity-picker-tree-data>\n </div>\n <div *ngIf=\"control.multiple\" class=\"p-col-12 p-md-6\">\n <app-entity-picker-selected *ngIf=\"!control.isTree\" [control]=\"control\" [parentSetting]=\"parentSetting\"\n [advanceData]=\"advanceData\" [readOnlyValues]=\"readOnlyValues\" [selectedValue]=\"selectedValue\"\n (onContentInit)=\"onContentRightInit.emit($event)\" (onUnPick)=\"handleUnPick($event)\"\n (onUnPickSelected)=\"unSelectEntity($event)\" (onUnPickAll)=\"unSelectEntity($event)\">\n </app-entity-picker-selected>\n\n <app-entity-picker-tree-selected *ngIf=\"control.isTree\" [control]=\"control\" [parentSetting]=\"parentSetting\"\n [advanceData]=\"advanceData\" [readOnlyValues]=\"readOnlyValues\" [selectedValue]=\"selectedValue\"\n (onContentInit)=\"onContentRightInit.emit($event)\" (onUnPick)=\"handleUnPick($event)\"\n (onUnPickSelected)=\"unSelectEntity($event)\" (onUnPickAll)=\"unSelectEntity($event)\">\n </app-entity-picker-tree-selected>\n </div>\n </div>\n\n <ng-container *ngIf=\"isOnMobile && control.multiple\">\n <div class=\"tn-animated-left-arrow-icon\"></div>\n <div class=\"tn-animated-right-arrow-icon\"></div>\n\n <after-view-checked (loaded)=\"toggleArrowIcon(el, scrollContainer)\"></after-view-checked>\n </ng-container>\n</div>",
39338
+ template: "<div #el class=\"entityPicker tn-l-entity-picker-box\">\n <div #scrollContainer class=\"p-grid tn-l-entity-picker-box-inner\"\n (scroll)=\"handleScrollContainer($event, el, scrollContainer)\">\n <div class=\"p-col-12\" [ngClass]=\"control.multiple ? 'p-md-6 picker-left' : ''\">\n <app-entity-picker-data *ngIf=\"!control.isTree\" [currentNode]=\"currentNode\" [control]=\"control\" [datasourceFieldFilter]=\"datasourceFieldFilter\"\n [parentSetting]=\"parentSetting\" [advanceData]=\"advanceData\" [selectedValue]=\"selectedValue\" [templates]=\"templates\"\n [isSingleSelection]=\"!control.multiple\" (onContentInit)=\"onContentLeftInit.emit($event)\"\n (onPick)=\"handlePick($event)\" (onPickSelected)=\"selectEntity($event)\" (onPickAll)=\"selectEntity($event)\"\n (onRowSelect)=\"handleRowSelect($event)\">\n </app-entity-picker-data>\n\n <app-entity-picker-tree-data *ngIf=\"control.isTree\" [currentNode]=\"currentNode\" [control]=\"control\"\n [parentSetting]=\"parentSetting\" [advanceData]=\"advanceData\" [selectedValue]=\"selectedValue\"\n [isSingleSelection]=\"!control.multiple\" (onContentInit)=\"onContentLeftInit.emit($event)\"\n (onPick)=\"handlePick($event)\" (onPickSelected)=\"selectEntity($event)\" (onPickAll)=\"selectEntity($event)\"\n (onRowSelect)=\"handleRowSelect($event)\">\n </app-entity-picker-tree-data>\n </div>\n <div *ngIf=\"control.multiple\" class=\"p-col-12 p-md-6\">\n <app-entity-picker-selected *ngIf=\"!control.isTree\" [control]=\"control\" [parentSetting]=\"parentSetting\"\n [advanceData]=\"advanceData\" [readOnlyValues]=\"readOnlyValues\" [selectedValue]=\"selectedValue\" [templates]=\"templates\"\n (onContentInit)=\"onContentRightInit.emit($event)\" (onUnPick)=\"handleUnPick($event)\"\n (onUnPickSelected)=\"unSelectEntity($event)\" (onUnPickAll)=\"unSelectEntity($event)\">\n </app-entity-picker-selected>\n\n <app-entity-picker-tree-selected *ngIf=\"control.isTree\" [control]=\"control\" [parentSetting]=\"parentSetting\"\n [advanceData]=\"advanceData\" [readOnlyValues]=\"readOnlyValues\" [selectedValue]=\"selectedValue\"\n (onContentInit)=\"onContentRightInit.emit($event)\" (onUnPick)=\"handleUnPick($event)\"\n (onUnPickSelected)=\"unSelectEntity($event)\" (onUnPickAll)=\"unSelectEntity($event)\">\n </app-entity-picker-tree-selected>\n </div>\n </div>\n\n <ng-container *ngIf=\"isOnMobile && control.multiple\">\n <div class=\"tn-animated-left-arrow-icon\"></div>\n <div class=\"tn-animated-right-arrow-icon\"></div>\n\n <after-view-checked (loaded)=\"toggleArrowIcon(el, scrollContainer)\"></after-view-checked>\n </ng-container>\n</div>",
39329
39339
  providers: [ComponentContextService],
39330
39340
  styles: ["::ng-deep entity-picker-box .picker-left{border-right:1px solid #dee2e6}::ng-deep entity-picker-box .tn-l-entity-picker-box{position:relative}::ng-deep entity-picker-box .tn-animated-left-arrow-icon,::ng-deep entity-picker-box .tn-animated-right-arrow-icon{position:absolute;z-index:10;pointer-events:none;top:50%;margin-top:-16px;opacity:0;transition:opacity .24s ease-in-out}::ng-deep entity-picker-box .tn-animated-left-arrow-icon{left:8px}::ng-deep entity-picker-box .tn-animated-right-arrow-icon{right:8px}::ng-deep entity-picker-box .tn-l-entity-picker-box.--show-left-arrow .tn-animated-left-arrow-icon,::ng-deep entity-picker-box .tn-l-entity-picker-box.--show-right-arrow .tn-animated-right-arrow-icon{opacity:1}::ng-deep entity-picker-box .tn-l-entity-picker-box-inner{display:flex;height:100%;margin:0}::ng-deep entity-picker-box app-entity-picker-data .custom-card,::ng-deep entity-picker-box app-entity-picker-selected .custom-card{box-shadow:none}::ng-deep entity-picker-box app-entity-picker-selected .custom-card{padding:.5em!important}@media (max-width:640px){::ng-deep entity-picker-box .picker-left{border-right:unset}::ng-deep entity-picker-box .tn-l-entity-picker-box-inner{flex-wrap:nowrap;overflow:auto}::ng-deep entity-picker-box .p-datatable .p-datatable-tbody tr td.column-function{padding:.5rem}}::ng-deep .entity-picker-box-dialog .p-dialog-content{overflow:hidden;padding:0}@media (max-width:640px){::ng-deep .entity-picker-box-dialog .p-dialog-content{overflow:auto}::ng-deep .entity-picker-box-dialog .tn-dialog-scrollbar>div{min-height:100%!important}}"]
39331
39341
  },] }
@@ -39341,6 +39351,7 @@ EntityPickerBoxComponent.propDecorators = {
39341
39351
  el: [{ type: ViewChild, args: ['el',] }],
39342
39352
  dataComponent: [{ type: ViewChild, args: [EntityPickerDataComponent, { static: false },] }],
39343
39353
  selectedComponent: [{ type: ViewChild, args: [EntityPickerSelectedComponent, { static: false },] }],
39354
+ templates: [{ type: Input }],
39344
39355
  parentSetting: [{ type: Input }],
39345
39356
  advanceData: [{ type: Input }],
39346
39357
  control: [{ type: Input }],
@@ -39652,20 +39663,20 @@ class AutoCompletePickerComponent extends ComponentBase {
39652
39663
  this.onBlur.emit();
39653
39664
  }
39654
39665
  handleKeyUp(evt) {
39655
- let hideSuggessions = false;
39656
- if (this.control.multiple) {
39657
- hideSuggessions = evt.target.parentNode.parentNode.parentNode.childElementCount == 1;
39658
- if (this.selectedValueObject && this.selectedValueObject.length > 0
39659
- && evt.keyCode == 40 && hideSuggessions) {
39660
- this.results = [];
39661
- }
39662
- }
39663
- else {
39664
- hideSuggessions = evt.target.parentNode.childElementCount == 1;
39665
- }
39666
- if (evt.target.value == '' && hideSuggessions && evt.keyCode != 40 && evt.keyCode != 38) {
39667
- this.results = [];
39668
- }
39666
+ // let hideSuggessions = false;
39667
+ // if (this.control.multiple) {
39668
+ // hideSuggessions = evt.target.parentNode.parentNode.parentNode.childElementCount == 1;
39669
+ // // if (this.selectedValueObject && this.selectedValueObject.length > 0
39670
+ // // && evt.keyCode == 40 && hideSuggessions) {
39671
+ // // this.results = [];
39672
+ // // }
39673
+ // }
39674
+ // else {
39675
+ // hideSuggessions = evt.target.parentNode.childElementCount == 1;
39676
+ // }
39677
+ // if (evt.target.value == '' && hideSuggessions && evt.keyCode != 40 && evt.keyCode != 38) {
39678
+ // this.results = [];
39679
+ // }
39669
39680
  }
39670
39681
  // luu data cua row dang duoc select, dung khi control.multiple = false;
39671
39682
  handleRowSelect(item) {
@@ -42039,6 +42050,14 @@ class EntityPickerComponent extends DataListBase {
42039
42050
  }
42040
42051
  });
42041
42052
  }
42053
+ beforeRenderDataSource(data) {
42054
+ return __awaiter(this, void 0, void 0, function* () {
42055
+ if (this.control.beforeRenderDataSource) {
42056
+ yield this.control.beforeRenderDataSource(data, this);
42057
+ }
42058
+ return data;
42059
+ });
42060
+ }
42042
42061
  afterGetData() {
42043
42062
  return __awaiter(this, void 0, void 0, function* () {
42044
42063
  if (this.control.afterGetData) {
@@ -42185,7 +42204,7 @@ class EntityPickerComponent extends DataListBase {
42185
42204
  EntityPickerComponent.decorators = [
42186
42205
  { type: Component, args: [{
42187
42206
  selector: 'entity-picker',
42188
- template: "<crud-list #crudList [templates]=\"children\" [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\"\n [hiddenDelete]=\"readOnly\" (onReload)=\"_triggerProcessData($event)\" (onAdd)=\"_add($event)\" (onEdit)=\"_edit($event)\"\n (onView)=\"_view($event)\" (onDelete)=\"_delete($event)\" (onDeleteMultiple)=\"_deleteMultiple($event)\"\n [showScrollHorizontal]=\"true\" (onReloaded)=\"_unmarkLoading()\" class=\"--no-wrapper-padding\">\n <ng-template #toolbar let-crudList=\"crudList\">\n <button *ngIf=\"!readOnly\" type=\"button\" pButton icon=\"pi pi-external-link\" class=\"p-button-text\"\n [label]=\"control.title\" [disabled]=\"control.disabled\" (click)=\"selectEntity()\"></button>\n <ng-container *ngIf=\"required\">\n <span class=\"star-required\">*</span>\n </ng-container>\n <ng-container *ngIf=\"control.multiple && !readOnly && !setting.hiddenCheckbox\">\n <button type=\"button\" pButton class=\"p-button-warning p-button-text p-button-rounded link-or-action\"\n icon=\"pi pi-trash\" label=\"B\u1ECF m\u1EE5c \u0111\u00E3 ch\u1ECDn\" tooltipPosition=\"top\"\n [disabled]=\"model.selectedItems.length == 0\" (click)=\"handleUnMultiPickEntity()\"></button>\n </ng-container>\n </ng-template>\n <ng-template #function let-crudList=\"crudList\" let-rowData=\"rowData\" let-index=\"index\">\n <div *ngIf=\"!control.rowButtonTemplate && !readOnly\" class=\"p-toolbar-group-center button-group\">\n <ng-container *ngIf=\"control.rowButtonBeforeTemplate\" class=\"p-toolbar-group-center button-group\">\n <ng-container\n *ngTemplateOutlet=\"control.rowButtonBeforeTemplate; context: {rowData: rowData, rowIndex: index, control: control}\">\n </ng-container>\n </ng-container>\n <button type=\"button\" pButton class=\"p-button-warning p-button-text p-button-rounded link-or-action\"\n icon=\"pi pi-trash\" pTooltip=\"B\u1ECF ch\u1ECDn m\u1EE5c n\u00E0y\" tooltipPosition=\"top\"\n (click)=\"handleUnPickEntity(rowData)\"></button>\n </div>\n <div *ngIf=\"control.rowButtonTemplate\" class=\"p-toolbar-group-center button-group\">\n <ng-container\n *ngTemplateOutlet=\"control.rowButtonTemplate; context: {rowData: rowData, rowIndex: index, control: control}\">\n </ng-container>\n </div>\n </ng-template>\n</crud-list>\n<tn-dialog #dialog *ngIf=\"showDetailForm\" styleClass=\"entity-picker-box-dialog no-padding\" [useDefaultScrollBar]=\"true\"\n [header]=\"control.title | translate\" [popupSize]=\"popupSize\" (onHide)=\"handleHide($event)\">\n <entity-picker-box #entityPickerBox [control]=\"control\" [parentSetting]=\"setting\" [advanceData]=\"advanceData\"\n (onRowSelect)=\"handleEntityPickerBoxRowSelect($event)\" [selectedValue]=\"selectedValue\"\n (onChanged)=\"handleChangeEntity($event)\" (onSelect)=\"handleSelectEntity($event)\"\n (onUnSelect)=\"handleUnSelectEntity($event)\" (onDone)=\"handleHide($event)\">\n </entity-picker-box>\n <ng-template #footer>\n <button type=\"button\" pButton class=\"p-button-text\" (click)=\"onClickSubmitButton($event, entityPickerBox)\"\n [label]=\"'Ho\u00E0n th\u00E0nh' | translate\" icon=\"pi pi-check\"></button>\n </ng-template>\n</tn-dialog>",
42207
+ template: "<crud-list #crudList [templates]=\"children\" [model]=\"model\" [setting]=\"setting\" [dataSource]=\"model.dataSource\"\n [hiddenDelete]=\"readOnly\" (onReload)=\"_triggerProcessData($event)\" (onAdd)=\"_add($event)\" (onEdit)=\"_edit($event)\"\n (onView)=\"_view($event)\" (onDelete)=\"_delete($event)\" (onDeleteMultiple)=\"_deleteMultiple($event)\"\n [showScrollHorizontal]=\"true\" (onReloaded)=\"_unmarkLoading()\" class=\"--no-wrapper-padding\">\n <ng-template #toolbar let-crudList=\"crudList\">\n <button *ngIf=\"!readOnly\" type=\"button\" pButton icon=\"pi pi-external-link\" class=\"p-button-text\"\n [label]=\"control.title\" [disabled]=\"control.disabled\" (click)=\"selectEntity()\"></button>\n <ng-container *ngIf=\"required\">\n <span class=\"star-required\">*</span>\n </ng-container>\n <ng-container *ngIf=\"control.multiple && !readOnly && !setting.hiddenCheckbox\">\n <button type=\"button\" pButton class=\"p-button-warning p-button-text p-button-rounded link-or-action\"\n icon=\"pi pi-trash\" label=\"B\u1ECF m\u1EE5c \u0111\u00E3 ch\u1ECDn\" tooltipPosition=\"top\"\n [disabled]=\"model.selectedItems.length == 0\" (click)=\"handleUnMultiPickEntity()\"></button>\n </ng-container>\n </ng-template>\n <ng-template #function let-crudList=\"crudList\" let-rowData=\"rowData\" let-index=\"index\">\n <div *ngIf=\"!control.rowButtonTemplate && !readOnly\" class=\"p-toolbar-group-center button-group\">\n <ng-container *ngIf=\"control.rowButtonBeforeTemplate\" class=\"p-toolbar-group-center button-group\">\n <ng-container\n *ngTemplateOutlet=\"control.rowButtonBeforeTemplate; context: {rowData: rowData, rowIndex: index, control: control}\">\n </ng-container>\n </ng-container>\n <button type=\"button\" pButton class=\"p-button-warning p-button-text p-button-rounded link-or-action\"\n icon=\"pi pi-trash\" pTooltip=\"B\u1ECF ch\u1ECDn m\u1EE5c n\u00E0y\" tooltipPosition=\"top\"\n (click)=\"handleUnPickEntity(rowData)\"></button>\n </div>\n <div *ngIf=\"control.rowButtonTemplate\" class=\"p-toolbar-group-center button-group\">\n <ng-container\n *ngTemplateOutlet=\"control.rowButtonTemplate; context: {rowData: rowData, rowIndex: index, control: control}\">\n </ng-container>\n </div>\n </ng-template>\n</crud-list>\n<tn-dialog #dialog *ngIf=\"showDetailForm\" styleClass=\"entity-picker-box-dialog no-padding\" [useDefaultScrollBar]=\"true\"\n [header]=\"control.title | translate\" [popupSize]=\"popupSize\" (onHide)=\"handleHide($event)\">\n <entity-picker-box #entityPickerBox [control]=\"control\" [parentSetting]=\"setting\" [advanceData]=\"advanceData\" [templates]=\"children\"\n (onRowSelect)=\"handleEntityPickerBoxRowSelect($event)\" [selectedValue]=\"selectedValue\"\n (onChanged)=\"handleChangeEntity($event)\" (onSelect)=\"handleSelectEntity($event)\"\n (onUnSelect)=\"handleUnSelectEntity($event)\" (onDone)=\"handleHide($event)\">\n </entity-picker-box>\n <ng-template #footer>\n <button type=\"button\" pButton class=\"p-button-text\" (click)=\"onClickSubmitButton($event, entityPickerBox)\"\n [label]=\"'Ho\u00E0n th\u00E0nh' | translate\" icon=\"pi pi-check\"></button>\n </ng-template>\n</tn-dialog>",
42189
42208
  providers: [
42190
42209
  {
42191
42210
  provide: NG_VALUE_ACCESSOR,
@@ -47944,20 +47963,20 @@ class UserPickerComponent extends ComponentBase {
47944
47963
  this.onBlur.emit();
47945
47964
  }
47946
47965
  handleKeyUp(evt) {
47947
- let hideSuggessions = false;
47948
- if (this.control.multiple) {
47949
- hideSuggessions = evt.target.parentNode.parentNode.parentNode.childElementCount == 1;
47950
- if (this.selectedValueObject && this.selectedValueObject.length > 0
47951
- && evt.keyCode == 40 && hideSuggessions) {
47952
- this.results = [];
47953
- }
47954
- }
47955
- else {
47956
- hideSuggessions = evt.target.parentNode.childElementCount == 1;
47957
- }
47958
- if (evt.target.value == '' && hideSuggessions && evt.keyCode != 40 && evt.keyCode != 38) {
47959
- this.results = [];
47960
- }
47966
+ // let hideSuggessions = false;
47967
+ // if (this.control.multiple) {
47968
+ // hideSuggessions = evt.target.parentNode.parentNode.parentNode.childElementCount == 1;
47969
+ // if (this.selectedValueObject && this.selectedValueObject.length > 0
47970
+ // && evt.keyCode == 40 && hideSuggessions) {
47971
+ // this.results = [];
47972
+ // }
47973
+ // }
47974
+ // else {
47975
+ // hideSuggessions = evt.target.parentNode.childElementCount == 1;
47976
+ // }
47977
+ // if (evt.target.value == '' && hideSuggessions && evt.keyCode != 40 && evt.keyCode != 38) {
47978
+ // this.results = [];
47979
+ // }
47961
47980
  }
47962
47981
  // Handle select item trong entity picker box (Không cần emit change)
47963
47982
  handleSelectEntity(evt) {