flash-notifications 0.0.48 → 0.0.49

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
@@ -10,6 +10,14 @@ npm install flash-notifications
10
10
 
11
11
  For managed Expo projects, ensure your Expo SDK supports this module and follow the Expo install guidance for modules. For bare React Native projects, install and configure the `expo` package before continuing.
12
12
 
13
+ `expo` is an optional peer dependency: the runtime code never imports it (it is only used by the native module build config). Plain web apps can use this package by aliasing `react-native$` to `react-native-web` in their bundler, for example in webpack:
14
+
15
+ ```js
16
+ resolve: {
17
+ alias: {"react-native$": "react-native-web"}
18
+ }
19
+ ```
20
+
13
21
  ## Setup
14
22
 
15
23
  Render the notification container once near the root of your app so it can listen for events globally.
@@ -69,13 +77,13 @@ FlashNotifications.show({type: "info", text: "Heads up!"})
69
77
 
70
78
  ### FlashNotifications
71
79
 
72
- `FlashNotifications.alert(message)`
80
+ `FlashNotifications.alert(message, options?)`
73
81
  Shows an alert notification with a localized "Alert" title.
74
82
 
75
- `FlashNotifications.error(message)`
83
+ `FlashNotifications.error(message, options?)`
76
84
  Shows an error notification with a localized "Error" title.
77
85
 
78
- `FlashNotifications.success(message)`
86
+ `FlashNotifications.success(message, options?)`
79
87
  Shows a success notification with a localized "Success" title.
80
88
 
81
89
  `FlashNotifications.activity({message})`
@@ -86,13 +94,29 @@ Shows a long-running activity notification with a localized "Activity" title and
86
94
  - `handle.fail(message?)` flashes the error tone, then dismisses.
87
95
  - `handle.done()` dismisses without a tone change.
88
96
 
89
- `FlashNotifications.show({type, text})`
97
+ `FlashNotifications.show({type, text, persistent?, presentation?})`
90
98
  Shows a notification with a localized title based on `type`. Unknown types fall back to the localized "Notification" title.
91
99
 
92
- `FlashNotifications.errorResponse(error)`
93
- Handles Api Maker validation and base errors, converting them into notifications. Unknown errors are logged and rethrown.
100
+ ### Notification options
101
+
102
+ `options` (second argument of `alert`/`error`/`success`/`errorResponse`, or extra keys in `show`) supports:
103
+
104
+ - `persistent: true` — the notification never auto-dismisses. It stays on screen until it is dismissed, like an activity notification, but without a progress bar.
105
+ - `presentation: "modal"` — the notification renders as a centered card over a full-screen backdrop that blocks interaction with the app underneath. It can only be dismissed via its explicit Dismiss button; backdrop clicks and Escape do not dismiss it. On web the dialog carries `role="alertdialog"` and `aria-modal`, focus moves into the dialog on open, and focus returns to the previously focused element on dismiss. The default is `"toast"` (the usual corner stack).
106
+
107
+ ```js
108
+ import {FlashNotifications} from "flash-notifications"
109
+
110
+ FlashNotifications.error("Registration could not be saved.", {
111
+ persistent: true,
112
+ presentation: "modal"
113
+ })
114
+ ```
115
+
116
+ 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()`). Notifications pushed with `persistent: true` stay until dismissed as well.
94
117
 
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()`).
118
+ `FlashNotifications.errorResponse(error, options?)`
119
+ Handles Api Maker validation and base errors, converting them into notifications. Unknown errors are logged and rethrown. The options are passed through to the resulting notification.
96
120
 
97
121
  ### Container
98
122
 
@@ -4,6 +4,8 @@ export type NotificationObjectType = {
4
4
  count: number;
5
5
  id: string | undefined;
6
6
  message: string;
7
+ persistent: boolean | undefined;
8
+ presentation: "toast" | "modal" | undefined;
7
9
  title: string;
8
10
  type: string;
9
11
  };
@@ -15,6 +17,8 @@ export type StoredNotificationType = {
15
17
  measuredHeight: number | undefined;
16
18
  message: string;
17
19
  opacity: import("react-native").Animated.Value;
20
+ persistent: boolean;
21
+ presentation: "toast" | "modal";
18
22
  progress: number | undefined;
19
23
  removing: boolean;
20
24
  timeout: ReturnType<typeof setTimeout> | undefined;
@@ -1 +1 @@
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
+ {"version":3,"file":"index.d.ts","sourceRoot":"/src/","sources":["container/index.jsx"],"names":[],"mappings":";;;WAmBc,MAAM;QACN,MAAM,GAAG,SAAS;aAClB,MAAM;gBACN,OAAO,GAAG,SAAS;kBACnB,OAAO,GAAG,OAAO,GAAG,SAAS;WAC7B,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;gBACrC,OAAO;kBACP,OAAO,GAAG,OAAO;cACjB,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;;kBAxDQ,OAAO"}
@@ -17,6 +17,8 @@ import FlashNotification from "./notification";
17
17
  * @property {number} count
18
18
  * @property {string | undefined} id
19
19
  * @property {string} message
20
+ * @property {boolean | undefined} persistent
21
+ * @property {"toast" | "modal" | undefined} presentation
20
22
  * @property {string} title
21
23
  * @property {string} type
22
24
  */
@@ -29,6 +31,8 @@ import FlashNotification from "./notification";
29
31
  * @property {number | undefined} measuredHeight
30
32
  * @property {string} message
31
33
  * @property {import("react-native").Animated.Value} opacity
34
+ * @property {boolean} persistent
35
+ * @property {"toast" | "modal"} presentation
32
36
  * @property {number | undefined} progress
33
37
  * @property {boolean} removing
34
38
  * @property {ReturnType<typeof setTimeout> | undefined} timeout
@@ -115,15 +119,43 @@ class FlashNotificationsContainer extends ShapeComponent {
115
119
  };
116
120
  return style;
117
121
  }, [isNative, smDown, mdUp, insets.top, insets.right, insets.left]);
118
- return (React.createElement(View
119
- // @ts-expect-error
120
- , {
122
+ // Modal notifications live in their own full-screen overlay instead of the
123
+ // stacked toast container: the overlay covers the whole viewport so the app
124
+ // underneath cannot be interacted with until the modal is dismissed.
125
+ const modalNotifications = notifications.filter(
126
+ /** @param {StoredNotificationType} notification */
127
+ (notification) => notification.presentation == "modal");
128
+ const toastNotifications = notifications.filter(
129
+ /** @param {StoredNotificationType} notification */
130
+ (notification) => notification.presentation == "toast");
131
+ /**
132
+ * @param {StoredNotificationType} notification
133
+ * @returns {React.ReactElement}
134
+ */
135
+ const renderNotification = (notification) => (React.createElement(FlashNotification, { count: notification.count, key: `notification-${notification.count}`, message: notification.message, notification: notification, onMeasured: this.onNotificationMeasured, onRemovedClicked: this.onRemovedClicked, persistent: notification.persistent, presentation: notification.presentation, progress: notification.progress, removing: notification.removing, title: notification.title, type: notification.type }));
136
+ return (React.createElement(React.Fragment, null,
137
+ React.createElement(View
121
138
  // @ts-expect-error
122
- dataSet: this.rootViewDataSet ||= { component: "flash-notifications-container" },
139
+ , {
140
+ // @ts-expect-error
141
+ dataSet: this.rootViewDataSet ||= { component: "flash-notifications-container" },
142
+ // @ts-expect-error React Native types do not include the web-only "fixed" position.
143
+ style: viewStyle, testID: "flash-notificaitons/container" }, toastNotifications.map(renderNotification)),
144
+ modalNotifications.length > 0 ? (React.createElement(View
123
145
  // @ts-expect-error React Native types do not include the web-only "fixed" position.
124
- style: viewStyle, testID: "flash-notificaitons/container" }, notifications.map(
125
- /** @param {StoredNotificationType} notification */
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 }))));
146
+ , {
147
+ // @ts-expect-error React Native types do not include the web-only "fixed" position.
148
+ style: {
149
+ // Unlike the toast container, this overlay swallows pointer events on purpose:
150
+ // a modal blocks interaction with the app underneath until it is dismissed.
151
+ pointerEvents: "auto",
152
+ position: isNative ? "absolute" : "fixed",
153
+ top: 0,
154
+ right: 0,
155
+ bottom: 0,
156
+ left: 0,
157
+ zIndex: 100000
158
+ }, testID: "flash-notifications/modal-overlay" }, modalNotifications.map(renderNotification))) : null));
127
159
  }
128
160
  /**
129
161
  * @param {...unknown} args
@@ -145,8 +177,12 @@ class FlashNotificationsContainer extends ShapeComponent {
145
177
  return;
146
178
  }
147
179
  const count = this.s.count + 1;
148
- // Activity notifications stay on screen until their handle resolves them.
149
- const timeout = type == "activity" ? undefined : setTimeout(() => {
180
+ const persistent = dig(detail, "persistent") == true;
181
+ const presentation = dig(detail, "presentation") == "modal" ? "modal" : "toast";
182
+ // Activity notifications stay on screen until their handle resolves them, and
183
+ // persistent notifications stay until the user dismisses them. Both skip the
184
+ // auto-dismiss timer; only a plain toast gets one.
185
+ const timeout = type == "activity" || persistent ? undefined : setTimeout(() => {
150
186
  debugLog("FlashNotifications: notification timeout", { id: count });
151
187
  this.dismissNotificationByCount(count, "timeout");
152
188
  }, 4000);
@@ -162,6 +198,8 @@ class FlashNotificationsContainer extends ShapeComponent {
162
198
  measuredHeight: undefined,
163
199
  message: digg(detail, "message"),
164
200
  opacity: new Animated.Value(1),
201
+ persistent,
202
+ presentation,
165
203
  progress: undefined,
166
204
  removing: false,
167
205
  timeout,
@@ -170,6 +208,8 @@ class FlashNotificationsContainer extends ShapeComponent {
170
208
  };
171
209
  debugLog("FlashNotifications: notification added", {
172
210
  id: count,
211
+ persistent: notification.persistent,
212
+ presentation: notification.presentation,
173
213
  title: notification.title,
174
214
  type: notification.type
175
215
  });
@@ -300,4 +340,4 @@ class FlashNotificationsContainer extends ShapeComponent {
300
340
  });
301
341
  };
302
342
  }));
303
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbImNvbnRhaW5lci9pbmRleC5qc3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQ25DLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQTtBQUNsQyxpREFBaUQ7QUFDakQsT0FBTyxjQUFjLE1BQU0sa0JBQWtCLENBQUE7QUFDN0MsT0FBTyxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUNyRCxPQUFPLEVBQUMsY0FBYyxFQUFFLGNBQWMsRUFBQyxNQUFNLDRDQUE0QyxDQUFBO0FBQ3pGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUNwRCxPQUFPLGVBQWUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNsRCxPQUFPLFdBQVcsTUFBTSxrQ0FBa0MsQ0FBQTtBQUMxRCxPQUFPLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUUzQyxPQUFPLFFBQVEsTUFBTSxhQUFhLENBQUE7QUFDbEMsT0FBTyxNQUFNLE1BQU0sY0FBYyxDQUFBO0FBQ2pDLE9BQU8saUJBQWlCLE1BQU0sZ0JBQWdCLENBQUE7QUFFOUM7Ozs7Ozs7R0FPRztBQUVIOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUg7Ozs7OztHQU1HO0FBRUg7OztHQUdHO0FBRUg7Ozs7R0FJRztBQUVILGVBQWUsSUFBSSxDQUFDLGNBQWM7QUFDaEM7O0dBRUc7QUFDSCxNQUFNLDJCQUE0QixTQUFRLGNBQWM7SUFDeEQsTUFBTSxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUM7UUFDaEMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNO0tBQ3pCLENBQUMsQ0FBQTtJQUVGLEtBQUssR0FBRztRQUNOLEtBQUssRUFBRSxDQUFDO1FBQ1IsdUNBQXVD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QyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtkaWcsIGRpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG4vLyBAdHMtZXhwZWN0LWVycm9yIFBhY2thZ2Ugc2hpcHMgbm8gLmQudHMgZmlsZXMuXG5pbXBvcnQgcHJvcFR5cGVzRXhhY3QgZnJvbSBcInByb3AtdHlwZXMtZXhhY3RcIlxuaW1wb3J0IFJlYWN0LCB7bWVtbywgdXNlRWZmZWN0LCB1c2VNZW1vfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudCwgU2hhcGVDb21wb25lbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9zaGFwZS1jb21wb25lbnQuanNcIlxuaW1wb3J0IHt1c2VCcmVha3BvaW50fSBmcm9tIFwicmVzcG9uc2l2ZS1icmVha3BvaW50c1wiXG5pbXBvcnQgdXNlRXZlbnRFbWl0dGVyIGZyb20gXCJ5YS11c2UtZXZlbnQtZW1pdHRlclwiXG5pbXBvcnQgdXNlRW52U2Vuc2UgZnJvbSBcImVudi1zZW5zZS9idWlsZC91c2UtZW52LXNlbnNlLmpzXCJcbmltcG9ydCB7QW5pbWF0ZWQsIFZpZXd9IGZyb20gXCJyZWFjdC1uYXRpdmVcIlxuXG5pbXBvcnQgZGVidWdMb2cgZnJvbSBcIi4uL2RlYnVnLmpzXCJcbmltcG9ydCBldmVudHMgZnJvbSBcIi4uL2V2ZW50cy5qc1wiXG5pbXBvcnQgRmxhc2hOb3RpZmljYXRpb24gZnJvbSBcIi4vbm90aWZpY2F0aW9uXCJcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBOb3RpZmljYXRpb25PYmplY3RUeXBlXG4gKiBAcHJvcGVydHkge251bWJlcn0gY291bnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBpZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0aXRsZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IFN0b3JlZE5vdGlmaWNhdGlvblR5cGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb3VudFxuICogQHByb3BlcnR5IHtzdHJpbmcgfCB1bmRlZmluZWR9IGlkXG4gKiBAcHJvcGVydHkge2ltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5BbmltYXRlZC5WYWx1ZX0gaGVpZ2h0XG4gKiBAcHJvcGVydHkge2ltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5BbmltYXRlZC5WYWx1ZX0gbWFyZ2luQm90dG9tXG4gKiBAcHJvcGVydHkge251bWJlciB8IHVuZGVmaW5lZH0gbWVhc3VyZWRIZWlnaHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXNzYWdlXG4gKiBAcHJvcGVydHkge2ltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5BbmltYXRlZC5WYWx1ZX0gb3BhY2l0eVxuICogQHByb3BlcnR5IHtudW1iZXIgfCB1bmRlZmluZWR9IHByb2dyZXNzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlbW92aW5nXG4gKiBAcHJvcGVydHkge1JldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkfSB0aW1lb3V0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGl0bGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBY3Rpdml0eU5vdGlmaWNhdGlvbkRldGFpbFR5cGVcbiAqIEBwcm9wZXJ0eSB7XCJ1cGRhdGVcIiB8IFwic3VjY2VlZFwiIHwgXCJmYWlsXCIgfCBcImRvbmVcIn0gYWN0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nPX0gbWVzc2FnZVxuICogQHByb3BlcnR5IHtudW1iZXI9fSBwcm9ncmVzc1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRmxhc2hOb3RpZmljYXRpb25zQ29udGFpbmVyUHJvcHNcbiAqIEBwcm9wZXJ0eSB7e3RvcD86IG51bWJlciwgcmlnaHQ/OiBudW1iZXIsIGxlZnQ/OiBudW1iZXJ9PX0gaW5zZXRzXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBGbGFzaE5vdGlmaWNhdGlvbnNDb250YWluZXJTdGF0ZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvdW50XG4gKiBAcHJvcGVydHkge1N0b3JlZE5vdGlmaWNhdGlvblR5cGVbXX0gbm90aWZpY2F0aW9uc1xuICovXG5cbmV4cG9ydCBkZWZhdWx0IG1lbW8oc2hhcGVDb21wb25lbnQoXG4gIC8qKlxuICAgKiBAYXVnbWVudHMge1NoYXBlQ29tcG9uZW50PEZsYXNoTm90aWZpY2F0aW9uc0NvbnRhaW5lclByb3BzLCBGbGFzaE5vdGlmaWNhdGlvbnNDb250YWluZXJTdGF0ZT59XG4gICAqL1xuICBjbGFzcyBGbGFzaE5vdGlmaWNhdGlvbnNDb250YWluZXIgZXh0ZW5kcyBTaGFwZUNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSBwcm9wVHlwZXNFeGFjdCh7XG4gICAgaW5zZXRzOiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pXG5cbiAgc3RhdGUgPSB7XG4gICAgY291bnQ6IDAsXG4gICAgLyoqIEB0eXBlIHtTdG9yZWROb3RpZmljYXRpb25UeXBlW119ICovXG4gICAgbm90aWZpY2F0aW9uczogW11cbiAgfVxuXG4gIC8qKiBAdHlwZSB7bnVtYmVyW119ICovXG4gIHRpbWVvdXRzID0gW11cbiAgbm90aWZpY2F0aW9uU3BhY2luZyA9IDE1XG5cbiAgc2V0dXAoKSB7XG4gICAgdXNlRXZlbnRFbWl0dGVyKGV2ZW50cywgXCJwdXNoTm90aWZpY2F0aW9uXCIsIHRoaXMub25QdXNoTm90aWZpY2F0aW9uRXZlbnQpXG4gICAgdXNlRXZlbnRFbWl0dGVyKGV2ZW50cywgXCJhY3Rpdml0eU5vdGlmaWNhdGlvblwiLCB0aGlzLm9uQWN0aXZpdHlOb3RpZmljYXRpb25FdmVudClcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCB0aW1lb3V0IG9mIHRoaXMudGltZW91dHMpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIFtdKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtub3RpZmljYXRpb25zfSA9IHRoaXMuc1xuICAgIGNvbnN0IGluc2V0cyA9IHRoaXMucHJvcHMuaW5zZXRzIHx8IHt9XG5cbiAgICBjb25zdCB7c21Eb3duLCBtZFVwfSA9IHVzZUJyZWFrcG9pbnQoKVxuICAgIGNvbnN0IHtpc05hdGl2ZX0gPSB1c2VFbnZTZW5zZSgpXG5cbiAgICBjb25zdCB2aWV3U3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGxldCB0b3AgPSAyMFxuICAgICAgbGV0IHJpZ2h0ID0gMFxuICAgICAgbGV0IGxlZnQgPSB1bmRlZmluZWRcblxuICAgICAgaWYgKGluc2V0cy50b3ApIHRvcCArPSBpbnNldHMudG9wXG4gICAgICBpZiAoaW5zZXRzLnJpZ2h0KSByaWdodCArPSBpbnNldHMucmlnaHRcblxuICAgICAgaWYgKHNtRG93bikge1xuICAgICAgICBsZWZ0ID0gMjBcblxuICAgICAgICBpZiAoaW5zZXRzLmxlZnQpIGxlZnQgKz0gaW5zZXRzLmxlZnRcblxuICAgICAgICByaWdodCArPSAyMFxuICAgICAgfSBlbHNlIGlmIChtZFVwKSB7XG4gICAgICAgIHJpZ2h0ICs9IDIwXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0eWxlID0ge1xuICAgICAgICAvLyBcImJveC1ub25lXCIgc28gdGhlIGZpeGVkLCBoaWdoLXpJbmRleCBjb250YWluZXIgbmV2ZXIgaW50ZXJjZXB0cyBwb2ludGVyIGV2ZW50cyBvbiBpdHMgb3duXG4gICAgICAgIC8vIGJvdW5kczogZW1wdHkgZ2FwcyBwYXNzIHRocm91Z2gsIGFuZCBhIGZhZGluZyBub3RpZmljYXRpb24gKHdob3NlIHdyYXBwZXIgaXMgc2V0IHRvXG4gICAgICAgIC8vIHBvaW50ZXJFdmVudHMgXCJub25lXCIgd2hpbGUgcmVtb3ZpbmcpIHBhc3NlcyB0aHJvdWdoIHRvbywgd2hpbGUgYSBsaXZlIG5vdGlmaWNhdGlvbiBzdGlsbFxuICAgICAgICAvLyByZWNlaXZlcyBpdHMgb3duIHByZXNzZXMuIFdpdGhvdXQgdGhpcyB0aGUgY29udGFpbmVyIGl0c2VsZiB3b3VsZCBzd2FsbG93IGNsaWNrcy9maWxsc1xuICAgICAgICAvLyBhaW1lZCBhdCB0aGUgZm9ybSBiZW5lYXRoIGl0IGR1cmluZyBhIG5vdGlmaWNhdGlvbidzIGZhZGUtb3V0LlxuICAgICAgICBwb2ludGVyRXZlbnRzOiBcImJveC1ub25lXCIsXG4gICAgICAgIHBvc2l0aW9uOiBpc05hdGl2ZSA/IFwiYWJzb2x1dGVcIiA6IFwiZml4ZWRcIixcbiAgICAgICAgdG9wLFxuICAgICAgICByaWdodCxcbiAgICAgICAgbGVmdCxcbiAgICAgICAgekluZGV4OiA5OTk5OVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3R5bGVcbiAgICB9LCBbaXNOYXRpdmUsIHNtRG93biwgbWRVcCwgaW5zZXRzLnRvcCwgaW5zZXRzLnJpZ2h0LCBpbnNldHMubGVmdF0pXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBkYXRhU2V0PXt0aGlzLnJvb3RWaWV3RGF0YVNldCB8fD0ge2NvbXBvbmVudDogXCJmbGFzaC1ub3RpZmljYXRpb25zLWNvbnRhaW5lclwifX1cbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBSZWFjdCBOYXRpdmUgdHlwZXMgZG8gbm90IGluY2x1ZGUgdGhlIHdlYi1vbmx5IFwiZml4ZWRcIiBwb3NpdGlvbi5cbiAgICAgICAgc3R5bGU9e3ZpZXdTdHlsZX1cbiAgICAgICAgdGVzdElEPVwiZmxhc2gtbm90aWZpY2FpdG9ucy9jb250YWluZXJcIlxuICAgICAgPlxuICAgICAgICB7bm90aWZpY2F0aW9ucy5tYXAoXG4gICAgICAgICAgLyoqIEBwYXJhbSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZX0gbm90aWZpY2F0aW9uICovXG4gICAgICAgICAgKG5vdGlmaWNhdGlvbikgPT5cbiAgICAgICAgICA8Rmxhc2hOb3RpZmljYXRpb25cbiAgICAgICAgICAgIGNvdW50PXtub3RpZmljYXRpb24uY291bnR9XG4gICAgICAgICAgICBrZXk9e2Bub3RpZmljYXRpb24tJHtub3RpZmljYXRpb24uY291bnR9YH1cbiAgICAgICAgICAgIG1lc3NhZ2U9e25vdGlmaWNhdGlvbi5tZXNzYWdlfVxuICAgICAgICAgICAgbm90aWZpY2F0aW9uPXtub3RpZmljYXRpb259XG4gICAgICAgICAgICBvbk1lYXN1cmVkPXt0aGlzLm9uTm90aWZpY2F0aW9uTWVhc3VyZWR9XG4gICAgICAgICAgICBvblJlbW92ZWRDbGlja2VkPXt0aGlzLm9uUmVtb3ZlZENsaWNrZWR9XG4gICAgICAgICAgICBwcm9ncmVzcz17bm90aWZpY2F0aW9uLnByb2dyZXNzfVxuICAgICAgICAgICAgcmVtb3Zpbmc9e25vdGlmaWNhdGlvbi5yZW1vdmluZ31cbiAgICAgICAgICAgIHRpdGxlPXtub3RpZmljYXRpb24udGl0bGV9XG4gICAgICAgICAgICB0eXBlPXtub3RpZmljYXRpb24udHlwZX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gey4uLnVua25vd259IGFyZ3NcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvblB1c2hOb3RpZmljYXRpb25FdmVudCA9ICguLi5hcmdzKSA9PiB7XG4gICAgdGhpcy5vblB1c2hOb3RpZmljYXRpb24oLyoqIEB0eXBlIHtOb3RpZmljYXRpb25PYmplY3RUeXBlfSAqLyAoYXJnc1swXSkpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtOb3RpZmljYXRpb25PYmplY3RUeXBlfSBkZXRhaWxcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvblB1c2hOb3RpZmljYXRpb24gPSAoZGV0YWlsKSA9PiB7XG4gICAgY29uc3QgdHlwZSA9IGRpZ2coZGV0YWlsLCBcInR5cGVcIilcblxuICAgIC8vIEFuIGFjdGl2aXR5IG5vdGlmaWNhdGlvbiB3aXRob3V0IGFuIGlkIGhhcyBubyBoYW5kbGUgdG8gcmVzb2x2ZSBpdCBhbmRcbiAgICAvLyB3b3VsZCBzdGF5IG9uIHNjcmVlbiBmb3JldmVyLCBzbyBpdCBpcyBkcm9wcGVkLlxuICAgIGlmICh0eXBlID09IFwiYWN0aXZpdHlcIiAmJiBkZXRhaWwuaWQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogYWN0aXZpdHkgbm90aWZpY2F0aW9uIHdpdGhvdXQgaWQgaWdub3JlZFwiKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY291bnQgPSB0aGlzLnMuY291bnQgKyAxXG4gICAgLy8gQWN0aXZpdHkgbm90aWZpY2F0aW9ucyBzdGF5IG9uIHNjcmVlbiB1bnRpbCB0aGVpciBoYW5kbGUgcmVzb2x2ZXMgdGhlbS5cbiAgICBjb25zdCB0aW1lb3V0ID0gdHlwZSA9PSBcImFjdGl2aXR5XCIgPyB1bmRlZmluZWQgOiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBub3RpZmljYXRpb24gdGltZW91dFwiLCB7aWQ6IGNvdW50fSlcbiAgICAgIHRoaXMuZGlzbWlzc05vdGlmaWNhdGlvbkJ5Q291bnQoY291bnQsIFwidGltZW91dFwiKVxuICAgIH0sIDQwMDApXG5cbiAgICBpZiAodGltZW91dCkge1xuICAgICAgdGhpcy50aW1lb3V0cy5wdXNoKHRpbWVvdXQpXG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtTdG9yZWROb3RpZmljYXRpb25UeXBlfSAqL1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHtcbiAgICAgIGNvdW50LFxuICAgICAgaGVpZ2h0OiBuZXcgQW5pbWF0ZWQuVmFsdWUoMCksXG4gICAgICBpZDogZGlnKGRldGFpbCwgXCJpZFwiKSxcbiAgICAgIG1hcmdpbkJvdHRvbTogbmV3IEFuaW1hdGVkLlZhbHVlKHRoaXMubm90aWZpY2F0aW9uU3BhY2luZyksXG4gICAgICBtZWFzdXJlZEhlaWdodDogdW5kZWZpbmVkLFxuICAgICAgbWVzc2FnZTogZGlnZyhkZXRhaWwsIFwibWVzc2FnZVwiKSxcbiAgICAgIG9wYWNpdHk6IG5ldyBBbmltYXRlZC5WYWx1ZSgxKSxcbiAgICAgIHByb2dyZXNzOiB1bmRlZmluZWQsXG4gICAgICByZW1vdmluZzogZmFsc2UsXG4gICAgICB0aW1lb3V0LFxuICAgICAgdGl0bGU6IGRpZ2coZGV0YWlsLCBcInRpdGxlXCIpLFxuICAgICAgdHlwZVxuICAgIH1cblxuICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBub3RpZmljYXRpb24gYWRkZWRcIiwge1xuICAgICAgaWQ6IGNvdW50LFxuICAgICAgdGl0bGU6IG5vdGlmaWNhdGlvbi50aXRsZSxcbiAgICAgIHR5cGU6IG5vdGlmaWNhdGlvbi50eXBlXG4gICAgfSlcblxuICAgIHRoaXMuc2V0U3RhdGUoe2NvdW50LCBub3RpZmljYXRpb25zOiB0aGlzLnMubm90aWZpY2F0aW9ucy5jb25jYXQoW25vdGlmaWNhdGlvbl0pfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N0b3JlZE5vdGlmaWNhdGlvblR5cGV9IG5vdGlmaWNhdGlvblxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uUmVtb3ZlZENsaWNrZWQgPSAobm90aWZpY2F0aW9uKSA9PiB7XG4gICAgZGVidWdMb2coXCJGbGFzaE5vdGlmaWNhdGlvbnM6IG5vdGlmaWNhdGlvbiBwcmVzc2VkXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50fSlcbiAgICB0aGlzLmRpc21pc3NOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBcInByZXNzXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsuLi51bmtub3dufSBhcmdzXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25BY3Rpdml0eU5vdGlmaWNhdGlvbkV2ZW50ID0gKC4uLmFyZ3MpID0+IHtcbiAgICB0aGlzLm9uQWN0aXZpdHlOb3RpZmljYXRpb24oLyoqIEB0eXBlIHtBY3Rpdml0eU5vdGlmaWNhdGlvbkRldGFpbFR5cGV9ICovIChhcmdzWzBdKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0FjdGl2aXR5Tm90aWZpY2F0aW9uRGV0YWlsVHlwZX0gZGV0YWlsXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25BY3Rpdml0eU5vdGlmaWNhdGlvbiA9IChkZXRhaWwpID0+IHtcbiAgICBjb25zdCBub3RpZmljYXRpb24gPSAvKiogQHR5cGUge1N0b3JlZE5vdGlmaWNhdGlvblR5cGUgfCB1bmRlZmluZWR9ICovICh0aGlzLnMubm90aWZpY2F0aW9ucy5maW5kKFxuICAgICAgLyoqIEBwYXJhbSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZX0gaXRlbSAqL1xuICAgICAgKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGRldGFpbC5pZFxuICAgICkpXG4gICAgaWYgKCFub3RpZmljYXRpb24gfHwgbm90aWZpY2F0aW9uLnJlbW92aW5nKSB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogYWN0aXZpdHkgbm90aWZpY2F0aW9uIG5vdCBmb3VuZFwiLCB7aWQ6IGRldGFpbC5pZCwgYWN0aW9uOiBkZXRhaWwuYWN0aW9ufSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChkZXRhaWwuYWN0aW9uID09IFwidXBkYXRlXCIpIHtcbiAgICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBhY3Rpdml0eSBwcm9ncmVzcyB1cGRhdGVkXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50LCBwcm9ncmVzczogZGV0YWlsLnByb2dyZXNzfSlcbiAgICAgIG5vdGlmaWNhdGlvbi5wcm9ncmVzcyA9IGRldGFpbC5wcm9ncmVzc1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7bm90aWZpY2F0aW9uczogWy4uLnRoaXMucy5ub3RpZmljYXRpb25zXX0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoZGV0YWlsLmFjdGlvbiA9PSBcInN1Y2NlZWRcIiB8fCBkZXRhaWwuYWN0aW9uID09IFwiZmFpbFwiKSB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogYWN0aXZpdHkgcmVzb2x2ZWRcIiwge2lkOiBub3RpZmljYXRpb24uY291bnQsIGFjdGlvbjogZGV0YWlsLmFjdGlvbn0pXG4gICAgICAvLyBNYXAgdGhlIGFjdGlvbiB2ZXJicyBvbnRvIHRoZSBjYW5vbmljYWwgdHlwZSBuYW1lcyBzbyB0aGUgY2FyZFxuICAgICAgLy8gcmVuZGVycyB0aGUgZXhpc3Rpbmcgc3VjY2Vzcy9lcnJvciB0b25lcyBkdXJpbmcgdGhlIGRpc21pc3MgZmxhc2guXG4gICAgICBub3RpZmljYXRpb24udHlwZSA9IGRldGFpbC5hY3Rpb24gPT0gXCJzdWNjZWVkXCIgPyBcInN1Y2Nlc3NcIiA6IFwiZXJyb3JcIlxuICAgICAgaWYgKGRldGFpbC5tZXNzYWdlKSB7XG4gICAgICAgIG5vdGlmaWNhdGlvbi5tZXNzYWdlID0gZGV0YWlsLm1lc3NhZ2VcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoe25vdGlmaWNhdGlvbnM6IFsuLi50aGlzLnMubm90aWZpY2F0aW9uc119KVxuICAgICAgdGhpcy5kaXNtaXNzTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgZGV0YWlsLmFjdGlvbilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBhY3Rpdml0eSBkaXNtaXNzZWRcIiwge2lkOiBub3RpZmljYXRpb24uY291bnQsIGFjdGlvbjogZGV0YWlsLmFjdGlvbn0pXG4gICAgdGhpcy5kaXNtaXNzTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgXCJkb25lXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtTdG9yZWROb3RpZmljYXRpb25UeXBlfSBub3RpZmljYXRpb25cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1lYXN1cmVkSGVpZ2h0XG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25Ob3RpZmljYXRpb25NZWFzdXJlZCA9IChub3RpZmljYXRpb24sIG1lYXN1cmVkSGVpZ2h0KSA9PiB7XG4gICAgaWYgKG5vdGlmaWNhdGlvbi5tZWFzdXJlZEhlaWdodCkgcmV0dXJuXG5cbiAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogbm90aWZpY2F0aW9uIG1lYXN1cmVkXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50LCBoZWlnaHQ6IG1lYXN1cmVkSGVpZ2h0fSlcblxuICAgIG5vdGlmaWNhdGlvbi5tZWFzdXJlZEhlaWdodCA9IG1lYXN1cmVkSGVpZ2h0XG4gICAgbm90aWZpY2F0aW9uLmhlaWdodC5zZXRWYWx1ZShtZWFzdXJlZEhlaWdodClcbiAgICB0aGlzLnNldFN0YXRlKHtub3RpZmljYXRpb25zOiBbLi4udGhpcy5zLm5vdGlmaWNhdGlvbnNdfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY291bnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAqL1xuICBkaXNtaXNzTm90aWZpY2F0aW9uQnlDb3VudCA9IChjb3VudCwgcmVhc29uID0gXCJ1bmtub3duXCIpID0+IHtcbiAgICBjb25zdCBub3RpZmljYXRpb24gPSAvKiogQHR5cGUge1N0b3JlZE5vdGlmaWNhdGlvblR5cGUgfCB1bmRlZmluZWR9ICovICh0aGlzLnMubm90aWZpY2F0aW9ucy5maW5kKFxuICAgICAgLyoqIEBwYXJhbSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZX0gaXRlbSAqL1xuICAgICAgKGl0ZW0pID0+IGl0ZW0uY291bnQgPT0gY291bnRcbiAgICApKVxuICAgIGlmICghbm90aWZpY2F0aW9uKSB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogbm90aWZpY2F0aW9uIG5vdCBmb3VuZFwiLCB7aWQ6IGNvdW50LCByZWFzb259KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5kaXNtaXNzTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgcmVhc29uKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZX0gbm90aWZpY2F0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGRpc21pc3NOb3RpZmljYXRpb24gPSAobm90aWZpY2F0aW9uLCByZWFzb24gPSBcInVua25vd25cIikgPT4ge1xuICAgIGlmIChub3RpZmljYXRpb24ucmVtb3ZpbmcpIHtcbiAgICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBub3RpZmljYXRpb24gYWxyZWFkeSByZW1vdmluZ1wiLCB7aWQ6IG5vdGlmaWNhdGlvbi5jb3VudCwgcmVhc29ufSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIG5vdGlmaWNhdGlvbi5yZW1vdmluZyA9IHRydWVcbiAgICBpZiAobm90aWZpY2F0aW9uLnRpbWVvdXQpIGNsZWFyVGltZW91dChub3RpZmljYXRpb24udGltZW91dClcblxuICAgIGlmICghbm90aWZpY2F0aW9uLm1lYXN1cmVkSGVpZ2h0KSB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogbm90aWZpY2F0aW9uIG1pc3NpbmcgbWVhc3VyZWQgaGVpZ2h0XCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50fSlcbiAgICAgIG5vdGlmaWNhdGlvbi5tZWFzdXJlZEhlaWdodCA9IDFcbiAgICAgIG5vdGlmaWNhdGlvbi5oZWlnaHQuc2V0VmFsdWUoMSlcbiAgICB9XG5cbiAgICAvLyBSZS1yZW5kZXIgaW1tZWRpYXRlbHkgc28gdGhlIGNsb3Npbmcgbm90aWZpY2F0aW9uIGRyb3BzIHBvaW50ZXIgZXZlbnRzIChwb2ludGVyRXZlbnRzPVwibm9uZVwiKVxuICAgIC8vIHRoZSBpbnN0YW50IGl0IHN0YXJ0cyBmYWRpbmcgb3V0LiBPdGhlcndpc2UgdGhlIGZhZGluZyBvdmVybGF5IGtlZXBzIGludGVyY2VwdGluZyB0aGUgbmV4dFxuICAgIC8vIGNsaWNrL2ZpbGwgZm9yIHRoZSB3aG9sZSBmYWRlIGR1cmF0aW9uIGV2ZW4gdGhvdWdoIGl0IGlzIG9uIGl0cyB3YXkgb3V0LlxuICAgIHRoaXMuc2V0U3RhdGUoe25vdGlmaWNhdGlvbnM6IFsuLi50aGlzLnMubm90aWZpY2F0aW9uc119KVxuXG4gICAgZGVidWdMb2coXCJGbGFzaE5vdGlmaWNhdGlvbnM6IGFuaW1hdGlvbnMgYmVnaW5cIiwge1xuICAgICAgaWQ6IG5vdGlmaWNhdGlvbi5jb3VudCxcbiAgICAgIGFuaW1hdGlvbnM6IFtcIm9wYWNpdHlcIiwgXCJoZWlnaHRcIiwgXCJtYXJnaW5Cb3R0b21cIl0sXG4gICAgICByZWFzb25cbiAgICB9KVxuICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBmYWRlIGFuaW1hdGlvbiBiZWdpblwiLCB7aWQ6IG5vdGlmaWNhdGlvbi5jb3VudCwgcmVhc29ufSlcblxuICAgIGNvbnN0IGRpc21pc3NEdXJhdGlvbiA9IHJlYXNvbiA9PT0gXCJwcmVzc1wiID8gODAgOiAyMDBcblxuICAgIEFuaW1hdGVkLnBhcmFsbGVsKFtcbiAgICAgIEFuaW1hdGVkLnRpbWluZyhub3RpZmljYXRpb24ub3BhY2l0eSwge3RvVmFsdWU6IDAsIGR1cmF0aW9uOiBkaXNtaXNzRHVyYXRpb24sIHVzZU5hdGl2ZURyaXZlcjogZmFsc2V9KSxcbiAgICAgIEFuaW1hdGVkLnRpbWluZyhub3RpZmljYXRpb24uaGVpZ2h0LCB7dG9WYWx1ZTogMCwgZHVyYXRpb246IGRpc21pc3NEdXJhdGlvbiwgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZX0pLFxuICAgICAgQW5pbWF0ZWQudGltaW5nKG5vdGlmaWNhdGlvbi5tYXJnaW5Cb3R0b20sIHt0b1ZhbHVlOiAwLCBkdXJhdGlvbjogZGlzbWlzc0R1cmF0aW9uLCB1c2VOYXRpdmVEcml2ZXI6IGZhbHNlfSlcbiAgICBdKS5zdGFydCgoKSA9PiB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogYW5pbWF0aW9ucyBlbmRcIiwge1xuICAgICAgICBpZDogbm90aWZpY2F0aW9uLmNvdW50LFxuICAgICAgICBhbmltYXRpb25zOiBbXCJvcGFjaXR5XCIsIFwiaGVpZ2h0XCIsIFwibWFyZ2luQm90dG9tXCJdLFxuICAgICAgICByZWFzb25cbiAgICAgIH0pXG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogZmFkZSBhbmltYXRpb24gZW5kXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50LCByZWFzb259KVxuXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgbm90aWZpY2F0aW9uczogdGhpcy5zLm5vdGlmaWNhdGlvbnMuZmlsdGVyKFxuICAgICAgICAgIC8qKiBAcGFyYW0ge1N0b3JlZE5vdGlmaWNhdGlvblR5cGV9IGl0ZW0gKi9cbiAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5jb3VudCAhPSBub3RpZmljYXRpb24uY291bnRcbiAgICAgICAgKVxuICAgICAgfSlcblxuICAgICAgZGVidWdMb2coXCJGbGFzaE5vdGlmaWNhdGlvbnM6IG5vdGlmaWNhdGlvbiByZW1vdmVkXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50LCByZWFzb259KVxuICAgIH0pXG4gIH1cbn0pKVxuIl19
343
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbImNvbnRhaW5lci9pbmRleC5qc3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQ25DLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQTtBQUNsQyxpREFBaUQ7QUFDakQsT0FBTyxjQUFjLE1BQU0sa0JBQWtCLENBQUE7QUFDN0MsT0FBTyxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUNyRCxPQUFPLEVBQUMsY0FBYyxFQUFFLGNBQWMsRUFBQyxNQUFNLDRDQUE0QyxDQUFBO0FBQ3pGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUNwRCxPQUFPLGVBQWUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNsRCxPQUFPLFdBQVcsTUFBTSxrQ0FBa0MsQ0FBQTtBQUMxRCxPQUFPLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUUzQyxPQUFPLFFBQVEsTUFBTSxhQUFhLENBQUE7QUFDbEMsT0FBTyxNQUFNLE1BQU0sY0FBYyxDQUFBO0FBQ2pDLE9BQU8saUJBQWlCLE1BQU0sZ0JBQWdCLENBQUE7QUFFOUM7Ozs7Ozs7OztHQVNHO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSDs7Ozs7O0dBTUc7QUFFSDs7O0dBR0c7QUFFSDs7OztHQUlHO0FBRUgsZUFBZSxJQUFJLENBQUMsY0FBYztBQUNoQzs7R0FFRztBQUNILE1BQU0sMkJBQTRCLFNBQVEsY0FBYztJQUN4RCxNQUFNLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQztRQUNoQyxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07S0FDekIsQ0FBQyxDQUFBO0lBRUYsS0FBSyxHQUFHO1FBQ04sS0FBSyxFQUFFLENBQUM7UUFDUix1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QkFDM0MsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksWUFBWSxDQUFDLEtBQUssQ0FDM0M7YUFDRixDQUFDLENBQUE7WUFFRixRQUFRLENBQUMsMENBQTBDLEVBQUUsRUFBQyxFQUFFLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBQ3hGLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFBO0NBQ0YsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtkaWcsIGRpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG4vLyBAdHMtZXhwZWN0LWVycm9yIFBhY2thZ2Ugc2hpcHMgbm8gLmQudHMgZmlsZXMuXG5pbXBvcnQgcHJvcFR5cGVzRXhhY3QgZnJvbSBcInByb3AtdHlwZXMtZXhhY3RcIlxuaW1wb3J0IFJlYWN0LCB7bWVtbywgdXNlRWZmZWN0LCB1c2VNZW1vfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudCwgU2hhcGVDb21wb25lbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9zaGFwZS1jb21wb25lbnQuanNcIlxuaW1wb3J0IHt1c2VCcmVha3BvaW50fSBmcm9tIFwicmVzcG9uc2l2ZS1icmVha3BvaW50c1wiXG5pbXBvcnQgdXNlRXZlbnRFbWl0dGVyIGZyb20gXCJ5YS11c2UtZXZlbnQtZW1pdHRlclwiXG5pbXBvcnQgdXNlRW52U2Vuc2UgZnJvbSBcImVudi1zZW5zZS9idWlsZC91c2UtZW52LXNlbnNlLmpzXCJcbmltcG9ydCB7QW5pbWF0ZWQsIFZpZXd9IGZyb20gXCJyZWFjdC1uYXRpdmVcIlxuXG5pbXBvcnQgZGVidWdMb2cgZnJvbSBcIi4uL2RlYnVnLmpzXCJcbmltcG9ydCBldmVudHMgZnJvbSBcIi4uL2V2ZW50cy5qc1wiXG5pbXBvcnQgRmxhc2hOb3RpZmljYXRpb24gZnJvbSBcIi4vbm90aWZpY2F0aW9uXCJcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBOb3RpZmljYXRpb25PYmplY3RUeXBlXG4gKiBAcHJvcGVydHkge251bWJlcn0gY291bnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBpZFxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gcGVyc2lzdGVudFxuICogQHByb3BlcnR5IHtcInRvYXN0XCIgfCBcIm1vZGFsXCIgfCB1bmRlZmluZWR9IHByZXNlbnRhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRpdGxlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU3RvcmVkTm90aWZpY2F0aW9uVHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvdW50XG4gKiBAcHJvcGVydHkge3N0cmluZyB8IHVuZGVmaW5lZH0gaWRcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBoZWlnaHRcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBtYXJnaW5Cb3R0b21cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBtZWFzdXJlZEhlaWdodFxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBvcGFjaXR5XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBlcnNpc3RlbnRcbiAqIEBwcm9wZXJ0eSB7XCJ0b2FzdFwiIHwgXCJtb2RhbFwifSBwcmVzZW50YXRpb25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBwcm9ncmVzc1xuICogQHByb3BlcnR5IHtib29sZWFufSByZW1vdmluZ1xuICogQHByb3BlcnR5IHtSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZH0gdGltZW91dFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRpdGxlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQWN0aXZpdHlOb3RpZmljYXRpb25EZXRhaWxUeXBlXG4gKiBAcHJvcGVydHkge1widXBkYXRlXCIgfCBcInN1Y2NlZWRcIiB8IFwiZmFpbFwiIHwgXCJkb25lXCJ9IGFjdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IGlkXG4gKiBAcHJvcGVydHkge3N0cmluZz19IG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyPX0gcHJvZ3Jlc3NcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZsYXNoTm90aWZpY2F0aW9uc0NvbnRhaW5lclByb3BzXG4gKiBAcHJvcGVydHkge3t0b3A/OiBudW1iZXIsIHJpZ2h0PzogbnVtYmVyLCBsZWZ0PzogbnVtYmVyfT19IGluc2V0c1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRmxhc2hOb3RpZmljYXRpb25zQ29udGFpbmVyU3RhdGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjb3VudFxuICogQHByb3BlcnR5IHtTdG9yZWROb3RpZmljYXRpb25UeXBlW119IG5vdGlmaWNhdGlvbnNcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBtZW1vKHNoYXBlQ29tcG9uZW50KFxuICAvKipcbiAgICogQGF1Z21lbnRzIHtTaGFwZUNvbXBvbmVudDxGbGFzaE5vdGlmaWNhdGlvbnNDb250YWluZXJQcm9wcywgRmxhc2hOb3RpZmljYXRpb25zQ29udGFpbmVyU3RhdGU+fVxuICAgKi9cbiAgY2xhc3MgRmxhc2hOb3RpZmljYXRpb25zQ29udGFpbmVyIGV4dGVuZHMgU2hhcGVDb21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0gcHJvcFR5cGVzRXhhY3Qoe1xuICAgIGluc2V0czogUHJvcFR5cGVzLm9iamVjdFxuICB9KVxuXG4gIHN0YXRlID0ge1xuICAgIGNvdW50OiAwLFxuICAgIC8qKiBAdHlwZSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZVtdfSAqL1xuICAgIG5vdGlmaWNhdGlvbnM6IFtdXG4gIH1cblxuICAvKiogQHR5cGUge251bWJlcltdfSAqL1xuICB0aW1lb3V0cyA9IFtdXG4gIG5vdGlmaWNhdGlvblNwYWNpbmcgPSAxNVxuXG4gIHNldHVwKCkge1xuICAgIHVzZUV2ZW50RW1pdHRlcihldmVudHMsIFwicHVzaE5vdGlmaWNhdGlvblwiLCB0aGlzLm9uUHVzaE5vdGlmaWNhdGlvbkV2ZW50KVxuICAgIHVzZUV2ZW50RW1pdHRlcihldmVudHMsIFwiYWN0aXZpdHlOb3RpZmljYXRpb25cIiwgdGhpcy5vbkFjdGl2aXR5Tm90aWZpY2F0aW9uRXZlbnQpXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgdGltZW91dCBvZiB0aGlzLnRpbWVvdXRzKSB7XG4gICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBbXSlcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7bm90aWZpY2F0aW9uc30gPSB0aGlzLnNcbiAgICBjb25zdCBpbnNldHMgPSB0aGlzLnByb3BzLmluc2V0cyB8fCB7fVxuXG4gICAgY29uc3Qge3NtRG93biwgbWRVcH0gPSB1c2VCcmVha3BvaW50KClcbiAgICBjb25zdCB7aXNOYXRpdmV9ID0gdXNlRW52U2Vuc2UoKVxuXG4gICAgY29uc3Qgdmlld1N0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICBsZXQgdG9wID0gMjBcbiAgICAgIGxldCByaWdodCA9IDBcbiAgICAgIGxldCBsZWZ0ID0gdW5kZWZpbmVkXG5cbiAgICAgIGlmIChpbnNldHMudG9wKSB0b3AgKz0gaW5zZXRzLnRvcFxuICAgICAgaWYgKGluc2V0cy5yaWdodCkgcmlnaHQgKz0gaW5zZXRzLnJpZ2h0XG5cbiAgICAgIGlmIChzbURvd24pIHtcbiAgICAgICAgbGVmdCA9IDIwXG5cbiAgICAgICAgaWYgKGluc2V0cy5sZWZ0KSBsZWZ0ICs9IGluc2V0cy5sZWZ0XG5cbiAgICAgICAgcmlnaHQgKz0gMjBcbiAgICAgIH0gZWxzZSBpZiAobWRVcCkge1xuICAgICAgICByaWdodCArPSAyMFxuICAgICAgfVxuXG4gICAgICBjb25zdCBzdHlsZSA9IHtcbiAgICAgICAgLy8gXCJib3gtbm9uZVwiIHNvIHRoZSBmaXhlZCwgaGlnaC16SW5kZXggY29udGFpbmVyIG5ldmVyIGludGVyY2VwdHMgcG9pbnRlciBldmVudHMgb24gaXRzIG93blxuICAgICAgICAvLyBib3VuZHM6IGVtcHR5IGdhcHMgcGFzcyB0aHJvdWdoLCBhbmQgYSBmYWRpbmcgbm90aWZpY2F0aW9uICh3aG9zZSB3cmFwcGVyIGlzIHNldCB0b1xuICAgICAgICAvLyBwb2ludGVyRXZlbnRzIFwibm9uZVwiIHdoaWxlIHJlbW92aW5nKSBwYXNzZXMgdGhyb3VnaCB0b28sIHdoaWxlIGEgbGl2ZSBub3RpZmljYXRpb24gc3RpbGxcbiAgICAgICAgLy8gcmVjZWl2ZXMgaXRzIG93biBwcmVzc2VzLiBXaXRob3V0IHRoaXMgdGhlIGNvbnRhaW5lciBpdHNlbGYgd291bGQgc3dhbGxvdyBjbGlja3MvZmlsbHNcbiAgICAgICAgLy8gYWltZWQgYXQgdGhlIGZvcm0gYmVuZWF0aCBpdCBkdXJpbmcgYSBub3RpZmljYXRpb24ncyBmYWRlLW91dC5cbiAgICAgICAgcG9pbnRlckV2ZW50czogXCJib3gtbm9uZVwiLFxuICAgICAgICBwb3NpdGlvbjogaXNOYXRpdmUgPyBcImFic29sdXRlXCIgOiBcImZpeGVkXCIsXG4gICAgICAgIHRvcCxcbiAgICAgICAgcmlnaHQsXG4gICAgICAgIGxlZnQsXG4gICAgICAgIHpJbmRleDogOTk5OTlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0eWxlXG4gICAgfSwgW2lzTmF0aXZlLCBzbURvd24sIG1kVXAsIGluc2V0cy50b3AsIGluc2V0cy5yaWdodCwgaW5zZXRzLmxlZnRdKVxuXG4gICAgLy8gTW9kYWwgbm90aWZpY2F0aW9ucyBsaXZlIGluIHRoZWlyIG93biBmdWxsLXNjcmVlbiBvdmVybGF5IGluc3RlYWQgb2YgdGhlXG4gICAgLy8gc3RhY2tlZCB0b2FzdCBjb250YWluZXI6IHRoZSBvdmVybGF5IGNvdmVycyB0aGUgd2hvbGUgdmlld3BvcnQgc28gdGhlIGFwcFxuICAgIC8vIHVuZGVybmVhdGggY2Fubm90IGJlIGludGVyYWN0ZWQgd2l0aCB1bnRpbCB0aGUgbW9kYWwgaXMgZGlzbWlzc2VkLlxuICAgIGNvbnN0IG1vZGFsTm90aWZpY2F0aW9ucyA9IG5vdGlmaWNhdGlvbnMuZmlsdGVyKFxuICAgICAgLyoqIEBwYXJhbSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZX0gbm90aWZpY2F0aW9uICovXG4gICAgICAobm90aWZpY2F0aW9uKSA9PiBub3RpZmljYXRpb24ucHJlc2VudGF0aW9uID09IFwibW9kYWxcIlxuICAgIClcbiAgICBjb25zdCB0b2FzdE5vdGlmaWNhdGlvbnMgPSBub3RpZmljYXRpb25zLmZpbHRlcihcbiAgICAgIC8qKiBAcGFyYW0ge1N0b3JlZE5vdGlmaWNhdGlvblR5cGV9IG5vdGlmaWNhdGlvbiAqL1xuICAgICAgKG5vdGlmaWNhdGlvbikgPT4gbm90aWZpY2F0aW9uLnByZXNlbnRhdGlvbiA9PSBcInRvYXN0XCJcbiAgICApXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1N0b3JlZE5vdGlmaWNhdGlvblR5cGV9IG5vdGlmaWNhdGlvblxuICAgICAqIEByZXR1cm5zIHtSZWFjdC5SZWFjdEVsZW1lbnR9XG4gICAgICovXG4gICAgY29uc3QgcmVuZGVyTm90aWZpY2F0aW9uID0gKG5vdGlmaWNhdGlvbikgPT4gKFxuICAgICAgPEZsYXNoTm90aWZpY2F0aW9uXG4gICAgICAgIGNvdW50PXtub3RpZmljYXRpb24uY291bnR9XG4gICAgICAgIGtleT17YG5vdGlmaWNhdGlvbi0ke25vdGlmaWNhdGlvbi5jb3VudH1gfVxuICAgICAgICBtZXNzYWdlPXtub3RpZmljYXRpb24ubWVzc2FnZX1cbiAgICAgICAgbm90aWZpY2F0aW9uPXtub3RpZmljYXRpb259XG4gICAgICAgIG9uTWVhc3VyZWQ9e3RoaXMub25Ob3RpZmljYXRpb25NZWFzdXJlZH1cbiAgICAgICAgb25SZW1vdmVkQ2xpY2tlZD17dGhpcy5vblJlbW92ZWRDbGlja2VkfVxuICAgICAgICBwZXJzaXN0ZW50PXtub3RpZmljYXRpb24ucGVyc2lzdGVudH1cbiAgICAgICAgcHJlc2VudGF0aW9uPXtub3RpZmljYXRpb24ucHJlc2VudGF0aW9ufVxuICAgICAgICBwcm9ncmVzcz17bm90aWZpY2F0aW9uLnByb2dyZXNzfVxuICAgICAgICByZW1vdmluZz17bm90aWZpY2F0aW9uLnJlbW92aW5nfVxuICAgICAgICB0aXRsZT17bm90aWZpY2F0aW9uLnRpdGxlfVxuICAgICAgICB0eXBlPXtub3RpZmljYXRpb24udHlwZX1cbiAgICAgIC8+XG4gICAgKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxWaWV3XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgIGRhdGFTZXQ9e3RoaXMucm9vdFZpZXdEYXRhU2V0IHx8PSB7Y29tcG9uZW50OiBcImZsYXNoLW5vdGlmaWNhdGlvbnMtY29udGFpbmVyXCJ9fVxuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgUmVhY3QgTmF0aXZlIHR5cGVzIGRvIG5vdCBpbmNsdWRlIHRoZSB3ZWItb25seSBcImZpeGVkXCIgcG9zaXRpb24uXG4gICAgICAgICAgc3R5bGU9e3ZpZXdTdHlsZX1cbiAgICAgICAgICB0ZXN0SUQ9XCJmbGFzaC1ub3RpZmljYWl0b25zL2NvbnRhaW5lclwiXG4gICAgICAgID5cbiAgICAgICAgICB7dG9hc3ROb3RpZmljYXRpb25zLm1hcChyZW5kZXJOb3RpZmljYXRpb24pfVxuICAgICAgICA8L1ZpZXc+XG4gICAgICAgIHttb2RhbE5vdGlmaWNhdGlvbnMubGVuZ3RoID4gMCA/IChcbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBSZWFjdCBOYXRpdmUgdHlwZXMgZG8gbm90IGluY2x1ZGUgdGhlIHdlYi1vbmx5IFwiZml4ZWRcIiBwb3NpdGlvbi5cbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIC8vIFVubGlrZSB0aGUgdG9hc3QgY29udGFpbmVyLCB0aGlzIG92ZXJsYXkgc3dhbGxvd3MgcG9pbnRlciBldmVudHMgb24gcHVycG9zZTpcbiAgICAgICAgICAgICAgLy8gYSBtb2RhbCBibG9ja3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYXBwIHVuZGVybmVhdGggdW50aWwgaXQgaXMgZGlzbWlzc2VkLlxuICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzOiBcImF1dG9cIixcbiAgICAgICAgICAgICAgcG9zaXRpb246IGlzTmF0aXZlID8gXCJhYnNvbHV0ZVwiIDogXCJmaXhlZFwiLFxuICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgICAgICBib3R0b206IDAsXG4gICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgIHpJbmRleDogMTAwMDAwXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgdGVzdElEPVwiZmxhc2gtbm90aWZpY2F0aW9ucy9tb2RhbC1vdmVybGF5XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bW9kYWxOb3RpZmljYXRpb25zLm1hcChyZW5kZXJOb3RpZmljYXRpb24pfVxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8Lz5cbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsuLi51bmtub3dufSBhcmdzXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25QdXNoTm90aWZpY2F0aW9uRXZlbnQgPSAoLi4uYXJncykgPT4ge1xuICAgIHRoaXMub25QdXNoTm90aWZpY2F0aW9uKC8qKiBAdHlwZSB7Tm90aWZpY2F0aW9uT2JqZWN0VHlwZX0gKi8gKGFyZ3NbMF0pKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Tm90aWZpY2F0aW9uT2JqZWN0VHlwZX0gZGV0YWlsXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25QdXNoTm90aWZpY2F0aW9uID0gKGRldGFpbCkgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSBkaWdnKGRldGFpbCwgXCJ0eXBlXCIpXG5cbiAgICAvLyBBbiBhY3Rpdml0eSBub3RpZmljYXRpb24gd2l0aG91dCBhbiBpZCBoYXMgbm8gaGFuZGxlIHRvIHJlc29sdmUgaXQgYW5kXG4gICAgLy8gd291bGQgc3RheSBvbiBzY3JlZW4gZm9yZXZlciwgc28gaXQgaXMgZHJvcHBlZC5cbiAgICBpZiAodHlwZSA9PSBcImFjdGl2aXR5XCIgJiYgZGV0YWlsLmlkID09IHVuZGVmaW5lZCkge1xuICAgICAgZGVidWdMb2coXCJGbGFzaE5vdGlmaWNhdGlvbnM6IGFjdGl2aXR5IG5vdGlmaWNhdGlvbiB3aXRob3V0IGlkIGlnbm9yZWRcIilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGNvdW50ID0gdGhpcy5zLmNvdW50ICsgMVxuICAgIGNvbnN0IHBlcnNpc3RlbnQgPSBkaWcoZGV0YWlsLCBcInBlcnNpc3RlbnRcIikgPT0gdHJ1ZVxuICAgIGNvbnN0IHByZXNlbnRhdGlvbiA9IGRpZyhkZXRhaWwsIFwicHJlc2VudGF0aW9uXCIpID09IFwibW9kYWxcIiA/IFwibW9kYWxcIiA6IFwidG9hc3RcIlxuICAgIC8vIEFjdGl2aXR5IG5vdGlmaWNhdGlvbnMgc3RheSBvbiBzY3JlZW4gdW50aWwgdGhlaXIgaGFuZGxlIHJlc29sdmVzIHRoZW0sIGFuZFxuICAgIC8vIHBlcnNpc3RlbnQgbm90aWZpY2F0aW9ucyBzdGF5IHVudGlsIHRoZSB1c2VyIGRpc21pc3NlcyB0aGVtLiBCb3RoIHNraXAgdGhlXG4gICAgLy8gYXV0by1kaXNtaXNzIHRpbWVyOyBvbmx5IGEgcGxhaW4gdG9hc3QgZ2V0cyBvbmUuXG4gICAgY29uc3QgdGltZW91dCA9IHR5cGUgPT0gXCJhY3Rpdml0eVwiIHx8IHBlcnNpc3RlbnQgPyB1bmRlZmluZWQgOiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBub3RpZmljYXRpb24gdGltZW91dFwiLCB7aWQ6IGNvdW50fSlcbiAgICAgIHRoaXMuZGlzbWlzc05vdGlmaWNhdGlvbkJ5Q291bnQoY291bnQsIFwidGltZW91dFwiKVxuICAgIH0sIDQwMDApXG5cbiAgICBpZiAodGltZW91dCkge1xuICAgICAgdGhpcy50aW1lb3V0cy5wdXNoKHRpbWVvdXQpXG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtTdG9yZWROb3RpZmljYXRpb25UeXBlfSAqL1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHtcbiAgICAgIGNvdW50LFxuICAgICAgaGVpZ2h0OiBuZXcgQW5pbWF0ZWQuVmFsdWUoMCksXG4gICAgICBpZDogZGlnKGRldGFpbCwgXCJpZFwiKSxcbiAgICAgIG1hcmdpbkJvdHRvbTogbmV3IEFuaW1hdGVkLlZhbHVlKHRoaXMubm90aWZpY2F0aW9uU3BhY2luZyksXG4gICAgICBtZWFzdXJlZEhlaWdodDogdW5kZWZpbmVkLFxuICAgICAgbWVzc2FnZTogZGlnZyhkZXRhaWwsIFwibWVzc2FnZVwiKSxcbiAgICAgIG9wYWNpdHk6IG5ldyBBbmltYXRlZC5WYWx1ZSgxKSxcbiAgICAgIHBlcnNpc3RlbnQsXG4gICAgICBwcmVzZW50YXRpb24sXG4gICAgICBwcm9ncmVzczogdW5kZWZpbmVkLFxuICAgICAgcmVtb3Zpbmc6IGZhbHNlLFxuICAgICAgdGltZW91dCxcbiAgICAgIHRpdGxlOiBkaWdnKGRldGFpbCwgXCJ0aXRsZVwiKSxcbiAgICAgIHR5cGVcbiAgICB9XG5cbiAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogbm90aWZpY2F0aW9uIGFkZGVkXCIsIHtcbiAgICAgIGlkOiBjb3VudCxcbiAgICAgIHBlcnNpc3RlbnQ6IG5vdGlmaWNhdGlvbi5wZXJzaXN0ZW50LFxuICAgICAgcHJlc2VudGF0aW9uOiBub3RpZmljYXRpb24ucHJlc2VudGF0aW9uLFxuICAgICAgdGl0bGU6IG5vdGlmaWNhdGlvbi50aXRsZSxcbiAgICAgIHR5cGU6IG5vdGlmaWNhdGlvbi50eXBlXG4gICAgfSlcblxuICAgIHRoaXMuc2V0U3RhdGUoe2NvdW50LCBub3RpZmljYXRpb25zOiB0aGlzLnMubm90aWZpY2F0aW9ucy5jb25jYXQoW25vdGlmaWNhdGlvbl0pfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge1N0b3JlZE5vdGlmaWNhdGlvblR5cGV9IG5vdGlmaWNhdGlvblxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uUmVtb3ZlZENsaWNrZWQgPSAobm90aWZpY2F0aW9uKSA9PiB7XG4gICAgZGVidWdMb2coXCJGbGFzaE5vdGlmaWNhdGlvbnM6IG5vdGlmaWNhdGlvbiBwcmVzc2VkXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50fSlcbiAgICB0aGlzLmRpc21pc3NOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBcInByZXNzXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsuLi51bmtub3dufSBhcmdzXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25BY3Rpdml0eU5vdGlmaWNhdGlvbkV2ZW50ID0gKC4uLmFyZ3MpID0+IHtcbiAgICB0aGlzLm9uQWN0aXZpdHlOb3RpZmljYXRpb24oLyoqIEB0eXBlIHtBY3Rpdml0eU5vdGlmaWNhdGlvbkRldGFpbFR5cGV9ICovIChhcmdzWzBdKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0FjdGl2aXR5Tm90aWZpY2F0aW9uRGV0YWlsVHlwZX0gZGV0YWlsXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25BY3Rpdml0eU5vdGlmaWNhdGlvbiA9IChkZXRhaWwpID0+IHtcbiAgICBjb25zdCBub3RpZmljYXRpb24gPSAvKiogQHR5cGUge1N0b3JlZE5vdGlmaWNhdGlvblR5cGUgfCB1bmRlZmluZWR9ICovICh0aGlzLnMubm90aWZpY2F0aW9ucy5maW5kKFxuICAgICAgLyoqIEBwYXJhbSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZX0gaXRlbSAqL1xuICAgICAgKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGRldGFpbC5pZFxuICAgICkpXG4gICAgaWYgKCFub3RpZmljYXRpb24gfHwgbm90aWZpY2F0aW9uLnJlbW92aW5nKSB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogYWN0aXZpdHkgbm90aWZpY2F0aW9uIG5vdCBmb3VuZFwiLCB7aWQ6IGRldGFpbC5pZCwgYWN0aW9uOiBkZXRhaWwuYWN0aW9ufSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChkZXRhaWwuYWN0aW9uID09IFwidXBkYXRlXCIpIHtcbiAgICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBhY3Rpdml0eSBwcm9ncmVzcyB1cGRhdGVkXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50LCBwcm9ncmVzczogZGV0YWlsLnByb2dyZXNzfSlcbiAgICAgIG5vdGlmaWNhdGlvbi5wcm9ncmVzcyA9IGRldGFpbC5wcm9ncmVzc1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7bm90aWZpY2F0aW9uczogWy4uLnRoaXMucy5ub3RpZmljYXRpb25zXX0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoZGV0YWlsLmFjdGlvbiA9PSBcInN1Y2NlZWRcIiB8fCBkZXRhaWwuYWN0aW9uID09IFwiZmFpbFwiKSB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogYWN0aXZpdHkgcmVzb2x2ZWRcIiwge2lkOiBub3RpZmljYXRpb24uY291bnQsIGFjdGlvbjogZGV0YWlsLmFjdGlvbn0pXG4gICAgICAvLyBNYXAgdGhlIGFjdGlvbiB2ZXJicyBvbnRvIHRoZSBjYW5vbmljYWwgdHlwZSBuYW1lcyBzbyB0aGUgY2FyZFxuICAgICAgLy8gcmVuZGVycyB0aGUgZXhpc3Rpbmcgc3VjY2Vzcy9lcnJvciB0b25lcyBkdXJpbmcgdGhlIGRpc21pc3MgZmxhc2guXG4gICAgICBub3RpZmljYXRpb24udHlwZSA9IGRldGFpbC5hY3Rpb24gPT0gXCJzdWNjZWVkXCIgPyBcInN1Y2Nlc3NcIiA6IFwiZXJyb3JcIlxuICAgICAgaWYgKGRldGFpbC5tZXNzYWdlKSB7XG4gICAgICAgIG5vdGlmaWNhdGlvbi5tZXNzYWdlID0gZGV0YWlsLm1lc3NhZ2VcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUoe25vdGlmaWNhdGlvbnM6IFsuLi50aGlzLnMubm90aWZpY2F0aW9uc119KVxuICAgICAgdGhpcy5kaXNtaXNzTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgZGV0YWlsLmFjdGlvbilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBhY3Rpdml0eSBkaXNtaXNzZWRcIiwge2lkOiBub3RpZmljYXRpb24uY291bnQsIGFjdGlvbjogZGV0YWlsLmFjdGlvbn0pXG4gICAgdGhpcy5kaXNtaXNzTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgXCJkb25lXCIpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtTdG9yZWROb3RpZmljYXRpb25UeXBlfSBub3RpZmljYXRpb25cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1lYXN1cmVkSGVpZ2h0XG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgb25Ob3RpZmljYXRpb25NZWFzdXJlZCA9IChub3RpZmljYXRpb24sIG1lYXN1cmVkSGVpZ2h0KSA9PiB7XG4gICAgaWYgKG5vdGlmaWNhdGlvbi5tZWFzdXJlZEhlaWdodCkgcmV0dXJuXG5cbiAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogbm90aWZpY2F0aW9uIG1lYXN1cmVkXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50LCBoZWlnaHQ6IG1lYXN1cmVkSGVpZ2h0fSlcblxuICAgIG5vdGlmaWNhdGlvbi5tZWFzdXJlZEhlaWdodCA9IG1lYXN1cmVkSGVpZ2h0XG4gICAgbm90aWZpY2F0aW9uLmhlaWdodC5zZXRWYWx1ZShtZWFzdXJlZEhlaWdodClcbiAgICB0aGlzLnNldFN0YXRlKHtub3RpZmljYXRpb25zOiBbLi4udGhpcy5zLm5vdGlmaWNhdGlvbnNdfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gY291bnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtyZWFzb25dXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAqL1xuICBkaXNtaXNzTm90aWZpY2F0aW9uQnlDb3VudCA9IChjb3VudCwgcmVhc29uID0gXCJ1bmtub3duXCIpID0+IHtcbiAgICBjb25zdCBub3RpZmljYXRpb24gPSAvKiogQHR5cGUge1N0b3JlZE5vdGlmaWNhdGlvblR5cGUgfCB1bmRlZmluZWR9ICovICh0aGlzLnMubm90aWZpY2F0aW9ucy5maW5kKFxuICAgICAgLyoqIEBwYXJhbSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZX0gaXRlbSAqL1xuICAgICAgKGl0ZW0pID0+IGl0ZW0uY291bnQgPT0gY291bnRcbiAgICApKVxuICAgIGlmICghbm90aWZpY2F0aW9uKSB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogbm90aWZpY2F0aW9uIG5vdCBmb3VuZFwiLCB7aWQ6IGNvdW50LCByZWFzb259KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5kaXNtaXNzTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgcmVhc29uKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7U3RvcmVkTm90aWZpY2F0aW9uVHlwZX0gbm90aWZpY2F0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcmVhc29uXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGRpc21pc3NOb3RpZmljYXRpb24gPSAobm90aWZpY2F0aW9uLCByZWFzb24gPSBcInVua25vd25cIikgPT4ge1xuICAgIGlmIChub3RpZmljYXRpb24ucmVtb3ZpbmcpIHtcbiAgICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBub3RpZmljYXRpb24gYWxyZWFkeSByZW1vdmluZ1wiLCB7aWQ6IG5vdGlmaWNhdGlvbi5jb3VudCwgcmVhc29ufSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIG5vdGlmaWNhdGlvbi5yZW1vdmluZyA9IHRydWVcbiAgICBpZiAobm90aWZpY2F0aW9uLnRpbWVvdXQpIGNsZWFyVGltZW91dChub3RpZmljYXRpb24udGltZW91dClcblxuICAgIGlmICghbm90aWZpY2F0aW9uLm1lYXN1cmVkSGVpZ2h0KSB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogbm90aWZpY2F0aW9uIG1pc3NpbmcgbWVhc3VyZWQgaGVpZ2h0XCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50fSlcbiAgICAgIG5vdGlmaWNhdGlvbi5tZWFzdXJlZEhlaWdodCA9IDFcbiAgICAgIG5vdGlmaWNhdGlvbi5oZWlnaHQuc2V0VmFsdWUoMSlcbiAgICB9XG5cbiAgICAvLyBSZS1yZW5kZXIgaW1tZWRpYXRlbHkgc28gdGhlIGNsb3Npbmcgbm90aWZpY2F0aW9uIGRyb3BzIHBvaW50ZXIgZXZlbnRzIChwb2ludGVyRXZlbnRzPVwibm9uZVwiKVxuICAgIC8vIHRoZSBpbnN0YW50IGl0IHN0YXJ0cyBmYWRpbmcgb3V0LiBPdGhlcndpc2UgdGhlIGZhZGluZyBvdmVybGF5IGtlZXBzIGludGVyY2VwdGluZyB0aGUgbmV4dFxuICAgIC8vIGNsaWNrL2ZpbGwgZm9yIHRoZSB3aG9sZSBmYWRlIGR1cmF0aW9uIGV2ZW4gdGhvdWdoIGl0IGlzIG9uIGl0cyB3YXkgb3V0LlxuICAgIHRoaXMuc2V0U3RhdGUoe25vdGlmaWNhdGlvbnM6IFsuLi50aGlzLnMubm90aWZpY2F0aW9uc119KVxuXG4gICAgZGVidWdMb2coXCJGbGFzaE5vdGlmaWNhdGlvbnM6IGFuaW1hdGlvbnMgYmVnaW5cIiwge1xuICAgICAgaWQ6IG5vdGlmaWNhdGlvbi5jb3VudCxcbiAgICAgIGFuaW1hdGlvbnM6IFtcIm9wYWNpdHlcIiwgXCJoZWlnaHRcIiwgXCJtYXJnaW5Cb3R0b21cIl0sXG4gICAgICByZWFzb25cbiAgICB9KVxuICAgIGRlYnVnTG9nKFwiRmxhc2hOb3RpZmljYXRpb25zOiBmYWRlIGFuaW1hdGlvbiBiZWdpblwiLCB7aWQ6IG5vdGlmaWNhdGlvbi5jb3VudCwgcmVhc29ufSlcblxuICAgIGNvbnN0IGRpc21pc3NEdXJhdGlvbiA9IHJlYXNvbiA9PT0gXCJwcmVzc1wiID8gODAgOiAyMDBcblxuICAgIEFuaW1hdGVkLnBhcmFsbGVsKFtcbiAgICAgIEFuaW1hdGVkLnRpbWluZyhub3RpZmljYXRpb24ub3BhY2l0eSwge3RvVmFsdWU6IDAsIGR1cmF0aW9uOiBkaXNtaXNzRHVyYXRpb24sIHVzZU5hdGl2ZURyaXZlcjogZmFsc2V9KSxcbiAgICAgIEFuaW1hdGVkLnRpbWluZyhub3RpZmljYXRpb24uaGVpZ2h0LCB7dG9WYWx1ZTogMCwgZHVyYXRpb246IGRpc21pc3NEdXJhdGlvbiwgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZX0pLFxuICAgICAgQW5pbWF0ZWQudGltaW5nKG5vdGlmaWNhdGlvbi5tYXJnaW5Cb3R0b20sIHt0b1ZhbHVlOiAwLCBkdXJhdGlvbjogZGlzbWlzc0R1cmF0aW9uLCB1c2VOYXRpdmVEcml2ZXI6IGZhbHNlfSlcbiAgICBdKS5zdGFydCgoKSA9PiB7XG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogYW5pbWF0aW9ucyBlbmRcIiwge1xuICAgICAgICBpZDogbm90aWZpY2F0aW9uLmNvdW50LFxuICAgICAgICBhbmltYXRpb25zOiBbXCJvcGFjaXR5XCIsIFwiaGVpZ2h0XCIsIFwibWFyZ2luQm90dG9tXCJdLFxuICAgICAgICByZWFzb25cbiAgICAgIH0pXG4gICAgICBkZWJ1Z0xvZyhcIkZsYXNoTm90aWZpY2F0aW9uczogZmFkZSBhbmltYXRpb24gZW5kXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50LCByZWFzb259KVxuXG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgbm90aWZpY2F0aW9uczogdGhpcy5zLm5vdGlmaWNhdGlvbnMuZmlsdGVyKFxuICAgICAgICAgIC8qKiBAcGFyYW0ge1N0b3JlZE5vdGlmaWNhdGlvblR5cGV9IGl0ZW0gKi9cbiAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5jb3VudCAhPSBub3RpZmljYXRpb24uY291bnRcbiAgICAgICAgKVxuICAgICAgfSlcblxuICAgICAgZGVidWdMb2coXCJGbGFzaE5vdGlmaWNhdGlvbnM6IG5vdGlmaWNhdGlvbiByZW1vdmVkXCIsIHtpZDogbm90aWZpY2F0aW9uLmNvdW50LCByZWFzb259KVxuICAgIH0pXG4gIH1cbn0pKVxuIl19
@@ -8,6 +8,8 @@ export type StoredNotificationType = {
8
8
  measuredHeight: number | undefined;
9
9
  message: string;
10
10
  opacity: import("react-native").Animated.Value;
11
+ persistent: boolean;
12
+ presentation: "toast" | "modal";
11
13
  progress: number | undefined;
12
14
  removing: boolean;
13
15
  timeout: ReturnType<typeof setTimeout> | undefined;
@@ -21,6 +23,8 @@ export type FlashNotificationsNotificationProps = {
21
23
  notification: StoredNotificationType;
22
24
  onMeasured: (notification: StoredNotificationType, measuredHeight: number) => void;
23
25
  onRemovedClicked: (notification: StoredNotificationType) => void;
26
+ persistent: boolean;
27
+ presentation: "toast" | "modal";
24
28
  progress?: number | undefined;
25
29
  removing: boolean;
26
30
  title: string;
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"notification.d.ts","sourceRoot":"/src/","sources":["container/notification.jsx"],"names":[],"mappings":";;;WAcc,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;gBACrC,OAAO;kBACP,OAAO,GAAG,OAAO;cACjB,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;gBAC9C,OAAO;kBACP,OAAO,GAAG,OAAO;eACjB,MAAM,YAAC;cACP,OAAO;WACP,MAAM;UACN,MAAM;;kBAtCe,OAAO"}
@@ -6,6 +6,7 @@ import React, { memo, useMemo } from "react";
6
6
  import { Animated, Pressable, Text, View } from "react-native";
7
7
  import { shapeComponent, ShapeComponent } from "set-state-compare/build/shape-component.js";
8
8
  import { useBreakpoint } from "responsive-breakpoints";
9
+ import configuration from "../configuration.js";
9
10
  /**
10
11
  * @typedef {object} StoredNotificationType
11
12
  * @property {number} count
@@ -15,6 +16,8 @@ import { useBreakpoint } from "responsive-breakpoints";
15
16
  * @property {number | undefined} measuredHeight
16
17
  * @property {string} message
17
18
  * @property {import("react-native").Animated.Value} opacity
19
+ * @property {boolean} persistent
20
+ * @property {"toast" | "modal"} presentation
18
21
  * @property {number | undefined} progress
19
22
  * @property {boolean} removing
20
23
  * @property {ReturnType<typeof setTimeout> | undefined} timeout
@@ -29,6 +32,8 @@ import { useBreakpoint } from "responsive-breakpoints";
29
32
  * @property {StoredNotificationType} notification
30
33
  * @property {(notification: StoredNotificationType, measuredHeight: number) => void} onMeasured
31
34
  * @property {(notification: StoredNotificationType) => void} onRemovedClicked
35
+ * @property {boolean} persistent
36
+ * @property {"toast" | "modal"} presentation
32
37
  * @property {number=} progress
33
38
  * @property {boolean} removing
34
39
  * @property {string} title
@@ -53,6 +58,8 @@ class FlashNotificationsNotification extends ShapeComponent {
53
58
  notification: PropTypes.object.isRequired,
54
59
  onMeasured: PropTypes.func.isRequired,
55
60
  onRemovedClicked: PropTypes.func.isRequired,
61
+ persistent: PropTypes.bool.isRequired,
62
+ presentation: PropTypes.oneOf(["toast", "modal"]).isRequired,
56
63
  progress: PropTypes.number,
57
64
  removing: PropTypes.bool.isRequired,
58
65
  title: PropTypes.string.isRequired,
@@ -64,13 +71,41 @@ class FlashNotificationsNotification extends ShapeComponent {
64
71
  barSweepAnimation = undefined;
65
72
  /** @type {number} */
66
73
  barTrackWidth = 0;
74
+ /**
75
+ * The element that had focus when this modal notification mounted, so focus
76
+ * can be returned to it when the modal is dismissed.
77
+ * @type {HTMLElement | undefined}
78
+ */
79
+ focusReturnElement = undefined;
80
+ /** @type {{focus?: () => void} | undefined} */
81
+ cardRef = undefined;
82
+ componentDidMount() {
83
+ if (this.p.presentation != "modal")
84
+ return;
85
+ // Remember what had focus before the dialog opened so it can be restored
86
+ // on dismiss. On native there is no document; focus handling is a no-op.
87
+ if (typeof document != "undefined" && document.activeElement instanceof HTMLElement) {
88
+ this.focusReturnElement = document.activeElement;
89
+ }
90
+ // Move focus into the dialog. The card is focusable via tabIndex={-1}.
91
+ setTimeout(() => {
92
+ this.cardRef?.focus?.();
93
+ }, 0);
94
+ }
67
95
  componentWillUnmount() {
68
96
  this.barSweepAnimation?.stop();
97
+ if (this.p.presentation != "modal")
98
+ return;
99
+ // Return focus to whatever was focused before the modal opened.
100
+ this.focusReturnElement?.focus?.();
69
101
  }
70
102
  render() {
71
- const { count, message, progress, title, type } = this.p;
103
+ const { count, message, presentation, progress, title, type } = this.p;
72
104
  const { className } = this.props;
73
105
  const breakpoint = useBreakpoint();
106
+ if (presentation == "modal") {
107
+ return this.renderModal();
108
+ }
74
109
  const pressableDataSet = useMemo(() => ({
75
110
  class: className,
76
111
  role: "dialog",
@@ -150,6 +185,95 @@ class FlashNotificationsNotification extends ShapeComponent {
150
185
  width: `${progress * 100}%`
151
186
  }, testID: "flash-notifications-notification-bar-fill" })))) : null)));
152
187
  }
188
+ /**
189
+ * Modal presentation: a full-screen dimmed backdrop with the notification
190
+ * centered on top. The backdrop has no press handler on purpose — clicking
191
+ * it (or pressing Escape) must not dismiss the notification; only the
192
+ * explicit dismiss button does.
193
+ *
194
+ * @returns {React.ReactElement}
195
+ */
196
+ renderModal() {
197
+ const { count, message, title, type } = this.p;
198
+ const breakpoint = useBreakpoint();
199
+ const dismissLabel = configuration.translate("js.shared.dismiss", { defaultValue: "Dismiss" });
200
+ return (React.createElement(Animated.View, { style: this.tt.modalWrapperStyle, testID: "flash-notifications-modal-backdrop" },
201
+ React.createElement(Pressable, { "aria-modal": true, ref: /** @param {import("react-native").View | null} ref */ (ref) => {
202
+ this.cardRef = /** @type {{focus?: () => void} | undefined} */ (ref);
203
+ }, role: "alertdialog", style: breakpoint.styling({
204
+ base: {
205
+ padding: 15,
206
+ borderRadius: 11,
207
+ border: (() => {
208
+ if (type == "error") {
209
+ return "1px solid rgba(161, 34, 32, 0.95)";
210
+ }
211
+ else if (type == "success") {
212
+ return "1px solid rgba(0, 0, 0, 0.95)";
213
+ }
214
+ else if (type == "alert") {
215
+ return "1px solid rgba(204, 51, 0, 0.95)";
216
+ }
217
+ else if (type == "activity") {
218
+ return "1px solid rgba(30, 41, 59, 0.95)";
219
+ }
220
+ return undefined;
221
+ })(),
222
+ backgroundColor: (() => {
223
+ if (type == "error") {
224
+ return "rgba(161, 34, 32, 0.87)";
225
+ }
226
+ else if (type == "success") {
227
+ return "rgba(0, 0, 0, 0.87)";
228
+ }
229
+ else if (type == "alert") {
230
+ return "rgba(204, 51, 0, 0.87)";
231
+ }
232
+ else if (type == "activity") {
233
+ return "rgba(30, 41, 59, 0.87)";
234
+ }
235
+ return "rgba(0, 0, 0, 0.87)";
236
+ })()
237
+ },
238
+ smDown: {
239
+ marginLeft: 20,
240
+ marginRight: 20,
241
+ maxWidth: "100%"
242
+ },
243
+ mdUp: {
244
+ width: 400,
245
+ maxWidth: "80%"
246
+ }
247
+ }), tabIndex: -1, testID: "flash-notifications-notification" },
248
+ React.createElement(View, { style: viewStyles.titleView ||= { marginBottom: 5 }, testID: "notification-title" },
249
+ React.createElement(Text, { style: textStyles.titleText ||= {
250
+ color: "#fff",
251
+ fontWeight: 700
252
+ }, testID: `flash-notifications/notification-${count}/title` }, title)),
253
+ React.createElement(View
254
+ // @ts-expect-error React Native types do not include the web-only dataSet prop.
255
+ , {
256
+ // @ts-expect-error React Native types do not include the web-only dataSet prop.
257
+ dataSet: dataSets[`notificationMessage-${count}`] ||= { count: `${count}` }, testID: "notification-message" },
258
+ React.createElement(Text, { style: textStyles.messageText ||= { color: "#fff" }, testID: `flash-notifications/notification-${count}/message` }, message)),
259
+ React.createElement(Pressable, { onPress: this.tt.onRemovedClicked, style: breakpoint.styling({
260
+ base: {
261
+ alignSelf: "flex-start",
262
+ backgroundColor: "rgba(255, 255, 255, 0.15)",
263
+ borderRadius: 8,
264
+ borderWidth: 1,
265
+ borderColor: "rgba(255, 255, 255, 0.6)",
266
+ cursor: "pointer",
267
+ marginTop: 15,
268
+ paddingHorizontal: 14,
269
+ paddingVertical: 8
270
+ }
271
+ }), testID: "flash-notifications-modal-dismiss" },
272
+ React.createElement(Text, { style: textStyles.dismissText ||= {
273
+ color: "#fff",
274
+ fontWeight: 700
275
+ } }, dismissLabel)))));
276
+ }
153
277
  get wrapperStyle() {
154
278
  const { notification, removing } = this.p;
155
279
  return /** @type {import("react-native").Animated.WithAnimatedObject<import("react-native").ViewStyle>} */ ({
@@ -160,6 +284,22 @@ class FlashNotificationsNotification extends ShapeComponent {
160
284
  pointerEvents: removing ? "none" : "auto"
161
285
  });
162
286
  }
287
+ get modalWrapperStyle() {
288
+ const { notification, removing } = this.p;
289
+ return /** @type {import("react-native").Animated.WithAnimatedObject<import("react-native").ViewStyle>} */ ({
290
+ // Dimmed full-screen backdrop with the card centered on top of it.
291
+ alignItems: "center",
292
+ backgroundColor: "rgba(0, 0, 0, 0.45)",
293
+ bottom: 0,
294
+ justifyContent: "center",
295
+ left: 0,
296
+ opacity: notification.opacity,
297
+ pointerEvents: removing ? "none" : "auto",
298
+ position: "absolute",
299
+ right: 0,
300
+ top: 0
301
+ });
302
+ }
163
303
  onRemovedClicked = () => this.p.onRemovedClicked(this.p.notification);
164
304
  /**
165
305
  * @param {import("react-native").LayoutChangeEvent} event
@@ -210,4 +350,4 @@ class FlashNotificationsNotification extends ShapeComponent {
210
350
  };
211
351
  }
212
352
  export default memo(shapeComponent(FlashNotificationsNotification));
213
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6Ii9zcmMvIiwic291cmNlcyI6WyJjb250YWluZXIvbm90aWZpY2F0aW9uLmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFBO0FBQ2xDLGlEQUFpRDtBQUNqRCxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUE7QUFDMUMsT0FBTyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsY0FBYyxFQUFFLGNBQWMsRUFBQyxNQUFNLDRDQUE0QyxDQUFBO0FBQ3pGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUVwRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVIOzs7Ozs7Ozs7Ozs7R0FZRztBQUVILHFDQUFxQztBQUNyQyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUE7QUFDbkIsK0RBQStEO0FBQy9ELE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQTtBQUNyQiwrREFBK0Q7QUFDL0QsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFBO0FBQ3JCLCtDQUErQztBQUMvQyxNQUFNLFlBQVksR0FBRyxFQUFDLGVBQWUsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUMsQ0FBQTtBQUV4Rjs7R0FFRztBQUNILE1BQU0sOEJBQStCLFNBQVEsY0FBYztJQUN6RCxNQUFNLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQztRQUNoQyxTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU07UUFDM0IsS0FBSyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVTtRQUNsQyxPQUFPLEVBQUUs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LElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLENBQUE7UUFFakQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FDekIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FDdEcsQ0FBQTtRQUNELEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNiLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUE7SUFDaEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILFdBQVcsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ3RCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQTtRQUVqRCxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksVUFBVTtZQUFFLE9BQU07UUFFM0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUE7UUFFL0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDdEIsQ0FBQztJQUNILENBQUMsQ0FBQTs7QUFHSCxlQUFlLElBQUksQ0FBQyxjQUFjLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuLy8gQHRzLWV4cGVjdC1lcnJvciBQYWNrYWdlIHNoaXBzIG5vIC5kLnRzIGZpbGVzLlxuaW1wb3J0IFByb3BUeXBlc0V4YWN0IGZyb20gXCJwcm9wLXR5cGVzLWV4YWN0XCJcbmltcG9ydCBSZWFjdCwge21lbW8sIHVzZU1lbW99IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQge0FuaW1hdGVkLCBQcmVzc2FibGUsIFRleHQsIFZpZXd9IGZyb20gXCJyZWFjdC1uYXRpdmVcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudCwgU2hhcGVDb21wb25lbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9zaGFwZS1jb21wb25lbnQuanNcIlxuaW1wb3J0IHt1c2VCcmVha3BvaW50fSBmcm9tIFwicmVzcG9uc2l2ZS1icmVha3BvaW50c1wiXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU3RvcmVkTm90aWZpY2F0aW9uVHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvdW50XG4gKiBAcHJvcGVydHkge3N0cmluZyB8IHVuZGVmaW5lZH0gaWRcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBoZWlnaHRcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBtYXJnaW5Cb3R0b21cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBtZWFzdXJlZEhlaWdodFxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBvcGFjaXR5XG4gKiBAcHJvcGVydHkge251bWJlciB8IHVuZGVmaW5lZH0gcHJvZ3Jlc3NcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcmVtb3ZpbmdcbiAqIEBwcm9wZXJ0eSB7UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWR9IHRpbWVvdXRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0aXRsZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHR5cGVcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEZsYXNoTm90aWZpY2F0aW9uc05vdGlmaWNhdGlvblByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZz19IGNsYXNzTmFtZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvdW50XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWVzc2FnZVxuICogQHByb3BlcnR5IHtTdG9yZWROb3RpZmljYXRpb25UeXBlfSBub3RpZmljYXRpb25cbiAqIEBwcm9wZXJ0eSB7KG5vdGlmaWNhdGlvbjogU3RvcmVkTm90aWZpY2F0aW9uVHlwZSwgbWVhc3VyZWRIZWlnaHQ6IG51bWJlcikgPT4gdm9pZH0gb25NZWFzdXJlZFxuICogQHByb3BlcnR5IHsobm90aWZpY2F0aW9uOiBTdG9yZWROb3RpZmljYXRpb25UeXBlKSA9PiB2b2lkfSBvblJlbW92ZWRDbGlja2VkXG4gKiBAcHJvcGVydHkge251bWJlcj19IHByb2dyZXNzXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJlbW92aW5nXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGl0bGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0eXBlXG4gKi9cblxuLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+fSAqL1xuY29uc3QgZGF0YVNldHMgPSB7fVxuLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuVmlld1N0eWxlPn0gKi9cbmNvbnN0IHZpZXdTdHlsZXMgPSB7fVxuLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuVGV4dFN0eWxlPn0gKi9cbmNvbnN0IHRleHRTdHlsZXMgPSB7fVxuLyoqIEB0eXBlIHtpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuVmlld1N0eWxlfSAqL1xuY29uc3QgYmFyRmlsbFN0eWxlID0ge2JhY2tncm91bmRDb2xvcjogXCIjZmZmXCIsIGJvcmRlclJhZGl1czogMiwgaGVpZ2h0OiA0LCB3aWR0aDogXCIzMCVcIn1cblxuLyoqXG4gKiBAYXVnbWVudHMge1NoYXBlQ29tcG9uZW50PEZsYXNoTm90aWZpY2F0aW9uc05vdGlmaWNhdGlvblByb3BzPn1cbiAqL1xuY2xhc3MgRmxhc2hOb3RpZmljYXRpb25zTm90aWZpY2F0aW9uIGV4dGVuZHMgU2hhcGVDb21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0gUHJvcFR5cGVzRXhhY3Qoe1xuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjb3VudDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIG1lc3NhZ2U6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBub3RpZmljYXRpb246IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBvbk1lYXN1cmVkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uUmVtb3ZlZENsaWNrZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgcHJvZ3Jlc3M6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgcmVtb3Zpbmc6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWRcbiAgfSlcblxuICAvKiogQHR5cGUge2ltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5BbmltYXRlZC5WYWx1ZX0gKi9cbiAgYmFyU3dlZXAgPSBuZXcgQW5pbWF0ZWQuVmFsdWUoMClcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuQW5pbWF0ZWQuQ29tcG9zaXRlQW5pbWF0aW9uIHwgdW5kZWZpbmVkfSAqL1xuICBiYXJTd2VlcEFuaW1hdGlvbiA9IHVuZGVmaW5lZFxuICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgYmFyVHJhY2tXaWR0aCA9IDBcblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmJhclN3ZWVwQW5pbWF0aW9uPy5zdG9wKClcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7Y291bnQsIG1lc3NhZ2UsIHByb2dyZXNzLCB0aXRsZSwgdHlwZX0gPSB0aGlzLnBcbiAgICBjb25zdCB7Y2xhc3NOYW1lfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCBicmVha3BvaW50ID0gdXNlQnJlYWtwb2ludCgpXG5cbiAgICBjb25zdCBwcmVzc2FibGVEYXRhU2V0ID0gdXNlTWVtbyhcbiAgICAgICgpID0+ICh7XG4gICAgICAgIGNsYXNzOiBjbGFzc05hbWUsXG4gICAgICAgIHJvbGU6IFwiZGlhbG9nXCIsXG4gICAgICAgIHR5cGVcbiAgICAgIH0pLFxuICAgICAgW2NsYXNzTmFtZSwgdHlwZV1cbiAgICApXG4gICAgcmV0dXJuIChcbiAgICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICAgIHN0eWxlPXt0aGlzLnR0LndyYXBwZXJTdHlsZX1cbiAgICAgID5cbiAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgUmVhY3QgTmF0aXZlIHR5cGVzIGRvIG5vdCBpbmNsdWRlIHRoZSB3ZWItb25seSBkYXRhU2V0IHByb3AuXG4gICAgICAgICAgZGF0YVNldD17cHJlc3NhYmxlRGF0YVNldH1cbiAgICAgICAgICBvbkxheW91dD17dGhpcy50dC5vbkxheW91dH1cbiAgICAgICAgICBvblByZXNzPXt0aGlzLnR0Lm9uUmVtb3ZlZENsaWNrZWR9XG4gICAgICAgICAgc3R5bGU9e2JyZWFrcG9pbnQuc3R5bGluZyh7XG4gICAgICAgICAgICBiYXNlOiB7XG4gICAgICAgICAgICAgIHBhZGRpbmc6IDE1LFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDExLFxuICAgICAgICAgICAgICBjdXJzb3I6IFwicG9pbnRlclwiLFxuICAgICAgICAgICAgICBib3JkZXI6ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCIxcHggc29saWQgcmdiYSgxNjEsIDM0LCAzMiwgMC45NSlcIlxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC45NSlcIlxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImFsZXJ0XCIpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcIjFweCBzb2xpZCByZ2JhKDIwNCwgNTEsIDAsIDAuOTUpXCJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJhY3Rpdml0eVwiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCIxcHggc29saWQgcmdiYSgzMCwgNDEsIDU5LCAwLjk1KVwiXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9KSgpLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZ2JhKDE2MSwgMzQsIDMyLCAwLjg3KVwiXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZ2JhKDAsIDAsIDAsIDAuODcpXCJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJhbGVydFwiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZ2JhKDIwNCwgNTEsIDAsIDAuODcpXCJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJhY3Rpdml0eVwiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZ2JhKDMwLCA0MSwgNTksIDAuODcpXCJcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH0pKClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzbURvd246IHtcbiAgICAgICAgICAgICAgd2lkdGg6IFwiMTAwJVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWRVcDoge1xuICAgICAgICAgICAgICB3aWR0aDogMzAwLFxuICAgICAgICAgICAgICBtYXhXaWR0aDogXCIxMDAlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KX1cbiAgICAgICAgICB0ZXN0SUQ9XCJmbGFzaC1ub3RpZmljYXRpb25zLW5vdGlmaWNhdGlvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgc3R5bGU9e3ZpZXdTdHlsZXMudGl0bGVWaWV3IHx8PSB7bWFyZ2luQm90dG9tOiA1fX1cbiAgICAgICAgICAgIHRlc3RJRD1cIm5vdGlmaWNhdGlvbi10aXRsZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgc3R5bGU9e3RleHRTdHlsZXMudGl0bGVUZXh0IHx8PSB7XG4gICAgICAgICAgICAgICAgY29sb3I6IFwiI2ZmZlwiLFxuICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDcwMFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB0ZXN0SUQ9e2BmbGFzaC1ub3RpZmljYXRpb25zL25vdGlmaWNhdGlvbi0ke2NvdW50fS90aXRsZWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgUmVhY3QgTmF0aXZlIHR5cGVzIGRvIG5vdCBpbmNsdWRlIHRoZSB3ZWItb25seSBkYXRhU2V0IHByb3AuXG4gICAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0c1tgbm90aWZpY2F0aW9uTWVzc2FnZS0ke2NvdW50fWBdIHx8PSB7Y291bnQ6IGAke2NvdW50fWB9fVxuICAgICAgICAgICAgdGVzdElEPVwibm90aWZpY2F0aW9uLW1lc3NhZ2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgIHN0eWxlPXt0ZXh0U3R5bGVzLm1lc3NhZ2VUZXh0IHx8PSB7Y29sb3I6IFwiI2ZmZlwifX1cbiAgICAgICAgICAgICAgdGVzdElEPXtgZmxhc2gtbm90aWZpY2F0aW9ucy9ub3RpZmljYXRpb24tJHtjb3VudH0vbWVzc2FnZWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHttZXNzYWdlfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICB7dHlwZSA9PSBcImFjdGl2aXR5XCIgPyAoXG4gICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICBvbkxheW91dD17dGhpcy50dC5vbkJhckxheW91dH1cbiAgICAgICAgICAgICAgc3R5bGU9e3ZpZXdTdHlsZXMuYmFyVHJhY2sgfHw9IHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpXCIsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAyLFxuICAgICAgICAgICAgICAgIGhlaWdodDogNCxcbiAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IDEwLFxuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHRlc3RJRD1cImZsYXNoLW5vdGlmaWNhdGlvbnMtbm90aWZpY2F0aW9uLWJhclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtwcm9ncmVzcyA9PSB1bmRlZmluZWQgPyAoXG4gICAgICAgICAgICAgICAgPEFuaW1hdGVkLlZpZXdcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIC4uLmJhckZpbGxTdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBbe3RyYW5zbGF0ZVg6IHRoaXMuYmFyU3dlZXB9XVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIHRlc3RJRD1cImZsYXNoLW5vdGlmaWNhdGlvbnMtbm90aWZpY2F0aW9uLWJhci1maWxsXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAuLi5iYXJGaWxsU3R5bGUsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBgJHtwcm9ncmVzcyAqIDEwMH0lYFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIHRlc3RJRD1cImZsYXNoLW5vdGlmaWNhdGlvbnMtbm90aWZpY2F0aW9uLWJhci1maWxsXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgIDwvQW5pbWF0ZWQuVmlldz5cbiAgICApXG4gIH1cblxuICBnZXQgd3JhcHBlclN0eWxlKCkge1xuICAgIGNvbnN0IHtub3RpZmljYXRpb24sIHJlbW92aW5nfSA9IHRoaXMucFxuXG4gICAgcmV0dXJuIC8qKiBAdHlwZSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLldpdGhBbmltYXRlZE9iamVjdDxpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuVmlld1N0eWxlPn0gKi8gKHtcbiAgICAgIGhlaWdodDogbm90aWZpY2F0aW9uLm1lYXN1cmVkSGVpZ2h0ID8gbm90aWZpY2F0aW9uLmhlaWdodCA6IHVuZGVmaW5lZCxcbiAgICAgIG1hcmdpbkJvdHRvbTogbm90aWZpY2F0aW9uLm1hcmdpbkJvdHRvbSxcbiAgICAgIG9wYWNpdHk6IG5vdGlmaWNhdGlvbi5vcGFjaXR5LFxuICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICBwb2ludGVyRXZlbnRzOiByZW1vdmluZyA/IFwibm9uZVwiIDogXCJhdXRvXCJcbiAgICB9KVxuICB9XG5cbiAgb25SZW1vdmVkQ2xpY2tlZCA9ICgpID0+IHRoaXMucC5vblJlbW92ZWRDbGlja2VkKHRoaXMucC5ub3RpZmljYXRpb24pXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkxheW91dENoYW5nZUV2ZW50fSBldmVudFxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uTGF5b3V0ID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3Qge25vdGlmaWNhdGlvbn0gPSB0aGlzLnBcblxuICAgIGlmICghbm90aWZpY2F0aW9uLm1lYXN1cmVkSGVpZ2h0KSB7XG4gICAgICB0aGlzLnAub25NZWFzdXJlZChub3RpZmljYXRpb24sIGV2ZW50Lm5hdGl2ZUV2ZW50LmxheW91dC5oZWlnaHQpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Rmxhc2hOb3RpZmljYXRpb25zTm90aWZpY2F0aW9uUHJvcHN9IHByZXZQcm9wc1xuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICBpZiAocHJldlByb3BzLnByb2dyZXNzID09IHVuZGVmaW5lZCAmJiB0aGlzLnAucHJvZ3Jlc3MgIT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJhclN3ZWVwQW5pbWF0aW9uPy5zdG9wKClcbiAgICAgIHRoaXMuYmFyU3dlZXBBbmltYXRpb24gPSB1bmRlZmluZWRcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChwcmV2UHJvcHMucHJvZ3Jlc3MgIT0gdW5kZWZpbmVkICYmIHRoaXMucC5wcm9ncmVzcyA9PSB1bmRlZmluZWQgJiYgdGhpcy5iYXJUcmFja1dpZHRoKSB7XG4gICAgICB0aGlzLnN0YXJ0QmFyU3dlZXAoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0YXJ0QmFyU3dlZXAoKSB7XG4gICAgdGhpcy5iYXJTd2VlcEFuaW1hdGlvbj8uc3RvcCgpXG4gICAgdGhpcy5iYXJTd2VlcC5zZXRWYWx1ZSgtdGhpcy5iYXJUcmFja1dpZHRoICogMC4zKVxuXG4gICAgY29uc3Qgc3dlZXAgPSBBbmltYXRlZC5sb29wKFxuICAgICAgQW5pbWF0ZWQudGltaW5nKHRoaXMuYmFyU3dlZXAsIHtkdXJhdGlvbjogMTAwMCwgdG9WYWx1ZTogdGhpcy5iYXJUcmFja1dpZHRoLCB1c2VOYXRpdmVEcml2ZXI6IGZhbHNlfSlcbiAgICApXG4gICAgc3dlZXAuc3RhcnQoKVxuICAgIHRoaXMuYmFyU3dlZXBBbmltYXRpb24gPSBzd2VlcFxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkxheW91dENoYW5nZUV2ZW50fSBldmVudFxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIG9uQmFyTGF5b3V0ID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgdHJhY2tXaWR0aCA9IGV2ZW50Lm5hdGl2ZUV2ZW50LmxheW91dC53aWR0aFxuXG4gICAgaWYgKCF0cmFja1dpZHRoIHx8IHRoaXMuYmFyVHJhY2tXaWR0aCA9PSB0cmFja1dpZHRoKSByZXR1cm5cblxuICAgIHRoaXMuYmFyVHJhY2tXaWR0aCA9IHRyYWNrV2lkdGhcblxuICAgIGlmICh0aGlzLnAucHJvZ3Jlc3MgPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnN0YXJ0QmFyU3dlZXAoKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBtZW1vKHNoYXBlQ29tcG9uZW50KEZsYXNoTm90aWZpY2F0aW9uc05vdGlmaWNhdGlvbikpXG4iXX0=
353
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6Ii9zcmMvIiwic291cmNlcyI6WyJjb250YWluZXIvbm90aWZpY2F0aW9uLmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFBO0FBQ2xDLGlEQUFpRDtBQUNqRCxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLEtBQUssRUFBRSxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUE7QUFDMUMsT0FBTyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsY0FBYyxFQUFFLGNBQWMsRUFBQyxNQUFNLDRDQUE0QyxDQUFBO0FBQ3pGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUVwRCxPQUFPLGFBQWEsTUFBTSxxQkFBcUIsQ0FBQTtBQUUvQzs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUVIOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgscUNBQXFDO0FBQ3JDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQTtBQUNuQiwrREFBK0Q7QUFDL0QsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFBO0FBQ3JCLCtEQUErRDtBQUMvRCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUE7QUFDckIsK0NBQStDO0FBQy9DLE1BQU0sWUFBWSxHQUFHLEVBQUMsZUFBZSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBQyxDQUFBO0FBRXhGOztHQUVHO0FBQ0gsTUFBTSw4QkFBK0IsU0FBUSxjQUFjO0lBQ3pELE1BQU0sQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDO1FBQ2hDLFNBQVMsRUFBRSxTQUFTLENBQUMsTUFBTTtRQUMzQixLQUFLLEVBQUUsU0FB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QyxhQUFhLEVBQUUsQ0FBQztZQUMxRixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWE7UUFDWCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQUE7UUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxDQUFBO1FBRWpELE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQ3pCLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBQyxDQUFDLENBQ3RHLENBQUE7UUFDRCxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDYixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFBO0lBQ2hDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUN0QixNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUE7UUFFakQsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLFVBQVU7WUFBRSxPQUFNO1FBRTNELElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFBO1FBRS9CLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksU0FBUyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3RCLENBQUM7SUFDSCxDQUFDLENBQUE7O0FBR0gsZUFBZSxJQUFJLENBQUMsY0FBYyxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbi8vIEB0cy1leHBlY3QtZXJyb3IgUGFja2FnZSBzaGlwcyBubyAuZC50cyBmaWxlcy5cbmltcG9ydCBQcm9wVHlwZXNFeGFjdCBmcm9tIFwicHJvcC10eXBlcy1leGFjdFwiXG5pbXBvcnQgUmVhY3QsIHttZW1vLCB1c2VNZW1vfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtBbmltYXRlZCwgUHJlc3NhYmxlLCBUZXh0LCBWaWV3fSBmcm9tIFwicmVhY3QtbmF0aXZlXCJcbmltcG9ydCB7c2hhcGVDb21wb25lbnQsIFNoYXBlQ29tcG9uZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvc2hhcGUtY29tcG9uZW50LmpzXCJcbmltcG9ydCB7dXNlQnJlYWtwb2ludH0gZnJvbSBcInJlc3BvbnNpdmUtYnJlYWtwb2ludHNcIlxuXG5pbXBvcnQgY29uZmlndXJhdGlvbiBmcm9tIFwiLi4vY29uZmlndXJhdGlvbi5qc1wiXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gU3RvcmVkTm90aWZpY2F0aW9uVHlwZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvdW50XG4gKiBAcHJvcGVydHkge3N0cmluZyB8IHVuZGVmaW5lZH0gaWRcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBoZWlnaHRcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBtYXJnaW5Cb3R0b21cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBtZWFzdXJlZEhlaWdodFxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1lc3NhZ2VcbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSBvcGFjaXR5XG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHBlcnNpc3RlbnRcbiAqIEBwcm9wZXJ0eSB7XCJ0b2FzdFwiIHwgXCJtb2RhbFwifSBwcmVzZW50YXRpb25cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyIHwgdW5kZWZpbmVkfSBwcm9ncmVzc1xuICogQHByb3BlcnR5IHtib29sZWFufSByZW1vdmluZ1xuICogQHByb3BlcnR5IHtSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZH0gdGltZW91dFxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRpdGxlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRmxhc2hOb3RpZmljYXRpb25zTm90aWZpY2F0aW9uUHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nPX0gY2xhc3NOYW1lXG4gKiBAcHJvcGVydHkge251bWJlcn0gY291bnRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXNzYWdlXG4gKiBAcHJvcGVydHkge1N0b3JlZE5vdGlmaWNhdGlvblR5cGV9IG5vdGlmaWNhdGlvblxuICogQHByb3BlcnR5IHsobm90aWZpY2F0aW9uOiBTdG9yZWROb3RpZmljYXRpb25UeXBlLCBtZWFzdXJlZEhlaWdodDogbnVtYmVyKSA9PiB2b2lkfSBvbk1lYXN1cmVkXG4gKiBAcHJvcGVydHkgeyhub3RpZmljYXRpb246IFN0b3JlZE5vdGlmaWNhdGlvblR5cGUpID0+IHZvaWR9IG9uUmVtb3ZlZENsaWNrZWRcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcGVyc2lzdGVudFxuICogQHByb3BlcnR5IHtcInRvYXN0XCIgfCBcIm1vZGFsXCJ9IHByZXNlbnRhdGlvblxuICogQHByb3BlcnR5IHtudW1iZXI9fSBwcm9ncmVzc1xuICogQHByb3BlcnR5IHtib29sZWFufSByZW1vdmluZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHRpdGxlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZVxuICovXG5cbi8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgb2JqZWN0Pn0gKi9cbmNvbnN0IGRhdGFTZXRzID0ge31cbi8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLlZpZXdTdHlsZT59ICovXG5jb25zdCB2aWV3U3R5bGVzID0ge31cbi8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgaW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLlRleHRTdHlsZT59ICovXG5jb25zdCB0ZXh0U3R5bGVzID0ge31cbi8qKiBAdHlwZSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLlZpZXdTdHlsZX0gKi9cbmNvbnN0IGJhckZpbGxTdHlsZSA9IHtiYWNrZ3JvdW5kQ29sb3I6IFwiI2ZmZlwiLCBib3JkZXJSYWRpdXM6IDIsIGhlaWdodDogNCwgd2lkdGg6IFwiMzAlXCJ9XG5cbi8qKlxuICogQGF1Z21lbnRzIHtTaGFwZUNvbXBvbmVudDxGbGFzaE5vdGlmaWNhdGlvbnNOb3RpZmljYXRpb25Qcm9wcz59XG4gKi9cbmNsYXNzIEZsYXNoTm90aWZpY2F0aW9uc05vdGlmaWNhdGlvbiBleHRlbmRzIFNoYXBlQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IFByb3BUeXBlc0V4YWN0KHtcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY291bnQ6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgICBtZXNzYWdlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgbm90aWZpY2F0aW9uOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgb25NZWFzdXJlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvblJlbW92ZWRDbGlja2VkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHBlcnNpc3RlbnQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgcHJlc2VudGF0aW9uOiBQcm9wVHlwZXMub25lT2YoW1widG9hc3RcIiwgXCJtb2RhbFwiXSkuaXNSZXF1aXJlZCxcbiAgICBwcm9ncmVzczogUHJvcFR5cGVzLm51bWJlcixcbiAgICByZW1vdmluZzogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICB0aXRsZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZFxuICB9KVxuXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLkFuaW1hdGVkLlZhbHVlfSAqL1xuICBiYXJTd2VlcCA9IG5ldyBBbmltYXRlZC5WYWx1ZSgwKVxuICAvKiogQHR5cGUge2ltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5BbmltYXRlZC5Db21wb3NpdGVBbmltYXRpb24gfCB1bmRlZmluZWR9ICovXG4gIGJhclN3ZWVwQW5pbWF0aW9uID0gdW5kZWZpbmVkXG4gIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICBiYXJUcmFja1dpZHRoID0gMFxuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdGhhdCBoYWQgZm9jdXMgd2hlbiB0aGlzIG1vZGFsIG5vdGlmaWNhdGlvbiBtb3VudGVkLCBzbyBmb2N1c1xuICAgKiBjYW4gYmUgcmV0dXJuZWQgdG8gaXQgd2hlbiB0aGUgbW9kYWwgaXMgZGlzbWlzc2VkLlxuICAgKiBAdHlwZSB7SFRNTEVsZW1lbnQgfCB1bmRlZmluZWR9XG4gICAqL1xuICBmb2N1c1JldHVybkVsZW1lbnQgPSB1bmRlZmluZWRcbiAgLyoqIEB0eXBlIHt7Zm9jdXM/OiAoKSA9PiB2b2lkfSB8IHVuZGVmaW5lZH0gKi9cbiAgY2FyZFJlZiA9IHVuZGVmaW5lZFxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGlmICh0aGlzLnAucHJlc2VudGF0aW9uICE9IFwibW9kYWxcIikgcmV0dXJuXG5cbiAgICAvLyBSZW1lbWJlciB3aGF0IGhhZCBmb2N1cyBiZWZvcmUgdGhlIGRpYWxvZyBvcGVuZWQgc28gaXQgY2FuIGJlIHJlc3RvcmVkXG4gICAgLy8gb24gZGlzbWlzcy4gT24gbmF0aXZlIHRoZXJlIGlzIG5vIGRvY3VtZW50OyBmb2N1cyBoYW5kbGluZyBpcyBhIG5vLW9wLlxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuZm9jdXNSZXR1cm5FbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudFxuICAgIH1cblxuICAgIC8vIE1vdmUgZm9jdXMgaW50byB0aGUgZGlhbG9nLiBUaGUgY2FyZCBpcyBmb2N1c2FibGUgdmlhIHRhYkluZGV4PXstMX0uXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNhcmRSZWY/LmZvY3VzPy4oKVxuICAgIH0sIDApXG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmJhclN3ZWVwQW5pbWF0aW9uPy5zdG9wKClcblxuICAgIGlmICh0aGlzLnAucHJlc2VudGF0aW9uICE9IFwibW9kYWxcIikgcmV0dXJuXG5cbiAgICAvLyBSZXR1cm4gZm9jdXMgdG8gd2hhdGV2ZXIgd2FzIGZvY3VzZWQgYmVmb3JlIHRoZSBtb2RhbCBvcGVuZWQuXG4gICAgdGhpcy5mb2N1c1JldHVybkVsZW1lbnQ/LmZvY3VzPy4oKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtjb3VudCwgbWVzc2FnZSwgcHJlc2VudGF0aW9uLCBwcm9ncmVzcywgdGl0bGUsIHR5cGV9ID0gdGhpcy5wXG4gICAgY29uc3Qge2NsYXNzTmFtZX0gPSB0aGlzLnByb3BzXG4gICAgY29uc3QgYnJlYWtwb2ludCA9IHVzZUJyZWFrcG9pbnQoKVxuXG4gICAgaWYgKHByZXNlbnRhdGlvbiA9PSBcIm1vZGFsXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlck1vZGFsKClcbiAgICB9XG5cbiAgICBjb25zdCBwcmVzc2FibGVEYXRhU2V0ID0gdXNlTWVtbyhcbiAgICAgICgpID0+ICh7XG4gICAgICAgIGNsYXNzOiBjbGFzc05hbWUsXG4gICAgICAgIHJvbGU6IFwiZGlhbG9nXCIsXG4gICAgICAgIHR5cGVcbiAgICAgIH0pLFxuICAgICAgW2NsYXNzTmFtZSwgdHlwZV1cbiAgICApXG4gICAgcmV0dXJuIChcbiAgICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICAgIHN0eWxlPXt0aGlzLnR0LndyYXBwZXJTdHlsZX1cbiAgICAgID5cbiAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgUmVhY3QgTmF0aXZlIHR5cGVzIGRvIG5vdCBpbmNsdWRlIHRoZSB3ZWItb25seSBkYXRhU2V0IHByb3AuXG4gICAgICAgICAgZGF0YVNldD17cHJlc3NhYmxlRGF0YVNldH1cbiAgICAgICAgICBvbkxheW91dD17dGhpcy50dC5vbkxheW91dH1cbiAgICAgICAgICBvblByZXNzPXt0aGlzLnR0Lm9uUmVtb3ZlZENsaWNrZWR9XG4gICAgICAgICAgc3R5bGU9e2JyZWFrcG9pbnQuc3R5bGluZyh7XG4gICAgICAgICAgICBiYXNlOiB7XG4gICAgICAgICAgICAgIHBhZGRpbmc6IDE1LFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDExLFxuICAgICAgICAgICAgICBjdXJzb3I6IFwicG9pbnRlclwiLFxuICAgICAgICAgICAgICBib3JkZXI6ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCIxcHggc29saWQgcmdiYSgxNjEsIDM0LCAzMiwgMC45NSlcIlxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC45NSlcIlxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImFsZXJ0XCIpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcIjFweCBzb2xpZCByZ2JhKDIwNCwgNTEsIDAsIDAuOTUpXCJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJhY3Rpdml0eVwiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCIxcHggc29saWQgcmdiYSgzMCwgNDEsIDU5LCAwLjk1KVwiXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICAgICAgICB9KSgpLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZ2JhKDE2MSwgMzQsIDMyLCAwLjg3KVwiXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZ2JhKDAsIDAsIDAsIDAuODcpXCJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJhbGVydFwiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZ2JhKDIwNCwgNTEsIDAsIDAuODcpXCJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJhY3Rpdml0eVwiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJyZ2JhKDMwLCA0MSwgNTksIDAuODcpXCJcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH0pKClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzbURvd246IHtcbiAgICAgICAgICAgICAgd2lkdGg6IFwiMTAwJVwiXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWRVcDoge1xuICAgICAgICAgICAgICB3aWR0aDogMzAwLFxuICAgICAgICAgICAgICBtYXhXaWR0aDogXCIxMDAlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KX1cbiAgICAgICAgICB0ZXN0SUQ9XCJmbGFzaC1ub3RpZmljYXRpb25zLW5vdGlmaWNhdGlvblwiXG4gICAgICAgID5cbiAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgc3R5bGU9e3ZpZXdTdHlsZXMudGl0bGVWaWV3IHx8PSB7bWFyZ2luQm90dG9tOiA1fX1cbiAgICAgICAgICAgIHRlc3RJRD1cIm5vdGlmaWNhdGlvbi10aXRsZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgc3R5bGU9e3RleHRTdHlsZXMudGl0bGVUZXh0IHx8PSB7XG4gICAgICAgICAgICAgICAgY29sb3I6IFwiI2ZmZlwiLFxuICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IDcwMFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB0ZXN0SUQ9e2BmbGFzaC1ub3RpZmljYXRpb25zL25vdGlmaWNhdGlvbi0ke2NvdW50fS90aXRsZWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgUmVhY3QgTmF0aXZlIHR5cGVzIGRvIG5vdCBpbmNsdWRlIHRoZSB3ZWItb25seSBkYXRhU2V0IHByb3AuXG4gICAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0c1tgbm90aWZpY2F0aW9uTWVzc2FnZS0ke2NvdW50fWBdIHx8PSB7Y291bnQ6IGAke2NvdW50fWB9fVxuICAgICAgICAgICAgdGVzdElEPVwibm90aWZpY2F0aW9uLW1lc3NhZ2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgIHN0eWxlPXt0ZXh0U3R5bGVzLm1lc3NhZ2VUZXh0IHx8PSB7Y29sb3I6IFwiI2ZmZlwifX1cbiAgICAgICAgICAgICAgdGVzdElEPXtgZmxhc2gtbm90aWZpY2F0aW9ucy9ub3RpZmljYXRpb24tJHtjb3VudH0vbWVzc2FnZWB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHttZXNzYWdlfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIDwvVmlldz5cbiAgICAgICAgICB7dHlwZSA9PSBcImFjdGl2aXR5XCIgPyAoXG4gICAgICAgICAgICA8Vmlld1xuICAgICAgICAgICAgICBvbkxheW91dD17dGhpcy50dC5vbkJhckxheW91dH1cbiAgICAgICAgICAgICAgc3R5bGU9e3ZpZXdTdHlsZXMuYmFyVHJhY2sgfHw9IHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpXCIsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAyLFxuICAgICAgICAgICAgICAgIGhlaWdodDogNCxcbiAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IDEwLFxuICAgICAgICAgICAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHRlc3RJRD1cImZsYXNoLW5vdGlmaWNhdGlvbnMtbm90aWZpY2F0aW9uLWJhclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtwcm9ncmVzcyA9PSB1bmRlZmluZWQgPyAoXG4gICAgICAgICAgICAgICAgPEFuaW1hdGVkLlZpZXdcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIC4uLmJhckZpbGxTdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBbe3RyYW5zbGF0ZVg6IHRoaXMuYmFyU3dlZXB9XVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIHRlc3RJRD1cImZsYXNoLW5vdGlmaWNhdGlvbnMtbm90aWZpY2F0aW9uLWJhci1maWxsXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAuLi5iYXJGaWxsU3R5bGUsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBgJHtwcm9ncmVzcyAqIDEwMH0lYFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIHRlc3RJRD1cImZsYXNoLW5vdGlmaWNhdGlvbnMtbm90aWZpY2F0aW9uLWJhci1maWxsXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgIDwvQW5pbWF0ZWQuVmlldz5cbiAgICApXG4gIH1cblxuICAvKipcbiAgICogTW9kYWwgcHJlc2VudGF0aW9uOiBhIGZ1bGwtc2NyZWVuIGRpbW1lZCBiYWNrZHJvcCB3aXRoIHRoZSBub3RpZmljYXRpb25cbiAgICogY2VudGVyZWQgb24gdG9wLiBUaGUgYmFja2Ryb3AgaGFzIG5vIHByZXNzIGhhbmRsZXIgb24gcHVycG9zZSDigJQgY2xpY2tpbmdcbiAgICogaXQgKG9yIHByZXNzaW5nIEVzY2FwZSkgbXVzdCBub3QgZGlzbWlzcyB0aGUgbm90aWZpY2F0aW9uOyBvbmx5IHRoZVxuICAgKiBleHBsaWNpdCBkaXNtaXNzIGJ1dHRvbiBkb2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UmVhY3QuUmVhY3RFbGVtZW50fVxuICAgKi9cbiAgcmVuZGVyTW9kYWwoKSB7XG4gICAgY29uc3Qge2NvdW50LCBtZXNzYWdlLCB0aXRsZSwgdHlwZX0gPSB0aGlzLnBcbiAgICBjb25zdCBicmVha3BvaW50ID0gdXNlQnJlYWtwb2ludCgpXG5cbiAgICBjb25zdCBkaXNtaXNzTGFiZWwgPSBjb25maWd1cmF0aW9uLnRyYW5zbGF0ZShcImpzLnNoYXJlZC5kaXNtaXNzXCIsIHtkZWZhdWx0VmFsdWU6IFwiRGlzbWlzc1wifSlcblxuICAgIHJldHVybiAoXG4gICAgICA8QW5pbWF0ZWQuVmlld1xuICAgICAgICBzdHlsZT17dGhpcy50dC5tb2RhbFdyYXBwZXJTdHlsZX1cbiAgICAgICAgdGVzdElEPVwiZmxhc2gtbm90aWZpY2F0aW9ucy1tb2RhbC1iYWNrZHJvcFwiXG4gICAgICA+XG4gICAgICAgIDxQcmVzc2FibGVcbiAgICAgICAgICBhcmlhLW1vZGFsXG4gICAgICAgICAgcmVmPXsvKiogQHBhcmFtIHtpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuVmlldyB8IG51bGx9IHJlZiAqLyAocmVmKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNhcmRSZWYgPSAvKiogQHR5cGUge3tmb2N1cz86ICgpID0+IHZvaWR9IHwgdW5kZWZpbmVkfSAqLyAocmVmKVxuICAgICAgICAgIH19XG4gICAgICAgICAgcm9sZT1cImFsZXJ0ZGlhbG9nXCJcbiAgICAgICAgICBzdHlsZT17YnJlYWtwb2ludC5zdHlsaW5nKHtcbiAgICAgICAgICAgIGJhc2U6IHtcbiAgICAgICAgICAgICAgcGFkZGluZzogMTUsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMTEsXG4gICAgICAgICAgICAgIGJvcmRlcjogKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcIjFweCBzb2xpZCByZ2JhKDE2MSwgMzQsIDMyLCAwLjk1KVwiXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCIxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjk1KVwiXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IFwiYWxlcnRcIikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiMXB4IHNvbGlkIHJnYmEoMjA0LCA1MSwgMCwgMC45NSlcIlxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImFjdGl2aXR5XCIpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcIjFweCBzb2xpZCByZ2JhKDMwLCA0MSwgNTksIDAuOTUpXCJcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICAgICAgICAgIH0pKCksXG4gICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcInJnYmEoMTYxLCAzNCwgMzIsIDAuODcpXCJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcInJnYmEoMCwgMCwgMCwgMC44NylcIlxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImFsZXJ0XCIpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcInJnYmEoMjA0LCA1MSwgMCwgMC44NylcIlxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBcImFjdGl2aXR5XCIpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcInJnYmEoMzAsIDQxLCA1OSwgMC44NylcIlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBcInJnYmEoMCwgMCwgMCwgMC44NylcIlxuICAgICAgICAgICAgICB9KSgpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc21Eb3duOiB7XG4gICAgICAgICAgICAgIG1hcmdpbkxlZnQ6IDIwLFxuICAgICAgICAgICAgICBtYXJnaW5SaWdodDogMjAsXG4gICAgICAgICAgICAgIG1heFdpZHRoOiBcIjEwMCVcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1kVXA6IHtcbiAgICAgICAgICAgICAgd2lkdGg6IDQwMCxcbiAgICAgICAgICAgICAgbWF4V2lkdGg6IFwiODAlXCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KX1cbiAgICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgICAgdGVzdElEPVwiZmxhc2gtbm90aWZpY2F0aW9ucy1ub3RpZmljYXRpb25cIlxuICAgICAgICA+XG4gICAgICAgICAgPFZpZXdcbiAgICAgICAgICAgIHN0eWxlPXt2aWV3U3R5bGVzLnRpdGxlVmlldyB8fD0ge21hcmdpbkJvdHRvbTogNX19XG4gICAgICAgICAgICB0ZXN0SUQ9XCJub3RpZmljYXRpb24tdGl0bGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxUZXh0XG4gICAgICAgICAgICAgIHN0eWxlPXt0ZXh0U3R5bGVzLnRpdGxlVGV4dCB8fD0ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBcIiNmZmZcIixcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiA3MDBcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgdGVzdElEPXtgZmxhc2gtbm90aWZpY2F0aW9ucy9ub3RpZmljYXRpb24tJHtjb3VudH0vdGl0bGVgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dGl0bGV9XG4gICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgPC9WaWV3PlxuICAgICAgICAgIDxWaWV3XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFJlYWN0IE5hdGl2ZSB0eXBlcyBkbyBub3QgaW5jbHVkZSB0aGUgd2ViLW9ubHkgZGF0YVNldCBwcm9wLlxuICAgICAgICAgICAgZGF0YVNldD17ZGF0YVNldHNbYG5vdGlmaWNhdGlvbk1lc3NhZ2UtJHtjb3VudH1gXSB8fD0ge2NvdW50OiBgJHtjb3VudH1gfX1cbiAgICAgICAgICAgIHRlc3RJRD1cIm5vdGlmaWNhdGlvbi1tZXNzYWdlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICBzdHlsZT17dGV4dFN0eWxlcy5tZXNzYWdlVGV4dCB8fD0ge2NvbG9yOiBcIiNmZmZcIn19XG4gICAgICAgICAgICAgIHRlc3RJRD17YGZsYXNoLW5vdGlmaWNhdGlvbnMvbm90aWZpY2F0aW9uLSR7Y291bnR9L21lc3NhZ2VgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7bWVzc2FnZX1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXc+XG4gICAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgICAgb25QcmVzcz17dGhpcy50dC5vblJlbW92ZWRDbGlja2VkfVxuICAgICAgICAgICAgc3R5bGU9e2JyZWFrcG9pbnQuc3R5bGluZyh7XG4gICAgICAgICAgICAgIGJhc2U6IHtcbiAgICAgICAgICAgICAgICBhbGlnblNlbGY6IFwiZmxleC1zdGFydFwiLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpXCIsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiA4LFxuICAgICAgICAgICAgICAgIGJvcmRlcldpZHRoOiAxLFxuICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KVwiLFxuICAgICAgICAgICAgICAgIGN1cnNvcjogXCJwb2ludGVyXCIsXG4gICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAxNSxcbiAgICAgICAgICAgICAgICBwYWRkaW5nSG9yaXpvbnRhbDogMTQsXG4gICAgICAgICAgICAgICAgcGFkZGluZ1ZlcnRpY2FsOiA4XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgdGVzdElEPVwiZmxhc2gtbm90aWZpY2F0aW9ucy1tb2RhbC1kaXNtaXNzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICBzdHlsZT17dGV4dFN0eWxlcy5kaXNtaXNzVGV4dCB8fD0ge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBcIiNmZmZcIixcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiA3MDBcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2Rpc21pc3NMYWJlbH1cbiAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICA8L1ByZXNzYWJsZT5cbiAgICAgICAgPC9QcmVzc2FibGU+XG4gICAgICA8L0FuaW1hdGVkLlZpZXc+XG4gICAgKVxuICB9XG5cbiAgZ2V0IHdyYXBwZXJTdHlsZSgpIHtcbiAgICBjb25zdCB7bm90aWZpY2F0aW9uLCByZW1vdmluZ30gPSB0aGlzLnBcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5BbmltYXRlZC5XaXRoQW5pbWF0ZWRPYmplY3Q8aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLlZpZXdTdHlsZT59ICovICh7XG4gICAgICBoZWlnaHQ6IG5vdGlmaWNhdGlvbi5tZWFzdXJlZEhlaWdodCA/IG5vdGlmaWNhdGlvbi5oZWlnaHQgOiB1bmRlZmluZWQsXG4gICAgICBtYXJnaW5Cb3R0b206IG5vdGlmaWNhdGlvbi5tYXJnaW5Cb3R0b20sXG4gICAgICBvcGFjaXR5OiBub3RpZmljYXRpb24ub3BhY2l0eSxcbiAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgICAgcG9pbnRlckV2ZW50czogcmVtb3ZpbmcgPyBcIm5vbmVcIiA6IFwiYXV0b1wiXG4gICAgfSlcbiAgfVxuXG4gIGdldCBtb2RhbFdyYXBwZXJTdHlsZSgpIHtcbiAgICBjb25zdCB7bm90aWZpY2F0aW9uLCByZW1vdmluZ30gPSB0aGlzLnBcblxuICAgIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5BbmltYXRlZC5XaXRoQW5pbWF0ZWRPYmplY3Q8aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLlZpZXdTdHlsZT59ICovICh7XG4gICAgICAvLyBEaW1tZWQgZnVsbC1zY3JlZW4gYmFja2Ryb3Agd2l0aCB0aGUgY2FyZCBjZW50ZXJlZCBvbiB0b3Agb2YgaXQuXG4gICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBcInJnYmEoMCwgMCwgMCwgMC40NSlcIixcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgbGVmdDogMCxcbiAgICAgIG9wYWNpdHk6IG5vdGlmaWNhdGlvbi5vcGFjaXR5LFxuICAgICAgcG9pbnRlckV2ZW50czogcmVtb3ZpbmcgPyBcIm5vbmVcIiA6IFwiYXV0b1wiLFxuICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdG9wOiAwXG4gICAgfSlcbiAgfVxuXG4gIG9uUmVtb3ZlZENsaWNrZWQgPSAoKSA9PiB0aGlzLnAub25SZW1vdmVkQ2xpY2tlZCh0aGlzLnAubm90aWZpY2F0aW9uKVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5MYXlvdXRDaGFuZ2VFdmVudH0gZXZlbnRcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbkxheW91dCA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IHtub3RpZmljYXRpb259ID0gdGhpcy5wXG5cbiAgICBpZiAoIW5vdGlmaWNhdGlvbi5tZWFzdXJlZEhlaWdodCkge1xuICAgICAgdGhpcy5wLm9uTWVhc3VyZWQobm90aWZpY2F0aW9uLCBldmVudC5uYXRpdmVFdmVudC5sYXlvdXQuaGVpZ2h0KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0ZsYXNoTm90aWZpY2F0aW9uc05vdGlmaWNhdGlvblByb3BzfSBwcmV2UHJvcHNcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgaWYgKHByZXZQcm9wcy5wcm9ncmVzcyA9PSB1bmRlZmluZWQgJiYgdGhpcy5wLnByb2dyZXNzICE9IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5iYXJTd2VlcEFuaW1hdGlvbj8uc3RvcCgpXG4gICAgICB0aGlzLmJhclN3ZWVwQW5pbWF0aW9uID0gdW5kZWZpbmVkXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAocHJldlByb3BzLnByb2dyZXNzICE9IHVuZGVmaW5lZCAmJiB0aGlzLnAucHJvZ3Jlc3MgPT0gdW5kZWZpbmVkICYmIHRoaXMuYmFyVHJhY2tXaWR0aCkge1xuICAgICAgdGhpcy5zdGFydEJhclN3ZWVwKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBzdGFydEJhclN3ZWVwKCkge1xuICAgIHRoaXMuYmFyU3dlZXBBbmltYXRpb24/LnN0b3AoKVxuICAgIHRoaXMuYmFyU3dlZXAuc2V0VmFsdWUoLXRoaXMuYmFyVHJhY2tXaWR0aCAqIDAuMylcblxuICAgIGNvbnN0IHN3ZWVwID0gQW5pbWF0ZWQubG9vcChcbiAgICAgIEFuaW1hdGVkLnRpbWluZyh0aGlzLmJhclN3ZWVwLCB7ZHVyYXRpb246IDEwMDAsIHRvVmFsdWU6IHRoaXMuYmFyVHJhY2tXaWR0aCwgdXNlTmF0aXZlRHJpdmVyOiBmYWxzZX0pXG4gICAgKVxuICAgIHN3ZWVwLnN0YXJ0KClcbiAgICB0aGlzLmJhclN3ZWVwQW5pbWF0aW9uID0gc3dlZXBcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2ltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5MYXlvdXRDaGFuZ2VFdmVudH0gZXZlbnRcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBvbkJhckxheW91dCA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IHRyYWNrV2lkdGggPSBldmVudC5uYXRpdmVFdmVudC5sYXlvdXQud2lkdGhcblxuICAgIGlmICghdHJhY2tXaWR0aCB8fCB0aGlzLmJhclRyYWNrV2lkdGggPT0gdHJhY2tXaWR0aCkgcmV0dXJuXG5cbiAgICB0aGlzLmJhclRyYWNrV2lkdGggPSB0cmFja1dpZHRoXG5cbiAgICBpZiAodGhpcy5wLnByb2dyZXNzID09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zdGFydEJhclN3ZWVwKClcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVtbyhzaGFwZUNvbXBvbmVudChGbGFzaE5vdGlmaWNhdGlvbnNOb3RpZmljYXRpb24pKVxuIl19
@@ -1,24 +1,28 @@
1
1
  export default class FlashNotifications {
2
2
  /**
3
3
  * @param {string} message
4
+ * @param {NotificationOptions} [options]
4
5
  * @returns {void}
5
6
  */
6
- static alert(message: string): void;
7
+ static alert(message: string, options?: NotificationOptions): void;
7
8
  /**
8
9
  * @param {string} message
10
+ * @param {NotificationOptions} [options]
9
11
  * @returns {void}
10
12
  */
11
- static error(message: string): void;
13
+ static error(message: string, options?: NotificationOptions): void;
12
14
  /**
13
15
  * @param {unknown} error
16
+ * @param {NotificationOptions} [options]
14
17
  * @returns {void}
15
18
  */
16
- static errorResponse(error: unknown): void;
19
+ static errorResponse(error: unknown, options?: NotificationOptions): void;
17
20
  /**
18
21
  * @param {string} message
22
+ * @param {NotificationOptions} [options]
19
23
  * @returns {void}
20
24
  */
21
- static success(message: string): void;
25
+ static success(message: string, options?: NotificationOptions): void;
22
26
  /**
23
27
  * Shows a long-running activity notification with a loading bar. Unlike the
24
28
  * other notification types it never auto-dismisses: the returned handle
@@ -32,11 +36,15 @@ export default class FlashNotifications {
32
36
  * @param {object} args
33
37
  * @param {string} args.text
34
38
  * @param {string} args.type
39
+ * @param {boolean=} args.persistent
40
+ * @param {"toast" | "modal"=} args.presentation
35
41
  * @returns {void}
36
42
  */
37
43
  static show(args: {
38
44
  text: string;
39
45
  type: string;
46
+ persistent?: boolean | undefined;
47
+ presentation?: ("toast" | "modal") | undefined;
40
48
  }): void;
41
49
  }
42
50
  export type ActivityArgs = {
@@ -69,4 +77,18 @@ export type ActivityHandle = {
69
77
  */
70
78
  done: () => void;
71
79
  };
80
+ export type NotificationOptions = {
81
+ /**
82
+ * When true the notification never auto-dismisses. It stays on
83
+ * screen until it is dismissed, just like an activity notification, but without a progress bar.
84
+ */
85
+ persistent?: boolean | undefined;
86
+ /**
87
+ * "toast" (the default) renders the notification in the
88
+ * usual stacked toast container. "modal" renders it as a centered dialog over a backdrop that
89
+ * blocks interaction with the app underneath; it can only be left via its explicit dismiss
90
+ * button.
91
+ */
92
+ presentation?: ("toast" | "modal") | undefined;
93
+ };
72
94
  //# sourceMappingURL=flash-notifications.d.ts.map
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"flash-notifications.d.ts","sourceRoot":"/src/","sources":["flash-notifications.js"],"names":[],"mappings":"AAqCA;IACE;;;;OAIG;IACH,sBAJW,MAAM,YACN,mBAAmB,GACjB,IAAI,CAIhB;IAED;;;;OAIG;IACH,sBAJW,MAAM,YACN,mBAAmB,GACjB,IAAI,CAIhB;IAED;;;;OAIG;IACH,4BAJW,OAAO,YACP,mBAAmB,GACjB,IAAI,CAmDhB;IAED;;;;OAIG;IACH,wBAJW,MAAM,YACN,mBAAmB,GACjB,IAAI,CAIhB;IAED;;;;;;;OAOG;IACH,6BAHW,YAAY,GACV,cAAc,CAgD1B;IAED;;;;;;;OAOG;IACH,kBANG;QAAqB,IAAI,EAAjB,MAAM;QACO,IAAI,EAAjB,MAAM;QACS,UAAU,GAAzB,OAAO,YAAC;QACiB,YAAY,GAArC,CAAA,OAAO,GAAG,OAAO,aAAC;KAC1B,GAAU,IAAI,CAsBhB;CACF;;;;;aArMa,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;;;;;;;iBAKV,OAAO,YAAC;;;;;;;mBAER,CAAA,OAAO,GAAG,OAAO,aAAC"}
@@ -17,29 +17,41 @@ import events from "./events.js";
17
17
  * @property {(message?: string) => void} fail Flashes the error tone, then dismisses the notification.
18
18
  * @property {() => void} done Dismisses the notification without a tone change.
19
19
  */
20
+ /**
21
+ * @typedef {object} NotificationOptions
22
+ * @property {boolean=} persistent When true the notification never auto-dismisses. It stays on
23
+ * screen until it is dismissed, just like an activity notification, but without a progress bar.
24
+ * @property {"toast" | "modal"=} presentation "toast" (the default) renders the notification in the
25
+ * usual stacked toast container. "modal" renders it as a centered dialog over a backdrop that
26
+ * blocks interaction with the app underneath; it can only be left via its explicit dismiss
27
+ * button.
28
+ */
20
29
  let activityNotificationCount = 0;
21
30
  export default class FlashNotifications {
22
31
  /**
23
32
  * @param {string} message
33
+ * @param {NotificationOptions} [options]
24
34
  * @returns {void}
25
35
  */
26
- static alert(message) {
27
- FlashNotifications.show({ type: "alert", text: message });
36
+ static alert(message, options) {
37
+ FlashNotifications.show({ type: "alert", text: message, ...options });
28
38
  }
29
39
  /**
30
40
  * @param {string} message
41
+ * @param {NotificationOptions} [options]
31
42
  * @returns {void}
32
43
  */
33
- static error(message) {
34
- FlashNotifications.show({ type: "error", text: message });
44
+ static error(message, options) {
45
+ FlashNotifications.show({ type: "error", text: message, ...options });
35
46
  }
36
47
  /**
37
48
  * @param {unknown} error
49
+ * @param {NotificationOptions} [options]
38
50
  * @returns {void}
39
51
  */
40
- static errorResponse(error) {
52
+ static errorResponse(error, options) {
41
53
  if (!(error instanceof Error)) {
42
- FlashNotifications.error(typeof error == "string" ? error : String(error));
54
+ FlashNotifications.error(typeof error == "string" ? error : String(error), options);
43
55
  return;
44
56
  }
45
57
  // @ts-expect-error
@@ -48,11 +60,11 @@ export default class FlashNotifications {
48
60
  if (error.hasUnhandledErrors()) {
49
61
  // @ts-expect-error
50
62
  const unhandledErrorMessages = error.getUnhandledErrors().map((subError) => subError.getFullErrorMessages()).flat();
51
- FlashNotifications.error(unhandledErrorMessages.join(". "));
63
+ FlashNotifications.error(unhandledErrorMessages.join(". "), options);
52
64
  }
53
65
  else {
54
66
  const defaultValue = "Couldn't submit because of validation errors.";
55
- FlashNotifications.alert(configuration.translate("js.notification.couldnt_submit_because_of_validation_errors", { defaultValue }));
67
+ FlashNotifications.alert(configuration.translate("js.notification.couldnt_submit_because_of_validation_errors", { defaultValue }), options);
56
68
  }
57
69
  // @ts-expect-error
58
70
  }
@@ -67,13 +79,13 @@ export default class FlashNotifications {
67
79
  }
68
80
  return digg(error, "message");
69
81
  });
70
- FlashNotifications.error(errorMessages.join(". "));
82
+ FlashNotifications.error(errorMessages.join(". "), options);
71
83
  }
72
84
  else if (error.message) {
73
- FlashNotifications.error(error.message);
85
+ FlashNotifications.error(error.message, options);
74
86
  }
75
87
  else {
76
- FlashNotifications.error(configuration.translate("js.shared.something_went_wrong", { defaultValue: "Something went wrong." }));
88
+ FlashNotifications.error(configuration.translate("js.shared.something_went_wrong", { defaultValue: "Something went wrong." }), options);
77
89
  }
78
90
  }
79
91
  else {
@@ -81,15 +93,16 @@ export default class FlashNotifications {
81
93
  const defaultErrorMessage = configuration.translate("js.shared.something_went_wrong", { defaultValue: "Something went wrong." });
82
94
  const message = digg(error, "message");
83
95
  console.error(`Didnt know what to do with that ${constructorName}: ${message}`);
84
- FlashNotifications.error(defaultErrorMessage);
96
+ FlashNotifications.error(defaultErrorMessage, options);
85
97
  }
86
98
  }
87
99
  /**
88
100
  * @param {string} message
101
+ * @param {NotificationOptions} [options]
89
102
  * @returns {void}
90
103
  */
91
- static success(message) {
92
- FlashNotifications.show({ type: "success", text: message });
104
+ static success(message, options) {
105
+ FlashNotifications.show({ type: "success", text: message, ...options });
93
106
  }
94
107
  /**
95
108
  * Shows a long-running activity notification with a loading bar. Unlike the
@@ -143,6 +156,8 @@ export default class FlashNotifications {
143
156
  * @param {object} args
144
157
  * @param {string} args.text
145
158
  * @param {string} args.type
159
+ * @param {boolean=} args.persistent
160
+ * @param {"toast" | "modal"=} args.presentation
146
161
  * @returns {void}
147
162
  */
148
163
  static show(args) {
@@ -161,9 +176,11 @@ export default class FlashNotifications {
161
176
  }
162
177
  events.emit("pushNotification", {
163
178
  message: args.text,
179
+ persistent: args.persistent,
180
+ presentation: args.presentation,
164
181
  title,
165
182
  type: args.type
166
183
  });
167
184
  }
168
185
  }
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhc2gtbm90aWZpY2F0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiZmxhc2gtbm90aWZpY2F0aW9ucy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUU5QixPQUFPLGFBQWEsTUFBTSxvQkFBb0IsQ0FBQTtBQUM5QyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFFaEM7OztHQUdHO0FBRUg7OztHQUdHO0FBRUg7Ozs7OztHQU1HO0FBRUgsSUFBSSx5QkFBeUIsR0FBRyxDQUFDLENBQUE7QUFFakMsTUFBTSxDQUFDLE9BQU8sT0FBTyxrQkFBa0I7SUFDckM7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPO1FBQ2xCLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUE7SUFDekQsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTztRQUNsQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFBO0lBQ3pELENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUs7UUFDeEIsSUFBSSxDQUFDLENBQUMsS0FBSyxZQUFZLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDOUIsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtZQUUxRSxPQUFNO1FBQ1IsQ0FBQztRQUVELG1CQUFtQjtRQUNuQixJQUFJLEtBQUssQ0FBQyxZQUFZLElBQUksaUJBQWlCLEVBQUUs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QUFDO1lBRUQsSUFBSTtnQkFDRixXQUFXLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDckIsQ0FBQztTQUNGLENBQUE7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUk7UUFDZCxJQUFJLEtBQUssQ0FBQTtRQUVULElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUN6QixLQUFLLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxFQUFDLFlBQVksRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFBO1FBQzdFLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksT0FBTyxFQUFFLENBQUM7WUFDaEMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsRUFBQyxZQUFZLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQTtRQUM3RSxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLEtBQUssR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLG1CQUFtQixFQUFFLEVBQUMsWUFBWSxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUE7UUFDakYsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyx3QkFBd0IsRUFBRSxFQUFDLFlBQVksRUFBRSxjQUFjLEVBQUMsQ0FBQyxDQUFBO1FBQzNGLENBQUM7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzlCLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNsQixLQUFLO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1NBQ2hCLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuXG5pbXBvcnQgY29uZmlndXJhdGlvbiBmcm9tIFwiLi9jb25maWd1cmF0aW9uLmpzXCJcbmltcG9ydCBldmVudHMgZnJvbSBcIi4vZXZlbnRzLmpzXCJcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBY3Rpdml0eUFyZ3NcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXNzYWdlIFRyYW5zbGF0ZWQgZGlzcGxheSBzdHJpbmcgc2hvd24gd2hpbGUgdGhlIGFjdGl2aXR5IHJ1bnMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBY3Rpdml0eVVwZGF0ZUFyZ3NcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyPX0gcHJvZ3Jlc3MgRGV0ZXJtaW5hdGUgcHJvZ3Jlc3MgaW4gWzAsIDFdLiBPbWl0IHRvIGtlZXAgdGhlIGJhciBpbmRldGVybWluYXRlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQWN0aXZpdHlIYW5kbGVcbiAqIEBwcm9wZXJ0eSB7KGFyZ3M/OiBBY3Rpdml0eVVwZGF0ZUFyZ3MpID0+IHZvaWR9IHVwZGF0ZSBNb3ZlcyB0aGUgbG9hZGluZyBiYXI7IHdpdGhvdXQgYSBwcm9ncmVzcyB2YWx1ZSBpdCBzdGF5cyBpbmRldGVybWluYXRlLlxuICogQHByb3BlcnR5IHsobWVzc2FnZT86IHN0cmluZykgPT4gdm9pZH0gc3VjY2VlZCBGbGFzaGVzIHRoZSBzdWNjZXNzIHRvbmUsIHRoZW4gZGlzbWlzc2VzIHRoZSBub3RpZmljYXRpb24uXG4gKiBAcHJvcGVydHkgeyhtZXNzYWdlPzogc3RyaW5nKSA9PiB2b2lkfSBmYWlsIEZsYXNoZXMgdGhlIGVycm9yIHRvbmUsIHRoZW4gZGlzbWlzc2VzIHRoZSBub3RpZmljYXRpb24uXG4gKiBAcHJvcGVydHkgeygpID0+IHZvaWR9IGRvbmUgRGlzbWlzc2VzIHRoZSBub3RpZmljYXRpb24gd2l0aG91dCBhIHRvbmUgY2hhbmdlLlxuICovXG5cbmxldCBhY3Rpdml0eU5vdGlmaWNhdGlvbkNvdW50ID0gMFxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGbGFzaE5vdGlmaWNhdGlvbnMge1xuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBzdGF0aWMgYWxlcnQobWVzc2FnZSkge1xuICAgIEZsYXNoTm90aWZpY2F0aW9ucy5zaG93KHt0eXBlOiBcImFsZXJ0XCIsIHRleHQ6IG1lc3NhZ2V9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIGVycm9yKG1lc3NhZ2UpIHtcbiAgICBGbGFzaE5vdGlmaWNhdGlvbnMuc2hvdyh7dHlwZTogXCJlcnJvclwiLCB0ZXh0OiBtZXNzYWdlfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3Vua25vd259IGVycm9yXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIGVycm9yUmVzcG9uc2UoZXJyb3IpIHtcbiAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgRmxhc2hOb3RpZmljYXRpb25zLmVycm9yKHR5cGVvZiBlcnJvciA9PSBcInN0cmluZ1wiID8gZXJyb3IgOiBTdHJpbmcoZXJyb3IpKVxuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgaWYgKGVycm9yLmFwaU1ha2VyVHlwZSA9PSBcIlZhbGlkYXRpb25FcnJvclwiKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICBpZiAoZXJyb3IuaGFzVW5oYW5kbGVkRXJyb3JzKCkpIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICBjb25zdCB1bmhhbmRsZWRFcnJvck1lc3NhZ2VzID0gZXJyb3IuZ2V0VW5oYW5kbGVkRXJyb3JzKCkubWFwKChzdWJFcnJvcikgPT4gc3ViRXJyb3IuZ2V0RnVsbEVycm9yTWVzc2FnZXMoKSkuZmxhdCgpXG5cbiAgICAgICAgRmxhc2hOb3RpZmljYXRpb25zLmVycm9yKHVuaGFuZGxlZEVycm9yTWVzc2FnZXMuam9pbihcIi4gXCIpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gXCJDb3VsZG4ndCBzdWJtaXQgYmVjYXVzZSBvZiB2YWxpZGF0aW9uIGVycm9ycy5cIlxuXG4gICAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5hbGVydChjb25maWd1cmF0aW9uLnRyYW5zbGF0ZShcImpzLm5vdGlmaWNhdGlvbi5jb3VsZG50X3N1Ym1pdF9iZWNhdXNlX29mX3ZhbGlkYXRpb25fZXJyb3JzXCIsIHtkZWZhdWx0VmFsdWV9KSlcbiAgICAgIH1cbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgfSBlbHNlIGlmIChlcnJvci5hcGlNYWtlclR5cGUgPT0gXCJCYXNlRXJyb3JcIikge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBlcnJvci5hcmdzICYmIGVycm9yLmFyZ3MucmVzcG9uc2VcbiAgICAgIGNvbnN0IGVycm9ycyA9IC8qKiBAdHlwZSB7QXJyYXk8c3RyaW5nIHwge21lc3NhZ2U6IHN0cmluZ31bXT4gfCB1bmRlZmluZWR9ICovIChyZXNwb25zZSAmJiByZXNwb25zZS5lcnJvcnMpXG5cbiAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IGVycm9ycy5tYXAoKGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBlcnJvciA9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZGlnZyhlcnJvciwgXCJtZXNzYWdlXCIpXG4gICAgICAgIH0pXG5cbiAgICAgICAgRmxhc2hOb3RpZmljYXRpb25zLmVycm9yKGVycm9yTWVzc2FnZXMuam9pbihcIi4gXCIpKVxuICAgICAgfSBlbHNlIGlmIChlcnJvci5tZXNzYWdlKSB7XG4gICAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5lcnJvcihlcnJvci5tZXNzYWdlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgRmxhc2hOb3RpZmljYXRpb25zLmVycm9yKGNvbmZpZ3VyYXRpb24udHJhbnNsYXRlKFwianMuc2hhcmVkLnNvbWV0aGluZ193ZW50X3dyb25nXCIsIHtkZWZhdWx0VmFsdWU6IFwiU29tZXRoaW5nIHdlbnQgd3JvbmcuXCJ9KSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29uc3RydWN0b3JOYW1lID0gZGlnZyhlcnJvciwgXCJjb25zdHJ1Y3RvclwiLCBcIm5hbWVcIilcbiAgICAgIGNvbnN0IGRlZmF1bHRFcnJvck1lc3NhZ2UgPSBjb25maWd1cmF0aW9uLnRyYW5zbGF0ZShcImpzLnNoYXJlZC5zb21ldGhpbmdfd2VudF93cm9uZ1wiLCB7ZGVmYXVsdFZhbHVlOiBcIlNvbWV0aGluZyB3ZW50IHdyb25nLlwifSlcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBkaWdnKGVycm9yLCBcIm1lc3NhZ2VcIilcblxuICAgICAgY29uc29sZS5lcnJvcihgRGlkbnQga25vdyB3aGF0IHRvIGRvIHdpdGggdGhhdCAke2NvbnN0cnVjdG9yTmFtZX06ICR7bWVzc2FnZX1gKVxuICAgICAgRmxhc2hOb3RpZmljYXRpb25zLmVycm9yKGRlZmF1bHRFcnJvck1lc3NhZ2UpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHN1Y2Nlc3MobWVzc2FnZSkge1xuICAgIEZsYXNoTm90aWZpY2F0aW9ucy5zaG93KHt0eXBlOiBcInN1Y2Nlc3NcIiwgdGV4dDogbWVzc2FnZX0pXG4gIH1cblxuICAvKipcbiAgICogU2hvd3MgYSBsb25nLXJ1bm5pbmcgYWN0aXZpdHkgbm90aWZpY2F0aW9uIHdpdGggYSBsb2FkaW5nIGJhci4gVW5saWtlIHRoZVxuICAgKiBvdGhlciBub3RpZmljYXRpb24gdHlwZXMgaXQgbmV2ZXIgYXV0by1kaXNtaXNzZXM6IHRoZSByZXR1cm5lZCBoYW5kbGVcbiAgICogZGVjaWRlcyB3aGVuIHRoZSBub3RpZmljYXRpb24gbGVhdmVzIHRoZSBzY3JlZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7QWN0aXZpdHlBcmdzfSBhcmdzXG4gICAqIEByZXR1cm5zIHtBY3Rpdml0eUhhbmRsZX1cbiAgICovXG4gIHN0YXRpYyBhY3Rpdml0eSh7bWVzc2FnZX0pIHtcbiAgICBhY3Rpdml0eU5vdGlmaWNhdGlvbkNvdW50ICs9IDFcbiAgICBjb25zdCBpZCA9IGBhY3Rpdml0eS0ke2FjdGl2aXR5Tm90aWZpY2F0aW9uQ291bnR9YFxuXG4gICAgZXZlbnRzLmVtaXQoXCJwdXNoTm90aWZpY2F0aW9uXCIsIHtcbiAgICAgIGlkLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHRpdGxlOiBjb25maWd1cmF0aW9uLnRyYW5zbGF0ZShcImpzLnNoYXJlZC5hY3Rpdml0eVwiLCB7ZGVmYXVsdFZhbHVlOiBcIkFjdGl2aXR5XCJ9KSxcbiAgICAgIHR5cGU6IFwiYWN0aXZpdHlcIlxuICAgIH0pXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge1widXBkYXRlXCIgfCBcInN1Y2NlZWRcIiB8IFwiZmFpbFwiIHwgXCJkb25lXCJ9IGFjdGlvblxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbcGF5bG9hZF1cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBjb25zdCBlbWl0Q29udHJvbCA9IChhY3Rpb24sIHBheWxvYWQgPSB7fSkgPT4ge1xuICAgICAgZXZlbnRzLmVtaXQoXCJhY3Rpdml0eU5vdGlmaWNhdGlvblwiLCB7YWN0aW9uLCBpZCwgLi4ucGF5bG9hZH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHtBY3Rpdml0eVVwZGF0ZUFyZ3N9IFthcmdzXVxuICAgICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICAgKi9cbiAgICAgIHVwZGF0ZShhcmdzID0ge30pIHtcbiAgICAgICAgY29uc3Qge3Byb2dyZXNzfSA9IGFyZ3NcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFByb2dyZXNzID0gdHlwZW9mIHByb2dyZXNzID09IFwibnVtYmVyXCIgJiYgIU51bWJlci5pc05hTihwcm9ncmVzcylcbiAgICAgICAgICA/IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHByb2dyZXNzKSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICAgIGVtaXRDb250cm9sKFwidXBkYXRlXCIsIHtwcm9ncmVzczogbm9ybWFsaXplZFByb2dyZXNzfSlcbiAgICAgIH0sXG5cbiAgICAgIHN1Y2NlZWQobWVzc2FnZSkge1xuICAgICAgICBlbWl0Q29udHJvbChcInN1Y2NlZWRcIiwge21lc3NhZ2V9KVxuICAgICAgfSxcblxuICAgICAgZmFpbChtZXNzYWdlKSB7XG4gICAgICAgIGVtaXRDb250cm9sKFwiZmFpbFwiLCB7bWVzc2FnZX0pXG4gICAgICB9LFxuXG4gICAgICBkb25lKCkge1xuICAgICAgICBlbWl0Q29udHJvbChcImRvbmVcIilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MudGV4dFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy50eXBlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHNob3coYXJncykge1xuICAgIGxldCB0aXRsZVxuXG4gICAgaWYgKGFyZ3MudHlwZSA9PSBcImFsZXJ0XCIpIHtcbiAgICAgIHRpdGxlID0gY29uZmlndXJhdGlvbi50cmFuc2xhdGUoXCJqcy5zaGFyZWQuYWxlcnRcIiwge2RlZmF1bHRWYWx1ZTogXCJBbGVydFwifSlcbiAgICB9IGVsc2UgaWYgKGFyZ3MudHlwZSA9PSBcImVycm9yXCIpIHtcbiAgICAgIHRpdGxlID0gY29uZmlndXJhdGlvbi50cmFuc2xhdGUoXCJqcy5zaGFyZWQuZXJyb3JcIiwge2RlZmF1bHRWYWx1ZTogXCJFcnJvclwifSlcbiAgICB9IGVsc2UgaWYgKGFyZ3MudHlwZSA9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgdGl0bGUgPSBjb25maWd1cmF0aW9uLnRyYW5zbGF0ZShcImpzLnNoYXJlZC5zdWNjZXNzXCIsIHtkZWZhdWx0VmFsdWU6IFwiU3VjY2Vzc1wifSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGl0bGUgPSBjb25maWd1cmF0aW9uLnRyYW5zbGF0ZShcImpzLnNoYXJlZC5ub3RpZmljYXRpb25cIiwge2RlZmF1bHRWYWx1ZTogXCJOb3RpZmljYXRpb25cIn0pXG4gICAgfVxuXG4gICAgZXZlbnRzLmVtaXQoXCJwdXNoTm90aWZpY2F0aW9uXCIsIHtcbiAgICAgIG1lc3NhZ2U6IGFyZ3MudGV4dCxcbiAgICAgIHRpdGxlLFxuICAgICAgdHlwZTogYXJncy50eXBlXG4gICAgfSlcbiAgfVxufVxuIl19
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhc2gtbm90aWZpY2F0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiZmxhc2gtbm90aWZpY2F0aW9ucy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUU5QixPQUFPLGFBQWEsTUFBTSxvQkFBb0IsQ0FBQTtBQUM5QyxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUE7QUFFaEM7OztHQUdHO0FBRUg7OztHQUdHO0FBRUg7Ozs7OztHQU1HO0FBRUg7Ozs7Ozs7O0dBUUc7QUFFSCxJQUFJLHlCQUF5QixHQUFHLENBQUMsQ0FBQTtBQUVqQyxNQUFNLENBQUMsT0FBTyxPQUFPLGtCQUFrQjtJQUNyQzs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTztRQUMzQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUMsQ0FBQyxDQUFBO0lBQ3JFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTztRQUMzQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUMsQ0FBQyxDQUFBO0lBQ3JFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTztRQUNqQyxJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM5QixrQkFBa0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxP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LElBQUk7WUFDbEIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtZQUMvQixLQUFLO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1NBQ2hCLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2RpZ2d9IGZyb20gXCJkaWdnZXJpemVcIlxuXG5pbXBvcnQgY29uZmlndXJhdGlvbiBmcm9tIFwiLi9jb25maWd1cmF0aW9uLmpzXCJcbmltcG9ydCBldmVudHMgZnJvbSBcIi4vZXZlbnRzLmpzXCJcblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBY3Rpdml0eUFyZ3NcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBtZXNzYWdlIFRyYW5zbGF0ZWQgZGlzcGxheSBzdHJpbmcgc2hvd24gd2hpbGUgdGhlIGFjdGl2aXR5IHJ1bnMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBY3Rpdml0eVVwZGF0ZUFyZ3NcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyPX0gcHJvZ3Jlc3MgRGV0ZXJtaW5hdGUgcHJvZ3Jlc3MgaW4gWzAsIDFdLiBPbWl0IHRvIGtlZXAgdGhlIGJhciBpbmRldGVybWluYXRlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQWN0aXZpdHlIYW5kbGVcbiAqIEBwcm9wZXJ0eSB7KGFyZ3M/OiBBY3Rpdml0eVVwZGF0ZUFyZ3MpID0+IHZvaWR9IHVwZGF0ZSBNb3ZlcyB0aGUgbG9hZGluZyBiYXI7IHdpdGhvdXQgYSBwcm9ncmVzcyB2YWx1ZSBpdCBzdGF5cyBpbmRldGVybWluYXRlLlxuICogQHByb3BlcnR5IHsobWVzc2FnZT86IHN0cmluZykgPT4gdm9pZH0gc3VjY2VlZCBGbGFzaGVzIHRoZSBzdWNjZXNzIHRvbmUsIHRoZW4gZGlzbWlzc2VzIHRoZSBub3RpZmljYXRpb24uXG4gKiBAcHJvcGVydHkgeyhtZXNzYWdlPzogc3RyaW5nKSA9PiB2b2lkfSBmYWlsIEZsYXNoZXMgdGhlIGVycm9yIHRvbmUsIHRoZW4gZGlzbWlzc2VzIHRoZSBub3RpZmljYXRpb24uXG4gKiBAcHJvcGVydHkgeygpID0+IHZvaWR9IGRvbmUgRGlzbWlzc2VzIHRoZSBub3RpZmljYXRpb24gd2l0aG91dCBhIHRvbmUgY2hhbmdlLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gTm90aWZpY2F0aW9uT3B0aW9uc1xuICogQHByb3BlcnR5IHtib29sZWFuPX0gcGVyc2lzdGVudCBXaGVuIHRydWUgdGhlIG5vdGlmaWNhdGlvbiBuZXZlciBhdXRvLWRpc21pc3Nlcy4gSXQgc3RheXMgb25cbiAqICAgc2NyZWVuIHVudGlsIGl0IGlzIGRpc21pc3NlZCwganVzdCBsaWtlIGFuIGFjdGl2aXR5IG5vdGlmaWNhdGlvbiwgYnV0IHdpdGhvdXQgYSBwcm9ncmVzcyBiYXIuXG4gKiBAcHJvcGVydHkge1widG9hc3RcIiB8IFwibW9kYWxcIj19IHByZXNlbnRhdGlvbiBcInRvYXN0XCIgKHRoZSBkZWZhdWx0KSByZW5kZXJzIHRoZSBub3RpZmljYXRpb24gaW4gdGhlXG4gKiAgIHVzdWFsIHN0YWNrZWQgdG9hc3QgY29udGFpbmVyLiBcIm1vZGFsXCIgcmVuZGVycyBpdCBhcyBhIGNlbnRlcmVkIGRpYWxvZyBvdmVyIGEgYmFja2Ryb3AgdGhhdFxuICogICBibG9ja3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYXBwIHVuZGVybmVhdGg7IGl0IGNhbiBvbmx5IGJlIGxlZnQgdmlhIGl0cyBleHBsaWNpdCBkaXNtaXNzXG4gKiAgIGJ1dHRvbi5cbiAqL1xuXG5sZXQgYWN0aXZpdHlOb3RpZmljYXRpb25Db3VudCA9IDBcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmxhc2hOb3RpZmljYXRpb25zIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gICAqIEBwYXJhbSB7Tm90aWZpY2F0aW9uT3B0aW9uc30gW29wdGlvbnNdXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIGFsZXJ0KG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICBGbGFzaE5vdGlmaWNhdGlvbnMuc2hvdyh7dHlwZTogXCJhbGVydFwiLCB0ZXh0OiBtZXNzYWdlLCAuLi5vcHRpb25zfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICAgKiBAcGFyYW0ge05vdGlmaWNhdGlvbk9wdGlvbnN9IFtvcHRpb25zXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyBlcnJvcihtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgRmxhc2hOb3RpZmljYXRpb25zLnNob3coe3R5cGU6IFwiZXJyb3JcIiwgdGV4dDogbWVzc2FnZSwgLi4ub3B0aW9uc30pXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHt1bmtub3dufSBlcnJvclxuICAgKiBAcGFyYW0ge05vdGlmaWNhdGlvbk9wdGlvbnN9IFtvcHRpb25zXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyBlcnJvclJlc3BvbnNlKGVycm9yLCBvcHRpb25zKSB7XG4gICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5lcnJvcih0eXBlb2YgZXJyb3IgPT0gXCJzdHJpbmdcIiA/IGVycm9yIDogU3RyaW5nKGVycm9yKSwgb3B0aW9ucylcblxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIGlmIChlcnJvci5hcGlNYWtlclR5cGUgPT0gXCJWYWxpZGF0aW9uRXJyb3JcIikge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgaWYgKGVycm9yLmhhc1VuaGFuZGxlZEVycm9ycygpKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgY29uc3QgdW5oYW5kbGVkRXJyb3JNZXNzYWdlcyA9IGVycm9yLmdldFVuaGFuZGxlZEVycm9ycygpLm1hcCgoc3ViRXJyb3IpID0+IHN1YkVycm9yLmdldEZ1bGxFcnJvck1lc3NhZ2VzKCkpLmZsYXQoKVxuXG4gICAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5lcnJvcih1bmhhbmRsZWRFcnJvck1lc3NhZ2VzLmpvaW4oXCIuIFwiKSwgb3B0aW9ucylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IFwiQ291bGRuJ3Qgc3VibWl0IGJlY2F1c2Ugb2YgdmFsaWRhdGlvbiBlcnJvcnMuXCJcblxuICAgICAgICBGbGFzaE5vdGlmaWNhdGlvbnMuYWxlcnQoY29uZmlndXJhdGlvbi50cmFuc2xhdGUoXCJqcy5ub3RpZmljYXRpb24uY291bGRudF9zdWJtaXRfYmVjYXVzZV9vZl92YWxpZGF0aW9uX2Vycm9yc1wiLCB7ZGVmYXVsdFZhbHVlfSksIG9wdGlvbnMpXG4gICAgICB9XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIH0gZWxzZSBpZiAoZXJyb3IuYXBpTWFrZXJUeXBlID09IFwiQmFzZUVycm9yXCIpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gZXJyb3IuYXJncyAmJiBlcnJvci5hcmdzLnJlc3BvbnNlXG4gICAgICBjb25zdCBlcnJvcnMgPSAvKiogQHR5cGUge0FycmF5PHN0cmluZyB8IHttZXNzYWdlOiBzdHJpbmd9W10+IHwgdW5kZWZpbmVkfSAqLyAocmVzcG9uc2UgJiYgcmVzcG9uc2UuZXJyb3JzKVxuXG4gICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZXMgPSBlcnJvcnMubWFwKChlcnJvcikgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgZXJyb3IgPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGRpZ2coZXJyb3IsIFwibWVzc2FnZVwiKVxuICAgICAgICB9KVxuXG4gICAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5lcnJvcihlcnJvck1lc3NhZ2VzLmpvaW4oXCIuIFwiKSwgb3B0aW9ucylcbiAgICAgIH0gZWxzZSBpZiAoZXJyb3IubWVzc2FnZSkge1xuICAgICAgICBGbGFzaE5vdGlmaWNhdGlvbnMuZXJyb3IoZXJyb3IubWVzc2FnZSwgb3B0aW9ucylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5lcnJvcihjb25maWd1cmF0aW9uLnRyYW5zbGF0ZShcImpzLnNoYXJlZC5zb21ldGhpbmdfd2VudF93cm9uZ1wiLCB7ZGVmYXVsdFZhbHVlOiBcIlNvbWV0aGluZyB3ZW50IHdyb25nLlwifSksIG9wdGlvbnMpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbnN0cnVjdG9yTmFtZSA9IGRpZ2coZXJyb3IsIFwiY29uc3RydWN0b3JcIiwgXCJuYW1lXCIpXG4gICAgICBjb25zdCBkZWZhdWx0RXJyb3JNZXNzYWdlID0gY29uZmlndXJhdGlvbi50cmFuc2xhdGUoXCJqcy5zaGFyZWQuc29tZXRoaW5nX3dlbnRfd3JvbmdcIiwge2RlZmF1bHRWYWx1ZTogXCJTb21ldGhpbmcgd2VudCB3cm9uZy5cIn0pXG4gICAgICBjb25zdCBtZXNzYWdlID0gZGlnZyhlcnJvciwgXCJtZXNzYWdlXCIpXG5cbiAgICAgIGNvbnNvbGUuZXJyb3IoYERpZG50IGtub3cgd2hhdCB0byBkbyB3aXRoIHRoYXQgJHtjb25zdHJ1Y3Rvck5hbWV9OiAke21lc3NhZ2V9YClcbiAgICAgIEZsYXNoTm90aWZpY2F0aW9ucy5lcnJvcihkZWZhdWx0RXJyb3JNZXNzYWdlLCBvcHRpb25zKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICAgKiBAcGFyYW0ge05vdGlmaWNhdGlvbk9wdGlvbnN9IFtvcHRpb25zXVxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyBzdWNjZXNzKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICBGbGFzaE5vdGlmaWNhdGlvbnMuc2hvdyh7dHlwZTogXCJzdWNjZXNzXCIsIHRleHQ6IG1lc3NhZ2UsIC4uLm9wdGlvbnN9KVxuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIGEgbG9uZy1ydW5uaW5nIGFjdGl2aXR5IG5vdGlmaWNhdGlvbiB3aXRoIGEgbG9hZGluZyBiYXIuIFVubGlrZSB0aGVcbiAgICogb3RoZXIgbm90aWZpY2F0aW9uIHR5cGVzIGl0IG5ldmVyIGF1dG8tZGlzbWlzc2VzOiB0aGUgcmV0dXJuZWQgaGFuZGxlXG4gICAqIGRlY2lkZXMgd2hlbiB0aGUgbm90aWZpY2F0aW9uIGxlYXZlcyB0aGUgc2NyZWVuLlxuICAgKlxuICAgKiBAcGFyYW0ge0FjdGl2aXR5QXJnc30gYXJnc1xuICAgKiBAcmV0dXJucyB7QWN0aXZpdHlIYW5kbGV9XG4gICAqL1xuICBzdGF0aWMgYWN0aXZpdHkoe21lc3NhZ2V9KSB7XG4gICAgYWN0aXZpdHlOb3RpZmljYXRpb25Db3VudCArPSAxXG4gICAgY29uc3QgaWQgPSBgYWN0aXZpdHktJHthY3Rpdml0eU5vdGlmaWNhdGlvbkNvdW50fWBcblxuICAgIGV2ZW50cy5lbWl0KFwicHVzaE5vdGlmaWNhdGlvblwiLCB7XG4gICAgICBpZCxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICB0aXRsZTogY29uZmlndXJhdGlvbi50cmFuc2xhdGUoXCJqcy5zaGFyZWQuYWN0aXZpdHlcIiwge2RlZmF1bHRWYWx1ZTogXCJBY3Rpdml0eVwifSksXG4gICAgICB0eXBlOiBcImFjdGl2aXR5XCJcbiAgICB9KVxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtcInVwZGF0ZVwiIHwgXCJzdWNjZWVkXCIgfCBcImZhaWxcIiB8IFwiZG9uZVwifSBhY3Rpb25cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW3BheWxvYWRdXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgY29uc3QgZW1pdENvbnRyb2wgPSAoYWN0aW9uLCBwYXlsb2FkID0ge30pID0+IHtcbiAgICAgIGV2ZW50cy5lbWl0KFwiYWN0aXZpdHlOb3RpZmljYXRpb25cIiwge2FjdGlvbiwgaWQsIC4uLnBheWxvYWR9KVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSB7QWN0aXZpdHlVcGRhdGVBcmdzfSBbYXJnc11cbiAgICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAgICovXG4gICAgICB1cGRhdGUoYXJncyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHtwcm9ncmVzc30gPSBhcmdzXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQcm9ncmVzcyA9IHR5cGVvZiBwcm9ncmVzcyA9PSBcIm51bWJlclwiICYmICFOdW1iZXIuaXNOYU4ocHJvZ3Jlc3MpXG4gICAgICAgICAgPyBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBwcm9ncmVzcykpXG4gICAgICAgICAgOiB1bmRlZmluZWRcblxuICAgICAgICBlbWl0Q29udHJvbChcInVwZGF0ZVwiLCB7cHJvZ3Jlc3M6IG5vcm1hbGl6ZWRQcm9ncmVzc30pXG4gICAgICB9LFxuXG4gICAgICBzdWNjZWVkKG1lc3NhZ2UpIHtcbiAgICAgICAgZW1pdENvbnRyb2woXCJzdWNjZWVkXCIsIHttZXNzYWdlfSlcbiAgICAgIH0sXG5cbiAgICAgIGZhaWwobWVzc2FnZSkge1xuICAgICAgICBlbWl0Q29udHJvbChcImZhaWxcIiwge21lc3NhZ2V9KVxuICAgICAgfSxcblxuICAgICAgZG9uZSgpIHtcbiAgICAgICAgZW1pdENvbnRyb2woXCJkb25lXCIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLnRleHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MudHlwZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBhcmdzLnBlcnNpc3RlbnRcbiAgICogQHBhcmFtIHtcInRvYXN0XCIgfCBcIm1vZGFsXCI9fSBhcmdzLnByZXNlbnRhdGlvblxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHN0YXRpYyBzaG93KGFyZ3MpIHtcbiAgICBsZXQgdGl0bGVcblxuICAgIGlmIChhcmdzLnR5cGUgPT0gXCJhbGVydFwiKSB7XG4gICAgICB0aXRsZSA9IGNvbmZpZ3VyYXRpb24udHJhbnNsYXRlKFwianMuc2hhcmVkLmFsZXJ0XCIsIHtkZWZhdWx0VmFsdWU6IFwiQWxlcnRcIn0pXG4gICAgfSBlbHNlIGlmIChhcmdzLnR5cGUgPT0gXCJlcnJvclwiKSB7XG4gICAgICB0aXRsZSA9IGNvbmZpZ3VyYXRpb24udHJhbnNsYXRlKFwianMuc2hhcmVkLmVycm9yXCIsIHtkZWZhdWx0VmFsdWU6IFwiRXJyb3JcIn0pXG4gICAgfSBlbHNlIGlmIChhcmdzLnR5cGUgPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgIHRpdGxlID0gY29uZmlndXJhdGlvbi50cmFuc2xhdGUoXCJqcy5zaGFyZWQuc3VjY2Vzc1wiLCB7ZGVmYXVsdFZhbHVlOiBcIlN1Y2Nlc3NcIn0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRpdGxlID0gY29uZmlndXJhdGlvbi50cmFuc2xhdGUoXCJqcy5zaGFyZWQubm90aWZpY2F0aW9uXCIsIHtkZWZhdWx0VmFsdWU6IFwiTm90aWZpY2F0aW9uXCJ9KVxuICAgIH1cblxuICAgIGV2ZW50cy5lbWl0KFwicHVzaE5vdGlmaWNhdGlvblwiLCB7XG4gICAgICBtZXNzYWdlOiBhcmdzLnRleHQsXG4gICAgICBwZXJzaXN0ZW50OiBhcmdzLnBlcnNpc3RlbnQsXG4gICAgICBwcmVzZW50YXRpb246IGFyZ3MucHJlc2VudGF0aW9uLFxuICAgICAgdGl0bGUsXG4gICAgICB0eXBlOiBhcmdzLnR5cGVcbiAgICB9KVxuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flash-notifications",
3
- "version": "0.0.48",
3
+ "version": "0.0.49",
4
4
  "description": "My new module",
5
5
  "main": "build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -67,5 +67,10 @@
67
67
  "react-native": "*",
68
68
  "set-state-compare": "^1.0.84"
69
69
  },
70
+ "peerDependenciesMeta": {
71
+ "expo": {
72
+ "optional": true
73
+ }
74
+ },
70
75
  "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
71
76
  }