@atlasauth/angular 0.6.0 → 0.6.1

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 CHANGED
@@ -1,5 +1,8 @@
1
1
  # @atlasauth/angular changelog
2
2
 
3
+ ## 0.6.1
4
+ - **`<atlas-user-profile>` can verify an address.** Each unverified email address now has a **Verify** button: it emails a code (`POST /v1/client/me/email_addresses/{id}/prepare_verification`) and shows a field to enter it (`attempt_verification`), then reloads the user. This includes the sign-up address on an app that does not require email verification, which now reads unverified until it is proven. New catalog keys: `userProfile.verify`, `userProfile.verifyConfirm`, `userProfile.verifyCodePlaceholder`, `userProfile.verifySendFailed`, `userProfile.verifyCodeRejected`.
5
+
3
6
  ## 0.6.0
4
7
  - **New `provideAtlas({ onSignOut })`, `AtlasService.signOut$` and `AtlasService.onSignOut(listener)`**: `onSignOut({ reason, sessionId })` fired once each time a signed-in user becomes signed out, on every
5
8
  path: `reason` is `user` (this tab), `other_tab`, `session_expired`, `revoked` (the session was ended elsewhere,
@@ -1,4 +1,4 @@
1
- import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';
2
2
  import { AtlasService } from '../atlas.service';
3
3
  import { classFor } from '../appearance';
4
4
  import { translate } from '../i18n';
@@ -10,6 +10,43 @@ import * as i0 from "@angular/core";
10
10
  */
11
11
  export class UserProfileComponent {
12
12
  atlas = inject(AtlasService);
13
+ // An unverified address (added and never confirmed, or the sign-up address on
14
+ // an app that did not require verification) can be proven here: send a code,
15
+ // then enter it.
16
+ verifying = signal(null);
17
+ code = signal('');
18
+ busy = signal(false);
19
+ verifyError = signal(null);
20
+ client = this.atlas.createFapiClient();
21
+ async sendCode(id) {
22
+ this.verifyError.set(null);
23
+ this.busy.set(true);
24
+ const res = await this.client.post(`/v1/client/me/email_addresses/${id}/prepare_verification`);
25
+ this.busy.set(false);
26
+ if (!res.ok) {
27
+ this.verifyError.set(this.t('userProfile.verifySendFailed'));
28
+ return;
29
+ }
30
+ this.code.set('');
31
+ this.verifying.set(id);
32
+ }
33
+ async confirmCode() {
34
+ const id = this.verifying();
35
+ if (!id)
36
+ return;
37
+ this.verifyError.set(null);
38
+ this.busy.set(true);
39
+ const res = await this.client.post(`/v1/client/me/email_addresses/${id}/attempt_verification`, {
40
+ code: this.code(),
41
+ });
42
+ this.busy.set(false);
43
+ if (!res.ok) {
44
+ this.verifyError.set(this.t('userProfile.verifyCodeRejected'));
45
+ return;
46
+ }
47
+ this.verifying.set(null);
48
+ await this.atlas.reload();
49
+ }
13
50
  t(key) {
14
51
  return translate(this.atlas.localization, key);
15
52
  }
@@ -30,10 +67,42 @@ export class UserProfileComponent {
30
67
  {{ email.email_address }}
31
68
  @if (!email.verified) {
32
69
  <em> — {{ t('userProfile.unverified') }}</em>
70
+ @if (verifying() === email.id) {
71
+ <span data-atlas="email-verify">
72
+ <input
73
+ [class]="cls('formFieldInput', 'atlas-account-input')"
74
+ inputmode="numeric"
75
+ autocomplete="one-time-code"
76
+ [placeholder]="t('userProfile.verifyCodePlaceholder')"
77
+ [value]="code()"
78
+ (input)="code.set($any($event.target).value)"
79
+ />
80
+ <button
81
+ [class]="cls('formButtonSecondary', 'atlas-button-secondary')"
82
+ type="button"
83
+ [disabled]="busy()"
84
+ (click)="confirmCode()"
85
+ >
86
+ {{ t('userProfile.verifyConfirm') }}
87
+ </button>
88
+ </span>
89
+ } @else {
90
+ <button
91
+ [class]="cls('formButtonSecondary', 'atlas-button-secondary')"
92
+ type="button"
93
+ [disabled]="busy()"
94
+ (click)="sendCode(email.id)"
95
+ >
96
+ {{ t('userProfile.verify') }}
97
+ </button>
98
+ }
33
99
  }
34
100
  </li>
35
101
  }
36
102
  </ul>
103
+ @if (verifyError(); as message) {
104
+ <p role="alert">{{ message }}</p>
105
+ }
37
106
  </section>
38
107
 
39
108
  <section>
@@ -63,10 +132,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
63
132
  {{ email.email_address }}
64
133
  @if (!email.verified) {
65
134
  <em> — {{ t('userProfile.unverified') }}</em>
135
+ @if (verifying() === email.id) {
136
+ <span data-atlas="email-verify">
137
+ <input
138
+ [class]="cls('formFieldInput', 'atlas-account-input')"
139
+ inputmode="numeric"
140
+ autocomplete="one-time-code"
141
+ [placeholder]="t('userProfile.verifyCodePlaceholder')"
142
+ [value]="code()"
143
+ (input)="code.set($any($event.target).value)"
144
+ />
145
+ <button
146
+ [class]="cls('formButtonSecondary', 'atlas-button-secondary')"
147
+ type="button"
148
+ [disabled]="busy()"
149
+ (click)="confirmCode()"
150
+ >
151
+ {{ t('userProfile.verifyConfirm') }}
152
+ </button>
153
+ </span>
154
+ } @else {
155
+ <button
156
+ [class]="cls('formButtonSecondary', 'atlas-button-secondary')"
157
+ type="button"
158
+ [disabled]="busy()"
159
+ (click)="sendCode(email.id)"
160
+ >
161
+ {{ t('userProfile.verify') }}
162
+ </button>
163
+ }
66
164
  }
67
165
  </li>
68
166
  }
69
167
  </ul>
168
+ @if (verifyError(); as message) {
169
+ <p role="alert">{{ message }}</p>
170
+ }
70
171
  </section>
71
172
 
72
173
  <section>
@@ -78,4 +179,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
78
179
  `,
79
180
  }]
80
181
  }] });
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1wcm9maWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy91c2VyLXByb2ZpbGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsUUFBUSxFQUFtQixNQUFNLGVBQWUsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUVwQzs7OztHQUlHO0FBZ0NILE1BQU0sT0FBTyxvQkFBb0I7SUFDWixLQUFLLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRXRDLENBQUMsQ0FBQyxHQUFXO1FBQ3JCLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFUyxHQUFHLENBQUMsR0FBZSxFQUFFLElBQVk7UUFDekMsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BELENBQUM7d0dBVFUsb0JBQW9COzRGQUFwQixvQkFBb0IsOEVBM0JyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCVDs7NEZBRVUsb0JBQW9CO2tCQS9CaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCVDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXRsYXNTZXJ2aWNlIH0gZnJvbSAnLi4vYXRsYXMuc2VydmljZSc7XG5pbXBvcnQgeyBjbGFzc0ZvciwgdHlwZSBFbGVtZW50S2V5IH0gZnJvbSAnLi4vYXBwZWFyYW5jZSc7XG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tICcuLi9pMThuJztcblxuLyoqXG4gKiBgPGF0bGFzLXVzZXItcHJvZmlsZT5gIOKAlCB0aGUgc2lnbmVkLWluIHVzZXIncyBhY2NvdW50IHN1cmZhY2UgKGVtYWlscyxcbiAqIHNlY3VyaXR5KS4gVGhlIEFuZ3VsYXIgcGVlciBvZiBSZWFjdCdzIGA8VXNlclByb2ZpbGUvPmAuIFJlbmRlcnMgbm90aGluZyB3aGVuXG4gKiB0aGVyZSBpcyBubyB1c2VyLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhdGxhcy11c2VyLXByb2ZpbGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICBAaWYgKGF0bGFzLnVzZXIoKTsgYXMgdXNlcikge1xuICAgICAgPGRpdiBbY2xhc3NdPVwiY2xzKCdjYXJkJywgJ2F0bGFzLWNhcmQnKVwiPlxuICAgICAgICA8aDE+e3sgdCgndXNlclByb2ZpbGUudGl0bGUnKSB9fTwvaDE+XG5cbiAgICAgICAgPHNlY3Rpb24+XG4gICAgICAgICAgPGgyPnt7IHQoJ3VzZXJQcm9maWxlLmVtYWlsc1NlY3Rpb24nKSB9fTwvaDI+XG4gICAgICAgICAgPHVsPlxuICAgICAgICAgICAgQGZvciAoZW1haWwgb2YgdXNlci5lbWFpbF9hZGRyZXNzZXMgPz8gW107IHRyYWNrIGVtYWlsLmlkKSB7XG4gICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICB7eyBlbWFpbC5lbWFpbF9hZGRyZXNzIH19XG4gICAgICAgICAgICAgICAgQGlmICghZW1haWwudmVyaWZpZWQpIHtcbiAgICAgICAgICAgICAgICAgIDxlbT4g4oCUIHt7IHQoJ3VzZXJQcm9maWxlLnVudmVyaWZpZWQnKSB9fTwvZW0+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8c2VjdGlvbj5cbiAgICAgICAgICA8aDI+e3sgdCgndXNlclByb2ZpbGUuc2VjdXJpdHlTZWN0aW9uJykgfX08L2gyPlxuICAgICAgICAgIDxwPnt7IHVzZXIubWZhX2VuYWJsZWQgPyAnMkZBIG9uJyA6ICcyRkEgb2ZmJyB9fTwvcD5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9kaXY+XG4gICAgfVxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBVc2VyUHJvZmlsZUNvbXBvbmVudCB7XG4gIHByb3RlY3RlZCByZWFkb25seSBhdGxhcyA9IGluamVjdChBdGxhc1NlcnZpY2UpO1xuXG4gIHByb3RlY3RlZCB0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHJhbnNsYXRlKHRoaXMuYXRsYXMubG9jYWxpemF0aW9uLCBrZXkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNscyhrZXk6IEVsZW1lbnRLZXksIGJhc2U6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNsYXNzRm9yKGtleSwgdGhpcy5hdGxhcy5hcHBlYXJhbmNlLCBiYXNlKTtcbiAgfVxufVxuIl19
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1wcm9maWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy91c2VyLXByb2ZpbGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBbUIsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7QUFFcEM7Ozs7R0FJRztBQWdFSCxNQUFNLE9BQU8sb0JBQW9CO0lBQ1osS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNoRCw4RUFBOEU7SUFDOUUsNkVBQTZFO0lBQzdFLGlCQUFpQjtJQUNFLFNBQVMsR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO0lBQ3hDLElBQUksR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbEIsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixXQUFXLEdBQUcsTUFBTSxDQUFnQixJQUFJLENBQUMsQ0FBQztJQUM1QyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBRTlDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBVTtRQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFDL0YsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDO1lBQzdELE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVTLEtBQUssQ0FBQyxXQUFXO1FBQ3pCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU87UUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSx1QkFBdUIsRUFBRTtZQUM3RixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRTtTQUNsQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLENBQUM7WUFDL0QsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVTLENBQUMsQ0FBQyxHQUFXO1FBQ3JCLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFUyxHQUFHLENBQUMsR0FBZSxFQUFFLElBQVk7UUFDekMsT0FBTyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3BELENBQUM7d0dBL0NVLG9CQUFvQjs0RkFBcEIsb0JBQW9CLDhFQTNEckI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlEVDs7NEZBRVUsb0JBQW9CO2tCQS9EaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeURUO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEF0bGFzU2VydmljZSB9IGZyb20gJy4uL2F0bGFzLnNlcnZpY2UnO1xuaW1wb3J0IHsgY2xhc3NGb3IsIHR5cGUgRWxlbWVudEtleSB9IGZyb20gJy4uL2FwcGVhcmFuY2UnO1xuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSAnLi4vaTE4bic7XG5cbi8qKlxuICogYDxhdGxhcy11c2VyLXByb2ZpbGU+YCDigJQgdGhlIHNpZ25lZC1pbiB1c2VyJ3MgYWNjb3VudCBzdXJmYWNlIChlbWFpbHMsXG4gKiBzZWN1cml0eSkuIFRoZSBBbmd1bGFyIHBlZXIgb2YgUmVhY3QncyBgPFVzZXJQcm9maWxlLz5gLiBSZW5kZXJzIG5vdGhpbmcgd2hlblxuICogdGhlcmUgaXMgbm8gdXNlci5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXRsYXMtdXNlci1wcm9maWxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgQGlmIChhdGxhcy51c2VyKCk7IGFzIHVzZXIpIHtcbiAgICAgIDxkaXYgW2NsYXNzXT1cImNscygnY2FyZCcsICdhdGxhcy1jYXJkJylcIj5cbiAgICAgICAgPGgxPnt7IHQoJ3VzZXJQcm9maWxlLnRpdGxlJykgfX08L2gxPlxuXG4gICAgICAgIDxzZWN0aW9uPlxuICAgICAgICAgIDxoMj57eyB0KCd1c2VyUHJvZmlsZS5lbWFpbHNTZWN0aW9uJykgfX08L2gyPlxuICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgIEBmb3IgKGVtYWlsIG9mIHVzZXIuZW1haWxfYWRkcmVzc2VzID8/IFtdOyB0cmFjayBlbWFpbC5pZCkge1xuICAgICAgICAgICAgICA8bGk+XG4gICAgICAgICAgICAgICAge3sgZW1haWwuZW1haWxfYWRkcmVzcyB9fVxuICAgICAgICAgICAgICAgIEBpZiAoIWVtYWlsLnZlcmlmaWVkKSB7XG4gICAgICAgICAgICAgICAgICA8ZW0+IOKAlCB7eyB0KCd1c2VyUHJvZmlsZS51bnZlcmlmaWVkJykgfX08L2VtPlxuICAgICAgICAgICAgICAgICAgQGlmICh2ZXJpZnlpbmcoKSA9PT0gZW1haWwuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1hdGxhcz1cImVtYWlsLXZlcmlmeVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNscygnZm9ybUZpZWxkSW5wdXQnLCAnYXRsYXMtYWNjb3VudC1pbnB1dCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0bW9kZT1cIm51bWVyaWNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib25lLXRpbWUtY29kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwidCgndXNlclByb2ZpbGUudmVyaWZ5Q29kZVBsYWNlaG9sZGVyJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImNvZGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiY29kZS5zZXQoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNscygnZm9ybUJ1dHRvblNlY29uZGFyeScsICdhdGxhcy1idXR0b24tc2Vjb25kYXJ5JylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnVzeSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb25maXJtQ29kZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyB0KCd1c2VyUHJvZmlsZS52ZXJpZnlDb25maXJtJykgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY2xzKCdmb3JtQnV0dG9uU2Vjb25kYXJ5JywgJ2F0bGFzLWJ1dHRvbi1zZWNvbmRhcnknKVwiXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ1c3koKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbmRDb2RlKGVtYWlsLmlkKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyB0KCd1c2VyUHJvZmlsZS52ZXJpZnknKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgICBAaWYgKHZlcmlmeUVycm9yKCk7IGFzIG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIDxwIHJvbGU9XCJhbGVydFwiPnt7IG1lc3NhZ2UgfX08L3A+XG4gICAgICAgICAgfVxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPHNlY3Rpb24+XG4gICAgICAgICAgPGgyPnt7IHQoJ3VzZXJQcm9maWxlLnNlY3VyaXR5U2VjdGlvbicpIH19PC9oMj5cbiAgICAgICAgICA8cD57eyB1c2VyLm1mYV9lbmFibGVkID8gJzJGQSBvbicgOiAnMkZBIG9mZicgfX08L3A+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgVXNlclByb2ZpbGVDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXRsYXMgPSBpbmplY3QoQXRsYXNTZXJ2aWNlKTtcbiAgLy8gQW4gdW52ZXJpZmllZCBhZGRyZXNzIChhZGRlZCBhbmQgbmV2ZXIgY29uZmlybWVkLCBvciB0aGUgc2lnbi11cCBhZGRyZXNzIG9uXG4gIC8vIGFuIGFwcCB0aGF0IGRpZCBub3QgcmVxdWlyZSB2ZXJpZmljYXRpb24pIGNhbiBiZSBwcm92ZW4gaGVyZTogc2VuZCBhIGNvZGUsXG4gIC8vIHRoZW4gZW50ZXIgaXQuXG4gIHByb3RlY3RlZCByZWFkb25seSB2ZXJpZnlpbmcgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBjb2RlID0gc2lnbmFsKCcnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGJ1c3kgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmVyaWZ5RXJyb3IgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50ID0gdGhpcy5hdGxhcy5jcmVhdGVGYXBpQ2xpZW50KCk7XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHNlbmRDb2RlKGlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnZlcmlmeUVycm9yLnNldChudWxsKTtcbiAgICB0aGlzLmJ1c3kuc2V0KHRydWUpO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuY2xpZW50LnBvc3QoYC92MS9jbGllbnQvbWUvZW1haWxfYWRkcmVzc2VzLyR7aWR9L3ByZXBhcmVfdmVyaWZpY2F0aW9uYCk7XG4gICAgdGhpcy5idXN5LnNldChmYWxzZSk7XG4gICAgaWYgKCFyZXMub2spIHtcbiAgICAgIHRoaXMudmVyaWZ5RXJyb3Iuc2V0KHRoaXMudCgndXNlclByb2ZpbGUudmVyaWZ5U2VuZEZhaWxlZCcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb2RlLnNldCgnJyk7XG4gICAgdGhpcy52ZXJpZnlpbmcuc2V0KGlkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjb25maXJtQ29kZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpZCA9IHRoaXMudmVyaWZ5aW5nKCk7XG4gICAgaWYgKCFpZCkgcmV0dXJuO1xuICAgIHRoaXMudmVyaWZ5RXJyb3Iuc2V0KG51bGwpO1xuICAgIHRoaXMuYnVzeS5zZXQodHJ1ZSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jbGllbnQucG9zdChgL3YxL2NsaWVudC9tZS9lbWFpbF9hZGRyZXNzZXMvJHtpZH0vYXR0ZW1wdF92ZXJpZmljYXRpb25gLCB7XG4gICAgICBjb2RlOiB0aGlzLmNvZGUoKSxcbiAgICB9KTtcbiAgICB0aGlzLmJ1c3kuc2V0KGZhbHNlKTtcbiAgICBpZiAoIXJlcy5vaykge1xuICAgICAgdGhpcy52ZXJpZnlFcnJvci5zZXQodGhpcy50KCd1c2VyUHJvZmlsZS52ZXJpZnlDb2RlUmVqZWN0ZWQnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmVyaWZ5aW5nLnNldChudWxsKTtcbiAgICBhd2FpdCB0aGlzLmF0bGFzLnJlbG9hZCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0cmFuc2xhdGUodGhpcy5hdGxhcy5sb2NhbGl6YXRpb24sIGtleSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xzKGtleTogRWxlbWVudEtleSwgYmFzZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2xhc3NGb3Ioa2V5LCB0aGlzLmF0bGFzLmFwcGVhcmFuY2UsIGJhc2UpO1xuICB9XG59XG4iXX0=
@@ -73,6 +73,11 @@ export const EN_US = {
73
73
  'userProfile.addEmail': 'Add an email address',
74
74
  'userProfile.makePrimary': 'Make primary',
75
75
  'userProfile.unverified': 'Unverified',
76
+ 'userProfile.verify': 'Verify',
77
+ 'userProfile.verifyConfirm': 'Confirm',
78
+ 'userProfile.verifyCodePlaceholder': 'Code from the email',
79
+ 'userProfile.verifySendFailed': 'We could not send a code right now. Try again in a minute.',
80
+ 'userProfile.verifyCodeRejected': 'That code was not accepted.',
76
81
  'userProfile.revokeDevice': 'Sign out',
77
82
  'userProfile.deleteAccount': 'Delete account',
78
83
  'organization.switcher': 'Switch organization',
@@ -138,4 +143,4 @@ export function translate(catalog, key, variables = {}) {
138
143
  export function withFallback(locale) {
139
144
  return { ...EN_US, ...locale };
140
145
  }
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvaTE4bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBSUgsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFZO0lBQzVCLGNBQWMsRUFBRSxTQUFTO0lBQ3pCLGlCQUFpQixFQUFFLDhCQUE4QjtJQUNqRCx3QkFBd0IsRUFBRSxlQUFlO0lBQ3pDLHNCQUFzQixFQUFFLFVBQVU7SUFDbEMsZUFBZSxFQUFFLFVBQVU7SUFDM0IsdUJBQXVCLEVBQUUsa0JBQWtCO0lBQzNDLGtCQUFrQixFQUFFLGFBQWE7SUFDakMsbUJBQW1CLEVBQUUsU0FBUztJQUM5QixrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLHFCQUFxQixFQUFFLDBCQUEwQjtJQUNqRCx1QkFBdUIsRUFBRSxtQkFBbUI7SUFDNUMscUJBQXFCLEVBQUUsaUJBQWlCO0lBQ3hDLG1CQUFtQixFQUFFLDRDQUE0QztJQUNqRSxtQkFBbUIsRUFBRSxhQUFhO0lBQ2xDLHNCQUFzQixFQUFFLHNDQUFzQztJQUM5RCxzQkFBc0IsRUFBRSwrREFBK0Q7SUFFdkYsY0FBYyxFQUFFLHFCQUFxQjtJQUNyQyxlQUFlLEVBQUUsVUFBVTtJQUMzQixvQkFBb0IsRUFBRSwwQkFBMEI7SUFDaEQsbUJBQW1CLEVBQUUsU0FBUztJQUM5QixtQkFBbUIsRUFBRSxlQUFlO0lBQ3BDLHNCQUFzQixFQUFFLFVBQVU7SUFDbEMsc0JBQXNCLEVBQUUsb0JBQW9CO0lBQzVDLDBCQUEwQixFQUFFLFNBQVM7SUFDckMscUJBQXFCLEVBQUUsZ0JBQWdCO0lBQ3ZDLHNCQUFzQixFQUFFLGdDQUFnQztJQUN4RCxjQUFjLEVBQUUsa0JBQWtCO0lBQ2xDLGdCQUFnQixFQUFFLGdCQUFnQjtJQUNsQyxZQUFZLEVBQUUsS0FBSztJQUNuQixrREFBa0Q7SUFDbEQseUJBQXlCLEVBQ3ZCLDJGQUEyRjtJQUU3RixnQkFBZ0IsRUFBRSww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RSxzRUFBc0U7SUFDeEcsb0JBQW9CLEVBQUUsK0RBQStEO0lBQ3JGLHlCQUF5QixFQUFFLG9DQUFvQztJQUMvRCx5QkFBeUIsRUFBRSxvQ0FBb0M7SUFDL0QseUJBQXlCLEVBQUUscURBQXFEO0lBQ2hGLDBCQUEwQixFQUFFLHdEQUF3RDtDQUNyRixDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FDdkIsT0FBZ0IsRUFDaEIsR0FBVyxFQUNYLFlBQW9DLEVBQUU7SUFFdEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUM7SUFDbkQsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFZLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztBQUMzRixDQUFDO0FBRUQsa0ZBQWtGO0FBQ2xGLE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBZTtJQUMxQyxPQUFPLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDCpzEwLjM6IFwiRXZlcnkgc3RyaW5nIHBhc3NlcyB0aHJvdWdoIGFuIGkxOG4gY2F0YWxvZzsgZW4tVVMgc2hpcHMsIGNhdGFsb2dcbiAqIGZvcm1hdCBkb2N1bWVudGVkIGZvciBjb21tdW5pdHkgbG9jYWxlcy5cIlxuICpcbiAqIEEgZmxhdCBrZXktdG8tc3RyaW5nIG1hcCByYXRoZXIgdGhhbiBuZXN0ZWQgb2JqZWN0cywgYmVjYXVzZSBuZXN0aW5nIGxvb2tzXG4gKiB0aWRpZXIgYW5kIG1ha2VzIGEgbWlzc2luZyBrZXkgYSBydW50aW1lIGNyYXNoIG9uIGB1bmRlZmluZWQub2YuYS5jaGFpbmBcbiAqIHJhdGhlciB0aGFuIGEgdmlzaWJsZSBmYWxsYmFjay5cbiAqXG4gKiBBIG1pc3Npbmcga2V5IHJlbmRlcnMgdGhlIEtFWSwgbm90IGFuIGVtcHR5IHN0cmluZy4gQSBibGFuayBidXR0b24gaXMgYSBidWdcbiAqIG5vYm9keSBjYW4gcmVwb3J0OyBhIGJ1dHRvbiByZWFkaW5nIGBzaWduSW4uc3VibWl0YCBpcyBvbmUgYW55b25lIGNhbi5cbiAqL1xuXG5leHBvcnQgdHlwZSBDYXRhbG9nID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuZXhwb3J0IGNvbnN0IEVOX1VTOiBDYXRhbG9nID0ge1xuICAnc2lnbkluLnRpdGxlJzogJ1NpZ24gaW4nLFxuICAnc2lnbkluLnN1YnRpdGxlJzogJ3RvIGNvbnRpbnVlIHRvIHthcHBsaWNhdGlvbn0nLFxuICAnc2lnbkluLmlkZW50aWZpZXJMYWJlbCc6ICdFbWFpbCBhZGRyZXNzJyxcbiAgJ3NpZ25Jbi5wYXNzd29yZExhYmVsJzogJ1Bhc3N3b3JkJyxcbiAgJ3NpZ25Jbi5zdWJtaXQnOiAnQ29udGludWUnLFxuICAnc2lnbkluLmZvcmdvdFBhc3N3b3JkJzogJ0ZvcmdvdCBwYXNzd29yZD8nLFxuICAnc2lnbkluLm5vQWNjb3VudCc6ICdObyBhY2NvdW50PycsXG4gICdzaWduSW4uc2lnblVwTGluayc6ICdTaWduIHVwJyxcbiAgJ3NpZ25Jbi5vckRpdmlkZXInOiAnb3InLFxuICAnc2lnbkluLnNvY2lhbEJ1dHRvbic6ICdDb250aW51ZSB3aXRoIHtwcm92aWRlcn0nLFxuICAnc2lnbkluLmVtYWlsQ29kZUxhYmVsJzogJ1ZlcmlmaWNhdGlvbiBjb2RlJyxcbiAgJ3NpZ25Jbi51c2VFbWFpbENvZGUnOiAnRW1haWwgbWUgYSBjb2RlJyxcbiAgJ3NpZ25Jbi5jb2RlU2VudFRvJzogJ1dlIHNlbnQgYSBjb2RlIHRvIHtlbWFpbH0uIEVudGVyIGl0IGJlbG93LicsXG4gICdzaWduSW4ucmVzZW5kQ29kZSc6ICdSZXNlbmQgY29kZScsXG4gICdzaWduSW4ubWFnaWNMaW5rU2VudCc6ICdDaGVjayB5b3VyIGVtYWlsIGZvciBhIHNpZ24taW4gbGluay4nLFxuICAnc2lnbkluLmNoZWNrT3RoZXJUYWInOiAnWW91IGNhbiBjbG9zZSB0aGlzIHRhYiDigJQgeW91IGFyZSBzaWduZWQgaW4gd2hlcmUgeW91IHN0YXJ0ZWQuJyxcblxuICAnc2lnblVwLnRpdGxlJzogJ0NyZWF0ZSB5b3VyIGFjY291bnQnLFxuICAnc2lnblVwLnN1Ym1pdCc6ICdDb250aW51ZScsXG4gICdzaWduVXAuaGF2ZUFjY291bnQnOiAnQWxyZWFkeSBoYXZlIGFuIGFjY291bnQ/JyxcbiAgJ3NpZ25VcC5zaWduSW5MaW5rJzogJ1NpZ24gaW4nLFxuICAnc2lnblVwLmVtYWlsTGFiZWwnOiAnRW1haWwgYWRkcmVzcycsXG4gICdzaWduVXAucGFzc3dvcmRMYWJlbCc6ICdQYXNzd29yZCcsXG4gICdzaWduVXAub3B0aW9uYWxGaWVsZCc6ICd7bGFiZWx9IChvcHRpb25hbCknLFxuICAnc2lnblVwLnNlbGVjdFBsYWNlaG9sZGVyJzogJ1NlbGVjdOKApicsXG4gICdzaWduVXAuY29uc2VudEFncmVlJzogJ0kgYWdyZWUgdG8gdGhlJyxcbiAgJ3NpZ25VcC5jb25zZW50Tm90aWNlJzogJ0J5IGNvbnRpbnVpbmcgeW91IGFncmVlIHRvIHRoZScsXG4gICdzaWduVXAudGVybXMnOiAnVGVybXMgb2YgU2VydmljZScsXG4gICdzaWduVXAucHJpdmFjeSc6ICdQcml2YWN5IFBvbGljeScsXG4gICdzaWduVXAuYW5kJzogJ2FuZCcsXG4gIC8vID0gRU1BSUxfVU5BVkFJTEFCTEVfTUVTU0FHRSBmcm9tIEBhdGxhc2F1dGgvanMuXG4gICdzaWduVXAuZW1haWxVbmF2YWlsYWJsZSc6XG4gICAgXCJUaGlzIGFwcCBjYW4ndCBzZW5kIGVtYWlsIHJpZ2h0IG5vdy4gVHJ5IGFub3RoZXIgc2lnbi1pbiBtZXRob2Qgb3IgY29udGFjdCB0aGUgYXBwIG93bmVyLlwiLFxuXG4gICdjYXB0Y2hhLnByb21wdCc6ICdDb21wbGV0ZSB0aGUgc2VjdXJpdHkgY2hlY2sgdG8gY29udGludWUuJyxcbiAgJ2NhcHRjaGEucmVxdWlyZWQnOiAnUGxlYXNlIGNvbXBsZXRlIHRoZSBzZWN1cml0eSBjaGVjaywgdGhlbiB0cnkgYWdhaW4uJyxcbiAgJ2NhcHRjaGEuZmFpbGVkJzogXCJUaGUgc2VjdXJpdHkgY2hlY2sgZGlkbid0IHBhc3MuIFBsZWFzZSB0cnkgYWdhaW4uXCIsXG4gICdjYXB0Y2hhLmNoZWNraW5nJzogJ0NoZWNraW5nIHlvdXIgYnJvd3NlcuKApicsXG4gICdjYXB0Y2hhLnZlcmlmaWVkJzogJ1NlY3VyaXR5IGNoZWNrIGNvbXBsZXRlLicsXG4gICdjYXB0Y2hhLnB1enpsZVByb21wdCc6IFwiU2VsZWN0IGV2ZXJ5IHBpY3R1cmUgdGhhdCBzaG93cyB0aGUgc2FtZSBzaGFwZSBhcyB0aGlzIG9uZS4gQ29sb3VyIGFuZCBzaXplIGRvbid0IG1hdHRlci5cIixcbiAgJ2NhcHRjaGEucHV6emxlQ29uZmlybSc6ICdDb25maXJtJyxcbiAgJ2NhcHRjaGEucHV6emxlVGlsZSc6ICdQaWN0dXJlIHtufScsXG4gICdjYXB0Y2hhLnB1enpsZUFsdGVybmF0aXZlJzogXCJDYW4ndCBkbyB0aGUgcGljdHVyZSBjaGVjaz8gVXNlIGEgbG9uZ2VyIGF1dG9tYXRpYyBjaGVjayBpbnN0ZWFkLlwiLFxuXG4gICdtZmEudGl0bGUnOiAnVHdvLXN0ZXAgdmVyaWZpY2F0aW9uJyxcbiAgJ21mYS5zdWJ0aXRsZSc6ICdFbnRlciB0aGUgY29kZSBmcm9tIHlvdXIgYXV0aGVudGljYXRvciBhcHAuJyxcbiAgJ21mYS5jb2RlTGFiZWwnOiAnQ29kZScsXG4gICdtZmEuZW5yb2xsRmlyc3RDb2RlTGFiZWwnOiAnQ29kZSBmcm9tIHlvdXIgYXV0aGVudGljYXRvciBhcHAnLFxuICAnbWZhLmVucm9sbFNlY29uZENvZGVMYWJlbCc6ICdUaGUgbmV4dCBjb2RlIGl0IHNob3dzJyxcbiAgJ21mYS51c2VQYXNza2V5JzogJ1VzZSBhIHBhc3NrZXkgaW5zdGVhZCcsXG4gICdtZmEudXNlQmFja3VwQ29kZSc6ICdVc2UgYSByZWNvdmVyeSBjb2RlJyxcbiAgJ21mYS5zdWJtaXQnOiAnVmVyaWZ5JyxcblxuICAncmVzZXQudGl0bGUnOiAnUmVzZXQgeW91ciBwYXNzd29yZCcsXG4gICdyZXNldC5zdWJtaXQnOiAnU2VuZCByZXNldCBjb2RlJyxcbiAgJ3Jlc2V0Lm5ld1Bhc3N3b3JkTGFiZWwnOiAnTmV3IHBhc3N3b3JkJyxcblxuICAndXNlckJ1dHRvbi5tYW5hZ2VBY2NvdW50JzogJ01hbmFnZSBhY2NvdW50JyxcbiAgJ3VzZXJCdXR0b24uc2lnbk91dCc6ICdTaWduIG91dCcsXG4gICd1c2VyQnV0dG9uLnNpZ25PdXRBbGwnOiAnU2lnbiBvdXQgb2YgYWxsIGRldmljZXMnLFxuXG4gICd1c2VyUHJvZmlsZS50aXRsZSc6ICdBY2NvdW50JyxcbiAgJ3VzZXJQcm9maWxlLnByb2ZpbGVTZWN0aW9uJzogJ1Byb2ZpbGUnLFxuICAndXNlclByb2ZpbGUuZW1haWxzU2VjdGlvbic6ICdFbWFpbCBhZGRyZXNzZXMnLFxuICAndXNlclByb2ZpbGUuc2VjdXJpdHlTZWN0aW9uJzogJ1NlY3VyaXR5JyxcbiAgJ3VzZXJQcm9maWxlLmRldmljZXNTZWN0aW9uJzogJ0FjdGl2ZSBkZXZpY2VzJyxcbiAgJ3VzZXJQcm9maWxlLmRhbmdlclNlY3Rpb24nOiAnRGFuZ2VyIHpvbmUnLFxuICAndXNlclByb2ZpbGUuYWRkRW1haWwnOiAnQWRkIGFuIGVtYWlsIGFkZHJlc3MnLFxuICAndXNlclByb2ZpbGUubWFrZVByaW1hcnknOiAnTWFrZSBwcmltYXJ5JyxcbiAgJ3VzZXJQcm9maWxlLnVudmVyaWZpZWQnOiAnVW52ZXJpZmllZCcsXG4gICd1c2VyUHJvZmlsZS5yZXZva2VEZXZpY2UnOiAnU2lnbiBvdXQnLFxuICAndXNlclByb2ZpbGUuZGVsZXRlQWNjb3VudCc6ICdEZWxldGUgYWNjb3VudCcsXG5cbiAgJ29yZ2FuaXphdGlvbi5zd2l0Y2hlcic6ICdTd2l0Y2ggb3JnYW5pemF0aW9uJyxcbiAgJ29yZ2FuaXphdGlvbi5wZXJzb25hbCc6ICdQZXJzb25hbCBhY2NvdW50JyxcbiAgJ29yZ2FuaXphdGlvbi5tZW1iZXJzJzogJ01lbWJlcnMnLFxuICAnb3JnYW5pemF0aW9uLmludml0ZSc6ICdJbnZpdGUgbWVtYmVyJyxcbiAgJ29yZ2FuaXphdGlvbi5yb2xlTGFiZWwnOiAnUm9sZScsXG5cbiAgJ2Vycm9yLmdlbmVyaWMnOiAnU29tZXRoaW5nIHdlbnQgd3JvbmcuIFBsZWFzZSB0cnkgYWdhaW4uJyxcbiAgJ2Vycm9yLm5ldHdvcmsnOiAnV2UgY291bGQgbm90IHJlYWNoIHRoZSBzZXJ2ZXIuIENoZWNrIHlvdXIgY29ubmVjdGlvbi4nLFxuXG4gIC8vIFNlcnZlciBlcnJvcnMsIGJ5IHRoZSBzdGFibGUgYHJlYXNvbmAgdGhlIEZyb250ZW5kIEFQSSBzZW5kcy4gU2hvd24gaW5zdGVhZFxuICAvLyBvZiB0aGUgc2VydmVyJ3MgYG1lc3NhZ2VgIChzZWUgYGxvY2FsaXplZEVycm9yTWVzc2FnZWAgaW4gQGF0bGFzYXV0aC9qcykuXG4gICdlcnJvci5mb3JtX3Bhc3N3b3JkX2luY29ycmVjdCc6ICdUaG9zZSBjcmVkZW50aWFscyBhcmUgaW5jb3JyZWN0LicsXG4gICdlcnJvci5mb3JtX2NvZGVfaW5jb3JyZWN0JzogJ1RoYXQgY29kZSBpcyBpbmNvcnJlY3QuJyxcbiAgJ2Vycm9yLmZvcm1fY29kZV9hbHJlYWR5X3VzZWQnOiAnVGhhdCBjb2RlIGhhcyBhbHJlYWR5IGJlZW4gdXNlZC4gV2FpdCBmb3IgYSBuZXcgb25lLicsXG4gICdlcnJvci5mb3JtX2NvZGVfZXhwaXJlZCc6ICdUaGF0IGNvZGUgaGFzIGV4cGlyZWQuIFJlcXVlc3QgYSBuZXcgb25lLicsXG4gICdlcnJvci5mb3JtX2NvZGVfbWF4X2F0dGVtcHRzJzogJ1RvbyBtYW55IGluY29ycmVjdCBjb2Rlcy4gUmVxdWVzdCBhIG5ldyBjb2RlLicsXG4gICdlcnJvci5mb3JtX2xpbmtfaW52YWxpZCc6ICdUaGF0IHNpZ24taW4gbGluayBpcyBpbnZhbGlkIG9yIGhhcyBhbHJlYWR5IGJlZW4gdXNlZC4nLFxuICAnZXJyb3IuZm9ybV9pZGVudGlmaWVyX25vdF9mb3VuZCc6IFwiV2UgY291bGRuJ3QgZmluZCBhbiBhY2NvdW50IHdpdGggdGhvc2UgZGV0YWlscy5cIixcbiAgJ2Vycm9yLmZvcm1faWRlbnRpZmllcl9leGlzdHMnOiBcIlRoZXJlJ3MgYWxyZWFkeSBhbiBhY2NvdW50IGZvciB0aGlzIGVtYWlsLiBTaWduIGluIHdpdGgge21ldGhvZHN9LlwiLFxuICAnZXJyb3IuZm9ybV9wYXNzd29yZF9wd25lZCc6ICdUaGlzIHBhc3N3b3JkIGhhcyBhcHBlYXJlZCBpbiBhIGtub3duIGRhdGEgYnJlYWNoLiBQbGVhc2UgY2hvb3NlIGEgZGlmZmVyZW50IG9uZS4nLFxuICAnZXJyb3IuZm9ybV9wYXNzd29yZF90b29fc2hvcnQnOiAnUGFzc3dvcmQgbXVzdCBiZSBhdCBsZWFzdCB7bWluX2xlbmd0aH0gY2hhcmFjdGVycy4nLFxuICAnZXJyb3IuZm9ybV9wYXNzd29yZF90b29fbG9uZyc6ICdQYXNzd29yZCBtdXN0IGJlIGF0IG1vc3Qge21heF9sZW5ndGh9IGNoYXJhY3RlcnMuJyxcbiAgJ2Vycm9yLmZvcm1fcGFzc3dvcmRfcmVxdWlyZXNfdXBwZXJjYXNlJzogJ1Bhc3N3b3JkIG11c3QgY29udGFpbiBhbiB1cHBlcmNhc2UgbGV0dGVyLicsXG4gICdlcnJvci5mb3JtX3Bhc3N3b3JkX3JlcXVpcmVzX2xvd2VyY2FzZSc6ICdQYXNzd29yZCBtdXN0IGNvbnRhaW4gYSBsb3dlcmNhc2UgbGV0dGVyLicsXG4gICdlcnJvci5mb3JtX3Bhc3N3b3JkX3JlcXVpcmVzX251bWJlcic6ICdQYXNzd29yZCBtdXN0IGNvbnRhaW4gYSBudW1iZXIuJyxcbiAgJ2Vycm9yLmZvcm1fcGFzc3dvcmRfcmVxdWlyZXNfc3ltYm9sJzogJ1Bhc3N3b3JkIG11c3QgY29udGFpbiBhIHN5bWJvbC4nLFxuICAnZXJyb3IuZm9ybV9wYXNzd29yZF9ub3RfYWxsb3dlZCc6ICdUaGF0IHBhc3N3b3JkIGlzIG5vdCBhbGxvd2VkLiBDaG9vc2UgYSBkaWZmZXJlbnQgb25lLicsXG4gICdlcnJvci5mb3JtX3Bhc3N3b3JkX2NvbnRhaW5zX2lkZW50aWZpZXInOiAnUGFzc3dvcmQgbXVzdCBub3QgY29udGFpbiB5b3VyIGVtYWlsIG9yIHVzZXJuYW1lLicsXG4gICdlcnJvci5mb3JtX3Bhc3N3b3JkX3NhbWVfYXNfY3VycmVudCc6ICdZb3VyIG5ldyBwYXNzd29yZCBtdXN0IGJlIGRpZmZlcmVudCBmcm9tIHlvdXIgY3VycmVudCBvbmUuJyxcbiAgJ2Vycm9yLmZvcm1fcGFzc3dvcmRfcmV1c2VkJzogJ1lvdXIgbmV3IHBhc3N3b3JkIG11c3Qgbm90IG1hdGNoIGFueSBvZiB5b3VyIGxhc3Qge2hpc3RvcnlfY291bnR9IHBhc3N3b3Jkcy4nLFxuICAnZXJyb3IucGFzc3dvcmRfZXhwaXJlZCc6ICdZb3VyIHBhc3N3b3JkIGhhcyBleHBpcmVkLiBSZXNldCBpdCB0byBjb250aW51ZS4nLFxuICAnZXJyb3IuZW1haWxfbm90X3ZlcmlmaWVkJzogJ1lvdXIgZW1haWwgYWRkcmVzcyBpcyBub3QgdmVyaWZpZWQgeWV0LiBWZXJpZnkgaXQgYmVmb3JlIHNpZ25pbmcgaW4gd2l0aCB5b3VyIHBhc3N3b3JkLicsXG4gICdlcnJvci5zaWduX2luX3Rva2VuX2ludmFsaWQnOiAnVGhhdCBzaWduLWluIHRva2VuIGlzIGludmFsaWQgb3IgaGFzIGV4cGlyZWQuJyxcbiAgJ2Vycm9yLnRvb19tYW55X2F0dGVtcHRzJzogJ1RvbyBtYW55IGZhaWxlZCBhdHRlbXB0cy4gVHJ5IGFnYWluIGxhdGVyLicsXG4gICdlcnJvci50b29fbWFueV9yZXF1ZXN0cyc6ICdUb28gbWFueSByZXF1ZXN0cy4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nLFxuICAnZXJyb3IuY2FwdGNoYV9yZXF1aXJlZCc6ICdQbGVhc2UgY29tcGxldGUgdGhlIHNlY3VyaXR5IGNoZWNrLCB0aGVuIHRyeSBhZ2Fpbi4nLFxuICAnZXJyb3IuY2FwdGNoYV9mYWlsZWQnOiBcIlRoZSBzZWN1cml0eSBjaGVjayBkaWRuJ3QgcGFzcy4gUGxlYXNlIHRyeSBhZ2Fpbi5cIixcbiAgJ2Vycm9yLmNhcHRjaGFfdW5hdmFpbGFibGUnOiAnVGhlIHNlY3VyaXR5IGNoZWNrIGlzIHVuYXZhaWxhYmxlIHJpZ2h0IG5vdy4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nLFxuICAnZXJyb3IuZW1haWxfZGVsaXZlcnlfdW5hdmFpbGFibGUnOiBcIlRoaXMgYXBwIGNhbid0IHNlbmQgZW1haWwgcmlnaHQgbm93LiBUcnkgYW5vdGhlciBzaWduLWluIG1ldGhvZCBvciBjb250YWN0IHRoZSBhcHAgb3duZXIuXCIsXG4gICdlcnJvci5zdHJhdGVneV9kaXNhYmxlZCc6ICdUaGlzIHNpZ24taW4gbWV0aG9kIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgYXBwLicsXG4gICdlcnJvci5zaWduX3VwX3Jlc3RyaWN0ZWQnOiAnU2lnbi11cCBvbiB0aGlzIGFwcCBpcyBieSBpbnZpdGF0aW9uIG9ubHkuJyxcbiAgJ2Vycm9yLndhaXRsaXN0ZWQnOiBcIllvdSdyZSBvbiB0aGUgd2FpdGxpc3QuIFdlJ2xsIGVtYWlsIHlvdSB3aGVuIGEgcGxhY2Ugb3BlbnMgdXAuXCIsXG4gICdlcnJvci5pZGVudGlmaWVyX25vdF9hbGxvd2VkJzogJ1RoaXMgZW1haWwgb3IgcGhvbmUgbnVtYmVyIGlzIG5vdCBhbGxvd2VkIG9uIHRoaXMgYXBwLicsXG4gICdlcnJvci5kaXNwb3NhYmxlX2VtYWlsX2Jsb2NrZWQnOiAnU2lnbi11cCB3aXRoIGEgZGlzcG9zYWJsZSBvciB0ZW1wb3JhcnkgZW1haWwgYWRkcmVzcyBpcyBub3QgYWxsb3dlZC4nLFxuICAnZXJyb3Iuc3NvX3JlcXVpcmVkJzogJ1RoaXMgb3JnYW5pemF0aW9uIHJlcXVpcmVzIHNpZ25pbmcgaW4gdGhyb3VnaCBzaW5nbGUgc2lnbi1vbi4nLFxuICAnZXJyb3Iuc2lnbl9pbnNfZGlzYWJsZWQnOiAnU2lnbi1pbnMgYXJlIHRlbXBvcmFyaWx5IGRpc2FibGVkLicsXG4gICdlcnJvci5zaWduX3Vwc19kaXNhYmxlZCc6ICdTaWduLXVwcyBhcmUgdGVtcG9yYXJpbHkgZGlzYWJsZWQuJyxcbiAgJ2Vycm9yLmhpZ2hfcmlza19ibG9ja2VkJzogJ1RoaXMgc2lnbi1pbiB3YXMgYmxvY2tlZCBiZWNhdXNlIGl0IGxvb2tlZCB1bnVzdWFsLicsXG4gICdlcnJvci5zbXNfcmVnaW9uX2Jsb2NrZWQnOiAnVGV4dCBtZXNzYWdlcyBhcmUgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyBwaG9uZSBudW1iZXIuJyxcbn07XG5cbi8qKlxuICogTG9vayB1cCBhIGtleSBhbmQgaW50ZXJwb2xhdGUgYHtwbGFjZWhvbGRlcnN9YC5cbiAqXG4gKiBBbiB1bmtub3duIHBsYWNlaG9sZGVyIGlzIGxlZnQgdmlzaWJsZSBmb3IgdGhlIHNhbWUgcmVhc29uIGEgbWlzc2luZyBrZXkgaXM6XG4gKiBgQ29udGludWUgd2l0aCB7cHJvdmlkZXJ9YCBpbiB0aGUgVUkgaXMgYSBidWcgcmVwb3J0IHdhaXRpbmcgdG8gYmUgZmlsZWQsXG4gKiB3aGVyZWFzIGBDb250aW51ZSB3aXRoIGAgaXMgb25lIG5vYm9keSBub3RpY2VzIHVudGlsIGEgY3VzdG9tZXIgZG9lcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZShcbiAgY2F0YWxvZzogQ2F0YWxvZyxcbiAga2V5OiBzdHJpbmcsXG4gIHZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9LFxuKTogc3RyaW5nIHtcbiAgY29uc3QgdGVtcGxhdGUgPSBjYXRhbG9nW2tleV0gPz8gRU5fVVNba2V5XSA/PyBrZXk7XG4gIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC9cXHsoXFx3KylcXH0vZywgKG1hdGNoLCBuYW1lOiBzdHJpbmcpID0+IHZhcmlhYmxlc1tuYW1lXSA/PyBtYXRjaCk7XG59XG5cbi8qKiBNZXJnZSBhIGNvbW11bml0eSBsb2NhbGUgb3ZlciBlbi1VUyBzbyBhIHBhcnRpYWwgdHJhbnNsYXRpb24gc3RpbGwgcmVuZGVycy4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoRmFsbGJhY2sobG9jYWxlOiBDYXRhbG9nKTogQ2F0YWxvZyB7XG4gIHJldHVybiB7IC4uLkVOX1VTLCAuLi5sb2NhbGUgfTtcbn1cbiJdfQ==
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvaTE4bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBSUgsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFZO0lBQzVCLGNBQWMsRUFBRSxTQUFTO0lBQ3pCLGlCQUFpQixFQUFFLDhCQUE4QjtJQUNqRCx3QkFBd0IsRUFBRSxlQUFlO0lBQ3pDLHNCQUFzQixFQUFFLFVBQVU7SUFDbEMsZUFBZSxFQUFFLFVBQVU7SUFDM0IsdUJBQXVCLEVBQUUsa0JBQWtCO0lBQzNDLGtCQUFrQixFQUFFLGFBQWE7SUFDakMsbUJBQW1CLEVBQUUsU0FBUztJQUM5QixrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLHFCQUFxQixFQUFFLDBCQUEwQjtJQUNqRCx1QkFBdUIsRUFBRSxtQkFBbUI7SUFDNUMscUJBQXFCLEVBQUUsaUJBQWlCO0lBQ3hDLG1CQUFtQixFQUFFLDRDQUE0QztJQUNqRSxtQkFBbUIsRUFBRSxhQUFhO0lBQ2xDLHNCQUFzQixFQUFFLHNDQUFzQztJQUM5RCxzQkFBc0IsRUFBRSwrREFBK0Q7SUFFdkYsY0FBYyxFQUFFLHFCQUFxQjtJQUNyQyxlQUFlLEVBQUUsVUFBVTtJQUMzQixvQkFBb0IsRUFBRSwwQkFBMEI7SUFDaEQsbUJBQW1CLEVBQUUsU0FBUztJQUM5QixtQkFBbUIsRUFBRSxlQUFlO0lBQ3BDLHNCQUFzQixFQUFFLFVBQVU7SUFDbEMsc0JBQXNCLEVBQUUsb0JBQW9CO0lBQzVDLDBCQUEwQixFQUFFLFNBQVM7SUFDckMscUJBQXFCLEVBQUUsZ0JBQWdCO0lBQ3ZDLHNCQUFzQixFQUFFLGdDQUFnQztJQUN4RCxjQUFjLEVBQUUsa0JBQWtCO0lBQ2xDLGdCQUFnQixFQUFFLGdCQUFnQjtJQUNsQyxZQUFZLEVBQUUsS0FBSztJQUNuQixrREFBa0Q7SUFDbEQseUJBQXlCLEVBQ3ZCLDJGQUEyRjtJQUU3RixnQkFBZ0IsRUFBRSww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QUEyRjtJQUMvSCx5QkFBeUIsRUFBRSxvREFBb0Q7SUFDL0UsMEJBQTBCLEVBQUUsNENBQTRDO0lBQ3hFLGtCQUFrQixFQUFFLGdFQUFnRTtJQUNwRiw4QkFBOEIsRUFBRSx3REFBd0Q7SUFDeEYsZ0NBQWdDLEVBQUUsc0VBQXNFO0lBQ3hHLG9CQUFvQixFQUFFLCtEQUErRDtJQUNyRix5QkFBeUIsRUFBRSxvQ0FBb0M7SUFDL0QseUJBQXlCLEVBQUUsb0NBQW9DO0lBQy9ELHlCQUF5QixFQUFFLHFEQUFxRDtJQUNoRiwwQkFBMEIsRUFBRSx3REFBd0Q7Q0FDckYsQ0FBQztBQUVGOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQ3ZCLE9BQWdCLEVBQ2hCLEdBQVcsRUFDWCxZQUFvQyxFQUFFO0lBRXRDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDO0lBQ25ELE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBWSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUM7QUFDM0YsQ0FBQztBQUVELGtGQUFrRjtBQUNsRixNQUFNLFVBQVUsWUFBWSxDQUFDLE1BQWU7SUFDMUMsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUM7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogwqcxMC4zOiBcIkV2ZXJ5IHN0cmluZyBwYXNzZXMgdGhyb3VnaCBhbiBpMThuIGNhdGFsb2c7IGVuLVVTIHNoaXBzLCBjYXRhbG9nXG4gKiBmb3JtYXQgZG9jdW1lbnRlZCBmb3IgY29tbXVuaXR5IGxvY2FsZXMuXCJcbiAqXG4gKiBBIGZsYXQga2V5LXRvLXN0cmluZyBtYXAgcmF0aGVyIHRoYW4gbmVzdGVkIG9iamVjdHMsIGJlY2F1c2UgbmVzdGluZyBsb29rc1xuICogdGlkaWVyIGFuZCBtYWtlcyBhIG1pc3Npbmcga2V5IGEgcnVudGltZSBjcmFzaCBvbiBgdW5kZWZpbmVkLm9mLmEuY2hhaW5gXG4gKiByYXRoZXIgdGhhbiBhIHZpc2libGUgZmFsbGJhY2suXG4gKlxuICogQSBtaXNzaW5nIGtleSByZW5kZXJzIHRoZSBLRVksIG5vdCBhbiBlbXB0eSBzdHJpbmcuIEEgYmxhbmsgYnV0dG9uIGlzIGEgYnVnXG4gKiBub2JvZHkgY2FuIHJlcG9ydDsgYSBidXR0b24gcmVhZGluZyBgc2lnbkluLnN1Ym1pdGAgaXMgb25lIGFueW9uZSBjYW4uXG4gKi9cblxuZXhwb3J0IHR5cGUgQ2F0YWxvZyA9IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbmV4cG9ydCBjb25zdCBFTl9VUzogQ2F0YWxvZyA9IHtcbiAgJ3NpZ25Jbi50aXRsZSc6ICdTaWduIGluJyxcbiAgJ3NpZ25Jbi5zdWJ0aXRsZSc6ICd0byBjb250aW51ZSB0byB7YXBwbGljYXRpb259JyxcbiAgJ3NpZ25Jbi5pZGVudGlmaWVyTGFiZWwnOiAnRW1haWwgYWRkcmVzcycsXG4gICdzaWduSW4ucGFzc3dvcmRMYWJlbCc6ICdQYXNzd29yZCcsXG4gICdzaWduSW4uc3VibWl0JzogJ0NvbnRpbnVlJyxcbiAgJ3NpZ25Jbi5mb3Jnb3RQYXNzd29yZCc6ICdGb3Jnb3QgcGFzc3dvcmQ/JyxcbiAgJ3NpZ25Jbi5ub0FjY291bnQnOiAnTm8gYWNjb3VudD8nLFxuICAnc2lnbkluLnNpZ25VcExpbmsnOiAnU2lnbiB1cCcsXG4gICdzaWduSW4ub3JEaXZpZGVyJzogJ29yJyxcbiAgJ3NpZ25Jbi5zb2NpYWxCdXR0b24nOiAnQ29udGludWUgd2l0aCB7cHJvdmlkZXJ9JyxcbiAgJ3NpZ25Jbi5lbWFpbENvZGVMYWJlbCc6ICdWZXJpZmljYXRpb24gY29kZScsXG4gICdzaWduSW4udXNlRW1haWxDb2RlJzogJ0VtYWlsIG1lIGEgY29kZScsXG4gICdzaWduSW4uY29kZVNlbnRUbyc6ICdXZSBzZW50IGEgY29kZSB0byB7ZW1haWx9LiBFbnRlciBpdCBiZWxvdy4nLFxuICAnc2lnbkluLnJlc2VuZENvZGUnOiAnUmVzZW5kIGNvZGUnLFxuICAnc2lnbkluLm1hZ2ljTGlua1NlbnQnOiAnQ2hlY2sgeW91ciBlbWFpbCBmb3IgYSBzaWduLWluIGxpbmsuJyxcbiAgJ3NpZ25Jbi5jaGVja090aGVyVGFiJzogJ1lvdSBjYW4gY2xvc2UgdGhpcyB0YWIg4oCUIHlvdSBhcmUgc2lnbmVkIGluIHdoZXJlIHlvdSBzdGFydGVkLicsXG5cbiAgJ3NpZ25VcC50aXRsZSc6ICdDcmVhdGUgeW91ciBhY2NvdW50JyxcbiAgJ3NpZ25VcC5zdWJtaXQnOiAnQ29udGludWUnLFxuICAnc2lnblVwLmhhdmVBY2NvdW50JzogJ0FscmVhZHkgaGF2ZSBhbiBhY2NvdW50PycsXG4gICdzaWduVXAuc2lnbkluTGluayc6ICdTaWduIGluJyxcbiAgJ3NpZ25VcC5lbWFpbExhYmVsJzogJ0VtYWlsIGFkZHJlc3MnLFxuICAnc2lnblVwLnBhc3N3b3JkTGFiZWwnOiAnUGFzc3dvcmQnLFxuICAnc2lnblVwLm9wdGlvbmFsRmllbGQnOiAne2xhYmVsfSAob3B0aW9uYWwpJyxcbiAgJ3NpZ25VcC5zZWxlY3RQbGFjZWhvbGRlcic6ICdTZWxlY3TigKYnLFxuICAnc2lnblVwLmNvbnNlbnRBZ3JlZSc6ICdJIGFncmVlIHRvIHRoZScsXG4gICdzaWduVXAuY29uc2VudE5vdGljZSc6ICdCeSBjb250aW51aW5nIHlvdSBhZ3JlZSB0byB0aGUnLFxuICAnc2lnblVwLnRlcm1zJzogJ1Rlcm1zIG9mIFNlcnZpY2UnLFxuICAnc2lnblVwLnByaXZhY3knOiAnUHJpdmFjeSBQb2xpY3knLFxuICAnc2lnblVwLmFuZCc6ICdhbmQnLFxuICAvLyA9IEVNQUlMX1VOQVZBSUxBQkxFX01FU1NBR0UgZnJvbSBAYXRsYXNhdXRoL2pzLlxuICAnc2lnblVwLmVtYWlsVW5hdmFpbGFibGUnOlxuICAgIFwiVGhpcyBhcHAgY2FuJ3Qgc2VuZCBlbWFpbCByaWdodCBub3cuIFRyeSBhbm90aGVyIHNpZ24taW4gbWV0aG9kIG9yIGNvbnRhY3QgdGhlIGFwcCBvd25lci5cIixcblxuICAnY2FwdGNoYS5wcm9tcHQnOiAnQ29tcGxldGUgdGhlIHNlY3VyaXR5IGNoZWNrIHRvIGNvbnRpbnVlLicsXG4gICdjYXB0Y2hhLnJlcXVpcmVkJzogJ1BsZWFzZSBjb21wbGV0ZSB0aGUgc2VjdXJpdHkgY2hlY2ssIHRoZW4gdHJ5IGFnYWluLicsXG4gICdjYXB0Y2hhLmZhaWxlZCc6IFwiVGhlIHNlY3VyaXR5IGNoZWNrIGRpZG4ndCBwYXNzLiBQbGVhc2UgdHJ5IGFnYWluLlwiLFxuICAnY2FwdGNoYS5jaGVja2luZyc6ICdDaGVja2luZyB5b3VyIGJyb3dzZXLigKYnLFxuICAnY2FwdGNoYS52ZXJpZmllZCc6ICdTZWN1cml0eSBjaGVjayBjb21wbGV0ZS4nLFxuICAnY2FwdGNoYS5wdXp6bGVQcm9tcHQnOiBcIlNlbGVjdCBldmVyeSBwaWN0dXJlIHRoYXQgc2hvd3MgdGhlIHNhbWUgc2hhcGUgYXMgdGhpcyBvbmUuIENvbG91ciBhbmQgc2l6ZSBkb24ndCBtYXR0ZXIuXCIsXG4gICdjYXB0Y2hhLnB1enpsZUNvbmZpcm0nOiAnQ29uZmlybScsXG4gICdjYXB0Y2hhLnB1enpsZVRpbGUnOiAnUGljdHVyZSB7bn0nLFxuICAnY2FwdGNoYS5wdXp6bGVBbHRlcm5hdGl2ZSc6IFwiQ2FuJ3QgZG8gdGhlIHBpY3R1cmUgY2hlY2s/IFVzZSBhIGxvbmdlciBhdXRvbWF0aWMgY2hlY2sgaW5zdGVhZC5cIixcblxuICAnbWZhLnRpdGxlJzogJ1R3by1zdGVwIHZlcmlmaWNhdGlvbicsXG4gICdtZmEuc3VidGl0bGUnOiAnRW50ZXIgdGhlIGNvZGUgZnJvbSB5b3VyIGF1dGhlbnRpY2F0b3IgYXBwLicsXG4gICdtZmEuY29kZUxhYmVsJzogJ0NvZGUnLFxuICAnbWZhLmVucm9sbEZpcnN0Q29kZUxhYmVsJzogJ0NvZGUgZnJvbSB5b3VyIGF1dGhlbnRpY2F0b3IgYXBwJyxcbiAgJ21mYS5lbnJvbGxTZWNvbmRDb2RlTGFiZWwnOiAnVGhlIG5leHQgY29kZSBpdCBzaG93cycsXG4gICdtZmEudXNlUGFzc2tleSc6ICdVc2UgYSBwYXNza2V5IGluc3RlYWQnLFxuICAnbWZhLnVzZUJhY2t1cENvZGUnOiAnVXNlIGEgcmVjb3ZlcnkgY29kZScsXG4gICdtZmEuc3VibWl0JzogJ1ZlcmlmeScsXG5cbiAgJ3Jlc2V0LnRpdGxlJzogJ1Jlc2V0IHlvdXIgcGFzc3dvcmQnLFxuICAncmVzZXQuc3VibWl0JzogJ1NlbmQgcmVzZXQgY29kZScsXG4gICdyZXNldC5uZXdQYXNzd29yZExhYmVsJzogJ05ldyBwYXNzd29yZCcsXG5cbiAgJ3VzZXJCdXR0b24ubWFuYWdlQWNjb3VudCc6ICdNYW5hZ2UgYWNjb3VudCcsXG4gICd1c2VyQnV0dG9uLnNpZ25PdXQnOiAnU2lnbiBvdXQnLFxuICAndXNlckJ1dHRvbi5zaWduT3V0QWxsJzogJ1NpZ24gb3V0IG9mIGFsbCBkZXZpY2VzJyxcblxuICAndXNlclByb2ZpbGUudGl0bGUnOiAnQWNjb3VudCcsXG4gICd1c2VyUHJvZmlsZS5wcm9maWxlU2VjdGlvbic6ICdQcm9maWxlJyxcbiAgJ3VzZXJQcm9maWxlLmVtYWlsc1NlY3Rpb24nOiAnRW1haWwgYWRkcmVzc2VzJyxcbiAgJ3VzZXJQcm9maWxlLnNlY3VyaXR5U2VjdGlvbic6ICdTZWN1cml0eScsXG4gICd1c2VyUHJvZmlsZS5kZXZpY2VzU2VjdGlvbic6ICdBY3RpdmUgZGV2aWNlcycsXG4gICd1c2VyUHJvZmlsZS5kYW5nZXJTZWN0aW9uJzogJ0RhbmdlciB6b25lJyxcbiAgJ3VzZXJQcm9maWxlLmFkZEVtYWlsJzogJ0FkZCBhbiBlbWFpbCBhZGRyZXNzJyxcbiAgJ3VzZXJQcm9maWxlLm1ha2VQcmltYXJ5JzogJ01ha2UgcHJpbWFyeScsXG4gICd1c2VyUHJvZmlsZS51bnZlcmlmaWVkJzogJ1VudmVyaWZpZWQnLFxuICAndXNlclByb2ZpbGUudmVyaWZ5JzogJ1ZlcmlmeScsXG4gICd1c2VyUHJvZmlsZS52ZXJpZnlDb25maXJtJzogJ0NvbmZpcm0nLFxuICAndXNlclByb2ZpbGUudmVyaWZ5Q29kZVBsYWNlaG9sZGVyJzogJ0NvZGUgZnJvbSB0aGUgZW1haWwnLFxuICAndXNlclByb2ZpbGUudmVyaWZ5U2VuZEZhaWxlZCc6ICdXZSBjb3VsZCBub3Qgc2VuZCBhIGNvZGUgcmlnaHQgbm93LiBUcnkgYWdhaW4gaW4gYSBtaW51dGUuJyxcbiAgJ3VzZXJQcm9maWxlLnZlcmlmeUNvZGVSZWplY3RlZCc6ICdUaGF0IGNvZGUgd2FzIG5vdCBhY2NlcHRlZC4nLFxuICAndXNlclByb2ZpbGUucmV2b2tlRGV2aWNlJzogJ1NpZ24gb3V0JyxcbiAgJ3VzZXJQcm9maWxlLmRlbGV0ZUFjY291bnQnOiAnRGVsZXRlIGFjY291bnQnLFxuXG4gICdvcmdhbml6YXRpb24uc3dpdGNoZXInOiAnU3dpdGNoIG9yZ2FuaXphdGlvbicsXG4gICdvcmdhbml6YXRpb24ucGVyc29uYWwnOiAnUGVyc29uYWwgYWNjb3VudCcsXG4gICdvcmdhbml6YXRpb24ubWVtYmVycyc6ICdNZW1iZXJzJyxcbiAgJ29yZ2FuaXphdGlvbi5pbnZpdGUnOiAnSW52aXRlIG1lbWJlcicsXG4gICdvcmdhbml6YXRpb24ucm9sZUxhYmVsJzogJ1JvbGUnLFxuXG4gICdlcnJvci5nZW5lcmljJzogJ1NvbWV0aGluZyB3ZW50IHdyb25nLiBQbGVhc2UgdHJ5IGFnYWluLicsXG4gICdlcnJvci5uZXR3b3JrJzogJ1dlIGNvdWxkIG5vdCByZWFjaCB0aGUgc2VydmVyLiBDaGVjayB5b3VyIGNvbm5lY3Rpb24uJyxcblxuICAvLyBTZXJ2ZXIgZXJyb3JzLCBieSB0aGUgc3RhYmxlIGByZWFzb25gIHRoZSBGcm9udGVuZCBBUEkgc2VuZHMuIFNob3duIGluc3RlYWRcbiAgLy8gb2YgdGhlIHNlcnZlcidzIGBtZXNzYWdlYCAoc2VlIGBsb2NhbGl6ZWRFcnJvck1lc3NhZ2VgIGluIEBhdGxhc2F1dGgvanMpLlxuICAnZXJyb3IuZm9ybV9wYXNzd29yZF9pbmNvcnJlY3QnOiAnVGhvc2UgY3JlZGVudGlhbHMgYXJlIGluY29ycmVjdC4nLFxuICAnZXJyb3IuZm9ybV9jb2RlX2luY29ycmVjdCc6ICdUaGF0IGNvZGUgaXMgaW5jb3JyZWN0LicsXG4gICdlcnJvci5mb3JtX2NvZGVfYWxyZWFkeV91c2VkJzogJ1RoYXQgY29kZSBoYXMgYWxyZWFkeSBiZWVuIHVzZWQuIFdhaXQgZm9yIGEgbmV3IG9uZS4nLFxuICAnZXJyb3IuZm9ybV9jb2RlX2V4cGlyZWQnOiAnVGhhdCBjb2RlIGhhcyBleHBpcmVkLiBSZXF1ZXN0IGEgbmV3IG9uZS4nLFxuICAnZXJyb3IuZm9ybV9jb2RlX21heF9hdHRlbXB0cyc6ICdUb28gbWFueSBpbmNvcnJlY3QgY29kZXMuIFJlcXVlc3QgYSBuZXcgY29kZS4nLFxuICAnZXJyb3IuZm9ybV9saW5rX2ludmFsaWQnOiAnVGhhdCBzaWduLWluIGxpbmsgaXMgaW52YWxpZCBvciBoYXMgYWxyZWFkeSBiZWVuIHVzZWQuJyxcbiAgJ2Vycm9yLmZvcm1faWRlbnRpZmllcl9ub3RfZm91bmQnOiBcIldlIGNvdWxkbid0IGZpbmQgYW4gYWNjb3VudCB3aXRoIHRob3NlIGRldGFpbHMuXCIsXG4gICdlcnJvci5mb3JtX2lkZW50aWZpZXJfZXhpc3RzJzogXCJUaGVyZSdzIGFscmVhZHkgYW4gYWNjb3VudCBmb3IgdGhpcyBlbWFpbC4gU2lnbiBpbiB3aXRoIHttZXRob2RzfS5cIixcbiAgJ2Vycm9yLmZvcm1fcGFzc3dvcmRfcHduZWQnOiAnVGhpcyBwYXNzd29yZCBoYXMgYXBwZWFyZWQgaW4gYSBrbm93biBkYXRhIGJyZWFjaC4gUGxlYXNlIGNob29zZSBhIGRpZmZlcmVudCBvbmUuJyxcbiAgJ2Vycm9yLmZvcm1fcGFzc3dvcmRfdG9vX3Nob3J0JzogJ1Bhc3N3b3JkIG11c3QgYmUgYXQgbGVhc3Qge21pbl9sZW5ndGh9IGNoYXJhY3RlcnMuJyxcbiAgJ2Vycm9yLmZvcm1fcGFzc3dvcmRfdG9vX2xvbmcnOiAnUGFzc3dvcmQgbXVzdCBiZSBhdCBtb3N0IHttYXhfbGVuZ3RofSBjaGFyYWN0ZXJzLicsXG4gICdlcnJvci5mb3JtX3Bhc3N3b3JkX3JlcXVpcmVzX3VwcGVyY2FzZSc6ICdQYXNzd29yZCBtdXN0IGNvbnRhaW4gYW4gdXBwZXJjYXNlIGxldHRlci4nLFxuICAnZXJyb3IuZm9ybV9wYXNzd29yZF9yZXF1aXJlc19sb3dlcmNhc2UnOiAnUGFzc3dvcmQgbXVzdCBjb250YWluIGEgbG93ZXJjYXNlIGxldHRlci4nLFxuICAnZXJyb3IuZm9ybV9wYXNzd29yZF9yZXF1aXJlc19udW1iZXInOiAnUGFzc3dvcmQgbXVzdCBjb250YWluIGEgbnVtYmVyLicsXG4gICdlcnJvci5mb3JtX3Bhc3N3b3JkX3JlcXVpcmVzX3N5bWJvbCc6ICdQYXNzd29yZCBtdXN0IGNvbnRhaW4gYSBzeW1ib2wuJyxcbiAgJ2Vycm9yLmZvcm1fcGFzc3dvcmRfbm90X2FsbG93ZWQnOiAnVGhhdCBwYXNzd29yZCBpcyBub3QgYWxsb3dlZC4gQ2hvb3NlIGEgZGlmZmVyZW50IG9uZS4nLFxuICAnZXJyb3IuZm9ybV9wYXNzd29yZF9jb250YWluc19pZGVudGlmaWVyJzogJ1Bhc3N3b3JkIG11c3Qgbm90IGNvbnRhaW4geW91ciBlbWFpbCBvciB1c2VybmFtZS4nLFxuICAnZXJyb3IuZm9ybV9wYXNzd29yZF9zYW1lX2FzX2N1cnJlbnQnOiAnWW91ciBuZXcgcGFzc3dvcmQgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSB5b3VyIGN1cnJlbnQgb25lLicsXG4gICdlcnJvci5mb3JtX3Bhc3N3b3JkX3JldXNlZCc6ICdZb3VyIG5ldyBwYXNzd29yZCBtdXN0IG5vdCBtYXRjaCBhbnkgb2YgeW91ciBsYXN0IHtoaXN0b3J5X2NvdW50fSBwYXNzd29yZHMuJyxcbiAgJ2Vycm9yLnBhc3N3b3JkX2V4cGlyZWQnOiAnWW91ciBwYXNzd29yZCBoYXMgZXhwaXJlZC4gUmVzZXQgaXQgdG8gY29udGludWUuJyxcbiAgJ2Vycm9yLmVtYWlsX25vdF92ZXJpZmllZCc6ICdZb3VyIGVtYWlsIGFkZHJlc3MgaXMgbm90IHZlcmlmaWVkIHlldC4gVmVyaWZ5IGl0IGJlZm9yZSBzaWduaW5nIGluIHdpdGggeW91ciBwYXNzd29yZC4nLFxuICAnZXJyb3Iuc2lnbl9pbl90b2tlbl9pbnZhbGlkJzogJ1RoYXQgc2lnbi1pbiB0b2tlbiBpcyBpbnZhbGlkIG9yIGhhcyBleHBpcmVkLicsXG4gICdlcnJvci50b29fbWFueV9hdHRlbXB0cyc6ICdUb28gbWFueSBmYWlsZWQgYXR0ZW1wdHMuIFRyeSBhZ2FpbiBsYXRlci4nLFxuICAnZXJyb3IudG9vX21hbnlfcmVxdWVzdHMnOiAnVG9vIG1hbnkgcmVxdWVzdHMuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuJyxcbiAgJ2Vycm9yLmNhcHRjaGFfcmVxdWlyZWQnOiAnUGxlYXNlIGNvbXBsZXRlIHRoZSBzZWN1cml0eSBjaGVjaywgdGhlbiB0cnkgYWdhaW4uJyxcbiAgJ2Vycm9yLmNhcHRjaGFfZmFpbGVkJzogXCJUaGUgc2VjdXJpdHkgY2hlY2sgZGlkbid0IHBhc3MuIFBsZWFzZSB0cnkgYWdhaW4uXCIsXG4gICdlcnJvci5jYXB0Y2hhX3VuYXZhaWxhYmxlJzogJ1RoZSBzZWN1cml0eSBjaGVjayBpcyB1bmF2YWlsYWJsZSByaWdodCBub3cuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuJyxcbiAgJ2Vycm9yLmVtYWlsX2RlbGl2ZXJ5X3VuYXZhaWxhYmxlJzogXCJUaGlzIGFwcCBjYW4ndCBzZW5kIGVtYWlsIHJpZ2h0IG5vdy4gVHJ5IGFub3RoZXIgc2lnbi1pbiBtZXRob2Qgb3IgY29udGFjdCB0aGUgYXBwIG93bmVyLlwiLFxuICAnZXJyb3Iuc3RyYXRlZ3lfZGlzYWJsZWQnOiAnVGhpcyBzaWduLWluIG1ldGhvZCBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIGFwcC4nLFxuICAnZXJyb3Iuc2lnbl91cF9yZXN0cmljdGVkJzogJ1NpZ24tdXAgb24gdGhpcyBhcHAgaXMgYnkgaW52aXRhdGlvbiBvbmx5LicsXG4gICdlcnJvci53YWl0bGlzdGVkJzogXCJZb3UncmUgb24gdGhlIHdhaXRsaXN0LiBXZSdsbCBlbWFpbCB5b3Ugd2hlbiBhIHBsYWNlIG9wZW5zIHVwLlwiLFxuICAnZXJyb3IuaWRlbnRpZmllcl9ub3RfYWxsb3dlZCc6ICdUaGlzIGVtYWlsIG9yIHBob25lIG51bWJlciBpcyBub3QgYWxsb3dlZCBvbiB0aGlzIGFwcC4nLFxuICAnZXJyb3IuZGlzcG9zYWJsZV9lbWFpbF9ibG9ja2VkJzogJ1NpZ24tdXAgd2l0aCBhIGRpc3Bvc2FibGUgb3IgdGVtcG9yYXJ5IGVtYWlsIGFkZHJlc3MgaXMgbm90IGFsbG93ZWQuJyxcbiAgJ2Vycm9yLnNzb19yZXF1aXJlZCc6ICdUaGlzIG9yZ2FuaXphdGlvbiByZXF1aXJlcyBzaWduaW5nIGluIHRocm91Z2ggc2luZ2xlIHNpZ24tb24uJyxcbiAgJ2Vycm9yLnNpZ25faW5zX2Rpc2FibGVkJzogJ1NpZ24taW5zIGFyZSB0ZW1wb3JhcmlseSBkaXNhYmxlZC4nLFxuICAnZXJyb3Iuc2lnbl91cHNfZGlzYWJsZWQnOiAnU2lnbi11cHMgYXJlIHRlbXBvcmFyaWx5IGRpc2FibGVkLicsXG4gICdlcnJvci5oaWdoX3Jpc2tfYmxvY2tlZCc6ICdUaGlzIHNpZ24taW4gd2FzIGJsb2NrZWQgYmVjYXVzZSBpdCBsb29rZWQgdW51c3VhbC4nLFxuICAnZXJyb3Iuc21zX3JlZ2lvbl9ibG9ja2VkJzogJ1RleHQgbWVzc2FnZXMgYXJlIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgcGhvbmUgbnVtYmVyLicsXG59O1xuXG4vKipcbiAqIExvb2sgdXAgYSBrZXkgYW5kIGludGVycG9sYXRlIGB7cGxhY2Vob2xkZXJzfWAuXG4gKlxuICogQW4gdW5rbm93biBwbGFjZWhvbGRlciBpcyBsZWZ0IHZpc2libGUgZm9yIHRoZSBzYW1lIHJlYXNvbiBhIG1pc3Npbmcga2V5IGlzOlxuICogYENvbnRpbnVlIHdpdGgge3Byb3ZpZGVyfWAgaW4gdGhlIFVJIGlzIGEgYnVnIHJlcG9ydCB3YWl0aW5nIHRvIGJlIGZpbGVkLFxuICogd2hlcmVhcyBgQ29udGludWUgd2l0aCBgIGlzIG9uZSBub2JvZHkgbm90aWNlcyB1bnRpbCBhIGN1c3RvbWVyIGRvZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGUoXG4gIGNhdGFsb2c6IENhdGFsb2csXG4gIGtleTogc3RyaW5nLFxuICB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IHRlbXBsYXRlID0gY2F0YWxvZ1trZXldID8/IEVOX1VTW2tleV0gPz8ga2V5O1xuICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFx7KFxcdyspXFx9L2csIChtYXRjaCwgbmFtZTogc3RyaW5nKSA9PiB2YXJpYWJsZXNbbmFtZV0gPz8gbWF0Y2gpO1xufVxuXG4vKiogTWVyZ2UgYSBjb21tdW5pdHkgbG9jYWxlIG92ZXIgZW4tVVMgc28gYSBwYXJ0aWFsIHRyYW5zbGF0aW9uIHN0aWxsIHJlbmRlcnMuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aEZhbGxiYWNrKGxvY2FsZTogQ2F0YWxvZyk6IENhdGFsb2cge1xuICByZXR1cm4geyAuLi5FTl9VUywgLi4ubG9jYWxlIH07XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
1
  /** This package's version, sent as `X-Atlas-SDK` (kept in step with package.json by a test). */
2
- export const ATLAS_ANGULAR_VERSION = '0.6.0';
2
+ export const ATLAS_ANGULAR_VERSION = '0.6.1';
3
3
  export const ATLAS_ANGULAR_SDK = { name: '@atlasauth/angular', version: ATLAS_ANGULAR_VERSION };
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxnR0FBZ0c7QUFDaEcsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsT0FBTyxDQUFDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFpQixFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQXRsYXNTZGtJbmZvIH0gZnJvbSAnQGF0bGFzYXV0aC9qcyc7XG5cbi8qKiBUaGlzIHBhY2thZ2UncyB2ZXJzaW9uLCBzZW50IGFzIGBYLUF0bGFzLVNES2AgKGtlcHQgaW4gc3RlcCB3aXRoIHBhY2thZ2UuanNvbiBieSBhIHRlc3QpLiAqL1xuZXhwb3J0IGNvbnN0IEFUTEFTX0FOR1VMQVJfVkVSU0lPTiA9ICcwLjYuMCc7XG5leHBvcnQgY29uc3QgQVRMQVNfQU5HVUxBUl9TREs6IEF0bGFzU2RrSW5mbyA9IHsgbmFtZTogJ0BhdGxhc2F1dGgvYW5ndWxhcicsIHZlcnNpb246IEFUTEFTX0FOR1VMQVJfVkVSU0lPTiB9O1xuIl19
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxnR0FBZ0c7QUFDaEcsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsT0FBTyxDQUFDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFpQixFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQXRsYXNTZGtJbmZvIH0gZnJvbSAnQGF0bGFzYXV0aC9qcyc7XG5cbi8qKiBUaGlzIHBhY2thZ2UncyB2ZXJzaW9uLCBzZW50IGFzIGBYLUF0bGFzLVNES2AgKGtlcHQgaW4gc3RlcCB3aXRoIHBhY2thZ2UuanNvbiBieSBhIHRlc3QpLiAqL1xuZXhwb3J0IGNvbnN0IEFUTEFTX0FOR1VMQVJfVkVSU0lPTiA9ICcwLjYuMSc7XG5leHBvcnQgY29uc3QgQVRMQVNfQU5HVUxBUl9TREs6IEF0bGFzU2RrSW5mbyA9IHsgbmFtZTogJ0BhdGxhc2F1dGgvYW5ndWxhcicsIHZlcnNpb246IEFUTEFTX0FOR1VMQVJfVkVSU0lPTiB9O1xuIl19
@@ -219,6 +219,11 @@ const EN_US = {
219
219
  'userProfile.addEmail': 'Add an email address',
220
220
  'userProfile.makePrimary': 'Make primary',
221
221
  'userProfile.unverified': 'Unverified',
222
+ 'userProfile.verify': 'Verify',
223
+ 'userProfile.verifyConfirm': 'Confirm',
224
+ 'userProfile.verifyCodePlaceholder': 'Code from the email',
225
+ 'userProfile.verifySendFailed': 'We could not send a code right now. Try again in a minute.',
226
+ 'userProfile.verifyCodeRejected': 'That code was not accepted.',
222
227
  'userProfile.revokeDevice': 'Sign out',
223
228
  'userProfile.deleteAccount': 'Delete account',
224
229
  'organization.switcher': 'Switch organization',
@@ -286,7 +291,7 @@ function withFallback(locale) {
286
291
  }
287
292
 
288
293
  /** This package's version, sent as `X-Atlas-SDK` (kept in step with package.json by a test). */
289
- const ATLAS_ANGULAR_VERSION = '0.6.0';
294
+ const ATLAS_ANGULAR_VERSION = '0.6.1';
290
295
  const ATLAS_ANGULAR_SDK = { name: '@atlasauth/angular', version: ATLAS_ANGULAR_VERSION };
291
296
 
292
297
  /**
@@ -2303,6 +2308,43 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
2303
2308
  */
2304
2309
  class UserProfileComponent {
2305
2310
  atlas = inject(AtlasService);
2311
+ // An unverified address (added and never confirmed, or the sign-up address on
2312
+ // an app that did not require verification) can be proven here: send a code,
2313
+ // then enter it.
2314
+ verifying = signal(null);
2315
+ code = signal('');
2316
+ busy = signal(false);
2317
+ verifyError = signal(null);
2318
+ client = this.atlas.createFapiClient();
2319
+ async sendCode(id) {
2320
+ this.verifyError.set(null);
2321
+ this.busy.set(true);
2322
+ const res = await this.client.post(`/v1/client/me/email_addresses/${id}/prepare_verification`);
2323
+ this.busy.set(false);
2324
+ if (!res.ok) {
2325
+ this.verifyError.set(this.t('userProfile.verifySendFailed'));
2326
+ return;
2327
+ }
2328
+ this.code.set('');
2329
+ this.verifying.set(id);
2330
+ }
2331
+ async confirmCode() {
2332
+ const id = this.verifying();
2333
+ if (!id)
2334
+ return;
2335
+ this.verifyError.set(null);
2336
+ this.busy.set(true);
2337
+ const res = await this.client.post(`/v1/client/me/email_addresses/${id}/attempt_verification`, {
2338
+ code: this.code(),
2339
+ });
2340
+ this.busy.set(false);
2341
+ if (!res.ok) {
2342
+ this.verifyError.set(this.t('userProfile.verifyCodeRejected'));
2343
+ return;
2344
+ }
2345
+ this.verifying.set(null);
2346
+ await this.atlas.reload();
2347
+ }
2306
2348
  t(key) {
2307
2349
  return translate(this.atlas.localization, key);
2308
2350
  }
@@ -2323,10 +2365,42 @@ class UserProfileComponent {
2323
2365
  {{ email.email_address }}
2324
2366
  @if (!email.verified) {
2325
2367
  <em> — {{ t('userProfile.unverified') }}</em>
2368
+ @if (verifying() === email.id) {
2369
+ <span data-atlas="email-verify">
2370
+ <input
2371
+ [class]="cls('formFieldInput', 'atlas-account-input')"
2372
+ inputmode="numeric"
2373
+ autocomplete="one-time-code"
2374
+ [placeholder]="t('userProfile.verifyCodePlaceholder')"
2375
+ [value]="code()"
2376
+ (input)="code.set($any($event.target).value)"
2377
+ />
2378
+ <button
2379
+ [class]="cls('formButtonSecondary', 'atlas-button-secondary')"
2380
+ type="button"
2381
+ [disabled]="busy()"
2382
+ (click)="confirmCode()"
2383
+ >
2384
+ {{ t('userProfile.verifyConfirm') }}
2385
+ </button>
2386
+ </span>
2387
+ } @else {
2388
+ <button
2389
+ [class]="cls('formButtonSecondary', 'atlas-button-secondary')"
2390
+ type="button"
2391
+ [disabled]="busy()"
2392
+ (click)="sendCode(email.id)"
2393
+ >
2394
+ {{ t('userProfile.verify') }}
2395
+ </button>
2396
+ }
2326
2397
  }
2327
2398
  </li>
2328
2399
  }
2329
2400
  </ul>
2401
+ @if (verifyError(); as message) {
2402
+ <p role="alert">{{ message }}</p>
2403
+ }
2330
2404
  </section>
2331
2405
 
2332
2406
  <section>
@@ -2356,10 +2430,42 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
2356
2430
  {{ email.email_address }}
2357
2431
  @if (!email.verified) {
2358
2432
  <em> — {{ t('userProfile.unverified') }}</em>
2433
+ @if (verifying() === email.id) {
2434
+ <span data-atlas="email-verify">
2435
+ <input
2436
+ [class]="cls('formFieldInput', 'atlas-account-input')"
2437
+ inputmode="numeric"
2438
+ autocomplete="one-time-code"
2439
+ [placeholder]="t('userProfile.verifyCodePlaceholder')"
2440
+ [value]="code()"
2441
+ (input)="code.set($any($event.target).value)"
2442
+ />
2443
+ <button
2444
+ [class]="cls('formButtonSecondary', 'atlas-button-secondary')"
2445
+ type="button"
2446
+ [disabled]="busy()"
2447
+ (click)="confirmCode()"
2448
+ >
2449
+ {{ t('userProfile.verifyConfirm') }}
2450
+ </button>
2451
+ </span>
2452
+ } @else {
2453
+ <button
2454
+ [class]="cls('formButtonSecondary', 'atlas-button-secondary')"
2455
+ type="button"
2456
+ [disabled]="busy()"
2457
+ (click)="sendCode(email.id)"
2458
+ >
2459
+ {{ t('userProfile.verify') }}
2460
+ </button>
2461
+ }
2359
2462
  }
2360
2463
  </li>
2361
2464
  }
2362
2465
  </ul>
2466
+ @if (verifyError(); as message) {
2467
+ <p role="alert">{{ message }}</p>
2468
+ }
2363
2469
  </section>
2364
2470
 
2365
2471
  <section>