@smarterplan/ngx-smarterplan-core 1.4.20 → 1.4.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -24
- package/esm2022/lib/components/csv-export/csv-export.component.mjs +3 -3
- package/esm2022/lib/components/loader/loader.component.mjs +3 -3
- package/esm2022/lib/components/menu-bar/avatar/avatar.component.mjs +1 -1
- package/esm2022/lib/components/menu-bar/menu-bar.component.mjs +3 -3
- package/esm2022/lib/components/menu-bar/navigation-bar/navigation-bar.component.mjs +3 -3
- package/esm2022/lib/components/modal-switch-visit/modal-switch-visit.component.mjs +3 -3
- package/esm2022/lib/components/search-bar/search-bar.component.mjs +3 -3
- package/esm2022/lib/components/support-modal/support-modal.component.mjs +3 -3
- package/esm2022/lib/config.mjs +1 -1
- package/esm2022/lib/helpers.service.mjs +1 -1
- package/esm2022/lib/matterport-extensions/nest-thermostat/CanvasImage.mjs +1 -1
- package/esm2022/lib/matterport-extensions/nest-thermostat/CanvasRenderer.mjs +1 -1
- package/esm2022/lib/matterport-extensions/nest-thermostat/NestThermostat.mjs +1 -1
- package/esm2022/lib/matterport-extensions/nest-thermostat/PlaneRenderer.mjs +1 -1
- package/esm2022/lib/matterport-extensions/scene-component/SceneComponent.mjs +1 -1
- package/esm2022/lib/matterport-extensions/security-camera/SecurityCamera.mjs +49 -28
- package/esm2022/lib/matterport-extensions/tv-player/TvPlayer.mjs +1 -1
- package/esm2022/lib/matterport-extensions/view-frustum-mesh/ViewFrustumMesh.mjs +22 -22
- package/esm2022/lib/mattertagData.mjs +1 -1
- package/esm2022/lib/ngx-smarterplan-core.module.mjs +1 -1
- package/esm2022/lib/ngx-smarterplan-core.service.mjs +1 -1
- package/esm2022/lib/pipes/duration-to-string.pipe.mjs +1 -1
- package/esm2022/lib/pipes/format-date-number-to-digits.pipe.mjs +1 -1
- package/esm2022/lib/pipes/hashtag-from-id.pipe.mjs +1 -1
- package/esm2022/lib/pipes/safe-url.pipe.mjs +1 -1
- package/esm2022/lib/pipes/time-date-to-local-string.pipe.mjs +1 -1
- package/esm2022/lib/pipes/username-from-id.pipe.mjs +1 -1
- package/esm2022/lib/services/amplify-cache.service.mjs +1 -1
- package/esm2022/lib/services/base-tab.service.mjs +1 -1
- package/esm2022/lib/services/baseVisibility.service.mjs +1 -1
- package/esm2022/lib/services/content.service.mjs +1 -1
- package/esm2022/lib/services/filter.service.mjs +1 -1
- package/esm2022/lib/services/intervention.service.mjs +1 -1
- package/esm2022/lib/services/locale.service.mjs +1 -1
- package/esm2022/lib/services/matterport-import.service.mjs +1 -1
- package/esm2022/lib/services/matterport-measurement.service.mjs +1 -1
- package/esm2022/lib/services/matterport-navigation.service.mjs +1 -1
- package/esm2022/lib/services/matterport-object3d.service.mjs +657 -133
- package/esm2022/lib/services/matterport-pointer.service.mjs +6 -6
- package/esm2022/lib/services/matterport-tag-copy.service.mjs +1 -1
- package/esm2022/lib/services/matterport-tag.service.mjs +1 -1
- package/esm2022/lib/services/matterport.service.mjs +346 -25
- package/esm2022/lib/services/models/affectation.service.mjs +1 -1
- package/esm2022/lib/services/models/base-object.service.mjs +1 -1
- package/esm2022/lib/services/models/capture.service.mjs +1 -1
- package/esm2022/lib/services/models/comment.service.mjs +1 -1
- package/esm2022/lib/services/models/domain.service.mjs +1 -1
- package/esm2022/lib/services/models/equipment.service.mjs +1 -1
- package/esm2022/lib/services/models/event.service.mjs +1 -1
- package/esm2022/lib/services/models/feature.service.mjs +1 -1
- package/esm2022/lib/services/models/hashtag.service.mjs +1 -1
- package/esm2022/lib/services/models/layer.service.mjs +1 -1
- package/esm2022/lib/services/models/measurement.service.mjs +1 -1
- package/esm2022/lib/services/models/mission.service.mjs +1 -1
- package/esm2022/lib/services/models/navigation.service.mjs +1 -1
- package/esm2022/lib/services/models/node.service.mjs +1 -1
- package/esm2022/lib/services/models/object3D.service.mjs +1 -1
- package/esm2022/lib/services/models/operation.service.mjs +1 -1
- package/esm2022/lib/services/models/organisation.service.mjs +1 -1
- package/esm2022/lib/services/models/plan.service.mjs +1 -1
- package/esm2022/lib/services/models/poi.service.mjs +27 -27
- package/esm2022/lib/services/models/profile.service.mjs +1 -1
- package/esm2022/lib/services/models/property.service.mjs +1 -1
- package/esm2022/lib/services/models/space.service.mjs +1 -1
- package/esm2022/lib/services/models/template.service.mjs +1 -1
- package/esm2022/lib/services/models/ticket.service.mjs +1 -1
- package/esm2022/lib/services/models/visit.service.mjs +1 -1
- package/esm2022/lib/services/models/zone.service.mjs +1 -1
- package/esm2022/lib/services/navigator.service.mjs +1 -1
- package/esm2022/lib/services/s3.service.mjs +1 -1
- package/esm2022/lib/services/search.service.mjs +1 -1
- package/esm2022/lib/services/support.service.mjs +1 -1
- package/esm2022/lib/services/sweep-locator.service.mjs +1 -1
- package/esm2022/lib/services/tag.service.mjs +16 -16
- package/esm2022/lib/services/threejs-import.service.mjs +1 -1
- package/esm2022/lib/services/threejs.service.mjs +1 -1
- package/esm2022/lib/services/user.service.mjs +1 -1
- package/esm2022/lib/services/utils/matterport-framing.util.mjs +63 -0
- package/esm2022/lib/services/utils/matterport-transform.util.mjs +1 -1
- package/esm2022/lib/services/validators.service.mjs +1 -1
- package/esm2022/lib/services/viewer.service.mjs +1 -1
- package/esm2022/lib/services/zone-drawer.service.mjs +1 -1
- package/esm2022/lib/services/zoneChange.service.mjs +1 -1
- package/esm2022/lib/tokens/matterport-sdk-key.token.mjs +1 -1
- package/esm2022/lib/types.service.mjs +3 -1
- package/esm2022/lib/validators/email.directive.mjs +1 -1
- package/esm2022/lib/validators/no-empty.directive.mjs +1 -1
- package/esm2022/lib/validators/number.directive.mjs +1 -1
- package/esm2022/lib/validators/text.directive.mjs +1 -1
- package/esm2022/public-api.mjs +1 -1
- package/fesm2022/smarterplan-ngx-smarterplan-core.mjs +1192 -263
- package/fesm2022/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/lib/services/matterport-object3d.service.d.ts +125 -5
- package/lib/services/matterport.service.d.ts +106 -7
- package/lib/services/utils/matterport-framing.util.d.ts +40 -0
- package/lib/types.service.d.ts +42 -1
- package/package.json +1 -1
- package/src/assets/vs-app.json +67 -67
|
@@ -622,4 +622,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
622
622
|
providedIn: "root",
|
|
623
623
|
}]
|
|
624
624
|
}], ctorParameters: () => [{ type: i1.BaseUserService }, { type: i2.ZoneService }, { type: i3.PoiService }] });
|
|
625
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL2ZpbHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlDQUF5QztBQUN6QyxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2SixPQUFPLEVBT0gsT0FBTyxFQUNQLGFBQWEsRUFDYixVQUFVLEVBTWIsTUFBTSxrQkFBa0IsQ0FBQztBQVkxQixPQUFPLFdBQVcsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFSekMsSUFBSyxVQU9KO0FBUEQsV0FBSyxVQUFVO0lBQ1gsK0JBQWlCLENBQUE7SUFDakIsNkJBQWUsQ0FBQTtJQUNmLDJCQUFhLENBQUE7SUFDYiwyQkFBYSxDQUFBO0lBQ2IsNkJBQWUsQ0FBQTtJQUNmLGlDQUFtQixDQUFBO0FBQ3ZCLENBQUMsRUFQSSxVQUFVLEtBQVYsVUFBVSxRQU9kO0FBS0QsTUFBTSxPQUFPLGFBQWE7SUFNVjtJQUNBO0lBQ0E7SUFQSixnQkFBZ0IsR0FBb0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVuRCxpQkFBaUIsQ0FBUztJQUVqQyxZQUNZLFdBQTRCLEVBQzVCLFdBQXdCLEVBQ3hCLFVBQXNCO1FBRnRCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQzlCLENBQUM7SUFHTCxxQkFBcUIs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LG9CQUFvQixDQUNyQyxRQUFRLEVBQ1IsT0FBTyxDQUFDLEtBQUssQ0FDaEIsQ0FBQztZQUNOLENBQUM7WUFDRCxvQ0FBb0M7WUFDcEMsNERBQTREO1lBQzVELGdDQUFnQztZQUNoQyxvQkFBb0I7WUFDcEIsU0FBUztZQUNULElBQUk7WUFDSixJQUFJLE1BQU0sS0FBSyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2hDLGVBQWU7b0JBQ1gsSUFBSSxDQUFDLGlDQUFpQyxDQUNsQyxDQUFDLE9BQU8sQ0FBQyxFQUNULFFBQVEsQ0FDWCxDQUFDO1lBQ1YsQ0FBQztRQUNMLENBQUM7UUFDRCxLQUFLLE1BQU0sT0FBTyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xDLElBQ0ksZUFBZSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7Z0JBQ2pDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQ2hDLENBQUM7Z0JBQ0MsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7d0dBaDBCUSxhQUFhOzRHQUFiLGFBQWEsY0FGVixNQUFNOzs0RkFFVCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNhc2UtZGVjbGFyYXRpb25zICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXG4vKiBlc2xpbnQtZGlzYWJsZSBndWFyZC1mb3ItaW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IGdldExldmVsc0JlbG93LCBnZXRIaWdoZXN0TGV2ZWxGb3JNaXNzaW9ucywgZ2V0SGlnaGVzdFJvbGVGb3JNaXNzaW9ucywgZmlsdGVyVW5pcXVlQXJyYXlCeUlELCBnZXRUaHJlZUpzUG9pT3JpZ2luIH0gZnJvbSBcIi4uL2hlbHBlcnMuc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgICBab25lLFxuICAgIEVxdWlwbWVudCxcbiAgICBMZXZlbFN0YXR1cyxcbiAgICBNZWFzdXJlbWVudCxcbiAgICBNaXNzaW9uLFxuICAgIE9yZ2FuaXNhdGlvbixcbiAgICBQb2lUeXBlLFxuICAgIFByb2ZpbGVFbnRpdHksXG4gICAgUm9sZVN0YXR1cyxcbiAgICBTcGFjZSxcbiAgICBUaWNrZXQsXG4gICAgRmVhdHVyZSxcbiAgICBDb21tZW50LFxuICAgIE9iamVjdDNEXG59IGZyb20gXCIuLi90eXBlcy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBQb2lTZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL3BvaS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBab25lU2VydmljZSB9IGZyb20gXCIuL21vZGVscy96b25lLnNlcnZpY2VcIjtcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSB9IGZyb20gXCIuL3VzZXIuc2VydmljZVwiO1xuZW51bSBGaWx0ZXJUeXBlIHtcbiAgICBET01BSU4gPSBcIkRPTUFJTlwiLFxuICAgIExFVkVMID0gXCJMRVZFTFwiLFxuICAgIFJPTEUgPSBcIlJPTEVcIixcbiAgICBaT05FID0gXCJaT05FXCIsXG4gICAgU1BBQ0UgPSBcIlNQQUNFXCIsXG4gICAgSEFTSFRBRyA9IFwiSEFTSFRBR1wiLFxufVxuaW1wb3J0IGxldmVuc2h0ZWluIGZyb20gJ2pzLWxldmVuc2h0ZWluJztcbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiBcInJvb3RcIixcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyU2VydmljZSB7XG4gICAgcHJpdmF0ZSB1cGRhdGVEYXRlRmlsdGVyOiBTdWJqZWN0PERhdGVbXT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgcHVibGljIGN1cnJlbnREYXRlRmlsdGVyOiBEYXRlW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHpvbmVTZXJ2aWNlOiBab25lU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwb2lTZXJ2aWNlOiBQb2lTZXJ2aWNlLFxuICAgICkgeyB9XG5cblxuICAgIGZpbHRlclRpY2tldHNCeURvbWFpbih0aWNrZXRzVG9GaWx0ZXI6IFRpY2tldFtdLCBkb21haW46IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGlja2V0c1RvRmlsdGVyLmZpbHRlcigodGljKSA9PiB0aWMuZG9tYWluSUQgPT09IGRvbWFpbik7XG4gICAgfVxuXG4gICAgZmlsdGVyT2JqZWN0c0J5TGV2ZWwob2JqZWN0c1RvRmlsdGVyOiBhbnlbXSwgbGV2ZWw6IExldmVsU3RhdHVzKTogYW55W10ge1xuICAgICAgICBjb25zdCB2aXNpYmxlTGV2ZWxzID0gZ2V0TGV2ZWxzQmVsb3cobGV2ZWwpO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IG9iamVjdHNUb0ZpbHRlci5maWx0ZXIoKHRpYykgPT5cbiAgICAgICAgICAgIHZpc2libGVMZXZlbHMuaW5jbHVkZXModGljLmxldmVsKSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkO1xuICAgIH1cblxuICAgIGZpbHRlclRpY2tldHNGb3JNaXNzaW9uKFxuICAgICAgICB0aWNrZXRzVG9GaWx0ZXI6IFRpY2tldFtdLFxuICAgICAgICBtaXNzaW9uOiBNaXNzaW9uLFxuICAgICk6IFRpY2tldFtdIHtcbiAgICAgICAgY29uc3QgbWFuYWdlclJvbGVzOiBSb2xlU3RhdHVzW10gPSBbXG4gICAgICAgICAgICBSb2xlU3RhdHVzLk1BTkFHRVIsXG4gICAgICAgICAgICBSb2xlU3RhdHVzLkFETUlOLFxuICAgICAgICAgICAgUm9sZVN0YXR1cy5PV05FUixcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKCFtYW5hZ2VyUm9sZXMuaW5jbHVkZXMobWlzc2lvbi5yb2xlKSkge1xuICAgICAgICAgICAgaWYgKG1pc3Npb24ucm9sZSA9PT0gUm9sZVN0YXR1cy5TRVJWSUNFKSB7XG4gICAgICAgICAgICAgICAgLy8gU0VSVklDRSBjYW4gc2VlIHRpY2tldHMgdG8gd2hpY2ggaGUgaXMgYXNzaWduZWRcbiAgICAgICAgICAgICAgICBjb25zdCB0aWNrZXRzQXNzaWduZWQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgdGlja2V0c1RvRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0LmFzc2lnbmVlcy5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFzc2lnbm1lbnQgb2YgdC5hc3NpZ25lZXMuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXNzaWdubWVudC5taXNzaW9uSUQgPT09IG1pc3Npb24uaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja2V0c0Fzc2lnbmVkLnB1c2godCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aWNrZXRzQXNzaWduZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBPQ0NVUEFOVCBhbmQgVklTSVRPUiBjYW4gc2VlIG9ubHkgdGlja2V0cyB0aGF0IHRoZXkgY3JlYXRlZFxuICAgICAgICAgICAgcmV0dXJuIHRpY2tldHNUb0ZpbHRlci5maWx0ZXIoKHRpY2tldCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aWNrZXQub3duZXJNaXNzaW9uSUQgPT09IG1pc3Npb24uaWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGlja2V0c1RvRmlsdGVyO1xuICAgIH1cblxuICAgIGdldEZpbHRlcnNGb3JSb2xlKHJvbGU6IFJvbGVTdGF0dXMpOiBGaWx0ZXJUeXBlW10ge1xuICAgICAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5BRE1JTjpcbiAgICAgICAgICAgICAgICByZXR1cm4gW0ZpbHRlclR5cGUuTEVWRUxdO1xuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLk1BTkFHRVI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtGaWx0ZXJUeXBlLlpPTkUsIEZpbHRlclR5cGUuTEVWRUxdO1xuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLk9XTkVSOlxuICAgICAgICAgICAgICAgIHJldHVybiBbRmlsdGVyVHlwZS5aT05FLCBGaWx0ZXJUeXBlLkxFVkVMXTtcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5TRVJWSUNFOlxuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuWk9ORSxcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5MRVZFTCxcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5ET01BSU4sXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuUk9MRSwgLy8gdGhhdCBpcyB0aGUgbW9zdCBzZXZlcmUgZmlsdGVyXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5PQ0NVUEFOVDpcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLlpPTkUsXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuRE9NQUlOLFxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLlJPTEUsXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuTEVWRUwsXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuSEFTSFRBRyxcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLlZJU0lUT1I6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5aT05FLFxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkxFVkVMLFxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkRPTUFJTixcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5ST0xFLFxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkhBU0hUQUcsXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5WSVNJVE9SX01VU0VVTTpcbiAgICAgICAgICAgICAgICByZXR1cm4gW0ZpbHRlclR5cGUuWk9ORSwgRmlsdGVyVHlwZS5MRVZFTCwgRmlsdGVyVHlwZS5IQVNIVEFHXTtcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5HVUlERV9NVVNFVU06XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtGaWx0ZXJUeXBlLkxFVkVMXTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtGaWx0ZXJUeXBlLkxFVkVMXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGZpbHRlck9iamVjdHNGb3JDdXJyZW50VXNlckluU3BhY2UoXG4gICAgICAgIG9iamVjdHM6IE9iamVjdDNEW10sXG4gICAgICAgIHNwYWNlSUQ6IHN0cmluZyxcbiAgICApOiBQcm9taXNlPE9iamVjdDNEW10+IHtcbiAgICAgICAgY29uc3QgZmluYWxPYmplY3QzRHM6IE9iamVjdDNEW10gPSBbXTtcbiAgICAgICAgbGV0IGRvbUZpbHRlcmVkOiBPYmplY3QzRFtdID0gb2JqZWN0cztcbiAgICAgICAgbGV0IGxldmVsRmlsdGVyZWQ6IE9iamVjdDNEW10gPSBvYmplY3RzO1xuICAgICAgICBsZXQgem9uZUZpbHRlcmVkOiBPYmplY3QzRFtdID0gb2JqZWN0cztcbiAgICAgICAgY29uc3QgbWlzc2lvbnMgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9ucztcbiAgICAgICAgaWYgKG1pc3Npb25zKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhY2VNaXNzaW9ucyA9IG1pc3Npb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAobSkgPT4gbS5zcGFjZUlEID09PSBzcGFjZUlELFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50U3BhY2VNaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBvYmogb2YgbGV2ZWxGaWx0ZXJlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21GaWx0ZXJlZC5pbmNsdWRlcyhvYmopICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lRmlsdGVyZWQuaW5jbHVkZXMob2JqKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsT2JqZWN0M0RzLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmluYWxPYmplY3QzRHM7XG4gICAgfVxuXG4gICAgYXN5bmMgZmlsdGVyVGlja2V0c0ZvckN1cnJlbnRVc2VySW5TcGFjZShcbiAgICAgICAgdGlja2V0czogVGlja2V0W10sXG4gICAgICAgIHNwYWNlSUQ6IHN0cmluZyxcbiAgICApOiBQcm9taXNlPFRpY2tldFtdPiB7XG4gICAgICAgIGNvbnN0IGZpbmFsVGlja2V0czogVGlja2V0W10gPSBbXTtcbiAgICAgICAgbGV0IGRvbUZpbHRlcmVkOiBUaWNrZXRbXSA9IHRpY2tldHM7XG4gICAgICAgIGxldCByb2xlRmlsdGVyZWQ6IFRpY2tldFtdID0gdGlja2V0cztcbiAgICAgICAgbGV0IGxldmVsRmlsdGVyZWQ6IFRpY2tldFtdID0gdGlja2V0cztcbiAgICAgICAgbGV0IHpvbmVGaWx0ZXJlZDogVGlja2V0W10gPSB0aWNrZXRzO1xuICAgICAgICBjb25zdCBtaXNzaW9ucyA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb25zO1xuICAgICAgICBpZiAobWlzc2lvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTcGFjZU1pc3Npb25zID0gbWlzc2lvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChtKSA9PiBtLnNwYWNlSUQgPT09IHNwYWNlSUQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRTcGFjZU1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0TGVsZWwgPVxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0TGV2ZWxGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdFJvbGUgPVxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0Um9sZUZvck1pc3Npb25zKGN1cnJlbnRTcGFjZU1pc3Npb25zKTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkhpZ2hlc3QgbGV2ZWw6IFwiLCBoaWdoZXN0TGVsZWwsIFwiLCBIaWdoZXN0IFJvbGU6IFwiLCBoaWdoZXN0Um9sZSlcblxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmdldEZpbHRlcnNGb3JSb2xlKGhpZ2hlc3RSb2xlKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuRE9NQUlOKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZG9tYWluczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbSBvZiBjdXJyZW50U3BhY2VNaXNzaW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtLmRvbWFpbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWlucyA9IFsuLi5kb21haW5zLCAuLi5tLmRvbWFpbnNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhbGxEb21haW5zRmlsdGVyZWQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZCBvZiBkb21haW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudERvbUZpbHRlcmVkID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJUaWNrZXRzQnlEb21haW4odGlja2V0cywgZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsRG9tYWluc0ZpbHRlcmVkID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5hbGxEb21haW5zRmlsdGVyZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnREb21GaWx0ZXJlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZG9tRmlsdGVyZWQgPSBhbGxEb21haW5zRmlsdGVyZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5ST0xFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0Um9sZU1pc3Npb24gPSBjdXJyZW50U3BhY2VNaXNzaW9ucy5maW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtKSA9PiBtLnJvbGUgPT09IGhpZ2hlc3RSb2xlLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGVGaWx0ZXJlZCA9IHRoaXMuZmlsdGVyVGlja2V0c0Zvck1pc3Npb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja2V0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoZXN0Um9sZU1pc3Npb24sXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5MRVZFTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxGaWx0ZXJlZCA9IHRoaXMuZmlsdGVyT2JqZWN0c0J5TGV2ZWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja2V0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoZXN0TGVsZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tldHMsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGtlZXAgb25seSB0aWNrZXRzIHByZXNlbnQgaW4gYWxsIGZpbHRlcmVkIGFycmF5c1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGRvbUZpbHRlcmVkKTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyb2xlRmlsdGVyZWQpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGxldmVsRmlsdGVyZWQpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHpvbmVGaWx0ZXJlZCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB0aWMgb2YgbGV2ZWxGaWx0ZXJlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21GaWx0ZXJlZC5pbmNsdWRlcyh0aWMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlRmlsdGVyZWQuaW5jbHVkZXModGljKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkLmluY2x1ZGVzKHRpYylcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFRpY2tldHMucHVzaCh0aWMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZpbmFsVGlja2V0cyk7XG4gICAgICAgIHJldHVybiBmaW5hbFRpY2tldHM7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlVG9EYXRhRmlsdGVyVXBkYXRlKFxuICAgICAgICBuZXh0PzogKHZhbHVlOiBhbnkpID0+IHZvaWQsXG4gICAgICAgIGVycm9yPzogKGVycm9yOiBhbnkpID0+IHZvaWQsXG4gICAgICAgIGNvbXBsZXRlPzogKCkgPT4gdm9pZCxcbiAgICApOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICBjb25zdCBzID0gdGhpcy51cGRhdGVEYXRlRmlsdGVyLnN1YnNjcmliZShuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgICAgICByZXR1cm4gcztcbiAgICB9XG5cbiAgICBkYXRlRmlsdGVyVXBkYXRlZChkYXRlUmFuZ2U6IERhdGVbXSB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50RGF0ZUZpbHRlciA9IGRhdGVSYW5nZTtcbiAgICAgICAgdGhpcy51cGRhdGVEYXRlRmlsdGVyLm5leHQoZGF0ZVJhbmdlKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJPYmplY3RzRm9yRGF0ZVJhbmdlKG9iamVjdHM6IGFueVtdLCBkYXRlUmFuZ2U6IERhdGVbXSk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdHMuZmlsdGVyKChvYmplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWRBdERhdGUgPSBuZXcgRGF0ZShvYmplY3QuY3JlYXRlZEF0KTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0RGF0ZSA+PSBkYXRlUmFuZ2VbMF0gJiYgY3JlYXRlZEF0RGF0ZSA8PSBkYXRlUmFuZ2VbMV1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZpbHRlck1lYXN1cmVtZW50c0ZvckRhdGVSYW5nZShcbiAgICAgICAgbWVhc3VyZW1lbnRzOiBNZWFzdXJlbWVudFtdLFxuICAgICAgICBkYXRlUmFuZ2U6IERhdGVbXSxcbiAgICApOiBNZWFzdXJlbWVudFtdIHtcbiAgICAgICAgY29uc3QgaXNJbnZhbGlkRGF0ZSA9IChkOiBEYXRlKSA9PiBkIGluc3RhbmNlb2YgRGF0ZSAmJiBpc05hTihkLmdldFRpbWUoKSk7XG5cbiAgICAgICAgaWYgKGRhdGVSYW5nZS5ldmVyeShkID0+IGQgaW5zdGFuY2VvZiBEYXRlICYmIGlzSW52YWxpZERhdGUoZCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVhc3VyZW1lbnRzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1lYXN1cmVtZW50cy5maWx0ZXIoKG1lYXN1cmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWRBdERhdGUgPSBuZXcgRGF0ZShtZWFzdXJlLmNvbW1lbnQuY3JlYXRlZEF0KTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0RGF0ZSA+PSBkYXRlUmFuZ2VbMF0gJiYgY3JlYXRlZEF0RGF0ZSA8PSBkYXRlUmFuZ2VbMV1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIGZpbHRlck9iamVjdHNGb3Jab25lKFxuICAgICAgICBvYmplY3RzOiBhbnlbXSwgLy8gVE9ETzogcmVtb3ZlIGFueSBoZXJlLi5cbiAgICAgICAgem9uZUlEOiBzdHJpbmcgPSBudWxsLFxuICAgICAgICB6b25lOiBab25lID0gbnVsbCxcbiAgICApOiBQcm9taXNlPGFueVtdPiB7XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkT2JqZWN0cyA9IFtdO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIG9iamVjdHMubWFwKGFzeW5jIChvYmplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2lzID0gb2JqZWN0LnBvaXM7XG4gICAgICAgICAgICAgICAgaWYgKHBvaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgW3BvaV0gPSBwb2lzLml0ZW1zO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFpvbmVzIGFyZSBkZWZpbmVkIGJ5IHRoZSBzd2VlcHMgdGhleSBjb250YWluLCBzbyBhbiBvYmplY3QgcGxhY2VkIGluIGEgdmlld2VyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgaGFzIG5vIHN3ZWVwcyBiZWxvbmdzIHRvIG5vIHpvbmUgYXQgYWxsLiBGaWx0ZXJpbmcgYnkgem9uZSB0aGVuIHJlbW92ZXNcbiAgICAgICAgICAgICAgICAgICAgLy8gaXQgZnJvbSBldmVyeSB6b25lIHJhdGhlciB0aGFuIGZyb20gdGhlIHdyb25nIG9uZSAtIHdoaWNoIGlzIHdoYXQga2VwdCB0YWdzXG4gICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZWQgaW4gdGhlIFRocmVlLmpzIHZpZXdlciBmcm9tIGV2ZXIgYXBwZWFyaW5nIGluIE1hdHRlcnBvcnQuIFRoZSB0YWdcbiAgICAgICAgICAgICAgICAgICAgLy8gdmlzaWJpbGl0eSBmaWx0ZXIgYWxyZWFkeSByZWFkcyBcIm5vIHN3ZWVwXCIgYXMgXCJub3QgZmxvb3Itc2NvcGVkLCBzaG93IGl0XCI7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIHNhbWUgcnVsZSBhcHBsaWVkIHRvIHpvbmVzLlxuICAgICAgICAgICAgICAgICAgICBpZiAocG9pICYmIHBvaS5jb29yZGluYXRlICYmICFwb2kubWF0dGVycG9ydFN3ZWVwSUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIC4uLnVubGVzcyBpdCB3YXMgcGxhY2VkIGluIGEgM0QgbW9kZWwuIFdpdGggbm8gc3dlZXAsIHRoYXQgbW9kZWwgd2FzIG5ldmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aWVkIHRvIHRoaXMgdG91cjogdGhlIGNvb3JkaW5hdGVzIGFyZSB0aGUgbW9kZWwncyBvd24sIGFuZCBoZXJlIHRoZXkgd291bGRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHB1dCB0aGUgdGFnIHNvbWV3aGVyZSBhcmJpdHJhcnkuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWdldFRocmVlSnNQb2lPcmlnaW4ocG9pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkT2JqZWN0cy5wdXNoKG9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAocG9pICYmIHpvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh6b25lLnN3ZWVwSURzICYmIHpvbmUuc3dlZXBJRHMuaW5jbHVkZXMocG9pLm1hdHRlcnBvcnRTd2VlcElEKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBvaVNlcnZpY2UucG9pSXNWaXJ0dWFsKHBvaSkgJiYgem9uZS5sYXllciAmJiB6b25lLmxheWVyLm5hbWUgPT09IFwiRkxPT1JcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBpbmNsdWRlIGluIEZsb29yIHpvbmUgb25seVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZE9iamVjdHMucHVzaChvYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucG9pU2VydmljZS5wb2lJc1ZpcnR1YWwocG9pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZE9iamVjdHMucHVzaChvYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocG9pICYmICF6b25lICYmIHpvbmVJRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgem9uZXMgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmdldFpvbmVzRm9yT2JqZWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgem9uZXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b25lcy5zb21lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoem9uZV8pID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b25lXy5pZCA9PT0gem9uZUlEIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b25lXy5wYXJlbnRJRCA9PT0gem9uZUlELFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkT2JqZWN0cy5wdXNoKG9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkT2JqZWN0cztcbiAgICB9XG5cbiAgICBmaWx0ZXJFcXVpcG1lbnRzQnlEb21haW5MaXN0KFxuICAgICAgICBlcXVpcG1lbnRzOiBFcXVpcG1lbnRbXSxcbiAgICAgICAgZG9tYWluSURMaXN0OiBzdHJpbmdbXSxcbiAgICApOiBFcXVpcG1lbnRbXSB7XG4gICAgICAgIGxldCBmaWx0ZXJlZCA9IFtdO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEJ5RG9tYWluID0gZXF1aXBtZW50cy5maWx0ZXIoKGVxdWlwKSA9PlxuICAgICAgICAgICAgZG9tYWluSURMaXN0LmluY2x1ZGVzKGVxdWlwLmRvbWFpbklEKSxcbiAgICAgICAgKTtcbiAgICAgICAgZmlsdGVyZWQgPSBbLi4uZmlsdGVyZWQsIC4uLmZpbHRlcmVkQnlEb21haW5dO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZEJ5UGFyZW50RG9tYWluID0gZXF1aXBtZW50cy5maWx0ZXIoXG4gICAgICAgICAgICAoZXF1aXApID0+XG4gICAgICAgICAgICAgICAgZXF1aXAuZG9tYWluICYmXG4gICAgICAgICAgICAgICAgZXF1aXAuZG9tYWluLnBhcmVudElEICYmXG4gICAgICAgICAgICAgICAgZG9tYWluSURMaXN0LmluY2x1ZGVzKGVxdWlwLmRvbWFpbi5wYXJlbnRJRCksXG4gICAgICAgICk7XG4gICAgICAgIGZpbHRlcmVkID0gWy4uLmZpbHRlcmVkLCAuLi5maWx0ZXJlZEJ5UGFyZW50RG9tYWluXTtcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChmaWx0ZXJlZCk7XG4gICAgfVxuXG5cbiAgICAvLyBOb3QgaW1wbGVtZW50ZWQgeWV0IVxuICAgIC8vIGZpbHRlck9iamVjdHMzREJ5RG9tYWluTGlzdChcbiAgICAvLyAgIG9iamVjdHMzRDogT2JqZWN0M0RbXSxcbiAgICAvLyAgIGRvbWFpbklETGlzdDogc3RyaW5nW10sXG4gICAgLy8gKTogT2JqZWN0M0RbXSB7XG4gICAgLy8gICBsZXQgZmlsdGVyZWQgPSBbXTtcbiAgICAvLyAgIGNvbnN0IGZpbHRlcmVkQnlEb21haW4gPSBvYmplY3RzM0QuZmlsdGVyKChlcXVpcCkgPT5cbiAgICAvLyAgICAgZG9tYWluSURMaXN0LmluY2x1ZGVzKGVxdWlwLmRvbWFpbklEKSxcbiAgICAvLyAgICk7XG4gICAgLy8gICBmaWx0ZXJlZCA9IFsuLi5maWx0ZXJlZCwgLi4uZmlsdGVyZWRCeURvbWFpbl07XG4gICAgLy8gICBjb25zdCBmaWx0ZXJlZEJ5UGFyZW50RG9tYWluID0gb2JqZWN0czNELmZpbHRlcihcbiAgICAvLyAgICAgKG9iaikgPT5cbiAgICAvLyAgICAgICBvYmouZG9tYWluICYmXG4gICAgLy8gICAgICAgb2JqLmRvbWFpbi5wYXJlbnRJRCAmJlxuICAgIC8vICAgICAgIGRvbWFpbklETGlzdC5pbmNsdWRlcyhvYmouZG9tYWluLnBhcmVudElEKSxcbiAgICAvLyAgICk7XG4gICAgLy8gICBmaWx0ZXJlZCA9IFsuLi5maWx0ZXJlZCwgLi4uZmlsdGVyZWRCeVBhcmVudERvbWFpbl07XG4gICAgLy8gICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKGZpbHRlcmVkKTtcbiAgICAvLyB9XG5cbiAgICBmaWx0ZXJFcXVpcG1lbnRzRm9yVGVybShlcXVpcHM6IEVxdWlwbWVudFtdLCB0ZXJtOiBzdHJpbmcpOiBFcXVpcG1lbnRbXSB7XG4gICAgICAgIC8vIGZpbHRlciBkb21haW5zXG4gICAgICAgIGxldCBieURvbWFpbiA9IGVxdWlwcy5maWx0ZXIoKGVxKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXEuZG9tYWluICYmIGVxLmRvbWFpbi5uYW1lKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZERvbWFpbiA9IGVxLmRvbWFpbi5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbGV2ID0gbGV2ZW5zaHRlaW4obm9ybWFsaXplZERvbWFpbiwgdGVybSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxldiA8PSAyIHx8IG5vcm1hbGl6ZWREb21haW4uaW5jbHVkZXModGVybSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBieVBhcmVudERvbWFpbiA9IGVxdWlwcy5maWx0ZXIoKGVxKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXEuZG9tYWluICYmIGVxLmRvbWFpbi5wYXJlbnRJRCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXJlbnQgPSBlcS5kb21haW4ucGFyZW50Lm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsZXYgPSBsZXZlbnNodGVpbihub3JtYWxpemVkUGFyZW50LCB0ZXJtKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGV2IDw9IDIgfHwgbm9ybWFsaXplZFBhcmVudC5pbmNsdWRlcyh0ZXJtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJ5RG9tYWluID0gWy4uLmJ5RG9tYWluLCAuLi5ieVBhcmVudERvbWFpbl07XG4gICAgICAgIC8vIGZpbHRlciBuYW1lXG4gICAgICAgIGxldCBieU5hbWUgPSBbXTtcbiAgICAgICAgY29uc3QgdGVybXMgPSB0ZXJtLnNwbGl0KFwiIFwiKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5sZW5ndGggPiAyKTtcbiAgICAgICAgZm9yIChjb25zdCBlcSBvZiBlcXVpcHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gZXEubmFtZVxuICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgLnNwbGl0KFwiIFwiKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5sZW5ndGggPiAyKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGVybXMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHdvcmQgb2Ygd29yZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxldmVuc2h0ZWluKHRva2VuLCB3b3JkKSA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLnB1c2godHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCA9PT0gdGVybXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgYnlOYW1lLnB1c2goZXEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnlOYW1lU2ltcGxlID0gZXF1aXBzLmZpbHRlcigoZXEpID0+XG4gICAgICAgICAgICBlcS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSksXG4gICAgICAgICk7XG4gICAgICAgIGJ5TmFtZSA9IFsuLi5ieU5hbWUsIC4uLmJ5TmFtZVNpbXBsZV07XG4gICAgICAgIC8vIGJ5IHNlcmlhbCBudW1iZXJcbiAgICAgICAgY29uc3QgYnlTZXJpYWxOdW1iZXIgPSBlcXVpcHMuZmlsdGVyKFxuICAgICAgICAgICAgKGVxKSA9PiBlcS5zZXJpYWxOdW1iZXIgJiYgZXEuc2VyaWFsTnVtYmVyLnRvTG93ZXJDYXNlKCkgPT09IHRlcm0sXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFsuLi5ieURvbWFpbiwgLi4uYnlOYW1lLCAuLi5ieVNlcmlhbE51bWJlcl07XG4gICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQocmVzdWx0KTtcbiAgICB9XG5cbiAgICBmaWx0ZXJUaWNrZXRzRm9yVGVybSh0aWNrZXRzOiBUaWNrZXRbXSwgdGVybTogc3RyaW5nKTogVGlja2V0W10ge1xuICAgICAgICAvLyBmaWx0ZXIgdGVybSBpbiB0aXRsZSBhbmQgZGVzY3JpcHRpb25cbiAgICAgICAgY29uc3QgYnlUaXRsZSA9IHRoaXMuZmlsdGVyT2JqZWN0c0ZvclRlcm0odGlja2V0cywgdGVybSk7XG4gICAgICAgIC8vIGJ5IGVxdWlwbWVudFxuICAgICAgICBjb25zdCBieUVxdWlwbWVudCA9IHRpY2tldHMuZmlsdGVyKFxuICAgICAgICAgICAgKHRpY2tldCkgPT5cbiAgICAgICAgICAgICAgICB0aWNrZXQuZXF1aXBtZW50cyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyRXF1aXBtZW50c0ZvclRlcm0odGlja2V0LmVxdWlwbWVudHMsIHRlcm0pLmxlbmd0aCA+XG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChbLi4uYnlUaXRsZSwgLi4uYnlFcXVpcG1lbnRdKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJMb2NhdGlvbnNGb3JUZXJtKGxvY2F0aW9uczogU3BhY2VbXSwgdGVybTogc3RyaW5nKTogU3BhY2VbXSB7XG4gICAgICAgIC8vIGJ5IG5hbWVcbiAgICAgICAgY29uc3QgYnlOYW1lID0gbG9jYXRpb25zLmZpbHRlcigobG9jKSA9PlxuICAgICAgICAgICAgbG9jLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKSxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gYnkgYWRkcmVzc1xuICAgICAgICBjb25zdCBieUFkZHJlc3MgPSBsb2NhdGlvbnMuZmlsdGVyKChsb2MpID0+XG4gICAgICAgICAgICBsb2MuYWRkcmVzc2VzLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoWy4uLmJ5TmFtZSwgLi4uYnlBZGRyZXNzXSk7XG4gICAgfVxuXG4gICAgZmlsdGVyT3JnYW5pc2F0aW9uc0ZvclRlcm0oXG4gICAgICAgIG9yZ3M6IE9yZ2FuaXNhdGlvbltdLFxuICAgICAgICB0ZXJtOiBzdHJpbmcsXG4gICAgKTogT3JnYW5pc2F0aW9uW10ge1xuICAgICAgICBjb25zdCBieU5hbWUgPSBvcmdzLmZpbHRlcigob3JnKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3b3JkcyA9IG9yZy5uYW1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCIgXCIpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB3b3Jkcy5zb21lKFxuICAgICAgICAgICAgICAgICAgICAod29yZCkgPT4gd29yZC5sZW5ndGggPiAyICYmIGxldmVuc2h0ZWluKHdvcmQsIHRlcm0pIDw9IDEsXG4gICAgICAgICAgICAgICAgKSB8fCBvcmcubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGJ5TmFtZTtcbiAgICB9XG5cbiAgICBmaWx0ZXJVc2Vyc0ZvclRlcm0odXNlcnM6IFByb2ZpbGVFbnRpdHlbXSwgdGVybTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGJ5TmFtZSA9IHVzZXJzLmZpbHRlcigodXNlcikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd29yZHMgPSB1c2VyLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCIgXCIpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB3b3Jkcy5zb21lKFxuICAgICAgICAgICAgICAgICAgICAod29yZCkgPT4gd29yZC5sZW5ndGggPiAyICYmIGxldmVuc2h0ZWluKHdvcmQsIHRlcm0pIDw9IDEsXG4gICAgICAgICAgICAgICAgKSB8fCB1c2VyLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYnlOYW1lO1xuICAgIH1cblxuICAgIGFzeW5jIGZpbHRlckZlYXR1cmVzRm9yQ3VycmVudFVzZXJJblNwYWNlKFxuICAgICAgICBmZWF0dXJlczogRmVhdHVyZVtdLFxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTxGZWF0dXJlW10+IHtcbiAgICAgICAgY29uc3QgZmluYWxGZWF0dXJlczogRmVhdHVyZVtdID0gW107XG4gICAgICAgIGxldCBsZXZlbEZpbHRlcmVkOiBGZWF0dXJlW10gPSBmZWF0dXJlcztcbiAgICAgICAgbGV0IHpvbmVGaWx0ZXJlZDogRmVhdHVyZVtdID0gZmVhdHVyZXM7XG4gICAgICAgIGxldCBoYXNodGFnRmlsdGVyZWQ6IEZlYXR1cmVbXSA9IGZlYXR1cmVzO1xuICAgICAgICBjb25zdCBtaXNzaW9ucyA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb25zO1xuICAgICAgICBpZiAobWlzc2lvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTcGFjZU1pc3Npb25zID0gbWlzc2lvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChtKSA9PiBtLnNwYWNlSUQgPT09IHNwYWNlSUQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRTcGFjZU1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0TGVsZWwgPVxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0TGV2ZWxGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdFJvbGUgPVxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0Um9sZUZvck1pc3Npb25zKGN1cnJlbnRTcGFjZU1pc3Npb25zKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmdldEZpbHRlcnNGb3JSb2xlKGhpZ2hlc3RSb2xlKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuTEVWRUwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsRmlsdGVyZWQgPSB0aGlzLmZpbHRlck9iamVjdHNCeUxldmVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hlc3RMZWxlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLkhBU0hUQUcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2h0YWdGaWx0ZXJlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJGZWF0dXJlc0J5SGFzaHRhZ3NBbmRMb2NhbGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBsZXZlbEZpbHRlcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2h0YWdGaWx0ZXJlZC5pbmNsdWRlcyhmZWF0dXJlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkLmluY2x1ZGVzKGZlYXR1cmUpXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxGZWF0dXJlcy5wdXNoKGZlYXR1cmUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaW5hbEZlYXR1cmVzO1xuICAgIH1cblxuICAgIGZpbHRlckZlYXR1cmVzRm9yVGVybShmZWF0dXJlczogRmVhdHVyZVtdLCB0ZXJtOiBzdHJpbmcpOiBGZWF0dXJlW10ge1xuICAgICAgICAvLyBmaWx0ZXIgdGVybSBpbiB0aXRsZVxuICAgICAgICBjb25zdCBieVRpdGxlID0gdGhpcy5maWx0ZXJPYmplY3RzRm9yVGVybShmZWF0dXJlcywgdGVybSk7XG4gICAgICAgIC8vIGJ5IGNvbW1lbnRzXG4gICAgICAgIGNvbnN0IGJ5Q29tbWVudCA9IGZlYXR1cmVzLmZpbHRlcihcbiAgICAgICAgICAgIChmZWF0dXJlKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyT2JqZWN0c0ZvclRlcm0oZmVhdHVyZS5jb21tZW50cy5pdGVtcywgdGVybSkubGVuZ3RoID5cbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKFsuLi5ieVRpdGxlLCAuLi5ieUNvbW1lbnRdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBvYmplY3RzIEFycmF5IG9mIENvbW1lbnRzLCBUaWNrZXRzLCBGZWF0dXJlcy4gT2JsaWdhdG9yeSBwcm9wb3J0aWVzOiB0aXRsZSwgZGVzY3JpcHRpb25cbiAgICAgKiBAcGFyYW0gdGVybSBzdHJpbmdcbiAgICAgKi9cbiAgICBmaWx0ZXJPYmplY3RzRm9yVGVybShvYmplY3RzOiBhbnlbXSwgdGVybTogc3RyaW5nKTogYW55W10ge1xuICAgICAgICAvLyBmaWx0ZXIgdGVybSBpbiB0aXRsZVxuICAgICAgICBjb25zdCBieVRpdGxlID0gb2JqZWN0cy5maWx0ZXIoKGZlYXR1cmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gZmVhdHVyZS50aXRsZS50b0xvd2VyQ2FzZSgpLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgd29yZHMuc29tZShcbiAgICAgICAgICAgICAgICAgICAgKHdvcmQpID0+IHdvcmQubGVuZ3RoID4gMiAmJiBsZXZlbnNodGVpbih3b3JkLCB0ZXJtKSA8PSAxLFxuICAgICAgICAgICAgICAgICkgfHwgZmVhdHVyZS50aXRsZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gdGVybSBwcmVzZW50IGluIGRlc2NyaXB0aW9uXG4gICAgICAgIGNvbnN0IGJ5RGVzY3JpcHRpb24gPSBvYmplY3RzLmZpbHRlcihcbiAgICAgICAgICAgIChmZWF0dXJlKSA9PlxuICAgICAgICAgICAgICAgIGZlYXR1cmUuZGVzY3JpcHRpb24gJiZcbiAgICAgICAgICAgICAgICBmZWF0dXJlLmRlc2NyaXB0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoWy4uLmJ5VGl0bGUsIC4uLmJ5RGVzY3JpcHRpb25dKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJNaXNzaW9uQnlTdGFydFRpbWVEYXRlRm9yRGF0ZVJhbmdlKFxuICAgICAgICBtaXNzaW9uczogYW55W10sXG4gICAgICAgIGRhdGVSYW5nZTogRGF0ZVtdLFxuICAgICk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIG1pc3Npb25zLmZpbHRlcigobWlzc2lvbikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnREYXRlVGltZSA9IG5ldyBEYXRlKG1pc3Npb24uc3RhcnREYXRlVGltZSk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHN0YXJ0RGF0ZVRpbWUgPj0gZGF0ZVJhbmdlWzBdICYmIHN0YXJ0RGF0ZVRpbWUgPD0gZGF0ZVJhbmdlWzFdXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBhcHBseVpvbmVGaWx0ZXJGb3JNaXNzaW9ucyhcbiAgICAgICAgY3VycmVudFNwYWNlTWlzc2lvbnM6IE1pc3Npb25bXSxcbiAgICAgICAgb2JqZWN0czogYW55W10sXG4gICAgKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgICAgICBjb25zdCBhbGxvd2VkWm9uZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBtaXNzaW9uIG9mIGN1cnJlbnRTcGFjZU1pc3Npb25zKSB7XG4gICAgICAgICAgICBpZiAobWlzc2lvbi56b25lSUQpIHtcbiAgICAgICAgICAgICAgICBhbGxvd2VkWm9uZXMucHVzaChtaXNzaW9uLnpvbmVJRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsbG93ZWRab25lcy5sZW5ndGggPT09IGN1cnJlbnRTcGFjZU1pc3Npb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IGFsbFpvbmVGaWx0ZXJlZCA9IFtdO1xuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgYWxsb3dlZFpvbmVzLm1hcChhc3luYyAoem9uZUlEKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRab25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmZpbHRlck9iamVjdHNGb3Jab25lKFxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVJRCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgYWxsWm9uZUZpbHRlcmVkID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uYWxsWm9uZUZpbHRlcmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudFpvbmVGaWx0ZXJlZCxcbiAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKGFsbFpvbmVGaWx0ZXJlZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iamVjdHM7XG4gICAgfVxuXG4gICAgYXN5bmMgZmlsdGVyRXF1aXBtZW50c0ZvckN1cnJlbnRVc2VySW5TcGFjZShcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxuICAgICAgICBlcXVpcHM6IEVxdWlwbWVudFtdLFxuICAgICk6IFByb21pc2U8RXF1aXBtZW50W10+IHtcbiAgICAgICAgY29uc3QgZmluYWxFcXVpcHM6IEVxdWlwbWVudFtdID0gW107XG4gICAgICAgIGxldCBkb21GaWx0ZXJlZDogRXF1aXBtZW50W10gPSBlcXVpcHM7XG4gICAgICAgIGNvbnN0IHJvbGVGaWx0ZXJlZDogRXF1aXBtZW50W10gPSBlcXVpcHM7XG4gICAgICAgIGNvbnN0IGxldmVsRmlsdGVyZWQ6IEVxdWlwbWVudFtdID0gZXF1aXBzO1xuICAgICAgICBsZXQgem9uZUZpbHRlcmVkOiBFcXVpcG1lbnRbXSA9IGVxdWlwcztcbiAgICAgICAgY29uc3QgbWlzc2lvbnMgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9ucztcbiAgICAgICAgaWYgKG1pc3Npb25zKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhY2VNaXNzaW9ucyA9IG1pc3Npb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAobSkgPT4gbS5zcGFjZUlEID09PSBzcGFjZUlELFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50U3BhY2VNaXNzaW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdExlbGVsID1cbiAgICAgICAgICAgICAgICAgICAgZ2V0SGlnaGVzdExldmVsRm9yTWlzc2lvbnMoY3VycmVudFNwYWNlTWlzc2lvbnMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhpZ2hlc3RSb2xlID1cbiAgICAgICAgICAgICAgICAgICAgZ2V0SGlnaGVzdFJvbGVGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJIaWdoZXN0IGxldmVsOiBcIiwgaGlnaGVzdExlbGVsLCBcIiwgSGlnaGVzdCBSb2xlOiBcIiwgaGlnaGVzdFJvbGUpXG5cbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShoaWdoZXN0Um9sZSk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgZmlsdGVycykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLkRPTUFJTikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRvbWFpbnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG0gb2YgY3VycmVudFNwYWNlTWlzc2lvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobS5kb21haW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbnMgPSBbLi4uZG9tYWlucywgLi4ubS5kb21haW5zXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhbGxEb21haW5zRmlsdGVyZWQgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudERvbUZpbHRlcmVkID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckVxdWlwbWVudHNCeURvbWFpbkxpc3QoZXF1aXBzLCBkb21haW5zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbERvbWFpbnNGaWx0ZXJlZCA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5hbGxEb21haW5zRmlsdGVyZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudERvbUZpbHRlcmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbUZpbHRlcmVkID0gYWxsRG9tYWluc0ZpbHRlcmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuUk9MRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgaGlnaGVzdFJvbGVNaXNzaW9uID0gY3VycmVudFNwYWNlTWlzc2lvbnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAobSkgPT4gbS5yb2xlID09PSBoaWdoZXN0Um9sZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLkxFVkVMKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPLCBlcXVpcG1lbnQgZG9lcyBub3QgaGF2ZSBsZXZlbFxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWlwcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB0aWMgb2YgbGV2ZWxGaWx0ZXJlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21GaWx0ZXJlZC5pbmNsdWRlcyh0aWMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlRmlsdGVyZWQuaW5jbHVkZXModGljKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkLmluY2x1ZGVzKHRpYylcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbEVxdWlwcy5wdXNoKHRpYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbmFsRXF1aXBzO1xuICAgIH1cblxuICAgIGFzeW5jIGZpbHRlck1lYXN1cmVtZW50c0ZvckN1cnJlbnRVc2VySW5TcGFjZShcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxuICAgICAgICBjb21tZW50czogQ29tbWVudFtdLFxuICAgICk6IFByb21pc2U8Q29tbWVudFtdPiB7XG4gICAgICAgIGxldCBmaW5hbE1lYXN1cmVtZW50czogQ29tbWVudFtdID0gW107XG4gICAgICAgIGxldCB6b25lRmlsdGVyZWQ6IENvbW1lbnRbXSA9IGNvbW1lbnRzO1xuICAgICAgICBjb25zdCBtaXNzaW9ucyA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb25zO1xuICAgICAgICBpZiAobWlzc2lvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTcGFjZU1pc3Npb25zID0gbWlzc2lvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChtKSA9PiBtLnNwYWNlSUQgPT09IHNwYWNlSUQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRTcGFjZU1pc3Npb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0Um9sZSA9XG4gICAgICAgICAgICAgICAgICAgIGdldEhpZ2hlc3RSb2xlRm9yTWlzc2lvbnMoY3VycmVudFNwYWNlTWlzc2lvbnMpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IHRoaXMuZ2V0RmlsdGVyc0ZvclJvbGUoaGlnaGVzdFJvbGUpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbE1lYXN1cmVtZW50cyA9IHpvbmVGaWx0ZXJlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmluYWxNZWFzdXJlbWVudHM7XG4gICAgfVxuXG4gICAgYXN5bmMgaXNPYmplY3RBbGxvd2VkRm9yVXNlckluU3BhY2UoXG4gICAgICAgIG9iamVjdDogT2JqZWN0LFxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IG1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKHNwYWNlSUQpO1xuICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShtaXNzaW9uLnJvbGUpO1xuICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZmlsdGVyID09PSBGaWx0ZXJUeXBlLkxFVkVMICYmXG4gICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgXCJsZXZlbFwiKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGV2ZWxGaWx0ZXJlZCA9IHRoaXMuZmlsdGVyT2JqZWN0c0J5TGV2ZWwoXG4gICAgICAgICAgICAgICAgICAgIFtvYmplY3RdLFxuICAgICAgICAgICAgICAgICAgICBtaXNzaW9uLmxldmVsLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKGxldmVsRmlsdGVyZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLlpPTkUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB6b25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxuICAgICAgICAgICAgICAgICAgICBbbWlzc2lvbl0sXG4gICAgICAgICAgICAgICAgICAgIFtvYmplY3RdLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKHpvbmVGaWx0ZXJlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmaWx0ZXJUZW1wbGF0ZXNGb3JUZXJtKG1pc3Npb25zOiBNaXNzaW9uW10sIHRlcm06IHN0cmluZyk6IE1pc3Npb25bXSB7XG4gICAgICAgIC8vIHRlcm0gcHJlc2VudCBpbiBkZXNjcmlwdGlvblxuICAgICAgICBjb25zdCBieURlc2NyaXB0aW9uID0gbWlzc2lvbnMuZmlsdGVyKFxuICAgICAgICAgICAgKG1pcykgPT5cbiAgICAgICAgICAgICAgICBtaXMuZGVzY3JpcHRpb24gJiYgbWlzLmRlc2NyaXB0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSksXG4gICAgICAgICk7XG4gICAgICAgIC8vIGJ5IHVzZXIgbGFzdE5hbWUgd2hpY2ggaXMgdGhlIG5hbWUgb2YgdGhlIHZpc2l0OlxuICAgICAgICAvLyBtZXRhZGF0YTogXCJ7XFxcImZpcnN0TmFtZVxcXCI6XFxcIlxcXCIsXFxcImxhc3ROYW1lXFxcIjpcXFwiVmlzaXRlIGR1IDUgSnVpbGxldFxcXCJ9XCJcbiAgICAgICAgY29uc3QgdXNlclByb2ZpbGVzID0gbWlzc2lvbnMubWFwKChtaXMpID0+IG5ldyBQcm9maWxlRW50aXR5KG1pcy51c2VyKSk7XG4gICAgICAgIGNvbnN0IGJ5VXNlckxhc3RuYW1lID0gdGhpcy5maWx0ZXJVc2Vyc0ZvclRlcm0odXNlclByb2ZpbGVzLCB0ZXJtKTtcbiAgICAgICAgY29uc3QgdXNlcklkcyA9IG5ldyBTZXQoYnlVc2VyTGFzdG5hbWUubWFwKCh1c2VyKSA9PiB1c2VyLmlkKSk7XG4gICAgICAgIGNvbnN0IG1pc3Npb25zQnlVc2VyID0gbWlzc2lvbnMuZmlsdGVyKChtaXMpID0+XG4gICAgICAgICAgICB1c2VySWRzLmhhcyhtaXMudXNlcklEKSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChbLi4uYnlEZXNjcmlwdGlvbiwgLi4ubWlzc2lvbnNCeVVzZXJdKTtcbiAgICB9XG5cbiAgICBhc3luYyBmaWx0ZXJPYmplY3RzRm9yU3dlZXAoXG4gICAgICAgIG9iamVjdHM6IGFueVtdLFxuICAgICAgICBvYmplY3RUeXBlOiBQb2lUeXBlLFxuICAgICAgICBzd2VlcDogc3RyaW5nLFxuICAgICk6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgbGV0IGZpbHRlcmVkID0gW107XG4gICAgICAgIHN3aXRjaCAob2JqZWN0VHlwZSkge1xuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLkVRVUlQTUVOVDpcbiAgICAgICAgICAgICAgICBjb25zdCBwb2lzID1cbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLmdldFBvaXNCeU1hdHRlcnBvcnRTd2VlcEJ5VHlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3ZWVwLFxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlcXVpcElEcyA9IG5ldyBTZXQocG9pcy5tYXAoKHBvaSkgPT4gcG9pLmVsZW1lbnRJRCkpO1xuICAgICAgICAgICAgICAgIGZpbHRlcmVkID0gb2JqZWN0cy5maWx0ZXIoKG9iamVjdCkgPT4gZXF1aXBJRHMuaGFzKG9iamVjdC5pZCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgfVxuXG4gICAgZmlsdGVyRmVhdHVyZXNCeUhhc2h0YWdzQW5kTG9jYWxlKFxuICAgICAgICBjdXJyZW50U3BhY2VNaXNzaW9uczogTWlzc2lvbltdLFxuICAgICAgICBmZWF0dXJlczogRmVhdHVyZVtdLFxuICAgICk6IEZlYXR1cmVbXSB7XG4gICAgICAgIGNvbnN0IFtjdXJyZW50TWlzc2lvbl0gPSBjdXJyZW50U3BhY2VNaXNzaW9ucztcbiAgICAgICAgLy8gZmlsdGVyIGJ5IGxvY2FsZVxuICAgICAgICBsZXQgZmlsdGVyZWRMb2NhbGUgPSBbLi4uZmVhdHVyZXNdO1xuICAgICAgICBpZiAoY3VycmVudE1pc3Npb24ubG9jYWxlKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZExvY2FsZSA9IGZlYXR1cmVzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoZmVhdHVyZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS5sb2NhbGUgJiYgZmVhdHVyZS5sb2NhbGUgPT09IGN1cnJlbnRNaXNzaW9uLmxvY2FsZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmlsdGVyIGJ5IGhhc2h0YWdzXG4gICAgICAgIGlmIChjdXJyZW50TWlzc2lvbi5oYXNodGFncyAmJiBjdXJyZW50TWlzc2lvbi5oYXNodGFncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEJ5SGFzaHRhZ3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBmaWx0ZXJlZExvY2FsZSkge1xuICAgICAgICAgICAgICAgIGlmICghZmVhdHVyZS5oYXNodGFncyB8fCBmZWF0dXJlLmhhc2h0YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBGZWF0dXJlIHdpdGhvdXQgaGFzaHRhZyBpcyBhdmFpbGFibGUgZm9yIGV2ZXJ5Ym9keVxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEJ5SGFzaHRhZ3MucHVzaChmZWF0dXJlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TWlzc2lvbi5oYXNodGFncy5ldmVyeSgoaGFzaHRhZykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmUuaGFzaHRhZ3MuaW5jbHVkZXMoaGFzaHRhZyksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRCeUhhc2h0YWdzLnB1c2goZmVhdHVyZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkQnlIYXNodGFncztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyZWRMb2NhbGU7XG4gICAgfVxuXG4gICAgZmlsdGVyRmVhdHVyZXNGb3JNaXNzaW9uV2l0aG91dFpvbmUoXG4gICAgICAgIGZlYXR1cmVzOiBGZWF0dXJlW10sXG4gICAgICAgIG1pc3Npb246IE1pc3Npb24sXG4gICAgKTogRmVhdHVyZVtdIHtcbiAgICAgICAgY29uc3QgZmluYWxGZWF0dXJlczogRmVhdHVyZVtdID0gW107XG4gICAgICAgIGxldCBsZXZlbEZpbHRlcmVkOiBGZWF0dXJlW10gPSBmZWF0dXJlcztcbiAgICAgICAgbGV0IHpvbmVGaWx0ZXJlZDogRmVhdHVyZVtdID0gZmVhdHVyZXM7XG4gICAgICAgIGxldCBoYXNodGFnRmlsdGVyZWQ6IEZlYXR1cmVbXSA9IGZlYXR1cmVzO1xuXG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmdldEZpbHRlcnNGb3JSb2xlKG1pc3Npb24ucm9sZSk7XG4gICAgICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGZpbHRlcnMpIHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuTEVWRUwpIHtcbiAgICAgICAgICAgICAgICBsZXZlbEZpbHRlcmVkID0gdGhpcy5maWx0ZXJPYmplY3RzQnlMZXZlbChcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMsXG4gICAgICAgICAgICAgICAgICAgIG1pc3Npb24ubGV2ZWwsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuWk9ORSkge1xuICAgICAgICAgICAgLy8gICAgIHpvbmVGaWx0ZXJlZCA9IGF3YWl0IHRoaXMuYXBwbHlab25lRmlsdGVyRm9yTWlzc2lvbnMoXG4gICAgICAgICAgICAvLyAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxuICAgICAgICAgICAgLy8gICAgICAgICBmZWF0dXJlcyxcbiAgICAgICAgICAgIC8vICAgICApO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5IQVNIVEFHKSB7XG4gICAgICAgICAgICAgICAgaGFzaHRhZ0ZpbHRlcmVkID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJGZWF0dXJlc0J5SGFzaHRhZ3NBbmRMb2NhbGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWlzc2lvbl0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGZlYXR1cmUgb2YgbGV2ZWxGaWx0ZXJlZCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc2h0YWdGaWx0ZXJlZC5pbmNsdWRlcyhmZWF0dXJlKSAmJlxuICAgICAgICAgICAgICAgIHpvbmVGaWx0ZXJlZC5pbmNsdWRlcyhmZWF0dXJlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZmluYWxGZWF0dXJlcy5wdXNoKGZlYXR1cmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaW5hbEZlYXR1cmVzO1xuICAgIH1cbn1cbiJdfQ==
|
|
625
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL2ZpbHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlDQUF5QztBQUN6QyxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2SixPQUFPLEVBT0gsT0FBTyxFQUNQLGFBQWEsRUFDYixVQUFVLEVBTWIsTUFBTSxrQkFBa0IsQ0FBQztBQVkxQixPQUFPLFdBQVcsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFSekMsSUFBSyxVQU9KO0FBUEQsV0FBSyxVQUFVO0lBQ1gsK0JBQWlCLENBQUE7SUFDakIsNkJBQWUsQ0FBQTtJQUNmLDJCQUFhLENBQUE7SUFDYiwyQkFBYSxDQUFBO0lBQ2IsNkJBQWUsQ0FBQTtJQUNmLGlDQUFtQixDQUFBO0FBQ3ZCLENBQUMsRUFQSSxVQUFVLEtBQVYsVUFBVSxRQU9kO0FBS0QsTUFBTSxPQUFPLGFBQWE7SUFNVjtJQUNBO0lBQ0E7SUFQSixnQkFBZ0IsR0FBb0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVuRCxpQkFBaUIsQ0FBUztJQUVqQyxZQUNZLFdBQTRCLEVBQzVCLFdBQXdCLEVBQ3hCLFVBQXNCO1FBRnRCLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQzlCLENBQUM7SUFHTCxxQkFBcUIs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LG9CQUFvQixDQUNyQyxRQUFRLEVBQ1IsT0FBTyxDQUFDLEtBQUssQ0FDaEIsQ0FBQztZQUNOLENBQUM7WUFDRCxvQ0FBb0M7WUFDcEMsNERBQTREO1lBQzVELGdDQUFnQztZQUNoQyxvQkFBb0I7WUFDcEIsU0FBUztZQUNULElBQUk7WUFDSixJQUFJLE1BQU0sS0FBSyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2hDLGVBQWU7b0JBQ1gsSUFBSSxDQUFDLGlDQUFpQyxDQUNsQyxDQUFDLE9BQU8sQ0FBQyxFQUNULFFBQVEsQ0FDWCxDQUFDO1lBQ1YsQ0FBQztRQUNMLENBQUM7UUFDRCxLQUFLLE1BQU0sT0FBTyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xDLElBQ0ksZUFBZSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7Z0JBQ2pDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQ2hDLENBQUM7Z0JBQ0MsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7d0dBaDBCUSxhQUFhOzRHQUFiLGFBQWEsY0FGVixNQUFNOzs0RkFFVCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNhc2UtZGVjbGFyYXRpb25zICovXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLWF3YWl0LWluLWxvb3AgKi9cclxuLyogZXNsaW50LWRpc2FibGUgZ3VhcmQtZm9yLWluICovXHJcbi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGdldExldmVsc0JlbG93LCBnZXRIaWdoZXN0TGV2ZWxGb3JNaXNzaW9ucywgZ2V0SGlnaGVzdFJvbGVGb3JNaXNzaW9ucywgZmlsdGVyVW5pcXVlQXJyYXlCeUlELCBnZXRUaHJlZUpzUG9pT3JpZ2luIH0gZnJvbSBcIi4uL2hlbHBlcnMuc2VydmljZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgWm9uZSxcclxuICAgIEVxdWlwbWVudCxcclxuICAgIExldmVsU3RhdHVzLFxyXG4gICAgTWVhc3VyZW1lbnQsXHJcbiAgICBNaXNzaW9uLFxyXG4gICAgT3JnYW5pc2F0aW9uLFxyXG4gICAgUG9pVHlwZSxcclxuICAgIFByb2ZpbGVFbnRpdHksXHJcbiAgICBSb2xlU3RhdHVzLFxyXG4gICAgU3BhY2UsXHJcbiAgICBUaWNrZXQsXHJcbiAgICBGZWF0dXJlLFxyXG4gICAgQ29tbWVudCxcclxuICAgIE9iamVjdDNEXHJcbn0gZnJvbSBcIi4uL3R5cGVzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUG9pU2VydmljZSB9IGZyb20gXCIuL21vZGVscy9wb2kuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBab25lU2VydmljZSB9IGZyb20gXCIuL21vZGVscy96b25lLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQmFzZVVzZXJTZXJ2aWNlIH0gZnJvbSBcIi4vdXNlci5zZXJ2aWNlXCI7XHJcbmVudW0gRmlsdGVyVHlwZSB7XHJcbiAgICBET01BSU4gPSBcIkRPTUFJTlwiLFxyXG4gICAgTEVWRUwgPSBcIkxFVkVMXCIsXHJcbiAgICBST0xFID0gXCJST0xFXCIsXHJcbiAgICBaT05FID0gXCJaT05FXCIsXHJcbiAgICBTUEFDRSA9IFwiU1BBQ0VcIixcclxuICAgIEhBU0hUQUcgPSBcIkhBU0hUQUdcIixcclxufVxyXG5pbXBvcnQgbGV2ZW5zaHRlaW4gZnJvbSAnanMtbGV2ZW5zaHRlaW4nO1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiBcInJvb3RcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbHRlclNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSB1cGRhdGVEYXRlRmlsdGVyOiBTdWJqZWN0PERhdGVbXT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAgIHB1YmxpYyBjdXJyZW50RGF0ZUZpbHRlcjogRGF0ZVtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IEJhc2VVc2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHpvbmVTZXJ2aWNlOiBab25lU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHBvaVNlcnZpY2U6IFBvaVNlcnZpY2UsXHJcbiAgICApIHsgfVxyXG5cclxuXHJcbiAgICBmaWx0ZXJUaWNrZXRzQnlEb21haW4odGlja2V0c1RvRmlsdGVyOiBUaWNrZXRbXSwgZG9tYWluOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGlja2V0c1RvRmlsdGVyLmZpbHRlcigodGljKSA9PiB0aWMuZG9tYWluSUQgPT09IGRvbWFpbik7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyT2JqZWN0c0J5TGV2ZWwob2JqZWN0c1RvRmlsdGVyOiBhbnlbXSwgbGV2ZWw6IExldmVsU3RhdHVzKTogYW55W10ge1xyXG4gICAgICAgIGNvbnN0IHZpc2libGVMZXZlbHMgPSBnZXRMZXZlbHNCZWxvdyhsZXZlbCk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBvYmplY3RzVG9GaWx0ZXIuZmlsdGVyKCh0aWMpID0+XHJcbiAgICAgICAgICAgIHZpc2libGVMZXZlbHMuaW5jbHVkZXModGljLmxldmVsKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXJlZDtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJUaWNrZXRzRm9yTWlzc2lvbihcclxuICAgICAgICB0aWNrZXRzVG9GaWx0ZXI6IFRpY2tldFtdLFxyXG4gICAgICAgIG1pc3Npb246IE1pc3Npb24sXHJcbiAgICApOiBUaWNrZXRbXSB7XHJcbiAgICAgICAgY29uc3QgbWFuYWdlclJvbGVzOiBSb2xlU3RhdHVzW10gPSBbXHJcbiAgICAgICAgICAgIFJvbGVTdGF0dXMuTUFOQUdFUixcclxuICAgICAgICAgICAgUm9sZVN0YXR1cy5BRE1JTixcclxuICAgICAgICAgICAgUm9sZVN0YXR1cy5PV05FUixcclxuICAgICAgICBdO1xyXG4gICAgICAgIGlmICghbWFuYWdlclJvbGVzLmluY2x1ZGVzKG1pc3Npb24ucm9sZSkpIHtcclxuICAgICAgICAgICAgaWYgKG1pc3Npb24ucm9sZSA9PT0gUm9sZVN0YXR1cy5TRVJWSUNFKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBTRVJWSUNFIGNhbiBzZWUgdGlja2V0cyB0byB3aGljaCBoZSBpcyBhc3NpZ25lZFxyXG4gICAgICAgICAgICAgICAgY29uc3QgdGlja2V0c0Fzc2lnbmVkID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgdGlja2V0c1RvRmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQuYXNzaWduZWVzLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhc3NpZ25tZW50IG9mIHQuYXNzaWduZWVzLml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXNzaWdubWVudC5taXNzaW9uSUQgPT09IG1pc3Npb24uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWNrZXRzQXNzaWduZWQucHVzaCh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aWNrZXRzQXNzaWduZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gT0NDVVBBTlQgYW5kIFZJU0lUT1IgY2FuIHNlZSBvbmx5IHRpY2tldHMgdGhhdCB0aGV5IGNyZWF0ZWRcclxuICAgICAgICAgICAgcmV0dXJuIHRpY2tldHNUb0ZpbHRlci5maWx0ZXIoKHRpY2tldCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRpY2tldC5vd25lck1pc3Npb25JRCA9PT0gbWlzc2lvbi5pZDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aWNrZXRzVG9GaWx0ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsdGVyc0ZvclJvbGUocm9sZTogUm9sZVN0YXR1cyk6IEZpbHRlclR5cGVbXSB7XHJcbiAgICAgICAgc3dpdGNoIChyb2xlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5BRE1JTjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBbRmlsdGVyVHlwZS5MRVZFTF07XHJcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5NQU5BR0VSOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtGaWx0ZXJUeXBlLlpPTkUsIEZpbHRlclR5cGUuTEVWRUxdO1xyXG4gICAgICAgICAgICBjYXNlIFJvbGVTdGF0dXMuT1dORVI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW0ZpbHRlclR5cGUuWk9ORSwgRmlsdGVyVHlwZS5MRVZFTF07XHJcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5TRVJWSUNFOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLlpPTkUsXHJcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5MRVZFTCxcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkRPTUFJTixcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLlJPTEUsIC8vIHRoYXQgaXMgdGhlIG1vc3Qgc2V2ZXJlIGZpbHRlclxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLk9DQ1VQQU5UOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLlpPTkUsXHJcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5ET01BSU4sXHJcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5ST0xFLFxyXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuTEVWRUwsXHJcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5IQVNIVEFHLFxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLlZJU0lUT1I6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuWk9ORSxcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkxFVkVMLFxyXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuRE9NQUlOLFxyXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuUk9MRSxcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkhBU0hUQUcsXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBjYXNlIFJvbGVTdGF0dXMuVklTSVRPUl9NVVNFVU06XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW0ZpbHRlclR5cGUuWk9ORSwgRmlsdGVyVHlwZS5MRVZFTCwgRmlsdGVyVHlwZS5IQVNIVEFHXTtcclxuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLkdVSURFX01VU0VVTTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBbRmlsdGVyVHlwZS5MRVZFTF07XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW0ZpbHRlclR5cGUuTEVWRUxdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmaWx0ZXJPYmplY3RzRm9yQ3VycmVudFVzZXJJblNwYWNlKFxyXG4gICAgICAgIG9iamVjdHM6IE9iamVjdDNEW10sXHJcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgKTogUHJvbWlzZTxPYmplY3QzRFtdPiB7XHJcbiAgICAgICAgY29uc3QgZmluYWxPYmplY3QzRHM6IE9iamVjdDNEW10gPSBbXTtcclxuICAgICAgICBsZXQgZG9tRmlsdGVyZWQ6IE9iamVjdDNEW10gPSBvYmplY3RzO1xyXG4gICAgICAgIGxldCBsZXZlbEZpbHRlcmVkOiBPYmplY3QzRFtdID0gb2JqZWN0cztcclxuICAgICAgICBsZXQgem9uZUZpbHRlcmVkOiBPYmplY3QzRFtdID0gb2JqZWN0cztcclxuICAgICAgICBjb25zdCBtaXNzaW9ucyA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb25zO1xyXG4gICAgICAgIGlmIChtaXNzaW9ucykge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhY2VNaXNzaW9ucyA9IG1pc3Npb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChtKSA9PiBtLnNwYWNlSUQgPT09IHNwYWNlSUQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50U3BhY2VNaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9iaiBvZiBsZXZlbEZpbHRlcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21GaWx0ZXJlZC5pbmNsdWRlcyhvYmopICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVGaWx0ZXJlZC5pbmNsdWRlcyhvYmopXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsT2JqZWN0M0RzLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZpbmFsT2JqZWN0M0RzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZpbHRlclRpY2tldHNGb3JDdXJyZW50VXNlckluU3BhY2UoXHJcbiAgICAgICAgdGlja2V0czogVGlja2V0W10sXHJcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgKTogUHJvbWlzZTxUaWNrZXRbXT4ge1xyXG4gICAgICAgIGNvbnN0IGZpbmFsVGlja2V0czogVGlja2V0W10gPSBbXTtcclxuICAgICAgICBsZXQgZG9tRmlsdGVyZWQ6IFRpY2tldFtdID0gdGlja2V0cztcclxuICAgICAgICBsZXQgcm9sZUZpbHRlcmVkOiBUaWNrZXRbXSA9IHRpY2tldHM7XHJcbiAgICAgICAgbGV0IGxldmVsRmlsdGVyZWQ6IFRpY2tldFtdID0gdGlja2V0cztcclxuICAgICAgICBsZXQgem9uZUZpbHRlcmVkOiBUaWNrZXRbXSA9IHRpY2tldHM7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvbnMgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9ucztcclxuICAgICAgICBpZiAobWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFNwYWNlTWlzc2lvbnMgPSBtaXNzaW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAobSkgPT4gbS5zcGFjZUlEID09PSBzcGFjZUlELFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFNwYWNlTWlzc2lvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdExlbGVsID1cclxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0TGV2ZWxGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0Um9sZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0SGlnaGVzdFJvbGVGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkhpZ2hlc3QgbGV2ZWw6IFwiLCBoaWdoZXN0TGVsZWwsIFwiLCBIaWdoZXN0IFJvbGU6IFwiLCBoaWdoZXN0Um9sZSlcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShoaWdoZXN0Um9sZSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5ET01BSU4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRvbWFpbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbSBvZiBjdXJyZW50U3BhY2VNaXNzaW9ucykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0uZG9tYWlucykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbnMgPSBbLi4uZG9tYWlucywgLi4ubS5kb21haW5zXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWxsRG9tYWluc0ZpbHRlcmVkID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZCBvZiBkb21haW5zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RG9tRmlsdGVyZWQgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVGlja2V0c0J5RG9tYWluKHRpY2tldHMsIGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsRG9tYWluc0ZpbHRlcmVkID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmFsbERvbWFpbnNGaWx0ZXJlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50RG9tRmlsdGVyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbUZpbHRlcmVkID0gYWxsRG9tYWluc0ZpbHRlcmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLlJPTEUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdFJvbGVNaXNzaW9uID0gY3VycmVudFNwYWNlTWlzc2lvbnMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtKSA9PiBtLnJvbGUgPT09IGhpZ2hlc3RSb2xlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlRmlsdGVyZWQgPSB0aGlzLmZpbHRlclRpY2tldHNGb3JNaXNzaW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja2V0cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hlc3RSb2xlTWlzc2lvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuTEVWRUwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxGaWx0ZXJlZCA9IHRoaXMuZmlsdGVyT2JqZWN0c0J5TGV2ZWwoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWNrZXRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGVzdExlbGVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVGaWx0ZXJlZCA9IGF3YWl0IHRoaXMuYXBwbHlab25lRmlsdGVyRm9yTWlzc2lvbnMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3BhY2VNaXNzaW9ucyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tldHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8ga2VlcCBvbmx5IHRpY2tldHMgcHJlc2VudCBpbiBhbGwgZmlsdGVyZWQgYXJyYXlzXHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhkb21GaWx0ZXJlZCk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyb2xlRmlsdGVyZWQpO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobGV2ZWxGaWx0ZXJlZCk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh6b25lRmlsdGVyZWQpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB0aWMgb2YgbGV2ZWxGaWx0ZXJlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9tRmlsdGVyZWQuaW5jbHVkZXModGljKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlRmlsdGVyZWQuaW5jbHVkZXModGljKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lRmlsdGVyZWQuaW5jbHVkZXModGljKVxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFRpY2tldHMucHVzaCh0aWMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmaW5hbFRpY2tldHMpO1xyXG4gICAgICAgIHJldHVybiBmaW5hbFRpY2tldHM7XHJcbiAgICB9XHJcblxyXG4gICAgc3Vic2NyaWJlVG9EYXRhRmlsdGVyVXBkYXRlKFxyXG4gICAgICAgIG5leHQ/OiAodmFsdWU6IGFueSkgPT4gdm9pZCxcclxuICAgICAgICBlcnJvcj86IChlcnJvcjogYW55KSA9PiB2b2lkLFxyXG4gICAgICAgIGNvbXBsZXRlPzogKCkgPT4gdm9pZCxcclxuICAgICk6IFN1YnNjcmlwdGlvbiB7XHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMudXBkYXRlRGF0ZUZpbHRlci5zdWJzY3JpYmUobmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcclxuICAgICAgICByZXR1cm4gcztcclxuICAgIH1cclxuXHJcbiAgICBkYXRlRmlsdGVyVXBkYXRlZChkYXRlUmFuZ2U6IERhdGVbXSB8IG51bGwpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnREYXRlRmlsdGVyID0gZGF0ZVJhbmdlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGF0ZUZpbHRlci5uZXh0KGRhdGVSYW5nZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyT2JqZWN0c0ZvckRhdGVSYW5nZShvYmplY3RzOiBhbnlbXSwgZGF0ZVJhbmdlOiBEYXRlW10pOiBhbnlbXSB7XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdHMuZmlsdGVyKChvYmplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY3JlYXRlZEF0RGF0ZSA9IG5ldyBEYXRlKG9iamVjdC5jcmVhdGVkQXQpO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0RGF0ZSA+PSBkYXRlUmFuZ2VbMF0gJiYgY3JlYXRlZEF0RGF0ZSA8PSBkYXRlUmFuZ2VbMV1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJNZWFzdXJlbWVudHNGb3JEYXRlUmFuZ2UoXHJcbiAgICAgICAgbWVhc3VyZW1lbnRzOiBNZWFzdXJlbWVudFtdLFxyXG4gICAgICAgIGRhdGVSYW5nZTogRGF0ZVtdLFxyXG4gICAgKTogTWVhc3VyZW1lbnRbXSB7XHJcbiAgICAgICAgY29uc3QgaXNJbnZhbGlkRGF0ZSA9IChkOiBEYXRlKSA9PiBkIGluc3RhbmNlb2YgRGF0ZSAmJiBpc05hTihkLmdldFRpbWUoKSk7XHJcblxyXG4gICAgICAgIGlmIChkYXRlUmFuZ2UuZXZlcnkoZCA9PiBkIGluc3RhbmNlb2YgRGF0ZSAmJiBpc0ludmFsaWREYXRlKGQpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbWVhc3VyZW1lbnRzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1lYXN1cmVtZW50cy5maWx0ZXIoKG1lYXN1cmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY3JlYXRlZEF0RGF0ZSA9IG5ldyBEYXRlKG1lYXN1cmUuY29tbWVudC5jcmVhdGVkQXQpO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0RGF0ZSA+PSBkYXRlUmFuZ2VbMF0gJiYgY3JlYXRlZEF0RGF0ZSA8PSBkYXRlUmFuZ2VbMV1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmaWx0ZXJPYmplY3RzRm9yWm9uZShcclxuICAgICAgICBvYmplY3RzOiBhbnlbXSwgLy8gVE9ETzogcmVtb3ZlIGFueSBoZXJlLi5cclxuICAgICAgICB6b25lSUQ6IHN0cmluZyA9IG51bGwsXHJcbiAgICAgICAgem9uZTogWm9uZSA9IG51bGwsXHJcbiAgICApOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRPYmplY3RzID0gW107XHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgIG9iamVjdHMubWFwKGFzeW5jIChvYmplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBvaXMgPSBvYmplY3QucG9pcztcclxuICAgICAgICAgICAgICAgIGlmIChwb2lzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgW3BvaV0gPSBwb2lzLml0ZW1zO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBab25lcyBhcmUgZGVmaW5lZCBieSB0aGUgc3dlZXBzIHRoZXkgY29udGFpbiwgc28gYW4gb2JqZWN0IHBsYWNlZCBpbiBhIHZpZXdlclxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgaGFzIG5vIHN3ZWVwcyBiZWxvbmdzIHRvIG5vIHpvbmUgYXQgYWxsLiBGaWx0ZXJpbmcgYnkgem9uZSB0aGVuIHJlbW92ZXNcclxuICAgICAgICAgICAgICAgICAgICAvLyBpdCBmcm9tIGV2ZXJ5IHpvbmUgcmF0aGVyIHRoYW4gZnJvbSB0aGUgd3Jvbmcgb25lIC0gd2hpY2ggaXMgd2hhdCBrZXB0IHRhZ3NcclxuICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGVkIGluIHRoZSBUaHJlZS5qcyB2aWV3ZXIgZnJvbSBldmVyIGFwcGVhcmluZyBpbiBNYXR0ZXJwb3J0LiBUaGUgdGFnXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdmlzaWJpbGl0eSBmaWx0ZXIgYWxyZWFkeSByZWFkcyBcIm5vIHN3ZWVwXCIgYXMgXCJub3QgZmxvb3Itc2NvcGVkLCBzaG93IGl0XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgc2FtZSBydWxlIGFwcGxpZWQgdG8gem9uZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvaSAmJiBwb2kuY29vcmRpbmF0ZSAmJiAhcG9pLm1hdHRlcnBvcnRTd2VlcElEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIC4uLnVubGVzcyBpdCB3YXMgcGxhY2VkIGluIGEgM0QgbW9kZWwuIFdpdGggbm8gc3dlZXAsIHRoYXQgbW9kZWwgd2FzIG5ldmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRpZWQgdG8gdGhpcyB0b3VyOiB0aGUgY29vcmRpbmF0ZXMgYXJlIHRoZSBtb2RlbCdzIG93biwgYW5kIGhlcmUgdGhleSB3b3VsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwdXQgdGhlIHRhZyBzb21ld2hlcmUgYXJiaXRyYXJ5LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWdldFRocmVlSnNQb2lPcmlnaW4ocG9pKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRPYmplY3RzLnB1c2gob2JqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAocG9pICYmIHpvbmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHpvbmUuc3dlZXBJRHMgJiYgem9uZS5zd2VlcElEcy5pbmNsdWRlcyhwb2kubWF0dGVycG9ydFN3ZWVwSUQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wb2lTZXJ2aWNlLnBvaUlzVmlydHVhbChwb2kpICYmIHpvbmUubGF5ZXIgJiYgem9uZS5sYXllci5uYW1lID09PSBcIkZMT09SXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBpbmNsdWRlIGluIEZsb29yIHpvbmUgb25seVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkT2JqZWN0cy5wdXNoKG9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucG9pU2VydmljZS5wb2lJc1ZpcnR1YWwocG9pKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkT2JqZWN0cy5wdXNoKG9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvaSAmJiAhem9uZSAmJiB6b25lSUQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgem9uZXMgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmdldFpvbmVzRm9yT2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b25lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgem9uZXMuc29tZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoem9uZV8pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVfLmlkID09PSB6b25lSUQgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem9uZV8ucGFyZW50SUQgPT09IHpvbmVJRCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZE9iamVjdHMucHVzaChvYmplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXJlZE9iamVjdHM7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyRXF1aXBtZW50c0J5RG9tYWluTGlzdChcclxuICAgICAgICBlcXVpcG1lbnRzOiBFcXVpcG1lbnRbXSxcclxuICAgICAgICBkb21haW5JRExpc3Q6IHN0cmluZ1tdLFxyXG4gICAgKTogRXF1aXBtZW50W10ge1xyXG4gICAgICAgIGxldCBmaWx0ZXJlZCA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGZpbHRlcmVkQnlEb21haW4gPSBlcXVpcG1lbnRzLmZpbHRlcigoZXF1aXApID0+XHJcbiAgICAgICAgICAgIGRvbWFpbklETGlzdC5pbmNsdWRlcyhlcXVpcC5kb21haW5JRCksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBmaWx0ZXJlZCA9IFsuLi5maWx0ZXJlZCwgLi4uZmlsdGVyZWRCeURvbWFpbl07XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRCeVBhcmVudERvbWFpbiA9IGVxdWlwbWVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZXF1aXApID0+XHJcbiAgICAgICAgICAgICAgICBlcXVpcC5kb21haW4gJiZcclxuICAgICAgICAgICAgICAgIGVxdWlwLmRvbWFpbi5wYXJlbnRJRCAmJlxyXG4gICAgICAgICAgICAgICAgZG9tYWluSURMaXN0LmluY2x1ZGVzKGVxdWlwLmRvbWFpbi5wYXJlbnRJRCksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBmaWx0ZXJlZCA9IFsuLi5maWx0ZXJlZCwgLi4uZmlsdGVyZWRCeVBhcmVudERvbWFpbl07XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChmaWx0ZXJlZCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8vIE5vdCBpbXBsZW1lbnRlZCB5ZXQhXHJcbiAgICAvLyBmaWx0ZXJPYmplY3RzM0RCeURvbWFpbkxpc3QoXHJcbiAgICAvLyAgIG9iamVjdHMzRDogT2JqZWN0M0RbXSxcclxuICAgIC8vICAgZG9tYWluSURMaXN0OiBzdHJpbmdbXSxcclxuICAgIC8vICk6IE9iamVjdDNEW10ge1xyXG4gICAgLy8gICBsZXQgZmlsdGVyZWQgPSBbXTtcclxuICAgIC8vICAgY29uc3QgZmlsdGVyZWRCeURvbWFpbiA9IG9iamVjdHMzRC5maWx0ZXIoKGVxdWlwKSA9PlxyXG4gICAgLy8gICAgIGRvbWFpbklETGlzdC5pbmNsdWRlcyhlcXVpcC5kb21haW5JRCksXHJcbiAgICAvLyAgICk7XHJcbiAgICAvLyAgIGZpbHRlcmVkID0gWy4uLmZpbHRlcmVkLCAuLi5maWx0ZXJlZEJ5RG9tYWluXTtcclxuICAgIC8vICAgY29uc3QgZmlsdGVyZWRCeVBhcmVudERvbWFpbiA9IG9iamVjdHMzRC5maWx0ZXIoXHJcbiAgICAvLyAgICAgKG9iaikgPT5cclxuICAgIC8vICAgICAgIG9iai5kb21haW4gJiZcclxuICAgIC8vICAgICAgIG9iai5kb21haW4ucGFyZW50SUQgJiZcclxuICAgIC8vICAgICAgIGRvbWFpbklETGlzdC5pbmNsdWRlcyhvYmouZG9tYWluLnBhcmVudElEKSxcclxuICAgIC8vICAgKTtcclxuICAgIC8vICAgZmlsdGVyZWQgPSBbLi4uZmlsdGVyZWQsIC4uLmZpbHRlcmVkQnlQYXJlbnREb21haW5dO1xyXG4gICAgLy8gICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKGZpbHRlcmVkKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBmaWx0ZXJFcXVpcG1lbnRzRm9yVGVybShlcXVpcHM6IEVxdWlwbWVudFtdLCB0ZXJtOiBzdHJpbmcpOiBFcXVpcG1lbnRbXSB7XHJcbiAgICAgICAgLy8gZmlsdGVyIGRvbWFpbnNcclxuICAgICAgICBsZXQgYnlEb21haW4gPSBlcXVpcHMuZmlsdGVyKChlcSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXEuZG9tYWluICYmIGVxLmRvbWFpbi5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkRG9tYWluID0gZXEuZG9tYWluLm5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxldiA9IGxldmVuc2h0ZWluKG5vcm1hbGl6ZWREb21haW4sIHRlcm0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxldiA8PSAyIHx8IG5vcm1hbGl6ZWREb21haW4uaW5jbHVkZXModGVybSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGJ5UGFyZW50RG9tYWluID0gZXF1aXBzLmZpbHRlcigoZXEpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVxLmRvbWFpbiAmJiBlcS5kb21haW4ucGFyZW50SUQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXJlbnQgPSBlcS5kb21haW4ucGFyZW50Lm5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxldiA9IGxldmVuc2h0ZWluKG5vcm1hbGl6ZWRQYXJlbnQsIHRlcm0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxldiA8PSAyIHx8IG5vcm1hbGl6ZWRQYXJlbnQuaW5jbHVkZXModGVybSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJ5RG9tYWluID0gWy4uLmJ5RG9tYWluLCAuLi5ieVBhcmVudERvbWFpbl07XHJcbiAgICAgICAgLy8gZmlsdGVyIG5hbWVcclxuICAgICAgICBsZXQgYnlOYW1lID0gW107XHJcbiAgICAgICAgY29uc3QgdGVybXMgPSB0ZXJtLnNwbGl0KFwiIFwiKS5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5sZW5ndGggPiAyKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGVxIG9mIGVxdWlwcykge1xyXG4gICAgICAgICAgICBjb25zdCB3b3JkcyA9IGVxLm5hbWVcclxuICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoXCIgXCIpXHJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubGVuZ3RoID4gMik7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWQgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0ZXJtcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB3b3JkIG9mIHdvcmRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxldmVuc2h0ZWluKHRva2VuLCB3b3JkKSA8PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWQucHVzaCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCA9PT0gdGVybXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBieU5hbWUucHVzaChlcSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGJ5TmFtZVNpbXBsZSA9IGVxdWlwcy5maWx0ZXIoKGVxKSA9PlxyXG4gICAgICAgICAgICBlcS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBieU5hbWUgPSBbLi4uYnlOYW1lLCAuLi5ieU5hbWVTaW1wbGVdO1xyXG4gICAgICAgIC8vIGJ5IHNlcmlhbCBudW1iZXJcclxuICAgICAgICBjb25zdCBieVNlcmlhbE51bWJlciA9IGVxdWlwcy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChlcSkgPT4gZXEuc2VyaWFsTnVtYmVyICYmIGVxLnNlcmlhbE51bWJlci50b0xvd2VyQ2FzZSgpID09PSB0ZXJtLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gWy4uLmJ5RG9tYWluLCAuLi5ieU5hbWUsIC4uLmJ5U2VyaWFsTnVtYmVyXTtcclxuICAgICAgICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKHJlc3VsdCk7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyVGlja2V0c0ZvclRlcm0odGlja2V0czogVGlja2V0W10sIHRlcm06IHN0cmluZyk6IFRpY2tldFtdIHtcclxuICAgICAgICAvLyBmaWx0ZXIgdGVybSBpbiB0aXRsZSBhbmQgZGVzY3JpcHRpb25cclxuICAgICAgICBjb25zdCBieVRpdGxlID0gdGhpcy5maWx0ZXJPYmplY3RzRm9yVGVybSh0aWNrZXRzLCB0ZXJtKTtcclxuICAgICAgICAvLyBieSBlcXVpcG1lbnRcclxuICAgICAgICBjb25zdCBieUVxdWlwbWVudCA9IHRpY2tldHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAodGlja2V0KSA9PlxyXG4gICAgICAgICAgICAgICAgdGlja2V0LmVxdWlwbWVudHMgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyRXF1aXBtZW50c0ZvclRlcm0odGlja2V0LmVxdWlwbWVudHMsIHRlcm0pLmxlbmd0aCA+XHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChbLi4uYnlUaXRsZSwgLi4uYnlFcXVpcG1lbnRdKTtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJMb2NhdGlvbnNGb3JUZXJtKGxvY2F0aW9uczogU3BhY2VbXSwgdGVybTogc3RyaW5nKTogU3BhY2VbXSB7XHJcbiAgICAgICAgLy8gYnkgbmFtZVxyXG4gICAgICAgIGNvbnN0IGJ5TmFtZSA9IGxvY2F0aW9ucy5maWx0ZXIoKGxvYykgPT5cclxuICAgICAgICAgICAgbG9jLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGJ5IGFkZHJlc3NcclxuICAgICAgICBjb25zdCBieUFkZHJlc3MgPSBsb2NhdGlvbnMuZmlsdGVyKChsb2MpID0+XHJcbiAgICAgICAgICAgIGxvYy5hZGRyZXNzZXMudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoWy4uLmJ5TmFtZSwgLi4uYnlBZGRyZXNzXSk7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyT3JnYW5pc2F0aW9uc0ZvclRlcm0oXHJcbiAgICAgICAgb3JnczogT3JnYW5pc2F0aW9uW10sXHJcbiAgICAgICAgdGVybTogc3RyaW5nLFxyXG4gICAgKTogT3JnYW5pc2F0aW9uW10ge1xyXG4gICAgICAgIGNvbnN0IGJ5TmFtZSA9IG9yZ3MuZmlsdGVyKChvcmcpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgd29yZHMgPSBvcmcubmFtZS50b0xvd2VyQ2FzZSgpLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIHdvcmRzLnNvbWUoXHJcbiAgICAgICAgICAgICAgICAgICAgKHdvcmQpID0+IHdvcmQubGVuZ3RoID4gMiAmJiBsZXZlbnNodGVpbih3b3JkLCB0ZXJtKSA8PSAxLFxyXG4gICAgICAgICAgICAgICAgKSB8fCBvcmcubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGJ5TmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJVc2Vyc0ZvclRlcm0odXNlcnM6IFByb2ZpbGVFbnRpdHlbXSwgdGVybTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgYnlOYW1lID0gdXNlcnMuZmlsdGVyKCh1c2VyKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gdXNlci5kaXNwbGF5TmFtZS50b0xvd2VyQ2FzZSgpLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIHdvcmRzLnNvbWUoXHJcbiAgICAgICAgICAgICAgICAgICAgKHdvcmQpID0+IHdvcmQubGVuZ3RoID4gMiAmJiBsZXZlbnNodGVpbih3b3JkLCB0ZXJtKSA8PSAxLFxyXG4gICAgICAgICAgICAgICAgKSB8fCB1c2VyLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYnlOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZpbHRlckZlYXR1cmVzRm9yQ3VycmVudFVzZXJJblNwYWNlKFxyXG4gICAgICAgIGZlYXR1cmVzOiBGZWF0dXJlW10sXHJcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgKTogUHJvbWlzZTxGZWF0dXJlW10+IHtcclxuICAgICAgICBjb25zdCBmaW5hbEZlYXR1cmVzOiBGZWF0dXJlW10gPSBbXTtcclxuICAgICAgICBsZXQgbGV2ZWxGaWx0ZXJlZDogRmVhdHVyZVtdID0gZmVhdHVyZXM7XHJcbiAgICAgICAgbGV0IHpvbmVGaWx0ZXJlZDogRmVhdHVyZVtdID0gZmVhdHVyZXM7XHJcbiAgICAgICAgbGV0IGhhc2h0YWdGaWx0ZXJlZDogRmVhdHVyZVtdID0gZmVhdHVyZXM7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvbnMgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9ucztcclxuICAgICAgICBpZiAobWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFNwYWNlTWlzc2lvbnMgPSBtaXNzaW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAobSkgPT4gbS5zcGFjZUlEID09PSBzcGFjZUlELFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFNwYWNlTWlzc2lvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdExlbGVsID1cclxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0TGV2ZWxGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0Um9sZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0SGlnaGVzdFJvbGVGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IHRoaXMuZ2V0RmlsdGVyc0ZvclJvbGUoaGlnaGVzdFJvbGUpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgZmlsdGVycykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuTEVWRUwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxGaWx0ZXJlZCA9IHRoaXMuZmlsdGVyT2JqZWN0c0J5TGV2ZWwoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hlc3RMZWxlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVGaWx0ZXJlZCA9IGF3YWl0IHRoaXMuYXBwbHlab25lRmlsdGVyRm9yTWlzc2lvbnMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3BhY2VNaXNzaW9ucyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLkhBU0hUQUcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzaHRhZ0ZpbHRlcmVkID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyRmVhdHVyZXNCeUhhc2h0YWdzQW5kTG9jYWxlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZlYXR1cmUgb2YgbGV2ZWxGaWx0ZXJlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzaHRhZ0ZpbHRlcmVkLmluY2x1ZGVzKGZlYXR1cmUpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVGaWx0ZXJlZC5pbmNsdWRlcyhmZWF0dXJlKVxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbEZlYXR1cmVzLnB1c2goZmVhdHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmaW5hbEZlYXR1cmVzO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlckZlYXR1cmVzRm9yVGVybShmZWF0dXJlczogRmVhdHVyZVtdLCB0ZXJtOiBzdHJpbmcpOiBGZWF0dXJlW10ge1xyXG4gICAgICAgIC8vIGZpbHRlciB0ZXJtIGluIHRpdGxlXHJcbiAgICAgICAgY29uc3QgYnlUaXRsZSA9IHRoaXMuZmlsdGVyT2JqZWN0c0ZvclRlcm0oZmVhdHVyZXMsIHRlcm0pO1xyXG4gICAgICAgIC8vIGJ5IGNvbW1lbnRzXHJcbiAgICAgICAgY29uc3QgYnlDb21tZW50ID0gZmVhdHVyZXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZmVhdHVyZSkgPT5cclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyT2JqZWN0c0ZvclRlcm0oZmVhdHVyZS5jb21tZW50cy5pdGVtcywgdGVybSkubGVuZ3RoID5cclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKFsuLi5ieVRpdGxlLCAuLi5ieUNvbW1lbnRdKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb2JqZWN0cyBBcnJheSBvZiBDb21tZW50cywgVGlja2V0cywgRmVhdHVyZXMuIE9ibGlnYXRvcnkgcHJvcG9ydGllczogdGl0bGUsIGRlc2NyaXB0aW9uXHJcbiAgICAgKiBAcGFyYW0gdGVybSBzdHJpbmdcclxuICAgICAqL1xyXG4gICAgZmlsdGVyT2JqZWN0c0ZvclRlcm0ob2JqZWN0czogYW55W10sIHRlcm06IHN0cmluZyk6IGFueVtdIHtcclxuICAgICAgICAvLyBmaWx0ZXIgdGVybSBpbiB0aXRsZVxyXG4gICAgICAgIGNvbnN0IGJ5VGl0bGUgPSBvYmplY3RzLmZpbHRlcigoZmVhdHVyZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB3b3JkcyA9IGZlYXR1cmUudGl0bGUudG9Mb3dlckNhc2UoKS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICB3b3Jkcy5zb21lKFxyXG4gICAgICAgICAgICAgICAgICAgICh3b3JkKSA9PiB3b3JkLmxlbmd0aCA+IDIgJiYgbGV2ZW5zaHRlaW4od29yZCwgdGVybSkgPD0gMSxcclxuICAgICAgICAgICAgICAgICkgfHwgZmVhdHVyZS50aXRsZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gdGVybSBwcmVzZW50IGluIGRlc2NyaXB0aW9uXHJcbiAgICAgICAgY29uc3QgYnlEZXNjcmlwdGlvbiA9IG9iamVjdHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZmVhdHVyZSkgPT5cclxuICAgICAgICAgICAgICAgIGZlYXR1cmUuZGVzY3JpcHRpb24gJiZcclxuICAgICAgICAgICAgICAgIGZlYXR1cmUuZGVzY3JpcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoWy4uLmJ5VGl0bGUsIC4uLmJ5RGVzY3JpcHRpb25dKTtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJNaXNzaW9uQnlTdGFydFRpbWVEYXRlRm9yRGF0ZVJhbmdlKFxyXG4gICAgICAgIG1pc3Npb25zOiBhbnlbXSxcclxuICAgICAgICBkYXRlUmFuZ2U6IERhdGVbXSxcclxuICAgICk6IGFueVtdIHtcclxuICAgICAgICByZXR1cm4gbWlzc2lvbnMuZmlsdGVyKChtaXNzaW9uKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0ZVRpbWUgPSBuZXcgRGF0ZShtaXNzaW9uLnN0YXJ0RGF0ZVRpbWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgc3RhcnREYXRlVGltZSA+PSBkYXRlUmFuZ2VbMF0gJiYgc3RhcnREYXRlVGltZSA8PSBkYXRlUmFuZ2VbMV1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhcHBseVpvbmVGaWx0ZXJGb3JNaXNzaW9ucyhcclxuICAgICAgICBjdXJyZW50U3BhY2VNaXNzaW9uczogTWlzc2lvbltdLFxyXG4gICAgICAgIG9iamVjdHM6IGFueVtdLFxyXG4gICAgKTogUHJvbWlzZTxhbnlbXT4ge1xyXG4gICAgICAgIGNvbnN0IGFsbG93ZWRab25lcyA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgbWlzc2lvbiBvZiBjdXJyZW50U3BhY2VNaXNzaW9ucykge1xyXG4gICAgICAgICAgICBpZiAobWlzc2lvbi56b25lSUQpIHtcclxuICAgICAgICAgICAgICAgIGFsbG93ZWRab25lcy5wdXNoKG1pc3Npb24uem9uZUlEKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYWxsb3dlZFpvbmVzLmxlbmd0aCA9PT0gY3VycmVudFNwYWNlTWlzc2lvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGxldCBhbGxab25lRmlsdGVyZWQgPSBbXTtcclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgICBhbGxvd2VkWm9uZXMubWFwKGFzeW5jICh6b25lSUQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50Wm9uZUZpbHRlcmVkID0gYXdhaXQgdGhpcy5maWx0ZXJPYmplY3RzRm9yWm9uZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUlELFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxsWm9uZUZpbHRlcmVkID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5hbGxab25lRmlsdGVyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnRab25lRmlsdGVyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKGFsbFpvbmVGaWx0ZXJlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmplY3RzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZpbHRlckVxdWlwbWVudHNGb3JDdXJyZW50VXNlckluU3BhY2UoXHJcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgICAgIGVxdWlwczogRXF1aXBtZW50W10sXHJcbiAgICApOiBQcm9taXNlPEVxdWlwbWVudFtdPiB7XHJcbiAgICAgICAgY29uc3QgZmluYWxFcXVpcHM6IEVxdWlwbWVudFtdID0gW107XHJcbiAgICAgICAgbGV0IGRvbUZpbHRlcmVkOiBFcXVpcG1lbnRbXSA9IGVxdWlwcztcclxuICAgICAgICBjb25zdCByb2xlRmlsdGVyZWQ6IEVxdWlwbWVudFtdID0gZXF1aXBzO1xyXG4gICAgICAgIGNvbnN0IGxldmVsRmlsdGVyZWQ6IEVxdWlwbWVudFtdID0gZXF1aXBzO1xyXG4gICAgICAgIGxldCB6b25lRmlsdGVyZWQ6IEVxdWlwbWVudFtdID0gZXF1aXBzO1xyXG4gICAgICAgIGNvbnN0IG1pc3Npb25zID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbnM7XHJcbiAgICAgICAgaWYgKG1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTcGFjZU1pc3Npb25zID0gbWlzc2lvbnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKG0pID0+IG0uc3BhY2VJRCA9PT0gc3BhY2VJRCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRTcGFjZU1pc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhpZ2hlc3RMZWxlbCA9XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0SGlnaGVzdExldmVsRm9yTWlzc2lvbnMoY3VycmVudFNwYWNlTWlzc2lvbnMpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdFJvbGUgPVxyXG4gICAgICAgICAgICAgICAgICAgIGdldEhpZ2hlc3RSb2xlRm9yTWlzc2lvbnMoY3VycmVudFNwYWNlTWlzc2lvbnMpO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJIaWdoZXN0IGxldmVsOiBcIiwgaGlnaGVzdExlbGVsLCBcIiwgSGlnaGVzdCBSb2xlOiBcIiwgaGlnaGVzdFJvbGUpXHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IHRoaXMuZ2V0RmlsdGVyc0ZvclJvbGUoaGlnaGVzdFJvbGUpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgZmlsdGVycykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuRE9NQUlOKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkb21haW5zOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG0gb2YgY3VycmVudFNwYWNlTWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtLmRvbWFpbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW5zID0gWy4uLmRvbWFpbnMsIC4uLm0uZG9tYWluc107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhbGxEb21haW5zRmlsdGVyZWQgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREb21GaWx0ZXJlZCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckVxdWlwbWVudHNCeURvbWFpbkxpc3QoZXF1aXBzLCBkb21haW5zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsRG9tYWluc0ZpbHRlcmVkID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uYWxsRG9tYWluc0ZpbHRlcmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudERvbUZpbHRlcmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21GaWx0ZXJlZCA9IGFsbERvbWFpbnNGaWx0ZXJlZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5ST0xFKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IGhpZ2hlc3RSb2xlTWlzc2lvbiA9IGN1cnJlbnRTcGFjZU1pc3Npb25zLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAobSkgPT4gbS5yb2xlID09PSBoaWdoZXN0Um9sZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ET1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5MRVZFTCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPLCBlcXVpcG1lbnQgZG9lcyBub3QgaGF2ZSBsZXZlbFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVGaWx0ZXJlZCA9IGF3YWl0IHRoaXMuYXBwbHlab25lRmlsdGVyRm9yTWlzc2lvbnMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3BhY2VNaXNzaW9ucyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWlwcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHRpYyBvZiBsZXZlbEZpbHRlcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21GaWx0ZXJlZC5pbmNsdWRlcyh0aWMpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGVGaWx0ZXJlZC5pbmNsdWRlcyh0aWMpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVGaWx0ZXJlZC5pbmNsdWRlcyh0aWMpXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsRXF1aXBzLnB1c2godGljKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZpbmFsRXF1aXBzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZpbHRlck1lYXN1cmVtZW50c0ZvckN1cnJlbnRVc2VySW5TcGFjZShcclxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICAgICAgY29tbWVudHM6IENvbW1lbnRbXSxcclxuICAgICk6IFByb21pc2U8Q29tbWVudFtdPiB7XHJcbiAgICAgICAgbGV0IGZpbmFsTWVhc3VyZW1lbnRzOiBDb21tZW50W10gPSBbXTtcclxuICAgICAgICBsZXQgem9uZUZpbHRlcmVkOiBDb21tZW50W10gPSBjb21tZW50cztcclxuICAgICAgICBjb25zdCBtaXNzaW9ucyA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb25zO1xyXG4gICAgICAgIGlmIChtaXNzaW9ucykge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhY2VNaXNzaW9ucyA9IG1pc3Npb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChtKSA9PiBtLnNwYWNlSUQgPT09IHNwYWNlSUQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50U3BhY2VNaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0Um9sZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0SGlnaGVzdFJvbGVGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IHRoaXMuZ2V0RmlsdGVyc0ZvclJvbGUoaGlnaGVzdFJvbGUpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgZmlsdGVycykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuWk9ORSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNwYWNlTWlzc2lvbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmaW5hbE1lYXN1cmVtZW50cyA9IHpvbmVGaWx0ZXJlZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmluYWxNZWFzdXJlbWVudHM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaXNPYmplY3RBbGxvd2VkRm9yVXNlckluU3BhY2UoXHJcbiAgICAgICAgb2JqZWN0OiBPYmplY3QsXHJcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvbiA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24oc3BhY2VJRCk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVycyA9IHRoaXMuZ2V0RmlsdGVyc0ZvclJvbGUobWlzc2lvbi5yb2xlKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGZpbHRlciA9PT0gRmlsdGVyVHlwZS5MRVZFTCAmJlxyXG4gICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgXCJsZXZlbFwiKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxldmVsRmlsdGVyZWQgPSB0aGlzLmZpbHRlck9iamVjdHNCeUxldmVsKFxyXG4gICAgICAgICAgICAgICAgICAgIFtvYmplY3RdLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pc3Npb24ubGV2ZWwsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxldmVsRmlsdGVyZWQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuWk9ORSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgem9uZUZpbHRlcmVkID0gYXdhaXQgdGhpcy5hcHBseVpvbmVGaWx0ZXJGb3JNaXNzaW9ucyhcclxuICAgICAgICAgICAgICAgICAgICBbbWlzc2lvbl0sXHJcbiAgICAgICAgICAgICAgICAgICAgW29iamVjdF0sXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKHpvbmVGaWx0ZXJlZC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyVGVtcGxhdGVzRm9yVGVybShtaXNzaW9uczogTWlzc2lvbltdLCB0ZXJtOiBzdHJpbmcpOiBNaXNzaW9uW10ge1xyXG4gICAgICAgIC8vIHRlcm0gcHJlc2VudCBpbiBkZXNjcmlwdGlvblxyXG4gICAgICAgIGNvbnN0IGJ5RGVzY3JpcHRpb24gPSBtaXNzaW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChtaXMpID0+XHJcbiAgICAgICAgICAgICAgICBtaXMuZGVzY3JpcHRpb24gJiYgbWlzLmRlc2NyaXB0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBieSB1c2VyIGxhc3ROYW1lIHdoaWNoIGlzIHRoZSBuYW1lIG9mIHRoZSB2aXNpdDpcclxuICAgICAgICAvLyBtZXRhZGF0YTogXCJ7XFxcImZpcnN0TmFtZVxcXCI6XFxcIlxcXCIsXFxcImxhc3ROYW1lXFxcIjpcXFwiVmlzaXRlIGR1IDUgSnVpbGxldFxcXCJ9XCJcclxuICAgICAgICBjb25zdCB1c2VyUHJvZmlsZXMgPSBtaXNzaW9ucy5tYXAoKG1pcykgPT4gbmV3IFByb2ZpbGVFbnRpdHkobWlzLnVzZXIpKTtcclxuICAgICAgICBjb25zdCBieVVzZXJMYXN0bmFtZSA9IHRoaXMuZmlsdGVyVXNlcnNGb3JUZXJtKHVzZXJQcm9maWxlcywgdGVybSk7XHJcbiAgICAgICAgY29uc3QgdXNlcklkcyA9IG5ldyBTZXQoYnlVc2VyTGFzdG5hbWUubWFwKCh1c2VyKSA9PiB1c2VyLmlkKSk7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvbnNCeVVzZXIgPSBtaXNzaW9ucy5maWx0ZXIoKG1pcykgPT5cclxuICAgICAgICAgICAgdXNlcklkcy5oYXMobWlzLnVzZXJJRCksXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKFsuLi5ieURlc2NyaXB0aW9uLCAuLi5taXNzaW9uc0J5VXNlcl0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZpbHRlck9iamVjdHNGb3JTd2VlcChcclxuICAgICAgICBvYmplY3RzOiBhbnlbXSxcclxuICAgICAgICBvYmplY3RUeXBlOiBQb2lUeXBlLFxyXG4gICAgICAgIHN3ZWVwOiBzdHJpbmcsXHJcbiAgICApOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgICAgbGV0IGZpbHRlcmVkID0gW107XHJcbiAgICAgICAgc3dpdGNoIChvYmplY3RUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5FUVVJUE1FTlQ6XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwb2lzID1cclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBvaVNlcnZpY2UuZ2V0UG9pc0J5TWF0dGVycG9ydFN3ZWVwQnlUeXBlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2VlcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0VHlwZSxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXF1aXBJRHMgPSBuZXcgU2V0KHBvaXMubWFwKChwb2kpID0+IHBvaS5lbGVtZW50SUQpKTtcclxuICAgICAgICAgICAgICAgIGZpbHRlcmVkID0gb2JqZWN0cy5maWx0ZXIoKG9iamVjdCkgPT4gZXF1aXBJRHMuaGFzKG9iamVjdC5pZCkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlckZlYXR1cmVzQnlIYXNodGFnc0FuZExvY2FsZShcclxuICAgICAgICBjdXJyZW50U3BhY2VNaXNzaW9uczogTWlzc2lvbltdLFxyXG4gICAgICAgIGZlYXR1cmVzOiBGZWF0dXJlW10sXHJcbiAgICApOiBGZWF0dXJlW10ge1xyXG4gICAgICAgIGNvbnN0IFtjdXJyZW50TWlzc2lvbl0gPSBjdXJyZW50U3BhY2VNaXNzaW9ucztcclxuICAgICAgICAvLyBmaWx0ZXIgYnkgbG9jYWxlXHJcbiAgICAgICAgbGV0IGZpbHRlcmVkTG9jYWxlID0gWy4uLmZlYXR1cmVzXTtcclxuICAgICAgICBpZiAoY3VycmVudE1pc3Npb24ubG9jYWxlKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkTG9jYWxlID0gZmVhdHVyZXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKGZlYXR1cmUpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS5sb2NhbGUgJiYgZmVhdHVyZS5sb2NhbGUgPT09IGN1cnJlbnRNaXNzaW9uLmxvY2FsZSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZmlsdGVyIGJ5IGhhc2h0YWdzXHJcbiAgICAgICAgaWYgKGN1cnJlbnRNaXNzaW9uLmhhc2h0YWdzICYmIGN1cnJlbnRNaXNzaW9uLmhhc2h0YWdzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRCeUhhc2h0YWdzID0gW107XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBmaWx0ZXJlZExvY2FsZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFmZWF0dXJlLmhhc2h0YWdzIHx8IGZlYXR1cmUuaGFzaHRhZ3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRmVhdHVyZSB3aXRob3V0IGhhc2h0YWcgaXMgYXZhaWxhYmxlIGZvciBldmVyeWJvZHlcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEJ5SGFzaHRhZ3MucHVzaChmZWF0dXJlKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE1pc3Npb24uaGFzaHRhZ3MuZXZlcnkoKGhhc2h0YWcpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmUuaGFzaHRhZ3MuaW5jbHVkZXMoaGFzaHRhZyksXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRCeUhhc2h0YWdzLnB1c2goZmVhdHVyZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZpbHRlcmVkQnlIYXNodGFncztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkTG9jYWxlO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlckZlYXR1cmVzRm9yTWlzc2lvbldpdGhvdXRab25lKFxyXG4gICAgICAgIGZlYXR1cmVzOiBGZWF0dXJlW10sXHJcbiAgICAgICAgbWlzc2lvbjogTWlzc2lvbixcclxuICAgICk6IEZlYXR1cmVbXSB7XHJcbiAgICAgICAgY29uc3QgZmluYWxGZWF0dXJlczogRmVhdHVyZVtdID0gW107XHJcbiAgICAgICAgbGV0IGxldmVsRmlsdGVyZWQ6IEZlYXR1cmVbXSA9IGZlYXR1cmVzO1xyXG4gICAgICAgIGxldCB6b25lRmlsdGVyZWQ6IEZlYXR1cmVbXSA9IGZlYXR1cmVzO1xyXG4gICAgICAgIGxldCBoYXNodGFnRmlsdGVyZWQ6IEZlYXR1cmVbXSA9IGZlYXR1cmVzO1xyXG5cclxuICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShtaXNzaW9uLnJvbGUpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGZpbHRlcnMpIHtcclxuICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5MRVZFTCkge1xyXG4gICAgICAgICAgICAgICAgbGV2ZWxGaWx0ZXJlZCA9IHRoaXMuZmlsdGVyT2JqZWN0c0J5TGV2ZWwoXHJcbiAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgbWlzc2lvbi5sZXZlbCxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XHJcbiAgICAgICAgICAgIC8vICAgICB6b25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxyXG4gICAgICAgICAgICAvLyAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxyXG4gICAgICAgICAgICAvLyAgICAgICAgIGZlYXR1cmVzLFxyXG4gICAgICAgICAgICAvLyAgICAgKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLkhBU0hUQUcpIHtcclxuICAgICAgICAgICAgICAgIGhhc2h0YWdGaWx0ZXJlZCA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJGZWF0dXJlc0J5SGFzaHRhZ3NBbmRMb2NhbGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttaXNzaW9uXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IGZlYXR1cmUgb2YgbGV2ZWxGaWx0ZXJlZCkge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBoYXNodGFnRmlsdGVyZWQuaW5jbHVkZXMoZmVhdHVyZSkgJiZcclxuICAgICAgICAgICAgICAgIHpvbmVGaWx0ZXJlZC5pbmNsdWRlcyhmZWF0dXJlKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGZpbmFsRmVhdHVyZXMucHVzaChmZWF0dXJlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmluYWxGZWF0dXJlcztcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -235,4 +235,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
235
235
|
providedIn: "root",
|
|
236
236
|
}]
|
|
237
237
|
}], ctorParameters: () => [{ type: i1.EventService }, { type: i2.MissionService }] });
|
|
238
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJ2ZW50aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL2ludGVydmVudGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBUyxXQUFXLEVBQUUsU0FBUyxFQUFlLGFBQWEsRUFBK0IsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQU8xSCxNQUFNLE9BQU8sbUJBQW1CO0lBU2hCO0lBQ0E7SUFUWixzQkFBc0IsR0FBRztRQUNyQixTQUFTLENBQUMsNEJBQTRCO1FBQ3RDLFNBQVMsQ0FBQyx3QkFBd0I7UUFDbEMsU0FBUyxDQUFDLFNBQVM7UUFDbkIsU0FBUyxDQUFDLHdCQUF3QjtLQUNyQyxDQUFDO0lBRUYsWUFDWSxZQUEwQixFQUMxQixjQUE4QjtRQUQ5QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFDdkMsQ0FBQztJQUVKLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FDbEMsTUFBYztRQUVkLE1BQU0sTUFBTSxHQUNSLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxtQ0FBbUMsQ0FDdkQsTUFBTSxDQUFDLEVBQUUsQ0FDWixDQUFDO1FBQ04sTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQzNDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUNwRCxDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FDcEMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLHdCQUF3QixD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Q0QsT0FBTyxtQkFBbUIsQ0FBQztJQUMvQixDQUFDO0lBRUQsOEJBQThCLENBQUMsTUFBZTtRQUMxQyxJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUM3QixrRUFBa0U7UUFDbEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RSxLQUFLLE1BQU0sTUFBTSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2hDLElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQzNCLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztnQkFDN0MsTUFBTTtZQUNWLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxpQkFBaUIsQ0FBQztJQUM3QixDQUFDO0lBRUQsNEJBQTRCLENBQUMsTUFBZTtRQUN4QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RSxLQUFLLE1BQU0sTUFBTSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2hDLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN6QixJQUFJLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQztnQkFDOUIsTUFBTTtZQUNWLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzt3R0FwVFEsbUJBQW1COzRHQUFuQixtQkFBbUIsY0FGaEIsTUFBTTs7NEZBRVQsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRXZlbnQsIEV2ZW50U3RhdHVzLCBFdmVudFR5cGUsIFByZXN0YXRhaXJlLCBQcm9maWxlRW50aXR5LCBSZXF1ZXN0SW50ZXJ2ZW50aW9uLCBUaWNrZXQgfSBmcm9tIFwiLi4vdHlwZXMuc2VydmljZVwiO1xuaW1wb3J0IHsgRXZlbnRTZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL2V2ZW50LnNlcnZpY2VcIjtcbmltcG9ydCB7IE1pc3Npb25TZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL21pc3Npb24uc2VydmljZVwiO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXG59KVxuZXhwb3J0IGNsYXNzIEludGVydmVudGlvblNlcnZpY2Uge1xuICAgIGludGVydmVudGlvbkV2ZW50VHlwZXMgPSBbXG4gICAgICAgIEV2ZW50VHlwZS5OT05fQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OLFxuICAgICAgICBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OLFxuICAgICAgICBFdmVudFR5cGUuUkVQT1JUSU5HLFxuICAgICAgICBFdmVudFR5cGUuUkVRVUVTVF9GT1JfSU5URVJWRU5USU9OLFxuICAgIF07XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBtaXNzaW9uU2VydmljZTogTWlzc2lvblNlcnZpY2UsXG4gICAgKSB7fVxuXG4gICAgYXN5bmMgZ2V0UmVxdWVzdEludGVydmVudGlvbkZyb21UaWNrZXQoXG4gICAgICAgIHRpY2tldDogVGlja2V0LFxuICAgICk6IFByb21pc2U8UmVxdWVzdEludGVydmVudGlvbj4ge1xuICAgICAgICBjb25zdCBldmVudHMgPVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5ldmVudFNlcnZpY2UuZ2V0RXZlbnRzQnlUaWNrZXRJRFNvcnRlZEJ5RGF0ZURlc2MoXG4gICAgICAgICAgICAgICAgdGlja2V0LmlkLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcmVsYXRlZEV2ZW50cyA9IGV2ZW50cy5maWx0ZXIoKGV2ZW50XykgPT5cbiAgICAgICAgICAgIHRoaXMuaW50ZXJ2ZW50aW9uRXZlbnRUeXBlcy5pbmNsdWRlcyhldmVudF8udHlwZSksXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGFsbFJlcXVlc3RzID0gcmVsYXRlZEV2ZW50cy5maWx0ZXIoXG4gICAgICAgICAgICAoZXZlbnRfKSA9PiBldmVudF8udHlwZSA9PT0gRXZlbnRUeXBlLlJFUVVFU1RfRk9SX0lOVEVSVkVOVElPTixcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGFsbFJlcXVlc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG1vc3RSZWNlbnQgPSBhbGxSZXF1ZXN0c1swXTtcblxuICAgICAgICAgICAgY29uc3QgY29tcG9zZWRSZXF1ZXN0ID1cbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50VG9SZXF1ZXN0SW50ZXJ2ZW50aW9uKG1vc3RSZWNlbnQpO1xuXG4gICAgICAgICAgICBpZiAoY29tcG9zZWRSZXF1ZXN0LnN0YXR1cyA9PT0gRXZlbnRTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2VkUmVxdWVzdDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGV2ZW50c0Zvck1vc3RSZWNlbnRSZXF1ZXN0ID0gcmVsYXRlZEV2ZW50cy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGV2ZW50KSA9PiBldmVudC5ncm91cCA9PT0gY29tcG9zZWRSZXF1ZXN0LmlkLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxldCBpbnRlcnZlbnRpb247XG4gICAgICAgICAgICBpZiAoZXZlbnRzRm9yTW9zdFJlY2VudFJlcXVlc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gYmFjayBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgZXZlbnRzRm9yTW9zdFJlY2VudFJlcXVlc3QgPSByZWxhdGVkRXZlbnRzO1xuICAgICAgICAgICAgICAgIC8vIGdldCBpbnRlcnZlbnRpb25cbiAgICAgICAgICAgICAgICBpbnRlcnZlbnRpb24gPSB0aGlzLmNvbXBvc2VJbnRlcnZlbnRpb25Gb3JSZXF1ZXN0KFxuICAgICAgICAgICAgICAgICAgICByZWxhdGVkRXZlbnRzLFxuICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgLy8gc2V0IGR1cmF0aW9uXG4gICAgICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LnJlYWxEdXJhdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RHVyYXRpb25Gb3JSZXF1ZXN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZEV2ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGludGVydmVudGlvbiA9IHRoaXMuY29tcG9zZUludGVydmVudGlvbkZvclJlcXVlc3QoXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50c0Zvck1vc3RSZWNlbnRSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QuaWQsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QucmVhbER1cmF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXREdXJhdGlvbkZvclJlcXVlc3QoXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudHNGb3JNb3N0UmVjZW50UmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2VkUmVxdWVzdC5pZCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFjb21wb3NlZFJlcXVlc3QuZXN0aW1hdGVTdGFydERhdGUpIHtcbiAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QuZXN0aW1hdGVTdGFydERhdGUgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE1vc3RSZWNlbnRFc3RpbWF0ZVN0YXJ0RGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50c0Zvck1vc3RSZWNlbnRSZXF1ZXN0LFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LnJlYWxTdGFydERhdGUgPVxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RWFybGllc3RSZWFsU3RhcnREYXRlRm9yUmVxdWVzdChcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRlZEV2ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LmlkLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIWNvbXBvc2VkUmVxdWVzdC5lc3RpbWF0ZUVuZERhdGUpIHtcbiAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QuZXN0aW1hdGVFbmREYXRlID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRNb3N0UmVjZW50RXN0aW1hdGVFbmREYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzRm9yTW9zdFJlY2VudFJlcXVlc3QsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QucmVhbEVuZERhdGUgPVxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TGF0ZXN0UmVhbEVuZERhdGVGb3JSZXF1ZXN0KFxuICAgICAgICAgICAgICAgICAgICByZWxhdGVkRXZlbnRzLFxuICAgICAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QuaWQsXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LmludGVydmVudGlvbiA9IGludGVydmVudGlvbjtcbiAgICAgICAgICAgIHJldHVybiBjb21wb3NlZFJlcXVlc3Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29tcG9zZUludGVydmVudGlvbkZvclJlcXVlc3QoXG4gICAgICAgIHJlbGF0ZWRFdmVudHM6IEV2ZW50W10sXG4gICAgICAgIHJlcXVlc3RJRDogc3RyaW5nLFxuICAgICk6IEV2ZW50IHtcbiAgICAgICAgY29uc3QgaW50ZXJ2ZW50aW9ucyA9IHJlcXVlc3RJRFxuICAgICAgICAgICAgPyByZWxhdGVkRXZlbnRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChldmVudF8pID0+XG4gICAgICAgICAgICAgICAgICAgICAgKGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF8udHlwZSA9PT0gRXZlbnRUeXBlLkNPTlRSQUNUVUFMX0lOVEVSVkVOVElPTikgJiZcbiAgICAgICAgICAgICAgICAgICAgICBldmVudF8uZ3JvdXAgPT09IHJlcXVlc3RJRCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiByZWxhdGVkRXZlbnRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIChldmVudF8pID0+XG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5OT05fQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OIHx8XG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5DT05UUkFDVFVBTF9JTlRFUlZFTlRJT04sXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgaWYgKGludGVydmVudGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbGFzdEludGVydmVudGlvbiA9IGludGVydmVudGlvbnNbMF07XG4gICAgICAgICAgICByZXR1cm4gbGFzdEludGVydmVudGlvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBhc3luYyBnZXRQcmVzdGF0YWlyZUZvclRpY2tldCh0aWNrZXQ6IFRpY2tldCk6IFByb21pc2U8UHJlc3RhdGFpcmU+IHtcbiAgICAgICAgaWYgKHRpY2tldC5hc3NpZ25lZXMuaXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgc29ydGVkQWZmZWN0YXRpb25zID0gdGlja2V0LmFzc2lnbmVlcy5pdGVtcy5zb3J0KFxuICAgICAgICAgICAgICAgIChhLCBiKSA9PlxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmV0dGllci9wcmV0dGllclxuICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZShiLmNyZWF0ZWRBdCkgLSBuZXcgRGF0ZShhLmNyZWF0ZWRBdCksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgbWlzc2lvbklEcHJlc3RhID0gc29ydGVkQWZmZWN0YXRpb25zWzBdLm1pc3Npb25JRDtcbiAgICAgICAgICAgIGNvbnN0IHByZXN0YU1pc3Npb24gPSBhd2FpdCB0aGlzLm1pc3Npb25TZXJ2aWNlLmdldE1pc3Npb24oXG4gICAgICAgICAgICAgICAgbWlzc2lvbklEcHJlc3RhLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJQcmVzdGF0YWlyZSA9IG5ldyBQcm9maWxlRW50aXR5KHByZXN0YU1pc3Npb24udXNlcik7XG4gICAgICAgICAgICBjb25zdCBwcmVzdGF0YWlyZSA9IHtcbiAgICAgICAgICAgICAgICBvcmdhbmlzYXRpb246IHByZXN0YU1pc3Npb24ub3JnYW5pc2F0aW9uLFxuICAgICAgICAgICAgICAgIG1pc3Npb246IHByZXN0YU1pc3Npb24sXG4gICAgICAgICAgICAgICAgcHJvZmlsZTogdXNlclByZXN0YXRhaXJlLFxuICAgICAgICAgICAgICAgIG5hbWU6IHVzZXJQcmVzdGF0YWlyZS5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcHJlc3RhdGFpcmU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZ2V0RWFybGllc3RSZWFsU3RhcnREYXRlRm9yUmVxdWVzdChcbiAgICAgICAgZXZlbnRzOiBFdmVudFtdLFxuICAgICAgICByZXF1ZXN0SUQ6IHN0cmluZyxcbiAgICApOiBudW1iZXIgfCBudWxsIHtcbiAgICAgICAgbGV0IGRhdGUgPSBudWxsO1xuICAgICAgICBjb25zdCBpbnRlcnZlbnRpb25zID0gZXZlbnRzLmZpbHRlcihcbiAgICAgICAgICAgIChldmVudF8pID0+XG4gICAgICAgICAgICAgICAgKGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OIHx8XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTikgJiZcbiAgICAgICAgICAgICAgICBldmVudF8uZ3JvdXAgPT09IHJlcXVlc3RJRCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc29ydGVkSW50ZXJ2ZW50aW9ucyA9XG4gICAgICAgICAgICB0aGlzLmV2ZW50U2VydmljZS5zb3J0RXZlbnRzQnlDcmVhdGVkQXREYXRlQXNjKGludGVydmVudGlvbnMpO1xuICAgICAgICBpZiAoc29ydGVkSW50ZXJ2ZW50aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZEludGVydmVudGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQucmVhbFN0YXJ0RGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlID0gZXZlbnQucmVhbFN0YXJ0RGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIGdldExhdGVzdFJlYWxFbmREYXRlRm9yUmVxdWVzdChcbiAgICAgICAgZXZlbnRzOiBFdmVudFtdLFxuICAgICAgICByZXF1ZXN0SUQ6IHN0cmluZyxcbiAgICApOiBudW1iZXIgfCBudWxsIHtcbiAgICAgICAgbGV0IGRhdGUgPSBudWxsO1xuICAgICAgICBjb25zdCBpbnRlcnZlbnRpb25zID0gZXZlbnRzLmZpbHRlcihcbiAgICAgICAgICAgIChldmVudF8pID0+XG4gICAgICAgICAgICAgICAgKGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OIHx8XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTikgJiZcbiAgICAgICAgICAgICAgICBldmVudF8uZ3JvdXAgPT09IHJlcXVlc3RJRCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc29ydGVkSW50ZXJ2ZW50aW9ucyA9XG4gICAgICAgICAgICB0aGlzLmV2ZW50U2VydmljZS5zb3J0RXZlbnRzQnlDcmVhdGVkQXREYXRlRGVzYyhpbnRlcnZlbnRpb25zKTtcbiAgICAgICAgaWYgKHNvcnRlZEludGVydmVudGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBldmVudCBvZiBzb3J0ZWRJbnRlcnZlbnRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnJlYWxFbmREYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBldmVudC5yZWFsRW5kRGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIGdldER1cmF0aW9uRm9yUmVxdWVzdChldmVudHM6IEV2ZW50W10sIHJlcXVlc3RJRDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgbGV0IGR1cmF0aW9uID0gMDsgLy8gaW4gbWlsaXNlY29uZHNcbiAgICAgICAgY29uc3QgaW50ZXJ2ZW50aW9ucyA9IHJlcXVlc3RJRFxuICAgICAgICAgICAgPyBldmVudHMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgKGV2ZW50XykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAoZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5DT05UUkFDVFVBTF9JTlRFUlZFTlRJT04gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTikgJiZcbiAgICAgICAgICAgICAgICAgICAgICBldmVudF8uZ3JvdXAgPT09IHJlcXVlc3RJRCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBldmVudHMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgKGV2ZW50XykgPT5cbiAgICAgICAgICAgICAgICAgICAgICBldmVudF8udHlwZSA9PT0gRXZlbnRUeXBlLkNPTlRSQUNUVUFMX0lOVEVSVkVOVElPTiB8fFxuICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTixcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgZm9yIChjb25zdCBldmVudCBvZiBpbnRlcnZlbnRpb25zKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQudGltZVNwZW50KSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24gKz0gZXZlbnQudGltZVNwZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkdXJhdGlvbjtcbiAgICB9XG5cbiAgICBnZXRJbnRlcnZlbnRpb24oZXZlbnRzKTogRXZlbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgaW50ZXJ2ZW50aW9ucyA9IGV2ZW50cy5maWx0ZXIoXG4gICAgICAgICAgICAoZXZlbnRfKSA9PlxuICAgICAgICAgICAgICAgIGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTiB8fFxuICAgICAgICAgICAgICAgIGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OLFxuICAgICAgICApO1xuICAgICAgICBpZiAoaW50ZXJ2ZW50aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBsYXN0SW50ZXJ2ZW50aW9uID0gaW50ZXJ2ZW50aW9uc1swXTtcbiAgICAgICAgICAgIHJldHVybiBsYXN0SW50ZXJ2ZW50aW9uO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGV2ZW50VG9SZXF1ZXN0SW50ZXJ2ZW50aW9uKGV2ZW50OiBFdmVudCk6IFJlcXVlc3RJbnRlcnZlbnRpb24ge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgaWQ6IGV2ZW50Lmdyb3VwID09PSBcImRlZmF1bHRcIiA/IGV2ZW50LmlkIDogZXZlbnQuZ3JvdXAsXG4gICAgICAgICAgICByZWFsRW5kRGF0ZTogZXZlbnQucmVhbEVuZERhdGUsXG4gICAgICAgICAgICByZWFsU3RhcnREYXRlOiBldmVudC5yZWFsU3RhcnREYXRlLFxuICAgICAgICAgICAgZXN0aW1hdGVTdGFydERhdGU6IGV2ZW50LmVzdGltYXRlU3RhcnREYXRlLFxuICAgICAgICAgICAgZXN0aW1hdGVFbmREYXRlOiBldmVudC5lc3RpbWF0ZUVuZERhdGUsXG4gICAgICAgICAgICByZWFsRHVyYXRpb246IGV2ZW50LnRpbWVTcGVudCxcbiAgICAgICAgICAgIHR5cGU6IGV2ZW50LnR5cGUsXG4gICAgICAgICAgICBzdGF0dXM6IGV2ZW50LnN0YXR1cyxcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogZXZlbnQuY3JlYXRlZEF0LFxuICAgICAgICAgICAgdXBkYXRlZEF0OiBldmVudC51cGRhdGVkQXQsXG4gICAgICAgICAgICB0aWNrZXRJRDogZXZlbnQudGlja2V0SUQsXG4gICAgICAgIH0gYXMgUmVxdWVzdEludGVydmVudGlvbjtcbiAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgfVxuXG4gICAgZ2V0TW9zdFJlY2VudFRpbWVTcGVudChldmVudHM6IEV2ZW50W10pOiBudW1iZXIgfCBudWxsIHtcbiAgICAgICAgbGV0IHRpbWVTcGVudCA9IG51bGw7XG4gICAgICAgIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHRoaXMuZ2V0QWxsRXZlbnRzQWZ0ZXJMYXN0Q3JlYXRlZChldmVudHMpO1xuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50XyBvZiBzb3J0ZWRFdmVudHMpIHtcbiAgICAgICAgICAgIGlmIChldmVudF8udGltZVNwZW50KSB7XG4gICAgICAgICAgICAgICAgdGltZVNwZW50ID0gZXZlbnRfLnRpbWVTcGVudDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGltZVNwZW50O1xuICAgIH1cblxuICAgIGdldEFsbEV2ZW50c0FmdGVyTGFzdENyZWF0ZWQoZXZlbnRzOiBFdmVudFtdKTogRXZlbnRbXSB7XG4gICAgICAgIGNvbnN0IGV2ZW50c0FmdGVyOiBFdmVudFtdID0gW107XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbnRlcnZlbnRpb24gPSB0aGlzLmdldEN1cnJlbnRJbnRldmVudGlvbihldmVudHMpO1xuICAgICAgICBjb25zdCBzb3J0ZWRFdmVudHMgPSB0aGlzLmV2ZW50U2VydmljZS5zb3J0RXZlbnRzQnlDcmVhdGVkQXREYXRlRGVzYyhldmVudHMpO1xuICAgICAgICBpZiAoc29ydGVkRXZlbnRzLmxlbmd0aCA+IDAgJiYgY3VycmVudEludGVydmVudGlvbikge1xuICAgICAgICAgICAgZm9yIChjb25zdCBldmVudF8gb2Ygc29ydGVkRXZlbnRzKSB7XG4gICAgICAgICAgICAgICAgZXZlbnRzQWZ0ZXIucHVzaChldmVudF8pO1xuICAgICAgICAgICAgICAgIGlmIChldmVudF8uaWQgPT09IGN1cnJlbnRJbnRlcnZlbnRpb24uaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudHNBZnRlcjtcbiAgICB9XG5cbiAgICBnZXRDdXJyZW50SW50ZXZlbnRpb24oZXZlbnRzOiBFdmVudFtdKTogRXZlbnQge1xuICAgICAgICBjb25zdCBzb3J0ZWRFdmVudHMgPSB0aGlzLmV2ZW50U2VydmljZS5zb3J0RXZlbnRzQnlDcmVhdGVkQXREYXRlRGVzYyhldmVudHMpO1xuICAgICAgICBsZXQgY3VycmVudEludGVydmVudGlvbjtcbiAgICAgICAgZm9yIChjb25zdCBldmVudF8gb2Ygc29ydGVkRXZlbnRzKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnRfLnN0YXR1cyA9PT0gRXZlbnRTdGF0dXMuQ1JFQVRFRCkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRJbnRlcnZlbnRpb24gPSBldmVudF87XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXZlbnRfLnN0YXR1cyAhPT0gRXZlbnRTdGF0dXMuQ1JFQVRFRCAmJiBjdXJyZW50SW50ZXJ2ZW50aW9uKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRJbnRlcnZlbnRpb247XG4gICAgfVxuXG4gICAgZ2V0TW9zdFJlY2VudEVzdGltYXRlU3RhcnREYXRlKGV2ZW50czogRXZlbnRbXSk6IG51bWJlciB8IG51bGwge1xuICAgICAgICBsZXQgZXN0aW1hdGVTdGFydERhdGUgPSBudWxsO1xuICAgICAgICAvLyBjb25zdCBzb3J0ZWRFdmVudHMgPSB0aGlzLmdldEFsbEV2ZW50c0FmdGVyTGFzdENyZWF0ZWQoZXZlbnRzKTtcbiAgICAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcbiAgICAgICAgZm9yIChjb25zdCBldmVudF8gb2Ygc29ydGVkRXZlbnRzKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnRfLmVzdGltYXRlU3RhcnREYXRlKSB7XG4gICAgICAgICAgICAgICAgZXN0aW1hdGVTdGFydERhdGUgPSBldmVudF8uZXN0aW1hdGVTdGFydERhdGU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVzdGltYXRlU3RhcnREYXRlO1xuICAgIH1cblxuICAgIGdldE1vc3RSZWNlbnRFc3RpbWF0ZUVuZERhdGUoZXZlbnRzOiBFdmVudFtdKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIGxldCBkYXRlID0gbnVsbDtcbiAgICAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcbiAgICAgICAgZm9yIChjb25zdCBldmVudF8gb2Ygc29ydGVkRXZlbnRzKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnRfLmVzdGltYXRlRW5kRGF0ZSkge1xuICAgICAgICAgICAgICAgIGRhdGUgPSBldmVudF8uZXN0aW1hdGVFbmREYXRlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIC8vIGdldE1vc3RSZWNlbnRSZWFsU3RhcnREYXRlKGV2ZW50czogRXZlbnRbXSk6IG51bWJlciB8IG51bGwge1xuICAgIC8vICAgICBsZXQgZGF0ZSA9IG51bGw7XG4gICAgLy8gICAgIC8vIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHRoaXMuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcbiAgICAvLyAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5nZXRBbGxFdmVudHNBZnRlckxhc3RDcmVhdGVkKGV2ZW50cyk7XG4gICAgLy8gICAgIGZvciAoY29uc3QgZXZlbnRfIG9mIHNvcnRlZEV2ZW50cykge1xuICAgIC8vICAgICAgICAgaWYgKGV2ZW50Xy5yZWFsU3RhcnREYXRlKSB7XG4gICAgLy8gICAgICAgICAgICAgZGF0ZSA9IGV2ZW50Xy5yZWFsU3RhcnREYXRlO1xuICAgIC8vICAgICAgICAgICAgIGJyZWFrO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy8gICAgIHJldHVybiBkYXRlO1xuICAgIC8vIH1cblxuICAgIC8vIGdldE1vc3RSZWNlbnRSZWFsU3RhcnREYXRlR2xvYmFsKGV2ZW50czogRXZlbnRbXSk6IG51bWJlciB8IG51bGwge1xuICAgIC8vICAgICBsZXQgZGF0ZSA9IG51bGw7XG4gICAgLy8gICAgIC8vIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHRoaXMuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcbiAgICAvLyAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5nZXRBbGxFdmVudHNBZnRlckxhc3RDcmVhdGVkKGV2ZW50cyk7XG4gICAgLy8gICAgIGlmIChzb3J0ZWRFdmVudHMubGVuZ3RoID4gMCkge1xuICAgIC8vICAgICAgICAgZm9yIChjb25zdCBldmVudF8gb2Ygc29ydGVkRXZlbnRzKSB7XG4gICAgLy8gICAgICAgICAgICAgaWYgKGV2ZW50Xy5yZWFsU3RhcnREYXRlKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGRhdGUgPSBldmVudF8ucmVhbFN0YXJ0RGF0ZTtcbiAgICAvLyAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgLy8gICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy8gICAgIHJldHVybiBkYXRlO1xuICAgIC8vIH1cbn1cbiJdfQ==
|
|
238
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJ2ZW50aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL2ludGVydmVudGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBUyxXQUFXLEVBQUUsU0FBUyxFQUFlLGFBQWEsRUFBK0IsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQU8xSCxNQUFNLE9BQU8sbUJBQW1CO0lBU2hCO0lBQ0E7SUFUWixzQkFBc0IsR0FBRztRQUNyQixTQUFTLENBQUMsNEJBQTRCO1FBQ3RDLFNBQVMsQ0FBQyx3QkFBd0I7UUFDbEMsU0FBUyxDQUFDLFNBQVM7UUFDbkIsU0FBUyxDQUFDLHdCQUF3QjtLQUNyQyxDQUFDO0lBRUYsWUFDWSxZQUEwQixFQUMxQixjQUE4QjtRQUQ5QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7SUFDdkMsQ0FBQztJQUVKLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FDbEMsTUFBYztRQUVkLE1BQU0sTUFBTSxHQUNSLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxtQ0FBbUMsQ0FDdkQsTUFBTSxDQUFDLEVBQUUsQ0FDWixDQUFDO1FBQ04sTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQzNDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUNwRCxDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FDcEMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUFDLHdCQUF3QixD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Q0QsT0FBTyxtQkFBbUIsQ0FBQztJQUMvQixDQUFDO0lBRUQsOEJBQThCLENBQUMsTUFBZTtRQUMxQyxJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUM3QixrRUFBa0U7UUFDbEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RSxLQUFLLE1BQU0sTUFBTSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2hDLElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQzNCLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztnQkFDN0MsTUFBTTtZQUNWLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxpQkFBaUIsQ0FBQztJQUM3QixDQUFDO0lBRUQsNEJBQTRCLENBQUMsTUFBZTtRQUN4QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RSxLQUFLLE1BQU0sTUFBTSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2hDLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN6QixJQUFJLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQztnQkFDOUIsTUFBTTtZQUNWLENBQUM7UUFDTCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzt3R0FwVFEsbUJBQW1COzRHQUFuQixtQkFBbUIsY0FGaEIsTUFBTTs7NEZBRVQsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEV2ZW50LCBFdmVudFN0YXR1cywgRXZlbnRUeXBlLCBQcmVzdGF0YWlyZSwgUHJvZmlsZUVudGl0eSwgUmVxdWVzdEludGVydmVudGlvbiwgVGlja2V0IH0gZnJvbSBcIi4uL3R5cGVzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRXZlbnRTZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL2V2ZW50LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTWlzc2lvblNlcnZpY2UgfSBmcm9tIFwiLi9tb2RlbHMvbWlzc2lvbi5zZXJ2aWNlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiBcInJvb3RcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIEludGVydmVudGlvblNlcnZpY2Uge1xyXG4gICAgaW50ZXJ2ZW50aW9uRXZlbnRUeXBlcyA9IFtcclxuICAgICAgICBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTixcclxuICAgICAgICBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OLFxyXG4gICAgICAgIEV2ZW50VHlwZS5SRVBPUlRJTkcsXHJcbiAgICAgICAgRXZlbnRUeXBlLlJFUVVFU1RfRk9SX0lOVEVSVkVOVElPTixcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG1pc3Npb25TZXJ2aWNlOiBNaXNzaW9uU2VydmljZSxcclxuICAgICkge31cclxuXHJcbiAgICBhc3luYyBnZXRSZXF1ZXN0SW50ZXJ2ZW50aW9uRnJvbVRpY2tldChcclxuICAgICAgICB0aWNrZXQ6IFRpY2tldCxcclxuICAgICk6IFByb21pc2U8UmVxdWVzdEludGVydmVudGlvbj4ge1xyXG4gICAgICAgIGNvbnN0IGV2ZW50cyA9XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZXZlbnRTZXJ2aWNlLmdldEV2ZW50c0J5VGlja2V0SURTb3J0ZWRCeURhdGVEZXNjKFxyXG4gICAgICAgICAgICAgICAgdGlja2V0LmlkLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHJlbGF0ZWRFdmVudHMgPSBldmVudHMuZmlsdGVyKChldmVudF8pID0+XHJcbiAgICAgICAgICAgIHRoaXMuaW50ZXJ2ZW50aW9uRXZlbnRUeXBlcy5pbmNsdWRlcyhldmVudF8udHlwZSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBhbGxSZXF1ZXN0cyA9IHJlbGF0ZWRFdmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZXZlbnRfKSA9PiBldmVudF8udHlwZSA9PT0gRXZlbnRUeXBlLlJFUVVFU1RfRk9SX0lOVEVSVkVOVElPTixcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChhbGxSZXF1ZXN0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vc3RSZWNlbnQgPSBhbGxSZXF1ZXN0c1swXTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvc2VkUmVxdWVzdCA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50VG9SZXF1ZXN0SW50ZXJ2ZW50aW9uKG1vc3RSZWNlbnQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbXBvc2VkUmVxdWVzdC5zdGF0dXMgPT09IEV2ZW50U3RhdHVzLkNBTkNFTExFRCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2VkUmVxdWVzdDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGV2ZW50c0Zvck1vc3RSZWNlbnRSZXF1ZXN0ID0gcmVsYXRlZEV2ZW50cy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoZXZlbnQpID0+IGV2ZW50Lmdyb3VwID09PSBjb21wb3NlZFJlcXVlc3QuaWQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGxldCBpbnRlcnZlbnRpb247XHJcbiAgICAgICAgICAgIGlmIChldmVudHNGb3JNb3N0UmVjZW50UmVxdWVzdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIGJhY2sgY29tcGF0aWJpbGl0eVxyXG4gICAgICAgICAgICAgICAgZXZlbnRzRm9yTW9zdFJlY2VudFJlcXVlc3QgPSByZWxhdGVkRXZlbnRzO1xyXG4gICAgICAgICAgICAgICAgLy8gZ2V0IGludGVydmVudGlvblxyXG4gICAgICAgICAgICAgICAgaW50ZXJ2ZW50aW9uID0gdGhpcy5jb21wb3NlSW50ZXJ2ZW50aW9uRm9yUmVxdWVzdChcclxuICAgICAgICAgICAgICAgICAgICByZWxhdGVkRXZlbnRzLFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0IGR1cmF0aW9uXHJcbiAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QucmVhbER1cmF0aW9uID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldER1cmF0aW9uRm9yUmVxdWVzdChcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZEV2ZW50cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaW50ZXJ2ZW50aW9uID0gdGhpcy5jb21wb3NlSW50ZXJ2ZW50aW9uRm9yUmVxdWVzdChcclxuICAgICAgICAgICAgICAgICAgICBldmVudHNGb3JNb3N0UmVjZW50UmVxdWVzdCxcclxuICAgICAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QuaWQsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LnJlYWxEdXJhdGlvbiA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXREdXJhdGlvbkZvclJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50c0Zvck1vc3RSZWNlbnRSZXF1ZXN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFjb21wb3NlZFJlcXVlc3QuZXN0aW1hdGVTdGFydERhdGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbXBvc2VkUmVxdWVzdC5lc3RpbWF0ZVN0YXJ0RGF0ZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRNb3N0UmVjZW50RXN0aW1hdGVTdGFydERhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50c0Zvck1vc3RSZWNlbnRSZXF1ZXN0LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LnJlYWxTdGFydERhdGUgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRFYXJsaWVzdFJlYWxTdGFydERhdGVGb3JSZXF1ZXN0KFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0ZWRFdmVudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LmlkLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKCFjb21wb3NlZFJlcXVlc3QuZXN0aW1hdGVFbmREYXRlKSB7XHJcbiAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QuZXN0aW1hdGVFbmREYXRlID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE1vc3RSZWNlbnRFc3RpbWF0ZUVuZERhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50c0Zvck1vc3RSZWNlbnRSZXF1ZXN0LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LnJlYWxFbmREYXRlID1cclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TGF0ZXN0UmVhbEVuZERhdGVGb3JSZXF1ZXN0KFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0ZWRFdmVudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LmlkLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNvbXBvc2VkUmVxdWVzdC5pbnRlcnZlbnRpb24gPSBpbnRlcnZlbnRpb247XHJcbiAgICAgICAgICAgIHJldHVybiBjb21wb3NlZFJlcXVlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvc2VJbnRlcnZlbnRpb25Gb3JSZXF1ZXN0KFxyXG4gICAgICAgIHJlbGF0ZWRFdmVudHM6IEV2ZW50W10sXHJcbiAgICAgICAgcmVxdWVzdElEOiBzdHJpbmcsXHJcbiAgICApOiBFdmVudCB7XHJcbiAgICAgICAgY29uc3QgaW50ZXJ2ZW50aW9ucyA9IHJlcXVlc3RJRFxyXG4gICAgICAgICAgICA/IHJlbGF0ZWRFdmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTiB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRfLmdyb3VwID09PSByZXF1ZXN0SUQsXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICA6IHJlbGF0ZWRFdmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5OT05fQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICBldmVudF8udHlwZSA9PT0gRXZlbnRUeXBlLkNPTlRSQUNUVUFMX0lOVEVSVkVOVElPTixcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoaW50ZXJ2ZW50aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhc3RJbnRlcnZlbnRpb24gPSBpbnRlcnZlbnRpb25zWzBdO1xyXG4gICAgICAgICAgICByZXR1cm4gbGFzdEludGVydmVudGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0UHJlc3RhdGFpcmVGb3JUaWNrZXQodGlja2V0OiBUaWNrZXQpOiBQcm9taXNlPFByZXN0YXRhaXJlPiB7XHJcbiAgICAgICAgaWYgKHRpY2tldC5hc3NpZ25lZXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBzb3J0ZWRBZmZlY3RhdGlvbnMgPSB0aWNrZXQuYXNzaWduZWVzLml0ZW1zLnNvcnQoXHJcbiAgICAgICAgICAgICAgICAoYSwgYikgPT5cclxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZXR0aWVyL3ByZXR0aWVyXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUoYi5jcmVhdGVkQXQpIC0gbmV3IERhdGUoYS5jcmVhdGVkQXQpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCBtaXNzaW9uSURwcmVzdGEgPSBzb3J0ZWRBZmZlY3RhdGlvbnNbMF0ubWlzc2lvbklEO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVzdGFNaXNzaW9uID0gYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZS5nZXRNaXNzaW9uKFxyXG4gICAgICAgICAgICAgICAgbWlzc2lvbklEcHJlc3RhLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyUHJlc3RhdGFpcmUgPSBuZXcgUHJvZmlsZUVudGl0eShwcmVzdGFNaXNzaW9uLnVzZXIpO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVzdGF0YWlyZSA9IHtcclxuICAgICAgICAgICAgICAgIG9yZ2FuaXNhdGlvbjogcHJlc3RhTWlzc2lvbi5vcmdhbmlzYXRpb24sXHJcbiAgICAgICAgICAgICAgICBtaXNzaW9uOiBwcmVzdGFNaXNzaW9uLFxyXG4gICAgICAgICAgICAgICAgcHJvZmlsZTogdXNlclByZXN0YXRhaXJlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogdXNlclByZXN0YXRhaXJlLmRpc3BsYXlOYW1lLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gcHJlc3RhdGFpcmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEVhcmxpZXN0UmVhbFN0YXJ0RGF0ZUZvclJlcXVlc3QoXHJcbiAgICAgICAgZXZlbnRzOiBFdmVudFtdLFxyXG4gICAgICAgIHJlcXVlc3RJRDogc3RyaW5nLFxyXG4gICAgKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICAgICAgbGV0IGRhdGUgPSBudWxsO1xyXG4gICAgICAgIGNvbnN0IGludGVydmVudGlvbnMgPSBldmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgKGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5OT05fQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OKSAmJlxyXG4gICAgICAgICAgICAgICAgZXZlbnRfLmdyb3VwID09PSByZXF1ZXN0SUQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBzb3J0ZWRJbnRlcnZlbnRpb25zID1cclxuICAgICAgICAgICAgdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZUFzYyhpbnRlcnZlbnRpb25zKTtcclxuICAgICAgICBpZiAoc29ydGVkSW50ZXJ2ZW50aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkSW50ZXJ2ZW50aW9ucykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnJlYWxTdGFydERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gZXZlbnQucmVhbFN0YXJ0RGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMYXRlc3RSZWFsRW5kRGF0ZUZvclJlcXVlc3QoXHJcbiAgICAgICAgZXZlbnRzOiBFdmVudFtdLFxyXG4gICAgICAgIHJlcXVlc3RJRDogc3RyaW5nLFxyXG4gICAgKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICAgICAgbGV0IGRhdGUgPSBudWxsO1xyXG4gICAgICAgIGNvbnN0IGludGVydmVudGlvbnMgPSBldmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgKGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5OT05fQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OKSAmJlxyXG4gICAgICAgICAgICAgICAgZXZlbnRfLmdyb3VwID09PSByZXF1ZXN0SUQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBzb3J0ZWRJbnRlcnZlbnRpb25zID1cclxuICAgICAgICAgICAgdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoaW50ZXJ2ZW50aW9ucyk7XHJcbiAgICAgICAgaWYgKHNvcnRlZEludGVydmVudGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZEludGVydmVudGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChldmVudC5yZWFsRW5kRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBldmVudC5yZWFsRW5kRGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREdXJhdGlvbkZvclJlcXVlc3QoZXZlbnRzOiBFdmVudFtdLCByZXF1ZXN0SUQ6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IGR1cmF0aW9uID0gMDsgLy8gaW4gbWlsaXNlY29uZHNcclxuICAgICAgICBjb25zdCBpbnRlcnZlbnRpb25zID0gcmVxdWVzdElEXHJcbiAgICAgICAgICAgID8gZXZlbnRzLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKGV2ZW50XykgPT5cclxuICAgICAgICAgICAgICAgICAgICAgIChldmVudF8udHlwZSA9PT0gRXZlbnRUeXBlLkNPTlRSQUNUVUFMX0lOVEVSVkVOVElPTiB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Xy50eXBlID09PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTikgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Xy5ncm91cCA9PT0gcmVxdWVzdElELFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgOiBldmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5DT05UUkFDVFVBTF9JTlRFUlZFTlRJT04gfHxcclxuICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTixcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgaW50ZXJ2ZW50aW9ucykge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQudGltZVNwZW50KSB7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbiArPSBldmVudC50aW1lU3BlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEludGVydmVudGlvbihldmVudHMpOiBFdmVudCB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IGludGVydmVudGlvbnMgPSBldmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5OT05fQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OIHx8XHJcbiAgICAgICAgICAgICAgICBldmVudF8udHlwZSA9PT0gRXZlbnRUeXBlLkNPTlRSQUNUVUFMX0lOVEVSVkVOVElPTixcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChpbnRlcnZlbnRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgbGFzdEludGVydmVudGlvbiA9IGludGVydmVudGlvbnNbMF07XHJcbiAgICAgICAgICAgIHJldHVybiBsYXN0SW50ZXJ2ZW50aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBldmVudFRvUmVxdWVzdEludGVydmVudGlvbihldmVudDogRXZlbnQpOiBSZXF1ZXN0SW50ZXJ2ZW50aW9uIHtcclxuICAgICAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICBpZDogZXZlbnQuZ3JvdXAgPT09IFwiZGVmYXVsdFwiID8gZXZlbnQuaWQgOiBldmVudC5ncm91cCxcclxuICAgICAgICAgICAgcmVhbEVuZERhdGU6IGV2ZW50LnJlYWxFbmREYXRlLFxyXG4gICAgICAgICAgICByZWFsU3RhcnREYXRlOiBldmVudC5yZWFsU3RhcnREYXRlLFxyXG4gICAgICAgICAgICBlc3RpbWF0ZVN0YXJ0RGF0ZTogZXZlbnQuZXN0aW1hdGVTdGFydERhdGUsXHJcbiAgICAgICAgICAgIGVzdGltYXRlRW5kRGF0ZTogZXZlbnQuZXN0aW1hdGVFbmREYXRlLFxyXG4gICAgICAgICAgICByZWFsRHVyYXRpb246IGV2ZW50LnRpbWVTcGVudCxcclxuICAgICAgICAgICAgdHlwZTogZXZlbnQudHlwZSxcclxuICAgICAgICAgICAgc3RhdHVzOiBldmVudC5zdGF0dXMsXHJcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogZXZlbnQuY3JlYXRlZEF0LFxyXG4gICAgICAgICAgICB1cGRhdGVkQXQ6IGV2ZW50LnVwZGF0ZWRBdCxcclxuICAgICAgICAgICAgdGlja2V0SUQ6IGV2ZW50LnRpY2tldElELFxyXG4gICAgICAgIH0gYXMgUmVxdWVzdEludGVydmVudGlvbjtcclxuICAgICAgICByZXR1cm4gcmVxdWVzdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNb3N0UmVjZW50VGltZVNwZW50KGV2ZW50czogRXZlbnRbXSk6IG51bWJlciB8IG51bGwge1xyXG4gICAgICAgIGxldCB0aW1lU3BlbnQgPSBudWxsO1xyXG4gICAgICAgIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHRoaXMuZ2V0QWxsRXZlbnRzQWZ0ZXJMYXN0Q3JlYXRlZChldmVudHMpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZXZlbnRfIG9mIHNvcnRlZEV2ZW50cykge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnRfLnRpbWVTcGVudCkge1xyXG4gICAgICAgICAgICAgICAgdGltZVNwZW50ID0gZXZlbnRfLnRpbWVTcGVudDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aW1lU3BlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsRXZlbnRzQWZ0ZXJMYXN0Q3JlYXRlZChldmVudHM6IEV2ZW50W10pOiBFdmVudFtdIHtcclxuICAgICAgICBjb25zdCBldmVudHNBZnRlcjogRXZlbnRbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbnRlcnZlbnRpb24gPSB0aGlzLmdldEN1cnJlbnRJbnRldmVudGlvbihldmVudHMpO1xyXG4gICAgICAgIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHRoaXMuZXZlbnRTZXJ2aWNlLnNvcnRFdmVudHNCeUNyZWF0ZWRBdERhdGVEZXNjKGV2ZW50cyk7XHJcbiAgICAgICAgaWYgKHNvcnRlZEV2ZW50cy5sZW5ndGggPiAwICYmIGN1cnJlbnRJbnRlcnZlbnRpb24pIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBldmVudF8gb2Ygc29ydGVkRXZlbnRzKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudHNBZnRlci5wdXNoKGV2ZW50Xyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnRfLmlkID09PSBjdXJyZW50SW50ZXJ2ZW50aW9uLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50c0FmdGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEN1cnJlbnRJbnRldmVudGlvbihldmVudHM6IEV2ZW50W10pOiBFdmVudCB7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcclxuICAgICAgICBsZXQgY3VycmVudEludGVydmVudGlvbjtcclxuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50XyBvZiBzb3J0ZWRFdmVudHMpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50Xy5zdGF0dXMgPT09IEV2ZW50U3RhdHVzLkNSRUFURUQpIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRJbnRlcnZlbnRpb24gPSBldmVudF87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGV2ZW50Xy5zdGF0dXMgIT09IEV2ZW50U3RhdHVzLkNSRUFURUQgJiYgY3VycmVudEludGVydmVudGlvbikge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRJbnRlcnZlbnRpb247XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9zdFJlY2VudEVzdGltYXRlU3RhcnREYXRlKGV2ZW50czogRXZlbnRbXSk6IG51bWJlciB8IG51bGwge1xyXG4gICAgICAgIGxldCBlc3RpbWF0ZVN0YXJ0RGF0ZSA9IG51bGw7XHJcbiAgICAgICAgLy8gY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5nZXRBbGxFdmVudHNBZnRlckxhc3RDcmVhdGVkKGV2ZW50cyk7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50XyBvZiBzb3J0ZWRFdmVudHMpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50Xy5lc3RpbWF0ZVN0YXJ0RGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgZXN0aW1hdGVTdGFydERhdGUgPSBldmVudF8uZXN0aW1hdGVTdGFydERhdGU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXN0aW1hdGVTdGFydERhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9zdFJlY2VudEVzdGltYXRlRW5kRGF0ZShldmVudHM6IEV2ZW50W10pOiBudW1iZXIgfCBudWxsIHtcclxuICAgICAgICBsZXQgZGF0ZSA9IG51bGw7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50XyBvZiBzb3J0ZWRFdmVudHMpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50Xy5lc3RpbWF0ZUVuZERhdGUpIHtcclxuICAgICAgICAgICAgICAgIGRhdGUgPSBldmVudF8uZXN0aW1hdGVFbmREYXRlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZ2V0TW9zdFJlY2VudFJlYWxTdGFydERhdGUoZXZlbnRzOiBFdmVudFtdKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICAvLyAgICAgbGV0IGRhdGUgPSBudWxsO1xyXG4gICAgLy8gICAgIC8vIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHRoaXMuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcclxuICAgIC8vICAgICBjb25zdCBzb3J0ZWRFdmVudHMgPSB0aGlzLmdldEFsbEV2ZW50c0FmdGVyTGFzdENyZWF0ZWQoZXZlbnRzKTtcclxuICAgIC8vICAgICBmb3IgKGNvbnN0IGV2ZW50XyBvZiBzb3J0ZWRFdmVudHMpIHtcclxuICAgIC8vICAgICAgICAgaWYgKGV2ZW50Xy5yZWFsU3RhcnREYXRlKSB7XHJcbiAgICAvLyAgICAgICAgICAgICBkYXRlID0gZXZlbnRfLnJlYWxTdGFydERhdGU7XHJcbiAgICAvLyAgICAgICAgICAgICBicmVhaztcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICByZXR1cm4gZGF0ZTtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBnZXRNb3N0UmVjZW50UmVhbFN0YXJ0RGF0ZUdsb2JhbChldmVudHM6IEV2ZW50W10pOiBudW1iZXIgfCBudWxsIHtcclxuICAgIC8vICAgICBsZXQgZGF0ZSA9IG51bGw7XHJcbiAgICAvLyAgICAgLy8gY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5zb3J0RXZlbnRzQnlDcmVhdGVkQXREYXRlRGVzYyhldmVudHMpO1xyXG4gICAgLy8gICAgIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHRoaXMuZ2V0QWxsRXZlbnRzQWZ0ZXJMYXN0Q3JlYXRlZChldmVudHMpO1xyXG4gICAgLy8gICAgIGlmIChzb3J0ZWRFdmVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICAgICAgICBmb3IgKGNvbnN0IGV2ZW50XyBvZiBzb3J0ZWRFdmVudHMpIHtcclxuICAgIC8vICAgICAgICAgICAgIGlmIChldmVudF8ucmVhbFN0YXJ0RGF0ZSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGRhdGUgPSBldmVudF8ucmVhbFN0YXJ0RGF0ZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICByZXR1cm4gZGF0ZTtcclxuICAgIC8vIH1cclxufVxyXG4iXX0=
|
|
@@ -41,4 +41,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
41
41
|
providedIn: "root",
|
|
42
42
|
}]
|
|
43
43
|
}], ctorParameters: () => [{ type: i1.TranslateService }] });
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL2xvY2FsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBSy9CLE1BQU0sT0FBTyxhQUFhO0lBUUg7SUFQbkIsYUFBYSxHQUFHLElBQUksQ0FBQztJQUVyQiw0QkFBNEI7SUFDcEIsZUFBZSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFFeEMsVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFakQsWUFBbUIsU0FBMkI7UUFBM0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7SUFBSSxDQUFDO0lBRW5ELEtBQUs7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsSUFBWTtRQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtJQUNuRSxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsSUFBSSxJQUFJLENBQUM7UUFDaEcsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdELENBQUM7d0dBaENRLGFBQWE7NEdBQWIsYUFBYSxjQUZWLE1BQU07OzRGQUVULGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9jYWxlU2VydmljZSB7XHJcbiAgICBjdXJyZW50TG9jYWxlID0gXCJlblwiO1xyXG5cclxuICAgIC8vIE9ic2VydmFibGUgc3RyaW5nIHNvdXJjZXNcclxuICAgIHByaXZhdGUgc2hvd01vZGFsU291cmNlID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICBzaG93TW9kYWwkID0gdGhpcy5zaG93TW9kYWxTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSkgeyB9XHJcblxyXG4gICAgbW9kYWwoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93TW9kYWxTb3VyY2UubmV4dCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlbG9hZCB0aGUgYXBwIHRvIGFub3RoZXIgbGFuZ3VhZ2UuXHJcbiAgICAgKlxyXG4gICAgICogTmF2aWdhdGlvbiBpcyByZXF1aXJlZCBiZWNhdXNlIG9mIHRoZSB3YXkgYW5ndWxhciBsb2NhbGl6ZXM6IGxvY2FsZXMgYXJlXHJcbiAgICAgKiBjb21wbGV0ZWx5IGRpZmZlcmVudCBjb21waWxhdGlvbiBidW5kbGVzLCBpbiBzZXBhcmF0ZSBkaXJlY3RvcmllcywgaGVuY2VcclxuICAgICAqIHlvdSBuZWVkIHRvIHJlbG9hZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gbGFuZ1xyXG4gICAgICovXHJcbiAgICBjaGFuZ2UobGFuZzogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJTd2l0Y2hpbmcgdG9cIiwgbGFuZyk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TG9jYWxlID0gbGFuZztcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS51c2UoYF8ke2xhbmd9YCk7IC8vIGJlY2F1c2UgZmlsZXMgYXJlIFwiX2VuLmpzb25cIlxyXG4gICAgfVxyXG5cclxuICAgIGdldExvY2FsZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRMYW5nID0gdGhpcy50cmFuc2xhdGUuZ2V0Q3VycmVudExhbmcoKSB8fCB0aGlzLnRyYW5zbGF0ZS5nZXRGYWxsYmFja0xhbmcoKSB8fCBcImZyXCI7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRMYW5nLnJlcGxhY2UoL15bXy1dKy8sICcnKS5zdWJzdHJpbmcoMCwgMik7XHJcbiAgICB9XHJcbn1cclxuIl19
|