@nlabs/metropolisjs 1.0.7 → 1.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.0.7
4
+
5
+ - Flush pending RUM analytics with the Beacon API when a page is hidden or unloaded.
6
+ - Fall back to the normal unauthenticated RUM request when beacon delivery is unavailable or declined.
7
+ - Expose `flush({useBeacon: true})` and `rumBeaconRequest(...)` for explicit terminal delivery.
8
+ - Document RUM endpoint configuration, beacon lifecycle behavior, fallback semantics, and `useAwsRum()` usage.
9
+
3
10
  ## 1.0.3
4
11
 
5
12
  - Send the public RUM `analyticsId` to Reaktor in the JSON mutation payload.
package/README.md CHANGED
@@ -155,7 +155,7 @@ The `Metropolis` component accepts three main props: `config`, `adapters`, and `
155
155
 
156
156
  ### RUM analytics
157
157
 
158
- Configure the public analytics identifier returned by Reaktor under `app.rum.analyticsId`. MetropolisJS sends it in the JSON `RumBatchInput.analyticsId` field; it is not placed in a URL or request header.
158
+ Configure the public analytics identifier returned by Reaktor under `app.rum.analyticsId` and the collection endpoint under `app.api.endpoints.rum`. MetropolisJS sends the identifier in the JSON batch body; it is not placed in the URL or an authorization header.
159
159
 
160
160
  ```tsx
161
161
  <Metropolis
@@ -163,9 +163,18 @@ Configure the public analytics identifier returned by Reaktor under `app.rum.ana
163
163
  production: {
164
164
  app: {
165
165
  name: 'My App',
166
+ api: {
167
+ endpoints: {
168
+ rum: 'https://events.example.com/track'
169
+ }
170
+ },
166
171
  rum: {
167
172
  analyticsId: '00000000-0000-4000-8000-000000000000',
168
- enabled: true
173
+ debounceMs: 250,
174
+ dedupeMs: 1000,
175
+ enabled: true,
176
+ respectPrivacySignals: true,
177
+ throttleMs: 1000
169
178
  }
170
179
  }
171
180
  }
@@ -174,7 +183,47 @@ Configure the public analytics identifier returned by Reaktor under `app.rum.ana
174
183
  </Metropolis>
175
184
  ```
176
185
 
177
- `app.rum.analyticsId` is the identifier sent with each analytics batch.
186
+ The endpoint is resolved from `app.api.endpoints.rum`, falling back to `app.api.rum`. RUM delivery is unauthenticated and each batch contains `analyticsId` and up to 50 sanitized events.
187
+
188
+ #### Beacon delivery
189
+
190
+ When the page is hidden or receives `pagehide`, the `Metropolis` provider automatically flushes pending RUM events with `navigator.sendBeacon()`. This gives terminal analytics a chance to finish without delaying navigation or page shutdown.
191
+
192
+ Beacon delivery is best-effort:
193
+
194
+ - If `navigator.sendBeacon` is unavailable, throws, or declines the payload, MetropolisJS immediately falls back to its normal asynchronous RUM request.
195
+ - A batch accepted by `sendBeacon` is not sent again through the normal request path.
196
+ - Scheduled and explicit `flush()` calls continue to use the normal request path unless `useBeacon` is requested.
197
+ - Privacy signals and the `enabled` option are respected for both delivery paths.
198
+
199
+ Use the specialized hook when an application needs to track or flush events directly:
200
+
201
+ ```tsx
202
+ import {useAwsRum} from '@nlabs/metropolisjs';
203
+
204
+ const SaveButton = () => {
205
+ const rum = useAwsRum();
206
+
207
+ const onSave = () => {
208
+ rum.track({
209
+ name: 'settings_saved',
210
+ path: '/settings',
211
+ properties: {section: 'profile'},
212
+ type: 'click'
213
+ });
214
+ };
215
+
216
+ return <button onClick={onSave}>Save</button>;
217
+ };
218
+ ```
219
+
220
+ For an application-controlled terminal flush, request beacon delivery explicitly:
221
+
222
+ ```ts
223
+ await rum.flush({useBeacon: true});
224
+ ```
225
+
226
+ Calling `flush({useBeacon: true})` is safe in non-browser environments and older browsers because it falls back to the normal RUM request when the Beacon API cannot be used.
178
227
 
179
228
  ### Configuration Object
180
229
 
@@ -505,6 +554,7 @@ MetropolisJS provides comprehensive actions for all your needs. Access them usin
505
554
 
506
555
  ### Specialized Hooks (Recommended)
507
556
 
557
+ - `useAwsRum()` - Analytics tracking, batching, and terminal beacon delivery
508
558
  - `useUserActions()` - Authentication, personas, user management
509
559
  - `useMessageActions()` - Real-time messaging and conversations
510
560
  - `usePermissionActions()` - Permission and role management (RBAC)
@@ -1256,6 +1306,7 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
1256
1306
 
1257
1307
  ## Additional Documentation
1258
1308
 
1309
+ - **[Actions Reference](./docs/ACTIONS.md)** - Action families, hooks, factories, and RUM beacon delivery
1259
1310
  - **[Factory Pattern Guide](./factoryPatternGuide.md)** - Detailed guide on using the factory pattern
1260
1311
  - **[Architecture Analysis](./ARCHITECTURE_ANALYSIS.md)** - Deep dive into the architecture
1261
1312
  - **[Changelog](./CHANGELOG.md)** - Complete list of changes and improvements
package/docs/ACTIONS.md CHANGED
@@ -7,8 +7,9 @@ This reference documents every action family exposed by MetropolisJS, how to acc
7
7
  Use specialized hooks in React components:
8
8
 
9
9
  ```tsx
10
- import {useUserActions, usePostActions, useMessageActions, useRestActions} from '@nlabs/metropolisjs';
10
+ import {useAwsRum, useUserActions, usePostActions, useMessageActions, useRestActions} from '@nlabs/metropolisjs';
11
11
 
12
+ const rum = useAwsRum();
12
13
  const userActions = useUserActions();
13
14
  const postActions = usePostActions();
14
15
  const messageActions = useMessageActions();
@@ -37,7 +38,8 @@ Each row links to:
37
38
  These action families are available through specialized hooks when present, `useMetropolis([...])`, `createAction(...)`, `createActions(...)`, and direct creators.
38
39
 
39
40
  | Family | Hook | Factory Key | Creator | Typical Methods | Source |
40
- | --- | --- | --- | --- | --- |
41
+ | --- | --- | --- | --- | --- | --- |
42
+ | AWS RUM | `useAwsRum` | `awsRum` | `createAwsRumActions` | `track`, `flush`, `destroy` | [awsRumActions.ts](../src/actions/awsRumActions/awsRumActions.ts) |
41
43
  | Content | `useContentActions` | `content` | `createContentActions` | `add`, `itemById`, `itemByKey`, `listByCategory`, `list`, `update`, `delete` | [contentActions.ts](../src/actions/contentActions/contentActions.ts) |
42
44
  | CRM | `useCrmActions` | `crm` | `createCrmActions` | `mailingLists`, `createMailingList`, `createSupportTicket`, `supportTickets`, `customerOrdersByUser` | [crmActions.ts](../src/actions/crmActions/crmActions.ts) |
43
45
  | Event | `useEventActions` | `event` | `createEventActions` | `addEvent`, `getEvent`, `getEventsByTags`, `getEventsByReactions`, `updateEvent`, `deleteEvent` | [eventActions.ts](../src/actions/eventActions/eventActions.ts) |
@@ -68,6 +70,57 @@ These creators are exported directly from MetropolisJS, but are not currently pa
68
70
  | Connection | `createConnectionActions` | `addConnection`, `getConnections`, `removeConnection` | [connectionActions.ts](../src/actions/connectionActions/connectionActions.ts) |
69
71
  | Conversation | `createConversationActions` | `add`, `itemById`, `list`, `update`, `delete` | [conversationActions.ts](../src/actions/conversationActions/conversationActions.ts) |
70
72
 
73
+ ## AWS RUM Actions
74
+
75
+ Use `useAwsRum()` to queue sanitized analytics events and flush them to the configured RUM endpoint:
76
+
77
+ ```tsx
78
+ import {useAwsRum} from '@nlabs/metropolisjs';
79
+
80
+ const AnalyticsExample = () => {
81
+ const rum = useAwsRum();
82
+
83
+ const trackCheckout = () => {
84
+ rum.track({
85
+ name: 'checkout_started',
86
+ path: '/checkout',
87
+ properties: {source: 'cart'},
88
+ type: 'click'
89
+ });
90
+ };
91
+
92
+ return <button onClick={trackCheckout}>Checkout</button>;
93
+ };
94
+ ```
95
+
96
+ Configure the action through the `Metropolis` provider:
97
+
98
+ ```tsx
99
+ <Metropolis
100
+ config={{
101
+ production: {
102
+ app: {
103
+ api: {
104
+ endpoints: {
105
+ rum: 'https://events.example.com/track'
106
+ }
107
+ },
108
+ rum: {
109
+ analyticsId: 'my-public-analytics-id',
110
+ enabled: true
111
+ }
112
+ }
113
+ }
114
+ }}
115
+ >
116
+ <App />
117
+ </Metropolis>
118
+ ```
119
+
120
+ `flush()` uses the normal asynchronous request path. `flush({useBeacon: true})` first asks the browser to queue the JSON batch with `navigator.sendBeacon()`, then falls back to the normal request if the Beacon API is unavailable or declines the payload.
121
+
122
+ The `Metropolis` provider requests beacon delivery automatically on `pagehide` and when `document.visibilityState` changes to `hidden`. A batch accepted by the Beacon API is not submitted a second time. All RUM delivery remains subject to `enabled`, `respectPrivacySignals`, batching, throttling, deduplication, and event sanitization.
123
+
71
124
  ## REST Actions
72
125
 
73
126
  Use REST actions for external APIs that are not represented in Reaktor. REST actions delegate to `@nlabs/rip-hunter`, share Metropolis network/session handling, and can target either a configured endpoint key or an absolute URL.
@@ -28,7 +28,14 @@ export interface AwsRumActionsOptions {
28
28
  }
29
29
  export interface AwsRumActions {
30
30
  readonly destroy: () => Promise<void>;
31
- readonly flush: () => Promise<void>;
31
+ readonly flush: (options?: AwsRumFlushOptions) => Promise<void>;
32
32
  readonly track: (event: AwsRumTrackInput) => void;
33
33
  }
34
+ export interface AwsRumFlushOptions {
35
+ /**
36
+ * Prefer navigator.sendBeacon for terminal delivery. Falls back to the
37
+ * standard RUM request when the Beacon API cannot accept the batch.
38
+ */
39
+ readonly useBeacon?: boolean;
40
+ }
34
41
  export declare const createAwsRumActions: (flux: FluxFramework, options?: AwsRumActionsOptions) => AwsRumActions;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Copyright (c) 2026-Present, Nitrogen Labs, Inc.
3
3
  * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
- */ import { rumRequest } from '../../utils/api.js';
4
+ */ import { rumBeaconRequest, rumRequest } from '../../utils/api.js';
5
5
  export const AWS_RUM_CONSTANTS = {
6
6
  TRACK_ERROR: 'AWS_RUM_TRACK_ERROR',
7
7
  TRACK_QUEUED: 'AWS_RUM_TRACK_QUEUED',
@@ -125,7 +125,7 @@ export const createAwsRumActions = (flux, options = {})=>{
125
125
  seenEvents.delete(oldestFingerprint);
126
126
  }
127
127
  };
128
- const flush = async ()=>{
128
+ const flush = async ({ useBeacon = false } = {})=>{
129
129
  if (flushPromise) {
130
130
  return flushPromise;
131
131
  }
@@ -145,10 +145,14 @@ export const createAwsRumActions = (flux, options = {})=>{
145
145
  for(let index = 0; index < events.length; index += MAX_BATCH_SIZE){
146
146
  const batchEvents = events.slice(index, index + MAX_BATCH_SIZE);
147
147
  try {
148
- await rumRequest(flux, {
148
+ const batch = {
149
149
  analyticsId,
150
150
  events: batchEvents
151
- });
151
+ };
152
+ const sentByBeacon = useBeacon && rumBeaconRequest(flux, batch);
153
+ if (!sentByBeacon) {
154
+ await rumRequest(flux, batch);
155
+ }
152
156
  await flux.dispatch({
153
157
  analyticsId,
154
158
  events: batchEvents,
@@ -224,4 +228,4 @@ export const createAwsRumActions = (flux, options = {})=>{
224
228
  };
225
229
  };
226
230
 
227
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWN0aW9ucy9hd3NSdW1BY3Rpb25zL2F3c1J1bUFjdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjYtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7cnVtUmVxdWVzdH0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpLmpzJztcblxuaW1wb3J0IHR5cGUge0ZsdXhGcmFtZXdvcmt9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5cbmV4cG9ydCBjb25zdCBBV1NfUlVNX0NPTlNUQU5UUyA9IHtcbiAgVFJBQ0tfRVJST1I6ICdBV1NfUlVNX1RSQUNLX0VSUk9SJyxcbiAgVFJBQ0tfUVVFVUVEOiAnQVdTX1JVTV9UUkFDS19RVUVVRUQnLFxuICBUUkFDS19TVUNDRVNTOiAnQVdTX1JVTV9UUkFDS19TVUNDRVNTJ1xufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgQXdzUnVtRXZlbnRUeXBlID0gJ2NsaWNrJyB8ICdwYWdlX3ZpZXcnIHwgKHN0cmluZyAmIHt9KTtcbmV4cG9ydCB0eXBlIEF3c1J1bVByb3BlcnR5ID0gYm9vbGVhbiB8IG51bWJlciB8IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBBd3NSdW1UcmFja0lucHV0IHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBwYXRoPzogc3RyaW5nO1xuICByZWFkb25seSBwcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgQXdzUnVtUHJvcGVydHk+O1xuICByZWFkb25seSB0eXBlOiBBd3NSdW1FdmVudFR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXdzUnVtRXZlbnQgZXh0ZW5kcyBBd3NSdW1UcmFja0lucHV0IHtcbiAgcmVhZG9ubHkgZXZlbnRJZDogc3RyaW5nO1xuICByZWFkb25seSBqb3VybmV5SWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc2VxdWVuY2U6IG51bWJlcjtcbiAgcmVhZG9ubHkgdGltZXN0YW1wOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXdzUnVtQWN0aW9uc09wdGlvbnMge1xuICByZWFkb25seSBhbmFseXRpY3NJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgZGVib3VuY2VNcz86IG51bWJlcjtcbiAgcmVhZG9ubHkgZGVkdXBlTXM/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuICByZWFkb25seSByZXNwZWN0UHJpdmFjeVNpZ25hbHM/OiBib29sZWFuO1xuICByZWFkb25seSB0aHJvdHRsZU1zPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF3c1J1bUFjdGlvbnMge1xuICByZWFkb25seSBkZXN0cm95OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZWFkb25seSBmbHVzaDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcmVhZG9ubHkgdHJhY2s6IChldmVudDogQXdzUnVtVHJhY2tJbnB1dCkgPT4gdm9pZDtcbn1cblxuY29uc3QgREVGQVVMVF9ERUJPVU5DRV9NUyA9IDI1MDtcbmNvbnN0IERFRkFVTFRfREVEVVBFX01TID0gMTAwMDtcbmNvbnN0IERFRkFVTFRfVEhST1RUTEVfTVMgPSAxMDAwO1xuY29uc3QgTUFYX0JBVENIX1NJWkUgPSA1MDtcbmNvbnN0IE1BWF9QUk9QRVJUSUVTID0gMjA7XG5jb25zdCBNQVhfU0VFTl9FVkVOVFMgPSA1MDA7XG5jb25zdCBCTE9DS0VEX1BST1BFUlRZX0tFWVMgPSBuZXcgU2V0KFtcbiAgJ2FjY291bnRpZCcsXG4gICdhZGRyZXNzJyxcbiAgJ2VtYWlsJyxcbiAgJ2ZpcnN0bmFtZScsXG4gICdmdWxsbmFtZScsXG4gICdnZW9sb2NhdGlvbicsXG4gICdpcCcsXG4gICdpcGFkZHJlc3MnLFxuICAnbGFzdG5hbWUnLFxuICAnbGF0aXR1ZGUnLFxuICAnbG9uZ2l0dWRlJyxcbiAgJ25hbWUnLFxuICAncGhvbmUnLFxuICAncmVmZXJyZXInLFxuICAndG9rZW4nLFxuICAndXNlcmFnZW50JyxcbiAgJ3VzZXJpZCdcbl0pO1xuY29uc3QgRU1BSUxfUEFUVEVSTiA9IC9cXGJbXlxcc0BdK0BbXlxcc0BdK1xcLlteXFxzQF0rXFxiL2k7XG5cbmludGVyZmFjZSBQcml2YWN5TmF2aWdhdG9yIGV4dGVuZHMgTmF2aWdhdG9yIHtcbiAgcmVhZG9ubHkgZ2xvYmFsUHJpdmFjeUNvbnRyb2w/OiBib29sZWFuO1xufVxuXG5jb25zdCBjcmVhdGVJZCA9ICgpOiBzdHJpbmcgPT4ge1xuICBpZih0eXBlb2YgZ2xvYmFsVGhpcy5jcnlwdG8/LnJhbmRvbVVVSUQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZ2xvYmFsVGhpcy5jcnlwdG8ucmFuZG9tVVVJRCgpO1xuICB9XG5cbiAgcmV0dXJuIGAke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpfWA7XG59O1xuXG5jb25zdCBub3JtYWxpemVUZXh0ID0gKHZhbHVlOiB1bmtub3duLCBtYXhMZW5ndGg6IG51bWJlcik6IHN0cmluZyA9PlxuICBTdHJpbmcodmFsdWUgfHwgJycpLnRyaW0oKS5zbGljZSgwLCBtYXhMZW5ndGgpO1xuXG5jb25zdCBub3JtYWxpemVQcm9wZXJ0eUtleSA9ICh2YWx1ZTogc3RyaW5nKTogc3RyaW5nID0+XG4gIHZhbHVlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTldL2csICcnKTtcblxuY29uc3Qgc2FuaXRpemVQcm9wZXJ0aWVzID0gKFxuICBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBBd3NSdW1Qcm9wZXJ0eT4gPSB7fVxuKTogUmVjb3JkPHN0cmluZywgQXdzUnVtUHJvcGVydHk+ID0+IE9iamVjdC5lbnRyaWVzKHByb3BlcnRpZXMpXG4gIC5zbGljZSgwLCBNQVhfUFJPUEVSVElFUylcbiAgLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBBd3NSdW1Qcm9wZXJ0eT4+KChyZXN1bHQsIFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGNvbnN0IHByb3BlcnR5S2V5ID0gbm9ybWFsaXplVGV4dChrZXksIDY0KTtcbiAgICBjb25zdCBub3JtYWxpemVkUHJvcGVydHlLZXkgPSBub3JtYWxpemVQcm9wZXJ0eUtleShwcm9wZXJ0eUtleSk7XG5cbiAgICBpZihcbiAgICAgICFwcm9wZXJ0eUtleSB8fFxuICAgICAgQkxPQ0tFRF9QUk9QRVJUWV9LRVlTLmhhcyhub3JtYWxpemVkUHJvcGVydHlLZXkpIHx8XG4gICAgICAhWydib29sZWFuJywgJ251bWJlcicsICdzdHJpbmcnXS5pbmNsdWRlcyh0eXBlb2YgdmFsdWUpXG4gICAgKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGlmKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHRleHRWYWx1ZSA9IG5vcm1hbGl6ZVRleHQodmFsdWUsIDI1Nik7XG5cbiAgICAgIGlmKHRleHRWYWx1ZSAmJiAhRU1BSUxfUEFUVEVSTi50ZXN0KHRleHRWYWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0W3Byb3BlcnR5S2V5XSA9IHRleHRWYWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgTnVtYmVyLmlzRmluaXRlKHZhbHVlKSkge1xuICAgICAgcmVzdWx0W3Byb3BlcnR5S2V5XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIHt9KTtcblxuY29uc3Qgc2FuaXRpemVFdmVudCA9IChldmVudDogQXdzUnVtVHJhY2tJbnB1dCk6IEF3c1J1bVRyYWNrSW5wdXQgfCBudWxsID0+IHtcbiAgY29uc3QgbmFtZSA9IG5vcm1hbGl6ZVRleHQoZXZlbnQubmFtZSwgMTI4KTtcbiAgY29uc3QgdHlwZSA9IG5vcm1hbGl6ZVRleHQoZXZlbnQudHlwZSwgNjQpO1xuXG4gIGlmKCFuYW1lIHx8ICF0eXBlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBwYXRoID0gbm9ybWFsaXplVGV4dChldmVudC5wYXRoLCAyNTYpLnNwbGl0KCc/JylbMF0uc3BsaXQoJyMnKVswXTtcblxuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gICAgLi4uKHBhdGggPyB7cGF0aH0gOiB7fSksXG4gICAgcHJvcGVydGllczogc2FuaXRpemVQcm9wZXJ0aWVzKGV2ZW50LnByb3BlcnRpZXMpLFxuICAgIHR5cGVcbiAgfTtcbn07XG5cbmNvbnN0IGV2ZW50RmluZ2VycHJpbnQgPSAoZXZlbnQ6IEF3c1J1bVRyYWNrSW5wdXQpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmVudHJpZXMoZXZlbnQucHJvcGVydGllcyB8fCB7fSkuc29ydCgoW2xlZnRdLCBbcmlnaHRdKSA9PiBsZWZ0LmxvY2FsZUNvbXBhcmUocmlnaHQpKTtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KFtldmVudC50eXBlLCBldmVudC5uYW1lLCBldmVudC5wYXRoIHx8ICcnLCBwcm9wZXJ0aWVzXSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQXdzUnVtQWN0aW9ucyA9IChcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgb3B0aW9uczogQXdzUnVtQWN0aW9uc09wdGlvbnMgPSB7fVxuKTogQXdzUnVtQWN0aW9ucyA9PiB7XG4gIGNvbnN0IGFuYWx5dGljc0lkID0gbm9ybWFsaXplVGV4dChvcHRpb25zLmFuYWx5dGljc0lkLCAxMjgpO1xuICBjb25zdCBkZWJvdW5jZU1zID0gTWF0aC5tYXgoMCwgb3B0aW9ucy5kZWJvdW5jZU1zID8/IERFRkFVTFRfREVCT1VOQ0VfTVMpO1xuICBjb25zdCBkZWR1cGVNcyA9IE1hdGgubWF4KDAsIG9wdGlvbnMuZGVkdXBlTXMgPz8gREVGQVVMVF9ERURVUEVfTVMpO1xuICBjb25zdCBlbmFibGVkID0gb3B0aW9ucy5lbmFibGVkICE9PSBmYWxzZTtcbiAgY29uc3QgcmVzcGVjdFByaXZhY3lTaWduYWxzID0gb3B0aW9ucy5yZXNwZWN0UHJpdmFjeVNpZ25hbHMgIT09IGZhbHNlO1xuICBjb25zdCB0aHJvdHRsZU1zID0gTWF0aC5tYXgoMCwgb3B0aW9ucy50aHJvdHRsZU1zID8/IERFRkFVTFRfVEhST1RUTEVfTVMpO1xuICBjb25zdCBqb3VybmV5SWQgPSBjcmVhdGVJZCgpO1xuICBjb25zdCBwZW5kaW5nRXZlbnRzID0gbmV3IE1hcDxzdHJpbmcsIEF3c1J1bUV2ZW50PigpO1xuICBjb25zdCBzZWVuRXZlbnRzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgbGV0IGZsdXNoUHJvbWlzZTogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZDtcbiAgbGV0IGxhc3RGbHVzaEF0ID0gMDtcbiAgbGV0IHNlcXVlbmNlID0gMDtcbiAgbGV0IHRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcblxuICBjb25zdCBoYXNQcml2YWN5U2lnbmFsID0gKCk6IGJvb2xlYW4gPT4ge1xuICAgIGlmKCFyZXNwZWN0UHJpdmFjeVNpZ25hbHMgfHwgdHlwZW9mIGdsb2JhbFRoaXMubmF2aWdhdG9yID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IG5hdmlnYXRvclN0YXRlID0gZ2xvYmFsVGhpcy5uYXZpZ2F0b3IgYXMgUHJpdmFjeU5hdmlnYXRvcjtcblxuICAgIHJldHVybiBuYXZpZ2F0b3JTdGF0ZS5kb05vdFRyYWNrID09PSAnMScgfHwgbmF2aWdhdG9yU3RhdGUuZ2xvYmFsUHJpdmFjeUNvbnRyb2wgPT09IHRydWU7XG4gIH07XG5cbiAgY29uc3QgcHJ1bmVTZWVuRXZlbnRzID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmKHNlZW5FdmVudHMuc2l6ZSA8PSBNQVhfU0VFTl9FVkVOVFMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXRvZmYgPSBEYXRlLm5vdygpIC0gZGVkdXBlTXM7XG4gICAgc2VlbkV2ZW50cy5mb3JFYWNoKCh0aW1lc3RhbXAsIGZpbmdlcnByaW50KSA9PiB7XG4gICAgICBpZih0aW1lc3RhbXAgPCBjdXRvZmYpIHtcbiAgICAgICAgc2VlbkV2ZW50cy5kZWxldGUoZmluZ2VycHJpbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgd2hpbGUoc2VlbkV2ZW50cy5zaXplID4gTUFYX1NFRU5fRVZFTlRTKSB7XG4gICAgICBjb25zdCBvbGRlc3RGaW5nZXJwcmludCA9IHNlZW5FdmVudHMua2V5cygpLm5leHQoKS52YWx1ZTtcblxuICAgICAgaWYoIW9sZGVzdEZpbmdlcnByaW50KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBzZWVuRXZlbnRzLmRlbGV0ZShvbGRlc3RGaW5nZXJwcmludCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGZsdXNoID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmKGZsdXNoUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIGZsdXNoUHJvbWlzZTtcbiAgICB9XG5cbiAgICBpZighZW5hYmxlZCB8fCAhYW5hbHl0aWNzSWQgfHwgaGFzUHJpdmFjeVNpZ25hbCgpIHx8IHBlbmRpbmdFdmVudHMuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmKHRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgZXZlbnRzID0gWy4uLnBlbmRpbmdFdmVudHMudmFsdWVzKCldO1xuICAgIHBlbmRpbmdFdmVudHMuY2xlYXIoKTtcbiAgICBsYXN0Rmx1c2hBdCA9IERhdGUubm93KCk7XG5cbiAgICBmbHVzaFByb21pc2UgPSAoYXN5bmMgKCkgPT4ge1xuICAgICAgZm9yKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZXZlbnRzLmxlbmd0aDsgaW5kZXggKz0gTUFYX0JBVENIX1NJWkUpIHtcbiAgICAgICAgY29uc3QgYmF0Y2hFdmVudHMgPSBldmVudHMuc2xpY2UoaW5kZXgsIGluZGV4ICsgTUFYX0JBVENIX1NJWkUpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgcnVtUmVxdWVzdChmbHV4LCB7YW5hbHl0aWNzSWQsIGV2ZW50czogYmF0Y2hFdmVudHN9KTtcbiAgICAgICAgICBhd2FpdCBmbHV4LmRpc3BhdGNoKHthbmFseXRpY3NJZCwgZXZlbnRzOiBiYXRjaEV2ZW50cywgdHlwZTogQVdTX1JVTV9DT05TVEFOVFMuVFJBQ0tfU1VDQ0VTU30pO1xuICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgZXZlbnRzLnNsaWNlKGluZGV4KS5mb3JFYWNoKChldmVudCkgPT4gcGVuZGluZ0V2ZW50cy5zZXQoZXZlbnRGaW5nZXJwcmludChldmVudCksIGV2ZW50KSk7XG4gICAgICAgICAgYXdhaXQgZmx1eC5kaXNwYXRjaCh7YW5hbHl0aWNzSWQsIGVycm9yLCBldmVudHM6IGJhdGNoRXZlbnRzLCB0eXBlOiBBV1NfUlVNX0NPTlNUQU5UUy5UUkFDS19FUlJPUn0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKClcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgZmx1c2hQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gZmx1c2hQcm9taXNlO1xuICB9O1xuXG4gIGNvbnN0IHNjaGVkdWxlRmx1c2ggPSAoKTogdm9pZCA9PiB7XG4gICAgaWYodGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgfVxuXG4gICAgY29uc3QgdGhyb3R0bGVSZW1haW5pbmcgPSBNYXRoLm1heCgwLCB0aHJvdHRsZU1zIC0gKERhdGUubm93KCkgLSBsYXN0Rmx1c2hBdCkpO1xuICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB2b2lkIGZsdXNoKCksIE1hdGgubWF4KGRlYm91bmNlTXMsIHRocm90dGxlUmVtYWluaW5nKSk7XG4gIH07XG5cbiAgY29uc3QgdHJhY2sgPSAoaW5wdXQ6IEF3c1J1bVRyYWNrSW5wdXQpOiB2b2lkID0+IHtcbiAgICBpZighZW5hYmxlZCB8fCAhYW5hbHl0aWNzSWQgfHwgaGFzUHJpdmFjeVNpZ25hbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXZlbnQgPSBzYW5pdGl6ZUV2ZW50KGlucHV0KTtcblxuICAgIGlmKCFldmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmdlcnByaW50ID0gZXZlbnRGaW5nZXJwcmludChldmVudCk7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBsYXN0U2VlbkF0ID0gc2VlbkV2ZW50cy5nZXQoZmluZ2VycHJpbnQpIHx8IDA7XG5cbiAgICBpZihzZWVuRXZlbnRzLmhhcyhmaW5nZXJwcmludCkgJiYgbm93IC0gbGFzdFNlZW5BdCA8IGRlZHVwZU1zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2VlbkV2ZW50cy5zZXQoZmluZ2VycHJpbnQsIG5vdyk7XG4gICAgcHJ1bmVTZWVuRXZlbnRzKCk7XG4gICAgc2VxdWVuY2UgKz0gMTtcblxuICAgIGNvbnN0IHF1ZXVlZEV2ZW50OiBBd3NSdW1FdmVudCA9IHtcbiAgICAgIC4uLmV2ZW50LFxuICAgICAgZXZlbnRJZDogY3JlYXRlSWQoKSxcbiAgICAgIGpvdXJuZXlJZCxcbiAgICAgIHNlcXVlbmNlLFxuICAgICAgdGltZXN0YW1wOiBub3dcbiAgICB9O1xuXG4gICAgcGVuZGluZ0V2ZW50cy5zZXQoZmluZ2VycHJpbnQsIHF1ZXVlZEV2ZW50KTtcbiAgICB2b2lkIGZsdXguZGlzcGF0Y2goe2FuYWx5dGljc0lkLCBldmVudDogcXVldWVkRXZlbnQsIHR5cGU6IEFXU19SVU1fQ09OU1RBTlRTLlRSQUNLX1FVRVVFRH0pO1xuICAgIHNjaGVkdWxlRmx1c2goKTtcbiAgfTtcblxuICBjb25zdCBkZXN0cm95ID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmKHRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgYXdhaXQgZmx1c2goKTtcbiAgICBzZWVuRXZlbnRzLmNsZWFyKCk7XG4gIH07XG5cbiAgcmV0dXJuIHtkZXN0cm95LCBmbHVzaCwgdHJhY2t9O1xufTtcbiJdLCJuYW1lcyI6WyJydW1SZXF1ZXN0IiwiQVdTX1JVTV9DT05TVEFOVFMiLCJUUkFDS19FUlJPUiIsIlRSQUNLX1FVRVVFRCIsIlRSQUNLX1NVQ0NFU1MiLCJERUZBVUxUX0RFQk9VTkNFX01TIiwiREVGQVVMVF9ERURVUEVfTVMiLCJERUZBVUxUX1RIUk9UVExFX01TIiwiTUFYX0JBVENIX1NJWkUiLCJNQVhfUFJPUEVSVElFUyIsIk1BWF9TRUVOX0VWRU5UUyIsIkJMT0NLRURfUFJPUEVSVFlfS0VZUyIsIlNldCIsIkVNQUlMX1BBVFRFUk4iLCJjcmVhdGVJZCIsImdsb2JhbFRoaXMiLCJjcnlwdG8iLCJyYW5kb21VVUlEIiwiRGF0ZSIsIm5vdyIsInRvU3RyaW5nIiwiTWF0aCIsInJhbmRvbSIsInNsaWNlIiwibm9ybWFsaXplVGV4dCIsInZhbHVlIiwibWF4TGVuZ3RoIiwiU3RyaW5nIiwidHJpbSIsIm5vcm1hbGl6ZVByb3BlcnR5S2V5IiwidG9Mb3dlckNhc2UiLCJyZXBsYWNlIiwic2FuaXRpemVQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsIk9iamVjdCIsImVudHJpZXMiLCJyZWR1Y2UiLCJyZXN1bHQiLCJrZXkiLCJwcm9wZXJ0eUtleSIsIm5vcm1hbGl6ZWRQcm9wZXJ0eUtleSIsImhhcyIsImluY2x1ZGVzIiwidGV4dFZhbHVlIiwidGVzdCIsIk51bWJlciIsImlzRmluaXRlIiwic2FuaXRpemVFdmVudCIsImV2ZW50IiwibmFtZSIsInR5cGUiLCJwYXRoIiwic3BsaXQiLCJldmVudEZpbmdlcnByaW50Iiwic29ydCIsImxlZnQiLCJyaWdodCIsImxvY2FsZUNvbXBhcmUiLCJKU09OIiwic3RyaW5naWZ5IiwiY3JlYXRlQXdzUnVtQWN0aW9ucyIsImZsdXgiLCJvcHRpb25zIiwiYW5hbHl0aWNzSWQiLCJkZWJvdW5jZU1zIiwibWF4IiwiZGVkdXBlTXMiLCJlbmFibGVkIiwicmVzcGVjdFByaXZhY3lTaWduYWxzIiwidGhyb3R0bGVNcyIsImpvdXJuZXlJZCIsInBlbmRpbmdFdmVudHMiLCJNYXAiLCJzZWVuRXZlbnRzIiwiZmx1c2hQcm9taXNlIiwibGFzdEZsdXNoQXQiLCJzZXF1ZW5jZSIsInRpbWVyIiwiaGFzUHJpdmFjeVNpZ25hbCIsIm5hdmlnYXRvciIsIm5hdmlnYXRvclN0YXRlIiwiZG9Ob3RUcmFjayIsImdsb2JhbFByaXZhY3lDb250cm9sIiwicHJ1bmVTZWVuRXZlbnRzIiwic2l6ZSIsImN1dG9mZiIsImZvckVhY2giLCJ0aW1lc3RhbXAiLCJmaW5nZXJwcmludCIsImRlbGV0ZSIsIm9sZGVzdEZpbmdlcnByaW50Iiwia2V5cyIsIm5leHQiLCJmbHVzaCIsImNsZWFyVGltZW91dCIsInVuZGVmaW5lZCIsImV2ZW50cyIsInZhbHVlcyIsImNsZWFyIiwiaW5kZXgiLCJsZW5ndGgiLCJiYXRjaEV2ZW50cyIsImRpc3BhdGNoIiwiZXJyb3IiLCJzZXQiLCJmaW5hbGx5Iiwic2NoZWR1bGVGbHVzaCIsInRocm90dGxlUmVtYWluaW5nIiwic2V0VGltZW91dCIsInRyYWNrIiwiaW5wdXQiLCJsYXN0U2VlbkF0IiwiZ2V0IiwicXVldWVkRXZlbnQiLCJldmVudElkIiwiZGVzdHJveSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsVUFBVSxRQUFPLHFCQUFxQjtBQUk5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
231
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWN0aW9ucy9hd3NSdW1BY3Rpb25zL2F3c1J1bUFjdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjYtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7cnVtQmVhY29uUmVxdWVzdCwgcnVtUmVxdWVzdH0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpLmpzJztcblxuaW1wb3J0IHR5cGUge0ZsdXhGcmFtZXdvcmt9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5cbmV4cG9ydCBjb25zdCBBV1NfUlVNX0NPTlNUQU5UUyA9IHtcbiAgVFJBQ0tfRVJST1I6ICdBV1NfUlVNX1RSQUNLX0VSUk9SJyxcbiAgVFJBQ0tfUVVFVUVEOiAnQVdTX1JVTV9UUkFDS19RVUVVRUQnLFxuICBUUkFDS19TVUNDRVNTOiAnQVdTX1JVTV9UUkFDS19TVUNDRVNTJ1xufSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgQXdzUnVtRXZlbnRUeXBlID0gJ2NsaWNrJyB8ICdwYWdlX3ZpZXcnIHwgKHN0cmluZyAmIHt9KTtcbmV4cG9ydCB0eXBlIEF3c1J1bVByb3BlcnR5ID0gYm9vbGVhbiB8IG51bWJlciB8IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBBd3NSdW1UcmFja0lucHV0IHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBwYXRoPzogc3RyaW5nO1xuICByZWFkb25seSBwcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgQXdzUnVtUHJvcGVydHk+O1xuICByZWFkb25seSB0eXBlOiBBd3NSdW1FdmVudFR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXdzUnVtRXZlbnQgZXh0ZW5kcyBBd3NSdW1UcmFja0lucHV0IHtcbiAgcmVhZG9ubHkgZXZlbnRJZDogc3RyaW5nO1xuICByZWFkb25seSBqb3VybmV5SWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc2VxdWVuY2U6IG51bWJlcjtcbiAgcmVhZG9ubHkgdGltZXN0YW1wOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXdzUnVtQWN0aW9uc09wdGlvbnMge1xuICByZWFkb25seSBhbmFseXRpY3NJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgZGVib3VuY2VNcz86IG51bWJlcjtcbiAgcmVhZG9ubHkgZGVkdXBlTXM/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuICByZWFkb25seSByZXNwZWN0UHJpdmFjeVNpZ25hbHM/OiBib29sZWFuO1xuICByZWFkb25seSB0aHJvdHRsZU1zPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF3c1J1bUFjdGlvbnMge1xuICByZWFkb25seSBkZXN0cm95OiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZWFkb25seSBmbHVzaDogKG9wdGlvbnM/OiBBd3NSdW1GbHVzaE9wdGlvbnMpID0+IFByb21pc2U8dm9pZD47XG4gIHJlYWRvbmx5IHRyYWNrOiAoZXZlbnQ6IEF3c1J1bVRyYWNrSW5wdXQpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXdzUnVtRmx1c2hPcHRpb25zIHtcbiAgLyoqXG4gICAqIFByZWZlciBuYXZpZ2F0b3Iuc2VuZEJlYWNvbiBmb3IgdGVybWluYWwgZGVsaXZlcnkuIEZhbGxzIGJhY2sgdG8gdGhlXG4gICAqIHN0YW5kYXJkIFJVTSByZXF1ZXN0IHdoZW4gdGhlIEJlYWNvbiBBUEkgY2Fubm90IGFjY2VwdCB0aGUgYmF0Y2guXG4gICAqL1xuICByZWFkb25seSB1c2VCZWFjb24/OiBib29sZWFuO1xufVxuXG5jb25zdCBERUZBVUxUX0RFQk9VTkNFX01TID0gMjUwO1xuY29uc3QgREVGQVVMVF9ERURVUEVfTVMgPSAxMDAwO1xuY29uc3QgREVGQVVMVF9USFJPVFRMRV9NUyA9IDEwMDA7XG5jb25zdCBNQVhfQkFUQ0hfU0laRSA9IDUwO1xuY29uc3QgTUFYX1BST1BFUlRJRVMgPSAyMDtcbmNvbnN0IE1BWF9TRUVOX0VWRU5UUyA9IDUwMDtcbmNvbnN0IEJMT0NLRURfUFJPUEVSVFlfS0VZUyA9IG5ldyBTZXQoW1xuICAnYWNjb3VudGlkJyxcbiAgJ2FkZHJlc3MnLFxuICAnZW1haWwnLFxuICAnZmlyc3RuYW1lJyxcbiAgJ2Z1bGxuYW1lJyxcbiAgJ2dlb2xvY2F0aW9uJyxcbiAgJ2lwJyxcbiAgJ2lwYWRkcmVzcycsXG4gICdsYXN0bmFtZScsXG4gICdsYXRpdHVkZScsXG4gICdsb25naXR1ZGUnLFxuICAnbmFtZScsXG4gICdwaG9uZScsXG4gICdyZWZlcnJlcicsXG4gICd0b2tlbicsXG4gICd1c2VyYWdlbnQnLFxuICAndXNlcmlkJ1xuXSk7XG5jb25zdCBFTUFJTF9QQVRURVJOID0gL1xcYlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXStcXGIvaTtcblxuaW50ZXJmYWNlIFByaXZhY3lOYXZpZ2F0b3IgZXh0ZW5kcyBOYXZpZ2F0b3Ige1xuICByZWFkb25seSBnbG9iYWxQcml2YWN5Q29udHJvbD86IGJvb2xlYW47XG59XG5cbmNvbnN0IGNyZWF0ZUlkID0gKCk6IHN0cmluZyA9PiB7XG4gIGlmKHR5cGVvZiBnbG9iYWxUaGlzLmNyeXB0bz8ucmFuZG9tVVVJRCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBnbG9iYWxUaGlzLmNyeXB0by5yYW5kb21VVUlEKCk7XG4gIH1cblxuICByZXR1cm4gYCR7RGF0ZS5ub3coKS50b1N0cmluZygzNil9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMil9YDtcbn07XG5cbmNvbnN0IG5vcm1hbGl6ZVRleHQgPSAodmFsdWU6IHVua25vd24sIG1heExlbmd0aDogbnVtYmVyKTogc3RyaW5nID0+XG4gIFN0cmluZyh2YWx1ZSB8fCAnJykudHJpbSgpLnNsaWNlKDAsIG1heExlbmd0aCk7XG5cbmNvbnN0IG5vcm1hbGl6ZVByb3BlcnR5S2V5ID0gKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgdmFsdWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOV0vZywgJycpO1xuXG5jb25zdCBzYW5pdGl6ZVByb3BlcnRpZXMgPSAoXG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIEF3c1J1bVByb3BlcnR5PiA9IHt9XG4pOiBSZWNvcmQ8c3RyaW5nLCBBd3NSdW1Qcm9wZXJ0eT4gPT4gT2JqZWN0LmVudHJpZXMocHJvcGVydGllcylcbiAgLnNsaWNlKDAsIE1BWF9QUk9QRVJUSUVTKVxuICAucmVkdWNlPFJlY29yZDxzdHJpbmcsIEF3c1J1bVByb3BlcnR5Pj4oKHJlc3VsdCwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgY29uc3QgcHJvcGVydHlLZXkgPSBub3JtYWxpemVUZXh0KGtleSwgNjQpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQcm9wZXJ0eUtleSA9IG5vcm1hbGl6ZVByb3BlcnR5S2V5KHByb3BlcnR5S2V5KTtcblxuICAgIGlmKFxuICAgICAgIXByb3BlcnR5S2V5IHx8XG4gICAgICBCTE9DS0VEX1BST1BFUlRZX0tFWVMuaGFzKG5vcm1hbGl6ZWRQcm9wZXJ0eUtleSkgfHxcbiAgICAgICFbJ2Jvb2xlYW4nLCAnbnVtYmVyJywgJ3N0cmluZyddLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSlcbiAgICApIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaWYodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgdGV4dFZhbHVlID0gbm9ybWFsaXplVGV4dCh2YWx1ZSwgMjU2KTtcblxuICAgICAgaWYodGV4dFZhbHVlICYmICFFTUFJTF9QQVRURVJOLnRlc3QodGV4dFZhbHVlKSkge1xuICAgICAgICByZXN1bHRbcHJvcGVydHlLZXldID0gdGV4dFZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZih0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCBOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgICByZXN1bHRbcHJvcGVydHlLZXldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pO1xuXG5jb25zdCBzYW5pdGl6ZUV2ZW50ID0gKGV2ZW50OiBBd3NSdW1UcmFja0lucHV0KTogQXdzUnVtVHJhY2tJbnB1dCB8IG51bGwgPT4ge1xuICBjb25zdCBuYW1lID0gbm9ybWFsaXplVGV4dChldmVudC5uYW1lLCAxMjgpO1xuICBjb25zdCB0eXBlID0gbm9ybWFsaXplVGV4dChldmVudC50eXBlLCA2NCk7XG5cbiAgaWYoIW5hbWUgfHwgIXR5cGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHBhdGggPSBub3JtYWxpemVUZXh0KGV2ZW50LnBhdGgsIDI1Nikuc3BsaXQoJz8nKVswXS5zcGxpdCgnIycpWzBdO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZSxcbiAgICAuLi4ocGF0aCA/IHtwYXRofSA6IHt9KSxcbiAgICBwcm9wZXJ0aWVzOiBzYW5pdGl6ZVByb3BlcnRpZXMoZXZlbnQucHJvcGVydGllcyksXG4gICAgdHlwZVxuICB9O1xufTtcblxuY29uc3QgZXZlbnRGaW5nZXJwcmludCA9IChldmVudDogQXdzUnVtVHJhY2tJbnB1dCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3QuZW50cmllcyhldmVudC5wcm9wZXJ0aWVzIHx8IHt9KS5zb3J0KChbbGVmdF0sIFtyaWdodF0pID0+IGxlZnQubG9jYWxlQ29tcGFyZShyaWdodCkpO1xuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoW2V2ZW50LnR5cGUsIGV2ZW50Lm5hbWUsIGV2ZW50LnBhdGggfHwgJycsIHByb3BlcnRpZXNdKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVBd3NSdW1BY3Rpb25zID0gKFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBvcHRpb25zOiBBd3NSdW1BY3Rpb25zT3B0aW9ucyA9IHt9XG4pOiBBd3NSdW1BY3Rpb25zID0+IHtcbiAgY29uc3QgYW5hbHl0aWNzSWQgPSBub3JtYWxpemVUZXh0KG9wdGlvbnMuYW5hbHl0aWNzSWQsIDEyOCk7XG4gIGNvbnN0IGRlYm91bmNlTXMgPSBNYXRoLm1heCgwLCBvcHRpb25zLmRlYm91bmNlTXMgPz8gREVGQVVMVF9ERUJPVU5DRV9NUyk7XG4gIGNvbnN0IGRlZHVwZU1zID0gTWF0aC5tYXgoMCwgb3B0aW9ucy5kZWR1cGVNcyA/PyBERUZBVUxUX0RFRFVQRV9NUyk7XG4gIGNvbnN0IGVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZWQgIT09IGZhbHNlO1xuICBjb25zdCByZXNwZWN0UHJpdmFjeVNpZ25hbHMgPSBvcHRpb25zLnJlc3BlY3RQcml2YWN5U2lnbmFscyAhPT0gZmFsc2U7XG4gIGNvbnN0IHRocm90dGxlTXMgPSBNYXRoLm1heCgwLCBvcHRpb25zLnRocm90dGxlTXMgPz8gREVGQVVMVF9USFJPVFRMRV9NUyk7XG4gIGNvbnN0IGpvdXJuZXlJZCA9IGNyZWF0ZUlkKCk7XG4gIGNvbnN0IHBlbmRpbmdFdmVudHMgPSBuZXcgTWFwPHN0cmluZywgQXdzUnVtRXZlbnQ+KCk7XG4gIGNvbnN0IHNlZW5FdmVudHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBsZXQgZmx1c2hQcm9taXNlOiBQcm9taXNlPHZvaWQ+IHwgdW5kZWZpbmVkO1xuICBsZXQgbGFzdEZsdXNoQXQgPSAwO1xuICBsZXQgc2VxdWVuY2UgPSAwO1xuICBsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGhhc1ByaXZhY3lTaWduYWwgPSAoKTogYm9vbGVhbiA9PiB7XG4gICAgaWYoIXJlc3BlY3RQcml2YWN5U2lnbmFscyB8fCB0eXBlb2YgZ2xvYmFsVGhpcy5uYXZpZ2F0b3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgbmF2aWdhdG9yU3RhdGUgPSBnbG9iYWxUaGlzLm5hdmlnYXRvciBhcyBQcml2YWN5TmF2aWdhdG9yO1xuXG4gICAgcmV0dXJuIG5hdmlnYXRvclN0YXRlLmRvTm90VHJhY2sgPT09ICcxJyB8fCBuYXZpZ2F0b3JTdGF0ZS5nbG9iYWxQcml2YWN5Q29udHJvbCA9PT0gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBwcnVuZVNlZW5FdmVudHMgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYoc2VlbkV2ZW50cy5zaXplIDw9IE1BWF9TRUVOX0VWRU5UUykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN1dG9mZiA9IERhdGUubm93KCkgLSBkZWR1cGVNcztcbiAgICBzZWVuRXZlbnRzLmZvckVhY2goKHRpbWVzdGFtcCwgZmluZ2VycHJpbnQpID0+IHtcbiAgICAgIGlmKHRpbWVzdGFtcCA8IGN1dG9mZikge1xuICAgICAgICBzZWVuRXZlbnRzLmRlbGV0ZShmaW5nZXJwcmludCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB3aGlsZShzZWVuRXZlbnRzLnNpemUgPiBNQVhfU0VFTl9FVkVOVFMpIHtcbiAgICAgIGNvbnN0IG9sZGVzdEZpbmdlcnByaW50ID0gc2VlbkV2ZW50cy5rZXlzKCkubmV4dCgpLnZhbHVlO1xuXG4gICAgICBpZighb2xkZXN0RmluZ2VycHJpbnQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHNlZW5FdmVudHMuZGVsZXRlKG9sZGVzdEZpbmdlcnByaW50KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZmx1c2ggPSBhc3luYyAoe3VzZUJlYWNvbiA9IGZhbHNlfTogQXdzUnVtRmx1c2hPcHRpb25zID0ge30pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZihmbHVzaFByb21pc2UpIHtcbiAgICAgIHJldHVybiBmbHVzaFByb21pc2U7XG4gICAgfVxuXG4gICAgaWYoIWVuYWJsZWQgfHwgIWFuYWx5dGljc0lkIHx8IGhhc1ByaXZhY3lTaWduYWwoKSB8fCBwZW5kaW5nRXZlbnRzLnNpemUgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZih0aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHRpbWVyID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50cyA9IFsuLi5wZW5kaW5nRXZlbnRzLnZhbHVlcygpXTtcbiAgICBwZW5kaW5nRXZlbnRzLmNsZWFyKCk7XG4gICAgbGFzdEZsdXNoQXQgPSBEYXRlLm5vdygpO1xuXG4gICAgZmx1c2hQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgIGZvcihsZXQgaW5kZXggPSAwOyBpbmRleCA8IGV2ZW50cy5sZW5ndGg7IGluZGV4ICs9IE1BWF9CQVRDSF9TSVpFKSB7XG4gICAgICAgIGNvbnN0IGJhdGNoRXZlbnRzID0gZXZlbnRzLnNsaWNlKGluZGV4LCBpbmRleCArIE1BWF9CQVRDSF9TSVpFKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGJhdGNoID0ge2FuYWx5dGljc0lkLCBldmVudHM6IGJhdGNoRXZlbnRzfTtcbiAgICAgICAgICBjb25zdCBzZW50QnlCZWFjb24gPSB1c2VCZWFjb24gJiYgcnVtQmVhY29uUmVxdWVzdChmbHV4LCBiYXRjaCk7XG5cbiAgICAgICAgICBpZighc2VudEJ5QmVhY29uKSB7XG4gICAgICAgICAgICBhd2FpdCBydW1SZXF1ZXN0KGZsdXgsIGJhdGNoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgZmx1eC5kaXNwYXRjaCh7YW5hbHl0aWNzSWQsIGV2ZW50czogYmF0Y2hFdmVudHMsIHR5cGU6IEFXU19SVU1fQ09OU1RBTlRTLlRSQUNLX1NVQ0NFU1N9KTtcbiAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgIGV2ZW50cy5zbGljZShpbmRleCkuZm9yRWFjaCgoZXZlbnQpID0+IHBlbmRpbmdFdmVudHMuc2V0KGV2ZW50RmluZ2VycHJpbnQoZXZlbnQpLCBldmVudCkpO1xuICAgICAgICAgIGF3YWl0IGZsdXguZGlzcGF0Y2goe2FuYWx5dGljc0lkLCBlcnJvciwgZXZlbnRzOiBiYXRjaEV2ZW50cywgdHlwZTogQVdTX1JVTV9DT05TVEFOVFMuVFJBQ0tfRVJST1J9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSgpXG4gICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgIGZsdXNoUHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIGZsdXNoUHJvbWlzZTtcbiAgfTtcblxuICBjb25zdCBzY2hlZHVsZUZsdXNoID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmKHRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIH1cblxuICAgIGNvbnN0IHRocm90dGxlUmVtYWluaW5nID0gTWF0aC5tYXgoMCwgdGhyb3R0bGVNcyAtIChEYXRlLm5vdygpIC0gbGFzdEZsdXNoQXQpKTtcbiAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdm9pZCBmbHVzaCgpLCBNYXRoLm1heChkZWJvdW5jZU1zLCB0aHJvdHRsZVJlbWFpbmluZykpO1xuICB9O1xuXG4gIGNvbnN0IHRyYWNrID0gKGlucHV0OiBBd3NSdW1UcmFja0lucHV0KTogdm9pZCA9PiB7XG4gICAgaWYoIWVuYWJsZWQgfHwgIWFuYWx5dGljc0lkIHx8IGhhc1ByaXZhY3lTaWduYWwoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50ID0gc2FuaXRpemVFdmVudChpbnB1dCk7XG5cbiAgICBpZighZXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5nZXJwcmludCA9IGV2ZW50RmluZ2VycHJpbnQoZXZlbnQpO1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgbGFzdFNlZW5BdCA9IHNlZW5FdmVudHMuZ2V0KGZpbmdlcnByaW50KSB8fCAwO1xuXG4gICAgaWYoc2VlbkV2ZW50cy5oYXMoZmluZ2VycHJpbnQpICYmIG5vdyAtIGxhc3RTZWVuQXQgPCBkZWR1cGVNcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlZW5FdmVudHMuc2V0KGZpbmdlcnByaW50LCBub3cpO1xuICAgIHBydW5lU2VlbkV2ZW50cygpO1xuICAgIHNlcXVlbmNlICs9IDE7XG5cbiAgICBjb25zdCBxdWV1ZWRFdmVudDogQXdzUnVtRXZlbnQgPSB7XG4gICAgICAuLi5ldmVudCxcbiAgICAgIGV2ZW50SWQ6IGNyZWF0ZUlkKCksXG4gICAgICBqb3VybmV5SWQsXG4gICAgICBzZXF1ZW5jZSxcbiAgICAgIHRpbWVzdGFtcDogbm93XG4gICAgfTtcblxuICAgIHBlbmRpbmdFdmVudHMuc2V0KGZpbmdlcnByaW50LCBxdWV1ZWRFdmVudCk7XG4gICAgdm9pZCBmbHV4LmRpc3BhdGNoKHthbmFseXRpY3NJZCwgZXZlbnQ6IHF1ZXVlZEV2ZW50LCB0eXBlOiBBV1NfUlVNX0NPTlNUQU5UUy5UUkFDS19RVUVVRUR9KTtcbiAgICBzY2hlZHVsZUZsdXNoKCk7XG4gIH07XG5cbiAgY29uc3QgZGVzdHJveSA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBpZih0aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHRpbWVyID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGF3YWl0IGZsdXNoKCk7XG4gICAgc2VlbkV2ZW50cy5jbGVhcigpO1xuICB9O1xuXG4gIHJldHVybiB7ZGVzdHJveSwgZmx1c2gsIHRyYWNrfTtcbn07XG4iXSwibmFtZXMiOlsicnVtQmVhY29uUmVxdWVzdCIsInJ1bVJlcXVlc3QiLCJBV1NfUlVNX0NPTlNUQU5UUyIsIlRSQUNLX0VSUk9SIiwiVFJBQ0tfUVVFVUVEIiwiVFJBQ0tfU1VDQ0VTUyIsIkRFRkFVTFRfREVCT1VOQ0VfTVMiLCJERUZBVUxUX0RFRFVQRV9NUyIsIkRFRkFVTFRfVEhST1RUTEVfTVMiLCJNQVhfQkFUQ0hfU0laRSIsIk1BWF9QUk9QRVJUSUVTIiwiTUFYX1NFRU5fRVZFTlRTIiwiQkxPQ0tFRF9QUk9QRVJUWV9LRVlTIiwiU2V0IiwiRU1BSUxfUEFUVEVSTiIsImNyZWF0ZUlkIiwiZ2xvYmFsVGhpcyIsImNyeXB0byIsInJhbmRvbVVVSUQiLCJEYXRlIiwibm93IiwidG9TdHJpbmciLCJNYXRoIiwicmFuZG9tIiwic2xpY2UiLCJub3JtYWxpemVUZXh0IiwidmFsdWUiLCJtYXhMZW5ndGgiLCJTdHJpbmciLCJ0cmltIiwibm9ybWFsaXplUHJvcGVydHlLZXkiLCJ0b0xvd2VyQ2FzZSIsInJlcGxhY2UiLCJzYW5pdGl6ZVByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwiT2JqZWN0IiwiZW50cmllcyIsInJlZHVjZSIsInJlc3VsdCIsImtleSIsInByb3BlcnR5S2V5Iiwibm9ybWFsaXplZFByb3BlcnR5S2V5IiwiaGFzIiwiaW5jbHVkZXMiLCJ0ZXh0VmFsdWUiLCJ0ZXN0IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJzYW5pdGl6ZUV2ZW50IiwiZXZlbnQiLCJuYW1lIiwidHlwZSIsInBhdGgiLCJzcGxpdCIsImV2ZW50RmluZ2VycHJpbnQiLCJzb3J0IiwibGVmdCIsInJpZ2h0IiwibG9jYWxlQ29tcGFyZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJjcmVhdGVBd3NSdW1BY3Rpb25zIiwiZmx1eCIsIm9wdGlvbnMiLCJhbmFseXRpY3NJZCIsImRlYm91bmNlTXMiLCJtYXgiLCJkZWR1cGVNcyIsImVuYWJsZWQiLCJyZXNwZWN0UHJpdmFjeVNpZ25hbHMiLCJ0aHJvdHRsZU1zIiwiam91cm5leUlkIiwicGVuZGluZ0V2ZW50cyIsIk1hcCIsInNlZW5FdmVudHMiLCJmbHVzaFByb21pc2UiLCJsYXN0Rmx1c2hBdCIsInNlcXVlbmNlIiwidGltZXIiLCJoYXNQcml2YWN5U2lnbmFsIiwibmF2aWdhdG9yIiwibmF2aWdhdG9yU3RhdGUiLCJkb05vdFRyYWNrIiwiZ2xvYmFsUHJpdmFjeUNvbnRyb2wiLCJwcnVuZVNlZW5FdmVudHMiLCJzaXplIiwiY3V0b2ZmIiwiZm9yRWFjaCIsInRpbWVzdGFtcCIsImZpbmdlcnByaW50IiwiZGVsZXRlIiwib2xkZXN0RmluZ2VycHJpbnQiLCJrZXlzIiwibmV4dCIsImZsdXNoIiwidXNlQmVhY29uIiwiY2xlYXJUaW1lb3V0IiwidW5kZWZpbmVkIiwiZXZlbnRzIiwidmFsdWVzIiwiY2xlYXIiLCJpbmRleCIsImxlbmd0aCIsImJhdGNoRXZlbnRzIiwiYmF0Y2giLCJzZW50QnlCZWFjb24iLCJkaXNwYXRjaCIsImVycm9yIiwic2V0IiwiZmluYWxseSIsInNjaGVkdWxlRmx1c2giLCJ0aHJvdHRsZVJlbWFpbmluZyIsInNldFRpbWVvdXQiLCJ0cmFjayIsImlucHV0IiwibGFzdFNlZW5BdCIsImdldCIsInF1ZXVlZEV2ZW50IiwiZXZlbnRJZCIsImRlc3Ryb3kiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLGdCQUFnQixFQUFFQyxVQUFVLFFBQU8scUJBQXFCO0FBSWhFLE9BQU8sTUFBTUMsb0JBQW9CO0lBQy9CQyxhQUFhO0lBQ2JDLGNBQWM7SUFDZEMsZUFBZTtBQUNqQixFQUFXO0FBMENYLE1BQU1DLHNCQUFzQjtBQUM1QixNQUFNQyxvQkFBb0I7QUFDMUIsTUFBTUMsc0JBQXNCO0FBQzVCLE1BQU1DLGlCQUFpQjtBQUN2QixNQUFNQyxpQkFBaUI7QUFDdkIsTUFBTUMsa0JBQWtCO0FBQ3hCLE1BQU1DLHdCQUF3QixJQUFJQyxJQUFJO0lBQ3BDO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDRDtBQUNELE1BQU1DLGdCQUFnQjtBQU10QixNQUFNQyxXQUFXO0lBQ2YsSUFBRyxPQUFP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
package/lib/index.d.ts CHANGED
@@ -7,7 +7,7 @@ export type { MetropolisAdapters } from './utils/MetropolisContext.js';
7
7
  export declare const GOTHAM_ANALYTICS_EVENT = "nlabs:gotham:analytics";
8
8
  export declare const onInit: (flux: FluxFramework) => Promise<void>;
9
9
  export * from './stores/index.js';
10
- export { appMutation, appQuery, publicMutation, publicQuery, rumMutation, rumRequest, refreshSession, resolveRestEndpoint, restRequest, uploadImage, type ApiResultsType, type ReaktorDbCollection, type RestApiOptions, type RestMethod } from './utils/api.js';
10
+ export { appMutation, appQuery, publicMutation, publicQuery, rumMutation, rumBeaconRequest, rumRequest, refreshSession, resolveRestEndpoint, restRequest, uploadImage, type ApiResultsType, type ReaktorDbCollection, type RestApiOptions, type RestMethod } from './utils/api.js';
11
11
  export { resolveEnvironmentConfig } from './config/index.js';
12
12
  export { getConfigFromFlux } from './utils/configUtils.js';
13
13
  export interface MetropolisProps {
package/lib/index.js CHANGED
@@ -119,7 +119,7 @@ export const onInit = async (flux)=>{
119
119
  }
120
120
  };
121
121
  export * from './stores/index.js';
122
- export { appMutation, appQuery, publicMutation, publicQuery, rumMutation, rumRequest, refreshSession, resolveRestEndpoint, restRequest, uploadImage } from './utils/api.js';
122
+ export { appMutation, appQuery, publicMutation, publicQuery, rumMutation, rumBeaconRequest, rumRequest, refreshSession, resolveRestEndpoint, restRequest, uploadImage } from './utils/api.js';
123
123
  export { resolveEnvironmentConfig } from './config/index.js';
124
124
  export { getConfigFromFlux } from './utils/configUtils.js';
125
125
  export const Metropolis = ({ adapters, children, config = {}, translations = {} })=>{
@@ -169,9 +169,23 @@ export const Metropolis = ({ adapters, children, config = {}, translations = {}
169
169
  awsRum.track(detail);
170
170
  }
171
171
  };
172
+ const flushTerminalEvents = ()=>{
173
+ void awsRum.flush({
174
+ useBeacon: true
175
+ });
176
+ };
177
+ const onVisibilityChange = ()=>{
178
+ if (globalThis.document?.visibilityState === 'hidden') {
179
+ flushTerminalEvents();
180
+ }
181
+ };
172
182
  globalThis.window.addEventListener(GOTHAM_ANALYTICS_EVENT, onGothamAnalytics);
183
+ globalThis.window.addEventListener('pagehide', flushTerminalEvents);
184
+ globalThis.document?.addEventListener('visibilitychange', onVisibilityChange);
173
185
  return ()=>{
174
186
  globalThis.window.removeEventListener(GOTHAM_ANALYTICS_EVENT, onGothamAnalytics);
187
+ globalThis.window.removeEventListener('pagehide', flushTerminalEvents);
188
+ globalThis.document?.removeEventListener('visibilitychange', onVisibilityChange);
175
189
  void awsRum.destroy();
176
190
  };
177
191
  }, [
@@ -278,4 +292,4 @@ export * from './actions/videoActions/videoActions.js';
278
292
  export * from './constants/Collections.js';
279
293
  export * from './types/index.js';
280
294
 
281
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge3VzZUZsdXgsIHVzZUZsdXhTdGF0ZX0gZnJvbSAnQG5sYWJzL2Fya2hhbWpzLXV0aWxzLXJlYWN0JztcbmltcG9ydCBpMThuIGZyb20gJ2kxOG5leHQnO1xuaW1wb3J0IHtEYXRlVGltZX0gZnJvbSAnbHV4b24nO1xuaW1wb3J0IHt1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtJMThuZXh0UHJvdmlkZXJ9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuXG5pbXBvcnQge2NyZWF0ZVdlYnNvY2tldEFjdGlvbnN9IGZyb20gJy4vYWN0aW9ucy93ZWJzb2NrZXRBY3Rpb25zL3dlYnNvY2tldEFjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUge0F3c1J1bUFjdGlvbnMsIEF3c1J1bVRyYWNrSW5wdXR9IGZyb20gJy4vYWN0aW9ucy9hd3NSdW1BY3Rpb25zL2F3c1J1bUFjdGlvbnMuanMnO1xuaW1wb3J0IHtzeW5jUGVyc29uYVRhZ3NUb1Nlc3Npb24sIHN5bmNQZXJzb25hVG9TZXNzaW9ufSBmcm9tICcuL2FjdGlvbnMvcGVyc29uYUFjdGlvbnMvcGVyc29uYUFjdGlvbnMuanMnO1xuaW1wb3J0IHtyZXNvbHZlRW52aXJvbm1lbnRDb25maWd9IGZyb20gJy4vY29uZmlnL2luZGV4LmpzJztcbmltcG9ydCB7XG4gIGFwcCxcbiAgZXZlbnRzLFxuICBpbWFnZXMsXG4gIGxvY2F0aW9ucyxcbiAgbWVzc2FnZXMsXG4gIG5vdGlmaWNhdGlvbnMsXG4gIE5PVElGSUNBVElPTl9DT05TVEFOVFMsXG4gIHBlcm1pc3Npb25zLFxuICBQRVJTT05BX0NPTlNUQU5UUyxcbiAgcG9zdHMsXG4gIHN1YnNjcmlwdGlvbnMsXG4gIFRBR19DT05TVEFOVFMsXG4gIHRhZ3MsXG4gIFVTRVJfQ09OU1RBTlRTLFxuICB1c2VycyxcbiAgdmlkZW8sXG4gIHdlYnNvY2tldFxufSBmcm9tICcuL3N0b3Jlcy9pbmRleC5qcyc7XG5pbXBvcnQge3JlZnJlc2hTZXNzaW9ufSBmcm9tICcuL3V0aWxzL2FwaS5qcyc7XG5pbXBvcnQge2dldENvbmZpZ0Zyb21GbHV4fSBmcm9tICcuL3V0aWxzL2NvbmZpZ1V0aWxzLmpzJztcbmltcG9ydCB7aW5pdEkxOG59IGZyb20gJy4vdXRpbHMvaTE4bi5qcyc7XG5pbXBvcnQge01ldHJvcG9saXNDb250ZXh0fSBmcm9tICcuL3V0aWxzL01ldHJvcG9saXNDb250ZXh0LmpzJztcbmltcG9ydCB7Z2V0UmVmcmVzaFdpbmRvd01pbnV0ZXMsIGh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UsIHBhcnNlSnd0RXhwaXJ5TXN9IGZyb20gJy4vdXRpbHMvc2Vzc2lvbi5qcyc7XG5pbXBvcnQge2NyZWF0ZUFjdGlvbn0gZnJvbSAnLi91dGlscy9hY3Rpb25GYWN0b3J5LmpzJztcblxuaW1wb3J0IHR5cGUge0ZsdXhGcmFtZXdvcmt9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5pbXBvcnQgdHlwZSB7TWV0cm9wb2xpc0NvbmZpZ3VyYXRpb24sIE1ldHJvcG9saXNFbnZpcm9ubWVudENvbmZpZ3VyYXRpb259IGZyb20gJy4vY29uZmlnL2luZGV4LmpzJztcbmltcG9ydCB0eXBlIHtNZXRyb3BvbGlzQWRhcHRlcnN9IGZyb20gJy4vdXRpbHMvTWV0cm9wb2xpc0NvbnRleHQuanMnO1xuXG5leHBvcnQge01ldHJvcG9saXNDb250ZXh0fSBmcm9tICcuL3V0aWxzL01ldHJvcG9saXNDb250ZXh0LmpzJztcblxuZXhwb3J0IHR5cGUge01ldHJvcG9saXNDb25maWd1cmF0aW9ufSBmcm9tICcuL2NvbmZpZy9pbmRleC5qcyc7XG5leHBvcnQgdHlwZSB7TWV0cm9wb2xpc0FkYXB0ZXJzfSBmcm9tICcuL3V0aWxzL01ldHJvcG9saXNDb250ZXh0LmpzJztcblxuZXhwb3J0IGNvbnN0IEdPVEhBTV9BTkFMWVRJQ1NfRVZFTlQgPSAnbmxhYnM6Z290aGFtOmFuYWx5dGljcyc7XG5cbmV4cG9ydCBjb25zdCBvbkluaXQgPSBhc3luYyAoZmx1eDogRmx1eEZyYW1ld29yaykgPT4ge1xuICBpZighZmx1eC5nZXRTdGF0ZSgnYXBwLm1ldHJvcG9saXNJbml0aWFsaXplZCcpKSB7XG4gICAgZmx1eC5hZGRTdG9yZXMoW1xuICAgICAgYXBwLFxuICAgICAgZXZlbnRzLFxuICAgICAgaW1hZ2VzLFxuICAgICAgbG9jYXRpb25zLFxuICAgICAgbWVzc2FnZXMsXG4gICAgICBub3RpZmljYXRpb25zLFxuICAgICAgcGVybWlzc2lvbnMsXG4gICAgICBwb3N0cyxcbiAgICAgIHN1YnNjcmlwdGlvbnMsXG4gICAgICB0YWdzLFxuICAgICAgdXNlcnMsXG4gICAgICB2aWRlbyxcbiAgICAgIHdlYnNvY2tldFxuICAgIF0pO1xuICAgIGZsdXgub24oVVNFUl9DT05TVEFOVFMuU0lHTl9PVVRfU1VDQ0VTUywgKCkgPT4ge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7dHlwZTogTk9USUZJQ0FUSU9OX0NPTlNUQU5UUy5DTEVBUl9JVEVNU30pO1xuICAgIH0pO1xuICAgIGZsdXgub24oUEVSU09OQV9DT05TVEFOVFMuQUREX0lURU1fU1VDQ0VTUywgYXN5bmMgKHtwZXJzb25hID0ge319OiB7cGVyc29uYT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+fSkgPT4ge1xuICAgICAgc3luY1BlcnNvbmFUb1Nlc3Npb24oZmx1eCwgcGVyc29uYSk7XG5cbiAgICAgIGlmKHBlcnNvbmE/LnBlcnNvbmFJZCAmJiAhQXJyYXkuaXNBcnJheShwZXJzb25hPy50YWdzKSkge1xuICAgICAgICBhd2FpdCBzeW5jUGVyc29uYVRhZ3NUb1Nlc3Npb24oZmx1eCwgU3RyaW5nKHBlcnNvbmEucGVyc29uYUlkKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmbHV4Lm9uKFBFUlNPTkFfQ09OU1RBTlRTLlVQREFURV9JVEVNX1NVQ0NFU1MsIGFzeW5jICh7cGVyc29uYSA9IHt9fToge3BlcnNvbmE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0pID0+IHtcbiAgICAgIHN5bmNQZXJzb25hVG9TZXNzaW9uKGZsdXgsIHBlcnNvbmEpO1xuXG4gICAgICBpZihwZXJzb25hPy5wZXJzb25hSWQgJiYgIUFycmF5LmlzQXJyYXkocGVyc29uYT8udGFncykpIHtcbiAgICAgICAgYXdhaXQgc3luY1BlcnNvbmFUYWdzVG9TZXNzaW9uKGZsdXgsIFN0cmluZyhwZXJzb25hLnBlcnNvbmFJZCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZmx1eC5vbihUQUdfQ09OU1RBTlRTLkFERF9QRVJTT05BX1NVQ0NFU1MsICh7dGFnfToge3RhZz86IHtuYW1lPzogc3RyaW5nOyB0YWdJZD86IHN0cmluZ319KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50U2Vzc2lvbiA9IChmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24nLCB7fSkgfHwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYge1xuICAgICAgICB0YWdzPzogQXJyYXk8e25hbWU/OiBzdHJpbmc7IHRhZ0lkPzogc3RyaW5nfT47XG4gICAgICB9O1xuICAgICAgY29uc3QgY3VycmVudFRhZ3MgPSBBcnJheS5pc0FycmF5KGN1cnJlbnRTZXNzaW9uLnRhZ3MpID8gY3VycmVudFNlc3Npb24udGFncyA6IFtdO1xuICAgICAgY29uc3QgbmV4dFRhZ0lkID0gU3RyaW5nKHRhZz8udGFnSWQgfHwgJycpLnRyaW0oKTtcblxuICAgICAgaWYoIW5leHRUYWdJZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lcmdlZFRhZ3MgPSBbLi4uY3VycmVudFRhZ3MuZmlsdGVyKChpdGVtKSA9PiBTdHJpbmcoaXRlbT8udGFnSWQgfHwgJycpLnRyaW0oKSAhPT0gbmV4dFRhZ0lkKSwgdGFnIGFzIHtuYW1lPzogc3RyaW5nOyB0YWdJZD86IHN0cmluZ31dXG4gICAgICAgIC5zb3J0KChsZWZ0LCByaWdodCkgPT4gU3RyaW5nKGxlZnQ/Lm5hbWUgfHwgJycpLmxvY2FsZUNvbXBhcmUoU3RyaW5nKHJpZ2h0Py5uYW1lIHx8ICcnKSkpO1xuICAgICAgY29uc3QgbmV4dFNlc3Npb24gPSB7Li4uY3VycmVudFNlc3Npb24sIHRhZ3M6IG1lcmdlZFRhZ3N9O1xuXG4gICAgICB2b2lkIGZsdXguc2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicsIG5leHRTZXNzaW9uKTtcbiAgICAgIGZsdXguZGlzcGF0Y2goe3R5cGU6IFVTRVJfQ09OU1RBTlRTLlVQREFURV9TRVNTSU9OX1NVQ0NFU1MsIHVzZXI6IHt0YWdzOiBtZXJnZWRUYWdzfX0pO1xuICAgIH0pO1xuXG4gICAgZmx1eC5vbihUQUdfQ09OU1RBTlRTLlJFTU9WRV9QRVJTT05BX1NVQ0NFU1MsICh7dGFnfToge3RhZz86IHt0YWdJZD86IHN0cmluZ319KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50U2Vzc2lvbiA9IChmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24nLCB7fSkgfHwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYge1xuICAgICAgICB0YWdzPzogQXJyYXk8e25hbWU/OiBzdHJpbmc7IHRhZ0lkPzogc3RyaW5nfT47XG4gICAgICB9O1xuICAgICAgY29uc3QgY3VycmVudFRhZ3MgPSBBcnJheS5pc0FycmF5KGN1cnJlbnRTZXNzaW9uLnRhZ3MpID8gY3VycmVudFNlc3Npb24udGFncyA6IFtdO1xuICAgICAgY29uc3QgbmV4dFRhZ0lkID0gU3RyaW5nKHRhZz8udGFnSWQgfHwgJycpLnRyaW0oKTtcblxuICAgICAgaWYoIW5leHRUYWdJZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRUYWdzID0gY3VycmVudFRhZ3MuZmlsdGVyKChpdGVtKSA9PiBTdHJpbmcoaXRlbT8udGFnSWQgfHwgJycpLnRyaW0oKSAhPT0gbmV4dFRhZ0lkKTtcbiAgICAgIGNvbnN0IG5leHRTZXNzaW9uID0gey4uLmN1cnJlbnRTZXNzaW9uLCB0YWdzOiBuZXh0VGFnc307XG5cbiAgICAgIHZvaWQgZmx1eC5zZXRTdGF0ZSgndXNlci5zZXNzaW9uJywgbmV4dFNlc3Npb24pO1xuICAgICAgZmx1eC5kaXNwYXRjaCh7dHlwZTogVVNFUl9DT05TVEFOVFMuVVBEQVRFX1NFU1NJT05fU1VDQ0VTUywgdXNlcjoge3RhZ3M6IG5leHRUYWdzfX0pO1xuICAgIH0pO1xuICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZShmbHV4LnNldFN0YXRlKCdhcHAubWV0cm9wb2xpc0luaXRpYWxpemVkJywgdHJ1ZSkpO1xuICB9XG5cbiAgY29uc3QgdG9rZW4gPSBTdHJpbmcoZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uLnRva2VuJykgfHwgJycpO1xuXG4gIGlmKHRva2VuKSB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IChmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24nLCB7fSkgfHwge30pIGFzIHtleHBpcmVzPzogbnVtYmVyOyBpc3N1ZWQ/OiBudW1iZXI7IHRva2VuPzogc3RyaW5nfTtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgICBjb25zdCB0b2tlbkV4cGlyZXNBdCA9IHBhcnNlSnd0RXhwaXJ5TXModG9rZW4pO1xuICAgIGNvbnN0IHNlc3Npb25MaWZldGltZU1pbnV0ZXMgPSBNYXRoLnJvdW5kKChOdW1iZXIoc2Vzc2lvbi5leHBpcmVzIHx8IDApIC0gTnVtYmVyKHNlc3Npb24uaXNzdWVkIHx8IDApKSAvICgxMDAwICogNjApKTtcbiAgICBjb25zdCByZWZyZXNoV2luZG93TWludXRlcyA9IGdldFJlZnJlc2hXaW5kb3dNaW51dGVzKFxuICAgICAgc2Vzc2lvbkxpZmV0aW1lTWludXRlcyB8fCAxNSxcbiAgICAgIGNvbmZpZy5hcHA/LnNlc3Npb24gfHwge31cbiAgICApO1xuICAgIGNvbnN0IHJlZnJlc2hFeHBpcmVzTWludXRlcyA9IE1hdGgubWF4KDEsIE51bWJlcihjb25maWcuYXBwPy5zZXNzaW9uPy5tYXhNaW51dGVzIHx8IHNlc3Npb25MaWZldGltZU1pbnV0ZXMgfHwgMTUpKTtcbiAgICBjb25zdCBleHBpcmVzQXQgPSBOdW1iZXIoc2Vzc2lvbi5leHBpcmVzIHx8IDApO1xuXG4gICAgaWYodG9rZW5FeHBpcmVzQXQgPiAwICYmIERhdGUubm93KCkgPj0gdG9rZW5FeHBpcmVzQXQpIHtcbiAgICAgIGF3YWl0IHJlZnJlc2hTZXNzaW9uKGZsdXgsIHRva2VuLCByZWZyZXNoRXhwaXJlc01pbnV0ZXMpO1xuICAgIH0gZWxzZSBpZighZXhwaXJlc0F0KSB7XG4gICAgICBhd2FpdCByZWZyZXNoU2Vzc2lvbihmbHV4LCB0b2tlbiwgcmVmcmVzaEV4cGlyZXNNaW51dGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbWludXRlc1VudGlsRXhwaXJ5ID0gTWF0aC5yb3VuZChEYXRlVGltZS5mcm9tTWlsbGlzKGV4cGlyZXNBdCkuZGlmZihEYXRlVGltZS5sb2NhbCgpLCAnbWludXRlcycpLnRvT2JqZWN0KCkubWludXRlcyB8fCAwKTtcblxuICAgICAgaWYobWludXRlc1VudGlsRXhwaXJ5IDw9IDAgfHwgbWludXRlc1VudGlsRXhwaXJ5IDw9IHJlZnJlc2hXaW5kb3dNaW51dGVzKSB7XG4gICAgICAgIGF3YWl0IHJlZnJlc2hTZXNzaW9uKGZsdXgsIHRva2VuIGFzIHN0cmluZywgcmVmcmVzaEV4cGlyZXNNaW51dGVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCAqIGZyb20gJy4vc3RvcmVzL2luZGV4LmpzJztcblxuZXhwb3J0IHtcbiAgYXBwTXV0YXRpb24sXG4gIGFwcFF1ZXJ5LFxuICBwdWJsaWNNdXRhdGlvbixcbiAgcHVibGljUXVlcnksXG4gIHJ1bU11dGF0aW9uLFxuICBydW1SZXF1ZXN0LFxuICByZWZyZXNoU2Vzc2lvbixcbiAgcmVzb2x2ZVJlc3RFbmRwb2ludCxcbiAgcmVzdFJlcXVlc3QsXG4gIHVwbG9hZEltYWdlLFxuICB0eXBlIEFwaVJlc3VsdHNUeXBlLFxuICB0eXBlIFJlYWt0b3JEYkNvbGxlY3Rpb24sXG4gIHR5cGUgUmVzdEFwaU9wdGlvbnMsXG4gIHR5cGUgUmVzdE1ldGhvZFxufSBmcm9tICcuL3V0aWxzL2FwaS5qcyc7XG5cbmV4cG9ydCB7cmVzb2x2ZUVudmlyb25tZW50Q29uZmlnfSBmcm9tICcuL2NvbmZpZy9pbmRleC5qcyc7XG5leHBvcnQge2dldENvbmZpZ0Zyb21GbHV4fSBmcm9tICcuL3V0aWxzL2NvbmZpZ1V0aWxzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBNZXRyb3BvbGlzUHJvcHMge1xuICByZWFkb25seSBhZGFwdGVycz86IE1ldHJvcG9saXNBZGFwdGVycztcbiAgcmVhZG9ubHkgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBSZWFjdC5SZWFjdEVsZW1lbnRbXTtcbiAgcmVhZG9ubHkgY29uZmlnPzogTWV0cm9wb2xpc0NvbmZpZ3VyYXRpb247XG4gIHJlYWRvbmx5IHRyYW5zbGF0aW9ucz86IFNpbXBsZVRyYW5zbGF0aW9ucyB8IENvbXBsZXhUcmFuc2xhdGlvbnM7XG59XG5cbmV4cG9ydCB0eXBlIFNpbXBsZVRyYW5zbGF0aW9ucyA9IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxleFRyYW5zbGF0aW9uIHtcbiAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9jYWxlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWVzcGFjZT86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQ29tcGxleFRyYW5zbGF0aW9ucyA9IFJlY29yZDxzdHJpbmcsIENvbXBsZXhUcmFuc2xhdGlvbj47XG5cbmV4cG9ydCBjb25zdCBNZXRyb3BvbGlzID0gKHthZGFwdGVycywgY2hpbGRyZW4sIGNvbmZpZyA9IHt9LCB0cmFuc2xhdGlvbnMgPSB7fX06IE1ldHJvcG9saXNQcm9wcykgPT4ge1xuICBjb25zdCBmbHV4ID0gdXNlRmx1eCgpO1xuICBjb25zdCByZXNvbHZlZENvbmZpZyA9IHVzZU1lbW88TWV0cm9wb2xpc0Vudmlyb25tZW50Q29uZmlndXJhdGlvbj4oKCkgPT4gcmVzb2x2ZUVudmlyb25tZW50Q29uZmlnKGNvbmZpZyksIFtjb25maWddKTtcbiAgY29uc3QgbWVyZ2VkQWRhcHRlcnMgPSB1c2VNZW1vKCgpID0+ICh7Li4ucmVzb2x2ZWRDb25maWcuYWRhcHRlcnMsIC4uLmFkYXB0ZXJzfSksIFtyZXNvbHZlZENvbmZpZy5hZGFwdGVycywgYWRhcHRlcnNdKTtcbiAgY29uc3QgcnVtT3B0aW9ucyA9IHVzZU1lbW8oKCkgPT4gKHtcbiAgICAuLi5yZXNvbHZlZENvbmZpZy5hcHA/LnJ1bSxcbiAgICBhbmFseXRpY3NJZDogcmVzb2x2ZWRDb25maWcuYXBwPy5ydW0/LmFuYWx5dGljc0lkIHx8IHJlc29sdmVkQ29uZmlnLmFwcD8ubmFtZVxuICB9KSwgW3Jlc29sdmVkQ29uZmlnLmFwcD8ubmFtZSwgcmVzb2x2ZWRDb25maWcuYXBwPy5ydW1dKTtcbiAgY29uc3Qgc2Vzc2lvblBlcnNvbmFJZCA9IFN0cmluZyh1c2VGbHV4U3RhdGUoJ3VzZXIuc2Vzc2lvbi5wZXJzb25hSWQnLCAnJykgfHwgJycpO1xuICBjb25zdCBzZXNzaW9uVG9rZW4gPSBTdHJpbmcodXNlRmx1eFN0YXRlKCd1c2VyLnNlc3Npb24udG9rZW4nLCAnJykgfHwgJycpO1xuICBjb25zdCBzZXNzaW9uSHlkcmF0ZWQgPSBCb29sZWFuKHVzZUZsdXhTdGF0ZSgnYXBwLnNlc3Npb25IeWRyYXRlZCcsIGZhbHNlKSk7XG4gIGNvbnN0IHNlc3Npb24gPSB1c2VGbHV4U3RhdGUoJ3VzZXIuc2Vzc2lvbicsIHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3Qgbm90aWZpY2F0aW9uTGlzdCA9IHVzZUZsdXhTdGF0ZSgnbm90aWZpY2F0aW9uLmxpc3QnLCBbXSkgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICBjb25zdCBjb252ZXJzYXRpb25NYXAgPSB1c2VGbHV4U3RhdGUoJ21lc3NhZ2UuY29udmVyc2F0aW9ucycsIHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+O1xuICBjb25zdCBtZXNzYWdlcyA9IHVzZU1lbW8oKCkgPT4gT2JqZWN0LnZhbHVlcyhjb252ZXJzYXRpb25NYXApLmZsYXQoKSwgW2NvbnZlcnNhdGlvbk1hcF0pO1xuXG4gIGNvbnN0IHdlYnNvY2tldHNSZWYgPSB1c2VSZWY8UmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlV2Vic29ja2V0QWN0aW9ucz4gfCBudWxsPihudWxsKTtcbiAgaWYoIXdlYnNvY2tldHNSZWYuY3VycmVudCkge1xuICAgIHdlYnNvY2tldHNSZWYuY3VycmVudCA9IGNyZWF0ZUFjdGlvbignd2Vic29ja2V0JywgZmx1eCkgYXMgUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlV2Vic29ja2V0QWN0aW9ucz47XG4gIH1cbiAgY29uc3Qgd2Vic29ja2V0cyA9IHdlYnNvY2tldHNSZWYuY3VycmVudDtcbiAgY29uc3QgYXdzUnVtID0gdXNlTWVtbyhcbiAgICAoKSA9PiBjcmVhdGVBY3Rpb24oJ2F3c1J1bScsIGZsdXgsIHJ1bU9wdGlvbnMpIGFzIEF3c1J1bUFjdGlvbnMsXG4gICAgW2ZsdXgsIHJ1bU9wdGlvbnNdXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZih0eXBlb2YgZ2xvYmFsVGhpcy53aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb25Hb3RoYW1BbmFseXRpY3MgPSAoZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBkZXRhaWwgPSAoZXZlbnQgYXMgQ3VzdG9tRXZlbnQ8QXdzUnVtVHJhY2tJbnB1dD4pLmRldGFpbDtcblxuICAgICAgaWYoZGV0YWlsICYmIHR5cGVvZiBkZXRhaWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGF3c1J1bS50cmFjayhkZXRhaWwpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBnbG9iYWxUaGlzLndpbmRvdy5hZGRFdmVudExpc3RlbmVyKEdPVEhBTV9BTkFMWVRJQ1NfRVZFTlQsIG9uR290aGFtQW5hbHl0aWNzKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBnbG9iYWxUaGlzLndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKEdPVEhBTV9BTkFMWVRJQ1NfRVZFTlQsIG9uR290aGFtQW5hbHl0aWNzKTtcbiAgICAgIHZvaWQgYXdzUnVtLmRlc3Ryb3koKTtcbiAgICB9O1xuICB9LCBbYXdzUnVtXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpbml0STE4bih0cmFuc2xhdGlvbnMpO1xuICB9LCBbdHJhbnNsYXRpb25zXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBsZXQgaXNBY3RpdmUgPSB0cnVlO1xuXG4gICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGZsdXguc2V0U3RhdGUoJ2FwcC5jb25maWcnLCByZXNvbHZlZENvbmZpZykpO1xuICAgICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGZsdXguc2V0U3RhdGUoJ2FwcC5zZXNzaW9uSHlkcmF0ZWQnLCBmYWxzZSkpO1xuICAgICAgYXdhaXQgaHlkcmF0ZVNlc3Npb25Gcm9tU3RvcmFnZShmbHV4KTtcblxuICAgICAgaWYoIWlzQWN0aXZlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgb25Jbml0KGZsdXgpO1xuXG4gICAgICBpZighaXNBY3RpdmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoZmx1eC5zZXRTdGF0ZSgnYXBwLnNlc3Npb25IeWRyYXRlZCcsIHRydWUpKTtcbiAgICB9KSgpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlzQWN0aXZlID0gZmFsc2U7XG4gICAgfTtcbiAgfSwgW2ZsdXgsIHJlc29sdmVkQ29uZmlnXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZighc2Vzc2lvbkh5ZHJhdGVkKSB7XG4gICAgICB3ZWJzb2NrZXRzLndzQ2xvc2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZihzZXNzaW9uVG9rZW4pIHtcbiAgICAgIHdlYnNvY2tldHMud3NJbml0KHNlc3Npb25Ub2tlbiwgc2Vzc2lvblBlcnNvbmFJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdlYnNvY2tldHMud3NDbG9zZSgpO1xuICAgIH1cbiAgfSwgW3Nlc3Npb25IeWRyYXRlZCwgc2Vzc2lvblBlcnNvbmFJZCwgc2Vzc2lvblRva2VuLCB3ZWJzb2NrZXRzXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgd2Vic29ja2V0cy53c0Nsb3NlKCk7XG4gICAgfTtcbiAgfSwgW3dlYnNvY2tldHNdKTtcblxuICBjb25zdCBpc0F1dGggPSB1c2VNZW1vKCgpID0+IHJlc29sdmVkQ29uZmlnLmlzQXV0aCB8fCAoKCkgPT4ge1xuICAgIGNvbnN0IHNlc3Npb25TdGF0ZSA9IGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicsIHt9KTtcbiAgICByZXR1cm4gISFzZXNzaW9uU3RhdGUudXNlckFjdGl2ZTtcbiAgfSksIFtyZXNvbHZlZENvbmZpZy5pc0F1dGgsIGZsdXhdKTtcblxuICByZXR1cm4gKFxuICAgIDxNZXRyb3BvbGlzQ29udGV4dC5Qcm92aWRlclxuICAgICAgdmFsdWU9e3tcbiAgICAgICAgYWRhcHRlcnM6IG1lcmdlZEFkYXB0ZXJzLFxuICAgICAgICBjb25maWc6IHJlc29sdmVkQ29uZmlnLFxuICAgICAgICBmbHV4LFxuICAgICAgICBpc0F1dGgsXG4gICAgICAgIG1lc3NhZ2VzLFxuICAgICAgICBub3RpZmljYXRpb25zOiBub3RpZmljYXRpb25MaXN0LFxuICAgICAgICBzZXNzaW9uLFxuICAgICAgICB1cGRhdGVNZXNzYWdlOiAoKSA9PiB7IH0sXG4gICAgICAgIHVwZGF0ZU5vdGlmaWNhdGlvbjogd2Vic29ja2V0cy5zZW5kTm90aWZpY2F0aW9uXG4gICAgICB9fT5cbiAgICAgIDxJMThuZXh0UHJvdmlkZXIgaTE4bj17aTE4bn0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvSTE4bmV4dFByb3ZpZGVyPlxuICAgIDwvTWV0cm9wb2xpc0NvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBNZXRyb3BvbGlzO1xuXG5leHBvcnQge3VzZVRyYW5zbGF0aW9ufSBmcm9tICdyZWFjdC1pMThuZXh0JztcbmV4cG9ydCAqIGZyb20gJy4vYWRhcHRlcnMvaW5kZXguanMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMvTWV0cm9wb2xpc0NvbnN0YW50cy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2dyYXBocWwvbWVzc2FnZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2dyYXBocWwvbm90aWZpY2F0aW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmVzL2luZGV4LmpzJztcbmV4cG9ydCB7XG4gIGNyZWF0ZUFjdGlvbixcbiAgY3JlYXRlQWN0aW9ucyxcbiAgY3JlYXRlQWxsQWN0aW9uc1xufSBmcm9tICcuL3V0aWxzL2FjdGlvbkZhY3RvcnkuanMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9hcHAuanMnO1xuZXhwb3J0IHtjcmVhdGVCYXNlQWN0aW9uc30gZnJvbSAnLi91dGlscy9iYXNlQWN0aW9uRmFjdG9yeS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzL2RhdGVVdGlscy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzL2ZpbGUuanMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9sb2NhdGlvbi5qcyc7XG5leHBvcnQge1xuICB1c2VDb250ZW50QWN0aW9ucyxcbiAgdXNlQXdzUnVtLFxuICB1c2VDcm1BY3Rpb25zLFxuICB1c2VFdmVudEFjdGlvbnMsXG4gIHVzZUdyb3VwQWN0aW9ucyxcbiAgdXNlSW1hZ2VBY3Rpb25zLFxuICB1c2VMb2NhdGlvbkFjdGlvbnMsXG4gIHVzZU1lc3NhZ2VBY3Rpb25zLCB1c2VNZXRyb3BvbGlzLFxuICB1c2VNZXRyb3BvbGlzQ29uZmlnLFxuICB1c2VNZXRyb3BvbGlzRmx1eCwgdXNlUG9zdEFjdGlvbnMsXG4gIHVzZVBlcnNvbmFBY3Rpb25zLFxuICB1c2VSZWFjdGlvbkFjdGlvbnMsXG4gIHVzZVJlc3RBY3Rpb25zLFxuICB1c2VUYWdBY3Rpb25zLFxuICB1c2VUcmFuc2xhdGlvbkFjdGlvbnMsXG4gIHVzZVVzZXJBY3Rpb25zLFxuICB1c2VXZWJzb2NrZXRBY3Rpb25zXG59IGZyb20gJy4vdXRpbHMvdXNlTWV0cm9wb2xpcy5qcyc7XG5leHBvcnQge3VzZUNvbnZlcnNhdGlvblR5cGluZ30gZnJvbSAnLi91dGlscy91c2VDb252ZXJzYXRpb25UeXBpbmcuanMnO1xuZXhwb3J0IHR5cGUge1xuICBDb252ZXJzYXRpb25UeXBpbmdPcHRpb25zLFxuICBVc2VDb252ZXJzYXRpb25UeXBpbmdPcHRpb25zXG59IGZyb20gJy4vdXRpbHMvdXNlQ29udmVyc2F0aW9uVHlwaW5nLmpzJztcbmV4cG9ydCB7XG4gIGNyZWF0ZVZhbGlkYXRvckZhY3RvcnksXG4gIGNyZWF0ZVZhbGlkYXRvck1hbmFnZXJcbn0gZnJvbSAnLi91dGlscy92YWxpZGF0b3JGYWN0b3J5LmpzJztcblxuZXhwb3J0IHR5cGUge1xuICBBY3Rpb25PcHRpb25zLFxuICBBY3Rpb25SZXR1cm5UeXBlLFxuICBBY3Rpb25UeXBlLFxuICBBY3Rpb25UeXBlc1xufSBmcm9tICcuL3V0aWxzL2FjdGlvbkZhY3RvcnkuanMnO1xuZXhwb3J0IHR5cGUge0Jhc2VBY3Rpb25PcHRpb25zfSBmcm9tICcuL3V0aWxzL2Jhc2VBY3Rpb25GYWN0b3J5LmpzJztcbmV4cG9ydCB0eXBlIHtCYXNlQWRhcHRlck9wdGlvbnN9IGZyb20gJy4vdXRpbHMvdmFsaWRhdG9yRmFjdG9yeS5qcyc7XG5cbmV4cG9ydCAqIGZyb20gJy4vYWN0aW9ucy9hcHBBY3Rpb25zL2FwcEFjdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9hY3Rpb25zL2F3c1J1bUFjdGlvbnMvYXdzUnVtQWN0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2FjdGlvbnMvY29ubmVjdGlvbkFjdGlvbnMvY29ubmVjdGlvbkFjdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9hY3Rpb25zL2NvbnZlcnNhdGlvbkFjdGlvbnMvY29udmVyc2F0aW9uQWN0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2FjdGlvbnMvY3JtQWN0aW9ucy9jcm1BY3Rpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYWN0aW9ucy9yZXN0QWN0aW9ucy9yZXN0QWN0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2FjdGlvbnMvdmlkZW9BY3Rpb25zL3ZpZGVvQWN0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cy9Db2xsZWN0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzL2luZGV4LmpzJztcbiJdLCJuYW1lcyI6WyJ1c2VGbHV4IiwidXNlRmx1eFN0YXRlIiwiaTE4biIsIkRhdGVUaW1lIiwidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVJlZiIsIkkxOG5leHRQcm92aWRlciIsInN5bmNQZXJzb25hVGFnc1RvU2Vzc2lvbiIsInN5bmNQZXJzb25hVG9TZXNzaW9uIiwicmVzb2x2ZUVudmlyb25tZW50Q29uZmlnIiwiYXBwIiwiZXZlbnRzIiwiaW1hZ2VzIiwibG9jYXRpb25zIiwibWVzc2FnZXMiLCJub3RpZmljYXRpb25zIiwiTk9USUZJQ0FUSU9OX0NPTlNUQU5UUyIsInBlcm1pc3Npb25zIiwiUEVSU09OQV9DT05TVEFOVFMiLCJwb3N0cyIsInN1YnNjcmlwdGlvbnMiLCJUQUdfQ09OU1RBTlRTIiwidGFncyIsIlVTRVJfQ09OU1RBTlRTIiwidXNlcnMiLCJ2aWRlbyIsIndlYnNvY2tldCIsInJlZnJlc2hTZXNzaW9uIiwiZ2V0Q29uZmlnRnJvbUZsdXgiLCJpbml0STE4biIsIk1ldHJvcG9saXNDb250ZXh0IiwiZ2V0UmVmcmVzaFdpbmRvd01pbnV0ZXMiLCJoeWRyYXRlU2Vzc2lvbkZyb21TdG9yYWdlIiwicGFyc2VKd3RFeHBpcnlNcyIsImNyZWF0ZUFjdGlvbiIsIkdPVEhBTV9BTkFMWVRJQ1NfRVZFTlQiLCJvbkluaXQiLCJmbHV4IiwiZ2V0U3RhdGUiLCJhZGRTdG9yZXMiLCJvbiIsIlNJR05fT1VUX1NVQ0NFU1MiLCJkaXNwYXRjaCIsInR5cGUiLCJDTEVBUl9JVEVNUyIsIkFERF9JVEVNX1NVQ0NFU1MiLCJwZXJzb25hIiwicGVyc29uYUlkIiwiQXJyYXkiLCJpc0FycmF5IiwiU3RyaW5nIiwiVVBEQVRFX0lURU1fU1VDQ0VTUyIsIkFERF9QRVJTT05BX1NVQ0NFU1MiLCJ0YWciLCJjdXJyZW50U2Vzc2lvbiIsImN1cnJlbnRUYWdzIiwibmV4dFRhZ0lkIiwidGFnSWQiLCJ0cmltIiwibWVyZ2VkVGFncyIsImZpbHRlciIsIml0ZW0iLCJzb3J0IiwibGVmdCIsInJpZ2h0IiwibmFtZSIsImxvY2FsZUNvbXBhcmUiLCJuZXh0U2Vzc2lvbiIsInNldFN0YXRlIiwiVVBEQVRFX1NFU1NJT05fU1VDQ0VTUyIsInVzZXIiLCJSRU1PVkVfUEVSU09OQV9TVUNDRVNTIiwibmV4dFRhZ3MiLCJQcm9taXNlIiwicmVzb2x2ZSIsInRva2VuIiwic2Vzc2lvbiIsImNvbmZpZyIsInRva2VuRXhwaXJlc0F0Iiwic2Vzc2lvbkxpZmV0aW1lTWludXRlcyIsIk1hdGgiLCJyb3VuZCIsIk51bWJlciIsImV4cGlyZXMiLCJpc3N1ZWQiLCJyZWZyZXNoV2luZG93TWludXRlcyIsInJlZnJlc2hFeHBpcmVzTWludXRlcyIsIm1heCIsIm1heE1pbnV0ZXMiLCJleHBpcmVzQXQiLCJEYXRlIiwibm93IiwibWludXRlc1VudGlsRXhwaXJ5IiwiZnJvbU1pbGxpcyIsImRpZmYiLCJsb2NhbCIsInRvT2JqZWN0IiwibWludXRlcyIsImFwcE11dGF0aW9uIiwiYXBwUXVlcnkiLCJwdWJsaWNNdXRhdGlvbiIsInB1YmxpY1F1ZXJ5IiwicnVtTXV0YXRpb24iLCJydW1SZXF1ZXN0IiwicmVzb2x2ZVJlc3RFbmRwb2ludCIsInJlc3RSZXF1ZXN0IiwidXBsb2FkSW1hZ2UiLCJNZXRyb3BvbGlzIiwiYWRhcHRlcnMiLCJjaGlsZHJlbiIsInRyYW5zbGF0aW9ucyIsInJlc29sdmVkQ29uZmlnIiwibWVyZ2VkQWRhcHRlcnMiLCJydW1PcHRpb25zIiwicnVtIiwiYW5hbHl0aWNzSWQiLCJzZXNzaW9uUGVyc29uYUlkIiwic2Vzc2lvblRva2VuIiwic2Vzc2lvbkh5ZHJhdGVkIiwiQm9vbGVhbiIsIm5vdGlmaWNhdGlvbkxpc3QiLCJjb252ZXJzYXRpb25NYXAiLCJPYmplY3QiLCJ2YWx1ZXMiLCJmbGF0Iiwid2Vic29ja2V0c1JlZiIsImN1cnJlbnQiLCJ3ZWJzb2NrZXRzIiwiYXdzUnVtIiwiZ2xvYmFsVGhpcyIsIndpbmRvdyIsIm9uR290aGFtQW5hbHl0aWNzIiwiZXZlbnQiLCJkZXRhaWwiLCJ0cmFjayIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZGVzdHJveSIsImlzQWN0aXZlIiwid3NDbG9zZSIsIndzSW5pdCIsImlzQXV0aCIsInNlc3Npb25TdGF0ZSIsInVzZXJBY3RpdmUiLCJQcm92aWRlciIsInZhbHVlIiwidXBkYXRlTWVzc2FnZSIsInVwZGF0ZU5vdGlmaWNhdGlvbiIsInNlbmROb3RpZmljYXRpb24iLCJ1c2VUcmFuc2xhdGlvbiIsImNyZWF0ZUFjdGlvbnMiLCJjcmVhdGVBbGxBY3Rpb25zIiwiY3JlYXRlQmFzZUFjdGlvbnMiLCJ1c2VDb250ZW50QWN0aW9ucyIsInVzZUF3c1J1bSIsInVzZUNybUFjdGlvbnMiLCJ1c2VFdmVudEFjdGlvbnMiLCJ1c2VHcm91cEFjdGlvbnMiLCJ1c2VJbWFnZUFjdGlvbnMiLCJ1c2VMb2NhdGlvbkFjdGlvbnMiLCJ1c2VNZXNzYWdlQWN0aW9ucyIsInVzZU1ldHJvcG9saXMiLCJ1c2VNZXRyb3BvbGlzQ29uZmlnIiwidXNlTWV0cm9wb2xpc0ZsdXgiLCJ1c2VQb3N0QWN0aW9ucyIsInVzZVBlcnNvbmFBY3Rpb25zIiwidXNlUmVhY3Rpb25BY3Rpb25zIiwidXNlUmVzdEFjdGlvbnMiLCJ1c2VUYWdBY3Rpb25zIiwidXNlVHJhbnNsYXRpb25BY3Rpb25zIiwidXNlVXNlckFjdGlvbnMiLCJ1c2VXZWJzb2NrZXRBY3Rpb25zIiwidXNlQ29udmVyc2F0aW9uVHlwaW5nIiwiY3JlYXRlVmFsaWRhdG9yRmFjdG9yeSIsImNyZWF0ZVZhbGlkYXRvck1hbmFnZXIiXSwibWFwcGluZ3MiOiI7QUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxPQUFPLEVBQUVDLFlBQVksUUFBTyw4QkFBOEI7QUFDbEUsT0FBT0MsVUFBVSxVQUFVO0FBQzNCLFNBQVFDLFFBQVEsUUFBTyxRQUFRO0FBQy9CLFNBQVFDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxNQUFNLFFBQU8sUUFBUTtBQUNqRCxTQUFRQyxlQUFlLFFBQU8sZ0JBQWdCO0FBSTlDLFNBQVFDLHdCQUF3QixFQUFFQyxvQkFBb0IsUUFBTyw2Q0FBNkM7QUFDMUcsU0FBUUMsd0JBQXdCLFFBQU8sb0JBQW9CO0FBQzNELFNBQ0VDLEdBQUcsRUFDSEMsTUFBTSxFQUNOQyxNQUFNLEVBQ05DLFNBQVMsRUFDVEMsUUFBUSxFQUNSQyxhQUFhLEVBQ2JDLHNCQUFzQixFQUN0QkMsV0FBVyxFQUNYQyxpQkFBaUIsRUFDakJDLEtBQUssRUFDTEMsYUFBYSxFQUNiQyxhQUFhLEVBQ2JDLElBQUksRUFDSkMsY0FB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
295
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge3VzZUZsdXgsIHVzZUZsdXhTdGF0ZX0gZnJvbSAnQG5sYWJzL2Fya2hhbWpzLXV0aWxzLXJlYWN0JztcbmltcG9ydCBpMThuIGZyb20gJ2kxOG5leHQnO1xuaW1wb3J0IHtEYXRlVGltZX0gZnJvbSAnbHV4b24nO1xuaW1wb3J0IHt1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtJMThuZXh0UHJvdmlkZXJ9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuXG5pbXBvcnQge2NyZWF0ZVdlYnNvY2tldEFjdGlvbnN9IGZyb20gJy4vYWN0aW9ucy93ZWJzb2NrZXRBY3Rpb25zL3dlYnNvY2tldEFjdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUge0F3c1J1bUFjdGlvbnMsIEF3c1J1bVRyYWNrSW5wdXR9IGZyb20gJy4vYWN0aW9ucy9hd3NSdW1BY3Rpb25zL2F3c1J1bUFjdGlvbnMuanMnO1xuaW1wb3J0IHtzeW5jUGVyc29uYVRhZ3NUb1Nlc3Npb24sIHN5bmNQZXJzb25hVG9TZXNzaW9ufSBmcm9tICcuL2FjdGlvbnMvcGVyc29uYUFjdGlvbnMvcGVyc29uYUFjdGlvbnMuanMnO1xuaW1wb3J0IHtyZXNvbHZlRW52aXJvbm1lbnRDb25maWd9IGZyb20gJy4vY29uZmlnL2luZGV4LmpzJztcbmltcG9ydCB7XG4gIGFwcCxcbiAgZXZlbnRzLFxuICBpbWFnZXMsXG4gIGxvY2F0aW9ucyxcbiAgbWVzc2FnZXMsXG4gIG5vdGlmaWNhdGlvbnMsXG4gIE5PVElGSUNBVElPTl9DT05TVEFOVFMsXG4gIHBlcm1pc3Npb25zLFxuICBQRVJTT05BX0NPTlNUQU5UUyxcbiAgcG9zdHMsXG4gIHN1YnNjcmlwdGlvbnMsXG4gIFRBR19DT05TVEFOVFMsXG4gIHRhZ3MsXG4gIFVTRVJfQ09OU1RBTlRTLFxuICB1c2VycyxcbiAgdmlkZW8sXG4gIHdlYnNvY2tldFxufSBmcm9tICcuL3N0b3Jlcy9pbmRleC5qcyc7XG5pbXBvcnQge3JlZnJlc2hTZXNzaW9ufSBmcm9tICcuL3V0aWxzL2FwaS5qcyc7XG5pbXBvcnQge2dldENvbmZpZ0Zyb21GbHV4fSBmcm9tICcuL3V0aWxzL2NvbmZpZ1V0aWxzLmpzJztcbmltcG9ydCB7aW5pdEkxOG59IGZyb20gJy4vdXRpbHMvaTE4bi5qcyc7XG5pbXBvcnQge01ldHJvcG9saXNDb250ZXh0fSBmcm9tICcuL3V0aWxzL01ldHJvcG9saXNDb250ZXh0LmpzJztcbmltcG9ydCB7Z2V0UmVmcmVzaFdpbmRvd01pbnV0ZXMsIGh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UsIHBhcnNlSnd0RXhwaXJ5TXN9IGZyb20gJy4vdXRpbHMvc2Vzc2lvbi5qcyc7XG5pbXBvcnQge2NyZWF0ZUFjdGlvbn0gZnJvbSAnLi91dGlscy9hY3Rpb25GYWN0b3J5LmpzJztcblxuaW1wb3J0IHR5cGUge0ZsdXhGcmFtZXdvcmt9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5pbXBvcnQgdHlwZSB7TWV0cm9wb2xpc0NvbmZpZ3VyYXRpb24sIE1ldHJvcG9saXNFbnZpcm9ubWVudENvbmZpZ3VyYXRpb259IGZyb20gJy4vY29uZmlnL2luZGV4LmpzJztcbmltcG9ydCB0eXBlIHtNZXRyb3BvbGlzQWRhcHRlcnN9IGZyb20gJy4vdXRpbHMvTWV0cm9wb2xpc0NvbnRleHQuanMnO1xuXG5leHBvcnQge01ldHJvcG9saXNDb250ZXh0fSBmcm9tICcuL3V0aWxzL01ldHJvcG9saXNDb250ZXh0LmpzJztcblxuZXhwb3J0IHR5cGUge01ldHJvcG9saXNDb25maWd1cmF0aW9ufSBmcm9tICcuL2NvbmZpZy9pbmRleC5qcyc7XG5leHBvcnQgdHlwZSB7TWV0cm9wb2xpc0FkYXB0ZXJzfSBmcm9tICcuL3V0aWxzL01ldHJvcG9saXNDb250ZXh0LmpzJztcblxuZXhwb3J0IGNvbnN0IEdPVEhBTV9BTkFMWVRJQ1NfRVZFTlQgPSAnbmxhYnM6Z290aGFtOmFuYWx5dGljcyc7XG5cbmV4cG9ydCBjb25zdCBvbkluaXQgPSBhc3luYyAoZmx1eDogRmx1eEZyYW1ld29yaykgPT4ge1xuICBpZighZmx1eC5nZXRTdGF0ZSgnYXBwLm1ldHJvcG9saXNJbml0aWFsaXplZCcpKSB7XG4gICAgZmx1eC5hZGRTdG9yZXMoW1xuICAgICAgYXBwLFxuICAgICAgZXZlbnRzLFxuICAgICAgaW1hZ2VzLFxuICAgICAgbG9jYXRpb25zLFxuICAgICAgbWVzc2FnZXMsXG4gICAgICBub3RpZmljYXRpb25zLFxuICAgICAgcGVybWlzc2lvbnMsXG4gICAgICBwb3N0cyxcbiAgICAgIHN1YnNjcmlwdGlvbnMsXG4gICAgICB0YWdzLFxuICAgICAgdXNlcnMsXG4gICAgICB2aWRlbyxcbiAgICAgIHdlYnNvY2tldFxuICAgIF0pO1xuICAgIGZsdXgub24oVVNFUl9DT05TVEFOVFMuU0lHTl9PVVRfU1VDQ0VTUywgKCkgPT4ge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7dHlwZTogTk9USUZJQ0FUSU9OX0NPTlNUQU5UUy5DTEVBUl9JVEVNU30pO1xuICAgIH0pO1xuICAgIGZsdXgub24oUEVSU09OQV9DT05TVEFOVFMuQUREX0lURU1fU1VDQ0VTUywgYXN5bmMgKHtwZXJzb25hID0ge319OiB7cGVyc29uYT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+fSkgPT4ge1xuICAgICAgc3luY1BlcnNvbmFUb1Nlc3Npb24oZmx1eCwgcGVyc29uYSk7XG5cbiAgICAgIGlmKHBlcnNvbmE/LnBlcnNvbmFJZCAmJiAhQXJyYXkuaXNBcnJheShwZXJzb25hPy50YWdzKSkge1xuICAgICAgICBhd2FpdCBzeW5jUGVyc29uYVRhZ3NUb1Nlc3Npb24oZmx1eCwgU3RyaW5nKHBlcnNvbmEucGVyc29uYUlkKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmbHV4Lm9uKFBFUlNPTkFfQ09OU1RBTlRTLlVQREFURV9JVEVNX1NVQ0NFU1MsIGFzeW5jICh7cGVyc29uYSA9IHt9fToge3BlcnNvbmE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0pID0+IHtcbiAgICAgIHN5bmNQZXJzb25hVG9TZXNzaW9uKGZsdXgsIHBlcnNvbmEpO1xuXG4gICAgICBpZihwZXJzb25hPy5wZXJzb25hSWQgJiYgIUFycmF5LmlzQXJyYXkocGVyc29uYT8udGFncykpIHtcbiAgICAgICAgYXdhaXQgc3luY1BlcnNvbmFUYWdzVG9TZXNzaW9uKGZsdXgsIFN0cmluZyhwZXJzb25hLnBlcnNvbmFJZCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZmx1eC5vbihUQUdfQ09OU1RBTlRTLkFERF9QRVJTT05BX1NVQ0NFU1MsICh7dGFnfToge3RhZz86IHtuYW1lPzogc3RyaW5nOyB0YWdJZD86IHN0cmluZ319KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50U2Vzc2lvbiA9IChmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24nLCB7fSkgfHwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYge1xuICAgICAgICB0YWdzPzogQXJyYXk8e25hbWU/OiBzdHJpbmc7IHRhZ0lkPzogc3RyaW5nfT47XG4gICAgICB9O1xuICAgICAgY29uc3QgY3VycmVudFRhZ3MgPSBBcnJheS5pc0FycmF5KGN1cnJlbnRTZXNzaW9uLnRhZ3MpID8gY3VycmVudFNlc3Npb24udGFncyA6IFtdO1xuICAgICAgY29uc3QgbmV4dFRhZ0lkID0gU3RyaW5nKHRhZz8udGFnSWQgfHwgJycpLnRyaW0oKTtcblxuICAgICAgaWYoIW5leHRUYWdJZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lcmdlZFRhZ3MgPSBbLi4uY3VycmVudFRhZ3MuZmlsdGVyKChpdGVtKSA9PiBTdHJpbmcoaXRlbT8udGFnSWQgfHwgJycpLnRyaW0oKSAhPT0gbmV4dFRhZ0lkKSwgdGFnIGFzIHtuYW1lPzogc3RyaW5nOyB0YWdJZD86IHN0cmluZ31dXG4gICAgICAgIC5zb3J0KChsZWZ0LCByaWdodCkgPT4gU3RyaW5nKGxlZnQ/Lm5hbWUgfHwgJycpLmxvY2FsZUNvbXBhcmUoU3RyaW5nKHJpZ2h0Py5uYW1lIHx8ICcnKSkpO1xuICAgICAgY29uc3QgbmV4dFNlc3Npb24gPSB7Li4uY3VycmVudFNlc3Npb24sIHRhZ3M6IG1lcmdlZFRhZ3N9O1xuXG4gICAgICB2b2lkIGZsdXguc2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicsIG5leHRTZXNzaW9uKTtcbiAgICAgIGZsdXguZGlzcGF0Y2goe3R5cGU6IFVTRVJfQ09OU1RBTlRTLlVQREFURV9TRVNTSU9OX1NVQ0NFU1MsIHVzZXI6IHt0YWdzOiBtZXJnZWRUYWdzfX0pO1xuICAgIH0pO1xuXG4gICAgZmx1eC5vbihUQUdfQ09OU1RBTlRTLlJFTU9WRV9QRVJTT05BX1NVQ0NFU1MsICh7dGFnfToge3RhZz86IHt0YWdJZD86IHN0cmluZ319KSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50U2Vzc2lvbiA9IChmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24nLCB7fSkgfHwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYge1xuICAgICAgICB0YWdzPzogQXJyYXk8e25hbWU/OiBzdHJpbmc7IHRhZ0lkPzogc3RyaW5nfT47XG4gICAgICB9O1xuICAgICAgY29uc3QgY3VycmVudFRhZ3MgPSBBcnJheS5pc0FycmF5KGN1cnJlbnRTZXNzaW9uLnRhZ3MpID8gY3VycmVudFNlc3Npb24udGFncyA6IFtdO1xuICAgICAgY29uc3QgbmV4dFRhZ0lkID0gU3RyaW5nKHRhZz8udGFnSWQgfHwgJycpLnRyaW0oKTtcblxuICAgICAgaWYoIW5leHRUYWdJZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRUYWdzID0gY3VycmVudFRhZ3MuZmlsdGVyKChpdGVtKSA9PiBTdHJpbmcoaXRlbT8udGFnSWQgfHwgJycpLnRyaW0oKSAhPT0gbmV4dFRhZ0lkKTtcbiAgICAgIGNvbnN0IG5leHRTZXNzaW9uID0gey4uLmN1cnJlbnRTZXNzaW9uLCB0YWdzOiBuZXh0VGFnc307XG5cbiAgICAgIHZvaWQgZmx1eC5zZXRTdGF0ZSgndXNlci5zZXNzaW9uJywgbmV4dFNlc3Npb24pO1xuICAgICAgZmx1eC5kaXNwYXRjaCh7dHlwZTogVVNFUl9DT05TVEFOVFMuVVBEQVRFX1NFU1NJT05fU1VDQ0VTUywgdXNlcjoge3RhZ3M6IG5leHRUYWdzfX0pO1xuICAgIH0pO1xuICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZShmbHV4LnNldFN0YXRlKCdhcHAubWV0cm9wb2xpc0luaXRpYWxpemVkJywgdHJ1ZSkpO1xuICB9XG5cbiAgY29uc3QgdG9rZW4gPSBTdHJpbmcoZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uLnRva2VuJykgfHwgJycpO1xuXG4gIGlmKHRva2VuKSB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IChmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24nLCB7fSkgfHwge30pIGFzIHtleHBpcmVzPzogbnVtYmVyOyBpc3N1ZWQ/OiBudW1iZXI7IHRva2VuPzogc3RyaW5nfTtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgICBjb25zdCB0b2tlbkV4cGlyZXNBdCA9IHBhcnNlSnd0RXhwaXJ5TXModG9rZW4pO1xuICAgIGNvbnN0IHNlc3Npb25MaWZldGltZU1pbnV0ZXMgPSBNYXRoLnJvdW5kKChOdW1iZXIoc2Vzc2lvbi5leHBpcmVzIHx8IDApIC0gTnVtYmVyKHNlc3Npb24uaXNzdWVkIHx8IDApKSAvICgxMDAwICogNjApKTtcbiAgICBjb25zdCByZWZyZXNoV2luZG93TWludXRlcyA9IGdldFJlZnJlc2hXaW5kb3dNaW51dGVzKFxuICAgICAgc2Vzc2lvbkxpZmV0aW1lTWludXRlcyB8fCAxNSxcbiAgICAgIGNvbmZpZy5hcHA/LnNlc3Npb24gfHwge31cbiAgICApO1xuICAgIGNvbnN0IHJlZnJlc2hFeHBpcmVzTWludXRlcyA9IE1hdGgubWF4KDEsIE51bWJlcihjb25maWcuYXBwPy5zZXNzaW9uPy5tYXhNaW51dGVzIHx8IHNlc3Npb25MaWZldGltZU1pbnV0ZXMgfHwgMTUpKTtcbiAgICBjb25zdCBleHBpcmVzQXQgPSBOdW1iZXIoc2Vzc2lvbi5leHBpcmVzIHx8IDApO1xuXG4gICAgaWYodG9rZW5FeHBpcmVzQXQgPiAwICYmIERhdGUubm93KCkgPj0gdG9rZW5FeHBpcmVzQXQpIHtcbiAgICAgIGF3YWl0IHJlZnJlc2hTZXNzaW9uKGZsdXgsIHRva2VuLCByZWZyZXNoRXhwaXJlc01pbnV0ZXMpO1xuICAgIH0gZWxzZSBpZighZXhwaXJlc0F0KSB7XG4gICAgICBhd2FpdCByZWZyZXNoU2Vzc2lvbihmbHV4LCB0b2tlbiwgcmVmcmVzaEV4cGlyZXNNaW51dGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbWludXRlc1VudGlsRXhwaXJ5ID0gTWF0aC5yb3VuZChEYXRlVGltZS5mcm9tTWlsbGlzKGV4cGlyZXNBdCkuZGlmZihEYXRlVGltZS5sb2NhbCgpLCAnbWludXRlcycpLnRvT2JqZWN0KCkubWludXRlcyB8fCAwKTtcblxuICAgICAgaWYobWludXRlc1VudGlsRXhwaXJ5IDw9IDAgfHwgbWludXRlc1VudGlsRXhwaXJ5IDw9IHJlZnJlc2hXaW5kb3dNaW51dGVzKSB7XG4gICAgICAgIGF3YWl0IHJlZnJlc2hTZXNzaW9uKGZsdXgsIHRva2VuIGFzIHN0cmluZywgcmVmcmVzaEV4cGlyZXNNaW51dGVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCAqIGZyb20gJy4vc3RvcmVzL2luZGV4LmpzJztcblxuZXhwb3J0IHtcbiAgYXBwTXV0YXRpb24sXG4gIGFwcFF1ZXJ5LFxuICBwdWJsaWNNdXRhdGlvbixcbiAgcHVibGljUXVlcnksXG4gIHJ1bU11dGF0aW9uLFxuICBydW1CZWFjb25SZXF1ZXN0LFxuICBydW1SZXF1ZXN0LFxuICByZWZyZXNoU2Vzc2lvbixcbiAgcmVzb2x2ZVJlc3RFbmRwb2ludCxcbiAgcmVzdFJlcXVlc3QsXG4gIHVwbG9hZEltYWdlLFxuICB0eXBlIEFwaVJlc3VsdHNUeXBlLFxuICB0eXBlIFJlYWt0b3JEYkNvbGxlY3Rpb24sXG4gIHR5cGUgUmVzdEFwaU9wdGlvbnMsXG4gIHR5cGUgUmVzdE1ldGhvZFxufSBmcm9tICcuL3V0aWxzL2FwaS5qcyc7XG5cbmV4cG9ydCB7cmVzb2x2ZUVudmlyb25tZW50Q29uZmlnfSBmcm9tICcuL2NvbmZpZy9pbmRleC5qcyc7XG5leHBvcnQge2dldENvbmZpZ0Zyb21GbHV4fSBmcm9tICcuL3V0aWxzL2NvbmZpZ1V0aWxzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBNZXRyb3BvbGlzUHJvcHMge1xuICByZWFkb25seSBhZGFwdGVycz86IE1ldHJvcG9saXNBZGFwdGVycztcbiAgcmVhZG9ubHkgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBSZWFjdC5SZWFjdEVsZW1lbnRbXTtcbiAgcmVhZG9ubHkgY29uZmlnPzogTWV0cm9wb2xpc0NvbmZpZ3VyYXRpb247XG4gIHJlYWRvbmx5IHRyYW5zbGF0aW9ucz86IFNpbXBsZVRyYW5zbGF0aW9ucyB8IENvbXBsZXhUcmFuc2xhdGlvbnM7XG59XG5cbmV4cG9ydCB0eXBlIFNpbXBsZVRyYW5zbGF0aW9ucyA9IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcGxleFRyYW5zbGF0aW9uIHtcbiAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9jYWxlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWVzcGFjZT86IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQ29tcGxleFRyYW5zbGF0aW9ucyA9IFJlY29yZDxzdHJpbmcsIENvbXBsZXhUcmFuc2xhdGlvbj47XG5cbmV4cG9ydCBjb25zdCBNZXRyb3BvbGlzID0gKHthZGFwdGVycywgY2hpbGRyZW4sIGNvbmZpZyA9IHt9LCB0cmFuc2xhdGlvbnMgPSB7fX06IE1ldHJvcG9saXNQcm9wcykgPT4ge1xuICBjb25zdCBmbHV4ID0gdXNlRmx1eCgpO1xuICBjb25zdCByZXNvbHZlZENvbmZpZyA9IHVzZU1lbW88TWV0cm9wb2xpc0Vudmlyb25tZW50Q29uZmlndXJhdGlvbj4oKCkgPT4gcmVzb2x2ZUVudmlyb25tZW50Q29uZmlnKGNvbmZpZyksIFtjb25maWddKTtcbiAgY29uc3QgbWVyZ2VkQWRhcHRlcnMgPSB1c2VNZW1vKCgpID0+ICh7Li4ucmVzb2x2ZWRDb25maWcuYWRhcHRlcnMsIC4uLmFkYXB0ZXJzfSksIFtyZXNvbHZlZENvbmZpZy5hZGFwdGVycywgYWRhcHRlcnNdKTtcbiAgY29uc3QgcnVtT3B0aW9ucyA9IHVzZU1lbW8oKCkgPT4gKHtcbiAgICAuLi5yZXNvbHZlZENvbmZpZy5hcHA/LnJ1bSxcbiAgICBhbmFseXRpY3NJZDogcmVzb2x2ZWRDb25maWcuYXBwPy5ydW0/LmFuYWx5dGljc0lkIHx8IHJlc29sdmVkQ29uZmlnLmFwcD8ubmFtZVxuICB9KSwgW3Jlc29sdmVkQ29uZmlnLmFwcD8ubmFtZSwgcmVzb2x2ZWRDb25maWcuYXBwPy5ydW1dKTtcbiAgY29uc3Qgc2Vzc2lvblBlcnNvbmFJZCA9IFN0cmluZyh1c2VGbHV4U3RhdGUoJ3VzZXIuc2Vzc2lvbi5wZXJzb25hSWQnLCAnJykgfHwgJycpO1xuICBjb25zdCBzZXNzaW9uVG9rZW4gPSBTdHJpbmcodXNlRmx1eFN0YXRlKCd1c2VyLnNlc3Npb24udG9rZW4nLCAnJykgfHwgJycpO1xuICBjb25zdCBzZXNzaW9uSHlkcmF0ZWQgPSBCb29sZWFuKHVzZUZsdXhTdGF0ZSgnYXBwLnNlc3Npb25IeWRyYXRlZCcsIGZhbHNlKSk7XG4gIGNvbnN0IHNlc3Npb24gPSB1c2VGbHV4U3RhdGUoJ3VzZXIuc2Vzc2lvbicsIHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3Qgbm90aWZpY2F0aW9uTGlzdCA9IHVzZUZsdXhTdGF0ZSgnbm90aWZpY2F0aW9uLmxpc3QnLCBbXSkgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICBjb25zdCBjb252ZXJzYXRpb25NYXAgPSB1c2VGbHV4U3RhdGUoJ21lc3NhZ2UuY29udmVyc2F0aW9ucycsIHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+O1xuICBjb25zdCBtZXNzYWdlcyA9IHVzZU1lbW8oKCkgPT4gT2JqZWN0LnZhbHVlcyhjb252ZXJzYXRpb25NYXApLmZsYXQoKSwgW2NvbnZlcnNhdGlvbk1hcF0pO1xuXG4gIGNvbnN0IHdlYnNvY2tldHNSZWYgPSB1c2VSZWY8UmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlV2Vic29ja2V0QWN0aW9ucz4gfCBudWxsPihudWxsKTtcbiAgaWYoIXdlYnNvY2tldHNSZWYuY3VycmVudCkge1xuICAgIHdlYnNvY2tldHNSZWYuY3VycmVudCA9IGNyZWF0ZUFjdGlvbignd2Vic29ja2V0JywgZmx1eCkgYXMgUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlV2Vic29ja2V0QWN0aW9ucz47XG4gIH1cbiAgY29uc3Qgd2Vic29ja2V0cyA9IHdlYnNvY2tldHNSZWYuY3VycmVudDtcbiAgY29uc3QgYXdzUnVtID0gdXNlTWVtbyhcbiAgICAoKSA9PiBjcmVhdGVBY3Rpb24oJ2F3c1J1bScsIGZsdXgsIHJ1bU9wdGlvbnMpIGFzIEF3c1J1bUFjdGlvbnMsXG4gICAgW2ZsdXgsIHJ1bU9wdGlvbnNdXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZih0eXBlb2YgZ2xvYmFsVGhpcy53aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb25Hb3RoYW1BbmFseXRpY3MgPSAoZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBkZXRhaWwgPSAoZXZlbnQgYXMgQ3VzdG9tRXZlbnQ8QXdzUnVtVHJhY2tJbnB1dD4pLmRldGFpbDtcblxuICAgICAgaWYoZGV0YWlsICYmIHR5cGVvZiBkZXRhaWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGF3c1J1bS50cmFjayhkZXRhaWwpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgZmx1c2hUZXJtaW5hbEV2ZW50cyA9ICgpOiB2b2lkID0+IHtcbiAgICAgIHZvaWQgYXdzUnVtLmZsdXNoKHt1c2VCZWFjb246IHRydWV9KTtcbiAgICB9O1xuICAgIGNvbnN0IG9uVmlzaWJpbGl0eUNoYW5nZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmKGdsb2JhbFRoaXMuZG9jdW1lbnQ/LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ2hpZGRlbicpIHtcbiAgICAgICAgZmx1c2hUZXJtaW5hbEV2ZW50cygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBnbG9iYWxUaGlzLndpbmRvdy5hZGRFdmVudExpc3RlbmVyKEdPVEhBTV9BTkFMWVRJQ1NfRVZFTlQsIG9uR290aGFtQW5hbHl0aWNzKTtcbiAgICBnbG9iYWxUaGlzLndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwYWdlaGlkZScsIGZsdXNoVGVybWluYWxFdmVudHMpO1xuICAgIGdsb2JhbFRoaXMuZG9jdW1lbnQ/LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBvblZpc2liaWxpdHlDaGFuZ2UpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGdsb2JhbFRoaXMud2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoR09USEFNX0FOQUxZVElDU19FVkVOVCwgb25Hb3RoYW1BbmFseXRpY3MpO1xuICAgICAgZ2xvYmFsVGhpcy53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncGFnZWhpZGUnLCBmbHVzaFRlcm1pbmFsRXZlbnRzKTtcbiAgICAgIGdsb2JhbFRoaXMuZG9jdW1lbnQ/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBvblZpc2liaWxpdHlDaGFuZ2UpO1xuICAgICAgdm9pZCBhd3NSdW0uZGVzdHJveSgpO1xuICAgIH07XG4gIH0sIFthd3NSdW1dKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGluaXRJMThuKHRyYW5zbGF0aW9ucyk7XG4gIH0sIFt0cmFuc2xhdGlvbnNdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGxldCBpc0FjdGl2ZSA9IHRydWU7XG5cbiAgICB2b2lkIChhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoZmx1eC5zZXRTdGF0ZSgnYXBwLmNvbmZpZycsIHJlc29sdmVkQ29uZmlnKSk7XG4gICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoZmx1eC5zZXRTdGF0ZSgnYXBwLnNlc3Npb25IeWRyYXRlZCcsIGZhbHNlKSk7XG4gICAgICBhd2FpdCBoeWRyYXRlU2Vzc2lvbkZyb21TdG9yYWdlKGZsdXgpO1xuXG4gICAgICBpZighaXNBY3RpdmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBvbkluaXQoZmx1eCk7XG5cbiAgICAgIGlmKCFpc0FjdGl2ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZShmbHV4LnNldFN0YXRlKCdhcHAuc2Vzc2lvbkh5ZHJhdGVkJywgdHJ1ZSkpO1xuICAgIH0pKCk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaXNBY3RpdmUgPSBmYWxzZTtcbiAgICB9O1xuICB9LCBbZmx1eCwgcmVzb2x2ZWRDb25maWddKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmKCFzZXNzaW9uSHlkcmF0ZWQpIHtcbiAgICAgIHdlYnNvY2tldHMud3NDbG9zZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmKHNlc3Npb25Ub2tlbikge1xuICAgICAgd2Vic29ja2V0cy53c0luaXQoc2Vzc2lvblRva2VuLCBzZXNzaW9uUGVyc29uYUlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2Vic29ja2V0cy53c0Nsb3NlKCk7XG4gICAgfVxuICB9LCBbc2Vzc2lvbkh5ZHJhdGVkLCBzZXNzaW9uUGVyc29uYUlkLCBzZXNzaW9uVG9rZW4sIHdlYnNvY2tldHNdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3ZWJzb2NrZXRzLndzQ2xvc2UoKTtcbiAgICB9O1xuICB9LCBbd2Vic29ja2V0c10pO1xuXG4gIGNvbnN0IGlzQXV0aCA9IHVzZU1lbW8oKCkgPT4gcmVzb2x2ZWRDb25maWcuaXNBdXRoIHx8ICgoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvblN0YXRlID0gZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uJywge30pO1xuICAgIHJldHVybiAhIXNlc3Npb25TdGF0ZS51c2VyQWN0aXZlO1xuICB9KSwgW3Jlc29sdmVkQ29uZmlnLmlzQXV0aCwgZmx1eF0pO1xuXG4gIHJldHVybiAoXG4gICAgPE1ldHJvcG9saXNDb250ZXh0LlByb3ZpZGVyXG4gICAgICB2YWx1ZT17e1xuICAgICAgICBhZGFwdGVyczogbWVyZ2VkQWRhcHRlcnMsXG4gICAgICAgIGNvbmZpZzogcmVzb2x2ZWRDb25maWcsXG4gICAgICAgIGZsdXgsXG4gICAgICAgIGlzQXV0aCxcbiAgICAgICAgbWVzc2FnZXMsXG4gICAgICAgIG5vdGlmaWNhdGlvbnM6IG5vdGlmaWNhdGlvbkxpc3QsXG4gICAgICAgIHNlc3Npb24sXG4gICAgICAgIHVwZGF0ZU1lc3NhZ2U6ICgpID0+IHsgfSxcbiAgICAgICAgdXBkYXRlTm90aWZpY2F0aW9uOiB3ZWJzb2NrZXRzLnNlbmROb3RpZmljYXRpb25cbiAgICAgIH19PlxuICAgICAgPEkxOG5leHRQcm92aWRlciBpMThuPXtpMThufT5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9JMThuZXh0UHJvdmlkZXI+XG4gICAgPC9NZXRyb3BvbGlzQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE1ldHJvcG9saXM7XG5cbmV4cG9ydCB7dXNlVHJhbnNsYXRpb259IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuZXhwb3J0ICogZnJvbSAnLi9hZGFwdGVycy9pbmRleC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cy9NZXRyb3BvbGlzQ29uc3RhbnRzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZ3JhcGhxbC9tZXNzYWdlLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZ3JhcGhxbC9ub3RpZmljYXRpb24uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdG9yZXMvaW5kZXguanMnO1xuZXhwb3J0IHtcbiAgY3JlYXRlQWN0aW9uLFxuICBjcmVhdGVBY3Rpb25zLFxuICBjcmVhdGVBbGxBY3Rpb25zXG59IGZyb20gJy4vdXRpbHMvYWN0aW9uRmFjdG9yeS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzL2FwcC5qcyc7XG5leHBvcnQge2NyZWF0ZUJhc2VBY3Rpb25zfSBmcm9tICcuL3V0aWxzL2Jhc2VBY3Rpb25GYWN0b3J5LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvZGF0ZVV0aWxzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMvZmlsZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzL2xvY2F0aW9uLmpzJztcbmV4cG9ydCB7XG4gIHVzZUNvbnRlbnRBY3Rpb25zLFxuICB1c2VBd3NSdW0sXG4gIHVzZUNybUFjdGlvbnMsXG4gIHVzZUV2ZW50QWN0aW9ucyxcbiAgdXNlR3JvdXBBY3Rpb25zLFxuICB1c2VJbWFnZUFjdGlvbnMsXG4gIHVzZUxvY2F0aW9uQWN0aW9ucyxcbiAgdXNlTWVzc2FnZUFjdGlvbnMsIHVzZU1ldHJvcG9saXMsXG4gIHVzZU1ldHJvcG9saXNDb25maWcsXG4gIHVzZU1ldHJvcG9saXNGbHV4LCB1c2VQb3N0QWN0aW9ucyxcbiAgdXNlUGVyc29uYUFjdGlvbnMsXG4gIHVzZVJlYWN0aW9uQWN0aW9ucyxcbiAgdXNlUmVzdEFjdGlvbnMsXG4gIHVzZVRhZ0FjdGlvbnMsXG4gIHVzZVRyYW5zbGF0aW9uQWN0aW9ucyxcbiAgdXNlVXNlckFjdGlvbnMsXG4gIHVzZVdlYnNvY2tldEFjdGlvbnNcbn0gZnJvbSAnLi91dGlscy91c2VNZXRyb3BvbGlzLmpzJztcbmV4cG9ydCB7dXNlQ29udmVyc2F0aW9uVHlwaW5nfSBmcm9tICcuL3V0aWxzL3VzZUNvbnZlcnNhdGlvblR5cGluZy5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIENvbnZlcnNhdGlvblR5cGluZ09wdGlvbnMsXG4gIFVzZUNvbnZlcnNhdGlvblR5cGluZ09wdGlvbnNcbn0gZnJvbSAnLi91dGlscy91c2VDb252ZXJzYXRpb25UeXBpbmcuanMnO1xuZXhwb3J0IHtcbiAgY3JlYXRlVmFsaWRhdG9yRmFjdG9yeSxcbiAgY3JlYXRlVmFsaWRhdG9yTWFuYWdlclxufSBmcm9tICcuL3V0aWxzL3ZhbGlkYXRvckZhY3RvcnkuanMnO1xuXG5leHBvcnQgdHlwZSB7XG4gIEFjdGlvbk9wdGlvbnMsXG4gIEFjdGlvblJldHVyblR5cGUsXG4gIEFjdGlvblR5cGUsXG4gIEFjdGlvblR5cGVzXG59IGZyb20gJy4vdXRpbHMvYWN0aW9uRmFjdG9yeS5qcyc7XG5leHBvcnQgdHlwZSB7QmFzZUFjdGlvbk9wdGlvbnN9IGZyb20gJy4vdXRpbHMvYmFzZUFjdGlvbkZhY3RvcnkuanMnO1xuZXhwb3J0IHR5cGUge0Jhc2VBZGFwdGVyT3B0aW9uc30gZnJvbSAnLi91dGlscy92YWxpZGF0b3JGYWN0b3J5LmpzJztcblxuZXhwb3J0ICogZnJvbSAnLi9hY3Rpb25zL2FwcEFjdGlvbnMvYXBwQWN0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2FjdGlvbnMvYXdzUnVtQWN0aW9ucy9hd3NSdW1BY3Rpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYWN0aW9ucy9jb25uZWN0aW9uQWN0aW9ucy9jb25uZWN0aW9uQWN0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2FjdGlvbnMvY29udmVyc2F0aW9uQWN0aW9ucy9jb252ZXJzYXRpb25BY3Rpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYWN0aW9ucy9jcm1BY3Rpb25zL2NybUFjdGlvbnMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9hY3Rpb25zL3Jlc3RBY3Rpb25zL3Jlc3RBY3Rpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vYWN0aW9ucy92aWRlb0FjdGlvbnMvdmlkZW9BY3Rpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzL0NvbGxlY3Rpb25zLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMvaW5kZXguanMnO1xuIl0sIm5hbWVzIjpbInVzZUZsdXgiLCJ1c2VGbHV4U3RhdGUiLCJpMThuIiwiRGF0ZVRpbWUiLCJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwiSTE4bmV4dFByb3ZpZGVyIiwic3luY1BlcnNvbmFUYWdzVG9TZXNzaW9uIiwic3luY1BlcnNvbmFUb1Nlc3Npb24iLCJyZXNvbHZlRW52aXJvbm1lbnRDb25maWciLCJhcHAiLCJldmVudHMiLCJpbWFnZXMiLCJsb2NhdGlvbnMiLCJtZXNzYWdlcyIsIm5vdGlmaWNhdGlvbnMiLCJOT1RJRklDQVRJT05fQ09OU1RBTlRTIiwicGVybWlzc2lvbnMiLCJQRVJTT05BX0NPTlNUQU5UUyIsInBvc3RzIiwic3Vic2NyaXB0aW9ucyIsIlRBR19DT05TVEFOVFMiLCJ0YWdzIiwiVVNFUl9DT05TVEFOVFMiLCJ1c2VycyIsInZpZGVvIiwid2Vic29ja2V0IiwicmVmcmVzaFNlc3Npb24iLCJnZXRDb25maWdGcm9tRmx1eCIsImluaXRJMThuIiwiTWV0cm9wb2xpc0NvbnRleHQiLCJnZXRSZWZyZXNoV2luZG93TWludXRlcyIsImh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UiLCJwYXJzZUp3dEV4cGlyeU1zIiwiY3JlYXRlQWN0aW9uIiwiR09USEFNX0FOQUxZVElDU19FVkVOVCIsIm9uSW5pdCIsImZsdXgiLCJnZXRTdGF0ZSIsImFkZFN0b3JlcyIsIm9uIiwiU0lHTl9PVVRfU1VDQ0VTUyIsImRpc3BhdGNoIiwidHlwZSIsIkNMRUFSX0lURU1TIiwiQUREX0lURU1fU1VDQ0VTUyIsInBlcnNvbmEiLCJwZXJzb25hSWQiLCJBcnJheSIsImlzQXJyYXkiLCJTdHJpbmciLCJVUERBVEVfSVRFTV9TVUNDRVNTIiwiQUREX1BFUlNPTkFfU1VDQ0VTUyIsInRhZyIsImN1cnJlbnRTZXNzaW9uIiwiY3VycmVudFRhZ3MiLCJuZXh0VGFnSWQiLCJ0YWdJZCIsInRyaW0iLCJtZXJnZWRUYWdzIiwiZmlsdGVyIiwiaXRlbSIsInNvcnQiLCJsZWZ0IiwicmlnaHQiLCJuYW1lIiwibG9jYWxlQ29tcGFyZSIsIm5leHRTZXNzaW9uIiwic2V0U3RhdGUiLCJVUERBVEVfU0VTU0lPTl9TVUNDRVNTIiwidXNlciIsIlJFTU9WRV9QRVJTT05BX1NVQ0NFU1MiLCJuZXh0VGFncyIsIlByb21pc2UiLCJyZXNvbHZlIiwidG9rZW4iLCJzZXNzaW9uIiwiY29uZmlnIiwidG9rZW5FeHBpcmVzQXQiLCJzZXNzaW9uTGlmZXRpbWVNaW51dGVzIiwiTWF0aCIsInJvdW5kIiwiTnVtYmVyIiwiZXhwaXJlcyIsImlzc3VlZCIsInJlZnJlc2hXaW5kb3dNaW51dGVzIiwicmVmcmVzaEV4cGlyZXNNaW51dGVzIiwibWF4IiwibWF4TWludXRlcyIsImV4cGlyZXNBdCIsIkRhdGUiLCJub3ciLCJtaW51dGVzVW50aWxFeHBpcnkiLCJmcm9tTWlsbGlzIiwiZGlmZiIsImxvY2FsIiwidG9PYmplY3QiLCJtaW51dGVzIiwiYXBwTXV0YXRpb24iLCJhcHBRdWVyeSIsInB1YmxpY011dGF0aW9uIiwicHVibGljUXVlcnkiLCJydW1NdXRhdGlvbiIsInJ1bUJlYWNvblJlcXVlc3QiLCJydW1SZXF1ZXN0IiwicmVzb2x2ZVJlc3RFbmRwb2ludCIsInJlc3RSZXF1ZXN0IiwidXBsb2FkSW1hZ2UiLCJNZXRyb3BvbGlzIiwiYWRhcHRlcnMiLCJjaGlsZHJlbiIsInRyYW5zbGF0aW9ucyIsInJlc29sdmVkQ29uZmlnIiwibWVyZ2VkQWRhcHRlcnMiLCJydW1PcHRpb25zIiwicnVtIiwiYW5hbHl0aWNzSWQiLCJzZXNzaW9uUGVyc29uYUlkIiwic2Vzc2lvblRva2VuIiwic2Vzc2lvbkh5ZHJhdGVkIiwiQm9vbGVhbiIsIm5vdGlmaWNhdGlvbkxpc3QiLCJjb252ZXJzYXRpb25NYXAiLCJPYmplY3QiLCJ2YWx1ZXMiLCJmbGF0Iiwid2Vic29ja2V0c1JlZiIsImN1cnJlbnQiLCJ3ZWJzb2NrZXRzIiwiYXdzUnVtIiwiZ2xvYmFsVGhpcyIsIndpbmRvdyIsIm9uR290aGFtQW5hbHl0aWNzIiwiZXZlbnQiLCJkZXRhaWwiLCJ0cmFjayIsImZsdXNoVGVybWluYWxFdmVudHMiLCJmbHVzaCIsInVzZUJlYWNvbiIsIm9uVmlzaWJpbGl0eUNoYW5nZSIsImRvY3VtZW50IiwidmlzaWJpbGl0eVN0YXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkZXN0cm95IiwiaXNBY3RpdmUiLCJ3c0Nsb3NlIiwid3NJbml0IiwiaXNBdXRoIiwic2Vzc2lvblN0YXRlIiwidXNlckFjdGl2ZSIsIlByb3ZpZGVyIiwidmFsdWUiLCJ1cGRhdGVNZXNzYWdlIiwidXBkYXRlTm90aWZpY2F0aW9uIiwic2VuZE5vdGlmaWNhdGlvbiIsInVzZVRyYW5zbGF0aW9uIiwiY3JlYXRlQWN0aW9ucyIsImNyZWF0ZUFsbEFjdGlvbnMiLCJjcmVhdGVCYXNlQWN0aW9ucyIsInVzZUNvbnRlbnRBY3Rpb25zIiwidXNlQXdzUnVtIiwidXNlQ3JtQWN0aW9ucyIsInVzZUV2ZW50QWN0aW9ucyIsInVzZUdyb3VwQWN0aW9ucyIsInVzZUltYWdlQWN0aW9ucyIsInVzZUxvY2F0aW9uQWN0aW9ucyIsInVzZU1lc3NhZ2VBY3Rpb25zIiwidXNlTWV0cm9wb2xpcyIsInVzZU1ldHJvcG9saXNDb25maWciLCJ1c2VNZXRyb3BvbGlzRmx1eCIsInVzZVBvc3RBY3Rpb25zIiwidXNlUGVyc29uYUFjdGlvbnMiLCJ1c2VSZWFjdGlvbkFjdGlvbnMiLCJ1c2VSZXN0QWN0aW9ucyIsInVzZVRhZ0FjdGlvbnMiLCJ1c2VUcmFuc2xhdGlvbkFjdGlvbnMiLCJ1c2VVc2VyQWN0aW9ucyIsInVzZVdlYnNvY2tldEFjdGlvbnMiLCJ1c2VDb252ZXJzYXRpb25UeXBpbmciLCJjcmVhdGVWYWxpZGF0b3JGYWN0b3J5IiwiY3JlYXRlVmFsaWRhdG9yTWFuYWdlciJdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLE9BQU8sRUFBRUMsWUFBWSxRQUFPLDhCQUE4QjtBQUNsRSxPQUFPQyxVQUFVLFVBQVU7QUFDM0IsU0FBUUMsUUFBUSxRQUFPLFFBQVE7QUFDL0IsU0FBUUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sUUFBTyxRQUFRO0FBQ2pELFNBQVFDLGVBQWUsUUFBTyxnQkFBZ0I7QUFJOUMsU0FBUUMsd0JBQXdCLEVBQUVDLG9CQUFvQixRQUFPLDZDQUE2QztBQUMxRyxTQUFRQyx3QkFBd0IsUUFBTyxvQkFBb0I7QUFDM0QsU0FDRUMsR0FBRyxFQUNIQyxNQUFNLEVBQ05DLE1BQU0sRUFDTkMsU0FBUyxFQUNUQyxRQUFRLEVBQ1JDLGFBQWEsRUFDYkMsc0JBQXNCLEVBQ3RCQyxXQUFXLEVBQ1hDLGlCQUFpQixFQUNqQkMsS0FBSyxFQUNMQyxhQUFhLEVBQ2JDLGFBQWEsRUFDYkMsSUFBSSxFQUNKQyxjQUFjLEVBQ2RDLEtBQUssRUFDTEMsS0FBSyxFQUNMQyxTQUFTLFFBQ0osb0JBQW9CO0FBQzNCLFNBQVFDLGNBQWMsUUFBTyxpQkFBaUI7QUFDOUMsU0FBUUMsaUJBQWlCLFFBQU8seUJBQXlCO0FBQ3pELFNBQVFDLFFBQVEsUUFBTyxrQkFBa0I7QUFDekMsU0FBUUMsaUJBQWlCLFFBQU8sK0JBQStCO0FBQy9ELFNBQVFDLHVCQUF1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
@@ -53,5 +53,12 @@ export declare const publicQuery: <T>(flux: FluxFramework, name: string, dataTyp
53
53
  export declare const publicMutation: <T>(flux: FluxFramework, name: string, dataType: ReaktorDbCollection, queryVariables: ApiQueryVariables, returnProperties: string[], options?: ApiOptions) => Promise<T>;
54
54
  export declare const rumMutation: <T>(flux: FluxFramework, name: string, dataType: ReaktorDbCollection, queryVariables: ApiQueryVariables, returnProperties: string[], options?: ApiOptions) => Promise<T>;
55
55
  export declare const rumRequest: <T>(flux: FluxFramework, batch: Record<string, unknown>, options?: RestApiOptions) => Promise<T>;
56
+ /**
57
+ * Attempts terminal RUM delivery with the Beacon API.
58
+ *
59
+ * Returns false when beacon delivery is unavailable or declined so callers
60
+ * can fall back to the standard request transport.
61
+ */
62
+ export declare const rumBeaconRequest: (flux: FluxFramework, batch: Record<string, unknown>) => boolean;
56
63
  export declare const uploadImage: (flux: FluxFramework, image: FormData | Record<string, unknown>, options?: HunterOptionsType) => Promise<ApiResultsType>;
57
64
  export declare const refreshSession: (flux: FluxFramework, token?: string, expires?: number) => Promise<FluxAction | null>;
package/lib/utils/api.js CHANGED
@@ -256,6 +256,23 @@ export const rumRequest = (flux, batch, options = {})=>{
256
256
  authenticate: false
257
257
  });
258
258
  };
259
+ /**
260
+ * Attempts terminal RUM delivery with the Beacon API.
261
+ *
262
+ * Returns false when beacon delivery is unavailable or declined so callers
263
+ * can fall back to the standard request transport.
264
+ */ export const rumBeaconRequest = (flux, batch)=>{
265
+ const config = getConfigFromFlux(flux);
266
+ const rumUrl = config.app?.api?.endpoints?.rum || config.app?.api?.rum || '';
267
+ if (!rumUrl || typeof globalThis.navigator?.sendBeacon !== 'function') {
268
+ return false;
269
+ }
270
+ try {
271
+ return globalThis.navigator.sendBeacon(rumUrl, JSON.stringify(batch));
272
+ } catch {
273
+ return false;
274
+ }
275
+ };
259
276
  export const uploadImage = (flux, image, options = {})=>{
260
277
  const config = getConfigFromFlux(flux);
261
278
  const uploadImageUrl = config.app?.api?.uploadImage || '';
@@ -362,4 +379,4 @@ export const refreshSession = async (flux, token, expires)=>{
362
379
  }
363
380
  };
364
381
 
365
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvYXBpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXBpRXJyb3IsIGFqYXgsIGRlbCwgZ2V0LCBncmFwaHFsUXVlcnksIHBvc3QsIHB1dH0gZnJvbSAnQG5sYWJzL3JpcC1odW50ZXInO1xuaW1wb3J0IHtjYW1lbENhc2UsIGlzRW1wdHksIHVwcGVyRmlyc3R9IGZyb20gJ0BubGFicy91dGlscyc7XG5cbmltcG9ydCB7QVBQX0NPTlNUQU5UU30gZnJvbSAnLi4vc3RvcmVzL2FwcFN0b3JlLmpzJztcbmltcG9ydCB7VVNFUl9DT05TVEFOVFN9IGZyb20gJy4uL3N0b3Jlcy91c2VyU3RvcmUuanMnO1xuaW1wb3J0IHtnZXRDb25maWdGcm9tRmx1eH0gZnJvbSAnLi9jb25maWdVdGlscy5qcyc7XG5pbXBvcnQge2NsZWFyUGVyc2lzdGVkU2Vzc2lvbiwgZ2V0UmVmcmVzaFdpbmRvd01pbnV0ZXMsIGh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UsIHBhcnNlSnd0RXhwaXJ5TXMsIHN0b3JlU2Vzc2lvbn0gZnJvbSAnLi9zZXNzaW9uLmpzJztcblxuaW1wb3J0IHR5cGUge0ZsdXhBY3Rpb24sIEZsdXhGcmFtZXdvcmt9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5pbXBvcnQgdHlwZSB7SHVudGVyT3B0aW9uc1R5cGUsIEh1bnRlclF1ZXJ5VHlwZX0gZnJvbSAnQG5sYWJzL3JpcC1odW50ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwaU9wdGlvbnMge1xuICByZWFkb25seSBvblN1Y2Nlc3M/OiAoZGF0YTogYW55KSA9PiBQcm9taXNlPEZsdXhBY3Rpb24+O1xuICByZWFkb25seSB2YXJpYWJsZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuZXhwb3J0IHR5cGUgUmVzdE1ldGhvZCA9ICdERUxFVEUnIHwgJ0dFVCcgfCAnUEFUQ0gnIHwgJ1BPU1QnIHwgJ1BVVCcgfCAoc3RyaW5nICYge30pO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RBcGlPcHRpb25zIGV4dGVuZHMgSHVudGVyT3B0aW9uc1R5cGUge1xuICByZWFkb25seSBhdXRoZW50aWNhdGU/OiBib29sZWFuO1xuICByZWFkb25seSBvblN1Y2Nlc3M/OiAoZGF0YTogYW55KSA9PiBhbnk7XG59XG5cbmV4cG9ydCB0eXBlIFJlYWt0b3JEYkNvbGxlY3Rpb24gPVxuICAnYXBwcycgfFxuICAnY29ubmVjdGlvbnMnIHxcbiAgJ2NvbnRlbnRzJyB8XG4gICdjb252ZXJzYXRpb25zJyB8XG4gICdjcm0nIHxcbiAgJ2V2ZW50cycgfFxuICAnZmlsZXMnIHxcbiAgJ2dyb3VwcycgfFxuICAnaW1hZ2VzJyB8XG4gICdsb2NhdGlvbnMnIHxcbiAgJ21lc3NhZ2VzJyB8XG4gICdub3RpZmljYXRpb25zJyB8XG4gICdwYXltZW50cycgfFxuICAncGVybWlzc2lvbnMnIHxcbiAgJ3Bvc3RzJyB8XG4gICdwZXJzb25hcycgfFxuICAncmVhY3Rpb25zJyB8XG4gICdydW0nIHxcbiAgJ3N1YnNjcmlwdGlvbnMnIHxcbiAgJ3RhZ3MnIHxcbiAgJ3RyYW5zbGF0aW9ucycgfFxuICAndXNlcnMnIHxcbiAgJ3ZpZGVvcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpUXVlcnlWYXJpYWJsZVR5cGUge1xuICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZhbHVlOiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwaVF1ZXJ5VmFyaWFibGVzIHtcbiAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogQXBpUXVlcnlWYXJpYWJsZVR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpUmVzdWx0c1R5cGUge1xuICByZWFkb25seSBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5VHlwZSB7XG4gIHJlYWRvbmx5IHF1ZXJ5PzogSHVudGVyUXVlcnlUeXBlIHwgSHVudGVyUXVlcnlUeXBlW107XG4gIHJlYWRvbmx5IHJlcXVlc3Q/OiB7XG4gICAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcGFyYW1zPzogdW5rbm93bjtcbiAgICByZWFkb25seSB1cmw6IHN0cmluZztcbiAgfTtcbiAgcmVhZG9ubHkgcmVzcG9uc2VNZXRob2Q6IChyZXN1bHRzOiBBcGlSZXN1bHRzVHlwZSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uVHlwZSB7XG4gIHJlYWRvbmx5IGV4cGlyZXM/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGlzc3VlZD86IG51bWJlcjtcbiAgcmVhZG9ubHkgdG9rZW4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVzZXJJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgdXNlcm5hbWU/OiBzdHJpbmc7XG59XG5cbmNvbnN0IERFRkFVTFRfUkVGUkVTSF9XSU5ET1dfTUlOVVRFUyA9IDU7XG5jb25zdCBERUZBVUxUX1NFU1NJT05fTUFYX01JTlVURVMgPSAxNTtcblxuY29uc3QgZ2V0TWludXRlc1VudGlsID0gKGV4cGlyZXNBdDogbnVtYmVyKTogbnVtYmVyID0+XG4gIE1hdGgucm91bmQoKGV4cGlyZXNBdCAtIERhdGUubm93KCkpIC8gKDEwMDAgKiA2MCkpO1xuXG5jb25zdCBjbGVhckludmFsaWRTZXNzaW9uU3RhdGUgPSBhc3luYyAoZmx1eDogRmx1eEZyYW1ld29yayk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBhd2FpdCBjbGVhclBlcnNpc3RlZFNlc3Npb24oZmx1eCk7XG4gIGF3YWl0IGZsdXguY2xlYXJBcHBEYXRhKCk7XG4gIGF3YWl0IGZsdXguZGlzcGF0Y2goe3Nlc3Npb246IHt9LCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5TSUdOX09VVF9TVUNDRVNTfSk7XG59O1xuXG5jb25zdCByZXNvbHZlQXV0aFRva2VuID0gYXN5bmMgKGZsdXg6IEZsdXhGcmFtZXdvcmspOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBzdGF0ZVNlc3Npb246IFNlc3Npb25UeXBlID0gKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicpIHx8IHt9KSBhcyBTZXNzaW9uVHlwZTtcbiAgY29uc3QgaHlkcmF0ZWRTZXNzaW9uOiBTZXNzaW9uVHlwZSA9IHN0YXRlU2Vzc2lvbi50b2tlbiA/IHN0YXRlU2Vzc2lvbiA6IGF3YWl0IGh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UoZmx1eCk7XG4gIGNvbnN0IHtcbiAgICBleHBpcmVzOiBhdXRoRXhwaXJlcyA9IDAsXG4gICAgaXNzdWVkOiBhdXRoSXNzdWVkID0gMCxcbiAgICB0b2tlbjogaHlkcmF0ZWRUb2tlblxuICB9OiBTZXNzaW9uVHlwZSA9IGh5ZHJhdGVkU2Vzc2lvbiB8fCB7fTtcbiAgbGV0IHRva2VuID0gaHlkcmF0ZWRUb2tlbiB8fCBzdGF0ZVNlc3Npb24udG9rZW47XG5cbiAgaWYoIXRva2VuKSB7XG4gICAgdGhyb3cgbmV3IEFwaUVycm9yKFt7IG1lc3NhZ2U6ICdpbnZhbGlkX3Nlc3Npb24nIH1dLCBuZXcgRXJyb3IoJ2ludmFsaWRfc2Vzc2lvbicpKTtcbiAgfVxuXG4gIGNvbnN0IHRva2VuRXhwaXJlc0F0ID0gcGFyc2VKd3RFeHBpcnlNcyh0b2tlbik7XG5cbiAgaWYodG9rZW5FeHBpcmVzQXQgPiAwICYmIERhdGUubm93KCkgPj0gdG9rZW5FeHBpcmVzQXQpIHtcbiAgICB0aHJvdyBuZXcgQXBpRXJyb3IoW3sgbWVzc2FnZTogJ2V4cGlyZWRfc2Vzc2lvbicgfV0sIG5ldyBFcnJvcignZXhwaXJlZF9zZXNzaW9uJykpO1xuICB9XG5cbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnRnJvbUZsdXgoZmx1eCk7XG4gIGNvbnN0IG1pbnV0ZXNVbnRpbEV4cGlyeSA9IGdldE1pbnV0ZXNVbnRpbChOdW1iZXIoYXV0aEV4cGlyZXMgfHwgMCkpO1xuICBjb25zdCBzZXNzaW9uTGlmZXRpbWVNaW51dGVzID0gTWF0aC5yb3VuZCgoYXV0aEV4cGlyZXMgLSBhdXRoSXNzdWVkKSAvICgxMDAwICogNjApKTtcbiAgY29uc3QgcmVmcmVzaFdpbmRvd01pbnV0ZXMgPSBnZXRSZWZyZXNoV2luZG93TWludXRlcyhcbiAgICBzZXNzaW9uTGlmZXRpbWVNaW51dGVzIHx8IERFRkFVTFRfU0VTU0lPTl9NQVhfTUlOVVRFUyxcbiAgICBjb25maWcuYXBwPy5zZXNzaW9uIHx8IHt9XG4gICk7XG4gIGNvbnN0IHJlZnJlc2hFeHBpcmVzTWludXRlcyA9IE1hdGgubWF4KFxuICAgIDEsXG4gICAgTnVtYmVyKGNvbmZpZy5hcHA/LnNlc3Npb24/Lm1heE1pbnV0ZXMgfHwgc2Vzc2lvbkxpZmV0aW1lTWludXRlcyB8fCBERUZBVUxUX1NFU1NJT05fTUFYX01JTlVURVMpXG4gICk7XG5cbiAgaWYobWludXRlc1VudGlsRXhwaXJ5ID4gMCAmJiBtaW51dGVzVW50aWxFeHBpcnkgPD0gcmVmcmVzaFdpbmRvd01pbnV0ZXMpIHtcbiAgICBjb25zdCB7XG4gICAgICBzZXNzaW9uOiB1cGRhdGVkU2Vzc2lvbiA9IHt9XG4gICAgfTogQXBpUmVzdWx0c1R5cGUgPSAoYXdhaXQgcmVmcmVzaFNlc3Npb24oZmx1eCwgdG9rZW4sIHJlZnJlc2hFeHBpcmVzTWludXRlcykpIHx8IHt9O1xuICAgIGNvbnN0IHt0b2tlbjogbmV3VG9rZW59OiBTZXNzaW9uVHlwZSA9ICh1cGRhdGVkU2Vzc2lvbiB8fCB7fSk7XG5cbiAgICBpZighbmV3VG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBBcGlFcnJvcihbeyBtZXNzYWdlOiAnaW52YWxpZF9zZXNzaW9uJyB9XSwgbmV3IEVycm9yKCdpbnZhbGlkX3Nlc3Npb24nKSk7XG4gICAgfVxuXG4gICAgdG9rZW4gPSBuZXdUb2tlbjtcbiAgfVxuXG4gIHJldHVybiB0b2tlbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcmFwaHFsID0gYXN5bmMgKFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICB1cmw6IHN0cmluZyxcbiAgYXV0aGVudGljYXRlOiBib29sZWFuLFxuICBxdWVyeTogSHVudGVyUXVlcnlUeXBlIHwgSHVudGVyUXVlcnlUeXBlW10sXG4gIG9wdGlvbnM6IEFwaU9wdGlvbnNcbik6IFByb21pc2U8QXBpUmVzdWx0c1R5cGU+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7b25TdWNjZXNzfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgcmV0cnk6IFJldHJ5VHlwZSA9IHtxdWVyeSwgcmVzcG9uc2VNZXRob2Q6IG9uU3VjY2VzcyB8fCAoKCkgPT4ge30pfTtcbiAgICBjb25zdCBuZXR3b3JrVHlwZTogc3RyaW5nID0gZmx1eC5nZXRTdGF0ZSgnYXBwLm5ldHdvcmtUeXBlJykgYXMgc3RyaW5nO1xuXG4gICAgaWYobmV0d29ya1R5cGUgPT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe3JldHJ5LCB0eXBlOiBBUFBfQ09OU1RBTlRTLkFQSV9ORVRXT1JLX0VSUk9SfSk7XG4gICAgfVxuXG4gICAgbGV0IHRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBpZihhdXRoZW50aWNhdGUpIHtcbiAgICAgIHRva2VuID0gYXdhaXQgcmVzb2x2ZUF1dGhUb2tlbihmbHV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JhcGhxbFF1ZXJ5KHVybCwgcXVlcnksIHt0b2tlbjogdG9rZW4gfHwgJyd9KVxuICAgICAgLnRoZW4oYXN5bmMgKHJlc3VsdHMpID0+IHtcbiAgICAgICAgYXdhaXQgZmx1eC5kaXNwYXRjaCh7dHlwZTogQVBQX0NPTlNUQU5UUy5BUElfTkVUV09SS19TVUNDRVNTfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKGRhdGEpID0+IChvblN1Y2Nlc3MgPyBvblN1Y2Nlc3MoZGF0YSkgOiBkYXRhKSlcbiAgICAgIC5jYXRjaChhc3luYyAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3Qge2Vycm9ycyA9IFtdfSA9IGVycm9yO1xuXG4gICAgICAgIGlmKG9uU3VjY2VzcyAmJiBlcnJvcnMuaW5jbHVkZXMoJ25ldHdvcmtfZXJyb3InKSkge1xuICAgICAgICAgIGF3YWl0IGZsdXguZGlzcGF0Y2goe3JldHJ5LCB0eXBlOiBBUFBfQ09OU1RBTlRTLkFQSV9ORVRXT1JLX0VSUk9SfSk7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSBlbHNlIGlmKGVycm9ycy5pbmNsdWRlcygnaW52YWxpZF9zZXNzaW9uJykgfHwgZXJyb3JzLmluY2x1ZGVzKCdleHBpcmVkX3Nlc3Npb24nKSkge1xuICAgICAgICAgIGF3YWl0IGNsZWFySW52YWxpZFNlc3Npb25TdGF0ZShmbHV4KTtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICB9KTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGNvbnN0IGVycm9ycyA9IGVycm9yIGluc3RhbmNlb2YgQXBpRXJyb3IgPyBlcnJvci5lcnJvcnMgOiBbXTtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnJztcblxuICAgIGlmKGVycm9ycy5pbmNsdWRlcygnaW52YWxpZF9zZXNzaW9uJykgfHwgZXJyb3JzLmluY2x1ZGVzKCdleHBpcmVkX3Nlc3Npb24nKSB8fCBtZXNzYWdlID09PSAnaW52YWxpZF9zZXNzaW9uJyB8fCBtZXNzYWdlID09PSAnZXhwaXJlZF9zZXNzaW9uJykge1xuICAgICAgYXdhaXQgY2xlYXJJbnZhbGlkU2Vzc2lvblN0YXRlKGZsdXgpO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVJlc3RFbmRwb2ludCA9IChcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgZW5kcG9pbnQ6IHN0cmluZ1xuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdGFyZ2V0RW5kcG9pbnQgPSBTdHJpbmcoZW5kcG9pbnQgfHwgJycpLnRyaW0oKTtcblxuICBpZihpc0VtcHR5KHRhcmdldEVuZHBvaW50KSkge1xuICAgIHRocm93IG5ldyBBcGlFcnJvcihbeyBtZXNzYWdlOiAnaW52YWxpZF91cmwnIH1dLCBuZXcgRXJyb3IoJ3Jlc3RfZW5kcG9pbnRfcmVxdWlyZWQnKSk7XG4gIH1cblxuICBpZigvXmh0dHBzPzpcXC9cXC8vaS50ZXN0KHRhcmdldEVuZHBvaW50KSB8fCB0YXJnZXRFbmRwb2ludC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICByZXR1cm4gdGFyZ2V0RW5kcG9pbnQ7XG4gIH1cblxuICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgY29uc3QgY29uZmlndXJlZEVuZHBvaW50ID0gY29uZmlnLmFwcD8uYXBpPy5lbmRwb2ludHM/Llt0YXJnZXRFbmRwb2ludF0gfHwgJyc7XG5cbiAgaWYoaXNFbXB0eShjb25maWd1cmVkRW5kcG9pbnQpKSB7XG4gICAgdGhyb3cgbmV3IEFwaUVycm9yKFt7IG1lc3NhZ2U6ICdpbnZhbGlkX3VybCcgfV0sIG5ldyBFcnJvcihgcmVzdF9lbmRwb2ludF9ub3RfY29uZmlndXJlZDoke3RhcmdldEVuZHBvaW50fWApKTtcbiAgfVxuXG4gIHJldHVybiBjb25maWd1cmVkRW5kcG9pbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgcmVzdFJlcXVlc3QgPSBhc3luYyA8VCA9IEFwaVJlc3VsdHNUeXBlPihcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgZW5kcG9pbnQ6IHN0cmluZyxcbiAgbWV0aG9kOiBSZXN0TWV0aG9kID0gJ0dFVCcsXG4gIHBhcmFtcz86IHVua25vd24sXG4gIG9wdGlvbnM6IFJlc3RBcGlPcHRpb25zID0ge31cbik6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCB7YXV0aGVudGljYXRlID0gZmFsc2UsIG9uU3VjY2VzcywgLi4uaHVudGVyT3B0aW9uc30gPSBvcHRpb25zO1xuICBjb25zdCB1cmwgPSByZXNvbHZlUmVzdEVuZHBvaW50KGZsdXgsIGVuZHBvaW50KTtcbiAgY29uc3QgcmVxdWVzdE1ldGhvZCA9IFN0cmluZyhtZXRob2QgfHwgJ0dFVCcpLnRvVXBwZXJDYXNlKCk7XG4gIGNvbnN0IHJldHJ5OiBSZXRyeVR5cGUgPSB7XG4gICAgcmVxdWVzdDoge21ldGhvZDogcmVxdWVzdE1ldGhvZCwgcGFyYW1zLCB1cmx9LFxuICAgIHJlc3BvbnNlTWV0aG9kOiBvblN1Y2Nlc3MgfHwgKCgpID0+IHt9KVxuICB9O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgbmV0d29ya1R5cGU6IHN0cmluZyA9IGZsdXguZ2V0U3RhdGUoJ2FwcC5uZXR3b3JrVHlwZScpIGFzIHN0cmluZztcblxuICAgIGlmKG5ldHdvcmtUeXBlID09PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtyZXRyeSwgdHlwZTogQVBQX0NPTlNUQU5UUy5BUElfTkVUV09SS19FUlJPUn0pIGFzIFByb21pc2U8VD47XG4gICAgfVxuXG4gICAgY29uc3QgdG9rZW4gPSBhdXRoZW50aWNhdGUgPyBhd2FpdCByZXNvbHZlQXV0aFRva2VuKGZsdXgpIDogaHVudGVyT3B0aW9ucy50b2tlbjtcbiAgICBjb25zdCByZXF1ZXN0T3B0aW9uczogSHVudGVyT3B0aW9uc1R5cGUgPSB7XG4gICAgICAuLi5odW50ZXJPcHRpb25zLFxuICAgICAgLi4uKHRva2VuID8ge3Rva2VufSA6IHt9KVxuICAgIH07XG4gICAgbGV0IGRhdGE6IFQ7XG5cbiAgICBzd2l0Y2gocmVxdWVzdE1ldGhvZCkge1xuICAgICAgY2FzZSAnREVMRVRFJzpcbiAgICAgICAgZGF0YSA9IGF3YWl0IGRlbCh1cmwsIHBhcmFtcywgcmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnR0VUJzpcbiAgICAgICAgZGF0YSA9IGF3YWl0IGdldCh1cmwsIHBhcmFtcywgcmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnUE9TVCc6XG4gICAgICAgIGRhdGEgPSBhd2FpdCBwb3N0KHVybCwgcGFyYW1zLCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdQVVQnOlxuICAgICAgICBkYXRhID0gYXdhaXQgcHV0KHVybCwgcGFyYW1zLCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBkYXRhID0gYXdhaXQgYWpheCh1cmwsIHJlcXVlc3RNZXRob2QsIHBhcmFtcywgcmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBhd2FpdCBmbHV4LmRpc3BhdGNoKHt0eXBlOiBBUFBfQ09OU1RBTlRTLkFQSV9ORVRXT1JLX1NVQ0NFU1N9KTtcblxuICAgIHJldHVybiBvblN1Y2Nlc3MgPyBvblN1Y2Nlc3MoZGF0YSkgOiBkYXRhO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgY29uc3QgZXJyb3JzID0gZXJyb3IgaW5zdGFuY2VvZiBBcGlFcnJvciA/IGVycm9yLmVycm9ycyA6IFtdO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICcnO1xuXG4gICAgaWYoZXJyb3JzLmluY2x1ZGVzKCdpbnZhbGlkX3Nlc3Npb24nKSB8fCBlcnJvcnMuaW5jbHVkZXMoJ2V4cGlyZWRfc2Vzc2lvbicpIHx8IG1lc3NhZ2UgPT09ICdpbnZhbGlkX3Nlc3Npb24nIHx8IG1lc3NhZ2UgPT09ICdleHBpcmVkX3Nlc3Npb24nKSB7XG4gICAgICBhd2FpdCBjbGVhckludmFsaWRTZXNzaW9uU3RhdGUoZmx1eCk7XG4gICAgICByZXR1cm4ge30gYXMgVDtcbiAgICB9XG5cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVF1ZXJ5ID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIGRhdGFUeXBlOiBSZWFrdG9yRGJDb2xsZWN0aW9uLFxuICB2YXJpYWJsZXM6IEFwaVF1ZXJ5VmFyaWFibGVzID0ge30sXG4gIHJldHVyblByb3BlcnRpZXM6IHN0cmluZ1tdID0gW10sXG4gIHR5cGUgPSAncXVlcnknXG4pID0+IHtcbiAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7Li4udmFyaWFibGVzIHx8IHt9fTtcbiAgY29uc3QgdmFyaWFibGVLZXlzID0gT2JqZWN0LmtleXMocXVlcnlWYXJpYWJsZXMpO1xuICBjb25zdCBxdWVyeU5hbWUgPSBuYW1lLnJlcGxhY2UoLyAvZywgJycpO1xuICBsZXQgcXVlcnk6IHN0cmluZztcblxuICBpZih0eXBlID09PSAnbXV0YXRpb24nKSB7XG4gICAgY29uc3QgbXV0YXRpb25OYW1lID0gdXBwZXJGaXJzdChjYW1lbENhc2UoZGF0YVR5cGUpKSArIHVwcGVyRmlyc3QoY2FtZWxDYXNlKHF1ZXJ5TmFtZSkpO1xuICAgIHF1ZXJ5ID0gYCR7dHlwZX0gJHttdXRhdGlvbk5hbWV9JHtcbiAgICAgIHZhcmlhYmxlS2V5cy5sZW5ndGhcbiAgICAgICAgPyBgKCR7dmFyaWFibGVLZXlzLm1hcCgoa2V5KSA9PiBgJCR7a2V5fTogJHtxdWVyeVZhcmlhYmxlc1trZXldLnR5cGV9YCkuam9pbignLCAnKX0pYFxuICAgICAgICA6ICcnXG4gICAgfSB7XG4gICAgICAke2RhdGFUeXBlfSB7XG4gICAgICAgICR7Y2FtZWxDYXNlKHF1ZXJ5TmFtZSl9JHtcbiAgICAgICAgICB2YXJpYWJsZUtleXMubGVuZ3RoXG4gICAgICAgICAgICA/IGAoJHt2YXJpYWJsZUtleXMubWFwKChrZXkpID0+IGAke2tleX06ICQke2tleX1gKS5qb2luKCcsICcpfSlgXG4gICAgICAgICAgICA6ICcnXG4gICAgICAgIH1cbiAgICAgICAgJHtyZXR1cm5Qcm9wZXJ0aWVzPy5sZW5ndGggPyBgeyR7cmV0dXJuUHJvcGVydGllcy5qb2luKCcsICcpfX1gIDogJyd9XG4gICAgICB9XG4gICAgfWA7XG4gIH0gZWxzZSB7XG4gICAgcXVlcnkgPSBgJHt0eXBlfSAke3F1ZXJ5TmFtZX0ke1xuICAgICAgdmFyaWFibGVLZXlzLmxlbmd0aFxuICAgICAgICA/IGAoJHt2YXJpYWJsZUtleXMubWFwKChrZXkpID0+IGAkJHtrZXl9OiAke3F1ZXJ5VmFyaWFibGVzW2tleV0udHlwZX1gKS5qb2luKCcsICcpfSlgXG4gICAgICAgIDogJydcbiAgICB9IHtcbiAgICAgICR7ZGF0YVR5cGV9IHtcbiAgICAgICAgJHtjYW1lbENhc2UocXVlcnlOYW1lKX0ke1xuICAgICAgICAgIHZhcmlhYmxlS2V5cy5sZW5ndGhcbiAgICAgICAgICAgID8gYCgke3ZhcmlhYmxlS2V5cy5tYXAoKGtleSkgPT4gYCR7a2V5fTogJCR7a2V5fWApLmpvaW4oJywgJyl9KWBcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfVxuICAgICAgICAke3JldHVyblByb3BlcnRpZXM/Lmxlbmd0aCA/IGB7JHtyZXR1cm5Qcm9wZXJ0aWVzLmpvaW4oJywgJyl9fWAgOiAnJ31cbiAgICAgIH1cbiAgICB9YDtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZWRWYXJpYWJsZXMgPSB2YXJpYWJsZUtleXMucmVkdWNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PigocXVlcnlEYXRhLCBrZXkpID0+IHtcbiAgICBxdWVyeURhdGFba2V5XSA9IHF1ZXJ5VmFyaWFibGVzW2tleV0udmFsdWU7XG4gICAgcmV0dXJuIHF1ZXJ5RGF0YTtcbiAgfSwge30pO1xuXG4gIHJldHVybiB7cXVlcnksIHZhcmlhYmxlczogdXBkYXRlZFZhcmlhYmxlc307XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTXV0YXRpb24gPSAoXG4gIG5hbWU6IHN0cmluZyxcbiAgZGF0YVR5cGU6IFJlYWt0b3JEYkNvbGxlY3Rpb24sXG4gIHZhcmlhYmxlczogQXBpUXVlcnlWYXJpYWJsZXMgPSB7fSxcbiAgcmV0dXJuUHJvcGVydGllczogc3RyaW5nW10gPSBbXVxuKSA9PiBjcmVhdGVRdWVyeShuYW1lLCBkYXRhVHlwZSwgdmFyaWFibGVzLCByZXR1cm5Qcm9wZXJ0aWVzLCAnbXV0YXRpb24nKTtcblxuZXhwb3J0IGNvbnN0IGFwcFF1ZXJ5ID0gPFQ+KFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBuYW1lOiBzdHJpbmcsXG4gIGRhdGFUeXBlOiBSZWFrdG9yRGJDb2xsZWN0aW9uLFxuICBxdWVyeVZhcmlhYmxlczogQXBpUXVlcnlWYXJpYWJsZXMsXG4gIHJldHVyblByb3BlcnRpZXM6IHN0cmluZ1tdLFxuICBvcHRpb25zOiBBcGlPcHRpb25zID0ge31cbik6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGNyZWF0ZVF1ZXJ5KG5hbWUsIGRhdGFUeXBlLCBxdWVyeVZhcmlhYmxlcywgcmV0dXJuUHJvcGVydGllcyk7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICBjb25zdCBhcHBVcmw6IHN0cmluZyA9IGNvbmZpZy5hcHA/LmFwaT8udXJsIHx8ICcnO1xuICByZXR1cm4gZ2V0R3JhcGhxbChmbHV4LCBhcHBVcmwsIHRydWUsIHF1ZXJ5LCBvcHRpb25zKSBhcyBQcm9taXNlPFQ+O1xufTtcblxuZXhwb3J0IGNvbnN0IGFwcE11dGF0aW9uID0gPFQ+KFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBuYW1lOiBzdHJpbmcsXG4gIGRhdGFUeXBlOiBSZWFrdG9yRGJDb2xsZWN0aW9uLFxuICBxdWVyeVZhcmlhYmxlczogQXBpUXVlcnlWYXJpYWJsZXMsXG4gIHJldHVyblByb3BlcnRpZXM6IHN0cmluZ1tdLFxuICBvcHRpb25zOiBBcGlPcHRpb25zID0ge31cbik6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGNyZWF0ZU11dGF0aW9uKG5hbWUsIGRhdGFUeXBlLCBxdWVyeVZhcmlhYmxlcywgcmV0dXJuUHJvcGVydGllcyk7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICBjb25zdCBhcHBVcmw6IHN0cmluZyA9IGNvbmZpZy5hcHA/LmFwaT8udXJsIHx8ICcnO1xuICByZXR1cm4gZ2V0R3JhcGhxbChmbHV4LCBhcHBVcmwsIHRydWUsIHF1ZXJ5LCBvcHRpb25zKSBhcyBQcm9taXNlPFQ+O1xufTtcblxuZXhwb3J0IGNvbnN0IHB1YmxpY1F1ZXJ5ID0gPFQ+KFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBuYW1lOiBzdHJpbmcsXG4gIGRhdGFUeXBlOiBSZWFrdG9yRGJDb2xsZWN0aW9uLFxuICBxdWVyeVZhcmlhYmxlczogQXBpUXVlcnlWYXJpYWJsZXMsXG4gIHJldHVyblByb3BlcnRpZXM6IHN0cmluZ1tdLFxuICBvcHRpb25zOiBBcGlPcHRpb25zID0ge31cbik6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGNyZWF0ZVF1ZXJ5KG5hbWUsIGRhdGFUeXBlLCBxdWVyeVZhcmlhYmxlcywgcmV0dXJuUHJvcGVydGllcyk7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICBjb25zdCBwdWJsaWNVcmw6IHN0cmluZyA9IGNvbmZpZy5hcHA/LmFwaT8ucHVibGljIHx8ICcnO1xuICByZXR1cm4gZ2V0R3JhcGhxbChmbHV4LCBwdWJsaWNVcmwsIGZhbHNlLCBxdWVyeSwgb3B0aW9ucykgYXMgUHJvbWlzZTxUPjtcbn07XG5cbmV4cG9ydCBjb25zdCBwdWJsaWNNdXRhdGlvbiA9IDxUPihcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgbmFtZTogc3RyaW5nLFxuICBkYXRhVHlwZTogUmVha3RvckRiQ29sbGVjdGlvbixcbiAgcXVlcnlWYXJpYWJsZXM6IEFwaVF1ZXJ5VmFyaWFibGVzLFxuICByZXR1cm5Qcm9wZXJ0aWVzOiBzdHJpbmdbXSxcbiAgb3B0aW9uczogQXBpT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3QgcXVlcnkgPSBjcmVhdGVNdXRhdGlvbihuYW1lLCBkYXRhVHlwZSwgcXVlcnlWYXJpYWJsZXMsIHJldHVyblByb3BlcnRpZXMpO1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgY29uc3QgcHVibGljVXJsOiBzdHJpbmcgPSBjb25maWcuYXBwPy5hcGk/LnB1YmxpYyB8fCAnJztcbiAgcmV0dXJuIGdldEdyYXBocWwoZmx1eCwgcHVibGljVXJsLCBmYWxzZSwgcXVlcnksIG9wdGlvbnMpIGFzIFByb21pc2U8VD47XG59O1xuXG5leHBvcnQgY29uc3QgcnVtTXV0YXRpb24gPSA8VD4oXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIG5hbWU6IHN0cmluZyxcbiAgZGF0YVR5cGU6IFJlYWt0b3JEYkNvbGxlY3Rpb24sXG4gIHF1ZXJ5VmFyaWFibGVzOiBBcGlRdWVyeVZhcmlhYmxlcyxcbiAgcmV0dXJuUHJvcGVydGllczogc3RyaW5nW10sXG4gIG9wdGlvbnM6IEFwaU9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUPiA9PiB7XG4gIGNvbnN0IHF1ZXJ5ID0gY3JlYXRlTXV0YXRpb24obmFtZSwgZGF0YVR5cGUsIHF1ZXJ5VmFyaWFibGVzLCByZXR1cm5Qcm9wZXJ0aWVzKTtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnRnJvbUZsdXgoZmx1eCk7XG4gIGNvbnN0IHJ1bVVybDogc3RyaW5nID0gY29uZmlnLmFwcD8uYXBpPy5ydW0gfHwgY29uZmlnLmFwcD8uYXBpPy5wdWJsaWMgfHwgJyc7XG4gIHJldHVybiBnZXRHcmFwaHFsKGZsdXgsIHJ1bVVybCwgZmFsc2UsIHF1ZXJ5LCBvcHRpb25zKSBhcyBQcm9taXNlPFQ+O1xufTtcblxuZXhwb3J0IGNvbnN0IHJ1bVJlcXVlc3QgPSA8VD4oXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIGJhdGNoOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgb3B0aW9uczogUmVzdEFwaU9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUPiA9PiB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICBjb25zdCBydW1Vcmw6IHN0cmluZyA9IGNvbmZpZy5hcHA/LmFwaT8uZW5kcG9pbnRzPy5ydW0gfHwgY29uZmlnLmFwcD8uYXBpPy5ydW0gfHwgJyc7XG5cbiAgcmV0dXJuIHJlc3RSZXF1ZXN0PFQ+KGZsdXgsIHJ1bVVybCwgJ1BPU1QnLCBiYXRjaCwgey4uLm9wdGlvbnMsIGF1dGhlbnRpY2F0ZTogZmFsc2V9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGxvYWRJbWFnZSA9IChcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgaW1hZ2U6IEZvcm1EYXRhIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIG9wdGlvbnM6IEh1bnRlck9wdGlvbnNUeXBlID0ge31cbik6IFByb21pc2U8QXBpUmVzdWx0c1R5cGU+ID0+IHtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnRnJvbUZsdXgoZmx1eCk7XG4gIGNvbnN0IHVwbG9hZEltYWdlVXJsOiBzdHJpbmcgPSBjb25maWcuYXBwPy5hcGk/LnVwbG9hZEltYWdlIHx8ICcnO1xuICBjb25zdCB0b2tlbiA9IGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbi50b2tlbicpO1xuXG4gIGlmKGlzRW1wdHkodXBsb2FkSW1hZ2VVcmwpKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBBcGlFcnJvcihbeyBtZXNzYWdlOiAnaW52YWxpZF91cmwnIH1dLCBuZXcgRXJyb3IoJ3VwbG9hZF9lbmRwb2ludF9ub3RfY29uZmlndXJlZCcpKSk7XG4gIH1cblxuICBpZihpc0VtcHR5KHRva2VuKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQXBpRXJyb3IoW3sgbWVzc2FnZTogJ2ludmFsaWRfc2Vzc2lvbicgfV0sIG5ldyBFcnJvcignbWlzc2luZ19hdXRoX3Rva2VuJykpKTtcbiAgfVxuXG4gIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpO1xuICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHt0b2tlbn1gKTtcblxuICBpZih0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnICYmIGltYWdlIGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICBoZWFkZXJzLnNldCgnQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcblxuICAgIHJldHVybiBmZXRjaCh1cGxvYWRJbWFnZVVybCwge1xuICAgICAgYm9keTogaW1hZ2UsXG4gICAgICBoZWFkZXJzLFxuICAgICAgbWV0aG9kOiAnUE9TVCdcbiAgICB9KS50aGVuKGFzeW5jIChyZXNwb25zZSkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpIHx8ICcnO1xuICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlVHlwZS5pbmNsdWRlcygnYXBwbGljYXRpb24vanNvbicpXG4gICAgICAgID8gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gICAgICAgIDogYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuXG4gICAgICBpZighcmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiBkYXRhICYmICdlcnJvcicgaW4gZGF0YVxuICAgICAgICAgID8gU3RyaW5nKChkYXRhIGFzIHtlcnJvcj86IHN0cmluZ30pLmVycm9yIHx8IHJlc3BvbnNlLnN0YXR1c1RleHQpXG4gICAgICAgICAgOiBTdHJpbmcoZGF0YSB8fCByZXNwb25zZS5zdGF0dXNUZXh0KTtcbiAgICAgICAgdGhyb3cgbmV3IEFwaUVycm9yKFt7IG1lc3NhZ2U6ICd1cGxvYWRfZXJyb3InIH1dLCBuZXcgRXJyb3IobWVzc2FnZSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGF0YSBhcyBBcGlSZXN1bHRzVHlwZTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBwb3N0KHVwbG9hZEltYWdlVXJsLCBpbWFnZSwge2hlYWRlcnMsIC4uLm9wdGlvbnN9KTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWZyZXNoU2Vzc2lvbiA9IGFzeW5jIChcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgdG9rZW4/OiBzdHJpbmcsXG4gIGV4cGlyZXM/OiBudW1iZXJcbik6IFByb21pc2U8Rmx1eEFjdGlvbiB8IG51bGw+ID0+IHtcbiAgY29uc3QgcmVmcmVzaFRva2VuID0gaXNFbXB0eSh0b2tlbikgPyBmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udG9rZW4nKSA6IHRva2VuO1xuXG4gIGlmKGlzRW1wdHkocmVmcmVzaFRva2VuKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgdG9rZW5FeHBpcmVzQXQgPSBwYXJzZUp3dEV4cGlyeU1zKFN0cmluZyhyZWZyZXNoVG9rZW4pKTtcblxuICBpZih0b2tlbkV4cGlyZXNBdCA+IDAgJiYgRGF0ZS5ub3coKSA+PSB0b2tlbkV4cGlyZXNBdCkge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdleHBpcmVkX3Nlc3Npb24nKTtcbiAgICBhd2FpdCBjbGVhckludmFsaWRTZXNzaW9uU3RhdGUoZmx1eCk7XG4gICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IFVTRVJfQ09OU1RBTlRTLkdFVF9TRVNTSU9OX0VSUk9SfSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICAgIGNvbnN0IHJlcXVlc3RlZEV4cGlyZXMgPSBNYXRoLm1heChcbiAgICAgIDEsXG4gICAgICBOdW1iZXIoZXhwaXJlcyB8fCBjb25maWcuYXBwPy5zZXNzaW9uPy5tYXhNaW51dGVzIHx8IERFRkFVTFRfU0VTU0lPTl9NQVhfTUlOVVRFUylcbiAgICApO1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgZXhwaXJlczoge1xuICAgICAgICB0eXBlOiAnSW50JyxcbiAgICAgICAgdmFsdWU6IHJlcXVlc3RlZEV4cGlyZXNcbiAgICAgIH0sXG4gICAgICB0b2tlbjoge1xuICAgICAgICB0eXBlOiAnU3RyaW5nIScsXG4gICAgICAgIHZhbHVlOiByZWZyZXNoVG9rZW5cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IGFzeW5jIChkYXRhOiBBcGlSZXN1bHRzVHlwZSA9IHt9KTogUHJvbWlzZTxGbHV4QWN0aW9uPiA9PiB7XG4gICAgICBjb25zdCByYXdTZXNzaW9uRGF0YSA9IChkYXRhIGFzIHt1c2Vycz86IHtyZWZyZXNoU2Vzc2lvbj86IFJlY29yZDxzdHJpbmcsIHVua25vd24+fX0pPy51c2Vycz8ucmVmcmVzaFNlc3Npb247XG4gICAgICBjb25zdCBzZXNzaW9uRGF0YSA9IHJhd1Nlc3Npb25EYXRhICYmIHR5cGVvZiByYXdTZXNzaW9uRGF0YSA9PT0gJ29iamVjdCdcbiAgICAgICAgPyByYXdTZXNzaW9uRGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgICA6IHt9O1xuICAgICAgY29uc3QgY3VycmVudFNlc3Npb24gPSAoZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uJywge30pIHx8IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGNvbnN0IG1lcmdlZFNlc3Npb24gPSBhd2FpdCBzdG9yZVNlc3Npb24oZmx1eCwgey4uLmN1cnJlbnRTZXNzaW9uLCAuLi5zZXNzaW9uRGF0YX0pO1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe3Nlc3Npb246IG1lcmdlZFNlc3Npb24sIHR5cGU6IFVTRVJfQ09OU1RBTlRTLlVQREFURV9TRVNTSU9OX1NVQ0NFU1N9KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGF3YWl0IHB1YmxpY011dGF0aW9uKGZsdXgsICdyZWZyZXNoU2Vzc2lvbicsICd1c2VycycsIHF1ZXJ5VmFyaWFibGVzLCBbJ2V4cGlyZXMnLCAnaXNzdWVkJywgJ3Rva2VuJ10sIHtcbiAgICAgIG9uU3VjY2Vzc1xuICAgIH0pO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnJztcblxuICAgIGlmKGVycm9yTWVzc2FnZSA9PT0gJ2ludmFsaWRfc2Vzc2lvbicgfHwgZXJyb3JNZXNzYWdlID09PSAnZXhwaXJlZF9zZXNzaW9uJykge1xuICAgICAgYXdhaXQgY2xlYXJJbnZhbGlkU2Vzc2lvblN0YXRlKGZsdXgpO1xuICAgIH1cblxuICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5HRVRfU0VTU0lPTl9FUlJPUn0pO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbIkFwaUVycm9yIiwiYWpheCIsImRlbCIsImdldCIsImdyYXBocWxRdWVyeSIsInBvc3QiLCJwdXQiLCJjYW1lbENhc2UiLCJpc0VtcHR5IiwidXBwZXJGaXJzdCIsIkFQUF9DT05TVEFOVFMiLCJVU0VSX0NPTlNUQU5UUyIsImdldENvbmZpZ0Zyb21GbHV4IiwiY2xlYXJQZXJzaXN0ZWRTZXNzaW9uIiwiZ2V0UmVmcmVzaFdpbmRvd01pbnV0ZXMiLCJoeWRyYXRlU2Vzc2lvbkZyb21TdG9yYWdlIiwicGFyc2VKd3RFeHBpcnlNcyIsInN0b3JlU2Vzc2lvbiIsIkRFRkFVTFRfUkVGUkVTSF9XSU5ET1dfTUlOVVRFUyIsIkRFRkFVTFRfU0VTU0lPTl9NQVhfTUlOVVRFUyIsImdldE1pbnV0ZXNVbnRpbCIsImV4cGlyZXNBdCIsIk1hdGgiLCJyb3VuZCIsIkRhdGUiLCJub3ciLCJjbGVhckludmFsaWRTZXNzaW9uU3RhdGUiLCJmbHV4IiwiY2xlYXJBcHBEYXRhIiwiZGlzcGF0Y2giLCJzZXNzaW9uIiwidHlwZSIsIlNJR05fT1VUX1NVQ0NFU1MiLCJyZXNvbHZlQXV0aFRva2VuIiwic3RhdGVTZXNzaW9uIiwiZ2V0U3RhdGUiLCJoeWRyYXRlZFNlc3Npb24iLCJ0b2tlbiIsImV4cGlyZXMiLCJhdXRoRXhwaXJlcyIsImlzc3VlZCIsImF1dGhJc3N1ZWQiLCJoeWRyYXRlZFRva2VuIiwibWVzc2FnZSIsIkVycm9yIiwidG9rZW5FeHBpcmVzQXQiLCJjb25maWciLCJtaW51dGVzVW50aWxFeHBpcnkiLCJOdW1iZXIiLCJzZXNzaW9uTGlmZXRpbWVNaW51dGVzIiwicmVmcmVzaFdpbmRvd01pbnV0ZXMiLCJhcHAiLCJyZWZyZXNoRXhwaXJlc01pbnV0ZXMiLCJtYXgiLCJtYXhNaW51dGVzIiwidXBkYXRlZFNlc3Npb24iLCJyZWZyZXNoU2Vzc2lvbiIsIm5ld1Rva2VuIiwiZ2V0R3JhcGhxbCIsInVybCIsImF1dGhlbnRpY2F0ZSIsInF1ZXJ5Iiwib3B0aW9ucyIsIm9uU3VjY2VzcyIsInJldHJ5IiwicmVzcG9uc2VNZXRob2QiLCJuZXR3b3JrVHlwZSIsIkFQSV9ORVRXT1JLX0VSUk9SIiwidGhlbiIsInJlc3VsdHMiLCJBUElfTkVUV09SS19TVUNDRVNTIiwiZGF0YSIsImNhdGNoIiwiZXJyb3IiLCJlcnJvcnMiLCJpbmNsdWRlcyIsIlByb21pc2UiLCJyZWplY3QiLCJyZXNvbHZlIiwicmVzb2x2ZVJlc3RFbmRwb2ludCIsImVuZHBvaW50IiwidGFyZ2V0RW5kcG9pbnQiLCJTdHJpbmciLCJ0cmltIiwidGVzdCIsInN0YXJ0c1dpdGgiLCJjb25maWd1cmVkRW5kcG9pbnQiLCJhcGkiLCJlbmRwb2ludHMiLCJyZXN0UmVxdWVzdCIsIm1ldGhvZCIsInBhcmFtcyIsImh1bnRlck9wdGlvbnMiLCJyZXF1ZXN0TWV0aG9kIiwidG9VcHBlckNhc2UiLCJyZXF1ZXN0IiwicmVxdWVzdE9wdGlvbnMiLCJjcmVhdGVRdWVyeSIsIm5hbWUiLCJkYXRhVHlwZSIsInZhcmlhYmxlcyIsInJldHVyblByb3BlcnRpZXMiLCJxdWVyeVZhcmlhYmxlcyIsInZhcmlhYmxlS2V5cyIsIk9iamVjdCIsImtleXMiLCJxdWVyeU5hbWUiLCJyZXBsYWNlIiwibXV0YXRpb25OYW1lIiwibGVuZ3RoIiwibWFwIiwia2V5Iiwiam9pbiIsInVwZGF0ZWRWYXJpYWJsZXMiLCJyZWR1Y2UiLCJxdWVyeURhdGEiLCJ2YWx1ZSIsImNyZWF0ZU11dGF0aW9uIiwiYXBwUXVlcnkiLCJhcHBVcmwiLCJhcHBNdXRhdGlvbiIsInB1YmxpY1F1ZXJ5IiwicHVibGljVXJsIiwicHVibGljIiwicHVibGljTXV0YXRpb24iLCJydW1NdXRhdGlvbiIsInJ1bVVybCIsInJ1bSIsInJ1bVJlcXVlc3QiLCJiYXRjaCIsInVwbG9hZEltYWdlIiwiaW1hZ2UiLCJ1cGxvYWRJbWFnZVVybCIsImhlYWRlcnMiLCJIZWFkZXJzIiwic2V0IiwiRm9ybURhdGEiLCJmZXRjaCIsImJvZHkiLCJyZXNwb25zZSIsInJlc3BvbnNlVHlwZSIsImpzb24iLCJ0ZXh0Iiwib2siLCJzdGF0dXNUZXh0IiwicmVmcmVzaFRva2VuIiwiR0VUX1NFU1NJT05fRVJST1IiLCJyZXF1ZXN0ZWRFeHBpcmVzIiwicmF3U2Vzc2lvbkRhdGEiLCJ1c2VycyIsInNlc3Npb25EYXRhIiwiY3VycmVudFNlc3Npb24iLCJtZXJnZWRTZXNzaW9uIiwiVVBEQVRFX1NFU1NJT05fU1VDQ0VTUyIsImVycm9yTWVzc2FnZSJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsUUFBUSxFQUFFQyxJQUFJLEVBQUVDLEdBQUcsRUFBRUMsR0FBRyxFQUFFQyxZQUFZLEVBQUVDLElBQUksRUFBRUMsR0FBRyxRQUFPLG9CQUFvQjtBQUNwRixTQUFRQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsVUFBVSxRQUFPLGVBQWU7QUFFNUQsU0FBUUMsYUFBYSxRQUFPLHdCQUF3QjtBQUNwRCxTQUFRQyxjQUFjLFFBQU8seUJBQXlCO0FBQ3RELFNBQVFDLGlCQUFpQixRQUFPLG1CQUFtQjtBQUNuRCxTQUFRQyxxQkFBcUIsRUFBRUMsdUJBQXVCLEVBQUVDLHlCQUF5QixFQUFFQyxnQkFBZ0IsRUFBRUMsWUFBWSxRQUFPLGVBQWU7QUF5RXZJLE1BQU1DLGlDQUFpQztBQUN2QyxNQUFNQyw4QkFBOEI7QUFFcEMsTUFBTUMsa0JBQWtCLENBQUNDLFlBQ3ZCQyxLQUFLQyxLQUFLLENBQUMsQUFBQ0YsQ0FBQUEsWUFBWUcsS0FBS0MsR0FBRyxFQUFDLElBQU0sQ0FBQSxPQUFPLEVBQUM7QUFFakQsTUFBTUMsMkJBQTJCLE9BQU9DO0lBQ3RDLE1BQU1kLHNCQUFzQmM7SUFDNUIsTUFBTUEsS0FBS0MsWUFBWTtJQUN2QixNQUFNRCxLQUFLRSxRQUFRLENBQUM7UUFBQ0MsU0FBUyxDQUFDO1FBQUdDLE1BQU1wQixlQUFlcUIsZ0JBQWdCO0lBQUE7QUFDekU7QUFFQSxNQUFNQyxtQkFBbUIsT0FBT047SUFDOUIsTUFBTU8sZUFBNkJQLEtBQUtRLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQztJQUNyRSxNQUFNQyxrQkFBK0JGLGFBQWFHLEtBQUssR0FBR0gsZUFBZSxNQUFNbkIsMEJBQTBCWTtJQUN6RyxNQUFNLEVBQ0pXLFNBQVNDLGNBQWMsQ0FBQyxFQUN4QkMsUUFBUUMsYUFBYSxDQUFDLEVBQ3RCSixPQUFPSyxhQUFhLEVBQ3JCLEdBQWdCTixtQkFBbUIsQ0FBQztJQUNyQyxJQUFJQyxRQUFRSyxpQkFBaUJSLGFBQWFHLEtBQUs7SUFFL0MsSUFBRyxDQUFDQSxPQUFPO1FBQ1QsTUFBTSxJQUFJckMsU0FBUztZQUFDO2dCQUFFMkMsU0FBUztZQUFrQjtTQUFFLEVBQUUsSUFBSUMsTUFBTTtJQUNqRTtJQUVBLE1BQU1DLGlCQUFpQjdCLGlCQUFpQnFCO0lBRXhDLElBQUdRLGlCQUFpQixLQUFLckIsS0FBS0MsR0FBRyxNQUFNb0IsZ0JBQWdCO1FBQ3JELE1BQU0sSUFBSTdDLFNBQVM7WUFBQztnQkFBRTJDLFNBQVM7WUFBa0I7U0FBRSxFQUFFLElBQUlDLE1BQU07SUFDakU7SUFFQSxNQUFNRSxTQUFTbEMsa0JBQWtCZTtJQUNqQyxNQUFNb0IscUJBQXFCM0IsZ0JBQWdCNEIsT0FBT1QsZUFBZTtJQUNqRSxNQUFNVSx5QkFBeUIzQixLQUFLQyxLQUFLLENBQUMsQUFBQ2dCLENBQUFBLGNBQWNFLFVBQVMsSUFBTSxDQUFBLE9BQU8sRUFBQztJQUNoRixNQUFNUyx1QkFBdUJwQyx3QkFDM0JtQywwQkFBMEI5Qiw2QkFDMUIyQixPQUFPSyxHQUFHLEVBQUVyQixXQUFXLENBQUM7SUFFMUIsTUFBTXNCLHdCQUF3QjlCLEtBQUsrQixHQUFHLENBQ3BDLEdBQ0FMLE9BQU9GLE9BQU9LLEdBQUcsRUFBRXJCLFNBQVN3QixjQUFjTCwwQkFBMEI5QjtJQUd0RSxJQUFHNEIscUJBQXFCLEtBQUtBLHNCQUFzQkcsc0JBQXNCO1FBQ3ZFLE1BQU0sRUFDSnBCLFNBQVN5QixpQkFBaUIsQ0FBQyxDQUFDLEVBQzdCLEdBQW1CLEFBQUMsTUFBTUMsZUFBZTdCLE1BQU1VLE9BQU9lLDBCQUEyQixDQUFDO1FBQ25GLE1BQU0sRUFBQ2YsT0FBT29CLFFBQVEsRUFBQyxHQUFpQkYsa0JBQWtCLENBQUM7UUFFM0QsSUFBRyxDQUFDRSxVQUFVO1lBQ1osTUFBTSxJQUFJekQsU0FBUztnQkFBQztvQkFBRTJDLFNBQVM7Z0JBQWtCO2FBQUUsRUFBRSxJQUFJQyxNQUFNO1FBQ2pFO1FBRUFQLFFBQVFvQjtJQUNWO0lBRUEsT0FBT3BCO0FBQ1Q7QUFFQSxPQUFPLE1BQU1xQixhQUFhLE9BQ3hCL0IsTUFDQWdDLEtBQ0FDLGNBQ0FDLE9BQ0FDO0lBRUEsSUFBSTtRQUNGLE1BQU0sRUFBQ0MsU0FBUyxFQUFDLEdBQUdEO1FBQ3BCLE1BQU1FLFFBQW1CO1lBQUNIO1lBQU9JLGdCQUFnQkYsYUFBYyxDQUFBLEtBQU8sQ0FBQTtRQUFFO1FBQ3hFLE1BQU1HLGNBQXNCdkMsS0FBS1EsUUFBUSxDQUFDO1FBRTFDLElBQUcrQixnQkFBZ0IsUUFBUTtZQUN6QixPQUFPdkMsS0FBS0UsUUFBUSxDQUFDO2dCQUFDbUM7Z0JBQU9qQyxNQUFNckIsY0FBY3lELGlCQUFpQjtZQUFBO1FBQ3BFO1FBRUEsSUFBSTlCO1FBRUosSUFBR3VCLGNBQWM7WUFDZnZCLFFBQVEsTUFBTUosaUJBQWlCTjtRQUNqQztRQUVBLE9BQU92QixhQUFhdUQsS0FBS0UsT0FBTztZQUFDeEIsT0FBT0EsU0FBUztRQUFFLEdBQ2hEK0IsSUFBSSxDQUFDLE9BQU9DO1lBQ1gsTUFBTTFDLEtBQUtFLFFBQVEsQ0FBQztnQkFBQ0UsTUFBTXJCLGNBQWM0RCxtQkFBbUI7WUFBQTtZQUU1RCxPQUFPRDtRQUNULEdBQ0NELElBQUksQ0FBQyxDQUFDRyxPQUFVUixZQUFZQSxVQUFVUSxRQUFRQSxNQUM5Q0MsS0FBSyxDQUFDLE9BQU9DO1lBQ1osTUFBTSxFQUFDQyxTQUFTLEVBQUUsRUFBQyxHQUFHRDtZQUV0QixJQUFHVixhQUFhVyxPQUFPQyxRQUFRLENBQUMsa0JBQWtCO2dCQUNoRCxNQUFNaEQsS0FBS0UsUUFBUSxDQUFDO29CQUFDbUM7b0JBQU9qQyxNQUFNckIsY0FBY3lELGlCQUFpQjtnQkFBQTtnQkFDakUsT0FBT1MsUUFBUUMsTUFBTSxDQUFDSjtZQUN4QixPQUFPLElBQUdDLE9BQU9DLFFBQVEsQ0FBQyxzQkFBc0JELE9BQU9DLFFBQVEsQ0FBQyxvQkFBb0I7Z0JBQ2xGLE1BQU1qRCx5QkFBeUJDO2dCQUMvQixPQUFPaUQsUUFBUUUsT0FBTyxDQUFDLENBQUM7WUFDMUI7WUFFQSxPQUFPRixRQUFRQyxNQUFNLENBQUNKO1FBQ3hCO0lBQ0osRUFBRSxPQUFNQSxPQUFPO1FBQ2IsTUFBTUMsU0FBU0QsaUJBQWlCekUsV0FBV3lFLE1BQU1DLE1BQU0sR0FBRyxFQUFFO1FBQzVELE1BQU0vQixVQUFVOEIsaUJBQWlCN0IsUUFBUTZCLE1BQU05QixPQUFPLEdBQUc7UUFFekQsSUFBRytCLE9BQU9DLFFBQVEsQ0FBQyxzQkFBc0JELE9BQU9DLFFBQVEsQ0FBQyxzQkFBc0JoQyxZQUFZLHFCQUFxQkEsWUFBWSxtQkFBbUI7WUFDN0ksTUFBTWpCLHlCQUF5QkM7WUFDL0IsT0FBTyxDQUFDO1FBQ1Y7UUFFQSxNQUFNOEM7SUFDUjtBQUNGLEVBQUU7QUFFRixPQUFPLE1BQU1NLHNCQUFzQixDQUNqQ3BELE1BQ0FxRDtJQUVBLE1BQU1DLGlCQUFpQkMsT0FBT0YsWUFBWSxJQUFJRyxJQUFJO0lBRWxELElBQUczRSxRQUFReUUsaUJBQWlCO1FBQzFCLE1BQU0sSUFBSWpGLFNBQVM7WUFBQztnQkFBRTJDLFNBQVM7WUFBYztTQUFFLEVBQUUsSUFBSUMsTUFBTTtJQUM3RDtJQUVBLElBQUcsZ0JBQWdCd0MsSUFBSSxDQUFDSCxtQkFBbUJBLGVBQWVJLFVBQVUsQ0FBQyxNQUFNO1FBQ3pFLE9BQU9KO0lBQ1Q7SUFFQSxNQUFNbkMsU0FBU2xDLGtCQUFrQmU7SUFDakMsTUFBTTJELHFCQUFxQnhDLE9BQU9LLEdBQUcsRUFBRW9DLEtBQUtDLFdBQVcsQ0FBQ1AsZUFBZSxJQUFJO0lBRTNFLElBQUd6RSxRQUFROEUscUJBQXFCO1FBQzlCLE1BQU0sSUFBSXRGLFNBQVM7WUFBQztnQkFBRTJDLFNBQVM7WUFBYztTQUFFLEVBQUUsSUFBSUMsTUFBTSxDQUFDLDZCQUE2QixFQUFFcUMsZ0JBQWdCO0lBQzdHO0lBRUEsT0FBT0s7QUFDVCxFQUFFO0FBRUYsT0FBTyxNQUFNRyxjQUFjLE9BQ3pCOUQsTUFDQXFELFVBQ0FVLFNBQXFCLEtBQUssRUFDMUJDLFFBQ0E3QixVQUEwQixDQUFDLENBQUM7SUFFNUIsTUFBTSxFQUFDRixlQUFlLEtBQUssRUFBRUcsU0FBUyxFQUFFLEdBQUc2QixlQUFjLEdBQUc5QjtJQUM1RCxNQUFNSCxNQUFNb0Isb0JBQW9CcEQsTUFBTXFEO0lBQ3RDLE1BQU1hLGdCQUFnQlgsT0FBT1EsVUFBVSxPQUFPSSxXQUFXO0lBQ3pELE1BQU05QixRQUFtQjtRQUN2QitCLFNBQVM7WUFBQ0wsUUFBUUc7WUFBZUY7WUFBUWhDO1FBQUc7UUFDNUNNLGdCQUFnQkYsYUFBYyxDQUFBLEtBQU8sQ0FBQTtJQUN2QztJQUVBLElBQUk7UUFDRixNQUFNRyxjQUFzQnZDLEtBQUtRLFFBQVEsQ0FBQztRQUUxQyxJQUFHK0IsZ0JBQWdCLFFBQVE7WUFDekIsT0FBT3ZDLEtBQUtFLFFBQVEsQ0FBQztnQkFBQ21DO2dCQUFPakMsTUFBTXJCLGNBQWN5RCxpQkFBaUI7WUFBQTtRQUNwRTtRQUVBLE1BQU05QixRQUFRdUIsZUFBZSxNQUFNM0IsaUJBQWlCTixRQUFRaUUsY0FBY3ZELEtBQUs7UUFDL0UsTUFBTTJELGlCQUFvQztZQUN4QyxHQUFHSixhQUFhO1lBQ2hCLEdBQUl2RCxRQUFRO2dCQUFDQTtZQUFLLElBQUksQ0FBQyxDQUFDO1FBQzFCO1FBQ0EsSUFBSWtDO1FBRUosT0FBT3NCO1lBQ0wsS0FBSztnQkFDSHRCLE9BQU8sTUFBTXJFLElBQUl5RCxLQUFLZ0MsUUFBUUs7Z0JBQzlCO1lBRUYsS0FBSztnQkFDSHpCLE9BQU8sTUFBTXBFLElBQUl3RCxLQUFLZ0MsUUFBUUs7Z0JBQzlCO1lBRUYsS0FBSztnQkFDSHpCLE9BQU8sTUFBTWxFLEtBQUtzRCxLQUFLZ0MsUUFBUUs7Z0JBQy9CO1lBRUYsS0FBSztnQkFDSHpCLE9BQU8sTUFBTWpFLElBQUlxRCxLQUFLZ0MsUUFBUUs7Z0JBQzlCO1lBRUY7Z0JBQ0V6QixPQUFPLE1BQU10RSxLQUFLMEQsS0FBS2tDLGVBQWVGLFFBQVFLO2dCQUM5QztRQUNKO1FBRUEsTUFBTXJFLEtBQUtFLFFBQVEsQ0FBQztZQUFDRSxNQUFNckIsY0FBYzRELG1CQUFtQjtRQUFBO1FBRTVELE9BQU9QLFlBQVlBLFVBQVVRLFFBQVFBO0lBQ3ZDLEVBQUUsT0FBTUUsT0FBTztRQUNiLE1BQU1DLFNBQVNELGlCQUFpQnpFLFdBQVd5RSxNQUFNQyxNQUFNLEdBQUcsRUFBRTtRQUM1RCxNQUFNL0IsVUFBVThCLGlCQUFpQjdCLFFBQVE2QixNQUFNOUIsT0FBTyxHQUFHO1FBRXpELElBQUcrQixPQUFPQyxRQUFRLENBQUMsc0JBQXNCRCxPQUFPQyxRQUFRLENBQUMsc0JBQXNCaEMsWUFBWSxxQkFBcUJBLFlBQVksbUJBQW1CO1lBQzdJLE1BQU1qQix5QkFBeUJDO1lBQy9CLE9BQU8sQ0FBQztRQUNWO1FBRUEsTUFBTThDO0lBQ1I7QUFDRixFQUFFO0FBRUYsT0FBTyxNQUFNd0IsY0FBYyxDQUN6QkMsTUFDQUMsVUFDQUMsWUFBK0IsQ0FBQyxDQUFDLEVBQ2pDQyxtQkFBNkIsRUFBRSxFQUMvQnRFLE9BQU8sT0FBTztJQUVkLE1BQU11RSxpQkFBaUI7UUFBQyxHQUFHRixhQUFhLENBQUMsQ0FBQztJQUFBO0lBQzFDLE1BQU1HLGVBQWVDLE9BQU9DLElBQUksQ0FBQ0g7SUFDakMsTUFBTUksWUFBWVIsS0FBS1MsT0FBTyxDQUFDLE1BQU07SUFDckMsSUFBSTlDO0lBRUosSUFBRzlCLFNBQVMsWUFBWTtRQUN0QixNQUFNNkUsZUFBZW5HLFdBQVdGLFVBQVU0RixhQUFhMUYsV0FBV0YsVUFBVW1HO1FBQzVFN0MsUUFBUSxHQUFHOUIsS0FBSyxDQUFDLEVBQUU2RSxlQUNqQkwsYUFBYU0sTUFBTSxHQUNmLENBQUMsQ0FBQyxFQUFFTixhQUFhTyxHQUFHLENBQUMsQ0FBQ0MsTUFBUSxDQUFDLENBQUMsRUFBRUEsSUFBSSxFQUFFLEVBQUVULGNBQWMsQ0FBQ1MsSUFBSSxDQUFDaEYsSUFBSSxFQUFFLEVBQUVpRixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FDbkYsR0FDTDtNQUNDLEVBQUViLFNBQVM7UUFDVCxFQUFFNUYsVUFBVW1HLGFBQ1ZILGFBQWFNLE1BQU0sR0FDZixDQUFDLENBQUMsRUFBRU4sYUFBYU8sR0FBRyxDQUFDLENBQUNDLE1BQVEsR0FBR0EsSUFBSSxHQUFHLEVBQUVBLEtBQUssRUFBRUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQzlELEdBQ0w7UUFDRCxFQUFFWCxrQkFBa0JRLFNBQVMsQ0FBQyxDQUFDLEVBQUVSLGlCQUFpQlcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRzs7S0FFeEUsQ0FBQztJQUNKLE9BQU87UUFDTG5ELFFBQVEsR0FBRzlCLEtBQUssQ0FBQyxFQUFFMkUsWUFDakJILGFBQWFNLE1BQU0sR0FDZixDQUFDLENBQUMsRUFBRU4sYUFBYU8sR0FBRyxDQUFDLENBQUNDLE1BQVEsQ0FBQyxDQUFDLEVBQUVBLElBQUksRUFBRSxFQUFFVCxjQUFjLENBQUNTLElBQUksQ0FBQ2hGLElBQUksRUFBRSxFQUFFaUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQ25GLEdBQ0w7TUFDQyxFQUFFYixTQUFTO1FBQ1QsRUFBRTVGLFVBQVVtRyxhQUNWSCxhQUFhTSxNQUFNLEdBQ2YsQ0FBQyxDQUFDLEVBQUVOLGFBQWFPLEdBQUcsQ0FBQyxDQUFDQyxNQUFRLEdBQUdBLElBQUksR0FBRyxFQUFFQSxLQUFLLEVBQUVDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUM5RCxHQUNMO1FBQ0QsRUFBRVgsa0JBQWtCUSxTQUFTLENBQUMsQ0FBQyxFQUFFUixpQkFBaUJXLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEdBQUc7O0tBRXhFLENBQUM7SUFDSjtJQUVBLE1BQU1DLG1CQUFtQlYsYUFBYVcsTUFBTSxDQUEwQixDQUFDQyxXQUFXSjtRQUNoRkksU0FBUyxDQUFDSixJQUFJLEdBQUdULGNBQWMsQ0FBQ1MsSUFBSSxDQUFDSyxLQUFLO1FBQzFDLE9BQU9EO0lBQ1QsR0FBRyxDQUFDO0lBRUosT0FBTztRQUFDdEQ7UUFBT3VDLFdBQVdhO0lBQWdCO0FBQzVDLEVBQUU7QUFFRixPQUFPLE1BQU1JLGlCQUFpQixDQUM1Qm5CLE1BQ0FDLFVBQ0FDLFlBQStCLENBQUMsQ0FBQyxFQUNqQ0MsbUJBQTZCLEVBQUUsR0FDNUJKLFlBQVlDLE1BQU1DLFVBQVVDLFdBQVdDLGtCQUFrQixZQUFZO0FBRTFFLE9BQU8sTUFBTWlCLFdBQVcsQ0FDdEIzRixNQUNBdUUsTUFDQUMsVUFDQUcsZ0JBQ0FELGtCQUNBdkMsVUFBc0IsQ0FBQyxDQUFDO0lBRXhCLE1BQU1ELFFBQVFvQyxZQUFZQyxNQUFNQyxVQUFVRyxnQkFBZ0JEO0lBQzFELE1BQU12RCxTQUFTbEMsa0JBQWtCZTtJQUNqQyxNQUFNNEYsU0FBaUJ6RSxPQUFPSyxHQUFHLEVBQUVvQyxLQUFLNUIsT0FBTztJQUMvQyxPQUFPRCxXQUFXL0IsTUFBTTRGLFFBQVEsTUFBTTFELE9BQU9DO0FBQy9DLEVBQUU7QUFFRixPQUFPLE1BQU0wRCxjQUFjLENBQ3pCN0YsTUFDQXVFLE1BQ0FDLFVBQ0FHLGdCQUNBRCxrQkFDQXZDLFVBQXNCLENBQUMsQ0FBQztJQUV4QixNQUFNRCxRQUFRd0QsZUFBZW5CLE1BQU1DLFVBQVVHLGdCQUFnQkQ7SUFDN0QsTUFBTXZELFNBQVNsQyxrQkFBa0JlO0lBQ2pDLE1BQU00RixTQUFpQnpFLE9BQU9LLEdBQUcsRUFBRW9DLEtBQUs1QixPQUFPO0lBQy9DLE9BQU9ELFdBQVcvQixNQUFNNEYsUUFBUSxNQUFNMUQsT0FBT0M7QUFDL0MsRUFBRTtBQUVGLE9BQU8sTUFBTTJELGNBQWMsQ0FDekI5RixNQUNBdUUsTUFDQUMsVUFDQUcsZ0JBQ0FELGtCQUNBdkMsVUFBc0IsQ0FBQyxDQUFDO0lBRXhCLE1BQU1ELFFBQVFvQyxZQUFZQyxNQUFNQyxVQUFVRyxnQkFBZ0JEO0lBQzFELE1BQU12RCxTQUFTbEMsa0JBQWtCZTtJQUNqQyxNQUFNK0YsWUFBb0I1RSxPQUFPSyxHQUFHLEVBQUVvQyxLQUFLb0MsVUFBVTtJQUNyRCxPQUFPakUsV0FBVy9CLE1BQU0rRixXQUFXLE9BQU83RCxPQUFPQztBQUNuRCxFQUFFO0FBRUYsT0FBTyxNQUFNOEQsaUJBQWlCLENBQzVCakcsTUFDQXVFLE1BQ0FDLFVBQ0FHLGdCQUNBRCxrQkFDQXZDLFVBQXNCLENBQUMsQ0FBQztJQUV4QixNQUFNRCxRQUFRd0QsZUFBZW5CLE1BQU1DLFVBQVVHLGdCQUFnQkQ7SUFDN0QsTUFBTXZELFNBQVNsQyxrQkFBa0JlO0lBQ2pDLE1BQU0rRixZQUFvQjVFLE9BQU9LLEdBQUcsRUFBRW9DLEtBQUtvQyxVQUFVO0lBQ3JELE9BQU9qRSxXQUFXL0IsTUFBTStGLFdBQVcsT0FBTzdELE9BQU9DO0FBQ25ELEVBQUU7QUFFRixPQUFPLE1BQU0rRCxjQUFjLENBQ3pCbEcsTUFDQXVFLE1BQ0FDLFVBQ0FHLGdCQUNBRCxrQkFDQXZDLFVBQXNCLENBQUMsQ0FBQztJQUV4QixNQUFNRCxRQUFRd0QsZUFBZW5CLE1BQU1DLFVBQVVHLGdCQUFnQkQ7SUFDN0QsTUFBTXZELFNBQVNsQyxrQkFBa0JlO0lBQ2pDLE1BQU1tRyxTQUFpQmhGLE9BQU9LLEdBQUcsRUFBRW9DLEtBQUt3QyxPQUFPakYsT0FBT0ssR0FBRyxFQUFFb0MsS0FBS29DLFVBQVU7SUFDMUUsT0FBT2pFLFdBQVcvQixNQUFNbUcsUUFBUSxPQUFPakUsT0FBT0M7QUFDaEQsRUFBRTtBQUVGLE9BQU8sTUFBTWtFLGFBQWEsQ0FDeEJyRyxNQUNBc0csT0FDQW5FLFVBQTBCLENBQUMsQ0FBQztJQUU1QixNQUFNaEIsU0FBU2xDLGtCQUFrQmU7SUFDakMsTUFBTW1HLFNBQWlCaEYsT0FBT0ssR0FBRyxFQUFFb0MsS0FBS0MsV0FBV3VDLE9BQU9qRixPQUFPSyxHQUFHLEVBQUVvQyxLQUFLd0MsT0FBTztJQUVsRixPQUFPdEMsWUFBZTlELE1BQU1tRyxRQUFRLFFBQVFHLE9BQU87UUFBQyxHQUFHbkUsT0FBTztRQUFFRixjQUFjO0lBQUs7QUFDckYsRUFBRTtBQUVGLE9BQU8sTUFBTXNFLGNBQWMsQ0FDekJ2RyxNQUNBd0csT0FDQXJFLFVBQTZCLENBQUMsQ0FBQztJQUUvQixNQUFNaEIsU0FBU2xDLGtCQUFrQmU7SUFDakMsTUFBTXlHLGlCQUF5QnRGLE9BQU9LLEdBQUcsRUFBRW9DLEtBQUsyQyxlQUFlO0lBQy9ELE1BQU03RixRQUFRVixLQUFLUSxRQUFRLENBQUM7SUFFNUIsSUFBRzNCLFFBQVE0SCxpQkFBaUI7UUFDMUIsT0FBT3hELFFBQVFDLE1BQU0sQ0FBQyxJQUFJN0UsU0FBUztZQUFDO2dCQUFFMkMsU0FBUztZQUFjO1NBQUUsRUFBRSxJQUFJQyxNQUFNO0lBQzdFO0lBRUEsSUFBR3BDLFFBQVE2QixRQUFRO1FBQ2pCLE9BQU91QyxRQUFRQyxNQUFNLENBQUMsSUFBSTdFLFNBQVM7WUFBQztnQkFBRTJDLFNBQVM7WUFBa0I7U0FBRSxFQUFFLElBQUlDLE1BQU07SUFDakY7SUFFQSxNQUFNeUYsVUFBVSxJQUFJQztJQUNwQkQsUUFBUUUsR0FBRyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRWxHLE9BQU87SUFFOUMsSUFBRyxPQUFPbUcsYUFBYSxlQUFlTCxpQkFBaUJLLFVBQVU7UUFDL0RILFFBQVFFLEdBQUcsQ0FBQyxVQUFVO1FBRXRCLE9BQU9FLE1BQU1MLGdCQUFnQjtZQUMzQk0sTUFBTVA7WUFDTkU7WUFDQTNDLFFBQVE7UUFDVixHQUFHdEIsSUFBSSxDQUFDLE9BQU91RTtZQUNiLE1BQU1DLGVBQWVELFNBQVNOLE9BQU8sQ0FBQ2xJLEdBQUcsQ0FBQyxtQkFBbUI7WUFDN0QsTUFBTW9FLE9BQU9xRSxhQUFhakUsUUFBUSxDQUFDLHNCQUMvQixNQUFNZ0UsU0FBU0UsSUFBSSxLQUNuQixNQUFNRixTQUFTRyxJQUFJO1lBRXZCLElBQUcsQ0FBQ0gsU0FBU0ksRUFBRSxFQUFFO2dCQUNmLE1BQU1wRyxVQUFVLE9BQU80QixTQUFTLFlBQVlBLFFBQVEsV0FBV0EsT0FDM0RXLE9BQU8sQUFBQ1gsS0FBMEJFLEtBQUssSUFBSWtFLFNBQVNLLFVBQVUsSUFDOUQ5RCxPQUFPWCxRQUFRb0UsU0FBU0ssVUFBVTtnQkFDdEMsTUFBTSxJQUFJaEosU0FBUztvQkFBQzt3QkFBRTJDLFNBQVM7b0JBQWU7aUJBQUUsRUFBRSxJQUFJQyxNQUFNRDtZQUM5RDtZQUVBLE9BQU80QjtRQUNUO0lBQ0Y7SUFFQSxPQUFPbEUsS0FBSytILGdCQUFnQkQsT0FBTztRQUFDRTtRQUFTLEdBQUd2RSxPQUFPO0lBQUE7QUFDekQsRUFBRTtBQUVGLE9BQU8sTUFBTU4saUJBQWlCLE9BQzVCN0IsTUFDQVUsT0FDQUM7SUFFQSxNQUFNMkcsZUFBZXpJLFFBQVE2QixTQUFTVixLQUFLUSxRQUFRLENBQUMsd0JBQXdCRTtJQUU1RSxJQUFHN0IsUUFBUXlJLGVBQWU7UUFDeEIsT0FBTztJQUNUO0lBRUEsTUFBTXBHLGlCQUFpQjdCLGlCQUFpQmtFLE9BQU8rRDtJQUUvQyxJQUFHcEcsaUJBQWlCLEtBQUtyQixLQUFLQyxHQUFHLE1BQU1vQixnQkFBZ0I7UUFDckQsTUFBTTRCLFFBQVEsSUFBSTdCLE1BQU07UUFDeEIsTUFBTWxCLHlCQUF5QkM7UUFDL0JBLEtBQUtFLFFBQVEsQ0FBQztZQUFDNEM7WUFBTzFDLE1BQU1wQixlQUFldUksaUJBQWlCO1FBQUE7UUFDNUQsT0FBTztJQUNUO0lBRUEsSUFBSTtRQUNGLE1BQU1wRyxTQUFTbEMsa0JBQWtCZTtRQUNqQyxNQUFNd0gsbUJBQW1CN0gsS0FBSytCLEdBQUcsQ0FDL0IsR0FDQUwsT0FBT1YsV0FBV1EsT0FBT0ssR0FBRyxFQUFFckIsU0FBU3dCLGNBQWNuQztRQUV2RCxNQUFNbUYsaUJBQWlCO1lBQ3JCaEUsU0FBUztnQkFDUFAsTUFBTTtnQkFDTnFGLE9BQU8rQjtZQUNUO1lBQ0E5RyxPQUFPO2dCQUNMTixNQUFNO2dCQUNOcUYsT0FBTzZCO1lBQ1Q7UUFDRjtRQUNBLE1BQU1sRixZQUFZLE9BQU9RLE9BQXVCLENBQUMsQ0FBQztZQUNoRCxNQUFNNkUsaUJBQWtCN0UsTUFBK0Q4RSxPQUFPN0Y7WUFDOUYsTUFBTThGLGNBQWNGLGtCQUFrQixPQUFPQSxtQkFBbUIsV0FDNURBLGlCQUNBLENBQUM7WUFDTCxNQUFNRyxpQkFBa0I1SCxLQUFLUSxRQUFRLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO1lBQzlELE1BQU1xSCxnQkFBZ0IsTUFBTXZJLGFBQWFVLE1BQU07Z0JBQUMsR0FBRzRILGNBQWM7Z0JBQUUsR0FBR0QsV0FBVztZQUFBO1lBQ2pGLE9BQU8zSCxLQUFLRSxRQUFRLENBQUM7Z0JBQUNDLFNBQVMwSDtnQkFBZXpILE1BQU1wQixlQUFlOEksc0JBQXNCO1lBQUE7UUFDM0Y7UUFFQSxPQUFPLE1BQU03QixlQUFlakcsTUFBTSxrQkFBa0IsU0FBUzJFLGdCQUFnQjtZQUFDO1lBQVc7WUFBVTtTQUFRLEVBQUU7WUFDM0d2QztRQUNGO0lBQ0YsRUFBRSxPQUFNVSxPQUFPO1FBQ2IsTUFBTWlGLGVBQWVqRixpQkFBaUI3QixRQUFRNkIsTUFBTTlCLE9BQU8sR0FBRztRQUU5RCxJQUFHK0csaUJBQWlCLHFCQUFxQkEsaUJBQWlCLG1CQUFtQjtZQUMzRSxNQUFNaEkseUJBQXlCQztRQUNqQztRQUVBQSxLQUFLRSxRQUFRLENBQUM7WUFBQzRDO1lBQU8xQyxNQUFNcEIsZUFBZXVJLGlCQUFpQjtRQUFBO1FBQzVELE9BQU87SUFDVDtBQUNGLEVBQUUifQ==
382
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvYXBpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXBpRXJyb3IsIGFqYXgsIGRlbCwgZ2V0LCBncmFwaHFsUXVlcnksIHBvc3QsIHB1dH0gZnJvbSAnQG5sYWJzL3JpcC1odW50ZXInO1xuaW1wb3J0IHtjYW1lbENhc2UsIGlzRW1wdHksIHVwcGVyRmlyc3R9IGZyb20gJ0BubGFicy91dGlscyc7XG5cbmltcG9ydCB7QVBQX0NPTlNUQU5UU30gZnJvbSAnLi4vc3RvcmVzL2FwcFN0b3JlLmpzJztcbmltcG9ydCB7VVNFUl9DT05TVEFOVFN9IGZyb20gJy4uL3N0b3Jlcy91c2VyU3RvcmUuanMnO1xuaW1wb3J0IHtnZXRDb25maWdGcm9tRmx1eH0gZnJvbSAnLi9jb25maWdVdGlscy5qcyc7XG5pbXBvcnQge2NsZWFyUGVyc2lzdGVkU2Vzc2lvbiwgZ2V0UmVmcmVzaFdpbmRvd01pbnV0ZXMsIGh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UsIHBhcnNlSnd0RXhwaXJ5TXMsIHN0b3JlU2Vzc2lvbn0gZnJvbSAnLi9zZXNzaW9uLmpzJztcblxuaW1wb3J0IHR5cGUge0ZsdXhBY3Rpb24sIEZsdXhGcmFtZXdvcmt9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5pbXBvcnQgdHlwZSB7SHVudGVyT3B0aW9uc1R5cGUsIEh1bnRlclF1ZXJ5VHlwZX0gZnJvbSAnQG5sYWJzL3JpcC1odW50ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwaU9wdGlvbnMge1xuICByZWFkb25seSBvblN1Y2Nlc3M/OiAoZGF0YTogYW55KSA9PiBQcm9taXNlPEZsdXhBY3Rpb24+O1xuICByZWFkb25seSB2YXJpYWJsZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuZXhwb3J0IHR5cGUgUmVzdE1ldGhvZCA9ICdERUxFVEUnIHwgJ0dFVCcgfCAnUEFUQ0gnIHwgJ1BPU1QnIHwgJ1BVVCcgfCAoc3RyaW5nICYge30pO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3RBcGlPcHRpb25zIGV4dGVuZHMgSHVudGVyT3B0aW9uc1R5cGUge1xuICByZWFkb25seSBhdXRoZW50aWNhdGU/OiBib29sZWFuO1xuICByZWFkb25seSBvblN1Y2Nlc3M/OiAoZGF0YTogYW55KSA9PiBhbnk7XG59XG5cbmV4cG9ydCB0eXBlIFJlYWt0b3JEYkNvbGxlY3Rpb24gPVxuICAnYXBwcycgfFxuICAnY29ubmVjdGlvbnMnIHxcbiAgJ2NvbnRlbnRzJyB8XG4gICdjb252ZXJzYXRpb25zJyB8XG4gICdjcm0nIHxcbiAgJ2V2ZW50cycgfFxuICAnZmlsZXMnIHxcbiAgJ2dyb3VwcycgfFxuICAnaW1hZ2VzJyB8XG4gICdsb2NhdGlvbnMnIHxcbiAgJ21lc3NhZ2VzJyB8XG4gICdub3RpZmljYXRpb25zJyB8XG4gICdwYXltZW50cycgfFxuICAncGVybWlzc2lvbnMnIHxcbiAgJ3Bvc3RzJyB8XG4gICdwZXJzb25hcycgfFxuICAncmVhY3Rpb25zJyB8XG4gICdydW0nIHxcbiAgJ3N1YnNjcmlwdGlvbnMnIHxcbiAgJ3RhZ3MnIHxcbiAgJ3RyYW5zbGF0aW9ucycgfFxuICAndXNlcnMnIHxcbiAgJ3ZpZGVvcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpUXVlcnlWYXJpYWJsZVR5cGUge1xuICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZhbHVlOiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwaVF1ZXJ5VmFyaWFibGVzIHtcbiAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogQXBpUXVlcnlWYXJpYWJsZVR5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBpUmVzdWx0c1R5cGUge1xuICByZWFkb25seSBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5VHlwZSB7XG4gIHJlYWRvbmx5IHF1ZXJ5PzogSHVudGVyUXVlcnlUeXBlIHwgSHVudGVyUXVlcnlUeXBlW107XG4gIHJlYWRvbmx5IHJlcXVlc3Q/OiB7XG4gICAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcGFyYW1zPzogdW5rbm93bjtcbiAgICByZWFkb25seSB1cmw6IHN0cmluZztcbiAgfTtcbiAgcmVhZG9ubHkgcmVzcG9uc2VNZXRob2Q6IChyZXN1bHRzOiBBcGlSZXN1bHRzVHlwZSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uVHlwZSB7XG4gIHJlYWRvbmx5IGV4cGlyZXM/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGlzc3VlZD86IG51bWJlcjtcbiAgcmVhZG9ubHkgdG9rZW4/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVzZXJJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgdXNlcm5hbWU/OiBzdHJpbmc7XG59XG5cbmNvbnN0IERFRkFVTFRfUkVGUkVTSF9XSU5ET1dfTUlOVVRFUyA9IDU7XG5jb25zdCBERUZBVUxUX1NFU1NJT05fTUFYX01JTlVURVMgPSAxNTtcblxuY29uc3QgZ2V0TWludXRlc1VudGlsID0gKGV4cGlyZXNBdDogbnVtYmVyKTogbnVtYmVyID0+XG4gIE1hdGgucm91bmQoKGV4cGlyZXNBdCAtIERhdGUubm93KCkpIC8gKDEwMDAgKiA2MCkpO1xuXG5jb25zdCBjbGVhckludmFsaWRTZXNzaW9uU3RhdGUgPSBhc3luYyAoZmx1eDogRmx1eEZyYW1ld29yayk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBhd2FpdCBjbGVhclBlcnNpc3RlZFNlc3Npb24oZmx1eCk7XG4gIGF3YWl0IGZsdXguY2xlYXJBcHBEYXRhKCk7XG4gIGF3YWl0IGZsdXguZGlzcGF0Y2goe3Nlc3Npb246IHt9LCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5TSUdOX09VVF9TVUNDRVNTfSk7XG59O1xuXG5jb25zdCByZXNvbHZlQXV0aFRva2VuID0gYXN5bmMgKGZsdXg6IEZsdXhGcmFtZXdvcmspOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBzdGF0ZVNlc3Npb246IFNlc3Npb25UeXBlID0gKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicpIHx8IHt9KSBhcyBTZXNzaW9uVHlwZTtcbiAgY29uc3QgaHlkcmF0ZWRTZXNzaW9uOiBTZXNzaW9uVHlwZSA9IHN0YXRlU2Vzc2lvbi50b2tlbiA/IHN0YXRlU2Vzc2lvbiA6IGF3YWl0IGh5ZHJhdGVTZXNzaW9uRnJvbVN0b3JhZ2UoZmx1eCk7XG4gIGNvbnN0IHtcbiAgICBleHBpcmVzOiBhdXRoRXhwaXJlcyA9IDAsXG4gICAgaXNzdWVkOiBhdXRoSXNzdWVkID0gMCxcbiAgICB0b2tlbjogaHlkcmF0ZWRUb2tlblxuICB9OiBTZXNzaW9uVHlwZSA9IGh5ZHJhdGVkU2Vzc2lvbiB8fCB7fTtcbiAgbGV0IHRva2VuID0gaHlkcmF0ZWRUb2tlbiB8fCBzdGF0ZVNlc3Npb24udG9rZW47XG5cbiAgaWYoIXRva2VuKSB7XG4gICAgdGhyb3cgbmV3IEFwaUVycm9yKFt7IG1lc3NhZ2U6ICdpbnZhbGlkX3Nlc3Npb24nIH1dLCBuZXcgRXJyb3IoJ2ludmFsaWRfc2Vzc2lvbicpKTtcbiAgfVxuXG4gIGNvbnN0IHRva2VuRXhwaXJlc0F0ID0gcGFyc2VKd3RFeHBpcnlNcyh0b2tlbik7XG5cbiAgaWYodG9rZW5FeHBpcmVzQXQgPiAwICYmIERhdGUubm93KCkgPj0gdG9rZW5FeHBpcmVzQXQpIHtcbiAgICB0aHJvdyBuZXcgQXBpRXJyb3IoW3sgbWVzc2FnZTogJ2V4cGlyZWRfc2Vzc2lvbicgfV0sIG5ldyBFcnJvcignZXhwaXJlZF9zZXNzaW9uJykpO1xuICB9XG5cbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnRnJvbUZsdXgoZmx1eCk7XG4gIGNvbnN0IG1pbnV0ZXNVbnRpbEV4cGlyeSA9IGdldE1pbnV0ZXNVbnRpbChOdW1iZXIoYXV0aEV4cGlyZXMgfHwgMCkpO1xuICBjb25zdCBzZXNzaW9uTGlmZXRpbWVNaW51dGVzID0gTWF0aC5yb3VuZCgoYXV0aEV4cGlyZXMgLSBhdXRoSXNzdWVkKSAvICgxMDAwICogNjApKTtcbiAgY29uc3QgcmVmcmVzaFdpbmRvd01pbnV0ZXMgPSBnZXRSZWZyZXNoV2luZG93TWludXRlcyhcbiAgICBzZXNzaW9uTGlmZXRpbWVNaW51dGVzIHx8IERFRkFVTFRfU0VTU0lPTl9NQVhfTUlOVVRFUyxcbiAgICBjb25maWcuYXBwPy5zZXNzaW9uIHx8IHt9XG4gICk7XG4gIGNvbnN0IHJlZnJlc2hFeHBpcmVzTWludXRlcyA9IE1hdGgubWF4KFxuICAgIDEsXG4gICAgTnVtYmVyKGNvbmZpZy5hcHA/LnNlc3Npb24/Lm1heE1pbnV0ZXMgfHwgc2Vzc2lvbkxpZmV0aW1lTWludXRlcyB8fCBERUZBVUxUX1NFU1NJT05fTUFYX01JTlVURVMpXG4gICk7XG5cbiAgaWYobWludXRlc1VudGlsRXhwaXJ5ID4gMCAmJiBtaW51dGVzVW50aWxFeHBpcnkgPD0gcmVmcmVzaFdpbmRvd01pbnV0ZXMpIHtcbiAgICBjb25zdCB7XG4gICAgICBzZXNzaW9uOiB1cGRhdGVkU2Vzc2lvbiA9IHt9XG4gICAgfTogQXBpUmVzdWx0c1R5cGUgPSAoYXdhaXQgcmVmcmVzaFNlc3Npb24oZmx1eCwgdG9rZW4sIHJlZnJlc2hFeHBpcmVzTWludXRlcykpIHx8IHt9O1xuICAgIGNvbnN0IHt0b2tlbjogbmV3VG9rZW59OiBTZXNzaW9uVHlwZSA9ICh1cGRhdGVkU2Vzc2lvbiB8fCB7fSk7XG5cbiAgICBpZighbmV3VG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBBcGlFcnJvcihbeyBtZXNzYWdlOiAnaW52YWxpZF9zZXNzaW9uJyB9XSwgbmV3IEVycm9yKCdpbnZhbGlkX3Nlc3Npb24nKSk7XG4gICAgfVxuXG4gICAgdG9rZW4gPSBuZXdUb2tlbjtcbiAgfVxuXG4gIHJldHVybiB0b2tlbjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcmFwaHFsID0gYXN5bmMgKFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICB1cmw6IHN0cmluZyxcbiAgYXV0aGVudGljYXRlOiBib29sZWFuLFxuICBxdWVyeTogSHVudGVyUXVlcnlUeXBlIHwgSHVudGVyUXVlcnlUeXBlW10sXG4gIG9wdGlvbnM6IEFwaU9wdGlvbnNcbik6IFByb21pc2U8QXBpUmVzdWx0c1R5cGU+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7b25TdWNjZXNzfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgcmV0cnk6IFJldHJ5VHlwZSA9IHtxdWVyeSwgcmVzcG9uc2VNZXRob2Q6IG9uU3VjY2VzcyB8fCAoKCkgPT4ge30pfTtcbiAgICBjb25zdCBuZXR3b3JrVHlwZTogc3RyaW5nID0gZmx1eC5nZXRTdGF0ZSgnYXBwLm5ldHdvcmtUeXBlJykgYXMgc3RyaW5nO1xuXG4gICAgaWYobmV0d29ya1R5cGUgPT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe3JldHJ5LCB0eXBlOiBBUFBfQ09OU1RBTlRTLkFQSV9ORVRXT1JLX0VSUk9SfSk7XG4gICAgfVxuXG4gICAgbGV0IHRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBpZihhdXRoZW50aWNhdGUpIHtcbiAgICAgIHRva2VuID0gYXdhaXQgcmVzb2x2ZUF1dGhUb2tlbihmbHV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JhcGhxbFF1ZXJ5KHVybCwgcXVlcnksIHt0b2tlbjogdG9rZW4gfHwgJyd9KVxuICAgICAgLnRoZW4oYXN5bmMgKHJlc3VsdHMpID0+IHtcbiAgICAgICAgYXdhaXQgZmx1eC5kaXNwYXRjaCh7dHlwZTogQVBQX0NPTlNUQU5UUy5BUElfTkVUV09SS19TVUNDRVNTfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKGRhdGEpID0+IChvblN1Y2Nlc3MgPyBvblN1Y2Nlc3MoZGF0YSkgOiBkYXRhKSlcbiAgICAgIC5jYXRjaChhc3luYyAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc3Qge2Vycm9ycyA9IFtdfSA9IGVycm9yO1xuXG4gICAgICAgIGlmKG9uU3VjY2VzcyAmJiBlcnJvcnMuaW5jbHVkZXMoJ25ldHdvcmtfZXJyb3InKSkge1xuICAgICAgICAgIGF3YWl0IGZsdXguZGlzcGF0Y2goe3JldHJ5LCB0eXBlOiBBUFBfQ09OU1RBTlRTLkFQSV9ORVRXT1JLX0VSUk9SfSk7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSBlbHNlIGlmKGVycm9ycy5pbmNsdWRlcygnaW52YWxpZF9zZXNzaW9uJykgfHwgZXJyb3JzLmluY2x1ZGVzKCdleHBpcmVkX3Nlc3Npb24nKSkge1xuICAgICAgICAgIGF3YWl0IGNsZWFySW52YWxpZFNlc3Npb25TdGF0ZShmbHV4KTtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgICB9KTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGNvbnN0IGVycm9ycyA9IGVycm9yIGluc3RhbmNlb2YgQXBpRXJyb3IgPyBlcnJvci5lcnJvcnMgOiBbXTtcbiAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnJztcblxuICAgIGlmKGVycm9ycy5pbmNsdWRlcygnaW52YWxpZF9zZXNzaW9uJykgfHwgZXJyb3JzLmluY2x1ZGVzKCdleHBpcmVkX3Nlc3Npb24nKSB8fCBtZXNzYWdlID09PSAnaW52YWxpZF9zZXNzaW9uJyB8fCBtZXNzYWdlID09PSAnZXhwaXJlZF9zZXNzaW9uJykge1xuICAgICAgYXdhaXQgY2xlYXJJbnZhbGlkU2Vzc2lvblN0YXRlKGZsdXgpO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVJlc3RFbmRwb2ludCA9IChcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgZW5kcG9pbnQ6IHN0cmluZ1xuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdGFyZ2V0RW5kcG9pbnQgPSBTdHJpbmcoZW5kcG9pbnQgfHwgJycpLnRyaW0oKTtcblxuICBpZihpc0VtcHR5KHRhcmdldEVuZHBvaW50KSkge1xuICAgIHRocm93IG5ldyBBcGlFcnJvcihbeyBtZXNzYWdlOiAnaW52YWxpZF91cmwnIH1dLCBuZXcgRXJyb3IoJ3Jlc3RfZW5kcG9pbnRfcmVxdWlyZWQnKSk7XG4gIH1cblxuICBpZigvXmh0dHBzPzpcXC9cXC8vaS50ZXN0KHRhcmdldEVuZHBvaW50KSB8fCB0YXJnZXRFbmRwb2ludC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICByZXR1cm4gdGFyZ2V0RW5kcG9pbnQ7XG4gIH1cblxuICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgY29uc3QgY29uZmlndXJlZEVuZHBvaW50ID0gY29uZmlnLmFwcD8uYXBpPy5lbmRwb2ludHM/Llt0YXJnZXRFbmRwb2ludF0gfHwgJyc7XG5cbiAgaWYoaXNFbXB0eShjb25maWd1cmVkRW5kcG9pbnQpKSB7XG4gICAgdGhyb3cgbmV3IEFwaUVycm9yKFt7IG1lc3NhZ2U6ICdpbnZhbGlkX3VybCcgfV0sIG5ldyBFcnJvcihgcmVzdF9lbmRwb2ludF9ub3RfY29uZmlndXJlZDoke3RhcmdldEVuZHBvaW50fWApKTtcbiAgfVxuXG4gIHJldHVybiBjb25maWd1cmVkRW5kcG9pbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgcmVzdFJlcXVlc3QgPSBhc3luYyA8VCA9IEFwaVJlc3VsdHNUeXBlPihcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgZW5kcG9pbnQ6IHN0cmluZyxcbiAgbWV0aG9kOiBSZXN0TWV0aG9kID0gJ0dFVCcsXG4gIHBhcmFtcz86IHVua25vd24sXG4gIG9wdGlvbnM6IFJlc3RBcGlPcHRpb25zID0ge31cbik6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCB7YXV0aGVudGljYXRlID0gZmFsc2UsIG9uU3VjY2VzcywgLi4uaHVudGVyT3B0aW9uc30gPSBvcHRpb25zO1xuICBjb25zdCB1cmwgPSByZXNvbHZlUmVzdEVuZHBvaW50KGZsdXgsIGVuZHBvaW50KTtcbiAgY29uc3QgcmVxdWVzdE1ldGhvZCA9IFN0cmluZyhtZXRob2QgfHwgJ0dFVCcpLnRvVXBwZXJDYXNlKCk7XG4gIGNvbnN0IHJldHJ5OiBSZXRyeVR5cGUgPSB7XG4gICAgcmVxdWVzdDoge21ldGhvZDogcmVxdWVzdE1ldGhvZCwgcGFyYW1zLCB1cmx9LFxuICAgIHJlc3BvbnNlTWV0aG9kOiBvblN1Y2Nlc3MgfHwgKCgpID0+IHt9KVxuICB9O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgbmV0d29ya1R5cGU6IHN0cmluZyA9IGZsdXguZ2V0U3RhdGUoJ2FwcC5uZXR3b3JrVHlwZScpIGFzIHN0cmluZztcblxuICAgIGlmKG5ldHdvcmtUeXBlID09PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtyZXRyeSwgdHlwZTogQVBQX0NPTlNUQU5UUy5BUElfTkVUV09SS19FUlJPUn0pIGFzIFByb21pc2U8VD47XG4gICAgfVxuXG4gICAgY29uc3QgdG9rZW4gPSBhdXRoZW50aWNhdGUgPyBhd2FpdCByZXNvbHZlQXV0aFRva2VuKGZsdXgpIDogaHVudGVyT3B0aW9ucy50b2tlbjtcbiAgICBjb25zdCByZXF1ZXN0T3B0aW9uczogSHVudGVyT3B0aW9uc1R5cGUgPSB7XG4gICAgICAuLi5odW50ZXJPcHRpb25zLFxuICAgICAgLi4uKHRva2VuID8ge3Rva2VufSA6IHt9KVxuICAgIH07XG4gICAgbGV0IGRhdGE6IFQ7XG5cbiAgICBzd2l0Y2gocmVxdWVzdE1ldGhvZCkge1xuICAgICAgY2FzZSAnREVMRVRFJzpcbiAgICAgICAgZGF0YSA9IGF3YWl0IGRlbCh1cmwsIHBhcmFtcywgcmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnR0VUJzpcbiAgICAgICAgZGF0YSA9IGF3YWl0IGdldCh1cmwsIHBhcmFtcywgcmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnUE9TVCc6XG4gICAgICAgIGRhdGEgPSBhd2FpdCBwb3N0KHVybCwgcGFyYW1zLCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdQVVQnOlxuICAgICAgICBkYXRhID0gYXdhaXQgcHV0KHVybCwgcGFyYW1zLCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBkYXRhID0gYXdhaXQgYWpheCh1cmwsIHJlcXVlc3RNZXRob2QsIHBhcmFtcywgcmVxdWVzdE9wdGlvbnMpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBhd2FpdCBmbHV4LmRpc3BhdGNoKHt0eXBlOiBBUFBfQ09OU1RBTlRTLkFQSV9ORVRXT1JLX1NVQ0NFU1N9KTtcblxuICAgIHJldHVybiBvblN1Y2Nlc3MgPyBvblN1Y2Nlc3MoZGF0YSkgOiBkYXRhO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgY29uc3QgZXJyb3JzID0gZXJyb3IgaW5zdGFuY2VvZiBBcGlFcnJvciA/IGVycm9yLmVycm9ycyA6IFtdO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICcnO1xuXG4gICAgaWYoZXJyb3JzLmluY2x1ZGVzKCdpbnZhbGlkX3Nlc3Npb24nKSB8fCBlcnJvcnMuaW5jbHVkZXMoJ2V4cGlyZWRfc2Vzc2lvbicpIHx8IG1lc3NhZ2UgPT09ICdpbnZhbGlkX3Nlc3Npb24nIHx8IG1lc3NhZ2UgPT09ICdleHBpcmVkX3Nlc3Npb24nKSB7XG4gICAgICBhd2FpdCBjbGVhckludmFsaWRTZXNzaW9uU3RhdGUoZmx1eCk7XG4gICAgICByZXR1cm4ge30gYXMgVDtcbiAgICB9XG5cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVF1ZXJ5ID0gKFxuICBuYW1lOiBzdHJpbmcsXG4gIGRhdGFUeXBlOiBSZWFrdG9yRGJDb2xsZWN0aW9uLFxuICB2YXJpYWJsZXM6IEFwaVF1ZXJ5VmFyaWFibGVzID0ge30sXG4gIHJldHVyblByb3BlcnRpZXM6IHN0cmluZ1tdID0gW10sXG4gIHR5cGUgPSAncXVlcnknXG4pID0+IHtcbiAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7Li4udmFyaWFibGVzIHx8IHt9fTtcbiAgY29uc3QgdmFyaWFibGVLZXlzID0gT2JqZWN0LmtleXMocXVlcnlWYXJpYWJsZXMpO1xuICBjb25zdCBxdWVyeU5hbWUgPSBuYW1lLnJlcGxhY2UoLyAvZywgJycpO1xuICBsZXQgcXVlcnk6IHN0cmluZztcblxuICBpZih0eXBlID09PSAnbXV0YXRpb24nKSB7XG4gICAgY29uc3QgbXV0YXRpb25OYW1lID0gdXBwZXJGaXJzdChjYW1lbENhc2UoZGF0YVR5cGUpKSArIHVwcGVyRmlyc3QoY2FtZWxDYXNlKHF1ZXJ5TmFtZSkpO1xuICAgIHF1ZXJ5ID0gYCR7dHlwZX0gJHttdXRhdGlvbk5hbWV9JHtcbiAgICAgIHZhcmlhYmxlS2V5cy5sZW5ndGhcbiAgICAgICAgPyBgKCR7dmFyaWFibGVLZXlzLm1hcCgoa2V5KSA9PiBgJCR7a2V5fTogJHtxdWVyeVZhcmlhYmxlc1trZXldLnR5cGV9YCkuam9pbignLCAnKX0pYFxuICAgICAgICA6ICcnXG4gICAgfSB7XG4gICAgICAke2RhdGFUeXBlfSB7XG4gICAgICAgICR7Y2FtZWxDYXNlKHF1ZXJ5TmFtZSl9JHtcbiAgICAgICAgICB2YXJpYWJsZUtleXMubGVuZ3RoXG4gICAgICAgICAgICA/IGAoJHt2YXJpYWJsZUtleXMubWFwKChrZXkpID0+IGAke2tleX06ICQke2tleX1gKS5qb2luKCcsICcpfSlgXG4gICAgICAgICAgICA6ICcnXG4gICAgICAgIH1cbiAgICAgICAgJHtyZXR1cm5Qcm9wZXJ0aWVzPy5sZW5ndGggPyBgeyR7cmV0dXJuUHJvcGVydGllcy5qb2luKCcsICcpfX1gIDogJyd9XG4gICAgICB9XG4gICAgfWA7XG4gIH0gZWxzZSB7XG4gICAgcXVlcnkgPSBgJHt0eXBlfSAke3F1ZXJ5TmFtZX0ke1xuICAgICAgdmFyaWFibGVLZXlzLmxlbmd0aFxuICAgICAgICA/IGAoJHt2YXJpYWJsZUtleXMubWFwKChrZXkpID0+IGAkJHtrZXl9OiAke3F1ZXJ5VmFyaWFibGVzW2tleV0udHlwZX1gKS5qb2luKCcsICcpfSlgXG4gICAgICAgIDogJydcbiAgICB9IHtcbiAgICAgICR7ZGF0YVR5cGV9IHtcbiAgICAgICAgJHtjYW1lbENhc2UocXVlcnlOYW1lKX0ke1xuICAgICAgICAgIHZhcmlhYmxlS2V5cy5sZW5ndGhcbiAgICAgICAgICAgID8gYCgke3ZhcmlhYmxlS2V5cy5tYXAoKGtleSkgPT4gYCR7a2V5fTogJCR7a2V5fWApLmpvaW4oJywgJyl9KWBcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfVxuICAgICAgICAke3JldHVyblByb3BlcnRpZXM/Lmxlbmd0aCA/IGB7JHtyZXR1cm5Qcm9wZXJ0aWVzLmpvaW4oJywgJyl9fWAgOiAnJ31cbiAgICAgIH1cbiAgICB9YDtcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZWRWYXJpYWJsZXMgPSB2YXJpYWJsZUtleXMucmVkdWNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PigocXVlcnlEYXRhLCBrZXkpID0+IHtcbiAgICBxdWVyeURhdGFba2V5XSA9IHF1ZXJ5VmFyaWFibGVzW2tleV0udmFsdWU7XG4gICAgcmV0dXJuIHF1ZXJ5RGF0YTtcbiAgfSwge30pO1xuXG4gIHJldHVybiB7cXVlcnksIHZhcmlhYmxlczogdXBkYXRlZFZhcmlhYmxlc307XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlTXV0YXRpb24gPSAoXG4gIG5hbWU6IHN0cmluZyxcbiAgZGF0YVR5cGU6IFJlYWt0b3JEYkNvbGxlY3Rpb24sXG4gIHZhcmlhYmxlczogQXBpUXVlcnlWYXJpYWJsZXMgPSB7fSxcbiAgcmV0dXJuUHJvcGVydGllczogc3RyaW5nW10gPSBbXVxuKSA9PiBjcmVhdGVRdWVyeShuYW1lLCBkYXRhVHlwZSwgdmFyaWFibGVzLCByZXR1cm5Qcm9wZXJ0aWVzLCAnbXV0YXRpb24nKTtcblxuZXhwb3J0IGNvbnN0IGFwcFF1ZXJ5ID0gPFQ+KFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBuYW1lOiBzdHJpbmcsXG4gIGRhdGFUeXBlOiBSZWFrdG9yRGJDb2xsZWN0aW9uLFxuICBxdWVyeVZhcmlhYmxlczogQXBpUXVlcnlWYXJpYWJsZXMsXG4gIHJldHVyblByb3BlcnRpZXM6IHN0cmluZ1tdLFxuICBvcHRpb25zOiBBcGlPcHRpb25zID0ge31cbik6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGNyZWF0ZVF1ZXJ5KG5hbWUsIGRhdGFUeXBlLCBxdWVyeVZhcmlhYmxlcywgcmV0dXJuUHJvcGVydGllcyk7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICBjb25zdCBhcHBVcmw6IHN0cmluZyA9IGNvbmZpZy5hcHA/LmFwaT8udXJsIHx8ICcnO1xuICByZXR1cm4gZ2V0R3JhcGhxbChmbHV4LCBhcHBVcmwsIHRydWUsIHF1ZXJ5LCBvcHRpb25zKSBhcyBQcm9taXNlPFQ+O1xufTtcblxuZXhwb3J0IGNvbnN0IGFwcE11dGF0aW9uID0gPFQ+KFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBuYW1lOiBzdHJpbmcsXG4gIGRhdGFUeXBlOiBSZWFrdG9yRGJDb2xsZWN0aW9uLFxuICBxdWVyeVZhcmlhYmxlczogQXBpUXVlcnlWYXJpYWJsZXMsXG4gIHJldHVyblByb3BlcnRpZXM6IHN0cmluZ1tdLFxuICBvcHRpb25zOiBBcGlPcHRpb25zID0ge31cbik6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGNyZWF0ZU11dGF0aW9uKG5hbWUsIGRhdGFUeXBlLCBxdWVyeVZhcmlhYmxlcywgcmV0dXJuUHJvcGVydGllcyk7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICBjb25zdCBhcHBVcmw6IHN0cmluZyA9IGNvbmZpZy5hcHA/LmFwaT8udXJsIHx8ICcnO1xuICByZXR1cm4gZ2V0R3JhcGhxbChmbHV4LCBhcHBVcmwsIHRydWUsIHF1ZXJ5LCBvcHRpb25zKSBhcyBQcm9taXNlPFQ+O1xufTtcblxuZXhwb3J0IGNvbnN0IHB1YmxpY1F1ZXJ5ID0gPFQ+KFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBuYW1lOiBzdHJpbmcsXG4gIGRhdGFUeXBlOiBSZWFrdG9yRGJDb2xsZWN0aW9uLFxuICBxdWVyeVZhcmlhYmxlczogQXBpUXVlcnlWYXJpYWJsZXMsXG4gIHJldHVyblByb3BlcnRpZXM6IHN0cmluZ1tdLFxuICBvcHRpb25zOiBBcGlPcHRpb25zID0ge31cbik6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCBxdWVyeSA9IGNyZWF0ZVF1ZXJ5KG5hbWUsIGRhdGFUeXBlLCBxdWVyeVZhcmlhYmxlcywgcmV0dXJuUHJvcGVydGllcyk7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICBjb25zdCBwdWJsaWNVcmw6IHN0cmluZyA9IGNvbmZpZy5hcHA/LmFwaT8ucHVibGljIHx8ICcnO1xuICByZXR1cm4gZ2V0R3JhcGhxbChmbHV4LCBwdWJsaWNVcmwsIGZhbHNlLCBxdWVyeSwgb3B0aW9ucykgYXMgUHJvbWlzZTxUPjtcbn07XG5cbmV4cG9ydCBjb25zdCBwdWJsaWNNdXRhdGlvbiA9IDxUPihcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgbmFtZTogc3RyaW5nLFxuICBkYXRhVHlwZTogUmVha3RvckRiQ29sbGVjdGlvbixcbiAgcXVlcnlWYXJpYWJsZXM6IEFwaVF1ZXJ5VmFyaWFibGVzLFxuICByZXR1cm5Qcm9wZXJ0aWVzOiBzdHJpbmdbXSxcbiAgb3B0aW9uczogQXBpT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3QgcXVlcnkgPSBjcmVhdGVNdXRhdGlvbihuYW1lLCBkYXRhVHlwZSwgcXVlcnlWYXJpYWJsZXMsIHJldHVyblByb3BlcnRpZXMpO1xuICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgY29uc3QgcHVibGljVXJsOiBzdHJpbmcgPSBjb25maWcuYXBwPy5hcGk/LnB1YmxpYyB8fCAnJztcbiAgcmV0dXJuIGdldEdyYXBocWwoZmx1eCwgcHVibGljVXJsLCBmYWxzZSwgcXVlcnksIG9wdGlvbnMpIGFzIFByb21pc2U8VD47XG59O1xuXG5leHBvcnQgY29uc3QgcnVtTXV0YXRpb24gPSA8VD4oXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIG5hbWU6IHN0cmluZyxcbiAgZGF0YVR5cGU6IFJlYWt0b3JEYkNvbGxlY3Rpb24sXG4gIHF1ZXJ5VmFyaWFibGVzOiBBcGlRdWVyeVZhcmlhYmxlcyxcbiAgcmV0dXJuUHJvcGVydGllczogc3RyaW5nW10sXG4gIG9wdGlvbnM6IEFwaU9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUPiA9PiB7XG4gIGNvbnN0IHF1ZXJ5ID0gY3JlYXRlTXV0YXRpb24obmFtZSwgZGF0YVR5cGUsIHF1ZXJ5VmFyaWFibGVzLCByZXR1cm5Qcm9wZXJ0aWVzKTtcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnRnJvbUZsdXgoZmx1eCk7XG4gIGNvbnN0IHJ1bVVybDogc3RyaW5nID0gY29uZmlnLmFwcD8uYXBpPy5ydW0gfHwgY29uZmlnLmFwcD8uYXBpPy5wdWJsaWMgfHwgJyc7XG4gIHJldHVybiBnZXRHcmFwaHFsKGZsdXgsIHJ1bVVybCwgZmFsc2UsIHF1ZXJ5LCBvcHRpb25zKSBhcyBQcm9taXNlPFQ+O1xufTtcblxuZXhwb3J0IGNvbnN0IHJ1bVJlcXVlc3QgPSA8VD4oXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIGJhdGNoOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgb3B0aW9uczogUmVzdEFwaU9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUPiA9PiB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICBjb25zdCBydW1Vcmw6IHN0cmluZyA9IGNvbmZpZy5hcHA/LmFwaT8uZW5kcG9pbnRzPy5ydW0gfHwgY29uZmlnLmFwcD8uYXBpPy5ydW0gfHwgJyc7XG5cbiAgcmV0dXJuIHJlc3RSZXF1ZXN0PFQ+KGZsdXgsIHJ1bVVybCwgJ1BPU1QnLCBiYXRjaCwgey4uLm9wdGlvbnMsIGF1dGhlbnRpY2F0ZTogZmFsc2V9KTtcbn07XG5cbi8qKlxuICogQXR0ZW1wdHMgdGVybWluYWwgUlVNIGRlbGl2ZXJ5IHdpdGggdGhlIEJlYWNvbiBBUEkuXG4gKlxuICogUmV0dXJucyBmYWxzZSB3aGVuIGJlYWNvbiBkZWxpdmVyeSBpcyB1bmF2YWlsYWJsZSBvciBkZWNsaW5lZCBzbyBjYWxsZXJzXG4gKiBjYW4gZmFsbCBiYWNrIHRvIHRoZSBzdGFuZGFyZCByZXF1ZXN0IHRyYW5zcG9ydC5cbiAqL1xuZXhwb3J0IGNvbnN0IHJ1bUJlYWNvblJlcXVlc3QgPSAoXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIGJhdGNoOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICBjb25zdCBydW1Vcmw6IHN0cmluZyA9IGNvbmZpZy5hcHA/LmFwaT8uZW5kcG9pbnRzPy5ydW0gfHwgY29uZmlnLmFwcD8uYXBpPy5ydW0gfHwgJyc7XG5cbiAgaWYoIXJ1bVVybCB8fCB0eXBlb2YgZ2xvYmFsVGhpcy5uYXZpZ2F0b3I/LnNlbmRCZWFjb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBnbG9iYWxUaGlzLm5hdmlnYXRvci5zZW5kQmVhY29uKHJ1bVVybCwgSlNPTi5zdHJpbmdpZnkoYmF0Y2gpKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgdXBsb2FkSW1hZ2UgPSAoXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIGltYWdlOiBGb3JtRGF0YSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBvcHRpb25zOiBIdW50ZXJPcHRpb25zVHlwZSA9IHt9XG4pOiBQcm9taXNlPEFwaVJlc3VsdHNUeXBlPiA9PiB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZ0Zyb21GbHV4KGZsdXgpO1xuICBjb25zdCB1cGxvYWRJbWFnZVVybDogc3RyaW5nID0gY29uZmlnLmFwcD8uYXBpPy51cGxvYWRJbWFnZSB8fCAnJztcbiAgY29uc3QgdG9rZW4gPSBmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udG9rZW4nKTtcblxuICBpZihpc0VtcHR5KHVwbG9hZEltYWdlVXJsKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgQXBpRXJyb3IoW3sgbWVzc2FnZTogJ2ludmFsaWRfdXJsJyB9XSwgbmV3IEVycm9yKCd1cGxvYWRfZW5kcG9pbnRfbm90X2NvbmZpZ3VyZWQnKSkpO1xuICB9XG5cbiAgaWYoaXNFbXB0eSh0b2tlbikpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEFwaUVycm9yKFt7IG1lc3NhZ2U6ICdpbnZhbGlkX3Nlc3Npb24nIH1dLCBuZXcgRXJyb3IoJ21pc3NpbmdfYXV0aF90b2tlbicpKSk7XG4gIH1cblxuICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKTtcbiAgaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7dG9rZW59YCk7XG5cbiAgaWYodHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyAmJiBpbWFnZSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgaGVhZGVycy5zZXQoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi9qc29uJyk7XG5cbiAgICByZXR1cm4gZmV0Y2godXBsb2FkSW1hZ2VVcmwsIHtcbiAgICAgIGJvZHk6IGltYWdlLFxuICAgICAgaGVhZGVycyxcbiAgICAgIG1ldGhvZDogJ1BPU1QnXG4gICAgfSkudGhlbihhc3luYyAocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSB8fCAnJztcbiAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZVR5cGUuaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKVxuICAgICAgICA/IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICAgICAgICA6IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcblxuICAgICAgaWYoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgZGF0YSAmJiAnZXJyb3InIGluIGRhdGFcbiAgICAgICAgICA/IFN0cmluZygoZGF0YSBhcyB7ZXJyb3I/OiBzdHJpbmd9KS5lcnJvciB8fCByZXNwb25zZS5zdGF0dXNUZXh0KVxuICAgICAgICAgIDogU3RyaW5nKGRhdGEgfHwgcmVzcG9uc2Uuc3RhdHVzVGV4dCk7XG4gICAgICAgIHRocm93IG5ldyBBcGlFcnJvcihbeyBtZXNzYWdlOiAndXBsb2FkX2Vycm9yJyB9XSwgbmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGEgYXMgQXBpUmVzdWx0c1R5cGU7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcG9zdCh1cGxvYWRJbWFnZVVybCwgaW1hZ2UsIHtoZWFkZXJzLCAuLi5vcHRpb25zfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVmcmVzaFNlc3Npb24gPSBhc3luYyAoXG4gIGZsdXg6IEZsdXhGcmFtZXdvcmssXG4gIHRva2VuPzogc3RyaW5nLFxuICBleHBpcmVzPzogbnVtYmVyXG4pOiBQcm9taXNlPEZsdXhBY3Rpb24gfCBudWxsPiA9PiB7XG4gIGNvbnN0IHJlZnJlc2hUb2tlbiA9IGlzRW1wdHkodG9rZW4pID8gZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uLnRva2VuJykgOiB0b2tlbjtcblxuICBpZihpc0VtcHR5KHJlZnJlc2hUb2tlbikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHRva2VuRXhwaXJlc0F0ID0gcGFyc2VKd3RFeHBpcnlNcyhTdHJpbmcocmVmcmVzaFRva2VuKSk7XG5cbiAgaWYodG9rZW5FeHBpcmVzQXQgPiAwICYmIERhdGUubm93KCkgPj0gdG9rZW5FeHBpcmVzQXQpIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignZXhwaXJlZF9zZXNzaW9uJyk7XG4gICAgYXdhaXQgY2xlYXJJbnZhbGlkU2Vzc2lvblN0YXRlKGZsdXgpO1xuICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5HRVRfU0VTU0lPTl9FUlJPUn0pO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWdGcm9tRmx1eChmbHV4KTtcbiAgICBjb25zdCByZXF1ZXN0ZWRFeHBpcmVzID0gTWF0aC5tYXgoXG4gICAgICAxLFxuICAgICAgTnVtYmVyKGV4cGlyZXMgfHwgY29uZmlnLmFwcD8uc2Vzc2lvbj8ubWF4TWludXRlcyB8fCBERUZBVUxUX1NFU1NJT05fTUFYX01JTlVURVMpXG4gICAgKTtcbiAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgIGV4cGlyZXM6IHtcbiAgICAgICAgdHlwZTogJ0ludCcsXG4gICAgICAgIHZhbHVlOiByZXF1ZXN0ZWRFeHBpcmVzXG4gICAgICB9LFxuICAgICAgdG9rZW46IHtcbiAgICAgICAgdHlwZTogJ1N0cmluZyEnLFxuICAgICAgICB2YWx1ZTogcmVmcmVzaFRva2VuXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBvblN1Y2Nlc3MgPSBhc3luYyAoZGF0YTogQXBpUmVzdWx0c1R5cGUgPSB7fSk6IFByb21pc2U8Rmx1eEFjdGlvbj4gPT4ge1xuICAgICAgY29uc3QgcmF3U2Vzc2lvbkRhdGEgPSAoZGF0YSBhcyB7dXNlcnM/OiB7cmVmcmVzaFNlc3Npb24/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn19KT8udXNlcnM/LnJlZnJlc2hTZXNzaW9uO1xuICAgICAgY29uc3Qgc2Vzc2lvbkRhdGEgPSByYXdTZXNzaW9uRGF0YSAmJiB0eXBlb2YgcmF3U2Vzc2lvbkRhdGEgPT09ICdvYmplY3QnXG4gICAgICAgID8gcmF3U2Vzc2lvbkRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgICAgOiB7fTtcbiAgICAgIGNvbnN0IGN1cnJlbnRTZXNzaW9uID0gKGZsdXguZ2V0U3RhdGUoJ3VzZXIuc2Vzc2lvbicsIHt9KSB8fCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICBjb25zdCBtZXJnZWRTZXNzaW9uID0gYXdhaXQgc3RvcmVTZXNzaW9uKGZsdXgsIHsuLi5jdXJyZW50U2Vzc2lvbiwgLi4uc2Vzc2lvbkRhdGF9KTtcbiAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtzZXNzaW9uOiBtZXJnZWRTZXNzaW9uLCB0eXBlOiBVU0VSX0NPTlNUQU5UUy5VUERBVEVfU0VTU0lPTl9TVUNDRVNTfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBhd2FpdCBwdWJsaWNNdXRhdGlvbihmbHV4LCAncmVmcmVzaFNlc3Npb24nLCAndXNlcnMnLCBxdWVyeVZhcmlhYmxlcywgWydleHBpcmVzJywgJ2lzc3VlZCcsICd0b2tlbiddLCB7XG4gICAgICBvblN1Y2Nlc3NcbiAgICB9KTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJyc7XG5cbiAgICBpZihlcnJvck1lc3NhZ2UgPT09ICdpbnZhbGlkX3Nlc3Npb24nIHx8IGVycm9yTWVzc2FnZSA9PT0gJ2V4cGlyZWRfc2Vzc2lvbicpIHtcbiAgICAgIGF3YWl0IGNsZWFySW52YWxpZFNlc3Npb25TdGF0ZShmbHV4KTtcbiAgICB9XG5cbiAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogVVNFUl9DT05TVEFOVFMuR0VUX1NFU1NJT05fRVJST1J9KTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJBcGlFcnJvciIsImFqYXgiLCJkZWwiLCJnZXQiLCJncmFwaHFsUXVlcnkiLCJwb3N0IiwicHV0IiwiY2FtZWxDYXNlIiwiaXNFbXB0eSIsInVwcGVyRmlyc3QiLCJBUFBfQ09OU1RBTlRTIiwiVVNFUl9DT05TVEFOVFMiLCJnZXRDb25maWdGcm9tRmx1eCIsImNsZWFyUGVyc2lzdGVkU2Vzc2lvbiIsImdldFJlZnJlc2hXaW5kb3dNaW51dGVzIiwiaHlkcmF0ZVNlc3Npb25Gcm9tU3RvcmFnZSIsInBhcnNlSnd0RXhwaXJ5TXMiLCJzdG9yZVNlc3Npb24iLCJERUZBVUxUX1JFRlJFU0hfV0lORE9XX01JTlVURVMiLCJERUZBVUxUX1NFU1NJT05fTUFYX01JTlVURVMiLCJnZXRNaW51dGVzVW50aWwiLCJleHBpcmVzQXQiLCJNYXRoIiwicm91bmQiLCJEYXRlIiwibm93IiwiY2xlYXJJbnZhbGlkU2Vzc2lvblN0YXRlIiwiZmx1eCIsImNsZWFyQXBwRGF0YSIsImRpc3BhdGNoIiwic2Vzc2lvbiIsInR5cGUiLCJTSUdOX09VVF9TVUNDRVNTIiwicmVzb2x2ZUF1dGhUb2tlbiIsInN0YXRlU2Vzc2lvbiIsImdldFN0YXRlIiwiaHlkcmF0ZWRTZXNzaW9uIiwidG9rZW4iLCJleHBpcmVzIiwiYXV0aEV4cGlyZXMiLCJpc3N1ZWQiLCJhdXRoSXNzdWVkIiwiaHlkcmF0ZWRUb2tlbiIsIm1lc3NhZ2UiLCJFcnJvciIsInRva2VuRXhwaXJlc0F0IiwiY29uZmlnIiwibWludXRlc1VudGlsRXhwaXJ5IiwiTnVtYmVyIiwic2Vzc2lvbkxpZmV0aW1lTWludXRlcyIsInJlZnJlc2hXaW5kb3dNaW51dGVzIiwiYXBwIiwicmVmcmVzaEV4cGlyZXNNaW51dGVzIiwibWF4IiwibWF4TWludXRlcyIsInVwZGF0ZWRTZXNzaW9uIiwicmVmcmVzaFNlc3Npb24iLCJuZXdUb2tlbiIsImdldEdyYXBocWwiLCJ1cmwiLCJhdXRoZW50aWNhdGUiLCJxdWVyeSIsIm9wdGlvbnMiLCJvblN1Y2Nlc3MiLCJyZXRyeSIsInJlc3BvbnNlTWV0aG9kIiwibmV0d29ya1R5cGUiLCJBUElfTkVUV09SS19FUlJPUiIsInRoZW4iLCJyZXN1bHRzIiwiQVBJX05FVFdPUktfU1VDQ0VTUyIsImRhdGEiLCJjYXRjaCIsImVycm9yIiwiZXJyb3JzIiwiaW5jbHVkZXMiLCJQcm9taXNlIiwicmVqZWN0IiwicmVzb2x2ZSIsInJlc29sdmVSZXN0RW5kcG9pbnQiLCJlbmRwb2ludCIsInRhcmdldEVuZHBvaW50IiwiU3RyaW5nIiwidHJpbSIsInRlc3QiLCJzdGFydHNXaXRoIiwiY29uZmlndXJlZEVuZHBvaW50IiwiYXBpIiwiZW5kcG9pbnRzIiwicmVzdFJlcXVlc3QiLCJtZXRob2QiLCJwYXJhbXMiLCJodW50ZXJPcHRpb25zIiwicmVxdWVzdE1ldGhvZCIsInRvVXBwZXJDYXNlIiwicmVxdWVzdCIsInJlcXVlc3RPcHRpb25zIiwiY3JlYXRlUXVlcnkiLCJuYW1lIiwiZGF0YVR5cGUiLCJ2YXJpYWJsZXMiLCJyZXR1cm5Qcm9wZXJ0aWVzIiwicXVlcnlWYXJpYWJsZXMiLCJ2YXJpYWJsZUtleXMiLCJPYmplY3QiLCJrZXlzIiwicXVlcnlOYW1lIiwicmVwbGFjZSIsIm11dGF0aW9uTmFtZSIsImxlbmd0aCIsIm1hcCIsImtleSIsImpvaW4iLCJ1cGRhdGVkVmFyaWFibGVzIiwicmVkdWNlIiwicXVlcnlEYXRhIiwidmFsdWUiLCJjcmVhdGVNdXRhdGlvbiIsImFwcFF1ZXJ5IiwiYXBwVXJsIiwiYXBwTXV0YXRpb24iLCJwdWJsaWNRdWVyeSIsInB1YmxpY1VybCIsInB1YmxpYyIsInB1YmxpY011dGF0aW9uIiwicnVtTXV0YXRpb24iLCJydW1VcmwiLCJydW0iLCJydW1SZXF1ZXN0IiwiYmF0Y2giLCJydW1CZWFjb25SZXF1ZXN0IiwiZ2xvYmFsVGhpcyIsIm5hdmlnYXRvciIsInNlbmRCZWFjb24iLCJKU09OIiwic3RyaW5naWZ5IiwidXBsb2FkSW1hZ2UiLCJpbWFnZSIsInVwbG9hZEltYWdlVXJsIiwiaGVhZGVycyIsIkhlYWRlcnMiLCJzZXQiLCJGb3JtRGF0YSIsImZldGNoIiwiYm9keSIsInJlc3BvbnNlIiwicmVzcG9uc2VUeXBlIiwianNvbiIsInRleHQiLCJvayIsInN0YXR1c1RleHQiLCJyZWZyZXNoVG9rZW4iLCJHRVRfU0VTU0lPTl9FUlJPUiIsInJlcXVlc3RlZEV4cGlyZXMiLCJyYXdTZXNzaW9uRGF0YSIsInVzZXJzIiwic2Vzc2lvbkRhdGEiLCJjdXJyZW50U2Vzc2lvbiIsIm1lcmdlZFNlc3Npb24iLCJVUERBVEVfU0VTU0lPTl9TVUNDRVNTIiwiZXJyb3JNZXNzYWdlIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFRQSxRQUFRLEVBQUVDLElBQUksRUFBRUMsR0FBRyxFQUFFQyxHQUFHLEVBQUVDLFlBQVksRUFBRUMsSUFBSSxFQUFFQyxHQUFHLFFBQU8sb0JBQW9CO0FBQ3BGLFNBQVFDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxVQUFVLFFBQU8sZUFBZTtBQUU1RCxTQUFRQyxhQUFhLFFBQU8sd0JBQXdCO0FBQ3BELFNBQVFDLGNBQWMsUUFBTyx5QkFBeUI7QUFDdEQsU0FBUUMsaUJBQWlCLFFBQU8sbUJBQW1CO0FBQ25ELFNBQVFDLHFCQUFxQixFQUFFQyx1QkFBdUIsRUFBRUMseUJBQXlCLEVBQUVDLGdCQUFnQixFQUFFQyxZQUFZLFFBQU8sZUFBZTtBQXlFdkksTUFBTUMsaUNBQWlDO0FBQ3ZDLE1BQU1DLDhCQUE4QjtBQUVwQyxNQUFNQyxrQkFBa0IsQ0FBQ0MsWUFDdkJDLEtBQUtDLEtBQUssQ0FBQyxBQUFDRixDQUFBQSxZQUFZRyxLQUFLQyxHQUFHLEVBQUMsSUFBTSxDQUFBLE9BQU8sRUFBQztBQUVqRCxNQUFNQywyQkFBMkIsT0FBT0M7SUFDdEMsTUFBTWQsc0JBQXNCYztJ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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nlabs/metropolisjs",
3
- "version": "1.0.7",
3
+ "version": "1.0.8",
4
4
  "description": "MetropolisJS is a library to connect users to Reaktor",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",