@experteam-mx/ngx-services 18.8.19 → 18.8.21
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.
- package/esm2022/lib/apis/api-catalogs.service.mjs +2 -3
- package/esm2022/lib/apis/api-companies.service.mjs +11 -1
- package/esm2022/lib/apis/models/api-companies.interfaces.mjs +1 -1
- package/esm2022/lib/apis/models/api-companies.types.mjs +1 -1
- package/fesm2022/experteam-mx-ngx-services.mjs +11 -2
- package/fesm2022/experteam-mx-ngx-services.mjs.map +1 -1
- package/lib/apis/api-companies.service.d.ts +8 -1
- package/lib/apis/models/api-companies.interfaces.d.ts +10 -0
- package/lib/apis/models/api-companies.types.d.ts +8 -1
- package/package.json +1 -1
|
@@ -609,8 +609,7 @@ export class ApiCatalogsService {
|
|
|
609
609
|
* @returns {Observable<BusinessPartyTraderTypesOut>} Observable containing the list of trader types
|
|
610
610
|
*/
|
|
611
611
|
getBusinessPartyTraderTypes(params) {
|
|
612
|
-
return this.http.get(`${this.url}/business-party-trader-types
|
|
613
|
-
.pipe(map(({ data }) => data));
|
|
612
|
+
return this.http.get(`${this.url}/business-party-trader-types`, { params }).pipe(map(({ data }) => data));
|
|
614
613
|
}
|
|
615
614
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApiCatalogsService, deps: [{ token: 'env' }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
616
615
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ApiCatalogsService, providedIn: 'root' });
|
|
@@ -624,4 +623,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
624
623
|
type: Inject,
|
|
625
624
|
args: ['env']
|
|
626
625
|
}] }, { type: i1.HttpClient }] });
|
|
627
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNhdGFsb2dzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHBlcnRlYW0tbXgvbmd4LXNlcnZpY2VzL3NyYy9saWIvYXBpcy9hcGktY2F0YWxvZ3Muc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUdsRCxPQUFPLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFBOzs7QUFvRHRDLE1BQU0sT0FBTyxrQkFBa0I7SUFFSjtJQUNmO0lBRlYsWUFDeUIsWUFBeUIsRUFDeEMsSUFBZ0I7UUFERCxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN4QyxTQUFJLEdBQUosSUFBSSxDQUFZO0lBQ3RCLENBQUM7SUFFTDs7OztPQUlHO0lBQ0gsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUE7SUFDL0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsaUJBQWlCLENBQUUsTUFBbUI7UUFDcEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBZ0MsR0FBRyxJQUFJLENBQUMsR0FBRyxrQkFBa0IsRUFBRTtZQUNqRixNQUFNO1NBQ1AsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHNCQUFzQixDQUFFLE1BQW1CO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsdUJBQXVCLEVBQUU7WUFDM0YsTUFBTTtTQUNQLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFB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QUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO3dHQW5wQlUsa0JBQWtCLGtCQUVuQixLQUFLOzRHQUZKLGtCQUFrQixjQUZqQixNQUFNOzs0RkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFHSSxNQUFNOzJCQUFDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4uL25neC1zZXJ2aWNlcy5tb2RlbHMnXHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcclxuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHsgQXBpU3VjY2VzcywgUXVlcnlQYXJhbXMgfSBmcm9tICcuL21vZGVscy9hcGkubW9kZWxzJ1xyXG5pbXBvcnQge1xyXG4gIEJ1c2luZXNzUGFydHlUcmFkZXJUeXBlc091dCxcclxuICBDYW5jZWxsYXRpb25SZWFzb25JbixcclxuICBDYW5jZWxsYXRpb25SZWFzb25PdXQsXHJcbiAgQ2FuY2VsbGF0aW9uUmVhc29uc091dCxcclxuICBDb3VudHJpZXNPdXQsXHJcbiAgQ291bnRyeUluLFxyXG4gIENvdW50cnlPdXQsXHJcbiAgQ3VycmVuY2llc091dCxcclxuICBFeHRyYUNoYXJnZUluLFxyXG4gIEV4dHJhQ2hhcmdlT3V0LFxyXG4gIEV4dHJhQ2hhcmdlc091dCxcclxuICBHZW5lcmljRm9saW9JbixcclxuICBHZW5lcmljRm9saW9PdXQsXHJcbiAgR2VuZXJpY0ZvbGlvc091dCxcclxuICBIb2xpZGF5SW4sXHJcbiAgSG9saWRheU91dCxcclxuICBIb2xpZGF5c091dCxcclxuICBJZGVudGlmaWNhdGlvblR5cGVJbixcclxuICBJZGVudGlmaWNhdGlvblR5cGVOdW1iZXJWYWxpZGF0aW9uSW4sXHJcbiAgSWRlbnRpZmljYXRpb25UeXBlTnVtYmVyVmFsaWRhdGlvbk91dCxcclxuICBJZGVudGlmaWNhdGlvblR5cGVPdXQsXHJcbiAgSWRlbnRpZmljYXRpb25UeXBlc091dCxcclxuICBMYW5ndWFnZXNPdXQsXHJcbiAgTWFuYWdlbWVudEFyZWFzT3V0LFxyXG4gIE9wZXJhdGlvblR5cGVzT3V0LFxyXG4gIFBvc3RhbExvY2F0aW9uc091dCxcclxuICBQcm9kdWN0SW4sXHJcbiAgUHJvZHVjdE91dCxcclxuICBRdWVzdGlvbkluLFxyXG4gIFF1ZXN0aW9uT3V0LFxyXG4gIFF1ZXN0aW9uc091dCxcclxuICBSZWdpb25zT3V0LFxyXG4gIFNoaXBtZW50Q29udGVudFR5cGVzT3V0LFxyXG4gIFNoaXBtZW50R3JvdXBzT3V0LFxyXG4gIFNoaXBtZW50SW5jb21lVHlwZUluLFxyXG4gIFNoaXBtZW50SW5jb21lVHlwZU91dCxcclxuICBTaGlwbWVudEluY29tZVR5cGVzT3V0LFxyXG4gIFNoaXBtZW50U2NvcGVzT3V0LFxyXG4gIFNoaXBtZW50U3RhdHVzZXNPdXQsXHJcbiAgVW5pcXVlRm9saW9JbixcclxuICBVbmlxdWVGb2xpb091dCxcclxuICBVbmlxdWVGb2xpb3NPdXQsXHJcbiAgVW5pdHNPdXQsXHJcbiAgWm9uZXNPdXRcclxufSBmcm9tICcuL21vZGVscy9hcGktY2F0YWxvZy50eXBlcydcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFwaUNhdGFsb2dzU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IgKFxyXG4gICAgQEluamVjdCgnZW52JykgcHJpdmF0ZSBlbnZpcm9ubWVudHM6IEVudmlyb25tZW50LFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50XHJcbiAgKSB7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHRoZSBVUkwgZm9yIHRoZSByZXBvcnRzIEFQSSBmcm9tIHRoZSBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9ucy5cclxuICAgKlxyXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVSTCBvZiB0aGUgcmVwb3J0cyBBUEkuXHJcbiAgICovXHJcbiAgZ2V0IHVybCAoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50cy5hcGlDYXRhbG9nc1VybCA/PyAnJ1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHRoZSBsaXN0IG9mIGNvbGxlY3Rpb24gcGF5bWVudHNcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHVzZWQgdG8gZmV0Y2ggdGhlIG9wZXJhdGlvbiB0eXBlcy5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPE9wZXJhdGlvblR5cGVzT3V0W10+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgYW4gYXJyYXkgb2Ygb3BlcmF0aW9uIHR5cGUuXHJcbiAgICovXHJcbiAgZ2V0T3BlcmF0aW9uVHlwZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPE9wZXJhdGlvblR5cGVzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPE9wZXJhdGlvblR5cGVzT3V0Pj4oYCR7dGhpcy51cmx9L29wZXJhdGlvbi10eXBlc2AsIHtcclxuICAgICAgcGFyYW1zXHJcbiAgICB9KS5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHRoZSBsaXN0IG9mIGlkZW50aWZpY2F0aW9zIHR5cGVzXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyB1c2VkIHRvIGZldGNoIHRoZSBpZGVudGlmaWNhdGlvbiB0eXBlcy5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPElkZW50aWZpY2F0aW9uVHlwZXNPdXRbXT59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyBhbiBhcnJheSBvZiBpZGVudGlmaWNhdGlvbiB0eXBlLlxyXG4gICAqL1xyXG4gIGdldElkZW50aWZpY2F0aW9uVHlwZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPElkZW50aWZpY2F0aW9uVHlwZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8SWRlbnRpZmljYXRpb25UeXBlc091dD4+KGAke3RoaXMudXJsfS9pZGVudGlmaWNhdGlvbi10eXBlc2AsIHtcclxuICAgICAgcGFyYW1zXHJcbiAgICB9KS5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgYSBzaW5nbGUgaWRlbnRpZmljYXRpb24gdHlwZSBieSBpdHMgaWQuXHJcbiAgICpcclxuICAgKiBTZW5kcyBhbiBIVFRQIEdFVCByZXF1ZXN0IHRvIHRoZSBpbmRlbnRpZmljYXRpb24gdHlwZSBlbmRwb2ludCBhbmQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHNcclxuICAgKiB0aGUgSWRlbnRpZmljYXRpb25UeXBlT3V0IHBheWxvYWQgZXh0cmFjdGVkIGZyb20gdGhlIEFQSSBzdWNjZXNzIGVudmVsb3BlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGlkIC0gVGhlIG51bWVyaWMgaWRlbnRpZmllciBvZiB0aGUgaWRlbnRpZmljYXRpb24gdHlwZSB0byBmZXRjaC5cclxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlcXVlc3RlZCBJZGVudGlmaWNhdGlvblR5cGVPdXQuIFRoZSBPYnNlcnZhYmxlIHdpbGwgZXJyb3JcclxuICAgKiAgICAgICAgICBpZiB0aGUgSFRUUCByZXF1ZXN0IGZhaWxzIChmb3IgZXhhbXBsZSBuZXR3b3JrIGlzc3VlcyBvciBub24tMnh4IHJlc3BvbnNlcykuXHJcbiAgICovXHJcbiAgZ2V0SWRlbnRpZmljYXRpb25UeXBlIChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxJZGVudGlmaWNhdGlvblR5cGVPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8SWRlbnRpZmljYXRpb25UeXBlT3V0Pj4oYCR7dGhpcy51cmx9L2lkZW50aWZpY2F0aW9uLXR5cGVzLyR7aWR9YClcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZW5kcyBhIFBPU1QgcmVxdWVzdCB0byBjcmVhdGUgYSBuZXcgaWRlbnRpZmljYXRpb24gdHlwZSBhbmQgcmV0dXJucyB0aGUgY3JlYXRlZCByZXNvdXJjZS5cclxuICAgKlxyXG4gICAqIFRoZSByZXF1ZXN0IHBheWxvYWQgaXMgc2VudCBhcyBhbiBvYmplY3Qgd2l0aCBhIGBib2R5YCBwcm9wZXJ0eSBjb250YWluaW5nIHRoZSBwcm92aWRlZFxyXG4gICAqIElkZW50aWZpY2F0aW9uVHlwZUluIHZhbHVlIChpLmUuIHsgYm9keTogSWRlbnRpZmljYXRpb25UeXBlSW4gfSkuIE9uIHN1Y2Nlc3MgdGhlIEhUVFAgcmVzcG9uc2UgaXMgZXhwZWN0ZWRcclxuICAgKiB0byBmb2xsb3cgdGhlIEFwaVN1Y2Nlc3M8VD4gc2hhcGU7IHRoZSBvcGVyYXRvciBtYXBzIHRoYXQgcmVzcG9uc2UgdG8gdGhlIGlubmVyIGBkYXRhYFxyXG4gICAqIG9iamVjdCBhbmQgZW1pdHMgaXQgYXMgYSBJZGVudGlmaWNhdGlvblR5cGVPdXQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gYm9keSAtIFRoZSBpZGVudGlmaWNhdGlvbiB0eXBlIHBheWxvYWQgdG8gY3JlYXRlIChJZGVudGlmaWNhdGlvblR5cGVJbikuXHJcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxJZGVudGlmaWNhdGlvblR5cGVPdXQ+IHRoYXQgZW1pdHMgdGhlIGNyZWF0ZWQgaWRlbnRpZmljYXRpb24gdHlwZSBvbiBzdWNjZXNzLlxyXG4gICAqL1xyXG4gIHBvc3RJZGVudGlmaWNhdGlvbnRUeXBlIChib2R5OiBJZGVudGlmaWNhdGlvblR5cGVJbik6IE9ic2VydmFibGU8SWRlbnRpZmljYXRpb25UeXBlT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxJZGVudGlmaWNhdGlvblR5cGVPdXQ+PihgJHt0aGlzLnVybH0vaWRlbnRpZmljYXRpb24tdHlwZXNgLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBhIGlkZW50aWZpY2F0aW9uIHR5cGUgYnkgaXRzIElELlxyXG4gICAqXHJcbiAgICogU2VuZHMgYW4gSFRUUCBQVVQgdG8gYCR7dGhpcy51cmx9L2lkZW50aWZpY2F0aW9uLXR5cGVzLyR7aWR9YCB3aXRoIHRoZSBwcm92aWRlZCBwYXlsb2FkLlxyXG4gICAqIFRoZSByZXF1ZXN0IGJvZHkgaXMgc2VudCBhcyBhbiBvYmplY3Qgd2l0aCBhIGBib2R5YCBwcm9wZXJ0eSBjb250YWluaW5nIHRoZVxyXG4gICAqIGBJZGVudGlmaWNhdGlvblR5cGVJbmAgZGF0YS4gVGhlIHNlcnZlciByZXNwb25zZSBpcyBleHBlY3RlZCB0byBiZSBhbiBgQXBpU3VjY2VzczxJZGVudGlmaWNhdGlvblR5cGVPdXQ+YFxyXG4gICAqIGFuZCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgdW53cmFwcGVkIGBJZGVudGlmaWNhdGlvblR5cGVPdXRgLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkZW50aWZpZXIgb2YgdGhlIGlkZW50aWZpY2F0aW9uIHR5cGUgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSBib2R5IC0gVGhlIHVwZGF0ZSBwYXlsb2FkIGZvciB0aGUgaWRlbnRpZmljYXRpb24gdHlwZS5cclxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHVwZGF0ZWQgYElkZW50aWZpY2F0aW9uVHlwZU91dGAgb24gc3VjY2Vzcy5cclxuICAgKi9cclxuICBwdXRJZGVudGlmaWNhdGlvblR5cGUgKGlkOiBudW1iZXIsIGJvZHk6IElkZW50aWZpY2F0aW9uVHlwZUluKTogT2JzZXJ2YWJsZTxJZGVudGlmaWNhdGlvblR5cGVPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8SWRlbnRpZmljYXRpb25UeXBlT3V0Pj4oYCR7dGhpcy51cmx9L2lkZW50aWZpY2F0aW9uLXR5cGVzLyR7aWR9YCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGUgYSBpZGVudGlmaWNhdGlvbiB0eXBlIGJ5IGl0cyBJRC5cclxuICAgKlxyXG4gICAqIFNlbmRzIGFuIEhUVFAgREVMRVRFIHJlcXVlc3QgdG8gdGhlIGJhY2tlbmQgZW5kcG9pbnQgYC9pZGVudGlmaWNhdGlvbi10eXBlcy97aWR9YCBhbmRcclxuICAgKiByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgQVBJIHJlc3BvbnNlJ3MgYGRhdGFgIHBheWxvYWQgKHR5cGljYWxseSBhbiBlbXB0eSBvYmplY3QpLlxyXG4gICAqXHJcbiAgICogVGhlIGltcGxlbWVudGF0aW9uIG1hcHMgYW4gQXBpU3VjY2VzcyB3cmFwcGVyIHRvIGl0cyBgZGF0YWAgcHJvcGVydHkgYmVmb3JlIGVtaXR0aW5nLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGlkIC0gVGhlIG51bWVyaWMgaWRlbnRpZmllciBvZiB0aGUgaWRlbnRpZmljYXRpb24gdHlwZSB0byBkZWxldGUuXHJcbiAgICogQHJldHVybnMgQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBkZWxldGVkIHJlc291cmNlIHBheWxvYWQgKHt9IGV4cGVjdGVkKSBvbiBzdWNjZXNzLlxyXG4gICAqICAgICAgICAgIFRoZSBPYnNlcnZhYmxlIHdpbGwgZW1pdCBhbiBlcnJvciBpZiB0aGUgSFRUUCByZXF1ZXN0IGZhaWxzLlxyXG4gICAqL1xyXG4gIGRlbGV0ZUlkZW50aWZpY2F0aW9uVHlwZSAoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8e30+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPEFwaVN1Y2Nlc3M8e30+PihgJHt0aGlzLnVybH0vaWRlbnRpZmljYXRpb24tdHlwZXMvJHtpZH1gKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIGEgUE9TVCByZXF1ZXN0IHRvIHZhbGlkYXRlIGlkZW50aWZpY2F0aW9uIHR5cGUgbnVtYmVyLlxyXG4gICAqXHJcbiAgICogVGhlIHJlcXVlc3QgcGF5bG9hZCBpcyBzZW50IGFzIGFuIG9iamVjdCB3aXRoIGEgYGJvZHlgIHByb3BlcnR5IGNvbnRhaW5pbmcgdGhlIHByb3ZpZGVkXHJcbiAgICogSWRlbnRpZmljYXRpb25UeXBlTnVtYmVyVmFsaWRhdGlvbkluIHZhbHVlIChpLmUuIHsgYm9keTogSWRlbnRpZmljYXRpb25UeXBlTnVtYmVyVmFsaWRhdGlvbkluIH0pLiBPbiBzdWNjZXNzIHRoZSBIVFRQIHJlc3BvbnNlIGlzIGV4cGVjdGVkXHJcbiAgICogdG8gZm9sbG93IHRoZSBBcGlTdWNjZXNzPFQ+IHNoYXBlOyB0aGUgb3BlcmF0b3IgbWFwcyB0aGF0IHJlc3BvbnNlIHRvIHRoZSBpbm5lciBgZGF0YWBcclxuICAgKiBvYmplY3QgYW5kIGVtaXRzIGl0IGFzIGEgSWRlbnRpZmljYXRpb25UeXBlTnVtYmVyVmFsaWRhdGlvbk91dC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBib2R5IC0gVGhlIGlkZW50aWZpY2F0aW9uIHR5cGUgbnVtYmVyIHZhbGlkYXRpb24gcGF5bG9hZCB0byB2YWxpZGF0ZSAoSWRlbnRpZmljYXRpb25UeXBlTnVtYmVyVmFsaWRhdGlvbkluKS5cclxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPElkZW50aWZpY2F0aW9uVHlwZU51bWJlclZhbGlkYXRpb25PdXQ+IHRoYXQgZW1pdHMgdGhlIHZhbGlkYXRlIHN0YXR1cy5cclxuICAgKi9cclxuICBwb3N0SWRlbnRpZmljYXRpb250VHlwZU51bWJlclZhbGlkYXRpb24gKGJvZHk6IElkZW50aWZpY2F0aW9uVHlwZU51bWJlclZhbGlkYXRpb25Jbik6IE9ic2VydmFibGU8SWRlbnRpZmljYXRpb25UeXBlTnVtYmVyVmFsaWRhdGlvbk91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFwaVN1Y2Nlc3M8SWRlbnRpZmljYXRpb25UeXBlTnVtYmVyVmFsaWRhdGlvbk91dD4+KGAke3RoaXMudXJsfS9pZGVudGlmaWNhdGlvbi10eXBlcy9udW1iZXItdmFsaWRhdGlvbmAsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyB0aGUgZXh0cmEgY2hhcmdlcyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIGZpbHRlciB0aGUgcmVzdWx0cy5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEV4dHJhQ2hhcmdlc091dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIGV4dHJhIGNoYXJnZXMgZGF0YS5cclxuICAgKi9cclxuICBnZXRFeHRyYUNoYXJnZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPEV4dHJhQ2hhcmdlc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxFeHRyYUNoYXJnZXNPdXQ+PihgJHt0aGlzLnVybH0vZXh0cmFjaGFyZ2VzYCwge1xyXG4gICAgICBwYXJhbXNcclxuICAgIH0pLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdWJtaXRzIGFuIGV4dHJhIGNoYXJnZSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgYW5kIHJldHVybnMgdGhlIGNyZWF0ZWQgZXh0cmEgY2hhcmdlIGRldGFpbHMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0V4dHJhQ2hhcmdlSW59IGJvZHkgLSBUaGUgZGF0YSBmb3IgdGhlIGV4dHJhIGNoYXJnZSB0byBiZSBjcmVhdGVkLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8RXh0cmFDaGFyZ2VPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGRldGFpbHMgb2YgdGhlIGNyZWF0ZWQgZXh0cmEgY2hhcmdlLlxyXG4gICAqL1xyXG4gIHBvc3RFeHRyYUNoYXJnZSAoYm9keTogRXh0cmFDaGFyZ2VJbik6IE9ic2VydmFibGU8RXh0cmFDaGFyZ2VPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPEV4dHJhQ2hhcmdlT3V0Pj4oYCR7dGhpcy51cmx9L2V4dHJhY2hhcmdlc2AsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyBhbiBleHRyYSBjaGFyZ2UgZW50aXR5IHdpdGggbmV3IGRhdGEgYW5kIHJldHVybnMgdGhlIHVwZGF0ZWQgZW50aXR5LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBleHRyYSBjaGFyZ2UgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7RXh0cmFDaGFyZ2VJbn0gYm9keSAtIFRoZSBuZXcgZGF0YSBmb3IgdGhlIGV4dHJhIGNoYXJnZS5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEV4dHJhQ2hhcmdlT3V0Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgdXBkYXRlZCBleHRyYSBjaGFyZ2UgZW50aXR5LlxyXG4gICAqL1xyXG4gIHB1dEV4dHJhQ2hhcmdlIChpZDogbnVtYmVyLCBib2R5OiBFeHRyYUNoYXJnZUluKTogT2JzZXJ2YWJsZTxFeHRyYUNoYXJnZU91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxFeHRyYUNoYXJnZU91dD4+KGAke3RoaXMudXJsfS9leHRyYWNoYXJnZXMvJHtpZH1gLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgYSBsaXN0IG9mIGNvdW50cmllcyBmcm9tIHRoZSBBUEkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyB0byBiZSBwYXNzZWQgdG8gdGhlIEFQSSByZXF1ZXN0LlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q291bnRyaWVzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSBsaXN0IG9mIGNvdW50cmllcy5cclxuICAgKi9cclxuICBnZXRDb3VudHJpZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPENvdW50cmllc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxDb3VudHJpZXNPdXQ+PihgJHt0aGlzLnVybH0vY291bnRyaWVzYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgdGhlIGRldGFpbHMgb2YgYSBjb3VudHJ5IGJhc2VkIG9uIGl0cyBJRC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBjb3VudHJ5IHRvIGZldGNoLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q291bnRyeU91dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgY291bnRyeSBkYXRhLlxyXG4gICAqL1xyXG4gIGdldENvdW50cnkgKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPENvdW50cnlPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8Q291bnRyeU91dD4+KGAke3RoaXMudXJsfS9jb3VudHJpZXMvJHtpZH1gKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIGRldGFpbHMgb2YgYSBzcGVjaWZpYyBjb3VudHJ5IGJ5IGl0cyBJRC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY291bnRyeSB0byBiZSB1cGRhdGVkLlxyXG4gICAqIEBwYXJhbSB7Q291bnRyeUlufSBib2R5IC0gVGhlIGRhdGEgdG8gdXBkYXRlIHRoZSBjb3VudHJ5IHdpdGguXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb3VudHJ5T3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB1cGRhdGVkIGNvdW50cnkgZGF0YS5cclxuICAgKi9cclxuICBwdXRDb3VudHJ5IChpZDogbnVtYmVyLCBib2R5OiBDb3VudHJ5SW4pOiBPYnNlcnZhYmxlPENvdW50cnlPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8Q291bnRyeU91dD4+KGAke3RoaXMudXJsfS9jb3VudHJpZXMvJHtpZH1gLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgcG9zdGFsIGxvY2F0aW9uIGRldGFpbHMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyB0byBmaWx0ZXIgYW5kIGZldGNoIHBvc3RhbCBsb2NhdGlvbiBkYXRhLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8UG9zdGFsTG9jYXRpb25zT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBwb3N0YWwgbG9jYXRpb24gZGV0YWlscy5cclxuICAgKi9cclxuICBnZXRQb3N0YWxMb2NhdGlvbnMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPFBvc3RhbExvY2F0aW9uc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxQb3N0YWxMb2NhdGlvbnNPdXQ+PihgJHt0aGlzLnVybH0vcG9zdGFsLWxvY2F0aW9uc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyBhIGxpc3Qgb2YgcmVnaW9ucyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHVzZWQgdG8gZmlsdGVyIHRoZSByZWdpb25zLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8UmVnaW9uc091dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgbGlzdCBvZiByZWdpb25zLlxyXG4gICAqL1xyXG4gIGdldFJlZ2lvbnMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPFJlZ2lvbnNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8UmVnaW9uc091dD4+KGAke3RoaXMudXJsfS9yZWdpb25zYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIHRoZSB6b25lcyBkYXRhIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdXNlZCB0byBmaWx0ZXIgdGhlIHpvbmVzIGRhdGEuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxab25lc091dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgZmV0Y2hlZCB6b25lcyBkYXRhLlxyXG4gICAqL1xyXG4gIGdldFpvbmVzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxab25lc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2Vzczxab25lc091dD4+KGAke3RoaXMudXJsfS96b25lc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyB0aGUgbWFuYWdlbWVudCBhcmVhcyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIGZpbHRlciB0aGUgbWFuYWdlbWVudCBhcmVhcy5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPE1hbmFnZW1lbnRBcmVhc091dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgbWFuYWdlbWVudCBhcmVhcyBkYXRhLlxyXG4gICAqL1xyXG4gIGdldE1hbmFnZW1lbnRBcmVhcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8TWFuYWdlbWVudEFyZWFzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPE1hbmFnZW1lbnRBcmVhc091dD4+KGAke3RoaXMudXJsfS9tYW5hZ2VtZW50LWFyZWFzYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgY2FuY2VsbGF0aW9uIHJlYXNvbnMgZnJvbSB0aGUgc2VydmVyIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gZmlsdGVyIHRoZSBjYW5jZWxsYXRpb24gcmVhc29ucy5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENhbmNlbGxhdGlvblJlYXNvbnNPdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIHJldHJpZXZlZCBjYW5jZWxsYXRpb24gcmVhc29ucy5cclxuICAgKi9cclxuICBnZXRDYW5jZWxsYXRpb25SZWFzb25zIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxDYW5jZWxsYXRpb25SZWFzb25zT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPENhbmNlbGxhdGlvblJlYXNvbnNPdXQ+PihgJHt0aGlzLnVybH0vY2FuY2VsbGF0aW9uLXJlYXNvbnNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIGEgY2FuY2VsbGF0aW9uIHJlYXNvbiB0byB0aGUgc2VydmVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtDYW5jZWxsYXRpb25SZWFzb25Jbn0gYm9keSAtIFRoZSBjYW5jZWxsYXRpb24gcmVhc29uIG9iamVjdCB0byBiZSBzZW50LlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q2FuY2VsbGF0aW9uUmVhc29uT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSBzZXJ2ZXIncyByZXNwb25zZSB3aXRoIHRoZSBwcm9jZXNzZWQgY2FuY2VsbGF0aW9uIHJlYXNvbi5cclxuICAgKi9cclxuICBwb3N0Q2FuY2VsbGF0aW9uUmVhc29uIChib2R5OiBDYW5jZWxsYXRpb25SZWFzb25Jbik6IE9ic2VydmFibGU8Q2FuY2VsbGF0aW9uUmVhc29uT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxDYW5jZWxsYXRpb25SZWFzb25PdXQ+PihgJHt0aGlzLnVybH0vY2FuY2VsbGF0aW9uLXJlYXNvbnNgLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIGNhbmNlbGxhdGlvbiByZWFzb24gZm9yIHRoZSBzcGVjaWZpZWQgSUQgd2l0aCB0aGUgcHJvdmlkZWQgZGF0YS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY2FuY2VsbGF0aW9uIHJlYXNvbiB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtDYW5jZWxsYXRpb25SZWFzb25Jbn0gYm9keSAtIFRoZSBkZXRhaWxzIG9mIHRoZSBjYW5jZWxsYXRpb24gcmVhc29uIHRvIGJlIHVwZGF0ZWQuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDYW5jZWxsYXRpb25SZWFzb25PdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIHVwZGF0ZWQgY2FuY2VsbGF0aW9uIHJlYXNvbi5cclxuICAgKi9cclxuICBwdXRDYW5jZWxsYXRpb25SZWFzb24gKGlkOiBudW1iZXIsIGJvZHk6IENhbmNlbGxhdGlvblJlYXNvbkluKTogT2JzZXJ2YWJsZTxDYW5jZWxsYXRpb25SZWFzb25PdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8Q2FuY2VsbGF0aW9uUmVhc29uT3V0Pj4oYCR7dGhpcy51cmx9L2NhbmNlbGxhdGlvbi1yZWFzb25zLyR7aWR9YCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYSBsaXN0IG9mIGN1cnJlbmNpZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyB0byBjdXN0b21pemUgdGhlIGN1cnJlbmN5IHJldHJpZXZhbCByZXF1ZXN0LlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q3VycmVuY2llc091dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmV0cmlldmVkIGN1cnJlbmNpZXMgZGF0YS5cclxuICAgKi9cclxuICBnZXRDdXJyZW5jaWVzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxDdXJyZW5jaWVzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEN1cnJlbmNpZXNPdXQ+PihgJHt0aGlzLnVybH0vY3VycmVuY2llc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyB0aGUgbGlzdCBvZiBhdmFpbGFibGUgbGFuZ3VhZ2VzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gcGFzcyB3aXRoIHRoZSBIVFRQIHJlcXVlc3QuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxMYW5ndWFnZXNPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGF2YWlsYWJsZSBsYW5ndWFnZXMuXHJcbiAgICovXHJcbiAgZ2V0TGFuZ3VhZ2VzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxMYW5ndWFnZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8TGFuZ3VhZ2VzT3V0Pj4oYCR7dGhpcy51cmx9L2xhbmd1YWdlc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyB0aGUgYXZhaWxhYmxlIHVuaXRzIGZyb20gdGhlIEFQSSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIGZpbHRlciB0aGUgdW5pdHMgYmVpbmcgZmV0Y2hlZC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFVuaXRzT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXRyaWV2ZWQgdW5pdHMgZGF0YS5cclxuICAgKi9cclxuICBnZXRVbml0cyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8VW5pdHNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8VW5pdHNPdXQ+PihgJHt0aGlzLnVybH0vdW5pdHNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyB0aGUgc2hpcG1lbnQgc2NvcGVzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIGZpbHRlciBvciBtb2RpZnkgdGhlIHJlcXVlc3QgZm9yIHNoaXBtZW50IHNjb3Blcy5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFNoaXBtZW50U2NvcGVzT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBzaGlwbWVudCBzY29wZXMgZGF0YS5cclxuICAgKi9cclxuICBnZXRTaGlwbWVudFNjb3BlcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8U2hpcG1lbnRTY29wZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8U2hpcG1lbnRTY29wZXNPdXQ+PihgJHt0aGlzLnVybH0vc2hpcG1lbnQtc2NvcGVzYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIHRoZSBhdmFpbGFibGUgc2hpcG1lbnQgY29udGVudCB0eXBlcyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIGZpbHRlciB0aGUgc2hpcG1lbnQgY29udGVudCB0eXBlcy5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFNoaXBtZW50Q29udGVudFR5cGVzT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBzaGlwbWVudCBjb250ZW50IHR5cGVzIGRhdGEuXHJcbiAgICovXHJcbiAgZ2V0U2hpcG1lbnRDb250ZW50VHlwZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPFNoaXBtZW50Q29udGVudFR5cGVzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFNoaXBtZW50Q29udGVudFR5cGVzT3V0Pj4oYCR7dGhpcy51cmx9L3NoaXBtZW50LWNvbnRlbnQtdHlwZXNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgYSBsaXN0IG9mIGdlbmVyaWMgZm9saW9zIGJhc2VkIG9uIHRoZSBnaXZlbiBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdXNlZCB0byBmaWx0ZXIgdGhlIGdlbmVyaWMgZm9saW9zLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R2VuZXJpY0ZvbGlvc091dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgZmV0Y2hlZCBnZW5lcmljIGZvbGlvcy5cclxuICAgKi9cclxuICBnZXRHZW5lcmljRm9saW9zIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxHZW5lcmljRm9saW9zT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEdlbmVyaWNGb2xpb3NPdXQ+PihgJHt0aGlzLnVybH0vZ2VuZXJpYy1mb2xpb3NgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIGEgUE9TVCByZXF1ZXN0IHRvIGNyZWF0ZSBvciB1cGRhdGUgYSBnZW5lcmljIGZvbGlvLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtHZW5lcmljRm9saW9Jbn0gYm9keSAtIFRoZSBwYXlsb2FkIGNvbnRhaW5pbmcgdGhlIGRldGFpbHMgb2YgdGhlIGdlbmVyaWMgZm9saW8gdG8gYmUgY3JlYXRlZCBvciB1cGRhdGVkLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R2VuZXJpY0ZvbGlvT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSByZXNwb25zZSBkYXRhIG9mIHRoZSBjcmVhdGVkIG9yIHVwZGF0ZWQgZ2VuZXJpYyBmb2xpby5cclxuICAgKi9cclxuICBwb3N0R2VuZXJpY0ZvbGlvIChib2R5OiBHZW5lcmljRm9saW9Jbik6IE9ic2VydmFibGU8R2VuZXJpY0ZvbGlvT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxHZW5lcmljRm9saW9PdXQ+PihgJHt0aGlzLnVybH0vZ2VuZXJpYy1mb2xpb3NgLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgYSBnZW5lcmljIGZvbGlvIHdpdGggdGhlIHNwZWNpZmllZCBJRCB1c2luZyB0aGUgcHJvdmlkZWQgZGF0YS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgZ2VuZXJpYyBmb2xpbyB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtHZW5lcmljRm9saW9Jbn0gYm9keSAtIFRoZSBkYXRhIHRvIHVwZGF0ZSB0aGUgZ2VuZXJpYyBmb2xpbyB3aXRoLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R2VuZXJpY0ZvbGlvT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSB1cGRhdGVkIGdlbmVyaWMgZm9saW8uXHJcbiAgICovXHJcbiAgcHV0R2VuZXJpY0ZvbGlvIChpZDogbnVtYmVyLCBib2R5OiBHZW5lcmljRm9saW9Jbik6IE9ic2VydmFibGU8R2VuZXJpY0ZvbGlvT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPEdlbmVyaWNGb2xpb091dD4+KGAke3RoaXMudXJsfS9nZW5lcmljLWZvbGlvcy8ke2lkfWAsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZHMgYSBQVVQgcmVxdWVzdCB0byB1cGRhdGUgYSBHZW5lcmljIEZvbGlvIHJlc291cmNlIHdpdGggdGhlIHNwZWNpZmllZCBJRCBhbmQgYm9keSBkYXRhLCBhbmQgcmV0dXJucyB0aGUgdXBkYXRlZCByZXNvdXJjZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgR2VuZXJpYyBGb2xpbyB0byBiZSB1cGRhdGVkLlxyXG4gICAqIEBwYXJhbSB7UGFydGlhbDxHZW5lcmljRm9saW9Jbj59IGJvZHkgLSBUaGUgcGFydGlhbCBkYXRhIHJlcHJlc2VudGluZyB0aGUgY2hhbmdlcyB0byBiZSBhcHBsaWVkIHRvIHRoZSBHZW5lcmljIEZvbGlvLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R2VuZXJpY0ZvbGlvT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSB1cGRhdGVkIEdlbmVyaWMgRm9saW8gcmVzb3VyY2UuXHJcbiAgICovXHJcbiAgcGF0aEdlbmVyaWNGb2xpbyAoaWQ6IG51bWJlciwgYm9keTogUGFydGlhbDxHZW5lcmljRm9saW9Jbj4pOiBPYnNlcnZhYmxlPEdlbmVyaWNGb2xpb091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxHZW5lcmljRm9saW9PdXQ+PihgJHt0aGlzLnVybH0vZ2VuZXJpYy1mb2xpb3MvJHtpZH1gLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIGEgUE9TVCByZXF1ZXN0IHRvIGNyZWF0ZSBhIG5ldyBwcm9kdWN0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtQcm9kdWN0SW59IGJvZHkgLSBUaGUgcHJvZHVjdCBkYXRhIHRvIGJlIHNlbnQgaW4gdGhlIHJlcXVlc3QgYm9keS5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFByb2R1Y3RPdXQ+fSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSBjcmVhdGVkIHByb2R1Y3QgZGF0YS5cclxuICAgKi9cclxuICBwb3N0UHJvZHVjdCAoYm9keTogUHJvZHVjdEluKTogT2JzZXJ2YWJsZTxQcm9kdWN0T3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxQcm9kdWN0T3V0Pj4oYCR7dGhpcy51cmx9L3Byb2R1Y3RzYCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIGFuIGV4aXN0aW5nIHByb2R1Y3Qgd2l0aCB0aGUgZ2l2ZW4gSUQgdXNpbmcgdGhlIHByb3ZpZGVkIGRhdGEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHByb2R1Y3QgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7UHJvZHVjdElufSBib2R5IC0gVGhlIHByb2R1Y3QgZGF0YSB0byB1cGRhdGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxQcm9kdWN0T3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSB1cGRhdGVkIHByb2R1Y3QgZGF0YS5cclxuICAgKi9cclxuICBwdXRQcm9kdWN0IChpZDogbnVtYmVyLCBib2R5OiBQcm9kdWN0SW4pOiBPYnNlcnZhYmxlPFByb2R1Y3RPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8UHJvZHVjdE91dD4+KGAke3RoaXMudXJsfS9wcm9kdWN0cy8ke2lkfWAsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiBzaGlwbWVudCBpbmNvbWUgdHlwZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyB0byBmaWx0ZXIgdGhlIHNoaXBtZW50IGluY29tZSB0eXBlcy5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFNoaXBtZW50SW5jb21lVHlwZXNPdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIHNoaXBtZW50IGluY29tZSB0eXBlcyBkYXRhLlxyXG4gICAqL1xyXG4gIGdldFNoaXBtZW50SW5jb21lVHlwZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPFNoaXBtZW50SW5jb21lVHlwZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8U2hpcG1lbnRJbmNvbWVUeXBlc091dD4+KGAke3RoaXMudXJsfS9zaGlwbWVudC1pbmNvbWUtdHlwZXNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIGEgUE9TVCByZXF1ZXN0IHRvIGNyZWF0ZSBhIG5ldyBzaGlwbWVudCBpbmNvbWUgdHlwZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7U2hpcG1lbnRJbmNvbWVUeXBlSW59IGJvZHkgVGhlIHBheWxvYWQgY29udGFpbmluZyB0aGUgZGV0YWlscyBvZiB0aGUgc2hpcG1lbnQgaW5jb21lIHR5cGUgdG8gYmUgY3JlYXRlZC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFNoaXBtZW50SW5jb21lVHlwZU91dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgY3JlYXRlZCBzaGlwbWVudCBpbmNvbWUgdHlwZSBkYXRhLlxyXG4gICAqL1xyXG4gIHBvc3RTaGlwbWVudEluY29tZVR5cGUgKGJvZHk6IFNoaXBtZW50SW5jb21lVHlwZUluKTogT2JzZXJ2YWJsZTxTaGlwbWVudEluY29tZVR5cGVPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPFNoaXBtZW50SW5jb21lVHlwZU91dD4+KGAke3RoaXMudXJsfS9zaGlwbWVudC1pbmNvbWUtdHlwZXNgLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIHNoaXBtZW50IGluY29tZSB0eXBlIHdpdGggdGhlIHNwZWNpZmllZCBJRC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBzaGlwbWVudCBpbmNvbWUgdHlwZSB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtTaGlwbWVudEluY29tZVR5cGVJbn0gYm9keSAtIFRoZSBkYXRhIHRvIHVwZGF0ZSB0aGUgc2hpcG1lbnQgaW5jb21lIHR5cGUgd2l0aC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFNoaXBtZW50SW5jb21lVHlwZU91dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIHVwZGF0ZWQgc2hpcG1lbnQgaW5jb21lIHR5cGUuXHJcbiAgICovXHJcbiAgcHV0U2hpcG1lbnRJbmNvbWVUeXBlIChpZDogbnVtYmVyLCBib2R5OiBTaGlwbWVudEluY29tZVR5cGVJbik6IE9ic2VydmFibGU8U2hpcG1lbnRJbmNvbWVUeXBlT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPFNoaXBtZW50SW5jb21lVHlwZU91dD4+KGAke3RoaXMudXJsfS9zaGlwbWVudC1pbmNvbWUtdHlwZXMvJHtpZH1gLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBhIGxpc3Qgb2YgdW5pcXVlIGZvbGlvcyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHVzZWQgdG8gZmlsdGVyIGFuZCBmZXRjaCB1bmlxdWUgZm9saW9zLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8VW5pcXVlRm9saW9zT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB1bmlxdWUgZm9saW9zIGRhdGEuXHJcbiAgICovXHJcbiAgZ2V0VW5pcXVlRm9saW9zIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxVbmlxdWVGb2xpb3NPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8VW5pcXVlRm9saW9zT3V0Pj4oYCR7dGhpcy51cmx9L3VuaXF1ZS1mb2xpb3NgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIGEgUE9TVCByZXF1ZXN0IHRvIGNyZWF0ZSBhIHVuaXF1ZSBmb2xpby5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7VW5pcXVlRm9saW9Jbn0gYm9keSAtIFRoZSBkYXRhIG9iamVjdCBjb250YWluaW5nIGRldGFpbHMgZm9yIHRoZSB1bmlxdWUgZm9saW8gdG8gYmUgY3JlYXRlZC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFVuaXF1ZUZvbGlvT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBjcmVhdGVkIHVuaXF1ZSBmb2xpbyBkZXRhaWxzLlxyXG4gICAqL1xyXG4gIHBvc3RVbmlxdWVGb2xpbyAoYm9keTogVW5pcXVlRm9saW9Jbik6IE9ic2VydmFibGU8VW5pcXVlRm9saW9PdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPFVuaXF1ZUZvbGlvT3V0Pj4oYCR7dGhpcy51cmx9L3VuaXF1ZS1mb2xpb3NgLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgYSB1bmlxdWUgZm9saW8gd2l0aCB0aGUgZ2l2ZW4gZGF0YSB1c2luZyB0aGUgcHJvdmlkZWQgSUQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgSUQgb2YgdGhlIHVuaXF1ZSBmb2xpbyB0byBiZSB1cGRhdGVkLlxyXG4gICAqIEBwYXJhbSB7VW5pcXVlRm9saW9Jbn0gYm9keSAtIFRoZSBwYXlsb2FkIGNvbnRhaW5pbmcgdGhlIGRldGFpbHMgb2YgdGhlIHVuaXF1ZSBmb2xpbyB0byB1cGRhdGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxVbmlxdWVGb2xpb091dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgdXBkYXRlZCB1bmlxdWUgZm9saW8uXHJcbiAgICovXHJcbiAgcHV0VW5pcXVlRm9saW8gKGlkOiBudW1iZXIsIGJvZHk6IFVuaXF1ZUZvbGlvSW4pOiBPYnNlcnZhYmxlPFVuaXF1ZUZvbGlvT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPFVuaXF1ZUZvbGlvT3V0Pj4oYCR7dGhpcy51cmx9L3VuaXF1ZS1mb2xpb3MvJHtpZH1gLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgYSB1bmlxdWUgZm9saW8gYnkgaXRzIGlkZW50aWZpZXIgd2l0aCB0aGUgcHJvdmlkZWQgZGF0YS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSBpZGVudGlmaWVyIG9mIHRoZSB1bmlxdWUgZm9saW8gdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7UGFydGlhbDxVbmlxdWVGb2xpb0luPn0gYm9keSAtIFRoZSBwYXJ0aWFsIGRhdGEgb2YgdGhlIHVuaXF1ZSBmb2xpbyB0byB1cGRhdGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxVbmlxdWVGb2xpb091dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIHVwZGF0ZWQgdW5pcXVlIGZvbGlvIGRhdGEuXHJcbiAgICovXHJcbiAgcGF0aFVuaXF1ZUZvbGlvIChpZDogbnVtYmVyLCBib2R5OiBQYXJ0aWFsPFVuaXF1ZUZvbGlvSW4+KTogT2JzZXJ2YWJsZTxVbmlxdWVGb2xpb091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxVbmlxdWVGb2xpb091dD4+KGAke3RoaXMudXJsfS91bmlxdWUtZm9saW9zLyR7aWR9YCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgc2hpcG1lbnQgZ3JvdXBzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIGZpbHRlciB0aGUgc2hpcG1lbnQgZ3JvdXBzLlxyXG4gICAqIEByZXR1cm5zIEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgc2hpcG1lbnQgZ3JvdXBzIGRhdGEuXHJcbiAgICovXHJcbiAgZ2V0U2hpcG1lbnRHcm91cHMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPFNoaXBtZW50R3JvdXBzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFNoaXBtZW50R3JvdXBzT3V0Pj4oYCR7dGhpcy51cmx9L3NoaXBtZW50LWdyb3Vwc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHRoZSBzaGlwbWVudCBzdGF0dXNlcyBmcm9tIHRoZSBBUEkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gZmlsdGVyIG9yIG1vZGlmeSB0aGUgcmVxdWVzdC5cclxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHNoaXBtZW50IHN0YXR1c2VzIG91dHB1dC5cclxuICAgKi9cclxuICBnZXRTaGlwbWVudFN0YXR1c2VzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxTaGlwbWVudFN0YXR1c2VzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFNoaXBtZW50U3RhdHVzZXNPdXQ+PihgJHt0aGlzLnVybH0vc2hpcG1lbnQtc3RhdHVzZXNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgcXVlc3Rpb25zIGZyb20gdGhlIGNhdGFsb2dzIEFQSS5cclxuICAgKlxyXG4gICAqIFNlbmRzIGFuIEhUVFAgR0VUIHJlcXVlc3QgdG8gYCR7dGhpcy51cmx9L3F1ZXN0aW9uc2AgdXNpbmcgdGhlIHN1cHBsaWVkIHF1ZXJ5IHBhcmFtZXRlcnNcclxuICAgKiBhbmQgcmV0dXJucyB0aGUgdW53cmFwcGVkIHBheWxvYWQgKGBkYXRhYCkgZnJvbSB0aGUgQVBJIHJlc3BvbnNlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHBhcmFtcyAtIFF1ZXJ5IHBhcmFtZXRlcnMgdG8gaW5jbHVkZSBpbiB0aGUgcmVxdWVzdCAoZS5nLiBwYWdpbmcsIGZpbHRlcnMsIHNvcnRpbmcpLlxyXG4gICAqIEByZXR1cm5zIEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgUXVlc3Rpb25zT3V0IHBheWxvYWQgKHRoZSBgZGF0YWAgZmllbGQgZnJvbSBBcGlTdWNjZXNzPFF1ZXN0aW9uc091dD4pLlxyXG4gICAqL1xyXG4gIGdldFF1ZXN0aW9ucyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8UXVlc3Rpb25zT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFF1ZXN0aW9uc091dD4+KGAke3RoaXMudXJsfS9xdWVzdGlvbnNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlIGEgc2luZ2xlIHF1ZXN0aW9uIGJ5IGl0cyBpZC5cclxuICAgKlxyXG4gICAqIFNlbmRzIGFuIEhUVFAgR0VUIHJlcXVlc3QgdG8gdGhlIHF1ZXN0aW9ucyBlbmRwb2ludCBhbmQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHNcclxuICAgKiB0aGUgUXVlc3Rpb25PdXQgcGF5bG9hZCBleHRyYWN0ZWQgZnJvbSB0aGUgQVBJIHN1Y2Nlc3MgZW52ZWxvcGUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaWQgLSBUaGUgbnVtZXJpYyBpZGVudGlmaWVyIG9mIHRoZSBxdWVzdGlvbiB0byBmZXRjaC5cclxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlcXVlc3RlZCBRdWVzdGlvbk91dC4gVGhlIE9ic2VydmFibGUgd2lsbCBlcnJvclxyXG4gICAqICAgICAgICAgIGlmIHRoZSBIVFRQIHJlcXVlc3QgZmFpbHMgKGZvciBleGFtcGxlIG5ldHdvcmsgaXNzdWVzIG9yIG5vbi0yeHggcmVzcG9uc2VzKS5cclxuICAgKi9cclxuICBnZXRRdWVzdGlvbiAoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8UXVlc3Rpb25PdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8UXVlc3Rpb25PdXQ+PihgJHt0aGlzLnVybH0vcXVlc3Rpb25zLyR7aWR9YClcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZW5kcyBhIFBPU1QgcmVxdWVzdCB0byBjcmVhdGUgYSBuZXcgcXVlc3Rpb24gYW5kIHJldHVybnMgdGhlIGNyZWF0ZWQgcmVzb3VyY2UuXHJcbiAgICpcclxuICAgKiBUaGUgcmVxdWVzdCBwYXlsb2FkIGlzIHNlbnQgYXMgYW4gb2JqZWN0IHdpdGggYSBgYm9keWAgcHJvcGVydHkgY29udGFpbmluZyB0aGUgcHJvdmlkZWRcclxuICAgKiBRdWVzdGlvbkluIHZhbHVlIChpLmUuIHsgYm9keTogUXVlc3Rpb25JbiB9KS4gT24gc3VjY2VzcyB0aGUgSFRUUCByZXNwb25zZSBpcyBleHBlY3RlZFxyXG4gICAqIHRvIGZvbGxvdyB0aGUgQXBpU3VjY2VzczxUPiBzaGFwZTsgdGhlIG9wZXJhdG9yIG1hcHMgdGhhdCByZXNwb25zZSB0byB0aGUgaW5uZXIgYGRhdGFgXHJcbiAgICogb2JqZWN0IGFuZCBlbWl0cyBpdCBhcyBhIFF1ZXN0aW9uT3V0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgcXVlc3Rpb24gcGF5bG9hZCB0byBjcmVhdGUgKFF1ZXN0aW9uSW4pLlxyXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8UXVlc3Rpb25PdXQ+IHRoYXQgZW1pdHMgdGhlIGNyZWF0ZWQgcXVlc3Rpb24gb24gc3VjY2Vzcy5cclxuICAgKi9cclxuICBwb3N0UXVlc3Rpb24gKGJvZHk6IFF1ZXN0aW9uSW4pOiBPYnNlcnZhYmxlPFF1ZXN0aW9uT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxRdWVzdGlvbk91dD4+KGAke3RoaXMudXJsfS9xdWVzdGlvbnNgLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBhIHF1ZXN0aW9uIGJ5IGl0cyBJRC5cclxuICAgKlxyXG4gICAqIFNlbmRzIGFuIEhUVFAgUFVUIHRvIGAke3RoaXMudXJsfS9xdWVzdGlvbnMvJHtpZH1gIHdpdGggdGhlIHByb3ZpZGVkIHBheWxvYWQuXHJcbiAgICogVGhlIHJlcXVlc3QgYm9keSBpcyBzZW50IGFzIGFuIG9iamVjdCB3aXRoIGEgYGJvZHlgIHByb3BlcnR5IGNvbnRhaW5pbmcgdGhlXHJcbiAgICogYFF1ZXN0aW9uSW5gIGRhdGEuIFRoZSBzZXJ2ZXIgcmVzcG9uc2UgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYEFwaVN1Y2Nlc3M8UXVlc3Rpb25PdXQ+YFxyXG4gICAqIGFuZCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgdW53cmFwcGVkIGBRdWVzdGlvbk91dGAuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaWQgLSBUaGUgaWRlbnRpZmllciBvZiB0aGUgcXVlc3Rpb24gdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSBib2R5IC0gVGhlIHVwZGF0ZSBwYXlsb2FkIGZvciB0aGUgcXVlc3Rpb24uXHJcbiAgICogQHJldHVybnMgQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB1cGRhdGVkIGBRdWVzdGlvbk91dGAgb24gc3VjY2Vzcy5cclxuICAgKi9cclxuICBwdXRRdWVzdGlvbiAoaWQ6IG51bWJlciwgYm9keTogUXVlc3Rpb25Jbik6IE9ic2VydmFibGU8UXVlc3Rpb25PdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8UXVlc3Rpb25PdXQ+PihgJHt0aGlzLnVybH0vcXVlc3Rpb25zLyR7aWR9YCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGVzIGEgcXVlc3Rpb24gYnkgaXRzIElELlxyXG4gICAqXHJcbiAgICogU2VuZHMgYW4gSFRUUCBERUxFVEUgcmVxdWVzdCB0byB0aGUgYmFja2VuZCBlbmRwb2ludCBgL3F1ZXN0aW9ucy97aWR9YCBhbmRcclxuICAgKiByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgQVBJIHJlc3BvbnNlJ3MgYGRhdGFgIHBheWxvYWQgKHR5cGljYWxseSBhbiBlbXB0eSBvYmplY3QpLlxyXG4gICAqXHJcbiAgICogVGhlIGltcGxlbWVudGF0aW9uIG1hcHMgYW4gQXBpU3VjY2VzcyB3cmFwcGVyIHRvIGl0cyBgZGF0YWAgcHJvcGVydHkgYmVmb3JlIGVtaXR0aW5nLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGlkIC0gVGhlIG51bWVyaWMgaWRlbnRpZmllciBvZiB0aGUgcXVlc3Rpb24gdG8gZGVsZXRlLlxyXG4gICAqIEByZXR1cm5zIEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgZGVsZXRlZCByZXNvdXJjZSBwYXlsb2FkICh7fSBleHBlY3RlZCkgb24gc3VjY2Vzcy5cclxuICAgKiAgICAgICAgICBUaGUgT2JzZXJ2YWJsZSB3aWxsIGVtaXQgYW4gZXJyb3IgaWYgdGhlIEhUVFAgcmVxdWVzdCBmYWlscy5cclxuICAgKi9cclxuICBkZWxldGVRdWVzdGlvbiAoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8e30+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPEFwaVN1Y2Nlc3M8e30+PihgJHt0aGlzLnVybH0vcXVlc3Rpb25zLyR7aWR9YClcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIGhvbGlkYXlzIGZyb20gdGhlIGNhdGFsb2dzIEFQSS5cclxuICAgKlxyXG4gICAqIFNlbmRzIGFuIEhUVFAgR0VUIHJlcXVlc3QgdG8gYCR7dGhpcy51cmx9L2hvbGlkYXlzYCB1c2luZyB0aGUgc3VwcGxpZWQgcXVlcnkgcGFyYW1ldGVyc1xyXG4gICAqIGFuZCByZXR1cm5zIHRoZSB1bndyYXBwZWQgcGF5bG9hZCAoYGRhdGFgKSBmcm9tIHRoZSBBUEkgcmVzcG9uc2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcGFyYW1zIC0gUXVlcnkgcGFyYW1ldGVycyB0byBpbmNsdWRlIGluIHRoZSByZXF1ZXN0IChlLmcuIHBhZ2luZywgZmlsdGVycywgc29ydGluZykuXHJcbiAgICogQHJldHVybnMgQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBIb2xpZGF5c091dCBwYXlsb2FkICh0aGUgYGRhdGFgIGZpZWxkIGZyb20gQXBpU3VjY2VzczxIb2xpZGF5c091dD4pLlxyXG4gICAqL1xyXG4gIGdldEhvbGlkYXlzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxIb2xpZGF5c091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxIb2xpZGF5c091dD4+KGAke3RoaXMudXJsfS9ob2xpZGF5c2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgYSBzaW5nbGUgaG9saWRheSBieSBpdHMgaWQuXHJcbiAgICpcclxuICAgKiBTZW5kcyBhbiBIVFRQIEdFVCByZXF1ZXN0IHRvIHRoZSBob2xpZGF5cyBlbmRwb2ludCBhbmQgcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHNcclxuICAgKiB0aGUgSG9saWRheU91dCBwYXlsb2FkIGV4dHJhY3RlZCBmcm9tIHRoZSBBUEkgc3VjY2VzcyBlbnZlbG9wZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBudW1lcmljIGlkZW50aWZpZXIgb2YgdGhlIGhvbGlkYXkgdG8gZmV0Y2guXHJcbiAgICogQHJldHVybnMgQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXF1ZXN0ZWQgSG9saWRheU91dC4gVGhlIE9ic2VydmFibGUgd2lsbCBlcnJvclxyXG4gICAqICAgICAgICAgIGlmIHRoZSBIVFRQIHJlcXVlc3QgZmFpbHMgKGZvciBleGFtcGxlIG5ldHdvcmsgaXNzdWVzIG9yIG5vbi0yeHggcmVzcG9uc2VzKS5cclxuICAgKi9cclxuICBnZXRIb2xpZGF5IChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxIb2xpZGF5T3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEhvbGlkYXlPdXQ+PihgJHt0aGlzLnVybH0vaG9saWRheXMvJHtpZH1gKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIGEgUE9TVCByZXF1ZXN0IHRvIGNyZWF0ZSBhIG5ldyBob2xpZGF5IGFuZCByZXR1cm5zIHRoZSBjcmVhdGVkIHJlc291cmNlLlxyXG4gICAqXHJcbiAgICogVGhlIHJlcXVlc3QgcGF5bG9hZCBpcyBzZW50IGFzIGFuIG9iamVjdCB3aXRoIGEgYGJvZHlgIHByb3BlcnR5IGNvbnRhaW5pbmcgdGhlIHByb3ZpZGVkXHJcbiAgICogSG9saWRheUluIHZhbHVlIChpLmUuIHsgYm9keTogSG9saWRheUluIH0pLiBPbiBzdWNjZXNzIHRoZSBIVFRQIHJlc3BvbnNlIGlzIGV4cGVjdGVkXHJcbiAgICogdG8gZm9sbG93IHRoZSBBcGlTdWNjZXNzPFQ+IHNoYXBlOyB0aGUgb3BlcmF0b3IgbWFwcyB0aGF0IHJlc3BvbnNlIHRvIHRoZSBpbm5lciBgZGF0YWBcclxuICAgKiBvYmplY3QgYW5kIGVtaXRzIGl0IGFzIGEgSG9saWRheU91dC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBib2R5IC0gVGhlIGhvbGlkYXkgcGF5bG9hZCB0byBjcmVhdGUgKEhvbGlkYXlJbikuXHJcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxIb2xpZGF5T3V0PiB0aGF0IGVtaXRzIHRoZSBjcmVhdGVkIGhvbGlkYXkgb24gc3VjY2Vzcy5cclxuICAgKi9cclxuICBwb3N0SG9saWRheSAoYm9keTogSG9saWRheUluKTogT2JzZXJ2YWJsZTxIb2xpZGF5T3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxIb2xpZGF5T3V0Pj4oYCR7dGhpcy51cmx9L2hvbGlkYXlzYCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgYSBob2xpZGF5IGJ5IGl0cyBJRC5cclxuICAgKlxyXG4gICAqIFNlbmRzIGFuIEhUVFAgUFVUIHRvIGAke3RoaXMudXJsfS9ob2xpZGF5cy8ke2lkfWAgd2l0aCB0aGUgcHJvdmlkZWQgcGF5bG9hZC5cclxuICAgKiBUaGUgcmVxdWVzdCBib2R5IGlzIHNlbnQgYXMgYW4gb2JqZWN0IHdpdGggYSBgYm9keWAgcHJvcGVydHkgY29udGFpbmluZyB0aGVcclxuICAgKiBgSG9saWRheUluYCBkYXRhLiBUaGUgc2VydmVyIHJlc3BvbnNlIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGBBcGlTdWNjZXNzPEhvbGlkYXlPdXQ+YFxyXG4gICAqIGFuZCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgdW53cmFwcGVkIGBIb2xpZGF5T3V0YC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBob2xpZGF5IHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0gYm9keSAtIFRoZSB1cGRhdGUgcGF5bG9hZCBmb3IgdGhlIGhvbGlkYXkuXHJcbiAgICogQHJldHVybnMgQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB1cGRhdGVkIGBIb2xpZGF5T3V0YCBvbiBzdWNjZXNzLlxyXG4gICAqL1xyXG4gIHB1dEhvbGlkYXkgKGlkOiBudW1iZXIsIGJvZHk6IEhvbGlkYXlJbik6IE9ic2VydmFibGU8SG9saWRheU91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxIb2xpZGF5T3V0Pj4oYCR7dGhpcy51cmx9L2hvbGlkYXlzLyR7aWR9YCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGVzIGEgcXVlc3Rpb24gYnkgaXRzIElELlxyXG4gICAqXHJcbiAgICogU2VuZHMgYW4gSFRUUCBERUxFVEUgcmVxdWVzdCB0byB0aGUgYmFja2VuZCBlbmRwb2ludCBgL3F1ZXN0aW9ucy97aWR9YCBhbmRcclxuICAgKiByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgQVBJIHJlc3BvbnNlJ3MgYGRhdGFgIHBheWxvYWQgKHR5cGljYWxseSBhbiBlbXB0eSBvYmplY3QpLlxyXG4gICAqXHJcbiAgICogVGhlIGltcGxlbWVudGF0aW9uIG1hcHMgYW4gQXBpU3VjY2VzcyB3cmFwcGVyIHRvIGl0cyBgZGF0YWAgcHJvcGVydHkgYmVmb3JlIGVtaXR0aW5nLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGlkIC0gVGhlIG51bWVyaWMgaWRlbnRpZmllciBvZiB0aGUgcXVlc3Rpb24gdG8gZGVsZXRlLlxyXG4gICAqIEByZXR1cm5zIEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgZGVsZXRlZCByZXNvdXJjZSBwYXlsb2FkICh7fSBleHBlY3RlZCkgb24gc3VjY2Vzcy5cclxuICAgKiAgICAgICAgICBUaGUgT2JzZXJ2YWJsZSB3aWxsIGVtaXQgYW4gZXJyb3IgaWYgdGhlIEhUVFAgcmVxdWVzdCBmYWlscy5cclxuICAgKi9cclxuICBkZWxldGVIb2xpZGF5IChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTx7fT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8QXBpU3VjY2Vzczx7fT4+KGAke3RoaXMudXJsfS9ob2xpZGF5cy8ke2lkfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiBidXNpbmVzcyBwYXJ0eSB0cmFkZXIgdHlwZXNcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBRdWVyeSBwYXJhbWV0ZXJzIGZvciBmaWx0ZXJpbmcgYW5kIHBhZ2luYXRpb24gKG9wdGlvbmFsKVxyXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPEJ1c2luZXNzUGFydHlUcmFkZXJUeXBlc091dD59IE9ic2VydmFibGUgY29udGFpbmluZyB0aGUgbGlzdCBvZiB0cmFkZXIgdHlwZXNcclxuICAgKi9cclxuICBnZXRCdXNpbmVzc1BhcnR5VHJhZGVyVHlwZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPEJ1c2luZXNzUGFydHlUcmFkZXJUeXBlc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxCdXNpbmVzc1BhcnR5VHJhZGVyVHlwZXNPdXQ+PihgJHt0aGlzLnVybH0vYnVzaW5lc3MtcGFydHktdHJhZGVyLXR5cGVzYClcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
626
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNhdGFsb2dzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHBlcnRlYW0tbXgvbmd4LXNlcnZpY2VzL3NyYy9saWIvYXBpcy9hcGktY2F0YWxvZ3Muc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUdsRCxPQUFPLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFBOzs7QUFvRHRDLE1BQU0sT0FBTyxrQkFBa0I7SUFFSjtJQUNmO0lBRlYsWUFDeUIsWUFBeUIsRUFDeEMsSUFBZ0I7UUFERCxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN4QyxTQUFJLEdBQUosSUFBSSxDQUFZO0lBQ3RCLENBQUM7SUFFTDs7OztPQUlHO0lBQ0gsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUE7SUFDL0MsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsaUJBQWlCLENBQUUsTUFBbUI7UUFDcEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBZ0MsR0FBRyxJQUFJLENBQUMsR0FBRyxrQkFBa0IsRUFBRTtZQUNqRixNQUFNO1NBQ1AsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHNCQUFzQixDQUFFLE1BQW1CO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsdUJBQXVCLEVBQUU7WUFDM0YsTUFBTTtTQUNQLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gscUJBQXFCLENBQUUsRUFBVTtRQUMvQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFvQyxHQUFHLElBQUksQ0FBQyxHQUFHLHlCQUF5QixFQUFFLEVBQUUsQ0FBQzthQUM5RixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILHVCQUF1QixDQUFFLElBQTBCO1FBQ2pELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQW9DLEdBQUcsSUFBSSxDQUFDLEdBQUcsdUJBQXVCLEVBQUUsSUFBSSxDQUFDO2FBQy9GLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNILHFCQUFxQixDQUFFLEVBQVUsRUFBRSxJQUEwQjtRQUMzRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFvQyxHQUFHLElBQUksQ0FBQyxHQUFHLHlCQUF5QixFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUM7YUFDcEcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsd0JBQXdCLENBQUUsRUFBVTtRQUNsQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFpQixHQUFHLElBQUksQ0FBQyxHQUFHLHlCQUF5QixFQUFFLEVBQUUsQ0FBQzthQUM5RSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILHVDQUF1QyxDQUFFLElBQTBDO1FBQ2pGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQW9ELEdBQUcsSUFBSSxDQUFDLEdBQUcseUNBQXlDLEVBQUUsSUFBSSxDQUFDO2FBQ2pJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGVBQWUsQ0FBRSxNQUFtQjtRQUNsQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUE4QixHQUFHLElBQUksQ0FBQyxHQUFHLGVBQWUsRUFBRTtZQUM1RSxNQUFNO1NBQ1AsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGVBQWUsQ0FBRSxJQUFtQjtRQUNsQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUE2QixHQUFHLElBQUksQ0FBQyxHQUFHLGVBQWUsRUFBRSxJQUFJLENBQUM7YUFDaEYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGNBQWMsQ0FBRSxFQUFVLEVBQUUsSUFBbUI7UUFDN0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBNkIsR0FBRyxJQUFJLENBQUMsR0FBRyxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDO2FBQ3JGLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFlBQVksQ0FBRSxNQUFtQjtRQUMvQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUEyQixHQUFHLElBQUksQ0FBQyxHQUFHLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDO2FBQ2hGLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFVBQVUsQ0FBRSxFQUFVO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXlCLEdBQUcsSUFBSSxDQUFDLEdBQUcsY0FBYyxFQUFFLEVBQUUsQ0FBQzthQUN4RSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsVUFBVSxDQUFFLEVBQVUsRUFBRSxJQUFlO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXlCLEdBQUcsSUFBSSxDQUFDLEdBQUcsY0FBYyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUM7YUFDOUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsa0JBQWtCLENBQUUsTUFBbUI7UUFDckMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBaUMsR0FBRyxJQUFJLENBQUMsR0FBRyxtQkFBbUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDO2FBQzdGLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFVBQVUsQ0FBRSxNQUFtQjtRQUM3QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF5QixHQUFHLElBQUksQ0FBQyxHQUFHLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDO2FBQzVFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFFBQVEsQ0FBRSxNQUFtQjtRQUMzQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF1QixHQUFHLElBQUksQ0FBQyxHQUFHLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDO2FBQ3hFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGtCQUFrQixDQUFFLE1BQW1CO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQWlDLEdBQUcsSUFBSSxDQUFDLEdBQUcsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQzthQUM3RixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxzQkFBc0IsQ0FBRSxNQUFtQjtRQUN6QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFxQyxHQUFHLElBQUksQ0FBQyxHQUFHLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUM7YUFDckcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsc0JBQXNCLENBQUUsSUFBMEI7UUFDaEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBb0MsR0FBRyxJQUFJLENBQUMsR0FBRyx1QkFBdUIsRUFBRSxJQUFJLENBQUM7YUFDL0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILHFCQUFxQixDQUFFLEVBQVUsRUFBRSxJQUEwQjtRQUMzRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFvQyxHQUFHLElBQUksQ0FBQyxHQUFHLHlCQUF5QixFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUM7YUFDcEcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsYUFBYSxDQUFFLE1BQW1CO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQTRCLEdBQUcsSUFBSSxDQUFDLEdBQUcsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUM7YUFDbEYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsWUFBWSxDQUFFLE1BQW1CO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQTJCLEdBQUcsSUFBSSxDQUFDLEdBQUcsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUM7YUFDaEYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsUUFBUSxDQUFFLE1BQW1CO1FBQzNCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXVCLEdBQUcsSUFBSSxDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUM7YUFDeEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsaUJBQWlCLENBQUUsTUFBbUI7UUFDcEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBZ0MsR0FBRyxJQUFJLENBQUMsR0FBRyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDO2FBQzNGLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHVCQUF1QixDQUFFLE1BQW1CO1FBQzFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXNDLEdBQUcsSUFBSSxDQUFDLEdBQUcseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQzthQUN4RyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxnQkFBZ0IsQ0FBRSxNQUFtQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUErQixHQUFHLElBQUksQ0FBQyxHQUFHLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUM7YUFDekYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsZ0JBQWdCLENBQUUsSUFBb0I7UUFDcEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBOEIsR0FBRyxJQUFJLENBQUMsR0FBRyxpQkFBaUIsRUFBRSxJQUFJLENBQUM7YUFDbkYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGVBQWUsQ0FBRSxFQUFVLEVBQUUsSUFBb0I7UUFDL0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBOEIsR0FBRyxJQUFJLENBQUMsR0FBRyxtQkFBbUIsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDO2FBQ3hGLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxnQkFBZ0IsQ0FBRSxFQUFVLEVBQUUsSUFBNkI7UUFDekQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBOEIsR0FBRyxJQUFJLENBQUMsR0FBRyxtQkFBbUIsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDO2FBQ3hGLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsQ0FBRSxJQUFlO1FBQzFCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQXlCLEdBQUcsSUFBSSxDQUFDLEdBQUcsV0FBVyxFQUFFLElBQUksQ0FBQzthQUN4RSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsVUFBVSxDQUFFLEVBQVUsRUFBRSxJQUFlO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXlCLEdBQUcsSUFBSSxDQUFDLEdBQUcsYUFBYSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUM7YUFDN0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsc0JBQXNCLENBQUUsTUFBbUI7UUFDekMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBcUMsR0FBRyxJQUFJLENBQUMsR0FBRyx3QkFBd0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDO2FBQ3RHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHNCQUFzQixDQUFFLElBQTBCO1FBQ2hELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQW9DLEdBQUcsSUFBSSxDQUFDLEdBQUcsd0JBQXdCLEVBQUUsSUFBSSxDQUFDO2FBQ2hHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxxQkFBcUIsQ0FBRSxFQUFVLEVBQUUsSUFBMEI7UUFDM0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBb0MsR0FBRyxJQUFJLENBQUMsR0FBRywwQkFBMEIsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDO2FBQ3JHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGVBQWUsQ0FBRSxNQUFtQjtRQUNsQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUE4QixHQUFHLElBQUksQ0FBQyxHQUFHLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUM7YUFDdkYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsZUFBZSxDQUFFLElBQW1CO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQTZCLEdBQUcsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDO2FBQ2pGLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxjQUFjLENBQUUsRUFBVSxFQUFFLElBQW1CO1FBQzdDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQTZCLEdBQUcsSUFBSSxDQUFDLEdBQUcsa0JBQWtCLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQzthQUN0RixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsZUFBZSxDQUFFLEVBQVUsRUFBRSxJQUE0QjtRQUN2RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUE2QixHQUFHLElBQUksQ0FBQyxHQUFHLGtCQUFrQixFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUM7YUFDdEYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsaUJBQWlCLENBQUUsTUFBbUI7UUFDcEMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBZ0MsR0FBRyxJQUFJLENBQUMsR0FBRyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDO2FBQzNGLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILG1CQUFtQixDQUFFLE1BQW1CO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQWtDLEdBQUcsSUFBSSxDQUFDLEdBQUcsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQzthQUMvRixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxZQUFZLENBQUUsTUFBbUI7UUFDL0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBMkIsR0FBRyxJQUFJLENBQUMsR0FBRyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQzthQUNoRixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsV0FBVyxDQUFFLEVBQVU7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBMEIsR0FBRyxJQUFJLENBQUMsR0FBRyxjQUFjLEVBQUUsRUFBRSxDQUFDO2FBQ3pFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0gsWUFBWSxDQUFFLElBQWdCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQTBCLEdBQUcsSUFBSSxDQUFDLEdBQUcsWUFBWSxFQUFFLElBQUksQ0FBQzthQUMxRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxXQUFXLENBQUUsRUFBVSxFQUFFLElBQWdCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQTBCLEdBQUcsSUFBSSxDQUFDLEdBQUcsY0FBYyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUM7YUFDL0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsY0FBYyxDQUFFLEVBQVU7UUFDeEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBaUIsR0FBRyxJQUFJLENBQUMsR0FBRyxjQUFjLEVBQUUsRUFBRSxDQUFDO2FBQ25FLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILFdBQVcsQ0FBRSxNQUFtQjtRQUM5QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUEwQixHQUFHLElBQUksQ0FBQyxHQUFHLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDO2FBQzlFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxVQUFVLENBQUUsRUFBVTtRQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUF5QixHQUFHLElBQUksQ0FBQyxHQUFHLGFBQWEsRUFBRSxFQUFFLENBQUM7YUFDdkUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxXQUFXLENBQUUsSUFBZTtRQUMxQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUF5QixHQUFHLElBQUksQ0FBQyxHQUFHLFdBQVcsRUFBRSxJQUFJLENBQUM7YUFDeEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsVUFBVSxDQUFFLEVBQVUsRUFBRSxJQUFlO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXlCLEdBQUcsSUFBSSxDQUFDLEdBQUcsYUFBYSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUM7YUFDN0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsYUFBYSxDQUFFLEVBQVU7UUFDdkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBaUIsR0FBRyxJQUFJLENBQUMsR0FBRyxhQUFhLEVBQUUsRUFBRSxDQUFDO2FBQ2xFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsMkJBQTJCLENBQUUsTUFBbUI7UUFDOUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBMEMsR0FBRyxJQUFJLENBQUMsR0FBRyw4QkFBOEIsRUFDckcsRUFBRSxNQUFNLEVBQUUsQ0FDWCxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2pDLENBQUM7d0dBcHBCVSxrQkFBa0Isa0JBRW5CLEtBQUs7NEdBRkosa0JBQWtCLGNBRmpCLE1BQU07OzRGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQUdJLE1BQU07MkJBQUMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSAnLi4vbmd4LXNlcnZpY2VzLm1vZGVscydcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xyXG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJ1xyXG5pbXBvcnQgeyBBcGlTdWNjZXNzLCBRdWVyeVBhcmFtcyB9IGZyb20gJy4vbW9kZWxzL2FwaS5tb2RlbHMnXHJcbmltcG9ydCB7XHJcbiAgQnVzaW5lc3NQYXJ0eVRyYWRlclR5cGVzT3V0LFxyXG4gIENhbmNlbGxhdGlvblJlYXNvbkluLFxyXG4gIENhbmNlbGxhdGlvblJlYXNvbk91dCxcclxuICBDYW5jZWxsYXRpb25SZWFzb25zT3V0LFxyXG4gIENvdW50cmllc091dCxcclxuICBDb3VudHJ5SW4sXHJcbiAgQ291bnRyeU91dCxcclxuICBDdXJyZW5jaWVzT3V0LFxyXG4gIEV4dHJhQ2hhcmdlSW4sXHJcbiAgRXh0cmFDaGFyZ2VPdXQsXHJcbiAgRXh0cmFDaGFyZ2VzT3V0LFxyXG4gIEdlbmVyaWNGb2xpb0luLFxyXG4gIEdlbmVyaWNGb2xpb091dCxcclxuICBHZW5lcmljRm9saW9zT3V0LFxyXG4gIEhvbGlkYXlJbixcclxuICBIb2xpZGF5T3V0LFxyXG4gIEhvbGlkYXlzT3V0LFxyXG4gIElkZW50aWZpY2F0aW9uVHlwZUluLFxyXG4gIElkZW50aWZpY2F0aW9uVHlwZU51bWJlclZhbGlkYXRpb25JbixcclxuICBJZGVudGlmaWNhdGlvblR5cGVOdW1iZXJWYWxpZGF0aW9uT3V0LFxyXG4gIElkZW50aWZpY2F0aW9uVHlwZU91dCxcclxuICBJZGVudGlmaWNhdGlvblR5cGVzT3V0LFxyXG4gIExhbmd1YWdlc091dCxcclxuICBNYW5hZ2VtZW50QXJlYXNPdXQsXHJcbiAgT3BlcmF0aW9uVHlwZXNPdXQsXHJcbiAgUG9zdGFsTG9jYXRpb25zT3V0LFxyXG4gIFByb2R1Y3RJbixcclxuICBQcm9kdWN0T3V0LFxyXG4gIFF1ZXN0aW9uSW4sXHJcbiAgUXVlc3Rpb25PdXQsXHJcbiAgUXVlc3Rpb25zT3V0LFxyXG4gIFJlZ2lvbnNPdXQsXHJcbiAgU2hpcG1lbnRDb250ZW50VHlwZXNPdXQsXHJcbiAgU2hpcG1lbnRHcm91cHNPdXQsXHJcbiAgU2hpcG1lbnRJbmNvbWVUeXBlSW4sXHJcbiAgU2hpcG1lbnRJbmNvbWVUeXBlT3V0LFxyXG4gIFNoaXBtZW50SW5jb21lVHlwZXNPdXQsXHJcbiAgU2hpcG1lbnRTY29wZXNPdXQsXHJcbiAgU2hpcG1lbnRTdGF0dXNlc091dCxcclxuICBVbmlxdWVGb2xpb0luLFxyXG4gIFVuaXF1ZUZvbGlvT3V0LFxyXG4gIFVuaXF1ZUZvbGlvc091dCxcclxuICBVbml0c091dCxcclxuICBab25lc091dFxyXG59IGZyb20gJy4vbW9kZWxzL2FwaS1jYXRhbG9nLnR5cGVzJ1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXBpQ2F0YWxvZ3NTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3RvciAoXHJcbiAgICBASW5qZWN0KCdlbnYnKSBwcml2YXRlIGVudmlyb25tZW50czogRW52aXJvbm1lbnQsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnRcclxuICApIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgdGhlIFVSTCBmb3IgdGhlIHJlcG9ydHMgQVBJIGZyb20gdGhlIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb25zLlxyXG4gICAqXHJcbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgVVJMIG9mIHRoZSByZXBvcnRzIEFQSS5cclxuICAgKi9cclxuICBnZXQgdXJsICgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnRzLmFwaUNhdGFsb2dzVXJsID8/ICcnXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgY29sbGVjdGlvbiBwYXltZW50c1xyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdXNlZCB0byBmZXRjaCB0aGUgb3BlcmF0aW9uIHR5cGVzLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8T3BlcmF0aW9uVHlwZXNPdXRbXT59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyBhbiBhcnJheSBvZiBvcGVyYXRpb24gdHlwZS5cclxuICAgKi9cclxuICBnZXRPcGVyYXRpb25UeXBlcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8T3BlcmF0aW9uVHlwZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8T3BlcmF0aW9uVHlwZXNPdXQ+PihgJHt0aGlzLnVybH0vb3BlcmF0aW9uLXR5cGVzYCwge1xyXG4gICAgICBwYXJhbXNcclxuICAgIH0pLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgaWRlbnRpZmljYXRpb3MgdHlwZXNcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHVzZWQgdG8gZmV0Y2ggdGhlIGlkZW50aWZpY2F0aW9uIHR5cGVzLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8SWRlbnRpZmljYXRpb25UeXBlc091dFtdPn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGFuIGFycmF5IG9mIGlkZW50aWZpY2F0aW9uIHR5cGUuXHJcbiAgICovXHJcbiAgZ2V0SWRlbnRpZmljYXRpb25UeXBlcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8SWRlbnRpZmljYXRpb25UeXBlc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxJZGVudGlmaWNhdGlvblR5cGVzT3V0Pj4oYCR7dGhpcy51cmx9L2lkZW50aWZpY2F0aW9uLXR5cGVzYCwge1xyXG4gICAgICBwYXJhbXNcclxuICAgIH0pLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSBhIHNpbmdsZSBpZGVudGlmaWNhdGlvbiB0eXBlIGJ5IGl0cyBpZC5cclxuICAgKlxyXG4gICAqIFNlbmRzIGFuIEhUVFAgR0VUIHJlcXVlc3QgdG8gdGhlIGluZGVudGlmaWNhdGlvbiB0eXBlIGVuZHBvaW50IGFuZCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0c1xyXG4gICAqIHRoZSBJZGVudGlmaWNhdGlvblR5cGVPdXQgcGF5bG9hZCBleHRyYWN0ZWQgZnJvbSB0aGUgQVBJIHN1Y2Nlc3MgZW52ZWxvcGUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaWQgLSBUaGUgbnVtZXJpYyBpZGVudGlmaWVyIG9mIHRoZSBpZGVudGlmaWNhdGlvbiB0eXBlIHRvIGZldGNoLlxyXG4gICAqIEByZXR1cm5zIEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVxdWVzdGVkIElkZW50aWZpY2F0aW9uVHlwZU91dC4gVGhlIE9ic2VydmFibGUgd2lsbCBlcnJvclxyXG4gICAqICAgICAgICAgIGlmIHRoZSBIVFRQIHJlcXVlc3QgZmFpbHMgKGZvciBleGFtcGxlIG5ldHdvcmsgaXNzdWVzIG9yIG5vbi0yeHggcmVzcG9uc2VzKS5cclxuICAgKi9cclxuICBnZXRJZGVudGlmaWNhdGlvblR5cGUgKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPElkZW50aWZpY2F0aW9uVHlwZU91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxJZGVudGlmaWNhdGlvblR5cGVPdXQ+PihgJHt0aGlzLnVybH0vaWRlbnRpZmljYXRpb24tdHlwZXMvJHtpZH1gKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIGEgUE9TVCByZXF1ZXN0IHRvIGNyZWF0ZSBhIG5ldyBpZGVudGlmaWNhdGlvbiB0eXBlIGFuZCByZXR1cm5zIHRoZSBjcmVhdGVkIHJlc291cmNlLlxyXG4gICAqXHJcbiAgICogVGhlIHJlcXVlc3QgcGF5bG9hZCBpcyBzZW50IGFzIGFuIG9iamVjdCB3aXRoIGEgYGJvZHlgIHByb3BlcnR5IGNvbnRhaW5pbmcgdGhlIHByb3ZpZGVkXHJcbiAgICogSWRlbnRpZmljYXRpb25UeXBlSW4gdmFsdWUgKGkuZS4geyBib2R5OiBJZGVudGlmaWNhdGlvblR5cGVJbiB9KS4gT24gc3VjY2VzcyB0aGUgSFRUUCByZXNwb25zZSBpcyBleHBlY3RlZFxyXG4gICAqIHRvIGZvbGxvdyB0aGUgQXBpU3VjY2VzczxUPiBzaGFwZTsgdGhlIG9wZXJhdG9yIG1hcHMgdGhhdCByZXNwb25zZSB0byB0aGUgaW5uZXIgYGRhdGFgXHJcbiAgICogb2JqZWN0IGFuZCBlbWl0cyBpdCBhcyBhIElkZW50aWZpY2F0aW9uVHlwZU91dC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBib2R5IC0gVGhlIGlkZW50aWZpY2F0aW9uIHR5cGUgcGF5bG9hZCB0byBjcmVhdGUgKElkZW50aWZpY2F0aW9uVHlwZUluKS5cclxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPElkZW50aWZpY2F0aW9uVHlwZU91dD4gdGhhdCBlbWl0cyB0aGUgY3JlYXRlZCBpZGVudGlmaWNhdGlvbiB0eXBlIG9uIHN1Y2Nlc3MuXHJcbiAgICovXHJcbiAgcG9zdElkZW50aWZpY2F0aW9udFR5cGUgKGJvZHk6IElkZW50aWZpY2F0aW9uVHlwZUluKTogT2JzZXJ2YWJsZTxJZGVudGlmaWNhdGlvblR5cGVPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPElkZW50aWZpY2F0aW9uVHlwZU91dD4+KGAke3RoaXMudXJsfS9pZGVudGlmaWNhdGlvbi10eXBlc2AsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGEgaWRlbnRpZmljYXRpb24gdHlwZSBieSBpdHMgSUQuXHJcbiAgICpcclxuICAgKiBTZW5kcyBhbiBIVFRQIFBVVCB0byBgJHt0aGlzLnVybH0vaWRlbnRpZmljYXRpb24tdHlwZXMvJHtpZH1gIHdpdGggdGhlIHByb3ZpZGVkIHBheWxvYWQuXHJcbiAgICogVGhlIHJlcXVlc3QgYm9keSBpcyBzZW50IGFzIGFuIG9iamVjdCB3aXRoIGEgYGJvZHlgIHByb3BlcnR5IGNvbnRhaW5pbmcgdGhlXHJcbiAgICogYElkZW50aWZpY2F0aW9uVHlwZUluYCBkYXRhLiBUaGUgc2VydmVyIHJlc3BvbnNlIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGBBcGlTdWNjZXNzPElkZW50aWZpY2F0aW9uVHlwZU91dD5gXHJcbiAgICogYW5kIHRoaXMgbWV0aG9kIHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB1bndyYXBwZWQgYElkZW50aWZpY2F0aW9uVHlwZU91dGAuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaWQgLSBUaGUgaWRlbnRpZmllciBvZiB0aGUgaWRlbnRpZmljYXRpb24gdHlwZSB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgdXBkYXRlIHBheWxvYWQgZm9yIHRoZSBpZGVudGlmaWNhdGlvbiB0eXBlLlxyXG4gICAqIEByZXR1cm5zIEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgdXBkYXRlZCBgSWRlbnRpZmljYXRpb25UeXBlT3V0YCBvbiBzdWNjZXNzLlxyXG4gICAqL1xyXG4gIHB1dElkZW50aWZpY2F0aW9uVHlwZSAoaWQ6IG51bWJlciwgYm9keTogSWRlbnRpZmljYXRpb25UeXBlSW4pOiBPYnNlcnZhYmxlPElkZW50aWZpY2F0aW9uVHlwZU91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxJZGVudGlmaWNhdGlvblR5cGVPdXQ+PihgJHt0aGlzLnVybH0vaWRlbnRpZmljYXRpb24tdHlwZXMvJHtpZH1gLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZSBhIGlkZW50aWZpY2F0aW9uIHR5cGUgYnkgaXRzIElELlxyXG4gICAqXHJcbiAgICogU2VuZHMgYW4gSFRUUCBERUxFVEUgcmVxdWVzdCB0byB0aGUgYmFja2VuZCBlbmRwb2ludCBgL2lkZW50aWZpY2F0aW9uLXR5cGVzL3tpZH1gIGFuZFxyXG4gICAqIHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBBUEkgcmVzcG9uc2UncyBgZGF0YWAgcGF5bG9hZCAodHlwaWNhbGx5IGFuIGVtcHR5IG9iamVjdCkuXHJcbiAgICpcclxuICAgKiBUaGUgaW1wbGVtZW50YXRpb24gbWFwcyBhbiBBcGlTdWNjZXNzIHdyYXBwZXIgdG8gaXRzIGBkYXRhYCBwcm9wZXJ0eSBiZWZvcmUgZW1pdHRpbmcuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaWQgLSBUaGUgbnVtZXJpYyBpZGVudGlmaWVyIG9mIHRoZSBpZGVudGlmaWNhdGlvbiB0eXBlIHRvIGRlbGV0ZS5cclxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGRlbGV0ZWQgcmVzb3VyY2UgcGF5bG9hZCAoe30gZXhwZWN0ZWQpIG9uIHN1Y2Nlc3MuXHJcbiAgICogICAgICAgICAgVGhlIE9ic2VydmFibGUgd2lsbCBlbWl0IGFuIGVycm9yIGlmIHRoZSBIVFRQIHJlcXVlc3QgZmFpbHMuXHJcbiAgICovXHJcbiAgZGVsZXRlSWRlbnRpZmljYXRpb25UeXBlIChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTx7fT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8QXBpU3VjY2Vzczx7fT4+KGAke3RoaXMudXJsfS9pZGVudGlmaWNhdGlvbi10eXBlcy8ke2lkfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZHMgYSBQT1NUIHJlcXVlc3QgdG8gdmFsaWRhdGUgaWRlbnRpZmljYXRpb24gdHlwZSBudW1iZXIuXHJcbiAgICpcclxuICAgKiBUaGUgcmVxdWVzdCBwYXlsb2FkIGlzIHNlbnQgYXMgYW4gb2JqZWN0IHdpdGggYSBgYm9keWAgcHJvcGVydHkgY29udGFpbmluZyB0aGUgcHJvdmlkZWRcclxuICAgKiBJZGVudGlmaWNhdGlvblR5cGVOdW1iZXJWYWxpZGF0aW9uSW4gdmFsdWUgKGkuZS4geyBib2R5OiBJZGVudGlmaWNhdGlvblR5cGVOdW1iZXJWYWxpZGF0aW9uSW4gfSkuIE9uIHN1Y2Nlc3MgdGhlIEhUVFAgcmVzcG9uc2UgaXMgZXhwZWN0ZWRcclxuICAgKiB0byBmb2xsb3cgdGhlIEFwaVN1Y2Nlc3M8VD4gc2hhcGU7IHRoZSBvcGVyYXRvciBtYXBzIHRoYXQgcmVzcG9uc2UgdG8gdGhlIGlubmVyIGBkYXRhYFxyXG4gICAqIG9iamVjdCBhbmQgZW1pdHMgaXQgYXMgYSBJZGVudGlmaWNhdGlvblR5cGVOdW1iZXJWYWxpZGF0aW9uT3V0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgaWRlbnRpZmljYXRpb24gdHlwZSBudW1iZXIgdmFsaWRhdGlvbiBwYXlsb2FkIHRvIHZhbGlkYXRlIChJZGVudGlmaWNhdGlvblR5cGVOdW1iZXJWYWxpZGF0aW9uSW4pLlxyXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8SWRlbnRpZmljYXRpb25UeXBlTnVtYmVyVmFsaWRhdGlvbk91dD4gdGhhdCBlbWl0cyB0aGUgdmFsaWRhdGUgc3RhdHVzLlxyXG4gICAqL1xyXG4gIHBvc3RJZGVudGlmaWNhdGlvbnRUeXBlTnVtYmVyVmFsaWRhdGlvbiAoYm9keTogSWRlbnRpZmljYXRpb25UeXBlTnVtYmVyVmFsaWRhdGlvbkluKTogT2JzZXJ2YWJsZTxJZGVudGlmaWNhdGlvblR5cGVOdW1iZXJWYWxpZGF0aW9uT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxJZGVudGlmaWNhdGlvblR5cGVOdW1iZXJWYWxpZGF0aW9uT3V0Pj4oYCR7dGhpcy51cmx9L2lkZW50aWZpY2F0aW9uLXR5cGVzL251bWJlci12YWxpZGF0aW9uYCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIHRoZSBleHRyYSBjaGFyZ2VzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gZmlsdGVyIHRoZSByZXN1bHRzLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8RXh0cmFDaGFyZ2VzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgZXh0cmEgY2hhcmdlcyBkYXRhLlxyXG4gICAqL1xyXG4gIGdldEV4dHJhQ2hhcmdlcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8RXh0cmFDaGFyZ2VzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEV4dHJhQ2hhcmdlc091dD4+KGAke3RoaXMudXJsfS9leHRyYWNoYXJnZXNgLCB7XHJcbiAgICAgIHBhcmFtc1xyXG4gICAgfSkucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1Ym1pdHMgYW4gZXh0cmEgY2hhcmdlIHJlcXVlc3QgdG8gdGhlIHNlcnZlciBhbmQgcmV0dXJucyB0aGUgY3JlYXRlZCBleHRyYSBjaGFyZ2UgZGV0YWlscy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RXh0cmFDaGFyZ2VJbn0gYm9keSAtIFRoZSBkYXRhIGZvciB0aGUgZXh0cmEgY2hhcmdlIHRvIGJlIGNyZWF0ZWQuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxFeHRyYUNoYXJnZU91dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgZGV0YWlscyBvZiB0aGUgY3JlYXRlZCBleHRyYSBjaGFyZ2UuXHJcbiAgICovXHJcbiAgcG9zdEV4dHJhQ2hhcmdlIChib2R5OiBFeHRyYUNoYXJnZUluKTogT2JzZXJ2YWJsZTxFeHRyYUNoYXJnZU91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFwaVN1Y2Nlc3M8RXh0cmFDaGFyZ2VPdXQ+PihgJHt0aGlzLnVybH0vZXh0cmFjaGFyZ2VzYCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIGFuIGV4dHJhIGNoYXJnZSBlbnRpdHkgd2l0aCBuZXcgZGF0YSBhbmQgcmV0dXJucyB0aGUgdXBkYXRlZCBlbnRpdHkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGV4dHJhIGNoYXJnZSB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtFeHRyYUNoYXJnZUlufSBib2R5IC0gVGhlIG5ldyBkYXRhIGZvciB0aGUgZXh0cmEgY2hhcmdlLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8RXh0cmFDaGFyZ2VPdXQ+fSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSB1cGRhdGVkIGV4dHJhIGNoYXJnZSBlbnRpdHkuXHJcbiAgICovXHJcbiAgcHV0RXh0cmFDaGFyZ2UgKGlkOiBudW1iZXIsIGJvZHk6IEV4dHJhQ2hhcmdlSW4pOiBPYnNlcnZhYmxlPEV4dHJhQ2hhcmdlT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPEV4dHJhQ2hhcmdlT3V0Pj4oYCR7dGhpcy51cmx9L2V4dHJhY2hhcmdlcy8ke2lkfWAsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyBhIGxpc3Qgb2YgY291bnRyaWVzIGZyb20gdGhlIEFQSS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCB0byB0aGUgQVBJIHJlcXVlc3QuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb3VudHJpZXNPdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIGxpc3Qgb2YgY291bnRyaWVzLlxyXG4gICAqL1xyXG4gIGdldENvdW50cmllcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8Q291bnRyaWVzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPENvdW50cmllc091dD4+KGAke3RoaXMudXJsfS9jb3VudHJpZXNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyB0aGUgZGV0YWlscyBvZiBhIGNvdW50cnkgYmFzZWQgb24gaXRzIElELlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIGlkZW50aWZpZXIgb2YgdGhlIGNvdW50cnkgdG8gZmV0Y2guXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb3VudHJ5T3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBjb3VudHJ5IGRhdGEuXHJcbiAgICovXHJcbiAgZ2V0Q291bnRyeSAoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8Q291bnRyeU91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxDb3VudHJ5T3V0Pj4oYCR7dGhpcy51cmx9L2NvdW50cmllcy8ke2lkfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgZGV0YWlscyBvZiBhIHNwZWNpZmljIGNvdW50cnkgYnkgaXRzIElELlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjb3VudHJ5IHRvIGJlIHVwZGF0ZWQuXHJcbiAgICogQHBhcmFtIHtDb3VudHJ5SW59IGJvZHkgLSBUaGUgZGF0YSB0byB1cGRhdGUgdGhlIGNvdW50cnkgd2l0aC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENvdW50cnlPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHVwZGF0ZWQgY291bnRyeSBkYXRhLlxyXG4gICAqL1xyXG4gIHB1dENvdW50cnkgKGlkOiBudW1iZXIsIGJvZHk6IENvdW50cnlJbik6IE9ic2VydmFibGU8Q291bnRyeU91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxDb3VudHJ5T3V0Pj4oYCR7dGhpcy51cmx9L2NvdW50cmllcy8ke2lkfWAsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyBwb3N0YWwgbG9jYXRpb24gZGV0YWlscyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIGZpbHRlciBhbmQgZmV0Y2ggcG9zdGFsIGxvY2F0aW9uIGRhdGEuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxQb3N0YWxMb2NhdGlvbnNPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHBvc3RhbCBsb2NhdGlvbiBkZXRhaWxzLlxyXG4gICAqL1xyXG4gIGdldFBvc3RhbExvY2F0aW9ucyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8UG9zdGFsTG9jYXRpb25zT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFBvc3RhbExvY2F0aW9uc091dD4+KGAke3RoaXMudXJsfS9wb3N0YWwtbG9jYXRpb25zYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIGEgbGlzdCBvZiByZWdpb25zIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdXNlZCB0byBmaWx0ZXIgdGhlIHJlZ2lvbnMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxSZWdpb25zT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBsaXN0IG9mIHJlZ2lvbnMuXHJcbiAgICovXHJcbiAgZ2V0UmVnaW9ucyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8UmVnaW9uc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxSZWdpb25zT3V0Pj4oYCR7dGhpcy51cmx9L3JlZ2lvbnNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgdGhlIHpvbmVzIGRhdGEgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyB1c2VkIHRvIGZpbHRlciB0aGUgem9uZXMgZGF0YS5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFpvbmVzT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBmZXRjaGVkIHpvbmVzIGRhdGEuXHJcbiAgICovXHJcbiAgZ2V0Wm9uZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPFpvbmVzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFpvbmVzT3V0Pj4oYCR7dGhpcy51cmx9L3pvbmVzYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIHRoZSBtYW5hZ2VtZW50IGFyZWFzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gZmlsdGVyIHRoZSBtYW5hZ2VtZW50IGFyZWFzLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8TWFuYWdlbWVudEFyZWFzT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBtYW5hZ2VtZW50IGFyZWFzIGRhdGEuXHJcbiAgICovXHJcbiAgZ2V0TWFuYWdlbWVudEFyZWFzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxNYW5hZ2VtZW50QXJlYXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8TWFuYWdlbWVudEFyZWFzT3V0Pj4oYCR7dGhpcy51cmx9L21hbmFnZW1lbnQtYXJlYXNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBjYW5jZWxsYXRpb24gcmVhc29ucyBmcm9tIHRoZSBzZXJ2ZXIgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyB0byBmaWx0ZXIgdGhlIGNhbmNlbGxhdGlvbiByZWFzb25zLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q2FuY2VsbGF0aW9uUmVhc29uc091dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgcmV0cmlldmVkIGNhbmNlbGxhdGlvbiByZWFzb25zLlxyXG4gICAqL1xyXG4gIGdldENhbmNlbGxhdGlvblJlYXNvbnMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPENhbmNlbGxhdGlvblJlYXNvbnNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8Q2FuY2VsbGF0aW9uUmVhc29uc091dD4+KGAke3RoaXMudXJsfS9jYW5jZWxsYXRpb24tcmVhc29uc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZHMgYSBjYW5jZWxsYXRpb24gcmVhc29uIHRvIHRoZSBzZXJ2ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0NhbmNlbGxhdGlvblJlYXNvbklufSBib2R5IC0gVGhlIGNhbmNlbGxhdGlvbiByZWFzb24gb2JqZWN0IHRvIGJlIHNlbnQuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDYW5jZWxsYXRpb25SZWFzb25PdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIHNlcnZlcidzIHJlc3BvbnNlIHdpdGggdGhlIHByb2Nlc3NlZCBjYW5jZWxsYXRpb24gcmVhc29uLlxyXG4gICAqL1xyXG4gIHBvc3RDYW5jZWxsYXRpb25SZWFzb24gKGJvZHk6IENhbmNlbGxhdGlvblJlYXNvbkluKTogT2JzZXJ2YWJsZTxDYW5jZWxsYXRpb25SZWFzb25PdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPENhbmNlbGxhdGlvblJlYXNvbk91dD4+KGAke3RoaXMudXJsfS9jYW5jZWxsYXRpb24tcmVhc29uc2AsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgY2FuY2VsbGF0aW9uIHJlYXNvbiBmb3IgdGhlIHNwZWNpZmllZCBJRCB3aXRoIHRoZSBwcm92aWRlZCBkYXRhLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjYW5jZWxsYXRpb24gcmVhc29uIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge0NhbmNlbGxhdGlvblJlYXNvbklufSBib2R5IC0gVGhlIGRldGFpbHMgb2YgdGhlIGNhbmNlbGxhdGlvbiByZWFzb24gdG8gYmUgdXBkYXRlZC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENhbmNlbGxhdGlvblJlYXNvbk91dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgdXBkYXRlZCBjYW5jZWxsYXRpb24gcmVhc29uLlxyXG4gICAqL1xyXG4gIHB1dENhbmNlbGxhdGlvblJlYXNvbiAoaWQ6IG51bWJlciwgYm9keTogQ2FuY2VsbGF0aW9uUmVhc29uSW4pOiBPYnNlcnZhYmxlPENhbmNlbGxhdGlvblJlYXNvbk91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxDYW5jZWxsYXRpb25SZWFzb25PdXQ+PihgJHt0aGlzLnVybH0vY2FuY2VsbGF0aW9uLXJlYXNvbnMvJHtpZH1gLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBhIGxpc3Qgb2YgY3VycmVuY2llcyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIGN1c3RvbWl6ZSB0aGUgY3VycmVuY3kgcmV0cmlldmFsIHJlcXVlc3QuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDdXJyZW5jaWVzT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXRyaWV2ZWQgY3VycmVuY2llcyBkYXRhLlxyXG4gICAqL1xyXG4gIGdldEN1cnJlbmNpZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPEN1cnJlbmNpZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8Q3VycmVuY2llc091dD4+KGAke3RoaXMudXJsfS9jdXJyZW5jaWVzYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBsYW5ndWFnZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyB0byBwYXNzIHdpdGggdGhlIEhUVFAgcmVxdWVzdC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPExhbmd1YWdlc091dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgYXZhaWxhYmxlIGxhbmd1YWdlcy5cclxuICAgKi9cclxuICBnZXRMYW5ndWFnZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPExhbmd1YWdlc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxMYW5ndWFnZXNPdXQ+PihgJHt0aGlzLnVybH0vbGFuZ3VhZ2VzYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIHRoZSBhdmFpbGFibGUgdW5pdHMgZnJvbSB0aGUgQVBJIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gZmlsdGVyIHRoZSB1bml0cyBiZWluZyBmZXRjaGVkLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8VW5pdHNPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJldHJpZXZlZCB1bml0cyBkYXRhLlxyXG4gICAqL1xyXG4gIGdldFVuaXRzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxVbml0c091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxVbml0c091dD4+KGAke3RoaXMudXJsfS91bml0c2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHRoZSBzaGlwbWVudCBzY29wZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gZmlsdGVyIG9yIG1vZGlmeSB0aGUgcmVxdWVzdCBmb3Igc2hpcG1lbnQgc2NvcGVzLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8U2hpcG1lbnRTY29wZXNPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHNoaXBtZW50IHNjb3BlcyBkYXRhLlxyXG4gICAqL1xyXG4gIGdldFNoaXBtZW50U2NvcGVzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxTaGlwbWVudFNjb3Blc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxTaGlwbWVudFNjb3Blc091dD4+KGAke3RoaXMudXJsfS9zaGlwbWVudC1zY29wZXNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgdGhlIGF2YWlsYWJsZSBzaGlwbWVudCBjb250ZW50IHR5cGVzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gZmlsdGVyIHRoZSBzaGlwbWVudCBjb250ZW50IHR5cGVzLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8U2hpcG1lbnRDb250ZW50VHlwZXNPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHNoaXBtZW50IGNvbnRlbnQgdHlwZXMgZGF0YS5cclxuICAgKi9cclxuICBnZXRTaGlwbWVudENvbnRlbnRUeXBlcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8U2hpcG1lbnRDb250ZW50VHlwZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8U2hpcG1lbnRDb250ZW50VHlwZXNPdXQ+PihgJHt0aGlzLnVybH0vc2hpcG1lbnQtY29udGVudC10eXBlc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyBhIGxpc3Qgb2YgZ2VuZXJpYyBmb2xpb3MgYmFzZWQgb24gdGhlIGdpdmVuIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyB1c2VkIHRvIGZpbHRlciB0aGUgZ2VuZXJpYyBmb2xpb3MuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHZW5lcmljRm9saW9zT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSBmZXRjaGVkIGdlbmVyaWMgZm9saW9zLlxyXG4gICAqL1xyXG4gIGdldEdlbmVyaWNGb2xpb3MgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPEdlbmVyaWNGb2xpb3NPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8R2VuZXJpY0ZvbGlvc091dD4+KGAke3RoaXMudXJsfS9nZW5lcmljLWZvbGlvc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZHMgYSBQT1NUIHJlcXVlc3QgdG8gY3JlYXRlIG9yIHVwZGF0ZSBhIGdlbmVyaWMgZm9saW8uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0dlbmVyaWNGb2xpb0lufSBib2R5IC0gVGhlIHBheWxvYWQgY29udGFpbmluZyB0aGUgZGV0YWlscyBvZiB0aGUgZ2VuZXJpYyBmb2xpbyB0byBiZSBjcmVhdGVkIG9yIHVwZGF0ZWQuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHZW5lcmljRm9saW9PdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIHJlc3BvbnNlIGRhdGEgb2YgdGhlIGNyZWF0ZWQgb3IgdXBkYXRlZCBnZW5lcmljIGZvbGlvLlxyXG4gICAqL1xyXG4gIHBvc3RHZW5lcmljRm9saW8gKGJvZHk6IEdlbmVyaWNGb2xpb0luKTogT2JzZXJ2YWJsZTxHZW5lcmljRm9saW9PdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPEdlbmVyaWNGb2xpb091dD4+KGAke3RoaXMudXJsfS9nZW5lcmljLWZvbGlvc2AsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyBhIGdlbmVyaWMgZm9saW8gd2l0aCB0aGUgc3BlY2lmaWVkIElEIHVzaW5nIHRoZSBwcm92aWRlZCBkYXRhLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBnZW5lcmljIGZvbGlvIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge0dlbmVyaWNGb2xpb0lufSBib2R5IC0gVGhlIGRhdGEgdG8gdXBkYXRlIHRoZSBnZW5lcmljIGZvbGlvIHdpdGguXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHZW5lcmljRm9saW9PdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIHVwZGF0ZWQgZ2VuZXJpYyBmb2xpby5cclxuICAgKi9cclxuICBwdXRHZW5lcmljRm9saW8gKGlkOiBudW1iZXIsIGJvZHk6IEdlbmVyaWNGb2xpb0luKTogT2JzZXJ2YWJsZTxHZW5lcmljRm9saW9PdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8R2VuZXJpY0ZvbGlvT3V0Pj4oYCR7dGhpcy51cmx9L2dlbmVyaWMtZm9saW9zLyR7aWR9YCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZW5kcyBhIFBVVCByZXF1ZXN0IHRvIHVwZGF0ZSBhIEdlbmVyaWMgRm9saW8gcmVzb3VyY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIElEIGFuZCBib2R5IGRhdGEsIGFuZCByZXR1cm5zIHRoZSB1cGRhdGVkIHJlc291cmNlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBHZW5lcmljIEZvbGlvIHRvIGJlIHVwZGF0ZWQuXHJcbiAgICogQHBhcmFtIHtQYXJ0aWFsPEdlbmVyaWNGb2xpb0luPn0gYm9keSAtIFRoZSBwYXJ0aWFsIGRhdGEgcmVwcmVzZW50aW5nIHRoZSBjaGFuZ2VzIHRvIGJlIGFwcGxpZWQgdG8gdGhlIEdlbmVyaWMgRm9saW8uXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHZW5lcmljRm9saW9PdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIHVwZGF0ZWQgR2VuZXJpYyBGb2xpbyByZXNvdXJjZS5cclxuICAgKi9cclxuICBwYXRoR2VuZXJpY0ZvbGlvIChpZDogbnVtYmVyLCBib2R5OiBQYXJ0aWFsPEdlbmVyaWNGb2xpb0luPik6IE9ic2VydmFibGU8R2VuZXJpY0ZvbGlvT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPEdlbmVyaWNGb2xpb091dD4+KGAke3RoaXMudXJsfS9nZW5lcmljLWZvbGlvcy8ke2lkfWAsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZHMgYSBQT1NUIHJlcXVlc3QgdG8gY3JlYXRlIGEgbmV3IHByb2R1Y3QuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1Byb2R1Y3RJbn0gYm9keSAtIFRoZSBwcm9kdWN0IGRhdGEgdG8gYmUgc2VudCBpbiB0aGUgcmVxdWVzdCBib2R5LlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8UHJvZHVjdE91dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIGNyZWF0ZWQgcHJvZHVjdCBkYXRhLlxyXG4gICAqL1xyXG4gIHBvc3RQcm9kdWN0IChib2R5OiBQcm9kdWN0SW4pOiBPYnNlcnZhYmxlPFByb2R1Y3RPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPFByb2R1Y3RPdXQ+PihgJHt0aGlzLnVybH0vcHJvZHVjdHNgLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgYW4gZXhpc3RpbmcgcHJvZHVjdCB3aXRoIHRoZSBnaXZlbiBJRCB1c2luZyB0aGUgcHJvdmlkZWQgZGF0YS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcHJvZHVjdCB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtQcm9kdWN0SW59IGJvZHkgLSBUaGUgcHJvZHVjdCBkYXRhIHRvIHVwZGF0ZS5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFByb2R1Y3RPdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIHVwZGF0ZWQgcHJvZHVjdCBkYXRhLlxyXG4gICAqL1xyXG4gIHB1dFByb2R1Y3QgKGlkOiBudW1iZXIsIGJvZHk6IFByb2R1Y3RJbik6IE9ic2VydmFibGU8UHJvZHVjdE91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxQcm9kdWN0T3V0Pj4oYCR7dGhpcy51cmx9L3Byb2R1Y3RzLyR7aWR9YCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYSBsaXN0IG9mIHNoaXBtZW50IGluY29tZSB0eXBlcyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIGZpbHRlciB0aGUgc2hpcG1lbnQgaW5jb21lIHR5cGVzLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8U2hpcG1lbnRJbmNvbWVUeXBlc091dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgc2hpcG1lbnQgaW5jb21lIHR5cGVzIGRhdGEuXHJcbiAgICovXHJcbiAgZ2V0U2hpcG1lbnRJbmNvbWVUeXBlcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8U2hpcG1lbnRJbmNvbWVUeXBlc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxTaGlwbWVudEluY29tZVR5cGVzT3V0Pj4oYCR7dGhpcy51cmx9L3NoaXBtZW50LWluY29tZS10eXBlc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZHMgYSBQT1NUIHJlcXVlc3QgdG8gY3JlYXRlIGEgbmV3IHNoaXBtZW50IGluY29tZSB0eXBlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtTaGlwbWVudEluY29tZVR5cGVJbn0gYm9keSBUaGUgcGF5bG9hZCBjb250YWluaW5nIHRoZSBkZXRhaWxzIG9mIHRoZSBzaGlwbWVudCBpbmNvbWUgdHlwZSB0byBiZSBjcmVhdGVkLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8U2hpcG1lbnRJbmNvbWVUeXBlT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBjcmVhdGVkIHNoaXBtZW50IGluY29tZSB0eXBlIGRhdGEuXHJcbiAgICovXHJcbiAgcG9zdFNoaXBtZW50SW5jb21lVHlwZSAoYm9keTogU2hpcG1lbnRJbmNvbWVUeXBlSW4pOiBPYnNlcnZhYmxlPFNoaXBtZW50SW5jb21lVHlwZU91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFwaVN1Y2Nlc3M8U2hpcG1lbnRJbmNvbWVUeXBlT3V0Pj4oYCR7dGhpcy51cmx9L3NoaXBtZW50LWluY29tZS10eXBlc2AsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgc2hpcG1lbnQgaW5jb21lIHR5cGUgd2l0aCB0aGUgc3BlY2lmaWVkIElELlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIGlkZW50aWZpZXIgb2YgdGhlIHNoaXBtZW50IGluY29tZSB0eXBlIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0ge1NoaXBtZW50SW5jb21lVHlwZUlufSBib2R5IC0gVGhlIGRhdGEgdG8gdXBkYXRlIHRoZSBzaGlwbWVudCBpbmNvbWUgdHlwZSB3aXRoLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8U2hpcG1lbnRJbmNvbWVUeXBlT3V0Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgdXBkYXRlZCBzaGlwbWVudCBpbmNvbWUgdHlwZS5cclxuICAgKi9cclxuICBwdXRTaGlwbWVudEluY29tZVR5cGUgKGlkOiBudW1iZXIsIGJvZHk6IFNoaXBtZW50SW5jb21lVHlwZUluKTogT2JzZXJ2YWJsZTxTaGlwbWVudEluY29tZVR5cGVPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8U2hpcG1lbnRJbmNvbWVUeXBlT3V0Pj4oYCR7dGhpcy51cmx9L3NoaXBtZW50LWluY29tZS10eXBlcy8ke2lkfWAsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiB1bmlxdWUgZm9saW9zIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdXNlZCB0byBmaWx0ZXIgYW5kIGZldGNoIHVuaXF1ZSBmb2xpb3MuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxVbmlxdWVGb2xpb3NPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHVuaXF1ZSBmb2xpb3MgZGF0YS5cclxuICAgKi9cclxuICBnZXRVbmlxdWVGb2xpb3MgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPFVuaXF1ZUZvbGlvc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxVbmlxdWVGb2xpb3NPdXQ+PihgJHt0aGlzLnVybH0vdW5pcXVlLWZvbGlvc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZHMgYSBQT1NUIHJlcXVlc3QgdG8gY3JlYXRlIGEgdW5pcXVlIGZvbGlvLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtVbmlxdWVGb2xpb0lufSBib2R5IC0gVGhlIGRhdGEgb2JqZWN0IGNvbnRhaW5pbmcgZGV0YWlscyBmb3IgdGhlIHVuaXF1ZSBmb2xpbyB0byBiZSBjcmVhdGVkLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8VW5pcXVlRm9saW9PdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGNyZWF0ZWQgdW5pcXVlIGZvbGlvIGRldGFpbHMuXHJcbiAgICovXHJcbiAgcG9zdFVuaXF1ZUZvbGlvIChib2R5OiBVbmlxdWVGb2xpb0luKTogT2JzZXJ2YWJsZTxVbmlxdWVGb2xpb091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFwaVN1Y2Nlc3M8VW5pcXVlRm9saW9PdXQ+PihgJHt0aGlzLnVybH0vdW5pcXVlLWZvbGlvc2AsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyBhIHVuaXF1ZSBmb2xpbyB3aXRoIHRoZSBnaXZlbiBkYXRhIHVzaW5nIHRoZSBwcm92aWRlZCBJRC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSBJRCBvZiB0aGUgdW5pcXVlIGZvbGlvIHRvIGJlIHVwZGF0ZWQuXHJcbiAgICogQHBhcmFtIHtVbmlxdWVGb2xpb0lufSBib2R5IC0gVGhlIHBheWxvYWQgY29udGFpbmluZyB0aGUgZGV0YWlscyBvZiB0aGUgdW5pcXVlIGZvbGlvIHRvIHVwZGF0ZS5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFVuaXF1ZUZvbGlvT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB1cGRhdGVkIHVuaXF1ZSBmb2xpby5cclxuICAgKi9cclxuICBwdXRVbmlxdWVGb2xpbyAoaWQ6IG51bWJlciwgYm9keTogVW5pcXVlRm9saW9Jbik6IE9ic2VydmFibGU8VW5pcXVlRm9saW9PdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8VW5pcXVlRm9saW9PdXQ+PihgJHt0aGlzLnVybH0vdW5pcXVlLWZvbGlvcy8ke2lkfWAsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyBhIHVuaXF1ZSBmb2xpbyBieSBpdHMgaWRlbnRpZmllciB3aXRoIHRoZSBwcm92aWRlZCBkYXRhLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIGlkZW50aWZpZXIgb2YgdGhlIHVuaXF1ZSBmb2xpbyB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtQYXJ0aWFsPFVuaXF1ZUZvbGlvSW4+fSBib2R5IC0gVGhlIHBhcnRpYWwgZGF0YSBvZiB0aGUgdW5pcXVlIGZvbGlvIHRvIHVwZGF0ZS5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFVuaXF1ZUZvbGlvT3V0Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgdXBkYXRlZCB1bmlxdWUgZm9saW8gZGF0YS5cclxuICAgKi9cclxuICBwYXRoVW5pcXVlRm9saW8gKGlkOiBudW1iZXIsIGJvZHk6IFBhcnRpYWw8VW5pcXVlRm9saW9Jbj4pOiBPYnNlcnZhYmxlPFVuaXF1ZUZvbGlvT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPFVuaXF1ZUZvbGlvT3V0Pj4oYCR7dGhpcy51cmx9L3VuaXF1ZS1mb2xpb3MvJHtpZH1gLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBzaGlwbWVudCBncm91cHMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gZmlsdGVyIHRoZSBzaGlwbWVudCBncm91cHMuXHJcbiAgICogQHJldHVybnMgQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBzaGlwbWVudCBncm91cHMgZGF0YS5cclxuICAgKi9cclxuICBnZXRTaGlwbWVudEdyb3VwcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8U2hpcG1lbnRHcm91cHNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8U2hpcG1lbnRHcm91cHNPdXQ+PihgJHt0aGlzLnVybH0vc2hpcG1lbnQtZ3JvdXBzYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgdGhlIHNoaXBtZW50IHN0YXR1c2VzIGZyb20gdGhlIEFQSS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyB0byBmaWx0ZXIgb3IgbW9kaWZ5IHRoZSByZXF1ZXN0LlxyXG4gICAqIEByZXR1cm5zIEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgc2hpcG1lbnQgc3RhdHVzZXMgb3V0cHV0LlxyXG4gICAqL1xyXG4gIGdldFNoaXBtZW50U3RhdHVzZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPFNoaXBtZW50U3RhdHVzZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8U2hpcG1lbnRTdGF0dXNlc091dD4+KGAke3RoaXMudXJsfS9zaGlwbWVudC1zdGF0dXNlc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyBxdWVzdGlvbnMgZnJvbSB0aGUgY2F0YWxvZ3MgQVBJLlxyXG4gICAqXHJcbiAgICogU2VuZHMgYW4gSFRUUCBHRVQgcmVxdWVzdCB0byBgJHt0aGlzLnVybH0vcXVlc3Rpb25zYCB1c2luZyB0aGUgc3VwcGxpZWQgcXVlcnkgcGFyYW1ldGVyc1xyXG4gICAqIGFuZCByZXR1cm5zIHRoZSB1bndyYXBwZWQgcGF5bG9hZCAoYGRhdGFgKSBmcm9tIHRoZSBBUEkgcmVzcG9uc2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcGFyYW1zIC0gUXVlcnkgcGFyYW1ldGVycyB0byBpbmNsdWRlIGluIHRoZSByZXF1ZXN0IChlLmcuIHBhZ2luZywgZmlsdGVycywgc29ydGluZykuXHJcbiAgICogQHJldHVybnMgQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBRdWVzdGlvbnNPdXQgcGF5bG9hZCAodGhlIGBkYXRhYCBmaWVsZCBmcm9tIEFwaVN1Y2Nlc3M8UXVlc3Rpb25zT3V0PikuXHJcbiAgICovXHJcbiAgZ2V0UXVlc3Rpb25zIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxRdWVzdGlvbnNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8UXVlc3Rpb25zT3V0Pj4oYCR7dGhpcy51cmx9L3F1ZXN0aW9uc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgYSBzaW5nbGUgcXVlc3Rpb24gYnkgaXRzIGlkLlxyXG4gICAqXHJcbiAgICogU2VuZHMgYW4gSFRUUCBHRVQgcmVxdWVzdCB0byB0aGUgcXVlc3Rpb25zIGVuZHBvaW50IGFuZCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0c1xyXG4gICAqIHRoZSBRdWVzdGlvbk91dCBwYXlsb2FkIGV4dHJhY3RlZCBmcm9tIHRoZSBBUEkgc3VjY2VzcyBlbnZlbG9wZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBudW1lcmljIGlkZW50aWZpZXIgb2YgdGhlIHF1ZXN0aW9uIHRvIGZldGNoLlxyXG4gICAqIEByZXR1cm5zIEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVxdWVzdGVkIFF1ZXN0aW9uT3V0LiBUaGUgT2JzZXJ2YWJsZSB3aWxsIGVycm9yXHJcbiAgICogICAgICAgICAgaWYgdGhlIEhUVFAgcmVxdWVzdCBmYWlscyAoZm9yIGV4YW1wbGUgbmV0d29yayBpc3N1ZXMgb3Igbm9uLTJ4eCByZXNwb25zZXMpLlxyXG4gICAqL1xyXG4gIGdldFF1ZXN0aW9uIChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxRdWVzdGlvbk91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxRdWVzdGlvbk91dD4+KGAke3RoaXMudXJsfS9xdWVzdGlvbnMvJHtpZH1gKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIGEgUE9TVCByZXF1ZXN0IHRvIGNyZWF0ZSBhIG5ldyBxdWVzdGlvbiBhbmQgcmV0dXJucyB0aGUgY3JlYXRlZCByZXNvdXJjZS5cclxuICAgKlxyXG4gICAqIFRoZSByZXF1ZXN0IHBheWxvYWQgaXMgc2VudCBhcyBhbiBvYmplY3Qgd2l0aCBhIGBib2R5YCBwcm9wZXJ0eSBjb250YWluaW5nIHRoZSBwcm92aWRlZFxyXG4gICAqIFF1ZXN0aW9uSW4gdmFsdWUgKGkuZS4geyBib2R5OiBRdWVzdGlvbkluIH0pLiBPbiBzdWNjZXNzIHRoZSBIVFRQIHJlc3BvbnNlIGlzIGV4cGVjdGVkXHJcbiAgICogdG8gZm9sbG93IHRoZSBBcGlTdWNjZXNzPFQ+IHNoYXBlOyB0aGUgb3BlcmF0b3IgbWFwcyB0aGF0IHJlc3BvbnNlIHRvIHRoZSBpbm5lciBgZGF0YWBcclxuICAgKiBvYmplY3QgYW5kIGVtaXRzIGl0IGFzIGEgUXVlc3Rpb25PdXQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gYm9keSAtIFRoZSBxdWVzdGlvbiBwYXlsb2FkIHRvIGNyZWF0ZSAoUXVlc3Rpb25JbikuXHJcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxRdWVzdGlvbk91dD4gdGhhdCBlbWl0cyB0aGUgY3JlYXRlZCBxdWVzdGlvbiBvbiBzdWNjZXNzLlxyXG4gICAqL1xyXG4gIHBvc3RRdWVzdGlvbiAoYm9keTogUXVlc3Rpb25Jbik6IE9ic2VydmFibGU8UXVlc3Rpb25PdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPFF1ZXN0aW9uT3V0Pj4oYCR7dGhpcy51cmx9L3F1ZXN0aW9uc2AsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGEgcXVlc3Rpb24gYnkgaXRzIElELlxyXG4gICAqXHJcbiAgICogU2VuZHMgYW4gSFRUUCBQVVQgdG8gYCR7dGhpcy51cmx9L3F1ZXN0aW9ucy8ke2lkfWAgd2l0aCB0aGUgcHJvdmlkZWQgcGF5bG9hZC5cclxuICAgKiBUaGUgcmVxdWVzdCBib2R5IGlzIHNlbnQgYXMgYW4gb2JqZWN0IHdpdGggYSBgYm9keWAgcHJvcGVydHkgY29udGFpbmluZyB0aGVcclxuICAgKiBgUXVlc3Rpb25JbmAgZGF0YS4gVGhlIHNlcnZlciByZXNwb25zZSBpcyBleHBlY3RlZCB0byBiZSBhbiBgQXBpU3VjY2VzczxRdWVzdGlvbk91dD5gXHJcbiAgICogYW5kIHRoaXMgbWV0aG9kIHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB1bndyYXBwZWQgYFF1ZXN0aW9uT3V0YC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBxdWVzdGlvbiB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgdXBkYXRlIHBheWxvYWQgZm9yIHRoZSBxdWVzdGlvbi5cclxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHVwZGF0ZWQgYFF1ZXN0aW9uT3V0YCBvbiBzdWNjZXNzLlxyXG4gICAqL1xyXG4gIHB1dFF1ZXN0aW9uIChpZDogbnVtYmVyLCBib2R5OiBRdWVzdGlvbkluKTogT2JzZXJ2YWJsZTxRdWVzdGlvbk91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxRdWVzdGlvbk91dD4+KGAke3RoaXMudXJsfS9xdWVzdGlvbnMvJHtpZH1gLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZXMgYSBxdWVzdGlvbiBieSBpdHMgSUQuXHJcbiAgICpcclxuICAgKiBTZW5kcyBhbiBIVFRQIERFTEVURSByZXF1ZXN0IHRvIHRoZSBiYWNrZW5kIGVuZHBvaW50IGAvcXVlc3Rpb25zL3tpZH1gIGFuZFxyXG4gICAqIHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBBUEkgcmVzcG9uc2UncyBgZGF0YWAgcGF5bG9hZCAodHlwaWNhbGx5IGFuIGVtcHR5IG9iamVjdCkuXHJcbiAgICpcclxuICAgKiBUaGUgaW1wbGVtZW50YXRpb24gbWFwcyBhbiBBcGlTdWNjZXNzIHdyYXBwZXIgdG8gaXRzIGBkYXRhYCBwcm9wZXJ0eSBiZWZvcmUgZW1pdHRpbmcuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaWQgLSBUaGUgbnVtZXJpYyBpZGVudGlmaWVyIG9mIHRoZSBxdWVzdGlvbiB0byBkZWxldGUuXHJcbiAgICogQHJldHVybnMgQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBkZWxldGVkIHJlc291cmNlIHBheWxvYWQgKHt9IGV4cGVjdGVkKSBvbiBzdWNjZXNzLlxyXG4gICAqICAgICAgICAgIFRoZSBPYnNlcnZhYmxlIHdpbGwgZW1pdCBhbiBlcnJvciBpZiB0aGUgSFRUUCByZXF1ZXN0IGZhaWxzLlxyXG4gICAqL1xyXG4gIGRlbGV0ZVF1ZXN0aW9uIChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTx7fT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8QXBpU3VjY2Vzczx7fT4+KGAke3RoaXMudXJsfS9xdWVzdGlvbnMvJHtpZH1gKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgaG9saWRheXMgZnJvbSB0aGUgY2F0YWxvZ3MgQVBJLlxyXG4gICAqXHJcbiAgICogU2VuZHMgYW4gSFRUUCBHRVQgcmVxdWVzdCB0byBgJHt0aGlzLnVybH0vaG9saWRheXNgIHVzaW5nIHRoZSBzdXBwbGllZCBxdWVyeSBwYXJhbWV0ZXJzXHJcbiAgICogYW5kIHJldHVybnMgdGhlIHVud3JhcHBlZCBwYXlsb2FkIChgZGF0YWApIGZyb20gdGhlIEFQSSByZXNwb25zZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBRdWVyeSBwYXJhbWV0ZXJzIHRvIGluY2x1ZGUgaW4gdGhlIHJlcXVlc3QgKGUuZy4gcGFnaW5nLCBmaWx0ZXJzLCBzb3J0aW5nKS5cclxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIEhvbGlkYXlzT3V0IHBheWxvYWQgKHRoZSBgZGF0YWAgZmllbGQgZnJvbSBBcGlTdWNjZXNzPEhvbGlkYXlzT3V0PikuXHJcbiAgICovXHJcbiAgZ2V0SG9saWRheXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPEhvbGlkYXlzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEhvbGlkYXlzT3V0Pj4oYCR7dGhpcy51cmx9L2hvbGlkYXlzYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSBhIHNpbmdsZSBob2xpZGF5IGJ5IGl0cyBpZC5cclxuICAgKlxyXG4gICAqIFNlbmRzIGFuIEhUVFAgR0VUIHJlcXVlc3QgdG8gdGhlIGhvbGlkYXlzIGVuZHBvaW50IGFuZCByZXR1cm5zIGFuIE9ic2VydmFibGUgdGhhdCBlbWl0c1xyXG4gICAqIHRoZSBIb2xpZGF5T3V0IHBheWxvYWQgZXh0cmFjdGVkIGZyb20gdGhlIEFQSSBzdWNjZXNzIGVudmVsb3BlLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGlkIC0gVGhlIG51bWVyaWMgaWRlbnRpZmllciBvZiB0aGUgaG9saWRheSB0byBmZXRjaC5cclxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlcXVlc3RlZCBIb2xpZGF5T3V0LiBUaGUgT2JzZXJ2YWJsZSB3aWxsIGVycm9yXHJcbiAgICogICAgICAgICAgaWYgdGhlIEhUVFAgcmVxdWVzdCBmYWlscyAoZm9yIGV4YW1wbGUgbmV0d29yayBpc3N1ZXMgb3Igbm9uLTJ4eCByZXNwb25zZXMpLlxyXG4gICAqL1xyXG4gIGdldEhvbGlkYXkgKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPEhvbGlkYXlPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8SG9saWRheU91dD4+KGAke3RoaXMudXJsfS9ob2xpZGF5cy8ke2lkfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZHMgYSBQT1NUIHJlcXVlc3QgdG8gY3JlYXRlIGEgbmV3IGhvbGlkYXkgYW5kIHJldHVybnMgdGhlIGNyZWF0ZWQgcmVzb3VyY2UuXHJcbiAgICpcclxuICAgKiBUaGUgcmVxdWVzdCBwYXlsb2FkIGlzIHNlbnQgYXMgYW4gb2JqZWN0IHdpdGggYSBgYm9keWAgcHJvcGVydHkgY29udGFpbmluZyB0aGUgcHJvdmlkZWRcclxuICAgKiBIb2xpZGF5SW4gdmFsdWUgKGkuZS4geyBib2R5OiBIb2xpZGF5SW4gfSkuIE9uIHN1Y2Nlc3MgdGhlIEhUVFAgcmVzcG9uc2UgaXMgZXhwZWN0ZWRcclxuICAgKiB0byBmb2xsb3cgdGhlIEFwaVN1Y2Nlc3M8VD4gc2hhcGU7IHRoZSBvcGVyYXRvciBtYXBzIHRoYXQgcmVzcG9uc2UgdG8gdGhlIGlubmVyIGBkYXRhYFxyXG4gICAqIG9iamVjdCBhbmQgZW1pdHMgaXQgYXMgYSBIb2xpZGF5T3V0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGJvZHkgLSBUaGUgaG9saWRheSBwYXlsb2FkIHRvIGNyZWF0ZSAoSG9saWRheUluKS5cclxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPEhvbGlkYXlPdXQ+IHRoYXQgZW1pdHMgdGhlIGNyZWF0ZWQgaG9saWRheSBvbiBzdWNjZXNzLlxyXG4gICAqL1xyXG4gIHBvc3RIb2xpZGF5IChib2R5OiBIb2xpZGF5SW4pOiBPYnNlcnZhYmxlPEhvbGlkYXlPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPEhvbGlkYXlPdXQ+PihgJHt0aGlzLnVybH0vaG9saWRheXNgLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZSBhIGhvbGlkYXkgYnkgaXRzIElELlxyXG4gICAqXHJcbiAgICogU2VuZHMgYW4gSFRUUCBQVVQgdG8gYCR7dGhpcy51cmx9L2hvbGlkYXlzLyR7aWR9YCB3aXRoIHRoZSBwcm92aWRlZCBwYXlsb2FkLlxyXG4gICAqIFRoZSByZXF1ZXN0IGJvZHkgaXMgc2VudCBhcyBhbiBvYmplY3Qgd2l0aCBhIGBib2R5YCBwcm9wZXJ0eSBjb250YWluaW5nIHRoZVxyXG4gICAqIGBIb2xpZGF5SW5gIGRhdGEuIFRoZSBzZXJ2ZXIgcmVzcG9uc2UgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYEFwaVN1Y2Nlc3M8SG9saWRheU91dD5gXHJcbiAgICogYW5kIHRoaXMgbWV0aG9kIHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB1bndyYXBwZWQgYEhvbGlkYXlPdXRgLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGlkIC0gVGhlIGlkZW50aWZpZXIgb2YgdGhlIGhvbGlkYXkgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSBib2R5IC0gVGhlIHVwZGF0ZSBwYXlsb2FkIGZvciB0aGUgaG9saWRheS5cclxuICAgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHVwZGF0ZWQgYEhvbGlkYXlPdXRgIG9uIHN1Y2Nlc3MuXHJcbiAgICovXHJcbiAgcHV0SG9saWRheSAoaWQ6IG51bWJlciwgYm9keTogSG9saWRheUluKTogT2JzZXJ2YWJsZTxIb2xpZGF5T3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPEhvbGlkYXlPdXQ+PihgJHt0aGlzLnVybH0vaG9saWRheXMvJHtpZH1gLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZXMgYSBxdWVzdGlvbiBieSBpdHMgSUQuXHJcbiAgICpcclxuICAgKiBTZW5kcyBhbiBIVFRQIERFTEVURSByZXF1ZXN0IHRvIHRoZSBiYWNrZW5kIGVuZHBvaW50IGAvcXVlc3Rpb25zL3tpZH1gIGFuZFxyXG4gICAqIHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBBUEkgcmVzcG9uc2UncyBgZGF0YWAgcGF5bG9hZCAodHlwaWNhbGx5IGFuIGVtcHR5IG9iamVjdCkuXHJcbiAgICpcclxuICAgKiBUaGUgaW1wbGVtZW50YXRpb24gbWFwcyBhbiBBcGlTdWNjZXNzIHdyYXBwZXIgdG8gaXRzIGBkYXRhYCBwcm9wZXJ0eSBiZWZvcmUgZW1pdHRpbmcuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaWQgLSBUaGUgbnVtZXJpYyBpZGVudGlmaWVyIG9mIHRoZSBxdWVzdGlvbiB0byBkZWxldGUuXHJcbiAgICogQHJldHVybnMgQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBkZWxldGVkIHJlc291cmNlIHBheWxvYWQgKHt9IGV4cGVjdGVkKSBvbiBzdWNjZXNzLlxyXG4gICAqICAgICAgICAgIFRoZSBPYnNlcnZhYmxlIHdpbGwgZW1pdCBhbiBlcnJvciBpZiB0aGUgSFRUUCByZXF1ZXN0IGZhaWxzLlxyXG4gICAqL1xyXG4gIGRlbGV0ZUhvbGlkYXkgKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPHt9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxBcGlTdWNjZXNzPHt9Pj4oYCR7dGhpcy51cmx9L2hvbGlkYXlzLyR7aWR9YClcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYSBsaXN0IG9mIGJ1c2luZXNzIHBhcnR5IHRyYWRlciB0eXBlc1xyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFF1ZXJ5IHBhcmFtZXRlcnMgZm9yIGZpbHRlcmluZyBhbmQgcGFnaW5hdGlvbiAob3B0aW9uYWwpXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8QnVzaW5lc3NQYXJ0eVRyYWRlclR5cGVzT3V0Pn0gT2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSBsaXN0IG9mIHRyYWRlciB0eXBlc1xyXG4gICAqL1xyXG4gIGdldEJ1c2luZXNzUGFydHlUcmFkZXJUeXBlcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8QnVzaW5lc3NQYXJ0eVRyYWRlclR5cGVzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEJ1c2luZXNzUGFydHlUcmFkZXJUeXBlc091dD4+KGAke3RoaXMudXJsfS9idXNpbmVzcy1wYXJ0eS10cmFkZXItdHlwZXNgLFxyXG4gICAgICB7IHBhcmFtcyB9XHJcbiAgICApLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG59XHJcbiJdfQ==
|