@fundamental-ngx/platform 0.43.37 → 0.43.39

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 (40) hide show
  1. package/approval-flow/approval-flow-user-list/approval-flow-user-list.component.d.ts +10 -0
  2. package/button/button.component.d.ts +1 -2
  3. package/esm2020/approval-flow/approval-flow-add-node/approval-flow-add-node.component.mjs +2 -4
  4. package/esm2020/approval-flow/approval-flow-user-list/approval-flow-user-list.component.mjs +50 -14
  5. package/esm2020/button/button.component.mjs +5 -3
  6. package/esm2020/list/base-list-item.mjs +4 -2
  7. package/esm2020/list/list.component.mjs +12 -2
  8. package/esm2020/table/components/table-row/table-row.component.mjs +3 -3
  9. package/esm2020/table/table.component.mjs +3 -3
  10. package/esm2020/table-helpers/directives/table-virtual-scroll.directive.mjs +9 -6
  11. package/esm2020/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +3 -3
  12. package/fesm2015/fundamental-ngx-platform-approval-flow.mjs +52 -20
  13. package/fesm2015/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
  14. package/fesm2015/fundamental-ngx-platform-button.mjs +4 -2
  15. package/fesm2015/fundamental-ngx-platform-button.mjs.map +1 -1
  16. package/fesm2015/fundamental-ngx-platform-list.mjs +15 -2
  17. package/fesm2015/fundamental-ngx-platform-list.mjs.map +1 -1
  18. package/fesm2015/fundamental-ngx-platform-table-helpers.mjs +8 -5
  19. package/fesm2015/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
  20. package/fesm2015/fundamental-ngx-platform-table.mjs +4 -4
  21. package/fesm2015/fundamental-ngx-platform-table.mjs.map +1 -1
  22. package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs +2 -2
  23. package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  24. package/fesm2020/fundamental-ngx-platform-approval-flow.mjs +50 -18
  25. package/fesm2020/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
  26. package/fesm2020/fundamental-ngx-platform-button.mjs +4 -2
  27. package/fesm2020/fundamental-ngx-platform-button.mjs.map +1 -1
  28. package/fesm2020/fundamental-ngx-platform-list.mjs +14 -2
  29. package/fesm2020/fundamental-ngx-platform-list.mjs.map +1 -1
  30. package/fesm2020/fundamental-ngx-platform-table-helpers.mjs +8 -5
  31. package/fesm2020/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
  32. package/fesm2020/fundamental-ngx-platform-table.mjs +4 -4
  33. package/fesm2020/fundamental-ngx-platform-table.mjs.map +1 -1
  34. package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs +2 -2
  35. package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  36. package/fundamental-ngx-platform-v0.43.39.tgz +0 -0
  37. package/list/list.component.d.ts +6 -0
  38. package/package.json +4 -4
  39. package/schematics/ng-add/index.js +1 -1
  40. package/fundamental-ngx-platform-v0.43.37.tgz +0 -0
@@ -314,7 +314,9 @@ export class BaseListItem extends BaseComponent {
314
314
  * Show navigation for single list
315
315
  */
316
316
  ngOnInit() {
317
- this.id = `fdp-list-item-${nextListItemId++}`;
317
+ if (!this.id || this.id === this.defaultId) {
318
+ this.id = `fdp-list-item-${nextListItemId++}`;
319
+ }
318
320
  }
319
321
  /** @hidden */
320
322
  ngOnDestroy() {
@@ -533,4 +535,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
533
535
  type: HostListener,
534
536
  args: ['focusout', ['$event']]
535
537
  }] } });
536
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1saXN0LWl0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvbGlzdC9iYXNlLWxpc3QtaXRlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBR0gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFlLE9BQU8sRUFBa0IsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVuRSxPQUFPLEVBQUUsd0JBQXdCLEVBQXVCLE1BQU0sNEJBQTRCLENBQUM7QUFDM0YsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRWxDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQUczQyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDO0FBQzNDLElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQztBQUd2QixNQUFNLE9BQU8sY0FBYztJQUEzQjtRQUtJLDRCQUE0QjtRQUM1QixVQUFLLEdBQTJCLEVBQUUsQ0FBQztRQUNuQzs7O1dBR0c7UUFDSCxTQUFJLEdBQTBC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LENBQUM7Z0JBdUJqQyxPQUFPO3NCQUROLFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZyAqL1xuaW1wb3J0IHsgRU5URVIsIFNQQUNFIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvbG9yQWNjZW50LCBLZXlVdGlsLCBOdWxsYWJsZSwgU2l6ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NoZWNrYm94JztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaWNvbic7XG5pbXBvcnQgeyBGRF9MSVNUX1VOUkVBRF9JTkRJQ0FUT1IsIExpc3RVbnJlYWRJbmRpY2F0b3IgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGlzdCc7XG5pbXBvcnQgeyBSYWRpb0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9yYWRpbyc7XG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBpc1ByZXNlbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGZHBMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9mZHBMaXN0Q29tcG9uZW50LnRva2VuJztcbmltcG9ydCB7IExpc3RDb25maWcgfSBmcm9tICcuL2xpc3QuY29uZmlnJztcbmltcG9ydCB7IEZkcExpc3QsIExpc3RUeXBlLCBTZWxlY3Rpb25UeXBlIH0gZnJvbSAnLi9tb2RlbHMvbGlzdCc7XG5cbmV4cG9ydCBjb25zdCBJU19BQ1RJVkVfQ0xBU1MgPSAnaXMtYWN0aXZlJztcbmxldCBuZXh0TGlzdEl0ZW1JZCA9IDA7XG5leHBvcnQgdHlwZSBTdGF0dXNUeXBlID0gJ25lZ2F0aXZlJyB8ICdjcml0aWNhbCcgfCAncG9zaXRpdmUnIHwgJ2luZm9ybWF0aXZlJztcblxuZXhwb3J0IGNsYXNzIExpc3RJY29uQ29uZmlnIHtcbiAgICAvKiogVGhlIGljb24gbmFtZSB0byBkaXNwbGF5LiBTZWUgdGhlIGljb24gcGFnZSBmb3IgdGhlIGxpc3Qgb2YgaWNvbnNcbiAgICAgKiBoZXJlOiBodHRwczovL3NhcC5naXRodWIuaW8vZnVuZGFtZW50YWwtbmd4L2ljb25cbiAgICAgKiAqL1xuICAgIGdseXBoOiBJY29uQ29tcG9uZW50WydnbHlwaCddO1xuICAgIC8qKiB1c2VyJ3MgY3VzdG9tIGNsYXNzZXMgKi9cbiAgICBjbGFzczogSWNvbkNvbXBvbmVudFsnY2xhc3MnXSA9ICcnO1xuICAgIC8qKlxuICAgICAqIFRoZSBpY29uIGZvbnRcbiAgICAgKiBPcHRpb25zIGluY2x1ZGU6ICdTQVAtaWNvbnMnLCAnQnVzaW5lc3NTdWl0ZUluQXBwU3ltYm9scycgYW5kICdTQVAtaWNvbnMtVE5UJ1xuICAgICAqL1xuICAgIGZvbnQ6IEljb25Db21wb25lbnRbJ2ZvbnQnXSA9ICdTQVAtaWNvbnMnO1xuICAgIC8qKiBBcmlhLWxhYmVsIGZvciBJY29uLiAqL1xuICAgIGFyaWFMYWJlbDogSWNvbkNvbXBvbmVudFsnYXJpYUxhYmVsJ107XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0QXZhdGFyQ29uZmlnIHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNsYXNzID0gJyc7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBhcmlhTGFiZWw6IE51bGxhYmxlPHN0cmluZz4gPSBudWxsO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgYXJpYUxhYmVsbGVkYnk6IE51bGxhYmxlPHN0cmluZz4gPSBudWxsO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbGFiZWw6IE51bGxhYmxlPHN0cmluZz4gPSBudWxsO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2l6ZTogU2l6ZSA9ICdzJztcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdseXBoOiBOdWxsYWJsZTxzdHJpbmc+ID0gbnVsbDtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHpvb21HbHlwaDogTnVsbGFibGU8c3RyaW5nPiA9IG51bGw7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjaXJjbGUgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRyYW5zcGFyZW50ID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb250YWluID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwbGFjZWhvbGRlciA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgdGlsZSA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgYm9yZGVyID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb2xvckFjY2VudDogTnVsbGFibGU8Q29sb3JBY2NlbnQ+ID0gbnVsbDtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJhbmRvbSA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY2xpY2thYmxlID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBpbWFnZTogTnVsbGFibGU8c3RyaW5nPiA9IG51bGw7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBhbHRlckljb246IE51bGxhYmxlPHN0cmluZz4gPSBudWxsO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgYmFja3VwSW1hZ2U6IE51bGxhYmxlPHN0cmluZz4gPSBudWxsO1xufVxuXG4vKipcbiAqIEJhc2UgaW50ZXJmYWNlIGZvciBhIGxpc3QgdmFyaWFudCBkZWZpbml0aW9uLlxuICogQ2FwdHVyZXMgYSBsaXN0IGl0ZW0gdGVtcGxhdGUgZGVmaW5pdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJdGVtRGVmIHtcbiAgICB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0QWR2YW5jZWREZXNjcmlwdGlvbiB7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIGFyaWFMYWJlbD86IHN0cmluZztcbiAgICB0aXRsZT86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgTGlzdERlc2NyaXB0aW9uID0gc3RyaW5nIHwgTGlzdEFkdmFuY2VkRGVzY3JpcHRpb247XG5cbmV4cG9ydCBlbnVtIExJU1RfSVRFTV9UWVBFIHtcbiAgICBJVEVNID0gJ2l0ZW0nLFxuICAgIEdST1VQID0gJ2dyb3VwJyxcbiAgICBGT09URVIgPSAnZm9vdGVyJyxcbiAgICBIRUFERVIgPSAnaGVhZGVyJ1xufVxuXG5leHBvcnQgY2xhc3MgTW9kaWZ5SXRlbUV2ZW50IHtcbiAgICAvKiogTGlzdCBJdGVtIGNvbXBvbmVudCAqL1xuICAgIHNvdXJjZTogQmFzZUxpc3RJdGVtO1xuICAgIC8qKiBBY3Rpb24gKi9cbiAgICBhY3Rpb246ICdkZWxldGUnIHwgJ2VkaXQnO1xufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbZmRwSXRlbURlZl0nIH0pXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBjbGFzcyBMaXN0SXRlbURlZiBpbXBsZW1lbnRzIEl0ZW1EZWYge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoLyoqIEBkb2NzLXByaXZhdGUgKi8gcHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+KSB7fVxufVxuXG4vKipcbiAqIFRoaXMgY2xhc3MgY29udGFpbnMgY29tbW9uIHByb3BlcnRpZXMgdXNlZCBhY3Jvc3MgbGlzdCBJdGVtIGNvbXBvbmVudHMuXG4gKiB0aGlzIGNhbiBiZSBleHRlbmRlZCB0byByZWR1Y2UgdGhlIGNvZGUgZHVwbGljYXRpb24gYWNyb3NzIGxpc3QgSXRlbSBjb21wb25lbnRzLlxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBjbGFzcyBCYXNlTGlzdEl0ZW0gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3kge1xuICAgIC8qKiBkZWZpbmUgbGFiZWwgZm9yIHNjcmVlbiByZWFkZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbGxlZEJ5OiBzdHJpbmc7XG5cbiAgICAvKiogZGVmaW5lIGxldmVsIG9mIGl0ZW0gZm9yIHNjcmVlbiByZWFkZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMZXZlbDogbnVtYmVyO1xuXG4gICAgLyoqIGRlZmluZSBwb3NpdGlvbiBvZiBpdGVtIGZvciBzY3JlZW4gcmVhZGVyICovXG4gICAgQElucHV0KClcbiAgICBhcmlhUG9zaW5zZXQ6IG51bWJlcjtcblxuICAgIC8qKiBBdmF0YXIgY29tcG9uZW50IHByb3BlcnRpZXMuIEBzZWUgQXZhdGFyQ29tcG9uZW50IGZvciBtb3JlIGRldGFpbHMgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBhdmF0YXIodmFsdWU6IFBhcnRpYWw8TGlzdEF2YXRhckNvbmZpZz4gfCBzdHJpbmcpIHtcbiAgICAgICAgdmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8geyBpbWFnZTogdmFsdWUgfSA6IHZhbHVlO1xuICAgICAgICB0aGlzLl9hdmF0YXJDb25maWcgPSBtZXJnZShuZXcgTGlzdEF2YXRhckNvbmZpZygpLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IGF2YXRhcigpOiBMaXN0QXZhdGFyQ29uZmlnIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F2YXRhckNvbmZpZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqIFVzZSBgYXZhdGFyYCBwcm9wZXJ0eSBmb3IgbW9yZSBmbGV4aWJsZSBjb25maWd1cmF0aW9uLlxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogQXR0cmlidXRlIHRvIGhvbGQgYXZhdGFyIHBhdGhcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBhdmF0YXJTcmModmFsdWU6IE51bGxhYmxlPHN0cmluZz4pIHtcbiAgICAgICAgdGhpcy5fYXZhdGFyQ29uZmlnID0gbWVyZ2UodGhpcy5fYXZhdGFyQ29uZmlnLCB7IGltYWdlOiB2YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBnZXQgYXZhdGFyU3JjKCk6IE51bGxhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hdmF0YXI/LmltYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICogVXNlIGBhdmF0YXJgIHByb3BlcnR5IGZvciBtb3JlIGZsZXhpYmxlIGNvbmZpZ3VyYXRpb24uXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBBdHRyaWJ1dGUgdG8gaG9sZCBhdmF0YXIgdGl0bGUgZm9yIGExMXlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBhdmF0YXJUaXRsZSh2YWx1ZTogTnVsbGFibGU8c3RyaW5nPikge1xuICAgICAgICB0aGlzLl9hdmF0YXJDb25maWcgPSBtZXJnZSh0aGlzLl9hdmF0YXJDb25maWcsIHsgYXJpYUxhYmVsOiB2YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBnZXQgYXZhdGFyVGl0bGUoKTogTnVsbGFibGU8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmF2YXRhcj8uYXJpYUxhYmVsO1xuICAgIH1cblxuICAgIC8qKiBhdHRyaWJ1dGUgdG8gaG9sZCBjb3VudGVyIHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICBjb3VudGVyPzogc3RyaW5nO1xuXG4gICAgLyoqIERlc2NyaXB0aW9uIG9mIHRoZSB0aXRsZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGVzY3JpcHRpb246IE51bGxhYmxlPExpc3REZXNjcmlwdGlvbj47XG5cbiAgICAvKiogVG8gaW52ZXJ0IHRoZSBzdGF0dXMgb2Ygc2Vjb25kYXJ5IHRleHQgKi9cbiAgICBASW5wdXQoKVxuICAgIGludmVydGVkID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0aGVyZSBpcyBubyBkYXRhIGluc2lkZSBsaXN0IGl0ZW0gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vRGF0YVRleHQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBzZWNvbmRhcnkgdGV4dC5mZC1saXN0X19ieWxpbmUtcmlnaHQtLSpcbiAgICAgKiBDYW4gYmUgb25lIG9mICpwb3NpdGl2ZSosICpuZWdhdGl2ZSosICppbmZvcm1hdGl2ZSosICpjcml0aWNhbCosICpuZXV0cmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzdGF0dXNUeXBlPzogU3RhdHVzVHlwZTtcblxuICAgIC8qKiBhdHRyaWJ1dGUgdG8gaG9sZCBzZWNvbmRhcnkgdGV4dCovXG4gICAgQElucHV0KClcbiAgICBzZWNvbmRhcnk6IE51bGxhYmxlPExpc3REZXNjcmlwdGlvbj47XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGluZyB0aGlzIGZsYWcgY2F1c2VzIGZvcmNpbmcgc2Vjb25kYXJ5IGl0ZW0gZGlyZWN0aXZlIHRvIG5vdCB3cmFwIHRleHQsXG4gICAgICogaW5zdGVhZCBvZiB3cmFwcGluZyB0aGVyZSB3aWxsIGJlIHRleHQgdHJ1bmNhdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2Vjb25kYXJ5V3JhcD86IGJvb2xlYW47XG5cbiAgICAvKiogVG9vbHRpcCB0ZXh0IHRvIHNob3cgd2hlbiBmb2N1c2VkIGZvciBtb3JlIHRoYW4gdGltZW91dCB2YWx1ZSovXG4gICAgQElucHV0KClcbiAgICB0aXRsZT86IHN0cmluZztcblxuICAgIC8qKiBVc2VkIGZvciBwbGFjZWluZyBuYXZpZ2F0aW9uIExpbmsgKi9cbiAgICBASW5wdXQoKVxuICAgIGxpbms6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGluZyB0aGlzIGZsYWcgY2F1c2VzIGZvcmNpbmcgdGl0bGUgZGlyZWN0aXZlIHRvIG5vdCB3cmFwIHRleHQsXG4gICAgICogaW5zdGVhZCBvZiB3cmFwcGluZyB0aGVyZSB3aWxsIGJlIHRleHQgdHJ1bmNhdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGl0bGVXcmFwPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFNlZSBgaWNvbmAgaW5wdXQgcHJvcGVydHkgZm9yIG1vcmUgZmxleGlibGUgaWNvbiBjb25maWd1cmF0aW9uLlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIGF0dHJpYnV0ZSB0byBob2xkIHByaW1hcnkvdGl0bGUgaWNvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRpdGxlSWNvbih2YWx1ZTogTnVsbGFibGU8c3RyaW5nPikge1xuICAgICAgICB0aGlzLl9pY29uQ29uZmlnID0gbWVyZ2UobmV3IExpc3RJY29uQ29uZmlnKCksIHsgZ2x5cGg6IHZhbHVlLCBhcmlhTGFiZWw6IHZhbHVlIH0pO1xuICAgIH1cblxuICAgIGdldCB0aXRsZUljb24oKTogTnVsbGFibGU8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pY29uQ29uZmlnLmdseXBoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExpc3QgaXRlbSBpY29uIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgaWNvbih2YWx1ZTogUGFydGlhbDxMaXN0SWNvbkNvbmZpZz4pIHtcbiAgICAgICAgdGhpcy5faWNvbkNvbmZpZyA9IG1lcmdlKG5ldyBMaXN0SWNvbkNvbmZpZygpLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IGljb24oKTogTGlzdEljb25Db25maWcge1xuICAgICAgICByZXR1cm4gdGhpcy5faWNvbkNvbmZpZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXRzIHRoZSBsaXN0IGl0ZW0gaW4gYm9sZCB0ZXh0XG4gICAgICogd2hpY2ggcmVzcHJlc2VudHMgdW5yZWFkIGRhdGFcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHVuUmVhZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZGlzcGxheSB1bnJlYWQgbm90aWZpY2F0aW9uIGNpcmNsZS5cbiAgICAgKi9cbiAgICBnZXQgZGlzcGxheVVucmVhZE5vdGlmaWNhdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fbGlzdD8udW5yZWFkSW5kaWNhdG9yO1xuICAgIH1cblxuICAgIC8qKiByYWRpbyBidXR0b24gdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHZhbHVlOiBzdHJpbmc7XG5cbiAgICAvKiogQnkgZGVmYXVsdCBzZWxlY3Rpb24gbW9kZSBpcyAnbm9uZScgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWxlY3Rpb25Nb2RlKHZhbHVlOiBTZWxlY3Rpb25UeXBlKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fc2V0QXR0clJvbGUoKTtcbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0aW9uTW9kZSgpOiBTZWxlY3Rpb25UeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGU7XG4gICAgfVxuXG4gICAgLyoqIEJ5IGRlZmF1bHQgc2VsZWN0aW9uIG1vZGUgaXMgJ2FjdGl2ZScgKi9cbiAgICBASW5wdXQoKVxuICAgIGxpc3RUeXBlOiBMaXN0VHlwZSA9ICdhY3RpdmUnO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBOYXZpZ2F0aW9uIG1vZGUgaXMgaW5jbHVkZWQgdG8gbGlzdCBjb21wb25lbnRcbiAgICAgKiBmb3IgYWxsIHRoZSBpdGVtc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmF2aWdhdGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIE5hdmlnYXRpb24gbW9kZSBpcyBpbmNsdWRlZCB0byBsaXN0IGNvbXBvbmVudFxuICAgICAqIG9ubHkgYSBzdWJzZXQgb2YgdGhlIGxpc3QgaXRlbXMgYXJlIG5hdmlnYWJsZVxuICAgICAqIHlvdSBzaG91bGQgaW5kaWNhdGUgdGhvc2UgYnkgZGlzcGxheWluZyBhIG5hdmlnYXRpb24gYXJyb3dcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG5hdmlnYXRpb25JbmRpY2F0b3IgPSBmYWxzZTtcblxuICAgIC8qKiByb2xlICovXG4gICAgQElucHV0KClcbiAgICByb2xlOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICogZXZlbnQgZW1pdHRlciBmb3Igc2VsZWN0ZWQgaXRlbVxuICAgICAqIHNlcHJhdGUgUFIgZm9yIGN1c3RvbSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGl0ZW1TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TW9kaWZ5SXRlbUV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgZW1pdHRlZCBmb3Igc2VsZWN0ZWQgaXRlbSB0aHJvdWdoIHRoZSBjaGVja2JveC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBpdGVtQ2hlY2tib3hTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TW9kaWZ5SXRlbUV2ZW50PigpO1xuXG4gICAgLyoqIEV2ZW50IHNlbnQgd2hlbiBkZWxldGUsIGRldGFpbHMgb3IgYW55IG90aGVyIGFjdGlvbiBidXR0b25zIGFyZSBjbGlja2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgYnV0dG9uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TW9kaWZ5SXRlbUV2ZW50PigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdsaXN0SXRlbScsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIGxpc3RJdGVtOiBFbGVtZW50UmVmPEhUTUxMSUVsZW1lbnQ+O1xuXG4gICAgLyoqIEFjY2VzcyBjaGlsZCBlbGVtZW50LCBmb3IgY2hlY2tpbmcgbGluayBjb250ZW50Ki9cbiAgICBAVmlld0NoaWxkKCdsaW5rRWxlbWVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIGFuY2hvcjogRWxlbWVudFJlZjxIVE1MTGlua0VsZW1lbnQ+O1xuXG4gICAgLyoqIEFjY2VzcyBlZGl0IGJ1dHRvbiovXG4gICAgQFZpZXdDaGlsZCgnZWRpdCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIGVkaXQ6IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuXG4gICAgLyoqIEFjY2VzcyBkZWxldGUgYnV0dG9uKi9cbiAgICBAVmlld0NoaWxkKCdkZWxldGUnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBkZWxldGU6IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKENoZWNrYm94Q29tcG9uZW50KVxuICAgIGNoZWNrYm94Q29tcG9uZW50OiBDaGVja2JveENvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChSYWRpb0J1dHRvbkNvbXBvbmVudClcbiAgICByYWRpb0J1dHRvbkNvbXBvbmVudDogUmFkaW9CdXR0b25Db21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF90eXBlOiBMSVNUX0lURU1fVFlQRSA9IExJU1RfSVRFTV9UWVBFLklURU07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciBCeSBsaW5lIG1vZGUgaXMgaW5jbHVkZWQgdG8gbGlzdCBjb21wb25lbnQsIGJ5IHdoaWNoXG4gICAgICogbGlzdCBpdGVtIHdpbGwgYWNjb21kYXRlIHRoZSBkYXRhIGluIDIgY29sdW1uXG4gICAgICovXG4gICAgX2hhc0J5TGluZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgbGlzdGl0ZW0gaGFzIHJvdyBsZXZlbCBzZWxlY3Rpb24gZW5hYmxlZFxuICAgICAqL1xuICAgIHNldCByb3dTZWxlY3Rpb24odmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fcm93U2VsZWN0aW9uID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3NldEF0dHJSb2xlKCk7XG4gICAgfVxuXG4gICAgZ2V0IHJvd1NlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd1NlbGVjdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciBsaXN0aXRlbSBpcyBzZWxlY3RlZCBiaW5kZWQgdG8gdGVtcGxhdGVcbiAgICAgKi9cbiAgICBfc2VsZWN0ZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9zZWxlY3RlZEF0dHIoKTogYm9vbGVhbiB8IG51bGwge1xuICAgICAgICByZXR1cm4gIXRoaXMucm93U2VsZWN0aW9uICYmIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ25vbmUnID8gbnVsbCA6IHRoaXMuX3NlbGVjdGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBnZXQgdGhlIGZvY3VzZWQgZWxlbWVudCBmb3Iga2V5IG1hbmFnZXJcbiAgICAgKi9cbiAgICBfZm9jdXNlZDogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9saXN0SXRlbVJvbGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9sZSB8fCB0aGlzLl9kZWZhdWx0Um9sZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGFyaWFTZXRTaXplOiBPYnNlcnZhYmxlPG51bWJlcj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Jvd1NlbGVjdGlvbiA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kZWZhdWx0Um9sZSA9ICdsaXN0aXRlbSc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZpZXdJbml0ZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdENvbXBvbmVudCA9IGluamVjdDxGZHBMaXN0PihGZHBMaXN0Q29tcG9uZW50KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYXZhdGFyQ29uZmlnOiBMaXN0QXZhdGFyQ29uZmlnID0gbmV3IExpc3RBdmF0YXJDb25maWcoKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaWNvbkNvbmZpZzogTGlzdEljb25Db25maWcgPSBuZXcgTGlzdEljb25Db25maWcoKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiByYWRpbyBidXR0b24gc2VsZWN0ZWQgdmFsdWUgYmluZGVkIHRvIHRlbXBsYXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uVmFsdWU6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGlvbk1vZGU6IFNlbGVjdGlvblR5cGUgPSAnbm9uZSc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwdWJsaWMgaXRlbUVsOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcHJvdGVjdGVkIF9saXN0Q29uZmlnOiBMaXN0Q29uZmlnLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEZEX0xJU1RfVU5SRUFEX0lORElDQVRPUikgcHJpdmF0ZSByZWFkb25seSBfbGlzdDogTGlzdFVucmVhZEluZGljYXRvclxuICAgICkge1xuICAgICAgICBzdXBlcihfY2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIH1cblxuICAgIC8qKiBTZWxlY3Rpb24gdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWxlY3Rpb25WYWx1ZSh2YWx1ZTogTnVsbGFibGU8c3RyaW5nPikge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25WYWx1ZSA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5fc2VsZWN0aW9uVmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGlvblZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHRoaXMudmFsdWUgPT09IHRoaXMuX3NlbGVjdGlvblZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBzZWxlY3Rpb25WYWx1ZSgpOiBOdWxsYWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvblZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBPbiBpdGVtIGNsaWNrIGV2ZW50IHdpbGwgYmUgZW1pdHRlZFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgICBfb25JdGVtQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJvd1NlbGVjdGlvbiAmJiB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aScpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkID0gIXRoaXMuX3NlbGVjdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgTW9kaWZ5SXRlbUV2ZW50KCk7XG4gICAgICAgIGV2ZW50LnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHRoaXMuX2ZvY3VzZWQgPSAhdGhpcy5fZm9jdXNlZDtcbiAgICAgICAgdGhpcy5pdGVtU2VsZWN0ZWQuZW1pdChldmVudCk7XG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgX2hhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0VOVEVSLCBTUEFDRV0pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jaGVja2JveENvbXBvbmVudCB8fCB0aGlzLnJhZGlvQnV0dG9uQ29tcG9uZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9vbktleWJvYXJkQ2xpY2soZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hbmNob3I/Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcblxuICAgICAgICBpZiAodGhpcy5yb3dTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkID0gIXRoaXMuX3NlbGVjdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgJGV2ZW50ID0gbmV3IE1vZGlmeUl0ZW1FdmVudCgpO1xuICAgICAgICAkZXZlbnQuc291cmNlID0gdGhpcztcbiAgICAgICAgdGhpcy5pdGVtU2VsZWN0ZWQuZW1pdCgkZXZlbnQpO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSGFuZGxlciBmb3IgbW91c2UgZXZlbnRzXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICAgIF9vbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrYm94Q29tcG9uZW50ICYmICF0aGlzLmFuY2hvcikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrYm94Q29tcG9uZW50LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBjbGlja2luZyBvbiB0aGUgY2hlY2tib3ggaXMgbm90IHN1cHByZXNzZWRcbiAgICAgICAgICAgICAgICAvLyBzbyB3ZSBzaG91bGQgb25seSBwcm9jZXNzIGNsaWNrcyBpZiBjbGlja2VkIG9uIHRoZSBsaXN0LWl0ZW0sIG5vdCBjaGVja2JveCBpdHNlbGZcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrYm94Q29tcG9uZW50Lm5leHRWYWx1ZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJhZGlvQnV0dG9uQ29tcG9uZW50Py52YWx1ZUNoYW5nZShldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgY29uc3QgJGV2ZW50ID0gbmV3IE1vZGlmeUl0ZW1FdmVudCgpO1xuICAgICAgICAkZXZlbnQuc291cmNlID0gdGhpcztcbiAgICAgICAgdGhpcy5pdGVtU2VsZWN0ZWQuZW1pdCgkZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBoZWxwcyB0byBhdm9pZCBtdWx0aSByb3dzIGFjdGl2ZSBjbGFzcyB3aXRoIG5hdmlnYXRpb25cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdmb2N1c291dCcsIFsnJGV2ZW50J10pXG4gICAgX29uQmx1cihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoaXNQcmVzZW50KHRoaXMuYW5jaG9yKSAmJiAhS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtFTlRFUiwgU1BBQ0VdKSkge1xuICAgICAgICAgICAgdGhpcy5hbmNob3IubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKElTX0FDVElWRV9DTEFTUyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2hvdyBuYXZpZ2F0aW9uIGZvciBzaW5nbGUgbGlzdFxuICAgICAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlkID0gYGZkcC1saXN0LWl0ZW0tJHtuZXh0TGlzdEl0ZW1JZCsrfWA7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pdGVtU2VsZWN0ZWQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmlld0luaXRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2xpc3RDb21wb25lbnQuX3NldHVwTGlzdEl0ZW0odGhpcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFRvIGRldGVjdCBjaGFuZ2VzIGZyb20gcGFyZW50LWxpc3Rib3ggdG8gbGlzdCBpdGVtXG4gICAgICogZm9yIGV4YW1wbGUgc2luZ2xlLCBtdWx0aSBvcHRpb24gc2VsZWN0aW9uIHRob3NlIGRldGFpbHNcbiAgICAgKiB3aWxsIGJlIGRlZHVjdGVkIGluIGxpc3QgaXRlbVxuICAgICAqL1xuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VycmVudEl0ZW06IE51bGxhYmxlPEhUTUxMSUVsZW1lbnQ+ID0gdGhpcy5pdGVtRWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdsaScpO1xuICAgICAgICBpZiAoIWN1cnJlbnRJdGVtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gY3VycmVudEl0ZW0ucGFyZW50Tm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGN1cnJlbnRJdGVtLnBhcmVudE5vZGU7XG4gICAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICBwYXJlbnROb2RlLnJlbW92ZUF0dHJpYnV0ZSgndGl0bGUnKTtcbiAgICAgICAgICAgIHBhcmVudE5vZGUucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWxhYmVsJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDcmVhdGVkIGZvY3VzIG9uIGxpc3QgaXRlbSBvbiBtb3VzZWNsaWNrLFxuICAgICAqIFVwLGRvd24gYXJyb3cgcHJlc3NcbiAgICAgKi9cbiAgICBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5saXN0SXRlbS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvZ3JhbW1hdGljYWxseSBzZXQgc2VsZWN0ZWQgc3RhdGUgb2YgdGhlIGxpc3QgaXRlbS5cbiAgICAgKiBAcGFyYW0gc2VsZWN0ZWQgV2hldGhlciB0aGUgbGlzdCBpdGVtIGlzIHNlbGVjdGVkXG4gICAgICovXG4gICAgc2V0U2VsZWN0ZWQoc2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHNlbGVjdGVkID09PSB0aGlzLl9zZWxlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IE1vZGlmeUl0ZW1FdmVudCgpO1xuICAgICAgICBldmVudC5zb3VyY2UgPSB0aGlzO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIG9uIGtleWRvd24gYXBwZW5kIGFjdGl2ZSBzdHlsZXMgb24gYWN0aW9uYWJsZSBpdGVtXG4gICAgICovXG4gICAgX29uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoaXNQcmVzZW50KHRoaXMuYW5jaG9yKSAmJiBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0VOVEVSLCBTUEFDRV0pKSB7XG4gICAgICAgICAgICB0aGlzLmFuY2hvci5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoSVNfQUNUSVZFX0NMQVNTKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBvbiBrZXl1cCByZW1vdmUgYWN0aXZlIHN0eWxlcyBmcm9tIGFjdGlvbmFibGUgaXRlbVxuICAgICAqL1xuICAgIF9vbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChpc1ByZXNlbnQodGhpcy5hbmNob3IpICYmIEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbRU5URVIsIFNQQUNFXSkpIHtcbiAgICAgICAgICAgIHRoaXMuYW5jaG9yLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShJU19BQ1RJVkVfQ0xBU1MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25DaGVja2JveE1vZGVsQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBNb2RpZnlJdGVtRXZlbnQoKTtcbiAgICAgICAgZXZlbnQuc291cmNlID0gdGhpcztcbiAgICAgICAgdGhpcy5pdGVtQ2hlY2tib3hTZWxlY3RlZC5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSGFuZGxlcyBhY3Rpb24gYnV0dG9uIGNsaWNrXG4gICAgICovXG4gICAgX29uQWN0aW9uQnV0dG9uQ2xpY2soYWN0aW9uOiAnZGVsZXRlJyB8ICdlZGl0Jyk6IHZvaWQge1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBNb2RpZnlJdGVtRXZlbnQoKTtcbiAgICAgICAgZXZlbnQuc291cmNlID0gdGhpcztcbiAgICAgICAgZXZlbnQuYWN0aW9uID0gYWN0aW9uO1xuICAgICAgICB0aGlzLmJ1dHRvbkNsaWNrZWQuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEhhbmRsZXMgYWN0aW9uIGJ1dHRvbiBjbGljayBvbiBrZXkgcHJlc3NcbiAgICAgKi9cbiAgICBfb25LZXlCdXR0b25DbGljayhldmVudDogS2V5Ym9hcmRFdmVudCwgYWN0aW9uOiAnZGVsZXRlJyB8ICdlZGl0Jyk6IHZvaWQge1xuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtFTlRFUiwgU1BBQ0VdKSkge1xuICAgICAgICAgICAgdGhpcy5fb25BY3Rpb25CdXR0b25DbGljayhhY3Rpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaXNBZHZhbmNlZFRleHQodGV4dDogTGlzdERlc2NyaXB0aW9uKTogdGV4dCBpcyBMaXN0QWR2YW5jZWREZXNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdGV4dCAhPT0gJ3N0cmluZycgJiYgISF0ZXh0LnRleHQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9vbktleWJvYXJkQ2xpY2soZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGVja2JveENvbXBvbmVudD8ubmV4dFZhbHVlKCk7XG4gICAgICAgIHRoaXMucmFkaW9CdXR0b25Db21wb25lbnQ/LnZhbHVlQ2hhbmdlKGV2ZW50KTtcblxuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgY29uc3QgJGV2ZW50ID0gbmV3IE1vZGlmeUl0ZW1FdmVudCgpO1xuICAgICAgICAkZXZlbnQuc291cmNlID0gdGhpcztcbiAgICAgICAgdGhpcy5pdGVtU2VsZWN0ZWQuZW1pdCgkZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0QXR0clJvbGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRSb2xlID1cbiAgICAgICAgICAgIHRoaXMucm93U2VsZWN0aW9uIHx8IHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScgfHwgdGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbXVsdGknXG4gICAgICAgICAgICAgICAgPyAnb3B0aW9uJ1xuICAgICAgICAgICAgICAgIDogJ2xpc3RpdGVtJztcblxuICAgICAgICBpZiAodGhpcy5fdmlld0luaXRlZCkge1xuICAgICAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
538
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1saXN0LWl0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvbGlzdC9iYXNlLWxpc3QtaXRlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBR0gsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFlLE9BQU8sRUFBa0IsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVuRSxPQUFPLEVBQUUsd0JBQXdCLEVBQXVCLE1BQU0sNEJBQTRCLENBQUM7QUFDM0YsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRWxDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQUczQyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsV0FBVyxDQUFDO0FBQzNDLElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQztBQUd2QixNQUFNLE9BQU8sY0FBYztJQUEzQjtRQUtJLDRCQUE0QjtRQUM1QixVQUFLLEdBQTJCLEVBQUUsQ0FBQztRQUNuQzs7O1dBR0c7UUFDSCxTQUFJLEdBQTBC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O3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkEyQm5DLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBdUJqQyxPQUFPO3NCQUROLFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZyAqL1xuaW1wb3J0IHsgRU5URVIsIFNQQUNFIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvbG9yQWNjZW50LCBLZXlVdGlsLCBOdWxsYWJsZSwgU2l6ZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NoZWNrYm94JztcbmltcG9ydCB7IEljb25Db21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvaWNvbic7XG5pbXBvcnQgeyBGRF9MSVNUX1VOUkVBRF9JTkRJQ0FUT1IsIExpc3RVbnJlYWRJbmRpY2F0b3IgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGlzdCc7XG5pbXBvcnQgeyBSYWRpb0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9yYWRpbyc7XG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBpc1ByZXNlbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGZHBMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9mZHBMaXN0Q29tcG9uZW50LnRva2VuJztcbmltcG9ydCB7IExpc3RDb25maWcgfSBmcm9tICcuL2xpc3QuY29uZmlnJztcbmltcG9ydCB7IEZkcExpc3QsIExpc3RUeXBlLCBTZWxlY3Rpb25UeXBlIH0gZnJvbSAnLi9tb2RlbHMvbGlzdCc7XG5cbmV4cG9ydCBjb25zdCBJU19BQ1RJVkVfQ0xBU1MgPSAnaXMtYWN0aXZlJztcbmxldCBuZXh0TGlzdEl0ZW1JZCA9IDA7XG5leHBvcnQgdHlwZSBTdGF0dXNUeXBlID0gJ25lZ2F0aXZlJyB8ICdjcml0aWNhbCcgfCAncG9zaXRpdmUnIHwgJ2luZm9ybWF0aXZlJztcblxuZXhwb3J0IGNsYXNzIExpc3RJY29uQ29uZmlnIHtcbiAgICAvKiogVGhlIGljb24gbmFtZSB0byBkaXNwbGF5LiBTZWUgdGhlIGljb24gcGFnZSBmb3IgdGhlIGxpc3Qgb2YgaWNvbnNcbiAgICAgKiBoZXJlOiBodHRwczovL3NhcC5naXRodWIuaW8vZnVuZGFtZW50YWwtbmd4L2ljb25cbiAgICAgKiAqL1xuICAgIGdseXBoOiBJY29uQ29tcG9uZW50WydnbHlwaCddO1xuICAgIC8qKiB1c2VyJ3MgY3VzdG9tIGNsYXNzZXMgKi9cbiAgICBjbGFzczogSWNvbkNvbXBvbmVudFsnY2xhc3MnXSA9ICcnO1xuICAgIC8qKlxuICAgICAqIFRoZSBpY29uIGZvbnRcbiAgICAgKiBPcHRpb25zIGluY2x1ZGU6ICdTQVAtaWNvbnMnLCAnQnVzaW5lc3NTdWl0ZUluQXBwU3ltYm9scycgYW5kICdTQVAtaWNvbnMtVE5UJ1xuICAgICAqL1xuICAgIGZvbnQ6IEljb25Db21wb25lbnRbJ2ZvbnQnXSA9ICdTQVAtaWNvbnMnO1xuICAgIC8qKiBBcmlhLWxhYmVsIGZvciBJY29uLiAqL1xuICAgIGFyaWFMYWJlbDogSWNvbkNvbXBvbmVudFsnYXJpYUxhYmVsJ107XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0QXZhdGFyQ29uZmlnIHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNsYXNzID0gJyc7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBhcmlhTGFiZWw6IE51bGxhYmxlPHN0cmluZz4gPSBudWxsO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgYXJpYUxhYmVsbGVkYnk6IE51bGxhYmxlPHN0cmluZz4gPSBudWxsO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbGFiZWw6IE51bGxhYmxlPHN0cmluZz4gPSBudWxsO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2l6ZTogU2l6ZSA9ICdzJztcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdseXBoOiBOdWxsYWJsZTxzdHJpbmc+ID0gbnVsbDtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHpvb21HbHlwaDogTnVsbGFibGU8c3RyaW5nPiA9IG51bGw7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjaXJjbGUgPSBmYWxzZTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRyYW5zcGFyZW50ID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb250YWluID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwbGFjZWhvbGRlciA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgdGlsZSA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgYm9yZGVyID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb2xvckFjY2VudDogTnVsbGFibGU8Q29sb3JBY2NlbnQ+ID0gbnVsbDtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJhbmRvbSA9IGZhbHNlO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY2xpY2thYmxlID0gZmFsc2U7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBpbWFnZTogTnVsbGFibGU8c3RyaW5nPiA9IG51bGw7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBhbHRlckljb246IE51bGxhYmxlPHN0cmluZz4gPSBudWxsO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgYmFja3VwSW1hZ2U6IE51bGxhYmxlPHN0cmluZz4gPSBudWxsO1xufVxuXG4vKipcbiAqIEJhc2UgaW50ZXJmYWNlIGZvciBhIGxpc3QgdmFyaWFudCBkZWZpbml0aW9uLlxuICogQ2FwdHVyZXMgYSBsaXN0IGl0ZW0gdGVtcGxhdGUgZGVmaW5pdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJdGVtRGVmIHtcbiAgICB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0QWR2YW5jZWREZXNjcmlwdGlvbiB7XG4gICAgdGV4dDogc3RyaW5nO1xuICAgIGFyaWFMYWJlbD86IHN0cmluZztcbiAgICB0aXRsZT86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgTGlzdERlc2NyaXB0aW9uID0gc3RyaW5nIHwgTGlzdEFkdmFuY2VkRGVzY3JpcHRpb247XG5cbmV4cG9ydCBlbnVtIExJU1RfSVRFTV9UWVBFIHtcbiAgICBJVEVNID0gJ2l0ZW0nLFxuICAgIEdST1VQID0gJ2dyb3VwJyxcbiAgICBGT09URVIgPSAnZm9vdGVyJyxcbiAgICBIRUFERVIgPSAnaGVhZGVyJ1xufVxuXG5leHBvcnQgY2xhc3MgTW9kaWZ5SXRlbUV2ZW50IHtcbiAgICAvKiogTGlzdCBJdGVtIGNvbXBvbmVudCAqL1xuICAgIHNvdXJjZTogQmFzZUxpc3RJdGVtO1xuICAgIC8qKiBBY3Rpb24gKi9cbiAgICBhY3Rpb246ICdkZWxldGUnIHwgJ2VkaXQnO1xufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbZmRwSXRlbURlZl0nIH0pXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBjbGFzcyBMaXN0SXRlbURlZiBpbXBsZW1lbnRzIEl0ZW1EZWYge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoLyoqIEBkb2NzLXByaXZhdGUgKi8gcHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+KSB7fVxufVxuXG4vKipcbiAqIFRoaXMgY2xhc3MgY29udGFpbnMgY29tbW9uIHByb3BlcnRpZXMgdXNlZCBhY3Jvc3MgbGlzdCBJdGVtIGNvbXBvbmVudHMuXG4gKiB0aGlzIGNhbiBiZSBleHRlbmRlZCB0byByZWR1Y2UgdGhlIGNvZGUgZHVwbGljYXRpb24gYWNyb3NzIGxpc3QgSXRlbSBjb21wb25lbnRzLlxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBjbGFzcyBCYXNlTGlzdEl0ZW0gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3kge1xuICAgIC8qKiBkZWZpbmUgbGFiZWwgZm9yIHNjcmVlbiByZWFkZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbGxlZEJ5OiBzdHJpbmc7XG5cbiAgICAvKiogZGVmaW5lIGxldmVsIG9mIGl0ZW0gZm9yIHNjcmVlbiByZWFkZXIgKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMZXZlbDogbnVtYmVyO1xuXG4gICAgLyoqIGRlZmluZSBwb3NpdGlvbiBvZiBpdGVtIGZvciBzY3JlZW4gcmVhZGVyICovXG4gICAgQElucHV0KClcbiAgICBhcmlhUG9zaW5zZXQ6IG51bWJlcjtcblxuICAgIC8qKiBBdmF0YXIgY29tcG9uZW50IHByb3BlcnRpZXMuIEBzZWUgQXZhdGFyQ29tcG9uZW50IGZvciBtb3JlIGRldGFpbHMgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBhdmF0YXIodmFsdWU6IFBhcnRpYWw8TGlzdEF2YXRhckNvbmZpZz4gfCBzdHJpbmcpIHtcbiAgICAgICAgdmFsdWUgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8geyBpbWFnZTogdmFsdWUgfSA6IHZhbHVlO1xuICAgICAgICB0aGlzLl9hdmF0YXJDb25maWcgPSBtZXJnZShuZXcgTGlzdEF2YXRhckNvbmZpZygpLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IGF2YXRhcigpOiBMaXN0QXZhdGFyQ29uZmlnIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F2YXRhckNvbmZpZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqIFVzZSBgYXZhdGFyYCBwcm9wZXJ0eSBmb3IgbW9yZSBmbGV4aWJsZSBjb25maWd1cmF0aW9uLlxuICAgICAqXG4gICAgICogQGRlc2NyaXB0aW9uXG4gICAgICogQXR0cmlidXRlIHRvIGhvbGQgYXZhdGFyIHBhdGhcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBhdmF0YXJTcmModmFsdWU6IE51bGxhYmxlPHN0cmluZz4pIHtcbiAgICAgICAgdGhpcy5fYXZhdGFyQ29uZmlnID0gbWVyZ2UodGhpcy5fYXZhdGFyQ29uZmlnLCB7IGltYWdlOiB2YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBnZXQgYXZhdGFyU3JjKCk6IE51bGxhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hdmF0YXI/LmltYWdlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkXG4gICAgICogVXNlIGBhdmF0YXJgIHByb3BlcnR5IGZvciBtb3JlIGZsZXhpYmxlIGNvbmZpZ3VyYXRpb24uXG4gICAgICpcbiAgICAgKiBAZGVzY3JpcHRpb25cbiAgICAgKiBBdHRyaWJ1dGUgdG8gaG9sZCBhdmF0YXIgdGl0bGUgZm9yIGExMXlcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBhdmF0YXJUaXRsZSh2YWx1ZTogTnVsbGFibGU8c3RyaW5nPikge1xuICAgICAgICB0aGlzLl9hdmF0YXJDb25maWcgPSBtZXJnZSh0aGlzLl9hdmF0YXJDb25maWcsIHsgYXJpYUxhYmVsOiB2YWx1ZSB9KTtcbiAgICB9XG5cbiAgICBnZXQgYXZhdGFyVGl0bGUoKTogTnVsbGFibGU8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmF2YXRhcj8uYXJpYUxhYmVsO1xuICAgIH1cblxuICAgIC8qKiBhdHRyaWJ1dGUgdG8gaG9sZCBjb3VudGVyIHZhbHVlICovXG4gICAgQElucHV0KClcbiAgICBjb3VudGVyPzogc3RyaW5nO1xuXG4gICAgLyoqIERlc2NyaXB0aW9uIG9mIHRoZSB0aXRsZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGVzY3JpcHRpb246IE51bGxhYmxlPExpc3REZXNjcmlwdGlvbj47XG5cbiAgICAvKiogVG8gaW52ZXJ0IHRoZSBzdGF0dXMgb2Ygc2Vjb25kYXJ5IHRleHQgKi9cbiAgICBASW5wdXQoKVxuICAgIGludmVydGVkID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0aGVyZSBpcyBubyBkYXRhIGluc2lkZSBsaXN0IGl0ZW0gKi9cbiAgICBASW5wdXQoKVxuICAgIG5vRGF0YVRleHQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSB0eXBlIG9mIHRoZSBzZWNvbmRhcnkgdGV4dC5mZC1saXN0X19ieWxpbmUtcmlnaHQtLSpcbiAgICAgKiBDYW4gYmUgb25lIG9mICpwb3NpdGl2ZSosICpuZWdhdGl2ZSosICppbmZvcm1hdGl2ZSosICpjcml0aWNhbCosICpuZXV0cmFsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzdGF0dXNUeXBlPzogU3RhdHVzVHlwZTtcblxuICAgIC8qKiBhdHRyaWJ1dGUgdG8gaG9sZCBzZWNvbmRhcnkgdGV4dCovXG4gICAgQElucHV0KClcbiAgICBzZWNvbmRhcnk6IE51bGxhYmxlPExpc3REZXNjcmlwdGlvbj47XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGluZyB0aGlzIGZsYWcgY2F1c2VzIGZvcmNpbmcgc2Vjb25kYXJ5IGl0ZW0gZGlyZWN0aXZlIHRvIG5vdCB3cmFwIHRleHQsXG4gICAgICogaW5zdGVhZCBvZiB3cmFwcGluZyB0aGVyZSB3aWxsIGJlIHRleHQgdHJ1bmNhdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2Vjb25kYXJ5V3JhcD86IGJvb2xlYW47XG5cbiAgICAvKiogVG9vbHRpcCB0ZXh0IHRvIHNob3cgd2hlbiBmb2N1c2VkIGZvciBtb3JlIHRoYW4gdGltZW91dCB2YWx1ZSovXG4gICAgQElucHV0KClcbiAgICB0aXRsZT86IHN0cmluZztcblxuICAgIC8qKiBVc2VkIGZvciBwbGFjZWluZyBuYXZpZ2F0aW9uIExpbmsgKi9cbiAgICBASW5wdXQoKVxuICAgIGxpbms6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGluZyB0aGlzIGZsYWcgY2F1c2VzIGZvcmNpbmcgdGl0bGUgZGlyZWN0aXZlIHRvIG5vdCB3cmFwIHRleHQsXG4gICAgICogaW5zdGVhZCBvZiB3cmFwcGluZyB0aGVyZSB3aWxsIGJlIHRleHQgdHJ1bmNhdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGl0bGVXcmFwPzogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFNlZSBgaWNvbmAgaW5wdXQgcHJvcGVydHkgZm9yIG1vcmUgZmxleGlibGUgaWNvbiBjb25maWd1cmF0aW9uLlxuICAgICAqIEBkZXNjcmlwdGlvblxuICAgICAqIGF0dHJpYnV0ZSB0byBob2xkIHByaW1hcnkvdGl0bGUgaWNvblxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRpdGxlSWNvbih2YWx1ZTogTnVsbGFibGU8c3RyaW5nPikge1xuICAgICAgICB0aGlzLl9pY29uQ29uZmlnID0gbWVyZ2UobmV3IExpc3RJY29uQ29uZmlnKCksIHsgZ2x5cGg6IHZhbHVlLCBhcmlhTGFiZWw6IHZhbHVlIH0pO1xuICAgIH1cblxuICAgIGdldCB0aXRsZUljb24oKTogTnVsbGFibGU8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pY29uQ29uZmlnLmdseXBoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExpc3QgaXRlbSBpY29uIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgaWNvbih2YWx1ZTogUGFydGlhbDxMaXN0SWNvbkNvbmZpZz4pIHtcbiAgICAgICAgdGhpcy5faWNvbkNvbmZpZyA9IG1lcmdlKG5ldyBMaXN0SWNvbkNvbmZpZygpLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IGljb24oKTogTGlzdEljb25Db25maWcge1xuICAgICAgICByZXR1cm4gdGhpcy5faWNvbkNvbmZpZztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzZXRzIHRoZSBsaXN0IGl0ZW0gaW4gYm9sZCB0ZXh0XG4gICAgICogd2hpY2ggcmVzcHJlc2VudHMgdW5yZWFkIGRhdGFcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHVuUmVhZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gZGlzcGxheSB1bnJlYWQgbm90aWZpY2F0aW9uIGNpcmNsZS5cbiAgICAgKi9cbiAgICBnZXQgZGlzcGxheVVucmVhZE5vdGlmaWNhdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fbGlzdD8udW5yZWFkSW5kaWNhdG9yO1xuICAgIH1cblxuICAgIC8qKiByYWRpbyBidXR0b24gdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHZhbHVlOiBzdHJpbmc7XG5cbiAgICAvKiogQnkgZGVmYXVsdCBzZWxlY3Rpb24gbW9kZSBpcyAnbm9uZScgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWxlY3Rpb25Nb2RlKHZhbHVlOiBTZWxlY3Rpb25UeXBlKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fc2V0QXR0clJvbGUoKTtcbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0aW9uTW9kZSgpOiBTZWxlY3Rpb25UeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGU7XG4gICAgfVxuXG4gICAgLyoqIEJ5IGRlZmF1bHQgc2VsZWN0aW9uIG1vZGUgaXMgJ2FjdGl2ZScgKi9cbiAgICBASW5wdXQoKVxuICAgIGxpc3RUeXBlOiBMaXN0VHlwZSA9ICdhY3RpdmUnO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBOYXZpZ2F0aW9uIG1vZGUgaXMgaW5jbHVkZWQgdG8gbGlzdCBjb21wb25lbnRcbiAgICAgKiBmb3IgYWxsIHRoZSBpdGVtc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbmF2aWdhdGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIE5hdmlnYXRpb24gbW9kZSBpcyBpbmNsdWRlZCB0byBsaXN0IGNvbXBvbmVudFxuICAgICAqIG9ubHkgYSBzdWJzZXQgb2YgdGhlIGxpc3QgaXRlbXMgYXJlIG5hdmlnYWJsZVxuICAgICAqIHlvdSBzaG91bGQgaW5kaWNhdGUgdGhvc2UgYnkgZGlzcGxheWluZyBhIG5hdmlnYXRpb24gYXJyb3dcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG5hdmlnYXRpb25JbmRpY2F0b3IgPSBmYWxzZTtcblxuICAgIC8qKiByb2xlICovXG4gICAgQElucHV0KClcbiAgICByb2xlOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICogZXZlbnQgZW1pdHRlciBmb3Igc2VsZWN0ZWQgaXRlbVxuICAgICAqIHNlcHJhdGUgUFIgZm9yIGN1c3RvbSBldmVudFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGl0ZW1TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TW9kaWZ5SXRlbUV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgZW1pdHRlZCBmb3Igc2VsZWN0ZWQgaXRlbSB0aHJvdWdoIHRoZSBjaGVja2JveC5cbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBpdGVtQ2hlY2tib3hTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TW9kaWZ5SXRlbUV2ZW50PigpO1xuXG4gICAgLyoqIEV2ZW50IHNlbnQgd2hlbiBkZWxldGUsIGRldGFpbHMgb3IgYW55IG90aGVyIGFjdGlvbiBidXR0b25zIGFyZSBjbGlja2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgYnV0dG9uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8TW9kaWZ5SXRlbUV2ZW50PigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCdsaXN0SXRlbScsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIGxpc3RJdGVtOiBFbGVtZW50UmVmPEhUTUxMSUVsZW1lbnQ+O1xuXG4gICAgLyoqIEFjY2VzcyBjaGlsZCBlbGVtZW50LCBmb3IgY2hlY2tpbmcgbGluayBjb250ZW50Ki9cbiAgICBAVmlld0NoaWxkKCdsaW5rRWxlbWVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIGFuY2hvcjogRWxlbWVudFJlZjxIVE1MTGlua0VsZW1lbnQ+O1xuXG4gICAgLyoqIEFjY2VzcyBlZGl0IGJ1dHRvbiovXG4gICAgQFZpZXdDaGlsZCgnZWRpdCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIGVkaXQ6IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuXG4gICAgLyoqIEFjY2VzcyBkZWxldGUgYnV0dG9uKi9cbiAgICBAVmlld0NoaWxkKCdkZWxldGUnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBkZWxldGU6IEVsZW1lbnRSZWY8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKENoZWNrYm94Q29tcG9uZW50KVxuICAgIGNoZWNrYm94Q29tcG9uZW50OiBDaGVja2JveENvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChSYWRpb0J1dHRvbkNvbXBvbmVudClcbiAgICByYWRpb0J1dHRvbkNvbXBvbmVudDogUmFkaW9CdXR0b25Db21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF90eXBlOiBMSVNUX0lURU1fVFlQRSA9IExJU1RfSVRFTV9UWVBFLklURU07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciBCeSBsaW5lIG1vZGUgaXMgaW5jbHVkZWQgdG8gbGlzdCBjb21wb25lbnQsIGJ5IHdoaWNoXG4gICAgICogbGlzdCBpdGVtIHdpbGwgYWNjb21kYXRlIHRoZSBkYXRhIGluIDIgY29sdW1uXG4gICAgICovXG4gICAgX2hhc0J5TGluZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgbGlzdGl0ZW0gaGFzIHJvdyBsZXZlbCBzZWxlY3Rpb24gZW5hYmxlZFxuICAgICAqL1xuICAgIHNldCByb3dTZWxlY3Rpb24odmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fcm93U2VsZWN0aW9uID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3NldEF0dHJSb2xlKCk7XG4gICAgfVxuXG4gICAgZ2V0IHJvd1NlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd1NlbGVjdGlvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciBsaXN0aXRlbSBpcyBzZWxlY3RlZCBiaW5kZWQgdG8gdGVtcGxhdGVcbiAgICAgKi9cbiAgICBfc2VsZWN0ZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9zZWxlY3RlZEF0dHIoKTogYm9vbGVhbiB8IG51bGwge1xuICAgICAgICByZXR1cm4gIXRoaXMucm93U2VsZWN0aW9uICYmIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ25vbmUnID8gbnVsbCA6IHRoaXMuX3NlbGVjdGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBnZXQgdGhlIGZvY3VzZWQgZWxlbWVudCBmb3Iga2V5IG1hbmFnZXJcbiAgICAgKi9cbiAgICBfZm9jdXNlZDogYm9vbGVhbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF9saXN0SXRlbVJvbGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9sZSB8fCB0aGlzLl9kZWZhdWx0Um9sZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGFyaWFTZXRTaXplOiBPYnNlcnZhYmxlPG51bWJlcj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Jvd1NlbGVjdGlvbiA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kZWZhdWx0Um9sZSA9ICdsaXN0aXRlbSc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ZpZXdJbml0ZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdENvbXBvbmVudCA9IGluamVjdDxGZHBMaXN0PihGZHBMaXN0Q29tcG9uZW50KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYXZhdGFyQ29uZmlnOiBMaXN0QXZhdGFyQ29uZmlnID0gbmV3IExpc3RBdmF0YXJDb25maWcoKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaWNvbkNvbmZpZzogTGlzdEljb25Db25maWcgPSBuZXcgTGlzdEljb25Db25maWcoKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiByYWRpbyBidXR0b24gc2VsZWN0ZWQgdmFsdWUgYmluZGVkIHRvIHRlbXBsYXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uVmFsdWU6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGlvbk1vZGU6IFNlbGVjdGlvblR5cGUgPSAnbm9uZSc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwdWJsaWMgaXRlbUVsOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcHJvdGVjdGVkIF9saXN0Q29uZmlnOiBMaXN0Q29uZmlnLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEZEX0xJU1RfVU5SRUFEX0lORElDQVRPUikgcHJpdmF0ZSByZWFkb25seSBfbGlzdDogTGlzdFVucmVhZEluZGljYXRvclxuICAgICkge1xuICAgICAgICBzdXBlcihfY2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIH1cblxuICAgIC8qKiBTZWxlY3Rpb24gdmFsdWUgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzZWxlY3Rpb25WYWx1ZSh2YWx1ZTogTnVsbGFibGU8c3RyaW5nPikge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25WYWx1ZSA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5fc2VsZWN0aW9uVmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGlvblZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHRoaXMudmFsdWUgPT09IHRoaXMuX3NlbGVjdGlvblZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBzZWxlY3Rpb25WYWx1ZSgpOiBOdWxsYWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvblZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBPbiBpdGVtIGNsaWNrIGV2ZW50IHdpbGwgYmUgZW1pdHRlZFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJylcbiAgICBfb25JdGVtQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJvd1NlbGVjdGlvbiAmJiB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aScpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkID0gIXRoaXMuX3NlbGVjdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgTW9kaWZ5SXRlbUV2ZW50KCk7XG4gICAgICAgIGV2ZW50LnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHRoaXMuX2ZvY3VzZWQgPSAhdGhpcy5fZm9jdXNlZDtcbiAgICAgICAgdGhpcy5pdGVtU2VsZWN0ZWQuZW1pdChldmVudCk7XG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgX2hhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0VOVEVSLCBTUEFDRV0pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jaGVja2JveENvbXBvbmVudCB8fCB0aGlzLnJhZGlvQnV0dG9uQ29tcG9uZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9vbktleWJvYXJkQ2xpY2soZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hbmNob3I/Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcblxuICAgICAgICBpZiAodGhpcy5yb3dTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkID0gIXRoaXMuX3NlbGVjdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgJGV2ZW50ID0gbmV3IE1vZGlmeUl0ZW1FdmVudCgpO1xuICAgICAgICAkZXZlbnQuc291cmNlID0gdGhpcztcbiAgICAgICAgdGhpcy5pdGVtU2VsZWN0ZWQuZW1pdCgkZXZlbnQpO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSGFuZGxlciBmb3IgbW91c2UgZXZlbnRzXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICAgIF9vbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrYm94Q29tcG9uZW50ICYmICF0aGlzLmFuY2hvcikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNoZWNrYm94Q29tcG9uZW50LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBjbGlja2luZyBvbiB0aGUgY2hlY2tib3ggaXMgbm90IHN1cHByZXNzZWRcbiAgICAgICAgICAgICAgICAvLyBzbyB3ZSBzaG91bGQgb25seSBwcm9jZXNzIGNsaWNrcyBpZiBjbGlja2VkIG9uIHRoZSBsaXN0LWl0ZW0sIG5vdCBjaGVja2JveCBpdHNlbGZcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrYm94Q29tcG9uZW50Lm5leHRWYWx1ZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJhZGlvQnV0dG9uQ29tcG9uZW50Py52YWx1ZUNoYW5nZShldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgY29uc3QgJGV2ZW50ID0gbmV3IE1vZGlmeUl0ZW1FdmVudCgpO1xuICAgICAgICAkZXZlbnQuc291cmNlID0gdGhpcztcbiAgICAgICAgdGhpcy5pdGVtU2VsZWN0ZWQuZW1pdCgkZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBoZWxwcyB0byBhdm9pZCBtdWx0aSByb3dzIGFjdGl2ZSBjbGFzcyB3aXRoIG5hdmlnYXRpb25cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdmb2N1c291dCcsIFsnJGV2ZW50J10pXG4gICAgX29uQmx1cihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoaXNQcmVzZW50KHRoaXMuYW5jaG9yKSAmJiAhS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtFTlRFUiwgU1BBQ0VdKSkge1xuICAgICAgICAgICAgdGhpcy5hbmNob3IubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKElTX0FDVElWRV9DTEFTUyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogU2hvdyBuYXZpZ2F0aW9uIGZvciBzaW5nbGUgbGlzdFxuICAgICAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaWQgfHwgdGhpcy5pZCA9PT0gdGhpcy5kZWZhdWx0SWQpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSBgZmRwLWxpc3QtaXRlbS0ke25leHRMaXN0SXRlbUlkKyt9YDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaXRlbVNlbGVjdGVkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ZpZXdJbml0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9saXN0Q29tcG9uZW50Ll9zZXR1cExpc3RJdGVtKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUbyBkZXRlY3QgY2hhbmdlcyBmcm9tIHBhcmVudC1saXN0Ym94IHRvIGxpc3QgaXRlbVxuICAgICAqIGZvciBleGFtcGxlIHNpbmdsZSwgbXVsdGkgb3B0aW9uIHNlbGVjdGlvbiB0aG9zZSBkZXRhaWxzXG4gICAgICogd2lsbCBiZSBkZWR1Y3RlZCBpbiBsaXN0IGl0ZW1cbiAgICAgKi9cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtOiBOdWxsYWJsZTxIVE1MTElFbGVtZW50PiA9IHRoaXMuaXRlbUVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignbGknKTtcbiAgICAgICAgaWYgKCFjdXJyZW50SXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IGN1cnJlbnRJdGVtLnBhcmVudE5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBjdXJyZW50SXRlbS5wYXJlbnROb2RlO1xuICAgICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgcGFyZW50Tm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3RpdGxlJyk7XG4gICAgICAgICAgICBwYXJlbnROb2RlLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ3JlYXRlZCBmb2N1cyBvbiBsaXN0IGl0ZW0gb24gbW91c2VjbGljayxcbiAgICAgKiBVcCxkb3duIGFycm93IHByZXNzXG4gICAgICovXG4gICAgZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2dyYW1tYXRpY2FsbHkgc2V0IHNlbGVjdGVkIHN0YXRlIG9mIHRoZSBsaXN0IGl0ZW0uXG4gICAgICogQHBhcmFtIHNlbGVjdGVkIFdoZXRoZXIgdGhlIGxpc3QgaXRlbSBpcyBzZWxlY3RlZFxuICAgICAqL1xuICAgIHNldFNlbGVjdGVkKHNlbGVjdGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChzZWxlY3RlZCA9PT0gdGhpcy5fc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBNb2RpZnlJdGVtRXZlbnQoKTtcbiAgICAgICAgZXZlbnQuc291cmNlID0gdGhpcztcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBvbiBrZXlkb3duIGFwcGVuZCBhY3RpdmUgc3R5bGVzIG9uIGFjdGlvbmFibGUgaXRlbVxuICAgICAqL1xuICAgIF9vbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLmFuY2hvcikgJiYgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtFTlRFUiwgU1BBQ0VdKSkge1xuICAgICAgICAgICAgdGhpcy5hbmNob3IubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKElTX0FDVElWRV9DTEFTUyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogb24ga2V5dXAgcmVtb3ZlIGFjdGl2ZSBzdHlsZXMgZnJvbSBhY3Rpb25hYmxlIGl0ZW1cbiAgICAgKi9cbiAgICBfb25LZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoaXNQcmVzZW50KHRoaXMuYW5jaG9yKSAmJiBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0VOVEVSLCBTUEFDRV0pKSB7XG4gICAgICAgICAgICB0aGlzLmFuY2hvci5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoSVNfQUNUSVZFX0NMQVNTKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uQ2hlY2tib3hNb2RlbENoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgTW9kaWZ5SXRlbUV2ZW50KCk7XG4gICAgICAgIGV2ZW50LnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHRoaXMuaXRlbUNoZWNrYm94U2VsZWN0ZWQuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEhhbmRsZXMgYWN0aW9uIGJ1dHRvbiBjbGlja1xuICAgICAqL1xuICAgIF9vbkFjdGlvbkJ1dHRvbkNsaWNrKGFjdGlvbjogJ2RlbGV0ZScgfCAnZWRpdCcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgTW9kaWZ5SXRlbUV2ZW50KCk7XG4gICAgICAgIGV2ZW50LnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIGV2ZW50LmFjdGlvbiA9IGFjdGlvbjtcbiAgICAgICAgdGhpcy5idXR0b25DbGlja2VkLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBIYW5kbGVzIGFjdGlvbiBidXR0b24gY2xpY2sgb24ga2V5IHByZXNzXG4gICAgICovXG4gICAgX29uS2V5QnV0dG9uQ2xpY2soZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGFjdGlvbjogJ2RlbGV0ZScgfCAnZWRpdCcpOiB2b2lkIHtcbiAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbRU5URVIsIFNQQUNFXSkpIHtcbiAgICAgICAgICAgIHRoaXMuX29uQWN0aW9uQnV0dG9uQ2xpY2soYWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2lzQWR2YW5jZWRUZXh0KHRleHQ6IExpc3REZXNjcmlwdGlvbik6IHRleHQgaXMgTGlzdEFkdmFuY2VkRGVzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRleHQgIT09ICdzdHJpbmcnICYmICEhdGV4dC50ZXh0O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb25LZXlib2FyZENsaWNrKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hlY2tib3hDb21wb25lbnQ/Lm5leHRWYWx1ZSgpO1xuICAgICAgICB0aGlzLnJhZGlvQnV0dG9uQ29tcG9uZW50Py52YWx1ZUNoYW5nZShldmVudCk7XG5cbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIGNvbnN0ICRldmVudCA9IG5ldyBNb2RpZnlJdGVtRXZlbnQoKTtcbiAgICAgICAgJGV2ZW50LnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHRoaXMuaXRlbVNlbGVjdGVkLmVtaXQoJGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldEF0dHJSb2xlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kZWZhdWx0Um9sZSA9XG4gICAgICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbiB8fCB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnIHx8IHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpJ1xuICAgICAgICAgICAgICAgID8gJ29wdGlvbidcbiAgICAgICAgICAgICAgICA6ICdsaXN0aXRlbSc7XG5cbiAgICAgICAgaWYgKHRoaXMuX3ZpZXdJbml0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -261,10 +261,16 @@ export class ListComponent extends CollectionBaseInput {
261
261
  this._multiSelect = false;
262
262
  }
263
263
  this._selectionModel = new SelectionModel(this._multiSelect, this.selectedItems);
264
- this._selectionModel.changed.pipe(takeUntil(this._destroyed)).subscribe(() => {
264
+ this._selectionModel.changed.pipe(takeUntil(this._destroyed)).subscribe((selection) => {
265
265
  this.selectedItems = this._selectionModel.selected;
266
266
  const event = new SelectionChangeEvent();
267
267
  event.selectedItems = this.selectedItems;
268
+ if (selection.added?.length) {
269
+ event.added = selection.added[0];
270
+ }
271
+ if (selection.removed?.length) {
272
+ event.removed = selection.removed[0];
273
+ }
268
274
  this.stateChanges.next(event);
269
275
  this.selectedItemChange.emit(event);
270
276
  });
@@ -385,6 +391,10 @@ export class ListComponent extends CollectionBaseInput {
385
391
  this.stateChanges.next(item);
386
392
  }
387
393
  /** @hidden */
394
+ _clearSelection() {
395
+ this._selectionModel.clear();
396
+ }
397
+ /** @hidden */
388
398
  _setItems() {
389
399
  if (this._dsItems.length !== null && this.itemSize !== 0) {
390
400
  this._startIndex = 0;
@@ -739,4 +749,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
739
749
  type: HostListener,
740
750
  args: ['click', ['$event']]
741
751
  }] } });
742
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvbGlzdC9saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9saXN0L2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEYsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixJQUFJLEVBQ0osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsSUFBSSxFQUNKLFFBQVEsRUFDUixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRixPQUFPLEVBQ0gsZUFBZSxFQUNmLFVBQVUsRUFDVixPQUFPLEVBRVAsY0FBYyxFQUNkLE1BQU0sRUFDTixjQUFjLEVBQ2QsWUFBWSxFQUNaLEdBQUcsRUFDSCxTQUFTLEVBQ1QsRUFBRSxFQUNGLFNBQVMsRUFDVCxTQUFTLEVBQ1osTUFBTSxN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QUFVLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDO2dCQUszQyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsd0JBQXdCO2dCQUt0QyxTQUFTO3NCQURSLGVBQWU7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFnSnRFLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nICovXG5pbXBvcnQgeyBGb2N1c0tleU1hbmFnZXIsIExpdmVBbm5vdW5jZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBFTlRFUiwgU1BBQ0UsIFRBQiwgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2VsZixcbiAgICBTa2lwU2VsZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nQ29udHJvbCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRkRfRk9STV9GSUVMRCwgRkRfRk9STV9GSUVMRF9DT05UUk9MIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBCZWhhdmlvclN1YmplY3QsXG4gICAgT2JzZXJ2YWJsZSxcbiAgICBTdWJqZWN0LFxuICAgIFN1YnNjcmlwdGlvbixcbiAgICBhc3luY1NjaGVkdWxlcixcbiAgICBmaWx0ZXIsXG4gICAgZmlyc3RWYWx1ZUZyb20sXG4gICAgaXNPYnNlcnZhYmxlLFxuICAgIG1hcCxcbiAgICBvYnNlcnZlT24sXG4gICAgb2YsXG4gICAgc3RhcnRXaXRoLFxuICAgIHN3aXRjaE1hcFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgS2V5VXRpbCwgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBGRF9MSVNUX1VOUkVBRF9JTkRJQ0FUT1IsIExpc3RVbnJlYWRJbmRpY2F0b3IgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGlzdCc7XG5pbXBvcnQgeyBGRF9MQU5HVUFHRSwgRmRMYW5ndWFnZSwgVHJhbnNsYXRpb25SZXNvbHZlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQge1xuICAgIEFycmF5TGlzdERhdGFTb3VyY2UsXG4gICAgQ29sbGVjdGlvbkJhc2VJbnB1dCxcbiAgICBMaXN0RGF0YVNvdXJjZSxcbiAgICBPYnNlcnZhYmxlTGlzdERhdGFTb3VyY2UsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sLFxuICAgIGlzQmxhbmssXG4gICAgaXNEYXRhU291cmNlLFxuICAgIGlzUHJlc2VudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBCYXNlTGlzdEl0ZW0sIExJU1RfSVRFTV9UWVBFLCBMaXN0SXRlbURlZiB9IGZyb20gJy4vYmFzZS1saXN0LWl0ZW0nO1xuaW1wb3J0IHsgRmRwTGlzdENvbXBvbmVudCB9IGZyb20gJy4vZmRwTGlzdENvbXBvbmVudC50b2tlbic7XG5pbXBvcnQgeyBMaXN0Q29uZmlnIH0gZnJvbSAnLi9saXN0LmNvbmZpZyc7XG5pbXBvcnQgeyBMb2FkTW9yZUNvbnRlbnRDb250ZXh0LCBMb2FkTW9yZUNvbnRlbnREaXJlY3RpdmUgfSBmcm9tICcuL2xvYWQtbW9yZS1jb250ZW50LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGZHBMaXN0LCBGZHBMaXN0RGF0YVNvdXJjZSwgTGlzdFR5cGUsIFNlbGVjdGlvblR5cGUgfSBmcm9tICcuL21vZGVscy9saXN0JztcblxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbkNoYW5nZUV2ZW50IHtcbiAgICAvKiogU2VsZWN0ZWQgaXRlbXMgKi9cbiAgICBzZWxlY3RlZEl0ZW1zOiBCYXNlTGlzdEl0ZW1bXTtcbiAgICAvKiogSW5kZXggKi9cbiAgICBpbmRleDogbnVtYmVyO1xufVxuXG5sZXQgbmV4dExpc3RJZCA9IDA7XG5cbi8qKlxuICogVGhlIExpc3QgY29tcG9uZW50IHJlcHJlc2VudHMgYSBjb250YWluZXIgZm9yIGxpc3QgaXRlbSB0eXBlcy5cbiAqIEl0IGlzIHVzZWQgdG8gZGlzcGxheSBhIGxpc3QgZmVhdHVyZXMuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLWxpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHN0eWxlVXJsczogWycuL2xpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBGRF9GT1JNX0ZJRUxEX0NPTlRST0wsIHVzZUV4aXN0aW5nOiBMaXN0Q29tcG9uZW50LCBtdWx0aTogdHJ1ZSB9LFxuICAgICAgICB7IHByb3ZpZGU6IEZkcExpc3RDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBMaXN0Q29tcG9uZW50IH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZEX0xJU1RfVU5SRUFEX0lORElDQVRPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBMaXN0Q29tcG9uZW50XG4gICAgICAgIH1cbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1thdHRyLnRhYmluZGV4XSc6ICctMSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIExpc3RDb21wb25lbnQ8VD5cbiAgICBleHRlbmRzIENvbGxlY3Rpb25CYXNlSW5wdXRcbiAgICBpbXBsZW1lbnRzIExpc3RVbnJlYWRJbmRpY2F0b3IsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBGZHBMaXN0PEJhc2VMaXN0SXRlbT5cbntcbiAgICAvKiogIEFuIGFycmF5IHRoYXQgaG9sZHMgYSBsaXN0IG9mIGFsbCBzZWxlY3RlZCBpdGVtcy4gKiovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3RlZEl0ZW1zOiBCYXNlTGlzdEl0ZW1bXTtcblxuICAgIC8qKiBkZWZpbmUgc2l6ZSBvZiBpdGVtcyBmb3Igc2NyZWVuIHJlYWRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFTZXRzaXplOiBudW1iZXI7XG5cbiAgICAvKiogRGVmaW5lcyB3aGV0aGVyIGl0ZW1zIGFyZSBtdWx0aXNlbGVjdGFibGUgZm9yIHNjcmVlbiByZWFkZXIuICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTXVsdGlzZWxlY3RhYmxlOiBib29sZWFuO1xuXG4gICAgLyoqIFRpdGxlIHVzZWQgb24gYnV0dG9uIHdoZW4gZGF0YSBsb2FkcyBvbiBidXR0b24gY2xpY2suICovXG4gICAgQElucHV0KClcbiAgICBsb2FkVGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBMYWJlbCB1c2VkIG9uIGFubm91bmNlIG1lc3NhZ2Ugb2YgZGF0YSB3YXMgbG9hZGVkIGZvciBzY3JlZW4gcmVhZGVycy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRpbmdMYWJlbCA9ICcnO1xuXG4gICAgLyoqIFdhaXQgdGltZSBmb3IgbmV3IGl0ZW1zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGVsYXlUaW1lOiBudW1iZXI7XG5cbiAgICAvKiogSXRlbXMgdG8gYmUgbG9hZGVkIGF0IG9uY2UuIEludGluaXR5IChubyBsaW1pdCkgYnkgZGVmYXVsdC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGl0ZW1TaXplID0gSW5maW5pdHk7XG5cbiAgICAvKiogRW5hYmxlcyBsYXp5IGxvYWRNb3JlIG9mIGRhdGEuICovXG4gICAgQElucHV0KClcbiAgICBsb2FkTW9yZTogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgZGF0YSBsb2FkIG9uIHNjcm9sbCBmb3IgdHJ1ZVxuICAgICAqIGZhbHNlOiBlbmFibGVzIGRhdGEgbG9hZGluZyBvbiBidXR0b24gY2xpY2suXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBsb2FkT25TY3JvbGw6IGJvb2xlYW47XG5cbiAgICAvKiogZGVmaW5lIHRoZSByb2xlIHRvIGN1c3RvbSByZXF1aXJlbWVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHJvbGUgPSAnbGlzdCc7XG5cbiAgICAvKiogTGlzdFR5cGUgJ2luYWN0aXZlJyB8ICdhY3RpdmUnIHwgJ25hdmlnYXRpb24nIHwgJ2RldGFpbCcgKi9cbiAgICBASW5wdXQoKVxuICAgIGxpc3RUeXBlOiBMaXN0VHlwZSA9ICdhY3RpdmUnO1xuXG4gICAgLyoqIE1heCBoZWlnaHQgZm9yIHZpZXdwb3J0IHRvIGRpc3BsYXkgc2Nyb2xsLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF4SGVpZ2h0OiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciBsaXN0IGNvbXBvbmVudCBoYXMgcmVtb3ZlZCBib3JkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9Cb3JkZXIgPSBmYWxzZTtcblxuICAgIC8qKiBTY3JvbGwgb2Zmc2V0IHBlcmNlbnRhZ2UgdG8gdHJpZ2dlciBzY3JvbGwgZXZlbnQuICovXG4gICAgQElucHV0KClcbiAgICBzY3JvbGxPZmZzZXRQZXJjZW50YWdlOiBudW1iZXI7XG5cbiAgICAvKiogRWVuYWJsZXMgc2VsZWN0aW9uIHN0eWxlcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGlvbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHR5cGUgb2YgdGhlIHNlbGVjdGlvbi4gVHlwZXMgaW5jbHVkZTpcbiAgICAgKiAnbm9uZSd8ICdtdWx0aScgfCAnc2luZ2xlJ3wnZGVsZXRlJy5cbiAgICAgKiBMZWF2ZSBlbXB0eSBmb3IgZGVmYXVsdCAoKS4nXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBzZXQgdG8gJ25vbmUnLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0aW9uTW9kZTogU2VsZWN0aW9uVHlwZSA9ICdub25lJztcblxuICAgIC8qKiBzZXR0ZXIgYW5kIGdldHRlciBmb3IgcmFkaW8gYnV0dG9uIGFuZCBjaGVja2JveC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIHN1cGVyLnNldFZhbHVlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciByb3cgbGV2ZWwgU2VsZWN0aW9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHJvd1NlbGVjdGlvbih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9yb3dTZWxlY3Rpb24gPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuX3Jvd1NlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fdWxFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdmZC1saXN0LS1zZWxlY3Rpb24tcm93Jyk7XG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0ZWQgJiYgdGhpcy5oYXNPYmplY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5yZW1vdmUoJ2ZkLWxpc3QtLXNlbGVjdGlvbi1yb3cnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCByb3dTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dTZWxlY3Rpb247XG4gICAgfVxuXG4gICAgLyoqIERhdGFzb3VyY2UgZm9yIHN1Z2dlc3Rpb24gbGlzdC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBkYXRhU291cmNlKHZhbHVlOiBGZHBMaXN0RGF0YVNvdXJjZTxUPikge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemVEUyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZGF0YVNvdXJjZSgpOiBGZHBMaXN0RGF0YVNvdXJjZTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKiBzZXR0ZXIgYW5kIGdldHRlciBmb3IgX25hdmlnYXRlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBuYXZpZ2F0ZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fbmF2aWdhdGVkID0gdmFsdWU7XG5cbiAgICAgICAgY29uc3QgY2xhc3NMaXN0ID0gWydmZC1saXN0LS1uYXZpZ2F0aW9uJ107XG4gICAgICAgIGlmICh0aGlzLmhhc09iamVjdCkge1xuICAgICAgICAgICAgY2xhc3NMaXN0LnB1c2goJ2ZkLWxpc3QtLW5hdmlnYXRpb24tb2JqZWN0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoLi4uY2xhc3NMaXN0KTtcbiAgICB9XG5cbiAgICBnZXQgbmF2aWdhdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fbmF2aWdhdGVkO1xuICAgIH1cblxuICAgIC8qKiBzZXR0ZXIgYW5kIGdldHRlciBmb3IgX25hdmlnYXRpb25JbmRpY2F0b3IuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbmF2aWdhdGlvbkluZGljYXRvcih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9uYXZpZ2F0aW9uSW5kaWNhdG9yID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX3VsRWxlbWVudD8uY2xhc3NMaXN0LmFkZCgnZmQtbGlzdC0tbmF2aWdhdGlvbi1pbmRpY2F0aW9uJyk7XG4gICAgfVxuXG4gICAgZ2V0IG5hdmlnYXRpb25JbmRpY2F0b3IoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0aW9uSW5kaWNhdG9yO1xuICAgIH1cblxuICAgIC8qKiBzZXR0ZXIgYW5kIGdldHRlciBmb3IgaGFzQnlMaW5lLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGhhc0J5TGluZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9oYXNCeUxpbmUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdWxFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdmZC1saXN0LS1ieWxpbmUnKTtcbiAgICB9XG5cbiAgICBnZXQgaGFzQnlMaW5lKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzQnlMaW5lO1xuICAgIH1cblxuICAgIC8qKiBzZXR0ZXIgYW5kIGdldHRlciBmb3IgaGFzT2JqZWN0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGhhc09iamVjdCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9oYXNPYmplY3QgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdWxFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdmZC1vYmplY3QtbGlzdCcpO1xuICAgIH1cblxuICAgIGdldCBoYXNPYmplY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNPYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSB1bnJlYWQgbm90aWZpY2F0aW9uIGluZGljYXRvci4gKi9cbiAgICBASW5wdXQoKVxuICAgIHVucmVhZEluZGljYXRvciA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gaW50ZXJjZXB0IHRhYiBrZXkgbmF2aWdhdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGludGVyY2VwdFRhYktleSA9IHRydWU7XG5cbiAgICAvKiogRXZlbnQgdGhyb3duLCB3aGVuIHNlbGVjdGVkIGl0ZW0gaXMgY2hhbmdlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNlbGVjdGVkSXRlbUNoYW5nZTogRXZlbnRFbWl0dGVyPFNlbGVjdGlvbkNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0aW9uQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgICAvKiogQWNjZXNzIGNoaWxkIGVsZW1lbnQsIGZvciBjaGVja2luZyBsaW5rIGNvbnRlbnQgKi9cbiAgICBAVmlld0NoaWxkKCdsaW5rJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gICAgYW5jaG9yOiBFbGVtZW50UmVmPEhUTUxMaW5rRWxlbWVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBMaXN0SXRlbURlZikpXG4gICAgbGlzdEl0ZW1EZWY6IExpc3RJdGVtRGVmO1xuXG4gICAgLyoqIExvYWQgTW9yZSBMaXN0IGl0ZW0gY29udGVudCAqL1xuICAgIEBDb250ZW50Q2hpbGQoTG9hZE1vcmVDb250ZW50RGlyZWN0aXZlKVxuICAgIGxvYWRNb3JlQ29udGVudDogTG9hZE1vcmVDb250ZW50RGlyZWN0aXZlO1xuXG4gICAgLyoqIENoaWxkIGl0ZW1zIG9mIHRoZSBMaXN0LiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oZm9yd2FyZFJlZigoKSA9PiBCYXNlTGlzdEl0ZW0pLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gICAgbGlzdEl0ZW1zOiBRdWVyeUxpc3Q8QmFzZUxpc3RJdGVtPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IF91bEVsZW1lbnQoKTogTnVsbGFibGU8SFRNTFVMaXN0RWxlbWVudD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndWwnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG8gZGlzcGxheSBsb2FkaW5nIHN5bWJvbFxuICAgICAqL1xuICAgIF9sb2FkaW5nID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIFRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBmaXJzdCBsb2FkaW5nIHdoZW4gc2tlbGV0b25zIGJlIHNob3duIGFuZCBzdWJzZXF1ZW50IGxvYWRpbmdzIHdoZW4gYnVzeSBpbmRpY2F0b3IgYmUgc2hvd25cbiAgICAgKi9cbiAgICBfZmlyc3RMb2FkaW5nRG9uZSA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIGtleU1hbmdlciB0byBoYW5kbGUga2V5Ym9yZCBldmVudHMgdXNlZCBpbiB0ZW1wbGF0ZVxuICAgICAqL1xuICAgIF9rZXlNYW5hZ2VyOiBOdWxsYWJsZTxGb2N1c0tleU1hbmFnZXI8QmFzZUxpc3RJdGVtPj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pdGVtczogVFtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9kZXN0cm95ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfYXJpYVNldFNpemU6IE9ic2VydmFibGU8bnVtYmVyPiA9IG5ldyBPYnNlcnZhYmxlKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfZGF0YVNvdXJjZTogTGlzdERhdGFTb3VyY2U8VD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RyYW5zbGF0aW9uUmVzb2x2ZXIgPSBuZXcgVHJhbnNsYXRpb25SZXNvbHZlcigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgTmF2aWdhdGlvbiBtb2RlIGlzIGluY2x1ZGVkIHRvIGxpc3QgY29tcG9uZW50XG4gICAgICogZm9yIGFsbCB0aGUgaXRlbXNcbiAgICAgKi9cbiAgICBwcml2YXRlIF9uYXZpZ2F0ZWQ6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciBCeSBsaW5lIGlzIHByZXNlbnQgaW4gbGlzdCBpdGVtXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFzQnlMaW5lOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgTmF2aWdhdGlvbiBtb2RlIGlzIGluY2x1ZGVkIHRvIGxpc3QgY29tcG9uZW50XG4gICAgICogb25seSBhIHN1YnNldCBvZiB0aGUgbGlzdCBpdGVtcyBhcmUgbmF2aWdhYmxlXG4gICAgICogeW91IHNob3VsZCBpbmRpY2F0ZSB0aG9zZSBieSBkaXNwbGF5aW5nIGEgbmF2aWdhdGlvbiBhcnJvd1xuICAgICAqL1xuICAgIHByaXZhdGUgX25hdmlnYXRpb25JbmRpY2F0b3I6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciBvYmplY3QgcHJlc2VudCBpbiBsaXN0IGl0ZW1cbiAgICAgKi9cbiAgICBwcml2YXRlIF9oYXNPYmplY3Q6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVmVyZmllcyBwYXJ0aWFsIG5hdmlnYXRpb24gZW5hYmxlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfcGFydGlhbE5hdmlnYXRpb24gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUaGUgbW9kZWwgYmFja2luZyBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGlvbk1vZGVsOiBTZWxlY3Rpb25Nb2RlbDxCYXNlTGlzdEl0ZW0+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFdoZXRoZXIgbGlzdCBjb21wb25lbnQgaGFzIG11bHRpc2VsZWN0aW9uXG4gICAgICogYmluZGluZyBpbiB0ZW1wYXRlIHRvIGFwcGVuZCBjbGFzc1xuICAgICAqL1xuICAgIHByaXZhdGUgX211bHRpU2VsZWN0ID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkdmFsdWU6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciByb3cgbGV2ZWwgc2VsZWN0aW9uIG1vZGUgaXMgZW5hYmxlZCB0byBsaXN0IGNvbXBvbmVudFxuICAgICAqIGZvciBhbGwgdGhlIGl0ZW1zXG4gICAgICovXG4gICAgcHJpdmF0ZSBfcm93U2VsZWN0aW9uOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gVG8gc3RvcmUgKi9cbiAgICBwcml2YXRlIF90ZW1wSXRlbXM6IFRbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdGFydEluZGV4ID0gMDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGFzdEluZGV4ID0gdGhpcy5pdGVtU2l6ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZHNJdGVtczogVFtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogZm9yIGRhdGEgc291cmNlIGhhbmRsaW5nXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZHNTdWJzY3JpcHRpb246IE51bGxhYmxlPFN1YnNjcmlwdGlvbj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xhbmd1YWdlOiBGZExhbmd1YWdlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hZnRlclZpZXdJbml0JCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgX2xpdmVBbm5vdW5jZXI6IExpdmVBbm5vdW5jZXIsXG4gICAgICAgIEBJbmplY3QoRkRfTEFOR1VBR0UpIHByaXZhdGUgcmVhZG9ubHkgX2xhbmd1YWdlJDogT2JzZXJ2YWJsZTxGZExhbmd1YWdlPixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIG5nRm9ybTogTmdGb3JtLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBASG9zdCgpIEBJbmplY3QoRkRfRk9STV9GSUVMRCkgZm9ybUZpZWxkOiBQbGF0Zm9ybUZvcm1GaWVsZCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgQEhvc3QoKSBASW5qZWN0KEZEX0ZPUk1fRklFTERfQ09OVFJPTCkgZm9ybUNvbnRyb2w6IFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbCxcbiAgICAgICAgcHJvdGVjdGVkIF9saXN0Q29uZmlnPzogTGlzdENvbmZpZ1xuICAgICkge1xuICAgICAgICBzdXBlcihfY2hhbmdlRGV0ZWN0b3JSZWYsIGVsZW1lbnRSZWYsIG5nQ29udHJvbCwgY29udHJvbENvbnRhaW5lciwgbmdGb3JtLCBmb3JtRmllbGQsIGZvcm1Db250cm9sKTtcbiAgICAgICAgdGhpcy5faW5pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBvbiBVcGRhdGUgbmF2Z2lhdGlvbiBzdHlsZXMgZm9yIG5vbiBuYXZpZ2F0ZWQgaXRlbXNcbiAgICAgKiBldmVudDphbnkgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvblxuICAgICAqIHNlcHJhdGUgUFIgZm9yIGN1c3RvbSBldmVudFxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICBfdXBkYXRlTmF2aWdhdGlvbihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkSXRlbUlkOiBOdWxsYWJsZTxzdHJpbmc+ID0gJzAnO1xuICAgICAgICBjb25zdCBlbGVtZW50OiBOdWxsYWJsZTxIVE1MRWxlbWVudD4gPSBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCA/IGV2ZW50LnRhcmdldCA6IG51bGw7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGVsZW1lbnQ/LmNsb3Nlc3QoJy5mZC1saXN0X19pdGVtJyk7XG4gICAgICAgIGlmIChpc1ByZXNlbnQocGFyZW50KSkge1xuICAgICAgICAgICAgc2VsZWN0ZWRJdGVtSWQgPSBwYXJlbnQ/LmdldEF0dHJpYnV0ZSgnaWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpdGVtLmFuY2hvcj8ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1uYXZpZ2F0ZWQnKTtcblxuICAgICAgICAgICAgaWYgKGl0ZW0uX2ZvY3VzZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyPy51cGRhdGVBY3RpdmVJdGVtKGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZWwgPSBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBldmVudC50YXJnZXQ7XG4gICAgICAgIGlmICghZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpbmtFbGVtZW50ID0gZWwucXVlcnlTZWxlY3RvcignYScpO1xuICAgICAgICBpZiAoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnYScpIHtcbiAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2lzLW5hdmlnYXRlZCcpO1xuICAgICAgICB9IGVsc2UgaWYgKGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2xpJyAmJiAhIWxpbmtFbGVtZW50KSB7XG4gICAgICAgICAgICBsaW5rRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpcy1uYXZpZ2F0ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86IHNlbGVjdGlvbiBtYW5hZ2VtZW50IHNob3VsZCBiZSBjb21wbGV0ZWx5IGNoYW5nZWQgaHR0cHM6Ly9naXRodWIuY29tL1NBUC9mdW5kYW1lbnRhbC1uZ3gvaXNzdWVzLzgwMDhcbiAgICAgICAgaWYgKHRoaXMucm93U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVSb3dTZWxlY3Qoc2VsZWN0ZWRJdGVtSWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVNpbmdsZVNlbGVjdChldmVudCwgc2VsZWN0ZWRJdGVtSWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpJykge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlTXVsdGlTZWxlY3Qoc2VsZWN0ZWRJdGVtSWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEdldCBjb250ZXh0IGZvciBsb2FkIG1vcmUgYnV0dG9uICovXG4gICAgZ2V0TG9hZE1vcmVDb250ZW50Q29udGV4dCgpOiBMb2FkTW9yZUNvbnRlbnRDb250ZXh0IHtcbiAgICAgICAgY29uc3QgJGltcGxpY2l0ID0ge1xuICAgICAgICAgICAgbG9hZFRpdGxlOiB0aGlzLmxvYWRUaXRsZSxcbiAgICAgICAgICAgIGxvYWRpbmc6IHRoaXMuX2xvYWRpbmcsXG4gICAgICAgICAgICBsb2FkaW5nTGFiZWw6ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2xvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xhbmd1YWdlJC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKChsYW5ndWFnZSkgPT4gdGhpcy5fdHJhbnNsYXRpb25SZXNvbHZlci5yZXNvbHZlKGxhbmd1YWdlLCAncGxhdGZvcm1MaXN0LmxvYWRpbmdBcmlhTGFiZWwnKSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMubG9hZGluZ0xhYmVsKTtcbiAgICAgICAgICAgIH0pKCksXG4gICAgICAgICAgICBsYXN0Q2h1bms6IHtcbiAgICAgICAgICAgICAgICBzdGFydDogdGhpcy5fc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICBlbmQ6IHRoaXMuX2xhc3RJbmRleFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRvdGFsOiB0aGlzLl9kc0l0ZW1zLmxlbmd0aFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJGltcGxpY2l0LFxuICAgICAgICAgICAgLi4uJGltcGxpY2l0XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEluaXRpYWxpemF0aW9uIG9mIHRoZSBsaXMgY29tcG9uZW50IHdpdGggc2VsZWN0aW9uIG1vZGVcbiAgICAgKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0SXRlbXMoKTtcblxuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KHRoaXMuX2l0ZW1zKTtcbiAgICAgICAgdGhpcy5pZCA9IGBmZHAtbGlzdC0ke25leHRMaXN0SWQrK31gO1xuXG4gICAgICAgIC8vIHVzaW5nIHNlbGVjdGlvbiBNb2RlbCBmb3IgbXVsdGlzZWxlY3RcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpJykge1xuICAgICAgICAgICAgdGhpcy5fbXVsdGlTZWxlY3QgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5hcmlhTXVsdGlzZWxlY3RhYmxlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX211bHRpU2VsZWN0ID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbCA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxCYXNlTGlzdEl0ZW0+KHRoaXMuX211bHRpU2VsZWN0LCB0aGlzLnNlbGVjdGVkSXRlbXMpO1xuXG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNoYW5nZWQucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdGVkO1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgU2VsZWN0aW9uQ2hhbmdlRXZlbnQoKTtcbiAgICAgICAgICAgIGV2ZW50LnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXM7XG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogS2V5Ym9hcmQgbWFuYWdlciBvbiBsaXN0IGl0ZW1zLCBzZXQgdmFsdWVzIHdoZW4gcGFzc2VkIHZpYSBhcnJheVxuICAgICAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWZ0ZXJWaWV3SW5pdCQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5fa2V5TWFuYWdlciA9IG5ldyBGb2N1c0tleU1hbmFnZXI8QmFzZUxpc3RJdGVtPih0aGlzLmxpc3RJdGVtcykud2l0aFdyYXAoKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1zLmNoYW5nZXNcbiAgICAgICAgICAgICAgICAucGlwZShzdGFydFdpdGgodGhpcy5saXN0SXRlbXMpLCBvYnNlcnZlT24oYXN5bmNTY2hlZHVsZXIpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fdXBkYXRlTGlzdEl0ZW1zKCkpXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgaW5kaWNhdG9yID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignZmQtYnVzeS1pbmRpY2F0b3InKTtcbiAgICAgICAgaW5kaWNhdG9yPy5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcblxuICAgICAgICBpZiAoaXNEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgdGhpcy5fa2V5TWFuYWdlcj8uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBoYW5kbGluZSBrZXlib2FyZCBvcGVyYXRpb25zXG4gICAgICogaW4gdGVtcGxhdGUgb24gbGlzdCBhbmQgbGlzdCBpdGVtc1xuICAgICAqL1xuICAgIF9oYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogTnVsbGFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAoIXRoaXMuX2tleU1hbmFnZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVEFCKSAmJiAhdGhpcy5pbnRlcmNlcHRUYWJLZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykgfHwgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBFTlRFUikgfHwgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFNQQUNFKSkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTmF2aWdhdGlvbihldmVudCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZXRDdXJyZW50QWN0aXZlSXRlbUluZGV4KGFjdGl2ZUl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2tleU1hbmFnZXI/LnNldEFjdGl2ZUl0ZW0oYWN0aXZlSXRlbUluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogYmluZGVkIGluIHRlbXBsYXRlIG9uIHNjcm9sbFxuICAgICAqL1xuICAgIF9zY3JvbGxIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2xvYWRpbmcgJiYgdGhpcy5sb2FkT25TY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuX2dldE1vcmVEYXRhKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogbG9hZCBtb3JlIG9uIGVudGVyIG9yIHNwYWNlIHByZXNzXG4gICAgICovXG4gICAgX2xvYWRPbktleVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0VOVEVSLCBTUEFDRV0pKSB7XG4gICAgICAgICAgICB0aGlzLl9nZXRNb3JlRGF0YSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEhhbmRsZXMgbGF6eSBsb2FkaW5nIGRhdGFcbiAgICAgKiB1c2VkIGluIHRlbXBsYXRlXG4gICAgICogb25zY3JvbGwgYW5kIG9uIG1vcmUgYnV0dG9uIGNsaWNrXG4gICAgICovXG4gICAgX2dldE1vcmVEYXRhKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgb2YodGhpcy5fbG9hZE5ld0l0ZW1zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoYXN5bmMgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQmxhbmsoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJz09PUludmFsaWQgUmVzcG9uc2UgcmVjZWl2ZWQ9PT0nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdMYWJlbCA9IHRoaXMuX3RyYW5zbGF0aW9uUmVzb2x2ZXIucmVzb2x2ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhbmd1YWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtTGlzdC5sb2FkaW5nQXJpYUxhYmVsJ1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKHRoaXMubG9hZGluZ0xhYmVsLCAnYXNzZXJ0aXZlJyk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZGVsYXkodGhpcy5kZWxheVRpbWUpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNQcmVzZW50KHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX2l0ZW1zLmxlbmd0aCwgaiA9IDA7IGogPCByZXN1bHQubGVuZ3RoOyArK2ksICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXRlbXNbaV0gPSByZXN1bHRbal07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQodGhpcy5faXRlbXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIHVzZWQgaW4gdGVtcGF0ZSB0byBnZXQgU2VsZWN0ZWQgaXRlbXMgZnJvbSBhIGxpc3RcbiAgICAgKiBldmVudDphbnkgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvblxuICAgICAqL1xuICAgIF9vblNlbGVjdGlvbkNoYW5nZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZU5hdmlnYXRpb24oZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldHVwTGlzdEl0ZW0oaXRlbTogQmFzZUxpc3RJdGVtKTogdm9pZCB7XG4gICAgICAgIGl0ZW0uc2VsZWN0aW9uTW9kZSA9IHRoaXMuc2VsZWN0aW9uTW9kZTtcbiAgICAgICAgaXRlbS5yb3dTZWxlY3Rpb24gPSB0aGlzLnJvd1NlbGVjdGlvbjtcbiAgICAgICAgaXRlbS5faGFzQnlMaW5lID0gdGhpcy5oYXNCeUxpbmU7XG4gICAgICAgIGl0ZW0uaXRlbVNlbGVjdGVkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyPy5zZXRBY3RpdmVJdGVtKHRoaXMubGlzdEl0ZW1zLnRvQXJyYXkoKS5pbmRleE9mKGl0ZW0pKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWxlY3RJdGVtKGl0ZW06IEJhc2VMaXN0SXRlbSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoaXRlbSk7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2RzSXRlbXMubGVuZ3RoICE9PSBudWxsICYmIHRoaXMuaXRlbVNpemUgIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0SW5kZXggPSAwO1xuICAgICAgICAgICAgdGhpcy5fbGFzdEluZGV4ID0gdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5fZHNJdGVtcy5zbGljZSh0aGlzLl9zdGFydEluZGV4LCB0aGlzLl9sYXN0SW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXRlbXMgPSB0aGlzLl9kc0l0ZW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh0aGlzLl9pdGVtcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsaXplRFMoZHM6IEZkcExpc3REYXRhU291cmNlPFQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RzSXRlbXMgPSBbXTtcbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZSh0aGlzLmRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuY2xvc2UoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENvbnZlcnQgTGlzdERhdGFTb3VyY2U8VD4gfCBPYnNlcnZhYmxlPFRbXT4gfCBUW10gYXMgRGF0YVNvdXJjZVxuICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gdGhpcy5fb3BlbkRhdGFTdHJlYW0oZHMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG9EYXRhU3RyZWFtKHNvdXJjZTogRmRwTGlzdERhdGFTb3VyY2U8VD4pOiBMaXN0RGF0YVNvdXJjZTxUPiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChpc0RhdGFTb3VyY2Uoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIDxMaXN0RGF0YVNvdXJjZTxUPj5zb3VyY2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgICAgICAvLyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRvIHdvcmsgb24gdG9wIG9mIGFycmF5c1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3REYXRhU291cmNlPFQ+KHNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZUxpc3REYXRhU291cmNlPFQ+KHNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb3BlbkRhdGFTdHJlYW0oZHM6IEZkcExpc3REYXRhU291cmNlPFQ+KTogTGlzdERhdGFTb3VyY2U8VD4ge1xuICAgICAgICBjb25zdCBpbml0RGF0YVNvdXJjZSA9IHRoaXMuX3RvRGF0YVN0cmVhbShkcyk7XG4gICAgICAgIGlmIChpbml0RGF0YVNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFtkYXRhU291cmNlXSBzb3VyY2UgZGlkIG5vdCBtYXRjaCBhbiBhcnJheSwgT2JzZXJ2YWJsZSwgb3IgRGF0YVNvdXJjZWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgaXMgc2luZ2xlIHBvaW50IG9mIGRhdGEgZW50cnkgdG8gdGhlIGNvbXBvbmVudC4gV2UgZG9udCB3YW50IHRvIHNldCBkYXRhIG9uIGRpZmZlcmVudFxuICAgICAgICAgKiBwbGFjZXMuIElmIGFueSBuZXcgZGF0YSBjb21lcyBpbiBlaXRoZXIgeW91IGRvIGEgc2VhcmNoIGFuZCB5b3Ugd2FudCB0byBwYXNzIGluaXRpYWwgZGF0YVxuICAgICAgICAgKiBpdHMgaGVyZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gaW5pdERhdGFTb3VyY2VcbiAgICAgICAgICAgIC5vcGVuKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIFNldCBuZXcgaXRlbXMgd2hlbiBjb21wb25lbnQgaXMgZnVsbHkgaW5pdGlhdGVkIGFuZCBhbGwgY2hpbGQgY29tcG9uZW50cyBhcmUgYXZhaWxhYmxlLlxuICAgICAgICAgICAgICAgIHRoaXMuX3dhaXRGb3JWaWV3SW5pdCgpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHNJdGVtcyA9IGRhdGEgfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh0aGlzLl9kc0l0ZW1zKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRJdGVtcygpO1xuICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiB3aGVuIHF1ZXVlIGlzIGVtcHR5LlxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoaW5pdERhdGFTb3VyY2Uub25EYXRhUmVxdWVzdGVkKCkuc3Vic2NyaWJlKCgpID0+ICh0aGlzLl9sb2FkaW5nID0gdHJ1ZSkpKTtcblxuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICBpbml0RGF0YVNvdXJjZS5vbkRhdGFSZWNlaXZlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0TG9hZGluZ0RvbmUgPSB0cnVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBtYXRjaFBhcmFtcyA9IG5ldyBNYXAoKTtcblxuICAgICAgICBtYXRjaFBhcmFtcy5zZXQoJ3F1ZXJ5JywgJyonKTtcbiAgICAgICAgbWF0Y2hQYXJhbXMuc2V0KCdsaW1pdCcsIHRoaXMuaXRlbVNpemUpO1xuXG4gICAgICAgIC8vIGluaXRpYWwgZGF0YSBmZXRjaFxuICAgICAgICBpbml0RGF0YVNvdXJjZS5tYXRjaChtYXRjaFBhcmFtcyk7XG5cbiAgICAgICAgcmV0dXJuIGluaXREYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbG9hZE5ld0l0ZW1zKCk6IFRbXSB7XG4gICAgICAgIHRoaXMuX3N0YXJ0SW5kZXggPSB0aGlzLl9zdGFydEluZGV4ICsgdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgdGhpcy5fbGFzdEluZGV4ID0gdGhpcy5fbGFzdEluZGV4ICsgdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgdGhpcy5fdGVtcEl0ZW1zID0gdGhpcy5fZHNJdGVtcy5zbGljZSh0aGlzLl9zdGFydEluZGV4LCB0aGlzLl9sYXN0SW5kZXgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl90ZW1wSXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExpc3QgaXRlbSB3aXRoIHJhZGlvIGJ1dHRvbiBzdHlsZXMsIGNoZWNrLCB1bmNoZWNrdXBkYXRlc1xuICAgICAqIGV2ZW50OmFueSB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlU2luZ2xlU2VsZWN0KGV2ZW50OiBFdmVudCwgc2VsZWN0ZWRJdGVtSWQ6IE51bGxhYmxlPHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5mZC1saXN0X19pdGVtJyk7XG4gICAgICAgIGNvbnN0IHJhZGlvID0gcGFyZW50ID8gcGFyZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykgOiBudWxsO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZHZhbHVlID0gcmFkaW8gPyAoPEhUTUxJbnB1dEVsZW1lbnQ+cmFkaW8pLnZhbHVlIDogbnVsbDtcblxuICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNQcmVzZW50KGl0ZW0ucmFkaW9CdXR0b25Db21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5fc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpdGVtLmxpc3RJdGVtLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWNoZWNrZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcblxuICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpdGVtLnNlbGVjdGlvblZhbHVlID0gdGhpcy5fc2VsZWN0ZWR2YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgIGlmIChuYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKSA9PT0gc2VsZWN0ZWRJdGVtSWQpIHtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX3NlbGVjdGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1jaGVja2VkJywgJ3RydWUnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdEl0ZW0oaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlUm93U2VsZWN0KHNlbGVjdGVkSXRlbUlkOiBOdWxsYWJsZTxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIC8vIGhhbmRsZXMgbXV0bGkgc2VsZWN0IG9uIHJvdyBsZXZlbCB3aXRob3V0IGNoZWNrYm94XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aScpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5fc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZXMgc2luZ2xlIHNlbGVjdCBvbiByb3cgbGV2ZWwgd2l0aG91dCByYWRpb2J1dHRvblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS5hbmNob3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX3NlbGVjdGVkJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLXNlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgaXRlbS5hbmNob3IubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1zZWxlY3RlZCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcblxuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgICAgICBpZiAobmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJykgIT09IHNlbGVjdGVkSXRlbUlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX3NlbGVjdGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICBpdGVtLmFuY2hvcj8ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpcy1zZWxlY3RlZCcpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0SXRlbShpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1JZCA9ICcwJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBMaXN0IGl0ZW0gd2l0aCBjaGVja2JveCBzdHlsZXMsY2hlY2ssdW5jaGVja3VwZGF0ZXNcbiAgICAgKiBldmVudDphbnkgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvblxuICAgICAqL1xuICAgIHByaXZhdGUgX2hhbmRsZU11bHRpU2VsZWN0KHNlbGVjdGVkSXRlbUlkOiBOdWxsYWJsZTxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgIGlmIChuYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKSAhPT0gc2VsZWN0ZWRJdGVtSWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IG5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdfc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdfc2VsZWN0ZWQnLCBgJHshc2VsZWN0fWApO1xuICAgICAgICAgICAgaWYgKGl0ZW0uX3NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNldHRpbmcgdmFsdWVzIGZyb20gbGlzdCB0byBsaXN0IGl0ZW1zXG4gICAgICogZXhhbXBsZTpcbiAgICAgKiBEb2VzIGxpc3QgaXRlbSBoYXMgbmF2aWdhdGlvbixcbiAgICAgKiBzaG91bGQgc2hvdyBhcnJvd3MsXG4gICAgICogd2lsbCBpdCBiZSBjb21wYWN0IG1vZGUsXG4gICAgICogc2hvdWxkIGJlIGluIHdoaWNoIHNlbGVjdGlvbiBtb2RlXG4gICAgICogc2V0IHZhbHVlcyB3aGVuIHBhc3NlZCB2aWEgZGF0YXNvdXJjZVxuICAgICAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZUxpc3RJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubGlzdEl0ZW1zLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZmlyc3QubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2FyaWFTZXRTaXplID0gdGhpcy5hcmlhU2V0c2l6ZVxuICAgICAgICAgICAgPyBvZih0aGlzLmFyaWFTZXRzaXplKVxuICAgICAgICAgICAgOiB0aGlzLl9kYXRhU291cmNlICYmIHRoaXMuX2RhdGFTb3VyY2UuZGF0YVByb3ZpZGVyPy5nZXRUb3RhbEl0ZW1zXG4gICAgICAgICAgICA/IHRoaXMuX2RhdGFTb3VyY2UuZGF0YVByb3ZpZGVyLmdldFRvdGFsSXRlbXMoKVxuICAgICAgICAgICAgOiBvZih0aGlzLmxpc3RJdGVtcy5sZW5ndGgpO1xuXG4gICAgICAgIHRoaXMuX3BhcnRpYWxOYXZpZ2F0aW9uID0gdGhpcy5saXN0SXRlbXMuc29tZSgoaXRlbSkgPT4gaXRlbS5uYXZpZ2F0aW9uSW5kaWNhdG9yIHx8IGl0ZW0ubGlzdFR5cGUgPT09ICdkZXRhaWwnKTtcblxuICAgICAgICBsZXQgY3VycmVudEdyb3VwOiBCYXNlTGlzdEl0ZW0gfCBudWxsID0gbnVsbDtcbiAgICAgICAgbGV0IGN1cnJlbnRHcm91cEl0ZW1JZHM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIC8vIFNpbmNlIHdlIGNhbm5vdCB1c2UgaW5kZXggZnJvbSB0aGUgaXRlcmF0aW9uIGR1ZSB0byBwb3NzaWJsZSBncm91cCBpdGVtIGV4aXN0ZW5jZSwgd2UgbmVlZCB0byB0cmFjayBpdCBtYW51YWxseS5cbiAgICAgICAgbGV0IGl0ZW1JbmRleCA9IDA7XG5cbiAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9wYXJ0aWFsTmF2aWdhdGlvbikge1xuICAgICAgICAgICAgICAgIGl0ZW0ubmF2aWdhdGVkID0gdGhpcy5uYXZpZ2F0ZWQ7XG4gICAgICAgICAgICAgICAgaXRlbS5uYXZpZ2F0aW9uSW5kaWNhdG9yID0gdGhpcy5uYXZpZ2F0aW9uSW5kaWNhdG9yO1xuICAgICAgICAgICAgICAgIGl0ZW0ubGlzdFR5cGUgPSB0aGlzLmxpc3RUeXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0uX3R5cGUgPT09IExJU1RfSVRFTV9UWVBFLkhFQURFUikge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cD8ubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtb3ducycsIGN1cnJlbnRHcm91cEl0ZW1JZHMuam9pbignICcpKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXBJdGVtSWRzID0gW107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gaXRlbTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbS5fdHlwZSAhPT0gTElTVF9JVEVNX1RZUEUuSVRFTSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXRlbS5hcmlhU2V0U2l6ZSA9IHRoaXMuX2FyaWFTZXRTaXplO1xuXG4gICAgICAgICAgICBpdGVtLmFyaWFQb3NpbnNldCA9ICsraXRlbUluZGV4O1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwSXRlbUlkcy5wdXNoKGl0ZW0ubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5pZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpdGVtID09PSB0aGlzLmxpc3RJdGVtcy5sYXN0KSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwPy5saXN0SXRlbS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1vd25zJywgY3VycmVudEdyb3VwSXRlbUlkcy5qb2luKCcgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3dhaXRGb3JWaWV3SW5pdDxTb3VyY2VEYXRhVHlwZT4oKSB7XG4gICAgICAgIHJldHVybiAoc291cmNlOiBPYnNlcnZhYmxlPFNvdXJjZURhdGFUeXBlPik6IE9ic2VydmFibGU8U291cmNlRGF0YVR5cGU+ID0+XG4gICAgICAgICAgICBzb3VyY2UucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHNyYykgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWZ0ZXJWaWV3SW5pdCQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcigoYWZ0ZXJWaWV3SW5pdCkgPT4gYWZ0ZXJWaWV3SW5pdCksXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4gc3JjKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgYXN5bmMgX2luaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX2xhbmd1YWdlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5fbGFuZ3VhZ2UkKTtcbiAgICB9XG59XG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCJmZC10b29sYmFyXCI+PC9uZy1jb250ZW50PlxuPHVsXG4gICAgZmQtbGlzdFxuICAgIFthdHRyLmlkXT1cImlkXCJcbiAgICBbbm9Cb3JkZXJdPVwibm9Cb3JkZXJcIlxuICAgIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCJcbiAgICBbYnlsaW5lXT1cImhhc0J5TGluZVwiXG4gICAgW2NsYXNzLmZkLWxpc3QtLW5hdmlnYXRpb25dPVwibmF2aWdhdGVkIHx8IG5hdmlnYXRpb25JbmRpY2F0b3JcIlxuICAgIFtuYXZpZ2F0aW9uSW5kaWNhdG9yXT1cIm5hdmlnYXRpb25JbmRpY2F0b3JcIlxuICAgIHN0eWxlPVwib3V0bGluZTogbm9uZVwiXG4gICAgKGtleWRvd24pPVwiX2tleU1hbmFnZXI/Lm9uS2V5ZG93bigkZXZlbnQpOyBfaGFuZGxlS2V5RG93bigkZXZlbnQpXCJcbiAgICAoY2hhbmdlKT1cIl9vblNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgW2F0dHIuYXJpYS1zZXRzaXplXT1cIl9hcmlhU2V0U2l6ZSB8IGFzeW5jXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICBbYXR0ci5hcmlhLW11bHRpc2VsZWN0YWJsZV09XCJhcmlhTXVsdGlzZWxlY3RhYmxlXCJcbiAgICBbcm9sZV09XCJyb2xlXCJcbiAgICBbdW5yZWFkSW5kaWNhdG9yXT1cInVucmVhZEluZGljYXRvclwiXG4+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRNb3JlICYmIGxvYWRPblNjcm9sbFwiPlxuICAgICAgICA8ZmQtYnVzeS1pbmRpY2F0b3JcbiAgICAgICAgICAgIHNpemU9XCJsXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtYnVzeS1pbmRpY2F0b3ItY3VzdG9tIGZkLWxpc3RfX2l0ZW0tLWdyb3dpbmdcIlxuICAgICAgICAgICAgW2Jsb2NrXT1cInRydWVcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwiX2xvYWRpbmcgJiYgX2ZpcnN0TG9hZGluZ0RvbmVcIlxuICAgICAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtYnVzeV09XCJfbG9hZGluZ1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIl9sb2FkaW5nID8gKCdwbGF0Zm9ybUxpc3QubG9hZGluZ0FyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZSkgOiBudWxsXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGZkLWxpc3RcbiAgICAgICAgICAgICAgICBmZEluZmluaXRlU2Nyb2xsXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1saXN0X19pbmZpbml0ZS1zY3JvbGxcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cIm1heEhlaWdodFwiXG4gICAgICAgICAgICAgICAgKG9uU2Nyb2xsQWN0aW9uKT1cIl9zY3JvbGxIYW5kbGVyKClcIlxuICAgICAgICAgICAgICAgIFtzY3JvbGxQZXJjZW50XT1cInNjcm9sbE9mZnNldFBlcmNlbnRhZ2VcIlxuICAgICAgICAgICAgICAgIFtyb2xlXT1cInJvbGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfaXRlbXMubGVuZ3RoICE9PSAwOyB0aGVuIHRoZW5CbG9jazsgZWxzZSBlbHNlQmxvY2tcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZkLWJ1c3ktaW5kaWNhdG9yPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZE9uU2Nyb2xsXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIl9pdGVtcy5sZW5ndGggIT09IDA7IHRoZW4gdGhlbkJsb2NrOyBlbHNlIGVsc2VCbG9ja1wiPiA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bGlcbiAgICAgICAgICAgICNsaXN0SXRlbVxuICAgICAgICAgICAgKm5nSWY9XCJsb2FkTW9yZSAmJiAhbG9hZE9uU2Nyb2xsICYmIF9maXJzdExvYWRpbmdEb25lXCJcbiAgICAgICAgICAgIChjbGljayk9XCJfZ2V0TW9yZURhdGEoKVwiXG4gICAgICAgICAgICBmZC1saXN0LWl0ZW1cbiAgICAgICAgICAgIChrZXlkb3duKT1cIl9sb2FkT25LZXlQcmVzcygkZXZlbnQpXCJcbiAgICAgICAgICAgIFtjbGFzcy5mZC1saXN0X19pdGVtLS1jdXN0b20tY29udGVudF09XCJsb2FkTW9yZUNvbnRlbnRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1saXN0X19pdGVtIGZkLWxpc3RfX2l0ZW0tLWdyb3dpbmcgZmQtbGlzdF9faXRlbS0tYWN0aW9uXCJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCIwXCJcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibG9hZE1vcmVFbGVtZW50Q29udGVudFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbGk+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNsb2FkTW9yZUVsZW1lbnRDb250ZW50PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZE1vcmVDb250ZW50OyBlbHNlIGRlZmF1bHRDb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtbGlzdF9fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibG9hZE1vcmVDb250ZW50LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldExvYWRNb3JlQ29udGVudENvbnRleHQoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdENvbnRlbnQ+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZmQtbGlzdF9fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICA8ZmQtYnVzeS1pbmRpY2F0b3JcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWJ1c3ktaW5kaWNhdG9yLWN1c3RvbVwiXG4gICAgICAgICAgICAgICAgICAgIFtibG9ja109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiX2xvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIl9sb2FkaW5nID8gKCdwbGF0Zm9ybUxpc3QubG9hZGluZ0FyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZSkgOiBsb2FkVGl0bGVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2ZkLWJ1c3ktaW5kaWNhdG9yPlxuICAgICAgICAgICAgICAgIHt7IGxvYWRUaXRsZSB9fVxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIiNsb2FkXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvdWw+XG5cbjxuZy10ZW1wbGF0ZSAjdGhlbkJsb2NrPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgX2l0ZW1zOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0SXRlbURlZi50ZW1wbGF0ZVJlZjsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiPiA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2Vsc2VCbG9jaz5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxpc3RJdGVtcz8ubGVuZ3RoICYmICFfZmlyc3RMb2FkaW5nRG9uZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhhc0J5TGluZTsgZWxzZSBieWxpbmVMb2FkaW5nXCI+XG4gICAgICAgICAgICA8bGkgZmQtbGlzdC1pdGVtICpmZGtSZXBlYXQ9XCIzXCI+XG4gICAgICAgICAgICAgICAgPGZkLXNrZWxldG9uIHN0eWxlPVwibWFyZ2luOiBhdXRvIDBcIiB0eXBlPVwidGV4dFwiIHRleHRMaW5lcz1cIjFcIiB3aWR0aD1cIjQwJVwiPjwvZmQtc2tlbGV0b24+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNieWxpbmVMb2FkaW5nPlxuICAgICAgICAgICAgPGxpIGZkLWxpc3QtaXRlbSAqZmRrUmVwZWF0PVwiM1wiPlxuICAgICAgICAgICAgICAgIDxmZC1za2VsZXRvbiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI0OHB4XCIgc3R5bGU9XCJtYXJnaW46IGF1dG8gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiNjBcIiB5PVwiMFwiIHdpZHRoPVwiNDAlXCIgaGVpZ2h0PVwiMTJcIiByeD1cIjRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjYwXCIgeT1cIjIwXCIgd2lkdGg9XCIzMCVcIiBoZWlnaHQ9XCI4XCIgcng9XCI0XCIgLz5cbiAgICAgICAgICAgICAgICA8L2ZkLXNrZWxldG9uPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19
752
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvbGlzdC9saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9saXN0L2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsdURBQXVEO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEYsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixJQUFJLEVBQ0osWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsSUFBSSxFQUNKLFFBQVEsRUFDUixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRixPQUFPLEVBQ0gsZUFBZSxFQUNmLFVBQVUsRUFDVixPQUFPLEVBRVAsY0FBYyxFQUNkLE1BQU0sRUFDTixjQUFjLEVBQ2QsWUFBWSxFQUNaLEdBQUcsRUFDSCxTQUFTLEVBQ1QsRUFBRSxFQUNGLFNBQVMsRUFDVCxTQUFTLEVBQ1osTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsT0FBTyxFQUFZLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLHdCQUF3QixFQUF1QixNQUFNLDRCQUE0QixDQUFDO0FBQzNGLE9BQU8sRUFBRSxXQUFXLEVBQWMsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRixPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUVuQix3QkFBd0IsRUFDeEIsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUN4QixPQUFPLEVBQ1AsWUFBWSxFQUNaLFNBQVMsRUFDWixNQUFNLGtDQUFrQyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUEwQix3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQUdqRyxNQUFNLE9BQU8sb0JBQW9CO0NBU2hDO0FBRUQsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBRW5COzs7R0FHRztBQW1CSCxNQUFNLE9BQU8sYUFDVCxTQUFRLG1CQUFtQjtJQTJFM0IsdURBQXVEO0lBQ3ZELElBQ0ksS0FBSyxDQUFDLEtBQVU7UUFDaEIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGlEQUFpRDtJQUNqRCxJQUNJLFlBQVksQ0FBQyxLQUFjO1FBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUN6RCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7YUFDL0Q7U0FDSjtJQUNMLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDWixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUVELHNDQUFzQztJQUN0QyxJQUNJLFVBQVUsQ0FBQyxLQUEyQjtRQUN0QyxJQUFJLEtBQUssRUFBRTtZQUNQLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0I7SUFDTCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRCx3Q0FBd0M7SUFDeEMsSUFDSSxTQUFTLENBQUMsS0FBYztRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUV4QixNQUFNLFNBQVMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDMUMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLFNBQVMsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztTQUNoRDtRQUVELElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVELGtEQUFrRDtJQUNsRCxJQUNJLG1CQUFtQixDQUFDLEtBQWM7UUFDbEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztRQUNsQyxJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsSUFBSSxtQkFBbUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDckMsQ0FBQztJQUVELHVDQUF1QztJQUN2QyxJQUNJLFNBQVMsQ0FBQyxLQUFjO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQUVELHVDQUF1QztJQUN2QyxJQUNJLFNBQVMsQ0FBQyxLQUFjO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDM0IsQ0FBQztJQThCRCxjQUFjO0lBQ2QsSUFBSSxVQUFVO1FBQ1YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQWtIRCxjQUFjO0lBQ2QsWUFDYyxrQkFBcUMsRUFDL0MsVUFBc0IsRUFDZCxjQUE2QixFQUNDLFVBQWtDLEVBQzdDLFNBQW9CLEVBQ3BCLGdCQUFrQyxFQUNsQyxNQUFjLEVBQ2MsU0FBNEIsRUFDcEIsV0FBcUMsRUFDMUYsV0FBd0I7UUFFbEMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQVh6Rix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBRXZDLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQ0MsZUFBVSxHQUFWLFVBQVUsQ0FBd0I7UUFDN0MsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFHL0IsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUE3U3RDLDRFQUE0RTtRQUU1RSxpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQU1sQixrRUFBa0U7UUFFbEUsYUFBUSxHQUFHLFFBQVEsQ0FBQztRQWFwQiw2Q0FBNkM7UUFFN0MsU0FBSSxHQUFHLE1BQU0sQ0FBQztRQUVkLCtEQUErRDtRQUUvRCxhQUFRLEdBQWEsUUFBUSxDQUFDO1FBTTlCLGtEQUFrRDtRQUVsRCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBTWpCLGlDQUFpQztRQUVqQyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCOzs7OztXQUtHO1FBRUgsa0JBQWEsR0FBa0IsTUFBTSxDQUFDO1FBMkZ0Qyx3REFBd0Q7UUFFeEQsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFFeEIsK0NBQStDO1FBRS9DLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBRXZCLGtEQUFrRDtRQUVsRCx1QkFBa0IsR0FBdUMsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUF1QmxHOzs7V0FHRztRQUNILGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakI7O1dBRUc7UUFDSCxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFRMUIsY0FBYztRQUNkLFdBQU0sR0FBUSxFQUFFLENBQUM7UUFFakIsY0FBYztRQUNkLGVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRWpDLGNBQWM7UUFDZCxpQkFBWSxHQUF1QixJQUFJLFVBQVUsRUFBRSxDQUFDO1FBS3BELGNBQWM7UUFDTix5QkFBb0IsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUE2QnpEOzs7V0FHRztRQUNPLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQVFyQzs7OztXQUlHO1FBQ0ssaUJBQVksR0FBRyxLQUFLLENBQUM7UUFZN0IsdUJBQXVCO1FBQ2YsZUFBVSxHQUFRLEVBQUUsQ0FBQztRQUU3QixjQUFjO1FBQ04sZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFFeEIsY0FBYztRQUNOLGVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBRW5DLGNBQWM7UUFDTixhQUFRLEdBQVEsRUFBRSxDQUFDO1FBVzNCLGNBQWM7UUFDTixvQkFBZSxHQUFHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBZ0JqRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7OztPQUtHO0lBRUgsaUJBQWlCLENBQUMsS0FBWTtRQUMxQixJQUFJLGNBQWMsR0FBcUIsR0FBRyxDQUFDO1FBQzNDLE1BQU0sT0FBTyxHQUEwQixLQUFLLENBQUMsTUFBTSxZQUFZLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2pHLE1BQU0sTUFBTSxHQUFHLE9BQU8sRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNsRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNuQixjQUFjLEdBQUcsTUFBTSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMvQztRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFNUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNmLElBQUksQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDN0M7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLFlBQVksV0FBVyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDL0QsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNMLE9BQU87U0FDVjtRQUVELE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLEdBQUcsRUFBRTtZQUNsQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUNwQzthQUFNLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRTtZQUMzRCxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUM3QztRQUVELDZHQUE2RztRQUM3RyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ3pDO2FBQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFFBQVEsRUFBRTtZQUN4QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1NBQ25EO2FBQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLE9BQU8sRUFBRTtZQUN2QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDM0M7SUFDTCxDQUFDO0lBRUQsdUNBQXVDO0lBQ3ZDLHlCQUF5QjtRQUNyQixNQUFNLFNBQVMsR0FBRztZQUNkLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdEIsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFO2dCQUNoQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ2YsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDdkIsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDLENBQ2xHLENBQUM7aUJBQ0w7Z0JBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxFQUFFO1lBQ0osU0FBUyxFQUFFO2dCQUNQLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDdkIsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVO2FBQ3ZCO1lBQ0QsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtTQUM5QixDQUFDO1FBQ0YsT0FBTztZQUNILFNBQVM7WUFDVCxHQUFHLFNBQVM7U0FDZixDQUFDO0lBQ04sQ0FBQztJQUVEOzs7T0FHRztJQUNILFFBQVE7UUFDSixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxFQUFFLEdBQUcsWUFBWSxVQUFVLEVBQUUsRUFBRSxDQUFDO1FBRXJDLHdDQUF3QztRQUN4QyxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssT0FBTyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7U0FDbkM7YUFBTTtZQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1NBQzdCO1FBRUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLGNBQWMsQ0FBZSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUUvRixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ2xGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUM7WUFDbkQsTUFBTSxLQUFLLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1lBQ3pDLEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN6QyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO2dCQUN6QixLQUFLLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDcEM7WUFDRCxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFO2dCQUMzQixLQUFLLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDeEM7WUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWU7UUFDWCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksZUFBZSxDQUFlLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVoRixJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPO2FBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUMxRCxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FDaEQsQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ25GLFNBQVMsRUFBRSxZQUFZLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxjQUFjO0lBQ2QsV0FBVztRQUNQLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVwQixJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUMzQjtRQUVELElBQUksQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFFcEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxLQUFvQjtRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNuQixPQUFPO1NBQ1Y7UUFFRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4RCxPQUFPO1NBQ1Y7UUFFRCxLQUFLLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUVqQyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxFQUFFO1lBQzVFLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO2FBQU0sSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtZQUMzRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLDBCQUEwQixDQUFDLGVBQXVCO1FBQzlDLElBQUksQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDdkI7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZUFBZSxDQUFDLEtBQW9CO1FBQ2hDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUMxQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDdkI7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFZO1FBQ1IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUNuQixJQUFJLENBQ0QsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNmLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQzthQUNwRDtZQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FDakQsSUFBSSxDQUFDLFNBQVMsRUFDZCwrQkFBK0IsQ0FDbEMsQ0FBQztZQUNGLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsRUFDRixLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUNyQixTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUM3QjthQUNBLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2xCLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNuQixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7b0JBQ2pFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUM5QjthQUNKO1lBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsbUJBQW1CLENBQUMsS0FBWTtRQUM1QixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELGNBQWM7SUFDZCxjQUFjLENBQUMsSUFBa0I7UUFDN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDakMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzdCLElBQUksQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUUsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVcsQ0FBQyxJQUFrQjtRQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsY0FBYztJQUNkLGVBQWU7UUFDWCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxjQUFjO0lBQ04sU0FBUztRQUNiLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFO1lBQ3RELElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3hFO2FBQU07WUFDSCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDL0I7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELGNBQWM7SUFDTixhQUFhLENBQUMsRUFBd0I7UUFDMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDeEIsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQzthQUMvQjtTQUNKO1FBQ0Qsa0VBQWtFO1FBQ2xFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsY0FBYztJQUNOLGFBQWEsQ0FBQyxNQUE0QjtRQUM5QyxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN0QixPQUEwQixNQUFNLENBQUM7U0FDcEM7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdkIsa0RBQWtEO1lBQ2xELE9BQU8sSUFBSSxtQkFBbUIsQ0FBSSxNQUFNLENBQUMsQ0FBQztTQUM3QztRQUVELElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sSUFBSSx3QkFBd0IsQ0FBSSxNQUFNLENBQUMsQ0FBQztTQUNsRDtRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxjQUFjO0lBQ04sZUFBZSxDQUFDLEVBQXdCO1FBQzVDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUMsSUFBSSxjQUFjLEtBQUssU0FBUyxFQUFFO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUVBQXVFLENBQUMsQ0FBQztTQUM1RjtRQUVEOzs7O1dBSUc7UUFDSCxJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWM7YUFDaEMsSUFBSSxFQUFFO2FBQ04sSUFBSTtRQUNELDBGQUEwRjtRQUMxRixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFDdkIsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDN0I7YUFDQSxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNoQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixnREFBZ0Q7WUFDaEQsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFFUCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQ3BCLGNBQWMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzNDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFFOUIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXhDLHFCQUFxQjtRQUNyQixjQUFjLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRWxDLE9BQU8sY0FBYyxDQUFDO0lBQzFCLENBQUM7SUFFRCxjQUFjO0lBQ04sYUFBYTtRQUNqQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNwRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNsRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXpFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLG1CQUFtQixDQUFDLEtBQVksRUFBRSxjQUFnQztRQUN0RSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxZQUFZLFdBQVcsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzdGLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzVELElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBb0IsS0FBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBRXJFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDNUIsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ3JFO1lBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRTdCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQzFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ3hDLElBQUksYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxjQUFjLEVBQUU7Z0JBQ3JELGFBQWEsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNoRCxhQUFhLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFFbkQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMxQjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGNBQWM7SUFDTixnQkFBZ0IsQ0FBQyxjQUFnQztRQUNyRCxxREFBcUQ7UUFDckQsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLE9BQU8sRUFBRTtZQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUM1QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQ2hCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUNyQztxQkFBTTtvQkFDSCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDdkM7Z0JBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELHlEQUF5RDtRQUN6RCxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssUUFBUSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUNkLE9BQU87aUJBQ1Y7Z0JBRUQsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ3hDLGFBQWEsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNqRCxhQUFhLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDckQsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzFELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUU3QixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUM1QixNQUFNLEVBQUUsYUFBYSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDeEMsSUFBSSxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLGNBQWMsRUFBRTtvQkFDckQsT0FBTztpQkFDVjtnQkFFRCxhQUFhLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFFeEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixDQUFDLENBQUMsQ0FBQztZQUVILGNBQWMsR0FBRyxHQUFHLENBQUM7U0FDeEI7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGtCQUFrQixDQUFDLGNBQWdDO1FBQ3ZELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDNUIsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDeEMsSUFBSSxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLGNBQWMsRUFBRTtnQkFDckQsT0FBTzthQUNWO1lBRUQsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN2RCxhQUFhLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUN0RCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2hCLGFBQWEsQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNyQztpQkFBTTtnQkFDSCxhQUFhLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDckQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdkM7WUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSyxnQkFBZ0I7UUFDcEIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzdFO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVztZQUNoQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDdEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsYUFBYTtnQkFDbEUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRTtnQkFDL0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWhDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUM7UUFFaEgsSUFBSSxZQUFZLEdBQXdCLElBQUksQ0FBQztRQUM3QyxJQUFJLG1CQUFtQixHQUFhLEVBQUUsQ0FBQztRQUN2QyxtSEFBbUg7UUFDbkgsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBRWxCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDO2dCQUNwRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDakM7WUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssY0FBYyxDQUFDLE1BQU0sRUFBRTtnQkFDdEMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDOUYsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO2dCQUN6QixZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixPQUFPO2FBQ1Y7WUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssY0FBYyxDQUFDLElBQUksRUFBRTtnQkFDcEMsT0FBTzthQUNWO1lBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBRXJDLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxTQUFTLENBQUM7WUFFaEMsSUFBSSxZQUFZLEVBQUU7Z0JBQ2QsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzVEO1lBRUQsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0JBQzlCLFlBQVksRUFBRSxRQUFRLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDakc7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGNBQWM7SUFDTixnQkFBZ0I7UUFDcEIsT0FBTyxDQUFDLE1BQWtDLEVBQThCLEVBQUUsQ0FDdEUsTUFBTSxDQUFDLElBQUksQ0FDUCxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNkLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUNyQixNQUFNLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUN4QyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQ2pCLENBQ0osQ0FDSixDQUFDO0lBQ1YsQ0FBQztJQUVELGNBQWM7SUFDTixLQUFLLENBQUMsS0FBSztRQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzNELENBQUM7OzBHQWoyQlEsYUFBYSwwR0EyVFYsV0FBVyxnTEFJcUIsYUFBYSx5REFDYixxQkFBcUI7OEZBaFV4RCxhQUFhLDQ0QkFaWDtRQUNQLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtRQUMzRSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFO1FBQ3pEO1lBQ0ksT0FBTyxFQUFFLHdCQUF3QjtZQUNqQyxXQUFXLEVBQUUsYUFBYTtTQUM3QjtLQUNKLHNHQTJMOEIsV0FBVyxzRkFJNUIsd0JBQXdCLGtHQUlKLFlBQVksK0hBWm5CLFVBQVUsb0RDeFJ6Qywya0pBOEdBOzJGRFJhLGFBQWE7a0JBbEJ6QixTQUFTOytCQUNJLFVBQVUsaUJBRUwsaUJBQWlCLENBQUMsSUFBSSxtQkFFcEIsdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDUCxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxXQUFXLGVBQWUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO3dCQUMzRSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLGVBQWUsRUFBRTt3QkFDekQ7NEJBQ0ksT0FBTyxFQUFFLHdCQUF3Qjs0QkFDakMsV0FBVyxlQUFlO3lCQUM3QjtxQkFDSixRQUNLO3dCQUNGLGlCQUFpQixFQUFFLElBQUk7cUJBQzFCOzswQkE2VEksTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsUUFBUTs7MEJBQUksSUFBSTs7MEJBQ2hCLFFBQVE7OzBCQUFJLElBQUk7OzBCQUNoQixRQUFROzswQkFBSSxJQUFJOzswQkFDaEIsUUFBUTs7MEJBQUksUUFBUTs7MEJBQUksSUFBSTs7MEJBQUksTUFBTTsyQkFBQyxhQUFhOzswQkFDcEQsUUFBUTs7MEJBQUksUUFBUTs7MEJBQUksSUFBSTs7MEJBQUksTUFBTTsyQkFBQyxxQkFBcUI7cUVBMVRqRSxhQUFhO3NCQURaLEtBQUs7Z0JBS04sV0FBVztzQkFEVixLQUFLO2dCQUtOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFLTixTQUFTO3NCQURSLEtBQUs7Z0JBS04sWUFBWTtzQkFEWCxLQUFLO2dCQUtOLFNBQVM7c0JBRFIsS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQVFOLFlBQVk7c0JBRFgsS0FBSztnQkFLTixJQUFJO3NCQURILEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLFNBQVM7c0JBRFIsS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sc0JBQXNCO3NCQURyQixLQUFLO2dCQUtOLFNBQVM7c0JBRFIsS0FBSztnQkFVTixhQUFhO3NCQURaLEtBQUs7Z0JBS0YsS0FBSztzQkFEUixLQUFLO2dCQVdGLFlBQVk7c0JBRGYsS0FBSztnQkFrQkYsVUFBVTtzQkFEYixLQUFLO2dCQWFGLFNBQVM7c0JBRFosS0FBSztnQkFrQkYsbUJBQW1CO3NCQUR0QixLQUFLO2dCQVlGLFNBQVM7c0JBRFosS0FBSztnQkFZRixTQUFTO3NCQURaLEtBQUs7Z0JBWU4sZUFBZTtzQkFEZCxLQUFLO2dCQUtOLGVBQWU7c0JBRGQsS0FBSztnQkFLTixrQkFBa0I7c0JBRGpCLE1BQU07Z0JBS1AsTUFBTTtzQkFETCxTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBS3ZDLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDO2dCQUszQyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsd0JBQXdCO2dCQUt0QyxTQUFTO3NCQURSLGVBQWU7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFnSnRFLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nICovXG5pbXBvcnQgeyBGb2N1c0tleU1hbmFnZXIsIExpdmVBbm5vdW5jZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBFTlRFUiwgU1BBQ0UsIFRBQiwgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3QsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2VsZixcbiAgICBTa2lwU2VsZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nQ29udHJvbCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRkRfRk9STV9GSUVMRCwgRkRfRk9STV9GSUVMRF9DT05UUk9MIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBCZWhhdmlvclN1YmplY3QsXG4gICAgT2JzZXJ2YWJsZSxcbiAgICBTdWJqZWN0LFxuICAgIFN1YnNjcmlwdGlvbixcbiAgICBhc3luY1NjaGVkdWxlcixcbiAgICBmaWx0ZXIsXG4gICAgZmlyc3RWYWx1ZUZyb20sXG4gICAgaXNPYnNlcnZhYmxlLFxuICAgIG1hcCxcbiAgICBvYnNlcnZlT24sXG4gICAgb2YsXG4gICAgc3RhcnRXaXRoLFxuICAgIHN3aXRjaE1hcFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgS2V5VXRpbCwgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBGRF9MSVNUX1VOUkVBRF9JTkRJQ0FUT1IsIExpc3RVbnJlYWRJbmRpY2F0b3IgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGlzdCc7XG5pbXBvcnQgeyBGRF9MQU5HVUFHRSwgRmRMYW5ndWFnZSwgVHJhbnNsYXRpb25SZXNvbHZlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5pbXBvcnQge1xuICAgIEFycmF5TGlzdERhdGFTb3VyY2UsXG4gICAgQ29sbGVjdGlvbkJhc2VJbnB1dCxcbiAgICBMaXN0RGF0YVNvdXJjZSxcbiAgICBPYnNlcnZhYmxlTGlzdERhdGFTb3VyY2UsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sLFxuICAgIGlzQmxhbmssXG4gICAgaXNEYXRhU291cmNlLFxuICAgIGlzUHJlc2VudFxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3NoYXJlZCc7XG5pbXBvcnQgeyBCYXNlTGlzdEl0ZW0sIExJU1RfSVRFTV9UWVBFLCBMaXN0SXRlbURlZiB9IGZyb20gJy4vYmFzZS1saXN0LWl0ZW0nO1xuaW1wb3J0IHsgRmRwTGlzdENvbXBvbmVudCB9IGZyb20gJy4vZmRwTGlzdENvbXBvbmVudC50b2tlbic7XG5pbXBvcnQgeyBMaXN0Q29uZmlnIH0gZnJvbSAnLi9saXN0LmNvbmZpZyc7XG5pbXBvcnQgeyBMb2FkTW9yZUNvbnRlbnRDb250ZXh0LCBMb2FkTW9yZUNvbnRlbnREaXJlY3RpdmUgfSBmcm9tICcuL2xvYWQtbW9yZS1jb250ZW50LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBGZHBMaXN0LCBGZHBMaXN0RGF0YVNvdXJjZSwgTGlzdFR5cGUsIFNlbGVjdGlvblR5cGUgfSBmcm9tICcuL21vZGVscy9saXN0JztcblxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbkNoYW5nZUV2ZW50IHtcbiAgICAvKiogU2VsZWN0ZWQgaXRlbXMgKi9cbiAgICBzZWxlY3RlZEl0ZW1zOiBCYXNlTGlzdEl0ZW1bXTtcbiAgICAvKiogSW5kZXggKi9cbiAgICBpbmRleDogbnVtYmVyO1xuICAgIC8qKiBTZWxlY3RlZCBpdGVtICovXG4gICAgYWRkZWQ/OiBCYXNlTGlzdEl0ZW07XG4gICAgLyoqIERlc2VsZWN0ZWQgaXRlbSAqL1xuICAgIHJlbW92ZWQ/OiBCYXNlTGlzdEl0ZW07XG59XG5cbmxldCBuZXh0TGlzdElkID0gMDtcblxuLyoqXG4gKiBUaGUgTGlzdCBjb21wb25lbnQgcmVwcmVzZW50cyBhIGNvbnRhaW5lciBmb3IgbGlzdCBpdGVtIHR5cGVzLlxuICogSXQgaXMgdXNlZCB0byBkaXNwbGF5IGEgbGlzdCBmZWF0dXJlcy5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtbGlzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgc3R5bGVVcmxzOiBbJy4vbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IEZEX0ZPUk1fRklFTERfQ09OVFJPTCwgdXNlRXhpc3Rpbmc6IExpc3RDb21wb25lbnQsIG11bHRpOiB0cnVlIH0sXG4gICAgICAgIHsgcHJvdmlkZTogRmRwTGlzdENvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IExpc3RDb21wb25lbnQgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogRkRfTElTVF9VTlJFQURfSU5ESUNBVE9SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IExpc3RDb21wb25lbnRcbiAgICAgICAgfVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIudGFiaW5kZXhdJzogJy0xJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgTGlzdENvbXBvbmVudDxUPlxuICAgIGV4dGVuZHMgQ29sbGVjdGlvbkJhc2VJbnB1dFxuICAgIGltcGxlbWVudHMgTGlzdFVucmVhZEluZGljYXRvciwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEZkcExpc3Q8QmFzZUxpc3RJdGVtPlxue1xuICAgIC8qKiAgQW4gYXJyYXkgdGhhdCBob2xkcyBhIGxpc3Qgb2YgYWxsIHNlbGVjdGVkIGl0ZW1zLiAqKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGVkSXRlbXM6IEJhc2VMaXN0SXRlbVtdO1xuXG4gICAgLyoqIGRlZmluZSBzaXplIG9mIGl0ZW1zIGZvciBzY3JlZW4gcmVhZGVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYVNldHNpemU6IG51bWJlcjtcblxuICAgIC8qKiBEZWZpbmVzIHdoZXRoZXIgaXRlbXMgYXJlIG11bHRpc2VsZWN0YWJsZSBmb3Igc2NyZWVuIHJlYWRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFNdWx0aXNlbGVjdGFibGU6IGJvb2xlYW47XG5cbiAgICAvKiogVGl0bGUgdXNlZCBvbiBidXR0b24gd2hlbiBkYXRhIGxvYWRzIG9uIGJ1dHRvbiBjbGljay4gKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRUaXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIExhYmVsIHVzZWQgb24gYW5ub3VuY2UgbWVzc2FnZSBvZiBkYXRhIHdhcyBsb2FkZWQgZm9yIHNjcmVlbiByZWFkZXJzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZGluZ0xhYmVsID0gJyc7XG5cbiAgICAvKiogV2FpdCB0aW1lIGZvciBuZXcgaXRlbXMuICovXG4gICAgQElucHV0KClcbiAgICBkZWxheVRpbWU6IG51bWJlcjtcblxuICAgIC8qKiBJdGVtcyB0byBiZSBsb2FkZWQgYXQgb25jZS4gSW50aW5pdHkgKG5vIGxpbWl0KSBieSBkZWZhdWx0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXRlbVNpemUgPSBJbmZpbml0eTtcblxuICAgIC8qKiBFbmFibGVzIGxhenkgbG9hZE1vcmUgb2YgZGF0YS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRNb3JlOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBkYXRhIGxvYWQgb24gc2Nyb2xsIGZvciB0cnVlXG4gICAgICogZmFsc2U6IGVuYWJsZXMgZGF0YSBsb2FkaW5nIG9uIGJ1dHRvbiBjbGljay5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRPblNjcm9sbDogYm9vbGVhbjtcblxuICAgIC8qKiBkZWZpbmUgdGhlIHJvbGUgdG8gY3VzdG9tIHJlcXVpcmVtZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm9sZSA9ICdsaXN0JztcblxuICAgIC8qKiBMaXN0VHlwZSAnaW5hY3RpdmUnIHwgJ2FjdGl2ZScgfCAnbmF2aWdhdGlvbicgfCAnZGV0YWlsJyAqL1xuICAgIEBJbnB1dCgpXG4gICAgbGlzdFR5cGU6IExpc3RUeXBlID0gJ2FjdGl2ZSc7XG5cbiAgICAvKiogTWF4IGhlaWdodCBmb3Igdmlld3BvcnQgdG8gZGlzcGxheSBzY3JvbGwuICovXG4gICAgQElucHV0KClcbiAgICBtYXhIZWlnaHQ6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIGxpc3QgY29tcG9uZW50IGhhcyByZW1vdmVkIGJvcmRlcnMuICovXG4gICAgQElucHV0KClcbiAgICBub0JvcmRlciA9IGZhbHNlO1xuXG4gICAgLyoqIFNjcm9sbCBvZmZzZXQgcGVyY2VudGFnZSB0byB0cmlnZ2VyIHNjcm9sbCBldmVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNjcm9sbE9mZnNldFBlcmNlbnRhZ2U6IG51bWJlcjtcblxuICAgIC8qKiBFZW5hYmxlcyBzZWxlY3Rpb24gc3R5bGVzLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0aW9uID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgc2VsZWN0aW9uLiBUeXBlcyBpbmNsdWRlOlxuICAgICAqICdub25lJ3wgJ211bHRpJyB8ICdzaW5nbGUnfCdkZWxldGUnLlxuICAgICAqIExlYXZlIGVtcHR5IGZvciBkZWZhdWx0ICgpLidcbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIHNldCB0byAnbm9uZScuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3Rpb25Nb2RlOiBTZWxlY3Rpb25UeXBlID0gJ25vbmUnO1xuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciByYWRpbyBidXR0b24gYW5kIGNoZWNrYm94LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgc3VwZXIuc2V0VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKiogc2V0dGVyIGFuZCBnZXR0ZXIgZm9yIHJvdyBsZXZlbCBTZWxlY3Rpb24uICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcm93U2VsZWN0aW9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Jvd1NlbGVjdGlvbiA9IHZhbHVlO1xuICAgICAgICBpZiAodGhpcy5fcm93U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2ZkLWxpc3QtLXNlbGVjdGlvbi1yb3cnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm5hdmlnYXRlZCAmJiB0aGlzLmhhc09iamVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VsRWxlbWVudD8uY2xhc3NMaXN0LnJlbW92ZSgnZmQtbGlzdC0tc2VsZWN0aW9uLXJvdycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHJvd1NlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jvd1NlbGVjdGlvbjtcbiAgICB9XG5cbiAgICAvKiogRGF0YXNvdXJjZSBmb3Igc3VnZ2VzdGlvbiBsaXN0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRhdGFTb3VyY2UodmFsdWU6IEZkcExpc3REYXRhU291cmNlPFQ+KSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5faW5pdGlhbGl6ZURTKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBkYXRhU291cmNlKCk6IEZkcExpc3REYXRhU291cmNlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciBfbmF2aWdhdGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IG5hdmlnYXRlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9uYXZpZ2F0ZWQgPSB2YWx1ZTtcblxuICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSBbJ2ZkLWxpc3QtLW5hdmlnYXRpb24nXTtcbiAgICAgICAgaWYgKHRoaXMuaGFzT2JqZWN0KSB7XG4gICAgICAgICAgICBjbGFzc0xpc3QucHVzaCgnZmQtbGlzdC0tbmF2aWdhdGlvbi1vYmplY3QnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3VsRWxlbWVudD8uY2xhc3NMaXN0LmFkZCguLi5jbGFzc0xpc3QpO1xuICAgIH1cblxuICAgIGdldCBuYXZpZ2F0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0ZWQ7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciBfbmF2aWdhdGlvbkluZGljYXRvci4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBuYXZpZ2F0aW9uSW5kaWNhdG9yKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX25hdmlnYXRpb25JbmRpY2F0b3IgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fdWxFbGVtZW50Py5jbGFzc0xpc3QuYWRkKCdmZC1saXN0LS1uYXZpZ2F0aW9uLWluZGljYXRpb24nKTtcbiAgICB9XG5cbiAgICBnZXQgbmF2aWdhdGlvbkluZGljYXRvcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25hdmlnYXRpb25JbmRpY2F0b3I7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciBoYXNCeUxpbmUuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgaGFzQnlMaW5lKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2hhc0J5TGluZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2ZkLWxpc3QtLWJ5bGluZScpO1xuICAgIH1cblxuICAgIGdldCBoYXNCeUxpbmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNCeUxpbmU7XG4gICAgfVxuXG4gICAgLyoqIHNldHRlciBhbmQgZ2V0dGVyIGZvciBoYXNPYmplY3QuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgaGFzT2JqZWN0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2hhc09iamVjdCA9IHZhbHVlO1xuICAgICAgICB0aGlzLl91bEVsZW1lbnQ/LmNsYXNzTGlzdC5hZGQoJ2ZkLW9iamVjdC1saXN0Jyk7XG4gICAgfVxuXG4gICAgZ2V0IGhhc09iamVjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc09iamVjdDtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0byBkaXNwbGF5IHVucmVhZCBub3RpZmljYXRpb24gaW5kaWNhdG9yLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdW5yZWFkSW5kaWNhdG9yID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0byBpbnRlcmNlcHQgdGFiIGtleSBuYXZpZ2F0aW9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW50ZXJjZXB0VGFiS2V5ID0gdHJ1ZTtcblxuICAgIC8qKiBFdmVudCB0aHJvd24sIHdoZW4gc2VsZWN0ZWQgaXRlbSBpcyBjaGFuZ2VkICovXG4gICAgQE91dHB1dCgpXG4gICAgc2VsZWN0ZWRJdGVtQ2hhbmdlOiBFdmVudEVtaXR0ZXI8U2VsZWN0aW9uQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3Rpb25DaGFuZ2VFdmVudD4oKTtcblxuICAgIC8qKiBBY2Nlc3MgY2hpbGQgZWxlbWVudCwgZm9yIGNoZWNraW5nIGxpbmsgY29udGVudCAqL1xuICAgIEBWaWV3Q2hpbGQoJ2xpbmsnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgICBhbmNob3I6IEVsZW1lbnRSZWY8SFRNTExpbmtFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChmb3J3YXJkUmVmKCgpID0+IExpc3RJdGVtRGVmKSlcbiAgICBsaXN0SXRlbURlZjogTGlzdEl0ZW1EZWY7XG5cbiAgICAvKiogTG9hZCBNb3JlIExpc3QgaXRlbSBjb250ZW50ICovXG4gICAgQENvbnRlbnRDaGlsZChMb2FkTW9yZUNvbnRlbnREaXJlY3RpdmUpXG4gICAgbG9hZE1vcmVDb250ZW50OiBMb2FkTW9yZUNvbnRlbnREaXJlY3RpdmU7XG5cbiAgICAvKiogQ2hpbGQgaXRlbXMgb2YgdGhlIExpc3QuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IEJhc2VMaXN0SXRlbSksIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgICBsaXN0SXRlbXM6IFF1ZXJ5TGlzdDxCYXNlTGlzdEl0ZW0+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgX3VsRWxlbWVudCgpOiBOdWxsYWJsZTxIVE1MVUxpc3RFbGVtZW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCd1bCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBUbyBkaXNwbGF5IGxvYWRpbmcgc3ltYm9sXG4gICAgICovXG4gICAgX2xvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogVG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGZpcnN0IGxvYWRpbmcgd2hlbiBza2VsZXRvbnMgYmUgc2hvd24gYW5kIHN1YnNlcXVlbnQgbG9hZGluZ3Mgd2hlbiBidXN5IGluZGljYXRvciBiZSBzaG93blxuICAgICAqL1xuICAgIF9maXJzdExvYWRpbmdEb25lID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICoga2V5TWFuZ2VyIHRvIGhhbmRsZSBrZXlib3JkIGV2ZW50cyB1c2VkIGluIHRlbXBsYXRlXG4gICAgICovXG4gICAgX2tleU1hbmFnZXI6IE51bGxhYmxlPEZvY3VzS2V5TWFuYWdlcjxCYXNlTGlzdEl0ZW0+PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2l0ZW1zOiBUW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2Rlc3Ryb3llZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9hcmlhU2V0U2l6ZTogT2JzZXJ2YWJsZTxudW1iZXI+ID0gbmV3IE9ic2VydmFibGUoKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9kYXRhU291cmNlOiBMaXN0RGF0YVNvdXJjZTxUPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRpb25SZXNvbHZlciA9IG5ldyBUcmFuc2xhdGlvblJlc29sdmVyKCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciBOYXZpZ2F0aW9uIG1vZGUgaXMgaW5jbHVkZWQgdG8gbGlzdCBjb21wb25lbnRcbiAgICAgKiBmb3IgYWxsIHRoZSBpdGVtc1xuICAgICAqL1xuICAgIHByaXZhdGUgX25hdmlnYXRlZDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBXaGV0aGVyIEJ5IGxpbmUgaXMgcHJlc2VudCBpbiBsaXN0IGl0ZW1cbiAgICAgKi9cbiAgICBwcml2YXRlIF9oYXNCeUxpbmU6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciBOYXZpZ2F0aW9uIG1vZGUgaXMgaW5jbHVkZWQgdG8gbGlzdCBjb21wb25lbnRcbiAgICAgKiBvbmx5IGEgc3Vic2V0IG9mIHRoZSBsaXN0IGl0ZW1zIGFyZSBuYXZpZ2FibGVcbiAgICAgKiB5b3Ugc2hvdWxkIGluZGljYXRlIHRob3NlIGJ5IGRpc3BsYXlpbmcgYSBuYXZpZ2F0aW9uIGFycm93XG4gICAgICovXG4gICAgcHJpdmF0ZSBfbmF2aWdhdGlvbkluZGljYXRvcjogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBXaGV0aGVyIG9iamVjdCBwcmVzZW50IGluIGxpc3QgaXRlbVxuICAgICAqL1xuICAgIHByaXZhdGUgX2hhc09iamVjdDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBWZXJmaWVzIHBhcnRpYWwgbmF2aWdhdGlvbiBlbmFibGVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9wYXJ0aWFsTmF2aWdhdGlvbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFRoZSBtb2RlbCBiYWNraW5nIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uTW9kZWw6IFNlbGVjdGlvbk1vZGVsPEJhc2VMaXN0SXRlbT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogV2hldGhlciBsaXN0IGNvbXBvbmVudCBoYXMgbXVsdGlzZWxlY3Rpb25cbiAgICAgKiBiaW5kaW5nIGluIHRlbXBhdGUgdG8gYXBwZW5kIGNsYXNzXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbXVsdGlTZWxlY3QgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWR2YWx1ZTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBXaGV0aGVyIHJvdyBsZXZlbCBzZWxlY3Rpb24gbW9kZSBpcyBlbmFibGVkIHRvIGxpc3QgY29tcG9uZW50XG4gICAgICogZm9yIGFsbCB0aGUgaXRlbXNcbiAgICAgKi9cbiAgICBwcml2YXRlIF9yb3dTZWxlY3Rpb246IGJvb2xlYW47XG5cbiAgICAvKiogQGhpZGRlbiBUbyBzdG9yZSAqL1xuICAgIHByaXZhdGUgX3RlbXBJdGVtczogVFtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N0YXJ0SW5kZXggPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sYXN0SW5kZXggPSB0aGlzLml0ZW1TaXplO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kc0l0ZW1zOiBUW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBmb3IgZGF0YSBzb3VyY2UgaGFuZGxpbmdcbiAgICAgKi9cbiAgICBwcml2YXRlIF9kc1N1YnNjcmlwdGlvbjogTnVsbGFibGU8U3Vic2NyaXB0aW9uPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGFuZ3VhZ2U6IEZkTGFuZ3VhZ2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FmdGVyVmlld0luaXQkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfbGl2ZUFubm91bmNlcjogTGl2ZUFubm91bmNlcixcbiAgICAgICAgQEluamVjdChGRF9MQU5HVUFHRSkgcHJpdmF0ZSByZWFkb25seSBfbGFuZ3VhZ2UkOiBPYnNlcnZhYmxlPEZkTGFuZ3VhZ2U+LFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdGb3JtOiBOZ0Zvcm0sXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIEBIb3N0KCkgQEluamVjdChGRF9GT1JNX0ZJRUxEKSBmb3JtRmllbGQ6IFBsYXRmb3JtRm9ybUZpZWxkLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBASG9zdCgpIEBJbmplY3QoRkRfRk9STV9GSUVMRF9DT05UUk9MKSBmb3JtQ29udHJvbDogUGxhdGZvcm1Gb3JtRmllbGRDb250cm9sLFxuICAgICAgICBwcm90ZWN0ZWQgX2xpc3RDb25maWc/OiBMaXN0Q29uZmlnXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9jaGFuZ2VEZXRlY3RvclJlZiwgZWxlbWVudFJlZiwgbmdDb250cm9sLCBjb250cm9sQ29udGFpbmVyLCBuZ0Zvcm0sIGZvcm1GaWVsZCwgZm9ybUNvbnRyb2wpO1xuICAgICAgICB0aGlzLl9pbml0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIG9uIFVwZGF0ZSBuYXZnaWF0aW9uIHN0eWxlcyBmb3Igbm9uIG5hdmlnYXRlZCBpdGVtc1xuICAgICAqIGV2ZW50OmFueSB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uXG4gICAgICogc2VwcmF0ZSBQUiBmb3IgY3VzdG9tIGV2ZW50XG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICAgIF91cGRhdGVOYXZpZ2F0aW9uKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBsZXQgc2VsZWN0ZWRJdGVtSWQ6IE51bGxhYmxlPHN0cmluZz4gPSAnMCc7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQ6IE51bGxhYmxlPEhUTUxFbGVtZW50PiA9IGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ID8gZXZlbnQudGFyZ2V0IDogbnVsbDtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZWxlbWVudD8uY2xvc2VzdCgnLmZkLWxpc3RfX2l0ZW0nKTtcbiAgICAgICAgaWYgKGlzUHJlc2VudChwYXJlbnQpKSB7XG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1JZCA9IHBhcmVudD8uZ2V0QXR0cmlidXRlKCdpZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGl0ZW0uYW5jaG9yPy5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLW5hdmlnYXRlZCcpO1xuXG4gICAgICAgICAgICBpZiAoaXRlbS5fZm9jdXNlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2tleU1hbmFnZXI/LnVwZGF0ZUFjdGl2ZUl0ZW0oaW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBlbCA9IGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGV2ZW50LnRhcmdldDtcbiAgICAgICAgaWYgKCFlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGlua0VsZW1lbnQgPSBlbC5xdWVyeVNlbGVjdG9yKCdhJyk7XG4gICAgICAgIGlmIChlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdhJykge1xuICAgICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCgnaXMtbmF2aWdhdGVkJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnbGknICYmICEhbGlua0VsZW1lbnQpIHtcbiAgICAgICAgICAgIGxpbmtFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2lzLW5hdmlnYXRlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogc2VsZWN0aW9uIG1hbmFnZW1lbnQgc2hvdWxkIGJlIGNvbXBsZXRlbHkgY2hhbmdlZCBodHRwczovL2dpdGh1Yi5jb20vU0FQL2Z1bmRhbWVudGFsLW5neC9pc3N1ZXMvODAwOFxuICAgICAgICBpZiAodGhpcy5yb3dTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2hhbmRsZVJvd1NlbGVjdChzZWxlY3RlZEl0ZW1JZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlU2luZ2xlU2VsZWN0KGV2ZW50LCBzZWxlY3RlZEl0ZW1JZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbXVsdGknKSB7XG4gICAgICAgICAgICB0aGlzLl9oYW5kbGVNdWx0aVNlbGVjdChzZWxlY3RlZEl0ZW1JZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogR2V0IGNvbnRleHQgZm9yIGxvYWQgbW9yZSBidXR0b24gKi9cbiAgICBnZXRMb2FkTW9yZUNvbnRlbnRDb250ZXh0KCk6IExvYWRNb3JlQ29udGVudENvbnRleHQge1xuICAgICAgICBjb25zdCAkaW1wbGljaXQgPSB7XG4gICAgICAgICAgICBsb2FkVGl0bGU6IHRoaXMubG9hZFRpdGxlLFxuICAgICAgICAgICAgbG9hZGluZzogdGhpcy5fbG9hZGluZyxcbiAgICAgICAgICAgIGxvYWRpbmdMYWJlbDogKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2UkLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoKGxhbmd1YWdlKSA9PiB0aGlzLl90cmFuc2xhdGlvblJlc29sdmVyLnJlc29sdmUobGFuZ3VhZ2UsICdwbGF0Zm9ybUxpc3QubG9hZGluZ0FyaWFMYWJlbCcpKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gb2YodGhpcy5sb2FkaW5nTGFiZWwpO1xuICAgICAgICAgICAgfSkoKSxcbiAgICAgICAgICAgIGxhc3RDaHVuazoge1xuICAgICAgICAgICAgICAgIHN0YXJ0OiB0aGlzLl9zdGFydEluZGV4LFxuICAgICAgICAgICAgICAgIGVuZDogdGhpcy5fbGFzdEluZGV4XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdG90YWw6IHRoaXMuX2RzSXRlbXMubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAkaW1wbGljaXQsXG4gICAgICAgICAgICAuLi4kaW1wbGljaXRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogSW5pdGlhbGl6YXRpb24gb2YgdGhlIGxpcyBjb21wb25lbnQgd2l0aCBzZWxlY3Rpb24gbW9kZVxuICAgICAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXRJdGVtcygpO1xuXG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQodGhpcy5faXRlbXMpO1xuICAgICAgICB0aGlzLmlkID0gYGZkcC1saXN0LSR7bmV4dExpc3RJZCsrfWA7XG5cbiAgICAgICAgLy8gdXNpbmcgc2VsZWN0aW9uIE1vZGVsIGZvciBtdWx0aXNlbGVjdFxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbXVsdGknKSB7XG4gICAgICAgICAgICB0aGlzLl9tdWx0aVNlbGVjdCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmFyaWFNdWx0aXNlbGVjdGFibGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbXVsdGlTZWxlY3QgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsID0gbmV3IFNlbGVjdGlvbk1vZGVsPEJhc2VMaXN0SXRlbT4odGhpcy5fbXVsdGlTZWxlY3QsIHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG5cbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2hhbmdlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKHNlbGVjdGlvbikgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0ZWQ7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBTZWxlY3Rpb25DaGFuZ2VFdmVudCgpO1xuICAgICAgICAgICAgZXZlbnQuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcztcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24uYWRkZWQ/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGV2ZW50LmFkZGVkID0gc2VsZWN0aW9uLmFkZGVkWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGVjdGlvbi5yZW1vdmVkPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBldmVudC5yZW1vdmVkID0gc2VsZWN0aW9uLnJlbW92ZWRbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogS2V5Ym9hcmQgbWFuYWdlciBvbiBsaXN0IGl0ZW1zLCBzZXQgdmFsdWVzIHdoZW4gcGFzc2VkIHZpYSBhcnJheVxuICAgICAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYWZ0ZXJWaWV3SW5pdCQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5fa2V5TWFuYWdlciA9IG5ldyBGb2N1c0tleU1hbmFnZXI8QmFzZUxpc3RJdGVtPih0aGlzLmxpc3RJdGVtcykud2l0aFdyYXAoKTtcblxuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1zLmNoYW5nZXNcbiAgICAgICAgICAgICAgICAucGlwZShzdGFydFdpdGgodGhpcy5saXN0SXRlbXMpLCBvYnNlcnZlT24oYXN5bmNTY2hlZHVsZXIpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fdXBkYXRlTGlzdEl0ZW1zKCkpXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgaW5kaWNhdG9yID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignZmQtYnVzeS1pbmRpY2F0b3InKTtcbiAgICAgICAgaW5kaWNhdG9yPy5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnJyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcblxuICAgICAgICBpZiAoaXNEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5jbG9zZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgdGhpcy5fa2V5TWFuYWdlcj8uZGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBoYW5kbGluZSBrZXlib2FyZCBvcGVyYXRpb25zXG4gICAgICogaW4gdGVtcGxhdGUgb24gbGlzdCBhbmQgbGlzdCBpdGVtc1xuICAgICAqL1xuICAgIF9oYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogTnVsbGFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAoIXRoaXMuX2tleU1hbmFnZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVEFCKSAmJiAhdGhpcy5pbnRlcmNlcHRUYWJLZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykgfHwgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBFTlRFUikgfHwgS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFNQQUNFKSkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlTmF2aWdhdGlvbihldmVudCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZXRDdXJyZW50QWN0aXZlSXRlbUluZGV4KGFjdGl2ZUl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2tleU1hbmFnZXI/LnNldEFjdGl2ZUl0ZW0oYWN0aXZlSXRlbUluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogYmluZGVkIGluIHRlbXBsYXRlIG9uIHNjcm9sbFxuICAgICAqL1xuICAgIF9zY3JvbGxIYW5kbGVyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2xvYWRpbmcgJiYgdGhpcy5sb2FkT25TY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuX2dldE1vcmVEYXRhKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogbG9hZCBtb3JlIG9uIGVudGVyIG9yIHNwYWNlIHByZXNzXG4gICAgICovXG4gICAgX2xvYWRPbktleVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0VOVEVSLCBTUEFDRV0pKSB7XG4gICAgICAgICAgICB0aGlzLl9nZXRNb3JlRGF0YSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEhhbmRsZXMgbGF6eSBsb2FkaW5nIGRhdGFcbiAgICAgKiB1c2VkIGluIHRlbXBsYXRlXG4gICAgICogb25zY3JvbGwgYW5kIG9uIG1vcmUgYnV0dG9uIGNsaWNrXG4gICAgICovXG4gICAgX2dldE1vcmVEYXRhKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgb2YodGhpcy5fbG9hZE5ld0l0ZW1zKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoYXN5bmMgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQmxhbmsoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJz09PUludmFsaWQgUmVzcG9uc2UgcmVjZWl2ZWQ9PT0nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdMYWJlbCA9IHRoaXMuX3RyYW5zbGF0aW9uUmVzb2x2ZXIucmVzb2x2ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhbmd1YWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3BsYXRmb3JtTGlzdC5sb2FkaW5nQXJpYUxhYmVsJ1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9saXZlQW5ub3VuY2VyLmFubm91bmNlKHRoaXMubG9hZGluZ0xhYmVsLCAnYXNzZXJ0aXZlJyk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZGVsYXkodGhpcy5kZWxheVRpbWUpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNQcmVzZW50KHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX2l0ZW1zLmxlbmd0aCwgaiA9IDA7IGogPCByZXN1bHQubGVuZ3RoOyArK2ksICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXRlbXNbaV0gPSByZXN1bHRbal07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQodGhpcy5faXRlbXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIHVzZWQgaW4gdGVtcGF0ZSB0byBnZXQgU2VsZWN0ZWQgaXRlbXMgZnJvbSBhIGxpc3RcbiAgICAgKiBldmVudDphbnkgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvblxuICAgICAqL1xuICAgIF9vblNlbGVjdGlvbkNoYW5nZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZU5hdmlnYXRpb24oZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldHVwTGlzdEl0ZW0oaXRlbTogQmFzZUxpc3RJdGVtKTogdm9pZCB7XG4gICAgICAgIGl0ZW0uc2VsZWN0aW9uTW9kZSA9IHRoaXMuc2VsZWN0aW9uTW9kZTtcbiAgICAgICAgaXRlbS5yb3dTZWxlY3Rpb24gPSB0aGlzLnJvd1NlbGVjdGlvbjtcbiAgICAgICAgaXRlbS5faGFzQnlMaW5lID0gdGhpcy5oYXNCeUxpbmU7XG4gICAgICAgIGl0ZW0uaXRlbVNlbGVjdGVkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyPy5zZXRBY3RpdmVJdGVtKHRoaXMubGlzdEl0ZW1zLnRvQXJyYXkoKS5pbmRleE9mKGl0ZW0pKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWxlY3RJdGVtKGl0ZW06IEJhc2VMaXN0SXRlbSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5zZWxlY3QoaXRlbSk7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY2xlYXJTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZXRJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2RzSXRlbXMubGVuZ3RoICE9PSBudWxsICYmIHRoaXMuaXRlbVNpemUgIT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0SW5kZXggPSAwO1xuICAgICAgICAgICAgdGhpcy5fbGFzdEluZGV4ID0gdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5fZHNJdGVtcy5zbGljZSh0aGlzLl9zdGFydEluZGV4LCB0aGlzLl9sYXN0SW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXRlbXMgPSB0aGlzLl9kc0l0ZW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh0aGlzLl9pdGVtcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsaXplRFMoZHM6IEZkcExpc3REYXRhU291cmNlPFQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2RzSXRlbXMgPSBbXTtcbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZSh0aGlzLmRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UuY2xvc2UoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9kc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENvbnZlcnQgTGlzdERhdGFTb3VyY2U8VD4gfCBPYnNlcnZhYmxlPFRbXT4gfCBUW10gYXMgRGF0YVNvdXJjZVxuICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gdGhpcy5fb3BlbkRhdGFTdHJlYW0oZHMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG9EYXRhU3RyZWFtKHNvdXJjZTogRmRwTGlzdERhdGFTb3VyY2U8VD4pOiBMaXN0RGF0YVNvdXJjZTxUPiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChpc0RhdGFTb3VyY2Uoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIDxMaXN0RGF0YVNvdXJjZTxUPj5zb3VyY2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICAgICAgICAvLyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHRvIHdvcmsgb24gdG9wIG9mIGFycmF5c1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3REYXRhU291cmNlPFQ+KHNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZUxpc3REYXRhU291cmNlPFQ+KHNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb3BlbkRhdGFTdHJlYW0oZHM6IEZkcExpc3REYXRhU291cmNlPFQ+KTogTGlzdERhdGFTb3VyY2U8VD4ge1xuICAgICAgICBjb25zdCBpbml0RGF0YVNvdXJjZSA9IHRoaXMuX3RvRGF0YVN0cmVhbShkcyk7XG4gICAgICAgIGlmIChpbml0RGF0YVNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFtkYXRhU291cmNlXSBzb3VyY2UgZGlkIG5vdCBtYXRjaCBhbiBhcnJheSwgT2JzZXJ2YWJsZSwgb3IgRGF0YVNvdXJjZWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgaXMgc2luZ2xlIHBvaW50IG9mIGRhdGEgZW50cnkgdG8gdGhlIGNvbXBvbmVudC4gV2UgZG9udCB3YW50IHRvIHNldCBkYXRhIG9uIGRpZmZlcmVudFxuICAgICAgICAgKiBwbGFjZXMuIElmIGFueSBuZXcgZGF0YSBjb21lcyBpbiBlaXRoZXIgeW91IGRvIGEgc2VhcmNoIGFuZCB5b3Ugd2FudCB0byBwYXNzIGluaXRpYWwgZGF0YVxuICAgICAgICAgKiBpdHMgaGVyZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gaW5pdERhdGFTb3VyY2VcbiAgICAgICAgICAgIC5vcGVuKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIFNldCBuZXcgaXRlbXMgd2hlbiBjb21wb25lbnQgaXMgZnVsbHkgaW5pdGlhdGVkIGFuZCBhbGwgY2hpbGQgY29tcG9uZW50cyBhcmUgYXZhaWxhYmxlLlxuICAgICAgICAgICAgICAgIHRoaXMuX3dhaXRGb3JWaWV3SW5pdCgpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHNJdGVtcyA9IGRhdGEgfHwgW107XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCh0aGlzLl9kc0l0ZW1zKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRJdGVtcygpO1xuICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiB3aGVuIHF1ZXVlIGlzIGVtcHR5LlxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoaW5pdERhdGFTb3VyY2Uub25EYXRhUmVxdWVzdGVkKCkuc3Vic2NyaWJlKCgpID0+ICh0aGlzLl9sb2FkaW5nID0gdHJ1ZSkpKTtcblxuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICBpbml0RGF0YVNvdXJjZS5vbkRhdGFSZWNlaXZlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpcnN0TG9hZGluZ0RvbmUgPSB0cnVlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBtYXRjaFBhcmFtcyA9IG5ldyBNYXAoKTtcblxuICAgICAgICBtYXRjaFBhcmFtcy5zZXQoJ3F1ZXJ5JywgJyonKTtcbiAgICAgICAgbWF0Y2hQYXJhbXMuc2V0KCdsaW1pdCcsIHRoaXMuaXRlbVNpemUpO1xuXG4gICAgICAgIC8vIGluaXRpYWwgZGF0YSBmZXRjaFxuICAgICAgICBpbml0RGF0YVNvdXJjZS5tYXRjaChtYXRjaFBhcmFtcyk7XG5cbiAgICAgICAgcmV0dXJuIGluaXREYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbG9hZE5ld0l0ZW1zKCk6IFRbXSB7XG4gICAgICAgIHRoaXMuX3N0YXJ0SW5kZXggPSB0aGlzLl9zdGFydEluZGV4ICsgdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgdGhpcy5fbGFzdEluZGV4ID0gdGhpcy5fbGFzdEluZGV4ICsgdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgdGhpcy5fdGVtcEl0ZW1zID0gdGhpcy5fZHNJdGVtcy5zbGljZSh0aGlzLl9zdGFydEluZGV4LCB0aGlzLl9sYXN0SW5kZXgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl90ZW1wSXRlbXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExpc3QgaXRlbSB3aXRoIHJhZGlvIGJ1dHRvbiBzdHlsZXMsIGNoZWNrLCB1bmNoZWNrdXBkYXRlc1xuICAgICAqIGV2ZW50OmFueSB0byBhdm9pZCBjb2RlIGR1cGxpY2F0aW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlU2luZ2xlU2VsZWN0KGV2ZW50OiBFdmVudCwgc2VsZWN0ZWRJdGVtSWQ6IE51bGxhYmxlPHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJy5mZC1saXN0X19pdGVtJyk7XG4gICAgICAgIGNvbnN0IHJhZGlvID0gcGFyZW50ID8gcGFyZW50LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykgOiBudWxsO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZHZhbHVlID0gcmFkaW8gPyAoPEhUTUxJbnB1dEVsZW1lbnQ+cmFkaW8pLnZhbHVlIDogbnVsbDtcblxuICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNQcmVzZW50KGl0ZW0ucmFkaW9CdXR0b25Db21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5fc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpdGVtLmxpc3RJdGVtLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWNoZWNrZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcblxuICAgICAgICB0aGlzLmxpc3RJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpdGVtLnNlbGVjdGlvblZhbHVlID0gdGhpcy5fc2VsZWN0ZWR2YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgIGlmIChuYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKSA9PT0gc2VsZWN0ZWRJdGVtSWQpIHtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX3NlbGVjdGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1jaGVja2VkJywgJ3RydWUnKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdEl0ZW0oaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGFuZGxlUm93U2VsZWN0KHNlbGVjdGVkSXRlbUlkOiBOdWxsYWJsZTxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIC8vIGhhbmRsZXMgbXV0bGkgc2VsZWN0IG9uIHJvdyBsZXZlbCB3aXRob3V0IGNoZWNrYm94XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aScpIHtcbiAgICAgICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5fc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLmRlc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhhbmRsZXMgc2luZ2xlIHNlbGVjdCBvbiByb3cgbGV2ZWwgd2l0aG91dCByYWRpb2J1dHRvblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXRlbS5hbmNob3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX3NlbGVjdGVkJywgJ2ZhbHNlJyk7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLXNlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgaXRlbS5hbmNob3IubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1zZWxlY3RlZCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoaXRlbSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwuY2xlYXIoKTtcblxuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgICAgICBpZiAobmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJykgIT09IHNlbGVjdGVkSXRlbUlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBuYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnX3NlbGVjdGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICBpdGVtLmFuY2hvcj8ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdpcy1zZWxlY3RlZCcpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0SXRlbShpdGVtKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1JZCA9ICcwJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBMaXN0IGl0ZW0gd2l0aCBjaGVja2JveCBzdHlsZXMsY2hlY2ssdW5jaGVja3VwZGF0ZXNcbiAgICAgKiBldmVudDphbnkgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvblxuICAgICAqL1xuICAgIHByaXZhdGUgX2hhbmRsZU11bHRpU2VsZWN0KHNlbGVjdGVkSXRlbUlkOiBOdWxsYWJsZTxzdHJpbmc+KTogdm9pZCB7XG4gICAgICAgIHRoaXMubGlzdEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmF0aXZlRWxlbWVudCB9ID0gaXRlbS5saXN0SXRlbTtcbiAgICAgICAgICAgIGlmIChuYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnaWQnKSAhPT0gc2VsZWN0ZWRJdGVtSWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IG5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdfc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIG5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdfc2VsZWN0ZWQnLCBgJHshc2VsZWN0fWApO1xuICAgICAgICAgICAgaWYgKGl0ZW0uX3NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbk1vZGVsLnNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCAnZmFsc2UnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbC5kZXNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dChpdGVtKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFNldHRpbmcgdmFsdWVzIGZyb20gbGlzdCB0byBsaXN0IGl0ZW1zXG4gICAgICogZXhhbXBsZTpcbiAgICAgKiBEb2VzIGxpc3QgaXRlbSBoYXMgbmF2aWdhdGlvbixcbiAgICAgKiBzaG91bGQgc2hvdyBhcnJvd3MsXG4gICAgICogd2lsbCBpdCBiZSBjb21wYWN0IG1vZGUsXG4gICAgICogc2hvdWxkIGJlIGluIHdoaWNoIHNlbGVjdGlvbiBtb2RlXG4gICAgICogc2V0IHZhbHVlcyB3aGVuIHBhc3NlZCB2aWEgZGF0YXNvdXJjZVxuICAgICAqL1xuICAgIHByaXZhdGUgX3VwZGF0ZUxpc3RJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubGlzdEl0ZW1zLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5saXN0SXRlbXMuZmlyc3QubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2FyaWFTZXRTaXplID0gdGhpcy5hcmlhU2V0c2l6ZVxuICAgICAgICAgICAgPyBvZih0aGlzLmFyaWFTZXRzaXplKVxuICAgICAgICAgICAgOiB0aGlzLl9kYXRhU291cmNlICYmIHRoaXMuX2RhdGFTb3VyY2UuZGF0YVByb3ZpZGVyPy5nZXRUb3RhbEl0ZW1zXG4gICAgICAgICAgICA/IHRoaXMuX2RhdGFTb3VyY2UuZGF0YVByb3ZpZGVyLmdldFRvdGFsSXRlbXMoKVxuICAgICAgICAgICAgOiBvZih0aGlzLmxpc3RJdGVtcy5sZW5ndGgpO1xuXG4gICAgICAgIHRoaXMuX3BhcnRpYWxOYXZpZ2F0aW9uID0gdGhpcy5saXN0SXRlbXMuc29tZSgoaXRlbSkgPT4gaXRlbS5uYXZpZ2F0aW9uSW5kaWNhdG9yIHx8IGl0ZW0ubGlzdFR5cGUgPT09ICdkZXRhaWwnKTtcblxuICAgICAgICBsZXQgY3VycmVudEdyb3VwOiBCYXNlTGlzdEl0ZW0gfCBudWxsID0gbnVsbDtcbiAgICAgICAgbGV0IGN1cnJlbnRHcm91cEl0ZW1JZHM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIC8vIFNpbmNlIHdlIGNhbm5vdCB1c2UgaW5kZXggZnJvbSB0aGUgaXRlcmF0aW9uIGR1ZSB0byBwb3NzaWJsZSBncm91cCBpdGVtIGV4aXN0ZW5jZSwgd2UgbmVlZCB0byB0cmFjayBpdCBtYW51YWxseS5cbiAgICAgICAgbGV0IGl0ZW1JbmRleCA9IDA7XG5cbiAgICAgICAgdGhpcy5saXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9wYXJ0aWFsTmF2aWdhdGlvbikge1xuICAgICAgICAgICAgICAgIGl0ZW0ubmF2aWdhdGVkID0gdGhpcy5uYXZpZ2F0ZWQ7XG4gICAgICAgICAgICAgICAgaXRlbS5uYXZpZ2F0aW9uSW5kaWNhdG9yID0gdGhpcy5uYXZpZ2F0aW9uSW5kaWNhdG9yO1xuICAgICAgICAgICAgICAgIGl0ZW0ubGlzdFR5cGUgPSB0aGlzLmxpc3RUeXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0uX3R5cGUgPT09IExJU1RfSVRFTV9UWVBFLkhFQURFUikge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRHcm91cD8ubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtb3ducycsIGN1cnJlbnRHcm91cEl0ZW1JZHMuam9pbignICcpKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50R3JvdXBJdGVtSWRzID0gW107XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwID0gaXRlbTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbS5fdHlwZSAhPT0gTElTVF9JVEVNX1RZUEUuSVRFTSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXRlbS5hcmlhU2V0U2l6ZSA9IHRoaXMuX2FyaWFTZXRTaXplO1xuXG4gICAgICAgICAgICBpdGVtLmFyaWFQb3NpbnNldCA9ICsraXRlbUluZGV4O1xuXG4gICAgICAgICAgICBpZiAoY3VycmVudEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwSXRlbUlkcy5wdXNoKGl0ZW0ubGlzdEl0ZW0ubmF0aXZlRWxlbWVudC5pZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpdGVtID09PSB0aGlzLmxpc3RJdGVtcy5sYXN0KSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEdyb3VwPy5saXN0SXRlbS5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1vd25zJywgY3VycmVudEdyb3VwSXRlbUlkcy5qb2luKCcgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3dhaXRGb3JWaWV3SW5pdDxTb3VyY2VEYXRhVHlwZT4oKSB7XG4gICAgICAgIHJldHVybiAoc291cmNlOiBPYnNlcnZhYmxlPFNvdXJjZURhdGFUeXBlPik6IE9ic2VydmFibGU8U291cmNlRGF0YVR5cGU+ID0+XG4gICAgICAgICAgICBzb3VyY2UucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKHNyYykgPT5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWZ0ZXJWaWV3SW5pdCQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcigoYWZ0ZXJWaWV3SW5pdCkgPT4gYWZ0ZXJWaWV3SW5pdCksXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4gc3JjKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgYXN5bmMgX2luaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuX2xhbmd1YWdlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5fbGFuZ3VhZ2UkKTtcbiAgICB9XG59XG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCJmZC10b29sYmFyXCI+PC9uZy1jb250ZW50PlxuPHVsXG4gICAgZmQtbGlzdFxuICAgIFthdHRyLmlkXT1cImlkXCJcbiAgICBbbm9Cb3JkZXJdPVwibm9Cb3JkZXJcIlxuICAgIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCJcbiAgICBbYnlsaW5lXT1cImhhc0J5TGluZVwiXG4gICAgW2NsYXNzLmZkLWxpc3QtLW5hdmlnYXRpb25dPVwibmF2aWdhdGVkIHx8IG5hdmlnYXRpb25JbmRpY2F0b3JcIlxuICAgIFtuYXZpZ2F0aW9uSW5kaWNhdG9yXT1cIm5hdmlnYXRpb25JbmRpY2F0b3JcIlxuICAgIHN0eWxlPVwib3V0bGluZTogbm9uZVwiXG4gICAgKGtleWRvd24pPVwiX2tleU1hbmFnZXI/Lm9uS2V5ZG93bigkZXZlbnQpOyBfaGFuZGxlS2V5RG93bigkZXZlbnQpXCJcbiAgICAoY2hhbmdlKT1cIl9vblNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgW2F0dHIuYXJpYS1zZXRzaXplXT1cIl9hcmlhU2V0U2l6ZSB8IGFzeW5jXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICBbYXR0ci5hcmlhLW11bHRpc2VsZWN0YWJsZV09XCJhcmlhTXVsdGlzZWxlY3RhYmxlXCJcbiAgICBbcm9sZV09XCJyb2xlXCJcbiAgICBbdW5yZWFkSW5kaWNhdG9yXT1cInVucmVhZEluZGljYXRvclwiXG4+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRNb3JlICYmIGxvYWRPblNjcm9sbFwiPlxuICAgICAgICA8ZmQtYnVzeS1pbmRpY2F0b3JcbiAgICAgICAgICAgIHNpemU9XCJsXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtYnVzeS1pbmRpY2F0b3ItY3VzdG9tIGZkLWxpc3RfX2l0ZW0tLWdyb3dpbmdcIlxuICAgICAgICAgICAgW2Jsb2NrXT1cInRydWVcIlxuICAgICAgICAgICAgW2xvYWRpbmddPVwiX2xvYWRpbmcgJiYgX2ZpcnN0TG9hZGluZ0RvbmVcIlxuICAgICAgICAgICAgcm9sZT1cImFsZXJ0XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtYnVzeV09XCJfbG9hZGluZ1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIl9sb2FkaW5nID8gKCdwbGF0Zm9ybUxpc3QubG9hZGluZ0FyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZSkgOiBudWxsXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGZkLWxpc3RcbiAgICAgICAgICAgICAgICBmZEluZmluaXRlU2Nyb2xsXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1saXN0X19pbmZpbml0ZS1zY3JvbGxcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0XT1cIm1heEhlaWdodFwiXG4gICAgICAgICAgICAgICAgKG9uU2Nyb2xsQWN0aW9uKT1cIl9zY3JvbGxIYW5kbGVyKClcIlxuICAgICAgICAgICAgICAgIFtzY3JvbGxQZXJjZW50XT1cInNjcm9sbE9mZnNldFBlcmNlbnRhZ2VcIlxuICAgICAgICAgICAgICAgIFtyb2xlXT1cInJvbGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfaXRlbXMubGVuZ3RoICE9PSAwOyB0aGVuIHRoZW5CbG9jazsgZWxzZSBlbHNlQmxvY2tcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZkLWJ1c3ktaW5kaWNhdG9yPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZE9uU2Nyb2xsXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIl9pdGVtcy5sZW5ndGggIT09IDA7IHRoZW4gdGhlbkJsb2NrOyBlbHNlIGVsc2VCbG9ja1wiPiA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bGlcbiAgICAgICAgICAgICNsaXN0SXRlbVxuICAgICAgICAgICAgKm5nSWY9XCJsb2FkTW9yZSAmJiAhbG9hZE9uU2Nyb2xsICYmIF9maXJzdExvYWRpbmdEb25lXCJcbiAgICAgICAgICAgIChjbGljayk9XCJfZ2V0TW9yZURhdGEoKVwiXG4gICAgICAgICAgICBmZC1saXN0LWl0ZW1cbiAgICAgICAgICAgIChrZXlkb3duKT1cIl9sb2FkT25LZXlQcmVzcygkZXZlbnQpXCJcbiAgICAgICAgICAgIFtjbGFzcy5mZC1saXN0X19pdGVtLS1jdXN0b20tY29udGVudF09XCJsb2FkTW9yZUNvbnRlbnRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1saXN0X19pdGVtIGZkLWxpc3RfX2l0ZW0tLWdyb3dpbmcgZmQtbGlzdF9faXRlbS0tYWN0aW9uXCJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCIwXCJcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibG9hZE1vcmVFbGVtZW50Q29udGVudFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbGk+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNsb2FkTW9yZUVsZW1lbnRDb250ZW50PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZE1vcmVDb250ZW50OyBlbHNlIGRlZmF1bHRDb250ZW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmQtbGlzdF9fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibG9hZE1vcmVDb250ZW50LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldExvYWRNb3JlQ29udGVudENvbnRleHQoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdENvbnRlbnQ+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZmQtbGlzdF9fdGl0bGVcIj5cbiAgICAgICAgICAgICAgICA8ZmQtYnVzeS1pbmRpY2F0b3JcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZkLWJ1c3ktaW5kaWNhdG9yLWN1c3RvbVwiXG4gICAgICAgICAgICAgICAgICAgIFtibG9ja109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiX2xvYWRpbmdcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwiYWxlcnRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIl9sb2FkaW5nID8gKCdwbGF0Zm9ybUxpc3QubG9hZGluZ0FyaWFMYWJlbCcgfCBmZFRyYW5zbGF0ZSkgOiBsb2FkVGl0bGVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2ZkLWJ1c3ktaW5kaWNhdG9yPlxuICAgICAgICAgICAgICAgIHt7IGxvYWRUaXRsZSB9fVxuICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIiNsb2FkXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvdWw+XG5cbjxuZy10ZW1wbGF0ZSAjdGhlbkJsb2NrPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgX2l0ZW1zOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaXN0SXRlbURlZi50ZW1wbGF0ZVJlZjsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiPiA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2Vsc2VCbG9jaz5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWxpc3RJdGVtcz8ubGVuZ3RoICYmICFfZmlyc3RMb2FkaW5nRG9uZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWhhc0J5TGluZTsgZWxzZSBieWxpbmVMb2FkaW5nXCI+XG4gICAgICAgICAgICA8bGkgZmQtbGlzdC1pdGVtICpmZGtSZXBlYXQ9XCIzXCI+XG4gICAgICAgICAgICAgICAgPGZkLXNrZWxldG9uIHN0eWxlPVwibWFyZ2luOiBhdXRvIDBcIiB0eXBlPVwidGV4dFwiIHRleHRMaW5lcz1cIjFcIiB3aWR0aD1cIjQwJVwiPjwvZmQtc2tlbGV0b24+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNieWxpbmVMb2FkaW5nPlxuICAgICAgICAgICAgPGxpIGZkLWxpc3QtaXRlbSAqZmRrUmVwZWF0PVwiM1wiPlxuICAgICAgICAgICAgICAgIDxmZC1za2VsZXRvbiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCI0OHB4XCIgc3R5bGU9XCJtYXJnaW46IGF1dG8gMFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxzdmc6cmVjdCB4PVwiNjBcIiB5PVwiMFwiIHdpZHRoPVwiNDAlXCIgaGVpZ2h0PVwiMTJcIiByeD1cIjRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnOnJlY3QgeD1cIjYwXCIgeT1cIjIwXCIgd2lkdGg9XCIzMCVcIiBoZWlnaHQ9XCI4XCIgcng9XCI0XCIgLz5cbiAgICAgICAgICAgICAgICA8L2ZkLXNrZWxldG9uPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19