@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
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which pipelines still REFERENCE a plugin version or image — the one rule every
|
|
3
|
+
* removal path asks before it deletes anything: an org plugin delete (forced or
|
|
4
|
+
* not), a bulk delete, a tombstone purge (manual or the retention sweep), the
|
|
5
|
+
* image registry's age GC, the listing image GC.
|
|
6
|
+
*
|
|
7
|
+
* THE RULE: a version (or its image) that any pipeline references cannot be
|
|
8
|
+
* deleted until no pipeline does — whatever its vulnerability state. A
|
|
9
|
+
* vulnerable image is the WORST thing to delete out from under a pipeline: the
|
|
10
|
+
* next run fails to pull, and the owners learn about the CVE from an outage.
|
|
11
|
+
* Vulnerability consequences are graded warnings and notifications, never removal.
|
|
12
|
+
*
|
|
13
|
+
* A reference is any of:
|
|
14
|
+
* - `declared` — a LIVE pipeline's config resolves to it (`pipeline_plugin_resolution`);
|
|
15
|
+
* - `deployed` — a pipeline's last deploy recorded it (`pipeline_step_manifests`),
|
|
16
|
+
* INCLUDING a soft-deleted pipeline: its CodePipeline still runs the image;
|
|
17
|
+
* - `exposure` — an open DEPLOYED exposure still names it (the same "still runs
|
|
18
|
+
* it" fact, kept when a manifest is gone).
|
|
19
|
+
*
|
|
20
|
+
* Matched by image digest when the version has one (a team running its parent's
|
|
21
|
+
* plugin, or another org's install, pins the same digest), else by name +
|
|
22
|
+
* version within the owner org and its teams.
|
|
23
|
+
*/
|
|
24
|
+
import { type SQL } from 'drizzle-orm';
|
|
25
|
+
/** A version / image whose references are wanted. */
|
|
26
|
+
export interface VersionReferenceTarget {
|
|
27
|
+
pluginName: string;
|
|
28
|
+
pluginVersion: string;
|
|
29
|
+
imageDigest?: string | null;
|
|
30
|
+
/** The owning org of an org plugin (its teams count too); omitted for a listing version. */
|
|
31
|
+
ownerOrgId?: string | null;
|
|
32
|
+
/** The listing's publisher handle (a listing version); null/omitted for an org plugin. */
|
|
33
|
+
publisher?: string | null;
|
|
34
|
+
}
|
|
35
|
+
/** One pipeline referencing a version. */
|
|
36
|
+
export interface VersionReference {
|
|
37
|
+
pipelineId: string;
|
|
38
|
+
pipelineName: string | null;
|
|
39
|
+
orgId: string;
|
|
40
|
+
source: 'declared' | 'deployed' | 'exposure';
|
|
41
|
+
/** The pipeline is soft-deleted (still deployed: its manifest or exposure remains). */
|
|
42
|
+
pipelineDeleted: boolean;
|
|
43
|
+
steps: string[];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The SQL predicate "some pipeline references this row's image / version", over
|
|
47
|
+
* a `plugins`-shaped row's columns — the purge guard's form of
|
|
48
|
+
* {@link findVersionReferences} (same three sources, same matching).
|
|
49
|
+
*/
|
|
50
|
+
export declare function versionReferencedPredicate(cols: {
|
|
51
|
+
digest: SQL;
|
|
52
|
+
name: SQL;
|
|
53
|
+
version: SQL;
|
|
54
|
+
orgId: SQL;
|
|
55
|
+
}): SQL;
|
|
56
|
+
/**
|
|
57
|
+
* Every pipeline referencing `target` (see the module doc), across orgs — so it
|
|
58
|
+
* must run with a scope that can read every org's rows (elevated). The result
|
|
59
|
+
* names other orgs' pipelines; callers show the OWNER only counts and its own
|
|
60
|
+
* org's pipelines, and notify each referencing org about its own.
|
|
61
|
+
*/
|
|
62
|
+
export declare function findVersionReferences(target: VersionReferenceTarget): Promise<VersionReference[]>;
|
|
63
|
+
/** Distinct pipelines among `refs` (a pipeline both declared and deployed counts once). */
|
|
64
|
+
export declare function distinctPipelines(refs: readonly VersionReference[]): Array<{
|
|
65
|
+
pipelineId: string;
|
|
66
|
+
pipelineName: string | null;
|
|
67
|
+
orgId: string;
|
|
68
|
+
sources: string[];
|
|
69
|
+
pipelineDeleted: boolean;
|
|
70
|
+
steps: string[];
|
|
71
|
+
}>;
|
|
72
|
+
/**
|
|
73
|
+
* The image digests an org's namespace still needs: every `plugins` row's
|
|
74
|
+
* digest (active, inactive or soft-deleted — a tombstone is restorable until
|
|
75
|
+
* purged, and the purge itself is guarded) plus every digest a pipeline of the
|
|
76
|
+
* org or its teams declares, runs or has an open deployed exposure on. What the
|
|
77
|
+
* image registry's age GC consults before deleting anything in `org-<id>/*`.
|
|
78
|
+
* Elevated read.
|
|
79
|
+
*/
|
|
80
|
+
export declare function orgImageDigestsInUse(orgId: string): Promise<string[]>;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
// Copyright 2026 Pipeline Builder Contributors
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
/**
|
|
4
|
+
* Which pipelines still REFERENCE a plugin version or image — the one rule every
|
|
5
|
+
* removal path asks before it deletes anything: an org plugin delete (forced or
|
|
6
|
+
* not), a bulk delete, a tombstone purge (manual or the retention sweep), the
|
|
7
|
+
* image registry's age GC, the listing image GC.
|
|
8
|
+
*
|
|
9
|
+
* THE RULE: a version (or its image) that any pipeline references cannot be
|
|
10
|
+
* deleted until no pipeline does — whatever its vulnerability state. A
|
|
11
|
+
* vulnerable image is the WORST thing to delete out from under a pipeline: the
|
|
12
|
+
* next run fails to pull, and the owners learn about the CVE from an outage.
|
|
13
|
+
* Vulnerability consequences are graded warnings and notifications, never removal.
|
|
14
|
+
*
|
|
15
|
+
* A reference is any of:
|
|
16
|
+
* - `declared` — a LIVE pipeline's config resolves to it (`pipeline_plugin_resolution`);
|
|
17
|
+
* - `deployed` — a pipeline's last deploy recorded it (`pipeline_step_manifests`),
|
|
18
|
+
* INCLUDING a soft-deleted pipeline: its CodePipeline still runs the image;
|
|
19
|
+
* - `exposure` — an open DEPLOYED exposure still names it (the same "still runs
|
|
20
|
+
* it" fact, kept when a manifest is gone).
|
|
21
|
+
*
|
|
22
|
+
* Matched by image digest when the version has one (a team running its parent's
|
|
23
|
+
* plugin, or another org's install, pins the same digest), else by name +
|
|
24
|
+
* version within the owner org and its teams.
|
|
25
|
+
*/
|
|
26
|
+
import { sql } from 'drizzle-orm';
|
|
27
|
+
import { executeRows } from '../database/pg-result.js';
|
|
28
|
+
import { withTenantTx } from '../database/tenancy.js';
|
|
29
|
+
/**
|
|
30
|
+
* The SQL predicate "some pipeline references this row's image / version", over
|
|
31
|
+
* a `plugins`-shaped row's columns — the purge guard's form of
|
|
32
|
+
* {@link findVersionReferences} (same three sources, same matching).
|
|
33
|
+
*/
|
|
34
|
+
export function versionReferencedPredicate(cols) {
|
|
35
|
+
return sql `(
|
|
36
|
+
(${cols.digest} IS NOT NULL AND (
|
|
37
|
+
EXISTS (SELECT 1 FROM pipeline_step_manifests m WHERE m.image_digest = ${cols.digest})
|
|
38
|
+
OR EXISTS (SELECT 1 FROM pipeline_plugin_resolution r JOIN pipelines p ON p.id::text = r.pipeline_id AND p.deleted_at IS NULL
|
|
39
|
+
WHERE r.resolved_digest = ${cols.digest})
|
|
40
|
+
OR EXISTS (SELECT 1 FROM plugin_vuln_exposure e WHERE e.image_digest = ${cols.digest} AND e.source = 'deployed' AND e.fixed_at IS NULL)))
|
|
41
|
+
OR (${cols.digest} IS NULL AND (
|
|
42
|
+
EXISTS (SELECT 1 FROM pipeline_step_manifests m WHERE m.plugin_name = ${cols.name} AND m.plugin_version = ${cols.version}
|
|
43
|
+
AND m.plugin_publisher IS NULL AND lower(m.org_id) = lower(${cols.orgId}))
|
|
44
|
+
OR EXISTS (SELECT 1 FROM pipeline_plugin_resolution r JOIN pipelines p ON p.id::text = r.pipeline_id AND p.deleted_at IS NULL
|
|
45
|
+
WHERE r.plugin_name = ${cols.name} AND r.resolved_version = ${cols.version} AND r.plugin_publisher IS NULL
|
|
46
|
+
AND (lower(r.org_id) = lower(${cols.orgId}) OR lower(r.root_org_id) = lower(${cols.orgId})))))
|
|
47
|
+
)`;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Every pipeline referencing `target` (see the module doc), across orgs — so it
|
|
51
|
+
* must run with a scope that can read every org's rows (elevated). The result
|
|
52
|
+
* names other orgs' pipelines; callers show the OWNER only counts and its own
|
|
53
|
+
* org's pipelines, and notify each referencing org about its own.
|
|
54
|
+
*/
|
|
55
|
+
export async function findVersionReferences(target) {
|
|
56
|
+
const digest = target.imageDigest ?? null;
|
|
57
|
+
const owner = target.ownerOrgId?.toLowerCase() ?? null;
|
|
58
|
+
const declaredMatch = digest
|
|
59
|
+
? sql `r.resolved_digest = ${digest}`
|
|
60
|
+
: sql `r.plugin_name = ${target.pluginName} AND r.resolved_version = ${target.pluginVersion}
|
|
61
|
+
AND ${target.publisher ? sql `r.plugin_publisher = ${target.publisher}` : sql `r.plugin_publisher IS NULL AND (lower(r.org_id) = ${owner} OR lower(r.root_org_id) = ${owner})`}`;
|
|
62
|
+
const deployedMatch = digest
|
|
63
|
+
? sql `m.image_digest = ${digest}`
|
|
64
|
+
: sql `m.plugin_name = ${target.pluginName} AND m.plugin_version = ${target.pluginVersion}
|
|
65
|
+
AND ${target.publisher ? sql `m.plugin_publisher = ${target.publisher}` : sql `m.plugin_publisher IS NULL AND lower(m.org_id) = ${owner}`}`;
|
|
66
|
+
const exposureMatch = digest
|
|
67
|
+
? sql `e.image_digest = ${digest}`
|
|
68
|
+
: sql `e.plugin_name = ${target.pluginName} AND e.plugin_version = ${target.pluginVersion}
|
|
69
|
+
AND ${target.publisher ? sql `e.plugin_publisher = ${target.publisher}` : sql `e.plugin_publisher IS NULL AND lower(e.org_id) = ${owner}`}`;
|
|
70
|
+
const rows = await withTenantTx((tx) => executeRows(tx, sql `
|
|
71
|
+
SELECT x.pipeline_id, x.org_id, x.source, p.pipeline_name, (p.id IS NULL OR p.deleted_at IS NOT NULL) AS deleted,
|
|
72
|
+
array_agg(DISTINCT x.step) FILTER (WHERE x.step IS NOT NULL) AS steps
|
|
73
|
+
FROM (
|
|
74
|
+
SELECT r.pipeline_id, r.org_id, 'declared' AS source,
|
|
75
|
+
CASE WHEN r.stage_name = 'synth' AND r.step_name = 'synth' THEN 'synth' ELSE r.stage_name || '/' || r.step_name END AS step
|
|
76
|
+
FROM pipeline_plugin_resolution r
|
|
77
|
+
JOIN pipelines lp ON lp.id::text = r.pipeline_id AND lp.deleted_at IS NULL
|
|
78
|
+
WHERE ${declaredMatch}
|
|
79
|
+
UNION ALL
|
|
80
|
+
SELECT m.pipeline_id::text, m.org_id, 'deployed', m.stage_name || '/' || m.action_name
|
|
81
|
+
FROM pipeline_step_manifests m WHERE ${deployedMatch}
|
|
82
|
+
UNION ALL
|
|
83
|
+
SELECT e.pipeline_id, e.org_id, 'exposure', NULL
|
|
84
|
+
FROM plugin_vuln_exposure e WHERE ${exposureMatch} AND e.source = 'deployed' AND e.fixed_at IS NULL
|
|
85
|
+
) x
|
|
86
|
+
LEFT JOIN pipelines p ON p.id::text = x.pipeline_id
|
|
87
|
+
GROUP BY x.pipeline_id, x.org_id, x.source, p.pipeline_name, p.id, p.deleted_at
|
|
88
|
+
ORDER BY x.org_id, x.pipeline_id, x.source
|
|
89
|
+
`));
|
|
90
|
+
return rows.map((r) => ({
|
|
91
|
+
pipelineId: r.pipeline_id,
|
|
92
|
+
pipelineName: r.pipeline_name ?? null,
|
|
93
|
+
orgId: r.org_id,
|
|
94
|
+
source: r.source,
|
|
95
|
+
pipelineDeleted: r.deleted === true,
|
|
96
|
+
steps: r.steps ?? [],
|
|
97
|
+
}));
|
|
98
|
+
}
|
|
99
|
+
/** Distinct pipelines among `refs` (a pipeline both declared and deployed counts once). */
|
|
100
|
+
export function distinctPipelines(refs) {
|
|
101
|
+
const byId = new Map();
|
|
102
|
+
for (const r of refs) {
|
|
103
|
+
const e = byId.get(r.pipelineId) ?? { pipelineId: r.pipelineId, pipelineName: r.pipelineName, orgId: r.orgId, sources: [], pipelineDeleted: r.pipelineDeleted, steps: [] };
|
|
104
|
+
if (!e.sources.includes(r.source))
|
|
105
|
+
e.sources.push(r.source);
|
|
106
|
+
e.steps = [...new Set([...e.steps, ...r.steps])];
|
|
107
|
+
byId.set(r.pipelineId, e);
|
|
108
|
+
}
|
|
109
|
+
return [...byId.values()];
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* The image digests an org's namespace still needs: every `plugins` row's
|
|
113
|
+
* digest (active, inactive or soft-deleted — a tombstone is restorable until
|
|
114
|
+
* purged, and the purge itself is guarded) plus every digest a pipeline of the
|
|
115
|
+
* org or its teams declares, runs or has an open deployed exposure on. What the
|
|
116
|
+
* image registry's age GC consults before deleting anything in `org-<id>/*`.
|
|
117
|
+
* Elevated read.
|
|
118
|
+
*/
|
|
119
|
+
export async function orgImageDigestsInUse(orgId) {
|
|
120
|
+
const org = orgId.toLowerCase();
|
|
121
|
+
const rows = await withTenantTx((tx) => executeRows(tx, sql `
|
|
122
|
+
SELECT DISTINCT d FROM (
|
|
123
|
+
SELECT image_digest AS d FROM plugins WHERE lower(org_id) = ${org} AND image_digest IS NOT NULL
|
|
124
|
+
UNION SELECT r.resolved_digest FROM pipeline_plugin_resolution r
|
|
125
|
+
WHERE r.resolved_digest IS NOT NULL AND (lower(r.org_id) = ${org} OR lower(r.root_org_id) = ${org})
|
|
126
|
+
UNION SELECT m.image_digest FROM pipeline_step_manifests m
|
|
127
|
+
WHERE m.image_digest IS NOT NULL AND m.image_digest IN (SELECT image_digest FROM plugins WHERE lower(org_id) = ${org} AND image_digest IS NOT NULL)
|
|
128
|
+
UNION SELECT m.image_digest FROM pipeline_step_manifests m WHERE m.image_digest IS NOT NULL AND lower(m.org_id) = ${org}
|
|
129
|
+
UNION SELECT e.image_digest FROM plugin_vuln_exposure e
|
|
130
|
+
WHERE e.image_digest IS NOT NULL AND e.source = 'deployed' AND e.fixed_at IS NULL AND lower(e.org_id) = ${org}
|
|
131
|
+
) x WHERE d IS NOT NULL
|
|
132
|
+
`));
|
|
133
|
+
return rows.map((r) => r.d);
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi1yZWZlcmVuY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwaS92ZXJzaW9uLXJlZmVyZW5jZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFBRSxHQUFHLEVBQVksTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQXdCdEQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxJQUEwRDtJQUNuRyxPQUFPLEdBQUcsQ0FBQTtPQUNMLElBQUksQ0FBQyxNQUFNOytFQUM2RCxJQUFJLENBQUMsTUFBTTs7OENBRTVDLElBQUksQ0FBQyxNQUFNOytFQUNzQixJQUFJLENBQUMsTUFBTTtVQUNoRixJQUFJLENBQUMsTUFBTTs4RUFDeUQsSUFBSSxDQUFDLElBQUksMkJBQTJCLElBQUksQ0FBQyxPQUFPOzZFQUNqRCxJQUFJLENBQUMsS0FBSzs7MENBRTdDLElBQUksQ0FBQyxJQUFJLDZCQUE2QixJQUFJLENBQUMsT0FBTzttREFDekMsSUFBSSxDQUFDLEtBQUsscUNBQXFDLElBQUksQ0FBQyxLQUFLO0lBQ3hHLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHFCQUFxQixDQUFDLE1BQThCO0lBQ3hFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDO0lBQzFDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDO0lBQ3ZELE1BQU0sYUFBYSxHQUFHLE1BQU07UUFDMUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQSx1QkFBdUIsTUFBTSxFQUFFO1FBQ3BDLENBQUMsQ0FBQyxHQUFHLENBQUEsbUJBQW1CLE1BQU0sQ0FBQyxVQUFVLDZCQUE2QixNQUFNLENBQUMsYUFBYTtnQkFDOUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFBLHdCQUF3QixNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQSxxREFBcUQsS0FBSyw4QkFBOEIsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUN2TCxNQUFNLGFBQWEsR0FBRyxNQUFNO1FBQzFCLENBQUMsQ0FBQyxHQUFHLENBQUEsb0JBQW9CLE1BQU0sRUFBRTtRQUNqQyxDQUFDLENBQUMsR0FBRyxDQUFBLG1CQUFtQixNQUFNLENBQUMsVUFBVSwyQkFBMkIsTUFBTSxDQUFDLGFBQWE7Z0JBQzVFLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQSx3QkFBd0IsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUEsb0RBQW9ELEtBQUssRUFBRSxFQUFFLENBQUM7SUFDbEosTUFBTSxhQUFhLEdBQUcsTUFBTTtRQUMxQixDQUFDLENBQUMsR0FBRyxDQUFBLG9CQUFvQixNQUFNLEVBQUU7UUFDakMsQ0FBQyxDQUFDLEdBQUcsQ0FBQSxtQkFBbUIsTUFBTSxDQUFDLFVBQVUsMkJBQTJCLE1BQU0sQ0FBQyxhQUFhO2dCQUM1RSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUEsd0JBQXdCLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFBLG9EQUFvRCxLQUFLLEVBQUUsRUFBRSxDQUFDO0lBQ2xKLE1BQU0sSUFBSSxHQUFHLE1BQU0sWUFBWSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQXNKLEVBQUUsRUFBRSxHQUFHLENBQUE7Ozs7Ozs7O2lCQVFqTSxhQUFhOzs7aURBR21CLGFBQWE7Ozs4Q0FHaEIsYUFBYTs7Ozs7R0FLeEQsQ0FBQyxDQUFDLENBQUM7SUFDSixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxXQUFXO1FBQ3pCLFlBQVksRUFBRSxDQUFDLENBQUMsYUFBYSxJQUFJLElBQUk7UUFDckMsS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNO1FBQ2YsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNO1FBQ2hCLGVBQWUsRUFBRSxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUk7UUFDbkMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtLQUNyQixDQUFDLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRCwyRkFBMkY7QUFDM0YsTUFBTSxVQUFVLGlCQUFpQixDQUFDLElBQWlDO0lBQ2pFLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUE0SSxDQUFDO0lBQ2pLLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDckIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUMzSyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDRCxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUM1QixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsb0JBQW9CLENBQUMsS0FBYTtJQUN0RCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDaEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxZQUFZLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBZ0IsRUFBRSxFQUFFLEdBQUcsQ0FBQTs7b0VBRVIsR0FBRzs7MkVBRUksR0FBRyw4QkFBOEIsR0FBRzs7K0hBRWdCLEdBQUc7MEhBQ1IsR0FBRzs7d0hBRUwsR0FBRzs7R0FFeEgsQ0FBQyxDQUFDLENBQUM7SUFDSixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogV2hpY2ggcGlwZWxpbmVzIHN0aWxsIFJFRkVSRU5DRSBhIHBsdWdpbiB2ZXJzaW9uIG9yIGltYWdlIOKAlCB0aGUgb25lIHJ1bGUgZXZlcnlcbiAqIHJlbW92YWwgcGF0aCBhc2tzIGJlZm9yZSBpdCBkZWxldGVzIGFueXRoaW5nOiBhbiBvcmcgcGx1Z2luIGRlbGV0ZSAoZm9yY2VkIG9yXG4gKiBub3QpLCBhIGJ1bGsgZGVsZXRlLCBhIHRvbWJzdG9uZSBwdXJnZSAobWFudWFsIG9yIHRoZSByZXRlbnRpb24gc3dlZXApLCB0aGVcbiAqIGltYWdlIHJlZ2lzdHJ5J3MgYWdlIEdDLCB0aGUgbGlzdGluZyBpbWFnZSBHQy5cbiAqXG4gKiBUSEUgUlVMRTogYSB2ZXJzaW9uIChvciBpdHMgaW1hZ2UpIHRoYXQgYW55IHBpcGVsaW5lIHJlZmVyZW5jZXMgY2Fubm90IGJlXG4gKiBkZWxldGVkIHVudGlsIG5vIHBpcGVsaW5lIGRvZXMg4oCUIHdoYXRldmVyIGl0cyB2dWxuZXJhYmlsaXR5IHN0YXRlLiBBXG4gKiB2dWxuZXJhYmxlIGltYWdlIGlzIHRoZSBXT1JTVCB0aGluZyB0byBkZWxldGUgb3V0IGZyb20gdW5kZXIgYSBwaXBlbGluZTogdGhlXG4gKiBuZXh0IHJ1biBmYWlscyB0byBwdWxsLCBhbmQgdGhlIG93bmVycyBsZWFybiBhYm91dCB0aGUgQ1ZFIGZyb20gYW4gb3V0YWdlLlxuICogVnVsbmVyYWJpbGl0eSBjb25zZXF1ZW5jZXMgYXJlIGdyYWRlZCB3YXJuaW5ncyBhbmQgbm90aWZpY2F0aW9ucywgbmV2ZXIgcmVtb3ZhbC5cbiAqXG4gKiBBIHJlZmVyZW5jZSBpcyBhbnkgb2Y6XG4gKiAgLSBgZGVjbGFyZWRgIOKAlCBhIExJVkUgcGlwZWxpbmUncyBjb25maWcgcmVzb2x2ZXMgdG8gaXQgKGBwaXBlbGluZV9wbHVnaW5fcmVzb2x1dGlvbmApO1xuICogIC0gYGRlcGxveWVkYCDigJQgYSBwaXBlbGluZSdzIGxhc3QgZGVwbG95IHJlY29yZGVkIGl0IChgcGlwZWxpbmVfc3RlcF9tYW5pZmVzdHNgKSxcbiAqICAgIElOQ0xVRElORyBhIHNvZnQtZGVsZXRlZCBwaXBlbGluZTogaXRzIENvZGVQaXBlbGluZSBzdGlsbCBydW5zIHRoZSBpbWFnZTtcbiAqICAtIGBleHBvc3VyZWAg4oCUIGFuIG9wZW4gREVQTE9ZRUQgZXhwb3N1cmUgc3RpbGwgbmFtZXMgaXQgKHRoZSBzYW1lIFwic3RpbGwgcnVuc1xuICogICAgaXRcIiBmYWN0LCBrZXB0IHdoZW4gYSBtYW5pZmVzdCBpcyBnb25lKS5cbiAqXG4gKiBNYXRjaGVkIGJ5IGltYWdlIGRpZ2VzdCB3aGVuIHRoZSB2ZXJzaW9uIGhhcyBvbmUgKGEgdGVhbSBydW5uaW5nIGl0cyBwYXJlbnQnc1xuICogcGx1Z2luLCBvciBhbm90aGVyIG9yZydzIGluc3RhbGwsIHBpbnMgdGhlIHNhbWUgZGlnZXN0KSwgZWxzZSBieSBuYW1lICtcbiAqIHZlcnNpb24gd2l0aGluIHRoZSBvd25lciBvcmcgYW5kIGl0cyB0ZWFtcy5cbiAqL1xuXG5pbXBvcnQgeyBzcWwsIHR5cGUgU1FMIH0gZnJvbSAnZHJpenpsZS1vcm0nO1xuaW1wb3J0IHsgZXhlY3V0ZVJvd3MgfSBmcm9tICcuLi9kYXRhYmFzZS9wZy1yZXN1bHQuanMnO1xuaW1wb3J0IHsgd2l0aFRlbmFudFR4IH0gZnJvbSAnLi4vZGF0YWJhc2UvdGVuYW5jeS5qcyc7XG5cbi8qKiBBIHZlcnNpb24gLyBpbWFnZSB3aG9zZSByZWZlcmVuY2VzIGFyZSB3YW50ZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcnNpb25SZWZlcmVuY2VUYXJnZXQge1xuICBwbHVnaW5OYW1lOiBzdHJpbmc7XG4gIHBsdWdpblZlcnNpb246IHN0cmluZztcbiAgaW1hZ2VEaWdlc3Q/OiBzdHJpbmcgfCBudWxsO1xuICAvKiogVGhlIG93bmluZyBvcmcgb2YgYW4gb3JnIHBsdWdpbiAoaXRzIHRlYW1zIGNvdW50IHRvbyk7IG9taXR0ZWQgZm9yIGEgbGlzdGluZyB2ZXJzaW9uLiAqL1xuICBvd25lck9yZ0lkPzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFRoZSBsaXN0aW5nJ3MgcHVibGlzaGVyIGhhbmRsZSAoYSBsaXN0aW5nIHZlcnNpb24pOyBudWxsL29taXR0ZWQgZm9yIGFuIG9yZyBwbHVnaW4uICovXG4gIHB1Ymxpc2hlcj86IHN0cmluZyB8IG51bGw7XG59XG5cbi8qKiBPbmUgcGlwZWxpbmUgcmVmZXJlbmNpbmcgYSB2ZXJzaW9uLiAqL1xuZXhwb3J0IGludGVyZmFjZSBWZXJzaW9uUmVmZXJlbmNlIHtcbiAgcGlwZWxpbmVJZDogc3RyaW5nO1xuICBwaXBlbGluZU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIG9yZ0lkOiBzdHJpbmc7XG4gIHNvdXJjZTogJ2RlY2xhcmVkJyB8ICdkZXBsb3llZCcgfCAnZXhwb3N1cmUnO1xuICAvKiogVGhlIHBpcGVsaW5lIGlzIHNvZnQtZGVsZXRlZCAoc3RpbGwgZGVwbG95ZWQ6IGl0cyBtYW5pZmVzdCBvciBleHBvc3VyZSByZW1haW5zKS4gKi9cbiAgcGlwZWxpbmVEZWxldGVkOiBib29sZWFuO1xuICBzdGVwczogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIFNRTCBwcmVkaWNhdGUgXCJzb21lIHBpcGVsaW5lIHJlZmVyZW5jZXMgdGhpcyByb3cncyBpbWFnZSAvIHZlcnNpb25cIiwgb3ZlclxuICogYSBgcGx1Z2luc2Atc2hhcGVkIHJvdydzIGNvbHVtbnMg4oCUIHRoZSBwdXJnZSBndWFyZCdzIGZvcm0gb2ZcbiAqIHtAbGluayBmaW5kVmVyc2lvblJlZmVyZW5jZXN9IChzYW1lIHRocmVlIHNvdXJjZXMsIHNhbWUgbWF0Y2hpbmcpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyc2lvblJlZmVyZW5jZWRQcmVkaWNhdGUoY29sczogeyBkaWdlc3Q6IFNRTDsgbmFtZTogU1FMOyB2ZXJzaW9uOiBTUUw7IG9yZ0lkOiBTUUwgfSk6IFNRTCB7XG4gIHJldHVybiBzcWxgKFxuICAgICgke2NvbHMuZGlnZXN0fSBJUyBOT1QgTlVMTCBBTkQgKFxuICAgICAgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIHBpcGVsaW5lX3N0ZXBfbWFuaWZlc3RzIG0gV0hFUkUgbS5pbWFnZV9kaWdlc3QgPSAke2NvbHMuZGlnZXN0fSlcbiAgICAgIE9SIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBwaXBlbGluZV9wbHVnaW5fcmVzb2x1dGlvbiByIEpPSU4gcGlwZWxpbmVzIHAgT04gcC5pZDo6dGV4dCA9IHIucGlwZWxpbmVfaWQgQU5EIHAuZGVsZXRlZF9hdCBJUyBOVUxMXG4gICAgICAgICAgICAgICAgICBXSEVSRSByLnJlc29sdmVkX2RpZ2VzdCA9ICR7Y29scy5kaWdlc3R9KVxuICAgICAgT1IgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIHBsdWdpbl92dWxuX2V4cG9zdXJlIGUgV0hFUkUgZS5pbWFnZV9kaWdlc3QgPSAke2NvbHMuZGlnZXN0fSBBTkQgZS5zb3VyY2UgPSAnZGVwbG95ZWQnIEFORCBlLmZpeGVkX2F0IElTIE5VTEwpKSlcbiAgICBPUiAoJHtjb2xzLmRpZ2VzdH0gSVMgTlVMTCBBTkQgKFxuICAgICAgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIHBpcGVsaW5lX3N0ZXBfbWFuaWZlc3RzIG0gV0hFUkUgbS5wbHVnaW5fbmFtZSA9ICR7Y29scy5uYW1lfSBBTkQgbS5wbHVnaW5fdmVyc2lvbiA9ICR7Y29scy52ZXJzaW9ufVxuICAgICAgICAgICAgICAgIEFORCBtLnBsdWdpbl9wdWJsaXNoZXIgSVMgTlVMTCBBTkQgbG93ZXIobS5vcmdfaWQpID0gbG93ZXIoJHtjb2xzLm9yZ0lkfSkpXG4gICAgICBPUiBFWElTVFMgKFNFTEVDVCAxIEZST00gcGlwZWxpbmVfcGx1Z2luX3Jlc29sdXRpb24gciBKT0lOIHBpcGVsaW5lcyBwIE9OIHAuaWQ6OnRleHQgPSByLnBpcGVsaW5lX2lkIEFORCBwLmRlbGV0ZWRfYXQgSVMgTlVMTFxuICAgICAgICAgICAgICAgICAgV0hFUkUgci5wbHVnaW5fbmFtZSA9ICR7Y29scy5uYW1lfSBBTkQgci5yZXNvbHZlZF92ZXJzaW9uID0gJHtjb2xzLnZlcnNpb259IEFORCByLnBsdWdpbl9wdWJsaXNoZXIgSVMgTlVMTFxuICAgICAgICAgICAgICAgICAgICBBTkQgKGxvd2VyKHIub3JnX2lkKSA9IGxvd2VyKCR7Y29scy5vcmdJZH0pIE9SIGxvd2VyKHIucm9vdF9vcmdfaWQpID0gbG93ZXIoJHtjb2xzLm9yZ0lkfSkpKSkpXG4gIClgO1xufVxuXG4vKipcbiAqIEV2ZXJ5IHBpcGVsaW5lIHJlZmVyZW5jaW5nIGB0YXJnZXRgIChzZWUgdGhlIG1vZHVsZSBkb2MpLCBhY3Jvc3Mgb3JncyDigJQgc28gaXRcbiAqIG11c3QgcnVuIHdpdGggYSBzY29wZSB0aGF0IGNhbiByZWFkIGV2ZXJ5IG9yZydzIHJvd3MgKGVsZXZhdGVkKS4gVGhlIHJlc3VsdFxuICogbmFtZXMgb3RoZXIgb3JncycgcGlwZWxpbmVzOyBjYWxsZXJzIHNob3cgdGhlIE9XTkVSIG9ubHkgY291bnRzIGFuZCBpdHMgb3duXG4gKiBvcmcncyBwaXBlbGluZXMsIGFuZCBub3RpZnkgZWFjaCByZWZlcmVuY2luZyBvcmcgYWJvdXQgaXRzIG93bi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbmRWZXJzaW9uUmVmZXJlbmNlcyh0YXJnZXQ6IFZlcnNpb25SZWZlcmVuY2VUYXJnZXQpOiBQcm9taXNlPFZlcnNpb25SZWZlcmVuY2VbXT4ge1xuICBjb25zdCBkaWdlc3QgPSB0YXJnZXQuaW1hZ2VEaWdlc3QgPz8gbnVsbDtcbiAgY29uc3Qgb3duZXIgPSB0YXJnZXQub3duZXJPcmdJZD8udG9Mb3dlckNhc2UoKSA/PyBudWxsO1xuICBjb25zdCBkZWNsYXJlZE1hdGNoID0gZGlnZXN0XG4gICAgPyBzcWxgci5yZXNvbHZlZF9kaWdlc3QgPSAke2RpZ2VzdH1gXG4gICAgOiBzcWxgci5wbHVnaW5fbmFtZSA9ICR7dGFyZ2V0LnBsdWdpbk5hbWV9IEFORCByLnJlc29sdmVkX3ZlcnNpb24gPSAke3RhcmdldC5wbHVnaW5WZXJzaW9ufVxuICAgICAgICAgIEFORCAke3RhcmdldC5wdWJsaXNoZXIgPyBzcWxgci5wbHVnaW5fcHVibGlzaGVyID0gJHt0YXJnZXQucHVibGlzaGVyfWAgOiBzcWxgci5wbHVnaW5fcHVibGlzaGVyIElTIE5VTEwgQU5EIChsb3dlcihyLm9yZ19pZCkgPSAke293bmVyfSBPUiBsb3dlcihyLnJvb3Rfb3JnX2lkKSA9ICR7b3duZXJ9KWB9YDtcbiAgY29uc3QgZGVwbG95ZWRNYXRjaCA9IGRpZ2VzdFxuICAgID8gc3FsYG0uaW1hZ2VfZGlnZXN0ID0gJHtkaWdlc3R9YFxuICAgIDogc3FsYG0ucGx1Z2luX25hbWUgPSAke3RhcmdldC5wbHVnaW5OYW1lfSBBTkQgbS5wbHVnaW5fdmVyc2lvbiA9ICR7dGFyZ2V0LnBsdWdpblZlcnNpb259XG4gICAgICAgICAgQU5EICR7dGFyZ2V0LnB1Ymxpc2hlciA/IHNxbGBtLnBsdWdpbl9wdWJsaXNoZXIgPSAke3RhcmdldC5wdWJsaXNoZXJ9YCA6IHNxbGBtLnBsdWdpbl9wdWJsaXNoZXIgSVMgTlVMTCBBTkQgbG93ZXIobS5vcmdfaWQpID0gJHtvd25lcn1gfWA7XG4gIGNvbnN0IGV4cG9zdXJlTWF0Y2ggPSBkaWdlc3RcbiAgICA/IHNxbGBlLmltYWdlX2RpZ2VzdCA9ICR7ZGlnZXN0fWBcbiAgICA6IHNxbGBlLnBsdWdpbl9uYW1lID0gJHt0YXJnZXQucGx1Z2luTmFtZX0gQU5EIGUucGx1Z2luX3ZlcnNpb24gPSAke3RhcmdldC5wbHVnaW5WZXJzaW9ufVxuICAgICAgICAgIEFORCAke3RhcmdldC5wdWJsaXNoZXIgPyBzcWxgZS5wbHVnaW5fcHVibGlzaGVyID0gJHt0YXJnZXQucHVibGlzaGVyfWAgOiBzcWxgZS5wbHVnaW5fcHVibGlzaGVyIElTIE5VTEwgQU5EIGxvd2VyKGUub3JnX2lkKSA9ICR7b3duZXJ9YH1gO1xuICBjb25zdCByb3dzID0gYXdhaXQgd2l0aFRlbmFudFR4KCh0eCkgPT4gZXhlY3V0ZVJvd3M8eyBwaXBlbGluZV9pZDogc3RyaW5nOyBvcmdfaWQ6IHN0cmluZzsgc291cmNlOiBWZXJzaW9uUmVmZXJlbmNlWydzb3VyY2UnXTsgcGlwZWxpbmVfbmFtZTogc3RyaW5nIHwgbnVsbDsgZGVsZXRlZDogYm9vbGVhbjsgc3RlcHM6IHN0cmluZ1tdIHwgbnVsbCB9Pih0eCwgc3FsYFxuICAgIFNFTEVDVCB4LnBpcGVsaW5lX2lkLCB4Lm9yZ19pZCwgeC5zb3VyY2UsIHAucGlwZWxpbmVfbmFtZSwgKHAuaWQgSVMgTlVMTCBPUiBwLmRlbGV0ZWRfYXQgSVMgTk9UIE5VTEwpIEFTIGRlbGV0ZWQsXG4gICAgICAgICAgIGFycmF5X2FnZyhESVNUSU5DVCB4LnN0ZXApIEZJTFRFUiAoV0hFUkUgeC5zdGVwIElTIE5PVCBOVUxMKSBBUyBzdGVwc1xuICAgICAgRlJPTSAoXG4gICAgICAgIFNFTEVDVCByLnBpcGVsaW5lX2lkLCByLm9yZ19pZCwgJ2RlY2xhcmVkJyBBUyBzb3VyY2UsXG4gICAgICAgICAgICAgICBDQVNFIFdIRU4gci5zdGFnZV9uYW1lID0gJ3N5bnRoJyBBTkQgci5zdGVwX25hbWUgPSAnc3ludGgnIFRIRU4gJ3N5bnRoJyBFTFNFIHIuc3RhZ2VfbmFtZSB8fCAnLycgfHwgci5zdGVwX25hbWUgRU5EIEFTIHN0ZXBcbiAgICAgICAgICBGUk9NIHBpcGVsaW5lX3BsdWdpbl9yZXNvbHV0aW9uIHJcbiAgICAgICAgICBKT0lOIHBpcGVsaW5lcyBscCBPTiBscC5pZDo6dGV4dCA9IHIucGlwZWxpbmVfaWQgQU5EIGxwLmRlbGV0ZWRfYXQgSVMgTlVMTFxuICAgICAgICAgV0hFUkUgJHtkZWNsYXJlZE1hdGNofVxuICAgICAgICBVTklPTiBBTExcbiAgICAgICAgU0VMRUNUIG0ucGlwZWxpbmVfaWQ6OnRleHQsIG0ub3JnX2lkLCAnZGVwbG95ZWQnLCBtLnN0YWdlX25hbWUgfHwgJy8nIHx8IG0uYWN0aW9uX25hbWVcbiAgICAgICAgICBGUk9NIHBpcGVsaW5lX3N0ZXBfbWFuaWZlc3RzIG0gV0hFUkUgJHtkZXBsb3llZE1hdGNofVxuICAgICAgICBVTklPTiBBTExcbiAgICAgICAgU0VMRUNUIGUucGlwZWxpbmVfaWQsIGUub3JnX2lkLCAnZXhwb3N1cmUnLCBOVUxMXG4gICAgICAgICAgRlJPTSBwbHVnaW5fdnVsbl9leHBvc3VyZSBlIFdIRVJFICR7ZXhwb3N1cmVNYXRjaH0gQU5EIGUuc291cmNlID0gJ2RlcGxveWVkJyBBTkQgZS5maXhlZF9hdCBJUyBOVUxMXG4gICAgICApIHhcbiAgICAgIExFRlQgSk9JTiBwaXBlbGluZXMgcCBPTiBwLmlkOjp0ZXh0ID0geC5waXBlbGluZV9pZFxuICAgICBHUk9VUCBCWSB4LnBpcGVsaW5lX2lkLCB4Lm9yZ19pZCwgeC5zb3VyY2UsIHAucGlwZWxpbmVfbmFtZSwgcC5pZCwgcC5kZWxldGVkX2F0XG4gICAgIE9SREVSIEJZIHgub3JnX2lkLCB4LnBpcGVsaW5lX2lkLCB4LnNvdXJjZVxuICBgKSk7XG4gIHJldHVybiByb3dzLm1hcCgocikgPT4gKHtcbiAgICBwaXBlbGluZUlkOiByLnBpcGVsaW5lX2lkLFxuICAgIHBpcGVsaW5lTmFtZTogci5waXBlbGluZV9uYW1lID8/IG51bGwsXG4gICAgb3JnSWQ6IHIub3JnX2lkLFxuICAgIHNvdXJjZTogci5zb3VyY2UsXG4gICAgcGlwZWxpbmVEZWxldGVkOiByLmRlbGV0ZWQgPT09IHRydWUsXG4gICAgc3RlcHM6IHIuc3RlcHMgPz8gW10sXG4gIH0pKTtcbn1cblxuLyoqIERpc3RpbmN0IHBpcGVsaW5lcyBhbW9uZyBgcmVmc2AgKGEgcGlwZWxpbmUgYm90aCBkZWNsYXJlZCBhbmQgZGVwbG95ZWQgY291bnRzIG9uY2UpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc3RpbmN0UGlwZWxpbmVzKHJlZnM6IHJlYWRvbmx5IFZlcnNpb25SZWZlcmVuY2VbXSk6IEFycmF5PHsgcGlwZWxpbmVJZDogc3RyaW5nOyBwaXBlbGluZU5hbWU6IHN0cmluZyB8IG51bGw7IG9yZ0lkOiBzdHJpbmc7IHNvdXJjZXM6IHN0cmluZ1tdOyBwaXBlbGluZURlbGV0ZWQ6IGJvb2xlYW47IHN0ZXBzOiBzdHJpbmdbXSB9PiB7XG4gIGNvbnN0IGJ5SWQgPSBuZXcgTWFwPHN0cmluZywgeyBwaXBlbGluZUlkOiBzdHJpbmc7IHBpcGVsaW5lTmFtZTogc3RyaW5nIHwgbnVsbDsgb3JnSWQ6IHN0cmluZzsgc291cmNlczogc3RyaW5nW107IHBpcGVsaW5lRGVsZXRlZDogYm9vbGVhbjsgc3RlcHM6IHN0cmluZ1tdIH0+KCk7XG4gIGZvciAoY29uc3QgciBvZiByZWZzKSB7XG4gICAgY29uc3QgZSA9IGJ5SWQuZ2V0KHIucGlwZWxpbmVJZCkgPz8geyBwaXBlbGluZUlkOiByLnBpcGVsaW5lSWQsIHBpcGVsaW5lTmFtZTogci5waXBlbGluZU5hbWUsIG9yZ0lkOiByLm9yZ0lkLCBzb3VyY2VzOiBbXSwgcGlwZWxpbmVEZWxldGVkOiByLnBpcGVsaW5lRGVsZXRlZCwgc3RlcHM6IFtdIH07XG4gICAgaWYgKCFlLnNvdXJjZXMuaW5jbHVkZXMoci5zb3VyY2UpKSBlLnNvdXJjZXMucHVzaChyLnNvdXJjZSk7XG4gICAgZS5zdGVwcyA9IFsuLi5uZXcgU2V0KFsuLi5lLnN0ZXBzLCAuLi5yLnN0ZXBzXSldO1xuICAgIGJ5SWQuc2V0KHIucGlwZWxpbmVJZCwgZSk7XG4gIH1cbiAgcmV0dXJuIFsuLi5ieUlkLnZhbHVlcygpXTtcbn1cblxuLyoqXG4gKiBUaGUgaW1hZ2UgZGlnZXN0cyBhbiBvcmcncyBuYW1lc3BhY2Ugc3RpbGwgbmVlZHM6IGV2ZXJ5IGBwbHVnaW5zYCByb3cnc1xuICogZGlnZXN0IChhY3RpdmUsIGluYWN0aXZlIG9yIHNvZnQtZGVsZXRlZCDigJQgYSB0b21ic3RvbmUgaXMgcmVzdG9yYWJsZSB1bnRpbFxuICogcHVyZ2VkLCBhbmQgdGhlIHB1cmdlIGl0c2VsZiBpcyBndWFyZGVkKSBwbHVzIGV2ZXJ5IGRpZ2VzdCBhIHBpcGVsaW5lIG9mIHRoZVxuICogb3JnIG9yIGl0cyB0ZWFtcyBkZWNsYXJlcywgcnVucyBvciBoYXMgYW4gb3BlbiBkZXBsb3llZCBleHBvc3VyZSBvbi4gV2hhdCB0aGVcbiAqIGltYWdlIHJlZ2lzdHJ5J3MgYWdlIEdDIGNvbnN1bHRzIGJlZm9yZSBkZWxldGluZyBhbnl0aGluZyBpbiBgb3JnLTxpZD4vKmAuXG4gKiBFbGV2YXRlZCByZWFkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3JnSW1hZ2VEaWdlc3RzSW5Vc2Uob3JnSWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3Qgb3JnID0gb3JnSWQudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qgcm93cyA9IGF3YWl0IHdpdGhUZW5hbnRUeCgodHgpID0+IGV4ZWN1dGVSb3dzPHsgZDogc3RyaW5nIH0+KHR4LCBzcWxgXG4gICAgU0VMRUNUIERJU1RJTkNUIGQgRlJPTSAoXG4gICAgICBTRUxFQ1QgaW1hZ2VfZGlnZXN0IEFTIGQgRlJPTSBwbHVnaW5zIFdIRVJFIGxvd2VyKG9yZ19pZCkgPSAke29yZ30gQU5EIGltYWdlX2RpZ2VzdCBJUyBOT1QgTlVMTFxuICAgICAgVU5JT04gU0VMRUNUIHIucmVzb2x2ZWRfZGlnZXN0IEZST00gcGlwZWxpbmVfcGx1Z2luX3Jlc29sdXRpb24gclxuICAgICAgICAgICAgICBXSEVSRSByLnJlc29sdmVkX2RpZ2VzdCBJUyBOT1QgTlVMTCBBTkQgKGxvd2VyKHIub3JnX2lkKSA9ICR7b3JnfSBPUiBsb3dlcihyLnJvb3Rfb3JnX2lkKSA9ICR7b3JnfSlcbiAgICAgIFVOSU9OIFNFTEVDVCBtLmltYWdlX2RpZ2VzdCBGUk9NIHBpcGVsaW5lX3N0ZXBfbWFuaWZlc3RzIG1cbiAgICAgICAgICAgICAgV0hFUkUgbS5pbWFnZV9kaWdlc3QgSVMgTk9UIE5VTEwgQU5EIG0uaW1hZ2VfZGlnZXN0IElOIChTRUxFQ1QgaW1hZ2VfZGlnZXN0IEZST00gcGx1Z2lucyBXSEVSRSBsb3dlcihvcmdfaWQpID0gJHtvcmd9IEFORCBpbWFnZV9kaWdlc3QgSVMgTk9UIE5VTEwpXG4gICAgICBVTklPTiBTRUxFQ1QgbS5pbWFnZV9kaWdlc3QgRlJPTSBwaXBlbGluZV9zdGVwX21hbmlmZXN0cyBtIFdIRVJFIG0uaW1hZ2VfZGlnZXN0IElTIE5PVCBOVUxMIEFORCBsb3dlcihtLm9yZ19pZCkgPSAke29yZ31cbiAgICAgIFVOSU9OIFNFTEVDVCBlLmltYWdlX2RpZ2VzdCBGUk9NIHBsdWdpbl92dWxuX2V4cG9zdXJlIGVcbiAgICAgICAgICAgICAgV0hFUkUgZS5pbWFnZV9kaWdlc3QgSVMgTk9UIE5VTEwgQU5EIGUuc291cmNlID0gJ2RlcGxveWVkJyBBTkQgZS5maXhlZF9hdCBJUyBOVUxMIEFORCBsb3dlcihlLm9yZ19pZCkgPSAke29yZ31cbiAgICApIHggV0hFUkUgZCBJUyBOT1QgTlVMTFxuICBgKSk7XG4gIHJldHVybiByb3dzLm1hcCgocikgPT4gci5kKTtcbn1cbiJdfQ==
|
|
@@ -117,9 +117,9 @@ export interface PluginFilter extends CommonFilter {
|
|
|
117
117
|
/** Exclude yanked versions (resolution without a version spec). Internal. */
|
|
118
118
|
readonly excludeYanked?: boolean;
|
|
119
119
|
/**
|
|
120
|
-
* Exclude versions the nightly rescan flagged (`scan_flagged_at` set) —
|
|
121
|
-
*
|
|
122
|
-
*
|
|
120
|
+
* Exclude versions the nightly rescan flagged (`scan_flagged_at` set) — the
|
|
121
|
+
* lookup's "newest unflagged version to move to" suggestion. Never applied to
|
|
122
|
+
* what a reference RESOLVES to: vulnerability state does not skip versions. Internal.
|
|
123
123
|
*/
|
|
124
124
|
readonly excludeScanFlagged?: boolean;
|
|
125
125
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// Copyright 2026 Pipeline Builder Contributors
|
|
2
2
|
// SPDX-License-Identifier: Apache-2.0
|
|
3
3
|
export {};
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZmlsdGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3F1ZXJ5LWZpbHRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFZpc2liaWxpdHkgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5cbi8qKlxuICogQmFzZSBmaWx0ZXIgaW50ZXJmYWNlIGNvbnRhaW5pbmcgY29tbW9uIGZpbHRlciBwcm9wZXJ0aWVzIHNoYXJlZCBhY3Jvc3MgYWxsIGVudGl0eSB0eXBlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZmlsdGVyOiBDb21tb25GaWx0ZXIgPSB7XG4gKiAgIGlkOiAnMTIzJyxcbiAqICAgb3JnSWQ6ICdteS1vcmcnLFxuICogICB2aXNpYmlsaXR5OiAncHVibGljJyxcbiAqICAgaXNEZWZhdWx0OiB0cnVlLFxuICogICBpc0FjdGl2ZTogdHJ1ZVxuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbkZpbHRlciB7XG4gIC8qKlxuICAgKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGVudGl0eVxuICAgKiBDYW4gYmUgYSBzaW5nbGUgSUQgb3IgYXJyYXkgb2YgSURzIGZvciBiYXRjaCBmaWx0ZXJpbmdcbiAgICovXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLy8gLS0tIFZpZXdlciBjb250ZXh0IChzZXJ2ZXItc2V0LCBORVZFUiBjbGllbnQtc3VwcGxpZWQpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBPbmx5IGVudGl0aWVzIHdob3NlIHZpc2liaWxpdHkgcHJlZGljYXRlIGhhcyBhIFBFUi1VU0VSIHJ1bmcgcmVhZCB0aGVzZSDigJRcbiAgLy8gcGlwZWxpbmUgdGVtcGxhdGVzIChgcHJpdmF0ZWAgaXMgYXV0aG9yLW9ubHkpIGFuZCBtZXNzYWdlcyAoYSBwZXItdXNlclxuICAvLyB0YXJnZXRlZCByb3cgaXMgdmlzaWJsZSBvbmx5IHRvIGl0cyB0YXJnZXQpLiBUaGVpciBzZXJ2aWNlcyBzdGFtcCB0aGVtIGZyb21cbiAgLy8gdGhlIHJlcXVlc3QncyBgVGVuYW50Q29udGV4dGAgdmlhIGB3aXRoVmlld2VyQ29udGV4dGAsIHNvIG5vIHJvdXRlIG9yIHF1ZXJ5XG4gIC8vIHN0cmluZyBjYW4gaW5qZWN0IHRoZW0uIEV2ZXJ5dGhpbmcgZWxzZSBpZ25vcmVzIHRoZW0uXG4gIC8vXG4gIC8vIEJvdGggZmFpbCBDTE9TRUQgd2hlbiBhYnNlbnQ6IG5vIHZpZXdlciBtZWFucyB0aGUgcGVyLXVzZXIgcnVuZyBtYXRjaGVzXG4gIC8vIE5PVEhJTkcsIG5ldmVyIGV2ZXJ5dGhpbmcuXG5cbiAgLyoqIENhbGxlcidzIHVzZXIgaWQsIG1hdGNoZWQgYWdhaW5zdCB0aGUgZW50aXR5J3MgcGVyLXVzZXIgY29sdW1uLiAqL1xuICByZWFkb25seSB2aWV3ZXJVc2VySWQ/OiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBjYWxsZXIgaXMgYSBwbGF0Zm9ybSBzdXBlci1hZG1pbiAoc2VlcyBldmVyeSBydW5nKS4gKi9cbiAgcmVhZG9ubHkgdmlld2VySXNTdXBlckFkbWluPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3JnYW5pemF0aW9uIGlkZW50aWZpZXIgdG8gZmlsdGVyIGVudGl0aWVzIGJ5IG9yZ2FuaXphdGlvblxuICAgKiBDYW4gYmUgYSBzaW5nbGUgb3JnIElEIG9yIGFycmF5IGZvciBtdWx0aS1vcmcgZmlsdGVyaW5nXG4gICAqL1xuICByZWFkb25seSBvcmdJZD86IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBOYXJyb3cgdG8gb25lIHJ1bmcgb2YgdGhlIHNoYXJlZCB0aHJlZS1ydW5nIHNoYXJpbmcgbGFkZGVyLiBBcHBsaWVkIFdJVEhJTlxuICAgKiB3aGF0IHRoZSBjYWxsZXIgY2FuIGFscmVhZHkgc2VlIOKAlCBuZXZlciB3aWRlbnMgaXQuXG4gICAqIEBzZWUgVmlzaWJpbGl0eVxuICAgKi9cbiAgcmVhZG9ubHkgdmlzaWJpbGl0eT86IFZpc2liaWxpdHkgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSBkZWZhdWx0IHN0YXR1c1xuICAgKiAtIHRydWU6IE9ubHkgZGVmYXVsdCBlbnRpdGllc1xuICAgKiAtIGZhbHNlOiBPbmx5IG5vbi1kZWZhdWx0IGVudGl0aWVzXG4gICAqIC0gdW5kZWZpbmVkOiBBbGwgZW50aXRpZXNcbiAgICovXG4gIHJlYWRvbmx5IGlzRGVmYXVsdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSBhY3RpdmUvaW5hY3RpdmUgc3RhdHVzXG4gICAqIC0gdHJ1ZTogT25seSBhY3RpdmUgZW50aXRpZXNcbiAgICogLSBmYWxzZTogT25seSBpbmFjdGl2ZSBlbnRpdGllc1xuICAgKiAtIHVuZGVmaW5lZDogQWxsIGVudGl0aWVzXG4gICAqL1xuICByZWFkb25seSBpc0FjdGl2ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiByZXN1bHRzIHRvIHJldHVyblxuICAgKiBAbWluaW11bSAxXG4gICAqIEBtYXhpbXVtIDEwMDBcbiAgICovXG4gIHJlYWRvbmx5IGxpbWl0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcmVzdWx0cyB0byBza2lwIChmb3IgcGFnaW5hdGlvbilcbiAgICogQG1pbmltdW0gMFxuICAgKi9cbiAgcmVhZG9ubHkgb2Zmc2V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTb3J0IGZpZWxkIGFuZCBkaXJlY3Rpb25cbiAgICogQGV4YW1wbGUgXCJuYW1lOmFzY1wiLCBcImNyZWF0ZWRBdDpkZXNjXCJcbiAgICovXG4gIHJlYWRvbmx5IHNvcnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSBjYXRhbG9nIG93bmVyIChkZXZlbG9wZXItcG9ydGFsIFwibXkgc2VydmljZXNcIiB2aWV3KS5cbiAgICogTWF0Y2hlcyB0aGUgZW50aXR5J3MgYG93bmVySWRgIGV4YWN0bHkgKGEgdXNlciBpZCBvciB0ZWFtIGlkKS5cbiAgICogT25seSBhcHBsaWVkIGJ5IGJ1aWxkZXJzIGZvciBlbnRpdGllcyB0aGF0IGNhcnJ5IGFuIG93bmVyIGNvbHVtblxuICAgKiAocGlwZWxpbmVzLCBwbHVnaW5zKTsgaWdub3JlZCBlbHNld2hlcmUuXG4gICAqL1xuICByZWFkb25seSBvd25lcklkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGaWx0ZXIgYnkgbGlmZWN5Y2xlIHN0YWdlIChleHBlcmltZW50YWwgfCBwcm9kdWN0aW9uIHwgZGVwcmVjYXRlZCkuXG4gICAqIE9ubHkgYXBwbGllZCBieSBidWlsZGVycyBmb3IgZW50aXRpZXMgdGhhdCBjYXJyeSBhIGxpZmVjeWNsZSBjb2x1bW4uXG4gICAqL1xuICByZWFkb25seSBsaWZlY3ljbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmlsdGVyIGludGVyZmFjZSBmb3IgcGx1Z2luLXNwZWNpZmljIHByb3BlcnRpZXMuXG4gKiBFeHRlbmRzIENvbW1vbkZpbHRlciB0byBpbmNsdWRlIHBsdWdpbi1yZWxhdGVkIGZpbHRlciBvcHRpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBmaWx0ZXI6IFBsdWdpbkZpbHRlciA9IHtcbiAqICAgbmFtZTogJ25vZGVqcy1idWlsZCcsXG4gKiAgIHZlcnNpb246ICcxLjAuMCcsXG4gKiAgIGlzQWN0aXZlOiB0cnVlXG4gKiB9O1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luRmlsdGVyIGV4dGVuZHMgQ29tbW9uRmlsdGVyIHtcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIHRvIGZpbHRlciBieVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSG93IGBuYW1lYCBtYXRjaGVzOiBgY29udGFpbnNgIChkZWZhdWx0IOKAlCBjYXNlLWluc2Vuc2l0aXZlIHN1YnN0cmluZywgZm9yXG4gICAqIGxpc3Qvc2VhcmNoKSBvciBgZXhhY3RgIChyZXNvbHV0aW9uIOKAlCB0aGUgbG9va3VwIHBhdGgpLiBJbnRlcm5hbDogbm90IGluXG4gICAqIHRoZSBwdWJsaWMgZmlsdGVyIHNjaGVtYS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWVNYXRjaD86ICdleGFjdCcgfCAnY29udGFpbnMnO1xuXG4gIC8qKlxuICAgKiBQdWJsaXNoZXIgaGFuZGxlIG9mIGFuIGluc3RhbGxlZCBsaXN0aW5nIHRvIHJlc29sdmUgdGhyb3VnaC5cbiAgICogTG9va3VwIG9ubHk6IGEgYHBsdWdpbnNgIHJvdyBxdWVyeSBpZ25vcmVzIGl0ICh0aGUgcmVzb2x2ZXIgcm91dGVzIGFcbiAgICogcXVhbGlmaWVkIHJlZmVyZW5jZSB0byB0aGUgbGlzdGluZywgbmV2ZXIgdG8gYW4gb3JnJ3Mgb3duIHJvd3MpLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGlzaGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQbHVnaW4gdmVyc2lvbiBzcGVjOiBleGFjdCAoYDEuMi4zYCksIGNhcmV0IChgXjEuMi4zYCksIHRpbGRlIChgfjEuMi4zYCksXG4gICAqIHBhcnRpYWwgKGAxYCwgYDEuMmAsIGAxLnhgKSBvciBgbGF0ZXN0YCDigJQgc2VlIHNlbXZlci1yYW5nZS50cy4gQSByYW5nZSBuZXZlclxuICAgKiBtYXRjaGVzIGEgeWFua2VkIHZlcnNpb24uXG4gICAqIEBleGFtcGxlIFwiMS4wLjBcIiwgXCJeMi4wLjBcIiwgXCJ+MS4yLjNcIiwgXCJsYXRlc3RcIlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcblxuICAvKiogRXhjbHVkZSB5YW5rZWQgdmVyc2lvbnMgKHJlc29sdXRpb24gd2l0aG91dCBhIHZlcnNpb24gc3BlYykuIEludGVybmFsLiAqL1xuICByZWFkb25seSBleGNsdWRlWWFua2VkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRXhjbHVkZSB2ZXJzaW9ucyB0aGUgbmlnaHRseSByZXNjYW4gZmxhZ2dlZCAoYHNjYW5fZmxhZ2dlZF9hdGAgc2V0KSDigJRcbiAgICogcmVzb2x1dGlvbiBvZiBhIHJhbmdlIC8gdGhlIGRlZmF1bHQgd2hpbGUgYFBMVUdJTl9CTE9DS19PTl9ORVdfQ1JJVElDQUxgXG4gICAqIGlzIG9uLiBJbnRlcm5hbC5cbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVTY2FuRmxhZ2dlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEtleXdvcmQgdG8gc2VhcmNoIHdpdGhpbiB0aGUga2V5d29yZHMgSlNPTkIgYXJyYXkgKGNhc2UtaW5zZW5zaXRpdmUgY29udGFpbnMpXG4gICAqL1xuICByZWFkb25seSBrZXl3b3JkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQbHVnaW4gY2F0ZWdvcnkgdG8gZmlsdGVyIGJ5XG4gICAqIEBleGFtcGxlIFwibGFuZ3VhZ2VcIiwgXCJzZWN1cml0eVwiLCBcInRlc3RpbmdcIlxuICAgKi9cbiAgcmVhZG9ubHkgY2F0ZWdvcnk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmlsdGVyIGludGVyZmFjZSBmb3IgcGlwZWxpbmUtc3BlY2lmaWMgcHJvcGVydGllcy5cbiAqIEV4dGVuZHMgQ29tbW9uRmlsdGVyIHRvIGluY2x1ZGUgcGlwZWxpbmUtcmVsYXRlZCBmaWx0ZXIgb3B0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZmlsdGVyOiBQaXBlbGluZUZpbHRlciA9IHtcbiAqICAgcHJvamVjdDogJ215LWFwcCcsXG4gKiAgIG9yZ2FuaXphdGlvbjogJ215LW9yZycsXG4gKiAgIHBpcGVsaW5lTmFtZTogJ215LXBpcGVsaW5lJyxcbiAqICAgaXNBY3RpdmU6IHRydWVcbiAqIH07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZUZpbHRlciBleHRlbmRzIENvbW1vbkZpbHRlciB7XG4gIC8qKlxuICAgKiBQcm9qZWN0IG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwaXBlbGluZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdD86IHN0cmluZztcblxuICAvKipcbiAgICogT3JnYW5pemF0aW9uIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwaXBlbGluZVxuICAgKi9cbiAgcmVhZG9ubHkgb3JnYW5pemF0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQaXBlbGluZSBuYW1lIHRvIGZpbHRlciBieVxuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBLZXl3b3JkIHRvIHNlYXJjaCB3aXRoaW4gdGhlIGtleXdvcmRzIEpTT05CIGFycmF5IChjYXNlLWluc2Vuc2l0aXZlIGNvbnRhaW5zKVxuICAgKi9cbiAgcmVhZG9ubHkga2V5d29yZD86IHN0cmluZztcbn1cblxuLyoqIEZpbHRlciBpbnRlcmZhY2UgZm9yIHBpcGVsaW5lLXRlbXBsYXRlIHF1ZXJpZXMgKGdvbGRlbi1wYXRoIGNhdGFsb2cpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVRlbXBsYXRlRmlsdGVyIGV4dGVuZHMgQ29tbW9uRmlsdGVyIHtcbiAgLyoqIFRlbXBsYXRlIG5hbWUgKGNhc2UtaW5zZW5zaXRpdmUgY29udGFpbnMpLiAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICAvKiogQ2F0ZWdvcnkgdG8gZmlsdGVyIGJ5IChlLmcuICdsYW5ndWFnZScsICdnZW5lcmFsJykuICovXG4gIHJlYWRvbmx5IGNhdGVnb3J5Pzogc3RyaW5nO1xuICAvKiogS2V5d29yZCBzZWFyY2ggd2l0aGluIHRoZSBrZXl3b3JkcyBKU09OQiBhcnJheS4gKi9cbiAgcmVhZG9ubHkga2V5d29yZD86IHN0cmluZztcbiAgLy8gU2hhcmluZyBydW5nICsgdmlld2VyIGNvbnRleHQgYXJlIGluaGVyaXRlZCBmcm9tIENvbW1vbkZpbHRlci5cbn1cblxuLyoqXG4gKiBGaWx0ZXIgaW50ZXJmYWNlIGZvciBtZXNzYWdlLXNwZWNpZmljIHByb3BlcnRpZXMuXG4gKiBFeHRlbmRzIENvbW1vbkZpbHRlciB0byBpbmNsdWRlIG1lc3NhZ2UtcmVsYXRlZCBmaWx0ZXIgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlRmlsdGVyIGV4dGVuZHMgQ29tbW9uRmlsdGVyIHtcbiAgLyoqXG4gICAqIFRocmVhZCBJRCB0byBmaWx0ZXIgYnkgKGZvciBmZXRjaGluZyB0aHJlYWQgcmVwbGllcykuXG4gICAqIFBhc3MgYG51bGxgIHRvIGZpbHRlciBmb3Igcm9vdCBtZXNzYWdlcyBvbmx5ICh0aHJlYWRJZCBJUyBOVUxMKS5cbiAgICovXG4gIHJlYWRvbmx5IHRocmVhZElkPzogc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogUmVjaXBpZW50IG9yZ2FuaXphdGlvbiBJRCB0byBmaWx0ZXIgYnlcbiAgICogVXNlICcqJyBmb3IgYnJvYWRjYXN0IGFubm91bmNlbWVudHNcbiAgICovXG4gIHJlYWRvbmx5IHJlY2lwaWVudE9yZ0lkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWNpcGllbnQgdXNlciBJRCB0byBmaWx0ZXIgYnkgKHBlci11c2VyIHRhcmdldGluZyB3aXRoaW4gdGhlIHJlY2lwaWVudFxuICAgKiBvcmcpLiBQYXNzIGBudWxsYCB0byBtYXRjaCBvcmctd2lkZSBtZXNzYWdlcyBvbmx5IChyZWNpcGllbnRfdXNlcl9pZCBJU1xuICAgKiBOVUxMKS4gUmFyZWx5IHNldCBkaXJlY3RseSBieSBjYWxsZXJzIOKAlCBzZWUgYHZpZXdlclVzZXJJZGAgZm9yIHRoZVxuICAgKiB2aXNpYmlsaXR5LXNjb3BpbmcgdmFyaWFudC5cbiAgICovXG4gIHJlYWRvbmx5IHJlY2lwaWVudFVzZXJJZD86IHN0cmluZyB8IG51bGw7XG5cbiAgLy8gTk9URTogdGhlIFZJRVdFUidzIHVzZXIgaWQgKGB2aWV3ZXJVc2VySWRgKSBpcyBpbmhlcml0ZWQgZnJvbSBDb21tb25GaWx0ZXIuXG4gIC8vIEZvciBtZXNzYWdlcyBpdCBpcyBOT1QgYSBjb2x1bW4gZmlsdGVyOiB3aGVuIHByZXNlbnQsIHRoZSByZWNpcGllbnQtc2lkZVxuICAvLyBicmFuY2ggaW4gYGJ1aWxkTWVzc2FnZUNvbmRpdGlvbnNgIHdpZGVucyB0byBpbmNsdWRlIHJvd3MgdGFyZ2V0ZWQgYXQgdGhpc1xuICAvLyB1c2VyIChyZWNpcGllbnRfdXNlcl9pZCA9IHZpZXdlclVzZXJJZCkgQUxPTkdTSURFIG9yZy13aWRlIG9uZXNcbiAgLy8gKHJlY2lwaWVudF91c2VyX2lkIElTIE5VTEwpLiBXaGVuIGFic2VudCwgb25seSBvcmctd2lkZSByZWNpcGllbnQgcm93cyBhcmVcbiAgLy8gdmlzaWJsZSwgc28gYSB1c2VyLXRhcmdldGVkIG1lc3NhZ2Ugc3RheXMgcHJpdmF0ZSB0byBpdHMgdGFyZ2V0LCB0aGUgc2VuZGVyLFxuICAvLyBhbmQgdGhlIHN5c3RlbSBvcmcuIE1lc3NhZ2VTZXJ2aWNlIHN0YW1wcyBpdCBmcm9tIHRoZSB0ZW5hbnQgY29udGV4dC5cblxuICAvKipcbiAgICogTWVzc2FnZSB0eXBlIGZpbHRlclxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZVR5cGU/OiAnYW5ub3VuY2VtZW50JyB8ICdjb252ZXJzYXRpb24nO1xuXG4gIC8qKlxuICAgKiBGaWx0ZXIgYnkgcHJpb3JpdHkgbGV2ZWxcbiAgICovXG4gIHJlYWRvbmx5IHByaW9yaXR5PzogJ25vcm1hbCcgfCAnaGlnaCcgfCAndXJnZW50JztcblxuICAvKipcbiAgICogQ2hhbm5lbC9pbmJveC1idWNrZXQgZmlsdGVyIChlLmcuICdzdXBwb3J0JywgJ2hlbHAnKS4gTWF0Y2hlcyByb3dzXG4gICAqIGV4YWN0bHk7IHBhc3MgbnVsbCB0byBtYXRjaCBjaGFubmVsIElTIE5VTEwgKG9yZy10by1vcmcgbWVzc2FnZXMpLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbm5lbD86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSByZWFkIHN0YXRlIGZvciB0aGUgcmVxdWVzdGluZyBvcmcuXG4gICAqIEltcGxlbWVudGVkIGFzIGEgSlNPTkIga2V5LWV4aXN0ZW5jZSBjaGVjayBhZ2FpbnN0IGBtZXNzYWdlcy5yZWFkX2J5YFxuICAgKiAoYSBgeyBbb3JnSWRdOiBpc29UaW1lc3RhbXAgfWAgbWFwKSwgdXNpbmcgdGhlIG9yZ0lkIHBhc3NlZCB0b1xuICAgKiBgYnVpbGRNZXNzYWdlQ29uZGl0aW9uc2AuXG4gICAqIC0gdHJ1ZSAg4oaSIG9ubHkgbWVzc2FnZXMgdGhlIG9yZyBoYXMgcmVhZCAob3JnSWQga2V5IGV4aXN0cyBpbiByZWFkX2J5KVxuICAgKiAtIGZhbHNlIOKGkiBvbmx5IG1lc3NhZ2VzIHRoZSBvcmcgaGFzIE5PVCByZWFkXG4gICAqIC0gdW5kZWZpbmVkIOKGkiBubyByZWFkLXN0YXRlIGZpbHRlclxuICAgKi9cbiAgcmVhZG9ubHkgaXNSZWFkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRnJlZS10ZXh0IGluYm94IHNlYXJjaC4gQ2FzZS1pbnNlbnNpdGl2ZSBzdWJzdHJpbmcgbWF0Y2ggYWdhaW5zdCB0aGVcbiAgICogbWVzc2FnZSBgc3ViamVjdGAgT1IgYGNvbnRlbnRgIChMSUtFIHdpbGRjYXJkcyBpbiB0aGUgdGVybSBhcmUgZXNjYXBlZCwgc28gYVxuICAgKiBsaXRlcmFsIGAlYC9gX2AgbWF0Y2hlcyBpdHNlbGYpLiBBcHBsaWVkIG9uIHRvcCBvZiB0aGUgdmlzaWJpbGl0eSBzY29wZSwgc29cbiAgICogaXQgbmV2ZXIgd2lkZW5zIHdoYXQgdGhlIGNhbGxlciBjYW4gc2VlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VhcmNoPzogc3RyaW5nO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb21wbGlhbmNlIEZpbHRlcnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBGaWx0ZXIgZm9yIGNvbXBsaWFuY2UgcG9saWNpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxpYW5jZVBvbGljeUZpbHRlciBleHRlbmRzIENvbW1vbkZpbHRlciB7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlzVGVtcGxhdGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEZpbHRlciBmb3IgY29tcGxpYW5jZSBydWxlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wbGlhbmNlUnVsZUZpbHRlciBleHRlbmRzIENvbW1vbkZpbHRlciB7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBvbGljeUlkPzogc3RyaW5nO1xuICByZWFkb25seSB0YXJnZXQ/OiAncGx1Z2luJyB8ICdwaXBlbGluZSc7XG4gIHJlYWRvbmx5IGZpZWxkPzogc3RyaW5nO1xuICByZWFkb25seSBzZXZlcml0eT86ICd3YXJuaW5nJyB8ICdlcnJvcicgfCAnY3JpdGljYWwnO1xuICByZWFkb25seSBzY29wZT86ICdvcmcnIHwgJ3B1Ymxpc2hlZCc7XG4gIHJlYWRvbmx5IHRhZz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBGaWx0ZXIgZm9yIGNvbXBsaWFuY2UgZXhlbXB0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wbGlhbmNlRXhlbXB0aW9uRmlsdGVyIHtcbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJ1bGVJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgZW50aXR5VHlwZT86ICdwbHVnaW4nIHwgJ3BpcGVsaW5lJztcbiAgcmVhZG9ubHkgZW50aXR5SWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YXR1cz86ICdwZW5kaW5nJyB8ICdhcHByb3ZlZCcgfCAncmVqZWN0ZWQnIHwgJ2V4cGlyZWQnO1xuICByZWFkb25seSBsaW1pdD86IG51bWJlcjtcbiAgcmVhZG9ubHkgb2Zmc2V0PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEZpbHRlciBmb3IgY29tcGxpYW5jZSBhdWRpdCBsb2cgZW50cmllcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wbGlhbmNlQXVkaXRGaWx0ZXIge1xuICByZWFkb25seSBvcmdJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgdGFyZ2V0PzogJ3BsdWdpbicgfCAncGlwZWxpbmUnO1xuICByZWFkb25seSBhY3Rpb24/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc3VsdD86ICdwYXNzJyB8ICd3YXJuJyB8ICdibG9jayc7XG4gIHJlYWRvbmx5IHNjYW5JZD86IHN0cmluZztcbiAgcmVhZG9ubHkgZGF0ZUZyb20/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRhdGVUbz86IHN0cmluZztcbiAgcmVhZG9ubHkgbGltaXQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IG9mZnNldD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBGaWx0ZXIgZm9yIGNvbXBsaWFuY2Ugc2NhbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxpYW5jZVNjYW5GaWx0ZXIge1xuICByZWFkb25seSBvcmdJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgdGFyZ2V0PzogJ3BsdWdpbicgfCAncGlwZWxpbmUnIHwgJ2FsbCc7XG4gIHJlYWRvbmx5IHN0YXR1cz86ICdwZW5kaW5nJyB8ICdydW5uaW5nJyB8ICdjb21wbGV0ZWQnIHwgJ2ZhaWxlZCcgfCAnY2FuY2VsbGVkJztcbiAgcmVhZG9ubHkgdHJpZ2dlcmVkQnk/OiAnbWFudWFsJyB8ICdzY2hlZHVsZWQnIHwgJ3J1bGUtY2hhbmdlJyB8ICdydWxlLWRyeS1ydW4nO1xuICByZWFkb25seSBsaW1pdD86IG51bWJlcjtcbiAgcmVhZG9ubHkgb2Zmc2V0PzogbnVtYmVyO1xufVxuIl19
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktZmlsdGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL3F1ZXJ5LWZpbHRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgdHlwZSB7IFZpc2liaWxpdHkgfSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5cbi8qKlxuICogQmFzZSBmaWx0ZXIgaW50ZXJmYWNlIGNvbnRhaW5pbmcgY29tbW9uIGZpbHRlciBwcm9wZXJ0aWVzIHNoYXJlZCBhY3Jvc3MgYWxsIGVudGl0eSB0eXBlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZmlsdGVyOiBDb21tb25GaWx0ZXIgPSB7XG4gKiAgIGlkOiAnMTIzJyxcbiAqICAgb3JnSWQ6ICdteS1vcmcnLFxuICogICB2aXNpYmlsaXR5OiAncHVibGljJyxcbiAqICAgaXNEZWZhdWx0OiB0cnVlLFxuICogICBpc0FjdGl2ZTogdHJ1ZVxuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1vbkZpbHRlciB7XG4gIC8qKlxuICAgKiBVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGVudGl0eVxuICAgKiBDYW4gYmUgYSBzaW5nbGUgSUQgb3IgYXJyYXkgb2YgSURzIGZvciBiYXRjaCBmaWx0ZXJpbmdcbiAgICovXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLy8gLS0tIFZpZXdlciBjb250ZXh0IChzZXJ2ZXItc2V0LCBORVZFUiBjbGllbnQtc3VwcGxpZWQpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBPbmx5IGVudGl0aWVzIHdob3NlIHZpc2liaWxpdHkgcHJlZGljYXRlIGhhcyBhIFBFUi1VU0VSIHJ1bmcgcmVhZCB0aGVzZSDigJRcbiAgLy8gcGlwZWxpbmUgdGVtcGxhdGVzIChgcHJpdmF0ZWAgaXMgYXV0aG9yLW9ubHkpIGFuZCBtZXNzYWdlcyAoYSBwZXItdXNlclxuICAvLyB0YXJnZXRlZCByb3cgaXMgdmlzaWJsZSBvbmx5IHRvIGl0cyB0YXJnZXQpLiBUaGVpciBzZXJ2aWNlcyBzdGFtcCB0aGVtIGZyb21cbiAgLy8gdGhlIHJlcXVlc3QncyBgVGVuYW50Q29udGV4dGAgdmlhIGB3aXRoVmlld2VyQ29udGV4dGAsIHNvIG5vIHJvdXRlIG9yIHF1ZXJ5XG4gIC8vIHN0cmluZyBjYW4gaW5qZWN0IHRoZW0uIEV2ZXJ5dGhpbmcgZWxzZSBpZ25vcmVzIHRoZW0uXG4gIC8vXG4gIC8vIEJvdGggZmFpbCBDTE9TRUQgd2hlbiBhYnNlbnQ6IG5vIHZpZXdlciBtZWFucyB0aGUgcGVyLXVzZXIgcnVuZyBtYXRjaGVzXG4gIC8vIE5PVEhJTkcsIG5ldmVyIGV2ZXJ5dGhpbmcuXG5cbiAgLyoqIENhbGxlcidzIHVzZXIgaWQsIG1hdGNoZWQgYWdhaW5zdCB0aGUgZW50aXR5J3MgcGVyLXVzZXIgY29sdW1uLiAqL1xuICByZWFkb25seSB2aWV3ZXJVc2VySWQ/OiBzdHJpbmc7XG4gIC8qKiBXaGV0aGVyIHRoZSBjYWxsZXIgaXMgYSBwbGF0Zm9ybSBzdXBlci1hZG1pbiAoc2VlcyBldmVyeSBydW5nKS4gKi9cbiAgcmVhZG9ubHkgdmlld2VySXNTdXBlckFkbWluPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3JnYW5pemF0aW9uIGlkZW50aWZpZXIgdG8gZmlsdGVyIGVudGl0aWVzIGJ5IG9yZ2FuaXphdGlvblxuICAgKiBDYW4gYmUgYSBzaW5nbGUgb3JnIElEIG9yIGFycmF5IGZvciBtdWx0aS1vcmcgZmlsdGVyaW5nXG4gICAqL1xuICByZWFkb25seSBvcmdJZD86IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBOYXJyb3cgdG8gb25lIHJ1bmcgb2YgdGhlIHNoYXJlZCB0aHJlZS1ydW5nIHNoYXJpbmcgbGFkZGVyLiBBcHBsaWVkIFdJVEhJTlxuICAgKiB3aGF0IHRoZSBjYWxsZXIgY2FuIGFscmVhZHkgc2VlIOKAlCBuZXZlciB3aWRlbnMgaXQuXG4gICAqIEBzZWUgVmlzaWJpbGl0eVxuICAgKi9cbiAgcmVhZG9ubHkgdmlzaWJpbGl0eT86IFZpc2liaWxpdHkgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSBkZWZhdWx0IHN0YXR1c1xuICAgKiAtIHRydWU6IE9ubHkgZGVmYXVsdCBlbnRpdGllc1xuICAgKiAtIGZhbHNlOiBPbmx5IG5vbi1kZWZhdWx0IGVudGl0aWVzXG4gICAqIC0gdW5kZWZpbmVkOiBBbGwgZW50aXRpZXNcbiAgICovXG4gIHJlYWRvbmx5IGlzRGVmYXVsdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSBhY3RpdmUvaW5hY3RpdmUgc3RhdHVzXG4gICAqIC0gdHJ1ZTogT25seSBhY3RpdmUgZW50aXRpZXNcbiAgICogLSBmYWxzZTogT25seSBpbmFjdGl2ZSBlbnRpdGllc1xuICAgKiAtIHVuZGVmaW5lZDogQWxsIGVudGl0aWVzXG4gICAqL1xuICByZWFkb25seSBpc0FjdGl2ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiByZXN1bHRzIHRvIHJldHVyblxuICAgKiBAbWluaW11bSAxXG4gICAqIEBtYXhpbXVtIDEwMDBcbiAgICovXG4gIHJlYWRvbmx5IGxpbWl0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcmVzdWx0cyB0byBza2lwIChmb3IgcGFnaW5hdGlvbilcbiAgICogQG1pbmltdW0gMFxuICAgKi9cbiAgcmVhZG9ubHkgb2Zmc2V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTb3J0IGZpZWxkIGFuZCBkaXJlY3Rpb25cbiAgICogQGV4YW1wbGUgXCJuYW1lOmFzY1wiLCBcImNyZWF0ZWRBdDpkZXNjXCJcbiAgICovXG4gIHJlYWRvbmx5IHNvcnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbHRlciBieSBjYXRhbG9nIG93bmVyIChkZXZlbG9wZXItcG9ydGFsIFwibXkgc2VydmljZXNcIiB2aWV3KS5cbiAgICogTWF0Y2hlcyB0aGUgZW50aXR5J3MgYG93bmVySWRgIGV4YWN0bHkgKGEgdXNlciBpZCBvciB0ZWFtIGlkKS5cbiAgICogT25seSBhcHBsaWVkIGJ5IGJ1aWxkZXJzIGZvciBlbnRpdGllcyB0aGF0IGNhcnJ5IGFuIG93bmVyIGNvbHVtblxuICAgKiAocGlwZWxpbmVzLCBwbHVnaW5zKTsgaWdub3JlZCBlbHNld2hlcmUuXG4gICAqL1xuICByZWFkb25seSBvd25lcklkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGaWx0ZXIgYnkgbGlmZWN5Y2xlIHN0YWdlIChleHBlcmltZW50YWwgfCBwcm9kdWN0aW9uIHwgZGVwcmVjYXRlZCkuXG4gICAqIE9ubHkgYXBwbGllZCBieSBidWlsZGVycyBmb3IgZW50aXRpZXMgdGhhdCBjYXJyeSBhIGxpZmVjeWNsZSBjb2x1bW4uXG4gICAqL1xuICByZWFkb25seSBsaWZlY3ljbGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmlsdGVyIGludGVyZmFjZSBmb3IgcGx1Z2luLXNwZWNpZmljIHByb3BlcnRpZXMuXG4gKiBFeHRlbmRzIENvbW1vbkZpbHRlciB0byBpbmNsdWRlIHBsdWdpbi1yZWxhdGVkIGZpbHRlciBvcHRpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBmaWx0ZXI6IFBsdWdpbkZpbHRlciA9IHtcbiAqICAgbmFtZTogJ25vZGVqcy1idWlsZCcsXG4gKiAgIHZlcnNpb246ICcxLjAuMCcsXG4gKiAgIGlzQWN0aXZlOiB0cnVlXG4gKiB9O1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luRmlsdGVyIGV4dGVuZHMgQ29tbW9uRmlsdGVyIHtcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIHRvIGZpbHRlciBieVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSG93IGBuYW1lYCBtYXRjaGVzOiBgY29udGFpbnNgIChkZWZhdWx0IOKAlCBjYXNlLWluc2Vuc2l0aXZlIHN1YnN0cmluZywgZm9yXG4gICAqIGxpc3Qvc2VhcmNoKSBvciBgZXhhY3RgIChyZXNvbHV0aW9uIOKAlCB0aGUgbG9va3VwIHBhdGgpLiBJbnRlcm5hbDogbm90IGluXG4gICAqIHRoZSBwdWJsaWMgZmlsdGVyIHNjaGVtYS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWVNYXRjaD86ICdleGFjdCcgfCAnY29udGFpbnMnO1xuXG4gIC8qKlxuICAgKiBQdWJsaXNoZXIgaGFuZGxlIG9mIGFuIGluc3RhbGxlZCBsaXN0aW5nIHRvIHJlc29sdmUgdGhyb3VnaC5cbiAgICogTG9va3VwIG9ubHk6IGEgYHBsdWdpbnNgIHJvdyBxdWVyeSBpZ25vcmVzIGl0ICh0aGUgcmVzb2x2ZXIgcm91dGVzIGFcbiAgICogcXVhbGlmaWVkIHJlZmVyZW5jZSB0byB0aGUgbGlzdGluZywgbmV2ZXIgdG8gYW4gb3JnJ3Mgb3duIHJvd3MpLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGlzaGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQbHVnaW4gdmVyc2lvbiBzcGVjOiBleGFjdCAoYDEuMi4zYCksIGNhcmV0IChgXjEuMi4zYCksIHRpbGRlIChgfjEuMi4zYCksXG4gICAqIHBhcnRpYWwgKGAxYCwgYDEuMmAsIGAxLnhgKSBvciBgbGF0ZXN0YCDigJQgc2VlIHNlbXZlci1yYW5nZS50cy4gQSByYW5nZSBuZXZlclxuICAgKiBtYXRjaGVzIGEgeWFua2VkIHZlcnNpb24uXG4gICAqIEBleGFtcGxlIFwiMS4wLjBcIiwgXCJeMi4wLjBcIiwgXCJ+MS4yLjNcIiwgXCJsYXRlc3RcIlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcblxuICAvKiogRXhjbHVkZSB5YW5rZWQgdmVyc2lvbnMgKHJlc29sdXRpb24gd2l0aG91dCBhIHZlcnNpb24gc3BlYykuIEludGVybmFsLiAqL1xuICByZWFkb25seSBleGNsdWRlWWFua2VkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRXhjbHVkZSB2ZXJzaW9ucyB0aGUgbmlnaHRseSByZXNjYW4gZmxhZ2dlZCAoYHNjYW5fZmxhZ2dlZF9hdGAgc2V0KSDigJQgdGhlXG4gICAqIGxvb2t1cCdzIFwibmV3ZXN0IHVuZmxhZ2dlZCB2ZXJzaW9uIHRvIG1vdmUgdG9cIiBzdWdnZXN0aW9uLiBOZXZlciBhcHBsaWVkIHRvXG4gICAqIHdoYXQgYSByZWZlcmVuY2UgUkVTT0xWRVMgdG86IHZ1bG5lcmFiaWxpdHkgc3RhdGUgZG9lcyBub3Qgc2tpcCB2ZXJzaW9ucy4gSW50ZXJuYWwuXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlU2NhbkZsYWdnZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBLZXl3b3JkIHRvIHNlYXJjaCB3aXRoaW4gdGhlIGtleXdvcmRzIEpTT05CIGFycmF5IChjYXNlLWluc2Vuc2l0aXZlIGNvbnRhaW5zKVxuICAgKi9cbiAgcmVhZG9ubHkga2V5d29yZD86IHN0cmluZztcblxuICAvKipcbiAgICogUGx1Z2luIGNhdGVnb3J5IHRvIGZpbHRlciBieVxuICAgKiBAZXhhbXBsZSBcImxhbmd1YWdlXCIsIFwic2VjdXJpdHlcIiwgXCJ0ZXN0aW5nXCJcbiAgICovXG4gIHJlYWRvbmx5IGNhdGVnb3J5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZpbHRlciBpbnRlcmZhY2UgZm9yIHBpcGVsaW5lLXNwZWNpZmljIHByb3BlcnRpZXMuXG4gKiBFeHRlbmRzIENvbW1vbkZpbHRlciB0byBpbmNsdWRlIHBpcGVsaW5lLXJlbGF0ZWQgZmlsdGVyIG9wdGlvbnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGZpbHRlcjogUGlwZWxpbmVGaWx0ZXIgPSB7XG4gKiAgIHByb2plY3Q6ICdteS1hcHAnLFxuICogICBvcmdhbml6YXRpb246ICdteS1vcmcnLFxuICogICBwaXBlbGluZU5hbWU6ICdteS1waXBlbGluZScsXG4gKiAgIGlzQWN0aXZlOiB0cnVlXG4gKiB9O1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVGaWx0ZXIgZXh0ZW5kcyBDb21tb25GaWx0ZXIge1xuICAvKipcbiAgICogUHJvamVjdCBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGlwZWxpbmVcbiAgICovXG4gIHJlYWRvbmx5IHByb2plY3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9yZ2FuaXphdGlvbiBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgcGlwZWxpbmVcbiAgICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogUGlwZWxpbmUgbmFtZSB0byBmaWx0ZXIgYnlcbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogS2V5d29yZCB0byBzZWFyY2ggd2l0aGluIHRoZSBrZXl3b3JkcyBKU09OQiBhcnJheSAoY2FzZS1pbnNlbnNpdGl2ZSBjb250YWlucylcbiAgICovXG4gIHJlYWRvbmx5IGtleXdvcmQ/OiBzdHJpbmc7XG59XG5cbi8qKiBGaWx0ZXIgaW50ZXJmYWNlIGZvciBwaXBlbGluZS10ZW1wbGF0ZSBxdWVyaWVzIChnb2xkZW4tcGF0aCBjYXRhbG9nKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVUZW1wbGF0ZUZpbHRlciBleHRlbmRzIENvbW1vbkZpbHRlciB7XG4gIC8qKiBUZW1wbGF0ZSBuYW1lIChjYXNlLWluc2Vuc2l0aXZlIGNvbnRhaW5zKS4gKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgLyoqIENhdGVnb3J5IHRvIGZpbHRlciBieSAoZS5nLiAnbGFuZ3VhZ2UnLCAnZ2VuZXJhbCcpLiAqL1xuICByZWFkb25seSBjYXRlZ29yeT86IHN0cmluZztcbiAgLyoqIEtleXdvcmQgc2VhcmNoIHdpdGhpbiB0aGUga2V5d29yZHMgSlNPTkIgYXJyYXkuICovXG4gIHJlYWRvbmx5IGtleXdvcmQ/OiBzdHJpbmc7XG4gIC8vIFNoYXJpbmcgcnVuZyArIHZpZXdlciBjb250ZXh0IGFyZSBpbmhlcml0ZWQgZnJvbSBDb21tb25GaWx0ZXIuXG59XG5cbi8qKlxuICogRmlsdGVyIGludGVyZmFjZSBmb3IgbWVzc2FnZS1zcGVjaWZpYyBwcm9wZXJ0aWVzLlxuICogRXh0ZW5kcyBDb21tb25GaWx0ZXIgdG8gaW5jbHVkZSBtZXNzYWdlLXJlbGF0ZWQgZmlsdGVyIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZUZpbHRlciBleHRlbmRzIENvbW1vbkZpbHRlciB7XG4gIC8qKlxuICAgKiBUaHJlYWQgSUQgdG8gZmlsdGVyIGJ5IChmb3IgZmV0Y2hpbmcgdGhyZWFkIHJlcGxpZXMpLlxuICAgKiBQYXNzIGBudWxsYCB0byBmaWx0ZXIgZm9yIHJvb3QgbWVzc2FnZXMgb25seSAodGhyZWFkSWQgSVMgTlVMTCkuXG4gICAqL1xuICByZWFkb25seSB0aHJlYWRJZD86IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFJlY2lwaWVudCBvcmdhbml6YXRpb24gSUQgdG8gZmlsdGVyIGJ5XG4gICAqIFVzZSAnKicgZm9yIGJyb2FkY2FzdCBhbm5vdW5jZW1lbnRzXG4gICAqL1xuICByZWFkb25seSByZWNpcGllbnRPcmdJZD86IHN0cmluZztcblxuICAvKipcbiAgICogUmVjaXBpZW50IHVzZXIgSUQgdG8gZmlsdGVyIGJ5IChwZXItdXNlciB0YXJnZXRpbmcgd2l0aGluIHRoZSByZWNpcGllbnRcbiAgICogb3JnKS4gUGFzcyBgbnVsbGAgdG8gbWF0Y2ggb3JnLXdpZGUgbWVzc2FnZXMgb25seSAocmVjaXBpZW50X3VzZXJfaWQgSVNcbiAgICogTlVMTCkuIFJhcmVseSBzZXQgZGlyZWN0bHkgYnkgY2FsbGVycyDigJQgc2VlIGB2aWV3ZXJVc2VySWRgIGZvciB0aGVcbiAgICogdmlzaWJpbGl0eS1zY29waW5nIHZhcmlhbnQuXG4gICAqL1xuICByZWFkb25seSByZWNpcGllbnRVc2VySWQ/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8vIE5PVEU6IHRoZSBWSUVXRVIncyB1c2VyIGlkIChgdmlld2VyVXNlcklkYCkgaXMgaW5oZXJpdGVkIGZyb20gQ29tbW9uRmlsdGVyLlxuICAvLyBGb3IgbWVzc2FnZXMgaXQgaXMgTk9UIGEgY29sdW1uIGZpbHRlcjogd2hlbiBwcmVzZW50LCB0aGUgcmVjaXBpZW50LXNpZGVcbiAgLy8gYnJhbmNoIGluIGBidWlsZE1lc3NhZ2VDb25kaXRpb25zYCB3aWRlbnMgdG8gaW5jbHVkZSByb3dzIHRhcmdldGVkIGF0IHRoaXNcbiAgLy8gdXNlciAocmVjaXBpZW50X3VzZXJfaWQgPSB2aWV3ZXJVc2VySWQpIEFMT05HU0lERSBvcmctd2lkZSBvbmVzXG4gIC8vIChyZWNpcGllbnRfdXNlcl9pZCBJUyBOVUxMKS4gV2hlbiBhYnNlbnQsIG9ubHkgb3JnLXdpZGUgcmVjaXBpZW50IHJvd3MgYXJlXG4gIC8vIHZpc2libGUsIHNvIGEgdXNlci10YXJnZXRlZCBtZXNzYWdlIHN0YXlzIHByaXZhdGUgdG8gaXRzIHRhcmdldCwgdGhlIHNlbmRlcixcbiAgLy8gYW5kIHRoZSBzeXN0ZW0gb3JnLiBNZXNzYWdlU2VydmljZSBzdGFtcHMgaXQgZnJvbSB0aGUgdGVuYW50IGNvbnRleHQuXG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgdHlwZSBmaWx0ZXJcbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2VUeXBlPzogJ2Fubm91bmNlbWVudCcgfCAnY29udmVyc2F0aW9uJztcblxuICAvKipcbiAgICogRmlsdGVyIGJ5IHByaW9yaXR5IGxldmVsXG4gICAqL1xuICByZWFkb25seSBwcmlvcml0eT86ICdub3JtYWwnIHwgJ2hpZ2gnIHwgJ3VyZ2VudCc7XG5cbiAgLyoqXG4gICAqIENoYW5uZWwvaW5ib3gtYnVja2V0IGZpbHRlciAoZS5nLiAnc3VwcG9ydCcsICdoZWxwJykuIE1hdGNoZXMgcm93c1xuICAgKiBleGFjdGx5OyBwYXNzIG51bGwgdG8gbWF0Y2ggY2hhbm5lbCBJUyBOVUxMIChvcmctdG8tb3JnIG1lc3NhZ2VzKS5cbiAgICovXG4gIHJlYWRvbmx5IGNoYW5uZWw/OiBzdHJpbmcgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBGaWx0ZXIgYnkgcmVhZCBzdGF0ZSBmb3IgdGhlIHJlcXVlc3Rpbmcgb3JnLlxuICAgKiBJbXBsZW1lbnRlZCBhcyBhIEpTT05CIGtleS1leGlzdGVuY2UgY2hlY2sgYWdhaW5zdCBgbWVzc2FnZXMucmVhZF9ieWBcbiAgICogKGEgYHsgW29yZ0lkXTogaXNvVGltZXN0YW1wIH1gIG1hcCksIHVzaW5nIHRoZSBvcmdJZCBwYXNzZWQgdG9cbiAgICogYGJ1aWxkTWVzc2FnZUNvbmRpdGlvbnNgLlxuICAgKiAtIHRydWUgIOKGkiBvbmx5IG1lc3NhZ2VzIHRoZSBvcmcgaGFzIHJlYWQgKG9yZ0lkIGtleSBleGlzdHMgaW4gcmVhZF9ieSlcbiAgICogLSBmYWxzZSDihpIgb25seSBtZXNzYWdlcyB0aGUgb3JnIGhhcyBOT1QgcmVhZFxuICAgKiAtIHVuZGVmaW5lZCDihpIgbm8gcmVhZC1zdGF0ZSBmaWx0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGlzUmVhZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZyZWUtdGV4dCBpbmJveCBzZWFyY2guIENhc2UtaW5zZW5zaXRpdmUgc3Vic3RyaW5nIG1hdGNoIGFnYWluc3QgdGhlXG4gICAqIG1lc3NhZ2UgYHN1YmplY3RgIE9SIGBjb250ZW50YCAoTElLRSB3aWxkY2FyZHMgaW4gdGhlIHRlcm0gYXJlIGVzY2FwZWQsIHNvIGFcbiAgICogbGl0ZXJhbCBgJWAvYF9gIG1hdGNoZXMgaXRzZWxmKS4gQXBwbGllZCBvbiB0b3Agb2YgdGhlIHZpc2liaWxpdHkgc2NvcGUsIHNvXG4gICAqIGl0IG5ldmVyIHdpZGVucyB3aGF0IHRoZSBjYWxsZXIgY2FuIHNlZS5cbiAgICovXG4gIHJlYWRvbmx5IHNlYXJjaD86IHN0cmluZztcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gQ29tcGxpYW5jZSBGaWx0ZXJzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRmlsdGVyIGZvciBjb21wbGlhbmNlIHBvbGljaWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsaWFuY2VQb2xpY3lGaWx0ZXIgZXh0ZW5kcyBDb21tb25GaWx0ZXIge1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBpc1RlbXBsYXRlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBGaWx0ZXIgZm9yIGNvbXBsaWFuY2UgcnVsZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxpYW5jZVJ1bGVGaWx0ZXIgZXh0ZW5kcyBDb21tb25GaWx0ZXIge1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBwb2xpY3lJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgdGFyZ2V0PzogJ3BsdWdpbicgfCAncGlwZWxpbmUnO1xuICByZWFkb25seSBmaWVsZD86IHN0cmluZztcbiAgcmVhZG9ubHkgc2V2ZXJpdHk/OiAnd2FybmluZycgfCAnZXJyb3InIHwgJ2NyaXRpY2FsJztcbiAgcmVhZG9ubHkgc2NvcGU/OiAnb3JnJyB8ICdwdWJsaXNoZWQnO1xuICByZWFkb25seSB0YWc/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmlsdGVyIGZvciBjb21wbGlhbmNlIGV4ZW1wdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxpYW5jZUV4ZW1wdGlvbkZpbHRlciB7XG4gIHJlYWRvbmx5IG9yZ0lkPzogc3RyaW5nO1xuICByZWFkb25seSBydWxlSWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVudGl0eVR5cGU/OiAncGx1Z2luJyB8ICdwaXBlbGluZSc7XG4gIHJlYWRvbmx5IGVudGl0eUlkPzogc3RyaW5nO1xuICByZWFkb25seSBzdGF0dXM/OiAncGVuZGluZycgfCAnYXBwcm92ZWQnIHwgJ3JlamVjdGVkJyB8ICdleHBpcmVkJztcbiAgcmVhZG9ubHkgbGltaXQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IG9mZnNldD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBGaWx0ZXIgZm9yIGNvbXBsaWFuY2UgYXVkaXQgbG9nIGVudHJpZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxpYW5jZUF1ZGl0RmlsdGVyIHtcbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRhcmdldD86ICdwbHVnaW4nIHwgJ3BpcGVsaW5lJztcbiAgcmVhZG9ubHkgYWN0aW9uPzogc3RyaW5nO1xuICByZWFkb25seSByZXN1bHQ/OiAncGFzcycgfCAnd2FybicgfCAnYmxvY2snO1xuICByZWFkb25seSBzY2FuSWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRhdGVGcm9tPzogc3RyaW5nO1xuICByZWFkb25seSBkYXRlVG8/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxpbWl0PzogbnVtYmVyO1xuICByZWFkb25seSBvZmZzZXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRmlsdGVyIGZvciBjb21wbGlhbmNlIHNjYW5zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsaWFuY2VTY2FuRmlsdGVyIHtcbiAgcmVhZG9ubHkgb3JnSWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRhcmdldD86ICdwbHVnaW4nIHwgJ3BpcGVsaW5lJyB8ICdhbGwnO1xuICByZWFkb25seSBzdGF0dXM/OiAncGVuZGluZycgfCAncnVubmluZycgfCAnY29tcGxldGVkJyB8ICdmYWlsZWQnIHwgJ2NhbmNlbGxlZCc7XG4gIHJlYWRvbmx5IHRyaWdnZXJlZEJ5PzogJ21hbnVhbCcgfCAnc2NoZWR1bGVkJyB8ICdydWxlLWNoYW5nZScgfCAncnVsZS1kcnktcnVuJztcbiAgcmVhZG9ubHkgbGltaXQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IG9mZnNldD86IG51bWJlcjtcbn1cbiJdfQ==
|