footprintjs 9.26.0 → 9.28.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/AGENTS.md +3 -0
- package/CLAUDE.md +5 -4
- package/README.md +4 -0
- package/dist/advanced.js +3 -2
- package/dist/esm/advanced.d.ts +2 -2
- package/dist/esm/advanced.js +2 -2
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/lib/builder/FlowChartBuilder.d.ts +10 -0
- package/dist/esm/lib/builder/FlowChartBuilder.js +27 -13
- package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +45 -12
- package/dist/esm/lib/engine/handlers/ResumeEntry.d.ts +195 -0
- package/dist/esm/lib/engine/handlers/ResumeEntry.js +471 -0
- package/dist/esm/lib/engine/handlers/SubflowExecutor.d.ts +6 -0
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +43 -10
- package/dist/esm/lib/engine/handlers/index.d.ts +2 -0
- package/dist/esm/lib/engine/handlers/index.js +2 -1
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +1 -1
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +49 -4
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +64 -13
- package/dist/esm/lib/engine/types.d.ts +30 -11
- package/dist/esm/lib/engine/types.js +1 -1
- package/dist/esm/lib/pause/index.d.ts +1 -1
- package/dist/esm/lib/pause/index.js +1 -1
- package/dist/esm/lib/pause/types.d.ts +93 -5
- package/dist/esm/lib/pause/types.js +57 -3
- package/dist/esm/lib/runner/FlowChartExecutor.d.ts +8 -10
- package/dist/esm/lib/runner/FlowChartExecutor.js +153 -181
- package/dist/esm/lib/time-travel/bundles.js +11 -1
- package/dist/index.js +1 -1
- package/dist/lib/builder/FlowChartBuilder.js +27 -13
- package/dist/lib/engine/handlers/ChildrenExecutor.js +45 -12
- package/dist/lib/engine/handlers/ResumeEntry.js +478 -0
- package/dist/lib/engine/handlers/SubflowExecutor.js +43 -10
- package/dist/lib/engine/handlers/index.js +4 -2
- package/dist/lib/engine/traversal/FlowchartTraverser.js +64 -13
- package/dist/lib/engine/types.js +1 -1
- package/dist/lib/pause/index.js +1 -1
- package/dist/lib/pause/types.js +57 -3
- package/dist/lib/runner/FlowChartExecutor.js +153 -181
- package/dist/lib/time-travel/bundles.js +11 -1
- package/dist/types/advanced.d.ts +2 -2
- package/dist/types/index.d.ts +1 -1
- package/dist/types/lib/builder/FlowChartBuilder.d.ts +10 -0
- package/dist/types/lib/engine/handlers/ResumeEntry.d.ts +195 -0
- package/dist/types/lib/engine/handlers/SubflowExecutor.d.ts +6 -0
- package/dist/types/lib/engine/handlers/index.d.ts +2 -0
- package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +1 -1
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +49 -4
- package/dist/types/lib/engine/types.d.ts +30 -11
- package/dist/types/lib/pause/index.d.ts +1 -1
- package/dist/types/lib/pause/types.d.ts +93 -5
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +8 -10
- package/package.json +1 -1
package/dist/lib/engine/types.js
CHANGED
|
@@ -33,4 +33,4 @@ var ArrayMergeMode;
|
|
|
33
33
|
/** Overwrite parent array with subflow output. Use for Dynamic loops. */
|
|
34
34
|
ArrayMergeMode["Replace"] = "replace";
|
|
35
35
|
})(ArrayMergeMode || (exports.ArrayMergeMode = ArrayMergeMode = {}));
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2VuZ2luZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0c7OztBQWNILDhDQUE4RTtBQUFyRSx5R0FBQSxhQUFhLE9BQUE7QUFBRSx5R0FBQSxhQUFhLE9BQUE7QUFBRSx1R0FBQSxXQUFXLE9BQUE7QUFlbEQsb0NBQW9DO0FBQ3BDLHdEQUF3RDtBQUMzQyxRQUFBLGFBQWEsR0FBWTtJQUNwQyxJQUFJLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3ZFLEdBQUcsRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDckUsS0FBSyxFQUFFLENBQUMsT0FBYSxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztJQUN6RSxLQUFLLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3pFLElBQUksRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDeEUsQ0FBQztBQXVLRiw4RUFBOEU7QUFDOUUsVUFBVTtBQUNWLDhFQUE4RTtBQUU5RTs7R0FFRztBQUNILElBQVksY0FLWDtBQUxELFdBQVksY0FBYztJQUN4Qix3RkFBd0Y7SUFDeEYsbUNBQWlCLENBQUE7SUFDakIseUVBQXlFO0lBQ3pFLHFDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFMVyxjQUFjLDhCQUFkLGNBQWMsUUFLekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHR5cGVzLnRzIOKAlCBBbGwgdHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIGVuZ2luZSBsaWJyYXJ5LlxuICpcbiAqIENlbnRyYWxpemVzIHR5cGUgZGVmaW5pdGlvbnMgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICogRXZlcnkgaGFuZGxlciByZWNlaXZlcyBIYW5kbGVyRGVwcyAodGhlIERJIGJhZykgaW5zdGVhZCBvZiBpbXBvcnRpbmcgdGhlIHRyYXZlcnNlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNoYXJlZE1lbW9yeSB9IGZyb20gJy4uL21lbW9yeS9TaGFyZWRNZW1vcnkuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd0NvbnRyb2xUeXBlLCBGbG93TWVzc2FnZSB9IGZyb20gJy4uL21lbW9yeS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNjb3BlUHJvdGVjdGlvbk1vZGUgfSBmcm9tICcuLi9zY29wZS9wcm90ZWN0aW9uL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRGVjaWRlciwgU2VsZWN0b3IsIFN0YWdlTm9kZSB9IGZyb20gJy4vZ3JhcGgvU3RhZ2VOb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgSUNvbnRyb2xGbG93TmFycmF0aXZlIH0gZnJvbSAnLi9uYXJyYXRpdmUvdHlwZXMuanMnO1xuXG4vLyBSZS1leHBvcnQgU3RhZ2VOb2RlIHR5cGVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHR5cGUgeyBEZWNpZGVyLCBTZWxlY3RvciwgU3RhZ2VOb2RlIH0gZnJvbSAnLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuXG4vLyBSZS1leHBvcnQgcGF1c2UgdHlwZXMgZnJvbSBwYXVzZS8gbGlicmFyeVxuZXhwb3J0IHR5cGUgeyBGbG93Y2hhcnRDaGVja3BvaW50LCBQYXVzYWJsZUhhbmRsZXIsIFBhdXNlUmVzdWx0IH0gZnJvbSAnLi4vcGF1c2UvaW5kZXguanMnO1xuZXhwb3J0IHsgaXNQYXVzZVJlc3VsdCwgaXNQYXVzZVNpZ25hbCwgUGF1c2VTaWduYWwgfSBmcm9tICcuLi9wYXVzZS9pbmRleC5qcyc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTG9nZ2VyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIE1pbmltYWwgbG9nZ2luZyBjb250cmFjdC4gTWlycm9ycyBDb25zb2xlIEFQSSBzdWJzZXQuICovXG5leHBvcnQgaW50ZXJmYWNlIElMb2dnZXIge1xuICBpbmZvKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGxvZyhtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBkZWJ1ZyhtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBlcnJvcihtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICB3YXJuKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG59XG5cbi8qKiBEZWZhdWx0IGNvbnNvbGUtYmFzZWQgbG9nZ2VyLiAqL1xuLyogaXN0YW5idWwgaWdub3JlIG5leHQgLS0gdHJpdmlhbCBjb25zb2xlIGRlbGVnYXRpb24gKi9cbmV4cG9ydCBjb25zdCBkZWZhdWx0TG9nZ2VyOiBJTG9nZ2VyID0ge1xuICBpbmZvOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuaW5mbyhtZXNzYWdlLCAuLi5hcmdzKSxcbiAgbG9nOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUubG9nKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICBkZWJ1ZzogKG1lc3NhZ2U/OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmRlYnVnKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICBlcnJvcjogKG1lc3NhZ2U/OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmVycm9yKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICB3YXJuOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUud2FybihtZXNzYWdlLCAuLi5hcmdzKSxcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3RhZ2UgRnVuY3Rpb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogQ2FsbGJhY2sgdGhhdCByZWNlaXZlcyB0b2tlbnMgZHVyaW5nIHN0cmVhbWluZy4gKi9cbmV4cG9ydCB0eXBlIFN0cmVhbUNhbGxiYWNrID0gKHRva2VuOiBzdHJpbmcpID0+IHZvaWQ7XG5cbi8qKlxuICogVGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBmb3Igc3RhZ2UgaGFuZGxlcnMuXG4gKiAtIFRPdXQ6IHJldHVybiB0eXBlIHByb2R1Y2VkIGJ5IHRoZSBzdGFnZVxuICogLSBUU2NvcGU6IHRoZSBzY29wZSBvYmplY3QgcGFzc2VkIHRvIHRoZSBzdGFnZVxuICogLSBPcHRpb25hbCAzcmQgcGFyYW1ldGVyIGBzdHJlYW1DYWxsYmFja2AgaW5qZWN0ZWQgZm9yIHN0cmVhbWluZyBzdGFnZXMuXG4gKi9cbmV4cG9ydCB0eXBlIFN0YWdlRnVuY3Rpb248VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IChcbiAgc2NvcGU6IFRTY29wZSxcbiAgYnJlYWtQaXBlbGluZTogKCkgPT4gdm9pZCxcbiAgc3RyZWFtQ2FsbGJhY2s/OiBTdHJlYW1DYWxsYmFjayxcbikgPT4gUHJvbWlzZTxUT3V0IHwgdm9pZD4gfCBUT3V0IHwgdm9pZDtcblxuLyoqXG4gKiBTdGFnZSBmdW5jdGlvbiBmb3IgcGF1c2FibGUgc3RhZ2VzIOKAlCByZXR1cm4gdmFsdWUgaXMgdGhlIHBhdXNlIGRhdGEgKGFueSB0eXBlKS5cbiAqIFJldHVybiBub24tdm9pZCB0byBwYXVzZSwgcmV0dXJuIHZvaWQgdG8gY29udGludWUgbm9ybWFsbHkuXG4gKi9cbmV4cG9ydCB0eXBlIFBhdXNhYmxlU3RhZ2VGdW5jdGlvbjxUU2NvcGUgPSBhbnk+ID0gKFxuICBzY29wZTogVFNjb3BlLFxuICBicmVha1BpcGVsaW5lOiAoKSA9PiB2b2lkLFxuKSA9PiBQcm9taXNlPHVua25vd24+IHwgdW5rbm93bjtcblxuLyoqIEZhY3RvcnkgdGhhdCBjcmVhdGVzIGEgc2NvcGUgaW5zdGFuY2UgZm9yIGVhY2ggc3RhZ2UuICovXG5leHBvcnQgdHlwZSBTY29wZUZhY3Rvcnk8VFNjb3BlID0gYW55PiA9IChcbiAgY29udGV4dDogU3RhZ2VDb250ZXh0LFxuICBzdGFnZU5hbWU6IHN0cmluZyxcbiAgcmVhZE9ubHlDb250ZXh0PzogdW5rbm93bixcbiAgZXhlY3V0aW9uRW52PzogRXhlY3V0aW9uRW52LFxuKSA9PiBUU2NvcGU7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3RyZWFtaW5nXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgU3RyZWFtVG9rZW5IYW5kbGVyID0gKHN0cmVhbUlkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyID0gKHN0cmVhbUlkOiBzdHJpbmcsIGZ1bGxUZXh0Pzogc3RyaW5nKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbUhhbmRsZXJzIHtcbiAgb25Ub2tlbj86IFN0cmVhbVRva2VuSGFuZGxlcjtcbiAgb25TdGFydD86IFN0cmVhbUxpZmVjeWNsZUhhbmRsZXI7XG4gIG9uRW5kPzogU3RyZWFtTGlmZWN5Y2xlSGFuZGxlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBQYXJhbGxlbC1mb3ItZWFjaCAoZHluYW1pYyBmYW4tb3V0KVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQSBidWlsdCBjaGFydCwgYXMgYGFkZFBhcmFsbGVsRm9yRWFjaGAncyBgYnJhbmNoYCBmYWN0b3J5IHJldHVybnMgaXQuXG4gKlxuICogU3RydWN0dXJhbGx5IHRoZSBzdWJzZXQgb2YgYEZsb3dDaGFydGAgdGhlIGVuZ2luZSBuZWVkcyB0byBtb3VudCBhIGJyYW5jaCDigJRcbiAqIGRlY2xhcmVkIGhlcmUgcmF0aGVyIHRoYW4gaW1wb3J0ZWQgc28gYGVuZ2luZS9gIGtlZXBzIGl0cyBvbmUtd2F5IGRlcGVuZGVuY3lcbiAqIG9uIGBidWlsZGVyL2AuIEFueSBgZmxvd0NoYXJ0KC4uLikuYnVpbGQoKWAgcmVzdWx0IHNhdGlzZmllcyBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCcmFuY2hDaGFydDxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIHN0YWdlTWFwOiBNYXA8c3RyaW5nLCBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4+O1xuICBzdWJmbG93cz86IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfT47XG4gIGJ1aWxkVGltZVN0cnVjdHVyZT86IHVua25vd247XG59XG5cbi8qKlxuICogUnVudGltZSBmYW4tb3V0IGNvbmZpZyDigJQgb25lIGJyYW5jaCBwZXIgaXRlbSwgYnJhbmNoIENPVU5UIGRlY2lkZWQgYXRcbiAqIHJ1bnRpbWUgZnJvbSB0aGUgcGF5bG9hZC4gRGVzaWduOiBkb2NzL2Rlc2lnbi9leGVjdXRpb24tY29udHJvbC5tZCAoRDIpLlxuICpcbiAqIEVhY2ggYnJhbmNoIHJ1bnMgYXMgYSBnZW5lcmF0ZWQgU1VCRkxPVyAoaXNvbGF0ZWQgcnVudGltZSwgb3duIGNvbW1pdCBsb2csXG4gKiBhZGRyZXNzYWJsZSBhdCBgPHN0YWdlSWQ+fjxpbmRleD5gIGluIGV2ZXJ5IHRyYWNlIHF1ZXJ5KSwgd2hpY2ggaXMgd2hhdFxuICogbWFrZXMgYnJhbmNoZXMgdW5hYmxlIHRvIGNvcnJ1cHQgZWFjaCBvdGhlcidzIGluLWZsaWdodCBzdGF0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJhbGxlbEZvckVhY2hDb25maWc8VEl0ZW0gPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICAvKipcbiAgICogUGlja3MgdGhlIGl0ZW1zIHRvIGZhbiBvdXQgb3ZlciwgZnJvbSB0aGUgbGl2ZSBzY29wZS4gUmVhZHMgaGVyZSBhcmVcbiAgICogdHJhY2tlZCBsaWtlIGFueSBvdGhlciBzdGFnZSByZWFkLCBzbyB0aGUgZmFuLW91dCdzIG93biBpbnB1dHMgc2hvdyB1cCBpblxuICAgKiB0aGUgdHJhY2UgYW5kIGluIGEgYmFja3dhcmQgc2xpY2UuXG4gICAqL1xuICBpdGVtczogKHNjb3BlOiBUU2NvcGUpID0+IHJlYWRvbmx5IFRJdGVtW107XG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIGNoYXJ0IGZvciBPTkUgaXRlbS4gQ2FsbGVkIG9uY2UgcGVyIGV4ZWN1dGVkIGJyYW5jaCwgd2l0aCB0aGVcbiAgICogaXRlbSBhbmQgaXRzIGluZGV4IOKAlCBjbG9zZSBvdmVyIHRoZW0sIG9yIHJlYWQgdGhlIGBpdGVtYCAvIGBpbmRleGAgdmFsdWVzXG4gICAqIHNlZWRlZCBpbnRvIHRoZSBicmFuY2gncyBvd24gc2NvcGUuXG4gICAqL1xuICBicmFuY2g6IChpdGVtOiBUSXRlbSwgaW5kZXg6IG51bWJlcikgPT4gQnJhbmNoQ2hhcnQ7XG4gIC8qKlxuICAgKiBIYXJkIGNlaWxpbmcgb24gYnJhbmNoZXMgcGVyIGV4ZWN1dGlvbi4gUkVRVUlSRUQ6IGFuIHVuYm91bmRlZCBmYW4tb3V0XG4gICAqIGRyaXZlbiBieSBtb2RlbCBvdXRwdXQgaXMgYSByZXNvdXJjZSBhdHRhY2ssIHNvIHRoZXJlIGlzIG5vIGRlZmF1bHQgdG9cbiAgICogZm9yZ2V0LiBFeHRyYSBpdGVtcyBkbyBub3QgcnVuIOKAlCB0aGUgdHJ1bmNhdGlvbiBpcyByZWNvcmRlZCwgbmV2ZXIgc2lsZW50LlxuICAgKi9cbiAgbWF4QnJhbmNoZXM6IG51bWJlcjtcbiAgLyoqXG4gICAqIFN0YXRlIGtleSB0aGUgb3JkZXJlZCByZXN1bHRzIGFycmF5IGlzIHdyaXR0ZW4gdG8gb24gdGhlIHBhcmVudCBzY29wZS5cbiAgICogUkVRVUlSRUQg4oCUIGEga2V5IGRlcml2ZWQgZnJvbSB0aGUgc3RhZ2UgaWQgY291bGQgc2lsZW50bHkgb3ZlcndyaXRlIHN0YXRlXG4gICAqIHRoZSBjaGFydCBhbHJlYWR5IG93bnMuXG4gICAqL1xuICBpbnRvOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGYW4tb3V0IGVycm9yIHBvbGljeSDigJQgdGhlIFNBTUUgcG9saWN5IHRoZSBleGlzdGluZyBwYXJhbGxlbCBmYW4tb3V0IHVzZXMuXG4gICAqIGB0cnVlYCA9IGBQcm9taXNlLmFsbGAgKHRoZSBmaXJzdCBmYWlsaW5nIGJyYW5jaCByZWplY3RzIHRoZSBzdGFnZSk7XG4gICAqIG9taXR0ZWQvZmFsc2UgPSBiZXN0LWVmZm9ydCBgUHJvbWlzZS5hbGxTZXR0bGVkYCAoZXZlcnkgYnJhbmNoIHJ1bnM7IGFcbiAgICogZmFpbGVkIGJyYW5jaCdzIHNsb3QgaW4gdGhlIHJlc3VsdHMgYXJyYXkgaXMgYHVuZGVmaW5lZGApLlxuICAgKi9cbiAgZmFpbEZhc3Q/OiBib29sZWFuO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJldHJ5IChwZXItc3RhZ2UgZGVjbGFyYXRpdmUgcG9saWN5KVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRGVjbGFyYXRpdmUgcGVyLXN0YWdlIHJldHJ5IHBvbGljeS5cbiAqXG4gKiBXSFkgdGhpcyBleGlzdHM6IGEgcmV0cnkgaGFuZC1yb2xsZWQgaW5zaWRlIGEgc3RhZ2UgZnVuY3Rpb24gaXMgaW52aXNpYmxlIHRvXG4gKiB0aGUgdHJhY2UuIFRoZSBzdGFnZSBzaG93cyBvbmUgZXhlY3V0aW9uLCB0aGUgY29tbWl0IGxvZyBzaG93cyBvbmUgYnVuZGxlLFxuICogYW5kIHRoZSB0d28gZmFpbGVkIGNhbGxzIHRoYXQgcHJlY2VkZWQgdGhlIHN1Y2Nlc3NmdWwgb25lIGxlZnQgbm8gbWFya1xuICogYW55d2hlcmUg4oCUIGFuIHVuZXhwbGFpbmVkIGJlaGF2aW91ciBpbiBhIGxpYnJhcnkgd2hvc2Ugd2hvbGUgdGhlc2lzIGlzIHRoYXRcbiAqIG5vdGhpbmcgaW52aXNpYmxlIGhhcHBlbnMuIERlY2xhcmVkIGhlcmUgaW5zdGVhZCwgZXZlcnkgYXR0ZW1wdCBpcyBwYXJ0IG9mXG4gKiB0aGUgcmVjb3JkOiBlYWNoIGZhaWxlZCBhdHRlbXB0IGZpcmVzIGBGbG93UmVjb3JkZXIub25TdGFnZVJldHJ5YCB3aXRoIHRoZVxuICogYXR0ZW1wdCBudW1iZXIsIHRoZSB3YWl0LCBhbmQgdGhlIHN0cnVjdHVyZWQgZXJyb3IuXG4gKlxuICogQSBQT0xJQ1ksIG5vdCBhIHN0YWdlIGtpbmQg4oCUIGByZXRyeWAgc2l0cyBvbiBhIG5vcm1hbCBzdGFnZSB0aGUgd2F5XG4gKiBgaXNQYXVzYWJsZWAgLyBgaXNTdHJlYW1pbmdgIGRvLiBUaGUgc2VyaWFsaXplZCBub2RlIGB0eXBlYCBpcyB1bmNoYW5nZWQgYW5kXG4gKiBldmVyeSBleGlzdGluZyBjb25zdW1lciBrZWVwcyByZW5kZXJpbmcgdGhlIHN0YWdlIGV4YWN0bHkgYXMgYmVmb3JlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogZmxvd0NoYXJ0PFN0YXRlPignRmV0Y2ggdXNlcicsIGZldGNoRm4sICdmZXRjaC11c2VyJylcbiAqICAgLnJldHJ5KHsgYXR0ZW1wdHM6IDMsIGJhY2tvZmZNczogKG4pID0+IDEwMCAqIDIgKiogKG4gLSAxKSB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlQb2xpY3kge1xuICAvKipcbiAgICogSG93IG1hbnkgdGltZXMgdGhlIHN0YWdlIGZ1bmN0aW9uIG1heSBydW4gaW4gdG90YWwsIElOQ0xVRElORyB0aGUgZmlyc3RcbiAgICogcnVuLiBNdXN0IGJlIGFuIGludGVnZXIgPj0gMTsgYDFgIG1lYW5zIFwibm8gcmV0cnlcIiAoYSBkZWNsYXJlZCBuby1vcCxcbiAgICogYWNjZXB0ZWQgc28gYSBwb2xpY3kgY2FuIGJlIHN3aXRjaGVkIG9mZiB3aXRob3V0IGRlbGV0aW5nIGl0KS5cbiAgICovXG4gIGF0dGVtcHRzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0byB3YWl0IGJlZm9yZSB0aGUgTkVYVCBhdHRlbXB0LiBFaXRoZXIgYSBmaXhlZCBudW1iZXIgb2ZcbiAgICogbWlsbGlzZWNvbmRzLCBvciBhIGZ1bmN0aW9uIG9mIHRoZSBhdHRlbXB0IHRoYXQganVzdCBGQUlMRUQgKDEtYmFzZWQpXG4gICAqIHJldHVybmluZyBtaWxsaXNlY29uZHMg4oCUIGAobikgPT4gMTAwICogMiAqKiAobiAtIDEpYCBpcyBleHBvbmVudGlhbFxuICAgKiBiYWNrb2ZmLiBPbWl0dGVkIChvciBhIG5vbi1maW5pdGUgLyBuZWdhdGl2ZSByZXN1bHQpIG1lYW5zIG5vIHdhaXQuXG4gICAqXG4gICAqIFRoZSB3YWl0IGlzIGEgcGxhaW4gYXdhaXRlZCB0aW1lciB0aGF0IGlzIENBTkNFTExFRCBieSB0aGUgcnVuJ3NcbiAgICogYEFib3J0U2lnbmFsYC4gSXQgaXMgbm90IGEgcGF1c2U6IGEgY2hhcnQgY2Fubm90IGJlIGNoZWNrcG9pbnRlZCBpbiB0aGVcbiAgICogbWlkZGxlIG9mIGEgYmFja29mZi5cbiAgICovXG4gIGJhY2tvZmZNcz86IG51bWJlciB8ICgoYXR0ZW1wdDogbnVtYmVyKSA9PiBudW1iZXIpO1xuICAvKipcbiAgICogSXMgVEhJUyBlcnJvciB3b3J0aCBhbm90aGVyIGF0dGVtcHQ/IERlZmF1bHRzIHRvIHJldHJ5aW5nIGV2ZXJ5IGVycm9yLlxuICAgKiBSZXR1cm5pbmcgYGZhbHNlYCBlbmRzIHRoZSBzdGFnZSBpbW1lZGlhdGVseSBvbiB0aGUgbm9ybWFsIGVycm9yIHBhdGgg4oCUXG4gICAqIGV4YWN0bHkgYXMgaWYgbm8gcG9saWN5IGhhZCBiZWVuIGRlY2xhcmVkLCBhbmQgd2l0aCBubyByZXRyeSBldmVudCAodGhlXG4gICAqIHBvbGljeSBjaG9zZSBub3QgdG8gYWN0OyB0aGVyZSBpcyBub3RoaW5nIHRvIHJlcG9ydCB0aGF0IHRoZSBlcnJvciBldmVudFxuICAgKiBkb2VzIG5vdCBhbHJlYWR5IHNheSkuXG4gICAqXG4gICAqIEEgdGhyb3cgZnJvbSB0aGlzIHByZWRpY2F0ZSBpcyB0cmVhdGVkIGFzIGBmYWxzZWAg4oCUIGEgYnJva2VuIHByZWRpY2F0ZVxuICAgKiBtdXN0IG5vdCB0dXJuIGEgZmFpbGluZyBzdGFnZSBpbnRvIGFuIGluZmluaXRlIHJldHJ5IGxvb3AuXG4gICAqL1xuICByZXRyeU9uPzogKGVycm9yOiB1bmtub3duKSA9PiBib29sZWFuO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN1YmZsb3dcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENvbnRyb2xzIGhvdyBhcnJheSB2YWx1ZXMgZnJvbSBvdXRwdXRNYXBwZXIgYXJlIG1lcmdlZCBpbnRvIHBhcmVudCBzY29wZS5cbiAqL1xuZXhwb3J0IGVudW0gQXJyYXlNZXJnZU1vZGUge1xuICAvKiogQXBwZW5kIHN1YmZsb3cgb3V0cHV0IHRvIGV4aXN0aW5nIHBhcmVudCBhcnJheTogWy4uLmV4aXN0aW5nLCAuLi52YWx1ZV0uIERlZmF1bHQuICovXG4gIENvbmNhdCA9ICdjb25jYXQnLFxuICAvKiogT3ZlcndyaXRlIHBhcmVudCBhcnJheSB3aXRoIHN1YmZsb3cgb3V0cHV0LiBVc2UgZm9yIER5bmFtaWMgbG9vcHMuICovXG4gIFJlcGxhY2UgPSAncmVwbGFjZScsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd01vdW50T3B0aW9uczxUUGFyZW50U2NvcGUgPSBhbnksIFRTdWJmbG93SW5wdXQgPSBhbnksIFRTdWJmbG93T3V0cHV0ID0gYW55PiB7XG4gIGlucHV0TWFwcGVyPzogKHBhcmVudFNjb3BlOiBUUGFyZW50U2NvcGUpID0+IFRTdWJmbG93SW5wdXQ7XG4gIC8qKlxuICAgKiBNYXBzIHN1YmZsb3cgb3V0cHV0IGJhY2sgaW50byBwYXJlbnQgc2NvcGUuXG4gICAqXG4gICAqICoqQXJyYXkgbWVyZ2UgYmVoYXZpb3IqKiBpcyBjb250cm9sbGVkIGJ5IGBhcnJheU1lcmdlYDpcbiAgICogLSBgJ2NvbmNhdCdgIChkZWZhdWx0KTogYFsuLi5leGlzdGluZywgLi4udmFsdWVdYCDigJQgcmV0dXJuIG9ubHkgKipkZWx0YSoqIGl0ZW1zXG4gICAqIC0gYCdyZXBsYWNlJ2A6IG92ZXJ3cml0ZXMgdGhlIHBhcmVudCB2YWx1ZSDigJQgcmV0dXJuIHRoZSBmdWxsIGFycmF5XG4gICAqXG4gICAqIFNjYWxhciB2YWx1ZXMgYXJlIGFsd2F5cyByZXBsYWNlZCByZWdhcmRsZXNzIG9mIGBhcnJheU1lcmdlYC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBEZWx0YSBtb2RlIChkZWZhdWx0KSDigJQgcmV0dXJuIG9ubHkgbmV3IGl0ZW1zLCBjb25jYXQgYXBwZW5kc1xuICAgKiBvdXRwdXRNYXBwZXI6IChzZikgPT4gKHsgbWVzc2FnZXM6IHNmLm5ld01lc3NhZ2VzIH0pXG4gICAqXG4gICAqIC8vIFJlcGxhY2UgbW9kZSDigJQgcmV0dXJuIGZ1bGwgYXJyYXksIHBhcmVudCB2YWx1ZSBpcyBvdmVyd3JpdHRlblxuICAgKiAvLyBVc2VmdWwgaW4gRHluYW1pYyBsb29wcyB3aGVyZSB0aGUgc3ViZmxvdyByZWNvbXB1dGVzIHRoZSBmdWxsIHZhbHVlIGVhY2ggaXRlcmF0aW9uXG4gICAqIG91dHB1dE1hcHBlcjogKHNmKSA9PiAoeyB0b29sRGVzY3JpcHRpb25zOiBzZi50b29sRGVzY3JpcHRpb25zIH0pLFxuICAgKiBhcnJheU1lcmdlOiBBcnJheU1lcmdlTW9kZS5SZXBsYWNlLFxuICAgKlxuICAgKiAvLyBTY2FsYXJzIGFyZSBmaW5lIGluIGJvdGggbW9kZXMg4oCUIGFsd2F5cyByZXBsYWNlZFxuICAgKiBvdXRwdXRNYXBwZXI6IChzZikgPT4gKHsgc3RhdHVzOiBzZi5yZXN1bHQsIGNvdW50OiBzZi50b3RhbCB9KVxuICAgKiBgYGBcbiAgICovXG4gIG91dHB1dE1hcHBlcj86IChzdWJmbG93T3V0cHV0OiBUU3ViZmxvd091dHB1dCwgcGFyZW50U2NvcGU6IFRQYXJlbnRTY29wZSkgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKlxuICAgKiBDb250cm9scyBob3cgYXJyYXkgdmFsdWVzIGZyb20gb3V0cHV0TWFwcGVyIGFyZSBtZXJnZWQgaW50byBwYXJlbnQgc2NvcGUuXG4gICAqIEFwcGxpZXMgb25seSB0byB0b3AtbGV2ZWwgYXJyYXkga2V5cy4gTmVzdGVkIGFycmF5cyBpbnNpZGUgb2JqZWN0c1xuICAgKiBhbHdheXMgdXNlIGFwcGVuZCAoYXBwZW5kVG9BcnJheSkgcmVnYXJkbGVzcyBvZiB0aGlzIHNldHRpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IEFycmF5TWVyZ2VNb2RlLkNvbmNhdFxuICAgKi9cbiAgYXJyYXlNZXJnZT86IEFycmF5TWVyZ2VNb2RlO1xuXG4gIC8qKlxuICAgKiBTVFJVQ1RVUkUtT05MWTogdGhlIGRvd25zdHJlYW0gc3RhZ2UgaWQgdGhpcyBicmFuY2gncyBjb252ZXJnZW5jZSBlZGdlXG4gICAqIHBvaW50cyB0bywgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCBcImNvbnZlcmdlIGF0IHRoZSBuZXh0IGxpbmVhciBzdGFnZS5cIlxuICAgKlxuICAgKiBXaGVuIGEgZm9yay9zZWxlY3Rvci9kZWNpZGVyIGJyYW5jaCBjYXJyaWVzIGBjb252ZXJnZUF0YCwgaXRzIHZpc3VhbGl6ZWRcbiAgICogYG5leHRgIGVkZ2UgaXMgZmlyZWQgdG8gdGhlIG5hbWVkIHN0YWdlIGluc3RlYWQgb2YgdG8gdGhlIHNoYXJlZFxuICAgKiBjb252ZXJnZW5jZSBub2RlIGl0cyBzaWJsaW5ncyB1c2UuIFRoaXMgZXhwcmVzc2VzIGFuIHVuZXF1YWwtZGVwdGggbWVyZ2VcbiAgICog4oCUIGUuZy4gYSBgdG9vbHNgIHNsb3QgdGhhdCBieXBhc3NlcyB0aGUgYG1lc3NhZ2VBUElgIGFzc2VtYmx5IG5vZGUgYW5kXG4gICAqIHBhaXJzIHdpdGggaXRzIG91dHB1dCBhdCBgY2FsbC1sbG1gIChzbyBgY2FsbC1sbG1gIHJlYWRzIGFzIGEgMi1wYXJlbnRcbiAgICogbWVyZ2UpLCBmYWl0aGZ1bCB0byB0aGUgQW50aHJvcGljIHdpcmUgcHJvdG9jb2wgKHN5c3RlbSttZXNzYWdlcyA9IHRoZVxuICAgKiBtZXNzYWdlIHBheWxvYWQ7IHRvb2xzID0gYSBzZXBhcmF0ZSB0b3AtbGV2ZWwgZmllbGQpLlxuICAgKlxuICAgKiAqKlRoaXMgYWZmZWN0cyB0aGUgU1RSVUNUVVJFL3RvcG9sb2d5IGdyYXBoIG9ubHkqKiDigJQgdGhlIHJ1bnRpbWUgaXNcbiAgICogdW5jaGFuZ2VkICh0aGUgYnJhbmNoJ3Mgb3V0cHV0cyByaWRlIHNoYXJlZCBzY29wZTsgdGhlIG5hbWVkIHRhcmdldCByZWFkc1xuICAgKiB0aGVtIHdoZW4gaXQgcnVucykuIEl0IGRvZXMgTk9UIGludHJvZHVjZSBhIGpvaW4gYmFycmllci4gVGhlIHRhcmdldCBpcyBhXG4gICAqIEZPUldBUkQgc3RhZ2UgKGFkZGVkIGxhdGVyIGluIHRoZSBjaGFpbiksIHNvIGl0IGlzIG5vdCB2YWxpZGF0ZWQgYXRcbiAgICogYnJhbmNoLWRlY2xhcmF0aW9uIHRpbWUuXG4gICAqL1xuICBjb252ZXJnZUF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCwgYW4gaW5uZXIgYHNjb3BlLiRicmVhayhyZWFzb24pYCBjYWxsIGluc2lkZSB0aGlzIHN1YmZsb3dcbiAgICogcHJvcGFnYXRlcyB1cCB0byB0aGUgcGFyZW50IOKAlCBpLmUuLCB0aGUgcGFyZW50J3MgYGJyZWFrRmxhZ2AgaXMgc2V0XG4gICAqIGFmdGVyIHRoZSBzdWJmbG93IGV4aXRzLCB0ZXJtaW5hdGluZyB0aGUgcGFyZW50J3Mgb3V0ZXIgbG9vcCB0b28uXG4gICAqXG4gICAqICoqRGVmYXVsdDogYGZhbHNlYCoqIChjdXJyZW50IGJlaGF2aW91ciDigJQgaW5uZXIgYnJlYWsgc3RvcHMgb25seSB0aGVcbiAgICogc3ViZmxvdzsgcGFyZW50IGNvbnRpbnVlcykuXG4gICAqXG4gICAqICMjIFdoZW4gdG8gdXNlXG4gICAqXG4gICAqIFNldCBgcHJvcGFnYXRlQnJlYWs6IHRydWVgIG9uIHN1YmZsb3cgbW91bnRzIHRoYXQgcmVwcmVzZW50XG4gICAqICoqdGVybWluYWwqKiBicmFuY2hlcyDigJQgXCJpZiB0aGlzIHN1YmZsb3cgZmlyZXMsIHRoZSBvdXRlciBsb29wIGlzXG4gICAqIGRvbmVcIi4gRXhhbXBsZXM6XG4gICAqXG4gICAqIC0gQSBodW1hbi1yZXZpZXcgcnVubmVyIHRoYXQgdGFrZXMgb3ZlciBmcm9tIGFuIGFnZW50J3MgdG9vbC1jYWxsaW5nXG4gICAqICAgbG9vcCBhbmQgcHJvZHVjZXMgdGhlIGZpbmFsIHJlc3BvbnNlLlxuICAgKiAtIEEgc2FmZXR5LWdhdGUgc3ViZmxvdyB0aGF0IGhhbHRzIHRoZSBvdXRlciB3b3JrZmxvdyB3aGVuIGEgcG9saWN5XG4gICAqICAgdmlvbGF0aW9uIGlzIGRldGVjdGVkLlxuICAgKiAtIEFuIGVycm9yLXJlY292ZXJ5IHN1YmZsb3cgdGhhdCByZXN0b3JlcyBzdGF0ZSBhbmQgdGhlbiB0ZXJtaW5hdGVzLlxuICAgKlxuICAgKiAjIyBTZW1hbnRpY3NcbiAgICpcbiAgICogMS4gSW5zaWRlIHRoZSBzdWJmbG93LCBhIHN0YWdlIGNhbGxzIGBzY29wZS4kYnJlYWsocmVhc29uKWAuXG4gICAqIDIuIFRoZSBzdWJmbG93J3Mgb3duIGV4ZWN1dGlvbiBzdG9wcyAobm9ybWFsIGAkYnJlYWtgIGJlaGF2aW91cikuXG4gICAqIDMuIGBTdWJmbG93RXhlY3V0b3JgIGluc3BlY3RzIHRoZSBzdWJmbG93J3MgZXhpdCBzdGF0ZS4gSWZcbiAgICogICAgYHByb3BhZ2F0ZUJyZWFrID09PSB0cnVlYCBBTkQgdGhlIGlubmVyIGJyZWFrIGZpcmVkLCBpdCBmb3J3YXJkc1xuICAgKiAgICB0aGUgYnJlYWsgKGFuZCBpdHMgcmVhc29uKSB0byB0aGUgcGFyZW50J3MgYGJyZWFrRmxhZ2AuXG4gICAqIDQuIFRoZSBwYXJlbnQgdHJhdmVyc2VyIHNlZXMgYHNob3VsZEJyZWFrYCBvbiBpdHMgbmV4dCBzdGVwIGFuZCBleGl0cy5cbiAgICogNS4gQSBgRmxvd1JlY29yZGVyLm9uQnJlYWtgIGV2ZW50IGZpcmVzIGF0IHRoZSBwYXJlbnQtbW91bnQgbGV2ZWwgd2l0aFxuICAgKiAgICBgcHJvcGFnYXRlZEZyb21TdWJmbG93YCA9IHRoZSBzdWJmbG93J3MgaWQgYW5kIHRoZSBpbm5lciByZWFzb24uXG4gICAqXG4gICAqICMjIFBhcmFsbGVsL2Zhbi1vdXRcbiAgICpcbiAgICogRm9sbG93cyB0aGUgZXhpc3RpbmcgbGlicmFyeSBydWxlIGluIGBDaGlsZHJlbkV4ZWN1dG9yYDogdGhlIHBhcmVudFxuICAgKiBicmVha3Mgb25seSB3aGVuICoqZXZlcnkqKiBjaGlsZCBvZiBhIGZvcmsgYnJva2UuIEEgc2luZ2xlXG4gICAqIGBwcm9wYWdhdGVCcmVhazogdHJ1ZWAgc3ViZmxvdyBjb250cmlidXRpbmcgaXRzIGJyZWFrIHRvIHRoZSBjb3VudFxuICAgKiBkb2VzIG5vdCBvbiBpdHMgb3duIHRlcm1pbmF0ZSB0aGUgcGFyZW50IGZhbi1vdXQuXG4gICAqXG4gICAqICMjIG91dHB1dE1hcHBlciBzdGlsbCBydW5zXG4gICAqXG4gICAqIFRoZSBzdWJmbG93J3MgYG91dHB1dE1hcHBlcmAgKGlmIHN1cHBsaWVkKSBBTFdBWVMgcnVucyBiZWZvcmUgdGhlXG4gICAqIGJyZWFrIHByb3BhZ2F0ZXMsIHNvIHRoZSBzdWJmbG93J3MgcGFydGlhbCBzdGF0ZSBpcyBzdGlsbCB3cml0dGVuIHRvXG4gICAqIHRoZSBwYXJlbnQgc2NvcGUuIFRoaXMgaXMgaW50ZW50aW9uYWwg4oCUIHRoZSB0eXBpY2FsIHVzZSBjYXNlIGlzIGFuXG4gICAqIFwiZXNjYWxhdGlvblwiIHN1YmZsb3cgd2hvc2Ugb3V0cHV0IElTIHRoZSBmaW5hbCBhbnN3ZXIgdGhhdCBuZWVkcyB0b1xuICAgKiBsYW5kIGluIHRoZSBwYXJlbnQgc2NvcGUgYmVmb3JlIHRoZSBvdXRlciBsb29wIHRlcm1pbmF0ZXMuIElmIHlvdVxuICAgKiB3YW50IHRvIHN1cHByZXNzIG91dHB1dCBtYXBwaW5nIG9uIGJyZWFrLCBjaGVjayB0aGUgYnJlYWsgc3RhdGVcbiAgICogaW5zaWRlIHlvdXIgYG91dHB1dE1hcHBlcmAgYW5kIHJldHVybiBge31gIGVhcmx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcHJvcGFnYXRlQnJlYWs/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZWNsYXJlZCB0YWdzICg5LjIxLjEpIGZvciB0aGUgTU9VTlQgaXRzZWxmIOKAlCB0aGUgTkFNRVMgdGhlIGF1dGhvciBwdXRzXG4gICAqIG9uIHRoaXMgbW91bnQgYXQgYnVpbGQgdGltZSwgbGFuZGVkIGJ5IHRoZSBzYW1lIGBhcHBseVRhZ3NgIGV2ZXJ5IG90aGVyXG4gICAqIGBvcHRpb25zLnRhZ3NgIHNpdGUgdXNlcywgd2l0aCB0aGUgc2FtZSByZWZ1c2FscyAoZW1wdHksIG5vbi1zdHJpbmcsIHRoZVxuICAgKiByZXNlcnZlZCBgfmAgbWFya2VyLCBhIGR1cGxpY2F0ZSwgYSBzZWNvbmQgZGVjbGFyYXRpb24pLlxuICAgKlxuICAgKiBBIG1vdW50IGlzIGEgc3RhZ2UgdGhhdCBjb21taXRzOiBpdHMgZmlyc3QgYnVuZGxlIGluIHRoZSBQQVJFTlQgbG9nIGlzIGFcbiAgICogc3RvcCBpbiBgY29tbWl0U3RvcHNgLCBzbyBgdGFnU3RvcHNgIGtlZXBzIGl0IGxpa2UgYW55IHRhZ2dlZCBzdGFnZSBhbmRcbiAgICogY2FycmllcyB0aGVzZSBuYW1lcyBhcyBgU3RvcC5tZXRhYC4gU3RhbXBlZCBvbiB0aGF0IGZpcnN0IGJ1bmRsZSBvbmx5XG4gICAqICh0aGUgbW91bnQncyBleGl0IGJ1bmRsZSBjYXJyaWVzIG5vbmUg4oCUIHRoZSBvbmNlLXBlci1leGVjdXRpb24gbGF3KS5cbiAgICogVGhlIHN1YmZsb3cncyBPV04gbG9nIGlzIHVudG91Y2hlZDogaXRzIGlubmVyIHN0YWdlcyBkZWNsYXJlIHRoZWlyIG93blxuICAgKiB0YWdzLCBhbmQgYGRyaWxsKG1vdW50KWAgcmVhZHMgdGhvc2Ugb2ZmIHRoZSBpbm5lciBsb2cuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIE9OTFkgdGFnIHNpdGUgZm9yIGEgZm9yay1jaGlsZCBtb3VudCAoYGFkZFN1YkZsb3dDaGFydGApIG9yXG4gICAqIGEgYnJhbmNoIG1vdW50IChgYWRkU3ViRmxvd0NoYXJ0QnJhbmNoYCkg4oCUIGFmdGVyIHRob3NlIHRoZSBjdXJzb3Igc3RpbGxcbiAgICogcG9pbnRzIGF0IHRoZSBwYXJlbnQsIHNvIGAudGFnKClgIHJlZnVzZXMgcmF0aGVyIHRoYW4gbWlzLWF0dHJpYnV0ZS4gQVxuICAgKiBsaW5lYXIgbW91bnQgKGBhZGRTdWJGbG93Q2hhcnROZXh0YCkgbW92ZXMgdGhlIGN1cnNvciwgc28gYC50YWcoKWAgd29ya3NcbiAgICogdGhlcmUgdG9vOyBkZWNsYXJlIGluIG9uZSBwbGFjZSwgbm90IGJvdGguXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLmFkZFNlbGVjdG9yRnVuY3Rpb24oJ1Nsb3RzJywgcGlja1Nsb3RzLCAnc2xvdHMnKVxuICAgKiAgIC5hZGRTdWJGbG93Q2hhcnRCcmFuY2goJ21lbW9yeScsIG1lbW9yeUNoYXJ0LCAnTWVtb3J5JywgeyB0YWdzOiBbJ3Nsb3Q6bWVtb3J5J10gfSlcbiAgICogICAuYWRkU3ViRmxvd0NoYXJ0QnJhbmNoKCd0b29scycsIHRvb2xzQ2hhcnQsICdUb29scycsIHsgdGFnczogWydzbG90OnRvb2xzJ10gfSlcbiAgICogLmVuZCgpXG4gICAqIGBgYFxuICAgKi9cbiAgdGFncz86IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YmZsb3dSZXN1bHQge1xuICBzdWJmbG93SWQ6IHN0cmluZztcbiAgc3ViZmxvd05hbWU6IHN0cmluZztcbiAgdHJlZUNvbnRleHQ6IHtcbiAgICAvKipcbiAgICAgKiBUaGUgc3ViZmxvdydzIGZpbmFsIHN0YXRlLiBUaGUgdHJhdmVyc2VyJ3MgcmVjb3JkIGhvbGRzIHRoZSBMSVZFIGhlYXBcbiAgICAgKiDigJQgd2hhdCBhIHBsYWluIGBnZXRTbmFwc2hvdCgpYCBhbmQgdGhlIGNoZWNrcG9pbnQgc2VlLiBVbmRlclxuICAgICAqIGBnZXRTbmFwc2hvdCh7IHJlZGFjdDogdHJ1ZSB9KWAgdGhlIGV4ZWN1dG9yIHNlcnZlcyB0aGUgc3ViZmxvdydzIG93blxuICAgICAqIHJlZGFjdGVkIG1pcnJvciBoZXJlIGluc3RlYWQgKDkuMjAuMDsgYGhhbmRsZXJzL3NlcnZlZFN1YmZsb3dSZXN1bHRzYCksXG4gICAgICogd2hpY2ggaXMgZXhhY3RseSB3aGF0IGBzdGF0ZUF0YCBmb2xkcyBgaGlzdG9yeWAgdG8uXG4gICAgICovXG4gICAgZ2xvYmFsQ29udGV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgc3RhZ2VDb250ZXh0czogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaGlzdG9yeTogdW5rbm93bltdO1xuICAgIC8qKlxuICAgICAqIFRoZSBzdWJmbG93J3MgT1dOIGZvbGQgYmFzZSDigJQgdGhlIHN0YXRlIGl0cyBpc29sYXRlZCBydW50aW1lIHN0YXJ0ZWRcbiAgICAgKiBmcm9tLCBiZWZvcmUgaXRzIGZpcnN0IGNvbW1pdC4gVGhlIHNpYmxpbmcgb2ZcbiAgICAgKiBgUnVudGltZVNuYXBzaG90LmluaXRpYWxTdGF0ZWAsIGNhcnJpZWQgaGVyZSBzbyBhIHN1YmZsb3cncyBgaGlzdG9yeWBcbiAgICAgKiBjYW4gYmUgZm9sZGVkIG9mZmxpbmUgZXhhY3RseSBsaWtlIHRoZSBydW4ncyBsb2cgKGBzdGF0ZUF0YCxcbiAgICAgKiBgdGltZVRyYXZlbCguLi4pLmRyaWxsKG1vdW50KWApLiBGcm96ZW4gYW5kIGRldGFjaGVkLlxuICAgICAqXG4gICAgICogTm9ybWFsbHkgYHt9YDogYSBzdWJmbG93J3MgYGlucHV0TWFwcGVyYCBzZWVkIGlzIGl0c2VsZiB0aGUgZmlyc3RcbiAgICAgKiBDT01NSVQgaW4gYGhpc3RvcnlgICh0aGUgcm9vdCBjb250ZXh0IGNvbW1pdHMgaXQpLCBub3QgYSBwcmUtcnVuIGJhc2UuXG4gICAgICovXG4gICAgaW5pdGlhbFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH07XG4gIHBhcmVudFN0YWdlSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVTdHJ1Y3R1cmU/OiB1bmtub3duO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN1YmZsb3cgVHJhdmVyc2VyIEZhY3Rvcnlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5IOKAlCBDcmVhdGVzIGEgRmxvd2NoYXJ0VHJhdmVyc2VyIGZvciBzdWJmbG93IGV4ZWN1dGlvbi5cbiAqXG4gKiBJbmplY3RlZCBpbnRvIFN1YmZsb3dFeGVjdXRvciB0byBicmVhayB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeTpcbiAqIEZsb3djaGFydFRyYXZlcnNlciDihpIgU3ViZmxvd0V4ZWN1dG9yIOKGkiBGbG93Y2hhcnRUcmF2ZXJzZXIuXG4gKlxuICogVGhlIGZhY3RvcnkgY2FwdHVyZXMgcGFyZW50IHRyYXZlcnNlciBjb25maWcgKHN0YWdlTWFwLCBzY29wZUZhY3RvcnksIG5hcnJhdGl2ZSwgZXRjLilcbiAqIGluIGEgY2xvc3VyZS4gU3ViZmxvd0V4ZWN1dG9yIGNhbGxzIGl0IHdpdGggc3ViZmxvdy1zcGVjaWZpYyBvdmVycmlkZXMgKHJvb3QsIHJ1bnRpbWUsIGlucHV0KS5cbiAqIFRoZSByZXR1cm5lZCB0cmF2ZXJzZXIgdXNlcyB0aGUgU0FNRSA3LXBoYXNlIGFsZ29yaXRobSBhcyB0aGUgdG9wLWxldmVsIHRyYXZlcnNlcixcbiAqIHNvIGRlY2lkZXJzLCBzZWxlY3RvcnMsIGxvb3BzLCBsYXp5IHN1YmZsb3dzLCBhbmQgYWJvcnQgc2lnbmFscyBhbGwgd29yayBpbnNpZGUgc3ViZmxvd3MuXG4gKi9cbmV4cG9ydCB0eXBlIFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSAob3B0aW9uczoge1xuICAvKiogUm9vdCBub2RlIG9mIHRoZSBzdWJmbG93ICh3aXRoIGlzU3ViZmxvd1Jvb3Qgc3RyaXBwZWQpLiAqL1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgLyoqIElzb2xhdGVkIGV4ZWN1dGlvbiBydW50aW1lIGZvciB0aGUgc3ViZmxvdy4gKi9cbiAgZXhlY3V0aW9uUnVudGltZTogSUV4ZWN1dGlvblJ1bnRpbWU7XG4gIC8qKiBNYXBwZWQgaW5wdXQgZnJvbSBwYXJlbnQgc2NvcGUgKGJlY29tZXMgcmVhZE9ubHlDb250ZXh0IGZvciBzdGFnZXMpLiAqL1xuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duO1xuICAvKiogU3ViZmxvdyBpZGVudGlmaWVyIOKAlCB1c2VkIGFzIGJyYW5jaFBhdGggZm9yIG5hcnJhdGl2ZSBjb250ZXh0LiAqL1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSRkMtMDAzIEQxOiBydW50aW1lU3RhZ2VJZCBvZiB0aGUgc3ViZmxvdyBNT1VOVCBzdGFnZSBpbiB0aGUgcGFyZW50XG4gICAqIHRyYXZlcnNlci4gQmVjb21lcyB0aGUgYHBhcmVudFJ1bnRpbWVTdGFnZUlkYCBmYWxsYmFjayBmb3IgdGhlIHN1YmZsb3cnc1xuICAgKiByb290IHN0YWdlIHNvIHJ1bnRpbWUgYW5jZXN0b3IgY2hhaW5zIGNyb3NzIHN1YmZsb3cgYm91bmRhcmllcy5cbiAgICovXG4gIHBhcmVudE1vdW50UnVudGltZVN0YWdlSWQ/OiBzdHJpbmc7XG59KSA9PiBTdWJmbG93VHJhdmVyc2VySGFuZGxlPFRPdXQsIFRTY29wZT47XG5cbi8qKlxuICogSGFuZGxlIHJldHVybmVkIGJ5IFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5LlxuICogUHJvdmlkZXMgZXhlY3V0ZSgpICsgYWNjZXNzIHRvIG5lc3RlZCBzdWJmbG93IHJlc3VsdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1RyYXZlcnNlckhhbmRsZTxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgLyoqIEV4ZWN1dGUgdGhlIHN1YmZsb3cncyBncmFwaCB1c2luZyB0aGUgZnVsbCA3LXBoYXNlIHRyYXZlcnNhbCBhbGdvcml0aG0uICovXG4gIGV4ZWN1dGUoKTogUHJvbWlzZTxUcmF2ZXJzYWxSZXN1bHQ+O1xuICAvKiogQ29sbGVjdCBuZXN0ZWQgc3ViZmxvdyByZXN1bHRzIChmcm9tIHN1YmZsb3dzIG1vdW50ZWQgaW5zaWRlIHRoaXMgc3ViZmxvdykuICovXG4gIGdldFN1YmZsb3dSZXN1bHRzKCk6IE1hcDxzdHJpbmcsIFN1YmZsb3dSZXN1bHQ+O1xuICAvKipcbiAgICogRmluYWwgYnJlYWsgc3RhdGUgb2YgdGhlIHN1YmZsb3cgYWZ0ZXIgYGV4ZWN1dGUoKWAgcmV0dXJucy5cbiAgICpcbiAgICogICAtIGBzaG91bGRCcmVhazogdHJ1ZWAgIOKGkiBhIHN0YWdlIGluc2lkZSB0aGUgc3ViZmxvdyBjYWxsZWRcbiAgICogICAgIGBzY29wZS4kYnJlYWsocmVhc29uKWAsIHN0b3BwaW5nIHRoZSBzdWJmbG93J3Mgb3duIHRyYXZlcnNhbC5cbiAgICogICAtIGByZWFzb25gICAgICAgICAgICAgIOKGkiB0aGUgb3B0aW9uYWwgc3RyaW5nIHBhc3NlZCB0byBgJGJyZWFrYC5cbiAgICpcbiAgICogVXNlZCBieSBgU3ViZmxvd0V4ZWN1dG9yYCB0byBpbXBsZW1lbnQgYFN1YmZsb3dNb3VudE9wdGlvbnMucHJvcGFnYXRlQnJlYWtgOlxuICAgKiBpZiB0aGUgbW91bnQgb3B0cyBpbiBBTkQgdGhlIHN1YmZsb3cgYnJva2UsIHRoZSBwYXJlbnQncyBicmVhayBmbGFnIGlzXG4gICAqIGZvcndhcmRlZC5cbiAgICovXG4gIGdldEJyZWFrU3RhdGUoKTogeyBzaG91bGRCcmVhazogYm9vbGVhbjsgcmVhc29uPzogc3RyaW5nIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhlY3V0aW9uIFJ1bnRpbWUgSW50ZXJmYWNlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBJRXhlY3V0aW9uUnVudGltZSDigJQgSW50ZXJmYWNlIGZvciB0aGUgcnVudGltZSBlbnZpcm9ubWVudC5cbiAqXG4gKiBEZWZpbmVzIHRoZSBjb250cmFjdCB0aGF0IGVuZ2luZSBoYW5kbGVycyBuZWVkIGZyb20gdGhlIHJ1bm5lciBsYXllcixcbiAqIGF2b2lkaW5nIGNpcmN1bGFyIGltcG9ydHMgYmV0d2VlbiBlbmdpbmUvIGFuZCBydW5uZXIvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElFeGVjdXRpb25SdW50aW1lIHtcbiAgZ2xvYmFsU3RvcmU6IHsgZ2V0U3RhdGUoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfTtcbiAgLyoqXG4gICAqIFRoZSByZWRhY3RlZCBtaXJyb3Igb2YgYGdsb2JhbFN0b3JlYCDigJQgcHJlc2VudCBvbmNlXG4gICAqIHtAbGluayBlbmFibGVSZWRhY3RlZE1pcnJvcn0gcmFuIChhIHJ1biB3aXRoIGEgcG9saWN5KSwgZWxzZSBhYnNlbnQuXG4gICAqIGBTdWJmbG93RXhlY3V0b3JgIHJlYWRzIGl0IHRvIHNlcnZlIGEgc3ViZmxvdydzIHN0YXRlICg5LjIwLjApLlxuICAgKi9cbiAgcmVkYWN0ZWRTdG9yZT86IFNoYXJlZE1lbW9yeTtcbiAgcm9vdFN0YWdlQ29udGV4dDogU3RhZ2VDb250ZXh0O1xuICBleGVjdXRpb25IaXN0b3J5OiB7IGxpc3QoKTogdW5rbm93bltdIH07XG4gIC8qKlxuICAgKiBPcHQgaW4gdG8gdGhlIHJlZGFjdGVkIG1pcnJvciDigJQgYEV4ZWN1dGlvblJ1bnRpbWUuZW5hYmxlUmVkYWN0ZWRNaXJyb3JgLlxuICAgKiBPcHRpb25hbCBvbiB0aGUgZHVjayB0eXBlIHNvIGJhcmUgcnVudGltZXMgKHRlc3RzKSBuZWVkIG5vdCBpbXBsZW1lbnQgaXQ7XG4gICAqIGBTdWJmbG93RXhlY3V0b3JgIGNhbGxzIGl0IG9uIGEgbmVzdGVkIHJ1bnRpbWUgZXhhY3RseSB3aGVuIHRoZVxuICAgKiBwYXJlbnQtbW91bnQgY29udGV4dCBjYXJyaWVzIHRoZSBydW4ncyBtaXJyb3IuXG4gICAqL1xuICBlbmFibGVSZWRhY3RlZE1pcnJvcj8oKTogdm9pZDtcbiAgZ2V0U25hcHNob3Qob3B0aW9ucz86IHsgcmVkYWN0PzogYm9vbGVhbiB9KToge1xuICAgIHNoYXJlZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBleGVjdXRpb25UcmVlOiB1bmtub3duO1xuICAgIC8qKiBUaGUgY29tbWl0IGxvZydzIGZvbGQgYmFzZSDigJQgc2VlIGBSdW50aW1lU25hcHNob3QuaW5pdGlhbFN0YXRlYC4gKi9cbiAgICBpbml0aWFsU3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb21taXRMb2c6IHVua25vd25bXTtcbiAgICAvKiogRHVhbC1rZXllZCBieSBzdWJmbG93IHBhdGggKGxhc3QgaXRlcmF0aW9uKSBBTkQgcGVyLWV4ZWN1dGlvbiBtb3VudCBydW50aW1lU3RhZ2VJZFxuICAgICAqICAoZWFjaCBpdGVyYXRpb24pIOKAlCBzZWUgUnVudGltZVNuYXBzaG90LnN1YmZsb3dSZXN1bHRzIC8gc3ViZmxvdy1jb21taXQtdmlzaWJpbGl0eS4gKi9cbiAgICBzdWJmbG93UmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJlY29yZGVycz86IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0+O1xuICB9O1xuICBzZXRSb290T2JqZWN0KHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuICBnZXRQaXBlbGluZXMoKTogc3RyaW5nW107XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhlY3V0aW9uIEVudmlyb25tZW50IOKAlCByZWFkLW9ubHksIHByb3BhZ2F0ZXMgdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBFeGVjdXRpb25FbnYg4oCUIGluZnJhc3RydWN0dXJlIHZhbHVlcyB0aGF0IHByb3BhZ2F0ZSB0aHJvdWdoIG5lc3RlZCBleGVjdXRvcnMuXG4gKlxuICogTGlrZSBgcHJvY2Vzcy5lbnZgIGZvciBmbG93Y2hhcnRzOiByZWFkLW9ubHksIGluaGVyaXRlZCBieSBjaGlsZCBleGVjdXRvcnMsXG4gKiBpbmZyYXN0cnVjdHVyZS1vbmx5IChub3QgYnVzaW5lc3MgbG9naWMpLlxuICpcbiAqIExpdG11cyB0ZXN0OiBDcmVhdGVkIGV4dGVybmFsIHRvIHRoZSBmbG93Y2hhcnQgKyBwYXNzZWQgaW4gZm9yIGV4ZWN1dGlvbiA9IGVudi5cbiAqIEJ1c2luZXNzIGNvbmZpZyBmb3IgYSBzcGVjaWZpYyBmbG93Y2hhcnQgPSBhcmdzIChnZXRBcmdzKCkpLlxuICpcbiAqIEludGVudGlvbmFsbHkgYSBjbG9zZWQgdHlwZSDigJQgbm90IGV4dGVuc2libGUgdG8gcHJldmVudCBjb3VwbGluZyBiZXR3ZWVuXG4gKiBwYXJlbnQgYW5kIGNoaWxkIGZsb3djaGFydHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0aW9uRW52IHtcbiAgLyoqIEFib3J0U2lnbmFsIGZvciBjb29wZXJhdGl2ZSBjYW5jZWxsYXRpb24gYWNyb3NzIG5lc3RlZCBleGVjdXRvcnMuICovXG4gIHJlYWRvbmx5IHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAvKiogVGltZW91dCBidWRnZXQgaW4gbWlsbGlzZWNvbmRzLiAqL1xuICByZWFkb25seSB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKiBUcmFjZSBpZGVudGlmaWVyIGZvciBkaXN0cmlidXRlZCB0cmFjaW5nIC8gb2JzZXJ2YWJpbGl0eS4gKi9cbiAgcmVhZG9ubHkgdHJhY2VJZD86IHN0cmluZztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBIYW5kbGVyIERlcGVuZGVuY2llcyAoREkgYmFnKSDigJQgd2FzIFBpcGVsaW5lQ29udGV4dFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogSGFuZGxlckRlcHMg4oCUIERlcGVuZGVuY3kgaW5qZWN0aW9uIGJhZyBwYXNzZWQgdG8gYWxsIGhhbmRsZXIgbW9kdWxlcy5cbiAqXG4gKiBQcm92aWRlcyBzaGFyZWQgc3RhdGUgKHN0YWdlTWFwLCBydW50aW1lLCBzY29wZUZhY3RvcnksIGV0Yy4pIHdpdGhvdXRcbiAqIGhhbmRsZXJzIG5lZWRpbmcgdG8gaW1wb3J0IHRoZSB0cmF2ZXJzZXIgZGlyZWN0bHkuIEF2b2lkcyBjaXJjdWxhciBkZXBzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhhbmRsZXJEZXBzPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBzdGFnZU1hcDogTWFwPHN0cmluZywgU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+PjtcbiAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIGV4ZWN1dGlvblJ1bnRpbWU6IElFeGVjdXRpb25SdW50aW1lO1xuICBzY29wZUZhY3Rvcnk6IFNjb3BlRmFjdG9yeTxUU2NvcGU+O1xuICBzdWJmbG93cz86IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfT47XG4gIHRocm90dGxpbmdFcnJvckNoZWNrZXI/OiAoZXJyb3I6IHVua25vd24pID0+IGJvb2xlYW47XG4gIHN0cmVhbUhhbmRsZXJzPzogU3RyZWFtSGFuZGxlcnM7XG4gIHNjb3BlUHJvdGVjdGlvbk1vZGU6IFNjb3BlUHJvdGVjdGlvbk1vZGU7XG4gIHJlYWRPbmx5Q29udGV4dD86IHVua25vd247XG4gIC8qKiBFeGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHByb3BhZ2F0ZXMgdG8gc3ViZmxvd3MgYXV0b21hdGljYWxseS4gKi9cbiAgZXhlY3V0aW9uRW52PzogRXhlY3V0aW9uRW52O1xuICBuYXJyYXRpdmVHZW5lcmF0b3I6IElDb250cm9sRmxvd05hcnJhdGl2ZTtcbiAgbG9nZ2VyOiBJTG9nZ2VyO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqXG4gICAqIE9uIHJlc3VtZSwgdGhlIHBlci1zdWJmbG93IHNjb3BlIGNhcHR1cmVzIGZyb20gdGhlIGNoZWNrcG9pbnQuXG4gICAqIEtleWVkIGJ5IHBhdGgtcHJlZml4ZWQgYHN1YmZsb3dJZGAgKG1hdGNoZXMgYFBhdXNlU2lnbmFsLnN1YmZsb3dQYXRoYCkuXG4gICAqXG4gICAqIGBTdWJmbG93RXhlY3V0b3JgIGNvbnN1bHRzIHRoaXMgb24gZW50cnk6IGlmIGEga2V5IG1hdGNoZXMgdGhlXG4gICAqIGN1cnJlbnQgc3ViZmxvdyBpZCwgdGhlIG5lc3RlZCBydW50aW1lIGlzIHNlZWRlZCBmcm9tIHRoaXMgc3RhdGVcbiAgICogYW5kIHRoZSBpbnB1dE1hcHBlciBpcyBTS0lQUEVEICh0aGUgY2FwdHVyZWQgc3RhdGUgYWxyZWFkeVxuICAgKiByZWZsZWN0cyBwb3N0LWlucHV0IHByZS1wYXVzZSBtZW1vcnkpLiBUaGlzIGlzIHdoYXQgbWFrZXNcbiAgICogY3Jvc3MtZXhlY3V0b3IgcmVzdW1lIHdvcmsgZm9yIHBhdXNlcyBJTlNJREUgYSBzdWJmbG93LlxuICAgKlxuICAgKiBVbmRlZmluZWQgb24gbm9ybWFsIGBydW4oKWAgcGF0aHMg4oCUIG9ubHkgdGhlIHJlc3VtZSBwYXRoIHNldHMgaXQuXG4gICAqL1xuICBzdWJmbG93U3RhdGVzRm9yUmVzdW1lPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xufVxuXG4vKiogT3B0aW9ucyBmb3IgRmxvd0NoYXJ0RXhlY3V0b3IucnVuKCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bk9wdGlvbnMge1xuICAvKiogQWJvcnRTaWduYWwgZm9yIGNvb3BlcmF0aXZlIGNhbmNlbGxhdGlvbi4gKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gQ3JlYXRlcyBhbiBpbnRlcm5hbCBBYm9ydENvbnRyb2xsZXIuICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFJ1bnRpbWUgaW5wdXQgZGF0YSBmb3IgdGhlIHBpcGVsaW5lLlxuICAgKiBCZWNvbWVzIHRoZSByZWFkT25seUNvbnRleHQgYWNjZXNzaWJsZSB2aWEgYHNjb3BlLmdldEFyZ3MoKWAuXG4gICAqIFN0YWdlcyBjYW5ub3Qgb3ZlcndyaXRlIHRoZXNlIGtleXMgd2l0aCBgc2V0VmFsdWUoKWAuXG4gICAqL1xuICBpbnB1dD86IHVua25vd247XG4gIC8qKlxuICAgKiBFeGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHJlYWQtb25seSBpbmZyYXN0cnVjdHVyZSB2YWx1ZXMgdGhhdCBwcm9wYWdhdGVcbiAgICogdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzIChsaWtlIGBwcm9jZXNzLmVudmAgZm9yIGZsb3djaGFydHMpLlxuICAgKiBBY2Nlc3NpYmxlIHZpYSBgc2NvcGUuZ2V0RW52KClgLiBJbmhlcml0ZWQgYnkgc3ViZmxvd3MgYXV0b21hdGljYWxseS5cbiAgICovXG4gIGVudj86IEV4ZWN1dGlvbkVudjtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBtYXhpbXVtIG5lc3RlZCBgZXhlY3V0ZU5vZGVgIGRlcHRoIGZvciB0aGlzIHJ1bi5cbiAgICogRGVmYXVsdHMgdG8gYEZsb3djaGFydFRyYXZlcnNlci5NQVhfRVhFQ1VURV9ERVBUSGAgKDUwMCkuXG4gICAqXG4gICAqIERlcHRoIGNvdW50cyBUUkVFIG5lc3Rpbmcgb25seSDigJQgZm9yayBjaGlsZHJlbiwgZGVjaWRlci9zZWxlY3RvciBicmFuY2hcbiAgICogZGlzcGF0Y2gsIHJlY3Vyc2l2ZSBjb21wb3NpdGlvbi4gTGluZWFyIGNoYWlucyBhbmQgbG9vcCBpdGVyYXRpb25zIHJ1blxuICAgKiBvbiBhIGZsYXQgdHJhbXBvbGluZSBhbmQgbmV2ZXIgY29uc3VtZSBkZXB0aCwgc28gdGhpcyByYXJlbHkgbmVlZHNcbiAgICogcmFpc2luZy4gTXVzdCBiZSA+PSAxLlxuICAgKi9cbiAgbWF4RGVwdGg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgbWF4aW11bSBsb29wIGl0ZXJhdGlvbnMgcGVyIG5vZGUgZm9yIHRoaXMgcnVuICh0aGVcbiAgICogYENvbnRpbnVhdGlvblJlc29sdmVyYCBpbmZpbml0ZS1sb29wIGd1YXJkKS4gRGVmYXVsdHMgdG8gMTAwMC5cbiAgICogVGhpcyBpcyB0aGUgYmluZGluZyBjb25zdHJhaW50IGZvciBsb29wLWhlYXZ5IHBpcGVsaW5lcyDigJQgcmFpc2UgaXQgZm9yXG4gICAqIGxlZ2l0aW1hdGVseSBsb25nIGxvb3BzIChgbG9vcFRvYCBjaGFpbnMgcnVuIHdpdGggYSBmbGF0IHN0YWNrLCBzbyBoaWdoXG4gICAqIHZhbHVlcyBhcmUgc2FmZTsgbWVtb3J5IGZvciBzdGF0ZS9uYXJyYXRpdmUgc3RpbGwgZ3Jvd3MgcGVyIGl0ZXJhdGlvbikuXG4gICAqIEFsc28gYm91bmRzIHRoZSBydW4tdG90YWwgY2hhaW4gb2YgZnVuY3Rpb24tYmVhcmluZyBkeW5hbWljIGBuZXh0YFxuICAgKiBjb250aW51YXRpb25zIChmcmVzaCBub2RlcyByZXR1cm5lZCBmcm9tIHN0YWdlcykg4oCUIGEgcnVuYXdheSBkeW5hbWljXG4gICAqIGNoYWluIGVycm9ycyBpbnN0ZWFkIG9mIHJ1bm5pbmcgZm9yZXZlci5cbiAgICogUHJvcGFnYXRlcyB0byBzdWJmbG93cy4gTXVzdCBiZSA+PSAxLlxuICAgKi9cbiAgbWF4SXRlcmF0aW9ucz86IG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGbG93IENvbnRyb2wgTmFycmF0aXZlIOKAlCBjYW5vbmljYWwgZGVmaW5pdGlvbnMgbGl2ZSBpbiBtZW1vcnkvdHlwZXMudHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSB7IEZsb3dDb250cm9sVHlwZSwgRmxvd01lc3NhZ2UgfTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdW50aW1lIFN0cnVjdHVyZSBNZXRhZGF0YSAodXNlZCBieSBSdW50aW1lU3RydWN0dXJlTWFuYWdlcilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVTdHJ1Y3R1cmVNZXRhZGF0YSB7XG4gIHR5cGU6ICdzdGFnZScgfCAnZGVjaWRlcicgfCAnc2VsZWN0b3InIHwgJ2ZvcmsnIHwgJ3N0cmVhbWluZycgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICAvKiogVHJ1ZSBmb3IgYW4gYGFkZFBhcmFsbGVsRm9yRWFjaGAgZmFuLW91dCAodHlwZSBzdGF5cyBgJ2ZvcmsnYCkuICovXG4gIGlzRHluYW1pY1BhcmFsbGVsPzogYm9vbGVhbjtcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc0R5bmFtaWM/OiBib29sZWFuO1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBOb2RlIFJlc3VsdFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIE5vZGVSZXN1bHRUeXBlID0ge1xuICBpZDogc3RyaW5nO1xuICByZXN1bHQ6IHVua25vd247XG4gIGlzRXJyb3I/OiBib29sZWFuO1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGVjdXRpb24gUmVzcG9uc2Vcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBCcmFuY2hSZXN1bHQgPSB7XG4gIHJlc3VsdDogc3RyaW5nIHwgRXJyb3I7XG4gIGlzRXJyb3I6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBCcmFuY2hSZXN1bHRzID0geyBbYnJhbmNoSWQ6IHN0cmluZ106IEJyYW5jaFJlc3VsdCB9O1xuZXhwb3J0IHR5cGUgVHJhdmVyc2FsUmVzdWx0ID0gQnJhbmNoUmVzdWx0cyB8IHN0cmluZyB8IEVycm9yO1xuXG4vKiogUmV0dXJuZWQgYnkgcnVuKCkvcmVzdW1lKCkgd2hlbiBleGVjdXRpb24gcGF1c2VzLiAqL1xuZXhwb3J0IHR5cGUgUGF1c2VkUmVzdWx0ID0ge1xuICByZWFkb25seSBwYXVzZWQ6IHRydWU7XG4gIHJlYWRvbmx5IGNoZWNrcG9pbnQ6IGltcG9ydCgnLi4vcGF1c2UvdHlwZXMuanMnKS5GbG93Y2hhcnRDaGVja3BvaW50O1xufTtcblxuLyoqIEZ1bGwgcmV0dXJuIHR5cGUgb2YgRmxvd0NoYXJ0RXhlY3V0b3IucnVuKCkgYW5kIHJlc3VtZSgpLiAqL1xuZXhwb3J0IHR5cGUgRXhlY3V0b3JSZXN1bHQgPSBUcmF2ZXJzYWxSZXN1bHQgfCBQYXVzZWRSZXN1bHQ7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2VyaWFsaXplZCBQaXBlbGluZSBTdHJ1Y3R1cmUgKGZvciB2aXN1YWxpemF0aW9uKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplZFBpcGVsaW5lTm9kZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgdHlwZT86XG4gICAgfCAnc3RhZ2UnXG4gICAgfCAnZGVjaWRlcidcbiAgICB8ICdzZWxlY3RvcidcbiAgICB8ICdmb3JrJ1xuICAgIHwgJ3N0cmVhbWluZydcbiAgICB8ICdzdWJmbG93J1xuICAgIHwgJ2xvb3AnXG4gICAgfCAndXNlcidcbiAgICB8ICd0b29sJ1xuICAgIHwgJ2Z1bmN0aW9uJ1xuICAgIHwgJ3NlcXVlbmNlJztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogU2VyaWFsaXplZFBpcGVsaW5lTm9kZVtdO1xuICBuZXh0PzogU2VyaWFsaXplZFBpcGVsaW5lTm9kZTtcbiAgYnJhbmNoZXM/OiBSZWNvcmQ8c3RyaW5nLCBTZXJpYWxpemVkUGlwZWxpbmVOb2RlPjtcbiAgaGFzRGVjaWRlcj86IGJvb2xlYW47XG4gIGhhc1NlbGVjdG9yPzogYm9vbGVhbjtcbiAgaGFzU3VidHJlZT86IGJvb2xlYW47XG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xuICBpc1BhcmFsbGVsQ2hpbGQ/OiBib29sZWFuO1xuICBwYXJhbGxlbEdyb3VwSWQ/OiBzdHJpbmc7XG4gIGlzRHluYW1pYz86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIHRoaXMgc3RhZ2UgY2FuIHBhdXNlIGV4ZWN1dGlvbiAoUGF1c2FibGVIYW5kbGVyIHBhdHRlcm4pLiAqL1xuICBpc1BhdXNhYmxlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRydWUgZm9yIGFuIGBhZGRQYXJhbGxlbEZvckVhY2hgIGZhbi1vdXQg4oCUIGJyYW5jaCBDT1VOVCBkZWNpZGVkIGF0IHJ1bnRpbWVcbiAgICogZnJvbSB0aGUgcGF5bG9hZC4gQSBmbGFnLCBub3QgYSB0eXBlOiBgdHlwZWAgc3RheXMgYCdmb3JrJ2Agc28gZXZlcnlcbiAgICogZXhpc3RpbmcgY29uc3VtZXIgcmVuZGVycyBpdCBjb3JyZWN0bHkgKGl0IElTIGEgZmFuLW91dCksIGFuZCBhIGNvbnN1bWVyXG4gICAqIHRoYXQgd2FudHMgdG8gc2F5IFwib25lIGJyYW5jaCBwZXIgaXRlbVwiIGNhbiByZWFkIHRoaXMuXG4gICAqL1xuICBpc0R5bmFtaWNQYXJhbGxlbD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUb3RhbCBhdHRlbXB0cyB0aGlzIHN0YWdlJ3MgZnVuY3Rpb24gbWF5IHJ1biwgZnJvbSBpdHMgZGVjbGFyZWRcbiAgICoge0BsaW5rIFJldHJ5UG9saWN5fS4gUHJlc2VudCBvbmx5IHdoZW4gYSBwb2xpY3kgd2FzIGRlY2xhcmVkLiBUaGUgQ09VTlRcbiAgICogb25seSDigJQgYGJhY2tvZmZNc2AgYW5kIGByZXRyeU9uYCBjYW4gYmUgZnVuY3Rpb25zLCB3aGljaCBhIEpTT04tc2FmZSBzcGVjXG4gICAqIGNhbm5vdCBjYXJyeS5cbiAgICovXG4gIHJldHJ5QXR0ZW1wdHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBEZWNsYXJlZCB0YWdzICg5LjIxLjApIOKAlCB0aGUgbmFtZXMgdGhlIGF1dGhvciBwdXQgb24gdGhpcyBzdGFnZSBhdCBidWlsZFxuICAgKiB0aW1lLCBjb3BpZWQgYXMtaXMuIEZyZWUgc3RyaW5nczsgZm9vdHByaW50anMgYXNzaWducyB0aGVtIG5vIG1lYW5pbmcuXG4gICAqIEFic2VudCB3aGVuIHRoZSBzdGFnZSBkZWNsYXJlcyBub25lLlxuICAgKi9cbiAgdGFncz86IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEZsb3dDaGFydCBpcyBkZWZpbmVkIGluIGAuLi9idWlsZGVyL3R5cGVzLnRzYC4gVGhlIGVuZ2luZSBsYXllciBjb25zdW1lcyBpdFxuLy8gdmlhIGltcG9ydCBmcm9tIHRoZXJlLiBBIGR1cGxpY2F0ZSBtaW5pbWFsIGRlZmluaXRpb24gcHJldmlvdXNseSBsaXZlZCBoZXJlXG4vLyBhbmQgY2F1c2VkIFRTIGNvbmZ1c2lvbiBhdCBjb21wb3NpdGlvbiBib3VuZGFyaWVzIChDb21wb3NhYmxlUnVubmVyIHZzXG4vLyBhZGRTdWJGbG93Q2hhcnQgcGFyYW1ldGVyKS4gU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBub3cgbGl2ZXMgaW4gYnVpbGRlci8uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEFsaWFzIGZvciBTZXJpYWxpemVkUGlwZWxpbmVOb2RlIHVzZWQgYXMgZnVsbCBzdHJ1Y3R1cmUgKi9cbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSA9IFNlcmlhbGl6ZWRQaXBlbGluZU5vZGUgJiB7XG4gIGJyYW5jaElkcz86IHN0cmluZ1tdO1xuICBzdWJmbG93U3RydWN0dXJlPzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICBpdGVyYXRpb25Db3VudD86IG51bWJlcjtcbn07XG4iXX0=
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2VuZ2luZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7O0dBS0c7OztBQWVILDhDQUE4RTtBQUFyRSx5R0FBQSxhQUFhLE9BQUE7QUFBRSx5R0FBQSxhQUFhLE9BQUE7QUFBRSx1R0FBQSxXQUFXLE9BQUE7QUFlbEQsb0NBQW9DO0FBQ3BDLHdEQUF3RDtBQUMzQyxRQUFBLGFBQWEsR0FBWTtJQUNwQyxJQUFJLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3ZFLEdBQUcsRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDckUsS0FBSyxFQUFFLENBQUMsT0FBYSxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztJQUN6RSxLQUFLLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3pFLElBQUksRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDeEUsQ0FBQztBQXVLRiw4RUFBOEU7QUFDOUUsVUFBVTtBQUNWLDhFQUE4RTtBQUU5RTs7R0FFRztBQUNILElBQVksY0FLWDtBQUxELFdBQVksY0FBYztJQUN4Qix3RkFBd0Y7SUFDeEYsbUNBQWlCLENBQUE7SUFDakIseUVBQXlFO0lBQ3pFLHFDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFMVyxjQUFjLDhCQUFkLGNBQWMsUUFLekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHR5cGVzLnRzIOKAlCBBbGwgdHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIGVuZ2luZSBsaWJyYXJ5LlxuICpcbiAqIENlbnRyYWxpemVzIHR5cGUgZGVmaW5pdGlvbnMgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICogRXZlcnkgaGFuZGxlciByZWNlaXZlcyBIYW5kbGVyRGVwcyAodGhlIERJIGJhZykgaW5zdGVhZCBvZiBpbXBvcnRpbmcgdGhlIHRyYXZlcnNlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNoYXJlZE1lbW9yeSB9IGZyb20gJy4uL21lbW9yeS9TaGFyZWRNZW1vcnkuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd0NvbnRyb2xUeXBlLCBGbG93TWVzc2FnZSB9IGZyb20gJy4uL21lbW9yeS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNjb3BlUHJvdGVjdGlvbk1vZGUgfSBmcm9tICcuLi9zY29wZS9wcm90ZWN0aW9uL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRGVjaWRlciwgU2VsZWN0b3IsIFN0YWdlTm9kZSB9IGZyb20gJy4vZ3JhcGgvU3RhZ2VOb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgUXVldWVkUGF1c2UsIFJlc3VtZUVudHJ5IH0gZnJvbSAnLi9oYW5kbGVycy9SZXN1bWVFbnRyeS5qcyc7XG5pbXBvcnQgdHlwZSB7IElDb250cm9sRmxvd05hcnJhdGl2ZSB9IGZyb20gJy4vbmFycmF0aXZlL3R5cGVzLmpzJztcblxuLy8gUmUtZXhwb3J0IFN0YWdlTm9kZSB0eXBlcyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB0eXBlIHsgRGVjaWRlciwgU2VsZWN0b3IsIFN0YWdlTm9kZSB9IGZyb20gJy4vZ3JhcGgvU3RhZ2VOb2RlLmpzJztcblxuLy8gUmUtZXhwb3J0IHBhdXNlIHR5cGVzIGZyb20gcGF1c2UvIGxpYnJhcnlcbmV4cG9ydCB0eXBlIHsgRmxvd2NoYXJ0Q2hlY2twb2ludCwgUGF1c2FibGVIYW5kbGVyLCBQYXVzZVJlc3VsdCB9IGZyb20gJy4uL3BhdXNlL2luZGV4LmpzJztcbmV4cG9ydCB7IGlzUGF1c2VSZXN1bHQsIGlzUGF1c2VTaWduYWwsIFBhdXNlU2lnbmFsIH0gZnJvbSAnLi4vcGF1c2UvaW5kZXguanMnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIExvZ2dlclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBNaW5pbWFsIGxvZ2dpbmcgY29udHJhY3QuIE1pcnJvcnMgQ29uc29sZSBBUEkgc3Vic2V0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBJTG9nZ2VyIHtcbiAgaW5mbyhtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xuICBsb2cobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgZGVidWcobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgZXJyb3IobWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgd2FybihtZXNzYWdlPzogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkO1xufVxuXG4vKiogRGVmYXVsdCBjb25zb2xlLWJhc2VkIGxvZ2dlci4gKi9cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0tIHRyaXZpYWwgY29uc29sZSBkZWxlZ2F0aW9uICovXG5leHBvcnQgY29uc3QgZGVmYXVsdExvZ2dlcjogSUxvZ2dlciA9IHtcbiAgaW5mbzogKG1lc3NhZ2U/OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmluZm8obWVzc2FnZSwgLi4uYXJncyksXG4gIGxvZzogKG1lc3NhZ2U/OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLmxvZyhtZXNzYWdlLCAuLi5hcmdzKSxcbiAgZGVidWc6IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5kZWJ1ZyhtZXNzYWdlLCAuLi5hcmdzKSxcbiAgZXJyb3I6IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5lcnJvcihtZXNzYWdlLCAuLi5hcmdzKSxcbiAgd2FybjogKG1lc3NhZ2U/OiBhbnksIC4uLmFyZ3M6IGFueVtdKSA9PiBjb25zb2xlLndhcm4obWVzc2FnZSwgLi4uYXJncyksXG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN0YWdlIEZ1bmN0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIENhbGxiYWNrIHRoYXQgcmVjZWl2ZXMgdG9rZW5zIGR1cmluZyBzdHJlYW1pbmcuICovXG5leHBvcnQgdHlwZSBTdHJlYW1DYWxsYmFjayA9ICh0b2tlbjogc3RyaW5nKSA9PiB2b2lkO1xuXG4vKipcbiAqIFRoZSBmdW5jdGlvbiBzaWduYXR1cmUgZm9yIHN0YWdlIGhhbmRsZXJzLlxuICogLSBUT3V0OiByZXR1cm4gdHlwZSBwcm9kdWNlZCBieSB0aGUgc3RhZ2VcbiAqIC0gVFNjb3BlOiB0aGUgc2NvcGUgb2JqZWN0IHBhc3NlZCB0byB0aGUgc3RhZ2VcbiAqIC0gT3B0aW9uYWwgM3JkIHBhcmFtZXRlciBgc3RyZWFtQ2FsbGJhY2tgIGluamVjdGVkIGZvciBzdHJlYW1pbmcgc3RhZ2VzLlxuICovXG5leHBvcnQgdHlwZSBTdGFnZUZ1bmN0aW9uPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSAoXG4gIHNjb3BlOiBUU2NvcGUsXG4gIGJyZWFrUGlwZWxpbmU6ICgpID0+IHZvaWQsXG4gIHN0cmVhbUNhbGxiYWNrPzogU3RyZWFtQ2FsbGJhY2ssXG4pID0+IFByb21pc2U8VE91dCB8IHZvaWQ+IHwgVE91dCB8IHZvaWQ7XG5cbi8qKlxuICogU3RhZ2UgZnVuY3Rpb24gZm9yIHBhdXNhYmxlIHN0YWdlcyDigJQgcmV0dXJuIHZhbHVlIGlzIHRoZSBwYXVzZSBkYXRhIChhbnkgdHlwZSkuXG4gKiBSZXR1cm4gbm9uLXZvaWQgdG8gcGF1c2UsIHJldHVybiB2b2lkIHRvIGNvbnRpbnVlIG5vcm1hbGx5LlxuICovXG5leHBvcnQgdHlwZSBQYXVzYWJsZVN0YWdlRnVuY3Rpb248VFNjb3BlID0gYW55PiA9IChcbiAgc2NvcGU6IFRTY29wZSxcbiAgYnJlYWtQaXBlbGluZTogKCkgPT4gdm9pZCxcbikgPT4gUHJvbWlzZTx1bmtub3duPiB8IHVua25vd247XG5cbi8qKiBGYWN0b3J5IHRoYXQgY3JlYXRlcyBhIHNjb3BlIGluc3RhbmNlIGZvciBlYWNoIHN0YWdlLiAqL1xuZXhwb3J0IHR5cGUgU2NvcGVGYWN0b3J5PFRTY29wZSA9IGFueT4gPSAoXG4gIGNvbnRleHQ6IFN0YWdlQ29udGV4dCxcbiAgc3RhZ2VOYW1lOiBzdHJpbmcsXG4gIHJlYWRPbmx5Q29udGV4dD86IHVua25vd24sXG4gIGV4ZWN1dGlvbkVudj86IEV4ZWN1dGlvbkVudixcbikgPT4gVFNjb3BlO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN0cmVhbWluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIFN0cmVhbVRva2VuSGFuZGxlciA9IChzdHJlYW1JZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nKSA9PiB2b2lkO1xuZXhwb3J0IHR5cGUgU3RyZWFtTGlmZWN5Y2xlSGFuZGxlciA9IChzdHJlYW1JZDogc3RyaW5nLCBmdWxsVGV4dD86IHN0cmluZykgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1IYW5kbGVycyB7XG4gIG9uVG9rZW4/OiBTdHJlYW1Ub2tlbkhhbmRsZXI7XG4gIG9uU3RhcnQ/OiBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyO1xuICBvbkVuZD86IFN0cmVhbUxpZmVjeWNsZUhhbmRsZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUGFyYWxsZWwtZm9yLWVhY2ggKGR5bmFtaWMgZmFuLW91dClcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEEgYnVpbHQgY2hhcnQsIGFzIGBhZGRQYXJhbGxlbEZvckVhY2hgJ3MgYGJyYW5jaGAgZmFjdG9yeSByZXR1cm5zIGl0LlxuICpcbiAqIFN0cnVjdHVyYWxseSB0aGUgc3Vic2V0IG9mIGBGbG93Q2hhcnRgIHRoZSBlbmdpbmUgbmVlZHMgdG8gbW91bnQgYSBicmFuY2gg4oCUXG4gKiBkZWNsYXJlZCBoZXJlIHJhdGhlciB0aGFuIGltcG9ydGVkIHNvIGBlbmdpbmUvYCBrZWVwcyBpdHMgb25lLXdheSBkZXBlbmRlbmN5XG4gKiBvbiBgYnVpbGRlci9gLiBBbnkgYGZsb3dDaGFydCguLi4pLmJ1aWxkKClgIHJlc3VsdCBzYXRpc2ZpZXMgaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnJhbmNoQ2hhcnQ8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICBzdGFnZU1hcDogTWFwPHN0cmluZywgU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+PjtcbiAgc3ViZmxvd3M/OiBSZWNvcmQ8c3RyaW5nLCB7IHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IH0+O1xuICBidWlsZFRpbWVTdHJ1Y3R1cmU/OiB1bmtub3duO1xufVxuXG4vKipcbiAqIFJ1bnRpbWUgZmFuLW91dCBjb25maWcg4oCUIG9uZSBicmFuY2ggcGVyIGl0ZW0sIGJyYW5jaCBDT1VOVCBkZWNpZGVkIGF0XG4gKiBydW50aW1lIGZyb20gdGhlIHBheWxvYWQuIERlc2lnbjogZG9jcy9kZXNpZ24vZXhlY3V0aW9uLWNvbnRyb2wubWQgKEQyKS5cbiAqXG4gKiBFYWNoIGJyYW5jaCBydW5zIGFzIGEgZ2VuZXJhdGVkIFNVQkZMT1cgKGlzb2xhdGVkIHJ1bnRpbWUsIG93biBjb21taXQgbG9nLFxuICogYWRkcmVzc2FibGUgYXQgYDxzdGFnZUlkPn48aW5kZXg+YCBpbiBldmVyeSB0cmFjZSBxdWVyeSksIHdoaWNoIGlzIHdoYXRcbiAqIG1ha2VzIGJyYW5jaGVzIHVuYWJsZSB0byBjb3JydXB0IGVhY2ggb3RoZXIncyBpbi1mbGlnaHQgc3RhdGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyYWxsZWxGb3JFYWNoQ29uZmlnPFRJdGVtID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgLyoqXG4gICAqIFBpY2tzIHRoZSBpdGVtcyB0byBmYW4gb3V0IG92ZXIsIGZyb20gdGhlIGxpdmUgc2NvcGUuIFJlYWRzIGhlcmUgYXJlXG4gICAqIHRyYWNrZWQgbGlrZSBhbnkgb3RoZXIgc3RhZ2UgcmVhZCwgc28gdGhlIGZhbi1vdXQncyBvd24gaW5wdXRzIHNob3cgdXAgaW5cbiAgICogdGhlIHRyYWNlIGFuZCBpbiBhIGJhY2t3YXJkIHNsaWNlLlxuICAgKi9cbiAgaXRlbXM6IChzY29wZTogVFNjb3BlKSA9PiByZWFkb25seSBUSXRlbVtdO1xuICAvKipcbiAgICogQnVpbGRzIHRoZSBjaGFydCBmb3IgT05FIGl0ZW0uIENhbGxlZCBvbmNlIHBlciBleGVjdXRlZCBicmFuY2gsIHdpdGggdGhlXG4gICAqIGl0ZW0gYW5kIGl0cyBpbmRleCDigJQgY2xvc2Ugb3ZlciB0aGVtLCBvciByZWFkIHRoZSBgaXRlbWAgLyBgaW5kZXhgIHZhbHVlc1xuICAgKiBzZWVkZWQgaW50byB0aGUgYnJhbmNoJ3Mgb3duIHNjb3BlLlxuICAgKi9cbiAgYnJhbmNoOiAoaXRlbTogVEl0ZW0sIGluZGV4OiBudW1iZXIpID0+IEJyYW5jaENoYXJ0O1xuICAvKipcbiAgICogSGFyZCBjZWlsaW5nIG9uIGJyYW5jaGVzIHBlciBleGVjdXRpb24uIFJFUVVJUkVEOiBhbiB1bmJvdW5kZWQgZmFuLW91dFxuICAgKiBkcml2ZW4gYnkgbW9kZWwgb3V0cHV0IGlzIGEgcmVzb3VyY2UgYXR0YWNrLCBzbyB0aGVyZSBpcyBubyBkZWZhdWx0IHRvXG4gICAqIGZvcmdldC4gRXh0cmEgaXRlbXMgZG8gbm90IHJ1biDigJQgdGhlIHRydW5jYXRpb24gaXMgcmVjb3JkZWQsIG5ldmVyIHNpbGVudC5cbiAgICovXG4gIG1heEJyYW5jaGVzOiBudW1iZXI7XG4gIC8qKlxuICAgKiBTdGF0ZSBrZXkgdGhlIG9yZGVyZWQgcmVzdWx0cyBhcnJheSBpcyB3cml0dGVuIHRvIG9uIHRoZSBwYXJlbnQgc2NvcGUuXG4gICAqIFJFUVVJUkVEIOKAlCBhIGtleSBkZXJpdmVkIGZyb20gdGhlIHN0YWdlIGlkIGNvdWxkIHNpbGVudGx5IG92ZXJ3cml0ZSBzdGF0ZVxuICAgKiB0aGUgY2hhcnQgYWxyZWFkeSBvd25zLlxuICAgKi9cbiAgaW50bzogc3RyaW5nO1xuICAvKipcbiAgICogRmFuLW91dCBlcnJvciBwb2xpY3kg4oCUIHRoZSBTQU1FIHBvbGljeSB0aGUgZXhpc3RpbmcgcGFyYWxsZWwgZmFuLW91dCB1c2VzLlxuICAgKiBgdHJ1ZWAgPSBgUHJvbWlzZS5hbGxgICh0aGUgZmlyc3QgZmFpbGluZyBicmFuY2ggcmVqZWN0cyB0aGUgc3RhZ2UpO1xuICAgKiBvbWl0dGVkL2ZhbHNlID0gYmVzdC1lZmZvcnQgYFByb21pc2UuYWxsU2V0dGxlZGAgKGV2ZXJ5IGJyYW5jaCBydW5zOyBhXG4gICAqIGZhaWxlZCBicmFuY2gncyBzbG90IGluIHRoZSByZXN1bHRzIGFycmF5IGlzIGB1bmRlZmluZWRgKS5cbiAgICovXG4gIGZhaWxGYXN0PzogYm9vbGVhbjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZXRyeSAocGVyLXN0YWdlIGRlY2xhcmF0aXZlIHBvbGljeSlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIERlY2xhcmF0aXZlIHBlci1zdGFnZSByZXRyeSBwb2xpY3kuXG4gKlxuICogV0hZIHRoaXMgZXhpc3RzOiBhIHJldHJ5IGhhbmQtcm9sbGVkIGluc2lkZSBhIHN0YWdlIGZ1bmN0aW9uIGlzIGludmlzaWJsZSB0b1xuICogdGhlIHRyYWNlLiBUaGUgc3RhZ2Ugc2hvd3Mgb25lIGV4ZWN1dGlvbiwgdGhlIGNvbW1pdCBsb2cgc2hvd3Mgb25lIGJ1bmRsZSxcbiAqIGFuZCB0aGUgdHdvIGZhaWxlZCBjYWxscyB0aGF0IHByZWNlZGVkIHRoZSBzdWNjZXNzZnVsIG9uZSBsZWZ0IG5vIG1hcmtcbiAqIGFueXdoZXJlIOKAlCBhbiB1bmV4cGxhaW5lZCBiZWhhdmlvdXIgaW4gYSBsaWJyYXJ5IHdob3NlIHdob2xlIHRoZXNpcyBpcyB0aGF0XG4gKiBub3RoaW5nIGludmlzaWJsZSBoYXBwZW5zLiBEZWNsYXJlZCBoZXJlIGluc3RlYWQsIGV2ZXJ5IGF0dGVtcHQgaXMgcGFydCBvZlxuICogdGhlIHJlY29yZDogZWFjaCBmYWlsZWQgYXR0ZW1wdCBmaXJlcyBgRmxvd1JlY29yZGVyLm9uU3RhZ2VSZXRyeWAgd2l0aCB0aGVcbiAqIGF0dGVtcHQgbnVtYmVyLCB0aGUgd2FpdCwgYW5kIHRoZSBzdHJ1Y3R1cmVkIGVycm9yLlxuICpcbiAqIEEgUE9MSUNZLCBub3QgYSBzdGFnZSBraW5kIOKAlCBgcmV0cnlgIHNpdHMgb24gYSBub3JtYWwgc3RhZ2UgdGhlIHdheVxuICogYGlzUGF1c2FibGVgIC8gYGlzU3RyZWFtaW5nYCBkby4gVGhlIHNlcmlhbGl6ZWQgbm9kZSBgdHlwZWAgaXMgdW5jaGFuZ2VkIGFuZFxuICogZXZlcnkgZXhpc3RpbmcgY29uc3VtZXIga2VlcHMgcmVuZGVyaW5nIHRoZSBzdGFnZSBleGFjdGx5IGFzIGJlZm9yZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGZsb3dDaGFydDxTdGF0ZT4oJ0ZldGNoIHVzZXInLCBmZXRjaEZuLCAnZmV0Y2gtdXNlcicpXG4gKiAgIC5yZXRyeSh7IGF0dGVtcHRzOiAzLCBiYWNrb2ZmTXM6IChuKSA9PiAxMDAgKiAyICoqIChuIC0gMSkgfSlcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5UG9saWN5IHtcbiAgLyoqXG4gICAqIEhvdyBtYW55IHRpbWVzIHRoZSBzdGFnZSBmdW5jdGlvbiBtYXkgcnVuIGluIHRvdGFsLCBJTkNMVURJTkcgdGhlIGZpcnN0XG4gICAqIHJ1bi4gTXVzdCBiZSBhbiBpbnRlZ2VyID49IDE7IGAxYCBtZWFucyBcIm5vIHJldHJ5XCIgKGEgZGVjbGFyZWQgbm8tb3AsXG4gICAqIGFjY2VwdGVkIHNvIGEgcG9saWN5IGNhbiBiZSBzd2l0Y2hlZCBvZmYgd2l0aG91dCBkZWxldGluZyBpdCkuXG4gICAqL1xuICBhdHRlbXB0czogbnVtYmVyO1xuICAvKipcbiAgICogSG93IGxvbmcgdG8gd2FpdCBiZWZvcmUgdGhlIE5FWFQgYXR0ZW1wdC4gRWl0aGVyIGEgZml4ZWQgbnVtYmVyIG9mXG4gICAqIG1pbGxpc2Vjb25kcywgb3IgYSBmdW5jdGlvbiBvZiB0aGUgYXR0ZW1wdCB0aGF0IGp1c3QgRkFJTEVEICgxLWJhc2VkKVxuICAgKiByZXR1cm5pbmcgbWlsbGlzZWNvbmRzIOKAlCBgKG4pID0+IDEwMCAqIDIgKiogKG4gLSAxKWAgaXMgZXhwb25lbnRpYWxcbiAgICogYmFja29mZi4gT21pdHRlZCAob3IgYSBub24tZmluaXRlIC8gbmVnYXRpdmUgcmVzdWx0KSBtZWFucyBubyB3YWl0LlxuICAgKlxuICAgKiBUaGUgd2FpdCBpcyBhIHBsYWluIGF3YWl0ZWQgdGltZXIgdGhhdCBpcyBDQU5DRUxMRUQgYnkgdGhlIHJ1bidzXG4gICAqIGBBYm9ydFNpZ25hbGAuIEl0IGlzIG5vdCBhIHBhdXNlOiBhIGNoYXJ0IGNhbm5vdCBiZSBjaGVja3BvaW50ZWQgaW4gdGhlXG4gICAqIG1pZGRsZSBvZiBhIGJhY2tvZmYuXG4gICAqL1xuICBiYWNrb2ZmTXM/OiBudW1iZXIgfCAoKGF0dGVtcHQ6IG51bWJlcikgPT4gbnVtYmVyKTtcbiAgLyoqXG4gICAqIElzIFRISVMgZXJyb3Igd29ydGggYW5vdGhlciBhdHRlbXB0PyBEZWZhdWx0cyB0byByZXRyeWluZyBldmVyeSBlcnJvci5cbiAgICogUmV0dXJuaW5nIGBmYWxzZWAgZW5kcyB0aGUgc3RhZ2UgaW1tZWRpYXRlbHkgb24gdGhlIG5vcm1hbCBlcnJvciBwYXRoIOKAlFxuICAgKiBleGFjdGx5IGFzIGlmIG5vIHBvbGljeSBoYWQgYmVlbiBkZWNsYXJlZCwgYW5kIHdpdGggbm8gcmV0cnkgZXZlbnQgKHRoZVxuICAgKiBwb2xpY3kgY2hvc2Ugbm90IHRvIGFjdDsgdGhlcmUgaXMgbm90aGluZyB0byByZXBvcnQgdGhhdCB0aGUgZXJyb3IgZXZlbnRcbiAgICogZG9lcyBub3QgYWxyZWFkeSBzYXkpLlxuICAgKlxuICAgKiBBIHRocm93IGZyb20gdGhpcyBwcmVkaWNhdGUgaXMgdHJlYXRlZCBhcyBgZmFsc2VgIOKAlCBhIGJyb2tlbiBwcmVkaWNhdGVcbiAgICogbXVzdCBub3QgdHVybiBhIGZhaWxpbmcgc3RhZ2UgaW50byBhbiBpbmZpbml0ZSByZXRyeSBsb29wLlxuICAgKi9cbiAgcmV0cnlPbj86IChlcnJvcjogdW5rbm93bikgPT4gYm9vbGVhbjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdWJmbG93XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBDb250cm9scyBob3cgYXJyYXkgdmFsdWVzIGZyb20gb3V0cHV0TWFwcGVyIGFyZSBtZXJnZWQgaW50byBwYXJlbnQgc2NvcGUuXG4gKi9cbmV4cG9ydCBlbnVtIEFycmF5TWVyZ2VNb2RlIHtcbiAgLyoqIEFwcGVuZCBzdWJmbG93IG91dHB1dCB0byBleGlzdGluZyBwYXJlbnQgYXJyYXk6IFsuLi5leGlzdGluZywgLi4udmFsdWVdLiBEZWZhdWx0LiAqL1xuICBDb25jYXQgPSAnY29uY2F0JyxcbiAgLyoqIE92ZXJ3cml0ZSBwYXJlbnQgYXJyYXkgd2l0aCBzdWJmbG93IG91dHB1dC4gVXNlIGZvciBEeW5hbWljIGxvb3BzLiAqL1xuICBSZXBsYWNlID0gJ3JlcGxhY2UnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YmZsb3dNb3VudE9wdGlvbnM8VFBhcmVudFNjb3BlID0gYW55LCBUU3ViZmxvd0lucHV0ID0gYW55LCBUU3ViZmxvd091dHB1dCA9IGFueT4ge1xuICBpbnB1dE1hcHBlcj86IChwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlKSA9PiBUU3ViZmxvd0lucHV0O1xuICAvKipcbiAgICogTWFwcyBzdWJmbG93IG91dHB1dCBiYWNrIGludG8gcGFyZW50IHNjb3BlLlxuICAgKlxuICAgKiAqKkFycmF5IG1lcmdlIGJlaGF2aW9yKiogaXMgY29udHJvbGxlZCBieSBgYXJyYXlNZXJnZWA6XG4gICAqIC0gYCdjb25jYXQnYCAoZGVmYXVsdCk6IGBbLi4uZXhpc3RpbmcsIC4uLnZhbHVlXWAg4oCUIHJldHVybiBvbmx5ICoqZGVsdGEqKiBpdGVtc1xuICAgKiAtIGAncmVwbGFjZSdgOiBvdmVyd3JpdGVzIHRoZSBwYXJlbnQgdmFsdWUg4oCUIHJldHVybiB0aGUgZnVsbCBhcnJheVxuICAgKlxuICAgKiBTY2FsYXIgdmFsdWVzIGFyZSBhbHdheXMgcmVwbGFjZWQgcmVnYXJkbGVzcyBvZiBgYXJyYXlNZXJnZWAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gRGVsdGEgbW9kZSAoZGVmYXVsdCkg4oCUIHJldHVybiBvbmx5IG5ldyBpdGVtcywgY29uY2F0IGFwcGVuZHNcbiAgICogb3V0cHV0TWFwcGVyOiAoc2YpID0+ICh7IG1lc3NhZ2VzOiBzZi5uZXdNZXNzYWdlcyB9KVxuICAgKlxuICAgKiAvLyBSZXBsYWNlIG1vZGUg4oCUIHJldHVybiBmdWxsIGFycmF5LCBwYXJlbnQgdmFsdWUgaXMgb3ZlcndyaXR0ZW5cbiAgICogLy8gVXNlZnVsIGluIER5bmFtaWMgbG9vcHMgd2hlcmUgdGhlIHN1YmZsb3cgcmVjb21wdXRlcyB0aGUgZnVsbCB2YWx1ZSBlYWNoIGl0ZXJhdGlvblxuICAgKiBvdXRwdXRNYXBwZXI6IChzZikgPT4gKHsgdG9vbERlc2NyaXB0aW9uczogc2YudG9vbERlc2NyaXB0aW9ucyB9KSxcbiAgICogYXJyYXlNZXJnZTogQXJyYXlNZXJnZU1vZGUuUmVwbGFjZSxcbiAgICpcbiAgICogLy8gU2NhbGFycyBhcmUgZmluZSBpbiBib3RoIG1vZGVzIOKAlCBhbHdheXMgcmVwbGFjZWRcbiAgICogb3V0cHV0TWFwcGVyOiAoc2YpID0+ICh7IHN0YXR1czogc2YucmVzdWx0LCBjb3VudDogc2YudG90YWwgfSlcbiAgICogYGBgXG4gICAqL1xuICBvdXRwdXRNYXBwZXI/OiAoc3ViZmxvd091dHB1dDogVFN1YmZsb3dPdXRwdXQsIHBhcmVudFNjb3BlOiBUUGFyZW50U2NvcGUpID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKipcbiAgICogQ29udHJvbHMgaG93IGFycmF5IHZhbHVlcyBmcm9tIG91dHB1dE1hcHBlciBhcmUgbWVyZ2VkIGludG8gcGFyZW50IHNjb3BlLlxuICAgKiBBcHBsaWVzIG9ubHkgdG8gdG9wLWxldmVsIGFycmF5IGtleXMuIE5lc3RlZCBhcnJheXMgaW5zaWRlIG9iamVjdHNcbiAgICogYWx3YXlzIHVzZSBhcHBlbmQgKGFwcGVuZFRvQXJyYXkpIHJlZ2FyZGxlc3Mgb2YgdGhpcyBzZXR0aW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBcnJheU1lcmdlTW9kZS5Db25jYXRcbiAgICovXG4gIGFycmF5TWVyZ2U/OiBBcnJheU1lcmdlTW9kZTtcblxuICAvKipcbiAgICogU1RSVUNUVVJFLU9OTFk6IHRoZSBkb3duc3RyZWFtIHN0YWdlIGlkIHRoaXMgYnJhbmNoJ3MgY29udmVyZ2VuY2UgZWRnZVxuICAgKiBwb2ludHMgdG8sIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgXCJjb252ZXJnZSBhdCB0aGUgbmV4dCBsaW5lYXIgc3RhZ2UuXCJcbiAgICpcbiAgICogV2hlbiBhIGZvcmsvc2VsZWN0b3IvZGVjaWRlciBicmFuY2ggY2FycmllcyBgY29udmVyZ2VBdGAsIGl0cyB2aXN1YWxpemVkXG4gICAqIGBuZXh0YCBlZGdlIGlzIGZpcmVkIHRvIHRoZSBuYW1lZCBzdGFnZSBpbnN0ZWFkIG9mIHRvIHRoZSBzaGFyZWRcbiAgICogY29udmVyZ2VuY2Ugbm9kZSBpdHMgc2libGluZ3MgdXNlLiBUaGlzIGV4cHJlc3NlcyBhbiB1bmVxdWFsLWRlcHRoIG1lcmdlXG4gICAqIOKAlCBlLmcuIGEgYHRvb2xzYCBzbG90IHRoYXQgYnlwYXNzZXMgdGhlIGBtZXNzYWdlQVBJYCBhc3NlbWJseSBub2RlIGFuZFxuICAgKiBwYWlycyB3aXRoIGl0cyBvdXRwdXQgYXQgYGNhbGwtbGxtYCAoc28gYGNhbGwtbGxtYCByZWFkcyBhcyBhIDItcGFyZW50XG4gICAqIG1lcmdlKSwgZmFpdGhmdWwgdG8gdGhlIEFudGhyb3BpYyB3aXJlIHByb3RvY29sIChzeXN0ZW0rbWVzc2FnZXMgPSB0aGVcbiAgICogbWVzc2FnZSBwYXlsb2FkOyB0b29scyA9IGEgc2VwYXJhdGUgdG9wLWxldmVsIGZpZWxkKS5cbiAgICpcbiAgICogKipUaGlzIGFmZmVjdHMgdGhlIFNUUlVDVFVSRS90b3BvbG9neSBncmFwaCBvbmx5Kiog4oCUIHRoZSBydW50aW1lIGlzXG4gICAqIHVuY2hhbmdlZCAodGhlIGJyYW5jaCdzIG91dHB1dHMgcmlkZSBzaGFyZWQgc2NvcGU7IHRoZSBuYW1lZCB0YXJnZXQgcmVhZHNcbiAgICogdGhlbSB3aGVuIGl0IHJ1bnMpLiBJdCBkb2VzIE5PVCBpbnRyb2R1Y2UgYSBqb2luIGJhcnJpZXIuIFRoZSB0YXJnZXQgaXMgYVxuICAgKiBGT1JXQVJEIHN0YWdlIChhZGRlZCBsYXRlciBpbiB0aGUgY2hhaW4pLCBzbyBpdCBpcyBub3QgdmFsaWRhdGVkIGF0XG4gICAqIGJyYW5jaC1kZWNsYXJhdGlvbiB0aW1lLlxuICAgKi9cbiAgY29udmVyZ2VBdD86IHN0cmluZztcblxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIGFuIGlubmVyIGBzY29wZS4kYnJlYWsocmVhc29uKWAgY2FsbCBpbnNpZGUgdGhpcyBzdWJmbG93XG4gICAqIHByb3BhZ2F0ZXMgdXAgdG8gdGhlIHBhcmVudCDigJQgaS5lLiwgdGhlIHBhcmVudCdzIGBicmVha0ZsYWdgIGlzIHNldFxuICAgKiBhZnRlciB0aGUgc3ViZmxvdyBleGl0cywgdGVybWluYXRpbmcgdGhlIHBhcmVudCdzIG91dGVyIGxvb3AgdG9vLlxuICAgKlxuICAgKiAqKkRlZmF1bHQ6IGBmYWxzZWAqKiAoY3VycmVudCBiZWhhdmlvdXIg4oCUIGlubmVyIGJyZWFrIHN0b3BzIG9ubHkgdGhlXG4gICAqIHN1YmZsb3c7IHBhcmVudCBjb250aW51ZXMpLlxuICAgKlxuICAgKiAjIyBXaGVuIHRvIHVzZVxuICAgKlxuICAgKiBTZXQgYHByb3BhZ2F0ZUJyZWFrOiB0cnVlYCBvbiBzdWJmbG93IG1vdW50cyB0aGF0IHJlcHJlc2VudFxuICAgKiAqKnRlcm1pbmFsKiogYnJhbmNoZXMg4oCUIFwiaWYgdGhpcyBzdWJmbG93IGZpcmVzLCB0aGUgb3V0ZXIgbG9vcCBpc1xuICAgKiBkb25lXCIuIEV4YW1wbGVzOlxuICAgKlxuICAgKiAtIEEgaHVtYW4tcmV2aWV3IHJ1bm5lciB0aGF0IHRha2VzIG92ZXIgZnJvbSBhbiBhZ2VudCdzIHRvb2wtY2FsbGluZ1xuICAgKiAgIGxvb3AgYW5kIHByb2R1Y2VzIHRoZSBmaW5hbCByZXNwb25zZS5cbiAgICogLSBBIHNhZmV0eS1nYXRlIHN1YmZsb3cgdGhhdCBoYWx0cyB0aGUgb3V0ZXIgd29ya2Zsb3cgd2hlbiBhIHBvbGljeVxuICAgKiAgIHZpb2xhdGlvbiBpcyBkZXRlY3RlZC5cbiAgICogLSBBbiBlcnJvci1yZWNvdmVyeSBzdWJmbG93IHRoYXQgcmVzdG9yZXMgc3RhdGUgYW5kIHRoZW4gdGVybWluYXRlcy5cbiAgICpcbiAgICogIyMgU2VtYW50aWNzXG4gICAqXG4gICAqIDEuIEluc2lkZSB0aGUgc3ViZmxvdywgYSBzdGFnZSBjYWxscyBgc2NvcGUuJGJyZWFrKHJlYXNvbilgLlxuICAgKiAyLiBUaGUgc3ViZmxvdydzIG93biBleGVjdXRpb24gc3RvcHMgKG5vcm1hbCBgJGJyZWFrYCBiZWhhdmlvdXIpLlxuICAgKiAzLiBgU3ViZmxvd0V4ZWN1dG9yYCBpbnNwZWN0cyB0aGUgc3ViZmxvdydzIGV4aXQgc3RhdGUuIElmXG4gICAqICAgIGBwcm9wYWdhdGVCcmVhayA9PT0gdHJ1ZWAgQU5EIHRoZSBpbm5lciBicmVhayBmaXJlZCwgaXQgZm9yd2FyZHNcbiAgICogICAgdGhlIGJyZWFrIChhbmQgaXRzIHJlYXNvbikgdG8gdGhlIHBhcmVudCdzIGBicmVha0ZsYWdgLlxuICAgKiA0LiBUaGUgcGFyZW50IHRyYXZlcnNlciBzZWVzIGBzaG91bGRCcmVha2Agb24gaXRzIG5leHQgc3RlcCBhbmQgZXhpdHMuXG4gICAqIDUuIEEgYEZsb3dSZWNvcmRlci5vbkJyZWFrYCBldmVudCBmaXJlcyBhdCB0aGUgcGFyZW50LW1vdW50IGxldmVsIHdpdGhcbiAgICogICAgYHByb3BhZ2F0ZWRGcm9tU3ViZmxvd2AgPSB0aGUgc3ViZmxvdydzIGlkIGFuZCB0aGUgaW5uZXIgcmVhc29uLlxuICAgKlxuICAgKiAjIyBQYXJhbGxlbC9mYW4tb3V0XG4gICAqXG4gICAqIEZvbGxvd3MgdGhlIGV4aXN0aW5nIGxpYnJhcnkgcnVsZSBpbiBgQ2hpbGRyZW5FeGVjdXRvcmA6IHRoZSBwYXJlbnRcbiAgICogYnJlYWtzIG9ubHkgd2hlbiAqKmV2ZXJ5KiogY2hpbGQgb2YgYSBmb3JrIGJyb2tlLiBBIHNpbmdsZVxuICAgKiBgcHJvcGFnYXRlQnJlYWs6IHRydWVgIHN1YmZsb3cgY29udHJpYnV0aW5nIGl0cyBicmVhayB0byB0aGUgY291bnRcbiAgICogZG9lcyBub3Qgb24gaXRzIG93biB0ZXJtaW5hdGUgdGhlIHBhcmVudCBmYW4tb3V0LlxuICAgKlxuICAgKiAjIyBvdXRwdXRNYXBwZXIgc3RpbGwgcnVuc1xuICAgKlxuICAgKiBUaGUgc3ViZmxvdydzIGBvdXRwdXRNYXBwZXJgIChpZiBzdXBwbGllZCkgQUxXQVlTIHJ1bnMgYmVmb3JlIHRoZVxuICAgKiBicmVhayBwcm9wYWdhdGVzLCBzbyB0aGUgc3ViZmxvdydzIHBhcnRpYWwgc3RhdGUgaXMgc3RpbGwgd3JpdHRlbiB0b1xuICAgKiB0aGUgcGFyZW50IHNjb3BlLiBUaGlzIGlzIGludGVudGlvbmFsIOKAlCB0aGUgdHlwaWNhbCB1c2UgY2FzZSBpcyBhblxuICAgKiBcImVzY2FsYXRpb25cIiBzdWJmbG93IHdob3NlIG91dHB1dCBJUyB0aGUgZmluYWwgYW5zd2VyIHRoYXQgbmVlZHMgdG9cbiAgICogbGFuZCBpbiB0aGUgcGFyZW50IHNjb3BlIGJlZm9yZSB0aGUgb3V0ZXIgbG9vcCB0ZXJtaW5hdGVzLiBJZiB5b3VcbiAgICogd2FudCB0byBzdXBwcmVzcyBvdXRwdXQgbWFwcGluZyBvbiBicmVhaywgY2hlY2sgdGhlIGJyZWFrIHN0YXRlXG4gICAqIGluc2lkZSB5b3VyIGBvdXRwdXRNYXBwZXJgIGFuZCByZXR1cm4gYHt9YCBlYXJseS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHByb3BhZ2F0ZUJyZWFrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGVjbGFyZWQgdGFncyAoOS4yMS4xKSBmb3IgdGhlIE1PVU5UIGl0c2VsZiDigJQgdGhlIE5BTUVTIHRoZSBhdXRob3IgcHV0c1xuICAgKiBvbiB0aGlzIG1vdW50IGF0IGJ1aWxkIHRpbWUsIGxhbmRlZCBieSB0aGUgc2FtZSBgYXBwbHlUYWdzYCBldmVyeSBvdGhlclxuICAgKiBgb3B0aW9ucy50YWdzYCBzaXRlIHVzZXMsIHdpdGggdGhlIHNhbWUgcmVmdXNhbHMgKGVtcHR5LCBub24tc3RyaW5nLCB0aGVcbiAgICogcmVzZXJ2ZWQgYH5gIG1hcmtlciwgYSBkdXBsaWNhdGUsIGEgc2Vjb25kIGRlY2xhcmF0aW9uKS5cbiAgICpcbiAgICogQSBtb3VudCBpcyBhIHN0YWdlIHRoYXQgY29tbWl0czogaXRzIGZpcnN0IGJ1bmRsZSBpbiB0aGUgUEFSRU5UIGxvZyBpcyBhXG4gICAqIHN0b3AgaW4gYGNvbW1pdFN0b3BzYCwgc28gYHRhZ1N0b3BzYCBrZWVwcyBpdCBsaWtlIGFueSB0YWdnZWQgc3RhZ2UgYW5kXG4gICAqIGNhcnJpZXMgdGhlc2UgbmFtZXMgYXMgYFN0b3AubWV0YWAuIFN0YW1wZWQgb24gdGhhdCBmaXJzdCBidW5kbGUgb25seVxuICAgKiAodGhlIG1vdW50J3MgZXhpdCBidW5kbGUgY2FycmllcyBub25lIOKAlCB0aGUgb25jZS1wZXItZXhlY3V0aW9uIGxhdykuXG4gICAqIFRoZSBzdWJmbG93J3MgT1dOIGxvZyBpcyB1bnRvdWNoZWQ6IGl0cyBpbm5lciBzdGFnZXMgZGVjbGFyZSB0aGVpciBvd25cbiAgICogdGFncywgYW5kIGBkcmlsbChtb3VudClgIHJlYWRzIHRob3NlIG9mZiB0aGUgaW5uZXIgbG9nLlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBPTkxZIHRhZyBzaXRlIGZvciBhIGZvcmstY2hpbGQgbW91bnQgKGBhZGRTdWJGbG93Q2hhcnRgKSBvclxuICAgKiBhIGJyYW5jaCBtb3VudCAoYGFkZFN1YkZsb3dDaGFydEJyYW5jaGApIOKAlCBhZnRlciB0aG9zZSB0aGUgY3Vyc29yIHN0aWxsXG4gICAqIHBvaW50cyBhdCB0aGUgcGFyZW50LCBzbyBgLnRhZygpYCByZWZ1c2VzIHJhdGhlciB0aGFuIG1pcy1hdHRyaWJ1dGUuIEFcbiAgICogbGluZWFyIG1vdW50IChgYWRkU3ViRmxvd0NoYXJ0TmV4dGApIG1vdmVzIHRoZSBjdXJzb3IsIHNvIGAudGFnKClgIHdvcmtzXG4gICAqIHRoZXJlIHRvbzsgZGVjbGFyZSBpbiBvbmUgcGxhY2UsIG5vdCBib3RoLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC5hZGRTZWxlY3RvckZ1bmN0aW9uKCdTbG90cycsIHBpY2tTbG90cywgJ3Nsb3RzJylcbiAgICogICAuYWRkU3ViRmxvd0NoYXJ0QnJhbmNoKCdtZW1vcnknLCBtZW1vcnlDaGFydCwgJ01lbW9yeScsIHsgdGFnczogWydzbG90Om1lbW9yeSddIH0pXG4gICAqICAgLmFkZFN1YkZsb3dDaGFydEJyYW5jaCgndG9vbHMnLCB0b29sc0NoYXJ0LCAnVG9vbHMnLCB7IHRhZ3M6IFsnc2xvdDp0b29scyddIH0pXG4gICAqIC5lbmQoKVxuICAgKiBgYGBcbiAgICovXG4gIHRhZ3M/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93UmVzdWx0IHtcbiAgc3ViZmxvd0lkOiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lOiBzdHJpbmc7XG4gIHRyZWVDb250ZXh0OiB7XG4gICAgLyoqXG4gICAgICogVGhlIHN1YmZsb3cncyBmaW5hbCBzdGF0ZS4gVGhlIHRyYXZlcnNlcidzIHJlY29yZCBob2xkcyB0aGUgTElWRSBoZWFwXG4gICAgICog4oCUIHdoYXQgYSBwbGFpbiBgZ2V0U25hcHNob3QoKWAgYW5kIHRoZSBjaGVja3BvaW50IHNlZS4gVW5kZXJcbiAgICAgKiBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgIHRoZSBleGVjdXRvciBzZXJ2ZXMgdGhlIHN1YmZsb3cncyBvd25cbiAgICAgKiByZWRhY3RlZCBtaXJyb3IgaGVyZSBpbnN0ZWFkICg5LjIwLjA7IGBoYW5kbGVycy9zZXJ2ZWRTdWJmbG93UmVzdWx0c2ApLFxuICAgICAqIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBgc3RhdGVBdGAgZm9sZHMgYGhpc3RvcnlgIHRvLlxuICAgICAqL1xuICAgIGdsb2JhbENvbnRleHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHN0YWdlQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGhpc3Rvcnk6IHVua25vd25bXTtcbiAgICAvKipcbiAgICAgKiBUaGUgc3ViZmxvdydzIE9XTiBmb2xkIGJhc2Ug4oCUIHRoZSBzdGF0ZSBpdHMgaXNvbGF0ZWQgcnVudGltZSBzdGFydGVkXG4gICAgICogZnJvbSwgYmVmb3JlIGl0cyBmaXJzdCBjb21taXQuIFRoZSBzaWJsaW5nIG9mXG4gICAgICogYFJ1bnRpbWVTbmFwc2hvdC5pbml0aWFsU3RhdGVgLCBjYXJyaWVkIGhlcmUgc28gYSBzdWJmbG93J3MgYGhpc3RvcnlgXG4gICAgICogY2FuIGJlIGZvbGRlZCBvZmZsaW5lIGV4YWN0bHkgbGlrZSB0aGUgcnVuJ3MgbG9nIChgc3RhdGVBdGAsXG4gICAgICogYHRpbWVUcmF2ZWwoLi4uKS5kcmlsbChtb3VudClgKS4gRnJvemVuIGFuZCBkZXRhY2hlZC5cbiAgICAgKlxuICAgICAqIE5vcm1hbGx5IGB7fWA6IGEgc3ViZmxvdydzIGBpbnB1dE1hcHBlcmAgc2VlZCBpcyBpdHNlbGYgdGhlIGZpcnN0XG4gICAgICogQ09NTUlUIGluIGBoaXN0b3J5YCAodGhlIHJvb3QgY29udGV4dCBjb21taXRzIGl0KSwgbm90IGEgcHJlLXJ1biBiYXNlLlxuICAgICAqL1xuICAgIGluaXRpYWxTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9O1xuICBwYXJlbnRTdGFnZUlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lU3RydWN0dXJlPzogdW5rbm93bjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdWJmbG93IFRyYXZlcnNlciBGYWN0b3J5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBTdWJmbG93VHJhdmVyc2VyRmFjdG9yeSDigJQgQ3JlYXRlcyBhIEZsb3djaGFydFRyYXZlcnNlciBmb3Igc3ViZmxvdyBleGVjdXRpb24uXG4gKlxuICogSW5qZWN0ZWQgaW50byBTdWJmbG93RXhlY3V0b3IgdG8gYnJlYWsgdGhlIGNpcmN1bGFyIGRlcGVuZGVuY3k6XG4gKiBGbG93Y2hhcnRUcmF2ZXJzZXIg4oaSIFN1YmZsb3dFeGVjdXRvciDihpIgRmxvd2NoYXJ0VHJhdmVyc2VyLlxuICpcbiAqIFRoZSBmYWN0b3J5IGNhcHR1cmVzIHBhcmVudCB0cmF2ZXJzZXIgY29uZmlnIChzdGFnZU1hcCwgc2NvcGVGYWN0b3J5LCBuYXJyYXRpdmUsIGV0Yy4pXG4gKiBpbiBhIGNsb3N1cmUuIFN1YmZsb3dFeGVjdXRvciBjYWxscyBpdCB3aXRoIHN1YmZsb3ctc3BlY2lmaWMgb3ZlcnJpZGVzIChyb290LCBydW50aW1lLCBpbnB1dCkuXG4gKiBUaGUgcmV0dXJuZWQgdHJhdmVyc2VyIHVzZXMgdGhlIFNBTUUgNy1waGFzZSBhbGdvcml0aG0gYXMgdGhlIHRvcC1sZXZlbCB0cmF2ZXJzZXIsXG4gKiBzbyBkZWNpZGVycywgc2VsZWN0b3JzLCBsb29wcywgbGF6eSBzdWJmbG93cywgYW5kIGFib3J0IHNpZ25hbHMgYWxsIHdvcmsgaW5zaWRlIHN1YmZsb3dzLlxuICovXG5leHBvcnQgdHlwZSBTdWJmbG93VHJhdmVyc2VyRmFjdG9yeTxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0gKG9wdGlvbnM6IHtcbiAgLyoqIFJvb3Qgbm9kZSBvZiB0aGUgc3ViZmxvdyAod2l0aCBpc1N1YmZsb3dSb290IHN0cmlwcGVkKSDigJQgdGhlIGdyYXBoIGV2ZXJ5IGlkIGluc2lkZSB0aGUgc3ViZmxvdyByZXNvbHZlcyBhZ2FpbnN0LiAqL1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgLyoqXG4gICAqIFdoZXJlIHRoZSBzdWJmbG93J3MgdHJhdmVyc2FsIHN0YXJ0cyB3aGVuIG5vdCBhdCBgcm9vdGAg4oCUIGEgcmVzdW1lJ3NcbiAgICogb25lLXNob3QgcmUtZW50cnkgKGBSZXN1bWVIb3AuZW50cnlgKTogdGhlIG5leHQgbW91bnQgb24gdGhlIHBhdXNlIHBhdGgsXG4gICAqIG9yIHRoZSBwYXVzZWQgc3RhZ2UncyBzdGFuZC1pbiwgZWFjaCB3aXRoIGl0cyBkaXNwYXRjaGVyJ3MgY29udGludWF0aW9uXG4gICAqIGF0dGFjaGVkLiBWaXNpdGVkIG9uY2UsIGZpcnN0OyBuZXZlciByZXNvbHZhYmxlIGJ5IGlkLlxuICAgKi9cbiAgZW50cnk/OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgLyoqXG4gICAqIFBhcmFsbGVsIHNpYmxpbmdzJyBwYXVzZXMgd2FpdGluZyBpbiB0aGlzIHN1YmZsb3cgKGBSZXN1bWVIb3AucGVuZGluZ1BhdXNlc2AsXG4gICAqIDkuMjguMCkg4oCUIHJhaXNlZCBpbiBvcmRlciBvbmNlIGBlbnRyeWAncyBjaGFpbiBlbmRzLlxuICAgKi9cbiAgcGVuZGluZ1BhdXNlcz86IHJlYWRvbmx5IFF1ZXVlZFBhdXNlW107XG4gIC8qKiBJc29sYXRlZCBleGVjdXRpb24gcnVudGltZSBmb3IgdGhlIHN1YmZsb3cuICovXG4gIGV4ZWN1dGlvblJ1bnRpbWU6IElFeGVjdXRpb25SdW50aW1lO1xuICAvKiogTWFwcGVkIGlucHV0IGZyb20gcGFyZW50IHNjb3BlIChiZWNvbWVzIHJlYWRPbmx5Q29udGV4dCBmb3Igc3RhZ2VzKS4gKi9cbiAgcmVhZE9ubHlDb250ZXh0PzogdW5rbm93bjtcbiAgLyoqIFN1YmZsb3cgaWRlbnRpZmllciDigJQgdXNlZCBhcyBicmFuY2hQYXRoIGZvciBuYXJyYXRpdmUgY29udGV4dC4gKi9cbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICAvKipcbiAgICogUkZDLTAwMyBEMTogcnVudGltZVN0YWdlSWQgb2YgdGhlIHN1YmZsb3cgTU9VTlQgc3RhZ2UgaW4gdGhlIHBhcmVudFxuICAgKiB0cmF2ZXJzZXIuIEJlY29tZXMgdGhlIGBwYXJlbnRSdW50aW1lU3RhZ2VJZGAgZmFsbGJhY2sgZm9yIHRoZSBzdWJmbG93J3NcbiAgICogcm9vdCBzdGFnZSBzbyBydW50aW1lIGFuY2VzdG9yIGNoYWlucyBjcm9zcyBzdWJmbG93IGJvdW5kYXJpZXMuXG4gICAqL1xuICBwYXJlbnRNb3VudFJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nO1xufSkgPT4gU3ViZmxvd1RyYXZlcnNlckhhbmRsZTxUT3V0LCBUU2NvcGU+O1xuXG4vKipcbiAqIEhhbmRsZSByZXR1cm5lZCBieSBTdWJmbG93VHJhdmVyc2VyRmFjdG9yeS5cbiAqIFByb3ZpZGVzIGV4ZWN1dGUoKSArIGFjY2VzcyB0byBuZXN0ZWQgc3ViZmxvdyByZXN1bHRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1YmZsb3dUcmF2ZXJzZXJIYW5kbGU8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIC8qKiBFeGVjdXRlIHRoZSBzdWJmbG93J3MgZ3JhcGggdXNpbmcgdGhlIGZ1bGwgNy1waGFzZSB0cmF2ZXJzYWwgYWxnb3JpdGhtLiAqL1xuICBleGVjdXRlKCk6IFByb21pc2U8VHJhdmVyc2FsUmVzdWx0PjtcbiAgLyoqIENvbGxlY3QgbmVzdGVkIHN1YmZsb3cgcmVzdWx0cyAoZnJvbSBzdWJmbG93cyBtb3VudGVkIGluc2lkZSB0aGlzIHN1YmZsb3cpLiAqL1xuICBnZXRTdWJmbG93UmVzdWx0cygpOiBNYXA8c3RyaW5nLCBTdWJmbG93UmVzdWx0PjtcbiAgLyoqXG4gICAqIEZpbmFsIGJyZWFrIHN0YXRlIG9mIHRoZSBzdWJmbG93IGFmdGVyIGBleGVjdXRlKClgIHJldHVybnMuXG4gICAqXG4gICAqICAgLSBgc2hvdWxkQnJlYWs6IHRydWVgICDihpIgYSBzdGFnZSBpbnNpZGUgdGhlIHN1YmZsb3cgY2FsbGVkXG4gICAqICAgICBgc2NvcGUuJGJyZWFrKHJlYXNvbilgLCBzdG9wcGluZyB0aGUgc3ViZmxvdydzIG93biB0cmF2ZXJzYWwuXG4gICAqICAgLSBgcmVhc29uYCAgICAgICAgICAgICDihpIgdGhlIG9wdGlvbmFsIHN0cmluZyBwYXNzZWQgdG8gYCRicmVha2AuXG4gICAqXG4gICAqIFVzZWQgYnkgYFN1YmZsb3dFeGVjdXRvcmAgdG8gaW1wbGVtZW50IGBTdWJmbG93TW91bnRPcHRpb25zLnByb3BhZ2F0ZUJyZWFrYDpcbiAgICogaWYgdGhlIG1vdW50IG9wdHMgaW4gQU5EIHRoZSBzdWJmbG93IGJyb2tlLCB0aGUgcGFyZW50J3MgYnJlYWsgZmxhZyBpc1xuICAgKiBmb3J3YXJkZWQuXG4gICAqL1xuICBnZXRCcmVha1N0YXRlKCk6IHsgc2hvdWxkQnJlYWs6IGJvb2xlYW47IHJlYXNvbj86IHN0cmluZyB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEV4ZWN1dGlvbiBSdW50aW1lIEludGVyZmFjZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogSUV4ZWN1dGlvblJ1bnRpbWUg4oCUIEludGVyZmFjZSBmb3IgdGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQuXG4gKlxuICogRGVmaW5lcyB0aGUgY29udHJhY3QgdGhhdCBlbmdpbmUgaGFuZGxlcnMgbmVlZCBmcm9tIHRoZSBydW5uZXIgbGF5ZXIsXG4gKiBhdm9pZGluZyBjaXJjdWxhciBpbXBvcnRzIGJldHdlZW4gZW5naW5lLyBhbmQgcnVubmVyLy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRXhlY3V0aW9uUnVudGltZSB7XG4gIGdsb2JhbFN0b3JlOiB7IGdldFN0YXRlKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH07XG4gIC8qKlxuICAgKiBUaGUgcmVkYWN0ZWQgbWlycm9yIG9mIGBnbG9iYWxTdG9yZWAg4oCUIHByZXNlbnQgb25jZVxuICAgKiB7QGxpbmsgZW5hYmxlUmVkYWN0ZWRNaXJyb3J9IHJhbiAoYSBydW4gd2l0aCBhIHBvbGljeSksIGVsc2UgYWJzZW50LlxuICAgKiBgU3ViZmxvd0V4ZWN1dG9yYCByZWFkcyBpdCB0byBzZXJ2ZSBhIHN1YmZsb3cncyBzdGF0ZSAoOS4yMC4wKS5cbiAgICovXG4gIHJlZGFjdGVkU3RvcmU/OiBTaGFyZWRNZW1vcnk7XG4gIHJvb3RTdGFnZUNvbnRleHQ6IFN0YWdlQ29udGV4dDtcbiAgZXhlY3V0aW9uSGlzdG9yeTogeyBsaXN0KCk6IHVua25vd25bXSB9O1xuICAvKipcbiAgICogT3B0IGluIHRvIHRoZSByZWRhY3RlZCBtaXJyb3Ig4oCUIGBFeGVjdXRpb25SdW50aW1lLmVuYWJsZVJlZGFjdGVkTWlycm9yYC5cbiAgICogT3B0aW9uYWwgb24gdGhlIGR1Y2sgdHlwZSBzbyBiYXJlIHJ1bnRpbWVzICh0ZXN0cykgbmVlZCBub3QgaW1wbGVtZW50IGl0O1xuICAgKiBgU3ViZmxvd0V4ZWN1dG9yYCBjYWxscyBpdCBvbiBhIG5lc3RlZCBydW50aW1lIGV4YWN0bHkgd2hlbiB0aGVcbiAgICogcGFyZW50LW1vdW50IGNvbnRleHQgY2FycmllcyB0aGUgcnVuJ3MgbWlycm9yLlxuICAgKi9cbiAgZW5hYmxlUmVkYWN0ZWRNaXJyb3I/KCk6IHZvaWQ7XG4gIGdldFNuYXBzaG90KG9wdGlvbnM/OiB7IHJlZGFjdD86IGJvb2xlYW4gfSk6IHtcbiAgICBzaGFyZWRTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgZXhlY3V0aW9uVHJlZTogdW5rbm93bjtcbiAgICAvKiogVGhlIGNvbW1pdCBsb2cncyBmb2xkIGJhc2Ug4oCUIHNlZSBgUnVudGltZVNuYXBzaG90LmluaXRpYWxTdGF0ZWAuICovXG4gICAgaW5pdGlhbFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29tbWl0TG9nOiB1bmtub3duW107XG4gICAgLyoqIER1YWwta2V5ZWQgYnkgc3ViZmxvdyBwYXRoIChsYXN0IGl0ZXJhdGlvbikgQU5EIHBlci1leGVjdXRpb24gbW91bnQgcnVudGltZVN0YWdlSWRcbiAgICAgKiAgKGVhY2ggaXRlcmF0aW9uKSDigJQgc2VlIFJ1bnRpbWVTbmFwc2hvdC5zdWJmbG93UmVzdWx0cyAvIHN1YmZsb3ctY29tbWl0LXZpc2liaWxpdHkuICovXG4gICAgc3ViZmxvd1Jlc3VsdHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICByZWNvcmRlcnM/OiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgZGF0YTogdW5rbm93biB9PjtcbiAgfTtcbiAgc2V0Um9vdE9iamVjdChwYXRoOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZDtcbiAgZ2V0UGlwZWxpbmVzKCk6IHN0cmluZ1tdO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEV4ZWN1dGlvbiBFbnZpcm9ubWVudCDigJQgcmVhZC1vbmx5LCBwcm9wYWdhdGVzIHRocm91Z2ggbmVzdGVkIGV4ZWN1dG9yc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRXhlY3V0aW9uRW52IOKAlCBpbmZyYXN0cnVjdHVyZSB2YWx1ZXMgdGhhdCBwcm9wYWdhdGUgdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzLlxuICpcbiAqIExpa2UgYHByb2Nlc3MuZW52YCBmb3IgZmxvd2NoYXJ0czogcmVhZC1vbmx5LCBpbmhlcml0ZWQgYnkgY2hpbGQgZXhlY3V0b3JzLFxuICogaW5mcmFzdHJ1Y3R1cmUtb25seSAobm90IGJ1c2luZXNzIGxvZ2ljKS5cbiAqXG4gKiBMaXRtdXMgdGVzdDogQ3JlYXRlZCBleHRlcm5hbCB0byB0aGUgZmxvd2NoYXJ0ICsgcGFzc2VkIGluIGZvciBleGVjdXRpb24gPSBlbnYuXG4gKiBCdXNpbmVzcyBjb25maWcgZm9yIGEgc3BlY2lmaWMgZmxvd2NoYXJ0ID0gYXJncyAoZ2V0QXJncygpKS5cbiAqXG4gKiBJbnRlbnRpb25hbGx5IGEgY2xvc2VkIHR5cGUg4oCUIG5vdCBleHRlbnNpYmxlIHRvIHByZXZlbnQgY291cGxpbmcgYmV0d2VlblxuICogcGFyZW50IGFuZCBjaGlsZCBmbG93Y2hhcnRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4ZWN1dGlvbkVudiB7XG4gIC8qKiBBYm9ydFNpZ25hbCBmb3IgY29vcGVyYXRpdmUgY2FuY2VsbGF0aW9uIGFjcm9zcyBuZXN0ZWQgZXhlY3V0b3JzLiAqL1xuICByZWFkb25seSBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqIFRpbWVvdXQgYnVkZ2V0IGluIG1pbGxpc2Vjb25kcy4gKi9cbiAgcmVhZG9ubHkgdGltZW91dE1zPzogbnVtYmVyO1xuICAvKiogVHJhY2UgaWRlbnRpZmllciBmb3IgZGlzdHJpYnV0ZWQgdHJhY2luZyAvIG9ic2VydmFiaWxpdHkuICovXG4gIHJlYWRvbmx5IHRyYWNlSWQ/OiBzdHJpbmc7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSGFuZGxlciBEZXBlbmRlbmNpZXMgKERJIGJhZykg4oCUIHdhcyBQaXBlbGluZUNvbnRleHRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEhhbmRsZXJEZXBzIOKAlCBEZXBlbmRlbmN5IGluamVjdGlvbiBiYWcgcGFzc2VkIHRvIGFsbCBoYW5kbGVyIG1vZHVsZXMuXG4gKlxuICogUHJvdmlkZXMgc2hhcmVkIHN0YXRlIChzdGFnZU1hcCwgcnVudGltZSwgc2NvcGVGYWN0b3J5LCBldGMuKSB3aXRob3V0XG4gKiBoYW5kbGVycyBuZWVkaW5nIHRvIGltcG9ydCB0aGUgdHJhdmVyc2VyIGRpcmVjdGx5LiBBdm9pZHMgY2lyY3VsYXIgZGVwcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIYW5kbGVyRGVwczxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgc3RhZ2VNYXA6IE1hcDxzdHJpbmcsIFN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPj47XG4gIHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICBleGVjdXRpb25SdW50aW1lOiBJRXhlY3V0aW9uUnVudGltZTtcbiAgc2NvcGVGYWN0b3J5OiBTY29wZUZhY3Rvcnk8VFNjb3BlPjtcbiAgc3ViZmxvd3M/OiBSZWNvcmQ8c3RyaW5nLCB7IHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IH0+O1xuICB0aHJvdHRsaW5nRXJyb3JDaGVja2VyPzogKGVycm9yOiB1bmtub3duKSA9PiBib29sZWFuO1xuICBzdHJlYW1IYW5kbGVycz86IFN0cmVhbUhhbmRsZXJzO1xuICBzY29wZVByb3RlY3Rpb25Nb2RlOiBTY29wZVByb3RlY3Rpb25Nb2RlO1xuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duO1xuICAvKiogRXhlY3V0aW9uIGVudmlyb25tZW50IOKAlCBwcm9wYWdhdGVzIHRvIHN1YmZsb3dzIGF1dG9tYXRpY2FsbHkuICovXG4gIGV4ZWN1dGlvbkVudj86IEV4ZWN1dGlvbkVudjtcbiAgbmFycmF0aXZlR2VuZXJhdG9yOiBJQ29udHJvbEZsb3dOYXJyYXRpdmU7XG4gIGxvZ2dlcjogSUxvZ2dlcjtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKlxuICAgKiBUaGUgcmVzdW1lJ3Mgb25lLXNob3QgcmUtZW50cnkgKE0yKSDigJQgc2hhcmVkIGJ5IHJlZmVyZW5jZSB3aXRoIGV2ZXJ5XG4gICAqIG5lc3RlZCB0cmF2ZXJzZXIsIGxpa2UgdGhlIGV4ZWN1dGlvbiBjb3VudGVyLiBgU3ViZmxvd0V4ZWN1dG9yYCBhc2tzIGl0XG4gICAqIGF0IGVhY2ggc3ViZmxvdyBlbnRyeTogdGhlIEZJUlNUIGVudHJ5IGludG8gYSBzdWJmbG93IG9uIHRoZSBwYXVzZSBwYXRoXG4gICAqIHRha2VzIHRoYXQgc3ViZmxvdydzIGNhcHR1cmVkIHN0YXRlIChzZWVkaW5nIHRoZSBuZXN0ZWQgcnVudGltZSBpbiBwbGFjZVxuICAgKiBvZiB0aGUgaW5wdXRNYXBwZXIncyB2YWx1ZXMg4oCUIHRoZSBtYXBwZXIgc3RpbGwgcnVucyBmb3IgdGhlIHJlYWQtb25seVxuICAgKiBhcmdzKSwgaXRzIGVudHJ5IHBvaW50IGFuZCBhbnkgc2libGluZyBwYXVzZXMgd2FpdGluZyB0aGVyZTsgZXZlcnkgbGF0ZXJcbiAgICogZW50cnkgaXMgYW4gb3JkaW5hcnkgb25lLiBTZWUgYFJlc3VtZUVudHJ5YC4gVW5kZWZpbmVkIG9uIG5vcm1hbCBgcnVuKClgXG4gICAqIHBhdGhzLlxuICAgKi9cbiAgcmVzdW1lPzogUmVzdW1lRW50cnk8VE91dCwgVFNjb3BlPjtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHNpbmNlIDkuMjguMCDigJQgdGhlIGVuZ2luZSBwbGFucyBhIHJlc3VtZSB3aXRoIHtAbGluayByZXN1bWV9LlxuICAgKiBTdGlsbCBob25vdXJlZCwgdW5kZXIgdGhlIHNhbWUgb25lLXNob3QgbGF3OiBlYWNoIGNhcHR1cmUgKGtleWVkIGJ5XG4gICAqIHBhdGgtcHJlZml4ZWQgYHN1YmZsb3dJZGApIHNlZWRzIG9ubHkgdGhlIEZJUlNUIGVudHJ5IGludG8gaXRzIHN1YmZsb3csXG4gICAqIGluIHBsYWNlIG9mIHRoZSBpbnB1dE1hcHBlcidzIHZhbHVlczsgbGF0ZXIgZW50cmllcyBhcmUgb3JkaW5hcnkuXG4gICAqIElnbm9yZWQgd2hlbiBgcmVzdW1lYCBpcyBzZXQuXG4gICAqL1xuICBzdWJmbG93U3RhdGVzRm9yUmVzdW1lPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xufVxuXG4vKiogT3B0aW9ucyBmb3IgRmxvd0NoYXJ0RXhlY3V0b3IucnVuKCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bk9wdGlvbnMge1xuICAvKiogQWJvcnRTaWduYWwgZm9yIGNvb3BlcmF0aXZlIGNhbmNlbGxhdGlvbi4gKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gQ3JlYXRlcyBhbiBpbnRlcm5hbCBBYm9ydENvbnRyb2xsZXIuICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFJ1bnRpbWUgaW5wdXQgZGF0YSBmb3IgdGhlIHBpcGVsaW5lLlxuICAgKiBCZWNvbWVzIHRoZSByZWFkT25seUNvbnRleHQgYWNjZXNzaWJsZSB2aWEgYHNjb3BlLmdldEFyZ3MoKWAuXG4gICAqIFN0YWdlcyBjYW5ub3Qgb3ZlcndyaXRlIHRoZXNlIGtleXMgd2l0aCBgc2V0VmFsdWUoKWAuXG4gICAqL1xuICBpbnB1dD86IHVua25vd247XG4gIC8qKlxuICAgKiBFeGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHJlYWQtb25seSBpbmZyYXN0cnVjdHVyZSB2YWx1ZXMgdGhhdCBwcm9wYWdhdGVcbiAgICogdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzIChsaWtlIGBwcm9jZXNzLmVudmAgZm9yIGZsb3djaGFydHMpLlxuICAgKiBBY2Nlc3NpYmxlIHZpYSBgc2NvcGUuZ2V0RW52KClgLiBJbmhlcml0ZWQgYnkgc3ViZmxvd3MgYXV0b21hdGljYWxseS5cbiAgICovXG4gIGVudj86IEV4ZWN1dGlvbkVudjtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBtYXhpbXVtIG5lc3RlZCBgZXhlY3V0ZU5vZGVgIGRlcHRoIGZvciB0aGlzIHJ1bi5cbiAgICogRGVmYXVsdHMgdG8gYEZsb3djaGFydFRyYXZlcnNlci5NQVhfRVhFQ1VURV9ERVBUSGAgKDUwMCkuXG4gICAqXG4gICAqIERlcHRoIGNvdW50cyBUUkVFIG5lc3Rpbmcgb25seSDigJQgZm9yayBjaGlsZHJlbiwgZGVjaWRlci9zZWxlY3RvciBicmFuY2hcbiAgICogZGlzcGF0Y2gsIHJlY3Vyc2l2ZSBjb21wb3NpdGlvbi4gTGluZWFyIGNoYWlucyBhbmQgbG9vcCBpdGVyYXRpb25zIHJ1blxuICAgKiBvbiBhIGZsYXQgdHJhbXBvbGluZSBhbmQgbmV2ZXIgY29uc3VtZSBkZXB0aCwgc28gdGhpcyByYXJlbHkgbmVlZHNcbiAgICogcmFpc2luZy4gTXVzdCBiZSA+PSAxLlxuICAgKi9cbiAgbWF4RGVwdGg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgbWF4aW11bSBsb29wIGl0ZXJhdGlvbnMgcGVyIG5vZGUgZm9yIHRoaXMgcnVuICh0aGVcbiAgICogYENvbnRpbnVhdGlvblJlc29sdmVyYCBpbmZpbml0ZS1sb29wIGd1YXJkKS4gRGVmYXVsdHMgdG8gMTAwMC5cbiAgICogVGhpcyBpcyB0aGUgYmluZGluZyBjb25zdHJhaW50IGZvciBsb29wLWhlYXZ5IHBpcGVsaW5lcyDigJQgcmFpc2UgaXQgZm9yXG4gICAqIGxlZ2l0aW1hdGVseSBsb25nIGxvb3BzIChgbG9vcFRvYCBjaGFpbnMgcnVuIHdpdGggYSBmbGF0IHN0YWNrLCBzbyBoaWdoXG4gICAqIHZhbHVlcyBhcmUgc2FmZTsgbWVtb3J5IGZvciBzdGF0ZS9uYXJyYXRpdmUgc3RpbGwgZ3Jvd3MgcGVyIGl0ZXJhdGlvbikuXG4gICAqIEFsc28gYm91bmRzIHRoZSBydW4tdG90YWwgY2hhaW4gb2YgZnVuY3Rpb24tYmVhcmluZyBkeW5hbWljIGBuZXh0YFxuICAgKiBjb250aW51YXRpb25zIChmcmVzaCBub2RlcyByZXR1cm5lZCBmcm9tIHN0YWdlcykg4oCUIGEgcnVuYXdheSBkeW5hbWljXG4gICAqIGNoYWluIGVycm9ycyBpbnN0ZWFkIG9mIHJ1bm5pbmcgZm9yZXZlci5cbiAgICogUHJvcGFnYXRlcyB0byBzdWJmbG93cy4gTXVzdCBiZSA+PSAxLlxuICAgKi9cbiAgbWF4SXRlcmF0aW9ucz86IG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGbG93IENvbnRyb2wgTmFycmF0aXZlIOKAlCBjYW5vbmljYWwgZGVmaW5pdGlvbnMgbGl2ZSBpbiBtZW1vcnkvdHlwZXMudHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSB7IEZsb3dDb250cm9sVHlwZSwgRmxvd01lc3NhZ2UgfTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdW50aW1lIFN0cnVjdHVyZSBNZXRhZGF0YSAodXNlZCBieSBSdW50aW1lU3RydWN0dXJlTWFuYWdlcilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVTdHJ1Y3R1cmVNZXRhZGF0YSB7XG4gIHR5cGU6ICdzdGFnZScgfCAnZGVjaWRlcicgfCAnc2VsZWN0b3InIHwgJ2ZvcmsnIHwgJ3N0cmVhbWluZycgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICAvKiogVHJ1ZSBmb3IgYW4gYGFkZFBhcmFsbGVsRm9yRWFjaGAgZmFuLW91dCAodHlwZSBzdGF5cyBgJ2ZvcmsnYCkuICovXG4gIGlzRHluYW1pY1BhcmFsbGVsPzogYm9vbGVhbjtcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc0R5bmFtaWM/OiBib29sZWFuO1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBOb2RlIFJlc3VsdFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIE5vZGVSZXN1bHRUeXBlID0ge1xuICBpZDogc3RyaW5nO1xuICByZXN1bHQ6IHVua25vd247XG4gIGlzRXJyb3I/OiBib29sZWFuO1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGVjdXRpb24gUmVzcG9uc2Vcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBCcmFuY2hSZXN1bHQgPSB7XG4gIHJlc3VsdDogc3RyaW5nIHwgRXJyb3I7XG4gIGlzRXJyb3I6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBCcmFuY2hSZXN1bHRzID0geyBbYnJhbmNoSWQ6IHN0cmluZ106IEJyYW5jaFJlc3VsdCB9O1xuZXhwb3J0IHR5cGUgVHJhdmVyc2FsUmVzdWx0ID0gQnJhbmNoUmVzdWx0cyB8IHN0cmluZyB8IEVycm9yO1xuXG4vKiogUmV0dXJuZWQgYnkgcnVuKCkvcmVzdW1lKCkgd2hlbiBleGVjdXRpb24gcGF1c2VzLiAqL1xuZXhwb3J0IHR5cGUgUGF1c2VkUmVzdWx0ID0ge1xuICByZWFkb25seSBwYXVzZWQ6IHRydWU7XG4gIHJlYWRvbmx5IGNoZWNrcG9pbnQ6IGltcG9ydCgnLi4vcGF1c2UvdHlwZXMuanMnKS5GbG93Y2hhcnRDaGVja3BvaW50O1xufTtcblxuLyoqIEZ1bGwgcmV0dXJuIHR5cGUgb2YgRmxvd0NoYXJ0RXhlY3V0b3IucnVuKCkgYW5kIHJlc3VtZSgpLiAqL1xuZXhwb3J0IHR5cGUgRXhlY3V0b3JSZXN1bHQgPSBUcmF2ZXJzYWxSZXN1bHQgfCBQYXVzZWRSZXN1bHQ7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2VyaWFsaXplZCBQaXBlbGluZSBTdHJ1Y3R1cmUgKGZvciB2aXN1YWxpemF0aW9uKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplZFBpcGVsaW5lTm9kZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgdHlwZT86XG4gICAgfCAnc3RhZ2UnXG4gICAgfCAnZGVjaWRlcidcbiAgICB8ICdzZWxlY3RvcidcbiAgICB8ICdmb3JrJ1xuICAgIHwgJ3N0cmVhbWluZydcbiAgICB8ICdzdWJmbG93J1xuICAgIHwgJ2xvb3AnXG4gICAgfCAndXNlcidcbiAgICB8ICd0b29sJ1xuICAgIHwgJ2Z1bmN0aW9uJ1xuICAgIHwgJ3NlcXVlbmNlJztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogU2VyaWFsaXplZFBpcGVsaW5lTm9kZVtdO1xuICBuZXh0PzogU2VyaWFsaXplZFBpcGVsaW5lTm9kZTtcbiAgYnJhbmNoZXM/OiBSZWNvcmQ8c3RyaW5nLCBTZXJpYWxpemVkUGlwZWxpbmVOb2RlPjtcbiAgaGFzRGVjaWRlcj86IGJvb2xlYW47XG4gIGhhc1NlbGVjdG9yPzogYm9vbGVhbjtcbiAgaGFzU3VidHJlZT86IGJvb2xlYW47XG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xuICBpc1BhcmFsbGVsQ2hpbGQ/OiBib29sZWFuO1xuICBwYXJhbGxlbEdyb3VwSWQ/OiBzdHJpbmc7XG4gIGlzRHluYW1pYz86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIHRoaXMgc3RhZ2UgY2FuIHBhdXNlIGV4ZWN1dGlvbiAoUGF1c2FibGVIYW5kbGVyIHBhdHRlcm4pLiAqL1xuICBpc1BhdXNhYmxlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRydWUgZm9yIGFuIGBhZGRQYXJhbGxlbEZvckVhY2hgIGZhbi1vdXQg4oCUIGJyYW5jaCBDT1VOVCBkZWNpZGVkIGF0IHJ1bnRpbWVcbiAgICogZnJvbSB0aGUgcGF5bG9hZC4gQSBmbGFnLCBub3QgYSB0eXBlOiBgdHlwZWAgc3RheXMgYCdmb3JrJ2Agc28gZXZlcnlcbiAgICogZXhpc3RpbmcgY29uc3VtZXIgcmVuZGVycyBpdCBjb3JyZWN0bHkgKGl0IElTIGEgZmFuLW91dCksIGFuZCBhIGNvbnN1bWVyXG4gICAqIHRoYXQgd2FudHMgdG8gc2F5IFwib25lIGJyYW5jaCBwZXIgaXRlbVwiIGNhbiByZWFkIHRoaXMuXG4gICAqL1xuICBpc0R5bmFtaWNQYXJhbGxlbD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUb3RhbCBhdHRlbXB0cyB0aGlzIHN0YWdlJ3MgZnVuY3Rpb24gbWF5IHJ1biwgZnJvbSBpdHMgZGVjbGFyZWRcbiAgICoge0BsaW5rIFJldHJ5UG9saWN5fS4gUHJlc2VudCBvbmx5IHdoZW4gYSBwb2xpY3kgd2FzIGRlY2xhcmVkLiBUaGUgQ09VTlRcbiAgICogb25seSDigJQgYGJhY2tvZmZNc2AgYW5kIGByZXRyeU9uYCBjYW4gYmUgZnVuY3Rpb25zLCB3aGljaCBhIEpTT04tc2FmZSBzcGVjXG4gICAqIGNhbm5vdCBjYXJyeS5cbiAgICovXG4gIHJldHJ5QXR0ZW1wdHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBEZWNsYXJlZCB0YWdzICg5LjIxLjApIOKAlCB0aGUgbmFtZXMgdGhlIGF1dGhvciBwdXQgb24gdGhpcyBzdGFnZSBhdCBidWlsZFxuICAgKiB0aW1lLCBjb3BpZWQgYXMtaXMuIEZyZWUgc3RyaW5nczsgZm9vdHByaW50anMgYXNzaWducyB0aGVtIG5vIG1lYW5pbmcuXG4gICAqIEFic2VudCB3aGVuIHRoZSBzdGFnZSBkZWNsYXJlcyBub25lLlxuICAgKi9cbiAgdGFncz86IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEZsb3dDaGFydCBpcyBkZWZpbmVkIGluIGAuLi9idWlsZGVyL3R5cGVzLnRzYC4gVGhlIGVuZ2luZSBsYXllciBjb25zdW1lcyBpdFxuLy8gdmlhIGltcG9ydCBmcm9tIHRoZXJlLiBBIGR1cGxpY2F0ZSBtaW5pbWFsIGRlZmluaXRpb24gcHJldmlvdXNseSBsaXZlZCBoZXJlXG4vLyBhbmQgY2F1c2VkIFRTIGNvbmZ1c2lvbiBhdCBjb21wb3NpdGlvbiBib3VuZGFyaWVzIChDb21wb3NhYmxlUnVubmVyIHZzXG4vLyBhZGRTdWJGbG93Q2hhcnQgcGFyYW1ldGVyKS4gU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBub3cgbGl2ZXMgaW4gYnVpbGRlci8uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEFsaWFzIGZvciBTZXJpYWxpemVkUGlwZWxpbmVOb2RlIHVzZWQgYXMgZnVsbCBzdHJ1Y3R1cmUgKi9cbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSA9IFNlcmlhbGl6ZWRQaXBlbGluZU5vZGUgJiB7XG4gIGJyYW5jaElkcz86IHN0cmluZ1tdO1xuICBzdWJmbG93U3RydWN0dXJlPzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICBpdGVyYXRpb25Db3VudD86IG51bWJlcjtcbn07XG4iXX0=
|
package/dist/lib/pause/index.js
CHANGED
|
@@ -10,4 +10,4 @@ var types_js_1 = require("./types.js");
|
|
|
10
10
|
Object.defineProperty(exports, "isPauseResult", { enumerable: true, get: function () { return types_js_1.isPauseResult; } });
|
|
11
11
|
Object.defineProperty(exports, "isPauseSignal", { enumerable: true, get: function () { return types_js_1.isPauseSignal; } });
|
|
12
12
|
Object.defineProperty(exports, "PauseSignal", { enumerable: true, get: function () { return types_js_1.PauseSignal; } });
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3BhdXNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLCtDQUF1RztBQUE5Rix5R0FBQSxTQUFTLE9BQUE7QUFBRSwrR0FBQSxlQUFlLE9BQUE7QUFBRSxpSEFBQSxpQkFBaUIsT0FBQTtBQUFFLHNIQUFBLHNCQUFzQixPQUFBO0FBRTlFLHVDQUF1RTtBQUE5RCx5R0FBQSxhQUFhLE9BQUE7QUFBRSx5R0FBQSxhQUFhLE9BQUE7QUFBRSx1R0FBQSxXQUFXLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSB7IEludGVycnVwdFBheWxvYWQgfSBmcm9tICcuL2ludGVycnVwdC5qcyc7XG5leHBvcnQgeyBpbnRlcnJ1cHQsIEludGVycnVwdFNpZ25hbCwgaXNJbnRlcnJ1cHRTaWduYWwsIHByb3ZpZGVJbnRlcnJ1cHRBbnN3ZXIgfSBmcm9tICcuL2ludGVycnVwdC5qcyc7XG5leHBvcnQgdHlwZSB7IEZsb3djaGFydENoZWNrcG9pbnQsIFBhdXNhYmxlSGFuZGxlciwgUGF1c2VSZXN1bHQsIFBlbmRpbmdQYXVzZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuZXhwb3J0IHsgaXNQYXVzZVJlc3VsdCwgaXNQYXVzZVNpZ25hbCwgUGF1c2VTaWduYWwgfSBmcm9tICcuL3R5cGVzLmpzJztcbiJdfQ==
|
package/dist/lib/pause/types.js
CHANGED
|
@@ -15,7 +15,16 @@
|
|
|
15
15
|
* Resume rebuilds the flowchart, restores scope, navigates to the paused stage,
|
|
16
16
|
* injects resumeInput, and continues traversal.
|
|
17
17
|
*
|
|
18
|
-
* Supported topologies: linear, subflow
|
|
18
|
+
* Supported topologies: linear, subflow (at any depth — mounted linearly, as a
|
|
19
|
+
* decider or selector branch, or as a fork child), loop, nested subflow in
|
|
20
|
+
* loop, and several parallel siblings pausing in one fan-out (each asks in
|
|
21
|
+
* turn — `FlowchartCheckpoint.pendingPauses`).
|
|
22
|
+
*
|
|
23
|
+
* NOT resumable yet: a pause inside a LAZY subflow (`addLazySubFlowChart*`) or
|
|
24
|
+
* inside an `addParallelForEach` branch. Their graphs are resolved at run time
|
|
25
|
+
* and are not in the chart a resume walks, so `resume()` refuses the
|
|
26
|
+
* checkpoint ("not found") instead of guessing. Pinned in
|
|
27
|
+
* test/lib/pause/resume-known-limitations.test.ts.
|
|
19
28
|
*/
|
|
20
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
30
|
exports.isPauseSignal = exports.isPauseResult = exports.PauseSignal = void 0;
|
|
@@ -69,6 +78,15 @@ class PauseSignal extends Error {
|
|
|
69
78
|
* crash with "X is not iterable" / undefined.
|
|
70
79
|
*/
|
|
71
80
|
_subflowStates = {};
|
|
81
|
+
/**
|
|
82
|
+
* Pauses that PARALLEL SIBLINGS raised in the same fan-out as this one,
|
|
83
|
+
* waiting their turn (9.28.0). Recorded by `ChildrenExecutor` when more
|
|
84
|
+
* than one child of a fork (or more than one selected branch) pauses: the
|
|
85
|
+
* first pause is the one that is asked, the others ride here instead of
|
|
86
|
+
* being dropped. Each path is relative to where the signal currently is
|
|
87
|
+
* and grows with it — `prependSubflow` prepends to every entry too.
|
|
88
|
+
*/
|
|
89
|
+
_pendingPauses = [];
|
|
72
90
|
constructor(data, stageId, pausedBy) {
|
|
73
91
|
super('Execution paused');
|
|
74
92
|
this.name = 'PauseSignal';
|
|
@@ -83,9 +101,45 @@ class PauseSignal extends Error {
|
|
|
83
101
|
get subflowPath() {
|
|
84
102
|
return this._subflowPath;
|
|
85
103
|
}
|
|
86
|
-
/**
|
|
104
|
+
/**
|
|
105
|
+
* Prepend a subflow ID to the path (called during bubble-up). The pending
|
|
106
|
+
* sibling pauses ride the same boundary, so their paths grow with it.
|
|
107
|
+
*/
|
|
87
108
|
prependSubflow(subflowId) {
|
|
88
109
|
this._subflowPath.unshift(subflowId);
|
|
110
|
+
for (const pending of this._pendingPauses)
|
|
111
|
+
pending.subflowPath.unshift(subflowId);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Queue a parallel sibling's pause behind this one (its path relative to
|
|
115
|
+
* this signal's current level). Copied in: the entry is owned by the
|
|
116
|
+
* signal from here on.
|
|
117
|
+
*/
|
|
118
|
+
addPendingPause(pause) {
|
|
119
|
+
this._pendingPauses.push({
|
|
120
|
+
pausedStageId: pause.pausedStageId,
|
|
121
|
+
subflowPath: [...pause.subflowPath],
|
|
122
|
+
subflowStates: { ...pause.subflowStates },
|
|
123
|
+
...(pause.pauseData !== undefined && { pauseData: pause.pauseData }),
|
|
124
|
+
...(pause.pausedBy && { pausedBy: pause.pausedBy }),
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
/** Parallel siblings' pauses waiting behind this one, in the order they will be asked. */
|
|
128
|
+
get pendingPauses() {
|
|
129
|
+
return this._pendingPauses;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* This pause as a {@link PendingPause} — what `ChildrenExecutor` queues
|
|
133
|
+
* behind a sibling's pause when both paused in one fan-out.
|
|
134
|
+
*/
|
|
135
|
+
toPendingPause() {
|
|
136
|
+
return {
|
|
137
|
+
pausedStageId: this.stageId,
|
|
138
|
+
subflowPath: [...this._subflowPath],
|
|
139
|
+
subflowStates: { ...this._subflowStates },
|
|
140
|
+
...(this.pauseData !== undefined && { pauseData: this.pauseData }),
|
|
141
|
+
...(this.pausedBy && { pausedBy: this.pausedBy }),
|
|
142
|
+
};
|
|
89
143
|
}
|
|
90
144
|
/** The stage that invoked the paused child (decider, selector, fork). */
|
|
91
145
|
get invokerStageId() {
|
|
@@ -144,4 +198,4 @@ function isPauseSignal(error) {
|
|
|
144
198
|
Object.prototype.hasOwnProperty.call(error, 'stageId')));
|
|
145
199
|
}
|
|
146
200
|
exports.isPauseSignal = isPauseSignal;
|
|
147
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3BhdXNlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7OztBQUVILCtEQUErRDtBQUUvRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLFdBQVksU0FBUSxLQUFLO0lBQ3BDLHVEQUF1RDtJQUM5QyxTQUFTLENBQVU7SUFDNUIsNENBQTRDO0lBQ25DLE9BQU8sQ0FBUztJQUN6Qjs7Ozs7OztPQU9HO0lBQ00sUUFBUSxDQUFlO0lBQ2hDLHlFQUF5RTtJQUNqRSxZQUFZLENBQVc7SUFFL0I7Ozs7Ozs7Ozs7T0FVRztJQUNLLGVBQWUsQ0FBVTtJQUN6QixvQkFBb0IsQ0FBVTtJQUV0Qzs7Ozs7Ozs7Ozs7T0FXRztJQUNLLGNBQWMsR0FBNEMsRUFBRSxDQUFDO0lBRXJFLFlBQVksSUFBYSxFQUFFLE9BQWUsRUFBRSxRQUFzQjtRQUNoRSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLFFBQVE7WUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2Qix1RkFBdUY7UUFDdkYsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztJQUMzQixDQUFDO0lBRUQsa0VBQWtFO0lBQ2xFLGNBQWMsQ0FBQyxTQUFpQjtRQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQseUVBQXlFO0lBQ3pFLElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELDBFQUEwRTtJQUMxRSxJQUFJLG1CQUFtQjtRQUNyQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxjQUFzQixFQUFFLG1CQUE0QjtRQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsY0FBYyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxtQkFBbUIsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILG1CQUFtQixDQUFDLFNBQWlCLEVBQUUsS0FBOEI7UUFDbkUsaUVBQWlFO1FBQ2pFLG1FQUFtRTtRQUNuRSw0REFBNEQ7UUFDNUQsa0VBQWtFO1FBQ2xFLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7Q0FDRjtBQTdHRCxrQ0E2R0M7QUEyTUQsK0RBQStEO0FBRS9ELGdFQUFnRTtBQUNoRSxTQUFnQixhQUFhLENBQUMsS0FBYztJQUMxQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFLLEtBQXFCLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQztBQUM5RixDQUFDO0FBRkQsc0NBRUM7QUFFRCx3R0FBd0c7QUFDeEcsU0FBZ0IsYUFBYSxDQUFDLEtBQWM7SUFDMUMsT0FBTyxDQUNMLEtBQUssWUFBWSxXQUFXO1FBQzVCLENBQUMsS0FBSyxZQUFZLEtBQUs7WUFDckIsS0FBSyxDQUFDLElBQUksS0FBSyxhQUFhO1lBQzVCLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDO1lBQ3hELE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FDMUQsQ0FBQztBQUNKLENBQUM7QUFSRCxzQ0FRQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGF1c2UvUmVzdW1lIOKAlCBzZXJpYWxpemFibGUgY2hlY2twb2ludCBmb3IgbG9uZy1ydW5uaW5nIG9yIGh1bWFuLWluLXRoZS1sb29wIGZsb3dzLlxuICpcbiAqIEEgc3RhZ2Ugc2lnbmFscyBwYXVzZSBieSBjYWxsaW5nIGBzY29wZS4kcGF1c2UoZGF0YSlgIHdoaWNoIHRocm93cyBhIFBhdXNlU2lnbmFsLlxuICogVGhlIHNpZ25hbCBidWJibGVzIHVwIHRocm91Z2ggU3ViZmxvd0V4ZWN1dG9yIOKGkiBGbG93Y2hhcnRUcmF2ZXJzZXIg4oaSIEZsb3dDaGFydEV4ZWN1dG9yLFxuICogZWFjaCBsZXZlbCBhZGRpbmcgaXRzIHN1YmZsb3cgSUQgdG8gdGhlIHBhdGguXG4gKlxuICogVGhlIGNoZWNrcG9pbnQgY2FwdHVyZXM6XG4gKiAgIC0gcGF1c2VkU3RhZ2VJZCArIHN1YmZsb3dQYXRoOiB0aGUgcGF1c2VkIHN0YWdlJ3MgaWQgYW5kIGl0cyBzdWJmbG93IHBhdGhcbiAqICAgLSBzaGFyZWRTdGF0ZTogc2NvcGUgYXQgdGhlIHBhdXNlIHBvaW50XG4gKiAgIC0gZXhlY3V0aW9uVHJlZTogY29tcGxldGVkIHN0YWdlcyBmb3IgQlRTL25hcnJhdGl2ZVxuICogICAtIHBhdXNlRGF0YTogcXVlc3Rpb24sIHJlYXNvbiwgb3IgbWV0YWRhdGEgZnJvbSAkcGF1c2UoKVxuICpcbiAqIFJlc3VtZSByZWJ1aWxkcyB0aGUgZmxvd2NoYXJ0LCByZXN0b3JlcyBzY29wZSwgbmF2aWdhdGVzIHRvIHRoZSBwYXVzZWQgc3RhZ2UsXG4gKiBpbmplY3RzIHJlc3VtZUlucHV0LCBhbmQgY29udGludWVzIHRyYXZlcnNhbC5cbiAqXG4gKiBTdXBwb3J0ZWQgdG9wb2xvZ2llczogbGluZWFyLCBzdWJmbG93LCBsYXp5IHN1YmZsb3csIGxvb3AsIG5lc3RlZCBzdWJmbG93IGluIGxvb3AuXG4gKi9cblxuLy8g4pSA4pSAIFBhdXNlU2lnbmFsIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFRocm93biBieSBgc2NvcGUuJHBhdXNlKClgIHRvIHNpZ25hbCB0aGF0IGV4ZWN1dGlvbiBzaG91bGQgc3RvcFxuICogYW5kIGNyZWF0ZSBhIHNlcmlhbGl6YWJsZSBjaGVja3BvaW50LlxuICpcbiAqIEJ1YmJsZXMgdXAgdGhyb3VnaCBTdWJmbG93RXhlY3V0b3IgKHdoaWNoIHByZXBlbmRzIHN1YmZsb3cgSUQgdG8gcGF0aClcbiAqIGFuZCBpcyBjYXVnaHQgYnkgRmxvd2NoYXJ0VHJhdmVyc2VyL0Zsb3dDaGFydEV4ZWN1dG9yLlxuICovXG5leHBvcnQgY2xhc3MgUGF1c2VTaWduYWwgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKiBEYXRhIGZyb20gJHBhdXNlKCkg4oCUIHF1ZXN0aW9uLCByZWFzb24sIG1ldGFkYXRhLiAqL1xuICByZWFkb25seSBwYXVzZURhdGE6IHVua25vd247XG4gIC8qKiBJRCBvZiB0aGUgc3RhZ2UgdGhhdCBjYWxsZWQgJHBhdXNlKCkuICovXG4gIHJlYWRvbmx5IHN0YWdlSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIEhPVyB0aGUgcGF1c2Ugd2FzIHJhaXNlZCDigJQgYCdpbnRlcnJ1cHQnYCB3aGVuIGEgc3RhZ2UgYm9keSBjYWxsZWRcbiAgICogYGludGVycnVwdChzY29wZSwgcGF5bG9hZClgLCBhYnNlbnQgZm9yIHRoZSBgYWRkUGF1c2FibGVGdW5jdGlvbmBcbiAgICogZXhlY3V0ZS9yZXN1bWUgcGF0aC4gU2V0IGF0IHRoZSBzdGFnZSBib3VuZGFyeSAoYFN0YWdlUnVubmVyYCksIGNhcnJpZWRcbiAgICogb250byB0aGUgY2hlY2twb2ludCwgYW5kIHJlYWQgYnkgYHJlc3VtZSgpYCB0byBwaWNrIHRoZSByZS1lbnRyeTogYW5cbiAgICogaW50ZXJydXB0ZWQgc3RhZ2UgcmUtcnVucyBpdHMgT1dOIGZ1bmN0aW9uIGZyb20gdGhlIHRvcCAoc3RhZ2VzIGFyZVxuICAgKiBhdG9taWMpLCBhIHBhdXNhYmxlIHN0YWdlIHJ1bnMgaXRzIGByZXN1bWVGbmAuXG4gICAqL1xuICByZWFkb25seSBwYXVzZWRCeT86ICdpbnRlcnJ1cHQnO1xuICAvKiogUGF0aCB0aHJvdWdoIHN1YmZsb3dzIHRvIHRoZSBwYXVzZWQgc3RhZ2UuIEJ1aWx0IGR1cmluZyBidWJibGUtdXAuICovXG4gIHByaXZhdGUgX3N1YmZsb3dQYXRoOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogSW52b2tlciBjb250ZXh0IOKAlCBlbnJpY2hlZCBkdXJpbmcgYnViYmxlLXVwIHdoZW4gYSBQYXVzZVNpZ25hbCBwYXNzZXNcbiAgICogdGhyb3VnaCBhIGRlY2lkZXIsIHNlbGVjdG9yLCBvciBmb3JrIGhhbmRsZXIuXG4gICAqXG4gICAqIFRoZSBpbnZva2VyIGlzIHRoZSBzdGFnZSB0aGF0IGNhbGxlZCBleGVjdXRlTm9kZSgpIG9uIHRoZSBwYXVzZWQgY2hpbGQuXG4gICAqIENhcHR1cmVkIGR1cmluZyB0cmF2ZXJzYWwgKG5vdCByZWNvbnN0cnVjdGVkIGZyb20gdGhlIHRyZWUpLlxuICAgKlxuICAgKiBgY29udGludWF0aW9uU3RhZ2VJZGAgaXMgdGhlIGludm9rZXIncyBgLm5leHRgIG5vZGUg4oCUIHdoZXJlIGV4ZWN1dGlvblxuICAgKiBzaG91bGQgY29udGludWUgYWZ0ZXIgcmVzdW1lLiBXaXRob3V0IHRoaXMsIGJyYW5jaCBjaGlsZHJlbiBoYXZlIG5vXG4gICAqIGAubmV4dGAgcG9pbnRlciBhbmQgcmVzdW1lIHdvdWxkIHRlcm1pbmF0ZSBlYXJseS5cbiAgICovXG4gIHByaXZhdGUgX2ludm9rZXJTdGFnZUlkPzogc3RyaW5nO1xuICBwcml2YXRlIF9jb250aW51YXRpb25TdGFnZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdWJmbG93IHNjb3BlIGNhcHR1cmUg4oCUIHBvcHVsYXRlZCBkdXJpbmcgYnViYmxlLXVwIGJ5XG4gICAqIGBTdWJmbG93RXhlY3V0b3JgIHJpZ2h0IGJlZm9yZSByZS10aHJvdy4gRWFjaCBlbnRyeSBpcyBvbmVcbiAgICogc3ViZmxvdydzIHByZS1wYXVzZSBzaGFyZWQgc3RhdGUsIGtleWVkIGJ5IHRoZSBwYXRoLXByZWZpeGVkXG4gICAqIHN1YmZsb3cgaWQgKG1hdGNoZXMgYHN1YmZsb3dQYXRoYCkuXG4gICAqXG4gICAqIFdpdGhvdXQgdGhpcywgdGhlIG5lc3RlZCBgU2hhcmVkTWVtb3J5YCBpcyBnYXJiYWdlLWNvbGxlY3RlZFxuICAgKiBiZWZvcmUgdGhlIGNoZWNrcG9pbnQgaXMgYnVpbHQuIE9uIHJlc3VtZSwgdGhlIGlubmVyIHJ1bnRpbWUgaXNcbiAgICogcmUtY3JlYXRlZCBlbXB0eSBhbmQgcmVzdW1lIGhhbmRsZXJzIHJlYWRpbmcgcHJlLXBhdXNlIHNjb3BlXG4gICAqIChlLmcuLCBhbiBBZ2VudCdzIGBzY29wZS5oaXN0b3J5YCwgYHNjb3BlLnBhdXNlZFRvb2xDYWxsSWRgKVxuICAgKiBjcmFzaCB3aXRoIFwiWCBpcyBub3QgaXRlcmFibGVcIiAvIHVuZGVmaW5lZC5cbiAgICovXG4gIHByaXZhdGUgX3N1YmZsb3dTdGF0ZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IHVua25vd24sIHN0YWdlSWQ6IHN0cmluZywgcGF1c2VkQnk/OiAnaW50ZXJydXB0Jykge1xuICAgIHN1cGVyKCdFeGVjdXRpb24gcGF1c2VkJyk7XG4gICAgdGhpcy5uYW1lID0gJ1BhdXNlU2lnbmFsJztcbiAgICB0aGlzLnBhdXNlRGF0YSA9IGRhdGE7XG4gICAgdGhpcy5zdGFnZUlkID0gc3RhZ2VJZDtcbiAgICBpZiAocGF1c2VkQnkpIHRoaXMucGF1c2VkQnkgPSBwYXVzZWRCeTtcbiAgICB0aGlzLl9zdWJmbG93UGF0aCA9IFtdO1xuICAgIC8vIFBhdXNlU2lnbmFsIGlzIGNvbnRyb2wgZmxvdywgbm90IGEgcmVhbCBlcnJvciDigJQgc3RhY2sgdHJhY2UgaGFzIG5vIGRpYWdub3N0aWMgdmFsdWUuXG4gICAgdGhpcy5zdGFjayA9ICcnO1xuICB9XG5cbiAgZ2V0IHN1YmZsb3dQYXRoKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViZmxvd1BhdGg7XG4gIH1cblxuICAvKiogUHJlcGVuZCBhIHN1YmZsb3cgSUQgdG8gdGhlIHBhdGggKGNhbGxlZCBkdXJpbmcgYnViYmxlLXVwKS4gKi9cbiAgcHJlcGVuZFN1YmZsb3coc3ViZmxvd0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJmbG93UGF0aC51bnNoaWZ0KHN1YmZsb3dJZCk7XG4gIH1cblxuICAvKiogVGhlIHN0YWdlIHRoYXQgaW52b2tlZCB0aGUgcGF1c2VkIGNoaWxkIChkZWNpZGVyLCBzZWxlY3RvciwgZm9yaykuICovXG4gIGdldCBpbnZva2VyU3RhZ2VJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbnZva2VyU3RhZ2VJZDtcbiAgfVxuXG4gIC8qKiBXaGVyZSBleGVjdXRpb24gc2hvdWxkIGNvbnRpbnVlIGFmdGVyIHJlc3VtZSAoaW52b2tlcidzIG5leHQgbm9kZSkuICovXG4gIGdldCBjb250aW51YXRpb25TdGFnZUlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRpbnVhdGlvblN0YWdlSWQ7XG4gIH1cblxuICAvKipcbiAgICogU3RhbXAgdGhlIGludm9rZXIgY29udGV4dCBkdXJpbmcgYnViYmxlLXVwLlxuICAgKiBDYWxsZWQgYnkgZGVjaWRlci9zZWxlY3Rvci9mb3JrIGhhbmRsZXJzIHdoZW4gY2F0Y2hpbmcgYSBjaGlsZCdzIFBhdXNlU2lnbmFsLlxuICAgKiBGaXJzdCBpbnZva2VyIHdpbnMgKGlubmVybW9zdCkg4oCUIHN1YnNlcXVlbnQgY2FsbHMgYXJlIG5vLW9wcy5cbiAgICovXG4gIHNldEludm9rZXIoaW52b2tlclN0YWdlSWQ6IHN0cmluZywgY29udGludWF0aW9uU3RhZ2VJZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW52b2tlclN0YWdlSWQpIHtcbiAgICAgIHRoaXMuX2ludm9rZXJTdGFnZUlkID0gaW52b2tlclN0YWdlSWQ7XG4gICAgICB0aGlzLl9jb250aW51YXRpb25TdGFnZUlkID0gY29udGludWF0aW9uU3RhZ2VJZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FwdHVyZSBhIHN1YmZsb3cncyBpc29sYXRlZCBTaGFyZWRNZW1vcnkgYXQgdGhlIG1vbWVudCBpdHNcbiAgICogdHJhdmVyc2FsIHRocmV3LiBDYWxsZWQgYnkgYFN1YmZsb3dFeGVjdXRvcmAgb25jZSBwZXIgc3ViZmxvd1xuICAgKiBib3VuZGFyeSBvbiB0aGUgYnViYmxlLXVwIHBhdGguIEVhY2ggY2FwdHVyZSBpcyBrZXllZCBieSB0aGVcbiAgICogcGF0aC1wcmVmaXhlZCBzdWJmbG93IGlkICh0aGUgc2FtZSBpZCB1c2VkIGluIGBzdWJmbG93UGF0aGApLlxuICAgKlxuICAgKiBJbm5lcm1vc3QtZmlyc3Q6IGEgZGVlcCBgU2VxdWVuY2UoQWdlbnQoLi4uKSlgIHBhdXNlIGNhcHR1cmVzIHRoZVxuICAgKiBhZ2VudCdzIHN1YmZsb3cgZmlyc3QsIHRoZW4gaXRzIHBhcmVudCdzLCBhbGwgdGhlIHdheSB0byB0aGUgcm9vdFxuICAgKiBtb3VudC4gVGhlIGZ1bGwgbmVzdCBzdXJ2aXZlcyBpbnRvIGBjaGVja3BvaW50LnN1YmZsb3dTdGF0ZXNgLlxuICAgKi9cbiAgY2FwdHVyZVN1YmZsb3dTY29wZShzdWJmbG93SWQ6IHN0cmluZywgc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgLy8gRGVmZW5zaXZlIHNoYWxsb3cgY2xvbmUgc28gbGF0ZXIgbXV0YXRpb25zIG9uIHRoZSBzb3VyY2UgZG9uJ3RcbiAgICAvLyBibGVlZCBpbnRvIHRoZSBjYXB0dXJlZCBzbmFwc2hvdC4gRGVlcCBjbG9uaW5nIGlzIHRoZSBjb25zdW1lcidzXG4gICAgLy8gcmVzcG9uc2liaWxpdHkgKHRoZSByZXN1bWUgdGFyZ2V0IG1heSBub3QgZXZlbiBiZSBvbiB0aGlzXG4gICAgLy8gcHJvY2Vzcyk7IFNoYXJlZE1lbW9yeSB2YWx1ZXMgYXJlIGNvbnZlbnRpb25hbGx5IEpTT04tZnJpZW5kbHkuXG4gICAgdGhpcy5fc3ViZmxvd1N0YXRlc1tzdWJmbG93SWRdID0geyAuLi5zdGF0ZSB9O1xuICB9XG5cbiAgLyoqIENhcHR1cmVkIHN1YmZsb3cgc2NvcGVzIChyZWFkLW9ubHkgdmlldykuICovXG4gIGdldCBzdWJmbG93U3RhdGVzKCk6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ge1xuICAgIHJldHVybiB0aGlzLl9zdWJmbG93U3RhdGVzO1xuICB9XG59XG5cbi8vIOKUgOKUgCBQYXVzZVJlc3VsdCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBSZXR1cm5lZCBieSBhIHBhdXNhYmxlIHN0YWdlJ3MgZXhlY3V0ZS9yZXN1bWUgZnVuY3Rpb24gdG8gc2lnbmFsIHBhdXNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleGVjdXRlOiBhc3luYyAoc2NvcGUpID0+IHtcbiAqICAgc2NvcGUub3JkZXJJZCA9ICcxMjMnO1xuICogICByZXR1cm4geyBwYXVzZTogdHJ1ZSwgZGF0YTogeyBxdWVzdGlvbjogJ0FwcHJvdmUgb3JkZXIgMTIzPycgfSB9O1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF1c2VSZXN1bHQge1xuICByZWFkb25seSBwYXVzZTogdHJ1ZTtcbiAgLyoqIERhdGEgdG8gaW5jbHVkZSBpbiB0aGUgY2hlY2twb2ludCDigJQgcXVlc3Rpb24sIHJlYXNvbiwgbWV0YWRhdGEuICovXG4gIHJlYWRvbmx5IGRhdGE/OiB1bmtub3duO1xufVxuXG4vLyDilIDilIAgRmxvd2NoYXJ0Q2hlY2twb2ludCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBTZXJpYWxpemFibGUgY2hlY2twb2ludCDigJQgZXZlcnl0aGluZyBuZWVkZWQgdG8gcmVzdW1lIGEgcGF1c2VkIGZsb3djaGFydC5cbiAqXG4gKiBKU09OLXNhZmU6IG5vIGZ1bmN0aW9ucywgbm8gY2xhc3MgaW5zdGFuY2VzLCBubyBTREsgY2xpZW50cy5cbiAqIFN0b3JlIGFueXdoZXJlOiBSZWRpcywgUG9zdGdyZXMsIGxvY2FsU3RvcmFnZSwgYSBmaWxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBTYXZlXG4gKiBjb25zdCBjaGVja3BvaW50ID0gZXhlY3V0b3IuZ2V0Q2hlY2twb2ludCgpOyAvLyBhZnRlciBwYXVzZVxuICogYXdhaXQgcmVkaXMuc2V0KGBzZXNzaW9uOiR7aWR9YCwgSlNPTi5zdHJpbmdpZnkoY2hlY2twb2ludCkpO1xuICpcbiAqIC8vIFJlc3VtZSAoaG91cnMgbGF0ZXIsIHBvc3NpYmx5IGRpZmZlcmVudCBzZXJ2ZXIpXG4gKiBjb25zdCBjaGVja3BvaW50ID0gSlNPTi5wYXJzZShhd2FpdCByZWRpcy5nZXQoYHNlc3Npb246JHtpZH1gKSk7XG4gKiBjb25zdCBleGVjdXRvciA9IG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCk7XG4gKiBhd2FpdCBleGVjdXRvci5yZXN1bWUoY2hlY2twb2ludCwgeyBhcHByb3ZlZDogdHJ1ZSB9KTtcbiAqIGBgYFxuICovXG4vKipcbiAqIFNlcmlhbGl6YWJsZSBjaGVja3BvaW50IOKAlCBldmVyeXRoaW5nIG5lZWRlZCB0byByZXN1bWUgYSBwYXVzZWQgZmxvd2NoYXJ0LlxuICpcbiAqIFRoZSBleGVjdXRpb24gdHJlZSBJUyB0aGUgdHJhdmVyc2VkIHBhdGguIFRoZSBsZWFmIG5vZGUgd2l0aCBzdGF0dXMgJ3BhdXNlZCdcbiAqIElTIHRoZSBjdXJzb3IuIE5vIHNlcGFyYXRlIHBhdGggYXJyYXkgbmVlZGVkIOKAlCB0aGUgdHJlZSBzdHJ1Y3R1cmUgY2FwdHVyZXNcbiAqIHRoZSBmdWxsIG5lc3RpbmcgKGluY2x1ZGluZyBzdWJmbG93cykuXG4gKlxuICogSlNPTi1zYWZlOiBubyBmdW5jdGlvbnMsIG5vIGNsYXNzIGluc3RhbmNlcywgbm8gU0RLIGNsaWVudHMuXG4gKiBTdG9yZSBhbnl3aGVyZTogUmVkaXMsIFBvc3RncmVzLCBsb2NhbFN0b3JhZ2UsIGEgZmlsZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY2hlY2twb2ludCA9IGV4ZWN1dG9yLmdldENoZWNrcG9pbnQoKTsgLy8gYWZ0ZXIgcGF1c2VcbiAqIGF3YWl0IHJlZGlzLnNldChgc2Vzc2lvbjoke2lkfWAsIEpTT04uc3RyaW5naWZ5KGNoZWNrcG9pbnQpKTtcbiAqXG4gKiAvLyBSZXN1bWUgKGhvdXJzIGxhdGVyLCBwb3NzaWJseSBkaWZmZXJlbnQgc2VydmVyKVxuICogY29uc3QgY2hlY2twb2ludCA9IEpTT04ucGFyc2UoYXdhaXQgcmVkaXMuZ2V0KGBzZXNzaW9uOiR7aWR9YCkpO1xuICogY29uc3QgZXhlY3V0b3IgPSBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQpO1xuICogYXdhaXQgZXhlY3V0b3IucmVzdW1lKGNoZWNrcG9pbnQsIHsgYXBwcm92ZWQ6IHRydWUgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93Y2hhcnRDaGVja3BvaW50IHtcbiAgLyoqIFNjb3BlIHN0YXRlIGF0IHRoZSBwYXVzZSBwb2ludCDigJQgYWxsIHNoYXJlZCBtZW1vcnkga2V5L3ZhbHVlcy4gKi9cbiAgcmVhZG9ubHkgc2hhcmVkU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKiBFeGVjdXRpb24gdHJlZSDigJQgdGhlIHRyYXZlcnNlZCBwYXRoLiBUaGUgbGVhZiB3aXRoIHN0YXR1cyAncGF1c2VkJyBpcyB0aGUgY3Vyc29yLlxuICAgKiAgQ29udGFpbnMgc3ViZmxvdyBuZXN0aW5nLiBVc2VkIGZvciBCVFMgdmlzdWFsaXphdGlvbiBhbmQgdG8gZmluZCB0aGUgcmVzdW1lIHBvaW50LiAqL1xuICByZWFkb25seSBleGVjdXRpb25UcmVlOiB1bmtub3duO1xuXG4gIC8qKiBJRCBvZiB0aGUgc3RhZ2UgdGhhdCBwYXVzZWQuIFVzZWQgYnkgcmVzdW1lKCkgdG8gZmluZCB0aGUgbm9kZSBpbiB0aGUgZ3JhcGguICovXG4gIHJlYWRvbmx5IHBhdXNlZFN0YWdlSWQ6IHN0cmluZztcblxuICAvKiogUGF0aCB0aHJvdWdoIHN1YmZsb3dzIHRvIHRoZSBwYXVzZWQgc3RhZ2UgKGUuZy4sIFsnc2YtcGF5bWVudCcsICdzZi12YWxpZGF0aW9uJ10pLlxuICAgKiAgRW1wdHkgYXJyYXkgd2hlbiBwYXVzZWQgYXQgdGhlIHRvcCBsZXZlbC4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKiBEYXRhIGZyb20gJHBhdXNlKCkg4oCUIHF1ZXN0aW9uLCByZWFzb24sIG1ldGFkYXRhLiAqL1xuICByZWFkb25seSBwYXVzZURhdGE/OiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBIT1cgdGhlIHBhdXNlIHdhcyByYWlzZWQuIGAnaW50ZXJydXB0J2AgbWVhbnMgYSBzdGFnZSBib2R5IGNhbGxlZFxuICAgKiBgaW50ZXJydXB0KHNjb3BlLCB7IHJlYXNvbiwgZXhwZWN0cz8gfSlgIGFuZCBgcGF1c2VEYXRhYCBJUyB0aGF0IHBheWxvYWQ7XG4gICAqIGFic2VudCBtZWFucyB0aGUgYGFkZFBhdXNhYmxlRnVuY3Rpb25gIGV4ZWN1dGUvcmVzdW1lIHBhdGggKGV2ZXJ5XG4gICAqIGNoZWNrcG9pbnQgd3JpdHRlbiBiZWZvcmUgOS4xNC4wIG9taXRzIGl0LCB3aGljaCBpcyBleGFjdGx5IHJpZ2h0KS5cbiAgICpcbiAgICogYHJlc3VtZSgpYCByZWFkcyB0aGlzIHRvIHBpY2sgdGhlIHJlLWVudHJ5LCBhbmQgdGhlIHR3byBkaWZmZXIgYnkgbGF3OlxuICAgKiBhbiBpbnRlcnJ1cHRlZCBzdGFnZSBSRS1SVU5TIElUUyBPV04gRlVOQ1RJT04gRlJPTSBUSEUgVE9QIChzdGFnZXMgYXJlXG4gICAqIGF0b21pYyDigJQgdGhlIGFuc3dlciBjb21lcyBiYWNrIG91dCBvZiB0aGUgYGludGVycnVwdCgpYCBjYWxsKSwgd2hpbGUgYVxuICAgKiBwYXVzYWJsZSBzdGFnZSBydW5zIGl0cyBzZXBhcmF0ZSBgcmVzdW1lRm5gLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF1c2VkQnk/OiAnaW50ZXJydXB0JztcblxuICAvKiogU3ViZmxvdyByZXN1bHRzIGNvbGxlY3RlZCBiZWZvcmUgdGhlIHBhdXNlLiAqL1xuICByZWFkb25seSBzdWJmbG93UmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBTdWJmbG93IHNjb3BlIGNhcHR1cmUg4oCUIG9uZSBlbnRyeSBwZXIgc3ViZmxvdyBib3VuZGFyeSBvbiB0aGUgcGF0aFxuICAgKiB0byB0aGUgcGF1c2VkIHN0YWdlLiBLZXllZCBieSBwYXRoLXByZWZpeGVkIHN1YmZsb3cgaWQgKG1hdGNoZXNcbiAgICogYHN1YmZsb3dQYXRoYCBlbnRyaWVzKS4gRWFjaCB2YWx1ZSBpcyB0aGUgc3ViZmxvdydzIHByZS1wYXVzZVxuICAgKiBzaGFyZWQgc3RhdGUuXG4gICAqXG4gICAqIEFsd2F5cyBwcmVzZW50IChlbXB0eSBge31gIGZvciByb290LWxldmVsIHBhdXNlcyB3aGVyZSBubyBzdWJmbG93c1xuICAgKiB3ZXJlIGVudGVyZWQpLiBPbiByZXN1bWUsIGBTdWJmbG93RXhlY3V0b3JgIHNlZWRzIGVhY2ggbmVzdGVkIHJ1bnRpbWVcbiAgICogZnJvbSB0aGlzIG1hcCAoYW5kIHNraXBzIHRoZSBpbnB1dE1hcHBlcikgc28gcmVzdW1lIGhhbmRsZXJzIHNlZVxuICAgKiBwcmUtcGF1c2Ugc2NvcGUgYWNyb3NzIHNhbWUtZXhlY3V0b3IgQU5EIGNyb3NzLWV4ZWN1dG9yIHJlc3RhcnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1N0YXRlczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuXG4gIC8qKlxuICAgKiBUaGUgc2hhcmVkIGV4ZWN1dGlvbiBjb3VudGVyIGF0IHRoZSBtb21lbnQgb2YgcGF1c2Ug4oCUIHRoZSBudW1iZXIgb2Ygc3RhZ2VzXG4gICAqIGV4ZWN1dGVkIHNvIGZhciB0aGlzIHJ1bi4gUmVzdW1lIHNlZWRzIGl0IHNvIHBvc3QtcmVzdW1lIGBydW50aW1lU3RhZ2VJZGBzXG4gICAqIChgc3RhZ2VJZCNleGVjdXRpb25JbmRleGApIGtlZXAgY2xpbWJpbmcgYW5kIG5ldmVyIGNvbGxpZGUgd2l0aCBwcmUtcGF1c2VcbiAgICogb25lcywgd2hpY2ggaXMgd2hhdCB0aGUgd2hvbGUgZXZlbnQtY29ycmVsYXRpb24gbW9kZWwgcmVzdHMgb24uXG4gICAqXG4gICAqIE9wdGlvbmFsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OiBhIGNoZWNrcG9pbnQgcGVyc2lzdGVkIGJlZm9yZSB0aGlzXG4gICAqIGZpZWxkIGV4aXN0ZWQgKG9sZGVyIFJlZGlzL1Bvc3RncmVzIHJvd3MpIHN0aWxsIHZhbGlkYXRlcyBhbmQgcmVzdW1lcyB3aXRoXG4gICAqIHRoZSBwcmV2aW91cyAoY291bnRlci1yZXN0YXJ0aW5nKSBiZWhhdmlvci5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvbkNvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBQZXItYHN0YWdlSWRgIGxvb3AgdmlzaXQgY291bnRzIGF0IHRoZSBtb21lbnQgb2YgcGF1c2UuIFJlc3VtZSBzZWVkcyB0aGVtXG4gICAqIHNvIGBUcmF2ZXJzYWxDb250ZXh0Lmxvb3BJdGVyYXRpb25gIHN0YXlzIGNvbnRpbnVvdXMgYWNyb3NzIHRoZSBwYXVzZSAoYVxuICAgKiBtaWQtbG9vcCByZXN1bWUga2VlcHMgY291bnRpbmcgdXAsIG5vdCByZXN0YXJ0aW5nIGF0IDApIGFuZCB0aGVcbiAgICogQ29udGludWF0aW9uUmVzb2x2ZXIgaXRlcmF0aW9uIGJ1ZGdldCBpcyBub3Qgc2lsZW50bHkgcmVmaWxsZWQuXG4gICAqXG4gICAqIE9wdGlvbmFsIGZvciB0aGUgc2FtZSBiYWNrd2FyZC1jb21wYXRpYmlsaXR5IHJlYXNvbiBhcyBgZXhlY3V0aW9uQ291bnRgLlxuICAgKi9cbiAgcmVhZG9ubHkgdmlzaXRDb3VudHM/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+PjtcblxuICAvKiogU3RhZ2UgdGhhdCBpbnZva2VkIHRoZSBwYXVzZWQgY2hpbGQgKGRlY2lkZXIsIHNlbGVjdG9yLCBmb3JrKS4gQWJzZW50IGZvciBsaW5lYXIgcGF1c2VzLiAqL1xuICByZWFkb25seSBpbnZva2VyU3RhZ2VJZD86IHN0cmluZztcblxuICAvKiogV2hlcmUgdG8gY29udGludWUgYWZ0ZXIgcmVzdW1lIOKAlCB0aGUgaW52b2tlcidzIG5leHQgbm9kZSBJRC4gQWJzZW50IGZvciBsaW5lYXIgcGF1c2VzLiAqL1xuICByZWFkb25seSBjb250aW51YXRpb25TdGFnZUlkPzogc3RyaW5nO1xuXG4gIC8qKiBUaW1lc3RhbXAgb2Ygd2hlbiB0aGUgcGF1c2Ugb2NjdXJyZWQuICovXG4gIHJlYWRvbmx5IHBhdXNlZEF0OiBudW1iZXI7XG59XG5cbi8vIOKUgOKUgCBQYXVzYWJsZUhhbmRsZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogSGFuZGxlciBmb3IgYSBwYXVzYWJsZSBzdGFnZSDigJQgaGFzIHR3byBwaGFzZXM6IGV4ZWN1dGUgYW5kIHJlc3VtZS5cbiAqXG4gKiBgZXhlY3V0ZWAgcnVucyB0aGUgZmlyc3QgdGltZS4gUmV0dXJuIGFueSBub24tdm9pZCB2YWx1ZSB0byBwYXVzZSAodGhhdCB2YWx1ZVxuICogYmVjb21lcyB0aGUgY2hlY2twb2ludCdzIGBwYXVzZURhdGFgKTsgcmV0dXJuIHZvaWQvdW5kZWZpbmVkIHRvIGNvbnRpbnVlIG5vcm1hbGx5LlxuICogYHJlc3VtZWAgcnVucyB3aGVuIHRoZSBmbG93Y2hhcnQgaXMgcmVzdW1lZC4gSXQgcmVjZWl2ZXMgdGhlIHJlc3VtZSBpbnB1dC5cbiAqXG4gKiBCb3RoIHBoYXNlcyByZWNlaXZlIHRoZSBzYW1lIHNjb3BlLiBBZnRlciBleGVjdXRlIHBhdXNlcywgdGhlIHNjb3BlIHN0YXRlXG4gKiBpcyBwcmVzZXJ2ZWQgaW4gdGhlIGNoZWNrcG9pbnQuIE9uIHJlc3VtZSwgdGhlIHNjb3BlIGlzIHJlc3RvcmVkIGJlZm9yZVxuICogY2FsbGluZyByZXN1bWUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC5hZGRQYXVzYWJsZUZ1bmN0aW9uKCdBcHByb3ZlT3JkZXInLCB7XG4gKiAgIGV4ZWN1dGU6IGFzeW5jIChzY29wZSkgPT4ge1xuICogICAgIHNjb3BlLm9yZGVySWQgPSAnMTIzJztcbiAqICAgICBzY29wZS5hbW91bnQgPSAyOTk7XG4gKiAgICAgcmV0dXJuIHsgcXVlc3Rpb246IGBBcHByb3ZlICQke3Njb3BlLmFtb3VudH0gcmVmdW5kP2AgfTtcbiAqICAgfSxcbiAqICAgcmVzdW1lOiBhc3luYyAoc2NvcGUsIGlucHV0KSA9PiB7XG4gKiAgICAgc2NvcGUuYXBwcm92ZWQgPSBpbnB1dC5hcHByb3ZlZDtcbiAqICAgICBzY29wZS5hcHByb3ZlciA9IGlucHV0LmFwcHJvdmVyO1xuICogICB9LFxuICogfSwgJ2FwcHJvdmUtb3JkZXInLCAnTWFuYWdlciBhcHByb3ZhbCBnYXRlJylcbiAqXG4gKiAvLyBMYXRlciDigJQgcmVzdW1lIHdpdGggaHVtYW4ncyBhbnN3ZXJcbiAqIGF3YWl0IGV4ZWN1dG9yLnJlc3VtZShjaGVja3BvaW50LCB7IGFwcHJvdmVkOiB0cnVlLCBhcHByb3ZlcjogJ0phbmUnIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF1c2FibGVIYW5kbGVyPFRTY29wZSA9IGFueSwgVElucHV0ID0gdW5rbm93biwgVFBhdXNlRGF0YSA9IHVua25vd24+IHtcbiAgLyoqXG4gICAqIEZpcnN0LXJ1biBwaGFzZS4gUmV0dXJuIGRhdGEgdG8gcGF1c2UsIG9yIHZvaWQvdW5kZWZpbmVkIHRvIGNvbnRpbnVlIG5vcm1hbGx5LlxuICAgKlxuICAgKiBBbnkgbm9uLXZvaWQgcmV0dXJuIHZhbHVlIGJlY29tZXMgdGhlIGBwYXVzZURhdGFgIGluIHRoZSBjaGVja3BvaW50LlxuICAgKiBUaGUgY29uc3VtZXIgZGVmaW5lcyB0aGUgYFRQYXVzZURhdGFgIHR5cGUg4oCUIHRoZSBGRSB1c2VzIGl0IHRvIHJlbmRlclxuICAgKiB0aGUgcmlnaHQgVUkgKGZvcm0gZmllbGRzLCBhcHByb3ZhbCBidXR0b25zLCBldGMuKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBUUGF1c2VEYXRhID0geyBxdWVzdGlvbjogc3RyaW5nOyByaXNrTGV2ZWw6IHN0cmluZyB9XG4gICAqIGNvbnN0IGhhbmRsZXI6IFBhdXNhYmxlSGFuZGxlcjxNeVN0YXRlLCB7IGFwcHJvdmVkOiBib29sZWFuIH0sIHsgcXVlc3Rpb246IHN0cmluZzsgcmlza0xldmVsOiBzdHJpbmcgfT4gPSB7XG4gICAqICAgZXhlY3V0ZTogYXN5bmMgKHNjb3BlKSA9PiB7XG4gICAqICAgICByZXR1cm4geyBxdWVzdGlvbjogYEFwcHJvdmUgb3JkZXIgJHtzY29wZS5vcmRlcklkfT9gLCByaXNrTGV2ZWw6ICdoaWdoJyB9O1xuICAgKiAgIH0sXG4gICAqICAgcmVzdW1lOiBhc3luYyAoc2NvcGUsIGlucHV0KSA9PiB7XG4gICAqICAgICBzY29wZS5hcHByb3ZlZCA9IGlucHV0LmFwcHJvdmVkO1xuICAgKiAgIH0sXG4gICAqIH07XG4gICAqIGBgYFxuICAgKi9cbiAgZXhlY3V0ZTogKHNjb3BlOiBUU2NvcGUpID0+IFByb21pc2U8VFBhdXNlRGF0YSB8IHZvaWQ+IHwgVFBhdXNlRGF0YSB8IHZvaWQ7XG4gIC8qKlxuICAgKiBSZXN1bWUgcGhhc2UuIENhbGxlZCB3aXRoIHRoZSByZXN1bWUgaW5wdXQgd2hlbiBleGVjdXRpb24gY29udGludWVzLlxuICAgKlxuICAgKiBUaGUgc2NvcGUgaXMgcmVzdG9yZWQgZnJvbSB0aGUgY2hlY2twb2ludCdzIGBzaGFyZWRTdGF0ZWAuIFdyaXRlcyBkdXJpbmdcbiAgICogYHJlc3VtZWAgYXJlIGNvbW1pdHRlZCBhbmQgdmlzaWJsZSB0byBzdWJzZXF1ZW50IHN0YWdlcy5cbiAgICovXG4gIHJlc3VtZTogKHNjb3BlOiBUU2NvcGUsIGlucHV0OiBUSW5wdXQpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xufVxuXG4vLyDilIDilIAgVHlwZSBndWFyZCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIENoZWNrIGlmIGEgdmFsdWUgaXMgYSBQYXVzZVJlc3VsdCAoc3RhZ2Ugd2FudHMgdG8gcGF1c2UpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGF1c2VSZXN1bHQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBQYXVzZVJlc3VsdCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICh2YWx1ZSBhcyBQYXVzZVJlc3VsdCkucGF1c2UgPT09IHRydWU7XG59XG5cbi8qKiBDaGVjayBpZiBhbiBlcnJvciBpcyBhIFBhdXNlU2lnbmFsLiBVc2VzIGluc3RhbmNlb2YgKyBuYW1lIGJyYW5kIGZhbGxiYWNrIGZvciBjcm9zcy1yZWFsbSBzYWZldHkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXVzZVNpZ25hbChlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIFBhdXNlU2lnbmFsIHtcbiAgcmV0dXJuIChcbiAgICBlcnJvciBpbnN0YW5jZW9mIFBhdXNlU2lnbmFsIHx8XG4gICAgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiZcbiAgICAgIGVycm9yLm5hbWUgPT09ICdQYXVzZVNpZ25hbCcgJiZcbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlcnJvciwgJ3BhdXNlRGF0YScpICYmXG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXJyb3IsICdzdGFnZUlkJykpXG4gICk7XG59XG4iXX0=
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3BhdXNlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7OztBQUVILCtEQUErRDtBQUUvRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLFdBQVksU0FBUSxLQUFLO0lBQ3BDLHVEQUF1RDtJQUM5QyxTQUFTLENBQVU7SUFDNUIsNENBQTRDO0lBQ25DLE9BQU8sQ0FBUztJQUN6Qjs7Ozs7OztPQU9HO0lBQ00sUUFBUSxDQUFlO0lBQ2hDLHlFQUF5RTtJQUNqRSxZQUFZLENBQVc7SUFFL0I7Ozs7Ozs7Ozs7T0FVRztJQUNLLGVBQWUsQ0FBVTtJQUN6QixvQkFBb0IsQ0FBVTtJQUV0Qzs7Ozs7Ozs7Ozs7T0FXRztJQUNLLGNBQWMsR0FBNEMsRUFBRSxDQUFDO0lBRXJFOzs7Ozs7O09BT0c7SUFDSyxjQUFjLEdBQTBCLEVBQUUsQ0FBQztJQUVuRCxZQUFZLElBQWEsRUFBRSxPQUFlLEVBQUUsUUFBc0I7UUFDaEUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxRQUFRO1lBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsdUZBQXVGO1FBQ3ZGLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWMsQ0FBQyxTQUFpQjtRQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyQyxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxjQUFjO1lBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxlQUFlLENBQUMsS0FBbUI7UUFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFDdkIsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhO1lBQ2xDLFdBQVcsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUNuQyxhQUFhLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFDekMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwRSxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDcEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDBGQUEwRjtJQUMxRixJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWM7UUFDWixPQUFPO1lBQ0wsYUFBYSxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQzNCLFdBQVcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztZQUNuQyxhQUFhLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDekMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNsRSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDbEQsQ0FBQztJQUNKLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsMEVBQTBFO0lBQzFFLElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLGNBQXNCLEVBQUUsbUJBQTRCO1FBQzdELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUM7WUFDdEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLG1CQUFtQixDQUFDO1FBQ2xELENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsbUJBQW1CLENBQUMsU0FBaUIsRUFBRSxLQUE4QjtRQUNuRSxpRUFBaUU7UUFDakUsbUVBQW1FO1FBQ25FLDREQUE0RDtRQUM1RCxrRUFBa0U7UUFDbEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVELGdEQUFnRDtJQUNoRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBN0pELGtDQTZKQztBQXdRRCwrREFBK0Q7QUFFL0QsZ0VBQWdFO0FBQ2hFLFNBQWdCLGFBQWEsQ0FBQyxLQUFjO0lBQzFDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUssS0FBcUIsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDO0FBQzlGLENBQUM7QUFGRCxzQ0FFQztBQUVELHdHQUF3RztBQUN4RyxTQUFnQixhQUFhLENBQUMsS0FBYztJQUMxQyxPQUFPLENBQ0wsS0FBSyxZQUFZLFdBQVc7UUFDNUIsQ0FBQyxLQUFLLFlBQVksS0FBSztZQUNyQixLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWE7WUFDNUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUM7WUFDeEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUMxRCxDQUFDO0FBQ0osQ0FBQztBQVJELHNDQVFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXVzZS9SZXN1bWUg4oCUIHNlcmlhbGl6YWJsZSBjaGVja3BvaW50IGZvciBsb25nLXJ1bm5pbmcgb3IgaHVtYW4taW4tdGhlLWxvb3AgZmxvd3MuXG4gKlxuICogQSBzdGFnZSBzaWduYWxzIHBhdXNlIGJ5IGNhbGxpbmcgYHNjb3BlLiRwYXVzZShkYXRhKWAgd2hpY2ggdGhyb3dzIGEgUGF1c2VTaWduYWwuXG4gKiBUaGUgc2lnbmFsIGJ1YmJsZXMgdXAgdGhyb3VnaCBTdWJmbG93RXhlY3V0b3Ig4oaSIEZsb3djaGFydFRyYXZlcnNlciDihpIgRmxvd0NoYXJ0RXhlY3V0b3IsXG4gKiBlYWNoIGxldmVsIGFkZGluZyBpdHMgc3ViZmxvdyBJRCB0byB0aGUgcGF0aC5cbiAqXG4gKiBUaGUgY2hlY2twb2ludCBjYXB0dXJlczpcbiAqICAgLSBwYXVzZWRTdGFnZUlkICsgc3ViZmxvd1BhdGg6IHRoZSBwYXVzZWQgc3RhZ2UncyBpZCBhbmQgaXRzIHN1YmZsb3cgcGF0aFxuICogICAtIHNoYXJlZFN0YXRlOiBzY29wZSBhdCB0aGUgcGF1c2UgcG9pbnRcbiAqICAgLSBleGVjdXRpb25UcmVlOiBjb21wbGV0ZWQgc3RhZ2VzIGZvciBCVFMvbmFycmF0aXZlXG4gKiAgIC0gcGF1c2VEYXRhOiBxdWVzdGlvbiwgcmVhc29uLCBvciBtZXRhZGF0YSBmcm9tICRwYXVzZSgpXG4gKlxuICogUmVzdW1lIHJlYnVpbGRzIHRoZSBmbG93Y2hhcnQsIHJlc3RvcmVzIHNjb3BlLCBuYXZpZ2F0ZXMgdG8gdGhlIHBhdXNlZCBzdGFnZSxcbiAqIGluamVjdHMgcmVzdW1lSW5wdXQsIGFuZCBjb250aW51ZXMgdHJhdmVyc2FsLlxuICpcbiAqIFN1cHBvcnRlZCB0b3BvbG9naWVzOiBsaW5lYXIsIHN1YmZsb3cgKGF0IGFueSBkZXB0aCDigJQgbW91bnRlZCBsaW5lYXJseSwgYXMgYVxuICogZGVjaWRlciBvciBzZWxlY3RvciBicmFuY2gsIG9yIGFzIGEgZm9yayBjaGlsZCksIGxvb3AsIG5lc3RlZCBzdWJmbG93IGluXG4gKiBsb29wLCBhbmQgc2V2ZXJhbCBwYXJhbGxlbCBzaWJsaW5ncyBwYXVzaW5nIGluIG9uZSBmYW4tb3V0IChlYWNoIGFza3MgaW5cbiAqIHR1cm4g4oCUIGBGbG93Y2hhcnRDaGVja3BvaW50LnBlbmRpbmdQYXVzZXNgKS5cbiAqXG4gKiBOT1QgcmVzdW1hYmxlIHlldDogYSBwYXVzZSBpbnNpZGUgYSBMQVpZIHN1YmZsb3cgKGBhZGRMYXp5U3ViRmxvd0NoYXJ0KmApIG9yXG4gKiBpbnNpZGUgYW4gYGFkZFBhcmFsbGVsRm9yRWFjaGAgYnJhbmNoLiBUaGVpciBncmFwaHMgYXJlIHJlc29sdmVkIGF0IHJ1biB0aW1lXG4gKiBhbmQgYXJlIG5vdCBpbiB0aGUgY2hhcnQgYSByZXN1bWUgd2Fsa3MsIHNvIGByZXN1bWUoKWAgcmVmdXNlcyB0aGVcbiAqIGNoZWNrcG9pbnQgKFwibm90IGZvdW5kXCIpIGluc3RlYWQgb2YgZ3Vlc3NpbmcuIFBpbm5lZCBpblxuICogdGVzdC9saWIvcGF1c2UvcmVzdW1lLWtub3duLWxpbWl0YXRpb25zLnRlc3QudHMuXG4gKi9cblxuLy8g4pSA4pSAIFBhdXNlU2lnbmFsIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFRocm93biBieSBgc2NvcGUuJHBhdXNlKClgIHRvIHNpZ25hbCB0aGF0IGV4ZWN1dGlvbiBzaG91bGQgc3RvcFxuICogYW5kIGNyZWF0ZSBhIHNlcmlhbGl6YWJsZSBjaGVja3BvaW50LlxuICpcbiAqIEJ1YmJsZXMgdXAgdGhyb3VnaCBTdWJmbG93RXhlY3V0b3IgKHdoaWNoIHByZXBlbmRzIHN1YmZsb3cgSUQgdG8gcGF0aClcbiAqIGFuZCBpcyBjYXVnaHQgYnkgRmxvd2NoYXJ0VHJhdmVyc2VyL0Zsb3dDaGFydEV4ZWN1dG9yLlxuICovXG5leHBvcnQgY2xhc3MgUGF1c2VTaWduYWwgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKiBEYXRhIGZyb20gJHBhdXNlKCkg4oCUIHF1ZXN0aW9uLCByZWFzb24sIG1ldGFkYXRhLiAqL1xuICByZWFkb25seSBwYXVzZURhdGE6IHVua25vd247XG4gIC8qKiBJRCBvZiB0aGUgc3RhZ2UgdGhhdCBjYWxsZWQgJHBhdXNlKCkuICovXG4gIHJlYWRvbmx5IHN0YWdlSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIEhPVyB0aGUgcGF1c2Ugd2FzIHJhaXNlZCDigJQgYCdpbnRlcnJ1cHQnYCB3aGVuIGEgc3RhZ2UgYm9keSBjYWxsZWRcbiAgICogYGludGVycnVwdChzY29wZSwgcGF5bG9hZClgLCBhYnNlbnQgZm9yIHRoZSBgYWRkUGF1c2FibGVGdW5jdGlvbmBcbiAgICogZXhlY3V0ZS9yZXN1bWUgcGF0aC4gU2V0IGF0IHRoZSBzdGFnZSBib3VuZGFyeSAoYFN0YWdlUnVubmVyYCksIGNhcnJpZWRcbiAgICogb250byB0aGUgY2hlY2twb2ludCwgYW5kIHJlYWQgYnkgYHJlc3VtZSgpYCB0byBwaWNrIHRoZSByZS1lbnRyeTogYW5cbiAgICogaW50ZXJydXB0ZWQgc3RhZ2UgcmUtcnVucyBpdHMgT1dOIGZ1bmN0aW9uIGZyb20gdGhlIHRvcCAoc3RhZ2VzIGFyZVxuICAgKiBhdG9taWMpLCBhIHBhdXNhYmxlIHN0YWdlIHJ1bnMgaXRzIGByZXN1bWVGbmAuXG4gICAqL1xuICByZWFkb25seSBwYXVzZWRCeT86ICdpbnRlcnJ1cHQnO1xuICAvKiogUGF0aCB0aHJvdWdoIHN1YmZsb3dzIHRvIHRoZSBwYXVzZWQgc3RhZ2UuIEJ1aWx0IGR1cmluZyBidWJibGUtdXAuICovXG4gIHByaXZhdGUgX3N1YmZsb3dQYXRoOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogSW52b2tlciBjb250ZXh0IOKAlCBlbnJpY2hlZCBkdXJpbmcgYnViYmxlLXVwIHdoZW4gYSBQYXVzZVNpZ25hbCBwYXNzZXNcbiAgICogdGhyb3VnaCBhIGRlY2lkZXIsIHNlbGVjdG9yLCBvciBmb3JrIGhhbmRsZXIuXG4gICAqXG4gICAqIFRoZSBpbnZva2VyIGlzIHRoZSBzdGFnZSB0aGF0IGNhbGxlZCBleGVjdXRlTm9kZSgpIG9uIHRoZSBwYXVzZWQgY2hpbGQuXG4gICAqIENhcHR1cmVkIGR1cmluZyB0cmF2ZXJzYWwgKG5vdCByZWNvbnN0cnVjdGVkIGZyb20gdGhlIHRyZWUpLlxuICAgKlxuICAgKiBgY29udGludWF0aW9uU3RhZ2VJZGAgaXMgdGhlIGludm9rZXIncyBgLm5leHRgIG5vZGUg4oCUIHdoZXJlIGV4ZWN1dGlvblxuICAgKiBzaG91bGQgY29udGludWUgYWZ0ZXIgcmVzdW1lLiBXaXRob3V0IHRoaXMsIGJyYW5jaCBjaGlsZHJlbiBoYXZlIG5vXG4gICAqIGAubmV4dGAgcG9pbnRlciBhbmQgcmVzdW1lIHdvdWxkIHRlcm1pbmF0ZSBlYXJseS5cbiAgICovXG4gIHByaXZhdGUgX2ludm9rZXJTdGFnZUlkPzogc3RyaW5nO1xuICBwcml2YXRlIF9jb250aW51YXRpb25TdGFnZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdWJmbG93IHNjb3BlIGNhcHR1cmUg4oCUIHBvcHVsYXRlZCBkdXJpbmcgYnViYmxlLXVwIGJ5XG4gICAqIGBTdWJmbG93RXhlY3V0b3JgIHJpZ2h0IGJlZm9yZSByZS10aHJvdy4gRWFjaCBlbnRyeSBpcyBvbmVcbiAgICogc3ViZmxvdydzIHByZS1wYXVzZSBzaGFyZWQgc3RhdGUsIGtleWVkIGJ5IHRoZSBwYXRoLXByZWZpeGVkXG4gICAqIHN1YmZsb3cgaWQgKG1hdGNoZXMgYHN1YmZsb3dQYXRoYCkuXG4gICAqXG4gICAqIFdpdGhvdXQgdGhpcywgdGhlIG5lc3RlZCBgU2hhcmVkTWVtb3J5YCBpcyBnYXJiYWdlLWNvbGxlY3RlZFxuICAgKiBiZWZvcmUgdGhlIGNoZWNrcG9pbnQgaXMgYnVpbHQuIE9uIHJlc3VtZSwgdGhlIGlubmVyIHJ1bnRpbWUgaXNcbiAgICogcmUtY3JlYXRlZCBlbXB0eSBhbmQgcmVzdW1lIGhhbmRsZXJzIHJlYWRpbmcgcHJlLXBhdXNlIHNjb3BlXG4gICAqIChlLmcuLCBhbiBBZ2VudCdzIGBzY29wZS5oaXN0b3J5YCwgYHNjb3BlLnBhdXNlZFRvb2xDYWxsSWRgKVxuICAgKiBjcmFzaCB3aXRoIFwiWCBpcyBub3QgaXRlcmFibGVcIiAvIHVuZGVmaW5lZC5cbiAgICovXG4gIHByaXZhdGUgX3N1YmZsb3dTdGF0ZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IHt9O1xuXG4gIC8qKlxuICAgKiBQYXVzZXMgdGhhdCBQQVJBTExFTCBTSUJMSU5HUyByYWlzZWQgaW4gdGhlIHNhbWUgZmFuLW91dCBhcyB0aGlzIG9uZSxcbiAgICogd2FpdGluZyB0aGVpciB0dXJuICg5LjI4LjApLiBSZWNvcmRlZCBieSBgQ2hpbGRyZW5FeGVjdXRvcmAgd2hlbiBtb3JlXG4gICAqIHRoYW4gb25lIGNoaWxkIG9mIGEgZm9yayAob3IgbW9yZSB0aGFuIG9uZSBzZWxlY3RlZCBicmFuY2gpIHBhdXNlczogdGhlXG4gICAqIGZpcnN0IHBhdXNlIGlzIHRoZSBvbmUgdGhhdCBpcyBhc2tlZCwgdGhlIG90aGVycyByaWRlIGhlcmUgaW5zdGVhZCBvZlxuICAgKiBiZWluZyBkcm9wcGVkLiBFYWNoIHBhdGggaXMgcmVsYXRpdmUgdG8gd2hlcmUgdGhlIHNpZ25hbCBjdXJyZW50bHkgaXNcbiAgICogYW5kIGdyb3dzIHdpdGggaXQg4oCUIGBwcmVwZW5kU3ViZmxvd2AgcHJlcGVuZHMgdG8gZXZlcnkgZW50cnkgdG9vLlxuICAgKi9cbiAgcHJpdmF0ZSBfcGVuZGluZ1BhdXNlczogTXV0YWJsZVBlbmRpbmdQYXVzZVtdID0gW107XG5cbiAgY29uc3RydWN0b3IoZGF0YTogdW5rbm93biwgc3RhZ2VJZDogc3RyaW5nLCBwYXVzZWRCeT86ICdpbnRlcnJ1cHQnKSB7XG4gICAgc3VwZXIoJ0V4ZWN1dGlvbiBwYXVzZWQnKTtcbiAgICB0aGlzLm5hbWUgPSAnUGF1c2VTaWduYWwnO1xuICAgIHRoaXMucGF1c2VEYXRhID0gZGF0YTtcbiAgICB0aGlzLnN0YWdlSWQgPSBzdGFnZUlkO1xuICAgIGlmIChwYXVzZWRCeSkgdGhpcy5wYXVzZWRCeSA9IHBhdXNlZEJ5O1xuICAgIHRoaXMuX3N1YmZsb3dQYXRoID0gW107XG4gICAgLy8gUGF1c2VTaWduYWwgaXMgY29udHJvbCBmbG93LCBub3QgYSByZWFsIGVycm9yIOKAlCBzdGFjayB0cmFjZSBoYXMgbm8gZGlhZ25vc3RpYyB2YWx1ZS5cbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cblxuICBnZXQgc3ViZmxvd1BhdGgoKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl9zdWJmbG93UGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwZW5kIGEgc3ViZmxvdyBJRCB0byB0aGUgcGF0aCAoY2FsbGVkIGR1cmluZyBidWJibGUtdXApLiBUaGUgcGVuZGluZ1xuICAgKiBzaWJsaW5nIHBhdXNlcyByaWRlIHRoZSBzYW1lIGJvdW5kYXJ5LCBzbyB0aGVpciBwYXRocyBncm93IHdpdGggaXQuXG4gICAqL1xuICBwcmVwZW5kU3ViZmxvdyhzdWJmbG93SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX3N1YmZsb3dQYXRoLnVuc2hpZnQoc3ViZmxvd0lkKTtcbiAgICBmb3IgKGNvbnN0IHBlbmRpbmcgb2YgdGhpcy5fcGVuZGluZ1BhdXNlcykgcGVuZGluZy5zdWJmbG93UGF0aC51bnNoaWZ0KHN1YmZsb3dJZCk7XG4gIH1cblxuICAvKipcbiAgICogUXVldWUgYSBwYXJhbGxlbCBzaWJsaW5nJ3MgcGF1c2UgYmVoaW5kIHRoaXMgb25lIChpdHMgcGF0aCByZWxhdGl2ZSB0b1xuICAgKiB0aGlzIHNpZ25hbCdzIGN1cnJlbnQgbGV2ZWwpLiBDb3BpZWQgaW46IHRoZSBlbnRyeSBpcyBvd25lZCBieSB0aGVcbiAgICogc2lnbmFsIGZyb20gaGVyZSBvbi5cbiAgICovXG4gIGFkZFBlbmRpbmdQYXVzZShwYXVzZTogUGVuZGluZ1BhdXNlKTogdm9pZCB7XG4gICAgdGhpcy5fcGVuZGluZ1BhdXNlcy5wdXNoKHtcbiAgICAgIHBhdXNlZFN0YWdlSWQ6IHBhdXNlLnBhdXNlZFN0YWdlSWQsXG4gICAgICBzdWJmbG93UGF0aDogWy4uLnBhdXNlLnN1YmZsb3dQYXRoXSxcbiAgICAgIHN1YmZsb3dTdGF0ZXM6IHsgLi4ucGF1c2Uuc3ViZmxvd1N0YXRlcyB9LFxuICAgICAgLi4uKHBhdXNlLnBhdXNlRGF0YSAhPT0gdW5kZWZpbmVkICYmIHsgcGF1c2VEYXRhOiBwYXVzZS5wYXVzZURhdGEgfSksXG4gICAgICAuLi4ocGF1c2UucGF1c2VkQnkgJiYgeyBwYXVzZWRCeTogcGF1c2UucGF1c2VkQnkgfSksXG4gICAgfSk7XG4gIH1cblxuICAvKiogUGFyYWxsZWwgc2libGluZ3MnIHBhdXNlcyB3YWl0aW5nIGJlaGluZCB0aGlzIG9uZSwgaW4gdGhlIG9yZGVyIHRoZXkgd2lsbCBiZSBhc2tlZC4gKi9cbiAgZ2V0IHBlbmRpbmdQYXVzZXMoKTogcmVhZG9ubHkgUGVuZGluZ1BhdXNlW10ge1xuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nUGF1c2VzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgcGF1c2UgYXMgYSB7QGxpbmsgUGVuZGluZ1BhdXNlfSDigJQgd2hhdCBgQ2hpbGRyZW5FeGVjdXRvcmAgcXVldWVzXG4gICAqIGJlaGluZCBhIHNpYmxpbmcncyBwYXVzZSB3aGVuIGJvdGggcGF1c2VkIGluIG9uZSBmYW4tb3V0LlxuICAgKi9cbiAgdG9QZW5kaW5nUGF1c2UoKTogUGVuZGluZ1BhdXNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF1c2VkU3RhZ2VJZDogdGhpcy5zdGFnZUlkLFxuICAgICAgc3ViZmxvd1BhdGg6IFsuLi50aGlzLl9zdWJmbG93UGF0aF0sXG4gICAgICBzdWJmbG93U3RhdGVzOiB7IC4uLnRoaXMuX3N1YmZsb3dTdGF0ZXMgfSxcbiAgICAgIC4uLih0aGlzLnBhdXNlRGF0YSAhPT0gdW5kZWZpbmVkICYmIHsgcGF1c2VEYXRhOiB0aGlzLnBhdXNlRGF0YSB9KSxcbiAgICAgIC4uLih0aGlzLnBhdXNlZEJ5ICYmIHsgcGF1c2VkQnk6IHRoaXMucGF1c2VkQnkgfSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBUaGUgc3RhZ2UgdGhhdCBpbnZva2VkIHRoZSBwYXVzZWQgY2hpbGQgKGRlY2lkZXIsIHNlbGVjdG9yLCBmb3JrKS4gKi9cbiAgZ2V0IGludm9rZXJTdGFnZUlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ludm9rZXJTdGFnZUlkO1xuICB9XG5cbiAgLyoqIFdoZXJlIGV4ZWN1dGlvbiBzaG91bGQgY29udGludWUgYWZ0ZXIgcmVzdW1lIChpbnZva2VyJ3MgbmV4dCBub2RlKS4gKi9cbiAgZ2V0IGNvbnRpbnVhdGlvblN0YWdlSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGludWF0aW9uU3RhZ2VJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFtcCB0aGUgaW52b2tlciBjb250ZXh0IGR1cmluZyBidWJibGUtdXAuXG4gICAqIENhbGxlZCBieSBkZWNpZGVyL3NlbGVjdG9yL2ZvcmsgaGFuZGxlcnMgd2hlbiBjYXRjaGluZyBhIGNoaWxkJ3MgUGF1c2VTaWduYWwuXG4gICAqIEZpcnN0IGludm9rZXIgd2lucyAoaW5uZXJtb3N0KSDigJQgc3Vic2VxdWVudCBjYWxscyBhcmUgbm8tb3BzLlxuICAgKi9cbiAgc2V0SW52b2tlcihpbnZva2VyU3RhZ2VJZDogc3RyaW5nLCBjb250aW51YXRpb25TdGFnZUlkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pbnZva2VyU3RhZ2VJZCkge1xuICAgICAgdGhpcy5faW52b2tlclN0YWdlSWQgPSBpbnZva2VyU3RhZ2VJZDtcbiAgICAgIHRoaXMuX2NvbnRpbnVhdGlvblN0YWdlSWQgPSBjb250aW51YXRpb25TdGFnZUlkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYXB0dXJlIGEgc3ViZmxvdydzIGlzb2xhdGVkIFNoYXJlZE1lbW9yeSBhdCB0aGUgbW9tZW50IGl0c1xuICAgKiB0cmF2ZXJzYWwgdGhyZXcuIENhbGxlZCBieSBgU3ViZmxvd0V4ZWN1dG9yYCBvbmNlIHBlciBzdWJmbG93XG4gICAqIGJvdW5kYXJ5IG9uIHRoZSBidWJibGUtdXAgcGF0aC4gRWFjaCBjYXB0dXJlIGlzIGtleWVkIGJ5IHRoZVxuICAgKiBwYXRoLXByZWZpeGVkIHN1YmZsb3cgaWQgKHRoZSBzYW1lIGlkIHVzZWQgaW4gYHN1YmZsb3dQYXRoYCkuXG4gICAqXG4gICAqIElubmVybW9zdC1maXJzdDogYSBkZWVwIGBTZXF1ZW5jZShBZ2VudCguLi4pKWAgcGF1c2UgY2FwdHVyZXMgdGhlXG4gICAqIGFnZW50J3Mgc3ViZmxvdyBmaXJzdCwgdGhlbiBpdHMgcGFyZW50J3MsIGFsbCB0aGUgd2F5IHRvIHRoZSByb290XG4gICAqIG1vdW50LiBUaGUgZnVsbCBuZXN0IHN1cnZpdmVzIGludG8gYGNoZWNrcG9pbnQuc3ViZmxvd1N0YXRlc2AuXG4gICAqL1xuICBjYXB0dXJlU3ViZmxvd1Njb3BlKHN1YmZsb3dJZDogc3RyaW5nLCBzdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICAvLyBEZWZlbnNpdmUgc2hhbGxvdyBjbG9uZSBzbyBsYXRlciBtdXRhdGlvbnMgb24gdGhlIHNvdXJjZSBkb24ndFxuICAgIC8vIGJsZWVkIGludG8gdGhlIGNhcHR1cmVkIHNuYXBzaG90LiBEZWVwIGNsb25pbmcgaXMgdGhlIGNvbnN1bWVyJ3NcbiAgICAvLyByZXNwb25zaWJpbGl0eSAodGhlIHJlc3VtZSB0YXJnZXQgbWF5IG5vdCBldmVuIGJlIG9uIHRoaXNcbiAgICAvLyBwcm9jZXNzKTsgU2hhcmVkTWVtb3J5IHZhbHVlcyBhcmUgY29udmVudGlvbmFsbHkgSlNPTi1mcmllbmRseS5cbiAgICB0aGlzLl9zdWJmbG93U3RhdGVzW3N1YmZsb3dJZF0gPSB7IC4uLnN0YXRlIH07XG4gIH1cblxuICAvKiogQ2FwdHVyZWQgc3ViZmxvdyBzY29wZXMgKHJlYWQtb25seSB2aWV3KS4gKi9cbiAgZ2V0IHN1YmZsb3dTdGF0ZXMoKTogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PiB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmZsb3dTdGF0ZXM7XG4gIH1cbn1cblxuLy8g4pSA4pSAIFBlbmRpbmdQYXVzZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBBIHBhdXNlIGEgUEFSQUxMRUwgU0lCTElORyBvZiB0aGUgcGF1c2VkIHN0YWdlIHJhaXNlZCBpbiB0aGUgc2FtZSBmYW4tb3V0IOKAlFxuICogdHdvIGNoaWxkcmVuIG9mIG9uZSBmb3JrIChvciB0d28gc2VsZWN0ZWQgYnJhbmNoZXMgb2Ygb25lIHNlbGVjdG9yKSB0aGF0XG4gKiBib3RoIHBhdXNlZCAoOS4yOC4wKS4gT25seSBvbmUgcGF1c2UgaXMgYXNrZWQgYXQgYSB0aW1lOiB0aGUgY2hlY2twb2ludCdzXG4gKiBvd24gKGBwYXVzZWRTdGFnZUlkYCksIHRoZW4gZWFjaCBvZiB0aGVzZSBpbiB0dXJuLCB3aXRoIHRoZSBmYW4tb3V0J3Mgam9pblxuICogcnVubmluZyBvbmx5IG9uY2UgZXZlcnkgY2hpbGQgaXMgZG9uZS5cbiAqXG4gKiBFdmVyeXRoaW5nIG5lZWRlZCB0byByYWlzZSB0aGUgc2libGluZydzIHBhdXNlIGFnYWluIGxhdGVyIFdJVEhPVVQgcmUtcnVubmluZ1xuICogdGhlIHNpYmxpbmc6IGl0cyBzdGFnZSwgaXRzIHBhdGgsIGl0cyBjYXB0dXJlZCBzdWJmbG93IHN0YXRlLCBpdHMgcXVlc3Rpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEEgZm9yayB3aG9zZSB0d28gY2hpbGRyZW4gYm90aCBhc2s6IHRoZSBmaXJzdCBjaGVja3BvaW50IGFza3MgYzEgYW5kXG4gKiAvLyBjYXJyaWVzIGMyJ3MgcGF1c2U7IHJlc3VtaW5nIGl0IGZpbmlzaGVzIGMxLCB0aGVuIHBhdXNlcyB3aXRoIGMyJ3NcbiAqIC8vIHF1ZXN0aW9uOyByZXN1bWluZyBUSEFUIGZpbmlzaGVzIGMyIGFuZCBydW5zIHRoZSBqb2luLlxuICogY29uc3QgY3AgPSBleGVjdXRvci5nZXRDaGVja3BvaW50KCkhO1xuICogY3AucGF1c2VkU3RhZ2VJZDsgICAgICAgICAgICAgICAgICAvLyAnYzEvYXNrJ1xuICogY3AucGVuZGluZ1BhdXNlcz8uWzBdLnBhdXNlZFN0YWdlSWQ7IC8vICdjMi9hc2snXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZW5kaW5nUGF1c2Uge1xuICAvKiogVGhlIHNpYmxpbmcncyBwYXVzZWQgc3RhZ2UgKHBhdGgtcHJlZml4ZWQgaWQsIGFzIGBwYXVzZWRTdGFnZUlkYCkuICovXG4gIHJlYWRvbmx5IHBhdXNlZFN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFBhdGggdGhyb3VnaCBzdWJmbG93cyB0byB0aGUgc2libGluZydzIHBhdXNlZCBzdGFnZSAoYXMgYHN1YmZsb3dQYXRoYCkuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBzaWJsaW5nJ3Mgb3duIHN1YmZsb3cgY2FwdHVyZXMg4oCUIHRoZSBzdWJmbG93cyBvbiBJVFMgcGF0aCBiZWxvdyB0aGVcbiAgICogZmFuLW91dC4gVGhlIHN1YmZsb3dzIGFib3ZlIHRoZSBmYW4tb3V0IGFyZSBzaGFyZWQgd2l0aCB0aGUgY2hlY2twb2ludCdzXG4gICAqIG93biBwYXVzZSBhbmQgYXJlIGNhcHR1cmVkIGFnYWluIHdoZW4gdGhpcyBwYXVzZSBpcyByYWlzZWQuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93U3RhdGVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG4gIC8qKiBUaGUgc2libGluZydzIHF1ZXN0aW9uIChhcyBgcGF1c2VEYXRhYCkuICovXG4gIHJlYWRvbmx5IHBhdXNlRGF0YT86IHVua25vd247XG4gIC8qKiBIb3cgdGhlIHNpYmxpbmcgcGF1c2VkIChhcyBgcGF1c2VkQnlgKS4gKi9cbiAgcmVhZG9ubHkgcGF1c2VkQnk/OiAnaW50ZXJydXB0Jztcbn1cblxuLyoqIEEgcGVuZGluZyBwYXVzZSB3aG9zZSBwYXRoIHN0aWxsIGdyb3dzIGFzIGl0cyBzaWduYWwgYnViYmxlcyB1cCAoaW50ZXJuYWwpLiAqL1xudHlwZSBNdXRhYmxlUGVuZGluZ1BhdXNlID0gT21pdDxQZW5kaW5nUGF1c2UsICdzdWJmbG93UGF0aCc+ICYgeyBzdWJmbG93UGF0aDogc3RyaW5nW10gfTtcblxuLy8g4pSA4pSAIFBhdXNlUmVzdWx0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFJldHVybmVkIGJ5IGEgcGF1c2FibGUgc3RhZ2UncyBleGVjdXRlL3Jlc3VtZSBmdW5jdGlvbiB0byBzaWduYWwgcGF1c2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4ZWN1dGU6IGFzeW5jIChzY29wZSkgPT4ge1xuICogICBzY29wZS5vcmRlcklkID0gJzEyMyc7XG4gKiAgIHJldHVybiB7IHBhdXNlOiB0cnVlLCBkYXRhOiB7IHF1ZXN0aW9uOiAnQXBwcm92ZSBvcmRlciAxMjM/JyB9IH07XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXVzZVJlc3VsdCB7XG4gIHJlYWRvbmx5IHBhdXNlOiB0cnVlO1xuICAvKiogRGF0YSB0byBpbmNsdWRlIGluIHRoZSBjaGVja3BvaW50IOKAlCBxdWVzdGlvbiwgcmVhc29uLCBtZXRhZGF0YS4gKi9cbiAgcmVhZG9ubHkgZGF0YT86IHVua25vd247XG59XG5cbi8vIOKUgOKUgCBGbG93Y2hhcnRDaGVja3BvaW50IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFNlcmlhbGl6YWJsZSBjaGVja3BvaW50IOKAlCBldmVyeXRoaW5nIG5lZWRlZCB0byByZXN1bWUgYSBwYXVzZWQgZmxvd2NoYXJ0LlxuICpcbiAqIEpTT04tc2FmZTogbm8gZnVuY3Rpb25zLCBubyBjbGFzcyBpbnN0YW5jZXMsIG5vIFNESyBjbGllbnRzLlxuICogU3RvcmUgYW55d2hlcmU6IFJlZGlzLCBQb3N0Z3JlcywgbG9jYWxTdG9yYWdlLCBhIGZpbGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIFNhdmVcbiAqIGNvbnN0IGNoZWNrcG9pbnQgPSBleGVjdXRvci5nZXRDaGVja3BvaW50KCk7IC8vIGFmdGVyIHBhdXNlXG4gKiBhd2FpdCByZWRpcy5zZXQoYHNlc3Npb246JHtpZH1gLCBKU09OLnN0cmluZ2lmeShjaGVja3BvaW50KSk7XG4gKlxuICogLy8gUmVzdW1lIChob3VycyBsYXRlciwgcG9zc2libHkgZGlmZmVyZW50IHNlcnZlcilcbiAqIGNvbnN0IGNoZWNrcG9pbnQgPSBKU09OLnBhcnNlKGF3YWl0IHJlZGlzLmdldChgc2Vzc2lvbjoke2lkfWApKTtcbiAqIGNvbnN0IGV4ZWN1dG9yID0gbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0KTtcbiAqIGF3YWl0IGV4ZWN1dG9yLnJlc3VtZShjaGVja3BvaW50LCB7IGFwcHJvdmVkOiB0cnVlIH0pO1xuICogYGBgXG4gKi9cbi8qKlxuICogU2VyaWFsaXphYmxlIGNoZWNrcG9pbnQg4oCUIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIHJlc3VtZSBhIHBhdXNlZCBmbG93Y2hhcnQuXG4gKlxuICogVGhlIGV4ZWN1dGlvbiB0cmVlIElTIHRoZSB0cmF2ZXJzZWQgcGF0aC4gVGhlIGxlYWYgbm9kZSB3aXRoIHN0YXR1cyAncGF1c2VkJ1xuICogSVMgdGhlIGN1cnNvci4gTm8gc2VwYXJhdGUgcGF0aCBhcnJheSBuZWVkZWQg4oCUIHRoZSB0cmVlIHN0cnVjdHVyZSBjYXB0dXJlc1xuICogdGhlIGZ1bGwgbmVzdGluZyAoaW5jbHVkaW5nIHN1YmZsb3dzKS5cbiAqXG4gKiBKU09OLXNhZmU6IG5vIGZ1bmN0aW9ucywgbm8gY2xhc3MgaW5zdGFuY2VzLCBubyBTREsgY2xpZW50cy5cbiAqIFN0b3JlIGFueXdoZXJlOiBSZWRpcywgUG9zdGdyZXMsIGxvY2FsU3RvcmFnZSwgYSBmaWxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBjaGVja3BvaW50ID0gZXhlY3V0b3IuZ2V0Q2hlY2twb2ludCgpOyAvLyBhZnRlciBwYXVzZVxuICogYXdhaXQgcmVkaXMuc2V0KGBzZXNzaW9uOiR7aWR9YCwgSlNPTi5zdHJpbmdpZnkoY2hlY2twb2ludCkpO1xuICpcbiAqIC8vIFJlc3VtZSAoaG91cnMgbGF0ZXIsIHBvc3NpYmx5IGRpZmZlcmVudCBzZXJ2ZXIpXG4gKiBjb25zdCBjaGVja3BvaW50ID0gSlNPTi5wYXJzZShhd2FpdCByZWRpcy5nZXQoYHNlc3Npb246JHtpZH1gKSk7XG4gKiBjb25zdCBleGVjdXRvciA9IG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCk7XG4gKiBhd2FpdCBleGVjdXRvci5yZXN1bWUoY2hlY2twb2ludCwgeyBhcHByb3ZlZDogdHJ1ZSB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZsb3djaGFydENoZWNrcG9pbnQge1xuICAvKiogU2NvcGUgc3RhdGUgYXQgdGhlIHBhdXNlIHBvaW50IOKAlCBhbGwgc2hhcmVkIG1lbW9yeSBrZXkvdmFsdWVzLiAqL1xuICByZWFkb25seSBzaGFyZWRTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqIEV4ZWN1dGlvbiB0cmVlIOKAlCB0aGUgdHJhdmVyc2VkIHBhdGguIFRoZSBsZWFmIHdpdGggc3RhdHVzICdwYXVzZWQnIGlzIHRoZSBjdXJzb3IuXG4gICAqICBDb250YWlucyBzdWJmbG93IG5lc3RpbmcuIFVzZWQgZm9yIEJUUyB2aXN1YWxpemF0aW9uIGFuZCB0byBmaW5kIHRoZSByZXN1bWUgcG9pbnQuICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblRyZWU6IHVua25vd247XG5cbiAgLyoqIElEIG9mIHRoZSBzdGFnZSB0aGF0IHBhdXNlZC4gVXNlZCBieSByZXN1bWUoKSB0byBmaW5kIHRoZSBub2RlIGluIHRoZSBncmFwaC4gKi9cbiAgcmVhZG9ubHkgcGF1c2VkU3RhZ2VJZDogc3RyaW5nO1xuXG4gIC8qKiBQYXRoIHRocm91Z2ggc3ViZmxvd3MgdG8gdGhlIHBhdXNlZCBzdGFnZSAoZS5nLiwgWydzZi1wYXltZW50JywgJ3NmLXZhbGlkYXRpb24nXSkuXG4gICAqICBFbXB0eSBhcnJheSB3aGVuIHBhdXNlZCBhdCB0aGUgdG9wIGxldmVsLiAqL1xuICByZWFkb25seSBzdWJmbG93UGF0aDogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqIERhdGEgZnJvbSAkcGF1c2UoKSDigJQgcXVlc3Rpb24sIHJlYXNvbiwgbWV0YWRhdGEuICovXG4gIHJlYWRvbmx5IHBhdXNlRGF0YT86IHVua25vd247XG5cbiAgLyoqXG4gICAqIEhPVyB0aGUgcGF1c2Ugd2FzIHJhaXNlZC4gYCdpbnRlcnJ1cHQnYCBtZWFucyBhIHN0YWdlIGJvZHkgY2FsbGVkXG4gICAqIGBpbnRlcnJ1cHQoc2NvcGUsIHsgcmVhc29uLCBleHBlY3RzPyB9KWAgYW5kIGBwYXVzZURhdGFgIElTIHRoYXQgcGF5bG9hZDtcbiAgICogYWJzZW50IG1lYW5zIHRoZSBgYWRkUGF1c2FibGVGdW5jdGlvbmAgZXhlY3V0ZS9yZXN1bWUgcGF0aCAoZXZlcnlcbiAgICogY2hlY2twb2ludCB3cml0dGVuIGJlZm9yZSA5LjE0LjAgb21pdHMgaXQsIHdoaWNoIGlzIGV4YWN0bHkgcmlnaHQpLlxuICAgKlxuICAgKiBgcmVzdW1lKClgIHJlYWRzIHRoaXMgdG8gcGljayB0aGUgcmUtZW50cnksIGFuZCB0aGUgdHdvIGRpZmZlciBieSBsYXc6XG4gICAqIGFuIGludGVycnVwdGVkIHN0YWdlIFJFLVJVTlMgSVRTIE9XTiBGVU5DVElPTiBGUk9NIFRIRSBUT1AgKHN0YWdlcyBhcmVcbiAgICogYXRvbWljIOKAlCB0aGUgYW5zd2VyIGNvbWVzIGJhY2sgb3V0IG9mIHRoZSBgaW50ZXJydXB0KClgIGNhbGwpLCB3aGlsZSBhXG4gICAqIHBhdXNhYmxlIHN0YWdlIHJ1bnMgaXRzIHNlcGFyYXRlIGByZXN1bWVGbmAuXG4gICAqL1xuICByZWFkb25seSBwYXVzZWRCeT86ICdpbnRlcnJ1cHQnO1xuXG4gIC8qKiBTdWJmbG93IHJlc3VsdHMgY29sbGVjdGVkIGJlZm9yZSB0aGUgcGF1c2UuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dSZXN1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFN1YmZsb3cgc2NvcGUgY2FwdHVyZSDigJQgb25lIGVudHJ5IHBlciBzdWJmbG93IGJvdW5kYXJ5IG9uIHRoZSBwYXRoXG4gICAqIHRvIHRoZSBwYXVzZWQgc3RhZ2UuIEtleWVkIGJ5IHBhdGgtcHJlZml4ZWQgc3ViZmxvdyBpZCAobWF0Y2hlc1xuICAgKiBgc3ViZmxvd1BhdGhgIGVudHJpZXMpLiBFYWNoIHZhbHVlIGlzIHRoZSBzdWJmbG93J3MgcHJlLXBhdXNlXG4gICAqIHNoYXJlZCBzdGF0ZS5cbiAgICpcbiAgICogQWx3YXlzIHByZXNlbnQgKGVtcHR5IGB7fWAgZm9yIHJvb3QtbGV2ZWwgcGF1c2VzIHdoZXJlIG5vIHN1YmZsb3dzXG4gICAqIHdlcmUgZW50ZXJlZCkuIE9uIHJlc3VtZSwgYFN1YmZsb3dFeGVjdXRvcmAgc2VlZHMgZWFjaCBuZXN0ZWQgcnVudGltZVxuICAgKiBvbiB0aGUgcGF0aCBmcm9tIHRoaXMgbWFwIOKAlCBPTkNFLCBvbiBpdHMgZmlyc3QgZW50cnksIGluIHBsYWNlIG9mIHRoZVxuICAgKiBpbnB1dE1hcHBlcidzIHZhbHVlcyAodGhlIG1hcHBlciBzdGlsbCBydW5zLCBmb3IgdGhlIHN0YWdlcycgcmVhZC1vbmx5XG4gICAqIGFyZ3MpIOKAlCBzbyByZXN1bWUgaGFuZGxlcnMgc2VlIHByZS1wYXVzZSBzY29wZSBhY3Jvc3Mgc2FtZS1leGVjdXRvciBBTkRcbiAgICogY3Jvc3MtZXhlY3V0b3IgcmVzdGFydHMuIE9ubHkgdGhlIHN1YmZsb3dzIE9OIGBzdWJmbG93UGF0aGAgcmVhZCBpdC5cbiAgICovXG4gIHJlYWRvbmx5IHN1YmZsb3dTdGF0ZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcblxuICAvKipcbiAgICogVGhlIHNoYXJlZCBleGVjdXRpb24gY291bnRlciBhdCB0aGUgbW9tZW50IG9mIHBhdXNlIOKAlCB0aGUgbnVtYmVyIG9mIHN0YWdlc1xuICAgKiBleGVjdXRlZCBzbyBmYXIgdGhpcyBydW4uIFJlc3VtZSBzZWVkcyBpdCBzbyBwb3N0LXJlc3VtZSBgcnVudGltZVN0YWdlSWRgc1xuICAgKiAoYHN0YWdlSWQjZXhlY3V0aW9uSW5kZXhgKSBrZWVwIGNsaW1iaW5nIGFuZCBuZXZlciBjb2xsaWRlIHdpdGggcHJlLXBhdXNlXG4gICAqIG9uZXMsIHdoaWNoIGlzIHdoYXQgdGhlIHdob2xlIGV2ZW50LWNvcnJlbGF0aW9uIG1vZGVsIHJlc3RzIG9uLlxuICAgKlxuICAgKiBPcHRpb25hbCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eTogYSBjaGVja3BvaW50IHBlcnNpc3RlZCBiZWZvcmUgdGhpc1xuICAgKiBmaWVsZCBleGlzdGVkIChvbGRlciBSZWRpcy9Qb3N0Z3JlcyByb3dzKSBzdGlsbCB2YWxpZGF0ZXMgYW5kIHJlc3VtZXMgd2l0aFxuICAgKiB0aGUgcHJldmlvdXMgKGNvdW50ZXItcmVzdGFydGluZykgYmVoYXZpb3IuXG4gICAqL1xuICByZWFkb25seSBleGVjdXRpb25Db3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogUGVyLWBzdGFnZUlkYCBsb29wIHZpc2l0IGNvdW50cyBhdCB0aGUgbW9tZW50IG9mIHBhdXNlLiBSZXN1bWUgc2VlZHMgdGhlbVxuICAgKiBzbyBgVHJhdmVyc2FsQ29udGV4dC5sb29wSXRlcmF0aW9uYCBzdGF5cyBjb250aW51b3VzIGFjcm9zcyB0aGUgcGF1c2UgKGFcbiAgICogbWlkLWxvb3AgcmVzdW1lIGtlZXBzIGNvdW50aW5nIHVwLCBub3QgcmVzdGFydGluZyBhdCAwKSBhbmQgdGhlXG4gICAqIENvbnRpbnVhdGlvblJlc29sdmVyIGl0ZXJhdGlvbiBidWRnZXQgaXMgbm90IHNpbGVudGx5IHJlZmlsbGVkLlxuICAgKlxuICAgKiBPcHRpb25hbCBmb3IgdGhlIHNhbWUgYmFja3dhcmQtY29tcGF0aWJpbGl0eSByZWFzb24gYXMgYGV4ZWN1dGlvbkNvdW50YC5cbiAgICovXG4gIHJlYWRvbmx5IHZpc2l0Q291bnRzPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgbnVtYmVyPj47XG5cbiAgLyoqIFN0YWdlIHRoYXQgaW52b2tlZCB0aGUgcGF1c2VkIGNoaWxkIChkZWNpZGVyLCBzZWxlY3RvciwgZm9yaykuIEFic2VudCBmb3IgbGluZWFyIHBhdXNlcy4gKi9cbiAgcmVhZG9ubHkgaW52b2tlclN0YWdlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnZva2VyJ3MgbmV4dCBub2RlIElELiBBYnNlbnQgZm9yIGxpbmVhciBwYXVzZXMuXG4gICAqXG4gICAqIEEgUkVDT1JELCBub3QgYW4gaW5zdHJ1Y3Rpb246IHNpbmNlIDkuMjguMCBgcmVzdW1lKClgIGRlcml2ZXMgd2hhdCBydW5zXG4gICAqIGFmdGVyIHRoZSBwYXVzZWQgc3RhZ2UgZnJvbSB0aGUgY2hhcnQgaXRzZWxmICh0aGUgc3RhZ2UncyBvd24gYG5leHRgLCBlbHNlXG4gICAqIHRoZSBjb250aW51YXRpb24gb2YgdGhlIGRpc3BhdGNoZXIgdGhhdCByYW4gaXQg4oCUIGF0IGV2ZXJ5IGxldmVsIG9mIHRoZVxuICAgKiBwYXVzZSBwYXRoKSwgc28gYW4gZWRpdGVkIHZhbHVlIGNhbm5vdCByZWRpcmVjdCBhIHJlc3VtZWQgcnVuLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGludWF0aW9uU3RhZ2VJZD86IHN0cmluZztcblxuICAvKipcbiAgICogUGF1c2VzIHJhaXNlZCBieSBQQVJBTExFTCBTSUJMSU5HUyBvZiB0aGUgcGF1c2VkIHN0YWdlIGluIHRoZSBzYW1lXG4gICAqIGZhbi1vdXQsIHdhaXRpbmcgdGhlaXIgdHVybiAoOS4yOC4wKSDigJQgc2VlIHtAbGluayBQZW5kaW5nUGF1c2V9LiBBYnNlbnRcbiAgICogd2hlbiBvbmx5IG9uZSBjaGlsZCBwYXVzZWQgKGV2ZXJ5IGNoZWNrcG9pbnQgYmVmb3JlIDkuMjguMCBvbWl0cyBpdCwgYW5kXG4gICAqIHJlc3VtZXMgZXhhY3RseSBhcyBiZWZvcmUpLiBSZXN1bWluZyB0aGlzIGNoZWNrcG9pbnQgZmluaXNoZXMgdGhlIHBhdXNlZFxuICAgKiBzdGFnZSdzIGNoaWxkLCB0aGVuIHBhdXNlcyBhZ2FpbiB3aXRoIHRoZSBmaXJzdCBvZiB0aGVzZTsgdGhlIGZhbi1vdXQnc1xuICAgKiBqb2luIHJ1bnMgb25jZSBldmVyeSBjaGlsZCBpcyBkb25lLlxuICAgKi9cbiAgcmVhZG9ubHkgcGVuZGluZ1BhdXNlcz86IHJlYWRvbmx5IFBlbmRpbmdQYXVzZVtdO1xuXG4gIC8qKiBUaW1lc3RhbXAgb2Ygd2hlbiB0aGUgcGF1c2Ugb2NjdXJyZWQuICovXG4gIHJlYWRvbmx5IHBhdXNlZEF0OiBudW1iZXI7XG59XG5cbi8vIOKUgOKUgCBQYXVzYWJsZUhhbmRsZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogSGFuZGxlciBmb3IgYSBwYXVzYWJsZSBzdGFnZSDigJQgaGFzIHR3byBwaGFzZXM6IGV4ZWN1dGUgYW5kIHJlc3VtZS5cbiAqXG4gKiBgZXhlY3V0ZWAgcnVucyB0aGUgZmlyc3QgdGltZS4gUmV0dXJuIGFueSBub24tdm9pZCB2YWx1ZSB0byBwYXVzZSAodGhhdCB2YWx1ZVxuICogYmVjb21lcyB0aGUgY2hlY2twb2ludCdzIGBwYXVzZURhdGFgKTsgcmV0dXJuIHZvaWQvdW5kZWZpbmVkIHRvIGNvbnRpbnVlIG5vcm1hbGx5LlxuICogYHJlc3VtZWAgcnVucyB3aGVuIHRoZSBmbG93Y2hhcnQgaXMgcmVzdW1lZC4gSXQgcmVjZWl2ZXMgdGhlIHJlc3VtZSBpbnB1dC5cbiAqXG4gKiBCb3RoIHBoYXNlcyByZWNlaXZlIHRoZSBzYW1lIHNjb3BlLiBBZnRlciBleGVjdXRlIHBhdXNlcywgdGhlIHNjb3BlIHN0YXRlXG4gKiBpcyBwcmVzZXJ2ZWQgaW4gdGhlIGNoZWNrcG9pbnQuIE9uIHJlc3VtZSwgdGhlIHNjb3BlIGlzIHJlc3RvcmVkIGJlZm9yZVxuICogY2FsbGluZyByZXN1bWUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC5hZGRQYXVzYWJsZUZ1bmN0aW9uKCdBcHByb3ZlT3JkZXInLCB7XG4gKiAgIGV4ZWN1dGU6IGFzeW5jIChzY29wZSkgPT4ge1xuICogICAgIHNjb3BlLm9yZGVySWQgPSAnMTIzJztcbiAqICAgICBzY29wZS5hbW91bnQgPSAyOTk7XG4gKiAgICAgcmV0dXJuIHsgcXVlc3Rpb246IGBBcHByb3ZlICQke3Njb3BlLmFtb3VudH0gcmVmdW5kP2AgfTtcbiAqICAgfSxcbiAqICAgcmVzdW1lOiBhc3luYyAoc2NvcGUsIGlucHV0KSA9PiB7XG4gKiAgICAgc2NvcGUuYXBwcm92ZWQgPSBpbnB1dC5hcHByb3ZlZDtcbiAqICAgICBzY29wZS5hcHByb3ZlciA9IGlucHV0LmFwcHJvdmVyO1xuICogICB9LFxuICogfSwgJ2FwcHJvdmUtb3JkZXInLCAnTWFuYWdlciBhcHByb3ZhbCBnYXRlJylcbiAqXG4gKiAvLyBMYXRlciDigJQgcmVzdW1lIHdpdGggaHVtYW4ncyBhbnN3ZXJcbiAqIGF3YWl0IGV4ZWN1dG9yLnJlc3VtZShjaGVja3BvaW50LCB7IGFwcHJvdmVkOiB0cnVlLCBhcHByb3ZlcjogJ0phbmUnIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF1c2FibGVIYW5kbGVyPFRTY29wZSA9IGFueSwgVElucHV0ID0gdW5rbm93biwgVFBhdXNlRGF0YSA9IHVua25vd24+IHtcbiAgLyoqXG4gICAqIEZpcnN0LXJ1biBwaGFzZS4gUmV0dXJuIGRhdGEgdG8gcGF1c2UsIG9yIHZvaWQvdW5kZWZpbmVkIHRvIGNvbnRpbnVlIG5vcm1hbGx5LlxuICAgKlxuICAgKiBBbnkgbm9uLXZvaWQgcmV0dXJuIHZhbHVlIGJlY29tZXMgdGhlIGBwYXVzZURhdGFgIGluIHRoZSBjaGVja3BvaW50LlxuICAgKiBUaGUgY29uc3VtZXIgZGVmaW5lcyB0aGUgYFRQYXVzZURhdGFgIHR5cGUg4oCUIHRoZSBGRSB1c2VzIGl0IHRvIHJlbmRlclxuICAgKiB0aGUgcmlnaHQgVUkgKGZvcm0gZmllbGRzLCBhcHByb3ZhbCBidXR0b25zLCBldGMuKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBUUGF1c2VEYXRhID0geyBxdWVzdGlvbjogc3RyaW5nOyByaXNrTGV2ZWw6IHN0cmluZyB9XG4gICAqIGNvbnN0IGhhbmRsZXI6IFBhdXNhYmxlSGFuZGxlcjxNeVN0YXRlLCB7IGFwcHJvdmVkOiBib29sZWFuIH0sIHsgcXVlc3Rpb246IHN0cmluZzsgcmlza0xldmVsOiBzdHJpbmcgfT4gPSB7XG4gICAqICAgZXhlY3V0ZTogYXN5bmMgKHNjb3BlKSA9PiB7XG4gICAqICAgICByZXR1cm4geyBxdWVzdGlvbjogYEFwcHJvdmUgb3JkZXIgJHtzY29wZS5vcmRlcklkfT9gLCByaXNrTGV2ZWw6ICdoaWdoJyB9O1xuICAgKiAgIH0sXG4gICAqICAgcmVzdW1lOiBhc3luYyAoc2NvcGUsIGlucHV0KSA9PiB7XG4gICAqICAgICBzY29wZS5hcHByb3ZlZCA9IGlucHV0LmFwcHJvdmVkO1xuICAgKiAgIH0sXG4gICAqIH07XG4gICAqIGBgYFxuICAgKi9cbiAgZXhlY3V0ZTogKHNjb3BlOiBUU2NvcGUpID0+IFByb21pc2U8VFBhdXNlRGF0YSB8IHZvaWQ+IHwgVFBhdXNlRGF0YSB8IHZvaWQ7XG4gIC8qKlxuICAgKiBSZXN1bWUgcGhhc2UuIENhbGxlZCB3aXRoIHRoZSByZXN1bWUgaW5wdXQgd2hlbiBleGVjdXRpb24gY29udGludWVzLlxuICAgKlxuICAgKiBUaGUgc2NvcGUgaXMgcmVzdG9yZWQgZnJvbSB0aGUgY2hlY2twb2ludCdzIGBzaGFyZWRTdGF0ZWAuIFdyaXRlcyBkdXJpbmdcbiAgICogYHJlc3VtZWAgYXJlIGNvbW1pdHRlZCBhbmQgdmlzaWJsZSB0byBzdWJzZXF1ZW50IHN0YWdlcy5cbiAgICovXG4gIHJlc3VtZTogKHNjb3BlOiBUU2NvcGUsIGlucHV0OiBUSW5wdXQpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xufVxuXG4vLyDilIDilIAgVHlwZSBndWFyZCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIENoZWNrIGlmIGEgdmFsdWUgaXMgYSBQYXVzZVJlc3VsdCAoc3RhZ2Ugd2FudHMgdG8gcGF1c2UpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGF1c2VSZXN1bHQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBQYXVzZVJlc3VsdCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICh2YWx1ZSBhcyBQYXVzZVJlc3VsdCkucGF1c2UgPT09IHRydWU7XG59XG5cbi8qKiBDaGVjayBpZiBhbiBlcnJvciBpcyBhIFBhdXNlU2lnbmFsLiBVc2VzIGluc3RhbmNlb2YgKyBuYW1lIGJyYW5kIGZhbGxiYWNrIGZvciBjcm9zcy1yZWFsbSBzYWZldHkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXVzZVNpZ25hbChlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIFBhdXNlU2lnbmFsIHtcbiAgcmV0dXJuIChcbiAgICBlcnJvciBpbnN0YW5jZW9mIFBhdXNlU2lnbmFsIHx8XG4gICAgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiZcbiAgICAgIGVycm9yLm5hbWUgPT09ICdQYXVzZVNpZ25hbCcgJiZcbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlcnJvciwgJ3BhdXNlRGF0YScpICYmXG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXJyb3IsICdzdGFnZUlkJykpXG4gICk7XG59XG4iXX0=
|