@pipeline-builder/pipeline-data 4.3.11 → 4.3.12
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/managed-toolchain.d.ts +199 -0
- package/lib/api/managed-toolchain.js +445 -0
- package/lib/api/reporting/ingest.js +52 -12
- package/lib/api/reporting/toolchain-runs.d.ts +162 -0
- package/lib/api/reporting/toolchain-runs.js +268 -0
- package/lib/api/reporting/types.d.ts +17 -1
- package/lib/api/reporting/types.js +1 -1
- package/lib/api/version-references.d.ts +2 -24
- package/lib/api/version-references.js +46 -7
- package/lib/database/drizzle-schema.d.ts +650 -0
- package/lib/database/drizzle-schema.js +11 -1
- package/lib/database/index.d.ts +1 -1
- package/lib/database/index.js +2 -2
- package/lib/database/schema/ecosystem.d.ts +55 -0
- package/lib/database/schema/ecosystem.js +13 -2
- package/lib/database/schema/pipeline.d.ts +19 -0
- package/lib/database/schema/pipeline.js +17 -1
- package/lib/database/schema/toolchain.d.ts +643 -0
- package/lib/database/schema/toolchain.js +102 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +5 -1
- package/lib/testing/exports.json +39 -0
- package/package.json +2 -2
|
@@ -1150,6 +1150,25 @@ export declare const pipelineEvent: import("drizzle-orm/pg-core").PgTableWithCol
|
|
|
1150
1150
|
}, {}, {
|
|
1151
1151
|
length: 30;
|
|
1152
1152
|
}>;
|
|
1153
|
+
toolchainRelease: import("drizzle-orm/pg-core").PgColumn<{
|
|
1154
|
+
name: "toolchain_release";
|
|
1155
|
+
tableName: "pipeline_events";
|
|
1156
|
+
dataType: "string";
|
|
1157
|
+
columnType: "PgVarchar";
|
|
1158
|
+
data: string;
|
|
1159
|
+
driverParam: string;
|
|
1160
|
+
notNull: false;
|
|
1161
|
+
hasDefault: false;
|
|
1162
|
+
isPrimaryKey: false;
|
|
1163
|
+
isAutoincrement: false;
|
|
1164
|
+
hasRuntimeDefault: false;
|
|
1165
|
+
enumValues: [string, ...string[]];
|
|
1166
|
+
baseColumn: never;
|
|
1167
|
+
identity: undefined;
|
|
1168
|
+
generated: undefined;
|
|
1169
|
+
}, {}, {
|
|
1170
|
+
length: 50;
|
|
1171
|
+
}>;
|
|
1153
1172
|
sourceEventId: import("drizzle-orm/pg-core").PgColumn<{
|
|
1154
1173
|
name: "source_event_id";
|
|
1155
1174
|
tableName: "pipeline_events";
|
|
@@ -209,6 +209,16 @@ export const pipelineEvent = pgTable('pipeline_events', {
|
|
|
209
209
|
* and the AI summary is shown the category, never the raw error.
|
|
210
210
|
*/
|
|
211
211
|
failureCategory: varchar('failure_category', { length: 30 }),
|
|
212
|
+
/**
|
|
213
|
+
* The managed toolchain release (docs/plans/bootstrap-image-versioning.md §7)
|
|
214
|
+
* a `synth` or `self-mutation` ACTION ran on. Stamped at ingest from the
|
|
215
|
+
* PLATFORM's deployed step manifest for the pipeline (its `build-image`
|
|
216
|
+
* entry) — never from the payload or a pipeline tag, both of which the
|
|
217
|
+
* customer controls. NULL for every other row, and for a pipeline whose
|
|
218
|
+
* manifest records no release. The canary gate and the Affected view are
|
|
219
|
+
* queries over these rows (`api/reporting/toolchain-runs.ts`).
|
|
220
|
+
*/
|
|
221
|
+
toolchainRelease: varchar('toolchain_release', { length: 50 }),
|
|
212
222
|
/**
|
|
213
223
|
* Provenance. `sourceEventId` is the EventBridge event id the forwarder
|
|
214
224
|
* received this state change as (NULL for plugin-build events) — the
|
|
@@ -264,6 +274,12 @@ export const pipelineEvent = pgTable('pipeline_events', {
|
|
|
264
274
|
// aren't indexed. The default run-based DORA path (no environment) can't use
|
|
265
275
|
// this partial index; it relies on event_pipeline_type_started_idx below.
|
|
266
276
|
// Created by postgres-init.sql.
|
|
277
|
+
// The canary gate's scan: one release's stamped toolchain runs over a window.
|
|
278
|
+
// Partial — only synth / self-mutation rows carry a release. Created by
|
|
279
|
+
// postgres-init.sql.
|
|
280
|
+
toolchainReleaseIdx: index('event_toolchain_release_idx')
|
|
281
|
+
.on(table.toolchainRelease, table.createdAt)
|
|
282
|
+
.where(sql `toolchain_release IS NOT NULL`),
|
|
267
283
|
envTypeStartedIdx: index('event_env_type_started_idx')
|
|
268
284
|
.on(table.environment, table.eventType, table.startedAt)
|
|
269
285
|
.where(sql `environment IS NOT NULL`),
|
|
@@ -467,4 +483,4 @@ export const doraSettings = pgTable('dora_settings', {
|
|
|
467
483
|
reportDefaultWeekStart: varchar('report_default_week_start', { length: 10 }),
|
|
468
484
|
updatedAt: timestamp('updated_at', { withTimezone: true }).defaultNow().notNull(),
|
|
469
485
|
});
|
|
470
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kYXRhYmFzZS9zY2hlbWEvcGlwZWxpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQ0wsYUFBYSxHQUVkLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBMkJuSTs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUU7SUFDM0MsY0FBYztJQUNkLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsYUFBYSxFQUFFO0lBRTNDLGtDQUFrQztJQUNsQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUN0QyxPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3RCLE9BQU8sRUFBRTtJQUVaLGVBQWU7SUFDZixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUMxQixPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3RCLE9BQU8sRUFBRTtJQUNaLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ3ZELFVBQVUsRUFBRTtTQUNaLE9BQU8sRUFBRTtJQUNaLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQzFCLE9BQU8sQ0FBQyxhQUFhLENBQUM7U0FDdEIsT0FBTyxFQUFFO0lBQ1osU0FB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QUN2RTs7Ozs7Ozs7Ozs7T0FXRztJQUNILHlCQUF5QixFQUFFLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLEtBQUssRUFBMEI7SUFDL0Y7Ozs7Ozs7O09BUUc7SUFDSCxtQkFBbUIsRUFBRSxTQUFTLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDaEY7Ozs7Ozs7T0FPRztJQUNILHlCQUF5QixFQUFFLFNBQVMsQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUM1Rjs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxxQkFBcUIsRUFBRSxPQUFPLENBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDekUsc0JBQXNCLEVBQUUsT0FBTyxDQUFDLDJCQUEyQixFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzVFLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxFQUFFO0NBQ2xGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQge1xuICBTWVNURU1fT1JHX0lELCB0eXBlIENyaXRpY2FsaXR5LCB0eXBlIEVudGl0eUxhYmVscywgdHlwZSBFbnRpdHlMaW5rLCB0eXBlIExpZmVjeWNsZSwgdHlwZSBNZXRhRGF0YVR5cGUsXG4gIHR5cGUgT3duZXJUeXBlLCB0eXBlIFZpc2liaWxpdHksXG59IGZyb20gJ0BwaXBlbGluZS1idWlsZGVyL2FwaS1jb3JlJztcbmltcG9ydCB7IHNxbCB9IGZyb20gJ2RyaXp6bGUtb3JtJztcbmltcG9ydCB7IGJpZ2ludCwgYm9vbGVhbiwgaW50ZWdlciwgdmFyY2hhciwgcGdUYWJsZSwgdGV4dCwgdGltZXN0YW1wLCB1dWlkLCBqc29uYiwgaW5kZXgsIHVuaXF1ZUluZGV4IH0gZnJvbSAnZHJpenpsZS1vcm0vcGctY29yZSc7XG5pbXBvcnQgdHlwZSB7IFBpcGVsaW5lQ3JlYXRpb25Tb3VyY2UgfSBmcm9tICcuL3JlcG9ydGluZy1hbmFseXRpY3MuanMnO1xuXG4vKipcbiAqIFBpcGVsaW5lIGJ1aWxkZXIgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIHN0b3JlZCBpbiBkYXRhYmFzZS5cbiAqIE1pcnJvcnMgdGhlIGNhbm9uaWNhbCBCdWlsZGVyUHJvcHMgZnJvbSBwaXBlbGluZS1jb3JlIChKU09OLXNlcmlhbGl6YWJsZSBmb3JtKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZUJ1aWxkZXJDb25maWcge1xuICByZWFkb25seSBwcm9qZWN0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbjogc3RyaW5nO1xuICByZWFkb25seSBwaXBlbGluZU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGdsb2JhbD86IE1ldGFEYXRhVHlwZTtcbiAgcmVhZG9ubHkgc3ludGg6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZWFkb25seSBkZWZhdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZWFkb25seSByb2xlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJlYWRvbmx5IHN0YWdlcz86IFBpcGVsaW5lU3RhZ2VDb25maWdbXTtcbn1cblxuLyoqXG4gKiBTdGFnZSBjb25maWd1cmF0aW9uIHN0b3JlZCBpbiBkYXRhYmFzZSAoSlNPTi1zZXJpYWxpemFibGUpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lU3RhZ2VDb25maWcge1xuICByZWFkb25seSBzdGFnZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgYWxpYXM/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0ZXBzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdO1xufVxuXG4vKipcbiAqIFRhYmxlIGZvciBzdG9yaW5nIHBpcGVsaW5lIGluc3RhbmNlcyBhbmQgdGhlaXIgZnVsbCBjb25maWd1cmF0aW9uLlxuICpcbiAqIEZlYXR1cmVzICogLSBGdWxsIEJ1aWxkZXJQcm9wcyBzZXJpYWxpemF0aW9uIGZvciByZWNvbnN0cnVjdGlvblxuICogLSBPcmdhbml6YXRpb24tbGV2ZWwgaXNvbGF0aW9uXG4gKiAtIFBpcGVsaW5lIHN0YXR1cyB0cmFja2luZ1xuICogLSBFeGVjdXRpb24gaGlzdG9yeSB0cmFja2luZ1xuICogLSBGbGV4aWJsZSB0YWdnaW5nIHN5c3RlbVxuICpcbiAqIEB0YWJsZSBwaXBlbGluZXNcbiAqL1xuZXhwb3J0IGNvbnN0IHBpcGVsaW5lID0gcGdUYWJsZSgncGlwZWxpbmVzJywge1xuICAvLyBQcmltYXJ5IGtleVxuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuXG4gIC8vIE9yZ2FuaXphdGlvbiBhbmQgYWNjZXNzIGNvbnRyb2xcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSlcbiAgICAuZGVmYXVsdChTWVNURU1fT1JHX0lEKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gQXVkaXQgZmllbGRzXG4gIGNyZWF0ZWRCeTogdGV4dCgnY3JlYXRlZF9ieScpXG4gICAgLmRlZmF1bHQoU1lTVEVNX09SR19JRClcbiAgICAubm90TnVsbCgpLFxuICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCgnY3JlYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pXG4gICAgLmRlZmF1bHROb3coKVxuICAgIC5ub3ROdWxsKCksXG4gIHVwZGF0ZWRCeTogdGV4dCgndXBkYXRlZF9ieScpXG4gICAgLmRlZmF1bHQoU1lTVEVNX09SR19JRClcbiAgICAubm90TnVsbCgpLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pXG4gICAgLmRlZmF1bHROb3coKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLy8gQ29yZSBwaXBlbGluZSBpbmZvcm1hdGlvblxuICBwcm9qZWN0OiB2YXJjaGFyKCdwcm9qZWN0JywgeyBsZW5ndGg6IDI1NSB9KVxuICAgIC5ub3ROdWxsKCksXG4gIG9yZ2FuaXphdGlvbjogdmFyY2hhcignb3JnYW5pemF0aW9uJywgeyBsZW5ndGg6IDI1NSB9KVxuICAgIC5ub3ROdWxsKCksXG4gIHBpcGVsaW5lTmFtZTogdmFyY2hhcigncGlwZWxpbmVfbmFtZScsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGRlc2NyaXB0aW9uOiB0ZXh0KCdkZXNjcmlwdGlvbicpLFxuICBrZXl3b3JkczoganNvbmIoJ2tleXdvcmRzJylcbiAgICAuJHR5cGU8c3RyaW5nW10+KClcbiAgICAuZGVmYXVsdChbXSlcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIFBpcGVsaW5lIGNvbmZpZ3VyYXRpb25cbiAgcHJvcHM6IGpzb25iKCdwcm9wcycpXG4gICAgLiR0eXBlPFBpcGVsaW5lQnVpbGRlckNvbmZpZz4oKVxuICAgIC5ub3ROdWxsKCksXG5cbiAgLyoqXG4gICAqIEhvdyB0aGlzIHBpcGVsaW5lIGNhbWUgdG8gZXhpc3Qg4oCUIHNldCBieSB3aGljaGV2ZXIgY3JlYXRlIHBhdGggbWFkZSBpdFxuICAgKiAoYG1hbnVhbGAsIGB0ZW1wbGF0ZWAsIGBhaWAsIGBidWxrYCwgYGNka2ApLiBTdGFtcGVkIGF0IGNyZWF0aW9uIHJhdGhlciB0aGFuXG4gICAqIGluZmVycmVkIGxhdGVyLCBiZWNhdXNlIG5vdGhpbmcgaW4gYSBzdG9yZWQgY29uZmlnIHNheXMgaG93IGl0IHdhcyBhdXRob3JlZCxcbiAgICogYW5kIHRoZSBhZG9wdGlvbiBzZWN0aW9uJ3Mgd2hvbGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGUgZ29sZGVuIHBhdGhzIGFyZVxuICAgKiBiZWluZyB1c2VkOiBhbiBvcmcgd2hvc2UgcGlwZWxpbmVzIGFyZSBhbGwgaGFuZC1idWlsdCBoYXMgYSBkaWZmZXJlbnQgc3RvcnlcbiAgICogZnJvbSBvbmUgdGVtcGxhdGluZyB0aGVtLlxuICAgKi9cbiAgY3JlYXRpb25Tb3VyY2U6IHZhcmNoYXIoJ2NyZWF0aW9uX3NvdXJjZScsIHsgbGVuZ3RoOiAyMCB9KVxuICAgIC4kdHlwZTxQaXBlbGluZUNyZWF0aW9uU291cmNlPigpLFxuXG4gIC8vIERldmVsb3Blci1wb3J0YWwgY2F0YWxvZyBtZXRhZGF0YSAob3duZXJzaGlwIC8gbGlmZWN5Y2xlIC8gY2xhc3NpZmljYXRpb24pLlxuICAvLyBvd25lcklkIGRlZmF1bHRzIHRvIHRoZSBjcmVhdGluZyB1c2VyIChzZXQgYXQgaW5zZXJ0KSwgc28gZXZlcnkgcGlwZWxpbmUgaGFzXG4gIC8vIGFuIG93bmVyIGZvciBcIm15IHNlcnZpY2VzXCIgdmlld3M7IG93bmVyVHlwZSBkaXN0aW5ndWlzaGVzIHVzZXIgdnMgdGVhbS5cbiAgb3duZXJJZDogdGV4dCgnb3duZXJfaWQnKSxcbiAgb3duZXJUeXBlOiB2YXJjaGFyKCdvd25lcl90eXBlJywgeyBsZW5ndGg6IDEwIH0pLiR0eXBlPE93bmVyVHlwZT4oKSxcbiAgbGlmZWN5Y2xlOiB2YXJjaGFyKCdsaWZlY3ljbGUnLCB7IGxlbmd0aDogMjAgfSlcbiAgICAuJHR5cGU8TGlmZWN5Y2xlPigpXG4gICAgLmRlZmF1bHQoJ3Byb2R1Y3Rpb24nIGFzIExpZmVjeWNsZSlcbiAgICAubm90TnVsbCgpLFxuICBjcml0aWNhbGl0eTogdmFyY2hhcignY3JpdGljYWxpdHknLCB7IGxlbmd0aDogMTAgfSkuJHR5cGU8Q3JpdGljYWxpdHk+KCksXG4gIGxhYmVsczoganNvbmIoJ2xhYmVscycpXG4gICAgLiR0eXBlPEVudGl0eUxhYmVscz4oKVxuICAgIC5kZWZhdWx0KHt9KVxuICAgIC5ub3ROdWxsKCksXG4gIGxpbmtzOiBqc29uYignbGlua3MnKVxuICAgIC4kdHlwZTxFbnRpdHlMaW5rW10+KClcbiAgICAuZGVmYXVsdChbXSlcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIEFjY2VzcyBhbmQgdmlzaWJpbGl0eSDigJQgdGhlIHNoYXJlZCB0aHJlZS1ydW5nIGxhZGRlciAoc2VlIGFwaS1jb3JlJ3NcbiAgLy8gYFZpc2liaWxpdHlgKTogYHByaXZhdGVgIGlzIGF1dGhvci1vbmx5IChgY3JlYXRlZF9ieWApLCBgb3JnYCBpcyB0aGUgd2hvbGVcbiAgLy8gb3duaW5nIG9yZywgYHB1YmxpY2AgcmVhY2hlcyB0aGUgb3JnJ3MgdGVhbXMgYW5kIOKAlCBmcm9tIHRoZSBzeXN0ZW0gb3JnIOKAlFxuICAvLyBldmVyeSBvcmcuIENvbnN0cmFpbmVkIGF0IHRoZSBTUUwgbGF5ZXIgdG9vIHZpYSBhIENIRUNLIGluIHBvc3RncmVzLWluaXQuc3FsXG4gIC8vIHNvIGEgdHlwbyBjYW4ndCBzbmVhayBwYXN0IHRoZSBhcHBsaWNhdGlvbiBsYXllci5cbiAgdmlzaWJpbGl0eTogdmFyY2hhcigndmlzaWJpbGl0eScsIHsgbGVuZ3RoOiAxMCB9KVxuICAgIC4kdHlwZTxWaXNpYmlsaXR5PigpXG4gICAgLmRlZmF1bHQoJ3ByaXZhdGUnKVxuICAgIC5ub3ROdWxsKCksXG4gIGlzRGVmYXVsdDogYm9vbGVhbignaXNfZGVmYXVsdCcpXG4gICAgLmRlZmF1bHQoZmFsc2UpXG4gICAgLm5vdE51bGwoKSxcbiAgaXNBY3RpdmU6IGJvb2xlYW4oJ2lzX2FjdGl2ZScpXG4gICAgLmRlZmF1bHQodHJ1ZSlcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIERlbGV0aW9uIHRyYWNraW5nIChzb2Z0IGRlbGV0ZSlcbiAgZGVsZXRlZEF0OiB0aW1lc3RhbXAoJ2RlbGV0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgZGVsZXRlZEJ5OiB0ZXh0KCdkZWxldGVkX2J5JyksXG4gIC8vIFNvZnQtZGVsZXRlIHB1cmdlIGRlYWRsaW5lOiB0aGUgcmV0ZW50aW9uIHN3ZWVwIGhhcmQtZGVsZXRlcyB0b21ic3RvbmVkXG4gIC8vIHJvd3Mgb25jZSBgcHVyZ2VfYWZ0ZXJgIGhhcyBwYXNzZWQgKHNldCBvbiBkZWxldGUgYWxvbmdzaWRlIGRlbGV0ZWRfYXQpLlxuICBwdXJnZUFmdGVyOiB0aW1lc3RhbXAoJ3B1cmdlX2FmdGVyJywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG59LCAodGFibGUpID0+ICh7XG4gIC8vIFBhcnRpYWwgaW5kZXggb3ZlciBqdXN0IHRoZSB0b21ic3RvbmVzIOKAlCBkcml2ZXMgdGhlIHJldGVudGlvbiBwdXJnZSBzd2VlcFxuICAvLyAoYFdIRVJFIGRlbGV0ZWRfYXQgSVMgTk9UIE5VTEwgQU5EIHB1cmdlX2FmdGVyIDwgbm93YCkgd2l0aG91dCBzY2FubmluZyBsaXZlIHJvd3MuXG4gIHB1cmdlSWR4OiBpbmRleCgncGlwZWxpbmVfcHVyZ2VfaWR4Jykub24odGFibGUucHVyZ2VBZnRlcikud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTk9UIE5VTExgKSxcbiAgLy8gTWlycm9ycyB0aGUgaW5kZXhlcyBwb3N0Z3Jlcy1pbml0LnNxbCBjcmVhdGVzLCBuYW1lIGZvciBuYW1lICh0aGUgU1FMIGZpbGUgaXNcbiAgLy8gd2hhdCBkZXBsb3lzOyBzY2hlbWEtcmVmbGVjdGlvbi50ZXN0LnRzIGtlZXBzIHRoZSB0d28gaW4gbG9jay1zdGVwKS5cbiAgb3JnSWRJZHg6IGluZGV4KCdpZHhfcGlwZWxpbmVzX29yZ19pZCcpLm9uKHRhYmxlLm9yZ0lkKS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOVUxMYCksXG4gIHByb2plY3RJZHg6IGluZGV4KCdpZHhfcGlwZWxpbmVzX3Byb2plY3QnKS5vbih0YWJsZS5wcm9qZWN0KS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOVUxMYCksXG4gIG9yZ2FuaXphdGlvbklkeDogaW5kZXgoJ2lkeF9waXBlbGluZXNfb3JnYW5pemF0aW9uJykub24odGFibGUub3JnYW5pemF0aW9uKS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOVUxMYCksXG4gIHByb2plY3RPcmdJZHg6IGluZGV4KCdpZHhfcGlwZWxpbmVzX3Byb2plY3Rfb3JnJykub24odGFibGUucHJvamVjdCwgdGFibGUub3JnYW5pemF0aW9uKS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOVUxMYCksXG4gIHZpc2liaWxpdHlJZHg6IGluZGV4KCdpZHhfcGlwZWxpbmVzX3Zpc2liaWxpdHknKS5vbih0YWJsZS52aXNpYmlsaXR5KS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOVUxMYCksXG4gIGlzRGVmYXVsdElkeDogaW5kZXgoJ2lkeF9waXBlbGluZXNfaXNfZGVmYXVsdCcpXG4gICAgLm9uKHRhYmxlLnByb2plY3QsIHRhYmxlLm9yZ2FuaXphdGlvbiwgdGFibGUuaXNEZWZhdWx0KS53aGVyZShzcWxgaXNfZGVmYXVsdCA9IHRydWUgQU5EIGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBhY3RpdmVJZHg6IGluZGV4KCdpZHhfcGlwZWxpbmVzX2lzX2FjdGl2ZScpLm9uKHRhYmxlLmlzQWN0aXZlKS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOVUxMYCksXG4gIG9yZ0NyZWF0ZWRJZHg6IGluZGV4KCdpZHhfcGlwZWxpbmVzX29yZ19jcmVhdGVkJykub24odGFibGUub3JnSWQsIHNxbGAke3RhYmxlLmNyZWF0ZWRBdH0gREVTQ2ApLndoZXJlKHNxbGBkZWxldGVkX2F0IElTIE5VTExgKSxcblxuICAvLyBEZXZlbG9wZXItcG9ydGFsIGNhdGFsb2cgaW5kZXhlczogXCJteSBzZXJ2aWNlc1wiIChvd25lcikgKyBsaWZlY3ljbGUgZmlsdGVyLlxuICBvd25lcklkeDogaW5kZXgoJ3BpcGVsaW5lX293bmVyX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5vd25lcklkKSxcbiAgbGlmZWN5Y2xlSWR4OiBpbmRleCgncGlwZWxpbmVfbGlmZWN5Y2xlX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5saWZlY3ljbGUpLFxuXG4gIC8vIENvbXBvc2l0ZSBpbmRleCBmb3IgZmlsdGVyZWQgcXVlcmllcyAob3JnSWQgKyB2aXNpYmlsaXR5ICsgaXNBY3RpdmUpXG4gIG9yZ1Zpc2liaWxpdHlBY3RpdmVJZHg6IGluZGV4KCdwaXBlbGluZV9vcmdfdmlzaWJpbGl0eV9hY3RpdmVfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLnZpc2liaWxpdHksIHRhYmxlLmlzQWN0aXZlKSxcbiAgLy8gRHJpdmVzIHRoZSBcIm15IHByaXZhdGUgZHJhZnRzXCIgbGVnIG9mIHRoZSB2aXNpYmlsaXR5IHByZWRpY2F0ZS5cbiAgY3JlYXRlZEJ5SWR4OiBpbmRleCgncGlwZWxpbmVfY3JlYXRlZF9ieV9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUuY3JlYXRlZEJ5KSxcblxuICAvLyBVbmlxdWUgY29uc3RyYWludCBvbiBwcm9qZWN0ICsgb3JnYW5pemF0aW9uICsgb3JnSWRcbiAgcHJvamVjdE9yZ1VuaXF1ZTogdW5pcXVlSW5kZXgoJ3BpcGVsaW5lX3Byb2plY3Rfb3JnX3VuaXF1ZScpXG4gICAgLm9uKHRhYmxlLnByb2plY3QsIHRhYmxlLm9yZ2FuaXphdGlvbiwgdGFibGUub3JnSWQpLFxufSkpO1xuXG4vKipcbiAqIFBpcGVsaW5lIGRlcGxveW1lbnQgcmVnaXN0cnkuXG4gKiBNYXBzIGRlcGxveWVkIENvZGVQaXBlbGluZSBBUk5zIGJhY2sgdG8gcGlwZWxpbmUgcmVjb3JkcyBhbmQgb3JnIElEcy5cbiAqIFBvcHVsYXRlZCBieSB0aGUgZGVwbG95IGNvbW1hbmQgYWZ0ZXIgc3VjY2Vzc2Z1bCBDREsgZGVwbG95LlxuICogVXNlZCBieSB0aGUgcGlwZWxpbmUtZXZlbnRzIExhbWJkYSB0byByZXNvbHZlIEV2ZW50QnJpZGdlIGV2ZW50cyB0byBvcmctc2NvcGVkIHJlY29yZHMuXG4gKlxuICogQHRhYmxlIHBpcGVsaW5lX3JlZ2lzdHJ5XG4gKi9cbmV4cG9ydCBjb25zdCBwaXBlbGluZVJlZ2lzdHJ5ID0gcGdUYWJsZSgncGlwZWxpbmVfcmVnaXN0cnknLCB7XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG4gIC8vIFRoZSBwbGF0Zm9ybSdzIHBpcGVsaW5lIHJlY29yZCBpZCDigJQgYSBTVEFCTEUgdXVpZCBjcmVhdGVkIHdpdGggdGhlIHBpcGVsaW5lXG4gIC8vIHJlY29yZCwga25vd24gYXQgQ0RLIHN5bnRoLCBhbmQgYXBwbGllZCB0byB0aGUgbGl2ZSBDb2RlUGlwZWxpbmUgYXMgdGhlXG4gIC8vIGBwYi5waXBlbGluZS1pZGAgdGFnLiBUaGUgZXZlbnRzIExhbWJkYSByZWFkcyB0aGF0IHRhZyBhbmQgcmVwb3J0c1xuICAvLyBhZ2FpbnN0IHRoaXMgaWQsIHNvIGl0IElTIHRoZSBldmVudCBqb2luIGtleSAocmVwbGFjaW5nIHRoZSBtYXNrZWQgQVJOIOKAlFxuICAvLyBpdCBjYXJyaWVzIG5vIEFXUyBhY2NvdW50L3JlZ2lvbiwgc28gbm8gbWFza2luZyBpcyBuZWVkZWQpLiBVbmlxdWU6IG9uZVxuICAvLyByZWdpc3RyeSByb3cgcGVyIHBpcGVsaW5lICsgdGhlIHVwc2VydCBrZXkgZm9yIChyZSlyZWdpc3RyYXRpb24uXG4gIHBpcGVsaW5lSWQ6IHV1aWQoJ3BpcGVsaW5lX2lkJykubm90TnVsbCgpLnVuaXF1ZSgpLFxuICBvcmdJZDogdmFyY2hhcignb3JnX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIHBpcGVsaW5lTmFtZTogdmFyY2hhcigncGlwZWxpbmVfbmFtZScsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICByZWdpb246IHZhcmNoYXIoJ3JlZ2lvbicsIHsgbGVuZ3RoOiAzMCB9KSxcbiAgcHJvamVjdDogdmFyY2hhcigncHJvamVjdCcsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIG9yZ2FuaXphdGlvbjogdmFyY2hhcignb3JnYW5pemF0aW9uJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgbGFzdERlcGxveWVkOiB0aW1lc3RhbXAoJ2xhc3RfZGVwbG95ZWQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgc3RhY2tOYW1lOiB2YXJjaGFyKCdzdGFja19uYW1lJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG59LCAodGFibGUpID0+ICh7XG4gIG9yZ0lkSWR4OiBpbmRleCgncmVnaXN0cnlfb3JnX2lkX2lkeCcpLm9uKHRhYmxlLm9yZ0lkKSxcbiAgb3JnUmVnaW9uSWR4OiBpbmRleCgncmVnaXN0cnlfb3JnX3JlZ2lvbl9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUucmVnaW9uKSxcbiAgLy8gT25lIHJlZ2lzdHJ5IHJvdyBwZXIgcGlwZWxpbmUgKHRoZSByZWdpc3RyYXRpb24gdXBzZXJ0J3MgY29uZmxpY3QgdGFyZ2V0KS5cbiAgcGlwZWxpbmVJZFVuaXF1ZTogdW5pcXVlSW5kZXgoJ3JlZ2lzdHJ5X3BpcGVsaW5lX2lkX2lkeCcpLm9uKHRhYmxlLnBpcGVsaW5lSWQpLFxufSkpO1xuXG4vKipcbiAqIEV2ZW50IHNvdXJjZSBpZGVudGlmaWVycyBmb3IgcGlwZWxpbmVfZXZlbnRzLlxuICovXG5leHBvcnQgdHlwZSBFdmVudFNvdXJjZSA9ICdjb2RlcGlwZWxpbmUnIHwgJ2NvZGVidWlsZCcgfCAncGx1Z2luLWJ1aWxkJztcblxuLyoqXG4gKiBFdmVudCB0eXBlIGdyYW51bGFyaXR5IGxldmVscyBmb3IgcGlwZWxpbmVfZXZlbnRzLlxuICovXG5leHBvcnQgdHlwZSBFdmVudFR5cGUgPSAnUElQRUxJTkUnIHwgJ1NUQUdFJyB8ICdBQ1RJT04nIHwgJ0JVSUxEJztcblxuLyoqXG4gKiBQaXBlbGluZSBleGVjdXRpb24gYW5kIGJ1aWxkIGV2ZW50cy5cbiAqIENhcHR1cmVzIENvZGVQaXBlbGluZS9Db2RlQnVpbGQgc3RhdGUgY2hhbmdlcyBmcm9tIEV2ZW50QnJpZGdlXG4gKiBhbmQgcGx1Z2luIERvY2tlciBidWlsZCBvdXRjb21lcyBmcm9tIEJ1bGxNUS5cbiAqIEFsbCBldmVudHMgYXJlIG9yZy1zY29wZWQgZm9yIG11bHRpLXRlbmFudCByZXBvcnRpbmcuXG4gKlxuICogQHRhYmxlIHBpcGVsaW5lX2V2ZW50c1xuICovXG5leHBvcnQgY29uc3QgcGlwZWxpbmVFdmVudCA9IHBnVGFibGUoJ3BpcGVsaW5lX2V2ZW50cycsIHtcbiAgaWQ6IHV1aWQoJ2lkJykucHJpbWFyeUtleSgpLmRlZmF1bHRSYW5kb20oKSxcbiAgcGlwZWxpbmVJZDogdXVpZCgncGlwZWxpbmVfaWQnKSxcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICBldmVudFNvdXJjZTogdmFyY2hhcignZXZlbnRfc291cmNlJywgeyBsZW5ndGg6IDUwIH0pLiR0eXBlPEV2ZW50U291cmNlPigpLm5vdE51bGwoKSxcbiAgZXZlbnRUeXBlOiB2YXJjaGFyKCdldmVudF90eXBlJywgeyBsZW5ndGg6IDUwIH0pLiR0eXBlPEV2ZW50VHlwZT4oKS5ub3ROdWxsKCksXG4gIHN0YXR1czogdmFyY2hhcignc3RhdHVzJywgeyBsZW5ndGg6IDIwIH0pLm5vdE51bGwoKSxcbiAgZXhlY3V0aW9uSWQ6IHZhcmNoYXIoJ2V4ZWN1dGlvbl9pZCcsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIHN0YWdlTmFtZTogdmFyY2hhcignc3RhZ2VfbmFtZScsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGFjdGlvbk5hbWU6IHZhcmNoYXIoJ2FjdGlvbl9uYW1lJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgZXJyb3JNZXNzYWdlOiB0ZXh0KCdlcnJvcl9tZXNzYWdlJyksXG4gIHN0YXJ0ZWRBdDogdGltZXN0YW1wKCdzdGFydGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGNvbXBsZXRlZEF0OiB0aW1lc3RhbXAoJ2NvbXBsZXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBkdXJhdGlvbk1zOiBpbnRlZ2VyKCdkdXJhdGlvbl9tcycpLFxuICAvLyBET1JBIGRlcGxveS1hdHRyaWJ1dGlvbiAoYWxsIG51bGxhYmxlOyBwb3B1bGF0ZWQgYXQgaW5nZXN0IHdoZW4gdGhlIHNvdXJjZVxuICAvLyBldmVudCBjYXJyaWVzIHRoZW0g4oCUIGxlZ2FjeS9DSS1vbmx5IGV2ZW50cyBsZWF2ZSB0aGVtIE5VTEwpLiBgZW52aXJvbm1lbnRgXG4gIC8vIGlzIHRoZSBkZXBsb3kgdGFyZ2V0IChlLmcuIFwicHJvZHVjdGlvblwiKTsgaXRzIHByZXNlbmNlIG1hcmtzIGFuIGV4ZWN1dGlvblxuICAvLyBhcyBhIHJlYWwgZGVwbG95bWVudCwgbGV0dGluZyBET1JBIHNjb3BlIHBhc3QgZ2VuZXJpYyBwaXBlbGluZSBydW5zLlxuICAvLyBgY29tbWl0U2hhYC9gY29tbWl0UmVmYCBjYXB0dXJlIHRoZSBzb3VyY2UgcmV2aXNpb24gZm9yIGxlYWQtdGltZSB3b3JrLlxuICBjb21taXRTaGE6IHZhcmNoYXIoJ2NvbW1pdF9zaGEnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBjb21taXRSZWY6IHZhcmNoYXIoJ2NvbW1pdF9yZWYnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBlbnZpcm9ubWVudDogdmFyY2hhcignZW52aXJvbm1lbnQnLCB7IGxlbmd0aDogMjU1IH0pLFxuICAvLyBET1JBIHRydWUtbGVhZC10aW1lIGF0dHJpYnV0aW9uLiBUaGUgZm9yd2FyZGVyIHJlc29sdmVzIHRoZSBzb3VyY2VcbiAgLy8gY29tbWl0IHJhbmdlIGluLWFjY291bnQgYW5kIHJlcG9ydHMgdGhlIE9MREVTVCB1bnNoaXBwZWQgY29tbWl0J3MgdGltZXN0YW1wXG4gIC8vICsgaG93IG1hbnkgY29tbWl0cyBzaGlwcGVkLiBCb3RoIG51bGxhYmxlIOKAlCBldmVudHMgd2hvc2Ugc291cmNlIHR5cGUvdG9rZW5cbiAgLy8gY2FuJ3QgYmUgcmVzb2x2ZWQgbGVhdmUgdGhlbSBOVUxMIGFuZCBsZWFkIHRpbWUgcmVwb3J0cyBgdW5rbm93bmAuXG4gIGNvbW1pdFRpbWVzdGFtcDogdGltZXN0YW1wKCdjb21taXRfdGltZXN0YW1wJywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGNvbW1pdENvdW50OiBpbnRlZ2VyKCdjb21taXRfY291bnQnKSxcbiAgLy8gUGVyLXBsdWdpbiBydW50aW1lIHRlbGVtZXRyeTogdGhlIHBsdWdpbiBhbiBBQ1RJT04vQlVJTEQgZXZlbnQgcmFuLFxuICAvLyBqb2luZWQgYXQgaW5nZXN0IGZyb20gYHBpcGVsaW5lX3N0ZXBfbWFuaWZlc3RzYCBvbiAocGlwZWxpbmVfaWQsXG4gIC8vIHN0YWdlX25hbWUsIGFjdGlvbl9uYW1lKS4gYHBsdWdpblB1Ymxpc2hlcmAgaXMgTlVMTCBmb3IgYW4gb3duLW9yZyBwbHVnaW47XG4gIC8vIGFsbCB0aHJlZSBhcmUgTlVMTCBmb3Igbm9uLXBsdWdpbiBhY3Rpb25zIGFuZCB1bnJlY29yZGVkIHN5bnRocy5cbiAgcGx1Z2luUHVibGlzaGVyOiB2YXJjaGFyKCdwbHVnaW5fcHVibGlzaGVyJywgeyBsZW5ndGg6IDM5IH0pLFxuICAvLyBUaGUgcHVibGlzaGVyJ3MgSUQgKGEgaGFuZGxlIGNhbiBjaGFuZ2Ugb24gYSBjbGFpbSBvciBwcm9maWxlIGNoYW5nZTsgdGhlXG4gIC8vIGxpc3Rpbmcgc3RhdHMgam9pbiBvbiB0aGlzLCBuZXZlciBvbiB0aGUgaGFuZGxlKS4gTlVMTCBsaWtlIHBsdWdpblB1Ymxpc2hlci5cbiAgcGx1Z2luUHVibGlzaGVySWQ6IHV1aWQoJ3BsdWdpbl9wdWJsaXNoZXJfaWQnKSxcbiAgcGx1Z2luTmFtZTogdmFyY2hhcigncGx1Z2luX25hbWUnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBwbHVnaW5WZXJzaW9uOiB2YXJjaGFyKCdwbHVnaW5fdmVyc2lvbicsIHsgbGVuZ3RoOiA1MCB9KSxcbiAgLyoqXG4gICAqIFdoYXQgS0lORCBvZiB0aGluZyBicm9rZSwgZm9yIGEgZmFpbGVkIGFjdGlvbi4gQXNzaWduZWQgYXQgaW5nZXN0IGJ5IHRoZVxuICAgKiBmYWlsdXJlIGNsYXNzaWZpZXIsIG5vdCBkZXJpdmVkIGF0IHJlYWQgdGltZTogdGhlIGVycm9yIHRleHQgaXMgc2NydWJiZWQgYW5kXG4gICAqIGV2ZW50dWFsbHkgc3dlcHQsIHNvIGEgY2F0ZWdvcnkgY29tcHV0ZWQgbGF0ZXIgd291bGQgaGF2ZSBub3RoaW5nIHRvIHJlYWQg4oCUXG4gICAqIGFuZCB0aGUgQUkgc3VtbWFyeSBpcyBzaG93biB0aGUgY2F0ZWdvcnksIG5ldmVyIHRoZSByYXcgZXJyb3IuXG4gICAqL1xuICBmYWlsdXJlQ2F0ZWdvcnk6IHZhcmNoYXIoJ2ZhaWx1cmVfY2F0ZWdvcnknLCB7IGxlbmd0aDogMzAgfSksXG4gIC8qKlxuICAgKiBQcm92ZW5hbmNlLiBgc291cmNlRXZlbnRJZGAgaXMgdGhlIEV2ZW50QnJpZGdlIGV2ZW50IGlkIHRoZSBmb3J3YXJkZXJcbiAgICogcmVjZWl2ZWQgdGhpcyBzdGF0ZSBjaGFuZ2UgYXMgKE5VTEwgZm9yIHBsdWdpbi1idWlsZCBldmVudHMpIOKAlCB0aGVcbiAgICogc3Ryb25nZXN0IGRlZHVwIGtleSB0aGVyZSBpcywgYW5kIHRoZSB0aHJlYWQgYW4gYXVkaXQgcm93IG9yIGEgRE9SQVxuICAgKiBkZXBsb3kgZm9sbG93cyBiYWNrIHRvIHRoZSBleGFjdCBBV1MgZXZlbnQuIGBpbmdlc3RLZXlJZGAgaXMgdGhlIGFjY2Vzcy1rZXlcbiAgICogaWQgb2YgdGhlIGByZXBvcnRpbmc6aW5nZXN0YCBjcmVkZW50aWFsIHRoYXQgd3JvdGUgdGhlIHJvdzogYSBrZXkgSUQsIG5ldmVyXG4gICAqIHRoZSBzZWNyZXQsIHNvIGEgZm9yZ2VkIG9yIG1pc3JvdXRlZCByb3cgbmFtZXMgdGhlIGNyZWRlbnRpYWwgYmVoaW5kIGl0LlxuICAgKi9cbiAgc291cmNlRXZlbnRJZDogdmFyY2hhcignc291cmNlX2V2ZW50X2lkJywgeyBsZW5ndGg6IDEyOCB9KSxcbiAgaW5nZXN0S2V5SWQ6IHZhcmNoYXIoJ2luZ2VzdF9rZXlfaWQnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBkZXRhaWw6IGpzb25iKCdkZXRhaWwnKS4kdHlwZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKSxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICBwaXBlbGluZUlkSWR4OiBpbmRleCgnZXZlbnRfcGlwZWxpbmVfaWRfaWR4Jykub24odGFibGUucGlwZWxpbmVJZCksXG4gIG9yZ0lkSWR4OiBpbmRleCgnZXZlbnRfb3JnX2lkX2lkeCcpLm9uKHRhYmxlLm9yZ0lkKSxcbiAgZXZlbnRUeXBlSWR4OiBpbmRleCgnZXZlbnRfdHlwZV9pZHgnKS5vbih0YWJsZS5ldmVudFR5cGUpLFxuICBzdGF0dXNJZHg6IGluZGV4KCdldmVudF9zdGF0dXNfaWR4Jykub24odGFibGUuc3RhdHVzKSxcbiAgZXhlY3V0aW9uSWRJZHg6IGluZGV4KCdldmVudF9leGVjdXRpb25faWRfaWR4Jykub24odGFibGUuZXhlY3V0aW9uSWQpLFxuICBjcmVhdGVkQXRJZHg6IGluZGV4KCdldmVudF9jcmVhdGVkX2F0X2lkeCcpLm9uKHRhYmxlLmNyZWF0ZWRBdCksXG4gIG9yZ1R5cGVDcmVhdGVkSWR4OiBpbmRleCgnZXZlbnRfb3JnX3R5cGVfY3JlYXRlZF9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUuZXZlbnRUeXBlLCB0YWJsZS5jcmVhdGVkQXQpLFxuICBvcmdTb3VyY2VTdGF0dXNJZHg6IGluZGV4KCdldmVudF9vcmdfc291cmNlX3N0YXR1c19pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUuZXZlbnRTb3VyY2UsIHRhYmxlLnN0YXR1cyksXG4gIC8vIElkZW1wb3RlbmN5OiBFdmVudEJyaWRnZSDihpIgU1FTIGlzIGF0LWxlYXN0LW9uY2UsIHNvIHRoZSBzYW1lIHN0YXRlLWNoYW5nZVxuICAvLyBjYW4gYmUgZGVsaXZlcmVkIHR3aWNlLiBUaGlzIHBhcnRpYWwgdW5pcXVlIGluZGV4IGRlZHVwcyByZS1kZWxpdmVyaWVzXG4gIC8vIChwYWlyZWQgd2l0aCBgb25Db25mbGljdERvTm90aGluZ2AgaW4gcmVwb3J0aW5nLXNlcnZpY2UuaW5nZXN0RXZlbnRzKS5cbiAgLy8gUGFydGlhbCAoZXhlY3V0aW9uX2lkIElTIE5PVCBOVUxMKSBiZWNhdXNlIHRoYXQncyB0aGUgbmF0dXJhbCBwZXItZXZlbnRcbiAgLy8ga2V5OyBldmVudHMgd2l0aG91dCBhbiBleGVjdXRpb25JZCAocmFyZSkgYXJlbid0IGRlZHVwZWQsIHdoaWNoIGlzIHNhZmUuXG4gIC8vIEluY2x1ZGVzIHBpcGVsaW5lX2lkIHNvIGEgKHRoZW9yZXRpY2FsKSBleGVjdXRpb24taWQgcmV1c2UgYWNyb3NzIHBpcGVsaW5lc1xuICAvLyBjYW4ndCBjb2xsaWRlICh0aGUgQVJOIGlzIG5vdCBwYXJ0IG9mIHRoZSByb3cpLlxuICAvL1xuICAvLyBDT0FMRVNDRSB0aGUgbnVsbGFibGUgcGFydHMgdG8gc2VudGluZWxzIChleHByZXNzaW9uIGluZGV4KTogUElQRUxJTkUvU1RBR0UvXG4gIC8vIEJVSUxEIGV2ZW50cyBsZWF2ZSBzdGFnZV9uYW1lL2FjdGlvbl9uYW1lIE5VTEwgKHBsdWdpbi1idWlsZCBhbHNvIHBpcGVsaW5lX2lkXG4gIC8vIE5VTEwpLCBhbmQgUG9zdGdyZXMgdHJlYXRzIE5VTExzIGFzIERJU1RJTkNUIGluIGEgdW5pcXVlIGluZGV4IOKAlCBzbyB0aGUgcGxhaW5cbiAgLy8gY29sdW1uIGluZGV4IG5ldmVyIG1hdGNoZXMgZm9yIHRob3NlIHR5cGVzIGFuZCBvbkNvbmZsaWN0RG9Ob3RoaW5nIGNhbid0IGRlZHVwXG4gIC8vIHRoZWlyIGF0LWxlYXN0LW9uY2UgcmUtZGVsaXZlcmllcy4gQ29sbGFwc2luZyBOVUxM4oaSJycgbWFrZXMgZXF1YWwgZXZlbnRzIGVxdWFsLlxuICAvLyAoZHJpenpsZSdzIHVuaXF1ZUluZGV4IGNhbid0IGV4cHJlc3MgTlVMTFMgTk9UIERJU1RJTkNUIG9uIGEgcGFydGlhbCBpbmRleCwgc29cbiAgLy8gd2UgdXNlIHRoZSBlcXVpdmFsZW50IGV4cHJlc3Npb24gaW5kZXguKSBDcmVhdGVkIGJ5IHBvc3RncmVzLWluaXQuc3FsLlxuICBkZWR1cElkeDogdW5pcXVlSW5kZXgoJ2V2ZW50X2RlZHVwX2lkeCcpXG4gICAgLm9uKFxuICAgICAgc3FsYGNvYWxlc2NlKCR7dGFibGUucGlwZWxpbmVJZH06OnRleHQsICcnKWAsXG4gICAgICB0YWJsZS5leGVjdXRpb25JZCxcbiAgICAgIHRhYmxlLmV2ZW50VHlwZSxcbiAgICAgIHRhYmxlLnN0YXR1cyxcbiAgICAgIHNxbGBjb2FsZXNjZSgke3RhYmxlLnN0YWdlTmFtZX0sICcnKWAsXG4gICAgICBzcWxgY29hbGVzY2UoJHt0YWJsZS5hY3Rpb25OYW1lfSwgJycpYCxcbiAgICApXG4gICAgLndoZXJlKHNxbGBleGVjdXRpb25faWQgSVMgTk9UIE5VTExgKSxcbiAgLy8gU3Ryb25nZXN0IGRlZHVwIGtleSB3aGVuIHRoZSBwcm9kdWNlciBoYXMgb25lOiBhbiBFdmVudEJyaWRnZSBldmVudCBpZCBpc1xuICAvLyB1bmlxdWUgcGVyIEFXUyBzdGF0ZSBjaGFuZ2UsIHNvIGFuIFNRUyByZWRlbGl2ZXJ5IG9yIERMUSByZWRyaXZlIG9mIHRoZSBzYW1lXG4gIC8vIGV2ZW50IGNvbGxhcHNlcyBoZXJlIGV2ZW4gd2l0aG91dCBhbiBleGVjdXRpb25faWQuIFBhcnRpYWwg4oCUIHBsdWdpbi1idWlsZFxuICAvLyBldmVudHMgY2Fycnkgbm9uZS4gQSBzZWNvbmQgT04gQ09ORkxJQ1QgRE8gTk9USElORyBhcmJpdGVyIGZvciBpbmdlc3RFdmVudHMuXG4gIC8vIENyZWF0ZWQgYnkgcG9zdGdyZXMtaW5pdC5zcWwuXG4gIHNvdXJjZUV2ZW50SWR4OiB1bmlxdWVJbmRleCgnZXZlbnRfc291cmNlX2V2ZW50X2lkeCcpXG4gICAgLm9uKHRhYmxlLnNvdXJjZUV2ZW50SWQpXG4gICAgLndoZXJlKHNxbGBzb3VyY2VfZXZlbnRfaWQgSVMgTk9UIE5VTExgKSxcbiAgLy8gRE9SQSBkZXBsb3ktc2NvcGVkIHJlYWRzOiBvbmx5IFBJUEVMSU5FLWxldmVsIGV4ZWN1dGlvbnMgdGFnZ2VkIHdpdGggYVxuICAvLyBkZXBsb3kgZW52aXJvbm1lbnQuIGBldmVudF90eXBlYCBpcyBpbiB0aGUgaW5kZXggYmVjYXVzZSB0aGUgZXZlbnRzIExhbWJkYVxuICAvLyB0YWdzIEVWRVJZIGV2ZW50IG9mIGEgZGVwbG95ZWQgcGlwZWxpbmUgKFNUQUdFL0FDVElPTiB0b28pLCB3aGlsZSB0aGUgRE9SQVxuICAvLyBzY2FuIHdhbnRzIG9ubHkgYGV2ZW50X3R5cGU9J1BJUEVMSU5FJ2Ag4oCUIGluY2x1ZGluZyBpdCByZXN0b3JlcyBzZWxlY3Rpdml0eS5cbiAgLy8gUGFydGlhbCAoZW52aXJvbm1lbnQgSVMgTk9UIE5VTEwpIGtlZXBzIGl0IHNtYWxsIOKAlCBsZWdhY3kvQ0ktb25seSBldmVudHNcbiAgLy8gYXJlbid0IGluZGV4ZWQuIFRoZSBkZWZhdWx0IHJ1bi1iYXNlZCBET1JBIHBhdGggKG5vIGVudmlyb25tZW50KSBjYW4ndCB1c2VcbiAgLy8gdGhpcyBwYXJ0aWFsIGluZGV4OyBpdCByZWxpZXMgb24gZXZlbnRfcGlwZWxpbmVfdHlwZV9zdGFydGVkX2lkeCBiZWxvdy5cbiAgLy8gQ3JlYXRlZCBieSBwb3N0Z3Jlcy1pbml0LnNxbC5cbiAgZW52VHlwZVN0YXJ0ZWRJZHg6IGluZGV4KCdldmVudF9lbnZfdHlwZV9zdGFydGVkX2lkeCcpXG4gICAgLm9uKHRhYmxlLmVudmlyb25tZW50LCB0YWJsZS5ldmVudFR5cGUsIHRhYmxlLnN0YXJ0ZWRBdClcbiAgICAud2hlcmUoc3FsYGVudmlyb25tZW50IElTIE5PVCBOVUxMYCksXG4gIC8vIHN0YXJ0ZWRfYXQgcmFuZ2Ugc2NhbnM6IGV2ZXJ5IENhdGVnb3J5LTEgcmVwb3J0IGFuZCB0aGUgZGVmYXVsdCBydW4tYmFzZWRcbiAgLy8gRE9SQSBwYXRoIGZpbHRlcnMgYGV2ZW50X3R5cGU9J1BJUEVMSU5FJyBBTkQgc3RhcnRlZF9hdCBCRVRXRUVOIOKApmAgam9pbmVkIG9uXG4gIC8vIHBpcGVsaW5lX2lkLCBidXQgdGhlIG90aGVyIGV2ZW50IGNvbXBvc2l0ZSBpbmRleCBpcyBvbiBjcmVhdGVkX2F0LCBub3RcbiAgLy8gc3RhcnRlZF9hdCDigJQgc28gdGhlIHJhbmdlIHNjYW4gaGFkIG5vIGlkZWFsIGluZGV4LiBUaGlzIGNvbXBvc2l0ZSBzZXJ2ZXMgdGhlXG4gIC8vIGpvaW4tZHJpdmVuIHNjYW4gYnkgcGlwZWxpbmVfaWQuIENyZWF0ZWQgYnkgcG9zdGdyZXMtaW5pdC5zcWwuXG4gIHBpcGVsaW5lVHlwZVN0YXJ0ZWRJZHg6IGluZGV4KCdldmVudF9waXBlbGluZV90eXBlX3N0YXJ0ZWRfaWR4JylcbiAgICAub24odGFibGUucGlwZWxpbmVJZCwgdGFibGUuZXZlbnRUeXBlLCB0YWJsZS5zdGFydGVkQXQpLFxuICAvLyBET1JBIGRlcGxveS1iYXNpcyBzY2FuOiBkZXBsb3ltZW50IGZyZXF1ZW5jeSAvIGRlcGxveS10aW1lIENGUiAvXG4gIC8vIGxlYWQgdGltZSBhbGwgZ3JvdXAgZGVwbG95LXN0YWdlIGV2ZW50cyBieSBlbnZpcm9ubWVudCBvdmVyIGEgY29tcGxldGVkX2F0XG4gIC8vIHdpbmRvdy4gVGhpcyBjb21wb3NpdGUgc2VydmVzIHRoYXQgZ3JvdXBlZCBvcmctc2NvcGVkIHNjYW4gZGlyZWN0bHkuXG4gIC8vIENyZWF0ZWQgYnkgcG9zdGdyZXMtaW5pdC5zcWwuXG4gIG9yZ0VudkNvbXBsZXRlZElkeDogaW5kZXgoJ2V2ZW50X29yZ19lbnZfY29tcGxldGVkX2lkeCcpXG4gICAgLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5lbnZpcm9ubWVudCwgdGFibGUuY29tcGxldGVkQXQpLFxuICAvLyBET1JBIGxlYWQgdGltZTogdGhlIGBleGVjX2NvbW1pdHNgIENURSBwcm9iZXMgY29tbWl0LWNhcnJ5aW5nIGV2ZW50cyBieVxuICAvLyBleGVjdXRpb25faWQgYW5kIHRha2VzIE1JTihjb21taXRfdGltZXN0YW1wKS4gUGFydGlhbCArIGV4ZWN1dGlvbl9pZC1sZWFkaW5nIHNvXG4gIC8vIHRoZSBJTi1saXN0IHByb2JlIGlzIGFuIGluZGV4IHNjYW4gYW5kIHRoZSBNSU4gY29tZXMgZnJvbSB0aGUgaW5kZXguIEEgYmFyZVxuICAvLyBpbmRleCBvbiBjb21taXRfdGltZXN0YW1wIHdvdWxkIG5vdCBzZXJ2ZSBpdCDigJQgbm90aGluZyBmaWx0ZXJzIG9uIGEgcmFuZ2UuXG4gIC8vIENyZWF0ZWQgYnkgcG9zdGdyZXMtaW5pdC5zcWwuXG4gIGV4ZWNDb21taXRUc0lkeDogaW5kZXgoJ2V2ZW50X2V4ZWNfY29tbWl0X3RzX2lkeCcpXG4gICAgLm9uKHRhYmxlLmV4ZWN1dGlvbklkLCB0YWJsZS5jb21taXRUaW1lc3RhbXApXG4gICAgLndoZXJlKHNxbGBjb21taXRfdGltZXN0YW1wIElTIE5PVCBOVUxMYCksXG4gIC8vIFBlci1wbHVnaW4gcnVudGltZSByZXBvcnRpbmcgKHN1Y2Nlc3MgcmF0ZSAvIGR1cmF0aW9uIHBlciBwbHVnaW4gdmVyc2lvbikuXG4gIC8vIFBhcnRpYWw6IHRoZSBidWxrIG9mIG5vbi1wbHVnaW4gZXZlbnRzIGlzIG5ldmVyIGluZGV4ZWQuXG4gIHBsdWdpbklkeDogaW5kZXgoJ2V2ZW50X3BsdWdpbl9pZHgnKVxuICAgIC5vbih0YWJsZS5wbHVnaW5QdWJsaXNoZXIsIHRhYmxlLnBsdWdpbk5hbWUsIHRhYmxlLnBsdWdpblZlcnNpb24sIHRhYmxlLmNvbXBsZXRlZEF0KVxuICAgIC53aGVyZShzcWxgcGx1Z2luX25hbWUgSVMgTk9UIE5VTExgKSxcbiAgLy8gTGlzdGluZyBhZG9wdGlvbiAvIHN1Y2Nlc3MgcmF0ZSAocGx1Z2luIHN0YXRzIHN3ZWVwKSwga2V5ZWQgb24gdGhlIHB1Ymxpc2hlciBpZC5cbiAgcGx1Z2luUHVibGlzaGVySWRJZHg6IGluZGV4KCdldmVudF9wbHVnaW5fcHVibGlzaGVyX2lkX2lkeCcpXG4gICAgLm9uKHRhYmxlLnBsdWdpblB1Ymxpc2hlcklkLCB0YWJsZS5wbHVnaW5OYW1lLCB0YWJsZS5jb21wbGV0ZWRBdClcbiAgICAud2hlcmUoc3FsYHBsdWdpbl9wdWJsaXNoZXJfaWQgSVMgTk9UIE5VTExgKSxcbn0pKTtcblxuLyoqXG4gKiBNYW51YWwgcG9zdC1kZXBsb3kgb3V0Y29tZSBtYXJrZXJzLiBBIHVzZXIgbWFya3MgYSBkZXBsb3ltZW50XG4gKiBgZmFpbGVkYCAocHJvZHVjdGlvbiBpbmNpZGVudCBsaW5rZWQgdG8gYSBkZXBsb3kpIG9yIGByZXN0b3JlZGAgKHJlY292ZXJlZCkuXG4gKiBUaGVzZSBmZWVkIHRoZSBET1JBIHBvc3QtZGVwbG95IENoYW5nZSBGYWlsdXJlIFJhdGUgY29tcG9uZW50IGFuZCB0aGUgcmVhbFxuICogTVRUUiAocmVzdG9yZWQg4oiSIGRlcGxveWVkKS4gQ29ycmVsYXRlZCB0byBhIGRlcGxveSBleGVjdXRpb24gYnkgYGV4ZWN1dGlvbklkYC5cbiAqXG4gKiBAdGFibGUgZGVwbG95bWVudF9vdXRjb21lc1xuICovXG5leHBvcnQgY29uc3QgZGVwbG95bWVudE91dGNvbWUgPSBwZ1RhYmxlKCdkZXBsb3ltZW50X291dGNvbWVzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICBleGVjdXRpb25JZDogdmFyY2hhcignZXhlY3V0aW9uX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgZW52aXJvbm1lbnQ6IHZhcmNoYXIoJ2Vudmlyb25tZW50JywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgb3V0Y29tZTogdmFyY2hhcignb3V0Y29tZScsIHsgbGVuZ3RoOiAyMCB9KS4kdHlwZTwnZmFpbGVkJyB8ICdyZXN0b3JlZCc+KCkubm90TnVsbCgpLFxuICBhdDogdGltZXN0YW1wKCdhdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLm5vdE51bGwoKSxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICBvcmdFbnZJZHg6IGluZGV4KCdkZXBsb3ltZW50X291dGNvbWVzX29yZ19lbnZfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmVudmlyb25tZW50KSxcbiAgZXhlY3V0aW9uSWR4OiBpbmRleCgnZGVwbG95bWVudF9vdXRjb21lc19leGVjdXRpb25faWR4Jykub24odGFibGUuZXhlY3V0aW9uSWQpLFxuICAvLyBJZGVtcG90ZW50IHJlLW1hcmtpbmc6IG9uZSByb3cgcGVyIChleGVjdXRpb24sIG91dGNvbWUpLiBSZS1wb3N0aW5nIHRoZSBzYW1lXG4gIC8vIG91dGNvbWUgZm9yIGEgZGVwbG95IGlzIGEgbm8tb3AvcmVmcmVzaCAob25Db25mbGljdERvVXBkYXRlIHRoZSBgYXRgKSwgc28gYVxuICAvLyBmYWlsZWTihpJyZXN0b3JlZCBwYWlyIGlzIHR3byByb3dzIHdoaWxlIGEgZHVwbGljYXRlIFBPU1QgZG9lc24ndCBkb3VibGUtY291bnQuXG4gIGV4ZWN1dGlvbk91dGNvbWVVbmlxdWU6IHVuaXF1ZUluZGV4KCdkZXBsb3ltZW50X291dGNvbWVzX2V4ZWN1dGlvbl9vdXRjb21lX3VuaXF1ZScpXG4gICAgLm9uKHRhYmxlLmV4ZWN1dGlvbklkLCB0YWJsZS5vdXRjb21lKSxcbn0pKTtcblxuLyoqXG4gKiBQZXItb3JnIGluZ2VzdGlvbiBoZWFsdGguIFRoZSBBV1MgZXZlbnRzIExhbWJkYSBwZXJpb2RpY2FsbHkgcG9zdHNcbiAqIGZvcndhcmRlZC9kcm9wcGVkIGNvdW50ZXJzICsgdGhlIGxhc3QgZXZlbnQgdGltZXN0YW1wIHNvIHRoZSBSZXBvcnRzIFVJIGNhblxuICogc2hvdyB3aGV0aGVyIGV2ZW50cyBhcmUgZmxvd2luZyAvIHN0YWxlIC8gZHJvcHBpbmcuIE9uZSByb3cgcGVyIG9yZy5cbiAqXG4gKiBAdGFibGUgaW5nZXN0X2hlYWx0aFxuICovXG5leHBvcnQgY29uc3QgaW5nZXN0SGVhbHRoID0gcGdUYWJsZSgnaW5nZXN0X2hlYWx0aCcsIHtcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkucHJpbWFyeUtleSgpLFxuICBsYXN0RXZlbnRBdDogdGltZXN0YW1wKCdsYXN0X2V2ZW50X2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGZvcndhcmRlZDogYmlnaW50KCdmb3J3YXJkZWQnLCB7IG1vZGU6ICdudW1iZXInIH0pLFxuICBkcm9wcGVkOiBiaWdpbnQoJ2Ryb3BwZWQnLCB7IG1vZGU6ICdudW1iZXInIH0pLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG59KTtcblxuLyoqXG4gKiBQcm9kdWN0aW9uIGluY2lkZW50cyBpbmdlc3RlZCBmcm9tIHRoZSBvcmcncyBpbmNpZGVudCB0b29saW5nLiBUaGVcbiAqIHVzZXIgcG9pbnRzIHRoZWlyIEFsZXJ0bWFuYWdlciAvIFBhZ2VyRHV0eSAvIERhdGFkb2cgd2ViaG9vayBhdFxuICogYFBPU1QgL2FwaS9yZXBvcnRzL2luY2lkZW50c2AgKG1hY2hpbmUgYHJlcG9ydGluZzppbmdlc3RgIHNjb3BlKS4gRWFjaCBpbmNpZGVudFxuICogY2FycmllcyBpdHMgZXh0ZXJuYWwgaWQsIHRoZSBhZmZlY3RlZCBgZW52aXJvbm1lbnRgLCB3aGVuIGl0IG9wZW5lZCwgYW5kIHdoZW5cbiAqIGl0IHdhcyByZXNvbHZlZCAobnVsbGFibGUg4oCUIGEgbGF0ZXIgcmVzb2x2ZSB1cGRhdGVzIGl0KS4gRE9SQSBjb3JyZWxhdGVzIGVhY2hcbiAqIGluY2lkZW50IHRvIHRoZSBtb3N0IHJlY2VudCBzdWNjZXNzZnVsIGRlcGxveSB0byBgZW52aXJvbm1lbnRgIHdpdGhpblxuICogYERPUkFfSU5DSURFTlRfV0lORE9XX0hPVVJTYCwgdHVybmluZyBpdCBpbnRvIGFuIGF1dG9tYXRlZCBwb3N0LWRlcGxveSBmYWlsdXJlXG4gKiAoQ2hhbmdlIEZhaWx1cmUgUmF0ZSkgYW5kIGEgcmVhbCByZWNvdmVyeSB0aW1lIChgcmVzb2x2ZWRfYXQg4oiSIG9wZW5lZF9hdGAgTVRUUikuXG4gKiBgaW5jaWRlbnRfaWRgIGlzIFVOSVFVRSBwZXIgb3JnIHNvIGEgcmVzb2x2ZSByZS1wb3N0IGlzIGFuIGlkZW1wb3RlbnQgdXBzZXJ0LlxuICpcbiAqIEB0YWJsZSBpbmNpZGVudHNcbiAqL1xuZXhwb3J0IGNvbnN0IGluY2lkZW50ID0gcGdUYWJsZSgnaW5jaWRlbnRzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICAvLyBFeHRlcm5hbCBpbmNpZGVudCBpZCBmcm9tIHRoZSBzb3VyY2Ugc3lzdGVtIChQYWdlckR1dHkvRGF0YWRvZy9BbGVydG1hbmFnZXIpLlxuICAvLyBVbmlxdWUgUEVSIE9SRyAoc2VlIGluY2lkZW50T3JnVW5pcXVlKSDigJQgdGhlIGlkZW1wb3RlbmN5ICsgdXBzZXJ0IGtleS5cbiAgaW5jaWRlbnRJZDogdmFyY2hhcignaW5jaWRlbnRfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICAvLyBBZmZlY3RlZCBkZXBsb3kgZW52aXJvbm1lbnQgKGUuZy4gXCJwcm9kdWN0aW9uXCIpLiBDb3JyZWxhdGVkIHRvIGEgZGVwbG95IGVudi5cbiAgZW52aXJvbm1lbnQ6IHZhcmNoYXIoJ2Vudmlyb25tZW50JywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIG9wZW5lZEF0OiB0aW1lc3RhbXAoJ29wZW5lZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLm5vdE51bGwoKSxcbiAgLy8gTlVMTCB3aGlsZSB0aGUgaW5jaWRlbnQgaXMgb3BlbjsgYSBsYXRlciByZXNvbHZlIHdlYmhvb2sgc2V0cyBpdCAoaWRlbXBvdGVudFxuICAvLyB1cHNlcnQpLiBgcmVzb2x2ZWRfYXQg4oiSIG9wZW5lZF9hdGAgaXMgdGhlIHJlYWwgTVRUUiBmb3IgdGhlIGNvcnJlbGF0ZWQgZGVwbG95LlxuICByZXNvbHZlZEF0OiB0aW1lc3RhbXAoJ3Jlc29sdmVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIHNldmVyaXR5OiB2YXJjaGFyKCdzZXZlcml0eScsIHsgbGVuZ3RoOiA1MCB9KS5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgLy8gQ29ycmVsYXRpb24gc2NhbjogbW9zdC1yZWNlbnQtZGVwbG95LWJlZm9yZS1vcGVuIGxvb2t1cHMgZ3JvdXAgYnkgKG9yZywgZW52KVxuICAvLyBhbmQgcmFuZ2Ugb24gb3BlbmVkX2F0LlxuICBvcmdFbnZPcGVuZWRJZHg6IGluZGV4KCdpbmNpZGVudHNfb3JnX2Vudl9vcGVuZWRfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmVudmlyb25tZW50LCB0YWJsZS5vcGVuZWRBdCksXG4gIC8vIElkZW1wb3RlbnQgdXBzZXJ0IC8gZGVkdXA6IG9uZSByb3cgcGVyIChvcmcsIGluY2lkZW50X2lkKS4gQSByZXNvbHZlIHJlLXBvc3RcbiAgLy8gdXBkYXRlcyByZXNvbHZlZF9hdCBpbnN0ZWFkIG9mIGluc2VydGluZyBhIGR1cGxpY2F0ZS5cbiAgb3JnSW5jaWRlbnRVbmlxdWU6IHVuaXF1ZUluZGV4KCdpbmNpZGVudHNfb3JnX2luY2lkZW50X3VuaXF1ZScpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5pbmNpZGVudElkKSxcbn0pKTtcblxuLyoqXG4gKiBQZXItb3JnIERPUkEgY29tcHV0YXRpb24gKyByZXRlbnRpb24gb3ZlcnJpZGVzLiBPbmUgcm93IHBlciBvcmcgKG9yZ19pZCBQSykuXG4gKiBgaW5jaWRlbnRXaW5kb3dIb3Vyc2Agb3ZlcnJpZGVzIHRoZSBnbG9iYWwgYERPUkFfSU5DSURFTlRfV0lORE9XX0hPVVJTYFxuICogdXNlZCB0byBjb3JyZWxhdGUgYW4gaW5nZXN0ZWQgaW5jaWRlbnQgdG8gdGhlIG1vc3QgcmVjZW50IHN1Y2Nlc3NmdWwgZGVwbG95LlxuICogYGV2ZW50UmV0ZW50aW9uRGF5c2AgLyBgZG9yYVJldGVudGlvbkRheXNgIG92ZXJyaWRlIHRoZSBnbG9iYWwgcmVwb3J0aW5nXG4gKiByZXRlbnRpb24gd2luZG93cyBmb3IgdGhlIHNwbGl0IHN3ZWVwIOKAlCBzdGFuZGFyZCBldmVudHMgKGBlbnZpcm9ubWVudCBJUyBOVUxMYClcbiAqIHZzIERPUkEgc291cmNlIChkZXBsb3kgc3RhZ2VzICsgYGRlcGxveW1lbnRfb3V0Y29tZXNgICsgYGluY2lkZW50c2ApLiBBbnkgTlVMTCAvXG4gKiBhYnNlbnQgdmFsdWUgZmFsbHMgYmFjayB0byBpdHMgZW52IGRlZmF1bHQuIFNldCBzZWxmLXNlcnZlIGJ5IGFuIG9yZyBhZG1pbiB2aWFcbiAqIGBQVVQgL2FwaS9yZXBvcnRzL3NldHRpbmdzL2luY2lkZW50c2AuIFRoaXMgdGFibGUgaXMgaXRzZWxmIG5ldmVyIHB1cmdlZC5cbiAqXG4gKiBAdGFibGUgZG9yYV9zZXR0aW5nc1xuICovXG5leHBvcnQgY29uc3QgZG9yYVNldHRpbmdzID0gcGdUYWJsZSgnZG9yYV9zZXR0aW5ncycsIHtcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkucHJpbWFyeUtleSgpLFxuICBpbmNpZGVudFdpbmRvd0hvdXJzOiBpbnRlZ2VyKCdpbmNpZGVudF93aW5kb3dfaG91cnMnKSxcbiAgLy8gUmV0ZW50aW9uIG92ZXJyaWRlcyAoZGF5cykuIE5VTEwg4oeSIHVzZSB0aGUgZ2xvYmFsIGVudiBkZWZhdWx0XG4gIC8vIChSRVBPUlRJTkdfRVZFTlRfUkVURU5USU9OX0RBWVMgLyBSRVBPUlRJTkdfRE9SQV9SRVRFTlRJT05fREFZUykuXG4gIGV2ZW50UmV0ZW50aW9uRGF5czogaW50ZWdlcignZXZlbnRfcmV0ZW50aW9uX2RheXMnKSxcbiAgZG9yYVJldGVudGlvbkRheXM6IGludGVnZXIoJ2RvcmFfcmV0ZW50aW9uX2RheXMnKSxcbiAgLyoqXG4gICAqIFN0YWtlaG9sZGVyLXJlcG9ydCBQT0xJQ1kg4oCUIGFkbWluLW93bmVkLCBkZWxpYmVyYXRlbHkgTk9UIG9uXG4gICAqIGByZXBvcnRfZGVmaW5pdGlvbnNgLiBBIGxlYWQgY29tcG9zZXMgdGhlIHJlcG9ydDsgd2hvIG1heSByZWNlaXZlIGl0IGlzIHRoZVxuICAgKiBvcmcncyBjYWxsLCBzbyBhIGxlYWQgY2Fubm90IHdpZGVuIHRoZWlyIG93biByZXBvcnQncyBhdWRpZW5jZS5cbiAgICpcbiAgICogU2hhcmluZyBzdGFydHMgT0ZGOiBtaW50aW5nIGEgcHVibGljIGxpbmsgdHVybnMgaW50ZXJuYWwgZGVsaXZlcnkgbnVtYmVyc1xuICAgKiBpbnRvIGEgVVJMIGFueW9uZSBob2xkaW5nIGl0IGNhbiByZWFkLCB3aGljaCBpcyBhIGRlY2lzaW9uIGFuIGFkbWluIG1ha2VzXG4gICAqIG9uY2UgZm9yIHRoZSBvcmcsIG5vdCBhIGNoZWNrYm94IG9uIGV2ZXJ5IHJlcG9ydC5cbiAgICovXG4gIHJlcG9ydEV4dGVybmFsU2hhcmluZzogYm9vbGVhbigncmVwb3J0X2V4dGVybmFsX3NoYXJpbmcnKS5kZWZhdWx0KGZhbHNlKS5ub3ROdWxsKCksXG4gIC8qKiBBbGxvd2VkIHJlY2lwaWVudCBkb21haW5zLiBOVUxMIOKHkiBvcmcgbWVtYmVycyBvbmx5LCBubyBleHRlcm5hbCBhZGRyZXNzZXMuICovXG4gIHJlcG9ydFJlY2lwaWVudERvbWFpbnM6IGpzb25iKCdyZXBvcnRfcmVjaXBpZW50X2RvbWFpbnMnKS4kdHlwZTxzdHJpbmdbXT4oKSxcbiAgLyoqIEFuIGV4dGVybmFsIGFkZHJlc3MgbmVlZHMgYW4gYWRtaW4ncyBhcHByb3ZhbCBiZWZvcmUgYW55dGhpbmcgaXMgZGVsaXZlcmVkLiAqL1xuICByZXBvcnRSZXF1aXJlQXBwcm92YWw6IGJvb2xlYW4oJ3JlcG9ydF9yZXF1aXJlX2FwcHJvdmFsJykuZGVmYXVsdCh0cnVlKS5ub3ROdWxsKCksXG4gIC8vIGByZXBvcnRfc25hcHNob3RfcmV0ZW50aW9uX2RheXNgIHdhcyBERUxFVEVEIGhlcmUuIEl0IHByb21pc2VkIGEgcGVyLW9yZyBvdmVycmlkZSBmb3JcbiAgLy8gaG93IGxvbmcgYSBwdWJsaXNoZWQgcmVwb3J0J3Mgc25hcHNob3QgaXMga2VwdCwgYW5kIGl0IHdhcyBVTlJFQUNIQUJMRSBpbiBib3RoXG4gIC8vIGRpcmVjdGlvbnM6IG5vIHJvdXRlIGV2ZXIgd3JvdGUgaXQgYW5kIG5vIHN3ZWVwIGV2ZXIgcmVhZCBpdCwgc28gYW4gYWRtaW4gY291bGQgbm90XG4gIC8vIHNldCBpdCBhbmQgaXQgd291bGQgbm90IGhhdmUgbWF0dGVyZWQgaWYgdGhleSBoYWQuIFNuYXBzaG90IGxpZmV0aW1lIGNvbWVzIGZyb20gdGhlXG4gIC8vIHJ1bidzIG93biBgcHVyZ2VfYWZ0ZXJgIChyZXBvcnRpbmctcmV0ZW50aW9uLnRzKSwgYW5kIHRoZSBwZXItb3JnIGRpbWVuc2lvbiBpcyB0aGVcbiAgLy8gVElFUiBwbHVzIHRoZSByZXRlbnRpb24gLyBET1JBLWhpc3RvcnkgcGFja3MuXG4gIC8qKlxuICAgKiBPcHRpb25hbCwgT0ZGIGJ5IGRlZmF1bHQ6IG1pbnV0ZXMgdGhlIG9yZyByZWNrb25zIGl0IHNhdmVzIHBlciBwaXBlbGluZVxuICAgKiBjcmVhdGVkLCBmb3IgdGhlIGFkb3B0aW9uIHNlY3Rpb24uIE9mZiBieSBkZWZhdWx0IGJlY2F1c2UgYVxuICAgKiBwbGF0Zm9ybS1zdXBwbGllZCBudW1iZXIgaGVyZSB3b3VsZCBiZSB0aGUgcGxhdGZvcm0gbWFya2luZyBpdHMgb3duIGhvbWV3b3JrO1xuICAgKiBpdCBvbmx5IG1lYW5zIGFueXRoaW5nIHdoZW4gdGhlIGN1c3RvbWVyIGNob3NlIGl0LlxuICAgKi9cbiAgdGltZVNhdmVkTWludXRlc1BlclBpcGVsaW5lOiBpbnRlZ2VyKCd0aW1lX3NhdmVkX21pbnV0ZXNfcGVyX3BpcGVsaW5lJyksXG4gIC8qKlxuICAgKiBUaGUgb3JnJ3MgbmVlZHMtYXR0ZW50aW9uIHRocmVzaG9sZHMsIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHRzIFBFUiBGSUVMRC5cbiAgICpcbiAgICogT25lIGpzb25iIHJhdGhlciB0aGFuIGZpdmUgY29sdW1uczogdGhlIHNldCBpcyBjbG9zZWQgYW5kIHNtYWxsLCBpdCBpcyByZWFkIGFzIGFcbiAgICogdW5pdCBieSBleGFjdGx5IG9uZSBldmFsdWF0b3IsIGFuZCBhbiBvcmcgdGhhdCBzZXRzIG9uZSB0aHJlc2hvbGQgbXVzdCBrZWVwIHRoZVxuICAgKiBkZWZhdWx0cyBmb3IgdGhlIG90aGVyIGZvdXIg4oCUIHdoaWNoIGEgcGFydGlhbCBvYmplY3QgZXhwcmVzc2VzIGRpcmVjdGx5IGFuZCBmaXZlXG4gICAqIG51bGxhYmxlIGNvbHVtbnMgd291bGQgb25seSBpbXBseS5cbiAgICpcbiAgICogQ29uZmlndXJhYmxlIGF0IGFsbCBiZWNhdXNlIDkwJSBzdWNjZXNzIGlzIGEgY3Jpc2lzIGZvciBhIGRlcGxveSBwaXBlbGluZSBhbmRcbiAgICogdW5yZW1hcmthYmxlIGZvciBhIGZsYWt5IGludGVncmF0aW9uIHN1aXRlIHNvbWVib2R5IGlzIGFscmVhZHkgcmV3cml0aW5nOyBhXG4gICAqIHBsYXRmb3JtLWltcG9zZWQgbnVtYmVyIHdvdWxkIGJlIHdyb25nIGZvciBvbmUgb2YgdGhlbSBieSBjb25zdHJ1Y3Rpb24uXG4gICAqL1xuICByZXBvcnRBdHRlbnRpb25UaHJlc2hvbGRzOiBqc29uYigncmVwb3J0X2F0dGVudGlvbl90aHJlc2hvbGRzJykuJHR5cGU8UmVjb3JkPHN0cmluZywgbnVtYmVyPj4oKSxcbiAgLyoqXG4gICAqIFdoZW4gdGhpcyBvcmcgc3BlbnQgaXRzIE9ORSBmcmVlIHdhdGVybWFya2VkIHJlcG9ydCBwcmV2aWV3LlxuICAgKlxuICAgKiBPbmNlLCBldmVyLCBhbmQgbmV2ZXIgcmVzZXQg4oCUIG5vdCBwZXIgbW9udGgsIG5vdCBwZXIgdXNlci4gVGhlIHByZXZpZXcgZXhpc3RzIHNvIGFcbiAgICogbGVhZCBjYW4gc2VlIHRoZWlyIG93biBudW1iZXJzIGluIHRoZSBmb3JtYXQgYmVmb3JlIGFza2luZyBhbnlvbmUgdG8gcGF5IGZvciBpdCxcbiAgICogd2hpY2ggdGFrZXMgZXhhY3RseSBvbmUgcmVwb3J0OyBhIHJlbmV3YWJsZSBwcmV2aWV3IGlzIGp1c3QgdGhlIHByb2R1Y3QgZm9yIGZyZWUuXG4gICAqIFN0b3JlZCBhcyB0aGUgSU5TVEFOVCByYXRoZXIgdGhhbiBhIGJvb2xlYW4gc28gc3VwcG9ydCBjYW4gYW5zd2VyIFwid2hlbiBkaWQgdGhleVxuICAgKiB0cnkgaXRcIiB3aXRob3V0IGEgc2VwYXJhdGUgYXVkaXQgbG9va3VwLlxuICAgKi9cbiAgcmVwb3J0UHJldmlld1VzZWRBdDogdGltZXN0YW1wKCdyZXBvcnRfcHJldmlld191c2VkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIC8qKlxuICAgKiBUaGUgYG9jY3VycmVkQXRgIG9mIHRoZSBsYXN0IEFQUExJRUQgU3Rha2Vob2xkZXIgUmVwb3J0cyBlbnRpdGxlbWVudCBwdXNoLlxuICAgKlxuICAgKiBBIHdhdGVybWFyaywgc28gYW4gb3V0LW9mLW9yZGVyIHB1c2ggY2Fubm90IHJlc3VtZSBhbiBhY2NvdW50IHdob3NlIGFkZC1vbiBsYXBzZWQ6XG4gICAqIGJpbGxpbmcncyBsZWdzIGFyZSBiZXN0LWVmZm9ydCBhbmQgcmV0cmllZCwgc28gXCJsYXBzZWQgYXQgMTA6MDBcIiBhbmQgXCJyZW5ld2VkIGF0XG4gICAqIDEwOjA1XCIgY2FuIGFycml2ZSBpbiBlaXRoZXIgb3JkZXIsIGFuZCBhcHBseWluZyB0aGUgb2xkZXIgb25lIGxhc3Qgd291bGQgbGVhdmUgYVxuICAgKiBsYXBzZWQgYWNjb3VudCBwcm9kdWNpbmcgcmVwb3J0cyAob3IgYSBwYXlpbmcgb25lIHBhdXNlZCkuXG4gICAqL1xuICByZXBvcnRFbnRpdGxlbWVudFN5bmNlZEF0OiB0aW1lc3RhbXAoJ3JlcG9ydF9lbnRpdGxlbWVudF9zeW5jZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgLyoqXG4gICAqIFRoZSBvcmcncyBERUZBVUxUIHJlcG9ydCB0aW1lem9uZSBhbmQgd2VlayBzdGFydCwgd2hpY2ggYSBuZXcgcmVwb3J0IGlzIGNyZWF0ZWQgd2l0aC5cbiAgICpcbiAgICogT24gdGhlIHJlcG9ydCBwb2xpY3kgcmF0aGVyIHRoYW4gb24gdGhlIHBsYXRmb3JtIG9yZywgYmVjYXVzZSBwbGF0Zm9ybSdzIG9yZ2FuaXphdGlvblxuICAgKiBoYXMgbm8gdGltZXpvbmUgY29uY2VwdCB0byBleHRlbmQgYW5kIGludmVudGluZyBvbmUgdGhlcmUgd291bGQgZ2l2ZSB0aGUgc2FtZSBzZXR0aW5nXG4gICAqIHR3byBvd25lcnMuIEFuIGFkbWluIHNldHMgaXQgb25jZSAoYG9yZ19zZXR0aW5nczp3cml0ZWAsIHRoZSBzYW1lIGdhdGUgYXMgdGhlIHJlc3Qgb2YgdGhlXG4gICAqIHBvbGljeSkgYW5kIGV2ZXJ5IGxlYWQncyBuZXcgcmVwb3J0IHN0YXJ0cyBjb3JyZWN0IGluc3RlYWQgb2Ygc3RhcnRpbmcgaW4gVVRDIGFuZFxuICAgKiBiZWluZyBub3RpY2VkIGEgd2VlayBsYXRlciwgd2hlbiBhIE1vbmRheSByZXBvcnQgaGFzIHB1dCBTdW5kYXkgZXZlbmluZydzIGRlcGxveXMgaW5cbiAgICogdGhlIHdyb25nIHdlZWsuXG4gICAqXG4gICAqIE5VTEwg4oeSIHRoZSBkZXBsb3ltZW50IGRlZmF1bHQuIFBlci1yZXBvcnQgdmFsdWVzIGFsd2F5cyB3aW46IGEgZGlzdHJpYnV0ZWQgdGVhbSBjYW5cbiAgICogaGF2ZSBvbmUgcmVwb3J0IGN1dCBpbiBDaGljYWdvIGFuZCBhbm90aGVyIGluIEJlcmxpbi5cbiAgICovXG4gIHJlcG9ydERlZmF1bHRUaW1lem9uZTogdmFyY2hhcigncmVwb3J0X2RlZmF1bHRfdGltZXpvbmUnLCB7IGxlbmd0aDogNjQgfSksXG4gIHJlcG9ydERlZmF1bHRXZWVrU3RhcnQ6IHZhcmNoYXIoJ3JlcG9ydF9kZWZhdWx0X3dlZWtfc3RhcnQnLCB7IGxlbmd0aDogMTAgfSksXG4gIHVwZGF0ZWRBdDogdGltZXN0YW1wKCd1cGRhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0pO1xuXG4vKipcbiAqIFR5cGVTY3JpcHQgdHlwZXMgcmVwcmVzZW50aW5nIGRhdGFiYXNlIHJvd3NcbiAqL1xuZXhwb3J0IHR5cGUgUGlwZWxpbmUgPSB0eXBlb2YgcGlwZWxpbmUuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgUGlwZWxpbmVJbnNlcnQgPSB0eXBlb2YgcGlwZWxpbmUuJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBQaXBlbGluZVJlZ2lzdHJ5ID0gdHlwZW9mIHBpcGVsaW5lUmVnaXN0cnkuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgUGlwZWxpbmVSZWdpc3RyeUluc2VydCA9IHR5cGVvZiBwaXBlbGluZVJlZ2lzdHJ5LiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgUGlwZWxpbmVFdmVudCA9IHR5cGVvZiBwaXBlbGluZUV2ZW50LiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIFBpcGVsaW5lRXZlbnRJbnNlcnQgPSB0eXBlb2YgcGlwZWxpbmVFdmVudC4kaW5mZXJJbnNlcnQ7XG5cbmV4cG9ydCB0eXBlIERlcGxveW1lbnRPdXRjb21lID0gdHlwZW9mIGRlcGxveW1lbnRPdXRjb21lLiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIERlcGxveW1lbnRPdXRjb21lSW5zZXJ0ID0gdHlwZW9mIGRlcGxveW1lbnRPdXRjb21lLiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgSW5nZXN0SGVhbHRoID0gdHlwZW9mIGluZ2VzdEhlYWx0aC4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBJbmdlc3RIZWFsdGhJbnNlcnQgPSB0eXBlb2YgaW5nZXN0SGVhbHRoLiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgSW5jaWRlbnQgPSB0eXBlb2YgaW5jaWRlbnQuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgSW5jaWRlbnRJbnNlcnQgPSB0eXBlb2YgaW5jaWRlbnQuJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBEb3JhU2V0dGluZ3MgPSB0eXBlb2YgZG9yYVNldHRpbmdzLiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIERvcmFTZXR0aW5nc0luc2VydCA9IHR5cGVvZiBkb3JhU2V0dGluZ3MuJGluZmVySW5zZXJ0O1xuXG4vKipcbiAqIEhlbHBlciB0eXBlcyBmb3Igd29ya2luZyB3aXRoIHBhcnRpYWwgdXBkYXRlc1xuICovXG5leHBvcnQgdHlwZSBQaXBlbGluZVVwZGF0ZSA9IFBhcnRpYWw8T21pdDxQaXBlbGluZUluc2VydCwgJ2lkJyB8ICdjcmVhdGVkQXQnIHwgJ2NyZWF0ZWRCeSc+PjtcbiJdfQ==
|
|
486
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWxpbmUuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kYXRhYmFzZS9zY2hlbWEvcGlwZWxpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLHNDQUFzQztBQUV0QyxPQUFPLEVBQ0wsYUFBYSxHQUVkLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBMkJuSTs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUU7SUFDM0MsY0FBYztJQUNkLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsYUFBYSxFQUFFO0lBRTNDLGtDQUFrQztJQUNsQyxLQUFLLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUN0QyxPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3RCLE9BQU8sRUFBRTtJQUVaLGVBQWU7SUFDZixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUMxQixPQUFPLENBQUMsYUFBYSxDQUFDO1NBQ3RCLE9BQU8sRUFBRTtJQUNaLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ3ZELFVBQVUsRUFBRTtTQUNaLE9BQU8sRUFBRTtJQUNaLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQzFCLE9BQU8sQ0FBQyxhQUFhLENBQUM7U0FDdEIsT0FBTyxFQUFFO0lBQ1osU0FB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QUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxLQUFLLEVBQVk7SUFDM0Usa0ZBQWtGO0lBQ2xGLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUU7SUFDakYsd0ZBQXdGO0lBQ3hGLGlGQUFpRjtJQUNqRixzRkFBc0Y7SUFDdEYsc0ZBQXNGO0lBQ3RGLHFGQUFxRjtJQUNyRixnREFBZ0Q7SUFDaEQ7Ozs7O09BS0c7SUFDSCwyQkFBMkIsRUFBRSxPQUFPLENBQUMsaUNBQWlDLENBQUM7SUFDdkU7Ozs7Ozs7Ozs7O09BV0c7SUFDSCx5QkFBeUIsRUFBRSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxLQUFLLEVBQTBCO0lBQy9GOzs7Ozs7OztPQVFHO0lBQ0gsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2hGOzs7Ozs7O09BT0c7SUFDSCx5QkFBeUIsRUFBRSxTQUFTLENBQUMsOEJBQThCLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDNUY7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gscUJBQXFCLEVBQUUsT0FBTyxDQUFDLHlCQUF5QixFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3pFLHNCQUFzQixFQUFFLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUM1RSxTQUFTLEVBQUUsU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sRUFBRTtDQUNsRixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHtcbiAgU1lTVEVNX09SR19JRCwgdHlwZSBDcml0aWNhbGl0eSwgdHlwZSBFbnRpdHlMYWJlbHMsIHR5cGUgRW50aXR5TGluaywgdHlwZSBMaWZlY3ljbGUsIHR5cGUgTWV0YURhdGFUeXBlLFxuICB0eXBlIE93bmVyVHlwZSwgdHlwZSBWaXNpYmlsaXR5LFxufSBmcm9tICdAcGlwZWxpbmUtYnVpbGRlci9hcGktY29yZSc7XG5pbXBvcnQgeyBzcWwgfSBmcm9tICdkcml6emxlLW9ybSc7XG5pbXBvcnQgeyBiaWdpbnQsIGJvb2xlYW4sIGludGVnZXIsIHZhcmNoYXIsIHBnVGFibGUsIHRleHQsIHRpbWVzdGFtcCwgdXVpZCwganNvbmIsIGluZGV4LCB1bmlxdWVJbmRleCB9IGZyb20gJ2RyaXp6bGUtb3JtL3BnLWNvcmUnO1xuaW1wb3J0IHR5cGUgeyBQaXBlbGluZUNyZWF0aW9uU291cmNlIH0gZnJvbSAnLi9yZXBvcnRpbmctYW5hbHl0aWNzLmpzJztcblxuLyoqXG4gKiBQaXBlbGluZSBidWlsZGVyIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBzdG9yZWQgaW4gZGF0YWJhc2UuXG4gKiBNaXJyb3JzIHRoZSBjYW5vbmljYWwgQnVpbGRlclByb3BzIGZyb20gcGlwZWxpbmUtY29yZSAoSlNPTi1zZXJpYWxpemFibGUgZm9ybSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVCdWlsZGVyQ29uZmlnIHtcbiAgcmVhZG9ubHkgcHJvamVjdDogc3RyaW5nO1xuICByZWFkb25seSBvcmdhbml6YXRpb246IHN0cmluZztcbiAgcmVhZG9ubHkgcGlwZWxpbmVOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBnbG9iYWw/OiBNZXRhRGF0YVR5cGU7XG4gIHJlYWRvbmx5IHN5bnRoOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmVhZG9ubHkgZGVmYXVsdHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmVhZG9ubHkgcm9sZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICByZWFkb25seSBzdGFnZXM/OiBQaXBlbGluZVN0YWdlQ29uZmlnW107XG59XG5cbi8qKlxuICogU3RhZ2UgY29uZmlndXJhdGlvbiBzdG9yZWQgaW4gZGF0YWJhc2UgKEpTT04tc2VyaWFsaXphYmxlKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZVN0YWdlQ29uZmlnIHtcbiAgcmVhZG9ubHkgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFsaWFzPzogc3RyaW5nO1xuICByZWFkb25seSBzdGVwczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbn1cblxuLyoqXG4gKiBUYWJsZSBmb3Igc3RvcmluZyBwaXBlbGluZSBpbnN0YW5jZXMgYW5kIHRoZWlyIGZ1bGwgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBGZWF0dXJlcyAqIC0gRnVsbCBCdWlsZGVyUHJvcHMgc2VyaWFsaXphdGlvbiBmb3IgcmVjb25zdHJ1Y3Rpb25cbiAqIC0gT3JnYW5pemF0aW9uLWxldmVsIGlzb2xhdGlvblxuICogLSBQaXBlbGluZSBzdGF0dXMgdHJhY2tpbmdcbiAqIC0gRXhlY3V0aW9uIGhpc3RvcnkgdHJhY2tpbmdcbiAqIC0gRmxleGlibGUgdGFnZ2luZyBzeXN0ZW1cbiAqXG4gKiBAdGFibGUgcGlwZWxpbmVzXG4gKi9cbmV4cG9ydCBjb25zdCBwaXBlbGluZSA9IHBnVGFibGUoJ3BpcGVsaW5lcycsIHtcbiAgLy8gUHJpbWFyeSBrZXlcbiAgaWQ6IHV1aWQoJ2lkJykucHJpbWFyeUtleSgpLmRlZmF1bHRSYW5kb20oKSxcblxuICAvLyBPcmdhbml6YXRpb24gYW5kIGFjY2VzcyBjb250cm9sXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pXG4gICAgLmRlZmF1bHQoU1lTVEVNX09SR19JRClcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIEF1ZGl0IGZpZWxkc1xuICBjcmVhdGVkQnk6IHRleHQoJ2NyZWF0ZWRfYnknKVxuICAgIC5kZWZhdWx0KFNZU1RFTV9PUkdfSUQpXG4gICAgLm5vdE51bGwoKSxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KVxuICAgIC5kZWZhdWx0Tm93KClcbiAgICAubm90TnVsbCgpLFxuICB1cGRhdGVkQnk6IHRleHQoJ3VwZGF0ZWRfYnknKVxuICAgIC5kZWZhdWx0KFNZU1RFTV9PUkdfSUQpXG4gICAgLm5vdE51bGwoKSxcbiAgdXBkYXRlZEF0OiB0aW1lc3RhbXAoJ3VwZGF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KVxuICAgIC5kZWZhdWx0Tm93KClcbiAgICAubm90TnVsbCgpLFxuXG4gIC8vIENvcmUgcGlwZWxpbmUgaW5mb3JtYXRpb25cbiAgcHJvamVjdDogdmFyY2hhcigncHJvamVjdCcsIHsgbGVuZ3RoOiAyNTUgfSlcbiAgICAubm90TnVsbCgpLFxuICBvcmdhbml6YXRpb246IHZhcmNoYXIoJ29yZ2FuaXphdGlvbicsIHsgbGVuZ3RoOiAyNTUgfSlcbiAgICAubm90TnVsbCgpLFxuICBwaXBlbGluZU5hbWU6IHZhcmNoYXIoJ3BpcGVsaW5lX25hbWUnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBkZXNjcmlwdGlvbjogdGV4dCgnZGVzY3JpcHRpb24nKSxcbiAga2V5d29yZHM6IGpzb25iKCdrZXl3b3JkcycpXG4gICAgLiR0eXBlPHN0cmluZ1tdPigpXG4gICAgLmRlZmF1bHQoW10pXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBQaXBlbGluZSBjb25maWd1cmF0aW9uXG4gIHByb3BzOiBqc29uYigncHJvcHMnKVxuICAgIC4kdHlwZTxQaXBlbGluZUJ1aWxkZXJDb25maWc+KClcbiAgICAubm90TnVsbCgpLFxuXG4gIC8qKlxuICAgKiBIb3cgdGhpcyBwaXBlbGluZSBjYW1lIHRvIGV4aXN0IOKAlCBzZXQgYnkgd2hpY2hldmVyIGNyZWF0ZSBwYXRoIG1hZGUgaXRcbiAgICogKGBtYW51YWxgLCBgdGVtcGxhdGVgLCBgYWlgLCBgYnVsa2AsIGBjZGtgKS4gU3RhbXBlZCBhdCBjcmVhdGlvbiByYXRoZXIgdGhhblxuICAgKiBpbmZlcnJlZCBsYXRlciwgYmVjYXVzZSBub3RoaW5nIGluIGEgc3RvcmVkIGNvbmZpZyBzYXlzIGhvdyBpdCB3YXMgYXV0aG9yZWQsXG4gICAqIGFuZCB0aGUgYWRvcHRpb24gc2VjdGlvbidzIHdob2xlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhlIGdvbGRlbiBwYXRocyBhcmVcbiAgICogYmVpbmcgdXNlZDogYW4gb3JnIHdob3NlIHBpcGVsaW5lcyBhcmUgYWxsIGhhbmQtYnVpbHQgaGFzIGEgZGlmZmVyZW50IHN0b3J5XG4gICAqIGZyb20gb25lIHRlbXBsYXRpbmcgdGhlbS5cbiAgICovXG4gIGNyZWF0aW9uU291cmNlOiB2YXJjaGFyKCdjcmVhdGlvbl9zb3VyY2UnLCB7IGxlbmd0aDogMjAgfSlcbiAgICAuJHR5cGU8UGlwZWxpbmVDcmVhdGlvblNvdXJjZT4oKSxcblxuICAvLyBEZXZlbG9wZXItcG9ydGFsIGNhdGFsb2cgbWV0YWRhdGEgKG93bmVyc2hpcCAvIGxpZmVjeWNsZSAvIGNsYXNzaWZpY2F0aW9uKS5cbiAgLy8gb3duZXJJZCBkZWZhdWx0cyB0byB0aGUgY3JlYXRpbmcgdXNlciAoc2V0IGF0IGluc2VydCksIHNvIGV2ZXJ5IHBpcGVsaW5lIGhhc1xuICAvLyBhbiBvd25lciBmb3IgXCJteSBzZXJ2aWNlc1wiIHZpZXdzOyBvd25lclR5cGUgZGlzdGluZ3Vpc2hlcyB1c2VyIHZzIHRlYW0uXG4gIG93bmVySWQ6IHRleHQoJ293bmVyX2lkJyksXG4gIG93bmVyVHlwZTogdmFyY2hhcignb3duZXJfdHlwZScsIHsgbGVuZ3RoOiAxMCB9KS4kdHlwZTxPd25lclR5cGU+KCksXG4gIGxpZmVjeWNsZTogdmFyY2hhcignbGlmZWN5Y2xlJywgeyBsZW5ndGg6IDIwIH0pXG4gICAgLiR0eXBlPExpZmVjeWNsZT4oKVxuICAgIC5kZWZhdWx0KCdwcm9kdWN0aW9uJyBhcyBMaWZlY3ljbGUpXG4gICAgLm5vdE51bGwoKSxcbiAgY3JpdGljYWxpdHk6IHZhcmNoYXIoJ2NyaXRpY2FsaXR5JywgeyBsZW5ndGg6IDEwIH0pLiR0eXBlPENyaXRpY2FsaXR5PigpLFxuICBsYWJlbHM6IGpzb25iKCdsYWJlbHMnKVxuICAgIC4kdHlwZTxFbnRpdHlMYWJlbHM+KClcbiAgICAuZGVmYXVsdCh7fSlcbiAgICAubm90TnVsbCgpLFxuICBsaW5rczoganNvbmIoJ2xpbmtzJylcbiAgICAuJHR5cGU8RW50aXR5TGlua1tdPigpXG4gICAgLmRlZmF1bHQoW10pXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBBY2Nlc3MgYW5kIHZpc2liaWxpdHkg4oCUIHRoZSBzaGFyZWQgdGhyZWUtcnVuZyBsYWRkZXIgKHNlZSBhcGktY29yZSdzXG4gIC8vIGBWaXNpYmlsaXR5YCk6IGBwcml2YXRlYCBpcyBhdXRob3Itb25seSAoYGNyZWF0ZWRfYnlgKSwgYG9yZ2AgaXMgdGhlIHdob2xlXG4gIC8vIG93bmluZyBvcmcsIGBwdWJsaWNgIHJlYWNoZXMgdGhlIG9yZydzIHRlYW1zIGFuZCDigJQgZnJvbSB0aGUgc3lzdGVtIG9yZyDigJRcbiAgLy8gZXZlcnkgb3JnLiBDb25zdHJhaW5lZCBhdCB0aGUgU1FMIGxheWVyIHRvbyB2aWEgYSBDSEVDSyBpbiBwb3N0Z3Jlcy1pbml0LnNxbFxuICAvLyBzbyBhIHR5cG8gY2FuJ3Qgc25lYWsgcGFzdCB0aGUgYXBwbGljYXRpb24gbGF5ZXIuXG4gIHZpc2liaWxpdHk6IHZhcmNoYXIoJ3Zpc2liaWxpdHknLCB7IGxlbmd0aDogMTAgfSlcbiAgICAuJHR5cGU8VmlzaWJpbGl0eT4oKVxuICAgIC5kZWZhdWx0KCdwcml2YXRlJylcbiAgICAubm90TnVsbCgpLFxuICBpc0RlZmF1bHQ6IGJvb2xlYW4oJ2lzX2RlZmF1bHQnKVxuICAgIC5kZWZhdWx0KGZhbHNlKVxuICAgIC5ub3ROdWxsKCksXG4gIGlzQWN0aXZlOiBib29sZWFuKCdpc19hY3RpdmUnKVxuICAgIC5kZWZhdWx0KHRydWUpXG4gICAgLm5vdE51bGwoKSxcblxuICAvLyBEZWxldGlvbiB0cmFja2luZyAoc29mdCBkZWxldGUpXG4gIGRlbGV0ZWRBdDogdGltZXN0YW1wKCdkZWxldGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGRlbGV0ZWRCeTogdGV4dCgnZGVsZXRlZF9ieScpLFxuICAvLyBTb2Z0LWRlbGV0ZSBwdXJnZSBkZWFkbGluZTogdGhlIHJldGVudGlvbiBzd2VlcCBoYXJkLWRlbGV0ZXMgdG9tYnN0b25lZFxuICAvLyByb3dzIG9uY2UgYHB1cmdlX2FmdGVyYCBoYXMgcGFzc2VkIChzZXQgb24gZGVsZXRlIGFsb25nc2lkZSBkZWxldGVkX2F0KS5cbiAgcHVyZ2VBZnRlcjogdGltZXN0YW1wKCdwdXJnZV9hZnRlcicsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxufSwgKHRhYmxlKSA9PiAoe1xuICAvLyBQYXJ0aWFsIGluZGV4IG92ZXIganVzdCB0aGUgdG9tYnN0b25lcyDigJQgZHJpdmVzIHRoZSByZXRlbnRpb24gcHVyZ2Ugc3dlZXBcbiAgLy8gKGBXSEVSRSBkZWxldGVkX2F0IElTIE5PVCBOVUxMIEFORCBwdXJnZV9hZnRlciA8IG5vd2ApIHdpdGhvdXQgc2Nhbm5pbmcgbGl2ZSByb3dzLlxuICBwdXJnZUlkeDogaW5kZXgoJ3BpcGVsaW5lX3B1cmdlX2lkeCcpLm9uKHRhYmxlLnB1cmdlQWZ0ZXIpLndoZXJlKHNxbGBkZWxldGVkX2F0IElTIE5PVCBOVUxMYCksXG4gIC8vIE1pcnJvcnMgdGhlIGluZGV4ZXMgcG9zdGdyZXMtaW5pdC5zcWwgY3JlYXRlcywgbmFtZSBmb3IgbmFtZSAodGhlIFNRTCBmaWxlIGlzXG4gIC8vIHdoYXQgZGVwbG95czsgc2NoZW1hLXJlZmxlY3Rpb24udGVzdC50cyBrZWVwcyB0aGUgdHdvIGluIGxvY2stc3RlcCkuXG4gIG9yZ0lkSWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc19vcmdfaWQnKS5vbih0YWJsZS5vcmdJZCkud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBwcm9qZWN0SWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc19wcm9qZWN0Jykub24odGFibGUucHJvamVjdCkud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBvcmdhbml6YXRpb25JZHg6IGluZGV4KCdpZHhfcGlwZWxpbmVzX29yZ2FuaXphdGlvbicpLm9uKHRhYmxlLm9yZ2FuaXphdGlvbikud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBwcm9qZWN0T3JnSWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc19wcm9qZWN0X29yZycpLm9uKHRhYmxlLnByb2plY3QsIHRhYmxlLm9yZ2FuaXphdGlvbikud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICB2aXNpYmlsaXR5SWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc192aXNpYmlsaXR5Jykub24odGFibGUudmlzaWJpbGl0eSkud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBpc0RlZmF1bHRJZHg6IGluZGV4KCdpZHhfcGlwZWxpbmVzX2lzX2RlZmF1bHQnKVxuICAgIC5vbih0YWJsZS5wcm9qZWN0LCB0YWJsZS5vcmdhbml6YXRpb24sIHRhYmxlLmlzRGVmYXVsdCkud2hlcmUoc3FsYGlzX2RlZmF1bHQgPSB0cnVlIEFORCBkZWxldGVkX2F0IElTIE5VTExgKSxcbiAgYWN0aXZlSWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc19pc19hY3RpdmUnKS5vbih0YWJsZS5pc0FjdGl2ZSkud2hlcmUoc3FsYGRlbGV0ZWRfYXQgSVMgTlVMTGApLFxuICBvcmdDcmVhdGVkSWR4OiBpbmRleCgnaWR4X3BpcGVsaW5lc19vcmdfY3JlYXRlZCcpLm9uKHRhYmxlLm9yZ0lkLCBzcWxgJHt0YWJsZS5jcmVhdGVkQXR9IERFU0NgKS53aGVyZShzcWxgZGVsZXRlZF9hdCBJUyBOVUxMYCksXG5cbiAgLy8gRGV2ZWxvcGVyLXBvcnRhbCBjYXRhbG9nIGluZGV4ZXM6IFwibXkgc2VydmljZXNcIiAob3duZXIpICsgbGlmZWN5Y2xlIGZpbHRlci5cbiAgb3duZXJJZHg6IGluZGV4KCdwaXBlbGluZV9vd25lcl9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUub3duZXJJZCksXG4gIGxpZmVjeWNsZUlkeDogaW5kZXgoJ3BpcGVsaW5lX2xpZmVjeWNsZV9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUubGlmZWN5Y2xlKSxcblxuICAvLyBDb21wb3NpdGUgaW5kZXggZm9yIGZpbHRlcmVkIHF1ZXJpZXMgKG9yZ0lkICsgdmlzaWJpbGl0eSArIGlzQWN0aXZlKVxuICBvcmdWaXNpYmlsaXR5QWN0aXZlSWR4OiBpbmRleCgncGlwZWxpbmVfb3JnX3Zpc2liaWxpdHlfYWN0aXZlX2lkeCcpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS52aXNpYmlsaXR5LCB0YWJsZS5pc0FjdGl2ZSksXG4gIC8vIERyaXZlcyB0aGUgXCJteSBwcml2YXRlIGRyYWZ0c1wiIGxlZyBvZiB0aGUgdmlzaWJpbGl0eSBwcmVkaWNhdGUuXG4gIGNyZWF0ZWRCeUlkeDogaW5kZXgoJ3BpcGVsaW5lX2NyZWF0ZWRfYnlfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmNyZWF0ZWRCeSksXG5cbiAgLy8gVW5pcXVlIGNvbnN0cmFpbnQgb24gcHJvamVjdCArIG9yZ2FuaXphdGlvbiArIG9yZ0lkXG4gIHByb2plY3RPcmdVbmlxdWU6IHVuaXF1ZUluZGV4KCdwaXBlbGluZV9wcm9qZWN0X29yZ191bmlxdWUnKVxuICAgIC5vbih0YWJsZS5wcm9qZWN0LCB0YWJsZS5vcmdhbml6YXRpb24sIHRhYmxlLm9yZ0lkKSxcbn0pKTtcblxuLyoqXG4gKiBQaXBlbGluZSBkZXBsb3ltZW50IHJlZ2lzdHJ5LlxuICogTWFwcyBkZXBsb3llZCBDb2RlUGlwZWxpbmUgQVJOcyBiYWNrIHRvIHBpcGVsaW5lIHJlY29yZHMgYW5kIG9yZyBJRHMuXG4gKiBQb3B1bGF0ZWQgYnkgdGhlIGRlcGxveSBjb21tYW5kIGFmdGVyIHN1Y2Nlc3NmdWwgQ0RLIGRlcGxveS5cbiAqIFVzZWQgYnkgdGhlIHBpcGVsaW5lLWV2ZW50cyBMYW1iZGEgdG8gcmVzb2x2ZSBFdmVudEJyaWRnZSBldmVudHMgdG8gb3JnLXNjb3BlZCByZWNvcmRzLlxuICpcbiAqIEB0YWJsZSBwaXBlbGluZV9yZWdpc3RyeVxuICovXG5leHBvcnQgY29uc3QgcGlwZWxpbmVSZWdpc3RyeSA9IHBnVGFibGUoJ3BpcGVsaW5lX3JlZ2lzdHJ5Jywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICAvLyBUaGUgcGxhdGZvcm0ncyBwaXBlbGluZSByZWNvcmQgaWQg4oCUIGEgU1RBQkxFIHV1aWQgY3JlYXRlZCB3aXRoIHRoZSBwaXBlbGluZVxuICAvLyByZWNvcmQsIGtub3duIGF0IENESyBzeW50aCwgYW5kIGFwcGxpZWQgdG8gdGhlIGxpdmUgQ29kZVBpcGVsaW5lIGFzIHRoZVxuICAvLyBgcGIucGlwZWxpbmUtaWRgIHRhZy4gVGhlIGV2ZW50cyBMYW1iZGEgcmVhZHMgdGhhdCB0YWcgYW5kIHJlcG9ydHNcbiAgLy8gYWdhaW5zdCB0aGlzIGlkLCBzbyBpdCBJUyB0aGUgZXZlbnQgam9pbiBrZXkgKHJlcGxhY2luZyB0aGUgbWFza2VkIEFSTiDigJRcbiAgLy8gaXQgY2FycmllcyBubyBBV1MgYWNjb3VudC9yZWdpb24sIHNvIG5vIG1hc2tpbmcgaXMgbmVlZGVkKS4gVW5pcXVlOiBvbmVcbiAgLy8gcmVnaXN0cnkgcm93IHBlciBwaXBlbGluZSArIHRoZSB1cHNlcnQga2V5IGZvciAocmUpcmVnaXN0cmF0aW9uLlxuICBwaXBlbGluZUlkOiB1dWlkKCdwaXBlbGluZV9pZCcpLm5vdE51bGwoKS51bmlxdWUoKSxcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICBwaXBlbGluZU5hbWU6IHZhcmNoYXIoJ3BpcGVsaW5lX25hbWUnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgcmVnaW9uOiB2YXJjaGFyKCdyZWdpb24nLCB7IGxlbmd0aDogMzAgfSksXG4gIHByb2plY3Q6IHZhcmNoYXIoJ3Byb2plY3QnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBvcmdhbml6YXRpb246IHZhcmNoYXIoJ29yZ2FuaXphdGlvbicsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGxhc3REZXBsb3llZDogdGltZXN0YW1wKCdsYXN0X2RlcGxveWVkJywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIHN0YWNrTmFtZTogdmFyY2hhcignc3RhY2tfbmFtZScsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbiAgdXBkYXRlZEF0OiB0aW1lc3RhbXAoJ3VwZGF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICBvcmdJZElkeDogaW5kZXgoJ3JlZ2lzdHJ5X29yZ19pZF9pZHgnKS5vbih0YWJsZS5vcmdJZCksXG4gIG9yZ1JlZ2lvbklkeDogaW5kZXgoJ3JlZ2lzdHJ5X29yZ19yZWdpb25faWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLnJlZ2lvbiksXG4gIC8vIE9uZSByZWdpc3RyeSByb3cgcGVyIHBpcGVsaW5lICh0aGUgcmVnaXN0cmF0aW9uIHVwc2VydCdzIGNvbmZsaWN0IHRhcmdldCkuXG4gIHBpcGVsaW5lSWRVbmlxdWU6IHVuaXF1ZUluZGV4KCdyZWdpc3RyeV9waXBlbGluZV9pZF9pZHgnKS5vbih0YWJsZS5waXBlbGluZUlkKSxcbn0pKTtcblxuLyoqXG4gKiBFdmVudCBzb3VyY2UgaWRlbnRpZmllcnMgZm9yIHBpcGVsaW5lX2V2ZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgRXZlbnRTb3VyY2UgPSAnY29kZXBpcGVsaW5lJyB8ICdjb2RlYnVpbGQnIHwgJ3BsdWdpbi1idWlsZCc7XG5cbi8qKlxuICogRXZlbnQgdHlwZSBncmFudWxhcml0eSBsZXZlbHMgZm9yIHBpcGVsaW5lX2V2ZW50cy5cbiAqL1xuZXhwb3J0IHR5cGUgRXZlbnRUeXBlID0gJ1BJUEVMSU5FJyB8ICdTVEFHRScgfCAnQUNUSU9OJyB8ICdCVUlMRCc7XG5cbi8qKlxuICogUGlwZWxpbmUgZXhlY3V0aW9uIGFuZCBidWlsZCBldmVudHMuXG4gKiBDYXB0dXJlcyBDb2RlUGlwZWxpbmUvQ29kZUJ1aWxkIHN0YXRlIGNoYW5nZXMgZnJvbSBFdmVudEJyaWRnZVxuICogYW5kIHBsdWdpbiBEb2NrZXIgYnVpbGQgb3V0Y29tZXMgZnJvbSBCdWxsTVEuXG4gKiBBbGwgZXZlbnRzIGFyZSBvcmctc2NvcGVkIGZvciBtdWx0aS10ZW5hbnQgcmVwb3J0aW5nLlxuICpcbiAqIEB0YWJsZSBwaXBlbGluZV9ldmVudHNcbiAqL1xuZXhwb3J0IGNvbnN0IHBpcGVsaW5lRXZlbnQgPSBwZ1RhYmxlKCdwaXBlbGluZV9ldmVudHMnLCB7XG4gIGlkOiB1dWlkKCdpZCcpLnByaW1hcnlLZXkoKS5kZWZhdWx0UmFuZG9tKCksXG4gIHBpcGVsaW5lSWQ6IHV1aWQoJ3BpcGVsaW5lX2lkJyksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgZXZlbnRTb3VyY2U6IHZhcmNoYXIoJ2V2ZW50X3NvdXJjZScsIHsgbGVuZ3RoOiA1MCB9KS4kdHlwZTxFdmVudFNvdXJjZT4oKS5ub3ROdWxsKCksXG4gIGV2ZW50VHlwZTogdmFyY2hhcignZXZlbnRfdHlwZScsIHsgbGVuZ3RoOiA1MCB9KS4kdHlwZTxFdmVudFR5cGU+KCkubm90TnVsbCgpLFxuICBzdGF0dXM6IHZhcmNoYXIoJ3N0YXR1cycsIHsgbGVuZ3RoOiAyMCB9KS5ub3ROdWxsKCksXG4gIGV4ZWN1dGlvbklkOiB2YXJjaGFyKCdleGVjdXRpb25faWQnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBzdGFnZU5hbWU6IHZhcmNoYXIoJ3N0YWdlX25hbWUnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBhY3Rpb25OYW1lOiB2YXJjaGFyKCdhY3Rpb25fbmFtZScsIHsgbGVuZ3RoOiAyNTUgfSksXG4gIGVycm9yTWVzc2FnZTogdGV4dCgnZXJyb3JfbWVzc2FnZScpLFxuICBzdGFydGVkQXQ6IHRpbWVzdGFtcCgnc3RhcnRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBjb21wbGV0ZWRBdDogdGltZXN0YW1wKCdjb21wbGV0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgZHVyYXRpb25NczogaW50ZWdlcignZHVyYXRpb25fbXMnKSxcbiAgLy8gRE9SQSBkZXBsb3ktYXR0cmlidXRpb24gKGFsbCBudWxsYWJsZTsgcG9wdWxhdGVkIGF0IGluZ2VzdCB3aGVuIHRoZSBzb3VyY2VcbiAgLy8gZXZlbnQgY2FycmllcyB0aGVtIOKAlCBsZWdhY3kvQ0ktb25seSBldmVudHMgbGVhdmUgdGhlbSBOVUxMKS4gYGVudmlyb25tZW50YFxuICAvLyBpcyB0aGUgZGVwbG95IHRhcmdldCAoZS5nLiBcInByb2R1Y3Rpb25cIik7IGl0cyBwcmVzZW5jZSBtYXJrcyBhbiBleGVjdXRpb25cbiAgLy8gYXMgYSByZWFsIGRlcGxveW1lbnQsIGxldHRpbmcgRE9SQSBzY29wZSBwYXN0IGdlbmVyaWMgcGlwZWxpbmUgcnVucy5cbiAgLy8gYGNvbW1pdFNoYWAvYGNvbW1pdFJlZmAgY2FwdHVyZSB0aGUgc291cmNlIHJldmlzaW9uIGZvciBsZWFkLXRpbWUgd29yay5cbiAgY29tbWl0U2hhOiB2YXJjaGFyKCdjb21taXRfc2hhJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgY29tbWl0UmVmOiB2YXJjaGFyKCdjb21taXRfcmVmJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgZW52aXJvbm1lbnQ6IHZhcmNoYXIoJ2Vudmlyb25tZW50JywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgLy8gRE9SQSB0cnVlLWxlYWQtdGltZSBhdHRyaWJ1dGlvbi4gVGhlIGZvcndhcmRlciByZXNvbHZlcyB0aGUgc291cmNlXG4gIC8vIGNvbW1pdCByYW5nZSBpbi1hY2NvdW50IGFuZCByZXBvcnRzIHRoZSBPTERFU1QgdW5zaGlwcGVkIGNvbW1pdCdzIHRpbWVzdGFtcFxuICAvLyArIGhvdyBtYW55IGNvbW1pdHMgc2hpcHBlZC4gQm90aCBudWxsYWJsZSDigJQgZXZlbnRzIHdob3NlIHNvdXJjZSB0eXBlL3Rva2VuXG4gIC8vIGNhbid0IGJlIHJlc29sdmVkIGxlYXZlIHRoZW0gTlVMTCBhbmQgbGVhZCB0aW1lIHJlcG9ydHMgYHVua25vd25gLlxuICBjb21taXRUaW1lc3RhbXA6IHRpbWVzdGFtcCgnY29tbWl0X3RpbWVzdGFtcCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLFxuICBjb21taXRDb3VudDogaW50ZWdlcignY29tbWl0X2NvdW50JyksXG4gIC8vIFBlci1wbHVnaW4gcnVudGltZSB0ZWxlbWV0cnk6IHRoZSBwbHVnaW4gYW4gQUNUSU9OL0JVSUxEIGV2ZW50IHJhbixcbiAgLy8gam9pbmVkIGF0IGluZ2VzdCBmcm9tIGBwaXBlbGluZV9zdGVwX21hbmlmZXN0c2Agb24gKHBpcGVsaW5lX2lkLFxuICAvLyBzdGFnZV9uYW1lLCBhY3Rpb25fbmFtZSkuIGBwbHVnaW5QdWJsaXNoZXJgIGlzIE5VTEwgZm9yIGFuIG93bi1vcmcgcGx1Z2luO1xuICAvLyBhbGwgdGhyZWUgYXJlIE5VTEwgZm9yIG5vbi1wbHVnaW4gYWN0aW9ucyBhbmQgdW5yZWNvcmRlZCBzeW50aHMuXG4gIHBsdWdpblB1Ymxpc2hlcjogdmFyY2hhcigncGx1Z2luX3B1Ymxpc2hlcicsIHsgbGVuZ3RoOiAzOSB9KSxcbiAgLy8gVGhlIHB1Ymxpc2hlcidzIElEIChhIGhhbmRsZSBjYW4gY2hhbmdlIG9uIGEgY2xhaW0gb3IgcHJvZmlsZSBjaGFuZ2U7IHRoZVxuICAvLyBsaXN0aW5nIHN0YXRzIGpvaW4gb24gdGhpcywgbmV2ZXIgb24gdGhlIGhhbmRsZSkuIE5VTEwgbGlrZSBwbHVnaW5QdWJsaXNoZXIuXG4gIHBsdWdpblB1Ymxpc2hlcklkOiB1dWlkKCdwbHVnaW5fcHVibGlzaGVyX2lkJyksXG4gIHBsdWdpbk5hbWU6IHZhcmNoYXIoJ3BsdWdpbl9uYW1lJywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgcGx1Z2luVmVyc2lvbjogdmFyY2hhcigncGx1Z2luX3ZlcnNpb24nLCB7IGxlbmd0aDogNTAgfSksXG4gIC8qKlxuICAgKiBXaGF0IEtJTkQgb2YgdGhpbmcgYnJva2UsIGZvciBhIGZhaWxlZCBhY3Rpb24uIEFzc2lnbmVkIGF0IGluZ2VzdCBieSB0aGVcbiAgICogZmFpbHVyZSBjbGFzc2lmaWVyLCBub3QgZGVyaXZlZCBhdCByZWFkIHRpbWU6IHRoZSBlcnJvciB0ZXh0IGlzIHNjcnViYmVkIGFuZFxuICAgKiBldmVudHVhbGx5IHN3ZXB0LCBzbyBhIGNhdGVnb3J5IGNvbXB1dGVkIGxhdGVyIHdvdWxkIGhhdmUgbm90aGluZyB0byByZWFkIOKAlFxuICAgKiBhbmQgdGhlIEFJIHN1bW1hcnkgaXMgc2hvd24gdGhlIGNhdGVnb3J5LCBuZXZlciB0aGUgcmF3IGVycm9yLlxuICAgKi9cbiAgZmFpbHVyZUNhdGVnb3J5OiB2YXJjaGFyKCdmYWlsdXJlX2NhdGVnb3J5JywgeyBsZW5ndGg6IDMwIH0pLFxuICAvKipcbiAgICogVGhlIG1hbmFnZWQgdG9vbGNoYWluIHJlbGVhc2UgKGRvY3MvcGxhbnMvYm9vdHN0cmFwLWltYWdlLXZlcnNpb25pbmcubWQgwqc3KVxuICAgKiBhIGBzeW50aGAgb3IgYHNlbGYtbXV0YXRpb25gIEFDVElPTiByYW4gb24uIFN0YW1wZWQgYXQgaW5nZXN0IGZyb20gdGhlXG4gICAqIFBMQVRGT1JNJ3MgZGVwbG95ZWQgc3RlcCBtYW5pZmVzdCBmb3IgdGhlIHBpcGVsaW5lIChpdHMgYGJ1aWxkLWltYWdlYFxuICAgKiBlbnRyeSkg4oCUIG5ldmVyIGZyb20gdGhlIHBheWxvYWQgb3IgYSBwaXBlbGluZSB0YWcsIGJvdGggb2Ygd2hpY2ggdGhlXG4gICAqIGN1c3RvbWVyIGNvbnRyb2xzLiBOVUxMIGZvciBldmVyeSBvdGhlciByb3csIGFuZCBmb3IgYSBwaXBlbGluZSB3aG9zZVxuICAgKiBtYW5pZmVzdCByZWNvcmRzIG5vIHJlbGVhc2UuIFRoZSBjYW5hcnkgZ2F0ZSBhbmQgdGhlIEFmZmVjdGVkIHZpZXcgYXJlXG4gICAqIHF1ZXJpZXMgb3ZlciB0aGVzZSByb3dzIChgYXBpL3JlcG9ydGluZy90b29sY2hhaW4tcnVucy50c2ApLlxuICAgKi9cbiAgdG9vbGNoYWluUmVsZWFzZTogdmFyY2hhcigndG9vbGNoYWluX3JlbGVhc2UnLCB7IGxlbmd0aDogNTAgfSksXG4gIC8qKlxuICAgKiBQcm92ZW5hbmNlLiBgc291cmNlRXZlbnRJZGAgaXMgdGhlIEV2ZW50QnJpZGdlIGV2ZW50IGlkIHRoZSBmb3J3YXJkZXJcbiAgICogcmVjZWl2ZWQgdGhpcyBzdGF0ZSBjaGFuZ2UgYXMgKE5VTEwgZm9yIHBsdWdpbi1idWlsZCBldmVudHMpIOKAlCB0aGVcbiAgICogc3Ryb25nZXN0IGRlZHVwIGtleSB0aGVyZSBpcywgYW5kIHRoZSB0aHJlYWQgYW4gYXVkaXQgcm93IG9yIGEgRE9SQVxuICAgKiBkZXBsb3kgZm9sbG93cyBiYWNrIHRvIHRoZSBleGFjdCBBV1MgZXZlbnQuIGBpbmdlc3RLZXlJZGAgaXMgdGhlIGFjY2Vzcy1rZXlcbiAgICogaWQgb2YgdGhlIGByZXBvcnRpbmc6aW5nZXN0YCBjcmVkZW50aWFsIHRoYXQgd3JvdGUgdGhlIHJvdzogYSBrZXkgSUQsIG5ldmVyXG4gICAqIHRoZSBzZWNyZXQsIHNvIGEgZm9yZ2VkIG9yIG1pc3JvdXRlZCByb3cgbmFtZXMgdGhlIGNyZWRlbnRpYWwgYmVoaW5kIGl0LlxuICAgKi9cbiAgc291cmNlRXZlbnRJZDogdmFyY2hhcignc291cmNlX2V2ZW50X2lkJywgeyBsZW5ndGg6IDEyOCB9KSxcbiAgaW5nZXN0S2V5SWQ6IHZhcmNoYXIoJ2luZ2VzdF9rZXlfaWQnLCB7IGxlbmd0aDogMjU1IH0pLFxuICBkZXRhaWw6IGpzb25iKCdkZXRhaWwnKS4kdHlwZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKSxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICBwaXBlbGluZUlkSWR4OiBpbmRleCgnZXZlbnRfcGlwZWxpbmVfaWRfaWR4Jykub24odGFibGUucGlwZWxpbmVJZCksXG4gIG9yZ0lkSWR4OiBpbmRleCgnZXZlbnRfb3JnX2lkX2lkeCcpLm9uKHRhYmxlLm9yZ0lkKSxcbiAgZXZlbnRUeXBlSWR4OiBpbmRleCgnZXZlbnRfdHlwZV9pZHgnKS5vbih0YWJsZS5ldmVudFR5cGUpLFxuICBzdGF0dXNJZHg6IGluZGV4KCdldmVudF9zdGF0dXNfaWR4Jykub24odGFibGUuc3RhdHVzKSxcbiAgZXhlY3V0aW9uSWRJZHg6IGluZGV4KCdldmVudF9leGVjdXRpb25faWRfaWR4Jykub24odGFibGUuZXhlY3V0aW9uSWQpLFxuICBjcmVhdGVkQXRJZHg6IGluZGV4KCdldmVudF9jcmVhdGVkX2F0X2lkeCcpLm9uKHRhYmxlLmNyZWF0ZWRBdCksXG4gIG9yZ1R5cGVDcmVhdGVkSWR4OiBpbmRleCgnZXZlbnRfb3JnX3R5cGVfY3JlYXRlZF9pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUuZXZlbnRUeXBlLCB0YWJsZS5jcmVhdGVkQXQpLFxuICBvcmdTb3VyY2VTdGF0dXNJZHg6IGluZGV4KCdldmVudF9vcmdfc291cmNlX3N0YXR1c19pZHgnKS5vbih0YWJsZS5vcmdJZCwgdGFibGUuZXZlbnRTb3VyY2UsIHRhYmxlLnN0YXR1cyksXG4gIC8vIElkZW1wb3RlbmN5OiBFdmVudEJyaWRnZSDihpIgU1FTIGlzIGF0LWxlYXN0LW9uY2UsIHNvIHRoZSBzYW1lIHN0YXRlLWNoYW5nZVxuICAvLyBjYW4gYmUgZGVsaXZlcmVkIHR3aWNlLiBUaGlzIHBhcnRpYWwgdW5pcXVlIGluZGV4IGRlZHVwcyByZS1kZWxpdmVyaWVzXG4gIC8vIChwYWlyZWQgd2l0aCBgb25Db25mbGljdERvTm90aGluZ2AgaW4gcmVwb3J0aW5nLXNlcnZpY2UuaW5nZXN0RXZlbnRzKS5cbiAgLy8gUGFydGlhbCAoZXhlY3V0aW9uX2lkIElTIE5PVCBOVUxMKSBiZWNhdXNlIHRoYXQncyB0aGUgbmF0dXJhbCBwZXItZXZlbnRcbiAgLy8ga2V5OyBldmVudHMgd2l0aG91dCBhbiBleGVjdXRpb25JZCAocmFyZSkgYXJlbid0IGRlZHVwZWQsIHdoaWNoIGlzIHNhZmUuXG4gIC8vIEluY2x1ZGVzIHBpcGVsaW5lX2lkIHNvIGEgKHRoZW9yZXRpY2FsKSBleGVjdXRpb24taWQgcmV1c2UgYWNyb3NzIHBpcGVsaW5lc1xuICAvLyBjYW4ndCBjb2xsaWRlICh0aGUgQVJOIGlzIG5vdCBwYXJ0IG9mIHRoZSByb3cpLlxuICAvL1xuICAvLyBDT0FMRVNDRSB0aGUgbnVsbGFibGUgcGFydHMgdG8gc2VudGluZWxzIChleHByZXNzaW9uIGluZGV4KTogUElQRUxJTkUvU1RBR0UvXG4gIC8vIEJVSUxEIGV2ZW50cyBsZWF2ZSBzdGFnZV9uYW1lL2FjdGlvbl9uYW1lIE5VTEwgKHBsdWdpbi1idWlsZCBhbHNvIHBpcGVsaW5lX2lkXG4gIC8vIE5VTEwpLCBhbmQgUG9zdGdyZXMgdHJlYXRzIE5VTExzIGFzIERJU1RJTkNUIGluIGEgdW5pcXVlIGluZGV4IOKAlCBzbyB0aGUgcGxhaW5cbiAgLy8gY29sdW1uIGluZGV4IG5ldmVyIG1hdGNoZXMgZm9yIHRob3NlIHR5cGVzIGFuZCBvbkNvbmZsaWN0RG9Ob3RoaW5nIGNhbid0IGRlZHVwXG4gIC8vIHRoZWlyIGF0LWxlYXN0LW9uY2UgcmUtZGVsaXZlcmllcy4gQ29sbGFwc2luZyBOVUxM4oaSJycgbWFrZXMgZXF1YWwgZXZlbnRzIGVxdWFsLlxuICAvLyAoZHJpenpsZSdzIHVuaXF1ZUluZGV4IGNhbid0IGV4cHJlc3MgTlVMTFMgTk9UIERJU1RJTkNUIG9uIGEgcGFydGlhbCBpbmRleCwgc29cbiAgLy8gd2UgdXNlIHRoZSBlcXVpdmFsZW50IGV4cHJlc3Npb24gaW5kZXguKSBDcmVhdGVkIGJ5IHBvc3RncmVzLWluaXQuc3FsLlxuICBkZWR1cElkeDogdW5pcXVlSW5kZXgoJ2V2ZW50X2RlZHVwX2lkeCcpXG4gICAgLm9uKFxuICAgICAgc3FsYGNvYWxlc2NlKCR7dGFibGUucGlwZWxpbmVJZH06OnRleHQsICcnKWAsXG4gICAgICB0YWJsZS5leGVjdXRpb25JZCxcbiAgICAgIHRhYmxlLmV2ZW50VHlwZSxcbiAgICAgIHRhYmxlLnN0YXR1cyxcbiAgICAgIHNxbGBjb2FsZXNjZSgke3RhYmxlLnN0YWdlTmFtZX0sICcnKWAsXG4gICAgICBzcWxgY29hbGVzY2UoJHt0YWJsZS5hY3Rpb25OYW1lfSwgJycpYCxcbiAgICApXG4gICAgLndoZXJlKHNxbGBleGVjdXRpb25faWQgSVMgTk9UIE5VTExgKSxcbiAgLy8gU3Ryb25nZXN0IGRlZHVwIGtleSB3aGVuIHRoZSBwcm9kdWNlciBoYXMgb25lOiBhbiBFdmVudEJyaWRnZSBldmVudCBpZCBpc1xuICAvLyB1bmlxdWUgcGVyIEFXUyBzdGF0ZSBjaGFuZ2UsIHNvIGFuIFNRUyByZWRlbGl2ZXJ5IG9yIERMUSByZWRyaXZlIG9mIHRoZSBzYW1lXG4gIC8vIGV2ZW50IGNvbGxhcHNlcyBoZXJlIGV2ZW4gd2l0aG91dCBhbiBleGVjdXRpb25faWQuIFBhcnRpYWwg4oCUIHBsdWdpbi1idWlsZFxuICAvLyBldmVudHMgY2Fycnkgbm9uZS4gQSBzZWNvbmQgT04gQ09ORkxJQ1QgRE8gTk9USElORyBhcmJpdGVyIGZvciBpbmdlc3RFdmVudHMuXG4gIC8vIENyZWF0ZWQgYnkgcG9zdGdyZXMtaW5pdC5zcWwuXG4gIHNvdXJjZUV2ZW50SWR4OiB1bmlxdWVJbmRleCgnZXZlbnRfc291cmNlX2V2ZW50X2lkeCcpXG4gICAgLm9uKHRhYmxlLnNvdXJjZUV2ZW50SWQpXG4gICAgLndoZXJlKHNxbGBzb3VyY2VfZXZlbnRfaWQgSVMgTk9UIE5VTExgKSxcbiAgLy8gRE9SQSBkZXBsb3ktc2NvcGVkIHJlYWRzOiBvbmx5IFBJUEVMSU5FLWxldmVsIGV4ZWN1dGlvbnMgdGFnZ2VkIHdpdGggYVxuICAvLyBkZXBsb3kgZW52aXJvbm1lbnQuIGBldmVudF90eXBlYCBpcyBpbiB0aGUgaW5kZXggYmVjYXVzZSB0aGUgZXZlbnRzIExhbWJkYVxuICAvLyB0YWdzIEVWRVJZIGV2ZW50IG9mIGEgZGVwbG95ZWQgcGlwZWxpbmUgKFNUQUdFL0FDVElPTiB0b28pLCB3aGlsZSB0aGUgRE9SQVxuICAvLyBzY2FuIHdhbnRzIG9ubHkgYGV2ZW50X3R5cGU9J1BJUEVMSU5FJ2Ag4oCUIGluY2x1ZGluZyBpdCByZXN0b3JlcyBzZWxlY3Rpdml0eS5cbiAgLy8gUGFydGlhbCAoZW52aXJvbm1lbnQgSVMgTk9UIE5VTEwpIGtlZXBzIGl0IHNtYWxsIOKAlCBsZWdhY3kvQ0ktb25seSBldmVudHNcbiAgLy8gYXJlbid0IGluZGV4ZWQuIFRoZSBkZWZhdWx0IHJ1bi1iYXNlZCBET1JBIHBhdGggKG5vIGVudmlyb25tZW50KSBjYW4ndCB1c2VcbiAgLy8gdGhpcyBwYXJ0aWFsIGluZGV4OyBpdCByZWxpZXMgb24gZXZlbnRfcGlwZWxpbmVfdHlwZV9zdGFydGVkX2lkeCBiZWxvdy5cbiAgLy8gQ3JlYXRlZCBieSBwb3N0Z3Jlcy1pbml0LnNxbC5cbiAgLy8gVGhlIGNhbmFyeSBnYXRlJ3Mgc2Nhbjogb25lIHJlbGVhc2UncyBzdGFtcGVkIHRvb2xjaGFpbiBydW5zIG92ZXIgYSB3aW5kb3cuXG4gIC8vIFBhcnRpYWwg4oCUIG9ubHkgc3ludGggLyBzZWxmLW11dGF0aW9uIHJvd3MgY2FycnkgYSByZWxlYXNlLiBDcmVhdGVkIGJ5XG4gIC8vIHBvc3RncmVzLWluaXQuc3FsLlxuICB0b29sY2hhaW5SZWxlYXNlSWR4OiBpbmRleCgnZXZlbnRfdG9vbGNoYWluX3JlbGVhc2VfaWR4JylcbiAgICAub24odGFibGUudG9vbGNoYWluUmVsZWFzZSwgdGFibGUuY3JlYXRlZEF0KVxuICAgIC53aGVyZShzcWxgdG9vbGNoYWluX3JlbGVhc2UgSVMgTk9UIE5VTExgKSxcbiAgZW52VHlwZVN0YXJ0ZWRJZHg6IGluZGV4KCdldmVudF9lbnZfdHlwZV9zdGFydGVkX2lkeCcpXG4gICAgLm9uKHRhYmxlLmVudmlyb25tZW50LCB0YWJsZS5ldmVudFR5cGUsIHRhYmxlLnN0YXJ0ZWRBdClcbiAgICAud2hlcmUoc3FsYGVudmlyb25tZW50IElTIE5PVCBOVUxMYCksXG4gIC8vIHN0YXJ0ZWRfYXQgcmFuZ2Ugc2NhbnM6IGV2ZXJ5IENhdGVnb3J5LTEgcmVwb3J0IGFuZCB0aGUgZGVmYXVsdCBydW4tYmFzZWRcbiAgLy8gRE9SQSBwYXRoIGZpbHRlcnMgYGV2ZW50X3R5cGU9J1BJUEVMSU5FJyBBTkQgc3RhcnRlZF9hdCBCRVRXRUVOIOKApmAgam9pbmVkIG9uXG4gIC8vIHBpcGVsaW5lX2lkLCBidXQgdGhlIG90aGVyIGV2ZW50IGNvbXBvc2l0ZSBpbmRleCBpcyBvbiBjcmVhdGVkX2F0LCBub3RcbiAgLy8gc3RhcnRlZF9hdCDigJQgc28gdGhlIHJhbmdlIHNjYW4gaGFkIG5vIGlkZWFsIGluZGV4LiBUaGlzIGNvbXBvc2l0ZSBzZXJ2ZXMgdGhlXG4gIC8vIGpvaW4tZHJpdmVuIHNjYW4gYnkgcGlwZWxpbmVfaWQuIENyZWF0ZWQgYnkgcG9zdGdyZXMtaW5pdC5zcWwuXG4gIHBpcGVsaW5lVHlwZVN0YXJ0ZWRJZHg6IGluZGV4KCdldmVudF9waXBlbGluZV90eXBlX3N0YXJ0ZWRfaWR4JylcbiAgICAub24odGFibGUucGlwZWxpbmVJZCwgdGFibGUuZXZlbnRUeXBlLCB0YWJsZS5zdGFydGVkQXQpLFxuICAvLyBET1JBIGRlcGxveS1iYXNpcyBzY2FuOiBkZXBsb3ltZW50IGZyZXF1ZW5jeSAvIGRlcGxveS10aW1lIENGUiAvXG4gIC8vIGxlYWQgdGltZSBhbGwgZ3JvdXAgZGVwbG95LXN0YWdlIGV2ZW50cyBieSBlbnZpcm9ubWVudCBvdmVyIGEgY29tcGxldGVkX2F0XG4gIC8vIHdpbmRvdy4gVGhpcyBjb21wb3NpdGUgc2VydmVzIHRoYXQgZ3JvdXBlZCBvcmctc2NvcGVkIHNjYW4gZGlyZWN0bHkuXG4gIC8vIENyZWF0ZWQgYnkgcG9zdGdyZXMtaW5pdC5zcWwuXG4gIG9yZ0VudkNvbXBsZXRlZElkeDogaW5kZXgoJ2V2ZW50X29yZ19lbnZfY29tcGxldGVkX2lkeCcpXG4gICAgLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5lbnZpcm9ubWVudCwgdGFibGUuY29tcGxldGVkQXQpLFxuICAvLyBET1JBIGxlYWQgdGltZTogdGhlIGBleGVjX2NvbW1pdHNgIENURSBwcm9iZXMgY29tbWl0LWNhcnJ5aW5nIGV2ZW50cyBieVxuICAvLyBleGVjdXRpb25faWQgYW5kIHRha2VzIE1JTihjb21taXRfdGltZXN0YW1wKS4gUGFydGlhbCArIGV4ZWN1dGlvbl9pZC1sZWFkaW5nIHNvXG4gIC8vIHRoZSBJTi1saXN0IHByb2JlIGlzIGFuIGluZGV4IHNjYW4gYW5kIHRoZSBNSU4gY29tZXMgZnJvbSB0aGUgaW5kZXguIEEgYmFyZVxuICAvLyBpbmRleCBvbiBjb21taXRfdGltZXN0YW1wIHdvdWxkIG5vdCBzZXJ2ZSBpdCDigJQgbm90aGluZyBmaWx0ZXJzIG9uIGEgcmFuZ2UuXG4gIC8vIENyZWF0ZWQgYnkgcG9zdGdyZXMtaW5pdC5zcWwuXG4gIGV4ZWNDb21taXRUc0lkeDogaW5kZXgoJ2V2ZW50X2V4ZWNfY29tbWl0X3RzX2lkeCcpXG4gICAgLm9uKHRhYmxlLmV4ZWN1dGlvbklkLCB0YWJsZS5jb21taXRUaW1lc3RhbXApXG4gICAgLndoZXJlKHNxbGBjb21taXRfdGltZXN0YW1wIElTIE5PVCBOVUxMYCksXG4gIC8vIFBlci1wbHVnaW4gcnVudGltZSByZXBvcnRpbmcgKHN1Y2Nlc3MgcmF0ZSAvIGR1cmF0aW9uIHBlciBwbHVnaW4gdmVyc2lvbikuXG4gIC8vIFBhcnRpYWw6IHRoZSBidWxrIG9mIG5vbi1wbHVnaW4gZXZlbnRzIGlzIG5ldmVyIGluZGV4ZWQuXG4gIHBsdWdpbklkeDogaW5kZXgoJ2V2ZW50X3BsdWdpbl9pZHgnKVxuICAgIC5vbih0YWJsZS5wbHVnaW5QdWJsaXNoZXIsIHRhYmxlLnBsdWdpbk5hbWUsIHRhYmxlLnBsdWdpblZlcnNpb24sIHRhYmxlLmNvbXBsZXRlZEF0KVxuICAgIC53aGVyZShzcWxgcGx1Z2luX25hbWUgSVMgTk9UIE5VTExgKSxcbiAgLy8gTGlzdGluZyBhZG9wdGlvbiAvIHN1Y2Nlc3MgcmF0ZSAocGx1Z2luIHN0YXRzIHN3ZWVwKSwga2V5ZWQgb24gdGhlIHB1Ymxpc2hlciBpZC5cbiAgcGx1Z2luUHVibGlzaGVySWRJZHg6IGluZGV4KCdldmVudF9wbHVnaW5fcHVibGlzaGVyX2lkX2lkeCcpXG4gICAgLm9uKHRhYmxlLnBsdWdpblB1Ymxpc2hlcklkLCB0YWJsZS5wbHVnaW5OYW1lLCB0YWJsZS5jb21wbGV0ZWRBdClcbiAgICAud2hlcmUoc3FsYHBsdWdpbl9wdWJsaXNoZXJfaWQgSVMgTk9UIE5VTExgKSxcbn0pKTtcblxuLyoqXG4gKiBNYW51YWwgcG9zdC1kZXBsb3kgb3V0Y29tZSBtYXJrZXJzLiBBIHVzZXIgbWFya3MgYSBkZXBsb3ltZW50XG4gKiBgZmFpbGVkYCAocHJvZHVjdGlvbiBpbmNpZGVudCBsaW5rZWQgdG8gYSBkZXBsb3kpIG9yIGByZXN0b3JlZGAgKHJlY292ZXJlZCkuXG4gKiBUaGVzZSBmZWVkIHRoZSBET1JBIHBvc3QtZGVwbG95IENoYW5nZSBGYWlsdXJlIFJhdGUgY29tcG9uZW50IGFuZCB0aGUgcmVhbFxuICogTVRUUiAocmVzdG9yZWQg4oiSIGRlcGxveWVkKS4gQ29ycmVsYXRlZCB0byBhIGRlcGxveSBleGVjdXRpb24gYnkgYGV4ZWN1dGlvbklkYC5cbiAqXG4gKiBAdGFibGUgZGVwbG95bWVudF9vdXRjb21lc1xuICovXG5leHBvcnQgY29uc3QgZGVwbG95bWVudE91dGNvbWUgPSBwZ1RhYmxlKCdkZXBsb3ltZW50X291dGNvbWVzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICBleGVjdXRpb25JZDogdmFyY2hhcignZXhlY3V0aW9uX2lkJywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIG9yZ0lkOiB2YXJjaGFyKCdvcmdfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgZW52aXJvbm1lbnQ6IHZhcmNoYXIoJ2Vudmlyb25tZW50JywgeyBsZW5ndGg6IDI1NSB9KSxcbiAgb3V0Y29tZTogdmFyY2hhcignb3V0Y29tZScsIHsgbGVuZ3RoOiAyMCB9KS4kdHlwZTwnZmFpbGVkJyB8ICdyZXN0b3JlZCc+KCkubm90TnVsbCgpLFxuICBhdDogdGltZXN0YW1wKCdhdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLm5vdE51bGwoKSxcbiAgY3JlYXRlZEF0OiB0aW1lc3RhbXAoJ2NyZWF0ZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KS5kZWZhdWx0Tm93KCkubm90TnVsbCgpLFxufSwgKHRhYmxlKSA9PiAoe1xuICBvcmdFbnZJZHg6IGluZGV4KCdkZXBsb3ltZW50X291dGNvbWVzX29yZ19lbnZfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmVudmlyb25tZW50KSxcbiAgZXhlY3V0aW9uSWR4OiBpbmRleCgnZGVwbG95bWVudF9vdXRjb21lc19leGVjdXRpb25faWR4Jykub24odGFibGUuZXhlY3V0aW9uSWQpLFxuICAvLyBJZGVtcG90ZW50IHJlLW1hcmtpbmc6IG9uZSByb3cgcGVyIChleGVjdXRpb24sIG91dGNvbWUpLiBSZS1wb3N0aW5nIHRoZSBzYW1lXG4gIC8vIG91dGNvbWUgZm9yIGEgZGVwbG95IGlzIGEgbm8tb3AvcmVmcmVzaCAob25Db25mbGljdERvVXBkYXRlIHRoZSBgYXRgKSwgc28gYVxuICAvLyBmYWlsZWTihpJyZXN0b3JlZCBwYWlyIGlzIHR3byByb3dzIHdoaWxlIGEgZHVwbGljYXRlIFBPU1QgZG9lc24ndCBkb3VibGUtY291bnQuXG4gIGV4ZWN1dGlvbk91dGNvbWVVbmlxdWU6IHVuaXF1ZUluZGV4KCdkZXBsb3ltZW50X291dGNvbWVzX2V4ZWN1dGlvbl9vdXRjb21lX3VuaXF1ZScpXG4gICAgLm9uKHRhYmxlLmV4ZWN1dGlvbklkLCB0YWJsZS5vdXRjb21lKSxcbn0pKTtcblxuLyoqXG4gKiBQZXItb3JnIGluZ2VzdGlvbiBoZWFsdGguIFRoZSBBV1MgZXZlbnRzIExhbWJkYSBwZXJpb2RpY2FsbHkgcG9zdHNcbiAqIGZvcndhcmRlZC9kcm9wcGVkIGNvdW50ZXJzICsgdGhlIGxhc3QgZXZlbnQgdGltZXN0YW1wIHNvIHRoZSBSZXBvcnRzIFVJIGNhblxuICogc2hvdyB3aGV0aGVyIGV2ZW50cyBhcmUgZmxvd2luZyAvIHN0YWxlIC8gZHJvcHBpbmcuIE9uZSByb3cgcGVyIG9yZy5cbiAqXG4gKiBAdGFibGUgaW5nZXN0X2hlYWx0aFxuICovXG5leHBvcnQgY29uc3QgaW5nZXN0SGVhbHRoID0gcGdUYWJsZSgnaW5nZXN0X2hlYWx0aCcsIHtcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkucHJpbWFyeUtleSgpLFxuICBsYXN0RXZlbnRBdDogdGltZXN0YW1wKCdsYXN0X2V2ZW50X2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIGZvcndhcmRlZDogYmlnaW50KCdmb3J3YXJkZWQnLCB7IG1vZGU6ICdudW1iZXInIH0pLFxuICBkcm9wcGVkOiBiaWdpbnQoJ2Ryb3BwZWQnLCB7IG1vZGU6ICdudW1iZXInIH0pLFxuICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCgndXBkYXRlZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLmRlZmF1bHROb3coKS5ub3ROdWxsKCksXG59KTtcblxuLyoqXG4gKiBQcm9kdWN0aW9uIGluY2lkZW50cyBpbmdlc3RlZCBmcm9tIHRoZSBvcmcncyBpbmNpZGVudCB0b29saW5nLiBUaGVcbiAqIHVzZXIgcG9pbnRzIHRoZWlyIEFsZXJ0bWFuYWdlciAvIFBhZ2VyRHV0eSAvIERhdGFkb2cgd2ViaG9vayBhdFxuICogYFBPU1QgL2FwaS9yZXBvcnRzL2luY2lkZW50c2AgKG1hY2hpbmUgYHJlcG9ydGluZzppbmdlc3RgIHNjb3BlKS4gRWFjaCBpbmNpZGVudFxuICogY2FycmllcyBpdHMgZXh0ZXJuYWwgaWQsIHRoZSBhZmZlY3RlZCBgZW52aXJvbm1lbnRgLCB3aGVuIGl0IG9wZW5lZCwgYW5kIHdoZW5cbiAqIGl0IHdhcyByZXNvbHZlZCAobnVsbGFibGUg4oCUIGEgbGF0ZXIgcmVzb2x2ZSB1cGRhdGVzIGl0KS4gRE9SQSBjb3JyZWxhdGVzIGVhY2hcbiAqIGluY2lkZW50IHRvIHRoZSBtb3N0IHJlY2VudCBzdWNjZXNzZnVsIGRlcGxveSB0byBgZW52aXJvbm1lbnRgIHdpdGhpblxuICogYERPUkFfSU5DSURFTlRfV0lORE9XX0hPVVJTYCwgdHVybmluZyBpdCBpbnRvIGFuIGF1dG9tYXRlZCBwb3N0LWRlcGxveSBmYWlsdXJlXG4gKiAoQ2hhbmdlIEZhaWx1cmUgUmF0ZSkgYW5kIGEgcmVhbCByZWNvdmVyeSB0aW1lIChgcmVzb2x2ZWRfYXQg4oiSIG9wZW5lZF9hdGAgTVRUUikuXG4gKiBgaW5jaWRlbnRfaWRgIGlzIFVOSVFVRSBwZXIgb3JnIHNvIGEgcmVzb2x2ZSByZS1wb3N0IGlzIGFuIGlkZW1wb3RlbnQgdXBzZXJ0LlxuICpcbiAqIEB0YWJsZSBpbmNpZGVudHNcbiAqL1xuZXhwb3J0IGNvbnN0IGluY2lkZW50ID0gcGdUYWJsZSgnaW5jaWRlbnRzJywge1xuICBpZDogdXVpZCgnaWQnKS5wcmltYXJ5S2V5KCkuZGVmYXVsdFJhbmRvbSgpLFxuICAvLyBFeHRlcm5hbCBpbmNpZGVudCBpZCBmcm9tIHRoZSBzb3VyY2Ugc3lzdGVtIChQYWdlckR1dHkvRGF0YWRvZy9BbGVydG1hbmFnZXIpLlxuICAvLyBVbmlxdWUgUEVSIE9SRyAoc2VlIGluY2lkZW50T3JnVW5pcXVlKSDigJQgdGhlIGlkZW1wb3RlbmN5ICsgdXBzZXJ0IGtleS5cbiAgaW5jaWRlbnRJZDogdmFyY2hhcignaW5jaWRlbnRfaWQnLCB7IGxlbmd0aDogMjU1IH0pLm5vdE51bGwoKSxcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkubm90TnVsbCgpLFxuICAvLyBBZmZlY3RlZCBkZXBsb3kgZW52aXJvbm1lbnQgKGUuZy4gXCJwcm9kdWN0aW9uXCIpLiBDb3JyZWxhdGVkIHRvIGEgZGVwbG95IGVudi5cbiAgZW52aXJvbm1lbnQ6IHZhcmNoYXIoJ2Vudmlyb25tZW50JywgeyBsZW5ndGg6IDI1NSB9KS5ub3ROdWxsKCksXG4gIG9wZW5lZEF0OiB0aW1lc3RhbXAoJ29wZW5lZF9hdCcsIHsgd2l0aFRpbWV6b25lOiB0cnVlIH0pLm5vdE51bGwoKSxcbiAgLy8gTlVMTCB3aGlsZSB0aGUgaW5jaWRlbnQgaXMgb3BlbjsgYSBsYXRlciByZXNvbHZlIHdlYmhvb2sgc2V0cyBpdCAoaWRlbXBvdGVudFxuICAvLyB1cHNlcnQpLiBgcmVzb2x2ZWRfYXQg4oiSIG9wZW5lZF9hdGAgaXMgdGhlIHJlYWwgTVRUUiBmb3IgdGhlIGNvcnJlbGF0ZWQgZGVwbG95LlxuICByZXNvbHZlZEF0OiB0aW1lc3RhbXAoJ3Jlc29sdmVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIHNldmVyaXR5OiB2YXJjaGFyKCdzZXZlcml0eScsIHsgbGVuZ3RoOiA1MCB9KS5ub3ROdWxsKCksXG4gIGNyZWF0ZWRBdDogdGltZXN0YW1wKCdjcmVhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0sICh0YWJsZSkgPT4gKHtcbiAgLy8gQ29ycmVsYXRpb24gc2NhbjogbW9zdC1yZWNlbnQtZGVwbG95LWJlZm9yZS1vcGVuIGxvb2t1cHMgZ3JvdXAgYnkgKG9yZywgZW52KVxuICAvLyBhbmQgcmFuZ2Ugb24gb3BlbmVkX2F0LlxuICBvcmdFbnZPcGVuZWRJZHg6IGluZGV4KCdpbmNpZGVudHNfb3JnX2Vudl9vcGVuZWRfaWR4Jykub24odGFibGUub3JnSWQsIHRhYmxlLmVudmlyb25tZW50LCB0YWJsZS5vcGVuZWRBdCksXG4gIC8vIElkZW1wb3RlbnQgdXBzZXJ0IC8gZGVkdXA6IG9uZSByb3cgcGVyIChvcmcsIGluY2lkZW50X2lkKS4gQSByZXNvbHZlIHJlLXBvc3RcbiAgLy8gdXBkYXRlcyByZXNvbHZlZF9hdCBpbnN0ZWFkIG9mIGluc2VydGluZyBhIGR1cGxpY2F0ZS5cbiAgb3JnSW5jaWRlbnRVbmlxdWU6IHVuaXF1ZUluZGV4KCdpbmNpZGVudHNfb3JnX2luY2lkZW50X3VuaXF1ZScpLm9uKHRhYmxlLm9yZ0lkLCB0YWJsZS5pbmNpZGVudElkKSxcbn0pKTtcblxuLyoqXG4gKiBQZXItb3JnIERPUkEgY29tcHV0YXRpb24gKyByZXRlbnRpb24gb3ZlcnJpZGVzLiBPbmUgcm93IHBlciBvcmcgKG9yZ19pZCBQSykuXG4gKiBgaW5jaWRlbnRXaW5kb3dIb3Vyc2Agb3ZlcnJpZGVzIHRoZSBnbG9iYWwgYERPUkFfSU5DSURFTlRfV0lORE9XX0hPVVJTYFxuICogdXNlZCB0byBjb3JyZWxhdGUgYW4gaW5nZXN0ZWQgaW5jaWRlbnQgdG8gdGhlIG1vc3QgcmVjZW50IHN1Y2Nlc3NmdWwgZGVwbG95LlxuICogYGV2ZW50UmV0ZW50aW9uRGF5c2AgLyBgZG9yYVJldGVudGlvbkRheXNgIG92ZXJyaWRlIHRoZSBnbG9iYWwgcmVwb3J0aW5nXG4gKiByZXRlbnRpb24gd2luZG93cyBmb3IgdGhlIHNwbGl0IHN3ZWVwIOKAlCBzdGFuZGFyZCBldmVudHMgKGBlbnZpcm9ubWVudCBJUyBOVUxMYClcbiAqIHZzIERPUkEgc291cmNlIChkZXBsb3kgc3RhZ2VzICsgYGRlcGxveW1lbnRfb3V0Y29tZXNgICsgYGluY2lkZW50c2ApLiBBbnkgTlVMTCAvXG4gKiBhYnNlbnQgdmFsdWUgZmFsbHMgYmFjayB0byBpdHMgZW52IGRlZmF1bHQuIFNldCBzZWxmLXNlcnZlIGJ5IGFuIG9yZyBhZG1pbiB2aWFcbiAqIGBQVVQgL2FwaS9yZXBvcnRzL3NldHRpbmdzL2luY2lkZW50c2AuIFRoaXMgdGFibGUgaXMgaXRzZWxmIG5ldmVyIHB1cmdlZC5cbiAqXG4gKiBAdGFibGUgZG9yYV9zZXR0aW5nc1xuICovXG5leHBvcnQgY29uc3QgZG9yYVNldHRpbmdzID0gcGdUYWJsZSgnZG9yYV9zZXR0aW5ncycsIHtcbiAgb3JnSWQ6IHZhcmNoYXIoJ29yZ19pZCcsIHsgbGVuZ3RoOiAyNTUgfSkucHJpbWFyeUtleSgpLFxuICBpbmNpZGVudFdpbmRvd0hvdXJzOiBpbnRlZ2VyKCdpbmNpZGVudF93aW5kb3dfaG91cnMnKSxcbiAgLy8gUmV0ZW50aW9uIG92ZXJyaWRlcyAoZGF5cykuIE5VTEwg4oeSIHVzZSB0aGUgZ2xvYmFsIGVudiBkZWZhdWx0XG4gIC8vIChSRVBPUlRJTkdfRVZFTlRfUkVURU5USU9OX0RBWVMgLyBSRVBPUlRJTkdfRE9SQV9SRVRFTlRJT05fREFZUykuXG4gIGV2ZW50UmV0ZW50aW9uRGF5czogaW50ZWdlcignZXZlbnRfcmV0ZW50aW9uX2RheXMnKSxcbiAgZG9yYVJldGVudGlvbkRheXM6IGludGVnZXIoJ2RvcmFfcmV0ZW50aW9uX2RheXMnKSxcbiAgLyoqXG4gICAqIFN0YWtlaG9sZGVyLXJlcG9ydCBQT0xJQ1kg4oCUIGFkbWluLW93bmVkLCBkZWxpYmVyYXRlbHkgTk9UIG9uXG4gICAqIGByZXBvcnRfZGVmaW5pdGlvbnNgLiBBIGxlYWQgY29tcG9zZXMgdGhlIHJlcG9ydDsgd2hvIG1heSByZWNlaXZlIGl0IGlzIHRoZVxuICAgKiBvcmcncyBjYWxsLCBzbyBhIGxlYWQgY2Fubm90IHdpZGVuIHRoZWlyIG93biByZXBvcnQncyBhdWRpZW5jZS5cbiAgICpcbiAgICogU2hhcmluZyBzdGFydHMgT0ZGOiBtaW50aW5nIGEgcHVibGljIGxpbmsgdHVybnMgaW50ZXJuYWwgZGVsaXZlcnkgbnVtYmVyc1xuICAgKiBpbnRvIGEgVVJMIGFueW9uZSBob2xkaW5nIGl0IGNhbiByZWFkLCB3aGljaCBpcyBhIGRlY2lzaW9uIGFuIGFkbWluIG1ha2VzXG4gICAqIG9uY2UgZm9yIHRoZSBvcmcsIG5vdCBhIGNoZWNrYm94IG9uIGV2ZXJ5IHJlcG9ydC5cbiAgICovXG4gIHJlcG9ydEV4dGVybmFsU2hhcmluZzogYm9vbGVhbigncmVwb3J0X2V4dGVybmFsX3NoYXJpbmcnKS5kZWZhdWx0KGZhbHNlKS5ub3ROdWxsKCksXG4gIC8qKiBBbGxvd2VkIHJlY2lwaWVudCBkb21haW5zLiBOVUxMIOKHkiBvcmcgbWVtYmVycyBvbmx5LCBubyBleHRlcm5hbCBhZGRyZXNzZXMuICovXG4gIHJlcG9ydFJlY2lwaWVudERvbWFpbnM6IGpzb25iKCdyZXBvcnRfcmVjaXBpZW50X2RvbWFpbnMnKS4kdHlwZTxzdHJpbmdbXT4oKSxcbiAgLyoqIEFuIGV4dGVybmFsIGFkZHJlc3MgbmVlZHMgYW4gYWRtaW4ncyBhcHByb3ZhbCBiZWZvcmUgYW55dGhpbmcgaXMgZGVsaXZlcmVkLiAqL1xuICByZXBvcnRSZXF1aXJlQXBwcm92YWw6IGJvb2xlYW4oJ3JlcG9ydF9yZXF1aXJlX2FwcHJvdmFsJykuZGVmYXVsdCh0cnVlKS5ub3ROdWxsKCksXG4gIC8vIGByZXBvcnRfc25hcHNob3RfcmV0ZW50aW9uX2RheXNgIHdhcyBERUxFVEVEIGhlcmUuIEl0IHByb21pc2VkIGEgcGVyLW9yZyBvdmVycmlkZSBmb3JcbiAgLy8gaG93IGxvbmcgYSBwdWJsaXNoZWQgcmVwb3J0J3Mgc25hcHNob3QgaXMga2VwdCwgYW5kIGl0IHdhcyBVTlJFQUNIQUJMRSBpbiBib3RoXG4gIC8vIGRpcmVjdGlvbnM6IG5vIHJvdXRlIGV2ZXIgd3JvdGUgaXQgYW5kIG5vIHN3ZWVwIGV2ZXIgcmVhZCBpdCwgc28gYW4gYWRtaW4gY291bGQgbm90XG4gIC8vIHNldCBpdCBhbmQgaXQgd291bGQgbm90IGhhdmUgbWF0dGVyZWQgaWYgdGhleSBoYWQuIFNuYXBzaG90IGxpZmV0aW1lIGNvbWVzIGZyb20gdGhlXG4gIC8vIHJ1bidzIG93biBgcHVyZ2VfYWZ0ZXJgIChyZXBvcnRpbmctcmV0ZW50aW9uLnRzKSwgYW5kIHRoZSBwZXItb3JnIGRpbWVuc2lvbiBpcyB0aGVcbiAgLy8gVElFUiBwbHVzIHRoZSByZXRlbnRpb24gLyBET1JBLWhpc3RvcnkgcGFja3MuXG4gIC8qKlxuICAgKiBPcHRpb25hbCwgT0ZGIGJ5IGRlZmF1bHQ6IG1pbnV0ZXMgdGhlIG9yZyByZWNrb25zIGl0IHNhdmVzIHBlciBwaXBlbGluZVxuICAgKiBjcmVhdGVkLCBmb3IgdGhlIGFkb3B0aW9uIHNlY3Rpb24uIE9mZiBieSBkZWZhdWx0IGJlY2F1c2UgYVxuICAgKiBwbGF0Zm9ybS1zdXBwbGllZCBudW1iZXIgaGVyZSB3b3VsZCBiZSB0aGUgcGxhdGZvcm0gbWFya2luZyBpdHMgb3duIGhvbWV3b3JrO1xuICAgKiBpdCBvbmx5IG1lYW5zIGFueXRoaW5nIHdoZW4gdGhlIGN1c3RvbWVyIGNob3NlIGl0LlxuICAgKi9cbiAgdGltZVNhdmVkTWludXRlc1BlclBpcGVsaW5lOiBpbnRlZ2VyKCd0aW1lX3NhdmVkX21pbnV0ZXNfcGVyX3BpcGVsaW5lJyksXG4gIC8qKlxuICAgKiBUaGUgb3JnJ3MgbmVlZHMtYXR0ZW50aW9uIHRocmVzaG9sZHMsIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHRzIFBFUiBGSUVMRC5cbiAgICpcbiAgICogT25lIGpzb25iIHJhdGhlciB0aGFuIGZpdmUgY29sdW1uczogdGhlIHNldCBpcyBjbG9zZWQgYW5kIHNtYWxsLCBpdCBpcyByZWFkIGFzIGFcbiAgICogdW5pdCBieSBleGFjdGx5IG9uZSBldmFsdWF0b3IsIGFuZCBhbiBvcmcgdGhhdCBzZXRzIG9uZSB0aHJlc2hvbGQgbXVzdCBrZWVwIHRoZVxuICAgKiBkZWZhdWx0cyBmb3IgdGhlIG90aGVyIGZvdXIg4oCUIHdoaWNoIGEgcGFydGlhbCBvYmplY3QgZXhwcmVzc2VzIGRpcmVjdGx5IGFuZCBmaXZlXG4gICAqIG51bGxhYmxlIGNvbHVtbnMgd291bGQgb25seSBpbXBseS5cbiAgICpcbiAgICogQ29uZmlndXJhYmxlIGF0IGFsbCBiZWNhdXNlIDkwJSBzdWNjZXNzIGlzIGEgY3Jpc2lzIGZvciBhIGRlcGxveSBwaXBlbGluZSBhbmRcbiAgICogdW5yZW1hcmthYmxlIGZvciBhIGZsYWt5IGludGVncmF0aW9uIHN1aXRlIHNvbWVib2R5IGlzIGFscmVhZHkgcmV3cml0aW5nOyBhXG4gICAqIHBsYXRmb3JtLWltcG9zZWQgbnVtYmVyIHdvdWxkIGJlIHdyb25nIGZvciBvbmUgb2YgdGhlbSBieSBjb25zdHJ1Y3Rpb24uXG4gICAqL1xuICByZXBvcnRBdHRlbnRpb25UaHJlc2hvbGRzOiBqc29uYigncmVwb3J0X2F0dGVudGlvbl90aHJlc2hvbGRzJykuJHR5cGU8UmVjb3JkPHN0cmluZywgbnVtYmVyPj4oKSxcbiAgLyoqXG4gICAqIFdoZW4gdGhpcyBvcmcgc3BlbnQgaXRzIE9ORSBmcmVlIHdhdGVybWFya2VkIHJlcG9ydCBwcmV2aWV3LlxuICAgKlxuICAgKiBPbmNlLCBldmVyLCBhbmQgbmV2ZXIgcmVzZXQg4oCUIG5vdCBwZXIgbW9udGgsIG5vdCBwZXIgdXNlci4gVGhlIHByZXZpZXcgZXhpc3RzIHNvIGFcbiAgICogbGVhZCBjYW4gc2VlIHRoZWlyIG93biBudW1iZXJzIGluIHRoZSBmb3JtYXQgYmVmb3JlIGFza2luZyBhbnlvbmUgdG8gcGF5IGZvciBpdCxcbiAgICogd2hpY2ggdGFrZXMgZXhhY3RseSBvbmUgcmVwb3J0OyBhIHJlbmV3YWJsZSBwcmV2aWV3IGlzIGp1c3QgdGhlIHByb2R1Y3QgZm9yIGZyZWUuXG4gICAqIFN0b3JlZCBhcyB0aGUgSU5TVEFOVCByYXRoZXIgdGhhbiBhIGJvb2xlYW4gc28gc3VwcG9ydCBjYW4gYW5zd2VyIFwid2hlbiBkaWQgdGhleVxuICAgKiB0cnkgaXRcIiB3aXRob3V0IGEgc2VwYXJhdGUgYXVkaXQgbG9va3VwLlxuICAgKi9cbiAgcmVwb3J0UHJldmlld1VzZWRBdDogdGltZXN0YW1wKCdyZXBvcnRfcHJldmlld191c2VkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSksXG4gIC8qKlxuICAgKiBUaGUgYG9jY3VycmVkQXRgIG9mIHRoZSBsYXN0IEFQUExJRUQgU3Rha2Vob2xkZXIgUmVwb3J0cyBlbnRpdGxlbWVudCBwdXNoLlxuICAgKlxuICAgKiBBIHdhdGVybWFyaywgc28gYW4gb3V0LW9mLW9yZGVyIHB1c2ggY2Fubm90IHJlc3VtZSBhbiBhY2NvdW50IHdob3NlIGFkZC1vbiBsYXBzZWQ6XG4gICAqIGJpbGxpbmcncyBsZWdzIGFyZSBiZXN0LWVmZm9ydCBhbmQgcmV0cmllZCwgc28gXCJsYXBzZWQgYXQgMTA6MDBcIiBhbmQgXCJyZW5ld2VkIGF0XG4gICAqIDEwOjA1XCIgY2FuIGFycml2ZSBpbiBlaXRoZXIgb3JkZXIsIGFuZCBhcHBseWluZyB0aGUgb2xkZXIgb25lIGxhc3Qgd291bGQgbGVhdmUgYVxuICAgKiBsYXBzZWQgYWNjb3VudCBwcm9kdWNpbmcgcmVwb3J0cyAob3IgYSBwYXlpbmcgb25lIHBhdXNlZCkuXG4gICAqL1xuICByZXBvcnRFbnRpdGxlbWVudFN5bmNlZEF0OiB0aW1lc3RhbXAoJ3JlcG9ydF9lbnRpdGxlbWVudF9zeW5jZWRfYXQnLCB7IHdpdGhUaW1lem9uZTogdHJ1ZSB9KSxcbiAgLyoqXG4gICAqIFRoZSBvcmcncyBERUZBVUxUIHJlcG9ydCB0aW1lem9uZSBhbmQgd2VlayBzdGFydCwgd2hpY2ggYSBuZXcgcmVwb3J0IGlzIGNyZWF0ZWQgd2l0aC5cbiAgICpcbiAgICogT24gdGhlIHJlcG9ydCBwb2xpY3kgcmF0aGVyIHRoYW4gb24gdGhlIHBsYXRmb3JtIG9yZywgYmVjYXVzZSBwbGF0Zm9ybSdzIG9yZ2FuaXphdGlvblxuICAgKiBoYXMgbm8gdGltZXpvbmUgY29uY2VwdCB0byBleHRlbmQgYW5kIGludmVudGluZyBvbmUgdGhlcmUgd291bGQgZ2l2ZSB0aGUgc2FtZSBzZXR0aW5nXG4gICAqIHR3byBvd25lcnMuIEFuIGFkbWluIHNldHMgaXQgb25jZSAoYG9yZ19zZXR0aW5nczp3cml0ZWAsIHRoZSBzYW1lIGdhdGUgYXMgdGhlIHJlc3Qgb2YgdGhlXG4gICAqIHBvbGljeSkgYW5kIGV2ZXJ5IGxlYWQncyBuZXcgcmVwb3J0IHN0YXJ0cyBjb3JyZWN0IGluc3RlYWQgb2Ygc3RhcnRpbmcgaW4gVVRDIGFuZFxuICAgKiBiZWluZyBub3RpY2VkIGEgd2VlayBsYXRlciwgd2hlbiBhIE1vbmRheSByZXBvcnQgaGFzIHB1dCBTdW5kYXkgZXZlbmluZydzIGRlcGxveXMgaW5cbiAgICogdGhlIHdyb25nIHdlZWsuXG4gICAqXG4gICAqIE5VTEwg4oeSIHRoZSBkZXBsb3ltZW50IGRlZmF1bHQuIFBlci1yZXBvcnQgdmFsdWVzIGFsd2F5cyB3aW46IGEgZGlzdHJpYnV0ZWQgdGVhbSBjYW5cbiAgICogaGF2ZSBvbmUgcmVwb3J0IGN1dCBpbiBDaGljYWdvIGFuZCBhbm90aGVyIGluIEJlcmxpbi5cbiAgICovXG4gIHJlcG9ydERlZmF1bHRUaW1lem9uZTogdmFyY2hhcigncmVwb3J0X2RlZmF1bHRfdGltZXpvbmUnLCB7IGxlbmd0aDogNjQgfSksXG4gIHJlcG9ydERlZmF1bHRXZWVrU3RhcnQ6IHZhcmNoYXIoJ3JlcG9ydF9kZWZhdWx0X3dlZWtfc3RhcnQnLCB7IGxlbmd0aDogMTAgfSksXG4gIHVwZGF0ZWRBdDogdGltZXN0YW1wKCd1cGRhdGVkX2F0JywgeyB3aXRoVGltZXpvbmU6IHRydWUgfSkuZGVmYXVsdE5vdygpLm5vdE51bGwoKSxcbn0pO1xuXG4vKipcbiAqIFR5cGVTY3JpcHQgdHlwZXMgcmVwcmVzZW50aW5nIGRhdGFiYXNlIHJvd3NcbiAqL1xuZXhwb3J0IHR5cGUgUGlwZWxpbmUgPSB0eXBlb2YgcGlwZWxpbmUuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgUGlwZWxpbmVJbnNlcnQgPSB0eXBlb2YgcGlwZWxpbmUuJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBQaXBlbGluZVJlZ2lzdHJ5ID0gdHlwZW9mIHBpcGVsaW5lUmVnaXN0cnkuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgUGlwZWxpbmVSZWdpc3RyeUluc2VydCA9IHR5cGVvZiBwaXBlbGluZVJlZ2lzdHJ5LiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgUGlwZWxpbmVFdmVudCA9IHR5cGVvZiBwaXBlbGluZUV2ZW50LiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIFBpcGVsaW5lRXZlbnRJbnNlcnQgPSB0eXBlb2YgcGlwZWxpbmVFdmVudC4kaW5mZXJJbnNlcnQ7XG5cbmV4cG9ydCB0eXBlIERlcGxveW1lbnRPdXRjb21lID0gdHlwZW9mIGRlcGxveW1lbnRPdXRjb21lLiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIERlcGxveW1lbnRPdXRjb21lSW5zZXJ0ID0gdHlwZW9mIGRlcGxveW1lbnRPdXRjb21lLiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgSW5nZXN0SGVhbHRoID0gdHlwZW9mIGluZ2VzdEhlYWx0aC4kaW5mZXJTZWxlY3Q7XG5leHBvcnQgdHlwZSBJbmdlc3RIZWFsdGhJbnNlcnQgPSB0eXBlb2YgaW5nZXN0SGVhbHRoLiRpbmZlckluc2VydDtcblxuZXhwb3J0IHR5cGUgSW5jaWRlbnQgPSB0eXBlb2YgaW5jaWRlbnQuJGluZmVyU2VsZWN0O1xuZXhwb3J0IHR5cGUgSW5jaWRlbnRJbnNlcnQgPSB0eXBlb2YgaW5jaWRlbnQuJGluZmVySW5zZXJ0O1xuXG5leHBvcnQgdHlwZSBEb3JhU2V0dGluZ3MgPSB0eXBlb2YgZG9yYVNldHRpbmdzLiRpbmZlclNlbGVjdDtcbmV4cG9ydCB0eXBlIERvcmFTZXR0aW5nc0luc2VydCA9IHR5cGVvZiBkb3JhU2V0dGluZ3MuJGluZmVySW5zZXJ0O1xuXG4vKipcbiAqIEhlbHBlciB0eXBlcyBmb3Igd29ya2luZyB3aXRoIHBhcnRpYWwgdXBkYXRlc1xuICovXG5leHBvcnQgdHlwZSBQaXBlbGluZVVwZGF0ZSA9IFBhcnRpYWw8T21pdDxQaXBlbGluZUluc2VydCwgJ2lkJyB8ICdjcmVhdGVkQXQnIHwgJ2NyZWF0ZWRCeSc+PjtcbiJdfQ==
|