@pipeline-builder/pipeline-data 4.3.2 → 4.3.4
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/ecosystem-privacy.d.ts +25 -0
- package/lib/api/ecosystem-privacy.js +58 -0
- 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/public-directory.js +1 -1
- package/lib/api/reporting/analytics-queries.d.ts +6 -4
- package/lib/api/reporting/analytics-queries.js +15 -14
- 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/support-cases.d.ts +380 -0
- package/lib/api/support-cases.js +671 -0
- 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 +4858 -2759
- package/lib/database/drizzle-schema.js +13 -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/database/schema/support.d.ts +1093 -0
- package/lib/database/schema/support.js +323 -0
- package/lib/database/tenancy.d.ts +7 -5
- package/lib/database/tenancy.js +1 -1
- package/lib/index.d.ts +7 -3
- package/lib/index.js +11 -3
- package/lib/testing/exports.json +57 -0
- package/package.json +4 -3
|
@@ -25,9 +25,10 @@
|
|
|
25
25
|
* replay lag is beyond its threshold, the request has already written, or there
|
|
26
26
|
* is no tenant context — so this is a no-op until `DB_READ_HOST` is configured.
|
|
27
27
|
*
|
|
28
|
-
* WHY THIS FILE WAS THE FIRST TO OPT IN
|
|
29
|
-
*
|
|
30
|
-
*
|
|
28
|
+
* WHY THIS FILE WAS THE FIRST TO OPT IN. Three conditions decide whether a
|
|
29
|
+
* query may leave the primary, and this file satisfies all three by
|
|
30
|
+
* construction — so they are stated here rather than cited, now that the plan
|
|
31
|
+
* that introduced them is retired:
|
|
31
32
|
*
|
|
32
33
|
* - Nothing here writes. Thirteen aggregate SELECTs, no INSERT, no UPDATE, no
|
|
33
34
|
* `SELECT … FOR UPDATE`, no advisory lock — so none of the four call sites
|
|
@@ -48,6 +49,7 @@
|
|
|
48
49
|
*/
|
|
49
50
|
import { and, eq, gte, inArray, lt, sql } from 'drizzle-orm';
|
|
50
51
|
import { FAILURE_CATEGORY_LABELS, isTeamActionable } from './failure-classifier.js';
|
|
52
|
+
import { liveExposurePredicate } from './plugin-exposure.js';
|
|
51
53
|
import { schema } from '../../database/drizzle-schema.js';
|
|
52
54
|
import { withTenantTxRead } from '../../database/tenancy.js';
|
|
53
55
|
/** The org predicate: one org, or a rollup set. */
|
|
@@ -404,10 +406,7 @@ export async function getPluginVulnerabilities(scope, limit = 50) {
|
|
|
404
406
|
FROM plugin_vuln_exposure v
|
|
405
407
|
LEFT JOIN pipelines p ON p.id::text = v.pipeline_id
|
|
406
408
|
WHERE v.org_id ${scope.orgIds?.length ? sql `= ANY(${scope.orgIds})` : sql `= ${scope.orgId}`}
|
|
407
|
-
AND v
|
|
408
|
-
-- An acceptance past its deadline is not an acceptance.
|
|
409
|
-
AND (v.triage_state NOT IN ('accepted', 'false_positive')
|
|
410
|
-
OR (v.triage_state = 'accepted' AND v.accepted_until IS NOT NULL AND v.accepted_until <= ${now}))
|
|
409
|
+
AND ${liveExposurePredicate(now, 'v')}
|
|
411
410
|
ORDER BY v.critical_count DESC, v.high_count DESC
|
|
412
411
|
LIMIT ${limit}
|
|
413
412
|
`));
|
|
@@ -560,19 +559,21 @@ export async function getUntrackedPipelines(scope) {
|
|
|
560
559
|
* NOW. A Critical that was open last Tuesday and is fixed today is not something to
|
|
561
560
|
* put in front of a manager, and `fixed_at` is what says so.
|
|
562
561
|
*
|
|
563
|
-
*
|
|
564
|
-
*
|
|
565
|
-
*
|
|
566
|
-
*
|
|
562
|
+
* The SAME live predicate as the vulnerability section (`liveExposurePredicate`):
|
|
563
|
+
* an acceptance still in force and a false positive are excluded — someone with
|
|
564
|
+
* the authority to decide has done so in writing — while an acceptance PAST its
|
|
565
|
+
* deadline counts again, because that is what the deadline was for. The two
|
|
566
|
+
* readers once disagreed (this one kept false positives and dropped expired
|
|
567
|
+
* acceptances), so the panel and the needs-attention list contradicted each other.
|
|
567
568
|
*/
|
|
568
569
|
export async function getVulnerablePipelines(scope) {
|
|
570
|
+
const now = new Date();
|
|
569
571
|
const rows = await withTenantTxRead((tx) => tx.execute(sql `
|
|
570
572
|
SELECT DISTINCT pipeline_id
|
|
571
573
|
FROM plugin_vuln_exposure
|
|
572
574
|
WHERE org_id ${scope.orgIds?.length ? sql `= ANY(${scope.orgIds})` : sql `= ${scope.orgId}`}
|
|
573
|
-
AND fixed_at IS NULL
|
|
574
575
|
AND critical_count > 0
|
|
575
|
-
AND
|
|
576
|
+
AND ${liveExposurePredicate(now)}
|
|
576
577
|
`));
|
|
577
578
|
return rowsOf(rows).map((r) => String(r.pipeline_id));
|
|
578
579
|
}
|
|
@@ -623,4 +624,4 @@ function isoOrNull(v) {
|
|
|
623
624
|
const d = v instanceof Date ? v : new Date(String(v));
|
|
624
625
|
return Number.isNaN(d.getTime()) ? null : d.toISOString();
|
|
625
626
|
}
|
|
626
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLXF1ZXJpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3JlcG9ydGluZy9hbmFseXRpY3MtcXVlcmllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2Q0c7QUFFSCxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0QsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDcEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBVzdELG1EQUFtRDtBQUNuRCxTQUFTLFlBQVksQ0FBQyxHQUFrQyxFQUFFLEtBQXFCO0lBQzdFLE9BQU8sS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDNUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFZLEVBQUUsS0FBSyxDQUFDLEtBQWMsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFtQkQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLG9CQUFvQixDQUFDLEtBQXFCLEVBQUUsS0FBSyxHQUFHLEVBQUU7SUFDMUUsTUFBTSxJQUFJLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUE7Ozs7Ozs7Ozs7dUJBVXJDLEtB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Q3RFLFNBQVMsTUFBTSxDQUFDLE1BQWU7SUFDN0IsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUFFLE9BQU8sTUFBd0MsQ0FBQztJQUMzRSxNQUFNLElBQUksR0FBSSxNQUE2QixFQUFFLElBQUksQ0FBQztJQUNsRCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQXNDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUMzRSxDQUFDO0FBRUQsc0VBQXNFO0FBQ3RFLFNBQVMsR0FBRyxDQUFDLENBQVU7SUFDckIsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckQsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsQ0FBVTtJQUMzQixJQUFJLENBQUMsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3BCLE1BQU0sQ0FBQyxHQUFHLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEQsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUM1RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIHF1ZXJpZXMgdGhlIGJlc3Bva2UgcmVwb3J0IHNlY3Rpb25zIHJlYWQuXG4gKlxuICogQWxsIG9mIHRoZW0gZ28gdGhyb3VnaCBgZXhlY3V0aW9uX2RhaWx5X3JvbGx1cHNgLCBgZG9yYV9kZXBsb3ltZW50c2AsXG4gKiBgcGlwZWxpbmVfcGx1Z2luX3Jlc29sdXRpb25gIG9yIGBwbHVnaW5fdnVsbl9leHBvc3VyZWAg4oCUIG5ldmVyIHJhd1xuICogYHBpcGVsaW5lX2V2ZW50c2AuIFRoYXQgaXMgdGhlIHdob2xlIHBvaW50IG9mIHRob3NlIHRhYmxlczogYSBxdWFydGVybHkgcmVwb3J0XG4gKiBvdmVyIGEgYnVzeSBvcmcgY29zdHMgYSBmZXcgaHVuZHJlZCByb3dzLCBhbmQga2VlcHMgd29ya2luZyBhZnRlciByZXRlbnRpb24gaGFzXG4gKiBzd2VwdCB0aGUgZXZlbnRzLlxuICpcbiAqIFRXTyBSVUxFUyBFVkVSWSBRVUVSWSBIRVJFIEZPTExPV1M6XG4gKlxuICogIC0gTk9USElORyBJUyBQRVItUEVSU09OLiBFdmVyeSBhZ2dyZWdhdGUgaXMgcGVyIHBpcGVsaW5lLCBwZXIgc3RhZ2UsIHBlclxuICogICAgY2F0ZWdvcnkgb3IgcGVyIGVudmlyb25tZW50LiBUaGUgc2VjdGlvbiByZWdpc3RyeSByZWZ1c2VzIGEgcGVyLXBlcnNvbiBpZCBhdFxuICogICAgcmVnaXN0cmF0aW9uOyB0aGVzZSBxdWVyaWVzIG1ha2Ugc3VyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHJlZ2lzdGVyLlxuICogIC0gQSBaRVJPIEFORCBBIEJMSU5EIFNQT1QgQVJFIERJRkZFUkVOVC4gV2hlcmUgYSBudW1iZXIgY2FuIGJlIGFic2VudCBmb3IgbGFja1xuICogICAgb2YgZGF0YSByYXRoZXIgdGhhbiBsYWNrIG9mIGFjdGl2aXR5LCB0aGUgc2hhcGUgY2FycmllcyB0aGF0IChgbnVsbGAsIGFcbiAqICAgIGBjb3ZlcmFnZWAgY291bnQsIGFuIGV4cGxpY2l0IHJlYXNvbikgaW5zdGVhZCBvZiBjb2xsYXBzaW5nIHRvIDAuXG4gKlxuICogUkVBRFMgR08gVE8gVEhFIFJFUExJQ0EgV0hFTiBPTkUgRVhJU1RTLiBFdmVyeSBxdWVyeSBiZWxvdyBydW5zIHRocm91Z2hcbiAqIGB3aXRoVGVuYW50VHhSZWFkYCwgdGhlIHJlYWQtb25seSB2YXJpYW50IG9mIGB3aXRoVGVuYW50VHhgLiBJdCBzZXRzIHRoZVxuICogaWRlbnRpY2FsIFJMUyBHVUNzLCBhZGRzIGBTRVQgVFJBTlNBQ1RJT04gUkVBRCBPTkxZYCwgYW5kIGZhbGxzIGJhY2sgdG8gdGhlXG4gKiBwcmltYXJ5IGF1dG9tYXRpY2FsbHkgd2hlbmV2ZXIgdGhlcmUgaXMgbm8gcmVwbGljYSwgdGhlIGtpbGwgc3dpdGNoIGlzIG9mZixcbiAqIHJlcGxheSBsYWcgaXMgYmV5b25kIGl0cyB0aHJlc2hvbGQsIHRoZSByZXF1ZXN0IGhhcyBhbHJlYWR5IHdyaXR0ZW4sIG9yIHRoZXJlXG4gKiBpcyBubyB0ZW5hbnQgY29udGV4dCDigJQgc28gdGhpcyBpcyBhIG5vLW9wIHVudGlsIGBEQl9SRUFEX0hPU1RgIGlzIGNvbmZpZ3VyZWQuXG4gKlxuICogV0hZIFRISVMgRklMRSBXQVMgVEhFIEZJUlNUIFRPIE9QVCBJTiAoUGhhc2UgNCBvZlxuICogZG9jcy9wbGFucy9wb3N0Z3Jlcy1yZWFkLXdyaXRlLXNwbGl0Lm1kKS4gSXQgc2F0aXNmaWVzIGFsbCB0aHJlZSBvZiB0aGVcbiAqIHBsYW4ncyBcImxlYXZlIGl0IG9uIHRoZSBwcmltYXJ5XCIgZXhjbHVzaW9ucyBieSBjb25zdHJ1Y3Rpb246XG4gKlxuICogICAtIE5vdGhpbmcgaGVyZSB3cml0ZXMuIFRoaXJ0ZWVuIGFnZ3JlZ2F0ZSBTRUxFQ1RzLCBubyBJTlNFUlQsIG5vIFVQREFURSwgbm9cbiAqICAgICBgU0VMRUNUIOKApiBGT1IgVVBEQVRFYCwgbm8gYWR2aXNvcnkgbG9jayDigJQgc28gbm9uZSBvZiB0aGUgZm91ciBjYWxsIHNpdGVzXG4gKiAgICAgdGhlIFBoYXNlIDBhIGF1ZGl0IGZvdW5kIGhpZGluZyBiZWhpbmQgcmVhZC1sb29raW5nIGNvZGUuXG4gKiAgIC0gTm90aGluZyBoZXJlIGZlZWRzIGFuIEFVVEhPUklaQVRJT04gZGVjaXNpb24uIFRoZXNlIGFyZSBkYXNoYm9hcmRcbiAqICAgICBhZ2dyZWdhdGVzOyBhIHN0YWxlIHBlcm1pc3Npb24gY2hlY2sgaXMgYSBzZWN1cml0eSBidWcsIGEgc3RhbGUgY2hhcnQgaXNcbiAqICAgICBhIHN0YWxlIGNoYXJ0LlxuICogICAtIE5vYm9keSBpcyBhYm91dCB0byBBQ1Qgb24gdGhlIHJlc3VsdC4gQSB1c2VyIHdobyBqdXN0IGNyZWF0ZWQgYSBwaXBlbGluZVxuICogICAgIGxvb2tzIGZvciBpdCBpbiBhIGxpc3QsIG5vdCBpbiBhIDMwLWRheSBmYWlsdXJlLXJhdGUgcm9sbHVwLlxuICpcbiAqIEFuZCBpdCBpcyB0aGUgYmVzdCBvZmZsb2FkIGNhbmRpZGF0ZSBmb3IgdGhlIHNhbWUgcmVhc29uIGl0IGlzIHNhZmU6IHRoZXNlXG4gKiBhcmUgdGhlIGhlYXZpZXN0IHF1ZXJpZXMgaW4gdGhlIHBhY2thZ2UsIHNjYW5uaW5nIHRpbWUgcmFuZ2VzIHJhdGhlciB0aGFuXG4gKiBmZXRjaGluZyByb3dzIGJ5IGlkLlxuICpcbiAqIGBTRVQgVFJBTlNBQ1RJT04gUkVBRCBPTkxZYCBhcHBsaWVzIG9uIHRoZSBQUklNQVJZIHBhdGggdG9vLCBzbyBpZiBhIHdyaXRlXG4gKiBpcyBldmVyIGFkZGVkIGJlbG93IGl0IGZhaWxzIGhlcmUsIGxvdWRseSwgcmF0aGVyIHRoYW4gYXQgd2hpY2hldmVyIHRhcmdldFxuICogdGhlIHJlYWQgaGFwcGVuZWQgdG8gbGFuZCBvbi5cbiAqL1xuXG5pbXBvcnQgeyBhbmQsIGVxLCBndGUsIGluQXJyYXksIGx0LCBzcWwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgeyBGQUlMVVJFX0NBVEVHT1JZX0xBQkVMUywgaXNUZWFtQWN0aW9uYWJsZSB9IGZyb20gJy4vZmFpbHVyZS1jbGFzc2lmaWVyLmpzJztcbmltcG9ydCB7IHNjaGVtYSB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL2RyaXp6bGUtc2NoZW1hLmpzJztcbmltcG9ydCB0eXBlIHsgRmFpbHVyZUNhdGVnb3J5IH0gZnJvbSAnLi4vLi4vZGF0YWJhc2Uvc2NoZW1hL3JlcG9ydGluZy1hbmFseXRpY3MuanMnO1xuaW1wb3J0IHsgd2l0aFRlbmFudFR4UmVhZCB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL3RlbmFuY3kuanMnO1xuXG4vKiogVGhlIHdpbmRvdyBhbmQgb3JnIHNjb3BlIGV2ZXJ5IHF1ZXJ5IHRha2VzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBbmFseXRpY3NTY29wZSB7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIC8qKiBgW3NlbGYsIC4uLmRlc2NlbmRhbnRzXWAgZm9yIGEgcm9sbHVwOyB1bmRlZmluZWQgPSB0aGlzIG9yZyBvbmx5LiAqL1xuICBvcmdJZHM/OiBzdHJpbmdbXTtcbiAgZnJvbTogc3RyaW5nO1xuICB0bzogc3RyaW5nO1xufVxuXG4vKiogVGhlIG9yZyBwcmVkaWNhdGU6IG9uZSBvcmcsIG9yIGEgcm9sbHVwIHNldC4gKi9cbmZ1bmN0aW9uIG9yZ1ByZWRpY2F0ZShjb2w6IFBhcmFtZXRlcnM8dHlwZW9mIGluQXJyYXk+WzBdLCBzY29wZTogQW5hbHl0aWNzU2NvcGUpIHtcbiAgcmV0dXJuIHNjb3BlLm9yZ0lkcyAmJiBzY29wZS5vcmdJZHMubGVuZ3RoID4gMFxuICAgID8gaW5BcnJheShjb2wsIHNjb3BlLm9yZ0lkcylcbiAgICA6IGVxKGNvbCBhcyBuZXZlciwgc2NvcGUub3JnSWQgYXMgbmV2ZXIpO1xufVxuXG4vKiogT25lIHBpcGVsaW5lJ3MgbGluZSBpbiB0aGUgYnJlYWtkb3duLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZUJyZWFrZG93blJvdyB7XG4gIHBpcGVsaW5lSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBwcm9qZWN0OiBzdHJpbmcgfCBudWxsO1xuICBydW5zOiBudW1iZXI7XG4gIHN1Y2NlZWRlZDogbnVtYmVyO1xuICBmYWlsZWQ6IG51bWJlcjtcbiAgc3VjY2Vzc1BjdDogbnVtYmVyIHwgbnVsbDtcbiAgcDk1TXM6IG51bWJlciB8IG51bGw7XG4gIGRlcGxveXM6IG51bWJlcjtcbiAgLyoqIFRoZSBtb3N0IHJlY2VudCBmYWlsdXJlJ3MgZGF5IGFuZCBzdGFnZSwgZm9yIFwid2hhdCB0byBsb29rIGF0IGZpcnN0XCIuICovXG4gIGxhc3RGYWlsdXJlQXQ6IHN0cmluZyB8IG51bGw7XG4gIGxhc3RGYWlsdXJlU3RhZ2U6IHN0cmluZyB8IG51bGw7XG4gIGJ1aWxkU2Vjb25kczogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBlci1waXBlbGluZSBkZWxpdmVyeSwgd29yc3QgZmlyc3QuXG4gKlxuICogV09SU1QgRklSU1QsIGFuZCBjYXBwZWQsIGJlY2F1c2UgdGhlIHBvaW50IG9mIHRoZSBzZWN0aW9uIGlzIFwid2hlcmUgc2hvdWxkXG4gKiBhdHRlbnRpb24gZ29cIi4gQSBsaXN0IHNvcnRlZCBieSBuYW1lLCBvciBhbiB1bmJvdW5kZWQgb25lLCBpcyBhIGRhdGEgZHVtcDogdGhlXG4gKiBsZWFkIHN0aWxsIGhhcyB0byBmaW5kIHRoZSBwcm9ibGVtLCB3aGljaCBpcyB0aGUgd29yayB0aGUgcmVwb3J0IHdhcyBzdXBwb3NlZCB0b1xuICogZG8uIFRpZXMgYnJlYWsgb24gdm9sdW1lLCBzbyBhIDUwJS1zdWNjZXNzIHBpcGVsaW5lIHRoYXQgcmFuIHR3aWNlIGRvZXMgbm90XG4gKiBvdXRyYW5rIG9uZSB0aGF0IHJhbiB0d28gaHVuZHJlZCB0aW1lcy5cbiAqXG4gKiBgc3VjY2Vzc1BjdGAgaXMgTlVMTCBmb3IgYSBwaXBlbGluZSB3aXRoIG5vIHJ1bnMgaW4gdGhlIHdpbmRvdyDigJQgbm90IDAuIEFcbiAqIHBpcGVsaW5lIG5vYm9keSByYW4gaXMgbm90IGEgcGlwZWxpbmUgdGhhdCBmYWlsZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQaXBlbGluZUJyZWFrZG93bihzY29wZTogQW5hbHl0aWNzU2NvcGUsIGxpbWl0ID0gMTApOiBQcm9taXNlPFBpcGVsaW5lQnJlYWtkb3duUm93W10+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeFJlYWQoKHR4KSA9PiB0eC5leGVjdXRlKHNxbGBcbiAgICBXSVRIIHRvdGFscyBBUyAoXG4gICAgICBTRUxFQ1RcbiAgICAgICAgci5waXBlbGluZV9pZCxcbiAgICAgICAgU1VNKHIucnVucyk6OmludCBBUyBydW5zLFxuICAgICAgICBTVU0oci5zdWNjZWVkZWQpOjppbnQgQVMgc3VjY2VlZGVkLFxuICAgICAgICBTVU0oci5mYWlsZWQpOjppbnQgQVMgZmFpbGVkLFxuICAgICAgICBNQVgoci5wOTVfbXMpOjppbnQgQVMgcDk1X21zLFxuICAgICAgICBTVU0oci5idWlsZF9zZWNvbmRzKTo6aW50IEFTIGJ1aWxkX3NlY29uZHNcbiAgICAgIEZST00gZXhlY3V0aW9uX2RhaWx5X3JvbGx1cHMgclxuICAgICAgV0hFUkUgci5vcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgICAgQU5EIHIuZGF5ID49ICR7c2NvcGUuZnJvbX06OnRpbWVzdGFtcHR6IEFORCByLmRheSA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgICAgICAtLSBUaGUgcGlwZWxpbmUtbGV2ZWwgZ3JhaW4gb25seTogc3VtbWluZyB0aGUgc3RhZ2Ugcm93cyB0b28gd291bGQgY291bnRcbiAgICAgICAgLS0gZXZlcnkgcnVuIG9uY2UgcGVyIHN0YWdlLlxuICAgICAgICBBTkQgci5zdGFnZV9uYW1lID0gJydcbiAgICAgIEdST1VQIEJZIHIucGlwZWxpbmVfaWRcbiAgICApLFxuICAgIGRlcGxveXMgQVMgKFxuICAgICAgU0VMRUNUIHBpcGVsaW5lX2lkLCBDT1VOVCgqKTo6aW50IEFTIGRlcGxveXNcbiAgICAgIEZST00gZG9yYV9kZXBsb3ltZW50c1xuICAgICAgV0hFUkUgb3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICAgIEFORCBkZXBsb3llZF9hdCA+PSAke3Njb3BlLmZyb219Ojp0aW1lc3RhbXB0eiBBTkQgZGVwbG95ZWRfYXQgPCAke3Njb3BlLnRvfTo6dGltZXN0YW1wdHpcbiAgICAgICAgQU5EIHN1Y2NlZWRlZCA9IHRydWVcbiAgICAgIEdST1VQIEJZIHBpcGVsaW5lX2lkXG4gICAgKSxcbiAgICBsYXN0X2ZhaWwgQVMgKFxuICAgICAgLS0gVGhlIG1vc3QgcmVjZW50IGZhaWxpbmcgU1RBR0Ugcm93IHBlciBwaXBlbGluZTogd2hhdCB0byBsb29rIGF0IGZpcnN0LlxuICAgICAgU0VMRUNUIERJU1RJTkNUIE9OIChwaXBlbGluZV9pZCkgcGlwZWxpbmVfaWQsIGRheSwgc3RhZ2VfbmFtZVxuICAgICAgRlJPTSBleGVjdXRpb25fZGFpbHlfcm9sbHVwc1xuICAgICAgV0hFUkUgb3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICAgIEFORCBkYXkgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIGRheSA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgICAgICBBTkQgc3RhZ2VfbmFtZSA8PiAnJyBBTkQgZmFpbGVkID4gMFxuICAgICAgT1JERVIgQlkgcGlwZWxpbmVfaWQsIGRheSBERVNDLCBmYWlsZWQgREVTQ1xuICAgIClcbiAgICBTRUxFQ1RcbiAgICAgIHQucGlwZWxpbmVfaWQsXG4gICAgICBwLnBpcGVsaW5lX25hbWUsXG4gICAgICBwLnByb2plY3QsXG4gICAgICB0LnJ1bnMsIHQuc3VjY2VlZGVkLCB0LmZhaWxlZCwgdC5wOTVfbXMsIHQuYnVpbGRfc2Vjb25kcyxcbiAgICAgIENPQUxFU0NFKGQuZGVwbG95cywgMCkgQVMgZGVwbG95cyxcbiAgICAgIGYuZGF5IEFTIGxhc3RfZmFpbHVyZV9hdCxcbiAgICAgIGYuc3RhZ2VfbmFtZSBBUyBsYXN0X2ZhaWx1cmVfc3RhZ2UsXG4gICAgICBDQVNFIFdIRU4gdC5ydW5zID4gMCBUSEVOIFJPVU5EKCh0LnN1Y2NlZWRlZDo6bnVtZXJpYyAvIHQucnVucykgKiAxMDAsIDEpIEVMU0UgTlVMTCBFTkQgQVMgc3VjY2Vzc19wY3RcbiAgICBGUk9NIHRvdGFscyB0XG4gICAgTEVGVCBKT0lOIGRlcGxveXMgZCBPTiBkLnBpcGVsaW5lX2lkID0gdC5waXBlbGluZV9pZFxuICAgIExFRlQgSk9JTiBsYXN0X2ZhaWwgZiBPTiBmLnBpcGVsaW5lX2lkID0gdC5waXBlbGluZV9pZFxuICAgIExFRlQgSk9JTiBwaXBlbGluZXMgcCBPTiBwLmlkOjp0ZXh0ID0gdC5waXBlbGluZV9pZFxuICAgIC0tIFdvcnN0IGZpcnN0OiBsb3dlc3Qgc3VjY2VzcyByYXRlLCB0aGVuIG1vc3QgcnVucywgc28gYSA1MCUgcGlwZWxpbmUgdGhhdCByYW5cbiAgICAtLSB0d2ljZSBkb2VzIG5vdCBvdXRyYW5rIG9uZSB0aGF0IHJhbiB0d28gaHVuZHJlZCB0aW1lcy5cbiAgICBPUkRFUiBCWSBzdWNjZXNzX3BjdCBBU0MgTlVMTFMgTEFTVCwgdC5ydW5zIERFU0NcbiAgICBMSU1JVCAke2xpbWl0fVxuICBgKSk7XG4gIHJldHVybiByb3dzT2Yocm93cykubWFwKChyKSA9PiAoe1xuICAgIHBpcGVsaW5lSWQ6IFN0cmluZyhyLnBpcGVsaW5lX2lkKSxcbiAgICBwaXBlbGluZU5hbWU6IChyLnBpcGVsaW5lX25hbWUgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICBwcm9qZWN0OiAoci5wcm9qZWN0IGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgcnVuczogbnVtKHIucnVucyksXG4gICAgc3VjY2VlZGVkOiBudW0oci5zdWNjZWVkZWQpLFxuICAgIGZhaWxlZDogbnVtKHIuZmFpbGVkKSxcbiAgICBzdWNjZXNzUGN0OiByLnN1Y2Nlc3NfcGN0ID09PSBudWxsID8gbnVsbCA6IE51bWJlcihyLnN1Y2Nlc3NfcGN0KSxcbiAgICBwOTVNczogci5wOTVfbXMgPT09IG51bGwgPyBudWxsIDogbnVtKHIucDk1X21zKSxcbiAgICBkZXBsb3lzOiBudW0oci5kZXBsb3lzKSxcbiAgICBsYXN0RmFpbHVyZUF0OiBpc29Pck51bGwoci5sYXN0X2ZhaWx1cmVfYXQpLFxuICAgIGxhc3RGYWlsdXJlU3RhZ2U6IChyLmxhc3RfZmFpbHVyZV9zdGFnZSBhcyBzdHJpbmcgfCBudWxsKSA/PyBudWxsLFxuICAgIGJ1aWxkU2Vjb25kczogbnVtKHIuYnVpbGRfc2Vjb25kcyksXG4gIH0pKTtcbn1cblxuLyoqIE9uZSBmYWlsdXJlIGNhdGVnb3J5J3Mgc2hhcmUgb2YgdGhlIHBlcmlvZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbHVyZUNhdGVnb3J5Um93IHtcbiAgY2F0ZWdvcnk6IEZhaWx1cmVDYXRlZ29yeTtcbiAgbGFiZWw6IHN0cmluZztcbiAgY291bnQ6IG51bWJlcjtcbiAgc2hhcmVQY3Q6IG51bWJlcjtcbiAgLyoqIFdoZXRoZXIgdGhlIHRlYW0gY2FuIGFjdCBvbiBpdCwgb3IgaXQgaGFwcGVuZWQgdG8gdGhlbS4gKi9cbiAgdGVhbUFjdGlvbmFibGU6IGJvb2xlYW47XG4gIC8qKiBDaGFuZ2UgdnMgdGhlIHByZXZpb3VzIHBlcmlvZCwgaW4gZmFpbHVyZXMuICovXG4gIGNoYW5nZTogbnVtYmVyIHwgbnVsbDtcbiAgLyoqIFRoZSBwaXBlbGluZXMgaXQgaGl0IGhhcmRlc3QuICovXG4gIHRvcFBpcGVsaW5lczogQXJyYXk8eyBwaXBlbGluZUlkOiBzdHJpbmc7IHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgbnVsbDsgY291bnQ6IG51bWJlciB9Pjtcbn1cblxuLyoqXG4gKiBGYWlsdXJlcyBieSBjYXRlZ29yeSwgd2l0aCB0aGUgcHJldmlvdXMgcGVyaW9kJ3MgY291bnRzIGZvciB0aGUgdHJlbmQuXG4gKlxuICogU1BMSVRTIEFDVElPTkFCTEUgRlJPTSBOT1QuIEEgd2VlayB3aG9zZSBmYWlsdXJlcyB3ZXJlIGFsbCBjbG91ZCB0aHJvdHRsaW5nIGlzIGFcbiAqIGRpZmZlcmVudCBjb252ZXJzYXRpb24gZnJvbSBvbmUgd2hvc2UgZmFpbHVyZXMgd2VyZSBhbGwgYnJva2VuIHRlc3RzLCBhbmRcbiAqIHByZXNlbnRpbmcgdGhlbSBpbiBvbmUgcmFua2VkIGxpc3QgaW52aXRlcyBleGFjdGx5IHRoZSB3cm9uZyBjb25jbHVzaW9uIOKAlCBhIHRlYW1cbiAqIGJlaW5nIGFza2VkIHRvIGZpeCBhbiBBV1MgY2FwYWNpdHkgcHJvYmxlbS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEZhaWx1cmVBbmFseXNpcyhcbiAgc2NvcGU6IEFuYWx5dGljc1Njb3BlLFxuICBwcmV2aW91cz86IHsgZnJvbTogc3RyaW5nOyB0bzogc3RyaW5nIH0sXG4pOiBQcm9taXNlPHsgY2F0ZWdvcmllczogRmFpbHVyZUNhdGVnb3J5Um93W107IHRvdGFsOiBudW1iZXI7IGFjdGlvbmFibGVUb3RhbDogbnVtYmVyIH0+IHtcbiAgY29uc3QgY291bnRzID0gYXdhaXQgY2F0ZWdvcnlDb3VudHMoc2NvcGUpO1xuICBjb25zdCBwcmlvciA9IHByZXZpb3VzID8gYXdhaXQgY2F0ZWdvcnlDb3VudHMoeyAuLi5zY29wZSwgLi4ucHJldmlvdXMgfSkgOiBudWxsO1xuICBjb25zdCB0b3RhbCA9IFsuLi5jb3VudHMudmFsdWVzKCldLnJlZHVjZSgocywgdikgPT4gcyArIHYuY291bnQsIDApO1xuICBjb25zdCB0b3BCeUNhdGVnb3J5ID0gYXdhaXQgdG9wUGlwZWxpbmVzQnlDYXRlZ29yeShzY29wZSk7XG5cbiAgY29uc3QgY2F0ZWdvcmllcyA9IFsuLi5jb3VudHMuZW50cmllcygpXVxuICAgIC5tYXAoKFtjYXRlZ29yeSwgdl0pID0+ICh7XG4gICAgICBjYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBGQUlMVVJFX0NBVEVHT1JZX0xBQkVMU1tjYXRlZ29yeV0gPz8gY2F0ZWdvcnksXG4gICAgICBjb3VudDogdi5jb3VudCxcbiAgICAgIHNoYXJlUGN0OiB0b3RhbCA+IDAgPyBOdW1iZXIoKCh2LmNvdW50IC8gdG90YWwpICogMTAwKS50b0ZpeGVkKDEpKSA6IDAsXG4gICAgICB0ZWFtQWN0aW9uYWJsZTogaXNUZWFtQWN0aW9uYWJsZShjYXRlZ29yeSksXG4gICAgICBjaGFuZ2U6IHByaW9yID8gdi5jb3VudCAtIChwcmlvci5nZXQoY2F0ZWdvcnkpPy5jb3VudCA/PyAwKSA6IG51bGwsXG4gICAgICB0b3BQaXBlbGluZXM6IHRvcEJ5Q2F0ZWdvcnkuZ2V0KGNhdGVnb3J5KSA/PyBbXSxcbiAgICB9KSlcbiAgICAuc29ydCgoYSwgYikgPT4gYi5jb3VudCAtIGEuY291bnQpO1xuXG4gIHJldHVybiB7XG4gICAgY2F0ZWdvcmllcyxcbiAgICB0b3RhbCxcbiAgICBhY3Rpb25hYmxlVG90YWw6IGNhdGVnb3JpZXMuZmlsdGVyKChjKSA9PiBjLnRlYW1BY3Rpb25hYmxlKS5yZWR1Y2UoKHMsIGMpID0+IHMgKyBjLmNvdW50LCAwKSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2F0ZWdvcnlDb3VudHMoc2NvcGU6IEFuYWx5dGljc1Njb3BlKTogUHJvbWlzZTxNYXA8RmFpbHVyZUNhdGVnb3J5LCB7IGNvdW50OiBudW1iZXIgfT4+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeFJlYWQoKHR4KSA9PiB0eC5leGVjdXRlKHNxbGBcbiAgICBTRUxFQ1Qga2V5IEFTIGNhdGVnb3J5LCBTVU0odmFsdWU6OmludCk6OmludCBBUyBjb3VudFxuICAgIEZST00gZXhlY3V0aW9uX2RhaWx5X3JvbGx1cHMgciwganNvbmJfZWFjaChyLmZhaWx1cmVzX2J5X2NhdGVnb3J5KVxuICAgIFdIRVJFIHIub3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICBBTkQgci5kYXkgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIHIuZGF5IDwgJHtzY29wZS50b306OnRpbWVzdGFtcHR6XG4gICAgICBBTkQgci5zdGFnZV9uYW1lID0gJydcbiAgICBHUk9VUCBCWSBrZXlcbiAgYCkpO1xuICBjb25zdCBvdXQgPSBuZXcgTWFwPEZhaWx1cmVDYXRlZ29yeSwgeyBjb3VudDogbnVtYmVyIH0+KCk7XG4gIGZvciAoY29uc3QgciBvZiByb3dzT2Yocm93cykpIG91dC5zZXQoci5jYXRlZ29yeSBhcyBGYWlsdXJlQ2F0ZWdvcnksIHsgY291bnQ6IG51bShyLmNvdW50KSB9KTtcbiAgcmV0dXJuIG91dDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gdG9wUGlwZWxpbmVzQnlDYXRlZ29yeShcbiAgc2NvcGU6IEFuYWx5dGljc1Njb3BlLFxuICBwZXJDYXRlZ29yeSA9IDMsXG4pOiBQcm9taXNlPE1hcDxGYWlsdXJlQ2F0ZWdvcnksIEFycmF5PHsgcGlwZWxpbmVJZDogc3RyaW5nOyBwaXBlbGluZU5hbWU6IHN0cmluZyB8IG51bGw7IGNvdW50OiBudW1iZXIgfT4+PiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUIGNhdGVnb3J5LCBwaXBlbGluZV9pZCwgcGlwZWxpbmVfbmFtZSwgY291bnQgRlJPTSAoXG4gICAgICBTRUxFQ1RcbiAgICAgICAgZS5rZXkgQVMgY2F0ZWdvcnksXG4gICAgICAgIHIucGlwZWxpbmVfaWQsXG4gICAgICAgIHAucGlwZWxpbmVfbmFtZSxcbiAgICAgICAgU1VNKGUudmFsdWU6OmludCk6OmludCBBUyBjb3VudCxcbiAgICAgICAgUk9XX05VTUJFUigpIE9WRVIgKFBBUlRJVElPTiBCWSBlLmtleSBPUkRFUiBCWSBTVU0oZS52YWx1ZTo6aW50KSBERVNDKSBBUyByblxuICAgICAgLS0gQ1JPU1MgSk9JTiBMQVRFUkFMLCBub3QgYSBjb21tYSBqb2luLiBXaXRoIEZST00gYSwgZihhLngpIGUgTEVGVCBKT0lOIGIsXG4gICAgICAtLSB0aGUgTEVGVCBKT0lOIGJpbmRzIHRvIGUgYWxvbmUgYW5kIHIgZmFsbHMgb3V0IG9mIHNjb3BlIGluIGl0cyBPTiBjbGF1c2VcbiAgICAgIC0tIChcImludmFsaWQgcmVmZXJlbmNlIHRvIEZST00tY2xhdXNlIGVudHJ5XCIpLiBUaGUgZXhwbGljaXQgbGF0ZXJhbCBrZWVwcyBhbGxcbiAgICAgIC0tIHRocmVlIGluIG9uZSBqb2luIHRyZWUuXG4gICAgICBGUk9NIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzIHJcbiAgICAgIENST1NTIEpPSU4gTEFURVJBTCBqc29uYl9lYWNoKHIuZmFpbHVyZXNfYnlfY2F0ZWdvcnkpIGVcbiAgICAgIExFRlQgSk9JTiBwaXBlbGluZXMgcCBPTiBwLmlkOjp0ZXh0ID0gci5waXBlbGluZV9pZFxuICAgICAgV0hFUkUgci5vcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgICAgQU5EIHIuZGF5ID49ICR7c2NvcGUuZnJvbX06OnRpbWVzdGFtcHR6IEFORCByLmRheSA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgICAgICBBTkQgci5zdGFnZV9uYW1lID0gJydcbiAgICAgIEdST1VQIEJZIGUua2V5LCByLnBpcGVsaW5lX2lkLCBwLnBpcGVsaW5lX25hbWVcbiAgICApIHJhbmtlZFxuICAgIFdIRVJFIHJuIDw9ICR7cGVyQ2F0ZWdvcnl9XG4gIGApKTtcbiAgY29uc3Qgb3V0ID0gbmV3IE1hcDxGYWlsdXJlQ2F0ZWdvcnksIEFycmF5PHsgcGlwZWxpbmVJZDogc3RyaW5nOyBwaXBlbGluZU5hbWU6IHN0cmluZyB8IG51bGw7IGNvdW50OiBudW1iZXIgfT4+KCk7XG4gIGZvciAoY29uc3QgciBvZiByb3dzT2Yocm93cykpIHtcbiAgICBjb25zdCBrZXkgPSByLmNhdGVnb3J5IGFzIEZhaWx1cmVDYXRlZ29yeTtcbiAgICBjb25zdCBsaXN0ID0gb3V0LmdldChrZXkpID8/IFtdO1xuICAgIGxpc3QucHVzaCh7XG4gICAgICBwaXBlbGluZUlkOiBTdHJpbmcoci5waXBlbGluZV9pZCksXG4gICAgICBwaXBlbGluZU5hbWU6IChyLnBpcGVsaW5lX25hbWUgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICAgIGNvdW50OiBudW0oci5jb3VudCksXG4gICAgfSk7XG4gICAgb3V0LnNldChrZXksIGxpc3QpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBPbmUgc3RhZ2UncyB0aW1pbmcsIGZvciB0aGUgZHJpbGwtZG93bi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZ2VQZXJmb3JtYW5jZVJvdyB7XG4gIHN0YWdlTmFtZTogc3RyaW5nO1xuICBydW5zOiBudW1iZXI7XG4gIHA1ME1zOiBudW1iZXIgfCBudWxsO1xuICBwOTVNczogbnVtYmVyIHwgbnVsbDtcbiAgLyoqIENoYW5nZSBpbiBwOTUgdnMgdGhlIHByZXZpb3VzIHBlcmlvZCwgYXMgYSBwZXJjZW50YWdlLiAqL1xuICBwOTVDaGFuZ2VQY3Q6IG51bWJlciB8IG51bGw7XG4gIGZhaWxlZDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBlci1zdGFnZSB0aW1pbmdzIGZvciBvbmUgcGlwZWxpbmUsIHNsb3dlc3QgZmlyc3QuXG4gKlxuICogVGhlIHNlY3Rpb24gYSBsZWFkIG9wZW5zIGFmdGVyIHRoZSBicmVha2Rvd24gc2F5cyBhIHBpcGVsaW5lIGdvdCBzbG93ZXI6IFwid2hpY2hcbiAqIHN0YWdlXCIgaXMgdGhlIG5leHQgcXVlc3Rpb24sIGFuZCBhbnN3ZXJpbmcgaXQgZnJvbSByYXcgZXZlbnRzIHdvdWxkIG1lYW4gYVxuICogc2Vjb25kIHNjYW4gb2YgdGhlIHNhbWUgd2luZG93LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U3RhZ2VQZXJmb3JtYW5jZShcbiAgc2NvcGU6IEFuYWx5dGljc1Njb3BlLFxuICBwaXBlbGluZUlkOiBzdHJpbmcsXG4gIHByZXZpb3VzPzogeyBmcm9tOiBzdHJpbmc7IHRvOiBzdHJpbmcgfSxcbik6IFByb21pc2U8U3RhZ2VQZXJmb3JtYW5jZVJvd1tdPiB7XG4gIGNvbnN0IGN1cnJlbnQgPSBhd2FpdCBzdGFnZVJvd3Moc2NvcGUsIHBpcGVsaW5lSWQpO1xuICBjb25zdCBwcmlvcjogTWFwPHN0cmluZywgeyBwOTVNczogbnVtYmVyIHwgbnVsbCB9PiA9IHByZXZpb3VzXG4gICAgPyBuZXcgTWFwKChhd2FpdCBzdGFnZVJvd3MoeyAuLi5zY29wZSwgLi4ucHJldmlvdXMgfSwgcGlwZWxpbmVJZCkpLm1hcCgocykgPT4gW3Muc3RhZ2VOYW1lLCBzXSkpXG4gICAgOiBuZXcgTWFwKCk7XG4gIHJldHVybiBjdXJyZW50Lm1hcCgocykgPT4ge1xuICAgIGNvbnN0IGJlZm9yZSA9IHByaW9yLmdldChzLnN0YWdlTmFtZSk/LnA5NU1zID8/IG51bGw7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnMsXG4gICAgICBwOTVDaGFuZ2VQY3Q6IGJlZm9yZSAmJiBiZWZvcmUgPiAwICYmIHMucDk1TXMgIT09IG51bGxcbiAgICAgICAgPyBOdW1iZXIoKCgocy5wOTVNcyAtIGJlZm9yZSkgLyBiZWZvcmUpICogMTAwKS50b0ZpeGVkKDEpKVxuICAgICAgICA6IG51bGwsXG4gICAgfTtcbiAgfSkuc29ydCgoYSwgYikgPT4gKGIucDk1TXMgPz8gMCkgLSAoYS5wOTVNcyA/PyAwKSk7XG59XG5cbmludGVyZmFjZSBTdGFnZVJvdyB7IHN0YWdlTmFtZTogc3RyaW5nOyBydW5zOiBudW1iZXI7IHA1ME1zOiBudW1iZXIgfCBudWxsOyBwOTVNczogbnVtYmVyIHwgbnVsbDsgZmFpbGVkOiBudW1iZXIgfVxuXG5hc3luYyBmdW5jdGlvbiBzdGFnZVJvd3Moc2NvcGU6IEFuYWx5dGljc1Njb3BlLCBwaXBlbGluZUlkOiBzdHJpbmcpOiBQcm9taXNlPFN0YWdlUm93W10+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeFJlYWQoKHR4KSA9PiB0eC5zZWxlY3Qoe1xuICAgIHN0YWdlTmFtZTogc2NoZW1hLmV4ZWN1dGlvbkRhaWx5Um9sbHVwLnN0YWdlTmFtZSxcbiAgICBydW5zOiBzcWw8bnVtYmVyPmBTVU0oJHtzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAucnVuc30pOjppbnRgLFxuICAgIGZhaWxlZDogc3FsPG51bWJlcj5gU1VNKCR7c2NoZW1hLmV4ZWN1dGlvbkRhaWx5Um9sbHVwLmZhaWxlZH0pOjppbnRgLFxuICAgIC8vIE1BWCBvZiB0aGUgZGFpbHkgcDk1cywgbm90IGFuIGF2ZXJhZ2Ugb2YgcGVyY2VudGlsZXM6IGF2ZXJhZ2luZ1xuICAgIC8vIHBlcmNlbnRpbGVzIGlzIG5vdCBhIHBlcmNlbnRpbGUgb2YgYW55dGhpbmcsIGFuZCB0aGUgd29yc3QgZGF5IGlzIHRoZVxuICAgIC8vIG51bWJlciBzb21lYm9keSB3b3VsZCBhY3Qgb24uXG4gICAgcDUwTXM6IHNxbDxudW1iZXIgfCBudWxsPmBNQVgoJHtzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAucDUwTXN9KTo6aW50YCxcbiAgICBwOTVNczogc3FsPG51bWJlciB8IG51bGw+YE1BWCgke3NjaGVtYS5leGVjdXRpb25EYWlseVJvbGx1cC5wOTVNc30pOjppbnRgLFxuICB9KS5mcm9tKHNjaGVtYS5leGVjdXRpb25EYWlseVJvbGx1cClcbiAgICAud2hlcmUoYW5kKFxuICAgICAgb3JnUHJlZGljYXRlKHNjaGVtYS5leGVjdXRpb25EYWlseVJvbGx1cC5vcmdJZCwgc2NvcGUpLFxuICAgICAgZXEoc2NoZW1hLmV4ZWN1dGlvbkRhaWx5Um9sbHVwLnBpcGVsaW5lSWQsIHBpcGVsaW5lSWQpLFxuICAgICAgZ3RlKHNjaGVtYS5leGVjdXRpb25EYWlseVJvbGx1cC5kYXksIG5ldyBEYXRlKHNjb3BlLmZyb20pKSxcbiAgICAgIGx0KHNjaGVtYS5leGVjdXRpb25EYWlseVJvbGx1cC5kYXksIG5ldyBEYXRlKHNjb3BlLnRvKSksXG4gICAgICBzcWxgJHtzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAuc3RhZ2VOYW1lfSA8PiAnJ2AsXG4gICAgKSlcbiAgICAuZ3JvdXBCeShzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAuc3RhZ2VOYW1lKSk7XG4gIGNvbnN0IG1hcCA9IG5ldyBNYXA8c3RyaW5nLCBTdGFnZVJvdz4oKTtcbiAgZm9yIChjb25zdCByIG9mIHJvd3MgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KSB7XG4gICAgbWFwLnNldChTdHJpbmcoci5zdGFnZU5hbWUpLCB7XG4gICAgICBzdGFnZU5hbWU6IFN0cmluZyhyLnN0YWdlTmFtZSksXG4gICAgICBydW5zOiBudW0oci5ydW5zKSxcbiAgICAgIGZhaWxlZDogbnVtKHIuZmFpbGVkKSxcbiAgICAgIHA1ME1zOiByLnA1ME1zID09PSBudWxsID8gbnVsbCA6IG51bShyLnA1ME1zKSxcbiAgICAgIHA5NU1zOiByLnA5NU1zID09PSBudWxsID8gbnVsbCA6IG51bShyLnA5NU1zKSxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gWy4uLm1hcC52YWx1ZXMoKV07XG59XG5cbi8qKiBCdWlsZCB0aW1lIGJ5IHByb2plY3QgYW5kIHBpcGVsaW5lLiBObyBtb25leSBhbnl3aGVyZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VSb3cge1xuICBwcm9qZWN0OiBzdHJpbmcgfCBudWxsO1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgYnVpbGRTZWNvbmRzOiBudW1iZXI7XG4gIHJ1bnM6IG51bWJlcjtcbiAgc2hhcmVQY3Q6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBXaGVyZSB0aGUgYnVpbGQgdGltZSB3ZW50LlxuICpcbiAqIFNFQ09ORFMsIE5PVCBET0xMQVJTLiBBIGNvc3QgZmlndXJlIG5lZWRzIHRoZSBpbnN0YW5jZSB0eXBlcywgdGhlIHNwb3Qvb24tZGVtYW5kXG4gKiBtaXggYW5kIHRoZSBhY2NvdW50J3Mgb3duIGRpc2NvdW50cywgbm9uZSBvZiB3aGljaCB0aGlzIHBsYXRmb3JtIGtub3dzIOKAlCBzbyBhXG4gKiBkb2xsYXIgbnVtYmVyIGhlcmUgd291bGQgYmUgYSBndWVzcyBwcmVzZW50ZWQgYXMgYW4gaW52b2ljZS4gQnVpbGQgdGltZSBpcyB0aGVcbiAqIHRoaW5nIGFjdHVhbGx5IG1lYXN1cmVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UmVzb3VyY2VDb25zdW1wdGlvbihzY29wZTogQW5hbHl0aWNzU2NvcGUsIGxpbWl0ID0gMjApOiBQcm9taXNlPHtcbiAgcGlwZWxpbmVzOiBSZXNvdXJjZVJvd1tdO1xuICB0b3RhbEJ1aWxkU2Vjb25kczogbnVtYmVyO1xufT4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVFxuICAgICAgcC5wcm9qZWN0LFxuICAgICAgci5waXBlbGluZV9pZCxcbiAgICAgIHAucGlwZWxpbmVfbmFtZSxcbiAgICAgIFNVTShyLmJ1aWxkX3NlY29uZHMpOjppbnQgQVMgYnVpbGRfc2Vjb25kcyxcbiAgICAgIFNVTShyLnJ1bnMpOjppbnQgQVMgcnVuc1xuICAgIEZST00gZXhlY3V0aW9uX2RhaWx5X3JvbGx1cHMgclxuICAgIExFRlQgSk9JTiBwaXBlbGluZXMgcCBPTiBwLmlkOjp0ZXh0ID0gci5waXBlbGluZV9pZFxuICAgIFdIRVJFIHIub3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICBBTkQgci5kYXkgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIHIuZGF5IDwgJHtzY29wZS50b306OnRpbWVzdGFtcHR6XG4gICAgICBBTkQgci5zdGFnZV9uYW1lID0gJydcbiAgICBHUk9VUCBCWSBwLnByb2plY3QsIHIucGlwZWxpbmVfaWQsIHAucGlwZWxpbmVfbmFtZVxuICAgIE9SREVSIEJZIGJ1aWxkX3NlY29uZHMgREVTQ1xuICAgIExJTUlUICR7bGltaXR9XG4gIGApKTtcbiAgY29uc3QgbGlzdCA9IHJvd3NPZihyb3dzKTtcbiAgY29uc3QgdG90YWwgPSBsaXN0LnJlZHVjZSgocywgcikgPT4gcyArIG51bShyLmJ1aWxkX3NlY29uZHMpLCAwKTtcbiAgcmV0dXJuIHtcbiAgICB0b3RhbEJ1aWxkU2Vjb25kczogdG90YWwsXG4gICAgcGlwZWxpbmVzOiBsaXN0Lm1hcCgocikgPT4gKHtcbiAgICAgIHByb2plY3Q6IChyLnByb2plY3QgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICAgIHBpcGVsaW5lSWQ6IFN0cmluZyhyLnBpcGVsaW5lX2lkKSxcbiAgICAgIHBpcGVsaW5lTmFtZTogKHIucGlwZWxpbmVfbmFtZSBhcyBzdHJpbmcgfCBudWxsKSA/PyBudWxsLFxuICAgICAgYnVpbGRTZWNvbmRzOiBudW0oci5idWlsZF9zZWNvbmRzKSxcbiAgICAgIHJ1bnM6IG51bShyLnJ1bnMpLFxuICAgICAgc2hhcmVQY3Q6IHRvdGFsID4gMCA/IE51bWJlcigoKG51bShyLmJ1aWxkX3NlY29uZHMpIC8gdG90YWwpICogMTAwKS50b0ZpeGVkKDEpKSA6IDAsXG4gICAgfSkpLFxuICB9O1xufVxuXG4vKiogT25lIGNvbW1pdCdzIGpvdXJuZXkgYWNyb3NzIGVudmlyb25tZW50cy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJvbW90aW9uUm93IHtcbiAgY29tbWl0U2hhOiBzdHJpbmc7XG4gIC8qKiBFbnZpcm9ubWVudCDihpIgd2hlbiBpdCBsYW5kZWQgdGhlcmUsIGluIHRoZSBvcmRlciBpdCByZWFjaGVkIHRoZW0uICovXG4gIHN0b3BzOiBBcnJheTx7IGVudmlyb25tZW50OiBzdHJpbmc7IGRlcGxveWVkQXQ6IHN0cmluZzsgaG91cnNGcm9tUHJldmlvdXM6IG51bWJlciB8IG51bGwgfT47XG4gIC8qKiBUcnVlIHdoZW4gdGhlIGNvbW1pdCByZWFjaGVkIGEgbm9uLXByb2R1Y3Rpb24gZW52aXJvbm1lbnQgYW5kIHN0b3BwZWQuICovXG4gIHN0dWNrOiBib29sZWFuO1xuICBmdXJ0aGVzdDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdoZXJlIGNvbW1pdHMgZ290IHRvLCBhbmQgd2hlcmUgdGhleSBzdG9wcGVkLlxuICpcbiAqIFwiU3R1Y2tcIiBpcyB0aGUgbnVtYmVyIHdvcnRoIHJlYWRpbmcuIEEgY29tbWl0IHRoYXQgcmVhY2hlZCBzdGFnaW5nIGZvdXIgZGF5cyBhZ29cbiAqIGFuZCBuZXZlciB3ZW50IGZ1cnRoZXIgaXMgd29yayB0aGF0IGlzIGZpbmlzaGVkIGFuZCBub3QgZGVsaXZlcmVkIOKAlCB3aGljaCBkb2VzXG4gKiBub3QgYXBwZWFyIGluIGRlcGxveW1lbnQgZnJlcXVlbmN5LCBzdWNjZXNzIHJhdGUgb3IgbGVhZCB0aW1lLCBiZWNhdXNlIGJ5IGV2ZXJ5XG4gKiBvbmUgb2YgdGhvc2UgbWVhc3VyZXMgbm90aGluZyBoYXBwZW5lZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFByb21vdGlvblZpZXcoXG4gIHNjb3BlOiBBbmFseXRpY3NTY29wZSxcbiAgcHJvZHVjdGlvbkVudiA9ICdwcm9kdWN0aW9uJyxcbiAgbGltaXQgPSAyNSxcbik6IFByb21pc2U8eyBjb21taXRzOiBQcm9tb3Rpb25Sb3dbXTsgc3R1Y2tDb3VudDogbnVtYmVyIH0+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeFJlYWQoKHR4KSA9PiB0eC5leGVjdXRlKHNxbGBcbiAgICBTRUxFQ1QgY29tbWl0X3NoYSwgZW52aXJvbm1lbnQsIE1JTihkZXBsb3llZF9hdCkgQVMgZGVwbG95ZWRfYXRcbiAgICBGUk9NIGRvcmFfZGVwbG95bWVudHNcbiAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgIEFORCBkZXBsb3llZF9hdCA+PSAke3Njb3BlLmZyb219Ojp0aW1lc3RhbXB0eiBBTkQgZGVwbG95ZWRfYXQgPCAke3Njb3BlLnRvfTo6dGltZXN0YW1wdHpcbiAgICAgIEFORCBzdWNjZWVkZWQgPSB0cnVlXG4gICAgICBBTkQgY29tbWl0X3NoYSBJUyBOT1QgTlVMTFxuICAgIEdST1VQIEJZIGNvbW1pdF9zaGEsIGVudmlyb25tZW50XG4gICAgT1JERVIgQlkgTUlOKGRlcGxveWVkX2F0KSBERVNDXG4gIGApKTtcblxuICBjb25zdCBieUNvbW1pdCA9IG5ldyBNYXA8c3RyaW5nLCBBcnJheTx7IGVudmlyb25tZW50OiBzdHJpbmc7IGRlcGxveWVkQXQ6IERhdGUgfT4+KCk7XG4gIGZvciAoY29uc3QgciBvZiByb3dzT2Yocm93cykpIHtcbiAgICBjb25zdCBzaGEgPSBTdHJpbmcoci5jb21taXRfc2hhKTtcbiAgICBjb25zdCBsaXN0ID0gYnlDb21taXQuZ2V0KHNoYSkgPz8gW107XG4gICAgbGlzdC5wdXNoKHsgZW52aXJvbm1lbnQ6IFN0cmluZyhyLmVudmlyb25tZW50KSwgZGVwbG95ZWRBdDogbmV3IERhdGUoU3RyaW5nKHIuZGVwbG95ZWRfYXQpKSB9KTtcbiAgICBieUNvbW1pdC5zZXQoc2hhLCBsaXN0KTtcbiAgfVxuXG4gIGNvbnN0IGNvbW1pdHM6IFByb21vdGlvblJvd1tdID0gWy4uLmJ5Q29tbWl0LmVudHJpZXMoKV0ubWFwKChbY29tbWl0U2hhLCByYXddKSA9PiB7XG4gICAgY29uc3Qgb3JkZXJlZCA9IFsuLi5yYXddLnNvcnQoKGEsIGIpID0+IGEuZGVwbG95ZWRBdC5nZXRUaW1lKCkgLSBiLmRlcGxveWVkQXQuZ2V0VGltZSgpKTtcbiAgICBjb25zdCBzdG9wcyA9IG9yZGVyZWQubWFwKChzdG9wLCBpKSA9PiAoe1xuICAgICAgZW52aXJvbm1lbnQ6IHN0b3AuZW52aXJvbm1lbnQsXG4gICAgICBkZXBsb3llZEF0OiBzdG9wLmRlcGxveWVkQXQudG9JU09TdHJpbmcoKSxcbiAgICAgIGhvdXJzRnJvbVByZXZpb3VzOiBpID09PSAwXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IE51bWJlcigoKHN0b3AuZGVwbG95ZWRBdC5nZXRUaW1lKCkgLSAob3JkZXJlZFtpIC0gMV0gYXMgeyBkZXBsb3llZEF0OiBEYXRlIH0pLmRlcGxveWVkQXQuZ2V0VGltZSgpKSAvIDM2MDBfMDAwKS50b0ZpeGVkKDEpKSxcbiAgICB9KSk7XG4gICAgY29uc3QgZnVydGhlc3QgPSBvcmRlcmVkW29yZGVyZWQubGVuZ3RoIC0gMV0/LmVudmlyb25tZW50ID8/ICcnO1xuICAgIHJldHVybiB7IGNvbW1pdFNoYSwgc3RvcHMsIGZ1cnRoZXN0LCBzdHVjazogZnVydGhlc3QgIT09IHByb2R1Y3Rpb25FbnYgfTtcbiAgfSlcbiAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgYUxhc3QgPSBhLnN0b3BzW2Euc3RvcHMubGVuZ3RoIC0gMV0/LmRlcGxveWVkQXQgPz8gJyc7XG4gICAgICBjb25zdCBiTGFzdCA9IGIuc3RvcHNbYi5zdG9wcy5sZW5ndGggLSAxXT8uZGVwbG95ZWRBdCA/PyAnJztcbiAgICAgIHJldHVybiBiTGFzdC5sb2NhbGVDb21wYXJlKGFMYXN0KTtcbiAgICB9KVxuICAgIC5zbGljZSgwLCBsaW1pdCk7XG5cbiAgcmV0dXJuIHsgY29tbWl0cywgc3R1Y2tDb3VudDogY29tbWl0cy5maWx0ZXIoKGMpID0+IGMuc3R1Y2spLmxlbmd0aCB9O1xufVxuXG4vKiogT3V0ZGF0ZWQgcGx1Z2luIHVzYWdlLCBwZXIgcGlwZWxpbmUgYW5kIHN0ZXAuICovXG5leHBvcnQgaW50ZXJmYWNlIE91dGRhdGVkUGx1Z2luUm93IHtcbiAgcGlwZWxpbmVJZDogc3RyaW5nO1xuICBwaXBlbGluZU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIHN0YWdlTmFtZTogc3RyaW5nO1xuICBzdGVwTmFtZTogc3RyaW5nO1xuICBwbHVnaW46IHN0cmluZztcbiAgaW5Vc2U6IHN0cmluZyB8IG51bGw7XG4gIGxhdGVzdDogc3RyaW5nIHwgbnVsbDtcbiAgZ2FwOiBzdHJpbmcgfCBudWxsO1xuICB3aXRoaW5Qb2xpY3k6IGJvb2xlYW47XG59XG5cbi8qKlxuICogV2hpY2ggcGlwZWxpbmVzIGFyZSBiZWhpbmQgb24gYSBwbHVnaW4sIHdvcnN0IGdhcCBmaXJzdC5cbiAqXG4gKiBSZWFkcyB0aGUgREVDTEFSRUQgc2lkZSAoYHBpcGVsaW5lX3BsdWdpbl9yZXNvbHV0aW9uYCkuIEEgcGlwZWxpbmUncyBkZWNsYXJlZFxuICogcmFuZ2UgYW5kIHdoYXQgaXQgbGFzdCBhY3R1YWxseSByYW4gY2FuIGRpc2FncmVlIOKAlCB3aGljaCBpcyB3aHkgdGhlIHZ1bG5lcmFiaWxpdHlcbiAqIHNlY3Rpb24gYmVsb3cgcmVhZHMgdGhlIGRlcGxveWVkIHNpZGUgYW5kIHNheXMgd2hpY2ggaXQgaXMgc2hvd2luZy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE91dGRhdGVkUGx1Z2lucyhzY29wZTogQW5hbHl0aWNzU2NvcGUsIGxpbWl0ID0gNTApOiBQcm9taXNlPHtcbiAgcm93czogT3V0ZGF0ZWRQbHVnaW5Sb3dbXTtcbiAgYmVoaW5kUGlwZWxpbmVzOiBudW1iZXI7XG4gIG1ham9yQmVoaW5kOiBudW1iZXI7XG59PiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUXG4gICAgICByLnBpcGVsaW5lX2lkLCBwLnBpcGVsaW5lX25hbWUsIHIuc3RhZ2VfbmFtZSwgci5zdGVwX25hbWUsXG4gICAgICBDT0FMRVNDRShyLnBsdWdpbl9wdWJsaXNoZXIgfHwgJy8nLCAnJykgfHwgci5wbHVnaW5fbmFtZSBBUyBwbHVnaW4sXG4gICAgICByLnJlc29sdmVkX3ZlcnNpb24sIHIubGF0ZXN0X3ZlcnNpb24sIHIudmVyc2lvbl9nYXAsIHIud2l0aGluX3BvbGljeVxuICAgIEZST00gcGlwZWxpbmVfcGx1Z2luX3Jlc29sdXRpb24gclxuICAgIExFRlQgSk9JTiBwaXBlbGluZXMgcCBPTiBwLmlkOjp0ZXh0ID0gci5waXBlbGluZV9pZFxuICAgIFdIRVJFIHIub3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICBBTkQgKHIudmVyc2lvbl9nYXAgSU4gKCdtYWpvcicsICdtaW5vcicsICdwYXRjaCcpIE9SIHIud2l0aGluX3BvbGljeSA9IGZhbHNlKVxuICAgIE9SREVSIEJZIENBU0Ugci52ZXJzaW9uX2dhcCBXSEVOICdtYWpvcicgVEhFTiAwIFdIRU4gJ21pbm9yJyBUSEVOIDEgV0hFTiAncGF0Y2gnIFRIRU4gMiBFTFNFIDMgRU5ELFxuICAgICAgICAgICAgIHIucGlwZWxpbmVfaWRcbiAgICBMSU1JVCAke2xpbWl0fVxuICBgKSk7XG4gIGNvbnN0IGxpc3QgPSByb3dzT2Yocm93cykubWFwKChyKSA9PiAoe1xuICAgIHBpcGVsaW5lSWQ6IFN0cmluZyhyLnBpcGVsaW5lX2lkKSxcbiAgICBwaXBlbGluZU5hbWU6IChyLnBpcGVsaW5lX25hbWUgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICBzdGFnZU5hbWU6IFN0cmluZyhyLnN0YWdlX25hbWUpLFxuICAgIHN0ZXBOYW1lOiBTdHJpbmcoci5zdGVwX25hbWUpLFxuICAgIHBsdWdpbjogU3RyaW5nKHIucGx1Z2luKSxcbiAgICBpblVzZTogKHIucmVzb2x2ZWRfdmVyc2lvbiBhcyBzdHJpbmcgfCBudWxsKSA/PyBudWxsLFxuICAgIGxhdGVzdDogKHIubGF0ZXN0X3ZlcnNpb24gYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICBnYXA6IChyLnZlcnNpb25fZ2FwIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgd2l0aGluUG9saWN5OiByLndpdGhpbl9wb2xpY3kgIT09IGZhbHNlLFxuICB9KSk7XG4gIHJldHVybiB7XG4gICAgcm93czogbGlzdCxcbiAgICBiZWhpbmRQaXBlbGluZXM6IG5ldyBTZXQobGlzdC5tYXAoKHIpID0+IHIucGlwZWxpbmVJZCkpLnNpemUsXG4gICAgbWFqb3JCZWhpbmQ6IGxpc3QuZmlsdGVyKChyKSA9PiByLmdhcCA9PT0gJ21ham9yJykubGVuZ3RoLFxuICB9O1xufVxuXG4vKiogQSBwaXBlbGluZSdzIGV4cG9zdXJlIHRvIGEgdnVsbmVyYWJsZSBwbHVnaW4gdmVyc2lvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVnVsbmVyYWJpbGl0eVJvdyB7XG4gIHBpcGVsaW5lSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBwbHVnaW46IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICAvKiogYGRlcGxveWVkYCA9IHdoYXQgYWN0dWFsbHkgcmFuOyBgZGVjbGFyZWRgID0gd2hhdCB0aGUgY29uZmlnIGFza3MgZm9yLiAqL1xuICBzb3VyY2U6IHN0cmluZztcbiAgY3JpdGljYWw6IG51bWJlcjtcbiAgaGlnaDogbnVtYmVyO1xuICBmaW5kaW5nczogQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICBmbGFnZ2VkQXQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQbHVnaW4gdnVsbmVyYWJpbGl0aWVzLCBwZXIgcGlwZWxpbmUsIENyaXRpY2FscyBmaXJzdC5cbiAqXG4gKiBTQVlTIFdIRVRIRVIgSVQgSVMgREVDTEFSRUQgT1IgREVQTE9ZRUQuIEEgcGlwZWxpbmUgd2hvc2UgY29uZmlnIHdhcyB1cGRhdGVkIHRvIGFcbiAqIGZpeGVkIHZlcnNpb24gYnV0IHdoaWNoIGhhcyBub3QgcmUtc3ludGhlZCBpcyBzdGlsbCBydW5uaW5nIHRoZSB2dWxuZXJhYmxlIGltYWdlLFxuICogYW5kIGEgcmVwb3J0IHRoYXQgY29sbGFwc2VkIHRoZSB0d28gd291bGQgdGVsbCBhIG1hbmFnZXIgdGhlIHByb2JsZW0gaXMgc29sdmVkXG4gKiB3aGlsZSB0aGUgb2xkIGltYWdlIGtlZXBzIHJ1bm5pbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQbHVnaW5WdWxuZXJhYmlsaXRpZXMoc2NvcGU6IEFuYWx5dGljc1Njb3BlLCBsaW1pdCA9IDUwKTogUHJvbWlzZTx7XG4gIHJvd3M6IFZ1bG5lcmFiaWxpdHlSb3dbXTtcbiAgZXhwb3NlZFBpcGVsaW5lczogbnVtYmVyO1xuICBjcml0aWNhbFBpcGVsaW5lczogbnVtYmVyO1xufT4ge1xuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVFxuICAgICAgdi5waXBlbGluZV9pZCwgcC5waXBlbGluZV9uYW1lLFxuICAgICAgQ09BTEVTQ0Uodi5wbHVnaW5fcHVibGlzaGVyIHx8ICcvJywgJycpIHx8IHYucGx1Z2luX25hbWUgQVMgcGx1Z2luLFxuICAgICAgdi5wbHVnaW5fdmVyc2lvbiwgdi5zb3VyY2UsIHYuY3JpdGljYWxfY291bnQsIHYuaGlnaF9jb3VudCwgdi50b3BfZmluZGluZ3MsIHYuZmxhZ2dlZF9hdFxuICAgIEZST00gcGx1Z2luX3Z1bG5fZXhwb3N1cmUgdlxuICAgIExFRlQgSk9JTiBwaXBlbGluZXMgcCBPTiBwLmlkOjp0ZXh0ID0gdi5waXBlbGluZV9pZFxuICAgIFdIRVJFIHYub3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICBBTkQgdi5maXhlZF9hdCBJUyBOVUxMXG4gICAgICAtLSBBbiBhY2NlcHRhbmNlIHBhc3QgaXRzIGRlYWRsaW5lIGlzIG5vdCBhbiBhY2NlcHRhbmNlLlxuICAgICAgQU5EICh2LnRyaWFnZV9zdGF0ZSBOT1QgSU4gKCdhY2NlcHRlZCcsICdmYWxzZV9wb3NpdGl2ZScpXG4gICAgICAgICAgIE9SICh2LnRyaWFnZV9zdGF0ZSA9ICdhY2NlcHRlZCcgQU5EIHYuYWNjZXB0ZWRfdW50aWwgSVMgTk9UIE5VTEwgQU5EIHYuYWNjZXB0ZWRfdW50aWwgPD0gJHtub3d9KSlcbiAgICBPUkRFUiBCWSB2LmNyaXRpY2FsX2NvdW50IERFU0MsIHYuaGlnaF9jb3VudCBERVNDXG4gICAgTElNSVQgJHtsaW1pdH1cbiAgYCkpO1xuICBjb25zdCBsaXN0ID0gcm93c09mKHJvd3MpLm1hcCgocikgPT4gKHtcbiAgICBwaXBlbGluZUlkOiBTdHJpbmcoci5waXBlbGluZV9pZCksXG4gICAgcGlwZWxpbmVOYW1lOiAoci5waXBlbGluZV9uYW1lIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgcGx1Z2luOiBTdHJpbmcoci5wbHVnaW4pLFxuICAgIHZlcnNpb246IFN0cmluZyhyLnBsdWdpbl92ZXJzaW9uKSxcbiAgICBzb3VyY2U6IFN0cmluZyhyLnNvdXJjZSksXG4gICAgY3JpdGljYWw6IG51bShyLmNyaXRpY2FsX2NvdW50KSxcbiAgICBoaWdoOiBudW0oci5oaWdoX2NvdW50KSxcbiAgICBmaW5kaW5nczogKHIudG9wX2ZpbmRpbmdzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PikgPz8gW10sXG4gICAgZmxhZ2dlZEF0OiBpc29Pck51bGwoci5mbGFnZ2VkX2F0KSA/PyBuZXcgRGF0ZSgwKS50b0lTT1N0cmluZygpLFxuICB9KSk7XG4gIHJldHVybiB7XG4gICAgcm93czogbGlzdCxcbiAgICBleHBvc2VkUGlwZWxpbmVzOiBuZXcgU2V0KGxpc3QubWFwKChyKSA9PiByLnBpcGVsaW5lSWQpKS5zaXplLFxuICAgIGNyaXRpY2FsUGlwZWxpbmVzOiBuZXcgU2V0KGxpc3QuZmlsdGVyKChyKSA9PiByLmNyaXRpY2FsID4gMCkubWFwKChyKSA9PiByLnBpcGVsaW5lSWQpKS5zaXplLFxuICB9O1xufVxuXG4vKiogQWRvcHRpb24gYW5kIGRlcGxveS10cmFja2luZyBjb3ZlcmFnZSB3aXRoaW4gdGhlIHJlcG9ydGVkIHNjb3BlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZG9wdGlvblN1bW1hcnkge1xuICBhY3RpdmVQaXBlbGluZXM6IG51bWJlcjtcbiAgdG90YWxQaXBlbGluZXM6IG51bWJlcjtcbiAgLyoqIFBpcGVsaW5lcyB0aGF0IHByb2R1Y2VkIGEgZGVwbG95IHJvdyDigJQgaS5lLiBvbmVzIERPUkEgY2FuIHNlZS4gKi9cbiAgZGVwbG95VHJhY2tlZFBpcGVsaW5lczogbnVtYmVyO1xuICAvKiogQnkgYGNyZWF0aW9uX3NvdXJjZWAsIGZvciBcImFyZSB0aGUgZ29sZGVuIHBhdGhzIGJlaW5nIHVzZWRcIi4gKi9cbiAgYnlTb3VyY2U6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG4gIC8qKiBUZWFtcyBpbiB0aGUgcm9sbHVwIHRoYXQgaGFkIGFjdGl2aXR5LiAxIGZvciBhIHNpbmdsZS1vcmcgcmVwb3J0LiAqL1xuICBhY3RpdmVUZWFtczogbnVtYmVyO1xuICAvKiogT25seSB3aGVuIHRoZSBvcmcgY29uZmlndXJlZCB0aGUgYXNzdW1wdGlvbi4gTmV2ZXIgcGxhdGZvcm0tc3VwcGxpZWQuICovXG4gIGVzdGltYXRlZE1pbnV0ZXNTYXZlZDogbnVtYmVyIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBBZG9wdGlvbiwgY292ZXJhZ2UgYW5kIGNyZWF0aW9uIHNvdXJjZS5cbiAqXG4gKiBgZGVwbG95VHJhY2tlZFBpcGVsaW5lc2AgaXMgdGhlIGhvbmVzdCBkZW5vbWluYXRvciBmb3IgZXZlcnl0aGluZyBET1JBIHNheXM6IGFcbiAqIHBpcGVsaW5lIHRoYXQgaGFzIG5vdCByZS1zeW50aGVkIHdpdGggZGVwbG95IHRhZ3MgcHJvZHVjZXMgbm8gZGVwbG95IHJvd3MsIHNvIGl0XG4gKiBpcyBpbnZpc2libGUgdG8gZGVwbG95bWVudCBmcmVxdWVuY3kg4oCUIGFuZCByZXBvcnRpbmcgXCI0IGRlcGxveXNcIiB3aXRob3V0IHNheWluZ1xuICogdGhhdCAyMCBvZiAzMCBwaXBlbGluZXMgY2Fubm90IGJlIHNlZW4gaXMgdGhlIHNpbmdsZSBtb3N0IG1pc2xlYWRpbmcgdGhpbmcgdGhpc1xuICogZmVhdHVyZSBjb3VsZCBkby5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEFkb3B0aW9uKHNjb3BlOiBBbmFseXRpY3NTY29wZSwgdGltZVNhdmVkTWludXRlcz86IG51bWJlciB8IG51bGwpOiBQcm9taXNlPEFkb3B0aW9uU3VtbWFyeT4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFdJVEggc2NvcGVkIEFTIChcbiAgICAgIFNFTEVDVCBpZDo6dGV4dCBBUyBpZCwgb3JnX2lkLCBjcmVhdGlvbl9zb3VyY2VcbiAgICAgIEZST00gcGlwZWxpbmVzXG4gICAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgICAgQU5EIGRlbGV0ZWRfYXQgSVMgTlVMTFxuICAgICksXG4gICAgYWN0aXZlIEFTIChcbiAgICAgIFNFTEVDVCBESVNUSU5DVCBwaXBlbGluZV9pZCwgb3JnX2lkXG4gICAgICBGUk9NIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzXG4gICAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgICAgQU5EIGRheSA+PSAke3Njb3BlLmZyb219Ojp0aW1lc3RhbXB0eiBBTkQgZGF5IDwgJHtzY29wZS50b306OnRpbWVzdGFtcHR6XG4gICAgICAgIEFORCBzdGFnZV9uYW1lID0gJycgQU5EIHJ1bnMgPiAwXG4gICAgKSxcbiAgICB0cmFja2VkIEFTIChcbiAgICAgIFNFTEVDVCBESVNUSU5DVCBwaXBlbGluZV9pZFxuICAgICAgRlJPTSBkb3JhX2RlcGxveW1lbnRzXG4gICAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgICAgQU5EIGRlcGxveWVkX2F0ID49ICR7c2NvcGUuZnJvbX06OnRpbWVzdGFtcHR6IEFORCBkZXBsb3llZF9hdCA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgIClcbiAgICBTRUxFQ1RcbiAgICAgIChTRUxFQ1QgQ09VTlQoKikgRlJPTSBzY29wZWQpOjppbnQgQVMgdG90YWxfcGlwZWxpbmVzLFxuICAgICAgKFNFTEVDVCBDT1VOVCgqKSBGUk9NIGFjdGl2ZSk6OmludCBBUyBhY3RpdmVfcGlwZWxpbmVzLFxuICAgICAgKFNFTEVDVCBDT1VOVChESVNUSU5DVCBvcmdfaWQpIEZST00gYWN0aXZlKTo6aW50IEFTIGFjdGl2ZV90ZWFtcyxcbiAgICAgIChTRUxFQ1QgQ09VTlQoKikgRlJPTSB0cmFja2VkKTo6aW50IEFTIGRlcGxveV90cmFja2VkLFxuICAgICAgKFNFTEVDVCBDT0FMRVNDRShqc29uYl9vYmplY3RfYWdnKENPQUxFU0NFKGNyZWF0aW9uX3NvdXJjZSwgJ3Vua25vd24nKSwgbiksICd7fSc6Ompzb25iKVxuICAgICAgICAgRlJPTSAoU0VMRUNUIGNyZWF0aW9uX3NvdXJjZSwgQ09VTlQoKik6OmludCBBUyBuIEZST00gc2NvcGVkIEdST1VQIEJZIGNyZWF0aW9uX3NvdXJjZSkgc1xuICAgICAgKSBBUyBieV9zb3VyY2VcbiAgYCkpO1xuICBjb25zdCByID0gcm93c09mKHJvd3MpWzBdID8/IHt9O1xuICBjb25zdCBjcmVhdGVkID0gbnVtKHIudG90YWxfcGlwZWxpbmVzKTtcbiAgcmV0dXJuIHtcbiAgICB0b3RhbFBpcGVsaW5lczogY3JlYXRlZCxcbiAgICBhY3RpdmVQaXBlbGluZXM6IG51bShyLmFjdGl2ZV9waXBlbGluZXMpLFxuICAgIGFjdGl2ZVRlYW1zOiBNYXRoLm1heCgxLCBudW0oci5hY3RpdmVfdGVhbXMpKSxcbiAgICBkZXBsb3lUcmFja2VkUGlwZWxpbmVzOiBudW0oci5kZXBsb3lfdHJhY2tlZCksXG4gICAgYnlTb3VyY2U6IChyLmJ5X3NvdXJjZSBhcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+KSA/PyB7fSxcbiAgICAvLyBPbmx5IHdoZW4gdGhlIE9SRyBjb25maWd1cmVkIHRoZSBhc3N1bXB0aW9uIOKAlCBhIHBsYXRmb3JtLXN1cHBsaWVkIG51bWJlclxuICAgIC8vIGhlcmUgd291bGQgYmUgdGhlIHBsYXRmb3JtIG1hcmtpbmcgaXRzIG93biBob21ld29yay5cbiAgICBlc3RpbWF0ZWRNaW51dGVzU2F2ZWQ6IHRpbWVTYXZlZE1pbnV0ZXMgJiYgdGltZVNhdmVkTWludXRlcyA+IDAgPyBjcmVhdGVkICogdGltZVNhdmVkTWludXRlcyA6IG51bGwsXG4gIH07XG59XG5cbi8qKiBPbmUgcGlwZWxpbmUncyBmYWlsdXJlIHN0cmVhayBhbmQgbGFzdCBzdWNjZXNzZnVsIGRheS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVTdHJlYWtSb3cge1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGYWlsdXJlcyBpbiB0aGUgdHJhaWxpbmcgcnVuIG9mIGRheXMgb24gd2hpY2ggTk9USElORyBzdWNjZWVkZWQuXG4gICAqXG4gICAqIEEgTE9XRVIgQk9VTkQsIGFuZCBkZWxpYmVyYXRlbHkgc28uIFRoZSByb2xsdXAgaXMgcGVyIGRheSwgc28gd2l0aGluIHRoZSBtb3N0XG4gICAqIHJlY2VudCBkYXkgdGhhdCBkaWQgaGF2ZSBhIHN1Y2Nlc3MgdGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwgd2hldGhlciB0aGUgZmFpbHVyZXNcbiAgICogY2FtZSBiZWZvcmUgb3IgYWZ0ZXIgaXQg4oCUIHRoYXQgZGF5IGlzIGV4Y2x1ZGVkIHJhdGhlciB0aGFuIGd1ZXNzZWQgYXQuIFdoYXRcbiAgICogc3Vydml2ZXMgaXMgYSBydW4gb2YgZmFpbHVyZXMgd2l0aCBubyBzdWNjZXNzIGFueXdoZXJlIGJldHdlZW4gdGhlbSwgd2hpY2ggaXNcbiAgICogZXhhY3RseSB0aGUgY2xhaW0gdGhlIGZpbmRpbmcgbWFrZXMuXG4gICAqL1xuICBjb25zZWN1dGl2ZUZhaWx1cmVzOiBudW1iZXI7XG4gIC8qKiBUaGUgbGFzdCBkYXkgd2l0aCBhdCBsZWFzdCBvbmUgc3VjY2Vzcywgb3IgbnVsbCB3aXRoaW4gdGhlIGxvb2tiYWNrLiAqL1xuICBsYXN0U3VjY2Vzc0F0OiBEYXRlIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBGYWlsdXJlIHN0cmVha3MgYW5kIGxhc3Qtc3VjY2VzcyBkYXRlcywgZm9yIHRoZSBuZWVkcy1hdHRlbnRpb24gcnVsZXMuXG4gKlxuICogUmVhZHMgdGhlIGRhaWx5IHJvbGx1cCwgbm90IGBwaXBlbGluZV9ldmVudHNgIOKAlCB0aGUgc2FtZSByZWFzb24gYXMgZXZlcnl0aGluZ1xuICogZWxzZSBoZXJlOiBhIHN0cmVhayB0aGF0IGVuZGVkIHRocmVlIHdlZWtzIGFnbyBtdXN0IHN0aWxsIGJlIHJlYWRhYmxlIGFmdGVyXG4gKiByZXRlbnRpb24gaGFzIHN3ZXB0IHRoZSBldmVudHMgdGhhdCBwcm9kdWNlZCBpdC5cbiAqXG4gKiBgbG9va2JhY2tEYXlzYCBleHRlbmRzIFBBU1QgdGhlIHdpbmRvdyBvbiBwdXJwb3NlLiBcIkxhc3Qgc3VjY2VlZGVkIDEyIGRheXMgYWdvXCJcbiAqIGlzIHRoZSBmaW5kaW5nIGEgd2Vla2x5IHJlcG9ydCBtb3N0IG5lZWRzLCBhbmQgYSBxdWVyeSBib3VuZGVkIGJ5IGEgNy1kYXkgd2luZG93XG4gKiBjb3VsZCBuZXZlciBwcm9kdWNlIGl0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGlwZWxpbmVTdHJlYWtzKFxuICBzY29wZTogQW5hbHl0aWNzU2NvcGUsXG4gIGxvb2tiYWNrRGF5cyA9IDkwLFxuKTogUHJvbWlzZTxQaXBlbGluZVN0cmVha1Jvd1tdPiB7XG4gIGNvbnN0IHNpbmNlID0gbmV3IERhdGUobmV3IERhdGUoc2NvcGUudG8pLmdldFRpbWUoKSAtIGxvb2tiYWNrRGF5cyAqIDg2XzQwMF8wMDApLnRvSVNPU3RyaW5nKCk7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgV0lUSCBkYXlzIEFTIChcbiAgICAgIFNFTEVDVCBwaXBlbGluZV9pZCwgZGF5LFxuICAgICAgICAgICAgIFNVTShzdWNjZWVkZWQpOjppbnQgQVMgc3VjY2VlZGVkLFxuICAgICAgICAgICAgIFNVTShmYWlsZWQpOjppbnQgICAgQVMgZmFpbGVkXG4gICAgICBGUk9NIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzXG4gICAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgICAgQU5EIGRheSA+PSAke3NpbmNlfTo6dGltZXN0YW1wdHogQU5EIGRheSA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgICAgR1JPVVAgQlkgcGlwZWxpbmVfaWQsIGRheVxuICAgICksXG4gICAgbGFzdF9vayBBUyAoXG4gICAgICBTRUxFQ1QgcGlwZWxpbmVfaWQsIE1BWChkYXkpIEFTIGxhc3Rfc3VjY2Vzc19kYXlcbiAgICAgIEZST00gZGF5cyBXSEVSRSBzdWNjZWVkZWQgPiAwXG4gICAgICBHUk9VUCBCWSBwaXBlbGluZV9pZFxuICAgIClcbiAgICBTRUxFQ1QgZC5waXBlbGluZV9pZCxcbiAgICAgICAgICAgbC5sYXN0X3N1Y2Nlc3NfZGF5LFxuICAgICAgICAgICBDT0FMRVNDRShTVU0oZC5mYWlsZWQpIEZJTFRFUiAoXG4gICAgICAgICAgICAgV0hFUkUgbC5sYXN0X3N1Y2Nlc3NfZGF5IElTIE5VTEwgT1IgZC5kYXkgPiBsLmxhc3Rfc3VjY2Vzc19kYXlcbiAgICAgICAgICAgKSwgMCk6OmludCBBUyBzdHJlYWtcbiAgICBGUk9NIGRheXMgZFxuICAgIExFRlQgSk9JTiBsYXN0X29rIGwgT04gbC5waXBlbGluZV9pZCA9IGQucGlwZWxpbmVfaWRcbiAgICBHUk9VUCBCWSBkLnBpcGVsaW5lX2lkLCBsLmxhc3Rfc3VjY2Vzc19kYXlcbiAgYCkpO1xuICByZXR1cm4gcm93c09mKHJvd3MpLm1hcCgocikgPT4gKHtcbiAgICBwaXBlbGluZUlkOiBTdHJpbmcoci5waXBlbGluZV9pZCksXG4gICAgY29uc2VjdXRpdmVGYWlsdXJlczogbnVtKHIuc3RyZWFrKSxcbiAgICBsYXN0U3VjY2Vzc0F0OiByLmxhc3Rfc3VjY2Vzc19kYXkgPyBuZXcgRGF0ZShTdHJpbmcoci5sYXN0X3N1Y2Nlc3NfZGF5KSkgOiBudWxsLFxuICB9KSk7XG59XG5cbi8qKlxuICogUGlwZWxpbmVzIHRoYXQgUkFOIGluIHRoZSB3aW5kb3cgYnV0IHByb2R1Y2VkIG5vIGRlcGxveSByb3dzLlxuICpcbiAqIEEgbWVhc3VyZW1lbnQgZ2FwLCBub3QgYSBmYWlsdXJlLCBhbmQgdGhlIHJlYXNvbiBhIGRlcGxveW1lbnQtZnJlcXVlbmN5IG51bWJlciBjYW5cbiAqIGJlIHF1aWV0bHkgd3Jvbmc6IGEgcGlwZWxpbmUgd2hvc2Ugc3ludGggcHJlZGF0ZXMgdGhlIGBwYi5kZXBsb3lzYCB0YWdzIGRlcGxveXNcbiAqIHBlcmZlY3RseSB3ZWxsIGFuZCBpcyBpbnZpc2libGUgdG8gZXZlcnkgRE9SQSBhZ2dyZWdhdGUuIE5vdGhpbmcgZWxzZSBpbiB0aGVcbiAqIHJlcG9ydCB3b3VsZCBzYXkgc28uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRVbnRyYWNrZWRQaXBlbGluZXMoc2NvcGU6IEFuYWx5dGljc1Njb3BlKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFdJVEggYWN0aXZlIEFTIChcbiAgICAgIFNFTEVDVCBwaXBlbGluZV9pZFxuICAgICAgRlJPTSBleGVjdXRpb25fZGFpbHlfcm9sbHVwc1xuICAgICAgV0hFUkUgb3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICAgIEFORCBkYXkgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIGRheSA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgICAgICBBTkQgc3RhZ2VfbmFtZSA9ICcnXG4gICAgICBHUk9VUCBCWSBwaXBlbGluZV9pZFxuICAgICAgSEFWSU5HIFNVTShydW5zKSA+IDBcbiAgICApLFxuICAgIHRyYWNrZWQgQVMgKFxuICAgICAgU0VMRUNUIERJU1RJTkNUIHBpcGVsaW5lX2lkXG4gICAgICBGUk9NIGRvcmFfZGVwbG95bWVudHNcbiAgICAgIFdIRVJFIG9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgICBBTkQgZGVwbG95ZWRfYXQgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIGRlcGxveWVkX2F0IDwgJHtzY29wZS50b306OnRpbWVzdGFtcHR6XG4gICAgKVxuICAgIFNFTEVDVCBhLnBpcGVsaW5lX2lkIEZST00gYWN0aXZlIGFcbiAgICBXSEVSRSBOT1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIHRyYWNrZWQgdCBXSEVSRSB0LnBpcGVsaW5lX2lkID0gYS5waXBlbGluZV9pZClcbiAgYCkpO1xuICByZXR1cm4gcm93c09mKHJvd3MpLm1hcCgocikgPT4gU3RyaW5nKHIucGlwZWxpbmVfaWQpKTtcbn1cblxuLyoqXG4gKiBQaXBlbGluZXMgcnVubmluZyBhIHBsdWdpbiB2ZXJzaW9uIHdpdGggYW4gT1BFTiBDcml0aWNhbCBleHBvc3VyZS5cbiAqXG4gKiBQb2ludC1pbi10aW1lLCBub3Qgd2luZG93ZWQ6IHdoYXQgbWF0dGVycyBpcyB3aGV0aGVyIHRoZSBwaXBlbGluZSBpcyBydW5uaW5nIG9uZVxuICogTk9XLiBBIENyaXRpY2FsIHRoYXQgd2FzIG9wZW4gbGFzdCBUdWVzZGF5IGFuZCBpcyBmaXhlZCB0b2RheSBpcyBub3Qgc29tZXRoaW5nIHRvXG4gKiBwdXQgaW4gZnJvbnQgb2YgYSBtYW5hZ2VyLCBhbmQgYGZpeGVkX2F0YCBpcyB3aGF0IHNheXMgc28uXG4gKlxuICogQW4gQUNDRVBURUQgZXhwb3N1cmUgaXMgZXhjbHVkZWQuIFNvbWVvbmUgd2l0aCB0aGUgYXV0aG9yaXR5IHRvIGFjY2VwdCBhIHJpc2sgaGFzXG4gKiBhbHJlYWR5IGRlY2lkZWQgYWJvdXQgaXQgaW4gd3JpdGluZywgd2l0aCBhIHJlYXNvbiBhbmQgYSBkZWFkbGluZTsgcmUtcmFpc2luZyBpdFxuICogd2Vla2x5IGlzIGhvdyBhIHJlcG9ydCB0ZWFjaGVzIGl0cyByZWFkZXIgdG8gc2tpcCBhIHNlY3Rpb24uIFRoZSBsYXBzZSBvZiB0aGF0XG4gKiBhY2NlcHRhbmNlIGlzIGEgc2VwYXJhdGUgZmluZGluZyAoYGxhcHNlZEFjY2VwdGFuY2VzYCkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRWdWxuZXJhYmxlUGlwZWxpbmVzKHNjb3BlOiBBbmFseXRpY3NTY29wZSk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeFJlYWQoKHR4KSA9PiB0eC5leGVjdXRlKHNxbGBcbiAgICBTRUxFQ1QgRElTVElOQ1QgcGlwZWxpbmVfaWRcbiAgICBGUk9NIHBsdWdpbl92dWxuX2V4cG9zdXJlXG4gICAgV0hFUkUgb3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICBBTkQgZml4ZWRfYXQgSVMgTlVMTFxuICAgICAgQU5EIGNyaXRpY2FsX2NvdW50ID4gMFxuICAgICAgQU5EIHRyaWFnZV9zdGF0ZSA8PiAnYWNjZXB0ZWQnXG4gIGApKTtcbiAgcmV0dXJuIHJvd3NPZihyb3dzKS5tYXAoKHIpID0+IFN0cmluZyhyLnBpcGVsaW5lX2lkKSk7XG59XG5cbi8qKlxuICogV2hlbiBlYWNoIHBpcGVsaW5lIGluIHRoZSB3aW5kb3cgd2FzIGxhc3QgY2hhbmdlZC5cbiAqXG4gKiBgcGlwZWxpbmVzLnVwZGF0ZWRfYXRgLCBub3QgYW4gYXVkaXQgcXVlcnk6IHRoZSBhdWRpdCB0cmFpbCBsaXZlcyBpbiBhbm90aGVyIHN0b3JlXG4gKiB3aXRoIGl0cyBvd24gcmV0ZW50aW9uLCBhbmQgdGhlIG9uZSBmYWN0IHRoaXMgbmVlZHMg4oCUIFwid2FzIHRoaXMgdG91Y2hlZCBzaG9ydGx5XG4gKiBiZWZvcmUgaXQgYnJva2VcIiDigJQgaXMgYWxyZWFkeSBvbiB0aGUgcm93LCBkdXJhYmx5LCBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiB0aGVcbiAqIGNoYW5nZSB3YXMgbWFkZSBpbi5cbiAqXG4gKiBUaGUgY29uc2VxdWVuY2UgaXMgc3RhdGVkIHJhdGhlciB0aGFuIGhpZGRlbjogYHVwZGF0ZWRfYXRgIG1vdmVzIGZvciBBTlkgd3JpdGUsXG4gKiBpbmNsdWRpbmcgYSByZW5hbWUuIFNvIHRoZSBmaW5kaW5nIHNheXMgXCJhZnRlciBhIGNvbmZpZ3VyYXRpb24gY2hhbmdlXCIsIHdoaWNoIGlzXG4gKiB0cnVlIG9mIGEgcmVuYW1lIHRvbywgYW5kIGRvZXMgbm90IGNsYWltIHRvIG5hbWUgdGhlIGNoYW5nZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBpcGVsaW5lQ29uZmlnQ2hhbmdlcyhzY29wZTogQW5hbHl0aWNzU2NvcGUpOiBQcm9taXNlPE1hcDxzdHJpbmcsIERhdGU+PiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUIGlkOjp0ZXh0IEFTIGlkLCB1cGRhdGVkX2F0XG4gICAgRlJPTSBwaXBlbGluZXNcbiAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgIEFORCBkZWxldGVkX2F0IElTIE5VTExcbiAgICAgIEFORCB1cGRhdGVkX2F0IElTIE5PVCBOVUxMXG4gIGApKTtcbiAgY29uc3Qgb3V0ID0gbmV3IE1hcDxzdHJpbmcsIERhdGU+KCk7XG4gIGZvciAoY29uc3QgciBvZiByb3dzT2Yocm93cykpIHtcbiAgICBjb25zdCBhdCA9IHIudXBkYXRlZF9hdCA/IG5ldyBEYXRlKFN0cmluZyhyLnVwZGF0ZWRfYXQpKSA6IG51bGw7XG4gICAgaWYgKGF0ICYmICFOdW1iZXIuaXNOYU4oYXQuZ2V0VGltZSgpKSkgb3V0LnNldChTdHJpbmcoci5pZCksIGF0KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vLyDilIDilIAgSGVscGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIFJvd3MgZnJvbSBhIHJhdyBgZXhlY3V0ZWAsIHdoaWNoZXZlciBzaGFwZSB0aGUgZHJpdmVyIHJldHVybmVkLiAqL1xuZnVuY3Rpb24gcm93c09mKHJlc3VsdDogdW5rbm93bik6IEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHJldHVybiByZXN1bHQgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICBjb25zdCByb3dzID0gKHJlc3VsdCBhcyB7IHJvd3M/OiB1bmtub3duIH0pPy5yb3dzO1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShyb3dzKSA/IHJvd3MgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IDogW107XG59XG5cbi8qKiBBIGNvdW50IGZyb20gYSBkcml2ZXIgdGhhdCBtYXkgaGFuZCBiYWNrIGEgc3RyaW5nIGZvciBhIGJpZ2ludC4gKi9cbmZ1bmN0aW9uIG51bSh2OiB1bmtub3duKTogbnVtYmVyIHtcbiAgY29uc3QgbiA9IHR5cGVvZiB2ID09PSAnbnVtYmVyJyA/IHYgOiBOdW1iZXIodiA/PyAwKTtcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShuKSA/IG4gOiAwO1xufVxuXG5mdW5jdGlvbiBpc29Pck51bGwodjogdW5rbm93bik6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIXYpIHJldHVybiBudWxsO1xuICBjb25zdCBkID0gdiBpbnN0YW5jZW9mIERhdGUgPyB2IDogbmV3IERhdGUoU3RyaW5nKHYpKTtcbiAgcmV0dXJuIE51bWJlci5pc05hTihkLmdldFRpbWUoKSkgPyBudWxsIDogZC50b0lTT1N0cmluZygpO1xufVxuIl19
|
|
627
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5hbHl0aWNzLXF1ZXJpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3JlcG9ydGluZy9hbmFseXRpY3MtcXVlcmllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOENHO0FBRUgsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzdELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQVc3RCxtREFBbUQ7QUFDbkQsU0FBUyxZQUFZLENBQUMsR0FBa0MsRUFBRSxLQUFxQjtJQUM3RSxPQUFPLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUM1QyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBWSxFQUFFLEtBQUssQ0FBQyxLQUFjLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBbUJEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxLQUFxQixFQUFFLEtBQUssR0FBRyxFQUFFO0lBQzFFLE1BQU0sSUFBSSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVB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QUFFLENBQUM7QUFDNUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBxdWVyaWVzIHRoZSBiZXNwb2tlIHJlcG9ydCBzZWN0aW9ucyByZWFkLlxuICpcbiAqIEFsbCBvZiB0aGVtIGdvIHRocm91Z2ggYGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzYCwgYGRvcmFfZGVwbG95bWVudHNgLFxuICogYHBpcGVsaW5lX3BsdWdpbl9yZXNvbHV0aW9uYCBvciBgcGx1Z2luX3Z1bG5fZXhwb3N1cmVgIOKAlCBuZXZlciByYXdcbiAqIGBwaXBlbGluZV9ldmVudHNgLiBUaGF0IGlzIHRoZSB3aG9sZSBwb2ludCBvZiB0aG9zZSB0YWJsZXM6IGEgcXVhcnRlcmx5IHJlcG9ydFxuICogb3ZlciBhIGJ1c3kgb3JnIGNvc3RzIGEgZmV3IGh1bmRyZWQgcm93cywgYW5kIGtlZXBzIHdvcmtpbmcgYWZ0ZXIgcmV0ZW50aW9uIGhhc1xuICogc3dlcHQgdGhlIGV2ZW50cy5cbiAqXG4gKiBUV08gUlVMRVMgRVZFUlkgUVVFUlkgSEVSRSBGT0xMT1dTOlxuICpcbiAqICAtIE5PVEhJTkcgSVMgUEVSLVBFUlNPTi4gRXZlcnkgYWdncmVnYXRlIGlzIHBlciBwaXBlbGluZSwgcGVyIHN0YWdlLCBwZXJcbiAqICAgIGNhdGVnb3J5IG9yIHBlciBlbnZpcm9ubWVudC4gVGhlIHNlY3Rpb24gcmVnaXN0cnkgcmVmdXNlcyBhIHBlci1wZXJzb24gaWQgYXRcbiAqICAgIHJlZ2lzdHJhdGlvbjsgdGhlc2UgcXVlcmllcyBtYWtlIHN1cmUgdGhlcmUgaXMgbm90aGluZyB0byByZWdpc3Rlci5cbiAqICAtIEEgWkVSTyBBTkQgQSBCTElORCBTUE9UIEFSRSBESUZGRVJFTlQuIFdoZXJlIGEgbnVtYmVyIGNhbiBiZSBhYnNlbnQgZm9yIGxhY2tcbiAqICAgIG9mIGRhdGEgcmF0aGVyIHRoYW4gbGFjayBvZiBhY3Rpdml0eSwgdGhlIHNoYXBlIGNhcnJpZXMgdGhhdCAoYG51bGxgLCBhXG4gKiAgICBgY292ZXJhZ2VgIGNvdW50LCBhbiBleHBsaWNpdCByZWFzb24pIGluc3RlYWQgb2YgY29sbGFwc2luZyB0byAwLlxuICpcbiAqIFJFQURTIEdPIFRPIFRIRSBSRVBMSUNBIFdIRU4gT05FIEVYSVNUUy4gRXZlcnkgcXVlcnkgYmVsb3cgcnVucyB0aHJvdWdoXG4gKiBgd2l0aFRlbmFudFR4UmVhZGAsIHRoZSByZWFkLW9ubHkgdmFyaWFudCBvZiBgd2l0aFRlbmFudFR4YC4gSXQgc2V0cyB0aGVcbiAqIGlkZW50aWNhbCBSTFMgR1VDcywgYWRkcyBgU0VUIFRSQU5TQUNUSU9OIFJFQUQgT05MWWAsIGFuZCBmYWxscyBiYWNrIHRvIHRoZVxuICogcHJpbWFyeSBhdXRvbWF0aWNhbGx5IHdoZW5ldmVyIHRoZXJlIGlzIG5vIHJlcGxpY2EsIHRoZSBraWxsIHN3aXRjaCBpcyBvZmYsXG4gKiByZXBsYXkgbGFnIGlzIGJleW9uZCBpdHMgdGhyZXNob2xkLCB0aGUgcmVxdWVzdCBoYXMgYWxyZWFkeSB3cml0dGVuLCBvciB0aGVyZVxuICogaXMgbm8gdGVuYW50IGNvbnRleHQg4oCUIHNvIHRoaXMgaXMgYSBuby1vcCB1bnRpbCBgREJfUkVBRF9IT1NUYCBpcyBjb25maWd1cmVkLlxuICpcbiAqIFdIWSBUSElTIEZJTEUgV0FTIFRIRSBGSVJTVCBUTyBPUFQgSU4uIFRocmVlIGNvbmRpdGlvbnMgZGVjaWRlIHdoZXRoZXIgYVxuICogcXVlcnkgbWF5IGxlYXZlIHRoZSBwcmltYXJ5LCBhbmQgdGhpcyBmaWxlIHNhdGlzZmllcyBhbGwgdGhyZWUgYnlcbiAqIGNvbnN0cnVjdGlvbiDigJQgc28gdGhleSBhcmUgc3RhdGVkIGhlcmUgcmF0aGVyIHRoYW4gY2l0ZWQsIG5vdyB0aGF0IHRoZSBwbGFuXG4gKiB0aGF0IGludHJvZHVjZWQgdGhlbSBpcyByZXRpcmVkOlxuICpcbiAqICAgLSBOb3RoaW5nIGhlcmUgd3JpdGVzLiBUaGlydGVlbiBhZ2dyZWdhdGUgU0VMRUNUcywgbm8gSU5TRVJULCBubyBVUERBVEUsIG5vXG4gKiAgICAgYFNFTEVDVCDigKYgRk9SIFVQREFURWAsIG5vIGFkdmlzb3J5IGxvY2sg4oCUIHNvIG5vbmUgb2YgdGhlIGZvdXIgY2FsbCBzaXRlc1xuICogICAgIHRoZSBQaGFzZSAwYSBhdWRpdCBmb3VuZCBoaWRpbmcgYmVoaW5kIHJlYWQtbG9va2luZyBjb2RlLlxuICogICAtIE5vdGhpbmcgaGVyZSBmZWVkcyBhbiBBVVRIT1JJWkFUSU9OIGRlY2lzaW9uLiBUaGVzZSBhcmUgZGFzaGJvYXJkXG4gKiAgICAgYWdncmVnYXRlczsgYSBzdGFsZSBwZXJtaXNzaW9uIGNoZWNrIGlzIGEgc2VjdXJpdHkgYnVnLCBhIHN0YWxlIGNoYXJ0IGlzXG4gKiAgICAgYSBzdGFsZSBjaGFydC5cbiAqICAgLSBOb2JvZHkgaXMgYWJvdXQgdG8gQUNUIG9uIHRoZSByZXN1bHQuIEEgdXNlciB3aG8ganVzdCBjcmVhdGVkIGEgcGlwZWxpbmVcbiAqICAgICBsb29rcyBmb3IgaXQgaW4gYSBsaXN0LCBub3QgaW4gYSAzMC1kYXkgZmFpbHVyZS1yYXRlIHJvbGx1cC5cbiAqXG4gKiBBbmQgaXQgaXMgdGhlIGJlc3Qgb2ZmbG9hZCBjYW5kaWRhdGUgZm9yIHRoZSBzYW1lIHJlYXNvbiBpdCBpcyBzYWZlOiB0aGVzZVxuICogYXJlIHRoZSBoZWF2aWVzdCBxdWVyaWVzIGluIHRoZSBwYWNrYWdlLCBzY2FubmluZyB0aW1lIHJhbmdlcyByYXRoZXIgdGhhblxuICogZmV0Y2hpbmcgcm93cyBieSBpZC5cbiAqXG4gKiBgU0VUIFRSQU5TQUNUSU9OIFJFQUQgT05MWWAgYXBwbGllcyBvbiB0aGUgUFJJTUFSWSBwYXRoIHRvbywgc28gaWYgYSB3cml0ZVxuICogaXMgZXZlciBhZGRlZCBiZWxvdyBpdCBmYWlscyBoZXJlLCBsb3VkbHksIHJhdGhlciB0aGFuIGF0IHdoaWNoZXZlciB0YXJnZXRcbiAqIHRoZSByZWFkIGhhcHBlbmVkIHRvIGxhbmQgb24uXG4gKi9cblxuaW1wb3J0IHsgYW5kLCBlcSwgZ3RlLCBpbkFycmF5LCBsdCwgc3FsIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgRkFJTFVSRV9DQVRFR09SWV9MQUJFTFMsIGlzVGVhbUFjdGlvbmFibGUgfSBmcm9tICcuL2ZhaWx1cmUtY2xhc3NpZmllci5qcyc7XG5pbXBvcnQgeyBsaXZlRXhwb3N1cmVQcmVkaWNhdGUgfSBmcm9tICcuL3BsdWdpbi1leHBvc3VyZS5qcyc7XG5pbXBvcnQgeyBzY2hlbWEgfSBmcm9tICcuLi8uLi9kYXRhYmFzZS9kcml6emxlLXNjaGVtYS5qcyc7XG5pbXBvcnQgdHlwZSB7IEZhaWx1cmVDYXRlZ29yeSB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL3NjaGVtYS9yZXBvcnRpbmctYW5hbHl0aWNzLmpzJztcbmltcG9ydCB7IHdpdGhUZW5hbnRUeFJlYWQgfSBmcm9tICcuLi8uLi9kYXRhYmFzZS90ZW5hbmN5LmpzJztcblxuLyoqIFRoZSB3aW5kb3cgYW5kIG9yZyBzY29wZSBldmVyeSBxdWVyeSB0YWtlcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQW5hbHl0aWNzU2NvcGUge1xuICBvcmdJZDogc3RyaW5nO1xuICAvKiogYFtzZWxmLCAuLi5kZXNjZW5kYW50c11gIGZvciBhIHJvbGx1cDsgdW5kZWZpbmVkID0gdGhpcyBvcmcgb25seS4gKi9cbiAgb3JnSWRzPzogc3RyaW5nW107XG4gIGZyb206IHN0cmluZztcbiAgdG86IHN0cmluZztcbn1cblxuLyoqIFRoZSBvcmcgcHJlZGljYXRlOiBvbmUgb3JnLCBvciBhIHJvbGx1cCBzZXQuICovXG5mdW5jdGlvbiBvcmdQcmVkaWNhdGUoY29sOiBQYXJhbWV0ZXJzPHR5cGVvZiBpbkFycmF5PlswXSwgc2NvcGU6IEFuYWx5dGljc1Njb3BlKSB7XG4gIHJldHVybiBzY29wZS5vcmdJZHMgJiYgc2NvcGUub3JnSWRzLmxlbmd0aCA+IDBcbiAgICA/IGluQXJyYXkoY29sLCBzY29wZS5vcmdJZHMpXG4gICAgOiBlcShjb2wgYXMgbmV2ZXIsIHNjb3BlLm9yZ0lkIGFzIG5ldmVyKTtcbn1cblxuLyoqIE9uZSBwaXBlbGluZSdzIGxpbmUgaW4gdGhlIGJyZWFrZG93bi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVCcmVha2Rvd25Sb3cge1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcHJvamVjdDogc3RyaW5nIHwgbnVsbDtcbiAgcnVuczogbnVtYmVyO1xuICBzdWNjZWVkZWQ6IG51bWJlcjtcbiAgZmFpbGVkOiBudW1iZXI7XG4gIHN1Y2Nlc3NQY3Q6IG51bWJlciB8IG51bGw7XG4gIHA5NU1zOiBudW1iZXIgfCBudWxsO1xuICBkZXBsb3lzOiBudW1iZXI7XG4gIC8qKiBUaGUgbW9zdCByZWNlbnQgZmFpbHVyZSdzIGRheSBhbmQgc3RhZ2UsIGZvciBcIndoYXQgdG8gbG9vayBhdCBmaXJzdFwiLiAqL1xuICBsYXN0RmFpbHVyZUF0OiBzdHJpbmcgfCBudWxsO1xuICBsYXN0RmFpbHVyZVN0YWdlOiBzdHJpbmcgfCBudWxsO1xuICBidWlsZFNlY29uZHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQZXItcGlwZWxpbmUgZGVsaXZlcnksIHdvcnN0IGZpcnN0LlxuICpcbiAqIFdPUlNUIEZJUlNULCBhbmQgY2FwcGVkLCBiZWNhdXNlIHRoZSBwb2ludCBvZiB0aGUgc2VjdGlvbiBpcyBcIndoZXJlIHNob3VsZFxuICogYXR0ZW50aW9uIGdvXCIuIEEgbGlzdCBzb3J0ZWQgYnkgbmFtZSwgb3IgYW4gdW5ib3VuZGVkIG9uZSwgaXMgYSBkYXRhIGR1bXA6IHRoZVxuICogbGVhZCBzdGlsbCBoYXMgdG8gZmluZCB0aGUgcHJvYmxlbSwgd2hpY2ggaXMgdGhlIHdvcmsgdGhlIHJlcG9ydCB3YXMgc3VwcG9zZWQgdG9cbiAqIGRvLiBUaWVzIGJyZWFrIG9uIHZvbHVtZSwgc28gYSA1MCUtc3VjY2VzcyBwaXBlbGluZSB0aGF0IHJhbiB0d2ljZSBkb2VzIG5vdFxuICogb3V0cmFuayBvbmUgdGhhdCByYW4gdHdvIGh1bmRyZWQgdGltZXMuXG4gKlxuICogYHN1Y2Nlc3NQY3RgIGlzIE5VTEwgZm9yIGEgcGlwZWxpbmUgd2l0aCBubyBydW5zIGluIHRoZSB3aW5kb3cg4oCUIG5vdCAwLiBBXG4gKiBwaXBlbGluZSBub2JvZHkgcmFuIGlzIG5vdCBhIHBpcGVsaW5lIHRoYXQgZmFpbGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGlwZWxpbmVCcmVha2Rvd24oc2NvcGU6IEFuYWx5dGljc1Njb3BlLCBsaW1pdCA9IDEwKTogUHJvbWlzZTxQaXBlbGluZUJyZWFrZG93blJvd1tdPiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgV0lUSCB0b3RhbHMgQVMgKFxuICAgICAgU0VMRUNUXG4gICAgICAgIHIucGlwZWxpbmVfaWQsXG4gICAgICAgIFNVTShyLnJ1bnMpOjppbnQgQVMgcnVucyxcbiAgICAgICAgU1VNKHIuc3VjY2VlZGVkKTo6aW50IEFTIHN1Y2NlZWRlZCxcbiAgICAgICAgU1VNKHIuZmFpbGVkKTo6aW50IEFTIGZhaWxlZCxcbiAgICAgICAgTUFYKHIucDk1X21zKTo6aW50IEFTIHA5NV9tcyxcbiAgICAgICAgU1VNKHIuYnVpbGRfc2Vjb25kcyk6OmludCBBUyBidWlsZF9zZWNvbmRzXG4gICAgICBGUk9NIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzIHJcbiAgICAgIFdIRVJFIHIub3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICAgIEFORCByLmRheSA+PSAke3Njb3BlLmZyb219Ojp0aW1lc3RhbXB0eiBBTkQgci5kYXkgPCAke3Njb3BlLnRvfTo6dGltZXN0YW1wdHpcbiAgICAgICAgLS0gVGhlIHBpcGVsaW5lLWxldmVsIGdyYWluIG9ubHk6IHN1bW1pbmcgdGhlIHN0YWdlIHJvd3MgdG9vIHdvdWxkIGNvdW50XG4gICAgICAgIC0tIGV2ZXJ5IHJ1biBvbmNlIHBlciBzdGFnZS5cbiAgICAgICAgQU5EIHIuc3RhZ2VfbmFtZSA9ICcnXG4gICAgICBHUk9VUCBCWSByLnBpcGVsaW5lX2lkXG4gICAgKSxcbiAgICBkZXBsb3lzIEFTIChcbiAgICAgIFNFTEVDVCBwaXBlbGluZV9pZCwgQ09VTlQoKik6OmludCBBUyBkZXBsb3lzXG4gICAgICBGUk9NIGRvcmFfZGVwbG95bWVudHNcbiAgICAgIFdIRVJFIG9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgICBBTkQgZGVwbG95ZWRfYXQgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIGRlcGxveWVkX2F0IDwgJHtzY29wZS50b306OnRpbWVzdGFtcHR6XG4gICAgICAgIEFORCBzdWNjZWVkZWQgPSB0cnVlXG4gICAgICBHUk9VUCBCWSBwaXBlbGluZV9pZFxuICAgICksXG4gICAgbGFzdF9mYWlsIEFTIChcbiAgICAgIC0tIFRoZSBtb3N0IHJlY2VudCBmYWlsaW5nIFNUQUdFIHJvdyBwZXIgcGlwZWxpbmU6IHdoYXQgdG8gbG9vayBhdCBmaXJzdC5cbiAgICAgIFNFTEVDVCBESVNUSU5DVCBPTiAocGlwZWxpbmVfaWQpIHBpcGVsaW5lX2lkLCBkYXksIHN0YWdlX25hbWVcbiAgICAgIEZST00gZXhlY3V0aW9uX2RhaWx5X3JvbGx1cHNcbiAgICAgIFdIRVJFIG9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgICBBTkQgZGF5ID49ICR7c2NvcGUuZnJvbX06OnRpbWVzdGFtcHR6IEFORCBkYXkgPCAke3Njb3BlLnRvfTo6dGltZXN0YW1wdHpcbiAgICAgICAgQU5EIHN0YWdlX25hbWUgPD4gJycgQU5EIGZhaWxlZCA+IDBcbiAgICAgIE9SREVSIEJZIHBpcGVsaW5lX2lkLCBkYXkgREVTQywgZmFpbGVkIERFU0NcbiAgICApXG4gICAgU0VMRUNUXG4gICAgICB0LnBpcGVsaW5lX2lkLFxuICAgICAgcC5waXBlbGluZV9uYW1lLFxuICAgICAgcC5wcm9qZWN0LFxuICAgICAgdC5ydW5zLCB0LnN1Y2NlZWRlZCwgdC5mYWlsZWQsIHQucDk1X21zLCB0LmJ1aWxkX3NlY29uZHMsXG4gICAgICBDT0FMRVNDRShkLmRlcGxveXMsIDApIEFTIGRlcGxveXMsXG4gICAgICBmLmRheSBBUyBsYXN0X2ZhaWx1cmVfYXQsXG4gICAgICBmLnN0YWdlX25hbWUgQVMgbGFzdF9mYWlsdXJlX3N0YWdlLFxuICAgICAgQ0FTRSBXSEVOIHQucnVucyA+IDAgVEhFTiBST1VORCgodC5zdWNjZWVkZWQ6Om51bWVyaWMgLyB0LnJ1bnMpICogMTAwLCAxKSBFTFNFIE5VTEwgRU5EIEFTIHN1Y2Nlc3NfcGN0XG4gICAgRlJPTSB0b3RhbHMgdFxuICAgIExFRlQgSk9JTiBkZXBsb3lzIGQgT04gZC5waXBlbGluZV9pZCA9IHQucGlwZWxpbmVfaWRcbiAgICBMRUZUIEpPSU4gbGFzdF9mYWlsIGYgT04gZi5waXBlbGluZV9pZCA9IHQucGlwZWxpbmVfaWRcbiAgICBMRUZUIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHQucGlwZWxpbmVfaWRcbiAgICAtLSBXb3JzdCBmaXJzdDogbG93ZXN0IHN1Y2Nlc3MgcmF0ZSwgdGhlbiBtb3N0IHJ1bnMsIHNvIGEgNTAlIHBpcGVsaW5lIHRoYXQgcmFuXG4gICAgLS0gdHdpY2UgZG9lcyBub3Qgb3V0cmFuayBvbmUgdGhhdCByYW4gdHdvIGh1bmRyZWQgdGltZXMuXG4gICAgT1JERVIgQlkgc3VjY2Vzc19wY3QgQVNDIE5VTExTIExBU1QsIHQucnVucyBERVNDXG4gICAgTElNSVQgJHtsaW1pdH1cbiAgYCkpO1xuICByZXR1cm4gcm93c09mKHJvd3MpLm1hcCgocikgPT4gKHtcbiAgICBwaXBlbGluZUlkOiBTdHJpbmcoci5waXBlbGluZV9pZCksXG4gICAgcGlwZWxpbmVOYW1lOiAoci5waXBlbGluZV9uYW1lIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgcHJvamVjdDogKHIucHJvamVjdCBhcyBzdHJpbmcgfCBudWxsKSA/PyBudWxsLFxuICAgIHJ1bnM6IG51bShyLnJ1bnMpLFxuICAgIHN1Y2NlZWRlZDogbnVtKHIuc3VjY2VlZGVkKSxcbiAgICBmYWlsZWQ6IG51bShyLmZhaWxlZCksXG4gICAgc3VjY2Vzc1BjdDogci5zdWNjZXNzX3BjdCA9PT0gbnVsbCA/IG51bGwgOiBOdW1iZXIoci5zdWNjZXNzX3BjdCksXG4gICAgcDk1TXM6IHIucDk1X21zID09PSBudWxsID8gbnVsbCA6IG51bShyLnA5NV9tcyksXG4gICAgZGVwbG95czogbnVtKHIuZGVwbG95cyksXG4gICAgbGFzdEZhaWx1cmVBdDogaXNvT3JOdWxsKHIubGFzdF9mYWlsdXJlX2F0KSxcbiAgICBsYXN0RmFpbHVyZVN0YWdlOiAoci5sYXN0X2ZhaWx1cmVfc3RhZ2UgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICBidWlsZFNlY29uZHM6IG51bShyLmJ1aWxkX3NlY29uZHMpLFxuICB9KSk7XG59XG5cbi8qKiBPbmUgZmFpbHVyZSBjYXRlZ29yeSdzIHNoYXJlIG9mIHRoZSBwZXJpb2QuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhaWx1cmVDYXRlZ29yeVJvdyB7XG4gIGNhdGVnb3J5OiBGYWlsdXJlQ2F0ZWdvcnk7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGNvdW50OiBudW1iZXI7XG4gIHNoYXJlUGN0OiBudW1iZXI7XG4gIC8qKiBXaGV0aGVyIHRoZSB0ZWFtIGNhbiBhY3Qgb24gaXQsIG9yIGl0IGhhcHBlbmVkIHRvIHRoZW0uICovXG4gIHRlYW1BY3Rpb25hYmxlOiBib29sZWFuO1xuICAvKiogQ2hhbmdlIHZzIHRoZSBwcmV2aW91cyBwZXJpb2QsIGluIGZhaWx1cmVzLiAqL1xuICBjaGFuZ2U6IG51bWJlciB8IG51bGw7XG4gIC8qKiBUaGUgcGlwZWxpbmVzIGl0IGhpdCBoYXJkZXN0LiAqL1xuICB0b3BQaXBlbGluZXM6IEFycmF5PHsgcGlwZWxpbmVJZDogc3RyaW5nOyBwaXBlbGluZU5hbWU6IHN0cmluZyB8IG51bGw7IGNvdW50OiBudW1iZXIgfT47XG59XG5cbi8qKlxuICogRmFpbHVyZXMgYnkgY2F0ZWdvcnksIHdpdGggdGhlIHByZXZpb3VzIHBlcmlvZCdzIGNvdW50cyBmb3IgdGhlIHRyZW5kLlxuICpcbiAqIFNQTElUUyBBQ1RJT05BQkxFIEZST00gTk9ULiBBIHdlZWsgd2hvc2UgZmFpbHVyZXMgd2VyZSBhbGwgY2xvdWQgdGhyb3R0bGluZyBpcyBhXG4gKiBkaWZmZXJlbnQgY29udmVyc2F0aW9uIGZyb20gb25lIHdob3NlIGZhaWx1cmVzIHdlcmUgYWxsIGJyb2tlbiB0ZXN0cywgYW5kXG4gKiBwcmVzZW50aW5nIHRoZW0gaW4gb25lIHJhbmtlZCBsaXN0IGludml0ZXMgZXhhY3RseSB0aGUgd3JvbmcgY29uY2x1c2lvbiDigJQgYSB0ZWFtXG4gKiBiZWluZyBhc2tlZCB0byBmaXggYW4gQVdTIGNhcGFjaXR5IHByb2JsZW0uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRGYWlsdXJlQW5hbHlzaXMoXG4gIHNjb3BlOiBBbmFseXRpY3NTY29wZSxcbiAgcHJldmlvdXM/OiB7IGZyb206IHN0cmluZzsgdG86IHN0cmluZyB9LFxuKTogUHJvbWlzZTx7IGNhdGVnb3JpZXM6IEZhaWx1cmVDYXRlZ29yeVJvd1tdOyB0b3RhbDogbnVtYmVyOyBhY3Rpb25hYmxlVG90YWw6IG51bWJlciB9PiB7XG4gIGNvbnN0IGNvdW50cyA9IGF3YWl0IGNhdGVnb3J5Q291bnRzKHNjb3BlKTtcbiAgY29uc3QgcHJpb3IgPSBwcmV2aW91cyA/IGF3YWl0IGNhdGVnb3J5Q291bnRzKHsgLi4uc2NvcGUsIC4uLnByZXZpb3VzIH0pIDogbnVsbDtcbiAgY29uc3QgdG90YWwgPSBbLi4uY291bnRzLnZhbHVlcygpXS5yZWR1Y2UoKHMsIHYpID0+IHMgKyB2LmNvdW50LCAwKTtcbiAgY29uc3QgdG9wQnlDYXRlZ29yeSA9IGF3YWl0IHRvcFBpcGVsaW5lc0J5Q2F0ZWdvcnkoc2NvcGUpO1xuXG4gIGNvbnN0IGNhdGVnb3JpZXMgPSBbLi4uY291bnRzLmVudHJpZXMoKV1cbiAgICAubWFwKChbY2F0ZWdvcnksIHZdKSA9PiAoe1xuICAgICAgY2F0ZWdvcnksXG4gICAgICBsYWJlbDogRkFJTFVSRV9DQVRFR09SWV9MQUJFTFNbY2F0ZWdvcnldID8/IGNhdGVnb3J5LFxuICAgICAgY291bnQ6IHYuY291bnQsXG4gICAgICBzaGFyZVBjdDogdG90YWwgPiAwID8gTnVtYmVyKCgodi5jb3VudCAvIHRvdGFsKSAqIDEwMCkudG9GaXhlZCgxKSkgOiAwLFxuICAgICAgdGVhbUFjdGlvbmFibGU6IGlzVGVhbUFjdGlvbmFibGUoY2F0ZWdvcnkpLFxuICAgICAgY2hhbmdlOiBwcmlvciA/IHYuY291bnQgLSAocHJpb3IuZ2V0KGNhdGVnb3J5KT8uY291bnQgPz8gMCkgOiBudWxsLFxuICAgICAgdG9wUGlwZWxpbmVzOiB0b3BCeUNhdGVnb3J5LmdldChjYXRlZ29yeSkgPz8gW10sXG4gICAgfSkpXG4gICAgLnNvcnQoKGEsIGIpID0+IGIuY291bnQgLSBhLmNvdW50KTtcblxuICByZXR1cm4ge1xuICAgIGNhdGVnb3JpZXMsXG4gICAgdG90YWwsXG4gICAgYWN0aW9uYWJsZVRvdGFsOiBjYXRlZ29yaWVzLmZpbHRlcigoYykgPT4gYy50ZWFtQWN0aW9uYWJsZSkucmVkdWNlKChzLCBjKSA9PiBzICsgYy5jb3VudCwgMCksXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNhdGVnb3J5Q291bnRzKHNjb3BlOiBBbmFseXRpY3NTY29wZSk6IFByb21pc2U8TWFwPEZhaWx1cmVDYXRlZ29yeSwgeyBjb3VudDogbnVtYmVyIH0+PiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUIGtleSBBUyBjYXRlZ29yeSwgU1VNKHZhbHVlOjppbnQpOjppbnQgQVMgY291bnRcbiAgICBGUk9NIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzIHIsIGpzb25iX2VhY2goci5mYWlsdXJlc19ieV9jYXRlZ29yeSlcbiAgICBXSEVSRSByLm9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgQU5EIHIuZGF5ID49ICR7c2NvcGUuZnJvbX06OnRpbWVzdGFtcHR6IEFORCByLmRheSA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgICAgQU5EIHIuc3RhZ2VfbmFtZSA9ICcnXG4gICAgR1JPVVAgQlkga2V5XG4gIGApKTtcbiAgY29uc3Qgb3V0ID0gbmV3IE1hcDxGYWlsdXJlQ2F0ZWdvcnksIHsgY291bnQ6IG51bWJlciB9PigpO1xuICBmb3IgKGNvbnN0IHIgb2Ygcm93c09mKHJvd3MpKSBvdXQuc2V0KHIuY2F0ZWdvcnkgYXMgRmFpbHVyZUNhdGVnb3J5LCB7IGNvdW50OiBudW0oci5jb3VudCkgfSk7XG4gIHJldHVybiBvdXQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHRvcFBpcGVsaW5lc0J5Q2F0ZWdvcnkoXG4gIHNjb3BlOiBBbmFseXRpY3NTY29wZSxcbiAgcGVyQ2F0ZWdvcnkgPSAzLFxuKTogUHJvbWlzZTxNYXA8RmFpbHVyZUNhdGVnb3J5LCBBcnJheTx7IHBpcGVsaW5lSWQ6IHN0cmluZzsgcGlwZWxpbmVOYW1lOiBzdHJpbmcgfCBudWxsOyBjb3VudDogbnVtYmVyIH0+Pj4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVCBjYXRlZ29yeSwgcGlwZWxpbmVfaWQsIHBpcGVsaW5lX25hbWUsIGNvdW50IEZST00gKFxuICAgICAgU0VMRUNUXG4gICAgICAgIGUua2V5IEFTIGNhdGVnb3J5LFxuICAgICAgICByLnBpcGVsaW5lX2lkLFxuICAgICAgICBwLnBpcGVsaW5lX25hbWUsXG4gICAgICAgIFNVTShlLnZhbHVlOjppbnQpOjppbnQgQVMgY291bnQsXG4gICAgICAgIFJPV19OVU1CRVIoKSBPVkVSIChQQVJUSVRJT04gQlkgZS5rZXkgT1JERVIgQlkgU1VNKGUudmFsdWU6OmludCkgREVTQykgQVMgcm5cbiAgICAgIC0tIENST1NTIEpPSU4gTEFURVJBTCwgbm90IGEgY29tbWEgam9pbi4gV2l0aCBGUk9NIGEsIGYoYS54KSBlIExFRlQgSk9JTiBiLFxuICAgICAgLS0gdGhlIExFRlQgSk9JTiBiaW5kcyB0byBlIGFsb25lIGFuZCByIGZhbGxzIG91dCBvZiBzY29wZSBpbiBpdHMgT04gY2xhdXNlXG4gICAgICAtLSAoXCJpbnZhbGlkIHJlZmVyZW5jZSB0byBGUk9NLWNsYXVzZSBlbnRyeVwiKS4gVGhlIGV4cGxpY2l0IGxhdGVyYWwga2VlcHMgYWxsXG4gICAgICAtLSB0aHJlZSBpbiBvbmUgam9pbiB0cmVlLlxuICAgICAgRlJPTSBleGVjdXRpb25fZGFpbHlfcm9sbHVwcyByXG4gICAgICBDUk9TUyBKT0lOIExBVEVSQUwganNvbmJfZWFjaChyLmZhaWx1cmVzX2J5X2NhdGVnb3J5KSBlXG4gICAgICBMRUZUIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHIucGlwZWxpbmVfaWRcbiAgICAgIFdIRVJFIHIub3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICAgIEFORCByLmRheSA+PSAke3Njb3BlLmZyb219Ojp0aW1lc3RhbXB0eiBBTkQgci5kYXkgPCAke3Njb3BlLnRvfTo6dGltZXN0YW1wdHpcbiAgICAgICAgQU5EIHIuc3RhZ2VfbmFtZSA9ICcnXG4gICAgICBHUk9VUCBCWSBlLmtleSwgci5waXBlbGluZV9pZCwgcC5waXBlbGluZV9uYW1lXG4gICAgKSByYW5rZWRcbiAgICBXSEVSRSBybiA8PSAke3BlckNhdGVnb3J5fVxuICBgKSk7XG4gIGNvbnN0IG91dCA9IG5ldyBNYXA8RmFpbHVyZUNhdGVnb3J5LCBBcnJheTx7IHBpcGVsaW5lSWQ6IHN0cmluZzsgcGlwZWxpbmVOYW1lOiBzdHJpbmcgfCBudWxsOyBjb3VudDogbnVtYmVyIH0+PigpO1xuICBmb3IgKGNvbnN0IHIgb2Ygcm93c09mKHJvd3MpKSB7XG4gICAgY29uc3Qga2V5ID0gci5jYXRlZ29yeSBhcyBGYWlsdXJlQ2F0ZWdvcnk7XG4gICAgY29uc3QgbGlzdCA9IG91dC5nZXQoa2V5KSA/PyBbXTtcbiAgICBsaXN0LnB1c2goe1xuICAgICAgcGlwZWxpbmVJZDogU3RyaW5nKHIucGlwZWxpbmVfaWQpLFxuICAgICAgcGlwZWxpbmVOYW1lOiAoci5waXBlbGluZV9uYW1lIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgICBjb3VudDogbnVtKHIuY291bnQpLFxuICAgIH0pO1xuICAgIG91dC5zZXQoa2V5LCBsaXN0KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKiogT25lIHN0YWdlJ3MgdGltaW5nLCBmb3IgdGhlIGRyaWxsLWRvd24uICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YWdlUGVyZm9ybWFuY2VSb3cge1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgcnVuczogbnVtYmVyO1xuICBwNTBNczogbnVtYmVyIHwgbnVsbDtcbiAgcDk1TXM6IG51bWJlciB8IG51bGw7XG4gIC8qKiBDaGFuZ2UgaW4gcDk1IHZzIHRoZSBwcmV2aW91cyBwZXJpb2QsIGFzIGEgcGVyY2VudGFnZS4gKi9cbiAgcDk1Q2hhbmdlUGN0OiBudW1iZXIgfCBudWxsO1xuICBmYWlsZWQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQZXItc3RhZ2UgdGltaW5ncyBmb3Igb25lIHBpcGVsaW5lLCBzbG93ZXN0IGZpcnN0LlxuICpcbiAqIFRoZSBzZWN0aW9uIGEgbGVhZCBvcGVucyBhZnRlciB0aGUgYnJlYWtkb3duIHNheXMgYSBwaXBlbGluZSBnb3Qgc2xvd2VyOiBcIndoaWNoXG4gKiBzdGFnZVwiIGlzIHRoZSBuZXh0IHF1ZXN0aW9uLCBhbmQgYW5zd2VyaW5nIGl0IGZyb20gcmF3IGV2ZW50cyB3b3VsZCBtZWFuIGFcbiAqIHNlY29uZCBzY2FuIG9mIHRoZSBzYW1lIHdpbmRvdy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFN0YWdlUGVyZm9ybWFuY2UoXG4gIHNjb3BlOiBBbmFseXRpY3NTY29wZSxcbiAgcGlwZWxpbmVJZDogc3RyaW5nLFxuICBwcmV2aW91cz86IHsgZnJvbTogc3RyaW5nOyB0bzogc3RyaW5nIH0sXG4pOiBQcm9taXNlPFN0YWdlUGVyZm9ybWFuY2VSb3dbXT4ge1xuICBjb25zdCBjdXJyZW50ID0gYXdhaXQgc3RhZ2VSb3dzKHNjb3BlLCBwaXBlbGluZUlkKTtcbiAgY29uc3QgcHJpb3I6IE1hcDxzdHJpbmcsIHsgcDk1TXM6IG51bWJlciB8IG51bGwgfT4gPSBwcmV2aW91c1xuICAgID8gbmV3IE1hcCgoYXdhaXQgc3RhZ2VSb3dzKHsgLi4uc2NvcGUsIC4uLnByZXZpb3VzIH0sIHBpcGVsaW5lSWQpKS5tYXAoKHMpID0+IFtzLnN0YWdlTmFtZSwgc10pKVxuICAgIDogbmV3IE1hcCgpO1xuICByZXR1cm4gY3VycmVudC5tYXAoKHMpID0+IHtcbiAgICBjb25zdCBiZWZvcmUgPSBwcmlvci5nZXQocy5zdGFnZU5hbWUpPy5wOTVNcyA/PyBudWxsO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zLFxuICAgICAgcDk1Q2hhbmdlUGN0OiBiZWZvcmUgJiYgYmVmb3JlID4gMCAmJiBzLnA5NU1zICE9PSBudWxsXG4gICAgICAgID8gTnVtYmVyKCgoKHMucDk1TXMgLSBiZWZvcmUpIC8gYmVmb3JlKSAqIDEwMCkudG9GaXhlZCgxKSlcbiAgICAgICAgOiBudWxsLFxuICAgIH07XG4gIH0pLnNvcnQoKGEsIGIpID0+IChiLnA5NU1zID8/IDApIC0gKGEucDk1TXMgPz8gMCkpO1xufVxuXG5pbnRlcmZhY2UgU3RhZ2VSb3cgeyBzdGFnZU5hbWU6IHN0cmluZzsgcnVuczogbnVtYmVyOyBwNTBNczogbnVtYmVyIHwgbnVsbDsgcDk1TXM6IG51bWJlciB8IG51bGw7IGZhaWxlZDogbnVtYmVyIH1cblxuYXN5bmMgZnVuY3Rpb24gc3RhZ2VSb3dzKHNjb3BlOiBBbmFseXRpY3NTY29wZSwgcGlwZWxpbmVJZDogc3RyaW5nKTogUHJvbWlzZTxTdGFnZVJvd1tdPiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguc2VsZWN0KHtcbiAgICBzdGFnZU5hbWU6IHNjaGVtYS5leGVjdXRpb25EYWlseVJvbGx1cC5zdGFnZU5hbWUsXG4gICAgcnVuczogc3FsPG51bWJlcj5gU1VNKCR7c2NoZW1hLmV4ZWN1dGlvbkRhaWx5Um9sbHVwLnJ1bnN9KTo6aW50YCxcbiAgICBmYWlsZWQ6IHNxbDxudW1iZXI+YFNVTSgke3NjaGVtYS5leGVjdXRpb25EYWlseVJvbGx1cC5mYWlsZWR9KTo6aW50YCxcbiAgICAvLyBNQVggb2YgdGhlIGRhaWx5IHA5NXMsIG5vdCBhbiBhdmVyYWdlIG9mIHBlcmNlbnRpbGVzOiBhdmVyYWdpbmdcbiAgICAvLyBwZXJjZW50aWxlcyBpcyBub3QgYSBwZXJjZW50aWxlIG9mIGFueXRoaW5nLCBhbmQgdGhlIHdvcnN0IGRheSBpcyB0aGVcbiAgICAvLyBudW1iZXIgc29tZWJvZHkgd291bGQgYWN0IG9uLlxuICAgIHA1ME1zOiBzcWw8bnVtYmVyIHwgbnVsbD5gTUFYKCR7c2NoZW1hLmV4ZWN1dGlvbkRhaWx5Um9sbHVwLnA1ME1zfSk6OmludGAsXG4gICAgcDk1TXM6IHNxbDxudW1iZXIgfCBudWxsPmBNQVgoJHtzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAucDk1TXN9KTo6aW50YCxcbiAgfSkuZnJvbShzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXApXG4gICAgLndoZXJlKGFuZChcbiAgICAgIG9yZ1ByZWRpY2F0ZShzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAub3JnSWQsIHNjb3BlKSxcbiAgICAgIGVxKHNjaGVtYS5leGVjdXRpb25EYWlseVJvbGx1cC5waXBlbGluZUlkLCBwaXBlbGluZUlkKSxcbiAgICAgIGd0ZShzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAuZGF5LCBuZXcgRGF0ZShzY29wZS5mcm9tKSksXG4gICAgICBsdChzY2hlbWEuZXhlY3V0aW9uRGFpbHlSb2xsdXAuZGF5LCBuZXcgRGF0ZShzY29wZS50bykpLFxuICAgICAgc3FsYCR7c2NoZW1hLmV4ZWN1dGlvbkRhaWx5Um9sbHVwLnN0YWdlTmFtZX0gPD4gJydgLFxuICAgICkpXG4gICAgLmdyb3VwQnkoc2NoZW1hLmV4ZWN1dGlvbkRhaWx5Um9sbHVwLnN0YWdlTmFtZSkpO1xuICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgU3RhZ2VSb3c+KCk7XG4gIGZvciAoY29uc3QgciBvZiByb3dzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pikge1xuICAgIG1hcC5zZXQoU3RyaW5nKHIuc3RhZ2VOYW1lKSwge1xuICAgICAgc3RhZ2VOYW1lOiBTdHJpbmcoci5zdGFnZU5hbWUpLFxuICAgICAgcnVuczogbnVtKHIucnVucyksXG4gICAgICBmYWlsZWQ6IG51bShyLmZhaWxlZCksXG4gICAgICBwNTBNczogci5wNTBNcyA9PT0gbnVsbCA/IG51bGwgOiBudW0oci5wNTBNcyksXG4gICAgICBwOTVNczogci5wOTVNcyA9PT0gbnVsbCA/IG51bGwgOiBudW0oci5wOTVNcyksXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIFsuLi5tYXAudmFsdWVzKCldO1xufVxuXG4vKiogQnVpbGQgdGltZSBieSBwcm9qZWN0IGFuZCBwaXBlbGluZS4gTm8gbW9uZXkgYW55d2hlcmUuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc291cmNlUm93IHtcbiAgcHJvamVjdDogc3RyaW5nIHwgbnVsbDtcbiAgcGlwZWxpbmVJZDogc3RyaW5nO1xuICBwaXBlbGluZU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIGJ1aWxkU2Vjb25kczogbnVtYmVyO1xuICBydW5zOiBudW1iZXI7XG4gIHNoYXJlUGN0OiBudW1iZXI7XG59XG5cbi8qKlxuICogV2hlcmUgdGhlIGJ1aWxkIHRpbWUgd2VudC5cbiAqXG4gKiBTRUNPTkRTLCBOT1QgRE9MTEFSUy4gQSBjb3N0IGZpZ3VyZSBuZWVkcyB0aGUgaW5zdGFuY2UgdHlwZXMsIHRoZSBzcG90L29uLWRlbWFuZFxuICogbWl4IGFuZCB0aGUgYWNjb3VudCdzIG93biBkaXNjb3VudHMsIG5vbmUgb2Ygd2hpY2ggdGhpcyBwbGF0Zm9ybSBrbm93cyDigJQgc28gYVxuICogZG9sbGFyIG51bWJlciBoZXJlIHdvdWxkIGJlIGEgZ3Vlc3MgcHJlc2VudGVkIGFzIGFuIGludm9pY2UuIEJ1aWxkIHRpbWUgaXMgdGhlXG4gKiB0aGluZyBhY3R1YWxseSBtZWFzdXJlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFJlc291cmNlQ29uc3VtcHRpb24oc2NvcGU6IEFuYWx5dGljc1Njb3BlLCBsaW1pdCA9IDIwKTogUHJvbWlzZTx7XG4gIHBpcGVsaW5lczogUmVzb3VyY2VSb3dbXTtcbiAgdG90YWxCdWlsZFNlY29uZHM6IG51bWJlcjtcbn0+IHtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeFJlYWQoKHR4KSA9PiB0eC5leGVjdXRlKHNxbGBcbiAgICBTRUxFQ1RcbiAgICAgIHAucHJvamVjdCxcbiAgICAgIHIucGlwZWxpbmVfaWQsXG4gICAgICBwLnBpcGVsaW5lX25hbWUsXG4gICAgICBTVU0oci5idWlsZF9zZWNvbmRzKTo6aW50IEFTIGJ1aWxkX3NlY29uZHMsXG4gICAgICBTVU0oci5ydW5zKTo6aW50IEFTIHJ1bnNcbiAgICBGUk9NIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzIHJcbiAgICBMRUZUIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHIucGlwZWxpbmVfaWRcbiAgICBXSEVSRSByLm9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgQU5EIHIuZGF5ID49ICR7c2NvcGUuZnJvbX06OnRpbWVzdGFtcHR6IEFORCByLmRheSA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgICAgQU5EIHIuc3RhZ2VfbmFtZSA9ICcnXG4gICAgR1JPVVAgQlkgcC5wcm9qZWN0LCByLnBpcGVsaW5lX2lkLCBwLnBpcGVsaW5lX25hbWVcbiAgICBPUkRFUiBCWSBidWlsZF9zZWNvbmRzIERFU0NcbiAgICBMSU1JVCAke2xpbWl0fVxuICBgKSk7XG4gIGNvbnN0IGxpc3QgPSByb3dzT2Yocm93cyk7XG4gIGNvbnN0IHRvdGFsID0gbGlzdC5yZWR1Y2UoKHMsIHIpID0+IHMgKyBudW0oci5idWlsZF9zZWNvbmRzKSwgMCk7XG4gIHJldHVybiB7XG4gICAgdG90YWxCdWlsZFNlY29uZHM6IHRvdGFsLFxuICAgIHBpcGVsaW5lczogbGlzdC5tYXAoKHIpID0+ICh7XG4gICAgICBwcm9qZWN0OiAoci5wcm9qZWN0IGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgICBwaXBlbGluZUlkOiBTdHJpbmcoci5waXBlbGluZV9pZCksXG4gICAgICBwaXBlbGluZU5hbWU6IChyLnBpcGVsaW5lX25hbWUgYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICAgIGJ1aWxkU2Vjb25kczogbnVtKHIuYnVpbGRfc2Vjb25kcyksXG4gICAgICBydW5zOiBudW0oci5ydW5zKSxcbiAgICAgIHNoYXJlUGN0OiB0b3RhbCA+IDAgPyBOdW1iZXIoKChudW0oci5idWlsZF9zZWNvbmRzKSAvIHRvdGFsKSAqIDEwMCkudG9GaXhlZCgxKSkgOiAwLFxuICAgIH0pKSxcbiAgfTtcbn1cblxuLyoqIE9uZSBjb21taXQncyBqb3VybmV5IGFjcm9zcyBlbnZpcm9ubWVudHMuICovXG5leHBvcnQgaW50ZXJmYWNlIFByb21vdGlvblJvdyB7XG4gIGNvbW1pdFNoYTogc3RyaW5nO1xuICAvKiogRW52aXJvbm1lbnQg4oaSIHdoZW4gaXQgbGFuZGVkIHRoZXJlLCBpbiB0aGUgb3JkZXIgaXQgcmVhY2hlZCB0aGVtLiAqL1xuICBzdG9wczogQXJyYXk8eyBlbnZpcm9ubWVudDogc3RyaW5nOyBkZXBsb3llZEF0OiBzdHJpbmc7IGhvdXJzRnJvbVByZXZpb3VzOiBudW1iZXIgfCBudWxsIH0+O1xuICAvKiogVHJ1ZSB3aGVuIHRoZSBjb21taXQgcmVhY2hlZCBhIG5vbi1wcm9kdWN0aW9uIGVudmlyb25tZW50IGFuZCBzdG9wcGVkLiAqL1xuICBzdHVjazogYm9vbGVhbjtcbiAgZnVydGhlc3Q6IHN0cmluZztcbn1cblxuLyoqXG4gKiBXaGVyZSBjb21taXRzIGdvdCB0bywgYW5kIHdoZXJlIHRoZXkgc3RvcHBlZC5cbiAqXG4gKiBcIlN0dWNrXCIgaXMgdGhlIG51bWJlciB3b3J0aCByZWFkaW5nLiBBIGNvbW1pdCB0aGF0IHJlYWNoZWQgc3RhZ2luZyBmb3VyIGRheXMgYWdvXG4gKiBhbmQgbmV2ZXIgd2VudCBmdXJ0aGVyIGlzIHdvcmsgdGhhdCBpcyBmaW5pc2hlZCBhbmQgbm90IGRlbGl2ZXJlZCDigJQgd2hpY2ggZG9lc1xuICogbm90IGFwcGVhciBpbiBkZXBsb3ltZW50IGZyZXF1ZW5jeSwgc3VjY2VzcyByYXRlIG9yIGxlYWQgdGltZSwgYmVjYXVzZSBieSBldmVyeVxuICogb25lIG9mIHRob3NlIG1lYXN1cmVzIG5vdGhpbmcgaGFwcGVuZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQcm9tb3Rpb25WaWV3KFxuICBzY29wZTogQW5hbHl0aWNzU2NvcGUsXG4gIHByb2R1Y3Rpb25FbnYgPSAncHJvZHVjdGlvbicsXG4gIGxpbWl0ID0gMjUsXG4pOiBQcm9taXNlPHsgY29tbWl0czogUHJvbW90aW9uUm93W107IHN0dWNrQ291bnQ6IG51bWJlciB9PiB7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgU0VMRUNUIGNvbW1pdF9zaGEsIGVudmlyb25tZW50LCBNSU4oZGVwbG95ZWRfYXQpIEFTIGRlcGxveWVkX2F0XG4gICAgRlJPTSBkb3JhX2RlcGxveW1lbnRzXG4gICAgV0hFUkUgb3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICBBTkQgZGVwbG95ZWRfYXQgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIGRlcGxveWVkX2F0IDwgJHtzY29wZS50b306OnRpbWVzdGFtcHR6XG4gICAgICBBTkQgc3VjY2VlZGVkID0gdHJ1ZVxuICAgICAgQU5EIGNvbW1pdF9zaGEgSVMgTk9UIE5VTExcbiAgICBHUk9VUCBCWSBjb21taXRfc2hhLCBlbnZpcm9ubWVudFxuICAgIE9SREVSIEJZIE1JTihkZXBsb3llZF9hdCkgREVTQ1xuICBgKSk7XG5cbiAgY29uc3QgYnlDb21taXQgPSBuZXcgTWFwPHN0cmluZywgQXJyYXk8eyBlbnZpcm9ubWVudDogc3RyaW5nOyBkZXBsb3llZEF0OiBEYXRlIH0+PigpO1xuICBmb3IgKGNvbnN0IHIgb2Ygcm93c09mKHJvd3MpKSB7XG4gICAgY29uc3Qgc2hhID0gU3RyaW5nKHIuY29tbWl0X3NoYSk7XG4gICAgY29uc3QgbGlzdCA9IGJ5Q29tbWl0LmdldChzaGEpID8/IFtdO1xuICAgIGxpc3QucHVzaCh7IGVudmlyb25tZW50OiBTdHJpbmcoci5lbnZpcm9ubWVudCksIGRlcGxveWVkQXQ6IG5ldyBEYXRlKFN0cmluZyhyLmRlcGxveWVkX2F0KSkgfSk7XG4gICAgYnlDb21taXQuc2V0KHNoYSwgbGlzdCk7XG4gIH1cblxuICBjb25zdCBjb21taXRzOiBQcm9tb3Rpb25Sb3dbXSA9IFsuLi5ieUNvbW1pdC5lbnRyaWVzKCldLm1hcCgoW2NvbW1pdFNoYSwgcmF3XSkgPT4ge1xuICAgIGNvbnN0IG9yZGVyZWQgPSBbLi4ucmF3XS5zb3J0KChhLCBiKSA9PiBhLmRlcGxveWVkQXQuZ2V0VGltZSgpIC0gYi5kZXBsb3llZEF0LmdldFRpbWUoKSk7XG4gICAgY29uc3Qgc3RvcHMgPSBvcmRlcmVkLm1hcCgoc3RvcCwgaSkgPT4gKHtcbiAgICAgIGVudmlyb25tZW50OiBzdG9wLmVudmlyb25tZW50LFxuICAgICAgZGVwbG95ZWRBdDogc3RvcC5kZXBsb3llZEF0LnRvSVNPU3RyaW5nKCksXG4gICAgICBob3Vyc0Zyb21QcmV2aW91czogaSA9PT0gMFxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiBOdW1iZXIoKChzdG9wLmRlcGxveWVkQXQuZ2V0VGltZSgpIC0gKG9yZGVyZWRbaSAtIDFdIGFzIHsgZGVwbG95ZWRBdDogRGF0ZSB9KS5kZXBsb3llZEF0LmdldFRpbWUoKSkgLyAzNjAwXzAwMCkudG9GaXhlZCgxKSksXG4gICAgfSkpO1xuICAgIGNvbnN0IGZ1cnRoZXN0ID0gb3JkZXJlZFtvcmRlcmVkLmxlbmd0aCAtIDFdPy5lbnZpcm9ubWVudCA/PyAnJztcbiAgICByZXR1cm4geyBjb21taXRTaGEsIHN0b3BzLCBmdXJ0aGVzdCwgc3R1Y2s6IGZ1cnRoZXN0ICE9PSBwcm9kdWN0aW9uRW52IH07XG4gIH0pXG4gICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IGFMYXN0ID0gYS5zdG9wc1thLnN0b3BzLmxlbmd0aCAtIDFdPy5kZXBsb3llZEF0ID8/ICcnO1xuICAgICAgY29uc3QgYkxhc3QgPSBiLnN0b3BzW2Iuc3RvcHMubGVuZ3RoIC0gMV0/LmRlcGxveWVkQXQgPz8gJyc7XG4gICAgICByZXR1cm4gYkxhc3QubG9jYWxlQ29tcGFyZShhTGFzdCk7XG4gICAgfSlcbiAgICAuc2xpY2UoMCwgbGltaXQpO1xuXG4gIHJldHVybiB7IGNvbW1pdHMsIHN0dWNrQ291bnQ6IGNvbW1pdHMuZmlsdGVyKChjKSA9PiBjLnN0dWNrKS5sZW5ndGggfTtcbn1cblxuLyoqIE91dGRhdGVkIHBsdWdpbiB1c2FnZSwgcGVyIHBpcGVsaW5lIGFuZCBzdGVwLiAqL1xuZXhwb3J0IGludGVyZmFjZSBPdXRkYXRlZFBsdWdpblJvdyB7XG4gIHBpcGVsaW5lSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgc3RlcE5hbWU6IHN0cmluZztcbiAgcGx1Z2luOiBzdHJpbmc7XG4gIGluVXNlOiBzdHJpbmcgfCBudWxsO1xuICBsYXRlc3Q6IHN0cmluZyB8IG51bGw7XG4gIGdhcDogc3RyaW5nIHwgbnVsbDtcbiAgd2l0aGluUG9saWN5OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFdoaWNoIHBpcGVsaW5lcyBhcmUgYmVoaW5kIG9uIGEgcGx1Z2luLCB3b3JzdCBnYXAgZmlyc3QuXG4gKlxuICogUmVhZHMgdGhlIERFQ0xBUkVEIHNpZGUgKGBwaXBlbGluZV9wbHVnaW5fcmVzb2x1dGlvbmApLiBBIHBpcGVsaW5lJ3MgZGVjbGFyZWRcbiAqIHJhbmdlIGFuZCB3aGF0IGl0IGxhc3QgYWN0dWFsbHkgcmFuIGNhbiBkaXNhZ3JlZSDigJQgd2hpY2ggaXMgd2h5IHRoZSB2dWxuZXJhYmlsaXR5XG4gKiBzZWN0aW9uIGJlbG93IHJlYWRzIHRoZSBkZXBsb3llZCBzaWRlIGFuZCBzYXlzIHdoaWNoIGl0IGlzIHNob3dpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPdXRkYXRlZFBsdWdpbnMoc2NvcGU6IEFuYWx5dGljc1Njb3BlLCBsaW1pdCA9IDUwKTogUHJvbWlzZTx7XG4gIHJvd3M6IE91dGRhdGVkUGx1Z2luUm93W107XG4gIGJlaGluZFBpcGVsaW5lczogbnVtYmVyO1xuICBtYWpvckJlaGluZDogbnVtYmVyO1xufT4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVFxuICAgICAgci5waXBlbGluZV9pZCwgcC5waXBlbGluZV9uYW1lLCByLnN0YWdlX25hbWUsIHIuc3RlcF9uYW1lLFxuICAgICAgQ09BTEVTQ0Uoci5wbHVnaW5fcHVibGlzaGVyIHx8ICcvJywgJycpIHx8IHIucGx1Z2luX25hbWUgQVMgcGx1Z2luLFxuICAgICAgci5yZXNvbHZlZF92ZXJzaW9uLCByLmxhdGVzdF92ZXJzaW9uLCByLnZlcnNpb25fZ2FwLCByLndpdGhpbl9wb2xpY3lcbiAgICBGUk9NIHBpcGVsaW5lX3BsdWdpbl9yZXNvbHV0aW9uIHJcbiAgICBMRUZUIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHIucGlwZWxpbmVfaWRcbiAgICBXSEVSRSByLm9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgQU5EIChyLnZlcnNpb25fZ2FwIElOICgnbWFqb3InLCAnbWlub3InLCAncGF0Y2gnKSBPUiByLndpdGhpbl9wb2xpY3kgPSBmYWxzZSlcbiAgICBPUkRFUiBCWSBDQVNFIHIudmVyc2lvbl9nYXAgV0hFTiAnbWFqb3InIFRIRU4gMCBXSEVOICdtaW5vcicgVEhFTiAxIFdIRU4gJ3BhdGNoJyBUSEVOIDIgRUxTRSAzIEVORCxcbiAgICAgICAgICAgICByLnBpcGVsaW5lX2lkXG4gICAgTElNSVQgJHtsaW1pdH1cbiAgYCkpO1xuICBjb25zdCBsaXN0ID0gcm93c09mKHJvd3MpLm1hcCgocikgPT4gKHtcbiAgICBwaXBlbGluZUlkOiBTdHJpbmcoci5waXBlbGluZV9pZCksXG4gICAgcGlwZWxpbmVOYW1lOiAoci5waXBlbGluZV9uYW1lIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgc3RhZ2VOYW1lOiBTdHJpbmcoci5zdGFnZV9uYW1lKSxcbiAgICBzdGVwTmFtZTogU3RyaW5nKHIuc3RlcF9uYW1lKSxcbiAgICBwbHVnaW46IFN0cmluZyhyLnBsdWdpbiksXG4gICAgaW5Vc2U6IChyLnJlc29sdmVkX3ZlcnNpb24gYXMgc3RyaW5nIHwgbnVsbCkgPz8gbnVsbCxcbiAgICBsYXRlc3Q6IChyLmxhdGVzdF92ZXJzaW9uIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgZ2FwOiAoci52ZXJzaW9uX2dhcCBhcyBzdHJpbmcgfCBudWxsKSA/PyBudWxsLFxuICAgIHdpdGhpblBvbGljeTogci53aXRoaW5fcG9saWN5ICE9PSBmYWxzZSxcbiAgfSkpO1xuICByZXR1cm4ge1xuICAgIHJvd3M6IGxpc3QsXG4gICAgYmVoaW5kUGlwZWxpbmVzOiBuZXcgU2V0KGxpc3QubWFwKChyKSA9PiByLnBpcGVsaW5lSWQpKS5zaXplLFxuICAgIG1ham9yQmVoaW5kOiBsaXN0LmZpbHRlcigocikgPT4gci5nYXAgPT09ICdtYWpvcicpLmxlbmd0aCxcbiAgfTtcbn1cblxuLyoqIEEgcGlwZWxpbmUncyBleHBvc3VyZSB0byBhIHZ1bG5lcmFibGUgcGx1Z2luIHZlcnNpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIFZ1bG5lcmFiaWxpdHlSb3cge1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcGx1Z2luOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgLyoqIGBkZXBsb3llZGAgPSB3aGF0IGFjdHVhbGx5IHJhbjsgYGRlY2xhcmVkYCA9IHdoYXQgdGhlIGNvbmZpZyBhc2tzIGZvci4gKi9cbiAgc291cmNlOiBzdHJpbmc7XG4gIGNyaXRpY2FsOiBudW1iZXI7XG4gIGhpZ2g6IG51bWJlcjtcbiAgZmluZGluZ3M6IEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbiAgZmxhZ2dlZEF0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGx1Z2luIHZ1bG5lcmFiaWxpdGllcywgcGVyIHBpcGVsaW5lLCBDcml0aWNhbHMgZmlyc3QuXG4gKlxuICogU0FZUyBXSEVUSEVSIElUIElTIERFQ0xBUkVEIE9SIERFUExPWUVELiBBIHBpcGVsaW5lIHdob3NlIGNvbmZpZyB3YXMgdXBkYXRlZCB0byBhXG4gKiBmaXhlZCB2ZXJzaW9uIGJ1dCB3aGljaCBoYXMgbm90IHJlLXN5bnRoZWQgaXMgc3RpbGwgcnVubmluZyB0aGUgdnVsbmVyYWJsZSBpbWFnZSxcbiAqIGFuZCBhIHJlcG9ydCB0aGF0IGNvbGxhcHNlZCB0aGUgdHdvIHdvdWxkIHRlbGwgYSBtYW5hZ2VyIHRoZSBwcm9ibGVtIGlzIHNvbHZlZFxuICogd2hpbGUgdGhlIG9sZCBpbWFnZSBrZWVwcyBydW5uaW5nLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGx1Z2luVnVsbmVyYWJpbGl0aWVzKHNjb3BlOiBBbmFseXRpY3NTY29wZSwgbGltaXQgPSA1MCk6IFByb21pc2U8e1xuICByb3dzOiBWdWxuZXJhYmlsaXR5Um93W107XG4gIGV4cG9zZWRQaXBlbGluZXM6IG51bWJlcjtcbiAgY3JpdGljYWxQaXBlbGluZXM6IG51bWJlcjtcbn0+IHtcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeFJlYWQoKHR4KSA9PiB0eC5leGVjdXRlKHNxbGBcbiAgICBTRUxFQ1RcbiAgICAgIHYucGlwZWxpbmVfaWQsIHAucGlwZWxpbmVfbmFtZSxcbiAgICAgIENPQUxFU0NFKHYucGx1Z2luX3B1Ymxpc2hlciB8fCAnLycsICcnKSB8fCB2LnBsdWdpbl9uYW1lIEFTIHBsdWdpbixcbiAgICAgIHYucGx1Z2luX3ZlcnNpb24sIHYuc291cmNlLCB2LmNyaXRpY2FsX2NvdW50LCB2LmhpZ2hfY291bnQsIHYudG9wX2ZpbmRpbmdzLCB2LmZsYWdnZWRfYXRcbiAgICBGUk9NIHBsdWdpbl92dWxuX2V4cG9zdXJlIHZcbiAgICBMRUZUIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHYucGlwZWxpbmVfaWRcbiAgICBXSEVSRSB2Lm9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgQU5EICR7bGl2ZUV4cG9zdXJlUHJlZGljYXRlKG5vdywgJ3YnKX1cbiAgICBPUkRFUiBCWSB2LmNyaXRpY2FsX2NvdW50IERFU0MsIHYuaGlnaF9jb3VudCBERVNDXG4gICAgTElNSVQgJHtsaW1pdH1cbiAgYCkpO1xuICBjb25zdCBsaXN0ID0gcm93c09mKHJvd3MpLm1hcCgocikgPT4gKHtcbiAgICBwaXBlbGluZUlkOiBTdHJpbmcoci5waXBlbGluZV9pZCksXG4gICAgcGlwZWxpbmVOYW1lOiAoci5waXBlbGluZV9uYW1lIGFzIHN0cmluZyB8IG51bGwpID8/IG51bGwsXG4gICAgcGx1Z2luOiBTdHJpbmcoci5wbHVnaW4pLFxuICAgIHZlcnNpb246IFN0cmluZyhyLnBsdWdpbl92ZXJzaW9uKSxcbiAgICBzb3VyY2U6IFN0cmluZyhyLnNvdXJjZSksXG4gICAgY3JpdGljYWw6IG51bShyLmNyaXRpY2FsX2NvdW50KSxcbiAgICBoaWdoOiBudW0oci5oaWdoX2NvdW50KSxcbiAgICBmaW5kaW5nczogKHIudG9wX2ZpbmRpbmdzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PikgPz8gW10sXG4gICAgZmxhZ2dlZEF0OiBpc29Pck51bGwoci5mbGFnZ2VkX2F0KSA/PyBuZXcgRGF0ZSgwKS50b0lTT1N0cmluZygpLFxuICB9KSk7XG4gIHJldHVybiB7XG4gICAgcm93czogbGlzdCxcbiAgICBleHBvc2VkUGlwZWxpbmVzOiBuZXcgU2V0KGxpc3QubWFwKChyKSA9PiByLnBpcGVsaW5lSWQpKS5zaXplLFxuICAgIGNyaXRpY2FsUGlwZWxpbmVzOiBuZXcgU2V0KGxpc3QuZmlsdGVyKChyKSA9PiByLmNyaXRpY2FsID4gMCkubWFwKChyKSA9PiByLnBpcGVsaW5lSWQpKS5zaXplLFxuICB9O1xufVxuXG4vKiogQWRvcHRpb24gYW5kIGRlcGxveS10cmFja2luZyBjb3ZlcmFnZSB3aXRoaW4gdGhlIHJlcG9ydGVkIHNjb3BlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBZG9wdGlvblN1bW1hcnkge1xuICBhY3RpdmVQaXBlbGluZXM6IG51bWJlcjtcbiAgdG90YWxQaXBlbGluZXM6IG51bWJlcjtcbiAgLyoqIFBpcGVsaW5lcyB0aGF0IHByb2R1Y2VkIGEgZGVwbG95IHJvdyDigJQgaS5lLiBvbmVzIERPUkEgY2FuIHNlZS4gKi9cbiAgZGVwbG95VHJhY2tlZFBpcGVsaW5lczogbnVtYmVyO1xuICAvKiogQnkgYGNyZWF0aW9uX3NvdXJjZWAsIGZvciBcImFyZSB0aGUgZ29sZGVuIHBhdGhzIGJlaW5nIHVzZWRcIi4gKi9cbiAgYnlTb3VyY2U6IFJlY29yZDxzdHJpbmcsIG51bWJlcj47XG4gIC8qKiBUZWFtcyBpbiB0aGUgcm9sbHVwIHRoYXQgaGFkIGFjdGl2aXR5LiAxIGZvciBhIHNpbmdsZS1vcmcgcmVwb3J0LiAqL1xuICBhY3RpdmVUZWFtczogbnVtYmVyO1xuICAvKiogT25seSB3aGVuIHRoZSBvcmcgY29uZmlndXJlZCB0aGUgYXNzdW1wdGlvbi4gTmV2ZXIgcGxhdGZvcm0tc3VwcGxpZWQuICovXG4gIGVzdGltYXRlZE1pbnV0ZXNTYXZlZDogbnVtYmVyIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBBZG9wdGlvbiwgY292ZXJhZ2UgYW5kIGNyZWF0aW9uIHNvdXJjZS5cbiAqXG4gKiBgZGVwbG95VHJhY2tlZFBpcGVsaW5lc2AgaXMgdGhlIGhvbmVzdCBkZW5vbWluYXRvciBmb3IgZXZlcnl0aGluZyBET1JBIHNheXM6IGFcbiAqIHBpcGVsaW5lIHRoYXQgaGFzIG5vdCByZS1zeW50aGVkIHdpdGggZGVwbG95IHRhZ3MgcHJvZHVjZXMgbm8gZGVwbG95IHJvd3MsIHNvIGl0XG4gKiBpcyBpbnZpc2libGUgdG8gZGVwbG95bWVudCBmcmVxdWVuY3kg4oCUIGFuZCByZXBvcnRpbmcgXCI0IGRlcGxveXNcIiB3aXRob3V0IHNheWluZ1xuICogdGhhdCAyMCBvZiAzMCBwaXBlbGluZXMgY2Fubm90IGJlIHNlZW4gaXMgdGhlIHNpbmdsZSBtb3N0IG1pc2xlYWRpbmcgdGhpbmcgdGhpc1xuICogZmVhdHVyZSBjb3VsZCBkby5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEFkb3B0aW9uKHNjb3BlOiBBbmFseXRpY3NTY29wZSwgdGltZVNhdmVkTWludXRlcz86IG51bWJlciB8IG51bGwpOiBQcm9taXNlPEFkb3B0aW9uU3VtbWFyeT4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFdJVEggc2NvcGVkIEFTIChcbiAgICAgIFNFTEVDVCBpZDo6dGV4dCBBUyBpZCwgb3JnX2lkLCBjcmVhdGlvbl9zb3VyY2VcbiAgICAgIEZST00gcGlwZWxpbmVzXG4gICAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgICAgQU5EIGRlbGV0ZWRfYXQgSVMgTlVMTFxuICAgICksXG4gICAgYWN0aXZlIEFTIChcbiAgICAgIFNFTEVDVCBESVNUSU5DVCBwaXBlbGluZV9pZCwgb3JnX2lkXG4gICAgICBGUk9NIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzXG4gICAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgICAgQU5EIGRheSA+PSAke3Njb3BlLmZyb219Ojp0aW1lc3RhbXB0eiBBTkQgZGF5IDwgJHtzY29wZS50b306OnRpbWVzdGFtcHR6XG4gICAgICAgIEFORCBzdGFnZV9uYW1lID0gJycgQU5EIHJ1bnMgPiAwXG4gICAgKSxcbiAgICB0cmFja2VkIEFTIChcbiAgICAgIFNFTEVDVCBESVNUSU5DVCBwaXBlbGluZV9pZFxuICAgICAgRlJPTSBkb3JhX2RlcGxveW1lbnRzXG4gICAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgICAgQU5EIGRlcGxveWVkX2F0ID49ICR7c2NvcGUuZnJvbX06OnRpbWVzdGFtcHR6IEFORCBkZXBsb3llZF9hdCA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgIClcbiAgICBTRUxFQ1RcbiAgICAgIChTRUxFQ1QgQ09VTlQoKikgRlJPTSBzY29wZWQpOjppbnQgQVMgdG90YWxfcGlwZWxpbmVzLFxuICAgICAgKFNFTEVDVCBDT1VOVCgqKSBGUk9NIGFjdGl2ZSk6OmludCBBUyBhY3RpdmVfcGlwZWxpbmVzLFxuICAgICAgKFNFTEVDVCBDT1VOVChESVNUSU5DVCBvcmdfaWQpIEZST00gYWN0aXZlKTo6aW50IEFTIGFjdGl2ZV90ZWFtcyxcbiAgICAgIChTRUxFQ1QgQ09VTlQoKikgRlJPTSB0cmFja2VkKTo6aW50IEFTIGRlcGxveV90cmFja2VkLFxuICAgICAgKFNFTEVDVCBDT0FMRVNDRShqc29uYl9vYmplY3RfYWdnKENPQUxFU0NFKGNyZWF0aW9uX3NvdXJjZSwgJ3Vua25vd24nKSwgbiksICd7fSc6Ompzb25iKVxuICAgICAgICAgRlJPTSAoU0VMRUNUIGNyZWF0aW9uX3NvdXJjZSwgQ09VTlQoKik6OmludCBBUyBuIEZST00gc2NvcGVkIEdST1VQIEJZIGNyZWF0aW9uX3NvdXJjZSkgc1xuICAgICAgKSBBUyBieV9zb3VyY2VcbiAgYCkpO1xuICBjb25zdCByID0gcm93c09mKHJvd3MpWzBdID8/IHt9O1xuICBjb25zdCBjcmVhdGVkID0gbnVtKHIudG90YWxfcGlwZWxpbmVzKTtcbiAgcmV0dXJuIHtcbiAgICB0b3RhbFBpcGVsaW5lczogY3JlYXRlZCxcbiAgICBhY3RpdmVQaXBlbGluZXM6IG51bShyLmFjdGl2ZV9waXBlbGluZXMpLFxuICAgIGFjdGl2ZVRlYW1zOiBNYXRoLm1heCgxLCBudW0oci5hY3RpdmVfdGVhbXMpKSxcbiAgICBkZXBsb3lUcmFja2VkUGlwZWxpbmVzOiBudW0oci5kZXBsb3lfdHJhY2tlZCksXG4gICAgYnlTb3VyY2U6IChyLmJ5X3NvdXJjZSBhcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+KSA/PyB7fSxcbiAgICAvLyBPbmx5IHdoZW4gdGhlIE9SRyBjb25maWd1cmVkIHRoZSBhc3N1bXB0aW9uIOKAlCBhIHBsYXRmb3JtLXN1cHBsaWVkIG51bWJlclxuICAgIC8vIGhlcmUgd291bGQgYmUgdGhlIHBsYXRmb3JtIG1hcmtpbmcgaXRzIG93biBob21ld29yay5cbiAgICBlc3RpbWF0ZWRNaW51dGVzU2F2ZWQ6IHRpbWVTYXZlZE1pbnV0ZXMgJiYgdGltZVNhdmVkTWludXRlcyA+IDAgPyBjcmVhdGVkICogdGltZVNhdmVkTWludXRlcyA6IG51bGwsXG4gIH07XG59XG5cbi8qKiBPbmUgcGlwZWxpbmUncyBmYWlsdXJlIHN0cmVhayBhbmQgbGFzdCBzdWNjZXNzZnVsIGRheS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVTdHJlYWtSb3cge1xuICBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGYWlsdXJlcyBpbiB0aGUgdHJhaWxpbmcgcnVuIG9mIGRheXMgb24gd2hpY2ggTk9USElORyBzdWNjZWVkZWQuXG4gICAqXG4gICAqIEEgTE9XRVIgQk9VTkQsIGFuZCBkZWxpYmVyYXRlbHkgc28uIFRoZSByb2xsdXAgaXMgcGVyIGRheSwgc28gd2l0aGluIHRoZSBtb3N0XG4gICAqIHJlY2VudCBkYXkgdGhhdCBkaWQgaGF2ZSBhIHN1Y2Nlc3MgdGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwgd2hldGhlciB0aGUgZmFpbHVyZXNcbiAgICogY2FtZSBiZWZvcmUgb3IgYWZ0ZXIgaXQg4oCUIHRoYXQgZGF5IGlzIGV4Y2x1ZGVkIHJhdGhlciB0aGFuIGd1ZXNzZWQgYXQuIFdoYXRcbiAgICogc3Vydml2ZXMgaXMgYSBydW4gb2YgZmFpbHVyZXMgd2l0aCBubyBzdWNjZXNzIGFueXdoZXJlIGJldHdlZW4gdGhlbSwgd2hpY2ggaXNcbiAgICogZXhhY3RseSB0aGUgY2xhaW0gdGhlIGZpbmRpbmcgbWFrZXMuXG4gICAqL1xuICBjb25zZWN1dGl2ZUZhaWx1cmVzOiBudW1iZXI7XG4gIC8qKiBUaGUgbGFzdCBkYXkgd2l0aCBhdCBsZWFzdCBvbmUgc3VjY2Vzcywgb3IgbnVsbCB3aXRoaW4gdGhlIGxvb2tiYWNrLiAqL1xuICBsYXN0U3VjY2Vzc0F0OiBEYXRlIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBGYWlsdXJlIHN0cmVha3MgYW5kIGxhc3Qtc3VjY2VzcyBkYXRlcywgZm9yIHRoZSBuZWVkcy1hdHRlbnRpb24gcnVsZXMuXG4gKlxuICogUmVhZHMgdGhlIGRhaWx5IHJvbGx1cCwgbm90IGBwaXBlbGluZV9ldmVudHNgIOKAlCB0aGUgc2FtZSByZWFzb24gYXMgZXZlcnl0aGluZ1xuICogZWxzZSBoZXJlOiBhIHN0cmVhayB0aGF0IGVuZGVkIHRocmVlIHdlZWtzIGFnbyBtdXN0IHN0aWxsIGJlIHJlYWRhYmxlIGFmdGVyXG4gKiByZXRlbnRpb24gaGFzIHN3ZXB0IHRoZSBldmVudHMgdGhhdCBwcm9kdWNlZCBpdC5cbiAqXG4gKiBgbG9va2JhY2tEYXlzYCBleHRlbmRzIFBBU1QgdGhlIHdpbmRvdyBvbiBwdXJwb3NlLiBcIkxhc3Qgc3VjY2VlZGVkIDEyIGRheXMgYWdvXCJcbiAqIGlzIHRoZSBmaW5kaW5nIGEgd2Vla2x5IHJlcG9ydCBtb3N0IG5lZWRzLCBhbmQgYSBxdWVyeSBib3VuZGVkIGJ5IGEgNy1kYXkgd2luZG93XG4gKiBjb3VsZCBuZXZlciBwcm9kdWNlIGl0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0UGlwZWxpbmVTdHJlYWtzKFxuICBzY29wZTogQW5hbHl0aWNzU2NvcGUsXG4gIGxvb2tiYWNrRGF5cyA9IDkwLFxuKTogUHJvbWlzZTxQaXBlbGluZVN0cmVha1Jvd1tdPiB7XG4gIGNvbnN0IHNpbmNlID0gbmV3IERhdGUobmV3IERhdGUoc2NvcGUudG8pLmdldFRpbWUoKSAtIGxvb2tiYWNrRGF5cyAqIDg2XzQwMF8wMDApLnRvSVNPU3RyaW5nKCk7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHhSZWFkKCh0eCkgPT4gdHguZXhlY3V0ZShzcWxgXG4gICAgV0lUSCBkYXlzIEFTIChcbiAgICAgIFNFTEVDVCBwaXBlbGluZV9pZCwgZGF5LFxuICAgICAgICAgICAgIFNVTShzdWNjZWVkZWQpOjppbnQgQVMgc3VjY2VlZGVkLFxuICAgICAgICAgICAgIFNVTShmYWlsZWQpOjppbnQgICAgQVMgZmFpbGVkXG4gICAgICBGUk9NIGV4ZWN1dGlvbl9kYWlseV9yb2xsdXBzXG4gICAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgICAgQU5EIGRheSA+PSAke3NpbmNlfTo6dGltZXN0YW1wdHogQU5EIGRheSA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgICAgR1JPVVAgQlkgcGlwZWxpbmVfaWQsIGRheVxuICAgICksXG4gICAgbGFzdF9vayBBUyAoXG4gICAgICBTRUxFQ1QgcGlwZWxpbmVfaWQsIE1BWChkYXkpIEFTIGxhc3Rfc3VjY2Vzc19kYXlcbiAgICAgIEZST00gZGF5cyBXSEVSRSBzdWNjZWVkZWQgPiAwXG4gICAgICBHUk9VUCBCWSBwaXBlbGluZV9pZFxuICAgIClcbiAgICBTRUxFQ1QgZC5waXBlbGluZV9pZCxcbiAgICAgICAgICAgbC5sYXN0X3N1Y2Nlc3NfZGF5LFxuICAgICAgICAgICBDT0FMRVNDRShTVU0oZC5mYWlsZWQpIEZJTFRFUiAoXG4gICAgICAgICAgICAgV0hFUkUgbC5sYXN0X3N1Y2Nlc3NfZGF5IElTIE5VTEwgT1IgZC5kYXkgPiBsLmxhc3Rfc3VjY2Vzc19kYXlcbiAgICAgICAgICAgKSwgMCk6OmludCBBUyBzdHJlYWtcbiAgICBGUk9NIGRheXMgZFxuICAgIExFRlQgSk9JTiBsYXN0X29rIGwgT04gbC5waXBlbGluZV9pZCA9IGQucGlwZWxpbmVfaWRcbiAgICBHUk9VUCBCWSBkLnBpcGVsaW5lX2lkLCBsLmxhc3Rfc3VjY2Vzc19kYXlcbiAgYCkpO1xuICByZXR1cm4gcm93c09mKHJvd3MpLm1hcCgocikgPT4gKHtcbiAgICBwaXBlbGluZUlkOiBTdHJpbmcoci5waXBlbGluZV9pZCksXG4gICAgY29uc2VjdXRpdmVGYWlsdXJlczogbnVtKHIuc3RyZWFrKSxcbiAgICBsYXN0U3VjY2Vzc0F0OiByLmxhc3Rfc3VjY2Vzc19kYXkgPyBuZXcgRGF0ZShTdHJpbmcoci5sYXN0X3N1Y2Nlc3NfZGF5KSkgOiBudWxsLFxuICB9KSk7XG59XG5cbi8qKlxuICogUGlwZWxpbmVzIHRoYXQgUkFOIGluIHRoZSB3aW5kb3cgYnV0IHByb2R1Y2VkIG5vIGRlcGxveSByb3dzLlxuICpcbiAqIEEgbWVhc3VyZW1lbnQgZ2FwLCBub3QgYSBmYWlsdXJlLCBhbmQgdGhlIHJlYXNvbiBhIGRlcGxveW1lbnQtZnJlcXVlbmN5IG51bWJlciBjYW5cbiAqIGJlIHF1aWV0bHkgd3Jvbmc6IGEgcGlwZWxpbmUgd2hvc2Ugc3ludGggcHJlZGF0ZXMgdGhlIGBwYi5kZXBsb3lzYCB0YWdzIGRlcGxveXNcbiAqIHBlcmZlY3RseSB3ZWxsIGFuZCBpcyBpbnZpc2libGUgdG8gZXZlcnkgRE9SQSBhZ2dyZWdhdGUuIE5vdGhpbmcgZWxzZSBpbiB0aGVcbiAqIHJlcG9ydCB3b3VsZCBzYXkgc28uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRVbnRyYWNrZWRQaXBlbGluZXMoc2NvcGU6IEFuYWx5dGljc1Njb3BlKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFdJVEggYWN0aXZlIEFTIChcbiAgICAgIFNFTEVDVCBwaXBlbGluZV9pZFxuICAgICAgRlJPTSBleGVjdXRpb25fZGFpbHlfcm9sbHVwc1xuICAgICAgV0hFUkUgb3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICAgIEFORCBkYXkgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIGRheSA8ICR7c2NvcGUudG99Ojp0aW1lc3RhbXB0elxuICAgICAgICBBTkQgc3RhZ2VfbmFtZSA9ICcnXG4gICAgICBHUk9VUCBCWSBwaXBlbGluZV9pZFxuICAgICAgSEFWSU5HIFNVTShydW5zKSA+IDBcbiAgICApLFxuICAgIHRyYWNrZWQgQVMgKFxuICAgICAgU0VMRUNUIERJU1RJTkNUIHBpcGVsaW5lX2lkXG4gICAgICBGUk9NIGRvcmFfZGVwbG95bWVudHNcbiAgICAgIFdIRVJFIG9yZ19pZCAke3Njb3BlLm9yZ0lkcz8ubGVuZ3RoID8gc3FsYD0gQU5ZKCR7c2NvcGUub3JnSWRzfSlgIDogc3FsYD0gJHtzY29wZS5vcmdJZH1gfVxuICAgICAgICBBTkQgZGVwbG95ZWRfYXQgPj0gJHtzY29wZS5mcm9tfTo6dGltZXN0YW1wdHogQU5EIGRlcGxveWVkX2F0IDwgJHtzY29wZS50b306OnRpbWVzdGFtcHR6XG4gICAgKVxuICAgIFNFTEVDVCBhLnBpcGVsaW5lX2lkIEZST00gYWN0aXZlIGFcbiAgICBXSEVSRSBOT1QgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIHRyYWNrZWQgdCBXSEVSRSB0LnBpcGVsaW5lX2lkID0gYS5waXBlbGluZV9pZClcbiAgYCkpO1xuICByZXR1cm4gcm93c09mKHJvd3MpLm1hcCgocikgPT4gU3RyaW5nKHIucGlwZWxpbmVfaWQpKTtcbn1cblxuLyoqXG4gKiBQaXBlbGluZXMgcnVubmluZyBhIHBsdWdpbiB2ZXJzaW9uIHdpdGggYW4gT1BFTiBDcml0aWNhbCBleHBvc3VyZS5cbiAqXG4gKiBQb2ludC1pbi10aW1lLCBub3Qgd2luZG93ZWQ6IHdoYXQgbWF0dGVycyBpcyB3aGV0aGVyIHRoZSBwaXBlbGluZSBpcyBydW5uaW5nIG9uZVxuICogTk9XLiBBIENyaXRpY2FsIHRoYXQgd2FzIG9wZW4gbGFzdCBUdWVzZGF5IGFuZCBpcyBmaXhlZCB0b2RheSBpcyBub3Qgc29tZXRoaW5nIHRvXG4gKiBwdXQgaW4gZnJvbnQgb2YgYSBtYW5hZ2VyLCBhbmQgYGZpeGVkX2F0YCBpcyB3aGF0IHNheXMgc28uXG4gKlxuICogVGhlIFNBTUUgbGl2ZSBwcmVkaWNhdGUgYXMgdGhlIHZ1bG5lcmFiaWxpdHkgc2VjdGlvbiAoYGxpdmVFeHBvc3VyZVByZWRpY2F0ZWApOlxuICogYW4gYWNjZXB0YW5jZSBzdGlsbCBpbiBmb3JjZSBhbmQgYSBmYWxzZSBwb3NpdGl2ZSBhcmUgZXhjbHVkZWQg4oCUIHNvbWVvbmUgd2l0aFxuICogdGhlIGF1dGhvcml0eSB0byBkZWNpZGUgaGFzIGRvbmUgc28gaW4gd3JpdGluZyDigJQgd2hpbGUgYW4gYWNjZXB0YW5jZSBQQVNUIGl0c1xuICogZGVhZGxpbmUgY291bnRzIGFnYWluLCBiZWNhdXNlIHRoYXQgaXMgd2hhdCB0aGUgZGVhZGxpbmUgd2FzIGZvci4gVGhlIHR3b1xuICogcmVhZGVycyBvbmNlIGRpc2FncmVlZCAodGhpcyBvbmUga2VwdCBmYWxzZSBwb3NpdGl2ZXMgYW5kIGRyb3BwZWQgZXhwaXJlZFxuICogYWNjZXB0YW5jZXMpLCBzbyB0aGUgcGFuZWwgYW5kIHRoZSBuZWVkcy1hdHRlbnRpb24gbGlzdCBjb250cmFkaWN0ZWQgZWFjaCBvdGhlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFZ1bG5lcmFibGVQaXBlbGluZXMoc2NvcGU6IEFuYWx5dGljc1Njb3BlKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVCBESVNUSU5DVCBwaXBlbGluZV9pZFxuICAgIEZST00gcGx1Z2luX3Z1bG5fZXhwb3N1cmVcbiAgICBXSEVSRSBvcmdfaWQgJHtzY29wZS5vcmdJZHM/Lmxlbmd0aCA/IHNxbGA9IEFOWSgke3Njb3BlLm9yZ0lkc30pYCA6IHNxbGA9ICR7c2NvcGUub3JnSWR9YH1cbiAgICAgIEFORCBjcml0aWNhbF9jb3VudCA+IDBcbiAgICAgIEFORCAke2xpdmVFeHBvc3VyZVByZWRpY2F0ZShub3cpfVxuICBgKSk7XG4gIHJldHVybiByb3dzT2Yocm93cykubWFwKChyKSA9PiBTdHJpbmcoci5waXBlbGluZV9pZCkpO1xufVxuXG4vKipcbiAqIFdoZW4gZWFjaCBwaXBlbGluZSBpbiB0aGUgd2luZG93IHdhcyBsYXN0IGNoYW5nZWQuXG4gKlxuICogYHBpcGVsaW5lcy51cGRhdGVkX2F0YCwgbm90IGFuIGF1ZGl0IHF1ZXJ5OiB0aGUgYXVkaXQgdHJhaWwgbGl2ZXMgaW4gYW5vdGhlciBzdG9yZVxuICogd2l0aCBpdHMgb3duIHJldGVudGlvbiwgYW5kIHRoZSBvbmUgZmFjdCB0aGlzIG5lZWRzIOKAlCBcIndhcyB0aGlzIHRvdWNoZWQgc2hvcnRseVxuICogYmVmb3JlIGl0IGJyb2tlXCIg4oCUIGlzIGFscmVhZHkgb24gdGhlIHJvdywgZHVyYWJseSwgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gdGhlXG4gKiBjaGFuZ2Ugd2FzIG1hZGUgaW4uXG4gKlxuICogVGhlIGNvbnNlcXVlbmNlIGlzIHN0YXRlZCByYXRoZXIgdGhhbiBoaWRkZW46IGB1cGRhdGVkX2F0YCBtb3ZlcyBmb3IgQU5ZIHdyaXRlLFxuICogaW5jbHVkaW5nIGEgcmVuYW1lLiBTbyB0aGUgZmluZGluZyBzYXlzIFwiYWZ0ZXIgYSBjb25maWd1cmF0aW9uIGNoYW5nZVwiLCB3aGljaCBpc1xuICogdHJ1ZSBvZiBhIHJlbmFtZSB0b28sIGFuZCBkb2VzIG5vdCBjbGFpbSB0byBuYW1lIHRoZSBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQaXBlbGluZUNvbmZpZ0NoYW5nZXMoc2NvcGU6IEFuYWx5dGljc1Njb3BlKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBEYXRlPj4ge1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4UmVhZCgodHgpID0+IHR4LmV4ZWN1dGUoc3FsYFxuICAgIFNFTEVDVCBpZDo6dGV4dCBBUyBpZCwgdXBkYXRlZF9hdFxuICAgIEZST00gcGlwZWxpbmVzXG4gICAgV0hFUkUgb3JnX2lkICR7c2NvcGUub3JnSWRzPy5sZW5ndGggPyBzcWxgPSBBTlkoJHtzY29wZS5vcmdJZHN9KWAgOiBzcWxgPSAke3Njb3BlLm9yZ0lkfWB9XG4gICAgICBBTkQgZGVsZXRlZF9hdCBJUyBOVUxMXG4gICAgICBBTkQgdXBkYXRlZF9hdCBJUyBOT1QgTlVMTFxuICBgKSk7XG4gIGNvbnN0IG91dCA9IG5ldyBNYXA8c3RyaW5nLCBEYXRlPigpO1xuICBmb3IgKGNvbnN0IHIgb2Ygcm93c09mKHJvd3MpKSB7XG4gICAgY29uc3QgYXQgPSByLnVwZGF0ZWRfYXQgPyBuZXcgRGF0ZShTdHJpbmcoci51cGRhdGVkX2F0KSkgOiBudWxsO1xuICAgIGlmIChhdCAmJiAhTnVtYmVyLmlzTmFOKGF0LmdldFRpbWUoKSkpIG91dC5zZXQoU3RyaW5nKHIuaWQpLCBhdCk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLy8g4pSA4pSAIEhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBSb3dzIGZyb20gYSByYXcgYGV4ZWN1dGVgLCB3aGljaGV2ZXIgc2hhcGUgdGhlIGRyaXZlciByZXR1cm5lZC4gKi9cbmZ1bmN0aW9uIHJvd3NPZihyZXN1bHQ6IHVua25vd24pOiBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSByZXR1cm4gcmVzdWx0IGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PjtcbiAgY29uc3Qgcm93cyA9IChyZXN1bHQgYXMgeyByb3dzPzogdW5rbm93biB9KT8ucm93cztcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocm93cykgPyByb3dzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA6IFtdO1xufVxuXG4vKiogQSBjb3VudCBmcm9tIGEgZHJpdmVyIHRoYXQgbWF5IGhhbmQgYmFjayBhIHN0cmluZyBmb3IgYSBiaWdpbnQuICovXG5mdW5jdGlvbiBudW0odjogdW5rbm93bik6IG51bWJlciB7XG4gIGNvbnN0IG4gPSB0eXBlb2YgdiA9PT0gJ251bWJlcicgPyB2IDogTnVtYmVyKHYgPz8gMCk7XG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUobikgPyBuIDogMDtcbn1cblxuZnVuY3Rpb24gaXNvT3JOdWxsKHY6IHVua25vd24pOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCF2KSByZXR1cm4gbnVsbDtcbiAgY29uc3QgZCA9IHYgaW5zdGFuY2VvZiBEYXRlID8gdiA6IG5ldyBEYXRlKFN0cmluZyh2KSk7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4oZC5nZXRUaW1lKCkpID8gbnVsbCA6IGQudG9JU09TdHJpbmcoKTtcbn1cbiJdfQ==
|
|
@@ -14,6 +14,8 @@ export interface DeployCandidate {
|
|
|
14
14
|
completedAt?: Date | null;
|
|
15
15
|
startedAt?: Date | null;
|
|
16
16
|
createdAt?: Date | null;
|
|
17
|
+
/** The EventBridge event id of the row, when its producer had one. */
|
|
18
|
+
sourceEventId?: string | null;
|
|
17
19
|
}
|
|
18
20
|
/**
|
|
19
21
|
* Is this row a deploy?
|
|
@@ -106,6 +106,7 @@ export async function upsertDeployments(rows) {
|
|
|
106
106
|
commitCount: row.commitCount ?? null,
|
|
107
107
|
commitSha: row.commitSha ?? null,
|
|
108
108
|
leadTimeGap: leadTimeGapOf(row),
|
|
109
|
+
sourceEventId: row.sourceEventId ?? null,
|
|
109
110
|
}];
|
|
110
111
|
});
|
|
111
112
|
if (values.length === 0)
|
|
@@ -128,6 +129,9 @@ export async function upsertDeployments(rows) {
|
|
|
128
129
|
// time and a reason it could not be resolved must never coexist.
|
|
129
130
|
leadTimeGap: sql `CASE WHEN COALESCE(excluded.earliest_commit_at, ${schema.doraDeployment.earliestCommitAt}) IS NOT NULL
|
|
130
131
|
THEN NULL ELSE excluded.lead_time_gap END`,
|
|
132
|
+
// The deploy event that last wrote the row, so the DORA number traces
|
|
133
|
+
// back to it; a producer without an id never blanks a recorded one.
|
|
134
|
+
sourceEventId: sql `COALESCE(excluded.source_event_id, ${schema.doraDeployment.sourceEventId})`,
|
|
131
135
|
updatedAt: new Date(),
|
|
132
136
|
},
|
|
133
137
|
})
|
|
@@ -200,4 +204,4 @@ export async function correlateIncident(orgId, environment, openedAt, windowHour
|
|
|
200
204
|
isNull(schema.doraDeployment.failedAt))));
|
|
201
205
|
return { executionId: deploy.executionId, confidence };
|
|
202
206
|
}
|
|
203
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LXJvbGx1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvcmVwb3J0aW5nL2RlcGxveS1yb2xsdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7QUFtQjdDLGlFQUFpRTtBQUNqRSxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3BELGdEQUFnRDtBQUNoRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUUvRjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFvQjtJQUNoRCxPQUFPLEdBQUcsQ0FBQyxTQUFTLEtBQUssT0FBTztXQUMzQixDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVc7V0FDakIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXO1dBQ2pCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMs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UGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogV3JpdGluZyBgZG9yYV9kZXBsb3ltZW50c2AgYXQgaW5nZXN0LlxuICpcbiAqIEV2ZXJ5IERPUkEgbnVtYmVyIHVzZWQgdG8gYmUgZGVyaXZlZCBieSBzY2FubmluZyBgcGlwZWxpbmVfZXZlbnRzYCBwZXIgcmVhZC5cbiAqIFR3byB0aGluZ3Mgd2VyZSB3cm9uZyB3aXRoIHRoYXQsIGFuZCBvbmx5IG9uZSBvZiB0aGVtIHdhcyBzcGVlZDpcbiAqXG4gKiAgMS4gTEVBRCBUSU1FIFdBUyBET1VCTEUtQ09VTlRFRCBJTiBXQUlUSU5HLiBBIGRlcGxveSBlbWl0cyBhIFNUQUdFIGV2ZW50IGFuZFxuICogICAgIGFuIEFDVElPTiBldmVudCwgYW5kIGJvdGggY2FycnkgdGhlIHNhbWUgcmVzb2x2ZWQgY29tbWl0IHJhbmdlLiBBbnlcbiAqICAgICBhZ2dyZWdhdGUgb3ZlciBldmVudHMgdGhlcmVmb3JlIGNvdW50ZWQgb25lIGRlcGxveSdzIGxlYWQgdGltZSB0d2ljZSB0aGVcbiAqICAgICBtb21lbnQgc29tZWJvZHkgYWRkZWQgdGhlIEFDVElPTiByb3dzIHRvIGEgcXVlcnkuIFN0b3JpbmcgaXQgb25jZSBwZXJcbiAqICAgICBleGVjdXRpb24gbWFrZXMgdGhhdCBtaXN0YWtlIHVuYXZhaWxhYmxlIHJhdGhlciB0aGFuIG1lcmVseSB1bm1hZGUuXG4gKiAgMi4gVEhFIE5VTUJFUlMgRElEIE5PVCBTVVJWSVZFIFJFVEVOVElPTi4gVGhlIHN3ZWVwIHB1cmdlcyByYXcgZXZlbnRzIGJ5XG4gKiAgICAgdGllciwgc28gYSBxdWFydGVybHkgcmVwb3J0IGNvdWxkIG5vdCBiZSByZWNvbXB1dGVkIG9uY2UgaXRzIGV2ZW50cyB3ZXJlXG4gKiAgICAgZ29uZSDigJQgd2hpY2ggaXMgZXhhY3RseSB3aGVuIHNvbWVvbmUgYXNrcyBhYm91dCBpdC5cbiAqXG4gKiBBIGRlcGxveSBpcyBhIFNUQUdFIGV2ZW50IGNhcnJ5aW5nIGFuIGBlbnZpcm9ubWVudGA6IHRoZSBzYW1lIHByZWRpY2F0ZSB0aGVcbiAqIERPUkEgcXVlcmllcyBoYXZlIGFsd2F5cyB1c2VkLCBub3cgYXBwbGllZCBvbmNlIGF0IHdyaXRlIHRpbWUuXG4gKi9cblxuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyLCBlcnJvck1lc3NhZ2UgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBhbmQsIGVxLCBpc051bGwsIHNxbCB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB7IHNjaGVtYSB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL2RyaXp6bGUtc2NoZW1hLmpzJztcbmltcG9ydCB0eXBlIHsgTGVhZFRpbWVHYXAgfSBmcm9tICcuLi8uLi9kYXRhYmFzZS9zY2hlbWEvcmVwb3J0aW5nLWFuYWx5dGljcy5qcyc7XG5pbXBvcnQgeyB3aXRoVGVuYW50VHggfSBmcm9tICcuLi8uLi9kYXRhYmFzZS90ZW5hbmN5LmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdkZXBsb3ktcm9sbHVwJyk7XG5cbi8qKiBUaGUgZmllbGRzIG9mIGFuIGluc2VydGVkIGV2ZW50IHJvdyB0aGlzIG1vZHVsZSBuZWVkcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95Q2FuZGlkYXRlIHtcbiAgb3JnSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVJZDogc3RyaW5nIHwgbnVsbDtcbiAgZXhlY3V0aW9uSWQ6IHN0cmluZyB8IG51bGw7XG4gIGV2ZW50VHlwZTogc3RyaW5nO1xuICBzdGF0dXM6IHN0cmluZztcbiAgc3RhZ2VOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBlbnZpcm9ubWVudDogc3RyaW5nIHwgbnVsbDtcbiAgY29tbWl0U2hhPzogc3RyaW5nIHwgbnVsbDtcbiAgY29tbWl0VGltZXN0YW1wPzogRGF0ZSB8IG51bGw7XG4gIGNvbW1pdENvdW50PzogbnVtYmVyIHwgbnVsbDtcbiAgY29tcGxldGVkQXQ/OiBEYXRlIHwgbnVsbDtcbiAgc3RhcnRlZEF0PzogRGF0ZSB8IG51bGw7XG4gIGNyZWF0ZWRBdD86IERhdGUgfCBudWxsO1xufVxuXG4vKiogU3RhdHVzZXMgYW4gZXZlbnQgdXNlcyBmb3IgXCJ0aGlzIGZpbmlzaGVkLCBhbmQgaXQgd29ya2VkXCIuICovXG5jb25zdCBTVUNDRUVERUQgPSBuZXcgU2V0KFsnU1VDQ0VFREVEJywgJ1NVQ0NFU1MnXSk7XG4vKiog4oCmYW5kIGZvciBcInRoaXMgZmluaXNoZWQsIGFuZCBpdCBkaWQgbm90XCIuICovXG5jb25zdCBGQUlMRUQgPSBuZXcgU2V0KFsnRkFJTEVEJywgJ0ZBSUxVUkUnLCAnQ0FOQ0VMRUQnLCAnQ0FOQ0VMTEVEJywgJ1NUT1BQRUQnLCAnVElNRURfT1VUJ10pO1xuXG4vKipcbiAqIElzIHRoaXMgcm93IGEgZGVwbG95P1xuICpcbiAqIEEgU1RBR0UgZXZlbnQgd2l0aCBhbiBlbnZpcm9ubWVudCwgaW4gYSB0ZXJtaW5hbCBzdGF0ZS4gYElOX1BST0dSRVNTYCByb3dzIGFyZVxuICogc2tpcHBlZCBkZWxpYmVyYXRlbHk6IGEgZGVwbG95IHRoYXQgaGFzIHN0YXJ0ZWQgaGFzIG5vIGR1cmF0aW9uLCBubyBvdXRjb21lIGFuZFxuICogbm8gcGxhY2UgaW4gYSBkZXBsb3ltZW50LWZyZXF1ZW5jeSBjb3VudCwgYW5kIHdyaXRpbmcgaXQgd291bGQgbWFrZSBldmVyeVxuICogaW4tZmxpZ2h0IGRlcGxveSBsb29rIGxpa2UgYSBzdWNjZXNzZnVsIG9uZSB1bnRpbCBpdHMgbmV4dCBldmVudCBsYW5kZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RlcGxveUV2ZW50KHJvdzogRGVwbG95Q2FuZGlkYXRlKTogYm9vbGVhbiB7XG4gIHJldHVybiByb3cuZXZlbnRUeXBlID09PSAnU1RBR0UnXG4gICAgJiYgISFyb3cuZW52aXJvbm1lbnRcbiAgICAmJiAhIXJvdy5leGVjdXRpb25JZFxuICAgICYmIChTVUNDRUVERUQuaGFzKHJvdy5zdGF0dXMpIHx8IEZBSUxFRC5oYXMocm93LnN0YXR1cykpO1xufVxuXG4vKipcbiAqIFdoeSBsZWFkIHRpbWUgaXMgYWJzZW50IGZvciBhIGRlcGxveSB0aGF0IGhhcyBubyBjb21taXQgdGltZXN0YW1wLlxuICpcbiAqIGBub19jb21taXRfZGF0YWAgaXMgdGhlIGhvbmVzdCBkZWZhdWx0OiB0aGUgZm9yd2FyZGVyIHJlc29sdmVzIHRoZSBjb21taXQgcmFuZ2VcbiAqIGluLWFjY291bnQgYW5kIHJlcG9ydHMgdGhlIHJlYXNvbiBpdCBjb3VsZCBub3QsIHNvIGFueXRoaW5nIGVsc2UgaGVyZSB3b3VsZCBiZVxuICogdGhpcyBtb2R1bGUgZ3Vlc3NpbmcuIFRoZSByZWFzb24gaXQgRElEIHJlcG9ydCByaWRlcyBvbiB0aGUgZXZlbnQncyBgZGV0YWlsYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxlYWRUaW1lR2FwT2Yocm93OiBEZXBsb3lDYW5kaWRhdGUgJiB7IGRldGFpbD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbCB9KTogTGVhZFRpbWVHYXAgfCBudWxsIHtcbiAgaWYgKHJvdy5jb21taXRUaW1lc3RhbXApIHJldHVybiBudWxsO1xuICBjb25zdCByZXBvcnRlZCA9IHJvdy5kZXRhaWw/LmxlYWRUaW1lR2FwO1xuICBpZiAocmVwb3J0ZWQgPT09ICdub190b2tlbicgfHwgcmVwb3J0ZWQgPT09ICdyYXRlX2xpbWl0ZWQnIHx8IHJlcG9ydGVkID09PSAndW5zdXBwb3J0ZWRfc291cmNlJykgcmV0dXJuIHJlcG9ydGVkO1xuICByZXR1cm4gJ25vX2NvbW1pdF9kYXRhJztcbn1cblxuLyoqIFdoZW4gdGhlIGRlcGxveSBmaW5pc2hlZC4gRmFsbHMgYmFjayB0aHJvdWdoIHRoZSBldmVudCdzIG93biB0aW1lc3RhbXBzLiAqL1xuZnVuY3Rpb24gZGVwbG95ZWRBdE9mKHJvdzogRGVwbG95Q2FuZGlkYXRlKTogRGF0ZSB8IG51bGwge1xuICByZXR1cm4gcm93LmNvbXBsZXRlZEF0ID8/IHJvdy5zdGFydGVkQXQgPz8gcm93LmNyZWF0ZWRBdCA/PyBudWxsO1xufVxuXG4vKipcbiAqIFVwc2VydCB0aGUgZGVwbG95IHJvd3MgZm9yIGEgYmF0Y2ggb2YgZnJlc2hseS1pbnNlcnRlZCBldmVudHMuXG4gKlxuICogT05FIFJPVyBQRVIgKGV4ZWN1dGlvbiwgZW52aXJvbm1lbnQpLCBzbyBhIHJlZGVsaXZlcmVkIGV2ZW50IHJlZnJlc2hlcyB0aGUgcm93XG4gKiByYXRoZXIgdGhhbiBhZGRpbmcgYSBzZWNvbmQgZGVwbG95IOKAlCB0aGUgc2FtZSBhdC1sZWFzdC1vbmNlIHByb2JsZW0gdGhlIGV2ZW50XG4gKiBpbnNlcnQgc29sdmVzIHdpdGggaXRzIHBhcnRpYWwgdW5pcXVlIGluZGV4LlxuICpcbiAqIFRoZSBjb25mbGljdCB1cGRhdGUgZGVsaWJlcmF0ZWx5IGRvZXMgTk9UIHRvdWNoIGBmYWlsZWRfYXRgIC8gYHJlc3RvcmVkX2F0YDpcbiAqIHRob3NlIGFyZSBzZXQgYnkgdGhlIHBvc3QtZGVwbG95IG91dGNvbWUgbWFya2VycyBhbmQgYnkgaW5jaWRlbnQgY29ycmVsYXRpb24sXG4gKiBhbmQgYSBsYXRlIHJlZGVsaXZlcnkgb2YgdGhlIG9yaWdpbmFsIGRlcGxveSBldmVudCBtdXN0IG5vdCBlcmFzZSBhIHJlY29yZGVkXG4gKiBwcm9kdWN0aW9uIGZhaWx1cmUuXG4gKlxuICogTmV2ZXIgdGhyb3dzLiBBbiBpbmdlc3QgYmF0Y2ggdGhhdCBsYW5kZWQgaXRzIGV2ZW50cyBoYXMgZG9uZSB0aGUgZHVyYWJsZSBwYXJ0XG4gKiBvZiBpdHMgam9iOyBmYWlsaW5nIHRoZSB3aG9sZSBiYXRjaCBiZWNhdXNlIGEgZGVyaXZlZCByb3cgY291bGQgbm90IGJlIHdyaXR0ZW5cbiAqIHdvdWxkIHR1cm4gYSByb2xsdXAgYnVnIGludG8gZGF0YSBsb3NzLCBhbmQgdGhlIGJhY2tmaWxsIGNhbiByZWJ1aWxkIHRoZXNlIGZyb21cbiAqIHRoZSBldmVudHMgd2hpbGUgdGhleSBleGlzdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwc2VydERlcGxveW1lbnRzKFxuICByb3dzOiBSZWFkb25seUFycmF5PERlcGxveUNhbmRpZGF0ZSAmIHsgZGV0YWlsPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIH0+LFxuKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgY29uc3QgZGVwbG95cyA9IHJvd3MuZmlsdGVyKGlzRGVwbG95RXZlbnQpO1xuICBpZiAoZGVwbG95cy5sZW5ndGggPT09IDApIHJldHVybiAwO1xuXG4gIGNvbnN0IHZhbHVlcyA9IGRlcGxveXMuZmxhdE1hcCgocm93KSA9PiB7XG4gICAgY29uc3QgZGVwbG95ZWRBdCA9IGRlcGxveWVkQXRPZihyb3cpO1xuICAgIGlmICghZGVwbG95ZWRBdCkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IHN1Y2NlZWRlZCA9IFNVQ0NFRURFRC5oYXMocm93LnN0YXR1cyk7XG4gICAgY29uc3QgZWFybGllc3RDb21taXRBdCA9IHJvdy5jb21taXRUaW1lc3RhbXAgPz8gbnVsbDtcbiAgICAvLyBMZWFkIHRpbWUgaXMgY29tbWl0IOKGkiBkZXBsb3ksIGFuZCBvbmx5IHdoZW4gYm90aCBlbmRzIGFyZSByZWFsLiBBIG5lZ2F0aXZlXG4gICAgLy8gZ2FwIG1lYW5zIHRoZSB0d28gdGltZXN0YW1wcyBjYW1lIGZyb20gZGlmZmVyZW50IGNsb2NrczsgaXQgaXMgZHJvcHBlZFxuICAgIC8vIHJhdGhlciB0aGFuIGNsYW1wZWQgdG8gemVybywgYmVjYXVzZSBcIjAgc2Vjb25kc1wiIGlzIGEgY2xhaW0gYW5kIFwidW5rbm93blwiXG4gICAgLy8gaXMgdGhlIHRydXRoLlxuICAgIGNvbnN0IGxlYWRTZWNvbmRzID0gZWFybGllc3RDb21taXRBdFxuICAgICAgPyBNYXRoLnJvdW5kKChkZXBsb3llZEF0LmdldFRpbWUoKSAtIGVhcmxpZXN0Q29tbWl0QXQuZ2V0VGltZSgpKSAvIDEwMDApXG4gICAgICA6IG51bGw7XG4gICAgcmV0dXJuIFt7XG4gICAgICBvcmdJZDogcm93Lm9yZ0lkLFxuICAgICAgZXhlY3V0aW9uSWQ6IHJvdy5leGVjdXRpb25JZCBhcyBzdHJpbmcsXG4gICAgICBlbnZpcm9ubWVudDogcm93LmVudmlyb25tZW50IGFzIHN0cmluZyxcbiAgICAgIHBpcGVsaW5lSWQ6IHJvdy5waXBlbGluZUlkLFxuICAgICAgZGVwbG95ZWRBdCxcbiAgICAgIHN1Y2NlZWRlZCxcbiAgICAgIGVhcmxpZXN0Q29tbWl0QXQsXG4gICAgICBsZWFkVGltZVNlY29uZHM6IGxlYWRTZWNvbmRzICE9PSBudWxsICYmIGxlYWRTZWNvbmRzID49IDAgPyBsZWFkU2Vjb25kcyA6IG51bGwsXG4gICAgICBjb21taXRDb3VudDogcm93LmNvbW1pdENvdW50ID8/IG51bGwsXG4gICAgICBjb21taXRTaGE6IHJvdy5jb21taXRTaGEgPz8gbnVsbCxcbiAgICAgIGxlYWRUaW1lR2FwOiBsZWFkVGltZUdhcE9mKHJvdyksXG4gICAgfV07XG4gIH0pO1xuICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBsYW5kZWQgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eC5pbnNlcnQoc2NoZW1hLmRvcmFEZXBsb3ltZW50KS52YWx1ZXModmFsdWVzKVxuICAgICAgLm9uQ29uZmxpY3REb1VwZGF0ZSh7XG4gICAgICAgIHRhcmdldDogW3NjaGVtYS5kb3JhRGVwbG95bWVudC5leGVjdXRpb25JZCwgc2NoZW1hLmRvcmFEZXBsb3ltZW50LmVudmlyb25tZW50XSxcbiAgICAgICAgc2V0OiB7XG4gICAgICAgICAgc3VjY2VlZGVkOiBzcWxgZXhjbHVkZWQuc3VjY2VlZGVkYCxcbiAgICAgICAgICBkZXBsb3llZEF0OiBzcWxgZXhjbHVkZWQuZGVwbG95ZWRfYXRgLFxuICAgICAgICAgIHBpcGVsaW5lSWQ6IHNxbGBDT0FMRVNDRShleGNsdWRlZC5waXBlbGluZV9pZCwgJHtzY2hlbWEuZG9yYURlcGxveW1lbnQucGlwZWxpbmVJZH0pYCxcbiAgICAgICAgICAvLyBBIGxhdGVyIGV2ZW50IG1heSByZXNvbHZlIGEgY29tbWl0IHJhbmdlIHRoZSBmaXJzdCBvbmUgY291bGQgbm90LCBzb1xuICAgICAgICAgIC8vIHRoZXNlIGZpbGwgaW4g4oCUIGJ1dCBuZXZlciBibGFuayBvdXQgd2hhdCB3YXMgYWxyZWFkeSBtZWFzdXJlZC5cbiAgICAgICAgICBlYXJsaWVzdENvbW1pdEF0OiBzcWxgQ09BTEVTQ0UoZXhjbHVkZWQuZWFybGllc3RfY29tbWl0X2F0LCAke3NjaGVtYS5kb3JhRGVwbG95bWVudC5lYXJsaWVzdENvbW1pdEF0fSlgLFxuICAgICAgICAgIGxlYWRUaW1lU2Vjb25kczogc3FsYENPQUxFU0NFKGV4Y2x1ZGVkLmxlYWRfdGltZV9zZWNvbmRzLCAke3NjaGVtYS5kb3JhRGVwbG95bWVudC5sZWFkVGltZVNlY29uZHN9KWAsXG4gICAgICAgICAgY29tbWl0Q291bnQ6IHNxbGBDT0FMRVNDRShleGNsdWRlZC5jb21taXRfY291bnQsICR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmNvbW1pdENvdW50fSlgLFxuICAgICAgICAgIGNvbW1pdFNoYTogc3FsYENPQUxFU0NFKGV4Y2x1ZGVkLmNvbW1pdF9zaGEsICR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmNvbW1pdFNoYX0pYCxcbiAgICAgICAgICAvLyBUaGUgZ2FwIGlzIGNsZWFyZWQgb25jZSBhIGNvbW1pdCB0aW1lc3RhbXAgYXJyaXZlczogYSByZXNvbHZlZCBsZWFkXG4gICAgICAgICAgLy8gdGltZSBhbmQgYSByZWFzb24gaXQgY291bGQgbm90IGJlIHJlc29sdmVkIG11c3QgbmV2ZXIgY29leGlzdC5cbiAgICAgICAgICBsZWFkVGltZUdhcDogc3FsYENBU0UgV0hFTiBDT0FMRVNDRShleGNsdWRlZC5lYXJsaWVzdF9jb21taXRfYXQsICR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmVhcmxpZXN0Q29tbWl0QXR9KSBJUyBOT1QgTlVMTFxuICAgICAgICAgICAgVEhFTiBOVUxMIEVMU0UgZXhjbHVkZWQubGVhZF90aW1lX2dhcCBFTkRgLFxuICAgICAgICAgIHVwZGF0ZWRBdDogbmV3IERhdGUoKSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICAucmV0dXJuaW5nKHsgZXhlY3V0aW9uSWQ6IHNjaGVtYS5kb3JhRGVwbG95bWVudC5leGVjdXRpb25JZCB9KSk7XG4gICAgcmV0dXJuIChsYW5kZWQgYXMgdW5rbm93bltdKS5sZW5ndGg7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZ2dlci53YXJuKCdEZXBsb3kgcm9sbHVwIHVwc2VydCBmYWlsZWQ7IHRoZSBldmVudHMgbGFuZGVkIGFuZCBhIHJlYnVpbGQgY2FuIHJlY292ZXIgaXQnLCB7XG4gICAgICBkZXBsb3lzOiB2YWx1ZXMubGVuZ3RoLFxuICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZShlcnIpLFxuICAgIH0pO1xuICAgIHJldHVybiAwO1xuICB9XG59XG5cbi8qKlxuICogUmVjb3JkIGEgcG9zdC1kZXBsb3kgb3V0Y29tZSBhZ2FpbnN0IHRoZSBkZXBsb3kgaXQgY29uY2VybnMuXG4gKlxuICogRGVub3JtYWxpemVkIG9udG8gYGRvcmFfZGVwbG95bWVudHNgIHNvIGNoYW5nZS1mYWlsdXJlIHJhdGUgYW5kXG4gKiB0aW1lLXRvLXJlc3RvcmUgYXJlIG9uZSBzY2FuIG92ZXIgdGhlIHdpbmRvdyBpbnN0ZWFkIG9mIGEgam9pbiBwZXIgcmVhZC4gVGhlXG4gKiBgZGVwbG95bWVudF9vdXRjb21lc2AgdGFibGUgc3RheXMgdGhlIGF1dGhvcml0eSDigJQgdGhpcyBpcyB0aGUgY29weSB0aGVcbiAqIGFnZ3JlZ2F0ZXMgdXNlLCBhbmQgaXQgaXMgcmVidWlsZGFibGUgZnJvbSBpdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwcGx5RGVwbG95T3V0Y29tZShcbiAgb3JnSWQ6IHN0cmluZyxcbiAgZXhlY3V0aW9uSWQ6IHN0cmluZyxcbiAgb3V0Y29tZTogJ2ZhaWxlZCcgfCAncmVzdG9yZWQnLFxuICBhdDogRGF0ZSxcbiAgZW52aXJvbm1lbnQ/OiBzdHJpbmcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgd2hlcmUgPSBlbnZpcm9ubWVudFxuICAgID8gYW5kKFxuICAgICAgZXEoc2NoZW1hLmRvcmFEZXBsb3ltZW50LmV4ZWN1dGlvbklkLCBleGVjdXRpb25JZCksXG4gICAgICBlcShzY2hlbWEuZG9yYURlcGxveW1lbnQuZW52aXJvbm1lbnQsIGVudmlyb25tZW50KSxcbiAgICAgIGVxKHNjaGVtYS5kb3JhRGVwbG95bWVudC5vcmdJZCwgb3JnSWQpLFxuICAgIClcbiAgICA6IGFuZChcbiAgICAgIGVxKHNjaGVtYS5kb3JhRGVwbG95bWVudC5leGVjdXRpb25JZCwgZXhlY3V0aW9uSWQpLFxuICAgICAgZXEoc2NoZW1hLmRvcmFEZXBsb3ltZW50Lm9yZ0lkLCBvcmdJZCksXG4gICAgKTtcbiAgLy8gQSBgcmVzdG9yZWRgIG1hcmtlciBvbmx5IG1lYW5zIHNvbWV0aGluZyBmb3IgYSBkZXBsb3kgdGhhdCB3YXMgbWFya2VkIGZhaWxlZDtcbiAgLy8gcmVjb3JkaW5nIGEgcmVzdG9yZSB3aXRoIG5vIGZhaWx1cmUgd291bGQgcHJvZHVjZSBhIG5lZ2F0aXZlIHRpbWUtdG8tcmVzdG9yZS5cbiAgY29uc3Qgc2V0ID0gb3V0Y29tZSA9PT0gJ2ZhaWxlZCdcbiAgICA/IHsgZmFpbGVkQXQ6IGF0LCB1cGRhdGVkQXQ6IG5ldyBEYXRlKCkgfVxuICAgIDogeyByZXN0b3JlZEF0OiBhdCwgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpIH07XG4gIGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4LnVwZGF0ZShzY2hlbWEuZG9yYURlcGxveW1lbnQpLnNldChzZXQpXG4gICAgLndoZXJlKG91dGNvbWUgPT09ICdyZXN0b3JlZCdcbiAgICAgID8gYW5kKHdoZXJlLCBzcWxgJHtzY2hlbWEuZG9yYURlcGxveW1lbnQuZmFpbGVkQXR9IElTIE5PVCBOVUxMYClcbiAgICAgIDogd2hlcmUpKTtcbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGUgYW4gaW5jaWRlbnQgdG8gdGhlIG1vc3QgcmVjZW50IHN1Y2Nlc3NmdWwgZGVwbG95IHRvIGl0cyBlbnZpcm9ubWVudFxuICogd2l0aGluIHRoZSBjb3JyZWxhdGlvbiB3aW5kb3csIGFuZCBsYWJlbCBob3cgY29uZmlkZW50IHRoYXQgbGluayBpcy5cbiAqXG4gKiBUaGUgY29uZmlkZW5jZSBpcyB0aGUgcG9pbnQuIFwiVGhpcyBkZXBsb3kgYnJva2UgcHJvZHVjdGlvblwiIGFuZCBcImFuIGluY2lkZW50XG4gKiBvcGVuZWQgZWxldmVuIGhvdXJzIGFmdGVyIHRoaXMgZGVwbG95LCBhbmQgdGhlIHdpbmRvdyBoYXBwZW5zIHRvIGJlIHR3ZWx2ZVwiIGFyZVxuICogZGlmZmVyZW50IGNsYWltcywgYW5kIGEgbWFuYWdlciBhY3RzIGRpZmZlcmVudGx5IG9uIGVhY2gg4oCUIHNvIHRoZSByZXBvcnQgc2hvd3NcbiAqIHdoaWNoIG9uZSBpdCBpcyByYXRoZXIgdGhhbiBwcmVzZW50aW5nIGJvdGggYXMgYSBjaGFuZ2UgZmFpbHVyZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNvcnJlbGF0ZUluY2lkZW50KFxuICBvcmdJZDogc3RyaW5nLFxuICBlbnZpcm9ubWVudDogc3RyaW5nLFxuICBvcGVuZWRBdDogRGF0ZSxcbiAgd2luZG93SG91cnM6IG51bWJlcixcbik6IFByb21pc2U8eyBleGVjdXRpb25JZDogc3RyaW5nOyBjb25maWRlbmNlOiAnaGlnaCcgfCAnbWVkaXVtJyB8ICdsb3cnIH0gfCBudWxsPiB7XG4gIGNvbnN0IHdpbmRvd1N0YXJ0ID0gbmV3IERhdGUob3BlbmVkQXQuZ2V0VGltZSgpIC0gd2luZG93SG91cnMgKiAzNjAwXzAwMCk7XG4gIGNvbnN0IHJvd3MgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eC5zZWxlY3Qoe1xuICAgIGV4ZWN1dGlvbklkOiBzY2hlbWEuZG9yYURlcGxveW1lbnQuZXhlY3V0aW9uSWQsXG4gICAgZGVwbG95ZWRBdDogc2NoZW1hLmRvcmFEZXBsb3ltZW50LmRlcGxveWVkQXQsXG4gIH0pLmZyb20oc2NoZW1hLmRvcmFEZXBsb3ltZW50KVxuICAgIC53aGVyZShhbmQoXG4gICAgICBlcShzY2hlbWEuZG9yYURlcGxveW1lbnQub3JnSWQsIG9yZ0lkKSxcbiAgICAgIGVxKHNjaGVtYS5kb3JhRGVwbG95bWVudC5lbnZpcm9ubWVudCwgZW52aXJvbm1lbnQpLFxuICAgICAgZXEoc2NoZW1hLmRvcmFEZXBsb3ltZW50LnN1Y2NlZWRlZCwgdHJ1ZSksXG4gICAgICBzcWxgJHtzY2hlbWEuZG9yYURlcGxveW1lbnQuZGVwbG95ZWRBdH0gPD0gJHtvcGVuZWRBdH1gLFxuICAgICAgc3FsYCR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmRlcGxveWVkQXR9ID49ICR7d2luZG93U3RhcnR9YCxcbiAgICApKVxuICAgIC5vcmRlckJ5KHNxbGAke3NjaGVtYS5kb3JhRGVwbG95bWVudC5kZXBsb3llZEF0fSBERVNDYClcbiAgICAubGltaXQoMSkpO1xuICBjb25zdCBkZXBsb3kgPSAocm93cyBhcyBBcnJheTx7IGV4ZWN1dGlvbklkOiBzdHJpbmc7IGRlcGxveWVkQXQ6IERhdGUgfT4pWzBdO1xuICBpZiAoIWRlcGxveSkgcmV0dXJuIG51bGw7XG5cbiAgLy8gQ29uZmlkZW5jZSBieSBob3cgZWFybHkgaW4gdGhlIHdpbmRvdyBpdCBmZWxsLiBUaGUgdGhpcmRzIGFyZSBhIGp1ZGdlbWVudCxcbiAgLy8gYW5kIGEgc3RhdGVkIG9uZTogYW4gaW5jaWRlbnQgd2l0aGluIHRoZSBmaXJzdCB0aGlyZCBvZiB0aGUgd2luZG93IGFmdGVyIGFcbiAgLy8gZGVwbG95IGlzIHRoZSBjYXNlIHRoZSBET1JBIGRlZmluaXRpb24gaXMgYWN0dWFsbHkgYWJvdXQuXG4gIGNvbnN0IGVsYXBzZWQgPSBvcGVuZWRBdC5nZXRUaW1lKCkgLSBkZXBsb3kuZGVwbG95ZWRBdC5nZXRUaW1lKCk7XG4gIGNvbnN0IHdpbmRvd01zID0gd2luZG93SG91cnMgKiAzNjAwXzAwMDtcbiAgY29uc3QgY29uZmlkZW5jZSA9IGVsYXBzZWQgPD0gd2luZG93TXMgLyAzID8gJ2hpZ2gnIDogZWxhcHNlZCA8PSAod2luZG93TXMgKiAyKSAvIDMgPyAnbWVkaXVtJyA6ICdsb3cnO1xuXG4gIGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4LnVwZGF0ZShzY2hlbWEuZG9yYURlcGxveW1lbnQpXG4gICAgLnNldCh7IGZhaWxlZEF0OiBvcGVuZWRBdCwgY29ycmVsYXRpb25Db25maWRlbmNlOiBjb25maWRlbmNlLCB1cGRhdGVkQXQ6IG5ldyBEYXRlKCkgfSlcbiAgICAud2hlcmUoYW5kKFxuICAgICAgZXEoc2NoZW1hLmRvcmFEZXBsb3ltZW50LmV4ZWN1dGlvbklkLCBkZXBsb3kuZXhlY3V0aW9uSWQpLFxuICAgICAgZXEoc2NoZW1hLmRvcmFEZXBsb3ltZW50LmVudmlyb25tZW50LCBlbnZpcm9ubWVudCksXG4gICAgICAvLyBEbyBub3Qgb3ZlcndyaXRlIGEgZmFpbHVyZSBhbHJlYWR5IGF0dHJpYnV0ZWQ6IHRoZSBGSVJTVCBpbmNpZGVudCBsaW5rZWRcbiAgICAgIC8vIHRvIGEgZGVwbG95IGlzIHRoZSBvbmUgdGhhdCBtYWRlIGl0IGEgY2hhbmdlIGZhaWx1cmUsIGFuZCBhIGxhdGVyIG9uZVxuICAgICAgLy8gcmUtZGF0aW5nIGl0IHdvdWxkIG1vdmUgdGltZS10by1yZXN0b3JlLlxuICAgICAgaXNOdWxsKHNjaGVtYS5kb3JhRGVwbG95bWVudC5mYWlsZWRBdCksXG4gICAgKSkpO1xuICByZXR1cm4geyBleGVjdXRpb25JZDogZGVwbG95LmV4ZWN1dGlvbklkLCBjb25maWRlbmNlIH07XG59XG4iXX0=
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LXJvbGx1cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvcmVwb3J0aW5nL2RlcGxveS1yb2xsdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7QUFxQjdDLGlFQUFpRTtBQUNqRSxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3BELGdEQUFnRDtBQUNoRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUUvRjs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFvQjtJQUNoRCxPQUFPLEdBQUcsQ0FBQyxTQUFTLEtBQUssT0FBTztXQUMzQixDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVc7V0FDakIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXO1dBQ2pCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMs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QUFDLENBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ04sT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBXcml0aW5nIGBkb3JhX2RlcGxveW1lbnRzYCBhdCBpbmdlc3QuXG4gKlxuICogRXZlcnkgRE9SQSBudW1iZXIgdXNlZCB0byBiZSBkZXJpdmVkIGJ5IHNjYW5uaW5nIGBwaXBlbGluZV9ldmVudHNgIHBlciByZWFkLlxuICogVHdvIHRoaW5ncyB3ZXJlIHdyb25nIHdpdGggdGhhdCwgYW5kIG9ubHkgb25lIG9mIHRoZW0gd2FzIHNwZWVkOlxuICpcbiAqICAxLiBMRUFEIFRJTUUgV0FTIERPVUJMRS1DT1VOVEVEIElOIFdBSVRJTkcuIEEgZGVwbG95IGVtaXRzIGEgU1RBR0UgZXZlbnQgYW5kXG4gKiAgICAgYW4gQUNUSU9OIGV2ZW50LCBhbmQgYm90aCBjYXJyeSB0aGUgc2FtZSByZXNvbHZlZCBjb21taXQgcmFuZ2UuIEFueVxuICogICAgIGFnZ3JlZ2F0ZSBvdmVyIGV2ZW50cyB0aGVyZWZvcmUgY291bnRlZCBvbmUgZGVwbG95J3MgbGVhZCB0aW1lIHR3aWNlIHRoZVxuICogICAgIG1vbWVudCBzb21lYm9keSBhZGRlZCB0aGUgQUNUSU9OIHJvd3MgdG8gYSBxdWVyeS4gU3RvcmluZyBpdCBvbmNlIHBlclxuICogICAgIGV4ZWN1dGlvbiBtYWtlcyB0aGF0IG1pc3Rha2UgdW5hdmFpbGFibGUgcmF0aGVyIHRoYW4gbWVyZWx5IHVubWFkZS5cbiAqICAyLiBUSEUgTlVNQkVSUyBESUQgTk9UIFNVUlZJVkUgUkVURU5USU9OLiBUaGUgc3dlZXAgcHVyZ2VzIHJhdyBldmVudHMgYnlcbiAqICAgICB0aWVyLCBzbyBhIHF1YXJ0ZXJseSByZXBvcnQgY291bGQgbm90IGJlIHJlY29tcHV0ZWQgb25jZSBpdHMgZXZlbnRzIHdlcmVcbiAqICAgICBnb25lIOKAlCB3aGljaCBpcyBleGFjdGx5IHdoZW4gc29tZW9uZSBhc2tzIGFib3V0IGl0LlxuICpcbiAqIEEgZGVwbG95IGlzIGEgU1RBR0UgZXZlbnQgY2FycnlpbmcgYW4gYGVudmlyb25tZW50YDogdGhlIHNhbWUgcHJlZGljYXRlIHRoZVxuICogRE9SQSBxdWVyaWVzIGhhdmUgYWx3YXlzIHVzZWQsIG5vdyBhcHBsaWVkIG9uY2UgYXQgd3JpdGUgdGltZS5cbiAqL1xuXG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIsIGVycm9yTWVzc2FnZSB9IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IGFuZCwgZXEsIGlzTnVsbCwgc3FsIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgc2NoZW1hIH0gZnJvbSAnLi4vLi4vZGF0YWJhc2UvZHJpenpsZS1zY2hlbWEuanMnO1xuaW1wb3J0IHR5cGUgeyBMZWFkVGltZUdhcCB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL3NjaGVtYS9yZXBvcnRpbmctYW5hbHl0aWNzLmpzJztcbmltcG9ydCB7IHdpdGhUZW5hbnRUeCB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL3RlbmFuY3kuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ2RlcGxveS1yb2xsdXAnKTtcblxuLyoqIFRoZSBmaWVsZHMgb2YgYW4gaW5zZXJ0ZWQgZXZlbnQgcm93IHRoaXMgbW9kdWxlIG5lZWRzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3lDYW5kaWRhdGUge1xuICBvcmdJZDogc3RyaW5nO1xuICBwaXBlbGluZUlkOiBzdHJpbmcgfCBudWxsO1xuICBleGVjdXRpb25JZDogc3RyaW5nIHwgbnVsbDtcbiAgZXZlbnRUeXBlOiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xuICBzdGFnZU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIGVudmlyb25tZW50OiBzdHJpbmcgfCBudWxsO1xuICBjb21taXRTaGE/OiBzdHJpbmcgfCBudWxsO1xuICBjb21taXRUaW1lc3RhbXA/OiBEYXRlIHwgbnVsbDtcbiAgY29tbWl0Q291bnQ/OiBudW1iZXIgfCBudWxsO1xuICBjb21wbGV0ZWRBdD86IERhdGUgfCBudWxsO1xuICBzdGFydGVkQXQ/OiBEYXRlIHwgbnVsbDtcbiAgY3JlYXRlZEF0PzogRGF0ZSB8IG51bGw7XG4gIC8qKiBUaGUgRXZlbnRCcmlkZ2UgZXZlbnQgaWQgb2YgdGhlIHJvdywgd2hlbiBpdHMgcHJvZHVjZXIgaGFkIG9uZS4gKi9cbiAgc291cmNlRXZlbnRJZD86IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKiBTdGF0dXNlcyBhbiBldmVudCB1c2VzIGZvciBcInRoaXMgZmluaXNoZWQsIGFuZCBpdCB3b3JrZWRcIi4gKi9cbmNvbnN0IFNVQ0NFRURFRCA9IG5ldyBTZXQoWydTVUNDRUVERUQnLCAnU1VDQ0VTUyddKTtcbi8qKiDigKZhbmQgZm9yIFwidGhpcyBmaW5pc2hlZCwgYW5kIGl0IGRpZCBub3RcIi4gKi9cbmNvbnN0IEZBSUxFRCA9IG5ldyBTZXQoWydGQUlMRUQnLCAnRkFJTFVSRScsICdDQU5DRUxFRCcsICdDQU5DRUxMRUQnLCAnU1RPUFBFRCcsICdUSU1FRF9PVVQnXSk7XG5cbi8qKlxuICogSXMgdGhpcyByb3cgYSBkZXBsb3k/XG4gKlxuICogQSBTVEFHRSBldmVudCB3aXRoIGFuIGVudmlyb25tZW50LCBpbiBhIHRlcm1pbmFsIHN0YXRlLiBgSU5fUFJPR1JFU1NgIHJvd3MgYXJlXG4gKiBza2lwcGVkIGRlbGliZXJhdGVseTogYSBkZXBsb3kgdGhhdCBoYXMgc3RhcnRlZCBoYXMgbm8gZHVyYXRpb24sIG5vIG91dGNvbWUgYW5kXG4gKiBubyBwbGFjZSBpbiBhIGRlcGxveW1lbnQtZnJlcXVlbmN5IGNvdW50LCBhbmQgd3JpdGluZyBpdCB3b3VsZCBtYWtlIGV2ZXJ5XG4gKiBpbi1mbGlnaHQgZGVwbG95IGxvb2sgbGlrZSBhIHN1Y2Nlc3NmdWwgb25lIHVudGlsIGl0cyBuZXh0IGV2ZW50IGxhbmRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGVwbG95RXZlbnQocm93OiBEZXBsb3lDYW5kaWRhdGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHJvdy5ldmVudFR5cGUgPT09ICdTVEFHRSdcbiAgICAmJiAhIXJvdy5lbnZpcm9ubWVudFxuICAgICYmICEhcm93LmV4ZWN1dGlvbklkXG4gICAgJiYgKFNVQ0NFRURFRC5oYXMocm93LnN0YXR1cykgfHwgRkFJTEVELmhhcyhyb3cuc3RhdHVzKSk7XG59XG5cbi8qKlxuICogV2h5IGxlYWQgdGltZSBpcyBhYnNlbnQgZm9yIGEgZGVwbG95IHRoYXQgaGFzIG5vIGNvbW1pdCB0aW1lc3RhbXAuXG4gKlxuICogYG5vX2NvbW1pdF9kYXRhYCBpcyB0aGUgaG9uZXN0IGRlZmF1bHQ6IHRoZSBmb3J3YXJkZXIgcmVzb2x2ZXMgdGhlIGNvbW1pdCByYW5nZVxuICogaW4tYWNjb3VudCBhbmQgcmVwb3J0cyB0aGUgcmVhc29uIGl0IGNvdWxkIG5vdCwgc28gYW55dGhpbmcgZWxzZSBoZXJlIHdvdWxkIGJlXG4gKiB0aGlzIG1vZHVsZSBndWVzc2luZy4gVGhlIHJlYXNvbiBpdCBESUQgcmVwb3J0IHJpZGVzIG9uIHRoZSBldmVudCdzIGBkZXRhaWxgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGVhZFRpbWVHYXBPZihyb3c6IERlcGxveUNhbmRpZGF0ZSAmIHsgZGV0YWlsPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIH0pOiBMZWFkVGltZUdhcCB8IG51bGwge1xuICBpZiAocm93LmNvbW1pdFRpbWVzdGFtcCkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IHJlcG9ydGVkID0gcm93LmRldGFpbD8ubGVhZFRpbWVHYXA7XG4gIGlmIChyZXBvcnRlZCA9PT0gJ25vX3Rva2VuJyB8fCByZXBvcnRlZCA9PT0gJ3JhdGVfbGltaXRlZCcgfHwgcmVwb3J0ZWQgPT09ICd1bnN1cHBvcnRlZF9zb3VyY2UnKSByZXR1cm4gcmVwb3J0ZWQ7XG4gIHJldHVybiAnbm9fY29tbWl0X2RhdGEnO1xufVxuXG4vKiogV2hlbiB0aGUgZGVwbG95IGZpbmlzaGVkLiBGYWxscyBiYWNrIHRocm91Z2ggdGhlIGV2ZW50J3Mgb3duIHRpbWVzdGFtcHMuICovXG5mdW5jdGlvbiBkZXBsb3llZEF0T2Yocm93OiBEZXBsb3lDYW5kaWRhdGUpOiBEYXRlIHwgbnVsbCB7XG4gIHJldHVybiByb3cuY29tcGxldGVkQXQgPz8gcm93LnN0YXJ0ZWRBdCA/PyByb3cuY3JlYXRlZEF0ID8/IG51bGw7XG59XG5cbi8qKlxuICogVXBzZXJ0IHRoZSBkZXBsb3kgcm93cyBmb3IgYSBiYXRjaCBvZiBmcmVzaGx5LWluc2VydGVkIGV2ZW50cy5cbiAqXG4gKiBPTkUgUk9XIFBFUiAoZXhlY3V0aW9uLCBlbnZpcm9ubWVudCksIHNvIGEgcmVkZWxpdmVyZWQgZXZlbnQgcmVmcmVzaGVzIHRoZSByb3dcbiAqIHJhdGhlciB0aGFuIGFkZGluZyBhIHNlY29uZCBkZXBsb3kg4oCUIHRoZSBzYW1lIGF0LWxlYXN0LW9uY2UgcHJvYmxlbSB0aGUgZXZlbnRcbiAqIGluc2VydCBzb2x2ZXMgd2l0aCBpdHMgcGFydGlhbCB1bmlxdWUgaW5kZXguXG4gKlxuICogVGhlIGNvbmZsaWN0IHVwZGF0ZSBkZWxpYmVyYXRlbHkgZG9lcyBOT1QgdG91Y2ggYGZhaWxlZF9hdGAgLyBgcmVzdG9yZWRfYXRgOlxuICogdGhvc2UgYXJlIHNldCBieSB0aGUgcG9zdC1kZXBsb3kgb3V0Y29tZSBtYXJrZXJzIGFuZCBieSBpbmNpZGVudCBjb3JyZWxhdGlvbixcbiAqIGFuZCBhIGxhdGUgcmVkZWxpdmVyeSBvZiB0aGUgb3JpZ2luYWwgZGVwbG95IGV2ZW50IG11c3Qgbm90IGVyYXNlIGEgcmVjb3JkZWRcbiAqIHByb2R1Y3Rpb24gZmFpbHVyZS5cbiAqXG4gKiBOZXZlciB0aHJvd3MuIEFuIGluZ2VzdCBiYXRjaCB0aGF0IGxhbmRlZCBpdHMgZXZlbnRzIGhhcyBkb25lIHRoZSBkdXJhYmxlIHBhcnRcbiAqIG9mIGl0cyBqb2I7IGZhaWxpbmcgdGhlIHdob2xlIGJhdGNoIGJlY2F1c2UgYSBkZXJpdmVkIHJvdyBjb3VsZCBub3QgYmUgd3JpdHRlblxuICogd291bGQgdHVybiBhIHJvbGx1cCBidWcgaW50byBkYXRhIGxvc3MsIGFuZCB0aGUgYmFja2ZpbGwgY2FuIHJlYnVpbGQgdGhlc2UgZnJvbVxuICogdGhlIGV2ZW50cyB3aGlsZSB0aGV5IGV4aXN0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBzZXJ0RGVwbG95bWVudHMoXG4gIHJvd3M6IFJlYWRvbmx5QXJyYXk8RGVwbG95Q2FuZGlkYXRlICYgeyBkZXRhaWw/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwgfT4sXG4pOiBQcm9taXNlPG51bWJlcj4ge1xuICBjb25zdCBkZXBsb3lzID0gcm93cy5maWx0ZXIoaXNEZXBsb3lFdmVudCk7XG4gIGlmIChkZXBsb3lzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG5cbiAgY29uc3QgdmFsdWVzID0gZGVwbG95cy5mbGF0TWFwKChyb3cpID0+IHtcbiAgICBjb25zdCBkZXBsb3llZEF0ID0gZGVwbG95ZWRBdE9mKHJvdyk7XG4gICAgaWYgKCFkZXBsb3llZEF0KSByZXR1cm4gW107XG4gICAgY29uc3Qgc3VjY2VlZGVkID0gU1VDQ0VFREVELmhhcyhyb3cuc3RhdHVzKTtcbiAgICBjb25zdCBlYXJsaWVzdENvbW1pdEF0ID0gcm93LmNvbW1pdFRpbWVzdGFtcCA/PyBudWxsO1xuICAgIC8vIExlYWQgdGltZSBpcyBjb21taXQg4oaSIGRlcGxveSwgYW5kIG9ubHkgd2hlbiBib3RoIGVuZHMgYXJlIHJlYWwuIEEgbmVnYXRpdmVcbiAgICAvLyBnYXAgbWVhbnMgdGhlIHR3byB0aW1lc3RhbXBzIGNhbWUgZnJvbSBkaWZmZXJlbnQgY2xvY2tzOyBpdCBpcyBkcm9wcGVkXG4gICAgLy8gcmF0aGVyIHRoYW4gY2xhbXBlZCB0byB6ZXJvLCBiZWNhdXNlIFwiMCBzZWNvbmRzXCIgaXMgYSBjbGFpbSBhbmQgXCJ1bmtub3duXCJcbiAgICAvLyBpcyB0aGUgdHJ1dGguXG4gICAgY29uc3QgbGVhZFNlY29uZHMgPSBlYXJsaWVzdENvbW1pdEF0XG4gICAgICA/IE1hdGgucm91bmQoKGRlcGxveWVkQXQuZ2V0VGltZSgpIC0gZWFybGllc3RDb21taXRBdC5nZXRUaW1lKCkpIC8gMTAwMClcbiAgICAgIDogbnVsbDtcbiAgICByZXR1cm4gW3tcbiAgICAgIG9yZ0lkOiByb3cub3JnSWQsXG4gICAgICBleGVjdXRpb25JZDogcm93LmV4ZWN1dGlvbklkIGFzIHN0cmluZyxcbiAgICAgIGVudmlyb25tZW50OiByb3cuZW52aXJvbm1lbnQgYXMgc3RyaW5nLFxuICAgICAgcGlwZWxpbmVJZDogcm93LnBpcGVsaW5lSWQsXG4gICAgICBkZXBsb3llZEF0LFxuICAgICAgc3VjY2VlZGVkLFxuICAgICAgZWFybGllc3RDb21taXRBdCxcbiAgICAgIGxlYWRUaW1lU2Vjb25kczogbGVhZFNlY29uZHMgIT09IG51bGwgJiYgbGVhZFNlY29uZHMgPj0gMCA/IGxlYWRTZWNvbmRzIDogbnVsbCxcbiAgICAgIGNvbW1pdENvdW50OiByb3cuY29tbWl0Q291bnQgPz8gbnVsbCxcbiAgICAgIGNvbW1pdFNoYTogcm93LmNvbW1pdFNoYSA/PyBudWxsLFxuICAgICAgbGVhZFRpbWVHYXA6IGxlYWRUaW1lR2FwT2Yocm93KSxcbiAgICAgIHNvdXJjZUV2ZW50SWQ6IHJvdy5zb3VyY2VFdmVudElkID8/IG51bGwsXG4gICAgfV07XG4gIH0pO1xuICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBsYW5kZWQgPSBhd2FpdCB3aXRoVGVuYW50VHgoKHR4KSA9PiB0eC5pbnNlcnQoc2NoZW1hLmRvcmFEZXBsb3ltZW50KS52YWx1ZXModmFsdWVzKVxuICAgICAgLm9uQ29uZmxpY3REb1VwZGF0ZSh7XG4gICAgICAgIHRhcmdldDogW3NjaGVtYS5kb3JhRGVwbG95bWVudC5leGVjdXRpb25JZCwgc2NoZW1hLmRvcmFEZXBsb3ltZW50LmVudmlyb25tZW50XSxcbiAgICAgICAgc2V0OiB7XG4gICAgICAgICAgc3VjY2VlZGVkOiBzcWxgZXhjbHVkZWQuc3VjY2VlZGVkYCxcbiAgICAgICAgICBkZXBsb3llZEF0OiBzcWxgZXhjbHVkZWQuZGVwbG95ZWRfYXRgLFxuICAgICAgICAgIHBpcGVsaW5lSWQ6IHNxbGBDT0FMRVNDRShleGNsdWRlZC5waXBlbGluZV9pZCwgJHtzY2hlbWEuZG9yYURlcGxveW1lbnQucGlwZWxpbmVJZH0pYCxcbiAgICAgICAgICAvLyBBIGxhdGVyIGV2ZW50IG1heSByZXNvbHZlIGEgY29tbWl0IHJhbmdlIHRoZSBmaXJzdCBvbmUgY291bGQgbm90LCBzb1xuICAgICAgICAgIC8vIHRoZXNlIGZpbGwgaW4g4oCUIGJ1dCBuZXZlciBibGFuayBvdXQgd2hhdCB3YXMgYWxyZWFkeSBtZWFzdXJlZC5cbiAgICAgICAgICBlYXJsaWVzdENvbW1pdEF0OiBzcWxgQ09BTEVTQ0UoZXhjbHVkZWQuZWFybGllc3RfY29tbWl0X2F0LCAke3NjaGVtYS5kb3JhRGVwbG95bWVudC5lYXJsaWVzdENvbW1pdEF0fSlgLFxuICAgICAgICAgIGxlYWRUaW1lU2Vjb25kczogc3FsYENPQUxFU0NFKGV4Y2x1ZGVkLmxlYWRfdGltZV9zZWNvbmRzLCAke3NjaGVtYS5kb3JhRGVwbG95bWVudC5sZWFkVGltZVNlY29uZHN9KWAsXG4gICAgICAgICAgY29tbWl0Q291bnQ6IHNxbGBDT0FMRVNDRShleGNsdWRlZC5jb21taXRfY291bnQsICR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmNvbW1pdENvdW50fSlgLFxuICAgICAgICAgIGNvbW1pdFNoYTogc3FsYENPQUxFU0NFKGV4Y2x1ZGVkLmNvbW1pdF9zaGEsICR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmNvbW1pdFNoYX0pYCxcbiAgICAgICAgICAvLyBUaGUgZ2FwIGlzIGNsZWFyZWQgb25jZSBhIGNvbW1pdCB0aW1lc3RhbXAgYXJyaXZlczogYSByZXNvbHZlZCBsZWFkXG4gICAgICAgICAgLy8gdGltZSBhbmQgYSByZWFzb24gaXQgY291bGQgbm90IGJlIHJlc29sdmVkIG11c3QgbmV2ZXIgY29leGlzdC5cbiAgICAgICAgICBsZWFkVGltZUdhcDogc3FsYENBU0UgV0hFTiBDT0FMRVNDRShleGNsdWRlZC5lYXJsaWVzdF9jb21taXRfYXQsICR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmVhcmxpZXN0Q29tbWl0QXR9KSBJUyBOT1QgTlVMTFxuICAgICAgICAgICAgVEhFTiBOVUxMIEVMU0UgZXhjbHVkZWQubGVhZF90aW1lX2dhcCBFTkRgLFxuICAgICAgICAgIC8vIFRoZSBkZXBsb3kgZXZlbnQgdGhhdCBsYXN0IHdyb3RlIHRoZSByb3csIHNvIHRoZSBET1JBIG51bWJlciB0cmFjZXNcbiAgICAgICAgICAvLyBiYWNrIHRvIGl0OyBhIHByb2R1Y2VyIHdpdGhvdXQgYW4gaWQgbmV2ZXIgYmxhbmtzIGEgcmVjb3JkZWQgb25lLlxuICAgICAgICAgIHNvdXJjZUV2ZW50SWQ6IHNxbGBDT0FMRVNDRShleGNsdWRlZC5zb3VyY2VfZXZlbnRfaWQsICR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LnNvdXJjZUV2ZW50SWR9KWAsXG4gICAgICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC5yZXR1cm5pbmcoeyBleGVjdXRpb25JZDogc2NoZW1hLmRvcmFEZXBsb3ltZW50LmV4ZWN1dGlvbklkIH0pKTtcbiAgICByZXR1cm4gKGxhbmRlZCBhcyB1bmtub3duW10pLmxlbmd0aDtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nZ2VyLndhcm4oJ0RlcGxveSByb2xsdXAgdXBzZXJ0IGZhaWxlZDsgdGhlIGV2ZW50cyBsYW5kZWQgYW5kIGEgcmVidWlsZCBjYW4gcmVjb3ZlciBpdCcsIHtcbiAgICAgIGRlcGxveXM6IHZhbHVlcy5sZW5ndGgsXG4gICAgICBlcnJvcjogZXJyb3JNZXNzYWdlKGVyciksXG4gICAgfSk7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWNvcmQgYSBwb3N0LWRlcGxveSBvdXRjb21lIGFnYWluc3QgdGhlIGRlcGxveSBpdCBjb25jZXJucy5cbiAqXG4gKiBEZW5vcm1hbGl6ZWQgb250byBgZG9yYV9kZXBsb3ltZW50c2Agc28gY2hhbmdlLWZhaWx1cmUgcmF0ZSBhbmRcbiAqIHRpbWUtdG8tcmVzdG9yZSBhcmUgb25lIHNjYW4gb3ZlciB0aGUgd2luZG93IGluc3RlYWQgb2YgYSBqb2luIHBlciByZWFkLiBUaGVcbiAqIGBkZXBsb3ltZW50X291dGNvbWVzYCB0YWJsZSBzdGF5cyB0aGUgYXV0aG9yaXR5IOKAlCB0aGlzIGlzIHRoZSBjb3B5IHRoZVxuICogYWdncmVnYXRlcyB1c2UsIGFuZCBpdCBpcyByZWJ1aWxkYWJsZSBmcm9tIGl0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwbHlEZXBsb3lPdXRjb21lKFxuICBvcmdJZDogc3RyaW5nLFxuICBleGVjdXRpb25JZDogc3RyaW5nLFxuICBvdXRjb21lOiAnZmFpbGVkJyB8ICdyZXN0b3JlZCcsXG4gIGF0OiBEYXRlLFxuICBlbnZpcm9ubWVudD86IHN0cmluZyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB3aGVyZSA9IGVudmlyb25tZW50XG4gICAgPyBhbmQoXG4gICAgICBlcShzY2hlbWEuZG9yYURlcGxveW1lbnQuZXhlY3V0aW9uSWQsIGV4ZWN1dGlvbklkKSxcbiAgICAgIGVxKHNjaGVtYS5kb3JhRGVwbG95bWVudC5lbnZpcm9ubWVudCwgZW52aXJvbm1lbnQpLFxuICAgICAgZXEoc2NoZW1hLmRvcmFEZXBsb3ltZW50Lm9yZ0lkLCBvcmdJZCksXG4gICAgKVxuICAgIDogYW5kKFxuICAgICAgZXEoc2NoZW1hLmRvcmFEZXBsb3ltZW50LmV4ZWN1dGlvbklkLCBleGVjdXRpb25JZCksXG4gICAgICBlcShzY2hlbWEuZG9yYURlcGxveW1lbnQub3JnSWQsIG9yZ0lkKSxcbiAgICApO1xuICAvLyBBIGByZXN0b3JlZGAgbWFya2VyIG9ubHkgbWVhbnMgc29tZXRoaW5nIGZvciBhIGRlcGxveSB0aGF0IHdhcyBtYXJrZWQgZmFpbGVkO1xuICAvLyByZWNvcmRpbmcgYSByZXN0b3JlIHdpdGggbm8gZmFpbHVyZSB3b3VsZCBwcm9kdWNlIGEgbmVnYXRpdmUgdGltZS10by1yZXN0b3JlLlxuICBjb25zdCBzZXQgPSBvdXRjb21lID09PSAnZmFpbGVkJ1xuICAgID8geyBmYWlsZWRBdDogYXQsIHVwZGF0ZWRBdDogbmV3IERhdGUoKSB9XG4gICAgOiB7IHJlc3RvcmVkQXQ6IGF0LCB1cGRhdGVkQXQ6IG5ldyBEYXRlKCkgfTtcbiAgYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHgudXBkYXRlKHNjaGVtYS5kb3JhRGVwbG95bWVudCkuc2V0KHNldClcbiAgICAud2hlcmUob3V0Y29tZSA9PT0gJ3Jlc3RvcmVkJ1xuICAgICAgPyBhbmQod2hlcmUsIHNxbGAke3NjaGVtYS5kb3JhRGVwbG95bWVudC5mYWlsZWRBdH0gSVMgTk9UIE5VTExgKVxuICAgICAgOiB3aGVyZSkpO1xufVxuXG4vKipcbiAqIEF0dHJpYnV0ZSBhbiBpbmNpZGVudCB0byB0aGUgbW9zdCByZWNlbnQgc3VjY2Vzc2Z1bCBkZXBsb3kgdG8gaXRzIGVudmlyb25tZW50XG4gKiB3aXRoaW4gdGhlIGNvcnJlbGF0aW9uIHdpbmRvdywgYW5kIGxhYmVsIGhvdyBjb25maWRlbnQgdGhhdCBsaW5rIGlzLlxuICpcbiAqIFRoZSBjb25maWRlbmNlIGlzIHRoZSBwb2ludC4gXCJUaGlzIGRlcGxveSBicm9rZSBwcm9kdWN0aW9uXCIgYW5kIFwiYW4gaW5jaWRlbnRcbiAqIG9wZW5lZCBlbGV2ZW4gaG91cnMgYWZ0ZXIgdGhpcyBkZXBsb3ksIGFuZCB0aGUgd2luZG93IGhhcHBlbnMgdG8gYmUgdHdlbHZlXCIgYXJlXG4gKiBkaWZmZXJlbnQgY2xhaW1zLCBhbmQgYSBtYW5hZ2VyIGFjdHMgZGlmZmVyZW50bHkgb24gZWFjaCDigJQgc28gdGhlIHJlcG9ydCBzaG93c1xuICogd2hpY2ggb25lIGl0IGlzIHJhdGhlciB0aGFuIHByZXNlbnRpbmcgYm90aCBhcyBhIGNoYW5nZSBmYWlsdXJlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29ycmVsYXRlSW5jaWRlbnQoXG4gIG9yZ0lkOiBzdHJpbmcsXG4gIGVudmlyb25tZW50OiBzdHJpbmcsXG4gIG9wZW5lZEF0OiBEYXRlLFxuICB3aW5kb3dIb3VyczogbnVtYmVyLFxuKTogUHJvbWlzZTx7IGV4ZWN1dGlvbklkOiBzdHJpbmc7IGNvbmZpZGVuY2U6ICdoaWdoJyB8ICdtZWRpdW0nIHwgJ2xvdycgfSB8IG51bGw+IHtcbiAgY29uc3Qgd2luZG93U3RhcnQgPSBuZXcgRGF0ZShvcGVuZWRBdC5nZXRUaW1lKCkgLSB3aW5kb3dIb3VycyAqIDM2MDBfMDAwKTtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IHR4LnNlbGVjdCh7XG4gICAgZXhlY3V0aW9uSWQ6IHNjaGVtYS5kb3JhRGVwbG95bWVudC5leGVjdXRpb25JZCxcbiAgICBkZXBsb3llZEF0OiBzY2hlbWEuZG9yYURlcGxveW1lbnQuZGVwbG95ZWRBdCxcbiAgfSkuZnJvbShzY2hlbWEuZG9yYURlcGxveW1lbnQpXG4gICAgLndoZXJlKGFuZChcbiAgICAgIGVxKHNjaGVtYS5kb3JhRGVwbG95bWVudC5vcmdJZCwgb3JnSWQpLFxuICAgICAgZXEoc2NoZW1hLmRvcmFEZXBsb3ltZW50LmVudmlyb25tZW50LCBlbnZpcm9ubWVudCksXG4gICAgICBlcShzY2hlbWEuZG9yYURlcGxveW1lbnQuc3VjY2VlZGVkLCB0cnVlKSxcbiAgICAgIHNxbGAke3NjaGVtYS5kb3JhRGVwbG95bWVudC5kZXBsb3llZEF0fSA8PSAke29wZW5lZEF0fWAsXG4gICAgICBzcWxgJHtzY2hlbWEuZG9yYURlcGxveW1lbnQuZGVwbG95ZWRBdH0gPj0gJHt3aW5kb3dTdGFydH1gLFxuICAgICkpXG4gICAgLm9yZGVyQnkoc3FsYCR7c2NoZW1hLmRvcmFEZXBsb3ltZW50LmRlcGxveWVkQXR9IERFU0NgKVxuICAgIC5saW1pdCgxKSk7XG4gIGNvbnN0IGRlcGxveSA9IChyb3dzIGFzIEFycmF5PHsgZXhlY3V0aW9uSWQ6IHN0cmluZzsgZGVwbG95ZWRBdDogRGF0ZSB9PilbMF07XG4gIGlmICghZGVwbG95KSByZXR1cm4gbnVsbDtcblxuICAvLyBDb25maWRlbmNlIGJ5IGhvdyBlYXJseSBpbiB0aGUgd2luZG93IGl0IGZlbGwuIFRoZSB0aGlyZHMgYXJlIGEganVkZ2VtZW50LFxuICAvLyBhbmQgYSBzdGF0ZWQgb25lOiBhbiBpbmNpZGVudCB3aXRoaW4gdGhlIGZpcnN0IHRoaXJkIG9mIHRoZSB3aW5kb3cgYWZ0ZXIgYVxuICAvLyBkZXBsb3kgaXMgdGhlIGNhc2UgdGhlIERPUkEgZGVmaW5pdGlvbiBpcyBhY3R1YWxseSBhYm91dC5cbiAgY29uc3QgZWxhcHNlZCA9IG9wZW5lZEF0LmdldFRpbWUoKSAtIGRlcGxveS5kZXBsb3llZEF0LmdldFRpbWUoKTtcbiAgY29uc3Qgd2luZG93TXMgPSB3aW5kb3dIb3VycyAqIDM2MDBfMDAwO1xuICBjb25zdCBjb25maWRlbmNlID0gZWxhcHNlZCA8PSB3aW5kb3dNcyAvIDMgPyAnaGlnaCcgOiBlbGFwc2VkIDw9ICh3aW5kb3dNcyAqIDIpIC8gMyA/ICdtZWRpdW0nIDogJ2xvdyc7XG5cbiAgYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gdHgudXBkYXRlKHNjaGVtYS5kb3JhRGVwbG95bWVudClcbiAgICAuc2V0KHsgZmFpbGVkQXQ6IG9wZW5lZEF0LCBjb3JyZWxhdGlvbkNvbmZpZGVuY2U6IGNvbmZpZGVuY2UsIHVwZGF0ZWRBdDogbmV3IERhdGUoKSB9KVxuICAgIC53aGVyZShhbmQoXG4gICAgICBlcShzY2hlbWEuZG9yYURlcGxveW1lbnQuZXhlY3V0aW9uSWQsIGRlcGxveS5leGVjdXRpb25JZCksXG4gICAgICBlcShzY2hlbWEuZG9yYURlcGxveW1lbnQuZW52aXJvbm1lbnQsIGVudmlyb25tZW50KSxcbiAgICAgIC8vIERvIG5vdCBvdmVyd3JpdGUgYSBmYWlsdXJlIGFscmVhZHkgYXR0cmlidXRlZDogdGhlIEZJUlNUIGluY2lkZW50IGxpbmtlZFxuICAgICAgLy8gdG8gYSBkZXBsb3kgaXMgdGhlIG9uZSB0aGF0IG1hZGUgaXQgYSBjaGFuZ2UgZmFpbHVyZSwgYW5kIGEgbGF0ZXIgb25lXG4gICAgICAvLyByZS1kYXRpbmcgaXQgd291bGQgbW92ZSB0aW1lLXRvLXJlc3RvcmUuXG4gICAgICBpc051bGwoc2NoZW1hLmRvcmFEZXBsb3ltZW50LmZhaWxlZEF0KSxcbiAgICApKSk7XG4gIHJldHVybiB7IGV4ZWN1dGlvbklkOiBkZXBsb3kuZXhlY3V0aW9uSWQsIGNvbmZpZGVuY2UgfTtcbn1cbiJdfQ==
|
|
@@ -23,17 +23,13 @@
|
|
|
23
23
|
* customer's build is the last thing that should reach a model.
|
|
24
24
|
*/
|
|
25
25
|
import type { FailureCategory } from '../../database/schema/reporting-analytics.js';
|
|
26
|
-
/**
|
|
27
|
-
* The category for a failed action.
|
|
28
|
-
*
|
|
29
|
-
* `null` for anything that is not a failure — the caller stores nothing rather
|
|
30
|
-
* than labelling a success, so a category's presence always means "this broke".
|
|
31
|
-
*/
|
|
32
26
|
export declare function classifyFailure(input: {
|
|
33
27
|
status: string;
|
|
34
28
|
errorMessage?: string | null;
|
|
35
29
|
actionName?: string | null;
|
|
36
30
|
stageName?: string | null;
|
|
31
|
+
/** The structured synth refusal code (`detail.pbFailure.code`), when the build printed one. */
|
|
32
|
+
failureCode?: string | null;
|
|
37
33
|
}): FailureCategory | null;
|
|
38
34
|
/**
|
|
39
35
|
* A human label for a category, for the report and the UI.
|