@pipeline-builder/pipeline-data 4.3.3 → 4.3.5
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/lib/api/crud-service.d.ts +7 -0
- package/lib/api/crud-service.js +14 -3
- package/lib/api/pipeline-step-resolution.d.ts +111 -0
- package/lib/api/pipeline-step-resolution.js +163 -0
- package/lib/api/plugin-consumption-policy.d.ts +8 -2
- package/lib/api/plugin-consumption-policy.js +20 -3
- package/lib/api/plugin-resolution.d.ts +26 -9
- package/lib/api/plugin-resolution.js +51 -33
- package/lib/api/reporting/analytics-queries.d.ts +6 -4
- package/lib/api/reporting/analytics-queries.js +11 -11
- package/lib/api/reporting/deploy-rollup.d.ts +2 -0
- package/lib/api/reporting/deploy-rollup.js +5 -1
- package/lib/api/reporting/failure-classifier.d.ts +2 -6
- package/lib/api/reporting/failure-classifier.js +22 -1
- package/lib/api/reporting/ingest.js +73 -16
- package/lib/api/reporting/plugin-exposure.d.ts +261 -15
- package/lib/api/reporting/plugin-exposure.js +423 -38
- package/lib/api/reporting/stakeholder/compose.d.ts +1 -1
- package/lib/api/reporting/stakeholder/compose.js +30 -1
- package/lib/api/reporting/stakeholder/store.d.ts +16 -2
- package/lib/api/reporting/stakeholder/store.js +17 -6
- package/lib/api/reporting/types.d.ts +80 -1
- package/lib/api/reporting/types.js +1 -1
- package/lib/api/reporting-service.d.ts +11 -4
- package/lib/api/reporting-service.js +106 -43
- package/lib/api/soft-delete-sweep.d.ts +8 -18
- package/lib/api/soft-delete-sweep.js +35 -5
- package/lib/api/version-references.d.ts +80 -0
- package/lib/api/version-references.js +135 -0
- package/lib/core/query-filters.d.ts +3 -3
- package/lib/core/query-filters.js +1 -1
- package/lib/database/drizzle-schema.d.ts +1238 -143
- package/lib/database/drizzle-schema.js +6 -3
- package/lib/database/index.d.ts +1 -1
- package/lib/database/index.js +2 -2
- package/lib/database/schema/ecosystem.d.ts +53 -0
- package/lib/database/schema/ecosystem.js +14 -3
- package/lib/database/schema/pipeline.d.ts +38 -0
- package/lib/database/schema/pipeline.js +20 -2
- package/lib/database/schema/plugin.d.ts +265 -0
- package/lib/database/schema/plugin.js +34 -3
- package/lib/database/schema/reporting-analytics.d.ts +786 -4
- package/lib/database/schema/reporting-analytics.js +111 -5
- package/lib/index.d.ts +5 -3
- package/lib/index.js +5 -3
- package/lib/testing/exports.json +24 -0
- package/package.json +4 -3
|
@@ -125,10 +125,31 @@ const RULES = [
|
|
|
125
125
|
* `null` for anything that is not a failure — the caller stores nothing rather
|
|
126
126
|
* than labelling a success, so a category's presence always means "this broke".
|
|
127
127
|
*/
|
|
128
|
+
/**
|
|
129
|
+
* The synth's structured refusal codes (`PB_SYNTH_FAILURE`, lifted by the events
|
|
130
|
+
* Lambda into `detail.pbFailure.code`) and what each means. A plugin the org
|
|
131
|
+
* can't resolve — not installed, blocked by policy, unavailable, deleted, an
|
|
132
|
+
* exact pin that doesn't exist, a contract the pipeline doesn't meet — is the
|
|
133
|
+
* pipeline's configuration to fix; an image whose signature doesn't verify is a
|
|
134
|
+
* supply-chain (security) failure. An unknown code falls through to the text rules.
|
|
135
|
+
*/
|
|
136
|
+
const FAILURE_CODE_CATEGORIES = {
|
|
137
|
+
IMAGE_VERIFICATION_FAILED: 'security_scan',
|
|
138
|
+
PLUGIN_NOT_INSTALLED: 'configuration',
|
|
139
|
+
PLUGIN_BLOCKED_BY_POLICY: 'configuration',
|
|
140
|
+
PLUGIN_UNAVAILABLE: 'configuration',
|
|
141
|
+
PLUGIN_DELETED: 'configuration',
|
|
142
|
+
PLUGIN_VERSION_NOT_FOUND: 'configuration',
|
|
143
|
+
TEMPLATE_CONTRACT_VIOLATION: 'configuration',
|
|
144
|
+
};
|
|
128
145
|
export function classifyFailure(input) {
|
|
129
146
|
const failed = /^(FAILED|FAILURE|ERROR|TIMED_OUT)$/i.test(input.status);
|
|
130
147
|
if (!failed)
|
|
131
148
|
return null;
|
|
149
|
+
// A code the synth printed names the failure exactly; the text rules only guess.
|
|
150
|
+
const coded = input.failureCode ? FAILURE_CODE_CATEGORIES[input.failureCode] : undefined;
|
|
151
|
+
if (coded)
|
|
152
|
+
return coded;
|
|
132
153
|
const text = (input.errorMessage ?? '').toLowerCase();
|
|
133
154
|
const where = `${input.actionName ?? ''} ${input.stageName ?? ''}`;
|
|
134
155
|
for (const rule of RULES) {
|
|
@@ -176,4 +197,4 @@ export const FAILURE_CATEGORY_LABELS = {
|
|
|
176
197
|
export function isTeamActionable(category) {
|
|
177
198
|
return !['infrastructure', 'external_service'].includes(category);
|
|
178
199
|
}
|
|
179
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFpbHVyZS1jbGFzc2lmaWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9yZXBvcnRpbmcvZmFpbHVyZS1jbGFzc2lmaWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUEwQ3RDOzs7Ozs7R0FNRztBQUNILE1BQU0sS0FBSyxHQUFXO0lBQ3BCLDZFQUE2RTtJQUM3RSwrREFBK0Q7SUFDL0Q7UUFDRSxRQUFRLEVBQUUsYUFBYTtRQUN2QixRQUFRLEVBQUU7WUFDUixjQUFjLEVBQUUsZUFBZSxFQUFFLDJCQUEyQixFQUFFLFdBQVc7WUFDekUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLHlCQUF5QjtTQUNwRjtLQUNGO0lBQ0Q7UUFDRSxRQUFRLEVBQUUsZ0JBQWdCO1FBQzFCLFFBQVEsRUFBRTtZQUNSLGNBQWMsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCO1lBQ3JFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsaUJBQWlCO1lBQ3JFLDRCQUE0QjtTQUM3QjtLQUNGO0lBQ0Q7UUFDRSxRQUFRLEVBQUUsaUJBQWlCO1FBQzNCLFFBQVEsRUFBRTtZQUNSLGdDQUFnQyxFQUFFLHNCQUFzQixFQUFFLHVCQUF1QjtZQUNqRixtQkFBbUIsRUFBRSx5QkFBeUIsRUFBRSx5QkFBeUI7WUFDekUsMEJBQTBCLEVBQUUsdUJBQXVCO1NBQ3BEO0tBQ0Y7SUFDRDtRQUNFLFFBQVEsRUFBRSxZQUFZO1FBQ3RCLFFBQVEsRUFBRTtZQUNSLHFDQUFxQyxFQUFFLDhCQUE4QjtZQUNyRSwyQkFBMkIsRUFBRSxtQ0FBbUM7WUFDaEUseUNBQXlDLEVBQUUscUJBQXFCO1lBQ2hFLDBCQUEwQixFQUFFLHVDQUF1QztZQUNuRSx5QkFBeUIsRUFBRSxtQ0FBbUM7WUFDOUQsVUFBVSxFQUFFLHVCQUF1QjtTQUNwQztLQUNGO0lBQ0Q7UUFDRSxRQUFRLEVB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bGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBXaGF0IEtJTkQgb2YgdGhpbmcgYnJva2UuXG4gKlxuICogXCIzNCBmYWlsdXJlcyB0aGlzIHdlZWtcIiBpcyBub3QgYWN0aW9uYWJsZS4gXCIxOCBvZiB0aGVtIHdlcmUgZGVwZW5kZW5jeVxuICogcmVzb2x1dGlvbiwgYW5kIHRoZXkgYXJlIGFsbCBpbiBvbmUgcGlwZWxpbmVcIiBpcy4gVGhhdCBpcyB0aGUgd2hvbGUgcmVhc29uIHRoaXNcbiAqIGV4aXN0cyDigJQgYW5kIGl0IGlzIGFsc28gd2h5IHRoZSBjbGFzc2lmaWNhdGlvbiBoYXBwZW5zIGF0IElOR0VTVCByYXRoZXIgdGhhbiBhdFxuICogcmVhZCB0aW1lOiBlcnJvciB0ZXh0IGlzIHNjcnViYmVkIG9mIEFXUyBpZGVudGlmaWVycyBhdCB0aGUgcGVyc2lzdGVuY2UgYm91bmRhcnlcbiAqIGFuZCBldmVudHVhbGx5IHN3ZXB0IGJ5IHJldGVudGlvbiwgc28gYSBjYXRlZ29yeSBkZXJpdmVkIGxhdGVyIHdvdWxkIGhhdmVcbiAqIG5vdGhpbmcgbGVmdCB0byByZWFkLlxuICpcbiAqIFRIRSBSVUxFUyBBUkUgREFUQS4gQSBjYXRlZ29yeSBpcyBhIHByb3ZpZGVyL2FjdGlvbiBtYXRjaCBwbHVzIGFuIG9yZGVyZWQgbGlzdFxuICogb2YgcGF0dGVybnMgb3ZlciB0aGUgZXJyb3IgdGV4dCwgaW4gb25lIHRhYmxlIGJlbG93LCBzbyB0aGUgdGF4b25vbXkgY2FuIGdyb3dcbiAqIGZyb20gcmVhbCBtaXNzZXMgd2l0aG91dCB0b3VjaGluZyB0aGUgY2xhc3NpZmllci4gQW55dGhpbmcgdW5tYXRjaGVkIGxhbmRzIGluXG4gKiBgb3RoZXJgIGFuZCBpcyBjb3VudGVkLCBzbyB0aGUgc2l6ZSBvZiBgb3RoZXJgIGlzIHRoZSBtZWFzdXJlIG9mIGhvdyBnb29kIHRoZVxuICogcnVsZXMgYXJlLlxuICpcbiAqIFRIRSBDQVRFR09SSUVTIE9WRVJMQVAgVEhFIFBMVUdJTi1CVUlMRCBUQVhPTk9NWSBPTiBQVVJQT1NFLiBBIGRlcGVuZGVuY3lcbiAqIGZhaWx1cmUgaXMgYSBkZXBlbmRlbmN5IGZhaWx1cmUgd2hldGhlciBpdCBoYXBwZW5lZCBidWlsZGluZyBhIHBsdWdpbiBvciBydW5uaW5nXG4gKiBvbmU7IHR3byB2b2NhYnVsYXJpZXMgZm9yIHRoZSBzYW1lIHRoaW5nIHdvdWxkIG1ha2UgdGhlIHJlcG9ydCBhbmQgdGhlIGJ1aWxkXG4gKiBxdWV1ZSBkaXNhZ3JlZSBhYm91dCB0aGUgc2FtZSBpbmNpZGVudC5cbiAqXG4gKiBXSEFUIFRIRSBBSSBFVkVSIFNFRVMgaXMgdGhlIGNhdGVnb3J5LCBuZXZlciB0aGUgcmF3IGVycm9yLiBFcnJvciB0ZXh0IGZyb20gYVxuICogY3VzdG9tZXIncyBidWlsZCBpcyB0aGUgbGFzdCB0aGluZyB0aGF0IHNob3VsZCByZWFjaCBhIG1vZGVsLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRmFpbHVyZUNhdGVnb3J5IH0gZnJvbSAnLi4vLi4vZGF0YWJhc2Uvc2NoZW1hL3JlcG9ydGluZy1hbmFseXRpY3MuanMnO1xuXG4vKiogT25lIGNsYXNzaWZpY2F0aW9uIHJ1bGU6IHRoZSBjYXRlZ29yeSwgYW5kIGhvdyB0byByZWNvZ25pc2UgaXQuICovXG5pbnRlcmZhY2UgUnVsZSB7XG4gIGNhdGVnb3J5OiBGYWlsdXJlQ2F0ZWdvcnk7XG4gIC8qKlxuICAgKiBPcmRlcmVkIHBhdHRlcm5zIG92ZXIgdGhlIGxvd2VyY2FzZWQgZXJyb3IgdGV4dC4gRmlyc3QgcnVsZSB3aXRoIGFueSBtYXRjaFxuICAgKiB3aW5zLCBzbyB0aGUgdGFibGUncyBPUkRFUiBpcyBwYXJ0IG9mIGl0cyBtZWFuaW5nOiB0aGUgc3BlY2lmaWMgY2FzZXMgY29tZVxuICAgKiBiZWZvcmUgdGhlIGdlbmVyYWwgb25lcy5cbiAgICovXG4gIHBhdHRlcm5zOiBSZWdFeHBbXTtcbiAgLyoqIFdoZW4gc2V0LCB0aGUgcnVsZSBvbmx5IGFwcGxpZXMgdG8gYW4gYWN0aW9uL3N0YWdlIG5hbWUgbWF0Y2hpbmcgdGhpcy4gKi9cbiAgYWN0aW9uPzogUmVnRXhwO1xufVxuXG4vKipcbiAqIFRoZSBydWxlcywgbW9zdCBzcGVjaWZpYyBmaXJzdC5cbiAqXG4gKiBSZWFkIHRoaXMgYXMgdGhlIHRheG9ub215IGl0c2VsZi4gRWFjaCBlbnRyeSBhbnN3ZXJzIFwid2hhdCB3b3VsZCBzb21lYm9keSBET1xuICogYWJvdXQgdGhpc1wiLCB3aGljaCBpcyB3aHkgZS5nLiBgcGVybWlzc2lvbnNgIGFuZCBgYXV0aGVudGljYXRpb25gIGFyZSBzZXBhcmF0ZTpcbiAqIG9uZSBpcyBhIHBvbGljeSBjaGFuZ2UsIHRoZSBvdGhlciBpcyBhIGNyZWRlbnRpYWwuXG4gKi9cbmNvbnN0IFJVTEVTOiBSdWxlW10gPSBbXG4gIC8vIENyZWRlbnRpYWxzIGFuZCBwb2xpY3kgZmlyc3Q6IHRoZWlyIG1lc3NhZ2VzIG9mdGVuIGFsc28gY29udGFpbiB3b3JkcyB0aGF0XG4gIC8vIHdvdWxkIG90aGVyd2lzZSBtYXRjaCBgZXh0ZXJuYWxfc2VydmljZWAgb3IgYGNvbmZpZ3VyYXRpb25gLlxuICB7XG4gICAgY2F0ZWdvcnk6ICdwZXJtaXNzaW9ucycsXG4gICAgcGF0dGVybnM6IFtcbiAgICAgIC9hY2Nlc3NkZW5pZWQvLCAvYWNjZXNzIGRlbmllZC8sIC9ub3QgYXV0aG9yaXplZCB0byBwZXJmb3JtLywgL2ZvcmJpZGRlbi8sXG4gICAgICAvZXhwbGljaXQgZGVueS8sIC9hc3N1bWVyb2xlLipkZW5pZWQvLCAvaWFtLipwZXJtaXNzaW9uLywgL2luc3VmZmljaWVudCBwcml2aWxlZ2VzLyxcbiAgICBdLFxuICB9LFxuICB7XG4gICAgY2F0ZWdvcnk6ICdhdXRoZW50aWNhdGlvbicsXG4gICAgcGF0dGVybnM6IFtcbiAgICAgIC91bmF1dGhvcml6ZWQvLCAvNDAxLywgL2F1dGhlbnRpY2F0aW9uIGZhaWxlZC8sIC9pbnZhbGlkIGNyZWRlbnRpYWxzLyxcbiAgICAgIC9leHBpcmVkIHRva2VuLywgL3Rva2VuLipleHBpcmVkLywgL25vIGJhc2ljIGF1dGgvLCAvYmFkIGNyZWRlbnRpYWxzLyxcbiAgICAgIC9jb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZC8sXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIGNhdGVnb3J5OiAnc291cmNlX2NoZWNrb3V0JyxcbiAgICBwYXR0ZXJuczogW1xuICAgICAgL2NvdWxkIG5vdCByZXNvbHZlIGhvc3Q6IGdpdGh1Yi8sIC9yZXBvc2l0b3J5IG5vdCBmb3VuZC8sIC9mYXRhbDogY291bGQgbm90IHJlYWQvLFxuICAgICAgL2dpdCBjbG9uZS4qZmFpbGVkLywgL3JlZmVyZW5jZSBpcyBub3QgYSB0cmVlLywgL3VuYWJsZSB0byBhY2Nlc3MuKlxcLmdpdC8sXG4gICAgICAvc291cmNlLipjaGVja291dC4qZmFpbGVkLywgL2NvZGVjb21taXQuKm5vdCBmb3VuZC8sXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIGNhdGVnb3J5OiAnZGVwZW5kZW5jeScsXG4gICAgcGF0dGVybnM6IFtcbiAgICAgIC9ucG0gZXJyIS4qKD86ZTQwNHxldGFyZ2V0fGVyZXNvbHZlKS8sIC9jb3VsZCBub3QgcmVzb2x2ZSBkZXBlbmRlbmN5LyxcbiAgICAgIC9ubyBtYXRjaGluZyB2ZXJzaW9uIGZvdW5kLywgL3VuYWJsZSB0byByZXNvbHZlIGRlcGVuZGVuY3kgdHJlZS8sXG4gICAgICAvY291bGQgbm90IGZpbmQgYSB2ZXJzaW9uIHRoYXQgc2F0aXNmaWVzLywgL3BpcC4qY291bGQgbm90IGZpbmQvLFxuICAgICAgL2dvOiAuKjogdW5rbm93biByZXZpc2lvbi8sIC9tYXZlbi4qY291bGQgbm90IHJlc29sdmUgZGVwZW5kZW5jaWVzLyxcbiAgICAgIC9idW5kbGVyLipjb3VsZCBub3QgZmluZC8sIC9jYXJnby4qZmFpbGVkIHRvIHNlbGVjdCBhIHZlcnNpb24vLFxuICAgICAgL3BlZXIgZGVwLywgL2xvY2tmaWxlLipvdXQgb2Ygc3luYy8sXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIGNhdGVnb3J5OiAndW5pdF90ZXN0JyxcbiAgICBwYXR0ZXJuczogWy90ZXN0cz8gZmFpbGVkLywgL2Fzc2VydGlvbig/OmVycm9yKT8gZmFpbGVkLywgL1xcZCsgKD86dGVzdHM/fHNwZWNzPykgZmFpbGVkLywgL2plc3QuKmZhaWwvLCAvcHl0ZXN0LipmYWlsZWQvXSxcbiAgICBhY3Rpb246IC90ZXN0fHNwZWN8amVzdHxweXRlc3R8anVuaXQvaSxcbiAgfSxcbiAge1xuICAgIGNhdGVnb3J5OiAnaW50ZWdyYXRpb25fdGVzdCcsXG4gICAgcGF0dGVybnM6IFsvdGVzdHM/IGZhaWxlZC8sIC9hc3NlcnRpb24oPzplcnJvcik/IGZhaWxlZC8sIC9jb25uZWN0aW9uIHJlZnVzZWQvXSxcbiAgICBhY3Rpb246IC9pbnRlZ3JhdGlvbnxlMmV8c21va2V8YWNjZXB0YW5jZXxjb250cmFjdC9pLFxuICB9LFxuICB7XG4gICAgY2F0ZWdvcnk6ICdzZWN1cml0eV9zY2FuJyxcbiAgICBwYXR0ZXJuczogW1xuICAgICAgL3Z1bG5lcmFiaWxpdC8sIC9jdmUtXFxkezR9LywgL2dyeXBlLywgL3RyaXZ5LywgL3Nhc3QvLCAvZGVwZW5kZW5jeSBjaGVjayBmYWlsZWQvLFxuICAgICAgL3NlY3JldCBkZXRlY3RlZC8sIC9saWNlbnNlIHZpb2xhdGlvbi8sIC9wb2xpY3kgdmlvbGF0aW9uLipzY2FuLyxcbiAgICBdLFxuICB9LFxuICB7XG4gICAgY2F0ZWdvcnk6ICd0aW1lb3V0JyxcbiAgICBwYXR0ZXJuczogW1xuICAgICAgL3RpbWVkPyA/b3V0LywgL2V0aW1lZG91dC8sIC9kZWFkbGluZSBleGNlZWRlZC8sIC9leGNlZWRlZCB0aGUuKnRpbWVvdXQvLFxuICAgICAgL2J1aWxkLipleGNlZWRlZC4qbWludXRlcy8sIC9jb250ZXh0IGRlYWRsaW5lLyxcbiAgICBdLFxuICB9LFxuICB7XG4gICAgY2F0ZWdvcnk6ICdyZXNvdXJjZV9leGhhdXN0aW9uJyxcbiAgICBwYXR0ZXJuczogW1xuICAgICAgL291dCBvZiBtZW1vcnkvLCAvb29ta2lsbGVkLywgL2Nhbm5vdCBhbGxvY2F0ZSBtZW1vcnkvLCAvbm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UvLFxuICAgICAgL2Rpc2sgcXVvdGEgZXhjZWVkZWQvLCAvZW5vc3BjLywgL3RvbyBtYW55IG9wZW4gZmlsZXMvLCAva2lsbGVkLipzaWduYWwgOS8sXG4gICAgICAvamF2YXNjcmlwdCBoZWFwIG91dCBvZiBtZW1vcnkvLFxuICAgIF0sXG4gIH0sXG4gIHtcbiAgICBjYXRlZ29yeTogJ2RlcGxveW1lbnQnLFxuICAgIHBhdHRlcm5zOiBbXG4gICAgICAvY2xvdWRmb3JtYXRpb24uKnJvbGxiYWNrLywgL3N0YWNrLipyb2xsYmFja19jb21wbGV0ZS8sIC9jcmVhdGVfZmFpbGVkLywgL3VwZGF0ZV9yb2xsYmFjay8sXG4gICAgICAvY2RrIGRlcGxveS4qZmFpbGVkLywgL2Vjcy4qZGVwbG95bWVudC4qZmFpbGVkLywgL2RlcGxveW1lbnQuKmNpcmN1aXQgYnJlYWtlci8sXG4gICAgICAvaGVhbHRoIGNoZWNrLipmYWlsZWQuKnRhcmdldCBncm91cC8sXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIGNhdGVnb3J5OiAnaW5mcmFzdHJ1Y3R1cmUnLFxuICAgIHBhdHRlcm5zOiBbXG4gICAgICAvdGhyb3R0bC8sIC9yYXRlIGV4Y2VlZGVkLywgL2xpbWl0ZXhjZWVkZWQvLCAvc2VydmljZXF1b3RhZXhjZWVkZWQvLFxuICAgICAgL2NhcGFjaXR5LywgL2luc3VmZmljaWVudGluc3RhbmNlY2FwYWNpdHkvLCAvaG9zdC4qdW5yZWFjaGFibGUvLFxuICAgICAgL2ludGVybmFsIHNlcnZpY2UgZXJyb3IvLCAvNVxcZFxcZC4qYXdzLyxcbiAgICBdLFxuICB9LFxuICB7XG4gICAgY2F0ZWdvcnk6ICdleHRlcm5hbF9zZXJ2aWNlJyxcbiAgICBwYXR0ZXJuczogW1xuICAgICAgL2NvdWxkIG5vdCByZXNvbHZlIGhvc3QvLCAvZW5vdGZvdW5kLywgL2Vjb25ucmVmdXNlZC8sIC9lY29ubnJlc2V0LyxcbiAgICAgIC9nZXRhZGRyaW5mby8sIC9zb2NrZXQgaGFuZyB1cC8sIC9iYWQgZ2F0ZXdheS8sIC81MDJ8NTAzfDUwNC8sXG4gICAgICAvdXBzdHJlYW0uKnVuYXZhaWxhYmxlLywgL3JlZ2lzdHJ5Lip1bnJlYWNoYWJsZS8sXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIGNhdGVnb3J5OiAnY29uZmlndXJhdGlvbicsXG4gICAgcGF0dGVybnM6IFtcbiAgICAgIC9pcyBub3QgZGVmaW5lZC8sIC9ubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5LywgL2Vub2VudC8sIC9pbnZhbGlkLipjb25maWd1cmF0aW9uLyxcbiAgICAgIC9taXNzaW5nIHJlcXVpcmVkLiooPzp2YXJpYWJsZXxwYXJhbWV0ZXJ8aW5wdXQpLyxcbiAgICAgIC8vIEJvdGggb3JkZXJzOiBcInlhbWwgcGFyc2UgZXJyb3JcIiBhbmQgXCJlcnJvciBwYXJzaW5nIFlBTUxcIi5cbiAgICAgIC95YW1sLiooPzpwYXJzZXxwYXJzaW5nfHN5bnRheCkvLCAvKD86cGFyc2V8cGFyc2luZ3xzeW50YXgpLip5YW1sLyxcbiAgICAgIC91bmV4cGVjdGVkIHRva2VuLipqc29uLywgL2J1aWxkc3BlYy8sIC9jb21tYW5kIG5vdCBmb3VuZC8sXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIGNhdGVnb3J5OiAnYnVpbGQnLFxuICAgIHBhdHRlcm5zOiBbXG4gICAgICAvY29tcGlsYXRpb24gKD86ZmFpbGVkfGVycm9yKS8sIC9lcnJvciB0c1xcZCsvLCAvc3ludGF4IGVycm9yLywgL2Nhbm5vdCBmaW5kIG1vZHVsZS8sXG4gICAgICAvdW5kZWZpbmVkIHJlZmVyZW5jZS8sIC9idWlsZCBmYWlsZWQvLCAvd2VicGFjay4qZXJyb3IvLCAvdHNjLiplcnJvci8sXG4gICAgICAvZG9ja2VyIGJ1aWxkLipmYWlsZWQvLCAvZmFpbGVkIHRvIHNvbHZlLyxcbiAgICBdLFxuICB9LFxuXTtcblxuLyoqXG4gKiBUaGUgY2F0ZWdvcnkgZm9yIGEgZmFpbGVkIGFjdGlvbi5cbiAqXG4gKiBgbnVsbGAgZm9yIGFueXRoaW5nIHRoYXQgaXMgbm90IGEgZmFpbHVyZSDigJQgdGhlIGNhbGxlciBzdG9yZXMgbm90aGluZyByYXRoZXJcbiAqIHRoYW4gbGFiZWxsaW5nIGEgc3VjY2Vzcywgc28gYSBjYXRlZ29yeSdzIHByZXNlbmNlIGFsd2F5cyBtZWFucyBcInRoaXMgYnJva2VcIi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZ5RmFpbHVyZShpbnB1dDoge1xuICBzdGF0dXM6IHN0cmluZztcbiAgZXJyb3JNZXNzYWdlPzogc3RyaW5nIHwgbnVsbDtcbiAgYWN0aW9uTmFtZT86IHN0cmluZyB8IG51bGw7XG4gIHN0YWdlTmFtZT86IHN0cmluZyB8IG51bGw7XG59KTogRmFpbHVyZUNhdGVnb3J5IHwgbnVsbCB7XG4gIGNvbnN0IGZhaWxlZCA9IC9eKEZBSUxFRHxGQUlMVVJFfEVSUk9SfFRJTUVEX09VVCkkL2kudGVzdChpbnB1dC5zdGF0dXMpO1xuICBpZiAoIWZhaWxlZCkgcmV0dXJuIG51bGw7XG5cbiAgY29uc3QgdGV4dCA9IChpbnB1dC5lcnJvck1lc3NhZ2UgPz8gJycpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHdoZXJlID0gYCR7aW5wdXQuYWN0aW9uTmFtZSA/PyAnJ30gJHtpbnB1dC5zdGFnZU5hbWUgPz8gJyd9YDtcblxuICBmb3IgKGNvbnN0IHJ1bGUgb2YgUlVMRVMpIHtcbiAgICBpZiAocnVsZS5hY3Rpb24gJiYgIXJ1bGUuYWN0aW9uLnRlc3Qod2hlcmUpKSBjb250aW51ZTtcbiAgICBpZiAocnVsZS5wYXR0ZXJucy5zb21lKChwKSA9PiBwLnRlc3QodGV4dCkpKSByZXR1cm4gcnVsZS5jYXRlZ29yeTtcbiAgfVxuXG4gIC8vIE5vdGhpbmcgbWF0Y2hlZC4gYG90aGVyYCByYXRoZXIgdGhhbiBhIGd1ZXNzLCBhbmQgY291bnRlZCwgc28gdGhlIHNoYXJlIG9mXG4gIC8vIGBvdGhlcmAgbWVhc3VyZXMgaG93IGdvb2QgdGhlIHJ1bGVzIGFyZSBhbmQgbmFtZXMgdGhlIGdhcCB0byBjbG9zZS5cbiAgcmV0dXJuICdvdGhlcic7XG59XG5cbi8qKlxuICogQSBodW1hbiBsYWJlbCBmb3IgYSBjYXRlZ29yeSwgZm9yIHRoZSByZXBvcnQgYW5kIHRoZSBVSS5cbiAqXG4gKiBQaHJhc2VkIGFzIHdoYXQgYnJva2UgcmF0aGVyIHRoYW4gYXMgYW4gZW51bTogYSBtYW5hZ2VyIHJlYWRpbmdcbiAqIFwiRGVwZW5kZW5jeSByZXNvbHV0aW9uXCIgdW5kZXJzdGFuZHMgaXQsIGFuZCBgaW50ZWdyYXRpb25fdGVzdGAgZG9lcyBub3QuXG4gKi9cbmV4cG9ydCBjb25zdCBGQUlMVVJFX0NBVEVHT1JZX0xBQkVMUzogUmVjb3JkPEZhaWx1cmVDYXRlZ29yeSwgc3RyaW5nPiA9IHtcbiAgc291cmNlX2NoZWNrb3V0OiAnU291cmNlIGNoZWNrb3V0JyxcbiAgZGVwZW5kZW5jeTogJ0RlcGVuZGVuY3kgcmVzb2x1dGlvbicsXG4gIGJ1aWxkOiAnQnVpbGQgLyBjb21waWxlJyxcbiAgdW5pdF90ZXN0OiAnVW5pdCB0ZXN0cycsXG4gIGludGVncmF0aW9uX3Rlc3Q6ICdJbnRlZ3JhdGlvbiB0ZXN0cycsXG4gIHNlY3VyaXR5X3NjYW46ICdTZWN1cml0eSBzY2FuJyxcbiAgaW5mcmFzdHJ1Y3R1cmU6ICdDbG91ZCBpbmZyYXN0cnVjdHVyZScsXG4gIGRlcGxveW1lbnQ6ICdEZXBsb3ltZW50JyxcbiAgYXV0aGVudGljYXRpb246ICdBdXRoZW50aWNhdGlvbicsXG4gIHBlcm1pc3Npb25zOiAnUGVybWlzc2lvbnMnLFxuICBjb25maWd1cmF0aW9uOiAnQ29uZmlndXJhdGlvbicsXG4gIHRpbWVvdXQ6ICdUaW1lb3V0JyxcbiAgcmVzb3VyY2VfZXhoYXVzdGlvbjogJ091dCBvZiByZXNvdXJjZXMnLFxuICBleHRlcm5hbF9zZXJ2aWNlOiAnRXh0ZXJuYWwgc2VydmljZScsXG4gIG90aGVyOiAnVW5jbGFzc2lmaWVkJyxcbn07XG5cbi8qKlxuICogV2hldGhlciBhIGNhdGVnb3J5IGlzIHNvbWV0aGluZyB0aGUgVEVBTSBjYW4gYWN0IG9uLCBhcyBvcHBvc2VkIHRvIHNvbWV0aGluZ1xuICogdGhhdCBoYXBwZW5lZCB0byB0aGVtLlxuICpcbiAqIFVzZWQgYnkgdGhlIGZhaWx1cmUtYW5hbHlzaXMgc2VjdGlvbiB0byBzZXBhcmF0ZSB0aGUgdHdvLCBiZWNhdXNlIGEgd2VlayB3aG9zZVxuICogZmFpbHVyZXMgd2VyZSBhbGwgY2xvdWQgdGhyb3R0bGluZyBpcyBhIGRpZmZlcmVudCBjb252ZXJzYXRpb24gZnJvbSBvbmUgd2hvc2VcbiAqIGZhaWx1cmVzIHdlcmUgYWxsIGJyb2tlbiB0ZXN0cyDigJQgYW5kIHByZXNlbnRpbmcgdGhlbSBpbiBvbmUgcmFua2VkIGxpc3QgaW52aXRlc1xuICogZXhhY3RseSB0aGUgd3JvbmcgY29uY2x1c2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVGVhbUFjdGlvbmFibGUoY2F0ZWdvcnk6IEZhaWx1cmVDYXRlZ29yeSk6IGJvb2xlYW4ge1xuICByZXR1cm4gIVsnaW5mcmFzdHJ1Y3R1cmUnLCAnZXh0ZXJuYWxfc2VydmljZSddLmluY2x1ZGVzKGNhdGVnb3J5KTtcbn1cbiJdfQ==
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFpbHVyZS1jbGFzc2lmaWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9yZXBvcnRpbmcvZmFpbHVyZS1jbGFzc2lmaWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUEwQ3RDOzs7Ozs7R0FNRztBQUNILE1BQU0sS0FBSyxHQUFXO0lBQ3BCLDZFQUE2RTtJQUM3RSwrREFBK0Q7SUFDL0Q7UUFDRSxRQUFRLEVBQUUsYUFBYTtRQUN2QixRQUFRLEVBQUU7WUFDUixjQUFjLEVBQUUsZUFBZSxFQUFFLDJCQUEyQixFQUFFLFdBQVc7WUFDekUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLHlCQUF5QjtTQUNwRjtLQUNGO0lBQ0Q7UUFDRSxRQUFRLEVBQUUsZ0JBQWdCO1FBQzFCLFFBQVEsRUFBRTtZQUNSLGNBQWMsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCO1lBQ3JFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsaUJBQWlCO1lBQ3JFLDRCQUE0QjtTQUM3QjtLQUNGO0lBQ0Q7UUFDRSxRQUFRLEVBQUUsaUJBQWlCO1FBQzNCLFFBQVEsRUFBRTtZQUNSLGdDQUFnQyxFQUFFLHNCQUFzQixFQUFFLHVCQUF1QjtZQUNqRixtQkFBbUIsRUFBRSx5QkFBeUIsRUFBRSx5QkFBeUI7WUFDekUsMEJBQTBCLEVBQUUsdUJBQXVCO1NBQ3BEO0tBQ0Y7SUFDRDtRQUNFLFFBQVEsRUFBRSxZQUFZO1FBQ3RCLFFBQVEsRUFBRTtZQUNSLHFDQUFxQyxFQUFFLDhCQUE4QjtZQUNyRSwyQkFBMkIsRUFBRSxtQ0FBbUM7WUFDaEUseUNBQXlDLEVBQUUscUJBQXFCO1lBQ2hFLDBCQUEwQixFQUFFLHVDQUF1QztZQUNuRSx5QkFBeUIsRUFBRSxtQ0FBbUM7WUFDOUQsVUFBVSxFQUFFLHVCQUF1QjtTQUNwQztLQUNGO0lBQ0Q7UUFDRSxRQUFRLEVBQUUsV0FBVztRQUNyQixRQUFRLEVBQUUsQ0FBQyxlQUFlLEVBQUUsNEJBQTRCLEVBQUUsOEJBQThCLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixDQUFDO1FBQ3pILE1BQU0sRUFBRSw4QkFBOEI7S0FDdkM7SUFDRDtRQUNFLFFBQVEsRUFBRSxrQkFBa0I7UUFDNUIsUUFBUSxFQUFFLENBQUMsZUFBZSxFQUFFLDRCQUE0QixFQUFFLG9CQUFvQixDQUFDO1FBQy9FLE1BQU0sRUFBRSw0Q0FBNEM7S0FDckQ7SUFDRDtRQUNFLFFBQVEsRUFBRSxlQUFlO1FBQ3pCLFFBQVEsRUFBRTtZQUNSLGNBQWMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUseUJBQXlCO1lBQ2hGLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLHdCQUF3QjtTQUNqRTtLQUNGO0lBQ0Q7UUFDRSxRQUFRLEVBQUUsU0FBUztRQUNuQixRQUFRLEVBQUU7WUFDUixhQUFhLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLHVCQUF1QjtZQUN4RSwwQkFBMEIsRUFBRSxrQkFBa0I7U0FDL0M7S0FDRjtJQUNEO1FBQ0UsUUFBUSxFQUFFLHFCQUFxQjtRQUMvQixRQUFRLEVBQUU7WUFDUixlQUFlLEVBQUUsV0FBVyxFQUFFLHdCQUF3QixFQUFFLHlCQUF5QjtZQUNqRixxQkFBcUIsRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsa0JBQWtCO1lBQzFFLCtCQUErQjtTQUNoQztLQUNGO0lBQ0Q7UUFDRSxRQUFRLEVBQUUsWUFBWTtRQUN0QixRQUFRLEVBQUU7WUFDUiwwQkFBMEIsRUFBRSwwQkFBMEIsRUFBRSxlQUFlLEVBQUUsaUJBQWlCO1lBQzFGLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFLDZCQUE2QjtZQUM5RSxvQ0FBb0M7U0FDckM7S0FDRjtJQUNEO1FBQ0UsUUFBUSxFQUFFLGdCQUFnQjtRQUMxQixRQUFRLEVBQUU7WUFDUixTQUFTLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxzQkFBc0I7WUFDbkUsVUFBVSxFQUFFLDhCQUE4QixFQUFFLG1CQUFtQjtZQUMvRCx3QkFBd0IsRUFBRSxZQUFZO1NBQ3ZDO0tBQ0Y7SUFDRDtRQUNFLFFBQVEsRUFBRSxrQkFBa0I7UUFDNUIsUUFBUSxFQUFFO1lBQ1Isd0JBQXdCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxZQUFZO1lBQ25FLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsYUFBYTtZQUM3RCx1QkFBdUIsRUFBRSx1QkFBdUI7U0FDakQ7S0FDRjtJQUNEO1FBQ0UsUUFBUSxFQUFFLGVBQWU7UUFDekIsUUFBUSxFQUFFO1lBQ1IsZ0JBQWdCLEVBQUUsMkJBQTJCLEVBQUUsUUFBUSxFQUFFLHdCQUF3QjtZQUNqRixnREFBZ0Q7WUFDaEQsNERBQTREO1lBQzVELGdDQUFnQyxFQUFFLGdDQUFnQztZQUNsRSx3QkFBd0IsRUFBRSxXQUFXLEVBQUUsbUJBQW1CO1NBQzNEO0tBQ0Y7SUFDRDtRQUNFLFFBQVEsRUFBRSxPQUFPO1FBQ2pCLFFBQVEsRUFBRTtZQUNSLDhCQUE4QixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsb0JBQW9CO1lBQ25GLHFCQUFxQixFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZO1lBQ3JFLHNCQUFzQixFQUFFLGlCQUFpQjtTQUMxQztLQUNGO0NBQ0YsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0g7Ozs7Ozs7R0FPRztBQUNILE1BQU0sdUJBQXVCLEdBQThDO0lBQ3pFLHlCQUF5QixFQUFFLGVBQWU7SUFDMUMsb0JBQW9CLEVBQUUsZUFBZTtJQUNyQyx3QkFBd0IsRUFBRSxlQUFlO0lBQ3pDLGtCQUFrQixFQUFFLGVBQWU7SUFDbkMsY0FBYyxFQUFFLGVBQWU7SUFDL0Isd0JBQXdCLEVBQUUsZUFBZTtJQUN6QywyQkFBMkIsRUFBRSxlQUFlO0NBQzdDLENBQUM7QUFFRixNQUFNLFVBQVUsZUFBZSxDQUFDLEtBTy9CO0lBQ0MsTUFBTSxNQUFNLEdBQUcscUNBQXFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4RSxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRXpCLGlGQUFpRjtJQUNqRixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN6RixJQUFJLEtBQUs7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUV4QixNQUFNLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdEQsTUFBTSxLQUFLLEdBQUcsR0FBRyxLQUFLLENBQUMsVUFBVSxJQUFJLEVBQUUsSUFBSSxLQUFLLENBQUMsU0FBUyxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBRW5FLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQUUsU0FBUztRQUN0RCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3BFLENBQUM7SUFFRCw2RUFBNkU7SUFDN0Usc0VBQXNFO0lBQ3RFLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFvQztJQUN0RSxlQUFlLEVBQUUsaUJBQWlCO0lBQ2xDLFVBQVUsRUFBRSx1QkFBdUI7SUFDbkMsS0FBSyxFQUFFLGlCQUFpQjtJQUN4QixTQUFTLEVBQUUsWUFBWTtJQUN2QixnQkFBZ0IsRUFBRSxtQkFBbUI7SUFDckMsYUFBYSxFQUFFLGVBQWU7SUFDOUIsY0FBYyxFQUFFLHNCQUFzQjtJQUN0QyxVQUFVLEVBQUUsWUFBWTtJQUN4QixjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLFdBQVcsRUFBRSxhQUFhO0lBQzFCLGFBQWEsRUFBRSxlQUFlO0lBQzlCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLG1CQUFtQixFQUFFLGtCQUFrQjtJQUN2QyxnQkFBZ0IsRUFBRSxrQkFBa0I7SUFDcEMsS0FBSyxFQUFFLGNBQWM7Q0FDdEIsQ0FBQztBQUVGOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFFBQXlCO0lBQ3hELE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixFQUFFLGtCQUFrQixDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3BFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBXaGF0IEtJTkQgb2YgdGhpbmcgYnJva2UuXG4gKlxuICogXCIzNCBmYWlsdXJlcyB0aGlzIHdlZWtcIiBpcyBub3QgYWN0aW9uYWJsZS4gXCIxOCBvZiB0aGVtIHdlcmUgZGVwZW5kZW5jeVxuICogcmVzb2x1dGlvbiwgYW5kIHRoZXkgYXJlIGFsbCBpbiBvbmUgcGlwZWxpbmVcIiBpcy4gVGhhdCBpcyB0aGUgd2hvbGUgcmVhc29uIHRoaXNcbiAqIGV4aXN0cyDigJQgYW5kIGl0IGlzIGFsc28gd2h5IHRoZSBjbGFzc2lmaWNhdGlvbiBoYXBwZW5zIGF0IElOR0VTVCByYXRoZXIgdGhhbiBhdFxuICogcmVhZCB0aW1lOiBlcnJvciB0ZXh0IGlzIHNjcnViYmVkIG9mIEFXUyBpZGVudGlmaWVycyBhdCB0aGUgcGVyc2lzdGVuY2UgYm91bmRhcnlcbiAqIGFuZCBldmVudHVhbGx5IHN3ZXB0IGJ5IHJldGVudGlvbiwgc28gYSBjYXRlZ29yeSBkZXJpdmVkIGxhdGVyIHdvdWxkIGhhdmVcbiAqIG5vdGhpbmcgbGVmdCB0byByZWFkLlxuICpcbiAqIFRIRSBSVUxFUyBBUkUgREFUQS4gQSBjYXRlZ29yeSBpcyBhIHByb3ZpZGVyL2FjdGlvbiBtYXRjaCBwbHVzIGFuIG9yZGVyZWQgbGlzdFxuICogb2YgcGF0dGVybnMgb3ZlciB0aGUgZXJyb3IgdGV4dCwgaW4gb25lIHRhYmxlIGJlbG93LCBzbyB0aGUgdGF4b25vbXkgY2FuIGdyb3dcbiAqIGZyb20gcmVhbCBtaXNzZXMgd2l0aG91dCB0b3VjaGluZyB0aGUgY2xhc3NpZmllci4gQW55dGhpbmcgdW5tYXRjaGVkIGxhbmRzIGluXG4gKiBgb3RoZXJgIGFuZCBpcyBjb3VudGVkLCBzbyB0aGUgc2l6ZSBvZiBgb3RoZXJgIGlzIHRoZSBtZWFzdXJlIG9mIGhvdyBnb29kIHRoZVxuICogcnVsZXMgYXJlLlxuICpcbiAqIFRIRSBDQVRFR09SSUVTIE9WRVJMQVAgVEhFIFBMVUdJTi1CVUlMRCBUQVhPTk9NWSBPTiBQVVJQT1NFLiBBIGRlcGVuZGVuY3lcbiAqIGZhaWx1cmUgaXMgYSBkZXBlbmRlbmN5IGZhaWx1cmUgd2hldGhlciBpdCBoYXBwZW5lZCBidWlsZGluZyBhIHBsdWdpbiBvciBydW5uaW5nXG4gKiBvbmU7IHR3byB2b2NhYnVsYXJpZXMgZm9yIHRoZSBzYW1lIHRoaW5nIHdvdWxkIG1ha2UgdGhlIHJlcG9ydCBhbmQgdGhlIGJ1aWxkXG4gKiBxdWV1ZSBkaXNhZ3JlZSBhYm91dCB0aGUgc2FtZSBpbmNpZGVudC5cbiAqXG4gKiBXSEFUIFRIRSBBSSBFVkVSIFNFRVMgaXMgdGhlIGNhdGVnb3J5LCBuZXZlciB0aGUgcmF3IGVycm9yLiBFcnJvciB0ZXh0IGZyb20gYVxuICogY3VzdG9tZXIncyBidWlsZCBpcyB0aGUgbGFzdCB0aGluZyB0aGF0IHNob3VsZCByZWFjaCBhIG1vZGVsLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRmFpbHVyZUNhdGVnb3J5IH0gZnJvbSAnLi4vLi4vZGF0YWJhc2Uvc2NoZW1hL3JlcG9ydGluZy1hbmFseXRpY3MuanMnO1xuXG4vKiogT25lIGNsYXNzaWZpY2F0aW9uIHJ1bGU6IHRoZSBjYXRlZ29yeSwgYW5kIGhvdyB0byByZWNvZ25pc2UgaXQuICovXG5pbnRlcmZhY2UgUnVsZSB7XG4gIGNhdGVnb3J5OiBGYWlsdXJlQ2F0ZWdvcnk7XG4gIC8qKlxuICAgKiBPcmRlcmVkIHBhdHRlcm5zIG92ZXIgdGhlIGxvd2VyY2FzZWQgZXJyb3IgdGV4dC4gRmlyc3QgcnVsZSB3aXRoIGFueSBtYXRjaFxuICAgKiB3aW5zLCBzbyB0aGUgdGFibGUncyBPUkRFUiBpcyBwYXJ0IG9mIGl0cyBtZWFuaW5nOiB0aGUgc3BlY2lmaWMgY2FzZXMgY29tZVxuICAgKiBiZWZvcmUgdGhlIGdlbmVyYWwgb25lcy5cbiAgICovXG4gIHBhdHRlcm5zOiBSZWdFeHBbXTtcbiAgLyoqIFdoZW4gc2V0LCB0aGUgcnVsZSBvbmx5IGFwcGxpZXMgdG8gYW4gYWN0aW9uL3N0YWdlIG5hbWUgbWF0Y2hpbmcgdGhpcy4gKi9cbiAgYWN0aW9uPzogUmVnRXhwO1xufVxuXG4vKipcbiAqIFRoZSBydWxlcywgbW9zdCBzcGVjaWZpYyBmaXJzdC5cbiAqXG4gKiBSZWFkIHRoaXMgYXMgdGhlIHRheG9ub215IGl0c2VsZi4gRWFjaCBlbnRyeSBhbnN3ZXJzIFwid2hhdCB3b3VsZCBzb21lYm9keSBET1xuICogYWJvdXQgdGhpc1wiLCB3aGljaCBpcyB3aHkgZS5nLiBgcGVybWlzc2lvbnNgIGFuZCBgYXV0aGVudGljYXRpb25gIGFyZSBzZXBhcmF0ZTpcbiAqIG9uZSBpcyBhIHBvbGljeSBjaGFuZ2UsIHRoZSBvdGhlciBpcyBhIGNyZWRlbnRpYWwuXG4gKi9cbmNvbnN0IFJVTEVTOiBSdWxlW10gPSBbXG4gIC8vIENyZWRlbnRpYWxzIGFuZCBwb2xpY3kgZmlyc3Q6IHRoZWlyIG1lc3NhZ2VzIG9mdGVuIGFsc28gY29udGFpbiB3b3JkcyB0aGF0XG4gIC8vIHdvdWxkIG90aGVyd2lzZSBtYXRjaCBgZXh0ZXJuYWxfc2VydmljZWAgb3IgYGNvbmZpZ3VyYXRpb25gLlxuICB7XG4gICAgY2F0ZWdvcnk6ICdwZXJtaXNzaW9ucycsXG4gICAgcGF0dGVybnM6IFtcbiAgICAgIC9hY2Nlc3NkZW5pZWQvLCAvYWNjZXNzIGRlbmllZC8sIC9ub3QgYXV0aG9yaXplZCB0byBwZXJmb3JtLywgL2ZvcmJpZGRlbi8sXG4gICAgICAvZXhwbGljaXQgZGVueS8sIC9hc3N1bWVyb2xlLipkZW5pZWQvLCAvaWFtLipwZXJtaXNzaW9uLywgL2luc3VmZmljaWVudCBwcml2aWxlZ2VzLyxcbiAgICBdLFxuICB9LFxuICB7XG4gICAgY2F0ZWdvcnk6ICdhdXRoZW50aWNhdGlvbicsXG4gICAgcGF0dGVybnM6IFtcbiAgICAgIC91bmF1dGhvcml6ZWQvLCAvNDAxLywgL2F1dGhlbnRpY2F0aW9uIGZhaWxlZC8sIC9pbnZhbGlkIGNyZWRlbnRpYWxzLyxcbiAgICAgIC9leHBpcmVkIHRva2VuLywgL3Rva2VuLipleHBpcmVkLywgL25vIGJhc2ljIGF1dGgvLCAvYmFkIGNyZWRlbnRpYWxzLyxcbiAgICAgIC9jb3VsZCBub3QgYmUgYXV0aGVudGljYXRlZC8sXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIGNhdGVnb3J5OiAnc291cmNlX2NoZWNrb3V0JyxcbiAgICBwYXR0ZXJuczogW1xuICAgICAgL2NvdWxkIG5vdCByZXNvbHZlIGhvc3Q6IGdpdGh1Yi8sIC9yZXBvc2l0b3J5IG5vdCBmb3VuZC8sIC9mYXRhbDogY291bGQgbm90IHJlYWQvLFxuICAgICAgL2dpdCBjbG9uZS4qZmFpbGVkLywgL3JlZmVyZW5jZSBpcyBub3QgYSB0cmVlLywgL3VuYWJsZSB0byBhY2Nlc3MuKlxcLmdpdC8sXG4gICAgICAvc291cmNlLipjaGVja291dC4qZmFpbGVkLywgL2NvZGVjb21taXQuKm5vdCBmb3VuZC8sXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIGNhdGVnb3J5OiAnZGVwZW5kZW5jeScsXG4gICAgcGF0dGVybnM6IFtcbiAgICAgIC9ucG0gZXJyIS4qKD86ZTQwNHxldGFyZ2V0fGVyZXNvbHZlKS8sIC9jb3VsZCBub3QgcmVzb2x2ZSBkZXBlbmRlbmN5LyxcbiAgICAgIC9ubyBtYXRjaGluZyB2ZXJzaW9uIGZvdW5kLywgL3VuYWJsZSB0byByZXNvbHZlIGRlcGVuZGVuY3kgdHJlZS8sXG4gICAgICAvY291bGQgbm90IGZpbmQgYSB2ZXJzaW9uIHRoYXQgc2F0aXNmaWVzLywgL3BpcC4qY291bGQgbm90IGZpbmQvLFxuICAgICAgL2dvOiAuKjogdW5rbm93biByZXZpc2lvbi8sIC9tYXZlbi4qY291bGQgbm90IHJlc29sdmUgZGVwZW5kZW5jaWVzLyxcbiAgICAgIC9idW5kbGVyLipjb3VsZCBub3QgZmluZC8sIC9jYXJnby4qZmFpbGVkIHRvIHNlbGVjdCBhIHZlcnNpb24vLFxuICAgICAgL3BlZXIgZGVwLywgL2xvY2tmaWxlLipvdXQgb2Ygc3luYy8sXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIGNhdGVnb3J5OiAndW5pdF90ZXN0JyxcbiAgICBwYXR0ZXJuczogWy90ZXN0cz8gZmFpbGVkLywgL2Fzc2VydGlvbig/OmVycm9yKT8gZmFpbGVkLywgL1xcZCsgKD86dGVzdHM/fHNwZWNzPykgZmFpbGVkLywgL2plc3QuKmZhaWwvLCAvcHl0ZXN0LipmYWlsZWQvXSxcbiAgICBhY3Rpb246IC90ZXN0fHNwZWN8amVzdHxweXRlc3R8anVuaXQvaSxcbiAgfSxcbiAge1xuICAgIGNhdGVnb3J5OiAnaW50ZWdyYXRpb25fdGVzdCcsXG4gICAgcGF0dGVybnM6IFsvdGVzdHM/IGZhaWxlZC8sIC9hc3NlcnRpb24oPzplcnJvcik/IGZhaWxlZC8sIC9jb25uZWN0aW9uIHJlZnVzZWQvXSxcbiAgICBhY3Rpb246IC9pbnRlZ3JhdGlvbnxlMmV8c21va2V8YWNjZXB0YW5jZXxjb250cmFjdC9pLFxuICB9LFxuICB7XG4gICAgY2F0ZWdvcnk6ICdzZWN1cml0eV9zY2FuJyxcbiAgICBwYXR0ZXJuczogW1xuICAgICAgL3Z1bG5lcmFiaWxpdC8sIC9jdmUtXFxkezR9LywgL2dyeXBlLywgL3RyaXZ5LywgL3Nhc3QvLCAvZGVwZW5kZW5jeSBjaGVjayBmYWlsZWQvLFxuICAgICAgL3NlY3JldCBkZXRlY3RlZC8sIC9saWNlbnNlIHZpb2xhdGlvbi8sIC9wb2xpY3kgdmlvbGF0aW9uLipzY2FuLyxcbiAgICBdLFxuICB9LFxuICB7XG4gICAgY2F0ZWdvcnk6ICd0aW1lb3V0JyxcbiAgICBwYXR0ZXJuczogW1xuICAgICAgL3RpbWVkPyA/b3V0LywgL2V0aW1lZG91dC8sIC9kZWFkbGluZSBleGNlZWRlZC8sIC9leGNlZWRlZCB0aGUuKnRpbWVvdXQvLFxuICAgICAgL2J1aWxkLipleGNlZWRlZC4qbWludXRlcy8sIC9jb250ZXh0IGRlYWRsaW5lLyxcbiAgICBdLFxuICB9LFxuICB7XG4gICAgY2F0ZWdvcnk6ICdyZXNvdXJjZV9leGhhdXN0aW9uJyxcbiAgICBwYXR0ZXJuczogW1xuICAgICAgL291dCBvZiBtZW1vcnkvLCAvb29ta2lsbGVkLywgL2Nhbm5vdCBhbGxvY2F0ZSBtZW1vcnkvLCAvbm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UvLFxuICAgICAgL2Rpc2sgcXVvdGEgZXhjZWVkZWQvLCAvZW5vc3BjLywgL3RvbyBtYW55IG9wZW4gZmlsZXMvLCAva2lsbGVkLipzaWduYWwgOS8sXG4gICAgICAvamF2YXNjcmlwdCBoZWFwIG91dCBvZiBtZW1vcnkvLFxuICAgIF0sXG4gIH0sXG4gIHtcbiAgICBjYXRlZ29yeTogJ2RlcGxveW1lbnQnLFxuICAgIHBhdHRlcm5zOiBbXG4gICAgICAvY2xvdWRmb3JtYXRpb24uKnJvbGxiYWNrLywgL3N0YWNrLipyb2xsYmFja19jb21wbGV0ZS8sIC9jcmVhdGVfZmFpbGVkLywgL3VwZGF0ZV9yb2xsYmFjay8sXG4gICAgICAvY2RrIGRlcGxveS4qZmFpbGVkLywgL2Vjcy4qZGVwbG95bWVudC4qZmFpbGVkLywgL2RlcGxveW1lbnQuKmNpcmN1aXQgYnJlYWtlci8sXG4gICAgICAvaGVhbHRoIGNoZWNrLipmYWlsZWQuKnRhcmdldCBncm91cC8sXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIGNhdGVnb3J5OiAnaW5mcmFzdHJ1Y3R1cmUnLFxuICAgIHBhdHRlcm5zOiBbXG4gICAgICAvdGhyb3R0bC8sIC9yYXRlIGV4Y2VlZGVkLywgL2xpbWl0ZXhjZWVkZWQvLCAvc2VydmljZXF1b3RhZXhjZWVkZWQvLFxuICAgICAgL2NhcGFjaXR5LywgL2luc3VmZmljaWVudGluc3RhbmNlY2FwYWNpdHkvLCAvaG9zdC4qdW5yZWFjaGFibGUvLFxuICAgICAgL2ludGVybmFsIHNlcnZpY2UgZXJyb3IvLCAvNVxcZFxcZC4qYXdzLyxcbiAgICBdLFxuICB9LFxuICB7XG4gICAgY2F0ZWdvcnk6ICdleHRlcm5hbF9zZXJ2aWNlJyxcbiAgICBwYXR0ZXJuczogW1xuICAgICAgL2NvdWxkIG5vdCByZXNvbHZlIGhvc3QvLCAvZW5vdGZvdW5kLywgL2Vjb25ucmVmdXNlZC8sIC9lY29ubnJlc2V0LyxcbiAgICAgIC9nZXRhZGRyaW5mby8sIC9zb2NrZXQgaGFuZyB1cC8sIC9iYWQgZ2F0ZXdheS8sIC81MDJ8NTAzfDUwNC8sXG4gICAgICAvdXBzdHJlYW0uKnVuYXZhaWxhYmxlLywgL3JlZ2lzdHJ5Lip1bnJlYWNoYWJsZS8sXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIGNhdGVnb3J5OiAnY29uZmlndXJhdGlvbicsXG4gICAgcGF0dGVybnM6IFtcbiAgICAgIC9pcyBub3QgZGVmaW5lZC8sIC9ubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5LywgL2Vub2VudC8sIC9pbnZhbGlkLipjb25maWd1cmF0aW9uLyxcbiAgICAgIC9taXNzaW5nIHJlcXVpcmVkLiooPzp2YXJpYWJsZXxwYXJhbWV0ZXJ8aW5wdXQpLyxcbiAgICAgIC8vIEJvdGggb3JkZXJzOiBcInlhbWwgcGFyc2UgZXJyb3JcIiBhbmQgXCJlcnJvciBwYXJzaW5nIFlBTUxcIi5cbiAgICAgIC95YW1sLiooPzpwYXJzZXxwYXJzaW5nfHN5bnRheCkvLCAvKD86cGFyc2V8cGFyc2luZ3xzeW50YXgpLip5YW1sLyxcbiAgICAgIC91bmV4cGVjdGVkIHRva2VuLipqc29uLywgL2J1aWxkc3BlYy8sIC9jb21tYW5kIG5vdCBmb3VuZC8sXG4gICAgXSxcbiAgfSxcbiAge1xuICAgIGNhdGVnb3J5OiAnYnVpbGQnLFxuICAgIHBhdHRlcm5zOiBbXG4gICAgICAvY29tcGlsYXRpb24gKD86ZmFpbGVkfGVycm9yKS8sIC9lcnJvciB0c1xcZCsvLCAvc3ludGF4IGVycm9yLywgL2Nhbm5vdCBmaW5kIG1vZHVsZS8sXG4gICAgICAvdW5kZWZpbmVkIHJlZmVyZW5jZS8sIC9idWlsZCBmYWlsZWQvLCAvd2VicGFjay4qZXJyb3IvLCAvdHNjLiplcnJvci8sXG4gICAgICAvZG9ja2VyIGJ1aWxkLipmYWlsZWQvLCAvZmFpbGVkIHRvIHNvbHZlLyxcbiAgICBdLFxuICB9LFxuXTtcblxuLyoqXG4gKiBUaGUgY2F0ZWdvcnkgZm9yIGEgZmFpbGVkIGFjdGlvbi5cbiAqXG4gKiBgbnVsbGAgZm9yIGFueXRoaW5nIHRoYXQgaXMgbm90IGEgZmFpbHVyZSDigJQgdGhlIGNhbGxlciBzdG9yZXMgbm90aGluZyByYXRoZXJcbiAqIHRoYW4gbGFiZWxsaW5nIGEgc3VjY2Vzcywgc28gYSBjYXRlZ29yeSdzIHByZXNlbmNlIGFsd2F5cyBtZWFucyBcInRoaXMgYnJva2VcIi5cbiAqL1xuLyoqXG4gKiBUaGUgc3ludGgncyBzdHJ1Y3R1cmVkIHJlZnVzYWwgY29kZXMgKGBQQl9TWU5USF9GQUlMVVJFYCwgbGlmdGVkIGJ5IHRoZSBldmVudHNcbiAqIExhbWJkYSBpbnRvIGBkZXRhaWwucGJGYWlsdXJlLmNvZGVgKSBhbmQgd2hhdCBlYWNoIG1lYW5zLiBBIHBsdWdpbiB0aGUgb3JnXG4gKiBjYW4ndCByZXNvbHZlIOKAlCBub3QgaW5zdGFsbGVkLCBibG9ja2VkIGJ5IHBvbGljeSwgdW5hdmFpbGFibGUsIGRlbGV0ZWQsIGFuXG4gKiBleGFjdCBwaW4gdGhhdCBkb2Vzbid0IGV4aXN0LCBhIGNvbnRyYWN0IHRoZSBwaXBlbGluZSBkb2Vzbid0IG1lZXQg4oCUIGlzIHRoZVxuICogcGlwZWxpbmUncyBjb25maWd1cmF0aW9uIHRvIGZpeDsgYW4gaW1hZ2Ugd2hvc2Ugc2lnbmF0dXJlIGRvZXNuJ3QgdmVyaWZ5IGlzIGFcbiAqIHN1cHBseS1jaGFpbiAoc2VjdXJpdHkpIGZhaWx1cmUuIEFuIHVua25vd24gY29kZSBmYWxscyB0aHJvdWdoIHRvIHRoZSB0ZXh0IHJ1bGVzLlxuICovXG5jb25zdCBGQUlMVVJFX0NPREVfQ0FURUdPUklFUzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgRmFpbHVyZUNhdGVnb3J5Pj4gPSB7XG4gIElNQUdFX1ZFUklGSUNBVElPTl9GQUlMRUQ6ICdzZWN1cml0eV9zY2FuJyxcbiAgUExVR0lOX05PVF9JTlNUQUxMRUQ6ICdjb25maWd1cmF0aW9uJyxcbiAgUExVR0lOX0JMT0NLRURfQllfUE9MSUNZOiAnY29uZmlndXJhdGlvbicsXG4gIFBMVUdJTl9VTkFWQUlMQUJMRTogJ2NvbmZpZ3VyYXRpb24nLFxuICBQTFVHSU5fREVMRVRFRDogJ2NvbmZpZ3VyYXRpb24nLFxuICBQTFVHSU5fVkVSU0lPTl9OT1RfRk9VTkQ6ICdjb25maWd1cmF0aW9uJyxcbiAgVEVNUExBVEVfQ09OVFJBQ1RfVklPTEFUSU9OOiAnY29uZmlndXJhdGlvbicsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gY2xhc3NpZnlGYWlsdXJlKGlucHV0OiB7XG4gIHN0YXR1czogc3RyaW5nO1xuICBlcnJvck1lc3NhZ2U/OiBzdHJpbmcgfCBudWxsO1xuICBhY3Rpb25OYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgc3RhZ2VOYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFRoZSBzdHJ1Y3R1cmVkIHN5bnRoIHJlZnVzYWwgY29kZSAoYGRldGFpbC5wYkZhaWx1cmUuY29kZWApLCB3aGVuIHRoZSBidWlsZCBwcmludGVkIG9uZS4gKi9cbiAgZmFpbHVyZUNvZGU/OiBzdHJpbmcgfCBudWxsO1xufSk6IEZhaWx1cmVDYXRlZ29yeSB8IG51bGwge1xuICBjb25zdCBmYWlsZWQgPSAvXihGQUlMRUR8RkFJTFVSRXxFUlJPUnxUSU1FRF9PVVQpJC9pLnRlc3QoaW5wdXQuc3RhdHVzKTtcbiAgaWYgKCFmYWlsZWQpIHJldHVybiBudWxsO1xuXG4gIC8vIEEgY29kZSB0aGUgc3ludGggcHJpbnRlZCBuYW1lcyB0aGUgZmFpbHVyZSBleGFjdGx5OyB0aGUgdGV4dCBydWxlcyBvbmx5IGd1ZXNzLlxuICBjb25zdCBjb2RlZCA9IGlucHV0LmZhaWx1cmVDb2RlID8gRkFJTFVSRV9DT0RFX0NBVEVHT1JJRVNbaW5wdXQuZmFpbHVyZUNvZGVdIDogdW5kZWZpbmVkO1xuICBpZiAoY29kZWQpIHJldHVybiBjb2RlZDtcblxuICBjb25zdCB0ZXh0ID0gKGlucHV0LmVycm9yTWVzc2FnZSA/PyAnJykudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qgd2hlcmUgPSBgJHtpbnB1dC5hY3Rpb25OYW1lID8/ICcnfSAke2lucHV0LnN0YWdlTmFtZSA/PyAnJ31gO1xuXG4gIGZvciAoY29uc3QgcnVsZSBvZiBSVUxFUykge1xuICAgIGlmIChydWxlLmFjdGlvbiAmJiAhcnVsZS5hY3Rpb24udGVzdCh3aGVyZSkpIGNvbnRpbnVlO1xuICAgIGlmIChydWxlLnBhdHRlcm5zLnNvbWUoKHApID0+IHAudGVzdCh0ZXh0KSkpIHJldHVybiBydWxlLmNhdGVnb3J5O1xuICB9XG5cbiAgLy8gTm90aGluZyBtYXRjaGVkLiBgb3RoZXJgIHJhdGhlciB0aGFuIGEgZ3Vlc3MsIGFuZCBjb3VudGVkLCBzbyB0aGUgc2hhcmUgb2ZcbiAgLy8gYG90aGVyYCBtZWFzdXJlcyBob3cgZ29vZCB0aGUgcnVsZXMgYXJlIGFuZCBuYW1lcyB0aGUgZ2FwIHRvIGNsb3NlLlxuICByZXR1cm4gJ290aGVyJztcbn1cblxuLyoqXG4gKiBBIGh1bWFuIGxhYmVsIGZvciBhIGNhdGVnb3J5LCBmb3IgdGhlIHJlcG9ydCBhbmQgdGhlIFVJLlxuICpcbiAqIFBocmFzZWQgYXMgd2hhdCBicm9rZSByYXRoZXIgdGhhbiBhcyBhbiBlbnVtOiBhIG1hbmFnZXIgcmVhZGluZ1xuICogXCJEZXBlbmRlbmN5IHJlc29sdXRpb25cIiB1bmRlcnN0YW5kcyBpdCwgYW5kIGBpbnRlZ3JhdGlvbl90ZXN0YCBkb2VzIG5vdC5cbiAqL1xuZXhwb3J0IGNvbnN0IEZBSUxVUkVfQ0FURUdPUllfTEFCRUxTOiBSZWNvcmQ8RmFpbHVyZUNhdGVnb3J5LCBzdHJpbmc+ID0ge1xuICBzb3VyY2VfY2hlY2tvdXQ6ICdTb3VyY2UgY2hlY2tvdXQnLFxuICBkZXBlbmRlbmN5OiAnRGVwZW5kZW5jeSByZXNvbHV0aW9uJyxcbiAgYnVpbGQ6ICdCdWlsZCAvIGNvbXBpbGUnLFxuICB1bml0X3Rlc3Q6ICdVbml0IHRlc3RzJyxcbiAgaW50ZWdyYXRpb25fdGVzdDogJ0ludGVncmF0aW9uIHRlc3RzJyxcbiAgc2VjdXJpdHlfc2NhbjogJ1NlY3VyaXR5IHNjYW4nLFxuICBpbmZyYXN0cnVjdHVyZTogJ0Nsb3VkIGluZnJhc3RydWN0dXJlJyxcbiAgZGVwbG95bWVudDogJ0RlcGxveW1lbnQnLFxuICBhdXRoZW50aWNhdGlvbjogJ0F1dGhlbnRpY2F0aW9uJyxcbiAgcGVybWlzc2lvbnM6ICdQZXJtaXNzaW9ucycsXG4gIGNvbmZpZ3VyYXRpb246ICdDb25maWd1cmF0aW9uJyxcbiAgdGltZW91dDogJ1RpbWVvdXQnLFxuICByZXNvdXJjZV9leGhhdXN0aW9uOiAnT3V0IG9mIHJlc291cmNlcycsXG4gIGV4dGVybmFsX3NlcnZpY2U6ICdFeHRlcm5hbCBzZXJ2aWNlJyxcbiAgb3RoZXI6ICdVbmNsYXNzaWZpZWQnLFxufTtcblxuLyoqXG4gKiBXaGV0aGVyIGEgY2F0ZWdvcnkgaXMgc29tZXRoaW5nIHRoZSBURUFNIGNhbiBhY3Qgb24sIGFzIG9wcG9zZWQgdG8gc29tZXRoaW5nXG4gKiB0aGF0IGhhcHBlbmVkIHRvIHRoZW0uXG4gKlxuICogVXNlZCBieSB0aGUgZmFpbHVyZS1hbmFseXNpcyBzZWN0aW9uIHRvIHNlcGFyYXRlIHRoZSB0d28sIGJlY2F1c2UgYSB3ZWVrIHdob3NlXG4gKiBmYWlsdXJlcyB3ZXJlIGFsbCBjbG91ZCB0aHJvdHRsaW5nIGlzIGEgZGlmZmVyZW50IGNvbnZlcnNhdGlvbiBmcm9tIG9uZSB3aG9zZVxuICogZmFpbHVyZXMgd2VyZSBhbGwgYnJva2VuIHRlc3RzIOKAlCBhbmQgcHJlc2VudGluZyB0aGVtIGluIG9uZSByYW5rZWQgbGlzdCBpbnZpdGVzXG4gKiBleGFjdGx5IHRoZSB3cm9uZyBjb25jbHVzaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUZWFtQWN0aW9uYWJsZShjYXRlZ29yeTogRmFpbHVyZUNhdGVnb3J5KTogYm9vbGVhbiB7XG4gIHJldHVybiAhWydpbmZyYXN0cnVjdHVyZScsICdleHRlcm5hbF9zZXJ2aWNlJ10uaW5jbHVkZXMoY2F0ZWdvcnkpO1xufVxuIl19
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* caches. Separate from the report queries because this is reporting's only
|
|
8
8
|
* durable persistence boundary — everything else in the service only reads.
|
|
9
9
|
*/
|
|
10
|
-
import { createLogger, errorMessage, scrubAwsIdentifiers } from '@pipeline-builder/api-core';
|
|
10
|
+
import { computeCreditsFor, createLogger, errorMessage, normalizeComputeType, scrubAwsIdentifiers } from '@pipeline-builder/api-core';
|
|
11
11
|
import { inArray } from 'drizzle-orm';
|
|
12
12
|
import { invalidateOrgReports } from './caches.js';
|
|
13
13
|
import { upsertDeployments } from './deploy-rollup.js';
|
|
@@ -98,7 +98,16 @@ function invalidEventTimes(event, nowMs) {
|
|
|
98
98
|
* boundary: every user/AWS-derived free-form string is scrubbed here, and
|
|
99
99
|
* tenancy comes from the pipeline registry, never the caller's claimed org.
|
|
100
100
|
*/
|
|
101
|
-
|
|
101
|
+
/** The synth refusal code the events Lambda attached (`detail.pbFailure.code`), if any. */
|
|
102
|
+
function pbFailureCode(detail) {
|
|
103
|
+
const failure = detail?.pbFailure;
|
|
104
|
+
const code = failure && typeof failure === 'object' ? failure.code : undefined;
|
|
105
|
+
return typeof code === 'string' && /^[A-Z][A-Z0-9_]{0,63}$/.test(code) ? code : null;
|
|
106
|
+
}
|
|
107
|
+
function toEventRow(event, registry, plugin, keyId) {
|
|
108
|
+
const detail = event.sourceMessageId !== undefined
|
|
109
|
+
? { ...(event.detail ?? {}), sourceMessageId: event.sourceMessageId }
|
|
110
|
+
: event.detail;
|
|
102
111
|
return {
|
|
103
112
|
// registry.pipelineId === event.pipelineId; the registry's is always a row
|
|
104
113
|
// that exists (FK) and its orgId is the trusted tenant.
|
|
@@ -142,21 +151,52 @@ function toEventRow(event, registry, plugin) {
|
|
|
142
151
|
errorMessage: scrubOptional(event.errorMessage),
|
|
143
152
|
actionName: scrubOptional(event.actionName),
|
|
144
153
|
stageName: scrubOptional(event.stageName),
|
|
154
|
+
failureCode: pbFailureCode(event.detail),
|
|
145
155
|
}),
|
|
146
|
-
|
|
156
|
+
// Provenance. Both are opaque ids — an AWS-assigned event UUID and our own
|
|
157
|
+
// key id — so neither can carry an account id and neither is scrubbed
|
|
158
|
+
// (scrubbing a digit run inside one would corrupt the correlation key).
|
|
159
|
+
sourceEventId: event.sourceEventId,
|
|
160
|
+
ingestKeyId: keyId,
|
|
161
|
+
detail: detail !== undefined ? scrubAwsIdentifiers(detail) : undefined,
|
|
147
162
|
};
|
|
148
163
|
}
|
|
149
164
|
/**
|
|
150
|
-
* Fan terminal STAGE outcomes
|
|
151
|
-
* import api-server's registry) after
|
|
152
|
-
*
|
|
153
|
-
*
|
|
165
|
+
* Fan terminal STAGE outcomes and per-ACTION compute consumption into the
|
|
166
|
+
* route's metric hook (pipeline-data can't import api-server's registry) after
|
|
167
|
+
* the insert commits.
|
|
168
|
+
*
|
|
169
|
+
* Driven off the INSERTED rows, so a re-delivered event the dedup index
|
|
170
|
+
* swallowed is never counted twice. That property is load-bearing for the
|
|
171
|
+
* compute series in a way it was not for the stage one: a duplicated stage
|
|
172
|
+
* outcome distorts a rate, whereas a duplicated vCPU-minute figure is a
|
|
173
|
+
* double-charge waiting for the day the charge is switched on.
|
|
174
|
+
*
|
|
175
|
+
* A non-null environment marks a deploy.
|
|
154
176
|
*/
|
|
155
|
-
function
|
|
177
|
+
function emitIngestMetrics(rows, onMetric) {
|
|
156
178
|
for (const r of rows) {
|
|
157
|
-
if (
|
|
179
|
+
if (!r.pipelineId)
|
|
180
|
+
continue;
|
|
181
|
+
// Compute consumption: every TERMINAL action, measurable or not. The
|
|
182
|
+
// unmeasurable ones are the point — they are what the coverage ratio counts.
|
|
183
|
+
if (r.eventType === 'ACTION' && TERMINAL_ACTION_STATES.includes(r.status)) {
|
|
184
|
+
const computeType = normalizeComputeType(typeof r.detail?.computeType === 'string' ? r.detail.computeType : null);
|
|
185
|
+
const durationMs = r.durationMs ?? null;
|
|
186
|
+
onMetric({
|
|
187
|
+
kind: 'compute',
|
|
188
|
+
pipelineId: r.pipelineId,
|
|
189
|
+
orgId: r.orgId,
|
|
190
|
+
computeType,
|
|
191
|
+
durationMs,
|
|
192
|
+
credits: computeCreditsFor(durationMs, computeType),
|
|
193
|
+
});
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
if (r.eventType !== 'STAGE' || (r.status !== 'SUCCEEDED' && r.status !== 'FAILED'))
|
|
158
197
|
continue;
|
|
159
198
|
onMetric({
|
|
199
|
+
kind: 'stage',
|
|
160
200
|
pipelineId: r.pipelineId,
|
|
161
201
|
orgId: r.orgId,
|
|
162
202
|
stage: r.stageName ?? '',
|
|
@@ -165,6 +205,8 @@ function emitStageMetrics(rows, onMetric) {
|
|
|
165
205
|
});
|
|
166
206
|
}
|
|
167
207
|
}
|
|
208
|
+
/** Action states that mean the action is over and its consumption is final. */
|
|
209
|
+
const TERMINAL_ACTION_STATES = ['SUCCEEDED', 'FAILED', 'STOPPED'];
|
|
168
210
|
/**
|
|
169
211
|
* Resolve incoming events against the pipeline registry, batch-insert the
|
|
170
212
|
* matched ones, and invalidate reporting caches for affected orgs.
|
|
@@ -197,7 +239,7 @@ export async function ingestEvents(events, onMetric, caller) {
|
|
|
197
239
|
// Caches are invalidated AFTER the tx resolves: doing it inside held the pg
|
|
198
240
|
// locks open across unrelated cache round-trips. The TTL is 2-5 min, so a
|
|
199
241
|
// fire-and-forget post-commit invalidation is an acceptable trade.
|
|
200
|
-
const { inserted, skipped, unregisteredPipelineIds, affectedOrgs, droppedForeignOrg, droppedInvalidTime, insertedRows } = await withTenantTx(async (tx) => {
|
|
242
|
+
const { inserted, skipped, unregisteredPipelineIds, affectedOrgs, droppedForeignOrg, droppedInvalidTime, foreignPipelineIds, insertedRows } = await withTenantTx(async (tx) => {
|
|
201
243
|
// Batch-resolve all unique pipeline ids in one query
|
|
202
244
|
const uniqueIds = [...new Set(events.map(e => e.pipelineId))];
|
|
203
245
|
const registryRows = await tx
|
|
@@ -216,6 +258,7 @@ export async function ingestEvents(events, onMetric, caller) {
|
|
|
216
258
|
let invalidTimeLocal = 0;
|
|
217
259
|
const invalidTimeReasons = new Set();
|
|
218
260
|
const foreignOrgIds = new Set();
|
|
261
|
+
const foreignPipelineIdsLocal = new Set();
|
|
219
262
|
const unregisteredLocal = [];
|
|
220
263
|
// One `now` for the whole batch: per-event clocks would let an event pass or
|
|
221
264
|
// fail depending on where it sat in the loop.
|
|
@@ -233,6 +276,7 @@ export async function ingestEvents(events, onMetric, caller) {
|
|
|
233
276
|
if (!unrestricted && !allowed.has(registry.orgId)) {
|
|
234
277
|
foreignLocal++;
|
|
235
278
|
foreignOrgIds.add(registry.orgId);
|
|
279
|
+
foreignPipelineIdsLocal.add(event.pipelineId);
|
|
236
280
|
continue;
|
|
237
281
|
}
|
|
238
282
|
// Impossible timestamps are refused at the boundary, so no downstream
|
|
@@ -250,12 +294,13 @@ export async function ingestEvents(events, onMetric, caller) {
|
|
|
250
294
|
: undefined;
|
|
251
295
|
// Same-org guard: a manifest row is only ever written by the org that
|
|
252
296
|
// owns the pipeline, but the ingest runs cross-tenant, so don't lean on it.
|
|
253
|
-
rows.push(toEventRow(event, registry, step && step.orgId === registry.orgId ? step : undefined));
|
|
297
|
+
rows.push(toEventRow(event, registry, step && step.orgId === registry.orgId ? step : undefined, caller?.keyId));
|
|
254
298
|
}
|
|
255
299
|
// SQS is at-least-once, so EventBridge can deliver the same state-change
|
|
256
|
-
// twice. `onConflictDoNothing` + the partial unique
|
|
300
|
+
// twice. `onConflictDoNothing` + the partial unique indexes on
|
|
257
301
|
// (pipeline_id, execution_id, event_type, status, stage_name, action_name)
|
|
258
|
-
//
|
|
302
|
+
// and on source_event_id (the EventBridge id, when present) make
|
|
303
|
+
// re-delivery idempotent. `returning` gives the REAL inserted set so
|
|
259
304
|
// counts, metrics and cache invalidation all ignore duplicates.
|
|
260
305
|
const landed = rows.length > 0
|
|
261
306
|
? await tx.insert(schema.pipelineEvent).values(rows)
|
|
@@ -278,6 +323,7 @@ export async function ingestEvents(events, onMetric, caller) {
|
|
|
278
323
|
startedAt: schema.pipelineEvent.startedAt,
|
|
279
324
|
createdAt: schema.pipelineEvent.createdAt,
|
|
280
325
|
detail: schema.pipelineEvent.detail,
|
|
326
|
+
sourceEventId: schema.pipelineEvent.sourceEventId,
|
|
281
327
|
})
|
|
282
328
|
: [];
|
|
283
329
|
// Log inside the tx scope while the org set is in hand. WARN, not error:
|
|
@@ -303,11 +349,12 @@ export async function ingestEvents(events, onMetric, caller) {
|
|
|
303
349
|
affectedOrgs: [...new Set(landed.map(r => r.orgId))],
|
|
304
350
|
droppedForeignOrg: foreignLocal,
|
|
305
351
|
droppedInvalidTime: invalidTimeLocal,
|
|
352
|
+
foreignPipelineIds: [...foreignPipelineIdsLocal],
|
|
306
353
|
insertedRows: landed,
|
|
307
354
|
};
|
|
308
355
|
});
|
|
309
356
|
if (onMetric)
|
|
310
|
-
|
|
357
|
+
emitIngestMetrics(insertedRows, onMetric);
|
|
311
358
|
// Per-deploy rollup. AFTER the events commit and outside their transaction: the
|
|
312
359
|
// events are the durable record and `dora_deployments` is derived from them, so
|
|
313
360
|
// a rollup failure must not roll back an ingest that succeeded. Rebuildable
|
|
@@ -330,6 +377,16 @@ export async function ingestEvents(events, onMetric, caller) {
|
|
|
330
377
|
logger.warn('Reporting cache invalidation failed', { orgId: org, error: errorMessage(err) });
|
|
331
378
|
})));
|
|
332
379
|
}
|
|
333
|
-
return {
|
|
380
|
+
return {
|
|
381
|
+
inserted,
|
|
382
|
+
skipped,
|
|
383
|
+
unregisteredPipelineIds,
|
|
384
|
+
affectedOrgs,
|
|
385
|
+
droppedForeignOrg,
|
|
386
|
+
droppedInvalidTime,
|
|
387
|
+
foreignPipelineIds,
|
|
388
|
+
insertedExecutionIds: [...new Set(insertedRows.map((r) => r.executionId).filter((id) => !!id))],
|
|
389
|
+
insertedPipelineIds: [...new Set(insertedRows.map((r) => r.pipelineId).filter((id) => !!id))],
|
|
390
|
+
};
|
|
334
391
|
}
|
|
335
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5nZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9yZXBvcnRpbmcvaW5nZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWpELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHekQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFjaEQscUVBQXFFO0FBQ3JFLFNBQVMsY0FBYyxDQUFDLENBQWM7SUFDcEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxTQUFTLEtBQUssT0FBTyxDQUFDO1dBQ3ZELENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxjQUFjLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxXQUFXLENBQUM7V0FDbkUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7QUFDdkMsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLFVBQWtCLEVBQUUsU0FBaUIsRUFBRSxVQUFrQjtJQUN4RSxPQUFPLEdB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LEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzVDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsc0RBQXNEO0lBQ3RELElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM1QixLQUFLLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ3hDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUNBQXFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9GLENBQUMsQ0FBQyxDQUNILENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztBQUM3RyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogRXZlbnQgaW5nZXN0OiB0aGUgV1JJVEUgaGFsZiBvZiByZXBvcnRpbmcuIFJlc29sdmVzIGluY29taW5nIHBpcGVsaW5lIGV2ZW50c1xuICogYWdhaW5zdCB0aGUgcGlwZWxpbmUgcmVnaXN0cnksIHNjcnVicyBldmVyeSBmcmVlLWZvcm0gc3RyaW5nLCBiYXRjaC1pbnNlcnRzXG4gKiB0aGUgbWF0Y2hlZCByb3dzIGlkZW1wb3RlbnRseSwgYW5kIGludmFsaWRhdGVzIHRoZSBhZmZlY3RlZCBvcmdzJyByZXBvcnRcbiAqIGNhY2hlcy4gU2VwYXJhdGUgZnJvbSB0aGUgcmVwb3J0IHF1ZXJpZXMgYmVjYXVzZSB0aGlzIGlzIHJlcG9ydGluZydzIG9ubHlcbiAqIGR1cmFibGUgcGVyc2lzdGVuY2UgYm91bmRhcnkg4oCUIGV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgc2VydmljZSBvbmx5IHJlYWRzLlxuICovXG5cbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciwgZXJyb3JNZXNzYWdlLCBzY3J1YkF3c0lkZW50aWZpZXJzIH0gZnJvbSAnQHBpcGVsaW5lLWJ1aWxkZXIvYXBpLWNvcmUnO1xuaW1wb3J0IHsgaW5BcnJheSB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB7IGludmFsaWRhdGVPcmdSZXBvcnRzIH0gZnJvbSAnLi9jYWNoZXMuanMnO1xuaW1wb3J0IHsgdXBzZXJ0RGVwbG95bWVudHMgfSBmcm9tICcuL2RlcGxveS1yb2xsdXAuanMnO1xuaW1wb3J0IHsgY2xhc3NpZnlGYWlsdXJlIH0gZnJvbSAnLi9mYWlsdXJlLWNsYXNzaWZpZXIuanMnO1xuaW1wb3J0IHsgc2NydWJPcHRpb25hbCB9IGZyb20gJy4vc3FsLWhlbHBlcnMuanMnO1xuaW1wb3J0IHR5cGUgeyBJbmdlc3RDYWxsZXIsIEluZ2VzdEV2ZW50LCBJbmdlc3RNZXRyaWMsIEluZ2VzdFJlc3VsdCB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgc2NoZW1hIH0gZnJvbSAnLi4vLi4vZGF0YWJhc2UvZHJpenpsZS1zY2hlbWEuanMnO1xuaW1wb3J0IHsgd2l0aFRlbmFudFR4IH0gZnJvbSAnLi4vLi4vZGF0YWJhc2UvdGVuYW5jeS5qcyc7XG5pbXBvcnQgdHlwZSB7IENydWRUeCB9IGZyb20gJy4uL2NydWQtc2VydmljZS5qcyc7XG5cbmNvbnN0IGxvZ2dlciA9IGNyZWF0ZUxvZ2dlcigncmVwb3J0aW5nLWluZ2VzdCcpO1xuXG50eXBlIFBpcGVsaW5lRXZlbnRJbnNlcnQgPSB0eXBlb2Ygc2NoZW1hLnBpcGVsaW5lRXZlbnQuJGluZmVySW5zZXJ0O1xuXG5cbi8qKiBUaGUgcGx1Z2luIGEgcGlwZWxpbmUgc3RlcCBydW5zLCBmcm9tIHRoZSBzdGVwIG1hbmlmZXN0IGl0cyBsYXN0IGRlcGxveSByZWdpc3RlcmVkLiAqL1xuaW50ZXJmYWNlIFN0ZXBQbHVnaW4ge1xuICBvcmdJZDogc3RyaW5nO1xuICBwbHVnaW5QdWJsaXNoZXI6IHN0cmluZyB8IG51bGw7XG4gIHBsdWdpblB1Ymxpc2hlcklkOiBzdHJpbmcgfCBudWxsO1xuICBwbHVnaW5OYW1lOiBzdHJpbmcgfCBudWxsO1xuICBwbHVnaW5WZXJzaW9uOiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKiogQW4gYWN0aW9uL2J1aWxkIGV2ZW50IHRoYXQgY2FuIGJlIGF0dHJpYnV0ZWQgdG8gYSBwbHVnaW4gc3RlcC4gKi9cbmZ1bmN0aW9uIGlzQXR0cmlidXRhYmxlKGU6IEluZ2VzdEV2ZW50KTogYm9vbGVhbiB7XG4gIHJldHVybiAoZS5ldmVudFR5cGUgPT09ICdBQ1RJT04nIHx8IGUuZXZlbnRUeXBlID09PSAnQlVJTEQnKVxuICAgICYmIChlLmV2ZW50U291cmNlID09PSAnY29kZXBpcGVsaW5lJyB8fCBlLmV2ZW50U291cmNlID09PSAnY29kZWJ1aWxkJylcbiAgICAmJiAhIWUuc3RhZ2VOYW1lICYmICEhZS5hY3Rpb25OYW1lO1xufVxuXG5mdW5jdGlvbiBzdGVwS2V5KHBpcGVsaW5lSWQ6IHN0cmluZywgc3RhZ2VOYW1lOiBzdHJpbmcsIGFjdGlvbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtwaXBlbGluZUlkfVxcdTAwMDAke3N0YWdlTmFtZX1cXHUwMDAwJHthY3Rpb25OYW1lfWA7XG59XG5cbi8qKlxuICogUGx1Z2luIGF0dHJpYnV0aW9uOiB0aGUgc3RlcCBtYW5pZmVzdHMgb2YgZXZlcnkgcGlwZWxpbmUgd2l0aCBhbiBhdHRyaWJ1dGFibGVcbiAqIGV2ZW50LCBpbiBPTkUgcmVhZCBwZXIgYmF0Y2gsIGtleWVkIGZvciBhbiBpbi1tZW1vcnkgam9pbi4gTmFtZXMgYXJlIGNvbXBhcmVkXG4gKiBwb3N0LXNjcnViIG9uIGJvdGggc2lkZXMgKHRoZSBtYW5pZmVzdCBzdG9yZXMgdGhlbSBzY3J1YmJlZCB0aGUgc2FtZSB3YXkpLlxuICovXG5hc3luYyBmdW5jdGlvbiBsb2FkU3RlcFBsdWdpbnModHg6IENydWRUeCwgYXR0cmlidXRhYmxlOiBJbmdlc3RFdmVudFtdKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBTdGVwUGx1Z2luPj4ge1xuICBjb25zdCBwaXBlbGluZUlkcyA9IFsuLi5uZXcgU2V0KGF0dHJpYnV0YWJsZS5tYXAoKGUpID0+IGUucGlwZWxpbmVJZCkpXTtcbiAgaWYgKHBpcGVsaW5lSWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG5ldyBNYXAoKTtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHR4XG4gICAgLnNlbGVjdCh7XG4gICAgICBwaXBlbGluZUlkOiBzY2hlbWEucGlwZWxpbmVTdGVwTWFuaWZlc3QucGlwZWxpbmVJZCxcbiAgICAgIG9yZ0lkOiBzY2hlbWEucGlwZWxpbmVTdGVwTWFuaWZlc3Qub3JnSWQsXG4gICAgICBzdGFnZU5hbWU6IHNjaGVtYS5waXBlbGluZVN0ZXBNYW5pZmVzdC5zdGFnZU5hbWUsXG4gICAgICBhY3Rpb25OYW1lOiBzY2hlbWEucGlwZWxpbmVTdGVwTWFuaWZlc3QuYWN0aW9uTmFtZSxcbiAgICAgIHBsdWdpblB1Ymxpc2hlcjogc2NoZW1hLnBpcGVsaW5lU3RlcE1hbmlmZXN0LnBsdWdpblB1Ymxpc2hlcixcbiAgICAgIHBsdWdpblB1Ymxpc2hlcklkOiBzY2hlbWEucGlwZWxpbmVTdGVwTWFuaWZlc3QucGx1Z2luUHVibGlzaGVySWQsXG4gICAgICBwbHVnaW5OYW1lOiBzY2hlbWEucGlwZWxpbmVTdGVwTWFuaWZlc3QucGx1Z2luTmFtZSxcbiAgICAgIHBsdWdpblZlcnNpb246IHNjaGVtYS5waXBlbGluZVN0ZXBNYW5pZmVzdC5wbHVnaW5WZXJzaW9uLFxuICAgIH0pXG4gICAgLmZyb20oc2NoZW1hLnBpcGVsaW5lU3RlcE1hbmlmZXN0KVxuICAgIC53aGVyZShpbkFycmF5KHNjaGVtYS5waXBlbGluZVN0ZXBNYW5pZmVzdC5waXBlbGluZUlkLCBwaXBlbGluZUlkcykpO1xuICByZXR1cm4gbmV3IE1hcChyb3dzLm1hcCgobSkgPT4gW3N0ZXBLZXkobS5waXBlbGluZUlkLCBtLnN0YWdlTmFtZSwgbS5hY3Rpb25OYW1lKSwgbV0pKTtcbn1cblxuLyoqXG4gKiBBbGxvd2FuY2UgZm9yIGNsb2NrIHNrZXcgYmV0d2VlbiBhbiBBV1MgZXZlbnQncyBzb3VyY2UgY2xvY2sgYW5kIG91cnMuIEEgcmVhbFxuICogQ29kZVBpcGVsaW5lIGV2ZW50IGNhbiBjYXJyeSBhIHRpbWVzdGFtcCBhIGxpdHRsZSBhaGVhZCBvZiBvdXIgYG5vd2A7IHdpdGhvdXRcbiAqIHNvbWUgdG9sZXJhbmNlIHRoZSB2YWxpZGF0aW9uIGJlbG93IHdvdWxkIGRyb3AgaGVhbHRoeSBldmVudHMgZHVyaW5nIG5vcm1hbFxuICogTlRQIGRyaWZ0LCB3aGljaCBpcyBmYXIgd29yc2UgdGhhbiBhZG1pdHRpbmcgYSBmZXcgc2Vjb25kcyBvZiBza2V3LlxuICovXG5jb25zdCBDTE9DS19TS0VXX1RPTEVSQU5DRV9NUyA9IDUgKiA2MCAqIDEwMDA7XG5cbi8qKlxuICogV2h5IHRoaXMgZXZlbnQncyB0aW1lc3RhbXBzIGFyZSBpbXBvc3NpYmxlLCBvciBudWxsIHdoZW4gdGhleSBhcmUgdXNhYmxlLlxuICpcbiAqIENoZWNrZWQgYXQgSU5HRVNUIOKAlCB0aGUgZHVyYWJsZSBib3VuZGFyeSDigJQgcmF0aGVyIHRoYW4gY2xhbXBlZCB3aGVuIHRoZSBtZXRyaWNzXG4gKiBhcmUgY29tcHV0ZWQuIEEgbmVnYXRpdmUgZHVyYXRpb24gb3IgYSBmdXR1cmUgZGVwbG95IHVzZWQgdG8gYmUgY2xhbXBlZCB0byAwXG4gKiBkb3duc3RyZWFtLCB3aGljaCByZXBvcnRlZCBhIGJyb2tlbiBjbG9jayBhcyBhbiBpbnN0YW50IGRlcGxveSBhbmQgcXVpZXRseVxuICogbW92ZWQgZGVwbG95bWVudCBmcmVxdWVuY3ksIGNoYW5nZS1mYWlsdXJlIHJhdGUgYW5kIGxlYWQgdGltZSBmb3IgdGhlIG9yZy5cbiAqXG4gKiBOT1QgY2hlY2tlZCBoZXJlOiBjb21taXQgdGltZSB2cyBkZXBsb3kgY29tcGxldGlvbi4gYGNvbW1pdF90aW1lc3RhbXBgIHJpZGVzIHRoZVxuICogUElQRUxJTkUvc291cmNlIGV2ZW50IHdoaWxlIHRoZSBkZXBsb3kncyBgY29tcGxldGVkX2F0YCBpcyBvbiBhIHNlcGFyYXRlIFNUQUdFXG4gKiByb3csIGpvaW5lZCBieSBgZXhlY3V0aW9uX2lkYCBvbmx5IHdoZW4gRE9SQSBpcyBxdWVyaWVkIOKAlCBzbyBubyBzaW5nbGUgZXZlbnRcbiAqIGNhcnJpZXMgYm90aCwgYW5kIHRoYXQgb3JkZXJpbmcgY2FuIG9ubHkgYmUgZ3VhcmRlZCB3aGVyZSB0aGUgdHdvIG1lZXQuXG4gKi9cbmZ1bmN0aW9uIGludmFsaWRFdmVudFRpbWVzKGV2ZW50OiBJbmdlc3RFdmVudCwgbm93TXM6IG51bWJlcik6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBjZWlsaW5nID0gbm93TXMgKyBDTE9DS19TS0VXX1RPTEVSQU5DRV9NUztcbiAgY29uc3QgcGFyc2VkOiBBcnJheTxbc3RyaW5nLCBudW1iZXJdPiA9IFtdO1xuICBmb3IgKGNvbnN0IGZpZWxkIG9mIFsnc3RhcnRlZEF0JywgJ2NvbXBsZXRlZEF0JywgJ2NvbW1pdFRpbWVzdGFtcCddIGFzIGNvbnN0KSB7XG4gICAgY29uc3QgcmF3ID0gZXZlbnRbZmllbGRdO1xuICAgIGlmIChyYXcgPT09IHVuZGVmaW5lZCB8fCByYXcgPT09IG51bGwpIGNvbnRpbnVlO1xuICAgIGNvbnN0IG1zID0gRGF0ZS5wYXJzZShTdHJpbmcocmF3KSk7XG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUobXMpKSByZXR1cm4gYCR7ZmllbGR9IGlzIG5vdCBhIHBhcnNlYWJsZSB0aW1lc3RhbXBgO1xuICAgIGlmIChtcyA+IGNlaWxpbmcpIHJldHVybiBgJHtmaWVsZH0gaXMgaW4gdGhlIGZ1dHVyZWA7XG4gICAgcGFyc2VkLnB1c2goW2ZpZWxkLCBtc10pO1xuICB9XG4gIGNvbnN0IHN0YXJ0ZWQgPSBwYXJzZWQuZmluZCgoW2ZdKSA9PiBmID09PSAnc3RhcnRlZEF0Jyk/LlsxXTtcbiAgY29uc3QgY29tcGxldGVkID0gcGFyc2VkLmZpbmQoKFtmXSkgPT4gZiA9PT0gJ2NvbXBsZXRlZEF0Jyk/LlsxXTtcbiAgaWYgKHN0YXJ0ZWQgIT09IHVuZGVmaW5lZCAmJiBjb21wbGV0ZWQgIT09IHVuZGVmaW5lZCAmJiBjb21wbGV0ZWQgPCBzdGFydGVkKSB7XG4gICAgcmV0dXJuICdjb21wbGV0ZWRBdCBpcyBiZWZvcmUgc3RhcnRlZEF0JztcbiAgfVxuICBpZiAoZXZlbnQuZHVyYXRpb25NcyAhPT0gdW5kZWZpbmVkICYmIGV2ZW50LmR1cmF0aW9uTXMgIT09IG51bGwgJiYgZXZlbnQuZHVyYXRpb25NcyA8IDApIHtcbiAgICByZXR1cm4gJ2R1cmF0aW9uTXMgaXMgbmVnYXRpdmUnO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFRoZSBwZXJzaXN0ZWQgcm93IGZvciBvbmUgaW5nZXN0ZWQgZXZlbnQuIFRoaXMgaXMgdGhlIERVUkFCTEUgcGVyc2lzdGVuY2VcbiAqIGJvdW5kYXJ5OiBldmVyeSB1c2VyL0FXUy1kZXJpdmVkIGZyZWUtZm9ybSBzdHJpbmcgaXMgc2NydWJiZWQgaGVyZSwgYW5kXG4gKiB0ZW5hbmN5IGNvbWVzIGZyb20gdGhlIHBpcGVsaW5lIHJlZ2lzdHJ5LCBuZXZlciB0aGUgY2FsbGVyJ3MgY2xhaW1lZCBvcmcuXG4gKi9cbmZ1bmN0aW9uIHRvRXZlbnRSb3coZXZlbnQ6IEluZ2VzdEV2ZW50LCByZWdpc3RyeTogeyBwaXBlbGluZUlkOiBzdHJpbmc7IG9yZ0lkOiBzdHJpbmcgfSwgcGx1Z2luOiBTdGVwUGx1Z2luIHwgdW5kZWZpbmVkKTogUGlwZWxpbmVFdmVudEluc2VydCB7XG4gIHJldHVybiB7XG4gICAgLy8gcmVnaXN0cnkucGlwZWxpbmVJZCA9PT0gZXZlbnQucGlwZWxpbmVJZDsgdGhlIHJlZ2lzdHJ5J3MgaXMgYWx3YXlzIGEgcm93XG4gICAgLy8gdGhhdCBleGlzdHMgKEZLKSBhbmQgaXRzIG9yZ0lkIGlzIHRoZSB0cnVzdGVkIHRlbmFudC5cbiAgICBwaXBlbGluZUlkOiByZWdpc3RyeS5waXBlbGluZUlkLFxuICAgIG9yZ0lkOiByZWdpc3RyeS5vcmdJZCxcbiAgICBldmVudFNvdXJjZTogZXZlbnQuZXZlbnRTb3VyY2UsXG4gICAgZXZlbnRUeXBlOiBldmVudC5ldmVudFR5cGUsXG4gICAgc3RhdHVzOiBldmVudC5zdGF0dXMsXG4gICAgLy8gQW4gQVdTLUFTU0lHTkVEIFVVSUQsIG5vdCBmcmVlLWZvcm0gdGV4dDogaXQgY2FuJ3QgY2FycnkgYW4gYWNjb3VudCBpZCxcbiAgICAvLyBhbmQgc2NydWJiaW5nIGEgMTItZGlnaXQgcnVuIGluc2lkZSBpdCB3b3VsZCBjb3JydXB0IHRoZSBjb3JyZWxhdGlvbiBrZXkuXG4gICAgZXhlY3V0aW9uSWQ6IGV2ZW50LmV4ZWN1dGlvbklkLFxuICAgIC8vIFVTRVItQVVUSE9SRUQgcGlwZWxpbmUtc3RydWN0dXJlIG5hbWVzIOKAlCBzYW1lIHVudHJ1c3RlZCBvcmlnaW4gYXNcbiAgICAvLyBlcnJvck1lc3NhZ2UsIHNvIHNjcnViYmVkIChhIHN0YWdlIG5hbWVkIHdpdGggYW4gQVJOIG11c3Qgbm90IHBlcnNpc3QpLlxuICAgIHN0YWdlTmFtZTogc2NydWJPcHRpb25hbChldmVudC5zdGFnZU5hbWUpLFxuICAgIGFjdGlvbk5hbWU6IHNjcnViT3B0aW9uYWwoZXZlbnQuYWN0aW9uTmFtZSksXG4gICAgLy8gSEFSRCBDT05TVFJBSU5UOiBhbiBBV1MgYWNjb3VudCBpZCBtdXN0IE5FVkVSIGJlIHBlcnNpc3RlZC4gRmFpbHVyZSBkZXRhaWxcbiAgICAvLyBhbmQgbWVzc2FnZXMgcm91dGluZWx5IGNhcnJ5IEFSTnMgYW5kIGJhcmUgMTItZGlnaXQgYWNjb3VudCBpZHMuXG4gICAgZXJyb3JNZXNzYWdlOiBzY3J1Yk9wdGlvbmFsKGV2ZW50LmVycm9yTWVzc2FnZSksXG4gICAgc3RhcnRlZEF0OiBldmVudC5zdGFydGVkQXQgPyBuZXcgRGF0ZShldmVudC5zdGFydGVkQXQpIDogdW5kZWZpbmVkLFxuICAgIGNvbXBsZXRlZEF0OiBldmVudC5jb21wbGV0ZWRBdCA/IG5ldyBEYXRlKGV2ZW50LmNvbXBsZXRlZEF0KSA6IHVuZGVmaW5lZCxcbiAgICBkdXJhdGlvbk1zOiBldmVudC5kdXJhdGlvbk1zLFxuICAgIC8vIERlcGxveSBhdHRyaWJ1dGlvbiDigJQgc2NydWJiZWQgbGlrZSB0aGUgb3RoZXIgZnJlZS1mb3JtIHN0cmluZ3MuXG4gICAgY29tbWl0U2hhOiBzY3J1Yk9wdGlvbmFsKGV2ZW50LmNvbW1pdFNoYSksXG4gICAgY29tbWl0UmVmOiBzY3J1Yk9wdGlvbmFsKGV2ZW50LmNvbW1pdFJlZiksXG4gICAgZW52aXJvbm1lbnQ6IHNjcnViT3B0aW9uYWwoZXZlbnQuZW52aXJvbm1lbnQpLFxuICAgIC8vIE1lYXN1cmVkIGxlYWQgdGltZTogdGhlIG9sZGVzdCB1bnNoaXBwZWQgY29tbWl0J3MgdGltZSArIHRoZSBjb3VudC4gQW5cbiAgICAvLyBTQ00tZGVyaXZlZCBpbnN0YW50IGFuZCBhIHBsYWluIGludGVnZXIg4oCUIG5vdGhpbmcgdG8gc2NydWIuXG4gICAgY29tbWl0VGltZXN0YW1wOiBldmVudC5jb21taXRUaW1lc3RhbXAgPyBuZXcgRGF0ZShldmVudC5jb21taXRUaW1lc3RhbXApIDogdW5kZWZpbmVkLFxuICAgIGNvbW1pdENvdW50OiBldmVudC5jb21taXRDb3VudCxcbiAgICAvLyBOVUxMIGZvciBub24tcGx1Z2luIGFjdGlvbnMgYW5kIGZvciBwaXBlbGluZXMgZGVwbG95ZWQgd2l0aG91dCBhIG1hbmlmZXN0LlxuICAgIHBsdWdpblB1Ymxpc2hlcjogcGx1Z2luPy5wbHVnaW5QdWJsaXNoZXIgPz8gbnVsbCxcbiAgICBwbHVnaW5QdWJsaXNoZXJJZDogcGx1Z2luPy5wbHVnaW5QdWJsaXNoZXJJZCA/PyBudWxsLFxuICAgIHBsdWdpbk5hbWU6IHBsdWdpbj8ucGx1Z2luTmFtZSA/PyBudWxsLFxuICAgIHBsdWdpblZlcnNpb246IHBsdWdpbj8ucGx1Z2luVmVyc2lvbiA/PyBudWxsLFxuICAgIC8vIFdIQVQgS0lORCBvZiB0aGluZyBicm9rZSwgY2xhc3NpZmllZCBoZXJlIHJhdGhlciB0aGFuIGF0IHJlYWQgdGltZTogdGhlXG4gICAgLy8gZXJyb3IgdGV4dCBpcyBzY3J1YmJlZCBhYm92ZSBhbmQgZXZlbnR1YWxseSBzd2VwdCBieSByZXRlbnRpb24sIHNvIGFcbiAgICAvLyBjYXRlZ29yeSBkZXJpdmVkIGxhdGVyIHdvdWxkIGhhdmUgbm90aGluZyBsZWZ0IHRvIHJlYWQuIE5VTEwgZm9yIGFueXRoaW5nXG4gICAgLy8gdGhhdCBpcyBub3QgYSBmYWlsdXJlLCBzbyBpdHMgcHJlc2VuY2UgYWx3YXlzIG1lYW5zIFwidGhpcyBicm9rZVwiLlxuICAgIGZhaWx1cmVDYXRlZ29yeTogY2xhc3NpZnlGYWlsdXJlKHtcbiAgICAgIHN0YXR1czogZXZlbnQuc3RhdHVzLFxuICAgICAgZXJyb3JNZXNzYWdlOiBzY3J1Yk9wdGlvbmFsKGV2ZW50LmVycm9yTWVzc2FnZSksXG4gICAgICBhY3Rpb25OYW1lOiBzY3J1Yk9wdGlvbmFsKGV2ZW50LmFjdGlvbk5hbWUpLFxuICAgICAgc3RhZ2VOYW1lOiBzY3J1Yk9wdGlvbmFsKGV2ZW50LnN0YWdlTmFtZSksXG4gICAgfSksXG4gICAgZGV0YWlsOiBldmVudC5kZXRhaWwgIT09IHVuZGVmaW5lZCA/IHNjcnViQXdzSWRlbnRpZmllcnMoZXZlbnQuZGV0YWlsKSA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuLyoqXG4gKiBGYW4gdGVybWluYWwgU1RBR0Ugb3V0Y29tZXMgaW50byB0aGUgcm91dGUncyBtZXRyaWMgaG9vayAocGlwZWxpbmUtZGF0YSBjYW4ndFxuICogaW1wb3J0IGFwaS1zZXJ2ZXIncyByZWdpc3RyeSkgYWZ0ZXIgdGhlIGluc2VydCBjb21taXRzLiBEcml2ZW4gb2ZmIHRoZVxuICogSU5TRVJURUQgcm93cywgc28gYSByZS1kZWxpdmVyZWQgZXZlbnQgdGhlIGRlZHVwIGluZGV4IHN3YWxsb3dlZCBpcyBuZXZlclxuICogY291bnRlZCB0d2ljZS4gQSBub24tbnVsbCBlbnZpcm9ubWVudCBtYXJrcyBhIGRlcGxveS5cbiAqL1xuZnVuY3Rpb24gZW1pdFN0YWdlTWV0cmljcyhcbiAgcm93czogUmVhZG9ubHlBcnJheTx7IG9yZ0lkOiBzdHJpbmc7IHBpcGVsaW5lSWQ6IHN0cmluZyB8IG51bGw7IGV2ZW50VHlwZTogc3RyaW5nOyBzdGF0dXM6IHN0cmluZzsgc3RhZ2VOYW1lOiBzdHJpbmcgfCBudWxsOyBlbnZpcm9ubWVudDogc3RyaW5nIHwgbnVsbCB9PixcbiAgb25NZXRyaWM6IChtOiBJbmdlc3RNZXRyaWMpID0+IHZvaWQsXG4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCByIG9mIHJvd3MpIHtcbiAgICBpZiAoci5ldmVudFR5cGUgIT09ICdTVEFHRScgfHwgKHIuc3RhdHVzICE9PSAnU1VDQ0VFREVEJyAmJiByLnN0YXR1cyAhPT0gJ0ZBSUxFRCcpIHx8ICFyLnBpcGVsaW5lSWQpIGNvbnRpbnVlO1xuICAgIG9uTWV0cmljKHtcbiAgICAgIHBpcGVsaW5lSWQ6IHIucGlwZWxpbmVJZCxcbiAgICAgIG9yZ0lkOiByLm9yZ0lkLFxuICAgICAgc3RhZ2U6IHIuc3RhZ2VOYW1lID8/ICcnLFxuICAgICAgZW52aXJvbm1lbnQ6IHIuZW52aXJvbm1lbnQgPz8gbnVsbCxcbiAgICAgIHJlc3VsdDogci5zdGF0dXMgPT09ICdTVUNDRUVERUQnID8gJ3N1Y2NlZWRlZCcgOiAnZmFpbGVkJyxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFJlc29sdmUgaW5jb21pbmcgZXZlbnRzIGFnYWluc3QgdGhlIHBpcGVsaW5lIHJlZ2lzdHJ5LCBiYXRjaC1pbnNlcnQgdGhlXG4gKiBtYXRjaGVkIG9uZXMsIGFuZCBpbnZhbGlkYXRlIHJlcG9ydGluZyBjYWNoZXMgZm9yIGFmZmVjdGVkIG9yZ3MuXG4gKiBFdmVudHMgZm9yIHVucmVnaXN0ZXJlZCBwaXBlbGluZSBpZHMgYXJlIGRyb3BwZWQgKGFuZCBsb2dnZWQgYXQgV0FSTlxuICogd2l0aCBzYW1wbGUgaWRzIHNvIGFuIG9wZXJhdG9yIGNhbiBzZWUgd2hlbiBFdmVudEJyaWRnZSBpcyBkZWxpdmVyaW5nXG4gKiBldmVudHMgZm9yIHBpcGVsaW5lcyB0aGF0IGhhdmVuJ3QgY2FsbGVkIFBPU1QgL3BpcGVsaW5lcy9yZWdpc3RyeSB5ZXQpLlxuICpcbiAqIFJldHVybnMgY291bnRzICsgYSBzYW1wbGUgb2YgdW5yZWdpc3RlcmVkIHBpcGVsaW5lIGlkcyBmb3Igb2JzZXJ2YWJpbGl0eS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluZ2VzdEV2ZW50cyhcbiAgZXZlbnRzOiBJbmdlc3RFdmVudFtdLFxuICBvbk1ldHJpYz86IChtOiBJbmdlc3RNZXRyaWMpID0+IHZvaWQsXG4gIGNhbGxlcj86IEluZ2VzdENhbGxlcixcbik6IFByb21pc2U8SW5nZXN0UmVzdWx0PiB7XG4gIC8vIFRFTkFOQ1kuIEFuIGV2ZW50J3Mgb3JnIGNvbWVzIGZyb20gdGhlIHBpcGVsaW5lIFJFR0lTVFJZLCBub3QgdGhlIHRva2VuLCBzb1xuICAvLyB0aGUgc2NvcGUgY2hlY2sgYWxvbmUgbGV0IGFueSBgcmVwb3J0aW5nOmluZ2VzdGAgaG9sZGVyIHBvc3QgZXZlbnRzIGZvclxuICAvLyBhbm90aGVyIG9yZydzIHBpcGVsaW5lIGlkIGFuZCBoYXZlIHRoZW0gYXR0cmlidXRlZCB0aGVyZS4gYGNhbGxlcmAgY2Fycmllc1xuICAvLyB0aGUgb3JnIGlkcyB0aGlzIHRva2VuIG1heSB3cml0ZSBmb3I7IGFueXRoaW5nIGVsc2UgaXMgZHJvcHBlZCBiZWxvdy5cbiAgLy9cbiAgLy8gYGNhbGxlcmAgaXMgb3B0aW9uYWwgb25seSBzbyBpbi1wcm9jZXNzIGNhbGxlcnMgdGhhdCBhbHJlYWR5IHJ1blxuICAvLyBjcm9zcy10ZW5hbnQgKHRlc3RzLCBiYWNrZmlsbHMpIGtlZXAgd29ya2luZyDigJQgYW4gQUJTRU5UIGNhbGxlciBtZWFucyBcIm5vXG4gIC8vIHJlc3RyaWN0aW9uXCIsIGFuZCB0aGUgcm91dGUgYWx3YXlzIHN1cHBsaWVzIG9uZS4gQSBjYWxsZXIgd2l0aCBhbiBFTVBUWVxuICAvLyBhbGxvdy1saXN0IGFuZCBubyBjcm9zc1RlbmFudCBmbGFnIHRoZXJlZm9yZSBkcm9wcyBldmVyeXRoaW5nLCB3aGljaCBpcyB0aGVcbiAgLy8gcmlnaHQgYW5zd2VyIHdoZW4gdGhlIHJvdXRlIGNvdWxkIG5vdCBlc3RhYmxpc2ggd2hvIGlzIHdyaXRpbmcuXG4gIGNvbnN0IHVucmVzdHJpY3RlZCA9IGNhbGxlciA9PT0gdW5kZWZpbmVkIHx8IGNhbGxlci5jcm9zc1RlbmFudCA9PT0gdHJ1ZTtcbiAgY29uc3QgYWxsb3dlZCA9IG5ldyBTZXQoY2FsbGVyPy5hbGxvd2VkT3JnSWRzID8/IFtdKTtcbiAgLy8gTXVsdGktb3JnIGJhdGNoIGluc2VydDogdGhlIGNhbGxlciByZXNvbHZlcyB0byBtdWx0aXBsZSBvcmdzIHZpYSB0aGVcbiAgLy8gcGlwZWxpbmUtcmVnaXN0cnkgbG9va3VwIGJlbG93LCBzbyB0aGUgcm91dGUgbGF5ZXIgTVVTVCBlc3RhYmxpc2ggYVxuICAvLyBgcnVuV2l0aFRlbmFudENvbnRleHQoeyBpc1N1cGVyQWRtaW46IHRydWUgfSwgLi4uKWAgc2NvcGUgYmVmb3JlIGNhbGxpbmdcbiAgLy8gdGhpcyBmdW5jdGlvbi4gVW5kZXIgRk9SQ0UnZCBSTFMsIGEgc2luZ2xlIHR4IHdpdGggYGFwcC5vcmdfaWQgPSA8b25lXG4gIC8vIG9yZz5gIGNvdWxkIG9ubHkgd3JpdGUgZXZlbnRzIGZvciB0aGF0IG9yZzsgYnlwYXNzIHZpYSBzeXNhZG1pbiBpc1xuICAvLyB0aGUgcmlnaHQgZ2F0ZSBmb3IgdGhpcyBzZXJ2ZXItaW50ZXJuYWwgY3Jvc3MtdGVuYW50IGVuZHBvaW50LiBTZWVcbiAgLy8gYXBpL3JlcG9ydGluZy9zcmMvcm91dGVzL2V2ZW50LWluZ2VzdC50cyBmb3IgdGhlIHdyYXBwZXIuXG4gIC8vIENhY2hlcyBhcmUgaW52YWxpZGF0ZWQgQUZURVIgdGhlIHR4IHJlc29sdmVzOiBkb2luZyBpdCBpbnNpZGUgaGVsZCB0aGUgcGdcbiAgLy8gbG9ja3Mgb3BlbiBhY3Jvc3MgdW5yZWxhdGVkIGNhY2hlIHJvdW5kLXRyaXBzLiBUaGUgVFRMIGlzIDItNSBtaW4sIHNvIGFcbiAgLy8gZmlyZS1hbmQtZm9yZ2V0IHBvc3QtY29tbWl0IGludmFsaWRhdGlvbiBpcyBhbiBhY2NlcHRhYmxlIHRyYWRlLlxuICBjb25zdCB7IGluc2VydGVkLCBza2lwcGVkLCB1bnJlZ2lzdGVyZWRQaXBlbGluZUlkcywgYWZmZWN0ZWRPcmdzLCBkcm9wcGVkRm9yZWlnbk9yZywgZHJvcHBlZEludmFsaWRUaW1lLCBpbnNlcnRlZFJvd3MgfSA9IGF3YWl0IHdpdGhUZW5hbnRUeChhc3luYyAodHgpID0+IHtcbiAgICAvLyBCYXRjaC1yZXNvbHZlIGFsbCB1bmlxdWUgcGlwZWxpbmUgaWRzIGluIG9uZSBxdWVyeVxuICAgIGNvbnN0IHVuaXF1ZUlkcyA9IFsuLi5uZXcgU2V0KGV2ZW50cy5tYXAoZSA9PiBlLnBpcGVsaW5lSWQpKV07XG4gICAgY29uc3QgcmVnaXN0cnlSb3dzID0gYXdhaXQgdHhcbiAgICAgIC5zZWxlY3Qoe1xuICAgICAgICBwaXBlbGluZUlkOiBzY2hlbWEucGlwZWxpbmVSZWdpc3RyeS5waXBlbGluZUlkLFxuICAgICAgICBvcmdJZDogc2NoZW1hLnBpcGVsaW5lUmVnaXN0cnkub3JnSWQsXG4gICAgICB9KVxuICAgICAgLmZyb20oc2NoZW1hLnBpcGVsaW5lUmVnaXN0cnkpXG4gICAgICAud2hlcmUoaW5BcnJheShzY2hlbWEucGlwZWxpbmVSZWdpc3RyeS5waXBlbGluZUlkLCB1bmlxdWVJZHMpKTtcblxuICAgIGNvbnN0IGlkTWFwID0gbmV3IE1hcChyZWdpc3RyeVJvd3MubWFwKHIgPT4gW3IucGlwZWxpbmVJZCwgcl0pKTtcbiAgICBjb25zdCBzdGVwUGx1Z2lucyA9IGF3YWl0IGxvYWRTdGVwUGx1Z2lucyh0eCwgZXZlbnRzLmZpbHRlcigoZSkgPT4gaXNBdHRyaWJ1dGFibGUoZSkgJiYgaWRNYXAuaGFzKGUucGlwZWxpbmVJZCkpKTtcblxuICAgIC8vIEJ1aWxkIGluc2VydCBiYXRjaCAoc2tpcCBldmVudHMgd2hvc2UgcGlwZWxpbmUgaXNuJ3QgcmVnaXN0ZXJlZClcbiAgICBjb25zdCByb3dzOiBQaXBlbGluZUV2ZW50SW5zZXJ0W10gPSBbXTtcbiAgICBsZXQgc2tpcHBlZExvY2FsID0gMDtcbiAgICBsZXQgZm9yZWlnbkxvY2FsID0gMDtcbiAgICBsZXQgaW52YWxpZFRpbWVMb2NhbCA9IDA7XG4gICAgY29uc3QgaW52YWxpZFRpbWVSZWFzb25zID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgZm9yZWlnbk9yZ0lkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IHVucmVnaXN0ZXJlZExvY2FsOiBzdHJpbmdbXSA9IFtdO1xuICAgIC8vIE9uZSBgbm93YCBmb3IgdGhlIHdob2xlIGJhdGNoOiBwZXItZXZlbnQgY2xvY2tzIHdvdWxkIGxldCBhbiBldmVudCBwYXNzIG9yXG4gICAgLy8gZmFpbCBkZXBlbmRpbmcgb24gd2hlcmUgaXQgc2F0IGluIHRoZSBsb29wLlxuICAgIGNvbnN0IG5vd01zID0gRGF0ZS5ub3coKTtcblxuICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgICBjb25zdCByZWdpc3RyeSA9IGlkTWFwLmdldChldmVudC5waXBlbGluZUlkKTtcbiAgICAgIGlmICghcmVnaXN0cnkpIHtcbiAgICAgICAgc2tpcHBlZExvY2FsKys7XG4gICAgICAgIHVucmVnaXN0ZXJlZExvY2FsLnB1c2goZXZlbnQucGlwZWxpbmVJZCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gVGhlIHBpcGVsaW5lIHJlc29sdmVzIHRvIGFuIG9yZyB0aGlzIGNhbGxlciBtYXkgbm90IHdyaXRlIGZvci4gQ291bnRlZFxuICAgICAgLy8gc2VwYXJhdGVseSBmcm9tIGBza2lwcGVkYCAoYW4gdW5yZWdpc3RlcmVkIGlkIGlzIGEgcHJvZHVjZXIgcnVubmluZ1xuICAgICAgLy8gYWhlYWQgb2YgcmVnaXN0cmF0aW9uOyB0aGlzIGlzIGEgdGVuYW5jeSByZWZ1c2FsKSBhbmQgbmV2ZXIgaW5zZXJ0ZWQuXG4gICAgICBpZiAoIXVucmVzdHJpY3RlZCAmJiAhYWxsb3dlZC5oYXMocmVnaXN0cnkub3JnSWQpKSB7XG4gICAgICAgIGZvcmVpZ25Mb2NhbCsrO1xuICAgICAgICBmb3JlaWduT3JnSWRzLmFkZChyZWdpc3RyeS5vcmdJZCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gSW1wb3NzaWJsZSB0aW1lc3RhbXBzIGFyZSByZWZ1c2VkIGF0IHRoZSBib3VuZGFyeSwgc28gbm8gZG93bnN0cmVhbVxuICAgICAgLy8gbWV0cmljIGhhcyB0byBjbGFtcCBhIG5lZ2F0aXZlIGdhcCBhbmQgY2FsbCBpdCB6ZXJvLlxuICAgICAgY29uc3QgYmFkVGltZSA9IGludmFsaWRFdmVudFRpbWVzKGV2ZW50LCBub3dNcyk7XG4gICAgICBpZiAoYmFkVGltZSkge1xuICAgICAgICBpbnZhbGlkVGltZUxvY2FsKys7XG4gICAgICAgIGludmFsaWRUaW1lUmVhc29ucy5hZGQoYmFkVGltZSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhZ2VOYW1lID0gc2NydWJPcHRpb25hbChldmVudC5zdGFnZU5hbWUpO1xuICAgICAgY29uc3QgYWN0aW9uTmFtZSA9IHNjcnViT3B0aW9uYWwoZXZlbnQuYWN0aW9uTmFtZSk7XG4gICAgICBjb25zdCBzdGVwID0gaXNBdHRyaWJ1dGFibGUoZXZlbnQpICYmIHN0YWdlTmFtZSAmJiBhY3Rpb25OYW1lXG4gICAgICAgID8gc3RlcFBsdWdpbnMuZ2V0KHN0ZXBLZXkocmVnaXN0cnkucGlwZWxpbmVJZCwgc3RhZ2VOYW1lLCBhY3Rpb25OYW1lKSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAvLyBTYW1lLW9yZyBndWFyZDogYSBtYW5pZmVzdCByb3cgaXMgb25seSBldmVyIHdyaXR0ZW4gYnkgdGhlIG9yZyB0aGF0XG4gICAgICAvLyBvd25zIHRoZSBwaXBlbGluZSwgYnV0IHRoZSBpbmdlc3QgcnVucyBjcm9zcy10ZW5hbnQsIHNvIGRvbid0IGxlYW4gb24gaXQuXG4gICAgICByb3dzLnB1c2godG9FdmVudFJvdyhldmVudCwgcmVnaXN0cnksIHN0ZXAgJiYgc3RlcC5vcmdJZCA9PT0gcmVnaXN0cnkub3JnSWQgPyBzdGVwIDogdW5kZWZpbmVkKSk7XG4gICAgfVxuXG4gICAgLy8gU1FTIGlzIGF0LWxlYXN0LW9uY2UsIHNvIEV2ZW50QnJpZGdlIGNhbiBkZWxpdmVyIHRoZSBzYW1lIHN0YXRlLWNoYW5nZVxuICAgIC8vIHR3aWNlLiBgb25Db25mbGljdERvTm90aGluZ2AgKyB0aGUgcGFydGlhbCB1bmlxdWUgaW5kZXggb25cbiAgICAvLyAocGlwZWxpbmVfaWQsIGV4ZWN1dGlvbl9pZCwgZXZlbnRfdHlwZSwgc3RhdHVzLCBzdGFnZV9uYW1lLCBhY3Rpb25fbmFtZSlcbiAgICAvLyBtYWtlcyByZS1kZWxpdmVyeSBpZGVtcG90ZW50LiBgcmV0dXJuaW5nYCBnaXZlcyB0aGUgUkVBTCBpbnNlcnRlZCBzZXQgc29cbiAgICAvLyBjb3VudHMsIG1ldHJpY3MgYW5kIGNhY2hlIGludmFsaWRhdGlvbiBhbGwgaWdub3JlIGR1cGxpY2F0ZXMuXG4gICAgY29uc3QgbGFuZGVkID0gcm93cy5sZW5ndGggPiAwXG4gICAgICA/IGF3YWl0IHR4Lmluc2VydChzY2hlbWEucGlwZWxpbmVFdmVudCkudmFsdWVzKHJvd3MpXG4gICAgICAgIC5vbkNvbmZsaWN0RG9Ob3RoaW5nKClcbiAgICAgICAgLnJldHVybmluZyh7XG4gICAgICAgICAgb3JnSWQ6IHNjaGVtYS5waXBlbGluZUV2ZW50Lm9yZ0lkLFxuICAgICAgICAgIHBpcGVsaW5lSWQ6IHNjaGVtYS5waXBlbGluZUV2ZW50LnBpcGVsaW5lSWQsXG4gICAgICAgICAgZXZlbnRUeXBlOiBzY2hlbWEucGlwZWxpbmVFdmVudC5ldmVudFR5cGUsXG4gICAgICAgICAgc3RhdHVzOiBzY2hlbWEucGlwZWxpbmVFdmVudC5zdGF0dXMsXG4gICAgICAgICAgc3RhZ2VOYW1lOiBzY2hlbWEucGlwZWxpbmVFdmVudC5zdGFnZU5hbWUsXG4gICAgICAgICAgZW52aXJvbm1lbnQ6IHNjaGVtYS5waXBlbGluZUV2ZW50LmVudmlyb25tZW50LFxuICAgICAgICAgIC8vIEZvciB0aGUgcGVyLWRlcGxveSByb2xsdXAgYmVsb3c6IGV2ZXJ5dGhpbmcgYGRvcmFfZGVwbG95bWVudHNgIG5lZWRzLFxuICAgICAgICAgIC8vIHRha2VuIGZyb20gdGhlIHJvd3MgdGhhdCBBQ1RVQUxMWSBsYW5kZWQgc28gYSByZS1kZWxpdmVyeSBjYW5ub3RcbiAgICAgICAgICAvLyBwcm9kdWNlIGEgc2Vjb25kIGRlcGxveS5cbiAgICAgICAgICBleGVjdXRpb25JZDogc2NoZW1hLnBpcGVsaW5lRXZlbnQuZXhlY3V0aW9uSWQsXG4gICAgICAgICAgY29tbWl0U2hhOiBzY2hlbWEucGlwZWxpbmVFdmVudC5jb21taXRTaGEsXG4gICAgICAgICAgY29tbWl0VGltZXN0YW1wOiBzY2hlbWEucGlwZWxpbmVFdmVudC5jb21taXRUaW1lc3RhbXAsXG4gICAgICAgICAgY29tbWl0Q291bnQ6IHNjaGVtYS5waXBlbGluZUV2ZW50LmNvbW1pdENvdW50LFxuICAgICAgICAgIGNvbXBsZXRlZEF0OiBzY2hlbWEucGlwZWxpbmVFdmVudC5jb21wbGV0ZWRBdCxcbiAgICAgICAgICBzdGFydGVkQXQ6IHNjaGVtYS5waXBlbGluZUV2ZW50LnN0YXJ0ZWRBdCxcbiAgICAgICAgICBjcmVhdGVkQXQ6IHNjaGVtYS5waXBlbGluZUV2ZW50LmNyZWF0ZWRBdCxcbiAgICAgICAgICBkZXRhaWw6IHNjaGVtYS5waXBlbGluZUV2ZW50LmRldGFpbCxcbiAgICAgICAgfSlcbiAgICAgIDogW107XG5cbiAgICAvLyBMb2cgaW5zaWRlIHRoZSB0eCBzY29wZSB3aGlsZSB0aGUgb3JnIHNldCBpcyBpbiBoYW5kLiBXQVJOLCBub3QgZXJyb3I6XG4gICAgLy8gYSBtaXNyb3V0ZWQgcHJvZHVjZXIgaXMgdGhlIGNvbW1vbiBjYXVzZSwgYnV0IHRoZSBzYW1lIGxpbmUgaXMgdGhlIG9ubHlcbiAgICAvLyBzaWduYWwgb2YgYW4gaW5qZWN0aW9uIGF0dGVtcHQsIHNvIGl0IG5hbWVzIHRoZSBvcmdzIGl0IHJlZnVzZWQuXG4gICAgaWYgKGZvcmVpZ25Mb2NhbCA+IDApIHtcbiAgICAgIGxvZ2dlci53YXJuKCdEcm9wcGVkIGluZ2VzdCBldmVudHMgZm9yIG9yZ3MgdGhlIGNhbGxlciBtYXkgbm90IHdyaXRlIGZvcicsIHtcbiAgICAgICAgZHJvcHBlZDogZm9yZWlnbkxvY2FsLFxuICAgICAgICBmb3JlaWduT3JnSWRzOiBbLi4uZm9yZWlnbk9yZ0lkc10sXG4gICAgICAgIGFsbG93ZWRPcmdJZHM6IFsuLi5hbGxvd2VkXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpbnZhbGlkVGltZUxvY2FsID4gMCkge1xuICAgICAgbG9nZ2VyLndhcm4oJ0Ryb3BwZWQgaW5nZXN0IGV2ZW50cyB3aXRoIGltcG9zc2libGUgdGltZXN0YW1wcycsIHtcbiAgICAgICAgZHJvcHBlZDogaW52YWxpZFRpbWVMb2NhbCxcbiAgICAgICAgcmVhc29uczogWy4uLmludmFsaWRUaW1lUmVhc29uc10sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW5zZXJ0ZWQ6IGxhbmRlZC5sZW5ndGgsXG4gICAgICBza2lwcGVkOiBza2lwcGVkTG9jYWwsXG4gICAgICB1bnJlZ2lzdGVyZWRQaXBlbGluZUlkczogdW5yZWdpc3RlcmVkTG9jYWwsXG4gICAgICBhZmZlY3RlZE9yZ3M6IFsuLi5uZXcgU2V0KGxhbmRlZC5tYXAociA9PiByLm9yZ0lkKSldLFxuICAgICAgZHJvcHBlZEZvcmVpZ25Pcmc6IGZvcmVpZ25Mb2NhbCxcbiAgICAgIGRyb3BwZWRJbnZhbGlkVGltZTogaW52YWxpZFRpbWVMb2NhbCxcbiAgICAgIGluc2VydGVkUm93czogbGFuZGVkLFxuICAgIH07XG4gIH0pO1xuXG4gIGlmIChvbk1ldHJpYykgZW1pdFN0YWdlTWV0cmljcyhpbnNlcnRlZFJvd3MsIG9uTWV0cmljKTtcblxuICAvLyBQZXItZGVwbG95IHJvbGx1cC4gQUZURVIgdGhlIGV2ZW50cyBjb21taXQgYW5kIG91dHNpZGUgdGhlaXIgdHJhbnNhY3Rpb246IHRoZVxuICAvLyBldmVudHMgYXJlIHRoZSBkdXJhYmxlIHJlY29yZCBhbmQgYGRvcmFfZGVwbG95bWVudHNgIGlzIGRlcml2ZWQgZnJvbSB0aGVtLCBzb1xuICAvLyBhIHJvbGx1cCBmYWlsdXJlIG11c3Qgbm90IHJvbGwgYmFjayBhbiBpbmdlc3QgdGhhdCBzdWNjZWVkZWQuIFJlYnVpbGRhYmxlXG4gIC8vIGVpdGhlciB3YXkuIGB1cHNlcnREZXBsb3ltZW50c2AgbmV2ZXIgdGhyb3dzIGZvciB0aGF0IHJlYXNvbi5cbiAgYXdhaXQgdXBzZXJ0RGVwbG95bWVudHMoaW5zZXJ0ZWRSb3dzKTtcblxuICAvLyBTdXJmYWNlIHRoZSBzaWxlbnQgc2tpcDogYW4gdW5yZWdpc3RlcmVkIHBpcGVsaW5lIGlkIHVzdWFsbHkgbWVhbnMgdGhlXG4gIC8vIHBpcGVsaW5lIGhhc24ndCBjYWxsZWQgUE9TVCAvcGlwZWxpbmVzL3JlZ2lzdHJ5IHlldCAob3IgaXRzXG4gIC8vIHBiLnBpcGVsaW5lLWlkIHRhZyBpcyBtaXNzaW5nL3VucmVhZGFibGUgYnkgdGhlIExhbWJkYSkuIExvZ2dpbmcgaXRcbiAgLy8gbWFrZXMgYSBicm9rZW4gam9pbiB2aXNpYmxlIGluc3RlYWQgb2YgbG9va2luZyBsaWtlIFwibm8gYWN0aXZpdHlcIi5cbiAgaWYgKHVucmVnaXN0ZXJlZFBpcGVsaW5lSWRzLmxlbmd0aCA+IDApIHtcbiAgICBsb2dnZXIud2FybignUGlwZWxpbmUgZXZlbnRzIHNraXBwZWQ6IHBpcGVsaW5lIGlkIG5vdCBmb3VuZCBpbiByZWdpc3RyeScsIHtcbiAgICAgIGNvdW50OiB1bnJlZ2lzdGVyZWRQaXBlbGluZUlkcy5sZW5ndGgsXG4gICAgICBzYW1wbGU6IHVucmVnaXN0ZXJlZFBpcGVsaW5lSWRzLnNsaWNlKDAsIDMpLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUG9zdC1jb21taXQgY2FjaGUgaW52YWxpZGF0aW9uLiBGaXJlLWFuZC1mb3JnZXQgd2l0aCBsb2dnaW5nIOKAlCBUVEwgaXNcbiAgLy8gc2hvcnQgZW5vdWdoIHRoYXQgYSBtaXNzZWQgaW52YWxpZGF0aW9uIHNlbGYtaGVhbHMuXG4gIGlmIChhZmZlY3RlZE9yZ3MubGVuZ3RoID4gMCkge1xuICAgIHZvaWQgUHJvbWlzZS5hbGwoYWZmZWN0ZWRPcmdzLm1hcCgob3JnKSA9PlxuICAgICAgaW52YWxpZGF0ZU9yZ1JlcG9ydHMob3JnKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdSZXBvcnRpbmcgY2FjaGUgaW52YWxpZGF0aW9uIGZhaWxlZCcsIHsgb3JnSWQ6IG9yZywgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH0pO1xuICAgICAgfSksXG4gICAgKSk7XG4gIH1cblxuICByZXR1cm4geyBpbnNlcnRlZCwgc2tpcHBlZCwgdW5yZWdpc3RlcmVkUGlwZWxpbmVJZHMsIGFmZmVjdGVkT3JncywgZHJvcHBlZEZvcmVpZ25PcmcsIGRyb3BwZWRJbnZhbGlkVGltZSB9O1xufVxuIl19
|
|
392
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5nZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwaS9yZXBvcnRpbmcvaW5nZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0SSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNuRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWpELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHekQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFjaEQscUVBQXFFO0FBQ3JFLFNBQVMsY0FBYyxDQUFDLENBQWM7SUFDcEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxTQUFTLEtBQUssT0FBTyxDQUFDO1dBQ3ZELENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxjQUFjLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxXQUFXLENBQUM7V0FDbkUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7QUFDdkMsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLFVBQWtCLEVBQUUsU0FBaUIs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RSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0YsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU87UUFDTCxRQUFRO1FBQ1IsT0FBTztRQUNQLHVCQUF1QjtRQUN2QixZQUFZO1FBQ1osaUJBQWlCO1FBQ2pCLGtCQUFrQjtRQUNsQixrQkFBa0I7UUFDbEIsb0JBQW9CLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM3RyxtQkFBbUIsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBZ0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQzVHLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogRXZlbnQgaW5nZXN0OiB0aGUgV1JJVEUgaGFsZiBvZiByZXBvcnRpbmcuIFJlc29sdmVzIGluY29taW5nIHBpcGVsaW5lIGV2ZW50c1xuICogYWdhaW5zdCB0aGUgcGlwZWxpbmUgcmVnaXN0cnksIHNjcnVicyBldmVyeSBmcmVlLWZvcm0gc3RyaW5nLCBiYXRjaC1pbnNlcnRzXG4gKiB0aGUgbWF0Y2hlZCByb3dzIGlkZW1wb3RlbnRseSwgYW5kIGludmFsaWRhdGVzIHRoZSBhZmZlY3RlZCBvcmdzJyByZXBvcnRcbiAqIGNhY2hlcy4gU2VwYXJhdGUgZnJvbSB0aGUgcmVwb3J0IHF1ZXJpZXMgYmVjYXVzZSB0aGlzIGlzIHJlcG9ydGluZydzIG9ubHlcbiAqIGR1cmFibGUgcGVyc2lzdGVuY2UgYm91bmRhcnkg4oCUIGV2ZXJ5dGhpbmcgZWxzZSBpbiB0aGUgc2VydmljZSBvbmx5IHJlYWRzLlxuICovXG5cbmltcG9ydCB7IGNvbXB1dGVDcmVkaXRzRm9yLCBjcmVhdGVMb2dnZXIsIGVycm9yTWVzc2FnZSwgbm9ybWFsaXplQ29tcHV0ZVR5cGUsIHNjcnViQXdzSWRlbnRpZmllcnMgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBpbkFycmF5IH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgaW52YWxpZGF0ZU9yZ1JlcG9ydHMgfSBmcm9tICcuL2NhY2hlcy5qcyc7XG5pbXBvcnQgeyB1cHNlcnREZXBsb3ltZW50cyB9IGZyb20gJy4vZGVwbG95LXJvbGx1cC5qcyc7XG5pbXBvcnQgeyBjbGFzc2lmeUZhaWx1cmUgfSBmcm9tICcuL2ZhaWx1cmUtY2xhc3NpZmllci5qcyc7XG5pbXBvcnQgeyBzY3J1Yk9wdGlvbmFsIH0gZnJvbSAnLi9zcWwtaGVscGVycy5qcyc7XG5pbXBvcnQgdHlwZSB7IEluZ2VzdENhbGxlciwgSW5nZXN0RXZlbnQsIEluZ2VzdE1ldHJpYywgSW5nZXN0UmVzdWx0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBzY2hlbWEgfSBmcm9tICcuLi8uLi9kYXRhYmFzZS9kcml6emxlLXNjaGVtYS5qcyc7XG5pbXBvcnQgeyB3aXRoVGVuYW50VHggfSBmcm9tICcuLi8uLi9kYXRhYmFzZS90ZW5hbmN5LmpzJztcbmltcG9ydCB0eXBlIHsgQ3J1ZFR4IH0gZnJvbSAnLi4vY3J1ZC1zZXJ2aWNlLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdyZXBvcnRpbmctaW5nZXN0Jyk7XG5cbnR5cGUgUGlwZWxpbmVFdmVudEluc2VydCA9IHR5cGVvZiBzY2hlbWEucGlwZWxpbmVFdmVudC4kaW5mZXJJbnNlcnQ7XG5cblxuLyoqIFRoZSBwbHVnaW4gYSBwaXBlbGluZSBzdGVwIHJ1bnMsIGZyb20gdGhlIHN0ZXAgbWFuaWZlc3QgaXRzIGxhc3QgZGVwbG95IHJlZ2lzdGVyZWQuICovXG5pbnRlcmZhY2UgU3RlcFBsdWdpbiB7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIHBsdWdpblB1Ymxpc2hlcjogc3RyaW5nIHwgbnVsbDtcbiAgcGx1Z2luUHVibGlzaGVySWQ6IHN0cmluZyB8IG51bGw7XG4gIHBsdWdpbk5hbWU6IHN0cmluZyB8IG51bGw7XG4gIHBsdWdpblZlcnNpb246IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKiBBbiBhY3Rpb24vYnVpbGQgZXZlbnQgdGhhdCBjYW4gYmUgYXR0cmlidXRlZCB0byBhIHBsdWdpbiBzdGVwLiAqL1xuZnVuY3Rpb24gaXNBdHRyaWJ1dGFibGUoZTogSW5nZXN0RXZlbnQpOiBib29sZWFuIHtcbiAgcmV0dXJuIChlLmV2ZW50VHlwZSA9PT0gJ0FDVElPTicgfHwgZS5ldmVudFR5cGUgPT09ICdCVUlMRCcpXG4gICAgJiYgKGUuZXZlbnRTb3VyY2UgPT09ICdjb2RlcGlwZWxpbmUnIHx8IGUuZXZlbnRTb3VyY2UgPT09ICdjb2RlYnVpbGQnKVxuICAgICYmICEhZS5zdGFnZU5hbWUgJiYgISFlLmFjdGlvbk5hbWU7XG59XG5cbmZ1bmN0aW9uIHN0ZXBLZXkocGlwZWxpbmVJZDogc3RyaW5nLCBzdGFnZU5hbWU6IHN0cmluZywgYWN0aW9uTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3BpcGVsaW5lSWR9XFx1MDAwMCR7c3RhZ2VOYW1lfVxcdTAwMDAke2FjdGlvbk5hbWV9YDtcbn1cblxuLyoqXG4gKiBQbHVnaW4gYXR0cmlidXRpb246IHRoZSBzdGVwIG1hbmlmZXN0cyBvZiBldmVyeSBwaXBlbGluZSB3aXRoIGFuIGF0dHJpYnV0YWJsZVxuICogZXZlbnQsIGluIE9ORSByZWFkIHBlciBiYXRjaCwga2V5ZWQgZm9yIGFuIGluLW1lbW9yeSBqb2luLiBOYW1lcyBhcmUgY29tcGFyZWRcbiAqIHBvc3Qtc2NydWIgb24gYm90aCBzaWRlcyAodGhlIG1hbmlmZXN0IHN0b3JlcyB0aGVtIHNjcnViYmVkIHRoZSBzYW1lIHdheSkuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRTdGVwUGx1Z2lucyh0eDogQ3J1ZFR4LCBhdHRyaWJ1dGFibGU6IEluZ2VzdEV2ZW50W10pOiBQcm9taXNlPE1hcDxzdHJpbmcsIFN0ZXBQbHVnaW4+PiB7XG4gIGNvbnN0IHBpcGVsaW5lSWRzID0gWy4uLm5ldyBTZXQoYXR0cmlidXRhYmxlLm1hcCgoZSkgPT4gZS5waXBlbGluZUlkKSldO1xuICBpZiAocGlwZWxpbmVJZHMubGVuZ3RoID09PSAwKSByZXR1cm4gbmV3IE1hcCgpO1xuICBjb25zdCByb3dzID0gYXdhaXQgdHhcbiAgICAuc2VsZWN0KHtcbiAgICAgIHBpcGVsaW5lSWQ6IHNjaGVtYS5waXBlbGluZVN0ZXBNYW5pZmVzdC5waXBlbGluZUlkLFxuICAgICAgb3JnSWQ6IHNjaGVtYS5waXBlbGluZVN0ZXBNYW5pZmVzdC5vcmdJZCxcbiAgICAgIHN0YWdlTmFtZTogc2NoZW1hLnBpcGVsaW5lU3RlcE1hbmlmZXN0LnN0YWdlTmFtZSxcbiAgICAgIGFjdGlvbk5hbWU6IHNjaGVtYS5waXBlbGluZVN0ZXBNYW5pZmVzdC5hY3Rpb25OYW1lLFxuICAgICAgcGx1Z2luUHVibGlzaGVyOiBzY2hlbWEucGlwZWxpbmVTdGVwTWFuaWZlc3QucGx1Z2luUHVibGlzaGVyLFxuICAgICAgcGx1Z2luUHVibGlzaGVySWQ6IHNjaGVtYS5waXBlbGluZVN0ZXBNYW5pZmVzdC5wbHVnaW5QdWJsaXNoZXJJZCxcbiAgICAgIHBsdWdpbk5hbWU6IHNjaGVtYS5waXBlbGluZVN0ZXBNYW5pZmVzdC5wbHVnaW5OYW1lLFxuICAgICAgcGx1Z2luVmVyc2lvbjogc2NoZW1hLnBpcGVsaW5lU3RlcE1hbmlmZXN0LnBsdWdpblZlcnNpb24sXG4gICAgfSlcbiAgICAuZnJvbShzY2hlbWEucGlwZWxpbmVTdGVwTWFuaWZlc3QpXG4gICAgLndoZXJlKGluQXJyYXkoc2NoZW1hLnBpcGVsaW5lU3RlcE1hbmlmZXN0LnBpcGVsaW5lSWQsIHBpcGVsaW5lSWRzKSk7XG4gIHJldHVybiBuZXcgTWFwKHJvd3MubWFwKChtKSA9PiBbc3RlcEtleShtLnBpcGVsaW5lSWQsIG0uc3RhZ2VOYW1lLCBtLmFjdGlvbk5hbWUpLCBtXSkpO1xufVxuXG4vKipcbiAqIEFsbG93YW5jZSBmb3IgY2xvY2sgc2tldyBiZXR3ZWVuIGFuIEFXUyBldmVudCdzIHNvdXJjZSBjbG9jayBhbmQgb3Vycy4gQSByZWFsXG4gKiBDb2RlUGlwZWxpbmUgZXZlbnQgY2FuIGNhcnJ5IGEgdGltZXN0YW1wIGEgbGl0dGxlIGFoZWFkIG9mIG91ciBgbm93YDsgd2l0aG91dFxuICogc29tZSB0b2xlcmFuY2UgdGhlIHZhbGlkYXRpb24gYmVsb3cgd291bGQgZHJvcCBoZWFsdGh5IGV2ZW50cyBkdXJpbmcgbm9ybWFsXG4gKiBOVFAgZHJpZnQsIHdoaWNoIGlzIGZhciB3b3JzZSB0aGFuIGFkbWl0dGluZyBhIGZldyBzZWNvbmRzIG9mIHNrZXcuXG4gKi9cbmNvbnN0IENMT0NLX1NLRVdfVE9MRVJBTkNFX01TID0gNSAqIDYwICogMTAwMDtcblxuLyoqXG4gKiBXaHkgdGhpcyBldmVudCdzIHRpbWVzdGFtcHMgYXJlIGltcG9zc2libGUsIG9yIG51bGwgd2hlbiB0aGV5IGFyZSB1c2FibGUuXG4gKlxuICogQ2hlY2tlZCBhdCBJTkdFU1Qg4oCUIHRoZSBkdXJhYmxlIGJvdW5kYXJ5IOKAlCByYXRoZXIgdGhhbiBjbGFtcGVkIHdoZW4gdGhlIG1ldHJpY3NcbiAqIGFyZSBjb21wdXRlZC4gQSBuZWdhdGl2ZSBkdXJhdGlvbiBvciBhIGZ1dHVyZSBkZXBsb3kgdXNlZCB0byBiZSBjbGFtcGVkIHRvIDBcbiAqIGRvd25zdHJlYW0sIHdoaWNoIHJlcG9ydGVkIGEgYnJva2VuIGNsb2NrIGFzIGFuIGluc3RhbnQgZGVwbG95IGFuZCBxdWlldGx5XG4gKiBtb3ZlZCBkZXBsb3ltZW50IGZyZXF1ZW5jeSwgY2hhbmdlLWZhaWx1cmUgcmF0ZSBhbmQgbGVhZCB0aW1lIGZvciB0aGUgb3JnLlxuICpcbiAqIE5PVCBjaGVja2VkIGhlcmU6IGNvbW1pdCB0aW1lIHZzIGRlcGxveSBjb21wbGV0aW9uLiBgY29tbWl0X3RpbWVzdGFtcGAgcmlkZXMgdGhlXG4gKiBQSVBFTElORS9zb3VyY2UgZXZlbnQgd2hpbGUgdGhlIGRlcGxveSdzIGBjb21wbGV0ZWRfYXRgIGlzIG9uIGEgc2VwYXJhdGUgU1RBR0VcbiAqIHJvdywgam9pbmVkIGJ5IGBleGVjdXRpb25faWRgIG9ubHkgd2hlbiBET1JBIGlzIHF1ZXJpZWQg4oCUIHNvIG5vIHNpbmdsZSBldmVudFxuICogY2FycmllcyBib3RoLCBhbmQgdGhhdCBvcmRlcmluZyBjYW4gb25seSBiZSBndWFyZGVkIHdoZXJlIHRoZSB0d28gbWVldC5cbiAqL1xuZnVuY3Rpb24gaW52YWxpZEV2ZW50VGltZXMoZXZlbnQ6IEluZ2VzdEV2ZW50LCBub3dNczogbnVtYmVyKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGNlaWxpbmcgPSBub3dNcyArIENMT0NLX1NLRVdfVE9MRVJBTkNFX01TO1xuICBjb25zdCBwYXJzZWQ6IEFycmF5PFtzdHJpbmcsIG51bWJlcl0+ID0gW107XG4gIGZvciAoY29uc3QgZmllbGQgb2YgWydzdGFydGVkQXQnLCAnY29tcGxldGVkQXQnLCAnY29tbWl0VGltZXN0YW1wJ10gYXMgY29uc3QpIHtcbiAgICBjb25zdCByYXcgPSBldmVudFtmaWVsZF07XG4gICAgaWYgKHJhdyA9PT0gdW5kZWZpbmVkIHx8IHJhdyA9PT0gbnVsbCkgY29udGludWU7XG4gICAgY29uc3QgbXMgPSBEYXRlLnBhcnNlKFN0cmluZyhyYXcpKTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShtcykpIHJldHVybiBgJHtmaWVsZH0gaXMgbm90IGEgcGFyc2VhYmxlIHRpbWVzdGFtcGA7XG4gICAgaWYgKG1zID4gY2VpbGluZykgcmV0dXJuIGAke2ZpZWxkfSBpcyBpbiB0aGUgZnV0dXJlYDtcbiAgICBwYXJzZWQucHVzaChbZmllbGQsIG1zXSk7XG4gIH1cbiAgY29uc3Qgc3RhcnRlZCA9IHBhcnNlZC5maW5kKChbZl0pID0+IGYgPT09ICdzdGFydGVkQXQnKT8uWzFdO1xuICBjb25zdCBjb21wbGV0ZWQgPSBwYXJzZWQuZmluZCgoW2ZdKSA9PiBmID09PSAnY29tcGxldGVkQXQnKT8uWzFdO1xuICBpZiAoc3RhcnRlZCAhPT0gdW5kZWZpbmVkICYmIGNvbXBsZXRlZCAhPT0gdW5kZWZpbmVkICYmIGNvbXBsZXRlZCA8IHN0YXJ0ZWQpIHtcbiAgICByZXR1cm4gJ2NvbXBsZXRlZEF0IGlzIGJlZm9yZSBzdGFydGVkQXQnO1xuICB9XG4gIGlmIChldmVudC5kdXJhdGlvbk1zICE9PSB1bmRlZmluZWQgJiYgZXZlbnQuZHVyYXRpb25NcyAhPT0gbnVsbCAmJiBldmVudC5kdXJhdGlvbk1zIDwgMCkge1xuICAgIHJldHVybiAnZHVyYXRpb25NcyBpcyBuZWdhdGl2ZSc7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogVGhlIHBlcnNpc3RlZCByb3cgZm9yIG9uZSBpbmdlc3RlZCBldmVudC4gVGhpcyBpcyB0aGUgRFVSQUJMRSBwZXJzaXN0ZW5jZVxuICogYm91bmRhcnk6IGV2ZXJ5IHVzZXIvQVdTLWRlcml2ZWQgZnJlZS1mb3JtIHN0cmluZyBpcyBzY3J1YmJlZCBoZXJlLCBhbmRcbiAqIHRlbmFuY3kgY29tZXMgZnJvbSB0aGUgcGlwZWxpbmUgcmVnaXN0cnksIG5ldmVyIHRoZSBjYWxsZXIncyBjbGFpbWVkIG9yZy5cbiAqL1xuLyoqIFRoZSBzeW50aCByZWZ1c2FsIGNvZGUgdGhlIGV2ZW50cyBMYW1iZGEgYXR0YWNoZWQgKGBkZXRhaWwucGJGYWlsdXJlLmNvZGVgKSwgaWYgYW55LiAqL1xuZnVuY3Rpb24gcGJGYWlsdXJlQ29kZShkZXRhaWw6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGZhaWx1cmUgPSBkZXRhaWw/LnBiRmFpbHVyZTtcbiAgY29uc3QgY29kZSA9IGZhaWx1cmUgJiYgdHlwZW9mIGZhaWx1cmUgPT09ICdvYmplY3QnID8gKGZhaWx1cmUgYXMgeyBjb2RlPzogdW5rbm93biB9KS5jb2RlIDogdW5kZWZpbmVkO1xuICByZXR1cm4gdHlwZW9mIGNvZGUgPT09ICdzdHJpbmcnICYmIC9eW0EtWl1bQS1aMC05X117MCw2M30kLy50ZXN0KGNvZGUpID8gY29kZSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHRvRXZlbnRSb3coZXZlbnQ6IEluZ2VzdEV2ZW50LCByZWdpc3RyeTogeyBwaXBlbGluZUlkOiBzdHJpbmc7IG9yZ0lkOiBzdHJpbmcgfSwgcGx1Z2luOiBTdGVwUGx1Z2luIHwgdW5kZWZpbmVkLCBrZXlJZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUGlwZWxpbmVFdmVudEluc2VydCB7XG4gIGNvbnN0IGRldGFpbCA9IGV2ZW50LnNvdXJjZU1lc3NhZ2VJZCAhPT0gdW5kZWZpbmVkXG4gICAgPyB7IC4uLihldmVudC5kZXRhaWwgPz8ge30pLCBzb3VyY2VNZXNzYWdlSWQ6IGV2ZW50LnNvdXJjZU1lc3NhZ2VJZCB9XG4gICAgOiBldmVudC5kZXRhaWw7XG4gIHJldHVybiB7XG4gICAgLy8gcmVnaXN0cnkucGlwZWxpbmVJZCA9PT0gZXZlbnQucGlwZWxpbmVJZDsgdGhlIHJlZ2lzdHJ5J3MgaXMgYWx3YXlzIGEgcm93XG4gICAgLy8gdGhhdCBleGlzdHMgKEZLKSBhbmQgaXRzIG9yZ0lkIGlzIHRoZSB0cnVzdGVkIHRlbmFudC5cbiAgICBwaXBlbGluZUlkOiByZWdpc3RyeS5waXBlbGluZUlkLFxuICAgIG9yZ0lkOiByZWdpc3RyeS5vcmdJZCxcbiAgICBldmVudFNvdXJjZTogZXZlbnQuZXZlbnRTb3VyY2UsXG4gICAgZXZlbnRUeXBlOiBldmVudC5ldmVudFR5cGUsXG4gICAgc3RhdHVzOiBldmVudC5zdGF0dXMsXG4gICAgLy8gQW4gQVdTLUFTU0lHTkVEIFVVSUQsIG5vdCBmcmVlLWZvcm0gdGV4dDogaXQgY2FuJ3QgY2FycnkgYW4gYWNjb3VudCBpZCxcbiAgICAvLyBhbmQgc2NydWJiaW5nIGEgMTItZGlnaXQgcnVuIGluc2lkZSBpdCB3b3VsZCBjb3JydXB0IHRoZSBjb3JyZWxhdGlvbiBrZXkuXG4gICAgZXhlY3V0aW9uSWQ6IGV2ZW50LmV4ZWN1dGlvbklkLFxuICAgIC8vIFVTRVItQVVUSE9SRUQgcGlwZWxpbmUtc3RydWN0dXJlIG5hbWVzIOKAlCBzYW1lIHVudHJ1c3RlZCBvcmlnaW4gYXNcbiAgICAvLyBlcnJvck1lc3NhZ2UsIHNvIHNjcnViYmVkIChhIHN0YWdlIG5hbWVkIHdpdGggYW4gQVJOIG11c3Qgbm90IHBlcnNpc3QpLlxuICAgIHN0YWdlTmFtZTogc2NydWJPcHRpb25hbChldmVudC5zdGFnZU5hbWUpLFxuICAgIGFjdGlvbk5hbWU6IHNjcnViT3B0aW9uYWwoZXZlbnQuYWN0aW9uTmFtZSksXG4gICAgLy8gSEFSRCBDT05TVFJBSU5UOiBhbiBBV1MgYWNjb3VudCBpZCBtdXN0IE5FVkVSIGJlIHBlcnNpc3RlZC4gRmFpbHVyZSBkZXRhaWxcbiAgICAvLyBhbmQgbWVzc2FnZXMgcm91dGluZWx5IGNhcnJ5IEFSTnMgYW5kIGJhcmUgMTItZGlnaXQgYWNjb3VudCBpZHMuXG4gICAgZXJyb3JNZXNzYWdlOiBzY3J1Yk9wdGlvbmFsKGV2ZW50LmVycm9yTWVzc2FnZSksXG4gICAgc3RhcnRlZEF0OiBldmVudC5zdGFydGVkQXQgPyBuZXcgRGF0ZShldmVudC5zdGFydGVkQXQpIDogdW5kZWZpbmVkLFxuICAgIGNvbXBsZXRlZEF0OiBldmVudC5jb21wbGV0ZWRBdCA/IG5ldyBEYXRlKGV2ZW50LmNvbXBsZXRlZEF0KSA6IHVuZGVmaW5lZCxcbiAgICBkdXJhdGlvbk1zOiBldmVudC5kdXJhdGlvbk1zLFxuICAgIC8vIERlcGxveSBhdHRyaWJ1dGlvbiDigJQgc2NydWJiZWQgbGlrZSB0aGUgb3RoZXIgZnJlZS1mb3JtIHN0cmluZ3MuXG4gICAgY29tbWl0U2hhOiBzY3J1Yk9wdGlvbmFsKGV2ZW50LmNvbW1pdFNoYSksXG4gICAgY29tbWl0UmVmOiBzY3J1Yk9wdGlvbmFsKGV2ZW50LmNvbW1pdFJlZiksXG4gICAgZW52aXJvbm1lbnQ6IHNjcnViT3B0aW9uYWwoZXZlbnQuZW52aXJvbm1lbnQpLFxuICAgIC8vIE1lYXN1cmVkIGxlYWQgdGltZTogdGhlIG9sZGVzdCB1bnNoaXBwZWQgY29tbWl0J3MgdGltZSArIHRoZSBjb3VudC4gQW5cbiAgICAvLyBTQ00tZGVyaXZlZCBpbnN0YW50IGFuZCBhIHBsYWluIGludGVnZXIg4oCUIG5vdGhpbmcgdG8gc2NydWIuXG4gICAgY29tbWl0VGltZXN0YW1wOiBldmVudC5jb21taXRUaW1lc3RhbXAgPyBuZXcgRGF0ZShldmVudC5jb21taXRUaW1lc3RhbXApIDogdW5kZWZpbmVkLFxuICAgIGNvbW1pdENvdW50OiBldmVudC5jb21taXRDb3VudCxcbiAgICAvLyBOVUxMIGZvciBub24tcGx1Z2luIGFjdGlvbnMgYW5kIGZvciBwaXBlbGluZXMgZGVwbG95ZWQgd2l0aG91dCBhIG1hbmlmZXN0LlxuICAgIHBsdWdpblB1Ymxpc2hlcjogcGx1Z2luPy5wbHVnaW5QdWJsaXNoZXIgPz8gbnVsbCxcbiAgICBwbHVnaW5QdWJsaXNoZXJJZDogcGx1Z2luPy5wbHVnaW5QdWJsaXNoZXJJZCA/PyBudWxsLFxuICAgIHBsdWdpbk5hbWU6IHBsdWdpbj8ucGx1Z2luTmFtZSA/PyBudWxsLFxuICAgIHBsdWdpblZlcnNpb246IHBsdWdpbj8ucGx1Z2luVmVyc2lvbiA/PyBudWxsLFxuICAgIC8vIFdIQVQgS0lORCBvZiB0aGluZyBicm9rZSwgY2xhc3NpZmllZCBoZXJlIHJhdGhlciB0aGFuIGF0IHJlYWQgdGltZTogdGhlXG4gICAgLy8gZXJyb3IgdGV4dCBpcyBzY3J1YmJlZCBhYm92ZSBhbmQgZXZlbnR1YWxseSBzd2VwdCBieSByZXRlbnRpb24sIHNvIGFcbiAgICAvLyBjYXRlZ29yeSBkZXJpdmVkIGxhdGVyIHdvdWxkIGhhdmUgbm90aGluZyBsZWZ0IHRvIHJlYWQuIE5VTEwgZm9yIGFueXRoaW5nXG4gICAgLy8gdGhhdCBpcyBub3QgYSBmYWlsdXJlLCBzbyBpdHMgcHJlc2VuY2UgYWx3YXlzIG1lYW5zIFwidGhpcyBicm9rZVwiLlxuICAgIGZhaWx1cmVDYXRlZ29yeTogY2xhc3NpZnlGYWlsdXJlKHtcbiAgICAgIHN0YXR1czogZXZlbnQuc3RhdHVzLFxuICAgICAgZXJyb3JNZXNzYWdlOiBzY3J1Yk9wdGlvbmFsKGV2ZW50LmVycm9yTWVzc2FnZSksXG4gICAgICBhY3Rpb25OYW1lOiBzY3J1Yk9wdGlvbmFsKGV2ZW50LmFjdGlvbk5hbWUpLFxuICAgICAgc3RhZ2VOYW1lOiBzY3J1Yk9wdGlvbmFsKGV2ZW50LnN0YWdlTmFtZSksXG4gICAgICBmYWlsdXJlQ29kZTogcGJGYWlsdXJlQ29kZShldmVudC5kZXRhaWwpLFxuICAgIH0pLFxuICAgIC8vIFByb3ZlbmFuY2UuIEJvdGggYXJlIG9wYXF1ZSBpZHMg4oCUIGFuIEFXUy1hc3NpZ25lZCBldmVudCBVVUlEIGFuZCBvdXIgb3duXG4gICAgLy8ga2V5IGlkIOKAlCBzbyBuZWl0aGVyIGNhbiBjYXJyeSBhbiBhY2NvdW50IGlkIGFuZCBuZWl0aGVyIGlzIHNjcnViYmVkXG4gICAgLy8gKHNjcnViYmluZyBhIGRpZ2l0IHJ1biBpbnNpZGUgb25lIHdvdWxkIGNvcnJ1cHQgdGhlIGNvcnJlbGF0aW9uIGtleSkuXG4gICAgc291cmNlRXZlbnRJZDogZXZlbnQuc291cmNlRXZlbnRJZCxcbiAgICBpbmdlc3RLZXlJZDoga2V5SWQsXG4gICAgZGV0YWlsOiBkZXRhaWwgIT09IHVuZGVmaW5lZCA/IHNjcnViQXdzSWRlbnRpZmllcnMoZGV0YWlsKSA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuLyoqXG4gKiBGYW4gdGVybWluYWwgU1RBR0Ugb3V0Y29tZXMgYW5kIHBlci1BQ1RJT04gY29tcHV0ZSBjb25zdW1wdGlvbiBpbnRvIHRoZVxuICogcm91dGUncyBtZXRyaWMgaG9vayAocGlwZWxpbmUtZGF0YSBjYW4ndCBpbXBvcnQgYXBpLXNlcnZlcidzIHJlZ2lzdHJ5KSBhZnRlclxuICogdGhlIGluc2VydCBjb21taXRzLlxuICpcbiAqIERyaXZlbiBvZmYgdGhlIElOU0VSVEVEIHJvd3MsIHNvIGEgcmUtZGVsaXZlcmVkIGV2ZW50IHRoZSBkZWR1cCBpbmRleFxuICogc3dhbGxvd2VkIGlzIG5ldmVyIGNvdW50ZWQgdHdpY2UuIFRoYXQgcHJvcGVydHkgaXMgbG9hZC1iZWFyaW5nIGZvciB0aGVcbiAqIGNvbXB1dGUgc2VyaWVzIGluIGEgd2F5IGl0IHdhcyBub3QgZm9yIHRoZSBzdGFnZSBvbmU6IGEgZHVwbGljYXRlZCBzdGFnZVxuICogb3V0Y29tZSBkaXN0b3J0cyBhIHJhdGUsIHdoZXJlYXMgYSBkdXBsaWNhdGVkIHZDUFUtbWludXRlIGZpZ3VyZSBpcyBhXG4gKiBkb3VibGUtY2hhcmdlIHdhaXRpbmcgZm9yIHRoZSBkYXkgdGhlIGNoYXJnZSBpcyBzd2l0Y2hlZCBvbi5cbiAqXG4gKiBBIG5vbi1udWxsIGVudmlyb25tZW50IG1hcmtzIGEgZGVwbG95LlxuICovXG5mdW5jdGlvbiBlbWl0SW5nZXN0TWV0cmljcyhcbiAgcm93czogUmVhZG9ubHlBcnJheTx7XG4gICAgb3JnSWQ6IHN0cmluZztcbiAgICBwaXBlbGluZUlkOiBzdHJpbmcgfCBudWxsO1xuICAgIGV2ZW50VHlwZTogc3RyaW5nO1xuICAgIHN0YXR1czogc3RyaW5nO1xuICAgIHN0YWdlTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgICBlbnZpcm9ubWVudDogc3RyaW5nIHwgbnVsbDtcbiAgICBkdXJhdGlvbk1zPzogbnVtYmVyIHwgbnVsbDtcbiAgICBkZXRhaWw/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGw7XG4gIH0+LFxuICBvbk1ldHJpYzogKG06IEluZ2VzdE1ldHJpYykgPT4gdm9pZCxcbik6IHZvaWQge1xuICBmb3IgKGNvbnN0IHIgb2Ygcm93cykge1xuICAgIGlmICghci5waXBlbGluZUlkKSBjb250aW51ZTtcblxuICAgIC8vIENvbXB1dGUgY29uc3VtcHRpb246IGV2ZXJ5IFRFUk1JTkFMIGFjdGlvbiwgbWVhc3VyYWJsZSBvciBub3QuIFRoZVxuICAgIC8vIHVubWVhc3VyYWJsZSBvbmVzIGFyZSB0aGUgcG9pbnQg4oCUIHRoZXkgYXJlIHdoYXQgdGhlIGNvdmVyYWdlIHJhdGlvIGNvdW50cy5cbiAgICBpZiAoci5ldmVudFR5cGUgPT09ICdBQ1RJT04nICYmIFRFUk1JTkFMX0FDVElPTl9TVEFURVMuaW5jbHVkZXMoci5zdGF0dXMpKSB7XG4gICAgICBjb25zdCBjb21wdXRlVHlwZSA9IG5vcm1hbGl6ZUNvbXB1dGVUeXBlKFxuICAgICAgICB0eXBlb2Ygci5kZXRhaWw/LmNvbXB1dGVUeXBlID09PSAnc3RyaW5nJyA/IHIuZGV0YWlsLmNvbXB1dGVUeXBlIDogbnVsbCxcbiAgICAgICk7XG4gICAgICBjb25zdCBkdXJhdGlvbk1zID0gci5kdXJhdGlvbk1zID8/IG51bGw7XG4gICAgICBvbk1ldHJpYyh7XG4gICAgICAgIGtpbmQ6ICdjb21wdXRlJyxcbiAgICAgICAgcGlwZWxpbmVJZDogci5waXBlbGluZUlkLFxuICAgICAgICBvcmdJZDogci5vcmdJZCxcbiAgICAgICAgY29tcHV0ZVR5cGUsXG4gICAgICAgIGR1cmF0aW9uTXMsXG4gICAgICAgIGNyZWRpdHM6IGNvbXB1dGVDcmVkaXRzRm9yKGR1cmF0aW9uTXMsIGNvbXB1dGVUeXBlKSxcbiAgICAgIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHIuZXZlbnRUeXBlICE9PSAnU1RBR0UnIHx8IChyLnN0YXR1cyAhPT0gJ1NVQ0NFRURFRCcgJiYgci5zdGF0dXMgIT09ICdGQUlMRUQnKSkgY29udGludWU7XG4gICAgb25NZXRyaWMoe1xuICAgICAga2luZDogJ3N0YWdlJyxcbiAgICAgIHBpcGVsaW5lSWQ6IHIucGlwZWxpbmVJZCxcbiAgICAgIG9yZ0lkOiByLm9yZ0lkLFxuICAgICAgc3RhZ2U6IHIuc3RhZ2VOYW1lID8/ICcnLFxuICAgICAgZW52aXJvbm1lbnQ6IHIuZW52aXJvbm1lbnQgPz8gbnVsbCxcbiAgICAgIHJlc3VsdDogci5zdGF0dXMgPT09ICdTVUNDRUVERUQnID8gJ3N1Y2NlZWRlZCcgOiAnZmFpbGVkJyxcbiAgICB9KTtcbiAgfVxufVxuXG4vKiogQWN0aW9uIHN0YXRlcyB0aGF0IG1lYW4gdGhlIGFjdGlvbiBpcyBvdmVyIGFuZCBpdHMgY29uc3VtcHRpb24gaXMgZmluYWwuICovXG5jb25zdCBURVJNSU5BTF9BQ1RJT05fU1RBVEVTOiByZWFkb25seSBzdHJpbmdbXSA9IFsnU1VDQ0VFREVEJywgJ0ZBSUxFRCcsICdTVE9QUEVEJ107XG5cbi8qKlxuICogUmVzb2x2ZSBpbmNvbWluZyBldmVudHMgYWdhaW5zdCB0aGUgcGlwZWxpbmUgcmVnaXN0cnksIGJhdGNoLWluc2VydCB0aGVcbiAqIG1hdGNoZWQgb25lcywgYW5kIGludmFsaWRhdGUgcmVwb3J0aW5nIGNhY2hlcyBmb3IgYWZmZWN0ZWQgb3Jncy5cbiAqIEV2ZW50cyBmb3IgdW5yZWdpc3RlcmVkIHBpcGVsaW5lIGlkcyBhcmUgZHJvcHBlZCAoYW5kIGxvZ2dlZCBhdCBXQVJOXG4gKiB3aXRoIHNhbXBsZSBpZHMgc28gYW4gb3BlcmF0b3IgY2FuIHNlZSB3aGVuIEV2ZW50QnJpZGdlIGlzIGRlbGl2ZXJpbmdcbiAqIGV2ZW50cyBmb3IgcGlwZWxpbmVzIHRoYXQgaGF2ZW4ndCBjYWxsZWQgUE9TVCAvcGlwZWxpbmVzL3JlZ2lzdHJ5IHlldCkuXG4gKlxuICogUmV0dXJucyBjb3VudHMgKyBhIHNhbXBsZSBvZiB1bnJlZ2lzdGVyZWQgcGlwZWxpbmUgaWRzIGZvciBvYnNlcnZhYmlsaXR5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5nZXN0RXZlbnRzKFxuICBldmVudHM6IEluZ2VzdEV2ZW50W10sXG4gIG9uTWV0cmljPzogKG06IEluZ2VzdE1ldHJpYykgPT4gdm9pZCxcbiAgY2FsbGVyPzogSW5nZXN0Q2FsbGVyLFxuKTogUHJvbWlzZTxJbmdlc3RSZXN1bHQ+IHtcbiAgLy8gVEVOQU5DWS4gQW4gZXZlbnQncyBvcmcgY29tZXMgZnJvbSB0aGUgcGlwZWxpbmUgUkVHSVNUUlksIG5vdCB0aGUgdG9rZW4sIHNvXG4gIC8vIHRoZSBzY29wZSBjaGVjayBhbG9uZSBsZXQgYW55IGByZXBvcnRpbmc6aW5nZXN0YCBob2xkZXIgcG9zdCBldmVudHMgZm9yXG4gIC8vIGFub3RoZXIgb3JnJ3MgcGlwZWxpbmUgaWQgYW5kIGhhdmUgdGhlbSBhdHRyaWJ1dGVkIHRoZXJlLiBgY2FsbGVyYCBjYXJyaWVzXG4gIC8vIHRoZSBvcmcgaWRzIHRoaXMgdG9rZW4gbWF5IHdyaXRlIGZvcjsgYW55dGhpbmcgZWxzZSBpcyBkcm9wcGVkIGJlbG93LlxuICAvL1xuICAvLyBgY2FsbGVyYCBpcyBvcHRpb25hbCBvbmx5IHNvIGluLXByb2Nlc3MgY2FsbGVycyB0aGF0IGFscmVhZHkgcnVuXG4gIC8vIGNyb3NzLXRlbmFudCAodGVzdHMsIGJhY2tmaWxscykga2VlcCB3b3JraW5nIOKAlCBhbiBBQlNFTlQgY2FsbGVyIG1lYW5zIFwibm9cbiAgLy8gcmVzdHJpY3Rpb25cIiwgYW5kIHRoZSByb3V0ZSBhbHdheXMgc3VwcGxpZXMgb25lLiBBIGNhbGxlciB3aXRoIGFuIEVNUFRZXG4gIC8vIGFsbG93LWxpc3QgYW5kIG5vIGNyb3NzVGVuYW50IGZsYWcgdGhlcmVmb3JlIGRyb3BzIGV2ZXJ5dGhpbmcsIHdoaWNoIGlzIHRoZVxuICAvLyByaWdodCBhbnN3ZXIgd2hlbiB0aGUgcm91dGUgY291bGQgbm90IGVzdGFibGlzaCB3aG8gaXMgd3JpdGluZy5cbiAgY29uc3QgdW5yZXN0cmljdGVkID0gY2FsbGVyID09PSB1bmRlZmluZWQgfHwgY2FsbGVyLmNyb3NzVGVuYW50ID09PSB0cnVlO1xuICBjb25zdCBhbGxvd2VkID0gbmV3IFNldChjYWxsZXI/LmFsbG93ZWRPcmdJZHMgPz8gW10pO1xuICAvLyBNdWx0aS1vcmcgYmF0Y2ggaW5zZXJ0OiB0aGUgY2FsbGVyIHJlc29sdmVzIHRvIG11bHRpcGxlIG9yZ3MgdmlhIHRoZVxuICAvLyBwaXBlbGluZS1yZWdpc3RyeSBsb29rdXAgYmVsb3csIHNvIHRoZSByb3V0ZSBsYXllciBNVVNUIGVzdGFibGlzaCBhXG4gIC8vIGBydW5XaXRoVGVuYW50Q29udGV4dCh7IGlzU3VwZXJBZG1pbjogdHJ1ZSB9LCAuLi4pYCBzY29wZSBiZWZvcmUgY2FsbGluZ1xuICAvLyB0aGlzIGZ1bmN0aW9uLiBVbmRlciBGT1JDRSdkIFJMUywgYSBzaW5nbGUgdHggd2l0aCBgYXBwLm9yZ19pZCA9IDxvbmVcbiAgLy8gb3JnPmAgY291bGQgb25seSB3cml0ZSBldmVudHMgZm9yIHRoYXQgb3JnOyBieXBhc3MgdmlhIHN5c2FkbWluIGlzXG4gIC8vIHRoZSByaWdodCBnYXRlIGZvciB0aGlzIHNlcnZlci1pbnRlcm5hbCBjcm9zcy10ZW5hbnQgZW5kcG9pbnQuIFNlZVxuICAvLyBhcGkvcmVwb3J0aW5nL3NyYy9yb3V0ZXMvZXZlbnQtaW5nZXN0LnRzIGZvciB0aGUgd3JhcHBlci5cbiAgLy8gQ2FjaGVzIGFyZSBpbnZhbGlkYXRlZCBBRlRFUiB0aGUgdHggcmVzb2x2ZXM6IGRvaW5nIGl0IGluc2lkZSBoZWxkIHRoZSBwZ1xuICAvLyBsb2NrcyBvcGVuIGFjcm9zcyB1bnJlbGF0ZWQgY2FjaGUgcm91bmQtdHJpcHMuIFRoZSBUVEwgaXMgMi01IG1pbiwgc28gYVxuICAvLyBmaXJlLWFuZC1mb3JnZXQgcG9zdC1jb21taXQgaW52YWxpZGF0aW9uIGlzIGFuIGFjY2VwdGFibGUgdHJhZGUuXG4gIGNvbnN0IHsgaW5zZXJ0ZWQsIHNraXBwZWQsIHVucmVnaXN0ZXJlZFBpcGVsaW5lSWRzLCBhZmZlY3RlZE9yZ3MsIGRyb3BwZWRGb3JlaWduT3JnLCBkcm9wcGVkSW52YWxpZFRpbWUsIGZvcmVpZ25QaXBlbGluZUlkcywgaW5zZXJ0ZWRSb3dzIH0gPSBhd2FpdCB3aXRoVGVuYW50VHgoYXN5bmMgKHR4KSA9PiB7XG4gICAgLy8gQmF0Y2gtcmVzb2x2ZSBhbGwgdW5pcXVlIHBpcGVsaW5lIGlkcyBpbiBvbmUgcXVlcnlcbiAgICBjb25zdCB1bmlxdWVJZHMgPSBbLi4ubmV3IFNldChldmVudHMubWFwKGUgPT4gZS5waXBlbGluZUlkKSldO1xuICAgIGNvbnN0IHJlZ2lzdHJ5Um93cyA9IGF3YWl0IHR4XG4gICAgICAuc2VsZWN0KHtcbiAgICAgICAgcGlwZWxpbmVJZDogc2NoZW1hLnBpcGVsaW5lUmVnaXN0cnkucGlwZWxpbmVJZCxcbiAgICAgICAgb3JnSWQ6IHNjaGVtYS5waXBlbGluZVJlZ2lzdHJ5Lm9yZ0lkLFxuICAgICAgfSlcbiAgICAgIC5mcm9tKHNjaGVtYS5waXBlbGluZVJlZ2lzdHJ5KVxuICAgICAgLndoZXJlKGluQXJyYXkoc2NoZW1hLnBpcGVsaW5lUmVnaXN0cnkucGlwZWxpbmVJZCwgdW5pcXVlSWRzKSk7XG5cbiAgICBjb25zdCBpZE1hcCA9IG5ldyBNYXAocmVnaXN0cnlSb3dzLm1hcChyID0+IFtyLnBpcGVsaW5lSWQsIHJdKSk7XG4gICAgY29uc3Qgc3RlcFBsdWdpbnMgPSBhd2FpdCBsb2FkU3RlcFBsdWdpbnModHgsIGV2ZW50cy5maWx0ZXIoKGUpID0+IGlzQXR0cmlidXRhYmxlKGUpICYmIGlkTWFwLmhhcyhlLnBpcGVsaW5lSWQpKSk7XG5cbiAgICAvLyBCdWlsZCBpbnNlcnQgYmF0Y2ggKHNraXAgZXZlbnRzIHdob3NlIHBpcGVsaW5lIGlzbid0IHJlZ2lzdGVyZWQpXG4gICAgY29uc3Qgcm93czogUGlwZWxpbmVFdmVudEluc2VydFtdID0gW107XG4gICAgbGV0IHNraXBwZWRMb2NhbCA9IDA7XG4gICAgbGV0IGZvcmVpZ25Mb2NhbCA9IDA7XG4gICAgbGV0IGludmFsaWRUaW1lTG9jYWwgPSAwO1xuICAgIGNvbnN0IGludmFsaWRUaW1lUmVhc29ucyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IGZvcmVpZ25PcmdJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBmb3JlaWduUGlwZWxpbmVJZHNMb2NhbCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IHVucmVnaXN0ZXJlZExvY2FsOiBzdHJpbmdbXSA9IFtdO1xuICAgIC8vIE9uZSBgbm93YCBmb3IgdGhlIHdob2xlIGJhdGNoOiBwZXItZXZlbnQgY2xvY2tzIHdvdWxkIGxldCBhbiBldmVudCBwYXNzIG9yXG4gICAgLy8gZmFpbCBkZXBlbmRpbmcgb24gd2hlcmUgaXQgc2F0IGluIHRoZSBsb29wLlxuICAgIGNvbnN0IG5vd01zID0gRGF0ZS5ub3coKTtcblxuICAgIGZvciAoY29uc3QgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgICBjb25zdCByZWdpc3RyeSA9IGlkTWFwLmdldChldmVudC5waXBlbGluZUlkKTtcbiAgICAgIGlmICghcmVnaXN0cnkpIHtcbiAgICAgICAgc2tpcHBlZExvY2FsKys7XG4gICAgICAgIHVucmVnaXN0ZXJlZExvY2FsLnB1c2goZXZlbnQucGlwZWxpbmVJZCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gVGhlIHBpcGVsaW5lIHJlc29sdmVzIHRvIGFuIG9yZyB0aGlzIGNhbGxlciBtYXkgbm90IHdyaXRlIGZvci4gQ291bnRlZFxuICAgICAgLy8gc2VwYXJhdGVseSBmcm9tIGBza2lwcGVkYCAoYW4gdW5yZWdpc3RlcmVkIGlkIGlzIGEgcHJvZHVjZXIgcnVubmluZ1xuICAgICAgLy8gYWhlYWQgb2YgcmVnaXN0cmF0aW9uOyB0aGlzIGlzIGEgdGVuYW5jeSByZWZ1c2FsKSBhbmQgbmV2ZXIgaW5zZXJ0ZWQuXG4gICAgICBpZiAoIXVucmVzdHJpY3RlZCAmJiAhYWxsb3dlZC5oYXMocmVnaXN0cnkub3JnSWQpKSB7XG4gICAgICAgIGZvcmVpZ25Mb2NhbCsrO1xuICAgICAgICBmb3JlaWduT3JnSWRzLmFkZChyZWdpc3RyeS5vcmdJZCk7XG4gICAgICAgIGZvcmVpZ25QaXBlbGluZUlkc0xvY2FsLmFkZChldmVudC5waXBlbGluZUlkKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBJbXBvc3NpYmxlIHRpbWVzdGFtcHMgYXJlIHJlZnVzZWQgYXQgdGhlIGJvdW5kYXJ5LCBzbyBubyBkb3duc3RyZWFtXG4gICAgICAvLyBtZXRyaWMgaGFzIHRvIGNsYW1wIGEgbmVnYXRpdmUgZ2FwIGFuZCBjYWxsIGl0IHplcm8uXG4gICAgICBjb25zdCBiYWRUaW1lID0gaW52YWxpZEV2ZW50VGltZXMoZXZlbnQsIG5vd01zKTtcbiAgICAgIGlmIChiYWRUaW1lKSB7XG4gICAgICAgIGludmFsaWRUaW1lTG9jYWwrKztcbiAgICAgICAgaW52YWxpZFRpbWVSZWFzb25zLmFkZChiYWRUaW1lKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFnZU5hbWUgPSBzY3J1Yk9wdGlvbmFsKGV2ZW50LnN0YWdlTmFtZSk7XG4gICAgICBjb25zdCBhY3Rpb25OYW1lID0gc2NydWJPcHRpb25hbChldmVudC5hY3Rpb25OYW1lKTtcbiAgICAgIGNvbnN0IHN0ZXAgPSBpc0F0dHJpYnV0YWJsZShldmVudCkgJiYgc3RhZ2VOYW1lICYmIGFjdGlvbk5hbWVcbiAgICAgICAgPyBzdGVwUGx1Z2lucy5nZXQoc3RlcEtleShyZWdpc3RyeS5waXBlbGluZUlkLCBzdGFnZU5hbWUsIGFjdGlvbk5hbWUpKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIC8vIFNhbWUtb3JnIGd1YXJkOiBhIG1hbmlmZXN0IHJvdyBpcyBvbmx5IGV2ZXIgd3JpdHRlbiBieSB0aGUgb3JnIHRoYXRcbiAgICAgIC8vIG93bnMgdGhlIHBpcGVsaW5lLCBidXQgdGhlIGluZ2VzdCBydW5zIGNyb3NzLXRlbmFudCwgc28gZG9uJ3QgbGVhbiBvbiBpdC5cbiAgICAgIHJvd3MucHVzaCh0b0V2ZW50Um93KGV2ZW50LCByZWdpc3RyeSwgc3RlcCAmJiBzdGVwLm9yZ0lkID09PSByZWdpc3RyeS5vcmdJZCA/IHN0ZXAgOiB1bmRlZmluZWQsIGNhbGxlcj8ua2V5SWQpKTtcbiAgICB9XG5cbiAgICAvLyBTUVMgaXMgYXQtbGVhc3Qtb25jZSwgc28gRXZlbnRCcmlkZ2UgY2FuIGRlbGl2ZXIgdGhlIHNhbWUgc3RhdGUtY2hhbmdlXG4gICAgLy8gdHdpY2UuIGBvbkNvbmZsaWN0RG9Ob3RoaW5nYCArIHRoZSBwYXJ0aWFsIHVuaXF1ZSBpbmRleGVzIG9uXG4gICAgLy8gKHBpcGVsaW5lX2lkLCBleGVjdXRpb25faWQsIGV2ZW50X3R5cGUsIHN0YXR1cywgc3RhZ2VfbmFtZSwgYWN0aW9uX25hbWUpXG4gICAgLy8gYW5kIG9uIHNvdXJjZV9ldmVudF9pZCAodGhlIEV2ZW50QnJpZGdlIGlkLCB3aGVuIHByZXNlbnQpIG1ha2VcbiAgICAvLyByZS1kZWxpdmVyeSBpZGVtcG90ZW50LiBgcmV0dXJuaW5nYCBnaXZlcyB0aGUgUkVBTCBpbnNlcnRlZCBzZXQgc29cbiAgICAvLyBjb3VudHMsIG1ldHJpY3MgYW5kIGNhY2hlIGludmFsaWRhdGlvbiBhbGwgaWdub3JlIGR1cGxpY2F0ZXMuXG4gICAgY29uc3QgbGFuZGVkID0gcm93cy5sZW5ndGggPiAwXG4gICAgICA/IGF3YWl0IHR4Lmluc2VydChzY2hlbWEucGlwZWxpbmVFdmVudCkudmFsdWVzKHJvd3MpXG4gICAgICAgIC5vbkNvbmZsaWN0RG9Ob3RoaW5nKClcbiAgICAgICAgLnJldHVybmluZyh7XG4gICAgICAgICAgb3JnSWQ6IHNjaGVtYS5waXBlbGluZUV2ZW50Lm9yZ0lkLFxuICAgICAgICAgIHBpcGVsaW5lSWQ6IHNjaGVtYS5waXBlbGluZUV2ZW50LnBpcGVsaW5lSWQsXG4gICAgICAgICAgZXZlbnRUeXBlOiBzY2hlbWEucGlwZWxpbmVFdmVudC5ldmVudFR5cGUsXG4gICAgICAgICAgc3RhdHVzOiBzY2hlbWEucGlwZWxpbmVFdmVudC5zdGF0dXMsXG4gICAgICAgICAgc3RhZ2VOYW1lOiBzY2hlbWEucGlwZWxpbmVFdmVudC5zdGFnZU5hbWUsXG4gICAgICAgICAgZW52aXJvbm1lbnQ6IHNjaGVtYS5waXBlbGluZUV2ZW50LmVudmlyb25tZW50LFxuICAgICAgICAgIC8vIEZvciB0aGUgcGVyLWRlcGxveSByb2xsdXAgYmVsb3c6IGV2ZXJ5dGhpbmcgYGRvcmFfZGVwbG95bWVudHNgIG5lZWRzLFxuICAgICAgICAgIC8vIHRha2VuIGZyb20gdGhlIHJvd3MgdGhhdCBBQ1RVQUxMWSBsYW5kZWQgc28gYSByZS1kZWxpdmVyeSBjYW5ub3RcbiAgICAgICAgICAvLyBwcm9kdWNlIGEgc2Vjb25kIGRlcGxveS5cbiAgICAgICAgICBleGVjdXRpb25JZDogc2NoZW1hLnBpcGVsaW5lRXZlbnQuZXhlY3V0aW9uSWQsXG4gICAgICAgICAgY29tbWl0U2hhOiBzY2hlbWEucGlwZWxpbmVFdmVudC5jb21taXRTaGEsXG4gICAgICAgICAgY29tbWl0VGltZXN0YW1wOiBzY2hlbWEucGlwZWxpbmVFdmVudC5jb21taXRUaW1lc3RhbXAsXG4gICAgICAgICAgY29tbWl0Q291bnQ6IHNjaGVtYS5waXBlbGluZUV2ZW50LmNvbW1pdENvdW50LFxuICAgICAgICAgIGNvbXBsZXRlZEF0OiBzY2hlbWEucGlwZWxpbmVFdmVudC5jb21wbGV0ZWRBdCxcbiAgICAgICAgICBzdGFydGVkQXQ6IHNjaGVtYS5waXBlbGluZUV2ZW50LnN0YXJ0ZWRBdCxcbiAgICAgICAgICBjcmVhdGVkQXQ6IHNjaGVtYS5waXBlbGluZUV2ZW50LmNyZWF0ZWRBdCxcbiAgICAgICAgICBkZXRhaWw6IHNjaGVtYS5waXBlbGluZUV2ZW50LmRldGFpbCxcbiAgICAgICAgICBzb3VyY2VFdmVudElkOiBzY2hlbWEucGlwZWxpbmVFdmVudC5zb3VyY2VFdmVudElkLFxuICAgICAgICB9KVxuICAgICAgOiBbXTtcblxuICAgIC8vIExvZyBpbnNpZGUgdGhlIHR4IHNjb3BlIHdoaWxlIHRoZSBvcmcgc2V0IGlzIGluIGhhbmQuIFdBUk4sIG5vdCBlcnJvcjpcbiAgICAvLyBhIG1pc3JvdXRlZCBwcm9kdWNlciBpcyB0aGUgY29tbW9uIGNhdXNlLCBidXQgdGhlIHNhbWUgbGluZSBpcyB0aGUgb25seVxuICAgIC8vIHNpZ25hbCBvZiBhbiBpbmplY3Rpb24gYXR0ZW1wdCwgc28gaXQgbmFtZXMgdGhlIG9yZ3MgaXQgcmVmdXNlZC5cbiAgICBpZiAoZm9yZWlnbkxvY2FsID4gMCkge1xuICAgICAgbG9nZ2VyLndhcm4oJ0Ryb3BwZWQgaW5nZXN0IGV2ZW50cyBmb3Igb3JncyB0aGUgY2FsbGVyIG1heSBub3Qgd3JpdGUgZm9yJywge1xuICAgICAgICBkcm9wcGVkOiBmb3JlaWduTG9jYWwsXG4gICAgICAgIGZvcmVpZ25PcmdJZHM6IFsuLi5mb3JlaWduT3JnSWRzXSxcbiAgICAgICAgYWxsb3dlZE9yZ0lkczogWy4uLmFsbG93ZWRdLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGludmFsaWRUaW1lTG9jYWwgPiAwKSB7XG4gICAgICBsb2dnZXIud2FybignRHJvcHBlZCBpbmdlc3QgZXZlbnRzIHdpdGggaW1wb3NzaWJsZSB0aW1lc3RhbXBzJywge1xuICAgICAgICBkcm9wcGVkOiBpbnZhbGlkVGltZUxvY2FsLFxuICAgICAgICByZWFzb25zOiBbLi4uaW52YWxpZFRpbWVSZWFzb25zXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpbnNlcnRlZDogbGFuZGVkLmxlbmd0aCxcbiAgICAgIHNraXBwZWQ6IHNraXBwZWRMb2NhbCxcbiAgICAgIHVucmVnaXN0ZXJlZFBpcGVsaW5lSWRzOiB1bnJlZ2lzdGVyZWRMb2NhbCxcbiAgICAgIGFmZmVjdGVkT3JnczogWy4uLm5ldyBTZXQobGFuZGVkLm1hcChyID0+IHIub3JnSWQpKV0sXG4gICAgICBkcm9wcGVkRm9yZWlnbk9yZzogZm9yZWlnbkxvY2FsLFxuICAgICAgZHJvcHBlZEludmFsaWRUaW1lOiBpbnZhbGlkVGltZUxvY2FsLFxuICAgICAgZm9yZWlnblBpcGVsaW5lSWRzOiBbLi4uZm9yZWlnblBpcGVsaW5lSWRzTG9jYWxdLFxuICAgICAgaW5zZXJ0ZWRSb3dzOiBsYW5kZWQsXG4gICAgfTtcbiAgfSk7XG5cbiAgaWYgKG9uTWV0cmljKSBlbWl0SW5nZXN0TWV0cmljcyhpbnNlcnRlZFJvd3MsIG9uTWV0cmljKTtcblxuICAvLyBQZXItZGVwbG95IHJvbGx1cC4gQUZURVIgdGhlIGV2ZW50cyBjb21taXQgYW5kIG91dHNpZGUgdGhlaXIgdHJhbnNhY3Rpb246IHRoZVxuICAvLyBldmVudHMgYXJlIHRoZSBkdXJhYmxlIHJlY29yZCBhbmQgYGRvcmFfZGVwbG95bWVudHNgIGlzIGRlcml2ZWQgZnJvbSB0aGVtLCBzb1xuICAvLyBhIHJvbGx1cCBmYWlsdXJlIG11c3Qgbm90IHJvbGwgYmFjayBhbiBpbmdlc3QgdGhhdCBzdWNjZWVkZWQuIFJlYnVpbGRhYmxlXG4gIC8vIGVpdGhlciB3YXkuIGB1cHNlcnREZXBsb3ltZW50c2AgbmV2ZXIgdGhyb3dzIGZvciB0aGF0IHJlYXNvbi5cbiAgYXdhaXQgdXBzZXJ0RGVwbG95bWVudHMoaW5zZXJ0ZWRSb3dzKTtcblxuICAvLyBTdXJmYWNlIHRoZSBzaWxlbnQgc2tpcDogYW4gdW5yZWdpc3RlcmVkIHBpcGVsaW5lIGlkIHVzdWFsbHkgbWVhbnMgdGhlXG4gIC8vIHBpcGVsaW5lIGhhc24ndCBjYWxsZWQgUE9TVCAvcGlwZWxpbmVzL3JlZ2lzdHJ5IHlldCAob3IgaXRzXG4gIC8vIHBiLnBpcGVsaW5lLWlkIHRhZyBpcyBtaXNzaW5nL3VucmVhZGFibGUgYnkgdGhlIExhbWJkYSkuIExvZ2dpbmcgaXRcbiAgLy8gbWFrZXMgYSBicm9rZW4gam9pbiB2aXNpYmxlIGluc3RlYWQgb2YgbG9va2luZyBsaWtlIFwibm8gYWN0aXZpdHlcIi5cbiAgaWYgKHVucmVnaXN0ZXJlZFBpcGVsaW5lSWRzLmxlbmd0aCA+IDApIHtcbiAgICBsb2dnZXIud2FybignUGlwZWxpbmUgZXZlbnRzIHNraXBwZWQ6IHBpcGVsaW5lIGlkIG5vdCBmb3VuZCBpbiByZWdpc3RyeScsIHtcbiAgICAgIGNvdW50OiB1bnJlZ2lzdGVyZWRQaXBlbGluZUlkcy5sZW5ndGgsXG4gICAgICBzYW1wbGU6IHVucmVnaXN0ZXJlZFBpcGVsaW5lSWRzLnNsaWNlKDAsIDMpLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUG9zdC1jb21taXQgY2FjaGUgaW52YWxpZGF0aW9uLiBGaXJlLWFuZC1mb3JnZXQgd2l0aCBsb2dnaW5nIOKAlCBUVEwgaXNcbiAgLy8gc2hvcnQgZW5vdWdoIHRoYXQgYSBtaXNzZWQgaW52YWxpZGF0aW9uIHNlbGYtaGVhbHMuXG4gIGlmIChhZmZlY3RlZE9yZ3MubGVuZ3RoID4gMCkge1xuICAgIHZvaWQgUHJvbWlzZS5hbGwoYWZmZWN0ZWRPcmdzLm1hcCgob3JnKSA9PlxuICAgICAgaW52YWxpZGF0ZU9yZ1JlcG9ydHMob3JnKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdSZXBvcnRpbmcgY2FjaGUgaW52YWxpZGF0aW9uIGZhaWxlZCcsIHsgb3JnSWQ6IG9yZywgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpIH0pO1xuICAgICAgfSksXG4gICAgKSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGluc2VydGVkLFxuICAgIHNraXBwZWQsXG4gICAgdW5yZWdpc3RlcmVkUGlwZWxpbmVJZHMsXG4gICAgYWZmZWN0ZWRPcmdzLFxuICAgIGRyb3BwZWRGb3JlaWduT3JnLFxuICAgIGRyb3BwZWRJbnZhbGlkVGltZSxcbiAgICBmb3JlaWduUGlwZWxpbmVJZHMsXG4gICAgaW5zZXJ0ZWRFeGVjdXRpb25JZHM6IFsuLi5uZXcgU2V0KGluc2VydGVkUm93cy5tYXAoKHIpID0+IHIuZXhlY3V0aW9uSWQpLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gISFpZCkpXSxcbiAgICBpbnNlcnRlZFBpcGVsaW5lSWRzOiBbLi4ubmV3IFNldChpbnNlcnRlZFJvd3MubWFwKChyKSA9PiByLnBpcGVsaW5lSWQpLmZpbHRlcigoaWQpOiBpZCBpcyBzdHJpbmcgPT4gISFpZCkpXSxcbiAgfTtcbn1cbiJdfQ==
|