@techextensor/tab-sdk 0.0.32 → 0.0.34

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.
@@ -731,6 +731,88 @@ export class StoreService {
731
731
  this._sessionStorageService.clearSessionStorage();
732
732
  }
733
733
  }
734
+ /**
735
+ * Adds a screen context with the given key and data.
736
+ *
737
+ * The screen context is a collection of key-value pairs that are stored in session storage.
738
+ * The key is used to identify the screen context and the data is the value associated with the key.
739
+ *
740
+ * @param key The key for the screen context.
741
+ * @param data The data to store in the screen context.
742
+ */
743
+ addScreenContext(key, data) {
744
+ try {
745
+ if (!key || data == null)
746
+ return;
747
+ const screenContext = this.getSession(StorageConstants.screenContext) || {};
748
+ if (!screenContext[key]) {
749
+ // Initialize the key with an empty array if it doesn't exist
750
+ screenContext[key] = [];
751
+ }
752
+ // Add the data to the existing array
753
+ screenContext[key].push(data);
754
+ // Update the screen context with the new data
755
+ this.setSession(StorageConstants.screenContext, screenContext);
756
+ }
757
+ catch (error) {
758
+ console.error('Error adding screen context:', error);
759
+ }
760
+ }
761
+ /**
762
+ * Retrieves the latest screen context data associated with the given key.
763
+ *
764
+ * The screen context is a collection of key-value pairs that are stored in session storage.
765
+ * The key is used to identify the screen context and the data is the value associated with the key.
766
+ *
767
+ * @param key The key for the screen context.
768
+ * @returns The latest screen context data associated with the key, or null if the key is not found.
769
+ */
770
+ getScreenContext(key) {
771
+ try {
772
+ if (!key)
773
+ return null;
774
+ const screenContext = this.getSession(StorageConstants.screenContext);
775
+ if (!screenContext || !screenContext[key] || screenContext[key].length === 0) {
776
+ return null;
777
+ }
778
+ // Return the latest screen context data (LIFO)
779
+ return screenContext[key][screenContext[key].length - 1];
780
+ }
781
+ catch (error) {
782
+ console.error('Error getting screen context:', error);
783
+ return null;
784
+ }
785
+ }
786
+ /**
787
+ * Removes the latest screen context data associated with the given key from session storage.
788
+ *
789
+ * The screen context is a collection of key-value pairs that are stored in session storage.
790
+ * The key is used to identify the screen context and the data is the value associated with the key.
791
+ *
792
+ * @param key The key for the screen context.
793
+ * @returns The removed screen context data, or null if the key is not found or the data is not present.
794
+ */
795
+ cleanScreenContext(key) {
796
+ try {
797
+ if (!key)
798
+ return null;
799
+ const screenContext = this.getSession(StorageConstants.screenContext);
800
+ if (!screenContext || !screenContext[key] || screenContext[key].length === 0) {
801
+ return null;
802
+ }
803
+ const removedData = screenContext[key].pop(); // Remove latest (LIFO)
804
+ // Auto-cleanup: Remove key if array becomes empty
805
+ if (screenContext[key].length === 0) {
806
+ delete screenContext[key];
807
+ }
808
+ this.setSession(StorageConstants.screenContext, screenContext);
809
+ return removedData;
810
+ }
811
+ catch (error) {
812
+ console.error('Error cleaning screen context:', error);
813
+ return null;
814
+ }
815
+ }
734
816
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StoreService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
735
817
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: StoreService, providedIn: 'root' });
736
818
  }
@@ -740,4 +822,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
740
822
  providedIn: 'root'
741
823
  }]
742
824
  }] });
743
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhYi1zZGsvc3JjL2xpYi9zdG9yZS9zdG9yZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFLakQsTUFBTSxPQUFPLFlBQVk7SUFDSixvQkFBb0IsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDeEUsc0JBQXNCLEdBQTBCLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBRS9GOztPQUVHO0lBQ0gsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksUUFBUSxDQUFDLEtBQW9CO1FBQzdCLHFFQUFxRTtRQUNyRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDO1FBRXhDLDZCQUE2QjtRQUM3QixPQUFPLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUVuQixxREFBcUQ7UUFDckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLFVBQVU7UUFDViw4Q0FBOEM7UUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRWxDLDZEQUE2RDtRQUM3RCxPQUFPLE9BQU8sRUFBRSxnQkFBZ0IsSUFBSSxJQUFJLENBQUM7SUFDN0MsQ0FBQztJQUVE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LENBQUM7d0dBdHpCUSxZQUFZOzRHQUFaLFlBQVksY0FGVCxNQUFNOzs0RkFFVCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2VTZXJ2aWNlLCBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsIFN0b3JhZ2VDb25zdGFudHMgfSBmcm9tICdAdGVjaGV4dGVuc29yL3RhYi1jb3JlLXV0aWxpdHknO1xyXG5pbXBvcnQgeyBTdG9yYWdlVHlwZSB9IGZyb20gJy4uL2VudW0vc3RvcmUuZW51bSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFN0b3JlU2VydmljZSB7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9sb2NhbFN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlID0gaW5qZWN0KExvY2FsU3RvcmFnZVNlcnZpY2UpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyB0aGUgdGVuYW50IElEIGZyb20gdGhlIGxvY2FsIHN0b3JhZ2UuXHJcbiAgICAgKi9cclxuICAgIGdldCB0ZW5hbnRJZCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcmdJbmZvKCk/LklkIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSB0ZW5hbnQgSUQgaW4gdGhlIG9yZ2FuaXphdGlvbiBpbmZvLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdGVuYW50IElEIHRvIHNldC5cclxuICAgICAqL1xyXG4gICAgc2V0IHRlbmFudElkKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIG9yZ2FuaXphdGlvbiBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XHJcbiAgICAgICAgY29uc3Qgb3JnSW5mbyA9IHRoaXMuZ2V0T3JnSW5mbygpIHx8IHt9O1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGhlIHRlbmFudCBJRCB2YWx1ZVxyXG4gICAgICAgIG9yZ0luZm8uSWQgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCBvcmdhbml6YXRpb24gaW5mbyBiYWNrIHRvIHN0b3JhZ2VcclxuICAgICAgICB0aGlzLnNldE9yZ0luZm8ob3JnSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHRlbmFudCBuYW1lIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvLlxyXG4gICAgICovXHJcbiAgICBnZXQgdGVuYW50TmFtZSgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgb3JnYW5pemF0aW9uIGluZm8gZnJvbSBzdG9yYWdlXHJcbiAgICAgICAgY29uc3Qgb3JnSW5mbyA9IHRoaXMuZ2V0T3JnSW5mbygpO1xyXG5cclxuICAgICAgICAvLyBSZXR1cm4gdGhlIHRlbmFudCBuYW1lIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIHJldHVybiBudWxsXHJcbiAgICAgICAgcmV0dXJuIG9yZ0luZm8/Lk9yZ2FuaXphdGlvbk5hbWUgfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHRlbmFudCBuYW1lIGluIHRoZSBvcmdhbml6YXRpb24gaW5mby5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHRlbmFudCBuYW1lIHRvIHNldC5cclxuICAgICAqL1xyXG4gICAgc2V0IHRlbmFudE5hbWUodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcclxuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3Rpbmcgb3JnYW5pemF0aW9uIGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcclxuICAgICAgICBjb25zdCBvcmdJbmZvID0gdGhpcy5nZXRPcmdJbmZvKCkgfHwge307XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgb3JnYW5pemF0aW9uIG5hbWUgdmFsdWVcclxuICAgICAgICBvcmdJbmZvLk9yZ2FuaXphdGlvbk5hbWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCBvcmdhbml6YXRpb24gaW5mbyBiYWNrIHRvIHN0b3JhZ2VcclxuICAgICAgICB0aGlzLnNldE9yZ0luZm8ob3JnSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHN1YmRvbWFpbiBmcm9tIHRoZSBvcmdhbml6YXRpb24gaW5mby5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgVGhlIHN1YmRvbWFpbiBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSBgbnVsbGAuXHJcbiAgICAgKi9cclxuICAgIGdldCBzdWJkb21haW4oKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIG9yZ2FuaXphdGlvbiBpbmZvIGZyb20gc3RvcmFnZVxyXG4gICAgICAgIGNvbnN0IG9yZ0luZm8gPSB0aGlzLmdldE9yZ0luZm8oKTtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBzdWJkb21haW4gaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgcmV0dXJuIG51bGxcclxuICAgICAgICByZXR1cm4gb3JnSW5mbz8uU3ViZG9tYWluIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBzdWJkb21haW4gaW4gdGhlIG9yZ2FuaXphdGlvbiBpbmZvLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgc3ViZG9tYWluIHRvIHNldC5cclxuICAgICAqL1xyXG4gICAgc2V0IHN1YmRvbWFpbih2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBleGlzdGluZyBvcmdhbml6YXRpb24gaW5mbyBvciBpbml0aWFsaXplIGEgbmV3IG9iamVjdFxyXG4gICAgICAgIGNvbnN0IG9yZ0luZm8gPSB0aGlzLmdldE9yZ0luZm8oKSB8fCB7fTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBzdWJkb21haW4gdmFsdWVcclxuICAgICAgICBvcmdJbmZvLlN1YmRvbWFpbiA9IHZhbHVlO1xyXG5cclxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIG9yZ2FuaXphdGlvbiBpbmZvIGJhY2sgdG8gc3RvcmFnZVxyXG4gICAgICAgIHRoaXMuc2V0T3JnSW5mbyhvcmdJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyB0aGUgbG9jYWxlIHNldHRpbmdzIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgbG9jYWxlIHNldHRpbmdzIGlmIHRoZXkgZXhpc3QsIG90aGVyd2lzZSBgbnVsbGAuXHJcbiAgICAgKi9cclxuICAgIGdldCBvcmdMb2NhbGVTZXR0aW5ncygpOiBhbnkge1xyXG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBsb2NhbGUgc2V0dGluZ3MgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9cclxuICAgICAgICBsZXQgbG9jYWxTZXR0aW5ncyA9IHRoaXMuZ2V0T3JnSW5mbygpPy5Mb2NhbGVTZXR0aW5ncztcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIGxvY2FsZSBzZXR0aW5ncyBhcmUgYSBzdHJpbmcsIHBhcnNlIHRoZW0gYXMgSlNPTlxyXG4gICAgICAgIGlmKHR5cGVvZiBsb2NhbFNldHRpbmdzID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBsb2NhbFNldHRpbmdzID0gSlNPTi5wYXJzZShsb2NhbFNldHRpbmdzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJldHVybiB0aGUgbG9jYWxlIHNldHRpbmdzXHJcbiAgICAgICAgcmV0dXJuIGxvY2FsU2V0dGluZ3M7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBsb2NhbGUgc2V0dGluZ3MgaW4gdGhlIG9yZ2FuaXphdGlvbiBpbmZvLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbG9jYWxlIHNldHRpbmdzIHRvIHNldC5cclxuICAgICAqL1xyXG4gICAgc2V0IG9yZ0xvY2FsZVNldHRpbmdzKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3Rpbmcgb3JnYW5pemF0aW9uIGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcclxuICAgICAgICBjb25zdCBvcmdJbmZvID0gdGhpcy5nZXRPcmdJbmZvKCkgfHwge307XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgbG9jYWxlIHNldHRpbmdzIHZhbHVlXHJcbiAgICAgICAgb3JnSW5mby5Mb2NhbGVTZXR0aW5ncyA9IHZhbHVlO1xyXG5cclxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIG9yZ2FuaXphdGlvbiBpbmZvIGJhY2sgdG8gc3RvcmFnZVxyXG4gICAgICAgIHRoaXMuc2V0T3JnSW5mbyhvcmdJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyB0aGUgYXBwIElEIGZyb20gdGhlIGFwcCBpbmZvLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgYXBwIElEIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGBudWxsYC5cclxuICAgICAqL1xyXG4gICAgZ2V0IGFwcElkKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEFwcEluZm8oKT8uSWQgfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGFwcCBJRCBpbiB0aGUgYXBwIGluZm8uXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBhcHAgSUQgdG8gc2V0LlxyXG4gICAgICovXHJcbiAgICBzZXQgYXBwSWQodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcclxuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3RpbmcgYXBwIGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcclxuICAgICAgICBjb25zdCBhcHBJbmZvID0gdGhpcy5nZXRBcHBJbmZvKCkgfHwge307XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgYXBwIElEIHZhbHVlXHJcbiAgICAgICAgYXBwSW5mby5JZCA9IHZhbHVlO1xyXG5cclxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIGFwcCBpbmZvIGJhY2sgdG8gc3RvcmFnZVxyXG4gICAgICAgIHRoaXMuc2V0QXBwSW5mbyhhcHBJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyB0aGUgYXBwIG5hbWUgZnJvbSB0aGUgYXBwIGluZm8uXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIFRoZSBhcHAgbmFtZSBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSBgbnVsbGAuXHJcbiAgICAgKi9cclxuICAgIGdldCBhcHBOYW1lKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIC8vIFJldHJpZXZlIGFuZCByZXR1cm4gdGhlIGFwcCBuYW1lIGZyb20gdGhlIGFwcCBpbmZvLCBvciByZXR1cm4gbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwSW5mbygpPy5BcHBOYW1lIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBhcHAgbmFtZSBpbiB0aGUgYXBwIGluZm8uXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBhcHAgbmFtZSB0byBzZXQuXHJcbiAgICAgKi9cclxuICAgIHNldCBhcHBOYW1lKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIGFwcCBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XHJcbiAgICAgICAgY29uc3QgYXBwSW5mbyA9IHRoaXMuZ2V0QXBwSW5mbygpIHx8IHt9O1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGhlIGFwcCBuYW1lIHZhbHVlXHJcbiAgICAgICAgYXBwSW5mby5BcHBOYW1lID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgYXBwIGluZm8gYmFjayB0byBzdG9yYWdlXHJcbiAgICAgICAgdGhpcy5zZXRBcHBJbmZvKGFwcEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIHRoZSBlbnZpcm9ubWVudCBJRCBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgZW52aXJvbm1lbnQgSUQgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYG51bGxgLlxyXG4gICAgICovXHJcbiAgICBnZXQgZW52aXJvbm1lbnRJZCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSBlbnZpcm9ubWVudCBJRCBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvLCBvciByZXR1cm4gbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RW52aXJvbm1lbnRJbmZvKCk/LklkIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBlbnZpcm9ubWVudCBJRCBpbiB0aGUgZW52aXJvbm1lbnQgaW5mby5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGVudmlyb25tZW50IElEIHRvIHNldC5cclxuICAgICAqL1xyXG4gICAgc2V0IGVudmlyb25tZW50SWQodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcclxuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3RpbmcgZW52aXJvbm1lbnQgaW5mbyBvciBpbml0aWFsaXplIGEgbmV3IG9iamVjdFxyXG4gICAgICAgIGNvbnN0IGVudmlyb25tZW50SW5mbyA9IHRoaXMuZ2V0RW52aXJvbm1lbnRJbmZvKCkgfHwge307XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgZW52aXJvbm1lbnQgSUQgdmFsdWVcclxuICAgICAgICBlbnZpcm9ubWVudEluZm8uSWQgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCBlbnZpcm9ubWVudCBpbmZvIGJhY2sgdG8gc3RvcmFnZVxyXG4gICAgICAgIHRoaXMuc2V0RW52aXJvbm1lbnRJbmZvKGVudmlyb25tZW50SW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGVudmlyb25tZW50IG5hbWUgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mby5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgVGhlIGVudmlyb25tZW50IG5hbWUgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYG51bGxgLlxyXG4gICAgICovXHJcbiAgICBnZXQgZW52aXJvbm1lbnROYW1lKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIC8vIFJldHJpZXZlIGFuZCByZXR1cm4gdGhlIGVudmlyb25tZW50IG5hbWUgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mbywgb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEVudmlyb25tZW50SW5mbygpPy5OYW1lIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBlbnZpcm9ubWVudCBuYW1lIGluIHRoZSBlbnZpcm9ubWVudCBpbmZvLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgZW52aXJvbm1lbnQgbmFtZSB0byBzZXQuXHJcbiAgICAgKi9cclxuICAgIHNldCBlbnZpcm9ubWVudE5hbWUodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcclxuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3RpbmcgZW52aXJvbm1lbnQgaW5mbyBvciBpbml0aWFsaXplIGEgbmV3IG9iamVjdFxyXG4gICAgICAgIGNvbnN0IGVudmlyb25tZW50SW5mbyA9IHRoaXMuZ2V0RW52aXJvbm1lbnRJbmZvKCkgfHwge307XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgZW52aXJvbm1lbnQgbmFtZSB2YWx1ZVxyXG4gICAgICAgIGVudmlyb25tZW50SW5mby5OYW1lID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgZW52aXJvbm1lbnQgaW5mbyBiYWNrIHRvIHN0b3JhZ2VcclxuICAgICAgICB0aGlzLnNldEVudmlyb25tZW50SW5mbyhlbnZpcm9ubWVudEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIHRoZSB0b2tlbiBmcm9tIHRoZSB0b2tlbiBpbmZvLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgdG9rZW4gaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYG51bGxgLlxyXG4gICAgICovXHJcbiAgICBnZXQgdG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgLy8gUmV0cmlldmUgYW5kIHJldHVybiB0aGUgdG9rZW4gZnJvbSB0aGUgdG9rZW4gaW5mbywgb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuSW5mbygpPy50b2tlbiB8fCBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdG9rZW4gaW4gdGhlIHRva2VuIGluZm8uXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB0b2tlbiB0byBzZXQuXHJcbiAgICAgKi9cclxuICAgIHNldCB0b2tlbih2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBleGlzdGluZyB0b2tlbiBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XHJcbiAgICAgICAgY29uc3QgdG9rZW5JbmZvID0gdGhpcy5nZXRUb2tlbkluZm8oKSB8fCB7fTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRoZSB0b2tlbiB2YWx1ZVxyXG4gICAgICAgIHRva2VuSW5mby50b2tlbiA9IHZhbHVlO1xyXG5cclxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIHRva2VuIGluZm8gYmFjayB0byBzdG9yYWdlXHJcbiAgICAgICAgdGhpcy5zZXRUb2tlbkluZm8odG9rZW5JbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyB0aGUgcmVmcmVzaCB0b2tlbiBmcm9tIHRoZSB0b2tlbiBpbmZvLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgcmVmcmVzaCB0b2tlbiBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSBgbnVsbGAuXHJcbiAgICAgKi9cclxuICAgIGdldCByZWZyZXNoVG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgLy8gUmV0cmlldmUgYW5kIHJldHVybiB0aGUgcmVmcmVzaCB0b2tlbiBmcm9tIHRoZSB0b2tlbiBpbmZvLCBvciByZXR1cm4gbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5JbmZvKCk/LnJlZnJlc2hUb2tlbiB8fCBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgcmVmcmVzaCB0b2tlbiBpbiB0aGUgdG9rZW4gaW5mby5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHJlZnJlc2ggdG9rZW4gdG8gc2V0LlxyXG4gICAgICovXHJcbiAgICBzZXQgcmVmcmVzaFRva2VuKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIHRva2VuIGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcclxuICAgICAgICBjb25zdCB0b2tlbkluZm8gPSB0aGlzLmdldFRva2VuSW5mbygpIHx8IHt9O1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGhlIHJlZnJlc2ggdG9rZW4gdmFsdWVcclxuICAgICAgICB0b2tlbkluZm8ucmVmcmVzaFRva2VuID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgdG9rZW4gaW5mbyBiYWNrIHRvIHN0b3JhZ2VcclxuICAgICAgICB0aGlzLnNldFRva2VuSW5mbyh0b2tlbkluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIHRoZSByZWZyZXNoIHRva2VuIGV4cGlyeSB0aW1lIGZyb20gdGhlIHRva2VuIGluZm8uXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIFRoZSByZWZyZXNoIHRva2VuIGV4cGlyeSB0aW1lIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGBudWxsYC5cclxuICAgICAqL1xyXG4gICAgZ2V0IHJlZnJlc2hUb2tlbkV4cGlyeSgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSByZWZyZXNoIHRva2VuIGV4cGlyeSB0aW1lIGZyb20gdGhlIHRva2VuIGluZm8sXHJcbiAgICAgICAgLy8gb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuSW5mbygpPy5yZWZyZXNoVG9rZW5FeHBpcnkgfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHJlZnJlc2ggdG9rZW4gZXhwaXJ5IHRpbWUgaW4gdGhlIHRva2VuIGluZm8uXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSByZWZyZXNoIHRva2VuIGV4cGlyeSB0aW1lIHRvIHNldC5cclxuICAgICAqL1xyXG4gICAgc2V0IHJlZnJlc2hUb2tlbkV4cGlyeSh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBleGlzdGluZyB0b2tlbiBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XHJcbiAgICAgICAgY29uc3QgdG9rZW5JbmZvID0gdGhpcy5nZXRUb2tlbkluZm8oKSB8fCB7fTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRoZSByZWZyZXNoIHRva2VuIGV4cGlyeSB0aW1lXHJcbiAgICAgICAgdG9rZW5JbmZvLnJlZnJlc2hUb2tlbkV4cGlyeSA9IHZhbHVlO1xyXG5cclxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIHRva2VuIGluZm8gYmFjayB0byBzdG9yYWdlXHJcbiAgICAgICAgdGhpcy5zZXRUb2tlbkluZm8odG9rZW5JbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyB0aGUgc3RhdGljIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm8uXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIFRoZSBzdGF0aWMgdG9rZW4gaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYG51bGxgLlxyXG4gICAgICovXHJcbiAgICBnZXQgc3RhdGljVG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgLy8gUmV0cmlldmUgYW5kIHJldHVybiB0aGUgc3RhdGljIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm8sXHJcbiAgICAgICAgLy8gb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuSW5mbygpPy5zdGF0aWNUb2tlbiB8fCBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgc3RhdGljIHRva2VuIGluIHRoZSB0b2tlbiBpbmZvLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgc3RhdGljIHRva2VuIHRvIHNldC5cclxuICAgICAqL1xyXG4gICAgc2V0IHN0YXRpY1Rva2VuKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIHRva2VuIGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcclxuICAgICAgICBjb25zdCB0b2tlbkluZm8gPSB0aGlzLmdldFRva2VuSW5mbygpIHx8IHt9O1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGhlIHN0YXRpYyB0b2tlbiB2YWx1ZVxyXG4gICAgICAgIHRva2VuSW5mby5zdGF0aWNUb2tlbiA9IHZhbHVlO1xyXG5cclxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIHRva2VuIGluZm8gYmFjayB0byBzdG9yYWdlXHJcbiAgICAgICAgdGhpcy5zZXRUb2tlbkluZm8odG9rZW5JbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyB0aGUgdXNlciBJRCBmcm9tIHRoZSB1c2VyIGluZm8uXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIFRoZSB1c2VyIElEIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGBudWxsYC5cclxuICAgICAqL1xyXG4gICAgZ2V0IHVzZXJJZCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSB1c2VyIElEIGZyb20gdGhlIHVzZXIgaW5mbywgb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFVzZXJJbmZvKCk/LnVzZXI/LklkIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIncyByb2xlcyBmcm9tIHRoZSB1c2VyIGluZm9ybWF0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiB1c2VyIHJvbGVzIGlmIHRoZXkgZXhpc3QsIG90aGVyd2lzZSBgbnVsbGAuXHJcbiAgICAgKi9cclxuICAgIGdldCB1c2VyUm9sZXMoKTogYW55W10gfCBudWxsIHtcclxuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSB1c2VyIHJvbGVzIGZyb20gdGhlIHVzZXIgaW5mbywgb3IgcmV0dXJuIG51bGwgaWYgdGhleSBkb24ndCBleGlzdFxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFVzZXJJbmZvKCk/LnVzZXI/LlJvbGVzIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIncyB0ZWFtcyBmcm9tIHRoZSB1c2VyIGluZm9ybWF0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiB1c2VyIHRlYW1zIGlmIHRoZXkgZXhpc3QsIG90aGVyd2lzZSBgbnVsbGAuXHJcbiAgICAgKi9cclxuICAgIGdldCB1c2VyVGVhbXMoKTogYW55W10gfCBudWxsIHtcclxuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSB1c2VyIHRlYW1zIGZyb20gdGhlIHVzZXIgaW5mbywgb3IgcmV0dXJuIG51bGwgaWYgdGhleSBkb24ndCBleGlzdFxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFVzZXJJbmZvKCk/LnVzZXI/LlRlYW1zIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSB0ZW5hbnQgSUQgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uLlxyXG4gICAgICovXHJcbiAgICByZW1vdmVUZW5hbnRJZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUZyb21PcmdJbmZvKCdJZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgdGVuYW50IG5hbWUgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uLlxyXG4gICAgICovXHJcbiAgICByZW1vdmVUZW5hbnROYW1lKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgdGVuYW50IG5hbWUgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uXHJcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tT3JnSW5mbygnT3JnYW5pemF0aW9uTmFtZScpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgc3ViZG9tYWluIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbi5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyByZW1vdmVzIHRoZSBzdWJkb21haW4gcHJvcGVydHkgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uXHJcbiAgICAgKiBzdG9yZWQgaW4gbG9jYWwgc3RvcmFnZS5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlU3ViZG9tYWluKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgc3ViZG9tYWluIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvblxyXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbU9yZ0luZm8oJ1N1YmRvbWFpbicpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgYXBwIElEIGZyb20gdGhlIGFwcCBpbmZvcm1hdGlvbi5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyByZW1vdmVzIHRoZSBhcHAgSUQgcHJvcGVydHkgZnJvbSB0aGUgYXBwIGluZm9ybWF0aW9uIHN0b3JlZCBpbiBsb2NhbCBzdG9yYWdlLlxyXG4gICAgICovXHJcbiAgICByZW1vdmVBcHBJZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUZyb21BcHBJbmZvKCdJZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgYXBwIG5hbWUgZnJvbSB0aGUgYXBwIGluZm9ybWF0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIGFwcCBuYW1lIHByb3BlcnR5IGZyb20gdGhlIGFwcCBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gbG9jYWwgc3RvcmFnZS5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQXBwTmFtZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUZyb21BcHBJbmZvKCdBcHBOYW1lJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBlbnZpcm9ubWVudCBJRCBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyByZW1vdmVzIHRoZSBJRCBwcm9wZXJ0eSBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvblxyXG4gICAgICogc3RvcmVkIGluIGxvY2FsIHN0b3JhZ2UuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUVudmlyb25tZW50SWQoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBlbnZpcm9ubWVudCBJRCBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvblxyXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbUVudmlyb25tZW50SW5mbygnSWQnKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgdGhlIGVudmlyb25tZW50IG5hbWUgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgTmFtZSBwcm9wZXJ0eSBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvblxyXG4gICAgICogc3RvcmVkIGluIGxvY2FsIHN0b3JhZ2UuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUVudmlyb25tZW50TmFtZSgpOiB2b2lkIHtcclxuICAgICAgICAvLyBSZW1vdmUgdGhlIGVudmlyb25tZW50IG5hbWUgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb25cclxuICAgICAgICB0aGlzLnJlbW92ZUZyb21FbnZpcm9ubWVudEluZm8oJ05hbWUnKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgdGhlIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm8uXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgdG9rZW4gcHJvcGVydHkgZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24gc3RvcmVkIGluIHNlc3Npb25cclxuICAgICAqIHN0b3JhZ2UuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZVRva2VuKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgdG9rZW4gZnJvbSB0aGUgdG9rZW4gaW5mb1xyXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVRva2VuSW5mbygndG9rZW4nKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgdGhlIHJlZnJlc2ggdG9rZW4gZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24uXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgcmVmcmVzaCB0b2tlbiBwcm9wZXJ0eSBmcm9tIHRoZSB0b2tlbiBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gc2Vzc2lvblxyXG4gICAgICogc3RvcmFnZS5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlUmVmcmVzaFRva2VuKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVRva2VuSW5mbygncmVmcmVzaFRva2VuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSByZWZyZXNoIHRva2VuIGV4cGlyeSB0aW1lIGZyb20gdGhlIHRva2VuIGluZm9ybWF0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHJlZnJlc2ggdG9rZW4gZXhwaXJ5IHRpbWUgcHJvcGVydHkgZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24gc3RvcmVkIGluIHNlc3Npb25cclxuICAgICAqIHN0b3JhZ2UuXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZVJlZnJlc2hUb2tlbkV4cGlyeSgpOiB2b2lkIHtcclxuICAgICAgICAvLyBSZW1vdmUgdGhlIHJlZnJlc2ggdG9rZW4gZXhwaXJ5IGZyb20gdGhlIHRva2VuIGluZm9cclxuICAgICAgICB0aGlzLnJlbW92ZUZyb21Ub2tlbkluZm8oJ3JlZnJlc2hUb2tlbkV4cGlyeScpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgc3RhdGljIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm9ybWF0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHN0YXRpYyB0b2tlbiBwcm9wZXJ0eSBmcm9tIHRoZSB0b2tlbiBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gc2Vzc2lvblxyXG4gICAgICogc3RvcmFnZS5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlU3RhdGljVG9rZW4oKTogdm9pZCB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBzdGF0aWMgdG9rZW4gZnJvbSB0aGUgdG9rZW4gaW5mb1xyXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVRva2VuSW5mbygnc3RhdGljVG9rZW4nKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uIHN0b3JlZCBpbiBsb2NhbCBzdG9yYWdlLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgdG8gcmVtb3ZlIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZW1vdmVGcm9tT3JnSW5mbyhrZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG9yZ0luZm8gPSB0aGlzLmdldE9yZ0luZm8oKTtcclxuICAgICAgICBpZiAob3JnSW5mbykge1xyXG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGtleSBmcm9tIHRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb25cclxuICAgICAgICAgICAgZGVsZXRlIG9yZ0luZm9ba2V5XTtcclxuICAgICAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24gYmFjayB0byBsb2NhbCBzdG9yYWdlXHJcbiAgICAgICAgICAgIHRoaXMuc2V0T3JnSW5mbyhvcmdJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQga2V5IGZyb20gdGhlIGFwcCBpbmZvcm1hdGlvbi5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyByZW1vdmVzIHRoZSBzcGVjaWZpZWQga2V5IGZyb20gdGhlIGFwcCBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gc2Vzc2lvblxyXG4gICAgICogc3RvcmFnZS5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHJlbW92ZSBmcm9tIHRoZSBhcHAgaW5mb3JtYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVtb3ZlRnJvbUFwcEluZm8oa2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBhcHBJbmZvID0gdGhpcy5nZXRBcHBJbmZvKCk7XHJcbiAgICAgICAgaWYgKGFwcEluZm8pIHtcclxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBrZXkgZnJvbSB0aGUgYXBwIGluZm9ybWF0aW9uXHJcbiAgICAgICAgICAgIGRlbGV0ZSBhcHBJbmZvW2tleV07XHJcbiAgICAgICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgYXBwIGluZm9ybWF0aW9uIGJhY2sgdG8gc2Vzc2lvbiBzdG9yYWdlXHJcbiAgICAgICAgICAgIHRoaXMuc2V0QXBwSW5mbyhhcHBJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQga2V5IGZyb20gdGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gc3RvcmVkIGluIHNlc3Npb25cclxuICAgICAqIHN0b3JhZ2UuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byByZW1vdmUgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVtb3ZlRnJvbUVudmlyb25tZW50SW5mbyhrZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGVudmlyb25tZW50SW5mbyA9IHRoaXMuZ2V0RW52aXJvbm1lbnRJbmZvKCk7XHJcbiAgICAgICAgaWYgKGVudmlyb25tZW50SW5mbykge1xyXG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGtleSBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvblxyXG4gICAgICAgICAgICBkZWxldGUgZW52aXJvbm1lbnRJbmZvW2tleV07XHJcbiAgICAgICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gYmFjayB0byBzZXNzaW9uIHN0b3JhZ2VcclxuICAgICAgICAgICAgdGhpcy5zZXRFbnZpcm9ubWVudEluZm8oZW52aXJvbm1lbnRJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQga2V5IGZyb20gdGhlIHRva2VuIGluZm9ybWF0aW9uLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24gc3RvcmVkIGluIHNlc3Npb25cclxuICAgICAqIHN0b3JhZ2UuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byByZW1vdmUgZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVtb3ZlRnJvbVRva2VuSW5mbyhrZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHRva2VuSW5mbyA9IHRoaXMuZ2V0VG9rZW5JbmZvKCk7XHJcbiAgICAgICAgaWYgKHRva2VuSW5mbykge1xyXG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGtleSBmcm9tIHRoZSB0b2tlbiBpbmZvcm1hdGlvblxyXG4gICAgICAgICAgICBkZWxldGUgdG9rZW5JbmZvW2tleV07XHJcbiAgICAgICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgdG9rZW4gaW5mb3JtYXRpb24gYmFjayB0byBzZXNzaW9uIHN0b3JhZ2VcclxuICAgICAgICAgICAgdGhpcy5zZXRUb2tlbkluZm8odG9rZW5JbmZvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbiBmcm9tIGxvY2FsIHN0b3JhZ2UuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIFRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24gb2JqZWN0IG9yIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdC5cclxuICAgICAqL1xyXG4gICAgZ2V0T3JnSW5mbygpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLkxvY2FsLCBTdG9yYWdlQ29uc3RhbnRzLm9yZ0luZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2F2ZXMgdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbiB0byBsb2NhbCBzdG9yYWdlLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gb3JnSW5mbyAtIFRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24gdG8gc3RvcmUuXHJcbiAgICAgKi9cclxuICAgIHNldE9yZ0luZm8ob3JnSW5mbzogYW55KTogdm9pZCB7XHJcbiAgICAgICAgLy8gdGVtcCBvbmNlIHJlbW92ZSBmcm9tIGRyb3Bkb3duLCB3ZSBjYW4gcmVtb3ZlIHRoaXNcclxuICAgICAgICAvLyBpZiAob3JnSW5mby5JZCkge1xyXG4gICAgICAgIC8vICAgICB0aGlzLnNldFNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy5UZW5hbnRJZCwgb3JnSW5mby5JZCk7XHJcbiAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5yZW1vdmVTZXNzaW9uKFN0b3JhZ2VDb25zdGFudHMuVGVuYW50SWQpO1xyXG4gICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgLy8gU2F2ZSB0aGUgb3JnYW5pemF0aW9uIGluZm8gdG8gbG9jYWwgc3RvcmFnZVxyXG4gICAgICAgIHRoaXMuc2V0VG9TdG9yYWdlKFN0b3JhZ2VUeXBlLkxvY2FsLCBTdG9yYWdlQ29uc3RhbnRzLm9yZ0luZm8sIG9yZ0luZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIHRoZSBhcHAgaW5mb3JtYXRpb24gZnJvbSBzZXNzaW9uIHN0b3JhZ2UuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIFRoZSBhcHAgaW5mb3JtYXRpb24gb2JqZWN0IG9yIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdC5cclxuICAgICAqL1xyXG4gICAgZ2V0QXBwSW5mbygpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLlNlc3Npb24sIFN0b3JhZ2VDb25zdGFudHMuYXBwSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTYXZlcyB0aGUgYXBwIGluZm9ybWF0aW9uIHRvIHNlc3Npb24gc3RvcmFnZS5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGFwcEluZm8gLSBUaGUgYXBwIGluZm9ybWF0aW9uIHRvIHN0b3JlLlxyXG4gICAgICovXHJcbiAgICBzZXRBcHBJbmZvKGFwcEluZm86IGFueSk6IHZvaWQge1xyXG4gICAgICAgIC8vIHRlbXAgb25jZSByZW1vdmUgZnJvbSBkcm9wZG93biwgd2UgY2FuIHJlbW92ZSB0aGlzXHJcbiAgICAgICAgLy8gaWYgKGFwcEluZm8/LklkKSB7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuc2V0U2Vzc2lvbihTdG9yYWdlQ29uc3RhbnRzLkFwcElkLCBhcHBJbmZvLklkKTtcclxuICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgIC8vICAgICB0aGlzLnJlbW92ZVNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy5BcHBJZCk7XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAvLyBpZiAoYXBwSW5mbz8uQXBwTmFtZSkge1xyXG4gICAgICAgIC8vICAgICB0aGlzLnNldFNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy5hcHBsaWNhdGlvbkNvZGUsIGFwcEluZm8uQXBwTmFtZSk7XHJcbiAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5yZW1vdmVTZXNzaW9uKFN0b3JhZ2VDb25zdGFudHMuYXBwbGljYXRpb25Db2RlKTtcclxuICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgIC8vIFNhdmUgdGhlIGFwcCBpbmZvIHRvIHNlc3Npb24gc3RvcmFnZVxyXG4gICAgICAgIHRoaXMuc2V0VG9TdG9yYWdlKFN0b3JhZ2VUeXBlLlNlc3Npb24sIFN0b3JhZ2VDb25zdGFudHMuYXBwSW5mbywgYXBwSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uIGZyb20gc2Vzc2lvbiBzdG9yYWdlLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gb2JqZWN0IG9yIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdC5cclxuICAgICAqL1xyXG4gICAgZ2V0RW52aXJvbm1lbnRJbmZvKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuU2Vzc2lvbiwgU3RvcmFnZUNvbnN0YW50cy5lbnZpcm9ubWVudEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2F2ZXMgdGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uIHRvIHNlc3Npb24gc3RvcmFnZS5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGVudkluZm8gLSBUaGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gdG8gc3RvcmUuXHJcbiAgICAgKi9cclxuICAgIHNldEVudmlyb25tZW50SW5mbyhlbnZJbmZvOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICAvLyBTYXZlIHRoZSBlbnZpcm9ubWVudCBpbmZvIHRvIHNlc3Npb24gc3RvcmFnZVxyXG4gICAgICAgIHRoaXMuc2V0VG9TdG9yYWdlKFN0b3JhZ2VUeXBlLlNlc3Npb24sIFN0b3JhZ2VDb25zdGFudHMuZW52aXJvbm1lbnRJbmZvLCBlbnZJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyB0aGUgdG9rZW4gaW5mb3JtYXRpb24gZnJvbSBzZXNzaW9uIHN0b3JhZ2UuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIFRoZSB0b2tlbiBpbmZvcm1hdGlvbiBvYmplY3Qgb3IgbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxyXG4gICAgICovXHJcbiAgICBnZXRUb2tlbkluZm8oKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRGcm9tU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwgU3RvcmFnZUNvbnN0YW50cy50b2tlbkluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2F2ZXMgdGhlIHRva2VuIGluZm9ybWF0aW9uIHRvIHNlc3Npb24gc3RvcmFnZS5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHRva2VuSW5mbyAtIFRoZSB0b2tlbiBpbmZvcm1hdGlvbiB0byBzdG9yZS5cclxuICAgICAqL1xyXG4gICAgc2V0VG9rZW5JbmZvKHRva2VuSW5mbzogYW55KTogdm9pZCB7XHJcbiAgICAgICAgLy8gdGVtcCBvbmNlIHJlbW92ZSBmcm9tIGRyb3Bkb3duLCB3ZSBjYW4gcmVtb3ZlIHRoaXNcclxuICAgICAgICAvLyBpZiAodG9rZW5JbmZvPy50b2tlbikge1xyXG4gICAgICAgIC8vICAgICB0aGlzLnNldFNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy50b2tlbiwgdG9rZW5JbmZvPy50b2tlbik7XHJcbiAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5yZW1vdmVTZXNzaW9uKFN0b3JhZ2VDb25zdGFudHMudG9rZW4pO1xyXG4gICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgLy8gU2F2ZSB0aGUgdG9rZW4gaW5mbyB0byBzZXNzaW9uIHN0b3JhZ2VcclxuICAgICAgICB0aGlzLnNldFRvU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwgU3RvcmFnZUNvbnN0YW50cy50b2tlbkluZm8sIHRva2VuSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHVzZXIgaW5mb3JtYXRpb24gZnJvbSBsb2NhbCBzdG9yYWdlLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgdXNlciBpbmZvcm1hdGlvbiBvYmplY3Qgb3IgbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxyXG4gICAgICovXHJcbiAgICBnZXRVc2VySW5mbygpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLkxvY2FsLCBTdG9yYWdlQ29uc3RhbnRzLnVzZXJJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIHVzZXIgaW5mb3JtYXRpb24gaW4gbG9jYWwgc3RvcmFnZS5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHVzZXJJbmZvIFRoZSB1c2VyIGluZm9ybWF0aW9uIHRvIHN0b3JlLlxyXG4gICAgICovXHJcbiAgICBzZXRVc2VySW5mbyh1c2VySW5mbzogYW55KTogdm9pZCB7XHJcbiAgICAgICAgLy8gU2F2ZSB0aGUgdXNlciBpbmZvIHRvIGxvY2FsIHN0b3JhZ2VcclxuICAgICAgICB0aGlzLnNldFRvU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwgU3RvcmFnZUNvbnN0YW50cy51c2VySW5mbywgdXNlckluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBhIGtleS12YWx1ZSBwYWlyIGluIGxvY2FsIHN0b3JhZ2UuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byBzdG9yZSB0aGUgdmFsdWUgdW5kZXIuXHJcbiAgICAgKiBAcGFyYW0gZGF0YSBUaGUgdmFsdWUgdG8gc3RvcmUuXHJcbiAgICAgKi9cclxuICAgIHNldExvY2FsKGtleTogc3RyaW5nLCBkYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNldFRvU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwga2V5LCBkYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHJpZXZlcyBhIHZhbHVlIGZyb20gbG9jYWwgc3RvcmFnZSBieSBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIHRvIHJldHJpZXZlLlxyXG4gICAgICogQHJldHVybnMgVGhlIHZhbHVlIHN0b3JlZCBpbiBsb2NhbCBzdG9yYWdlLCBvciBudWxsIGlmIGl0IGRvZXNuJ3QgZXhpc3QuXHJcbiAgICAgKi9cclxuICAgIGdldExvY2FsKGtleTogc3RyaW5nKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRGcm9tU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwga2V5KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBrZXktdmFsdWUgcGFpciBmcm9tIGxvY2FsIHN0b3JhZ2UuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIHRvIHJlbW92ZS5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlTG9jYWwoa2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICAvLyBSZW1vdmUgdGhlIGtleSBmcm9tIGxvY2FsIHN0b3JhZ2VcclxuICAgICAgICB0aGlzLnJlbW92ZUZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLkxvY2FsLCBrZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xlYXJzIGFsbCBsb2NhbCBzdG9yYWdlIGRhdGEuXHJcbiAgICAgKi9cclxuICAgIGNsZWFyTG9jYWwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jbGVhclN0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBhIGtleS12YWx1ZSBwYWlyIGluIHNlc3Npb24gc3RvcmFnZS5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHN0b3JlIHRoZSB2YWx1ZSB1bmRlci5cclxuICAgICAqIEBwYXJhbSBkYXRhIFRoZSB2YWx1ZSB0byBzdG9yZS5cclxuICAgICAqL1xyXG4gICAgc2V0U2Vzc2lvbihrZXk6IHN0cmluZywgZGF0YTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgLy8gU2F2ZSBkYXRhIHRvIHNlc3Npb24gc3RvcmFnZSB1bmRlciB0aGUgc3BlY2lmaWVkIGtleVxyXG4gICAgICAgIHRoaXMuc2V0VG9TdG9yYWdlKFN0b3JhZ2VUeXBlLlNlc3Npb24sIGtleSwgZGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgYSB2YWx1ZSBmcm9tIHNlc3Npb24gc3RvcmFnZSBieSBrZXkuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIHRvIHJldHJpZXZlLlxyXG4gICAgICogQHJldHVybnMgVGhlIHZhbHVlIHN0b3JlZCBpbiBzZXNzaW9uIHN0b3JhZ2UsIG9yIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdC5cclxuICAgICAqL1xyXG4gICAgZ2V0U2Vzc2lvbihrZXk6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIHZhbHVlIGZyb20gc2Vzc2lvbiBzdG9yYWdlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuU2Vzc2lvbiwga2V5KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgYSBrZXktdmFsdWUgcGFpciBmcm9tIHNlc3Npb24gc3RvcmFnZS5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxyXG4gICAgICovXHJcbiAgICByZW1vdmVTZXNzaW9uKGtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBrZXkgZnJvbSBzZXNzaW9uIHN0b3JhZ2VcclxuICAgICAgICB0aGlzLnJlbW92ZUZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLlNlc3Npb24sIGtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbGVhcnMgYWxsIHNlc3Npb24gc3RvcmFnZSBkYXRhLlxyXG4gICAgICovXHJcbiAgICBjbGVhclNlc3Npb24oKTogdm9pZCB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBrZXktdmFsdWUgcGFpcnMgZnJvbSBzZXNzaW9uIHN0b3JhZ2VcclxuICAgICAgICB0aGlzLmNsZWFyU3RvcmFnZShTdG9yYWdlVHlwZS5TZXNzaW9uKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyBhbGwgYXV0aGVudGljYXRpb24tcmVsYXRlZCBkYXRhIGZyb20gbG9jYWwgYW5kIHNlc3Npb24gc3RvcmFnZS5cclxuICAgICAqIFxyXG4gICAgICogVGhpcyBtZXRob2QgaXMgdHlwaWNhbGx5IHVzZWQgYWZ0ZXIgYSB1c2VyIGxvZ3Mgb3V0LlxyXG4gICAgICovXHJcbiAgICBjbGVhckF1dGgoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIHVzZXIgaW5mbyBmcm9tIGxvY2FsIHN0b3JhZ2VcclxuICAgICAgICB0aGlzLnJlbW92ZUZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLkxvY2FsLCBTdG9yYWdlQ29uc3RhbnRzLnVzZXJJbmZvKTtcclxuICAgICAgICAvLyBSZW1vdmUgdG9rZW4gaW5mbyBmcm9tIHNlc3Npb24gc3RvcmFnZVxyXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwsIFN0b3JhZ2VDb25zdGFudHMudG9rZW5JbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyaWMgZ2V0dGVyIG1ldGhvZCBmb3IgcmV0cmlldmluZyBkYXRhIGZyb20gZWl0aGVyIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZS5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHN0b3JhZ2UgVGhlIHR5cGUgb2Ygc3RvcmFnZSB0byByZXRyaWV2ZSBmcm9tLlxyXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZGF0YSB0byByZXRyaWV2ZS5cclxuICAgICAqIEByZXR1cm5zIFRoZSByZXRyaWV2ZWQgZGF0YSwgZGVzZXJpYWxpemVkIGZyb20gSlNPTiBpZiBpdCB3YXMgc3RvcmVkIGFzIGEgc3RyaW5nLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldEZyb21TdG9yYWdlKHN0b3JhZ2U6IFN0b3JhZ2VUeXBlLCBrZXk6IHN0cmluZyk6IGFueSB7XHJcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGRhdGEgZnJvbSB0aGUgc3BlY2lmaWVkIHN0b3JhZ2VcclxuICAgICAgICBjb25zdCBkYXRhID0gc3RvcmFnZSA9PT0gU3RvcmFnZVR5cGUuTG9jYWxcclxuICAgICAgICAgICAgPyB0aGlzLl9sb2NhbFN0b3JhZ2VTZXJ2aWNlLmdldExvY2FsU3RvcmFnZShrZXkpXHJcbiAgICAgICAgICAgIDogdGhpcy5fc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldFNlc3Npb25TdG9yYWdlKGtleSk7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gcGFyc2UgdGhlIGRhdGEgYXMgSlNPTlxyXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShkYXRhKSA6IGRhdGE7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBJZiB0aGUgZGF0YSBjYW5ub3QgYmUgcGFyc2VkLCByZXR1cm4gaXQgYXMgaXNcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBhIGtleS12YWx1ZSBwYWlyIGluIHRoZSBzcGVjaWZpZWQgc3RvcmFnZSB0eXBlLlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gc3RvcmFnZSBUaGUgdHlwZSBvZiBzdG9yYWdlIHRvIHVzZSAobG9jYWwgb3Igc2Vzc2lvbikuXHJcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgdW5kZXIgd2hpY2ggdGhlIGRhdGEgc2hvdWxkIGJlIHN0b3JlZC5cclxuICAgICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIHN0b3JlLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNldFRvU3RvcmFnZShzdG9yYWdlOiBTdG9yYWdlVHlwZSwga2V5OiBzdHJpbmcsIGRhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBzdG9yYWdlIHR5cGUgaXMgbG9jYWxcclxuICAgICAgICBpZiAoc3RvcmFnZSA9PT0gU3RvcmFnZVR5cGUuTG9jYWwpIHtcclxuICAgICAgICAgICAgLy8gU2V0IHRoZSBkYXRhIGluIGxvY2FsIHN0b3JhZ2VcclxuICAgICAgICAgICAgdGhpcy5fbG9jYWxTdG9yYWdlU2VydmljZS5zZXRMb2NhbFN0b3JhZ2Uoa2V5LCBkYXRhKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UsIHNldCB0aGUgZGF0YSBpbiBzZXNzaW9uIHN0b3JhZ2VcclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25TdG9yYWdlKGtleSwgZGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBhIGtleS12YWx1ZSBwYWlyIGZyb20gdGhlIHNwZWNpZmllZCBzdG9yYWdlIHR5cGUuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgbWV0aG9kIHJlbW92ZXMgdGhlIGdpdmVuIGtleSBmcm9tIGVpdGhlciBsb2NhbCBvciBzZXNzaW9uIHN0b3JhZ2UgXHJcbiAgICAgKiBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIHN0b3JhZ2UgdHlwZS5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHN0b3JhZ2UgVGhlIHR5cGUgb2Ygc3RvcmFnZSB0byByZW1vdmUgZnJvbSAobG9jYWwgb3Igc2Vzc2lvbikuXHJcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSB2YWx1ZSB0byByZW1vdmUuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVtb3ZlRnJvbVN0b3JhZ2Uoc3RvcmFnZTogU3RvcmFnZVR5cGUsIGtleTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLkxvY2FsKSB7XHJcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUga2V5IGZyb20gbG9jYWwgc3RvcmFnZVxyXG4gICAgICAgICAgICB0aGlzLl9sb2NhbFN0b3JhZ2VTZXJ2aWNlLnJlbW92ZUxvY2FsU3RvcmFnZShrZXkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUga2V5IGZyb20gc2Vzc2lvbiBzdG9yYWdlXHJcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb25TdG9yYWdlU2VydmljZS5yZW1vdmVTZXNzaW9uU3RvcmFnZShrZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsZWFycyBhbGwga2V5LXZhbHVlIHBhaXJzIGZyb20gdGhlIHNwZWNpZmllZCBzdG9yYWdlIHR5cGUuXHJcbiAgICAgKiBcclxuICAgICAqIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwga2V5LXZhbHVlIHBhaXJzIGZyb20gZWl0aGVyIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZVxyXG4gICAgICogYmFzZWQgb24gdGhlIHNwZWNpZmllZCBzdG9yYWdlIHR5cGUuXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBzdG9yYWdlIFRoZSB0eXBlIG9mIHN0b3JhZ2UgdG8gY2xlYXIgKGxvY2FsIG9yIHNlc3Npb24pLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNsZWFyU3RvcmFnZShzdG9yYWdlOiBTdG9yYWdlVHlwZSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChzdG9yYWdlID09PSBTdG9yYWdlVHlwZS5Mb2NhbCkge1xyXG4gICAgICAgICAgICAvLyBDbGVhciBsb2NhbCBzdG9yYWdlXHJcbiAgICAgICAgICAgIHRoaXMuX2xvY2FsU3RvcmFnZVNlcnZpY2UuY2xlYXJMb2NhbFN0b3JhZ2UoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBDbGVhciBzZXNzaW9uIHN0b3JhZ2VcclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmNsZWFyU2Vzc2lvblN0b3JhZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iXX0=
825
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhYi1zZGsvc3JjL2xpYi9zdG9yZS9zdG9yZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzlHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFLakQsTUFBTSxPQUFPLFlBQVk7SUFDSixvQkFBb0IsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDeEUsc0JBQXNCLEdBQTBCLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBRS9GOztPQUVHO0lBQ0gsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksUUFBUSxDQUFDLEtBQW9CO1FBQzdCLHFFQUFxRTtRQUNyRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDO1FBRXhDLDZCQUE2QjtRQUM3QixPQUFPLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUVuQixxREFBcUQ7UUFDckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLFVBQVU7UUFDViw4Q0FBOEM7UUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRWxDLDZEQUE2RDtRQUM3RCxPQUFPLE9BQU8sRUFBRSxnQkFBZ0IsSUFBSSxJQUFJLENBQUM7SUFDN0MsQ0FBQztJQUVE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TCxDQUFDO3dHQS80QlEsWUFBWTs0R0FBWixZQUFZLGNBRlQsTUFBTTs7NEZBRVQsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UsIFNlc3Npb25TdG9yYWdlU2VydmljZSwgU3RvcmFnZUNvbnN0YW50cyB9IGZyb20gJ0B0ZWNoZXh0ZW5zb3IvdGFiLWNvcmUtdXRpbGl0eSc7XG5pbXBvcnQgeyBTdG9yYWdlVHlwZSB9IGZyb20gJy4uL2VudW0vc3RvcmUuZW51bSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU3RvcmVTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9sb2NhbFN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlID0gaW5qZWN0KExvY2FsU3RvcmFnZVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3Nlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlID0gaW5qZWN0KFNlc3Npb25TdG9yYWdlU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHRlbmFudCBJRCBmcm9tIHRoZSBsb2NhbCBzdG9yYWdlLlxuICAgICAqL1xuICAgIGdldCB0ZW5hbnRJZCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JnSW5mbygpPy5JZCB8fCBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHRlbmFudCBJRCBpbiB0aGUgb3JnYW5pemF0aW9uIGluZm8uXG4gICAgICogXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHRlbmFudCBJRCB0byBzZXQuXG4gICAgICovXG4gICAgc2V0IHRlbmFudElkKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBleGlzdGluZyBvcmdhbml6YXRpb24gaW5mbyBvciBpbml0aWFsaXplIGEgbmV3IG9iamVjdFxuICAgICAgICBjb25zdCBvcmdJbmZvID0gdGhpcy5nZXRPcmdJbmZvKCkgfHwge307XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSB0ZW5hbnQgSUQgdmFsdWVcbiAgICAgICAgb3JnSW5mby5JZCA9IHZhbHVlO1xuXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgb3JnYW5pemF0aW9uIGluZm8gYmFjayB0byBzdG9yYWdlXG4gICAgICAgIHRoaXMuc2V0T3JnSW5mbyhvcmdJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHRlbmFudCBuYW1lIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvLlxuICAgICAqL1xuICAgIGdldCB0ZW5hbnROYW1lKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgb3JnYW5pemF0aW9uIGluZm8gZnJvbSBzdG9yYWdlXG4gICAgICAgIGNvbnN0IG9yZ0luZm8gPSB0aGlzLmdldE9yZ0luZm8oKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHRlbmFudCBuYW1lIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIHJldHVybiBudWxsXG4gICAgICAgIHJldHVybiBvcmdJbmZvPy5Pcmdhbml6YXRpb25OYW1lIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdGVuYW50IG5hbWUgaW4gdGhlIG9yZ2FuaXphdGlvbiBpbmZvLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB0ZW5hbnQgbmFtZSB0byBzZXQuXG4gICAgICovXG4gICAgc2V0IHRlbmFudE5hbWUodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIG9yZ2FuaXphdGlvbiBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XG4gICAgICAgIGNvbnN0IG9yZ0luZm8gPSB0aGlzLmdldE9yZ0luZm8oKSB8fCB7fTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIG9yZ2FuaXphdGlvbiBuYW1lIHZhbHVlXG4gICAgICAgIG9yZ0luZm8uT3JnYW5pemF0aW9uTmFtZSA9IHZhbHVlO1xuXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgb3JnYW5pemF0aW9uIGluZm8gYmFjayB0byBzdG9yYWdlXG4gICAgICAgIHRoaXMuc2V0T3JnSW5mbyhvcmdJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHN1YmRvbWFpbiBmcm9tIHRoZSBvcmdhbml6YXRpb24gaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgc3ViZG9tYWluIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGBudWxsYC5cbiAgICAgKi9cbiAgICBnZXQgc3ViZG9tYWluKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgb3JnYW5pemF0aW9uIGluZm8gZnJvbSBzdG9yYWdlXG4gICAgICAgIGNvbnN0IG9yZ0luZm8gPSB0aGlzLmdldE9yZ0luZm8oKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHN1YmRvbWFpbiBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSByZXR1cm4gbnVsbFxuICAgICAgICByZXR1cm4gb3JnSW5mbz8uU3ViZG9tYWluIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc3ViZG9tYWluIGluIHRoZSBvcmdhbml6YXRpb24gaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgc3ViZG9tYWluIHRvIHNldC5cbiAgICAgKi9cbiAgICBzZXQgc3ViZG9tYWluKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBleGlzdGluZyBvcmdhbml6YXRpb24gaW5mbyBvciBpbml0aWFsaXplIGEgbmV3IG9iamVjdFxuICAgICAgICBjb25zdCBvcmdJbmZvID0gdGhpcy5nZXRPcmdJbmZvKCkgfHwge307XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBzdWJkb21haW4gdmFsdWVcbiAgICAgICAgb3JnSW5mby5TdWJkb21haW4gPSB2YWx1ZTtcblxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIG9yZ2FuaXphdGlvbiBpbmZvIGJhY2sgdG8gc3RvcmFnZVxuICAgICAgICB0aGlzLnNldE9yZ0luZm8ob3JnSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBsb2NhbGUgc2V0dGluZ3MgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm8uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIGxvY2FsZSBzZXR0aW5ncyBpZiB0aGV5IGV4aXN0LCBvdGhlcndpc2UgYG51bGxgLlxuICAgICAqL1xuICAgIGdldCBvcmdMb2NhbGVTZXR0aW5ncygpOiBhbnkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgbG9jYWxlIHNldHRpbmdzIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvXG4gICAgICAgIGxldCBsb2NhbFNldHRpbmdzID0gdGhpcy5nZXRPcmdJbmZvKCk/LkxvY2FsZVNldHRpbmdzO1xuXG4gICAgICAgIC8vIElmIHRoZSBsb2NhbGUgc2V0dGluZ3MgYXJlIGEgc3RyaW5nLCBwYXJzZSB0aGVtIGFzIEpTT05cbiAgICAgICAgaWYgKHR5cGVvZiBsb2NhbFNldHRpbmdzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbG9jYWxTZXR0aW5ncyA9IEpTT04ucGFyc2UobG9jYWxTZXR0aW5ncyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gdGhlIGxvY2FsZSBzZXR0aW5nc1xuICAgICAgICByZXR1cm4gbG9jYWxTZXR0aW5ncztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBsb2NhbGUgc2V0dGluZ3MgaW4gdGhlIG9yZ2FuaXphdGlvbiBpbmZvLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBsb2NhbGUgc2V0dGluZ3MgdG8gc2V0LlxuICAgICAqL1xuICAgIHNldCBvcmdMb2NhbGVTZXR0aW5ncyh2YWx1ZTogYW55KSB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBleGlzdGluZyBvcmdhbml6YXRpb24gaW5mbyBvciBpbml0aWFsaXplIGEgbmV3IG9iamVjdFxuICAgICAgICBjb25zdCBvcmdJbmZvID0gdGhpcy5nZXRPcmdJbmZvKCkgfHwge307XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBsb2NhbGUgc2V0dGluZ3MgdmFsdWVcbiAgICAgICAgb3JnSW5mby5Mb2NhbGVTZXR0aW5ncyA9IHZhbHVlO1xuXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgb3JnYW5pemF0aW9uIGluZm8gYmFjayB0byBzdG9yYWdlXG4gICAgICAgIHRoaXMuc2V0T3JnSW5mbyhvcmdJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGFwcCBJRCBmcm9tIHRoZSBhcHAgaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgYXBwIElEIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGBudWxsYC5cbiAgICAgKi9cbiAgICBnZXQgYXBwSWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFwcEluZm8oKT8uSWQgfHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhcHAgSUQgaW4gdGhlIGFwcCBpbmZvLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBhcHAgSUQgdG8gc2V0LlxuICAgICAqL1xuICAgIHNldCBhcHBJZCh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3RpbmcgYXBwIGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcbiAgICAgICAgY29uc3QgYXBwSW5mbyA9IHRoaXMuZ2V0QXBwSW5mbygpIHx8IHt9O1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgYXBwIElEIHZhbHVlXG4gICAgICAgIGFwcEluZm8uSWQgPSB2YWx1ZTtcblxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIGFwcCBpbmZvIGJhY2sgdG8gc3RvcmFnZVxuICAgICAgICB0aGlzLnNldEFwcEluZm8oYXBwSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBhcHAgbmFtZSBmcm9tIHRoZSBhcHAgaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgYXBwIG5hbWUgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYG51bGxgLlxuICAgICAqL1xuICAgIGdldCBhcHBOYW1lKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSBhcHAgbmFtZSBmcm9tIHRoZSBhcHAgaW5mbywgb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICByZXR1cm4gdGhpcy5nZXRBcHBJbmZvKCk/LkFwcE5hbWUgfHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhcHAgbmFtZSBpbiB0aGUgYXBwIGluZm8uXG4gICAgICogXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGFwcCBuYW1lIHRvIHNldC5cbiAgICAgKi9cbiAgICBzZXQgYXBwTmFtZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3RpbmcgYXBwIGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcbiAgICAgICAgY29uc3QgYXBwSW5mbyA9IHRoaXMuZ2V0QXBwSW5mbygpIHx8IHt9O1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgYXBwIG5hbWUgdmFsdWVcbiAgICAgICAgYXBwSW5mby5BcHBOYW1lID0gdmFsdWU7XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCBhcHAgaW5mbyBiYWNrIHRvIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRBcHBJbmZvKGFwcEluZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgZW52aXJvbm1lbnQgSUQgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgZW52aXJvbm1lbnQgSUQgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYG51bGxgLlxuICAgICAqL1xuICAgIGdldCBlbnZpcm9ubWVudElkKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSBlbnZpcm9ubWVudCBJRCBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvLCBvciByZXR1cm4gbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIHJldHVybiB0aGlzLmdldEVudmlyb25tZW50SW5mbygpPy5JZCB8fCBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGVudmlyb25tZW50IElEIGluIHRoZSBlbnZpcm9ubWVudCBpbmZvLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBlbnZpcm9ubWVudCBJRCB0byBzZXQuXG4gICAgICovXG4gICAgc2V0IGVudmlyb25tZW50SWQodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIGVudmlyb25tZW50IGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcbiAgICAgICAgY29uc3QgZW52aXJvbm1lbnRJbmZvID0gdGhpcy5nZXRFbnZpcm9ubWVudEluZm8oKSB8fCB7fTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIGVudmlyb25tZW50IElEIHZhbHVlXG4gICAgICAgIGVudmlyb25tZW50SW5mby5JZCA9IHZhbHVlO1xuXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgZW52aXJvbm1lbnQgaW5mbyBiYWNrIHRvIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRFbnZpcm9ubWVudEluZm8oZW52aXJvbm1lbnRJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGVudmlyb25tZW50IG5hbWUgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgZW52aXJvbm1lbnQgbmFtZSBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSBgbnVsbGAuXG4gICAgICovXG4gICAgZ2V0IGVudmlyb25tZW50TmFtZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgLy8gUmV0cmlldmUgYW5kIHJldHVybiB0aGUgZW52aXJvbm1lbnQgbmFtZSBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvLCBvciByZXR1cm4gbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIHJldHVybiB0aGlzLmdldEVudmlyb25tZW50SW5mbygpPy5OYW1lIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZW52aXJvbm1lbnQgbmFtZSBpbiB0aGUgZW52aXJvbm1lbnQgaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgZW52aXJvbm1lbnQgbmFtZSB0byBzZXQuXG4gICAgICovXG4gICAgc2V0IGVudmlyb25tZW50TmFtZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3RpbmcgZW52aXJvbm1lbnQgaW5mbyBvciBpbml0aWFsaXplIGEgbmV3IG9iamVjdFxuICAgICAgICBjb25zdCBlbnZpcm9ubWVudEluZm8gPSB0aGlzLmdldEVudmlyb25tZW50SW5mbygpIHx8IHt9O1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgZW52aXJvbm1lbnQgbmFtZSB2YWx1ZVxuICAgICAgICBlbnZpcm9ubWVudEluZm8uTmFtZSA9IHZhbHVlO1xuXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgZW52aXJvbm1lbnQgaW5mbyBiYWNrIHRvIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRFbnZpcm9ubWVudEluZm8oZW52aXJvbm1lbnRJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm8uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIHRva2VuIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlIGBudWxsYC5cbiAgICAgKi9cbiAgICBnZXQgdG9rZW4oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIC8vIFJldHJpZXZlIGFuZCByZXR1cm4gdGhlIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm8sIG9yIHJldHVybiBudWxsIGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5JbmZvKCk/LnRva2VuIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdG9rZW4gaW4gdGhlIHRva2VuIGluZm8uXG4gICAgICogXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHRva2VuIHRvIHNldC5cbiAgICAgKi9cbiAgICBzZXQgdG9rZW4odmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgLy8gUmV0cmlldmUgdGhlIGV4aXN0aW5nIHRva2VuIGluZm8gb3IgaW5pdGlhbGl6ZSBhIG5ldyBvYmplY3RcbiAgICAgICAgY29uc3QgdG9rZW5JbmZvID0gdGhpcy5nZXRUb2tlbkluZm8oKSB8fCB7fTtcblxuICAgICAgICAvLyBVcGRhdGUgdGhlIHRva2VuIHZhbHVlXG4gICAgICAgIHRva2VuSW5mby50b2tlbiA9IHZhbHVlO1xuXG4gICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgdG9rZW4gaW5mbyBiYWNrIHRvIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRUb2tlbkluZm8odG9rZW5JbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHJlZnJlc2ggdG9rZW4gZnJvbSB0aGUgdG9rZW4gaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgcmVmcmVzaCB0b2tlbiBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSBgbnVsbGAuXG4gICAgICovXG4gICAgZ2V0IHJlZnJlc2hUb2tlbigpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgLy8gUmV0cmlldmUgYW5kIHJldHVybiB0aGUgcmVmcmVzaCB0b2tlbiBmcm9tIHRoZSB0b2tlbiBpbmZvLCBvciByZXR1cm4gbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuSW5mbygpPy5yZWZyZXNoVG9rZW4gfHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSByZWZyZXNoIHRva2VuIGluIHRoZSB0b2tlbiBpbmZvLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSByZWZyZXNoIHRva2VuIHRvIHNldC5cbiAgICAgKi9cbiAgICBzZXQgcmVmcmVzaFRva2VuKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBleGlzdGluZyB0b2tlbiBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XG4gICAgICAgIGNvbnN0IHRva2VuSW5mbyA9IHRoaXMuZ2V0VG9rZW5JbmZvKCkgfHwge307XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSByZWZyZXNoIHRva2VuIHZhbHVlXG4gICAgICAgIHRva2VuSW5mby5yZWZyZXNoVG9rZW4gPSB2YWx1ZTtcblxuICAgICAgICAvLyBTYXZlIHRoZSB1cGRhdGVkIHRva2VuIGluZm8gYmFjayB0byBzdG9yYWdlXG4gICAgICAgIHRoaXMuc2V0VG9rZW5JbmZvKHRva2VuSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSByZWZyZXNoIHRva2VuIGV4cGlyeSB0aW1lIGZyb20gdGhlIHRva2VuIGluZm8uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIHJlZnJlc2ggdG9rZW4gZXhwaXJ5IHRpbWUgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYG51bGxgLlxuICAgICAqL1xuICAgIGdldCByZWZyZXNoVG9rZW5FeHBpcnkoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIC8vIFJldHJpZXZlIGFuZCByZXR1cm4gdGhlIHJlZnJlc2ggdG9rZW4gZXhwaXJ5IHRpbWUgZnJvbSB0aGUgdG9rZW4gaW5mbyxcbiAgICAgICAgLy8gb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUb2tlbkluZm8oKT8ucmVmcmVzaFRva2VuRXhwaXJ5IHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgcmVmcmVzaCB0b2tlbiBleHBpcnkgdGltZSBpbiB0aGUgdG9rZW4gaW5mby5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgcmVmcmVzaCB0b2tlbiBleHBpcnkgdGltZSB0byBzZXQuXG4gICAgICovXG4gICAgc2V0IHJlZnJlc2hUb2tlbkV4cGlyeSh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZXhpc3RpbmcgdG9rZW4gaW5mbyBvciBpbml0aWFsaXplIGEgbmV3IG9iamVjdFxuICAgICAgICBjb25zdCB0b2tlbkluZm8gPSB0aGlzLmdldFRva2VuSW5mbygpIHx8IHt9O1xuXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgcmVmcmVzaCB0b2tlbiBleHBpcnkgdGltZVxuICAgICAgICB0b2tlbkluZm8ucmVmcmVzaFRva2VuRXhwaXJ5ID0gdmFsdWU7XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCB0b2tlbiBpbmZvIGJhY2sgdG8gc3RvcmFnZVxuICAgICAgICB0aGlzLnNldFRva2VuSW5mbyh0b2tlbkluZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgc3RhdGljIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm8uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIHN0YXRpYyB0b2tlbiBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSBgbnVsbGAuXG4gICAgICovXG4gICAgZ2V0IHN0YXRpY1Rva2VuKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSBzdGF0aWMgdG9rZW4gZnJvbSB0aGUgdG9rZW4gaW5mbyxcbiAgICAgICAgLy8gb3IgcmV0dXJuIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUb2tlbkluZm8oKT8uc3RhdGljVG9rZW4gfHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdGF0aWMgdG9rZW4gaW4gdGhlIHRva2VuIGluZm8uXG4gICAgICogXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHN0YXRpYyB0b2tlbiB0byBzZXQuXG4gICAgICovXG4gICAgc2V0IHN0YXRpY1Rva2VuKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgICAgIC8vIFJldHJpZXZlIHRoZSBleGlzdGluZyB0b2tlbiBpbmZvIG9yIGluaXRpYWxpemUgYSBuZXcgb2JqZWN0XG4gICAgICAgIGNvbnN0IHRva2VuSW5mbyA9IHRoaXMuZ2V0VG9rZW5JbmZvKCkgfHwge307XG5cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBzdGF0aWMgdG9rZW4gdmFsdWVcbiAgICAgICAgdG9rZW5JbmZvLnN0YXRpY1Rva2VuID0gdmFsdWU7XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCB0b2tlbiBpbmZvIGJhY2sgdG8gc3RvcmFnZVxuICAgICAgICB0aGlzLnNldFRva2VuSW5mbyh0b2tlbkluZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgdXNlciBJRCBmcm9tIHRoZSB1c2VyIGluZm8uXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIHVzZXIgSUQgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UgYG51bGxgLlxuICAgICAqL1xuICAgIGdldCB1c2VySWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIC8vIFJldHJpZXZlIGFuZCByZXR1cm4gdGhlIHVzZXIgSUQgZnJvbSB0aGUgdXNlciBpbmZvLCBvciByZXR1cm4gbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIHJldHVybiB0aGlzLmdldFVzZXJJbmZvKCk/LnVzZXI/LklkIHx8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSB1c2VyJ3Mgcm9sZXMgZnJvbSB0aGUgdXNlciBpbmZvcm1hdGlvbi5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiB1c2VyIHJvbGVzIGlmIHRoZXkgZXhpc3QsIG90aGVyd2lzZSBgbnVsbGAuXG4gICAgICovXG4gICAgZ2V0IHVzZXJSb2xlcygpOiBhbnlbXSB8IG51bGwge1xuICAgICAgICAvLyBSZXRyaWV2ZSBhbmQgcmV0dXJuIHRoZSB1c2VyIHJvbGVzIGZyb20gdGhlIHVzZXIgaW5mbywgb3IgcmV0dXJuIG51bGwgaWYgdGhleSBkb24ndCBleGlzdFxuICAgICAgICByZXR1cm4gdGhpcy5nZXRVc2VySW5mbygpPy51c2VyPy5Sb2xlcyB8fCBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgdXNlcidzIHRlYW1zIGZyb20gdGhlIHVzZXIgaW5mb3JtYXRpb24uXG4gICAgICogXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgdXNlciB0ZWFtcyBpZiB0aGV5IGV4aXN0LCBvdGhlcndpc2UgYG51bGxgLlxuICAgICAqL1xuICAgIGdldCB1c2VyVGVhbXMoKTogYW55W10gfCBudWxsIHtcbiAgICAgICAgLy8gUmV0cmlldmUgYW5kIHJldHVybiB0aGUgdXNlciB0ZWFtcyBmcm9tIHRoZSB1c2VyIGluZm8sIG9yIHJldHVybiBudWxsIGlmIHRoZXkgZG9uJ3QgZXhpc3RcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VXNlckluZm8oKT8udXNlcj8uVGVhbXMgfHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSB0ZW5hbnQgSUQgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uLlxuICAgICAqL1xuICAgIHJlbW92ZVRlbmFudElkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZUZyb21PcmdJbmZvKCdJZCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIHRlbmFudCBuYW1lIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICByZW1vdmVUZW5hbnROYW1lKCk6IHZvaWQge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIHRlbmFudCBuYW1lIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvblxuICAgICAgICB0aGlzLnJlbW92ZUZyb21PcmdJbmZvKCdPcmdhbml6YXRpb25OYW1lJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgc3ViZG9tYWluIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbi5cbiAgICAgKiBcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHN1YmRvbWFpbiBwcm9wZXJ0eSBmcm9tIHRoZSBvcmdhbml6YXRpb24gaW5mb3JtYXRpb25cbiAgICAgKiBzdG9yZWQgaW4gbG9jYWwgc3RvcmFnZS5cbiAgICAgKi9cbiAgICByZW1vdmVTdWJkb21haW4oKTogdm9pZCB7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgc3ViZG9tYWluIGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvblxuICAgICAgICB0aGlzLnJlbW92ZUZyb21PcmdJbmZvKCdTdWJkb21haW4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBhcHAgSUQgZnJvbSB0aGUgYXBwIGluZm9ybWF0aW9uLlxuICAgICAqIFxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgYXBwIElEIHByb3BlcnR5IGZyb20gdGhlIGFwcCBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gbG9jYWwgc3RvcmFnZS5cbiAgICAgKi9cbiAgICByZW1vdmVBcHBJZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tQXBwSW5mbygnSWQnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBhcHAgbmFtZSBmcm9tIHRoZSBhcHAgaW5mb3JtYXRpb24uXG4gICAgICogXG4gICAgICogVGhpcyByZW1vdmVzIHRoZSBhcHAgbmFtZSBwcm9wZXJ0eSBmcm9tIHRoZSBhcHAgaW5mb3JtYXRpb24gc3RvcmVkIGluIGxvY2FsIHN0b3JhZ2UuXG4gICAgICovXG4gICAgcmVtb3ZlQXBwTmFtZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tQXBwSW5mbygnQXBwTmFtZScpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIGVudmlyb25tZW50IElEIGZyb20gdGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uLlxuICAgICAqIFxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgSUQgcHJvcGVydHkgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb25cbiAgICAgKiBzdG9yZWQgaW4gbG9jYWwgc3RvcmFnZS5cbiAgICAgKi9cbiAgICByZW1vdmVFbnZpcm9ubWVudElkKCk6IHZvaWQge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIGVudmlyb25tZW50IElEIGZyb20gdGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbUVudmlyb25tZW50SW5mbygnSWQnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBlbnZpcm9ubWVudCBuYW1lIGZyb20gdGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uLlxuICAgICAqIFxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgTmFtZSBwcm9wZXJ0eSBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvblxuICAgICAqIHN0b3JlZCBpbiBsb2NhbCBzdG9yYWdlLlxuICAgICAqL1xuICAgIHJlbW92ZUVudmlyb25tZW50TmFtZSgpOiB2b2lkIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBlbnZpcm9ubWVudCBuYW1lIGZyb20gdGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbUVudmlyb25tZW50SW5mbygnTmFtZScpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIHRva2VuIGZyb20gdGhlIHRva2VuIGluZm8uXG4gICAgICogXG4gICAgICogVGhpcyByZW1vdmVzIHRoZSB0b2tlbiBwcm9wZXJ0eSBmcm9tIHRoZSB0b2tlbiBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gc2Vzc2lvblxuICAgICAqIHN0b3JhZ2UuXG4gICAgICovXG4gICAgcmVtb3ZlVG9rZW4oKTogdm9pZCB7XG4gICAgICAgIC8vIFJlbW92ZSB0aGUgdG9rZW4gZnJvbSB0aGUgdG9rZW4gaW5mb1xuICAgICAgICB0aGlzLnJlbW92ZUZyb21Ub2tlbkluZm8oJ3Rva2VuJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgcmVmcmVzaCB0b2tlbiBmcm9tIHRoZSB0b2tlbiBpbmZvcm1hdGlvbi5cbiAgICAgKiBcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHJlZnJlc2ggdG9rZW4gcHJvcGVydHkgZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24gc3RvcmVkIGluIHNlc3Npb25cbiAgICAgKiBzdG9yYWdlLlxuICAgICAqL1xuICAgIHJlbW92ZVJlZnJlc2hUb2tlbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tVG9rZW5JbmZvKCdyZWZyZXNoVG9rZW4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSByZWZyZXNoIHRva2VuIGV4cGlyeSB0aW1lIGZyb20gdGhlIHRva2VuIGluZm9ybWF0aW9uLlxuICAgICAqIFxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgcmVmcmVzaCB0b2tlbiBleHBpcnkgdGltZSBwcm9wZXJ0eSBmcm9tIHRoZSB0b2tlbiBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gc2Vzc2lvblxuICAgICAqIHN0b3JhZ2UuXG4gICAgICovXG4gICAgcmVtb3ZlUmVmcmVzaFRva2VuRXhwaXJ5KCk6IHZvaWQge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIHJlZnJlc2ggdG9rZW4gZXhwaXJ5IGZyb20gdGhlIHRva2VuIGluZm9cbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tVG9rZW5JbmZvKCdyZWZyZXNoVG9rZW5FeHBpcnknKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBzdGF0aWMgdG9rZW4gZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24uXG4gICAgICogXG4gICAgICogVGhpcyByZW1vdmVzIHRoZSBzdGF0aWMgdG9rZW4gcHJvcGVydHkgZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb24gc3RvcmVkIGluIHNlc3Npb25cbiAgICAgKiBzdG9yYWdlLlxuICAgICAqL1xuICAgIHJlbW92ZVN0YXRpY1Rva2VuKCk6IHZvaWQge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIHN0YXRpYyB0b2tlbiBmcm9tIHRoZSB0b2tlbiBpbmZvXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVRva2VuSW5mbygnc3RhdGljVG9rZW4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQga2V5IGZyb20gdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbi5cbiAgICAgKiBcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uIHN0b3JlZCBpbiBsb2NhbCBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB0byByZW1vdmUgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVtb3ZlRnJvbU9yZ0luZm8oa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb3JnSW5mbyA9IHRoaXMuZ2V0T3JnSW5mbygpO1xuICAgICAgICBpZiAob3JnSW5mbykge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBrZXkgZnJvbSB0aGUgb3JnYW5pemF0aW9uIGluZm9ybWF0aW9uXG4gICAgICAgICAgICBkZWxldGUgb3JnSW5mb1trZXldO1xuICAgICAgICAgICAgLy8gU2F2ZSB0aGUgdXBkYXRlZCBvcmdhbml6YXRpb24gaW5mb3JtYXRpb24gYmFjayB0byBsb2NhbCBzdG9yYWdlXG4gICAgICAgICAgICB0aGlzLnNldE9yZ0luZm8ob3JnSW5mbyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQga2V5IGZyb20gdGhlIGFwcCBpbmZvcm1hdGlvbi5cbiAgICAgKiBcbiAgICAgKiBUaGlzIHJlbW92ZXMgdGhlIHNwZWNpZmllZCBrZXkgZnJvbSB0aGUgYXBwIGluZm9ybWF0aW9uIHN0b3JlZCBpbiBzZXNzaW9uXG4gICAgICogc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgdG8gcmVtb3ZlIGZyb20gdGhlIGFwcCBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlbW92ZUZyb21BcHBJbmZvKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFwcEluZm8gPSB0aGlzLmdldEFwcEluZm8oKTtcbiAgICAgICAgaWYgKGFwcEluZm8pIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUga2V5IGZyb20gdGhlIGFwcCBpbmZvcm1hdGlvblxuICAgICAgICAgICAgZGVsZXRlIGFwcEluZm9ba2V5XTtcbiAgICAgICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgYXBwIGluZm9ybWF0aW9uIGJhY2sgdG8gc2Vzc2lvbiBzdG9yYWdlXG4gICAgICAgICAgICB0aGlzLnNldEFwcEluZm8oYXBwSW5mbyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQga2V5IGZyb20gdGhlIGVudmlyb25tZW50IGluZm9ybWF0aW9uLlxuICAgICAqIFxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGtleSBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gc2Vzc2lvblxuICAgICAqIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHJlbW92ZSBmcm9tIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlbW92ZUZyb21FbnZpcm9ubWVudEluZm8oa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZW52aXJvbm1lbnRJbmZvID0gdGhpcy5nZXRFbnZpcm9ubWVudEluZm8oKTtcbiAgICAgICAgaWYgKGVudmlyb25tZW50SW5mbykge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBrZXkgZnJvbSB0aGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb25cbiAgICAgICAgICAgIGRlbGV0ZSBlbnZpcm9ubWVudEluZm9ba2V5XTtcbiAgICAgICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gYmFjayB0byBzZXNzaW9uIHN0b3JhZ2VcbiAgICAgICAgICAgIHRoaXMuc2V0RW52aXJvbm1lbnRJbmZvKGVudmlyb25tZW50SW5mbyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBzcGVjaWZpZWQga2V5IGZyb20gdGhlIHRva2VuIGluZm9ybWF0aW9uLlxuICAgICAqIFxuICAgICAqIFRoaXMgcmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGtleSBmcm9tIHRoZSB0b2tlbiBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gc2Vzc2lvblxuICAgICAqIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IHRvIHJlbW92ZSBmcm9tIHRoZSB0b2tlbiBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlbW92ZUZyb21Ub2tlbkluZm8oa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdG9rZW5JbmZvID0gdGhpcy5nZXRUb2tlbkluZm8oKTtcbiAgICAgICAgaWYgKHRva2VuSW5mbykge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBrZXkgZnJvbSB0aGUgdG9rZW4gaW5mb3JtYXRpb25cbiAgICAgICAgICAgIGRlbGV0ZSB0b2tlbkluZm9ba2V5XTtcbiAgICAgICAgICAgIC8vIFNhdmUgdGhlIHVwZGF0ZWQgdG9rZW4gaW5mb3JtYXRpb24gYmFjayB0byBzZXNzaW9uIHN0b3JhZ2VcbiAgICAgICAgICAgIHRoaXMuc2V0VG9rZW5JbmZvKHRva2VuSW5mbyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbiBmcm9tIGxvY2FsIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHJldHVybnMgVGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbiBvYmplY3Qgb3IgbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAqL1xuICAgIGdldE9yZ0luZm8oKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwsIFN0b3JhZ2VDb25zdGFudHMub3JnSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2F2ZXMgdGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbiB0byBsb2NhbCBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBvcmdJbmZvIC0gVGhlIG9yZ2FuaXphdGlvbiBpbmZvcm1hdGlvbiB0byBzdG9yZS5cbiAgICAgKi9cbiAgICBzZXRPcmdJbmZvKG9yZ0luZm86IGFueSk6IHZvaWQge1xuICAgICAgICAvLyB0ZW1wIG9uY2UgcmVtb3ZlIGZyb20gZHJvcGRvd24sIHdlIGNhbiByZW1vdmUgdGhpc1xuICAgICAgICAvLyBpZiAob3JnSW5mby5JZCkge1xuICAgICAgICAvLyAgICAgdGhpcy5zZXRTZXNzaW9uKFN0b3JhZ2VDb25zdGFudHMuVGVuYW50SWQsIG9yZ0luZm8uSWQpO1xuICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgdGhpcy5yZW1vdmVTZXNzaW9uKFN0b3JhZ2VDb25zdGFudHMuVGVuYW50SWQpO1xuICAgICAgICAvLyB9XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgb3JnYW5pemF0aW9uIGluZm8gdG8gbG9jYWwgc3RvcmFnZVxuICAgICAgICB0aGlzLnNldFRvU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwgU3RvcmFnZUNvbnN0YW50cy5vcmdJbmZvLCBvcmdJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGFwcCBpbmZvcm1hdGlvbiBmcm9tIHNlc3Npb24gc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgYXBwIGluZm9ybWF0aW9uIG9iamVjdCBvciBudWxsIGlmIGl0IGRvZXNuJ3QgZXhpc3QuXG4gICAgICovXG4gICAgZ2V0QXBwSW5mbygpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGcm9tU3RvcmFnZShTdG9yYWdlVHlwZS5TZXNzaW9uLCBTdG9yYWdlQ29uc3RhbnRzLmFwcEluZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNhdmVzIHRoZSBhcHAgaW5mb3JtYXRpb24gdG8gc2Vzc2lvbiBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBhcHBJbmZvIC0gVGhlIGFwcCBpbmZvcm1hdGlvbiB0byBzdG9yZS5cbiAgICAgKi9cbiAgICBzZXRBcHBJbmZvKGFwcEluZm86IGFueSk6IHZvaWQge1xuICAgICAgICAvLyB0ZW1wIG9uY2UgcmVtb3ZlIGZyb20gZHJvcGRvd24sIHdlIGNhbiByZW1vdmUgdGhpc1xuICAgICAgICAvLyBpZiAoYXBwSW5mbz8uSWQpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuc2V0U2Vzc2lvbihTdG9yYWdlQ29uc3RhbnRzLkFwcElkLCBhcHBJbmZvLklkKTtcbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgLy8gICAgIHRoaXMucmVtb3ZlU2Vzc2lvbihTdG9yYWdlQ29uc3RhbnRzLkFwcElkKTtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIC8vIGlmIChhcHBJbmZvPy5BcHBOYW1lKSB7XG4gICAgICAgIC8vICAgICB0aGlzLnNldFNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy5hcHBsaWNhdGlvbkNvZGUsIGFwcEluZm8uQXBwTmFtZSk7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICB0aGlzLnJlbW92ZVNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy5hcHBsaWNhdGlvbkNvZGUpO1xuICAgICAgICAvLyB9XG5cbiAgICAgICAgLy8gU2F2ZSB0aGUgYXBwIGluZm8gdG8gc2Vzc2lvbiBzdG9yYWdlXG4gICAgICAgIHRoaXMuc2V0VG9TdG9yYWdlKFN0b3JhZ2VUeXBlLlNlc3Npb24sIFN0b3JhZ2VDb25zdGFudHMuYXBwSW5mbywgYXBwSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbiBmcm9tIHNlc3Npb24gc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gb2JqZWN0IG9yIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgICAgKi9cbiAgICBnZXRFbnZpcm9ubWVudEluZm8oKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuU2Vzc2lvbiwgU3RvcmFnZUNvbnN0YW50cy5lbnZpcm9ubWVudEluZm8pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNhdmVzIHRoZSBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbiB0byBzZXNzaW9uIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHBhcmFtIGVudkluZm8gLSBUaGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gdG8gc3RvcmUuXG4gICAgICovXG4gICAgc2V0RW52aXJvbm1lbnRJbmZvKGVudkluZm86IGFueSk6IHZvaWQge1xuICAgICAgICAvLyBTYXZlIHRoZSBlbnZpcm9ubWVudCBpbmZvIHRvIHNlc3Npb24gc3RvcmFnZVxuICAgICAgICB0aGlzLnNldFRvU3RvcmFnZShTdG9yYWdlVHlwZS5TZXNzaW9uLCBTdG9yYWdlQ29uc3RhbnRzLmVudmlyb25tZW50SW5mbywgZW52SW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSB0b2tlbiBpbmZvcm1hdGlvbiBmcm9tIHNlc3Npb24gc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgdG9rZW4gaW5mb3JtYXRpb24gb2JqZWN0IG9yIG51bGwgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgICAgKi9cbiAgICBnZXRUb2tlbkluZm8oKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwsIFN0b3JhZ2VDb25zdGFudHMudG9rZW5JbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTYXZlcyB0aGUgdG9rZW4gaW5mb3JtYXRpb24gdG8gc2Vzc2lvbiBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSB0b2tlbkluZm8gLSBUaGUgdG9rZW4gaW5mb3JtYXRpb24gdG8gc3RvcmUuXG4gICAgICovXG4gICAgc2V0VG9rZW5JbmZvKHRva2VuSW5mbzogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIHRlbXAgb25jZSByZW1vdmUgZnJvbSBkcm9wZG93biwgd2UgY2FuIHJlbW92ZSB0aGlzXG4gICAgICAgIC8vIGlmICh0b2tlbkluZm8/LnRva2VuKSB7XG4gICAgICAgIC8vICAgICB0aGlzLnNldFNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy50b2tlbiwgdG9rZW5JbmZvPy50b2tlbik7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICB0aGlzLnJlbW92ZVNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy50b2tlbik7XG4gICAgICAgIC8vIH1cblxuICAgICAgICAvLyBTYXZlIHRoZSB0b2tlbiBpbmZvIHRvIHNlc3Npb24gc3RvcmFnZVxuICAgICAgICB0aGlzLnNldFRvU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwgU3RvcmFnZUNvbnN0YW50cy50b2tlbkluZm8sIHRva2VuSW5mbyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSB1c2VyIGluZm9ybWF0aW9uIGZyb20gbG9jYWwgc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgdXNlciBpbmZvcm1hdGlvbiBvYmplY3Qgb3IgbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAqL1xuICAgIGdldFVzZXJJbmZvKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZyb21TdG9yYWdlKFN0b3JhZ2VUeXBlLkxvY2FsLCBTdG9yYWdlQ29uc3RhbnRzLnVzZXJJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB1c2VyIGluZm9ybWF0aW9uIGluIGxvY2FsIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHBhcmFtIHVzZXJJbmZvIFRoZSB1c2VyIGluZm9ybWF0aW9uIHRvIHN0b3JlLlxuICAgICAqL1xuICAgIHNldFVzZXJJbmZvKHVzZXJJbmZvOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gU2F2ZSB0aGUgdXNlciBpbmZvIHRvIGxvY2FsIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5zZXRUb1N0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwsIFN0b3JhZ2VDb25zdGFudHMudXNlckluZm8sIHVzZXJJbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEga2V5LXZhbHVlIHBhaXIgaW4gbG9jYWwgc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgdG8gc3RvcmUgdGhlIHZhbHVlIHVuZGVyLlxuICAgICAqIEBwYXJhbSBkYXRhIFRoZSB2YWx1ZSB0byBzdG9yZS5cbiAgICAgKi9cbiAgICBzZXRMb2NhbChrZXk6IHN0cmluZywgZGF0YTogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0VG9TdG9yYWdlKFN0b3JhZ2VUeXBlLkxvY2FsLCBrZXksIGRhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBhIHZhbHVlIGZyb20gbG9jYWwgc3RvcmFnZSBieSBrZXkuXG4gICAgICogXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsdWUgdG8gcmV0cmlldmUuXG4gICAgICogQHJldHVybnMgVGhlIHZhbHVlIHN0b3JlZCBpbiBsb2NhbCBzdG9yYWdlLCBvciBudWxsIGlmIGl0IGRvZXNuJ3QgZXhpc3QuXG4gICAgICovXG4gICAgZ2V0TG9jYWwoa2V5OiBzdHJpbmcpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGcm9tU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwga2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEga2V5LXZhbHVlIHBhaXIgZnJvbSBsb2NhbCBzdG9yYWdlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAgICAgKi9cbiAgICByZW1vdmVMb2NhbChrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICAvLyBSZW1vdmUgdGhlIGtleSBmcm9tIGxvY2FsIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwga2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgYWxsIGxvY2FsIHN0b3JhZ2UgZGF0YS5cbiAgICAgKi9cbiAgICBjbGVhckxvY2FsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFyU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIGtleS12YWx1ZSBwYWlyIGluIHNlc3Npb24gc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgdG8gc3RvcmUgdGhlIHZhbHVlIHVuZGVyLlxuICAgICAqIEBwYXJhbSBkYXRhIFRoZSB2YWx1ZSB0byBzdG9yZS5cbiAgICAgKi9cbiAgICBzZXRTZXNzaW9uKGtleTogc3RyaW5nLCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgLy8gU2F2ZSBkYXRhIHRvIHNlc3Npb24gc3RvcmFnZSB1bmRlciB0aGUgc3BlY2lmaWVkIGtleVxuICAgICAgICB0aGlzLnNldFRvU3RvcmFnZShTdG9yYWdlVHlwZS5TZXNzaW9uLCBrZXksIGRhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBhIHZhbHVlIGZyb20gc2Vzc2lvbiBzdG9yYWdlIGJ5IGtleS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoZSB2YWx1ZSB0byByZXRyaWV2ZS5cbiAgICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgc3RvcmVkIGluIHNlc3Npb24gc3RvcmFnZSwgb3IgbnVsbCBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAqL1xuICAgIGdldFNlc3Npb24oa2V5OiBzdHJpbmcpOiBhbnkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgdmFsdWUgZnJvbSBzZXNzaW9uIHN0b3JhZ2VcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuU2Vzc2lvbiwga2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEga2V5LXZhbHVlIHBhaXIgZnJvbSBzZXNzaW9uIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHBhcmFtIGtleSBUaGUga2V5IGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICAgICAqL1xuICAgIHJlbW92ZVNlc3Npb24oa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBrZXkgZnJvbSBzZXNzaW9uIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tU3RvcmFnZShTdG9yYWdlVHlwZS5TZXNzaW9uLCBrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyBhbGwgc2Vzc2lvbiBzdG9yYWdlIGRhdGEuXG4gICAgICovXG4gICAgY2xlYXJTZXNzaW9uKCk6IHZvaWQge1xuICAgICAgICAvLyBSZW1vdmUgYWxsIGtleS12YWx1ZSBwYWlycyBmcm9tIHNlc3Npb24gc3RvcmFnZVxuICAgICAgICB0aGlzLmNsZWFyU3RvcmFnZShTdG9yYWdlVHlwZS5TZXNzaW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgYWxsIGF1dGhlbnRpY2F0aW9uLXJlbGF0ZWQgZGF0YSBmcm9tIGxvY2FsIGFuZCBzZXNzaW9uIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogVGhpcyBtZXRob2QgaXMgdHlwaWNhbGx5IHVzZWQgYWZ0ZXIgYSB1c2VyIGxvZ3Mgb3V0LlxuICAgICAqL1xuICAgIGNsZWFyQXV0aCgpOiB2b2lkIHtcbiAgICAgICAgLy8gUmVtb3ZlIHVzZXIgaW5mbyBmcm9tIGxvY2FsIHN0b3JhZ2VcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tU3RvcmFnZShTdG9yYWdlVHlwZS5Mb2NhbCwgU3RvcmFnZUNvbnN0YW50cy51c2VySW5mbyk7XG4gICAgICAgIC8vIFJlbW92ZSB0b2tlbiBpbmZvIGZyb20gc2Vzc2lvbiBzdG9yYWdlXG4gICAgICAgIHRoaXMucmVtb3ZlRnJvbVN0b3JhZ2UoU3RvcmFnZVR5cGUuTG9jYWwsIFN0b3JhZ2VDb25zdGFudHMudG9rZW5JbmZvKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmljIGdldHRlciBtZXRob2QgZm9yIHJldHJpZXZpbmcgZGF0YSBmcm9tIGVpdGhlciBsb2NhbCBvciBzZXNzaW9uIHN0b3JhZ2UuXG4gICAgICogXG4gICAgICogQHBhcmFtIHN0b3JhZ2UgVGhlIHR5cGUgb2Ygc3RvcmFnZSB0byByZXRyaWV2ZSBmcm9tLlxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGEgdG8gcmV0cmlldmUuXG4gICAgICogQHJldHVybnMgVGhlIHJldHJpZXZlZCBkYXRhLCBkZXNlcmlhbGl6ZWQgZnJvbSBKU09OIGlmIGl0IHdhcyBzdG9yZWQgYXMgYSBzdHJpbmcuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRGcm9tU3RvcmFnZShzdG9yYWdlOiBTdG9yYWdlVHlwZSwga2V5OiBzdHJpbmcpOiBhbnkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgZGF0YSBmcm9tIHRoZSBzcGVjaWZpZWQgc3RvcmFnZVxuICAgICAgICBjb25zdCBkYXRhID0gc3RvcmFnZSA9PT0gU3RvcmFnZVR5cGUuTG9jYWxcbiAgICAgICAgICAgID8gdGhpcy5fbG9jYWxTdG9yYWdlU2VydmljZS5nZXRMb2NhbFN0b3JhZ2Uoa2V5KVxuICAgICAgICAgICAgOiB0aGlzLl9zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0U2Vzc2lvblN0b3JhZ2Uoa2V5KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBwYXJzZSB0aGUgZGF0YSBhcyBKU09OXG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShkYXRhKSA6IGRhdGE7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBkYXRhIGNhbm5vdCBiZSBwYXJzZWQsIHJldHVybiBpdCBhcyBpc1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIGEga2V5LXZhbHVlIHBhaXIgaW4gdGhlIHNwZWNpZmllZCBzdG9yYWdlIHR5cGUuXG4gICAgICogXG4gICAgICogQHBhcmFtIHN0b3JhZ2UgVGhlIHR5cGUgb2Ygc3RvcmFnZSB0byB1c2UgKGxvY2FsIG9yIHNlc3Npb24pLlxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSB1bmRlciB3aGljaCB0aGUgZGF0YSBzaG91bGQgYmUgc3RvcmVkLlxuICAgICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIHN0b3JlLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0VG9TdG9yYWdlKHN0b3JhZ2U6IFN0b3JhZ2VUeXBlLCBrZXk6IHN0cmluZywgZGF0YTogYW55KTogdm9pZCB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBzdG9yYWdlIHR5cGUgaXMgbG9jYWxcbiAgICAgICAgaWYgKHN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLkxvY2FsKSB7XG4gICAgICAgICAgICAvLyBTZXQgdGhlIGRhdGEgaW4gbG9jYWwgc3RvcmFnZVxuICAgICAgICAgICAgdGhpcy5fbG9jYWxTdG9yYWdlU2VydmljZS5zZXRMb2NhbFN0b3JhZ2Uoa2V5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgc2V0IHRoZSBkYXRhIGluIHNlc3Npb24gc3RvcmFnZVxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnNldFNlc3Npb25TdG9yYWdlKGtleSwgZGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEga2V5LXZhbHVlIHBhaXIgZnJvbSB0aGUgc3BlY2lmaWVkIHN0b3JhZ2UgdHlwZS5cbiAgICAgKiBcbiAgICAgKiBUaGlzIG1ldGhvZCByZW1vdmVzIHRoZSBnaXZlbiBrZXkgZnJvbSBlaXRoZXIgbG9jYWwgb3Igc2Vzc2lvbiBzdG9yYWdlIFxuICAgICAqIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgc3RvcmFnZSB0eXBlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBzdG9yYWdlIFRoZSB0eXBlIG9mIHN0b3JhZ2UgdG8gcmVtb3ZlIGZyb20gKGxvY2FsIG9yIHNlc3Npb24pLlxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlbW92ZUZyb21TdG9yYWdlKHN0b3JhZ2U6IFN0b3JhZ2VUeXBlLCBrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoc3RvcmFnZSA9PT0gU3RvcmFnZVR5cGUuTG9jYWwpIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUga2V5IGZyb20gbG9jYWwgc3RvcmFnZVxuICAgICAgICAgICAgdGhpcy5fbG9jYWxTdG9yYWdlU2VydmljZS5yZW1vdmVMb2NhbFN0b3JhZ2Uoa2V5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUga2V5IGZyb20gc2Vzc2lvbiBzdG9yYWdlXG4gICAgICAgICAgICB0aGlzLl9zZXNzaW9uU3RvcmFnZVNlcnZpY2UucmVtb3ZlU2Vzc2lvblN0b3JhZ2Uoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyBhbGwga2V5LXZhbHVlIHBhaXJzIGZyb20gdGhlIHNwZWNpZmllZCBzdG9yYWdlIHR5cGUuXG4gICAgICogXG4gICAgICogVGhpcyBtZXRob2QgY2xlYXJzIGFsbCBrZXktdmFsdWUgcGFpcnMgZnJvbSBlaXRoZXIgbG9jYWwgb3Igc2Vzc2lvbiBzdG9yYWdlXG4gICAgICogYmFzZWQgb24gdGhlIHNwZWNpZmllZCBzdG9yYWdlIHR5cGUuXG4gICAgICogXG4gICAgICogQHBhcmFtIHN0b3JhZ2UgVGhlIHR5cGUgb2Ygc3RvcmFnZSB0byBjbGVhciAobG9jYWwgb3Igc2Vzc2lvbikuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjbGVhclN0b3JhZ2Uoc3RvcmFnZTogU3RvcmFnZVR5cGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHN0b3JhZ2UgPT09IFN0b3JhZ2VUeXBlLkxvY2FsKSB7XG4gICAgICAgICAgICAvLyBDbGVhciBsb2NhbCBzdG9yYWdlXG4gICAgICAgICAgICB0aGlzLl9sb2NhbFN0b3JhZ2VTZXJ2aWNlLmNsZWFyTG9jYWxTdG9yYWdlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDbGVhciBzZXNzaW9uIHN0b3JhZ2VcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb25TdG9yYWdlU2VydmljZS5jbGVhclNlc3Npb25TdG9yYWdlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgc2NyZWVuIGNvbnRleHQgd2l0aCB0aGUgZ2l2ZW4ga2V5IGFuZCBkYXRhLlxuICAgICAqIFxuICAgICAqIFRoZSBzY3JlZW4gY29udGV4dCBpcyBhIGNvbGxlY3Rpb24gb2Yga2V5LXZhbHVlIHBhaXJzIHRoYXQgYXJlIHN0b3JlZCBpbiBzZXNzaW9uIHN0b3JhZ2UuXG4gICAgICogVGhlIGtleSBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBzY3JlZW4gY29udGV4dCBhbmQgdGhlIGRhdGEgaXMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5LlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBmb3IgdGhlIHNjcmVlbiBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBkYXRhIFRoZSBkYXRhIHRvIHN0b3JlIGluIHRoZSBzY3JlZW4gY29udGV4dC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkU2NyZWVuQ29udGV4dChrZXk6IHN0cmluZywgZGF0YTogYW55KTogdm9pZCB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWtleSB8fCBkYXRhID09IG51bGwpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3Qgc2NyZWVuQ29udGV4dCA9IHRoaXMuZ2V0U2Vzc2lvbihTdG9yYWdlQ29uc3RhbnRzLnNjcmVlbkNvbnRleHQpIHx8IHt9O1xuXG4gICAgICAgICAgICBpZiAoIXNjcmVlbkNvbnRleHRba2V5XSkge1xuICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGtleSB3aXRoIGFuIGVtcHR5IGFycmF5IGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgICAgICAgICBzY3JlZW5Db250ZXh0W2tleV0gPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQWRkIHRoZSBkYXRhIHRvIHRoZSBleGlzdGluZyBhcnJheVxuICAgICAgICAgICAgc2NyZWVuQ29udGV4dFtrZXldLnB1c2goZGF0YSk7XG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHNjcmVlbiBjb250ZXh0IHdpdGggdGhlIG5ldyBkYXRhXG4gICAgICAgICAgICB0aGlzLnNldFNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy5zY3JlZW5Db250ZXh0LCBzY3JlZW5Db250ZXh0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFkZGluZyBzY3JlZW4gY29udGV4dDonLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGxhdGVzdCBzY3JlZW4gY29udGV4dCBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4ga2V5LlxuICAgICAqIFxuICAgICAqIFRoZSBzY3JlZW4gY29udGV4dCBpcyBhIGNvbGxlY3Rpb24gb2Yga2V5LXZhbHVlIHBhaXJzIHRoYXQgYXJlIHN0b3JlZCBpbiBzZXNzaW9uIHN0b3JhZ2UuXG4gICAgICogVGhlIGtleSBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoZSBzY3JlZW4gY29udGV4dCBhbmQgdGhlIGRhdGEgaXMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUga2V5LlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGtleSBmb3IgdGhlIHNjcmVlbiBjb250ZXh0LlxuICAgICAqIEByZXR1cm5zIFRoZSBsYXRlc3Qgc2NyZWVuIGNvbnRleHQgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleSwgb3IgbnVsbCBpZiB0aGUga2V5IGlzIG5vdCBmb3VuZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U2NyZWVuQ29udGV4dChrZXk6IHN0cmluZyk6IGFueSB8IG51bGwge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKCFrZXkpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBjb25zdCBzY3JlZW5Db250ZXh0ID0gdGhpcy5nZXRTZXNzaW9uKFN0b3JhZ2VDb25zdGFudHMuc2NyZWVuQ29udGV4dCk7XG4gICAgICAgICAgICBpZiAoIXNjcmVlbkNvbnRleHQgfHwgIXNjcmVlbkNvbnRleHRba2V5XSB8fCBzY3JlZW5Db250ZXh0W2tleV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFJldHVybiB0aGUgbGF0ZXN0IHNjcmVlbiBjb250ZXh0IGRhdGEgKExJRk8pXG4gICAgICAgICAgICByZXR1cm4gc2NyZWVuQ29udGV4dFtrZXldW3NjcmVlbkNvbnRleHRba2V5XS5sZW5ndGggLSAxXTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGdldHRpbmcgc2NyZWVuIGNvbnRleHQ6JywgZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBsYXRlc3Qgc2NyZWVuIGNvbnRleHQgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGtleSBmcm9tIHNlc3Npb24gc3RvcmFnZS5cbiAgICAgKiBcbiAgICAgKiBUaGUgc2NyZWVuIGNvbnRleHQgaXMgYSBjb2xsZWN0aW9uIG9mIGtleS12YWx1ZSBwYWlycyB0aGF0IGFyZSBzdG9yZWQgaW4gc2Vzc2lvbiBzdG9yYWdlLlxuICAgICAqIFRoZSBrZXkgaXMgdXNlZCB0byBpZGVudGlmeSB0aGUgc2NyZWVuIGNvbnRleHQgYW5kIHRoZSBkYXRhIGlzIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleS5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBrZXkgZm9yIHRoZSBzY3JlZW4gY29udGV4dC5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmVtb3ZlZCBzY3JlZW4gY29udGV4dCBkYXRhLCBvciBudWxsIGlmIHRoZSBrZXkgaXMgbm90IGZvdW5kIG9yIHRoZSBkYXRhIGlzIG5vdCBwcmVzZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhblNjcmVlbkNvbnRleHQoa2V5OiBzdHJpbmcpOiBhbnkgfCBudWxsIHtcbiAgICAgICAgdHJ5IHsgICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICgha2V5KSByZXR1cm4gbnVsbDtcblxuICAgICAgICAgICAgY29uc3Qgc2NyZWVuQ29udGV4dCA9IHRoaXMuZ2V0U2Vzc2lvbihTdG9yYWdlQ29uc3RhbnRzLnNjcmVlbkNvbnRleHQpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoIXNjcmVlbkNvbnRleHQgfHwgIXNjcmVlbkNvbnRleHRba2V5XSB8fCBzY3JlZW5Db250ZXh0W2tleV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWREYXRhID0gc2NyZWVuQ29udGV4dFtrZXldLnBvcCgpOyAvLyBSZW1vdmUgbGF0ZXN0IChMSUZPKVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBBdXRvLWNsZWFudXA6IFJlbW92ZSBrZXkgaWYgYXJyYXkgYmVjb21lcyBlbXB0eVxuICAgICAgICAgICAgaWYgKHNjcmVlbkNvbnRleHRba2V5XS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgc2NyZWVuQ29udGV4dFtrZXldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNldFNlc3Npb24oU3RvcmFnZUNvbnN0YW50cy5zY3JlZW5Db250ZXh0LCBzY3JlZW5Db250ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiByZW1vdmVkRGF0YTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNsZWFuaW5nIHNjcmVlbiBjb250ZXh0OicsIGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxufSJdfQ==
@@ -81,4 +81,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
81
81
  providedIn: 'root'
82
82
  }]
83
83
  }] });
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLXNkay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFiLXNkay9zcmMvbGliL3RhYi1zZGsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUtsRCxNQUFNLE9BQU8sTUFBTTtJQUNWLE1BQU0sQ0FBQyxHQUFHLENBQWE7SUFDdkIsTUFBTSxD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QUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQzt3R0E5RFUsTUFBTTs0R0FBTixNQUFNLGNBRkwsTUFBTTs7NEZBRVAsTUFBTTtrQkFIbEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YUhlbHBlciB9IGZyb20gJ0B0ZWNoZXh0ZW5zb3IvdGFiLWNvcmUtdXRpbGl0eSc7XHJcbmltcG9ydCB7IFVpU2VydmljZSB9IGZyb20gJy4vdWkvdWkuc2VydmljZSc7XHJcbmltcG9ydCB7IEF1dGhVdGlsU2VydmljZSB9IGZyb20gJy4vYXV0aC9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtU2VydmljZSB9IGZyb20gJy4vdWkvZm9ybS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJhbnNpdGlvblNlcnZpY2UgfSBmcm9tICcuL3dvcmtmbG93L3RyYW5zaXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcFNlcnZpY2UgfSBmcm9tICcuL2FwcC9hcHAuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbGVTZXJ2aWNlIH0gZnJvbSAnLi9hcHAvZmlsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVwb3J0U2VydmljZSB9IGZyb20gJy4vYXBwL3JlcG9ydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVsZWFzZVNlcnZpY2UgfSBmcm9tICcuL2FwcC9yZWxlYXNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbmFseXRpY3NTZXJ2aWNlIH0gZnJvbSAnLi9hcHAvYW5hbHl0aWNzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdG9yU2VydmljZSB9IGZyb20gJy4vYXBwL3RyYW5zbGF0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IENydWRTZXJ2aWNlIH0gZnJvbSAnLi9jcnVkL2NydWQuc2VydmljZSc7XHJcbmltcG9ydCB7IEh0dHBTZXJ2aWNlIH0gZnJvbSAnLi9odHRwL2h0dHAuc2VydmljZSc7XHJcbmltcG9ydCB7IFN0b3JlU2VydmljZSB9IGZyb20gJy4vc3RvcmUvc3RvcmUuc2VydmljZSc7XHJcbmltcG9ydCB7IFV0aWxTZXJ2aWNlIH0gZnJvbSAnLi91dGlsL3V0aWwuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJTZGsge1xyXG4gIHB1YmxpYyBzdGF0aWMgYXBwOiBBcHBTZXJ2aWNlO1xyXG4gIHB1YmxpYyBzdGF0aWMgYXV0aDogQXV0aFV0aWxTZXJ2aWNlO1xyXG4gIHB1YmxpYyBzdGF0aWMgdWk6IFVpU2VydmljZTtcclxuICBwdWJsaWMgc3RhdGljIGZvcm06IEZvcm1TZXJ2aWNlO1xyXG4gIHB1YmxpYyBzdGF0aWMgdHJhbnNpdGlvbjogVHJhbnNpdGlvblNlcnZpY2U7XHJcbiAgcHVibGljIHN0YXRpYyBtZXRhZGF0YVV0aWxzOiBNZXRhZGF0YUhlbHBlcjtcclxuICBwdWJsaWMgc3RhdGljIGZpbGU6IEZpbGVTZXJ2aWNlO1xyXG4gIHB1YmxpYyBzdGF0aWMgcmVwb3J0OiBSZXBvcnRTZXJ2aWNlO1xyXG4gIHB1YmxpYyBzdGF0aWMgcmVsZWFzZTogUmVsZWFzZVNlcnZpY2U7XHJcbiAgcHVibGljIHN0YXRpYyBhbmFseXRpY3M6IEFuYWx5dGljc1NlcnZpY2U7XHJcbiAgcHVibGljIHN0YXRpYyB0cmFuc2xhdG9yOiBUcmFuc2xhdG9yU2VydmljZTtcclxuICBwdWJsaWMgc3RhdGljIGNydWQ6IENydWRTZXJ2aWNlO1xyXG4gIHB1YmxpYyBzdGF0aWMgaHR0cDogSHR0cFNlcnZpY2U7XHJcbiAgcHVibGljIHN0YXRpYyBzdG9yZTogU3RvcmVTZXJ2aWNlO1xyXG4gIHB1YmxpYyBzdGF0aWMgdXRpbDogYW55O1xyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSB0aGUgU0RLIHdpdGggbmVjZXNzYXJ5IHNlcnZpY2VzXHJcbiAgICovXHJcbiAgcHVibGljIHN0YXRpYyBpbml0KGluamVjdG9yOiBJbmplY3RvciwgY29udGV4dDogYW55KTogdm9pZCB7XHJcbiAgICAvLyBFeHBvc2UgdG8gd2luZG93IGZvciBnbG9iYWwgYWNjZXNzIGlmIG5lZWRlZFxyXG4gICAgKHdpbmRvdyBhcyBhbnkpLlRhYlNkayA9IFRhYlNkaztcclxuXHJcbiAgICAvLyBJbml0aWFsaXplIHNlcnZpY2VzXHJcbiAgICB0aGlzLmFwcCA9IGluamVjdG9yLmdldChBcHBTZXJ2aWNlKTtcclxuICAgIHRoaXMuYXV0aCA9IGluamVjdG9yLmdldChBdXRoVXRpbFNlcnZpY2UpO1xyXG4gICAgdGhpcy51aSA9IGluamVjdG9yLmdldChVaVNlcnZpY2UpO1xyXG4gICAgdGhpcy5mb3JtID0gaW5qZWN0b3IuZ2V0KEZvcm1TZXJ2aWNlKTtcclxuICAgIHRoaXMudHJhbnNpdGlvbiA9IGluamVjdG9yLmdldChUcmFuc2l0aW9uU2VydmljZSk7XHJcbiAgICB0aGlzLm1ldGFkYXRhVXRpbHMgPSBpbmplY3Rvci5nZXQoTWV0YWRhdGFIZWxwZXIpO1xyXG4gICAgdGhpcy5maWxlID0gaW5qZWN0b3IuZ2V0KEZpbGVTZXJ2aWNlKTtcclxuICAgIHRoaXMucmVwb3J0ID0gaW5qZWN0b3IuZ2V0KFJlcG9ydFNlcnZpY2UpO1xyXG4gICAgdGhpcy5yZWxlYXNlID0gaW5qZWN0b3IuZ2V0KFJlbGVhc2VTZXJ2aWNlKTtcclxuICAgIHRoaXMuYW5hbHl0aWNzID0gaW5qZWN0b3IuZ2V0KEFuYWx5dGljc1NlcnZpY2UpO1xyXG4gICAgdGhpcy50cmFuc2xhdG9yID0gaW5qZWN0b3IuZ2V0KFRyYW5zbGF0b3JTZXJ2aWNlKTtcclxuICAgIHRoaXMuY3J1ZCA9IGluamVjdG9yLmdldChDcnVkU2VydmljZSk7XHJcbiAgICB0aGlzLmh0dHAgPSBpbmplY3Rvci5nZXQoSHR0cFNlcnZpY2UpO1xyXG4gICAgdGhpcy5zdG9yZSA9IGluamVjdG9yLmdldChTdG9yZVNlcnZpY2UpO1xyXG5cclxuICAgIC8vIEluaXRpYWxpemUgdXRpbCBzZXJ2aWNlIHdpdGggY29udGV4dFxyXG4gICAgY29uc3QgdXRpbFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoVXRpbFNlcnZpY2UpO1xyXG4gICAgdGhpcy51dGlsID0gdXRpbFNlcnZpY2UuaW5pdChjb250ZXh0KTtcclxuXHJcbiAgICAvLyBGcmVlemUgdGhlIGdsb2JhbCBvYmplY3QgdG8gcHJldmVudCBtb2RpZmljYXRpb25zXHJcbiAgICBPYmplY3QuZnJlZXplKHRoaXMpO1xyXG4gICAgXHJcbiAgICBPYmplY3QuZnJlZXplKHRoaXMuYXBwKTtcclxuICAgIE9iamVjdC5mcmVlemUodGhpcy5hdXRoKTtcclxuICAgIE9iamVjdC5mcmVlemUodGhpcy51aSk7XHJcbiAgICBPYmplY3QuZnJlZXplKHRoaXMuZm9ybSk7XHJcbiAgICBPYmplY3QuZnJlZXplKHRoaXMudHJhbnNpdGlvbik7XHJcbiAgICBPYmplY3QuZnJlZXplKHRoaXMuZmlsZSk7XHJcbiAgICBPYmplY3QuZnJlZXplKHRoaXMucmVwb3J0KTtcclxuICAgIE9iamVjdC5mcmVlemUodGhpcy5yZWxlYXNlKTtcclxuICAgIE9iamVjdC5mcmVlemUodGhpcy5hbmFseXRpY3MpO1xyXG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzLnRyYW5zbGF0b3IpO1xyXG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzLmNydWQpO1xyXG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzLmh0dHApO1xyXG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzLnN0b3JlKTtcclxuICAgIE9iamVjdC5mcmVlemUodGhpcy51dGlsKTtcclxuICB9XHJcbn0iXX0=
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLXNkay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFiLXNkay9zcmMvbGliL3RhYi1zZGsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUtsRCxNQUFNLE9BQU8sTUFBTTtJQUNWLE1BQU0sQ0FBQyxHQUFHLENBQWE7SUFDdkIsTUFBTSxD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QUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQzt3R0E5RFUsTUFBTTs0R0FBTixNQUFNLGNBRkwsTUFBTTs7NEZBRVAsTUFBTTtrQkFIbEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWV0YWRhdGFIZWxwZXIgfSBmcm9tICdAdGVjaGV4dGVuc29yL3RhYi1jb3JlLXV0aWxpdHknO1xuaW1wb3J0IHsgVWlTZXJ2aWNlIH0gZnJvbSAnLi91aS91aS5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhVdGlsU2VydmljZSB9IGZyb20gJy4vYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgRm9ybVNlcnZpY2UgfSBmcm9tICcuL3VpL2Zvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2l0aW9uU2VydmljZSB9IGZyb20gJy4vd29ya2Zsb3cvdHJhbnNpdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcFNlcnZpY2UgfSBmcm9tICcuL2FwcC9hcHAuc2VydmljZSc7XG5pbXBvcnQgeyBGaWxlU2VydmljZSB9IGZyb20gJy4vYXBwL2ZpbGUuc2VydmljZSc7XG5pbXBvcnQgeyBSZXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi9hcHAvcmVwb3J0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVsZWFzZVNlcnZpY2UgfSBmcm9tICcuL2FwcC9yZWxlYXNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4vYXBwL2FuYWx5dGljcy5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zbGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi9hcHAvdHJhbnNsYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IENydWRTZXJ2aWNlIH0gZnJvbSAnLi9jcnVkL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwU2VydmljZSB9IGZyb20gJy4vaHR0cC9odHRwLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RvcmVTZXJ2aWNlIH0gZnJvbSAnLi9zdG9yZS9zdG9yZS5zZXJ2aWNlJztcbmltcG9ydCB7IFV0aWxTZXJ2aWNlIH0gZnJvbSAnLi91dGlsL3V0aWwuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFRhYlNkayB7XG4gIHB1YmxpYyBzdGF0aWMgYXBwOiBBcHBTZXJ2aWNlO1xuICBwdWJsaWMgc3RhdGljIGF1dGg6IEF1dGhVdGlsU2VydmljZTtcbiAgcHVibGljIHN0YXRpYyB1aTogVWlTZXJ2aWNlO1xuICBwdWJsaWMgc3RhdGljIGZvcm06IEZvcm1TZXJ2aWNlO1xuICBwdWJsaWMgc3RhdGljIHRyYW5zaXRpb246IFRyYW5zaXRpb25TZXJ2aWNlO1xuICBwdWJsaWMgc3RhdGljIG1ldGFkYXRhVXRpbHM6IE1ldGFkYXRhSGVscGVyO1xuICBwdWJsaWMgc3RhdGljIGZpbGU6IEZpbGVTZXJ2aWNlO1xuICBwdWJsaWMgc3RhdGljIHJlcG9ydDogUmVwb3J0U2VydmljZTtcbiAgcHVibGljIHN0YXRpYyByZWxlYXNlOiBSZWxlYXNlU2VydmljZTtcbiAgcHVibGljIHN0YXRpYyBhbmFseXRpY3M6IEFuYWx5dGljc1NlcnZpY2U7XG4gIHB1YmxpYyBzdGF0aWMgdHJhbnNsYXRvcjogVHJhbnNsYXRvclNlcnZpY2U7XG4gIHB1YmxpYyBzdGF0aWMgY3J1ZDogQ3J1ZFNlcnZpY2U7XG4gIHB1YmxpYyBzdGF0aWMgaHR0cDogSHR0cFNlcnZpY2U7XG4gIHB1YmxpYyBzdGF0aWMgc3RvcmU6IFN0b3JlU2VydmljZTtcbiAgcHVibGljIHN0YXRpYyB1dGlsOiBhbnk7XG5cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgU0RLIHdpdGggbmVjZXNzYXJ5IHNlcnZpY2VzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGluaXQoaW5qZWN0b3I6IEluamVjdG9yLCBjb250ZXh0OiBhbnkpOiB2b2lkIHtcbiAgICAvLyBFeHBvc2UgdG8gd2luZG93IGZvciBnbG9iYWwgYWNjZXNzIGlmIG5lZWRlZFxuICAgICh3aW5kb3cgYXMgYW55KS5UYWJTZGsgPSBUYWJTZGs7XG5cbiAgICAvLyBJbml0aWFsaXplIHNlcnZpY2VzXG4gICAgdGhpcy5hcHAgPSBpbmplY3Rvci5nZXQoQXBwU2VydmljZSk7XG4gICAgdGhpcy5hdXRoID0gaW5qZWN0b3IuZ2V0KEF1dGhVdGlsU2VydmljZSk7XG4gICAgdGhpcy51aSA9IGluamVjdG9yLmdldChVaVNlcnZpY2UpO1xuICAgIHRoaXMuZm9ybSA9IGluamVjdG9yLmdldChGb3JtU2VydmljZSk7XG4gICAgdGhpcy50cmFuc2l0aW9uID0gaW5qZWN0b3IuZ2V0KFRyYW5zaXRpb25TZXJ2aWNlKTtcbiAgICB0aGlzLm1ldGFkYXRhVXRpbHMgPSBpbmplY3Rvci5nZXQoTWV0YWRhdGFIZWxwZXIpO1xuICAgIHRoaXMuZmlsZSA9IGluamVjdG9yLmdldChGaWxlU2VydmljZSk7XG4gICAgdGhpcy5yZXBvcnQgPSBpbmplY3Rvci5nZXQoUmVwb3J0U2VydmljZSk7XG4gICAgdGhpcy5yZWxlYXNlID0gaW5qZWN0b3IuZ2V0KFJlbGVhc2VTZXJ2aWNlKTtcbiAgICB0aGlzLmFuYWx5dGljcyA9IGluamVjdG9yLmdldChBbmFseXRpY3NTZXJ2aWNlKTtcbiAgICB0aGlzLnRyYW5zbGF0b3IgPSBpbmplY3Rvci5nZXQoVHJhbnNsYXRvclNlcnZpY2UpO1xuICAgIHRoaXMuY3J1ZCA9IGluamVjdG9yLmdldChDcnVkU2VydmljZSk7XG4gICAgdGhpcy5odHRwID0gaW5qZWN0b3IuZ2V0KEh0dHBTZXJ2aWNlKTtcbiAgICB0aGlzLnN0b3JlID0gaW5qZWN0b3IuZ2V0KFN0b3JlU2VydmljZSk7XG5cbiAgICAvLyBJbml0aWFsaXplIHV0aWwgc2VydmljZSB3aXRoIGNvbnRleHRcbiAgICBjb25zdCB1dGlsU2VydmljZSA9IGluamVjdG9yLmdldChVdGlsU2VydmljZSk7XG4gICAgdGhpcy51dGlsID0gdXRpbFNlcnZpY2UuaW5pdChjb250ZXh0KTtcblxuICAgIC8vIEZyZWV6ZSB0aGUgZ2xvYmFsIG9iamVjdCB0byBwcmV2ZW50IG1vZGlmaWNhdGlvbnNcbiAgICBPYmplY3QuZnJlZXplKHRoaXMpO1xuICAgIFxuICAgIE9iamVjdC5mcmVlemUodGhpcy5hcHApO1xuICAgIE9iamVjdC5mcmVlemUodGhpcy5hdXRoKTtcbiAgICBPYmplY3QuZnJlZXplKHRoaXMudWkpO1xuICAgIE9iamVjdC5mcmVlemUodGhpcy5mb3JtKTtcbiAgICBPYmplY3QuZnJlZXplKHRoaXMudHJhbnNpdGlvbik7XG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzLmZpbGUpO1xuICAgIE9iamVjdC5mcmVlemUodGhpcy5yZXBvcnQpO1xuICAgIE9iamVjdC5mcmVlemUodGhpcy5yZWxlYXNlKTtcbiAgICBPYmplY3QuZnJlZXplKHRoaXMuYW5hbHl0aWNzKTtcbiAgICBPYmplY3QuZnJlZXplKHRoaXMudHJhbnNsYXRvcik7XG4gICAgT2JqZWN0LmZyZWV6ZSh0aGlzLmNydWQpO1xuICAgIE9iamVjdC5mcmVlemUodGhpcy5odHRwKTtcbiAgICBPYmplY3QuZnJlZXplKHRoaXMuc3RvcmUpO1xuICAgIE9iamVjdC5mcmVlemUodGhpcy51dGlsKTtcbiAgfVxufSJdfQ==
@@ -76,4 +76,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
76
76
  providedIn: 'root'
77
77
  }]
78
78
  }] });
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFiLXNkay9zcmMvbGliL3VpL2Zvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQXFGLGdCQUFnQixFQUFFLGNBQWMsRUFBd0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzTCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUt0QyxNQUFNLE9BQU8sV0FBVztJQUNILGlCQUFpQixHQUFxQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMvRCxlQUFlLEdBQW1CLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUUxRTs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQWdCLEVBQUUsTUFBd0I7UUFDdEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUNyRCxDQUFDO1FBQ0YsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBZ0IsRUFBRSxjQUFtQjtRQUNyRCx1REFBdUQ7UUFDdkQsTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUNqRSxDQUFDO1FBRUYsdUNBQXVDO1FBQ3ZDLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsY0FBcUM7UUFDdEQsaUVBQWlFO1FBQ2pFLE1BQU0sUUFBUSxHQUFHLE1BQU0sY0FBYyxDQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUN4RCxDQUFDO1FBRUYsZ0NBQWdDO1FBQ2hDLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMscUJBQXFCLENBQUMsV0FBbUIsRUFBRSxJQUE0QjtRQUN6RSwwREFBMEQ7UUFDMUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQ2xFLENBQUM7UUFFRix1Q0FBdUM7UUFDdkMsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBb0MsRUFBRSxxQkFBcUIsR0FBRyxLQUFLO1FBQ25GLHdEQUF3RDtRQUN4RCxNQUFNLFFBQVEsR0FBRyxNQUFNLGNBQWMsQ0FDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLEVBQUUscUJBQXFCLENBQUMsQ0FDckYsQ0FBQztRQUVGLHVDQUF1QztRQUN2QyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO3dHQW5GUSxXQUFXOzRHQUFYLFdBQVcsY0FGUixNQUFNOzs0RkFFVCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCdWlsZEZvcm1Db21wb25lbnRUeXBlLCBDb21tb25BcGlSZXNwb25zZSwgR2V0U2NyZWVuQ29uZmlnLCBQcm9jZXNzUmVxdWVzdFBheWxvYWQsIFRhYkZvcm1pb1NlcnZpY2UsIFRlbXBsYXRlSGVscGVyLCBUZW1wbGF0ZVBhcnNlUGF5bG9hZCB9IGZyb20gJ0B0ZWNoZXh0ZW5zb3IvdGFiLWNvcmUtdXRpbGl0eSc7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEZvcm1TZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYkZvcm1pb1NlcnZpY2U6IFRhYkZvcm1pb1NlcnZpY2UgPSBpbmplY3QoVGFiRm9ybWlvU2VydmljZSk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90ZW1wbGF0ZUhlbHBlcjogVGVtcGxhdGVIZWxwZXIgPSBpbmplY3QoVGVtcGxhdGVIZWxwZXIpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0cmlldmVzIGEgc2NyZWVuIGJ5IGl0cyBJRC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gc2NyZWVuSWQgVGhlIElEIG9mIHRoZSBzY3JlZW4gdG8gcmV0cmlldmUuXHJcbiAgICAgKiBAcGFyYW0gY29uZmlnIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgcmVxdWVzdC5cclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSBvZiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBnZXRTY3JlZW4oc2NyZWVuSWQ6IHN0cmluZywgY29uZmlnPzogR2V0U2NyZWVuQ29uZmlnKTogUHJvbWlzZTxDb21tb25BcGlSZXNwb25zZT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgICAgIHRoaXMuX3RhYkZvcm1pb1NlcnZpY2UuZ2V0U2NyZWVuKHNjcmVlbklkLCBjb25maWcpXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGRhdGEgZm9yIGEgc2NyZWVuIGJ5IGl0cyBJRC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gc2NyZWVuSWQgVGhlIElEIG9mIHRoZSBzY3JlZW4gdG8gcmV0cmlldmUgdGhlIGRhdGEgZm9yLlxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXlsb2FkIFRoZSByZXF1ZXN0IHBheWxvYWQgdG8gc2VuZCB0byB0aGUgc2VydmVyLlxyXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIG9mIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdldFNjcmVlbkRhdGEoc2NyZWVuSWQ6IHN0cmluZywgcmVxdWVzdFBheWxvYWQ6IGFueSk6IFByb21pc2U8Q29tbW9uQXBpUmVzcG9uc2U+IHtcclxuICAgICAgICAvLyBTZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgYW5kIGdldCB0aGUgcmVzcG9uc2UuXHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICAgICAgdGhpcy5fdGFiRm9ybWlvU2VydmljZS5nZXRTY3JlZW5EYXRhKHNjcmVlbklkLCByZXF1ZXN0UGF5bG9hZClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBSZXR1cm4gdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci5cclxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9jZXNzZXMgYSByZXF1ZXN0IHVzaW5nIHRoZSBwcm92aWRlZCByZXF1ZXN0IHBheWxvYWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXlsb2FkIFRoZSBwYXlsb2FkIHRvIGJlIHByb2Nlc3NlZC5cclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSBvZiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0UGF5bG9hZDogUHJvY2Vzc1JlcXVlc3RQYXlsb2FkKTogUHJvbWlzZTxDb21tb25BcGlSZXNwb25zZT4ge1xyXG4gICAgICAgIC8vIFNlbmQgdGhlIHJlcXVlc3QgcGF5bG9hZCB0byB0aGUgc2VydmVyIGFuZCBhd2FpdCB0aGUgcmVzcG9uc2UuXHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICAgICAgdGhpcy5fdGFiRm9ybWlvU2VydmljZS5wcm9jZXNzUmVxdWVzdChyZXF1ZXN0UGF5bG9hZClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBSZXR1cm4gdGhlIHNlcnZlcidzIHJlc3BvbnNlLlxyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkcyBGb3JtLmlvIGNvbXBvbmVudHMgZm9yIHRoZSBzcGVjaWZpZWQgYXBwIG9iamVjdCBJRCBhbmQgdHlwZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gYXBwT2JqZWN0SWQgVGhlIElEIG9mIHRoZSBhcHAgb2JqZWN0IHRvIGJ1aWxkIHRoZSBjb21wb25lbnRzIGZvci5cclxuICAgICAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIGNvbXBvbmVudHMgdG8gYnVpbGQuXHJcbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2Ugb2YgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgYnVpbGRGb3JtSU9Db21wb25lbnRzKGFwcE9iamVjdElkOiBzdHJpbmcsIHR5cGU6IEJ1aWxkRm9ybUNvbXBvbmVudFR5cGUpOiBQcm9taXNlPENvbW1vbkFwaVJlc3BvbnNlPiB7XHJcbiAgICAgICAgLy8gU2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgc2VydmVyIHRvIGJ1aWxkIHRoZSBjb21wb25lbnRzLlxyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgICAgIHRoaXMuX3RhYkZvcm1pb1NlcnZpY2UuYnVpbGRGb3JtSU9Db21wb25lbnRzKGFwcE9iamVjdElkLCB0eXBlKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIFJldHVybiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLlxyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcnNlcyBhIHRlbXBsYXRlIHVzaW5nIHRoZSBwcm92aWRlZCByZXF1ZXN0IHBheWxvYWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXlsb2FkIFRoZSBwYXlsb2FkIGNvbnRhaW5pbmcgdGhlIHRlbXBsYXRlIHRvIGJlIHBhcnNlZC5cclxuICAgICAqIEBwYXJhbSBvbkZhaWxlZFBhcnNlT25TZXJ2ZXIgSWYgdGhlIHBhcnNpbmcgc2hvdWxkIGJlIGRvbmUgb24gdGhlIHNlcnZlci5cclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSBvZiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBwYXJzZVRlbXBsYXRlKHJlcXVlc3RQYXlsb2FkOiBUZW1wbGF0ZVBhcnNlUGF5bG9hZCwgb25GYWlsZWRQYXJzZU9uU2VydmVyID0gZmFsc2UpOiBQcm9taXNlPENvbW1vbkFwaVJlc3BvbnNlPiB7XHJcbiAgICAgICAgLy8gU2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgc2VydmVyIHRvIHBhcnNlIHRoZSB0ZW1wbGF0ZS5cclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgICAgICB0aGlzLl90ZW1wbGF0ZUhlbHBlci50ZW1wbGF0ZVBhcnNlVW5pdmVyc2FsKHJlcXVlc3RQYXlsb2FkLCBvbkZhaWxlZFBhcnNlT25TZXJ2ZXIpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuXHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgfVxyXG59Il19
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFiLXNkay9zcmMvbGliL3VpL2Zvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQXFGLGdCQUFnQixFQUFFLGNBQWMsRUFBd0IsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzTCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUt0QyxNQUFNLE9BQU8sV0FBVztJQUNILGlCQUFpQixHQUFxQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMvRCxlQUFlLEdBQW1CLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUUxRTs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUFDLFFBQWdCLEVBQUUsTUFBd0I7UUFDdEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUNyRCxDQUFDO1FBQ0YsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBZ0IsRUFBRSxjQUFtQjtRQUNyRCx1REFBdUQ7UUFDdkQsTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUNqRSxDQUFDO1FBRUYsdUNBQXVDO1FBQ3ZDLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsY0FBcUM7UUFDdEQsaUVBQWlFO1FBQ2pFLE1BQU0sUUFBUSxHQUFHLE1BQU0sY0FBYyxDQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUN4RCxDQUFDO1FBRUYsZ0NBQWdDO1FBQ2hDLE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMscUJBQXFCLENBQUMsV0FBbUIsRUFBRSxJQUE0QjtRQUN6RSwwREFBMEQ7UUFDMUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxjQUFjLENBQ2pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQ2xFLENBQUM7UUFFRix1Q0FBdUM7UUFDdkMsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsY0FBb0MsRUFBRSxxQkFBcUIsR0FBRyxLQUFLO1FBQ25GLHdEQUF3RDtRQUN4RCxNQUFNLFFBQVEsR0FBRyxNQUFNLGNBQWMsQ0FDakMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLEVBQUUscUJBQXFCLENBQUMsQ0FDckYsQ0FBQztRQUVGLHVDQUF1QztRQUN2QyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO3dHQW5GUSxXQUFXOzRHQUFYLFdBQVcsY0FGUixNQUFNOzs0RkFFVCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnVpbGRGb3JtQ29tcG9uZW50VHlwZSwgQ29tbW9uQXBpUmVzcG9uc2UsIEdldFNjcmVlbkNvbmZpZywgUHJvY2Vzc1JlcXVlc3RQYXlsb2FkLCBUYWJGb3JtaW9TZXJ2aWNlLCBUZW1wbGF0ZUhlbHBlciwgVGVtcGxhdGVQYXJzZVBheWxvYWQgfSBmcm9tICdAdGVjaGV4dGVuc29yL3RhYi1jb3JlLXV0aWxpdHknO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBGb3JtU2VydmljZSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGFiRm9ybWlvU2VydmljZTogVGFiRm9ybWlvU2VydmljZSA9IGluamVjdChUYWJGb3JtaW9TZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90ZW1wbGF0ZUhlbHBlcjogVGVtcGxhdGVIZWxwZXIgPSBpbmplY3QoVGVtcGxhdGVIZWxwZXIpO1xuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIGEgc2NyZWVuIGJ5IGl0cyBJRC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzY3JlZW5JZCBUaGUgSUQgb2YgdGhlIHNjcmVlbiB0byByZXRyaWV2ZS5cbiAgICAgKiBAcGFyYW0gY29uZmlnIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgcmVxdWVzdC5cbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2Ugb2YgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci5cbiAgICAgKi9cbiAgICBhc3luYyBnZXRTY3JlZW4oc2NyZWVuSWQ6IHN0cmluZywgY29uZmlnPzogR2V0U2NyZWVuQ29uZmlnKTogUHJvbWlzZTxDb21tb25BcGlSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGhpcy5fdGFiRm9ybWlvU2VydmljZS5nZXRTY3JlZW4oc2NyZWVuSWQsIGNvbmZpZylcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgZGF0YSBmb3IgYSBzY3JlZW4gYnkgaXRzIElELlxuICAgICAqXG4gICAgICogQHBhcmFtIHNjcmVlbklkIFRoZSBJRCBvZiB0aGUgc2NyZWVuIHRvIHJldHJpZXZlIHRoZSBkYXRhIGZvci5cbiAgICAgKiBAcGFyYW0gcmVxdWVzdFBheWxvYWQgVGhlIHJlcXVlc3QgcGF5bG9hZCB0byBzZW5kIHRvIHRoZSBzZXJ2ZXIuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIG9mIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuXG4gICAgICovXG4gICAgYXN5bmMgZ2V0U2NyZWVuRGF0YShzY3JlZW5JZDogc3RyaW5nLCByZXF1ZXN0UGF5bG9hZDogYW55KTogUHJvbWlzZTxDb21tb25BcGlSZXNwb25zZT4ge1xuICAgICAgICAvLyBTZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgYW5kIGdldCB0aGUgcmVzcG9uc2UuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgICB0aGlzLl90YWJGb3JtaW9TZXJ2aWNlLmdldFNjcmVlbkRhdGEoc2NyZWVuSWQsIHJlcXVlc3RQYXlsb2FkKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLlxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvY2Vzc2VzIGEgcmVxdWVzdCB1c2luZyB0aGUgcHJvdmlkZWQgcmVxdWVzdCBwYXlsb2FkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXlsb2FkIFRoZSBwYXlsb2FkIHRvIGJlIHByb2Nlc3NlZC5cbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2Ugb2YgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci5cbiAgICAgKi9cbiAgICBhc3luYyBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0UGF5bG9hZDogUHJvY2Vzc1JlcXVlc3RQYXlsb2FkKTogUHJvbWlzZTxDb21tb25BcGlSZXNwb25zZT4ge1xuICAgICAgICAvLyBTZW5kIHRoZSByZXF1ZXN0IHBheWxvYWQgdG8gdGhlIHNlcnZlciBhbmQgYXdhaXQgdGhlIHJlc3BvbnNlLlxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGhpcy5fdGFiRm9ybWlvU2VydmljZS5wcm9jZXNzUmVxdWVzdChyZXF1ZXN0UGF5bG9hZClcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBSZXR1cm4gdGhlIHNlcnZlcidzIHJlc3BvbnNlLlxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnVpbGRzIEZvcm0uaW8gY29tcG9uZW50cyBmb3IgdGhlIHNwZWNpZmllZCBhcHAgb2JqZWN0IElEIGFuZCB0eXBlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFwcE9iamVjdElkIFRoZSBJRCBvZiB0aGUgYXBwIG9iamVjdCB0byBidWlsZCB0aGUgY29tcG9uZW50cyBmb3IuXG4gICAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgY29tcG9uZW50cyB0byBidWlsZC5cbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2Ugb2YgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci5cbiAgICAgKi9cbiAgICBhc3luYyBidWlsZEZvcm1JT0NvbXBvbmVudHMoYXBwT2JqZWN0SWQ6IHN0cmluZywgdHlwZTogQnVpbGRGb3JtQ29tcG9uZW50VHlwZSk6IFByb21pc2U8Q29tbW9uQXBpUmVzcG9uc2U+IHtcbiAgICAgICAgLy8gU2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgc2VydmVyIHRvIGJ1aWxkIHRoZSBjb21wb25lbnRzLlxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGhpcy5fdGFiRm9ybWlvU2VydmljZS5idWlsZEZvcm1JT0NvbXBvbmVudHMoYXBwT2JqZWN0SWQsIHR5cGUpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZXMgYSB0ZW1wbGF0ZSB1c2luZyB0aGUgcHJvdmlkZWQgcmVxdWVzdCBwYXlsb2FkLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3RQYXlsb2FkIFRoZSBwYXlsb2FkIGNvbnRhaW5pbmcgdGhlIHRlbXBsYXRlIHRvIGJlIHBhcnNlZC5cbiAgICAgKiBAcGFyYW0gb25GYWlsZWRQYXJzZU9uU2VydmVyIElmIHRoZSBwYXJzaW5nIHNob3VsZCBiZSBkb25lIG9uIHRoZSBzZXJ2ZXIuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIG9mIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuXG4gICAgICovXG4gICAgYXN5bmMgcGFyc2VUZW1wbGF0ZShyZXF1ZXN0UGF5bG9hZDogVGVtcGxhdGVQYXJzZVBheWxvYWQsIG9uRmFpbGVkUGFyc2VPblNlcnZlciA9IGZhbHNlKTogUHJvbWlzZTxDb21tb25BcGlSZXNwb25zZT4ge1xuICAgICAgICAvLyBTZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdG8gcGFyc2UgdGhlIHRlbXBsYXRlLlxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGhpcy5fdGVtcGxhdGVIZWxwZXIudGVtcGxhdGVQYXJzZVVuaXZlcnNhbChyZXF1ZXN0UGF5bG9hZCwgb25GYWlsZWRQYXJzZU9uU2VydmVyKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFJldHVybiB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLlxuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxufSJdfQ==
@@ -341,4 +341,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
341
341
  providedIn: 'root'
342
342
  }]
343
343
  }] });
344
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhYi1zZGsvc3JjL2xpYi91aS91aS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBT25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFnRCxtQkFBbUIsRUFBdUIsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFLL0ssTUFBTSxPQUFPLFNBQVM7SUFDRCxvQkFBb0IsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDeEUsb0JBQW9CLEdBQXdCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRXpGOzs7OztPQUtHO0lBQ0gsVUFBVSxDQUFDLE9BQTBCO1FBQ2pDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFFMUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNYLEtBQUssaUJBQWlCLENBQUMsT0FBTztnQkFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDL0IsTUFBTTtZQUVWLEtBQUssaUJBQWlCLENBQUMsS0FBSztnQkFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDOUIsTUFBTTtZQUVWLEtBQUssaUJBQWlCLENBQUMsT0FBTztnQkFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDOUIsTUFBTTtZQUVWLEtBQUssaUJBQWlCLENBQUMsTUFBTTtnQkFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENB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QUcsSUFBSSxDQUFDO1FBRXZCLGtEQUFrRDtRQUNsRCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVyQyx1Q0FBdUM7UUFDdkMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRW5CLDJCQUEyQjtRQUMzQixRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTdCLG9EQUFvRDtRQUNwRCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVyQyw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNiLE9BQU8sRUFBRSxFQUFFO1lBQ1gsS0FBSyxFQUFFLHNCQUFzQjtZQUM3QixhQUFhLEVBQUU7Z0JBQ1gsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsYUFBYSxFQUFFLGtCQUFrQjtnQkFDakMsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLFFBQVEsRUFBRSxHQUFHO2dCQUNiLGVBQWUsRUFBRSxJQUFJO2FBQ3hCO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0gseUJBQXlCO1FBQ3JCLGdFQUFnRTtRQUNoRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQzt3R0FwWVEsU0FBUzs0R0FBVCxTQUFTLGNBRk4sTUFBTTs7NEZBRVQsU0FBUztrQkFIckIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICAgIFNjcmVlbk9wZW5PcHRpb25zLFxyXG4gICAgTmF2aWdhdGlvbk9wdGlvbnMsXHJcbiAgICBCYXNlU2NyZWVuT3B0aW9ucyxcclxuICAgIE5hdmlnYXRlVG9TdWJkb21haW5PcHRpb25zXHJcbn0gZnJvbSAnLi4vaW50ZXJmYWNlL3VpLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25UeXBlLCBTY3JlZW5EaXNwbGF5TW9kZSB9IGZyb20gJy4uL2VudW0vdWkuZW51bSc7XHJcbmltcG9ydCB7IFRhYlNkayB9IGZyb20gJy4uL3RhYi1zZGsuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VOb3RpZmljYXRpb25PcHRpb25zLCBDb25maXJtYXRpb25PcHRpb25zLCBDb25maXJtYXRpb25TZXJ2aWNlLCBOb3RpZmljYXRpb25PcHRpb25zLCBOb3RpZmljYXRpb25TZXJ2aWNlLCBOb3RpZmljYXRpb25UeXBlIH0gZnJvbSAnQHRlY2hleHRlbnNvci90YWItY29yZS11dGlsaXR5JztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVWlTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX25vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uU2VydmljZSk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlID0gaW5qZWN0KENvbmZpcm1hdGlvblNlcnZpY2UpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3BlbiBhIHNjcmVlbiB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLiBUaGUgbW9kZSBkZXRlcm1pbmVzIGhvdyB0aGUgc2NyZWVuIGlzXHJcbiAgICAgKiBkaXNwbGF5ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIG9wZW5pbmcgdGhlIHNjcmVlbi5cclxuICAgICAqL1xyXG4gICAgb3BlblNjcmVlbihvcHRpb25zOiBTY3JlZW5PcGVuT3B0aW9ucyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHsgbW9kZSwgLi4ub3RoZXJPcHRpb25zIH0gPSBvcHRpb25zO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgICAgICAgY2FzZSBTY3JlZW5EaXNwbGF5TW9kZS5TaWRlYmFyOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93U2lkZWJhcihvdGhlck9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFNjcmVlbkRpc3BsYXlNb2RlLlBvcHVwOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RGlhbG9nKG90aGVyT3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgU2NyZWVuRGlzcGxheU1vZGUuU2FtZVRhYjpcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUbyhvdGhlck9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFNjcmVlbkRpc3BsYXlNb2RlLk5ld1RhYjpcclxuICAgICAgICAgICAgICAgIHRoaXMub3BlbkluTmV3VGFiKG90aGVyT3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPcGVucyBhIHNjcmVlbiBpbiBhIHNpZGViYXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIG9wZW5pbmcgdGhlIHNpZGViYXIuXHJcbiAgICAgKi9cclxuICAgIHNob3dTaWRlYmFyKG9wdGlvbnM6IEJhc2VTY3JlZW5PcHRpb25zKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgb3RoZXJDb25maWd1cmF0aW9uID0ge1xyXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy50aXRsZSAmJiB7IHRpdGxlOiBvcHRpb25zLnRpdGxlIH0pLFxyXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy53aWR0aCAmJiB7IHdpZHRoOiBvcHRpb25zLndpZHRoIH0pLFxyXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5oZWlnaHQgJiYgeyBoZWlnaHQ6IG9wdGlvbnMuaGVpZ2h0IH0pLFxyXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5jdXN0b21DbGFzcyAmJiB7IGN1c3RvbUNsYXNzOiBvcHRpb25zLmN1c3RvbUNsYXNzIH0pLFxyXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5yZWZyZXNoZXIgJiYgeyByZWZyZXNoZXI6IG9wdGlvbnMucmVmcmVzaGVyIH0pLFxyXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5jbG9zZXIgJiYgeyBjbG9zZXI6IG9wdGlvbnMuY2xvc2VyIH0pXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgVGFiU2RrLnV0aWw/Lm9wZW5TY3JlZW4oXHJcbiAgICAgICAgICAgIFNjcmVlbkRpc3BsYXlNb2RlLlNpZGViYXIsXHJcbiAgICAgICAgICAgIG9wdGlvbnMuc2NyZWVuSWQsXHJcbiAgICAgICAgICAgIG9wdGlvbnMucmVxdG9rZW5zIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgb3B0aW9ucy5zdWJtaXNzaW9uIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMob3RoZXJDb25maWd1cmF0aW9uKS5sZW5ndGggPiAwID8gb3RoZXJDb25maWd1cmF0aW9uIDogdW5kZWZpbmVkXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wZW5zIGEgc2NyZWVuIGluIGEgcG9wdXAgZGlhbG9nLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBvcGVuaW5nIHRoZSBkaWFsb2cuXHJcbiAgICAgKi9cclxuICAgIHNob3dEaWFsb2cob3B0aW9uczogQmFzZVNjcmVlbk9wdGlvbnMpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBvdGhlckNvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICAgICAgICAgIC4uLihvcHRpb25zLnRpdGxlICYmIHsgdGl0bGU6IG9wdGlvbnMudGl0bGUgfSksXHJcbiAgICAgICAgICAgIC4uLihvcHRpb25zLndpZHRoICYmIHsgd2lkdGg6IG9wdGlvbnMud2lkdGggfSksXHJcbiAgICAgICAgICAgIC4uLihvcHRpb25zLmhlaWdodCAmJiB7IGhlaWdodDogb3B0aW9ucy5oZWlnaHQgfSksXHJcbiAgICAgICAgICAgIC4uLihvcHRpb25zLmN1c3RvbUNsYXNzICYmIHsgY3VzdG9tQ2xhc3M6IG9wdGlvbnMuY3VzdG9tQ2xhc3MgfSksXHJcbiAgICAgICAgICAgIC4uLihvcHRpb25zLnJlZnJlc2hlciAmJiB7IHJlZnJlc2hlcjogb3B0aW9ucy5yZWZyZXNoZXIgfSksXHJcbiAgICAgICAgICAgIC4uLihvcHRpb25zLmNsb3NlciAmJiB7IGNsb3Nlcjogb3B0aW9ucy5jbG9zZXIgfSlcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBUYWJTZGsudXRpbD8ub3BlblNjcmVlbihcclxuICAgICAgICAgICAgU2NyZWVuRGlzcGxheU1vZGUuUG9wdXAsXHJcbiAgICAgICAgICAgIG9wdGlvbnMuc2NyZWVuSWQsXHJcbiAgICAgICAgICAgIG9wdGlvbnMucmVxdG9rZW5zIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgb3B0aW9ucy5zdWJtaXNzaW9uIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMob3RoZXJDb25maWd1cmF0aW9uKS5sZW5ndGggPiAwID8gb3RoZXJDb25maWd1cmF0aW9uIDogdW5kZWZpbmVkXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE5hdmlnYXRlcyB0byBhIHNjcmVlbiB3aXRoaW4gdGhlIHNhbWUgdGFiLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIG5hdmlnYXRpb24sIGluY2x1ZGluZyBzY3JlZW5JZCBhbmQgb3B0aW9uYWwgcmVxdG9rZW5zLlxyXG4gICAgICovXHJcbiAgICBuYXZpZ2F0ZVRvKG9wdGlvbnM6IE5hdmlnYXRpb25PcHRpb25zKTogdm9pZCB7XHJcbiAgICAgICAgVGFiU2RrLnV0aWw/Lm9wZW5TY3JlZW4oXHJcbiAgICAgICAgICAgIFNjcmVlbkRpc3BsYXlNb2RlLlNhbWVUYWIsXHJcbiAgICAgICAgICAgIG9wdGlvbnMuc2NyZWVuSWQsXHJcbiAgICAgICAgICAgIG9wdGlvbnMucmVxdG9rZW5zIHx8IHVuZGVmaW5lZFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOYXZpZ2F0ZXMgdG8gYSBzY3JlZW4gaW4gYSBuZXcgdGFiLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBuYXZpZ2F0aW9uLCBpbmNsdWRpbmcgc2NyZWVuSWQgYW5kIG9wdGlvbmFsIHJlcXRva2Vucy5cclxuICAgICAqL1xyXG4gICAgb3BlbkluTmV3VGFiKG9wdGlvbnM6IE5hdmlnYXRpb25PcHRpb25zKTogdm9pZCB7XHJcbiAgICAgICAgVGFiU2RrLnV0aWw/Lm9wZW5TY3JlZW4oXHJcbiAgICAgICAgICAgIFNjcmVlbkRpc3BsYXlNb2RlLk5ld1RhYixcclxuICAgICAgICAgICAgb3B0aW9ucy5zY3JlZW5JZCxcclxuICAgICAgICAgICAgb3B0aW9ucy5yZXF0b2tlbnMgfHwgdW5kZWZpbmVkXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE5hdmlnYXRlcyB0byB0aGUgc3BlY2lmaWVkIFVSTC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdXJsIC0gVGhlIFVSTCB0byBuYXZpZ2F0ZSB0by5cclxuICAgICAqL1xyXG4gICAgbmF2aWdhdGVUb1VybChwYXJhbXM6IHsgdXJsOiBzdHJpbmcsIGV4dHJhcz86IGFueSwgcmVwbGFjZVVybD86IGJvb2xlYW4gfSk6IHZvaWQge1xyXG4gICAgICAgIFRhYlNkay51dGlsPy5uYXZpZ2F0ZVRvKHtcclxuICAgICAgICAgICAgLi4ucGFyYW1zLFxyXG4gICAgICAgICAgICB0eXBlOiBOYXZpZ2F0aW9uVHlwZS5OYXZpZ2F0ZVRvVXJsXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE5hdmlnYXRlcyB0byBhIHNwZWNpZmllZCBzdWJkb21haW4gdXNpbmcgdGhlIHByb3ZpZGVkIG9wdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgbmF2aWdhdGlvbiwgaW5jbHVkaW5nIHN1YkRvbWFpbiwgYXBwQ29kZSwgYW5kIHVybC5cclxuICAgICAqL1xyXG4gICAgbmF2aWdhdGVUb1N1YmRvbWFpbihvcHRpb25zOiBOYXZpZ2F0ZVRvU3ViZG9tYWluT3B0aW9ucyk6IHZvaWQge1xyXG4gICAgICAgIFRhYlNkay51dGlsPy5uYXZpZ2F0ZVRvKHtcclxuICAgICAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICAgICAgdHlwZTogTmF2aWdhdGlvblR5cGUuTmF2aWdhdGVUb1N1YmRvbWFpblxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdGl2ZSBzY3JlZW4gSUQgZnJvbSB0aGUgY3VycmVudCBVUkwuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgVGhlIHNjcmVlbiBJRCBpZiBwcmVzZW50IGluIHRoZSBVUkwsIG90aGVyd2lzZSB1bmRlZmluZWQuXHJcbiAgICAgKi9cclxuICAgIGdldEFjdGl2ZVVybFNjcmVlbklkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgLy8gU3BsaXQgdGhlIFVSTCBwYXRobmFtZSBpbnRvIHBhcnRzIHVzaW5nIHRoZSAnLycgY2hhcmFjdGVyIGFzIGEgZGVsaW1pdGVyXHJcbiAgICAgICAgY29uc3QgdXJsUGFydHMgPSB3aW5kb3c/LmxvY2F0aW9uPy5wYXRobmFtZT8uc3BsaXQoJy8nKTtcclxuICAgICAgICAvLyBFeHRyYWN0IHRoZSBzY3JlZW4gSUQgcGFydCBhbmQgcmVtb3ZlIGFueSBxdWVyeSBwYXJhbWV0ZXJzXHJcbiAgICAgICAgY29uc3Qgc2NyZWVuSWQgPSB1cmxQYXJ0cz8ubGVuZ3RoID4gMSA/IHVybFBhcnRzPy5bdXJsUGFydHM/Lmxlbmd0aCAtIDFdPy5zcGxpdCgnPycpWzBdIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIC8vIFJldHVybiB0aGUgc2NyZWVuIElEIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcclxuICAgICAgICByZXR1cm4gc2NyZWVuSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdGl2ZSByZWRpcmVjdCBVUkwgYnkgY29tYmluaW5nIHRoZSBhY3RpdmUgc2NyZWVuIElEIGFuZCBhbnkgcXVlcnkgcGFyYW1ldGVycy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgY29uc3RydWN0ZWQgcmVkaXJlY3QgVVJMIG9yIHVuZGVmaW5lZCBpZiBubyBzY3JlZW4gSUQgaXMgcHJlc2VudC5cclxuICAgICAqL1xyXG4gICAgZ2V0QWN0aXZlUmVkaXJlY3RVcmwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICAvLyBHZXQgdGhlIGFjdGl2ZSBzY3JlZW4gSUQgZnJvbSB0aGUgY3VycmVudCBVUkxcclxuICAgICAgICBjb25zdCBzY3JlZW5JZCA9IHRoaXMuZ2V0QWN0aXZlVXJsU2NyZWVuSWQoKTtcclxuICAgICAgICBsZXQgcmVkaXJlY3RVUkw7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IFVSTCBjb250YWlucyBhIHNjcmVlbiBJRFxyXG4gICAgICAgIGlmIChzY3JlZW5JZCkge1xyXG4gICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoZSByZWRpcmVjdCBVUkwgd2l0aCB0aGUgc2NyZWVuIElEXHJcbiAgICAgICAgICAgIHJlZGlyZWN0VVJMID0gc2NyZWVuSWQ7XHJcblxyXG4gICAgICAgICAgICAvLyBQYXJzZSB0aGUgY3VycmVudCBVUkwncyBxdWVyeSBwYXJhbWV0ZXJzXHJcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBxdWVyeSBwYXJhbWV0ZXJzLCBhcHBlbmQgdGhlbSB0byB0aGUgcmVkaXJlY3QgVVJMXHJcbiAgICAgICAgICAgIGlmIChxdWVyeVBhcmFtcy50b1N0cmluZygpKSB7XHJcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVSTCArPSBgJiR7cXVlcnlQYXJhbXMudG9TdHJpbmcoKX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBSZXR1cm4gdGhlIGNvbnN0cnVjdGVkIHJlZGlyZWN0IFVSTCBvciB1bmRlZmluZWRcclxuICAgICAgICByZXR1cm4gcmVkaXJlY3RVUkw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaG93IGEgbm90aWZpY2F0aW9uIHRvIHRoZSB1c2VyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciB0aGUgbm90aWZpY2F0aW9uLlxyXG4gICAgICovXHJcbiAgICBub3RpZnkob3B0aW9uczogTm90aWZpY2F0aW9uT3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLm5vdGlmeSh7XHJcbiAgICAgICAgICAgIHR5cGU6IG9wdGlvbnMudHlwZSxcclxuICAgICAgICAgICAgbWVzc2FnZTogVGFiU2RrLnRyYW5zbGF0b3IudHJhbnNsYXRlKG9wdGlvbnMubWVzc2FnZSksXHJcbiAgICAgICAgICAgIC4uLihvcHRpb25zPy50aXRsZSA/IHsgdGl0bGU6IFRhYlNkay50cmFuc2xhdG9yLnRyYW5zbGF0ZShvcHRpb25zLnRpdGxlKSB9IDoge30pLFxyXG4gICAgICAgICAgICAuLi4ob3B0aW9ucz8uY29uZmlndXJhdGlvbiA/IHsgY29uZmlndXJhdGlvbjogb3B0aW9ucy5jb25maWd1cmF0aW9uIH0gOiB7fSksXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwbGF5cyBhIHN1Y2Nlc3Mgbm90aWZpY2F0aW9uIHRvIHRoZSB1c2VyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBub3RpZmljYXRpb24sIGluY2x1ZGluZyBtZXNzYWdlLCB0aXRsZSwgYW5kIGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHNob3dTdWNjZXNzKG9wdGlvbnM6IEJhc2VOb3RpZmljYXRpb25PcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubm90aWZ5KHtcclxuICAgICAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICAgICAgdHlwZTogTm90aWZpY2F0aW9uVHlwZS5TdWNjZXNzLFxyXG4gICAgICAgICAgICB0aXRsZTogb3B0aW9ucz8udGl0bGUgPz8gJ1N1Y2Nlc3MnXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwbGF5cyBhIHdhcm5pbmcgbm90aWZpY2F0aW9uIHRvIHRoZSB1c2VyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBub3RpZmljYXRpb24sIGluY2x1ZGluZyBtZXNzYWdlLCB0aXRsZSwgYW5kIGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHNob3dXYXJuaW5nKG9wdGlvbnM6IEJhc2VOb3RpZmljYXRpb25PcHRpb25zKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubm90aWZ5KHtcclxuICAgICAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICAgICAgdHlwZTogTm90aWZpY2F0aW9uVHlwZS5XYXJuaW5nLFxyXG4gICAgICAgICAgICB0aXRsZTogb3B0aW9ucz8udGl0bGUgPz8gJ1dhcm5pbmcnXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwbGF5cyBhbiBpbmZvIG5vdGlmaWNhdGlvbiB0byB0aGUgdXNlci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgbm90aWZpY2F0aW9uLCBpbmNsdWRpbmcgbWVzc2FnZSwgdGl0bGUsIGFuZCBjb25maWd1cmF0aW9uLlxyXG4gICAgICovXHJcbiAgICBzaG93SW5mbyhvcHRpb25zOiBCYXNlTm90aWZpY2F0aW9uT3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5vdGlmeSh7XHJcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuSW5mbyxcclxuICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnM/LnRpdGxlID8/ICdJbmZvJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcGxheXMgYW4gZXJyb3Igbm90aWZpY2F0aW9uIHRvIHRoZSB1c2VyLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBub3RpZmljYXRpb24sIGluY2x1ZGluZyBtZXNzYWdlLCB0aXRsZSwgYW5kIGNvbmZpZ3VyYXRpb24uXHJcbiAgICAgKi9cclxuICAgIHNob3dFcnJvcihvcHRpb25zOiBCYXNlTm90aWZpY2F0aW9uT3B0aW9ucykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5vdGlmeSh7XHJcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuRXJyb3IsXHJcbiAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zPy50aXRsZSA/PyAnRXJyb3InXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbGVhcnMgYSBub3RpZmljYXRpb24gYnkgSUQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG5vdGlmaWNhdGlvbklkIC0gVGhlIElEIG9mIHRoZSBub3RpZmljYXRpb24gdG8gY2xlYXIuXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgY2xlYXJlZCBub3RpZmljYXRpb24sIG9yIG51bGwgaWYgdGhlIG5vdGlmaWNhdGlvbiBkb2Vzbid0IGV4aXN0LlxyXG4gICAgICovXHJcbiAgICBjbGVhck5vdGlmaWNhdGlvbihub3RpZmljYXRpb25JZDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWNhdGlvblNlcnZpY2UuY2xlYXJOb3RpZmljYXRpb24obm90aWZpY2F0aW9uSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzcGxheXMgYSBjb25maXJtYXRpb24gZGlhbG9nIHRvIHRoZSB1c2VyIGFuZCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzXHJcbiAgICAgKiB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSB1c2VyIGNvbmZpcm1lZCB0aGUgYWN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLCBpbmNsdWRpbmcgdGl0bGUsIG1lc3NhZ2UsXHJcbiAgICAgKiBjb25maXJtVGV4dCwgY2FuY2VsVGV4dCwgYW5kIHZpc2liaWxpdHkgb2YgYnV0dG9ucy5cclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRydWUgaWYgdGhlIHVzZXIgY29uZmlybXMsIGZhbHNlIG90aGVyd2lzZS5cclxuICAgICAqL1xyXG4gICAgY29uZmlybShvcHRpb25zPzogQ29uZmlybWF0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9jb25maXJtYXRpb25TZXJ2aWNlLmNvbmZpcm0ob3B0aW9ucylcclxuICAgICAgICAgICAgICAgID8uc3Vic2NyaWJlKChpc0NvbmZpcm1lZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoaXNDb25maXJtZWQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwbGF5cyBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgdG8gdGhlIHVzZXIgd2l0aCBhIHRpdGxlIGFuZCBtZXNzYWdlIHRoYXQgaW5kaWNhdGVzXHJcbiAgICAgKiB0aGUgdXNlciBpcyBhYm91dCB0byBkZWxldGUgYW4gaXRlbS4gVGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgaGFzIGEgXCJEZWxldGVcIiBhbmQgXCJDYW5jZWxcIlxyXG4gICAgICogYnV0dG9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLCBpbmNsdWRpbmcgdGhlIGl0ZW0gbmFtZSBhbmRcclxuICAgICAqIG9wdGlvbmFsIG1lc3NhZ2UuXHJcbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0cnVlIGlmIHRoZSB1c2VyIGNvbmZpcm1zLCBmYWxzZSBvdGhlcndpc2UuXHJcbiAgICAgKi9cclxuICAgIGNvbmZpcm1EZWxldGUob3B0aW9ucz86IENvbmZpcm1hdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb25maXJtKHtcclxuICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnM/LnRpdGxlID8/IGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcmVjb3JkYCxcclxuICAgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucz8ubWVzc2FnZSA/PyBgWW91IGFyZSBhYm91dCB0byBkZWxldGUgdGhlIHNlbGVjdGVkIHJlY29yZC4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHByb2NlZWQ/YCxcclxuICAgICAgICAgICAgcHJpbWFyeU9wdGlvbjogJ0RlbGV0ZScsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEaXNwbGF5cyBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgdG8gdGhlIHVzZXIgd2l0aCBhIHRpdGxlIGFuZCBtZXNzYWdlIHRoYXQgaW5kaWNhdGVzXHJcbiAgICAgKiB0aGUgdXNlciBpcyBhYm91dCB0byBkaXNjYXJkIGNoYW5nZXMgdG8gYW4gaXRlbS4gVGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgaGFzIGEgXCJEaXNjYXJkXCJcclxuICAgICAqIGFuZCBcIkNhbmNlbFwiIGJ1dHRvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgY29uZmlybWF0aW9uIGRpYWxvZywgaW5jbHVkaW5nIHRoZSBpdGVtIG5hbWUgYW5kXHJcbiAgICAgKiBvcHRpb25hbCBtZXNzYWdlLlxyXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiB0aGUgdXNlciBjb25maXJtcywgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAgICovXHJcbiAgICBjb25maXJtRGlzY2FyZChvcHRpb25zPzogQ29uZmlybWF0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpcm0oe1xyXG4gICAgICAgICAgICB0aXRsZTogYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNjYXJkIHlvdXIgY2hhbmdlc2AsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnM/Lm1lc3NhZ2UgPz8gYFlvdSBhcmUgYWJvdXQgdG8gZGlzY2FyZCB5b3VyIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBwcm9jZWVkP2AsXHJcbiAgICAgICAgICAgIHByaW1hcnlPcHRpb246ICdEaXNjYXJkJyxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb3NlcyB0aGUgY29uZmlybWF0aW9uIGRpYWxvZy5cclxuICAgICAqXHJcbiAgICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBtYW51YWxseSBjbG9zZSB0aGUgY29uZmlybWF0aW9uIGRpYWxvZy5cclxuICAgICAqL1xyXG4gICAgY2xvc2VDb25maXJtYXRpb25EaWFsb2coKSB7XHJcbiAgICAgICAgLy8gQ2xvc2UgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2dcclxuICAgICAgICB0aGlzLl9jb25maXJtYXRpb25TZXJ2aWNlLmNsb3NlRGlhbG9nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGNvbmZpcm1hdGlvbiBlbWl0dGVyIGZyb20gdGhlIGNvbmZpcm1hdGlvbiBzZXJ2aWNlLlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgY29uZmlybWF0aW9uIGVtaXR0ZXIgdXNlZCBmb3IgZW1pdHRpbmcgY29uZmlybWF0aW9uIGV2ZW50cy5cclxuICAgICAqL1xyXG4gICAgZ2V0Q29uZm9ybWF0aW9uRW1pdHRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlybWF0aW9uU2VydmljZS5nZXRDb25mb3JtYXRpb25FbWl0dGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGRpYWxvZyBlbWl0dGVyIGZyb20gdGhlIGNvbmZpcm1hdGlvbiBzZXJ2aWNlLlxyXG4gICAgICpcclxuICAgICAqIFRoZSBkaWFsb2cgZW1pdHRlciBpcyBhbiBSeEpTIFN1YmplY3QgdGhhdCBlbWl0cyB3aGVuZXZlciBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgaXNcclxuICAgICAqIG9wZW5lZCBvciBjbG9zZWQuIFRoZSB2YWx1ZSBlbWl0dGVkIGlzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYSBkaWFsb2cgaXNcclxuICAgICAqIGN1cnJlbnRseSBvcGVuLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIFRoZSBkaWFsb2cgZW1pdHRlciB1c2VkIGZvciBlbWl0dGluZyBjb25maXJtYXRpb24gZGlhbG9nIGV2ZW50cy5cclxuICAgICAqL1xyXG4gICAgZ2V0RGlhbG9nRW1pdHRlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlybWF0aW9uU2VydmljZS5nZXREaWFsb2dFbWl0dGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIHJlbW92ZSBlbWl0dGVyIGZyb20gdGhlIGNvbmZpcm1hdGlvbiBzZXJ2aWNlLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgcmVtb3ZlIGVtaXR0ZXIgaXMgYW4gUnhKUyBTdWJqZWN0IHRoYXQgZW1pdHMgd2hlbmV2ZXIgYSByZW1vdmFsIGNvbmZpcm1hdGlvblxyXG4gICAgICogZGlhbG9nIGlzIG9wZW5lZCBvciBjbG9zZWQuIFRoZSB2YWx1ZSBlbWl0dGVkIGlzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYVxyXG4gICAgICogcmVtb3ZhbCBkaWFsb2cgaXMgY3VycmVudGx5IG9wZW4uXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIFRoZSByZW1vdmUgZW1pdHRlciB1c2VkIGZvciBlbWl0dGluZyByZW1vdmFsIGNvbmZpcm1hdGlvbiBkaWFsb2cgZXZlbnRzLlxyXG4gICAgICovXHJcbiAgICBnZXRSZW1vdmVFbWl0dGVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maXJtYXRpb25TZXJ2aWNlLmdldFJlbW92ZUVtaXR0ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvcGllcyB0aGUgcHJvdmlkZWQgdGV4dCB0byB0aGUgY2xpcGJvYXJkIGFuZCBkaXNwbGF5cyBhIHN1Y2Nlc3Mgbm90aWZpY2F0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdG8gYmUgY29waWVkIHRvIHRoZSBjbGlwYm9hcmQuXHJcbiAgICAgKi9cclxuICAgIGNvcHlUb0NsaXBib2FyZCh0ZXh0OiBzdHJpbmcpIHtcclxuICAgICAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgaW5wdXQgZWxlbWVudCB0byBob2xkIHRoZSB0ZXh0XHJcbiAgICAgICAgY29uc3QgdGVtcElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xyXG5cclxuICAgICAgICAvLyBTZXQgdGhlIGlucHV0J3MgdmFsdWUgdG8gdGhlIHRleHQgdG8gYmUgY29waWVkXHJcbiAgICAgICAgdGVtcElucHV0LnZhbHVlID0gdGV4dDtcclxuXHJcbiAgICAgICAgLy8gQXBwZW5kIHRoZSB0ZW1wb3JhcnkgaW5wdXQgdG8gdGhlIGRvY3VtZW50IGJvZHlcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlbXBJbnB1dCk7XHJcblxyXG4gICAgICAgIC8vIFNlbGVjdCB0aGUgdGV4dCBpbiB0aGUgaW5wdXQgZWxlbWVudFxyXG4gICAgICAgIHRlbXBJbnB1dC5zZWxlY3QoKTtcclxuXHJcbiAgICAgICAgLy8gRXhlY3V0ZSB0aGUgY29weSBjb21tYW5kXHJcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoXCJjb3B5XCIpO1xyXG5cclxuICAgICAgICAvLyBSZW1vdmUgdGhlIHRlbXBvcmFyeSBpbnB1dCBmcm9tIHRoZSBkb2N1bWVudCBib2R5XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZW1wSW5wdXQpO1xyXG5cclxuICAgICAgICAvLyBTaG93IGEgc3VjY2VzcyBub3RpZmljYXRpb25cclxuICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHtcclxuICAgICAgICAgICAgbWVzc2FnZTogXCJcIixcclxuICAgICAgICAgICAgdGl0bGU6IFwiQ29waWVkIHRvIGNsaXBib2FyZCFcIixcclxuICAgICAgICAgICAgY29uZmlndXJhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgdGltZU91dDogMTAwMCxcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uQ2xhc3M6ICd0b2FzdC10b3AtY2VudGVyJyxcclxuICAgICAgICAgICAgICAgIGVhc2luZzogJ2Vhc2UtaW4nLFxyXG4gICAgICAgICAgICAgICAgZWFzZVRpbWU6IDMwMCxcclxuICAgICAgICAgICAgICAgIGV4dGVuZGVkVGltZU91dDogMjAwMCxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29waWVzIHRoZSBjdXJyZW50IFVSTCB0byB0aGUgY2xpcGJvYXJkIGFuZCBkaXNwbGF5cyBhIHN1Y2Nlc3Mgbm90aWZpY2F0aW9uLlxyXG4gICAgICovXHJcbiAgICBjb3B5Q3VycmVudFVybFRvQ2xpcGJvYXJkKCkge1xyXG4gICAgICAgIC8vIFVzZSB0aGUgY29weVRvQ2xpcGJvYXJkIG1ldGhvZCB0byBjb3B5IHRoZSBjdXJyZW50IHdpbmRvdyBVUkxcclxuICAgICAgICB0aGlzLmNvcHlUb0NsaXBib2FyZCh3aW5kb3cubG9jYXRpb24uaHJlZik7XHJcbiAgICB9XHJcbn0iXX0=
344
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhYi1zZGsvc3JjL2xpYi91aS91aS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBT25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFnRCxtQkFBbUIsRUFBdUIsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7QUFLL0ssTUFBTSxPQUFPLFNBQVM7SUFDRCxvQkFBb0IsR0FBd0IsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDeEUsb0JBQW9CLEdBQXdCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRXpGOzs7OztPQUtHO0lBQ0gsVUFBVSxDQUFDLE9BQTBCO1FBQ2pDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFFMUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNYLEtBQUssaUJBQWlCLENBQUMsT0FBTztnQkFDMUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDL0IsTUFBTTtZQUVWLEtBQUssaUJBQWlCLENBQUMsS0FBSztnQkFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDOUIsTUFBTTtZQUVWLEtBQUssaUJBQWlCLENBQUMsT0FBTztnQkFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDOUIsTUFBTTtZQUVWLEtBQUssaUJBQWlCLENBQUMsTUFBTTtnQkFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDaEMsTUFBTTtRQUNkLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxPQUEwQjtRQUNsQyxNQUFNLGtCQUFrQixHQUFHO1lBQ3ZCLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM5QyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pELEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNoRSxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDMUQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3BELENBQUM7UUFFRixNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FDbkIsaUJBQWlCLENBQUMsT0FBTyxFQUN6QixPQUFPLENBQUMsUUFBUSxFQUNoQixPQUFPLENBQUMsU0FBUyxJQUFJLFNBQVMsRUFDOUIsT0FBTyxDQUFDLFVBQVUsSUFBSSxTQUFTLEVBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUM5RSxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsT0FBMEI7UUFDakMsTUFBTSxrQkFBa0IsR0FBRztZQUN2QixHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDOUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzlDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqRCxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDaEUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzFELEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNwRCxDQUFDO1FBRUYsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQ25CLGlCQUFpQixDQUFDLEtBQUssRUFDdkIsT0FBTyxDQUFDLFFBQVEsRUFDaEIsT0FBTyxDQUFDLFNBQVMsSUFBSSxTQUFTLEVBQzlCLE9BQU8sQ0FBQyxVQUFVLElBQUksU0FBUyxFQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDOUUsQ0FBQztJQUNOLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLE9BQTBCO1FBQ2pDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUNuQixpQkFBaUIsQ0FBQyxPQUFPLEVBQ3pCLE9BQU8sQ0FBQyxRQUFRLEVBQ2hCLE9BQU8sQ0FBQyxTQUFTLElBQUksU0FBUyxDQUNqQyxDQUFDO0lBQ04sQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxZQUFZLENBQUMsT0FBMEI7UUFDbkMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQ25CLGlCQUFpQixDQUFDLE1BQU0sRUFDeEIsT0FBTyxDQUFDLFFBQVEsRUFDaEIsT0FBTyxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQ2pDLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGFBQWEsQ0FBQyxNQUEyRDtRQUNyRSxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztZQUNwQixHQUFHLE1BQU07WUFDVCxJQUFJLEVBQUUsY0FBYyxDQUFDLGFBQWE7U0FDckMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxtQkFBbUIsQ0FBQyxPQUFtQztRQUNuRCxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztZQUNwQixHQUFHLE9BQU87WUFDVixJQUFJLEVBQUUsY0FBYyxDQUFDLG1CQUFtQjtTQUMzQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG9CQUFvQjtRQUNoQiwyRUFBMkU7UUFDM0UsTUFBTSxRQUFRLEdBQUcsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hELDZEQUE2RDtRQUM3RCxNQUFNLFFBQVEsR0FBRyxRQUFRLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNwRyxpREFBaUQ7UUFDakQsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxvQkFBb0I7UUFDaEIsZ0RBQWdEO1FBQ2hELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzdDLElBQUksV0FBVyxDQUFDO1FBRWhCLGdEQUFnRDtRQUNoRCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ1gsaURBQWlEO1lBQ2pELFdBQVcsR0FBRyxRQUFRLENBQUM7WUFFdkIsMkNBQTJDO1lBQzNDLE1BQU0sV0FBVyxHQUFHLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFaEUsaUVBQWlFO1lBQ2pFLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7Z0JBQ3pCLFdBQVcsSUFBSSxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO1lBQ2hELENBQUM7UUFDTCxDQUFDO1FBRUQsbURBQW1EO1FBQ25ELE9BQU8sV0FBVyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLE9BQTRCO1FBQy9CLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQztZQUNwQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDbEIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDckQsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDaEYsR0FBRyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQzlFLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLE9BQWdDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNmLEdBQUcsT0FBTztZQUNWLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPO1lBQzlCLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxJQUFJLFNBQVM7U0FDckMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxXQUFXLENBQUMsT0FBZ0M7UUFDeEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ2YsR0FBRyxPQUFPO1lBQ1YsSUFBSSxFQUFFLGdCQUFnQixDQUFDLE9BQU87WUFDOUIsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLElBQUksU0FBUztTQUNyQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVEsQ0FBQyxPQUFnQztRQUNyQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDZixHQUFHLE9BQU87WUFDVixJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSTtZQUMzQixLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssSUFBSSxNQUFNO1NBQ2xDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsU0FBUyxDQUFDLE9BQWdDO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNmLEdBQUcsT0FBTztZQUNWLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLO1lBQzVCLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxJQUFJLE9BQU87U0FDbkMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsaUJBQWlCLENBQUMsY0FBc0I7UUFDcEMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxPQUFPLENBQUMsT0FBNkI7UUFDakMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzNCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO2dCQUN0QyxFQUFFLFNBQVMsQ0FBQyxDQUFDLFdBQW9CLEVBQUUsRUFBRTtnQkFDakMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxhQUFhLENBQUMsT0FBNkI7UUFDdkMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ2hCLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxJQUFJLDZDQUE2QztZQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sSUFBSSxnRkFBZ0Y7WUFDN0csYUFBYSxFQUFFLFFBQVE7U0FDMUIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsY0FBYyxDQUFDLE9BQTZCO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNoQixLQUFLLEVBQUUsK0NBQStDO1lBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxJQUFJLDBFQUEwRTtZQUN2RyxhQUFhLEVBQUUsU0FBUztTQUMzQixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHVCQUF1QjtRQUNuQixnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsc0JBQXNCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsZ0JBQWdCO1FBQ1osT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxnQkFBZ0I7UUFDWixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsZUFBZSxDQUFDLElBQVk7UUFDeEIsb0RBQW9EO1FBQ3BELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbEQsaURBQWlEO1FBQ2pELFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBRXZCLGtEQUFrRDtRQUNsRCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVyQyx1Q0FBdUM7UUFDdkMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRW5CLDJCQUEyQjtRQUMzQixRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTdCLG9EQUFvRDtRQUNwRCxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVyQyw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNiLE9BQU8sRUFBRSxFQUFFO1lBQ1gsS0FBSyxFQUFFLHNCQUFzQjtZQUM3QixhQUFhLEVBQUU7Z0JBQ1gsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsYUFBYSxFQUFFLGtCQUFrQjtnQkFDakMsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLFFBQVEsRUFBRSxHQUFHO2dCQUNiLGVBQWUsRUFBRSxJQUFJO2FBQ3hCO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOztPQUVHO0lBQ0gseUJBQXlCO1FBQ3JCLGdFQUFnRTtRQUNoRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQzt3R0FwWVEsU0FBUzs0R0FBVCxTQUFTLGNBRk4sTUFBTTs7NEZBRVQsU0FBUztrQkFIckIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgU2NyZWVuT3Blbk9wdGlvbnMsXG4gICAgTmF2aWdhdGlvbk9wdGlvbnMsXG4gICAgQmFzZVNjcmVlbk9wdGlvbnMsXG4gICAgTmF2aWdhdGVUb1N1YmRvbWFpbk9wdGlvbnNcbn0gZnJvbSAnLi4vaW50ZXJmYWNlL3VpLmludGVyZmFjZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uVHlwZSwgU2NyZWVuRGlzcGxheU1vZGUgfSBmcm9tICcuLi9lbnVtL3VpLmVudW0nO1xuaW1wb3J0IHsgVGFiU2RrIH0gZnJvbSAnLi4vdGFiLXNkay5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VOb3RpZmljYXRpb25PcHRpb25zLCBDb25maXJtYXRpb25PcHRpb25zLCBDb25maXJtYXRpb25TZXJ2aWNlLCBOb3RpZmljYXRpb25PcHRpb25zLCBOb3RpZmljYXRpb25TZXJ2aWNlLCBOb3RpZmljYXRpb25UeXBlIH0gZnJvbSAnQHRlY2hleHRlbnNvci90YWItY29yZS11dGlsaXR5JztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBVaVNlcnZpY2Uge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX25vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSA9IGluamVjdChDb25maXJtYXRpb25TZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqIE9wZW4gYSBzY3JlZW4gd2l0aCB0aGUgZ2l2ZW4gb3B0aW9ucy4gVGhlIG1vZGUgZGV0ZXJtaW5lcyBob3cgdGhlIHNjcmVlbiBpc1xuICAgICAqIGRpc3BsYXllZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBvcGVuaW5nIHRoZSBzY3JlZW4uXG4gICAgICovXG4gICAgb3BlblNjcmVlbihvcHRpb25zOiBTY3JlZW5PcGVuT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IG1vZGUsIC4uLm90aGVyT3B0aW9ucyB9ID0gb3B0aW9ucztcblxuICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgU2NyZWVuRGlzcGxheU1vZGUuU2lkZWJhcjpcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dTaWRlYmFyKG90aGVyT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgU2NyZWVuRGlzcGxheU1vZGUuUG9wdXA6XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RGlhbG9nKG90aGVyT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgU2NyZWVuRGlzcGxheU1vZGUuU2FtZVRhYjpcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG8ob3RoZXJPcHRpb25zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBTY3JlZW5EaXNwbGF5TW9kZS5OZXdUYWI6XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuSW5OZXdUYWIob3RoZXJPcHRpb25zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIGEgc2NyZWVuIGluIGEgc2lkZWJhci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciBvcGVuaW5nIHRoZSBzaWRlYmFyLlxuICAgICAqL1xuICAgIHNob3dTaWRlYmFyKG9wdGlvbnM6IEJhc2VTY3JlZW5PcHRpb25zKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG90aGVyQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgICAgICAgIC4uLihvcHRpb25zLnRpdGxlICYmIHsgdGl0bGU6IG9wdGlvbnMudGl0bGUgfSksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy53aWR0aCAmJiB7IHdpZHRoOiBvcHRpb25zLndpZHRoIH0pLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMuaGVpZ2h0ICYmIHsgaGVpZ2h0OiBvcHRpb25zLmhlaWdodCB9KSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zLmN1c3RvbUNsYXNzICYmIHsgY3VzdG9tQ2xhc3M6IG9wdGlvbnMuY3VzdG9tQ2xhc3MgfSksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5yZWZyZXNoZXIgJiYgeyByZWZyZXNoZXI6IG9wdGlvbnMucmVmcmVzaGVyIH0pLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMuY2xvc2VyICYmIHsgY2xvc2VyOiBvcHRpb25zLmNsb3NlciB9KVxuICAgICAgICB9O1xuXG4gICAgICAgIFRhYlNkay51dGlsPy5vcGVuU2NyZWVuKFxuICAgICAgICAgICAgU2NyZWVuRGlzcGxheU1vZGUuU2lkZWJhcixcbiAgICAgICAgICAgIG9wdGlvbnMuc2NyZWVuSWQsXG4gICAgICAgICAgICBvcHRpb25zLnJlcXRva2VucyB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICBvcHRpb25zLnN1Ym1pc3Npb24gfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgT2JqZWN0LmtleXMob3RoZXJDb25maWd1cmF0aW9uKS5sZW5ndGggPiAwID8gb3RoZXJDb25maWd1cmF0aW9uIDogdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3BlbnMgYSBzY3JlZW4gaW4gYSBwb3B1cCBkaWFsb2cuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3Igb3BlbmluZyB0aGUgZGlhbG9nLlxuICAgICAqL1xuICAgIHNob3dEaWFsb2cob3B0aW9uczogQmFzZVNjcmVlbk9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb3RoZXJDb25maWd1cmF0aW9uID0ge1xuICAgICAgICAgICAgLi4uKG9wdGlvbnMudGl0bGUgJiYgeyB0aXRsZTogb3B0aW9ucy50aXRsZSB9KSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zLndpZHRoICYmIHsgd2lkdGg6IG9wdGlvbnMud2lkdGggfSksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5oZWlnaHQgJiYgeyBoZWlnaHQ6IG9wdGlvbnMuaGVpZ2h0IH0pLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnMuY3VzdG9tQ2xhc3MgJiYgeyBjdXN0b21DbGFzczogb3B0aW9ucy5jdXN0b21DbGFzcyB9KSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zLnJlZnJlc2hlciAmJiB7IHJlZnJlc2hlcjogb3B0aW9ucy5yZWZyZXNoZXIgfSksXG4gICAgICAgICAgICAuLi4ob3B0aW9ucy5jbG9zZXIgJiYgeyBjbG9zZXI6IG9wdGlvbnMuY2xvc2VyIH0pXG4gICAgICAgIH07XG5cbiAgICAgICAgVGFiU2RrLnV0aWw/Lm9wZW5TY3JlZW4oXG4gICAgICAgICAgICBTY3JlZW5EaXNwbGF5TW9kZS5Qb3B1cCxcbiAgICAgICAgICAgIG9wdGlvbnMuc2NyZWVuSWQsXG4gICAgICAgICAgICBvcHRpb25zLnJlcXRva2VucyB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICBvcHRpb25zLnN1Ym1pc3Npb24gfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgT2JqZWN0LmtleXMob3RoZXJDb25maWd1cmF0aW9uKS5sZW5ndGggPiAwID8gb3RoZXJDb25maWd1cmF0aW9uIDogdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTmF2aWdhdGVzIHRvIGEgc2NyZWVuIHdpdGhpbiB0aGUgc2FtZSB0YWIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciBuYXZpZ2F0aW9uLCBpbmNsdWRpbmcgc2NyZWVuSWQgYW5kIG9wdGlvbmFsIHJlcXRva2Vucy5cbiAgICAgKi9cbiAgICBuYXZpZ2F0ZVRvKG9wdGlvbnM6IE5hdmlnYXRpb25PcHRpb25zKTogdm9pZCB7XG4gICAgICAgIFRhYlNkay51dGlsPy5vcGVuU2NyZWVuKFxuICAgICAgICAgICAgU2NyZWVuRGlzcGxheU1vZGUuU2FtZVRhYixcbiAgICAgICAgICAgIG9wdGlvbnMuc2NyZWVuSWQsXG4gICAgICAgICAgICBvcHRpb25zLnJlcXRva2VucyB8fCB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOYXZpZ2F0ZXMgdG8gYSBzY3JlZW4gaW4gYSBuZXcgdGFiLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIG5hdmlnYXRpb24sIGluY2x1ZGluZyBzY3JlZW5JZCBhbmQgb3B0aW9uYWwgcmVxdG9rZW5zLlxuICAgICAqL1xuICAgIG9wZW5Jbk5ld1RhYihvcHRpb25zOiBOYXZpZ2F0aW9uT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBUYWJTZGsudXRpbD8ub3BlblNjcmVlbihcbiAgICAgICAgICAgIFNjcmVlbkRpc3BsYXlNb2RlLk5ld1RhYixcbiAgICAgICAgICAgIG9wdGlvbnMuc2NyZWVuSWQsXG4gICAgICAgICAgICBvcHRpb25zLnJlcXRva2VucyB8fCB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOYXZpZ2F0ZXMgdG8gdGhlIHNwZWNpZmllZCBVUkwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIC0gVGhlIFVSTCB0byBuYXZpZ2F0ZSB0by5cbiAgICAgKi9cbiAgICBuYXZpZ2F0ZVRvVXJsKHBhcmFtczogeyB1cmw6IHN0cmluZywgZXh0cmFzPzogYW55LCByZXBsYWNlVXJsPzogYm9vbGVhbiB9KTogdm9pZCB7XG4gICAgICAgIFRhYlNkay51dGlsPy5uYXZpZ2F0ZVRvKHtcbiAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgIHR5cGU6IE5hdmlnYXRpb25UeXBlLk5hdmlnYXRlVG9VcmxcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOYXZpZ2F0ZXMgdG8gYSBzcGVjaWZpZWQgc3ViZG9tYWluIHVzaW5nIHRoZSBwcm92aWRlZCBvcHRpb25zLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgbmF2aWdhdGlvbiwgaW5jbHVkaW5nIHN1YkRvbWFpbiwgYXBwQ29kZSwgYW5kIHVybC5cbiAgICAgKi9cbiAgICBuYXZpZ2F0ZVRvU3ViZG9tYWluKG9wdGlvbnM6IE5hdmlnYXRlVG9TdWJkb21haW5PcHRpb25zKTogdm9pZCB7XG4gICAgICAgIFRhYlNkay51dGlsPy5uYXZpZ2F0ZVRvKHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICB0eXBlOiBOYXZpZ2F0aW9uVHlwZS5OYXZpZ2F0ZVRvU3ViZG9tYWluXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBhY3RpdmUgc2NyZWVuIElEIGZyb20gdGhlIGN1cnJlbnQgVVJMLlxuICAgICAqXG4gICAgICogQHJldHVybnMgVGhlIHNjcmVlbiBJRCBpZiBwcmVzZW50IGluIHRoZSBVUkwsIG90aGVyd2lzZSB1bmRlZmluZWQuXG4gICAgICovXG4gICAgZ2V0QWN0aXZlVXJsU2NyZWVuSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgLy8gU3BsaXQgdGhlIFVSTCBwYXRobmFtZSBpbnRvIHBhcnRzIHVzaW5nIHRoZSAnLycgY2hhcmFjdGVyIGFzIGEgZGVsaW1pdGVyXG4gICAgICAgIGNvbnN0IHVybFBhcnRzID0gd2luZG93Py5sb2NhdGlvbj8ucGF0aG5hbWU/LnNwbGl0KCcvJyk7XG4gICAgICAgIC8vIEV4dHJhY3QgdGhlIHNjcmVlbiBJRCBwYXJ0IGFuZCByZW1vdmUgYW55IHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICAgICAgY29uc3Qgc2NyZWVuSWQgPSB1cmxQYXJ0cz8ubGVuZ3RoID4gMSA/IHVybFBhcnRzPy5bdXJsUGFydHM/Lmxlbmd0aCAtIDFdPy5zcGxpdCgnPycpWzBdIDogdW5kZWZpbmVkO1xuICAgICAgICAvLyBSZXR1cm4gdGhlIHNjcmVlbiBJRCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG4gICAgICAgIHJldHVybiBzY3JlZW5JZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGFjdGl2ZSByZWRpcmVjdCBVUkwgYnkgY29tYmluaW5nIHRoZSBhY3RpdmUgc2NyZWVuIElEIGFuZCBhbnkgcXVlcnkgcGFyYW1ldGVycy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFRoZSBjb25zdHJ1Y3RlZCByZWRpcmVjdCBVUkwgb3IgdW5kZWZpbmVkIGlmIG5vIHNjcmVlbiBJRCBpcyBwcmVzZW50LlxuICAgICAqL1xuICAgIGdldEFjdGl2ZVJlZGlyZWN0VXJsKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIC8vIEdldCB0aGUgYWN0aXZlIHNjcmVlbiBJRCBmcm9tIHRoZSBjdXJyZW50IFVSTFxuICAgICAgICBjb25zdCBzY3JlZW5JZCA9IHRoaXMuZ2V0QWN0aXZlVXJsU2NyZWVuSWQoKTtcbiAgICAgICAgbGV0IHJlZGlyZWN0VVJMO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IFVSTCBjb250YWlucyBhIHNjcmVlbiBJRFxuICAgICAgICBpZiAoc2NyZWVuSWQpIHtcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHJlZGlyZWN0IFVSTCB3aXRoIHRoZSBzY3JlZW4gSURcbiAgICAgICAgICAgIHJlZGlyZWN0VVJMID0gc2NyZWVuSWQ7XG5cbiAgICAgICAgICAgIC8vIFBhcnNlIHRoZSBjdXJyZW50IFVSTCdzIHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcblxuICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIHF1ZXJ5IHBhcmFtZXRlcnMsIGFwcGVuZCB0aGVtIHRvIHRoZSByZWRpcmVjdCBVUkxcbiAgICAgICAgICAgIGlmIChxdWVyeVBhcmFtcy50b1N0cmluZygpKSB7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVUkwgKz0gYCYke3F1ZXJ5UGFyYW1zLnRvU3RyaW5nKCl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJldHVybiB0aGUgY29uc3RydWN0ZWQgcmVkaXJlY3QgVVJMIG9yIHVuZGVmaW5lZFxuICAgICAgICByZXR1cm4gcmVkaXJlY3RVUkw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2hvdyBhIG5vdGlmaWNhdGlvbiB0byB0aGUgdXNlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciB0aGUgbm90aWZpY2F0aW9uLlxuICAgICAqL1xuICAgIG5vdGlmeShvcHRpb25zOiBOb3RpZmljYXRpb25PcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiBvcHRpb25zLnR5cGUsXG4gICAgICAgICAgICBtZXNzYWdlOiBUYWJTZGsudHJhbnNsYXRvci50cmFuc2xhdGUob3B0aW9ucy5tZXNzYWdlKSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zPy50aXRsZSA/IHsgdGl0bGU6IFRhYlNkay50cmFuc2xhdG9yLnRyYW5zbGF0ZShvcHRpb25zLnRpdGxlKSB9IDoge30pLFxuICAgICAgICAgICAgLi4uKG9wdGlvbnM/LmNvbmZpZ3VyYXRpb24gPyB7IGNvbmZpZ3VyYXRpb246IG9wdGlvbnMuY29uZmlndXJhdGlvbiB9IDoge30pLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyBhIHN1Y2Nlc3Mgbm90aWZpY2F0aW9uIHRvIHRoZSB1c2VyLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIG5vdGlmaWNhdGlvbiwgaW5jbHVkaW5nIG1lc3NhZ2UsIHRpdGxlLCBhbmQgY29uZmlndXJhdGlvbi5cbiAgICAgKi9cbiAgICBzaG93U3VjY2VzcyhvcHRpb25zOiBCYXNlTm90aWZpY2F0aW9uT3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuU3VjY2VzcyxcbiAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zPy50aXRsZSA/PyAnU3VjY2VzcydcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSB3YXJuaW5nIG5vdGlmaWNhdGlvbiB0byB0aGUgdXNlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBub3RpZmljYXRpb24sIGluY2x1ZGluZyBtZXNzYWdlLCB0aXRsZSwgYW5kIGNvbmZpZ3VyYXRpb24uXG4gICAgICovXG4gICAgc2hvd1dhcm5pbmcob3B0aW9uczogQmFzZU5vdGlmaWNhdGlvbk9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICB0eXBlOiBOb3RpZmljYXRpb25UeXBlLldhcm5pbmcsXG4gICAgICAgICAgICB0aXRsZTogb3B0aW9ucz8udGl0bGUgPz8gJ1dhcm5pbmcnXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc3BsYXlzIGFuIGluZm8gbm90aWZpY2F0aW9uIHRvIHRoZSB1c2VyLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIG5vdGlmaWNhdGlvbiwgaW5jbHVkaW5nIG1lc3NhZ2UsIHRpdGxlLCBhbmQgY29uZmlndXJhdGlvbi5cbiAgICAgKi9cbiAgICBzaG93SW5mbyhvcHRpb25zOiBCYXNlTm90aWZpY2F0aW9uT3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuSW5mbyxcbiAgICAgICAgICAgIHRpdGxlOiBvcHRpb25zPy50aXRsZSA/PyAnSW5mbydcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYW4gZXJyb3Igbm90aWZpY2F0aW9uIHRvIHRoZSB1c2VyLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIG5vdGlmaWNhdGlvbiwgaW5jbHVkaW5nIG1lc3NhZ2UsIHRpdGxlLCBhbmQgY29uZmlndXJhdGlvbi5cbiAgICAgKi9cbiAgICBzaG93RXJyb3Iob3B0aW9uczogQmFzZU5vdGlmaWNhdGlvbk9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICB0eXBlOiBOb3RpZmljYXRpb25UeXBlLkVycm9yLFxuICAgICAgICAgICAgdGl0bGU6IG9wdGlvbnM/LnRpdGxlID8/ICdFcnJvcidcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIGEgbm90aWZpY2F0aW9uIGJ5IElELlxuICAgICAqXG4gICAgICogQHBhcmFtIG5vdGlmaWNhdGlvbklkIC0gVGhlIElEIG9mIHRoZSBub3RpZmljYXRpb24gdG8gY2xlYXIuXG4gICAgICogQHJldHVybnMgVGhlIGNsZWFyZWQgbm90aWZpY2F0aW9uLCBvciBudWxsIGlmIHRoZSBub3RpZmljYXRpb24gZG9lc24ndCBleGlzdC5cbiAgICAgKi9cbiAgICBjbGVhck5vdGlmaWNhdGlvbihub3RpZmljYXRpb25JZDogbnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLmNsZWFyTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbklkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgdG8gdGhlIHVzZXIgYW5kIHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXNcbiAgICAgKiB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSB1c2VyIGNvbmZpcm1lZCB0aGUgYWN0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2csIGluY2x1ZGluZyB0aXRsZSwgbWVzc2FnZSxcbiAgICAgKiBjb25maXJtVGV4dCwgY2FuY2VsVGV4dCwgYW5kIHZpc2liaWxpdHkgb2YgYnV0dG9ucy5cbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0cnVlIGlmIHRoZSB1c2VyIGNvbmZpcm1zLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgY29uZmlybShvcHRpb25zPzogQ29uZmlybWF0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2NvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybShvcHRpb25zKVxuICAgICAgICAgICAgICAgID8uc3Vic2NyaWJlKChpc0NvbmZpcm1lZDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGlzQ29uZmlybWVkKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSBjb25maXJtYXRpb24gZGlhbG9nIHRvIHRoZSB1c2VyIHdpdGggYSB0aXRsZSBhbmQgbWVzc2FnZSB0aGF0IGluZGljYXRlc1xuICAgICAqIHRoZSB1c2VyIGlzIGFib3V0IHRvIGRlbGV0ZSBhbiBpdGVtLiBUaGUgY29uZmlybWF0aW9uIGRpYWxvZyBoYXMgYSBcIkRlbGV0ZVwiIGFuZCBcIkNhbmNlbFwiXG4gICAgICogYnV0dG9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2csIGluY2x1ZGluZyB0aGUgaXRlbSBuYW1lIGFuZFxuICAgICAqIG9wdGlvbmFsIG1lc3NhZ2UuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiB0aGUgdXNlciBjb25maXJtcywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGNvbmZpcm1EZWxldGUob3B0aW9ucz86IENvbmZpcm1hdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlybSh7XG4gICAgICAgICAgICB0aXRsZTogb3B0aW9ucz8udGl0bGUgPz8gYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyByZWNvcmRgLFxuICAgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucz8ubWVzc2FnZSA/PyBgWW91IGFyZSBhYm91dCB0byBkZWxldGUgdGhlIHNlbGVjdGVkIHJlY29yZC4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHByb2NlZWQ/YCxcbiAgICAgICAgICAgIHByaW1hcnlPcHRpb246ICdEZWxldGUnLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNwbGF5cyBhIGNvbmZpcm1hdGlvbiBkaWFsb2cgdG8gdGhlIHVzZXIgd2l0aCBhIHRpdGxlIGFuZCBtZXNzYWdlIHRoYXQgaW5kaWNhdGVzXG4gICAgICogdGhlIHVzZXIgaXMgYWJvdXQgdG8gZGlzY2FyZCBjaGFuZ2VzIHRvIGFuIGl0ZW0uIFRoZSBjb25maXJtYXRpb24gZGlhbG9nIGhhcyBhIFwiRGlzY2FyZFwiXG4gICAgICogYW5kIFwiQ2FuY2VsXCIgYnV0dG9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBmb3IgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2csIGluY2x1ZGluZyB0aGUgaXRlbSBuYW1lIGFuZFxuICAgICAqIG9wdGlvbmFsIG1lc3NhZ2UuXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdHJ1ZSBpZiB0aGUgdXNlciBjb25maXJtcywgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGNvbmZpcm1EaXNjYXJkKG9wdGlvbnM/OiBDb25maXJtYXRpb25PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpcm0oe1xuICAgICAgICAgICAgdGl0bGU6IGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGlzY2FyZCB5b3VyIGNoYW5nZXNgLFxuICAgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucz8ubWVzc2FnZSA/PyBgWW91IGFyZSBhYm91dCB0byBkaXNjYXJkIHlvdXIgY2hhbmdlcy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHByb2NlZWQ/YCxcbiAgICAgICAgICAgIHByaW1hcnlPcHRpb246ICdEaXNjYXJkJyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvc2VzIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gbWFudWFsbHkgY2xvc2UgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cuXG4gICAgICovXG4gICAgY2xvc2VDb25maXJtYXRpb25EaWFsb2coKSB7XG4gICAgICAgIC8vIENsb3NlIHRoZSBjb25maXJtYXRpb24gZGlhbG9nXG4gICAgICAgIHRoaXMuX2NvbmZpcm1hdGlvblNlcnZpY2UuY2xvc2VEaWFsb2coKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGNvbmZpcm1hdGlvbiBlbWl0dGVyIGZyb20gdGhlIGNvbmZpcm1hdGlvbiBzZXJ2aWNlLlxuICAgICAqIFxuICAgICAqIEByZXR1cm5zIFRoZSBjb25maXJtYXRpb24gZW1pdHRlciB1c2VkIGZvciBlbWl0dGluZyBjb25maXJtYXRpb24gZXZlbnRzLlxuICAgICAqL1xuICAgIGdldENvbmZvcm1hdGlvbkVtaXR0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maXJtYXRpb25TZXJ2aWNlLmdldENvbmZvcm1hdGlvbkVtaXR0ZXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGRpYWxvZyBlbWl0dGVyIGZyb20gdGhlIGNvbmZpcm1hdGlvbiBzZXJ2aWNlLlxuICAgICAqXG4gICAgICogVGhlIGRpYWxvZyBlbWl0dGVyIGlzIGFuIFJ4SlMgU3ViamVjdCB0aGF0IGVtaXRzIHdoZW5ldmVyIGEgY29uZmlybWF0aW9uIGRpYWxvZyBpc1xuICAgICAqIG9wZW5lZCBvciBjbG9zZWQuIFRoZSB2YWx1ZSBlbWl0dGVkIGlzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYSBkaWFsb2cgaXNcbiAgICAgKiBjdXJyZW50bHkgb3Blbi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIFRoZSBkaWFsb2cgZW1pdHRlciB1c2VkIGZvciBlbWl0dGluZyBjb25maXJtYXRpb24gZGlhbG9nIGV2ZW50cy5cbiAgICAgKi9cbiAgICBnZXREaWFsb2dFbWl0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlybWF0aW9uU2VydmljZS5nZXREaWFsb2dFbWl0dGVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSByZW1vdmUgZW1pdHRlciBmcm9tIHRoZSBjb25maXJtYXRpb24gc2VydmljZS5cbiAgICAgKiBcbiAgICAgKiBUaGUgcmVtb3ZlIGVtaXR0ZXIgaXMgYW4gUnhKUyBTdWJqZWN0IHRoYXQgZW1pdHMgd2hlbmV2ZXIgYSByZW1vdmFsIGNvbmZpcm1hdGlvblxuICAgICAqIGRpYWxvZyBpcyBvcGVuZWQgb3IgY2xvc2VkLiBUaGUgdmFsdWUgZW1pdHRlZCBpcyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGFcbiAgICAgKiByZW1vdmFsIGRpYWxvZyBpcyBjdXJyZW50bHkgb3Blbi5cbiAgICAgKiBcbiAgICAgKiBAcmV0dXJucyBUaGUgcmVtb3ZlIGVtaXR0ZXIgdXNlZCBmb3IgZW1pdHRpbmcgcmVtb3ZhbCBjb25maXJtYXRpb24gZGlhbG9nIGV2ZW50cy5cbiAgICAgKi9cbiAgICBnZXRSZW1vdmVFbWl0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlybWF0aW9uU2VydmljZS5nZXRSZW1vdmVFbWl0dGVyKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29waWVzIHRoZSBwcm92aWRlZCB0ZXh0IHRvIHRoZSBjbGlwYm9hcmQgYW5kIGRpc3BsYXlzIGEgc3VjY2VzcyBub3RpZmljYXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0IHRvIGJlIGNvcGllZCB0byB0aGUgY2xpcGJvYXJkLlxuICAgICAqL1xuICAgIGNvcHlUb0NsaXBib2FyZCh0ZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgdGVtcG9yYXJ5IGlucHV0IGVsZW1lbnQgdG8gaG9sZCB0aGUgdGV4dFxuICAgICAgICBjb25zdCB0ZW1wSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG5cbiAgICAgICAgLy8gU2V0IHRoZSBpbnB1dCdzIHZhbHVlIHRvIHRoZSB0ZXh0IHRvIGJlIGNvcGllZFxuICAgICAgICB0ZW1wSW5wdXQudmFsdWUgPSB0ZXh0O1xuXG4gICAgICAgIC8vIEFwcGVuZCB0aGUgdGVtcG9yYXJ5IGlucHV0IHRvIHRoZSBkb2N1bWVudCBib2R5XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGVtcElucHV0KTtcblxuICAgICAgICAvLyBTZWxlY3QgdGhlIHRleHQgaW4gdGhlIGlucHV0IGVsZW1lbnRcbiAgICAgICAgdGVtcElucHV0LnNlbGVjdCgpO1xuXG4gICAgICAgIC8vIEV4ZWN1dGUgdGhlIGNvcHkgY29tbWFuZFxuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZChcImNvcHlcIik7XG5cbiAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhcnkgaW5wdXQgZnJvbSB0aGUgZG9jdW1lbnQgYm9keVxuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRlbXBJbnB1dCk7XG5cbiAgICAgICAgLy8gU2hvdyBhIHN1Y2Nlc3Mgbm90aWZpY2F0aW9uXG4gICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3Moe1xuICAgICAgICAgICAgbWVzc2FnZTogXCJcIixcbiAgICAgICAgICAgIHRpdGxlOiBcIkNvcGllZCB0byBjbGlwYm9hcmQhXCIsXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgdGltZU91dDogMTAwMCxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbkNsYXNzOiAndG9hc3QtdG9wLWNlbnRlcicsXG4gICAgICAgICAgICAgICAgZWFzaW5nOiAnZWFzZS1pbicsXG4gICAgICAgICAgICAgICAgZWFzZVRpbWU6IDMwMCxcbiAgICAgICAgICAgICAgICBleHRlbmRlZFRpbWVPdXQ6IDIwMDAsXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvcGllcyB0aGUgY3VycmVudCBVUkwgdG8gdGhlIGNsaXBib2FyZCBhbmQgZGlzcGxheXMgYSBzdWNjZXNzIG5vdGlmaWNhdGlvbi5cbiAgICAgKi9cbiAgICBjb3B5Q3VycmVudFVybFRvQ2xpcGJvYXJkKCkge1xuICAgICAgICAvLyBVc2UgdGhlIGNvcHlUb0NsaXBib2FyZCBtZXRob2QgdG8gY29weSB0aGUgY3VycmVudCB3aW5kb3cgVVJMXG4gICAgICAgIHRoaXMuY29weVRvQ2xpcGJvYXJkKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICB9XG59Il19
@@ -50,4 +50,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
50
50
  providedIn: 'root'
51
51
  }]
52
52
  }] });
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFiLXNkay9zcmMvbGliL3V0aWwvdXRpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxXQUFXO0lBQ3BCLHVDQUF1QztJQUMvQixRQUFRLEdBQVEsSUFBSSxDQUFDO0lBQ3JCLFlBQVksR0FBRyxLQUFLLENBQUM7SUFFN0I7Ozs7O09BS0c7SUFDSCxJQUFJLENBQUMsT0FBWTtRQUNiLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUV6QixrREFBa0Q7UUFDbEQsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDbkIsR0FBRyxFQUFFLENBQUMsTUFBVyxFQUFFLElBQXFCLEVBQUUsRUFBRTtnQkFDeEMsNkRBQTZEO2dCQUM3RCxJQUFJLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDakIsT0FBUSxNQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7Z0JBRUQscUNBQXFDO2dCQUNyQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBRWpDLCtCQUErQjtnQkFDL0IsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDekQsMkNBQTJDO29CQUMzQyxLQUFLLE1BQU0sV0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7d0JBQ25ELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7d0JBQzNDLElBQUksT0FBTyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxRQUFRLElBQUksT0FBTyxJQUFJLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDOzRCQUMzRyw2Q0FBNkM7NEJBQzdDLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDM0MsQ0FBQztvQkFDTCxDQUFDO2dCQUNMLENBQUM7Z0JBRUQsbURBQW1EO2dCQUNuRCxPQUFPLFNBQVMsQ0FBQztZQUNyQixDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQzt3R0E5Q1EsV0FBVzs0R0FBWCxXQUFXLGNBRlIsTUFBTTs7NEZBRVQsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFV0aWxTZXJ2aWNlIHtcclxuICAgIC8vIFdpbGwgc3RvcmUgdGhlIHNlcnZpY2VzIGZyb20gY29udGV4dFxyXG4gICAgcHJpdmF0ZSBfY29udGV4dDogYW55ID0gbnVsbDtcclxuICAgIHByaXZhdGUgX2luaXRpYWxpemVkID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyB0aGUgVXRpbFNlcnZpY2Ugd2l0aCBjb250ZXh0IHRoYXQgY29udGFpbnMgc2VydmljZSByZWZlcmVuY2VzXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IG9iamVjdCBjb250YWluaW5nIHNlcnZpY2UgcmVmZXJlbmNlc1xyXG4gICAgICogQHJldHVybnMgQSBwcm94eSB0aGF0IGludGVyY2VwdHMgYW5kIGRlbGVnYXRlcyBtZXRob2QgY2FsbHMgdG8gdGhlIGFwcHJvcHJpYXRlIHNlcnZpY2VcclxuICAgICAqL1xyXG4gICAgaW5pdChjb250ZXh0OiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGlmICh0aGlzLl9pbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xyXG4gICAgICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIGEgcHJveHkgdGhhdCB3aWxsIGludGVyY2VwdCBtZXRob2QgY2FsbHNcclxuICAgICAgICByZXR1cm4gbmV3IFByb3h5KHRoaXMsIHtcclxuICAgICAgICAgICAgZ2V0OiAodGFyZ2V0OiBhbnksIHByb3A6IHN0cmluZyB8IHN5bWJvbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gRmlyc3QgY2hlY2sgaWYgdGhlIHByb3BlcnR5IGV4aXN0cyBkaXJlY3RseSBvbiBVdGlsU2VydmljZVxyXG4gICAgICAgICAgICAgICAgaWYgKHByb3AgaW4gdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0YXJnZXQgYXMgYW55KVtwcm9wXTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHN5bWJvbCB0byBzdHJpbmcgaWYgbmVlZGVkXHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHByb3AudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBjb250ZXh0IHNlcnZpY2VzIGZpcnN0XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29udGV4dCAmJiBPYmplY3Qua2V5cyh0aGlzLl9jb250ZXh0KS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggc2VydmljZSBpbiB0aGUgY29udGV4dFxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2VydmljZU5hbWUgb2YgT2JqZWN0LmtleXModGhpcy5fY29udGV4dCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuX2NvbnRleHRbc2VydmljZU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VydmljZSAmJiB0eXBlb2Ygc2VydmljZSA9PT0gJ29iamVjdCcgJiYgcHJvcE5hbWUgaW4gc2VydmljZSAmJiB0eXBlb2Ygc2VydmljZVtwcm9wTmFtZV0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJldHVybiB0aGUgYm91bmQgZnVuY3Rpb24gZnJvbSB0aGUgc2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2VbcHJvcE5hbWVdLmJpbmQoc2VydmljZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSWYgcHJvcGVydHkgbm90IGZvdW5kIGFueXdoZXJlLCByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0iXX0=
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFiLXNkay9zcmMvbGliL3V0aWwvdXRpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxXQUFXO0lBQ3BCLHVDQUF1QztJQUMvQixRQUFRLEdBQVEsSUFBSSxDQUFDO0lBQ3JCLFlBQVksR0FBRyxLQUFLLENBQUM7SUFFN0I7Ozs7O09BS0c7SUFDSCxJQUFJLENBQUMsT0FBWTtRQUNiLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUV6QixrREFBa0Q7UUFDbEQsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDbkIsR0FBRyxFQUFFLENBQUMsTUFBVyxFQUFFLElBQXFCLEVBQUUsRUFBRTtnQkFDeEMsNkRBQTZEO2dCQUM3RCxJQUFJLElBQUksSUFBSSxNQUFNLEVBQUUsQ0FBQztvQkFDakIsT0FBUSxNQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2pDLENBQUM7Z0JBRUQscUNBQXFDO2dCQUNyQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBRWpDLCtCQUErQjtnQkFDL0IsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDekQsMkNBQTJDO29CQUMzQyxLQUFLLE1BQU0sV0FBVyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7d0JBQ25ELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7d0JBQzNDLElBQUksT0FBTyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxRQUFRLElBQUksT0FBTyxJQUFJLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLFVBQVUsRUFBRSxDQUFDOzRCQUMzRyw2Q0FBNkM7NEJBQzdDLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDM0MsQ0FBQztvQkFDTCxDQUFDO2dCQUNMLENBQUM7Z0JBRUQsbURBQW1EO2dCQUNuRCxPQUFPLFNBQVMsQ0FBQztZQUNyQixDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQzt3R0E5Q1EsV0FBVzs0R0FBWCxXQUFXLGNBRlIsTUFBTTs7NEZBRVQsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVXRpbFNlcnZpY2Uge1xuICAgIC8vIFdpbGwgc3RvcmUgdGhlIHNlcnZpY2VzIGZyb20gY29udGV4dFxuICAgIHByaXZhdGUgX2NvbnRleHQ6IGFueSA9IG51bGw7XG4gICAgcHJpdmF0ZSBfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIHRoZSBVdGlsU2VydmljZSB3aXRoIGNvbnRleHQgdGhhdCBjb250YWlucyBzZXJ2aWNlIHJlZmVyZW5jZXNcbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCBvYmplY3QgY29udGFpbmluZyBzZXJ2aWNlIHJlZmVyZW5jZXNcbiAgICAgKiBAcmV0dXJucyBBIHByb3h5IHRoYXQgaW50ZXJjZXB0cyBhbmQgZGVsZWdhdGVzIG1ldGhvZCBjYWxscyB0byB0aGUgYXBwcm9wcmlhdGUgc2VydmljZVxuICAgICAqL1xuICAgIGluaXQoY29udGV4dDogYW55KTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICB0aGlzLl9pbml0aWFsaXplZCA9IHRydWU7XG5cbiAgICAgICAgLy8gUmV0dXJuIGEgcHJveHkgdGhhdCB3aWxsIGludGVyY2VwdCBtZXRob2QgY2FsbHNcbiAgICAgICAgcmV0dXJuIG5ldyBQcm94eSh0aGlzLCB7XG4gICAgICAgICAgICBnZXQ6ICh0YXJnZXQ6IGFueSwgcHJvcDogc3RyaW5nIHwgc3ltYm9sKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gRmlyc3QgY2hlY2sgaWYgdGhlIHByb3BlcnR5IGV4aXN0cyBkaXJlY3RseSBvbiBVdGlsU2VydmljZVxuICAgICAgICAgICAgICAgIGlmIChwcm9wIGluIHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRhcmdldCBhcyBhbnkpW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgc3ltYm9sIHRvIHN0cmluZyBpZiBuZWVkZWRcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHByb3AudG9TdHJpbmcoKTtcblxuICAgICAgICAgICAgICAgIC8vIENoZWNrIGNvbnRleHQgc2VydmljZXMgZmlyc3RcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fY29udGV4dCAmJiBPYmplY3Qua2V5cyh0aGlzLl9jb250ZXh0KS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIHNlcnZpY2UgaW4gdGhlIGNvbnRleHRcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZXJ2aWNlTmFtZSBvZiBPYmplY3Qua2V5cyh0aGlzLl9jb250ZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuX2NvbnRleHRbc2VydmljZU5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlcnZpY2UgJiYgdHlwZW9mIHNlcnZpY2UgPT09ICdvYmplY3QnICYmIHByb3BOYW1lIGluIHNlcnZpY2UgJiYgdHlwZW9mIHNlcnZpY2VbcHJvcE5hbWVdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSBib3VuZCBmdW5jdGlvbiBmcm9tIHRoZSBzZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2VbcHJvcE5hbWVdLmJpbmQoc2VydmljZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBJZiBwcm9wZXJ0eSBub3QgZm91bmQgYW55d2hlcmUsIHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59Il19