@workflow/core 5.0.0-beta.19 → 5.0.0-beta.20
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/dist/create-hook.d.ts +3 -1
- package/dist/create-hook.d.ts.map +1 -1
- package/dist/create-hook.js +1 -1
- package/dist/events-consumer.d.ts +9 -0
- package/dist/events-consumer.d.ts.map +1 -1
- package/dist/events-consumer.js +56 -18
- package/dist/private.d.ts +12 -0
- package/dist/private.d.ts.map +1 -1
- package/dist/private.js +13 -1
- package/dist/runtime/constants.d.ts +45 -0
- package/dist/runtime/constants.d.ts.map +1 -1
- package/dist/runtime/constants.js +79 -1
- package/dist/runtime/get-port-lazy.d.ts +15 -0
- package/dist/runtime/get-port-lazy.d.ts.map +1 -1
- package/dist/runtime/get-port-lazy.js +64 -2
- package/dist/runtime/run-id-time.d.ts +10 -0
- package/dist/runtime/run-id-time.d.ts.map +1 -0
- package/dist/runtime/run-id-time.js +31 -0
- package/dist/runtime/step-executor.d.ts +44 -1
- package/dist/runtime/step-executor.d.ts.map +1 -1
- package/dist/runtime/step-executor.js +171 -23
- package/dist/runtime/step-handler.js +8 -8
- package/dist/runtime/suspension-handler.d.ts +19 -1
- package/dist/runtime/suspension-handler.d.ts.map +1 -1
- package/dist/runtime/suspension-handler.js +47 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +339 -79
- package/dist/source-map.d.ts +5 -0
- package/dist/source-map.d.ts.map +1 -1
- package/dist/source-map.js +61 -7
- package/dist/telemetry.d.ts +9 -6
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +12 -15
- package/dist/version.d.ts +1 -1
- package/dist/version.js +2 -2
- package/dist/vm/script-cache.d.ts +28 -0
- package/dist/vm/script-cache.d.ts.map +1 -0
- package/dist/vm/script-cache.js +140 -0
- package/dist/workflow/hook.d.ts.map +1 -1
- package/dist/workflow/hook.js +10 -1
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +45 -9
- package/package.json +4 -4
package/dist/workflow/hook.js
CHANGED
|
@@ -40,6 +40,15 @@ function createConflictingRun(ctx, conflictingRunId) {
|
|
|
40
40
|
}
|
|
41
41
|
export function createCreateHook(ctx) {
|
|
42
42
|
return function createHookImpl(options = {}) {
|
|
43
|
+
// Reject an explicit empty-string token. A token must either be omitted
|
|
44
|
+
// (or `undefined`/`null`) to get a randomly generated one, or be an
|
|
45
|
+
// explicit non-empty string. An empty string is almost always an
|
|
46
|
+
// accidental value (e.g. an unset variable) and would otherwise slip
|
|
47
|
+
// through the `??` below — which only falls back for nullish values — and
|
|
48
|
+
// be used as a meaningless, non-deterministic token.
|
|
49
|
+
if (options.token === '') {
|
|
50
|
+
throw new Error('`createHook()` was called with an empty string token. Pass a non-empty token, or omit the `token` option to use a randomly generated one.');
|
|
51
|
+
}
|
|
43
52
|
// Generate hook ID and token
|
|
44
53
|
const correlationId = `hook_${ctx.generateUlid()}`;
|
|
45
54
|
const token = options.token ?? ctx.generateNanoid();
|
|
@@ -378,4 +387,4 @@ export function createCreateHook(ctx) {
|
|
|
378
387
|
return hook;
|
|
379
388
|
};
|
|
380
389
|
}
|
|
381
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3JrZmxvdy9ob29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVFLE9BQU8sRUFBNkIsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDdkIsZ0JBQWdCLEdBRWpCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVoRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3RDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILFNBQVMsb0JBQW9CLENBQzNCLEdBQWdDLEVBQ2hDLGdCQUFvQztJQUVwQyxJQUFJLE9BQU8sZ0JBQWdCLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcscUJBQXFCLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBSXRELENBQUM7SUFDZCxNQUFNLFdBQVcsR0FBSSxRQUFnQixFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUM5RCxJQUFJLE9BQU8sV0FBVyxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELE9B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M0IsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUNuQixNQUFNLE1BQU0sSUFBSSxDQUFDO2dCQUNuQixDQUFDO1lBQ0gsQ0FBQztZQUVELE9BQU8sRUFBRSxXQUFXO1lBRXBCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFdBQVc7U0FDOUIsQ0FBQztRQUVGLHFFQUFxRTtRQUNyRSxvRUFBb0U7UUFDcEUsaUNBQWlDO1FBQ2pDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUNoRCxJQUFJLFNBQVMsSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzdDLElBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDekMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhvb2tDb25mbGljdEVycm9yLCBSZXBsYXlEaXZlcmdlbmNlRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IHR5cGUgUHJvbWlzZVdpdGhSZXNvbHZlcnMsIHdpdGhSZXNvbHZlcnMgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBIb29rQ29uZmxpY3RFdmVudCB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgdHlwZSB7IEhvb2ssIEhvb2tPcHRpb25zIH0gZnJvbSAnLi4vY3JlYXRlLWhvb2suanMnO1xuaW1wb3J0IHsgRXZlbnRDb25zdW1lclJlc3VsdCB9IGZyb20gJy4uL2V2ZW50cy1jb25zdW1lci5qcyc7XG5pbXBvcnQgeyBXb3JrZmxvd1N1c3BlbnNpb24gfSBmcm9tICcuLi9nbG9iYWwuanMnO1xuaW1wb3J0IHsgd2ViaG9va0xvZ2dlciB9IGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQge1xuICBhd2FpdEVhcmxpZXJEZWxpdmVyaWVzLFxuICByZWdpc3RlckRlbGl2ZXJ5QmFycmllcixcbiAgc2NoZWR1bGVXaGVuSWRsZSxcbiAgdHlwZSBXb3JrZmxvd09yY2hlc3RyYXRvckNvbnRleHQsXG59IGZyb20gJy4uL3ByaXZhdGUuanMnO1xuaW1wb3J0IHsgV09SS0ZMT1dfREVTRVJJQUxJWkUgfSBmcm9tICdAd29ya2Zsb3cvc2VyZGUnO1xuaW1wb3J0IHsgZ2V0U2VyaWFsaXphdGlvbkNsYXNzLCBSVU5fQ0xBU1NfSUQgfSBmcm9tICcuLi9jbGFzcy1zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgUnVuIH0gZnJvbSAnLi4vcnVudGltZS9ydW4uanMnO1xuaW1wb3J0IHsgaHlkcmF0ZVN0ZXBSZXR1cm5WYWx1ZSB9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24uanMnO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBgUnVuYCBoYW5kbGUgZm9yIHRoZSBydW4gdGhhdCBvd25zIGEgY29uZmxpY3RpbmcgaG9va1xuICogdG9rZW4sIGZvciByZXNvbHV0aW9uIHRocm91Z2ggYGhvb2suZ2V0Q29uZmxpY3QoKWAuXG4gKlxuICogVGhlIGluc3RhbmNlIGlzIGNyZWF0ZWQgdGhyb3VnaCB0aGUgc2VyaWFsaXphdGlvbiBjbGFzcyByZWdpc3RyeSBvblxuICogdGhlIFZNJ3MgZ2xvYmFsVGhpcyDigJQgdGhlIHNhbWUgY2hhbm5lbCB0aGF0IHJldml2ZXMgc2VyaWFsaXplZCBgUnVuYFxuICogaW5zdGFuY2VzIChlLmcuIGBzdGFydCgpYCByZXR1cm4gdmFsdWVzIGNyb3NzaW5nIGZyb20gYSBzdGVwIGludG8gdGhlXG4gKiB3b3JrZmxvdykuIFRoZSByZWdpc3RlcmVkIGNsYXNzIGlzIHRoZSBWTSBidW5kbGUncyBwbHVnaW4tY29tcGlsZWRcbiAqIGBSdW5gLCB3aG9zZSBtZXRob2RzIGFyZSBkdXJhYmxlIHN0ZXAgcHJveGllcyDigJQgc2FmZSB0byBjYWxsIGZyb21cbiAqIHdvcmtmbG93IGNvZGUg4oCUIGFuZCBjb25zdHJ1Y3Rpb24gZ29lcyB0aHJvdWdoIGl0c1xuICogYFdPUktGTE9XX0RFU0VSSUFMSVpFYCBob29rLCBleGFjdGx5IGFzIHRoZSBgSW5zdGFuY2VgIHJldml2ZXIgd291bGQuXG4gKlxuICogUmV0dXJucyBgbnVsbGAgd2hlbiBhIHJlYWwgYFJ1bmAgY2Fubm90IGJlIGNvbnN0cnVjdGVkOiB0aGUgY29uZmxpY3RcbiAqIGV2ZW50IGxhY2tzIGBjb25mbGljdGluZ1J1bklkYCAod3JpdHRlbiBieSBhbiBvbGQgd29ybGQpLCBvciB0aGUgVk0nc1xuICogcmVnaXN0cnkgaGFzIG5vIGBSdW5gIChhIGNvbnRleHQgdGhhdCBuZXZlciBldmFsdWF0ZWQgdGhlXG4gKiB3b3JrZmxvdy1tb2RlIGBjcmVhdGUtaG9va2AgbW9kdWxlLCB3aGljaCBhbGlhc2VzIGl0IHVuZGVyXG4gKiBgUlVOX0NMQVNTX0lEYCkuIGBnZXRDb25mbGljdGAgYXdhaXRlcnMgdGhlbiByZWplY3Qgd2l0aFxuICogYEhvb2tDb25mbGljdEVycm9yYCBpbnN0ZWFkIG9mIHJlc29sdmluZyB3aXRoIGEgdmFsdWUgdGhhdCBkb2Vzbid0XG4gKiBob25vciB0aGUgYFJ1bmAgY29udHJhY3QuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNvbmZsaWN0aW5nUnVuKFxuICBjdHg6IFdvcmtmbG93T3JjaGVzdHJhdG9yQ29udGV4dCxcbiAgY29uZmxpY3RpbmdSdW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBSdW48dW5rbm93bj4gfCBudWxsIHtcbiAgaWYgKHR5cGVvZiBjb25mbGljdGluZ1J1bklkICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IFJ1bkNsYXNzID0gZ2V0U2VyaWFsaXphdGlvbkNsYXNzKFJVTl9DTEFTU19JRCwgY3R4Lmdsb2JhbFRoaXMpIGFzXG4gICAgfCAoYWJzdHJhY3QgbmV3IChcbiAgICAgICAgLi4uYXJnczogbmV2ZXJcbiAgICAgICkgPT4gUnVuPHVua25vd24+KVxuICAgIHwgdW5kZWZpbmVkO1xuICBjb25zdCBkZXNlcmlhbGl6ZSA9IChSdW5DbGFzcyBhcyBhbnkpPy5bV09SS0ZMT1dfREVTRVJJQUxJWkVdO1xuICBpZiAodHlwZW9mIGRlc2VyaWFsaXplICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGRlc2VyaWFsaXplLmNhbGwoUnVuQ2xhc3MsIHsgcnVuSWQ6IGNvbmZsaWN0aW5nUnVuSWQgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDcmVhdGVIb29rKGN0eDogV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVIb29rSW1wbDxUID0gYW55PihvcHRpb25zOiBIb29rT3B0aW9ucyA9IHt9KTogSG9vazxUPiB7XG4gICAgLy8gR2VuZXJhdGUgaG9vayBJRCBhbmQgdG9rZW5cbiAgICBjb25zdCBjb3JyZWxhdGlvbklkID0gYGhvb2tfJHtjdHguZ2VuZXJhdGVVbGlkKCl9YDtcbiAgICBjb25zdCB0b2tlbiA9IG9wdGlvbnMudG9rZW4gPz8gY3R4LmdlbmVyYXRlTmFub2lkKCk7XG5cbiAgICAvLyBBZGQgaG9vayBjcmVhdGlvbiB0byBpbnZvY2F0aW9ucyBxdWV1ZSAodXNpbmcgTWFwIGZvciBPKDEpIG9wZXJhdGlvbnMpXG4gICAgY29uc3QgaXNXZWJob29rID0gb3B0aW9ucy5pc1dlYmhvb2sgPz8gZmFsc2U7XG5cbiAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5zZXQoY29ycmVsYXRpb25JZCwge1xuICAgICAgdHlwZTogJ2hvb2snLFxuICAgICAgY29ycmVsYXRpb25JZCxcbiAgICAgIHRva2VuLFxuICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgICBpc1dlYmhvb2ssXG4gICAgfSk7XG5cbiAgICAvLyBRdWV1ZSBvZiBidWZmZXJlZCBob29rIHBheWxvYWRzIChyZWNlaXZlZCBiZWZvcmUgdGhlIHdvcmtmbG93IGF3YWl0ZWRcbiAgICAvLyB0aGUgaG9vaykuIEVhY2ggZW50cnkncyBgY2xhaW0oKWAgYnVpbGRzIHRoZSBjb25zdW1lci1mYWNpbmcgcHJvbWlzZVxuICAgIC8vIGZyb20gdGhlIGNhcHR1cmVkIGh5ZHJhdGlvbiBvdXRjb21lIGFuZCBvcmRlcnMgaXQgZGV0ZXJtaW5pc3RpY2FsbHkgYnlcbiAgICAvLyBldmVudC1sb2cgcG9zaXRpb24gYWdhaW5zdCBhbnkgY29uY3VycmVudCBicmFuY2gtZGVjaWRpbmcgcmVzb2x1dGlvblxuICAgIC8vIChzZWUgYGN0eC5wZW5kaW5nRGVsaXZlcnlCYXJyaWVyc2ApLlxuICAgIGNvbnN0IHBheWxvYWRzUXVldWU6IHsgY2xhaW06ICgpID0+IFByb21pc2U8VD4gfVtdID0gW107XG5cbiAgICAvLyBRdWV1ZSBvZiBwcm9taXNlcyB0aGF0IHJlc29sdmUgdG8gdGhlIG5leHQgaG9vayBwYXlsb2FkXG4gICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2VXaXRoUmVzb2x2ZXJzPFQ+W10gPSBbXTtcblxuICAgIC8vIFF1ZXVlIG9mIHByb21pc2VzIHRoYXQgcmVzb2x2ZSBvbmNlIGhvb2sgcmVnaXN0cmF0aW9uIGlzIGNvbmZpcm1lZFxuICAgIC8vICh3aXRoIGBudWxsYCkgb3IgYSB0b2tlbiBjb25mbGljdCBpcyBkZXRlY3RlZCAod2l0aCB0aGUgY29uZmxpY3RpbmdcbiAgICAvLyBgUnVuYCkuIFRoZXNlIGJhY2sgdGhlIGBob29rLmdldENvbmZsaWN0KClgIGdldHRlci5cbiAgICBjb25zdCBnZXRDb25mbGljdFByb21pc2VzOiBQcm9taXNlV2l0aFJlc29sdmVyczxSdW48dW5rbm93bj4gfCBudWxsPltdID0gW107XG5cbiAgICBsZXQgZXZlbnRMb2dFbXB0eSA9IGZhbHNlO1xuXG4gICAgLy8gVHJhY2sgaWYgdGhlIGV2ZW50IGxvZyBjb25maXJtcyBob29rIGNyZWF0aW9uIGhhcHBlbmVkXG4gICAgbGV0IGhhc0NyZWF0ZWQgPSBmYWxzZTtcblxuICAgIC8vIFRyYWNrIGlmIHRoZSBldmVudCBsb2cgY29uZmlybXMgZGlzcG9zYWwgaGFwcGVuZWQgKHJlcGxheSBuby1vcClcbiAgICBsZXQgaGFzRGlzcG9zZWRFdmVudCA9IGZhbHNlO1xuXG4gICAgLy8gVHJhY2sgaWYgd2UgaGF2ZSBhIGNvbmZsaWN0IHNvIHdlIGNhbiByZWplY3QgZnV0dXJlIGF3YWl0c1xuICAgIGxldCBoYXNDb25mbGljdCA9IGZhbHNlO1xuICAgIGxldCBjb25mbGljdEVycm9yUmVmOiBIb29rQ29uZmxpY3RFcnJvciB8IG51bGwgPSBudWxsO1xuICAgIC8vIFRoZSBjb25mbGljdGluZyBydW4gaGFuZGxlLCBzaGFyZWQgYnkgZXZlcnkgYGdldENvbmZsaWN0YCBhd2FpdCBzb1xuICAgIC8vIHJlcGVhdGVkIGF3YWl0cyBvYnNlcnZlIHRoZSBzYW1lIGluc3RhbmNlIGRldGVybWluaXN0aWNhbGx5LlxuICAgIGxldCBjb25mbGljdFJ1blJlZjogUnVuPHVua25vd24+IHwgbnVsbCA9IG51bGw7XG5cbiAgICB3ZWJob29rTG9nZ2VyLmRlYnVnKCdIb29rIGNvbnN1bWVyIHNldHVwJywgeyBjb3JyZWxhdGlvbklkLCB0b2tlbiB9KTtcbiAgICBjdHguZXZlbnRzQ29uc3VtZXIuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGV2ZW50cyBhbmQgdGhlcmUgYXJlIHByb21pc2VzIHdhaXRpbmcsXG4gICAgICAvLyBpdCBtZWFucyB0aGUgaG9vayBoYXMgYmVlbiBhd2FpdGVkLCBidXQgYW4gaW5jb21pbmcgcGF5bG9hZCBoYXMgbm90IHlldCBiZWVuIHJlY2VpdmVkLlxuICAgICAgLy8gSW4gdGhpcyBjYXNlLCB0aGUgd29ya2Zsb3cgc2hvdWxkIGJlIHN1c3BlbmRlZCB1bnRpbCB0aGUgaG9vayBpcyByZXN1bWVkLlxuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICBldmVudExvZ0VtcHR5ID0gdHJ1ZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgKHByb21pc2VzLmxlbmd0aCA+IDAgJiYgcGF5bG9hZHNRdWV1ZS5sZW5ndGggPT09IDApIHx8XG4gICAgICAgICAgKGdldENvbmZsaWN0UHJvbWlzZXMubGVuZ3RoID4gMCAmJiAhaGFzQ3JlYXRlZCAmJiAhaGFzQ29uZmxpY3QpXG4gICAgICAgICkge1xuICAgICAgICAgIHNjaGVkdWxlV2hlbklkbGUoY3R4LCAoKSA9PiB7XG4gICAgICAgICAgICBjdHgub25Xb3JrZmxvd0Vycm9yKFxuICAgICAgICAgICAgICBuZXcgV29ya2Zsb3dTdXNwZW5zaW9uKGN0eC5pbnZvY2F0aW9uc1F1ZXVlLCBjdHguZ2xvYmFsVGhpcylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuTm90Q29uc3VtZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5jb3JyZWxhdGlvbklkICE9PSBjb3JyZWxhdGlvbklkKSB7XG4gICAgICAgIC8vIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIHRoaXMgZXZlbnQgLSB0aGUgY29ycmVsYXRpb25JZCBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IGVudGl0eVxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXZlbnRUb2tlbiA9XG4gICAgICAgICdldmVudERhdGEnIGluIGV2ZW50ICYmIGV2ZW50LmV2ZW50RGF0YSAmJiAndG9rZW4nIGluIGV2ZW50LmV2ZW50RGF0YVxuICAgICAgICAgID8gZXZlbnQuZXZlbnREYXRhLnRva2VuXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh0eXBlb2YgZXZlbnRUb2tlbiA9PT0gJ3N0cmluZycgJiYgZXZlbnRUb2tlbiAhPT0gdG9rZW4pIHtcbiAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgIG5ldyBSZXBsYXlEaXZlcmdlbmNlRXJyb3IoXG4gICAgICAgICAgICAgIGBSZXBsYXkgZGl2ZXJnZW5jZTogaG9vayBldmVudCAke2V2ZW50LmV2ZW50VHlwZX0gZm9yICR7Y29ycmVsYXRpb25JZH0gYmVsb25ncyB0byB0b2tlbiBcIiR7ZXZlbnRUb2tlbn1cIiwgYnV0IHRoZSBjdXJyZW50IGhvb2sgY29uc3VtZXIgZXhwZWN0cyBcIiR7dG9rZW59XCJgLFxuICAgICAgICAgICAgICB7IGV2ZW50SWQ6IGV2ZW50LmV2ZW50SWQgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGhvb2tfY3JlYXRlZCBldmVudCB0byBtYXJrIHRoaXMgaG9vayBhcyBhbHJlYWR5IGNyZWF0ZWRcbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdob29rX2NyZWF0ZWQnKSB7XG4gICAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmdldChjb3JyZWxhdGlvbklkKTtcbiAgICAgICAgaWYgKHF1ZXVlSXRlbSAmJiBxdWV1ZUl0ZW0udHlwZSA9PT0gJ2hvb2snKSB7XG4gICAgICAgICAgcXVldWVJdGVtLmhhc0NyZWF0ZWRFdmVudCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaGFzQ3JlYXRlZCA9IHRydWU7XG5cbiAgICAgICAgY29uc3QgcGVuZGluZ0dldENvbmZsaWN0UHJvbWlzZXMgPSBnZXRDb25mbGljdFByb21pc2VzLnNsaWNlKCk7XG4gICAgICAgIGdldENvbmZsaWN0UHJvbWlzZXMubGVuZ3RoID0gMDtcbiAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCByZXNvbHZlciBvZiBwZW5kaW5nR2V0Q29uZmxpY3RQcm9taXNlcykge1xuICAgICAgICAgICAgcmVzb2x2ZXIucmVzb2x2ZShudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkO1xuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgaG9va19jb25mbGljdCBldmVudCAtIGFub3RoZXIgd29ya2Zsb3cgaXMgdXNpbmcgdGhpcyB0b2tlblxuICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ2hvb2tfY29uZmxpY3QnKSB7XG4gICAgICAgIC8vIFJlbW92ZSB0aGlzIGhvb2sgZnJvbSB0aGUgaW52b2NhdGlvbnMgcXVldWVcbiAgICAgICAgY3R4Lmludm9jYXRpb25zUXVldWUuZGVsZXRlKGNvcnJlbGF0aW9uSWQpO1xuXG4gICAgICAgIC8vIFN0b3JlIHRoZSBjb25mbGljdCBldmVudCBzbyB3ZSBjYW4gcmVqZWN0IGFueSBhd2FpdGVkIHByb21pc2VzLlxuICAgICAgICAvLyBDaGFpbiB0aHJvdWdoIHByb21pc2VRdWV1ZSB0byBlbnN1cmUgZGV0ZXJtaW5pc3RpYyBvcmRlcmluZy5cbiAgICAgICAgY29uc3QgY29uZmxpY3RFdmVudCA9IGV2ZW50IGFzIEhvb2tDb25mbGljdEV2ZW50O1xuICAgICAgICBjb25zdCBjb25mbGljdEVycm9yID0gbmV3IEhvb2tDb25mbGljdEVycm9yKFxuICAgICAgICAgIGNvbmZsaWN0RXZlbnQuZXZlbnREYXRhLnRva2VuLFxuICAgICAgICAgIGNvbmZsaWN0RXZlbnQuZXZlbnREYXRhLmNvbmZsaWN0aW5nUnVuSWRcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBNYXJrIHRoYXQgd2UgaGF2ZSBhIGNvbmZsaWN0IHNvIGZ1dHVyZSBhd2FpdHMgYWxzbyByZWplY3RcbiAgICAgICAgaGFzQ29uZmxpY3QgPSB0cnVlO1xuICAgICAgICBjb25mbGljdEVycm9yUmVmID0gY29uZmxpY3RFcnJvcjtcbiAgICAgICAgY29uZmxpY3RSdW5SZWYgPSBjcmVhdGVDb25mbGljdGluZ1J1bihcbiAgICAgICAgICBjdHgsXG4gICAgICAgICAgY29uZmxpY3RFdmVudC5ldmVudERhdGEuY29uZmxpY3RpbmdSdW5JZFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIENhcHR1cmUgYW5kIGRyYWluIHBlbmRpbmcgcHJvbWlzZXMgc3luY2hyb25vdXNseSBzbyB0aGUgbnVsbCBldmVudFxuICAgICAgICAvLyBoYW5kbGVyIHdvbid0IHNlZSB0aGVtIGFuZCB0cmlnZ2VyIGEgc3B1cmlvdXMgV29ya2Zsb3dTdXNwZW5zaW9uLlxuICAgICAgICAvLyBUaGUgYWN0dWFsIHNldHRsZW1lbnRzIGFyZSBkZWZlcnJlZCB0aHJvdWdoIHByb21pc2VRdWV1ZSBmb3JcbiAgICAgICAgLy8gb3JkZXJpbmcuIFBheWxvYWQgYXdhaXRlcnMgcmVqZWN0IHdpdGggSG9va0NvbmZsaWN0RXJyb3IsIHdoaWxlXG4gICAgICAgIC8vIGBnZXRDb25mbGljdGAgYXdhaXRlcnMgcmVzb2x2ZSB3aXRoIHRoZSBjb25mbGljdGluZyBydW4gc28gdGhlXG4gICAgICAgIC8vIHdvcmtmbG93IGNhbiBicmFuY2ggb24gdGhlIGNvbmZsaWN0IHdpdGhvdXQgdGhyb3dpbmcuIFdoZW4gbm9cbiAgICAgICAgLy8gcmVhbCBgUnVuYCBjYW4gYmUgY29uc3RydWN0ZWQgKHNlZSBgY3JlYXRlQ29uZmxpY3RpbmdSdW5gKSxcbiAgICAgICAgLy8gYGdldENvbmZsaWN0YCBhd2FpdGVycyByZWplY3Qgd2l0aCB0aGUgSG9va0NvbmZsaWN0RXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBvZiByZXNvbHZpbmcgd2l0aCBhIHZhbHVlIHRoYXQgZG9lc24ndCBob25vciB0aGUgYFJ1bmAgY29udHJhY3QuXG4gICAgICAgIGNvbnN0IHBlbmRpbmdQcm9taXNlcyA9IHByb21pc2VzLnNsaWNlKCk7XG4gICAgICAgIHByb21pc2VzLmxlbmd0aCA9IDA7XG4gICAgICAgIGNvbnN0IHBlbmRpbmdHZXRDb25mbGljdFByb21pc2VzID0gZ2V0Q29uZmxpY3RQcm9taXNlcy5zbGljZSgpO1xuICAgICAgICBnZXRDb25mbGljdFByb21pc2VzLmxlbmd0aCA9IDA7XG5cbiAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCByZXNvbHZlciBvZiBwZW5kaW5nUHJvbWlzZXMpIHtcbiAgICAgICAgICAgIHJlc29sdmVyLnJlamVjdChjb25mbGljdEVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChjb25zdCByZXNvbHZlciBvZiBwZW5kaW5nR2V0Q29uZmxpY3RQcm9taXNlcykge1xuICAgICAgICAgICAgaWYgKGNvbmZsaWN0UnVuUmVmKSB7XG4gICAgICAgICAgICAgIHJlc29sdmVyLnJlc29sdmUoY29uZmxpY3RSdW5SZWYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZXIucmVqZWN0KGNvbmZsaWN0RXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuQ29uc3VtZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdob29rX3JlY2VpdmVkJykge1xuICAgICAgICAvLyBSZWdpc3RlciBhICdob29rJyBkZWxpdmVyeSBiYXJyaWVyIGF0IHRoaXMgZXZlbnQncyBsb2cgaW5kZXggc28gYVxuICAgICAgICAvLyBsYXRlci1pbi1sb2cgYHdhaXRfY29tcGxldGVkYCBpcyBkZWxpdmVyZWQgb25seSBhZnRlciB0aGlzIGhvb2ssXG4gICAgICAgIC8vIGFuZCBzbyB0aGlzIGhvb2sgaXMgZGVsaXZlcmVkIG9ubHkgYWZ0ZXIgZXZlcnkgZWFybGllci1pbi1sb2dcbiAgICAgICAgLy8gYHdhaXRfY29tcGxldGVkYCDigJQga2VlcGluZyBhbnkgYFByb21pc2UucmFjZWAgYWdhaW5zdCBhIHdhaXRcbiAgICAgICAgLy8gZGV0ZXJtaW5pc3RpYyBhbmQgYWxpZ25lZCB3aXRoIHRoZSBjb21taXR0ZWQgZXZlbnQgbG9nLCByZWdhcmRsZXNzXG4gICAgICAgIC8vIG9mIG1pY3JvdGFzay1ob3AgY291bnQsIGh5ZHJhdGlvbiB0aW1lLCBvciByYWNlLWFyZ3VtZW50IG9yZGVyLlxuICAgICAgICAvLyBTZWUgYGN0eC5wZW5kaW5nRGVsaXZlcnlCYXJyaWVyc2AuXG4gICAgICAgIGNvbnN0IGV2ZW50SW5kZXggPSBjdHguZXZlbnRzQ29uc3VtZXIuZXZlbnRJbmRleDtcbiAgICAgICAgY29uc3QgYmFycmllciA9IHJlZ2lzdGVyRGVsaXZlcnlCYXJyaWVyKGN0eCwgZXZlbnRJbmRleCwgJ2hvb2snKTtcblxuICAgICAgICBpZiAocHJvbWlzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBwcm9taXNlcy5zaGlmdCgpO1xuICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAvLyBBIGNvbnN1bWVyIGlzIGFscmVhZHkgYXdhaXRpbmcuIEh5ZHJhdGUgdGhyb3VnaCBhIHByb21pc2VRdWV1ZVxuICAgICAgICAgICAgLy8gc2xvdCAoc28gYXN5bmMgZGVzZXJpYWxpemF0aW9uIHN0YXlzIGluIGV2ZW50LWxvZyBvcmRlciksIHRoZW5cbiAgICAgICAgICAgIC8vIGRlZmVyIGJlaGluZCBlYXJsaWVyIHdhaXRzIGJlZm9yZSByZXNvbHZpbmcuIFRoZSBkZWZlcnJhbCBydW5zXG4gICAgICAgICAgICAvLyBPRkYgdGhlIHNlcmlhbCBxdWV1ZSAoaXQgbWF5IHdhaXQgb24gYW4gZWFybGllciB3YWl0IGRlbGl2ZXJ5XG4gICAgICAgICAgICAvLyBhbmQgYmxvY2tpbmcgYSBxdWV1ZSBzbG90IG9uIHRoYXQgd291bGQgZGVhZGxvY2sgdGhlIHF1ZXVlKS5cbiAgICAgICAgICAgIGN0eC5wZW5kaW5nRGVsaXZlcmllcysrO1xuICAgICAgICAgICAgbGV0IGh5ZHJhdGVPdXRjb21lOlxuICAgICAgICAgICAgICB8IHsgb2s6IHRydWU7IHZhbHVlOiBUIH1cbiAgICAgICAgICAgICAgfCB7IG9rOiBmYWxzZTsgZXJyb3I6IHVua25vd24gfTtcbiAgICAgICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBoeWRyYXRlU3RlcFJldHVyblZhbHVlKFxuICAgICAgICAgICAgICAgICAgZXZlbnQuZXZlbnREYXRhLnBheWxvYWQsXG4gICAgICAgICAgICAgICAgICBjdHgucnVuSWQsXG4gICAgICAgICAgICAgICAgICBjdHguZW5jcnlwdGlvbktleSxcbiAgICAgICAgICAgICAgICAgIGN0eC5nbG9iYWxUaGlzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBoeWRyYXRlT3V0Y29tZSA9IHsgb2s6IHRydWUsIHZhbHVlOiBwYXlsb2FkIGFzIFQgfTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoeWRyYXRlT3V0Y29tZSA9IHsgb2s6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGN0eC5wZW5kaW5nRGVsaXZlcmllcy0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZvaWQgYXdhaXRFYXJsaWVyRGVsaXZlcmllcyhjdHgsIGV2ZW50SW5kZXgsIFsnd2FpdCddKS50aGVuKFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGJhcnJpZXIubWFya0RlbGl2ZXJlZCgpO1xuICAgICAgICAgICAgICAgICAgaWYgKGh5ZHJhdGVPdXRjb21lLm9rKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQucmVzb2x2ZShoeWRyYXRlT3V0Y29tZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXh0LnJlamVjdChoeWRyYXRlT3V0Y29tZS5lcnJvcik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5vIGNvbnN1bWVyIGlzIGF3YWl0aW5nIHlldC4gSHlkcmF0ZSB0aHJvdWdoIGEgcHJvbWlzZVF1ZXVlIHNsb3RcbiAgICAgICAgICAvLyBhdCB0aGlzIGxvZyBwb3NpdGlvbiBhbmQgcGFyayB0aGUgT1VUQ09NRSAodmFsdWUgb3IgZXJyb3IpIGZvciBhXG4gICAgICAgICAgLy8gbGF0ZXIgYGl0ZXJhdG9yLm5leHQoKWAgLyBgYXdhaXQgaG9va2AgY2xhaW0uIFdlIGNhcHR1cmUgdGhlXG4gICAgICAgICAgLy8gb3V0Y29tZSByYXRoZXIgdGhhbiBlYWdlcmx5IHJlc29sdmluZy9yZWplY3RpbmcgYSBwcm9taXNlIG5vXG4gICAgICAgICAgLy8gY29uc3VtZXIgaGFzIGF0dGFjaGVkIHRvIOKAlCBhIHJlamVjdGVkIHVuY2xhaW1lZCBwcm9taXNlIChlLmcuIGFcbiAgICAgICAgICAvLyBidWZmZXJlZCBlbmNyeXB0ZWQgcGF5bG9hZCB3aXRoIG5vIGtleSkgd291bGQgb3RoZXJ3aXNlIHN1cmZhY2VcbiAgICAgICAgICAvLyBhcyBhbiB1bmhhbmRsZWQgcmVqZWN0aW9uIGFuZCBjcmFzaCB0aGUgcHJvY2Vzcy4gYGNsYWltKClgIGJ1aWxkc1xuICAgICAgICAgIC8vIHRoZSBjb25zdW1lci1mYWNpbmcgcHJvbWlzZSBvbiBkZW1hbmQuXG4gICAgICAgICAgbGV0IG91dGNvbWU6XG4gICAgICAgICAgICB8IHsgb2s6IHRydWU7IHZhbHVlOiBUIH1cbiAgICAgICAgICAgIHwgeyBvazogZmFsc2U7IGVycm9yOiB1bmtub3duIH1cbiAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnN0IGh5ZHJhdGVkID0gd2l0aFJlc29sdmVyczx2b2lkPigpO1xuXG4gICAgICAgICAgY29uc3QgY2xhaW0gPSAoKTogUHJvbWlzZTxUPiA9PlxuICAgICAgICAgICAgaHlkcmF0ZWQucHJvbWlzZVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiBhd2FpdEVhcmxpZXJEZWxpdmVyaWVzKGN0eCwgZXZlbnRJbmRleCwgWyd3YWl0J10pKVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgYmFycmllci5tYXJrRGVsaXZlcmVkKCk7XG4gICAgICAgICAgICAgICAgaWYgKG91dGNvbWUgJiYgIW91dGNvbWUub2spIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IG91dGNvbWUuZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAob3V0Y29tZSBhcyB7IG9rOiB0cnVlOyB2YWx1ZTogVCB9KS52YWx1ZTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjdHgucGVuZGluZ0RlbGl2ZXJpZXMrKztcbiAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBoeWRyYXRlU3RlcFJldHVyblZhbHVlKFxuICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50RGF0YS5wYXlsb2FkLFxuICAgICAgICAgICAgICAgIGN0eC5ydW5JZCxcbiAgICAgICAgICAgICAgICBjdHguZW5jcnlwdGlvbktleSxcbiAgICAgICAgICAgICAgICBjdHguZ2xvYmFsVGhpc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBvdXRjb21lID0geyBvazogdHJ1ZSwgdmFsdWU6IHBheWxvYWQgYXMgVCB9O1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgb3V0Y29tZSA9IHsgb2s6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgY3R4LnBlbmRpbmdEZWxpdmVyaWVzLS07XG4gICAgICAgICAgICAgIGh5ZHJhdGVkLnJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwYXlsb2Fkc1F1ZXVlLnB1c2goeyBjbGFpbSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnaG9va19kaXNwb3NlZCcpIHtcbiAgICAgICAgLy8gVGVybWluYWwgc3RhdGUgLSByZW1vdmUgZnJvbSBxdWV1ZSAobGlrZSBzdGVwX2NvbXBsZXRlZC93YWl0X2NvbXBsZXRlZClcbiAgICAgICAgY3R4Lmludm9jYXRpb25zUXVldWUuZGVsZXRlKGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAvLyBNYXJrIHRoYXQgdGhlIGV2ZW50IGxvZyBjb25maXJtcyBkaXNwb3NhbCBoYXBwZW5lZFxuICAgICAgICBoYXNEaXNwb3NlZEV2ZW50ID0gdHJ1ZTtcbiAgICAgICAgLy8gV2UncmUgZG9uZSBwcm9jZXNzaW5nIGFueSBtb3JlIGV2ZW50cyBmb3IgdGhpcyBob29rXG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIHJlcGxheSBpbnN0YWxsZWQgYSBkaWZmZXJlbnQgY29uc3VtZXIgdGhhbiB0aGUgc3RvcmVkIGV2ZW50IG5lZWRzLlxuICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgbmV3IFJlcGxheURpdmVyZ2VuY2VFcnJvcihcbiAgICAgICAgICAgIGBSZXBsYXkgZGl2ZXJnZW5jZTogVW5leHBlY3RlZCBldmVudCB0eXBlIGZvciBob29rICR7Y29ycmVsYXRpb25JZH0gKHRva2VuOiAke3Rva2VufSkgXCIke2V2ZW50LmV2ZW50VHlwZX1cImAsXG4gICAgICAgICAgICB7IGV2ZW50SWQ6IGV2ZW50LmV2ZW50SWQgfVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgfSk7XG5cbiAgICAvLyBUcmFjayBpZiB0aGUgaG9vayBoYXMgYmVlbiBkaXNwb3NlZFxuICAgIGxldCBpc0Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IHByb21pc2UgdGhhdCB3YWl0cyBmb3IgdGhlIG5leHQgaG9vayBwYXlsb2FkXG4gICAgZnVuY3Rpb24gY3JlYXRlSG9va1Byb21pc2UoKTogUHJvbWlzZTxUPiB7XG4gICAgICBjb25zdCByZXNvbHZlcnMgPSB3aXRoUmVzb2x2ZXJzPFQ+KCk7XG5cbiAgICAgIC8vIElmIHdlIGhhdmUgYSBjb25mbGljdCwgcmVqZWN0IHRocm91Z2ggdGhlIHByb21pc2VRdWV1ZSB0byBtYWludGFpblxuICAgICAgLy8gZGV0ZXJtaW5pc3RpYyBvcmRlcmluZyB3aXRoIGFueSBwcmlvciBxdWV1ZWQgcmVzb2x1dGlvbnMuXG4gICAgICBpZiAoaGFzQ29uZmxpY3QgJiYgY29uZmxpY3RFcnJvclJlZikge1xuICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXNvbHZlcnMucmVqZWN0KGNvbmZsaWN0RXJyb3JSZWYpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVycy5wcm9taXNlO1xuICAgICAgfVxuXG4gICAgICBpZiAocGF5bG9hZHNRdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHREZWxpdmVyeSA9IHBheWxvYWRzUXVldWUuc2hpZnQoKTtcbiAgICAgICAgaWYgKG5leHREZWxpdmVyeSkge1xuICAgICAgICAgIC8vIFRoZSBwYXlsb2FkIHdhcyBoeWRyYXRlZCB0aHJvdWdoIGEgcHJvbWlzZVF1ZXVlIHNsb3QgYXQgaXRzIGxvZ1xuICAgICAgICAgIC8vIHBvc2l0aW9uIChidWZmZXJpbmcgYnJhbmNoIGFib3ZlKS4gYGNsYWltKClgIGJ1aWxkcyB0aGVcbiAgICAgICAgICAvLyBjb25zdW1lci1mYWNpbmcgcHJvbWlzZSBmcm9tIHRoYXQgb3V0Y29tZSwgZGVmZXJyaW5nIGJlaGluZCBhbnlcbiAgICAgICAgICAvLyBlYXJsaWVyLWluLWxvZyB3YWl0IGFuZCBtYXJraW5nIHRoaXMgaG9vayBkZWxpdmVyZWQg4oCUIHNvXG4gICAgICAgICAgLy8gcmVzb2x1dGlvbiBvcmRlciBzdGF5cyBhbmNob3JlZCB0byB0aGUgZXZlbnQgbG9nLCBub3QgdGhpcyBsYXRlclxuICAgICAgICAgIC8vIGNsYWltIHNpdGUuXG4gICAgICAgICAgcmV0dXJuIG5leHREZWxpdmVyeS5jbGFpbSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudExvZ0VtcHR5KSB7XG4gICAgICAgIHNjaGVkdWxlV2hlbklkbGUoY3R4LCAoKSA9PiB7XG4gICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgIG5ldyBXb3JrZmxvd1N1c3BlbnNpb24oY3R4Lmludm9jYXRpb25zUXVldWUsIGN0eC5nbG9iYWxUaGlzKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBwcm9taXNlcy5wdXNoKHJlc29sdmVycyk7XG5cbiAgICAgIHJldHVybiByZXNvbHZlcnMucHJvbWlzZTtcbiAgICB9XG5cbiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGhvb2snc1xuICAgIC8vIHJlZ2lzdHJhdGlvbiBvdXRjb21lOiB0aGUgY29uZmxpY3RpbmcgYFJ1bmAgd2hlbiB0aGUgdG9rZW4gaXMgb3duZWRcbiAgICAvLyBieSBhbm90aGVyIGFjdGl2ZSBob29rLCBgbnVsbGAgb25jZSB0aGlzIGhvb2sncyByZWdpc3RyYXRpb24gaXNcbiAgICAvLyBjb21taXR0ZWQuIEJvdGggZmFzdC1wYXRocyBzZXR0bGUgdGhyb3VnaCBgY3R4LnByb21pc2VRdWV1ZWAgc29cbiAgICAvLyByZXNvbHV0aW9uIG9yZGVyIGFsd2F5cyBtYXRjaGVzIGV2ZW50LWxvZyBvcmRlci5cbiAgICBmdW5jdGlvbiBjcmVhdGVHZXRDb25mbGljdFByb21pc2UoKTogUHJvbWlzZTxSdW48dW5rbm93bj4gfCBudWxsPiB7XG4gICAgICBjb25zdCByZXNvbHZlcnMgPSB3aXRoUmVzb2x2ZXJzPFJ1bjx1bmtub3duPiB8IG51bGw+KCk7XG5cbiAgICAgIGlmIChoYXNDcmVhdGVkKSB7XG4gICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmVycy5yZXNvbHZlKG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVycy5wcm9taXNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGFzQ29uZmxpY3QpIHtcbiAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbmZsaWN0UnVuUmVmKSB7XG4gICAgICAgICAgICByZXNvbHZlcnMucmVzb2x2ZShjb25mbGljdFJ1blJlZik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmVycy5yZWplY3QoY29uZmxpY3RFcnJvclJlZik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVycy5wcm9taXNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBxdWV1ZUl0ZW0gPSBjdHguaW52b2NhdGlvbnNRdWV1ZS5nZXQoY29ycmVsYXRpb25JZCk7XG4gICAgICBpZiAocXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnaG9vaycpIHtcbiAgICAgICAgcXVldWVJdGVtLmhhc0NvbmZsaWN0QXdhaXRlciA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudExvZ0VtcHR5KSB7XG4gICAgICAgIHNjaGVkdWxlV2hlbklkbGUoY3R4LCAoKSA9PiB7XG4gICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgIG5ldyBXb3JrZmxvd1N1c3BlbnNpb24oY3R4Lmludm9jYXRpb25zUXVldWUsIGN0eC5nbG9iYWxUaGlzKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBnZXRDb25mbGljdFByb21pc2VzLnB1c2gocmVzb2x2ZXJzKTtcbiAgICAgIHJldHVybiByZXNvbHZlcnMucHJvbWlzZTtcbiAgICB9XG5cbiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZGlzcG9zZSB0aGUgaG9va1xuICAgIGZ1bmN0aW9uIGRpc3Bvc2VIb29rKCk6IHZvaWQge1xuICAgICAgaWYgKGlzRGlzcG9zZWQpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBBbHJlYWR5IGRpc3Bvc2VkLCBub3RoaW5nIHRvIGRvXG4gICAgICB9XG4gICAgICBpc0Rpc3Bvc2VkID0gdHJ1ZTtcblxuICAgICAgLy8gSWYgdGhlIGV2ZW50IGxvZyBhbHJlYWR5IGNvbnRhaW5zIGhvb2tfZGlzcG9zZWQsIHRoaXMgaXMgYSByZXBsYXkg4oCUIG5vLW9wXG4gICAgICBpZiAoaGFzRGlzcG9zZWRFdmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBkaXNwb3NlZCBmbGFnIG9uIHRoZSBleGlzdGluZyBxdWV1ZSBpdGVtXG4gICAgICBjb25zdCBxdWV1ZUl0ZW0gPSBjdHguaW52b2NhdGlvbnNRdWV1ZS5nZXQoY29ycmVsYXRpb25JZCk7XG4gICAgICBpZiAocXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnaG9vaycpIHtcbiAgICAgICAgcXVldWVJdGVtLmRpc3Bvc2VkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gRHJhaW4gYW55IHBlbmRpbmcgcHJvbWlzZXMgdGhhdCBhcmUgd2FpdGluZyBmb3IgcGF5bG9hZHMuXG4gICAgICAvLyBXaXRob3V0IHRoaXMsIHByb21pc2VzIGNyZWF0ZWQgYnkgYGF3YWl0IGhvb2tgIG9yIHRoZSBhc3luYyBpdGVyYXRvcidzXG4gICAgICAvLyBgeWllbGQgYXdhaXQgdGhpc2Agd291bGQgaGFuZyBmb3JldmVyIHNpbmNlIHRoZSBldmVudCBjb25zdW1lciB3aWxsXG4gICAgICAvLyBuZXZlciBkZWxpdmVyIGFub3RoZXIgaG9va19yZWNlaXZlZCBhZnRlciBkaXNwb3NhbC5cbiAgICAgIGlmIChwcm9taXNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHByb21pc2VzLmxlbmd0aCA9IDA7XG4gICAgICAgIHNjaGVkdWxlV2hlbklkbGUoY3R4LCAoKSA9PiB7XG4gICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgIG5ldyBXb3JrZmxvd1N1c3BlbnNpb24oY3R4Lmludm9jYXRpb25zUXVldWUsIGN0eC5nbG9iYWxUaGlzKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB3ZWJob29rTG9nZ2VyLmRlYnVnKCdIb29rIGRpc3Bvc2VkJywgeyBjb3JyZWxhdGlvbklkLCB0b2tlbiB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBob29rOiBIb29rPFQ+ID0ge1xuICAgICAgdG9rZW4sXG5cbiAgICAgIGdldENvbmZsaWN0KCk6IFByb21pc2U8UnVuPHVua25vd24+IHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gY3JlYXRlR2V0Q29uZmxpY3RQcm9taXNlKCk7XG4gICAgICB9LFxuXG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vVGhlblByb3BlcnR5OiBJbnRlbnRpb25hbGx5IHRoZW5hYmxlXG4gICAgICB0aGVuPFRSZXN1bHQxID0gVCwgVFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgICAgIG9uZnVsZmlsbGVkPzogKCh2YWx1ZTogVCkgPT4gVFJlc3VsdDEgfCBQcm9taXNlTGlrZTxUUmVzdWx0MT4pIHwgbnVsbCxcbiAgICAgICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KSB8IG51bGxcbiAgICAgICk6IFByb21pc2U8VFJlc3VsdDEgfCBUUmVzdWx0Mj4ge1xuICAgICAgICByZXR1cm4gY3JlYXRlSG9va1Byb21pc2UoKS50aGVuKG9uZnVsZmlsbGVkLCBvbnJlamVjdGVkKTtcbiAgICAgIH0sXG5cbiAgICAgIC8vIFN1cHBvcnQgYGZvciBhd2FpdCAoY29uc3QgcGF5bG9hZCBvZiBob29rKSB7IOKApiB9YCBzeW50YXhcbiAgICAgIGFzeW5jICpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICB3aGlsZSAoIWlzRGlzcG9zZWQpIHtcbiAgICAgICAgICB5aWVsZCBhd2FpdCB0aGlzO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBkaXNwb3NlOiBkaXNwb3NlSG9vayxcblxuICAgICAgW1N5bWJvbC5kaXNwb3NlXTogZGlzcG9zZUhvb2ssXG4gICAgfTtcblxuICAgIC8vIEFsc28gcmVnaXN0ZXIgd2l0aCB0aGUgVk0ncyBTeW1ib2wuZGlzcG9zZSBzbyBgdXNpbmdgIHdvcmtzIGluc2lkZVxuICAgIC8vIHRoZSB3b3JrZmxvdyBzYW5kYm94ICh0aGUgVk0gbWF5IGhhdmUgYSBwb2x5ZmlsbGVkIFN5bWJvbC5kaXNwb3NlXG4gICAgLy8gdGhhdCBkaWZmZXJzIGZyb20gdGhlIGhvc3QncykuXG4gICAgY29uc3Qgdm1EaXNwb3NlID0gY3R4Lmdsb2JhbFRoaXMuU3ltYm9sLmRpc3Bvc2U7XG4gICAgaWYgKHZtRGlzcG9zZSAmJiB2bURpc3Bvc2UgIT09IFN5bWJvbC5kaXNwb3NlKSB7XG4gICAgICAoaG9vayBhcyBhbnkpW3ZtRGlzcG9zZV0gPSBkaXNwb3NlSG9vaztcbiAgICB9XG5cbiAgICByZXR1cm4gaG9vaztcbiAgfTtcbn1cbiJdfQ==
|
|
390
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9vay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3JrZmxvdy9ob29rLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVFLE9BQU8sRUFBNkIsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUNMLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDdkIsZ0JBQWdCLEdBRWpCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVoRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3RDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILFNBQVMsb0JBQW9CLENBQzNCLEdBQWdDLEVBQ2hDLGdCQUFvQztJQUVwQyxJQUFJLE9BQU8sZ0JBQWdCLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDekMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcscUJBQXFCLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBSXRELENBQUM7SUFDZCxNQUFNLFdBQVcsR0FBSSxRQUFnQixFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUM5RCxJQUFJLE9BQU8sV0FBVyxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELE9B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RUFBc0U7WUFDdEUsSUFBSSxDQUNGLFdBQXFFLEVBQ3JFLFVBQXVFO2dCQUV2RSxPQUFPLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUMzRCxDQUFDO1lBRUQsMkRBQTJEO1lBQzNELEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztnQkFDM0IsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUNuQixNQUFNLE1BQU0sSUFBSSxDQUFDO2dCQUNuQixDQUFDO1lBQ0gsQ0FBQztZQUVELE9BQU8sRUFBRSxXQUFXO1lBRXBCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFdBQVc7U0FDOUIsQ0FBQztRQUVGLHFFQUFxRTtRQUNyRSxvRUFBb0U7UUFDcEUsaUNBQWlDO1FBQ2pDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUNoRCxJQUFJLFNBQVMsSUFBSSxTQUFTLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzdDLElBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDekMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEhvb2tDb25mbGljdEVycm9yLCBSZXBsYXlEaXZlcmdlbmNlRXJyb3IgfSBmcm9tICdAd29ya2Zsb3cvZXJyb3JzJztcbmltcG9ydCB7IHR5cGUgUHJvbWlzZVdpdGhSZXNvbHZlcnMsIHdpdGhSZXNvbHZlcnMgfSBmcm9tICdAd29ya2Zsb3cvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBIb29rQ29uZmxpY3RFdmVudCB9IGZyb20gJ0B3b3JrZmxvdy93b3JsZCc7XG5pbXBvcnQgdHlwZSB7IEhvb2ssIEhvb2tPcHRpb25zIH0gZnJvbSAnLi4vY3JlYXRlLWhvb2suanMnO1xuaW1wb3J0IHsgRXZlbnRDb25zdW1lclJlc3VsdCB9IGZyb20gJy4uL2V2ZW50cy1jb25zdW1lci5qcyc7XG5pbXBvcnQgeyBXb3JrZmxvd1N1c3BlbnNpb24gfSBmcm9tICcuLi9nbG9iYWwuanMnO1xuaW1wb3J0IHsgd2ViaG9va0xvZ2dlciB9IGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQge1xuICBhd2FpdEVhcmxpZXJEZWxpdmVyaWVzLFxuICByZWdpc3RlckRlbGl2ZXJ5QmFycmllcixcbiAgc2NoZWR1bGVXaGVuSWRsZSxcbiAgdHlwZSBXb3JrZmxvd09yY2hlc3RyYXRvckNvbnRleHQsXG59IGZyb20gJy4uL3ByaXZhdGUuanMnO1xuaW1wb3J0IHsgV09SS0ZMT1dfREVTRVJJQUxJWkUgfSBmcm9tICdAd29ya2Zsb3cvc2VyZGUnO1xuaW1wb3J0IHsgZ2V0U2VyaWFsaXphdGlvbkNsYXNzLCBSVU5fQ0xBU1NfSUQgfSBmcm9tICcuLi9jbGFzcy1zZXJpYWxpemF0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgUnVuIH0gZnJvbSAnLi4vcnVudGltZS9ydW4uanMnO1xuaW1wb3J0IHsgaHlkcmF0ZVN0ZXBSZXR1cm5WYWx1ZSB9IGZyb20gJy4uL3NlcmlhbGl6YXRpb24uanMnO1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYSBgUnVuYCBoYW5kbGUgZm9yIHRoZSBydW4gdGhhdCBvd25zIGEgY29uZmxpY3RpbmcgaG9va1xuICogdG9rZW4sIGZvciByZXNvbHV0aW9uIHRocm91Z2ggYGhvb2suZ2V0Q29uZmxpY3QoKWAuXG4gKlxuICogVGhlIGluc3RhbmNlIGlzIGNyZWF0ZWQgdGhyb3VnaCB0aGUgc2VyaWFsaXphdGlvbiBjbGFzcyByZWdpc3RyeSBvblxuICogdGhlIFZNJ3MgZ2xvYmFsVGhpcyDigJQgdGhlIHNhbWUgY2hhbm5lbCB0aGF0IHJldml2ZXMgc2VyaWFsaXplZCBgUnVuYFxuICogaW5zdGFuY2VzIChlLmcuIGBzdGFydCgpYCByZXR1cm4gdmFsdWVzIGNyb3NzaW5nIGZyb20gYSBzdGVwIGludG8gdGhlXG4gKiB3b3JrZmxvdykuIFRoZSByZWdpc3RlcmVkIGNsYXNzIGlzIHRoZSBWTSBidW5kbGUncyBwbHVnaW4tY29tcGlsZWRcbiAqIGBSdW5gLCB3aG9zZSBtZXRob2RzIGFyZSBkdXJhYmxlIHN0ZXAgcHJveGllcyDigJQgc2FmZSB0byBjYWxsIGZyb21cbiAqIHdvcmtmbG93IGNvZGUg4oCUIGFuZCBjb25zdHJ1Y3Rpb24gZ29lcyB0aHJvdWdoIGl0c1xuICogYFdPUktGTE9XX0RFU0VSSUFMSVpFYCBob29rLCBleGFjdGx5IGFzIHRoZSBgSW5zdGFuY2VgIHJldml2ZXIgd291bGQuXG4gKlxuICogUmV0dXJucyBgbnVsbGAgd2hlbiBhIHJlYWwgYFJ1bmAgY2Fubm90IGJlIGNvbnN0cnVjdGVkOiB0aGUgY29uZmxpY3RcbiAqIGV2ZW50IGxhY2tzIGBjb25mbGljdGluZ1J1bklkYCAod3JpdHRlbiBieSBhbiBvbGQgd29ybGQpLCBvciB0aGUgVk0nc1xuICogcmVnaXN0cnkgaGFzIG5vIGBSdW5gIChhIGNvbnRleHQgdGhhdCBuZXZlciBldmFsdWF0ZWQgdGhlXG4gKiB3b3JrZmxvdy1tb2RlIGBjcmVhdGUtaG9va2AgbW9kdWxlLCB3aGljaCBhbGlhc2VzIGl0IHVuZGVyXG4gKiBgUlVOX0NMQVNTX0lEYCkuIGBnZXRDb25mbGljdGAgYXdhaXRlcnMgdGhlbiByZWplY3Qgd2l0aFxuICogYEhvb2tDb25mbGljdEVycm9yYCBpbnN0ZWFkIG9mIHJlc29sdmluZyB3aXRoIGEgdmFsdWUgdGhhdCBkb2Vzbid0XG4gKiBob25vciB0aGUgYFJ1bmAgY29udHJhY3QuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNvbmZsaWN0aW5nUnVuKFxuICBjdHg6IFdvcmtmbG93T3JjaGVzdHJhdG9yQ29udGV4dCxcbiAgY29uZmxpY3RpbmdSdW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBSdW48dW5rbm93bj4gfCBudWxsIHtcbiAgaWYgKHR5cGVvZiBjb25mbGljdGluZ1J1bklkICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IFJ1bkNsYXNzID0gZ2V0U2VyaWFsaXphdGlvbkNsYXNzKFJVTl9DTEFTU19JRCwgY3R4Lmdsb2JhbFRoaXMpIGFzXG4gICAgfCAoYWJzdHJhY3QgbmV3IChcbiAgICAgICAgLi4uYXJnczogbmV2ZXJcbiAgICAgICkgPT4gUnVuPHVua25vd24+KVxuICAgIHwgdW5kZWZpbmVkO1xuICBjb25zdCBkZXNlcmlhbGl6ZSA9IChSdW5DbGFzcyBhcyBhbnkpPy5bV09SS0ZMT1dfREVTRVJJQUxJWkVdO1xuICBpZiAodHlwZW9mIGRlc2VyaWFsaXplICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIGRlc2VyaWFsaXplLmNhbGwoUnVuQ2xhc3MsIHsgcnVuSWQ6IGNvbmZsaWN0aW5nUnVuSWQgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDcmVhdGVIb29rKGN0eDogV29ya2Zsb3dPcmNoZXN0cmF0b3JDb250ZXh0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVIb29rSW1wbDxUID0gYW55PihvcHRpb25zOiBIb29rT3B0aW9ucyA9IHt9KTogSG9vazxUPiB7XG4gICAgLy8gUmVqZWN0IGFuIGV4cGxpY2l0IGVtcHR5LXN0cmluZyB0b2tlbi4gQSB0b2tlbiBtdXN0IGVpdGhlciBiZSBvbWl0dGVkXG4gICAgLy8gKG9yIGB1bmRlZmluZWRgL2BudWxsYCkgdG8gZ2V0IGEgcmFuZG9tbHkgZ2VuZXJhdGVkIG9uZSwgb3IgYmUgYW5cbiAgICAvLyBleHBsaWNpdCBub24tZW1wdHkgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgYWxtb3N0IGFsd2F5cyBhblxuICAgIC8vIGFjY2lkZW50YWwgdmFsdWUgKGUuZy4gYW4gdW5zZXQgdmFyaWFibGUpIGFuZCB3b3VsZCBvdGhlcndpc2Ugc2xpcFxuICAgIC8vIHRocm91Z2ggdGhlIGA/P2AgYmVsb3cg4oCUIHdoaWNoIG9ubHkgZmFsbHMgYmFjayBmb3IgbnVsbGlzaCB2YWx1ZXMg4oCUIGFuZFxuICAgIC8vIGJlIHVzZWQgYXMgYSBtZWFuaW5nbGVzcywgbm9uLWRldGVybWluaXN0aWMgdG9rZW4uXG4gICAgaWYgKG9wdGlvbnMudG9rZW4gPT09ICcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdgY3JlYXRlSG9vaygpYCB3YXMgY2FsbGVkIHdpdGggYW4gZW1wdHkgc3RyaW5nIHRva2VuLiBQYXNzIGEgbm9uLWVtcHR5IHRva2VuLCBvciBvbWl0IHRoZSBgdG9rZW5gIG9wdGlvbiB0byB1c2UgYSByYW5kb21seSBnZW5lcmF0ZWQgb25lLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgaG9vayBJRCBhbmQgdG9rZW5cbiAgICBjb25zdCBjb3JyZWxhdGlvbklkID0gYGhvb2tfJHtjdHguZ2VuZXJhdGVVbGlkKCl9YDtcbiAgICBjb25zdCB0b2tlbiA9IG9wdGlvbnMudG9rZW4gPz8gY3R4LmdlbmVyYXRlTmFub2lkKCk7XG5cbiAgICAvLyBBZGQgaG9vayBjcmVhdGlvbiB0byBpbnZvY2F0aW9ucyBxdWV1ZSAodXNpbmcgTWFwIGZvciBPKDEpIG9wZXJhdGlvbnMpXG4gICAgY29uc3QgaXNXZWJob29rID0gb3B0aW9ucy5pc1dlYmhvb2sgPz8gZmFsc2U7XG5cbiAgICBjdHguaW52b2NhdGlvbnNRdWV1ZS5zZXQoY29ycmVsYXRpb25JZCwge1xuICAgICAgdHlwZTogJ2hvb2snLFxuICAgICAgY29ycmVsYXRpb25JZCxcbiAgICAgIHRva2VuLFxuICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEsXG4gICAgICBpc1dlYmhvb2ssXG4gICAgfSk7XG5cbiAgICAvLyBRdWV1ZSBvZiBidWZmZXJlZCBob29rIHBheWxvYWRzIChyZWNlaXZlZCBiZWZvcmUgdGhlIHdvcmtmbG93IGF3YWl0ZWRcbiAgICAvLyB0aGUgaG9vaykuIEVhY2ggZW50cnkncyBgY2xhaW0oKWAgYnVpbGRzIHRoZSBjb25zdW1lci1mYWNpbmcgcHJvbWlzZVxuICAgIC8vIGZyb20gdGhlIGNhcHR1cmVkIGh5ZHJhdGlvbiBvdXRjb21lIGFuZCBvcmRlcnMgaXQgZGV0ZXJtaW5pc3RpY2FsbHkgYnlcbiAgICAvLyBldmVudC1sb2cgcG9zaXRpb24gYWdhaW5zdCBhbnkgY29uY3VycmVudCBicmFuY2gtZGVjaWRpbmcgcmVzb2x1dGlvblxuICAgIC8vIChzZWUgYGN0eC5wZW5kaW5nRGVsaXZlcnlCYXJyaWVyc2ApLlxuICAgIGNvbnN0IHBheWxvYWRzUXVldWU6IHsgY2xhaW06ICgpID0+IFByb21pc2U8VD4gfVtdID0gW107XG5cbiAgICAvLyBRdWV1ZSBvZiBwcm9taXNlcyB0aGF0IHJlc29sdmUgdG8gdGhlIG5leHQgaG9vayBwYXlsb2FkXG4gICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2VXaXRoUmVzb2x2ZXJzPFQ+W10gPSBbXTtcblxuICAgIC8vIFF1ZXVlIG9mIHByb21pc2VzIHRoYXQgcmVzb2x2ZSBvbmNlIGhvb2sgcmVnaXN0cmF0aW9uIGlzIGNvbmZpcm1lZFxuICAgIC8vICh3aXRoIGBudWxsYCkgb3IgYSB0b2tlbiBjb25mbGljdCBpcyBkZXRlY3RlZCAod2l0aCB0aGUgY29uZmxpY3RpbmdcbiAgICAvLyBgUnVuYCkuIFRoZXNlIGJhY2sgdGhlIGBob29rLmdldENvbmZsaWN0KClgIGdldHRlci5cbiAgICBjb25zdCBnZXRDb25mbGljdFByb21pc2VzOiBQcm9taXNlV2l0aFJlc29sdmVyczxSdW48dW5rbm93bj4gfCBudWxsPltdID0gW107XG5cbiAgICBsZXQgZXZlbnRMb2dFbXB0eSA9IGZhbHNlO1xuXG4gICAgLy8gVHJhY2sgaWYgdGhlIGV2ZW50IGxvZyBjb25maXJtcyBob29rIGNyZWF0aW9uIGhhcHBlbmVkXG4gICAgbGV0IGhhc0NyZWF0ZWQgPSBmYWxzZTtcblxuICAgIC8vIFRyYWNrIGlmIHRoZSBldmVudCBsb2cgY29uZmlybXMgZGlzcG9zYWwgaGFwcGVuZWQgKHJlcGxheSBuby1vcClcbiAgICBsZXQgaGFzRGlzcG9zZWRFdmVudCA9IGZhbHNlO1xuXG4gICAgLy8gVHJhY2sgaWYgd2UgaGF2ZSBhIGNvbmZsaWN0IHNvIHdlIGNhbiByZWplY3QgZnV0dXJlIGF3YWl0c1xuICAgIGxldCBoYXNDb25mbGljdCA9IGZhbHNlO1xuICAgIGxldCBjb25mbGljdEVycm9yUmVmOiBIb29rQ29uZmxpY3RFcnJvciB8IG51bGwgPSBudWxsO1xuICAgIC8vIFRoZSBjb25mbGljdGluZyBydW4gaGFuZGxlLCBzaGFyZWQgYnkgZXZlcnkgYGdldENvbmZsaWN0YCBhd2FpdCBzb1xuICAgIC8vIHJlcGVhdGVkIGF3YWl0cyBvYnNlcnZlIHRoZSBzYW1lIGluc3RhbmNlIGRldGVybWluaXN0aWNhbGx5LlxuICAgIGxldCBjb25mbGljdFJ1blJlZjogUnVuPHVua25vd24+IHwgbnVsbCA9IG51bGw7XG5cbiAgICB3ZWJob29rTG9nZ2VyLmRlYnVnKCdIb29rIGNvbnN1bWVyIHNldHVwJywgeyBjb3JyZWxhdGlvbklkLCB0b2tlbiB9KTtcbiAgICBjdHguZXZlbnRzQ29uc3VtZXIuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGV2ZW50cyBhbmQgdGhlcmUgYXJlIHByb21pc2VzIHdhaXRpbmcsXG4gICAgICAvLyBpdCBtZWFucyB0aGUgaG9vayBoYXMgYmVlbiBhd2FpdGVkLCBidXQgYW4gaW5jb21pbmcgcGF5bG9hZCBoYXMgbm90IHlldCBiZWVuIHJlY2VpdmVkLlxuICAgICAgLy8gSW4gdGhpcyBjYXNlLCB0aGUgd29ya2Zsb3cgc2hvdWxkIGJlIHN1c3BlbmRlZCB1bnRpbCB0aGUgaG9vayBpcyByZXN1bWVkLlxuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICBldmVudExvZ0VtcHR5ID0gdHJ1ZTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgKHByb21pc2VzLmxlbmd0aCA+IDAgJiYgcGF5bG9hZHNRdWV1ZS5sZW5ndGggPT09IDApIHx8XG4gICAgICAgICAgKGdldENvbmZsaWN0UHJvbWlzZXMubGVuZ3RoID4gMCAmJiAhaGFzQ3JlYXRlZCAmJiAhaGFzQ29uZmxpY3QpXG4gICAgICAgICkge1xuICAgICAgICAgIHNjaGVkdWxlV2hlbklkbGUoY3R4LCAoKSA9PiB7XG4gICAgICAgICAgICBjdHgub25Xb3JrZmxvd0Vycm9yKFxuICAgICAgICAgICAgICBuZXcgV29ya2Zsb3dTdXNwZW5zaW9uKGN0eC5pbnZvY2F0aW9uc1F1ZXVlLCBjdHguZ2xvYmFsVGhpcylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuTm90Q29uc3VtZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5jb3JyZWxhdGlvbklkICE9PSBjb3JyZWxhdGlvbklkKSB7XG4gICAgICAgIC8vIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIHRoaXMgZXZlbnQgLSB0aGUgY29ycmVsYXRpb25JZCBiZWxvbmdzIHRvIGEgZGlmZmVyZW50IGVudGl0eVxuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5Ob3RDb25zdW1lZDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXZlbnRUb2tlbiA9XG4gICAgICAgICdldmVudERhdGEnIGluIGV2ZW50ICYmIGV2ZW50LmV2ZW50RGF0YSAmJiAndG9rZW4nIGluIGV2ZW50LmV2ZW50RGF0YVxuICAgICAgICAgID8gZXZlbnQuZXZlbnREYXRhLnRva2VuXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh0eXBlb2YgZXZlbnRUb2tlbiA9PT0gJ3N0cmluZycgJiYgZXZlbnRUb2tlbiAhPT0gdG9rZW4pIHtcbiAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgIG5ldyBSZXBsYXlEaXZlcmdlbmNlRXJyb3IoXG4gICAgICAgICAgICAgIGBSZXBsYXkgZGl2ZXJnZW5jZTogaG9vayBldmVudCAke2V2ZW50LmV2ZW50VHlwZX0gZm9yICR7Y29ycmVsYXRpb25JZH0gYmVsb25ncyB0byB0b2tlbiBcIiR7ZXZlbnRUb2tlbn1cIiwgYnV0IHRoZSBjdXJyZW50IGhvb2sgY29uc3VtZXIgZXhwZWN0cyBcIiR7dG9rZW59XCJgLFxuICAgICAgICAgICAgICB7IGV2ZW50SWQ6IGV2ZW50LmV2ZW50SWQgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gRXZlbnRDb25zdW1lclJlc3VsdC5GaW5pc2hlZDtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIGhvb2tfY3JlYXRlZCBldmVudCB0byBtYXJrIHRoaXMgaG9vayBhcyBhbHJlYWR5IGNyZWF0ZWRcbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdob29rX2NyZWF0ZWQnKSB7XG4gICAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IGN0eC5pbnZvY2F0aW9uc1F1ZXVlLmdldChjb3JyZWxhdGlvbklkKTtcbiAgICAgICAgaWYgKHF1ZXVlSXRlbSAmJiBxdWV1ZUl0ZW0udHlwZSA9PT0gJ2hvb2snKSB7XG4gICAgICAgICAgcXVldWVJdGVtLmhhc0NyZWF0ZWRFdmVudCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaGFzQ3JlYXRlZCA9IHRydWU7XG5cbiAgICAgICAgY29uc3QgcGVuZGluZ0dldENvbmZsaWN0UHJvbWlzZXMgPSBnZXRDb25mbGljdFByb21pc2VzLnNsaWNlKCk7XG4gICAgICAgIGdldENvbmZsaWN0UHJvbWlzZXMubGVuZ3RoID0gMDtcbiAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCByZXNvbHZlciBvZiBwZW5kaW5nR2V0Q29uZmxpY3RQcm9taXNlcykge1xuICAgICAgICAgICAgcmVzb2x2ZXIucmVzb2x2ZShudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkO1xuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgaG9va19jb25mbGljdCBldmVudCAtIGFub3RoZXIgd29ya2Zsb3cgaXMgdXNpbmcgdGhpcyB0b2tlblxuICAgICAgaWYgKGV2ZW50LmV2ZW50VHlwZSA9PT0gJ2hvb2tfY29uZmxpY3QnKSB7XG4gICAgICAgIC8vIFJlbW92ZSB0aGlzIGhvb2sgZnJvbSB0aGUgaW52b2NhdGlvbnMgcXVldWVcbiAgICAgICAgY3R4Lmludm9jYXRpb25zUXVldWUuZGVsZXRlKGNvcnJlbGF0aW9uSWQpO1xuXG4gICAgICAgIC8vIFN0b3JlIHRoZSBjb25mbGljdCBldmVudCBzbyB3ZSBjYW4gcmVqZWN0IGFueSBhd2FpdGVkIHByb21pc2VzLlxuICAgICAgICAvLyBDaGFpbiB0aHJvdWdoIHByb21pc2VRdWV1ZSB0byBlbnN1cmUgZGV0ZXJtaW5pc3RpYyBvcmRlcmluZy5cbiAgICAgICAgY29uc3QgY29uZmxpY3RFdmVudCA9IGV2ZW50IGFzIEhvb2tDb25mbGljdEV2ZW50O1xuICAgICAgICBjb25zdCBjb25mbGljdEVycm9yID0gbmV3IEhvb2tDb25mbGljdEVycm9yKFxuICAgICAgICAgIGNvbmZsaWN0RXZlbnQuZXZlbnREYXRhLnRva2VuLFxuICAgICAgICAgIGNvbmZsaWN0RXZlbnQuZXZlbnREYXRhLmNvbmZsaWN0aW5nUnVuSWRcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBNYXJrIHRoYXQgd2UgaGF2ZSBhIGNvbmZsaWN0IHNvIGZ1dHVyZSBhd2FpdHMgYWxzbyByZWplY3RcbiAgICAgICAgaGFzQ29uZmxpY3QgPSB0cnVlO1xuICAgICAgICBjb25mbGljdEVycm9yUmVmID0gY29uZmxpY3RFcnJvcjtcbiAgICAgICAgY29uZmxpY3RSdW5SZWYgPSBjcmVhdGVDb25mbGljdGluZ1J1bihcbiAgICAgICAgICBjdHgsXG4gICAgICAgICAgY29uZmxpY3RFdmVudC5ldmVudERhdGEuY29uZmxpY3RpbmdSdW5JZFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIENhcHR1cmUgYW5kIGRyYWluIHBlbmRpbmcgcHJvbWlzZXMgc3luY2hyb25vdXNseSBzbyB0aGUgbnVsbCBldmVudFxuICAgICAgICAvLyBoYW5kbGVyIHdvbid0IHNlZSB0aGVtIGFuZCB0cmlnZ2VyIGEgc3B1cmlvdXMgV29ya2Zsb3dTdXNwZW5zaW9uLlxuICAgICAgICAvLyBUaGUgYWN0dWFsIHNldHRsZW1lbnRzIGFyZSBkZWZlcnJlZCB0aHJvdWdoIHByb21pc2VRdWV1ZSBmb3JcbiAgICAgICAgLy8gb3JkZXJpbmcuIFBheWxvYWQgYXdhaXRlcnMgcmVqZWN0IHdpdGggSG9va0NvbmZsaWN0RXJyb3IsIHdoaWxlXG4gICAgICAgIC8vIGBnZXRDb25mbGljdGAgYXdhaXRlcnMgcmVzb2x2ZSB3aXRoIHRoZSBjb25mbGljdGluZyBydW4gc28gdGhlXG4gICAgICAgIC8vIHdvcmtmbG93IGNhbiBicmFuY2ggb24gdGhlIGNvbmZsaWN0IHdpdGhvdXQgdGhyb3dpbmcuIFdoZW4gbm9cbiAgICAgICAgLy8gcmVhbCBgUnVuYCBjYW4gYmUgY29uc3RydWN0ZWQgKHNlZSBgY3JlYXRlQ29uZmxpY3RpbmdSdW5gKSxcbiAgICAgICAgLy8gYGdldENvbmZsaWN0YCBhd2FpdGVycyByZWplY3Qgd2l0aCB0aGUgSG9va0NvbmZsaWN0RXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBvZiByZXNvbHZpbmcgd2l0aCBhIHZhbHVlIHRoYXQgZG9lc24ndCBob25vciB0aGUgYFJ1bmAgY29udHJhY3QuXG4gICAgICAgIGNvbnN0IHBlbmRpbmdQcm9taXNlcyA9IHByb21pc2VzLnNsaWNlKCk7XG4gICAgICAgIHByb21pc2VzLmxlbmd0aCA9IDA7XG4gICAgICAgIGNvbnN0IHBlbmRpbmdHZXRDb25mbGljdFByb21pc2VzID0gZ2V0Q29uZmxpY3RQcm9taXNlcy5zbGljZSgpO1xuICAgICAgICBnZXRDb25mbGljdFByb21pc2VzLmxlbmd0aCA9IDA7XG5cbiAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCByZXNvbHZlciBvZiBwZW5kaW5nUHJvbWlzZXMpIHtcbiAgICAgICAgICAgIHJlc29sdmVyLnJlamVjdChjb25mbGljdEVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChjb25zdCByZXNvbHZlciBvZiBwZW5kaW5nR2V0Q29uZmxpY3RQcm9taXNlcykge1xuICAgICAgICAgICAgaWYgKGNvbmZsaWN0UnVuUmVmKSB7XG4gICAgICAgICAgICAgIHJlc29sdmVyLnJlc29sdmUoY29uZmxpY3RSdW5SZWYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzb2x2ZXIucmVqZWN0KGNvbmZsaWN0RXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuQ29uc3VtZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT09ICdob29rX3JlY2VpdmVkJykge1xuICAgICAgICAvLyBSZWdpc3RlciBhICdob29rJyBkZWxpdmVyeSBiYXJyaWVyIGF0IHRoaXMgZXZlbnQncyBsb2cgaW5kZXggc28gYVxuICAgICAgICAvLyBsYXRlci1pbi1sb2cgYHdhaXRfY29tcGxldGVkYCBpcyBkZWxpdmVyZWQgb25seSBhZnRlciB0aGlzIGhvb2ssXG4gICAgICAgIC8vIGFuZCBzbyB0aGlzIGhvb2sgaXMgZGVsaXZlcmVkIG9ubHkgYWZ0ZXIgZXZlcnkgZWFybGllci1pbi1sb2dcbiAgICAgICAgLy8gYHdhaXRfY29tcGxldGVkYCDigJQga2VlcGluZyBhbnkgYFByb21pc2UucmFjZWAgYWdhaW5zdCBhIHdhaXRcbiAgICAgICAgLy8gZGV0ZXJtaW5pc3RpYyBhbmQgYWxpZ25lZCB3aXRoIHRoZSBjb21taXR0ZWQgZXZlbnQgbG9nLCByZWdhcmRsZXNzXG4gICAgICAgIC8vIG9mIG1pY3JvdGFzay1ob3AgY291bnQsIGh5ZHJhdGlvbiB0aW1lLCBvciByYWNlLWFyZ3VtZW50IG9yZGVyLlxuICAgICAgICAvLyBTZWUgYGN0eC5wZW5kaW5nRGVsaXZlcnlCYXJyaWVyc2AuXG4gICAgICAgIGNvbnN0IGV2ZW50SW5kZXggPSBjdHguZXZlbnRzQ29uc3VtZXIuZXZlbnRJbmRleDtcbiAgICAgICAgY29uc3QgYmFycmllciA9IHJlZ2lzdGVyRGVsaXZlcnlCYXJyaWVyKGN0eCwgZXZlbnRJbmRleCwgJ2hvb2snKTtcblxuICAgICAgICBpZiAocHJvbWlzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBwcm9taXNlcy5zaGlmdCgpO1xuICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAvLyBBIGNvbnN1bWVyIGlzIGFscmVhZHkgYXdhaXRpbmcuIEh5ZHJhdGUgdGhyb3VnaCBhIHByb21pc2VRdWV1ZVxuICAgICAgICAgICAgLy8gc2xvdCAoc28gYXN5bmMgZGVzZXJpYWxpemF0aW9uIHN0YXlzIGluIGV2ZW50LWxvZyBvcmRlciksIHRoZW5cbiAgICAgICAgICAgIC8vIGRlZmVyIGJlaGluZCBlYXJsaWVyIHdhaXRzIGJlZm9yZSByZXNvbHZpbmcuIFRoZSBkZWZlcnJhbCBydW5zXG4gICAgICAgICAgICAvLyBPRkYgdGhlIHNlcmlhbCBxdWV1ZSAoaXQgbWF5IHdhaXQgb24gYW4gZWFybGllciB3YWl0IGRlbGl2ZXJ5XG4gICAgICAgICAgICAvLyBhbmQgYmxvY2tpbmcgYSBxdWV1ZSBzbG90IG9uIHRoYXQgd291bGQgZGVhZGxvY2sgdGhlIHF1ZXVlKS5cbiAgICAgICAgICAgIGN0eC5wZW5kaW5nRGVsaXZlcmllcysrO1xuICAgICAgICAgICAgbGV0IGh5ZHJhdGVPdXRjb21lOlxuICAgICAgICAgICAgICB8IHsgb2s6IHRydWU7IHZhbHVlOiBUIH1cbiAgICAgICAgICAgICAgfCB7IG9rOiBmYWxzZTsgZXJyb3I6IHVua25vd24gfTtcbiAgICAgICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBoeWRyYXRlU3RlcFJldHVyblZhbHVlKFxuICAgICAgICAgICAgICAgICAgZXZlbnQuZXZlbnREYXRhLnBheWxvYWQsXG4gICAgICAgICAgICAgICAgICBjdHgucnVuSWQsXG4gICAgICAgICAgICAgICAgICBjdHguZW5jcnlwdGlvbktleSxcbiAgICAgICAgICAgICAgICAgIGN0eC5nbG9iYWxUaGlzXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBoeWRyYXRlT3V0Y29tZSA9IHsgb2s6IHRydWUsIHZhbHVlOiBwYXlsb2FkIGFzIFQgfTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoeWRyYXRlT3V0Y29tZSA9IHsgb2s6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGN0eC5wZW5kaW5nRGVsaXZlcmllcy0tO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZvaWQgYXdhaXRFYXJsaWVyRGVsaXZlcmllcyhjdHgsIGV2ZW50SW5kZXgsIFsnd2FpdCddKS50aGVuKFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGJhcnJpZXIubWFya0RlbGl2ZXJlZCgpO1xuICAgICAgICAgICAgICAgICAgaWYgKGh5ZHJhdGVPdXRjb21lLm9rKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQucmVzb2x2ZShoeWRyYXRlT3V0Y29tZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXh0LnJlamVjdChoeWRyYXRlT3V0Y29tZS5lcnJvcik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5vIGNvbnN1bWVyIGlzIGF3YWl0aW5nIHlldC4gSHlkcmF0ZSB0aHJvdWdoIGEgcHJvbWlzZVF1ZXVlIHNsb3RcbiAgICAgICAgICAvLyBhdCB0aGlzIGxvZyBwb3NpdGlvbiBhbmQgcGFyayB0aGUgT1VUQ09NRSAodmFsdWUgb3IgZXJyb3IpIGZvciBhXG4gICAgICAgICAgLy8gbGF0ZXIgYGl0ZXJhdG9yLm5leHQoKWAgLyBgYXdhaXQgaG9va2AgY2xhaW0uIFdlIGNhcHR1cmUgdGhlXG4gICAgICAgICAgLy8gb3V0Y29tZSByYXRoZXIgdGhhbiBlYWdlcmx5IHJlc29sdmluZy9yZWplY3RpbmcgYSBwcm9taXNlIG5vXG4gICAgICAgICAgLy8gY29uc3VtZXIgaGFzIGF0dGFjaGVkIHRvIOKAlCBhIHJlamVjdGVkIHVuY2xhaW1lZCBwcm9taXNlIChlLmcuIGFcbiAgICAgICAgICAvLyBidWZmZXJlZCBlbmNyeXB0ZWQgcGF5bG9hZCB3aXRoIG5vIGtleSkgd291bGQgb3RoZXJ3aXNlIHN1cmZhY2VcbiAgICAgICAgICAvLyBhcyBhbiB1bmhhbmRsZWQgcmVqZWN0aW9uIGFuZCBjcmFzaCB0aGUgcHJvY2Vzcy4gYGNsYWltKClgIGJ1aWxkc1xuICAgICAgICAgIC8vIHRoZSBjb25zdW1lci1mYWNpbmcgcHJvbWlzZSBvbiBkZW1hbmQuXG4gICAgICAgICAgbGV0IG91dGNvbWU6XG4gICAgICAgICAgICB8IHsgb2s6IHRydWU7IHZhbHVlOiBUIH1cbiAgICAgICAgICAgIHwgeyBvazogZmFsc2U7IGVycm9yOiB1bmtub3duIH1cbiAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnN0IGh5ZHJhdGVkID0gd2l0aFJlc29sdmVyczx2b2lkPigpO1xuXG4gICAgICAgICAgY29uc3QgY2xhaW0gPSAoKTogUHJvbWlzZTxUPiA9PlxuICAgICAgICAgICAgaHlkcmF0ZWQucHJvbWlzZVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiBhd2FpdEVhcmxpZXJEZWxpdmVyaWVzKGN0eCwgZXZlbnRJbmRleCwgWyd3YWl0J10pKVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgYmFycmllci5tYXJrRGVsaXZlcmVkKCk7XG4gICAgICAgICAgICAgICAgaWYgKG91dGNvbWUgJiYgIW91dGNvbWUub2spIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IG91dGNvbWUuZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAob3V0Y29tZSBhcyB7IG9rOiB0cnVlOyB2YWx1ZTogVCB9KS52YWx1ZTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjdHgucGVuZGluZ0RlbGl2ZXJpZXMrKztcbiAgICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBhd2FpdCBoeWRyYXRlU3RlcFJldHVyblZhbHVlKFxuICAgICAgICAgICAgICAgIGV2ZW50LmV2ZW50RGF0YS5wYXlsb2FkLFxuICAgICAgICAgICAgICAgIGN0eC5ydW5JZCxcbiAgICAgICAgICAgICAgICBjdHguZW5jcnlwdGlvbktleSxcbiAgICAgICAgICAgICAgICBjdHguZ2xvYmFsVGhpc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBvdXRjb21lID0geyBvazogdHJ1ZSwgdmFsdWU6IHBheWxvYWQgYXMgVCB9O1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgb3V0Y29tZSA9IHsgb2s6IGZhbHNlLCBlcnJvciB9O1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgY3R4LnBlbmRpbmdEZWxpdmVyaWVzLS07XG4gICAgICAgICAgICAgIGh5ZHJhdGVkLnJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwYXlsb2Fkc1F1ZXVlLnB1c2goeyBjbGFpbSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkNvbnN1bWVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09PSAnaG9va19kaXNwb3NlZCcpIHtcbiAgICAgICAgLy8gVGVybWluYWwgc3RhdGUgLSByZW1vdmUgZnJvbSBxdWV1ZSAobGlrZSBzdGVwX2NvbXBsZXRlZC93YWl0X2NvbXBsZXRlZClcbiAgICAgICAgY3R4Lmludm9jYXRpb25zUXVldWUuZGVsZXRlKGNvcnJlbGF0aW9uSWQpO1xuICAgICAgICAvLyBNYXJrIHRoYXQgdGhlIGV2ZW50IGxvZyBjb25maXJtcyBkaXNwb3NhbCBoYXBwZW5lZFxuICAgICAgICBoYXNEaXNwb3NlZEV2ZW50ID0gdHJ1ZTtcbiAgICAgICAgLy8gV2UncmUgZG9uZSBwcm9jZXNzaW5nIGFueSBtb3JlIGV2ZW50cyBmb3IgdGhpcyBob29rXG4gICAgICAgIHJldHVybiBFdmVudENvbnN1bWVyUmVzdWx0LkZpbmlzaGVkO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGlzIHJlcGxheSBpbnN0YWxsZWQgYSBkaWZmZXJlbnQgY29uc3VtZXIgdGhhbiB0aGUgc3RvcmVkIGV2ZW50IG5lZWRzLlxuICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgIGN0eC5vbldvcmtmbG93RXJyb3IoXG4gICAgICAgICAgbmV3IFJlcGxheURpdmVyZ2VuY2VFcnJvcihcbiAgICAgICAgICAgIGBSZXBsYXkgZGl2ZXJnZW5jZTogVW5leHBlY3RlZCBldmVudCB0eXBlIGZvciBob29rICR7Y29ycmVsYXRpb25JZH0gKHRva2VuOiAke3Rva2VufSkgXCIke2V2ZW50LmV2ZW50VHlwZX1cImAsXG4gICAgICAgICAgICB7IGV2ZW50SWQ6IGV2ZW50LmV2ZW50SWQgfVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIEV2ZW50Q29uc3VtZXJSZXN1bHQuRmluaXNoZWQ7XG4gICAgfSk7XG5cbiAgICAvLyBUcmFjayBpZiB0aGUgaG9vayBoYXMgYmVlbiBkaXNwb3NlZFxuICAgIGxldCBpc0Rpc3Bvc2VkID0gZmFsc2U7XG5cbiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgbmV3IHByb21pc2UgdGhhdCB3YWl0cyBmb3IgdGhlIG5leHQgaG9vayBwYXlsb2FkXG4gICAgZnVuY3Rpb24gY3JlYXRlSG9va1Byb21pc2UoKTogUHJvbWlzZTxUPiB7XG4gICAgICBjb25zdCByZXNvbHZlcnMgPSB3aXRoUmVzb2x2ZXJzPFQ+KCk7XG5cbiAgICAgIC8vIElmIHdlIGhhdmUgYSBjb25mbGljdCwgcmVqZWN0IHRocm91Z2ggdGhlIHByb21pc2VRdWV1ZSB0byBtYWludGFpblxuICAgICAgLy8gZGV0ZXJtaW5pc3RpYyBvcmRlcmluZyB3aXRoIGFueSBwcmlvciBxdWV1ZWQgcmVzb2x1dGlvbnMuXG4gICAgICBpZiAoaGFzQ29uZmxpY3QgJiYgY29uZmxpY3RFcnJvclJlZikge1xuICAgICAgICBjdHgucHJvbWlzZVF1ZXVlID0gY3R4LnByb21pc2VRdWV1ZS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXNvbHZlcnMucmVqZWN0KGNvbmZsaWN0RXJyb3JSZWYpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVycy5wcm9taXNlO1xuICAgICAgfVxuXG4gICAgICBpZiAocGF5bG9hZHNRdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHREZWxpdmVyeSA9IHBheWxvYWRzUXVldWUuc2hpZnQoKTtcbiAgICAgICAgaWYgKG5leHREZWxpdmVyeSkge1xuICAgICAgICAgIC8vIFRoZSBwYXlsb2FkIHdhcyBoeWRyYXRlZCB0aHJvdWdoIGEgcHJvbWlzZVF1ZXVlIHNsb3QgYXQgaXRzIGxvZ1xuICAgICAgICAgIC8vIHBvc2l0aW9uIChidWZmZXJpbmcgYnJhbmNoIGFib3ZlKS4gYGNsYWltKClgIGJ1aWxkcyB0aGVcbiAgICAgICAgICAvLyBjb25zdW1lci1mYWNpbmcgcHJvbWlzZSBmcm9tIHRoYXQgb3V0Y29tZSwgZGVmZXJyaW5nIGJlaGluZCBhbnlcbiAgICAgICAgICAvLyBlYXJsaWVyLWluLWxvZyB3YWl0IGFuZCBtYXJraW5nIHRoaXMgaG9vayBkZWxpdmVyZWQg4oCUIHNvXG4gICAgICAgICAgLy8gcmVzb2x1dGlvbiBvcmRlciBzdGF5cyBhbmNob3JlZCB0byB0aGUgZXZlbnQgbG9nLCBub3QgdGhpcyBsYXRlclxuICAgICAgICAgIC8vIGNsYWltIHNpdGUuXG4gICAgICAgICAgcmV0dXJuIG5leHREZWxpdmVyeS5jbGFpbSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudExvZ0VtcHR5KSB7XG4gICAgICAgIHNjaGVkdWxlV2hlbklkbGUoY3R4LCAoKSA9PiB7XG4gICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgIG5ldyBXb3JrZmxvd1N1c3BlbnNpb24oY3R4Lmludm9jYXRpb25zUXVldWUsIGN0eC5nbG9iYWxUaGlzKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBwcm9taXNlcy5wdXNoKHJlc29sdmVycyk7XG5cbiAgICAgIHJldHVybiByZXNvbHZlcnMucHJvbWlzZTtcbiAgICB9XG5cbiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGhvb2snc1xuICAgIC8vIHJlZ2lzdHJhdGlvbiBvdXRjb21lOiB0aGUgY29uZmxpY3RpbmcgYFJ1bmAgd2hlbiB0aGUgdG9rZW4gaXMgb3duZWRcbiAgICAvLyBieSBhbm90aGVyIGFjdGl2ZSBob29rLCBgbnVsbGAgb25jZSB0aGlzIGhvb2sncyByZWdpc3RyYXRpb24gaXNcbiAgICAvLyBjb21taXR0ZWQuIEJvdGggZmFzdC1wYXRocyBzZXR0bGUgdGhyb3VnaCBgY3R4LnByb21pc2VRdWV1ZWAgc29cbiAgICAvLyByZXNvbHV0aW9uIG9yZGVyIGFsd2F5cyBtYXRjaGVzIGV2ZW50LWxvZyBvcmRlci5cbiAgICBmdW5jdGlvbiBjcmVhdGVHZXRDb25mbGljdFByb21pc2UoKTogUHJvbWlzZTxSdW48dW5rbm93bj4gfCBudWxsPiB7XG4gICAgICBjb25zdCByZXNvbHZlcnMgPSB3aXRoUmVzb2x2ZXJzPFJ1bjx1bmtub3duPiB8IG51bGw+KCk7XG5cbiAgICAgIGlmIChoYXNDcmVhdGVkKSB7XG4gICAgICAgIGN0eC5wcm9taXNlUXVldWUgPSBjdHgucHJvbWlzZVF1ZXVlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmVycy5yZXNvbHZlKG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVycy5wcm9taXNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGFzQ29uZmxpY3QpIHtcbiAgICAgICAgY3R4LnByb21pc2VRdWV1ZSA9IGN0eC5wcm9taXNlUXVldWUudGhlbigoKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbmZsaWN0UnVuUmVmKSB7XG4gICAgICAgICAgICByZXNvbHZlcnMucmVzb2x2ZShjb25mbGljdFJ1blJlZik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmVycy5yZWplY3QoY29uZmxpY3RFcnJvclJlZik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVycy5wcm9taXNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBxdWV1ZUl0ZW0gPSBjdHguaW52b2NhdGlvbnNRdWV1ZS5nZXQoY29ycmVsYXRpb25JZCk7XG4gICAgICBpZiAocXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnaG9vaycpIHtcbiAgICAgICAgcXVldWVJdGVtLmhhc0NvbmZsaWN0QXdhaXRlciA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudExvZ0VtcHR5KSB7XG4gICAgICAgIHNjaGVkdWxlV2hlbklkbGUoY3R4LCAoKSA9PiB7XG4gICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgIG5ldyBXb3JrZmxvd1N1c3BlbnNpb24oY3R4Lmludm9jYXRpb25zUXVldWUsIGN0eC5nbG9iYWxUaGlzKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBnZXRDb25mbGljdFByb21pc2VzLnB1c2gocmVzb2x2ZXJzKTtcbiAgICAgIHJldHVybiByZXNvbHZlcnMucHJvbWlzZTtcbiAgICB9XG5cbiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZGlzcG9zZSB0aGUgaG9va1xuICAgIGZ1bmN0aW9uIGRpc3Bvc2VIb29rKCk6IHZvaWQge1xuICAgICAgaWYgKGlzRGlzcG9zZWQpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBBbHJlYWR5IGRpc3Bvc2VkLCBub3RoaW5nIHRvIGRvXG4gICAgICB9XG4gICAgICBpc0Rpc3Bvc2VkID0gdHJ1ZTtcblxuICAgICAgLy8gSWYgdGhlIGV2ZW50IGxvZyBhbHJlYWR5IGNvbnRhaW5zIGhvb2tfZGlzcG9zZWQsIHRoaXMgaXMgYSByZXBsYXkg4oCUIG5vLW9wXG4gICAgICBpZiAoaGFzRGlzcG9zZWRFdmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBkaXNwb3NlZCBmbGFnIG9uIHRoZSBleGlzdGluZyBxdWV1ZSBpdGVtXG4gICAgICBjb25zdCBxdWV1ZUl0ZW0gPSBjdHguaW52b2NhdGlvbnNRdWV1ZS5nZXQoY29ycmVsYXRpb25JZCk7XG4gICAgICBpZiAocXVldWVJdGVtICYmIHF1ZXVlSXRlbS50eXBlID09PSAnaG9vaycpIHtcbiAgICAgICAgcXVldWVJdGVtLmRpc3Bvc2VkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gRHJhaW4gYW55IHBlbmRpbmcgcHJvbWlzZXMgdGhhdCBhcmUgd2FpdGluZyBmb3IgcGF5bG9hZHMuXG4gICAgICAvLyBXaXRob3V0IHRoaXMsIHByb21pc2VzIGNyZWF0ZWQgYnkgYGF3YWl0IGhvb2tgIG9yIHRoZSBhc3luYyBpdGVyYXRvcidzXG4gICAgICAvLyBgeWllbGQgYXdhaXQgdGhpc2Agd291bGQgaGFuZyBmb3JldmVyIHNpbmNlIHRoZSBldmVudCBjb25zdW1lciB3aWxsXG4gICAgICAvLyBuZXZlciBkZWxpdmVyIGFub3RoZXIgaG9va19yZWNlaXZlZCBhZnRlciBkaXNwb3NhbC5cbiAgICAgIGlmIChwcm9taXNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHByb21pc2VzLmxlbmd0aCA9IDA7XG4gICAgICAgIHNjaGVkdWxlV2hlbklkbGUoY3R4LCAoKSA9PiB7XG4gICAgICAgICAgY3R4Lm9uV29ya2Zsb3dFcnJvcihcbiAgICAgICAgICAgIG5ldyBXb3JrZmxvd1N1c3BlbnNpb24oY3R4Lmludm9jYXRpb25zUXVldWUsIGN0eC5nbG9iYWxUaGlzKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB3ZWJob29rTG9nZ2VyLmRlYnVnKCdIb29rIGRpc3Bvc2VkJywgeyBjb3JyZWxhdGlvbklkLCB0b2tlbiB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBob29rOiBIb29rPFQ+ID0ge1xuICAgICAgdG9rZW4sXG5cbiAgICAgIGdldENvbmZsaWN0KCk6IFByb21pc2U8UnVuPHVua25vd24+IHwgbnVsbD4ge1xuICAgICAgICByZXR1cm4gY3JlYXRlR2V0Q29uZmxpY3RQcm9taXNlKCk7XG4gICAgICB9LFxuXG4gICAgICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vVGhlblByb3BlcnR5OiBJbnRlbnRpb25hbGx5IHRoZW5hYmxlXG4gICAgICB0aGVuPFRSZXN1bHQxID0gVCwgVFJlc3VsdDIgPSBuZXZlcj4oXG4gICAgICAgIG9uZnVsZmlsbGVkPzogKCh2YWx1ZTogVCkgPT4gVFJlc3VsdDEgfCBQcm9taXNlTGlrZTxUUmVzdWx0MT4pIHwgbnVsbCxcbiAgICAgICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KSB8IG51bGxcbiAgICAgICk6IFByb21pc2U8VFJlc3VsdDEgfCBUUmVzdWx0Mj4ge1xuICAgICAgICByZXR1cm4gY3JlYXRlSG9va1Byb21pc2UoKS50aGVuKG9uZnVsZmlsbGVkLCBvbnJlamVjdGVkKTtcbiAgICAgIH0sXG5cbiAgICAgIC8vIFN1cHBvcnQgYGZvciBhd2FpdCAoY29uc3QgcGF5bG9hZCBvZiBob29rKSB7IOKApiB9YCBzeW50YXhcbiAgICAgIGFzeW5jICpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgICB3aGlsZSAoIWlzRGlzcG9zZWQpIHtcbiAgICAgICAgICB5aWVsZCBhd2FpdCB0aGlzO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBkaXNwb3NlOiBkaXNwb3NlSG9vayxcblxuICAgICAgW1N5bWJvbC5kaXNwb3NlXTogZGlzcG9zZUhvb2ssXG4gICAgfTtcblxuICAgIC8vIEFsc28gcmVnaXN0ZXIgd2l0aCB0aGUgVk0ncyBTeW1ib2wuZGlzcG9zZSBzbyBgdXNpbmdgIHdvcmtzIGluc2lkZVxuICAgIC8vIHRoZSB3b3JrZmxvdyBzYW5kYm94ICh0aGUgVk0gbWF5IGhhdmUgYSBwb2x5ZmlsbGVkIFN5bWJvbC5kaXNwb3NlXG4gICAgLy8gdGhhdCBkaWZmZXJzIGZyb20gdGhlIGhvc3QncykuXG4gICAgY29uc3Qgdm1EaXNwb3NlID0gY3R4Lmdsb2JhbFRoaXMuU3ltYm9sLmRpc3Bvc2U7XG4gICAgaWYgKHZtRGlzcG9zZSAmJiB2bURpc3Bvc2UgIT09IFN5bWJvbC5kaXNwb3NlKSB7XG4gICAgICAoaG9vayBhcyBhbnkpW3ZtRGlzcG9zZV0gPSBkaXNwb3NlSG9vaztcbiAgICB9XG5cbiAgICByZXR1cm4gaG9vaztcbiAgfTtcbn1cbiJdfQ==
|
package/dist/workflow.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AA+GjD,wBAAsB,WAAW,CAC/B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,KAAK,EAAE,EACf,aAAa,EAAE,SAAS,GAAG,SAAS,GACnC,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,CA0vB/B"}
|