@office-iss/react-native-win32 0.64.6 → 0.64.10

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/.flowconfig CHANGED
@@ -12,6 +12,7 @@
12
12
  <PROJECT_ROOT>/Libraries/Alert/Alert.js
13
13
  <PROJECT_ROOT>/Libraries/Components/AccessibilityInfo/NativeAccessibilityInfo.js
14
14
  <PROJECT_ROOT>/Libraries/Components/Picker/Picker.js
15
+ <PROJECT_ROOT>/Libraries/Components/Pressable/Pressable.js
15
16
  <PROJECT_ROOT>/Libraries/Components/SafeAreaView/SafeAreaView.js
16
17
  <PROJECT_ROOT>/Libraries/Components/TextInput/TextInput.js
17
18
  <PROJECT_ROOT>/Libraries/Components/TextInput/TextInputState.js
@@ -19,11 +20,15 @@
19
20
  <PROJECT_ROOT>/Libraries/Components/View/ReactNativeViewAttributes.js
20
21
  <PROJECT_ROOT>/Libraries/Components/View/ReactNativeViewViewConfig.js
21
22
  <PROJECT_ROOT>/Libraries/Components/View/View.js
23
+ <PROJECT_ROOT>/Libraries/Components/View/ViewPropTypes.js
22
24
  <PROJECT_ROOT>/Libraries/Image/Image.js
23
25
  <PROJECT_ROOT>/Libraries/Inspector/Inspector.js
24
26
  <PROJECT_ROOT>/Libraries/Inspector/InspectorOverlay.js
25
27
  <PROJECT_ROOT>/Libraries/Network/RCTNetworking.js
28
+ <PROJECT_ROOT>/Libraries/Pressability/Pressability.js
29
+ <PROJECT_ROOT>/Libraries/Pressability/HoverState.js
26
30
  <PROJECT_ROOT>/Libraries/StyleSheet/StyleSheet.js
31
+ <PROJECT_ROOT>/Libraries/Types/CoreEventTypes.js
27
32
  <PROJECT_ROOT>/Libraries/Utilities/DeviceInfo.js
28
33
  <PROJECT_ROOT>/Libraries/Utilities/Dimensions.js
29
34
 
package/CHANGELOG.json CHANGED
@@ -2,7 +2,67 @@
2
2
  "name": "@office-iss/react-native-win32",
3
3
  "entries": [
4
4
  {
5
- "date": "Mon, 13 Sep 2021 15:06:02 GMT",
5
+ "date": "Mon, 17 Jan 2022 16:09:50 GMT",
6
+ "tag": "@office-iss/react-native-win32_v0.64.10",
7
+ "version": "0.64.10",
8
+ "comments": {
9
+ "patch": [
10
+ {
11
+ "comment": "Port windows pressable with extra desktop support to win32",
12
+ "author": "saadnajmi2@gmail.com",
13
+ "commit": "acfb47a7924f4d4e34e020838423bbbab026d670",
14
+ "package": "@office-iss/react-native-win32"
15
+ }
16
+ ]
17
+ }
18
+ },
19
+ {
20
+ "date": "Mon, 15 Nov 2021 16:09:20 GMT",
21
+ "tag": "@office-iss/react-native-win32_v0.64.9",
22
+ "version": "0.64.9",
23
+ "comments": {
24
+ "patch": [
25
+ {
26
+ "comment": "Add enableFocusRing prop for View and test",
27
+ "author": "ruaraki@microsoft.com",
28
+ "commit": "ecbd53d9cd10b88691fc79eeaaf3be1b035f162f",
29
+ "package": "@office-iss/react-native-win32"
30
+ }
31
+ ]
32
+ }
33
+ },
34
+ {
35
+ "date": "Mon, 25 Oct 2021 15:07:12 GMT",
36
+ "tag": "@office-iss/react-native-win32_v0.64.8",
37
+ "version": "0.64.8",
38
+ "comments": {
39
+ "patch": [
40
+ {
41
+ "comment": "Revert back to a warning for acceptsKeyboardFocus deprecation",
42
+ "author": "30809111+acoates-ms@users.noreply.github.com",
43
+ "commit": "e615b1c46b7396fe617dc3019091cc367bd145a8",
44
+ "package": "@office-iss/react-native-win32"
45
+ }
46
+ ]
47
+ }
48
+ },
49
+ {
50
+ "date": "Mon, 20 Sep 2021 15:06:37 GMT",
51
+ "tag": "@office-iss/react-native-win32_v0.64.7",
52
+ "version": "0.64.7",
53
+ "comments": {
54
+ "patch": [
55
+ {
56
+ "comment": "Adding accessibilityItemType to ViewWin32",
57
+ "author": "safreibe@microsoft.com",
58
+ "commit": "47ceaac64f88816796d67d08affb9beea67d6344",
59
+ "package": "@office-iss/react-native-win32"
60
+ }
61
+ ]
62
+ }
63
+ },
64
+ {
65
+ "date": "Mon, 13 Sep 2021 15:06:21 GMT",
6
66
  "tag": "@office-iss/react-native-win32_v0.64.6",
7
67
  "version": "0.64.6",
8
68
  "comments": {
package/CHANGELOG.md CHANGED
@@ -1,17 +1,49 @@
1
1
  # Change Log - @office-iss/react-native-win32
2
2
 
3
- This log was last generated on Mon, 13 Sep 2021 15:06:02 GMT and should not be manually modified.
3
+ This log was last generated on Mon, 17 Jan 2022 16:09:50 GMT and should not be manually modified.
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
- ## 0.64.6
7
+ ## 0.64.10
8
8
 
9
- Mon, 13 Sep 2021 15:06:02 GMT
9
+ Mon, 17 Jan 2022 16:09:50 GMT
10
10
 
11
11
  ### Patches
12
12
 
13
- - Fix exception in View when props are undefined (30809111+acoates-ms@users.noreply.github.com)
13
+ - Port windows pressable with extra desktop support to win32 (saadnajmi2@gmail.com)
14
14
 
15
+ ## 0.64.9
16
+
17
+ Mon, 15 Nov 2021 16:09:20 GMT
18
+
19
+ ### Patches
20
+
21
+ - Add enableFocusRing prop for View and test (ruaraki@microsoft.com)
22
+
23
+ ## 0.64.8
24
+
25
+ Mon, 25 Oct 2021 15:07:12 GMT
26
+
27
+ ### Patches
28
+
29
+ - Revert back to a warning for acceptsKeyboardFocus deprecation (30809111+acoates-ms@users.noreply.github.com)
30
+
31
+ ## 0.64.7
32
+
33
+ Mon, 20 Sep 2021 15:06:37 GMT
34
+
35
+ ### Patches
36
+
37
+ - Adding accessibilityItemType to ViewWin32 (safreibe@microsoft.com)
38
+
39
+ ## 0.64.6
40
+
41
+ Mon, 13 Sep 2021 15:06:21 GMT
42
+
43
+ ### Patches
44
+
45
+ - Fix exception in View when props are undefined (30809111+acoates-ms@users.noreply.github.com)
46
+
15
47
  ## 0.64.5
16
48
 
17
49
  Mon, 23 Aug 2021 15:10:07 GMT
@@ -0,0 +1,333 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @flow strict-local
8
+ * @format
9
+ */
10
+
11
+ 'use strict';
12
+
13
+ import * as React from 'react';
14
+ import {useMemo, useState, useRef, useImperativeHandle} from 'react';
15
+ import useAndroidRippleForView, {
16
+ type RippleConfig,
17
+ } from './useAndroidRippleForView';
18
+ import type {
19
+ AccessibilityActionEvent,
20
+ AccessibilityActionInfo,
21
+ AccessibilityRole,
22
+ AccessibilityState,
23
+ AccessibilityValue,
24
+ } from '../View/ViewAccessibility';
25
+ import {PressabilityDebugView} from '../../Pressability/PressabilityDebug';
26
+ import usePressability from '../../Pressability/usePressability';
27
+ import {normalizeRect, type RectOrSize} from '../../StyleSheet/Rect';
28
+ import type {
29
+ LayoutEvent,
30
+ PressEvent,
31
+ // [Windows
32
+ MouseEvent,
33
+ BlurEvent,
34
+ FocusEvent, // Windows]
35
+ } from '../../Types/CoreEventTypes';
36
+ import View from '../View/View';
37
+ import TextInputState from '../TextInput/TextInputState';
38
+
39
+ type ViewStyleProp = $ElementType<React.ElementConfig<typeof View>, 'style'>;
40
+
41
+ export type StateCallbackType = $ReadOnly<{|
42
+ pressed: boolean,
43
+ |}>;
44
+
45
+ type Props = $ReadOnly<{|
46
+ /**
47
+ * Accessibility.
48
+ */
49
+ accessibilityActions?: ?$ReadOnlyArray<AccessibilityActionInfo>,
50
+ accessibilityElementsHidden?: ?boolean,
51
+ accessibilityHint?: ?Stringish,
52
+ accessibilityIgnoresInvertColors?: ?boolean,
53
+ accessibilityLabel?: ?Stringish,
54
+ accessibilityLiveRegion?: ?('none' | 'polite' | 'assertive'),
55
+ accessibilityRole?: ?AccessibilityRole,
56
+ accessibilityState?: ?AccessibilityState,
57
+ accessibilityValue?: ?AccessibilityValue,
58
+ accessibilityViewIsModal?: ?boolean,
59
+ accessible?: ?boolean,
60
+ focusable?: ?boolean,
61
+ importantForAccessibility?: ?('auto' | 'yes' | 'no' | 'no-hide-descendants'),
62
+ onAccessibilityAction?: ?(event: AccessibilityActionEvent) => mixed,
63
+
64
+ /**
65
+ * Either children or a render prop that receives a boolean reflecting whether
66
+ * the component is currently pressed.
67
+ */
68
+ children: React.Node | ((state: StateCallbackType) => React.Node),
69
+
70
+ /**
71
+ * Duration to wait after hover in before calling `onHoverIn`.
72
+ */
73
+ delayHoverIn?: ?number,
74
+
75
+ /**
76
+ * Duration to wait after hover out before calling `onHoverOut`.
77
+ */
78
+ delayHoverOut?: ?number,
79
+
80
+ /**
81
+ * Duration (in milliseconds) from `onPressIn` before `onLongPress` is called.
82
+ */
83
+ delayLongPress?: ?number,
84
+
85
+ /**
86
+ * Whether the press behavior is disabled.
87
+ */
88
+ disabled?: ?boolean,
89
+
90
+ /**
91
+ * Additional distance outside of this view in which a press is detected.
92
+ */
93
+ hitSlop?: ?RectOrSize,
94
+
95
+ /**
96
+ * Additional distance outside of this view in which a touch is considered a
97
+ * press before `onPressOut` is triggered.
98
+ */
99
+ pressRetentionOffset?: ?RectOrSize,
100
+
101
+ /**
102
+ * Called when this view's layout changes.
103
+ */
104
+ onLayout?: ?(event: LayoutEvent) => void,
105
+
106
+ /**
107
+ * Called when the hover is activated to provide visual feedback.
108
+ */
109
+ onHoverIn?: ?(event: MouseEvent) => mixed,
110
+
111
+ /**
112
+ * Called when the hover is deactivated to undo visual feedback.
113
+ */
114
+ onHoverOut?: ?(event: MouseEvent) => mixed,
115
+
116
+ /**
117
+ * Called when a long-tap gesture is detected.
118
+ */
119
+ onLongPress?: ?(event: PressEvent) => void,
120
+
121
+ /**
122
+ * Called when a single tap gesture is detected.
123
+ */
124
+ onPress?: ?(event: PressEvent) => void,
125
+
126
+ /**
127
+ * Called when a touch is engaged before `onPress`.
128
+ */
129
+ onPressIn?: ?(event: PressEvent) => void,
130
+
131
+ /**
132
+ * Called when a touch is released before `onPress`.
133
+ */
134
+ onPressOut?: ?(event: PressEvent) => void,
135
+
136
+ /**
137
+ * Called after the element loses focus.
138
+ */
139
+ onBlur?: ?(event: BlurEvent) => mixed,
140
+
141
+ /**
142
+ * Called after the element is focused.
143
+ */
144
+ onFocus?: ?(event: FocusEvent) => mixed,
145
+
146
+ /**
147
+ * Either view styles or a function that receives a boolean reflecting whether
148
+ * the component is currently pressed and returns view styles.
149
+ */
150
+ style?: ViewStyleProp | ((state: StateCallbackType) => ViewStyleProp),
151
+
152
+ /**
153
+ * Identifier used to find this view in tests.
154
+ */
155
+ testID?: ?string,
156
+
157
+ /**
158
+ * If true, doesn't play system sound on touch.
159
+ */
160
+ android_disableSound?: ?boolean,
161
+
162
+ /**
163
+ * Enables the Android ripple effect and configures its color.
164
+ */
165
+ android_ripple?: ?RippleConfig,
166
+
167
+ /**
168
+ * Used only for documentation or testing (e.g. snapshot testing).
169
+ */
170
+ testOnly_pressed?: ?boolean,
171
+
172
+ /**
173
+ * Duration to wait after press down before calling `onPressIn`.
174
+ */
175
+ unstable_pressDelay?: ?number,
176
+ |}>;
177
+
178
+ /**
179
+ * Component used to build display components that should respond to whether the
180
+ * component is currently pressed or not.
181
+ */
182
+ function Pressable(props: Props, forwardedRef): React.Node {
183
+ const {
184
+ accessible,
185
+ android_disableSound,
186
+ android_ripple,
187
+ children,
188
+ delayHoverIn,
189
+ delayHoverOut,
190
+ delayLongPress,
191
+ disabled,
192
+ focusable,
193
+ onHoverIn,
194
+ onHoverOut,
195
+ onLongPress,
196
+ onPress,
197
+ onPressIn,
198
+ onPressOut,
199
+ // [Windows
200
+ onBlur,
201
+ onFocus,
202
+ // Windows]
203
+ pressRetentionOffset,
204
+ style,
205
+ testOnly_pressed,
206
+ unstable_pressDelay,
207
+ ...restProps
208
+ } = props;
209
+
210
+ const viewRef = useRef<React.ElementRef<typeof View> | null>(null);
211
+ useImperativeHandle(forwardedRef, () => viewRef.current);
212
+
213
+ // [Windows
214
+ const _onBlur = (event: BlurEvent) => {
215
+ TextInputState.blurInput(viewRef.current);
216
+ if (props.onBlur) {
217
+ props.onBlur(event);
218
+ }
219
+ };
220
+
221
+ const _onFocus = (event: FocusEvent) => {
222
+ TextInputState.focusInput(viewRef.current);
223
+ if (props.onFocus) {
224
+ props.onFocus(event);
225
+ }
226
+ };
227
+ // Windows]
228
+
229
+ const android_rippleConfig = useAndroidRippleForView(android_ripple, viewRef);
230
+
231
+ const [pressed, setPressed] = usePressState(testOnly_pressed === true);
232
+
233
+ const hitSlop = normalizeRect(props.hitSlop);
234
+
235
+ const restPropsWithDefaults: React.ElementConfig<typeof View> = {
236
+ ...restProps,
237
+ ...android_rippleConfig?.viewProps,
238
+ accessible: accessible !== false,
239
+ focusable: focusable !== false,
240
+ hitSlop,
241
+ };
242
+
243
+ const config = useMemo(
244
+ () => ({
245
+ disabled,
246
+ hitSlop,
247
+ pressRectOffset: pressRetentionOffset,
248
+ android_disableSound,
249
+ delayHoverIn,
250
+ delayHoverOut,
251
+ delayLongPress,
252
+ delayPressIn: unstable_pressDelay,
253
+ onHoverIn,
254
+ onHoverOut,
255
+ onLongPress,
256
+ onPress,
257
+ onPressIn(event: PressEvent): void {
258
+ if (android_rippleConfig != null) {
259
+ android_rippleConfig.onPressIn(event);
260
+ }
261
+ setPressed(true);
262
+ if (onPressIn != null) {
263
+ onPressIn(event);
264
+ }
265
+ },
266
+ onPressMove: android_rippleConfig?.onPressMove,
267
+ onPressOut(event: PressEvent): void {
268
+ if (android_rippleConfig != null) {
269
+ android_rippleConfig.onPressOut(event);
270
+ }
271
+ setPressed(false);
272
+ if (onPressOut != null) {
273
+ onPressOut(event);
274
+ }
275
+ },
276
+ // [Windows
277
+ onBlur,
278
+ onFocus,
279
+ // Windows]
280
+ }),
281
+ [
282
+ android_disableSound,
283
+ android_rippleConfig,
284
+ delayHoverIn,
285
+ delayHoverOut,
286
+ delayLongPress,
287
+ disabled,
288
+ hitSlop,
289
+ onHoverIn,
290
+ onHoverOut,
291
+ onLongPress,
292
+ onPress,
293
+ onPressIn,
294
+ onPressOut,
295
+ // [Windows
296
+ onBlur,
297
+ onFocus,
298
+ // Windows]
299
+ pressRetentionOffset,
300
+ setPressed,
301
+ unstable_pressDelay,
302
+ ],
303
+ );
304
+ const eventHandlers = usePressability(config);
305
+
306
+ return (
307
+ <View
308
+ {...restPropsWithDefaults}
309
+ {...eventHandlers}
310
+ // [Windows
311
+ onBlur={_onBlur}
312
+ onFocus={_onFocus}
313
+ // Windows]
314
+ ref={viewRef}
315
+ style={typeof style === 'function' ? style({pressed}) : style}>
316
+ {typeof children === 'function' ? children({pressed}) : children}
317
+ {__DEV__ ? <PressabilityDebugView color="red" hitSlop={hitSlop} /> : null}
318
+ </View>
319
+ );
320
+ }
321
+
322
+ function usePressState(forcePressed: boolean): [boolean, (boolean) => void] {
323
+ const [pressed, setPressed] = useState(false);
324
+ return [pressed || forcePressed, setPressed];
325
+ }
326
+
327
+ const MemoedPressable = React.memo(React.forwardRef(Pressable));
328
+ MemoedPressable.displayName = 'Pressable';
329
+
330
+ export default (MemoedPressable: React.AbstractComponent<
331
+ Props,
332
+ React.ElementRef<typeof View>,
333
+ >);
@@ -379,6 +379,8 @@ const ReactNativeViewConfig = {
379
379
  accessibilityLabeledBy: true,
380
380
  accessibilityDescription: true,
381
381
  accessibilityControls: true,
382
+ accessibilityItemType: true,
383
+ enableFocusRing: true,
382
384
  // Windows]
383
385
  },
384
386
  };
@@ -68,11 +68,11 @@ var FocusMoverTestComponent = /** @class */ (function (_super) {
68
68
  }
69
69
  FocusMoverTestComponent.prototype.render = function () {
70
70
  return (React.createElement(ViewWin32_1.ViewWin32, null,
71
- React.createElement(ViewWin32_1.ViewWin32, { ref: this._labeledBy, accessibilityLabel: "separate label for test" }),
71
+ React.createElement(ViewWin32_1.ViewWin32, { ref: this._labeledBy, accessibilityLabel: "separate label for test", accessibilityItemType: "Comment" }),
72
72
  React.createElement(ViewWin32_1.ViewWin32, { style: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-around', marginVertical: 5 } },
73
73
  React.createElement(react_native_1.TouchableHighlight, { onPress: this._onPress },
74
74
  React.createElement(ViewWin32_1.ViewWin32, { accessibilityLabeledBy: this._labeledBy, style: styles.blackbox })),
75
- React.createElement(ViewWin32_1.ViewWin32, { ref: this._setRef, focusable: true, style: this.state.hasFocus ? { backgroundColor: '#aee8fcff' } : { backgroundColor: '#00000000' }, onFocus: this._onFocus, onBlur: this._onBlur },
75
+ React.createElement(ViewWin32_1.ViewWin32, { ref: this._setRef, focusable: true, style: this.state.hasFocus ? { backgroundColor: '#aee8fcff' } : { backgroundColor: '#00000000' }, onFocus: this._onFocus, onBlur: this._onBlur, enableFocusRing: false },
76
76
  React.createElement(react_native_1.Text, null, this.state.hasFocus ? 'Focus: Yes' : 'Focus: No')))));
77
77
  };
78
78
  return FocusMoverTestComponent;
@@ -113,7 +113,7 @@ var KeyboardTestComponent = /** @class */ (function (_super) {
113
113
  }
114
114
  KeyboardTestComponent.prototype.render = function () {
115
115
  return (React.createElement(ViewWin32_1.ViewWin32, { keyDownEvents: handledNativeKeyboardEvents, keyUpEvents: handledNativeKeyboardEvents },
116
- React.createElement(ViewWin32_1.ViewWin32, { style: this.state.hasFocus ? [styles.keyComponentRoot, styles.border] : styles.keyComponentRoot, focusable: true, onKeyUp: this._onKeyUp, onKeyDown: this._onKeyDown, onFocus: this._onFocus, onBlur: this._onBlur },
116
+ React.createElement(ViewWin32_1.ViewWin32, { style: this.state.hasFocus ? [styles.keyComponentRoot, styles.border] : styles.keyComponentRoot, focusable: true, onKeyUp: this._onKeyUp, onKeyDown: this._onKeyDown, onFocus: this._onFocus, onBlur: this._onBlur, enableFocusRing: false },
117
117
  React.createElement(ViewWin32_1.ViewWin32, { style: styles.keyEnterVisualizer },
118
118
  React.createElement(react_native_1.Text, null, "OnKeyDown"),
119
119
  React.createElement(react_native_1.Text, null, "----"),
@@ -189,6 +189,44 @@ var CursorExample = function () {
189
189
  React.createElement(CursorTestComponent, { cursor: 'text' }),
190
190
  React.createElement(CursorTestComponent, { cursor: 'we-resize' })));
191
191
  };
192
+ var EnableFocusRingExample = /** @class */ (function (_super) {
193
+ __extends(EnableFocusRingExample, _super);
194
+ function EnableFocusRingExample(props) {
195
+ var _this = _super.call(this, props) || this;
196
+ _this._onFocus = function () {
197
+ _this.setState({
198
+ hasFocus: true,
199
+ });
200
+ };
201
+ _this._onBlur = function () {
202
+ _this.setState({
203
+ hasFocus: false,
204
+ });
205
+ };
206
+ _this.state = {
207
+ hasFocus: false,
208
+ };
209
+ return _this;
210
+ }
211
+ EnableFocusRingExample.prototype.render = function () {
212
+ return (React.createElement(ViewWin32_1.ViewWin32, { style: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-around', marginVertical: 5 } },
213
+ React.createElement(ViewWin32_1.ViewWin32, { style: {
214
+ backgroundColor: 'pink',
215
+ height: 100,
216
+ width: 100,
217
+ }, enableFocusRing: true, focusable: true },
218
+ React.createElement(react_native_1.Text, null, "enableFocusRing set to true")),
219
+ React.createElement(ViewWin32_1.ViewWin32, { style: {
220
+ backgroundColor: 'pink',
221
+ height: 100,
222
+ width: 100,
223
+ }, enableFocusRing: false, focusable: true, onFocus: this._onFocus, onBlur: this._onBlur },
224
+ React.createElement(React.Fragment, null,
225
+ React.createElement(react_native_1.Text, null, "enableFocusRing set to false"),
226
+ React.createElement(react_native_1.Text, null, this.state.hasFocus ? 'Focus: Yes' : 'Focus: No')))));
227
+ };
228
+ return EnableFocusRingExample;
229
+ }(React.Component));
192
230
  exports.title = 'ViewWin32';
193
231
  exports.displayName = 'ViewWin32 Example';
194
232
  exports.description = 'All the stock View props plus Win32 specific ones';
@@ -231,5 +269,12 @@ exports.examples = [
231
269
  return React.createElement(CursorExample, null);
232
270
  },
233
271
  },
272
+ {
273
+ title: 'EnableFocusRing example',
274
+ description: 'Displays focus visuals that are driven by native',
275
+ render: function () {
276
+ return React.createElement(EnableFocusRingExample, null);
277
+ },
278
+ },
234
279
  ];
235
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmlld1dpbjMyVGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9MaWJyYXJpZXMvQ29tcG9uZW50cy9WaWV3L1Rlc3RzL1ZpZXdXaW4zMlRlc3QudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQUNiLDZCQUErQjtBQUMvQiw2Q0FBb0U7QUFDcEUsMENBQXlDO0FBR3pDLElBQU0sTUFBTSxHQUFHLHlCQUFVLENBQUMsTUFBTSxDQUFDO0lBQy9CLE1BQU0sRUFBRTtRQUNOLFdBQVcsRUFBRSxRQUFRO1FBQ3JCLFdBQVcsRUFBRSxPQUFPO0tBQ3JCO0lBQ0QsZ0JBQWdCLEVBQUU7UUFDaEIsV0FBVyxFQUFFLENBQUM7UUFDZCxhQUFhLEVBQUUsS0FBSztRQUNwQixjQUFjLEVBQUUsQ0FBQztRQUNqQixlQUFlLEVBQUUsWUFBWTtRQUM3QixjQUFjLEVBQUUsY0FBYztLQUMvQjtJQUNELGtCQUFrQixFQUFFO1FBQ2xCLE1BQU0sRUFBRSxDQUFDO1FBQ1QsVUFBVSxFQUFFLFFBQVE7UUFDcEIsUUFBUSxFQUFFLEdBQUc7UUFDYixTQUFTLEVBQUUsRUFBRTtLQUNkO0lBQ0QsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRTtDQUMxRSxDQUFDLENBQUM7QUFNSDtJQUFzQywyQ0FBNkM7SUFJakYsaUNBQW1CLEtBQUs7UUFBeEIsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FLYjtRQVRPLGtCQUFZLEdBQWMsSUFBSSxDQUFDO1FBZ0N0QixhQUFPLEdBQUcsVUFBQyxHQUFjO1lBQ3hDLEtBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO1FBQzFCLENBQUMsQ0FBQztRQUVlLGNBQVEsR0FBRztZQUMxQixJQUFJLEtBQUksQ0FBQyxZQUFZLEtBQUssU0FB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O0lBQ3RCO1FBQ0UsS0FBSyxFQUFFLHdCQUF3QjtRQUMvQixXQUFXLEVBQUUscUVBQXFFO1FBQ2xGLE1BQU0sRUFBTjtZQUNFLE9BQU8sQ0FDTCxvQkFBQyxxQkFBUztnQkFDUixvQkFBQyx1QkFBdUIsT0FBRztnQkFDM0Isb0JBQUMsdUJBQXVCLE9BQUc7Z0JBQzNCLG9CQUFDLHVCQUF1QixPQUFHLENBQ2pCLENBQ2IsQ0FBQztRQUNKLENBQUM7S0FDRjtJQUNEO1FBQ0UsS0FBSyxFQUFFLHdCQUF3QjtRQUMvQixXQUFXLEVBQUUsdUNBQXVDO1FBQ3BELE1BQU0sRUFBTjtZQUNFLE9BQU8sb0JBQUMscUJBQXFCLE9BQUcsQ0FBQztRQUNuQyxDQUFDO0tBQ0Y7SUFDRDtRQUNFLEtBQUssRUFBRSxlQUFlO1FBQ3RCLFdBQVcsRUFBRSxpQkFBaUI7UUFDOUIsTUFBTSxFQUFOO1lBQ0UsT0FBTyxvQkFBQyxZQUFZLE9BQUcsQ0FBQztRQUMxQixDQUFDO0tBQ0Y7SUFDRDtRQUNFLEtBQUssRUFBRSxpQkFBaUI7UUFDeEIsV0FBVyxFQUFFLDZCQUE2QjtRQUMxQyxNQUFNLEVBQU47WUFDRSxPQUFPLG9CQUFDLGNBQWMsT0FBRyxDQUFDO1FBQzVCLENBQUM7S0FDRjtJQUNEO1FBQ0UsS0FBSyxFQUFFLGdCQUFnQjtRQUN2QixXQUFXLEVBQUUsdURBQXVEO1FBQ3BFLE1BQU0sRUFBTjtZQUNFLE9BQU8sb0JBQUMsYUFBYSxPQUFHLENBQUM7UUFDM0IsQ0FBQztLQUNGO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFN0eWxlU2hlZXQsIFRleHQsIFRvdWNoYWJsZUhpZ2hsaWdodCB9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5pbXBvcnQgeyBWaWV3V2luMzIgfSBmcm9tICcuLi9WaWV3V2luMzInO1xuaW1wb3J0IHsgQ3Vyc29yLCBJS2V5Ym9hcmRFdmVudCwgSUhhbmRsZWRLZXlib2FyZEV2ZW50IH0gZnJvbSAnLi4vVmlld1dpbjMyLlByb3BzJztcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBib3JkZXI6IHtcbiAgICBib3JkZXJTdHlsZTogJ2RvdHRlZCcsXG4gICAgYm9yZGVyQ29sb3I6ICdibGFjaycsXG4gIH0sXG4gIGtleUNvbXBvbmVudFJvb3Q6IHtcbiAgICBib3JkZXJXaWR0aDogMixcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBtYXJnaW5WZXJ0aWNhbDogNSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZXNtb2tlJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWFyb3VuZCcsXG4gIH0sXG4gIGtleUVudGVyVmlzdWFsaXplcjoge1xuICAgIG1hcmdpbjogNSxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBtaW5XaWR0aDogMTAwLFxuICAgIG1pbkhlaWdodDogMzAsXG4gIH0sXG4gIGJsYWNrYm94OiB7IGhlaWdodDogMzAsIHdpZHRoOiAzMCwgYm9yZGVyQ29sb3I6ICdibGFjaycsIGJvcmRlcldpZHRoOiAzIH0sXG59KTtcblxuaW50ZXJmYWNlIElGb2N1c2FibGVDb21wb25lbnRTdGF0ZSB7XG4gIGhhc0ZvY3VzOiBib29sZWFuO1xufVxuXG5jbGFzcyBGb2N1c01vdmVyVGVzdENvbXBvbmVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7fSwgSUZvY3VzYWJsZUNvbXBvbmVudFN0YXRlPiB7XG4gIHByaXZhdGUgX2ZvY3VzVGFyZ2V0OiBWaWV3V2luMzIgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sYWJlbGVkQnk6IFJlYWN0LlJlZk9iamVjdDxWaWV3V2luMzI+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaGFzRm9jdXM6IGZhbHNlLFxuICAgIH07XG4gICAgdGhpcy5fbGFiZWxlZEJ5ID0gUmVhY3QuY3JlYXRlUmVmPFZpZXdXaW4zMj4oKTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1dpbjMyPlxuICAgICAgICA8Vmlld1dpbjMyIHJlZj17dGhpcy5fbGFiZWxlZEJ5fSBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJzZXBhcmF0ZSBsYWJlbCBmb3IgdGVzdFwiIC8+XG4gICAgICA8Vmlld1dpbjMyIHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1hcm91bmQnLCBtYXJnaW5WZXJ0aWNhbDogNSB9fT5cbiAgICAgICAgPFRvdWNoYWJsZUhpZ2hsaWdodCBvblByZXNzPXt0aGlzLl9vblByZXNzfT5cbiAgICAgICAgICA8Vmlld1dpbjMyIGFjY2Vzc2liaWxpdHlMYWJlbGVkQnk9e3RoaXMuX2xhYmVsZWRCeX0gc3R5bGU9e3N0eWxlcy5ibGFja2JveH0gLz5cbiAgICAgICAgPC9Ub3VjaGFibGVIaWdobGlnaHQ+XG4gICAgICAgIDxWaWV3V2luMzJcbiAgICAgICAgICByZWY9e3RoaXMuX3NldFJlZn1cbiAgICAgICAgICBmb2N1c2FibGVcbiAgICAgICAgICBzdHlsZT17dGhpcy5zdGF0ZS5oYXNGb2N1cyA/IHsgYmFja2dyb3VuZENvbG9yOiAnI2FlZThmY2ZmJyB9IDogeyBiYWNrZ3JvdW5kQ29sb3I6ICcjMDAwMDAwMDAnIH19XG4gICAgICAgICAgb25Gb2N1cz17dGhpcy5fb25Gb2N1c31cbiAgICAgICAgICBvbkJsdXI9e3RoaXMuX29uQmx1cn1cbiAgICAgICAgPlxuICAgICAgICAgIDxUZXh0Pnt0aGlzLnN0YXRlLmhhc0ZvY3VzID8gJ0ZvY3VzOiBZZXMnIDogJ0ZvY3VzOiBObyd9PC9UZXh0PlxuICAgICAgICA8L1ZpZXdXaW4zMj5cbiAgICAgIDwvVmlld1dpbjMyPlxuICAgICAgPC9WaWV3V2luMzI+XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldFJlZiA9IChyZWY6IFZpZXdXaW4zMikgPT4ge1xuICAgIHRoaXMuX2ZvY3VzVGFyZ2V0ID0gcmVmO1xuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29uUHJlc3MgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuX2ZvY3VzVGFyZ2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2ZvY3VzVGFyZ2V0LmZvY3VzKCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29uRm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBoYXNGb2N1czogdHJ1ZSxcbiAgICB9KTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vbkJsdXIgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBoYXNGb2N1czogZmFsc2UsXG4gICAgfSk7XG4gIH07XG59XG5cbmludGVyZmFjZSBJS2V5Ym9hcmRhYmxlQ29tcG9uZW50U3RhdGUge1xuICBsYXN0S2V5RG93bjogc3RyaW5nO1xuICBsYXN0S2V5VXA6IHN0cmluZztcbn1cblxuY29uc3QgaGFuZGxlZE5hdGl2ZUtleWJvYXJkRXZlbnRzOiBJSGFuZGxlZEtleWJvYXJkRXZlbnRbXSA9IFtcbiAgeyBrZXk6ICdBcnJvd0Rvd24nIH0sXG4gIHsga2V5OiAnQXJyb3dVcCcgfSxcbiAgeyBrZXk6ICdBcnJvd0xlZnQnIH0sXG4gIHsga2V5OiAnQXJyb3dSaWdodCcgfSxcbiAgeyBrZXk6ICdUYWInIH0sXG5dO1xuXG5jbGFzcyBLZXlib2FyZFRlc3RDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8e30sIElGb2N1c2FibGVDb21wb25lbnRTdGF0ZSAmIElLZXlib2FyZGFibGVDb21wb25lbnRTdGF0ZT4ge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZSxcbiAgICAgIGxhc3RLZXlEb3duOiBudWxsLFxuICAgICAgbGFzdEtleVVwOiBudWxsLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1dpbjMyIGtleURvd25FdmVudHM9e2hhbmRsZWROYXRpdmVLZXlib2FyZEV2ZW50c30ga2V5VXBFdmVudHM9e2hhbmRsZWROYXRpdmVLZXlib2FyZEV2ZW50c30+XG4gICAgICAgIDxWaWV3V2luMzJcbiAgICAgICAgICBzdHlsZT17dGhpcy5zdGF0ZS5oYXNGb2N1cyA/IFtzdHlsZXMua2V5Q29tcG9uZW50Um9vdCwgc3R5bGVzLmJvcmRlcl0gOiBzdHlsZXMua2V5Q29tcG9uZW50Um9vdH1cbiAgICAgICAgICBmb2N1c2FibGVcbiAgICAgICAgICBvbktleVVwPXt0aGlzLl9vbktleVVwfVxuICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5fb25LZXlEb3dufVxuICAgICAgICAgIG9uRm9jdXM9e3RoaXMuX29uRm9jdXN9XG4gICAgICAgICAgb25CbHVyPXt0aGlzLl9vbkJsdXJ9XG4gICAgICAgID5cbiAgICAgICAgICA8Vmlld1dpbjMyIHN0eWxlPXtzdHlsZXMua2V5RW50ZXJWaXN1YWxpemVyfT5cbiAgICAgICAgICAgIDxUZXh0Pk9uS2V5RG93bjwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0Pi0tLS08L1RleHQ+XG4gICAgICAgICAgICA8VGV4dD57dGhpcy5zdGF0ZS5sYXN0S2V5RG93biAhPT0gbnVsbCA/IHRoaXMuc3RhdGUubGFzdEtleURvd24gOiAnICd9PC9UZXh0PlxuICAgICAgICAgIDwvVmlld1dpbjMyPlxuICAgICAgICAgIDxWaWV3V2luMzIgc3R5bGU9e3N0eWxlcy5rZXlFbnRlclZpc3VhbGl6ZXJ9PlxuICAgICAgICAgICAgPFRleHQ+T25LZXlVcDwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0Pi0tLS08L1RleHQ+XG4gICAgICAgICAgICA8VGV4dD57dGhpcy5zdGF0ZS5sYXN0S2V5VXAgIT09IG51bGwgPyB0aGlzLnN0YXRlLmxhc3RLZXlVcCA6ICcgJ308L1RleHQ+XG4gICAgICAgICAgPC9WaWV3V2luMzI+XG4gICAgICAgIDwvVmlld1dpbjMyPlxuICAgICAgPC9WaWV3V2luMzI+XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29uRm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBoYXNGb2N1czogdHJ1ZSxcbiAgICB9KTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vbkJsdXIgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBoYXNGb2N1czogZmFsc2UsXG4gICAgfSk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb25LZXlVcCA9IChldjogSUtleWJvYXJkRXZlbnQpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgbGFzdEtleVVwOiBldi5uYXRpdmVFdmVudC5rZXksIGxhc3RLZXlEb3duOiBudWxsIH0pO1xuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29uS2V5RG93biA9IChldjogSUtleWJvYXJkRXZlbnQpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgbGFzdEtleURvd246IGV2Lm5hdGl2ZUV2ZW50LmtleSwgbGFzdEtleVVwOiBudWxsIH0pO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgSUhvdmVyQ29tcG9uZW50UHJvcHMge1xuICBjb2xvcjogc3RyaW5nO1xufVxuY2xhc3MgSG92ZXJUZXN0Q29tcG9uZW50IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PElIb3ZlckNvbXBvbmVudFByb3BzLCBJRm9jdXNhYmxlQ29tcG9uZW50U3RhdGU+IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBoYXNGb2N1czogZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3V2luMzJcbiAgICAgICAgb25Nb3VzZUVudGVyPXt0aGlzLl9vbk1vdXNlRW50ZXJ9XG4gICAgICAgIG9uTW91c2VMZWF2ZT17dGhpcy5fb25Nb3VzZUxlYXZlfVxuICAgICAgICBzdHlsZT17dGhpcy5zdGF0ZS5oYXNGb2N1cyA/IFtzdHlsZXMuYmxhY2tib3gsIHsgYmFja2dyb3VuZENvbG9yOiB0aGlzLnByb3BzLmNvbG9yIH1dIDogc3R5bGVzLmJsYWNrYm94fVxuICAgICAgLz5cbiAgICApO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX29uTW91c2VMZWF2ZSA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgaGFzRm9jdXM6IGZhbHNlIH0pO1xuICB9O1xuICBwcml2YXRlIHJlYWRvbmx5IF9vbk1vdXNlRW50ZXIgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IGhhc0ZvY3VzOiB0cnVlIH0pO1xuICB9O1xufVxuXG5jbGFzcyBIb3ZlckV4YW1wbGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1dpbjMyIHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBtYXJnaW5Ib3Jpem9udGFsOiA3NSwganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1hcm91bmQnIH19PlxuICAgICAgICA8SG92ZXJUZXN0Q29tcG9uZW50IGNvbG9yPVwicmVkXCIgLz5cbiAgICAgICAgPEhvdmVyVGVzdENvbXBvbmVudCBjb2xvcj1cIm9yYW5nZVwiIC8+XG4gICAgICAgIDxIb3ZlclRlc3RDb21wb25lbnQgY29sb3I9XCJ5ZWxsb3dcIiAvPlxuICAgICAgICA8SG92ZXJUZXN0Q29tcG9uZW50IGNvbG9yPVwiZ3JlZW5cIiAvPlxuICAgICAgICA8SG92ZXJUZXN0Q29tcG9uZW50IGNvbG9yPVwiYmx1ZVwiIC8+XG4gICAgICAgIDxIb3ZlclRlc3RDb21wb25lbnQgY29sb3I9XCJpbmRpZ29cIiAvPlxuICAgICAgICA8SG92ZXJUZXN0Q29tcG9uZW50IGNvbG9yPVwidmlvbGV0XCIgLz5cbiAgICAgIDwvVmlld1dpbjMyPlxuICAgICk7XG4gIH1cbn1cblxuY29uc3QgVG9vbFRpcEV4YW1wbGU6IFJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50PHt9PiA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8Vmlld1dpbjMyXG4gICAgICBzdHlsZT17e1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZWQnLFxuICAgICAgICBoZWlnaHQ6IDEwMCxcbiAgICAgICAgd2lkdGg6IDEwMCxcbiAgICAgIH19XG4gICAgICB0b29sdGlwPVwiRXhhbXBsZSB0b29sdGlwXCJcbiAgICAgIGN1cnNvcj1cInBvaW50ZXJcIlxuICAgIC8+XG4gICk7XG59O1xuXG5pbnRlcmZhY2UgSUN1cnNvclRlc3RDb21wb25lbnRQcm9wcyB7XG4gIGN1cnNvcjogQ3Vyc29yXG59XG5cbmNvbnN0IEN1cnNvclRlc3RDb21wb25lbnQ6IFJlYWN0LkZ1bmN0aW9uQ29tcG9uZW50PElDdXJzb3JUZXN0Q29tcG9uZW50UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPFZpZXdXaW4zMiBzdHlsZT17e2ZsZXhEaXJlY3Rpb246ICdjb2x1bW4nfX0+XG4gICAgICA8VGV4dD57cHJvcHMuY3Vyc29yfTwvVGV4dD5cbiAgICAgIDxWaWV3V2luMzIgY3Vyc29yPXtwcm9wcy5jdXJzb3J9IHN0eWxlPXtzdHlsZXMuYmxhY2tib3h9IC8+XG4gICAgPC9WaWV3V2luMzI+XG4gIClcbn1cblxuY29uc3QgQ3Vyc29yRXhhbXBsZTogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQgPSAoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgPFZpZXdXaW4zMiBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1hcm91bmQnIH19PlxuICAgICAgPEN1cnNvclRlc3RDb21wb25lbnQgY3Vyc29yPSdhdXRvJyAvPlxuICAgICAgPEN1cnNvclRlc3RDb21wb25lbnQgY3Vyc29yPSdkZWZhdWx0JyAvPlxuICAgICAgPEN1cnNvclRlc3RDb21wb25lbnQgY3Vyc29yPSdoZWxwJyAvPlxuICAgICAgPEN1cnNvclRlc3RDb21wb25lbnQgY3Vyc29yPSduZXN3LXJlc2l6ZScgLz5cbiAgICAgIDxDdXJzb3JUZXN0Q29tcG9uZW50IGN1cnNvcj0nbm90LWFsbG93ZWQnIC8+XG4gICAgICA8Q3Vyc29yVGVzdENvbXBvbmVudCBjdXJzb3I9J25zLXJlc2l6ZScgLz5cbiAgICAgIDxDdXJzb3JUZXN0Q29tcG9uZW50IGN1cnNvcj0nbndzZS1yZXNpemUnIC8+XG4gICAgICA8Q3Vyc29yVGVzdENvbXBvbmVudCBjdXJzb3I9J3BvaW50ZXInIC8+XG4gICAgICA8Q3Vyc29yVGVzdENvbXBvbmVudCBjdXJzb3I9J3dhaXQnIC8+XG4gICAgICA8Q3Vyc29yVGVzdENvbXBvbmVudCBjdXJzb3I9J21vdmUnIC8+XG4gICAgICA8Q3Vyc29yVGVzdENvbXBvbmVudCBjdXJzb3I9J3RleHQnIC8+XG4gICAgICA8Q3Vyc29yVGVzdENvbXBvbmVudCBjdXJzb3I9J3dlLXJlc2l6ZScgLz5cbiAgICA8L1ZpZXdXaW4zMj5cbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IHRpdGxlID0gJ1ZpZXdXaW4zMic7XG5leHBvcnQgY29uc3QgZGlzcGxheU5hbWUgPSAnVmlld1dpbjMyIEV4YW1wbGUnO1xuZXhwb3J0IGNvbnN0IGRlc2NyaXB0aW9uID0gJ0FsbCB0aGUgc3RvY2sgVmlldyBwcm9wcyBwbHVzIFdpbjMyIHNwZWNpZmljIG9uZXMnO1xuZXhwb3J0IGNvbnN0IGV4YW1wbGVzID0gW1xuICB7XG4gICAgdGl0bGU6ICdmb2N1cygpIG1ldGhvZCBleGFtcGxlJyxcbiAgICBkZXNjcmlwdGlvbjogJ0VhY2ggb2YgdGhlc2UgYmxhY2sgYm94ZXMgbW92ZXMgZm9jdXMgdG8gdGhlIFZpZXdXaW4zMiBvbiB0aGUgcmlnaHQnLFxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlld1dpbjMyPlxuICAgICAgICAgIDxGb2N1c01vdmVyVGVzdENvbXBvbmVudCAvPlxuICAgICAgICAgIDxGb2N1c01vdmVyVGVzdENvbXBvbmVudCAvPlxuICAgICAgICAgIDxGb2N1c01vdmVyVGVzdENvbXBvbmVudCAvPlxuICAgICAgICA8L1ZpZXdXaW4zMj5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnS2V5Ym9hcmRFdmVudHMgZXhhbXBsZScsXG4gICAgZGVzY3JpcHRpb246ICdOYXRpdmUga2V5Ym9hcmRpbmcgaGFzIGJlZW4gcHJldmVudGVkJyxcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgICAgcmV0dXJuIDxLZXlib2FyZFRlc3RDb21wb25lbnQgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnSG92ZXIgZXhhbXBsZScsXG4gICAgZGVzY3JpcHRpb246ICdIb3ZlciBhIHJhaW5ib3cnLFxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgICByZXR1cm4gPEhvdmVyRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdUb29sdGlwIGV4YW1wbGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnRGlzcGxheXMgYSB0b29sdGlwIG9uIGhvdmVyJyxcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgICAgcmV0dXJuIDxUb29sVGlwRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdDdXJzb3IgZXhhbXBsZScsXG4gICAgZGVzY3JpcHRpb246ICdFYWNoIG9mIHRoZXNlIGJveGVzIHNob3VsZCBkaXNwbGF5IGEgZGlmZmVyZW50IGN1cnNvcicsXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICAgIHJldHVybiA8Q3Vyc29yRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuXTtcbiJdfQ==
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmlld1dpbjMyVGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9MaWJyYXJpZXMvQ29tcG9uZW50cy9WaWV3L1Rlc3RzL1ZpZXdXaW4zMlRlc3QudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVksQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQUNiLDZCQUErQjtBQUMvQiw2Q0FBb0U7QUFDcEUsMENBQXlDO0FBR3pDLElBQU0sTUFBTSxHQUFHLHlCQUFVLENBQUMsTUFBTSxDQUFDO0lBQy9CLE1BQU0sRUFBRTtRQUNOLFdBQVcsRUFBRSxRQUFRO1FBQ3JCLFdBQVcsRUFBRSxPQUFPO0tBQ3JCO0lBQ0QsZ0JBQWdCLEVBQUU7UUFDaEIsV0FBVyxFQUFFLENBQUM7UUFDZCxhQUFhLEVBQUUsS0FBSztRQUNwQixjQUFjLEVBQUUsQ0FBQztRQUNqQixlQUFlLEVBQUUsWUFBWTtRQUM3QixjQUFjLEVBQUUsY0FBYztLQUMvQjtJQUNELGtCQUFrQixFQUFFO1FBQ2xCLE1BQU0sRUFBRSxDQUFDO1FBQ1QsVUFBVSxFQUFFLFFBQVE7UUFDcEIsUUFBUSxFQUFFLEdBQUc7UUFDYixTQUFTLEVBQUUsRUFBRTtLQUNkO0lBQ0QsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRTtDQUMxRSxDQUFDLENBQUM7QUFNSDtJQUFzQywyQ0FBNkM7SUFJakYsaUNBQW1CLEtBQUs7UUFBeEIsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FLYjtRQVRPLGtCQUFZLEdBQWMsSUFBSSxDQUFDO1FBaUN0QixhQUFPLEdBQUcsVUFBQyxHQUFjO1lBQ3hDLEtBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO1FBQzFCLENBQUMsQ0FBQztRQUVlLGNBQVEsR0FBRztZQUMxQixJQUFJLEtBQUksQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFO2dCQUNuQyxLQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO2FBQzNCO1FBQ0gsQ0FBQyxDQUFDO1FBRWUsY0FBUSxHQUFHO1lBQzFCLEtBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ1osUUFBUSxFQUFFLElBQUk7YUFDZixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFFZSxhQUFPLEdBQUc7WUFDekIsS0FBSSxDQUFDLFFBQVEsQ0FBQztnQkFDWixRQUFRLEVBQUUsS0FBSzthQUNoQixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUM7UUFoREEsS0FBSSxDQUFDLEtBQUssR0FBRztZQUNYLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUM7UUFDRixLQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQWEsQ0FBQzs7SUFDakQsQ0FBQztJQUNNLHdDQUFNLEdBQWI7UUFDRSxPQUFPLENBQ0wsb0JBQUMscUJBQVM7WUFDUixvQkFBQyxxQkFBUyxJQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLGtCQUFrQixFQUFDLHlCQUF5QixFQUFDLHFCQUFxQixFQUFDLFNBQVMsR0FBRztZQUNsSCxvQkFBQyxxQkFBUyxJQUFDLEtBQUssRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUU7Z0JBQ2pILG9CQUFDLGlDQUFrQixJQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUTtvQkFDeEMsb0JBQUMscUJBQVMsSUFBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsUUFBUSxHQUFJLENBQzNEO2dCQUNyQixvQkFBQyxxQkFBUyxJQUNSLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUNqQixTQUFTLFFBQ1QsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLEVBQ2hHLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUN0QixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFDcEIsZUFBZSxFQUFFLEtBQUs7b0JBRXRCLG9CQUFDLG1CQUFJLFFBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFRLENBQ3JELENBQ0YsQ0FDQSxDQUNiLENBQUM7SUFDSixDQUFDO0lBdUJILDhCQUFDO0FBQUQsQ0FBQyxBQXZERCxDQUFzQyxLQUFLLENBQUMsU0FBUyxHQXVEcEQ7QUFPRCxJQUFNLDJCQUEyQixHQUE0QjtJQUMzRCxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUU7SUFDcEIsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFO0lBQ2xCLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRTtJQUNwQixFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUU7SUFDckIsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO0NBQ2YsQ0FBQztBQUVGO0lBQW9DLHlDQUEyRTtJQUM3RywrQkFBbUIsS0FBSztRQUF4QixZQUNFLGtCQUFNLEtBQUssQ0FBQyxTQU1iO1FBNkJnQixjQUFRLEdBQUc7WUFDMUIsS0FBSSxDQUFDLFFBQVEsQ0FBQztnQkFDWixRQUFRLEVBQUUsSUFBSTthQUNmLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVlLGFBQU8sR0FBRztZQUN6QixLQUFJLENBQUMsUUFBUSxDQUFDO2dCQUNaLFFBQVEsRUFBRSxLQUFLO2FBQ2hCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVlLGNBQVEsR0FBRyxVQUFDLEVBQWtCO1lBQzdDLEtBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEUsQ0FBQyxDQUFDO1FBRWUsZ0JBQVUsR0FBRyxVQUFDLEVBQWtCO1lBQy9DLEtBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEUsQ0FBQyxDQUFDO1FBcERBLEtBQUksQ0FBQyxLQUFLLEdBQUc7WUFDWCxRQUFRLEVBQUUsS0FBSztZQUNmLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUM7O0lBQ0osQ0FBQztJQUVNLHNDQUFNLEdBQWI7UUFDRSxPQUFPLENBQ0wsb0JBQUMscUJBQVMsSUFBQyxhQUFhLEVBQUUsMkJBQTJCLEVBQUUsV0FBVyxFQUFFLDJCQUEyQjtZQUM3RixvQkFBQyxxQkFBUyxJQUNSLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQy9GLFNBQVMsUUFDVCxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFDdEIsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQzFCLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUN0QixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFDcEIsZUFBZSxFQUFFLEtBQUs7Z0JBRXRCLG9CQUFDLHFCQUFTLElBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxrQkFBa0I7b0JBQ3pDLG9CQUFDLG1CQUFJLG9CQUFpQjtvQkFDdEIsb0JBQUMsbUJBQUksZUFBWTtvQkFDakIsb0JBQUMsbUJBQUksUUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQVEsQ0FDbkU7Z0JBQ1osb0JBQUMscUJBQVMsSUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLGtCQUFrQjtvQkFDekMsb0JBQUMsbUJBQUksa0JBQWU7b0JBQ3BCLG9CQUFDLG1CQUFJLGVBQVk7b0JBQ2pCLG9CQUFDLG1CQUFJLFFBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFRLENBQy9ELENBQ0YsQ0FDRixDQUNiLENBQUM7SUFDSixDQUFDO0lBcUJILDRCQUFDO0FBQUQsQ0FBQyxBQXhERCxDQUFvQyxLQUFLLENBQUMsU0FBUyxHQXdEbEQ7QUFLRDtJQUFpQyxzQ0FBK0Q7SUFDOUYsNEJBQW1CLEtBQUs7UUFBeEIsWUFDRSxrQkFBTSxLQUFLLENBQUMsU0FJYjtRQVdnQixtQkFBYSxHQUFHO1lBQy9CLEtBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUM7UUFDZSxtQkFBYSxHQUFHO1lBQy9CLEtBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUM7UUFuQkEsS0FBSSxDQUFDLEtBQUssR0FBRztZQUNYLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUM7O0lBQ0osQ0FBQztJQUVNLG1DQUFNLEdBQWI7UUFDRSxPQUFPLENBQ0wsb0JBQUMscUJBQVMsSUFDUixZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFDaEMsWUFBWSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQ2hDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FDdkcsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQU9ILHlCQUFDO0FBQUQsQ0FBQyxBQXZCRCxDQUFpQyxLQUFLLENBQUMsU0FBUyxHQXVCL0M7QUFFRDtJQUEyQixnQ0FBZTtJQUExQzs7SUFjQSxDQUFDO0lBYlEsNkJBQU0sR0FBYjtRQUNFLE9BQU8sQ0FDTCxvQkFBQyxxQkFBUyxJQUFDLEtBQUssRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUU7WUFDOUYsb0JBQUMsa0JBQWtCLElBQUMsS0FBSyxFQUFDLEtBQUssR0FBRztZQUNsQyxvQkFBQyxrQkFBa0IsSUFBQyxLQUFLLEVBQUMsUUFBUSxHQUFHO1lBQ3JDLG9CQUFDLGtCQUFrQixJQUFDLEtBQUssRUFBQyxRQUFRLEdBQUc7WUFDckMsb0JBQUMsa0JBQWtCLElBQUMsS0FBSyxFQUFDLE9BQU8sR0FBRztZQUNwQyxvQkFBQyxrQkFBa0IsSUFBQyxLQUFLLEVBQUMsTUFBTSxHQUFHO1lBQ25DLG9CQUFDLGtCQUFrQixJQUFDLEtBQUssRUFBQyxRQUFRLEdBQUc7WUFDckMsb0JBQUMsa0JBQWtCLElBQUMsS0FBSyxFQUFDLFFBQVEsR0FBRyxDQUMzQixDQUNiLENBQUM7SUFDSixDQUFDO0lBQ0gsbUJBQUM7QUFBRCxDQUFDLEFBZEQsQ0FBMkIsS0FBSyxDQUFDLFNBQVMsR0FjekM7QUFFRCxJQUFNLGNBQWMsR0FBZ0M7SUFDbEQsT0FBTyxDQUNMLG9CQUFDLHFCQUFTLElBQ1IsS0FBSyxFQUFFO1lBQ0wsZUFBZSxFQUFFLEtBQUs7WUFDdEIsTUFBTSxFQUFFLEdBQUc7WUFDWCxLQUFLLEVBQUUsR0FBRztTQUNYLEVBQ0QsT0FBTyxFQUFDLGlCQUFpQixFQUN6QixNQUFNLEVBQUMsU0FBUyxHQUNoQixDQUNILENBQUM7QUFDSixDQUFDLENBQUM7QUFNRixJQUFNLG1CQUFtQixHQUF1RCxVQUFDLEtBQUs7SUFDcEYsT0FBTyxDQUNMLG9CQUFDLHFCQUFTLElBQUMsS0FBSyxFQUFFLEVBQUMsYUFBYSxFQUFFLFFBQVEsRUFBQztRQUN6QyxvQkFBQyxtQkFBSSxRQUFFLEtBQUssQ0FBQyxNQUFNLENBQVE7UUFDM0Isb0JBQUMscUJBQVMsSUFBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLFFBQVEsR0FBSSxDQUNqRCxDQUNiLENBQUE7QUFDSCxDQUFDLENBQUE7QUFFRCxJQUFNLGFBQWEsR0FBNEI7SUFDN0MsT0FBTyxDQUNMLG9CQUFDLHFCQUFTLElBQUMsS0FBSyxFQUFFLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFO1FBQ3hFLG9CQUFDLG1CQUFtQixJQUFDLE1BQU0sRUFBQyxNQUFNLEdBQUc7UUFDckMsb0JBQUMsbUJBQW1CLElBQUMsTUFBTSxFQUFDLFNBQVMsR0FBRztRQUN4QyxvQkFBQyxtQkFBbUIsSUFBQyxNQUFNLEVBQUMsTUFBTSxHQUFHO1FBQ3JDLG9CQUFDLG1CQUFtQixJQUFDLE1BQU0sRUFBQyxhQUFhLEdBQUc7UUFDNUMsb0JBQUMsbUJBQW1CLElBQUMsTUFBTSxFQUFDLGFBQWEsR0FBRztRQUM1QyxvQkFBQyxtQkFBbUIsSUFBQyxNQUFNLEVBQUMsV0FBVyxHQUFHO1FBQzFDLG9CQUFDLG1CQUFtQixJQUFDLE1BQU0sRUFBQyxhQUFhLEdBQUc7UUFDNUMsb0JBQUMsbUJBQW1CLElBQUMsTUFBTSxFQUFDLFNBQVMsR0FBRztRQUN4QyxvQkFBQyxtQkFBbUIsSUFBQyxNQUFNLEVBQUMsTUFBTSxHQUFHO1FBQ3JDLG9CQUFDLG1CQUFtQixJQUFDLE1BQU0sRUFBQyxNQUFNLEdBQUc7UUFDckMsb0JBQUMsbUJBQW1CLElBQUMsTUFBTSxFQUFDLE1BQU0sR0FBRztRQUNyQyxvQkFBQyxtQkFBbUIsSUFBQyxNQUFNLEVBQUMsV0FBVyxHQUFHLENBQ2hDLENBQ2IsQ0FBQztBQUNKLENBQUMsQ0FBQTtBQUNEO0lBQXFDLDBDQUE2QztJQUNoRixnQ0FBbUIsS0FBSztRQUF4QixZQUNFLGtCQUFNLEtBQUssQ0FBQyxTQUliO1FBb0NnQixjQUFRLEdBQUc7WUFDMUIsS0FBSSxDQUFDLFFBQVEsQ0FBQztnQkFDWixRQUFRLEVBQUUsSUFBSTthQUNmLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQUVlLGFBQU8sR0FBRztZQUN6QixLQUFJLENBQUMsUUFBUSxDQUFDO2dCQUNaLFFBQVEsRUFBRSxLQUFLO2FBQ2hCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztRQWpEQSxLQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1gsUUFBUSxFQUFFLEtBQUs7U0FDaEIsQ0FBQzs7SUFDSixDQUFDO0lBRU0sdUNBQU0sR0FBYjtRQUNFLE9BQU8sQ0FDTCxvQkFBQyxxQkFBUyxJQUFDLEtBQUssRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUU7WUFDakgsb0JBQUMscUJBQVMsSUFDUixLQUFLLEVBQUU7b0JBQ0wsZUFBZSxFQUFFLE1BQU07b0JBQ3ZCLE1BQU0sRUFBRSxHQUFHO29CQUNYLEtBQUssRUFBRSxHQUFHO2lCQUNYLEVBQ0QsZUFBZSxFQUFFLElBQUksRUFDckIsU0FBUztnQkFFVCxvQkFBQyxtQkFBSSxzQ0FBbUMsQ0FDOUI7WUFDWixvQkFBQyxxQkFBUyxJQUNSLEtBQUssRUFBRTtvQkFDTCxlQUFlLEVBQUUsTUFBTTtvQkFDdkIsTUFBTSxFQUFFLEdBQUc7b0JBQ1gsS0FBSyxFQUFFLEdBQUc7aUJBQ1gsRUFDRCxlQUFlLEVBQUUsS0FBSyxFQUN0QixTQUFTLFFBQ1QsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQ3RCLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFFcEI7b0JBQ0Usb0JBQUMsbUJBQUksdUNBQW9DO29CQUN6QyxvQkFBQyxtQkFBSSxRQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBUSxDQUM5RCxDQUNPLENBQ0YsQ0FDYixDQUFDO0lBQ0osQ0FBQztJQWFILDZCQUFDO0FBQUQsQ0FBQyxBQXJERCxDQUFxQyxLQUFLLENBQUMsU0FBUyxHQXFEbkQ7QUFHWSxRQUFBLEtBQUssR0FBRyxXQUFXLENBQUM7QUFDcEIsUUFBQSxXQUFXLEdBQUcsbUJBQW1CLENBQUM7QUFDbEMsUUFBQSxXQUFXLEdBQUcsbURBQW1ELENBQUM7QUFDbEUsUUFBQSxRQUFRLEdBQUc7SUFDdEI7UUFDRSxLQUFLLEVBQUUsd0JBQXdCO1FBQy9CLFdBQVcsRUFBRSxxRUFBcUU7UUFDbEYsTUFBTSxFQUFOO1lBQ0UsT0FBTyxDQUNMLG9CQUFDLHFCQUFTO2dCQUNSLG9CQUFDLHVCQUF1QixPQUFHO2dCQUMzQixvQkFBQyx1QkFBdUIsT0FBRztnQkFDM0Isb0JBQUMsdUJBQXVCLE9BQUcsQ0FDakIsQ0FDYixDQUFDO1FBQ0osQ0FBQztLQUNGO0lBQ0Q7UUFDRSxLQUFLLEVBQUUsd0JBQXdCO1FBQy9CLFdBQVcsRUFBRSx1Q0FBdUM7UUFDcEQsTUFBTSxFQUFOO1lBQ0UsT0FBTyxvQkFBQyxxQkFBcUIsT0FBRyxDQUFDO1FBQ25DLENBQUM7S0FDRjtJQUNEO1FBQ0UsS0FBSyxFQUFFLGVBQWU7UUFDdEIsV0FBVyxFQUFFLGlCQUFpQjtRQUM5QixNQUFNLEVBQU47WUFDRSxPQUFPLG9CQUFDLFlBQVksT0FBRyxDQUFDO1FBQzFCLENBQUM7S0FDRjtJQUNEO1FBQ0UsS0FBSyxFQUFFLGlCQUFpQjtRQUN4QixXQUFXLEVBQUUsNkJBQTZCO1FBQzFDLE1BQU0sRUFBTjtZQUNFLE9BQU8sb0JBQUMsY0FBYyxPQUFHLENBQUM7UUFDNUIsQ0FBQztLQUNGO0lBQ0Q7UUFDRSxLQUFLLEVBQUUsZ0JBQWdCO1FBQ3ZCLFdBQVcsRUFBRSx1REFBdUQ7UUFDcEUsTUFBTSxFQUFOO1lBQ0UsT0FBTyxvQkFBQyxhQUFhLE9BQUcsQ0FBQztRQUMzQixDQUFDO0tBQ0Y7SUFDRDtRQUNFLEtBQUssRUFBRSx5QkFBeUI7UUFDaEMsV0FBVyxFQUFFLGtEQUFrRDtRQUMvRCxNQUFNLEVBQU47WUFDRSxPQUFPLG9CQUFDLHNCQUFzQixPQUFHLENBQUM7UUFDcEMsQ0FBQztLQUNGO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFN0eWxlU2hlZXQsIFRleHQsIFRvdWNoYWJsZUhpZ2hsaWdodCB9IGZyb20gJ3JlYWN0LW5hdGl2ZSc7XG5pbXBvcnQgeyBWaWV3V2luMzIgfSBmcm9tICcuLi9WaWV3V2luMzInO1xuaW1wb3J0IHsgQ3Vyc29yLCBJS2V5Ym9hcmRFdmVudCwgSUhhbmRsZWRLZXlib2FyZEV2ZW50IH0gZnJvbSAnLi4vVmlld1dpbjMyLlByb3BzJztcblxuY29uc3Qgc3R5bGVzID0gU3R5bGVTaGVldC5jcmVhdGUoe1xuICBib3JkZXI6IHtcbiAgICBib3JkZXJTdHlsZTogJ2RvdHRlZCcsXG4gICAgYm9yZGVyQ29sb3I6ICdibGFjaycsXG4gIH0sXG4gIGtleUNvbXBvbmVudFJvb3Q6IHtcbiAgICBib3JkZXJXaWR0aDogMixcbiAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICBtYXJnaW5WZXJ0aWNhbDogNSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd3aGl0ZXNtb2tlJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWFyb3VuZCcsXG4gIH0sXG4gIGtleUVudGVyVmlzdWFsaXplcjoge1xuICAgIG1hcmdpbjogNSxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBtaW5XaWR0aDogMTAwLFxuICAgIG1pbkhlaWdodDogMzAsXG4gIH0sXG4gIGJsYWNrYm94OiB7IGhlaWdodDogMzAsIHdpZHRoOiAzMCwgYm9yZGVyQ29sb3I6ICdibGFjaycsIGJvcmRlcldpZHRoOiAzIH0sXG59KTtcblxuaW50ZXJmYWNlIElGb2N1c2FibGVDb21wb25lbnRTdGF0ZSB7XG4gIGhhc0ZvY3VzOiBib29sZWFuO1xufVxuXG5jbGFzcyBGb2N1c01vdmVyVGVzdENvbXBvbmVudCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7fSwgSUZvY3VzYWJsZUNvbXBvbmVudFN0YXRlPiB7XG4gIHByaXZhdGUgX2ZvY3VzVGFyZ2V0OiBWaWV3V2luMzIgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sYWJlbGVkQnk6IFJlYWN0LlJlZk9iamVjdDxWaWV3V2luMzI+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaGFzRm9jdXM6IGZhbHNlLFxuICAgIH07XG4gICAgdGhpcy5fbGFiZWxlZEJ5ID0gUmVhY3QuY3JlYXRlUmVmPFZpZXdXaW4zMj4oKTtcbiAgfVxuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1dpbjMyPlxuICAgICAgICA8Vmlld1dpbjMyIHJlZj17dGhpcy5fbGFiZWxlZEJ5fSBhY2Nlc3NpYmlsaXR5TGFiZWw9XCJzZXBhcmF0ZSBsYWJlbCBmb3IgdGVzdFwiIGFjY2Vzc2liaWxpdHlJdGVtVHlwZT1cIkNvbW1lbnRcIiAvPlxuICAgICAgPFZpZXdXaW4zMiBzdHlsZT17eyBmbGV4RGlyZWN0aW9uOiAncm93JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYXJvdW5kJywgbWFyZ2luVmVydGljYWw6IDUgfX0+XG4gICAgICAgIDxUb3VjaGFibGVIaWdobGlnaHQgb25QcmVzcz17dGhpcy5fb25QcmVzc30+XG4gICAgICAgICAgPFZpZXdXaW4zMiBhY2Nlc3NpYmlsaXR5TGFiZWxlZEJ5PXt0aGlzLl9sYWJlbGVkQnl9IHN0eWxlPXtzdHlsZXMuYmxhY2tib3h9IC8+XG4gICAgICAgIDwvVG91Y2hhYmxlSGlnaGxpZ2h0PlxuICAgICAgICA8Vmlld1dpbjMyXG4gICAgICAgICAgcmVmPXt0aGlzLl9zZXRSZWZ9XG4gICAgICAgICAgZm9jdXNhYmxlXG4gICAgICAgICAgc3R5bGU9e3RoaXMuc3RhdGUuaGFzRm9jdXMgPyB7IGJhY2tncm91bmRDb2xvcjogJyNhZWU4ZmNmZicgfSA6IHsgYmFja2dyb3VuZENvbG9yOiAnIzAwMDAwMDAwJyB9fVxuICAgICAgICAgIG9uRm9jdXM9e3RoaXMuX29uRm9jdXN9XG4gICAgICAgICAgb25CbHVyPXt0aGlzLl9vbkJsdXJ9XG4gICAgICAgICAgZW5hYmxlRm9jdXNSaW5nPXtmYWxzZX1cbiAgICAgICAgPlxuICAgICAgICAgIDxUZXh0Pnt0aGlzLnN0YXRlLmhhc0ZvY3VzID8gJ0ZvY3VzOiBZZXMnIDogJ0ZvY3VzOiBObyd9PC9UZXh0PlxuICAgICAgICA8L1ZpZXdXaW4zMj5cbiAgICAgIDwvVmlld1dpbjMyPlxuICAgICAgPC9WaWV3V2luMzI+XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldFJlZiA9IChyZWY6IFZpZXdXaW4zMikgPT4ge1xuICAgIHRoaXMuX2ZvY3VzVGFyZ2V0ID0gcmVmO1xuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29uUHJlc3MgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuX2ZvY3VzVGFyZ2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2ZvY3VzVGFyZ2V0LmZvY3VzKCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29uRm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBoYXNGb2N1czogdHJ1ZSxcbiAgICB9KTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vbkJsdXIgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBoYXNGb2N1czogZmFsc2UsXG4gICAgfSk7XG4gIH07XG59XG5cbmludGVyZmFjZSBJS2V5Ym9hcmRhYmxlQ29tcG9uZW50U3RhdGUge1xuICBsYXN0S2V5RG93bjogc3RyaW5nO1xuICBsYXN0S2V5VXA6IHN0cmluZztcbn1cblxuY29uc3QgaGFuZGxlZE5hdGl2ZUtleWJvYXJkRXZlbnRzOiBJSGFuZGxlZEtleWJvYXJkRXZlbnRbXSA9IFtcbiAgeyBrZXk6ICdBcnJvd0Rvd24nIH0sXG4gIHsga2V5OiAnQXJyb3dVcCcgfSxcbiAgeyBrZXk6ICdBcnJvd0xlZnQnIH0sXG4gIHsga2V5OiAnQXJyb3dSaWdodCcgfSxcbiAgeyBrZXk6ICdUYWInIH0sXG5dO1xuXG5jbGFzcyBLZXlib2FyZFRlc3RDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8e30sIElGb2N1c2FibGVDb21wb25lbnRTdGF0ZSAmIElLZXlib2FyZGFibGVDb21wb25lbnRTdGF0ZT4ge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZSxcbiAgICAgIGxhc3RLZXlEb3duOiBudWxsLFxuICAgICAgbGFzdEtleVVwOiBudWxsLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgcmVuZGVyKCkge1xuICAgIHJldHVybiAoXG4gICAgICA8Vmlld1dpbjMyIGtleURvd25FdmVudHM9e2hhbmRsZWROYXRpdmVLZXlib2FyZEV2ZW50c30ga2V5VXBFdmVudHM9e2hhbmRsZWROYXRpdmVLZXlib2FyZEV2ZW50c30+XG4gICAgICAgIDxWaWV3V2luMzJcbiAgICAgICAgICBzdHlsZT17dGhpcy5zdGF0ZS5oYXNGb2N1cyA/IFtzdHlsZXMua2V5Q29tcG9uZW50Um9vdCwgc3R5bGVzLmJvcmRlcl0gOiBzdHlsZXMua2V5Q29tcG9uZW50Um9vdH1cbiAgICAgICAgICBmb2N1c2FibGVcbiAgICAgICAgICBvbktleVVwPXt0aGlzLl9vbktleVVwfVxuICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5fb25LZXlEb3dufVxuICAgICAgICAgIG9uRm9jdXM9e3RoaXMuX29uRm9jdXN9XG4gICAgICAgICAgb25CbHVyPXt0aGlzLl9vbkJsdXJ9XG4gICAgICAgICAgZW5hYmxlRm9jdXNSaW5nPXtmYWxzZX1cbiAgICAgICAgPlxuICAgICAgICAgIDxWaWV3V2luMzIgc3R5bGU9e3N0eWxlcy5rZXlFbnRlclZpc3VhbGl6ZXJ9PlxuICAgICAgICAgICAgPFRleHQ+T25LZXlEb3duPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQ+LS0tLTwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0Pnt0aGlzLnN0YXRlLmxhc3RLZXlEb3duICE9PSBudWxsID8gdGhpcy5zdGF0ZS5sYXN0S2V5RG93biA6ICcgJ308L1RleHQ+XG4gICAgICAgICAgPC9WaWV3V2luMzI+XG4gICAgICAgICAgPFZpZXdXaW4zMiBzdHlsZT17c3R5bGVzLmtleUVudGVyVmlzdWFsaXplcn0+XG4gICAgICAgICAgICA8VGV4dD5PbktleVVwPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQ+LS0tLTwvVGV4dD5cbiAgICAgICAgICAgIDxUZXh0Pnt0aGlzLnN0YXRlLmxhc3RLZXlVcCAhPT0gbnVsbCA/IHRoaXMuc3RhdGUubGFzdEtleVVwIDogJyAnfTwvVGV4dD5cbiAgICAgICAgICA8L1ZpZXdXaW4zMj5cbiAgICAgICAgPC9WaWV3V2luMzI+XG4gICAgICA8L1ZpZXdXaW4zMj5cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb25Gb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGhhc0ZvY3VzOiB0cnVlLFxuICAgIH0pO1xuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29uQmx1ciA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZSxcbiAgICB9KTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vbktleVVwID0gKGV2OiBJS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBsYXN0S2V5VXA6IGV2Lm5hdGl2ZUV2ZW50LmtleSwgbGFzdEtleURvd246IG51bGwgfSk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb25LZXlEb3duID0gKGV2OiBJS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBsYXN0S2V5RG93bjogZXYubmF0aXZlRXZlbnQua2V5LCBsYXN0S2V5VXA6IG51bGwgfSk7XG4gIH07XG59XG5cbmludGVyZmFjZSBJSG92ZXJDb21wb25lbnRQcm9wcyB7XG4gIGNvbG9yOiBzdHJpbmc7XG59XG5jbGFzcyBIb3ZlclRlc3RDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SUhvdmVyQ29tcG9uZW50UHJvcHMsIElGb2N1c2FibGVDb21wb25lbnRTdGF0ZT4ge1xuICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGhhc0ZvY3VzOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHJlbmRlcigpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdXaW4zMlxuICAgICAgICBvbk1vdXNlRW50ZXI9e3RoaXMuX29uTW91c2VFbnRlcn1cbiAgICAgICAgb25Nb3VzZUxlYXZlPXt0aGlzLl9vbk1vdXNlTGVhdmV9XG4gICAgICAgIHN0eWxlPXt0aGlzLnN0YXRlLmhhc0ZvY3VzID8gW3N0eWxlcy5ibGFja2JveCwgeyBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMucHJvcHMuY29sb3IgfV0gOiBzdHlsZXMuYmxhY2tib3h9XG4gICAgICAvPlxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfb25Nb3VzZUxlYXZlID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoeyBoYXNGb2N1czogZmFsc2UgfSk7XG4gIH07XG4gIHByaXZhdGUgcmVhZG9ubHkgX29uTW91c2VFbnRlciA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHsgaGFzRm9jdXM6IHRydWUgfSk7XG4gIH07XG59XG5cbmNsYXNzIEhvdmVyRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHB1YmxpYyByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3V2luMzIgc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIG1hcmdpbkhvcml6b250YWw6IDc1LCBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWFyb3VuZCcgfX0+XG4gICAgICAgIDxIb3ZlclRlc3RDb21wb25lbnQgY29sb3I9XCJyZWRcIiAvPlxuICAgICAgICA8SG92ZXJUZXN0Q29tcG9uZW50IGNvbG9yPVwib3JhbmdlXCIgLz5cbiAgICAgICAgPEhvdmVyVGVzdENvbXBvbmVudCBjb2xvcj1cInllbGxvd1wiIC8+XG4gICAgICAgIDxIb3ZlclRlc3RDb21wb25lbnQgY29sb3I9XCJncmVlblwiIC8+XG4gICAgICAgIDxIb3ZlclRlc3RDb21wb25lbnQgY29sb3I9XCJibHVlXCIgLz5cbiAgICAgICAgPEhvdmVyVGVzdENvbXBvbmVudCBjb2xvcj1cImluZGlnb1wiIC8+XG4gICAgICAgIDxIb3ZlclRlc3RDb21wb25lbnQgY29sb3I9XCJ2aW9sZXRcIiAvPlxuICAgICAgPC9WaWV3V2luMzI+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBUb29sVGlwRXhhbXBsZTogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8e30+ID0gKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIDxWaWV3V2luMzJcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JlZCcsXG4gICAgICAgIGhlaWdodDogMTAwLFxuICAgICAgICB3aWR0aDogMTAwLFxuICAgICAgfX1cbiAgICAgIHRvb2x0aXA9XCJFeGFtcGxlIHRvb2x0aXBcIlxuICAgICAgY3Vyc29yPVwicG9pbnRlclwiXG4gICAgLz5cbiAgKTtcbn07XG5cbmludGVyZmFjZSBJQ3Vyc29yVGVzdENvbXBvbmVudFByb3BzIHtcbiAgY3Vyc29yOiBDdXJzb3Jcbn1cblxuY29uc3QgQ3Vyc29yVGVzdENvbXBvbmVudDogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQ8SUN1cnNvclRlc3RDb21wb25lbnRQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8Vmlld1dpbjMyIHN0eWxlPXt7ZmxleERpcmVjdGlvbjogJ2NvbHVtbid9fT5cbiAgICAgIDxUZXh0Pntwcm9wcy5jdXJzb3J9PC9UZXh0PlxuICAgICAgPFZpZXdXaW4zMiBjdXJzb3I9e3Byb3BzLmN1cnNvcn0gc3R5bGU9e3N0eWxlcy5ibGFja2JveH0gLz5cbiAgICA8L1ZpZXdXaW4zMj5cbiAgKVxufVxuXG5jb25zdCBDdXJzb3JFeGFtcGxlOiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudCA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8Vmlld1dpbjMyIHN0eWxlPXt7IGZsZXhEaXJlY3Rpb246ICdyb3cnLCBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWFyb3VuZCcgfX0+XG4gICAgICA8Q3Vyc29yVGVzdENvbXBvbmVudCBjdXJzb3I9J2F1dG8nIC8+XG4gICAgICA8Q3Vyc29yVGVzdENvbXBvbmVudCBjdXJzb3I9J2RlZmF1bHQnIC8+XG4gICAgICA8Q3Vyc29yVGVzdENvbXBvbmVudCBjdXJzb3I9J2hlbHAnIC8+XG4gICAgICA8Q3Vyc29yVGVzdENvbXBvbmVudCBjdXJzb3I9J25lc3ctcmVzaXplJyAvPlxuICAgICAgPEN1cnNvclRlc3RDb21wb25lbnQgY3Vyc29yPSdub3QtYWxsb3dlZCcgLz5cbiAgICAgIDxDdXJzb3JUZXN0Q29tcG9uZW50IGN1cnNvcj0nbnMtcmVzaXplJyAvPlxuICAgICAgPEN1cnNvclRlc3RDb21wb25lbnQgY3Vyc29yPSdud3NlLXJlc2l6ZScgLz5cbiAgICAgIDxDdXJzb3JUZXN0Q29tcG9uZW50IGN1cnNvcj0ncG9pbnRlcicgLz5cbiAgICAgIDxDdXJzb3JUZXN0Q29tcG9uZW50IGN1cnNvcj0nd2FpdCcgLz5cbiAgICAgIDxDdXJzb3JUZXN0Q29tcG9uZW50IGN1cnNvcj0nbW92ZScgLz5cbiAgICAgIDxDdXJzb3JUZXN0Q29tcG9uZW50IGN1cnNvcj0ndGV4dCcgLz5cbiAgICAgIDxDdXJzb3JUZXN0Q29tcG9uZW50IGN1cnNvcj0nd2UtcmVzaXplJyAvPlxuICAgIDwvVmlld1dpbjMyPlxuICApO1xufVxuY2xhc3MgRW5hYmxlRm9jdXNSaW5nRXhhbXBsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDx7fSwgSUZvY3VzYWJsZUNvbXBvbmVudFN0YXRlPiB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgaGFzRm9jdXM6IGZhbHNlLFxuICAgIH07XG4gIH1cbiAgXG4gIHB1YmxpYyByZW5kZXIoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3V2luMzIgc3R5bGU9e3sgZmxleERpcmVjdGlvbjogJ3JvdycsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWFyb3VuZCcsIG1hcmdpblZlcnRpY2FsOiA1IH19PlxuICAgICAgICA8Vmlld1dpbjMyXG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3BpbmsnLFxuICAgICAgICAgICAgaGVpZ2h0OiAxMDAsXG4gICAgICAgICAgICB3aWR0aDogMTAwLFxuICAgICAgICAgIH19XG4gICAgICAgICAgZW5hYmxlRm9jdXNSaW5nPXt0cnVlfVxuICAgICAgICAgIGZvY3VzYWJsZVxuICAgICAgICA+XG4gICAgICAgICAgPFRleHQ+ZW5hYmxlRm9jdXNSaW5nIHNldCB0byB0cnVlPC9UZXh0PlxuICAgICAgICA8L1ZpZXdXaW4zMj5cbiAgICAgICAgPFZpZXdXaW4zMlxuICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICdwaW5rJyxcbiAgICAgICAgICAgIGhlaWdodDogMTAwLFxuICAgICAgICAgICAgd2lkdGg6IDEwMCxcbiAgICAgICAgICB9fVxuICAgICAgICAgIGVuYWJsZUZvY3VzUmluZz17ZmFsc2V9XG4gICAgICAgICAgZm9jdXNhYmxlXG4gICAgICAgICAgb25Gb2N1cz17dGhpcy5fb25Gb2N1c31cbiAgICAgICAgICBvbkJsdXI9e3RoaXMuX29uQmx1cn1cbiAgICAgICAgPlxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8VGV4dD5lbmFibGVGb2N1c1Jpbmcgc2V0IHRvIGZhbHNlPC9UZXh0PlxuICAgICAgICAgICAgPFRleHQ+e3RoaXMuc3RhdGUuaGFzRm9jdXMgPyAnRm9jdXM6IFllcycgOiAnRm9jdXM6IE5vJ308L1RleHQ+XG4gICAgICAgICAgPC8+XG4gICAgICAgIDwvVmlld1dpbjMyPlxuICAgICAgPC9WaWV3V2luMzI+XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29uRm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBoYXNGb2N1czogdHJ1ZSxcbiAgICB9KTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vbkJsdXIgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBoYXNGb2N1czogZmFsc2UsXG4gICAgfSk7XG4gIH07XG59XG5cblxuZXhwb3J0IGNvbnN0IHRpdGxlID0gJ1ZpZXdXaW4zMic7XG5leHBvcnQgY29uc3QgZGlzcGxheU5hbWUgPSAnVmlld1dpbjMyIEV4YW1wbGUnO1xuZXhwb3J0IGNvbnN0IGRlc2NyaXB0aW9uID0gJ0FsbCB0aGUgc3RvY2sgVmlldyBwcm9wcyBwbHVzIFdpbjMyIHNwZWNpZmljIG9uZXMnO1xuZXhwb3J0IGNvbnN0IGV4YW1wbGVzID0gW1xuICB7XG4gICAgdGl0bGU6ICdmb2N1cygpIG1ldGhvZCBleGFtcGxlJyxcbiAgICBkZXNjcmlwdGlvbjogJ0VhY2ggb2YgdGhlc2UgYmxhY2sgYm94ZXMgbW92ZXMgZm9jdXMgdG8gdGhlIFZpZXdXaW4zMiBvbiB0aGUgcmlnaHQnLFxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8Vmlld1dpbjMyPlxuICAgICAgICAgIDxGb2N1c01vdmVyVGVzdENvbXBvbmVudCAvPlxuICAgICAgICAgIDxGb2N1c01vdmVyVGVzdENvbXBvbmVudCAvPlxuICAgICAgICAgIDxGb2N1c01vdmVyVGVzdENvbXBvbmVudCAvPlxuICAgICAgICA8L1ZpZXdXaW4zMj5cbiAgICAgICk7XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnS2V5Ym9hcmRFdmVudHMgZXhhbXBsZScsXG4gICAgZGVzY3JpcHRpb246ICdOYXRpdmUga2V5Ym9hcmRpbmcgaGFzIGJlZW4gcHJldmVudGVkJyxcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgICAgcmV0dXJuIDxLZXlib2FyZFRlc3RDb21wb25lbnQgLz47XG4gICAgfSxcbiAgfSxcbiAge1xuICAgIHRpdGxlOiAnSG92ZXIgZXhhbXBsZScsXG4gICAgZGVzY3JpcHRpb246ICdIb3ZlciBhIHJhaW5ib3cnLFxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgICByZXR1cm4gPEhvdmVyRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdUb29sdGlwIGV4YW1wbGUnLFxuICAgIGRlc2NyaXB0aW9uOiAnRGlzcGxheXMgYSB0b29sdGlwIG9uIGhvdmVyJyxcbiAgICByZW5kZXIoKTogSlNYLkVsZW1lbnQge1xuICAgICAgcmV0dXJuIDxUb29sVGlwRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdDdXJzb3IgZXhhbXBsZScsXG4gICAgZGVzY3JpcHRpb246ICdFYWNoIG9mIHRoZXNlIGJveGVzIHNob3VsZCBkaXNwbGF5IGEgZGlmZmVyZW50IGN1cnNvcicsXG4gICAgcmVuZGVyKCk6IEpTWC5FbGVtZW50IHtcbiAgICAgIHJldHVybiA8Q3Vyc29yRXhhbXBsZSAvPjtcbiAgICB9LFxuICB9LFxuICB7XG4gICAgdGl0bGU6ICdFbmFibGVGb2N1c1JpbmcgZXhhbXBsZScsXG4gICAgZGVzY3JpcHRpb246ICdEaXNwbGF5cyBmb2N1cyB2aXN1YWxzIHRoYXQgYXJlIGRyaXZlbiBieSBuYXRpdmUnLFxuICAgIHJlbmRlcigpOiBKU1guRWxlbWVudCB7XG4gICAgICByZXR1cm4gPEVuYWJsZUZvY3VzUmluZ0V4YW1wbGUgLz47XG4gICAgfSxcbiAgfSxcbl07XG4iXX0=