flash-notifications 0.0.46 → 0.0.48

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/README.md CHANGED
@@ -78,13 +78,21 @@ Shows an error notification with a localized "Error" title.
78
78
  `FlashNotifications.success(message)`
79
79
  Shows a success notification with a localized "Success" title.
80
80
 
81
+ `FlashNotifications.activity({message})`
82
+ Shows a long-running activity notification with a localized "Activity" title and a loading bar. It does not auto-dismiss; the returned handle resolves it:
83
+
84
+ - `handle.update({progress})` moves the bar determinately. `progress` is a number in `[0, 1]` (clamped; non-numbers and `NaN` are ignored). Call it without a `progress` to go back to an indeterminate sweep.
85
+ - `handle.succeed(message?)` flashes the success tone, then dismisses.
86
+ - `handle.fail(message?)` flashes the error tone, then dismisses.
87
+ - `handle.done()` dismisses without a tone change.
88
+
81
89
  `FlashNotifications.show({type, text})`
82
90
  Shows a notification with a localized title based on `type`. Unknown types fall back to the localized "Notification" title.
83
91
 
84
92
  `FlashNotifications.errorResponse(error)`
85
93
  Handles Api Maker validation and base errors, converting them into notifications. Unknown errors are logged and rethrown.
86
94
 
87
- Notifications auto-dismiss after 4 seconds and can be dismissed immediately by pressing them.
95
+ Notifications auto-dismiss after 4 seconds and can be dismissed immediately by pressing them. Activity notifications are the exception: they stay on screen until the handle resolves them (or the card is pressed, which acts like `done()`).
88
96
 
89
97
  ### Container
90
98
 
@@ -2,22 +2,31 @@ declare const _default: React.NamedExoticComponent<FlashNotificationsContainerPr
2
2
  export default _default;
3
3
  export type NotificationObjectType = {
4
4
  count: number;
5
+ id: string | undefined;
5
6
  message: string;
6
7
  title: string;
7
8
  type: string;
8
9
  };
9
10
  export type StoredNotificationType = {
10
11
  count: number;
12
+ id: string | undefined;
11
13
  height: import("react-native").Animated.Value;
12
14
  marginBottom: import("react-native").Animated.Value;
13
15
  measuredHeight: number | undefined;
14
16
  message: string;
15
17
  opacity: import("react-native").Animated.Value;
18
+ progress: number | undefined;
16
19
  removing: boolean;
17
- timeout: ReturnType<typeof setTimeout>;
20
+ timeout: ReturnType<typeof setTimeout> | undefined;
18
21
  title: string;
19
22
  type: string;
20
23
  };
24
+ export type ActivityNotificationDetailType = {
25
+ action: "update" | "succeed" | "fail" | "done";
26
+ id: string;
27
+ message?: string | undefined;
28
+ progress?: number | undefined;
29
+ };
21
30
  export type FlashNotificationsContainerProps = {
22
31
  insets?: {
23
32
  top?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"/src/","sources":["container/index.jsx"],"names":[],"mappings":";;;WAmBc,MAAM;aACN,MAAM;WACN,MAAM;UACN,MAAM;;;WAKN,MAAM;YACN,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;kBACrC,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;oBACrC,MAAM,GAAG,SAAS;aAClB,MAAM;aACN,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;cACrC,OAAO;aACP,UAAU,CAAC,OAAO,UAAU,CAAC;WAC7B,MAAM;UACN,MAAM;;;aAKN;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAC,YAAC;;;WAK9C,MAAM;mBACN,sBAAsB,EAAE;;kBAzCQ,OAAO"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"/src/","sources":["container/index.jsx"],"names":[],"mappings":";;;WAmBc,MAAM;QACN,MAAM,GAAG,SAAS;aAClB,MAAM;WACN,MAAM;UACN,MAAM;;;WAKN,MAAM;QACN,MAAM,GAAG,SAAS;YAClB,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;kBACrC,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;oBACrC,MAAM,GAAG,SAAS;aAClB,MAAM;aACN,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;cACrC,MAAM,GAAG,SAAS;cAClB,OAAO;aACP,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,SAAS;WACzC,MAAM;UACN,MAAM;;;YAKN,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM;QACtC,MAAM;cACN,MAAM,YAAC;eACP,MAAM,YAAC;;;aAKP;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAC,YAAC;;;WAK9C,MAAM;mBACN,sBAAsB,EAAE;;kBApDQ,OAAO"}
@@ -1,5 +1,5 @@
1
1
  // @ts-check
2
- import { digg } from "diggerize";
2
+ import { dig, digg } from "diggerize";
3
3
  import PropTypes from "prop-types";
4
4
  // @ts-expect-error Package ships no .d.ts files.
5
5
  import propTypesExact from "prop-types-exact";
@@ -15,6 +15,7 @@ import FlashNotification from "./notification";
15
15
  /**
16
16
  * @typedef {object} NotificationObjectType
17
17
  * @property {number} count
18
+ * @property {string | undefined} id
18
19
  * @property {string} message
19
20
  * @property {string} title
20
21
  * @property {string} type
@@ -22,16 +23,25 @@ import FlashNotification from "./notification";
22
23
  /**
23
24
  * @typedef {object} StoredNotificationType
24
25
  * @property {number} count
26
+ * @property {string | undefined} id
25
27
  * @property {import("react-native").Animated.Value} height
26
28
  * @property {import("react-native").Animated.Value} marginBottom
27
29
  * @property {number | undefined} measuredHeight
28
30
  * @property {string} message
29
31
  * @property {import("react-native").Animated.Value} opacity
32
+ * @property {number | undefined} progress
30
33
  * @property {boolean} removing
31
- * @property {ReturnType<typeof setTimeout>} timeout
34
+ * @property {ReturnType<typeof setTimeout> | undefined} timeout
32
35
  * @property {string} title
33
36
  * @property {string} type
34
37
  */
38
+ /**
39
+ * @typedef {object} ActivityNotificationDetailType
40
+ * @property {"update" | "succeed" | "fail" | "done"} action
41
+ * @property {string} id
42
+ * @property {string=} message
43
+ * @property {number=} progress
44
+ */
35
45
  /**
36
46
  * @typedef {object} FlashNotificationsContainerProps
37
47
  * @property {{top?: number, right?: number, left?: number}=} insets
@@ -59,6 +69,7 @@ class FlashNotificationsContainer extends ShapeComponent {
59
69
  notificationSpacing = 15;
60
70
  setup() {
61
71
  useEventEmitter(events, "pushNotification", this.onPushNotificationEvent);
72
+ useEventEmitter(events, "activityNotification", this.onActivityNotificationEvent);
62
73
  useEffect(() => {
63
74
  return () => {
64
75
  for (const timeout of this.timeouts) {
@@ -90,6 +101,12 @@ class FlashNotificationsContainer extends ShapeComponent {
90
101
  right += 20;
91
102
  }
92
103
  const style = {
104
+ // "box-none" so the fixed, high-zIndex container never intercepts pointer events on its own
105
+ // bounds: empty gaps pass through, and a fading notification (whose wrapper is set to
106
+ // pointerEvents "none" while removing) passes through too, while a live notification still
107
+ // receives its own presses. Without this the container itself would swallow clicks/fills
108
+ // aimed at the form beneath it during a notification's fade-out.
109
+ pointerEvents: "box-none",
93
110
  position: isNative ? "absolute" : "fixed",
94
111
  top,
95
112
  right,
@@ -103,16 +120,10 @@ class FlashNotificationsContainer extends ShapeComponent {
103
120
  , {
104
121
  // @ts-expect-error
105
122
  dataSet: this.rootViewDataSet ||= { component: "flash-notifications-container" },
106
- // "box-none" so the fixed, high-zIndex container never intercepts pointer events on its own
107
- // bounds: empty gaps pass through, and a fading notification (whose wrapper is set to
108
- // pointerEvents="none" while removing) passes through too, while a live notification still
109
- // receives its own presses. Without this the container itself would swallow clicks/fills
110
- // aimed at the form beneath it during a notification's fade-out.
111
- pointerEvents: "box-none",
112
123
  // @ts-expect-error React Native types do not include the web-only "fixed" position.
113
124
  style: viewStyle, testID: "flash-notificaitons/container" }, notifications.map(
114
125
  /** @param {StoredNotificationType} notification */
115
- (notification) => React.createElement(FlashNotification, { count: notification.count, key: `notification-${notification.count}`, message: notification.message, notification: notification, onMeasured: this.onNotificationMeasured, onRemovedClicked: this.onRemovedClicked, removing: notification.removing, title: notification.title, type: notification.type }))));
126
+ (notification) => React.createElement(FlashNotification, { count: notification.count, key: `notification-${notification.count}`, message: notification.message, notification: notification, onMeasured: this.onNotificationMeasured, onRemovedClicked: this.onRemovedClicked, progress: notification.progress, removing: notification.removing, title: notification.title, type: notification.type }))));
116
127
  }
117
128
  /**
118
129
  * @param {...unknown} args
@@ -126,24 +137,36 @@ class FlashNotificationsContainer extends ShapeComponent {
126
137
  * @returns {void}
127
138
  */
128
139
  onPushNotification = (detail) => {
140
+ const type = digg(detail, "type");
141
+ // An activity notification without an id has no handle to resolve it and
142
+ // would stay on screen forever, so it is dropped.
143
+ if (type == "activity" && detail.id == undefined) {
144
+ debugLog("FlashNotifications: activity notification without id ignored");
145
+ return;
146
+ }
129
147
  const count = this.s.count + 1;
130
- const timeout = setTimeout(() => {
148
+ // Activity notifications stay on screen until their handle resolves them.
149
+ const timeout = type == "activity" ? undefined : setTimeout(() => {
131
150
  debugLog("FlashNotifications: notification timeout", { id: count });
132
151
  this.dismissNotificationByCount(count, "timeout");
133
152
  }, 4000);
134
- this.timeouts.push(timeout);
153
+ if (timeout) {
154
+ this.timeouts.push(timeout);
155
+ }
135
156
  /** @type {StoredNotificationType} */
136
157
  const notification = {
137
158
  count,
138
159
  height: new Animated.Value(0),
160
+ id: dig(detail, "id"),
139
161
  marginBottom: new Animated.Value(this.notificationSpacing),
140
162
  measuredHeight: undefined,
141
163
  message: digg(detail, "message"),
142
164
  opacity: new Animated.Value(1),
165
+ progress: undefined,
143
166
  removing: false,
144
167
  timeout,
145
168
  title: digg(detail, "title"),
146
- type: digg(detail, "type")
169
+ type
147
170
  };
148
171
  debugLog("FlashNotifications: notification added", {
149
172
  id: count,
@@ -160,6 +183,46 @@ class FlashNotificationsContainer extends ShapeComponent {
160
183
  debugLog("FlashNotifications: notification pressed", { id: notification.count });
161
184
  this.dismissNotification(notification, "press");
162
185
  };
186
+ /**
187
+ * @param {...unknown} args
188
+ * @returns {void}
189
+ */
190
+ onActivityNotificationEvent = (...args) => {
191
+ this.onActivityNotification(/** @type {ActivityNotificationDetailType} */ (args[0]));
192
+ };
193
+ /**
194
+ * @param {ActivityNotificationDetailType} detail
195
+ * @returns {void}
196
+ */
197
+ onActivityNotification = (detail) => {
198
+ const notification = /** @type {StoredNotificationType | undefined} */ (this.s.notifications.find(
199
+ /** @param {StoredNotificationType} item */
200
+ (item) => item.id === detail.id));
201
+ if (!notification || notification.removing) {
202
+ debugLog("FlashNotifications: activity notification not found", { id: detail.id, action: detail.action });
203
+ return;
204
+ }
205
+ if (detail.action == "update") {
206
+ debugLog("FlashNotifications: activity progress updated", { id: notification.count, progress: detail.progress });
207
+ notification.progress = detail.progress;
208
+ this.setState({ notifications: [...this.s.notifications] });
209
+ return;
210
+ }
211
+ if (detail.action == "succeed" || detail.action == "fail") {
212
+ debugLog("FlashNotifications: activity resolved", { id: notification.count, action: detail.action });
213
+ // Map the action verbs onto the canonical type names so the card
214
+ // renders the existing success/error tones during the dismiss flash.
215
+ notification.type = detail.action == "succeed" ? "success" : "error";
216
+ if (detail.message) {
217
+ notification.message = detail.message;
218
+ }
219
+ this.setState({ notifications: [...this.s.notifications] });
220
+ this.dismissNotification(notification, detail.action);
221
+ return;
222
+ }
223
+ debugLog("FlashNotifications: activity dismissed", { id: notification.count, action: detail.action });
224
+ this.dismissNotification(notification, "done");
225
+ };
163
226
  /**
164
227
  * @param {StoredNotificationType} notification
165
228
  * @param {number} measuredHeight
@@ -237,4 +300,4 @@ class FlashNotificationsContainer extends ShapeComponent {
237
300
  });
238
301
  };
239
302
  }));
240
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbImNvbnRhaW5lci9pbmRleC5qc3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxXQUFXLENBQUE7QUFDOUIsT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFBO0FBQ2xDLGlEQUFpRDtBQUNqRCxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFDLE1BQU0sT0FBTyxDQUFBO0FBQ3JELE9BQU8sRUFBQyxjQUFjLEVBQUUsY0FBYyxFQUFDLE1BQU0sNENBQTRDLENBQUE7QUFDekYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdCQUF3QixDQUFBO0FBQ3BELE9BQU8sZUFBZSxNQUFNLHNCQUFzQixDQUFBO0FBQ2xELE9BQU8sV0FBVyxNQUFNLGtDQUFrQyxDQUFBO0FBQzFELE9BQU8sRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBRTNDLE9BQU8sUUFBUSxNQUFNLGFBQWEsQ0FBQTtBQUNsQyxPQUFPLE1BQU0sTUFBTSxjQUFjLENBQUE7QUFDakMsT0FBTyxpQkFBaUIsTUFBTSxnQkFBZ0IsQ0FBQTtBQUU5Qzs7Ozs7O0dBTUc7QUFFSDs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSDs7O0dBR0c7QUFFSDs7OztHQUlHO0FBRUgsZUFBZSxJQUFJLENBQUMsY0FBYztBQUNoQzs7R0FFRztBQUNILE1BQU0sMkJBQTRCLFNBQVEsY0FBYztJQUN4RCxNQUFNLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQztRQUNoQyxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07S0FDekIsQ0FBQyxDQUFBO0lBRUYsS0FBSyxHQUFHO1FBQ04sS0FBSyxFQUFFLENBQUM7UUFDUix1Q0FBdUM7UUFDdkMsYUFBYSxFQUFFLEVBQUU7S0FDbEIs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QUMsWUFBWSxFQUFFLEVBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUMsQ0FBQztTQUM1RyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNaLFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRTtnQkFDN0MsRUFBRSxFQUFFLFlBQVksQ0FBQyxLQUFLO2dCQUN0QixVQUFVLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQztnQkFDakQsTUFBTTthQUNQLENBQUMsQ0FBQTtZQUNGLFFBQVEsQ0FBQyx3Q0FBd0MsRUFBRSxFQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7WUFFcEYsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDWixhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTTtnQkFDeEMsMkNBQTJDO2dCQUMzQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxZQUFZLENBQUMsS0FBSyxDQUMzQzthQUNGLENBQUMsQ0FBQTtZQUVGLFFBQVEsQ0FBQywwQ0FBMEMsRUFBRSxFQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUE7UUFDeEYsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUE7Q0FDRixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG4vLyBAdHMtZXhwZWN0LWVycm9yIFBhY2thZ2Ugc2hpcHMgbm8gLmQudHMgZmlsZXMuXG5pbXBvcnQgcHJvcFR5cGVzRXhhY3QgZnJvbSBcInByb3AtdHlwZXMtZXhhY3RcIlxuaW1wb3J0IFJlYWN0LCB7bWVtbywgdXNlRWZmZWN0LCB1c2VNZW1vfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudCwgU2hhcGVDb21wb25lbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9zaGFwZS1jb21wb25lbnQuanNcIlxuaW1wb3J0IHt1c2VCcmVha3BvaW50fSBmcm9tIFwicmVzcG9uc2l2ZS1icmVha3BvaW50c1wiXG5pbXBvcnQgdXNlRXZlbnRFbWl0dGVyIGZyb20gXCJ5YS11c2UtZXZlbnQtZW1pdHRlclwiXG5pbXBvcnQgdXNlRW52U2Vuc2UgZnJvbSBcImVudi1zZW5zZS9idWlsZC91c2UtZW52LXNlbnNlLmpzXCJcbmltcG9ydCB7QW5pbWF0ZWQsIFZpZXd9IGZyb20gXCJyZWFjdC1uYXRpdmVcIlxuXG5pbXBvcnQgZGVidWdMb2cgZnJvbSBcIi4uL2RlYnVnLmpzXCJcbmltcG9ydCBldmVudHMgZnJvbSBcIi4uL2V2ZW50cy5qc1wiXG5pbXBvcnQgRmxhc2hOb3RpZmljYXRpb24gZnJvbSBcIi4vbm90aWZpY2F0aW9uXCJcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBOb3RpZmljYXRpb25PYmplY3RUeXBlXG4gKiBAcHJvcGVydHkge251bWJlcn0gY291bnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXNzYWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGl0bGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTdG9yZWROb3RpZmljYXRpb25UeXBlXG4gKiBAcHJvcGVydHkge251bWJlcn0gY291bnRcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBoZWlnaHRcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBtYXJnaW5Cb3R0b21cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBtZWFzdXJlZEhlaWdodFxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBvcGFjaXR5XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlbW92aW5nXG4gKiBAcHJvcGVydHkge1JldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+fSB0aW1lb3V0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGl0bGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBGbGFzaE5vdGlmaWNhdGlvbnNDb250YWluZXJQcm9wc1xuICogQHByb3BlcnR5IHt7dG9wPzogbnVtYmVyLCByaWdodD86IG51bWJlciwgbGVmdD86IG51bWJlcn09fSBpbnNldHNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZsYXNoTm90aWZpY2F0aW9uc0NvbnRhaW5lclN0YXRlXG4gKiBAcHJvcGVydHkge251bWJlcn0gY291bnRcbiAqIEBwcm9wZXJ0eSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZVtdfSBub3RpZmljYXRpb25zXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgbWVtbyhzaGFwZUNvbXBvbmVudChcbiAgLyoqXG4gICAqIEBhdWdtZW50cyB7U2hhcGVDb21wb25lbnQ8Rmxhc2hOb3RpZmljYXRpb25zQ29udGFpbmVyUHJvcHMsIEZsYXNoTm90aWZpY2F0aW9uc0NvbnRhaW5lclN0YXRlPn1cbiAgICovXG4gIGNsYXNzIEZsYXNoTm90aWZpY2F0aW9uc0NvbnRhaW5lciBleHRlbmRzIFNoYXBlQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHByb3BUeXBlc0V4YWN0KHtcbiAgICBpbnNldHM6IFByb3BUeXBlcy5vYmplY3RcbiAgfSlcblxuICBzdGF0ZSA9IHtcbiAgICBjb3VudDogMCxcbiAgICAvKiogQHR5cGUge1N0b3JlZE5vdGlmaWNhdGlvblR5cGVbXX0gKi9cbiAgICBub3RpZmljYXRpb25zOiBbXVxuICB9XG5cbiAgLyoqIEB0eXBlIHtudW1iZXJbXX0gKi9cbiAgdGltZW91dHMgPSBbXVxuICBub3RpZmljYXRpb25TcGFjaW5nID0gMTVcblxuICBzZXR1cCgpIHtcbiAgICB1c2VFdmVudEVtaXR0ZXIoZXZlbnRzLCBcInB1c2hOb3RpZmljYXRpb25cIiwgdGhpcy5vblB1c2hOb3RpZmljYXRpb25FdmVudClcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCB0aW1lb3V0IG9mIHRoaXMudGltZW91dHMpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIFtdKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtub3RpZmljYXRpb25zfSA9IHRoaXMuc1xuICAgIGNvbnN0IGluc2V0cyA9IHRoaXMucHJvcHMuaW5zZXRzIHx8IHt9XG5cbiAgICBjb25zdCB7c21Eb3duLCBtZFVwfSA9IHVzZUJyZWFrcG9pbnQoKVxuICAgIGNvbnN0IHtpc05hdGl2ZX0gPSB1c2VFbnZTZW5zZSgpXG5cbiAgICBjb25zdCB2aWV3U3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGxldCB0b3AgPSAyMFxuICAgICAgbGV0IHJpZ2h0ID0gMFxuICAgICAgbGV0IGxlZnQgPSB1bmRlZmluZWRcblxuICAgICAgaWYgKGluc2V0cy50b3ApIHRvcCArPSBpbnNldHMudG9wXG4gICAgICBpZiAoaW5zZXRzLnJpZ2h0KSByaWdodCArPSBpbnNldHMucmlnaHRcblxuICAgICAgaWYgKHNtRG93bikge1xuICAgICAgICBsZWZ0ID0gMjBcblxuICAgICAgICBpZiAoaW5zZXRzLmxlZnQpIGxlZnQgKz0gaW5zZXRzLmxlZnRcblxuICAgICAgICByaWdodCArPSAyMFxuICAgICAgfSBlbHNlIGlmIChtZFVwKSB7XG4gICAgICAgIHJpZ2h0ICs9IDIwXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0eWxlID0ge1xuICAgICAgICBwb3NpdGlvbjogaXNOYXRpdmUgPyBcImFic29sdXRlXCIgOiBcImZpeGVkXCIsXG4gICAgICAgIHRvcCxcbiAgICAgICAgcmlnaHQsXG4gICAgICAgIGxlZnQsXG4gICAgICAgIHpJbmRleDogOTk5OTlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0eWxlXG4gICAgfSwgW2lzTmF0aXZlLCBzbURvd24sIG1kVXAsIGluc2V0cy50b3AsIGluc2V0cy5yaWdodCwgaW5zZXRzLmxlZnRdKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgZGF0YVNldD17dGhpcy5yb290Vmlld0RhdGFTZXQgfHw9IHtjb21wb25lbnQ6IFwiZmxhc2gtbm90aWZpY2F0aW9ucy1jb250YWluZXJcIn19XG4gICAgICAgIC8vIFwiYm94LW5vbmVcIiBzbyB0aGUgZml4ZWQsIGhpZ2gtekluZGV4IGNvbnRhaW5lciBuZXZlciBpbnRlcmNlcHRzIHBvaW50ZXIgZXZlbnRzIG9uIGl0cyBvd25cbiAgICAgICAgLy8gYm91bmRzOiBlbXB0eSBnYXBzIHBhc3MgdGhyb3VnaCwgYW5kIGEgZmFkaW5nIG5vdGlmaWNhdGlvbiAod2hvc2Ugd3JhcHBlciBpcyBzZXQgdG9cbiAgICAgICAgLy8gcG9pbnRlckV2ZW50cz1cIm5vbmVcIiB3aGlsZSByZW1vdmluZykgcGFzc2VzIHRocm91Z2ggdG9vLCB3aGlsZSBhIGxpdmUgbm90aWZpY2F0aW9uIHN0aWxsXG4gICAgICAgIC8vIHJlY2VpdmVzIGl0cyBvd24gcHJlc3Nlcy4gV2l0aG91dCB0aGlzIHRoZSBjb250YWluZXIgaXRzZWxmIHdvdWxkIHN3YWxsb3cgY2xpY2tzL2ZpbGxzXG4gICAgICAgIC8vIGFpbWVkIGF0IHRoZSBmb3JtIGJlbmVhdGggaXQgZHVyaW5nIGEgbm90aWZpY2F0aW9uJ3MgZmFkZS1vdXQuXG4gICAgICAgIHBvaW50ZXJFdmVudHM9XCJib3gtbm9uZVwiXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgUmVhY3QgTmF0aXZlIHR5cGVzIGRvIG5vdCBpbmNsdWRlIHRoZSB3ZWItb25seSBcImZpeGVkXCIgcG9zaXRpb24uXG4gICAgICAgIHN0eWxlPXt2aWV3U3R5bGV9XG4gICAgICAgIHRlc3RJRD1cImZsYXNoLW5vdGlmaWNhaXRvbnMvY29udGFpbmVyXCJcbiAgICAgID5cbiAgICAgICAge25vdGlmaWNhdGlvbnMubWFwKFxuICAgICAgICAgIC8qKiBAcGFyYW0ge1N0b3JlZE5vdGlmaWNhdGlvblR5cGV9IG5vdGlmaWNhdGlvbiAqL1xuICAgICAgICAgIChub3RpZmljYXRpb24pID0+XG4gICAgICAgICAgPEZsYXNoTm90aWZpY2F0aW9uXG4gICAgICAgICAgICBjb3VudD17bm90aWZpY2F0aW9uLmNvdW50fVxuICAgICAgICAgICAga2V5PXtgbm90aWZpY2F0aW9uLSR7bm90aWZpY2F0aW9uLmNvdW50fWB9XG4gICAgICAgICAgICBtZXNzYWdlPXtub3RpZmljYXRpb24ubWVzc2FnZX1cbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbj17bm90aWZpY2F0aW9ufVxuICAgICAgICAgICAgb25NZWFzdXJlZD17dGhpcy5vbk5vdGlmaWNhdGlvbk1lYXN1cmVkfVxuICAgICAgICAgICAgb25SZW1vdmVkQ2xpY2tlZD17dGhpcy5vblJlbW92ZWRDbGlja2VkfVxuICAgICAgICAgICAgcmVtb3Zpbmc9e25vdGlmaWNhdGlvbi5yZW1vdmluZ31cbiAgICAgICAgICAgIHRpdGxlPXtub3RpZmljYXRpb24udGl0bGV9XG4gICAgICAgICAgICB0eXBlPXtub3RpZmljYXRpb24udHlwZX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gey4uLnVua25vd259IGFyZ3NcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvblB1c2hOb3RpZmljYXRpb25FdmVudCA9ICguLi5hcmdzKSA9PiB7XG4gICAgdGhpcy5vblB1c2hOb3RpZmljYXRpb24oLyoqIEB0eXBlIHtOb3RpZmljYXRpb25PYmplY3RUeXBlfSAqLyAoYXJnc1swXSkpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb3RpZmljYXRpb25PYmplY3RUeXBlfSBkZXRhaWxcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvblB1c2hOb3RpZmljYXRpb24gPSAoZGV0YWlsKSA9PiB7XG4gICAgY29uc3QgY291bnQgPSB0aGlzLnMuY291bnQgKyAxXG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgZGVidWdMb2coXCJGbGFzaE5vdGlmaWNhdGlvbnM6IG5vdGlmaWNhdGlvbiB0aW1lb3V0XCIsIHtpZDogY291bnR9KVxuICAgICAgdGhpcy5kaXNtaXNzTm90aWZpY2F0aW9uQnlDb3VudChjb3VudCwgXCJ0aW1lb3V0XCIpXG4gICAgfSwgNDAwMClcblxuICAgIHRoaXMudGltZW91dHMucHVzaCh0aW1lb3V0KVxuXG4gICAgLyoqIEB0eXBlIHtTdG9yZWROb3RpZmljYXRpb25UeXBlfSAqL1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHtcbiAgICAgIGNvdW50LFxuICAgICAgaGVpZ2h0OiBuZXcgQW5pbWF0ZWQuVmFsdWUoMCksXG4gICAgICBtYXJnaW5Cb3R0b206IG5ldyBBbmltYXRlZC5WYWx1ZSh0aGlzLm5vdGlmaWNhdGlvblNwYWNpbmcpLFxuICAgICAgbWVhc3VyZWRIZWlnaHQ6IHVuZGVmaW5lZCxcbiAgICAgIG1lc3NhZ2U6IGRpZ2coZGV0YWlsLCBcIm1lc3NhZ2VcIiksXG4gICAgICBvcGFjaXR5OiBuZXcgQW5pbWF0ZWQuVmFsdWUoMSksXG4gICAgICByZW1vdmluZzogZmFsc2UsXG4gICAgICB0aW1lb3V0LFxuICAgICAgdGl0bGU6IGRpZ2coZGV0YWlsLCBcInRpdGxlXCIpLFxuICAgICAgdHlwZTogZGlnZyhkZXRhaWwsIFwidHlwZVwiKVxuICAgIH1cblxuICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBub3RpZmljYXRpb24gYWRkZWRcIiwge1xuICAgICAgaWQ6IGNvdW50LFxuICAgICAgdGl0bGU6IG5vdGlmaWNhdGlvbi50aXRsZSxcbiAgICAgIHR5cGU6IG5vdGlmaWNhdGlvbi50eXBlXG4gICAgfSlcblxuICAgIHRoaXMuc2V0U3RhdGUoe2NvdW50LCBub3RpZmljYXRpb25zOiB0aGlzLnMubm90aWZpY2F0aW9ucy5jb25jYXQoW25vdGlmaWNhdGlvbl0pfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N0b3JlZE5vdGlmaWNhdGlvblR5cGV9IG5vdGlmaWNhdGlvblxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uUmVtb3ZlZENsaWNrZWQgPSAobm90aWZpY2F0aW9uKSA9PiB7XG4gICAgZGVidWdMb2coXCJGbGFzaE5vdGlmaWNhdGlvbnM6IG5vdGlmaWNhdGlvbiBwcmVzc2VkXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50fSlcbiAgICB0aGlzLmRpc21pc3NOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBcInByZXNzXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtTdG9yZWROb3RpZmljYXRpb25UeXBlfSBub3RpZmljYXRpb25cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1lYXN1cmVkSGVpZ2h0XG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25Ob3RpZmljYXRpb25NZWFzdXJlZCA9IChub3RpZmljYXRpb24sIG1lYXN1cmVkSGVpZ2h0KSA9PiB7XG4gICAgaWYgKG5vdGlmaWNhdGlvbi5tZWFzdXJlZEhlaWdodCkgcmV0dXJuXG5cbiAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogbm90aWZpY2F0aW9uIG1lYXN1cmVkXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50LCBoZWlnaHQ6IG1lYXN1cmVkSGVpZ2h0fSlcblxuICAgIG5vdGlmaWNhdGlvbi5tZWFzdXJlZEhlaWdodCA9IG1lYXN1cmVkSGVpZ2h0XG4gICAgbm90aWZpY2F0aW9uLmhlaWdodC5zZXRWYWx1ZShtZWFzdXJlZEhlaWdodClcbiAgICB0aGlzLnNldFN0YXRlKHtub3RpZmljYXRpb25zOiBbLi4udGhpcy5zLm5vdGlmaWNhdGlvbnNdfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY291bnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAqL1xuICBkaXNtaXNzTm90aWZpY2F0aW9uQnlDb3VudCA9IChjb3VudCwgcmVhc29uID0gXCJ1bmtub3duXCIpID0+IHtcbiAgICBjb25zdCBub3RpZmljYXRpb24gPSAvKiogQHR5cGUge1N0b3JlZE5vdGlmaWNhdGlvblR5cGUgfCB1bmRlZmluZWR9ICovICh0aGlzLnMubm90aWZpY2F0aW9ucy5maW5kKFxuICAgICAgLyoqIEBwYXJhbSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZX0gaXRlbSAqL1xuICAgICAgKGl0ZW0pID0+IGl0ZW0uY291bnQgPT0gY291bnRcbiAgICApKVxuICAgIGlmICghbm90aWZpY2F0aW9uKSB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogbm90aWZpY2F0aW9uIG5vdCBmb3VuZFwiLCB7aWQ6IGNvdW50LCByZWFzb259KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5kaXNtaXNzTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgcmVhc29uKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZX0gbm90aWZpY2F0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGRpc21pc3NOb3RpZmljYXRpb24gPSAobm90aWZpY2F0aW9uLCByZWFzb24gPSBcInVua25vd25cIikgPT4ge1xuICAgIGlmIChub3RpZmljYXRpb24ucmVtb3ZpbmcpIHtcbiAgICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBub3RpZmljYXRpb24gYWxyZWFkeSByZW1vdmluZ1wiLCB7aWQ6IG5vdGlmaWNhdGlvbi5jb3VudCwgcmVhc29ufSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIG5vdGlmaWNhdGlvbi5yZW1vdmluZyA9IHRydWVcbiAgICBpZiAobm90aWZpY2F0aW9uLnRpbWVvdXQpIGNsZWFyVGltZW91dChub3RpZmljYXRpb24udGltZW91dClcblxuICAgIGlmICghbm90aWZpY2F0aW9uLm1lYXN1cmVkSGVpZ2h0KSB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogbm90aWZpY2F0aW9uIG1pc3NpbmcgbWVhc3VyZWQgaGVpZ2h0XCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50fSlcbiAgICAgIG5vdGlmaWNhdGlvbi5tZWFzdXJlZEhlaWdodCA9IDFcbiAgICAgIG5vdGlmaWNhdGlvbi5oZWlnaHQuc2V0VmFsdWUoMSlcbiAgICB9XG5cbiAgICAvLyBSZS1yZW5kZXIgaW1tZWRpYXRlbHkgc28gdGhlIGNsb3Npbmcgbm90aWZpY2F0aW9uIGRyb3BzIHBvaW50ZXIgZXZlbnRzIChwb2ludGVyRXZlbnRzPVwibm9uZVwiKVxuICAgIC8vIHRoZSBpbnN0YW50IGl0IHN0YXJ0cyBmYWRpbmcgb3V0LiBPdGhlcndpc2UgdGhlIGZhZGluZyBvdmVybGF5IGtlZXBzIGludGVyY2VwdGluZyB0aGUgbmV4dFxuICAgIC8vIGNsaWNrL2ZpbGwgZm9yIHRoZSB3aG9sZSBmYWRlIGR1cmF0aW9uIGV2ZW4gdGhvdWdoIGl0IGlzIG9uIGl0cyB3YXkgb3V0LlxuICAgIHRoaXMuc2V0U3RhdGUoe25vdGlmaWNhdGlvbnM6IFsuLi50aGlzLnMubm90aWZpY2F0aW9uc119KVxuXG4gICAgZGVidWdMb2coXCJGbGFzaE5vdGlmaWNhdGlvbnM6IGFuaW1hdGlvbnMgYmVnaW5cIiwge1xuICAgICAgaWQ6IG5vdGlmaWNhdGlvbi5jb3VudCxcbiAgICAgIGFuaW1hdGlvbnM6IFtcIm9wYWNpdHlcIiwgXCJoZWlnaHRcIiwgXCJtYXJnaW5Cb3R0b21cIl0sXG4gICAgICByZWFzb25cbiAgICB9KVxuICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBmYWRlIGFuaW1hdGlvbiBiZWdpblwiLCB7aWQ6IG5vdGlmaWNhdGlvbi5jb3VudCwgcmVhc29ufSlcblxuICAgIGNvbnN0IGRpc21pc3NEdXJhdGlvbiA9IHJlYXNvbiA9PT0gXCJwcmVzc1wiID8gODAgOiAyMDBcblxuICAgIEFuaW1hdGVkLnBhcmFsbGVsKFtcbiAgICAgIEFuaW1hdGVkLnRpbWluZyhub3RpZmljYXRpb24ub3BhY2l0eSwge3RvVmFsdWU6IDAsIGR1cmF0aW9uOiBkaXNtaXNzRHVyYXRpb24sIHVzZU5hdGl2ZURyaXZlcjogZmFsc2V9KSxcbiAgICAgIEFuaW1hdGVkLnRpbWluZyhub3RpZmljYXRpb24uaGVpZ2h0LCB7dG9WYWx1ZTogMCwgZHVyYXRpb246IGRpc21pc3NEdXJhdGlvbiwgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZX0pLFxuICAgICAgQW5pbWF0ZWQudGltaW5nKG5vdGlmaWNhdGlvbi5tYXJnaW5Cb3R0b20sIHt0b1ZhbHVlOiAwLCBkdXJhdGlvbjogZGlzbWlzc0R1cmF0aW9uLCB1c2VOYXRpdmVEcml2ZXI6IGZhbHNlfSlcbiAgICBdKS5zdGFydCgoKSA9PiB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogYW5pbWF0aW9ucyBlbmRcIiwge1xuICAgICAgICBpZDogbm90aWZpY2F0aW9uLmNvdW50LFxuICAgICAgICBhbmltYXRpb25zOiBbXCJvcGFjaXR5XCIsIFwiaGVpZ2h0XCIsIFwibWFyZ2luQm90dG9tXCJdLFxuICAgICAgICByZWFzb25cbiAgICAgIH0pXG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogZmFkZSBhbmltYXRpb24gZW5kXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50LCByZWFzb259KVxuXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgbm90aWZpY2F0aW9uczogdGhpcy5zLm5vdGlmaWNhdGlvbnMuZmlsdGVyKFxuICAgICAgICAgIC8qKiBAcGFyYW0ge1N0b3JlZE5vdGlmaWNhdGlvblR5cGV9IGl0ZW0gKi9cbiAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5jb3VudCAhPSBub3RpZmljYXRpb24uY291bnRcbiAgICAgICAgKVxuICAgICAgfSlcblxuICAgICAgZGVidWdMb2coXCJGbGFzaE5vdGlmaWNhdGlvbnM6IG5vdGlmaWNhdGlvbiByZW1vdmVkXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50LCByZWFzb259KVxuICAgIH0pXG4gIH1cbn0pKVxuIl19
303
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbImNvbnRhaW5lci9pbmRleC5qc3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQ25DLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQTtBQUNsQyxpREFBaUQ7QUFDakQsT0FBTyxjQUFjLE1BQU0sa0JBQWtCLENBQUE7QUFDN0MsT0FBTyxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUNyRCxPQUFPLEVBQUMsY0FBYyxFQUFFLGNBQWMsRUFBQyxNQUFNLDRDQUE0QyxDQUFBO0FBQ3pGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUNwRCxPQUFPLGVBQWUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNsRCxPQUFPLFdBQVcsTUFBTSxrQ0FBa0MsQ0FBQTtBQUMxRCxPQUFPLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUUzQyxPQUFPLFFBQVEsTUFBTSxhQUFhLENBQUE7QUFDbEMsT0FBTyxNQUFNLE1BQU0sY0FBYyxDQUFBO0FBQ2pDLE9BQU8saUJBQWlCLE1BQU0sZ0JBQWdCLENBQUE7QUFFOUM7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUg7Ozs7OztHQU1HO0FBRUg7OztHQUdHO0FBRUg7Ozs7R0FJRztBQUVILGVBQWUsSUFBSSxDQUFDLGNBQWM7QUFDaEM7O0dBRUc7QUFDSCxNQUFNLDJCQUE0QixTQUFRLGNBQWM7SUFDeEQsTUFBTSxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUM7UUFDaEMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNO0tBQ3pCLENBQUMsQ0FBQTtJQUVGLEtBQUssR0FBRztRQUNOLEtBQUssRUFBRSxDQUFDO1FBQ1IsdUNBQXVD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QyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtkaWcsIGRpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG4vLyBAdHMtZXhwZWN0LWVycm9yIFBhY2thZ2Ugc2hpcHMgbm8gLmQudHMgZmlsZXMuXG5pbXBvcnQgcHJvcFR5cGVzRXhhY3QgZnJvbSBcInByb3AtdHlwZXMtZXhhY3RcIlxuaW1wb3J0IFJlYWN0LCB7bWVtbywgdXNlRWZmZWN0LCB1c2VNZW1vfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudCwgU2hhcGVDb21wb25lbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9zaGFwZS1jb21wb25lbnQuanNcIlxuaW1wb3J0IHt1c2VCcmVha3BvaW50fSBmcm9tIFwicmVzcG9uc2l2ZS1icmVha3BvaW50c1wiXG5pbXBvcnQgdXNlRXZlbnRFbWl0dGVyIGZyb20gXCJ5YS11c2UtZXZlbnQtZW1pdHRlclwiXG5pbXBvcnQgdXNlRW52U2Vuc2UgZnJvbSBcImVudi1zZW5zZS9idWlsZC91c2UtZW52LXNlbnNlLmpzXCJcbmltcG9ydCB7QW5pbWF0ZWQsIFZpZXd9IGZyb20gXCJyZWFjdC1uYXRpdmVcIlxuXG5pbXBvcnQgZGVidWdMb2cgZnJvbSBcIi4uL2RlYnVnLmpzXCJcbmltcG9ydCBldmVudHMgZnJvbSBcIi4uL2V2ZW50cy5qc1wiXG5pbXBvcnQgRmxhc2hOb3RpZmljYXRpb24gZnJvbSBcIi4vbm90aWZpY2F0aW9uXCJcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBOb3RpZmljYXRpb25PYmplY3RUeXBlXG4gKiBAcHJvcGVydHkge251bWJlcn0gY291bnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBpZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0aXRsZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFN0b3JlZE5vdGlmaWNhdGlvblR5cGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb3VudFxuICogQHByb3BlcnR5IHtzdHJpbmcgfCB1bmRlZmluZWR9IGlkXG4gKiBAcHJvcGVydHkge2ltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5BbmltYXRlZC5WYWx1ZX0gaGVpZ2h0XG4gKiBAcHJvcGVydHkge2ltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5BbmltYXRlZC5WYWx1ZX0gbWFyZ2luQm90dG9tXG4gKiBAcHJvcGVydHkge251bWJlciB8IHVuZGVmaW5lZH0gbWVhc3VyZWRIZWlnaHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXNzYWdlXG4gKiBAcHJvcGVydHkge2ltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5BbmltYXRlZC5WYWx1ZX0gb3BhY2l0eVxuICogQHByb3BlcnR5IHtudW1iZXIgfCB1bmRlZmluZWR9IHByb2dyZXNzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlbW92aW5nXG4gKiBAcHJvcGVydHkge1JldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkfSB0aW1lb3V0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGl0bGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBY3Rpdml0eU5vdGlmaWNhdGlvbkRldGFpbFR5cGVcbiAqIEBwcm9wZXJ0eSB7XCJ1cGRhdGVcIiB8IFwic3VjY2VlZFwiIHwgXCJmYWlsXCIgfCBcImRvbmVcIn0gYWN0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nPX0gbWVzc2FnZVxuICogQHByb3BlcnR5IHtudW1iZXI9fSBwcm9ncmVzc1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRmxhc2hOb3RpZmljYXRpb25zQ29udGFpbmVyUHJvcHNcbiAqIEBwcm9wZXJ0eSB7e3RvcD86IG51bWJlciwgcmlnaHQ/OiBudW1iZXIsIGxlZnQ/OiBudW1iZXJ9PX0gaW5zZXRzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBGbGFzaE5vdGlmaWNhdGlvbnNDb250YWluZXJTdGF0ZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvdW50XG4gKiBAcHJvcGVydHkge1N0b3JlZE5vdGlmaWNhdGlvblR5cGVbXX0gbm90aWZpY2F0aW9uc1xuICovXG5cbmV4cG9ydCBkZWZhdWx0IG1lbW8oc2hhcGVDb21wb25lbnQoXG4gIC8qKlxuICAgKiBAYXVnbWVudHMge1NoYXBlQ29tcG9uZW50PEZsYXNoTm90aWZpY2F0aW9uc0NvbnRhaW5lclByb3BzLCBGbGFzaE5vdGlmaWNhdGlvbnNDb250YWluZXJTdGF0ZT59XG4gICAqL1xuICBjbGFzcyBGbGFzaE5vdGlmaWNhdGlvbnNDb250YWluZXIgZXh0ZW5kcyBTaGFwZUNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSBwcm9wVHlwZXNFeGFjdCh7XG4gICAgaW5zZXRzOiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pXG5cbiAgc3RhdGUgPSB7XG4gICAgY291bnQ6IDAsXG4gICAgLyoqIEB0eXBlIHtTdG9yZWROb3RpZmljYXRpb25UeXBlW119ICovXG4gICAgbm90aWZpY2F0aW9uczogW11cbiAgfVxuXG4gIC8qKiBAdHlwZSB7bnVtYmVyW119ICovXG4gIHRpbWVvdXRzID0gW11cbiAgbm90aWZpY2F0aW9uU3BhY2luZyA9IDE1XG5cbiAgc2V0dXAoKSB7XG4gICAgdXNlRXZlbnRFbWl0dGVyKGV2ZW50cywgXCJwdXNoTm90aWZpY2F0aW9uXCIsIHRoaXMub25QdXNoTm90aWZpY2F0aW9uRXZlbnQpXG4gICAgdXNlRXZlbnRFbWl0dGVyKGV2ZW50cywgXCJhY3Rpdml0eU5vdGlmaWNhdGlvblwiLCB0aGlzLm9uQWN0aXZpdHlOb3RpZmljYXRpb25FdmVudClcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCB0aW1lb3V0IG9mIHRoaXMudGltZW91dHMpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIFtdKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtub3RpZmljYXRpb25zfSA9IHRoaXMuc1xuICAgIGNvbnN0IGluc2V0cyA9IHRoaXMucHJvcHMuaW5zZXRzIHx8IHt9XG5cbiAgICBjb25zdCB7c21Eb3duLCBtZFVwfSA9IHVzZUJyZWFrcG9pbnQoKVxuICAgIGNvbnN0IHtpc05hdGl2ZX0gPSB1c2VFbnZTZW5zZSgpXG5cbiAgICBjb25zdCB2aWV3U3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGxldCB0b3AgPSAyMFxuICAgICAgbGV0IHJpZ2h0ID0gMFxuICAgICAgbGV0IGxlZnQgPSB1bmRlZmluZWRcblxuICAgICAgaWYgKGluc2V0cy50b3ApIHRvcCArPSBpbnNldHMudG9wXG4gICAgICBpZiAoaW5zZXRzLnJpZ2h0KSByaWdodCArPSBpbnNldHMucmlnaHRcblxuICAgICAgaWYgKHNtRG93bikge1xuICAgICAgICBsZWZ0ID0gMjBcblxuICAgICAgICBpZiAoaW5zZXRzLmxlZnQpIGxlZnQgKz0gaW5zZXRzLmxlZnRcblxuICAgICAgICByaWdodCArPSAyMFxuICAgICAgfSBlbHNlIGlmIChtZFVwKSB7XG4gICAgICAgIHJpZ2h0ICs9IDIwXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0eWxlID0ge1xuICAgICAgICAvLyBcImJveC1ub25lXCIgc28gdGhlIGZpeGVkLCBoaWdoLXpJbmRleCBjb250YWluZXIgbmV2ZXIgaW50ZXJjZXB0cyBwb2ludGVyIGV2ZW50cyBvbiBpdHMgb3duXG4gICAgICAgIC8vIGJvdW5kczogZW1wdHkgZ2FwcyBwYXNzIHRocm91Z2gsIGFuZCBhIGZhZGluZyBub3RpZmljYXRpb24gKHdob3NlIHdyYXBwZXIgaXMgc2V0IHRvXG4gICAgICAgIC8vIHBvaW50ZXJFdmVudHMgXCJub25lXCIgd2hpbGUgcmVtb3ZpbmcpIHBhc3NlcyB0aHJvdWdoIHRvbywgd2hpbGUgYSBsaXZlIG5vdGlmaWNhdGlvbiBzdGlsbFxuICAgICAgICAvLyByZWNlaXZlcyBpdHMgb3duIHByZXNzZXMuIFdpdGhvdXQgdGhpcyB0aGUgY29udGFpbmVyIGl0c2VsZiB3b3VsZCBzd2FsbG93IGNsaWNrcy9maWxsc1xuICAgICAgICAvLyBhaW1lZCBhdCB0aGUgZm9ybSBiZW5lYXRoIGl0IGR1cmluZyBhIG5vdGlmaWNhdGlvbidzIGZhZGUtb3V0LlxuICAgICAgICBwb2ludGVyRXZlbnRzOiBcImJveC1ub25lXCIsXG4gICAgICAgIHBvc2l0aW9uOiBpc05hdGl2ZSA/IFwiYWJzb2x1dGVcIiA6IFwiZml4ZWRcIixcbiAgICAgICAgdG9wLFxuICAgICAgICByaWdodCxcbiAgICAgICAgbGVmdCxcbiAgICAgICAgekluZGV4OiA5OTk5OVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3R5bGVcbiAgICB9LCBbaXNOYXRpdmUsIHNtRG93biwgbWRVcCwgaW5zZXRzLnRvcCwgaW5zZXRzLnJpZ2h0LCBpbnNldHMubGVmdF0pXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBkYXRhU2V0PXt0aGlzLnJvb3RWaWV3RGF0YVNldCB8fD0ge2NvbXBvbmVudDogXCJmbGFzaC1ub3RpZmljYXRpb25zLWNvbnRhaW5lclwifX1cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBSZWFjdCBOYXRpdmUgdHlwZXMgZG8gbm90IGluY2x1ZGUgdGhlIHdlYi1vbmx5IFwiZml4ZWRcIiBwb3NpdGlvbi5cbiAgICAgICAgc3R5bGU9e3ZpZXdTdHlsZX1cbiAgICAgICAgdGVzdElEPVwiZmxhc2gtbm90aWZpY2FpdG9ucy9jb250YWluZXJcIlxuICAgICAgPlxuICAgICAgICB7bm90aWZpY2F0aW9ucy5tYXAoXG4gICAgICAgICAgLyoqIEBwYXJhbSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZX0gbm90aWZpY2F0aW9uICovXG4gICAgICAgICAgKG5vdGlmaWNhdGlvbikgPT5cbiAgICAgICAgICA8Rmxhc2hOb3RpZmljYXRpb25cbiAgICAgICAgICAgIGNvdW50PXtub3RpZmljYXRpb24uY291bnR9XG4gICAgICAgICAgICBrZXk9e2Bub3RpZmljYXRpb24tJHtub3RpZmljYXRpb24uY291bnR9YH1cbiAgICAgICAgICAgIG1lc3NhZ2U9e25vdGlmaWNhdGlvbi5tZXNzYWdlfVxuICAgICAgICAgICAgbm90aWZpY2F0aW9uPXtub3RpZmljYXRpb259XG4gICAgICAgICAgICBvbk1lYXN1cmVkPXt0aGlzLm9uTm90aWZpY2F0aW9uTWVhc3VyZWR9XG4gICAgICAgICAgICBvblJlbW92ZWRDbGlja2VkPXt0aGlzLm9uUmVtb3ZlZENsaWNrZWR9XG4gICAgICAgICAgICBwcm9ncmVzcz17bm90aWZpY2F0aW9uLnByb2dyZXNzfVxuICAgICAgICAgICAgcmVtb3Zpbmc9e25vdGlmaWNhdGlvbi5yZW1vdmluZ31cbiAgICAgICAgICAgIHRpdGxlPXtub3RpZmljYXRpb24udGl0bGV9XG4gICAgICAgICAgICB0eXBlPXtub3RpZmljYXRpb24udHlwZX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gey4uLnVua25vd259IGFyZ3NcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvblB1c2hOb3RpZmljYXRpb25FdmVudCA9ICguLi5hcmdzKSA9PiB7XG4gICAgdGhpcy5vblB1c2hOb3RpZmljYXRpb24oLyoqIEB0eXBlIHtOb3RpZmljYXRpb25PYmplY3RUeXBlfSAqLyAoYXJnc1swXSkpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb3RpZmljYXRpb25PYmplY3RUeXBlfSBkZXRhaWxcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvblB1c2hOb3RpZmljYXRpb24gPSAoZGV0YWlsKSA9PiB7XG4gICAgY29uc3QgdHlwZSA9IGRpZ2coZGV0YWlsLCBcInR5cGVcIilcblxuICAgIC8vIEFuIGFjdGl2aXR5IG5vdGlmaWNhdGlvbiB3aXRob3V0IGFuIGlkIGhhcyBubyBoYW5kbGUgdG8gcmVzb2x2ZSBpdCBhbmRcbiAgICAvLyB3b3VsZCBzdGF5IG9uIHNjcmVlbiBmb3JldmVyLCBzbyBpdCBpcyBkcm9wcGVkLlxuICAgIGlmICh0eXBlID09IFwiYWN0aXZpdHlcIiAmJiBkZXRhaWwuaWQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogYWN0aXZpdHkgbm90aWZpY2F0aW9uIHdpdGhvdXQgaWQgaWdub3JlZFwiKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY291bnQgPSB0aGlzLnMuY291bnQgKyAxXG4gICAgLy8gQWN0aXZpdHkgbm90aWZpY2F0aW9ucyBzdGF5IG9uIHNjcmVlbiB1bnRpbCB0aGVpciBoYW5kbGUgcmVzb2x2ZXMgdGhlbS5cbiAgICBjb25zdCB0aW1lb3V0ID0gdHlwZSA9PSBcImFjdGl2aXR5XCIgPyB1bmRlZmluZWQgOiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBub3RpZmljYXRpb24gdGltZW91dFwiLCB7aWQ6IGNvdW50fSlcbiAgICAgIHRoaXMuZGlzbWlzc05vdGlmaWNhdGlvbkJ5Q291bnQoY291bnQsIFwidGltZW91dFwiKVxuICAgIH0sIDQwMDApXG5cbiAgICBpZiAodGltZW91dCkge1xuICAgICAgdGhpcy50aW1lb3V0cy5wdXNoKHRpbWVvdXQpXG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtTdG9yZWROb3RpZmljYXRpb25UeXBlfSAqL1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHtcbiAgICAgIGNvdW50LFxuICAgICAgaGVpZ2h0OiBuZXcgQW5pbWF0ZWQuVmFsdWUoMCksXG4gICAgICBpZDogZGlnKGRldGFpbCwgXCJpZFwiKSxcbiAgICAgIG1hcmdpbkJvdHRvbTogbmV3IEFuaW1hdGVkLlZhbHVlKHRoaXMubm90aWZpY2F0aW9uU3BhY2luZyksXG4gICAgICBtZWFzdXJlZEhlaWdodDogdW5kZWZpbmVkLFxuICAgICAgbWVzc2FnZTogZGlnZyhkZXRhaWwsIFwibWVzc2FnZVwiKSxcbiAgICAgIG9wYWNpdHk6IG5ldyBBbmltYXRlZC5WYWx1ZSgxKSxcbiAgICAgIHByb2dyZXNzOiB1bmRlZmluZWQsXG4gICAgICByZW1vdmluZzogZmFsc2UsXG4gICAgICB0aW1lb3V0LFxuICAgICAgdGl0bGU6IGRpZ2coZGV0YWlsLCBcInRpdGxlXCIpLFxuICAgICAgdHlwZVxuICAgIH1cblxuICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBub3RpZmljYXRpb24gYWRkZWRcIiwge1xuICAgICAgaWQ6IGNvdW50LFxuICAgICAgdGl0bGU6IG5vdGlmaWNhdGlvbi50aXRsZSxcbiAgICAgIHR5cGU6IG5vdGlmaWNhdGlvbi50eXBlXG4gICAgfSlcblxuICAgIHRoaXMuc2V0U3RhdGUoe2NvdW50LCBub3RpZmljYXRpb25zOiB0aGlzLnMubm90aWZpY2F0aW9ucy5jb25jYXQoW25vdGlmaWNhdGlvbl0pfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N0b3JlZE5vdGlmaWNhdGlvblR5cGV9IG5vdGlmaWNhdGlvblxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uUmVtb3ZlZENsaWNrZWQgPSAobm90aWZpY2F0aW9uKSA9PiB7XG4gICAgZGVidWdMb2coXCJGbGFzaE5vdGlmaWNhdGlvbnM6IG5vdGlmaWNhdGlvbiBwcmVzc2VkXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50fSlcbiAgICB0aGlzLmRpc21pc3NOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBcInByZXNzXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsuLi51bmtub3dufSBhcmdzXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25BY3Rpdml0eU5vdGlmaWNhdGlvbkV2ZW50ID0gKC4uLmFyZ3MpID0+IHtcbiAgICB0aGlzLm9uQWN0aXZpdHlOb3RpZmljYXRpb24oLyoqIEB0eXBlIHtBY3Rpdml0eU5vdGlmaWNhdGlvbkRldGFpbFR5cGV9ICovIChhcmdzWzBdKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0FjdGl2aXR5Tm90aWZpY2F0aW9uRGV0YWlsVHlwZX0gZGV0YWlsXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25BY3Rpdml0eU5vdGlmaWNhdGlvbiA9IChkZXRhaWwpID0+IHtcbiAgICBjb25zdCBub3RpZmljYXRpb24gPSAvKiogQHR5cGUge1N0b3JlZE5vdGlmaWNhdGlvblR5cGUgfCB1bmRlZmluZWR9ICovICh0aGlzLnMubm90aWZpY2F0aW9ucy5maW5kKFxuICAgICAgLyoqIEBwYXJhbSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZX0gaXRlbSAqL1xuICAgICAgKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGRldGFpbC5pZFxuICAgICkpXG4gICAgaWYgKCFub3RpZmljYXRpb24gfHwgbm90aWZpY2F0aW9uLnJlbW92aW5nKSB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogYWN0aXZpdHkgbm90aWZpY2F0aW9uIG5vdCBmb3VuZFwiLCB7aWQ6IGRldGFpbC5pZCwgYWN0aW9uOiBkZXRhaWwuYWN0aW9ufSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChkZXRhaWwuYWN0aW9uID09IFwidXBkYXRlXCIpIHtcbiAgICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBhY3Rpdml0eSBwcm9ncmVzcyB1cGRhdGVkXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50LCBwcm9ncmVzczogZGV0YWlsLnByb2dyZXNzfSlcbiAgICAgIG5vdGlmaWNhdGlvbi5wcm9ncmVzcyA9IGRldGFpbC5wcm9ncmVzc1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7bm90aWZpY2F0aW9uczogWy4uLnRoaXMucy5ub3RpZmljYXRpb25zXX0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoZGV0YWlsLmFjdGlvbiA9PSBcInN1Y2NlZWRcIiB8fCBkZXRhaWwuYWN0aW9uID09IFwiZmFpbFwiKSB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogYWN0aXZpdHkgcmVzb2x2ZWRcIiwge2lkOiBub3RpZmljYXRpb24uY291bnQsIGFjdGlvbjogZGV0YWlsLmFjdGlvbn0pXG4gICAgICAvLyBNYXAgdGhlIGFjdGlvbiB2ZXJicyBvbnRvIHRoZSBjYW5vbmljYWwgdHlwZSBuYW1lcyBzbyB0aGUgY2FyZFxuICAgICAgLy8gcmVuZGVycyB0aGUgZXhpc3Rpbmcgc3VjY2Vzcy9lcnJvciB0b25lcyBkdXJpbmcgdGhlIGRpc21pc3MgZmxhc2guXG4gICAgICBub3RpZmljYXRpb24udHlwZSA9IGRldGFpbC5hY3Rpb24gPT0gXCJzdWNjZWVkXCIgPyBcInN1Y2Nlc3NcIiA6IFwiZXJyb3JcIlxuICAgICAgaWYgKGRldGFpbC5tZXNzYWdlKSB7XG4gICAgICAgIG5vdGlmaWNhdGlvbi5tZXNzYWdlID0gZGV0YWlsLm1lc3NhZ2VcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoe25vdGlmaWNhdGlvbnM6IFsuLi50aGlzLnMubm90aWZpY2F0aW9uc119KVxuICAgICAgdGhpcy5kaXNtaXNzTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgZGV0YWlsLmFjdGlvbilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBhY3Rpdml0eSBkaXNtaXNzZWRcIiwge2lkOiBub3RpZmljYXRpb24uY291bnQsIGFjdGlvbjogZGV0YWlsLmFjdGlvbn0pXG4gICAgdGhpcy5kaXNtaXNzTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgXCJkb25lXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtTdG9yZWROb3RpZmljYXRpb25UeXBlfSBub3RpZmljYXRpb25cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1lYXN1cmVkSGVpZ2h0XG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25Ob3RpZmljYXRpb25NZWFzdXJlZCA9IChub3RpZmljYXRpb24sIG1lYXN1cmVkSGVpZ2h0KSA9PiB7XG4gICAgaWYgKG5vdGlmaWNhdGlvbi5tZWFzdXJlZEhlaWdodCkgcmV0dXJuXG5cbiAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogbm90aWZpY2F0aW9uIG1lYXN1cmVkXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50LCBoZWlnaHQ6IG1lYXN1cmVkSGVpZ2h0fSlcblxuICAgIG5vdGlmaWNhdGlvbi5tZWFzdXJlZEhlaWdodCA9IG1lYXN1cmVkSGVpZ2h0XG4gICAgbm90aWZpY2F0aW9uLmhlaWdodC5zZXRWYWx1ZShtZWFzdXJlZEhlaWdodClcbiAgICB0aGlzLnNldFN0YXRlKHtub3RpZmljYXRpb25zOiBbLi4udGhpcy5zLm5vdGlmaWNhdGlvbnNdfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY291bnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAqL1xuICBkaXNtaXNzTm90aWZpY2F0aW9uQnlDb3VudCA9IChjb3VudCwgcmVhc29uID0gXCJ1bmtub3duXCIpID0+IHtcbiAgICBjb25zdCBub3RpZmljYXRpb24gPSAvKiogQHR5cGUge1N0b3JlZE5vdGlmaWNhdGlvblR5cGUgfCB1bmRlZmluZWR9ICovICh0aGlzLnMubm90aWZpY2F0aW9ucy5maW5kKFxuICAgICAgLyoqIEBwYXJhbSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZX0gaXRlbSAqL1xuICAgICAgKGl0ZW0pID0+IGl0ZW0uY291bnQgPT0gY291bnRcbiAgICApKVxuICAgIGlmICghbm90aWZpY2F0aW9uKSB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogbm90aWZpY2F0aW9uIG5vdCBmb3VuZFwiLCB7aWQ6IGNvdW50LCByZWFzb259KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5kaXNtaXNzTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgcmVhc29uKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZX0gbm90aWZpY2F0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGRpc21pc3NOb3RpZmljYXRpb24gPSAobm90aWZpY2F0aW9uLCByZWFzb24gPSBcInVua25vd25cIikgPT4ge1xuICAgIGlmIChub3RpZmljYXRpb24ucmVtb3ZpbmcpIHtcbiAgICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBub3RpZmljYXRpb24gYWxyZWFkeSByZW1vdmluZ1wiLCB7aWQ6IG5vdGlmaWNhdGlvbi5jb3VudCwgcmVhc29ufSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIG5vdGlmaWNhdGlvbi5yZW1vdmluZyA9IHRydWVcbiAgICBpZiAobm90aWZpY2F0aW9uLnRpbWVvdXQpIGNsZWFyVGltZW91dChub3RpZmljYXRpb24udGltZW91dClcblxuICAgIGlmICghbm90aWZpY2F0aW9uLm1lYXN1cmVkSGVpZ2h0KSB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogbm90aWZpY2F0aW9uIG1pc3NpbmcgbWVhc3VyZWQgaGVpZ2h0XCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50fSlcbiAgICAgIG5vdGlmaWNhdGlvbi5tZWFzdXJlZEhlaWdodCA9IDFcbiAgICAgIG5vdGlmaWNhdGlvbi5oZWlnaHQuc2V0VmFsdWUoMSlcbiAgICB9XG5cbiAgICAvLyBSZS1yZW5kZXIgaW1tZWRpYXRlbHkgc28gdGhlIGNsb3Npbmcgbm90aWZpY2F0aW9uIGRyb3BzIHBvaW50ZXIgZXZlbnRzIChwb2ludGVyRXZlbnRzPVwibm9uZVwiKVxuICAgIC8vIHRoZSBpbnN0YW50IGl0IHN0YXJ0cyBmYWRpbmcgb3V0LiBPdGhlcndpc2UgdGhlIGZhZGluZyBvdmVybGF5IGtlZXBzIGludGVyY2VwdGluZyB0aGUgbmV4dFxuICAgIC8vIGNsaWNrL2ZpbGwgZm9yIHRoZSB3aG9sZSBmYWRlIGR1cmF0aW9uIGV2ZW4gdGhvdWdoIGl0IGlzIG9uIGl0cyB3YXkgb3V0LlxuICAgIHRoaXMuc2V0U3RhdGUoe25vdGlmaWNhdGlvbnM6IFsuLi50aGlzLnMubm90aWZpY2F0aW9uc119KVxuXG4gICAgZGVidWdMb2coXCJGbGFzaE5vdGlmaWNhdGlvbnM6IGFuaW1hdGlvbnMgYmVnaW5cIiwge1xuICAgICAgaWQ6IG5vdGlmaWNhdGlvbi5jb3VudCxcbiAgICAgIGFuaW1hdGlvbnM6IFtcIm9wYWNpdHlcIiwgXCJoZWlnaHRcIiwgXCJtYXJnaW5Cb3R0b21cIl0sXG4gICAgICByZWFzb25cbiAgICB9KVxuICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBmYWRlIGFuaW1hdGlvbiBiZWdpblwiLCB7aWQ6IG5vdGlmaWNhdGlvbi5jb3VudCwgcmVhc29ufSlcblxuICAgIGNvbnN0IGRpc21pc3NEdXJhdGlvbiA9IHJlYXNvbiA9PT0gXCJwcmVzc1wiID8gODAgOiAyMDBcblxuICAgIEFuaW1hdGVkLnBhcmFsbGVsKFtcbiAgICAgIEFuaW1hdGVkLnRpbWluZyhub3RpZmljYXRpb24ub3BhY2l0eSwge3RvVmFsdWU6IDAsIGR1cmF0aW9uOiBkaXNtaXNzRHVyYXRpb24sIHVzZU5hdGl2ZURyaXZlcjogZmFsc2V9KSxcbiAgICAgIEFuaW1hdGVkLnRpbWluZyhub3RpZmljYXRpb24uaGVpZ2h0LCB7dG9WYWx1ZTogMCwgZHVyYXRpb246IGRpc21pc3NEdXJhdGlvbiwgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZX0pLFxuICAgICAgQW5pbWF0ZWQudGltaW5nKG5vdGlmaWNhdGlvbi5tYXJnaW5Cb3R0b20sIHt0b1ZhbHVlOiAwLCBkdXJhdGlvbjogZGlzbWlzc0R1cmF0aW9uLCB1c2VOYXRpdmVEcml2ZXI6IGZhbHNlfSlcbiAgICBdKS5zdGFydCgoKSA9PiB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogYW5pbWF0aW9ucyBlbmRcIiwge1xuICAgICAgICBpZDogbm90aWZpY2F0aW9uLmNvdW50LFxuICAgICAgICBhbmltYXRpb25zOiBbXCJvcGFjaXR5XCIsIFwiaGVpZ2h0XCIsIFwibWFyZ2luQm90dG9tXCJdLFxuICAgICAgICByZWFzb25cbiAgICAgIH0pXG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogZmFkZSBhbmltYXRpb24gZW5kXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50LCByZWFzb259KVxuXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgbm90aWZpY2F0aW9uczogdGhpcy5zLm5vdGlmaWNhdGlvbnMuZmlsdGVyKFxuICAgICAgICAgIC8qKiBAcGFyYW0ge1N0b3JlZE5vdGlmaWNhdGlvblR5cGV9IGl0ZW0gKi9cbiAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5jb3VudCAhPSBub3RpZmljYXRpb24uY291bnRcbiAgICAgICAgKVxuICAgICAgfSlcblxuICAgICAgZGVidWdMb2coXCJGbGFzaE5vdGlmaWNhdGlvbnM6IG5vdGlmaWNhdGlvbiByZW1vdmVkXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50LCByZWFzb259KVxuICAgIH0pXG4gIH1cbn0pKVxuIl19
@@ -2,13 +2,15 @@ declare const _default: React.NamedExoticComponent<FlashNotificationsNotificatio
2
2
  export default _default;
3
3
  export type StoredNotificationType = {
4
4
  count: number;
5
+ id: string | undefined;
5
6
  height: import("react-native").Animated.Value;
6
7
  marginBottom: import("react-native").Animated.Value;
7
8
  measuredHeight: number | undefined;
8
9
  message: string;
9
10
  opacity: import("react-native").Animated.Value;
11
+ progress: number | undefined;
10
12
  removing: boolean;
11
- timeout: ReturnType<typeof setTimeout>;
13
+ timeout: ReturnType<typeof setTimeout> | undefined;
12
14
  title: string;
13
15
  type: string;
14
16
  };
@@ -19,6 +21,7 @@ export type FlashNotificationsNotificationProps = {
19
21
  notification: StoredNotificationType;
20
22
  onMeasured: (notification: StoredNotificationType, measuredHeight: number) => void;
21
23
  onRemovedClicked: (notification: StoredNotificationType) => void;
24
+ progress?: number | undefined;
22
25
  removing: boolean;
23
26
  title: string;
24
27
  type: string;
@@ -1 +1 @@
1
- {"version":3,"file":"notification.d.ts","sourceRoot":"/src/","sources":["container/notification.jsx"],"names":[],"mappings":";;;WAYc,MAAM;YACN,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;kBACrC,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;oBACrC,MAAM,GAAG,SAAS;aAClB,MAAM;aACN,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;cACrC,OAAO;aACP,UAAU,CAAC,OAAO,UAAU,CAAC;WAC7B,MAAM;UACN,MAAM;;;gBAKN,MAAM,YAAC;WACP,MAAM;aACN,MAAM;kBACN,sBAAsB;gBACtB,CAAC,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI;sBACtE,CAAC,YAAY,EAAE,sBAAsB,KAAK,IAAI;cAC9C,OAAO;WACP,MAAM;UACN,MAAM;;kBA7Be,OAAO"}
1
+ {"version":3,"file":"notification.d.ts","sourceRoot":"/src/","sources":["container/notification.jsx"],"names":[],"mappings":";;;WAYc,MAAM;QACN,MAAM,GAAG,SAAS;YAClB,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;kBACrC,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;oBACrC,MAAM,GAAG,SAAS;aAClB,MAAM;aACN,OAAO,cAAc,EAAE,QAAQ,CAAC,KAAK;cACrC,MAAM,GAAG,SAAS;cAClB,OAAO;aACP,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,SAAS;WACzC,MAAM;UACN,MAAM;;;gBAKN,MAAM,YAAC;WACP,MAAM;aACN,MAAM;kBACN,sBAAsB;gBACtB,CAAC,YAAY,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI;sBACtE,CAAC,YAAY,EAAE,sBAAsB,KAAK,IAAI;eAC9C,MAAM,YAAC;cACP,OAAO;WACP,MAAM;UACN,MAAM;;kBAhCe,OAAO"}
@@ -9,13 +9,15 @@ import { useBreakpoint } from "responsive-breakpoints";
9
9
  /**
10
10
  * @typedef {object} StoredNotificationType
11
11
  * @property {number} count
12
+ * @property {string | undefined} id
12
13
  * @property {import("react-native").Animated.Value} height
13
14
  * @property {import("react-native").Animated.Value} marginBottom
14
15
  * @property {number | undefined} measuredHeight
15
16
  * @property {string} message
16
17
  * @property {import("react-native").Animated.Value} opacity
18
+ * @property {number | undefined} progress
17
19
  * @property {boolean} removing
18
- * @property {ReturnType<typeof setTimeout>} timeout
20
+ * @property {ReturnType<typeof setTimeout> | undefined} timeout
19
21
  * @property {string} title
20
22
  * @property {string} type
21
23
  */
@@ -27,6 +29,7 @@ import { useBreakpoint } from "responsive-breakpoints";
27
29
  * @property {StoredNotificationType} notification
28
30
  * @property {(notification: StoredNotificationType, measuredHeight: number) => void} onMeasured
29
31
  * @property {(notification: StoredNotificationType) => void} onRemovedClicked
32
+ * @property {number=} progress
30
33
  * @property {boolean} removing
31
34
  * @property {string} title
32
35
  * @property {string} type
@@ -37,6 +40,8 @@ const dataSets = {};
37
40
  const viewStyles = {};
38
41
  /** @type {Record<string, import("react-native").TextStyle>} */
39
42
  const textStyles = {};
43
+ /** @type {import("react-native").ViewStyle} */
44
+ const barFillStyle = { backgroundColor: "#fff", borderRadius: 2, height: 4, width: "30%" };
40
45
  /**
41
46
  * @augments {ShapeComponent<FlashNotificationsNotificationProps>}
42
47
  */
@@ -48,12 +53,22 @@ class FlashNotificationsNotification extends ShapeComponent {
48
53
  notification: PropTypes.object.isRequired,
49
54
  onMeasured: PropTypes.func.isRequired,
50
55
  onRemovedClicked: PropTypes.func.isRequired,
56
+ progress: PropTypes.number,
51
57
  removing: PropTypes.bool.isRequired,
52
58
  title: PropTypes.string.isRequired,
53
59
  type: PropTypes.string.isRequired
54
60
  });
61
+ /** @type {import("react-native").Animated.Value} */
62
+ barSweep = new Animated.Value(0);
63
+ /** @type {import("react-native").Animated.CompositeAnimation | undefined} */
64
+ barSweepAnimation = undefined;
65
+ /** @type {number} */
66
+ barTrackWidth = 0;
67
+ componentWillUnmount() {
68
+ this.barSweepAnimation?.stop();
69
+ }
55
70
  render() {
56
- const { count, message, removing, title, type } = this.p;
71
+ const { count, message, progress, title, type } = this.p;
57
72
  const { className } = this.props;
58
73
  const breakpoint = useBreakpoint();
59
74
  const pressableDataSet = useMemo(() => ({
@@ -61,7 +76,7 @@ class FlashNotificationsNotification extends ShapeComponent {
61
76
  role: "dialog",
62
77
  type
63
78
  }), [className, type]);
64
- return (React.createElement(Animated.View, { pointerEvents: removing ? "none" : "auto", style: this.tt.wrapperStyle },
79
+ return (React.createElement(Animated.View, { style: this.tt.wrapperStyle },
65
80
  React.createElement(Pressable
66
81
  // @ts-expect-error React Native types do not include the web-only dataSet prop.
67
82
  , {
@@ -81,6 +96,9 @@ class FlashNotificationsNotification extends ShapeComponent {
81
96
  else if (type == "alert") {
82
97
  return "1px solid rgba(204, 51, 0, 0.95)";
83
98
  }
99
+ else if (type == "activity") {
100
+ return "1px solid rgba(30, 41, 59, 0.95)";
101
+ }
84
102
  return undefined;
85
103
  })(),
86
104
  backgroundColor: (() => {
@@ -93,6 +111,9 @@ class FlashNotificationsNotification extends ShapeComponent {
93
111
  else if (type == "alert") {
94
112
  return "rgba(204, 51, 0, 0.87)";
95
113
  }
114
+ else if (type == "activity") {
115
+ return "rgba(30, 41, 59, 0.87)";
116
+ }
96
117
  return undefined;
97
118
  })()
98
119
  },
@@ -114,15 +135,29 @@ class FlashNotificationsNotification extends ShapeComponent {
114
135
  , {
115
136
  // @ts-expect-error React Native types do not include the web-only dataSet prop.
116
137
  dataSet: dataSets[`notificationMessage-${count}`] ||= { count: `${count}` }, testID: "notification-message" },
117
- React.createElement(Text, { style: textStyles.messageText ||= { color: "#fff" }, testID: `flash-notifications/notification-${count}/message` }, message)))));
138
+ React.createElement(Text, { style: textStyles.messageText ||= { color: "#fff" }, testID: `flash-notifications/notification-${count}/message` }, message)),
139
+ type == "activity" ? (React.createElement(View, { onLayout: this.tt.onBarLayout, style: viewStyles.barTrack ||= {
140
+ backgroundColor: "rgba(255, 255, 255, 0.3)",
141
+ borderRadius: 2,
142
+ height: 4,
143
+ marginTop: 10,
144
+ overflow: "hidden"
145
+ }, testID: "flash-notifications-notification-bar" }, progress == undefined ? (React.createElement(Animated.View, { style: {
146
+ ...barFillStyle,
147
+ transform: [{ translateX: this.barSweep }]
148
+ }, testID: "flash-notifications-notification-bar-fill" })) : (React.createElement(View, { style: {
149
+ ...barFillStyle,
150
+ width: `${progress * 100}%`
151
+ }, testID: "flash-notifications-notification-bar-fill" })))) : null)));
118
152
  }
119
153
  get wrapperStyle() {
120
- const { notification } = this.p;
154
+ const { notification, removing } = this.p;
121
155
  return /** @type {import("react-native").Animated.WithAnimatedObject<import("react-native").ViewStyle>} */ ({
122
156
  height: notification.measuredHeight ? notification.height : undefined,
123
157
  marginBottom: notification.marginBottom,
124
158
  opacity: notification.opacity,
125
- overflow: "hidden"
159
+ overflow: "hidden",
160
+ pointerEvents: removing ? "none" : "auto"
126
161
  });
127
162
  }
128
163
  onRemovedClicked = () => this.p.onRemovedClicked(this.p.notification);
@@ -136,6 +171,43 @@ class FlashNotificationsNotification extends ShapeComponent {
136
171
  this.p.onMeasured(notification, event.nativeEvent.layout.height);
137
172
  }
138
173
  };
174
+ /**
175
+ * @param {FlashNotificationsNotificationProps} prevProps
176
+ * @returns {void}
177
+ */
178
+ componentDidUpdate(prevProps) {
179
+ if (prevProps.progress == undefined && this.p.progress != undefined) {
180
+ this.barSweepAnimation?.stop();
181
+ this.barSweepAnimation = undefined;
182
+ return;
183
+ }
184
+ if (prevProps.progress != undefined && this.p.progress == undefined && this.barTrackWidth) {
185
+ this.startBarSweep();
186
+ }
187
+ }
188
+ /**
189
+ * @returns {void}
190
+ */
191
+ startBarSweep() {
192
+ this.barSweepAnimation?.stop();
193
+ this.barSweep.setValue(-this.barTrackWidth * 0.3);
194
+ const sweep = Animated.loop(Animated.timing(this.barSweep, { duration: 1000, toValue: this.barTrackWidth, useNativeDriver: false }));
195
+ sweep.start();
196
+ this.barSweepAnimation = sweep;
197
+ }
198
+ /**
199
+ * @param {import("react-native").LayoutChangeEvent} event
200
+ * @returns {void}
201
+ */
202
+ onBarLayout = (event) => {
203
+ const trackWidth = event.nativeEvent.layout.width;
204
+ if (!trackWidth || this.barTrackWidth == trackWidth)
205
+ return;
206
+ this.barTrackWidth = trackWidth;
207
+ if (this.p.progress == undefined) {
208
+ this.startBarSweep();
209
+ }
210
+ };
139
211
  }
140
212
  export default memo(shapeComponent(FlashNotificationsNotification));
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6Ii9zcmMvIiwic291cmNlcyI6WyJjb250YWluZXIvbm90aWZpY2F0aW9uLmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFBO0FBQ2xDLGlEQUFpRDtBQUNqRCxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUE7QUFDMUMsT0FBTyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsY0FBYyxFQUFFLGNBQWMsRUFBQyxNQUFNLDRDQUE0QyxDQUFBO0FBQ3pGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUVwRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSDs7Ozs7Ozs7Ozs7R0FXRztBQUVILHFDQUFxQztBQUNyQyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUE7QUFDbkIsK0RBQStEO0FBQy9ELE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQTtBQUNyQiwrREFBK0Q7QUFDL0QsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFBO0FBRXJCOztHQUVHO0FBQ0gsTUFBTSw4QkFBK0IsU0FBUSxjQUFjO0lBQ3pELE1BQU0sQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDO1FBQ2hDLFNBQVMsRUFBRSxTQUFTLENBQUMsTUFBTTtRQUMzQixLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVO1FBQ2xDLE9BQU8sRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVU7UUFDcEMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVTtRQUN6QyxVQUFVLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVO1FBQ3JDLGdCQUFnQixFQUFFLFNB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RTdCLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2xFLENBQUM7SUFDSCxDQUFDLENBQUE7O0FBR0gsZUFBZSxJQUFJLENBQUMsY0FBYyxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbi8vIEB0cy1leHBlY3QtZXJyb3IgUGFja2FnZSBzaGlwcyBubyAuZC50cyBmaWxlcy5cbmltcG9ydCBQcm9wVHlwZXNFeGFjdCBmcm9tIFwicHJvcC10eXBlcy1leGFjdFwiXG5pbXBvcnQgUmVhY3QsIHttZW1vLCB1c2VNZW1vfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtBbmltYXRlZCwgUHJlc3NhYmxlLCBUZXh0LCBWaWV3fSBmcm9tIFwicmVhY3QtbmF0aXZlXCJcbmltcG9ydCB7c2hhcGVDb21wb25lbnQsIFNoYXBlQ29tcG9uZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvc2hhcGUtY29tcG9uZW50LmpzXCJcbmltcG9ydCB7dXNlQnJlYWtwb2ludH0gZnJvbSBcInJlc3BvbnNpdmUtYnJlYWtwb2ludHNcIlxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFN0b3JlZE5vdGlmaWNhdGlvblR5cGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb3VudFxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuQW5pbWF0ZWQuVmFsdWV9IGhlaWdodFxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuQW5pbWF0ZWQuVmFsdWV9IG1hcmdpbkJvdHRvbVxuICogQHByb3BlcnR5IHtudW1iZXIgfCB1bmRlZmluZWR9IG1lYXN1cmVkSGVpZ2h0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWVzc2FnZVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuQW5pbWF0ZWQuVmFsdWV9IG9wYWNpdHlcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVtb3ZpbmdcbiAqIEBwcm9wZXJ0eSB7UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD59IHRpbWVvdXRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0aXRsZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZsYXNoTm90aWZpY2F0aW9uc05vdGlmaWNhdGlvblByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZz19IGNsYXNzTmFtZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvdW50XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWVzc2FnZVxuICogQHByb3BlcnR5IHtTdG9yZWROb3RpZmljYXRpb25UeXBlfSBub3RpZmljYXRpb25cbiAqIEBwcm9wZXJ0eSB7KG5vdGlmaWNhdGlvbjogU3RvcmVkTm90aWZpY2F0aW9uVHlwZSwgbWVhc3VyZWRIZWlnaHQ6IG51bWJlcikgPT4gdm9pZH0gb25NZWFzdXJlZFxuICogQHByb3BlcnR5IHsobm90aWZpY2F0aW9uOiBTdG9yZWROb3RpZmljYXRpb25UeXBlKSA9PiB2b2lkfSBvblJlbW92ZWRDbGlja2VkXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlbW92aW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGl0bGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlXG4gKi9cblxuLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+fSAqL1xuY29uc3QgZGF0YVNldHMgPSB7fVxuLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuVmlld1N0eWxlPn0gKi9cbmNvbnN0IHZpZXdTdHlsZXMgPSB7fVxuLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuVGV4dFN0eWxlPn0gKi9cbmNvbnN0IHRleHRTdHlsZXMgPSB7fVxuXG4vKipcbiAqIEBhdWdtZW50cyB7U2hhcGVDb21wb25lbnQ8Rmxhc2hOb3RpZmljYXRpb25zTm90aWZpY2F0aW9uUHJvcHM+fVxuICovXG5jbGFzcyBGbGFzaE5vdGlmaWNhdGlvbnNOb3RpZmljYXRpb24gZXh0ZW5kcyBTaGFwZUNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSBQcm9wVHlwZXNFeGFjdCh7XG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvdW50OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgbWVzc2FnZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIG5vdGlmaWNhdGlvbjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIG9uTWVhc3VyZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25SZW1vdmVkQ2xpY2tlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICByZW1vdmluZzogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxuICB9KVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7Y291bnQsIG1lc3NhZ2UsIHJlbW92aW5nLCB0aXRsZSwgdHlwZX0gPSB0aGlzLnBcbiAgICBjb25zdCB7Y2xhc3NOYW1lfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCBicmVha3BvaW50ID0gdXNlQnJlYWtwb2ludCgpXG5cbiAgICBjb25zdCBwcmVzc2FibGVEYXRhU2V0ID0gdXNlTWVtbyhcbiAgICAgICgpID0+ICh7XG4gICAgICAgIGNsYXNzOiBjbGFzc05hbWUsXG4gICAgICAgIHJvbGU6IFwiZGlhbG9nXCIsXG4gICAgICAgIHR5cGVcbiAgICAgIH0pLFxuICAgICAgW2NsYXNzTmFtZSwgdHlwZV1cbiAgICApXG4gICAgcmV0dXJuIChcbiAgICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICAgIHBvaW50ZXJFdmVudHM9e3JlbW92aW5nID8gXCJub25lXCIgOiBcImF1dG9cIn1cbiAgICAgICAgc3R5bGU9e3RoaXMudHQud3JhcHBlclN0eWxlfVxuICAgICAgPlxuICAgICAgICA8UHJlc3NhYmxlXG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBSZWFjdCBOYXRpdmUgdHlwZXMgZG8gbm90IGluY2x1ZGUgdGhlIHdlYi1vbmx5IGRhdGFTZXQgcHJvcC5cbiAgICAgICAgICBkYXRhU2V0PXtwcmVzc2FibGVEYXRhU2V0fVxuICAgICAgICAgIG9uTGF5b3V0PXt0aGlzLnR0Lm9uTGF5b3V0fVxuICAgICAgICAgIG9uUHJlc3M9e3RoaXMudHQub25SZW1vdmVkQ2xpY2tlZH1cbiAgICAgICAgICBzdHlsZT17YnJlYWtwb2ludC5zdHlsaW5nKHtcbiAgICAgICAgICAgIGJhc2U6IHtcbiAgICAgICAgICAgICAgcGFkZGluZzogMTUsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMTEsXG4gICAgICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCIsXG4gICAgICAgICAgICAgIGJvcmRlcjogKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcIjFweCBzb2xpZCByZ2JhKDE2MSwgMzQsIDMyLCAwLjk1KVwiXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCIxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjk1KVwiXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwiYWxlcnRcIikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiMXB4IHNvbGlkIHJnYmEoMjA0LCA1MSwgMCwgMC45NSlcIlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfSkoKSxcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmdiYSgxNjEsIDM0LCAzMiwgMC44NylcIlxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmdiYSgwLCAwLCAwLCAwLjg3KVwiXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwiYWxlcnRcIikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwicmdiYSgyMDQsIDUxLCAwLCAwLjg3KVwiXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9KSgpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc21Eb3duOiB7XG4gICAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1kVXA6IHtcbiAgICAgICAgICAgICAgd2lkdGg6IDMwMCxcbiAgICAgICAgICAgICAgbWF4V2lkdGg6IFwiMTAwJVwiXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSl9XG4gICAgICAgICAgdGVzdElEPVwiZmxhc2gtbm90aWZpY2F0aW9ucy1ub3RpZmljYXRpb25cIlxuICAgICAgICA+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXt2aWV3U3R5bGVzLnRpdGxlVmlldyB8fD0ge21hcmdpbkJvdHRvbTogNX19XG4gICAgICAgICAgICB0ZXN0SUQ9XCJub3RpZmljYXRpb24tdGl0bGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgIHN0eWxlPXt0ZXh0U3R5bGVzLnRpdGxlVGV4dCB8fD0ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBcIiNmZmZcIixcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiA3MDBcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgdGVzdElEPXtgZmxhc2gtbm90aWZpY2F0aW9ucy9ub3RpZmljYXRpb24tJHtjb3VudH0vdGl0bGVgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFJlYWN0IE5hdGl2ZSB0eXBlcyBkbyBub3QgaW5jbHVkZSB0aGUgd2ViLW9ubHkgZGF0YVNldCBwcm9wLlxuICAgICAgICAgICAgZGF0YVNldD17ZGF0YVNldHNbYG5vdGlmaWNhdGlvbk1lc3NhZ2UtJHtjb3VudH1gXSB8fD0ge2NvdW50OiBgJHtjb3VudH1gfX1cbiAgICAgICAgICAgIHRlc3RJRD1cIm5vdGlmaWNhdGlvbi1tZXNzYWdlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICBzdHlsZT17dGV4dFN0eWxlcy5tZXNzYWdlVGV4dCB8fD0ge2NvbG9yOiBcIiNmZmZcIn19XG4gICAgICAgICAgICAgIHRlc3RJRD17YGZsYXNoLW5vdGlmaWNhdGlvbnMvbm90aWZpY2F0aW9uLSR7Y291bnR9L21lc3NhZ2VgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7bWVzc2FnZX1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgIDwvUHJlc3NhYmxlPlxuICAgICAgPC9BbmltYXRlZC5WaWV3PlxuICAgIClcbiAgfVxuXG4gIGdldCB3cmFwcGVyU3R5bGUoKSB7XG4gICAgY29uc3Qge25vdGlmaWNhdGlvbn0gPSB0aGlzLnBcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5BbmltYXRlZC5XaXRoQW5pbWF0ZWRPYmplY3Q8aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLlZpZXdTdHlsZT59ICovICh7XG4gICAgICBoZWlnaHQ6IG5vdGlmaWNhdGlvbi5tZWFzdXJlZEhlaWdodCA/IG5vdGlmaWNhdGlvbi5oZWlnaHQgOiB1bmRlZmluZWQsXG4gICAgICBtYXJnaW5Cb3R0b206IG5vdGlmaWNhdGlvbi5tYXJnaW5Cb3R0b20sXG4gICAgICBvcGFjaXR5OiBub3RpZmljYXRpb24ub3BhY2l0eSxcbiAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiXG4gICAgfSlcbiAgfVxuXG4gIG9uUmVtb3ZlZENsaWNrZWQgPSAoKSA9PiB0aGlzLnAub25SZW1vdmVkQ2xpY2tlZCh0aGlzLnAubm90aWZpY2F0aW9uKVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5MYXlvdXRDaGFuZ2VFdmVudH0gZXZlbnRcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbkxheW91dCA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IHtub3RpZmljYXRpb259ID0gdGhpcy5wXG5cbiAgICBpZiAoIW5vdGlmaWNhdGlvbi5tZWFzdXJlZEhlaWdodCkge1xuICAgICAgdGhpcy5wLm9uTWVhc3VyZWQobm90aWZpY2F0aW9uLCBldmVudC5uYXRpdmVFdmVudC5sYXlvdXQuaGVpZ2h0KVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBtZW1vKHNoYXBlQ29tcG9uZW50KEZsYXNoTm90aWZpY2F0aW9uc05vdGlmaWNhdGlvbikpXG4iXX0=
213
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6Ii9zcmMvIiwic291cmNlcyI6WyJjb250YWluZXIvbm90aWZpY2F0aW9uLmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFBO0FBQ2xDLGlEQUFpRDtBQUNqRCxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUE7QUFDMUMsT0FBTyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsY0FBYyxFQUFFLGNBQWMsRUFBQyxNQUFNLDRDQUE0QyxDQUFBO0FBQ3pGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUVwRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVIOzs7Ozs7Ozs7Ozs7R0FZRztBQUVILHFDQUFxQztBQUNyQyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUE7QUFDbkIsK0RBQStEO0FBQy9ELE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQTtBQUNyQiwrREFBK0Q7QUFDL0QsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFBO0FBQ3JCLCtDQUErQztBQUMvQyxNQUFNLFlBQVksR0FBRyxFQUFDLGVBQWUsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUMsQ0FBQTtBQUV4Rjs7R0FFRztBQUNILE1BQU0sOEJBQStCLFNBQVEsY0FBYztJQUN6RCxNQUFNLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQztRQUNoQyxTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU07UUFDM0IsS0FBSyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVTtRQUNsQyxPQUFPLEVBQUUs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LElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLENBQUE7UUFFakQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FDekIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FDdEcsQ0FBQTtRQUNELEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNiLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUE7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVcsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ3RCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQTtRQUVqRCxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksVUFBVTtZQUFFLE9BQU07UUFFM0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUE7UUFFL0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDdEIsQ0FBQztJQUNILENBQUMsQ0FBQTs7QUFHSCxlQUFlLElBQUksQ0FBQyxjQUFjLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuLy8gQHRzLWV4cGVjdC1lcnJvciBQYWNrYWdlIHNoaXBzIG5vIC5kLnRzIGZpbGVzLlxuaW1wb3J0IFByb3BUeXBlc0V4YWN0IGZyb20gXCJwcm9wLXR5cGVzLWV4YWN0XCJcbmltcG9ydCBSZWFjdCwge21lbW8sIHVzZU1lbW99IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge0FuaW1hdGVkLCBQcmVzc2FibGUsIFRleHQsIFZpZXd9IGZyb20gXCJyZWFjdC1uYXRpdmVcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudCwgU2hhcGVDb21wb25lbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9zaGFwZS1jb21wb25lbnQuanNcIlxuaW1wb3J0IHt1c2VCcmVha3BvaW50fSBmcm9tIFwicmVzcG9uc2l2ZS1icmVha3BvaW50c1wiXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU3RvcmVkTm90aWZpY2F0aW9uVHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvdW50XG4gKiBAcHJvcGVydHkge3N0cmluZyB8IHVuZGVmaW5lZH0gaWRcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBoZWlnaHRcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBtYXJnaW5Cb3R0b21cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBtZWFzdXJlZEhlaWdodFxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBvcGFjaXR5XG4gKiBAcHJvcGVydHkge251bWJlciB8IHVuZGVmaW5lZH0gcHJvZ3Jlc3NcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVtb3ZpbmdcbiAqIEBwcm9wZXJ0eSB7UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWR9IHRpbWVvdXRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0aXRsZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZsYXNoTm90aWZpY2F0aW9uc05vdGlmaWNhdGlvblByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZz19IGNsYXNzTmFtZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvdW50XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWVzc2FnZVxuICogQHByb3BlcnR5IHtTdG9yZWROb3RpZmljYXRpb25UeXBlfSBub3RpZmljYXRpb25cbiAqIEBwcm9wZXJ0eSB7KG5vdGlmaWNhdGlvbjogU3RvcmVkTm90aWZpY2F0aW9uVHlwZSwgbWVhc3VyZWRIZWlnaHQ6IG51bWJlcikgPT4gdm9pZH0gb25NZWFzdXJlZFxuICogQHByb3BlcnR5IHsobm90aWZpY2F0aW9uOiBTdG9yZWROb3RpZmljYXRpb25UeXBlKSA9PiB2b2lkfSBvblJlbW92ZWRDbGlja2VkXG4gKiBAcHJvcGVydHkge251bWJlcj19IHByb2dyZXNzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlbW92aW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGl0bGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlXG4gKi9cblxuLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+fSAqL1xuY29uc3QgZGF0YVNldHMgPSB7fVxuLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuVmlld1N0eWxlPn0gKi9cbmNvbnN0IHZpZXdTdHlsZXMgPSB7fVxuLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuVGV4dFN0eWxlPn0gKi9cbmNvbnN0IHRleHRTdHlsZXMgPSB7fVxuLyoqIEB0eXBlIHtpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuVmlld1N0eWxlfSAqL1xuY29uc3QgYmFyRmlsbFN0eWxlID0ge2JhY2tncm91bmRDb2xvcjogXCIjZmZmXCIsIGJvcmRlclJhZGl1czogMiwgaGVpZ2h0OiA0LCB3aWR0aDogXCIzMCVcIn1cblxuLyoqXG4gKiBAYXVnbWVudHMge1NoYXBlQ29tcG9uZW50PEZsYXNoTm90aWZpY2F0aW9uc05vdGlmaWNhdGlvblByb3BzPn1cbiAqL1xuY2xhc3MgRmxhc2hOb3RpZmljYXRpb25zTm90aWZpY2F0aW9uIGV4dGVuZHMgU2hhcGVDb21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0gUHJvcFR5cGVzRXhhY3Qoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjb3VudDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIG1lc3NhZ2U6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBub3RpZmljYXRpb246IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBvbk1lYXN1cmVkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uUmVtb3ZlZENsaWNrZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgcHJvZ3Jlc3M6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgcmVtb3Zpbmc6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbiAgfSlcblxuICAvKiogQHR5cGUge2ltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5BbmltYXRlZC5WYWx1ZX0gKi9cbiAgYmFyU3dlZXAgPSBuZXcgQW5pbWF0ZWQuVmFsdWUoMClcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuQW5pbWF0ZWQuQ29tcG9zaXRlQW5pbWF0aW9uIHwgdW5kZWZpbmVkfSAqL1xuICBiYXJTd2VlcEFuaW1hdGlvbiA9IHVuZGVmaW5lZFxuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgYmFyVHJhY2tXaWR0aCA9IDBcblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmJhclN3ZWVwQW5pbWF0aW9uPy5zdG9wKClcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7Y291bnQsIG1lc3NhZ2UsIHByb2dyZXNzLCB0aXRsZSwgdHlwZX0gPSB0aGlzLnBcbiAgICBjb25zdCB7Y2xhc3NOYW1lfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCBicmVha3BvaW50ID0gdXNlQnJlYWtwb2ludCgpXG5cbiAgICBjb25zdCBwcmVzc2FibGVEYXRhU2V0ID0gdXNlTWVtbyhcbiAgICAgICgpID0+ICh7XG4gICAgICAgIGNsYXNzOiBjbGFzc05hbWUsXG4gICAgICAgIHJvbGU6IFwiZGlhbG9nXCIsXG4gICAgICAgIHR5cGVcbiAgICAgIH0pLFxuICAgICAgW2NsYXNzTmFtZSwgdHlwZV1cbiAgICApXG4gICAgcmV0dXJuIChcbiAgICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICAgIHN0eWxlPXt0aGlzLnR0LndyYXBwZXJTdHlsZX1cbiAgICAgID5cbiAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgUmVhY3QgTmF0aXZlIHR5cGVzIGRvIG5vdCBpbmNsdWRlIHRoZSB3ZWItb25seSBkYXRhU2V0IHByb3AuXG4gICAgICAgICAgZGF0YVNldD17cHJlc3NhYmxlRGF0YVNldH1cbiAgICAgICAgICBvbkxheW91dD17dGhpcy50dC5vbkxheW91dH1cbiAgICAgICAgICBvblByZXNzPXt0aGlzLnR0Lm9uUmVtb3ZlZENsaWNrZWR9XG4gICAgICAgICAgc3R5bGU9e2JyZWFrcG9pbnQuc3R5bGluZyh7XG4gICAgICAgICAgICBiYXNlOiB7XG4gICAgICAgICAgICAgIHBhZGRpbmc6IDE1LFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDExLFxuICAgICAgICAgICAgICBjdXJzb3I6IFwicG9pbnRlclwiLFxuICAgICAgICAgICAgICBib3JkZXI6ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCIxcHggc29saWQgcmdiYSgxNjEsIDM0LCAzMiwgMC45NSlcIlxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC45NSlcIlxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImFsZXJ0XCIpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcIjFweCBzb2xpZCByZ2JhKDIwNCwgNTEsIDAsIDAuOTUpXCJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJhY3Rpdml0eVwiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCIxcHggc29saWQgcmdiYSgzMCwgNDEsIDU5LCAwLjk1KVwiXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9KSgpLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZ2JhKDE2MSwgMzQsIDMyLCAwLjg3KVwiXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZ2JhKDAsIDAsIDAsIDAuODcpXCJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJhbGVydFwiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZ2JhKDIwNCwgNTEsIDAsIDAuODcpXCJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJhY3Rpdml0eVwiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZ2JhKDMwLCA0MSwgNTksIDAuODcpXCJcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH0pKClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzbURvd246IHtcbiAgICAgICAgICAgICAgd2lkdGg6IFwiMTAwJVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWRVcDoge1xuICAgICAgICAgICAgICB3aWR0aDogMzAwLFxuICAgICAgICAgICAgICBtYXhXaWR0aDogXCIxMDAlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KX1cbiAgICAgICAgICB0ZXN0SUQ9XCJmbGFzaC1ub3RpZmljYXRpb25zLW5vdGlmaWNhdGlvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgc3R5bGU9e3ZpZXdTdHlsZXMudGl0bGVWaWV3IHx8PSB7bWFyZ2luQm90dG9tOiA1fX1cbiAgICAgICAgICAgIHRlc3RJRD1cIm5vdGlmaWNhdGlvbi10aXRsZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgc3R5bGU9e3RleHRTdHlsZXMudGl0bGVUZXh0IHx8PSB7XG4gICAgICAgICAgICAgICAgY29sb3I6IFwiI2ZmZlwiLFxuICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDcwMFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB0ZXN0SUQ9e2BmbGFzaC1ub3RpZmljYXRpb25zL25vdGlmaWNhdGlvbi0ke2NvdW50fS90aXRsZWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgUmVhY3QgTmF0aXZlIHR5cGVzIGRvIG5vdCBpbmNsdWRlIHRoZSB3ZWItb25seSBkYXRhU2V0IHByb3AuXG4gICAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0c1tgbm90aWZpY2F0aW9uTWVzc2FnZS0ke2NvdW50fWBdIHx8PSB7Y291bnQ6IGAke2NvdW50fWB9fVxuICAgICAgICAgICAgdGVzdElEPVwibm90aWZpY2F0aW9uLW1lc3NhZ2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgIHN0eWxlPXt0ZXh0U3R5bGVzLm1lc3NhZ2VUZXh0IHx8PSB7Y29sb3I6IFwiI2ZmZlwifX1cbiAgICAgICAgICAgICAgdGVzdElEPXtgZmxhc2gtbm90aWZpY2F0aW9ucy9ub3RpZmljYXRpb24tJHtjb3VudH0vbWVzc2FnZWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHttZXNzYWdlfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICB7dHlwZSA9PSBcImFjdGl2aXR5XCIgPyAoXG4gICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICBvbkxheW91dD17dGhpcy50dC5vbkJhckxheW91dH1cbiAgICAgICAgICAgICAgc3R5bGU9e3ZpZXdTdHlsZXMuYmFyVHJhY2sgfHw9IHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpXCIsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAyLFxuICAgICAgICAgICAgICAgIGhlaWdodDogNCxcbiAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IDEwLFxuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHRlc3RJRD1cImZsYXNoLW5vdGlmaWNhdGlvbnMtbm90aWZpY2F0aW9uLWJhclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtwcm9ncmVzcyA9PSB1bmRlZmluZWQgPyAoXG4gICAgICAgICAgICAgICAgPEFuaW1hdGVkLlZpZXdcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIC4uLmJhckZpbGxTdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBbe3RyYW5zbGF0ZVg6IHRoaXMuYmFyU3dlZXB9XVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIHRlc3RJRD1cImZsYXNoLW5vdGlmaWNhdGlvbnMtbm90aWZpY2F0aW9uLWJhci1maWxsXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAuLi5iYXJGaWxsU3R5bGUsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBgJHtwcm9ncmVzcyAqIDEwMH0lYFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIHRlc3RJRD1cImZsYXNoLW5vdGlmaWNhdGlvbnMtbm90aWZpY2F0aW9uLWJhci1maWxsXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgIDwvQW5pbWF0ZWQuVmlldz5cbiAgICApXG4gIH1cblxuICBnZXQgd3JhcHBlclN0eWxlKCkge1xuICAgIGNvbnN0IHtub3RpZmljYXRpb24sIHJlbW92aW5nfSA9IHRoaXMucFxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLldpdGhBbmltYXRlZE9iamVjdDxpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuVmlld1N0eWxlPn0gKi8gKHtcbiAgICAgIGhlaWdodDogbm90aWZpY2F0aW9uLm1lYXN1cmVkSGVpZ2h0ID8gbm90aWZpY2F0aW9uLmhlaWdodCA6IHVuZGVmaW5lZCxcbiAgICAgIG1hcmdpbkJvdHRvbTogbm90aWZpY2F0aW9uLm1hcmdpbkJvdHRvbSxcbiAgICAgIG9wYWNpdHk6IG5vdGlmaWNhdGlvbi5vcGFjaXR5LFxuICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICBwb2ludGVyRXZlbnRzOiByZW1vdmluZyA/IFwibm9uZVwiIDogXCJhdXRvXCJcbiAgICB9KVxuICB9XG5cbiAgb25SZW1vdmVkQ2xpY2tlZCA9ICgpID0+IHRoaXMucC5vblJlbW92ZWRDbGlja2VkKHRoaXMucC5ub3RpZmljYXRpb24pXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkxheW91dENoYW5nZUV2ZW50fSBldmVudFxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uTGF5b3V0ID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3Qge25vdGlmaWNhdGlvbn0gPSB0aGlzLnBcblxuICAgIGlmICghbm90aWZpY2F0aW9uLm1lYXN1cmVkSGVpZ2h0KSB7XG4gICAgICB0aGlzLnAub25NZWFzdXJlZChub3RpZmljYXRpb24sIGV2ZW50Lm5hdGl2ZUV2ZW50LmxheW91dC5oZWlnaHQpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Rmxhc2hOb3RpZmljYXRpb25zTm90aWZpY2F0aW9uUHJvcHN9IHByZXZQcm9wc1xuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICBpZiAocHJldlByb3BzLnByb2dyZXNzID09IHVuZGVmaW5lZCAmJiB0aGlzLnAucHJvZ3Jlc3MgIT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJhclN3ZWVwQW5pbWF0aW9uPy5zdG9wKClcbiAgICAgIHRoaXMuYmFyU3dlZXBBbmltYXRpb24gPSB1bmRlZmluZWRcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChwcmV2UHJvcHMucHJvZ3Jlc3MgIT0gdW5kZWZpbmVkICYmIHRoaXMucC5wcm9ncmVzcyA9PSB1bmRlZmluZWQgJiYgdGhpcy5iYXJUcmFja1dpZHRoKSB7XG4gICAgICB0aGlzLnN0YXJ0QmFyU3dlZXAoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0YXJ0QmFyU3dlZXAoKSB7XG4gICAgdGhpcy5iYXJTd2VlcEFuaW1hdGlvbj8uc3RvcCgpXG4gICAgdGhpcy5iYXJTd2VlcC5zZXRWYWx1ZSgtdGhpcy5iYXJUcmFja1dpZHRoICogMC4zKVxuXG4gICAgY29uc3Qgc3dlZXAgPSBBbmltYXRlZC5sb29wKFxuICAgICAgQW5pbWF0ZWQudGltaW5nKHRoaXMuYmFyU3dlZXAsIHtkdXJhdGlvbjogMTAwMCwgdG9WYWx1ZTogdGhpcy5iYXJUcmFja1dpZHRoLCB1c2VOYXRpdmVEcml2ZXI6IGZhbHNlfSlcbiAgICApXG4gICAgc3dlZXAuc3RhcnQoKVxuICAgIHRoaXMuYmFyU3dlZXBBbmltYXRpb24gPSBzd2VlcFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkxheW91dENoYW5nZUV2ZW50fSBldmVudFxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uQmFyTGF5b3V0ID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgdHJhY2tXaWR0aCA9IGV2ZW50Lm5hdGl2ZUV2ZW50LmxheW91dC53aWR0aFxuXG4gICAgaWYgKCF0cmFja1dpZHRoIHx8IHRoaXMuYmFyVHJhY2tXaWR0aCA9PSB0cmFja1dpZHRoKSByZXR1cm5cblxuICAgIHRoaXMuYmFyVHJhY2tXaWR0aCA9IHRyYWNrV2lkdGhcblxuICAgIGlmICh0aGlzLnAucHJvZ3Jlc3MgPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnN0YXJ0QmFyU3dlZXAoKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBtZW1vKHNoYXBlQ29tcG9uZW50KEZsYXNoTm90aWZpY2F0aW9uc05vdGlmaWNhdGlvbikpXG4iXX0=
@@ -19,6 +19,15 @@ export default class FlashNotifications {
19
19
  * @returns {void}
20
20
  */
21
21
  static success(message: string): void;
22
+ /**
23
+ * Shows a long-running activity notification with a loading bar. Unlike the
24
+ * other notification types it never auto-dismisses: the returned handle
25
+ * decides when the notification leaves the screen.
26
+ *
27
+ * @param {ActivityArgs} args
28
+ * @returns {ActivityHandle}
29
+ */
30
+ static activity({ message }: ActivityArgs): ActivityHandle;
22
31
  /**
23
32
  * @param {object} args
24
33
  * @param {string} args.text
@@ -30,4 +39,34 @@ export default class FlashNotifications {
30
39
  type: string;
31
40
  }): void;
32
41
  }
42
+ export type ActivityArgs = {
43
+ /**
44
+ * Translated display string shown while the activity runs.
45
+ */
46
+ message: string;
47
+ };
48
+ export type ActivityUpdateArgs = {
49
+ /**
50
+ * Determinate progress in [0, 1]. Omit to keep the bar indeterminate.
51
+ */
52
+ progress?: number | undefined;
53
+ };
54
+ export type ActivityHandle = {
55
+ /**
56
+ * Moves the loading bar; without a progress value it stays indeterminate.
57
+ */
58
+ update: (args?: ActivityUpdateArgs) => void;
59
+ /**
60
+ * Flashes the success tone, then dismisses the notification.
61
+ */
62
+ succeed: (message?: string) => void;
63
+ /**
64
+ * Flashes the error tone, then dismisses the notification.
65
+ */
66
+ fail: (message?: string) => void;
67
+ /**
68
+ * Dismisses the notification without a tone change.
69
+ */
70
+ done: () => void;
71
+ };
33
72
  //# sourceMappingURL=flash-notifications.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"flash-notifications.d.ts","sourceRoot":"/src/","sources":["flash-notifications.js"],"names":[],"mappings":"AAOA;IACE;;;OAGG;IACH,sBAHW,MAAM,GACJ,IAAI,CAIhB;IAED;;;OAGG;IACH,sBAHW,MAAM,GACJ,IAAI,CAIhB;IAED;;;OAGG;IACH,4BAHW,OAAO,GACL,IAAI,CAmDhB;IAED;;;OAGG;IACH,wBAHW,MAAM,GACJ,IAAI,CAIhB;IAED;;;;;OAKG;IACH,kBAJG;QAAqB,IAAI,EAAjB,MAAM;QACO,IAAI,EAAjB,MAAM;KACd,GAAU,IAAI,CAoBhB;CACF"}
1
+ {"version":3,"file":"flash-notifications.d.ts","sourceRoot":"/src/","sources":["flash-notifications.js"],"names":[],"mappings":"AA2BA;IACE;;;OAGG;IACH,sBAHW,MAAM,GACJ,IAAI,CAIhB;IAED;;;OAGG;IACH,sBAHW,MAAM,GACJ,IAAI,CAIhB;IAED;;;OAGG;IACH,4BAHW,OAAO,GACL,IAAI,CAmDhB;IAED;;;OAGG;IACH,wBAHW,MAAM,GACJ,IAAI,CAIhB;IAED;;;;;;;OAOG;IACH,6BAHW,YAAY,GACV,cAAc,CAgD1B;IAED;;;;;OAKG;IACH,kBAJG;QAAqB,IAAI,EAAjB,MAAM;QACO,IAAI,EAAjB,MAAM;KACd,GAAU,IAAI,CAoBhB;CACF;;;;;aAnLa,MAAM;;;;;;eAKN,MAAM,YAAC;;;;;;YAKP,CAAC,IAAI,CAAC,EAAE,kBAAkB,KAAK,IAAI;;;;aACnC,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI;;;;UAC1B,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI;;;;UAC1B,MAAM,IAAI"}
@@ -2,6 +2,22 @@
2
2
  import { digg } from "diggerize";
3
3
  import configuration from "./configuration.js";
4
4
  import events from "./events.js";
5
+ /**
6
+ * @typedef {object} ActivityArgs
7
+ * @property {string} message Translated display string shown while the activity runs.
8
+ */
9
+ /**
10
+ * @typedef {object} ActivityUpdateArgs
11
+ * @property {number=} progress Determinate progress in [0, 1]. Omit to keep the bar indeterminate.
12
+ */
13
+ /**
14
+ * @typedef {object} ActivityHandle
15
+ * @property {(args?: ActivityUpdateArgs) => void} update Moves the loading bar; without a progress value it stays indeterminate.
16
+ * @property {(message?: string) => void} succeed Flashes the success tone, then dismisses the notification.
17
+ * @property {(message?: string) => void} fail Flashes the error tone, then dismisses the notification.
18
+ * @property {() => void} done Dismisses the notification without a tone change.
19
+ */
20
+ let activityNotificationCount = 0;
5
21
  export default class FlashNotifications {
6
22
  /**
7
23
  * @param {string} message
@@ -75,6 +91,54 @@ export default class FlashNotifications {
75
91
  static success(message) {
76
92
  FlashNotifications.show({ type: "success", text: message });
77
93
  }
94
+ /**
95
+ * Shows a long-running activity notification with a loading bar. Unlike the
96
+ * other notification types it never auto-dismisses: the returned handle
97
+ * decides when the notification leaves the screen.
98
+ *
99
+ * @param {ActivityArgs} args
100
+ * @returns {ActivityHandle}
101
+ */
102
+ static activity({ message }) {
103
+ activityNotificationCount += 1;
104
+ const id = `activity-${activityNotificationCount}`;
105
+ events.emit("pushNotification", {
106
+ id,
107
+ message,
108
+ title: configuration.translate("js.shared.activity", { defaultValue: "Activity" }),
109
+ type: "activity"
110
+ });
111
+ /**
112
+ * @param {"update" | "succeed" | "fail" | "done"} action
113
+ * @param {object} [payload]
114
+ * @returns {void}
115
+ */
116
+ const emitControl = (action, payload = {}) => {
117
+ events.emit("activityNotification", { action, id, ...payload });
118
+ };
119
+ return {
120
+ /**
121
+ * @param {ActivityUpdateArgs} [args]
122
+ * @returns {void}
123
+ */
124
+ update(args = {}) {
125
+ const { progress } = args;
126
+ const normalizedProgress = typeof progress == "number" && !Number.isNaN(progress)
127
+ ? Math.min(1, Math.max(0, progress))
128
+ : undefined;
129
+ emitControl("update", { progress: normalizedProgress });
130
+ },
131
+ succeed(message) {
132
+ emitControl("succeed", { message });
133
+ },
134
+ fail(message) {
135
+ emitControl("fail", { message });
136
+ },
137
+ done() {
138
+ emitControl("done");
139
+ }
140
+ };
141
+ }
78
142
  /**
79
143
  * @param {object} args
80
144
  * @param {string} args.text
@@ -102,4 +166,4 @@ export default class FlashNotifications {
102
166
  });
103
167
  }
104
168
  }
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhc2gtbm90aWZpY2F0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiZmxhc2gtbm90aWZpY2F0aW9ucy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUU5QixPQUFPLGFBQWEsTUFBTSxvQkFBb0IsQ0FBQTtBQUM5QyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFFaEMsTUFBTSxDQUFDLE9BQU8sT0FBTyxrQkFBa0I7SUFDckM7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPO1FBQ2xCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUE7SUFDekQsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTztRQUNsQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFBO0lBQ3pELENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUs7UUFDeEIsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDOUIsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtZQUUxRSxPQUFNO1FBQ1IsQ0FBQztRQUVELG1CQUFtQjtRQUNuQixJQUFJLEtBQUssQ0FBQyxZQUFZLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUM1QyxtQkFBbUI7WUFDbkIsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO2dCQUMvQixtQkFB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QUMsQ0FBQyxDQUFBO1FBQzdFLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxFQUFFLENBQUM7WUFDaEMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsRUFBQyxZQUFZLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQTtRQUM3RSxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLEtBQUssR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLG1CQUFtQixFQUFFLEVBQUMsWUFBWSxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUE7UUFDakYsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFDLFlBQVksRUFBRSxjQUFjLEVBQUMsQ0FBQyxDQUFBO1FBQzNGLENBQUM7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzlCLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNsQixLQUFLO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1NBQ2hCLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuXG5pbXBvcnQgY29uZmlndXJhdGlvbiBmcm9tIFwiLi9jb25maWd1cmF0aW9uLmpzXCJcbmltcG9ydCBldmVudHMgZnJvbSBcIi4vZXZlbnRzLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmxhc2hOb3RpZmljYXRpb25zIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIGFsZXJ0KG1lc3NhZ2UpIHtcbiAgICBGbGFzaE5vdGlmaWNhdGlvbnMuc2hvdyh7dHlwZTogXCJhbGVydFwiLCB0ZXh0OiBtZXNzYWdlfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyBlcnJvcihtZXNzYWdlKSB7XG4gICAgRmxhc2hOb3RpZmljYXRpb25zLnNob3coe3R5cGU6IFwiZXJyb3JcIiwgdGV4dDogbWVzc2FnZX0pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt1bmtub3dufSBlcnJvclxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyBlcnJvclJlc3BvbnNlKGVycm9yKSB7XG4gICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5lcnJvcih0eXBlb2YgZXJyb3IgPT0gXCJzdHJpbmdcIiA/IGVycm9yIDogU3RyaW5nKGVycm9yKSlcblxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIGlmIChlcnJvci5hcGlNYWtlclR5cGUgPT0gXCJWYWxpZGF0aW9uRXJyb3JcIikge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgaWYgKGVycm9yLmhhc1VuaGFuZGxlZEVycm9ycygpKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgY29uc3QgdW5oYW5kbGVkRXJyb3JNZXNzYWdlcyA9IGVycm9yLmdldFVuaGFuZGxlZEVycm9ycygpLm1hcCgoc3ViRXJyb3IpID0+IHN1YkVycm9yLmdldEZ1bGxFcnJvck1lc3NhZ2VzKCkpLmZsYXQoKVxuXG4gICAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5lcnJvcih1bmhhbmRsZWRFcnJvck1lc3NhZ2VzLmpvaW4oXCIuIFwiKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IFwiQ291bGRuJ3Qgc3VibWl0IGJlY2F1c2Ugb2YgdmFsaWRhdGlvbiBlcnJvcnMuXCJcblxuICAgICAgICBGbGFzaE5vdGlmaWNhdGlvbnMuYWxlcnQoY29uZmlndXJhdGlvbi50cmFuc2xhdGUoXCJqcy5ub3RpZmljYXRpb24uY291bGRudF9zdWJtaXRfYmVjYXVzZV9vZl92YWxpZGF0aW9uX2Vycm9yc1wiLCB7ZGVmYXVsdFZhbHVlfSkpXG4gICAgICB9XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIH0gZWxzZSBpZiAoZXJyb3IuYXBpTWFrZXJUeXBlID09IFwiQmFzZUVycm9yXCIpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gZXJyb3IuYXJncyAmJiBlcnJvci5hcmdzLnJlc3BvbnNlXG4gICAgICBjb25zdCBlcnJvcnMgPSAvKiogQHR5cGUge0FycmF5PHN0cmluZyB8IHttZXNzYWdlOiBzdHJpbmd9W10+IHwgdW5kZWZpbmVkfSAqLyAocmVzcG9uc2UgJiYgcmVzcG9uc2UuZXJyb3JzKVxuXG4gICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZXMgPSBlcnJvcnMubWFwKChlcnJvcikgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgZXJyb3IgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGRpZ2coZXJyb3IsIFwibWVzc2FnZVwiKVxuICAgICAgICB9KVxuXG4gICAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5lcnJvcihlcnJvck1lc3NhZ2VzLmpvaW4oXCIuIFwiKSlcbiAgICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZSkge1xuICAgICAgICBGbGFzaE5vdGlmaWNhdGlvbnMuZXJyb3IoZXJyb3IubWVzc2FnZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5lcnJvcihjb25maWd1cmF0aW9uLnRyYW5zbGF0ZShcImpzLnNoYXJlZC5zb21ldGhpbmdfd2VudF93cm9uZ1wiLCB7ZGVmYXVsdFZhbHVlOiBcIlNvbWV0aGluZyB3ZW50IHdyb25nLlwifSkpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbnN0cnVjdG9yTmFtZSA9IGRpZ2coZXJyb3IsIFwiY29uc3RydWN0b3JcIiwgXCJuYW1lXCIpXG4gICAgICBjb25zdCBkZWZhdWx0RXJyb3JNZXNzYWdlID0gY29uZmlndXJhdGlvbi50cmFuc2xhdGUoXCJqcy5zaGFyZWQuc29tZXRoaW5nX3dlbnRfd3JvbmdcIiwge2RlZmF1bHRWYWx1ZTogXCJTb21ldGhpbmcgd2VudCB3cm9uZy5cIn0pXG4gICAgICBjb25zdCBtZXNzYWdlID0gZGlnZyhlcnJvciwgXCJtZXNzYWdlXCIpXG5cbiAgICAgIGNvbnNvbGUuZXJyb3IoYERpZG50IGtub3cgd2hhdCB0byBkbyB3aXRoIHRoYXQgJHtjb25zdHJ1Y3Rvck5hbWV9OiAke21lc3NhZ2V9YClcbiAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5lcnJvcihkZWZhdWx0RXJyb3JNZXNzYWdlKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyBzdWNjZXNzKG1lc3NhZ2UpIHtcbiAgICBGbGFzaE5vdGlmaWNhdGlvbnMuc2hvdyh7dHlwZTogXCJzdWNjZXNzXCIsIHRleHQ6IG1lc3NhZ2V9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnRleHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MudHlwZVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyBzaG93KGFyZ3MpIHtcbiAgICBsZXQgdGl0bGVcblxuICAgIGlmIChhcmdzLnR5cGUgPT0gXCJhbGVydFwiKSB7XG4gICAgICB0aXRsZSA9IGNvbmZpZ3VyYXRpb24udHJhbnNsYXRlKFwianMuc2hhcmVkLmFsZXJ0XCIsIHtkZWZhdWx0VmFsdWU6IFwiQWxlcnRcIn0pXG4gICAgfSBlbHNlIGlmIChhcmdzLnR5cGUgPT0gXCJlcnJvclwiKSB7XG4gICAgICB0aXRsZSA9IGNvbmZpZ3VyYXRpb24udHJhbnNsYXRlKFwianMuc2hhcmVkLmVycm9yXCIsIHtkZWZhdWx0VmFsdWU6IFwiRXJyb3JcIn0pXG4gICAgfSBlbHNlIGlmIChhcmdzLnR5cGUgPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgIHRpdGxlID0gY29uZmlndXJhdGlvbi50cmFuc2xhdGUoXCJqcy5zaGFyZWQuc3VjY2Vzc1wiLCB7ZGVmYXVsdFZhbHVlOiBcIlN1Y2Nlc3NcIn0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRpdGxlID0gY29uZmlndXJhdGlvbi50cmFuc2xhdGUoXCJqcy5zaGFyZWQubm90aWZpY2F0aW9uXCIsIHtkZWZhdWx0VmFsdWU6IFwiTm90aWZpY2F0aW9uXCJ9KVxuICAgIH1cblxuICAgIGV2ZW50cy5lbWl0KFwicHVzaE5vdGlmaWNhdGlvblwiLCB7XG4gICAgICBtZXNzYWdlOiBhcmdzLnRleHQsXG4gICAgICB0aXRsZSxcbiAgICAgIHR5cGU6IGFyZ3MudHlwZVxuICAgIH0pXG4gIH1cbn1cbiJdfQ==
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhc2gtbm90aWZpY2F0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiZmxhc2gtbm90aWZpY2F0aW9ucy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUU5QixPQUFPLGFBQWEsTUFBTSxvQkFBb0IsQ0FBQTtBQUM5QyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFFaEM7OztHQUdHO0FBRUg7OztHQUdHO0FBRUg7Ozs7OztHQU1HO0FBRUgsSUFBSSx5QkFBeUIsR0FBRyxDQUFDLENBQUE7QUFFakMsTUFBTSxDQUFDLE9BQU8sT0FBTyxrQkFBa0I7SUFDckM7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPO1FBQ2xCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUE7SUFDekQsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTztRQUNsQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFBO0lBQ3pELENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUs7UUFDeEIsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDOUIsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtZQUUxRSxPQUFNO1FBQ1IsQ0FBQztRQUVELG1CQUFtQjtRQUNuQixJQUFJLEtBQUssQ0FBQyxZQUFZLElBQUksaUJBQWlCLEVBQUUs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QUFDO1lBRUQsSUFBSTtnQkFDRixXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDckIsQ0FBQztTQUNGLENBQUE7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUk7UUFDZCxJQUFJLEtBQUssQ0FBQTtRQUVULElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUN6QixLQUFLLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxFQUFDLFlBQVksRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFBO1FBQzdFLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxFQUFFLENBQUM7WUFDaEMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsRUFBQyxZQUFZLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQTtRQUM3RSxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLEtBQUssR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLG1CQUFtQixFQUFFLEVBQUMsWUFBWSxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUE7UUFDakYsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFDLFlBQVksRUFBRSxjQUFjLEVBQUMsQ0FBQyxDQUFBO1FBQzNGLENBQUM7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzlCLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNsQixLQUFLO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1NBQ2hCLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuXG5pbXBvcnQgY29uZmlndXJhdGlvbiBmcm9tIFwiLi9jb25maWd1cmF0aW9uLmpzXCJcbmltcG9ydCBldmVudHMgZnJvbSBcIi4vZXZlbnRzLmpzXCJcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBY3Rpdml0eUFyZ3NcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXNzYWdlIFRyYW5zbGF0ZWQgZGlzcGxheSBzdHJpbmcgc2hvd24gd2hpbGUgdGhlIGFjdGl2aXR5IHJ1bnMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBY3Rpdml0eVVwZGF0ZUFyZ3NcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyPX0gcHJvZ3Jlc3MgRGV0ZXJtaW5hdGUgcHJvZ3Jlc3MgaW4gWzAsIDFdLiBPbWl0IHRvIGtlZXAgdGhlIGJhciBpbmRldGVybWluYXRlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQWN0aXZpdHlIYW5kbGVcbiAqIEBwcm9wZXJ0eSB7KGFyZ3M/OiBBY3Rpdml0eVVwZGF0ZUFyZ3MpID0+IHZvaWR9IHVwZGF0ZSBNb3ZlcyB0aGUgbG9hZGluZyBiYXI7IHdpdGhvdXQgYSBwcm9ncmVzcyB2YWx1ZSBpdCBzdGF5cyBpbmRldGVybWluYXRlLlxuICogQHByb3BlcnR5IHsobWVzc2FnZT86IHN0cmluZykgPT4gdm9pZH0gc3VjY2VlZCBGbGFzaGVzIHRoZSBzdWNjZXNzIHRvbmUsIHRoZW4gZGlzbWlzc2VzIHRoZSBub3RpZmljYXRpb24uXG4gKiBAcHJvcGVydHkgeyhtZXNzYWdlPzogc3RyaW5nKSA9PiB2b2lkfSBmYWlsIEZsYXNoZXMgdGhlIGVycm9yIHRvbmUsIHRoZW4gZGlzbWlzc2VzIHRoZSBub3RpZmljYXRpb24uXG4gKiBAcHJvcGVydHkgeygpID0+IHZvaWR9IGRvbmUgRGlzbWlzc2VzIHRoZSBub3RpZmljYXRpb24gd2l0aG91dCBhIHRvbmUgY2hhbmdlLlxuICovXG5cbmxldCBhY3Rpdml0eU5vdGlmaWNhdGlvbkNvdW50ID0gMFxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGbGFzaE5vdGlmaWNhdGlvbnMge1xuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBzdGF0aWMgYWxlcnQobWVzc2FnZSkge1xuICAgIEZsYXNoTm90aWZpY2F0aW9ucy5zaG93KHt0eXBlOiBcImFsZXJ0XCIsIHRleHQ6IG1lc3NhZ2V9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIGVycm9yKG1lc3NhZ2UpIHtcbiAgICBGbGFzaE5vdGlmaWNhdGlvbnMuc2hvdyh7dHlwZTogXCJlcnJvclwiLCB0ZXh0OiBtZXNzYWdlfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3Vua25vd259IGVycm9yXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIGVycm9yUmVzcG9uc2UoZXJyb3IpIHtcbiAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgRmxhc2hOb3RpZmljYXRpb25zLmVycm9yKHR5cGVvZiBlcnJvciA9PSBcInN0cmluZ1wiID8gZXJyb3IgOiBTdHJpbmcoZXJyb3IpKVxuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgaWYgKGVycm9yLmFwaU1ha2VyVHlwZSA9PSBcIlZhbGlkYXRpb25FcnJvclwiKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICBpZiAoZXJyb3IuaGFzVW5oYW5kbGVkRXJyb3JzKCkpIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBjb25zdCB1bmhhbmRsZWRFcnJvck1lc3NhZ2VzID0gZXJyb3IuZ2V0VW5oYW5kbGVkRXJyb3JzKCkubWFwKChzdWJFcnJvcikgPT4gc3ViRXJyb3IuZ2V0RnVsbEVycm9yTWVzc2FnZXMoKSkuZmxhdCgpXG5cbiAgICAgICAgRmxhc2hOb3RpZmljYXRpb25zLmVycm9yKHVuaGFuZGxlZEVycm9yTWVzc2FnZXMuam9pbihcIi4gXCIpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gXCJDb3VsZG4ndCBzdWJtaXQgYmVjYXVzZSBvZiB2YWxpZGF0aW9uIGVycm9ycy5cIlxuXG4gICAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5hbGVydChjb25maWd1cmF0aW9uLnRyYW5zbGF0ZShcImpzLm5vdGlmaWNhdGlvbi5jb3VsZG50X3N1Ym1pdF9iZWNhdXNlX29mX3ZhbGlkYXRpb25fZXJyb3JzXCIsIHtkZWZhdWx0VmFsdWV9KSlcbiAgICAgIH1cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgfSBlbHNlIGlmIChlcnJvci5hcGlNYWtlclR5cGUgPT0gXCJCYXNlRXJyb3JcIikge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBlcnJvci5hcmdzICYmIGVycm9yLmFyZ3MucmVzcG9uc2VcbiAgICAgIGNvbnN0IGVycm9ycyA9IC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nIHwge21lc3NhZ2U6IHN0cmluZ31bXT4gfCB1bmRlZmluZWR9ICovIChyZXNwb25zZSAmJiByZXNwb25zZS5lcnJvcnMpXG5cbiAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IGVycm9ycy5tYXAoKGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBlcnJvciA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZGlnZyhlcnJvciwgXCJtZXNzYWdlXCIpXG4gICAgICAgIH0pXG5cbiAgICAgICAgRmxhc2hOb3RpZmljYXRpb25zLmVycm9yKGVycm9yTWVzc2FnZXMuam9pbihcIi4gXCIpKVxuICAgICAgfSBlbHNlIGlmIChlcnJvci5tZXNzYWdlKSB7XG4gICAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5lcnJvcihlcnJvci5tZXNzYWdlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgRmxhc2hOb3RpZmljYXRpb25zLmVycm9yKGNvbmZpZ3VyYXRpb24udHJhbnNsYXRlKFwianMuc2hhcmVkLnNvbWV0aGluZ193ZW50X3dyb25nXCIsIHtkZWZhdWx0VmFsdWU6IFwiU29tZXRoaW5nIHdlbnQgd3JvbmcuXCJ9KSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29uc3RydWN0b3JOYW1lID0gZGlnZyhlcnJvciwgXCJjb25zdHJ1Y3RvclwiLCBcIm5hbWVcIilcbiAgICAgIGNvbnN0IGRlZmF1bHRFcnJvck1lc3NhZ2UgPSBjb25maWd1cmF0aW9uLnRyYW5zbGF0ZShcImpzLnNoYXJlZC5zb21ldGhpbmdfd2VudF93cm9uZ1wiLCB7ZGVmYXVsdFZhbHVlOiBcIlNvbWV0aGluZyB3ZW50IHdyb25nLlwifSlcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBkaWdnKGVycm9yLCBcIm1lc3NhZ2VcIilcblxuICAgICAgY29uc29sZS5lcnJvcihgRGlkbnQga25vdyB3aGF0IHRvIGRvIHdpdGggdGhhdCAke2NvbnN0cnVjdG9yTmFtZX06ICR7bWVzc2FnZX1gKVxuICAgICAgRmxhc2hOb3RpZmljYXRpb25zLmVycm9yKGRlZmF1bHRFcnJvck1lc3NhZ2UpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHN1Y2Nlc3MobWVzc2FnZSkge1xuICAgIEZsYXNoTm90aWZpY2F0aW9ucy5zaG93KHt0eXBlOiBcInN1Y2Nlc3NcIiwgdGV4dDogbWVzc2FnZX0pXG4gIH1cblxuICAvKipcbiAgICogU2hvd3MgYSBsb25nLXJ1bm5pbmcgYWN0aXZpdHkgbm90aWZpY2F0aW9uIHdpdGggYSBsb2FkaW5nIGJhci4gVW5saWtlIHRoZVxuICAgKiBvdGhlciBub3RpZmljYXRpb24gdHlwZXMgaXQgbmV2ZXIgYXV0by1kaXNtaXNzZXM6IHRoZSByZXR1cm5lZCBoYW5kbGVcbiAgICogZGVjaWRlcyB3aGVuIHRoZSBub3RpZmljYXRpb24gbGVhdmVzIHRoZSBzY3JlZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7QWN0aXZpdHlBcmdzfSBhcmdzXG4gICAqIEByZXR1cm5zIHtBY3Rpdml0eUhhbmRsZX1cbiAgICovXG4gIHN0YXRpYyBhY3Rpdml0eSh7bWVzc2FnZX0pIHtcbiAgICBhY3Rpdml0eU5vdGlmaWNhdGlvbkNvdW50ICs9IDFcbiAgICBjb25zdCBpZCA9IGBhY3Rpdml0eS0ke2FjdGl2aXR5Tm90aWZpY2F0aW9uQ291bnR9YFxuXG4gICAgZXZlbnRzLmVtaXQoXCJwdXNoTm90aWZpY2F0aW9uXCIsIHtcbiAgICAgIGlkLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHRpdGxlOiBjb25maWd1cmF0aW9uLnRyYW5zbGF0ZShcImpzLnNoYXJlZC5hY3Rpdml0eVwiLCB7ZGVmYXVsdFZhbHVlOiBcIkFjdGl2aXR5XCJ9KSxcbiAgICAgIHR5cGU6IFwiYWN0aXZpdHlcIlxuICAgIH0pXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1widXBkYXRlXCIgfCBcInN1Y2NlZWRcIiB8IFwiZmFpbFwiIHwgXCJkb25lXCJ9IGFjdGlvblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbcGF5bG9hZF1cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBjb25zdCBlbWl0Q29udHJvbCA9IChhY3Rpb24sIHBheWxvYWQgPSB7fSkgPT4ge1xuICAgICAgZXZlbnRzLmVtaXQoXCJhY3Rpdml0eU5vdGlmaWNhdGlvblwiLCB7YWN0aW9uLCBpZCwgLi4ucGF5bG9hZH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHtBY3Rpdml0eVVwZGF0ZUFyZ3N9IFthcmdzXVxuICAgICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICAgKi9cbiAgICAgIHVwZGF0ZShhcmdzID0ge30pIHtcbiAgICAgICAgY29uc3Qge3Byb2dyZXNzfSA9IGFyZ3NcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFByb2dyZXNzID0gdHlwZW9mIHByb2dyZXNzID09IFwibnVtYmVyXCIgJiYgIU51bWJlci5pc05hTihwcm9ncmVzcylcbiAgICAgICAgICA/IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHByb2dyZXNzKSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICAgIGVtaXRDb250cm9sKFwidXBkYXRlXCIsIHtwcm9ncmVzczogbm9ybWFsaXplZFByb2dyZXNzfSlcbiAgICAgIH0sXG5cbiAgICAgIHN1Y2NlZWQobWVzc2FnZSkge1xuICAgICAgICBlbWl0Q29udHJvbChcInN1Y2NlZWRcIiwge21lc3NhZ2V9KVxuICAgICAgfSxcblxuICAgICAgZmFpbChtZXNzYWdlKSB7XG4gICAgICAgIGVtaXRDb250cm9sKFwiZmFpbFwiLCB7bWVzc2FnZX0pXG4gICAgICB9LFxuXG4gICAgICBkb25lKCkge1xuICAgICAgICBlbWl0Q29udHJvbChcImRvbmVcIilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MudGV4dFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy50eXBlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHNob3coYXJncykge1xuICAgIGxldCB0aXRsZVxuXG4gICAgaWYgKGFyZ3MudHlwZSA9PSBcImFsZXJ0XCIpIHtcbiAgICAgIHRpdGxlID0gY29uZmlndXJhdGlvbi50cmFuc2xhdGUoXCJqcy5zaGFyZWQuYWxlcnRcIiwge2RlZmF1bHRWYWx1ZTogXCJBbGVydFwifSlcbiAgICB9IGVsc2UgaWYgKGFyZ3MudHlwZSA9PSBcImVycm9yXCIpIHtcbiAgICAgIHRpdGxlID0gY29uZmlndXJhdGlvbi50cmFuc2xhdGUoXCJqcy5zaGFyZWQuZXJyb3JcIiwge2RlZmF1bHRWYWx1ZTogXCJFcnJvclwifSlcbiAgICB9IGVsc2UgaWYgKGFyZ3MudHlwZSA9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgdGl0bGUgPSBjb25maWd1cmF0aW9uLnRyYW5zbGF0ZShcImpzLnNoYXJlZC5zdWNjZXNzXCIsIHtkZWZhdWx0VmFsdWU6IFwiU3VjY2Vzc1wifSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGl0bGUgPSBjb25maWd1cmF0aW9uLnRyYW5zbGF0ZShcImpzLnNoYXJlZC5ub3RpZmljYXRpb25cIiwge2RlZmF1bHRWYWx1ZTogXCJOb3RpZmljYXRpb25cIn0pXG4gICAgfVxuXG4gICAgZXZlbnRzLmVtaXQoXCJwdXNoTm90aWZpY2F0aW9uXCIsIHtcbiAgICAgIG1lc3NhZ2U6IGFyZ3MudGV4dCxcbiAgICAgIHRpdGxlLFxuICAgICAgdHlwZTogYXJncy50eXBlXG4gICAgfSlcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flash-notifications",
3
- "version": "0.0.46",
3
+ "version": "0.0.48",
4
4
  "description": "My new module",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",