@eo-sdk/client 11.14.29 → 11.14.31

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.
@@ -276,7 +276,7 @@ export class ObjectFormHelperService {
276
276
  if (v instanceof RangeValue && v.operator === 'mr') {
277
277
  data[key] = value;
278
278
  }
279
- else if (v) {
279
+ else if (v || v === null) {
280
280
  data[key] = this.formatValue(value, formElement);
281
281
  }
282
282
  }
@@ -784,4 +784,4 @@ export class ObjectFormHelperService {
784
784
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImport: i0, type: ObjectFormHelperService, decorators: [{
785
785
  type: Injectable
786
786
  }], ctorParameters: () => [{ type: i1.Logger }, { type: i2.ReferenceService }, { type: i1.SearchService }, { type: i3.PluginsService }, { type: i1.SystemService }] });
787
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWZvcm0taGVscGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS1oZWxwZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQWMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFTLFVBQVUsRUFBZ0IsYUFBYSxFQUFpQixLQUFLLEVBQWUsTUFBTSxjQUFjLENBQUM7QUFDakgsT0FBTyxFQUFDLGVBQWUsRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQzdFLE9BQU8sRUFBQyxZQUFZLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFLakQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQ25GLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUV0RSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSw4REFBOEQsQ0FBQzs7Ozs7QUF5QnRHLE1BQU0sT0FBTyx1QkFBdUI7SUFNbEMsWUFBb0IsTUFBYyxFQUN4QixnQkFBa0MsRUFDbEMsYUFBNEIsRUFDNUIsYUFBNkIsRUFDN0IsYUFBNEI7UUFKbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUN4QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGtC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RSxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTywyQkFBMkI7UUFDakMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQWEsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7WUFDMUYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztnQkFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDO1FBQzVDLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNsQixDQUFDO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxNQUFNLDRCQUE0QixDQUFDLENBQUM7UUFDL0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDOzhHQXYwQlUsdUJBQXVCO2tIQUF2Qix1QkFBdUI7OzJGQUF2Qix1QkFBdUI7a0JBRG5DLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RhdGVQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VmFsaWRhdG9yRm4sIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7TG9nZ2VyLCBSYW5nZVZhbHVlLCBTZWFyY2hGaWx0ZXIsIFNlYXJjaFNlcnZpY2UsIFN5c3RlbVNlcnZpY2UsIFV0aWxzLCBTZWFyY2hQYXJhbXN9IGZyb20gJ0Blby1zZGsvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1BsdWdpbnNTZXJ2aWNlfSBmcm9tICcuLi8uLi9lby1mcmFtZXdvcmstY29yZS9hcGkvcGx1Z2lucy5zZXJ2aWNlJztcbmltcG9ydCB7UmVmZXJlbmNlU2VydmljZX0gZnJvbSAnLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvcmVmZXJlbmNlcy9yZWZlcmVuY2Uuc2VydmljZSc7XG5pbXBvcnQge09iamVjdEZvcm1PcHRpb25zfSBmcm9tICcuL29iamVjdC1mb3JtLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7Rm9ybVZhbGlkYXRpb259IGZyb20gJy4vb2JqZWN0LWZvcm0vZm9ybS12YWxpZGF0aW9uL2Zvcm0tdmFsaWRhdGlvbic7XG5pbXBvcnQge09iamVjdEZvcm1Db250cm9sfSBmcm9tICcuL29iamVjdC1mb3JtL29iamVjdC1mb3JtLWNvbnRyb2wnO1xuaW1wb3J0IHtPYmplY3RGb3JtQ29udHJvbFdyYXBwZXJ9IGZyb20gJy4vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0tY29udHJvbC13cmFwcGVyJztcbmltcG9ydCB7T2JqZWN0Rm9ybUdyb3VwfSBmcm9tICcuL29iamVjdC1mb3JtL29iamVjdC1mb3JtLWdyb3VwLm1vZGVsJztcbmltcG9ydCB7T2JqZWN0Rm9ybVNjcmlwdFNlcnZpY2V9IGZyb20gJy4vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0tc2NyaXB0L29iamVjdC1mb3JtLXNjcmlwdC5zZXJ2aWNlJztcbmltcG9ydCB7T2JqZWN0Rm9ybVNjcmlwdGluZ1Njb3BlfSBmcm9tICcuL29iamVjdC1mb3JtL29iamVjdC1mb3JtLXNjcmlwdC9vYmplY3QtZm9ybS1zY3JpcHRpbmctc2NvcGUnO1xuaW1wb3J0IHtPYmplY3RGb3JtTW9kZWx9IGZyb20gJy4vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0ubW9kZWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1HZW5TY29wZSB7XG4gIGdDb3VudDogbnVtYmVyO1xuICBmb3JtT3B0aW9uczogT2JqZWN0Rm9ybU9wdGlvbnM7XG4gIGlzSW5uZXJUYWJsZUZvcm06IGJvb2xlYW47XG4gIGluaXRpYWxWYWxpZGF0b3JzOiB7W25hbWU6IHN0cmluZ106IFZhbGlkYXRvckZuIHwgbnVsbH07XG4gIGZvcm1HZW5SZXN1bHQ6IEZvcm1HZW5SZXN1bHQ7XG59XG5leHBvcnQgaW50ZXJmYWNlIEZvcm1HZW5SZXN1bHQge1xuICAvLyBGb3JtIGNvbnRyb2xzIGdlbmVyYXRlZCBmcm9tIHRoZSBtb2RlbCBhcyAnUXVpY2sgYWNjZXNzIG9iamVjdCdcbiAgLy8gRm9ybSBlbGVtZW50cyBuYW1lIGlzIGtleSBhbmQgdGhlIHZhbHVlIGlzIHRoZSBmb3JtIGNvbnRyb2wgaXRzZWxmXG4gIGZvcm1Db250cm9sczoge1tuYW1lOiBzdHJpbmddOiBPYmplY3RGb3JtQ29udHJvbH07XG4gIGZvcm1Nb2RlbDogYW55LFxuICAvLyBTdWJzY3JpcHRpb25zIHRvIHZhbHVlIGNoYW5nZXMgb2YgdGhlIGdlbmVyYXRlZCBmb3JtIGNvbnRyb2xzXG4gIC8vIFlvdSBzaG91bGQgYWx3YXlzIHVuc3Vic2NyaWJlIGZyb20gYWxsIG9mIHRoZW0gd2hlbiBjb25zdW1pbmdcbiAgLy8gY29tcG9uZW50IGlzIGRlc3Ryb3llZFxuICBjb250cm9sVmFsdWVTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXTtcbiAgc2NyaXB0aW5nU2NvcGU6IE9iamVjdEZvcm1TY3JpcHRpbmdTY29wZTtcbiAgc2NyaXB0TW9kZWw6IHtbbmFtZTogc3RyaW5nXTogYW55fTtcbiAgZm9ybTogT2JqZWN0Rm9ybUdyb3VwO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT2JqZWN0Rm9ybUhlbHBlclNlcnZpY2Uge1xuXG4gIHByaXZhdGUgZGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUoJ2VuJyk7XG4gIHByaXZhdGUgVEVNUF9TVE9SQUdFX0VOVFJJRVNfS0VZID0gJ2VvLmNtcC5vYmplY3Rmb3JtLnRtcHN0b3JhZ2UuZW50cmllcyc7XG4gIHByaXZhdGUgX2xhdGVzdEZvcm1FbGVtZW50Q2hhbmdlczogQmVoYXZpb3JTdWJqZWN0PFNlYXJjaFBhcmFtcz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlYXJjaFBhcmFtcz4oe30pO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9nZ2VyOiBMb2dnZXIsXG4gICAgcHJpdmF0ZSByZWZlcmVuY2VTZXJ2aWNlOiBSZWZlcmVuY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogU2VhcmNoU2VydmljZSxcbiAgICBwcml2YXRlIHBsdWdpblNlcnZpY2U6IFBsdWdpbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3lzdGVtU2VydmljZTogU3lzdGVtU2VydmljZSkge1xuICAgIHRoaXMuX2NsZWFyVGVtcG9yYXJ5U3RvcmFnZUVudHJpZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXR0ZXIgZm9yIHJldHJpZXZpbmcgdGhlIGxhdGVzdCBmb3JtIGVsZW1lbnQgY2hhbmdlcyBhcyBhbiBvYnNlcnZhYmxlLlxuICAgKlxuICAgKiBUaGlzIGdldHRlciByZXR1cm5zIGFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgbGF0ZXN0IGNoYW5nZXMgdG8gdGhlIGZvcm0gZWxlbWVudHMuXG4gICAqIEl0IGFsbG93cyBzdWJzY3JpYmVycyB0byByZWFjdCB0byBjaGFuZ2VzIGluIHRoZSBmb3JtIGVsZW1lbnRzIGluIHJlYWwtdGltZS5cbiAgICpcbiAgICogQHJldHVybnMge09ic2VydmFibGU8U2VhcmNoUGFyYW1zPn0gLSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSBsYXRlc3QgZm9ybSBlbGVtZW50IGNoYW5nZXMuXG4gICAqL1xuICBnZXQgbGF0ZXN0Rm9ybUVsZW1lbnRDaGFuZ2VzJCgpOiBPYnNlcnZhYmxlPFNlYXJjaFBhcmFtcz4ge1xuICAgIHJldHVybiB0aGlzLl9sYXRlc3RGb3JtRWxlbWVudENoYW5nZXMuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgcmVhY3RpdmUgZm9ybSBiYXNlZCBvbiBhIGZvcm0gbW9kZWwgdGhhdCBtYXkgYWxzbyBpbmNsdWRlIGZvcm0gc2NyaXB0cy5cbiAgICogQHBhcmFtIGZvcm1PcHRpb25zIGBPYmplY3RGb3JtT3B0aW9uc2AgZGVmaW5pbmcgdGhlIGZvcm1cbiAgICogQHBhcmFtIGZvcm1TY3JpcHRTZXJ2aWNlIEluc3RhbmNlIG9mIGEgYE9iamVjdEZvcm1TY3JpcHRTZXJ2aWNlYC4gVGhpcyBzZXJ2aWNlIGlzIHN1cHBvc2VkIHRvIGJlXG4gICAqIHNjb3BlZCB0byB0aGUgY29tcG9uZW50IHJlbmRlcmluZyB0aGUgZm9ybSAocHJvdmlkZXJzIGFycmF5IGluIGNvbXBvbmVudCBkZWNvcmF0b3IpLlxuICAgKiBAcGFyYW0gaXNJbm5lclRhYmxlRm9ybSB3aGV0aGVyIG9yIG5vdCB0aGUgZm9ybSBpcyBwYXJ0IG9mIGFub3RoZXIgZm9ybSAoYXMgaXMgd2l0aCB0YWJsZSBlZGl0IGZvcm1zKVxuICAgKiBAcmV0dXJucyBBbiBgRm9ybUdlblJlc3VsdGAgb2JqZWN0XG4gICAqL1xuICBidWlsZFJlYWN0aXZlRm9ybShcbiAgICBmb3JtT3B0aW9uczogT2JqZWN0Rm9ybU9wdGlvbnMsXG4gICAgZm9ybVNjcmlwdFNlcnZpY2U6IE9iamVjdEZvcm1TY3JpcHRTZXJ2aWNlLFxuICAgIGlzSW5uZXJUYWJsZUZvcm0/OiBib29sZWFuKTogRm9ybUdlblJlc3VsdCB7XG5cbiAgICBjb25zdCBfc2NvcGU6IEZvcm1HZW5TY29wZSA9IHtcbiAgICAgIGdDb3VudDogMCxcbiAgICAgIGZvcm1PcHRpb25zLFxuICAgICAgaXNJbm5lclRhYmxlRm9ybSxcbiAgICAgIGluaXRpYWxWYWxpZGF0b3JzOiB7fSxcbiAgICAgIGZvcm1HZW5SZXN1bHQ6IHtcbiAgICAgICAgZm9ybUNvbnRyb2xzOiB7fSxcbiAgICAgICAgZm9ybU1vZGVsOiB7fSxcbiAgICAgICAgY29udHJvbFZhbHVlU3Vic2NyaXB0aW9uczogW10sXG4gICAgICAgIHNjcmlwdGluZ1Njb3BlOiB1bmRlZmluZWQsXG4gICAgICAgIHNjcmlwdE1vZGVsOiB7fSxcbiAgICAgICAgZm9ybTogbnVsbFxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGZvcm1Nb2RlbCA9IHRoaXMuX2RhdGFUb0Zvcm0oX3Njb3BlLCBmb3JtT3B0aW9ucy5mb3JtTW9kZWwsIGZvcm1PcHRpb25zLmRhdGEpO1xuICAgIF9zY29wZS5mb3JtR2VuUmVzdWx0LmZvcm1Nb2RlbCA9IGZvcm1Nb2RlbDtcbiAgICBpZiAoIWZvcm1Nb2RlbCkgcmV0dXJuO1xuXG4gICAgLy8gaWYgYSBzY3JpcHQgaXMgYXZhaWxhYmxlLCB3ZSdsbCBpbml0IHRoZSBmb3JtIHNjcmlwdGluZyBmb3IgdGhlXG4gICAgLy8gY3VycmVudCBmb3JtXG4gICAgbGV0IHNjcmlwdGluZ1Njb3BlOiBPYmplY3RGb3JtU2NyaXB0aW5nU2NvcGU7XG4gICAgaWYgKF9zY29wZS5pc0lubmVyVGFibGVGb3JtIHx8IChmb3JtTW9kZWwuc2NyaXB0ICYmIGZvcm1Nb2RlbC5zY3JpcHQubGVuZ3RoID4gMCkpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdhZGRpbmcgZm9ybSBzY3JpcHRpbmcgc2NvcGUnKTtcbiAgICAgIHNjcmlwdGluZ1Njb3BlID0gbmV3IE9iamVjdEZvcm1TY3JpcHRpbmdTY29wZShcbiAgICAgICAgZm9ybU1vZGVsLnNpdHVhdGlvbixcbiAgICAgICAgdGhpcy5fZ2V0U2NyaXB0aW5nTW9kZWxDaGFuZ2VkKF9zY29wZSksXG4gICAgICAgIHRoaXMucGx1Z2luU2VydmljZS5nZXRBcGkoKSxcbiAgICAgICAgX3Njb3BlLmlzSW5uZXJUYWJsZUZvcm1cbiAgICAgICk7XG4gICAgICBzY3JpcHRpbmdTY29wZS5vYmplY3RJZCA9IGZvcm1PcHRpb25zLm9iamVjdElkO1xuICAgIH1cbiAgICBfc2NvcGUuZm9ybUdlblJlc3VsdC5zY3JpcHRpbmdTY29wZSA9IHNjcmlwdGluZ1Njb3BlO1xuXG5cbiAgICBsZXQgZm9ybSA9IG5ldyBPYmplY3RGb3JtR3JvdXAoe30pO1xuICAgIGlmIChmb3JtTW9kZWwuZWxlbWVudHNbMF0gJiYgZm9ybU1vZGVsLmVsZW1lbnRzWzBdLmVsZW1lbnRzKSB7XG4gICAgICB0aGlzLl9hZGRGb3JtQ29udHJvbChfc2NvcGUsIGZvcm0sIGZvcm1Nb2RlbC5lbGVtZW50c1swXSwgJ2NvcmUnKTtcbiAgICB9XG4gICAgaWYgKGZvcm1Nb2RlbC5lbGVtZW50c1sxXSAmJiBmb3JtTW9kZWwuZWxlbWVudHNbMV0uZWxlbWVudHMpIHtcbiAgICAgIHRoaXMuX2FkZEZvcm1Db250cm9sKF9zY29wZSwgZm9ybSwgZm9ybU1vZGVsLmVsZW1lbnRzWzFdLCAnZGF0YScpO1xuICAgIH1cbiAgICBfc2NvcGUuZm9ybUdlblJlc3VsdC5mb3JtID0gZm9ybTtcbiAgICB0aGlzLl9pbml0VmFsaWRhdG9ycyhfc2NvcGUuZm9ybUdlblJlc3VsdC5mb3JtLCBfc2NvcGUpO1xuICAgIHRoaXMuX2luaXRTY3JpcHRpbmdTY29wZShfc2NvcGUsIGZvcm1TY3JpcHRTZXJ2aWNlKTtcbiAgICByZXR1cm4gX3Njb3BlLmZvcm1HZW5SZXN1bHQ7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgZm9ybSBlbGVtZW50IG9iamVjdCB0byBhbiBPYmplY3RGb3JtQ29udHJvbFdyYXBwZXIgd2hpY2ggdGhlbiBjYW4gYmUgdXNlZCB0b1xuICAgKiByZW5kZXIgYSBmcm9tIGNvbnRyb2wuIFJlc3VsdCBjYW4gYmUgdXNlZCBhcyBpbnB1dCBmb3IgRm9ybUVsZW1lbnRDb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBlbGVtZW50IC0gdGhlIGVsZW1lbnQgb2JqZWN0IG9yIGEganNvbiBzdHJpbmdcbiAgICogQHBhcmFtIHNpdHVhdGlvbiAtIG9wdGlvbmFsIHByb3BlcnR5IHRvIHNldCB1cCBhIGZvcm0gc2l0dWF0aW9uIGZvciB0aGUgY29udHJvbCAoZGVmYXVsdCBpcyBFRElUKVxuICAgKiBAcmV0dXJuIHRoZSBjb252ZXJ0ZWQgT2JqZWN0Rm9ybUNvbnRyb2xXcmFwcGVyIG9yIG51bGwgaW4gY2FzZSBvZiBhbiBlcnJvclxuICAgKi9cbiAgZWxlbWVudFRvRm9ybUNvbnRyb2woZWxlbWVudDogYW55LCBzaXR1YXRpb24/OiBzdHJpbmcpOiBPYmplY3RGb3JtQ29udHJvbFdyYXBwZXIge1xuXG4gICAgbGV0IGZvcm1FbGVtZW50O1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvcm1FbGVtZW50ID0gSlNPTi5wYXJzZShlbGVtZW50KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBwYXJzZSBmb3JtIGVsZW1lbnQgZnJvbSBqc29uICcsIGZvcm1FbGVtZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9ybUVsZW1lbnQgPSBlbGVtZW50O1xuICAgIH1cblxuICAgIGlmICghZm9ybUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgT2JqZWN0Rm9ybUNvbnRyb2xXcmFwcGVyXG4gICAgbGV0IHdyYXBwZXIgPSBuZXcgT2JqZWN0Rm9ybUNvbnRyb2xXcmFwcGVyKHt9KTtcbiAgICBsZXQgZm9ybVNpdHVhdGlvbiA9IHNpdHVhdGlvbiA/IHNpdHVhdGlvbiA6ICdFRElUJztcblxuICAgIHdyYXBwZXIuX2VvRm9ybUNvbnRyb2xXcmFwcGVyID0ge1xuICAgICAgY29udHJvbE5hbWU6IGZvcm1FbGVtZW50Lm5hbWUsXG4gICAgICBzaXR1YXRpb246IGZvcm1TaXR1YXRpb25cbiAgICB9O1xuXG4gICAgLy8gZm9yIGNvZGVzeXN0ZW0gZWxlbWVudHMgYWRkIGVudHJpZXMgaWYgbm90IHlldCBwcm92aWRlZFxuICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnQ09ERVNZU1RFTScgJiYgKCFmb3JtRWxlbWVudC5jb2Rlc3lzdGVtIHx8ICFmb3JtRWxlbWVudC5jb2Rlc3lzdGVtLmVudHJpZXMpKSB7XG4gICAgICBmb3JtRWxlbWVudC5jb2Rlc3lzdGVtID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldENvZGVzeXN0ZW0oZm9ybUVsZW1lbnQuY29kZXN5c3RlbS5pZCk7XG4gICAgfVxuICAgIC8vIGNyZWF0ZSB0aGUgYWN0dWFsIGZvcm0gY29udHJvbFxuICAgIGxldCBjb250cm9sRGlzYWJsZWQgPSAhIWZvcm1FbGVtZW50LnJlYWRvbmx5O1xuICAgIGxldCBmb3JtQ29udHJvbCA9IG5ldyBPYmplY3RGb3JtQ29udHJvbCh7XG4gICAgICB2YWx1ZTogZm9ybUVsZW1lbnQudmFsdWUsXG4gICAgICBkaXNhYmxlZDogY29udHJvbERpc2FibGVkXG4gICAgfSwgRm9ybVZhbGlkYXRpb24uZ2V0VmFsaWRhdG9ycyhmb3JtRWxlbWVudCwgZm9ybVNpdHVhdGlvbikpO1xuXG4gICAgLy8gRm9ybSBlbGVtZW50cyBpbiBTRUFSQ0ggc2l0dWF0aW9uIG1heSBhcnJpdmUgd2l0aCBhIHZhbHVlIHNldCB0byBOVUxMIChleHBsaWNpdCBzZWFyY2ggZm9yXG4gICAgLy8gZmllbGRzIHRoYXQgYXJlIE5PVCBzZXQpLiBJbiB0aGF0IGNhc2Ugd2UgbmVlZCB0byBwcmVwYXJlIHRoZSBmb3JtIGNvbnRyb2xcbiAgICBpZiAoZm9ybVNpdHVhdGlvbiA9PT0gJ1NFQVJDSCcgJiYgZm9ybUVsZW1lbnQudmFsdWUgPT09IG51bGwpIHtcbiAgICAgIGZvcm1FbGVtZW50LmlzTm90U2V0VmFsdWUgPSB0cnVlO1xuICAgIH1cblxuICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50ID0gZm9ybUVsZW1lbnQ7XG4gICAgd3JhcHBlci5hZGRDb250cm9sKGZvcm1FbGVtZW50Lm5hbWUsIGZvcm1Db250cm9sKTtcblxuICAgIHJldHVybiB3cmFwcGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgZGF0YSBmcm9tIGFuIG9iamVjdCBmb3JtIGJhc2VkIG9uIHNpdHVhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGZvcm0gLSBmb3JtIHRvIGV4dHJhY3QgZGF0YSBmcm9tXG4gICAqIEBwYXJhbSBzaXR1YXRpb24gLSBmb3JtIHNpdHVhdGlvblxuICAgKiBAcGFyYW0gW2luaXRpYWxEYXRhXSAtIG9wdGlvbmFsIGZvcm0gZGF0YSB0byBtYXRjaCB0aGUgY3VycmVudCB2YWx1ZXMgYWdhaW5zdFxuICAgKiBUaGlzIGlzIHJlcXVpcmVkIGZvciBlZGl0aWcgaW5kZXhkYXRhIChFRElUIHNpdHVhdGlvbiksIGJlY2F1c2Ugd2UgaGF2ZSB0byBjb21wYXJlIG5ldyB2YWx1ZXNcbiAgICogYWdhaW5zdCB0aGUgaW5pdGlhbCB2YWx1ZXMuIElmIGEgcHJvcGVydHkgdGhhdCBpcyBjb250YWluZWQgaW4gdGhlIGZvcm1zIGluaXRpYWwgZGF0YSBpcyByZW1vdmVkXG4gICAqIChlLmcuIHNldCB0byBudWxsKSB0aGVuIHdlIGhhdmUgdG8gc2V0IHRoaXMgbnVsbCB2YWx1ZSwgYmVjYXVzZSBvdGhlcndpc2UgdGhlIHNlcnZlciB3b3VsZFxuICAgKiBpZ25vcmUgdGhlIGNoYW5nZXMuXG4gICAqIEBwYXJhbSBpc1RhYmxlUm93RWRpdEZvcm0gRmxhZyBpbmRpY2F0aW5nIHRoYXQgdGhlIHByb3ZpZGVkIGZvcm0gaXMgYW4gaW5saW5lIGZvcm0gdXNlZCBieVxuICAgKiBhIGZvcm1zIHRhYmxlIGVsZW1lbnQgZm9yIGVkaXRpbmcgcm93cy4gVGhvc2UgbmVlZCBhIHNwZWNpYWwgaGFuZGxpbmcuXG4gICAqIEByZXR1cm4gZXh0cmFjdGVkIGRhdGEgYXMgb2JqZWN0XG4gICAqL1xuICBleHRyYWN0Rm9ybURhdGEoZm9ybTogT2JqZWN0Rm9ybUdyb3VwLCBzaXR1YXRpb246IHN0cmluZywgaW5pdGlhbERhdGE/OiBhbnksIGlzVGFibGVSb3dFZGl0Rm9ybT86IGJvb2xlYW4pIHtcbiAgICBsZXQgZXh0cmFjdGVkRGF0YSA9IHt9O1xuICAgIHRoaXMuZ2V0RWxlbWVudFZhbHVlcyhleHRyYWN0ZWREYXRhLCBmb3JtLCBzaXR1YXRpb24gfHwgJ0VESVQnLCBpbml0aWFsRGF0YSwgaXNUYWJsZVJvd0VkaXRGb3JtKTtcbiAgICByZXR1cm4gZXh0cmFjdGVkRGF0YTtcbiAgfVxuXG4gIC8qKlxuICogQWRkIGEgcmVmZXJlbmNlIHRvIGEgdGVtcG9yYXJ5IGxvY2Fsc3RvcmFnZSBlbnRyeSB0aGF0IHNob3VsZCBiZSBjbGVhcmVkIHdoZW4gYVxuICogbmV3IGJyb3dzZXIgc2Vzc2lvbiBzdGFydHMuIEluIGNvbnRleHQgb2YgZm9ybXMgdGhpcyB3aWxsIGJlIHVzZWQgdG8gY2xlYW51cCB0aGVcbiAqIGxheW91dCBzdGF0ZSBvZiBmb3JtcyAoc2VsZWN0ZWQgdGFicyBldGMuKSB0aGF0IGFyZSBzdG9yZWQgbG9jYWxseSBidXQgc2hvdWxkIG9ubHlcbiAqIGJlIHBlc2lzdGVkIGZvciBvbmUgYnJvd3NlciBzZXNzaW9uLlxuICogQHBhcmFtIHN0b3JhZ2VLZXkgS2V5IG9mIHRoZSBsb2NhbHN0b3JhZ2UgaXRlbVxuICovXG4gIGFkZFRlbXBvcmFyeVN0b3JhZ2VFbnRyeShzdG9yYWdlS2V5OiBzdHJpbmcpIHtcbiAgICAvLyBlbnRyaWVzIHdpbGwgdGhlbXNlbHZlcyBiZSBzdG9yZWQgaW4gbG9jYWxzdG9yYWdlIHNvIHdlIGNhbiBjaGVjayBmb3IgZW50cmllc1xuICAgIC8vIHRvIGJlIHJlbW92ZWQgb25jZSB0aGUgYXBwbGljYXRpb24gc3RhcnRzXG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuX2dldFRlbXBvcmFyeVN0b3JhZ2VFbnRyaWVzKCk7XG4gICAgaWYgKCFjdXJyZW50LmluY2x1ZGVzKHN0b3JhZ2VLZXkpKVxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5URU1QX1NUT1JBR0VfRU5UUklFU19LRVksIEpTT04uc3RyaW5naWZ5KFsuLi5jdXJyZW50LCBzdG9yYWdlS2V5XSkpXG4gIH1cblxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBsYXRlc3QgZm9ybSBlbGVtZW50IGNoYW5nZXMgd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWUuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIG1lcmdlcyB0aGUgY3VycmVudCBmb3JtIGVsZW1lbnQgY2hhbmdlcyB3aXRoIHRoZSBuZXcgdmFsdWVcbiAgICogYW5kIGVtaXRzIHRoZSB1cGRhdGVkIGNoYW5nZXMgdG8gdGhlIGBfbGF0ZXN0Rm9ybUVsZW1lbnRDaGFuZ2VzYCBzdWJqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge1NlYXJjaFBhcmFtc30gdmFsdWUgLSBUaGUgbmV3IGZvcm0gZWxlbWVudCBjaGFuZ2VzIHRvIGJlIG1lcmdlZC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICB1cGRhdGVGb3JtRWxlbWVudENoYW5nZXModmFsdWU6IFNlYXJjaFBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRDaGFuZ2VzID0gdGhpcy5fbGF0ZXN0Rm9ybUVsZW1lbnRDaGFuZ2VzLnZhbHVlO1xuICAgIGNvbnN0IHVwZGF0ZWRDaGFuZ2VzID0gey4uLmN1cnJlbnRDaGFuZ2VzLCAuLi52YWx1ZX07XG4gICAgdGhpcy5fbGF0ZXN0Rm9ybUVsZW1lbnRDaGFuZ2VzLm5leHQodXBkYXRlZENoYW5nZXMpO1xuICB9XG5cbiAgLy8gUmVjdXJzaXZlIG1ldGhvZCB0byBnZXQgdGhlIHZhbHVlcyBmcm9tIGVhY2ggZm9ybSBjb250cm9sLlxuICBwcml2YXRlIGdldEVsZW1lbnRWYWx1ZXMoZGF0YTogYW55LCBmb3JtQ29udHJvbDogT2JqZWN0Rm9ybU1vZGVsLCBzaXR1YXRpb246IHN0cmluZywgaW5pdGlhbERhdGE/OiBhbnksIGlzVGFibGVSb3dFZGl0Rm9ybT86IGJvb2xlYW4pIHtcblxuICAgIGlmICghZm9ybUNvbnRyb2wgfHwgIWZvcm1Db250cm9sLmNvbnRyb2xzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZvcm1Db250cm9sIGluc3RhbmNlb2YgT2JqZWN0Rm9ybUNvbnRyb2xXcmFwcGVyKSB7XG5cbiAgICAgIGNvbnN0IGZjOiBhbnkgPSBmb3JtQ29udHJvbC5jb250cm9sc1tmb3JtQ29udHJvbC5fZW9Gb3JtQ29udHJvbFdyYXBwZXIuY29udHJvbE5hbWVdO1xuXG4gICAgICBpZiAoZmMuX2VvRm9ybUVsZW1lbnQuaXNOb3RTZXRWYWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAvLyBmb3JtIGVsZW1lbnRzIG1heSBleHBsaWNpdGx5IHNldCB0byBoYXZlIE5VTEwgdmFsdWUgKGUuZy4gZnJvbSBTZWFyY2ggZm9ybSBpZiB2YWx1ZXMgYXJlIHJlcXVlc3RlZCB0aGF0IGhhdmUgbm8gdmFsdWVzKVxuICAgICAgICBpZiAoaXNUYWJsZVJvd0VkaXRGb3JtKSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhVmFsdWUoZmMuX2VvRm9ybUVsZW1lbnQubmFtZSwgbnVsbCwgZGF0YSwgZmMuX2VvRm9ybUVsZW1lbnQsIGlzVGFibGVSb3dFZGl0Rm9ybSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhVmFsdWUoZmMuX2VvRm9ybUVsZW1lbnQucW5hbWUsIG51bGwsIGRhdGEsIGZjLl9lb0Zvcm1FbGVtZW50LCBpc1RhYmxlUm93RWRpdEZvcm0pO1xuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSBpZiAoZmMudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdmFsID0gZmMudmFsdWU7XG5cbiAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgbWV0YSBkYXRhIGFyZSBhbHNvIHVwIHRvIGRhdGVcbiAgICAgICAgaWYgKGZjLl9lb0Zvcm1FbGVtZW50LnR5cGUgPT09ICdDT0RFU1lTVEVNJykge1xuICAgICAgICAgIGNvbnN0IGNzID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldENvZGVzeXN0ZW0oZmMuX2VvRm9ybUVsZW1lbnQuY29kZXN5c3RlbS5pZCk7XG4gICAgICAgICAgZmMuX2VvRm9ybUVsZW1lbnQuZGF0YU1ldGEgPSBjcy5lbnRyaWVzLmZpbmQoZSA9PiBlLmRhdGEgPT09IHZhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHNpdHVhdGlvbikge1xuICAgICAgICAgIGNhc2UgJ1NFQVJDSCc6IHtcbiAgICAgICAgICAgIGlmICh2YWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gcm93IGVkaXRpbmcgZm9ybXMgdXNlIHRoZSBuYW1lIGluc3RlYWQgb2YgdGhlIHFuYW1lIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZVxuICAgICAgICAgICAgICAvLyB0YWJsZXMgZ3JpZCBpc24ndCBhYmxlIHRvIG1hcCB0aGUgZmllbGRzXG4gICAgICAgICAgICAgIGlmICghaXNUYWJsZVJvd0VkaXRGb3JtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhVmFsdWUoZmMuX2VvRm9ybUVsZW1lbnQucW5hbWUsIHZhbCwgZGF0YSwgZmMuX2VvRm9ybUVsZW1lbnQsIGlzVGFibGVSb3dFZGl0Rm9ybSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFWYWx1ZShmYy5fZW9Gb3JtRWxlbWVudC5uYW1lLCB2YWwsIGRhdGEsIGZjLl9lb0Zvcm1FbGVtZW50LCBpc1RhYmxlUm93RWRpdEZvcm0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdDUkVBVEUnOiB7XG4gICAgICAgICAgICAvLyBhbHNvIGFkZCBOVUxMIHZhbHVlcyAob3ZlcnJpZGUgZXhpc3RpbmcgZGVmYXVsdHZhbHVlcylcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YVZhbHVlKGZjLl9lb0Zvcm1FbGVtZW50Lm5hbWUsIHZhbCwgZGF0YSwgZmMuX2VvRm9ybUVsZW1lbnQsIGlzVGFibGVSb3dFZGl0Rm9ybSlcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdFRElUJzoge1xuICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBjaGVjaywgaWYgdGhlIHZhbHVlcyBoYXZlIGJlZW4gY2hhbmdlZCBhbmQgc2tpcCBzZW5kaW5nIHRoZW0gdG8gdGhlIGJhY2tlbmQsIGlmIG5vdGhpbmcgaGFzIGNoYW5nZWRcbiAgICAgICAgICAgIC8vIHRoZSBkYXRldGltZSBmaWVsZHMgbmVlZCBzb21lIGV4dHJhIGxvZ2ljIHRvIG1ha2UgdGhlIGNvbXBhcmlzb24gd29ya1xuICAgICAgICAgICAgaWYgKCFpc1RhYmxlUm93RWRpdEZvcm0pIHtcbiAgICAgICAgICAgICAgaWYgKGluaXRpYWxEYXRhW2ZjLl9lb0Zvcm1FbGVtZW50Lm5hbWVdICYmIGZjLl9lb0Zvcm1FbGVtZW50LnR5cGUgPT09ICdEQVRFVElNRScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWluaXRpYWxEYXRhW2ZjLl9lb0Zvcm1FbGVtZW50Lm5hbWVdLmluY2x1ZGVzKCdUJykpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzb0RhdGVXaXRob3V0VGltZSA9IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpIC0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDApLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcbiAgICAgICAgICAgICAgICAgIGlmIChpc29EYXRlV2l0aG91dFRpbWUgPT09IGluaXRpYWxEYXRhW2ZjLl9lb0Zvcm1FbGVtZW50Lm5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZGF0ZS50b0lTT1N0cmluZygpID09PSBpbml0aWFsRGF0YVtmYy5fZW9Gb3JtRWxlbWVudC5uYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsID09PSBpbml0aWFsRGF0YVtmYy5fZW9Gb3JtRWxlbWVudC5uYW1lXSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpbiBlZGl0IHNpdHVhdGlvbiB3ZSBoYXZlIHRvIGNvbXBhcmUgbmV3IHZhbHVlcyBhZ2FpbnN0IHRoZSBpbml0aWFsIHZhbHVlc1xuICAgICAgICAgICAgLy8gSWYgYSBwcm9wZXJ0eSB0aGF0IGlzIGNvbnRhaW5lZCBpbiB0aGUgZm9ybXMgaW5pdGlhbCBkYXRhIGlzIHJlbW92ZWQgKGUuZy4gc2V0IHRvIG51bGwpXG4gICAgICAgICAgICAvLyB0aGVuIHdlIGhhdmUgdG8gc2V0IHRoaXMgbnVsbCB2YWx1ZSwgYmVjYXVzZSBvdGhlcndpc2UgdGhlIHNlcnZlciB3aWxsIGlnbm9yZSB0aGUgY2hhbmdlc1xuICAgICAgICAgICAgaWYgKHZhbCAhPT0gbnVsbCB8fCAoaW5pdGlhbERhdGEgJiYgaW5pdGlhbERhdGFbZmMuX2VvRm9ybUVsZW1lbnQubmFtZV0gIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgICAgLy8gZGF0YVtmYy5fZW9Gb3JtRWxlbWVudC5uYW1lXSA9IHZhbDtcbiAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCAmJiBmYy5fZW9Gb3JtRWxlbWVudC5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YVZhbHVlKGZjLl9lb0Zvcm1FbGVtZW50Lm5hbWUsIFtdLCBkYXRhLCBmYy5fZW9Gb3JtRWxlbWVudCwgaXNUYWJsZVJvd0VkaXRGb3JtKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFWYWx1ZShmYy5fZW9Gb3JtRWxlbWVudC5uYW1lLCB2YWwsIGRhdGEsIGZjLl9lb0Zvcm1FbGVtZW50LCBpc1RhYmxlUm93RWRpdEZvcm0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmtleXMoZm9ybUNvbnRyb2wuY29udHJvbHMpXG4gICAgICAgIC5mb3JFYWNoKGNvbnRyb2xLZXkgPT4ge1xuICAgICAgICAgIGxldCBmb3JtQ29udHJvbEtleWVkID0gPE9iamVjdEZvcm1Hcm91cD5mb3JtQ29udHJvbC5jb250cm9sc1tjb250cm9sS2V5XTtcbiAgICAgICAgICB0aGlzLmdldEVsZW1lbnRWYWx1ZXMoZGF0YSwgZm9ybUNvbnRyb2xLZXllZCwgc2l0dWF0aW9uLCBpbml0aWFsRGF0YSwgaXNUYWJsZVJvd0VkaXRGb3JtKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXREYXRhVmFsdWUoa2V5LCB2YWx1ZSwgZGF0YSwgZm9ybUVsZW1lbnQsIGlzVGFibGVSb3dFZGl0Rm9ybSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlWzBdKSkge1xuICAgICAgICBpZiAodiBpbnN0YW5jZW9mIFJhbmdlVmFsdWUgJiYgdi5vcGVyYXRvciA9PT0gJ21yJykge1xuICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHYpIHtcbiAgICAgICAgICBkYXRhW2tleV0gPSB0aGlzLmZvcm1hdFZhbHVlKHZhbHVlLCBmb3JtRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YVtrZXldID0gKHZhbHVlIGluc3RhbmNlb2YgUmFuZ2VWYWx1ZSAmJiB2YWx1ZS5vcGVyYXRvciA9PT0gJ21yJykgPyB2YWx1ZSA6IHRoaXMuZm9ybWF0VmFsdWUodmFsdWUsIGZvcm1FbGVtZW50KTtcbiAgICB9XG4gICAgaWYgKGlzVGFibGVSb3dFZGl0Rm9ybSAmJiBmb3JtRWxlbWVudC5kYXRhTWV0YSkge1xuICAgICAgLy8gaW5uZXIgdGFibGVzIG5lZWQgdG8gc2V0IHVwIHRoZSBtZXRhIGRhdGEgYXMgd2VsbFxuICAgICAgZGF0YVtrZXkgKyAnX21ldGEnXSA9IGZvcm1FbGVtZW50LmRhdGFNZXRhO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdFZhbHVlKHZhbHVlLCBmb3JtRWxlbWVudCkge1xuICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnREFURVRJTUUnICYmICFmb3JtRWxlbWVudC53aXRodGltZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odmFsdWUuZ2V0VGltZSgpKSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCAneXl5eS1NTS1kZCcpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJhbmdlVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZVZhbHVlKFxuICAgICAgICAgIHZhbHVlLm9wZXJhdG9yLFxuICAgICAgICAgIHZhbHVlLmZpcnN0VmFsdWUgJiYgdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUuZmlyc3RWYWx1ZSwgJ3l5eXktTU0tZGQnKSxcbiAgICAgICAgICB2YWx1ZS5zZWNvbmRWYWx1ZSAmJiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZS5zZWNvbmRWYWx1ZSwgJ3l5eXktTU0tZGQnKSxcbiAgICAgICAgICB2YWx1ZT8udXNlTm90LFxuICAgICAgICAgIHZhbHVlPy5hY3R1YWxPcGVyYXRvclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnVEFCTEUnKSB7XG4gICAgICAoZm9ybUVsZW1lbnQuZWxlbWVudHMgfHwgW10pLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAodmFsdWUgfHwgW10pLmZvckVhY2godiA9PiB2W2VsLm5hbWVdID0gdGhpcy5mb3JtYXRWYWx1ZSh2W2VsLm5hbWVdLCBlbCkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG5cbiAgLy8gRnVuY3Rpb25zIGludm9sdmVkIGluIGJ1aWxkaW5nIGFuIG9iamVjdCBmb3JtXG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZSBtZXRob2QgYWRkaW5nIGEgbmV3IFVudHlwZWRGb3JtQ29udHJvbCAoZ3JvdXAgb3IgY29udHJvbCkgdG8gYSBwYXJlbnQgZm9ybSBncm91cFxuICAgKlxuICAgKiBAcGFyYW0gcGFyZW50R3JvdXAgLSB0aGUgcGFyZW50IGdyb3VwIHRvIGFkZCB0aGUgY29udHJvbCB0b1xuICAgKiBAcGFyYW0gZm9ybUVsZW1lbnQgLSB0aGUgZW5haW8gZm9ybSBtb2RlbCBlbGVtZW50IHRvIGNyZWF0ZSB0aGUgY2hpbGQgY29udHJvbCBmcm9tXG4gICAqIEBwYXJhbSBbdXNlTmFtZV0gLSB1c2UgdGhpcyBuYW1lIGluc3RlYWQgb2YgdGhlIG9uZSBmcm9tIHRoZSBtb2RlbFxuICAgKi9cbiAgcHJpdmF0ZSBfYWRkRm9ybUNvbnRyb2woc2NvcGU6IEZvcm1HZW5TY29wZSwgcGFyZW50R3JvdXA6IE9iamVjdEZvcm1Hcm91cCwgZm9ybUVsZW1lbnQ6IGFueSwgdXNlTmFtZT86IHN0cmluZykge1xuXG4gICAgbGV0IGN0cmw7XG4gICAgbGV0IG5hbWU7XG5cbiAgICAvLyBhZGQgYSBmb3JtIGdyb3VwXG4gICAgaWYgKGZvcm1FbGVtZW50LnR5cGUgPT09ICdvMm1Hcm91cCcgfHwgZm9ybUVsZW1lbnQudHlwZSA9PT0gJ28ybUdyb3VwU3RhY2snKSB7XG5cbiAgICAgIC8vIGRvIG5vdCBhZGQgZ3JvdXBzIHRoYXQgYXJlIGVtcHR5XG4gICAgICBpZiAoIWZvcm1FbGVtZW50LmVsZW1lbnRzIHx8IGZvcm1FbGVtZW50LmVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRm91bmQgZW1wdHkgZm9ybSBncm91cCcsIGZvcm1FbGVtZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjdHJsID0gbmV3IE9iamVjdEZvcm1Hcm91cCh7fSk7XG4gICAgICBjdHJsLl9lb0Zvcm1Hcm91cCA9IHtcbiAgICAgICAgbGFiZWw6IGZvcm1FbGVtZW50LmxhYmVsLFxuICAgICAgICBsYXlvdXQ6IGZvcm1FbGVtZW50LmxheW91dCxcbiAgICAgICAgdHlwZTogZm9ybUVsZW1lbnQudHlwZVxuICAgICAgfTtcblxuICAgICAgaWYgKHVzZU5hbWUgPT09ICdjb3JlJyB8fCB1c2VOYW1lID09PSAnZGF0YScpIHtcbiAgICAgICAgY3RybC5fZW9Gb3JtR3JvdXAubGFiZWwgPSB1c2VOYW1lO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBlIG9mIGZvcm1FbGVtZW50LmVsZW1lbnRzKSB7XG4gICAgICAgIHRoaXMuX2FkZEZvcm1Db250cm9sKHNjb3BlLCBjdHJsLCBlKTtcbiAgICAgIH1cbiAgICAgIG5hbWUgPSB1c2VOYW1lIHx8ICdmZycgKyBzY29wZS5nQ291bnQrKztcbiAgICAgIGN0cmwuX2VvRm9ybUdyb3VwLmlkID0gYCR7c2NvcGUuZm9ybU9wdGlvbnMubGF5b3V0U2V0dGluZ3NJRCB8fCBzY29wZS5mb3JtT3B0aW9ucy5mb3JtTW9kZWwubmFtZX0uJHtuYW1lfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGFkZCBmb3JtIGNvbnRyb2xcbiAgICAgIC8vIFRvIGJlIGFibGUgdG8gaW50ZWdyYXRlIHJlY3Vyc2l2ZSBmb3JtIGNvbnRyb2xzIGludG8gdGhlIG1haW4gZm9ybSxcbiAgICAgIC8vIHdlIGhhdmUgdG8gd3JhcCB0aGVtIGluIGEgZm9ybSBncm91cFxuICAgICAgY3RybCA9IG5ldyBPYmplY3RGb3JtQ29udHJvbFdyYXBwZXIoe30pO1xuICAgICAgY3RybC5fZW9Gb3JtQ29udHJvbFdyYXBwZXIgPSB7XG4gICAgICAgIC8vIHRoZSBuYW1lIG9mIHRoZSB3cmFwcGVkIFVudHlwZWRGb3JtQ29udHJvbFxuICAgICAgICBjb250cm9sTmFtZTogZm9ybUVsZW1lbnQubmFtZSxcbiAgICAgICAgc2l0dWF0aW9uOiBzY29wZS5mb3JtT3B0aW9ucy5mb3JtTW9kZWwuc2l0dWF0aW9uXG4gICAgICB9O1xuICAgICAgaWYgKHNjb3BlLmZvcm1PcHRpb25zLmZvcm1Nb2RlbC5zaXR1YXRpb24gPT09ICdTRUFSQ0gnICYmIGZvcm1FbGVtZW50LnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIGZvcm1FbGVtZW50LmlzTm90U2V0VmFsdWUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgLy8gZG8gbm90IHNldCBhIHJlZmVyZW5jZSBhcyB0aGUgZm9ybSBjb250cm9scyB2YWx1ZVxuICAgICAgLy8gb3RoZXJ3aXNlIHdlIGNvdWxkIG5vdCByZXNldCB0aGUgZm9ybVxuICAgICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShmb3JtRWxlbWVudC52YWx1ZSkpIHtcbiAgICAgICAgLy8gY29weSBieSB2YWx1ZSBmb3IgYXJyYXlzIG9mIG9iamVjdHMgKGUuZy4gdGFibGUgZGF0YSlcbiAgICAgICAgdmFsdWUgPSBbXTtcbiAgICAgICAgZm9ybUVsZW1lbnQudmFsdWUuZm9yRWFjaCgobykgPT4ge1xuICAgICAgICAgIHZhbHVlLnB1c2goVXRpbHMuZm9ybURhdGFQYXJzZShVdGlscy5mb3JtRGF0YVN0cmluZ2lmeShvKSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gZm9ybUVsZW1lbnQudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGZvciBjb2Rlc3lzdGVtIGVsZW1lbnRzIGFkZCBlbnRyaWVzIGlmIG5vdCB5ZXQgcHJvdmlkZWRcbiAgICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnQ09ERVNZU1RFTScgJiYgIWZvcm1FbGVtZW50LmNvZGVzeXN0ZW0uZW50cmllcykge1xuICAgICAgICBmb3JtRWxlbWVudC5jb2Rlc3lzdGVtID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldENvZGVzeXN0ZW0oZm9ybUVsZW1lbnQuY29kZXN5c3RlbS5pZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGNyZWF0ZSB0aGUgYWN0dWFsIGZvcm0gY29udHJvbFxuICAgICAgbGV0IGNvbnRyb2xEaXNhYmxlZCA9IHNjb3BlLmZvcm1PcHRpb25zLmRpc2FibGVkIHx8ICEhZm9ybUVsZW1lbnQucmVhZG9ubHk7XG4gICAgICBsZXQgZm9ybUNvbnRyb2wgPSBuZXcgT2JqZWN0Rm9ybUNvbnRyb2woe1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGRpc2FibGVkOiBjb250cm9sRGlzYWJsZWRcbiAgICAgIH0pO1xuXG4gICAgICBmb3JtRWxlbWVudC5yZWFkb25seSA9IGNvbnRyb2xEaXNhYmxlZDtcblxuICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQgPSBmb3JtRWxlbWVudDtcbiAgICAgIHNjb3BlLmZvcm1HZW5SZXN1bHQuZm9ybUNvbnRyb2xzW2Zvcm1FbGVtZW50Lm5hbWVdID0gZm9ybUNvbnRyb2w7XG5cbiAgICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnQ09ERVNZU1RFTScgfHwgKGZvcm1FbGVtZW50LnR5cGUgPT09ICdTVFJJTkcnICYmIGZvcm1FbGVtZW50LmNsYXNzaWZpY2F0aW9uID09PSAnc2VsZWN0b3InKSkge1xuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5hcHBseUZpbHRlciA9IChmdW5jOiBGdW5jdGlvbikgPT4ge1xuICAgICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LmZpbHRlckZ1bmN0aW9uID0gZnVuYztcbiAgICAgICAgfTtcbiAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQuYXBwbHlEaXNhYmxpbmdGaWx0ZXIgPSAoZnVuYzogRnVuY3Rpb24pID0+IHtcbiAgICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5kaXNhYmxpbmdGaWx0ZXJGdW5jdGlvbiA9IGZ1bmM7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnU1RSSU5HJyAmJiBmb3JtRWxlbWVudC5jbGFzc2lmaWNhdGlvbiA9PT0gJ3NlbGVjdG9yJykge1xuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5zZXRMaXN0ID0gKGxpc3RPYmplY3Q6IGFueSkgPT4ge1xuICAgICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50Lmxpc3QgPSBsaXN0T2JqZWN0O1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybUVsZW1lbnQudHlwZSA9PT0gJ09SR0FOSVpBVElPTicpIHtcbiAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQuc2V0RmlsdGVyID0gKGZpbHRlck9iamVjdDogYW55KSA9PiB7XG4gICAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQuZmlsdGVyID0gZmlsdGVyT2JqZWN0O1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybUVsZW1lbnQudHlwZSA9PT0gJ1RBQkxFJykge1xuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5vYmplY3QgPSBzY29wZS5mb3JtT3B0aW9ucy5vYmplY3Q7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnUkVGRVJFTkNFJykge1xuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5zZXRRdWVyeUZpbHRlcnMgPSAocXVlcnlGaWx0ZXJzT2JqZWN0OiB7W2ZpZWxkUW5hbWU6IHN0cmluZ106IHtvOiBzdHJpbmcsIHYxOiBhbnksIHYyOiBhbnl9fSwgb2JqZWN0VHlwZXM/OiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LnF1ZXJ5RmlsdGVycyA9IHF1ZXJ5RmlsdGVyc09iamVjdDtcbiAgICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5vYmplY3RUeXBlc0ZpbHRlciA9IG9iamVjdFR5cGVzO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoc2NvcGUuZm9ybU9wdGlvbnMuZm9ybU1vZGVsLnNpdHVhdGlvbiA9PT0gJ1NFQVJDSCcpIHtcbiAgICAgICAgLy8gaW4gc2VhcmNoIHNpdHVhdGlvbiBldmVuIHJlYWRvbmx5IGZpZWxkcyBzaG91bGQgYmUgZWRpdGFibGUgLi4uXG4gICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LnJlYWRvbmx5ID0gZmFsc2U7XG4gICAgICAgIC8vIC4uLiBhbmQgcmVxdWlyZWQgbWFrZXMgbm8gc2Vuc2UgaGVyZVxuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5yZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyByZW1vdmUgZW1wdHkgZGVzY3JpcHRpb25zXG4gICAgICBsZXQgZGVzYyA9IGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LmRlc2NyaXB0aW9uO1xuICAgICAgaWYgKGRlc2MgJiYgZGVzYy50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LmRlc2NyaXB0aW9uID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gYWRkIHRoZSBmb3JtIGVsZW1lbnQgdG8gdGhlIHNjcmlwdCBtb2RlbCB0aGF0IHdpbGwgYmUgaW5qZWN0ZWQgaW50b1xuICAgICAgLy8gdGhlIGZvcm1zIHNjcmlwdGluZyBzY29wZSBsYXRlciBvblxuICAgICAgc2NvcGUuZm9ybUdlblJlc3VsdC5zY3JpcHRNb2RlbFtmb3JtRWxlbWVudC5uYW1lXSA9IGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50O1xuXG4gICAgICAvLyBhcHBseSBjaGFuZ2UgbGlzdGVuZXIgdG8gdGhlIGZvcm0gY29udHJvbCwgdGhhdCB3aWxsIHRyaWdnZXJcbiAgICAgIC8vIHRoZSBmb3JtIGVsZW1lbnRzIG9uQ2hhbmdlIGxpc3RlbmVyXG4gICAgICBsZXQgY29udHJvbFdhdGNoID0gY3RybC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoZm9ybUVsZW1lbnQudHlwZSA9PT0gJ1RBQkxFJyA/IDAgOiA1MDApKTtcbiAgICAgIGNvbnRyb2xXYXRjaC5zdWJzY3JpYmUoKHYpID0+IHtcbiAgICAgICAgaWYgKGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LnR5cGUgPT09ICdSRUZFUkVOQ0UnKSB7XG4gICAgICAgICAgdGhpcy5fZ2V0RGF0YU1ldGEoZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQsIHZbZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQubmFtZV0pLnN1YnNjcmliZShtID0+IHtcbiAgICAgICAgICAgIGlmIChtKSB7XG4gICAgICAgICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LmRhdGFNZXRhID0gZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQubXVsdGlzZWxlY3QgPyBtIDogbVswXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5kYXRhTWV0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlRm9ybUVsZW1lbnRDaGFuZ2VzKHYpO1xuXG4gICAgICAgIGlmIChzY29wZS5mb3JtR2VuUmVzdWx0LnNjcmlwdGluZ1Njb3BlKSB7XG4gICAgICAgICAgc2NvcGUuZm9ybUdlblJlc3VsdC5zY3JpcHRpbmdTY29wZS5tb2RlbENoYW5nZWQodik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgc2NvcGUuZm9ybUdlblJlc3VsdC5jb250cm9sVmFsdWVTdWJzY3JpcHRpb25zLnB1c2goY29udHJvbFdhdGNoKTtcblxuICAgICAgY3RybC5hZGRDb250cm9sKGZvcm1FbGVtZW50Lm5hbWUsIGZvcm1Db250cm9sKTtcbiAgICAgIG5hbWUgPSAnZmdfJyArIGZvcm1FbGVtZW50Lm5hbWU7XG4gICAgfVxuICAgIHBhcmVudEdyb3VwLmFkZENvbnRyb2wobmFtZSwgY3RybCk7XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2UgZGF0YSBpbnRvIGEgZm9ybSBtb2RlbC5cbiAgICpcbiAgICogQHBhcmFtIG1vZGVsIC0gZm9ybSBtb2RlbFxuICAgKiBAcGFyYW0gZGF0YSAtIGRhdGEgb2JqZWN0IG9yIGFycmF5IG9mIFNlYXJjaEZpbHRlciBvYmplY3RzIGluIGNhc2Ugb2YgYSBzZWFyY2ggZm9ybVxuICAgKi9cbiAgcHJpdmF0ZSBfZGF0YVRvRm9ybShzY29wZTogRm9ybUdlblNjb3BlLCBtb2RlbDogYW55LCBkYXRhOiBhbnkpIHtcbiAgICBpZiAobW9kZWwgJiYgZGF0YSkge1xuICAgICAgdGhpcy5fc2V0RWxlbWVudFZhbHVlcyhzY29wZSwgbW9kZWwuZWxlbWVudHMsIGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gbW9kZWw7XG4gIH1cblxuICAvLyByZWN1cnNpdmUgbWV0aG9kIGZvciBhZGRpbmcgdmFsdWVzIHRvIG1vZGVsIGVsZW1lbnRzXG4gIHByaXZhdGUgX3NldEVsZW1lbnRWYWx1ZXMoc2NvcGU6IEZvcm1HZW5TY29wZSwgZWxlbWVudHMsIGRhdGEpIHtcblxuICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICBpZiAodGhpcy5faGFzVmFsdWUoZGF0YSwgZWxlbWVudCkpIHtcblxuICAgICAgICBlbGVtZW50LnZhbHVlID0gdGhpcy5fZ2V0VmFsdWUoc2NvcGUsIGRhdGEsIGVsZW1lbnQpO1xuICAgICAgICBpZiAoZWxlbWVudC52YWx1ZSkge1xuICAgICAgICAgIC8vIGFkZCBtZXRhIGRhdGEgZm9yIHNvbWUgb2YgdGhlIHR5cGVzXG4gICAgICAgICAgdGhpcy5fZmV0Y2hNZXRhRGF0YShzY29wZSwgZGF0YSwgZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSBlbGVtZW50LnZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKGVsZW1lbnQudHlwZSAhPT0gJ1RBQkxFJyAmJiBlbGVtZW50LmVsZW1lbnRzICYmIGVsZW1lbnQuZWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLl9zZXRFbGVtZW50VmFsdWVzKHNjb3BlLCBlbGVtZW50LmVsZW1lbnRzLCBkYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIGluIHNvbWUgY2FzZXMgcmVxdWlyZWQgbWV0YSBkYXRhIG1heSBub3QgYmUgYXZhaWxhYmxlIG9uIHRoZSBlbGVtZW50IGl0c2VsZlxuICAvLyBzbyB0aGV5IGhhdmUgdG8gYmUgZmV0Y2hlZCBhbmQgYWRkZWQgdG8gdGhlIGVsZW1lbnQgZm9yIHRoZSBmb3JtIHRvIGJlIGFibGVcbiAgLy8gdG8gcmVuZGVyIHRoZSBlbGVtZW50IGNvcnJlY3RseVxuICBwcml2YXRlIF9mZXRjaE1ldGFEYXRhKHNjb3BlOiBGb3JtR2VuU2NvcGUsIGRhdGEsIGVsZW1lbnQpIHtcblxuICAgIGlmIChzY29wZS5mb3JtT3B0aW9ucy5mb3JtTW9kZWwuc2l0dWF0aW9uID09PSAnU0VBUkNIJykge1xuICAgICAgLy8gdG9kbzogaG93IHRvIGZldGNoIG1ldGEgZGF0YSBpbiBzZWFyY2ggc2l0dWF0aW9uXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdPUkdBTklaQVRJT04nICYmIGRhdGFbZWxlbWVudC5uYW1lICsgJ19tZXRhJ10pIHtcbiAgICAgICAgZWxlbWVudC5kYXRhTWV0YSA9IGRhdGFbZWxlbWVudC5uYW1lICsgJ19tZXRhJ107XG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ0NPREVTWVNURU0nICYmIGRhdGFbZWxlbWVudC5uYW1lICsgJ19tZXRhJ10pIHtcbiAgICAgICAgZWxlbWVudC5kYXRhTWV0YSA9IGRhdGFbZWxlbWVudC5uYW1lICsgJ19tZXRhJ107XG4gICAgICAgIGVsZW1lbnQuZGVmYXVsdHJlcHJlc2VudGF0aW9uID0gZGF0YVtlbGVtZW50Lm5hbWUgKyAnX21ldGEnXS5kZWZhdWx0cmVwcmVzZW50YXRpb247XG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ1JFRkVSRU5DRScgJiYgZGF0YVtlbGVtZW50Lm5hbWUgKyAnX21ldGEnXSkge1xuICAgICAgICBlbGVtZW50LmRhdGFNZXRhID0gZGF0YVtlbGVtZW50Lm5hbWUgKyAnX21ldGEnXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXREYXRhTWV0YShmb3JtRWxlbWVudDogYW55LCBuZXdWYWx1ZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgIGlmIChuZXdWYWx1ZSkge1xuICAgICAgc3dpdGNoIChmb3JtRWxlbWVudC50eXBlKSB7XG4gICAgICAgIGNhc2UgJ09SR0FOSVpBVElPTic6IHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5ld1ZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3lzdGVtU2VydmljZS5nZXRPcmdhbml6YXRpb25PYmplY3QobmV3VmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmV3VmFsdWUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9yZ2FuaXphdGlvbk9iamVjdChuZXdWYWx1ZVswXSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXdWYWx1ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9yZ2FuaXphdGlvbk9iamVjdHMobmV3VmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdSRUZFUkVOQ0UnOiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlU2VydmljZS5mZXRjaElEUmVmZXJlbmNlTWV0YURhdGEoQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkgPyBuZXdWYWx1ZSA6IFtuZXdWYWx1ZV0pO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ0NPREVTWVNURU0nOiB7XG4gICAgICAgICAgcmV0dXJuIG9mKHRoaXMuc3lzdGVtU2VydmljZS5nZXRDb2Rlc3lzdGVtKGZvcm1FbGVtZW50LmNvZGVzeXN0ZW0uaWQpLmVudHJpZXMuZmluZCgoZW50cnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBlbnRyeS5kZWZhdWx0cmVwcmVzZW50YXRpb24gPT09IG5ld1ZhbHVlO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIF9oYXNWYWx1ZShkYXRhLCBlbGVtZW50KSB7XG5cbiAgICAvLyBkaWZmZXIgYmV0d2VlbiBhcnJheSBvZiBTZWFyY2hGaWx0ZXJzIGFuZCBhIGZvcm0gZGF0YSBvYmplY3RcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ1RBQkxFJykge1xuICAgICAgICByZXR1cm4gISEoZGF0YS5maW5kKChmaWx0ZXIpID0+IGZpbHRlci5wcm9wZXJ0eS5zdGFydHNXaXRoKGVsZW1lbnQucW5hbWUpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISEoZGF0YS5maW5kKChmaWx0ZXIpID0+IGZpbHRlci5wcm9wZXJ0eSA9PT0gZWxlbWVudC5xbmFtZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGF0YS5oYXNPd25Qcm9wZXJ0eShlbGVtZW50Lm5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldFZhbHVlKHNjb3BlOiBGb3JtR2VuU2NvcGUsIGRhdGEsIGVsZW1lbnQpIHtcblxuICAgIGxldCB2YWx1ZTtcbiAgICBpZiAoc2NvcGUuZm9ybU9wdGlvbnMuZm9ybU1vZGVsLnNpdHVhdGlvbiA9PT0gJ1NFQVJDSCcpIHtcbiAgICAgIGlmIChzY29wZS5pc0lubmVyVGFibGVGb3JtKSB7XG4gICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdEQVRFVElNRScgfHwgZWxlbWVudC50eXBlID09PSAnTlVNQkVSJykge1xuICAgICAgICAgIHZhbHVlID0gU2VhcmNoU2VydmljZS50b1JhbmdlVmFsdWUoZGF0YVtlbGVtZW50Lm5hbWVdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IGRhdGFbZWxlbWVudC5uYW1lXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnR5cGUgPT09ICdUQUJMRScpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLnNlYXJjaFNlcnZpY2UudGFibGVGaWx0ZXJzVG9FbGVtZW50VmFsdWUodGhpcy5fZ2V0VGFibGVGaWx0ZXJzKGRhdGEsIGVsZW1lbnQucW5hbWUpLCBlbGVtZW50LmVsZW1lbnRzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IGRhdGEuZmluZChmID0+IGYucHJvcGVydHkgPT09IGVsZW1lbnQucW5hbWUpO1xuICAgICAgICB2YWx1ZSA9IHRoaXMuc2VhcmNoU2VydmljZS5maWx0ZXJUb0VsZW1lbnRWYWx1ZShmaWx0ZXIsIGVsZW1lbnQudHlwZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcblxuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ0RBVEVUSU1FJyAmJiBkYXRhW2VsZW1lbnQubmFtZV0pIHtcbiAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZShgJHtkYXRhW2VsZW1lbnQubmFtZV19JHsodHlwZW9mIGRhdGFbZWxlbWVudC5uYW1lXSA9PT0gJ3N0cmluZycgPyBkYXRhW2VsZW1lbnQubmFtZV0uaW5kZXhPZignVCcpIDogZGF0YVtlbGVtZW50Lm5hbWVdLnRvSVNPU3RyaW5nKCkuaW5kZXhPZignVCcpKSAhPT0gLTEgPyAnJyA6ICdUMDA6MDA6MDAnfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBkYXRhW2VsZW1lbnQubmFtZV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFRhYmxlRmlsdGVycyhmaWx0ZXJzOiBTZWFyY2hGaWx0ZXJbXSwgcHJvcGVydHlOYW1lOiBzdHJpbmcpOiBTZWFyY2hGaWx0ZXJbXSB7XG4gICAgcmV0dXJuIGZpbHRlcnMuZmlsdGVyKGYgPT4gZi5wcm9wZXJ0eS5zdGFydHNXaXRoKHByb3BlcnR5TmFtZSArICcuJykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdFZhbGlkYXRvcnMoZm9ybUNvbnRyb2w6IE9iamVjdEZvcm1Hcm91cCwgc2NvcGU6IEZvcm1HZW5TY29wZSkge1xuICAgIGlmIChmb3JtQ29udHJvbCkge1xuICAgICAgZm9yIChsZXQga2V5IGluIGZvcm1Db250cm9sLmNvbnRyb2xzKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtQ29udHJvbC5jb250cm9sc1trZXldIGFzIGFueTtcbiAgICAgICAgaWYgKGNvbnRyb2wuY29udHJvbHMpIHtcbiAgICAgICAgICB0aGlzLl9pbml0VmFsaWRhdG9ycyhjb250cm9sLCBzY29wZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2NvcGUuaW5pdGlhbFZhbGlkYXRvcnNbY29udHJvbC5fZW9Gb3JtRWxlbWVudC5uYW1lXSA9IGNvbnRyb2wudmFsaWRhdG9yO1xuICAgICAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLmNvbXBvc2UoXG4gICAgICAgICAgICB0aGlzLl9nZXRWYWxpZGF0b3JzKHNjb3BlLCBjb250cm9sLl9lb0Zvcm1FbGVtZW50KS5jb25jYXQoXG4gICAgICAgICAgICAgIFtzY29wZS5pbml0aWFsVmFsaWRhdG9yc1tjb250cm9sLl9lb0Zvcm1FbGVtZW50Lm5hbWVdXSlcbiAgICAgICAgICApKTtcbiAgICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAqIEJ1aWxkIHZhbGlkYXRvcnMgZm9yIHRoZSBnaXZlbiBmb3JtIGVsZW1lbnQgdG8gYmUgYXR0YWNoZWQgdG9cbiAgKiBhIHJlYWN0aXZlIGZvcm1Db250cm9sLlxuICAqXG4gICogQHBhcmFtIGZvcm1FbGVtZW50IC0gZm9ybSBlbGVtZW50IG9iamVjdFxuICAqL1xuICBwcml2YXRlIF9nZXRWYWxpZGF0b3JzKHNjb3BlOiBGb3JtR2VuU2NvcGUsIGZvcm1FbGVtZW50OiBhbnkpOiBWYWxpZGF0b3JGbltdIHtcbiAgICBsZXQgZWxtVmFsaWRhdG9ycyA9IEZvcm1WYWxpZGF0aW9uLmdldFZhbGlkYXRvcnMoZm9ybUVsZW1lbnQsIHNjb3BlLmZvcm1PcHRpb25zLmZvcm1Nb2RlbC5zaXR1YXRpb24pO1xuICAgIC8vIGFkZCBjdXN0b20gdmFsaWRhdG9yIGZvciBzY3JpcHQgZW5hYmxlZCBmb3Jtc1xuICAgIGlmIChzY29wZS5mb3JtR2VuUmVzdWx0LnNjcmlwdGluZ1Njb3BlKSB7XG4gICAgICBlbG1WYWxpZGF0b3JzLnB1c2goRm9ybVZhbGlkYXRpb24uY3VzdG9tU2NyaXB0aW5nVmFsaWRhdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsbVZhbGlkYXRvcnM7XG4gIH1cblxuICBwcml2YXRlIF9pbml0U2NyaXB0aW5nU2NvcGUoc2NvcGU6IEZvcm1HZW5TY29wZSwgZm9ybVNjcmlwdFNlcnZpY2U6IE9iamVjdEZvcm1TY3JpcHRTZXJ2aWNlKSB7XG4gICAgbGV0IHtkYXRhLCBhY3Rpb25zLCBvYmplY3RzLCBjb250ZXh0fSA9IDxPYmplY3RGb3JtT3B0aW9ucz4oc2NvcGUuZm9ybU9wdGlvbnMgfHwge30pO1xuXG4gICAgaWYgKHNjb3BlLmZvcm1HZW5SZXN1bHQuc2NyaXB0aW5nU2NvcGUpIHtcbiAgICAgIHNjb3BlLmZvcm1HZW5SZXN1bHQuc2NyaXB0aW5nU2NvcGUuc2V0TW9kZWwoc2NvcGUuZm9ybUdlblJlc3VsdC5zY3JpcHRNb2RlbCk7XG4gICAgICAvKiogcHJvdmlkZSBhY2Nlc3MgdG8gYWN0aW9ucyAodXNlZCBpbnNpZGUgb2YgQlBNLUZvcm1zKSAqL1xuICAgICAgc2NvcGUuZm9ybUdlblJlc3VsdC5zY3JpcHRpbmdTY29wZS5hY3Rpb25zID0gYWN0aW9ucztcbiAgICAgIC8qKiBwcm92aWRlIGFjY2VzcyB0byBhZGRpdGlvbmFsIG9iamVjdHMgKHVzZWQgZm9yIGV4YW1wbGUgaW4gQlBNLVN0YXJ0LUZvcm1zIHRvXG4gICAgICAgKiBhZGQgZGF0YSBvZiBETVMtT2JqZWN0cyB0byBzdGFydCB0aGUgcHJvY2VzcyBmb3IpXG4gICAgICAgKi9cbiAgICAgIHNjb3BlLmZvcm1HZW5SZXN1bHQuc2NyaXB0aW5nU2NvcGUub2JqZWN0cyA9IG9iamVjdHM7XG4gICAgICBzY29wZS5mb3JtR2VuUmVzdWx0LnNjcmlwdGluZ1Njb3BlLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgLyoqIHByb3ZpZGUgcmVhZG9ubHkgYWNjZXNzIHRvIGluaXRpYWwgZm9ybSBkYXRhICh3aGljaCBtYXkgYWxzbyBjb250YWluIHZhbHVlcyB0aGF0XG4gICAgICAgKiBhcmUgbm90IHJlbmRlcmVkIGFzIGZvcm0gZWxlbWVudHMgKGludmlzaWJsZSB2YWx1ZXMpKVxuICAgICAgICovXG4gICAgICBzY29wZS5mb3JtR2VuUmVzdWx0LnNjcmlwdGluZ1Njb3BlLmRhdGEgPSBkYXRhO1xuXG4gICAgICAvKiogYnkgZGVmYXVsdCwgc2NyaXB0aW5nIHNjb3BlcyBhcmUgYXBwbGllZCB0byBmb3Jtcy4gQnV0IHRhYmxlIGVsZW1lbnRzIGNyZWF0ZSB0aGVpciBvd24gc2NvcGVcbiAgICAgICAqIGZvciBlZGl0aW5nIHJvd3MuIEJlaW5nIG9uZSBvZiB0aG9zZSBpbm5lciBmb3JtcyBzaG91bGQgbm90IHJ1biB0aGUgZm9ybSBzY3JpcHQgYWdhaW4sIGJ1dFxuICAgICAgICogaW5zdGVhZCBqdXN0IHByb3ZpZGUgdGhlIG9ic2VydmluZyBhYmlsaXRpZXMgb2YgdGhlIHNjcmlwdGluZyBzY29wZS5cbiAgICAgICAqL1xuICAgICAgaWYgKCFzY29wZS5mb3JtT3B0aW9ucy5kaXNhYmxlZCAmJiAhc2NvcGUuaXNJbm5lclRhYmxlRm9ybSAmJiBzY29wZS5mb3JtR2VuUmVzdWx0LmZvcm1Nb2RlbCkge1xuICAgICAgICBjb25zdCBzY3JpcHROYW1lID0gc2NvcGUuZm9ybUdlblJlc3VsdC5mb3JtTW9kZWwubmFtZSArICdfJyArIHNjb3BlLmZvcm1HZW5SZXN1bHQuZm9ybU1vZGVsLnNpdHVhdGlvbjtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ2V4ZWN1dGluZyBmb3JtIHNjcmlwdCAnICsgc2NyaXB0TmFtZSk7XG4gICAgICAgIGZvcm1TY3JpcHRTZXJ2aWNlLnJ1bkZvcm1TY3JpcHQoXG4gICAgICAgICAgc2NvcGUuZm9ybUdlblJlc3VsdC5zY3JpcHRpbmdTY29wZSxcbiAgICAgICAgICBzY29wZS5mb3JtR2VuUmVzdWx0LmZvcm1Nb2RlbC5zY3JpcHQsXG4gICAgICAgICAgc2NyaXB0TmFtZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGVhY2ggdGltZSB0aGUgc2NyaXB0IGNoYW5nZXMgaXRzIGludGVybmFsIG1vZGVsLlxuICAgICAqIEl0IGlzIHVzZWQgdG8gdHJhbnNmZXIgdGhlIHNjcmlwdCBjaGFuZ2VzIHRvIHRoZSBhY3R1YWwgZm9ybSBtb2RlbC5cbiAgICAgKlxuICAgICAqIFRvIGVuc3VyZSB0aGUgcmlnaHQgY29udGV4dCwgd2UgZGVmaW5lIGFuIGluc3RhbmNlIG1ldGhvZCBhcyBjYWxsYmFjayBmb3IgdGhlIHNjcmlwdGluZyBzY29wZVxuICAgICAqIEBzZWU6IGh0dHBzOi8vYmxvZy5qb2hubnlyZWlsbHkuY29tLzIwMTQvMDQvdHlwZXNjcmlwdC1pbnN0YW5jZS1tZXRob2RzLmh0bWxcbiAgICAgKlxuICAgICAqIEBwYXJhbSBmb3JtQ29udHJvbE5hbWVcbiAgICAgKiBAcGFyYW0gY2hhbmdlXG4gICAgICovXG5cbiAgcHJpdmF0ZSBfZ2V0U2NyaXB0aW5nTW9kZWxDaGFuZ2VkKHNjb3BlOiBGb3JtR2VuU2NvcGUpOiBGdW5jdGlvbiB7XG4gICAgcmV0dXJuIChmb3JtQ29udHJvbE5hbWUsIGNoYW5nZSkgPT4ge1xuXG4gICAgICAvLyBmaW5kIHRoZSB0YXJnZXQgY29udHJvbFxuICAgICAgbGV0IGZjOiBPYmplY3RGb3JtQ29udHJvbCA9IHNjb3BlLmZvcm1HZW5SZXN1bHQuZm9ybUNvbnRyb2xzW2Zvcm1Db250cm9sTmFtZV0gYXMgT2JqZWN0Rm9ybUNvbnRyb2w7XG4gICAgICBpZiAoZmMpIHtcblxuICAgICAgICAvLyBjaGFuZ2Ugb25seSBhbGxvd2VkIHByb3BlcnRpZXNcbiAgICAgICAgc3dpdGNoIChjaGFuZ2UubmFtZSkge1xuICAgICAgICAgIGNhc2UgJ3ZhbHVlJzoge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hhbmdlLm5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzQXJyYXlWYWx1ZUNoYW5nZShmYywgY2hhbmdlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZjLl9lb0Zvcm1FbGVtZW50LnZhbHVlID0gY2hhbmdlLm5ld1ZhbHVlO1xuICAgICAgICAgICAgICBpZiAoZmMudmFsdWUgIT09IGNoYW5nZS5uZXdWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGZjLnBhdGNoVmFsdWUoY2hhbmdlLm5ld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICBmYy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgICAgICAgICAgZmMubWFya0FzRGlydHkoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2NvcGUuZm9ybUdlblJlc3VsdC5mb3JtLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAncmVxdWlyZWQnOiB7XG4gICAgICAgICAgICBpZiAoZmMuX2VvRm9ybUVsZW1lbnQucmVxdWlyZWQgIT09IGNoYW5nZS5uZXdWYWx1ZSkge1xuICAgICAgICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC5yZXF1aXJlZCA9IGNoYW5nZS5uZXdWYWx1ZTtcbiAgICAgICAgICAgICAgLy8gYXBwbHkgbmV3IHZhbGlkYXRvcnNcbiAgICAgICAgICAgICAgLy8gQHNlZTogaHR0cHM6Ly9zY290Y2guaW8vdHV0b3JpYWxzL2hvdy10by1pbXBsZW1lbnQtY29uZGl0aW9uYWwtdmFsaWRhdGlvbi1pbi1hbmd1bGFyLTItbW9kZWwtZHJpdmVuLWZvcm1zXG4gICAgICAgICAgICAgIGZjLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5jb21wb3NlKHRoaXMuX2dldFZhbGlkYXRvcnMoc2NvcGUsIGZjLl9lb0Zvcm1FbGVtZW50KS5jb25jYXQoW3Njb3BlLmluaXRpYWxWYWxpZGF0b3JzW2ZjLl9lb0Zvcm1FbGVtZW50Lm5hbWVdXSkpKTtcbiAgICAgICAgICAgICAgLy8gbmVlZCB0byBtYXJrIGZvcm0gY29udHJvbCBhcyB0b3VjaGVkIGJlY2F1c2Ugb3RoZXJ3aXNlIGZvcm0gdmFsaWRhdGlvbiB3aWxsIG5vdCBzaG93XG4gICAgICAgICAgICAgIC8vIGVycm9yIG1lc3NhZ2VzXG4gICAgICAgICAgICAgIGZjLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgICAgICAgZmMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ3JlYWRvbmx5Jzoge1xuICAgICAgICAgICAgZmMuX2VvRm9ybUVsZW1lbnQucmVhZG9ubHkgPSBjaGFuZ2UubmV3VmFsdWU7XG4gICAgICAgICAgICBpZiAoY2hhbmdlLm5ld1ZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGZjLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZjLmVuYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgJ2Vycm9yJzoge1xuICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGZjLl9lb0Zvcm1FbGVtZW50LmVycm9yKSAhPT0gSlNPTi5zdHJpbmdpZnkoY2hhbmdlLm5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC5lcnJvciA9IGNoYW5nZS5uZXdWYWx1ZTtcbiAgICAgICAgICAgICAgZmMubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICAgICAgICBmYy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gbmV3IG9ucm93ZWRpdCBmdW5jdGlvbiB3YXMgYXBwbGllZCBieSB0aGUgc2NyaXB0XG4gICAgICAgICAgY2FzZSAnb25yb3dlZGl0Jzoge1xuICAgICAgICAgICAgZmMuX2VvRm9ybUVsZW1lbnQub25yb3dlZGl0ID0gY2hhbmdlLm5ld1ZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIG5ldyBvbmNoYW5nZSBmdW5jdGlvbiB3YXMgYXBwbGllZCBieSB0aGUgc2NyaXB0XG4gICAgICAgICAgY2FzZSAnb25jaGFuZ2UnOiB7XG4gICAgICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC5vbmNoYW5nZSA9IGNoYW5nZS5uZXdWYWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBuZXcgY29udGV4dElkIHdhcyBhcHBsaWVkIGJ5IHRoZSBzY3JpcHRcbiAgICAgICAgICBjYXNlICdjb250ZXh0SWQnOiB7XG4gICAgICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC5jb250ZXh0SWQgPSBjaGFuZ2UubmV3VmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gbmV3IGRlc2NyaXB0aW9uIHdhcyBhcHBsaWVkIGJ5IHRoZSBzY3JpcHRcbiAgICAgICAgICBjYXNlICdkZXNjcmlwdGlvbic6IHtcbiAgICAgICAgICAgIGZjLl9lb0Zvcm1FbGVtZW50LmRlc2NyaXB0aW9uID0gY2hhbmdlLm5ld1ZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcHJvY2Vzc0FycmF5VmFsdWVDaGFuZ2UoZmMsIGNoYW5nZSkge1xuICAgIGNvbnN0IG5ld1ZhbCA9IGNoYW5nZS5uZXdWYWx1ZTtcbiAgICBjb25zdCB0YXJnZXRUeXBlID0gZmMuX2VvRm9ybUVsZW1lbnQudHlwZTtcbiAgICAvLyBmb3Igc29tZSB0eXBlcyB3ZSBoYXZlIHRvIGVuc3VyZSB0aGF0IG1ldGEgZGF0YSBhcmUgcHJvdmlkZWQgYXMgd2VsbFxuICAgIHN3aXRjaCAodGFyZ2V0VHlwZSkge1xuICAgICAgY2FzZSAnT1JHQU5JWkFUSU9OJzoge1xuICAgICAgICB0aGlzLl9nZXREYXRhTWV0YShmYy5fZW9Gb3JtRWxlbWVudCwgbmV3VmFsKS5zdWJzY3JpYmUobSA9PiB7XG4gICAgICAgICAgZmMuX2VvRm9ybUVsZW1lbnQuZGF0YU1ldGEgPSBtO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdDT0RFU1lTVEVNJzoge1xuICAgICAgICBpZiAoIWZjLl9lb0Zvcm1FbGVtZW50LmNvZGVzeXN0ZW0uZW50cmllcykge1xuICAgICAgICAgIGZjLl9lb0Zvcm1FbGVtZW50LmNvZGVzeXN0ZW0gPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0Q29kZXN5c3RlbShmYy5fZW9Gb3JtRWxlbWVudC5jb2Rlc3lzdGVtLmlkKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ1RBQkxFJzoge1xuICAgICAgICBjb25zdCBkYXRhVG9CZVByb2Nlc3NlZCA9IHt9O1xuICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC5lbGVtZW50cy5mb3JFYWNoKGUgPT4ge1xuICAgICAgICAgIGlmIChlLnR5cGUgPT09ICdPUkdBTklaQVRJT04nIHx8IGUudHlwZSA9PT0gJ0NPREVTWVNURU0nKSB7XG4gICAgICAgICAgICBkYXRhVG9CZVByb2Nlc3NlZFtlLm5hbWVdID0gZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZGF0YVRvQmVQcm9jZXNzZWQpLmxlbmd0aCkge1xuICAgICAgICAgIGxldCBvYnMgPSBbXTtcbiAgICAgICAgICBuZXdWYWwuZm9yRWFjaChyb3dEYXRhID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHJvd0RhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgaWYgKGRhdGFUb0JlUHJvY2Vzc2VkW2tleV0pIHtcbiAgICAgICAgICAgICAgICBvYnMucHVzaCh0aGlzLl9nZXREYXRhTWV0YShkYXRhVG9CZVByb2Nlc3NlZFtrZXldLCByb3dEYXRhW2tleV0pLnBpcGUoXG4gICAgICAgICAgICAgICAgICB0YXAobSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgcm93RGF0YVtrZXkgKyAnX21ldGEnXSA9IG07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJvd0RhdGFba2V5ICsgJ19tZXRhJ107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGZvcmtKb2luKG9icykuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3VwZGF0ZUFycmF5VmFsdWUoZmMsIG5ld1ZhbCkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl91cGRhdGVBcnJheVZhbHVlKGZjLCBuZXdWYWwpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlQXJyYXlWYWx1ZShmYywgbmV3VmFsdWUpIHtcbiAgICBmYy5fZW9Gb3JtRWxlbWVudC52YWx1ZSA9IFtdLmNvbmNhdChuZXdWYWx1ZSk7XG4gICAgZmMucGF0Y2hWYWx1ZShbXS5jb25jYXQobmV3VmFsdWUpKTtcbiAgICBmYy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgZmMubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NsZWFyVGVtcG9yYXJ5U3RvcmFnZUVudHJpZXMoKSB7XG4gICAgdGhpcy5fZ2V0VGVtcG9yYXJ5U3RvcmFnZUVudHJpZXMoKS5mb3JFYWNoKGUgPT4gbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oZSkpO1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuVEVNUF9TVE9SQUdFX0VOVFJJRVNfS0VZKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFRlbXBvcmFyeVN0b3JhZ2VFbnRyaWVzKCk6IHN0cmluZ1tdIHtcbiAgICBsZXQgcmVzID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVudHJpZXM6IHN0cmluZ1tdID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlRFTVBfU1RPUkFHRV9FTlRSSUVTX0tFWSkpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZW50cmllcykpIHJlcyA9IGVudHJpZXM7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhlKVxuICAgIH1cbiAgICBjb25zb2xlLmRlYnVnKGBGb3VuZCAke3Jlcy5sZW5ndGh9IHRtcCBlbnRyaWVzIHRvIGJlIHJlbW92ZWRgKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG5cblxufVxuIl19
787
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0LWZvcm0taGVscGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS1oZWxwZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQWMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFTLFVBQVUsRUFBZ0IsYUFBYSxFQUFpQixLQUFLLEVBQWUsTUFBTSxjQUFjLENBQUM7QUFDakgsT0FBTyxFQUFDLGVBQWUsRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQzdFLE9BQU8sRUFBQyxZQUFZLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFLakQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLCtDQUErQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBQ25GLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUV0RSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSw4REFBOEQsQ0FBQzs7Ozs7QUF5QnRHLE1BQU0sT0FBTyx1QkFBdUI7SUFNbEMsWUFBb0IsTUFBYyxFQUN4QixnQkFBa0MsRUFDbEMsYUFBNEIsRUFDNUIsYUFBNkIsRUFDN0IsYUFBNEI7UUFKbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUN4QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGtC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QyxDQUFDLENBQUMsQ0FBQztRQUM1RSxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFTywyQkFBMkI7UUFDakMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxPQUFPLEdBQWEsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7WUFDMUYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztnQkFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDO1FBQzVDLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNsQixDQUFDO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxNQUFNLDRCQUE0QixDQUFDLENBQUM7UUFDL0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDOzhHQXYwQlUsdUJBQXVCO2tIQUF2Qix1QkFBdUI7OzJGQUF2Qix1QkFBdUI7a0JBRG5DLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RhdGVQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VmFsaWRhdG9yRm4sIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7TG9nZ2VyLCBSYW5nZVZhbHVlLCBTZWFyY2hGaWx0ZXIsIFNlYXJjaFNlcnZpY2UsIFN5c3RlbVNlcnZpY2UsIFV0aWxzLCBTZWFyY2hQYXJhbXN9IGZyb20gJ0Blby1zZGsvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1BsdWdpbnNTZXJ2aWNlfSBmcm9tICcuLi8uLi9lby1mcmFtZXdvcmstY29yZS9hcGkvcGx1Z2lucy5zZXJ2aWNlJztcbmltcG9ydCB7UmVmZXJlbmNlU2VydmljZX0gZnJvbSAnLi4vLi4vZW8tZnJhbWV3b3JrLWNvcmUvcmVmZXJlbmNlcy9yZWZlcmVuY2Uuc2VydmljZSc7XG5pbXBvcnQge09iamVjdEZvcm1PcHRpb25zfSBmcm9tICcuL29iamVjdC1mb3JtLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB7Rm9ybVZhbGlkYXRpb259IGZyb20gJy4vb2JqZWN0LWZvcm0vZm9ybS12YWxpZGF0aW9uL2Zvcm0tdmFsaWRhdGlvbic7XG5pbXBvcnQge09iamVjdEZvcm1Db250cm9sfSBmcm9tICcuL29iamVjdC1mb3JtL29iamVjdC1mb3JtLWNvbnRyb2wnO1xuaW1wb3J0IHtPYmplY3RGb3JtQ29udHJvbFdyYXBwZXJ9IGZyb20gJy4vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0tY29udHJvbC13cmFwcGVyJztcbmltcG9ydCB7T2JqZWN0Rm9ybUdyb3VwfSBmcm9tICcuL29iamVjdC1mb3JtL29iamVjdC1mb3JtLWdyb3VwLm1vZGVsJztcbmltcG9ydCB7T2JqZWN0Rm9ybVNjcmlwdFNlcnZpY2V9IGZyb20gJy4vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0tc2NyaXB0L29iamVjdC1mb3JtLXNjcmlwdC5zZXJ2aWNlJztcbmltcG9ydCB7T2JqZWN0Rm9ybVNjcmlwdGluZ1Njb3BlfSBmcm9tICcuL29iamVjdC1mb3JtL29iamVjdC1mb3JtLXNjcmlwdC9vYmplY3QtZm9ybS1zY3JpcHRpbmctc2NvcGUnO1xuaW1wb3J0IHtPYmplY3RGb3JtTW9kZWx9IGZyb20gJy4vb2JqZWN0LWZvcm0vb2JqZWN0LWZvcm0ubW9kZWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1HZW5TY29wZSB7XG4gIGdDb3VudDogbnVtYmVyO1xuICBmb3JtT3B0aW9uczogT2JqZWN0Rm9ybU9wdGlvbnM7XG4gIGlzSW5uZXJUYWJsZUZvcm06IGJvb2xlYW47XG4gIGluaXRpYWxWYWxpZGF0b3JzOiB7W25hbWU6IHN0cmluZ106IFZhbGlkYXRvckZuIHwgbnVsbH07XG4gIGZvcm1HZW5SZXN1bHQ6IEZvcm1HZW5SZXN1bHQ7XG59XG5leHBvcnQgaW50ZXJmYWNlIEZvcm1HZW5SZXN1bHQge1xuICAvLyBGb3JtIGNvbnRyb2xzIGdlbmVyYXRlZCBmcm9tIHRoZSBtb2RlbCBhcyAnUXVpY2sgYWNjZXNzIG9iamVjdCdcbiAgLy8gRm9ybSBlbGVtZW50cyBuYW1lIGlzIGtleSBhbmQgdGhlIHZhbHVlIGlzIHRoZSBmb3JtIGNvbnRyb2wgaXRzZWxmXG4gIGZvcm1Db250cm9sczoge1tuYW1lOiBzdHJpbmddOiBPYmplY3RGb3JtQ29udHJvbH07XG4gIGZvcm1Nb2RlbDogYW55LFxuICAvLyBTdWJzY3JpcHRpb25zIHRvIHZhbHVlIGNoYW5nZXMgb2YgdGhlIGdlbmVyYXRlZCBmb3JtIGNvbnRyb2xzXG4gIC8vIFlvdSBzaG91bGQgYWx3YXlzIHVuc3Vic2NyaWJlIGZyb20gYWxsIG9mIHRoZW0gd2hlbiBjb25zdW1pbmdcbiAgLy8gY29tcG9uZW50IGlzIGRlc3Ryb3llZFxuICBjb250cm9sVmFsdWVTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXTtcbiAgc2NyaXB0aW5nU2NvcGU6IE9iamVjdEZvcm1TY3JpcHRpbmdTY29wZTtcbiAgc2NyaXB0TW9kZWw6IHtbbmFtZTogc3RyaW5nXTogYW55fTtcbiAgZm9ybTogT2JqZWN0Rm9ybUdyb3VwO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT2JqZWN0Rm9ybUhlbHBlclNlcnZpY2Uge1xuXG4gIHByaXZhdGUgZGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUoJ2VuJyk7XG4gIHByaXZhdGUgVEVNUF9TVE9SQUdFX0VOVFJJRVNfS0VZID0gJ2VvLmNtcC5vYmplY3Rmb3JtLnRtcHN0b3JhZ2UuZW50cmllcyc7XG4gIHByaXZhdGUgX2xhdGVzdEZvcm1FbGVtZW50Q2hhbmdlczogQmVoYXZpb3JTdWJqZWN0PFNlYXJjaFBhcmFtcz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlYXJjaFBhcmFtcz4oe30pO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9nZ2VyOiBMb2dnZXIsXG4gICAgcHJpdmF0ZSByZWZlcmVuY2VTZXJ2aWNlOiBSZWZlcmVuY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VhcmNoU2VydmljZTogU2VhcmNoU2VydmljZSxcbiAgICBwcml2YXRlIHBsdWdpblNlcnZpY2U6IFBsdWdpbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3lzdGVtU2VydmljZTogU3lzdGVtU2VydmljZSkge1xuICAgIHRoaXMuX2NsZWFyVGVtcG9yYXJ5U3RvcmFnZUVudHJpZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXR0ZXIgZm9yIHJldHJpZXZpbmcgdGhlIGxhdGVzdCBmb3JtIGVsZW1lbnQgY2hhbmdlcyBhcyBhbiBvYnNlcnZhYmxlLlxuICAgKlxuICAgKiBUaGlzIGdldHRlciByZXR1cm5zIGFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgbGF0ZXN0IGNoYW5nZXMgdG8gdGhlIGZvcm0gZWxlbWVudHMuXG4gICAqIEl0IGFsbG93cyBzdWJzY3JpYmVycyB0byByZWFjdCB0byBjaGFuZ2VzIGluIHRoZSBmb3JtIGVsZW1lbnRzIGluIHJlYWwtdGltZS5cbiAgICpcbiAgICogQHJldHVybnMge09ic2VydmFibGU8U2VhcmNoUGFyYW1zPn0gLSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSBsYXRlc3QgZm9ybSBlbGVtZW50IGNoYW5nZXMuXG4gICAqL1xuICBnZXQgbGF0ZXN0Rm9ybUVsZW1lbnRDaGFuZ2VzJCgpOiBPYnNlcnZhYmxlPFNlYXJjaFBhcmFtcz4ge1xuICAgIHJldHVybiB0aGlzLl9sYXRlc3RGb3JtRWxlbWVudENoYW5nZXMuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgcmVhY3RpdmUgZm9ybSBiYXNlZCBvbiBhIGZvcm0gbW9kZWwgdGhhdCBtYXkgYWxzbyBpbmNsdWRlIGZvcm0gc2NyaXB0cy5cbiAgICogQHBhcmFtIGZvcm1PcHRpb25zIGBPYmplY3RGb3JtT3B0aW9uc2AgZGVmaW5pbmcgdGhlIGZvcm1cbiAgICogQHBhcmFtIGZvcm1TY3JpcHRTZXJ2aWNlIEluc3RhbmNlIG9mIGEgYE9iamVjdEZvcm1TY3JpcHRTZXJ2aWNlYC4gVGhpcyBzZXJ2aWNlIGlzIHN1cHBvc2VkIHRvIGJlXG4gICAqIHNjb3BlZCB0byB0aGUgY29tcG9uZW50IHJlbmRlcmluZyB0aGUgZm9ybSAocHJvdmlkZXJzIGFycmF5IGluIGNvbXBvbmVudCBkZWNvcmF0b3IpLlxuICAgKiBAcGFyYW0gaXNJbm5lclRhYmxlRm9ybSB3aGV0aGVyIG9yIG5vdCB0aGUgZm9ybSBpcyBwYXJ0IG9mIGFub3RoZXIgZm9ybSAoYXMgaXMgd2l0aCB0YWJsZSBlZGl0IGZvcm1zKVxuICAgKiBAcmV0dXJucyBBbiBgRm9ybUdlblJlc3VsdGAgb2JqZWN0XG4gICAqL1xuICBidWlsZFJlYWN0aXZlRm9ybShcbiAgICBmb3JtT3B0aW9uczogT2JqZWN0Rm9ybU9wdGlvbnMsXG4gICAgZm9ybVNjcmlwdFNlcnZpY2U6IE9iamVjdEZvcm1TY3JpcHRTZXJ2aWNlLFxuICAgIGlzSW5uZXJUYWJsZUZvcm0/OiBib29sZWFuKTogRm9ybUdlblJlc3VsdCB7XG5cbiAgICBjb25zdCBfc2NvcGU6IEZvcm1HZW5TY29wZSA9IHtcbiAgICAgIGdDb3VudDogMCxcbiAgICAgIGZvcm1PcHRpb25zLFxuICAgICAgaXNJbm5lclRhYmxlRm9ybSxcbiAgICAgIGluaXRpYWxWYWxpZGF0b3JzOiB7fSxcbiAgICAgIGZvcm1HZW5SZXN1bHQ6IHtcbiAgICAgICAgZm9ybUNvbnRyb2xzOiB7fSxcbiAgICAgICAgZm9ybU1vZGVsOiB7fSxcbiAgICAgICAgY29udHJvbFZhbHVlU3Vic2NyaXB0aW9uczogW10sXG4gICAgICAgIHNjcmlwdGluZ1Njb3BlOiB1bmRlZmluZWQsXG4gICAgICAgIHNjcmlwdE1vZGVsOiB7fSxcbiAgICAgICAgZm9ybTogbnVsbFxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGZvcm1Nb2RlbCA9IHRoaXMuX2RhdGFUb0Zvcm0oX3Njb3BlLCBmb3JtT3B0aW9ucy5mb3JtTW9kZWwsIGZvcm1PcHRpb25zLmRhdGEpO1xuICAgIF9zY29wZS5mb3JtR2VuUmVzdWx0LmZvcm1Nb2RlbCA9IGZvcm1Nb2RlbDtcbiAgICBpZiAoIWZvcm1Nb2RlbCkgcmV0dXJuO1xuXG4gICAgLy8gaWYgYSBzY3JpcHQgaXMgYXZhaWxhYmxlLCB3ZSdsbCBpbml0IHRoZSBmb3JtIHNjcmlwdGluZyBmb3IgdGhlXG4gICAgLy8gY3VycmVudCBmb3JtXG4gICAgbGV0IHNjcmlwdGluZ1Njb3BlOiBPYmplY3RGb3JtU2NyaXB0aW5nU2NvcGU7XG4gICAgaWYgKF9zY29wZS5pc0lubmVyVGFibGVGb3JtIHx8IChmb3JtTW9kZWwuc2NyaXB0ICYmIGZvcm1Nb2RlbC5zY3JpcHQubGVuZ3RoID4gMCkpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdhZGRpbmcgZm9ybSBzY3JpcHRpbmcgc2NvcGUnKTtcbiAgICAgIHNjcmlwdGluZ1Njb3BlID0gbmV3IE9iamVjdEZvcm1TY3JpcHRpbmdTY29wZShcbiAgICAgICAgZm9ybU1vZGVsLnNpdHVhdGlvbixcbiAgICAgICAgdGhpcy5fZ2V0U2NyaXB0aW5nTW9kZWxDaGFuZ2VkKF9zY29wZSksXG4gICAgICAgIHRoaXMucGx1Z2luU2VydmljZS5nZXRBcGkoKSxcbiAgICAgICAgX3Njb3BlLmlzSW5uZXJUYWJsZUZvcm1cbiAgICAgICk7XG4gICAgICBzY3JpcHRpbmdTY29wZS5vYmplY3RJZCA9IGZvcm1PcHRpb25zLm9iamVjdElkO1xuICAgIH1cbiAgICBfc2NvcGUuZm9ybUdlblJlc3VsdC5zY3JpcHRpbmdTY29wZSA9IHNjcmlwdGluZ1Njb3BlO1xuXG5cbiAgICBsZXQgZm9ybSA9IG5ldyBPYmplY3RGb3JtR3JvdXAoe30pO1xuICAgIGlmIChmb3JtTW9kZWwuZWxlbWVudHNbMF0gJiYgZm9ybU1vZGVsLmVsZW1lbnRzWzBdLmVsZW1lbnRzKSB7XG4gICAgICB0aGlzLl9hZGRGb3JtQ29udHJvbChfc2NvcGUsIGZvcm0sIGZvcm1Nb2RlbC5lbGVtZW50c1swXSwgJ2NvcmUnKTtcbiAgICB9XG4gICAgaWYgKGZvcm1Nb2RlbC5lbGVtZW50c1sxXSAmJiBmb3JtTW9kZWwuZWxlbWVudHNbMV0uZWxlbWVudHMpIHtcbiAgICAgIHRoaXMuX2FkZEZvcm1Db250cm9sKF9zY29wZSwgZm9ybSwgZm9ybU1vZGVsLmVsZW1lbnRzWzFdLCAnZGF0YScpO1xuICAgIH1cbiAgICBfc2NvcGUuZm9ybUdlblJlc3VsdC5mb3JtID0gZm9ybTtcbiAgICB0aGlzLl9pbml0VmFsaWRhdG9ycyhfc2NvcGUuZm9ybUdlblJlc3VsdC5mb3JtLCBfc2NvcGUpO1xuICAgIHRoaXMuX2luaXRTY3JpcHRpbmdTY29wZShfc2NvcGUsIGZvcm1TY3JpcHRTZXJ2aWNlKTtcbiAgICByZXR1cm4gX3Njb3BlLmZvcm1HZW5SZXN1bHQ7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgZm9ybSBlbGVtZW50IG9iamVjdCB0byBhbiBPYmplY3RGb3JtQ29udHJvbFdyYXBwZXIgd2hpY2ggdGhlbiBjYW4gYmUgdXNlZCB0b1xuICAgKiByZW5kZXIgYSBmcm9tIGNvbnRyb2wuIFJlc3VsdCBjYW4gYmUgdXNlZCBhcyBpbnB1dCBmb3IgRm9ybUVsZW1lbnRDb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBlbGVtZW50IC0gdGhlIGVsZW1lbnQgb2JqZWN0IG9yIGEganNvbiBzdHJpbmdcbiAgICogQHBhcmFtIHNpdHVhdGlvbiAtIG9wdGlvbmFsIHByb3BlcnR5IHRvIHNldCB1cCBhIGZvcm0gc2l0dWF0aW9uIGZvciB0aGUgY29udHJvbCAoZGVmYXVsdCBpcyBFRElUKVxuICAgKiBAcmV0dXJuIHRoZSBjb252ZXJ0ZWQgT2JqZWN0Rm9ybUNvbnRyb2xXcmFwcGVyIG9yIG51bGwgaW4gY2FzZSBvZiBhbiBlcnJvclxuICAgKi9cbiAgZWxlbWVudFRvRm9ybUNvbnRyb2woZWxlbWVudDogYW55LCBzaXR1YXRpb24/OiBzdHJpbmcpOiBPYmplY3RGb3JtQ29udHJvbFdyYXBwZXIge1xuXG4gICAgbGV0IGZvcm1FbGVtZW50O1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvcm1FbGVtZW50ID0gSlNPTi5wYXJzZShlbGVtZW50KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBwYXJzZSBmb3JtIGVsZW1lbnQgZnJvbSBqc29uICcsIGZvcm1FbGVtZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9ybUVsZW1lbnQgPSBlbGVtZW50O1xuICAgIH1cblxuICAgIGlmICghZm9ybUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSB0aGUgT2JqZWN0Rm9ybUNvbnRyb2xXcmFwcGVyXG4gICAgbGV0IHdyYXBwZXIgPSBuZXcgT2JqZWN0Rm9ybUNvbnRyb2xXcmFwcGVyKHt9KTtcbiAgICBsZXQgZm9ybVNpdHVhdGlvbiA9IHNpdHVhdGlvbiA/IHNpdHVhdGlvbiA6ICdFRElUJztcblxuICAgIHdyYXBwZXIuX2VvRm9ybUNvbnRyb2xXcmFwcGVyID0ge1xuICAgICAgY29udHJvbE5hbWU6IGZvcm1FbGVtZW50Lm5hbWUsXG4gICAgICBzaXR1YXRpb246IGZvcm1TaXR1YXRpb25cbiAgICB9O1xuXG4gICAgLy8gZm9yIGNvZGVzeXN0ZW0gZWxlbWVudHMgYWRkIGVudHJpZXMgaWYgbm90IHlldCBwcm92aWRlZFxuICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnQ09ERVNZU1RFTScgJiYgKCFmb3JtRWxlbWVudC5jb2Rlc3lzdGVtIHx8ICFmb3JtRWxlbWVudC5jb2Rlc3lzdGVtLmVudHJpZXMpKSB7XG4gICAgICBmb3JtRWxlbWVudC5jb2Rlc3lzdGVtID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldENvZGVzeXN0ZW0oZm9ybUVsZW1lbnQuY29kZXN5c3RlbS5pZCk7XG4gICAgfVxuICAgIC8vIGNyZWF0ZSB0aGUgYWN0dWFsIGZvcm0gY29udHJvbFxuICAgIGxldCBjb250cm9sRGlzYWJsZWQgPSAhIWZvcm1FbGVtZW50LnJlYWRvbmx5O1xuICAgIGxldCBmb3JtQ29udHJvbCA9IG5ldyBPYmplY3RGb3JtQ29udHJvbCh7XG4gICAgICB2YWx1ZTogZm9ybUVsZW1lbnQudmFsdWUsXG4gICAgICBkaXNhYmxlZDogY29udHJvbERpc2FibGVkXG4gICAgfSwgRm9ybVZhbGlkYXRpb24uZ2V0VmFsaWRhdG9ycyhmb3JtRWxlbWVudCwgZm9ybVNpdHVhdGlvbikpO1xuXG4gICAgLy8gRm9ybSBlbGVtZW50cyBpbiBTRUFSQ0ggc2l0dWF0aW9uIG1heSBhcnJpdmUgd2l0aCBhIHZhbHVlIHNldCB0byBOVUxMIChleHBsaWNpdCBzZWFyY2ggZm9yXG4gICAgLy8gZmllbGRzIHRoYXQgYXJlIE5PVCBzZXQpLiBJbiB0aGF0IGNhc2Ugd2UgbmVlZCB0byBwcmVwYXJlIHRoZSBmb3JtIGNvbnRyb2xcbiAgICBpZiAoZm9ybVNpdHVhdGlvbiA9PT0gJ1NFQVJDSCcgJiYgZm9ybUVsZW1lbnQudmFsdWUgPT09IG51bGwpIHtcbiAgICAgIGZvcm1FbGVtZW50LmlzTm90U2V0VmFsdWUgPSB0cnVlO1xuICAgIH1cblxuICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50ID0gZm9ybUVsZW1lbnQ7XG4gICAgd3JhcHBlci5hZGRDb250cm9sKGZvcm1FbGVtZW50Lm5hbWUsIGZvcm1Db250cm9sKTtcblxuICAgIHJldHVybiB3cmFwcGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgZGF0YSBmcm9tIGFuIG9iamVjdCBmb3JtIGJhc2VkIG9uIHNpdHVhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIGZvcm0gLSBmb3JtIHRvIGV4dHJhY3QgZGF0YSBmcm9tXG4gICAqIEBwYXJhbSBzaXR1YXRpb24gLSBmb3JtIHNpdHVhdGlvblxuICAgKiBAcGFyYW0gW2luaXRpYWxEYXRhXSAtIG9wdGlvbmFsIGZvcm0gZGF0YSB0byBtYXRjaCB0aGUgY3VycmVudCB2YWx1ZXMgYWdhaW5zdFxuICAgKiBUaGlzIGlzIHJlcXVpcmVkIGZvciBlZGl0aWcgaW5kZXhkYXRhIChFRElUIHNpdHVhdGlvbiksIGJlY2F1c2Ugd2UgaGF2ZSB0byBjb21wYXJlIG5ldyB2YWx1ZXNcbiAgICogYWdhaW5zdCB0aGUgaW5pdGlhbCB2YWx1ZXMuIElmIGEgcHJvcGVydHkgdGhhdCBpcyBjb250YWluZWQgaW4gdGhlIGZvcm1zIGluaXRpYWwgZGF0YSBpcyByZW1vdmVkXG4gICAqIChlLmcuIHNldCB0byBudWxsKSB0aGVuIHdlIGhhdmUgdG8gc2V0IHRoaXMgbnVsbCB2YWx1ZSwgYmVjYXVzZSBvdGhlcndpc2UgdGhlIHNlcnZlciB3b3VsZFxuICAgKiBpZ25vcmUgdGhlIGNoYW5nZXMuXG4gICAqIEBwYXJhbSBpc1RhYmxlUm93RWRpdEZvcm0gRmxhZyBpbmRpY2F0aW5nIHRoYXQgdGhlIHByb3ZpZGVkIGZvcm0gaXMgYW4gaW5saW5lIGZvcm0gdXNlZCBieVxuICAgKiBhIGZvcm1zIHRhYmxlIGVsZW1lbnQgZm9yIGVkaXRpbmcgcm93cy4gVGhvc2UgbmVlZCBhIHNwZWNpYWwgaGFuZGxpbmcuXG4gICAqIEByZXR1cm4gZXh0cmFjdGVkIGRhdGEgYXMgb2JqZWN0XG4gICAqL1xuICBleHRyYWN0Rm9ybURhdGEoZm9ybTogT2JqZWN0Rm9ybUdyb3VwLCBzaXR1YXRpb246IHN0cmluZywgaW5pdGlhbERhdGE/OiBhbnksIGlzVGFibGVSb3dFZGl0Rm9ybT86IGJvb2xlYW4pIHtcbiAgICBsZXQgZXh0cmFjdGVkRGF0YSA9IHt9O1xuICAgIHRoaXMuZ2V0RWxlbWVudFZhbHVlcyhleHRyYWN0ZWREYXRhLCBmb3JtLCBzaXR1YXRpb24gfHwgJ0VESVQnLCBpbml0aWFsRGF0YSwgaXNUYWJsZVJvd0VkaXRGb3JtKTtcbiAgICByZXR1cm4gZXh0cmFjdGVkRGF0YTtcbiAgfVxuXG4gIC8qKlxuICogQWRkIGEgcmVmZXJlbmNlIHRvIGEgdGVtcG9yYXJ5IGxvY2Fsc3RvcmFnZSBlbnRyeSB0aGF0IHNob3VsZCBiZSBjbGVhcmVkIHdoZW4gYVxuICogbmV3IGJyb3dzZXIgc2Vzc2lvbiBzdGFydHMuIEluIGNvbnRleHQgb2YgZm9ybXMgdGhpcyB3aWxsIGJlIHVzZWQgdG8gY2xlYW51cCB0aGVcbiAqIGxheW91dCBzdGF0ZSBvZiBmb3JtcyAoc2VsZWN0ZWQgdGFicyBldGMuKSB0aGF0IGFyZSBzdG9yZWQgbG9jYWxseSBidXQgc2hvdWxkIG9ubHlcbiAqIGJlIHBlc2lzdGVkIGZvciBvbmUgYnJvd3NlciBzZXNzaW9uLlxuICogQHBhcmFtIHN0b3JhZ2VLZXkgS2V5IG9mIHRoZSBsb2NhbHN0b3JhZ2UgaXRlbVxuICovXG4gIGFkZFRlbXBvcmFyeVN0b3JhZ2VFbnRyeShzdG9yYWdlS2V5OiBzdHJpbmcpIHtcbiAgICAvLyBlbnRyaWVzIHdpbGwgdGhlbXNlbHZlcyBiZSBzdG9yZWQgaW4gbG9jYWxzdG9yYWdlIHNvIHdlIGNhbiBjaGVjayBmb3IgZW50cmllc1xuICAgIC8vIHRvIGJlIHJlbW92ZWQgb25jZSB0aGUgYXBwbGljYXRpb24gc3RhcnRzXG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuX2dldFRlbXBvcmFyeVN0b3JhZ2VFbnRyaWVzKCk7XG4gICAgaWYgKCFjdXJyZW50LmluY2x1ZGVzKHN0b3JhZ2VLZXkpKVxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5URU1QX1NUT1JBR0VfRU5UUklFU19LRVksIEpTT04uc3RyaW5naWZ5KFsuLi5jdXJyZW50LCBzdG9yYWdlS2V5XSkpXG4gIH1cblxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBsYXRlc3QgZm9ybSBlbGVtZW50IGNoYW5nZXMgd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWUuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIG1lcmdlcyB0aGUgY3VycmVudCBmb3JtIGVsZW1lbnQgY2hhbmdlcyB3aXRoIHRoZSBuZXcgdmFsdWVcbiAgICogYW5kIGVtaXRzIHRoZSB1cGRhdGVkIGNoYW5nZXMgdG8gdGhlIGBfbGF0ZXN0Rm9ybUVsZW1lbnRDaGFuZ2VzYCBzdWJqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge1NlYXJjaFBhcmFtc30gdmFsdWUgLSBUaGUgbmV3IGZvcm0gZWxlbWVudCBjaGFuZ2VzIHRvIGJlIG1lcmdlZC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICB1cGRhdGVGb3JtRWxlbWVudENoYW5nZXModmFsdWU6IFNlYXJjaFBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRDaGFuZ2VzID0gdGhpcy5fbGF0ZXN0Rm9ybUVsZW1lbnRDaGFuZ2VzLnZhbHVlO1xuICAgIGNvbnN0IHVwZGF0ZWRDaGFuZ2VzID0gey4uLmN1cnJlbnRDaGFuZ2VzLCAuLi52YWx1ZX07XG4gICAgdGhpcy5fbGF0ZXN0Rm9ybUVsZW1lbnRDaGFuZ2VzLm5leHQodXBkYXRlZENoYW5nZXMpO1xuICB9XG5cbiAgLy8gUmVjdXJzaXZlIG1ldGhvZCB0byBnZXQgdGhlIHZhbHVlcyBmcm9tIGVhY2ggZm9ybSBjb250cm9sLlxuICBwcml2YXRlIGdldEVsZW1lbnRWYWx1ZXMoZGF0YTogYW55LCBmb3JtQ29udHJvbDogT2JqZWN0Rm9ybU1vZGVsLCBzaXR1YXRpb246IHN0cmluZywgaW5pdGlhbERhdGE/OiBhbnksIGlzVGFibGVSb3dFZGl0Rm9ybT86IGJvb2xlYW4pIHtcblxuICAgIGlmICghZm9ybUNvbnRyb2wgfHwgIWZvcm1Db250cm9sLmNvbnRyb2xzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZvcm1Db250cm9sIGluc3RhbmNlb2YgT2JqZWN0Rm9ybUNvbnRyb2xXcmFwcGVyKSB7XG5cbiAgICAgIGNvbnN0IGZjOiBhbnkgPSBmb3JtQ29udHJvbC5jb250cm9sc1tmb3JtQ29udHJvbC5fZW9Gb3JtQ29udHJvbFdyYXBwZXIuY29udHJvbE5hbWVdO1xuXG4gICAgICBpZiAoZmMuX2VvRm9ybUVsZW1lbnQuaXNOb3RTZXRWYWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAvLyBmb3JtIGVsZW1lbnRzIG1heSBleHBsaWNpdGx5IHNldCB0byBoYXZlIE5VTEwgdmFsdWUgKGUuZy4gZnJvbSBTZWFyY2ggZm9ybSBpZiB2YWx1ZXMgYXJlIHJlcXVlc3RlZCB0aGF0IGhhdmUgbm8gdmFsdWVzKVxuICAgICAgICBpZiAoaXNUYWJsZVJvd0VkaXRGb3JtKSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhVmFsdWUoZmMuX2VvRm9ybUVsZW1lbnQubmFtZSwgbnVsbCwgZGF0YSwgZmMuX2VvRm9ybUVsZW1lbnQsIGlzVGFibGVSb3dFZGl0Rm9ybSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXREYXRhVmFsdWUoZmMuX2VvRm9ybUVsZW1lbnQucW5hbWUsIG51bGwsIGRhdGEsIGZjLl9lb0Zvcm1FbGVtZW50LCBpc1RhYmxlUm93RWRpdEZvcm0pO1xuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSBpZiAoZmMudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgdmFsID0gZmMudmFsdWU7XG5cbiAgICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgbWV0YSBkYXRhIGFyZSBhbHNvIHVwIHRvIGRhdGVcbiAgICAgICAgaWYgKGZjLl9lb0Zvcm1FbGVtZW50LnR5cGUgPT09ICdDT0RFU1lTVEVNJykge1xuICAgICAgICAgIGNvbnN0IGNzID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldENvZGVzeXN0ZW0oZmMuX2VvRm9ybUVsZW1lbnQuY29kZXN5c3RlbS5pZCk7XG4gICAgICAgICAgZmMuX2VvRm9ybUVsZW1lbnQuZGF0YU1ldGEgPSBjcy5lbnRyaWVzLmZpbmQoZSA9PiBlLmRhdGEgPT09IHZhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHNpdHVhdGlvbikge1xuICAgICAgICAgIGNhc2UgJ1NFQVJDSCc6IHtcbiAgICAgICAgICAgIGlmICh2YWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gcm93IGVkaXRpbmcgZm9ybXMgdXNlIHRoZSBuYW1lIGluc3RlYWQgb2YgdGhlIHFuYW1lIGJlY2F1c2Ugb3RoZXJ3aXNlIHRoZVxuICAgICAgICAgICAgICAvLyB0YWJsZXMgZ3JpZCBpc24ndCBhYmxlIHRvIG1hcCB0aGUgZmllbGRzXG4gICAgICAgICAgICAgIGlmICghaXNUYWJsZVJvd0VkaXRGb3JtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhVmFsdWUoZmMuX2VvRm9ybUVsZW1lbnQucW5hbWUsIHZhbCwgZGF0YSwgZmMuX2VvRm9ybUVsZW1lbnQsIGlzVGFibGVSb3dFZGl0Rm9ybSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFWYWx1ZShmYy5fZW9Gb3JtRWxlbWVudC5uYW1lLCB2YWwsIGRhdGEsIGZjLl9lb0Zvcm1FbGVtZW50LCBpc1RhYmxlUm93RWRpdEZvcm0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdDUkVBVEUnOiB7XG4gICAgICAgICAgICAvLyBhbHNvIGFkZCBOVUxMIHZhbHVlcyAob3ZlcnJpZGUgZXhpc3RpbmcgZGVmYXVsdHZhbHVlcylcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0YVZhbHVlKGZjLl9lb0Zvcm1FbGVtZW50Lm5hbWUsIHZhbCwgZGF0YSwgZmMuX2VvRm9ybUVsZW1lbnQsIGlzVGFibGVSb3dFZGl0Rm9ybSlcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdFRElUJzoge1xuICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBjaGVjaywgaWYgdGhlIHZhbHVlcyBoYXZlIGJlZW4gY2hhbmdlZCBhbmQgc2tpcCBzZW5kaW5nIHRoZW0gdG8gdGhlIGJhY2tlbmQsIGlmIG5vdGhpbmcgaGFzIGNoYW5nZWRcbiAgICAgICAgICAgIC8vIHRoZSBkYXRldGltZSBmaWVsZHMgbmVlZCBzb21lIGV4dHJhIGxvZ2ljIHRvIG1ha2UgdGhlIGNvbXBhcmlzb24gd29ya1xuICAgICAgICAgICAgaWYgKCFpc1RhYmxlUm93RWRpdEZvcm0pIHtcbiAgICAgICAgICAgICAgaWYgKGluaXRpYWxEYXRhW2ZjLl9lb0Zvcm1FbGVtZW50Lm5hbWVdICYmIGZjLl9lb0Zvcm1FbGVtZW50LnR5cGUgPT09ICdEQVRFVElNRScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsKTtcbiAgICAgICAgICAgICAgICBpZiAoIWluaXRpYWxEYXRhW2ZjLl9lb0Zvcm1FbGVtZW50Lm5hbWVdLmluY2x1ZGVzKCdUJykpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGlzb0RhdGVXaXRob3V0VGltZSA9IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpIC0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDApLnRvSVNPU3RyaW5nKCkuc3BsaXQoJ1QnKVswXTtcbiAgICAgICAgICAgICAgICAgIGlmIChpc29EYXRlV2l0aG91dFRpbWUgPT09IGluaXRpYWxEYXRhW2ZjLl9lb0Zvcm1FbGVtZW50Lm5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZGF0ZS50b0lTT1N0cmluZygpID09PSBpbml0aWFsRGF0YVtmYy5fZW9Gb3JtRWxlbWVudC5uYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsID09PSBpbml0aWFsRGF0YVtmYy5fZW9Gb3JtRWxlbWVudC5uYW1lXSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBpbiBlZGl0IHNpdHVhdGlvbiB3ZSBoYXZlIHRvIGNvbXBhcmUgbmV3IHZhbHVlcyBhZ2FpbnN0IHRoZSBpbml0aWFsIHZhbHVlc1xuICAgICAgICAgICAgLy8gSWYgYSBwcm9wZXJ0eSB0aGF0IGlzIGNvbnRhaW5lZCBpbiB0aGUgZm9ybXMgaW5pdGlhbCBkYXRhIGlzIHJlbW92ZWQgKGUuZy4gc2V0IHRvIG51bGwpXG4gICAgICAgICAgICAvLyB0aGVuIHdlIGhhdmUgdG8gc2V0IHRoaXMgbnVsbCB2YWx1ZSwgYmVjYXVzZSBvdGhlcndpc2UgdGhlIHNlcnZlciB3aWxsIGlnbm9yZSB0aGUgY2hhbmdlc1xuICAgICAgICAgICAgaWYgKHZhbCAhPT0gbnVsbCB8fCAoaW5pdGlhbERhdGEgJiYgaW5pdGlhbERhdGFbZmMuX2VvRm9ybUVsZW1lbnQubmFtZV0gIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgICAgLy8gZGF0YVtmYy5fZW9Gb3JtRWxlbWVudC5uYW1lXSA9IHZhbDtcbiAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gbnVsbCAmJiBmYy5fZW9Gb3JtRWxlbWVudC5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YVZhbHVlKGZjLl9lb0Zvcm1FbGVtZW50Lm5hbWUsIFtdLCBkYXRhLCBmYy5fZW9Gb3JtRWxlbWVudCwgaXNUYWJsZVJvd0VkaXRGb3JtKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGFWYWx1ZShmYy5fZW9Gb3JtRWxlbWVudC5uYW1lLCB2YWwsIGRhdGEsIGZjLl9lb0Zvcm1FbGVtZW50LCBpc1RhYmxlUm93RWRpdEZvcm0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmtleXMoZm9ybUNvbnRyb2wuY29udHJvbHMpXG4gICAgICAgIC5mb3JFYWNoKGNvbnRyb2xLZXkgPT4ge1xuICAgICAgICAgIGxldCBmb3JtQ29udHJvbEtleWVkID0gPE9iamVjdEZvcm1Hcm91cD5mb3JtQ29udHJvbC5jb250cm9sc1tjb250cm9sS2V5XTtcbiAgICAgICAgICB0aGlzLmdldEVsZW1lbnRWYWx1ZXMoZGF0YSwgZm9ybUNvbnRyb2xLZXllZCwgc2l0dWF0aW9uLCBpbml0aWFsRGF0YSwgaXNUYWJsZVJvd0VkaXRGb3JtKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXREYXRhVmFsdWUoa2V5LCB2YWx1ZSwgZGF0YSwgZm9ybUVsZW1lbnQsIGlzVGFibGVSb3dFZGl0Rm9ybSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlWzBdKSkge1xuICAgICAgICBpZiAodiBpbnN0YW5jZW9mIFJhbmdlVmFsdWUgJiYgdi5vcGVyYXRvciA9PT0gJ21yJykge1xuICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHYgfHwgdiA9PT0gbnVsbCkge1xuICAgICAgICAgIGRhdGFba2V5XSA9IHRoaXMuZm9ybWF0VmFsdWUodmFsdWUsIGZvcm1FbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhW2tleV0gPSAodmFsdWUgaW5zdGFuY2VvZiBSYW5nZVZhbHVlICYmIHZhbHVlLm9wZXJhdG9yID09PSAnbXInKSA/IHZhbHVlIDogdGhpcy5mb3JtYXRWYWx1ZSh2YWx1ZSwgZm9ybUVsZW1lbnQpO1xuICAgIH1cbiAgICBpZiAoaXNUYWJsZVJvd0VkaXRGb3JtICYmIGZvcm1FbGVtZW50LmRhdGFNZXRhKSB7XG4gICAgICAvLyBpbm5lciB0YWJsZXMgbmVlZCB0byBzZXQgdXAgdGhlIG1ldGEgZGF0YSBhcyB3ZWxsXG4gICAgICBkYXRhW2tleSArICdfbWV0YSddID0gZm9ybUVsZW1lbnQuZGF0YU1ldGE7XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0VmFsdWUodmFsdWUsIGZvcm1FbGVtZW50KSB7XG4gICAgaWYgKGZvcm1FbGVtZW50LnR5cGUgPT09ICdEQVRFVElNRScgJiYgIWZvcm1FbGVtZW50LndpdGh0aW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCAodmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZS5nZXRUaW1lKCkpKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsICd5eXl5LU1NLWRkJyk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmFuZ2VWYWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFJhbmdlVmFsdWUoXG4gICAgICAgICAgdmFsdWUub3BlcmF0b3IsXG4gICAgICAgICAgdmFsdWUuZmlyc3RWYWx1ZSAmJiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZS5maXJzdFZhbHVlLCAneXl5eS1NTS1kZCcpLFxuICAgICAgICAgIHZhbHVlLnNlY29uZFZhbHVlICYmIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLnNlY29uZFZhbHVlLCAneXl5eS1NTS1kZCcpLFxuICAgICAgICAgIHZhbHVlPy51c2VOb3QsXG4gICAgICAgICAgdmFsdWU/LmFjdHVhbE9wZXJhdG9yXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZvcm1FbGVtZW50LnR5cGUgPT09ICdUQUJMRScpIHtcbiAgICAgIChmb3JtRWxlbWVudC5lbGVtZW50cyB8fCBbXSkuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICh2YWx1ZSB8fCBbXSkuZm9yRWFjaCh2ID0+IHZbZWwubmFtZV0gPSB0aGlzLmZvcm1hdFZhbHVlKHZbZWwubmFtZV0sIGVsKSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cblxuICAvLyBGdW5jdGlvbnMgaW52b2x2ZWQgaW4gYnVpbGRpbmcgYW4gb2JqZWN0IGZvcm1cblxuICAvKipcbiAgICogUmVjdXJzaXZlIG1ldGhvZCBhZGRpbmcgYSBuZXcgVW50eXBlZEZvcm1Db250cm9sIChncm91cCBvciBjb250cm9sKSB0byBhIHBhcmVudCBmb3JtIGdyb3VwXG4gICAqXG4gICAqIEBwYXJhbSBwYXJlbnRHcm91cCAtIHRoZSBwYXJlbnQgZ3JvdXAgdG8gYWRkIHRoZSBjb250cm9sIHRvXG4gICAqIEBwYXJhbSBmb3JtRWxlbWVudCAtIHRoZSBlbmFpbyBmb3JtIG1vZGVsIGVsZW1lbnQgdG8gY3JlYXRlIHRoZSBjaGlsZCBjb250cm9sIGZyb21cbiAgICogQHBhcmFtIFt1c2VOYW1lXSAtIHVzZSB0aGlzIG5hbWUgaW5zdGVhZCBvZiB0aGUgb25lIGZyb20gdGhlIG1vZGVsXG4gICAqL1xuICBwcml2YXRlIF9hZGRGb3JtQ29udHJvbChzY29wZTogRm9ybUdlblNjb3BlLCBwYXJlbnRHcm91cDogT2JqZWN0Rm9ybUdyb3VwLCBmb3JtRWxlbWVudDogYW55LCB1c2VOYW1lPzogc3RyaW5nKSB7XG5cbiAgICBsZXQgY3RybDtcbiAgICBsZXQgbmFtZTtcblxuICAgIC8vIGFkZCBhIGZvcm0gZ3JvdXBcbiAgICBpZiAoZm9ybUVsZW1lbnQudHlwZSA9PT0gJ28ybUdyb3VwJyB8fCBmb3JtRWxlbWVudC50eXBlID09PSAnbzJtR3JvdXBTdGFjaycpIHtcblxuICAgICAgLy8gZG8gbm90IGFkZCBncm91cHMgdGhhdCBhcmUgZW1wdHlcbiAgICAgIGlmICghZm9ybUVsZW1lbnQuZWxlbWVudHMgfHwgZm9ybUVsZW1lbnQuZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdGb3VuZCBlbXB0eSBmb3JtIGdyb3VwJywgZm9ybUVsZW1lbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGN0cmwgPSBuZXcgT2JqZWN0Rm9ybUdyb3VwKHt9KTtcbiAgICAgIGN0cmwuX2VvRm9ybUdyb3VwID0ge1xuICAgICAgICBsYWJlbDogZm9ybUVsZW1lbnQubGFiZWwsXG4gICAgICAgIGxheW91dDogZm9ybUVsZW1lbnQubGF5b3V0LFxuICAgICAgICB0eXBlOiBmb3JtRWxlbWVudC50eXBlXG4gICAgICB9O1xuXG4gICAgICBpZiAodXNlTmFtZSA9PT0gJ2NvcmUnIHx8IHVzZU5hbWUgPT09ICdkYXRhJykge1xuICAgICAgICBjdHJsLl9lb0Zvcm1Hcm91cC5sYWJlbCA9IHVzZU5hbWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGUgb2YgZm9ybUVsZW1lbnQuZWxlbWVudHMpIHtcbiAgICAgICAgdGhpcy5fYWRkRm9ybUNvbnRyb2woc2NvcGUsIGN0cmwsIGUpO1xuICAgICAgfVxuICAgICAgbmFtZSA9IHVzZU5hbWUgfHwgJ2ZnJyArIHNjb3BlLmdDb3VudCsrO1xuICAgICAgY3RybC5fZW9Gb3JtR3JvdXAuaWQgPSBgJHtzY29wZS5mb3JtT3B0aW9ucy5sYXlvdXRTZXR0aW5nc0lEIHx8IHNjb3BlLmZvcm1PcHRpb25zLmZvcm1Nb2RlbC5uYW1lfS4ke25hbWV9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYWRkIGZvcm0gY29udHJvbFxuICAgICAgLy8gVG8gYmUgYWJsZSB0byBpbnRlZ3JhdGUgcmVjdXJzaXZlIGZvcm0gY29udHJvbHMgaW50byB0aGUgbWFpbiBmb3JtLFxuICAgICAgLy8gd2UgaGF2ZSB0byB3cmFwIHRoZW0gaW4gYSBmb3JtIGdyb3VwXG4gICAgICBjdHJsID0gbmV3IE9iamVjdEZvcm1Db250cm9sV3JhcHBlcih7fSk7XG4gICAgICBjdHJsLl9lb0Zvcm1Db250cm9sV3JhcHBlciA9IHtcbiAgICAgICAgLy8gdGhlIG5hbWUgb2YgdGhlIHdyYXBwZWQgVW50eXBlZEZvcm1Db250cm9sXG4gICAgICAgIGNvbnRyb2xOYW1lOiBmb3JtRWxlbWVudC5uYW1lLFxuICAgICAgICBzaXR1YXRpb246IHNjb3BlLmZvcm1PcHRpb25zLmZvcm1Nb2RlbC5zaXR1YXRpb25cbiAgICAgIH07XG4gICAgICBpZiAoc2NvcGUuZm9ybU9wdGlvbnMuZm9ybU1vZGVsLnNpdHVhdGlvbiA9PT0gJ1NFQVJDSCcgJiYgZm9ybUVsZW1lbnQudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgZm9ybUVsZW1lbnQuaXNOb3RTZXRWYWx1ZSA9IHRydWU7XG4gICAgICB9XG4gICAgICAvLyBkbyBub3Qgc2V0IGEgcmVmZXJlbmNlIGFzIHRoZSBmb3JtIGNvbnRyb2xzIHZhbHVlXG4gICAgICAvLyBvdGhlcndpc2Ugd2UgY291bGQgbm90IHJlc2V0IHRoZSBmb3JtXG4gICAgICBsZXQgdmFsdWU6IGFueTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGZvcm1FbGVtZW50LnZhbHVlKSkge1xuICAgICAgICAvLyBjb3B5IGJ5IHZhbHVlIGZvciBhcnJheXMgb2Ygb2JqZWN0cyAoZS5nLiB0YWJsZSBkYXRhKVxuICAgICAgICB2YWx1ZSA9IFtdO1xuICAgICAgICBmb3JtRWxlbWVudC52YWx1ZS5mb3JFYWNoKChvKSA9PiB7XG4gICAgICAgICAgdmFsdWUucHVzaChVdGlscy5mb3JtRGF0YVBhcnNlKFV0aWxzLmZvcm1EYXRhU3RyaW5naWZ5KG8pKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBmb3JtRWxlbWVudC52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gZm9yIGNvZGVzeXN0ZW0gZWxlbWVudHMgYWRkIGVudHJpZXMgaWYgbm90IHlldCBwcm92aWRlZFxuICAgICAgaWYgKGZvcm1FbGVtZW50LnR5cGUgPT09ICdDT0RFU1lTVEVNJyAmJiAhZm9ybUVsZW1lbnQuY29kZXN5c3RlbS5lbnRyaWVzKSB7XG4gICAgICAgIGZvcm1FbGVtZW50LmNvZGVzeXN0ZW0gPSB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0Q29kZXN5c3RlbShmb3JtRWxlbWVudC5jb2Rlc3lzdGVtLmlkKTtcbiAgICAgIH1cblxuICAgICAgLy8gY3JlYXRlIHRoZSBhY3R1YWwgZm9ybSBjb250cm9sXG4gICAgICBsZXQgY29udHJvbERpc2FibGVkID0gc2NvcGUuZm9ybU9wdGlvbnMuZGlzYWJsZWQgfHwgISFmb3JtRWxlbWVudC5yZWFkb25seTtcbiAgICAgIGxldCBmb3JtQ29udHJvbCA9IG5ldyBPYmplY3RGb3JtQ29udHJvbCh7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgZGlzYWJsZWQ6IGNvbnRyb2xEaXNhYmxlZFxuICAgICAgfSk7XG5cbiAgICAgIGZvcm1FbGVtZW50LnJlYWRvbmx5ID0gY29udHJvbERpc2FibGVkO1xuXG4gICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudCA9IGZvcm1FbGVtZW50O1xuICAgICAgc2NvcGUuZm9ybUdlblJlc3VsdC5mb3JtQ29udHJvbHNbZm9ybUVsZW1lbnQubmFtZV0gPSBmb3JtQ29udHJvbDtcblxuICAgICAgaWYgKGZvcm1FbGVtZW50LnR5cGUgPT09ICdDT0RFU1lTVEVNJyB8fCAoZm9ybUVsZW1lbnQudHlwZSA9PT0gJ1NUUklORycgJiYgZm9ybUVsZW1lbnQuY2xhc3NpZmljYXRpb24gPT09ICdzZWxlY3RvcicpKSB7XG4gICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LmFwcGx5RmlsdGVyID0gKGZ1bmM6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQuZmlsdGVyRnVuY3Rpb24gPSBmdW5jO1xuICAgICAgICB9O1xuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5hcHBseURpc2FibGluZ0ZpbHRlciA9IChmdW5jOiBGdW5jdGlvbikgPT4ge1xuICAgICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LmRpc2FibGluZ0ZpbHRlckZ1bmN0aW9uID0gZnVuYztcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1FbGVtZW50LnR5cGUgPT09ICdTVFJJTkcnICYmIGZvcm1FbGVtZW50LmNsYXNzaWZpY2F0aW9uID09PSAnc2VsZWN0b3InKSB7XG4gICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LnNldExpc3QgPSAobGlzdE9iamVjdDogYW55KSA9PiB7XG4gICAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQubGlzdCA9IGxpc3RPYmplY3Q7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnT1JHQU5JWkFUSU9OJykge1xuICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5zZXRGaWx0ZXIgPSAoZmlsdGVyT2JqZWN0OiBhbnkpID0+IHtcbiAgICAgICAgICBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5maWx0ZXIgPSBmaWx0ZXJPYmplY3Q7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtRWxlbWVudC50eXBlID09PSAnVEFCTEUnKSB7XG4gICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50Lm9iamVjdCA9IHNjb3BlLmZvcm1PcHRpb25zLm9iamVjdDtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1FbGVtZW50LnR5cGUgPT09ICdSRUZFUkVOQ0UnKSB7XG4gICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LnNldFF1ZXJ5RmlsdGVycyA9IChxdWVyeUZpbHRlcnNPYmplY3Q6IHtbZmllbGRRbmFtZTogc3RyaW5nXToge286IHN0cmluZywgdjE6IGFueSwgdjI6IGFueX19LCBvYmplY3RUeXBlcz86IHN0cmluZ1tdKSA9PiB7XG4gICAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQucXVlcnlGaWx0ZXJzID0gcXVlcnlGaWx0ZXJzT2JqZWN0O1xuICAgICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50Lm9iamVjdFR5cGVzRmlsdGVyID0gb2JqZWN0VHlwZXM7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChzY29wZS5mb3JtT3B0aW9ucy5mb3JtTW9kZWwuc2l0dWF0aW9uID09PSAnU0VBUkNIJykge1xuICAgICAgICAvLyBpbiBzZWFyY2ggc2l0dWF0aW9uIGV2ZW4gcmVhZG9ubHkgZmllbGRzIHNob3VsZCBiZSBlZGl0YWJsZSAuLi5cbiAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQucmVhZG9ubHkgPSBmYWxzZTtcbiAgICAgICAgLy8gLi4uIGFuZCByZXF1aXJlZCBtYWtlcyBubyBzZW5zZSBoZXJlXG4gICAgICAgIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LnJlcXVpcmVkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIHJlbW92ZSBlbXB0eSBkZXNjcmlwdGlvbnNcbiAgICAgIGxldCBkZXNjID0gZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQuZGVzY3JpcHRpb247XG4gICAgICBpZiAoZGVzYyAmJiBkZXNjLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQuZGVzY3JpcHRpb24gPSBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBhZGQgdGhlIGZvcm0gZWxlbWVudCB0byB0aGUgc2NyaXB0IG1vZGVsIHRoYXQgd2lsbCBiZSBpbmplY3RlZCBpbnRvXG4gICAgICAvLyB0aGUgZm9ybXMgc2NyaXB0aW5nIHNjb3BlIGxhdGVyIG9uXG4gICAgICBzY29wZS5mb3JtR2VuUmVzdWx0LnNjcmlwdE1vZGVsW2Zvcm1FbGVtZW50Lm5hbWVdID0gZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQ7XG5cbiAgICAgIC8vIGFwcGx5IGNoYW5nZSBsaXN0ZW5lciB0byB0aGUgZm9ybSBjb250cm9sLCB0aGF0IHdpbGwgdHJpZ2dlclxuICAgICAgLy8gdGhlIGZvcm0gZWxlbWVudHMgb25DaGFuZ2UgbGlzdGVuZXJcbiAgICAgIGxldCBjb250cm9sV2F0Y2ggPSBjdHJsLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZShmb3JtRWxlbWVudC50eXBlID09PSAnVEFCTEUnID8gMCA6IDUwMCkpO1xuICAgICAgY29udHJvbFdhdGNoLnN1YnNjcmliZSgodikgPT4ge1xuICAgICAgICBpZiAoZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQudHlwZSA9PT0gJ1JFRkVSRU5DRScpIHtcbiAgICAgICAgICB0aGlzLl9nZXREYXRhTWV0YShmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudCwgdltmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5uYW1lXSkuc3Vic2NyaWJlKG0gPT4ge1xuICAgICAgICAgICAgaWYgKG0pIHtcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2wuX2VvRm9ybUVsZW1lbnQuZGF0YU1ldGEgPSBmb3JtQ29udHJvbC5fZW9Gb3JtRWxlbWVudC5tdWx0aXNlbGVjdCA/IG0gOiBtWzBdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGVsZXRlIGZvcm1Db250cm9sLl9lb0Zvcm1FbGVtZW50LmRhdGFNZXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVGb3JtRWxlbWVudENoYW5nZXModik7XG5cbiAgICAgICAgaWYgKHNjb3BlLmZvcm1HZW5SZXN1bHQuc2NyaXB0aW5nU2NvcGUpIHtcbiAgICAgICAgICBzY29wZS5mb3JtR2VuUmVzdWx0LnNjcmlwdGluZ1Njb3BlLm1vZGVsQ2hhbmdlZCh2KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBzY29wZS5mb3JtR2VuUmVzdWx0LmNvbnRyb2xWYWx1ZVN1YnNjcmlwdGlvbnMucHVzaChjb250cm9sV2F0Y2gpO1xuXG4gICAgICBjdHJsLmFkZENvbnRyb2woZm9ybUVsZW1lbnQubmFtZSwgZm9ybUNvbnRyb2wpO1xuICAgICAgbmFtZSA9ICdmZ18nICsgZm9ybUVsZW1lbnQubmFtZTtcbiAgICB9XG4gICAgcGFyZW50R3JvdXAuYWRkQ29udHJvbChuYW1lLCBjdHJsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZSBkYXRhIGludG8gYSBmb3JtIG1vZGVsLlxuICAgKlxuICAgKiBAcGFyYW0gbW9kZWwgLSBmb3JtIG1vZGVsXG4gICAqIEBwYXJhbSBkYXRhIC0gZGF0YSBvYmplY3Qgb3IgYXJyYXkgb2YgU2VhcmNoRmlsdGVyIG9iamVjdHMgaW4gY2FzZSBvZiBhIHNlYXJjaCBmb3JtXG4gICAqL1xuICBwcml2YXRlIF9kYXRhVG9Gb3JtKHNjb3BlOiBGb3JtR2VuU2NvcGUsIG1vZGVsOiBhbnksIGRhdGE6IGFueSkge1xuICAgIGlmIChtb2RlbCAmJiBkYXRhKSB7XG4gICAgICB0aGlzLl9zZXRFbGVtZW50VmFsdWVzKHNjb3BlLCBtb2RlbC5lbGVtZW50cywgZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIC8vIHJlY3Vyc2l2ZSBtZXRob2QgZm9yIGFkZGluZyB2YWx1ZXMgdG8gbW9kZWwgZWxlbWVudHNcbiAgcHJpdmF0ZSBfc2V0RWxlbWVudFZhbHVlcyhzY29wZTogRm9ybUdlblNjb3BlLCBlbGVtZW50cywgZGF0YSkge1xuXG4gICAgZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIGlmICh0aGlzLl9oYXNWYWx1ZShkYXRhLCBlbGVtZW50KSkge1xuXG4gICAgICAgIGVsZW1lbnQudmFsdWUgPSB0aGlzLl9nZXRWYWx1ZShzY29wZSwgZGF0YSwgZWxlbWVudCk7XG4gICAgICAgIGlmIChlbGVtZW50LnZhbHVlKSB7XG4gICAgICAgICAgLy8gYWRkIG1ldGEgZGF0YSBmb3Igc29tZSBvZiB0aGUgdHlwZXNcbiAgICAgICAgICB0aGlzLl9mZXRjaE1ldGFEYXRhKHNjb3BlLCBkYXRhLCBlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIGVsZW1lbnQudmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoZWxlbWVudC50eXBlICE9PSAnVEFCTEUnICYmIGVsZW1lbnQuZWxlbWVudHMgJiYgZWxlbWVudC5lbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuX3NldEVsZW1lbnRWYWx1ZXMoc2NvcGUsIGVsZW1lbnQuZWxlbWVudHMsIGRhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gaW4gc29tZSBjYXNlcyByZXF1aXJlZCBtZXRhIGRhdGEgbWF5IG5vdCBiZSBhdmFpbGFibGUgb24gdGhlIGVsZW1lbnQgaXRzZWxmXG4gIC8vIHNvIHRoZXkgaGF2ZSB0byBiZSBmZXRjaGVkIGFuZCBhZGRlZCB0byB0aGUgZWxlbWVudCBmb3IgdGhlIGZvcm0gdG8gYmUgYWJsZVxuICAvLyB0byByZW5kZXIgdGhlIGVsZW1lbnQgY29ycmVjdGx5XG4gIHByaXZhdGUgX2ZldGNoTWV0YURhdGEoc2NvcGU6IEZvcm1HZW5TY29wZSwgZGF0YSwgZWxlbWVudCkge1xuXG4gICAgaWYgKHNjb3BlLmZvcm1PcHRpb25zLmZvcm1Nb2RlbC5zaXR1YXRpb24gPT09ICdTRUFSQ0gnKSB7XG4gICAgICAvLyB0b2RvOiBob3cgdG8gZmV0Y2ggbWV0YSBkYXRhIGluIHNlYXJjaCBzaXR1YXRpb25cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ09SR0FOSVpBVElPTicgJiYgZGF0YVtlbGVtZW50Lm5hbWUgKyAnX21ldGEnXSkge1xuICAgICAgICBlbGVtZW50LmRhdGFNZXRhID0gZGF0YVtlbGVtZW50Lm5hbWUgKyAnX21ldGEnXTtcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC50eXBlID09PSAnQ09ERVNZU1RFTScgJiYgZGF0YVtlbGVtZW50Lm5hbWUgKyAnX21ldGEnXSkge1xuICAgICAgICBlbGVtZW50LmRhdGFNZXRhID0gZGF0YVtlbGVtZW50Lm5hbWUgKyAnX21ldGEnXTtcbiAgICAgICAgZWxlbWVudC5kZWZhdWx0cmVwcmVzZW50YXRpb24gPSBkYXRhW2VsZW1lbnQubmFtZSArICdfbWV0YSddLmRlZmF1bHRyZXByZXNlbnRhdGlvbjtcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC50eXBlID09PSAnUkVGRVJFTkNFJyAmJiBkYXRhW2VsZW1lbnQubmFtZSArICdfbWV0YSddKSB7XG4gICAgICAgIGVsZW1lbnQuZGF0YU1ldGEgPSBkYXRhW2VsZW1lbnQubmFtZSArICdfbWV0YSddO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldERhdGFNZXRhKGZvcm1FbGVtZW50OiBhbnksIG5ld1ZhbHVlOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuXG4gICAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgICBzd2l0Y2ggKGZvcm1FbGVtZW50LnR5cGUpIHtcbiAgICAgICAgY2FzZSAnT1JHQU5JWkFUSU9OJzoge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmV3VmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9yZ2FuaXphdGlvbk9iamVjdChuZXdWYWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChuZXdWYWx1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uT2JqZWN0KG5ld1ZhbHVlWzBdKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5ld1ZhbHVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uT2JqZWN0cyhuZXdWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ1JFRkVSRU5DRSc6IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VTZXJ2aWNlLmZldGNoSURSZWZlcmVuY2VNZXRhRGF0YShBcnJheS5pc0FycmF5KG5ld1ZhbHVlKSA/IG5ld1ZhbHVlIDogW25ld1ZhbHVlXSk7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnQ09ERVNZU1RFTSc6IHtcbiAgICAgICAgICByZXR1cm4gb2YodGhpcy5zeXN0ZW1TZXJ2aWNlLmdldENvZGVzeXN0ZW0oZm9ybUVsZW1lbnQuY29kZXN5c3RlbS5pZCkuZW50cmllcy5maW5kKChlbnRyeSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGVudHJ5LmRlZmF1bHRyZXByZXNlbnRhdGlvbiA9PT0gbmV3VmFsdWU7XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvZihudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhc1ZhbHVlKGRhdGEsIGVsZW1lbnQpIHtcblxuICAgIC8vIGRpZmZlciBiZXR3ZWVuIGFycmF5IG9mIFNlYXJjaEZpbHRlcnMgYW5kIGEgZm9ybSBkYXRhIG9iamVjdFxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICBpZiAoZWxlbWVudC50eXBlID09PSAnVEFCTEUnKSB7XG4gICAgICAgIHJldHVybiAhIShkYXRhLmZpbmQoKGZpbHRlcikgPT4gZmlsdGVyLnByb3BlcnR5LnN0YXJ0c1dpdGgoZWxlbWVudC5xbmFtZSkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAhIShkYXRhLmZpbmQoKGZpbHRlcikgPT4gZmlsdGVyLnByb3BlcnR5ID09PSBlbGVtZW50LnFuYW1lKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkYXRhLmhhc093blByb3BlcnR5KGVsZW1lbnQubmFtZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0VmFsdWUoc2NvcGU6IEZvcm1HZW5TY29wZSwgZGF0YSwgZWxlbWVudCkge1xuXG4gICAgbGV0IHZhbHVlO1xuICAgIGlmIChzY29wZS5mb3JtT3B0aW9ucy5mb3JtTW9kZWwuc2l0dWF0aW9uID09PSAnU0VBUkNIJykge1xuICAgICAgaWYgKHNjb3BlLmlzSW5uZXJUYWJsZUZvcm0pIHtcbiAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ0RBVEVUSU1FJyB8fCBlbGVtZW50LnR5cGUgPT09ICdOVU1CRVInKSB7XG4gICAgICAgICAgdmFsdWUgPSBTZWFyY2hTZXJ2aWNlLnRvUmFuZ2VWYWx1ZShkYXRhW2VsZW1lbnQubmFtZV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gZGF0YVtlbGVtZW50Lm5hbWVdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ1RBQkxFJykge1xuICAgICAgICB2YWx1ZSA9IHRoaXMuc2VhcmNoU2VydmljZS50YWJsZUZpbHRlcnNUb0VsZW1lbnRWYWx1ZSh0aGlzLl9nZXRUYWJsZUZpbHRlcnMoZGF0YSwgZWxlbWVudC5xbmFtZSksIGVsZW1lbnQuZWxlbWVudHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gZGF0YS5maW5kKGYgPT4gZi5wcm9wZXJ0eSA9PT0gZWxlbWVudC5xbmFtZSk7XG4gICAgICAgIHZhbHVlID0gdGhpcy5zZWFyY2hTZXJ2aWNlLmZpbHRlclRvRWxlbWVudFZhbHVlKGZpbHRlciwgZWxlbWVudC50eXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuXG4gICAgICBpZiAoZWxlbWVudC50eXBlID09PSAnREFURVRJTUUnICYmIGRhdGFbZWxlbWVudC5uYW1lXSkge1xuICAgICAgICB2YWx1ZSA9IG5ldyBEYXRlKGAke2RhdGFbZWxlbWVudC5uYW1lXX0keyh0eXBlb2YgZGF0YVtlbGVtZW50Lm5hbWVdID09PSAnc3RyaW5nJyA/IGRhdGFbZWxlbWVudC5uYW1lXS5pbmRleE9mKCdUJykgOiBkYXRhW2VsZW1lbnQubmFtZV0udG9JU09TdHJpbmcoKS5pbmRleE9mKCdUJykpICE9PSAtMSA/ICcnIDogJ1QwMDowMDowMCd9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IGRhdGFbZWxlbWVudC5uYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0VGFibGVGaWx0ZXJzKGZpbHRlcnM6IFNlYXJjaEZpbHRlcltdLCBwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IFNlYXJjaEZpbHRlcltdIHtcbiAgICByZXR1cm4gZmlsdGVycy5maWx0ZXIoZiA9PiBmLnByb3BlcnR5LnN0YXJ0c1dpdGgocHJvcGVydHlOYW1lICsgJy4nKSk7XG4gIH1cblxuICBwcml2YXRlIF9pbml0VmFsaWRhdG9ycyhmb3JtQ29udHJvbDogT2JqZWN0Rm9ybUdyb3VwLCBzY29wZTogRm9ybUdlblNjb3BlKSB7XG4gICAgaWYgKGZvcm1Db250cm9sKSB7XG4gICAgICBmb3IgKGxldCBrZXkgaW4gZm9ybUNvbnRyb2wuY29udHJvbHMpIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Db250cm9sLmNvbnRyb2xzW2tleV0gYXMgYW55O1xuICAgICAgICBpZiAoY29udHJvbC5jb250cm9scykge1xuICAgICAgICAgIHRoaXMuX2luaXRWYWxpZGF0b3JzKGNvbnRyb2wsIHNjb3BlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzY29wZS5pbml0aWFsVmFsaWRhdG9yc1tjb250cm9sLl9lb0Zvcm1FbGVtZW50Lm5hbWVdID0gY29udHJvbC52YWxpZGF0b3I7XG4gICAgICAgICAgY29udHJvbC5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMuY29tcG9zZShcbiAgICAgICAgICAgIHRoaXMuX2dldFZhbGlkYXRvcnMoc2NvcGUsIGNvbnRyb2wuX2VvRm9ybUVsZW1lbnQpLmNvbmNhdChcbiAgICAgICAgICAgICAgW3Njb3BlLmluaXRpYWxWYWxpZGF0b3JzW2NvbnRyb2wuX2VvRm9ybUVsZW1lbnQubmFtZV1dKVxuICAgICAgICAgICkpO1xuICAgICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICogQnVpbGQgdmFsaWRhdG9ycyBmb3IgdGhlIGdpdmVuIGZvcm0gZWxlbWVudCB0byBiZSBhdHRhY2hlZCB0b1xuICAqIGEgcmVhY3RpdmUgZm9ybUNvbnRyb2wuXG4gICpcbiAgKiBAcGFyYW0gZm9ybUVsZW1lbnQgLSBmb3JtIGVsZW1lbnQgb2JqZWN0XG4gICovXG4gIHByaXZhdGUgX2dldFZhbGlkYXRvcnMoc2NvcGU6IEZvcm1HZW5TY29wZSwgZm9ybUVsZW1lbnQ6IGFueSk6IFZhbGlkYXRvckZuW10ge1xuICAgIGxldCBlbG1WYWxpZGF0b3JzID0gRm9ybVZhbGlkYXRpb24uZ2V0VmFsaWRhdG9ycyhmb3JtRWxlbWVudCwgc2NvcGUuZm9ybU9wdGlvbnMuZm9ybU1vZGVsLnNpdHVhdGlvbik7XG4gICAgLy8gYWRkIGN1c3RvbSB2YWxpZGF0b3IgZm9yIHNjcmlwdCBlbmFibGVkIGZvcm1zXG4gICAgaWYgKHNjb3BlLmZvcm1HZW5SZXN1bHQuc2NyaXB0aW5nU2NvcGUpIHtcbiAgICAgIGVsbVZhbGlkYXRvcnMucHVzaChGb3JtVmFsaWRhdGlvbi5jdXN0b21TY3JpcHRpbmdWYWxpZGF0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxtVmFsaWRhdG9ycztcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRTY3JpcHRpbmdTY29wZShzY29wZTogRm9ybUdlblNjb3BlLCBmb3JtU2NyaXB0U2VydmljZTogT2JqZWN0Rm9ybVNjcmlwdFNlcnZpY2UpIHtcbiAgICBsZXQge2RhdGEsIGFjdGlvbnMsIG9iamVjdHMsIGNvbnRleHR9ID0gPE9iamVjdEZvcm1PcHRpb25zPihzY29wZS5mb3JtT3B0aW9ucyB8fCB7fSk7XG5cbiAgICBpZiAoc2NvcGUuZm9ybUdlblJlc3VsdC5zY3JpcHRpbmdTY29wZSkge1xuICAgICAgc2NvcGUuZm9ybUdlblJlc3VsdC5zY3JpcHRpbmdTY29wZS5zZXRNb2RlbChzY29wZS5mb3JtR2VuUmVzdWx0LnNjcmlwdE1vZGVsKTtcbiAgICAgIC8qKiBwcm92aWRlIGFjY2VzcyB0byBhY3Rpb25zICh1c2VkIGluc2lkZSBvZiBCUE0tRm9ybXMpICovXG4gICAgICBzY29wZS5mb3JtR2VuUmVzdWx0LnNjcmlwdGluZ1Njb3BlLmFjdGlvbnMgPSBhY3Rpb25zO1xuICAgICAgLyoqIHByb3ZpZGUgYWNjZXNzIHRvIGFkZGl0aW9uYWwgb2JqZWN0cyAodXNlZCBmb3IgZXhhbXBsZSBpbiBCUE0tU3RhcnQtRm9ybXMgdG9cbiAgICAgICAqIGFkZCBkYXRhIG9mIERNUy1PYmplY3RzIHRvIHN0YXJ0IHRoZSBwcm9jZXNzIGZvcilcbiAgICAgICAqL1xuICAgICAgc2NvcGUuZm9ybUdlblJlc3VsdC5zY3JpcHRpbmdTY29wZS5vYmplY3RzID0gb2JqZWN0cztcbiAgICAgIHNjb3BlLmZvcm1HZW5SZXN1bHQuc2NyaXB0aW5nU2NvcGUuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAvKiogcHJvdmlkZSByZWFkb25seSBhY2Nlc3MgdG8gaW5pdGlhbCBmb3JtIGRhdGEgKHdoaWNoIG1heSBhbHNvIGNvbnRhaW4gdmFsdWVzIHRoYXRcbiAgICAgICAqIGFyZSBub3QgcmVuZGVyZWQgYXMgZm9ybSBlbGVtZW50cyAoaW52aXNpYmxlIHZhbHVlcykpXG4gICAgICAgKi9cbiAgICAgIHNjb3BlLmZvcm1HZW5SZXN1bHQuc2NyaXB0aW5nU2NvcGUuZGF0YSA9IGRhdGE7XG5cbiAgICAgIC8qKiBieSBkZWZhdWx0LCBzY3JpcHRpbmcgc2NvcGVzIGFyZSBhcHBsaWVkIHRvIGZvcm1zLiBCdXQgdGFibGUgZWxlbWVudHMgY3JlYXRlIHRoZWlyIG93biBzY29wZVxuICAgICAgICogZm9yIGVkaXRpbmcgcm93cy4gQmVpbmcgb25lIG9mIHRob3NlIGlubmVyIGZvcm1zIHNob3VsZCBub3QgcnVuIHRoZSBmb3JtIHNjcmlwdCBhZ2FpbiwgYnV0XG4gICAgICAgKiBpbnN0ZWFkIGp1c3QgcHJvdmlkZSB0aGUgb2JzZXJ2aW5nIGFiaWxpdGllcyBvZiB0aGUgc2NyaXB0aW5nIHNjb3BlLlxuICAgICAgICovXG4gICAgICBpZiAoIXNjb3BlLmZvcm1PcHRpb25zLmRpc2FibGVkICYmICFzY29wZS5pc0lubmVyVGFibGVGb3JtICYmIHNjb3BlLmZvcm1HZW5SZXN1bHQuZm9ybU1vZGVsKSB7XG4gICAgICAgIGNvbnN0IHNjcmlwdE5hbWUgPSBzY29wZS5mb3JtR2VuUmVzdWx0LmZvcm1Nb2RlbC5uYW1lICsgJ18nICsgc2NvcGUuZm9ybUdlblJlc3VsdC5mb3JtTW9kZWwuc2l0dWF0aW9uO1xuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnZXhlY3V0aW5nIGZvcm0gc2NyaXB0ICcgKyBzY3JpcHROYW1lKTtcbiAgICAgICAgZm9ybVNjcmlwdFNlcnZpY2UucnVuRm9ybVNjcmlwdChcbiAgICAgICAgICBzY29wZS5mb3JtR2VuUmVzdWx0LnNjcmlwdGluZ1Njb3BlLFxuICAgICAgICAgIHNjb3BlLmZvcm1HZW5SZXN1bHQuZm9ybU1vZGVsLnNjcmlwdCxcbiAgICAgICAgICBzY3JpcHROYW1lXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAgICogVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgZWFjaCB0aW1lIHRoZSBzY3JpcHQgY2hhbmdlcyBpdHMgaW50ZXJuYWwgbW9kZWwuXG4gICAgICogSXQgaXMgdXNlZCB0byB0cmFuc2ZlciB0aGUgc2NyaXB0IGNoYW5nZXMgdG8gdGhlIGFjdHVhbCBmb3JtIG1vZGVsLlxuICAgICAqXG4gICAgICogVG8gZW5zdXJlIHRoZSByaWdodCBjb250ZXh0LCB3ZSBkZWZpbmUgYW4gaW5zdGFuY2UgbWV0aG9kIGFzIGNhbGxiYWNrIGZvciB0aGUgc2NyaXB0aW5nIHNjb3BlXG4gICAgICogQHNlZTogaHR0cHM6Ly9ibG9nLmpvaG5ueXJlaWxseS5jb20vMjAxNC8wNC90eXBlc2NyaXB0LWluc3RhbmNlLW1ldGhvZHMuaHRtbFxuICAgICAqXG4gICAgICogQHBhcmFtIGZvcm1Db250cm9sTmFtZVxuICAgICAqIEBwYXJhbSBjaGFuZ2VcbiAgICAgKi9cblxuICBwcml2YXRlIF9nZXRTY3JpcHRpbmdNb2RlbENoYW5nZWQoc2NvcGU6IEZvcm1HZW5TY29wZSk6IEZ1bmN0aW9uIHtcbiAgICByZXR1cm4gKGZvcm1Db250cm9sTmFtZSwgY2hhbmdlKSA9PiB7XG5cbiAgICAgIC8vIGZpbmQgdGhlIHRhcmdldCBjb250cm9sXG4gICAgICBsZXQgZmM6IE9iamVjdEZvcm1Db250cm9sID0gc2NvcGUuZm9ybUdlblJlc3VsdC5mb3JtQ29udHJvbHNbZm9ybUNvbnRyb2xOYW1lXSBhcyBPYmplY3RGb3JtQ29udHJvbDtcbiAgICAgIGlmIChmYykge1xuXG4gICAgICAgIC8vIGNoYW5nZSBvbmx5IGFsbG93ZWQgcHJvcGVydGllc1xuICAgICAgICBzd2l0Y2ggKGNoYW5nZS5uYW1lKSB7XG4gICAgICAgICAgY2FzZSAndmFsdWUnOiB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGFuZ2UubmV3VmFsdWUpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NBcnJheVZhbHVlQ2hhbmdlKGZjLCBjaGFuZ2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZmMuX2VvRm9ybUVsZW1lbnQudmFsdWUgPSBjaGFuZ2UubmV3VmFsdWU7XG4gICAgICAgICAgICAgIGlmIChmYy52YWx1ZSAhPT0gY2hhbmdlLm5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZmMucGF0Y2hWYWx1ZShjaGFuZ2UubmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgIGZjLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgICAgICAgICBmYy5tYXJrQXNEaXJ0eSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzY29wZS5mb3JtR2VuUmVzdWx0LmZvcm0ubWFya0FzRGlydHkoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdyZXF1aXJlZCc6IHtcbiAgICAgICAgICAgIGlmIChmYy5fZW9Gb3JtRWxlbWVudC5yZXF1aXJlZCAhPT0gY2hhbmdlLm5ld1ZhbHVlKSB7XG4gICAgICAgICAgICAgIGZjLl9lb0Zvcm1FbGVtZW50LnJlcXVpcmVkID0gY2hhbmdlLm5ld1ZhbHVlO1xuICAgICAgICAgICAgICAvLyBhcHBseSBuZXcgdmFsaWRhdG9yc1xuICAgICAgICAgICAgICAvLyBAc2VlOiBodHRwczovL3Njb3RjaC5pby90dXRvcmlhbHMvaG93LXRvLWltcGxlbWVudC1jb25kaXRpb25hbC12YWxpZGF0aW9uLWluLWFuZ3VsYXItMi1tb2RlbC1kcml2ZW4tZm9ybXNcbiAgICAgICAgICAgICAgZmMuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLmNvbXBvc2UodGhpcy5fZ2V0VmFsaWRhdG9ycyhzY29wZSwgZmMuX2VvRm9ybUVsZW1lbnQpLmNvbmNhdChbc2NvcGUuaW5pdGlhbFZhbGlkYXRvcnNbZmMuX2VvRm9ybUVsZW1lbnQubmFtZV1dKSkpO1xuICAgICAgICAgICAgICAvLyBuZWVkIHRvIG1hcmsgZm9ybSBjb250cm9sIGFzIHRvdWNoZWQgYmVjYXVzZSBvdGhlcndpc2UgZm9ybSB2YWxpZGF0aW9uIHdpbGwgbm90IHNob3dcbiAgICAgICAgICAgICAgLy8gZXJyb3IgbWVzc2FnZXNcbiAgICAgICAgICAgICAgZmMubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICAgICAgICBmYy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAncmVhZG9ubHknOiB7XG4gICAgICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC5yZWFkb25seSA9IGNoYW5nZS5uZXdWYWx1ZTtcbiAgICAgICAgICAgIGlmIChjaGFuZ2UubmV3VmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgZmMuZGlzYWJsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZmMuZW5hYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAnZXJyb3InOiB7XG4gICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoZmMuX2VvRm9ybUVsZW1lbnQuZXJyb3IpICE9PSBKU09OLnN0cmluZ2lmeShjaGFuZ2UubmV3VmFsdWUpKSB7XG4gICAgICAgICAgICAgIGZjLl9lb0Zvcm1FbGVtZW50LmVycm9yID0gY2hhbmdlLm5ld1ZhbHVlO1xuICAgICAgICAgICAgICBmYy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgICAgICAgIGZjLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBuZXcgb25yb3dlZGl0IGZ1bmN0aW9uIHdhcyBhcHBsaWVkIGJ5IHRoZSBzY3JpcHRcbiAgICAgICAgICBjYXNlICdvbnJvd2VkaXQnOiB7XG4gICAgICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC5vbnJvd2VkaXQgPSBjaGFuZ2UubmV3VmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gbmV3IG9uY2hhbmdlIGZ1bmN0aW9uIHdhcyBhcHBsaWVkIGJ5IHRoZSBzY3JpcHRcbiAgICAgICAgICBjYXNlICdvbmNoYW5nZSc6IHtcbiAgICAgICAgICAgIGZjLl9lb0Zvcm1FbGVtZW50Lm9uY2hhbmdlID0gY2hhbmdlLm5ld1ZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIG5ldyBjb250ZXh0SWQgd2FzIGFwcGxpZWQgYnkgdGhlIHNjcmlwdFxuICAgICAgICAgIGNhc2UgJ2NvbnRleHRJZCc6IHtcbiAgICAgICAgICAgIGZjLl9lb0Zvcm1FbGVtZW50LmNvbnRleHRJZCA9IGNoYW5nZS5uZXdWYWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBuZXcgZGVzY3JpcHRpb24gd2FzIGFwcGxpZWQgYnkgdGhlIHNjcmlwdFxuICAgICAgICAgIGNhc2UgJ2Rlc2NyaXB0aW9uJzoge1xuICAgICAgICAgICAgZmMuX2VvRm9ybUVsZW1lbnQuZGVzY3JpcHRpb24gPSBjaGFuZ2UubmV3VmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9wcm9jZXNzQXJyYXlWYWx1ZUNoYW5nZShmYywgY2hhbmdlKSB7XG4gICAgY29uc3QgbmV3VmFsID0gY2hhbmdlLm5ld1ZhbHVlO1xuICAgIGNvbnN0IHRhcmdldFR5cGUgPSBmYy5fZW9Gb3JtRWxlbWVudC50eXBlO1xuICAgIC8vIGZvciBzb21lIHR5cGVzIHdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgbWV0YSBkYXRhIGFyZSBwcm92aWRlZCBhcyB3ZWxsXG4gICAgc3dpdGNoICh0YXJnZXRUeXBlKSB7XG4gICAgICBjYXNlICdPUkdBTklaQVRJT04nOiB7XG4gICAgICAgIHRoaXMuX2dldERhdGFNZXRhKGZjLl9lb0Zvcm1FbGVtZW50LCBuZXdWYWwpLnN1YnNjcmliZShtID0+IHtcbiAgICAgICAgICBmYy5fZW9Gb3JtRWxlbWVudC5kYXRhTWV0YSA9IG07XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0NPREVTWVNURU0nOiB7XG4gICAgICAgIGlmICghZmMuX2VvRm9ybUVsZW1lbnQuY29kZXN5c3RlbS5lbnRyaWVzKSB7XG4gICAgICAgICAgZmMuX2VvRm9ybUVsZW1lbnQuY29kZXN5c3RlbSA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXRDb2Rlc3lzdGVtKGZjLl9lb0Zvcm1FbGVtZW50LmNvZGVzeXN0ZW0uaWQpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnVEFCTEUnOiB7XG4gICAgICAgIGNvbnN0IGRhdGFUb0JlUHJvY2Vzc2VkID0ge307XG4gICAgICAgIGZjLl9lb0Zvcm1FbGVtZW50LmVsZW1lbnRzLmZvckVhY2goZSA9PiB7XG4gICAgICAgICAgaWYgKGUudHlwZSA9PT0gJ09SR0FOSVpBVElPTicgfHwgZS50eXBlID09PSAnQ09ERVNZU1RFTScpIHtcbiAgICAgICAgICAgIGRhdGFUb0JlUHJvY2Vzc2VkW2UubmFtZV0gPSBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhkYXRhVG9CZVByb2Nlc3NlZCkubGVuZ3RoKSB7XG4gICAgICAgICAgbGV0IG9icyA9IFtdO1xuICAgICAgICAgIG5ld1ZhbC5mb3JFYWNoKHJvd0RhdGEgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocm93RGF0YSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICBpZiAoZGF0YVRvQmVQcm9jZXNzZWRba2V5XSkge1xuICAgICAgICAgICAgICAgIG9icy5wdXNoKHRoaXMuX2dldERhdGFNZXRhKGRhdGFUb0JlUHJvY2Vzc2VkW2tleV0sIHJvd0RhdGFba2V5XSkucGlwZShcbiAgICAgICAgICAgICAgICAgIHRhcChtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG0pIHtcbiAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhW2tleSArICdfbWV0YSddID0gbTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm93RGF0YVtrZXkgKyAnX21ldGEnXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZm9ya0pvaW4ob2JzKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fdXBkYXRlQXJyYXlWYWx1ZShmYywgbmV3VmFsKSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZUFycmF5VmFsdWUoZmMsIG5ld1ZhbCk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVBcnJheVZhbHVlKGZjLCBuZXdWYWx1ZSkge1xuICAgIGZjLl9lb0Zvcm1FbGVtZW50LnZhbHVlID0gW10uY29uY2F0KG5ld1ZhbHVlKTtcbiAgICBmYy5wYXRjaFZhbHVlKFtdLmNvbmNhdChuZXdWYWx1ZSkpO1xuICAgIGZjLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICBmYy5tYXJrQXNEaXJ0eSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2xlYXJUZW1wb3JhcnlTdG9yYWdlRW50cmllcygpIHtcbiAgICB0aGlzLl9nZXRUZW1wb3JhcnlTdG9yYWdlRW50cmllcygpLmZvckVhY2goZSA9PiBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShlKSk7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5URU1QX1NUT1JBR0VfRU5UUklFU19LRVkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0VGVtcG9yYXJ5U3RvcmFnZUVudHJpZXMoKTogc3RyaW5nW10ge1xuICAgIGxldCByZXMgPSBbXTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZW50cmllczogc3RyaW5nW10gPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuVEVNUF9TVE9SQUdFX0VOVFJJRVNfS0VZKSk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShlbnRyaWVzKSkgcmVzID0gZW50cmllcztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGUpXG4gICAgfVxuICAgIGNvbnNvbGUuZGVidWcoYEZvdW5kICR7cmVzLmxlbmd0aH0gdG1wIGVudHJpZXMgdG8gYmUgcmVtb3ZlZGApO1xuICAgIHJldHVybiByZXM7XG4gIH1cblxuXG59XG4iXX0=