@atlasauth/angular 0.13.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/esm2022/lib/components/attempt-flow.component.mjs +100 -5
- package/dist/esm2022/lib/components/flow-controller.mjs +57 -9
- package/dist/esm2022/lib/components/sign-in.component.mjs +8 -2
- package/dist/esm2022/lib/components/sign-up.component.mjs +46 -7
- package/dist/esm2022/lib/i18n.mjs +11 -1
- package/dist/esm2022/lib/version.mjs +2 -2
- package/dist/fesm2022/atlasauth-angular.mjs +217 -19
- package/dist/fesm2022/atlasauth-angular.mjs.map +1 -1
- package/dist/lib/components/attempt-flow.component.d.ts +46 -6
- package/dist/lib/components/flow-controller.d.ts +21 -4
- package/dist/lib/components/sign-up.component.d.ts +4 -1
- package/dist/lib/version.d.ts +1 -1
- package/package.json +6 -6
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { signal } from '@angular/core';
|
|
2
|
-
import { advanceWithCaptcha, atlasCaptchaLabels, createCaptchaController, createPasskeySignInController, createPasskeySignUp, createSignUp, finishPasskeySignUp, fetchInstanceSettings, fetchLastSignInMethod, startSignInWithAtlas, createMfaEnrollment, acknowledgeRecoveryCodes, pendingRecoveryCodes, mfaChoicesFrom, prepareSecondFactorCode, resendSignUpVerification, flowNeedsCaptcha, signInCaptchaOptions, flowFromPending, initialFlow, nextStep, offeredFirstFactors, pollAttempt, prepareFactor, planFirstFactor, shouldKeepPolling, PolicyAcceptanceController, loadPolicies, } from '@atlasauth/js';
|
|
2
|
+
import { advanceWithCaptcha, atlasCaptchaLabels, attemptPasswordHoldProof, preparePasswordHoldProof, createCaptchaController, createPasskeySignInController, createPasskeySignUp, createSignUp, finishPasskeySignUp, fetchInstanceSettings, fetchLastSignInMethod, startSignInWithAtlas, createMfaEnrollment, acknowledgeExistingAccount, acknowledgeRecoveryCodes, pendingExistingAccountNotice, pendingRecoveryCodes, mfaChoicesFrom, prepareSecondFactorCode, resendSignUpVerification, flowNeedsCaptcha, signInCaptchaOptions, flowFromPending, initialFlow, nextStep, offeredFirstFactors, pollAttempt, prepareFactor, planFirstFactor, shouldKeepPolling, PolicyAcceptanceController, loadPolicies, } from '@atlasauth/js';
|
|
3
3
|
import { EN_US, translate } from '../i18n';
|
|
4
4
|
/**
|
|
5
5
|
* The server-driven sign-in / sign-up engine, shared by `<atlas-sign-in>` and
|
|
@@ -19,6 +19,7 @@ export class AtlasFlowController {
|
|
|
19
19
|
client;
|
|
20
20
|
reload;
|
|
21
21
|
t;
|
|
22
|
+
holdExistingAccountNotice;
|
|
22
23
|
state;
|
|
23
24
|
/**
|
|
24
25
|
* The instance's public sign-in / sign-up settings (captcha, sign-up fields,
|
|
@@ -81,10 +82,13 @@ export class AtlasFlowController {
|
|
|
81
82
|
identifier = '';
|
|
82
83
|
constructor(client, reload, pending,
|
|
83
84
|
/** Resolves the captcha messages' catalog keys. Defaults to en-US. */
|
|
84
|
-
t = (key) => translate(EN_US, key)
|
|
85
|
+
t = (key) => translate(EN_US, key),
|
|
86
|
+
/** Wait for {@link continueAfterExistingAccount} (`<atlas-sign-up>` draws the notice). */
|
|
87
|
+
holdExistingAccountNotice = false) {
|
|
85
88
|
this.client = client;
|
|
86
89
|
this.reload = reload;
|
|
87
90
|
this.t = t;
|
|
91
|
+
this.holdExistingAccountNotice = holdExistingAccountNotice;
|
|
88
92
|
// Seeded from a redirect that came back mid-flow (e.g. OAuth needing a second
|
|
89
93
|
// factor) so the user resumes at the demanded step instead of starting over.
|
|
90
94
|
this.state = signal(pending ? flowFromPending(pending) : initialFlow);
|
|
@@ -151,9 +155,27 @@ export class AtlasFlowController {
|
|
|
151
155
|
firstFactors() {
|
|
152
156
|
const attempt = this.state().attempt;
|
|
153
157
|
const step = attempt ? nextStep(attempt) : null;
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
158
|
+
if (step?.kind !== 'collect_first_factor')
|
|
159
|
+
return [];
|
|
160
|
+
const offered = offeredFirstFactors(step.strategies, this.settings()?.emailDelivery);
|
|
161
|
+
const proof = this.holdProof();
|
|
162
|
+
return proof && !offered.includes(proof) ? [...offered, proof] : offered;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* The emailed proof a password hold still waits on (`FlowState.passwordHold`): the
|
|
166
|
+
* code, or a link where the instance verifies by link only. Null with no hold, once
|
|
167
|
+
* proven, or while the app cannot deliver email.
|
|
168
|
+
*/
|
|
169
|
+
holdProof() {
|
|
170
|
+
const hold = this.state().passwordHold;
|
|
171
|
+
if (!hold || hold.released || this.settings()?.emailDelivery?.available === false)
|
|
172
|
+
return null;
|
|
173
|
+
return this.settings()?.account?.emailVerification === 'link' ? 'email_link' : 'email_code';
|
|
174
|
+
}
|
|
175
|
+
/** Back from the emailed factor to the password field. */
|
|
176
|
+
usePassword() {
|
|
177
|
+
this.preparedFactor.set(null);
|
|
178
|
+
this.state.update((current) => ({ ...current, prepared: null, pollSecret: null, errors: [] }));
|
|
157
179
|
}
|
|
158
180
|
/**
|
|
159
181
|
* True when email + password sign-up cannot complete because the app cannot
|
|
@@ -170,16 +192,21 @@ export class AtlasFlowController {
|
|
|
170
192
|
/**
|
|
171
193
|
* Ask the server to email a sign-in code for the current `needs_first_factor`
|
|
172
194
|
* step (`POST …/prepare_first_factor`); the form then collects the code, which
|
|
173
|
-
* {@link submit} posts as the `email_code` strategy.
|
|
195
|
+
* {@link submit} posts as the `email_code` strategy. While a password hold waits
|
|
196
|
+
* on it ({@link holdProof}), this emails that proof instead.
|
|
174
197
|
*/
|
|
175
198
|
async prepare(strategy) {
|
|
176
199
|
if (!this.firstFactors().includes(strategy))
|
|
177
200
|
return;
|
|
201
|
+
const proof = this.holdProof();
|
|
178
202
|
this.state.update((current) => ({ ...current, busy: true, errors: [] }));
|
|
179
|
-
const next =
|
|
203
|
+
const next = strategy === proof
|
|
204
|
+
? await preparePasswordHoldProof(this.client, this.state(), proof)
|
|
205
|
+
: await prepareFactor(this.client, this.state(), strategy);
|
|
180
206
|
this.setState(next);
|
|
181
207
|
if (!next.errors.length)
|
|
182
208
|
this.preparedFactor.set(strategy);
|
|
209
|
+
this.syncPolling();
|
|
183
210
|
}
|
|
184
211
|
/** Keep both captchas in step with the settings and the flow's current step. */
|
|
185
212
|
syncCaptcha() {
|
|
@@ -195,8 +222,12 @@ export class AtlasFlowController {
|
|
|
195
222
|
this.signUpCaptchaDrawn.set(this.signUpCaptcha.needed);
|
|
196
223
|
}
|
|
197
224
|
setState(next) {
|
|
198
|
-
const
|
|
225
|
+
const previous = this.state();
|
|
226
|
+
const previousId = previous.attempt?.id ?? null;
|
|
199
227
|
this.state.set(next);
|
|
228
|
+
// A proven hold goes back to the password field.
|
|
229
|
+
if (next.passwordHold?.released && !previous.passwordHold?.released)
|
|
230
|
+
this.preparedFactor.set(null);
|
|
200
231
|
// A prepared factor belongs to the first-factor step it was sent for.
|
|
201
232
|
if (next.attempt?.status !== 'needs_first_factor')
|
|
202
233
|
this.preparedFactor.set(null);
|
|
@@ -232,6 +263,11 @@ export class AtlasFlowController {
|
|
|
232
263
|
*/
|
|
233
264
|
async submit(values) {
|
|
234
265
|
this.state.update((current) => ({ ...current, busy: true, errors: [] }));
|
|
266
|
+
// A code that lifts a password hold goes to its own attempt, not this sign-in.
|
|
267
|
+
if (this.preparedFactor() === 'email_code' && this.holdProof() === 'email_code') {
|
|
268
|
+
this.setState(await attemptPasswordHoldProof(this.client, this.state(), values.code ?? ''));
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
235
271
|
const out = await advanceWithCaptcha(this.client, this.state(), values, {
|
|
236
272
|
captcha: this.captcha,
|
|
237
273
|
identifier: this.identifier,
|
|
@@ -327,6 +363,14 @@ export class AtlasFlowController {
|
|
|
327
363
|
async saveRecoveryCodes() {
|
|
328
364
|
await this.finish(acknowledgeRecoveryCodes(this.state()));
|
|
329
365
|
}
|
|
366
|
+
/** The address belonged to an existing account: the notice is up until {@link continueAfterExistingAccount}. */
|
|
367
|
+
existingAccountNotice() {
|
|
368
|
+
return pendingExistingAccountNotice(this.state());
|
|
369
|
+
}
|
|
370
|
+
/** The user read the notice: finish the sign-up. */
|
|
371
|
+
async continueAfterExistingAccount() {
|
|
372
|
+
await this.finish(acknowledgeExistingAccount(this.state()));
|
|
373
|
+
}
|
|
330
374
|
async finish(next) {
|
|
331
375
|
// An enrolment's recovery codes are shown first; `saveRecoveryCodes` finishes.
|
|
332
376
|
if (pendingRecoveryCodes(next)) {
|
|
@@ -345,6 +389,10 @@ export class AtlasFlowController {
|
|
|
345
389
|
});
|
|
346
390
|
exchanged = res.ok;
|
|
347
391
|
}
|
|
392
|
+
if (exchanged && this.holdExistingAccountNotice && pendingExistingAccountNotice(next)) {
|
|
393
|
+
this.setState({ ...next, ticket: null, busy: false });
|
|
394
|
+
return;
|
|
395
|
+
}
|
|
348
396
|
const kept = exchanged && (await this.reload());
|
|
349
397
|
this.setState({ ...next, busy: false, sessionKept: kept });
|
|
350
398
|
}
|
|
@@ -401,4 +449,4 @@ export class AtlasFlowController {
|
|
|
401
449
|
this.signUpCaptcha.destroy();
|
|
402
450
|
}
|
|
403
451
|
}
|
|
404
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2Zsb3ctY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBRUwsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQix1QkFBdUIsRUFDdkIsNkJBQTZCLEVBQzdCLG1CQUFtQixFQUNuQixZQUFZLEVBQ1osbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQix3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLGNBQWMsRUFDZCx1QkFBdUIsRUFDdkIsd0JBQXdCLEVBQ3hCLGdCQUFnQixFQUNoQixvQkFBb0IsRUFDcEIsZUFBZSxFQUNmLFdBQVcsRUFDWCxRQUFRLEVBQ1IsbUJBQW1CLEVBQ25CLFdBQVcsRUFDWCxhQUFhLEVBQ2IsZUFBZSxFQUNmLGlCQUFpQixFQUNqQiwwQkFBMEIsRUFDMUIsWUFBWSxHQVFiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRTNDOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLE9BQU8sbUJBQW1CO0lBK0RYO0lBQ0E7SUFHQTtJQWxFVixLQUFLLENBQTRCO0lBQzFDOzs7O09BSUc7SUFDTSxRQUFRLEdBQUcsTUFBTSxDQUEwQixJQUFJLENBQUMsQ0FBQztJQUMxRDs7O09BR0c7SUFDTSxVQUFVLEdBQUcsTUFBTSxDQUFnQixJQUFJLENBQUMsQ0FBQztJQUNsRCx5RUFBeUU7SUFDaEUsT0FBTyxHQUFzQix1QkFBdUIsQ0FBQyxTQUFTLEVBQUU7UUFDdkUseUVBQXlFO1FBQ3pFLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxJ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QUFNO2lCQUNQLENBQUMsQ0FBQztnQkFDSCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNQLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFRCxnR0FBZ0c7SUFDaEcsT0FBTztRQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMvQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXcml0YWJsZVNpZ25hbCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBGYXBpQ2xpZW50LFxuICBhZHZhbmNlV2l0aENhcHRjaGEsXG4gIGF0bGFzQ2FwdGNoYUxhYmVscyxcbiAgY3JlYXRlQ2FwdGNoYUNvbnRyb2xsZXIsXG4gIGNyZWF0ZVBhc3NrZXlTaWduSW5Db250cm9sbGVyLFxuICBjcmVhdGVQYXNza2V5U2lnblVwLFxuICBjcmVhdGVTaWduVXAsXG4gIGZpbmlzaFBhc3NrZXlTaWduVXAsXG4gIGZldGNoSW5zdGFuY2VTZXR0aW5ncyxcbiAgZmV0Y2hMYXN0U2lnbkluTWV0aG9kLFxuICBzdGFydFNpZ25JbldpdGhBdGxhcyxcbiAgY3JlYXRlTWZhRW5yb2xsbWVudCxcbiAgYWNrbm93bGVkZ2VSZWNvdmVyeUNvZGVzLFxuICBwZW5kaW5nUmVjb3ZlcnlDb2RlcyxcbiAgbWZhQ2hvaWNlc0Zyb20sXG4gIHByZXBhcmVTZWNvbmRGYWN0b3JDb2RlLFxuICByZXNlbmRTaWduVXBWZXJpZmljYXRpb24sXG4gIGZsb3dOZWVkc0NhcHRjaGEsXG4gIHNpZ25JbkNhcHRjaGFPcHRpb25zLFxuICBmbG93RnJvbVBlbmRpbmcsXG4gIGluaXRpYWxGbG93LFxuICBuZXh0U3RlcCxcbiAgb2ZmZXJlZEZpcnN0RmFjdG9ycyxcbiAgcG9sbEF0dGVtcHQsXG4gIHByZXBhcmVGYWN0b3IsXG4gIHBsYW5GaXJzdEZhY3RvcixcbiAgc2hvdWxkS2VlcFBvbGxpbmcsXG4gIFBvbGljeUFjY2VwdGFuY2VDb250cm9sbGVyLFxuICBsb2FkUG9saWNpZXMsXG4gIHR5cGUgQ2FwdGNoYUNvbnRyb2xsZXIsXG4gIHR5cGUgRmxvd1N0YXRlLFxuICB0eXBlIEluc3RhbmNlU2V0dGluZ3MsXG4gIHR5cGUgTWZhQ2hvaWNlcyxcbiAgdHlwZSBNZmFFbnJvbGxtZW50Q29udHJvbGxlcixcbiAgdHlwZSBNZmFFbnJvbGxtZW50U3RhdGUsXG4gIHR5cGUgUGFzc2tleVNpZ25JbkNvbnRyb2xsZXIsXG59IGZyb20gJ0BhdGxhc2F1dGgvanMnO1xuaW1wb3J0IHsgRU5fVVMsIHRyYW5zbGF0ZSB9IGZyb20gJy4uL2kxOG4nO1xuXG4vKipcbiAqIFRoZSBzZXJ2ZXItZHJpdmVuIHNpZ24taW4gLyBzaWduLXVwIGVuZ2luZSwgc2hhcmVkIGJ5IGA8YXRsYXMtc2lnbi1pbj5gIGFuZFxuICogYDxhdGxhcy1zaWduLXVwPmAg4oCUIHRoZSBBbmd1bGFyIGNvdW50ZXJwYXJ0IG9mIFJlYWN0J3MgYHVzZUZsb3dgIGhvb2suXG4gKlxuICogSXQgb3ducyBubyBkZWNpc2lvbiBhYm91dCB3aGF0IGNvbWVzIG5leHQ6IGV2ZXJ5IHN0YXR1cyBjb21lcyBiYWNrIGZyb20gdGhlXG4gKiBzZXJ2ZXIgdmlhIGBhZHZhbmNlYCwgYW5kIHRoaXMgY29udHJvbGxlciBvbmx5IHBvc3RzIHdoYXRldmVyIHRoZSBjdXJyZW50IHN0ZXBcbiAqIG5lZWRzIGFuZCByZS1yZW5kZXJzIHRoZSByZXR1cm5lZCBzdGF0dXMuIFN0YXRlIGxpdmVzIGluIGEgc2lnbmFsIHNvIHRlbXBsYXRlc1xuICogdXBkYXRlIHdoZXRoZXIgdGhlIGFwcCBydW5zIHpvbmVkIG9yIHpvbmVsZXNzLlxuICpcbiAqIGA8YXRsYXMtc2lnbi11cD5gIHN0YXJ0cyB0aGUgYXR0ZW1wdCB3aXRoIHtAbGluayBjcmVhdGV9XG4gKiAoYFBPU1QgL3YxL2NsaWVudC9zaWduX3Vwc2ApOyB0aGUgZW1haWxlZC1jb2RlIHN0ZXAgdGhlbiBydW5zIHRocm91Z2ggdGhlIHNhbWVcbiAqIHtAbGluayBzdWJtaXR9LiBCb3RoIGZsb3dzIGRyYXcgdGhlIGluc3RhbmNlJ3MgY2FwdGNoYSAoZnJvbVxuICoge0BsaW5rIGxvYWRTZXR0aW5nc30pIHdoZW4gaXQgaXMgcmVxdWlyZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBBdGxhc0Zsb3dDb250cm9sbGVyIHtcbiAgcmVhZG9ubHkgc3RhdGU6IFdyaXRhYmxlU2lnbmFsPEZsb3dTdGF0ZT47XG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2UncyBwdWJsaWMgc2lnbi1pbiAvIHNpZ24tdXAgc2V0dGluZ3MgKGNhcHRjaGEsIHNpZ24tdXAgZmllbGRzLFxuICAgKiBsZWdhbCBjb25zZW50KSBmcm9tIGBHRVQgL3YxL2FwcGVhcmFuY2VgOyBudWxsIHVudGlsIHtAbGluayBsb2FkU2V0dGluZ3N9XG4gICAqIHJlc29sdmVzLCBvciB3aGVuIHRoZSBzZXJ2ZXIgY291bGQgbm90IGJlIHJlYWNoZWQuXG4gICAqL1xuICByZWFkb25seSBzZXR0aW5ncyA9IHNpZ25hbDxJbnN0YW5jZVNldHRpbmdzIHwgbnVsbD4obnVsbCk7XG4gIC8qKlxuICAgKiBUaGUgbWV0aG9kIHRoaXMgYnJvd3NlciBsYXN0IHNpZ25lZCBpbiB3aXRoIChgcGFzc3dvcmRgLCBgb2F1dGhfZ2l0aHViYCwg4oCmKVxuICAgKiBmb3IgdGhlIFwiTGFzdCB1c2VkXCIgaGludDsgbnVsbCB3aGVuIG5vbmUsIG9yIHRoZSBpbnN0YW5jZSB0dXJuZWQgaXQgb2ZmLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFzdE1ldGhvZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgLyoqIFRoZSBzaWduLWluIGNhcHRjaGEgKGlkZW50aWZpZXIgc3RlcCAvIGBuZWVkc19jYXB0Y2hhYCBjaGFsbGVuZ2UpLiAqL1xuICByZWFkb25seSBjYXB0Y2hhOiBDYXB0Y2hhQ29udHJvbGxlciA9IGNyZWF0ZUNhcHRjaGFDb250cm9sbGVyKHVuZGVmaW5lZCwge1xuICAgIC8vIFRoZSBBdGxhcyBjYXB0Y2hhJ3Mgd29yZHMgZm9sbG93IHRoZSBmb3JtJ3MgY2F0YWxvZyAocmVhZCB3aGVuIGRyYXduKS5cbiAgICBhdGxhc0xhYmVsczogKCkgPT4gYXRsYXNDYXB0Y2hhTGFiZWxzKHRoaXMudCksXG4gIH0pO1xuICAvKiogVGhlIHNpZ24tdXAgY2FwdGNoYSAodGhlIGNyZWF0ZS1hY2NvdW50IHN0ZXApLiAqL1xuICByZWFkb25seSBzaWduVXBDYXB0Y2hhOiBDYXB0Y2hhQ29udHJvbGxlciA9IGNyZWF0ZUNhcHRjaGFDb250cm9sbGVyKHVuZGVmaW5lZCwge1xuICAgIGF0bGFzTGFiZWxzOiAoKSA9PiBhdGxhc0NhcHRjaGFMYWJlbHModGhpcy50KSxcbiAgfSk7XG4gIC8qKiBXaGV0aGVyIHtAbGluayBjYXB0Y2hhfSBjdXJyZW50bHkgZHJhd3MgYSB3aWRnZXQgKGZvciB0ZW1wbGF0ZXMpLiAqL1xuICByZWFkb25seSBjYXB0Y2hhRHJhd24gPSBzaWduYWwoZmFsc2UpO1xuICAvKiogV2hldGhlciB7QGxpbmsgc2lnblVwQ2FwdGNoYX0gY3VycmVudGx5IGRyYXdzIGEgd2lkZ2V0IChmb3IgdGVtcGxhdGVzKS4gKi9cbiAgcmVhZG9ubHkgc2lnblVwQ2FwdGNoYURyYXduID0gc2lnbmFsKGZhbHNlKTtcbiAgLyoqXG4gICAqIFRoZSBmaXJzdCBmYWN0b3IgdGhlIHNlcnZlciB3YXMgYXNrZWQgdG8gc2VuZCAoe0BsaW5rIHByZXBhcmV9KSBvbiB0aGVcbiAgICogY3VycmVudCBgbmVlZHNfZmlyc3RfZmFjdG9yYCBzdGVwIOKAlCB0aGUgZm9ybSB0aGVuIGNvbGxlY3RzIGl0cyBjb2RlLiBOdWxsXG4gICAqIG90aGVyd2lzZS5cbiAgICovXG4gIHJlYWRvbmx5IHByZXBhcmVkRmFjdG9yID0gc2lnbmFsPCdlbWFpbF9jb2RlJyB8IG51bGw+KG51bGwpO1xuICAvKipcbiAgICogXCJFbWFpbCBtZSBhIGNvZGUgaW5zdGVhZFwiIGF0IHRoZSBzZWNvbmQgZmFjdG9yICh7QGxpbmsgc2VuZEVtYWlsU2Vjb25kRmFjdG9yfSk6XG4gICAqIGluIGZsaWdodCwgd2hlcmUgdGhlIGNvZGUgd2VudCwgb3Igd2h5IGl0IHdhcyBub3Qgc2VudC4gTnVsbCB1bnRpbCBhc2tlZCxcbiAgICogYW5kIGFnYWluIG9uY2UgdGhlIGZsb3cgbGVhdmVzIHRoYXQgc3RlcC5cbiAgICovXG4gIHJlYWRvbmx5IGVtYWlsU2Vjb25kRmFjdG9yID0gc2lnbmFsPHsgYnVzeT86IGJvb2xlYW47IHNlbnRUbz86IHN0cmluZzsgZXJyb3I/OiBzdHJpbmcgfSB8IG51bGw+KG51bGwpO1xuICAvKiogXCJUZXh0IG1lIGEgY29kZSBpbnN0ZWFkXCIgYXQgdGhlIHNlY29uZCBmYWN0b3IgKHtAbGluayBzZW5kU21zU2Vjb25kRmFjdG9yfSk6IGFzIHtAbGluayBlbWFpbFNlY29uZEZhY3Rvcn0uICovXG4gIHJlYWRvbmx5IHNtc1NlY29uZEZhY3RvciA9IHNpZ25hbDx7IGJ1c3k/OiBib29sZWFuOyBzZW50VG8/OiBzdHJpbmc7IGVycm9yPzogc3RyaW5nIH0gfCBudWxsPihudWxsKTtcbiAgLyoqXG4gICAqIFRoZSBNRkEgZW5yb2xtZW50IHN0ZXAgKGBuZWVkc19tZmFfZW5yb2xsbWVudGApOiB0aGUgYXV0aGVudGljYXRvciBhcHAnc1xuICAgKiBzZXR1cCAoUVIgY29kZSwgc2V0dXAga2V5KSBvciBhIHRleHRlZCBjb2RlLiBTdGFydGVkIGFuZCByZXNldCB3aXRoIHRoZSBmbG93LlxuICAgKi9cbiAgcmVhZG9ubHkgZW5yb2xsbWVudDogTWZhRW5yb2xsbWVudENvbnRyb2xsZXI7XG4gIC8qKiB7QGxpbmsgZW5yb2xsbWVudH0ncyBzdGF0ZSwgZm9yIHRlbXBsYXRlcy4gKi9cbiAgcmVhZG9ubHkgZW5yb2xsbWVudFN0YXRlOiBXcml0YWJsZVNpZ25hbDxNZmFFbnJvbGxtZW50U3RhdGU+O1xuICAvKipcbiAgICogVGhlIGluc3RhbmNlJ3MgcG9saWNpZXMgKHRlcm1zLCBwcml2YWN5LCDigKYpIGZvciB0aGUgY3JlYXRlLWFjY291bnQgZm9ybTpcbiAgICoge0BsaW5rIGNyZWF0ZX0gc2VuZHMgdGhlaXIgYWNjZXB0YW5jZXMgYW5kIHJlbG9hZHMgdGhlbSBhZnRlciBhIHJlZnVzYWwuXG4gICAqL1xuICByZWFkb25seSBwb2xpY2llcyA9IG5ldyBQb2xpY3lBY2NlcHRhbmNlQ29udHJvbGxlcihbXSk7XG4gIC8qKlxuICAgKiBQYXNza2V5IHNpZ24taW4gKHRoZSBcIlNpZ24gaW4gd2l0aCBhIHBhc3NrZXlcIiBidXR0b24gYW5kIHBhc3NrZXkgYXV0b2ZpbGwgb25cbiAgICogdGhlIGlkZW50aWZpZXIgZmllbGQpLiBUaGUgb3V0Y29tZSBnb2VzIHRocm91Z2ggdGhlIHNhbWUgY29tcGxldGlvbiBhcyBldmVyeSBzaWduLWluLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFzc2tleTogUGFzc2tleVNpZ25JbkNvbnRyb2xsZXI7XG4gIC8qKiBXaGV0aGVyIHRoaXMgYnJvd3NlciBjYW4gcnVuIFdlYkF1dGhuOyBgPGF0bGFzLXNpZ24taW4+YCBzZXRzIGl0IGFmdGVyIGl0IGlzIGNyZWF0ZWQgaW4gYSBicm93c2VyLiAqL1xuICByZWFkb25seSBwYXNza2V5U3VwcG9ydGVkID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSBwb2xsVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGlkZW50aWZpZXIgPSAnJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNsaWVudDogRmFwaUNsaWVudCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbG9hZDogKCkgPT4gUHJvbWlzZTxib29sZWFuPixcbiAgICBwZW5kaW5nOiB7IGlkOiBzdHJpbmc7IHN0YXR1czogc3RyaW5nIH0gfCBudWxsLFxuICAgIC8qKiBSZXNvbHZlcyB0aGUgY2FwdGNoYSBtZXNzYWdlcycgY2F0YWxvZyBrZXlzLiBEZWZhdWx0cyB0byBlbi1VUy4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHQ6IChrZXk6IHN0cmluZykgPT4gc3RyaW5nID0gKGtleSkgPT4gdHJhbnNsYXRlKEVOX1VTLCBrZXkpLFxuICApIHtcbiAgICAvLyBTZWVkZWQgZnJvbSBhIHJlZGlyZWN0IHRoYXQgY2FtZSBiYWNrIG1pZC1mbG93IChlLmcuIE9BdXRoIG5lZWRpbmcgYSBzZWNvbmRcbiAgICAvLyBmYWN0b3IpIHNvIHRoZSB1c2VyIHJlc3VtZXMgYXQgdGhlIGRlbWFuZGVkIHN0ZXAgaW5zdGVhZCBvZiBzdGFydGluZyBvdmVyLlxuICAgIHRoaXMuc3RhdGUgPSBzaWduYWw8Rmxvd1N0YXRlPihwZW5kaW5nID8gZmxvd0Zyb21QZW5kaW5nKHBlbmRpbmcpIDogaW5pdGlhbEZsb3cpO1xuICAgIHRoaXMuZW5yb2xsbWVudCA9IGNyZWF0ZU1mYUVucm9sbG1lbnQodGhpcy5jbGllbnQsICgpID0+IHRoaXMubWZhQ2hvaWNlcygpKTtcbiAgICB0aGlzLmVucm9sbG1lbnRTdGF0ZSA9IHNpZ25hbDxNZmFFbnJvbGxtZW50U3RhdGU+KHRoaXMuZW5yb2xsbWVudC5zdGF0ZSk7XG4gICAgdGhpcy5lbnJvbGxtZW50LnN1YnNjcmliZSgobmV4dCkgPT4gdGhpcy5lbnJvbGxtZW50U3RhdGUuc2V0KG5leHQpKTtcbiAgICB0aGlzLnBhc3NrZXkgPSBjcmVhdGVQYXNza2V5U2lnbkluQ29udHJvbGxlcih7XG4gICAgICBjbGllbnQ6IHRoaXMuY2xpZW50LFxuICAgICAgb25TdGFydDogKCkgPT4gdGhpcy5zdGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIGJ1c3k6IHRydWUsIGVycm9yczogW10gfSkpLFxuICAgICAgb25SZXN1bHQ6IChuZXh0KSA9PiB0aGlzLmZpbmlzaChuZXh0KSxcbiAgICAgIGNhcHRjaGE6ICgpID0+IHRoaXMuY2FwdGNoYSxcbiAgICAgIGNhbmNlbGxlZE1lc3NhZ2U6ICgpID0+IHRoaXMudCgnc2lnbkluLnBhc3NrZXlDYW5jZWxsZWQnKSxcbiAgICB9KTtcbiAgICB0aGlzLnN5bmNDYXB0Y2hhKCk7XG4gICAgdGhpcy5zeW5jRW5yb2xsbWVudCgpO1xuICB9XG5cbiAgLyoqIFdoeSBcIkNvbnRpbnVlIHdpdGggQXRsYXNcIiBjb3VsZCBub3Qgc3RhcnQgKHRoZSBzZXJ2ZXIncyBtZXNzYWdlKTsgbnVsbCBvdGhlcndpc2UuICovXG4gIHJlYWRvbmx5IHNpZ25JbldpdGhBdGxhc0Vycm9yID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIC8qKlxuICAgKiBcIkNvbnRpbnVlIHdpdGggQXRsYXNcIiAod2hlbiBgc2V0dGluZ3MoKS5zaWduSW5XaXRoQXRsYXNgIGlzIHNldCk6IHN0YXJ0cyB0aGVcbiAgICogU1NPIHNpZ24taW4gYW5kIHNlbmRzIHRoZSBicm93c2VyIHRvIEF0bGFzLlxuICAgKi9cbiAgYXN5bmMgc2lnbkluV2l0aEF0bGFzKGNvbm5lY3Rpb25JZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgdGhpcy5zaWduSW5XaXRoQXRsYXNFcnJvci5zZXQobnVsbCk7XG4gICAgY29uc3Qgc3RhcnRlZCA9IGF3YWl0IHN0YXJ0U2lnbkluV2l0aEF0bGFzKHRoaXMuY2xpZW50LCBjb25uZWN0aW9uSWQsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICBpZiAoJ3VybCcgaW4gc3RhcnRlZCkgd2luZG93LmxvY2F0aW9uLmFzc2lnbihzdGFydGVkLnVybCk7XG4gICAgZWxzZSB0aGlzLnNpZ25JbldpdGhBdGxhc0Vycm9yLnNldChzdGFydGVkLmVycm9yKTtcbiAgfVxuXG4gIC8qKiBcIlNpZ24gaW4gd2l0aCBhIHBhc3NrZXlcIiBpcyBvZmZlcmVkOiB0aGUgZmlyc3Qgc3RlcCwgdGhlIGluc3RhbmNlIHR1cm5lZCBwYXNza2V5IHNpZ24taW4gb24sIGFuZCB0aGUgYnJvd3NlciBjYW4uICovXG4gIHBhc3NrZXlPZmZlcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBhc3NrZXlTdXBwb3J0ZWQoKSAmJiAhdGhpcy5zdGF0ZSgpLmF0dGVtcHQgJiYgdGhpcy5zZXR0aW5ncygpPy5wYXNza2V5U2lnbkluID09PSB0cnVlO1xuICB9XG5cbiAgLyoqIFdoYXQgdGhlIGFwcCBsZXRzIHRoZSBNRkEgc3RlcHMgb2ZmZXIgKGZyb20ge0BsaW5rIHNldHRpbmdzfSkuICovXG4gIG1mYUNob2ljZXMoKTogTWZhQ2hvaWNlcyB7XG4gICAgcmV0dXJuIG1mYUNob2ljZXNGcm9tKHRoaXMuc2V0dGluZ3MoKT8uYWNjb3VudCk7XG4gIH1cblxuICAvKiogU3RhcnQgdGhlIGVucm9sbWVudCBzdGVwIGZvciBpdHMgYXR0ZW1wdCwgb3IgcmVzZXQgaXQgb25jZSB0aGUgZmxvdyBsZWF2ZXMuICovXG4gIHByaXZhdGUgc3luY0Vucm9sbG1lbnQoKTogdm9pZCB7XG4gICAgY29uc3QgYXR0ZW1wdCA9IHRoaXMuc3RhdGUoKS5hdHRlbXB0O1xuICAgIGlmIChhdHRlbXB0Py5zdGF0dXMgPT09ICduZWVkc19tZmFfZW5yb2xsbWVudCcgJiYgYXR0ZW1wdC5pZCkgdGhpcy5lbnJvbGxtZW50LnN0YXJ0KGF0dGVtcHQuaWQpO1xuICAgIGVsc2UgdGhpcy5lbnJvbGxtZW50LnJlc2V0KCk7XG4gIH1cblxuICAvKiogRmV0Y2ggdGhlIGluc3RhbmNlJ3MgcHVibGljIHNldHRpbmdzIGFuZCBkcmF3IHdoYXRldmVyIGNhcHRjaGEgdGhleSByZXF1aXJlLiAqL1xuICBhc3luYyBsb2FkU2V0dGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbG9hZGVkID0gYXdhaXQgZmV0Y2hJbnN0YW5jZVNldHRpbmdzKHRoaXMuY2xpZW50KTtcbiAgICBpZiAobG9hZGVkKSB7XG4gICAgICB0aGlzLnNldHRpbmdzLnNldChsb2FkZWQpO1xuICAgICAgdGhpcy5zeW5jQ2FwdGNoYSgpO1xuICAgICAgaWYgKGxvYWRlZC5hY2NvdW50Lmxhc3RTaWduSW5NZXRob2QpIHRoaXMubGFzdE1ldGhvZC5zZXQoYXdhaXQgZmV0Y2hMYXN0U2lnbkluTWV0aG9kKHRoaXMuY2xpZW50KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmaXJzdCBmYWN0b3JzIHRvIG9mZmVyIG9uIGEgYG5lZWRzX2ZpcnN0X2ZhY3RvcmAgc3RlcDogdGhlIHNlcnZlcidzIGxpc3RcbiAgICogd2l0aG91dCBlbWFpbCBjb2RlIC8gbGluayB3aGlsZSB0aGUgYXBwIGNhbm5vdCBkZWxpdmVyIGVtYWlsXG4gICAqIChgc2V0dGluZ3MuZW1haWxEZWxpdmVyeS5hdmFpbGFibGUgPT09IGZhbHNlYCkuIEVtcHR5IG9uIGFueSBvdGhlciBzdGVwLlxuICAgKi9cbiAgZmlyc3RGYWN0b3JzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBhdHRlbXB0ID0gdGhpcy5zdGF0ZSgpLmF0dGVtcHQ7XG4gICAgY29uc3Qgc3RlcCA9IGF0dGVtcHQgPyBuZXh0U3RlcChhdHRlbXB0KSA6IG51bGw7XG4gICAgcmV0dXJuIHN0ZXA/LmtpbmQgPT09ICdjb2xsZWN0X2ZpcnN0X2ZhY3RvcidcbiAgICAgID8gb2ZmZXJlZEZpcnN0RmFjdG9ycyhzdGVwLnN0cmF0ZWdpZXMsIHRoaXMuc2V0dGluZ3MoKT8uZW1haWxEZWxpdmVyeSlcbiAgICAgIDogW107XG4gIH1cblxuICAvKipcbiAgICogVHJ1ZSB3aGVuIGVtYWlsICsgcGFzc3dvcmQgc2lnbi11cCBjYW5ub3QgY29tcGxldGUgYmVjYXVzZSB0aGUgYXBwIGNhbm5vdFxuICAgKiBzZW5kIHRoZSB2ZXJpZmljYXRpb24gZW1haWwgKGBzZXR0aW5ncy5lbWFpbERlbGl2ZXJ5LnBhc3N3b3JkU2lnblVwID09PSBmYWxzZWApOlxuICAgKiBgPGF0bGFzLXNpZ24tdXA+YCBzaG93cyB0aGUgXCJjYW4ndCBzZW5kIGVtYWlsXCIgbm90aWNlIGluc3RlYWQgb2YgdGhlIGZvcm0uXG4gICAqL1xuICBzaWduVXBFbWFpbFVuYXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzKCk/LmVtYWlsRGVsaXZlcnkucGFzc3dvcmRTaWduVXAgPT09IGZhbHNlO1xuICB9XG5cbiAgLyoqIEZhbHNlIHdoZW4gYSBwYXNzd29yZCByZXNldCBlbWFpbCBjYW5ub3QgYmUgZGVsaXZlcmVkIOKAlCBoaWRlIFwiRm9yZ290IHBhc3N3b3JkP1wiLiAqL1xuICBwYXNzd29yZFJlc2V0QXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNldHRpbmdzKCk/LmVtYWlsRGVsaXZlcnkucGFzc3dvcmRSZXNldCAhPT0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQXNrIHRoZSBzZXJ2ZXIgdG8gZW1haWwgYSBzaWduLWluIGNvZGUgZm9yIHRoZSBjdXJyZW50IGBuZWVkc19maXJzdF9mYWN0b3JgXG4gICAqIHN0ZXAgKGBQT1NUIOKApi9wcmVwYXJlX2ZpcnN0X2ZhY3RvcmApOyB0aGUgZm9ybSB0aGVuIGNvbGxlY3RzIHRoZSBjb2RlLCB3aGljaFxuICAgKiB7QGxpbmsgc3VibWl0fSBwb3N0cyBhcyB0aGUgYGVtYWlsX2NvZGVgIHN0cmF0ZWd5LlxuICAgKi9cbiAgYXN5bmMgcHJlcGFyZShzdHJhdGVneTogJ2VtYWlsX2NvZGUnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmZpcnN0RmFjdG9ycygpLmluY2x1ZGVzKHN0cmF0ZWd5KSkgcmV0dXJuO1xuICAgIHRoaXMuc3RhdGUudXBkYXRlKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBidXN5OiB0cnVlLCBlcnJvcnM6IFtdIH0pKTtcbiAgICBjb25zdCBuZXh0ID0gYXdhaXQgcHJlcGFyZUZhY3Rvcih0aGlzLmNsaWVudCwgdGhpcy5zdGF0ZSgpLCBzdHJhdGVneSk7XG4gICAgdGhpcy5zZXRTdGF0ZShuZXh0KTtcbiAgICBpZiAoIW5leHQuZXJyb3JzLmxlbmd0aCkgdGhpcy5wcmVwYXJlZEZhY3Rvci5zZXQoc3RyYXRlZ3kpO1xuICB9XG5cbiAgLyoqIEtlZXAgYm90aCBjYXB0Y2hhcyBpbiBzdGVwIHdpdGggdGhlIHNldHRpbmdzIGFuZCB0aGUgZmxvdydzIGN1cnJlbnQgc3RlcC4gKi9cbiAgcHJpdmF0ZSBzeW5jQ2FwdGNoYSgpOiB2b2lkIHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3MoKTtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGUoKTtcbiAgICB0aGlzLmNhcHRjaGEuY29uZmlndXJlKFxuICAgICAgc2lnbkluQ2FwdGNoYU9wdGlvbnMoc2V0dGluZ3M/LmNhcHRjaGFGbG93cy5zaWduSW4sIHN0YXRlLCAoKSA9PiB2b2lkIHRoaXMuc3VibWl0KHt9KSksXG4gICAgKTtcbiAgICBjb25zdCBzaWduVXBGbG93ID0gc2V0dGluZ3M/LmNhcHRjaGFGbG93cy5zaWduVXA7XG4gICAgdGhpcy5zaWduVXBDYXB0Y2hhLmNvbmZpZ3VyZSh7XG4gICAgICBmbG93OiBzaWduVXBGbG93LFxuICAgICAgYWN0aXZlOiAhc3RhdGUuYXR0ZW1wdCAmJiBmbG93TmVlZHNDYXB0Y2hhKHNpZ25VcEZsb3cpLFxuICAgIH0pO1xuICAgIHRoaXMuY2FwdGNoYURyYXduLnNldCh0aGlzLmNhcHRjaGEubmVlZGVkKTtcbiAgICB0aGlzLnNpZ25VcENhcHRjaGFEcmF3bi5zZXQodGhpcy5zaWduVXBDYXB0Y2hhLm5lZWRlZCk7XG4gIH1cblxuICBwcml2YXRlIHNldFN0YXRlKG5leHQ6IEZsb3dTdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IHByZXZpb3VzSWQgPSB0aGlzLnN0YXRlKCkuYXR0ZW1wdD8uaWQgPz8gbnVsbDtcbiAgICB0aGlzLnN0YXRlLnNldChuZXh0KTtcbiAgICAvLyBBIHByZXBhcmVkIGZhY3RvciBiZWxvbmdzIHRvIHRoZSBmaXJzdC1mYWN0b3Igc3RlcCBpdCB3YXMgc2VudCBmb3IuXG4gICAgaWYgKG5leHQuYXR0ZW1wdD8uc3RhdHVzICE9PSAnbmVlZHNfZmlyc3RfZmFjdG9yJykgdGhpcy5wcmVwYXJlZEZhY3Rvci5zZXQobnVsbCk7XG4gICAgLy8gQW4gZW1haWxlZCBzZWNvbmQtZmFjdG9yIGNvZGUgYmVsb25ncyB0byB0aGUgc2Vjb25kLWZhY3RvciBzdGVwIG9mIHRoaXMgYXR0ZW1wdC5cbiAgICBpZiAobmV4dC5hdHRlbXB0Py5zdGF0dXMgIT09ICduZWVkc19zZWNvbmRfZmFjdG9yJyB8fCAobmV4dC5hdHRlbXB0Py5pZCA/PyBudWxsKSAhPT0gcHJldmlvdXNJZCkge1xuICAgICAgdGhpcy5lbWFpbFNlY29uZEZhY3Rvci5zZXQobnVsbCk7XG4gICAgICB0aGlzLnNtc1NlY29uZEZhY3Rvci5zZXQobnVsbCk7XG4gICAgfVxuICAgIHRoaXMuc3luY0NhcHRjaGEoKTtcbiAgICB0aGlzLnN5bmNFbnJvbGxtZW50KCk7XG4gICAgdGhpcy5hdXRvU2VuZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhdXRvU2VudEZvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIC8qKlxuICAgKiBXaXRoIG5vIHBhc3N3b3JkIG9uIG9mZmVyLCBlbWFpbCB0aGUgY29kZSBhcyBzb29uIGFzIHRoZSBzZXJ2ZXIgYXNrcyBmb3IgYVxuICAgKiBmaXJzdCBmYWN0b3Ig4oCUIG9uY2UgcGVyIGF0dGVtcHQsIHNvIGEgZmFpbGVkIHNlbmQgd2FpdHMgZm9yIHRoZSB1c2VyJ3MgcmV0cnlcbiAgICogKHRoZSBcIkVtYWlsIG1lIGEgY29kZVwiIGJ1dHRvbikgaW5zdGVhZCBvZiBsb29waW5nLlxuICAgKi9cbiAgcHJpdmF0ZSBhdXRvU2VuZCgpOiB2b2lkIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuc3RhdGUoKS5hdHRlbXB0Py5pZCA/PyBudWxsO1xuICAgIGlmICghaWQgfHwgdGhpcy5hdXRvU2VudEZvciA9PT0gaWQgfHwgdGhpcy5wcmVwYXJlZEZhY3RvcigpKSByZXR1cm47XG4gICAgaWYgKHBsYW5GaXJzdEZhY3Rvcih0aGlzLmZpcnN0RmFjdG9ycygpKS5hdXRvU2VuZCAhPT0gJ2VtYWlsX2NvZGUnKSByZXR1cm47XG4gICAgdGhpcy5hdXRvU2VudEZvciA9IGlkO1xuICAgIHZvaWQgdGhpcy5wcmVwYXJlKCdlbWFpbF9jb2RlJyk7XG4gIH1cblxuICAvKipcbiAgICogQWR2YW5jZSB0aGUgZmxvdyB3aXRoIHRoZSB2YWx1ZXMgdGhlIHVzZXIgdHlwZWQuIE9uIGNvbXBsZXRpb24sIGV4Y2hhbmdlIHRoZVxuICAgKiBvbmUtdGltZSB0aWNrZXQgZm9yIGNvb2tpZXMgb3ZlciBhIHNhbWUtb3JpZ2luIHJlcXVlc3QgKEZBUEkgaXMgY3Jvc3Mtb3JpZ2luXG4gICAqIGFuZCBjYW5ub3Qgc2V0IHRoZSBjb29raWUgb24gaXRzIG93biByZXNwb25zZSksIHRoZW4gcmUtYm9vdCBzbyB0aGUgcmVzdCBvZlxuICAgKiB0aGUgYXBwIHNlZXMgYSBzaWduZWQtaW4gdXNlci5cbiAgICovXG4gIGFzeW5jIHN1Ym1pdCh2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZSgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgYnVzeTogdHJ1ZSwgZXJyb3JzOiBbXSB9KSk7XG5cbiAgICBjb25zdCBvdXQgPSBhd2FpdCBhZHZhbmNlV2l0aENhcHRjaGEodGhpcy5jbGllbnQsIHRoaXMuc3RhdGUoKSwgdmFsdWVzLCB7XG4gICAgICBjYXB0Y2hhOiB0aGlzLmNhcHRjaGEsXG4gICAgICBpZGVudGlmaWVyOiB0aGlzLmlkZW50aWZpZXIsXG4gICAgICB0OiB0aGlzLnQsXG4gICAgfSk7XG4gICAgdGhpcy5pZGVudGlmaWVyID0gb3V0LmlkZW50aWZpZXI7XG4gICAgYXdhaXQgdGhpcy5maW5pc2gob3V0LnN0YXRlKTtcbiAgfVxuXG4gIC8qKiBMb2FkIHRoZSBzaWduLXVwJ3MgcG9saWNpZXMgaW50byB7QGxpbmsgcG9saWNpZXN9IChgPGF0bGFzLXNpZ24tdXA+YCBjYWxscyBpdCBvbiBpbml0KS4gKi9cbiAgYXN5bmMgbG9hZFBvbGljaWVzKGxvY2FsZT86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucG9saWNpZXMuc2V0UG9saWNpZXMoYXdhaXQgbG9hZFBvbGljaWVzKHRoaXMuY2xpZW50LCB7IGxvY2FsZSB9KSk7XG4gIH1cblxuICAvKiogVGhlIHVzZXIgZGVjbGluZWQgYSBwb2xpY3kgYSBzaWduLWluIHdhcyB3YWl0aW5nIG9uOiBjYW5jZWwgdGhlIGF0dGVtcHQgYW5kIHNheSB3aHkuICovXG4gIGRlY2xpbmVQb2xpY3kodGl0bGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUuc2V0KHtcbiAgICAgIC4uLmluaXRpYWxGbG93LFxuICAgICAgZXJyb3JzOiBbeyBjb2RlOiAnUE9MSUNZX0RFQ0xJTkVEJywgbWVzc2FnZTogdGhpcy50KCdwb2xpY3kuZGVjbGluZWQnKS5yZXBsYWNlKCd7cG9saWN5fScsIHRpdGxlKSB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gYWNjb3VudCAoYFBPU1QgL3YxL2NsaWVudC9zaWduX3Vwc2ApIGZyb20gYSBjcmVhdGUtYWNjb3VudCBmb3JtJ3NcbiAgICogdmFsdWVzIOKAlCBlbWFpbCwgcGFzc3dvcmQgYW5kIGFueSBjb25maWd1cmVkIHNpZ24tdXAgZmllbGRzIOKAlCBjYXJyeWluZyB0aGVcbiAgICogc2lnbi11cCBjYXB0Y2hhJ3MgdG9rZW4gd2hlbiB0aGUgaW5zdGFuY2UgcmVxdWlyZXMgb25lLiBUaGUgZW1haWxlZCBjb2RlIGlzXG4gICAqIHRoZW4gcG9zdGVkIHdpdGgge0BsaW5rIHN1Ym1pdH0uXG4gICAqL1xuICBhc3luYyBjcmVhdGUodmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBjb25zZW50ID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc3RhdGUudXBkYXRlKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBidXN5OiB0cnVlLCBlcnJvcnM6IFtdIH0pKTtcbiAgICBjb25zdCBuZXh0ID0gYXdhaXQgY3JlYXRlU2lnblVwKHRoaXMuY2xpZW50LCB2YWx1ZXMsIHtcbiAgICAgIGNvbnNlbnQsXG4gICAgICBjYXB0Y2hhOiB0aGlzLnNpZ25VcENhcHRjaGEsXG4gICAgICB0OiB0aGlzLnQsXG4gICAgICBwb2xpY2llczogdGhpcy5wb2xpY2llcyxcbiAgICB9KTtcbiAgICBhd2FpdCB0aGlzLmZpbmlzaChuZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIkVtYWlsIG1lIGEgY29kZSBpbnN0ZWFkXCIgYXQgdGhlIHNlY29uZCBmYWN0b3IgKHRoZSBpbnN0YW5jZSdzXG4gICAqIGBhY2NvdW50LmVtYWlsU2Vjb25kRmFjdG9yYCk6IG1haWxzIGEgY29kZSB0byB0aGUgYWNjb3VudCdzIHZlcmlmaWVkIGVtYWlsO1xuICAgKiBpdCBpcyB0aGVuIHBvc3RlZCB3aXRoIHtAbGluayBzdWJtaXR9IGxpa2UgYW55IDJGQSBjb2RlLlxuICAgKi9cbiAgYXN5bmMgc2VuZEVtYWlsU2Vjb25kRmFjdG9yKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2VuZFNlY29uZEZhY3RvckNvZGUoJ2VtYWlsX2NvZGUnLCB0aGlzLmVtYWlsU2Vjb25kRmFjdG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlRleHQgbWUgYSBjb2RlIGluc3RlYWRcIiBhdCB0aGUgc2Vjb25kIGZhY3RvciAod2hlcmUgdGhlIGFwcCBvZmZlcnMgdGV4dGVkXG4gICAqIGNvZGVzLCB7QGxpbmsgbWZhQ2hvaWNlc31gKCkuc21zYCk6IHRleHRzIGEgY29kZSB0byB0aGUgYWNjb3VudCdzIGVucm9sbGVkXG4gICAqIHBob25lOyBpdCBpcyB0aGVuIHBvc3RlZCB3aXRoIHtAbGluayBzdWJtaXR9IGxpa2UgYW55IDJGQSBjb2RlLlxuICAgKi9cbiAgYXN5bmMgc2VuZFNtc1NlY29uZEZhY3RvcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNlbmRTZWNvbmRGYWN0b3JDb2RlKCdzbXMnLCB0aGlzLnNtc1NlY29uZEZhY3Rvcik7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRTZWNvbmRGYWN0b3JDb2RlKFxuICAgIHN0cmF0ZWd5OiAnc21zJyB8ICdlbWFpbF9jb2RlJyxcbiAgICBvdXQ6IFdyaXRhYmxlU2lnbmFsPHsgYnVzeT86IGJvb2xlYW47IHNlbnRUbz86IHN0cmluZzsgZXJyb3I/OiBzdHJpbmcgfSB8IG51bGw+LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpZCA9IHRoaXMuc3RhdGUoKS5hdHRlbXB0Py5pZDtcbiAgICBpZiAoIWlkKSByZXR1cm47XG4gICAgb3V0LnNldCh7IGJ1c3k6IHRydWUgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgc2VudFRvIH0gPSBhd2FpdCBwcmVwYXJlU2Vjb25kRmFjdG9yQ29kZSh0aGlzLmNsaWVudCwgaWQsIHN0cmF0ZWd5KTtcbiAgICAgIG91dC5zZXQoeyBzZW50VG8gfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG91dC5zZXQoeyBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiB0aGlzLnQoJ2Vycm9yLmdlbmVyaWMnKSB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVzZW5kIGEgc2lnbi11cCdzIGVtYWlsZWQgY29kZSAvIGxpbmsgKHRoZSBlYXJsaWVyIG9uZSBzdG9wcyB3b3JraW5nKS4gKi9cbiAgYXN5bmMgcmVzZW5kU2lnblVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc3RhdGUudXBkYXRlKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBidXN5OiB0cnVlLCBlcnJvcnM6IFtdIH0pKTtcbiAgICB0aGlzLnN0YXRlLnNldChhd2FpdCByZXNlbmRTaWduVXBWZXJpZmljYXRpb24odGhpcy5jbGllbnQsIHRoaXMuc3RhdGUoKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgcGFzc2tleS1vbmx5IHNpZ24tdXAgKGBQT1NUIC92MS9jbGllbnQvc2lnbl91cHMvcGFzc2tleWApIGZyb20gdGhlXG4gICAqIGNyZWF0ZS1hY2NvdW50IGZvcm0ncyB2YWx1ZXMg4oCUIG5vIHBhc3N3b3JkLiBPZmZlcmVkIHdoZW4gdGhlIGluc3RhbmNlJ3NcbiAgICogYGFjY291bnQucGFzc2tleVNpZ25VcGAgaXMgc2V0LlxuICAgKi9cbiAgYXN5bmMgY3JlYXRlV2l0aFBhc3NrZXkodmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBjb25zZW50ID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc3RhdGUudXBkYXRlKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBidXN5OiB0cnVlLCBlcnJvcnM6IFtdIH0pKTtcbiAgICBhd2FpdCB0aGlzLmZpbmlzaChhd2FpdCBjcmVhdGVQYXNza2V5U2lnblVwKHRoaXMuY2xpZW50LCB2YWx1ZXMsIHsgY29uc2VudCwgY2FwdGNoYTogdGhpcy5zaWduVXBDYXB0Y2hhLCB0OiB0aGlzLnQsIHBvbGljaWVzOiB0aGlzLnBvbGljaWVzIH0pKTtcbiAgfVxuXG4gIC8qKiBUaGUgcGFzc2tleS1vbmx5IHNpZ24tdXAncyBsYXN0IHN0ZXA6IGNyZWF0ZSB0aGUgcGFzc2tleSwgYW5kIHdpdGggaXQgdGhlIGFjY291bnQuICovXG4gIGFzeW5jIGNyZWF0ZVBhc3NrZXkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIGJ1c3k6IHRydWUsIGVycm9yczogW10gfSkpO1xuICAgIGF3YWl0IHRoaXMuZmluaXNoKGF3YWl0IGZpbmlzaFBhc3NrZXlTaWduVXAodGhpcy5jbGllbnQsIHRoaXMuc3RhdGUoKSwgeyB0OiB0aGlzLnQgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZWNvdmVyeSBjb2RlcyBhbiBNRkEgZW5yb2xtZW50IGp1c3QgY29tcGxldGVkIHRoZSBzaWduLWluIHdpdGgsIHNob3duXG4gICAqIG9uY2UgYmVmb3JlIGl0IGZpbmlzaGVzICh7QGxpbmsgc2F2ZVJlY292ZXJ5Q29kZXN9KTsgbnVsbCBvdGhlcndpc2UuIFRoZXlcbiAgICogbGl2ZSBvbmx5IGluIHRoaXMgY29udHJvbGxlcidzIG1lbW9yeS5cbiAgICovXG4gIHJlY292ZXJ5Q29kZXMoKTogc3RyaW5nW10gfCBudWxsIHtcbiAgICByZXR1cm4gcGVuZGluZ1JlY292ZXJ5Q29kZXModGhpcy5zdGF0ZSgpKTtcbiAgfVxuXG4gIC8qKiBcIkkndmUgc2F2ZWQgbXkgY29kZXNcIjogZm9yZ2V0IHRoZSByZWNvdmVyeSBjb2RlcyBhbmQgZmluaXNoIHRoZSBzaWduLWluLiAqL1xuICBhc3luYyBzYXZlUmVjb3ZlcnlDb2RlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmZpbmlzaChhY2tub3dsZWRnZVJlY292ZXJ5Q29kZXModGhpcy5zdGF0ZSgpKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbmlzaChuZXh0OiBGbG93U3RhdGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBBbiBlbnJvbG1lbnQncyByZWNvdmVyeSBjb2RlcyBhcmUgc2hvd24gZmlyc3Q7IGBzYXZlUmVjb3ZlcnlDb2Rlc2AgZmluaXNoZXMuXG4gICAgaWYgKHBlbmRpbmdSZWNvdmVyeUNvZGVzKG5leHQpKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgLi4ubmV4dCwgYnVzeTogZmFsc2UgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChuZXh0LmF0dGVtcHQ/LnN0YXR1cyA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgLy8gU3RheXMgYnVzeSB1bnRpbCB0aGlzIGJyb3dzZXIgYWN0dWFsbHkgaG9sZHMgdGhlIHNlc3Npb246IHRoZSBjb21wbGV0aW9uXG4gICAgICAvLyBhbG9uZSBzYXlzIG5vdGhpbmcgYWJvdXQgd2hldGhlciB0aGUgY29va2llIHdhcyBrZXB0LlxuICAgICAgdGhpcy5zZXRTdGF0ZSh7IC4uLm5leHQsIGJ1c3k6IHRydWUgfSk7XG4gICAgICBsZXQgZXhjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIGlmIChuZXh0LnRpY2tldCkge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNsaWVudC5wb3N0KCcvdjEvY2xpZW50L3RpY2tldHMvZXhjaGFuZ2UnLCB7XG4gICAgICAgICAgYXR0ZW1wdF9pZDogKG5leHQuYXR0ZW1wdCBhcyB7IGlkPzogc3RyaW5nIH0pLmlkLFxuICAgICAgICAgIHRpY2tldDogbmV4dC50aWNrZXQsXG4gICAgICAgIH0pO1xuICAgICAgICBleGNoYW5nZWQgPSByZXMub2s7XG4gICAgICB9XG4gICAgICBjb25zdCBrZXB0ID0gZXhjaGFuZ2VkICYmIChhd2FpdCB0aGlzLnJlbG9hZCgpKTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyAuLi5uZXh0LCBidXN5OiBmYWxzZSwgc2Vzc2lvbktlcHQ6IGtlcHQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUobmV4dCk7XG4gICAgICAvLyBBIG1hZ2ljLWxpbmsgc3RlcCBtYXkgbm93IGJlIHBvbGxhYmxlIChhIGxpbmsgb3BlbmVkIG9uIGFub3RoZXIgZGV2aWNlKS5cbiAgICAgIHRoaXMuc3luY1BvbGxpbmcoKTtcbiAgICB9XG4gIH1cblxuICAvKiogU3RhcnQvc3RvcCB0aGUgwqc1LjMgbWFnaWMtbGluayBwb2xsIHRvIG1hdGNoIHRoZSBjdXJyZW50IHN0YXRlLiAqL1xuICBzeW5jUG9sbGluZygpOiB2b2lkIHtcbiAgICBpZiAoc2hvdWxkS2VlcFBvbGxpbmcodGhpcy5zdGF0ZSgpKSkge1xuICAgICAgdGhpcy5zdGFydFBvbGxpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdG9wUG9sbGluZygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRQb2xsaW5nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBvbGxUaW1lcikgcmV0dXJuO1xuICAgIHRoaXMucG9sbFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0YXRlOiBuZXh0LCB0aWNrZXQgfSA9IGF3YWl0IHBvbGxBdHRlbXB0KHRoaXMuY2xpZW50LCB0aGlzLnN0YXRlKCkpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKG5leHQpO1xuICAgICAgICAvLyBlLmcuIGEgcGFzc2tleSBzaWduLXVwIHdob3NlIGVtYWlsIHdhcyBqdXN0IHByb3Zlbjogb25seSB0aGlzIHRhYiBjYW4gZ28gb24uXG4gICAgICAgIGlmICghdGlja2V0ICYmICFzaG91bGRLZWVwUG9sbGluZyhuZXh0KSkgdGhpcy5zdG9wUG9sbGluZygpO1xuICAgICAgICBpZiAoIXRpY2tldCB8fCAhbmV4dC5hdHRlbXB0KSByZXR1cm47XG5cbiAgICAgICAgLy8gVGhlIHRpY2tldCBpcyBleGNoYW5nZWQgYnkgYSBub3JtYWwgcmVxdWVzdCwgc28gbm8gc2Vzc2lvbiB0b2tlbiBldmVyXG4gICAgICAgIC8vIGFwcGVhcnMgaW4gYSBVUkwuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuY2xpZW50LnBvc3QoJy92MS9jbGllbnQvdGlja2V0cy9leGNoYW5nZScsIHtcbiAgICAgICAgICBhdHRlbXB0X2lkOiAobmV4dC5hdHRlbXB0IGFzIHsgaWQ/OiBzdHJpbmcgfSkuaWQsXG4gICAgICAgICAgdGlja2V0LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qga2VwdCA9IHJlcy5vayAmJiAoYXdhaXQgdGhpcy5yZWxvYWQoKSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyAuLi50aGlzLnN0YXRlKCksIHNlc3Npb25LZXB0OiBrZXB0IH0pO1xuICAgICAgICB0aGlzLnN0b3BQb2xsaW5nKCk7XG4gICAgICB9KSgpO1xuICAgIH0sIDJfMDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcFBvbGxpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucG9sbFRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMucG9sbFRpbWVyKTtcbiAgICAgIHRoaXMucG9sbFRpbWVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKiogUmVsZWFzZSB0aGUgcG9sbCB0aW1lciBhbmQgdGhlIGNhcHRjaGEgd2lkZ2V0cyDigJQgY2FsbCBmcm9tIHRoZSBjb21wb25lbnQncyBgbmdPbkRlc3Ryb3lgLiAqL1xuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucGFzc2tleS5zdG9wQXV0b2ZpbGwoKTtcbiAgICB0aGlzLnN0b3BQb2xsaW5nKCk7XG4gICAgdGhpcy5jYXB0Y2hhLmRlc3Ryb3koKTtcbiAgICB0aGlzLnNpZ25VcENhcHRjaGEuZGVzdHJveSgpO1xuICB9XG59XG4iXX0=
|
|
452
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxvdy1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2Zsb3ctY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBRUwsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2Qiw2QkFBNkIsRUFDN0IsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLDBCQUEwQixFQUMxQix3QkFBd0IsRUFDeEIsNEJBQTRCLEVBQzVCLG9CQUFvQixFQUNwQixjQUFjLEVBQ2QsdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUN4QixnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLGVBQWUsRUFDZixXQUFXLEVBQ1gsUUFBUSxFQUNSLG1CQUFtQixFQUNuQixXQUFXLEVBQ1gsYUFBYSxFQUNiLGVBQWUsRUFDZixpQkFBaUIsRUFDakIsMEJBQTBCLEVBQzFCLFlBQVksR0FRYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUUzQzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxPQUFPLG1CQUFtQjtJQStEWDtJQUNBO0lBR0E7SUFFQTtJQXBFVixLQUFLLENBQTRCO0lBQzFDOzs7O09BSUc7SUFDTSxRQUFRLEdBQUcsTUFBTSxDQUEwQixJQUFJLENBQUMsQ0FBQztJQUMxRDs7O09BR0c7SUFDTSxVQUFVLEdBQUcsTUFBTSxDQUFnQixJQUFJLENBQUMsQ0FBQztJQUNsRCx5RUFBeUU7SUFDaEUsT0FBTyxHQUFzQix1QkFBdUIsQ0FBQyxTQUFTLEVBQUU7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LENBQUMsNkJBQTZCLEVBQUU7b0JBQ2hFLFVBQVUsRUFBRyxJQUFJLENBQUMsT0FBMkIsQ0FBQyxFQUFFO29CQUNoRCxNQUFNO2lCQUNQLENBQUMsQ0FBQztnQkFDSCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNQLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFTyxXQUFXO1FBQ2pCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDeEIsQ0FBQztJQUNILENBQUM7SUFFRCxnR0FBZ0c7SUFDaEcsT0FBTztRQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMvQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXcml0YWJsZVNpZ25hbCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBGYXBpQ2xpZW50LFxuICBhZHZhbmNlV2l0aENhcHRjaGEsXG4gIGF0bGFzQ2FwdGNoYUxhYmVscyxcbiAgYXR0ZW1wdFBhc3N3b3JkSG9sZFByb29mLFxuICBwcmVwYXJlUGFzc3dvcmRIb2xkUHJvb2YsXG4gIGNyZWF0ZUNhcHRjaGFDb250cm9sbGVyLFxuICBjcmVhdGVQYXNza2V5U2lnbkluQ29udHJvbGxlcixcbiAgY3JlYXRlUGFzc2tleVNpZ25VcCxcbiAgY3JlYXRlU2lnblVwLFxuICBmaW5pc2hQYXNza2V5U2lnblVwLFxuICBmZXRjaEluc3RhbmNlU2V0dGluZ3MsXG4gIGZldGNoTGFzdFNpZ25Jbk1ldGhvZCxcbiAgc3RhcnRTaWduSW5XaXRoQXRsYXMsXG4gIGNyZWF0ZU1mYUVucm9sbG1lbnQsXG4gIGFja25vd2xlZGdlRXhpc3RpbmdBY2NvdW50LFxuICBhY2tub3dsZWRnZVJlY292ZXJ5Q29kZXMsXG4gIHBlbmRpbmdFeGlzdGluZ0FjY291bnROb3RpY2UsXG4gIHBlbmRpbmdSZWNvdmVyeUNvZGVzLFxuICBtZmFDaG9pY2VzRnJvbSxcbiAgcHJlcGFyZVNlY29uZEZhY3RvckNvZGUsXG4gIHJlc2VuZFNpZ25VcFZlcmlmaWNhdGlvbixcbiAgZmxvd05lZWRzQ2FwdGNoYSxcbiAgc2lnbkluQ2FwdGNoYU9wdGlvbnMsXG4gIGZsb3dGcm9tUGVuZGluZyxcbiAgaW5pdGlhbEZsb3csXG4gIG5leHRTdGVwLFxuICBvZmZlcmVkRmlyc3RGYWN0b3JzLFxuICBwb2xsQXR0ZW1wdCxcbiAgcHJlcGFyZUZhY3RvcixcbiAgcGxhbkZpcnN0RmFjdG9yLFxuICBzaG91bGRLZWVwUG9sbGluZyxcbiAgUG9saWN5QWNjZXB0YW5jZUNvbnRyb2xsZXIsXG4gIGxvYWRQb2xpY2llcyxcbiAgdHlwZSBDYXB0Y2hhQ29udHJvbGxlcixcbiAgdHlwZSBGbG93U3RhdGUsXG4gIHR5cGUgSW5zdGFuY2VTZXR0aW5ncyxcbiAgdHlwZSBNZmFDaG9pY2VzLFxuICB0eXBlIE1mYUVucm9sbG1lbnRDb250cm9sbGVyLFxuICB0eXBlIE1mYUVucm9sbG1lbnRTdGF0ZSxcbiAgdHlwZSBQYXNza2V5U2lnbkluQ29udHJvbGxlcixcbn0gZnJvbSAnQGF0bGFzYXV0aC9qcyc7XG5pbXBvcnQgeyBFTl9VUywgdHJhbnNsYXRlIH0gZnJvbSAnLi4vaTE4bic7XG5cbi8qKlxuICogVGhlIHNlcnZlci1kcml2ZW4gc2lnbi1pbiAvIHNpZ24tdXAgZW5naW5lLCBzaGFyZWQgYnkgYDxhdGxhcy1zaWduLWluPmAgYW5kXG4gKiBgPGF0bGFzLXNpZ24tdXA+YCDigJQgdGhlIEFuZ3VsYXIgY291bnRlcnBhcnQgb2YgUmVhY3QncyBgdXNlRmxvd2AgaG9vay5cbiAqXG4gKiBJdCBvd25zIG5vIGRlY2lzaW9uIGFib3V0IHdoYXQgY29tZXMgbmV4dDogZXZlcnkgc3RhdHVzIGNvbWVzIGJhY2sgZnJvbSB0aGVcbiAqIHNlcnZlciB2aWEgYGFkdmFuY2VgLCBhbmQgdGhpcyBjb250cm9sbGVyIG9ubHkgcG9zdHMgd2hhdGV2ZXIgdGhlIGN1cnJlbnQgc3RlcFxuICogbmVlZHMgYW5kIHJlLXJlbmRlcnMgdGhlIHJldHVybmVkIHN0YXR1cy4gU3RhdGUgbGl2ZXMgaW4gYSBzaWduYWwgc28gdGVtcGxhdGVzXG4gKiB1cGRhdGUgd2hldGhlciB0aGUgYXBwIHJ1bnMgem9uZWQgb3Igem9uZWxlc3MuXG4gKlxuICogYDxhdGxhcy1zaWduLXVwPmAgc3RhcnRzIHRoZSBhdHRlbXB0IHdpdGgge0BsaW5rIGNyZWF0ZX1cbiAqIChgUE9TVCAvdjEvY2xpZW50L3NpZ25fdXBzYCk7IHRoZSBlbWFpbGVkLWNvZGUgc3RlcCB0aGVuIHJ1bnMgdGhyb3VnaCB0aGUgc2FtZVxuICoge0BsaW5rIHN1Ym1pdH0uIEJvdGggZmxvd3MgZHJhdyB0aGUgaW5zdGFuY2UncyBjYXB0Y2hhIChmcm9tXG4gKiB7QGxpbmsgbG9hZFNldHRpbmdzfSkgd2hlbiBpdCBpcyByZXF1aXJlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIEF0bGFzRmxvd0NvbnRyb2xsZXIge1xuICByZWFkb25seSBzdGF0ZTogV3JpdGFibGVTaWduYWw8Rmxvd1N0YXRlPjtcbiAgLyoqXG4gICAqIFRoZSBpbnN0YW5jZSdzIHB1YmxpYyBzaWduLWluIC8gc2lnbi11cCBzZXR0aW5ncyAoY2FwdGNoYSwgc2lnbi11cCBmaWVsZHMsXG4gICAqIGxlZ2FsIGNvbnNlbnQpIGZyb20gYEdFVCAvdjEvYXBwZWFyYW5jZWA7IG51bGwgdW50aWwge0BsaW5rIGxvYWRTZXR0aW5nc31cbiAgICogcmVzb2x2ZXMsIG9yIHdoZW4gdGhlIHNlcnZlciBjb3VsZCBub3QgYmUgcmVhY2hlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNldHRpbmdzID0gc2lnbmFsPEluc3RhbmNlU2V0dGluZ3MgfCBudWxsPihudWxsKTtcbiAgLyoqXG4gICAqIFRoZSBtZXRob2QgdGhpcyBicm93c2VyIGxhc3Qgc2lnbmVkIGluIHdpdGggKGBwYXNzd29yZGAsIGBvYXV0aF9naXRodWJgLCDigKYpXG4gICAqIGZvciB0aGUgXCJMYXN0IHVzZWRcIiBoaW50OyBudWxsIHdoZW4gbm9uZSwgb3IgdGhlIGluc3RhbmNlIHR1cm5lZCBpdCBvZmYuXG4gICAqL1xuICByZWFkb25seSBsYXN0TWV0aG9kID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICAvKiogVGhlIHNpZ24taW4gY2FwdGNoYSAoaWRlbnRpZmllciBzdGVwIC8gYG5lZWRzX2NhcHRjaGFgIGNoYWxsZW5nZSkuICovXG4gIHJlYWRvbmx5IGNhcHRjaGE6IENhcHRjaGFDb250cm9sbGVyID0gY3JlYXRlQ2FwdGNoYUNvbnRyb2xsZXIodW5kZWZpbmVkLCB7XG4gICAgLy8gVGhlIEF0bGFzIGNhcHRjaGEncyB3b3JkcyBmb2xsb3cgdGhlIGZvcm0ncyBjYXRhbG9nIChyZWFkIHdoZW4gZHJhd24pLlxuICAgIGF0bGFzTGFiZWxzOiAoKSA9PiBhdGxhc0NhcHRjaGFMYWJlbHModGhpcy50KSxcbiAgfSk7XG4gIC8qKiBUaGUgc2lnbi11cCBjYXB0Y2hhICh0aGUgY3JlYXRlLWFjY291bnQgc3RlcCkuICovXG4gIHJlYWRvbmx5IHNpZ25VcENhcHRjaGE6IENhcHRjaGFDb250cm9sbGVyID0gY3JlYXRlQ2FwdGNoYUNvbnRyb2xsZXIodW5kZWZpbmVkLCB7XG4gICAgYXRsYXNMYWJlbHM6ICgpID0+IGF0bGFzQ2FwdGNoYUxhYmVscyh0aGlzLnQpLFxuICB9KTtcbiAgLyoqIFdoZXRoZXIge0BsaW5rIGNhcHRjaGF9IGN1cnJlbnRseSBkcmF3cyBhIHdpZGdldCAoZm9yIHRlbXBsYXRlcykuICovXG4gIHJlYWRvbmx5IGNhcHRjaGFEcmF3biA9IHNpZ25hbChmYWxzZSk7XG4gIC8qKiBXaGV0aGVyIHtAbGluayBzaWduVXBDYXB0Y2hhfSBjdXJyZW50bHkgZHJhd3MgYSB3aWRnZXQgKGZvciB0ZW1wbGF0ZXMpLiAqL1xuICByZWFkb25seSBzaWduVXBDYXB0Y2hhRHJhd24gPSBzaWduYWwoZmFsc2UpO1xuICAvKipcbiAgICogVGhlIGZpcnN0IGZhY3RvciB0aGUgc2VydmVyIHdhcyBhc2tlZCB0byBzZW5kICh7QGxpbmsgcHJlcGFyZX0pIG9uIHRoZVxuICAgKiBjdXJyZW50IGBuZWVkc19maXJzdF9mYWN0b3JgIHN0ZXAg4oCUIHRoZSBmb3JtIHRoZW4gY29sbGVjdHMgaXRzIGNvZGUuIE51bGxcbiAgICogb3RoZXJ3aXNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJlcGFyZWRGYWN0b3IgPSBzaWduYWw8J2VtYWlsX2NvZGUnIHwgJ2VtYWlsX2xpbmsnIHwgbnVsbD4obnVsbCk7XG4gIC8qKlxuICAgKiBcIkVtYWlsIG1lIGEgY29kZSBpbnN0ZWFkXCIgYXQgdGhlIHNlY29uZCBmYWN0b3IgKHtAbGluayBzZW5kRW1haWxTZWNvbmRGYWN0b3J9KTpcbiAgICogaW4gZmxpZ2h0LCB3aGVyZSB0aGUgY29kZSB3ZW50LCBvciB3aHkgaXQgd2FzIG5vdCBzZW50LiBOdWxsIHVudGlsIGFza2VkLFxuICAgKiBhbmQgYWdhaW4gb25jZSB0aGUgZmxvdyBsZWF2ZXMgdGhhdCBzdGVwLlxuICAgKi9cbiAgcmVhZG9ubHkgZW1haWxTZWNvbmRGYWN0b3IgPSBzaWduYWw8eyBidXN5PzogYm9vbGVhbjsgc2VudFRvPzogc3RyaW5nOyBlcnJvcj86IHN0cmluZyB9IHwgbnVsbD4obnVsbCk7XG4gIC8qKiBcIlRleHQgbWUgYSBjb2RlIGluc3RlYWRcIiBhdCB0aGUgc2Vjb25kIGZhY3RvciAoe0BsaW5rIHNlbmRTbXNTZWNvbmRGYWN0b3J9KTogYXMge0BsaW5rIGVtYWlsU2Vjb25kRmFjdG9yfS4gKi9cbiAgcmVhZG9ubHkgc21zU2Vjb25kRmFjdG9yID0gc2lnbmFsPHsgYnVzeT86IGJvb2xlYW47IHNlbnRUbz86IHN0cmluZzsgZXJyb3I/OiBzdHJpbmcgfSB8IG51bGw+KG51bGwpO1xuICAvKipcbiAgICogVGhlIE1GQSBlbnJvbG1lbnQgc3RlcCAoYG5lZWRzX21mYV9lbnJvbGxtZW50YCk6IHRoZSBhdXRoZW50aWNhdG9yIGFwcCdzXG4gICAqIHNldHVwIChRUiBjb2RlLCBzZXR1cCBrZXkpIG9yIGEgdGV4dGVkIGNvZGUuIFN0YXJ0ZWQgYW5kIHJlc2V0IHdpdGggdGhlIGZsb3cuXG4gICAqL1xuICByZWFkb25seSBlbnJvbGxtZW50OiBNZmFFbnJvbGxtZW50Q29udHJvbGxlcjtcbiAgLyoqIHtAbGluayBlbnJvbGxtZW50fSdzIHN0YXRlLCBmb3IgdGVtcGxhdGVzLiAqL1xuICByZWFkb25seSBlbnJvbGxtZW50U3RhdGU6IFdyaXRhYmxlU2lnbmFsPE1mYUVucm9sbG1lbnRTdGF0ZT47XG4gIC8qKlxuICAgKiBUaGUgaW5zdGFuY2UncyBwb2xpY2llcyAodGVybXMsIHByaXZhY3ksIOKApikgZm9yIHRoZSBjcmVhdGUtYWNjb3VudCBmb3JtOlxuICAgKiB7QGxpbmsgY3JlYXRlfSBzZW5kcyB0aGVpciBhY2NlcHRhbmNlcyBhbmQgcmVsb2FkcyB0aGVtIGFmdGVyIGEgcmVmdXNhbC5cbiAgICovXG4gIHJlYWRvbmx5IHBvbGljaWVzID0gbmV3IFBvbGljeUFjY2VwdGFuY2VDb250cm9sbGVyKFtdKTtcbiAgLyoqXG4gICAqIFBhc3NrZXkgc2lnbi1pbiAodGhlIFwiU2lnbiBpbiB3aXRoIGEgcGFzc2tleVwiIGJ1dHRvbiBhbmQgcGFzc2tleSBhdXRvZmlsbCBvblxuICAgKiB0aGUgaWRlbnRpZmllciBmaWVsZCkuIFRoZSBvdXRjb21lIGdvZXMgdGhyb3VnaCB0aGUgc2FtZSBjb21wbGV0aW9uIGFzIGV2ZXJ5IHNpZ24taW4uXG4gICAqL1xuICByZWFkb25seSBwYXNza2V5OiBQYXNza2V5U2lnbkluQ29udHJvbGxlcjtcbiAgLyoqIFdoZXRoZXIgdGhpcyBicm93c2VyIGNhbiBydW4gV2ViQXV0aG47IGA8YXRsYXMtc2lnbi1pbj5gIHNldHMgaXQgYWZ0ZXIgaXQgaXMgY3JlYXRlZCBpbiBhIGJyb3dzZXIuICovXG4gIHJlYWRvbmx5IHBhc3NrZXlTdXBwb3J0ZWQgPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIHBvbGxUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgaWRlbnRpZmllciA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50OiBGYXBpQ2xpZW50LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVsb2FkOiAoKSA9PiBQcm9taXNlPGJvb2xlYW4+LFxuICAgIHBlbmRpbmc6IHsgaWQ6IHN0cmluZzsgc3RhdHVzOiBzdHJpbmcgfSB8IG51bGwsXG4gICAgLyoqIFJlc29sdmVzIHRoZSBjYXB0Y2hhIG1lc3NhZ2VzJyBjYXRhbG9nIGtleXMuIERlZmF1bHRzIHRvIGVuLVVTLiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdDogKGtleTogc3RyaW5nKSA9PiBzdHJpbmcgPSAoa2V5KSA9PiB0cmFuc2xhdGUoRU5fVVMsIGtleSksXG4gICAgLyoqIFdhaXQgZm9yIHtAbGluayBjb250aW51ZUFmdGVyRXhpc3RpbmdBY2NvdW50fSAoYDxhdGxhcy1zaWduLXVwPmAgZHJhd3MgdGhlIG5vdGljZSkuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBob2xkRXhpc3RpbmdBY2NvdW50Tm90aWNlID0gZmFsc2UsXG4gICkge1xuICAgIC8vIFNlZWRlZCBmcm9tIGEgcmVkaXJlY3QgdGhhdCBjYW1lIGJhY2sgbWlkLWZsb3cgKGUuZy4gT0F1dGggbmVlZGluZyBhIHNlY29uZFxuICAgIC8vIGZhY3Rvcikgc28gdGhlIHVzZXIgcmVzdW1lcyBhdCB0aGUgZGVtYW5kZWQgc3RlcCBpbnN0ZWFkIG9mIHN0YXJ0aW5nIG92ZXIuXG4gICAgdGhpcy5zdGF0ZSA9IHNpZ25hbDxGbG93U3RhdGU+KHBlbmRpbmcgPyBmbG93RnJvbVBlbmRpbmcocGVuZGluZykgOiBpbml0aWFsRmxvdyk7XG4gICAgdGhpcy5lbnJvbGxtZW50ID0gY3JlYXRlTWZhRW5yb2xsbWVudCh0aGlzLmNsaWVudCwgKCkgPT4gdGhpcy5tZmFDaG9pY2VzKCkpO1xuICAgIHRoaXMuZW5yb2xsbWVudFN0YXRlID0gc2lnbmFsPE1mYUVucm9sbG1lbnRTdGF0ZT4odGhpcy5lbnJvbGxtZW50LnN0YXRlKTtcbiAgICB0aGlzLmVucm9sbG1lbnQuc3Vic2NyaWJlKChuZXh0KSA9PiB0aGlzLmVucm9sbG1lbnRTdGF0ZS5zZXQobmV4dCkpO1xuICAgIHRoaXMucGFzc2tleSA9IGNyZWF0ZVBhc3NrZXlTaWduSW5Db250cm9sbGVyKHtcbiAgICAgIGNsaWVudDogdGhpcy5jbGllbnQsXG4gICAgICBvblN0YXJ0OiAoKSA9PiB0aGlzLnN0YXRlLnVwZGF0ZSgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgYnVzeTogdHJ1ZSwgZXJyb3JzOiBbXSB9KSksXG4gICAgICBvblJlc3VsdDogKG5leHQpID0+IHRoaXMuZmluaXNoKG5leHQpLFxuICAgICAgY2FwdGNoYTogKCkgPT4gdGhpcy5jYXB0Y2hhLFxuICAgICAgY2FuY2VsbGVkTWVzc2FnZTogKCkgPT4gdGhpcy50KCdzaWduSW4ucGFzc2tleUNhbmNlbGxlZCcpLFxuICAgIH0pO1xuICAgIHRoaXMuc3luY0NhcHRjaGEoKTtcbiAgICB0aGlzLnN5bmNFbnJvbGxtZW50KCk7XG4gIH1cblxuICAvKiogV2h5IFwiQ29udGludWUgd2l0aCBBdGxhc1wiIGNvdWxkIG5vdCBzdGFydCAodGhlIHNlcnZlcidzIG1lc3NhZ2UpOyBudWxsIG90aGVyd2lzZS4gKi9cbiAgcmVhZG9ubHkgc2lnbkluV2l0aEF0bGFzRXJyb3IgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqXG4gICAqIFwiQ29udGludWUgd2l0aCBBdGxhc1wiICh3aGVuIGBzZXR0aW5ncygpLnNpZ25JbldpdGhBdGxhc2AgaXMgc2V0KTogc3RhcnRzIHRoZVxuICAgKiBTU08gc2lnbi1pbiBhbmQgc2VuZHMgdGhlIGJyb3dzZXIgdG8gQXRsYXMuXG4gICAqL1xuICBhc3luYyBzaWduSW5XaXRoQXRsYXMoY29ubmVjdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcbiAgICB0aGlzLnNpZ25JbldpdGhBdGxhc0Vycm9yLnNldChudWxsKTtcbiAgICBjb25zdCBzdGFydGVkID0gYXdhaXQgc3RhcnRTaWduSW5XaXRoQXRsYXModGhpcy5jbGllbnQsIGNvbm5lY3Rpb25JZCwgd2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgIGlmICgndXJsJyBpbiBzdGFydGVkKSB3aW5kb3cubG9jYXRpb24uYXNzaWduKHN0YXJ0ZWQudXJsKTtcbiAgICBlbHNlIHRoaXMuc2lnbkluV2l0aEF0bGFzRXJyb3Iuc2V0KHN0YXJ0ZWQuZXJyb3IpO1xuICB9XG5cbiAgLyoqIFwiU2lnbiBpbiB3aXRoIGEgcGFzc2tleVwiIGlzIG9mZmVyZWQ6IHRoZSBmaXJzdCBzdGVwLCB0aGUgaW5zdGFuY2UgdHVybmVkIHBhc3NrZXkgc2lnbi1pbiBvbiwgYW5kIHRoZSBicm93c2VyIGNhbi4gKi9cbiAgcGFzc2tleU9mZmVyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGFzc2tleVN1cHBvcnRlZCgpICYmICF0aGlzLnN0YXRlKCkuYXR0ZW1wdCAmJiB0aGlzLnNldHRpbmdzKCk/LnBhc3NrZXlTaWduSW4gPT09IHRydWU7XG4gIH1cblxuICAvKiogV2hhdCB0aGUgYXBwIGxldHMgdGhlIE1GQSBzdGVwcyBvZmZlciAoZnJvbSB7QGxpbmsgc2V0dGluZ3N9KS4gKi9cbiAgbWZhQ2hvaWNlcygpOiBNZmFDaG9pY2VzIHtcbiAgICByZXR1cm4gbWZhQ2hvaWNlc0Zyb20odGhpcy5zZXR0aW5ncygpPy5hY2NvdW50KTtcbiAgfVxuXG4gIC8qKiBTdGFydCB0aGUgZW5yb2xtZW50IHN0ZXAgZm9yIGl0cyBhdHRlbXB0LCBvciByZXNldCBpdCBvbmNlIHRoZSBmbG93IGxlYXZlcy4gKi9cbiAgcHJpdmF0ZSBzeW5jRW5yb2xsbWVudCgpOiB2b2lkIHtcbiAgICBjb25zdCBhdHRlbXB0ID0gdGhpcy5zdGF0ZSgpLmF0dGVtcHQ7XG4gICAgaWYgKGF0dGVtcHQ/LnN0YXR1cyA9PT0gJ25lZWRzX21mYV9lbnJvbGxtZW50JyAmJiBhdHRlbXB0LmlkKSB0aGlzLmVucm9sbG1lbnQuc3RhcnQoYXR0ZW1wdC5pZCk7XG4gICAgZWxzZSB0aGlzLmVucm9sbG1lbnQucmVzZXQoKTtcbiAgfVxuXG4gIC8qKiBGZXRjaCB0aGUgaW5zdGFuY2UncyBwdWJsaWMgc2V0dGluZ3MgYW5kIGRyYXcgd2hhdGV2ZXIgY2FwdGNoYSB0aGV5IHJlcXVpcmUuICovXG4gIGFzeW5jIGxvYWRTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsb2FkZWQgPSBhd2FpdCBmZXRjaEluc3RhbmNlU2V0dGluZ3ModGhpcy5jbGllbnQpO1xuICAgIGlmIChsb2FkZWQpIHtcbiAgICAgIHRoaXMuc2V0dGluZ3Muc2V0KGxvYWRlZCk7XG4gICAgICB0aGlzLnN5bmNDYXB0Y2hhKCk7XG4gICAgICBpZiAobG9hZGVkLmFjY291bnQubGFzdFNpZ25Jbk1ldGhvZCkgdGhpcy5sYXN0TWV0aG9kLnNldChhd2FpdCBmZXRjaExhc3RTaWduSW5NZXRob2QodGhpcy5jbGllbnQpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZpcnN0IGZhY3RvcnMgdG8gb2ZmZXIgb24gYSBgbmVlZHNfZmlyc3RfZmFjdG9yYCBzdGVwOiB0aGUgc2VydmVyJ3MgbGlzdFxuICAgKiB3aXRob3V0IGVtYWlsIGNvZGUgLyBsaW5rIHdoaWxlIHRoZSBhcHAgY2Fubm90IGRlbGl2ZXIgZW1haWxcbiAgICogKGBzZXR0aW5ncy5lbWFpbERlbGl2ZXJ5LmF2YWlsYWJsZSA9PT0gZmFsc2VgKS4gRW1wdHkgb24gYW55IG90aGVyIHN0ZXAuXG4gICAqL1xuICBmaXJzdEZhY3RvcnMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGF0dGVtcHQgPSB0aGlzLnN0YXRlKCkuYXR0ZW1wdDtcbiAgICBjb25zdCBzdGVwID0gYXR0ZW1wdCA/IG5leHRTdGVwKGF0dGVtcHQpIDogbnVsbDtcbiAgICBpZiAoc3RlcD8ua2luZCAhPT0gJ2NvbGxlY3RfZmlyc3RfZmFjdG9yJykgcmV0dXJuIFtdO1xuICAgIGNvbnN0IG9mZmVyZWQgPSBvZmZlcmVkRmlyc3RGYWN0b3JzKHN0ZXAuc3RyYXRlZ2llcywgdGhpcy5zZXR0aW5ncygpPy5lbWFpbERlbGl2ZXJ5KTtcbiAgICBjb25zdCBwcm9vZiA9IHRoaXMuaG9sZFByb29mKCk7XG4gICAgcmV0dXJuIHByb29mICYmICFvZmZlcmVkLmluY2x1ZGVzKHByb29mKSA/IFsuLi5vZmZlcmVkLCBwcm9vZl0gOiBvZmZlcmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBlbWFpbGVkIHByb29mIGEgcGFzc3dvcmQgaG9sZCBzdGlsbCB3YWl0cyBvbiAoYEZsb3dTdGF0ZS5wYXNzd29yZEhvbGRgKTogdGhlXG4gICAqIGNvZGUsIG9yIGEgbGluayB3aGVyZSB0aGUgaW5zdGFuY2UgdmVyaWZpZXMgYnkgbGluayBvbmx5LiBOdWxsIHdpdGggbm8gaG9sZCwgb25jZVxuICAgKiBwcm92ZW4sIG9yIHdoaWxlIHRoZSBhcHAgY2Fubm90IGRlbGl2ZXIgZW1haWwuXG4gICAqL1xuICBob2xkUHJvb2YoKTogJ2VtYWlsX2NvZGUnIHwgJ2VtYWlsX2xpbmsnIHwgbnVsbCB7XG4gICAgY29uc3QgaG9sZCA9IHRoaXMuc3RhdGUoKS5wYXNzd29yZEhvbGQ7XG4gICAgaWYgKCFob2xkIHx8IGhvbGQucmVsZWFzZWQgfHwgdGhpcy5zZXR0aW5ncygpPy5lbWFpbERlbGl2ZXJ5Py5hdmFpbGFibGUgPT09IGZhbHNlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncygpPy5hY2NvdW50Py5lbWFpbFZlcmlmaWNhdGlvbiA9PT0gJ2xpbmsnID8gJ2VtYWlsX2xpbmsnIDogJ2VtYWlsX2NvZGUnO1xuICB9XG5cbiAgLyoqIEJhY2sgZnJvbSB0aGUgZW1haWxlZCBmYWN0b3IgdG8gdGhlIHBhc3N3b3JkIGZpZWxkLiAqL1xuICB1c2VQYXNzd29yZCgpOiB2b2lkIHtcbiAgICB0aGlzLnByZXBhcmVkRmFjdG9yLnNldChudWxsKTtcbiAgICB0aGlzLnN0YXRlLnVwZGF0ZSgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgcHJlcGFyZWQ6IG51bGwsIHBvbGxTZWNyZXQ6IG51bGwsIGVycm9yczogW10gfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRydWUgd2hlbiBlbWFpbCArIHBhc3N3b3JkIHNpZ24tdXAgY2Fubm90IGNvbXBsZXRlIGJlY2F1c2UgdGhlIGFwcCBjYW5ub3RcbiAgICogc2VuZCB0aGUgdmVyaWZpY2F0aW9uIGVtYWlsIChgc2V0dGluZ3MuZW1haWxEZWxpdmVyeS5wYXNzd29yZFNpZ25VcCA9PT0gZmFsc2VgKTpcbiAgICogYDxhdGxhcy1zaWduLXVwPmAgc2hvd3MgdGhlIFwiY2FuJ3Qgc2VuZCBlbWFpbFwiIG5vdGljZSBpbnN0ZWFkIG9mIHRoZSBmb3JtLlxuICAgKi9cbiAgc2lnblVwRW1haWxVbmF2YWlsYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncygpPy5lbWFpbERlbGl2ZXJ5LnBhc3N3b3JkU2lnblVwID09PSBmYWxzZTtcbiAgfVxuXG4gIC8qKiBGYWxzZSB3aGVuIGEgcGFzc3dvcmQgcmVzZXQgZW1haWwgY2Fubm90IGJlIGRlbGl2ZXJlZCDigJQgaGlkZSBcIkZvcmdvdCBwYXNzd29yZD9cIi4gKi9cbiAgcGFzc3dvcmRSZXNldEF2YWlsYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncygpPy5lbWFpbERlbGl2ZXJ5LnBhc3N3b3JkUmVzZXQgIT09IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzayB0aGUgc2VydmVyIHRvIGVtYWlsIGEgc2lnbi1pbiBjb2RlIGZvciB0aGUgY3VycmVudCBgbmVlZHNfZmlyc3RfZmFjdG9yYFxuICAgKiBzdGVwIChgUE9TVCDigKYvcHJlcGFyZV9maXJzdF9mYWN0b3JgKTsgdGhlIGZvcm0gdGhlbiBjb2xsZWN0cyB0aGUgY29kZSwgd2hpY2hcbiAgICoge0BsaW5rIHN1Ym1pdH0gcG9zdHMgYXMgdGhlIGBlbWFpbF9jb2RlYCBzdHJhdGVneS4gV2hpbGUgYSBwYXNzd29yZCBob2xkIHdhaXRzXG4gICAqIG9uIGl0ICh7QGxpbmsgaG9sZFByb29mfSksIHRoaXMgZW1haWxzIHRoYXQgcHJvb2YgaW5zdGVhZC5cbiAgICovXG4gIGFzeW5jIHByZXBhcmUoc3RyYXRlZ3k6ICdlbWFpbF9jb2RlJyB8ICdlbWFpbF9saW5rJyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5maXJzdEZhY3RvcnMoKS5pbmNsdWRlcyhzdHJhdGVneSkpIHJldHVybjtcbiAgICBjb25zdCBwcm9vZiA9IHRoaXMuaG9sZFByb29mKCk7XG4gICAgdGhpcy5zdGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIGJ1c3k6IHRydWUsIGVycm9yczogW10gfSkpO1xuICAgIGNvbnN0IG5leHQgPVxuICAgICAgc3RyYXRlZ3kgPT09IHByb29mXG4gICAgICAgID8gYXdhaXQgcHJlcGFyZVBhc3N3b3JkSG9sZFByb29mKHRoaXMuY2xpZW50LCB0aGlzLnN0YXRlKCksIHByb29mKVxuICAgICAgICA6IGF3YWl0IHByZXBhcmVGYWN0b3IodGhpcy5jbGllbnQsIHRoaXMuc3RhdGUoKSwgc3RyYXRlZ3kpO1xuICAgIHRoaXMuc2V0U3RhdGUobmV4dCk7XG4gICAgaWYgKCFuZXh0LmVycm9ycy5sZW5ndGgpIHRoaXMucHJlcGFyZWRGYWN0b3Iuc2V0KHN0cmF0ZWd5KTtcbiAgICB0aGlzLnN5bmNQb2xsaW5nKCk7XG4gIH1cblxuICAvKiogS2VlcCBib3RoIGNhcHRjaGFzIGluIHN0ZXAgd2l0aCB0aGUgc2V0dGluZ3MgYW5kIHRoZSBmbG93J3MgY3VycmVudCBzdGVwLiAqL1xuICBwcml2YXRlIHN5bmNDYXB0Y2hhKCk6IHZvaWQge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zZXR0aW5ncygpO1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdGF0ZSgpO1xuICAgIHRoaXMuY2FwdGNoYS5jb25maWd1cmUoXG4gICAgICBzaWduSW5DYXB0Y2hhT3B0aW9ucyhzZXR0aW5ncz8uY2FwdGNoYUZsb3dzLnNpZ25Jbiwgc3RhdGUsICgpID0+IHZvaWQgdGhpcy5zdWJtaXQoe30pKSxcbiAgICApO1xuICAgIGNvbnN0IHNpZ25VcEZsb3cgPSBzZXR0aW5ncz8uY2FwdGNoYUZsb3dzLnNpZ25VcDtcbiAgICB0aGlzLnNpZ25VcENhcHRjaGEuY29uZmlndXJlKHtcbiAgICAgIGZsb3c6IHNpZ25VcEZsb3csXG4gICAgICBhY3RpdmU6ICFzdGF0ZS5hdHRlbXB0ICYmIGZsb3dOZWVkc0NhcHRjaGEoc2lnblVwRmxvdyksXG4gICAgfSk7XG4gICAgdGhpcy5jYXB0Y2hhRHJhd24uc2V0KHRoaXMuY2FwdGNoYS5uZWVkZWQpO1xuICAgIHRoaXMuc2lnblVwQ2FwdGNoYURyYXduLnNldCh0aGlzLnNpZ25VcENhcHRjaGEubmVlZGVkKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3RhdGUobmV4dDogRmxvd1N0YXRlKTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLnN0YXRlKCk7XG4gICAgY29uc3QgcHJldmlvdXNJZCA9IHByZXZpb3VzLmF0dGVtcHQ/LmlkID8/IG51bGw7XG4gICAgdGhpcy5zdGF0ZS5zZXQobmV4dCk7XG4gICAgLy8gQSBwcm92ZW4gaG9sZCBnb2VzIGJhY2sgdG8gdGhlIHBhc3N3b3JkIGZpZWxkLlxuICAgIGlmIChuZXh0LnBhc3N3b3JkSG9sZD8ucmVsZWFzZWQgJiYgIXByZXZpb3VzLnBhc3N3b3JkSG9sZD8ucmVsZWFzZWQpIHRoaXMucHJlcGFyZWRGYWN0b3Iuc2V0KG51bGwpO1xuICAgIC8vIEEgcHJlcGFyZWQgZmFjdG9yIGJlbG9uZ3MgdG8gdGhlIGZpcnN0LWZhY3RvciBzdGVwIGl0IHdhcyBzZW50IGZvci5cbiAgICBpZiAobmV4dC5hdHRlbXB0Py5zdGF0dXMgIT09ICduZWVkc19maXJzdF9mYWN0b3InKSB0aGlzLnByZXBhcmVkRmFjdG9yLnNldChudWxsKTtcbiAgICAvLyBBbiBlbWFpbGVkIHNlY29uZC1mYWN0b3IgY29kZSBiZWxvbmdzIHRvIHRoZSBzZWNvbmQtZmFjdG9yIHN0ZXAgb2YgdGhpcyBhdHRlbXB0LlxuICAgIGlmIChuZXh0LmF0dGVtcHQ/LnN0YXR1cyAhPT0gJ25lZWRzX3NlY29uZF9mYWN0b3InIHx8IChuZXh0LmF0dGVtcHQ/LmlkID8/IG51bGwpICE9PSBwcmV2aW91c0lkKSB7XG4gICAgICB0aGlzLmVtYWlsU2Vjb25kRmFjdG9yLnNldChudWxsKTtcbiAgICAgIHRoaXMuc21zU2Vjb25kRmFjdG9yLnNldChudWxsKTtcbiAgICB9XG4gICAgdGhpcy5zeW5jQ2FwdGNoYSgpO1xuICAgIHRoaXMuc3luY0Vucm9sbG1lbnQoKTtcbiAgICB0aGlzLmF1dG9TZW5kKCk7XG4gIH1cblxuICBwcml2YXRlIGF1dG9TZW50Rm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgLyoqXG4gICAqIFdpdGggbm8gcGFzc3dvcmQgb24gb2ZmZXIsIGVtYWlsIHRoZSBjb2RlIGFzIHNvb24gYXMgdGhlIHNlcnZlciBhc2tzIGZvciBhXG4gICAqIGZpcnN0IGZhY3RvciDigJQgb25jZSBwZXIgYXR0ZW1wdCwgc28gYSBmYWlsZWQgc2VuZCB3YWl0cyBmb3IgdGhlIHVzZXIncyByZXRyeVxuICAgKiAodGhlIFwiRW1haWwgbWUgYSBjb2RlXCIgYnV0dG9uKSBpbnN0ZWFkIG9mIGxvb3BpbmcuXG4gICAqL1xuICBwcml2YXRlIGF1dG9TZW5kKCk6IHZvaWQge1xuICAgIGNvbnN0IGlkID0gdGhpcy5zdGF0ZSgpLmF0dGVtcHQ/LmlkID8/IG51bGw7XG4gICAgaWYgKCFpZCB8fCB0aGlzLmF1dG9TZW50Rm9yID09PSBpZCB8fCB0aGlzLnByZXBhcmVkRmFjdG9yKCkpIHJldHVybjtcbiAgICBpZiAocGxhbkZpcnN0RmFjdG9yKHRoaXMuZmlyc3RGYWN0b3JzKCkpLmF1dG9TZW5kICE9PSAnZW1haWxfY29kZScpIHJldHVybjtcbiAgICB0aGlzLmF1dG9TZW50Rm9yID0gaWQ7XG4gICAgdm9pZCB0aGlzLnByZXBhcmUoJ2VtYWlsX2NvZGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZHZhbmNlIHRoZSBmbG93IHdpdGggdGhlIHZhbHVlcyB0aGUgdXNlciB0eXBlZC4gT24gY29tcGxldGlvbiwgZXhjaGFuZ2UgdGhlXG4gICAqIG9uZS10aW1lIHRpY2tldCBmb3IgY29va2llcyBvdmVyIGEgc2FtZS1vcmlnaW4gcmVxdWVzdCAoRkFQSSBpcyBjcm9zcy1vcmlnaW5cbiAgICogYW5kIGNhbm5vdCBzZXQgdGhlIGNvb2tpZSBvbiBpdHMgb3duIHJlc3BvbnNlKSwgdGhlbiByZS1ib290IHNvIHRoZSByZXN0IG9mXG4gICAqIHRoZSBhcHAgc2VlcyBhIHNpZ25lZC1pbiB1c2VyLlxuICAgKi9cbiAgYXN5bmMgc3VibWl0KHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc3RhdGUudXBkYXRlKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBidXN5OiB0cnVlLCBlcnJvcnM6IFtdIH0pKTtcblxuICAgIC8vIEEgY29kZSB0aGF0IGxpZnRzIGEgcGFzc3dvcmQgaG9sZCBnb2VzIHRvIGl0cyBvd24gYXR0ZW1wdCwgbm90IHRoaXMgc2lnbi1pbi5cbiAgICBpZiAodGhpcy5wcmVwYXJlZEZhY3RvcigpID09PSAnZW1haWxfY29kZScgJiYgdGhpcy5ob2xkUHJvb2YoKSA9PT0gJ2VtYWlsX2NvZGUnKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKGF3YWl0IGF0dGVtcHRQYXNzd29yZEhvbGRQcm9vZih0aGlzLmNsaWVudCwgdGhpcy5zdGF0ZSgpLCB2YWx1ZXMuY29kZSA/PyAnJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBvdXQgPSBhd2FpdCBhZHZhbmNlV2l0aENhcHRjaGEodGhpcy5jbGllbnQsIHRoaXMuc3RhdGUoKSwgdmFsdWVzLCB7XG4gICAgICBjYXB0Y2hhOiB0aGlzLmNhcHRjaGEsXG4gICAgICBpZGVudGlmaWVyOiB0aGlzLmlkZW50aWZpZXIsXG4gICAgICB0OiB0aGlzLnQsXG4gICAgfSk7XG4gICAgdGhpcy5pZGVudGlmaWVyID0gb3V0LmlkZW50aWZpZXI7XG4gICAgYXdhaXQgdGhpcy5maW5pc2gob3V0LnN0YXRlKTtcbiAgfVxuXG4gIC8qKiBMb2FkIHRoZSBzaWduLXVwJ3MgcG9saWNpZXMgaW50byB7QGxpbmsgcG9saWNpZXN9IChgPGF0bGFzLXNpZ24tdXA+YCBjYWxscyBpdCBvbiBpbml0KS4gKi9cbiAgYXN5bmMgbG9hZFBvbGljaWVzKGxvY2FsZT86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMucG9saWNpZXMuc2V0UG9saWNpZXMoYXdhaXQgbG9hZFBvbGljaWVzKHRoaXMuY2xpZW50LCB7IGxvY2FsZSB9KSk7XG4gIH1cblxuICAvKiogVGhlIHVzZXIgZGVjbGluZWQgYSBwb2xpY3kgYSBzaWduLWluIHdhcyB3YWl0aW5nIG9uOiBjYW5jZWwgdGhlIGF0dGVtcHQgYW5kIHNheSB3aHkuICovXG4gIGRlY2xpbmVQb2xpY3kodGl0bGU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUuc2V0KHtcbiAgICAgIC4uLmluaXRpYWxGbG93LFxuICAgICAgZXJyb3JzOiBbeyBjb2RlOiAnUE9MSUNZX0RFQ0xJTkVEJywgbWVzc2FnZTogdGhpcy50KCdwb2xpY3kuZGVjbGluZWQnKS5yZXBsYWNlKCd7cG9saWN5fScsIHRpdGxlKSB9XSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gYWNjb3VudCAoYFBPU1QgL3YxL2NsaWVudC9zaWduX3Vwc2ApIGZyb20gYSBjcmVhdGUtYWNjb3VudCBmb3JtJ3NcbiAgICogdmFsdWVzIOKAlCBlbWFpbCwgcGFzc3dvcmQgYW5kIGFueSBjb25maWd1cmVkIHNpZ24tdXAgZmllbGRzIOKAlCBjYXJyeWluZyB0aGVcbiAgICogc2lnbi11cCBjYXB0Y2hhJ3MgdG9rZW4gd2hlbiB0aGUgaW5zdGFuY2UgcmVxdWlyZXMgb25lLiBUaGUgZW1haWxlZCBjb2RlIGlzXG4gICAqIHRoZW4gcG9zdGVkIHdpdGgge0BsaW5rIHN1Ym1pdH0uXG4gICAqL1xuICBhc3luYyBjcmVhdGUodmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBjb25zZW50ID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc3RhdGUudXBkYXRlKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBidXN5OiB0cnVlLCBlcnJvcnM6IFtdIH0pKTtcbiAgICBjb25zdCBuZXh0ID0gYXdhaXQgY3JlYXRlU2lnblVwKHRoaXMuY2xpZW50LCB2YWx1ZXMsIHtcbiAgICAgIGNvbnNlbnQsXG4gICAgICBjYXB0Y2hhOiB0aGlzLnNpZ25VcENhcHRjaGEsXG4gICAgICB0OiB0aGlzLnQsXG4gICAgICBwb2xpY2llczogdGhpcy5wb2xpY2llcyxcbiAgICB9KTtcbiAgICBhd2FpdCB0aGlzLmZpbmlzaChuZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIkVtYWlsIG1lIGEgY29kZSBpbnN0ZWFkXCIgYXQgdGhlIHNlY29uZCBmYWN0b3IgKHRoZSBpbnN0YW5jZSdzXG4gICAqIGBhY2NvdW50LmVtYWlsU2Vjb25kRmFjdG9yYCk6IG1haWxzIGEgY29kZSB0byB0aGUgYWNjb3VudCdzIHZlcmlmaWVkIGVtYWlsO1xuICAgKiBpdCBpcyB0aGVuIHBvc3RlZCB3aXRoIHtAbGluayBzdWJtaXR9IGxpa2UgYW55IDJGQSBjb2RlLlxuICAgKi9cbiAgYXN5bmMgc2VuZEVtYWlsU2Vjb25kRmFjdG9yKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2VuZFNlY29uZEZhY3RvckNvZGUoJ2VtYWlsX2NvZGUnLCB0aGlzLmVtYWlsU2Vjb25kRmFjdG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBcIlRleHQgbWUgYSBjb2RlIGluc3RlYWRcIiBhdCB0aGUgc2Vjb25kIGZhY3RvciAod2hlcmUgdGhlIGFwcCBvZmZlcnMgdGV4dGVkXG4gICAqIGNvZGVzLCB7QGxpbmsgbWZhQ2hvaWNlc31gKCkuc21zYCk6IHRleHRzIGEgY29kZSB0byB0aGUgYWNjb3VudCdzIGVucm9sbGVkXG4gICAqIHBob25lOyBpdCBpcyB0aGVuIHBvc3RlZCB3aXRoIHtAbGluayBzdWJtaXR9IGxpa2UgYW55IDJGQSBjb2RlLlxuICAgKi9cbiAgYXN5bmMgc2VuZFNtc1NlY29uZEZhY3RvcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNlbmRTZWNvbmRGYWN0b3JDb2RlKCdzbXMnLCB0aGlzLnNtc1NlY29uZEZhY3Rvcik7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRTZWNvbmRGYWN0b3JDb2RlKFxuICAgIHN0cmF0ZWd5OiAnc21zJyB8ICdlbWFpbF9jb2RlJyxcbiAgICBvdXQ6IFdyaXRhYmxlU2lnbmFsPHsgYnVzeT86IGJvb2xlYW47IHNlbnRUbz86IHN0cmluZzsgZXJyb3I/OiBzdHJpbmcgfSB8IG51bGw+LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpZCA9IHRoaXMuc3RhdGUoKS5hdHRlbXB0Py5pZDtcbiAgICBpZiAoIWlkKSByZXR1cm47XG4gICAgb3V0LnNldCh7IGJ1c3k6IHRydWUgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgc2VudFRvIH0gPSBhd2FpdCBwcmVwYXJlU2Vjb25kRmFjdG9yQ29kZSh0aGlzLmNsaWVudCwgaWQsIHN0cmF0ZWd5KTtcbiAgICAgIG91dC5zZXQoeyBzZW50VG8gfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG91dC5zZXQoeyBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiB0aGlzLnQoJ2Vycm9yLmdlbmVyaWMnKSB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVzZW5kIGEgc2lnbi11cCdzIGVtYWlsZWQgY29kZSAvIGxpbmsgKHRoZSBlYXJsaWVyIG9uZSBzdG9wcyB3b3JraW5nKS4gKi9cbiAgYXN5bmMgcmVzZW5kU2lnblVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc3RhdGUudXBkYXRlKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBidXN5OiB0cnVlLCBlcnJvcnM6IFtdIH0pKTtcbiAgICB0aGlzLnN0YXRlLnNldChhd2FpdCByZXNlbmRTaWduVXBWZXJpZmljYXRpb24odGhpcy5jbGllbnQsIHRoaXMuc3RhdGUoKSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgcGFzc2tleS1vbmx5IHNpZ24tdXAgKGBQT1NUIC92MS9jbGllbnQvc2lnbl91cHMvcGFzc2tleWApIGZyb20gdGhlXG4gICAqIGNyZWF0ZS1hY2NvdW50IGZvcm0ncyB2YWx1ZXMg4oCUIG5vIHBhc3N3b3JkLiBPZmZlcmVkIHdoZW4gdGhlIGluc3RhbmNlJ3NcbiAgICogYGFjY291bnQucGFzc2tleVNpZ25VcGAgaXMgc2V0LlxuICAgKi9cbiAgYXN5bmMgY3JlYXRlV2l0aFBhc3NrZXkodmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBjb25zZW50ID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc3RhdGUudXBkYXRlKChjdXJyZW50KSA9PiAoeyAuLi5jdXJyZW50LCBidXN5OiB0cnVlLCBlcnJvcnM6IFtdIH0pKTtcbiAgICBhd2FpdCB0aGlzLmZpbmlzaChhd2FpdCBjcmVhdGVQYXNza2V5U2lnblVwKHRoaXMuY2xpZW50LCB2YWx1ZXMsIHsgY29uc2VudCwgY2FwdGNoYTogdGhpcy5zaWduVXBDYXB0Y2hhLCB0OiB0aGlzLnQsIHBvbGljaWVzOiB0aGlzLnBvbGljaWVzIH0pKTtcbiAgfVxuXG4gIC8qKiBUaGUgcGFzc2tleS1vbmx5IHNpZ24tdXAncyBsYXN0IHN0ZXA6IGNyZWF0ZSB0aGUgcGFzc2tleSwgYW5kIHdpdGggaXQgdGhlIGFjY291bnQuICovXG4gIGFzeW5jIGNyZWF0ZVBhc3NrZXkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIGJ1c3k6IHRydWUsIGVycm9yczogW10gfSkpO1xuICAgIGF3YWl0IHRoaXMuZmluaXNoKGF3YWl0IGZpbmlzaFBhc3NrZXlTaWduVXAodGhpcy5jbGllbnQsIHRoaXMuc3RhdGUoKSwgeyB0OiB0aGlzLnQgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZWNvdmVyeSBjb2RlcyBhbiBNRkEgZW5yb2xtZW50IGp1c3QgY29tcGxldGVkIHRoZSBzaWduLWluIHdpdGgsIHNob3duXG4gICAqIG9uY2UgYmVmb3JlIGl0IGZpbmlzaGVzICh7QGxpbmsgc2F2ZVJlY292ZXJ5Q29kZXN9KTsgbnVsbCBvdGhlcndpc2UuIFRoZXlcbiAgICogbGl2ZSBvbmx5IGluIHRoaXMgY29udHJvbGxlcidzIG1lbW9yeS5cbiAgICovXG4gIHJlY292ZXJ5Q29kZXMoKTogc3RyaW5nW10gfCBudWxsIHtcbiAgICByZXR1cm4gcGVuZGluZ1JlY292ZXJ5Q29kZXModGhpcy5zdGF0ZSgpKTtcbiAgfVxuXG4gIC8qKiBcIkkndmUgc2F2ZWQgbXkgY29kZXNcIjogZm9yZ2V0IHRoZSByZWNvdmVyeSBjb2RlcyBhbmQgZmluaXNoIHRoZSBzaWduLWluLiAqL1xuICBhc3luYyBzYXZlUmVjb3ZlcnlDb2RlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmZpbmlzaChhY2tub3dsZWRnZVJlY292ZXJ5Q29kZXModGhpcy5zdGF0ZSgpKSk7XG4gIH1cblxuICAvKiogVGhlIGFkZHJlc3MgYmVsb25nZWQgdG8gYW4gZXhpc3RpbmcgYWNjb3VudDogdGhlIG5vdGljZSBpcyB1cCB1bnRpbCB7QGxpbmsgY29udGludWVBZnRlckV4aXN0aW5nQWNjb3VudH0uICovXG4gIGV4aXN0aW5nQWNjb3VudE5vdGljZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcGVuZGluZ0V4aXN0aW5nQWNjb3VudE5vdGljZSh0aGlzLnN0YXRlKCkpO1xuICB9XG5cbiAgLyoqIFRoZSB1c2VyIHJlYWQgdGhlIG5vdGljZTogZmluaXNoIHRoZSBzaWduLXVwLiAqL1xuICBhc3luYyBjb250aW51ZUFmdGVyRXhpc3RpbmdBY2NvdW50KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuZmluaXNoKGFja25vd2xlZGdlRXhpc3RpbmdBY2NvdW50KHRoaXMuc3RhdGUoKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmaW5pc2gobmV4dDogRmxvd1N0YXRlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gQW4gZW5yb2xtZW50J3MgcmVjb3ZlcnkgY29kZXMgYXJlIHNob3duIGZpcnN0OyBgc2F2ZVJlY292ZXJ5Q29kZXNgIGZpbmlzaGVzLlxuICAgIGlmIChwZW5kaW5nUmVjb3ZlcnlDb2RlcyhuZXh0KSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IC4uLm5leHQsIGJ1c3k6IGZhbHNlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAobmV4dC5hdHRlbXB0Py5zdGF0dXMgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgIC8vIFN0YXlzIGJ1c3kgdW50aWwgdGhpcyBicm93c2VyIGFjdHVhbGx5IGhvbGRzIHRoZSBzZXNzaW9uOiB0aGUgY29tcGxldGlvblxuICAgICAgLy8gYWxvbmUgc2F5cyBub3RoaW5nIGFib3V0IHdoZXRoZXIgdGhlIGNvb2tpZSB3YXMga2VwdC5cbiAgICAgIHRoaXMuc2V0U3RhdGUoeyAuLi5uZXh0LCBidXN5OiB0cnVlIH0pO1xuICAgICAgbGV0IGV4Y2hhbmdlZCA9IHRydWU7XG4gICAgICBpZiAobmV4dC50aWNrZXQpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jbGllbnQucG9zdCgnL3YxL2NsaWVudC90aWNrZXRzL2V4Y2hhbmdlJywge1xuICAgICAgICAgIGF0dGVtcHRfaWQ6IChuZXh0LmF0dGVtcHQgYXMgeyBpZD86IHN0cmluZyB9KS5pZCxcbiAgICAgICAgICB0aWNrZXQ6IG5leHQudGlja2V0LFxuICAgICAgICB9KTtcbiAgICAgICAgZXhjaGFuZ2VkID0gcmVzLm9rO1xuICAgICAgfVxuICAgICAgaWYgKGV4Y2hhbmdlZCAmJiB0aGlzLmhvbGRFeGlzdGluZ0FjY291bnROb3RpY2UgJiYgcGVuZGluZ0V4aXN0aW5nQWNjb3VudE5vdGljZShuZXh0KSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgLi4ubmV4dCwgdGlja2V0OiBudWxsLCBidXN5OiBmYWxzZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qga2VwdCA9IGV4Y2hhbmdlZCAmJiAoYXdhaXQgdGhpcy5yZWxvYWQoKSk7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgLi4ubmV4dCwgYnVzeTogZmFsc2UsIHNlc3Npb25LZXB0OiBrZXB0IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKG5leHQpO1xuICAgICAgLy8gQSBtYWdpYy1saW5rIHN0ZXAgbWF5IG5vdyBiZSBwb2xsYWJsZSAoYSBsaW5rIG9wZW5lZCBvbiBhbm90aGVyIGRldmljZSkuXG4gICAgICB0aGlzLnN5bmNQb2xsaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFN0YXJ0L3N0b3AgdGhlIMKnNS4zIG1hZ2ljLWxpbmsgcG9sbCB0byBtYXRjaCB0aGUgY3VycmVudCBzdGF0ZS4gKi9cbiAgc3luY1BvbGxpbmcoKTogdm9pZCB7XG4gICAgaWYgKHNob3VsZEtlZXBQb2xsaW5nKHRoaXMuc3RhdGUoKSkpIHtcbiAgICAgIHRoaXMuc3RhcnRQb2xsaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RvcFBvbGxpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0UG9sbGluZygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wb2xsVGltZXIpIHJldHVybjtcbiAgICB0aGlzLnBvbGxUaW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHZvaWQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdGF0ZTogbmV4dCwgdGlja2V0IH0gPSBhd2FpdCBwb2xsQXR0ZW1wdCh0aGlzLmNsaWVudCwgdGhpcy5zdGF0ZSgpKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShuZXh0KTtcbiAgICAgICAgLy8gZS5nLiBhIHBhc3NrZXkgc2lnbi11cCB3aG9zZSBlbWFpbCB3YXMganVzdCBwcm92ZW46IG9ubHkgdGhpcyB0YWIgY2FuIGdvIG9uLlxuICAgICAgICBpZiAoIXRpY2tldCAmJiAhc2hvdWxkS2VlcFBvbGxpbmcobmV4dCkpIHRoaXMuc3RvcFBvbGxpbmcoKTtcbiAgICAgICAgaWYgKCF0aWNrZXQgfHwgIW5leHQuYXR0ZW1wdCkgcmV0dXJuO1xuXG4gICAgICAgIC8vIFRoZSB0aWNrZXQgaXMgZXhjaGFuZ2VkIGJ5IGEgbm9ybWFsIHJlcXVlc3QsIHNvIG5vIHNlc3Npb24gdG9rZW4gZXZlclxuICAgICAgICAvLyBhcHBlYXJzIGluIGEgVVJMLlxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNsaWVudC5wb3N0KCcvdjEvY2xpZW50L3RpY2tldHMvZXhjaGFuZ2UnLCB7XG4gICAgICAgICAgYXR0ZW1wdF9pZDogKG5leHQuYXR0ZW1wdCBhcyB7IGlkPzogc3RyaW5nIH0pLmlkLFxuICAgICAgICAgIHRpY2tldCxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGtlcHQgPSByZXMub2sgJiYgKGF3YWl0IHRoaXMucmVsb2FkKCkpO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgLi4udGhpcy5zdGF0ZSgpLCBzZXNzaW9uS2VwdDoga2VwdCB9KTtcbiAgICAgICAgdGhpcy5zdG9wUG9sbGluZygpO1xuICAgICAgfSkoKTtcbiAgICB9LCAyXzAwMCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BQb2xsaW5nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBvbGxUaW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnBvbGxUaW1lcik7XG4gICAgICB0aGlzLnBvbGxUaW1lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlbGVhc2UgdGhlIHBvbGwgdGltZXIgYW5kIHRoZSBjYXB0Y2hhIHdpZGdldHMg4oCUIGNhbGwgZnJvbSB0aGUgY29tcG9uZW50J3MgYG5nT25EZXN0cm95YC4gKi9cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnBhc3NrZXkuc3RvcEF1dG9maWxsKCk7XG4gICAgdGhpcy5zdG9wUG9sbGluZygpO1xuICAgIHRoaXMuY2FwdGNoYS5kZXN0cm95KCk7XG4gICAgdGhpcy5zaWduVXBDYXB0Y2hhLmRlc3Ryb3koKTtcbiAgfVxufVxuIl19
|
|
@@ -108,6 +108,9 @@ export class SignInComponent {
|
|
|
108
108
|
[captcha]="flow.captchaDrawn() ? flow.captcha : null"
|
|
109
109
|
[firstFactors]="flow.firstFactors()"
|
|
110
110
|
[preparedFactor]="flow.preparedFactor()"
|
|
111
|
+
[passwordHold]="flow.state().passwordHold ?? null"
|
|
112
|
+
[holdProof]="flow.holdProof()"
|
|
113
|
+
(usePassword)="flow.usePassword()"
|
|
111
114
|
[offerEmailSecondFactor]="flow.settings()?.account?.emailSecondFactor === true"
|
|
112
115
|
[emailedSecondFactor]="flow.emailSecondFactor()"
|
|
113
116
|
(submitFlow)="submitIdentifier($event)"
|
|
@@ -137,7 +140,7 @@ export class SignInComponent {
|
|
|
137
140
|
{{ t('signIn.noAccount') }} <a class="atlas-link" [href]="href">{{ t('signIn.signUpLink') }}</a>
|
|
138
141
|
</p>
|
|
139
142
|
}
|
|
140
|
-
`, isInline: true, dependencies: [{ kind: "component", type: AttemptFlowComponent, selector: "atlas-attempt-flow", inputs: ["attempt", "busy", "errors", "sessionKept", "titleKey", "captcha", "firstFactors", "preparedFactor", "offerEmailSecondFactor", "emailedSecondFactor", "offerSmsSecondFactor", "textedSecondFactor", "enrollment", "enrollmentState", "emailVerification"], outputs: ["submitFlow", "chooseFactor", "emailSecondFactor", "smsSecondFactor", "resend", "policyDeclined"] }, { kind: "component", type: RecoveryCodesComponent, selector: "atlas-recovery-codes", inputs: ["codes", "busy"], outputs: ["saved"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
143
|
+
`, isInline: true, dependencies: [{ kind: "component", type: AttemptFlowComponent, selector: "atlas-attempt-flow", inputs: ["attempt", "busy", "errors", "sessionKept", "titleKey", "captcha", "firstFactors", "preparedFactor", "passwordHold", "holdProof", "offerEmailSecondFactor", "emailedSecondFactor", "offerSmsSecondFactor", "textedSecondFactor", "enrollment", "enrollmentState", "emailVerification"], outputs: ["submitFlow", "chooseFactor", "usePassword", "emailSecondFactor", "smsSecondFactor", "resend", "policyDeclined"] }, { kind: "component", type: RecoveryCodesComponent, selector: "atlas-recovery-codes", inputs: ["codes", "busy"], outputs: ["saved"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
141
144
|
}
|
|
142
145
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SignInComponent, decorators: [{
|
|
143
146
|
type: Component,
|
|
@@ -172,6 +175,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
172
175
|
[captcha]="flow.captchaDrawn() ? flow.captcha : null"
|
|
173
176
|
[firstFactors]="flow.firstFactors()"
|
|
174
177
|
[preparedFactor]="flow.preparedFactor()"
|
|
178
|
+
[passwordHold]="flow.state().passwordHold ?? null"
|
|
179
|
+
[holdProof]="flow.holdProof()"
|
|
180
|
+
(usePassword)="flow.usePassword()"
|
|
175
181
|
[offerEmailSecondFactor]="flow.settings()?.account?.emailSecondFactor === true"
|
|
176
182
|
[emailedSecondFactor]="flow.emailSecondFactor()"
|
|
177
183
|
(submitFlow)="submitIdentifier($event)"
|
|
@@ -208,4 +214,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
208
214
|
}], signUpUrl: [{
|
|
209
215
|
type: Input
|
|
210
216
|
}] } });
|
|
211
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi1pbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvc2lnbi1pbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLElBQUksWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQUV4RDs7Ozs7Ozs7O0dBU0c7QUErREgsTUFBTSxPQUFPLGVBQWU7SUFDVCxLQUFLLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRTlDLGlGQUFpRjtJQUN4RSxRQUFRLENBQVU7SUFDM0I7Ozs7T0FJRztJQUNNLFNBQVMsQ0FBaUI7SUFFekIsQ0FBQyxDQUFDLEdBQVc7UUFDckIsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELHNGQUFzRjtJQUM1RSxhQUFhO1FBQ3JCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDM0MsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMs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SUF6RGhCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdURULDREQXhEUyxvQkFBb0IsZ2JBQUUsc0JBQXNCOzs0RkEwRDNDLGVBQWU7a0JBOUQzQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixFQUFFLHNCQUFzQixDQUFDO29CQUN2RCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1RFQ7aUJBQ0Y7OEJBS1UsUUFBUTtzQkFBaEIsS0FBSztnQkFNRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbGFzdFVzZWRNZXRob2RMYWJlbCwgcGFzc2tleXNTdXBwb3J0ZWQsIHNpZ25VcCBhcyBob3N0ZWRTaWduVXAgfSBmcm9tICdAYXRsYXNhdXRoL2pzJztcbmltcG9ydCB7IEF0bGFzU2VydmljZSB9IGZyb20gJy4uL2F0bGFzLnNlcnZpY2UnO1xuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBBdHRlbXB0Rmxvd0NvbXBvbmVudCB9IGZyb20gJy4vYXR0ZW1wdC1mbG93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZWNvdmVyeUNvZGVzQ29tcG9uZW50IH0gZnJvbSAnLi9yZWNvdmVyeS1jb2Rlcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXRsYXNGbG93Q29udHJvbGxlciB9IGZyb20gJy4vZmxvdy1jb250cm9sbGVyJztcblxuLyoqXG4gKiBgPGF0bGFzLXNpZ24taW4+YCDigJQgdGhlIGZ1bGwsIG11bHRpLXN0ZXAgc2lnbi1pbiBmbG93IGRyaXZlbiBlbnRpcmVseSBieSB0aGVcbiAqIHNlcnZlci1zaWRlIGF0dGVtcHQgc3RhdHVzLiBUaGUgQW5ndWxhciBwZWVyIG9mIFJlYWN0J3MgYDxTaWduSW4vPmAuIERyYXdzIHRoZVxuICogaW5zdGFuY2UncyBzaWduLWluIGNhcHRjaGEgd2hlbiBpdCBpcyByZXF1aXJlZCAoYWx3YXlzLW9uLCBvciBhXG4gKiBgbmVlZHNfY2FwdGNoYWAgY2hhbGxlbmdlKS5cbiAqXG4gKiBgYGBodG1sXG4gKiA8YXRsYXMtc2lnbi1pbiAqYXRsYXNTaWduZWRPdXQgYWZ0ZXJVcmw9XCIvZGFzaGJvYXJkXCI+PC9hdGxhcy1zaWduLWluPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F0bGFzLXNpZ24taW4nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0F0dGVtcHRGbG93Q29tcG9uZW50LCBSZWNvdmVyeUNvZGVzQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICBAaWYgKGxhc3RVc2VkTGFiZWwoKTsgYXMgbGFiZWwpIHtcbiAgICAgIDxwIGNsYXNzPVwiYXRsYXMtdGV4dCBhdGxhcy1sYXN0LXVzZWQtaGludFwiIGRhdGEtYXRsYXM9XCJsYXN0LXVzZWRcIiBbYXR0ci5kYXRhLWF0bGFzLW1ldGhvZF09XCJmbG93Lmxhc3RNZXRob2QoKVwiPlxuICAgICAgICB7eyB0KCdzaWduSW4ubGFzdFVzZWQnKSB9fToge3sgbGFiZWwgfX1cbiAgICAgIDwvcD5cbiAgICB9XG4gICAgQGlmIChhdGxhc0Nvbm5lY3Rpb24oKTsgYXMgY29ubmVjdGlvbklkKSB7XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImF0bGFzLXNvY2lhbC1idXR0b25cIiBkYXRhLWF0bGFzLXByb3ZpZGVyPVwiYXRsYXNcIiAoY2xpY2spPVwiZmxvdy5zaWduSW5XaXRoQXRsYXMoY29ubmVjdGlvbklkKVwiPlxuICAgICAgICB7eyB0KCdzaWduSW4uY29udGludWVXaXRoQXRsYXMnKSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICBAaWYgKGZsb3cuc2lnbkluV2l0aEF0bGFzRXJyb3IoKTsgYXMgbWVzc2FnZSkge1xuICAgICAgICA8cCBjbGFzcz1cImF0bGFzLWVycm9yXCIgcm9sZT1cImFsZXJ0XCI+e3sgbWVzc2FnZSB9fTwvcD5cbiAgICAgIH1cbiAgICB9XG4gICAgQGlmIChmbG93LnJlY292ZXJ5Q29kZXMoKTsgYXMgY29kZXMpIHtcbiAgICAgIDxhdGxhcy1yZWNvdmVyeS1jb2RlcyBbY29kZXNdPVwiY29kZXNcIiBbYnVzeV09XCJmbG93LnN0YXRlKCkuYnVzeVwiIChzYXZlZCk9XCJmbG93LnNhdmVSZWNvdmVyeUNvZGVzKClcIj48L2F0bGFzLXJlY292ZXJ5LWNvZGVzPlxuICAgIH0gQGVsc2Uge1xuICAgIDxhdGxhcy1hdHRlbXB0LWZsb3dcbiAgICAgIFthdHRlbXB0XT1cImZsb3cuc3RhdGUoKS5hdHRlbXB0XCJcbiAgICAgIFtidXN5XT1cImZsb3cuc3RhdGUoKS5idXN5XCJcbiAgICAgIFtlcnJvcnNdPVwiZmxvdy5zdGF0ZSgpLmVycm9yc1wiXG4gICAgICBbc2Vzc2lvbktlcHRdPVwiZmxvdy5zdGF0ZSgpLnNlc3Npb25LZXB0XCJcbiAgICAgIHRpdGxlS2V5PVwic2lnbkluLnRpdGxlXCJcbiAgICAgIFtjYXB0Y2hhXT1cImZsb3cuY2FwdGNoYURyYXduKCkgPyBmbG93LmNhcHRjaGEgOiBudWxsXCJcbiAgICAgIFtmaXJzdEZhY3RvcnNdPVwiZmxvdy5maXJzdEZhY3RvcnMoKVwiXG4gICAgICBbcHJlcGFyZWRGYWN0b3JdPVwiZmxvdy5wcmVwYXJlZEZhY3RvcigpXCJcbiAgICAgIFtvZmZlckVtYWlsU2Vjb25kRmFjdG9yXT1cImZsb3cuc2V0dGluZ3MoKT8uYWNjb3VudD8uZW1haWxTZWNvbmRGYWN0b3IgPT09IHRydWVcIlxuICAgICAgW2VtYWlsZWRTZWNvbmRGYWN0b3JdPVwiZmxvdy5lbWFpbFNlY29uZEZhY3RvcigpXCJcbiAgICAgIChzdWJtaXRGbG93KT1cInN1Ym1pdElkZW50aWZpZXIoJGV2ZW50KVwiXG4gICAgICAoY2hvb3NlRmFjdG9yKT1cImZsb3cucHJlcGFyZSgkZXZlbnQpXCJcbiAgICAgIFtvZmZlclNtc1NlY29uZEZhY3Rvcl09XCJmbG93LnNldHRpbmdzKCkgIT09IG51bGwgJiYgZmxvdy5tZmFDaG9pY2VzKCkuc21zXCJcbiAgICAgIFt0ZXh0ZWRTZWNvbmRGYWN0b3JdPVwiZmxvdy5zbXNTZWNvbmRGYWN0b3IoKVwiXG4gICAgICBbZW5yb2xsbWVudF09XCJmbG93LmVucm9sbG1lbnRcIlxuICAgICAgW2Vucm9sbG1lbnRTdGF0ZV09XCJmbG93LmVucm9sbG1lbnRTdGF0ZSgpXCJcbiAgICAgIChlbWFpbFNlY29uZEZhY3Rvcik9XCJmbG93LnNlbmRFbWFpbFNlY29uZEZhY3RvcigpXCJcbiAgICAgIChzbXNTZWNvbmRGYWN0b3IpPVwiZmxvdy5zZW5kU21zU2Vjb25kRmFjdG9yKClcIlxuICAgICAgKHBvbGljeURlY2xpbmVkKT1cImZsb3cuZGVjbGluZVBvbGljeSgkZXZlbnQpXCJcbiAgICA+PC9hdGxhcy1hdHRlbXB0LWZsb3c+XG4gICAgfVxuICAgIEBpZiAoZmxvdy5wYXNza2V5T2ZmZXJlZCgpICYmICFmbG93LnJlY292ZXJ5Q29kZXMoKSkge1xuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJhdGxhcy1zb2NpYWwtYnV0dG9uIGF0bGFzLXBhc3NrZXktYnV0dG9uXCJcbiAgICAgICAgZGF0YS1hdGxhcy1wYXNza2V5LXNpZ24taW49XCJcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZmxvdy5zdGF0ZSgpLmJ1c3lcIlxuICAgICAgICAoY2xpY2spPVwiZmxvdy5wYXNza2V5LnNpZ25JbigpXCJcbiAgICAgID5cbiAgICAgICAge3sgdCgnc2lnbkluLnBhc3NrZXlCdXR0b24nKSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICAgIEBpZiAoZmxvdy5zdGF0ZSgpLmF0dGVtcHQ/LnN0YXR1cyAhPT0gJ2NvbXBsZXRlJyAmJiBzaWduVXBIcmVmKCk7IGFzIGhyZWYpIHtcbiAgICAgIDxwIGNsYXNzPVwiYXRsYXMtZm9vdGVyXCIgZGF0YS1hdGxhcy1zaWduLXVwLXByb21wdD1cIlwiPlxuICAgICAgICB7eyB0KCdzaWduSW4ubm9BY2NvdW50JykgfX0gPGEgY2xhc3M9XCJhdGxhcy1saW5rXCIgW2hyZWZdPVwiaHJlZlwiPnt7IHQoJ3NpZ25Jbi5zaWduVXBMaW5rJykgfX08L2E+XG4gICAgICA8L3A+XG4gICAgfVxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBTaWduSW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXRsYXMgPSBpbmplY3QoQXRsYXNTZXJ2aWNlKTtcblxuICAvKiogV2hlcmUgdG8gc2VuZCB0aGUgdXNlciBvbmNlIHRoZSBmbG93IGNvbXBsZXRlcy4gUmVzZXJ2ZWQgZm9yIGhvc3Qgcm91dGluZy4gKi9cbiAgQElucHV0KCkgYWZ0ZXJVcmw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGVyZSBcIk5vIGFjY291bnQ/IFNpZ24gdXBcIiBnb2VzLiBEZWZhdWx0OiB0aGUgaW5zdGFuY2UncyBob3N0ZWQgc2lnbi11cFxuICAgKiBwYWdlIChjYXJyeWluZyB0aGUgdmlzaXRvcidzIHJlZmVycmFsKS4gYG51bGxgIGhpZGVzIGl0LiBBbHdheXMgc2hvd24sIG5ldmVyXG4gICAqIG9ubHkgYWZ0ZXIgYSBmYWlsZWQgc2lnbi1pbiwgc28gaXQgc2F5cyBub3RoaW5nIGFib3V0IHdoZXRoZXIgYW4gZW1haWwgaGFzIGFuIGFjY291bnQuXG4gICAqL1xuICBASW5wdXQoKSBzaWduVXBVcmw/OiBzdHJpbmcgfCBudWxsO1xuXG4gIHByb3RlY3RlZCB0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHJhbnNsYXRlKHRoaXMuYXRsYXMubG9jYWxpemF0aW9uLCBrZXkpO1xuICB9XG5cbiAgLyoqIFwiTGFzdCB1c2VkOiBQYXNzd29yZFwiIG9uIHRoZSBpZGVudGlmaWVyIHN0ZXAsIHdoZW4gdGhlIGluc3RhbmNlIHNob3dzIHRoZSBoaW50LiAqL1xuICBwcm90ZWN0ZWQgbGFzdFVzZWRMYWJlbCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5mbG93LnN0YXRlKCkuYXR0ZW1wdCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGxhc3RVc2VkTWV0aG9kTGFiZWwodGhpcy5mbG93Lmxhc3RNZXRob2QoKSwgKGtleSkgPT4gdGhpcy50KGtleSkpO1xuICB9XG5cbiAgLyoqIFRoZSBcIlNpZ24gaW4gd2l0aCBBdGxhc1wiIGNvbm5lY3Rpb24sIG9uIHRoZSBmaXJzdCBzdGVwLCB3aGVuIHRoZSBpbnN0YW5jZSBoYXMgaXQgb24uICovXG4gIHByb3RlY3RlZCBhdGxhc0Nvbm5lY3Rpb24oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuZmxvdy5zdGF0ZSgpLmF0dGVtcHQgfHwgdGhpcy5mbG93LnJlY292ZXJ5Q29kZXMoKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuZmxvdy5zZXR0aW5ncygpPy5zaWduSW5XaXRoQXRsYXM/LmNvbm5lY3Rpb25JZCA/PyBudWxsO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNpZ25VcEhyZWYoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuc2lnblVwVXJsID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICBpZiAodGhpcy5zaWduVXBVcmwpIHJldHVybiB0aGlzLnNpZ25VcFVybDtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGhvc3RlZFNpZ25VcCh7XG4gICAgICAgIGZyb250ZW5kQXBpOiB0aGlzLmF0bGFzLmZyb250ZW5kQXBpLFxuICAgICAgICByZWRpcmVjdFVybDogdGhpcy5hZnRlclVybCA/PyAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cubG9jYXRpb24uaHJlZiA6IHVuZGVmaW5lZCksXG4gICAgICAgIG5hdmlnYXRlOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZsb3cgPSBuZXcgQXRsYXNGbG93Q29udHJvbGxlcihcbiAgICB0aGlzLmF0bGFzLmNyZWF0ZUZhcGlDbGllbnQoKSxcbiAgICAoKSA9PiB0aGlzLmF0bGFzLnJlbG9hZCgpLFxuICAgIC8vIFJlc3VtZSBtaWQtZmxvdyBpZiBhbiBPQXV0aCByZWRpcmVjdCBjYW1lIGJhY2sgb3dpbmcgYSBzZWNvbmQgZmFjdG9yLlxuICAgIHRoaXMuYXRsYXMucGVuZGluZ0F0dGVtcHQsXG4gICAgKGtleSkgPT4gdHJhbnNsYXRlKHRoaXMuYXRsYXMubG9jYWxpemF0aW9uLCBrZXkpLFxuICApO1xuXG4gIC8vIFBhc3NrZXkgYXV0b2ZpbGwgcnVucyB3aGlsZSB0aGUgZmlyc3Qgc3RlcCBvZmZlcnMgcGFzc2tleXMgKGEgY29tcHV0ZWQsIHNvIGl0IHJlLWFybXMgb25seSB3aGVuIHRoYXQgY2hhbmdlcykuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFzc2tleU9mZmVyZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmZsb3cucGFzc2tleU9mZmVyZWQoKSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBwYXNza2V5QXV0b2ZpbGwgPSBlZmZlY3QoKCkgPT4gKHRoaXMucGFzc2tleU9mZmVyZWQoKSA/IHRoaXMuZmxvdy5wYXNza2V5LmFybUF1dG9maWxsKCkgOiB0aGlzLmZsb3cucGFzc2tleS5zdG9wQXV0b2ZpbGwoKSkpO1xuXG4gIHByb3RlY3RlZCBzdWJtaXRJZGVudGlmaWVyKHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuICAgIHRoaXMuZmxvdy5wYXNza2V5LnN0b3BBdXRvZmlsbCgpO1xuICAgIHZvaWQgdGhpcy5mbG93LnN1Ym1pdCh2YWx1ZXMpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB0aGlzLmZsb3cucGFzc2tleVN1cHBvcnRlZC5zZXQocGFzc2tleXNTdXBwb3J0ZWQoKSk7XG4gICAgLy8gSWYgc2VlZGVkIGZyb20gYSBwZW5kaW5nIGF0dGVtcHQgdGhhdCBpcyBhbHJlYWR5IHBvbGxhYmxlLCBzdGFydCBwb2xsaW5nLlxuICAgIHRoaXMuZmxvdy5zeW5jUG9sbGluZygpO1xuICAgIC8vIMKnNSB0aGUgaW5zdGFuY2UncyBjYXB0Y2hhIHNldHRpbmdzIChzd2l0Y2hpbmcgY2FwdGNoYSBvbiBpbiB0aGUgZGFzaGJvYXJkXG4gICAgLy8gZHJhd3MgaXQgaGVyZSB3aXRoIG5vIGNvZGUgY2hhbmdlKSBhbmQgZW1haWwgZGVsaXZlcnkgKG5vIGVtYWlsZWQtY29kZVxuICAgIC8vIG9wdGlvbiB3aGlsZSB0aGUgYXBwIGNhbm5vdCBzZW5kIGVtYWlsKS5cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHZvaWQgdGhpcy5mbG93LmxvYWRTZXR0aW5ncygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5mbG93LmRlc3Ryb3koKTtcbiAgfVxufVxuIl19
|
|
217
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi1pbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvc2lnbi1pbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBQ04sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLElBQUksWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQUV4RDs7Ozs7Ozs7O0dBU0c7QUFrRUgsTUFBTSxPQUFPLGVBQWU7SUFDVCxLQUFLLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRTlDLGlGQUFpRjtJQUN4RSxRQUFRLENBQVU7SUFDM0I7Ozs7T0FJRztJQUNNLFNBQVMsQ0FBaUI7SUFFekIsQ0FBQyxDQUFDLEdBQVc7UUFDckIsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELHNGQUFzRjtJQUM1RSxhQUFhO1FBQ3JCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDM0MsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMs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SUE1RGhCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMERULDREQTNEUyxvQkFBb0IsNGRBQUUsc0JBQXNCOzs0RkE2RDNDLGVBQWU7a0JBakUzQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLE9BQU8sRUFBRSxDQUFDLG9CQUFvQixFQUFFLHNCQUFzQixDQUFDO29CQUN2RCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwRFQ7aUJBQ0Y7OEJBS1UsUUFBUTtzQkFBaEIsS0FBSztnQkFNRyxTQUFTO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbGFzdFVzZWRNZXRob2RMYWJlbCwgcGFzc2tleXNTdXBwb3J0ZWQsIHNpZ25VcCBhcyBob3N0ZWRTaWduVXAgfSBmcm9tICdAYXRsYXNhdXRoL2pzJztcbmltcG9ydCB7IEF0bGFzU2VydmljZSB9IGZyb20gJy4uL2F0bGFzLnNlcnZpY2UnO1xuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSAnLi4vaTE4bic7XG5pbXBvcnQgeyBBdHRlbXB0Rmxvd0NvbXBvbmVudCB9IGZyb20gJy4vYXR0ZW1wdC1mbG93LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZWNvdmVyeUNvZGVzQ29tcG9uZW50IH0gZnJvbSAnLi9yZWNvdmVyeS1jb2Rlcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXRsYXNGbG93Q29udHJvbGxlciB9IGZyb20gJy4vZmxvdy1jb250cm9sbGVyJztcblxuLyoqXG4gKiBgPGF0bGFzLXNpZ24taW4+YCDigJQgdGhlIGZ1bGwsIG11bHRpLXN0ZXAgc2lnbi1pbiBmbG93IGRyaXZlbiBlbnRpcmVseSBieSB0aGVcbiAqIHNlcnZlci1zaWRlIGF0dGVtcHQgc3RhdHVzLiBUaGUgQW5ndWxhciBwZWVyIG9mIFJlYWN0J3MgYDxTaWduSW4vPmAuIERyYXdzIHRoZVxuICogaW5zdGFuY2UncyBzaWduLWluIGNhcHRjaGEgd2hlbiBpdCBpcyByZXF1aXJlZCAoYWx3YXlzLW9uLCBvciBhXG4gKiBgbmVlZHNfY2FwdGNoYWAgY2hhbGxlbmdlKS5cbiAqXG4gKiBgYGBodG1sXG4gKiA8YXRsYXMtc2lnbi1pbiAqYXRsYXNTaWduZWRPdXQgYWZ0ZXJVcmw9XCIvZGFzaGJvYXJkXCI+PC9hdGxhcy1zaWduLWluPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F0bGFzLXNpZ24taW4nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0F0dGVtcHRGbG93Q29tcG9uZW50LCBSZWNvdmVyeUNvZGVzQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICBAaWYgKGxhc3RVc2VkTGFiZWwoKTsgYXMgbGFiZWwpIHtcbiAgICAgIDxwIGNsYXNzPVwiYXRsYXMtdGV4dCBhdGxhcy1sYXN0LXVzZWQtaGludFwiIGRhdGEtYXRsYXM9XCJsYXN0LXVzZWRcIiBbYXR0ci5kYXRhLWF0bGFzLW1ldGhvZF09XCJmbG93Lmxhc3RNZXRob2QoKVwiPlxuICAgICAgICB7eyB0KCdzaWduSW4ubGFzdFVzZWQnKSB9fToge3sgbGFiZWwgfX1cbiAgICAgIDwvcD5cbiAgICB9XG4gICAgQGlmIChhdGxhc0Nvbm5lY3Rpb24oKTsgYXMgY29ubmVjdGlvbklkKSB7XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImF0bGFzLXNvY2lhbC1idXR0b25cIiBkYXRhLWF0bGFzLXByb3ZpZGVyPVwiYXRsYXNcIiAoY2xpY2spPVwiZmxvdy5zaWduSW5XaXRoQXRsYXMoY29ubmVjdGlvbklkKVwiPlxuICAgICAgICB7eyB0KCdzaWduSW4uY29udGludWVXaXRoQXRsYXMnKSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICBAaWYgKGZsb3cuc2lnbkluV2l0aEF0bGFzRXJyb3IoKTsgYXMgbWVzc2FnZSkge1xuICAgICAgICA8cCBjbGFzcz1cImF0bGFzLWVycm9yXCIgcm9sZT1cImFsZXJ0XCI+e3sgbWVzc2FnZSB9fTwvcD5cbiAgICAgIH1cbiAgICB9XG4gICAgQGlmIChmbG93LnJlY292ZXJ5Q29kZXMoKTsgYXMgY29kZXMpIHtcbiAgICAgIDxhdGxhcy1yZWNvdmVyeS1jb2RlcyBbY29kZXNdPVwiY29kZXNcIiBbYnVzeV09XCJmbG93LnN0YXRlKCkuYnVzeVwiIChzYXZlZCk9XCJmbG93LnNhdmVSZWNvdmVyeUNvZGVzKClcIj48L2F0bGFzLXJlY292ZXJ5LWNvZGVzPlxuICAgIH0gQGVsc2Uge1xuICAgIDxhdGxhcy1hdHRlbXB0LWZsb3dcbiAgICAgIFthdHRlbXB0XT1cImZsb3cuc3RhdGUoKS5hdHRlbXB0XCJcbiAgICAgIFtidXN5XT1cImZsb3cuc3RhdGUoKS5idXN5XCJcbiAgICAgIFtlcnJvcnNdPVwiZmxvdy5zdGF0ZSgpLmVycm9yc1wiXG4gICAgICBbc2Vzc2lvbktlcHRdPVwiZmxvdy5zdGF0ZSgpLnNlc3Npb25LZXB0XCJcbiAgICAgIHRpdGxlS2V5PVwic2lnbkluLnRpdGxlXCJcbiAgICAgIFtjYXB0Y2hhXT1cImZsb3cuY2FwdGNoYURyYXduKCkgPyBmbG93LmNhcHRjaGEgOiBudWxsXCJcbiAgICAgIFtmaXJzdEZhY3RvcnNdPVwiZmxvdy5maXJzdEZhY3RvcnMoKVwiXG4gICAgICBbcHJlcGFyZWRGYWN0b3JdPVwiZmxvdy5wcmVwYXJlZEZhY3RvcigpXCJcbiAgICAgIFtwYXNzd29yZEhvbGRdPVwiZmxvdy5zdGF0ZSgpLnBhc3N3b3JkSG9sZCA/PyBudWxsXCJcbiAgICAgIFtob2xkUHJvb2ZdPVwiZmxvdy5ob2xkUHJvb2YoKVwiXG4gICAgICAodXNlUGFzc3dvcmQpPVwiZmxvdy51c2VQYXNzd29yZCgpXCJcbiAgICAgIFtvZmZlckVtYWlsU2Vjb25kRmFjdG9yXT1cImZsb3cuc2V0dGluZ3MoKT8uYWNjb3VudD8uZW1haWxTZWNvbmRGYWN0b3IgPT09IHRydWVcIlxuICAgICAgW2VtYWlsZWRTZWNvbmRGYWN0b3JdPVwiZmxvdy5lbWFpbFNlY29uZEZhY3RvcigpXCJcbiAgICAgIChzdWJtaXRGbG93KT1cInN1Ym1pdElkZW50aWZpZXIoJGV2ZW50KVwiXG4gICAgICAoY2hvb3NlRmFjdG9yKT1cImZsb3cucHJlcGFyZSgkZXZlbnQpXCJcbiAgICAgIFtvZmZlclNtc1NlY29uZEZhY3Rvcl09XCJmbG93LnNldHRpbmdzKCkgIT09IG51bGwgJiYgZmxvdy5tZmFDaG9pY2VzKCkuc21zXCJcbiAgICAgIFt0ZXh0ZWRTZWNvbmRGYWN0b3JdPVwiZmxvdy5zbXNTZWNvbmRGYWN0b3IoKVwiXG4gICAgICBbZW5yb2xsbWVudF09XCJmbG93LmVucm9sbG1lbnRcIlxuICAgICAgW2Vucm9sbG1lbnRTdGF0ZV09XCJmbG93LmVucm9sbG1lbnRTdGF0ZSgpXCJcbiAgICAgIChlbWFpbFNlY29uZEZhY3Rvcik9XCJmbG93LnNlbmRFbWFpbFNlY29uZEZhY3RvcigpXCJcbiAgICAgIChzbXNTZWNvbmRGYWN0b3IpPVwiZmxvdy5zZW5kU21zU2Vjb25kRmFjdG9yKClcIlxuICAgICAgKHBvbGljeURlY2xpbmVkKT1cImZsb3cuZGVjbGluZVBvbGljeSgkZXZlbnQpXCJcbiAgICA+PC9hdGxhcy1hdHRlbXB0LWZsb3c+XG4gICAgfVxuICAgIEBpZiAoZmxvdy5wYXNza2V5T2ZmZXJlZCgpICYmICFmbG93LnJlY292ZXJ5Q29kZXMoKSkge1xuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJhdGxhcy1zb2NpYWwtYnV0dG9uIGF0bGFzLXBhc3NrZXktYnV0dG9uXCJcbiAgICAgICAgZGF0YS1hdGxhcy1wYXNza2V5LXNpZ24taW49XCJcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZmxvdy5zdGF0ZSgpLmJ1c3lcIlxuICAgICAgICAoY2xpY2spPVwiZmxvdy5wYXNza2V5LnNpZ25JbigpXCJcbiAgICAgID5cbiAgICAgICAge3sgdCgnc2lnbkluLnBhc3NrZXlCdXR0b24nKSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICAgIEBpZiAoZmxvdy5zdGF0ZSgpLmF0dGVtcHQ/LnN0YXR1cyAhPT0gJ2NvbXBsZXRlJyAmJiBzaWduVXBIcmVmKCk7IGFzIGhyZWYpIHtcbiAgICAgIDxwIGNsYXNzPVwiYXRsYXMtZm9vdGVyXCIgZGF0YS1hdGxhcy1zaWduLXVwLXByb21wdD1cIlwiPlxuICAgICAgICB7eyB0KCdzaWduSW4ubm9BY2NvdW50JykgfX0gPGEgY2xhc3M9XCJhdGxhcy1saW5rXCIgW2hyZWZdPVwiaHJlZlwiPnt7IHQoJ3NpZ25Jbi5zaWduVXBMaW5rJykgfX08L2E+XG4gICAgICA8L3A+XG4gICAgfVxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBTaWduSW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXRsYXMgPSBpbmplY3QoQXRsYXNTZXJ2aWNlKTtcblxuICAvKiogV2hlcmUgdG8gc2VuZCB0aGUgdXNlciBvbmNlIHRoZSBmbG93IGNvbXBsZXRlcy4gUmVzZXJ2ZWQgZm9yIGhvc3Qgcm91dGluZy4gKi9cbiAgQElucHV0KCkgYWZ0ZXJVcmw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGVyZSBcIk5vIGFjY291bnQ/IFNpZ24gdXBcIiBnb2VzLiBEZWZhdWx0OiB0aGUgaW5zdGFuY2UncyBob3N0ZWQgc2lnbi11cFxuICAgKiBwYWdlIChjYXJyeWluZyB0aGUgdmlzaXRvcidzIHJlZmVycmFsKS4gYG51bGxgIGhpZGVzIGl0LiBBbHdheXMgc2hvd24sIG5ldmVyXG4gICAqIG9ubHkgYWZ0ZXIgYSBmYWlsZWQgc2lnbi1pbiwgc28gaXQgc2F5cyBub3RoaW5nIGFib3V0IHdoZXRoZXIgYW4gZW1haWwgaGFzIGFuIGFjY291bnQuXG4gICAqL1xuICBASW5wdXQoKSBzaWduVXBVcmw/OiBzdHJpbmcgfCBudWxsO1xuXG4gIHByb3RlY3RlZCB0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHJhbnNsYXRlKHRoaXMuYXRsYXMubG9jYWxpemF0aW9uLCBrZXkpO1xuICB9XG5cbiAgLyoqIFwiTGFzdCB1c2VkOiBQYXNzd29yZFwiIG9uIHRoZSBpZGVudGlmaWVyIHN0ZXAsIHdoZW4gdGhlIGluc3RhbmNlIHNob3dzIHRoZSBoaW50LiAqL1xuICBwcm90ZWN0ZWQgbGFzdFVzZWRMYWJlbCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5mbG93LnN0YXRlKCkuYXR0ZW1wdCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGxhc3RVc2VkTWV0aG9kTGFiZWwodGhpcy5mbG93Lmxhc3RNZXRob2QoKSwgKGtleSkgPT4gdGhpcy50KGtleSkpO1xuICB9XG5cbiAgLyoqIFRoZSBcIlNpZ24gaW4gd2l0aCBBdGxhc1wiIGNvbm5lY3Rpb24sIG9uIHRoZSBmaXJzdCBzdGVwLCB3aGVuIHRoZSBpbnN0YW5jZSBoYXMgaXQgb24uICovXG4gIHByb3RlY3RlZCBhdGxhc0Nvbm5lY3Rpb24oKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuZmxvdy5zdGF0ZSgpLmF0dGVtcHQgfHwgdGhpcy5mbG93LnJlY292ZXJ5Q29kZXMoKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuZmxvdy5zZXR0aW5ncygpPy5zaWduSW5XaXRoQXRsYXM/LmNvbm5lY3Rpb25JZCA/PyBudWxsO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNpZ25VcEhyZWYoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuc2lnblVwVXJsID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICBpZiAodGhpcy5zaWduVXBVcmwpIHJldHVybiB0aGlzLnNpZ25VcFVybDtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGhvc3RlZFNpZ25VcCh7XG4gICAgICAgIGZyb250ZW5kQXBpOiB0aGlzLmF0bGFzLmZyb250ZW5kQXBpLFxuICAgICAgICByZWRpcmVjdFVybDogdGhpcy5hZnRlclVybCA/PyAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cubG9jYXRpb24uaHJlZiA6IHVuZGVmaW5lZCksXG4gICAgICAgIG5hdmlnYXRlOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZsb3cgPSBuZXcgQXRsYXNGbG93Q29udHJvbGxlcihcbiAgICB0aGlzLmF0bGFzLmNyZWF0ZUZhcGlDbGllbnQoKSxcbiAgICAoKSA9PiB0aGlzLmF0bGFzLnJlbG9hZCgpLFxuICAgIC8vIFJlc3VtZSBtaWQtZmxvdyBpZiBhbiBPQXV0aCByZWRpcmVjdCBjYW1lIGJhY2sgb3dpbmcgYSBzZWNvbmQgZmFjdG9yLlxuICAgIHRoaXMuYXRsYXMucGVuZGluZ0F0dGVtcHQsXG4gICAgKGtleSkgPT4gdHJhbnNsYXRlKHRoaXMuYXRsYXMubG9jYWxpemF0aW9uLCBrZXkpLFxuICApO1xuXG4gIC8vIFBhc3NrZXkgYXV0b2ZpbGwgcnVucyB3aGlsZSB0aGUgZmlyc3Qgc3RlcCBvZmZlcnMgcGFzc2tleXMgKGEgY29tcHV0ZWQsIHNvIGl0IHJlLWFybXMgb25seSB3aGVuIHRoYXQgY2hhbmdlcykuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFzc2tleU9mZmVyZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmZsb3cucGFzc2tleU9mZmVyZWQoKSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBwYXNza2V5QXV0b2ZpbGwgPSBlZmZlY3QoKCkgPT4gKHRoaXMucGFzc2tleU9mZmVyZWQoKSA/IHRoaXMuZmxvdy5wYXNza2V5LmFybUF1dG9maWxsKCkgOiB0aGlzLmZsb3cucGFzc2tleS5zdG9wQXV0b2ZpbGwoKSkpO1xuXG4gIHByb3RlY3RlZCBzdWJtaXRJZGVudGlmaWVyKHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuICAgIHRoaXMuZmxvdy5wYXNza2V5LnN0b3BBdXRvZmlsbCgpO1xuICAgIHZvaWQgdGhpcy5mbG93LnN1Ym1pdCh2YWx1ZXMpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB0aGlzLmZsb3cucGFzc2tleVN1cHBvcnRlZC5zZXQocGFzc2tleXNTdXBwb3J0ZWQoKSk7XG4gICAgLy8gSWYgc2VlZGVkIGZyb20gYSBwZW5kaW5nIGF0dGVtcHQgdGhhdCBpcyBhbHJlYWR5IHBvbGxhYmxlLCBzdGFydCBwb2xsaW5nLlxuICAgIHRoaXMuZmxvdy5zeW5jUG9sbGluZygpO1xuICAgIC8vIMKnNSB0aGUgaW5zdGFuY2UncyBjYXB0Y2hhIHNldHRpbmdzIChzd2l0Y2hpbmcgY2FwdGNoYSBvbiBpbiB0aGUgZGFzaGJvYXJkXG4gICAgLy8gZHJhd3MgaXQgaGVyZSB3aXRoIG5vIGNvZGUgY2hhbmdlKSBhbmQgZW1haWwgZGVsaXZlcnkgKG5vIGVtYWlsZWQtY29kZVxuICAgIC8vIG9wdGlvbiB3aGlsZSB0aGUgYXBwIGNhbm5vdCBzZW5kIGVtYWlsKS5cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHZvaWQgdGhpcy5mbG93LmxvYWRTZXR0aW5ncygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5mbG93LmRlc3Ryb3koKTtcbiAgfVxufVxuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, Input, inject, signal, } from '@angular/core';
|
|
2
|
-
import { awaitingPasskey, localizedErrorMessage, passkeysSupported } from '@atlasauth/js';
|
|
2
|
+
import { awaitingPasskey, existingAccountResetUrl, localizedErrorMessage, passkeysSupported } from '@atlasauth/js';
|
|
3
3
|
import { AtlasService } from '../atlas.service';
|
|
4
4
|
import { classFor } from '../appearance';
|
|
5
5
|
import { translate } from '../i18n';
|
|
@@ -23,7 +23,9 @@ export class SignUpComponent {
|
|
|
23
23
|
atlas = inject(AtlasService);
|
|
24
24
|
/** Where to send the user once the flow completes. Reserved for host routing. */
|
|
25
25
|
afterUrl;
|
|
26
|
-
|
|
26
|
+
/** Where the existing-account notice's "Forgot password?" goes. Default: the hosted sign-in page; `null` hides it. */
|
|
27
|
+
resetPasswordUrl;
|
|
28
|
+
flow = new AtlasFlowController(this.atlas.createFapiClient(), () => this.atlas.reload(), this.atlas.pendingAttempt, (key) => translate(this.atlas.localization, key), true);
|
|
27
29
|
/** Password or passkey-only sign-up (the latter when the instance offers it). */
|
|
28
30
|
mode = signal('password');
|
|
29
31
|
canPasskey() {
|
|
@@ -37,6 +39,9 @@ export class SignUpComponent {
|
|
|
37
39
|
this.flow.state.update((current) => ({ ...current, errors: [] }));
|
|
38
40
|
this.mode.set(this.passkeyForm() ? 'password' : 'passkey');
|
|
39
41
|
}
|
|
42
|
+
resetHref() {
|
|
43
|
+
return existingAccountResetUrl({ url: this.resetPasswordUrl, frontendApi: this.atlas.frontendApi, redirectUrl: this.afterUrl });
|
|
44
|
+
}
|
|
40
45
|
awaitingPasskey() {
|
|
41
46
|
return awaitingPasskey(this.flow.state().attempt);
|
|
42
47
|
}
|
|
@@ -61,8 +66,24 @@ export class SignUpComponent {
|
|
|
61
66
|
this.flow.destroy();
|
|
62
67
|
}
|
|
63
68
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SignUpComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
64
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: SignUpComponent, isStandalone: true, selector: "atlas-sign-up", inputs: { afterUrl: "afterUrl" }, ngImport: i0, template: `
|
|
65
|
-
@if (
|
|
69
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: SignUpComponent, isStandalone: true, selector: "atlas-sign-up", inputs: { afterUrl: "afterUrl", resetPasswordUrl: "resetPasswordUrl" }, ngImport: i0, template: `
|
|
70
|
+
@if (flow.existingAccountNotice()) {
|
|
71
|
+
<div [class]="cls('card', 'atlas-card')" data-atlas-existing-account="">
|
|
72
|
+
<h1 [class]="cls('headerTitle', 'atlas-title')">{{ t('signUp.title') }}</h1>
|
|
73
|
+
<p class="atlas-text">{{ t('signUp.existingAccount') }}</p>
|
|
74
|
+
@if (resetHref(); as href) {
|
|
75
|
+
<p class="atlas-text"><a class="atlas-link" [href]="href">{{ t('signIn.forgotPassword') }}</a></p>
|
|
76
|
+
}
|
|
77
|
+
<button
|
|
78
|
+
[class]="cls('formButtonPrimary', 'atlas-button')"
|
|
79
|
+
type="button"
|
|
80
|
+
[disabled]="flow.state().busy"
|
|
81
|
+
(click)="flow.continueAfterExistingAccount()"
|
|
82
|
+
>
|
|
83
|
+
{{ t('signUp.submit') }}
|
|
84
|
+
</button>
|
|
85
|
+
</div>
|
|
86
|
+
} @else if (awaitingPasskey()) {
|
|
66
87
|
<div [class]="cls('card', 'atlas-card')" data-atlas-passkey-sign-up="">
|
|
67
88
|
<h1 [class]="cls('headerTitle', 'atlas-title')">{{ t('signUp.title') }}</h1>
|
|
68
89
|
@for (error of flow.state().errors; track error.code) {
|
|
@@ -104,7 +125,7 @@ export class SignUpComponent {
|
|
|
104
125
|
"
|
|
105
126
|
></atlas-sign-up-form>
|
|
106
127
|
}
|
|
107
|
-
`, isInline: true, dependencies: [{ kind: "component", type: AttemptFlowComponent, selector: "atlas-attempt-flow", inputs: ["attempt", "busy", "errors", "sessionKept", "titleKey", "captcha", "firstFactors", "preparedFactor", "offerEmailSecondFactor", "emailedSecondFactor", "offerSmsSecondFactor", "textedSecondFactor", "enrollment", "enrollmentState", "emailVerification"], outputs: ["submitFlow", "chooseFactor", "emailSecondFactor", "smsSecondFactor", "resend", "policyDeclined"] }, { kind: "component", type: SignUpFormComponent, selector: "atlas-sign-up-form", inputs: ["settings", "busy", "errors", "captcha", "passkey", "switchable", "policies"], outputs: ["switchMode", "submitSignUp"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
128
|
+
`, isInline: true, dependencies: [{ kind: "component", type: AttemptFlowComponent, selector: "atlas-attempt-flow", inputs: ["attempt", "busy", "errors", "sessionKept", "titleKey", "captcha", "firstFactors", "preparedFactor", "passwordHold", "holdProof", "offerEmailSecondFactor", "emailedSecondFactor", "offerSmsSecondFactor", "textedSecondFactor", "enrollment", "enrollmentState", "emailVerification"], outputs: ["submitFlow", "chooseFactor", "usePassword", "emailSecondFactor", "smsSecondFactor", "resend", "policyDeclined"] }, { kind: "component", type: SignUpFormComponent, selector: "atlas-sign-up-form", inputs: ["settings", "busy", "errors", "captcha", "passkey", "switchable", "policies"], outputs: ["switchMode", "submitSignUp"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
108
129
|
}
|
|
109
130
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SignUpComponent, decorators: [{
|
|
110
131
|
type: Component,
|
|
@@ -114,7 +135,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
114
135
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
115
136
|
imports: [AttemptFlowComponent, SignUpFormComponent],
|
|
116
137
|
template: `
|
|
117
|
-
@if (
|
|
138
|
+
@if (flow.existingAccountNotice()) {
|
|
139
|
+
<div [class]="cls('card', 'atlas-card')" data-atlas-existing-account="">
|
|
140
|
+
<h1 [class]="cls('headerTitle', 'atlas-title')">{{ t('signUp.title') }}</h1>
|
|
141
|
+
<p class="atlas-text">{{ t('signUp.existingAccount') }}</p>
|
|
142
|
+
@if (resetHref(); as href) {
|
|
143
|
+
<p class="atlas-text"><a class="atlas-link" [href]="href">{{ t('signIn.forgotPassword') }}</a></p>
|
|
144
|
+
}
|
|
145
|
+
<button
|
|
146
|
+
[class]="cls('formButtonPrimary', 'atlas-button')"
|
|
147
|
+
type="button"
|
|
148
|
+
[disabled]="flow.state().busy"
|
|
149
|
+
(click)="flow.continueAfterExistingAccount()"
|
|
150
|
+
>
|
|
151
|
+
{{ t('signUp.submit') }}
|
|
152
|
+
</button>
|
|
153
|
+
</div>
|
|
154
|
+
} @else if (awaitingPasskey()) {
|
|
118
155
|
<div [class]="cls('card', 'atlas-card')" data-atlas-passkey-sign-up="">
|
|
119
156
|
<h1 [class]="cls('headerTitle', 'atlas-title')">{{ t('signUp.title') }}</h1>
|
|
120
157
|
@for (error of flow.state().errors; track error.code) {
|
|
@@ -160,5 +197,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
160
197
|
}]
|
|
161
198
|
}], propDecorators: { afterUrl: [{
|
|
162
199
|
type: Input
|
|
200
|
+
}], resetPasswordUrl: [{
|
|
201
|
+
type: Input
|
|
163
202
|
}] } });
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi11cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvc2lnbi11cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUdMLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBbUIsTUFBTSxlQUFlLENBQUM7QUFDM0csT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQW1CLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDcEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBRXhEOzs7Ozs7Ozs7OztHQVdHO0FBbURILE1BQU0sT0FBTyxlQUFlO0lBQ1QsS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUU5QyxpRkFBaUY7SUFDeEUsUUFBUSxDQUFVO0lBRVIsSUFBSSxHQUFHLElBQUksbUJBQW1CLENBQy9DLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsRUFDN0IsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQ3pCLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENB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QUNGOzhCQUtVLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIGluamVjdCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGF3YWl0aW5nUGFzc2tleSwgbG9jYWxpemVkRXJyb3JNZXNzYWdlLCBwYXNza2V5c1N1cHBvcnRlZCwgdHlwZSBGaWVsZEVycm9yIH0gZnJvbSAnQGF0bGFzYXV0aC9qcyc7XG5pbXBvcnQgeyBBdGxhc1NlcnZpY2UgfSBmcm9tICcuLi9hdGxhcy5zZXJ2aWNlJztcbmltcG9ydCB7IGNsYXNzRm9yLCB0eXBlIEVsZW1lbnRLZXkgfSBmcm9tICcuLi9hcHBlYXJhbmNlJztcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gJy4uL2kxOG4nO1xuaW1wb3J0IHsgQXR0ZW1wdEZsb3dDb21wb25lbnQgfSBmcm9tICcuL2F0dGVtcHQtZmxvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2lnblVwRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vc2lnbi11cC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBdGxhc0Zsb3dDb250cm9sbGVyIH0gZnJvbSAnLi9mbG93LWNvbnRyb2xsZXInO1xuXG4vKipcbiAqIGA8YXRsYXMtc2lnbi11cD5gIOKAlCBjcmVhdGVzIGFuIGFjY291bnQuIFRoZSBBbmd1bGFyIHBlZXIgb2YgUmVhY3Qnc1xuICogYDxTaWduVXAvPmAuIFRoZSBmaXJzdCBzdGVwIGlzIHRoZSBjcmVhdGUtYWNjb3VudCBmb3JtICh0aGUgaW5zdGFuY2Unc1xuICogY29uZmlndXJlZCBmaWVsZHMsIGVtYWlsLCBwYXNzd29yZCwgbGVnYWwgY29uc2VudCBhbmQg4oCUIHdoZW4gcmVxdWlyZWQg4oCUIHRoZVxuICogY2FwdGNoYSksIHdoaWNoIFBPU1RzIGAvdjEvY2xpZW50L3NpZ25fdXBzYDsgZnJvbSB0aGVyZSBpdCBzaGFyZXMgdGhlIGZsb3dcbiAqIGVuZ2luZSB3aXRoIGA8YXRsYXMtc2lnbi1pbj5gICh0aGUgZW1haWxlZC1jb2RlIHN0ZXAsIHRoZW4gdGhlIHRpY2tldFxuICogZXhjaGFuZ2UpLCBiZWNhdXNlIHRoZSBzZXF1ZW5jZSBvZiBzdGVwcyBpcyBkZWNpZGVkIGJ5IHRoZSBzZXJ2ZXIuXG4gKlxuICogYGBgaHRtbFxuICogPGF0bGFzLXNpZ24tdXAgKmF0bGFzU2lnbmVkT3V0PjwvYXRsYXMtc2lnbi11cD5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhdGxhcy1zaWduLXVwJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtBdHRlbXB0Rmxvd0NvbXBvbmVudCwgU2lnblVwRm9ybUNvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgQGlmIChhd2FpdGluZ1Bhc3NrZXkoKSkge1xuICAgICAgPGRpdiBbY2xhc3NdPVwiY2xzKCdjYXJkJywgJ2F0bGFzLWNhcmQnKVwiIGRhdGEtYXRsYXMtcGFzc2tleS1zaWduLXVwPVwiXCI+XG4gICAgICAgIDxoMSBbY2xhc3NdPVwiY2xzKCdoZWFkZXJUaXRsZScsICdhdGxhcy10aXRsZScpXCI+e3sgdCgnc2lnblVwLnRpdGxlJykgfX08L2gxPlxuICAgICAgICBAZm9yIChlcnJvciBvZiBmbG93LnN0YXRlKCkuZXJyb3JzOyB0cmFjayBlcnJvci5jb2RlKSB7XG4gICAgICAgICAgPHAgW2NsYXNzXT1cImNscygnZm9ybUZpZWxkRXJyb3InLCAnYXRsYXMtZXJyb3InKVwiIHJvbGU9XCJhbGVydFwiPnt7IGVycm9yVGV4dChlcnJvcikgfX08L3A+XG4gICAgICAgIH1cbiAgICAgICAgPHAgY2xhc3M9XCJhdGxhcy10ZXh0XCI+e3sgdCgnc2lnblVwLnBhc3NrZXlQcm9tcHQnKSB9fTwvcD5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIFtjbGFzc109XCJjbHMoJ2Zvcm1CdXR0b25QcmltYXJ5JywgJ2F0bGFzLWJ1dHRvbicpXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiZmxvdy5zdGF0ZSgpLmJ1c3lcIlxuICAgICAgICAgIChjbGljayk9XCJmbG93LmNyZWF0ZVBhc3NrZXkoKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyB0KCdzaWduVXAucGFzc2tleUNyZWF0ZScpIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgfSBAZWxzZSBpZiAoZmxvdy5zdGF0ZSgpLmF0dGVtcHQpIHtcbiAgICAgIDxhdGxhcy1hdHRlbXB0LWZsb3dcbiAgICAgICAgW2F0dGVtcHRdPVwiZmxvdy5zdGF0ZSgpLmF0dGVtcHRcIlxuICAgICAgICBbYnVzeV09XCJmbG93LnN0YXRlKCkuYnVzeVwiXG4gICAgICAgIFtlcnJvcnNdPVwiZmxvdy5zdGF0ZSgpLmVycm9yc1wiXG4gICAgICAgIFtzZXNzaW9uS2VwdF09XCJmbG93LnN0YXRlKCkuc2Vzc2lvbktlcHRcIlxuICAgICAgICB0aXRsZUtleT1cInNpZ25VcC50aXRsZVwiXG4gICAgICAgIFtlbWFpbFZlcmlmaWNhdGlvbl09XCJmbG93LnNldHRpbmdzKCk/LmFjY291bnQ/LmVtYWlsVmVyaWZpY2F0aW9uID8/ICdjb2RlJ1wiXG4gICAgICAgIChzdWJtaXRGbG93KT1cImZsb3cuc3VibWl0KCRldmVudClcIlxuICAgICAgICAocmVzZW5kKT1cImZsb3cucmVzZW5kU2lnblVwKClcIlxuICAgICAgPjwvYXRsYXMtYXR0ZW1wdC1mbG93PlxuICAgIH0gQGVsc2Uge1xuICAgICAgPGF0bGFzLXNpZ24tdXAtZm9ybVxuICAgICAgICBbc2V0dGluZ3NdPVwiZmxvdy5zZXR0aW5ncygpXCJcbiAgICAgICAgW2J1c3ldPVwiZmxvdy5zdGF0ZSgpLmJ1c3lcIlxuICAgICAgICBbZXJyb3JzXT1cImZsb3cuc3RhdGUoKS5lcnJvcnNcIlxuICAgICAgICBbY2FwdGNoYV09XCJmbG93LnNpZ25VcENhcHRjaGFEcmF3bigpID8gZmxvdy5zaWduVXBDYXB0Y2hhIDogbnVsbFwiXG4gICAgICAgIFtwb2xpY2llc109XCJmbG93LnBvbGljaWVzXCJcbiAgICAgICAgW3Bhc3NrZXldPVwicGFzc2tleUZvcm0oKVwiXG4gICAgICAgIFtzd2l0Y2hhYmxlXT1cImNhblBhc3NrZXkoKVwiXG4gICAgICAgIChzd2l0Y2hNb2RlKT1cInRvZ2dsZU1vZGUoKVwiXG4gICAgICAgIChzdWJtaXRTaWduVXApPVwiXG4gICAgICAgICAgcGFzc2tleUZvcm0oKSA/IGZsb3cuY3JlYXRlV2l0aFBhc3NrZXkoJGV2ZW50LnZhbHVlcywgJGV2ZW50LmNvbnNlbnQpIDogZmxvdy5jcmVhdGUoJGV2ZW50LnZhbHVlcywgJGV2ZW50LmNvbnNlbnQpXG4gICAgICAgIFwiXG4gICAgICA+PC9hdGxhcy1zaWduLXVwLWZvcm0+XG4gICAgfVxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBTaWduVXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXRsYXMgPSBpbmplY3QoQXRsYXNTZXJ2aWNlKTtcblxuICAvKiogV2hlcmUgdG8gc2VuZCB0aGUgdXNlciBvbmNlIHRoZSBmbG93IGNvbXBsZXRlcy4gUmVzZXJ2ZWQgZm9yIGhvc3Qgcm91dGluZy4gKi9cbiAgQElucHV0KCkgYWZ0ZXJVcmw/OiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZsb3cgPSBuZXcgQXRsYXNGbG93Q29udHJvbGxlcihcbiAgICB0aGlzLmF0bGFzLmNyZWF0ZUZhcGlDbGllbnQoKSxcbiAgICAoKSA9PiB0aGlzLmF0bGFzLnJlbG9hZCgpLFxuICAgIHRoaXMuYXRsYXMucGVuZGluZ0F0dGVtcHQsXG4gICAgKGtleSkgPT4gdHJhbnNsYXRlKHRoaXMuYXRsYXMubG9jYWxpemF0aW9uLCBrZXkpLFxuICApO1xuXG4gIC8qKiBQYXNzd29yZCBvciBwYXNza2V5LW9ubHkgc2lnbi11cCAodGhlIGxhdHRlciB3aGVuIHRoZSBpbnN0YW5jZSBvZmZlcnMgaXQpLiAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbW9kZSA9IHNpZ25hbDwncGFzc3dvcmQnIHwgJ3Bhc3NrZXknPigncGFzc3dvcmQnKTtcblxuICBwcm90ZWN0ZWQgY2FuUGFzc2tleSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmZsb3cuc2V0dGluZ3MoKT8uYWNjb3VudC5wYXNza2V5U2lnblVwICYmIHBhc3NrZXlzU3VwcG9ydGVkKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFzc2tleUZvcm0oKTogeyBlbWFpbDogJ29mZicgfCAnb3B0aW9uYWwnIHwgJ3JlcXVpcmVkJyB9IHwgbnVsbCB7XG4gICAgY29uc3Qgb2ZmZXIgPSB0aGlzLmZsb3cuc2V0dGluZ3MoKT8uYWNjb3VudC5wYXNza2V5U2lnblVwID8/IG51bGw7XG4gICAgcmV0dXJuIHRoaXMubW9kZSgpID09PSAncGFzc2tleScgJiYgb2ZmZXIgJiYgdGhpcy5jYW5QYXNza2V5KCkgPyB7IGVtYWlsOiBvZmZlci5lbWFpbCB9IDogbnVsbDtcbiAgfVxuXG4gIHByb3RlY3RlZCB0b2dnbGVNb2RlKCk6IHZvaWQge1xuICAgIHRoaXMuZmxvdy5zdGF0ZS51cGRhdGUoKGN1cnJlbnQpID0+ICh7IC4uLmN1cnJlbnQsIGVycm9yczogW10gfSkpO1xuICAgIHRoaXMubW9kZS5zZXQodGhpcy5wYXNza2V5Rm9ybSgpID8gJ3Bhc3N3b3JkJyA6ICdwYXNza2V5Jyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXdhaXRpbmdQYXNza2V5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhd2FpdGluZ1Bhc3NrZXkodGhpcy5mbG93LnN0YXRlKCkuYXR0ZW1wdCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRyYW5zbGF0ZSh0aGlzLmF0bGFzLmxvY2FsaXphdGlvbiwga2V5KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbHMoa2V5OiBFbGVtZW50S2V5LCBiYXNlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBjbGFzc0ZvcihrZXksIHRoaXMuYXRsYXMuYXBwZWFyYW5jZSwgYmFzZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZXJyb3JUZXh0KGVycm9yOiBGaWVsZEVycm9yKTogc3RyaW5nIHtcbiAgICBjb25zdCBsYXllciA9ICh0aGlzLmF0bGFzIGFzIHsgZXJyb3JMb2NhbGl6YXRpb24/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IH0pLmVycm9yTG9jYWxpemF0aW9uO1xuICAgIHJldHVybiBsb2NhbGl6ZWRFcnJvck1lc3NhZ2UoZXJyb3IsIGxheWVyID8/IHRoaXMuYXRsYXMubG9jYWxpemF0aW9uLCB0aGlzLmF0bGFzLmxvY2FsaXphdGlvbik7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyDCpzUgdGhlIGluc3RhbmNlJ3Mgc2lnbi11cCBmaWVsZHMsIGNvbnNlbnQgcG9saWN5IGFuZCBjYXB0Y2hhIHNldHRpbmdzLlxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdm9pZCB0aGlzLmZsb3cubG9hZFNldHRpbmdzKCk7XG4gICAgICB2b2lkIHRoaXMuZmxvdy5sb2FkUG9saWNpZXModGhpcy5hdGxhcy5sb2NhbGUgPz8gdW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmZsb3cuZGVzdHJveSgpO1xuICB9XG59XG4iXX0=
|
|
203
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi11cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvc2lnbi11cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUdMLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBbUIsTUFBTSxlQUFlLENBQUM7QUFDcEksT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQW1CLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDcEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBRXhEOzs7Ozs7Ozs7OztHQVdHO0FBbUVILE1BQU0sT0FBTyxlQUFlO0lBQ1QsS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUU5QyxpRkFBaUY7SUFDeEUsUUFBUSxDQUFVO0lBRTNCLHNIQUFzSDtJQUM3RyxnQkFBZ0IsQ0FBaUI7SUFFdkIsSUFBSSxHQUFHLElBQUksbUJBQW1CLENBQy9DLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsRUFDN0IsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQ3pCLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENB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RSxtQkFBbUI7OzRGQThEeEMsZUFBZTtrQkFsRTNCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsbUJBQW1CLENBQUM7b0JBQ3BELFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyRFQ7aUJBQ0Y7OEJBS1UsUUFBUTtzQkFBaEIsS0FBSztnQkFHRyxnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIGluamVjdCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGF3YWl0aW5nUGFzc2tleSwgZXhpc3RpbmdBY2NvdW50UmVzZXRVcmwsIGxvY2FsaXplZEVycm9yTWVzc2FnZSwgcGFzc2tleXNTdXBwb3J0ZWQsIHR5cGUgRmllbGRFcnJvciB9IGZyb20gJ0BhdGxhc2F1dGgvanMnO1xuaW1wb3J0IHsgQXRsYXNTZXJ2aWNlIH0gZnJvbSAnLi4vYXRsYXMuc2VydmljZSc7XG5pbXBvcnQgeyBjbGFzc0ZvciwgdHlwZSBFbGVtZW50S2V5IH0gZnJvbSAnLi4vYXBwZWFyYW5jZSc7XG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tICcuLi9pMThuJztcbmltcG9ydCB7IEF0dGVtcHRGbG93Q29tcG9uZW50IH0gZnJvbSAnLi9hdHRlbXB0LWZsb3cuY29tcG9uZW50JztcbmltcG9ydCB7IFNpZ25VcEZvcm1Db21wb25lbnQgfSBmcm9tICcuL3NpZ24tdXAtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXRsYXNGbG93Q29udHJvbGxlciB9IGZyb20gJy4vZmxvdy1jb250cm9sbGVyJztcblxuLyoqXG4gKiBgPGF0bGFzLXNpZ24tdXA+YCDigJQgY3JlYXRlcyBhbiBhY2NvdW50LiBUaGUgQW5ndWxhciBwZWVyIG9mIFJlYWN0J3NcbiAqIGA8U2lnblVwLz5gLiBUaGUgZmlyc3Qgc3RlcCBpcyB0aGUgY3JlYXRlLWFjY291bnQgZm9ybSAodGhlIGluc3RhbmNlJ3NcbiAqIGNvbmZpZ3VyZWQgZmllbGRzLCBlbWFpbCwgcGFzc3dvcmQsIGxlZ2FsIGNvbnNlbnQgYW5kIOKAlCB3aGVuIHJlcXVpcmVkIOKAlCB0aGVcbiAqIGNhcHRjaGEpLCB3aGljaCBQT1NUcyBgL3YxL2NsaWVudC9zaWduX3Vwc2A7IGZyb20gdGhlcmUgaXQgc2hhcmVzIHRoZSBmbG93XG4gKiBlbmdpbmUgd2l0aCBgPGF0bGFzLXNpZ24taW4+YCAodGhlIGVtYWlsZWQtY29kZSBzdGVwLCB0aGVuIHRoZSB0aWNrZXRcbiAqIGV4Y2hhbmdlKSwgYmVjYXVzZSB0aGUgc2VxdWVuY2Ugb2Ygc3RlcHMgaXMgZGVjaWRlZCBieSB0aGUgc2VydmVyLlxuICpcbiAqIGBgYGh0bWxcbiAqIDxhdGxhcy1zaWduLXVwICphdGxhc1NpZ25lZE91dD48L2F0bGFzLXNpZ24tdXA+XG4gKiBgYGBcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXRsYXMtc2lnbi11cCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbQXR0ZW1wdEZsb3dDb21wb25lbnQsIFNpZ25VcEZvcm1Db21wb25lbnRdLFxuICB0ZW1wbGF0ZTogYFxuICAgIEBpZiAoZmxvdy5leGlzdGluZ0FjY291bnROb3RpY2UoKSkge1xuICAgICAgPGRpdiBbY2xhc3NdPVwiY2xzKCdjYXJkJywgJ2F0bGFzLWNhcmQnKVwiIGRhdGEtYXRsYXMtZXhpc3RpbmctYWNjb3VudD1cIlwiPlxuICAgICAgICA8aDEgW2NsYXNzXT1cImNscygnaGVhZGVyVGl0bGUnLCAnYXRsYXMtdGl0bGUnKVwiPnt7IHQoJ3NpZ25VcC50aXRsZScpIH19PC9oMT5cbiAgICAgICAgPHAgY2xhc3M9XCJhdGxhcy10ZXh0XCI+e3sgdCgnc2lnblVwLmV4aXN0aW5nQWNjb3VudCcpIH19PC9wPlxuICAgICAgICBAaWYgKHJlc2V0SHJlZigpOyBhcyBocmVmKSB7XG4gICAgICAgICAgPHAgY2xhc3M9XCJhdGxhcy10ZXh0XCI+PGEgY2xhc3M9XCJhdGxhcy1saW5rXCIgW2hyZWZdPVwiaHJlZlwiPnt7IHQoJ3NpZ25Jbi5mb3Jnb3RQYXNzd29yZCcpIH19PC9hPjwvcD5cbiAgICAgICAgfVxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgW2NsYXNzXT1cImNscygnZm9ybUJ1dHRvblByaW1hcnknLCAnYXRsYXMtYnV0dG9uJylcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJmbG93LnN0YXRlKCkuYnVzeVwiXG4gICAgICAgICAgKGNsaWNrKT1cImZsb3cuY29udGludWVBZnRlckV4aXN0aW5nQWNjb3VudCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHQoJ3NpZ25VcC5zdWJtaXQnKSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIH0gQGVsc2UgaWYgKGF3YWl0aW5nUGFzc2tleSgpKSB7XG4gICAgICA8ZGl2IFtjbGFzc109XCJjbHMoJ2NhcmQnLCAnYXRsYXMtY2FyZCcpXCIgZGF0YS1hdGxhcy1wYXNza2V5LXNpZ24tdXA9XCJcIj5cbiAgICAgICAgPGgxIFtjbGFzc109XCJjbHMoJ2hlYWRlclRpdGxlJywgJ2F0bGFzLXRpdGxlJylcIj57eyB0KCdzaWduVXAudGl0bGUnKSB9fTwvaDE+XG4gICAgICAgIEBmb3IgKGVycm9yIG9mIGZsb3cuc3RhdGUoKS5lcnJvcnM7IHRyYWNrIGVycm9yLmNvZGUpIHtcbiAgICAgICAgICA8cCBbY2xhc3NdPVwiY2xzKCdmb3JtRmllbGRFcnJvcicsICdhdGxhcy1lcnJvcicpXCIgcm9sZT1cImFsZXJ0XCI+e3sgZXJyb3JUZXh0KGVycm9yKSB9fTwvcD5cbiAgICAgICAgfVxuICAgICAgICA8cCBjbGFzcz1cImF0bGFzLXRleHRcIj57eyB0KCdzaWduVXAucGFzc2tleVByb21wdCcpIH19PC9wPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgW2NsYXNzXT1cImNscygnZm9ybUJ1dHRvblByaW1hcnknLCAnYXRsYXMtYnV0dG9uJylcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJmbG93LnN0YXRlKCkuYnVzeVwiXG4gICAgICAgICAgKGNsaWNrKT1cImZsb3cuY3JlYXRlUGFzc2tleSgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHQoJ3NpZ25VcC5wYXNza2V5Q3JlYXRlJykgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIGlmIChmbG93LnN0YXRlKCkuYXR0ZW1wdCkge1xuICAgICAgPGF0bGFzLWF0dGVtcHQtZmxvd1xuICAgICAgICBbYXR0ZW1wdF09XCJmbG93LnN0YXRlKCkuYXR0ZW1wdFwiXG4gICAgICAgIFtidXN5XT1cImZsb3cuc3RhdGUoKS5idXN5XCJcbiAgICAgICAgW2Vycm9yc109XCJmbG93LnN0YXRlKCkuZXJyb3JzXCJcbiAgICAgICAgW3Nlc3Npb25LZXB0XT1cImZsb3cuc3RhdGUoKS5zZXNzaW9uS2VwdFwiXG4gICAgICAgIHRpdGxlS2V5PVwic2lnblVwLnRpdGxlXCJcbiAgICAgICAgW2VtYWlsVmVyaWZpY2F0aW9uXT1cImZsb3cuc2V0dGluZ3MoKT8uYWNjb3VudD8uZW1haWxWZXJpZmljYXRpb24gPz8gJ2NvZGUnXCJcbiAgICAgICAgKHN1Ym1pdEZsb3cpPVwiZmxvdy5zdWJtaXQoJGV2ZW50KVwiXG4gICAgICAgIChyZXNlbmQpPVwiZmxvdy5yZXNlbmRTaWduVXAoKVwiXG4gICAgICA+PC9hdGxhcy1hdHRlbXB0LWZsb3c+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8YXRsYXMtc2lnbi11cC1mb3JtXG4gICAgICAgIFtzZXR0aW5nc109XCJmbG93LnNldHRpbmdzKClcIlxuICAgICAgICBbYnVzeV09XCJmbG93LnN0YXRlKCkuYnVzeVwiXG4gICAgICAgIFtlcnJvcnNdPVwiZmxvdy5zdGF0ZSgpLmVycm9yc1wiXG4gICAgICAgIFtjYXB0Y2hhXT1cImZsb3cuc2lnblVwQ2FwdGNoYURyYXduKCkgPyBmbG93LnNpZ25VcENhcHRjaGEgOiBudWxsXCJcbiAgICAgICAgW3BvbGljaWVzXT1cImZsb3cucG9saWNpZXNcIlxuICAgICAgICBbcGFzc2tleV09XCJwYXNza2V5Rm9ybSgpXCJcbiAgICAgICAgW3N3aXRjaGFibGVdPVwiY2FuUGFzc2tleSgpXCJcbiAgICAgICAgKHN3aXRjaE1vZGUpPVwidG9nZ2xlTW9kZSgpXCJcbiAgICAgICAgKHN1Ym1pdFNpZ25VcCk9XCJcbiAgICAgICAgICBwYXNza2V5Rm9ybSgpID8gZmxvdy5jcmVhdGVXaXRoUGFzc2tleSgkZXZlbnQudmFsdWVzLCAkZXZlbnQuY29uc2VudCkgOiBmbG93LmNyZWF0ZSgkZXZlbnQudmFsdWVzLCAkZXZlbnQuY29uc2VudClcbiAgICAgICAgXCJcbiAgICAgID48L2F0bGFzLXNpZ24tdXAtZm9ybT5cbiAgICB9XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIFNpZ25VcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhdGxhcyA9IGluamVjdChBdGxhc1NlcnZpY2UpO1xuXG4gIC8qKiBXaGVyZSB0byBzZW5kIHRoZSB1c2VyIG9uY2UgdGhlIGZsb3cgY29tcGxldGVzLiBSZXNlcnZlZCBmb3IgaG9zdCByb3V0aW5nLiAqL1xuICBASW5wdXQoKSBhZnRlclVybD86IHN0cmluZztcblxuICAvKiogV2hlcmUgdGhlIGV4aXN0aW5nLWFjY291bnQgbm90aWNlJ3MgXCJGb3Jnb3QgcGFzc3dvcmQ/XCIgZ29lcy4gRGVmYXVsdDogdGhlIGhvc3RlZCBzaWduLWluIHBhZ2U7IGBudWxsYCBoaWRlcyBpdC4gKi9cbiAgQElucHV0KCkgcmVzZXRQYXNzd29yZFVybD86IHN0cmluZyB8IG51bGw7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZsb3cgPSBuZXcgQXRsYXNGbG93Q29udHJvbGxlcihcbiAgICB0aGlzLmF0bGFzLmNyZWF0ZUZhcGlDbGllbnQoKSxcbiAgICAoKSA9PiB0aGlzLmF0bGFzLnJlbG9hZCgpLFxuICAgIHRoaXMuYXRsYXMucGVuZGluZ0F0dGVtcHQsXG4gICAgKGtleSkgPT4gdHJhbnNsYXRlKHRoaXMuYXRsYXMubG9jYWxpemF0aW9uLCBrZXkpLFxuICAgIHRydWUsXG4gICk7XG5cbiAgLyoqIFBhc3N3b3JkIG9yIHBhc3NrZXktb25seSBzaWduLXVwICh0aGUgbGF0dGVyIHdoZW4gdGhlIGluc3RhbmNlIG9mZmVycyBpdCkuICovXG4gIHByb3RlY3RlZCByZWFkb25seSBtb2RlID0gc2lnbmFsPCdwYXNzd29yZCcgfCAncGFzc2tleSc+KCdwYXNzd29yZCcpO1xuXG4gIHByb3RlY3RlZCBjYW5QYXNza2V5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZmxvdy5zZXR0aW5ncygpPy5hY2NvdW50LnBhc3NrZXlTaWduVXAgJiYgcGFzc2tleXNTdXBwb3J0ZWQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXNza2V5Rm9ybSgpOiB7IGVtYWlsOiAnb2ZmJyB8ICdvcHRpb25hbCcgfCAncmVxdWlyZWQnIH0gfCBudWxsIHtcbiAgICBjb25zdCBvZmZlciA9IHRoaXMuZmxvdy5zZXR0aW5ncygpPy5hY2NvdW50LnBhc3NrZXlTaWduVXAgPz8gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5tb2RlKCkgPT09ICdwYXNza2V5JyAmJiBvZmZlciAmJiB0aGlzLmNhblBhc3NrZXkoKSA/IHsgZW1haWw6IG9mZmVyLmVtYWlsIH0gOiBudWxsO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRvZ2dsZU1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy5mbG93LnN0YXRlLnVwZGF0ZSgoY3VycmVudCkgPT4gKHsgLi4uY3VycmVudCwgZXJyb3JzOiBbXSB9KSk7XG4gICAgdGhpcy5tb2RlLnNldCh0aGlzLnBhc3NrZXlGb3JtKCkgPyAncGFzc3dvcmQnIDogJ3Bhc3NrZXknKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldEhyZWYoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIGV4aXN0aW5nQWNjb3VudFJlc2V0VXJsKHsgdXJsOiB0aGlzLnJlc2V0UGFzc3dvcmRVcmwsIGZyb250ZW5kQXBpOiB0aGlzLmF0bGFzLmZyb250ZW5kQXBpLCByZWRpcmVjdFVybDogdGhpcy5hZnRlclVybCB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhd2FpdGluZ1Bhc3NrZXkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGF3YWl0aW5nUGFzc2tleSh0aGlzLmZsb3cuc3RhdGUoKS5hdHRlbXB0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHJhbnNsYXRlKHRoaXMuYXRsYXMubG9jYWxpemF0aW9uLCBrZXkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNscyhrZXk6IEVsZW1lbnRLZXksIGJhc2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNsYXNzRm9yKGtleSwgdGhpcy5hdGxhcy5hcHBlYXJhbmNlLCBiYXNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlcnJvclRleHQoZXJyb3I6IEZpZWxkRXJyb3IpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxheWVyID0gKHRoaXMuYXRsYXMgYXMgeyBlcnJvckxvY2FsaXphdGlvbj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfSkuZXJyb3JMb2NhbGl6YXRpb247XG4gICAgcmV0dXJuIGxvY2FsaXplZEVycm9yTWVzc2FnZShlcnJvciwgbGF5ZXIgPz8gdGhpcy5hdGxhcy5sb2NhbGl6YXRpb24sIHRoaXMuYXRsYXMubG9jYWxpemF0aW9uKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIMKnNSB0aGUgaW5zdGFuY2UncyBzaWduLXVwIGZpZWxkcywgY29uc2VudCBwb2xpY3kgYW5kIGNhcHRjaGEgc2V0dGluZ3MuXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2b2lkIHRoaXMuZmxvdy5sb2FkU2V0dGluZ3MoKTtcbiAgICAgIHZvaWQgdGhpcy5mbG93LmxvYWRQb2xpY2llcyh0aGlzLmF0bGFzLmxvY2FsZSA/PyB1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZmxvdy5kZXN0cm95KCk7XG4gIH1cbn1cbiJdfQ==
|