@mnaoumov/typescript-dev-toolkit 6.0.1 → 6.1.0
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 +18 -0
- package/dist/lib/cjs/docs-site/api-doc-link-rendering.cjs +11 -2
- package/dist/lib/cjs/docs-site/api-doc-type-merging.cjs +19 -7
- package/dist/lib/cjs/version.cjs +65 -10
- package/dist/lib/cjs/version.d.cts +20 -0
- package/dist/lib/esm/docs-site/api-doc-link-rendering.mjs +11 -2
- package/dist/lib/esm/docs-site/api-doc-type-merging.mjs +19 -7
- package/dist/lib/esm/version.d.mts +20 -0
- package/dist/lib/esm/version.mjs +65 -10
- package/package.json +21 -21
|
@@ -53,6 +53,13 @@ export interface PublishGitHubReleaseOptions {
|
|
|
53
53
|
* @default `true`
|
|
54
54
|
*/
|
|
55
55
|
readonly shouldCloseReleasedIssues?: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Whether to require every asset to exist, require an existing remote tag, and verify the published
|
|
58
|
+
* non-draft release and its uploaded assets before closing issues.
|
|
59
|
+
*
|
|
60
|
+
* @default `false`
|
|
61
|
+
*/
|
|
62
|
+
readonly shouldVerifyRelease?: boolean;
|
|
56
63
|
}
|
|
57
64
|
/**
|
|
58
65
|
* Options for {@link updateChangelog}.
|
|
@@ -133,6 +140,16 @@ export interface UpdateVersionOptions {
|
|
|
133
140
|
* @default `true`
|
|
134
141
|
*/
|
|
135
142
|
readonly shouldEditChangelog?: boolean;
|
|
143
|
+
/**
|
|
144
|
+
* Whether to publish and verify the GitHub release before pushing the version commit to the branch.
|
|
145
|
+
* Preparation and asset validation happen before any push. Only the release tag is pushed first;
|
|
146
|
+
* a failed preparation, publication or verification leaves the remote branch unchanged.
|
|
147
|
+
* Uses the `origin` remote and pushes the verified commit to the original branch without force.
|
|
148
|
+
* Ignored when {@link shouldRelease} is `false`.
|
|
149
|
+
*
|
|
150
|
+
* @default `false`
|
|
151
|
+
*/
|
|
152
|
+
readonly shouldPublishBeforePush?: boolean;
|
|
136
153
|
/**
|
|
137
154
|
* Whether to publish the release. When `false`, all local steps are executed (version bump,
|
|
138
155
|
* changelog, commit, tag), but the changes are not pushed and no GitHub release is published.
|
|
@@ -431,6 +448,9 @@ export declare function updateChangelog(newVersion: string, options?: UpdateChan
|
|
|
431
448
|
* 11. Prepares and publishes a GitHub release.
|
|
432
449
|
* 12. Closes the issues the release carries, with a link to it.
|
|
433
450
|
*
|
|
451
|
+
* With {@link UpdateVersionOptions.shouldPublishBeforePush}, preparation and asset validation precede
|
|
452
|
+
* the tag push. Publication and verification then precede the branch push, and issue closing remains last.
|
|
453
|
+
*
|
|
434
454
|
* @param versionUpdateType - The type of version update to perform (major, minor, patch, premajor, preminor, prepatch, prerelease, or x.y.z[-suffix]).
|
|
435
455
|
* @param options - The {@link UpdateVersionOptions} controlling the release behavior.
|
|
436
456
|
* @returns A {@link Promise} that resolves when the version update is complete.
|
|
@@ -121,7 +121,16 @@ function memberHref(memberSlugString, inheritedFrom, allTypes, currentNamespace)
|
|
|
121
121
|
if (!inheritedFrom) {
|
|
122
122
|
return `./${memberSlugString}/`;
|
|
123
123
|
}
|
|
124
|
-
|
|
124
|
+
let parentInfo = findType(allTypes, inheritedFrom, currentNamespace);
|
|
125
|
+
const visited = /* @__PURE__ */ new Set();
|
|
126
|
+
while (parentInfo && !doesMemberPageExist(parentInfo.namespace, parentInfo.name, memberSlugString)) {
|
|
127
|
+
if (visited.has(parentInfo)) {
|
|
128
|
+
return "";
|
|
129
|
+
}
|
|
130
|
+
visited.add(parentInfo);
|
|
131
|
+
const member = parentInfo.properties.find((property) => memberRouteSegment(property.name) === memberSlugString) ?? parentInfo.methods.find((method) => overloadRouteSegment(method.overloadKey) === memberSlugString);
|
|
132
|
+
parentInfo = member?.inheritedFrom ? findType(allTypes, member.inheritedFrom, parentInfo.namespace) : void 0;
|
|
133
|
+
}
|
|
125
134
|
if (!parentInfo || !doesMemberPageExist(parentInfo.namespace, parentInfo.name, memberSlugString)) {
|
|
126
135
|
return "";
|
|
127
136
|
}
|
|
@@ -353,4 +362,4 @@ export {
|
|
|
353
362
|
typeHref,
|
|
354
363
|
typeLink
|
|
355
364
|
};
|
|
356
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy1saW5rLXJlbmRlcmluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVHlwZS1saW5rIHJlbmRlcmluZzogdHVybnMgdHlwZSB0ZXh0IGFuZCBpbmxpbmUgbGluayB0YWdzIGludG8gbWFya2Rvd24gbGlua3MgdG8gZ2VuZXJhdGVkIHBhZ2VzXG4gKiBvciBleHRlcm5hbCByZWZlcmVuY2VzIChUeXBlU2NyaXB0IGhhbmRib29rLCBNRE4gV2ViIEFQSSwgSlMgZ2xvYmFscykuXG4gKi9cblxuaW1wb3J0IHtcbiAgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCxcbiAgZ2V0T3B0aW9uYWxOYW1lZEdyb3VwXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9yZWctZXhwJztcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgVHlwZUluZm8sXG4gIFdlYkFwaUVudHJ5XG59IGZyb20gJy4vYXBpLWRvYy10eXBlcy50cyc7XG5cbmltcG9ydCB7XG4gIEdFTkVSSUNfVFlQRV9QQVJBTVMsXG4gIFRTX0dMT0JBTF9UWVBFUyxcbiAgVFNfUFJJTUlUSVZFX1RZUEVTLFxuICBUU19VVElMSVRZX1RZUEVTXG59IGZyb20gJy4vYXBpLWRvYy1jb25zdGFudHMudHMnO1xuaW1wb3J0IHsgZ2V0UGFja2FnZVR5cGVVcmwgfSBmcm9tICcuL2FwaS1kb2MtcGFja2FnZS1zaXRlcy50cyc7XG5pbXBvcnQge1xuICB0b1JvdXRlU2VnbWVudCxcbiAgdG9Sb3V0ZVNlZ21lbnRQcmVzZXJ2ZUNhc2Vcbn0gZnJvbSAnLi9hcGktZG9jLXJvdXRlLXNlZ21lbnRzLnRzJztcbmltcG9ydCB7IGdldEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcbmltcG9ydCB7XG4gIGVzY2FwZU1keEFuZ2xlQnJhY2tldHMsXG4gIGVzY2FwZU1keFByb3NlLFxuICBnZXROYW1lc3BhY2VEaXJlY3RvcnksXG4gIG1lbWJlclJvdXRlU2VnbWVudCxcbiAgbWVtYmVyU2x1ZyxcbiAgb3ZlcmxvYWRSb3V0ZVNlZ21lbnQsXG4gIG92ZXJsb2FkU2x1ZyxcbiAgcmVwbGFjZVJlZ0V4cE1hdGNoZXMsXG4gIHNlZ21lbnRNYXJrZG93blxufSBmcm9tICcuL2FwaS1kb2MtdGV4dC11dGlscy50cyc7XG5cbi8qKlxuTG9hZGVkIGZyb20gdHlwZWRvYy1wbHVnaW4tbWRuLWxpbmtzIGRhdGEgYXQgcnVudGltZVxuICovXG4vKipcbk1vZHVsZS1sZXZlbCBtdXRhYmxlIHN0YXRlLCBoZWxkIGluIG9uZSBvYmplY3Qgc28gZWFjaCBtdXRhdGlvbiBuYW1lcyBpdCBleHBsaWNpdGx5LlxuICovXG5pbnRlcmZhY2UgTW9kdWxlU3RhdGUge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZWFkb25seS1pbnRlcmZhY2UtbWVtYmVycyAtLSBUaGUgV2ViIEFQSSBtZXRhZGF0YSBjYWNoZSBpcyByZXBsYWNlZCBhZnRlciBsb2FkaW5nLlxuICB3ZWJBcGlUeXBlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmNvbnN0IG1vZHVsZVN0YXRlOiBNb2R1bGVTdGF0ZSA9IHtcbiAgd2ViQXBpVHlwZXM6IHt9XG59O1xuLyoqXG5Mb3dlcmNhc2VkLCBjb2xsaXNpb24tZGlzYW1iaWd1YXRlZCBPTi1ESVNLIHNlZ21lbnQgcGVyIHF1YWxpZmllZCB0eXBlIGtleSAoYCR7bmFtZXNwYWNlfSMke25hbWV9YCkuXG4gKi9cbmNvbnN0IHR5cGVGaWxlU2VnbWVudHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuLyoqXG5DYXNlLXByZXNlcnZlZCBVUkwvcm91dGUgc2VnbWVudCBwZXIgcXVhbGlmaWVkIHR5cGUga2V5IChgJHtuYW1lc3BhY2V9IyR7bmFtZX1gKS5cbiAqL1xuY29uc3QgdHlwZVJvdXRlU2VnbWVudHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4vKipcbiAqIFJvdXRlLXNlZ21lbnQga2V5cyBvZiB0aGUgbWVtYmVyIHBhZ2VzIHRoYXQgYGdlbmVyYXRlTWVtYmVyUGFnZXNgIHdpbGwgYWN0dWFsbHkgZW1pdCwgYXNcbiAqIGAke25hbWVzcGFjZX0jJHtUeXBlTmFtZX0jJHtyb3V0ZVNlZ21lbnR9YC4gT25seSBOT04taW5oZXJpdGVkIHByb3BlcnRpZXMgYW5kIG5vbi1pbmhlcml0ZWQgbWV0aG9kXG4gKiBvdmVybG9hZCBrZXlzIGdldCBhIHBhZ2UsIHNvIHRoaXMgbGV0cyBsaW5rIGVtaXR0ZXJzIGF2b2lkIHBvaW50aW5nIGF0IGEgbWVtYmVyIHBhZ2UgdGhhdCBpcyBuZXZlclxuICogZ2VuZXJhdGVkIChhbiBpbmhlcml0ZWQgbWVtYmVyLCBhbiBlbnVtIG1lbWJlciwgYW4gb3B0aW9ucy1pbnRlcmZhY2UgbWVtYmVyKSDigJQgd2hpY2ggd291bGQgNDA0LlxuICovXG5jb25zdCBnZW5lcmF0ZWRNZW1iZXJQYWdlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4vKipcbiAqIFdoZXRoZXIgYSBtZW1iZXIgcGFnZSB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgYHJvdXRlU2VnbWVudGAgb24gdGhlIGdpdmVuIHR5cGUuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSB0eXBlJ3MgbmFtZXNwYWNlLlxuICogQHBhcmFtIHR5cGVOYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIHJvdXRlU2VnbWVudCAtIFRoZSBtZW1iZXIncyByb3V0ZSBzZWdtZW50LlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcGFnZSBpcyBnZW5lcmF0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb2VzTWVtYmVyUGFnZUV4aXN0KG5hbWVzcGFjZTogc3RyaW5nLCB0eXBlTmFtZTogc3RyaW5nLCByb3V0ZVNlZ21lbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2VuZXJhdGVkTWVtYmVyUGFnZXMuaGFzKGAke25hbWVzcGFjZX0jJHt0eXBlTmFtZX0jJHtyb3V0ZVNlZ21lbnR9YCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGJhcmUgdHlwZSBuYW1lIHRvIGEgZG9jdW1lbnRlZCBgVHlwZUluZm9gLlxuICpcbiAqIFRoZSBtb2RlbCBtYXAgaXMga2V5ZWQgYnkgYSBxdWFsaWZpZWQgYCR7bmFtZXNwYWNlfSMke25hbWV9YCBpZGVudGl0eSwgYmVjYXVzZSBhIHBhY2thZ2VcbiAqIGNhbiBleHBvcnQgdGhlIHNhbWUgc2ltcGxlIG5hbWUgZnJvbSBkaWZmZXJlbnQgbW9kdWxlcy4gUmVzb2x1dGlvbiBpcyBiZXN0LWVmZm9ydDpcbiAqICAgMS4gUHJlZmVyIGEgdHlwZSBpbiBgY3VycmVudE5hbWVzcGFjZWAgKHRoZSByZWZlcmVuY2luZyBwYWdlJ3MgbW9kdWxlKS5cbiAqICAgMi4gT3RoZXJ3aXNlLCBpZiBleGFjdGx5IG9uZSB0eXBlIGFjcm9zcyBhbGwgbW9kdWxlcyBoYXMgdGhhdCBiYXJlIG5hbWUsIHVzZSBpdC5cbiAqICAgMy4gSWYgdGhlIGJhcmUgbmFtZSBpcyBhbWJpZ3VvdXMgKG11bHRpcGxlIG1vZHVsZXMpLCBnaXZlIHVwIChjYWxsZXIgcmVuZGVycyBwbGFpbiBjb2RlKS5cbiAqXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEBwYXJhbSBjdXJyZW50TmFtZXNwYWNlIC0gVGhlIG5hbWVzcGFjZSBvZiB0aGUgcmVmZXJlbmNpbmcgcGFnZSwgcHJlZmVycmVkIHdoZW4gdGhlIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHR5cGUsIG9yIGB1bmRlZmluZWRgIHdoZW4gbm8gdHlwZSBvciBtb3JlIHRoYW4gb25lIGhhcyB0aGF0IG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kVHlwZShhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBuYW1lOiBzdHJpbmcsIGN1cnJlbnROYW1lc3BhY2U/OiBzdHJpbmcpOiBUeXBlSW5mbyB8IHVuZGVmaW5lZCB7XG4gIGlmIChjdXJyZW50TmFtZXNwYWNlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBxdWFsaWZpZWQgPSBhbGxUeXBlcy5nZXQoYCR7Y3VycmVudE5hbWVzcGFjZX0jJHtuYW1lfWApO1xuICAgIGlmIChxdWFsaWZpZWQpIHtcbiAgICAgIHJldHVybiBxdWFsaWZpZWQ7XG4gICAgfVxuICB9XG4gIGxldCBmb3VuZDogVHlwZUluZm8gfCB1bmRlZmluZWQ7XG4gIGxldCBtYXRjaENvdW50ID0gMDtcbiAgZm9yIChjb25zdCBpbmZvIG9mIGFsbFR5cGVzLnZhbHVlcygpKSB7XG4gICAgaWYgKGluZm8ubmFtZSAhPT0gbmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZm91bmQgPSBpbmZvO1xuICAgIG1hdGNoQ291bnQrKztcbiAgICBpZiAobWF0Y2hDb3VudCA+IDEpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXRjaENvdW50ID09PSAxID8gZm91bmQgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTGluayBhIGJhc2UgdHlwZSBleHByZXNzaW9uIGZvciB0aGUgXCJFeHRlbmRzOlwiIGxpbmUuXG4gKiBTaW1wbGUgdHlwZSByZWZlcmVuY2VzIChpZGVudGlmaWVyICsgb3B0aW9uYWwgZ2VuZXJpY3MpIHVzZSByZW5kZXJUeXBlV2l0aExpbmtzXG4gKiBzbyBlYWNoIHR5cGUgYXJndW1lbnQgZ2V0cyBpdHMgb3duIGxpbmsuXG4gKiBDb21wbGV4IGV4cHJlc3Npb25zIChvYmplY3QgdHlwZXMsIGludGVyc2VjdGlvbnMsIGV0Yy4pIGZhbGwgYmFjayB0byB0eXBlTGlua1xuICogdG8gYXZvaWQgTURYIHBhcnNpbmcgaXNzdWVzIHdpdGggYHtgLCBgfWAsIGB8YCBldGMuXG4gKlxuICogQHBhcmFtIHR5cGVOYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIGN1cnJlbnROYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSByZWZlcmVuY2luZyBwYWdlLCBwcmVmZXJyZWQgd2hlbiB0aGUgbmFtZSBpcyBhbWJpZ3VvdXMuXG4gKiBAcmV0dXJucyBUaGUgbGlua2VkIHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaW5rQmFzZVR5cGUodHlwZU5hbWU6IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgY3VycmVudE5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGlzU2ltcGxlVHlwZVJlZiA9IC9eW2EtekEtWl1bYS16QS1aMC05XSooPzo8Lio+KT8kLy50ZXN0KHR5cGVOYW1lLnRyaW0oKSk7XG4gIHJldHVybiBpc1NpbXBsZVR5cGVSZWYgPyBlc2NhcGVNZHhBbmdsZUJyYWNrZXRzKHJlbmRlclR5cGVXaXRoTGlua3ModHlwZU5hbWUsIGFsbFR5cGVzLCB1bmRlZmluZWQsIGN1cnJlbnROYW1lc3BhY2UpKSA6IHR5cGVMaW5rKHR5cGVOYW1lLCBhbGxUeXBlcywgY3VycmVudE5hbWVzcGFjZSk7XG59XG5cbi8qKlxuICogTG9hZHMgdGhlIFdlYiBBUEkgbGlua3MgYHR5cGVkb2MtcGx1Z2luLW1kbi1saW5rc2Agc2hpcHMsIGlmIGl0IGlzIGluc3RhbGxlZC4gV2l0aG91dCBpdCwgV2ViIEFQSSB0eXBlcyByZW5kZXJcbiAqIHVubGlua2VkLlxuICpcbiAqIEBwYXJhbSByb290RGlyZWN0b3J5IC0gVGhlIGZvbGRlciB3aG9zZSBgbm9kZV9tb2R1bGVzYCBob2xkcyB0aGUgcGFja2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRFeHRlcm5hbFR5cGVNYXBzKHJvb3REaXJlY3Rvcnk6IHN0cmluZyk6IHZvaWQge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGFQYXRoID0gam9pbihyb290RGlyZWN0b3J5LCAnbm9kZV9tb2R1bGVzL3R5cGVkb2MtcGx1Z2luLW1kbi1saW5rcy9kYXRhL3dlYi1hcGkuanNvbicpO1xuICAgIG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoZGF0YVBhdGgsICd1dGYtOCcpKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zb2xlLndhcm4oYExvYWRlZCAke1N0cmluZyhPYmplY3Qua2V5cyhtb2R1bGVTdGF0ZS53ZWJBcGlUeXBlcykubGVuZ3RoKX0gV2ViIEFQSSB0eXBlIGxpbmtzYCk7XG4gIH0gY2F0Y2gge1xuICAgIG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzID0ge307XG4gICAgY29uc29sZS53YXJuKCd0eXBlZG9jLXBsdWdpbi1tZG4tbGlua3MgZGF0YSBub3QgZm91bmQg4oCUIFdlYiBBUEkgbGlua3Mgd2lsbCBiZSB1bmF2YWlsYWJsZS4nKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnQgaW5saW5lIG1hcmtkb3duIHRvIEhUTUwgZm9yIHVzZSBpbiBjb21wb25lbnQgcHJvcHMgd2l0aCBzZXQ6aHRtbFxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgSFRNTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtkb3duVG9IdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGVzY2FwZWQgPSB0ZXh0XG4gICAgLnJlcGxhY2VBbGwoJyYnLCAnJmFtcDsnKVxuICAgIC5yZXBsYWNlQWxsKCc8JywgJyZsdDsnKVxuICAgIC5yZXBsYWNlQWxsKCc+JywgJyZndDsnKTtcbiAgcmV0dXJuIHJlcGxhY2VSZWdFeHBNYXRjaGVzKGVzY2FwZWQsIC9cXFsoPzx0ZXh0PlteXFxdXSspXFxdXFwoKD88dXJsPlteKV0rKVxcKS9nLCAobWF0Y2gpID0+IHtcbiAgICBjb25zdCBsaW5rVGV4dCA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICd0ZXh0Jyk7XG4gICAgY29uc3QgdXJsID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3VybCcpO1xuICAgIC8vIEEgcmVsYXRpdmUgVVJMIGhlcmUgaXMgYW4gaWxsdXN0cmF0aXZlIGV4YW1wbGUgcGF0aCBpbiBUU0RvYyAoZS5nLiBgW2Zvb10oZm9vLnBuZylgKSwgbm90IGFcbiAgICAvLyByZWFsIG5hdmlnYWJsZSBsaW5rIOKAlCByZW5kZXIgaXQgYXMgbGl0ZXJhbCBpbmxpbmUgY29kZSBzbyBpdCBuZWl0aGVyIDQwNHMgbm9yIGxvc2VzIG1lYW5pbmcuXG4gICAgcmV0dXJuIC9eKD86aHR0cHM/OlxcL1xcL3xcXC98I3xtYWlsdG86KS8udGVzdCh1cmwpID8gYDxhIGhyZWY9XCIke3VybH1cIj4ke2xpbmtUZXh0fTwvYT5gIDogYDxjb2RlPlske2xpbmtUZXh0fV0oJHt1cmx9KTwvY29kZT5gO1xuICB9KVxuICAgIC5yZXBsYWNlQWxsKC9gKD88Y29kZT5bXmBdKylgL2csICc8Y29kZT4kPGNvZGU+PC9jb2RlPicpXG4gICAgLnJlcGxhY2VBbGwoJ1xcbicsICc8YnIvPicpO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBocmVmIGZvciBhIG1lbWJlciwgcG9pbnRpbmcgdG8gdGhlIHBhcmVudCB0eXBlJ3MgcGFnZSBpZiBpbmhlcml0ZWRcbiAqXG4gKiBAcGFyYW0gbWVtYmVyU2x1Z1N0cmluZyAtIFRoZSBtZW1iZXIncyByb3V0ZSBzZWdtZW50LlxuICogQHBhcmFtIGluaGVyaXRlZEZyb20gLSBUaGUgbmFtZSBvZiB0aGUgdHlwZSB0aGUgbWVtYmVyIGlzIGluaGVyaXRlZCBmcm9tLCBvciBhbiBlbXB0eSBzdHJpbmcgZm9yIGFuIG93biBtZW1iZXIuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gY3VycmVudE5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHJlZmVyZW5jaW5nIHBhZ2UsIHByZWZlcnJlZCB3aGVuIHRoZSBuYW1lIGlzIGFtYmlndW91cy5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLCBvciBhbiBlbXB0eSBzdHJpbmcgd2hlbiBubyBwYWdlIGRvY3VtZW50cyB0aGUgbWVtYmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVtYmVySHJlZihtZW1iZXJTbHVnU3RyaW5nOiBzdHJpbmcsIGluaGVyaXRlZEZyb206IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgY3VycmVudE5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghaW5oZXJpdGVkRnJvbSkge1xuICAgIC8vIE93biAobm9uLWluaGVyaXRlZCkgbWVtYmVyIOKAlCBgZ2VuZXJhdGVNZW1iZXJQYWdlc2AgYWx3YXlzIGVtaXRzIGl0cyBwYWdlIG9uIHRoaXMgc2FtZSBwYWdlLlxuICAgIHJldHVybiBgLi8ke21lbWJlclNsdWdTdHJpbmd9L2A7XG4gIH1cbiAgY29uc3QgcGFyZW50SW5mbyA9IGZpbmRUeXBlKGFsbFR5cGVzLCBpbmhlcml0ZWRGcm9tLCBjdXJyZW50TmFtZXNwYWNlKTtcbiAgaWYgKCFwYXJlbnRJbmZvIHx8ICFkb2VzTWVtYmVyUGFnZUV4aXN0KHBhcmVudEluZm8ubmFtZXNwYWNlLCBwYXJlbnRJbmZvLm5hbWUsIG1lbWJlclNsdWdTdHJpbmcpKSB7XG4gICAgLy8gVGhlIGRlY2xhcmluZyBwYXJlbnQgaGFzIG5vIGdlbmVyYXRlZCBwYWdlIGZvciB0aGlzIG1lbWJlciAoaXQgaW5oZXJpdGVkIHRoZSBtZW1iZXIgdG9vLCBvciBpc1xuICAgIC8vIHVuZG9jdW1lbnRlZCkuIFJldHVybiBubyBocmVmIHNvIHRoZSBjYWxsZXIgcmVuZGVycyBwbGFpbiB0ZXh0IGluc3RlYWQgb2YgYSBicm9rZW4gbGluay5cbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29uc3QgcGFyZW50TnNEaXJlY3RvcnkgPSBnZXROYW1lc3BhY2VEaXJlY3RvcnkocGFyZW50SW5mby5uYW1lc3BhY2UpO1xuICByZXR1cm4gYCR7Z2V0QmFzZVBhdGgoKX0vYXBpLyR7cGFyZW50TnNEaXJlY3Rvcnl9LyR7dG9UeXBlUm91dGVTZWdtZW50KHBhcmVudEluZm8ubmFtZXNwYWNlLCBwYXJlbnRJbmZvLm5hbWUpfS8ke21lbWJlclNsdWdTdHJpbmd9L2A7XG59XG5cbi8qKlxuICogUG9wdWxhdGUge0BsaW5rIGRvZXNNZW1iZXJQYWdlRXhpc3R9LiBNaXJyb3JzIGBnZW5lcmF0ZU1lbWJlclBhZ2VzYCdzIG93biBmaWx0ZXJpbmcgZXhhY3RseSAob25lIHBhZ2VcbiAqIHBlciBub24taW5oZXJpdGVkIHByb3BlcnR5LCBvbmUgcGVyIG5vbi1pbmhlcml0ZWQgbWV0aG9kIG92ZXJsb2FkIGtleSkuIE11c3QgcnVuIG9uY2UgYmVmb3JlIGFueVxuICogbGluayBpcyByZW5kZXJlZC5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJNZW1iZXJQYWdlcyh0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGdlbmVyYXRlZE1lbWJlclBhZ2VzLmNsZWFyKCk7XG4gIGZvciAoY29uc3QgaW5mbyBvZiB0eXBlcy52YWx1ZXMoKSkge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgaW5mby5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoIXByb3BlcnR5LmluaGVyaXRlZEZyb20pIHtcbiAgICAgICAgZ2VuZXJhdGVkTWVtYmVyUGFnZXMuYWRkKGAke2luZm8ubmFtZXNwYWNlfSMke2luZm8ubmFtZX0jJHttZW1iZXJSb3V0ZVNlZ21lbnQocHJvcGVydHkubmFtZSl9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG92ZXJsb2FkS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGluZm8ubWV0aG9kcykge1xuICAgICAgaWYgKCFtZXRob2QuaW5oZXJpdGVkRnJvbSkge1xuICAgICAgICBvdmVybG9hZEtleXMuYWRkKG1ldGhvZC5vdmVybG9hZEtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3Qgb3ZlcmxvYWRLZXkgb2Ygb3ZlcmxvYWRLZXlzKSB7XG4gICAgICBnZW5lcmF0ZWRNZW1iZXJQYWdlcy5hZGQoYCR7aW5mby5uYW1lc3BhY2V9IyR7aW5mby5uYW1lfSMke292ZXJsb2FkUm91dGVTZWdtZW50KG92ZXJsb2FkS2V5KX1gKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGb3IgZXZlcnkgZG9jdW1lbnRlZCB0eXBlIGFzc2lnbiBCT1RIOlxuICogIC0gYSBsb3dlcmNhc2VkLCBudW1lcmljYWxseS1kaXNhbWJpZ3VhdGVkIEZJTEUgc2VnbWVudCAoc28gYFR5cGVBc3NlcnRlcmAgdnMgYHR5cGVBc3NlcnRlcmAsIHdoaWNoXG4gKiAgICBib3RoIGxvd2VyY2FzZSB0byBgdHlwZWFzc2VydGVyYCwgYmVjb21lIGB0eXBlYXNzZXJ0ZXJgIC8gYHR5cGVhc3NlcnRlci0yYCBvbiBkaXNrIGFuZCBuZXZlclxuICogICAgY29sbGlkZSBvbiBXaW5kb3dzJyBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0pLCBhbmRcbiAqICAtIGEgY2FzZS1QUkVTRVJWRUQgUk9VVEUgc2VnbWVudCAoYFR5cGVBc3NlcnRlcmAgLyBgdHlwZUFzc2VydGVyYCkgdXNlZCBmb3IgdGhlIGV4cGxpY2l0IGBzbHVnOmBcbiAqICAgIGZyb250bWF0dGVyIGFuZCBldmVyeSBpbnRlcm5hbCBsaW5rLCBzbyB0aGUgVVJMcyBzdGF5IHByZXR0eSBhbmQgbmF0dXJhbGx5IGRpc3RpbmN0LlxuICogVGhlIHJvdXRlIGRlY291cGxlcyBmcm9tIHRoZSBmaWxlIHBhdGggdmlhIHRoZSBgc2x1ZzpgIGZyb250bWF0dGVyLCBzbyBubyBgLTJgIHN1ZmZpeCBsZWFrcyBpbnRvXG4gKiBVUkxzLiBBbHNvIHdhcm5zIGFib3V0IG1lbWJlci1zbHVnIGNvbGxpc2lvbnMgd2l0aGluIGEgdHlwZS4gTXVzdCBydW4gb25jZSBiZWZvcmUgYW55IHBhZ2UvbGluay5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJSb3V0ZVNlZ21lbnRzKHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgdHlwZUZpbGVTZWdtZW50cy5jbGVhcigpO1xuICB0eXBlUm91dGVTZWdtZW50cy5jbGVhcigpO1xuICBjb25zdCBieU5hbWVzcGFjZSA9IG5ldyBNYXA8c3RyaW5nLCBUeXBlSW5mb1tdPigpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItZ3JvdXAtYnkgLS0gYE1hcC5ncm91cEJ5YCBpcyBFUzIwMjQsIGFuZCB0aGUgc2hhcmVkIGB0c2NvbmZpZy5qc29uYCB0eXBlcyBvbmx5IEVTMjAyMi5cbiAgZm9yIChjb25zdCBpbmZvIG9mIHR5cGVzLnZhbHVlcygpKSB7XG4gICAgY29uc3QgbGlzdCA9IGJ5TmFtZXNwYWNlLmdldChpbmZvLm5hbWVzcGFjZSkgPz8gW107XG4gICAgbGlzdC5wdXNoKGluZm8pO1xuICAgIGJ5TmFtZXNwYWNlLnNldChpbmZvLm5hbWVzcGFjZSwgbGlzdCk7XG4gIH1cbiAgZm9yIChjb25zdCBbbmFtZXNwYWNlLCBpbmZvc10gb2YgYnlOYW1lc3BhY2UpIHtcbiAgICBjb25zdCB1c2VkRmlsZVNlZ21lbnRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgdXNlZFJvdXRlU2VnbWVudHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBzb3J0ZWQgPSBbLi4uaW5mb3NdLnNvcnQoKGFscGhhLCBicmF2bykgPT4gYWxwaGEubmFtZS5sb2NhbGVDb21wYXJlKGJyYXZvLm5hbWUpKTtcbiAgICBmb3IgKGNvbnN0IGluZm8gb2Ygc29ydGVkKSB7XG4gICAgICB0eXBlRmlsZVNlZ21lbnRzLnNldChgJHtuYW1lc3BhY2V9IyR7aW5mby5uYW1lfWAsIGRpc2FtYmlndWF0ZSh0b1JvdXRlU2VnbWVudChpbmZvLm5hbWUpLCB1c2VkRmlsZVNlZ21lbnRzLCAoc2VnbWVudCkgPT4gc2VnbWVudCkpO1xuXG4gICAgICBjb25zdCByb3V0ZUJhc2UgPSB0b1JvdXRlU2VnbWVudFByZXNlcnZlQ2FzZShpbmZvLm5hbWUpO1xuICAgICAgLy8gRGlzYW1iaWd1YXRlIFJPVVRFUyBjYXNlLUlOU0VOU0lUSVZFTFk6IHRoZSBzbHVnIGJlY29tZXMgQXN0cm8ncyBvbi1kaXNrIG91dHB1dCBwYXRoLCBzb1xuICAgICAgLy8gYFR5cGVBc3NlcnRlcmAgYW5kIGB0eXBlQXNzZXJ0ZXJgIChzYW1lIG5hbWUgbW9kdWxvIGNhc2UpIHdvdWxkIGNvbGxpZGUgd2hlbiB0aGUgc2l0ZSBpcyBidWlsdFxuICAgICAgLy8gb24gYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0gKFdpbmRvd3MvbWFjT1MpLCBzaWxlbnRseSBvdmVyd3JpdGluZyBvbmUgcGFnZSBzbyBldmVyeSBsaW5rXG4gICAgICAvLyB0byBpdCA0MDRzLiBDb21wYXJpbmcgbG93ZXJjYXNlZCBrZXlzIGZvcmNlcyB0aGUgc2Vjb25kIG9jY3VycmVuY2UgdG8gdGFrZSBhIGAtMmAgc3VmZml4LlxuICAgICAgY29uc3Qgcm91dGVTZWdtZW50ID0gZGlzYW1iaWd1YXRlKHJvdXRlQmFzZSwgdXNlZFJvdXRlU2VnbWVudHMsIChzZWdtZW50KSA9PiBzZWdtZW50LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgdHlwZVJvdXRlU2VnbWVudHMuc2V0KGAke25hbWVzcGFjZX0jJHtpbmZvLm5hbWV9YCwgcm91dGVTZWdtZW50KTtcbiAgICAgIGlmIChyb3V0ZVNlZ21lbnQgIT09IHJvdXRlQmFzZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYERpc2FtYmlndWF0ZWQgUk9VVEUgZm9yIFwiJHtuYW1lc3BhY2V9IyR7aW5mby5uYW1lfVwiOiBcIiR7cm91dGVCYXNlfVwiIC0+IFwiJHtyb3V0ZVNlZ21lbnR9XCIgKHNsdWcgY29sbGlzaW9uKS5gKTtcbiAgICAgIH1cbiAgICAgIHdhcm5NZW1iZXJTbHVnQ29sbGlzaW9ucyhpbmZvLCBuYW1lc3BhY2UpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlbmRlciBhbiBgQGV4YW1wbGVgIGJsb2NrIGFzIE1EWC4gSWYgdGhlIGV4YW1wbGUgYWxyZWFkeSBjb250YWlucyBhIGZlbmNlZCBjb2RlIGJsb2NrLCBpdCBpc1xuICogbm9ybWFsaXplZCB0aHJvdWdoIHtAbGluayByZW5kZXJNZHhQcm9zZX0gKGNvZGUgcHJlc2VydmVkIHJhdywgc3Vycm91bmRpbmcgcHJvc2UgZXNjYXBlZCk7XG4gKiBvdGhlcndpc2UgdGhlIHJhdyBleGFtcGxlIHRleHQgaXMgd3JhcHBlZCBpbiBhIGB0c2AgY29kZSBmZW5jZSBzbyBpdCBpcyBlbWl0dGVkIGxpdGVyYWxseS5cbiAqXG4gKiBAcGFyYW0gZXhhbXBsZSAtIFRoZSBgQGV4YW1wbGVgIHRleHQuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gc2VsZk5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHBhZ2UgYmVpbmcgcmVuZGVyZWQsIHByZWZlcnJlZCB3aGVuIGEgbmFtZSBpcyBhbWJpZ3VvdXMuXG4gKiBAcmV0dXJucyBUaGUgTURYLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRXhhbXBsZU1keChleGFtcGxlOiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gLyg/Ol58XFxuKVxccyooPzpgYGB8fn5+KS8udGVzdChleGFtcGxlKSA/IHJlbmRlck1keFByb3NlKGV4YW1wbGUsIGFsbFR5cGVzLCBzZWxmTmFtZXNwYWNlKSA6IGBcXGBcXGBcXGB0c1xcbiR7ZXhhbXBsZX1cXG5cXGBcXGBcXGBgO1xufVxuXG4vKipcbiAqIFJlbmRlciBtYXJrZG93biBibG9jayB0ZXh0IChhIGRlc2NyaXB0aW9uLCByZW1hcmtzLCBvciBtb2R1bGUgb3ZlcnZpZXcpIGFzIE1EWC1zYWZlIG1hcmtkb3duLlxuICogRmVuY2VkIGNvZGUgYmxvY2tzIGFyZSByZS1lbWl0dGVkIHZlcmJhdGltIChzdXJyb3VuZGVkIGJ5IGJsYW5rIGxpbmVzLCB3aXRoIGEgbGFuZ3VhZ2UpOyBwcm9zZVxuICogc2VnbWVudHMgaGF2ZSB0aGVpciBpbmxpbmUgbGluayB0YWdzIHJlc29sdmVkIGFuZCB0aGVpciBNRFgtdW5zYWZlIGNoYXJhY3RlcnMgZXNjYXBlZC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIE1EWC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlck1keFByb3NlKHRleHQ6IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgc2VsZk5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG91dDogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBzZWcgb2Ygc2VnbWVudE1hcmtkb3duKHRleHQpKSB7XG4gICAgaWYgKHNlZy50eXBlID09PSAnY29kZScpIHtcbiAgICAgIG91dC5wdXNoKCcnLCBgXFxgXFxgXFxgJHtzZWcubGFuZyB8fCAndHMnfWAsIHNlZy50ZXh0LCAnYGBgJywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQucHVzaChlc2NhcGVNZHhQcm9zZShyZXNvbHZlTGlua3Moc2VnLnRleHQsIGFsbFR5cGVzLCBzZWxmTmFtZXNwYWNlKSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0LmpvaW4oJ1xcbicpLnJlcGxhY2VBbGwoL1xcbnszLH0vZywgJ1xcblxcbicpLnRyaW0oKTtcbn1cblxuLyoqXG4gKiBSZW5kZXIgYSB0eXBlIHN0cmluZyB3aXRoIGNsaWNrYWJsZSBsaW5rcyBmb3Iga25vd24gdHlwZXNcbiAqXG4gKiBAcGFyYW0gdHlwZVRleHQgLSBUaGUgdHlwZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZUeXBlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0eXBlIHRoZSBwYWdlIGRvY3VtZW50cywgd2hpY2ggYHRoaXNgIGxpbmtzIHRvLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHR5cGUgdGV4dCB3aXRoIG1hcmtkb3duIGxpbmtzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyVHlwZVdpdGhMaW5rcyh0eXBlVGV4dDogc3RyaW5nLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBzZWxmVHlwZU5hbWU/OiBzdHJpbmcsIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBQcmUtcGFzczogbGluayBPYmplY3QubWV0aG9kIHBhdHRlcm5zIHRvIE1ETiBiZWZvcmUgd29yZC1ieS13b3JkIGxpbmtpbmdcbiAgY29uc3QgTUROX09CSkVDVF9CQVNFID0gJ2h0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdCc7XG4gIGNvbnN0IHdpdGhPYmplY3RNZXRob2RzID0gcmVwbGFjZVJlZ0V4cE1hdGNoZXModHlwZVRleHQsIC9cXGJPYmplY3RcXC4oPzxtZXRob2Q+W2EtekEtWl1bYS16QS1aMC05XSopXFxiL2csIChtYXRjaCkgPT4ge1xuICAgIGNvbnN0IG1ldGhvZCA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdtZXRob2QnKTtcbiAgICByZXR1cm4gYFtPYmplY3RdKCR7TUROX09CSkVDVF9CQVNFfSkuWyR7bWV0aG9kfV0oJHtNRE5fT0JKRUNUX0JBU0V9LyR7bWV0aG9kfSlgO1xuICB9KTtcbiAgLy8gTWFpbiBwYXNzOiBsaW5rIGluZGl2aWR1YWwgdHlwZSBuYW1lcywgc2tpcHBpbmcgdGV4dCBhbHJlYWR5IGluc2lkZSBtYXJrZG93biBsaW5rc1xuICByZXR1cm4gcmVwbGFjZVJlZ0V4cE1hdGNoZXMoXG4gICAgd2l0aE9iamVjdE1ldGhvZHMsXG4gICAgL1xcW1teXFxdXStcXF1cXChbXildK1xcKXxcXGIoPzx0eXBlTmFtZT5bYS16QS1aXVthLXpBLVowLTldKilcXGIvZyxcbiAgICAobWF0Y2gpID0+IHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gZ2V0T3B0aW9uYWxOYW1lZEdyb3VwKG1hdGNoLCAndHlwZU5hbWUnKTtcbiAgICAgIGlmICh0eXBlTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbWF0Y2hbMF07XG4gICAgICB9XG4gICAgICAvLyBMaW5rIGB0aGlzYCByZXR1cm4gdHlwZSB0byB0aGUgY3VycmVudCB0eXBlJ3MgcGFnZVxuICAgICAgaWYgKHR5cGVOYW1lID09PSAndGhpcycgJiYgc2VsZlR5cGVOYW1lKSB7XG4gICAgICAgIGNvbnN0IHNlbGZJbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHNlbGZUeXBlTmFtZSwgc2VsZk5hbWVzcGFjZSk7XG4gICAgICAgIGlmIChzZWxmSW5mbykge1xuICAgICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke3R5cGVIcmVmKHNlbGZJbmZvKX0pYDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTa2lwIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXJzXG4gICAgICBpZiAoR0VORVJJQ19UWVBFX1BBUkFNUy5oYXModHlwZU5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0eXBlTmFtZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgb3VyIG93biB0eXBlcyBmaXJzdFxuICAgICAgY29uc3QgaW5mbyA9IGZpbmRUeXBlKGFsbFR5cGVzLCB0eXBlTmFtZSwgc2VsZk5hbWVzcGFjZSk7XG4gICAgICBpZiAoaW5mbykge1xuICAgICAgICByZXR1cm4gYFske3R5cGVOYW1lfV0oJHt0eXBlSHJlZihpbmZvKX0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gQSB0eXBlIGFub3RoZXIgZG9jdW1lbnRlZCBwYWNrYWdlIGRlY2xhcmVzLCBvciBvbmUgdGhlIHNpdGUgbWFwcyBpdHNlbGZcbiAgICAgIGNvbnN0IGV4dGVybmFsVXJsID0gcmVzb2x2ZUV4dGVybmFsVHlwZVVybCh0eXBlTmFtZSk7XG4gICAgICBpZiAoZXh0ZXJuYWxVcmwpIHtcbiAgICAgICAgcmV0dXJuIGBbJHt0eXBlTmFtZX1dKCR7ZXh0ZXJuYWxVcmx9KWA7XG4gICAgICB9XG5cbiAgICAgIC8vIFR5cGVTY3JpcHQgdXRpbGl0eSB0eXBlc1xuICAgICAgY29uc3QgdHNVcmwgPSByZXNvbHZlVHNVdGlsaXR5VXJsKHR5cGVOYW1lKTtcbiAgICAgIGlmICh0c1VybCkge1xuICAgICAgICByZXR1cm4gYFske3R5cGVOYW1lfV0oJHt0c1VybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gSlMgZ2xvYmFsIHR5cGVzIChBcnJheSwgUHJvbWlzZSwgTWFwLCBldGMuKVxuICAgICAgY29uc3QgZ2xvYmFsVXJsID0gT2JqZWN0Lmhhc093bihUU19HTE9CQUxfVFlQRVMsIHR5cGVOYW1lKSA/IFRTX0dMT0JBTF9UWVBFU1t0eXBlTmFtZV0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoZ2xvYmFsVXJsKSB7XG4gICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke2dsb2JhbFVybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gV2ViIEFQSSAvIE1ETiB0eXBlc1xuICAgICAgY29uc3QgbWRuVXJsID0gcmVzb2x2ZVdlYkFwaVVybCh0eXBlTmFtZSk7XG4gICAgICBpZiAobWRuVXJsKSB7XG4gICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke21kblVybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gVHlwZVNjcmlwdCBwcmltaXRpdmUgdHlwZXNcbiAgICAgIGNvbnN0IHByaW1pdGl2ZVVybCA9IE9iamVjdC5oYXNPd24oVFNfUFJJTUlUSVZFX1RZUEVTLCB0eXBlTmFtZSkgPyBUU19QUklNSVRJVkVfVFlQRVNbdHlwZU5hbWVdIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHByaW1pdGl2ZVVybCA/IGBbJHt0eXBlTmFtZX1dKCR7cHJpbWl0aXZlVXJsfSlgIDogdHlwZU5hbWU7XG4gICAgfVxuICApO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSB0eXBlIG5vIHBhZ2Ugb2YgdGhpcyBzaXRlIGRvY3VtZW50cyB0byB0aGUgcGFnZSB0aGF0IGRvZXM6IGFub3RoZXIgZG9jdW1lbnRlZCBwYWNrYWdlJ3Mgc2l0ZSwgb3IgYW5cbiAqIGVudHJ5IG9mIHRoZSBzaXRlJ3Mgb3duIGBleHRlcm5hbFR5cGVMaW5rc2Agc2V0dGluZy5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBVUkwsIG9yIGB1bmRlZmluZWRgIHdoZW4gbmVpdGhlciBrbm93cyB0aGUgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFeHRlcm5hbFR5cGVVcmwobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGdldFBhY2thZ2VUeXBlVXJsKG5hbWUpID8/IGdldEFwaURvY1NldHRpbmdzKCkuZXh0ZXJuYWxUeXBlTGlua3MuZ2V0KG5hbWUpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYEBsaW5rYCB0YWdzLCB3aXRoIG9yIHdpdGhvdXQgYSBgfCBkaXNwbGF5IHRleHRgIHBhcnQsIGluIGRlc2NyaXB0aW9uIHRleHRcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHRleHQgd2l0aCBtYXJrZG93biBsaW5rcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVMaW5rcyh0ZXh0OiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVwbGFjZVJlZ0V4cE1hdGNoZXModGV4dCwgL1xce0BsaW5rXFxzKyg/PHRhcmdldD5bXnx9XSs/KSg/OlxccypcXHxcXHMqKD88ZGlzcGxheT5bXn1dKz8pKT9cXH0vZywgKG1hdGNoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3RhcmdldCcpLnRyaW0oKTtcbiAgICBjb25zdCBkaXNwbGF5ID0gKGdldE9wdGlvbmFsTmFtZWRHcm91cChtYXRjaCwgJ2Rpc3BsYXknKT8udHJpbSgpID8/IHRhcmdldCkucmVwbGFjZUFsbCgvXFxcXCg/PVs8Pnt9XSkvZywgJycpO1xuXG4gICAgLy8gSGFuZGxlIFR5cGUubWVtYmVyIHJlZmVyZW5jZXMgKGUuZy4sIFBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKVxuICAgIGNvbnN0IGRvdE1hdGNoID0gL14oPzx0eXBlTmFtZT5bQS1aYS16XVxcdyopXFwuKD88bWVtYmVyTmFtZT5cXHcrKSQvLmV4ZWModGFyZ2V0KTtcbiAgICBpZiAoZG90TWF0Y2gpIHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChkb3RNYXRjaCwgJ3R5cGVOYW1lJyk7XG4gICAgICBjb25zdCBtZW1iZXJOYW1lID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChkb3RNYXRjaCwgJ21lbWJlck5hbWUnKTtcbiAgICAgIGNvbnN0IHR5cGVJbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHR5cGVOYW1lLCBzZWxmTmFtZXNwYWNlKTtcbiAgICAgIGlmICh0eXBlSW5mbyAmJiBkb2VzTWVtYmVyUGFnZUV4aXN0KHR5cGVJbmZvLm5hbWVzcGFjZSwgdHlwZUluZm8ubmFtZSwgbWVtYmVyUm91dGVTZWdtZW50KG1lbWJlck5hbWUpKSkge1xuICAgICAgICBjb25zdCB0YXJnZXROc0RpcmVjdG9yeSA9IGdldE5hbWVzcGFjZURpcmVjdG9yeSh0eXBlSW5mby5uYW1lc3BhY2UpO1xuICAgICAgICByZXR1cm4gYFske2Rpc3BsYXl9XSgke2dldEJhc2VQYXRoKCl9L2FwaS8ke3RhcmdldE5zRGlyZWN0b3J5fS8ke3RvVHlwZVJvdXRlU2VnbWVudCh0eXBlSW5mby5uYW1lc3BhY2UsIHR5cGVJbmZvLm5hbWUpfS8ke21lbWJlclJvdXRlU2VnbWVudChtZW1iZXJOYW1lKX0vKWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHNpbXBsZSB0eXBlIHJlZmVyZW5jZXMg4oCUIGlmIGRpc3BsYXkgY29udGFpbnMgZ2VuZXJpYyBhcmdzLCBsaW5rIGVhY2ggdHlwZSBpbmRpdmlkdWFsbHlcbiAgICBjb25zdCBpbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHRhcmdldCwgc2VsZk5hbWVzcGFjZSk7XG4gICAgaWYgKGluZm8pIHtcbiAgICAgIHJldHVybiBkaXNwbGF5ICE9PSB0YXJnZXQgJiYgZGlzcGxheS5pbmNsdWRlcygnPCcpID8gcmVuZGVyVHlwZVdpdGhMaW5rcyhkaXNwbGF5LCBhbGxUeXBlcywgdW5kZWZpbmVkLCBzZWxmTmFtZXNwYWNlKSA6IGBbJHtkaXNwbGF5fV0oJHt0eXBlSHJlZihpbmZvKX0pYDtcbiAgICB9XG5cbiAgICBjb25zdCBleHRlcm5hbFVybCA9IHJlc29sdmVFeHRlcm5hbFR5cGVVcmwodGFyZ2V0KTtcbiAgICByZXR1cm4gZXh0ZXJuYWxVcmwgPyBgWyR7ZGlzcGxheX1dKCR7ZXh0ZXJuYWxVcmx9KWAgOiBgXFxgJHtkaXNwbGF5fVxcYGA7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgVHlwZVNjcmlwdCB1dGlsaXR5IHR5cGUgdG8gaXRzIGhhbmRib29rIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHJldHVybnMgVGhlIGhhbmRib29rIFVSTCwgb3IgYHVuZGVmaW5lZGAgd2hlbiBpdCBpcyBub3QgYSB1dGlsaXR5IHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVHNVdGlsaXR5VXJsKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGhhc2ggPSBUU19VVElMSVRZX1RZUEVTLmdldChuYW1lKTtcbiAgaWYgKGhhc2gpIHtcbiAgICBpZiAoWydJdGVyYWJsZSddLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gYGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL2l0ZXJhdG9ycy1hbmQtZ2VuZXJhdG9ycy5odG1sIyR7aGFzaH1gO1xuICAgIH1cbiAgICBjb25zdCBoYW5kYm9va1BhZ2UgPSBbJ0NhcGl0YWxpemUnLCAnTG93ZXJjYXNlJywgJ1VuY2FwaXRhbGl6ZScsICdVcHBlcmNhc2UnXS5pbmNsdWRlcyhuYW1lKSA/ICcyL3RlbXBsYXRlLWxpdGVyYWwtdHlwZXMnIDogJ3V0aWxpdHktdHlwZXMnOyAvLyBDc3BlbGw6ZGlzYWJsZS1saW5lXG4gICAgcmV0dXJuIGBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8ke2hhbmRib29rUGFnZX0uaHRtbCMke2hhc2h9YDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgV2ViIEFQSSB0eXBlIHRvIGl0cyBNRE4gcGFnZS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBNRE4gVVJMLCBvciBgdW5kZWZpbmVkYCB3aGVuIGl0IGlzIG5vdCBhIGtub3duIFdlYiBBUEkgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVXZWJBcGlVcmwobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFPYmplY3QuaGFzT3duKG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzLCBuYW1lKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW50cnkgPSBtb2R1bGVTdGF0ZS53ZWJBcGlUeXBlc1tuYW1lXTtcbiAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZW50cnk7XG4gIH1cbiAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ29iamVjdCcgJiYgZW50cnkgIT09IG51bGwgJiYgJ3VybCcgaW4gZW50cnkpIHtcbiAgICBjb25zdCB0eXBlZEVudHJ5ID0gZW50cnkgYXMgV2ViQXBpRW50cnk7XG4gICAgcmV0dXJuIHR5cGVkRW50cnkudXJsO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgbG93ZXJjYXNlZCBPTi1ESVNLIHNlZ21lbnQgZm9yIGEgdHlwZSAoZmlsZSBwYXRoICsgY29tcG9uZW50LWltcG9ydCByZWxhdGl2ZSBwYXRoKS5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBzZWdtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9UeXBlRmlsZVNlZ21lbnQobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlRmlsZVNlZ21lbnRzLmdldChgJHtuYW1lc3BhY2V9IyR7bmFtZX1gKSA/PyB0b1JvdXRlU2VnbWVudChuYW1lKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBjYXNlLXByZXNlcnZlZCBVUkwvUk9VVEUgc2VnbWVudCBmb3IgYSB0eXBlIChzbHVnIGZyb250bWF0dGVyICsgaW50ZXJuYWwgbGlua3MpLlxuICpcbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgdHlwZSdzIG5hbWVzcGFjZS5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHJldHVybnMgVGhlIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1R5cGVSb3V0ZVNlZ21lbnQobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlUm91dGVTZWdtZW50cy5nZXQoYCR7bmFtZXNwYWNlfSMke25hbWV9YCkgPz8gdG9Sb3V0ZVNlZ21lbnRQcmVzZXJ2ZUNhc2UobmFtZSk7XG59XG5cbi8qKlxuICogQWJzb2x1dGUgbGluayB0byBhIHR5cGUncyBvdmVydmlldyBwYWdlLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHlwZUhyZWYoaW5mbzogVHlwZUluZm8pOiBzdHJpbmcge1xuICByZXR1cm4gYCR7Z2V0QmFzZVBhdGgoKX0vYXBpLyR7Z2V0TmFtZXNwYWNlRGlyZWN0b3J5KGluZm8ubmFtZXNwYWNlKX0vJHt0b1R5cGVSb3V0ZVNlZ21lbnQoaW5mby5uYW1lc3BhY2UsIGluZm8ubmFtZSl9L2A7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGFic29sdXRlIGxpbmsgdG8gYSB0eXBlIHBhZ2VcbiAqXG4gKiBAcGFyYW0gdHlwZU5hbWUgLSBUaGUgdHlwZSdzIG5hbWUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gY3VycmVudE5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHJlZmVyZW5jaW5nIHBhZ2UsIHByZWZlcnJlZCB3aGVuIHRoZSBuYW1lIGlzIGFtYmlndW91cy5cbiAqIEByZXR1cm5zIEEgbWFya2Rvd24gbGluaywgb3IgaW5saW5lIGNvZGUgd2hlbiB0aGUgdHlwZSBpcyBub3QgZG9jdW1lbnRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR5cGVMaW5rKHR5cGVOYW1lOiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIGN1cnJlbnROYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBjbGVhbk5hbWUgPSB0eXBlTmFtZS5yZXBsYWNlKC88Lio+JC8sICcnKS50cmltKCk7XG4gIGNvbnN0IGluZm8gPSBmaW5kVHlwZShhbGxUeXBlcywgY2xlYW5OYW1lLCBjdXJyZW50TmFtZXNwYWNlKTtcbiAgcmV0dXJuIGluZm8gPyBgWyR7ZXNjYXBlTWR4QW5nbGVCcmFja2V0cyh0eXBlTmFtZSl9XSgke3R5cGVIcmVmKGluZm8pfSlgIDogYFxcYCR7dHlwZU5hbWV9XFxgYDtcbn1cblxuZnVuY3Rpb24gZGlzYW1iaWd1YXRlKGJhc2U6IHN0cmluZywgdXNlZDogU2V0PHN0cmluZz4sIGtleU9mOiAoc2VnbWVudDogc3RyaW5nKSA9PiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgc2VnbWVudCA9IGJhc2U7XG4gIGNvbnN0IEZJUlNUX0RJU0FNQklHVUFUSU9OX1NVRkZJWCA9IDI7XG4gIGxldCBzdWZmaXggPSBGSVJTVF9ESVNBTUJJR1VBVElPTl9TVUZGSVg7XG4gIHdoaWxlICh1c2VkLmhhcyhrZXlPZihzZWdtZW50KSkpIHtcbiAgICBzZWdtZW50ID0gYCR7YmFzZX0tJHtTdHJpbmcoc3VmZml4KX1gO1xuICAgIHN1ZmZpeCsrO1xuICB9XG4gIHVzZWQuYWRkKGtleU9mKHNlZ21lbnQpKTtcbiAgcmV0dXJuIHNlZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldEJhc2VQYXRoKCk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRoO1xufVxuXG4vKipcbiAqIFdhcm4gd2hlbiB0d28gZGlzdGluY3QgbWVtYmVycyBvZiBhIHR5cGUgcHJvZHVjZSB0aGUgc2FtZSBtZW1iZXIgc2x1ZyAoVVJML2ZpbGUgc2VnbWVudCkuIFRoZVxuICogb3B0aW9uYWwtYD9gIHN1ZmZpeCBpcyBzdHJpcHBlZCBmaXJzdCwgc28gYSBwcm9wZXJ0eSBhcHBlYXJpbmcgYXMgYm90aCByZXF1aXJlZCBhbmQgb3B0aW9uYWwgaXMgbm90XG4gKiBhIGZhbHNlIHBvc2l0aXZlLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIHR5cGUuXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKi9cbmZ1bmN0aW9uIHdhcm5NZW1iZXJTbHVnQ29sbGlzaW9ucyhpbmZvOiBUeXBlSW5mbywgbmFtZXNwYWNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGZ1bmN0aW9uIGNoZWNrKHNsdWc6IHN0cmluZywgb3JpZ2luYWw6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBvcmlnaW5hbC5yZXBsYWNlKC9cXD8kLywgJycpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gc2Vlbi5nZXQoc2x1Zyk7XG4gICAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQgJiYgZXhpc3RpbmcgIT09IG5vcm1hbGl6ZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihgTWVtYmVyIHJvdXRlIGNvbGxpc2lvbiBpbiBcIiR7bmFtZXNwYWNlfSMke2luZm8ubmFtZX1cIjogXCIke2V4aXN0aW5nfVwiIGFuZCBcIiR7bm9ybWFsaXplZH1cIiBib3RoIG1hcCB0byBcIi8ke3NsdWd9L1wiLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZWVuLnNldChzbHVnLCBub3JtYWxpemVkKTtcbiAgfVxuICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIGluZm8ucHJvcGVydGllcykge1xuICAgIGNoZWNrKG1lbWJlclNsdWcocHJvcGVydHkubmFtZSksIHByb3BlcnR5Lm5hbWUpO1xuICB9XG4gIGZvciAoY29uc3QgbWV0aG9kIG9mIGluZm8ubWV0aG9kcykge1xuICAgIGNoZWNrKG92ZXJsb2FkU2x1ZyhtZXRob2Qub3ZlcmxvYWRLZXkpLCBtZXRob2Qub3ZlcmxvYWRLZXkpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT0E7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLG9CQUFvQjtBQUM3QixTQUFTLFlBQVk7QUFPckI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMseUJBQXlCO0FBQ2xDO0FBQUEsRUFDRTtB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
|
|
365
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy1saW5rLXJlbmRlcmluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVHlwZS1saW5rIHJlbmRlcmluZzogdHVybnMgdHlwZSB0ZXh0IGFuZCBpbmxpbmUgbGluayB0YWdzIGludG8gbWFya2Rvd24gbGlua3MgdG8gZ2VuZXJhdGVkIHBhZ2VzXG4gKiBvciBleHRlcm5hbCByZWZlcmVuY2VzIChUeXBlU2NyaXB0IGhhbmRib29rLCBNRE4gV2ViIEFQSSwgSlMgZ2xvYmFscykuXG4gKi9cblxuaW1wb3J0IHtcbiAgZ2V0TWFuZGF0b3J5TmFtZWRHcm91cCxcbiAgZ2V0T3B0aW9uYWxOYW1lZEdyb3VwXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9yZWctZXhwJztcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgVHlwZUluZm8sXG4gIFdlYkFwaUVudHJ5XG59IGZyb20gJy4vYXBpLWRvYy10eXBlcy50cyc7XG5cbmltcG9ydCB7XG4gIEdFTkVSSUNfVFlQRV9QQVJBTVMsXG4gIFRTX0dMT0JBTF9UWVBFUyxcbiAgVFNfUFJJTUlUSVZFX1RZUEVTLFxuICBUU19VVElMSVRZX1RZUEVTXG59IGZyb20gJy4vYXBpLWRvYy1jb25zdGFudHMudHMnO1xuaW1wb3J0IHsgZ2V0UGFja2FnZVR5cGVVcmwgfSBmcm9tICcuL2FwaS1kb2MtcGFja2FnZS1zaXRlcy50cyc7XG5pbXBvcnQge1xuICB0b1JvdXRlU2VnbWVudCxcbiAgdG9Sb3V0ZVNlZ21lbnRQcmVzZXJ2ZUNhc2Vcbn0gZnJvbSAnLi9hcGktZG9jLXJvdXRlLXNlZ21lbnRzLnRzJztcbmltcG9ydCB7IGdldEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcbmltcG9ydCB7XG4gIGVzY2FwZU1keEFuZ2xlQnJhY2tldHMsXG4gIGVzY2FwZU1keFByb3NlLFxuICBnZXROYW1lc3BhY2VEaXJlY3RvcnksXG4gIG1lbWJlclJvdXRlU2VnbWVudCxcbiAgbWVtYmVyU2x1ZyxcbiAgb3ZlcmxvYWRSb3V0ZVNlZ21lbnQsXG4gIG92ZXJsb2FkU2x1ZyxcbiAgcmVwbGFjZVJlZ0V4cE1hdGNoZXMsXG4gIHNlZ21lbnRNYXJrZG93blxufSBmcm9tICcuL2FwaS1kb2MtdGV4dC11dGlscy50cyc7XG5cbi8qKlxuTG9hZGVkIGZyb20gdHlwZWRvYy1wbHVnaW4tbWRuLWxpbmtzIGRhdGEgYXQgcnVudGltZVxuICovXG4vKipcbk1vZHVsZS1sZXZlbCBtdXRhYmxlIHN0YXRlLCBoZWxkIGluIG9uZSBvYmplY3Qgc28gZWFjaCBtdXRhdGlvbiBuYW1lcyBpdCBleHBsaWNpdGx5LlxuICovXG5pbnRlcmZhY2UgTW9kdWxlU3RhdGUge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZWFkb25seS1pbnRlcmZhY2UtbWVtYmVycyAtLSBUaGUgV2ViIEFQSSBtZXRhZGF0YSBjYWNoZSBpcyByZXBsYWNlZCBhZnRlciBsb2FkaW5nLlxuICB3ZWJBcGlUeXBlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmNvbnN0IG1vZHVsZVN0YXRlOiBNb2R1bGVTdGF0ZSA9IHtcbiAgd2ViQXBpVHlwZXM6IHt9XG59O1xuLyoqXG5Mb3dlcmNhc2VkLCBjb2xsaXNpb24tZGlzYW1iaWd1YXRlZCBPTi1ESVNLIHNlZ21lbnQgcGVyIHF1YWxpZmllZCB0eXBlIGtleSAoYCR7bmFtZXNwYWNlfSMke25hbWV9YCkuXG4gKi9cbmNvbnN0IHR5cGVGaWxlU2VnbWVudHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuLyoqXG5DYXNlLXByZXNlcnZlZCBVUkwvcm91dGUgc2VnbWVudCBwZXIgcXVhbGlmaWVkIHR5cGUga2V5IChgJHtuYW1lc3BhY2V9IyR7bmFtZX1gKS5cbiAqL1xuY29uc3QgdHlwZVJvdXRlU2VnbWVudHMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4vKipcbiAqIFJvdXRlLXNlZ21lbnQga2V5cyBvZiB0aGUgbWVtYmVyIHBhZ2VzIHRoYXQgYGdlbmVyYXRlTWVtYmVyUGFnZXNgIHdpbGwgYWN0dWFsbHkgZW1pdCwgYXNcbiAqIGAke25hbWVzcGFjZX0jJHtUeXBlTmFtZX0jJHtyb3V0ZVNlZ21lbnR9YC4gT25seSBOT04taW5oZXJpdGVkIHByb3BlcnRpZXMgYW5kIG5vbi1pbmhlcml0ZWQgbWV0aG9kXG4gKiBvdmVybG9hZCBrZXlzIGdldCBhIHBhZ2UsIHNvIHRoaXMgbGV0cyBsaW5rIGVtaXR0ZXJzIGF2b2lkIHBvaW50aW5nIGF0IGEgbWVtYmVyIHBhZ2UgdGhhdCBpcyBuZXZlclxuICogZ2VuZXJhdGVkIChhbiBpbmhlcml0ZWQgbWVtYmVyLCBhbiBlbnVtIG1lbWJlciwgYW4gb3B0aW9ucy1pbnRlcmZhY2UgbWVtYmVyKSDigJQgd2hpY2ggd291bGQgNDA0LlxuICovXG5jb25zdCBnZW5lcmF0ZWRNZW1iZXJQYWdlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4vKipcbiAqIFdoZXRoZXIgYSBtZW1iZXIgcGFnZSB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgYHJvdXRlU2VnbWVudGAgb24gdGhlIGdpdmVuIHR5cGUuXG4gKlxuICogQHBhcmFtIG5hbWVzcGFjZSAtIFRoZSB0eXBlJ3MgbmFtZXNwYWNlLlxuICogQHBhcmFtIHR5cGVOYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIHJvdXRlU2VnbWVudCAtIFRoZSBtZW1iZXIncyByb3V0ZSBzZWdtZW50LlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcGFnZSBpcyBnZW5lcmF0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb2VzTWVtYmVyUGFnZUV4aXN0KG5hbWVzcGFjZTogc3RyaW5nLCB0eXBlTmFtZTogc3RyaW5nLCByb3V0ZVNlZ21lbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2VuZXJhdGVkTWVtYmVyUGFnZXMuaGFzKGAke25hbWVzcGFjZX0jJHt0eXBlTmFtZX0jJHtyb3V0ZVNlZ21lbnR9YCk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBhIGJhcmUgdHlwZSBuYW1lIHRvIGEgZG9jdW1lbnRlZCBgVHlwZUluZm9gLlxuICpcbiAqIFRoZSBtb2RlbCBtYXAgaXMga2V5ZWQgYnkgYSBxdWFsaWZpZWQgYCR7bmFtZXNwYWNlfSMke25hbWV9YCBpZGVudGl0eSwgYmVjYXVzZSBhIHBhY2thZ2VcbiAqIGNhbiBleHBvcnQgdGhlIHNhbWUgc2ltcGxlIG5hbWUgZnJvbSBkaWZmZXJlbnQgbW9kdWxlcy4gUmVzb2x1dGlvbiBpcyBiZXN0LWVmZm9ydDpcbiAqICAgMS4gUHJlZmVyIGEgdHlwZSBpbiBgY3VycmVudE5hbWVzcGFjZWAgKHRoZSByZWZlcmVuY2luZyBwYWdlJ3MgbW9kdWxlKS5cbiAqICAgMi4gT3RoZXJ3aXNlLCBpZiBleGFjdGx5IG9uZSB0eXBlIGFjcm9zcyBhbGwgbW9kdWxlcyBoYXMgdGhhdCBiYXJlIG5hbWUsIHVzZSBpdC5cbiAqICAgMy4gSWYgdGhlIGJhcmUgbmFtZSBpcyBhbWJpZ3VvdXMgKG11bHRpcGxlIG1vZHVsZXMpLCBnaXZlIHVwIChjYWxsZXIgcmVuZGVycyBwbGFpbiBjb2RlKS5cbiAqXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEBwYXJhbSBjdXJyZW50TmFtZXNwYWNlIC0gVGhlIG5hbWVzcGFjZSBvZiB0aGUgcmVmZXJlbmNpbmcgcGFnZSwgcHJlZmVycmVkIHdoZW4gdGhlIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHR5cGUsIG9yIGB1bmRlZmluZWRgIHdoZW4gbm8gdHlwZSBvciBtb3JlIHRoYW4gb25lIGhhcyB0aGF0IG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kVHlwZShhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBuYW1lOiBzdHJpbmcsIGN1cnJlbnROYW1lc3BhY2U/OiBzdHJpbmcpOiBUeXBlSW5mbyB8IHVuZGVmaW5lZCB7XG4gIGlmIChjdXJyZW50TmFtZXNwYWNlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBxdWFsaWZpZWQgPSBhbGxUeXBlcy5nZXQoYCR7Y3VycmVudE5hbWVzcGFjZX0jJHtuYW1lfWApO1xuICAgIGlmIChxdWFsaWZpZWQpIHtcbiAgICAgIHJldHVybiBxdWFsaWZpZWQ7XG4gICAgfVxuICB9XG4gIGxldCBmb3VuZDogVHlwZUluZm8gfCB1bmRlZmluZWQ7XG4gIGxldCBtYXRjaENvdW50ID0gMDtcbiAgZm9yIChjb25zdCBpbmZvIG9mIGFsbFR5cGVzLnZhbHVlcygpKSB7XG4gICAgaWYgKGluZm8ubmFtZSAhPT0gbmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZm91bmQgPSBpbmZvO1xuICAgIG1hdGNoQ291bnQrKztcbiAgICBpZiAobWF0Y2hDb3VudCA+IDEpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXRjaENvdW50ID09PSAxID8gZm91bmQgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogTGluayBhIGJhc2UgdHlwZSBleHByZXNzaW9uIGZvciB0aGUgXCJFeHRlbmRzOlwiIGxpbmUuXG4gKiBTaW1wbGUgdHlwZSByZWZlcmVuY2VzIChpZGVudGlmaWVyICsgb3B0aW9uYWwgZ2VuZXJpY3MpIHVzZSByZW5kZXJUeXBlV2l0aExpbmtzXG4gKiBzbyBlYWNoIHR5cGUgYXJndW1lbnQgZ2V0cyBpdHMgb3duIGxpbmsuXG4gKiBDb21wbGV4IGV4cHJlc3Npb25zIChvYmplY3QgdHlwZXMsIGludGVyc2VjdGlvbnMsIGV0Yy4pIGZhbGwgYmFjayB0byB0eXBlTGlua1xuICogdG8gYXZvaWQgTURYIHBhcnNpbmcgaXNzdWVzIHdpdGggYHtgLCBgfWAsIGB8YCBldGMuXG4gKlxuICogQHBhcmFtIHR5cGVOYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIGN1cnJlbnROYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSByZWZlcmVuY2luZyBwYWdlLCBwcmVmZXJyZWQgd2hlbiB0aGUgbmFtZSBpcyBhbWJpZ3VvdXMuXG4gKiBAcmV0dXJucyBUaGUgbGlua2VkIHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsaW5rQmFzZVR5cGUodHlwZU5hbWU6IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgY3VycmVudE5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGlzU2ltcGxlVHlwZVJlZiA9IC9eW2EtekEtWl1bYS16QS1aMC05XSooPzo8Lio+KT8kLy50ZXN0KHR5cGVOYW1lLnRyaW0oKSk7XG4gIHJldHVybiBpc1NpbXBsZVR5cGVSZWYgPyBlc2NhcGVNZHhBbmdsZUJyYWNrZXRzKHJlbmRlclR5cGVXaXRoTGlua3ModHlwZU5hbWUsIGFsbFR5cGVzLCB1bmRlZmluZWQsIGN1cnJlbnROYW1lc3BhY2UpKSA6IHR5cGVMaW5rKHR5cGVOYW1lLCBhbGxUeXBlcywgY3VycmVudE5hbWVzcGFjZSk7XG59XG5cbi8qKlxuICogTG9hZHMgdGhlIFdlYiBBUEkgbGlua3MgYHR5cGVkb2MtcGx1Z2luLW1kbi1saW5rc2Agc2hpcHMsIGlmIGl0IGlzIGluc3RhbGxlZC4gV2l0aG91dCBpdCwgV2ViIEFQSSB0eXBlcyByZW5kZXJcbiAqIHVubGlua2VkLlxuICpcbiAqIEBwYXJhbSByb290RGlyZWN0b3J5IC0gVGhlIGZvbGRlciB3aG9zZSBgbm9kZV9tb2R1bGVzYCBob2xkcyB0aGUgcGFja2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRFeHRlcm5hbFR5cGVNYXBzKHJvb3REaXJlY3Rvcnk6IHN0cmluZyk6IHZvaWQge1xuICB0cnkge1xuICAgIGNvbnN0IGRhdGFQYXRoID0gam9pbihyb290RGlyZWN0b3J5LCAnbm9kZV9tb2R1bGVzL3R5cGVkb2MtcGx1Z2luLW1kbi1saW5rcy9kYXRhL3dlYi1hcGkuanNvbicpO1xuICAgIG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoZGF0YVBhdGgsICd1dGYtOCcpKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zb2xlLndhcm4oYExvYWRlZCAke1N0cmluZyhPYmplY3Qua2V5cyhtb2R1bGVTdGF0ZS53ZWJBcGlUeXBlcykubGVuZ3RoKX0gV2ViIEFQSSB0eXBlIGxpbmtzYCk7XG4gIH0gY2F0Y2gge1xuICAgIG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzID0ge307XG4gICAgY29uc29sZS53YXJuKCd0eXBlZG9jLXBsdWdpbi1tZG4tbGlua3MgZGF0YSBub3QgZm91bmQg4oCUIFdlYiBBUEkgbGlua3Mgd2lsbCBiZSB1bmF2YWlsYWJsZS4nKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnQgaW5saW5lIG1hcmtkb3duIHRvIEhUTUwgZm9yIHVzZSBpbiBjb21wb25lbnQgcHJvcHMgd2l0aCBzZXQ6aHRtbFxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQuXG4gKiBAcmV0dXJucyBUaGUgSFRNTC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtkb3duVG9IdG1sKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGVzY2FwZWQgPSB0ZXh0XG4gICAgLnJlcGxhY2VBbGwoJyYnLCAnJmFtcDsnKVxuICAgIC5yZXBsYWNlQWxsKCc8JywgJyZsdDsnKVxuICAgIC5yZXBsYWNlQWxsKCc+JywgJyZndDsnKTtcbiAgcmV0dXJuIHJlcGxhY2VSZWdFeHBNYXRjaGVzKGVzY2FwZWQsIC9cXFsoPzx0ZXh0PlteXFxdXSspXFxdXFwoKD88dXJsPlteKV0rKVxcKS9nLCAobWF0Y2gpID0+IHtcbiAgICBjb25zdCBsaW5rVGV4dCA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICd0ZXh0Jyk7XG4gICAgY29uc3QgdXJsID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3VybCcpO1xuICAgIC8vIEEgcmVsYXRpdmUgVVJMIGhlcmUgaXMgYW4gaWxsdXN0cmF0aXZlIGV4YW1wbGUgcGF0aCBpbiBUU0RvYyAoZS5nLiBgW2Zvb10oZm9vLnBuZylgKSwgbm90IGFcbiAgICAvLyByZWFsIG5hdmlnYWJsZSBsaW5rIOKAlCByZW5kZXIgaXQgYXMgbGl0ZXJhbCBpbmxpbmUgY29kZSBzbyBpdCBuZWl0aGVyIDQwNHMgbm9yIGxvc2VzIG1lYW5pbmcuXG4gICAgcmV0dXJuIC9eKD86aHR0cHM/OlxcL1xcL3xcXC98I3xtYWlsdG86KS8udGVzdCh1cmwpID8gYDxhIGhyZWY9XCIke3VybH1cIj4ke2xpbmtUZXh0fTwvYT5gIDogYDxjb2RlPlske2xpbmtUZXh0fV0oJHt1cmx9KTwvY29kZT5gO1xuICB9KVxuICAgIC5yZXBsYWNlQWxsKC9gKD88Y29kZT5bXmBdKylgL2csICc8Y29kZT4kPGNvZGU+PC9jb2RlPicpXG4gICAgLnJlcGxhY2VBbGwoJ1xcbicsICc8YnIvPicpO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBocmVmIGZvciBhIG1lbWJlciwgcG9pbnRpbmcgdG8gdGhlIHBhcmVudCB0eXBlJ3MgcGFnZSBpZiBpbmhlcml0ZWRcbiAqXG4gKiBAcGFyYW0gbWVtYmVyU2x1Z1N0cmluZyAtIFRoZSBtZW1iZXIncyByb3V0ZSBzZWdtZW50LlxuICogQHBhcmFtIGluaGVyaXRlZEZyb20gLSBUaGUgbmFtZSBvZiB0aGUgdHlwZSB0aGUgbWVtYmVyIGlzIGluaGVyaXRlZCBmcm9tLCBvciBhbiBlbXB0eSBzdHJpbmcgZm9yIGFuIG93biBtZW1iZXIuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gY3VycmVudE5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHJlZmVyZW5jaW5nIHBhZ2UsIHByZWZlcnJlZCB3aGVuIHRoZSBuYW1lIGlzIGFtYmlndW91cy5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLCBvciBhbiBlbXB0eSBzdHJpbmcgd2hlbiBubyBwYWdlIGRvY3VtZW50cyB0aGUgbWVtYmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVtYmVySHJlZihtZW1iZXJTbHVnU3RyaW5nOiBzdHJpbmcsIGluaGVyaXRlZEZyb206IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgY3VycmVudE5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghaW5oZXJpdGVkRnJvbSkge1xuICAgIC8vIE93biAobm9uLWluaGVyaXRlZCkgbWVtYmVyIOKAlCBgZ2VuZXJhdGVNZW1iZXJQYWdlc2AgYWx3YXlzIGVtaXRzIGl0cyBwYWdlIG9uIHRoaXMgc2FtZSBwYWdlLlxuICAgIHJldHVybiBgLi8ke21lbWJlclNsdWdTdHJpbmd9L2A7XG4gIH1cbiAgbGV0IHBhcmVudEluZm8gPSBmaW5kVHlwZShhbGxUeXBlcywgaW5oZXJpdGVkRnJvbSwgY3VycmVudE5hbWVzcGFjZSk7XG4gIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0PFR5cGVJbmZvPigpO1xuICB3aGlsZSAocGFyZW50SW5mbyAmJiAhZG9lc01lbWJlclBhZ2VFeGlzdChwYXJlbnRJbmZvLm5hbWVzcGFjZSwgcGFyZW50SW5mby5uYW1lLCBtZW1iZXJTbHVnU3RyaW5nKSkge1xuICAgIGlmICh2aXNpdGVkLmhhcyhwYXJlbnRJbmZvKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICB2aXNpdGVkLmFkZChwYXJlbnRJbmZvKTtcbiAgICBjb25zdCBtZW1iZXIgPSBwYXJlbnRJbmZvLnByb3BlcnRpZXMuZmluZCgocHJvcGVydHkpID0+IG1lbWJlclJvdXRlU2VnbWVudChwcm9wZXJ0eS5uYW1lKSA9PT0gbWVtYmVyU2x1Z1N0cmluZylcbiAgICAgID8/IHBhcmVudEluZm8ubWV0aG9kcy5maW5kKChtZXRob2QpID0+IG92ZXJsb2FkUm91dGVTZWdtZW50KG1ldGhvZC5vdmVybG9hZEtleSkgPT09IG1lbWJlclNsdWdTdHJpbmcpO1xuICAgIHBhcmVudEluZm8gPSBtZW1iZXI/LmluaGVyaXRlZEZyb20gPyBmaW5kVHlwZShhbGxUeXBlcywgbWVtYmVyLmluaGVyaXRlZEZyb20sIHBhcmVudEluZm8ubmFtZXNwYWNlKSA6IHVuZGVmaW5lZDtcbiAgfVxuICBpZiAoIXBhcmVudEluZm8gfHwgIWRvZXNNZW1iZXJQYWdlRXhpc3QocGFyZW50SW5mby5uYW1lc3BhY2UsIHBhcmVudEluZm8ubmFtZSwgbWVtYmVyU2x1Z1N0cmluZykpIHtcbiAgICAvLyBBbiB1bmRvY3VtZW50ZWQgb3IgYW1iaWd1b3VzIGFuY2VzdG9yIGhhcyBubyBzYWZlIG1lbWJlciBkZXN0aW5hdGlvbi5cbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29uc3QgcGFyZW50TnNEaXJlY3RvcnkgPSBnZXROYW1lc3BhY2VEaXJlY3RvcnkocGFyZW50SW5mby5uYW1lc3BhY2UpO1xuICByZXR1cm4gYCR7Z2V0QmFzZVBhdGgoKX0vYXBpLyR7cGFyZW50TnNEaXJlY3Rvcnl9LyR7dG9UeXBlUm91dGVTZWdtZW50KHBhcmVudEluZm8ubmFtZXNwYWNlLCBwYXJlbnRJbmZvLm5hbWUpfS8ke21lbWJlclNsdWdTdHJpbmd9L2A7XG59XG5cbi8qKlxuICogUG9wdWxhdGUge0BsaW5rIGRvZXNNZW1iZXJQYWdlRXhpc3R9LiBNaXJyb3JzIGBnZW5lcmF0ZU1lbWJlclBhZ2VzYCdzIG93biBmaWx0ZXJpbmcgZXhhY3RseSAob25lIHBhZ2VcbiAqIHBlciBub24taW5oZXJpdGVkIHByb3BlcnR5LCBvbmUgcGVyIG5vbi1pbmhlcml0ZWQgbWV0aG9kIG92ZXJsb2FkIGtleSkuIE11c3QgcnVuIG9uY2UgYmVmb3JlIGFueVxuICogbGluayBpcyByZW5kZXJlZC5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJNZW1iZXJQYWdlcyh0eXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+KTogdm9pZCB7XG4gIGdlbmVyYXRlZE1lbWJlclBhZ2VzLmNsZWFyKCk7XG4gIGZvciAoY29uc3QgaW5mbyBvZiB0eXBlcy52YWx1ZXMoKSkge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgaW5mby5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoIXByb3BlcnR5LmluaGVyaXRlZEZyb20pIHtcbiAgICAgICAgZ2VuZXJhdGVkTWVtYmVyUGFnZXMuYWRkKGAke2luZm8ubmFtZXNwYWNlfSMke2luZm8ubmFtZX0jJHttZW1iZXJSb3V0ZVNlZ21lbnQocHJvcGVydHkubmFtZSl9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG92ZXJsb2FkS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGluZm8ubWV0aG9kcykge1xuICAgICAgaWYgKCFtZXRob2QuaW5oZXJpdGVkRnJvbSkge1xuICAgICAgICBvdmVybG9hZEtleXMuYWRkKG1ldGhvZC5vdmVybG9hZEtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3Qgb3ZlcmxvYWRLZXkgb2Ygb3ZlcmxvYWRLZXlzKSB7XG4gICAgICBnZW5lcmF0ZWRNZW1iZXJQYWdlcy5hZGQoYCR7aW5mby5uYW1lc3BhY2V9IyR7aW5mby5uYW1lfSMke292ZXJsb2FkUm91dGVTZWdtZW50KG92ZXJsb2FkS2V5KX1gKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGb3IgZXZlcnkgZG9jdW1lbnRlZCB0eXBlIGFzc2lnbiBCT1RIOlxuICogIC0gYSBsb3dlcmNhc2VkLCBudW1lcmljYWxseS1kaXNhbWJpZ3VhdGVkIEZJTEUgc2VnbWVudCAoc28gYFR5cGVBc3NlcnRlcmAgdnMgYHR5cGVBc3NlcnRlcmAsIHdoaWNoXG4gKiAgICBib3RoIGxvd2VyY2FzZSB0byBgdHlwZWFzc2VydGVyYCwgYmVjb21lIGB0eXBlYXNzZXJ0ZXJgIC8gYHR5cGVhc3NlcnRlci0yYCBvbiBkaXNrIGFuZCBuZXZlclxuICogICAgY29sbGlkZSBvbiBXaW5kb3dzJyBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0pLCBhbmRcbiAqICAtIGEgY2FzZS1QUkVTRVJWRUQgUk9VVEUgc2VnbWVudCAoYFR5cGVBc3NlcnRlcmAgLyBgdHlwZUFzc2VydGVyYCkgdXNlZCBmb3IgdGhlIGV4cGxpY2l0IGBzbHVnOmBcbiAqICAgIGZyb250bWF0dGVyIGFuZCBldmVyeSBpbnRlcm5hbCBsaW5rLCBzbyB0aGUgVVJMcyBzdGF5IHByZXR0eSBhbmQgbmF0dXJhbGx5IGRpc3RpbmN0LlxuICogVGhlIHJvdXRlIGRlY291cGxlcyBmcm9tIHRoZSBmaWxlIHBhdGggdmlhIHRoZSBgc2x1ZzpgIGZyb250bWF0dGVyLCBzbyBubyBgLTJgIHN1ZmZpeCBsZWFrcyBpbnRvXG4gKiBVUkxzLiBBbHNvIHdhcm5zIGFib3V0IG1lbWJlci1zbHVnIGNvbGxpc2lvbnMgd2l0aGluIGEgdHlwZS4gTXVzdCBydW4gb25jZSBiZWZvcmUgYW55IHBhZ2UvbGluay5cbiAqXG4gKiBAcGFyYW0gdHlwZXMgLSBUaGUgZG9jdW1lbnRlZCB0eXBlcywga2V5ZWQgYnkgcXVhbGlmaWVkIGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJSb3V0ZVNlZ21lbnRzKHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgdHlwZUZpbGVTZWdtZW50cy5jbGVhcigpO1xuICB0eXBlUm91dGVTZWdtZW50cy5jbGVhcigpO1xuICBjb25zdCBieU5hbWVzcGFjZSA9IG5ldyBNYXA8c3RyaW5nLCBUeXBlSW5mb1tdPigpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItZ3JvdXAtYnkgLS0gYE1hcC5ncm91cEJ5YCBpcyBFUzIwMjQsIGFuZCB0aGUgc2hhcmVkIGB0c2NvbmZpZy5qc29uYCB0eXBlcyBvbmx5IEVTMjAyMi5cbiAgZm9yIChjb25zdCBpbmZvIG9mIHR5cGVzLnZhbHVlcygpKSB7XG4gICAgY29uc3QgbGlzdCA9IGJ5TmFtZXNwYWNlLmdldChpbmZvLm5hbWVzcGFjZSkgPz8gW107XG4gICAgbGlzdC5wdXNoKGluZm8pO1xuICAgIGJ5TmFtZXNwYWNlLnNldChpbmZvLm5hbWVzcGFjZSwgbGlzdCk7XG4gIH1cbiAgZm9yIChjb25zdCBbbmFtZXNwYWNlLCBpbmZvc10gb2YgYnlOYW1lc3BhY2UpIHtcbiAgICBjb25zdCB1c2VkRmlsZVNlZ21lbnRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgdXNlZFJvdXRlU2VnbWVudHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBzb3J0ZWQgPSBbLi4uaW5mb3NdLnNvcnQoKGFscGhhLCBicmF2bykgPT4gYWxwaGEubmFtZS5sb2NhbGVDb21wYXJlKGJyYXZvLm5hbWUpKTtcbiAgICBmb3IgKGNvbnN0IGluZm8gb2Ygc29ydGVkKSB7XG4gICAgICB0eXBlRmlsZVNlZ21lbnRzLnNldChgJHtuYW1lc3BhY2V9IyR7aW5mby5uYW1lfWAsIGRpc2FtYmlndWF0ZSh0b1JvdXRlU2VnbWVudChpbmZvLm5hbWUpLCB1c2VkRmlsZVNlZ21lbnRzLCAoc2VnbWVudCkgPT4gc2VnbWVudCkpO1xuXG4gICAgICBjb25zdCByb3V0ZUJhc2UgPSB0b1JvdXRlU2VnbWVudFByZXNlcnZlQ2FzZShpbmZvLm5hbWUpO1xuICAgICAgLy8gRGlzYW1iaWd1YXRlIFJPVVRFUyBjYXNlLUlOU0VOU0lUSVZFTFk6IHRoZSBzbHVnIGJlY29tZXMgQXN0cm8ncyBvbi1kaXNrIG91dHB1dCBwYXRoLCBzb1xuICAgICAgLy8gYFR5cGVBc3NlcnRlcmAgYW5kIGB0eXBlQXNzZXJ0ZXJgIChzYW1lIG5hbWUgbW9kdWxvIGNhc2UpIHdvdWxkIGNvbGxpZGUgd2hlbiB0aGUgc2l0ZSBpcyBidWlsdFxuICAgICAgLy8gb24gYSBjYXNlLWluc2Vuc2l0aXZlIGZpbGVzeXN0ZW0gKFdpbmRvd3MvbWFjT1MpLCBzaWxlbnRseSBvdmVyd3JpdGluZyBvbmUgcGFnZSBzbyBldmVyeSBsaW5rXG4gICAgICAvLyB0byBpdCA0MDRzLiBDb21wYXJpbmcgbG93ZXJjYXNlZCBrZXlzIGZvcmNlcyB0aGUgc2Vjb25kIG9jY3VycmVuY2UgdG8gdGFrZSBhIGAtMmAgc3VmZml4LlxuICAgICAgY29uc3Qgcm91dGVTZWdtZW50ID0gZGlzYW1iaWd1YXRlKHJvdXRlQmFzZSwgdXNlZFJvdXRlU2VnbWVudHMsIChzZWdtZW50KSA9PiBzZWdtZW50LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgdHlwZVJvdXRlU2VnbWVudHMuc2V0KGAke25hbWVzcGFjZX0jJHtpbmZvLm5hbWV9YCwgcm91dGVTZWdtZW50KTtcbiAgICAgIGlmIChyb3V0ZVNlZ21lbnQgIT09IHJvdXRlQmFzZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYERpc2FtYmlndWF0ZWQgUk9VVEUgZm9yIFwiJHtuYW1lc3BhY2V9IyR7aW5mby5uYW1lfVwiOiBcIiR7cm91dGVCYXNlfVwiIC0+IFwiJHtyb3V0ZVNlZ21lbnR9XCIgKHNsdWcgY29sbGlzaW9uKS5gKTtcbiAgICAgIH1cbiAgICAgIHdhcm5NZW1iZXJTbHVnQ29sbGlzaW9ucyhpbmZvLCBuYW1lc3BhY2UpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlbmRlciBhbiBgQGV4YW1wbGVgIGJsb2NrIGFzIE1EWC4gSWYgdGhlIGV4YW1wbGUgYWxyZWFkeSBjb250YWlucyBhIGZlbmNlZCBjb2RlIGJsb2NrLCBpdCBpc1xuICogbm9ybWFsaXplZCB0aHJvdWdoIHtAbGluayByZW5kZXJNZHhQcm9zZX0gKGNvZGUgcHJlc2VydmVkIHJhdywgc3Vycm91bmRpbmcgcHJvc2UgZXNjYXBlZCk7XG4gKiBvdGhlcndpc2UgdGhlIHJhdyBleGFtcGxlIHRleHQgaXMgd3JhcHBlZCBpbiBhIGB0c2AgY29kZSBmZW5jZSBzbyBpdCBpcyBlbWl0dGVkIGxpdGVyYWxseS5cbiAqXG4gKiBAcGFyYW0gZXhhbXBsZSAtIFRoZSBgQGV4YW1wbGVgIHRleHQuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gc2VsZk5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHBhZ2UgYmVpbmcgcmVuZGVyZWQsIHByZWZlcnJlZCB3aGVuIGEgbmFtZSBpcyBhbWJpZ3VvdXMuXG4gKiBAcmV0dXJucyBUaGUgTURYLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRXhhbXBsZU1keChleGFtcGxlOiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gLyg/Ol58XFxuKVxccyooPzpgYGB8fn5+KS8udGVzdChleGFtcGxlKSA/IHJlbmRlck1keFByb3NlKGV4YW1wbGUsIGFsbFR5cGVzLCBzZWxmTmFtZXNwYWNlKSA6IGBcXGBcXGBcXGB0c1xcbiR7ZXhhbXBsZX1cXG5cXGBcXGBcXGBgO1xufVxuXG4vKipcbiAqIFJlbmRlciBtYXJrZG93biBibG9jayB0ZXh0IChhIGRlc2NyaXB0aW9uLCByZW1hcmtzLCBvciBtb2R1bGUgb3ZlcnZpZXcpIGFzIE1EWC1zYWZlIG1hcmtkb3duLlxuICogRmVuY2VkIGNvZGUgYmxvY2tzIGFyZSByZS1lbWl0dGVkIHZlcmJhdGltIChzdXJyb3VuZGVkIGJ5IGJsYW5rIGxpbmVzLCB3aXRoIGEgbGFuZ3VhZ2UpOyBwcm9zZVxuICogc2VnbWVudHMgaGF2ZSB0aGVpciBpbmxpbmUgbGluayB0YWdzIHJlc29sdmVkIGFuZCB0aGVpciBNRFgtdW5zYWZlIGNoYXJhY3RlcnMgZXNjYXBlZC5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIE1EWC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlck1keFByb3NlKHRleHQ6IHN0cmluZywgYWxsVHlwZXM6IE1hcDxzdHJpbmcsIFR5cGVJbmZvPiwgc2VsZk5hbWVzcGFjZT86IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG91dDogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBzZWcgb2Ygc2VnbWVudE1hcmtkb3duKHRleHQpKSB7XG4gICAgaWYgKHNlZy50eXBlID09PSAnY29kZScpIHtcbiAgICAgIG91dC5wdXNoKCcnLCBgXFxgXFxgXFxgJHtzZWcubGFuZyB8fCAndHMnfWAsIHNlZy50ZXh0LCAnYGBgJywgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQucHVzaChlc2NhcGVNZHhQcm9zZShyZXNvbHZlTGlua3Moc2VnLnRleHQsIGFsbFR5cGVzLCBzZWxmTmFtZXNwYWNlKSkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0LmpvaW4oJ1xcbicpLnJlcGxhY2VBbGwoL1xcbnszLH0vZywgJ1xcblxcbicpLnRyaW0oKTtcbn1cblxuLyoqXG4gKiBSZW5kZXIgYSB0eXBlIHN0cmluZyB3aXRoIGNsaWNrYWJsZSBsaW5rcyBmb3Iga25vd24gdHlwZXNcbiAqXG4gKiBAcGFyYW0gdHlwZVRleHQgLSBUaGUgdHlwZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZUeXBlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0eXBlIHRoZSBwYWdlIGRvY3VtZW50cywgd2hpY2ggYHRoaXNgIGxpbmtzIHRvLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHR5cGUgdGV4dCB3aXRoIG1hcmtkb3duIGxpbmtzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyVHlwZVdpdGhMaW5rcyh0eXBlVGV4dDogc3RyaW5nLCBhbGxUeXBlczogTWFwPHN0cmluZywgVHlwZUluZm8+LCBzZWxmVHlwZU5hbWU/OiBzdHJpbmcsIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBQcmUtcGFzczogbGluayBPYmplY3QubWV0aG9kIHBhdHRlcm5zIHRvIE1ETiBiZWZvcmUgd29yZC1ieS13b3JkIGxpbmtpbmdcbiAgY29uc3QgTUROX09CSkVDVF9CQVNFID0gJ2h0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdCc7XG4gIGNvbnN0IHdpdGhPYmplY3RNZXRob2RzID0gcmVwbGFjZVJlZ0V4cE1hdGNoZXModHlwZVRleHQsIC9cXGJPYmplY3RcXC4oPzxtZXRob2Q+W2EtekEtWl1bYS16QS1aMC05XSopXFxiL2csIChtYXRjaCkgPT4ge1xuICAgIGNvbnN0IG1ldGhvZCA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdtZXRob2QnKTtcbiAgICByZXR1cm4gYFtPYmplY3RdKCR7TUROX09CSkVDVF9CQVNFfSkuWyR7bWV0aG9kfV0oJHtNRE5fT0JKRUNUX0JBU0V9LyR7bWV0aG9kfSlgO1xuICB9KTtcbiAgLy8gTWFpbiBwYXNzOiBsaW5rIGluZGl2aWR1YWwgdHlwZSBuYW1lcywgc2tpcHBpbmcgdGV4dCBhbHJlYWR5IGluc2lkZSBtYXJrZG93biBsaW5rc1xuICByZXR1cm4gcmVwbGFjZVJlZ0V4cE1hdGNoZXMoXG4gICAgd2l0aE9iamVjdE1ldGhvZHMsXG4gICAgL1xcW1teXFxdXStcXF1cXChbXildK1xcKXxcXGIoPzx0eXBlTmFtZT5bYS16QS1aXVthLXpBLVowLTldKilcXGIvZyxcbiAgICAobWF0Y2gpID0+IHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gZ2V0T3B0aW9uYWxOYW1lZEdyb3VwKG1hdGNoLCAndHlwZU5hbWUnKTtcbiAgICAgIGlmICh0eXBlTmFtZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbWF0Y2hbMF07XG4gICAgICB9XG4gICAgICAvLyBMaW5rIGB0aGlzYCByZXR1cm4gdHlwZSB0byB0aGUgY3VycmVudCB0eXBlJ3MgcGFnZVxuICAgICAgaWYgKHR5cGVOYW1lID09PSAndGhpcycgJiYgc2VsZlR5cGVOYW1lKSB7XG4gICAgICAgIGNvbnN0IHNlbGZJbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHNlbGZUeXBlTmFtZSwgc2VsZk5hbWVzcGFjZSk7XG4gICAgICAgIGlmIChzZWxmSW5mbykge1xuICAgICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke3R5cGVIcmVmKHNlbGZJbmZvKX0pYDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTa2lwIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXJzXG4gICAgICBpZiAoR0VORVJJQ19UWVBFX1BBUkFNUy5oYXModHlwZU5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0eXBlTmFtZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgb3VyIG93biB0eXBlcyBmaXJzdFxuICAgICAgY29uc3QgaW5mbyA9IGZpbmRUeXBlKGFsbFR5cGVzLCB0eXBlTmFtZSwgc2VsZk5hbWVzcGFjZSk7XG4gICAgICBpZiAoaW5mbykge1xuICAgICAgICByZXR1cm4gYFske3R5cGVOYW1lfV0oJHt0eXBlSHJlZihpbmZvKX0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gQSB0eXBlIGFub3RoZXIgZG9jdW1lbnRlZCBwYWNrYWdlIGRlY2xhcmVzLCBvciBvbmUgdGhlIHNpdGUgbWFwcyBpdHNlbGZcbiAgICAgIGNvbnN0IGV4dGVybmFsVXJsID0gcmVzb2x2ZUV4dGVybmFsVHlwZVVybCh0eXBlTmFtZSk7XG4gICAgICBpZiAoZXh0ZXJuYWxVcmwpIHtcbiAgICAgICAgcmV0dXJuIGBbJHt0eXBlTmFtZX1dKCR7ZXh0ZXJuYWxVcmx9KWA7XG4gICAgICB9XG5cbiAgICAgIC8vIFR5cGVTY3JpcHQgdXRpbGl0eSB0eXBlc1xuICAgICAgY29uc3QgdHNVcmwgPSByZXNvbHZlVHNVdGlsaXR5VXJsKHR5cGVOYW1lKTtcbiAgICAgIGlmICh0c1VybCkge1xuICAgICAgICByZXR1cm4gYFske3R5cGVOYW1lfV0oJHt0c1VybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gSlMgZ2xvYmFsIHR5cGVzIChBcnJheSwgUHJvbWlzZSwgTWFwLCBldGMuKVxuICAgICAgY29uc3QgZ2xvYmFsVXJsID0gT2JqZWN0Lmhhc093bihUU19HTE9CQUxfVFlQRVMsIHR5cGVOYW1lKSA/IFRTX0dMT0JBTF9UWVBFU1t0eXBlTmFtZV0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoZ2xvYmFsVXJsKSB7XG4gICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke2dsb2JhbFVybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gV2ViIEFQSSAvIE1ETiB0eXBlc1xuICAgICAgY29uc3QgbWRuVXJsID0gcmVzb2x2ZVdlYkFwaVVybCh0eXBlTmFtZSk7XG4gICAgICBpZiAobWRuVXJsKSB7XG4gICAgICAgIHJldHVybiBgWyR7dHlwZU5hbWV9XSgke21kblVybH0pYDtcbiAgICAgIH1cblxuICAgICAgLy8gVHlwZVNjcmlwdCBwcmltaXRpdmUgdHlwZXNcbiAgICAgIGNvbnN0IHByaW1pdGl2ZVVybCA9IE9iamVjdC5oYXNPd24oVFNfUFJJTUlUSVZFX1RZUEVTLCB0eXBlTmFtZSkgPyBUU19QUklNSVRJVkVfVFlQRVNbdHlwZU5hbWVdIDogdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHByaW1pdGl2ZVVybCA/IGBbJHt0eXBlTmFtZX1dKCR7cHJpbWl0aXZlVXJsfSlgIDogdHlwZU5hbWU7XG4gICAgfVxuICApO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYSB0eXBlIG5vIHBhZ2Ugb2YgdGhpcyBzaXRlIGRvY3VtZW50cyB0byB0aGUgcGFnZSB0aGF0IGRvZXM6IGFub3RoZXIgZG9jdW1lbnRlZCBwYWNrYWdlJ3Mgc2l0ZSwgb3IgYW5cbiAqIGVudHJ5IG9mIHRoZSBzaXRlJ3Mgb3duIGBleHRlcm5hbFR5cGVMaW5rc2Agc2V0dGluZy5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBVUkwsIG9yIGB1bmRlZmluZWRgIHdoZW4gbmVpdGhlciBrbm93cyB0aGUgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFeHRlcm5hbFR5cGVVcmwobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGdldFBhY2thZ2VUeXBlVXJsKG5hbWUpID8/IGdldEFwaURvY1NldHRpbmdzKCkuZXh0ZXJuYWxUeXBlTGlua3MuZ2V0KG5hbWUpO1xufVxuXG4vKipcbiAqIFJlc29sdmUgYEBsaW5rYCB0YWdzLCB3aXRoIG9yIHdpdGhvdXQgYSBgfCBkaXNwbGF5IHRleHRgIHBhcnQsIGluIGRlc2NyaXB0aW9uIHRleHRcbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0LlxuICogQHBhcmFtIGFsbFR5cGVzIC0gRXZlcnkgZG9jdW1lbnRlZCB0eXBlLCBrZXllZCBieSBgJHtuYW1lc3BhY2V9IyR7bmFtZX1gLlxuICogQHBhcmFtIHNlbGZOYW1lc3BhY2UgLSBUaGUgbmFtZXNwYWNlIG9mIHRoZSBwYWdlIGJlaW5nIHJlbmRlcmVkLCBwcmVmZXJyZWQgd2hlbiBhIG5hbWUgaXMgYW1iaWd1b3VzLlxuICogQHJldHVybnMgVGhlIHRleHQgd2l0aCBtYXJrZG93biBsaW5rcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVMaW5rcyh0ZXh0OiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIHNlbGZOYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVwbGFjZVJlZ0V4cE1hdGNoZXModGV4dCwgL1xce0BsaW5rXFxzKyg/PHRhcmdldD5bXnx9XSs/KSg/OlxccypcXHxcXHMqKD88ZGlzcGxheT5bXn1dKz8pKT9cXH0vZywgKG1hdGNoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChtYXRjaCwgJ3RhcmdldCcpLnRyaW0oKTtcbiAgICBjb25zdCBkaXNwbGF5ID0gKGdldE9wdGlvbmFsTmFtZWRHcm91cChtYXRjaCwgJ2Rpc3BsYXknKT8udHJpbSgpID8/IHRhcmdldCkucmVwbGFjZUFsbCgvXFxcXCg/PVs8Pnt9XSkvZywgJycpO1xuXG4gICAgLy8gSGFuZGxlIFR5cGUubWVtYmVyIHJlZmVyZW5jZXMgKGUuZy4sIFBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKVxuICAgIGNvbnN0IGRvdE1hdGNoID0gL14oPzx0eXBlTmFtZT5bQS1aYS16XVxcdyopXFwuKD88bWVtYmVyTmFtZT5cXHcrKSQvLmV4ZWModGFyZ2V0KTtcbiAgICBpZiAoZG90TWF0Y2gpIHtcbiAgICAgIGNvbnN0IHR5cGVOYW1lID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChkb3RNYXRjaCwgJ3R5cGVOYW1lJyk7XG4gICAgICBjb25zdCBtZW1iZXJOYW1lID0gZ2V0TWFuZGF0b3J5TmFtZWRHcm91cChkb3RNYXRjaCwgJ21lbWJlck5hbWUnKTtcbiAgICAgIGNvbnN0IHR5cGVJbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHR5cGVOYW1lLCBzZWxmTmFtZXNwYWNlKTtcbiAgICAgIGlmICh0eXBlSW5mbyAmJiBkb2VzTWVtYmVyUGFnZUV4aXN0KHR5cGVJbmZvLm5hbWVzcGFjZSwgdHlwZUluZm8ubmFtZSwgbWVtYmVyUm91dGVTZWdtZW50KG1lbWJlck5hbWUpKSkge1xuICAgICAgICBjb25zdCB0YXJnZXROc0RpcmVjdG9yeSA9IGdldE5hbWVzcGFjZURpcmVjdG9yeSh0eXBlSW5mby5uYW1lc3BhY2UpO1xuICAgICAgICByZXR1cm4gYFske2Rpc3BsYXl9XSgke2dldEJhc2VQYXRoKCl9L2FwaS8ke3RhcmdldE5zRGlyZWN0b3J5fS8ke3RvVHlwZVJvdXRlU2VnbWVudCh0eXBlSW5mby5uYW1lc3BhY2UsIHR5cGVJbmZvLm5hbWUpfS8ke21lbWJlclJvdXRlU2VnbWVudChtZW1iZXJOYW1lKX0vKWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHNpbXBsZSB0eXBlIHJlZmVyZW5jZXMg4oCUIGlmIGRpc3BsYXkgY29udGFpbnMgZ2VuZXJpYyBhcmdzLCBsaW5rIGVhY2ggdHlwZSBpbmRpdmlkdWFsbHlcbiAgICBjb25zdCBpbmZvID0gZmluZFR5cGUoYWxsVHlwZXMsIHRhcmdldCwgc2VsZk5hbWVzcGFjZSk7XG4gICAgaWYgKGluZm8pIHtcbiAgICAgIHJldHVybiBkaXNwbGF5ICE9PSB0YXJnZXQgJiYgZGlzcGxheS5pbmNsdWRlcygnPCcpID8gcmVuZGVyVHlwZVdpdGhMaW5rcyhkaXNwbGF5LCBhbGxUeXBlcywgdW5kZWZpbmVkLCBzZWxmTmFtZXNwYWNlKSA6IGBbJHtkaXNwbGF5fV0oJHt0eXBlSHJlZihpbmZvKX0pYDtcbiAgICB9XG5cbiAgICBjb25zdCBleHRlcm5hbFVybCA9IHJlc29sdmVFeHRlcm5hbFR5cGVVcmwodGFyZ2V0KTtcbiAgICByZXR1cm4gZXh0ZXJuYWxVcmwgPyBgWyR7ZGlzcGxheX1dKCR7ZXh0ZXJuYWxVcmx9KWAgOiBgXFxgJHtkaXNwbGF5fVxcYGA7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgVHlwZVNjcmlwdCB1dGlsaXR5IHR5cGUgdG8gaXRzIGhhbmRib29rIGVudHJ5LlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHJldHVybnMgVGhlIGhhbmRib29rIFVSTCwgb3IgYHVuZGVmaW5lZGAgd2hlbiBpdCBpcyBub3QgYSB1dGlsaXR5IHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVHNVdGlsaXR5VXJsKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGhhc2ggPSBUU19VVElMSVRZX1RZUEVTLmdldChuYW1lKTtcbiAgaWYgKGhhc2gpIHtcbiAgICBpZiAoWydJdGVyYWJsZSddLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gYGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL2l0ZXJhdG9ycy1hbmQtZ2VuZXJhdG9ycy5odG1sIyR7aGFzaH1gO1xuICAgIH1cbiAgICBjb25zdCBoYW5kYm9va1BhZ2UgPSBbJ0NhcGl0YWxpemUnLCAnTG93ZXJjYXNlJywgJ1VuY2FwaXRhbGl6ZScsICdVcHBlcmNhc2UnXS5pbmNsdWRlcyhuYW1lKSA/ICcyL3RlbXBsYXRlLWxpdGVyYWwtdHlwZXMnIDogJ3V0aWxpdHktdHlwZXMnOyAvLyBDc3BlbGw6ZGlzYWJsZS1saW5lXG4gICAgcmV0dXJuIGBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8ke2hhbmRib29rUGFnZX0uaHRtbCMke2hhc2h9YDtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIGEgV2ViIEFQSSB0eXBlIHRvIGl0cyBNRE4gcGFnZS5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBNRE4gVVJMLCBvciBgdW5kZWZpbmVkYCB3aGVuIGl0IGlzIG5vdCBhIGtub3duIFdlYiBBUEkgdHlwZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVXZWJBcGlVcmwobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFPYmplY3QuaGFzT3duKG1vZHVsZVN0YXRlLndlYkFwaVR5cGVzLCBuYW1lKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgZW50cnkgPSBtb2R1bGVTdGF0ZS53ZWJBcGlUeXBlc1tuYW1lXTtcbiAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZW50cnk7XG4gIH1cbiAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ29iamVjdCcgJiYgZW50cnkgIT09IG51bGwgJiYgJ3VybCcgaW4gZW50cnkpIHtcbiAgICBjb25zdCB0eXBlZEVudHJ5ID0gZW50cnkgYXMgV2ViQXBpRW50cnk7XG4gICAgcmV0dXJuIHR5cGVkRW50cnkudXJsO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmVzb2x2ZSB0aGUgbG93ZXJjYXNlZCBPTi1ESVNLIHNlZ21lbnQgZm9yIGEgdHlwZSAoZmlsZSBwYXRoICsgY29tcG9uZW50LWltcG9ydCByZWxhdGl2ZSBwYXRoKS5cbiAqXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSB0eXBlJ3MgbmFtZS5cbiAqIEByZXR1cm5zIFRoZSBzZWdtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9UeXBlRmlsZVNlZ21lbnQobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlRmlsZVNlZ21lbnRzLmdldChgJHtuYW1lc3BhY2V9IyR7bmFtZX1gKSA/PyB0b1JvdXRlU2VnbWVudChuYW1lKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBjYXNlLXByZXNlcnZlZCBVUkwvUk9VVEUgc2VnbWVudCBmb3IgYSB0eXBlIChzbHVnIGZyb250bWF0dGVyICsgaW50ZXJuYWwgbGlua3MpLlxuICpcbiAqIEBwYXJhbSBuYW1lc3BhY2UgLSBUaGUgdHlwZSdzIG5hbWVzcGFjZS5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHJldHVybnMgVGhlIHNlZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1R5cGVSb3V0ZVNlZ21lbnQobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0eXBlUm91dGVTZWdtZW50cy5nZXQoYCR7bmFtZXNwYWNlfSMke25hbWV9YCkgPz8gdG9Sb3V0ZVNlZ21lbnRQcmVzZXJ2ZUNhc2UobmFtZSk7XG59XG5cbi8qKlxuICogQWJzb2x1dGUgbGluayB0byBhIHR5cGUncyBvdmVydmlldyBwYWdlLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAqIEByZXR1cm5zIFRoZSBsaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHlwZUhyZWYoaW5mbzogVHlwZUluZm8pOiBzdHJpbmcge1xuICByZXR1cm4gYCR7Z2V0QmFzZVBhdGgoKX0vYXBpLyR7Z2V0TmFtZXNwYWNlRGlyZWN0b3J5KGluZm8ubmFtZXNwYWNlKX0vJHt0b1R5cGVSb3V0ZVNlZ21lbnQoaW5mby5uYW1lc3BhY2UsIGluZm8ubmFtZSl9L2A7XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGFic29sdXRlIGxpbmsgdG8gYSB0eXBlIHBhZ2VcbiAqXG4gKiBAcGFyYW0gdHlwZU5hbWUgLSBUaGUgdHlwZSdzIG5hbWUuXG4gKiBAcGFyYW0gYWxsVHlwZXMgLSBFdmVyeSBkb2N1bWVudGVkIHR5cGUsIGtleWVkIGJ5IGAke25hbWVzcGFjZX0jJHtuYW1lfWAuXG4gKiBAcGFyYW0gY3VycmVudE5hbWVzcGFjZSAtIFRoZSBuYW1lc3BhY2Ugb2YgdGhlIHJlZmVyZW5jaW5nIHBhZ2UsIHByZWZlcnJlZCB3aGVuIHRoZSBuYW1lIGlzIGFtYmlndW91cy5cbiAqIEByZXR1cm5zIEEgbWFya2Rvd24gbGluaywgb3IgaW5saW5lIGNvZGUgd2hlbiB0aGUgdHlwZSBpcyBub3QgZG9jdW1lbnRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHR5cGVMaW5rKHR5cGVOYW1lOiBzdHJpbmcsIGFsbFR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4sIGN1cnJlbnROYW1lc3BhY2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBjbGVhbk5hbWUgPSB0eXBlTmFtZS5yZXBsYWNlKC88Lio+JC8sICcnKS50cmltKCk7XG4gIGNvbnN0IGluZm8gPSBmaW5kVHlwZShhbGxUeXBlcywgY2xlYW5OYW1lLCBjdXJyZW50TmFtZXNwYWNlKTtcbiAgcmV0dXJuIGluZm8gPyBgWyR7ZXNjYXBlTWR4QW5nbGVCcmFja2V0cyh0eXBlTmFtZSl9XSgke3R5cGVIcmVmKGluZm8pfSlgIDogYFxcYCR7dHlwZU5hbWV9XFxgYDtcbn1cblxuZnVuY3Rpb24gZGlzYW1iaWd1YXRlKGJhc2U6IHN0cmluZywgdXNlZDogU2V0PHN0cmluZz4sIGtleU9mOiAoc2VnbWVudDogc3RyaW5nKSA9PiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgc2VnbWVudCA9IGJhc2U7XG4gIGNvbnN0IEZJUlNUX0RJU0FNQklHVUFUSU9OX1NVRkZJWCA9IDI7XG4gIGxldCBzdWZmaXggPSBGSVJTVF9ESVNBTUJJR1VBVElPTl9TVUZGSVg7XG4gIHdoaWxlICh1c2VkLmhhcyhrZXlPZihzZWdtZW50KSkpIHtcbiAgICBzZWdtZW50ID0gYCR7YmFzZX0tJHtTdHJpbmcoc3VmZml4KX1gO1xuICAgIHN1ZmZpeCsrO1xuICB9XG4gIHVzZWQuYWRkKGtleU9mKHNlZ21lbnQpKTtcbiAgcmV0dXJuIHNlZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIGdldEJhc2VQYXRoKCk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRBcGlEb2NTZXR0aW5ncygpLmJhc2VQYXRoO1xufVxuXG4vKipcbiAqIFdhcm4gd2hlbiB0d28gZGlzdGluY3QgbWVtYmVycyBvZiBhIHR5cGUgcHJvZHVjZSB0aGUgc2FtZSBtZW1iZXIgc2x1ZyAoVVJML2ZpbGUgc2VnbWVudCkuIFRoZVxuICogb3B0aW9uYWwtYD9gIHN1ZmZpeCBpcyBzdHJpcHBlZCBmaXJzdCwgc28gYSBwcm9wZXJ0eSBhcHBlYXJpbmcgYXMgYm90aCByZXF1aXJlZCBhbmQgb3B0aW9uYWwgaXMgbm90XG4gKiBhIGZhbHNlIHBvc2l0aXZlLlxuICpcbiAqIEBwYXJhbSBpbmZvIC0gVGhlIHR5cGUuXG4gKiBAcGFyYW0gbmFtZXNwYWNlIC0gVGhlIHR5cGUncyBuYW1lc3BhY2UuXG4gKi9cbmZ1bmN0aW9uIHdhcm5NZW1iZXJTbHVnQ29sbGlzaW9ucyhpbmZvOiBUeXBlSW5mbywgbmFtZXNwYWNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3Qgc2VlbiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGZ1bmN0aW9uIGNoZWNrKHNsdWc6IHN0cmluZywgb3JpZ2luYWw6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBvcmlnaW5hbC5yZXBsYWNlKC9cXD8kLywgJycpO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gc2Vlbi5nZXQoc2x1Zyk7XG4gICAgaWYgKGV4aXN0aW5nICE9PSB1bmRlZmluZWQgJiYgZXhpc3RpbmcgIT09IG5vcm1hbGl6ZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybihgTWVtYmVyIHJvdXRlIGNvbGxpc2lvbiBpbiBcIiR7bmFtZXNwYWNlfSMke2luZm8ubmFtZX1cIjogXCIke2V4aXN0aW5nfVwiIGFuZCBcIiR7bm9ybWFsaXplZH1cIiBib3RoIG1hcCB0byBcIi8ke3NsdWd9L1wiLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZWVuLnNldChzbHVnLCBub3JtYWxpemVkKTtcbiAgfVxuICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIGluZm8ucHJvcGVydGllcykge1xuICAgIGNoZWNrKG1lbWJlclNsdWcocHJvcGVydHkubmFtZSksIHByb3BlcnR5Lm5hbWUpO1xuICB9XG4gIGZvciAoY29uc3QgbWV0aG9kIG9mIGluZm8ubWV0aG9kcykge1xuICAgIGNoZWNrKG92ZXJsb2FkU2x1ZyhtZXRob2Qub3ZlcmxvYWRLZXkpLCBtZXRob2Qub3ZlcmxvYWRLZXkpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT0E7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLG9CQUFvQjtBQUM3QixTQUFTLFlBQVk7QUFPckI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMseUJBQXlCO0FBQ2xDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyx5QkFBeUI7QUFDbEM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBYVAsTUFBTSxjQUEyQjtBQUFBLEVBQy9CLGFBQWEsQ0FBQztBQUNoQjtBQUlBLE1BQU0sbUJBQW1CLG9CQUFJLElBQW9CO0FBSWpELE1BQU0sb0JBQW9CLG9CQUFJLElBQW9CO0FBUWxELE1BQU0sdUJBQXVCLG9CQUFJLElBQVk7QUFVdEMsU0FBUyxvQkFBb0IsV0FBbUIsVUFBa0IsY0FBK0I7QUFDdEcsU0FBTyxxQkFBcUIsSUFBSSxHQUFHLFNBQVMsSUFBSSxRQUFRLElBQUksWUFBWSxFQUFFO0FBQzVFO0FBZ0JPLFNBQVMsU0FBUyxVQUFpQyxNQUFjLGtCQUFpRDtBQUN2SCxNQUFJLHFCQUFxQixRQUFXO0FBQ2xDLFVB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
|
|
@@ -78,13 +78,23 @@ function parseTypeArguments(baseTypeName) {
|
|
|
78
78
|
return $arguments;
|
|
79
79
|
}
|
|
80
80
|
function resolveInheritedMembers(types) {
|
|
81
|
-
|
|
81
|
+
const resolved = /* @__PURE__ */ new Set();
|
|
82
|
+
const resolving = /* @__PURE__ */ new Set();
|
|
83
|
+
for (const info of types.values()) {
|
|
84
|
+
resolve(info);
|
|
85
|
+
}
|
|
86
|
+
function resolve(info) {
|
|
87
|
+
if (resolved.has(info)) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
resolving.add(info);
|
|
82
91
|
for (const baseTypeName of [...info.baseTypes, ...info.implementsTypes]) {
|
|
83
92
|
const cleanBase = baseTypeName.replace(/<.*>$/, "").trim();
|
|
84
93
|
const baseInfo = findType(types, cleanBase, info.namespace);
|
|
85
|
-
if (!baseInfo) {
|
|
94
|
+
if (!baseInfo || resolving.has(baseInfo)) {
|
|
86
95
|
continue;
|
|
87
96
|
}
|
|
97
|
+
resolve(baseInfo);
|
|
88
98
|
const typeArguments = parseTypeArguments(baseTypeName);
|
|
89
99
|
const typeParameterMap = buildTypeParameterMap(baseInfo, typeArguments);
|
|
90
100
|
for (const property of baseInfo.properties) {
|
|
@@ -93,13 +103,15 @@ function resolveInheritedMembers(types) {
|
|
|
93
103
|
}
|
|
94
104
|
}
|
|
95
105
|
for (const method of baseInfo.methods) {
|
|
96
|
-
const
|
|
97
|
-
const
|
|
98
|
-
if (!
|
|
99
|
-
info.methods.push(
|
|
106
|
+
const inheritedMethod = substituteMemberTypes({ ...method, inheritedFrom: baseInfo.name }, typeParameterMap);
|
|
107
|
+
const hasMethod = info.methods.some((m) => m.name === inheritedMethod.name && m.signature === inheritedMethod.signature);
|
|
108
|
+
if (!hasMethod) {
|
|
109
|
+
info.methods.push(inheritedMethod);
|
|
100
110
|
}
|
|
101
111
|
}
|
|
102
112
|
}
|
|
113
|
+
resolving.delete(info);
|
|
114
|
+
resolved.add(info);
|
|
103
115
|
}
|
|
104
116
|
}
|
|
105
117
|
function substituteMemberTypes(member, mapping) {
|
|
@@ -126,4 +138,4 @@ export {
|
|
|
126
138
|
substituteMemberTypes,
|
|
127
139
|
substituteTypeParams
|
|
128
140
|
};
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy10eXBlLW1lcmdpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEluaGVyaXRhbmNlIHJlc29sdXRpb246IGNvcGllcyBpbmhlcml0ZWQgbWVtYmVycyBvbnRvIHN1YnR5cGVzLCBzdWJzdGl0dXRpbmcgZ2VuZXJpYyB0eXBlIGFyZ3MuXG4gKlxuICogKEEgZG9jdW1lbnRlZCBwYWNrYWdlIGlzIGEgbm9ybWFsIGxpYnJhcnksIG5vdCBhbiBhdWdtZW50YXRpb24gb2YgYW5vdGhlciBwYWNrYWdlJ3MgZGVjbGFyYXRpb25zLCBzbyB0aGVyZSBpcyBub1xuICogb2ZmaWNpYWwtdnMtdW5vZmZpY2lhbCBtZXJnZSBtYWNoaW5lcnkgaGVyZSDigJQgb25seSB0aGUgZ2VuZXJpYyBpbmhlcml0YW5jZSBoZWxwZXJzLilcbiAqL1xuXG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWVtYmVySW5mbyxcbiAgVHlwZUluZm9cbn0gZnJvbSAnLi9hcGktZG9jLXR5cGVzLnRzJztcblxuaW1wb3J0IHsgZmluZFR5cGUgfSBmcm9tICcuL2FwaS1kb2MtbGluay1yZW5kZXJpbmcudHMnO1xuXG4vKipcbiAqIEJ1aWxkIGEgbWFwcGluZyBmcm9tIHBhcmVudCB0eXBlIHBhcmFtZXRlciBuYW1lcyB0byBjb25jcmV0ZSB0eXBlIGFyZ3VtZW50cy5cbiAqIEUuZy4sIHBhcmVudCBoYXMgYHR5cGVQYXJhbWV0ZXJzOiBbJ0luc3RhbmNlIGV4dGVuZHMgQmFzZUluc3RhbmNlJ11gIGFuZFxuICogY2hpbGQgZXh0ZW5kcyBgUGFyZW50PENhbnZhc1BsdWdpbkluc3RhbmNlPmAg4oaSIGB7SW5zdGFuY2U6ICdDYW52YXNQbHVnaW5JbnN0YW5jZSd9YFxuICpcbiAqIEBwYXJhbSBiYXNlSW5mbyAtIFRoZSBiYXNlIHR5cGUuXG4gKiBAcGFyYW0gdHlwZUFyZ3VtZW50cyAtIFRoZSB0eXBlIGFyZ3VtZW50cyB0aGUgYmFzZSB0eXBlIGlzIGdpdmVuLlxuICogQHJldHVybnMgVGhlIHBhcmFtZXRlciBuYW1lcyBtYXBwZWQgdG8gdGhlaXIgYXJndW1lbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUeXBlUGFyYW1ldGVyTWFwKGJhc2VJbmZvOiBUeXBlSW5mbywgdHlwZUFyZ3VtZW50czogc3RyaW5nW10pOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgbWFwcGluZyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGNvbnN0IGNvdW50ID0gTWF0aC5taW4oYmFzZUluZm8udHlwZVBhcmFtZXRlcnMubGVuZ3RoLCB0eXBlQXJndW1lbnRzLmxlbmd0aCk7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgaW5kZXgrKykge1xuICAgIC8vIEJvdGggbGlzdHMgYXJlIGxvbmdlciB0aGFuIGBpbmRleGAuXG4gICAgY29uc3QgcGFyYW1ldGVyID0gZW5zdXJlTm9uTnVsbGFibGUoYmFzZUluZm8udHlwZVBhcmFtZXRlcnNbaW5kZXhdKTtcbiAgICBjb25zdCBhcmd1bWVudCA9IGVuc3VyZU5vbk51bGxhYmxlKHR5cGVBcmd1bWVudHNbaW5kZXhdKTtcbiAgICBjb25zdCBiYXJlUGFyYW1ldGVyID0gcGFyYW1ldGVyLnJlcGxhY2UoL1xccytleHRlbmRzXFxzKy4qJC8sICcnKTtcbiAgICBtYXBwaW5nLnNldChiYXJlUGFyYW1ldGVyLCBhcmd1bWVudCk7XG4gIH1cbiAgcmV0dXJuIG1hcHBpbmc7XG59XG5cbi8qKlxuICogUGFyc2UgZ2VuZXJpYyB0eXBlIGFyZ3VtZW50cyBmcm9tIGEgYmFzZSB0eXBlIGV4cHJlc3Npb24uXG4gKiBFLmcuLCBgSW50ZXJuYWxQbHVnaW48Q2FudmFzUGx1Z2luSW5zdGFuY2U+YCDihpIgYFsnQ2FudmFzUGx1Z2luSW5zdGFuY2UnXWBcbiAqIEhhbmRsZXMgbmVzdGVkIGFuZ2xlIGJyYWNrZXRzOiBgRm9vPEJhcjxCYXo+LCBRdXg+YCDihpIgYFsnQmFyPEJhej4nLCAnUXV4J11gXG4gKlxuICogQHBhcmFtIGJhc2VUeXBlTmFtZSAtIFRoZSBiYXNlIHR5cGUgZXhwcmVzc2lvbiwgZS5nLiBgRm9vPEJhciwgQmF6PmAuXG4gKiBAcmV0dXJucyBUaGUgdHlwZSBhcmd1bWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVR5cGVBcmd1bWVudHMoYmFzZVR5cGVOYW1lOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG9wZW5JbmRleCA9IGJhc2VUeXBlTmFtZS5pbmRleE9mKCc8Jyk7XG4gIGlmIChvcGVuSW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGlubmVyID0gYmFzZVR5cGVOYW1lLnNsaWNlKG9wZW5JbmRleCArIDEsIC0xKTtcbiAgY29uc3QgJGFyZ3VtZW50czogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGRlcHRoID0gMDtcbiAgbGV0IGN1cnJlbnQgPSAnJztcbiAgZm9yIChjb25zdCBjaCBvZiBpbm5lcikge1xuICAgIGlmIChjaCA9PT0gJzwnKSB7XG4gICAgICBkZXB0aCsrO1xuICAgICAgY3VycmVudCArPSBjaDtcbiAgICB9IGVsc2UgaWYgKGNoID09PSAnPicpIHtcbiAgICAgIGRlcHRoLS07XG4gICAgICBjdXJyZW50ICs9IGNoO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09ICcsJyAmJiBkZXB0aCA9PT0gMCkge1xuICAgICAgJGFyZ3VtZW50cy5wdXNoKGN1cnJlbnQudHJpbSgpKTtcbiAgICAgIGN1cnJlbnQgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudCArPSBjaDtcbiAgICB9XG4gIH1cbiAgaWYgKGN1cnJlbnQudHJpbSgpKSB7XG4gICAgJGFyZ3VtZW50cy5wdXNoKGN1cnJlbnQudHJpbSgpKTtcbiAgfVxuICByZXR1cm4gJGFyZ3VtZW50cztcbn1cblxuLyoqXG4gKiBDb3BpZXMgZXZlcnkgaW5oZXJpdGVkIG1lbWJlciBvbnRvIGl0cyBzdWJ0eXBlcywgc3Vic3RpdHV0aW5nIHRoZSB0eXBlIGFyZ3VtZW50cyB0aGUgc3VidHlwZSBwYXNzZXMuXG4gKlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVJbmhlcml0ZWRNZW1iZXJzKHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBbLCBpbmZvXSBvZiB0eXBlcykge1xuICAgIGZvciAoY29uc3QgYmFzZVR5cGVOYW1lIG9mIFsuLi5pbmZvLmJhc2VUeXBlcywgLi4uaW5mby5pbXBsZW1lbnRzVHlwZXNdKSB7XG4gICAgICBjb25zdCBjbGVhbkJhc2UgPSBiYXNlVHlwZU5hbWUucmVwbGFjZSgvPC4qPiQvLCAnJykudHJpbSgpO1xuICAgICAgY29uc3QgYmFzZUluZm8gPSBmaW5kVHlwZSh0eXBlcywgY2xlYW5CYXNlLCBpbmZvLm5hbWVzcGFjZSk7XG4gICAgICBpZiAoIWJhc2VJbmZvKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0eXBlQXJndW1lbnRzID0gcGFyc2VUeXBlQXJndW1lbnRzKGJhc2VUeXBlTmFtZSk7XG4gICAgICBjb25zdCB0eXBlUGFyYW1ldGVyTWFwID0gYnVpbGRUeXBlUGFyYW1ldGVyTWFwKGJhc2VJbmZvLCB0eXBlQXJndW1lbnRzKTtcblxuICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBiYXNlSW5mby5wcm9wZXJ0aWVzKSB7XG4gICAgICAgIGlmIChpbmZvLnByb3BlcnRpZXMuZXZlcnkoKHApID0+IHAubmFtZSAhPT0gcHJvcGVydHkubmFtZSkpIHtcbiAgICAgICAgICBpbmZvLnByb3BlcnRpZXMucHVzaChzdWJzdGl0dXRlTWVtYmVyVHlwZXMoeyAuLi5wcm9wZXJ0eSwgaW5oZXJpdGVkRnJvbTogYmFzZUluZm8ubmFtZSB9LCB0eXBlUGFyYW1ldGVyTWFwKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBtZXRob2Qgb2YgYmFzZUluZm8ubWV0aG9kcykge1xuICAgICAgICBjb25zdCBoYXNPd25NZXRob2QgPSBpbmZvLm1ldGhvZHMuc29tZSgobSkgPT4gbS5uYW1lID09PSBtZXRob2QubmFtZSAmJiBtLnNpZ25hdHVyZSA9PT0gbWV0aG9kLnNpZ25hdHVyZSk7XG4gICAgICAgIGNvbnN0IGhhc0luaGVyaXRlZE1ldGhvZCA9IGluZm8ubWV0aG9kcy5zb21lKChtKSA9PiBtLmluaGVyaXRlZEZyb20gPT09IGJhc2VJbmZvLm5hbWUgJiYgbS5vdmVybG9hZEtleSA9PT0gbWV0aG9kLm92ZXJsb2FkS2V5KTtcbiAgICAgICAgaWYgKCFoYXNPd25NZXRob2QgJiYgIWhhc0luaGVyaXRlZE1ldGhvZCkge1xuICAgICAgICAgIGluZm8ubWV0aG9kcy5wdXNoKHN1YnN0aXR1dGVNZW1iZXJUeXBlcyh7IC4uLm1ldGhvZCwgaW5oZXJpdGVkRnJvbTogYmFzZUluZm8ubmFtZSB9LCB0eXBlUGFyYW1ldGVyTWFwKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBcHBseSB0eXBlIHBhcmFtZXRlciBzdWJzdGl0dXRpb24gdG8gYWxsIHR5cGUtYmVhcmluZyBmaWVsZHMgb2YgYSBtZW1iZXJcbiAqXG4gKiBAcGFyYW0gbWVtYmVyIC0gVGhlIG1lbWJlci5cbiAqIEBwYXJhbSBtYXBwaW5nIC0gVHlwZSBwYXJhbWV0ZXIgbmFtZXMgbWFwcGVkIHRvIHRoZWlyIGFyZ3VtZW50cy5cbiAqIEByZXR1cm5zIFRoZSBtZW1iZXIgd2l0aCBpdHMgdHlwZXMgc3Vic3RpdHV0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRlTWVtYmVyVHlwZXMobWVtYmVyOiBNZW1iZXJJbmZvLCBtYXBwaW5nOiBNYXA8c3RyaW5nLCBzdHJpbmc+KTogTWVtYmVySW5mbyB7XG4gIHJldHVybiBtYXBwaW5nLnNpemUgPT09IDBcbiAgICA/IG1lbWJlclxuICAgIDoge1xuICAgICAgLi4ubWVtYmVyLFxuICAgICAgcGFyYW1ldGVyczogbWVtYmVyLnBhcmFtZXRlcnMubWFwKChwKSA9PiAoe1xuICAgICAgICAuLi5wLFxuICAgICAgICB0eXBlOiBzdWJzdGl0dXRlVHlwZVBhcmFtcyhwLnR5cGUsIG1hcHBpbmcpXG4gICAgICB9KSksXG4gICAgICByZXR1cm5UeXBlOiBzdWJzdGl0dXRlVHlwZVBhcmFtcyhtZW1iZXIucmV0dXJuVHlwZSwgbWFwcGluZyksXG4gICAgICBzaWduYXR1cmU6IHN1YnN0aXR1dGVUeXBlUGFyYW1zKG1lbWJlci5zaWduYXR1cmUsIG1hcHBpbmcpLFxuICAgICAgdHlwZTogc3Vic3RpdHV0ZVR5cGVQYXJhbXMobWVtYmVyLnR5cGUsIG1hcHBpbmcpXG4gICAgfTtcbn1cblxuLyoqXG4gKiBTdWJzdGl0dXRlIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXJzIGluIGEgdHlwZSBzdHJpbmcgdXNpbmcgYSBtYXBwaW5nXG4gKlxuICogQHBhcmFtIHR5cGVUZXh0IC0gVGhlIHR5cGUgdGV4dC5cbiAqIEBwYXJhbSBtYXBwaW5nIC0gVHlwZSBwYXJhbWV0ZXIgbmFtZXMgbWFwcGVkIHRvIHRoZWlyIGFyZ3VtZW50cy5cbiAqIEByZXR1cm5zIFRoZSBzdWJzdGl0dXRlZCB0eXBlIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdWJzdGl0dXRlVHlwZVBhcmFtcyh0eXBlVGV4dDogc3RyaW5nLCBtYXBwaW5nOiBNYXA8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nIHtcbiAgcmV0dXJuIG1hcHBpbmcuc2l6ZSA9PT0gMFxuICAgID8gdHlwZVRleHRcbiAgICA6IHR5cGVUZXh0LnJlcGxhY2VBbGwoL1xcYig/PHR5cGVOYW1lPlthLXpBLVpdW2EtekEtWjAtOV0qKVxcYi9nLCAobWF0Y2gpID0+IHtcbiAgICAgIHJldHVybiBtYXBwaW5nLmdldChtYXRjaCkgPz8gbWF0Y2g7XG4gICAgfSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBU0EsU0FBUyx5QkFBeUI7QUFPbEMsU0FBUyxnQkFBZ0I7QUFXbEIsU0FBUyxzQkFBc0IsVUFBb0IsZUFBOEM7QUFDdEcsUUFBTSxVQUFVLG9CQUFJLElBQW9CO0FBQ3hDLFFBQU0sUUFBUSxLQUFLLElBQUksU0FBUyxlQUFlLFFBQVEsY0FBYyxNQUFNO0FBQzNFLFdBQVMsUUFBUSxHQUFHLFFBQVEsT0FBTyxTQUFTO0FBRTFDLFVBQU0sWUFBWSxrQkFBa0IsU0FBUyxlQUFlLEtBQUssQ0FBQztBQUNsRSxVQUFNLFdBQVcsa0JBQWtCLGNBQWMsS0FBSyxDQUFDO0FBQ3ZELFVBQU0sZ0JBQWdCLFVBQVUsUUFBUSxvQkFBb0IsRUFBRTtBQUM5RCxZQUFRLElBQUksZUFBZSxRQUFRO0FBQUEsRUFDckM7QUFDQSxTQUFPO0FBQ1Q7QUFVTyxTQUFTLG1CQUFtQixjQUFnQztBQUNqRSxRQUFNLFlBQVksYUFBYSxRQUFRLEdBQUc7QUFDMUMsTUFBSSxjQUFjLElBQUk7QUFDcEIsV0FBTyxDQUFDO0FBQUEsRUFDVjtBQUNBLFFBQU0sUUFBUSxhQUFhLE1BQU0sWUFBWSxHQUFHLEVBQUU7QUFDbEQsUUFBTSxhQUF1QixDQUFDO0FBQzlCLE1BQUksUUFBUTtBQUNaLE1BQUksVUFBVTtBQUNkLGFBQVcsTUFBTSxPQUFPO0FBQ3RCLFFBQUksT0FBTyxLQUFLO0FBQ2Q7QUFDQSxpQkFBVztBQUFBLElBQ2IsV0FBVyxPQUFPLEtBQUs7QUFDckI7QUFDQSxpQkFBVztBQUFBLElBQ2IsV0FBVyxPQUFPLE9BQU8sVUFBVSxHQUFHO0FBQ3BDLGlCQUFXLEtBQUssUUFBUSxLQUFLLENBQUM7QUFDOUIsZ0JBQVU7QUFBQSxJQUNaLE9BQU87QUFDTCxpQkFBVztBQUFBLElBQ2I7QUFBQSxFQUNGO0FBQ0EsTUFBSSxRQUFRLEtBQUssR0FBRztBQUNsQixlQUFXLEtBQUssUUFBUSxLQUFLLENBQUM7QUFBQSxFQUNoQztBQUNBLFNBQU87QUFDVDtBQU9PLFNBQVMsd0JBQXdCLE9BQW9DO0FBQzFFLGFBQVcsQ0FBQyxFQUFFLElBQUksS0FBSyxPQUFPO0FBQzVCLGVBQVcsZ0JBQWdCLENBQUMsR0FBRyxLQUFLLFdBQVcsR0FBRyxLQUFLLGVBQWUsR0FBRztBQUN2RSxZQUFNLFlBQVksYUFBYSxRQUFRLFNBQVMsRUFBRSxFQUFFLEtBQUs7QUFDekQsWUFBTSxXQUFXLFNBQVMsT0FBTyxXQUFXLEtBQUssU0FBUztBQUMxRCxVQUFJLENBQUMsVUFBVTtBQUNiO0FBQUEsTUFDRjtBQUVBLFlBQU0sZ0JBQWdCLG1CQUFtQixZQUFZO0FBQ3JELFlBQU0sbUJBQW1CLHNCQUFzQixVQUFVLGFBQWE7QUFFdEUsaUJBQVcsWUFBWSxTQUFTLFlBQVk7QUFDMUMsWUFBSSxLQUFLLFdBQVcsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLFNBQVMsSUFBSSxHQUFHO0FBQzFELGVBQUssV0FBVyxLQUFLLHNCQUFzQixFQUFFLEdBQUcsVUFBVSxlQUFlLFNBQVMsS0FBSyxHQUFHLGdCQUFnQixDQUFDO0FBQUEsUUFDN0c7QUFBQSxNQUNGO0FBRUEsaUJBQVcsVUFBVSxTQUFTLFNBQVM7QUFDckMsY0FBTSxlQUFlLEtBQUssUUFBUSxLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVMsT0FBTyxRQUFRLEVBQUUsY0FBYyxPQUFPLFNBQVM7QUFDeEcsY0FBTSxxQkFBcUIsS0FBSyxRQUFRLEtBQUssQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLFNBQVMsUUFBUSxFQUFFLGdCQUFnQixPQUFPLFdBQVc7QUFDN0gsWUFBSSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQjtBQUN4QyxlQUFLLFFBQVEsS0FBSyxzQkFBc0IsRUFBRSxHQUFHLFFBQVEsZUFBZSxTQUFTLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQztBQUFBLFFBQ3hHO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0Y7QUFTTyxTQUFTLHNCQUFzQixRQUFvQixTQUEwQztBQUNsRyxTQUFPLFFBQVEsU0FBUyxJQUNwQixTQUNBO0FBQUEsSUFDQSxHQUFHO0FBQUEsSUFDSCxZQUFZLE9BQU8sV0FBVyxJQUFJLENBQUMsT0FBTztBQUFBLE1BQ3hDLEdBQUc7QUFBQSxNQUNILE1BQU0scUJBQXFCLEVBQUUsTUFBTSxPQUFPO0FBQUEsSUFDNUMsRUFBRTtBQUFBLElBQ0YsWUFBWSxxQkFBcUIsT0FBTyxZQUFZLE9BQU87QUFBQSxJQUMzRCxXQUFXLHFCQUFxQixPQUFPLFdBQVcsT0FBTztBQUFBLElBQ3pELE1BQU0scUJBQXFCLE9BQU8sTUFBTSxPQUFPO0FBQUEsRUFDakQ7QUFDSjtBQVNPLFNBQVMscUJBQXFCLFVBQWtCLFNBQXNDO0FBQzNGLFNBQU8sUUFBUSxTQUFTLElBQ3BCLFdBQ0EsU0FBUyxXQUFXLDBDQUEwQyxDQUFDLFVBQVU7QUFDekUsV0FBTyxRQUFRLElBQUksS0FBSyxLQUFLO0FBQUEsRUFDL0IsQ0FBQztBQUNMOyIsIm5hbWVzIjpbXX0=
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy10eXBlLW1lcmdpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEluaGVyaXRhbmNlIHJlc29sdXRpb246IGNvcGllcyBpbmhlcml0ZWQgbWVtYmVycyBvbnRvIHN1YnR5cGVzLCBzdWJzdGl0dXRpbmcgZ2VuZXJpYyB0eXBlIGFyZ3MuXG4gKlxuICogKEEgZG9jdW1lbnRlZCBwYWNrYWdlIGlzIGEgbm9ybWFsIGxpYnJhcnksIG5vdCBhbiBhdWdtZW50YXRpb24gb2YgYW5vdGhlciBwYWNrYWdlJ3MgZGVjbGFyYXRpb25zLCBzbyB0aGVyZSBpcyBub1xuICogb2ZmaWNpYWwtdnMtdW5vZmZpY2lhbCBtZXJnZSBtYWNoaW5lcnkgaGVyZSDigJQgb25seSB0aGUgZ2VuZXJpYyBpbmhlcml0YW5jZSBoZWxwZXJzLilcbiAqL1xuXG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgTWVtYmVySW5mbyxcbiAgVHlwZUluZm9cbn0gZnJvbSAnLi9hcGktZG9jLXR5cGVzLnRzJztcblxuaW1wb3J0IHsgZmluZFR5cGUgfSBmcm9tICcuL2FwaS1kb2MtbGluay1yZW5kZXJpbmcudHMnO1xuXG4vKipcbiAqIEJ1aWxkIGEgbWFwcGluZyBmcm9tIHBhcmVudCB0eXBlIHBhcmFtZXRlciBuYW1lcyB0byBjb25jcmV0ZSB0eXBlIGFyZ3VtZW50cy5cbiAqIEUuZy4sIHBhcmVudCBoYXMgYHR5cGVQYXJhbWV0ZXJzOiBbJ0luc3RhbmNlIGV4dGVuZHMgQmFzZUluc3RhbmNlJ11gIGFuZFxuICogY2hpbGQgZXh0ZW5kcyBgUGFyZW50PENhbnZhc1BsdWdpbkluc3RhbmNlPmAg4oaSIGB7SW5zdGFuY2U6ICdDYW52YXNQbHVnaW5JbnN0YW5jZSd9YFxuICpcbiAqIEBwYXJhbSBiYXNlSW5mbyAtIFRoZSBiYXNlIHR5cGUuXG4gKiBAcGFyYW0gdHlwZUFyZ3VtZW50cyAtIFRoZSB0eXBlIGFyZ3VtZW50cyB0aGUgYmFzZSB0eXBlIGlzIGdpdmVuLlxuICogQHJldHVybnMgVGhlIHBhcmFtZXRlciBuYW1lcyBtYXBwZWQgdG8gdGhlaXIgYXJndW1lbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUeXBlUGFyYW1ldGVyTWFwKGJhc2VJbmZvOiBUeXBlSW5mbywgdHlwZUFyZ3VtZW50czogc3RyaW5nW10pOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgbWFwcGluZyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGNvbnN0IGNvdW50ID0gTWF0aC5taW4oYmFzZUluZm8udHlwZVBhcmFtZXRlcnMubGVuZ3RoLCB0eXBlQXJndW1lbnRzLmxlbmd0aCk7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb3VudDsgaW5kZXgrKykge1xuICAgIC8vIEJvdGggbGlzdHMgYXJlIGxvbmdlciB0aGFuIGBpbmRleGAuXG4gICAgY29uc3QgcGFyYW1ldGVyID0gZW5zdXJlTm9uTnVsbGFibGUoYmFzZUluZm8udHlwZVBhcmFtZXRlcnNbaW5kZXhdKTtcbiAgICBjb25zdCBhcmd1bWVudCA9IGVuc3VyZU5vbk51bGxhYmxlKHR5cGVBcmd1bWVudHNbaW5kZXhdKTtcbiAgICBjb25zdCBiYXJlUGFyYW1ldGVyID0gcGFyYW1ldGVyLnJlcGxhY2UoL1xccytleHRlbmRzXFxzKy4qJC8sICcnKTtcbiAgICBtYXBwaW5nLnNldChiYXJlUGFyYW1ldGVyLCBhcmd1bWVudCk7XG4gIH1cbiAgcmV0dXJuIG1hcHBpbmc7XG59XG5cbi8qKlxuICogUGFyc2UgZ2VuZXJpYyB0eXBlIGFyZ3VtZW50cyBmcm9tIGEgYmFzZSB0eXBlIGV4cHJlc3Npb24uXG4gKiBFLmcuLCBgSW50ZXJuYWxQbHVnaW48Q2FudmFzUGx1Z2luSW5zdGFuY2U+YCDihpIgYFsnQ2FudmFzUGx1Z2luSW5zdGFuY2UnXWBcbiAqIEhhbmRsZXMgbmVzdGVkIGFuZ2xlIGJyYWNrZXRzOiBgRm9vPEJhcjxCYXo+LCBRdXg+YCDihpIgYFsnQmFyPEJhej4nLCAnUXV4J11gXG4gKlxuICogQHBhcmFtIGJhc2VUeXBlTmFtZSAtIFRoZSBiYXNlIHR5cGUgZXhwcmVzc2lvbiwgZS5nLiBgRm9vPEJhciwgQmF6PmAuXG4gKiBAcmV0dXJucyBUaGUgdHlwZSBhcmd1bWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVR5cGVBcmd1bWVudHMoYmFzZVR5cGVOYW1lOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG9wZW5JbmRleCA9IGJhc2VUeXBlTmFtZS5pbmRleE9mKCc8Jyk7XG4gIGlmIChvcGVuSW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGNvbnN0IGlubmVyID0gYmFzZVR5cGVOYW1lLnNsaWNlKG9wZW5JbmRleCArIDEsIC0xKTtcbiAgY29uc3QgJGFyZ3VtZW50czogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGRlcHRoID0gMDtcbiAgbGV0IGN1cnJlbnQgPSAnJztcbiAgZm9yIChjb25zdCBjaCBvZiBpbm5lcikge1xuICAgIGlmIChjaCA9PT0gJzwnKSB7XG4gICAgICBkZXB0aCsrO1xuICAgICAgY3VycmVudCArPSBjaDtcbiAgICB9IGVsc2UgaWYgKGNoID09PSAnPicpIHtcbiAgICAgIGRlcHRoLS07XG4gICAgICBjdXJyZW50ICs9IGNoO1xuICAgIH0gZWxzZSBpZiAoY2ggPT09ICcsJyAmJiBkZXB0aCA9PT0gMCkge1xuICAgICAgJGFyZ3VtZW50cy5wdXNoKGN1cnJlbnQudHJpbSgpKTtcbiAgICAgIGN1cnJlbnQgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudCArPSBjaDtcbiAgICB9XG4gIH1cbiAgaWYgKGN1cnJlbnQudHJpbSgpKSB7XG4gICAgJGFyZ3VtZW50cy5wdXNoKGN1cnJlbnQudHJpbSgpKTtcbiAgfVxuICByZXR1cm4gJGFyZ3VtZW50cztcbn1cblxuLyoqXG4gKiBDb3BpZXMgZXZlcnkgaW5oZXJpdGVkIG1lbWJlciBvbnRvIGl0cyBzdWJ0eXBlcywgc3Vic3RpdHV0aW5nIHRoZSB0eXBlIGFyZ3VtZW50cyB0aGUgc3VidHlwZSBwYXNzZXMuXG4gKlxuICogQHBhcmFtIHR5cGVzIC0gVGhlIGRvY3VtZW50ZWQgdHlwZXMsIGtleWVkIGJ5IHF1YWxpZmllZCBpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVJbmhlcml0ZWRNZW1iZXJzKHR5cGVzOiBNYXA8c3RyaW5nLCBUeXBlSW5mbz4pOiB2b2lkIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSBuZXcgU2V0PFR5cGVJbmZvPigpO1xuICBjb25zdCByZXNvbHZpbmcgPSBuZXcgU2V0PFR5cGVJbmZvPigpO1xuXG4gIGZvciAoY29uc3QgaW5mbyBvZiB0eXBlcy52YWx1ZXMoKSkge1xuICAgIHJlc29sdmUoaW5mbyk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNvbHZlKGluZm86IFR5cGVJbmZvKTogdm9pZCB7XG4gICAgaWYgKHJlc29sdmVkLmhhcyhpbmZvKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXNvbHZpbmcuYWRkKGluZm8pO1xuICAgIGZvciAoY29uc3QgYmFzZVR5cGVOYW1lIG9mIFsuLi5pbmZvLmJhc2VUeXBlcywgLi4uaW5mby5pbXBsZW1lbnRzVHlwZXNdKSB7XG4gICAgICBjb25zdCBjbGVhbkJhc2UgPSBiYXNlVHlwZU5hbWUucmVwbGFjZSgvPC4qPiQvLCAnJykudHJpbSgpO1xuICAgICAgY29uc3QgYmFzZUluZm8gPSBmaW5kVHlwZSh0eXBlcywgY2xlYW5CYXNlLCBpbmZvLm5hbWVzcGFjZSk7XG4gICAgICBpZiAoIWJhc2VJbmZvIHx8IHJlc29sdmluZy5oYXMoYmFzZUluZm8pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICByZXNvbHZlKGJhc2VJbmZvKTtcblxuICAgICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHBhcnNlVHlwZUFyZ3VtZW50cyhiYXNlVHlwZU5hbWUpO1xuICAgICAgY29uc3QgdHlwZVBhcmFtZXRlck1hcCA9IGJ1aWxkVHlwZVBhcmFtZXRlck1hcChiYXNlSW5mbywgdHlwZUFyZ3VtZW50cyk7XG5cbiAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgYmFzZUluZm8ucHJvcGVydGllcykge1xuICAgICAgICBpZiAoaW5mby5wcm9wZXJ0aWVzLmV2ZXJ5KChwKSA9PiBwLm5hbWUgIT09IHByb3BlcnR5Lm5hbWUpKSB7XG4gICAgICAgICAgaW5mby5wcm9wZXJ0aWVzLnB1c2goc3Vic3RpdHV0ZU1lbWJlclR5cGVzKHsgLi4ucHJvcGVydHksIGluaGVyaXRlZEZyb206IGJhc2VJbmZvLm5hbWUgfSwgdHlwZVBhcmFtZXRlck1hcCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGJhc2VJbmZvLm1ldGhvZHMpIHtcbiAgICAgICAgY29uc3QgaW5oZXJpdGVkTWV0aG9kID0gc3Vic3RpdHV0ZU1lbWJlclR5cGVzKHsgLi4ubWV0aG9kLCBpbmhlcml0ZWRGcm9tOiBiYXNlSW5mby5uYW1lIH0sIHR5cGVQYXJhbWV0ZXJNYXApO1xuICAgICAgICBjb25zdCBoYXNNZXRob2QgPSBpbmZvLm1ldGhvZHMuc29tZSgobSkgPT4gbS5uYW1lID09PSBpbmhlcml0ZWRNZXRob2QubmFtZSAmJiBtLnNpZ25hdHVyZSA9PT0gaW5oZXJpdGVkTWV0aG9kLnNpZ25hdHVyZSk7XG4gICAgICAgIGlmICghaGFzTWV0aG9kKSB7XG4gICAgICAgICAgaW5mby5tZXRob2RzLnB1c2goaW5oZXJpdGVkTWV0aG9kKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXNvbHZpbmcuZGVsZXRlKGluZm8pO1xuICAgIHJlc29sdmVkLmFkZChpbmZvKTtcbiAgfVxufVxuXG4vKipcbiAqIEFwcGx5IHR5cGUgcGFyYW1ldGVyIHN1YnN0aXR1dGlvbiB0byBhbGwgdHlwZS1iZWFyaW5nIGZpZWxkcyBvZiBhIG1lbWJlclxuICpcbiAqIEBwYXJhbSBtZW1iZXIgLSBUaGUgbWVtYmVyLlxuICogQHBhcmFtIG1hcHBpbmcgLSBUeXBlIHBhcmFtZXRlciBuYW1lcyBtYXBwZWQgdG8gdGhlaXIgYXJndW1lbnRzLlxuICogQHJldHVybnMgVGhlIG1lbWJlciB3aXRoIGl0cyB0eXBlcyBzdWJzdGl0dXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0aXR1dGVNZW1iZXJUeXBlcyhtZW1iZXI6IE1lbWJlckluZm8sIG1hcHBpbmc6IE1hcDxzdHJpbmcsIHN0cmluZz4pOiBNZW1iZXJJbmZvIHtcbiAgcmV0dXJuIG1hcHBpbmcuc2l6ZSA9PT0gMFxuICAgID8gbWVtYmVyXG4gICAgOiB7XG4gICAgICAuLi5tZW1iZXIsXG4gICAgICBwYXJhbWV0ZXJzOiBtZW1iZXIucGFyYW1ldGVycy5tYXAoKHApID0+ICh7XG4gICAgICAgIC4uLnAsXG4gICAgICAgIHR5cGU6IHN1YnN0aXR1dGVUeXBlUGFyYW1zKHAudHlwZSwgbWFwcGluZylcbiAgICAgIH0pKSxcbiAgICAgIHJldHVyblR5cGU6IHN1YnN0aXR1dGVUeXBlUGFyYW1zKG1lbWJlci5yZXR1cm5UeXBlLCBtYXBwaW5nKSxcbiAgICAgIHNpZ25hdHVyZTogc3Vic3RpdHV0ZVR5cGVQYXJhbXMobWVtYmVyLnNpZ25hdHVyZSwgbWFwcGluZyksXG4gICAgICB0eXBlOiBzdWJzdGl0dXRlVHlwZVBhcmFtcyhtZW1iZXIudHlwZSwgbWFwcGluZylcbiAgICB9O1xufVxuXG4vKipcbiAqIFN1YnN0aXR1dGUgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcnMgaW4gYSB0eXBlIHN0cmluZyB1c2luZyBhIG1hcHBpbmdcbiAqXG4gKiBAcGFyYW0gdHlwZVRleHQgLSBUaGUgdHlwZSB0ZXh0LlxuICogQHBhcmFtIG1hcHBpbmcgLSBUeXBlIHBhcmFtZXRlciBuYW1lcyBtYXBwZWQgdG8gdGhlaXIgYXJndW1lbnRzLlxuICogQHJldHVybnMgVGhlIHN1YnN0aXR1dGVkIHR5cGUgdGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0aXR1dGVUeXBlUGFyYW1zKHR5cGVUZXh0OiBzdHJpbmcsIG1hcHBpbmc6IE1hcDxzdHJpbmcsIHN0cmluZz4pOiBzdHJpbmcge1xuICByZXR1cm4gbWFwcGluZy5zaXplID09PSAwXG4gICAgPyB0eXBlVGV4dFxuICAgIDogdHlwZVRleHQucmVwbGFjZUFsbCgvXFxiKD88dHlwZU5hbWU+W2EtekEtWl1bYS16QS1aMC05XSopXFxiL2csIChtYXRjaCkgPT4ge1xuICAgICAgcmV0dXJuIG1hcHBpbmcuZ2V0KG1hdGNoKSA/PyBtYXRjaDtcbiAgICB9KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTQSxTQUFTLHlCQUF5QjtBQU9sQyxTQUFTLGdCQUFnQjtBQVdsQixTQUFTLHNCQUFzQixVQUFvQixlQUE4QztBQUN0RyxRQUFNLFVBQVUsb0JBQUksSUFBb0I7QUFDeEMsUUFBTSxRQUFRLEtBQUssSUFBSSxTQUFTLGVBQWUsUUFBUSxjQUFjLE1BQU07QUFDM0UsV0FBUyxRQUFRLEdBQUcsUUFBUSxPQUFPLFNBQVM7QUFFMUMsVUFBTSxZQUFZLGtCQUFrQixTQUFTLGVBQWUsS0FBSyxDQUFDO0FBQ2xFLFVBQU0sV0FBVyxrQkFBa0IsY0FBYyxLQUFLLENBQUM7QUFDdkQsVUFBTSxnQkFBZ0IsVUFBVSxRQUFRLG9CQUFvQixFQUFFO0FBQzlELFlBQVEsSUFBSSxlQUFlLFFBQVE7QUFBQSxFQUNyQztBQUNBLFNBQU87QUFDVDtBQVVPLFNBQVMsbUJBQW1CLGNBQWdDO0FBQ2pFLFFBQU0sWUFBWSxhQUFhLFFBQVEsR0FBRztBQUMxQyxNQUFJLGNBQWMsSUFBSTtBQUNwQixXQUFPLENBQUM7QUFBQSxFQUNWO0FBQ0EsUUFBTSxRQUFRLGFBQWEsTUFBTSxZQUFZLEdBQUcsRUFBRTtBQUNsRCxRQUFNLGFBQXVCLENBQUM7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
|
|
@@ -53,6 +53,13 @@ export interface PublishGitHubReleaseOptions {
|
|
|
53
53
|
* @default `true`
|
|
54
54
|
*/
|
|
55
55
|
readonly shouldCloseReleasedIssues?: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Whether to require every asset to exist, require an existing remote tag, and verify the published
|
|
58
|
+
* non-draft release and its uploaded assets before closing issues.
|
|
59
|
+
*
|
|
60
|
+
* @default `false`
|
|
61
|
+
*/
|
|
62
|
+
readonly shouldVerifyRelease?: boolean;
|
|
56
63
|
}
|
|
57
64
|
/**
|
|
58
65
|
* Options for {@link updateChangelog}.
|
|
@@ -133,6 +140,16 @@ export interface UpdateVersionOptions {
|
|
|
133
140
|
* @default `true`
|
|
134
141
|
*/
|
|
135
142
|
readonly shouldEditChangelog?: boolean;
|
|
143
|
+
/**
|
|
144
|
+
* Whether to publish and verify the GitHub release before pushing the version commit to the branch.
|
|
145
|
+
* Preparation and asset validation happen before any push. Only the release tag is pushed first;
|
|
146
|
+
* a failed preparation, publication or verification leaves the remote branch unchanged.
|
|
147
|
+
* Uses the `origin` remote and pushes the verified commit to the original branch without force.
|
|
148
|
+
* Ignored when {@link shouldRelease} is `false`.
|
|
149
|
+
*
|
|
150
|
+
* @default `false`
|
|
151
|
+
*/
|
|
152
|
+
readonly shouldPublishBeforePush?: boolean;
|
|
136
153
|
/**
|
|
137
154
|
* Whether to publish the release. When `false`, all local steps are executed (version bump,
|
|
138
155
|
* changelog, commit, tag), but the changes are not pushed and no GitHub release is published.
|
|
@@ -431,6 +448,9 @@ export declare function updateChangelog(newVersion: string, options?: UpdateChan
|
|
|
431
448
|
* 11. Prepares and publishes a GitHub release.
|
|
432
449
|
* 12. Closes the issues the release carries, with a link to it.
|
|
433
450
|
*
|
|
451
|
+
* With {@link UpdateVersionOptions.shouldPublishBeforePush}, preparation and asset validation precede
|
|
452
|
+
* the tag push. Publication and verification then precede the branch push, and issue closing remains last.
|
|
453
|
+
*
|
|
434
454
|
* @param versionUpdateType - The type of version update to perform (major, minor, patch, premajor, preminor, prepatch, prerelease, or x.y.z[-suffix]).
|
|
435
455
|
* @param options - The {@link UpdateVersionOptions} controlling the release behavior.
|
|
436
456
|
* @returns A {@link Promise} that resolves when the version update is complete.
|