igniteui-angular 15.0.0-rc.0 → 15.0.0-rc.1

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.
@@ -92,6 +92,25 @@ export class IgxActionStripComponent extends DisplayDensityBase {
92
92
  }
93
93
  return this._resourceStrings;
94
94
  }
95
+ /**
96
+ * Hide or not the Action Strip based on if it is a menu.
97
+ *
98
+ * @hidden
99
+ * @internal
100
+ */
101
+ get hideOnRowLeave() {
102
+ if (this.menu.items.length === 0) {
103
+ return true;
104
+ }
105
+ else if (this.menu.items.length > 0) {
106
+ if (this.menu.collapsed) {
107
+ return true;
108
+ }
109
+ else {
110
+ return false;
111
+ }
112
+ }
113
+ }
95
114
  /**
96
115
  * Getter for the 'display' property of the current `IgxActionStrip`
97
116
  *
@@ -253,4 +272,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImpor
253
272
  type: HostBinding,
254
273
  args: ['attr.class']
255
274
  }] } });
256
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXN0cmlwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9hY3Rpb24tc3RyaXAvYWN0aW9uLXN0cmlwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9hY3Rpb24tc3RyaXAvYWN0aW9uLXN0cmlwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsU0FBUyxFQUNULFdBQVcsRUFDWCxLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixlQUFlLEVBRWYsU0FBUyxFQUtaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBMEIsTUFBTSxpQkFBaUIsQ0FBQztBQUVsRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQW1CLE1BQU0sd0JBQXdCLENBQUM7QUFDOUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7Ozs7Ozs7QUFLekYsTUFBTSxPQUFPLCtCQUErQjtJQUN4QyxZQUNXLFdBQTZCO1FBQTdCLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtJQUNwQyxDQUFDOzs0SEFISSwrQkFBK0I7Z0hBQS9CLCtCQUErQjsyRkFBL0IsK0JBQStCO2tCQUgzQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSwwQkFBMEI7aUJBQ3ZDOztBQU9EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQU1ILE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxrQkFBa0I7SUFpRzNELFlBQ1ksY0FBZ0MsRUFDaEMsUUFBbUIsRUFDd0Isc0JBQThDLEVBQzFGLEdBQXNCO1FBQzdCLEtBQUssQ0FBQyxz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YUFBYTtzQkFEbkIsZUFBZTt1QkFBQywyQkFBMkI7Z0JBYWpDLE1BQU07c0JBRGhCLEtBQUs7Z0JBZ0JDLFNBQVM7c0JBRGYsS0FBSzt1QkFBQyxPQUFPO2dCQVVILGVBQWU7c0JBRHpCLEtBQUs7Z0JBbUJDLElBQUk7c0JBRFYsU0FBUzt1QkFBQyxVQUFVO2dCQTZCVixPQUFPO3NCQURqQixXQUFXO3VCQUFDLGVBQWU7Z0JBWWpCLFdBQVc7c0JBRHJCLFdBQVc7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIERpcmVjdGl2ZSxcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBPcHRpb25hbCxcbiAgICBJbmplY3QsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBBZnRlclZpZXdJbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHlCYXNlLCBEaXNwbGF5RGVuc2l0eVRva2VuLCBJRGlzcGxheURlbnNpdHlPcHRpb25zIH0gZnJvbSAnLi4vY29yZS9kZW5zaXR5JztcbmltcG9ydCB7IElBY3Rpb25TdHJpcFJlc291cmNlU3RyaW5ncyB9IGZyb20gJy4uL2NvcmUvaTE4bi9hY3Rpb24tc3RyaXAtcmVzb3VyY2VzJztcbmltcG9ydCB7IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vcmVzb3VyY2VzJztcbmltcG9ydCB7IElneERyb3BEb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vZHJvcC1kb3duL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgQ2xvc2VTY3JvbGxTdHJhdGVneSwgT3ZlcmxheVNldHRpbmdzIH0gZnJvbSAnLi4vc2VydmljZXMvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hHcmlkQWN0aW9uc0Jhc2VEaXJlY3RpdmUgfSBmcm9tICcuL2dyaWQtYWN0aW9ucy9ncmlkLWFjdGlvbnMtYmFzZS5kaXJlY3RpdmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tpZ3hBY3Rpb25TdHJpcE1lbnVJdGVtXSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4QWN0aW9uU3RyaXBNZW51SXRlbURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PlxuICAgICkgeyB9XG59XG5cbi8qKlxuICogQWN0aW9uIFN0cmlwIHByb3ZpZGVzIHRlbXBsYXRhYmxlIGFyZWEgZm9yIG9uZSBvciBtb3JlIGFjdGlvbnMuXG4gKlxuICogQGlneE1vZHVsZSBJZ3hBY3Rpb25TdHJpcE1vZHVsZVxuICpcbiAqIEBpZ3hUaGVtZSBpZ3gtYWN0aW9uLXN0cmlwLXRoZW1lXG4gKlxuICogQGlneEtleXdvcmRzIGFjdGlvbiwgc3RyaXAsIGFjdGlvblN0cmlwLCBwaW5uaW5nLCBlZGl0aW5nXG4gKlxuICogQGlneEdyb3VwIERhdGEgRW50cnkgJiBEaXNwbGF5XG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSBJZ25pdGUgVUkgQWN0aW9uIFN0cmlwIGlzIGEgY29udGFpbmVyLCBvdmVybGF5aW5nIGl0cyBwYXJlbnQgY29udGFpbmVyLFxuICogYW5kIGRpc3BsYXlpbmcgYWN0aW9uIGJ1dHRvbnMgd2l0aCBhY3Rpb24gYXBwbGljYWJsZSB0byB0aGUgcGFyZW50IGNvbXBvbmVudCB0aGUgc3RyaXAgaXMgaW5zdGFudGlhdGVkIG9yIHNob3duIGZvci5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGlneC1hY3Rpb24tc3RyaXAgI2FjdGlvblN0cmlwPlxuICogICAgIDxpZ3gtaWNvbiAoY2xpY2spPVwiZG9Tb21lQWN0aW9uKClcIj48L2lneC1pY29uPlxuICogPC9pZ3gtYWN0aW9uLXN0cmlwPlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1hY3Rpb24tc3RyaXAnLFxuICAgIHRlbXBsYXRlVXJsOiAnYWN0aW9uLXN0cmlwLmNvbXBvbmVudC5odG1sJ1xufSlcblxuZXhwb3J0IGNsYXNzIElneEFjdGlvblN0cmlwQ29tcG9uZW50IGV4dGVuZHMgRGlzcGxheURlbnNpdHlCYXNlIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgY29udGV4dCBvZiBhbiBhY3Rpb24gc3RyaXAuXG4gICAgICogVGhlIGNvbnRleHQgc2hvdWxkIGJlIGFuIGluc3RhbmNlIG9mIGEgQENvbXBvbmVudCwgdGhhdCBoYXMgZWxlbWVudCBwcm9wZXJ0eS5cbiAgICAgKiBUaGlzIGVsZW1lbnQgd2lsbCBiZSB0aGUgcGxhY2Vob2xkZXIgb2YgdGhlIGFjdGlvbiBzdHJpcC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYWN0aW9uLXN0cmlwIFtjb250ZXh0XT1cImNlbGxcIj48L2lneC1hY3Rpb24tc3RyaXA+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgY29udGV4dDogYW55O1xuICAgIC8qKlxuICAgICAqIE1lbnUgSXRlbXMgQ29udGVudENoaWxkcmVuIGluc2lkZSB0aGUgQWN0aW9uIFN0cmlwXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hBY3Rpb25TdHJpcE1lbnVJdGVtRGlyZWN0aXZlKVxuICAgIHB1YmxpYyBfbWVudUl0ZW1zOiBRdWVyeUxpc3Q8SWd4QWN0aW9uU3RyaXBNZW51SXRlbURpcmVjdGl2ZT47XG5cblxuICAgIC8qKlxuICAgICAqIEFjdGlvbkJ1dHRvbiBhcyBDb250ZW50Q2hpbGRyZW4gaW5zaWRlIHRoZSBBY3Rpb24gU3RyaXBcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkcmVuKElneEdyaWRBY3Rpb25zQmFzZURpcmVjdGl2ZSlcbiAgICBwdWJsaWMgYWN0aW9uQnV0dG9uczogUXVlcnlMaXN0PElneEdyaWRBY3Rpb25zQmFzZURpcmVjdGl2ZT47XG5cbiAgICAvKipcbiAgICAgKiBBbiBASW5wdXQgcHJvcGVydHkgdGhhdCBzZXQgdGhlIHZpc2liaWxpdHkgb2YgdGhlIEFjdGlvbiBTdHJpcC5cbiAgICAgKiBDb3VsZCBiZSB1c2VkIHRvIHNldCBpZiB0aGUgQWN0aW9uIFN0cmlwIHdpbGwgYmUgaW5pdGlhbGx5IGhpZGRlbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqICA8aWd4LWFjdGlvbi1zdHJpcCBbaGlkZGVuXT1cImZhbHNlXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGhpZGRlbih2YWx1ZSkge1xuICAgICAgICB0aGlzLl9oaWRkZW4gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhpZGRlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZGRlbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIb3N0IGBjbGFzcy5pZ3gtYWN0aW9uLXN0cmlwYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBJbnB1dCgnY2xhc3MnKVxuICAgIHB1YmxpYyBob3N0Q2xhc3M6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEdldHMvU2V0cyB0aGUgcmVzb3VyY2Ugc3RyaW5ncy5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogQnkgZGVmYXVsdCBpdCB1c2VzIEVOIHJlc291cmNlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgcmVzb3VyY2VTdHJpbmdzKHZhbHVlOiBJQWN0aW9uU3RyaXBSZXNvdXJjZVN0cmluZ3MpIHtcbiAgICAgICAgdGhpcy5fcmVzb3VyY2VTdHJpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fcmVzb3VyY2VTdHJpbmdzLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXNvdXJjZVN0cmluZ3MoKTogSUFjdGlvblN0cmlwUmVzb3VyY2VTdHJpbmdzIHtcbiAgICAgICAgaWYgKCF0aGlzLl9yZXNvdXJjZVN0cmluZ3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MuQWN0aW9uU3RyaXBSZXNvdXJjZVN0cmluZ3M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc291cmNlU3RyaW5ncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWZlcmVuY2UgdG8gdGhlIG1lbnVcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCdkcm9wZG93bicpXG4gICAgcHVibGljIG1lbnU6IElneERyb3BEb3duQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogR2V0dGVyIGZvciBtZW51IG92ZXJsYXkgc2V0dGluZ3NcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbWVudU92ZXJsYXlTZXR0aW5nczogT3ZlcmxheVNldHRpbmdzID0geyBzY3JvbGxTdHJhdGVneTogbmV3IENsb3NlU2Nyb2xsU3RyYXRlZ3koKSB9O1xuXG4gICAgcHJpdmF0ZSBfaGlkZGVuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfcmVzb3VyY2VTdHJpbmdzO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX3ZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEaXNwbGF5RGVuc2l0eVRva2VuKSBwcm90ZWN0ZWQgX2Rpc3BsYXlEZW5zaXR5T3B0aW9uczogSURpc3BsYXlEZW5zaXR5T3B0aW9ucyxcbiAgICAgICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICAgICAgc3VwZXIoX2Rpc3BsYXlEZW5zaXR5T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0dGVyIGZvciB0aGUgJ2Rpc3BsYXknIHByb3BlcnR5IG9mIHRoZSBjdXJyZW50IGBJZ3hBY3Rpb25TdHJpcGBcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmRpc3BsYXknKVxuICAgIHB1YmxpYyBnZXQgZGlzcGxheSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlkZGVuID8gJ25vbmUnIDogJ2ZsZXgnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhvc3QgYGF0dHIuY2xhc3NgIGJpbmRpbmcuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmNsYXNzJylcbiAgICBwdWJsaWMgZ2V0IGhvc3RDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBbdGhpcy5nZXRDb21wb25lbnREZW5zaXR5Q2xhc3MoJ2lneC1hY3Rpb24tc3RyaXAnKV07XG4gICAgICAgIC8vIFRoZSBjdXN0b20gY2xhc3NlcyBzaG91bGQgYmUgYXQgdGhlIGVuZC5cbiAgICAgICAgaWYgKCFjbGFzc2VzLmluY2x1ZGVzKCdpZ3gtYWN0aW9uLXN0cmlwJykpIHtcbiAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaWd4LWFjdGlvbi1zdHJpcCcpO1xuICAgICAgICB9XG4gICAgICAgIGNsYXNzZXMucHVzaCh0aGlzLmhvc3RDbGFzcyk7XG4gICAgICAgIHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZW51IEl0ZW1zIGxpc3QuXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCBtZW51SXRlbXMoKSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5hY3Rpb25CdXR0b25zLmZvckVhY2goYnV0dG9uID0+IHtcbiAgICAgICAgICAgIGlmIChidXR0b24uYXNNZW51SXRlbXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGJ1dHRvbi5idXR0b25zO1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi50b0FycmF5KCkuZm9yRWFjaCh4ID0+IGFjdGlvbnMucHVzaCh4KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFsuLi4gdGhpcy5fbWVudUl0ZW1zLnRvQXJyYXkoKSwgLi4uYWN0aW9uc107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMuYWN0aW9uQnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiB7XG4gICAgICAgICAgICBidXR0b24uc3RyaXAgPSB0aGlzO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hY3Rpb25CdXR0b25zLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uQnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiB7XG4gICAgICAgICAgICAgICAgYnV0dG9uLnN0cmlwID0gdGhpcztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5tZW51LnNlbGVjdGlvbkNoYW5naW5nLnN1YnNjcmliZSgoJGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSAoJGV2ZW50Lm5ld1NlbGVjdGlvbiBhcyBhbnkpLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGxldCBhbGxCdXR0b25zID0gW107XG4gICAgICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbnMuZm9yRWFjaChhY3Rpb25CdXR0b25zID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uQnV0dG9ucy5hc01lbnVJdGVtcykge1xuICAgICAgICAgICAgICAgICAgICBhbGxCdXR0b25zID0gWy4uLmFsbEJ1dHRvbnMsIC4uLmFjdGlvbkJ1dHRvbnMuYnV0dG9ucy50b0FycmF5KCldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gYWxsQnV0dG9ucy5maW5kKHggPT4gbmV3U2VsZWN0aW9uLmNvbnRhaW5zKHguY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpKTtcbiAgICAgICAgICAgIGlmIChidXR0b24pIHtcbiAgICAgICAgICAgICAgICBidXR0b24uYWN0aW9uQ2xpY2suZW1pdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93aW5nIHRoZSBBY3Rpb24gU3RyaXAgYW5kIGFwcGVuZGluZyBpdCB0aGUgc3BlY2lmaWVkIGNvbnRleHQgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjb250ZXh0XG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5hY3Rpb25TdHJpcC5zaG93KHJvdyk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNob3coY29udGV4dD86IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpZGRlbiA9IGZhbHNlO1xuICAgICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyB3aGVuIHNob3duIGZvciBkaWZmZXJlbnQgY29udGV4dCBtYWtlIHN1cmUgdGhlIG1lbnUgd29uJ3Qgc3RheSBvcGVuZWRcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dCAhPT0gY29udGV4dCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICBpZiAodGhpcy5jb250ZXh0ICYmIHRoaXMuY29udGV4dC5lbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGNvbnRleHQuZWxlbWVudC5uYXRpdmVFbGVtZW50LCB0aGlzLl92aWV3Q29udGFpbmVyLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhpZGluZyB0aGUgQWN0aW9uIFN0cmlwIGFuZCByZW1vdmluZyBpdCBmcm9tIGl0cyBjdXJyZW50IGNvbnRleHQgZWxlbWVudC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuYWN0aW9uU3RyaXAuaGlkZSgpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBoaWRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpZGRlbiA9IHRydWU7XG4gICAgICAgIHRoaXMuY2xvc2VNZW51KCk7XG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQgJiYgdGhpcy5jb250ZXh0LmVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5jb250ZXh0LmVsZW1lbnQubmF0aXZlRWxlbWVudCwgdGhpcy5fdmlld0NvbnRhaW5lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2UgdGhlIG1lbnUgaWYgb3BlbmVkXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBjbG9zZU1lbnUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm1lbnUgJiYgIXRoaXMubWVudS5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMubWVudS5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiaWd4LWFjdGlvbi1zdHJpcF9fYWN0aW9uc1wiPlxuICAgIDxuZy1jb250ZW50ICNjb250ZW50PjwvbmctY29udGVudD5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWVudUl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgaWd4QnV0dG9uPVwiaWNvblwiXG4gICAgICAgICAgICBpZ3hSaXBwbGVcbiAgICAgICAgICAgIFtpZ3hUb2dnbGVBY3Rpb25dPVwiZHJvcGRvd25cIlxuICAgICAgICAgICAgW292ZXJsYXlTZXR0aW5nc109XCJtZW51T3ZlcmxheVNldHRpbmdzXCJcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgW3RpdGxlXT1cInJlc291cmNlU3RyaW5ncy5pZ3hfYWN0aW9uX3N0cmlwX2J1dHRvbl9tb3JlX3RpdGxlXCJcbiAgICAgICAgICAgIFtpZ3hEcm9wRG93bkl0ZW1OYXZpZ2F0aW9uXT1cImRyb3Bkb3duXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGlneC1pY29uPm1vcmVfdmVydDwvaWd4LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxpZ3gtZHJvcC1kb3duICNkcm9wZG93biBbZGlzcGxheURlbnNpdHldPVwiZGlzcGxheURlbnNpdHlcIj5cbiAgICAgICAgPGlneC1kcm9wLWRvd24taXRlbVxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbWVudUl0ZW1zXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaWd4LWFjdGlvbi1zdHJpcF9fbWVudS1pdGVtXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlneC1kcm9wLWRvd25fX2l0ZW0tdGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnRlbXBsYXRlUmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2lneC1kcm9wLWRvd24taXRlbT5cbiAgICA8L2lneC1kcm9wLWRvd24+XG48L2Rpdj5cbiJdfQ==
275
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXN0cmlwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9hY3Rpb24tc3RyaXAvYWN0aW9uLXN0cmlwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9hY3Rpb24tc3RyaXAvYWN0aW9uLXN0cmlwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsU0FBUyxFQUNULFdBQVcsRUFDWCxLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sRUFDTixlQUFlLEVBRWYsU0FBUyxFQUtaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBMEIsTUFBTSxpQkFBaUIsQ0FBQztBQUVsRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQW1CLE1BQU0sd0JBQXdCLENBQUM7QUFDOUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNENBQTRDLENBQUM7Ozs7Ozs7Ozs7QUFLekYsTUFBTSxPQUFPLCtCQUErQjtJQUN4QyxZQUNXLFdBQTZCO1FBQTdCLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtJQUNwQyxDQUFDOzs0SEFISSwrQkFBK0I7Z0hBQS9CLCtCQUErQjsyRkFBL0IsK0JBQStCO2tCQUgzQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSwwQkFBMEI7aUJBQ3ZDOztBQU9EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQU1ILE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxrQkFBa0I7SUFtSDNELFlBQ1ksY0FBZ0MsRUFDaEMsUUFBbUIsRUFDd0Isc0JBQThDLEVBQzFGLEdBQXNCO1FBQzdCLEtBQUssQ0FBQyxz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RTtZQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3JCO0lBQ0wsQ0FBQzs7b0hBaFFRLHVCQUF1QiwyRUFzSFIsbUJBQW1CO3dHQXRIbEMsdUJBQXVCLHlTQW1CZiwrQkFBK0IsZ0RBVS9CLDJCQUEyQixzSkN4RmhELGlvQ0ErQkE7MkZENEJhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDSSxrQkFBa0I7OzBCQTBIdkIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxtQkFBbUI7NEVBMUdwQyxPQUFPO3NCQURiLEtBQUs7Z0JBU0MsVUFBVTtzQkFEaEIsZUFBZTt1QkFBQywrQkFBK0I7Z0JBV3pDLGFBQWE7c0JBRG5CLGVBQWU7dUJBQUMsMkJBQTJCO2dCQWFqQyxNQUFNO3NCQURoQixLQUFLO2dCQWdCQyxTQUFTO3NCQURmLEtBQUs7dUJBQUMsT0FBTztnQkFVSCxlQUFlO3NCQUR6QixLQUFLO2dCQXFDQyxJQUFJO3NCQURWLFNBQVM7dUJBQUMsVUFBVTtnQkE2QlYsT0FBTztzQkFEakIsV0FBVzt1QkFBQyxlQUFlO2dCQVlqQixXQUFXO3NCQURyQixXQUFXO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBEaXJlY3RpdmUsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgT3B0aW9uYWwsXG4gICAgSW5qZWN0LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBRdWVyeUxpc3QsXG4gICAgVmlld0NoaWxkLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQWZ0ZXJWaWV3SW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERpc3BsYXlEZW5zaXR5QmFzZSwgRGlzcGxheURlbnNpdHlUb2tlbiwgSURpc3BsYXlEZW5zaXR5T3B0aW9ucyB9IGZyb20gJy4uL2NvcmUvZGVuc2l0eSc7XG5pbXBvcnQgeyBJQWN0aW9uU3RyaXBSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vYWN0aW9uLXN0cmlwLXJlc291cmNlcyc7XG5pbXBvcnQgeyBDdXJyZW50UmVzb3VyY2VTdHJpbmdzIH0gZnJvbSAnLi4vY29yZS9pMThuL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBJZ3hEcm9wRG93bkNvbXBvbmVudCB9IGZyb20gJy4uL2Ryb3AtZG93bi9wdWJsaWNfYXBpJztcbmltcG9ydCB7IENsb3NlU2Nyb2xsU3RyYXRlZ3ksIE92ZXJsYXlTZXR0aW5ncyB9IGZyb20gJy4uL3NlcnZpY2VzL3B1YmxpY19hcGknO1xuaW1wb3J0IHsgSWd4R3JpZEFjdGlvbnNCYXNlRGlyZWN0aXZlIH0gZnJvbSAnLi9ncmlkLWFjdGlvbnMvZ3JpZC1hY3Rpb25zLWJhc2UuZGlyZWN0aXZlJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4QWN0aW9uU3RyaXBNZW51SXRlbV0nXG59KVxuZXhwb3J0IGNsYXNzIElneEFjdGlvblN0cmlwTWVudUl0ZW1EaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT5cbiAgICApIHsgfVxufVxuXG4vKipcbiAqIEFjdGlvbiBTdHJpcCBwcm92aWRlcyB0ZW1wbGF0YWJsZSBhcmVhIGZvciBvbmUgb3IgbW9yZSBhY3Rpb25zLlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4QWN0aW9uU3RyaXBNb2R1bGVcbiAqXG4gKiBAaWd4VGhlbWUgaWd4LWFjdGlvbi1zdHJpcC10aGVtZVxuICpcbiAqIEBpZ3hLZXl3b3JkcyBhY3Rpb24sIHN0cmlwLCBhY3Rpb25TdHJpcCwgcGlubmluZywgZWRpdGluZ1xuICpcbiAqIEBpZ3hHcm91cCBEYXRhIEVudHJ5ICYgRGlzcGxheVxuICpcbiAqIEByZW1hcmtzXG4gKiBUaGUgSWduaXRlIFVJIEFjdGlvbiBTdHJpcCBpcyBhIGNvbnRhaW5lciwgb3ZlcmxheWluZyBpdHMgcGFyZW50IGNvbnRhaW5lcixcbiAqIGFuZCBkaXNwbGF5aW5nIGFjdGlvbiBidXR0b25zIHdpdGggYWN0aW9uIGFwcGxpY2FibGUgdG8gdGhlIHBhcmVudCBjb21wb25lbnQgdGhlIHN0cmlwIGlzIGluc3RhbnRpYXRlZCBvciBzaG93biBmb3IuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtYWN0aW9uLXN0cmlwICNhY3Rpb25TdHJpcD5cbiAqICAgICA8aWd4LWljb24gKGNsaWNrKT1cImRvU29tZUFjdGlvbigpXCI+PC9pZ3gtaWNvbj5cbiAqIDwvaWd4LWFjdGlvbi1zdHJpcD5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtYWN0aW9uLXN0cmlwJyxcbiAgICB0ZW1wbGF0ZVVybDogJ2FjdGlvbi1zdHJpcC5jb21wb25lbnQuaHRtbCdcbn0pXG5cbmV4cG9ydCBjbGFzcyBJZ3hBY3Rpb25TdHJpcENvbXBvbmVudCBleHRlbmRzIERpc3BsYXlEZW5zaXR5QmFzZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQge1xuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGNvbnRleHQgb2YgYW4gYWN0aW9uIHN0cmlwLlxuICAgICAqIFRoZSBjb250ZXh0IHNob3VsZCBiZSBhbiBpbnN0YW5jZSBvZiBhIEBDb21wb25lbnQsIHRoYXQgaGFzIGVsZW1lbnQgcHJvcGVydHkuXG4gICAgICogVGhpcyBlbGVtZW50IHdpbGwgYmUgdGhlIHBsYWNlaG9sZGVyIG9mIHRoZSBhY3Rpb24gc3RyaXAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWFjdGlvbi1zdHJpcCBbY29udGV4dF09XCJjZWxsXCI+PC9pZ3gtYWN0aW9uLXN0cmlwPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbnRleHQ6IGFueTtcbiAgICAvKipcbiAgICAgKiBNZW51IEl0ZW1zIENvbnRlbnRDaGlsZHJlbiBpbnNpZGUgdGhlIEFjdGlvbiBTdHJpcFxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oSWd4QWN0aW9uU3RyaXBNZW51SXRlbURpcmVjdGl2ZSlcbiAgICBwdWJsaWMgX21lbnVJdGVtczogUXVlcnlMaXN0PElneEFjdGlvblN0cmlwTWVudUl0ZW1EaXJlY3RpdmU+O1xuXG5cbiAgICAvKipcbiAgICAgKiBBY3Rpb25CdXR0b24gYXMgQ29udGVudENoaWxkcmVuIGluc2lkZSB0aGUgQWN0aW9uIFN0cmlwXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihJZ3hHcmlkQWN0aW9uc0Jhc2VEaXJlY3RpdmUpXG4gICAgcHVibGljIGFjdGlvbkJ1dHRvbnM6IFF1ZXJ5TGlzdDxJZ3hHcmlkQWN0aW9uc0Jhc2VEaXJlY3RpdmU+O1xuXG4gICAgLyoqXG4gICAgICogQW4gQElucHV0IHByb3BlcnR5IHRoYXQgc2V0IHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBBY3Rpb24gU3RyaXAuXG4gICAgICogQ291bGQgYmUgdXNlZCB0byBzZXQgaWYgdGhlIEFjdGlvbiBTdHJpcCB3aWxsIGJlIGluaXRpYWxseSBoaWRkZW4uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAgPGlneC1hY3Rpb24tc3RyaXAgW2hpZGRlbl09XCJmYWxzZVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBoaWRkZW4odmFsdWUpIHtcbiAgICAgICAgdGhpcy5faGlkZGVuID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoaWRkZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRkZW47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSG9zdCBgY2xhc3MuaWd4LWFjdGlvbi1zdHJpcGAgYmluZGluZy5cbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBASW5wdXQoJ2NsYXNzJylcbiAgICBwdWJsaWMgaG9zdENsYXNzOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzL1NldHMgdGhlIHJlc291cmNlIHN0cmluZ3MuXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIEJ5IGRlZmF1bHQgaXQgdXNlcyBFTiByZXNvdXJjZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHJlc291cmNlU3RyaW5ncyh2YWx1ZTogSUFjdGlvblN0cmlwUmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlU3RyaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3Jlc291cmNlU3RyaW5ncywgdmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVzb3VyY2VTdHJpbmdzKCk6IElBY3Rpb25TdHJpcFJlc291cmNlU3RyaW5ncyB7XG4gICAgICAgIGlmICghdGhpcy5fcmVzb3VyY2VTdHJpbmdzKSB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvdXJjZVN0cmluZ3MgPSBDdXJyZW50UmVzb3VyY2VTdHJpbmdzLkFjdGlvblN0cmlwUmVzb3VyY2VTdHJpbmdzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZVN0cmluZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGlkZSBvciBub3QgdGhlIEFjdGlvbiBTdHJpcCBiYXNlZCBvbiBpZiBpdCBpcyBhIG1lbnUuXG4gICAgICogXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgICBwdWJsaWMgZ2V0IGhpZGVPblJvd0xlYXZlKCk6IGJvb2xlYW57XG4gICAgICAgIGlmKHRoaXMubWVudS5pdGVtcy5sZW5ndGggPT09IDApe1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1lbHNlIGlmKHRoaXMubWVudS5pdGVtcy5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgIGlmKHRoaXMubWVudS5jb2xsYXBzZWQpe1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVmZXJlbmNlIHRvIHRoZSBtZW51XG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnZHJvcGRvd24nKVxuICAgIHB1YmxpYyBtZW51OiBJZ3hEcm9wRG93bkNvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICAqIEdldHRlciBmb3IgbWVudSBvdmVybGF5IHNldHRpbmdzXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIG1lbnVPdmVybGF5U2V0dGluZ3M6IE92ZXJsYXlTZXR0aW5ncyA9IHsgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBDbG9zZVNjcm9sbFN0cmF0ZWd5KCkgfTtcblxuICAgIHByaXZhdGUgX2hpZGRlbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3Jlc291cmNlU3RyaW5ncztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF92aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRGlzcGxheURlbnNpdHlUb2tlbikgcHJvdGVjdGVkIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnM6IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMsXG4gICAgICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgICAgIHN1cGVyKF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHRlciBmb3IgdGhlICdkaXNwbGF5JyBwcm9wZXJ0eSBvZiB0aGUgY3VycmVudCBgSWd4QWN0aW9uU3RyaXBgXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5kaXNwbGF5JylcbiAgICBwdWJsaWMgZ2V0IGRpc3BsYXkoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZGRlbiA/ICdub25lJyA6ICdmbGV4JztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIb3N0IGBhdHRyLmNsYXNzYCBiaW5kaW5nLlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5jbGFzcycpXG4gICAgcHVibGljIGdldCBob3N0Q2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBjbGFzc2VzID0gW3RoaXMuZ2V0Q29tcG9uZW50RGVuc2l0eUNsYXNzKCdpZ3gtYWN0aW9uLXN0cmlwJyldO1xuICAgICAgICAvLyBUaGUgY3VzdG9tIGNsYXNzZXMgc2hvdWxkIGJlIGF0IHRoZSBlbmQuXG4gICAgICAgIGlmICghY2xhc3Nlcy5pbmNsdWRlcygnaWd4LWFjdGlvbi1zdHJpcCcpKSB7XG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2lneC1hY3Rpb24tc3RyaXAnKTtcbiAgICAgICAgfVxuICAgICAgICBjbGFzc2VzLnB1c2godGhpcy5ob3N0Q2xhc3MpO1xuICAgICAgICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWVudSBJdGVtcyBsaXN0LlxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbWVudUl0ZW1zKCkge1xuICAgICAgICBjb25zdCBhY3Rpb25zID0gW107XG4gICAgICAgIHRoaXMuYWN0aW9uQnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiB7XG4gICAgICAgICAgICBpZiAoYnV0dG9uLmFzTWVudUl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBidXR0b24uYnV0dG9ucztcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4udG9BcnJheSgpLmZvckVhY2goeCA9PiBhY3Rpb25zLnB1c2goeCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBbLi4uIHRoaXMuX21lbnVJdGVtcy50b0FycmF5KCksIC4uLmFjdGlvbnNdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbnMuZm9yRWFjaChidXR0b24gPT4ge1xuICAgICAgICAgICAgYnV0dG9uLnN0cmlwID0gdGhpcztcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWN0aW9uQnV0dG9ucy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFjdGlvbkJ1dHRvbnMuZm9yRWFjaChidXR0b24gPT4ge1xuICAgICAgICAgICAgICAgIGJ1dHRvbi5zdHJpcCA9IHRoaXM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMubWVudS5zZWxlY3Rpb25DaGFuZ2luZy5zdWJzY3JpYmUoKCRldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gKCRldmVudC5uZXdTZWxlY3Rpb24gYXMgYW55KS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBsZXQgYWxsQnV0dG9ucyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5hY3Rpb25CdXR0b25zLmZvckVhY2goYWN0aW9uQnV0dG9ucyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbkJ1dHRvbnMuYXNNZW51SXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsQnV0dG9ucyA9IFsuLi5hbGxCdXR0b25zLCAuLi5hY3Rpb25CdXR0b25zLmJ1dHRvbnMudG9BcnJheSgpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGFsbEJ1dHRvbnMuZmluZCh4ID0+IG5ld1NlbGVjdGlvbi5jb250YWlucyh4LmNvbnRhaW5lci5uYXRpdmVFbGVtZW50KSk7XG4gICAgICAgICAgICBpZiAoYnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgYnV0dG9uLmFjdGlvbkNsaWNrLmVtaXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hvd2luZyB0aGUgQWN0aW9uIFN0cmlwIGFuZCBhcHBlbmRpbmcgaXQgdGhlIHNwZWNpZmllZCBjb250ZXh0IGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGV4dFxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuYWN0aW9uU3RyaXAuc2hvdyhyb3cpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93KGNvbnRleHQ/OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2hlbiBzaG93biBmb3IgZGlmZmVyZW50IGNvbnRleHQgbWFrZSBzdXJlIHRoZSBtZW51IHdvbid0IHN0YXkgb3BlbmVkXG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQgIT09IGNvbnRleHQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VNZW51KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dCAmJiB0aGlzLmNvbnRleHQuZWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChjb250ZXh0LmVsZW1lbnQubmF0aXZlRWxlbWVudCwgdGhpcy5fdmlld0NvbnRhaW5lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIaWRpbmcgdGhlIEFjdGlvbiBTdHJpcCBhbmQgcmVtb3ZpbmcgaXQgZnJvbSBpdHMgY3VycmVudCBjb250ZXh0IGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmFjdGlvblN0cmlwLmhpZGUoKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgaGlkZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oaWRkZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgICAgICBpZiAodGhpcy5jb250ZXh0ICYmIHRoaXMuY29udGV4dC5lbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMuY29udGV4dC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIHRoaXMuX3ZpZXdDb250YWluZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlIHRoZSBtZW51IGlmIG9wZW5lZFxuICAgICAqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByaXZhdGUgY2xvc2VNZW51KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tZW51ICYmICF0aGlzLm1lbnUuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLm1lbnUuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImlneC1hY3Rpb24tc3RyaXBfX2FjdGlvbnNcIj5cbiAgICA8bmctY29udGVudCAjY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lbnVJdGVtcy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGlneEJ1dHRvbj1cImljb25cIlxuICAgICAgICAgICAgaWd4UmlwcGxlXG4gICAgICAgICAgICBbaWd4VG9nZ2xlQWN0aW9uXT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgIFtvdmVybGF5U2V0dGluZ3NdPVwibWVudU92ZXJsYXlTZXR0aW5nc1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCJyZXNvdXJjZVN0cmluZ3MuaWd4X2FjdGlvbl9zdHJpcF9idXR0b25fbW9yZV90aXRsZVwiXG4gICAgICAgICAgICBbaWd4RHJvcERvd25JdGVtTmF2aWdhdGlvbl09XCJkcm9wZG93blwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpZ3gtaWNvbj5tb3JlX3ZlcnQ8L2lneC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8aWd4LWRyb3AtZG93biAjZHJvcGRvd24gW2Rpc3BsYXlEZW5zaXR5XT1cImRpc3BsYXlEZW5zaXR5XCI+XG4gICAgICAgIDxpZ3gtZHJvcC1kb3duLWl0ZW1cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIG1lbnVJdGVtc1wiXG4gICAgICAgICAgICBjbGFzcz1cImlneC1hY3Rpb24tc3RyaXBfX21lbnUtaXRlbVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtZHJvcC1kb3duX19pdGVtLXRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS50ZW1wbGF0ZVJlZjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9pZ3gtZHJvcC1kb3duLWl0ZW0+XG4gICAgPC9pZ3gtZHJvcC1kb3duPlxuPC9kaXY+XG4iXX0=
@@ -128,6 +128,16 @@ export class IgxAutocompleteDirective extends IgxDropDownItemNavigationDirective
128
128
  onInput() {
129
129
  this.open();
130
130
  }
131
+ /** @hidden @internal */
132
+ onCompositionStart() {
133
+ if (!this._composing) {
134
+ this._composing = true;
135
+ }
136
+ }
137
+ /** @hidden @internal */
138
+ onCompositionEnd() {
139
+ this._composing = false;
140
+ }
131
141
  /** @hidden @internal */
132
142
  onArrowDown(event) {
133
143
  event.preventDefault();
@@ -139,7 +149,7 @@ export class IgxAutocompleteDirective extends IgxDropDownItemNavigationDirective
139
149
  }
140
150
  /** @hidden @internal */
141
151
  handleKeyDown(event) {
142
- if (!this.collapsed) {
152
+ if (!this.collapsed && !this._composing) {
143
153
  switch (event.key.toLowerCase()) {
144
154
  case 'space':
145
155
  case 'spacebar':
@@ -261,7 +271,7 @@ export class IgxAutocompleteDirective extends IgxDropDownItemNavigationDirective
261
271
  ;
262
272
  }
263
273
  IgxAutocompleteDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: IgxAutocompleteDirective, deps: [{ token: NgModel, optional: true, self: true }, { token: FormControlName, optional: true, self: true }, { token: i1.IgxInputGroupComponent, optional: true }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
264
- IgxAutocompleteDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.0", type: IgxAutocompleteDirective, selector: "[igxAutocomplete]", inputs: { target: ["igxAutocomplete", "target"], autocompleteSettings: ["igxAutocompleteSettings", "autocompleteSettings"], disabled: ["igxAutocompleteDisabled", "disabled"] }, outputs: { selectionChanging: "selectionChanging" }, host: { listeners: { "input": "onInput()", "keydown.ArrowDown": "onArrowDown($event)", "keydown.Alt.ArrowDown": "onArrowDown($event)", "keydown.ArrowUp": "onArrowDown($event)", "keydown.Alt.ArrowUp": "onArrowDown($event)", "keydown.Tab": "onTab()", "keydown.Shift.Tab": "onTab()" }, properties: { "attr.autocomplete": "this.autofill", "attr.role": "this.role", "attr.aria-expanded": "this.ariaExpanded", "attr.aria-haspopup": "this.hasPopUp", "attr.aria-owns": "this.ariaOwns", "attr.aria-activedescendant": "this.ariaActiveDescendant", "attr.aria-autocomplete": "this.ariaAutocomplete" } }, exportAs: ["igxAutocomplete"], usesInheritance: true, ngImport: i0 });
274
+ IgxAutocompleteDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.0", type: IgxAutocompleteDirective, selector: "[igxAutocomplete]", inputs: { target: ["igxAutocomplete", "target"], autocompleteSettings: ["igxAutocompleteSettings", "autocompleteSettings"], disabled: ["igxAutocompleteDisabled", "disabled"] }, outputs: { selectionChanging: "selectionChanging" }, host: { listeners: { "input": "onInput()", "compositionstart": "onCompositionStart()", "compositionend": "onCompositionEnd()", "keydown.ArrowDown": "onArrowDown($event)", "keydown.Alt.ArrowDown": "onArrowDown($event)", "keydown.ArrowUp": "onArrowDown($event)", "keydown.Alt.ArrowUp": "onArrowDown($event)", "keydown.Tab": "onTab()", "keydown.Shift.Tab": "onTab()" }, properties: { "attr.autocomplete": "this.autofill", "attr.role": "this.role", "attr.aria-expanded": "this.ariaExpanded", "attr.aria-haspopup": "this.hasPopUp", "attr.aria-owns": "this.ariaOwns", "attr.aria-activedescendant": "this.ariaActiveDescendant", "attr.aria-autocomplete": "this.ariaAutocomplete" } }, exportAs: ["igxAutocomplete"], usesInheritance: true, ngImport: i0 });
265
275
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: IgxAutocompleteDirective, decorators: [{
266
276
  type: Directive,
267
277
  args: [{
@@ -319,6 +329,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImpor
319
329
  }], onInput: [{
320
330
  type: HostListener,
321
331
  args: ['input']
332
+ }], onCompositionStart: [{
333
+ type: HostListener,
334
+ args: ['compositionstart']
335
+ }], onCompositionEnd: [{
336
+ type: HostListener,
337
+ args: ['compositionend']
322
338
  }], onArrowDown: [{
323
339
  type: HostListener,
324
340
  args: ['keydown.ArrowDown', ['$event']]
@@ -352,4 +368,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImpor
352
368
  exports: [IgxAutocompleteDirective]
353
369
  }]
354
370
  }] });
355
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kaXJlY3RpdmVzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBRVIsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBR1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUNILHNCQUFzQixFQUN0QixvQkFBb0IsRUFJdkIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBRUgsa0NBQWtDLEVBQ2xDLGlCQUFpQixFQUVwQixNQUFNLDRCQUE0QixDQUFDOzs7O0FBeUJwQzs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUtILE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxrQ0FBa0M7SUE4STVFLFlBQTJELE9BQWdCLEVBQ2hCLFdBQTRCLEVBQzdELEtBQTZCLEVBQ3pDLFVBQXNCLEVBQ3RCLEdBQXNCO1FBQ2hDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUwyQyxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM3RCxVQUFLLEdBQUwsS0FBSyxDQUF3QjtRQUN6QyxlQUFVLEdBQVYsVUFBVSxDQUFZ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LG9CQUFvQjtnQkFPdEIsUUFBUTtzQkFEbEIsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBT2xCLG9CQUFvQjtzQkFEOUIsV0FBVzt1QkFBQyw0QkFBNEI7Z0JBTzlCLGdCQUFnQjtzQkFEMUIsV0FBVzt1QkFBQyx3QkFBd0I7Z0JBd0I5QixPQUFPO3NCQURiLFlBQVk7dUJBQUMsT0FBTztnQkFVZCxXQUFXO3NCQUpqQixZQUFZO3VCQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDNUMsWUFBWTt1QkFBQyx1QkFBdUIsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ2hELFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUMxQyxZQUFZO3VCQUFDLHFCQUFxQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVN4QyxLQUFLO3NCQUZYLFlBQVk7dUJBQUMsYUFBYTs7c0JBQzFCLFlBQVk7dUJBQUMsbUJBQW1COztBQXlJckMsY0FBYztBQU1kLE1BQU0sT0FBTyxxQkFBcUI7O2tIQUFyQixxQkFBcUI7bUhBQXJCLHFCQUFxQixpQkF2VHJCLHdCQUF3QixhQW1UdkIsaUJBQWlCLEVBQUUsWUFBWSxhQW5UaEMsd0JBQXdCO21IQXVUeEIscUJBQXFCLFlBSnBCLGlCQUFpQixFQUFFLFlBQVk7MkZBSWhDLHFCQUFxQjtrQkFMakMsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLENBQUM7b0JBQzFDLFlBQVksRUFBRSxDQUFDLHdCQUF3QixDQUFDO29CQUN4QyxPQUFPLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztpQkFDdEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nTW9kdWxlLFxuICAgIE9uRGVzdHJveSxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgU2VsZixcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIE9uSW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nTW9kZWwsIEZvcm1Db250cm9sTmFtZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDYW5jZWxhYmxlRXZlbnRBcmdzLCBJQmFzZUV2ZW50QXJncyB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHtcbiAgICBBYnNvbHV0ZVNjcm9sbFN0cmF0ZWd5LFxuICAgIEF1dG9Qb3NpdGlvblN0cmF0ZWd5LFxuICAgIElQb3NpdGlvblN0cmF0ZWd5LFxuICAgIElTY3JvbGxTdHJhdGVneSxcbiAgICBPdmVybGF5U2V0dGluZ3Ncbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHVibGljX2FwaSc7XG5pbXBvcnQge1xuICAgIElneERyb3BEb3duQ29tcG9uZW50LFxuICAgIElneERyb3BEb3duSXRlbU5hdmlnYXRpb25EaXJlY3RpdmUsXG4gICAgSWd4RHJvcERvd25Nb2R1bGUsXG4gICAgSVNlbGVjdGlvbkV2ZW50QXJnc1xufSBmcm9tICcuLi8uLi9kcm9wLWRvd24vcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW5wdXQtZ3JvdXAvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vdG9nZ2xlL3RvZ2dsZS5kaXJlY3RpdmUnO1xuXG4vKipcbiAqIEludGVyZmFjZSB0aGF0IGVuY2Fwc3VsYXRlcyBvbkl0ZW1TZWxlY3Rpb24gZXZlbnQgYXJndW1lbnRzIC0gbmV3IHZhbHVlIGFuZCBjYW5jZWwgc2VsZWN0aW9uLlxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvY29tcGxldGVTZWxlY3Rpb25DaGFuZ2luZ0V2ZW50QXJncyBleHRlbmRzIENhbmNlbGFibGVFdmVudEFyZ3MsIElCYXNlRXZlbnRBcmdzIHtcbiAgICAvKipcbiAgICAgKiBOZXcgdmFsdWUgc2VsZWN0ZWQgZnJvbSB0aGUgZHJvcCBkb3duXG4gICAgICovXG4gICAgdmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRvY29tcGxldGVPdmVybGF5U2V0dGluZ3Mge1xuICAgIC8qKiBQb3NpdGlvbiBzdHJhdGVneSB0byB1c2Ugd2l0aCB0aGlzIHNldHRpbmdzICovXG4gICAgcG9zaXRpb25TdHJhdGVneT86IElQb3NpdGlvblN0cmF0ZWd5O1xuICAgIC8qKiBTY3JvbGwgc3RyYXRlZ3kgdG8gdXNlIHdpdGggdGhpcyBzZXR0aW5ncyAqL1xuICAgIHNjcm9sbFN0cmF0ZWd5PzogSVNjcm9sbFN0cmF0ZWd5O1xuICAgIC8qKiBTZXQgdGhlIG91dGxldCBjb250YWluZXIgdG8gYXR0YWNoIHRoZSBvdmVybGF5IHRvICovXG4gICAgb3V0bGV0PzogSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZSB8IEVsZW1lbnRSZWY7XG59XG5cbi8qKlxuICogKipJZ25pdGUgVUkgZm9yIEFuZ3VsYXIgQXV0b2NvbXBsZXRlKiogLVxuICogW0RvY3VtZW50YXRpb25dKGh0dHBzOi8vd3d3LmluZnJhZ2lzdGljcy5jb20vcHJvZHVjdHMvaWduaXRlLXVpLWFuZ3VsYXIvYW5ndWxhci9jb21wb25lbnRzL2F1dG9jb21wbGV0ZS5odG1sKVxuICpcbiAqIFRoZSBpZ3hBdXRvY29tcGxldGUgZGlyZWN0aXZlIHByb3ZpZGVzIGEgd2F5IHRvIGVuaGFuY2UgYSB0ZXh0IGlucHV0XG4gKiBieSBzaG93aW5nIGEgZHJvcCBkb3duIG9mIHN1Z2dlc3RlZCBvcHRpb25zLCBwcm92aWRlZCBieSB0aGUgZGV2ZWxvcGVyLlxuICpcbiAqIEV4YW1wbGU6XG4gKiBgYGBodG1sXG4gKiA8aW5wdXQgdHlwZT1cInRleHRcIiBbaWd4QXV0b2NvbXBsZXRlXT1cInRvd25zUGFuZWxcIiAjYXV0b2NvbXBsZXRlUmVmPVwiaWd4QXV0b2NvbXBsZXRlXCIvPlxuICogPGlneC1kcm9wLWRvd24gI3Rvd25zUGFuZWw+XG4gKiAgICAgPGlneC1kcm9wLWRvd24taXRlbSAqbmdGb3I9XCJsZXQgdG93biBvZiB0b3ducyB8IHN0YXJ0c1dpdGg6dG93blNlbGVjdGVkXCIgW3ZhbHVlXT1cInRvd25cIj5cbiAqICAgICAgICAge3t0b3dufX1cbiAqICAgICA8L2lneC1kcm9wLWRvd24taXRlbT5cbiAqIDwvaWd4LWRyb3AtZG93bj5cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tpZ3hBdXRvY29tcGxldGVdJyxcbiAgICBleHBvcnRBczogJ2lneEF1dG9jb21wbGV0ZSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4QXV0b2NvbXBsZXRlRGlyZWN0aXZlIGV4dGVuZHMgSWd4RHJvcERvd25JdGVtTmF2aWdhdGlvbkRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB0YXJnZXQgb2YgdGhlIGF1dG9jb21wbGV0ZSBkaXJlY3RpdmVcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tIFNldCAtLT5cbiAgICAgKiA8aW5wdXQgW2lneEF1dG9jb21wbGV0ZV09XCJkcm9wZG93blwiIC8+XG4gICAgICogLi4uXG4gICAgICogPGlneC1kcm9wLWRvd24gI2Ryb3Bkb3duPlxuICAgICAqIC4uLlxuICAgICAqIDwvaWd4LWRyb3AtZG93bj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneEF1dG9jb21wbGV0ZScpXG4gICAgcHVibGljIGdldCB0YXJnZXQoKTogSWd4RHJvcERvd25Db21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFyZ2V0IGFzIElneERyb3BEb3duQ29tcG9uZW50O1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHRhcmdldCh2OiBJZ3hEcm9wRG93bkNvbXBvbmVudCkge1xuICAgICAgICB0aGlzLl90YXJnZXQgPSB2O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgb3ZlcmxheSBzZXR0aW5ncyBmb3IgdGhlIGF1dG9jb21wbGV0ZSBkcm9wIGRvd25cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBnZXRcbiAgICAgKiBsZXQgc2V0dGluZ3MgPSB0aGlzLmF1dG9jb21wbGV0ZS5hdXRvY29tcGxldGVTZXR0aW5ncztcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLXNldC0tPlxuICAgICAqIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtpZ3hBdXRvY29tcGxldGVdPVwidG93bnNQYW5lbFwiIFtpZ3hBdXRvY29tcGxldGVTZXR0aW5nc109XCJzZXR0aW5nc1wiLz5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gc2V0XG4gICAgICogdGhpcy5zZXR0aW5ncyA9IHtcbiAgICAgKiAgcG9zaXRpb25TdHJhdGVneTogbmV3IENvbm5lY3RlZFBvc2l0aW9uaW5nU3RyYXRlZ3koe1xuICAgICAqICAgICAgY2xvc2VBbmltYXRpb246IG51bGwsXG4gICAgICogICAgICBvcGVuQW5pbWF0aW9uOiBudWxsXG4gICAgICogIH0pXG4gICAgICogfTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneEF1dG9jb21wbGV0ZVNldHRpbmdzJylcbiAgICBwdWJsaWMgYXV0b2NvbXBsZXRlU2V0dGluZ3M6IEF1dG9jb21wbGV0ZU92ZXJsYXlTZXR0aW5ncztcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hdXRvY29tcGxldGUnKVxuICAgIHB1YmxpYyBhdXRvZmlsbCA9ICdvZmYnO1xuXG4gICAgLyoqIEBoaWRkZW4gIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICBwdWJsaWMgcm9sZSA9ICdjb21ib2JveCc7XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzL2Rpc2FibGVzIGF1dG9jb21wbGV0ZSBjb21wb25lbnRcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBnZXRcbiAgICAgKiBsZXQgZGlzYWJsZWQgPSB0aGlzLmF1dG9jb21wbGV0ZS5kaXNhYmxlZDtcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLXNldC0tPlxuICAgICAqIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtpZ3hBdXRvY29tcGxldGVdPVwidG93bnNQYW5lbFwiIFtpZ3hBdXRvY29tcGxldGVEaXNhYmxlZF09XCJkaXNhYmxlZFwiLz5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gc2V0XG4gICAgICogcHVibGljIGRpc2FibGVkID0gdHJ1ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneEF1dG9jb21wbGV0ZURpc2FibGVkJylcbiAgICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYWZ0ZXIgaXRlbSBmcm9tIHRoZSBkcm9wIGRvd24gaXMgc2VsZWN0ZWRcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aW5wdXQgaWd4SW5wdXQgW2lneEF1dG9jb21wbGV0ZV09XCJ0b3duc1BhbmVsXCIgKHNlbGVjdGlvbkNoYW5naW5nKT0nc2VsZWN0aW9uQ2hhbmdpbmcoJGV2ZW50KScgLz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgc2VsZWN0aW9uQ2hhbmdpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPEF1dG9jb21wbGV0ZVNlbGVjdGlvbkNoYW5naW5nRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCk6IEhUTUxJbnB1dEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBwYXJlbnRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmVsZW1lbnQubmF0aXZlRWxlbWVudCA6IHRoaXMubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBzZXR0aW5ncygpOiBPdmVybGF5U2V0dGluZ3Mge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZGVmYXVsdFNldHRpbmdzLCB0aGlzLmF1dG9jb21wbGV0ZVNldHRpbmdzKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gc2V0dGluZ3MudGFyZ2V0IHx8IHNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kuc2V0dGluZ3MudGFyZ2V0O1xuICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb25TdHJhdGVneUNsb25lOiBJUG9zaXRpb25TdHJhdGVneSA9IHNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kuY2xvbmUoKTtcbiAgICAgICAgICAgIHNldHRpbmdzLnRhcmdldCA9IHRoaXMucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgIHNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kgPSBwb3NpdGlvblN0cmF0ZWd5Q2xvbmU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldHRpbmdzO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1leHBhbmRlZCcpXG4gICAgcHVibGljIGdldCBhcmlhRXhwYW5kZWQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jb2xsYXBzZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWhhc3BvcHVwJylcbiAgICBwdWJsaWMgZ2V0IGhhc1BvcFVwKCkge1xuICAgICAgICByZXR1cm4gJ2xpc3Rib3gnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1vd25zJylcbiAgICBwdWJsaWMgZ2V0IGFyaWFPd25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YXJnZXQubGlzdElkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50JylcbiAgICBwdWJsaWMgZ2V0IGFyaWFBY3RpdmVEZXNjZW5kYW50KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudGFyZ2V0LmNvbGxhcHNlZCAmJiB0aGlzLnRhcmdldC5mb2N1c2VkSXRlbSA/IHRoaXMudGFyZ2V0LmZvY3VzZWRJdGVtLmlkIDogbnVsbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAgQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYXV0b2NvbXBsZXRlJylcbiAgICBwdWJsaWMgZ2V0IGFyaWFBdXRvY29tcGxldGUoKSB7XG4gICAgICAgIHJldHVybiAnbGlzdCc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGlkOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGdldCBtb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmdNb2RlbCB8fCB0aGlzLmZvcm1Db250cm9sO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Nob3VsZEJlT3BlbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuICAgIHByaXZhdGUgZGVmYXVsdFNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3M7XG5cbiAgICBjb25zdHJ1Y3RvcihAU2VsZigpIEBPcHRpb25hbCgpIEBJbmplY3QoTmdNb2RlbCkgcHJvdGVjdGVkIG5nTW9kZWw6IE5nTW9kZWwsXG4gICAgICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgQEluamVjdChGb3JtQ29udHJvbE5hbWUpIHByb3RlY3RlZCBmb3JtQ29udHJvbDogRm9ybUNvbnRyb2xOYW1lLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgZ3JvdXA6IElneElucHV0R3JvdXBDb21wb25lbnQsXG4gICAgICAgIHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgICAgICBzdXBlcihudWxsKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAgQGludGVybmFsICovXG4gICAgQEhvc3RMaXN0ZW5lcignaW5wdXQnKVxuICAgIHB1YmxpYyBvbklucHV0KCkge1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAgQGludGVybmFsICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5BcnJvd0Rvd24nLCBbJyRldmVudCddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uQWx0LkFycm93RG93bicsIFsnJGV2ZW50J10pXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5BcnJvd1VwJywgWyckZXZlbnQnXSlcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLkFsdC5BcnJvd1VwJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25BcnJvd0Rvd24oZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICBAaW50ZXJuYWwgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLlRhYicpXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5TaGlmdC5UYWInKVxuICAgIHB1YmxpYyBvblRhYigpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaGFuZGxlS2V5RG93bihldmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3BhY2UnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3NwYWNlYmFyJzpcbiAgICAgICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgICAgICBjYXNlICdob21lJzpcbiAgICAgICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIuaGFuZGxlS2V5RG93bihldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAgQGludGVybmFsICovXG4gICAgcHVibGljIG9uQXJyb3dEb3duS2V5RG93bigpIHtcbiAgICAgICAgc3VwZXIub25BcnJvd0Rvd25LZXlEb3duKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvbkFycm93VXBLZXlEb3duKCkge1xuICAgICAgICBzdXBlci5vbkFycm93VXBLZXlEb3duKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvbkVuZEtleURvd24oKSB7XG4gICAgICAgIHN1cGVyLm9uRW5kS2V5RG93bigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgb25Ib21lS2V5RG93bigpIHtcbiAgICAgICAgc3VwZXIub25Ib21lS2V5RG93bigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlcyBhdXRvY29tcGxldGUgZHJvcCBkb3duXG4gICAgICovXG4gICAgcHVibGljIGNsb3NlKCkge1xuICAgICAgICB0aGlzLl9zaG91bGRCZU9wZW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YXJnZXQuY2xvc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVucyBhdXRvY29tcGxldGUgZHJvcCBkb3duXG4gICAgICovXG4gICAgcHVibGljIG9wZW4oKSB7XG4gICAgICAgIHRoaXMuX3Nob3VsZEJlT3BlbiA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmNvbGxhcHNlZCB8fCB0aGlzLnRhcmdldC5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBubyBkcm9wLWRvd24gd2lkdGggaXMgc2V0LCB0aGUgZHJvcC1kb3duIHdpbGwgYmUgYXMgd2lkZSBhcyB0aGUgYXV0b2NvbXBsZXRlIGlucHV0O1xuICAgICAgICB0aGlzLnRhcmdldC53aWR0aCA9IHRoaXMudGFyZ2V0LndpZHRoIHx8ICh0aGlzLnBhcmVudEVsZW1lbnQuY2xpZW50V2lkdGggKyAncHgnKTtcbiAgICAgICAgdGhpcy50YXJnZXQub3Blbih0aGlzLnNldHRpbmdzKTtcbiAgICAgICAgdGhpcy5oaWdobGlnaHRGaXJzdEl0ZW0oKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSB0aGlzLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZGVmYXVsdFNldHRpbmdzID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXRFbGVtZW50LFxuICAgICAgICAgICAgbW9kYWw6IGZhbHNlLFxuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBBYnNvbHV0ZVNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBuZXcgQXV0b1Bvc2l0aW9uU3RyYXRlZ3koKSxcbiAgICAgICAgICAgIGV4Y2x1ZGVGcm9tT3V0c2lkZUNsaWNrOiBbdGFyZ2V0RWxlbWVudF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLnRhcmdldC5jaGlsZHJlbi5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudGFyZ2V0LmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRGaXJzdEl0ZW0oKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3Nob3VsZEJlT3Blbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIF9zaG91bGRCZU9wZW4gZmxhZyBzaG91bGQgcmVtYWluIHVuY2hhbmdlZCBzaW5jZSB0aGlzIHN0YXRlIGNoYW5nZSBkb2Vzbid0IGNvbWUgZnJvbSBvdXRzaWRlIG9mIHRoZSBjb21wb25lbnRcbiAgICAgICAgICAgICAgICAvLyAobGlrZSBpbiB0aGUgY2FzZSBvZiBwdWJsaWMgQVBJIG9yIHVzZXIgaW50ZXJhY3Rpb24pLlxuICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRhcmdldC5zZWxlY3Rpb25DaGFuZ2luZy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHRoaXMuc2VsZWN0LmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGNvbGxhcHNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0ID8gdGhpcy50YXJnZXQuY29sbGFwc2VkIDogdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdCh2YWx1ZTogSVNlbGVjdGlvbkV2ZW50QXJncykge1xuICAgICAgICBpZiAoIXZhbHVlLm5ld1NlbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlLmNhbmNlbCA9IHRydWU7IC8vIERpc2FibGUgc2VsZWN0aW9uIGluIHRoZSBkcm9wIGRvd24sIGJlY2F1c2UgaW4gYXV0b2NvbXBsZXRlIHdlIGRvIG5vdCBzYXZlIHNlbGVjdGlvbi5cbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZS5uZXdTZWxlY3Rpb24udmFsdWU7XG4gICAgICAgIGNvbnN0IGFyZ3M6IEF1dG9jb21wbGV0ZVNlbGVjdGlvbkNoYW5naW5nRXZlbnRBcmdzID0geyB2YWx1ZTogbmV3VmFsdWUsIGNhbmNlbDogZmFsc2UgfTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2luZy5lbWl0KGFyZ3MpO1xuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsb3NlKCk7XG5cbiAgICAgICAgLy8gVXBkYXRlIG1vZGVsIGFmdGVyIHRoZSBpbnB1dCBpcyByZS1mb2N1c2VkLCBpbiBvcmRlciB0byBoYXZlIHByb3BlciB2YWxpZCBzdHlsaW5nLlxuICAgICAgICAvLyBPdGhlcndpc2Ugd2hlbiBpdGVtIGlzIHNlbGVjdGVkIHVzaW5nIG1vdXNlIChhbmQgaW5wdXQgaXMgYmx1cnJlZCksIHRoZW4gdmFsaWQgc3R5bGUgd2lsbCBiZSByZW1vdmVkLlxuICAgICAgICBpZiAodGhpcy5tb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5jb250cm9sLnNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgaGlnaGxpZ2h0Rmlyc3RJdGVtKCkge1xuICAgICAgICBpZiAodGhpcy50YXJnZXQuZm9jdXNlZEl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LmZvY3VzZWRJdGVtLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LmZvY3VzZWRJdGVtID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhcmdldC5uYXZpZ2F0ZUZpcnN0KCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9O1xufVxuXG4vKiogQGhpZGRlbiAqL1xuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbSWd4RHJvcERvd25Nb2R1bGUsIENvbW1vbk1vZHVsZV0sXG4gICAgZGVjbGFyYXRpb25zOiBbSWd4QXV0b2NvbXBsZXRlRGlyZWN0aXZlXSxcbiAgICBleHBvcnRzOiBbSWd4QXV0b2NvbXBsZXRlRGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hBdXRvY29tcGxldGVNb2R1bGUgeyB9XG4iXX0=
371
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9kaXJlY3RpdmVzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBRVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxRQUFRLEVBRVIsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBR1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUNILHNCQUFzQixFQUN0QixvQkFBb0IsRUFJdkIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBRUgsa0NBQWtDLEVBQ2xDLGlCQUFpQixFQUVwQixNQUFNLDRCQUE0QixDQUFDOzs7O0FBeUJwQzs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUtILE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxrQ0FBa0M7SUErSTVFLFlBQTJELE9BQWdCLEVBQ2hCLFdBQTRCLEVBQzdELEtBQTZCLEVBQ3pDLFVBQXNCLEVBQ3RCLEdBQXNCO1FBQ2hDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUwyQyxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM3RCxVQUFLLEdBQUwsS0FBSyxDQUF3QjtRQUN6QyxlQUFVLEdBQVYsVUFBVSxDQUFZ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QUUsQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLENBQUM7b0JBQzFDLFlBQVksRUFBRSxDQUFDLHdCQUF3QixDQUFDO29CQUN4QyxPQUFPLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztpQkFDdEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nTW9kdWxlLFxuICAgIE9uRGVzdHJveSxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgU2VsZixcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIE9uSW5pdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nTW9kZWwsIEZvcm1Db250cm9sTmFtZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDYW5jZWxhYmxlRXZlbnRBcmdzLCBJQmFzZUV2ZW50QXJncyB9IGZyb20gJy4uLy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHtcbiAgICBBYnNvbHV0ZVNjcm9sbFN0cmF0ZWd5LFxuICAgIEF1dG9Qb3NpdGlvblN0cmF0ZWd5LFxuICAgIElQb3NpdGlvblN0cmF0ZWd5LFxuICAgIElTY3JvbGxTdHJhdGVneSxcbiAgICBPdmVybGF5U2V0dGluZ3Ncbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHVibGljX2FwaSc7XG5pbXBvcnQge1xuICAgIElneERyb3BEb3duQ29tcG9uZW50LFxuICAgIElneERyb3BEb3duSXRlbU5hdmlnYXRpb25EaXJlY3RpdmUsXG4gICAgSWd4RHJvcERvd25Nb2R1bGUsXG4gICAgSVNlbGVjdGlvbkV2ZW50QXJnc1xufSBmcm9tICcuLi8uLi9kcm9wLWRvd24vcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hJbnB1dEdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW5wdXQtZ3JvdXAvcHVibGljX2FwaSc7XG5pbXBvcnQgeyBJZ3hPdmVybGF5T3V0bGV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vdG9nZ2xlL3RvZ2dsZS5kaXJlY3RpdmUnO1xuXG4vKipcbiAqIEludGVyZmFjZSB0aGF0IGVuY2Fwc3VsYXRlcyBvbkl0ZW1TZWxlY3Rpb24gZXZlbnQgYXJndW1lbnRzIC0gbmV3IHZhbHVlIGFuZCBjYW5jZWwgc2VsZWN0aW9uLlxuICpcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvY29tcGxldGVTZWxlY3Rpb25DaGFuZ2luZ0V2ZW50QXJncyBleHRlbmRzIENhbmNlbGFibGVFdmVudEFyZ3MsIElCYXNlRXZlbnRBcmdzIHtcbiAgICAvKipcbiAgICAgKiBOZXcgdmFsdWUgc2VsZWN0ZWQgZnJvbSB0aGUgZHJvcCBkb3duXG4gICAgICovXG4gICAgdmFsdWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRvY29tcGxldGVPdmVybGF5U2V0dGluZ3Mge1xuICAgIC8qKiBQb3NpdGlvbiBzdHJhdGVneSB0byB1c2Ugd2l0aCB0aGlzIHNldHRpbmdzICovXG4gICAgcG9zaXRpb25TdHJhdGVneT86IElQb3NpdGlvblN0cmF0ZWd5O1xuICAgIC8qKiBTY3JvbGwgc3RyYXRlZ3kgdG8gdXNlIHdpdGggdGhpcyBzZXR0aW5ncyAqL1xuICAgIHNjcm9sbFN0cmF0ZWd5PzogSVNjcm9sbFN0cmF0ZWd5O1xuICAgIC8qKiBTZXQgdGhlIG91dGxldCBjb250YWluZXIgdG8gYXR0YWNoIHRoZSBvdmVybGF5IHRvICovXG4gICAgb3V0bGV0PzogSWd4T3ZlcmxheU91dGxldERpcmVjdGl2ZSB8IEVsZW1lbnRSZWY7XG59XG5cbi8qKlxuICogKipJZ25pdGUgVUkgZm9yIEFuZ3VsYXIgQXV0b2NvbXBsZXRlKiogLVxuICogW0RvY3VtZW50YXRpb25dKGh0dHBzOi8vd3d3LmluZnJhZ2lzdGljcy5jb20vcHJvZHVjdHMvaWduaXRlLXVpLWFuZ3VsYXIvYW5ndWxhci9jb21wb25lbnRzL2F1dG9jb21wbGV0ZS5odG1sKVxuICpcbiAqIFRoZSBpZ3hBdXRvY29tcGxldGUgZGlyZWN0aXZlIHByb3ZpZGVzIGEgd2F5IHRvIGVuaGFuY2UgYSB0ZXh0IGlucHV0XG4gKiBieSBzaG93aW5nIGEgZHJvcCBkb3duIG9mIHN1Z2dlc3RlZCBvcHRpb25zLCBwcm92aWRlZCBieSB0aGUgZGV2ZWxvcGVyLlxuICpcbiAqIEV4YW1wbGU6XG4gKiBgYGBodG1sXG4gKiA8aW5wdXQgdHlwZT1cInRleHRcIiBbaWd4QXV0b2NvbXBsZXRlXT1cInRvd25zUGFuZWxcIiAjYXV0b2NvbXBsZXRlUmVmPVwiaWd4QXV0b2NvbXBsZXRlXCIvPlxuICogPGlneC1kcm9wLWRvd24gI3Rvd25zUGFuZWw+XG4gKiAgICAgPGlneC1kcm9wLWRvd24taXRlbSAqbmdGb3I9XCJsZXQgdG93biBvZiB0b3ducyB8IHN0YXJ0c1dpdGg6dG93blNlbGVjdGVkXCIgW3ZhbHVlXT1cInRvd25cIj5cbiAqICAgICAgICAge3t0b3dufX1cbiAqICAgICA8L2lneC1kcm9wLWRvd24taXRlbT5cbiAqIDwvaWd4LWRyb3AtZG93bj5cbiAqIGBgYFxuICovXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tpZ3hBdXRvY29tcGxldGVdJyxcbiAgICBleHBvcnRBczogJ2lneEF1dG9jb21wbGV0ZSdcbn0pXG5leHBvcnQgY2xhc3MgSWd4QXV0b2NvbXBsZXRlRGlyZWN0aXZlIGV4dGVuZHMgSWd4RHJvcERvd25JdGVtTmF2aWdhdGlvbkRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB0YXJnZXQgb2YgdGhlIGF1dG9jb21wbGV0ZSBkaXJlY3RpdmVcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8IS0tIFNldCAtLT5cbiAgICAgKiA8aW5wdXQgW2lneEF1dG9jb21wbGV0ZV09XCJkcm9wZG93blwiIC8+XG4gICAgICogLi4uXG4gICAgICogPGlneC1kcm9wLWRvd24gI2Ryb3Bkb3duPlxuICAgICAqIC4uLlxuICAgICAqIDwvaWd4LWRyb3AtZG93bj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneEF1dG9jb21wbGV0ZScpXG4gICAgcHVibGljIGdldCB0YXJnZXQoKTogSWd4RHJvcERvd25Db21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFyZ2V0IGFzIElneERyb3BEb3duQ29tcG9uZW50O1xuICAgIH1cbiAgICBwdWJsaWMgc2V0IHRhcmdldCh2OiBJZ3hEcm9wRG93bkNvbXBvbmVudCkge1xuICAgICAgICB0aGlzLl90YXJnZXQgPSB2O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgb3ZlcmxheSBzZXR0aW5ncyBmb3IgdGhlIGF1dG9jb21wbGV0ZSBkcm9wIGRvd25cbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBnZXRcbiAgICAgKiBsZXQgc2V0dGluZ3MgPSB0aGlzLmF1dG9jb21wbGV0ZS5hdXRvY29tcGxldGVTZXR0aW5ncztcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLXNldC0tPlxuICAgICAqIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtpZ3hBdXRvY29tcGxldGVdPVwidG93bnNQYW5lbFwiIFtpZ3hBdXRvY29tcGxldGVTZXR0aW5nc109XCJzZXR0aW5nc1wiLz5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gc2V0XG4gICAgICogdGhpcy5zZXR0aW5ncyA9IHtcbiAgICAgKiAgcG9zaXRpb25TdHJhdGVneTogbmV3IENvbm5lY3RlZFBvc2l0aW9uaW5nU3RyYXRlZ3koe1xuICAgICAqICAgICAgY2xvc2VBbmltYXRpb246IG51bGwsXG4gICAgICogICAgICBvcGVuQW5pbWF0aW9uOiBudWxsXG4gICAgICogIH0pXG4gICAgICogfTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneEF1dG9jb21wbGV0ZVNldHRpbmdzJylcbiAgICBwdWJsaWMgYXV0b2NvbXBsZXRlU2V0dGluZ3M6IEF1dG9jb21wbGV0ZU92ZXJsYXlTZXR0aW5ncztcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hdXRvY29tcGxldGUnKVxuICAgIHB1YmxpYyBhdXRvZmlsbCA9ICdvZmYnO1xuXG4gICAgLyoqIEBoaWRkZW4gIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgICBwdWJsaWMgcm9sZSA9ICdjb21ib2JveCc7XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzL2Rpc2FibGVzIGF1dG9jb21wbGV0ZSBjb21wb25lbnRcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBnZXRcbiAgICAgKiBsZXQgZGlzYWJsZWQgPSB0aGlzLmF1dG9jb21wbGV0ZS5kaXNhYmxlZDtcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPCEtLXNldC0tPlxuICAgICAqIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtpZ3hBdXRvY29tcGxldGVdPVwidG93bnNQYW5lbFwiIFtpZ3hBdXRvY29tcGxldGVEaXNhYmxlZF09XCJkaXNhYmxlZFwiLz5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogLy8gc2V0XG4gICAgICogcHVibGljIGRpc2FibGVkID0gdHJ1ZTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneEF1dG9jb21wbGV0ZURpc2FibGVkJylcbiAgICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEVtaXR0ZWQgYWZ0ZXIgaXRlbSBmcm9tIHRoZSBkcm9wIGRvd24gaXMgc2VsZWN0ZWRcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aW5wdXQgaWd4SW5wdXQgW2lneEF1dG9jb21wbGV0ZV09XCJ0b3duc1BhbmVsXCIgKHNlbGVjdGlvbkNoYW5naW5nKT0nc2VsZWN0aW9uQ2hhbmdpbmcoJGV2ZW50KScgLz5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgc2VsZWN0aW9uQ2hhbmdpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPEF1dG9jb21wbGV0ZVNlbGVjdGlvbkNoYW5naW5nRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBuYXRpdmVFbGVtZW50KCk6IEhUTUxJbnB1dEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldCBwYXJlbnRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXAgPyB0aGlzLmdyb3VwLmVsZW1lbnQubmF0aXZlRWxlbWVudCA6IHRoaXMubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBzZXR0aW5ncygpOiBPdmVybGF5U2V0dGluZ3Mge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZGVmYXVsdFNldHRpbmdzLCB0aGlzLmF1dG9jb21wbGV0ZVNldHRpbmdzKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gc2V0dGluZ3MudGFyZ2V0IHx8IHNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kuc2V0dGluZ3MudGFyZ2V0O1xuICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgY29uc3QgcG9zaXRpb25TdHJhdGVneUNsb25lOiBJUG9zaXRpb25TdHJhdGVneSA9IHNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kuY2xvbmUoKTtcbiAgICAgICAgICAgIHNldHRpbmdzLnRhcmdldCA9IHRoaXMucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgIHNldHRpbmdzLnBvc2l0aW9uU3RyYXRlZ3kgPSBwb3NpdGlvblN0cmF0ZWd5Q2xvbmU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNldHRpbmdzO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1leHBhbmRlZCcpXG4gICAgcHVibGljIGdldCBhcmlhRXhwYW5kZWQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jb2xsYXBzZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWhhc3BvcHVwJylcbiAgICBwdWJsaWMgZ2V0IGhhc1BvcFVwKCkge1xuICAgICAgICByZXR1cm4gJ2xpc3Rib3gnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1vd25zJylcbiAgICBwdWJsaWMgZ2V0IGFyaWFPd25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YXJnZXQubGlzdElkO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICBAaW50ZXJuYWwgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50JylcbiAgICBwdWJsaWMgZ2V0IGFyaWFBY3RpdmVEZXNjZW5kYW50KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudGFyZ2V0LmNvbGxhcHNlZCAmJiB0aGlzLnRhcmdldC5mb2N1c2VkSXRlbSA/IHRoaXMudGFyZ2V0LmZvY3VzZWRJdGVtLmlkIDogbnVsbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAgQGludGVybmFsICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYXV0b2NvbXBsZXRlJylcbiAgICBwdWJsaWMgZ2V0IGFyaWFBdXRvY29tcGxldGUoKSB7XG4gICAgICAgIHJldHVybiAnbGlzdCc7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9jb21wb3Npbmc6IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIGlkOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIGdldCBtb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmdNb2RlbCB8fCB0aGlzLmZvcm1Db250cm9sO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Nob3VsZEJlT3BlbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuICAgIHByaXZhdGUgZGVmYXVsdFNldHRpbmdzOiBPdmVybGF5U2V0dGluZ3M7XG5cbiAgICBjb25zdHJ1Y3RvcihAU2VsZigpIEBPcHRpb25hbCgpIEBJbmplY3QoTmdNb2RlbCkgcHJvdGVjdGVkIG5nTW9kZWw6IE5nTW9kZWwsXG4gICAgICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgQEluamVjdChGb3JtQ29udHJvbE5hbWUpIHByb3RlY3RlZCBmb3JtQ29udHJvbDogRm9ybUNvbnRyb2xOYW1lLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgZ3JvdXA6IElneElucHV0R3JvdXBDb21wb25lbnQsXG4gICAgICAgIHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgICAgICBzdXBlcihudWxsKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAgQGludGVybmFsICovXG4gICAgQEhvc3RMaXN0ZW5lcignaW5wdXQnKVxuICAgIHB1YmxpYyBvbklucHV0KCkge1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdExpc3RlbmVyKCdjb21wb3NpdGlvbnN0YXJ0JylcbiAgICBwdWJsaWMgb25Db21wb3NpdGlvblN0YXJ0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2NvbXBvc2luZykge1xuICAgICAgICAgICAgdGhpcy5fY29tcG9zaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2NvbXBvc2l0aW9uZW5kJylcbiAgICBwdWJsaWMgb25Db21wb3NpdGlvbkVuZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY29tcG9zaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uQXJyb3dEb3duJywgWyckZXZlbnQnXSlcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLkFsdC5BcnJvd0Rvd24nLCBbJyRldmVudCddKVxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uQXJyb3dVcCcsIFsnJGV2ZW50J10pXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5BbHQuQXJyb3dVcCcsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uQXJyb3dEb3duKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAgQGludGVybmFsICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5UYWInKVxuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uU2hpZnQuVGFiJylcbiAgICBwdWJsaWMgb25UYWIoKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAgQGludGVybmFsICovXG4gICAgcHVibGljIGhhbmRsZUtleURvd24oZXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbGxhcHNlZCAmJiAhdGhpcy5fY29tcG9zaW5nKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3BhY2UnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ3NwYWNlYmFyJzpcbiAgICAgICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgICAgICBjYXNlICdob21lJzpcbiAgICAgICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgc3VwZXIuaGFuZGxlS2V5RG93bihldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAgQGludGVybmFsICovXG4gICAgcHVibGljIG9uQXJyb3dEb3duS2V5RG93bigpIHtcbiAgICAgICAgc3VwZXIub25BcnJvd0Rvd25LZXlEb3duKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvbkFycm93VXBLZXlEb3duKCkge1xuICAgICAgICBzdXBlci5vbkFycm93VXBLZXlEb3duKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvbkVuZEtleURvd24oKSB7XG4gICAgICAgIHN1cGVyLm9uRW5kS2V5RG93bigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgb25Ib21lS2V5RG93bigpIHtcbiAgICAgICAgc3VwZXIub25Ib21lS2V5RG93bigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlcyBhdXRvY29tcGxldGUgZHJvcCBkb3duXG4gICAgICovXG4gICAgcHVibGljIGNsb3NlKCkge1xuICAgICAgICB0aGlzLl9zaG91bGRCZU9wZW4gPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YXJnZXQuY2xvc2UoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVucyBhdXRvY29tcGxldGUgZHJvcCBkb3duXG4gICAgICovXG4gICAgcHVibGljIG9wZW4oKSB7XG4gICAgICAgIHRoaXMuX3Nob3VsZEJlT3BlbiA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmNvbGxhcHNlZCB8fCB0aGlzLnRhcmdldC5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBubyBkcm9wLWRvd24gd2lkdGggaXMgc2V0LCB0aGUgZHJvcC1kb3duIHdpbGwgYmUgYXMgd2lkZSBhcyB0aGUgYXV0b2NvbXBsZXRlIGlucHV0O1xuICAgICAgICB0aGlzLnRhcmdldC53aWR0aCA9IHRoaXMudGFyZ2V0LndpZHRoIHx8ICh0aGlzLnBhcmVudEVsZW1lbnQuY2xpZW50V2lkdGggKyAncHgnKTtcbiAgICAgICAgdGhpcy50YXJnZXQub3Blbih0aGlzLnNldHRpbmdzKTtcbiAgICAgICAgdGhpcy5oaWdobGlnaHRGaXJzdEl0ZW0oKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSB0aGlzLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZGVmYXVsdFNldHRpbmdzID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiB0YXJnZXRFbGVtZW50LFxuICAgICAgICAgICAgbW9kYWw6IGZhbHNlLFxuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBBYnNvbHV0ZVNjcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiBuZXcgQXV0b1Bvc2l0aW9uU3RyYXRlZ3koKSxcbiAgICAgICAgICAgIGV4Y2x1ZGVGcm9tT3V0c2lkZUNsaWNrOiBbdGFyZ2V0RWxlbWVudF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLnRhcmdldC5jaGlsZHJlbi5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudGFyZ2V0LmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRGaXJzdEl0ZW0oKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3Nob3VsZEJlT3Blbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIF9zaG91bGRCZU9wZW4gZmxhZyBzaG91bGQgcmVtYWluIHVuY2hhbmdlZCBzaW5jZSB0aGlzIHN0YXRlIGNoYW5nZSBkb2Vzbid0IGNvbWUgZnJvbSBvdXRzaWRlIG9mIHRoZSBjb21wb25lbnRcbiAgICAgICAgICAgICAgICAvLyAobGlrZSBpbiB0aGUgY2FzZSBvZiBwdWJsaWMgQVBJIG9yIHVzZXIgaW50ZXJhY3Rpb24pLlxuICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRhcmdldC5zZWxlY3Rpb25DaGFuZ2luZy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHRoaXMuc2VsZWN0LmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGNvbGxhcHNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0ID8gdGhpcy50YXJnZXQuY29sbGFwc2VkIDogdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdCh2YWx1ZTogSVNlbGVjdGlvbkV2ZW50QXJncykge1xuICAgICAgICBpZiAoIXZhbHVlLm5ld1NlbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlLmNhbmNlbCA9IHRydWU7IC8vIERpc2FibGUgc2VsZWN0aW9uIGluIHRoZSBkcm9wIGRvd24sIGJlY2F1c2UgaW4gYXV0b2NvbXBsZXRlIHdlIGRvIG5vdCBzYXZlIHNlbGVjdGlvbi5cbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB2YWx1ZS5uZXdTZWxlY3Rpb24udmFsdWU7XG4gICAgICAgIGNvbnN0IGFyZ3M6IEF1dG9jb21wbGV0ZVNlbGVjdGlvbkNoYW5naW5nRXZlbnRBcmdzID0geyB2YWx1ZTogbmV3VmFsdWUsIGNhbmNlbDogZmFsc2UgfTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2luZy5lbWl0KGFyZ3MpO1xuICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsb3NlKCk7XG5cbiAgICAgICAgLy8gVXBkYXRlIG1vZGVsIGFmdGVyIHRoZSBpbnB1dCBpcyByZS1mb2N1c2VkLCBpbiBvcmRlciB0byBoYXZlIHByb3BlciB2YWxpZCBzdHlsaW5nLlxuICAgICAgICAvLyBPdGhlcndpc2Ugd2hlbiBpdGVtIGlzIHNlbGVjdGVkIHVzaW5nIG1vdXNlIChhbmQgaW5wdXQgaXMgYmx1cnJlZCksIHRoZW4gdmFsaWQgc3R5bGUgd2lsbCBiZSByZW1vdmVkLlxuICAgICAgICBpZiAodGhpcy5tb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5jb250cm9sLnNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgaGlnaGxpZ2h0Rmlyc3RJdGVtKCkge1xuICAgICAgICBpZiAodGhpcy50YXJnZXQuZm9jdXNlZEl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LmZvY3VzZWRJdGVtLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0LmZvY3VzZWRJdGVtID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhcmdldC5uYXZpZ2F0ZUZpcnN0KCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9O1xufVxuXG4vKiogQGhpZGRlbiAqL1xuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbSWd4RHJvcERvd25Nb2R1bGUsIENvbW1vbk1vZHVsZV0sXG4gICAgZGVjbGFyYXRpb25zOiBbSWd4QXV0b2NvbXBsZXRlRGlyZWN0aXZlXSxcbiAgICBleHBvcnRzOiBbSWd4QXV0b2NvbXBsZXRlRGlyZWN0aXZlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hBdXRvY29tcGxldGVNb2R1bGUgeyB9XG4iXX0=
@@ -4,7 +4,7 @@ import * as i0 from "@angular/core";
4
4
  export const MASK_FLAGS = ['C', '&', 'a', 'A', '?', 'L', '9', '0', '#'];
5
5
  /** @hidden */
6
6
  export class MaskParsingService {
7
- applyMask(inputVal, maskOptions) {
7
+ applyMask(inputVal, maskOptions, pos = 0) {
8
8
  let outputVal = '';
9
9
  let value = '';
10
10
  const mask = maskOptions.format;
@@ -35,7 +35,6 @@ export class MaskParsingService {
35
35
  if (nonLiteralValues.length > nonLiteralIndices.length) {
36
36
  nonLiteralValues.splice(nonLiteralIndices.length);
37
37
  }
38
- let pos = 0;
39
38
  for (const nonLiteralValue of nonLiteralValues) {
40
39
  const char = nonLiteralValue;
41
40
  outputVal = this.replaceCharAt(outputVal, nonLiteralIndices[pos++], char);
@@ -82,6 +81,11 @@ export class MaskParsingService {
82
81
  }
83
82
  maskedValue = this.replaceCharAt(maskedValue, i, char);
84
83
  }
84
+ if (Math.abs(end - start) >= 1) {
85
+ // set cursor to be max between last cursor pos and the calculated `end`
86
+ // since on `delete` the cursor should move forward
87
+ cursor = Math.max(cursor, end);
88
+ }
85
89
  return { value: maskedValue, end: cursor };
86
90
  }
87
91
  replaceCharAt(strValue, index, char) {
@@ -185,4 +189,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImpor
185
189
  providedIn: 'root'
186
190
  }]
187
191
  }] });
188
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay1wYXJzaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZGlyZWN0aXZlcy9tYXNrL21hc2stcGFyc2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNDLGNBQWM7QUFDZCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBY3hFLGNBQWM7QUFJZCxNQUFNLE9BQU8sa0JBQWtCO0lBQ3BCLFNBQVMsQ0FBQyxRQUFnQixFQUFFLFdBQXdCO1FBQ3ZELElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksR0FBVyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ3hDLE1BQU0sUUFBUSxHQUF3QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sV0FBVyxHQUFhLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDMUQsTUFBTSxpQkFBaUIsR0FBYSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sYUFBYSxHQUFhLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFOUQsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO1lBQ2xCLEtBQUssR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDL0I7UUFFRCxLQUFLLE1B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QUMsZUFBZSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUc7WUFDaEQsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztTQUNuRCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNiLENBQUM7OytHQXpNUSxrQkFBa0I7bUhBQWxCLGtCQUFrQixjQUZmLE1BQU07MkZBRVQsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqIEBoaWRkZW4gKi9cbmV4cG9ydCBjb25zdCBNQVNLX0ZMQUdTID0gWydDJywgJyYnLCAnYScsICdBJywgJz8nLCAnTCcsICc5JywgJzAnLCAnIyddO1xuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXNrT3B0aW9ucyB7XG4gICAgZm9ybWF0OiBzdHJpbmc7XG4gICAgcHJvbXB0Q2hhcjogc3RyaW5nO1xufVxuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBsYWNlZCB7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgICBlbmQ6IG51bWJlcjtcbn1cblxuLyoqIEBoaWRkZW4gKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTWFza1BhcnNpbmdTZXJ2aWNlIHtcbiAgICBwdWJsaWMgYXBwbHlNYXNrKGlucHV0VmFsOiBzdHJpbmcsIG1hc2tPcHRpb25zOiBNYXNrT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgICAgIGxldCBvdXRwdXRWYWwgPSAnJztcbiAgICAgICAgbGV0IHZhbHVlID0gJyc7XG4gICAgICAgIGNvbnN0IG1hc2s6IHN0cmluZyA9IG1hc2tPcHRpb25zLmZvcm1hdDtcbiAgICAgICAgY29uc3QgbGl0ZXJhbHM6IE1hcDxudW1iZXIsIHN0cmluZz4gPSB0aGlzLmdldE1hc2tMaXRlcmFscyhtYXNrKTtcbiAgICAgICAgY29uc3QgbGl0ZXJhbEtleXM6IG51bWJlcltdID0gQXJyYXkuZnJvbShsaXRlcmFscy5rZXlzKCkpO1xuICAgICAgICBjb25zdCBub25MaXRlcmFsSW5kaWNlczogbnVtYmVyW10gPSB0aGlzLmdldE5vbkxpdGVyYWxJbmRpY2VzKG1hc2ssIGxpdGVyYWxLZXlzKTtcbiAgICAgICAgY29uc3QgbGl0ZXJhbFZhbHVlczogc3RyaW5nW10gPSBBcnJheS5mcm9tKGxpdGVyYWxzLnZhbHVlcygpKTtcblxuICAgICAgICBpZiAoaW5wdXRWYWwgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFsdWUgPSBpbnB1dFZhbC50b1N0cmluZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBfbWFza1N5bSBvZiBtYXNrKSB7XG4gICAgICAgICAgICBvdXRwdXRWYWwgKz0gbWFza09wdGlvbnMucHJvbXB0Q2hhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpdGVyYWxzLmZvckVhY2goKHZhbDogc3RyaW5nLCBrZXk6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgb3V0cHV0VmFsID0gdGhpcy5yZXBsYWNlQ2hhckF0KG91dHB1dFZhbCwga2V5LCB2YWwpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0VmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgbm9uTGl0ZXJhbFZhbHVlczogc3RyaW5nW10gPSB0aGlzLmdldE5vbkxpdGVyYWxWYWx1ZXModmFsdWUsIGxpdGVyYWxWYWx1ZXMpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9uTGl0ZXJhbFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2hhciA9IG5vbkxpdGVyYWxWYWx1ZXNbaV07XG4gICAgICAgICAgICBjb25zdCBpc0NoYXJWYWxpZCA9IHRoaXMudmFsaWRhdGVDaGFyT25Qb3NpdGlvbihjaGFyLCBub25MaXRlcmFsSW5kaWNlc1tpXSwgbWFzayk7XG5cbiAgICAgICAgICAgIGlmICghaXNDaGFyVmFsaWQgJiYgY2hhciAhPT0gbWFza09wdGlvbnMucHJvbXB0Q2hhcikge1xuICAgICAgICAgICAgICAgIG5vbkxpdGVyYWxWYWx1ZXNbaV0gPSBtYXNrT3B0aW9ucy5wcm9tcHRDaGFyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vbkxpdGVyYWxWYWx1ZXMubGVuZ3RoID4gbm9uTGl0ZXJhbEluZGljZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBub25MaXRlcmFsVmFsdWVzLnNwbGljZShub25MaXRlcmFsSW5kaWNlcy5sZW5ndGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHBvcyA9IDA7XG4gICAgICAgIGZvciAoY29uc3Qgbm9uTGl0ZXJhbFZhbHVlIG9mIG5vbkxpdGVyYWxWYWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYXIgPSBub25MaXRlcmFsVmFsdWU7XG4gICAgICAgICAgICBvdXRwdXRWYWwgPSB0aGlzLnJlcGxhY2VDaGFyQXQob3V0cHV0VmFsLCBub25MaXRlcmFsSW5kaWNlc1twb3MrK10sIGNoYXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG91dHB1dFZhbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGFyc2VWYWx1ZUZyb21NYXNrKG1hc2tlZFZhbHVlOiBzdHJpbmcsIG1hc2tPcHRpb25zOiBNYXNrT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgICAgIGxldCBvdXRwdXRWYWwgPSAnJztcbiAgICAgICAgY29uc3QgbWFzazogc3RyaW5nID0gbWFza09wdGlvbnMuZm9ybWF0O1xuICAgICAgICBjb25zdCBsaXRlcmFsczogTWFwPG51bWJlciwgc3RyaW5nPiA9IHRoaXMuZ2V0TWFza0xpdGVyYWxzKG1hc2spO1xuICAgICAgICBjb25zdCBsaXRlcmFsVmFsdWVzOiBzdHJpbmdbXSA9IEFycmF5LmZyb20obGl0ZXJhbHMudmFsdWVzKCkpO1xuXG4gICAgICAgIGZvciAoY29uc3QgdmFsIG9mIG1hc2tlZFZhbHVlKSB7XG4gICAgICAgICAgICBpZiAobGl0ZXJhbFZhbHVlcy5pbmRleE9mKHZhbCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbCAhPT0gbWFza09wdGlvbnMucHJvbXB0Q2hhcikge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXRWYWwgKz0gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvdXRwdXRWYWw7XG4gICAgfVxuXG4gICAgcHVibGljIHJlcGxhY2VJbk1hc2sobWFza2VkVmFsdWU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgbWFza09wdGlvbnM6IE1hc2tPcHRpb25zLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFJlcGxhY2VkIHtcbiAgICAgICAgY29uc3QgbGl0ZXJhbHNQb3NpdGlvbnM6IG51bWJlcltdID0gQXJyYXkuZnJvbSh0aGlzLmdldE1hc2tMaXRlcmFscyhtYXNrT3B0aW9ucy5mb3JtYXQpLmtleXMoKSk7XG4gICAgICAgIHZhbHVlID0gdGhpcy5yZXBsYWNlSU1FTnVtYmVycyh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGNoYXJzID0gQXJyYXkuZnJvbSh2YWx1ZSk7XG4gICAgICAgIGxldCBjdXJzb3IgPSBzdGFydDtcbiAgICAgICAgZW5kID0gTWF0aC5taW4oZW5kLCBtYXNrZWRWYWx1ZS5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZCB8fCAoY2hhcnMubGVuZ3RoICYmIGkgPCBtYXNrZWRWYWx1ZS5sZW5ndGgpOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsaXRlcmFsc1Bvc2l0aW9ucy5pbmRleE9mKGkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChjaGFyc1swXSA9PT0gbWFza2VkVmFsdWVbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gaSArIDE7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoYXJzWzBdXG4gICAgICAgICAgICAgICAgJiYgIXRoaXMudmFsaWRhdGVDaGFyT25Qb3NpdGlvbihjaGFyc1swXSwgaSwgbWFza09wdGlvbnMuZm9ybWF0KVxuICAgICAgICAgICAgICAgICYmIGNoYXJzWzBdICE9PSBtYXNrT3B0aW9ucy5wcm9tcHRDaGFyKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBjaGFyID0gbWFza09wdGlvbnMucHJvbXB0Q2hhcjtcbiAgICAgICAgICAgIGlmIChjaGFycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjdXJzb3IgPSBpICsgMTtcbiAgICAgICAgICAgICAgICBjaGFyID0gY2hhcnMuc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hc2tlZFZhbHVlID0gdGhpcy5yZXBsYWNlQ2hhckF0KG1hc2tlZFZhbHVlLCBpLCBjaGFyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHZhbHVlOiBtYXNrZWRWYWx1ZSwgZW5kOiBjdXJzb3IgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVwbGFjZUNoYXJBdChzdHJWYWx1ZTogc3RyaW5nLCBpbmRleDogbnVtYmVyLCBjaGFyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoc3RyVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0clZhbHVlLnN1YnN0cmluZygwLCBpbmRleCkgKyBjaGFyICsgc3RyVmFsdWUuc3Vic3RyaW5nKGluZGV4ICsgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TWFza0xpdGVyYWxzKG1hc2s6IHN0cmluZyk6IE1hcDxudW1iZXIsIHN0cmluZz4ge1xuICAgICAgICBjb25zdCBsaXRlcmFscyA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjaGFyID0gbWFzay5jaGFyQXQoaSk7XG4gICAgICAgICAgICBpZiAoTUFTS19GTEFHUy5pbmRleE9mKGNoYXIpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGxpdGVyYWxzLnNldChpLCBjaGFyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsaXRlcmFscztcbiAgICB9XG5cbiAgICAvKiogVmFsaWRhdGVzIG9ubHkgbm9uIGxpdGVyYWwgcG9zaXRpb25zLiAqL1xuICAgIHByaXZhdGUgdmFsaWRhdGVDaGFyT25Qb3NpdGlvbihpbnB1dENoYXI6IHN0cmluZywgcG9zaXRpb246IG51bWJlciwgbWFzazogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCByZWdleDogUmVnRXhwO1xuICAgICAgICBsZXQgaXNWYWxpZDogYm9vbGVhbjtcbiAgICAgICAgY29uc3QgbGV0dGVyT3JEaWdpdFJlZ0V4ID0gJ1tcXFxcZFxcXFx1MDBDMC1cXFxcdTFGRkZcXFxcdTJDMDAtXFxcXHVEN0ZGYS16QS1aXSc7XG4gICAgICAgIGNvbnN0IGxldHRlckRpZ2l0T3JTcGFjZVJlZ0V4ID0gJ1tcXFxcZFxcXFx1MDBDMC1cXFxcdTFGRkZcXFxcdTJDMDAtXFxcXHVEN0ZGYS16QS1aXFxcXHUwMDIwXSc7XG4gICAgICAgIGNvbnN0IGxldHRlclJlZ0V4ID0gJ1tcXFxcdTAwQzAtXFxcXHUxRkZGXFxcXHUyQzAwLVxcXFx1RDdGRmEtekEtWl0nO1xuICAgICAgICBjb25zdCBsZXR0ZXJTcGFjZVJlZ0V4ID0gJ1tcXFxcdTAwQzAtXFxcXHUxRkZGXFxcXHUyQzAwLVxcXFx1RDdGRmEtekEtWlxcXFx1MDAyMF0nO1xuICAgICAgICBjb25zdCBkaWdpdFJlZ0V4ID0gJ1tcXFxcZF0nO1xuICAgICAgICBjb25zdCBkaWdpdFNwYWNlUmVnRXggPSAnW1xcXFxkXFxcXHUwMDIwXSc7XG4gICAgICAgIGNvbnN0IGRpZ2l0U3BlY2lhbFJlZ0V4ID0gJ1tcXFxcZC1cXFxcK10nO1xuXG4gICAgICAgIHN3aXRjaCAobWFzay5jaGFyQXQocG9zaXRpb24pKSB7XG4gICAgICAgICAgICBjYXNlICdDJzpcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gaW5wdXRDaGFyICE9PSAnJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJyYnOlxuICAgICAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cCgnW1xcXFx1MDAyMF0nKTtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gIXJlZ2V4LnRlc3QoaW5wdXRDaGFyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2EnOlxuICAgICAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChsZXR0ZXJEaWdpdE9yU3BhY2VSZWdFeCk7XG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IHJlZ2V4LnRlc3QoaW5wdXRDaGFyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0EnOlxuICAgICAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChsZXR0ZXJPckRpZ2l0UmVnRXgpO1xuICAgICAgICAgICAgICAgIGlzVmFsaWQgPSByZWdleC50ZXN0KGlucHV0Q2hhcik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICc/JzpcbiAgICAgICAgICAgICAgICByZWdleCA9IG5ldyBSZWdFeHAobGV0dGVyU3BhY2VSZWdFeCk7XG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IHJlZ2V4LnRlc3QoaW5wdXRDaGFyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0wnOlxuICAgICAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChsZXR0ZXJSZWdFeCk7XG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IHJlZ2V4LnRlc3QoaW5wdXRDaGFyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJzAnOlxuICAgICAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChkaWdpdFJlZ0V4KTtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gcmVnZXgudGVzdChpbnB1dENoYXIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnOSc6XG4gICAgICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKGRpZ2l0U3BhY2VSZWdFeCk7XG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IHJlZ2V4LnRlc3QoaW5wdXRDaGFyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJyMnOlxuICAgICAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChkaWdpdFNwZWNpYWxSZWdFeCk7XG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IHJlZ2V4LnRlc3QoaW5wdXRDaGFyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpc1ZhbGlkO1xuICAgIH1cbiAgICBwcml2YXRlIGdldE5vbkxpdGVyYWxJbmRpY2VzKG1hc2s6IHN0cmluZywgbGl0ZXJhbEtleXM6IG51bWJlcltdKTogbnVtYmVyW10ge1xuICAgICAgICBjb25zdCBub25MaXRlcmFsc0luZGljZXM6IG51bWJlcltdID0gbmV3IEFycmF5KCk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAobGl0ZXJhbEtleXMuaW5kZXhPZihpKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBub25MaXRlcmFsc0luZGljZXMucHVzaChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBub25MaXRlcmFsc0luZGljZXM7XG4gICAgfVxuICAgIHByaXZhdGUgZ2V0Tm9uTGl0ZXJhbFZhbHVlcyh2YWx1ZTogc3RyaW5nLCBsaXRlcmFsVmFsdWVzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3Qgbm9uTGl0ZXJhbFZhbHVlczogc3RyaW5nW10gPSBuZXcgQXJyYXkoKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKGxpdGVyYWxWYWx1ZXMuaW5kZXhPZih2YWwpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG5vbkxpdGVyYWxWYWx1ZXMucHVzaCh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vbkxpdGVyYWxWYWx1ZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXBsYWNlSU1FTnVtYmVycyh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1vvvJDvvJHvvJLvvJPvvJTvvJXvvJbvvJfvvJjvvJldL2csIChudW0pID0+ICh7XG4gICAgICAgICAgICAn77yRJzogJzEnLCAn77ySJzogJzInLCAn77yTJzogJzMnLCAn77yUJzogJzQnLCAn77yVJzogJzUnLFxuICAgICAgICAgICAgJ++8lic6ICc2JywgJ++8lyc6ICc3JywgJ++8mCc6ICc4JywgJ++8mSc6ICc5JywgJ++8kCc6ICcwJ1xuICAgICAgICB9W251bV0pKTtcbiAgICB9XG59XG4iXX0=
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFzay1wYXJzaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZGlyZWN0aXZlcy9tYXNrL21hc2stcGFyc2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNDLGNBQWM7QUFDZCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBY3hFLGNBQWM7QUFJZCxNQUFNLE9BQU8sa0JBQWtCO0lBQ3BCLFNBQVMsQ0FBQyxRQUFnQixFQUFFLFdBQXdCLEVBQUUsTUFBYyxDQUFDO1FBQ3hFLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixNQUFNLElBQUksR0FBVyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ3hDLE1BQU0sUUFBUSxHQUF3QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sV0FBVyxHQUFhLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDMUQsTUFBTSxpQkFBaUIsR0FBYSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sYUFBYSxHQUFhLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFOUQsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFO1lBQ2xCLEtBQUssR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7U0FD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RUFBRTtnQkFDbkMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzlCO1NBQ0o7UUFFRCxPQUFPLGdCQUFnQixDQUFDO0lBQzVCLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxLQUFhO1FBQ25DLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztZQUNoRCxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHO1NBQ25ELENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2IsQ0FBQzs7K0dBOU1RLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmYsTUFBTTsyRkFFVCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKiogQGhpZGRlbiAqL1xuZXhwb3J0IGNvbnN0IE1BU0tfRkxBR1MgPSBbJ0MnLCAnJicsICdhJywgJ0EnLCAnPycsICdMJywgJzknLCAnMCcsICcjJ107XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hc2tPcHRpb25zIHtcbiAgICBmb3JtYXQ6IHN0cmluZztcbiAgICBwcm9tcHRDaGFyOiBzdHJpbmc7XG59XG5cbi8qKiBAaGlkZGVuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcGxhY2VkIHtcbiAgICB2YWx1ZTogc3RyaW5nO1xuICAgIGVuZDogbnVtYmVyO1xufVxuXG4vKiogQGhpZGRlbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBNYXNrUGFyc2luZ1NlcnZpY2Uge1xuICAgIHB1YmxpYyBhcHBseU1hc2soaW5wdXRWYWw6IHN0cmluZywgbWFza09wdGlvbnM6IE1hc2tPcHRpb25zLCBwb3M6IG51bWJlciA9IDApOiBzdHJpbmcge1xuICAgICAgICBsZXQgb3V0cHV0VmFsID0gJyc7XG4gICAgICAgIGxldCB2YWx1ZSA9ICcnO1xuICAgICAgICBjb25zdCBtYXNrOiBzdHJpbmcgPSBtYXNrT3B0aW9ucy5mb3JtYXQ7XG4gICAgICAgIGNvbnN0IGxpdGVyYWxzOiBNYXA8bnVtYmVyLCBzdHJpbmc+ID0gdGhpcy5nZXRNYXNrTGl0ZXJhbHMobWFzayk7XG4gICAgICAgIGNvbnN0IGxpdGVyYWxLZXlzOiBudW1iZXJbXSA9IEFycmF5LmZyb20obGl0ZXJhbHMua2V5cygpKTtcbiAgICAgICAgY29uc3Qgbm9uTGl0ZXJhbEluZGljZXM6IG51bWJlcltdID0gdGhpcy5nZXROb25MaXRlcmFsSW5kaWNlcyhtYXNrLCBsaXRlcmFsS2V5cyk7XG4gICAgICAgIGNvbnN0IGxpdGVyYWxWYWx1ZXM6IHN0cmluZ1tdID0gQXJyYXkuZnJvbShsaXRlcmFscy52YWx1ZXMoKSk7XG5cbiAgICAgICAgaWYgKGlucHV0VmFsICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhbHVlID0gaW5wdXRWYWwudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgX21hc2tTeW0gb2YgbWFzaykge1xuICAgICAgICAgICAgb3V0cHV0VmFsICs9IG1hc2tPcHRpb25zLnByb21wdENoYXI7XG4gICAgICAgIH1cblxuICAgICAgICBsaXRlcmFscy5mb3JFYWNoKCh2YWw6IHN0cmluZywga2V5OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIG91dHB1dFZhbCA9IHRoaXMucmVwbGFjZUNoYXJBdChvdXRwdXRWYWwsIGtleSwgdmFsKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG91dHB1dFZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5vbkxpdGVyYWxWYWx1ZXM6IHN0cmluZ1tdID0gdGhpcy5nZXROb25MaXRlcmFsVmFsdWVzKHZhbHVlLCBsaXRlcmFsVmFsdWVzKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vbkxpdGVyYWxWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYXIgPSBub25MaXRlcmFsVmFsdWVzW2ldO1xuICAgICAgICAgICAgY29uc3QgaXNDaGFyVmFsaWQgPSB0aGlzLnZhbGlkYXRlQ2hhck9uUG9zaXRpb24oY2hhciwgbm9uTGl0ZXJhbEluZGljZXNbaV0sIG1hc2spO1xuXG4gICAgICAgICAgICBpZiAoIWlzQ2hhclZhbGlkICYmIGNoYXIgIT09IG1hc2tPcHRpb25zLnByb21wdENoYXIpIHtcbiAgICAgICAgICAgICAgICBub25MaXRlcmFsVmFsdWVzW2ldID0gbWFza09wdGlvbnMucHJvbXB0Q2hhcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub25MaXRlcmFsVmFsdWVzLmxlbmd0aCA+IG5vbkxpdGVyYWxJbmRpY2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgbm9uTGl0ZXJhbFZhbHVlcy5zcGxpY2Uobm9uTGl0ZXJhbEluZGljZXMubGVuZ3RoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgbm9uTGl0ZXJhbFZhbHVlIG9mIG5vbkxpdGVyYWxWYWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYXIgPSBub25MaXRlcmFsVmFsdWU7XG4gICAgICAgICAgICBvdXRwdXRWYWwgPSB0aGlzLnJlcGxhY2VDaGFyQXQob3V0cHV0VmFsLCBub25MaXRlcmFsSW5kaWNlc1twb3MrK10sIGNoYXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG91dHB1dFZhbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGFyc2VWYWx1ZUZyb21NYXNrKG1hc2tlZFZhbHVlOiBzdHJpbmcsIG1hc2tPcHRpb25zOiBNYXNrT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgICAgIGxldCBvdXRwdXRWYWwgPSAnJztcbiAgICAgICAgY29uc3QgbWFzazogc3RyaW5nID0gbWFza09wdGlvbnMuZm9ybWF0O1xuICAgICAgICBjb25zdCBsaXRlcmFsczogTWFwPG51bWJlciwgc3RyaW5nPiA9IHRoaXMuZ2V0TWFza0xpdGVyYWxzKG1hc2spO1xuICAgICAgICBjb25zdCBsaXRlcmFsVmFsdWVzOiBzdHJpbmdbXSA9IEFycmF5LmZyb20obGl0ZXJhbHMudmFsdWVzKCkpO1xuXG4gICAgICAgIGZvciAoY29uc3QgdmFsIG9mIG1hc2tlZFZhbHVlKSB7XG4gICAgICAgICAgICBpZiAobGl0ZXJhbFZhbHVlcy5pbmRleE9mKHZhbCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbCAhPT0gbWFza09wdGlvbnMucHJvbXB0Q2hhcikge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXRWYWwgKz0gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvdXRwdXRWYWw7XG4gICAgfVxuXG4gICAgcHVibGljIHJlcGxhY2VJbk1hc2sobWFza2VkVmFsdWU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgbWFza09wdGlvbnM6IE1hc2tPcHRpb25zLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IFJlcGxhY2VkIHtcbiAgICAgICAgY29uc3QgbGl0ZXJhbHNQb3NpdGlvbnM6IG51bWJlcltdID0gQXJyYXkuZnJvbSh0aGlzLmdldE1hc2tMaXRlcmFscyhtYXNrT3B0aW9ucy5mb3JtYXQpLmtleXMoKSk7XG4gICAgICAgIHZhbHVlID0gdGhpcy5yZXBsYWNlSU1FTnVtYmVycyh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGNoYXJzID0gQXJyYXkuZnJvbSh2YWx1ZSk7XG4gICAgICAgIGxldCBjdXJzb3IgPSBzdGFydDtcbiAgICAgICAgZW5kID0gTWF0aC5taW4oZW5kLCBtYXNrZWRWYWx1ZS5sZW5ndGgpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZCB8fCAoY2hhcnMubGVuZ3RoICYmIGkgPCBtYXNrZWRWYWx1ZS5sZW5ndGgpOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsaXRlcmFsc1Bvc2l0aW9ucy5pbmRleE9mKGkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChjaGFyc1swXSA9PT0gbWFza2VkVmFsdWVbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gaSArIDE7XG4gICAgICAgICAgICAgICAgICAgIGNoYXJzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoYXJzWzBdXG4gICAgICAgICAgICAgICAgJiYgIXRoaXMudmFsaWRhdGVDaGFyT25Qb3NpdGlvbihjaGFyc1swXSwgaSwgbWFza09wdGlvbnMuZm9ybWF0KVxuICAgICAgICAgICAgICAgICYmIGNoYXJzWzBdICE9PSBtYXNrT3B0aW9ucy5wcm9tcHRDaGFyKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBjaGFyID0gbWFza09wdGlvbnMucHJvbXB0Q2hhcjtcbiAgICAgICAgICAgIGlmIChjaGFycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjdXJzb3IgPSBpICsgMTtcbiAgICAgICAgICAgICAgICBjaGFyID0gY2hhcnMuc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1hc2tlZFZhbHVlID0gdGhpcy5yZXBsYWNlQ2hhckF0KG1hc2tlZFZhbHVlLCBpLCBjaGFyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChNYXRoLmFicyhlbmQgLSBzdGFydCkgPj0gMSkge1xuICAgICAgICAgICAgLy8gc2V0IGN1cnNvciB0byBiZSBtYXggYmV0d2VlbiBsYXN0IGN1cnNvciBwb3MgYW5kIHRoZSBjYWxjdWxhdGVkIGBlbmRgXG4gICAgICAgICAgICAvLyBzaW5jZSBvbiBgZGVsZXRlYCB0aGUgY3Vyc29yIHNob3VsZCBtb3ZlIGZvcndhcmRcbiAgICAgICAgICAgIGN1cnNvciA9IE1hdGgubWF4KGN1cnNvciwgZW5kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IHZhbHVlOiBtYXNrZWRWYWx1ZSwgZW5kOiBjdXJzb3J9O1xuICAgIH1cblxuICAgIHB1YmxpYyByZXBsYWNlQ2hhckF0KHN0clZhbHVlOiBzdHJpbmcsIGluZGV4OiBudW1iZXIsIGNoYXI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmIChzdHJWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyVmFsdWUuc3Vic3RyaW5nKDAsIGluZGV4KSArIGNoYXIgKyBzdHJWYWx1ZS5zdWJzdHJpbmcoaW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRNYXNrTGl0ZXJhbHMobWFzazogc3RyaW5nKTogTWFwPG51bWJlciwgc3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGxpdGVyYWxzID0gbmV3IE1hcDxudW1iZXIsIHN0cmluZz4oKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hc2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYXIgPSBtYXNrLmNoYXJBdChpKTtcbiAgICAgICAgICAgIGlmIChNQVNLX0ZMQUdTLmluZGV4T2YoY2hhcikgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbGl0ZXJhbHMuc2V0KGksIGNoYXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxpdGVyYWxzO1xuICAgIH1cblxuICAgIC8qKiBWYWxpZGF0ZXMgb25seSBub24gbGl0ZXJhbCBwb3NpdGlvbnMuICovXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUNoYXJPblBvc2l0aW9uKGlucHV0Q2hhcjogc3RyaW5nLCBwb3NpdGlvbjogbnVtYmVyLCBtYXNrOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IHJlZ2V4OiBSZWdFeHA7XG4gICAgICAgIGxldCBpc1ZhbGlkOiBib29sZWFuO1xuICAgICAgICBjb25zdCBsZXR0ZXJPckRpZ2l0UmVnRXggPSAnW1xcXFxkXFxcXHUwMEMwLVxcXFx1MUZGRlxcXFx1MkMwMC1cXFxcdUQ3RkZhLXpBLVpdJztcbiAgICAgICAgY29uc3QgbGV0dGVyRGlnaXRPclNwYWNlUmVnRXggPSAnW1xcXFxkXFxcXHUwMEMwLVxcXFx1MUZGRlxcXFx1MkMwMC1cXFxcdUQ3RkZhLXpBLVpcXFxcdTAwMjBdJztcbiAgICAgICAgY29uc3QgbGV0dGVyUmVnRXggPSAnW1xcXFx1MDBDMC1cXFxcdTFGRkZcXFxcdTJDMDAtXFxcXHVEN0ZGYS16QS1aXSc7XG4gICAgICAgIGNvbnN0IGxldHRlclNwYWNlUmVnRXggPSAnW1xcXFx1MDBDMC1cXFxcdTFGRkZcXFxcdTJDMDAtXFxcXHVEN0ZGYS16QS1aXFxcXHUwMDIwXSc7XG4gICAgICAgIGNvbnN0IGRpZ2l0UmVnRXggPSAnW1xcXFxkXSc7XG4gICAgICAgIGNvbnN0IGRpZ2l0U3BhY2VSZWdFeCA9ICdbXFxcXGRcXFxcdTAwMjBdJztcbiAgICAgICAgY29uc3QgZGlnaXRTcGVjaWFsUmVnRXggPSAnW1xcXFxkLVxcXFwrXSc7XG5cbiAgICAgICAgc3dpdGNoIChtYXNrLmNoYXJBdChwb3NpdGlvbikpIHtcbiAgICAgICAgICAgIGNhc2UgJ0MnOlxuICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBpbnB1dENoYXIgIT09ICcnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnJic6XG4gICAgICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKCdbXFxcXHUwMDIwXScpO1xuICAgICAgICAgICAgICAgIGlzVmFsaWQgPSAhcmVnZXgudGVzdChpbnB1dENoYXIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYSc6XG4gICAgICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKGxldHRlckRpZ2l0T3JTcGFjZVJlZ0V4KTtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gcmVnZXgudGVzdChpbnB1dENoYXIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQSc6XG4gICAgICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKGxldHRlck9yRGlnaXRSZWdFeCk7XG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IHJlZ2V4LnRlc3QoaW5wdXRDaGFyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJz8nOlxuICAgICAgICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChsZXR0ZXJTcGFjZVJlZ0V4KTtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gcmVnZXgudGVzdChpbnB1dENoYXIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnTCc6XG4gICAgICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKGxldHRlclJlZ0V4KTtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gcmVnZXgudGVzdChpbnB1dENoYXIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnMCc6XG4gICAgICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKGRpZ2l0UmVnRXgpO1xuICAgICAgICAgICAgICAgIGlzVmFsaWQgPSByZWdleC50ZXN0KGlucHV0Q2hhcik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICc5JzpcbiAgICAgICAgICAgICAgICByZWdleCA9IG5ldyBSZWdFeHAoZGlnaXRTcGFjZVJlZ0V4KTtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gcmVnZXgudGVzdChpbnB1dENoYXIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnIyc6XG4gICAgICAgICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKGRpZ2l0U3BlY2lhbFJlZ0V4KTtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gcmVnZXgudGVzdChpbnB1dENoYXIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGlzVmFsaWQ7XG4gICAgfVxuICAgIHByaXZhdGUgZ2V0Tm9uTGl0ZXJhbEluZGljZXMobWFzazogc3RyaW5nLCBsaXRlcmFsS2V5czogbnVtYmVyW10pOiBudW1iZXJbXSB7XG4gICAgICAgIGNvbnN0IG5vbkxpdGVyYWxzSW5kaWNlczogbnVtYmVyW10gPSBuZXcgQXJyYXkoKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hc2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChsaXRlcmFsS2V5cy5pbmRleE9mKGkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG5vbkxpdGVyYWxzSW5kaWNlcy5wdXNoKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vbkxpdGVyYWxzSW5kaWNlcztcbiAgICB9XG4gICAgcHJpdmF0ZSBnZXROb25MaXRlcmFsVmFsdWVzKHZhbHVlOiBzdHJpbmcsIGxpdGVyYWxWYWx1ZXM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCBub25MaXRlcmFsVmFsdWVzOiBzdHJpbmdbXSA9IG5ldyBBcnJheSgpO1xuXG4gICAgICAgIGZvciAoY29uc3QgdmFsIG9mIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAobGl0ZXJhbFZhbHVlcy5pbmRleE9mKHZhbCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbm9uTGl0ZXJhbFZhbHVlcy5wdXNoKHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9uTGl0ZXJhbFZhbHVlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlcGxhY2VJTUVOdW1iZXJzKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvW++8kO+8ke+8ku+8k++8lO+8le+8lu+8l++8mO+8mV0vZywgKG51bSkgPT4gKHtcbiAgICAgICAgICAgICfvvJEnOiAnMScsICfvvJInOiAnMicsICfvvJMnOiAnMycsICfvvJQnOiAnNCcsICfvvJUnOiAnNScsXG4gICAgICAgICAgICAn77yWJzogJzYnLCAn77yXJzogJzcnLCAn77yYJzogJzgnLCAn77yZJzogJzknLCAn77yQJzogJzAnXG4gICAgICAgIH1bbnVtXSkpO1xuICAgIH1cbn1cbiJdfQ==