@pipeline-builder/api-core 5.2.9 → 5.2.11

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.
@@ -268,6 +268,54 @@ export function signServiceJwt(claims, options) {
268
268
  });
269
269
  return compactJws(signingInput, signature);
270
270
  }
271
+ // ---------------------------------------------------------------------------
272
+ // What a service token may assert
273
+ // ---------------------------------------------------------------------------
274
+ /**
275
+ * Signers whose key is published in the bundle but whose PRIVATE half lives
276
+ * OUTSIDE the cluster — today only `deploy-bootstrap`, which the deploy scripts
277
+ * hold on the operator / CI host (`certs/service-keys/deploy-bootstrap.key`)
278
+ * for the registry base-image push.
279
+ *
280
+ * Because the public bundle is mounted into EVERY service, a token from such a
281
+ * signer would otherwise verify everywhere. So {@link verifyServiceJwt} refuses
282
+ * these signers unless the call site names them in `acceptServices` — trust in
283
+ * an out-of-cluster key is opted into per verification seam, never inherited
284
+ * from the bundle. The seams that opt in today:
285
+ *
286
+ * - api/image-registry `auth-resolver.ts` (the `/token` mint for the
287
+ * `library/*` base-image push), via `verifyBearerToken(token, { acceptServices })`.
288
+ *
289
+ * A route opts in with `requireAuth({ acceptServices: ['deploy-bootstrap'] })`.
290
+ */
291
+ export const OPT_IN_SERVICE_SIGNERS = ['deploy-bootstrap'];
292
+ /**
293
+ * The claims of a verified service token with every AUTHORITY claim a service
294
+ * may not assert about itself removed. A service principal's authority is its
295
+ * NAME (bound to its key — `requireInternalService`, `isServicePrincipalNamed`)
296
+ * plus the explicit least-privilege `permissions` claim, and nothing else:
297
+ *
298
+ * - `isSuperAdmin` is dropped — superadmin is a property of a PERSON, minted
299
+ * only by platform's user signer; a service key cannot confer it;
300
+ * - `isAdmin` is forced `false` and an `owner`/`admin` `role` is clamped to
301
+ * `member` — org admin-ness is likewise a person's membership, and every
302
+ * org-admin predicate (`isOrgAdmin`, `isAdmin === true`) reads one of these.
303
+ *
304
+ * Fail-safe by construction: a gate that wrongly relied on a service token's
305
+ * admin claim now refuses (403), it never grants more. Applied inside
306
+ * {@link verifyServiceJwt}, so EVERY chain that accepts a service token —
307
+ * api-core `requireAuth` / `verifyServicePrincipal`, platform's own verifier,
308
+ * image-registry's `/token` resolver — sees the same reduced claim set.
309
+ */
310
+ export function withoutServiceAuthorityClaims(claims) {
311
+ const c = { ...claims };
312
+ delete c.isSuperAdmin;
313
+ if ('isAdmin' in c)
314
+ c.isAdmin = false;
315
+ if (c.role === 'owner' || c.role === 'admin')
316
+ c.role = 'member';
317
+ return c;
318
+ }
271
319
  /**
272
320
  * Verify an internal service token, SYNCHRONOUSLY, and return its claims.
273
321
  *
@@ -276,8 +324,15 @@ export function signServiceJwt(claims, options) {
276
324
  * be impersonated by any other service — not even one that holds a valid key of
277
325
  * its own — a guarantee no shared secret can give.
278
326
  *
327
+ * Two further rules, both fail-closed:
328
+ * - an {@link OPT_IN_SERVICE_SIGNERS opt-in signer} (`deploy-bootstrap`) is
329
+ * refused unless `options.acceptServices` names it;
330
+ * - the returned claims never carry superadmin or org-admin authority
331
+ * ({@link withoutServiceAuthorityClaims}).
332
+ *
279
333
  * @throws {jwt.JsonWebTokenError} unknown `kid`, wrong algorithm, bad
280
- * signature, expired, or a `sub` that disagrees with the signing key.
334
+ * signature, expired, a `sub` that disagrees with the signing key, or an
335
+ * opt-in signer this call site did not accept.
281
336
  * @throws {ServiceKeyError} no verification bundle could be read at all — the
282
337
  * token's validity is UNKNOWN and the caller must not treat it as valid.
283
338
  */
@@ -312,8 +367,14 @@ export function verifyServiceJwt(token, options) {
312
367
  emitCounter('service_token_verify_total', { result: 'subject_mismatch', service: entry.serviceName });
313
368
  throw new jwt.JsonWebTokenError(`Service token subject ${String(claims.sub)} was signed by ${entry.serviceName}`);
314
369
  }
370
+ if (OPT_IN_SERVICE_SIGNERS.includes(entry.serviceName) && !options.acceptServices?.includes(entry.serviceName)) {
371
+ // A genuine token from an out-of-cluster signer, presented to a seam that
372
+ // never opted in to trusting it.
373
+ emitCounter('service_token_verify_total', { result: 'signer_not_accepted', service: entry.serviceName });
374
+ throw new jwt.JsonWebTokenError(`Service tokens signed by ${entry.serviceName} are not accepted here`);
375
+ }
315
376
  emitCounter('service_token_verify_total', { result: 'ok', service: entry.serviceName });
316
- return claims;
377
+ return withoutServiceAuthorityClaims(claims);
317
378
  }
318
379
  /**
319
380
  * True while this service still publishes more than one verification key — i.e.
@@ -340,4 +401,4 @@ export function _resetServiceKeysForTests() {
340
401
  ephemeralKeys = undefined;
341
402
  ephemeralWarned = false;
342
403
  }
343
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1rZXlzLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvc2VydmljZS1rZXlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0RHO0FBRUgsT0FBTyxNQUEwQixNQUFNLFFBQVEsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQztBQUM1QyxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDL0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQWtCLE1BQU0saUJBQWlCLENBQUM7QUFDckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFcEQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBRTVDLHVFQUF1RTtBQUN2RSxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxPQUFPLENBQUM7QUFFL0MsdUZBQXVGO0FBQ3ZGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLFVBQVUsQ0FBQztBQUVqRCxpRkFBaUY7QUFDakYsTUFBTSwwQkFBMEIsR0FBRyxPQUFPLENBQUMsQ0FBQyxZQUFZO0FBb0J4RCw2RUFBNkU7QUFDN0UsTUFBTSxPQUFPLGVBQWdCLFNBQVEsS0FBSztJQUN4QyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0NBQ0Y7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0s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aWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFBlci1zZXJ2aWNlIHNpZ25pbmcga2V5cyBmb3IgSU5URVJOQUwgc2VydmljZS10by1zZXJ2aWNlIHRva2Vucy5cbiAqXG4gKiBCZWZvcmUgdGhpcywgZXZlcnkgc2VydmljZSBoZWxkIG9uZSBzaGFyZWQgYEpXVF9TRUNSRVRgLCBzbyBhbnkgc2VydmljZSBjb3VsZFxuICogbWludCBhIHRva2VuIG5hbWluZyBhbnkgT1RIRVIgc2VydmljZSDigJQgXCJiaWxsaW5nIHNhaWQgc29cIiB3YXMgdW5mYWxzaWZpYWJsZSxcbiAqIGFuZCBhIHNpbmdsZSBjb21wcm9taXNlZCB3b3JrbG9hZCBjb3VsZCBzcGVhayBmb3IgdGhlIHdob2xlIGZsZWV0LiBOb3cgZWFjaFxuICogc2VydmljZSBzaWducyB3aXRoIGl0cyBPV04gRVMyNTYgKEVDIFAtMjU2KSBrZXkgYW5kIGNvbnN1bWVycyB2ZXJpZnkgYWdhaW5zdFxuICogdGhlIHB1YmxpYyBoYWx2ZXMuIFRoZSBga2lkYCBpcyBib3VuZCB0byB0aGUgc2lnbmVyJ3MgTkFNRSwgc28gYSB0b2tlbiB3aG9zZVxuICogYHN1YmAgc2F5cyBgc2VydmljZTpiaWxsaW5nYCBidXQgd2FzIHNpZ25lZCB3aXRoIGNvbXBsaWFuY2UncyBrZXkgaXMgYVxuICogZm9yZ2VyeSwgbm90IGEgdmFsaWQgdG9rZW4gd2l0aCBhIGNvbmZ1c2luZyBzdWJqZWN0LlxuICpcbiAqICMjIFdoeSBwdWJsaWMga2V5cyBhcmUgZGlzdHJpYnV0ZWQgYnkgQ09ORklHLCBub3QgYnkgcGVyLXNlcnZpY2UgSldLUyBlbmRwb2ludHNcbiAqXG4gKiBUaGUgdXNlciBjaGFpbiBmZXRjaGVzIHBsYXRmb3JtJ3MgSldLUyBvdmVyIEhUVFAgYmVjYXVzZSB0aGVyZSBpcyBleGFjdGx5XG4gKiBvbmUgc2lnbmVyIGFuZCBpdCBpcyB0aGUgb25lIHNlcnZpY2UgdGhhdCBtdXN0IGJlIHVwIGZvciBhbnlib2R5IHRvIHNpZ24gaW4uXG4gKiBUaGUgc2VydmljZSBjaGFpbiBpcyB0aGUgb3Bwb3NpdGUgc2hhcGUsIGFuZCB0aHJlZSBwcm9wZXJ0aWVzIGRlY2lkZWQgaXQ6XG4gKlxuICogIDEuICoqYHZlcmlmeVNlcnZpY2VQcmluY2lwYWxgIG11c3Qgc3RheSBzeW5jaHJvbm91cy4qKiBUaGUgZ2xvYmFsIHJhdGVcbiAqICAgICBsaW1pdGVyJ3MgYHNraXBgIGFuZCBhcHAtZmFjdG9yeSdzIGAvd2FybXVwYCBndWFyZCB2ZXJpZnkgYSBzZXJ2aWNlIHRva2VuXG4gKiAgICAgQkVGT1JFIGByZXF1aXJlQXV0aGAgcnVucywgaW4gc3luY2hyb25vdXMgRXhwcmVzcyBjYWxsYmFja3MuIEFuIEhUVFAgSldLU1xuICogICAgIGZldGNoIHdvdWxkIGZvcmNlIHRob3NlIGFzeW5jIOKAlCBhIGNoYW5nZSB0aGF0IHJlYWNoZXMgaW50byBldmVyeVxuICogICAgIHNlcnZpY2UncyBsaW1pdGVyIHdpcmluZy5cbiAqICAyLiAqKk5vIGF2YWlsYWJpbGl0eSBjb3VwbGluZy4qKiBXaXRoIHBlci1zZXJ2aWNlIEpXS1MgZW5kcG9pbnRzLCB2ZXJpZnlpbmcgYVxuICogICAgIHRva2VuIG1pbnRlZCBieSBgYmlsbGluZ2AgbmVlZHMgYGJpbGxpbmdgIHRvIGJlIHJlYWNoYWJsZSDigJQgc28gYmlsbGluZ1xuICogICAgIGJlaW5nIGRvd24gd291bGQgc3RvcCBwbGF0Zm9ybSBmcm9tIGFjY2VwdGluZyBiaWxsaW5nJ3MgaW4tZmxpZ2h0IGNhbGxzLFxuICogICAgIHR1cm5pbmcgb25lIG91dGFnZSBpbnRvIHNldmVyYWwuIEEgbW91bnRlZCBmaWxlIGhhcyBubyBzdWNoIGVkZ2UuXG4gKiAgMy4gKipObyBOw5dOIGFkZHJlc3MgY29uZmlnLioqIDEwIHNlcnZpY2VzIHdvdWxkIGVhY2ggbmVlZCBldmVyeSBwZWVyJ3NcbiAqICAgICBob3N0L3BvcnQgKGFuZCBjb21wb3NlLCB3aGljaCBoYXMgbm8gbWVzaCwgd291bGQgbmVlZCB0aGVtIHRvbykuXG4gKlxuICogU28gdGhlIGRlcGxveSBnZW5lcmF0ZXMgb25lIGtleXBhaXIgcGVyIHNlcnZpY2UsIG1vdW50cyBlYWNoIHByaXZhdGUga2V5IE9OTFlcbiAqIGludG8gaXRzIG93biBzZXJ2aWNlLCBhbmQgbW91bnRzIE9ORSBwdWJsaWMgYnVuZGxlIChyZWFkLW9ubHkpIGV2ZXJ5d2hlcmU6XG4gKlxuICogICBgU0VSVklDRV9TSUdOSU5HX0tFWV9GSUxFYCAgdGhpcyBzZXJ2aWNlJ3MgRUMgUC0yNTYgcHJpdmF0ZSBrZXkgKFBLQ1MjOCBQRU0pXG4gKiAgIGBTRVJWSUNFX0tFWV9CVU5ETEVfRklMRWAgICBgeyBcInNlcnZpY2VzXCI6IHsgXCI8bmFtZT5cIjogeyBcImtleXNcIjogWzxqd2s+4oCmXSB9IH0gfWBcbiAqXG4gKiBSb3RhdGlvbiBpcyBieSBga2lkYCwgaW4gdGhlIHNhbWUgc2hhcGUgYXMgdGhlIHVzZXIgY2hhaW46IGFkZCB0aGUgbmV3IHB1YmxpY1xuICoga2V5IHRvIHRoZSBidW5kbGUgKHRoZSBzZXJ2aWNlIG5vdyBwdWJsaXNoZXMgdHdvKSwgcm9sbCB0aGUgYnVuZGxlIG91dCwgc3dhcFxuICogdGhhdCBzZXJ2aWNlJ3MgcHJpdmF0ZSBrZXksIHRoZW4gZHJvcCB0aGUgcmV0aXJlZCBwdWJsaWMga2V5LiBUaGUgYnVuZGxlIGlzXG4gKiByZS1yZWFkIG9uIGFuIGludGVydmFsIEFORCBvbiBhbiBtdGltZSBjaGFuZ2UsIHNvIGEgcm90YXRpb24gbmVlZHMgbm8gcmVzdGFydC5cbiAqIGBkZXBsb3kvYmluL3NlcnZpY2Utc2lnbmluZy1rZXlzLnNoYCBnZW5lcmF0ZXMgYW5kIHJvdGF0ZXMgYm90aCBoYWx2ZXMuXG4gKlxuICogIyMgRXBoZW1lcmFsIG1vZGVcbiAqXG4gKiBXaXRoIG5vIGBTRVJWSUNFX1NJR05JTkdfS0VZX0ZJTEVgIGNvbmZpZ3VyZWQsIGEga2V5cGFpciBpcyBnZW5lcmF0ZWRcbiAqIElOLVBST0NFU1MgcGVyIHJlcXVlc3RlZCBzZXJ2aWNlIG5hbWUgYW5kIHJlZ2lzdGVyZWQgaW4gdGhlIGluLW1lbW9yeSBidW5kbGUuXG4gKiBUaGF0IGtlZXBzIHNpbmdsZS1wcm9jZXNzIHN1aXRlcyBhbmQgbG9jYWwgb25lLW9mZiBzY3JpcHRzIHdvcmtpbmcgd2l0aCBubyBrZXlcbiAqIG1hdGVyaWFsLCBhbmQgaXQgY2FuIG5ldmVyIHdpZGVuIHRydXN0OiB0aGUgb25seSB2ZXJpZmllciB0aGF0IGFjY2VwdHMgc3VjaCBhXG4gKiB0b2tlbiBpcyB0aGUgcHJvY2VzcyB0aGF0IG1pbnRlZCBpdC4gSXQgaXMgbG9nZ2VkIG9uY2UgYXQgd2FybiBsZXZlbCwgYW5kXG4gKiBjb3VudGVkLCBiZWNhdXNlIGluIGEgcmVhbCBkZXBsb3ltZW50IGl0IG1lYW5zIHRoaXMgc2VydmljZSdzIHBlZXJzIHdpbGxcbiAqIHJlamVjdCBldmVyeXRoaW5nIGl0IHNlbmRzLlxuICovXG5cbmltcG9ydCBjcnlwdG8sIHsgdHlwZSBLZXlPYmplY3QgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCBzdGF0U3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCBqd3QgZnJvbSAnanNvbndlYnRva2VuJztcbmltcG9ydCB7IGNvbXBhY3RKd3MsIGVuY29kZUp3c1NpZ25pbmdJbnB1dCwgcHVibGljSndrRnJvbSwgcHVibGljS2V5RnJvbUp3aywgdHlwZSBQdWJsaWNKd2sgfSBmcm9tICcuLi91dGlscy9qd2suanMnO1xuaW1wb3J0IHsgY3JlYXRlTG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IGVtaXRDb3VudGVyIH0gZnJvbSAnLi4vdXRpbHMvbWV0cmljLWVtaXR0ZXIuanMnO1xuaW1wb3J0IHsgZXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vdXRpbHMvcmVzcG9uc2UuanMnO1xuXG5jb25zdCBsb2dnZXIgPSBjcmVhdGVMb2dnZXIoJ3NlcnZpY2Uta2V5cycpO1xuXG4vKiogVGhlIE9OTFkgYWxnb3JpdGhtIGFuIGludGVybmFsIHNlcnZpY2UgdG9rZW4gbWF5IGJlIHNpZ25lZCB3aXRoLiAqL1xuZXhwb3J0IGNvbnN0IFNFUlZJQ0VfVE9LRU5fQUxHT1JJVEhNID0gJ0VTMjU2JztcblxuLyoqIFN1YmplY3QgcHJlZml4IG5hbWluZyB0aGUgY2FsbGluZyBzZXJ2aWNlIG9uIGEgc2VydmljZSB0b2tlbiAoYHNlcnZpY2U6PG5hbWU+YCkuICovXG5leHBvcnQgY29uc3QgU0VSVklDRV9TVUJKRUNUX1BSRUZJWCA9ICdzZXJ2aWNlOic7XG5cbi8qKiBIb3cgbG9uZyBhIGxvYWRlZCBidW5kbGUgaXMgc2VydmVkIGJlZm9yZSBpdCBpcyByZS1yZWFkIChyb3RhdGlvbiBwaWNrdXApLiAqL1xuY29uc3QgQlVORExFX1JFRlJFU0hfSU5URVJWQUxfTVMgPSAzMDBfMDAwOyAvLyA1IG1pbnV0ZXNcblxuLyoqIE9uZSBzZXJ2aWNlJ3MgcHVibGlzaGVkIHZlcmlmaWNhdGlvbiBrZXlzLCBhcyB0aGV5IGFwcGVhciBpbiB0aGUgYnVuZGxlIGZpbGUuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VLZXlFbnRyeSB7XG4gIGtleXM6IFB1YmxpY0p3a1tdO1xufVxuXG4vKiogVGhlIGRvY3VtZW50IGBTRVJWSUNFX0tFWV9CVU5ETEVfRklMRWAgaG9sZHM6IGV2ZXJ5IHNlcnZpY2UncyBwdWJsaWMga2V5cy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZUtleUJ1bmRsZSB7XG4gIHNlcnZpY2VzOiBSZWNvcmQ8c3RyaW5nLCBTZXJ2aWNlS2V5RW50cnk+O1xufVxuXG4vKiogQSBzaWduaW5nIGtleSB0aGlzIHByb2Nlc3MgaG9sZHMsIGluIHRoZSBmb3JtcyBzaWduaW5nIG5lZWRzLiAqL1xuaW50ZXJmYWNlIExvY2FsU2lnbmluZ0tleSB7XG4gIHNlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIGtpZDogc3RyaW5nO1xuICBwcml2YXRlS2V5OiBLZXlPYmplY3Q7XG4gIHB1YmxpY0p3azogUHVibGljSndrO1xufVxuXG4vKiogVGhlIGJ1bmRsZSBjb3VsZCBub3QgYmUgbG9hZGVkIG9yIGRvZXMgbm90IGtub3cgdGhlIGtleSBhIHRva2VuIG5hbWVzLiAqL1xuZXhwb3J0IGNsYXNzIFNlcnZpY2VLZXlFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1NlcnZpY2VLZXlFcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIHByb2Nlc3MncyBzZXJ2aWNlIGlkZW50aXR5IOKAlCB0aGUgYDxuYW1lPmAgaW4gYHNlcnZpY2U6PG5hbWU+YCBhbmQgdGhlXG4gKiBuYW1lIGl0cyBrZXkgaXMgcHVibGlzaGVkIHVuZGVyLiBgU0VSVklDRV9OQU1FYCBpcyBhbHJlYWR5IHNldCBwZXIgc2VydmljZSBpblxuICogZXZlcnkgZGVwbG95IHRhcmdldCAoY29tcG9zZSwgbWluaWt1YmUsIGVjMiwgZWtzKSwgYW5kIGlzIHRoZSBzYW1lIHZhbHVlIHRoZVxuICogYXVkaXQgYW5kIG1ldHJpYyBsYWJlbHMgdXNlLCBzbyB0aGVyZSBpcyBvbmUgc291cmNlIG9mIHRydXRoIGZvciBcIndobyBhbSBJXCIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJ2aWNlSWRlbnRpdHkoKTogc3RyaW5nIHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52LlNFUlZJQ0VfTkFNRSB8fCAnYXBpJztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMb2NhbCBzaWduaW5nIGtleVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmxldCBsb2NhbEtleTogTG9jYWxTaWduaW5nS2V5IHwgdW5kZWZpbmVkO1xubGV0IGVwaGVtZXJhbEtleXM6IE1hcDxzdHJpbmcsIExvY2FsU2lnbmluZ0tleT4gfCB1bmRlZmluZWQ7XG5sZXQgZXBoZW1lcmFsV2FybmVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGxvYWRDb25maWd1cmVkU2lnbmluZ0tleShmaWxlOiBzdHJpbmcpOiBMb2NhbFNpZ25pbmdLZXkge1xuICBjb25zdCBzZXJ2aWNlTmFtZSA9IHNlcnZpY2VJZGVudGl0eSgpO1xuICBsZXQgcHJpdmF0ZUtleTogS2V5T2JqZWN0O1xuICB0cnkge1xuICAgIHByaXZhdGVLZXkgPSBjcnlwdG8uY3JlYXRlUHJpdmF0ZUtleShyZWFkRmlsZVN5bmMoZmlsZSwgJ3V0ZjgnKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IFNlcnZpY2VLZXlFcnJvcihgQ291bGQgbm90IHJlYWQgdGhlIHNlcnZpY2Ugc2lnbmluZyBrZXkgYXQgJHtmaWxlfTogJHtlcnJvck1lc3NhZ2UoZXJyb3IpfWApO1xuICB9XG4gIC8vIHB1YmxpY0p3a0Zyb20gcmVqZWN0cyBhbnl0aGluZyBidXQgYW4gRUMgUC0yNTYga2V5LCBzbyBhIHNlcnZpY2UgY29uZmlndXJlZFxuICAvLyB3aXRoIChzYXkpIGFuIFJTQSBrZXkgZmFpbHMgSEVSRSByYXRoZXIgdGhhbiBtaW50aW5nIHRva2VucyBub2JvZHkgdmVyaWZpZXMuXG4gIGNvbnN0IHB1YmxpY0p3ayA9IHB1YmxpY0p3a0Zyb20oY3J5cHRvLmNyZWF0ZVB1YmxpY0tleShwcml2YXRlS2V5KSk7XG4gIHJldHVybiB7IHNlcnZpY2VOYW1lLCBraWQ6IHB1YmxpY0p3ay5raWQsIHByaXZhdGVLZXksIHB1YmxpY0p3ayB9O1xufVxuXG4vKipcbiAqIFRoZSBpbi1wcm9jZXNzIGtleSBmb3IgYHNlcnZpY2VOYW1lYCBpbiBlcGhlbWVyYWwgbW9kZSwgZ2VuZXJhdGVkIG9uIGZpcnN0XG4gKiB1c2UgYW5kIHJlZ2lzdGVyZWQgaW4gdGhlIGluLW1lbW9yeSBidW5kbGUgc28gdGhpcyBwcm9jZXNzIGNhbiB2ZXJpZnkgaXRzIG93blxuICogdG9rZW5zLiBLZXllZCBieSBOQU1FIChub3QganVzdCBvbmUga2V5KSBzbyBhIHNpbmdsZS1wcm9jZXNzIHN1aXRlIGNhbiBtaW50XG4gKiB0b2tlbnMgZm9yIHNldmVyYWwgc2VydmljZXMsIGFzIHRoZSByZWFsIGZsZWV0IGRvZXMgYWNyb3NzIHByb2Nlc3Nlcy5cbiAqL1xuZnVuY3Rpb24gZXBoZW1lcmFsU2lnbmluZ0tleShzZXJ2aWNlTmFtZTogc3RyaW5nKTogTG9jYWxTaWduaW5nS2V5IHtcbiAgZXBoZW1lcmFsS2V5cyA/Pz0gbmV3IE1hcCgpO1xuICBjb25zdCBleGlzdGluZyA9IGVwaGVtZXJhbEtleXMuZ2V0KHNlcnZpY2VOYW1lKTtcbiAgaWYgKGV4aXN0aW5nKSByZXR1cm4gZXhpc3Rpbmc7XG5cbiAgaWYgKCFlcGhlbWVyYWxXYXJuZWQpIHtcbiAgICBlcGhlbWVyYWxXYXJuZWQgPSB0cnVlO1xuICAgIGVtaXRDb3VudGVyKCdzZXJ2aWNlX3NpZ25pbmdfZXBoZW1lcmFsX2tleV90b3RhbCcsIHsgc2VydmljZTogc2VydmljZUlkZW50aXR5KCkgfSk7XG4gICAgbG9nZ2VyLndhcm4oJ1NFUlZJQ0VfU0lHTklOR19LRVlfRklMRSBpcyBub3Qgc2V0IOKAlCBtaW50aW5nIGludGVybmFsIHNlcnZpY2UgdG9rZW5zIHdpdGggYW4gRVBIRU1FUkFMIGtleS4gT25seSB0aGlzIHByb2Nlc3Mgd2lsbCBhY2NlcHQgdGhlbTsgZXZlcnkgcGVlciB3aWxsIHJlamVjdCB0aGVtLiBTZXQgU0VSVklDRV9TSUdOSU5HX0tFWV9GSUxFICsgU0VSVklDRV9LRVlfQlVORExFX0ZJTEUgKGRlcGxveS9iaW4vc2VydmljZS1zaWduaW5nLWtleXMuc2gpLicpO1xuICB9XG4gIGNvbnN0IHsgcHJpdmF0ZUtleSwgcHVibGljS2V5IH0gPSBjcnlwdG8uZ2VuZXJhdGVLZXlQYWlyU3luYygnZWMnLCB7IG5hbWVkQ3VydmU6ICdwcmltZTI1NnYxJyB9KTtcbiAgY29uc3QgcHVibGljSndrID0gcHVibGljSndrRnJvbShwdWJsaWNLZXkpO1xuICBjb25zdCBnZW5lcmF0ZWQ6IExvY2FsU2lnbmluZ0tleSA9IHsgc2VydmljZU5hbWUsIGtpZDogcHVibGljSndrLmtpZCwgcHJpdmF0ZUtleSwgcHVibGljSndrIH07XG4gIGVwaGVtZXJhbEtleXMuc2V0KHNlcnZpY2VOYW1lLCBnZW5lcmF0ZWQpO1xuICByZXR1cm4gZ2VuZXJhdGVkO1xufVxuXG4vKipcbiAqIFRoZSBrZXkgYHNlcnZpY2VOYW1lYCBtdXN0IGJlIHNpZ25lZCB3aXRoLlxuICpcbiAqIEluIGBjb25maWd1cmVkYCBtb2RlIHRoZXJlIGlzIGV4YWN0bHkgT05FIGtleSDigJQgdGhpcyBzZXJ2aWNlJ3Mg4oCUIHNvIGEgcmVxdWVzdFxuICogdG8gc2lnbiBhcyBzb21lIE9USEVSIHNlcnZpY2UgaXMgYSBidWcgYW5kIHRocm93czogc3VjaCBhIHRva2VuIHdvdWxkIGJlXG4gKiB1bnZlcmlmaWFibGUgZXZlcnl3aGVyZSAoaXRzIGBraWRgIG5hbWVzIHRoaXMgc2VydmljZSwgaXRzIGBzdWJgIGFub3RoZXIpLlxuICogRmFpbGluZyBhdCB0aGUgbWludCBtYWtlcyB0aGF0IGFuIGltbWVkaWF0ZSwgb2J2aW91cyBlcnJvciBpbnN0ZWFkIG9mIGFcbiAqIHJ1bnRpbWUgNDAxLlxuICovXG5mdW5jdGlvbiBzaWduaW5nS2V5Rm9yKHNlcnZpY2VOYW1lOiBzdHJpbmcpOiBMb2NhbFNpZ25pbmdLZXkge1xuICBjb25zdCBmaWxlID0gcHJvY2Vzcy5lbnYuU0VSVklDRV9TSUdOSU5HX0tFWV9GSUxFO1xuICBpZiAoIWZpbGUpIHJldHVybiBlcGhlbWVyYWxTaWduaW5nS2V5KHNlcnZpY2VOYW1lKTtcblxuICBpZiAoIWxvY2FsS2V5IHx8IGxvY2FsS2V5LnNlcnZpY2VOYW1lICE9PSBzZXJ2aWNlSWRlbnRpdHkoKSkge1xuICAgIGxvY2FsS2V5ID0gbG9hZENvbmZpZ3VyZWRTaWduaW5nS2V5KGZpbGUpO1xuICB9XG4gIGlmIChzZXJ2aWNlTmFtZSAhPT0gbG9jYWxLZXkuc2VydmljZU5hbWUpIHtcbiAgICB0aHJvdyBuZXcgU2VydmljZUtleUVycm9yKFxuICAgICAgYFRoaXMgcHJvY2VzcyBpcyAnJHtsb2NhbEtleS5zZXJ2aWNlTmFtZX0nIGFuZCBob2xkcyBvbmx5IGl0cyBvd24gc2lnbmluZyBrZXksIHNvIGl0IGNhbm5vdCBtaW50IGEgdG9rZW4gZm9yICcke3NlcnZpY2VOYW1lfScuIGBcbiAgICAgICsgJ05hbWUgdGhlIGNhbGxpbmcgc2VydmljZSBjb3JyZWN0bHksIG9yIGdpdmUgdGhlIGNhbGxlciBpdHMgb3duIGtleS4nLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGxvY2FsS2V5O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFZlcmlmaWNhdGlvbiBidW5kbGVcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5pbnRlcmZhY2UgTG9hZGVkQnVuZGxlIHtcbiAgLyoqIGBraWRgIOKGkiB0aGUgc2VydmljZSB0aGF0IHB1Ymxpc2hlZCBpdCwgcGx1cyB0aGUgdmVyaWZpY2F0aW9uIGtleS4gKi9cbiAgYnlLaWQ6IE1hcDxzdHJpbmcsIHsgc2VydmljZU5hbWU6IHN0cmluZzsga2V5OiBLZXlPYmplY3QgfT47XG4gIGxvYWRlZEF0OiBudW1iZXI7XG4gIG10aW1lTXM6IG51bWJlcjtcbn1cblxubGV0IGJ1bmRsZTogTG9hZGVkQnVuZGxlIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBwYXJzZUJ1bmRsZShyYXc6IHN0cmluZywgZmlsZTogc3RyaW5nKTogTWFwPHN0cmluZywgeyBzZXJ2aWNlTmFtZTogc3RyaW5nOyBrZXk6IEtleU9iamVjdCB9PiB7XG4gIGxldCBkb2N1bWVudDogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICBkb2N1bWVudCA9IEpTT04ucGFyc2UocmF3KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgU2VydmljZUtleUVycm9yKGAke2ZpbGV9IGlzIG5vdCB2YWxpZCBKU09OOiAke2Vycm9yTWVzc2FnZShlcnJvcil9YCk7XG4gIH1cbiAgY29uc3Qgc2VydmljZXMgPSAoZG9jdW1lbnQgYXMgUGFydGlhbDxTZXJ2aWNlS2V5QnVuZGxlPik/LnNlcnZpY2VzO1xuICBpZiAoIXNlcnZpY2VzIHx8IHR5cGVvZiBzZXJ2aWNlcyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgU2VydmljZUtleUVycm9yKGAke2ZpbGV9IGhhcyBubyBcInNlcnZpY2VzXCIgb2JqZWN0YCk7XG4gIH1cbiAgY29uc3QgYnlLaWQgPSBuZXcgTWFwPHN0cmluZywgeyBzZXJ2aWNlTmFtZTogc3RyaW5nOyBrZXk6IEtleU9iamVjdCB9PigpO1xuICBmb3IgKGNvbnN0IFtzZXJ2aWNlTmFtZSwgZW50cnldIG9mIE9iamVjdC5lbnRyaWVzKHNlcnZpY2VzKSkge1xuICAgIGZvciAoY29uc3QgandrIG9mIGVudHJ5Py5rZXlzID8/IFtdKSB7XG4gICAgICBpZiAoIWp3az8ua2lkKSBjb250aW51ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGJ5S2lkLnNldChqd2sua2lkLCB7IHNlcnZpY2VOYW1lLCBrZXk6IHB1YmxpY0tleUZyb21Kd2soandrKSB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIE9uZSB1bnVzYWJsZSBlbnRyeSBtdXN0IG5vdCBkaXNjYXJkIHRoZSByZXN0IG9mIHRoZSBidW5kbGUg4oCUIHRoZSBzYW1lXG4gICAgICAgIC8vIHJ1bGUgdGhlIEpXS1MgY2FjaGUgYXBwbGllcyB0byBwbGF0Zm9ybSdzIHB1Ymxpc2hlZCBzZXQuXG4gICAgICAgIGxvZ2dlci53YXJuKCdTa2lwcGluZyB1bnVzYWJsZSBzZXJ2aWNlIGtleScsIHsgc2VydmljZU5hbWUsIGtpZDogandrLmtpZCwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChieUtpZC5zaXplID09PSAwKSB0aHJvdyBuZXcgU2VydmljZUtleUVycm9yKGAke2ZpbGV9IGNvbnRhaW5lZCBubyB1c2FibGUgc2VydmljZSBrZXlzYCk7XG4gIHJldHVybiBieUtpZDtcbn1cblxuLyoqXG4gKiBUaGUgYGtpZGAg4oaSIHNlcnZpY2UgbWFwLCByZS1yZWFkIHdoZW4gdGhlIHJlZnJlc2ggaW50ZXJ2YWwgaGFzIHBhc3NlZCBvciB0aGVcbiAqIGZpbGUncyBtdGltZSBjaGFuZ2VkIChzbyBhIHJvdGF0aW9uIGlzIHBpY2tlZCB1cCB3aXRob3V0IGEgcmVzdGFydCkuXG4gKlxuICogSW4gZXBoZW1lcmFsIG1vZGUgdGhlIFwiYnVuZGxlXCIgaXMgd2hhdGV2ZXIgdGhpcyBwcm9jZXNzIGdlbmVyYXRlZCBmb3IgaXRzZWxmLlxuICogTmV2ZXIgdGhyb3dzIGZvciBhIG1pc3NpbmcgZmlsZSBpbiB0aGF0IG1vZGUg4oCUIGl0IGp1c3QgaG9sZHMgdGhvc2Uga2V5cy5cbiAqL1xuZnVuY3Rpb24gdmVyaWZpY2F0aW9uS2V5cygpOiBNYXA8c3RyaW5nLCB7IHNlcnZpY2VOYW1lOiBzdHJpbmc7IGtleTogS2V5T2JqZWN0IH0+IHtcbiAgY29uc3QgZmlsZSA9IHByb2Nlc3MuZW52LlNFUlZJQ0VfS0VZX0JVTkRMRV9GSUxFO1xuICBpZiAoIWZpbGUpIHtcbiAgICBjb25zdCBsb2NhbCA9IG5ldyBNYXA8c3RyaW5nLCB7IHNlcnZpY2VOYW1lOiBzdHJpbmc7IGtleTogS2V5T2JqZWN0IH0+KCk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgZXBoZW1lcmFsS2V5cz8udmFsdWVzKCkgPz8gW10pIHtcbiAgICAgIGxvY2FsLnNldChrZXkua2lkLCB7IHNlcnZpY2VOYW1lOiBrZXkuc2VydmljZU5hbWUsIGtleTogY3J5cHRvLmNyZWF0ZVB1YmxpY0tleShrZXkucHJpdmF0ZUtleSkgfSk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbDtcbiAgfVxuXG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGxldCBtdGltZU1zID0gMDtcbiAgdHJ5IHtcbiAgICBtdGltZU1zID0gc3RhdFN5bmMoZmlsZSkubXRpbWVNcztcbiAgfSBjYXRjaCB7XG4gICAgLy8gVW5yZWFkYWJsZSBub3c6IGtlZXAgc2VydmluZyBhIGJ1bmRsZSBhbHJlYWR5IGluIGhhbmQgKHB1YmxpYyBrZXlzIGRvbid0XG4gICAgLy8gZXhwaXJlLCBhbmQgcmVmdXNpbmcgZXZlcnkgaW50ZXJuYWwgY2FsbCBiZWNhdXNlIGEgbW91bnQgYmxpcHBlZCB3b3VsZCBiZVxuICAgIC8vIGEgc2VsZi1pbmZsaWN0ZWQgb3V0YWdlKS4gV2l0aCBub3RoaW5nIGluIGhhbmQsIGZhaWwgY2xvc2VkIGJlbG93LlxuICAgIGlmIChidW5kbGUpIHJldHVybiBidW5kbGUuYnlLaWQ7XG4gIH1cbiAgaWYgKGJ1bmRsZSAmJiBidW5kbGUubXRpbWVNcyA9PT0gbXRpbWVNcyAmJiBub3cgLSBidW5kbGUubG9hZGVkQXQgPCBCVU5ETEVfUkVGUkVTSF9JTlRFUlZBTF9NUykge1xuICAgIHJldHVybiBidW5kbGUuYnlLaWQ7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGJ5S2lkID0gcGFyc2VCdW5kbGUocmVhZEZpbGVTeW5jKGZpbGUsICd1dGY4JyksIGZpbGUpO1xuICAgIGJ1bmRsZSA9IHsgYnlLaWQsIGxvYWRlZEF0OiBub3csIG10aW1lTXMgfTtcbiAgICByZXR1cm4gYnlLaWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGJ1bmRsZSkge1xuICAgICAgbG9nZ2VyLndhcm4oJ1NlcnZpY2Uga2V5IGJ1bmRsZSByZWxvYWQgZmFpbGVkOyBjb250aW51aW5nIG9uIHRoZSBsb2FkZWQgY29weScsIHsgZmlsZSwgZXJyb3I6IGVycm9yTWVzc2FnZShlcnJvcikgfSk7XG4gICAgICByZXR1cm4gYnVuZGxlLmJ5S2lkO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvciBpbnN0YW5jZW9mIFNlcnZpY2VLZXlFcnJvciA/IGVycm9yIDogbmV3IFNlcnZpY2VLZXlFcnJvcihTdHJpbmcoZXJyb3IpKTtcbiAgfVxufVxuXG4vKipcbiAqIFdoZXRoZXIgYGtpZGAgYmVsb25ncyB0byBhbiBpbnRlcm5hbCBTRVJWSUNFIGtleS4gVGhpcyBpcyBob3cgYSBiZWFyZXIgdG9rZW5cbiAqIGlzIHJvdXRlZCBiZXR3ZWVuIHRoZSB0d28gRVMyNTYgY2hhaW5zOiBib3RoIHVzZXIgYW5kIHNlcnZpY2UgdG9rZW5zIGFyZVxuICogRVMyNTYgd2l0aCBhIGBraWRgLCBhbmQgYGtpZGAgaXMgYW4gUkZDIDc2MzggdGh1bWJwcmludCwgc28gb3duZXJzaGlwIG9mIHRoZVxuICogaWQg4oCUIG5vdCBhIGNsYWltIGluc2lkZSB0aGUgdG9rZW4g4oCUIGRlY2lkZXMgd2hpY2gga2V5IHNldCBtYXkgdmVyaWZ5IGl0LlxuICogUmV0dXJucyBgZmFsc2VgIChuZXZlciB0aHJvd3MpIHdoZW4gbm8gYnVuZGxlIGNhbiBiZSByZWFkOyB0aGUgdG9rZW4gdGhlblxuICogdGFrZXMgdGhlIHVzZXIgY2hhaW4gYW5kIGlzIHJlamVjdGVkIHRoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTZXJ2aWNlS2lkKGtpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHZlcmlmaWNhdGlvbktleXMoKS5oYXMoa2lkKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTaWduIC8gdmVyaWZ5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBTaWduIGBjbGFpbXNgIGFzIHRoaXMgc2VydmljZSdzIGludGVybmFsIHRva2VuOiBFUzI1NiwgYGtpZGAgPSB0aGUgc2lnbmVyJ3NcbiAqIHRodW1icHJpbnQsIGBzdWJgID0gYHNlcnZpY2U6PHNlcnZpY2VOYW1lPmAuIGBpYXRgL2BleHBgIGFuZCB0aGUgb3B0aW9uYWxcbiAqIGlzc3Vlci9hdWRpZW5jZSBhcmUgc3RhbXBlZCBoZXJlIHNvIHRoZXJlIGlzIG9uZSBwbGFjZSB0aGF0IGRlY2lkZXMgd2hhdCBhXG4gKiBzZXJ2aWNlIHRva2VuIHNheXMuXG4gKlxuICogSGFuZC1yb2xsZWQgKHJhdGhlciB0aGFuIGBqd3Quc2lnbmApIG9ubHkgc28gdGhlIGhlYWRlciBjYXJyaWVzIHRoZSBga2lkYCBpblxuICogdGhlIHNhbWUgc2hhcGUgcGxhdGZvcm0ncyBzaWduZXIgcHJvZHVjZXMg4oCUIGBjcnlwdG8uc2lnbmAgaXMgc3luY2hyb25vdXMsIHNvXG4gKiB1bmxpa2UgdGhlIEtNUyBwYXRoIHRoaXMgY29zdHMgbm90aGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpZ25TZXJ2aWNlSnd0KFxuICBjbGFpbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBvcHRpb25zOiB7IHNlcnZpY2VOYW1lOiBzdHJpbmc7IGV4cGlyZXNJblNlY29uZHM6IG51bWJlcjsgaXNzdWVyPzogc3RyaW5nOyBhdWRpZW5jZT86IHN0cmluZyB9LFxuKTogc3RyaW5nIHtcbiAgY29uc3Qga2V5ID0gc2lnbmluZ0tleUZvcihvcHRpb25zLnNlcnZpY2VOYW1lKTtcbiAgY29uc3Qgbm93ID0gTWF0aC5mbG9vcihEYXRlLm5vdygpIC8gMTAwMCk7XG4gIGNvbnN0IGJvZHkgPSB7XG4gICAgLi4uY2xhaW1zLFxuICAgIHN1YjogYCR7U0VSVklDRV9TVUJKRUNUX1BSRUZJWH0ke29wdGlvbnMuc2VydmljZU5hbWV9YCxcbiAgICBpYXQ6IG5vdyxcbiAgICBleHA6IG5vdyArIG9wdGlvbnMuZXhwaXJlc0luU2Vjb25kcyxcbiAgICAuLi4ob3B0aW9ucy5pc3N1ZXIgPyB7IGlzczogb3B0aW9ucy5pc3N1ZXIgfSA6IHt9KSxcbiAgICAuLi4ob3B0aW9ucy5hdWRpZW5jZSA/IHsgYXVkOiBvcHRpb25zLmF1ZGllbmNlIH0gOiB7fSksXG4gIH07XG4gIGNvbnN0IHNpZ25pbmdJbnB1dCA9IGVuY29kZUp3c1NpZ25pbmdJbnB1dChrZXkua2lkLCBib2R5KTtcbiAgY29uc3Qgc2lnbmF0dXJlID0gY3J5cHRvLnNpZ24oJ3NoYTI1NicsIEJ1ZmZlci5mcm9tKHNpZ25pbmdJbnB1dCwgJ3V0Zi04JyksIHtcbiAgICBrZXk6IGtleS5wcml2YXRlS2V5LFxuICAgIGRzYUVuY29kaW5nOiAnaWVlZS1wMTM2MycsXG4gIH0pO1xuICByZXR1cm4gY29tcGFjdEp3cyhzaWduaW5nSW5wdXQsIHNpZ25hdHVyZSk7XG59XG5cbi8qKlxuICogVmVyaWZ5IGFuIGludGVybmFsIHNlcnZpY2UgdG9rZW4sIFNZTkNIUk9OT1VTTFksIGFuZCByZXR1cm4gaXRzIGNsYWltcy5cbiAqXG4gKiBUaGUgc2VjdXJpdHkgcHJvcGVydHkgdGhpcyBmdW5jdGlvbiBleGlzdHMgZm9yOiB0aGUgYGtpZGAgc2VsZWN0cyB0aGUga2V5XG4gKiBBTkQgbmFtZXMgdGhlIHNpZ25lciwgYW5kIHRoZSB0b2tlbidzIGBzdWJgIG11c3QgYWdyZWUuIFNvIGBiaWxsaW5nYCBjYW5ub3RcbiAqIGJlIGltcGVyc29uYXRlZCBieSBhbnkgb3RoZXIgc2VydmljZSDigJQgbm90IGV2ZW4gb25lIHRoYXQgaG9sZHMgYSB2YWxpZCBrZXkgb2ZcbiAqIGl0cyBvd24g4oCUIGEgZ3VhcmFudGVlIG5vIHNoYXJlZCBzZWNyZXQgY2FuIGdpdmUuXG4gKlxuICogQHRocm93cyB7and0Lkpzb25XZWJUb2tlbkVycm9yfSB1bmtub3duIGBraWRgLCB3cm9uZyBhbGdvcml0aG0sIGJhZFxuICogICAgICAgICBzaWduYXR1cmUsIGV4cGlyZWQsIG9yIGEgYHN1YmAgdGhhdCBkaXNhZ3JlZXMgd2l0aCB0aGUgc2lnbmluZyBrZXkuXG4gKiBAdGhyb3dzIHtTZXJ2aWNlS2V5RXJyb3J9IG5vIHZlcmlmaWNhdGlvbiBidW5kbGUgY291bGQgYmUgcmVhZCBhdCBhbGwg4oCUIHRoZVxuICogICAgICAgICB0b2tlbidzIHZhbGlkaXR5IGlzIFVOS05PV04gYW5kIHRoZSBjYWxsZXIgbXVzdCBub3QgdHJlYXQgaXQgYXMgdmFsaWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlTZXJ2aWNlSnd0PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gIHRva2VuOiBzdHJpbmcsXG4gIG9wdGlvbnM6IHsga2lkOiBzdHJpbmc7IGlzc3Vlcj86IHN0cmluZzsgYXVkaWVuY2U/OiBzdHJpbmcgfSxcbik6IFQge1xuICBjb25zdCBlbnRyeSA9IHZlcmlmaWNhdGlvbktleXMoKS5nZXQob3B0aW9ucy5raWQpO1xuICAvLyBFVkVSWSBlbWlzc2lvbiBvZiB0aGlzIGNvdW50ZXIgY2FycmllcyB0aGUgc2FtZSBsYWJlbCBLRVlTLiBUaGUgUHJvbWV0aGV1c1xuICAvLyBjb3VudGVyIGlzIHJlZ2lzdGVyZWQgbGF6aWx5IHdpdGggd2hhdGV2ZXIga2V5cyBpdHMgZmlyc3QgZW1pc3Npb24gdXNlZCxcbiAgLy8gYW5kIGFuIGluY3JlbWVudCB3aXRoIGEgZGlmZmVyZW50IHNldCB0aHJvd3Mg4oCUIHdoaWNoIGBlbWl0Q291bnRlcmBcbiAgLy8gc3dhbGxvd3MuIFNvIHdoZW4gdGhlIGZpcnN0IHRva2VuIGEgcG9kIHZlcmlmaWVkIHdhcyBiYWQgKGB7IHJlc3VsdCB9YFxuICAvLyBhbG9uZSksIGV2ZXJ5IGxhdGVyIGBva2AgYW5kIGBzdWJqZWN0X21pc21hdGNoYCAoYHsgcmVzdWx0LCBzZXJ2aWNlIH1gKSB3YXNcbiAgLy8gc2lsZW50bHkgZHJvcHBlZCBmb3IgdGhlIGxpZmUgb2YgdGhlIHByb2Nlc3M6IHRoZSBtZXRyaWMgdGhhdCB0ZWxscyB5b3VcbiAgLy8gc2VydmljZS10by1zZXJ2aWNlIGF1dGggaXMgaGVhbHRoeSB3ZW50IHF1aWV0IGV4YWN0bHkgd2hlbiBpdCBtYXR0ZXJlZC5cbiAgaWYgKCFlbnRyeSkge1xuICAgIGVtaXRDb3VudGVyKCdzZXJ2aWNlX3Rva2VuX3ZlcmlmeV90b3RhbCcsIHsgcmVzdWx0OiAndW5rbm93bl9raWQnLCBzZXJ2aWNlOiAndW5rbm93bicgfSk7XG4gICAgdGhyb3cgbmV3IGp3dC5Kc29uV2ViVG9rZW5FcnJvcihgTm8gcHVibGlzaGVkIHNlcnZpY2Uga2V5IGZvciBraWQgJHtvcHRpb25zLmtpZH1gKTtcbiAgfVxuICBsZXQgY2xhaW1zOiBUICYgeyBzdWI/OiB1bmtub3duIH07XG4gIHRyeSB7XG4gICAgY2xhaW1zID0gand0LnZlcmlmeSh0b2tlbiwgZW50cnkua2V5LCB7XG4gICAgICBhbGdvcml0aG1zOiBbU0VSVklDRV9UT0tFTl9BTEdPUklUSE1dLFxuICAgICAgLi4uKG9wdGlvbnMuaXNzdWVyID8geyBpc3N1ZXI6IG9wdGlvbnMuaXNzdWVyIH0gOiB7fSksXG4gICAgICAuLi4ob3B0aW9ucy5hdWRpZW5jZSA/IHsgYXVkaWVuY2U6IG9wdGlvbnMuYXVkaWVuY2UgfSA6IHt9KSxcbiAgICB9KSBhcyBUICYgeyBzdWI/OiB1bmtub3duIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZW1pdENvdW50ZXIoJ3NlcnZpY2VfdG9rZW5fdmVyaWZ5X3RvdGFsJywgeyByZXN1bHQ6ICdpbnZhbGlkJywgc2VydmljZTogZW50cnkuc2VydmljZU5hbWUgfSk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgaWYgKGNsYWltcy5zdWIgIT09IGAke1NFUlZJQ0VfU1VCSkVDVF9QUkVGSVh9JHtlbnRyeS5zZXJ2aWNlTmFtZX1gKSB7XG4gICAgLy8gQSB2YWxpZCBzaWduYXR1cmUgYnkgdGhlIFdST05HIHNlcnZpY2U6IHRoZSBrZXkgYmVsb25ncyB0byBgZW50cnkuc2VydmljZU5hbWVgXG4gICAgLy8gYnV0IHRoZSB0b2tlbiBzcGVha3MgZm9yIHNvbWVvbmUgZWxzZTogYSBjcm9zcy1zZXJ2aWNlIGZvcmdlcnkuXG4gICAgZW1pdENvdW50ZXIoJ3NlcnZpY2VfdG9rZW5fdmVyaWZ5X3RvdGFsJywgeyByZXN1bHQ6ICdzdWJqZWN0X21pc21hdGNoJywgc2VydmljZTogZW50cnkuc2VydmljZU5hbWUgfSk7XG4gICAgdGhyb3cgbmV3IGp3dC5Kc29uV2ViVG9rZW5FcnJvcihgU2VydmljZSB0b2tlbiBzdWJqZWN0ICR7U3RyaW5nKGNsYWltcy5zdWIpfSB3YXMgc2lnbmVkIGJ5ICR7ZW50cnkuc2VydmljZU5hbWV9YCk7XG4gIH1cbiAgZW1pdENvdW50ZXIoJ3NlcnZpY2VfdG9rZW5fdmVyaWZ5X3RvdGFsJywgeyByZXN1bHQ6ICdvaycsIHNlcnZpY2U6IGVudHJ5LnNlcnZpY2VOYW1lIH0pO1xuICByZXR1cm4gY2xhaW1zO1xufVxuXG4vKipcbiAqIFRydWUgd2hpbGUgdGhpcyBzZXJ2aWNlIHN0aWxsIHB1Ymxpc2hlcyBtb3JlIHRoYW4gb25lIHZlcmlmaWNhdGlvbiBrZXkg4oCUIGkuZS5cbiAqIGEgc2lnbmluZy1rZXkgcm90YXRpb24gaXMgb3BlbiBhbmQgdGhlIHJldGlyaW5nIGtleSBpcyBzdGlsbCB0cnVzdGVkLiBGZWVkc1xuICogdGhlIGBzZWNyZXRfcm90YXRpb25fcHJldmlvdXNfc2V0e3NlY3JldD1cIlNFUlZJQ0VfU0lHTklOR19LRVlcIn1gIGdhdWdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZXRpcmluZ1NlcnZpY2VLZXlQdWJsaXNoZWQoKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3QgbWUgPSBzZXJ2aWNlSWRlbnRpdHkoKTtcbiAgICByZXR1cm4gWy4uLnZlcmlmaWNhdGlvbktleXMoKS52YWx1ZXMoKV0uZmlsdGVyKCh2KSA9PiB2LnNlcnZpY2VOYW1lID09PSBtZSkubGVuZ3RoID4gMTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVGVzdCBzZWFtOiBkcm9wIHRoZSBsb2FkZWQgc2lnbmluZyBrZXksIHRoZSBidW5kbGUgYW5kIGFueSBlcGhlbWVyYWwga2V5cyBzb1xuICogdGhlIG5leHQgc2lnbi92ZXJpZnkgcmUtcmVhZHMgdGhlIGVudmlyb25tZW50LiBEb24ndCBjYWxsIGZyb20gcHJvZHVjdGlvbiBjb2RlXG4gKiDigJQgcm90YXRpb24gaXMgcGlja2VkIHVwIGJ5IHRoZSByZWZyZXNoIGludGVydmFsIGFuZCB0aGUgbXRpbWUgY2hlY2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfcmVzZXRTZXJ2aWNlS2V5c0ZvclRlc3RzKCk6IHZvaWQge1xuICBsb2NhbEtleSA9IHVuZGVmaW5lZDtcbiAgYnVuZGxlID0gdW5kZWZpbmVkO1xuICBlcGhlbWVyYWxLZXlzID0gdW5kZWZpbmVkO1xuICBlcGhlbWVyYWxXYXJuZWQgPSBmYWxzZTtcbn1cbiJdfQ==
404
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1rZXlzLmpzIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvc2VydmljZS1rZXlzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0RHO0FBRUgsT0FBTyxNQUEwQixNQUFNLFFBQVEsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQztBQUM1QyxPQUFPLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDL0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQWtCLE1BQU0saUJBQWlCLENBQUM7QUFDckgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFcEQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBRTVDLHVFQUF1RTtBQUN2RSxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxPQUFPLENBQUM7QUFFL0MsdUZBQXVGO0FBQ3ZGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLFVBQVUsQ0FBQztBQUVqRCxpRkFBaUY7QUFDakYsTUFBTSwwQkFBMEIsR0FBRyxPQUFPLENBQUMsQ0FBQyxZQUFZO0FBb0J4RCw2RUFBNkU7QUFDN0UsTUFBTSxPQUFPLGVBQWdCLFNBQVEsS0FBSztJQUN4QyxZQUFZLE9BQWU7UUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztJQUNoQyxDQUFDO0NBQ0Y7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0s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Q0FBaUM7UUFDakMsV0FBVyxDQUFDLDRCQUE0QixFQUFFLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN6RyxNQUFNLElBQUksR0FBRyxDQUFDLGlCQUFpQixDQUFDLDRCQUE0QixLQUFLLENBQUMsV0FBVyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3pHLENBQUM7SUFDRCxXQUFXLENBQUMsNEJBQTRCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN4RixPQUFPLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QjtJQUMzQyxJQUFJLENBQUM7UUFDSCxNQUFNLEVBQUUsR0FBRyxlQUFlLEVBQUUsQ0FBQztRQUM3QixPQUFPLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLHlCQUF5QjtJQUN2QyxRQUFRLEdBQUcsU0FBUyxDQUFDO0lBQ3JCLE1BQU0sR0FBRyxTQUFTLENBQUM7SUFDbkIsYUFBYSxHQUFHLFNBQVMsQ0FBQztJQUMxQixlQUFlLEdBQUcsS0FBSyxDQUFDO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuLyoqXG4gKiBQZXItc2VydmljZSBzaWduaW5nIGtleXMgZm9yIElOVEVSTkFMIHNlcnZpY2UtdG8tc2VydmljZSB0b2tlbnMuXG4gKlxuICogQmVmb3JlIHRoaXMsIGV2ZXJ5IHNlcnZpY2UgaGVsZCBvbmUgc2hhcmVkIGBKV1RfU0VDUkVUYCwgc28gYW55IHNlcnZpY2UgY291bGRcbiAqIG1pbnQgYSB0b2tlbiBuYW1pbmcgYW55IE9USEVSIHNlcnZpY2Ug4oCUIFwiYmlsbGluZyBzYWlkIHNvXCIgd2FzIHVuZmFsc2lmaWFibGUsXG4gKiBhbmQgYSBzaW5nbGUgY29tcHJvbWlzZWQgd29ya2xvYWQgY291bGQgc3BlYWsgZm9yIHRoZSB3aG9sZSBmbGVldC4gTm93IGVhY2hcbiAqIHNlcnZpY2Ugc2lnbnMgd2l0aCBpdHMgT1dOIEVTMjU2IChFQyBQLTI1Nikga2V5IGFuZCBjb25zdW1lcnMgdmVyaWZ5IGFnYWluc3RcbiAqIHRoZSBwdWJsaWMgaGFsdmVzLiBUaGUgYGtpZGAgaXMgYm91bmQgdG8gdGhlIHNpZ25lcidzIE5BTUUsIHNvIGEgdG9rZW4gd2hvc2VcbiAqIGBzdWJgIHNheXMgYHNlcnZpY2U6YmlsbGluZ2AgYnV0IHdhcyBzaWduZWQgd2l0aCBjb21wbGlhbmNlJ3Mga2V5IGlzIGFcbiAqIGZvcmdlcnksIG5vdCBhIHZhbGlkIHRva2VuIHdpdGggYSBjb25mdXNpbmcgc3ViamVjdC5cbiAqXG4gKiAjIyBXaHkgcHVibGljIGtleXMgYXJlIGRpc3RyaWJ1dGVkIGJ5IENPTkZJRywgbm90IGJ5IHBlci1zZXJ2aWNlIEpXS1MgZW5kcG9pbnRzXG4gKlxuICogVGhlIHVzZXIgY2hhaW4gZmV0Y2hlcyBwbGF0Zm9ybSdzIEpXS1Mgb3ZlciBIVFRQIGJlY2F1c2UgdGhlcmUgaXMgZXhhY3RseVxuICogb25lIHNpZ25lciBhbmQgaXQgaXMgdGhlIG9uZSBzZXJ2aWNlIHRoYXQgbXVzdCBiZSB1cCBmb3IgYW55Ym9keSB0byBzaWduIGluLlxuICogVGhlIHNlcnZpY2UgY2hhaW4gaXMgdGhlIG9wcG9zaXRlIHNoYXBlLCBhbmQgdGhyZWUgcHJvcGVydGllcyBkZWNpZGVkIGl0OlxuICpcbiAqICAxLiAqKmB2ZXJpZnlTZXJ2aWNlUHJpbmNpcGFsYCBtdXN0IHN0YXkgc3luY2hyb25vdXMuKiogVGhlIGdsb2JhbCByYXRlXG4gKiAgICAgbGltaXRlcidzIGBza2lwYCBhbmQgYXBwLWZhY3RvcnkncyBgL3dhcm11cGAgZ3VhcmQgdmVyaWZ5IGEgc2VydmljZSB0b2tlblxuICogICAgIEJFRk9SRSBgcmVxdWlyZUF1dGhgIHJ1bnMsIGluIHN5bmNocm9ub3VzIEV4cHJlc3MgY2FsbGJhY2tzLiBBbiBIVFRQIEpXS1NcbiAqICAgICBmZXRjaCB3b3VsZCBmb3JjZSB0aG9zZSBhc3luYyDigJQgYSBjaGFuZ2UgdGhhdCByZWFjaGVzIGludG8gZXZlcnlcbiAqICAgICBzZXJ2aWNlJ3MgbGltaXRlciB3aXJpbmcuXG4gKiAgMi4gKipObyBhdmFpbGFiaWxpdHkgY291cGxpbmcuKiogV2l0aCBwZXItc2VydmljZSBKV0tTIGVuZHBvaW50cywgdmVyaWZ5aW5nIGFcbiAqICAgICB0b2tlbiBtaW50ZWQgYnkgYGJpbGxpbmdgIG5lZWRzIGBiaWxsaW5nYCB0byBiZSByZWFjaGFibGUg4oCUIHNvIGJpbGxpbmdcbiAqICAgICBiZWluZyBkb3duIHdvdWxkIHN0b3AgcGxhdGZvcm0gZnJvbSBhY2NlcHRpbmcgYmlsbGluZydzIGluLWZsaWdodCBjYWxscyxcbiAqICAgICB0dXJuaW5nIG9uZSBvdXRhZ2UgaW50byBzZXZlcmFsLiBBIG1vdW50ZWQgZmlsZSBoYXMgbm8gc3VjaCBlZGdlLlxuICogIDMuICoqTm8gTsOXTiBhZGRyZXNzIGNvbmZpZy4qKiAxMCBzZXJ2aWNlcyB3b3VsZCBlYWNoIG5lZWQgZXZlcnkgcGVlcidzXG4gKiAgICAgaG9zdC9wb3J0IChhbmQgY29tcG9zZSwgd2hpY2ggaGFzIG5vIG1lc2gsIHdvdWxkIG5lZWQgdGhlbSB0b28pLlxuICpcbiAqIFNvIHRoZSBkZXBsb3kgZ2VuZXJhdGVzIG9uZSBrZXlwYWlyIHBlciBzZXJ2aWNlLCBtb3VudHMgZWFjaCBwcml2YXRlIGtleSBPTkxZXG4gKiBpbnRvIGl0cyBvd24gc2VydmljZSwgYW5kIG1vdW50cyBPTkUgcHVibGljIGJ1bmRsZSAocmVhZC1vbmx5KSBldmVyeXdoZXJlOlxuICpcbiAqICAgYFNFUlZJQ0VfU0lHTklOR19LRVlfRklMRWAgIHRoaXMgc2VydmljZSdzIEVDIFAtMjU2IHByaXZhdGUga2V5IChQS0NTIzggUEVNKVxuICogICBgU0VSVklDRV9LRVlfQlVORExFX0ZJTEVgICAgYHsgXCJzZXJ2aWNlc1wiOiB7IFwiPG5hbWU+XCI6IHsgXCJrZXlzXCI6IFs8andrPuKApl0gfSB9IH1gXG4gKlxuICogUm90YXRpb24gaXMgYnkgYGtpZGAsIGluIHRoZSBzYW1lIHNoYXBlIGFzIHRoZSB1c2VyIGNoYWluOiBhZGQgdGhlIG5ldyBwdWJsaWNcbiAqIGtleSB0byB0aGUgYnVuZGxlICh0aGUgc2VydmljZSBub3cgcHVibGlzaGVzIHR3byksIHJvbGwgdGhlIGJ1bmRsZSBvdXQsIHN3YXBcbiAqIHRoYXQgc2VydmljZSdzIHByaXZhdGUga2V5LCB0aGVuIGRyb3AgdGhlIHJldGlyZWQgcHVibGljIGtleS4gVGhlIGJ1bmRsZSBpc1xuICogcmUtcmVhZCBvbiBhbiBpbnRlcnZhbCBBTkQgb24gYW4gbXRpbWUgY2hhbmdlLCBzbyBhIHJvdGF0aW9uIG5lZWRzIG5vIHJlc3RhcnQuXG4gKiBgZGVwbG95L2Jpbi9zZXJ2aWNlLXNpZ25pbmcta2V5cy5zaGAgZ2VuZXJhdGVzIGFuZCByb3RhdGVzIGJvdGggaGFsdmVzLlxuICpcbiAqICMjIEVwaGVtZXJhbCBtb2RlXG4gKlxuICogV2l0aCBubyBgU0VSVklDRV9TSUdOSU5HX0tFWV9GSUxFYCBjb25maWd1cmVkLCBhIGtleXBhaXIgaXMgZ2VuZXJhdGVkXG4gKiBJTi1QUk9DRVNTIHBlciByZXF1ZXN0ZWQgc2VydmljZSBuYW1lIGFuZCByZWdpc3RlcmVkIGluIHRoZSBpbi1tZW1vcnkgYnVuZGxlLlxuICogVGhhdCBrZWVwcyBzaW5nbGUtcHJvY2VzcyBzdWl0ZXMgYW5kIGxvY2FsIG9uZS1vZmYgc2NyaXB0cyB3b3JraW5nIHdpdGggbm8ga2V5XG4gKiBtYXRlcmlhbCwgYW5kIGl0IGNhbiBuZXZlciB3aWRlbiB0cnVzdDogdGhlIG9ubHkgdmVyaWZpZXIgdGhhdCBhY2NlcHRzIHN1Y2ggYVxuICogdG9rZW4gaXMgdGhlIHByb2Nlc3MgdGhhdCBtaW50ZWQgaXQuIEl0IGlzIGxvZ2dlZCBvbmNlIGF0IHdhcm4gbGV2ZWwsIGFuZFxuICogY291bnRlZCwgYmVjYXVzZSBpbiBhIHJlYWwgZGVwbG95bWVudCBpdCBtZWFucyB0aGlzIHNlcnZpY2UncyBwZWVycyB3aWxsXG4gKiByZWplY3QgZXZlcnl0aGluZyBpdCBzZW5kcy5cbiAqL1xuXG5pbXBvcnQgY3J5cHRvLCB7IHR5cGUgS2V5T2JqZWN0IH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7IHJlYWRGaWxlU3luYywgc3RhdFN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgand0IGZyb20gJ2pzb253ZWJ0b2tlbic7XG5pbXBvcnQgeyBjb21wYWN0SndzLCBlbmNvZGVKd3NTaWduaW5nSW5wdXQsIHB1YmxpY0p3a0Zyb20sIHB1YmxpY0tleUZyb21Kd2ssIHR5cGUgUHVibGljSndrIH0gZnJvbSAnLi4vdXRpbHMvandrLmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBlbWl0Q291bnRlciB9IGZyb20gJy4uL3V0aWxzL21ldHJpYy1lbWl0dGVyLmpzJztcbmltcG9ydCB7IGVycm9yTWVzc2FnZSB9IGZyb20gJy4uL3V0aWxzL3Jlc3BvbnNlLmpzJztcblxuY29uc3QgbG9nZ2VyID0gY3JlYXRlTG9nZ2VyKCdzZXJ2aWNlLWtleXMnKTtcblxuLyoqIFRoZSBPTkxZIGFsZ29yaXRobSBhbiBpbnRlcm5hbCBzZXJ2aWNlIHRva2VuIG1heSBiZSBzaWduZWQgd2l0aC4gKi9cbmV4cG9ydCBjb25zdCBTRVJWSUNFX1RPS0VOX0FMR09SSVRITSA9ICdFUzI1Nic7XG5cbi8qKiBTdWJqZWN0IHByZWZpeCBuYW1pbmcgdGhlIGNhbGxpbmcgc2VydmljZSBvbiBhIHNlcnZpY2UgdG9rZW4gKGBzZXJ2aWNlOjxuYW1lPmApLiAqL1xuZXhwb3J0IGNvbnN0IFNFUlZJQ0VfU1VCSkVDVF9QUkVGSVggPSAnc2VydmljZTonO1xuXG4vKiogSG93IGxvbmcgYSBsb2FkZWQgYnVuZGxlIGlzIHNlcnZlZCBiZWZvcmUgaXQgaXMgcmUtcmVhZCAocm90YXRpb24gcGlja3VwKS4gKi9cbmNvbnN0IEJVTkRMRV9SRUZSRVNIX0lOVEVSVkFMX01TID0gMzAwXzAwMDsgLy8gNSBtaW51dGVzXG5cbi8qKiBPbmUgc2VydmljZSdzIHB1Ymxpc2hlZCB2ZXJpZmljYXRpb24ga2V5cywgYXMgdGhleSBhcHBlYXIgaW4gdGhlIGJ1bmRsZSBmaWxlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlS2V5RW50cnkge1xuICBrZXlzOiBQdWJsaWNKd2tbXTtcbn1cblxuLyoqIFRoZSBkb2N1bWVudCBgU0VSVklDRV9LRVlfQlVORExFX0ZJTEVgIGhvbGRzOiBldmVyeSBzZXJ2aWNlJ3MgcHVibGljIGtleXMuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VLZXlCdW5kbGUge1xuICBzZXJ2aWNlczogUmVjb3JkPHN0cmluZywgU2VydmljZUtleUVudHJ5Pjtcbn1cblxuLyoqIEEgc2lnbmluZyBrZXkgdGhpcyBwcm9jZXNzIGhvbGRzLCBpbiB0aGUgZm9ybXMgc2lnbmluZyBuZWVkcy4gKi9cbmludGVyZmFjZSBMb2NhbFNpZ25pbmdLZXkge1xuICBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuICBraWQ6IHN0cmluZztcbiAgcHJpdmF0ZUtleTogS2V5T2JqZWN0O1xuICBwdWJsaWNKd2s6IFB1YmxpY0p3aztcbn1cblxuLyoqIFRoZSBidW5kbGUgY291bGQgbm90IGJlIGxvYWRlZCBvciBkb2VzIG5vdCBrbm93IHRoZSBrZXkgYSB0b2tlbiBuYW1lcy4gKi9cbmV4cG9ydCBjbGFzcyBTZXJ2aWNlS2V5RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdTZXJ2aWNlS2V5RXJyb3InO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBwcm9jZXNzJ3Mgc2VydmljZSBpZGVudGl0eSDigJQgdGhlIGA8bmFtZT5gIGluIGBzZXJ2aWNlOjxuYW1lPmAgYW5kIHRoZVxuICogbmFtZSBpdHMga2V5IGlzIHB1Ymxpc2hlZCB1bmRlci4gYFNFUlZJQ0VfTkFNRWAgaXMgYWxyZWFkeSBzZXQgcGVyIHNlcnZpY2UgaW5cbiAqIGV2ZXJ5IGRlcGxveSB0YXJnZXQgKGNvbXBvc2UsIG1pbmlrdWJlLCBlYzIsIGVrcyksIGFuZCBpcyB0aGUgc2FtZSB2YWx1ZSB0aGVcbiAqIGF1ZGl0IGFuZCBtZXRyaWMgbGFiZWxzIHVzZSwgc28gdGhlcmUgaXMgb25lIHNvdXJjZSBvZiB0cnV0aCBmb3IgXCJ3aG8gYW0gSVwiLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VydmljZUlkZW50aXR5KCk6IHN0cmluZyB7XG4gIHJldHVybiBwcm9jZXNzLmVudi5TRVJWSUNFX05BTUUgfHwgJ2FwaSc7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTG9jYWwgc2lnbmluZyBrZXlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5sZXQgbG9jYWxLZXk6IExvY2FsU2lnbmluZ0tleSB8IHVuZGVmaW5lZDtcbmxldCBlcGhlbWVyYWxLZXlzOiBNYXA8c3RyaW5nLCBMb2NhbFNpZ25pbmdLZXk+IHwgdW5kZWZpbmVkO1xubGV0IGVwaGVtZXJhbFdhcm5lZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBsb2FkQ29uZmlndXJlZFNpZ25pbmdLZXkoZmlsZTogc3RyaW5nKTogTG9jYWxTaWduaW5nS2V5IHtcbiAgY29uc3Qgc2VydmljZU5hbWUgPSBzZXJ2aWNlSWRlbnRpdHkoKTtcbiAgbGV0IHByaXZhdGVLZXk6IEtleU9iamVjdDtcbiAgdHJ5IHtcbiAgICBwcml2YXRlS2V5ID0gY3J5cHRvLmNyZWF0ZVByaXZhdGVLZXkocmVhZEZpbGVTeW5jKGZpbGUsICd1dGY4JykpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBTZXJ2aWNlS2V5RXJyb3IoYENvdWxkIG5vdCByZWFkIHRoZSBzZXJ2aWNlIHNpZ25pbmcga2V5IGF0ICR7ZmlsZX06ICR7ZXJyb3JNZXNzYWdlKGVycm9yKX1gKTtcbiAgfVxuICAvLyBwdWJsaWNKd2tGcm9tIHJlamVjdHMgYW55dGhpbmcgYnV0IGFuIEVDIFAtMjU2IGtleSwgc28gYSBzZXJ2aWNlIGNvbmZpZ3VyZWRcbiAgLy8gd2l0aCAoc2F5KSBhbiBSU0Ega2V5IGZhaWxzIEhFUkUgcmF0aGVyIHRoYW4gbWludGluZyB0b2tlbnMgbm9ib2R5IHZlcmlmaWVzLlxuICBjb25zdCBwdWJsaWNKd2sgPSBwdWJsaWNKd2tGcm9tKGNyeXB0by5jcmVhdGVQdWJsaWNLZXkocHJpdmF0ZUtleSkpO1xuICByZXR1cm4geyBzZXJ2aWNlTmFtZSwga2lkOiBwdWJsaWNKd2sua2lkLCBwcml2YXRlS2V5LCBwdWJsaWNKd2sgfTtcbn1cblxuLyoqXG4gKiBUaGUgaW4tcHJvY2VzcyBrZXkgZm9yIGBzZXJ2aWNlTmFtZWAgaW4gZXBoZW1lcmFsIG1vZGUsIGdlbmVyYXRlZCBvbiBmaXJzdFxuICogdXNlIGFuZCByZWdpc3RlcmVkIGluIHRoZSBpbi1tZW1vcnkgYnVuZGxlIHNvIHRoaXMgcHJvY2VzcyBjYW4gdmVyaWZ5IGl0cyBvd25cbiAqIHRva2Vucy4gS2V5ZWQgYnkgTkFNRSAobm90IGp1c3Qgb25lIGtleSkgc28gYSBzaW5nbGUtcHJvY2VzcyBzdWl0ZSBjYW4gbWludFxuICogdG9rZW5zIGZvciBzZXZlcmFsIHNlcnZpY2VzLCBhcyB0aGUgcmVhbCBmbGVldCBkb2VzIGFjcm9zcyBwcm9jZXNzZXMuXG4gKi9cbmZ1bmN0aW9uIGVwaGVtZXJhbFNpZ25pbmdLZXkoc2VydmljZU5hbWU6IHN0cmluZyk6IExvY2FsU2lnbmluZ0tleSB7XG4gIGVwaGVtZXJhbEtleXMgPz89IG5ldyBNYXAoKTtcbiAgY29uc3QgZXhpc3RpbmcgPSBlcGhlbWVyYWxLZXlzLmdldChzZXJ2aWNlTmFtZSk7XG4gIGlmIChleGlzdGluZykgcmV0dXJuIGV4aXN0aW5nO1xuXG4gIGlmICghZXBoZW1lcmFsV2FybmVkKSB7XG4gICAgZXBoZW1lcmFsV2FybmVkID0gdHJ1ZTtcbiAgICBlbWl0Q291bnRlcignc2VydmljZV9zaWduaW5nX2VwaGVtZXJhbF9rZXlfdG90YWwnLCB7IHNlcnZpY2U6IHNlcnZpY2VJZGVudGl0eSgpIH0pO1xuICAgIGxvZ2dlci53YXJuKCdTRVJWSUNFX1NJR05JTkdfS0VZX0ZJTEUgaXMgbm90IHNldCDigJQgbWludGluZyBpbnRlcm5hbCBzZXJ2aWNlIHRva2VucyB3aXRoIGFuIEVQSEVNRVJBTCBrZXkuIE9ubHkgdGhpcyBwcm9jZXNzIHdpbGwgYWNjZXB0IHRoZW07IGV2ZXJ5IHBlZXIgd2lsbCByZWplY3QgdGhlbS4gU2V0IFNFUlZJQ0VfU0lHTklOR19LRVlfRklMRSArIFNFUlZJQ0VfS0VZX0JVTkRMRV9GSUxFIChkZXBsb3kvYmluL3NlcnZpY2Utc2lnbmluZy1rZXlzLnNoKS4nKTtcbiAgfVxuICBjb25zdCB7IHByaXZhdGVLZXksIHB1YmxpY0tleSB9ID0gY3J5cHRvLmdlbmVyYXRlS2V5UGFpclN5bmMoJ2VjJywgeyBuYW1lZEN1cnZlOiAncHJpbWUyNTZ2MScgfSk7XG4gIGNvbnN0IHB1YmxpY0p3ayA9IHB1YmxpY0p3a0Zyb20ocHVibGljS2V5KTtcbiAgY29uc3QgZ2VuZXJhdGVkOiBMb2NhbFNpZ25pbmdLZXkgPSB7IHNlcnZpY2VOYW1lLCBraWQ6IHB1YmxpY0p3ay5raWQsIHByaXZhdGVLZXksIHB1YmxpY0p3ayB9O1xuICBlcGhlbWVyYWxLZXlzLnNldChzZXJ2aWNlTmFtZSwgZ2VuZXJhdGVkKTtcbiAgcmV0dXJuIGdlbmVyYXRlZDtcbn1cblxuLyoqXG4gKiBUaGUga2V5IGBzZXJ2aWNlTmFtZWAgbXVzdCBiZSBzaWduZWQgd2l0aC5cbiAqXG4gKiBJbiBgY29uZmlndXJlZGAgbW9kZSB0aGVyZSBpcyBleGFjdGx5IE9ORSBrZXkg4oCUIHRoaXMgc2VydmljZSdzIOKAlCBzbyBhIHJlcXVlc3RcbiAqIHRvIHNpZ24gYXMgc29tZSBPVEhFUiBzZXJ2aWNlIGlzIGEgYnVnIGFuZCB0aHJvd3M6IHN1Y2ggYSB0b2tlbiB3b3VsZCBiZVxuICogdW52ZXJpZmlhYmxlIGV2ZXJ5d2hlcmUgKGl0cyBga2lkYCBuYW1lcyB0aGlzIHNlcnZpY2UsIGl0cyBgc3ViYCBhbm90aGVyKS5cbiAqIEZhaWxpbmcgYXQgdGhlIG1pbnQgbWFrZXMgdGhhdCBhbiBpbW1lZGlhdGUsIG9idmlvdXMgZXJyb3IgaW5zdGVhZCBvZiBhXG4gKiBydW50aW1lIDQwMS5cbiAqL1xuZnVuY3Rpb24gc2lnbmluZ0tleUZvcihzZXJ2aWNlTmFtZTogc3RyaW5nKTogTG9jYWxTaWduaW5nS2V5IHtcbiAgY29uc3QgZmlsZSA9IHByb2Nlc3MuZW52LlNFUlZJQ0VfU0lHTklOR19LRVlfRklMRTtcbiAgaWYgKCFmaWxlKSByZXR1cm4gZXBoZW1lcmFsU2lnbmluZ0tleShzZXJ2aWNlTmFtZSk7XG5cbiAgaWYgKCFsb2NhbEtleSB8fCBsb2NhbEtleS5zZXJ2aWNlTmFtZSAhPT0gc2VydmljZUlkZW50aXR5KCkpIHtcbiAgICBsb2NhbEtleSA9IGxvYWRDb25maWd1cmVkU2lnbmluZ0tleShmaWxlKTtcbiAgfVxuICBpZiAoc2VydmljZU5hbWUgIT09IGxvY2FsS2V5LnNlcnZpY2VOYW1lKSB7XG4gICAgdGhyb3cgbmV3IFNlcnZpY2VLZXlFcnJvcihcbiAgICAgIGBUaGlzIHByb2Nlc3MgaXMgJyR7bG9jYWxLZXkuc2VydmljZU5hbWV9JyBhbmQgaG9sZHMgb25seSBpdHMgb3duIHNpZ25pbmcga2V5LCBzbyBpdCBjYW5ub3QgbWludCBhIHRva2VuIGZvciAnJHtzZXJ2aWNlTmFtZX0nLiBgXG4gICAgICArICdOYW1lIHRoZSBjYWxsaW5nIHNlcnZpY2UgY29ycmVjdGx5LCBvciBnaXZlIHRoZSBjYWxsZXIgaXRzIG93biBrZXkuJyxcbiAgICApO1xuICB9XG4gIHJldHVybiBsb2NhbEtleTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBWZXJpZmljYXRpb24gYnVuZGxlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuaW50ZXJmYWNlIExvYWRlZEJ1bmRsZSB7XG4gIC8qKiBga2lkYCDihpIgdGhlIHNlcnZpY2UgdGhhdCBwdWJsaXNoZWQgaXQsIHBsdXMgdGhlIHZlcmlmaWNhdGlvbiBrZXkuICovXG4gIGJ5S2lkOiBNYXA8c3RyaW5nLCB7IHNlcnZpY2VOYW1lOiBzdHJpbmc7IGtleTogS2V5T2JqZWN0IH0+O1xuICBsb2FkZWRBdDogbnVtYmVyO1xuICBtdGltZU1zOiBudW1iZXI7XG59XG5cbmxldCBidW5kbGU6IExvYWRlZEJ1bmRsZSB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gcGFyc2VCdW5kbGUocmF3OiBzdHJpbmcsIGZpbGU6IHN0cmluZyk6IE1hcDxzdHJpbmcsIHsgc2VydmljZU5hbWU6IHN0cmluZzsga2V5OiBLZXlPYmplY3QgfT4ge1xuICBsZXQgZG9jdW1lbnQ6IHVua25vd247XG4gIHRyeSB7XG4gICAgZG9jdW1lbnQgPSBKU09OLnBhcnNlKHJhdyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IFNlcnZpY2VLZXlFcnJvcihgJHtmaWxlfSBpcyBub3QgdmFsaWQgSlNPTjogJHtlcnJvck1lc3NhZ2UoZXJyb3IpfWApO1xuICB9XG4gIGNvbnN0IHNlcnZpY2VzID0gKGRvY3VtZW50IGFzIFBhcnRpYWw8U2VydmljZUtleUJ1bmRsZT4pPy5zZXJ2aWNlcztcbiAgaWYgKCFzZXJ2aWNlcyB8fCB0eXBlb2Ygc2VydmljZXMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IFNlcnZpY2VLZXlFcnJvcihgJHtmaWxlfSBoYXMgbm8gXCJzZXJ2aWNlc1wiIG9iamVjdGApO1xuICB9XG4gIGNvbnN0IGJ5S2lkID0gbmV3IE1hcDxzdHJpbmcsIHsgc2VydmljZU5hbWU6IHN0cmluZzsga2V5OiBLZXlPYmplY3QgfT4oKTtcbiAgZm9yIChjb25zdCBbc2VydmljZU5hbWUsIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyhzZXJ2aWNlcykpIHtcbiAgICBmb3IgKGNvbnN0IGp3ayBvZiBlbnRyeT8ua2V5cyA/PyBbXSkge1xuICAgICAgaWYgKCFqd2s/LmtpZCkgY29udGludWU7XG4gICAgICB0cnkge1xuICAgICAgICBieUtpZC5zZXQoandrLmtpZCwgeyBzZXJ2aWNlTmFtZSwga2V5OiBwdWJsaWNLZXlGcm9tSndrKGp3aykgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBPbmUgdW51c2FibGUgZW50cnkgbXVzdCBub3QgZGlzY2FyZCB0aGUgcmVzdCBvZiB0aGUgYnVuZGxlIOKAlCB0aGUgc2FtZVxuICAgICAgICAvLyBydWxlIHRoZSBKV0tTIGNhY2hlIGFwcGxpZXMgdG8gcGxhdGZvcm0ncyBwdWJsaXNoZWQgc2V0LlxuICAgICAgICBsb2dnZXIud2FybignU2tpcHBpbmcgdW51c2FibGUgc2VydmljZSBrZXknLCB7IHNlcnZpY2VOYW1lLCBraWQ6IGp3ay5raWQsIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyb3IpIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoYnlLaWQuc2l6ZSA9PT0gMCkgdGhyb3cgbmV3IFNlcnZpY2VLZXlFcnJvcihgJHtmaWxlfSBjb250YWluZWQgbm8gdXNhYmxlIHNlcnZpY2Uga2V5c2ApO1xuICByZXR1cm4gYnlLaWQ7XG59XG5cbi8qKlxuICogVGhlIGBraWRgIOKGkiBzZXJ2aWNlIG1hcCwgcmUtcmVhZCB3aGVuIHRoZSByZWZyZXNoIGludGVydmFsIGhhcyBwYXNzZWQgb3IgdGhlXG4gKiBmaWxlJ3MgbXRpbWUgY2hhbmdlZCAoc28gYSByb3RhdGlvbiBpcyBwaWNrZWQgdXAgd2l0aG91dCBhIHJlc3RhcnQpLlxuICpcbiAqIEluIGVwaGVtZXJhbCBtb2RlIHRoZSBcImJ1bmRsZVwiIGlzIHdoYXRldmVyIHRoaXMgcHJvY2VzcyBnZW5lcmF0ZWQgZm9yIGl0c2VsZi5cbiAqIE5ldmVyIHRocm93cyBmb3IgYSBtaXNzaW5nIGZpbGUgaW4gdGhhdCBtb2RlIOKAlCBpdCBqdXN0IGhvbGRzIHRob3NlIGtleXMuXG4gKi9cbmZ1bmN0aW9uIHZlcmlmaWNhdGlvbktleXMoKTogTWFwPHN0cmluZywgeyBzZXJ2aWNlTmFtZTogc3RyaW5nOyBrZXk6IEtleU9iamVjdCB9PiB7XG4gIGNvbnN0IGZpbGUgPSBwcm9jZXNzLmVudi5TRVJWSUNFX0tFWV9CVU5ETEVfRklMRTtcbiAgaWYgKCFmaWxlKSB7XG4gICAgY29uc3QgbG9jYWwgPSBuZXcgTWFwPHN0cmluZywgeyBzZXJ2aWNlTmFtZTogc3RyaW5nOyBrZXk6IEtleU9iamVjdCB9PigpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGVwaGVtZXJhbEtleXM/LnZhbHVlcygpID8/IFtdKSB7XG4gICAgICBsb2NhbC5zZXQoa2V5LmtpZCwgeyBzZXJ2aWNlTmFtZToga2V5LnNlcnZpY2VOYW1lLCBrZXk6IGNyeXB0by5jcmVhdGVQdWJsaWNLZXkoa2V5LnByaXZhdGVLZXkpIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWw7XG4gIH1cblxuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBsZXQgbXRpbWVNcyA9IDA7XG4gIHRyeSB7XG4gICAgbXRpbWVNcyA9IHN0YXRTeW5jKGZpbGUpLm10aW1lTXM7XG4gIH0gY2F0Y2gge1xuICAgIC8vIFVucmVhZGFibGUgbm93OiBrZWVwIHNlcnZpbmcgYSBidW5kbGUgYWxyZWFkeSBpbiBoYW5kIChwdWJsaWMga2V5cyBkb24ndFxuICAgIC8vIGV4cGlyZSwgYW5kIHJlZnVzaW5nIGV2ZXJ5IGludGVybmFsIGNhbGwgYmVjYXVzZSBhIG1vdW50IGJsaXBwZWQgd291bGQgYmVcbiAgICAvLyBhIHNlbGYtaW5mbGljdGVkIG91dGFnZSkuIFdpdGggbm90aGluZyBpbiBoYW5kLCBmYWlsIGNsb3NlZCBiZWxvdy5cbiAgICBpZiAoYnVuZGxlKSByZXR1cm4gYnVuZGxlLmJ5S2lkO1xuICB9XG4gIGlmIChidW5kbGUgJiYgYnVuZGxlLm10aW1lTXMgPT09IG10aW1lTXMgJiYgbm93IC0gYnVuZGxlLmxvYWRlZEF0IDwgQlVORExFX1JFRlJFU0hfSU5URVJWQUxfTVMpIHtcbiAgICByZXR1cm4gYnVuZGxlLmJ5S2lkO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBieUtpZCA9IHBhcnNlQnVuZGxlKHJlYWRGaWxlU3luYyhmaWxlLCAndXRmOCcpLCBmaWxlKTtcbiAgICBidW5kbGUgPSB7IGJ5S2lkLCBsb2FkZWRBdDogbm93LCBtdGltZU1zIH07XG4gICAgcmV0dXJuIGJ5S2lkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChidW5kbGUpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdTZXJ2aWNlIGtleSBidW5kbGUgcmVsb2FkIGZhaWxlZDsgY29udGludWluZyBvbiB0aGUgbG9hZGVkIGNvcHknLCB7IGZpbGUsIGVycm9yOiBlcnJvck1lc3NhZ2UoZXJyb3IpIH0pO1xuICAgICAgcmV0dXJuIGJ1bmRsZS5ieUtpZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3IgaW5zdGFuY2VvZiBTZXJ2aWNlS2V5RXJyb3IgPyBlcnJvciA6IG5ldyBTZXJ2aWNlS2V5RXJyb3IoU3RyaW5nKGVycm9yKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBXaGV0aGVyIGBraWRgIGJlbG9uZ3MgdG8gYW4gaW50ZXJuYWwgU0VSVklDRSBrZXkuIFRoaXMgaXMgaG93IGEgYmVhcmVyIHRva2VuXG4gKiBpcyByb3V0ZWQgYmV0d2VlbiB0aGUgdHdvIEVTMjU2IGNoYWluczogYm90aCB1c2VyIGFuZCBzZXJ2aWNlIHRva2VucyBhcmVcbiAqIEVTMjU2IHdpdGggYSBga2lkYCwgYW5kIGBraWRgIGlzIGFuIFJGQyA3NjM4IHRodW1icHJpbnQsIHNvIG93bmVyc2hpcCBvZiB0aGVcbiAqIGlkIOKAlCBub3QgYSBjbGFpbSBpbnNpZGUgdGhlIHRva2VuIOKAlCBkZWNpZGVzIHdoaWNoIGtleSBzZXQgbWF5IHZlcmlmeSBpdC5cbiAqIFJldHVybnMgYGZhbHNlYCAobmV2ZXIgdGhyb3dzKSB3aGVuIG5vIGJ1bmRsZSBjYW4gYmUgcmVhZDsgdGhlIHRva2VuIHRoZW5cbiAqIHRha2VzIHRoZSB1c2VyIGNoYWluIGFuZCBpcyByZWplY3RlZCB0aGVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2VydmljZUtpZChraWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIHJldHVybiB2ZXJpZmljYXRpb25LZXlzKCkuaGFzKGtpZCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2lnbiAvIHZlcmlmeVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogU2lnbiBgY2xhaW1zYCBhcyB0aGlzIHNlcnZpY2UncyBpbnRlcm5hbCB0b2tlbjogRVMyNTYsIGBraWRgID0gdGhlIHNpZ25lcidzXG4gKiB0aHVtYnByaW50LCBgc3ViYCA9IGBzZXJ2aWNlOjxzZXJ2aWNlTmFtZT5gLiBgaWF0YC9gZXhwYCBhbmQgdGhlIG9wdGlvbmFsXG4gKiBpc3N1ZXIvYXVkaWVuY2UgYXJlIHN0YW1wZWQgaGVyZSBzbyB0aGVyZSBpcyBvbmUgcGxhY2UgdGhhdCBkZWNpZGVzIHdoYXQgYVxuICogc2VydmljZSB0b2tlbiBzYXlzLlxuICpcbiAqIEhhbmQtcm9sbGVkIChyYXRoZXIgdGhhbiBgand0LnNpZ25gKSBvbmx5IHNvIHRoZSBoZWFkZXIgY2FycmllcyB0aGUgYGtpZGAgaW5cbiAqIHRoZSBzYW1lIHNoYXBlIHBsYXRmb3JtJ3Mgc2lnbmVyIHByb2R1Y2VzIOKAlCBgY3J5cHRvLnNpZ25gIGlzIHN5bmNocm9ub3VzLCBzb1xuICogdW5saWtlIHRoZSBLTVMgcGF0aCB0aGlzIGNvc3RzIG5vdGhpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaWduU2VydmljZUp3dChcbiAgY2xhaW1zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgb3B0aW9uczogeyBzZXJ2aWNlTmFtZTogc3RyaW5nOyBleHBpcmVzSW5TZWNvbmRzOiBudW1iZXI7IGlzc3Vlcj86IHN0cmluZzsgYXVkaWVuY2U/OiBzdHJpbmcgfSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IGtleSA9IHNpZ25pbmdLZXlGb3Iob3B0aW9ucy5zZXJ2aWNlTmFtZSk7XG4gIGNvbnN0IG5vdyA9IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApO1xuICBjb25zdCBib2R5ID0ge1xuICAgIC4uLmNsYWltcyxcbiAgICBzdWI6IGAke1NFUlZJQ0VfU1VCSkVDVF9QUkVGSVh9JHtvcHRpb25zLnNlcnZpY2VOYW1lfWAsXG4gICAgaWF0OiBub3csXG4gICAgZXhwOiBub3cgKyBvcHRpb25zLmV4cGlyZXNJblNlY29uZHMsXG4gICAgLi4uKG9wdGlvbnMuaXNzdWVyID8geyBpc3M6IG9wdGlvbnMuaXNzdWVyIH0gOiB7fSksXG4gICAgLi4uKG9wdGlvbnMuYXVkaWVuY2UgPyB7IGF1ZDogb3B0aW9ucy5hdWRpZW5jZSB9IDoge30pLFxuICB9O1xuICBjb25zdCBzaWduaW5nSW5wdXQgPSBlbmNvZGVKd3NTaWduaW5nSW5wdXQoa2V5LmtpZCwgYm9keSk7XG4gIGNvbnN0IHNpZ25hdHVyZSA9IGNyeXB0by5zaWduKCdzaGEyNTYnLCBCdWZmZXIuZnJvbShzaWduaW5nSW5wdXQsICd1dGYtOCcpLCB7XG4gICAga2V5OiBrZXkucHJpdmF0ZUtleSxcbiAgICBkc2FFbmNvZGluZzogJ2llZWUtcDEzNjMnLFxuICB9KTtcbiAgcmV0dXJuIGNvbXBhY3RKd3Moc2lnbmluZ0lucHV0LCBzaWduYXR1cmUpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFdoYXQgYSBzZXJ2aWNlIHRva2VuIG1heSBhc3NlcnRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFNpZ25lcnMgd2hvc2Uga2V5IGlzIHB1Ymxpc2hlZCBpbiB0aGUgYnVuZGxlIGJ1dCB3aG9zZSBQUklWQVRFIGhhbGYgbGl2ZXNcbiAqIE9VVFNJREUgdGhlIGNsdXN0ZXIg4oCUIHRvZGF5IG9ubHkgYGRlcGxveS1ib290c3RyYXBgLCB3aGljaCB0aGUgZGVwbG95IHNjcmlwdHNcbiAqIGhvbGQgb24gdGhlIG9wZXJhdG9yIC8gQ0kgaG9zdCAoYGNlcnRzL3NlcnZpY2Uta2V5cy9kZXBsb3ktYm9vdHN0cmFwLmtleWApXG4gKiBmb3IgdGhlIHJlZ2lzdHJ5IGJhc2UtaW1hZ2UgcHVzaC5cbiAqXG4gKiBCZWNhdXNlIHRoZSBwdWJsaWMgYnVuZGxlIGlzIG1vdW50ZWQgaW50byBFVkVSWSBzZXJ2aWNlLCBhIHRva2VuIGZyb20gc3VjaCBhXG4gKiBzaWduZXIgd291bGQgb3RoZXJ3aXNlIHZlcmlmeSBldmVyeXdoZXJlLiBTbyB7QGxpbmsgdmVyaWZ5U2VydmljZUp3dH0gcmVmdXNlc1xuICogdGhlc2Ugc2lnbmVycyB1bmxlc3MgdGhlIGNhbGwgc2l0ZSBuYW1lcyB0aGVtIGluIGBhY2NlcHRTZXJ2aWNlc2Ag4oCUIHRydXN0IGluXG4gKiBhbiBvdXQtb2YtY2x1c3RlciBrZXkgaXMgb3B0ZWQgaW50byBwZXIgdmVyaWZpY2F0aW9uIHNlYW0sIG5ldmVyIGluaGVyaXRlZFxuICogZnJvbSB0aGUgYnVuZGxlLiBUaGUgc2VhbXMgdGhhdCBvcHQgaW4gdG9kYXk6XG4gKlxuICogIC0gYXBpL2ltYWdlLXJlZ2lzdHJ5IGBhdXRoLXJlc29sdmVyLnRzYCAodGhlIGAvdG9rZW5gIG1pbnQgZm9yIHRoZVxuICogICAgYGxpYnJhcnkvKmAgYmFzZS1pbWFnZSBwdXNoKSwgdmlhIGB2ZXJpZnlCZWFyZXJUb2tlbih0b2tlbiwgeyBhY2NlcHRTZXJ2aWNlcyB9KWAuXG4gKlxuICogQSByb3V0ZSBvcHRzIGluIHdpdGggYHJlcXVpcmVBdXRoKHsgYWNjZXB0U2VydmljZXM6IFsnZGVwbG95LWJvb3RzdHJhcCddIH0pYC5cbiAqL1xuZXhwb3J0IGNvbnN0IE9QVF9JTl9TRVJWSUNFX1NJR05FUlM6IHJlYWRvbmx5IHN0cmluZ1tdID0gWydkZXBsb3ktYm9vdHN0cmFwJ107XG5cbi8qKiBPcHRpb25zIGV2ZXJ5IHNlcnZpY2UtdG9rZW4gdmVyaWZpY2F0aW9uIHRha2VzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlSnd0VmVyaWZ5T3B0aW9ucyB7XG4gIGtpZDogc3RyaW5nO1xuICBpc3N1ZXI/OiBzdHJpbmc7XG4gIGF1ZGllbmNlPzogc3RyaW5nO1xuICAvKipcbiAgICoge0BsaW5rIE9QVF9JTl9TRVJWSUNFX1NJR05FUlN9IHRoaXMgY2FsbCBzaXRlIHRydXN0cy4gQW55IG9wdC1pbiBzaWduZXJcbiAgICogTk9UIGxpc3RlZCBpcyByZWZ1c2VkIGFzIGFuIGludmFsaWQgdG9rZW4gKDQwMSBhdCBgcmVxdWlyZUF1dGhgKS4gTmFtaW5nIGFuXG4gICAqIG9yZGluYXJ5IGluLWNsdXN0ZXIgc2VydmljZSBoZXJlIGlzIGEgbm8tb3Ag4oCUIHRob3NlIGFyZSBhbHdheXMgYWNjZXB0ZWQuXG4gICAqL1xuICBhY2NlcHRTZXJ2aWNlcz86IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBjbGFpbXMgb2YgYSB2ZXJpZmllZCBzZXJ2aWNlIHRva2VuIHdpdGggZXZlcnkgQVVUSE9SSVRZIGNsYWltIGEgc2VydmljZVxuICogbWF5IG5vdCBhc3NlcnQgYWJvdXQgaXRzZWxmIHJlbW92ZWQuIEEgc2VydmljZSBwcmluY2lwYWwncyBhdXRob3JpdHkgaXMgaXRzXG4gKiBOQU1FIChib3VuZCB0byBpdHMga2V5IOKAlCBgcmVxdWlyZUludGVybmFsU2VydmljZWAsIGBpc1NlcnZpY2VQcmluY2lwYWxOYW1lZGApXG4gKiBwbHVzIHRoZSBleHBsaWNpdCBsZWFzdC1wcml2aWxlZ2UgYHBlcm1pc3Npb25zYCBjbGFpbSwgYW5kIG5vdGhpbmcgZWxzZTpcbiAqXG4gKiAgLSBgaXNTdXBlckFkbWluYCBpcyBkcm9wcGVkIOKAlCBzdXBlcmFkbWluIGlzIGEgcHJvcGVydHkgb2YgYSBQRVJTT04sIG1pbnRlZFxuICogICAgb25seSBieSBwbGF0Zm9ybSdzIHVzZXIgc2lnbmVyOyBhIHNlcnZpY2Uga2V5IGNhbm5vdCBjb25mZXIgaXQ7XG4gKiAgLSBgaXNBZG1pbmAgaXMgZm9yY2VkIGBmYWxzZWAgYW5kIGFuIGBvd25lcmAvYGFkbWluYCBgcm9sZWAgaXMgY2xhbXBlZCB0b1xuICogICAgYG1lbWJlcmAg4oCUIG9yZyBhZG1pbi1uZXNzIGlzIGxpa2V3aXNlIGEgcGVyc29uJ3MgbWVtYmVyc2hpcCwgYW5kIGV2ZXJ5XG4gKiAgICBvcmctYWRtaW4gcHJlZGljYXRlIChgaXNPcmdBZG1pbmAsIGBpc0FkbWluID09PSB0cnVlYCkgcmVhZHMgb25lIG9mIHRoZXNlLlxuICpcbiAqIEZhaWwtc2FmZSBieSBjb25zdHJ1Y3Rpb246IGEgZ2F0ZSB0aGF0IHdyb25nbHkgcmVsaWVkIG9uIGEgc2VydmljZSB0b2tlbidzXG4gKiBhZG1pbiBjbGFpbSBub3cgcmVmdXNlcyAoNDAzKSwgaXQgbmV2ZXIgZ3JhbnRzIG1vcmUuIEFwcGxpZWQgaW5zaWRlXG4gKiB7QGxpbmsgdmVyaWZ5U2VydmljZUp3dH0sIHNvIEVWRVJZIGNoYWluIHRoYXQgYWNjZXB0cyBhIHNlcnZpY2UgdG9rZW4g4oCUXG4gKiBhcGktY29yZSBgcmVxdWlyZUF1dGhgIC8gYHZlcmlmeVNlcnZpY2VQcmluY2lwYWxgLCBwbGF0Zm9ybSdzIG93biB2ZXJpZmllcixcbiAqIGltYWdlLXJlZ2lzdHJ5J3MgYC90b2tlbmAgcmVzb2x2ZXIg4oCUIHNlZXMgdGhlIHNhbWUgcmVkdWNlZCBjbGFpbSBzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRob3V0U2VydmljZUF1dGhvcml0eUNsYWltczxUPihjbGFpbXM6IFQpOiBUIHtcbiAgY29uc3QgYyA9IHsgLi4uKGNsYWltcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfTtcbiAgZGVsZXRlIGMuaXNTdXBlckFkbWluO1xuICBpZiAoJ2lzQWRtaW4nIGluIGMpIGMuaXNBZG1pbiA9IGZhbHNlO1xuICBpZiAoYy5yb2xlID09PSAnb3duZXInIHx8IGMucm9sZSA9PT0gJ2FkbWluJykgYy5yb2xlID0gJ21lbWJlcic7XG4gIHJldHVybiBjIGFzIFQ7XG59XG5cbi8qKlxuICogVmVyaWZ5IGFuIGludGVybmFsIHNlcnZpY2UgdG9rZW4sIFNZTkNIUk9OT1VTTFksIGFuZCByZXR1cm4gaXRzIGNsYWltcy5cbiAqXG4gKiBUaGUgc2VjdXJpdHkgcHJvcGVydHkgdGhpcyBmdW5jdGlvbiBleGlzdHMgZm9yOiB0aGUgYGtpZGAgc2VsZWN0cyB0aGUga2V5XG4gKiBBTkQgbmFtZXMgdGhlIHNpZ25lciwgYW5kIHRoZSB0b2tlbidzIGBzdWJgIG11c3QgYWdyZWUuIFNvIGBiaWxsaW5nYCBjYW5ub3RcbiAqIGJlIGltcGVyc29uYXRlZCBieSBhbnkgb3RoZXIgc2VydmljZSDigJQgbm90IGV2ZW4gb25lIHRoYXQgaG9sZHMgYSB2YWxpZCBrZXkgb2ZcbiAqIGl0cyBvd24g4oCUIGEgZ3VhcmFudGVlIG5vIHNoYXJlZCBzZWNyZXQgY2FuIGdpdmUuXG4gKlxuICogVHdvIGZ1cnRoZXIgcnVsZXMsIGJvdGggZmFpbC1jbG9zZWQ6XG4gKiAgLSBhbiB7QGxpbmsgT1BUX0lOX1NFUlZJQ0VfU0lHTkVSUyBvcHQtaW4gc2lnbmVyfSAoYGRlcGxveS1ib290c3RyYXBgKSBpc1xuICogICAgcmVmdXNlZCB1bmxlc3MgYG9wdGlvbnMuYWNjZXB0U2VydmljZXNgIG5hbWVzIGl0O1xuICogIC0gdGhlIHJldHVybmVkIGNsYWltcyBuZXZlciBjYXJyeSBzdXBlcmFkbWluIG9yIG9yZy1hZG1pbiBhdXRob3JpdHlcbiAqICAgICh7QGxpbmsgd2l0aG91dFNlcnZpY2VBdXRob3JpdHlDbGFpbXN9KS5cbiAqXG4gKiBAdGhyb3dzIHtqd3QuSnNvbldlYlRva2VuRXJyb3J9IHVua25vd24gYGtpZGAsIHdyb25nIGFsZ29yaXRobSwgYmFkXG4gKiAgICAgICAgIHNpZ25hdHVyZSwgZXhwaXJlZCwgYSBgc3ViYCB0aGF0IGRpc2FncmVlcyB3aXRoIHRoZSBzaWduaW5nIGtleSwgb3IgYW5cbiAqICAgICAgICAgb3B0LWluIHNpZ25lciB0aGlzIGNhbGwgc2l0ZSBkaWQgbm90IGFjY2VwdC5cbiAqIEB0aHJvd3Mge1NlcnZpY2VLZXlFcnJvcn0gbm8gdmVyaWZpY2F0aW9uIGJ1bmRsZSBjb3VsZCBiZSByZWFkIGF0IGFsbCDigJQgdGhlXG4gKiAgICAgICAgIHRva2VuJ3MgdmFsaWRpdHkgaXMgVU5LTk9XTiBhbmQgdGhlIGNhbGxlciBtdXN0IG5vdCB0cmVhdCBpdCBhcyB2YWxpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcmlmeVNlcnZpY2VKd3Q8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgdG9rZW46IHN0cmluZyxcbiAgb3B0aW9uczogU2VydmljZUp3dFZlcmlmeU9wdGlvbnMsXG4pOiBUIHtcbiAgY29uc3QgZW50cnkgPSB2ZXJpZmljYXRpb25LZXlzKCkuZ2V0KG9wdGlvbnMua2lkKTtcbiAgLy8gRVZFUlkgZW1pc3Npb24gb2YgdGhpcyBjb3VudGVyIGNhcnJpZXMgdGhlIHNhbWUgbGFiZWwgS0VZUy4gVGhlIFByb21ldGhldXNcbiAgLy8gY291bnRlciBpcyByZWdpc3RlcmVkIGxhemlseSB3aXRoIHdoYXRldmVyIGtleXMgaXRzIGZpcnN0IGVtaXNzaW9uIHVzZWQsXG4gIC8vIGFuZCBhbiBpbmNyZW1lbnQgd2l0aCBhIGRpZmZlcmVudCBzZXQgdGhyb3dzIOKAlCB3aGljaCBgZW1pdENvdW50ZXJgXG4gIC8vIHN3YWxsb3dzLiBTbyB3aGVuIHRoZSBmaXJzdCB0b2tlbiBhIHBvZCB2ZXJpZmllZCB3YXMgYmFkIChgeyByZXN1bHQgfWBcbiAgLy8gYWxvbmUpLCBldmVyeSBsYXRlciBgb2tgIGFuZCBgc3ViamVjdF9taXNtYXRjaGAgKGB7IHJlc3VsdCwgc2VydmljZSB9YCkgd2FzXG4gIC8vIHNpbGVudGx5IGRyb3BwZWQgZm9yIHRoZSBsaWZlIG9mIHRoZSBwcm9jZXNzOiB0aGUgbWV0cmljIHRoYXQgdGVsbHMgeW91XG4gIC8vIHNlcnZpY2UtdG8tc2VydmljZSBhdXRoIGlzIGhlYWx0aHkgd2VudCBxdWlldCBleGFjdGx5IHdoZW4gaXQgbWF0dGVyZWQuXG4gIGlmICghZW50cnkpIHtcbiAgICBlbWl0Q291bnRlcignc2VydmljZV90b2tlbl92ZXJpZnlfdG90YWwnLCB7IHJlc3VsdDogJ3Vua25vd25fa2lkJywgc2VydmljZTogJ3Vua25vd24nIH0pO1xuICAgIHRocm93IG5ldyBqd3QuSnNvbldlYlRva2VuRXJyb3IoYE5vIHB1Ymxpc2hlZCBzZXJ2aWNlIGtleSBmb3Iga2lkICR7b3B0aW9ucy5raWR9YCk7XG4gIH1cbiAgbGV0IGNsYWltczogVCAmIHsgc3ViPzogdW5rbm93biB9O1xuICB0cnkge1xuICAgIGNsYWltcyA9IGp3dC52ZXJpZnkodG9rZW4sIGVudHJ5LmtleSwge1xuICAgICAgYWxnb3JpdGhtczogW1NFUlZJQ0VfVE9LRU5fQUxHT1JJVEhNXSxcbiAgICAgIC4uLihvcHRpb25zLmlzc3VlciA/IHsgaXNzdWVyOiBvcHRpb25zLmlzc3VlciB9IDoge30pLFxuICAgICAgLi4uKG9wdGlvbnMuYXVkaWVuY2UgPyB7IGF1ZGllbmNlOiBvcHRpb25zLmF1ZGllbmNlIH0gOiB7fSksXG4gICAgfSkgYXMgVCAmIHsgc3ViPzogdW5rbm93biB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGVtaXRDb3VudGVyKCdzZXJ2aWNlX3Rva2VuX3ZlcmlmeV90b3RhbCcsIHsgcmVzdWx0OiAnaW52YWxpZCcsIHNlcnZpY2U6IGVudHJ5LnNlcnZpY2VOYW1lIH0pO1xuICAgIHRocm93IGVycm9yO1xuICB9XG4gIGlmIChjbGFpbXMuc3ViICE9PSBgJHtTRVJWSUNFX1NVQkpFQ1RfUFJFRklYfSR7ZW50cnkuc2VydmljZU5hbWV9YCkge1xuICAgIC8vIEEgdmFsaWQgc2lnbmF0dXJlIGJ5IHRoZSBXUk9ORyBzZXJ2aWNlOiB0aGUga2V5IGJlbG9uZ3MgdG8gYGVudHJ5LnNlcnZpY2VOYW1lYFxuICAgIC8vIGJ1dCB0aGUgdG9rZW4gc3BlYWtzIGZvciBzb21lb25lIGVsc2U6IGEgY3Jvc3Mtc2VydmljZSBmb3JnZXJ5LlxuICAgIGVtaXRDb3VudGVyKCdzZXJ2aWNlX3Rva2VuX3ZlcmlmeV90b3RhbCcsIHsgcmVzdWx0OiAnc3ViamVjdF9taXNtYXRjaCcsIHNlcnZpY2U6IGVudHJ5LnNlcnZpY2VOYW1lIH0pO1xuICAgIHRocm93IG5ldyBqd3QuSnNvbldlYlRva2VuRXJyb3IoYFNlcnZpY2UgdG9rZW4gc3ViamVjdCAke1N0cmluZyhjbGFpbXMuc3ViKX0gd2FzIHNpZ25lZCBieSAke2VudHJ5LnNlcnZpY2VOYW1lfWApO1xuICB9XG4gIGlmIChPUFRfSU5fU0VSVklDRV9TSUdORVJTLmluY2x1ZGVzKGVudHJ5LnNlcnZpY2VOYW1lKSAmJiAhb3B0aW9ucy5hY2NlcHRTZXJ2aWNlcz8uaW5jbHVkZXMoZW50cnkuc2VydmljZU5hbWUpKSB7XG4gICAgLy8gQSBnZW51aW5lIHRva2VuIGZyb20gYW4gb3V0LW9mLWNsdXN0ZXIgc2lnbmVyLCBwcmVzZW50ZWQgdG8gYSBzZWFtIHRoYXRcbiAgICAvLyBuZXZlciBvcHRlZCBpbiB0byB0cnVzdGluZyBpdC5cbiAgICBlbWl0Q291bnRlcignc2VydmljZV90b2tlbl92ZXJpZnlfdG90YWwnLCB7IHJlc3VsdDogJ3NpZ25lcl9ub3RfYWNjZXB0ZWQnLCBzZXJ2aWNlOiBlbnRyeS5zZXJ2aWNlTmFtZSB9KTtcbiAgICB0aHJvdyBuZXcgand0Lkpzb25XZWJUb2tlbkVycm9yKGBTZXJ2aWNlIHRva2VucyBzaWduZWQgYnkgJHtlbnRyeS5zZXJ2aWNlTmFtZX0gYXJlIG5vdCBhY2NlcHRlZCBoZXJlYCk7XG4gIH1cbiAgZW1pdENvdW50ZXIoJ3NlcnZpY2VfdG9rZW5fdmVyaWZ5X3RvdGFsJywgeyByZXN1bHQ6ICdvaycsIHNlcnZpY2U6IGVudHJ5LnNlcnZpY2VOYW1lIH0pO1xuICByZXR1cm4gd2l0aG91dFNlcnZpY2VBdXRob3JpdHlDbGFpbXMoY2xhaW1zKTtcbn1cblxuLyoqXG4gKiBUcnVlIHdoaWxlIHRoaXMgc2VydmljZSBzdGlsbCBwdWJsaXNoZXMgbW9yZSB0aGFuIG9uZSB2ZXJpZmljYXRpb24ga2V5IOKAlCBpLmUuXG4gKiBhIHNpZ25pbmcta2V5IHJvdGF0aW9uIGlzIG9wZW4gYW5kIHRoZSByZXRpcmluZyBrZXkgaXMgc3RpbGwgdHJ1c3RlZC4gRmVlZHNcbiAqIHRoZSBgc2VjcmV0X3JvdGF0aW9uX3ByZXZpb3VzX3NldHtzZWNyZXQ9XCJTRVJWSUNFX1NJR05JTkdfS0VZXCJ9YCBnYXVnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUmV0aXJpbmdTZXJ2aWNlS2V5UHVibGlzaGVkKCk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIGNvbnN0IG1lID0gc2VydmljZUlkZW50aXR5KCk7XG4gICAgcmV0dXJuIFsuLi52ZXJpZmljYXRpb25LZXlzKCkudmFsdWVzKCldLmZpbHRlcigodikgPT4gdi5zZXJ2aWNlTmFtZSA9PT0gbWUpLmxlbmd0aCA+IDE7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFRlc3Qgc2VhbTogZHJvcCB0aGUgbG9hZGVkIHNpZ25pbmcga2V5LCB0aGUgYnVuZGxlIGFuZCBhbnkgZXBoZW1lcmFsIGtleXMgc29cbiAqIHRoZSBuZXh0IHNpZ24vdmVyaWZ5IHJlLXJlYWRzIHRoZSBlbnZpcm9ubWVudC4gRG9uJ3QgY2FsbCBmcm9tIHByb2R1Y3Rpb24gY29kZVxuICog4oCUIHJvdGF0aW9uIGlzIHBpY2tlZCB1cCBieSB0aGUgcmVmcmVzaCBpbnRlcnZhbCBhbmQgdGhlIG10aW1lIGNoZWNrLlxuICovXG5leHBvcnQgZnVuY3Rpb24gX3Jlc2V0U2VydmljZUtleXNGb3JUZXN0cygpOiB2b2lkIHtcbiAgbG9jYWxLZXkgPSB1bmRlZmluZWQ7XG4gIGJ1bmRsZSA9IHVuZGVmaW5lZDtcbiAgZXBoZW1lcmFsS2V5cyA9IHVuZGVmaW5lZDtcbiAgZXBoZW1lcmFsV2FybmVkID0gZmFsc2U7XG59XG4iXX0=
@@ -11,7 +11,7 @@
11
11
  * individually — no shared To: line).
12
12
  */
13
13
  /** A notification event number. */
14
- export type EcosystemNotificationEventId = 'N1' | 'N2' | 'N3' | 'N4' | 'N5' | 'N6' | 'N7' | 'N8' | 'N9' | 'N10' | 'N11' | 'N12' | 'N13' | 'N14' | 'N15' | 'N16' | 'N17' | 'N18' | 'N19' | 'N20' | 'N21' | 'N22' | 'N23' | 'N24' | 'N25' | 'N26' | 'N27' | 'N28' | 'N29' | 'N30' | 'N31' | 'N32' | 'N33';
14
+ export type EcosystemNotificationEventId = 'N1' | 'N2' | 'N3' | 'N4' | 'N5' | 'N6' | 'N7' | 'N8' | 'N9' | 'N10' | 'N11' | 'N12' | 'N13' | 'N14' | 'N15' | 'N16' | 'N17' | 'N18' | 'N19' | 'N20' | 'N21' | 'N22' | 'N23' | 'N24' | 'N25' | 'N26' | 'N27' | 'N28' | 'N29' | 'N30' | 'N31' | 'N32' | 'N33' | 'N34';
15
15
  /** A delivery channel. In-app is the source of truth; email is the courtesy copy. */
16
16
  export type EcosystemNotificationChannel = 'in_app' | 'email';
17
17
  /** A per-user EMAIL opt-out key. In-app is never optional. */
@@ -33,7 +33,7 @@ export interface EcosystemEventSpec {
33
33
  channels: readonly EcosystemNotificationChannel[];
34
34
  /**
35
35
  * Email opt-out key, or `null` when the email is TRANSACTIONAL / security
36
- * (N1, N3–N5, N7–N10, N18–N23, N25, N28–N33 can't be turned off).
36
+ * (N1, N3–N5, N7–N10, N18–N23, N25, N28–N34 can't be turned off).
37
37
  */
38
38
  preference: EcosystemEmailPreference | null;
39
39
  /** When the email is batched rather than immediate, its cadence. */
@@ -48,7 +48,7 @@ export declare const ECOSYSTEM_NOTIFICATION_EVENTS: Readonly<Record<EcosystemNot
48
48
  /** Whether `value` is a notification event number. */
49
49
  export declare function isEcosystemNotificationEvent(value: unknown): value is EcosystemNotificationEventId;
50
50
  /** Org-local permissions an {@link EcosystemRecipientSpec} `org_permission` rule may name. */
51
- export type EcosystemOrgRecipientPermission = 'publishers:manage' | 'plugin_installs:manage' | 'plugins:write' | 'pipelines:write';
51
+ export type EcosystemOrgRecipientPermission = 'publishers:manage' | 'plugin_installs:manage' | 'plugins:write' | 'pipelines:write' | 'toolchain:manage';
52
52
  /** System-org permissions a `moderators` rule may name. */
53
53
  export type EcosystemModeratorPermission = 'plugins:moderate' | 'publishers:verify';
54
54
  /**
@@ -58,7 +58,8 @@ export type EcosystemModeratorPermission = 'plugins:moderate' | 'publishers:veri
58
58
  * `orgId` picks the inbox; defaults to the user's last active org.
59
59
  * - `org_permission` — active members of `orgId` holding `permission`
60
60
  * (Publisher managers = `publishers:manage`, Org approvers =
61
- * `plugin_installs:manage`, plugin writers = `plugins:write`). With
61
+ * `plugin_installs:manage`, plugin writers = `plugins:write`, toolchain
62
+ * managers = `toolchain:manage`). With
62
63
  * `inheritFromRoot`, a team with no holders falls back to its root org's
63
64
  * holders; with none anywhere, the org's owners.
64
65
  * - `org_members` — the named users, but only those who are ACTIVE members of
@@ -53,6 +53,13 @@ export const ECOSYSTEM_NOTIFICATION_EVENTS = {
53
53
  // Routed to the org's pipeline writers under the same security settings.
54
54
  N32: { description: 'Pipeline blocked by a plugin vulnerability policy', channels: ['in_app', 'email'], preference: null, allowsAddress: true },
55
55
  N33: { description: 'Pipeline vulnerability risk acceptance lapsed', channels: ['in_app', 'email'], preference: null, allowsAddress: true },
56
+ // Managed toolchain hygiene (docs/plans/bootstrap-image-versioning.md §10): an
57
+ // org's toolchain default (to its `toolchain:manage` holders) or a pipeline's
58
+ // pinned release (to the org's pipeline writers) was yanked or deprecated,
59
+ // picked up a KEV or fixable Critical finding, or fell more than three
60
+ // releases behind the platform default. Transactional: it says the org's
61
+ // pipelines are building on something it should move off.
62
+ N34: { description: 'Managed toolchain: a release you use was yanked, deprecated, found vulnerable or fell behind; the platform default moved; your org joined a canary; or a pipeline needs a re-deploy to recover', channels: ['in_app', 'email'], preference: null },
56
63
  };
57
64
  /** Whether `value` is a notification event number. */
58
65
  export function isEcosystemNotificationEvent(value) {
@@ -62,7 +69,7 @@ export function isEcosystemNotificationEvent(value) {
62
69
  export const ECOSYSTEM_NOTIFY_SUBJECT_MAX = 500;
63
70
  export const ECOSYSTEM_NOTIFY_TEXT_MAX = 10000;
64
71
  const MAX_RECIPIENT_RULES = 50;
65
- const ORG_PERMISSIONS = ['publishers:manage', 'plugin_installs:manage', 'plugins:write', 'pipelines:write'];
72
+ const ORG_PERMISSIONS = ['publishers:manage', 'plugin_installs:manage', 'plugins:write', 'pipelines:write', 'toolchain:manage'];
66
73
  /** At most this many users in one `org_members` rule. */
67
74
  export const ECOSYSTEM_ORG_MEMBERS_MAX = 100;
68
75
  const MODERATOR_PERMISSIONS = ['plugins:moderate', 'publishers:verify'];
@@ -139,7 +146,7 @@ export function parseEcosystemNotifyRequest(body) {
139
146
  return 'body must be an object';
140
147
  const b = body;
141
148
  if (!isEcosystemNotificationEvent(b.event))
142
- return 'event must be one of N1..N33';
149
+ return 'event must be one of N1..N34';
143
150
  const spec = ECOSYSTEM_NOTIFICATION_EVENTS[b.event];
144
151
  if (!nonEmptyString(b.subject, ECOSYSTEM_NOTIFY_SUBJECT_MAX))
145
152
  return `subject is required (max ${ECOSYSTEM_NOTIFY_SUBJECT_MAX})`;
@@ -240,4 +247,4 @@ export function renderEcosystemDigest(event, items) {
240
247
  text: items.map((i) => `• ${i.subject}`).join('\n').slice(0, ECOSYSTEM_NOTIFY_TEXT_MAX),
241
248
  };
242
249
  }
243
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLW5vdGlmaWNhdGlvbnMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9lY29zeXN0ZW0tbm90aWZpY2F0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBZ0N0QzswRUFDMEU7QUFDMUUsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQThFO0lBQzFILHlCQUF5QixFQUFFLGNBQWM7SUFDekMsMEJBQTBCLEVBQUUsZUFBZTtJQUMzQywwQkFBMEIsRUFBRSxlQUFlO0lBQzNDLGtDQUFrQyxFQUFFLHVCQUF1QjtDQUM1RCxDQUFDO0FBS0YscURBQXFEO0FBQ3JELE1BQU0sQ0FBQyxNQUFNLHNDQUFzQyxHQUNqRCxNQUFNLENBQUMsTUFBTSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7QUF3Qm5ELDZDQUE2QztBQUM3QyxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBdUU7SUFDL0csRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLDRDQUE0QyxFQUFFLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRTtJQUM3SCxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsbURBQW1ELEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFO0lBQ3hLLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxtQ0FBbUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUU7SUFDcEgsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLGlDQUFpQyxFQUFFLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksRUFB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QUFLLENBQUMsSUFBSSxRQUFRLElBQUksUUFBUSxJQUFJLFFBQVEsRUFBRSxFQUFFO2tCQUMvQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsd0VBQXdFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztLQUNuRyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FDbkMsS0FBbUMsRUFDbkMsS0FBOEM7SUFFOUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUUsQ0FBQztJQUN6QyxNQUFNLElBQUksR0FBRyw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDcEcsT0FBTztRQUNMLE9BQU8sRUFBRSxHQUFHLE9BQU8sWUFBWSxLQUFLLENBQUMsTUFBTSxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLDRCQUE0QixDQUFDO1FBQzFHLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLHlCQUF5QixDQUFDO0tBQ3hGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbi8qKlxuICogVGhlIHBsdWdpbi1lY29zeXN0ZW0gbm90aWZpY2F0aW9uIGNvbnRyYWN0IChkb2NzL3BsdWdpbi1wdWJsaXNoaW5nLm1kKSxcbiAqIHNoYXJlZCBieSB0aGUgc2VuZGVyICh0aGUgcGx1Z2luIHNlcnZpY2UncyBlbnF1ZXVlIEFQSSBhbmQgZGlnZXN0XG4gKiBkaXNwYXRjaGVyKSBhbmQgdGhlIHJlbGF5IChwbGF0Zm9ybSBgUE9TVCAvaW50ZXJuYWwvbm90aWZ5LWVtYWlsYCkuXG4gKlxuICogUmVjaXBpZW50cyB0cmF2ZWwgYXMgUlVMRVMsIG5ldmVyIGFzIGxpc3RzOiBwbGF0Zm9ybSByZXNvbHZlcyBlYWNoXG4gKiB7QGxpbmsgRWNvc3lzdGVtUmVjaXBpZW50U3BlY30gYWdhaW5zdCBpdHMgdXNlci9Sb2xlIGRpcmVjdG9yeSBBVCBTRU5EIFRJTUUsXG4gKiBzbyBhIGRpZ2VzdCB0aGF0IGZsdXNoZXMgdG9tb3Jyb3cgcmVhY2hlcyB0b21vcnJvdydzIG1vZGVyYXRvcnMsIHRoZSBwbHVnaW5cbiAqIHNlcnZpY2UgbmV2ZXIgaGFuZGxlcyBhbiBlbWFpbCBhZGRyZXNzIG9yIGEgbWVtYmVyc2hpcCBsaXN0LCBhbmQgYSBwdWJsaXNoZXJcbiAqIGNhbiBuZXZlciBsZWFybiB3aG8gaW5zdGFsbGVkIHRoZWlyIHBsdWdpbiAodGhlIHJlbGF5IG1haWxzIGVhY2ggcmVjaXBpZW50XG4gKiBpbmRpdmlkdWFsbHkg4oCUIG5vIHNoYXJlZCBUbzogbGluZSkuXG4gKi9cblxuLyoqIEEgbm90aWZpY2F0aW9uIGV2ZW50IG51bWJlci4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbU5vdGlmaWNhdGlvbkV2ZW50SWQgPVxuICB8ICdOMScgfCAnTjInIHwgJ04zJyB8ICdONCcgfCAnTjUnIHwgJ042JyB8ICdONycgfCAnTjgnIHwgJ045JyB8ICdOMTAnXG4gIHwgJ04xMScgfCAnTjEyJyB8ICdOMTMnIHwgJ04xNCcgfCAnTjE1JyB8ICdOMTYnIHwgJ04xNycgfCAnTjE4JyB8ICdOMTknIHwgJ04yMCdcbiAgfCAnTjIxJyB8ICdOMjInIHwgJ04yMycgfCAnTjI0JyB8ICdOMjUnIHwgJ04yNicgfCAnTjI3JyB8ICdOMjgnIHwgJ04yOSdcbiAgfCAnTjMwJyB8ICdOMzEnIHwgJ04zMicgfCAnTjMzJztcblxuLyoqIEEgZGVsaXZlcnkgY2hhbm5lbC4gSW4tYXBwIGlzIHRoZSBzb3VyY2Ugb2YgdHJ1dGg7IGVtYWlsIGlzIHRoZSBjb3VydGVzeSBjb3B5LiAqL1xuZXhwb3J0IHR5cGUgRWNvc3lzdGVtTm90aWZpY2F0aW9uQ2hhbm5lbCA9ICdpbl9hcHAnIHwgJ2VtYWlsJztcblxuLyoqIEEgcGVyLXVzZXIgRU1BSUwgb3B0LW91dCBrZXkuIEluLWFwcCBpcyBuZXZlciBvcHRpb25hbC4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbUVtYWlsUHJlZmVyZW5jZSA9XG4gIHwgJ2Vjb3N5c3RlbS5yZXZpZXdzLmVtYWlsJ1xuICB8ICdlY29zeXN0ZW0udXBncmFkZXMuZW1haWwnXG4gIHwgJ2Vjb3N5c3RlbS5pbnN0YWxscy5lbWFpbCdcbiAgfCAnZWNvc3lzdGVtLm1vZGVyYXRpb25EaWdlc3QuZW1haWwnO1xuXG4vKiogVGhlIGZpZWxkIGVhY2ggcHJlZmVyZW5jZSBrZXkgaXMgc3RvcmVkIHVuZGVyIGluIHRoZSB1c2VyJ3MgcGVyLW9yZ1xuICogIGBub3RpZmljYXRpb25zLmVjb3N5c3RlbWAgcHJlZmVyZW5jZXMgKHBsYXRmb3JtIGBVc2VyUHJlZmVyZW5jZXNgKS4gKi9cbmV4cG9ydCBjb25zdCBFQ09TWVNURU1fRU1BSUxfUFJFRkVSRU5DRV9GSUVMRFM6IFJlYWRvbmx5PFJlY29yZDxFY29zeXN0ZW1FbWFpbFByZWZlcmVuY2UsIEVjb3N5c3RlbUVtYWlsUHJlZmVyZW5jZUZpZWxkPj4gPSB7XG4gICdlY29zeXN0ZW0ucmV2aWV3cy5lbWFpbCc6ICdyZXZpZXdzRW1haWwnLFxuICAnZWNvc3lzdGVtLnVwZ3JhZGVzLmVtYWlsJzogJ3VwZ3JhZGVzRW1haWwnLFxuICAnZWNvc3lzdGVtLmluc3RhbGxzLmVtYWlsJzogJ2luc3RhbGxzRW1haWwnLFxuICAnZWNvc3lzdGVtLm1vZGVyYXRpb25EaWdlc3QuZW1haWwnOiAnbW9kZXJhdGlvbkRpZ2VzdEVtYWlsJyxcbn07XG5cbi8qKiBTdG9yZWQgZmllbGQgbmFtZXMgb2YgdGhlIGVjb3N5c3RlbSBlbWFpbCBwcmVmZXJlbmNlcyAoYWxsIGRlZmF1bHQgYHRydWVgKS4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbUVtYWlsUHJlZmVyZW5jZUZpZWxkID0gJ3Jldmlld3NFbWFpbCcgfCAndXBncmFkZXNFbWFpbCcgfCAnaW5zdGFsbHNFbWFpbCcgfCAnbW9kZXJhdGlvbkRpZ2VzdEVtYWlsJztcblxuLyoqIEV2ZXJ5IHN0b3JlZCBlY29zeXN0ZW0gZW1haWwtcHJlZmVyZW5jZSBmaWVsZC4gKi9cbmV4cG9ydCBjb25zdCBFQ09TWVNURU1fRU1BSUxfUFJFRkVSRU5DRV9GSUVMRF9OQU1FUzogcmVhZG9ubHkgRWNvc3lzdGVtRW1haWxQcmVmZXJlbmNlRmllbGRbXSA9XG4gIE9iamVjdC52YWx1ZXMoRUNPU1lTVEVNX0VNQUlMX1BSRUZFUkVOQ0VfRklFTERTKTtcblxuLyoqIEhvdyBvZnRlbiBhIGJhdGNoZWQgZW1haWwgaXMgZmx1c2hlZC4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbURpZ2VzdENhZGVuY2UgPSAnaG91cmx5JyB8ICdkYWlseScgfCAnd2Vla2x5JztcblxuLyoqIE9uZSBldmVudCdzIGRlbGl2ZXJ5IHJ1bGVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY29zeXN0ZW1FdmVudFNwZWMge1xuICAvKiogT25lLWxpbmUgZGVzY3JpcHRpb24gKGRvY3MsIGxvZ3MpLiAqL1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKiogQ2hhbm5lbHMgdGhlIGV2ZW50IGlzIGRlbGl2ZXJlZCBvbi4gKi9cbiAgY2hhbm5lbHM6IHJlYWRvbmx5IEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWxbXTtcbiAgLyoqXG4gICAqIEVtYWlsIG9wdC1vdXQga2V5LCBvciBgbnVsbGAgd2hlbiB0aGUgZW1haWwgaXMgVFJBTlNBQ1RJT05BTCAvIHNlY3VyaXR5XG4gICAqIChOMSwgTjPigJNONSwgTjfigJNOMTAsIE4xOOKAk04yMywgTjI1LCBOMjjigJNOMzMgY2FuJ3QgYmUgdHVybmVkIG9mZikuXG4gICAqL1xuICBwcmVmZXJlbmNlOiBFY29zeXN0ZW1FbWFpbFByZWZlcmVuY2UgfCBudWxsO1xuICAvKiogV2hlbiB0aGUgZW1haWwgaXMgYmF0Y2hlZCByYXRoZXIgdGhhbiBpbW1lZGlhdGUsIGl0cyBjYWRlbmNlLiAqL1xuICBkaWdlc3Q/OiBFY29zeXN0ZW1EaWdlc3RDYWRlbmNlO1xuICAvKiogQWxsb3dlZCB0byBhZGRyZXNzIGEgcmF3IGVtYWlsOiB0aGUgYW5vbnltb3VzIFNVQk1JVFRFUiAodGhlXG4gICAqICB0cmFuc2FjdGlvbmFsIHN1Ym1pc3Npb24gbm90aWNlcykgYW5kIGFuIG9yZydzIFZFUklGSUVEIGV4dGVybmFsXG4gICAqICBzZWN1cml0eSBhZGRyZXNzICh0aGUgcGx1Z2luIHNlY3VyaXR5IG5vdGljZXMgTjMw4oCTTjMzKS4gKi9cbiAgYWxsb3dzQWRkcmVzcz86IGJvb2xlYW47XG59XG5cbi8qKiBUaGUgbm90aWZpY2F0aW9uIGV2ZW50IHRhYmxlLCBhcyBkYXRhLiAqL1xuZXhwb3J0IGNvbnN0IEVDT1NZU1RFTV9OT1RJRklDQVRJT05fRVZFTlRTOiBSZWFkb25seTxSZWNvcmQ8RWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnRJZCwgRWNvc3lzdGVtRXZlbnRTcGVjPj4gPSB7XG4gIE4xOiB7IGRlc2NyaXB0aW9uOiAnQW5vbnltb3VzIHN1Ym1pc3Npb24gcmVjZWl2ZWQgKG1hZ2ljIGxpbmspJywgY2hhbm5lbHM6IFsnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxuICBOMjogeyBkZXNjcmlwdGlvbjogJ1N1Ym1pc3Npb24gdmVyaWZpZWQsIGVudGVyZWQgdGhlIG1vZGVyYXRpb24gcXVldWUnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS5tb2RlcmF0aW9uRGlnZXN0LmVtYWlsJywgZGlnZXN0OiAnZGFpbHknIH0sXG4gIE4zOiB7IGRlc2NyaXB0aW9uOiAnU3VibWlzc2lvbiBmYWlsZWQgYXV0b21hdGVkIGdhdGVzJywgY2hhbm5lbHM6IFsnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxuICBONDogeyBkZXNjcmlwdGlvbjogJ1N1Ym1pc3Npb24gYXBwcm92ZWQgb3IgcmVqZWN0ZWQnLCBjaGFubmVsczogWydlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsLCBhbGxvd3NBZGRyZXNzOiB0cnVlIH0sXG4gIE41OiB7IGRlc2NyaXB0aW9uOiAnU3VibWlzc2lvbiBjbGFpbWVkIGJ5IGFuIGFjY291bnQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBONjogeyBkZXNjcmlwdGlvbjogJ1ZlcmlmaWVkLXB1Ymxpc2hlciBhcHBsaWNhdGlvbiBzdWJtaXR0ZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS5tb2RlcmF0aW9uRGlnZXN0LmVtYWlsJywgZGlnZXN0OiAnZGFpbHknIH0sXG4gIE43OiB7IGRlc2NyaXB0aW9uOiAnVmVyaWZpZWQgYXBwbGljYXRpb24gYXBwcm92ZWQgb3IgcmVqZWN0ZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOODogeyBkZXNjcmlwdGlvbjogJ01vZGVyYXRpb24gYWN0aW9uIG9uIGEgbGlzdGluZyAoc3VzcGVuZCwgeWFuaywgdGFrZWRvd24pJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjk6IHsgZGVzY3JpcHRpb246ICdPd25lcnNoaXAgdHJhbnNmZXIgcmVxdWVzdGVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjEwOiB7IGRlc2NyaXB0aW9uOiAnT3duZXJzaGlwIHRyYW5zZmVyIGFjY2VwdGVkLCBkZWNsaW5lZCwgYXBwcm92ZWQgb3IgcmVqZWN0ZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOMTE6IHsgZGVzY3JpcHRpb246ICdJbnN0YWxsIHJlcXVlc3RlZCAocG9saWN5IHJlcXVpcmVzIGFwcHJvdmFsKScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLmluc3RhbGxzLmVtYWlsJyB9LFxuICBOMTI6IHsgZGVzY3JpcHRpb246ICdJbnN0YWxsIGFwcHJvdmVkIG9yIGRlbmllZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLmluc3RhbGxzLmVtYWlsJyB9LFxuICBOMTM6IHsgZGVzY3JpcHRpb246ICdOZXcgdmVyc2lvbiBhdmFpbGFibGUgd2l0aGluIGFuIGluc3RhbGxcXCdzIHBvbGljeScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLnVwZ3JhZGVzLmVtYWlsJywgZGlnZXN0OiAnd2Vla2x5JyB9LFxuICBOMTQ6IHsgZGVzY3JpcHRpb246ICdMaXN0aW5nIGRlcHJlY2F0ZWQgb3IgdW5tYWludGFpbmVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0udXBncmFkZXMuZW1haWwnIH0sXG4gIE4xNTogeyBkZXNjcmlwdGlvbjogJ05ldyBvciBlZGl0ZWQgcmV2aWV3IG9uIGEgbGlzdGluZycsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLnJldmlld3MuZW1haWwnLCBkaWdlc3Q6ICdob3VybHknIH0sXG4gIE4xNjogeyBkZXNjcmlwdGlvbjogJ1B1Ymxpc2hlciByZXBsaWVkIHRvIHlvdXIgcmV2aWV3JywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0ucmV2aWV3cy5lbWFpbCcgfSxcbiAgTjE3OiB7IGRlc2NyaXB0aW9uOiAnUmV2aWV3IGhlbGQgKHJlcG9ydHMsIGJ1cnN0LCBmaWx0ZXIpJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0ubW9kZXJhdGlvbkRpZ2VzdC5lbWFpbCcsIGRpZ2VzdDogJ2RhaWx5JyB9LFxuICBOMTg6IHsgZGVzY3JpcHRpb246ICdZb3VyIHJldmlldyB3YXMgcmVtb3ZlZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4xOTogeyBkZXNjcmlwdGlvbjogJ1JldmlldyBmbGFnZ2VkIGFzIGEgc2VjdXJpdHkgaXNzdWUnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOMjA6IHsgZGVzY3JpcHRpb246ICdBZHZpc29yeSBkcmFmdCBhdXRvLWNyZWF0ZWQgKENWRSByZXNjYW4pJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjIxOiB7IGRlc2NyaXB0aW9uOiAnQWR2aXNvcnkgcHVibGlzaGVkIG9yIHdpdGhkcmF3bicsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4yMjogeyBkZXNjcmlwdGlvbjogJ01vZGVyYXRpb24gU0xBIGJyZWFjaCcsIGNoYW5uZWxzOiBbJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjIzOiB7IGRlc2NyaXB0aW9uOiAnQWRkZWQgdG8gb3IgcmVtb3ZlZCBmcm9tIHRoZSBFY29zeXN0ZW0gTWFuYWdlciByb2xlJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjI0OiB7IGRlc2NyaXB0aW9uOiAnUHVibGlzaCByZXF1ZXN0IHN1Ym1pdHRlZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLm1vZGVyYXRpb25EaWdlc3QuZW1haWwnLCBkaWdlc3Q6ICdkYWlseScgfSxcbiAgTjI1OiB7IGRlc2NyaXB0aW9uOiAnUHVibGlzaCByZXF1ZXN0IGFwcHJvdmVkIG9yIHJlamVjdGVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjI2OiB7IGRlc2NyaXB0aW9uOiAnTGlzdGluZyBvciB2ZXJzaW9uIHBhdXNlZCBieSBpdHMgcHVibGlzaGVyJywgY2hhbm5lbHM6IFsnaW5fYXBwJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0udXBncmFkZXMuZW1haWwnIH0sXG4gIE4yNzogeyBkZXNjcmlwdGlvbjogJ0luc3RhbGxlZCBsaXN0aW5nIGF1dG8tdXBkYXRlZCB3aXRoaW4gaXRzIHJhbmdlJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0udXBncmFkZXMuZW1haWwnLCBkaWdlc3Q6ICd3ZWVrbHknIH0sXG4gIE4yODogeyBkZXNjcmlwdGlvbjogJ0EgcmVxdWVzdCBuZWVkcyBhIHNlY29uZCBhcHByb3ZhbCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4yOTogeyBkZXNjcmlwdGlvbjogJ1BsYW4gY2hhbmdlIGFmZmVjdHMgcHVibGlzaGluZycsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIC8vIFBlci1vcmcgcGx1Z2luIHNlY3VyaXR5IG5vdGljZXMgKGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQgXCJTY2FuIGdhdGVzXCIpLlxuICAvLyBSZWNpcGllbnRzIGZvbGxvdyB0aGUgb3JnJ3MgcGx1Z2luIHNlY3VyaXR5IG5vdGlmaWNhdGlvbiBzZXR0aW5nczsgdGhlIG9yZydzXG4gIC8vIHdlYmhvb2sgKGlmIGFueSkgaXMgc2VudCBieSB0aGUgcGx1Z2luIHNlcnZpY2UgaXRzZWxmLiBOMzEncyBlbWFpbCBob25vcnNcbiAgLy8gdGhlIG9yZydzIGRpZ2VzdCBzZXR0aW5nICh0aGUgc2VuZGVyIGJhdGNoZXMgaXQpLCBOMzAgaXMgYWx3YXlzIGltbWVkaWF0ZS5cbiAgTjMwOiB7IGRlc2NyaXB0aW9uOiAnUGx1Z2luIHZlcnNpb24gYmxvY2tlZCAodW5zY2FubmVkIG9yIGZpeGFibGUgQ3JpdGljYWwpJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwsIGFsbG93c0FkZHJlc3M6IHRydWUgfSxcbiAgTjMxOiB7IGRlc2NyaXB0aW9uOiAnUmVzY2FuIGZvdW5kIG5ldyBDcml0aWNhbC9IaWdoIGluIGEgcGx1Z2luIHZlcnNpb24nLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxuICAvLyBQaXBlbGluZS1vd25lciBub3RpY2VzOiBhIGxvb2t1cCAvIHJ1bnRpbWUgY2hlY2sgUkVGVVNFRCBhIHBpcGVsaW5lJ3MgcGx1Z2luXG4gIC8vIHZlcnNpb24gKGRlZHVwbGljYXRlZCBwZXIgcGlwZWxpbmUgKyB2ZXJzaW9uIHBlciBkYXkpLCBhbmQgYSB0aW1lLWJveGVkIHJpc2tcbiAgLy8gYWNjZXB0YW5jZSBvZiBhIHBpcGVsaW5lJ3MgZmluZGluZ3MgTEFQU0VEICh0aGUgZmluZGluZ3MgYXJlIGxpdmUgYWdhaW4pLlxuICAvLyBSb3V0ZWQgdG8gdGhlIG9yZydzIHBpcGVsaW5lIHdyaXRlcnMgdW5kZXIgdGhlIHNhbWUgc2VjdXJpdHkgc2V0dGluZ3MuXG4gIE4zMjogeyBkZXNjcmlwdGlvbjogJ1BpcGVsaW5lIGJsb2NrZWQgYnkgYSBwbHVnaW4gdnVsbmVyYWJpbGl0eSBwb2xpY3knLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxuICBOMzM6IHsgZGVzY3JpcHRpb246ICdQaXBlbGluZSB2dWxuZXJhYmlsaXR5IHJpc2sgYWNjZXB0YW5jZSBsYXBzZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxufTtcblxuLyoqIFdoZXRoZXIgYHZhbHVlYCBpcyBhIG5vdGlmaWNhdGlvbiBldmVudCBudW1iZXIuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFY29zeXN0ZW1Ob3RpZmljYXRpb25FdmVudCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEVjb3N5c3RlbU5vdGlmaWNhdGlvbkV2ZW50SWQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRUNPU1lTVEVNX05PVElGSUNBVElPTl9FVkVOVFMsIHZhbHVlKTtcbn1cblxuLyoqIE9yZy1sb2NhbCBwZXJtaXNzaW9ucyBhbiB7QGxpbmsgRWNvc3lzdGVtUmVjaXBpZW50U3BlY30gYG9yZ19wZXJtaXNzaW9uYCBydWxlIG1heSBuYW1lLiAqL1xuZXhwb3J0IHR5cGUgRWNvc3lzdGVtT3JnUmVjaXBpZW50UGVybWlzc2lvbiA9ICdwdWJsaXNoZXJzOm1hbmFnZScgfCAncGx1Z2luX2luc3RhbGxzOm1hbmFnZScgfCAncGx1Z2luczp3cml0ZScgfCAncGlwZWxpbmVzOndyaXRlJztcbi8qKiBTeXN0ZW0tb3JnIHBlcm1pc3Npb25zIGEgYG1vZGVyYXRvcnNgIHJ1bGUgbWF5IG5hbWUuICovXG5leHBvcnQgdHlwZSBFY29zeXN0ZW1Nb2RlcmF0b3JQZXJtaXNzaW9uID0gJ3BsdWdpbnM6bW9kZXJhdGUnIHwgJ3B1Ymxpc2hlcnM6dmVyaWZ5JztcblxuLyoqXG4gKiBBIHJlY2lwaWVudCBSVUxFLCByZXNvbHZlZCBieSBwbGF0Zm9ybSBhdCBzZW5kIHRpbWU6XG4gKlxuICogIC0gYHVzZXJgIOKAlCBvbmUgdXNlciAoUmVxdWVzdGVyLCBSZXZpZXcgYXV0aG9yLCB0aGUgYWZmZWN0ZWQgdXNlciBvZiBOMjMpLlxuICogICAgYG9yZ0lkYCBwaWNrcyB0aGUgaW5ib3g7IGRlZmF1bHRzIHRvIHRoZSB1c2VyJ3MgbGFzdCBhY3RpdmUgb3JnLlxuICogIC0gYG9yZ19wZXJtaXNzaW9uYCDigJQgYWN0aXZlIG1lbWJlcnMgb2YgYG9yZ0lkYCBob2xkaW5nIGBwZXJtaXNzaW9uYFxuICogICAgKFB1Ymxpc2hlciBtYW5hZ2VycyA9IGBwdWJsaXNoZXJzOm1hbmFnZWAsIE9yZyBhcHByb3ZlcnMgPVxuICogICAgYHBsdWdpbl9pbnN0YWxsczptYW5hZ2VgLCBwbHVnaW4gd3JpdGVycyA9IGBwbHVnaW5zOndyaXRlYCkuIFdpdGhcbiAqICAgIGBpbmhlcml0RnJvbVJvb3RgLCBhIHRlYW0gd2l0aCBubyBob2xkZXJzIGZhbGxzIGJhY2sgdG8gaXRzIHJvb3Qgb3JnJ3NcbiAqICAgIGhvbGRlcnM7IHdpdGggbm9uZSBhbnl3aGVyZSwgdGhlIG9yZydzIG93bmVycy5cbiAqICAtIGBvcmdfbWVtYmVyc2Ag4oCUIHRoZSBuYW1lZCB1c2VycywgYnV0IG9ubHkgdGhvc2Ugd2hvIGFyZSBBQ1RJVkUgbWVtYmVycyBvZlxuICogICAgYG9yZ0lkYCBhdCBzZW5kIHRpbWUgKGFuIG9yZydzIGNob3NlbiBzZWN1cml0eSByZWNpcGllbnRzOiBhIHN0YWxlIGlkLCBvclxuICogICAgc29tZW9uZSB3aG8gbGVmdCwgcmVjZWl2ZXMgbm90aGluZykuXG4gKiAgLSBgbW9kZXJhdG9yc2Ag4oCUIHRoZSBzeXN0ZW0gb3JnJ3MgaG9sZGVycyBvZiBgcGVybWlzc2lvbmAgKHRoZSBFY29zeXN0ZW1cbiAqICAgIE1hbmFnZXIgcm9sZSksIG1pbnVzIGFueW9uZSB3aXRoIGEgY29uZmxpY3Qgb2YgaW50ZXJlc3QgKG1lbWJlcnMgb2ZcbiAqICAgIGBleGNsdWRlTWVtYmVyc09mT3JnSWRgLCBvciB0aGUgbGlzdGVkIHVzZXJzKTsgc3VwZXJhZG1pbnMgd2hlbiBlbXB0eS5cbiAqICAtIGBzdXBlcmFkbWluc2Ag4oCUIGV2ZXJ5IHBsYXRmb3JtIHN1cGVyYWRtaW4uXG4gKiAgLSBgYWRkcmVzc2Ag4oCUIGEgcmF3IGFkZHJlc3M7IG9ubHkgdGhlIGFub255bW91cyBTVUJNSVRURVIgbm90aWNlcyAoTjEsIE4zLFxuICogICAgTjQpLCB3aG9zZSByZWNpcGllbnQgaGFzIG5vIGFjY291bnQsIGFuZCBhbiBvcmcncyBWRVJJRklFRCBleHRlcm5hbFxuICogICAgc2VjdXJpdHkgYWRkcmVzcyBvbiB0aGUgcGx1Z2luIHNlY3VyaXR5IG5vdGljZXMgKE4zMOKAk04zMykuXG4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbVJlY2lwaWVudFNwZWMgPVxuICB8IHsga2luZDogJ3VzZXInOyB1c2VySWQ6IHN0cmluZzsgb3JnSWQ/OiBzdHJpbmcgfVxuICB8IHsga2luZDogJ29yZ19wZXJtaXNzaW9uJzsgb3JnSWQ6IHN0cmluZzsgcGVybWlzc2lvbjogRWNvc3lzdGVtT3JnUmVjaXBpZW50UGVybWlzc2lvbjsgaW5oZXJpdEZyb21Sb290PzogYm9vbGVhbiB9XG4gIHwgeyBraW5kOiAnb3JnX21lbWJlcnMnOyBvcmdJZDogc3RyaW5nOyB1c2VySWRzOiBzdHJpbmdbXSB9XG4gIHwgeyBraW5kOiAnbW9kZXJhdG9ycyc7IHBlcm1pc3Npb246IEVjb3N5c3RlbU1vZGVyYXRvclBlcm1pc3Npb247IGV4Y2x1ZGVNZW1iZXJzT2ZPcmdJZD86IHN0cmluZzsgZXhjbHVkZVVzZXJJZHM/OiBzdHJpbmdbXSB9XG4gIHwgeyBraW5kOiAnc3VwZXJhZG1pbnMnIH1cbiAgfCB7IGtpbmQ6ICdhZGRyZXNzJzsgZW1haWw6IHN0cmluZyB9O1xuXG4vKiogVGhlIGJvZHkgb2YgYW4gZWNvc3lzdGVtIHNlbmQgdGhyb3VnaCBwbGF0Zm9ybSdzIG5vdGlmeSByZWxheS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWNvc3lzdGVtTm90aWZ5UmVxdWVzdCB7XG4gIGV2ZW50OiBFY29zeXN0ZW1Ob3RpZmljYXRpb25FdmVudElkO1xuICByZWNpcGllbnRzOiBFY29zeXN0ZW1SZWNpcGllbnRTcGVjW107XG4gIHN1YmplY3Q6IHN0cmluZztcbiAgLyoqIFBsYWluLXRleHQgYm9keSAoZW1haWwgYm9keSBhbmQgaW4tYXBwIGNvbnRlbnQpLiAqL1xuICB0ZXh0OiBzdHJpbmc7XG4gIC8qKiBTdWJzZXQgb2YgdGhlIGV2ZW50J3MgY2hhbm5lbHMgdG8gZGVsaXZlciBvbiAoZGVmYXVsdDogYWxsIG9mIHRoZW0pLiBUaGVcbiAgICogIGRpZ2VzdCBkaXNwYXRjaGVyIHNlbmRzIGBbJ2VtYWlsJ11gIGJlY2F1c2UgaW4tYXBwIHdlbnQgb3V0IGF0IGVucXVldWUuICovXG4gIGNoYW5uZWxzPzogRWNvc3lzdGVtTm90aWZpY2F0aW9uQ2hhbm5lbFtdO1xuICAvKiogRGVsaXZlciB0aGUgZW1haWwgZXZlbiB0byB1c2VycyB3aG8gb3B0ZWQgb3V0IOKAlCBmb3IgYW4gZXZlbnQgd2hvc2VcbiAgICogIG5vcm1hbGx5LW9wdGlvbmFsIGVtYWlsIGlzIG1hbmRhdG9yeSBpbiB0aGlzIGluc3RhbmNlIChOMjQgeWFuaywgYWR2aXNvcnlcbiAgICogIGFuZCBzZWN1cml0eS1maXggcmVxdWVzdHMpLiAqL1xuICBtYW5kYXRvcnk/OiBib29sZWFuO1xufVxuXG4vKiogSGFyZCBjYXBzLCBtYXRjaGluZyB0aGUgbWVzc2FnZSBzZXJ2aWNlJ3Mgb3duIGxpbWl0cy4gKi9cbmV4cG9ydCBjb25zdCBFQ09TWVNURU1fTk9USUZZX1NVQkpFQ1RfTUFYID0gNTAwO1xuZXhwb3J0IGNvbnN0IEVDT1NZU1RFTV9OT1RJRllfVEVYVF9NQVggPSAxMDAwMDtcbmNvbnN0IE1BWF9SRUNJUElFTlRfUlVMRVMgPSA1MDtcblxuY29uc3QgT1JHX1BFUk1JU1NJT05TOiByZWFkb25seSBzdHJpbmdbXSA9IFsncHVibGlzaGVyczptYW5hZ2UnLCAncGx1Z2luX2luc3RhbGxzOm1hbmFnZScsICdwbHVnaW5zOndyaXRlJywgJ3BpcGVsaW5lczp3cml0ZSddO1xuLyoqIEF0IG1vc3QgdGhpcyBtYW55IHVzZXJzIGluIG9uZSBgb3JnX21lbWJlcnNgIHJ1bGUuICovXG5leHBvcnQgY29uc3QgRUNPU1lTVEVNX09SR19NRU1CRVJTX01BWCA9IDEwMDtcbmNvbnN0IE1PREVSQVRPUl9QRVJNSVNTSU9OUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbJ3BsdWdpbnM6bW9kZXJhdGUnLCAncHVibGlzaGVyczp2ZXJpZnknXTtcbmNvbnN0IEVNQUlMX1NIQVBFID0gL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC87XG5cbmZ1bmN0aW9uIG5vbkVtcHR5U3RyaW5nKHY6IHVua25vd24sIG1heCA9IDI1NSk6IHYgaXMgc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2LnRyaW0oKS5sZW5ndGggPiAwICYmIHYubGVuZ3RoIDw9IG1heDtcbn1cblxuZnVuY3Rpb24gcGFyc2VSZWNpcGllbnQocmF3OiB1bmtub3duLCBzcGVjOiBFY29zeXN0ZW1FdmVudFNwZWMpOiBFY29zeXN0ZW1SZWNpcGllbnRTcGVjIHwgc3RyaW5nIHtcbiAgaWYgKCFyYXcgfHwgdHlwZW9mIHJhdyAhPT0gJ29iamVjdCcpIHJldHVybiAnZWFjaCByZWNpcGllbnQgbXVzdCBiZSBhbiBvYmplY3QnO1xuICBjb25zdCByID0gcmF3IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBzd2l0Y2ggKHIua2luZCkge1xuICAgIGNhc2UgJ3VzZXInOlxuICAgICAgaWYgKCFub25FbXB0eVN0cmluZyhyLnVzZXJJZCkpIHJldHVybiAndXNlciByZWNpcGllbnQgbmVlZHMgdXNlcklkJztcbiAgICAgIGlmIChyLm9yZ0lkICE9PSB1bmRlZmluZWQgJiYgIW5vbkVtcHR5U3RyaW5nKHIub3JnSWQpKSByZXR1cm4gJ3VzZXIgcmVjaXBpZW50IG9yZ0lkIG11c3QgYmUgYSBzdHJpbmcnO1xuICAgICAgcmV0dXJuIHsga2luZDogJ3VzZXInLCB1c2VySWQ6IHIudXNlcklkLCAuLi4oci5vcmdJZCA/IHsgb3JnSWQ6IHIub3JnSWQgYXMgc3RyaW5nIH0gOiB7fSkgfTtcbiAgICBjYXNlICdvcmdfcGVybWlzc2lvbic6XG4gICAgICBpZiAoIW5vbkVtcHR5U3RyaW5nKHIub3JnSWQpKSByZXR1cm4gJ29yZ19wZXJtaXNzaW9uIHJlY2lwaWVudCBuZWVkcyBvcmdJZCc7XG4gICAgICBpZiAodHlwZW9mIHIucGVybWlzc2lvbiAhPT0gJ3N0cmluZycgfHwgIU9SR19QRVJNSVNTSU9OUy5pbmNsdWRlcyhyLnBlcm1pc3Npb24pKSByZXR1cm4gJ29yZ19wZXJtaXNzaW9uIHJlY2lwaWVudCBuYW1lcyBhbiB1bnN1cHBvcnRlZCBwZXJtaXNzaW9uJztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6ICdvcmdfcGVybWlzc2lvbicsXG4gICAgICAgIG9yZ0lkOiByLm9yZ0lkLFxuICAgICAgICBwZXJtaXNzaW9uOiByLnBlcm1pc3Npb24gYXMgRWNvc3lzdGVtT3JnUmVjaXBpZW50UGVybWlzc2lvbixcbiAgICAgICAgLi4uKHIuaW5oZXJpdEZyb21Sb290ID09PSB0cnVlID8geyBpbmhlcml0RnJvbVJvb3Q6IHRydWUgfSA6IHt9KSxcbiAgICAgIH07XG4gICAgY2FzZSAnb3JnX21lbWJlcnMnOiB7XG4gICAgICBpZiAoIW5vbkVtcHR5U3RyaW5nKHIub3JnSWQpKSByZXR1cm4gJ29yZ19tZW1iZXJzIHJlY2lwaWVudCBuZWVkcyBvcmdJZCc7XG4gICAgICBjb25zdCB1c2VycyA9IHIudXNlcklkcztcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh1c2VycykgfHwgdXNlcnMubGVuZ3RoID09PSAwIHx8ICF1c2Vycy5ldmVyeSgodSkgPT4gbm9uRW1wdHlTdHJpbmcodSkpKSByZXR1cm4gJ29yZ19tZW1iZXJzIHJlY2lwaWVudCBuZWVkcyBhIG5vbi1lbXB0eSB1c2VySWRzIGFycmF5JztcbiAgICAgIGlmICh1c2Vycy5sZW5ndGggPiBFQ09TWVNURU1fT1JHX01FTUJFUlNfTUFYKSByZXR1cm4gYG9yZ19tZW1iZXJzIHJlY2lwaWVudCBuYW1lcyBhdCBtb3N0ICR7RUNPU1lTVEVNX09SR19NRU1CRVJTX01BWH0gdXNlcnNgO1xuICAgICAgcmV0dXJuIHsga2luZDogJ29yZ19tZW1iZXJzJywgb3JnSWQ6IHIub3JnSWQsIHVzZXJJZHM6IFsuLi5uZXcgU2V0KHVzZXJzIGFzIHN0cmluZ1tdKV0gfTtcbiAgICB9XG4gICAgY2FzZSAnbW9kZXJhdG9ycyc6IHtcbiAgICAgIGlmICh0eXBlb2Ygci5wZXJtaXNzaW9uICE9PSAnc3RyaW5nJyB8fCAhTU9ERVJBVE9SX1BFUk1JU1NJT05TLmluY2x1ZGVzKHIucGVybWlzc2lvbikpIHJldHVybiAnbW9kZXJhdG9ycyByZWNpcGllbnQgbmFtZXMgYW4gdW5zdXBwb3J0ZWQgcGVybWlzc2lvbic7XG4gICAgICBpZiAoci5leGNsdWRlTWVtYmVyc09mT3JnSWQgIT09IHVuZGVmaW5lZCAmJiAhbm9uRW1wdHlTdHJpbmcoci5leGNsdWRlTWVtYmVyc09mT3JnSWQpKSByZXR1cm4gJ2V4Y2x1ZGVNZW1iZXJzT2ZPcmdJZCBtdXN0IGJlIGEgc3RyaW5nJztcbiAgICAgIGNvbnN0IGV4Y2x1ZGUgPSByLmV4Y2x1ZGVVc2VySWRzO1xuICAgICAgaWYgKGV4Y2x1ZGUgIT09IHVuZGVmaW5lZCAmJiAoIUFycmF5LmlzQXJyYXkoZXhjbHVkZSkgfHwgIWV4Y2x1ZGUuZXZlcnkoKHUpID0+IG5vbkVtcHR5U3RyaW5nKHUpKSkpIHJldHVybiAnZXhjbHVkZVVzZXJJZHMgbXVzdCBiZSBhbiBhcnJheSBvZiBpZHMnO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2luZDogJ21vZGVyYXRvcnMnLFxuICAgICAgICBwZXJtaXNzaW9uOiByLnBlcm1pc3Npb24gYXMgRWNvc3lzdGVtTW9kZXJhdG9yUGVybWlzc2lvbixcbiAgICAgICAgLi4uKHIuZXhjbHVkZU1lbWJlcnNPZk9yZ0lkID8geyBleGNsdWRlTWVtYmVyc09mT3JnSWQ6IHIuZXhjbHVkZU1lbWJlcnNPZk9yZ0lkIGFzIHN0cmluZyB9IDoge30pLFxuICAgICAgICAuLi4oZXhjbHVkZSA/IHsgZXhjbHVkZVVzZXJJZHM6IGV4Y2x1ZGUgYXMgc3RyaW5nW10gfSA6IHt9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ3N1cGVyYWRtaW5zJzpcbiAgICAgIHJldHVybiB7IGtpbmQ6ICdzdXBlcmFkbWlucycgfTtcbiAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGlmICghc3BlYy5hbGxvd3NBZGRyZXNzKSByZXR1cm4gJ2FkZHJlc3MgcmVjaXBpZW50cyBhcmUgb25seSBhbGxvd2VkIGZvciBhbm9ueW1vdXMtc3VibWlzc2lvbiBhbmQgcGx1Z2luIHNlY3VyaXR5IG5vdGljZXMnO1xuICAgICAgaWYgKCFub25FbXB0eVN0cmluZyhyLmVtYWlsLCAzMjApIHx8ICFFTUFJTF9TSEFQRS50ZXN0KHIuZW1haWwpKSByZXR1cm4gJ2FkZHJlc3MgcmVjaXBpZW50IG5lZWRzIGEgdmFsaWQgZW1haWwnO1xuICAgICAgcmV0dXJuIHsga2luZDogJ2FkZHJlc3MnLCBlbWFpbDogci5lbWFpbC50cmltKCkudG9Mb3dlckNhc2UoKSB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ3Vua25vd24gcmVjaXBpZW50IGtpbmQnO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW4ge0BsaW5rIEVjb3N5c3RlbU5vdGlmeVJlcXVlc3R9LiBSZXR1cm5zIHRoZSBub3JtYWxpemVkIHJlcXVlc3QsXG4gKiBvciBhbiBlcnJvciBzdHJpbmcgKHRoZSByZWxheSdzIDQwMCkuIFB1cmUsIHNvIGJvdGggdGhlIHNlbmRlciAoZmFpbCBhdFxuICogZW5xdWV1ZSwgbm90IGF0IDA5OjAwIHRvbW9ycm93KSBhbmQgdGhlIHJlbGF5IHVzZSB0aGUgc2FtZSBydWxlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRWNvc3lzdGVtTm90aWZ5UmVxdWVzdChib2R5OiB1bmtub3duKTogRWNvc3lzdGVtTm90aWZ5UmVxdWVzdCB8IHN0cmluZyB7XG4gIGlmICghYm9keSB8fCB0eXBlb2YgYm9keSAhPT0gJ29iamVjdCcpIHJldHVybiAnYm9keSBtdXN0IGJlIGFuIG9iamVjdCc7XG4gIGNvbnN0IGIgPSBib2R5IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAoIWlzRWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnQoYi5ldmVudCkpIHJldHVybiAnZXZlbnQgbXVzdCBiZSBvbmUgb2YgTjEuLk4zMyc7XG4gIGNvbnN0IHNwZWMgPSBFQ09TWVNURU1fTk9USUZJQ0FUSU9OX0VWRU5UU1tiLmV2ZW50XTtcbiAgaWYgKCFub25FbXB0eVN0cmluZyhiLnN1YmplY3QsIEVDT1NZU1RFTV9OT1RJRllfU1VCSkVDVF9NQVgpKSByZXR1cm4gYHN1YmplY3QgaXMgcmVxdWlyZWQgKG1heCAke0VDT1NZU1RFTV9OT1RJRllfU1VCSkVDVF9NQVh9KWA7XG4gIGlmICghbm9uRW1wdHlTdHJpbmcoYi50ZXh0LCBFQ09TWVNURU1fTk9USUZZX1RFWFRfTUFYKSkgcmV0dXJuIGB0ZXh0IGlzIHJlcXVpcmVkIChtYXggJHtFQ09TWVNURU1fTk9USUZZX1RFWFRfTUFYfSlgO1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYi5yZWNpcGllbnRzKSB8fCBiLnJlY2lwaWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gJ3JlY2lwaWVudHMgbXVzdCBiZSBhIG5vbi1lbXB0eSBhcnJheSc7XG4gIGlmIChiLnJlY2lwaWVudHMubGVuZ3RoID4gTUFYX1JFQ0lQSUVOVF9SVUxFUykgcmV0dXJuIGBhdCBtb3N0ICR7TUFYX1JFQ0lQSUVOVF9SVUxFU30gcmVjaXBpZW50IHJ1bGVzYDtcbiAgY29uc3QgcmVjaXBpZW50czogRWNvc3lzdGVtUmVjaXBpZW50U3BlY1tdID0gW107XG4gIGZvciAoY29uc3QgcmF3IG9mIGIucmVjaXBpZW50cykge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlUmVjaXBpZW50KHJhdywgc3BlYyk7XG4gICAgaWYgKHR5cGVvZiBwYXJzZWQgPT09ICdzdHJpbmcnKSByZXR1cm4gcGFyc2VkO1xuICAgIHJlY2lwaWVudHMucHVzaChwYXJzZWQpO1xuICB9XG4gIGxldCBjaGFubmVsczogRWNvc3lzdGVtTm90aWZpY2F0aW9uQ2hhbm5lbFtdIHwgdW5kZWZpbmVkO1xuICBpZiAoYi5jaGFubmVscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGIuY2hhbm5lbHMpIHx8IGIuY2hhbm5lbHMubGVuZ3RoID09PSAwKSByZXR1cm4gJ2NoYW5uZWxzIG11c3QgYmUgYSBub24tZW1wdHkgYXJyYXknO1xuICAgIGNvbnN0IGJhZCA9IGIuY2hhbm5lbHMuZmlsdGVyKChjKSA9PiAhc3BlYy5jaGFubmVscy5pbmNsdWRlcyhjIGFzIEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWwpKTtcbiAgICBpZiAoYmFkLmxlbmd0aCA+IDApIHJldHVybiBgZXZlbnQgJHtiLmV2ZW50fSBpcyBub3QgZGVsaXZlcmVkIG9uOiAke2JhZC5qb2luKCcsICcpfWA7XG4gICAgY2hhbm5lbHMgPSBbLi4ubmV3IFNldChiLmNoYW5uZWxzIGFzIEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWxbXSldO1xuICB9XG4gIGlmIChiLm1hbmRhdG9yeSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBiLm1hbmRhdG9yeSAhPT0gJ2Jvb2xlYW4nKSByZXR1cm4gJ21hbmRhdG9yeSBtdXN0IGJlIGEgYm9vbGVhbic7XG4gIHJldHVybiB7XG4gICAgZXZlbnQ6IGIuZXZlbnQsXG4gICAgcmVjaXBpZW50cyxcbiAgICBzdWJqZWN0OiBiLnN1YmplY3QudHJpbSgpLFxuICAgIHRleHQ6IGIudGV4dC50cmltKCksXG4gICAgLi4uKGNoYW5uZWxzID8geyBjaGFubmVscyB9IDoge30pLFxuICAgIC4uLihiLm1hbmRhdG9yeSA9PT0gdHJ1ZSA/IHsgbWFuZGF0b3J5OiB0cnVlIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKiBUaGUgVVRDIGhvdXIgZGlnZXN0cyBmbHVzaCBhdCAoXCJkYWlseSBkaWdlc3QgZW1haWwgKDA5OjAwIFVUQylcIikuICovXG5leHBvcnQgY29uc3QgRUNPU1lTVEVNX0RJR0VTVF9IT1VSX1VUQyA9IDk7XG5cbi8qKlxuICogVGhlIG5leHQgZmx1c2ggdGltZSBmb3IgYSBkaWdlc3QgY2FkZW5jZSwgc3RyaWN0bHkgYWZ0ZXIgYG5vd2A6XG4gKiBgaG91cmx5YCDihpIgdGhlIG5leHQgdG9wIG9mIHRoZSBob3VyOyBgZGFpbHlgIOKGkiB0aGUgbmV4dCAwOTowMCBVVEM7XG4gKiBgd2Vla2x5YCDihpIgdGhlIG5leHQgTW9uZGF5IDA5OjAwIFVUQy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHRFY29zeXN0ZW1EaWdlc3RUaW1lKGNhZGVuY2U6IEVjb3N5c3RlbURpZ2VzdENhZGVuY2UsIG5vdzogRGF0ZSA9IG5ldyBEYXRlKCkpOiBEYXRlIHtcbiAgY29uc3QgdCA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkpO1xuICBpZiAoY2FkZW5jZSA9PT0gJ2hvdXJseScpIHtcbiAgICB0LnNldFVUQ01pbnV0ZXMoMCwgMCwgMCk7XG4gICAgdC5zZXRVVENIb3Vycyh0LmdldFVUQ0hvdXJzKCkgKyAxKTtcbiAgICByZXR1cm4gdDtcbiAgfVxuICB0LnNldFVUQ0hvdXJzKEVDT1NZU1RFTV9ESUdFU1RfSE9VUl9VVEMsIDAsIDAsIDApO1xuICBpZiAodC5nZXRUaW1lKCkgPD0gbm93LmdldFRpbWUoKSkgdC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpICsgMSk7XG4gIGlmIChjYWRlbmNlID09PSAnd2Vla2x5Jykge1xuICAgIC8vIGdldFVUQ0RheTogMCA9IFN1bmRheSDigKYgMSA9IE1vbmRheS5cbiAgICB3aGlsZSAodC5nZXRVVENEYXkoKSAhPT0gMSkgdC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpICsgMSk7XG4gIH1cbiAgcmV0dXJuIHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGVtcGxhdGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEEgcmVuZGVyZWQgbm90aWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY29zeXN0ZW1Ob3RpZmljYXRpb25Db250ZW50IHtcbiAgc3ViamVjdDogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTjIzIOKAlCBzb21lb25lIHdhcyBhZGRlZCB0byBvciByZW1vdmVkIGZyb20gdGhlIHN5c3RlbSBvcmcncyBFY29zeXN0ZW1cbiAqIE1hbmFnZXIgcm9sZS4gU2VudCB0byBldmVyeSBzdXBlcmFkbWluIGFuZCB0byB0aGUgYWZmZWN0ZWQgdXNlcjtcbiAqIHRyYW5zYWN0aW9uYWwgKG5vIG9wdC1vdXQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRWNvc3lzdGVtTWFuYWdlckNoYW5nZShpbnB1dDoge1xuICAvKiogVGhlIGFmZmVjdGVkIHVzZXIncyBkaXNwbGF5IG5hbWUgb3IgZW1haWwuICovXG4gIHVzZXI6IHN0cmluZztcbiAgYWRkZWQ6IGJvb2xlYW47XG4gIC8qKiBXaG8gbWFkZSB0aGUgY2hhbmdlIChzdXBlcmFkbWlucyBvbmx5IGNhbiksIHdoZW4ga25vd24uICovXG4gIGFjdG9yPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIFJvbGUgYWN0dWFsbHkgZ3JhbnRlZC4gVGhpcyBub3RpY2UgZmlyZXMgZm9yIEFOWSBSb2xlIGNhcnJ5aW5nIGFcbiAgICogc3lzdGVtLW9yZy1vbmx5IHBlcm1pc3Npb24g4oCUIGBlY29zeXN0ZW1Sb2xlTmFtZWAgcmV0dXJucyB3aGljaGV2ZXIgb25lIGl0XG4gICAqIGlzIOKAlCBzbyBoYXJkLWNvZGluZyBcIkVjb3N5c3RlbSBNYW5hZ2VyXCIgYW5ub3VuY2VkIHN0YWZmaW5nICoqQ29uc29sZVxuICAgKiBBZG1pbmlzdHJhdG9yKiogKGEgcmVhZC93cml0ZSBzaGVsbCBvdmVyIGV2ZXJ5IHRlbmFudCdzIHJvd3MpIG9yICoqU3VwcG9ydFxuICAgKiBMZWFkKiogKGBpbXBlcnNvbmF0aW9uOm9wZW5gKSBhcyBhIHBsdWdpbi1tb2RlcmF0aW9uIGdyYW50LiBUaGUgYXVkaXQgcm93XG4gICAqIGhhZCB0aGUgbmFtZSBhbGwgYWxvbmc7IHRoZSBtZXNzYWdlIG9wZXJhdG9ycyBhY3R1YWxseSByZWFkIGRpZCBub3QuXG4gICAqL1xuICByb2xlPzogc3RyaW5nO1xufSk6IEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNvbnRlbnQge1xuICBjb25zdCB2ZXJiID0gaW5wdXQuYWRkZWQgPyAnYWRkZWQgdG8nIDogJ3JlbW92ZWQgZnJvbSc7XG4gIGNvbnN0IGJ5ID0gaW5wdXQuYWN0b3IgPyBgIGJ5ICR7aW5wdXQuYWN0b3J9YCA6ICcnO1xuICBjb25zdCByb2xlID0gaW5wdXQucm9sZSA/PyAnRWNvc3lzdGVtIE1hbmFnZXInO1xuICAvLyBUaGUgYm9keSBkZXNjcmliZXMgd2hhdCB0aGUgUk9MRSBkb2VzLCBzbyBpdCBjYW4gb25seSBzcGVhayBmb3IgdGhlIG9uZSBpdFxuICAvLyB3YXMgd3JpdHRlbiBhYm91dC4gRm9yIGFueSBvdGhlciwgc2F5IHdoYXQgaGFwcGVuZWQgYW5kIGxlYXZlIHRoZVxuICAvLyBjYXBhYmlsaXRpZXMgdG8gdGhlIFJvbGUgaXRzZWxmIHJhdGhlciB0aGFuIGRlc2NyaWJpbmcgdGhlIHdyb25nIG9uZXMuXG4gIGNvbnN0IGVjb3N5c3RlbSA9IHJvbGUgPT09ICdFY29zeXN0ZW0gTWFuYWdlcic7XG4gIHJldHVybiB7XG4gICAgc3ViamVjdDogYCR7aW5wdXQudXNlcn0gd2FzICR7dmVyYn0gdGhlICR7cm9sZX0gcm9sZWAsXG4gICAgdGV4dDogaW5wdXQuYWRkZWRcbiAgICAgID8gYCR7aW5wdXQudXNlcn0gd2FzICR7dmVyYn0gdGhlICR7cm9sZX0gcm9sZSR7Ynl9LmBcbiAgICAgICAgKyAoZWNvc3lzdGVtXG4gICAgICAgICAgPyAnIEVjb3N5c3RlbSBNYW5hZ2VycyBkZWNpZGUgcHVibGlzaCByZXF1ZXN0cywgbW9kZXJhdGUgc3VibWlzc2lvbnMgYW5kIHJldmlld3MsIHZlcmlmeSBwdWJsaXNoZXJzJ1xuICAgICAgICAgICAgKyAnIGFuZCBwdWJsaXNoIGFkdmlzb3JpZXMgZm9yIHRoZSB3aG9sZSBwbHVnaW4gZWNvc3lzdGVtLidcbiAgICAgICAgICA6ICcgSXQgY2FycmllcyBzeXN0ZW0tb3JnLW9ubHkgcGVybWlzc2lvbnMuJylcbiAgICAgICAgKyAnIFRoZSByb2xlIHdvcmtzIG9ubHkgZnJvbSB0aGUgc3lzdGVtIG9yZ2FuaXphdGlvbiBhbmQgcmVxdWlyZXMgYSB0d28tZmFjdG9yIHNpZ24taW4uJ1xuICAgICAgOiBgJHtpbnB1dC51c2VyfSB3YXMgJHt2ZXJifSB0aGUgJHtyb2xlfSByb2xlJHtieX1gXG4gICAgICAgICsgKGVjb3N5c3RlbSA/ICcgYW5kIGNhbiBubyBsb25nZXIgbWFuYWdlIG9yIGFwcHJvdmUgYW55dGhpbmcgaW4gdGhlIHBsdWdpbiBlY29zeXN0ZW0uJyA6ICcuJyksXG4gIH07XG59XG5cbi8qKlxuICogQ29hbGVzY2Ugc2V2ZXJhbCBxdWV1ZWQgbm90aWNlcyBpbnRvIG9uZSBkaWdlc3QgZW1haWw6IGEgY291bnQtYmVhcmluZ1xuICogc3ViamVjdCBhbmQgb25lIGxpbmUgcGVyIGl0ZW0gKGVhY2ggaXRlbSdzIHN1YmplY3QpLCBvbGRlc3QgZmlyc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJFY29zeXN0ZW1EaWdlc3QoXG4gIGV2ZW50OiBFY29zeXN0ZW1Ob3RpZmljYXRpb25FdmVudElkLFxuICBpdGVtczogcmVhZG9ubHkgRWNvc3lzdGVtTm90aWZpY2F0aW9uQ29udGVudFtdLFxuKTogRWNvc3lzdGVtTm90aWZpY2F0aW9uQ29udGVudCB7XG4gIGlmIChpdGVtcy5sZW5ndGggPT09IDEpIHJldHVybiBpdGVtc1swXSE7XG4gIGNvbnN0IHNwZWMgPSBFQ09TWVNURU1fTk9USUZJQ0FUSU9OX0VWRU5UU1tldmVudF07XG4gIGNvbnN0IGNhZGVuY2UgPSBzcGVjLmRpZ2VzdCA9PT0gJ2hvdXJseScgPyAnSG91cmx5JyA6IHNwZWMuZGlnZXN0ID09PSAnd2Vla2x5JyA/ICdXZWVrbHknIDogJ0RhaWx5JztcbiAgcmV0dXJuIHtcbiAgICBzdWJqZWN0OiBgJHtjYWRlbmNlfSBkaWdlc3Q6ICR7aXRlbXMubGVuZ3RofSDDlyAke3NwZWMuZGVzY3JpcHRpb259YC5zbGljZSgwLCBFQ09TWVNURU1fTk9USUZZX1NVQkpFQ1RfTUFYKSxcbiAgICB0ZXh0OiBpdGVtcy5tYXAoKGkpID0+IGDigKIgJHtpLnN1YmplY3R9YCkuam9pbignXFxuJykuc2xpY2UoMCwgRUNPU1lTVEVNX05PVElGWV9URVhUX01BWCksXG4gIH07XG59XG4iXX0=
250
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLW5vdGlmaWNhdGlvbnMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9lY29zeXN0ZW0tbm90aWZpY2F0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBZ0N0QzswRUFDMEU7QUFDMUUsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQThFO0lBQzFILHlCQUF5QixFQUFFLGNBQWM7SUFDekMsMEJBQTBCLEVBQUUsZUFBZTtJQUMzQywwQkFBMEIsRUFBRSxlQUFlO0lBQzNDLGtDQUFrQyxFQUFFLHVCQUF1QjtDQUM1RCxDQUFDO0FBS0YscURBQXFEO0FBQ3JELE1BQU0sQ0FBQyxNQUFNLHNDQUFzQyxHQUNqRCxNQUFNLENBQUMsTUFBTSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7QUF3Qm5ELDZDQUE2QztBQUM3QyxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBdUU7SUFDL0csRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLDRDQUE0QyxFQUFFLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRTtJQUM3SCxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsbURBQW1ELEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFO0lBQ3hLLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxtQ0FBbUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUU7SUFDcEgsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLGlDQUFpQyxFQUFFLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLElBQUksRUFB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QUFDLENBQUMsRUFBRSx5QkFBeUIsQ0FBQztLQUN4RixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG4vKipcbiAqIFRoZSBwbHVnaW4tZWNvc3lzdGVtIG5vdGlmaWNhdGlvbiBjb250cmFjdCAoZG9jcy9wbHVnaW4tcHVibGlzaGluZy5tZCksXG4gKiBzaGFyZWQgYnkgdGhlIHNlbmRlciAodGhlIHBsdWdpbiBzZXJ2aWNlJ3MgZW5xdWV1ZSBBUEkgYW5kIGRpZ2VzdFxuICogZGlzcGF0Y2hlcikgYW5kIHRoZSByZWxheSAocGxhdGZvcm0gYFBPU1QgL2ludGVybmFsL25vdGlmeS1lbWFpbGApLlxuICpcbiAqIFJlY2lwaWVudHMgdHJhdmVsIGFzIFJVTEVTLCBuZXZlciBhcyBsaXN0czogcGxhdGZvcm0gcmVzb2x2ZXMgZWFjaFxuICoge0BsaW5rIEVjb3N5c3RlbVJlY2lwaWVudFNwZWN9IGFnYWluc3QgaXRzIHVzZXIvUm9sZSBkaXJlY3RvcnkgQVQgU0VORCBUSU1FLFxuICogc28gYSBkaWdlc3QgdGhhdCBmbHVzaGVzIHRvbW9ycm93IHJlYWNoZXMgdG9tb3Jyb3cncyBtb2RlcmF0b3JzLCB0aGUgcGx1Z2luXG4gKiBzZXJ2aWNlIG5ldmVyIGhhbmRsZXMgYW4gZW1haWwgYWRkcmVzcyBvciBhIG1lbWJlcnNoaXAgbGlzdCwgYW5kIGEgcHVibGlzaGVyXG4gKiBjYW4gbmV2ZXIgbGVhcm4gd2hvIGluc3RhbGxlZCB0aGVpciBwbHVnaW4gKHRoZSByZWxheSBtYWlscyBlYWNoIHJlY2lwaWVudFxuICogaW5kaXZpZHVhbGx5IOKAlCBubyBzaGFyZWQgVG86IGxpbmUpLlxuICovXG5cbi8qKiBBIG5vdGlmaWNhdGlvbiBldmVudCBudW1iZXIuICovXG5leHBvcnQgdHlwZSBFY29zeXN0ZW1Ob3RpZmljYXRpb25FdmVudElkID1cbiAgfCAnTjEnIHwgJ04yJyB8ICdOMycgfCAnTjQnIHwgJ041JyB8ICdONicgfCAnTjcnIHwgJ044JyB8ICdOOScgfCAnTjEwJ1xuICB8ICdOMTEnIHwgJ04xMicgfCAnTjEzJyB8ICdOMTQnIHwgJ04xNScgfCAnTjE2JyB8ICdOMTcnIHwgJ04xOCcgfCAnTjE5JyB8ICdOMjAnXG4gIHwgJ04yMScgfCAnTjIyJyB8ICdOMjMnIHwgJ04yNCcgfCAnTjI1JyB8ICdOMjYnIHwgJ04yNycgfCAnTjI4JyB8ICdOMjknXG4gIHwgJ04zMCcgfCAnTjMxJyB8ICdOMzInIHwgJ04zMycgfCAnTjM0JztcblxuLyoqIEEgZGVsaXZlcnkgY2hhbm5lbC4gSW4tYXBwIGlzIHRoZSBzb3VyY2Ugb2YgdHJ1dGg7IGVtYWlsIGlzIHRoZSBjb3VydGVzeSBjb3B5LiAqL1xuZXhwb3J0IHR5cGUgRWNvc3lzdGVtTm90aWZpY2F0aW9uQ2hhbm5lbCA9ICdpbl9hcHAnIHwgJ2VtYWlsJztcblxuLyoqIEEgcGVyLXVzZXIgRU1BSUwgb3B0LW91dCBrZXkuIEluLWFwcCBpcyBuZXZlciBvcHRpb25hbC4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbUVtYWlsUHJlZmVyZW5jZSA9XG4gIHwgJ2Vjb3N5c3RlbS5yZXZpZXdzLmVtYWlsJ1xuICB8ICdlY29zeXN0ZW0udXBncmFkZXMuZW1haWwnXG4gIHwgJ2Vjb3N5c3RlbS5pbnN0YWxscy5lbWFpbCdcbiAgfCAnZWNvc3lzdGVtLm1vZGVyYXRpb25EaWdlc3QuZW1haWwnO1xuXG4vKiogVGhlIGZpZWxkIGVhY2ggcHJlZmVyZW5jZSBrZXkgaXMgc3RvcmVkIHVuZGVyIGluIHRoZSB1c2VyJ3MgcGVyLW9yZ1xuICogIGBub3RpZmljYXRpb25zLmVjb3N5c3RlbWAgcHJlZmVyZW5jZXMgKHBsYXRmb3JtIGBVc2VyUHJlZmVyZW5jZXNgKS4gKi9cbmV4cG9ydCBjb25zdCBFQ09TWVNURU1fRU1BSUxfUFJFRkVSRU5DRV9GSUVMRFM6IFJlYWRvbmx5PFJlY29yZDxFY29zeXN0ZW1FbWFpbFByZWZlcmVuY2UsIEVjb3N5c3RlbUVtYWlsUHJlZmVyZW5jZUZpZWxkPj4gPSB7XG4gICdlY29zeXN0ZW0ucmV2aWV3cy5lbWFpbCc6ICdyZXZpZXdzRW1haWwnLFxuICAnZWNvc3lzdGVtLnVwZ3JhZGVzLmVtYWlsJzogJ3VwZ3JhZGVzRW1haWwnLFxuICAnZWNvc3lzdGVtLmluc3RhbGxzLmVtYWlsJzogJ2luc3RhbGxzRW1haWwnLFxuICAnZWNvc3lzdGVtLm1vZGVyYXRpb25EaWdlc3QuZW1haWwnOiAnbW9kZXJhdGlvbkRpZ2VzdEVtYWlsJyxcbn07XG5cbi8qKiBTdG9yZWQgZmllbGQgbmFtZXMgb2YgdGhlIGVjb3N5c3RlbSBlbWFpbCBwcmVmZXJlbmNlcyAoYWxsIGRlZmF1bHQgYHRydWVgKS4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbUVtYWlsUHJlZmVyZW5jZUZpZWxkID0gJ3Jldmlld3NFbWFpbCcgfCAndXBncmFkZXNFbWFpbCcgfCAnaW5zdGFsbHNFbWFpbCcgfCAnbW9kZXJhdGlvbkRpZ2VzdEVtYWlsJztcblxuLyoqIEV2ZXJ5IHN0b3JlZCBlY29zeXN0ZW0gZW1haWwtcHJlZmVyZW5jZSBmaWVsZC4gKi9cbmV4cG9ydCBjb25zdCBFQ09TWVNURU1fRU1BSUxfUFJFRkVSRU5DRV9GSUVMRF9OQU1FUzogcmVhZG9ubHkgRWNvc3lzdGVtRW1haWxQcmVmZXJlbmNlRmllbGRbXSA9XG4gIE9iamVjdC52YWx1ZXMoRUNPU1lTVEVNX0VNQUlMX1BSRUZFUkVOQ0VfRklFTERTKTtcblxuLyoqIEhvdyBvZnRlbiBhIGJhdGNoZWQgZW1haWwgaXMgZmx1c2hlZC4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbURpZ2VzdENhZGVuY2UgPSAnaG91cmx5JyB8ICdkYWlseScgfCAnd2Vla2x5JztcblxuLyoqIE9uZSBldmVudCdzIGRlbGl2ZXJ5IHJ1bGVzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY29zeXN0ZW1FdmVudFNwZWMge1xuICAvKiogT25lLWxpbmUgZGVzY3JpcHRpb24gKGRvY3MsIGxvZ3MpLiAqL1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKiogQ2hhbm5lbHMgdGhlIGV2ZW50IGlzIGRlbGl2ZXJlZCBvbi4gKi9cbiAgY2hhbm5lbHM6IHJlYWRvbmx5IEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWxbXTtcbiAgLyoqXG4gICAqIEVtYWlsIG9wdC1vdXQga2V5LCBvciBgbnVsbGAgd2hlbiB0aGUgZW1haWwgaXMgVFJBTlNBQ1RJT05BTCAvIHNlY3VyaXR5XG4gICAqIChOMSwgTjPigJNONSwgTjfigJNOMTAsIE4xOOKAk04yMywgTjI1LCBOMjjigJNOMzQgY2FuJ3QgYmUgdHVybmVkIG9mZikuXG4gICAqL1xuICBwcmVmZXJlbmNlOiBFY29zeXN0ZW1FbWFpbFByZWZlcmVuY2UgfCBudWxsO1xuICAvKiogV2hlbiB0aGUgZW1haWwgaXMgYmF0Y2hlZCByYXRoZXIgdGhhbiBpbW1lZGlhdGUsIGl0cyBjYWRlbmNlLiAqL1xuICBkaWdlc3Q/OiBFY29zeXN0ZW1EaWdlc3RDYWRlbmNlO1xuICAvKiogQWxsb3dlZCB0byBhZGRyZXNzIGEgcmF3IGVtYWlsOiB0aGUgYW5vbnltb3VzIFNVQk1JVFRFUiAodGhlXG4gICAqICB0cmFuc2FjdGlvbmFsIHN1Ym1pc3Npb24gbm90aWNlcykgYW5kIGFuIG9yZydzIFZFUklGSUVEIGV4dGVybmFsXG4gICAqICBzZWN1cml0eSBhZGRyZXNzICh0aGUgcGx1Z2luIHNlY3VyaXR5IG5vdGljZXMgTjMw4oCTTjMzKS4gKi9cbiAgYWxsb3dzQWRkcmVzcz86IGJvb2xlYW47XG59XG5cbi8qKiBUaGUgbm90aWZpY2F0aW9uIGV2ZW50IHRhYmxlLCBhcyBkYXRhLiAqL1xuZXhwb3J0IGNvbnN0IEVDT1NZU1RFTV9OT1RJRklDQVRJT05fRVZFTlRTOiBSZWFkb25seTxSZWNvcmQ8RWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnRJZCwgRWNvc3lzdGVtRXZlbnRTcGVjPj4gPSB7XG4gIE4xOiB7IGRlc2NyaXB0aW9uOiAnQW5vbnltb3VzIHN1Ym1pc3Npb24gcmVjZWl2ZWQgKG1hZ2ljIGxpbmspJywgY2hhbm5lbHM6IFsnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxuICBOMjogeyBkZXNjcmlwdGlvbjogJ1N1Ym1pc3Npb24gdmVyaWZpZWQsIGVudGVyZWQgdGhlIG1vZGVyYXRpb24gcXVldWUnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS5tb2RlcmF0aW9uRGlnZXN0LmVtYWlsJywgZGlnZXN0OiAnZGFpbHknIH0sXG4gIE4zOiB7IGRlc2NyaXB0aW9uOiAnU3VibWlzc2lvbiBmYWlsZWQgYXV0b21hdGVkIGdhdGVzJywgY2hhbm5lbHM6IFsnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxuICBONDogeyBkZXNjcmlwdGlvbjogJ1N1Ym1pc3Npb24gYXBwcm92ZWQgb3IgcmVqZWN0ZWQnLCBjaGFubmVsczogWydlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsLCBhbGxvd3NBZGRyZXNzOiB0cnVlIH0sXG4gIE41OiB7IGRlc2NyaXB0aW9uOiAnU3VibWlzc2lvbiBjbGFpbWVkIGJ5IGFuIGFjY291bnQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBONjogeyBkZXNjcmlwdGlvbjogJ1ZlcmlmaWVkLXB1Ymxpc2hlciBhcHBsaWNhdGlvbiBzdWJtaXR0ZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogJ2Vjb3N5c3RlbS5tb2RlcmF0aW9uRGlnZXN0LmVtYWlsJywgZGlnZXN0OiAnZGFpbHknIH0sXG4gIE43OiB7IGRlc2NyaXB0aW9uOiAnVmVyaWZpZWQgYXBwbGljYXRpb24gYXBwcm92ZWQgb3IgcmVqZWN0ZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOODogeyBkZXNjcmlwdGlvbjogJ01vZGVyYXRpb24gYWN0aW9uIG9uIGEgbGlzdGluZyAoc3VzcGVuZCwgeWFuaywgdGFrZWRvd24pJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjk6IHsgZGVzY3JpcHRpb246ICdPd25lcnNoaXAgdHJhbnNmZXIgcmVxdWVzdGVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjEwOiB7IGRlc2NyaXB0aW9uOiAnT3duZXJzaGlwIHRyYW5zZmVyIGFjY2VwdGVkLCBkZWNsaW5lZCwgYXBwcm92ZWQgb3IgcmVqZWN0ZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOMTE6IHsgZGVzY3JpcHRpb246ICdJbnN0YWxsIHJlcXVlc3RlZCAocG9saWN5IHJlcXVpcmVzIGFwcHJvdmFsKScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLmluc3RhbGxzLmVtYWlsJyB9LFxuICBOMTI6IHsgZGVzY3JpcHRpb246ICdJbnN0YWxsIGFwcHJvdmVkIG9yIGRlbmllZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLmluc3RhbGxzLmVtYWlsJyB9LFxuICBOMTM6IHsgZGVzY3JpcHRpb246ICdOZXcgdmVyc2lvbiBhdmFpbGFibGUgd2l0aGluIGFuIGluc3RhbGxcXCdzIHBvbGljeScsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLnVwZ3JhZGVzLmVtYWlsJywgZGlnZXN0OiAnd2Vla2x5JyB9LFxuICBOMTQ6IHsgZGVzY3JpcHRpb246ICdMaXN0aW5nIGRlcHJlY2F0ZWQgb3IgdW5tYWludGFpbmVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0udXBncmFkZXMuZW1haWwnIH0sXG4gIE4xNTogeyBkZXNjcmlwdGlvbjogJ05ldyBvciBlZGl0ZWQgcmV2aWV3IG9uIGEgbGlzdGluZycsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLnJldmlld3MuZW1haWwnLCBkaWdlc3Q6ICdob3VybHknIH0sXG4gIE4xNjogeyBkZXNjcmlwdGlvbjogJ1B1Ymxpc2hlciByZXBsaWVkIHRvIHlvdXIgcmV2aWV3JywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0ucmV2aWV3cy5lbWFpbCcgfSxcbiAgTjE3OiB7IGRlc2NyaXB0aW9uOiAnUmV2aWV3IGhlbGQgKHJlcG9ydHMsIGJ1cnN0LCBmaWx0ZXIpJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0ubW9kZXJhdGlvbkRpZ2VzdC5lbWFpbCcsIGRpZ2VzdDogJ2RhaWx5JyB9LFxuICBOMTg6IHsgZGVzY3JpcHRpb246ICdZb3VyIHJldmlldyB3YXMgcmVtb3ZlZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4xOTogeyBkZXNjcmlwdGlvbjogJ1JldmlldyBmbGFnZ2VkIGFzIGEgc2VjdXJpdHkgaXNzdWUnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCB9LFxuICBOMjA6IHsgZGVzY3JpcHRpb246ICdBZHZpc29yeSBkcmFmdCBhdXRvLWNyZWF0ZWQgKENWRSByZXNjYW4pJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjIxOiB7IGRlc2NyaXB0aW9uOiAnQWR2aXNvcnkgcHVibGlzaGVkIG9yIHdpdGhkcmF3bicsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4yMjogeyBkZXNjcmlwdGlvbjogJ01vZGVyYXRpb24gU0xBIGJyZWFjaCcsIGNoYW5uZWxzOiBbJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjIzOiB7IGRlc2NyaXB0aW9uOiAnQWRkZWQgdG8gb3IgcmVtb3ZlZCBmcm9tIHRoZSBFY29zeXN0ZW0gTWFuYWdlciByb2xlJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjI0OiB7IGRlc2NyaXB0aW9uOiAnUHVibGlzaCByZXF1ZXN0IHN1Ym1pdHRlZCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiAnZWNvc3lzdGVtLm1vZGVyYXRpb25EaWdlc3QuZW1haWwnLCBkaWdlc3Q6ICdkYWlseScgfSxcbiAgTjI1OiB7IGRlc2NyaXB0aW9uOiAnUHVibGlzaCByZXF1ZXN0IGFwcHJvdmVkIG9yIHJlamVjdGVkJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbiAgTjI2OiB7IGRlc2NyaXB0aW9uOiAnTGlzdGluZyBvciB2ZXJzaW9uIHBhdXNlZCBieSBpdHMgcHVibGlzaGVyJywgY2hhbm5lbHM6IFsnaW5fYXBwJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0udXBncmFkZXMuZW1haWwnIH0sXG4gIE4yNzogeyBkZXNjcmlwdGlvbjogJ0luc3RhbGxlZCBsaXN0aW5nIGF1dG8tdXBkYXRlZCB3aXRoaW4gaXRzIHJhbmdlJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6ICdlY29zeXN0ZW0udXBncmFkZXMuZW1haWwnLCBkaWdlc3Q6ICd3ZWVrbHknIH0sXG4gIE4yODogeyBkZXNjcmlwdGlvbjogJ0EgcmVxdWVzdCBuZWVkcyBhIHNlY29uZCBhcHByb3ZhbCcsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIE4yOTogeyBkZXNjcmlwdGlvbjogJ1BsYW4gY2hhbmdlIGFmZmVjdHMgcHVibGlzaGluZycsIGNoYW5uZWxzOiBbJ2luX2FwcCcsICdlbWFpbCddLCBwcmVmZXJlbmNlOiBudWxsIH0sXG4gIC8vIFBlci1vcmcgcGx1Z2luIHNlY3VyaXR5IG5vdGljZXMgKGRvY3MvcGx1Z2luLXB1Ymxpc2hpbmcubWQgXCJTY2FuIGdhdGVzXCIpLlxuICAvLyBSZWNpcGllbnRzIGZvbGxvdyB0aGUgb3JnJ3MgcGx1Z2luIHNlY3VyaXR5IG5vdGlmaWNhdGlvbiBzZXR0aW5nczsgdGhlIG9yZydzXG4gIC8vIHdlYmhvb2sgKGlmIGFueSkgaXMgc2VudCBieSB0aGUgcGx1Z2luIHNlcnZpY2UgaXRzZWxmLiBOMzEncyBlbWFpbCBob25vcnNcbiAgLy8gdGhlIG9yZydzIGRpZ2VzdCBzZXR0aW5nICh0aGUgc2VuZGVyIGJhdGNoZXMgaXQpLCBOMzAgaXMgYWx3YXlzIGltbWVkaWF0ZS5cbiAgTjMwOiB7IGRlc2NyaXB0aW9uOiAnUGx1Z2luIHZlcnNpb24gYmxvY2tlZCAodW5zY2FubmVkIG9yIGZpeGFibGUgQ3JpdGljYWwpJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwsIGFsbG93c0FkZHJlc3M6IHRydWUgfSxcbiAgTjMxOiB7IGRlc2NyaXB0aW9uOiAnUmVzY2FuIGZvdW5kIG5ldyBDcml0aWNhbC9IaWdoIGluIGEgcGx1Z2luIHZlcnNpb24nLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxuICAvLyBQaXBlbGluZS1vd25lciBub3RpY2VzOiBhIGxvb2t1cCAvIHJ1bnRpbWUgY2hlY2sgUkVGVVNFRCBhIHBpcGVsaW5lJ3MgcGx1Z2luXG4gIC8vIHZlcnNpb24gKGRlZHVwbGljYXRlZCBwZXIgcGlwZWxpbmUgKyB2ZXJzaW9uIHBlciBkYXkpLCBhbmQgYSB0aW1lLWJveGVkIHJpc2tcbiAgLy8gYWNjZXB0YW5jZSBvZiBhIHBpcGVsaW5lJ3MgZmluZGluZ3MgTEFQU0VEICh0aGUgZmluZGluZ3MgYXJlIGxpdmUgYWdhaW4pLlxuICAvLyBSb3V0ZWQgdG8gdGhlIG9yZydzIHBpcGVsaW5lIHdyaXRlcnMgdW5kZXIgdGhlIHNhbWUgc2VjdXJpdHkgc2V0dGluZ3MuXG4gIE4zMjogeyBkZXNjcmlwdGlvbjogJ1BpcGVsaW5lIGJsb2NrZWQgYnkgYSBwbHVnaW4gdnVsbmVyYWJpbGl0eSBwb2xpY3knLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxuICBOMzM6IHsgZGVzY3JpcHRpb246ICdQaXBlbGluZSB2dWxuZXJhYmlsaXR5IHJpc2sgYWNjZXB0YW5jZSBsYXBzZWQnLCBjaGFubmVsczogWydpbl9hcHAnLCAnZW1haWwnXSwgcHJlZmVyZW5jZTogbnVsbCwgYWxsb3dzQWRkcmVzczogdHJ1ZSB9LFxuICAvLyBNYW5hZ2VkIHRvb2xjaGFpbiBoeWdpZW5lIChkb2NzL3BsYW5zL2Jvb3RzdHJhcC1pbWFnZS12ZXJzaW9uaW5nLm1kIMKnMTApOiBhblxuICAvLyBvcmcncyB0b29sY2hhaW4gZGVmYXVsdCAodG8gaXRzIGB0b29sY2hhaW46bWFuYWdlYCBob2xkZXJzKSBvciBhIHBpcGVsaW5lJ3NcbiAgLy8gcGlubmVkIHJlbGVhc2UgKHRvIHRoZSBvcmcncyBwaXBlbGluZSB3cml0ZXJzKSB3YXMgeWFua2VkIG9yIGRlcHJlY2F0ZWQsXG4gIC8vIHBpY2tlZCB1cCBhIEtFViBvciBmaXhhYmxlIENyaXRpY2FsIGZpbmRpbmcsIG9yIGZlbGwgbW9yZSB0aGFuIHRocmVlXG4gIC8vIHJlbGVhc2VzIGJlaGluZCB0aGUgcGxhdGZvcm0gZGVmYXVsdC4gVHJhbnNhY3Rpb25hbDogaXQgc2F5cyB0aGUgb3JnJ3NcbiAgLy8gcGlwZWxpbmVzIGFyZSBidWlsZGluZyBvbiBzb21ldGhpbmcgaXQgc2hvdWxkIG1vdmUgb2ZmLlxuICBOMzQ6IHsgZGVzY3JpcHRpb246ICdNYW5hZ2VkIHRvb2xjaGFpbjogYSByZWxlYXNlIHlvdSB1c2Ugd2FzIHlhbmtlZCwgZGVwcmVjYXRlZCwgZm91bmQgdnVsbmVyYWJsZSBvciBmZWxsIGJlaGluZDsgdGhlIHBsYXRmb3JtIGRlZmF1bHQgbW92ZWQ7IHlvdXIgb3JnIGpvaW5lZCBhIGNhbmFyeTsgb3IgYSBwaXBlbGluZSBuZWVkcyBhIHJlLWRlcGxveSB0byByZWNvdmVyJywgY2hhbm5lbHM6IFsnaW5fYXBwJywgJ2VtYWlsJ10sIHByZWZlcmVuY2U6IG51bGwgfSxcbn07XG5cbi8qKiBXaGV0aGVyIGB2YWx1ZWAgaXMgYSBub3RpZmljYXRpb24gZXZlbnQgbnVtYmVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBFY29zeXN0ZW1Ob3RpZmljYXRpb25FdmVudElkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEVDT1NZU1RFTV9OT1RJRklDQVRJT05fRVZFTlRTLCB2YWx1ZSk7XG59XG5cbi8qKiBPcmctbG9jYWwgcGVybWlzc2lvbnMgYW4ge0BsaW5rIEVjb3N5c3RlbVJlY2lwaWVudFNwZWN9IGBvcmdfcGVybWlzc2lvbmAgcnVsZSBtYXkgbmFtZS4gKi9cbmV4cG9ydCB0eXBlIEVjb3N5c3RlbU9yZ1JlY2lwaWVudFBlcm1pc3Npb24gPSAncHVibGlzaGVyczptYW5hZ2UnIHwgJ3BsdWdpbl9pbnN0YWxsczptYW5hZ2UnIHwgJ3BsdWdpbnM6d3JpdGUnIHwgJ3BpcGVsaW5lczp3cml0ZScgfCAndG9vbGNoYWluOm1hbmFnZSc7XG4vKiogU3lzdGVtLW9yZyBwZXJtaXNzaW9ucyBhIGBtb2RlcmF0b3JzYCBydWxlIG1heSBuYW1lLiAqL1xuZXhwb3J0IHR5cGUgRWNvc3lzdGVtTW9kZXJhdG9yUGVybWlzc2lvbiA9ICdwbHVnaW5zOm1vZGVyYXRlJyB8ICdwdWJsaXNoZXJzOnZlcmlmeSc7XG5cbi8qKlxuICogQSByZWNpcGllbnQgUlVMRSwgcmVzb2x2ZWQgYnkgcGxhdGZvcm0gYXQgc2VuZCB0aW1lOlxuICpcbiAqICAtIGB1c2VyYCDigJQgb25lIHVzZXIgKFJlcXVlc3RlciwgUmV2aWV3IGF1dGhvciwgdGhlIGFmZmVjdGVkIHVzZXIgb2YgTjIzKS5cbiAqICAgIGBvcmdJZGAgcGlja3MgdGhlIGluYm94OyBkZWZhdWx0cyB0byB0aGUgdXNlcidzIGxhc3QgYWN0aXZlIG9yZy5cbiAqICAtIGBvcmdfcGVybWlzc2lvbmAg4oCUIGFjdGl2ZSBtZW1iZXJzIG9mIGBvcmdJZGAgaG9sZGluZyBgcGVybWlzc2lvbmBcbiAqICAgIChQdWJsaXNoZXIgbWFuYWdlcnMgPSBgcHVibGlzaGVyczptYW5hZ2VgLCBPcmcgYXBwcm92ZXJzID1cbiAqICAgIGBwbHVnaW5faW5zdGFsbHM6bWFuYWdlYCwgcGx1Z2luIHdyaXRlcnMgPSBgcGx1Z2luczp3cml0ZWAsIHRvb2xjaGFpblxuICogICAgbWFuYWdlcnMgPSBgdG9vbGNoYWluOm1hbmFnZWApLiBXaXRoXG4gKiAgICBgaW5oZXJpdEZyb21Sb290YCwgYSB0ZWFtIHdpdGggbm8gaG9sZGVycyBmYWxscyBiYWNrIHRvIGl0cyByb290IG9yZydzXG4gKiAgICBob2xkZXJzOyB3aXRoIG5vbmUgYW55d2hlcmUsIHRoZSBvcmcncyBvd25lcnMuXG4gKiAgLSBgb3JnX21lbWJlcnNgIOKAlCB0aGUgbmFtZWQgdXNlcnMsIGJ1dCBvbmx5IHRob3NlIHdobyBhcmUgQUNUSVZFIG1lbWJlcnMgb2ZcbiAqICAgIGBvcmdJZGAgYXQgc2VuZCB0aW1lIChhbiBvcmcncyBjaG9zZW4gc2VjdXJpdHkgcmVjaXBpZW50czogYSBzdGFsZSBpZCwgb3JcbiAqICAgIHNvbWVvbmUgd2hvIGxlZnQsIHJlY2VpdmVzIG5vdGhpbmcpLlxuICogIC0gYG1vZGVyYXRvcnNgIOKAlCB0aGUgc3lzdGVtIG9yZydzIGhvbGRlcnMgb2YgYHBlcm1pc3Npb25gICh0aGUgRWNvc3lzdGVtXG4gKiAgICBNYW5hZ2VyIHJvbGUpLCBtaW51cyBhbnlvbmUgd2l0aCBhIGNvbmZsaWN0IG9mIGludGVyZXN0IChtZW1iZXJzIG9mXG4gKiAgICBgZXhjbHVkZU1lbWJlcnNPZk9yZ0lkYCwgb3IgdGhlIGxpc3RlZCB1c2Vycyk7IHN1cGVyYWRtaW5zIHdoZW4gZW1wdHkuXG4gKiAgLSBgc3VwZXJhZG1pbnNgIOKAlCBldmVyeSBwbGF0Zm9ybSBzdXBlcmFkbWluLlxuICogIC0gYGFkZHJlc3NgIOKAlCBhIHJhdyBhZGRyZXNzOyBvbmx5IHRoZSBhbm9ueW1vdXMgU1VCTUlUVEVSIG5vdGljZXMgKE4xLCBOMyxcbiAqICAgIE40KSwgd2hvc2UgcmVjaXBpZW50IGhhcyBubyBhY2NvdW50LCBhbmQgYW4gb3JnJ3MgVkVSSUZJRUQgZXh0ZXJuYWxcbiAqICAgIHNlY3VyaXR5IGFkZHJlc3Mgb24gdGhlIHBsdWdpbiBzZWN1cml0eSBub3RpY2VzIChOMzDigJNOMzMpLlxuICovXG5leHBvcnQgdHlwZSBFY29zeXN0ZW1SZWNpcGllbnRTcGVjID1cbiAgfCB7IGtpbmQ6ICd1c2VyJzsgdXNlcklkOiBzdHJpbmc7IG9yZ0lkPzogc3RyaW5nIH1cbiAgfCB7IGtpbmQ6ICdvcmdfcGVybWlzc2lvbic7IG9yZ0lkOiBzdHJpbmc7IHBlcm1pc3Npb246IEVjb3N5c3RlbU9yZ1JlY2lwaWVudFBlcm1pc3Npb247IGluaGVyaXRGcm9tUm9vdD86IGJvb2xlYW4gfVxuICB8IHsga2luZDogJ29yZ19tZW1iZXJzJzsgb3JnSWQ6IHN0cmluZzsgdXNlcklkczogc3RyaW5nW10gfVxuICB8IHsga2luZDogJ21vZGVyYXRvcnMnOyBwZXJtaXNzaW9uOiBFY29zeXN0ZW1Nb2RlcmF0b3JQZXJtaXNzaW9uOyBleGNsdWRlTWVtYmVyc09mT3JnSWQ/OiBzdHJpbmc7IGV4Y2x1ZGVVc2VySWRzPzogc3RyaW5nW10gfVxuICB8IHsga2luZDogJ3N1cGVyYWRtaW5zJyB9XG4gIHwgeyBraW5kOiAnYWRkcmVzcyc7IGVtYWlsOiBzdHJpbmcgfTtcblxuLyoqIFRoZSBib2R5IG9mIGFuIGVjb3N5c3RlbSBzZW5kIHRocm91Z2ggcGxhdGZvcm0ncyBub3RpZnkgcmVsYXkuICovXG5leHBvcnQgaW50ZXJmYWNlIEVjb3N5c3RlbU5vdGlmeVJlcXVlc3Qge1xuICBldmVudDogRWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnRJZDtcbiAgcmVjaXBpZW50czogRWNvc3lzdGVtUmVjaXBpZW50U3BlY1tdO1xuICBzdWJqZWN0OiBzdHJpbmc7XG4gIC8qKiBQbGFpbi10ZXh0IGJvZHkgKGVtYWlsIGJvZHkgYW5kIGluLWFwcCBjb250ZW50KS4gKi9cbiAgdGV4dDogc3RyaW5nO1xuICAvKiogU3Vic2V0IG9mIHRoZSBldmVudCdzIGNoYW5uZWxzIHRvIGRlbGl2ZXIgb24gKGRlZmF1bHQ6IGFsbCBvZiB0aGVtKS4gVGhlXG4gICAqICBkaWdlc3QgZGlzcGF0Y2hlciBzZW5kcyBgWydlbWFpbCddYCBiZWNhdXNlIGluLWFwcCB3ZW50IG91dCBhdCBlbnF1ZXVlLiAqL1xuICBjaGFubmVscz86IEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWxbXTtcbiAgLyoqIERlbGl2ZXIgdGhlIGVtYWlsIGV2ZW4gdG8gdXNlcnMgd2hvIG9wdGVkIG91dCDigJQgZm9yIGFuIGV2ZW50IHdob3NlXG4gICAqICBub3JtYWxseS1vcHRpb25hbCBlbWFpbCBpcyBtYW5kYXRvcnkgaW4gdGhpcyBpbnN0YW5jZSAoTjI0IHlhbmssIGFkdmlzb3J5XG4gICAqICBhbmQgc2VjdXJpdHktZml4IHJlcXVlc3RzKS4gKi9cbiAgbWFuZGF0b3J5PzogYm9vbGVhbjtcbn1cblxuLyoqIEhhcmQgY2FwcywgbWF0Y2hpbmcgdGhlIG1lc3NhZ2Ugc2VydmljZSdzIG93biBsaW1pdHMuICovXG5leHBvcnQgY29uc3QgRUNPU1lTVEVNX05PVElGWV9TVUJKRUNUX01BWCA9IDUwMDtcbmV4cG9ydCBjb25zdCBFQ09TWVNURU1fTk9USUZZX1RFWFRfTUFYID0gMTAwMDA7XG5jb25zdCBNQVhfUkVDSVBJRU5UX1JVTEVTID0gNTA7XG5cbmNvbnN0IE9SR19QRVJNSVNTSU9OUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbJ3B1Ymxpc2hlcnM6bWFuYWdlJywgJ3BsdWdpbl9pbnN0YWxsczptYW5hZ2UnLCAncGx1Z2luczp3cml0ZScsICdwaXBlbGluZXM6d3JpdGUnLCAndG9vbGNoYWluOm1hbmFnZSddO1xuLyoqIEF0IG1vc3QgdGhpcyBtYW55IHVzZXJzIGluIG9uZSBgb3JnX21lbWJlcnNgIHJ1bGUuICovXG5leHBvcnQgY29uc3QgRUNPU1lTVEVNX09SR19NRU1CRVJTX01BWCA9IDEwMDtcbmNvbnN0IE1PREVSQVRPUl9QRVJNSVNTSU9OUzogcmVhZG9ubHkgc3RyaW5nW10gPSBbJ3BsdWdpbnM6bW9kZXJhdGUnLCAncHVibGlzaGVyczp2ZXJpZnknXTtcbmNvbnN0IEVNQUlMX1NIQVBFID0gL15bXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rJC87XG5cbmZ1bmN0aW9uIG5vbkVtcHR5U3RyaW5nKHY6IHVua25vd24sIG1heCA9IDI1NSk6IHYgaXMgc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSAnc3RyaW5nJyAmJiB2LnRyaW0oKS5sZW5ndGggPiAwICYmIHYubGVuZ3RoIDw9IG1heDtcbn1cblxuZnVuY3Rpb24gcGFyc2VSZWNpcGllbnQocmF3OiB1bmtub3duLCBzcGVjOiBFY29zeXN0ZW1FdmVudFNwZWMpOiBFY29zeXN0ZW1SZWNpcGllbnRTcGVjIHwgc3RyaW5nIHtcbiAgaWYgKCFyYXcgfHwgdHlwZW9mIHJhdyAhPT0gJ29iamVjdCcpIHJldHVybiAnZWFjaCByZWNpcGllbnQgbXVzdCBiZSBhbiBvYmplY3QnO1xuICBjb25zdCByID0gcmF3IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBzd2l0Y2ggKHIua2luZCkge1xuICAgIGNhc2UgJ3VzZXInOlxuICAgICAgaWYgKCFub25FbXB0eVN0cmluZyhyLnVzZXJJZCkpIHJldHVybiAndXNlciByZWNpcGllbnQgbmVlZHMgdXNlcklkJztcbiAgICAgIGlmIChyLm9yZ0lkICE9PSB1bmRlZmluZWQgJiYgIW5vbkVtcHR5U3RyaW5nKHIub3JnSWQpKSByZXR1cm4gJ3VzZXIgcmVjaXBpZW50IG9yZ0lkIG11c3QgYmUgYSBzdHJpbmcnO1xuICAgICAgcmV0dXJuIHsga2luZDogJ3VzZXInLCB1c2VySWQ6IHIudXNlcklkLCAuLi4oci5vcmdJZCA/IHsgb3JnSWQ6IHIub3JnSWQgYXMgc3RyaW5nIH0gOiB7fSkgfTtcbiAgICBjYXNlICdvcmdfcGVybWlzc2lvbic6XG4gICAgICBpZiAoIW5vbkVtcHR5U3RyaW5nKHIub3JnSWQpKSByZXR1cm4gJ29yZ19wZXJtaXNzaW9uIHJlY2lwaWVudCBuZWVkcyBvcmdJZCc7XG4gICAgICBpZiAodHlwZW9mIHIucGVybWlzc2lvbiAhPT0gJ3N0cmluZycgfHwgIU9SR19QRVJNSVNTSU9OUy5pbmNsdWRlcyhyLnBlcm1pc3Npb24pKSByZXR1cm4gJ29yZ19wZXJtaXNzaW9uIHJlY2lwaWVudCBuYW1lcyBhbiB1bnN1cHBvcnRlZCBwZXJtaXNzaW9uJztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6ICdvcmdfcGVybWlzc2lvbicsXG4gICAgICAgIG9yZ0lkOiByLm9yZ0lkLFxuICAgICAgICBwZXJtaXNzaW9uOiByLnBlcm1pc3Npb24gYXMgRWNvc3lzdGVtT3JnUmVjaXBpZW50UGVybWlzc2lvbixcbiAgICAgICAgLi4uKHIuaW5oZXJpdEZyb21Sb290ID09PSB0cnVlID8geyBpbmhlcml0RnJvbVJvb3Q6IHRydWUgfSA6IHt9KSxcbiAgICAgIH07XG4gICAgY2FzZSAnb3JnX21lbWJlcnMnOiB7XG4gICAgICBpZiAoIW5vbkVtcHR5U3RyaW5nKHIub3JnSWQpKSByZXR1cm4gJ29yZ19tZW1iZXJzIHJlY2lwaWVudCBuZWVkcyBvcmdJZCc7XG4gICAgICBjb25zdCB1c2VycyA9IHIudXNlcklkcztcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh1c2VycykgfHwgdXNlcnMubGVuZ3RoID09PSAwIHx8ICF1c2Vycy5ldmVyeSgodSkgPT4gbm9uRW1wdHlTdHJpbmcodSkpKSByZXR1cm4gJ29yZ19tZW1iZXJzIHJlY2lwaWVudCBuZWVkcyBhIG5vbi1lbXB0eSB1c2VySWRzIGFycmF5JztcbiAgICAgIGlmICh1c2Vycy5sZW5ndGggPiBFQ09TWVNURU1fT1JHX01FTUJFUlNfTUFYKSByZXR1cm4gYG9yZ19tZW1iZXJzIHJlY2lwaWVudCBuYW1lcyBhdCBtb3N0ICR7RUNPU1lTVEVNX09SR19NRU1CRVJTX01BWH0gdXNlcnNgO1xuICAgICAgcmV0dXJuIHsga2luZDogJ29yZ19tZW1iZXJzJywgb3JnSWQ6IHIub3JnSWQsIHVzZXJJZHM6IFsuLi5uZXcgU2V0KHVzZXJzIGFzIHN0cmluZ1tdKV0gfTtcbiAgICB9XG4gICAgY2FzZSAnbW9kZXJhdG9ycyc6IHtcbiAgICAgIGlmICh0eXBlb2Ygci5wZXJtaXNzaW9uICE9PSAnc3RyaW5nJyB8fCAhTU9ERVJBVE9SX1BFUk1JU1NJT05TLmluY2x1ZGVzKHIucGVybWlzc2lvbikpIHJldHVybiAnbW9kZXJhdG9ycyByZWNpcGllbnQgbmFtZXMgYW4gdW5zdXBwb3J0ZWQgcGVybWlzc2lvbic7XG4gICAgICBpZiAoci5leGNsdWRlTWVtYmVyc09mT3JnSWQgIT09IHVuZGVmaW5lZCAmJiAhbm9uRW1wdHlTdHJpbmcoci5leGNsdWRlTWVtYmVyc09mT3JnSWQpKSByZXR1cm4gJ2V4Y2x1ZGVNZW1iZXJzT2ZPcmdJZCBtdXN0IGJlIGEgc3RyaW5nJztcbiAgICAgIGNvbnN0IGV4Y2x1ZGUgPSByLmV4Y2x1ZGVVc2VySWRzO1xuICAgICAgaWYgKGV4Y2x1ZGUgIT09IHVuZGVmaW5lZCAmJiAoIUFycmF5LmlzQXJyYXkoZXhjbHVkZSkgfHwgIWV4Y2x1ZGUuZXZlcnkoKHUpID0+IG5vbkVtcHR5U3RyaW5nKHUpKSkpIHJldHVybiAnZXhjbHVkZVVzZXJJZHMgbXVzdCBiZSBhbiBhcnJheSBvZiBpZHMnO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2luZDogJ21vZGVyYXRvcnMnLFxuICAgICAgICBwZXJtaXNzaW9uOiByLnBlcm1pc3Npb24gYXMgRWNvc3lzdGVtTW9kZXJhdG9yUGVybWlzc2lvbixcbiAgICAgICAgLi4uKHIuZXhjbHVkZU1lbWJlcnNPZk9yZ0lkID8geyBleGNsdWRlTWVtYmVyc09mT3JnSWQ6IHIuZXhjbHVkZU1lbWJlcnNPZk9yZ0lkIGFzIHN0cmluZyB9IDoge30pLFxuICAgICAgICAuLi4oZXhjbHVkZSA/IHsgZXhjbHVkZVVzZXJJZHM6IGV4Y2x1ZGUgYXMgc3RyaW5nW10gfSA6IHt9KSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ3N1cGVyYWRtaW5zJzpcbiAgICAgIHJldHVybiB7IGtpbmQ6ICdzdXBlcmFkbWlucycgfTtcbiAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGlmICghc3BlYy5hbGxvd3NBZGRyZXNzKSByZXR1cm4gJ2FkZHJlc3MgcmVjaXBpZW50cyBhcmUgb25seSBhbGxvd2VkIGZvciBhbm9ueW1vdXMtc3VibWlzc2lvbiBhbmQgcGx1Z2luIHNlY3VyaXR5IG5vdGljZXMnO1xuICAgICAgaWYgKCFub25FbXB0eVN0cmluZyhyLmVtYWlsLCAzMjApIHx8ICFFTUFJTF9TSEFQRS50ZXN0KHIuZW1haWwpKSByZXR1cm4gJ2FkZHJlc3MgcmVjaXBpZW50IG5lZWRzIGEgdmFsaWQgZW1haWwnO1xuICAgICAgcmV0dXJuIHsga2luZDogJ2FkZHJlc3MnLCBlbWFpbDogci5lbWFpbC50cmltKCkudG9Mb3dlckNhc2UoKSB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ3Vua25vd24gcmVjaXBpZW50IGtpbmQnO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYW4ge0BsaW5rIEVjb3N5c3RlbU5vdGlmeVJlcXVlc3R9LiBSZXR1cm5zIHRoZSBub3JtYWxpemVkIHJlcXVlc3QsXG4gKiBvciBhbiBlcnJvciBzdHJpbmcgKHRoZSByZWxheSdzIDQwMCkuIFB1cmUsIHNvIGJvdGggdGhlIHNlbmRlciAoZmFpbCBhdFxuICogZW5xdWV1ZSwgbm90IGF0IDA5OjAwIHRvbW9ycm93KSBhbmQgdGhlIHJlbGF5IHVzZSB0aGUgc2FtZSBydWxlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRWNvc3lzdGVtTm90aWZ5UmVxdWVzdChib2R5OiB1bmtub3duKTogRWNvc3lzdGVtTm90aWZ5UmVxdWVzdCB8IHN0cmluZyB7XG4gIGlmICghYm9keSB8fCB0eXBlb2YgYm9keSAhPT0gJ29iamVjdCcpIHJldHVybiAnYm9keSBtdXN0IGJlIGFuIG9iamVjdCc7XG4gIGNvbnN0IGIgPSBib2R5IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAoIWlzRWNvc3lzdGVtTm90aWZpY2F0aW9uRXZlbnQoYi5ldmVudCkpIHJldHVybiAnZXZlbnQgbXVzdCBiZSBvbmUgb2YgTjEuLk4zNCc7XG4gIGNvbnN0IHNwZWMgPSBFQ09TWVNURU1fTk9USUZJQ0FUSU9OX0VWRU5UU1tiLmV2ZW50XTtcbiAgaWYgKCFub25FbXB0eVN0cmluZyhiLnN1YmplY3QsIEVDT1NZU1RFTV9OT1RJRllfU1VCSkVDVF9NQVgpKSByZXR1cm4gYHN1YmplY3QgaXMgcmVxdWlyZWQgKG1heCAke0VDT1NZU1RFTV9OT1RJRllfU1VCSkVDVF9NQVh9KWA7XG4gIGlmICghbm9uRW1wdHlTdHJpbmcoYi50ZXh0LCBFQ09TWVNURU1fTk9USUZZX1RFWFRfTUFYKSkgcmV0dXJuIGB0ZXh0IGlzIHJlcXVpcmVkIChtYXggJHtFQ09TWVNURU1fTk9USUZZX1RFWFRfTUFYfSlgO1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYi5yZWNpcGllbnRzKSB8fCBiLnJlY2lwaWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gJ3JlY2lwaWVudHMgbXVzdCBiZSBhIG5vbi1lbXB0eSBhcnJheSc7XG4gIGlmIChiLnJlY2lwaWVudHMubGVuZ3RoID4gTUFYX1JFQ0lQSUVOVF9SVUxFUykgcmV0dXJuIGBhdCBtb3N0ICR7TUFYX1JFQ0lQSUVOVF9SVUxFU30gcmVjaXBpZW50IHJ1bGVzYDtcbiAgY29uc3QgcmVjaXBpZW50czogRWNvc3lzdGVtUmVjaXBpZW50U3BlY1tdID0gW107XG4gIGZvciAoY29uc3QgcmF3IG9mIGIucmVjaXBpZW50cykge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlUmVjaXBpZW50KHJhdywgc3BlYyk7XG4gICAgaWYgKHR5cGVvZiBwYXJzZWQgPT09ICdzdHJpbmcnKSByZXR1cm4gcGFyc2VkO1xuICAgIHJlY2lwaWVudHMucHVzaChwYXJzZWQpO1xuICB9XG4gIGxldCBjaGFubmVsczogRWNvc3lzdGVtTm90aWZpY2F0aW9uQ2hhbm5lbFtdIHwgdW5kZWZpbmVkO1xuICBpZiAoYi5jaGFubmVscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGIuY2hhbm5lbHMpIHx8IGIuY2hhbm5lbHMubGVuZ3RoID09PSAwKSByZXR1cm4gJ2NoYW5uZWxzIG11c3QgYmUgYSBub24tZW1wdHkgYXJyYXknO1xuICAgIGNvbnN0IGJhZCA9IGIuY2hhbm5lbHMuZmlsdGVyKChjKSA9PiAhc3BlYy5jaGFubmVscy5pbmNsdWRlcyhjIGFzIEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWwpKTtcbiAgICBpZiAoYmFkLmxlbmd0aCA+IDApIHJldHVybiBgZXZlbnQgJHtiLmV2ZW50fSBpcyBub3QgZGVsaXZlcmVkIG9uOiAke2JhZC5qb2luKCcsICcpfWA7XG4gICAgY2hhbm5lbHMgPSBbLi4ubmV3IFNldChiLmNoYW5uZWxzIGFzIEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNoYW5uZWxbXSldO1xuICB9XG4gIGlmIChiLm1hbmRhdG9yeSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBiLm1hbmRhdG9yeSAhPT0gJ2Jvb2xlYW4nKSByZXR1cm4gJ21hbmRhdG9yeSBtdXN0IGJlIGEgYm9vbGVhbic7XG4gIHJldHVybiB7XG4gICAgZXZlbnQ6IGIuZXZlbnQsXG4gICAgcmVjaXBpZW50cyxcbiAgICBzdWJqZWN0OiBiLnN1YmplY3QudHJpbSgpLFxuICAgIHRleHQ6IGIudGV4dC50cmltKCksXG4gICAgLi4uKGNoYW5uZWxzID8geyBjaGFubmVscyB9IDoge30pLFxuICAgIC4uLihiLm1hbmRhdG9yeSA9PT0gdHJ1ZSA/IHsgbWFuZGF0b3J5OiB0cnVlIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKiBUaGUgVVRDIGhvdXIgZGlnZXN0cyBmbHVzaCBhdCAoXCJkYWlseSBkaWdlc3QgZW1haWwgKDA5OjAwIFVUQylcIikuICovXG5leHBvcnQgY29uc3QgRUNPU1lTVEVNX0RJR0VTVF9IT1VSX1VUQyA9IDk7XG5cbi8qKlxuICogVGhlIG5leHQgZmx1c2ggdGltZSBmb3IgYSBkaWdlc3QgY2FkZW5jZSwgc3RyaWN0bHkgYWZ0ZXIgYG5vd2A6XG4gKiBgaG91cmx5YCDihpIgdGhlIG5leHQgdG9wIG9mIHRoZSBob3VyOyBgZGFpbHlgIOKGkiB0aGUgbmV4dCAwOTowMCBVVEM7XG4gKiBgd2Vla2x5YCDihpIgdGhlIG5leHQgTW9uZGF5IDA5OjAwIFVUQy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHRFY29zeXN0ZW1EaWdlc3RUaW1lKGNhZGVuY2U6IEVjb3N5c3RlbURpZ2VzdENhZGVuY2UsIG5vdzogRGF0ZSA9IG5ldyBEYXRlKCkpOiBEYXRlIHtcbiAgY29uc3QgdCA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkpO1xuICBpZiAoY2FkZW5jZSA9PT0gJ2hvdXJseScpIHtcbiAgICB0LnNldFVUQ01pbnV0ZXMoMCwgMCwgMCk7XG4gICAgdC5zZXRVVENIb3Vycyh0LmdldFVUQ0hvdXJzKCkgKyAxKTtcbiAgICByZXR1cm4gdDtcbiAgfVxuICB0LnNldFVUQ0hvdXJzKEVDT1NZU1RFTV9ESUdFU1RfSE9VUl9VVEMsIDAsIDAsIDApO1xuICBpZiAodC5nZXRUaW1lKCkgPD0gbm93LmdldFRpbWUoKSkgdC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpICsgMSk7XG4gIGlmIChjYWRlbmNlID09PSAnd2Vla2x5Jykge1xuICAgIC8vIGdldFVUQ0RheTogMCA9IFN1bmRheSDigKYgMSA9IE1vbmRheS5cbiAgICB3aGlsZSAodC5nZXRVVENEYXkoKSAhPT0gMSkgdC5zZXRVVENEYXRlKHQuZ2V0VVRDRGF0ZSgpICsgMSk7XG4gIH1cbiAgcmV0dXJuIHQ7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGVtcGxhdGVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEEgcmVuZGVyZWQgbm90aWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFY29zeXN0ZW1Ob3RpZmljYXRpb25Db250ZW50IHtcbiAgc3ViamVjdDogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTjIzIOKAlCBzb21lb25lIHdhcyBhZGRlZCB0byBvciByZW1vdmVkIGZyb20gdGhlIHN5c3RlbSBvcmcncyBFY29zeXN0ZW1cbiAqIE1hbmFnZXIgcm9sZS4gU2VudCB0byBldmVyeSBzdXBlcmFkbWluIGFuZCB0byB0aGUgYWZmZWN0ZWQgdXNlcjtcbiAqIHRyYW5zYWN0aW9uYWwgKG5vIG9wdC1vdXQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyRWNvc3lzdGVtTWFuYWdlckNoYW5nZShpbnB1dDoge1xuICAvKiogVGhlIGFmZmVjdGVkIHVzZXIncyBkaXNwbGF5IG5hbWUgb3IgZW1haWwuICovXG4gIHVzZXI6IHN0cmluZztcbiAgYWRkZWQ6IGJvb2xlYW47XG4gIC8qKiBXaG8gbWFkZSB0aGUgY2hhbmdlIChzdXBlcmFkbWlucyBvbmx5IGNhbiksIHdoZW4ga25vd24uICovXG4gIGFjdG9yPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIFJvbGUgYWN0dWFsbHkgZ3JhbnRlZC4gVGhpcyBub3RpY2UgZmlyZXMgZm9yIEFOWSBSb2xlIGNhcnJ5aW5nIGFcbiAgICogc3lzdGVtLW9yZy1vbmx5IHBlcm1pc3Npb24g4oCUIGBlY29zeXN0ZW1Sb2xlTmFtZWAgcmV0dXJucyB3aGljaGV2ZXIgb25lIGl0XG4gICAqIGlzIOKAlCBzbyBoYXJkLWNvZGluZyBcIkVjb3N5c3RlbSBNYW5hZ2VyXCIgYW5ub3VuY2VkIHN0YWZmaW5nICoqQ29uc29sZVxuICAgKiBBZG1pbmlzdHJhdG9yKiogKGEgcmVhZC93cml0ZSBzaGVsbCBvdmVyIGV2ZXJ5IHRlbmFudCdzIHJvd3MpIG9yICoqU3VwcG9ydFxuICAgKiBMZWFkKiogKGBpbXBlcnNvbmF0aW9uOm9wZW5gKSBhcyBhIHBsdWdpbi1tb2RlcmF0aW9uIGdyYW50LiBUaGUgYXVkaXQgcm93XG4gICAqIGhhZCB0aGUgbmFtZSBhbGwgYWxvbmc7IHRoZSBtZXNzYWdlIG9wZXJhdG9ycyBhY3R1YWxseSByZWFkIGRpZCBub3QuXG4gICAqL1xuICByb2xlPzogc3RyaW5nO1xufSk6IEVjb3N5c3RlbU5vdGlmaWNhdGlvbkNvbnRlbnQge1xuICBjb25zdCB2ZXJiID0gaW5wdXQuYWRkZWQgPyAnYWRkZWQgdG8nIDogJ3JlbW92ZWQgZnJvbSc7XG4gIGNvbnN0IGJ5ID0gaW5wdXQuYWN0b3IgPyBgIGJ5ICR7aW5wdXQuYWN0b3J9YCA6ICcnO1xuICBjb25zdCByb2xlID0gaW5wdXQucm9sZSA/PyAnRWNvc3lzdGVtIE1hbmFnZXInO1xuICAvLyBUaGUgYm9keSBkZXNjcmliZXMgd2hhdCB0aGUgUk9MRSBkb2VzLCBzbyBpdCBjYW4gb25seSBzcGVhayBmb3IgdGhlIG9uZSBpdFxuICAvLyB3YXMgd3JpdHRlbiBhYm91dC4gRm9yIGFueSBvdGhlciwgc2F5IHdoYXQgaGFwcGVuZWQgYW5kIGxlYXZlIHRoZVxuICAvLyBjYXBhYmlsaXRpZXMgdG8gdGhlIFJvbGUgaXRzZWxmIHJhdGhlciB0aGFuIGRlc2NyaWJpbmcgdGhlIHdyb25nIG9uZXMuXG4gIGNvbnN0IGVjb3N5c3RlbSA9IHJvbGUgPT09ICdFY29zeXN0ZW0gTWFuYWdlcic7XG4gIHJldHVybiB7XG4gICAgc3ViamVjdDogYCR7aW5wdXQudXNlcn0gd2FzICR7dmVyYn0gdGhlICR7cm9sZX0gcm9sZWAsXG4gICAgdGV4dDogaW5wdXQuYWRkZWRcbiAgICAgID8gYCR7aW5wdXQudXNlcn0gd2FzICR7dmVyYn0gdGhlICR7cm9sZX0gcm9sZSR7Ynl9LmBcbiAgICAgICAgKyAoZWNvc3lzdGVtXG4gICAgICAgICAgPyAnIEVjb3N5c3RlbSBNYW5hZ2VycyBkZWNpZGUgcHVibGlzaCByZXF1ZXN0cywgbW9kZXJhdGUgc3VibWlzc2lvbnMgYW5kIHJldmlld3MsIHZlcmlmeSBwdWJsaXNoZXJzJ1xuICAgICAgICAgICAgKyAnIGFuZCBwdWJsaXNoIGFkdmlzb3JpZXMgZm9yIHRoZSB3aG9sZSBwbHVnaW4gZWNvc3lzdGVtLidcbiAgICAgICAgICA6ICcgSXQgY2FycmllcyBzeXN0ZW0tb3JnLW9ubHkgcGVybWlzc2lvbnMuJylcbiAgICAgICAgKyAnIFRoZSByb2xlIHdvcmtzIG9ubHkgZnJvbSB0aGUgc3lzdGVtIG9yZ2FuaXphdGlvbiBhbmQgcmVxdWlyZXMgYSB0d28tZmFjdG9yIHNpZ24taW4uJ1xuICAgICAgOiBgJHtpbnB1dC51c2VyfSB3YXMgJHt2ZXJifSB0aGUgJHtyb2xlfSByb2xlJHtieX1gXG4gICAgICAgICsgKGVjb3N5c3RlbSA/ICcgYW5kIGNhbiBubyBsb25nZXIgbWFuYWdlIG9yIGFwcHJvdmUgYW55dGhpbmcgaW4gdGhlIHBsdWdpbiBlY29zeXN0ZW0uJyA6ICcuJyksXG4gIH07XG59XG5cbi8qKlxuICogQ29hbGVzY2Ugc2V2ZXJhbCBxdWV1ZWQgbm90aWNlcyBpbnRvIG9uZSBkaWdlc3QgZW1haWw6IGEgY291bnQtYmVhcmluZ1xuICogc3ViamVjdCBhbmQgb25lIGxpbmUgcGVyIGl0ZW0gKGVhY2ggaXRlbSdzIHN1YmplY3QpLCBvbGRlc3QgZmlyc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJFY29zeXN0ZW1EaWdlc3QoXG4gIGV2ZW50OiBFY29zeXN0ZW1Ob3RpZmljYXRpb25FdmVudElkLFxuICBpdGVtczogcmVhZG9ubHkgRWNvc3lzdGVtTm90aWZpY2F0aW9uQ29udGVudFtdLFxuKTogRWNvc3lzdGVtTm90aWZpY2F0aW9uQ29udGVudCB7XG4gIGlmIChpdGVtcy5sZW5ndGggPT09IDEpIHJldHVybiBpdGVtc1swXSE7XG4gIGNvbnN0IHNwZWMgPSBFQ09TWVNURU1fTk9USUZJQ0FUSU9OX0VWRU5UU1tldmVudF07XG4gIGNvbnN0IGNhZGVuY2UgPSBzcGVjLmRpZ2VzdCA9PT0gJ2hvdXJseScgPyAnSG91cmx5JyA6IHNwZWMuZGlnZXN0ID09PSAnd2Vla2x5JyA/ICdXZWVrbHknIDogJ0RhaWx5JztcbiAgcmV0dXJuIHtcbiAgICBzdWJqZWN0OiBgJHtjYWRlbmNlfSBkaWdlc3Q6ICR7aXRlbXMubGVuZ3RofSDDlyAke3NwZWMuZGVzY3JpcHRpb259YC5zbGljZSgwLCBFQ09TWVNURU1fTk9USUZZX1NVQkpFQ1RfTUFYKSxcbiAgICB0ZXh0OiBpdGVtcy5tYXAoKGkpID0+IGDigKIgJHtpLnN1YmplY3R9YCkuam9pbignXFxuJykuc2xpY2UoMCwgRUNPU1lTVEVNX05PVElGWV9URVhUX01BWCksXG4gIH07XG59XG4iXX0=
@@ -34,6 +34,10 @@ export declare enum ErrorCode {
34
34
  * was called from an active org other than the system org — a token minted in
35
35
  * a tenant org is refused even for the same user. Switch to the system org. */
36
36
  SYSTEM_ORG_REQUIRED = "SYSTEM_ORG_REQUIRED",
37
+ /** A non-system org tried to create a plugin under a managed toolchain name
38
+ * (`MANAGED_TOOLCHAIN_PLUGINS`: `pipeline-bootstrap`, `cdk-synth`). A custom
39
+ * synth environment is published under another name. */
40
+ PLUGIN_MANAGED_NAME_RESERVED = "PLUGIN_MANAGED_NAME_RESERVED",
37
41
  /** The publisher hasn't accepted the CURRENT publisher terms version, so it
38
42
  * can't submit new requests (existing listings are unaffected). */
39
43
  PUBLISHER_TERMS_REQUIRED = "PUBLISHER_TERMS_REQUIRED",
@@ -82,6 +86,40 @@ export declare enum ErrorCode {
82
86
  TEMPLATE_CONTRACT_VIOLATION = "TEMPLATE_CONTRACT_VIOLATION",
83
87
  TEMPLATE_SIZE_EXCEEDED = "TEMPLATE_SIZE_EXCEEDED",
84
88
  TEMPLATE_VALIDATION_FAILED = "TEMPLATE_VALIDATION_FAILED",
89
+ /** A managed toolchain name in a publish, submission, listing or install path:
90
+ * managed releases are never listed in the ecosystem. */
91
+ PLUGIN_MANAGED_NOT_LISTABLE = "PLUGIN_MANAGED_NOT_LISTABLE",
92
+ /** An upload of a prerelease (`-dev.N`) version of a managed toolchain name:
93
+ * a release version is always a plain semver. */
94
+ PLUGIN_MANAGED_PRERELEASE = "PLUGIN_MANAGED_PRERELEASE",
95
+ /** A generic plugin route (update, deprecate/yank, delete, purge) was called on
96
+ * a managed toolchain name — for the system org too. Release lifecycle lives
97
+ * only in the Toolchain console, which acts on both halves at once. */
98
+ TOOLCHAIN_USE_CONSOLE = "TOOLCHAIN_USE_CONSOLE",
99
+ /** The CLI could not resolve the bootstrap image (D2) — unreachable platform,
100
+ * no default, a deleted pin, a signature failure, or a local-spec deploy
101
+ * without `--toolchain-file`. Never falls back. */
102
+ BOOTSTRAP_IMAGE_UNRESOLVED = "BOOTSTRAP_IMAGE_UNRESOLVED",
103
+ /** No platform default release exists (D11). Never "highest version". */
104
+ TOOLCHAIN_NO_DEFAULT = "TOOLCHAIN_NO_DEFAULT",
105
+ /** The resolver found halves with different release versions — a bug, never served. */
106
+ TOOLCHAIN_PAIR_MISMATCH = "TOOLCHAIN_PAIR_MISMATCH",
107
+ /** A pin or org default names a release that is not eligible (D15) at set time. */
108
+ TOOLCHAIN_RELEASE_NOT_ELIGIBLE = "TOOLCHAIN_RELEASE_NOT_ELIGIBLE",
109
+ /** A managed `cdk-synth` step carries its own version; pin the release instead. */
110
+ TOOLCHAIN_PIN_VIA_RELEASE = "TOOLCHAIN_PIN_VIA_RELEASE",
111
+ /** Yanking the platform default with no live previous default to restore. */
112
+ TOOLCHAIN_DEFAULT_REQUIRED = "TOOLCHAIN_DEFAULT_REQUIRED",
113
+ /** `expectedCurrentDefault` did not match the current platform default. */
114
+ TOOLCHAIN_DEFAULT_CHANGED = "TOOLCHAIN_DEFAULT_CHANGED",
115
+ /** A second D14 initial-default call. */
116
+ TOOLCHAIN_INITIAL_ALREADY_SET = "TOOLCHAIN_INITIAL_ALREADY_SET",
117
+ /** §8 guards on setting the platform default — one code per guard. */
118
+ TOOLCHAIN_GUARD_UNSCANNED = "TOOLCHAIN_GUARD_UNSCANNED",
119
+ TOOLCHAIN_GUARD_VULN_FLOOR = "TOOLCHAIN_GUARD_VULN_FLOOR",
120
+ TOOLCHAIN_GUARD_METADATA = "TOOLCHAIN_GUARD_METADATA",
121
+ TOOLCHAIN_GUARD_PAIR_INCOMPLETE = "TOOLCHAIN_GUARD_PAIR_INCOMPLETE",
122
+ TOOLCHAIN_GUARD_CANARY_GATE = "TOOLCHAIN_GUARD_CANARY_GATE",
85
123
  /** The pipeline-manager CLI is older than the platform's
86
124
  * `PIPELINE_MANAGER_MIN_VERSION`; the fix is `pipeline-manager --upgrade`. */
87
125
  CLIENT_UPGRADE_REQUIRED = "CLIENT_UPGRADE_REQUIRED",
@@ -113,6 +151,9 @@ export declare enum ErrorCode {
113
151
  /** A freeze named an image digest that is not the version's stored digest
114
152
  * (fail closed: what was requested is not what would be published). */
115
153
  PLUGIN_DIGEST_MISMATCH = "PLUGIN_DIGEST_MISMATCH",
154
+ /** A re-upload of an existing (name, version) of a managed toolchain name:
155
+ * a release is immutable — build a new version instead. */
156
+ PLUGIN_VERSION_IMMUTABLE = "PLUGIN_VERSION_IMMUTABLE",
116
157
  /** A publish request needs the org's publisher profile, which doesn't exist
117
158
  * yet (docs/plugin-publishing.md). Claim a handle first. */
118
159
  PUBLISHER_REQUIRED = "PUBLISHER_REQUIRED",