@dcl/asset-packs 2.3.0 → 2.3.2-20250506093725.commit-19a869d
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/bin/index.js +3744 -1611
- package/catalog.json +127 -1
- package/dist/admin-toolkit-ui/Active.d.ts +11 -0
- package/dist/admin-toolkit-ui/Active.js +32 -0
- package/dist/admin-toolkit-ui/Button.d.ts +22 -9
- package/dist/admin-toolkit-ui/Button.js +45 -28
- package/dist/admin-toolkit-ui/Card.d.ts +6 -0
- package/dist/admin-toolkit-ui/Card.js +22 -0
- package/dist/admin-toolkit-ui/Error.d.ts +9 -0
- package/dist/admin-toolkit-ui/Error.js +31 -0
- package/dist/admin-toolkit-ui/Header.d.ts +8 -0
- package/dist/admin-toolkit-ui/Header.js +17 -0
- package/dist/admin-toolkit-ui/Loading.d.ts +11 -0
- package/dist/admin-toolkit-ui/Loading.js +31 -0
- package/dist/admin-toolkit-ui/ModerationControl/AddUserInput.d.ts +7 -0
- package/dist/admin-toolkit-ui/ModerationControl/AddUserInput.js +67 -0
- package/dist/admin-toolkit-ui/ModerationControl/AdminList.d.ts +10 -0
- package/dist/admin-toolkit-ui/ModerationControl/AdminList.js +192 -0
- package/dist/admin-toolkit-ui/ModerationControl/RemoveAdminConfirmation.d.ts +8 -0
- package/dist/admin-toolkit-ui/ModerationControl/RemoveAdminConfirmation.js +75 -0
- package/dist/admin-toolkit-ui/ModerationControl/api.d.ts +12 -0
- package/dist/admin-toolkit-ui/ModerationControl/api.js +28 -0
- package/dist/admin-toolkit-ui/ModerationControl/index.d.ts +23 -0
- package/dist/admin-toolkit-ui/ModerationControl/index.js +37 -0
- package/dist/admin-toolkit-ui/SmartItemsControl.js +34 -56
- package/dist/admin-toolkit-ui/TextAnnouncementsControl.js +50 -59
- package/dist/admin-toolkit-ui/VideoControl/LiveStream/DeleteStreamKey.d.ts +7 -0
- package/dist/admin-toolkit-ui/VideoControl/LiveStream/DeleteStreamKey.js +62 -0
- package/dist/admin-toolkit-ui/{VideoControl.d.ts → VideoControl/LiveStream/GenerateStreamKey.d.ts} +2 -3
- package/dist/admin-toolkit-ui/VideoControl/LiveStream/GenerateStreamKey.js +41 -0
- package/dist/admin-toolkit-ui/VideoControl/LiveStream/ShowStreamKey.d.ts +11 -0
- package/dist/admin-toolkit-ui/VideoControl/LiveStream/ShowStreamKey.js +112 -0
- package/dist/admin-toolkit-ui/VideoControl/LiveStream/index.d.ts +10 -0
- package/dist/admin-toolkit-ui/VideoControl/LiveStream/index.js +62 -0
- package/dist/admin-toolkit-ui/VideoControl/VideoUrl.d.ts +9 -0
- package/dist/admin-toolkit-ui/VideoControl/VideoUrl.js +125 -0
- package/dist/admin-toolkit-ui/VideoControl/VolumeControl.d.ts +8 -0
- package/dist/admin-toolkit-ui/VideoControl/VolumeControl.js +82 -0
- package/dist/admin-toolkit-ui/VideoControl/api.d.ts +12 -0
- package/dist/admin-toolkit-ui/VideoControl/api.js +17 -0
- package/dist/admin-toolkit-ui/VideoControl/index.d.ts +28 -0
- package/dist/admin-toolkit-ui/VideoControl/index.js +107 -0
- package/dist/admin-toolkit-ui/VideoControl/utils.d.ts +28 -0
- package/dist/admin-toolkit-ui/VideoControl/utils.js +87 -0
- package/dist/admin-toolkit-ui/fetch-utils.d.ts +14 -0
- package/dist/admin-toolkit-ui/fetch-utils.js +41 -0
- package/dist/admin-toolkit-ui/index.d.ts +11 -0
- package/dist/admin-toolkit-ui/index.js +200 -272
- package/dist/admin-toolkit-ui/types.d.ts +0 -2
- package/dist/admin-toolkit-ui/types.js +1 -1
- package/dist/admin-toolkit-ui/utils.d.ts +10 -2
- package/dist/admin-toolkit-ui/utils.js +31 -51
- package/dist/bin/index.js +3744 -1611
- package/dist/definitions.d.ts +18 -17
- package/dist/definitions.js +12 -10
- package/dist/enums.d.ts +5 -0
- package/dist/enums.js +7 -1
- package/dist/id.d.ts +2 -4
- package/dist/scene-entrypoint.js +1 -1
- package/dist/triggers.js +15 -10
- package/package.json +6 -6
- package/dist/admin-toolkit-ui/VideoControl.js +0 -297
|
@@ -1,297 +0,0 @@
|
|
|
1
|
-
import ReactEcs, { Label, UiEntity, Input, Dropdown } from '@dcl/react-ecs';
|
|
2
|
-
import { Color4 } from '@dcl/sdk/math';
|
|
3
|
-
import { getComponents } from '../definitions';
|
|
4
|
-
import { getExplorerComponents } from '../components';
|
|
5
|
-
import { getScaleUIFactor } from '../ui';
|
|
6
|
-
import { nextTickFunctions } from './index';
|
|
7
|
-
import { Button } from './Button';
|
|
8
|
-
import { CONTENT_URL } from './constants';
|
|
9
|
-
const ICONS = {
|
|
10
|
-
VIDEO_CONTROL: `${CONTENT_URL}/admin_toolkit/assets/icons/video-control.png`,
|
|
11
|
-
PREVIOUS_BUTTON: `${CONTENT_URL}/admin_toolkit/assets/icons/video-control-previous-button.png`,
|
|
12
|
-
FORWARD_BUTTON: `${CONTENT_URL}/admin_toolkit/assets/icons/video-control-forward-button.png`,
|
|
13
|
-
PLAY_BUTTON: `${CONTENT_URL}/admin_toolkit/assets/icons/video-control-play-button.png`,
|
|
14
|
-
VOLUME_MINUS_BUTTON: `${CONTENT_URL}/admin_toolkit/assets/icons/video-control-volume-minus-button.png`,
|
|
15
|
-
VOLUME_PLUS_BUTTON: `${CONTENT_URL}/admin_toolkit/assets/icons/video-control-volume-plus-button.png`,
|
|
16
|
-
};
|
|
17
|
-
const DROPDOWN_BACKGROUND = `${CONTENT_URL}/admin_toolkit/backgrounds/dropdown-background.png`;
|
|
18
|
-
const VOLUME_STEP = 0.1;
|
|
19
|
-
const MAX_VOLUME = 1;
|
|
20
|
-
const DEFAULT_VOLUME = 1;
|
|
21
|
-
const COLORS = {
|
|
22
|
-
WHITE: Color4.White(),
|
|
23
|
-
GRAY: Color4.create(160 / 255, 155 / 255, 168 / 255, 1),
|
|
24
|
-
};
|
|
25
|
-
function getAdminToolkitVideoControl(engine) {
|
|
26
|
-
const { AdminTools } = getComponents(engine);
|
|
27
|
-
const adminToolkitEntities = Array.from(engine.getEntitiesWith(AdminTools));
|
|
28
|
-
return adminToolkitEntities.length > 0
|
|
29
|
-
? adminToolkitEntities[0][1].videoControl
|
|
30
|
-
: null;
|
|
31
|
-
}
|
|
32
|
-
function getVideoPlayers(engine) {
|
|
33
|
-
const adminToolkitVideoControl = getAdminToolkitVideoControl(engine);
|
|
34
|
-
if (!adminToolkitVideoControl ||
|
|
35
|
-
!adminToolkitVideoControl.videoPlayers ||
|
|
36
|
-
adminToolkitVideoControl.videoPlayers.length === 0)
|
|
37
|
-
return [];
|
|
38
|
-
return Array.from(adminToolkitVideoControl.videoPlayers);
|
|
39
|
-
}
|
|
40
|
-
function createVideoPlayerControls(engine, state) {
|
|
41
|
-
const videoControl = getAdminToolkitVideoControl(engine);
|
|
42
|
-
return {
|
|
43
|
-
play: () => updateVideoPlayerProps(engine, state, 'playing', true),
|
|
44
|
-
pause: () => updateVideoPlayerProps(engine, state, 'playing', false),
|
|
45
|
-
restart: () => {
|
|
46
|
-
updateVideoPlayerProps(engine, state, 'playing', false);
|
|
47
|
-
nextTickFunctions.push(() => {
|
|
48
|
-
updateVideoPlayerProps(engine, state, 'position', -1);
|
|
49
|
-
});
|
|
50
|
-
nextTickFunctions.push(() => {
|
|
51
|
-
updateVideoPlayerProps(engine, state, 'playing', true);
|
|
52
|
-
});
|
|
53
|
-
nextTickFunctions.push(() => {
|
|
54
|
-
updateVideoPlayerProps(engine, state, 'position', undefined);
|
|
55
|
-
});
|
|
56
|
-
},
|
|
57
|
-
previous: () => {
|
|
58
|
-
console.log('TODO: Previous Track clicked');
|
|
59
|
-
},
|
|
60
|
-
next: () => {
|
|
61
|
-
console.log('TODO: Next Track clicked');
|
|
62
|
-
},
|
|
63
|
-
setVolume: (volume) => {
|
|
64
|
-
if (videoControl?.disableVideoPlayersSound) {
|
|
65
|
-
return;
|
|
66
|
-
}
|
|
67
|
-
updateVideoPlayerProps(engine, state, 'volume', volume);
|
|
68
|
-
},
|
|
69
|
-
setSource: (url) => updateVideoPlayerProps(engine, state, 'src', url),
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
function updateVideoPlayerProps(engine, state, property, value) {
|
|
73
|
-
const { VideoPlayer } = getExplorerComponents(engine);
|
|
74
|
-
const videoControl = getAdminToolkitVideoControl(engine);
|
|
75
|
-
const players = getVideoPlayers(engine);
|
|
76
|
-
if (property === 'playing' &&
|
|
77
|
-
value === true &&
|
|
78
|
-
videoControl?.disableVideoPlayersSound) {
|
|
79
|
-
players.forEach((player) => {
|
|
80
|
-
const videoSource = VideoPlayer.getMutableOrNull(player.entity);
|
|
81
|
-
if (!videoSource)
|
|
82
|
-
return;
|
|
83
|
-
updateVideoSourceProperty(videoSource, 'volume', 0);
|
|
84
|
-
updateVideoPlayerControlState(engine, state, player.entity, 'volume', 0);
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
const selectedPlayerEntity = players[state.videoControl.selectedVideoPlayer ?? 0].entity;
|
|
88
|
-
const selectedPlayer = VideoPlayer.getMutableOrNull(selectedPlayerEntity);
|
|
89
|
-
if (!selectedPlayer)
|
|
90
|
-
return;
|
|
91
|
-
updateVideoSourceProperty(selectedPlayer, property, value);
|
|
92
|
-
updateVideoPlayerControlState(engine, state, selectedPlayerEntity, property, value);
|
|
93
|
-
}
|
|
94
|
-
function updateVideoSourceProperty(videoSource, property, value) {
|
|
95
|
-
if (property === 'volume') {
|
|
96
|
-
if (!value) {
|
|
97
|
-
videoSource.volume = 0;
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
const steps = Math.round((videoSource.volume ?? DEFAULT_VOLUME) * 10);
|
|
101
|
-
const newSteps = Math.max(0, Math.min(10, steps + value * 10));
|
|
102
|
-
videoSource.volume = newSteps / 10;
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
videoSource[property] = value;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
function updateVideoPlayerControlState(engine, state, selectedPlayerEntity, property, value) {
|
|
109
|
-
const { VideoControlState } = getComponents(engine);
|
|
110
|
-
const videoControlState = VideoControlState.getMutable(state.adminToolkitUiEntity);
|
|
111
|
-
const videoPlayerControlState = videoControlState.videoPlayers?.find((player) => player.entity === selectedPlayerEntity);
|
|
112
|
-
if (!!videoPlayerControlState) {
|
|
113
|
-
updateVideoSourceProperty(videoPlayerControlState, property, value);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
function VideoPlayerSelector({ engine, state, }) {
|
|
117
|
-
const videoPlayers = getVideoPlayers(engine);
|
|
118
|
-
const scaleFactor = getScaleUIFactor(engine);
|
|
119
|
-
if (videoPlayers.length <= 1)
|
|
120
|
-
return null;
|
|
121
|
-
if (videoPlayers.length > 4) {
|
|
122
|
-
return (ReactEcs.createElement(UiEntity, { uiTransform: {
|
|
123
|
-
flexDirection: 'row',
|
|
124
|
-
margin: { bottom: 16 * scaleFactor },
|
|
125
|
-
} },
|
|
126
|
-
ReactEcs.createElement(Dropdown, { options: videoPlayers.map((player) => player.customName), selectedIndex: state.videoControl.selectedVideoPlayer ?? 0, onChange: (idx) => (state.videoControl.selectedVideoPlayer = idx), textAlign: "middle-left", fontSize: 14 * scaleFactor, uiTransform: {
|
|
127
|
-
margin: { right: 8 * scaleFactor },
|
|
128
|
-
minWidth: 150 * scaleFactor,
|
|
129
|
-
}, uiBackground: { color: Color4.White() } })));
|
|
130
|
-
}
|
|
131
|
-
return (ReactEcs.createElement(UiEntity, { uiTransform: {
|
|
132
|
-
flexDirection: 'row',
|
|
133
|
-
margin: { bottom: 16 * scaleFactor },
|
|
134
|
-
} }, videoPlayers.map((player, idx) => {
|
|
135
|
-
const isPlayerSelected = (state.videoControl.selectedVideoPlayer ?? 0) === idx;
|
|
136
|
-
const playerName = player.customName ?? `#${idx + 1}`;
|
|
137
|
-
return (ReactEcs.createElement(Button, { id: `video_control_player_${idx}`, key: player.entity, value: `<b>${playerName}</b>`, fontSize: 14 * scaleFactor, variant: isPlayerSelected ? 'primary' : 'secondary', color: isPlayerSelected ? Color4.Black() : Color4.White(), onMouseDown: () => {
|
|
138
|
-
state.videoControl.selectedVideoPlayer = idx;
|
|
139
|
-
}, uiTransform: {
|
|
140
|
-
alignItems: 'center',
|
|
141
|
-
justifyContent: 'center',
|
|
142
|
-
alignSelf: 'center',
|
|
143
|
-
margin: { right: 8 * scaleFactor },
|
|
144
|
-
}, labelTransform: {
|
|
145
|
-
padding: 4 * scaleFactor,
|
|
146
|
-
} }));
|
|
147
|
-
})));
|
|
148
|
-
}
|
|
149
|
-
function useSelectedVideoPlayer(engine, state) {
|
|
150
|
-
const { VideoPlayer } = getExplorerComponents(engine);
|
|
151
|
-
const videoPlayers = getVideoPlayers(engine);
|
|
152
|
-
if (videoPlayers.length === 0)
|
|
153
|
-
return null;
|
|
154
|
-
return VideoPlayer.getOrNull(videoPlayers[state.videoControl.selectedVideoPlayer ?? 0].entity);
|
|
155
|
-
}
|
|
156
|
-
function VideoControlVolume({ engine, state, }) {
|
|
157
|
-
const scaleFactor = getScaleUIFactor(engine);
|
|
158
|
-
const controls = createVideoPlayerControls(engine, state);
|
|
159
|
-
const selectedVideoPlayer = useSelectedVideoPlayer(engine, state);
|
|
160
|
-
const videoControl = getAdminToolkitVideoControl(engine);
|
|
161
|
-
const isSoundDisabled = videoControl?.disableVideoPlayersSound;
|
|
162
|
-
const volumePercentage = `${Math.round((selectedVideoPlayer?.volume ?? DEFAULT_VOLUME) * 100)}%`;
|
|
163
|
-
return !isSoundDisabled ? (ReactEcs.createElement(UiEntity, { uiTransform: {
|
|
164
|
-
flexDirection: 'column',
|
|
165
|
-
} },
|
|
166
|
-
ReactEcs.createElement(Label, { value: 'Video Volume', fontSize: 16 * scaleFactor, color: COLORS.WHITE, uiTransform: {
|
|
167
|
-
margin: { top: 0, right: 0, bottom: 10 * scaleFactor, left: 0 },
|
|
168
|
-
} }),
|
|
169
|
-
ReactEcs.createElement(UiEntity, { uiTransform: {
|
|
170
|
-
flexDirection: 'row',
|
|
171
|
-
} },
|
|
172
|
-
ReactEcs.createElement(Button, { id: "video_control_volume_minus", value: "Minus", fontSize: 14 * scaleFactor, uiTransform: {
|
|
173
|
-
margin: { top: 0, right: 16 * scaleFactor, bottom: 0, left: 0 },
|
|
174
|
-
minWidth: 69 * scaleFactor,
|
|
175
|
-
alignItems: 'center',
|
|
176
|
-
justifyContent: 'center',
|
|
177
|
-
padding: 0,
|
|
178
|
-
}, icon: ICONS.VOLUME_MINUS_BUTTON, onlyIcon: true, iconTransform: {
|
|
179
|
-
width: 35 * scaleFactor,
|
|
180
|
-
height: 35 * scaleFactor,
|
|
181
|
-
}, onMouseDown: () => controls.setVolume(-VOLUME_STEP), disabled: !selectedVideoPlayer }),
|
|
182
|
-
ReactEcs.createElement(Label, { value: volumePercentage, fontSize: 18 * scaleFactor, color: COLORS.GRAY, uiTransform: {
|
|
183
|
-
margin: { top: 0, right: 16 * scaleFactor, bottom: 0, left: 0 },
|
|
184
|
-
minWidth: 69 * scaleFactor,
|
|
185
|
-
alignItems: 'center',
|
|
186
|
-
justifyContent: 'center',
|
|
187
|
-
padding: 0,
|
|
188
|
-
} }),
|
|
189
|
-
ReactEcs.createElement(Button, { id: "video_control_volume_plus", value: "Plus", fontSize: 14 * scaleFactor, icon: ICONS.VOLUME_PLUS_BUTTON, onlyIcon: true, iconTransform: {
|
|
190
|
-
width: 35 * scaleFactor,
|
|
191
|
-
height: 35 * scaleFactor,
|
|
192
|
-
}, uiTransform: {
|
|
193
|
-
margin: { top: 0, right: 16 * scaleFactor, bottom: 0, left: 0 },
|
|
194
|
-
minWidth: 69 * scaleFactor,
|
|
195
|
-
alignItems: 'center',
|
|
196
|
-
justifyContent: 'center',
|
|
197
|
-
padding: 0,
|
|
198
|
-
}, onMouseDown: () => controls.setVolume(VOLUME_STEP), disabled: !selectedVideoPlayer }),
|
|
199
|
-
ReactEcs.createElement(Button, { id: "video_control_volume_mute", value: "<b>Mute</b>", fontSize: 18 * scaleFactor, labelTransform: { margin: '0 20' }, uiTransform: {
|
|
200
|
-
margin: { top: 0, right: 16 * scaleFactor, bottom: 0, left: 0 },
|
|
201
|
-
minWidth: 69 * scaleFactor,
|
|
202
|
-
alignItems: 'center',
|
|
203
|
-
justifyContent: 'center',
|
|
204
|
-
padding: 0,
|
|
205
|
-
}, onMouseDown: () => controls.setVolume(0), disabled: !selectedVideoPlayer })))) : null;
|
|
206
|
-
}
|
|
207
|
-
export function VideoControl({ engine, state, }) {
|
|
208
|
-
const controls = createVideoPlayerControls(engine, state);
|
|
209
|
-
const selectedVideoPlayer = useSelectedVideoPlayer(engine, state);
|
|
210
|
-
const scaleFactor = getScaleUIFactor(engine);
|
|
211
|
-
return (ReactEcs.createElement(UiEntity, { uiTransform: {
|
|
212
|
-
width: '100%',
|
|
213
|
-
height: '100%',
|
|
214
|
-
flexDirection: 'column',
|
|
215
|
-
} },
|
|
216
|
-
ReactEcs.createElement(UiEntity, { uiTransform: {
|
|
217
|
-
flexDirection: 'row',
|
|
218
|
-
margin: { bottom: 10 * scaleFactor },
|
|
219
|
-
height: 30 * scaleFactor,
|
|
220
|
-
} },
|
|
221
|
-
ReactEcs.createElement(UiEntity, { uiTransform: { width: 30 * scaleFactor, height: 30 * scaleFactor }, uiBackground: {
|
|
222
|
-
textureMode: 'stretch',
|
|
223
|
-
texture: {
|
|
224
|
-
src: ICONS.VIDEO_CONTROL,
|
|
225
|
-
},
|
|
226
|
-
} }),
|
|
227
|
-
ReactEcs.createElement(Label, { value: "<b>Video Control</b>", uiTransform: { margin: { bottom: 8, left: 20 } }, fontSize: 24 * scaleFactor, color: Color4.White() })),
|
|
228
|
-
ReactEcs.createElement(Label, { value: "<b>Current Screen</b>", fontSize: 16 * scaleFactor, color: Color4.White(), uiTransform: { margin: { bottom: 16 * scaleFactor } } }),
|
|
229
|
-
ReactEcs.createElement(VideoPlayerSelector, { engine: engine, state: state }),
|
|
230
|
-
ReactEcs.createElement(Input, { onSubmit: (value) => {
|
|
231
|
-
state.videoControl.shareScreenUrl = value;
|
|
232
|
-
handleShareScreenUrl(engine, state, value);
|
|
233
|
-
}, onChange: ($) => (state.videoControl.shareScreenUrl = $), fontSize: 16 * scaleFactor, placeholder: "Paste your video URL", placeholderColor: Color4.create(160 / 255, 155 / 255, 168 / 255, 1), color: Color4.Black(), uiBackground: { color: Color4.White() }, uiTransform: {
|
|
234
|
-
width: '100%',
|
|
235
|
-
height: 80 * scaleFactor,
|
|
236
|
-
} }),
|
|
237
|
-
ReactEcs.createElement(UiEntity, { uiTransform: {
|
|
238
|
-
width: '100%',
|
|
239
|
-
height: 40 * scaleFactor,
|
|
240
|
-
flexDirection: 'row',
|
|
241
|
-
justifyContent: 'flex-end',
|
|
242
|
-
margin: { top: 10 * scaleFactor },
|
|
243
|
-
} },
|
|
244
|
-
ReactEcs.createElement(Button, { id: "video_control_share_screen_clear", value: "<b>Clear Screen</b>", variant: "text", fontSize: 16 * scaleFactor, color: Color4.White(), uiTransform: { margin: { right: 8 * scaleFactor } }, onMouseDown: () => {
|
|
245
|
-
state.videoControl.shareScreenUrl = undefined;
|
|
246
|
-
} }),
|
|
247
|
-
ReactEcs.createElement(Button, { id: "video_control_share_screen_share", value: "<b>Share</b>", labelTransform: { margin: '0 20' }, fontSize: 16 * scaleFactor, onMouseDown: () => {
|
|
248
|
-
handleShareScreenUrl(engine, state, state.videoControl.shareScreenUrl);
|
|
249
|
-
}, disabled: !selectedVideoPlayer })),
|
|
250
|
-
ReactEcs.createElement(Label, { value: "Video Playback", fontSize: 16 * scaleFactor, color: Color4.White(), uiTransform: { margin: { bottom: 10 * scaleFactor } } }),
|
|
251
|
-
ReactEcs.createElement(UiEntity, { uiTransform: {
|
|
252
|
-
flexDirection: 'row',
|
|
253
|
-
width: '100%',
|
|
254
|
-
margin: { bottom: 10 * scaleFactor },
|
|
255
|
-
} },
|
|
256
|
-
ReactEcs.createElement(Button, { id: "video_control_play", value: "<b>Play</b>", fontSize: 18 * scaleFactor, labelTransform: { margin: { right: 20 } }, uiTransform: {
|
|
257
|
-
margin: { top: 0, right: 16 * scaleFactor, bottom: 0, left: 0 },
|
|
258
|
-
minWidth: 69 * scaleFactor,
|
|
259
|
-
alignItems: 'center',
|
|
260
|
-
justifyContent: 'center',
|
|
261
|
-
padding: 0,
|
|
262
|
-
}, icon: ICONS.PLAY_BUTTON, iconTransform: {
|
|
263
|
-
width: 35 * scaleFactor,
|
|
264
|
-
height: 35 * scaleFactor,
|
|
265
|
-
}, onMouseDown: () => {
|
|
266
|
-
controls.play();
|
|
267
|
-
}, disabled: !selectedVideoPlayer }),
|
|
268
|
-
ReactEcs.createElement(Button, { id: "video_control_pause", value: "<b>Pause</b>", fontSize: 18 * scaleFactor, labelTransform: { margin: '0 20' }, uiTransform: {
|
|
269
|
-
margin: { top: 0, right: 16 * scaleFactor, bottom: 0, left: 0 },
|
|
270
|
-
minWidth: 69 * scaleFactor,
|
|
271
|
-
alignItems: 'center',
|
|
272
|
-
justifyContent: 'center',
|
|
273
|
-
padding: 0,
|
|
274
|
-
}, onMouseDown: () => {
|
|
275
|
-
controls.pause();
|
|
276
|
-
}, disabled: !selectedVideoPlayer }),
|
|
277
|
-
ReactEcs.createElement(Button, { id: "video_control_restart", value: "<b>Restart</b>", labelTransform: { margin: '0 20' }, fontSize: 18 * scaleFactor, uiTransform: {
|
|
278
|
-
margin: { top: 0, right: 16 * scaleFactor, bottom: 0, left: 0 },
|
|
279
|
-
minWidth: 69 * scaleFactor,
|
|
280
|
-
alignItems: 'center',
|
|
281
|
-
justifyContent: 'center',
|
|
282
|
-
padding: 0,
|
|
283
|
-
}, onMouseDown: () => {
|
|
284
|
-
controls.restart();
|
|
285
|
-
}, disabled: !selectedVideoPlayer })),
|
|
286
|
-
ReactEcs.createElement(VideoControlVolume, { engine: engine, state: state })));
|
|
287
|
-
}
|
|
288
|
-
function handleShareScreenUrl(engine, state, url) {
|
|
289
|
-
if (!url)
|
|
290
|
-
return;
|
|
291
|
-
const controls = createVideoPlayerControls(engine, state);
|
|
292
|
-
controls.setSource(url);
|
|
293
|
-
nextTickFunctions.push(() => {
|
|
294
|
-
controls.play();
|
|
295
|
-
});
|
|
296
|
-
}
|
|
297
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmlkZW9Db250cm9sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkbWluLXRvb2xraXQtdWkvVmlkZW9Db250cm9sLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDdEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFDeEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDakMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUl6QyxNQUFNLEtBQUssR0FBRztJQUNaLGFBQWEsRUFBRSxHQUFHLFdBQVcsK0NBQStDO0lBQzVFLGVBQWUsRUFBRSxHQUFHLFdBQVcsK0RBQStEO0lBQzlGLGNBQWMsRUFBRSxHQUFHLFdBQVcsOERBQThEO0lBQzVGLFdBQVcsRUFBRSxHQUFHLFdBQVcsMkRBQTJEO0lBQ3RGLG1CQUFtQixFQUFFLEdBQUcsV0FBVyxtRUFBbUU7SUFDdEcsa0JBQWtCLEVBQUUsR0FBRyxXQUFXLGtFQUFrRTtDQUM1RixDQUFBO0FBRVYsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLFdBQVcsb0RBQW9ELENBQUE7QUFFOUYsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFBO0FBQ3ZCLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQTtBQUNwQixNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUE7QUFFeEIsTUFBTSxNQUFNLEdBQUc7SUFDYixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRTtJQUNyQixJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7Q0FDL0MsQ0FBQTtBQWFWLFNBQVMsMkJBQTJCLENBQUMsTUFBZTtJQUNsRCxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzVDLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUE7SUFDM0UsT0FBTyxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUNwQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWTtRQUN6QyxDQUFDLENBQUMsSUFBSSxDQUFBO0FBQ1YsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLE1BQWU7SUFDdEMsTUFBTSx3QkFBd0IsR0FBRywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUVwRSxJQUNFLENBQUMsd0JBQXdCO1FBQ3pCLENBQUMsd0JBQXdCLENBQUMsWUFBWTtRQUN0Qyx3QkFBd0IsQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUM7UUFFbEQsT0FBTyxFQUFFLENBQUE7SUFFWCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsWUFBWSxDQUFDLENBQUE7QUFDMUQsQ0FBQztBQUdELFNBQVMseUJBQXlCLENBQ2hDLE1BQWUsRUFDZixLQUFZO0lBRVosTUFBTSxZQUFZLEdBQUcsMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUE7SUFFeEQsT0FBTztRQUNMLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUM7UUFDbEUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQztRQUNwRSxPQUFPLEVBQUUsR0FBRyxFQUFFO1lBQ1osc0JBQXNCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDdkQsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDMUIsc0JBQXNCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUN2RCxDQUFDLENBQUMsQ0FBQTtZQUNGLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQzFCLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFBO1lBQ3hELENBQUMsQ0FBQyxDQUFBO1lBQ0YsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDMUIsc0JBQXNCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUE7WUFDOUQsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDO1FBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUMsQ0FBQTtRQUM3QyxDQUFDO1FBQ0QsSUFBSSxFQUFFLEdBQUcsRUFBRTtZQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtRQUN6QyxDQUFDO1FBQ0QsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFFcEIsSUFBSSxZQUFZLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQztnQkFDM0MsT0FBTTtZQUNSLENBQUM7WUFDRCxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUN6RCxDQUFDO1FBQ0QsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUM7S0FDdEUsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUM3QixNQUFlLEVBQ2YsS0FBWSxFQUNaLFFBQVcsRUFDWCxLQUF1QjtJQUV2QixNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDckQsTUFBTSxZQUFZLEdBQUcsMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDeEQsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBSXZDLElBQ0UsUUFBUSxLQUFLLFNBQVM7UUFDdEIsS0FBSyxLQUFLLElBQUk7UUFDZCxZQUFZLEVBQUUsd0JBQXdCLEVBQ3RDLENBQUM7UUFDRCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDekIsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFnQixDQUFDLENBQUE7WUFDekUsSUFBSSxDQUFDLFdBQVc7Z0JBQUUsT0FBTTtZQUN4Qix5QkFBeUIsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFBO1lBQ25ELDZCQUE2QixDQUMzQixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sQ0FBQyxNQUFnQixFQUN2QixRQUFRLEVBQ1IsQ0FBQyxDQUNGLENBQUE7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUF3QkQsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQ2xDLEtBQUssQ0FBQyxZQUFZLENBQUMsbUJBQW1CLElBQUksQ0FBQyxDQUM1QyxDQUFDLE1BQWdCLENBQUE7SUFDbEIsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLENBQUE7SUFDekUsSUFBSSxDQUFDLGNBQWM7UUFBRSxPQUFNO0lBRTNCLHlCQUF5QixDQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFFMUQsNkJBQTZCLENBQzNCLE1BQU0sRUFDTixLQUFLLEVBQ0wsb0JBQW9CLEVBQ3BCLFFBQVEsRUFDUixLQUFLLENBQ04sQ0FBQTtBQUNILENBQUM7QUFHRCxTQUFTLHlCQUF5QixDQUNoQyxXQUEwQixFQUMxQixRQUFXLEVBQ1gsS0FBdUI7SUFFdkIsSUFBSSxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7WUFDdEIsT0FBTTtRQUNSLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQTtRQUNyRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLEdBQUksS0FBZ0IsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQzFFLFdBQVcsQ0FBQyxNQUFNLEdBQUcsUUFBUSxHQUFHLEVBQUUsQ0FBQTtJQUNwQyxDQUFDO1NBQU0sQ0FBQztRQUNOLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUE7SUFDL0IsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLDZCQUE2QixDQUNwQyxNQUFlLEVBQ2YsS0FBWSxFQUNaLG9CQUE0QixFQUM1QixRQUFXLEVBQ1gsS0FBdUI7SUFFdkIsTUFBTSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ25ELE1BQU0saUJBQWlCLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxDQUNwRCxLQUFLLENBQUMsb0JBQW9CLENBQzNCLENBQUE7SUFDRCxNQUFNLHVCQUF1QixHQUFHLGlCQUFpQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQ2xFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBRSxNQUFNLENBQUMsTUFBaUIsS0FBSyxvQkFBb0IsQ0FDL0QsQ0FBQTtJQUNELElBQUksQ0FBQyxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDOUIseUJBQXlCLENBQUMsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ3JFLENBQUM7QUFDSCxDQUFDO0FBR0QsU0FBUyxtQkFBbUIsQ0FBQyxFQUMzQixNQUFNLEVBQ04sS0FBSyxHQUlOO0lBQ0MsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQzVDLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRTVDLElBQUksWUFBWSxDQUFDLE1BQU0sSUFBSSxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFFekMsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzVCLE9BQU8sQ0FDTCx1QkFBQyxRQUFRLElBQ1AsV0FBVyxFQUFFO2dCQUNYLGFBQWEsRUFBRSxLQUFLO2dCQUNwQixNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFBRTthQUNyQztZQUVELHVCQUFDLFFBQVEsSUFDUCxPQUFPLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUN4RCxhQUFhLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLEVBQzFELFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLG1CQUFtQixHQUFHLEdBQUcsQ0FBQyxFQUNqRSxTQUFTLEVBQUMsYUFBYSxFQUN2QixRQUFRLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFDMUIsV0FBVyxFQUFFO29CQUNYLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsV0FBVyxFQUFFO29CQUNsQyxRQUFRLEVBQUUsR0FBRyxHQUFHLFdBQVc7aUJBQzVCLEVBQ0QsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUN2QyxDQW9CTyxDQUNaLENBQUE7SUFDSCxDQUFDO0lBR0QsT0FBTyxDQUNMLHVCQUFDLFFBQVEsSUFDUCxXQUFXLEVBQUU7WUFDWCxhQUFhLEVBQUUsS0FBSztZQUNwQixNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFBRTtTQUNyQyxJQUVBLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDaEMsTUFBTSxnQkFBZ0IsR0FDcEIsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLG1CQUFtQixJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQTtRQUN2RCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFBO1FBQ3JELE9BQU8sQ0FDTCx1QkFBQyxNQUFNLElBQ0wsRUFBRSxFQUFFLHdCQUF3QixHQUFHLEVBQUUsRUFDakMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQ2xCLEtBQUssRUFBRSxNQUFNLFVBQVUsTUFBTSxFQUM3QixRQUFRLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFDMUIsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFDbkQsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFDekQsV0FBVyxFQUFFLEdBQUcsRUFBRTtnQkFDaEIsS0FBSyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsR0FBRyxHQUFHLENBQUE7WUFDOUMsQ0FBQyxFQUNELFdBQVcsRUFBRTtnQkFDWCxVQUFVLEVBQUUsUUFBUTtnQkFDcEIsY0FBYyxFQUFFLFFBQVE7Z0JBQ3hCLFNBQVMsRUFBRSxRQUFRO2dCQUNuQixNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLFdBQVcsRUFBRTthQUNuQyxFQUNELGNBQWMsRUFBRTtnQkFDZCxPQUFPLEVBQUUsQ0FBQyxHQUFHLFdBQVc7YUFDekIsR0FDRCxDQUNILENBQUE7SUFDSCxDQUFDLENBQUMsQ0EwQk8sQ0FDWixDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsTUFBZSxFQUFFLEtBQVk7SUFDM0QsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3JELE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUU1QyxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFBO0lBVzFDLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FDMUIsWUFBWSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsbUJBQW1CLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBZ0IsQ0FDM0UsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLEVBQzFCLE1BQU0sRUFDTixLQUFLLEdBSU47SUFDQyxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUM1QyxNQUFNLFFBQVEsR0FBRyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDekQsTUFBTSxtQkFBbUIsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDakUsTUFBTSxZQUFZLEdBQUcsMkJBQTJCLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDeEQsTUFBTSxlQUFlLEdBQUcsWUFBWSxFQUFFLHdCQUF3QixDQUFBO0lBQzlELE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxJQUFJLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUE7SUFFaEcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FDeEIsdUJBQUMsUUFBUSxJQUNQLFdBQVcsRUFBRTtZQUNYLGFBQWEsRUFBRSxRQUFRO1NBQ3hCO1FBRUQsdUJBQUMsS0FBSyxJQUNKLEtBQUssRUFBRSxjQUFjLEVBQ3JCLFFBQVEsRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUMxQixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFDbkIsV0FBVyxFQUFFO2dCQUNYLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO2FBQ2hFLEdBQ0Q7UUFFRix1QkFBQyxRQUFRLElBQ1AsV0FBVyxFQUFFO2dCQUNYLGFBQWEsRUFBRSxLQUFLO2FBQ3JCO1lBRUQsdUJBQUMsTUFBTSxJQUNMLEVBQUUsRUFBQyw0QkFBNEIsRUFDL0IsS0FBSyxFQUFDLE9BQU8sRUFDYixRQUFRLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFDMUIsV0FBVyxFQUFFO29CQUNYLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO29CQUMvRCxRQUFRLEVBQUUsRUFBRSxHQUFHLFdBQVc7b0JBQzFCLFVBQVUsRUFBRSxRQUFRO29CQUNwQixjQUFjLEVBQUUsUUFBUTtvQkFDeEIsT0FBTyxFQUFFLENBQUM7aUJBQ1gsRUFDRCxJQUFJLEVBQUUsS0FBSyxDQUFDLG1CQUFtQixFQUMvQixRQUFRLEVBQUUsSUFBSSxFQUNkLGFBQWEsRUFBRTtvQkFDYixLQUFLLEVBQUUsRUFBRSxHQUFHLFdBQVc7b0JBQ3ZCLE1BQU0sRUFBRSxFQUFFLEdBQUcsV0FBVztpQkFDekIsRUFDRCxXQUFXLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUNuRCxRQUFRLEVBQUUsQ0FBQyxtQkFBbUIsR0FDOUI7WUFDRix1QkFBQyxLQUFLLElBQ0osS0FBSyxFQUFFLGdCQUFnQixFQUN2QixRQUFRLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFDMUIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEVBQ2xCLFdBQVcsRUFBRTtvQkFDWCxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtvQkFDL0QsUUFBUSxFQUFFLEVBQUUsR0FBRyxXQUFXO29CQUMxQixVQUFVLEVBQUUsUUFBUTtvQkFDcEIsY0FBYyxFQUFFLFFBQVE7b0JBQ3hCLE9BQU8sRUFBRSxDQUFDO2lCQUNYLEdBQ0Q7WUFDRix1QkFBQyxNQUFNLElBQ0wsRUFBRSxFQUFDLDJCQUEyQixFQUM5QixLQUFLLEVBQUMsTUFBTSxFQUNaLFFBQVEsRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUMxQixJQUFJLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixFQUM5QixRQUFRLEVBQUUsSUFBSSxFQUNkLGFBQWEsRUFBRTtvQkFDYixLQUFLLEVBQUUsRUFBRSxHQUFHLFdBQVc7b0JBQ3ZCLE1BQU0sRUFBRSxFQUFFLEdBQUcsV0FBVztpQkFDekIsRUFDRCxXQUFXLEVBQUU7b0JBQ1gsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUU7b0JBQy9ELFFBQVEsRUFBRSxFQUFFLEdBQUcsV0FBVztvQkFDMUIsVUFBVSxFQUFFLFFBQVE7b0JBQ3BCLGNBQWMsRUFBRSxRQUFRO29CQUN4QixPQUFPLEVBQUUsQ0FBQztpQkFDWCxFQUNELFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUNsRCxRQUFRLEVBQUUsQ0FBQyxtQkFBbUIsR0FDOUI7WUFDRix1QkFBQyxNQUFNLElBQ0wsRUFBRSxFQUFDLDJCQUEyQixFQUM5QixLQUFLLEVBQUMsYUFBYSxFQUNuQixRQUFRLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFDMUIsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUNsQyxXQUFXLEVBQUU7b0JBQ1gsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUU7b0JBQy9ELFFBQVEsRUFBRSxFQUFFLEdBQUcsV0FBVztvQkFDMUIsVUFBVSxFQUFFLFFBQVE7b0JBQ3BCLGNBQWMsRUFBRSxRQUFRO29CQUN4QixPQUFPLEVBQUUsQ0FBQztpQkFDWCxFQUNELFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUN4QyxRQUFRLEVBQUUsQ0FBQyxtQkFBbUIsR0FDOUIsQ0FDTyxDQUNGLENBQ1osQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBO0FBQ1YsQ0FBQztBQUdELE1BQU0sVUFBVSxZQUFZLENBQUMsRUFDM0IsTUFBTSxFQUNOLEtBQUssR0FJTjtJQUNDLE1BQU0sUUFBUSxHQUFHLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUN6RCxNQUFNLG1CQUFtQixHQUFHLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUNqRSxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUU1QyxPQUFPLENBQ0wsdUJBQUMsUUFBUSxJQUNQLFdBQVcsRUFBRTtZQUNYLEtBQUssRUFBRSxNQUFNO1lBQ2IsTUFBTSxFQUFFLE1BQU07WUFDZCxhQUFhLEVBQUUsUUFBUTtTQUN4QjtRQUdELHVCQUFDLFFBQVEsSUFDUCxXQUFXLEVBQUU7Z0JBQ1gsYUFBYSxFQUFFLEtBQUs7Z0JBQ3BCLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFO2dCQUNwQyxNQUFNLEVBQUUsRUFBRSxHQUFHLFdBQVc7YUFDekI7WUFFRCx1QkFBQyxRQUFRLElBQ1AsV0FBVyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUUsRUFDbEUsWUFBWSxFQUFFO29CQUNaLFdBQVcsRUFBRSxTQUFTO29CQUN0QixPQUFPLEVBQUU7d0JBQ1AsR0FBRyxFQUFFLEtBQUssQ0FBQyxhQUFhO3FCQUN6QjtpQkFDRixHQUNEO1lBQ0YsdUJBQUMsS0FBSyxJQUNKLEtBQUssRUFBQyxzQkFBc0IsRUFDNUIsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFDaEQsUUFBUSxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQzFCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQ3JCLENBQ087UUFFWCx1QkFBQyxLQUFLLElBQ0osS0FBSyxFQUFDLHVCQUF1QixFQUM3QixRQUFRLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFDMUIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFDckIsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUUsRUFBRSxHQUNyRDtRQUVGLHVCQUFDLG1CQUFtQixJQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBSTtRQUVyRCx1QkFBQyxLQUFLLElBQ0osUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2xCLEtBQUssQ0FBQyxZQUFZLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQTtnQkFDekMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUM1QyxDQUFDLEVBQ0QsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxFQUN4RCxRQUFRLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFDMUIsV0FBVyxFQUFDLHNCQUFzQixFQUNsQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUNuRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUNyQixZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQ3ZDLFdBQVcsRUFBRTtnQkFDWCxLQUFLLEVBQUUsTUFBTTtnQkFDYixNQUFNLEVBQUUsRUFBRSxHQUFHLFdBQVc7YUFDekIsR0FDRDtRQUVGLHVCQUFDLFFBQVEsSUFDUCxXQUFXLEVBQUU7Z0JBQ1gsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsTUFBTSxFQUFFLEVBQUUsR0FBRyxXQUFXO2dCQUN4QixhQUFhLEVBQUUsS0FBSztnQkFDcEIsY0FBYyxFQUFFLFVBQVU7Z0JBQzFCLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFO2FBQ2xDO1lBRUQsdUJBQUMsTUFBTSxJQUNMLEVBQUUsRUFBQyxrQ0FBa0MsRUFDckMsS0FBSyxFQUFDLHFCQUFxQixFQUMzQixPQUFPLEVBQUMsTUFBTSxFQUNkLFFBQVEsRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUMxQixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUNyQixXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLFdBQVcsRUFBRSxFQUFFLEVBQ25ELFdBQVcsRUFBRSxHQUFHLEVBQUU7b0JBQ2hCLEtBQUssQ0FBQyxZQUFZLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQTtnQkFDL0MsQ0FBQyxHQUNEO1lBQ0YsdUJBQUMsTUFBTSxJQUNMLEVBQUUsRUFBQyxrQ0FBa0MsRUFDckMsS0FBSyxFQUFDLGNBQWMsRUFDcEIsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUNsQyxRQUFRLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFDMUIsV0FBVyxFQUFFLEdBQUcsRUFBRTtvQkFDaEIsb0JBQW9CLENBQ2xCLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQ2xDLENBQUE7Z0JBQ0gsQ0FBQyxFQUNELFFBQVEsRUFBRSxDQUFDLG1CQUFtQixHQUM5QixDQUNPO1FBRVgsdUJBQUMsS0FBSyxJQUNKLEtBQUssRUFBQyxnQkFBZ0IsRUFDdEIsUUFBUSxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQzFCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQ3JCLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFLEVBQUUsR0FDckQ7UUFFRix1QkFBQyxRQUFRLElBQ1AsV0FBVyxFQUFFO2dCQUNYLGFBQWEsRUFBRSxLQUFLO2dCQUNwQixLQUFLLEVBQUUsTUFBTTtnQkFDYixNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFBRTthQUNyQztZQXVCRCx1QkFBQyxNQUFNLElBQ0wsRUFBRSxFQUFDLG9CQUFvQixFQUN2QixLQUFLLEVBQUMsYUFBYSxFQUNuQixRQUFRLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFDMUIsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQ3pDLFdBQVcsRUFBRTtvQkFDWCxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtvQkFDL0QsUUFBUSxFQUFFLEVBQUUsR0FBRyxXQUFXO29CQUMxQixVQUFVLEVBQUUsUUFBUTtvQkFDcEIsY0FBYyxFQUFFLFFBQVE7b0JBQ3hCLE9BQU8sRUFBRSxDQUFDO2lCQUNYLEVBQ0QsSUFBSSxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQ3ZCLGFBQWEsRUFBRTtvQkFDYixLQUFLLEVBQUUsRUFBRSxHQUFHLFdBQVc7b0JBQ3ZCLE1BQU0sRUFBRSxFQUFFLEdBQUcsV0FBVztpQkFDekIsRUFDRCxXQUFXLEVBQUUsR0FBRyxFQUFFO29CQUNoQixRQUFRLENBQUMsSUFBSSxFQUFFLENBQUE7Z0JBQ2pCLENBQUMsRUFDRCxRQUFRLEVBQUUsQ0FBQyxtQkFBbUIsR0FDOUI7WUFDRix1QkFBQyxNQUFNLElBQ0wsRUFBRSxFQUFDLHFCQUFxQixFQUN4QixLQUFLLEVBQUMsY0FBYyxFQUNwQixRQUFRLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFDMUIsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUNsQyxXQUFXLEVBQUU7b0JBQ1gsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUU7b0JBQy9ELFFBQVEsRUFBRSxFQUFFLEdBQUcsV0FBVztvQkFDMUIsVUFBVSxFQUFFLFFBQVE7b0JBQ3BCLGNBQWMsRUFBRSxRQUFRO29CQUN4QixPQUFPLEVBQUUsQ0FBQztpQkFDWCxFQUNELFdBQVcsRUFBRSxHQUFHLEVBQUU7b0JBQ2hCLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQTtnQkFDbEIsQ0FBQyxFQUNELFFBQVEsRUFBRSxDQUFDLG1CQUFtQixHQUM5QjtZQUNGLHVCQUFDLE1BQU0sSUFDTCxFQUFFLEVBQUMsdUJBQXVCLEVBQzFCLEtBQUssRUFBQyxnQkFBZ0IsRUFDdEIsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUNsQyxRQUFRLEVBQUUsRUFBRSxHQUFHLFdBQVcsRUFDMUIsV0FBVyxFQUFFO29CQUNYLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO29CQUMvRCxRQUFRLEVBQUUsRUFBRSxHQUFHLFdBQVc7b0JBQzFCLFVBQVUsRUFBRSxRQUFRO29CQUNwQixjQUFjLEVBQUUsUUFBUTtvQkFDeEIsT0FBTyxFQUFFLENBQUM7aUJBQ1gsRUFDRCxXQUFXLEVBQUUsR0FBRyxFQUFFO29CQUNoQixRQUFRLENBQUMsT0FBTyxFQUFFLENBQUE7Z0JBQ3BCLENBQUMsRUFDRCxRQUFRLEVBQUUsQ0FBQyxtQkFBbUIsR0FDOUIsQ0F1Qk87UUFFWCx1QkFBQyxrQkFBa0IsSUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUksQ0FDM0MsQ0FDWixDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsTUFBZSxFQUFFLEtBQVksRUFBRSxHQUFZO0lBQ3ZFLElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTTtJQUVoQixNQUFNLFFBQVEsR0FBRyx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDekQsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN2QixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQzFCLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUNqQixDQUFDLENBQUMsQ0FBQTtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnRpdHksIElFbmdpbmUsIFBCVmlkZW9QbGF5ZXIgfSBmcm9tICdAZGNsL2VjcydcbmltcG9ydCBSZWFjdEVjcywgeyBMYWJlbCwgVWlFbnRpdHksIElucHV0LCBEcm9wZG93biB9IGZyb20gJ0BkY2wvcmVhY3QtZWNzJ1xuaW1wb3J0IHsgQ29sb3I0IH0gZnJvbSAnQGRjbC9zZGsvbWF0aCdcbmltcG9ydCB7IGdldENvbXBvbmVudHMgfSBmcm9tICcuLi9kZWZpbml0aW9ucydcbmltcG9ydCB7IGdldEV4cGxvcmVyQ29tcG9uZW50cyB9IGZyb20gJy4uL2NvbXBvbmVudHMnXG5pbXBvcnQgeyBnZXRTY2FsZVVJRmFjdG9yIH0gZnJvbSAnLi4vdWknXG5pbXBvcnQgeyBuZXh0VGlja0Z1bmN0aW9ucyB9IGZyb20gJy4vaW5kZXgnXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuL0J1dHRvbidcbmltcG9ydCB7IENPTlRFTlRfVVJMIH0gZnJvbSAnLi9jb25zdGFudHMnXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vdHlwZXMnXG5cbi8vIENvbnN0YW50c1xuY29uc3QgSUNPTlMgPSB7XG4gIFZJREVPX0NPTlRST0w6IGAke0NPTlRFTlRfVVJMfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy92aWRlby1jb250cm9sLnBuZ2AsXG4gIFBSRVZJT1VTX0JVVFRPTjogYCR7Q09OVEVOVF9VUkx9L2FkbWluX3Rvb2xraXQvYXNzZXRzL2ljb25zL3ZpZGVvLWNvbnRyb2wtcHJldmlvdXMtYnV0dG9uLnBuZ2AsXG4gIEZPUldBUkRfQlVUVE9OOiBgJHtDT05URU5UX1VSTH0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvdmlkZW8tY29udHJvbC1mb3J3YXJkLWJ1dHRvbi5wbmdgLFxuICBQTEFZX0JVVFRPTjogYCR7Q09OVEVOVF9VUkx9L2FkbWluX3Rvb2xraXQvYXNzZXRzL2ljb25zL3ZpZGVvLWNvbnRyb2wtcGxheS1idXR0b24ucG5nYCxcbiAgVk9MVU1FX01JTlVTX0JVVFRPTjogYCR7Q09OVEVOVF9VUkx9L2FkbWluX3Rvb2xraXQvYXNzZXRzL2ljb25zL3ZpZGVvLWNvbnRyb2wtdm9sdW1lLW1pbnVzLWJ1dHRvbi5wbmdgLFxuICBWT0xVTUVfUExVU19CVVRUT046IGAke0NPTlRFTlRfVVJMfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy92aWRlby1jb250cm9sLXZvbHVtZS1wbHVzLWJ1dHRvbi5wbmdgLFxufSBhcyBjb25zdFxuXG5jb25zdCBEUk9QRE9XTl9CQUNLR1JPVU5EID0gYCR7Q09OVEVOVF9VUkx9L2FkbWluX3Rvb2xraXQvYmFja2dyb3VuZHMvZHJvcGRvd24tYmFja2dyb3VuZC5wbmdgXG5cbmNvbnN0IFZPTFVNRV9TVEVQID0gMC4xXG5jb25zdCBNQVhfVk9MVU1FID0gMVxuY29uc3QgREVGQVVMVF9WT0xVTUUgPSAxXG5cbmNvbnN0IENPTE9SUyA9IHtcbiAgV0hJVEU6IENvbG9yNC5XaGl0ZSgpLFxuICBHUkFZOiBDb2xvcjQuY3JlYXRlKDE2MCAvIDI1NSwgMTU1IC8gMjU1LCAxNjggLyAyNTUsIDEpLFxufSBhcyBjb25zdFxuXG4vLyBUeXBlc1xuaW50ZXJmYWNlIFZpZGVvUGxheWVyQ29udHJvbHMge1xuICBwbGF5OiAoKSA9PiB2b2lkXG4gIHBhdXNlOiAoKSA9PiB2b2lkXG4gIHJlc3RhcnQ6ICgpID0+IHZvaWRcbiAgcHJldmlvdXM6ICgpID0+IHZvaWRcbiAgbmV4dDogKCkgPT4gdm9pZFxuICBzZXRWb2x1bWU6ICh2b2x1bWU6IG51bWJlcikgPT4gdm9pZFxuICBzZXRTb3VyY2U6ICh1cmw6IHN0cmluZykgPT4gdm9pZFxufVxuXG5mdW5jdGlvbiBnZXRBZG1pblRvb2xraXRWaWRlb0NvbnRyb2woZW5naW5lOiBJRW5naW5lKSB7XG4gIGNvbnN0IHsgQWRtaW5Ub29scyB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpXG4gIGNvbnN0IGFkbWluVG9vbGtpdEVudGl0aWVzID0gQXJyYXkuZnJvbShlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKEFkbWluVG9vbHMpKVxuICByZXR1cm4gYWRtaW5Ub29sa2l0RW50aXRpZXMubGVuZ3RoID4gMFxuICAgID8gYWRtaW5Ub29sa2l0RW50aXRpZXNbMF1bMV0udmlkZW9Db250cm9sXG4gICAgOiBudWxsXG59XG5cbmZ1bmN0aW9uIGdldFZpZGVvUGxheWVycyhlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgYWRtaW5Ub29sa2l0VmlkZW9Db250cm9sID0gZ2V0QWRtaW5Ub29sa2l0VmlkZW9Db250cm9sKGVuZ2luZSlcblxuICBpZiAoXG4gICAgIWFkbWluVG9vbGtpdFZpZGVvQ29udHJvbCB8fFxuICAgICFhZG1pblRvb2xraXRWaWRlb0NvbnRyb2wudmlkZW9QbGF5ZXJzIHx8XG4gICAgYWRtaW5Ub29sa2l0VmlkZW9Db250cm9sLnZpZGVvUGxheWVycy5sZW5ndGggPT09IDBcbiAgKVxuICAgIHJldHVybiBbXVxuXG4gIHJldHVybiBBcnJheS5mcm9tKGFkbWluVG9vbGtpdFZpZGVvQ29udHJvbC52aWRlb1BsYXllcnMpXG59XG5cbi8vIEhlbHBlciBmdW5jdGlvbnNcbmZ1bmN0aW9uIGNyZWF0ZVZpZGVvUGxheWVyQ29udHJvbHMoXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgc3RhdGU6IFN0YXRlLFxuKTogVmlkZW9QbGF5ZXJDb250cm9scyB7XG4gIGNvbnN0IHZpZGVvQ29udHJvbCA9IGdldEFkbWluVG9vbGtpdFZpZGVvQ29udHJvbChlbmdpbmUpXG5cbiAgcmV0dXJuIHtcbiAgICBwbGF5OiAoKSA9PiB1cGRhdGVWaWRlb1BsYXllclByb3BzKGVuZ2luZSwgc3RhdGUsICdwbGF5aW5nJywgdHJ1ZSksXG4gICAgcGF1c2U6ICgpID0+IHVwZGF0ZVZpZGVvUGxheWVyUHJvcHMoZW5naW5lLCBzdGF0ZSwgJ3BsYXlpbmcnLCBmYWxzZSksXG4gICAgcmVzdGFydDogKCkgPT4ge1xuICAgICAgdXBkYXRlVmlkZW9QbGF5ZXJQcm9wcyhlbmdpbmUsIHN0YXRlLCAncGxheWluZycsIGZhbHNlKVxuICAgICAgbmV4dFRpY2tGdW5jdGlvbnMucHVzaCgoKSA9PiB7XG4gICAgICAgIHVwZGF0ZVZpZGVvUGxheWVyUHJvcHMoZW5naW5lLCBzdGF0ZSwgJ3Bvc2l0aW9uJywgLTEpXG4gICAgICB9KVxuICAgICAgbmV4dFRpY2tGdW5jdGlvbnMucHVzaCgoKSA9PiB7XG4gICAgICAgIHVwZGF0ZVZpZGVvUGxheWVyUHJvcHMoZW5naW5lLCBzdGF0ZSwgJ3BsYXlpbmcnLCB0cnVlKVxuICAgICAgfSlcbiAgICAgIG5leHRUaWNrRnVuY3Rpb25zLnB1c2goKCkgPT4ge1xuICAgICAgICB1cGRhdGVWaWRlb1BsYXllclByb3BzKGVuZ2luZSwgc3RhdGUsICdwb3NpdGlvbicsIHVuZGVmaW5lZClcbiAgICAgIH0pXG4gICAgfSxcbiAgICBwcmV2aW91czogKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ1RPRE86IFByZXZpb3VzIFRyYWNrIGNsaWNrZWQnKVxuICAgIH0sXG4gICAgbmV4dDogKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ1RPRE86IE5leHQgVHJhY2sgY2xpY2tlZCcpXG4gICAgfSxcbiAgICBzZXRWb2x1bWU6ICh2b2x1bWUpID0+IHtcbiAgICAgIC8vIERvbid0IGFsbG93IHZvbHVtZSBjaGFuZ2VzIGlmIHNvdW5kIGlzIGRpc2FibGVkXG4gICAgICBpZiAodmlkZW9Db250cm9sPy5kaXNhYmxlVmlkZW9QbGF5ZXJzU291bmQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB1cGRhdGVWaWRlb1BsYXllclByb3BzKGVuZ2luZSwgc3RhdGUsICd2b2x1bWUnLCB2b2x1bWUpXG4gICAgfSxcbiAgICBzZXRTb3VyY2U6ICh1cmwpID0+IHVwZGF0ZVZpZGVvUGxheWVyUHJvcHMoZW5naW5lLCBzdGF0ZSwgJ3NyYycsIHVybCksXG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlVmlkZW9QbGF5ZXJQcm9wczxLIGV4dGVuZHMga2V5b2YgUEJWaWRlb1BsYXllcj4oXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgc3RhdGU6IFN0YXRlLFxuICBwcm9wZXJ0eTogSyxcbiAgdmFsdWU6IFBCVmlkZW9QbGF5ZXJbS10sXG4pIHtcbiAgY29uc3QgeyBWaWRlb1BsYXllciB9ID0gZ2V0RXhwbG9yZXJDb21wb25lbnRzKGVuZ2luZSlcbiAgY29uc3QgdmlkZW9Db250cm9sID0gZ2V0QWRtaW5Ub29sa2l0VmlkZW9Db250cm9sKGVuZ2luZSlcbiAgY29uc3QgcGxheWVycyA9IGdldFZpZGVvUGxheWVycyhlbmdpbmUpXG5cbiAgLy8gSWYgc291bmQgaXMgZGlzYWJsZWQgYW5kIHdlJ3JlIHVwZGF0aW5nIHRoZSAncGxheWluZycgcHJvcGVydHkgdG8gdHJ1ZSxcbiAgLy8gd2UgbmVlZCB0byBlbnN1cmUgdm9sdW1lIGlzIDBcbiAgaWYgKFxuICAgIHByb3BlcnR5ID09PSAncGxheWluZycgJiZcbiAgICB2YWx1ZSA9PT0gdHJ1ZSAmJlxuICAgIHZpZGVvQ29udHJvbD8uZGlzYWJsZVZpZGVvUGxheWVyc1NvdW5kXG4gICkge1xuICAgIHBsYXllcnMuZm9yRWFjaCgocGxheWVyKSA9PiB7XG4gICAgICBjb25zdCB2aWRlb1NvdXJjZSA9IFZpZGVvUGxheWVyLmdldE11dGFibGVPck51bGwocGxheWVyLmVudGl0eSBhcyBFbnRpdHkpXG4gICAgICBpZiAoIXZpZGVvU291cmNlKSByZXR1cm5cbiAgICAgIHVwZGF0ZVZpZGVvU291cmNlUHJvcGVydHkodmlkZW9Tb3VyY2UsICd2b2x1bWUnLCAwKVxuICAgICAgdXBkYXRlVmlkZW9QbGF5ZXJDb250cm9sU3RhdGUoXG4gICAgICAgIGVuZ2luZSxcbiAgICAgICAgc3RhdGUsXG4gICAgICAgIHBsYXllci5lbnRpdHkgYXMgRW50aXR5LFxuICAgICAgICAndm9sdW1lJyxcbiAgICAgICAgMCxcbiAgICAgIClcbiAgICB9KVxuICB9XG5cbiAgLy8gVE9ETzogTmVlZHMgdG8gYmUgcmVkZWZpbmVkIHRoZSBsaW5rIGFsbCBmZWF0dXJlXG4gIC8vIGNvbnN0IGxpbmtBbGxWaWRlb1BsYXllcnMgPVxuICAvLyAgIHN0YXRlLnZpZGVvQ29udHJvbC5saW5rQWxsVmlkZW9QbGF5ZXJzID8/IHZpZGVvQ29udHJvbD8ubGlua0FsbFZpZGVvUGxheWVyc1xuICAvLyBpZiAobGlua0FsbFZpZGVvUGxheWVycykge1xuICAvLyAgIC8vIEFwcGx5IHRvIGFsbCBwbGF5ZXJzXG4gIC8vICAgcGxheWVycy5mb3JFYWNoKChwbGF5ZXIpID0+IHtcbiAgLy8gICAgIGNvbnN0IHZpZGVvU291cmNlID0gVmlkZW9QbGF5ZXIuZ2V0TXV0YWJsZU9yTnVsbChwbGF5ZXIuZW50aXR5IGFzIEVudGl0eSlcbiAgLy8gICAgIGlmICghdmlkZW9Tb3VyY2UpIHJldHVyblxuICAvLyAgICAgdXBkYXRlVmlkZW9Tb3VyY2VQcm9wZXJ0eSh2aWRlb1NvdXJjZSwgcHJvcGVydHksIHZhbHVlKVxuXG4gIC8vICAgICB1cGRhdGVWaWRlb1BsYXllckNvbnRyb2xTdGF0ZShcbiAgLy8gICAgICAgZW5naW5lLFxuICAvLyAgICAgICBzdGF0ZSxcbiAgLy8gICAgICAgcGxheWVyLmVudGl0eSBhcyBFbnRpdHksXG4gIC8vICAgICAgIHByb3BlcnR5LFxuICAvLyAgICAgICB2YWx1ZSxcbiAgLy8gICAgIClcbiAgLy8gICB9KVxuICAvLyAgIHJldHVyblxuICAvLyB9XG5cbiAgLy8gQXBwbHkgdG8gc2VsZWN0ZWQgcGxheWVyIG9ubHlcbiAgY29uc3Qgc2VsZWN0ZWRQbGF5ZXJFbnRpdHkgPSBwbGF5ZXJzW1xuICAgIHN0YXRlLnZpZGVvQ29udHJvbC5zZWxlY3RlZFZpZGVvUGxheWVyID8/IDBcbiAgXS5lbnRpdHkgYXMgRW50aXR5XG4gIGNvbnN0IHNlbGVjdGVkUGxheWVyID0gVmlkZW9QbGF5ZXIuZ2V0TXV0YWJsZU9yTnVsbChzZWxlY3RlZFBsYXllckVudGl0eSlcbiAgaWYgKCFzZWxlY3RlZFBsYXllcikgcmV0dXJuXG5cbiAgdXBkYXRlVmlkZW9Tb3VyY2VQcm9wZXJ0eShzZWxlY3RlZFBsYXllciwgcHJvcGVydHksIHZhbHVlKVxuXG4gIHVwZGF0ZVZpZGVvUGxheWVyQ29udHJvbFN0YXRlKFxuICAgIGVuZ2luZSxcbiAgICBzdGF0ZSxcbiAgICBzZWxlY3RlZFBsYXllckVudGl0eSxcbiAgICBwcm9wZXJ0eSxcbiAgICB2YWx1ZSxcbiAgKVxufVxuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gdXBkYXRlIGEgdmlkZW8gc291cmNlIHByb3BlcnR5XG5mdW5jdGlvbiB1cGRhdGVWaWRlb1NvdXJjZVByb3BlcnR5PEsgZXh0ZW5kcyBrZXlvZiBQQlZpZGVvUGxheWVyPihcbiAgdmlkZW9Tb3VyY2U6IFBCVmlkZW9QbGF5ZXIsXG4gIHByb3BlcnR5OiBLLFxuICB2YWx1ZTogUEJWaWRlb1BsYXllcltLXSxcbikge1xuICBpZiAocHJvcGVydHkgPT09ICd2b2x1bWUnKSB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdmlkZW9Tb3VyY2Uudm9sdW1lID0gMFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc3RlcHMgPSBNYXRoLnJvdW5kKCh2aWRlb1NvdXJjZS52b2x1bWUgPz8gREVGQVVMVF9WT0xVTUUpICogMTApXG4gICAgY29uc3QgbmV3U3RlcHMgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxMCwgc3RlcHMgKyAodmFsdWUgYXMgbnVtYmVyKSAqIDEwKSlcbiAgICB2aWRlb1NvdXJjZS52b2x1bWUgPSBuZXdTdGVwcyAvIDEwXG4gIH0gZWxzZSB7XG4gICAgdmlkZW9Tb3VyY2VbcHJvcGVydHldID0gdmFsdWVcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVWaWRlb1BsYXllckNvbnRyb2xTdGF0ZTxLIGV4dGVuZHMga2V5b2YgUEJWaWRlb1BsYXllcj4oXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgc3RhdGU6IFN0YXRlLFxuICBzZWxlY3RlZFBsYXllckVudGl0eTogRW50aXR5LFxuICBwcm9wZXJ0eTogSyxcbiAgdmFsdWU6IFBCVmlkZW9QbGF5ZXJbS10sXG4pIHtcbiAgY29uc3QgeyBWaWRlb0NvbnRyb2xTdGF0ZSB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpXG4gIGNvbnN0IHZpZGVvQ29udHJvbFN0YXRlID0gVmlkZW9Db250cm9sU3RhdGUuZ2V0TXV0YWJsZShcbiAgICBzdGF0ZS5hZG1pblRvb2xraXRVaUVudGl0eSxcbiAgKVxuICBjb25zdCB2aWRlb1BsYXllckNvbnRyb2xTdGF0ZSA9IHZpZGVvQ29udHJvbFN0YXRlLnZpZGVvUGxheWVycz8uZmluZChcbiAgICAocGxheWVyKSA9PiAocGxheWVyLmVudGl0eSBhcyBFbnRpdHkpID09PSBzZWxlY3RlZFBsYXllckVudGl0eSxcbiAgKVxuICBpZiAoISF2aWRlb1BsYXllckNvbnRyb2xTdGF0ZSkge1xuICAgIHVwZGF0ZVZpZGVvU291cmNlUHJvcGVydHkodmlkZW9QbGF5ZXJDb250cm9sU3RhdGUsIHByb3BlcnR5LCB2YWx1ZSlcbiAgfVxufVxuXG4vLyBDb21wb25lbnRzXG5mdW5jdGlvbiBWaWRlb1BsYXllclNlbGVjdG9yKHtcbiAgZW5naW5lLFxuICBzdGF0ZSxcbn06IHtcbiAgZW5naW5lOiBJRW5naW5lXG4gIHN0YXRlOiBTdGF0ZVxufSkge1xuICBjb25zdCB2aWRlb1BsYXllcnMgPSBnZXRWaWRlb1BsYXllcnMoZW5naW5lKVxuICBjb25zdCBzY2FsZUZhY3RvciA9IGdldFNjYWxlVUlGYWN0b3IoZW5naW5lKVxuXG4gIGlmICh2aWRlb1BsYXllcnMubGVuZ3RoIDw9IDEpIHJldHVybiBudWxsXG5cbiAgaWYgKHZpZGVvUGxheWVycy5sZW5ndGggPiA0KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxVaUVudGl0eVxuICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgICAgICAgIG1hcmdpbjogeyBib3R0b206IDE2ICogc2NhbGVGYWN0b3IgfSxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPERyb3Bkb3duXG4gICAgICAgICAgb3B0aW9ucz17dmlkZW9QbGF5ZXJzLm1hcCgocGxheWVyKSA9PiBwbGF5ZXIuY3VzdG9tTmFtZSl9XG4gICAgICAgICAgc2VsZWN0ZWRJbmRleD17c3RhdGUudmlkZW9Db250cm9sLnNlbGVjdGVkVmlkZW9QbGF5ZXIgPz8gMH1cbiAgICAgICAgICBvbkNoYW5nZT17KGlkeCkgPT4gKHN0YXRlLnZpZGVvQ29udHJvbC5zZWxlY3RlZFZpZGVvUGxheWVyID0gaWR4KX1cbiAgICAgICAgICB0ZXh0QWxpZ249XCJtaWRkbGUtbGVmdFwiXG4gICAgICAgICAgZm9udFNpemU9ezE0ICogc2NhbGVGYWN0b3J9XG4gICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgIG1hcmdpbjogeyByaWdodDogOCAqIHNjYWxlRmFjdG9yIH0sXG4gICAgICAgICAgICBtaW5XaWR0aDogMTUwICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgfX1cbiAgICAgICAgICB1aUJhY2tncm91bmQ9e3sgY29sb3I6IENvbG9yNC5XaGl0ZSgpIH19XG4gICAgICAgIC8+XG4gICAgICAgIHsvKiBUT0RPOiBOZWVkcyB0byBiZSByZWRlZmluZWQgdGhlIGxpbmsgYWxsIGZlYXR1cmUuICovfVxuICAgICAgICB7LyogPEJ1dHRvblxuICAgICAgICAgIGlkPVwidmlkZW9fY29udHJvbF9saW5rX2FsbFwiXG4gICAgICAgICAgdmFsdWU9XCI8Yj5MaW5rIEFsbDwvYj5cIlxuICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICBmb250U2l6ZT17MTQgKiBzY2FsZUZhY3Rvcn1cbiAgICAgICAgICBjb2xvcj17Q29sb3I0LldoaXRlKCl9XG4gICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgIHN0YXRlLnZpZGVvQ29udHJvbC5saW5rQWxsVmlkZW9QbGF5ZXJzID0gdHJ1ZVxuICAgICAgICAgICAgc3RhdGUudmlkZW9Db250cm9sLnNlbGVjdGVkVmlkZW9QbGF5ZXIgPSB1bmRlZmluZWRcbiAgICAgICAgICB9fVxuICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICBtYXJnaW46IHsgdG9wOiAwLCByaWdodDogMTYgKiBzY2FsZUZhY3RvciwgYm90dG9tOiAwLCBsZWZ0OiAwIH0sXG4gICAgICAgICAgICBtaW5XaWR0aDogNjkgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICB9fVxuICAgICAgICAvPiAqL31cbiAgICAgIDwvVWlFbnRpdHk+XG4gICAgKVxuICB9XG5cbiAgLy8gRm9yIDQgb3IgZmV3ZXIgcGxheWVycywgc2hvdyBudW1iZXJlZCBidXR0b25zXG4gIHJldHVybiAoXG4gICAgPFVpRW50aXR5XG4gICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICAgICAgbWFyZ2luOiB7IGJvdHRvbTogMTYgKiBzY2FsZUZhY3RvciB9LFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7dmlkZW9QbGF5ZXJzLm1hcCgocGxheWVyLCBpZHgpID0+IHtcbiAgICAgICAgY29uc3QgaXNQbGF5ZXJTZWxlY3RlZCA9XG4gICAgICAgICAgKHN0YXRlLnZpZGVvQ29udHJvbC5zZWxlY3RlZFZpZGVvUGxheWVyID8/IDApID09PSBpZHhcbiAgICAgICAgY29uc3QgcGxheWVyTmFtZSA9IHBsYXllci5jdXN0b21OYW1lID8/IGAjJHtpZHggKyAxfWBcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBpZD17YHZpZGVvX2NvbnRyb2xfcGxheWVyXyR7aWR4fWB9XG4gICAgICAgICAgICBrZXk9e3BsYXllci5lbnRpdHl9XG4gICAgICAgICAgICB2YWx1ZT17YDxiPiR7cGxheWVyTmFtZX08L2I+YH1cbiAgICAgICAgICAgIGZvbnRTaXplPXsxNCAqIHNjYWxlRmFjdG9yfVxuICAgICAgICAgICAgdmFyaWFudD17aXNQbGF5ZXJTZWxlY3RlZCA/ICdwcmltYXJ5JyA6ICdzZWNvbmRhcnknfVxuICAgICAgICAgICAgY29sb3I9e2lzUGxheWVyU2VsZWN0ZWQgPyBDb2xvcjQuQmxhY2soKSA6IENvbG9yNC5XaGl0ZSgpfVxuICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgc3RhdGUudmlkZW9Db250cm9sLnNlbGVjdGVkVmlkZW9QbGF5ZXIgPSBpZHhcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBhbGlnblNlbGY6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggKiBzY2FsZUZhY3RvciB9LFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGxhYmVsVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgIHBhZGRpbmc6IDQgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgKVxuICAgICAgfSl9XG4gICAgICB7LyogVE9ETzogTmVlZHMgdG8gYmUgcmVkZWZpbmVkIHRoZSBsaW5rIGFsbCBmZWF0dXJlLiAqL31cbiAgICAgIHsvKiA8QnV0dG9uXG4gICAgICAgIGlkPVwidmlkZW9fY29udHJvbF9saW5rX2FsbFwiXG4gICAgICAgIHZhbHVlPVwiPGI+TGluayBBbGw8L2I+XCJcbiAgICAgICAgZm9udFNpemU9ezE0ICogc2NhbGVGYWN0b3J9XG4gICAgICAgIHZhcmlhbnQ9e1xuICAgICAgICAgIHN0YXRlLnZpZGVvQ29udHJvbC5saW5rQWxsVmlkZW9QbGF5ZXJzID8gJ3ByaW1hcnknIDogJ3NlY29uZGFyeSdcbiAgICAgICAgfVxuICAgICAgICBjb2xvcj17XG4gICAgICAgICAgc3RhdGUudmlkZW9Db250cm9sLmxpbmtBbGxWaWRlb1BsYXllcnNcbiAgICAgICAgICAgID8gQ29sb3I0LkJsYWNrKClcbiAgICAgICAgICAgIDogQ29sb3I0LldoaXRlKClcbiAgICAgICAgfVxuICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgIHN0YXRlLnZpZGVvQ29udHJvbC5saW5rQWxsVmlkZW9QbGF5ZXJzID0gdHJ1ZVxuICAgICAgICAgIHN0YXRlLnZpZGVvQ29udHJvbC5zZWxlY3RlZFZpZGVvUGxheWVyID0gdW5kZWZpbmVkXG4gICAgICAgIH19XG4gICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgbWFyZ2luOiB7IHRvcDogMCwgcmlnaHQ6IDE2ICogc2NhbGVGYWN0b3IsIGJvdHRvbTogMCwgbGVmdDogMCB9LFxuICAgICAgICAgIG1pbldpZHRoOiA2OSAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICB9fVxuICAgICAgLz4gKi99XG4gICAgPC9VaUVudGl0eT5cbiAgKVxufVxuXG5mdW5jdGlvbiB1c2VTZWxlY3RlZFZpZGVvUGxheWVyKGVuZ2luZTogSUVuZ2luZSwgc3RhdGU6IFN0YXRlKSB7XG4gIGNvbnN0IHsgVmlkZW9QbGF5ZXIgfSA9IGdldEV4cGxvcmVyQ29tcG9uZW50cyhlbmdpbmUpXG4gIGNvbnN0IHZpZGVvUGxheWVycyA9IGdldFZpZGVvUGxheWVycyhlbmdpbmUpXG5cbiAgaWYgKHZpZGVvUGxheWVycy5sZW5ndGggPT09IDApIHJldHVybiBudWxsXG5cbiAgLy8gVE9ETzogTmVlZHMgdG8gYmUgcmVkZWZpbmVkIHRoZSBsaW5rIGFsbCBmZWF0dXJlXG4gIC8vIGNvbnN0IHZpZGVvQ29udHJvbCA9IGdldEFkbWluVG9vbGtpdFZpZGVvQ29udHJvbChlbmdpbmUpXG4gIC8vIGNvbnN0IGxpbmtBbGxWaWRlb1BsYXllcnMgPVxuICAvLyAgIHN0YXRlLnZpZGVvQ29udHJvbC5saW5rQWxsVmlkZW9QbGF5ZXJzID8/IHZpZGVvQ29udHJvbD8ubGlua0FsbFZpZGVvUGxheWVyc1xuXG4gIC8vIGlmIChsaW5rQWxsVmlkZW9QbGF5ZXJzKSB7XG4gIC8vICAgcmV0dXJuIFZpZGVvUGxheWVyLmdldE9yTnVsbCh2aWRlb1BsYXllcnNbMF0uZW50aXR5IGFzIEVudGl0eSlcbiAgLy8gfVxuXG4gIHJldHVybiBWaWRlb1BsYXllci5nZXRPck51bGwoXG4gICAgdmlkZW9QbGF5ZXJzW3N0YXRlLnZpZGVvQ29udHJvbC5zZWxlY3RlZFZpZGVvUGxheWVyID8/IDBdLmVudGl0eSBhcyBFbnRpdHksXG4gIClcbn1cblxuZnVuY3Rpb24gVmlkZW9Db250cm9sVm9sdW1lKHtcbiAgZW5naW5lLFxuICBzdGF0ZSxcbn06IHtcbiAgZW5naW5lOiBJRW5naW5lXG4gIHN0YXRlOiBTdGF0ZVxufSkge1xuICBjb25zdCBzY2FsZUZhY3RvciA9IGdldFNjYWxlVUlGYWN0b3IoZW5naW5lKVxuICBjb25zdCBjb250cm9scyA9IGNyZWF0ZVZpZGVvUGxheWVyQ29udHJvbHMoZW5naW5lLCBzdGF0ZSlcbiAgY29uc3Qgc2VsZWN0ZWRWaWRlb1BsYXllciA9IHVzZVNlbGVjdGVkVmlkZW9QbGF5ZXIoZW5naW5lLCBzdGF0ZSlcbiAgY29uc3QgdmlkZW9Db250cm9sID0gZ2V0QWRtaW5Ub29sa2l0VmlkZW9Db250cm9sKGVuZ2luZSlcbiAgY29uc3QgaXNTb3VuZERpc2FibGVkID0gdmlkZW9Db250cm9sPy5kaXNhYmxlVmlkZW9QbGF5ZXJzU291bmRcbiAgY29uc3Qgdm9sdW1lUGVyY2VudGFnZSA9IGAke01hdGgucm91bmQoKHNlbGVjdGVkVmlkZW9QbGF5ZXI/LnZvbHVtZSA/PyBERUZBVUxUX1ZPTFVNRSkgKiAxMDApfSVgXG5cbiAgcmV0dXJuICFpc1NvdW5kRGlzYWJsZWQgPyAoXG4gICAgPFVpRW50aXR5XG4gICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPExhYmVsXG4gICAgICAgIHZhbHVlPXsnVmlkZW8gVm9sdW1lJ31cbiAgICAgICAgZm9udFNpemU9ezE2ICogc2NhbGVGYWN0b3J9XG4gICAgICAgIGNvbG9yPXtDT0xPUlMuV0hJVEV9XG4gICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgbWFyZ2luOiB7IHRvcDogMCwgcmlnaHQ6IDAsIGJvdHRvbTogMTAgKiBzY2FsZUZhY3RvciwgbGVmdDogMCB9LFxuICAgICAgICB9fVxuICAgICAgLz5cblxuICAgICAgPFVpRW50aXR5XG4gICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBpZD1cInZpZGVvX2NvbnRyb2xfdm9sdW1lX21pbnVzXCJcbiAgICAgICAgICB2YWx1ZT1cIk1pbnVzXCJcbiAgICAgICAgICBmb250U2l6ZT17MTQgKiBzY2FsZUZhY3Rvcn1cbiAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgbWFyZ2luOiB7IHRvcDogMCwgcmlnaHQ6IDE2ICogc2NhbGVGYWN0b3IsIGJvdHRvbTogMCwgbGVmdDogMCB9LFxuICAgICAgICAgICAgbWluV2lkdGg6IDY5ICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBpY29uPXtJQ09OUy5WT0xVTUVfTUlOVVNfQlVUVE9OfVxuICAgICAgICAgIG9ubHlJY29uPXt0cnVlfVxuICAgICAgICAgIGljb25UcmFuc2Zvcm09e3tcbiAgICAgICAgICAgIHdpZHRoOiAzNSAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgaGVpZ2h0OiAzNSAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgIH19XG4gICAgICAgICAgb25Nb3VzZURvd249eygpID0+IGNvbnRyb2xzLnNldFZvbHVtZSgtVk9MVU1FX1NURVApfVxuICAgICAgICAgIGRpc2FibGVkPXshc2VsZWN0ZWRWaWRlb1BsYXllcn1cbiAgICAgICAgLz5cbiAgICAgICAgPExhYmVsXG4gICAgICAgICAgdmFsdWU9e3ZvbHVtZVBlcmNlbnRhZ2V9XG4gICAgICAgICAgZm9udFNpemU9ezE4ICogc2NhbGVGYWN0b3J9XG4gICAgICAgICAgY29sb3I9e0NPTE9SUy5HUkFZfVxuICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICBtYXJnaW46IHsgdG9wOiAwLCByaWdodDogMTYgKiBzY2FsZUZhY3RvciwgYm90dG9tOiAwLCBsZWZ0OiAwIH0sXG4gICAgICAgICAgICBtaW5XaWR0aDogNjkgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgaWQ9XCJ2aWRlb19jb250cm9sX3ZvbHVtZV9wbHVzXCJcbiAgICAgICAgICB2YWx1ZT1cIlBsdXNcIlxuICAgICAgICAgIGZvbnRTaXplPXsxNCAqIHNjYWxlRmFjdG9yfVxuICAgICAgICAgIGljb249e0lDT05TLlZPTFVNRV9QTFVTX0JVVFRPTn1cbiAgICAgICAgICBvbmx5SWNvbj17dHJ1ZX1cbiAgICAgICAgICBpY29uVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICB3aWR0aDogMzUgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgIGhlaWdodDogMzUgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICB9fVxuICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICBtYXJnaW46IHsgdG9wOiAwLCByaWdodDogMTYgKiBzY2FsZUZhY3RvciwgYm90dG9tOiAwLCBsZWZ0OiAwIH0sXG4gICAgICAgICAgICBtaW5XaWR0aDogNjkgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICB9fVxuICAgICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiBjb250cm9scy5zZXRWb2x1bWUoVk9MVU1FX1NURVApfVxuICAgICAgICAgIGRpc2FibGVkPXshc2VsZWN0ZWRWaWRlb1BsYXllcn1cbiAgICAgICAgLz5cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIGlkPVwidmlkZW9fY29udHJvbF92b2x1bWVfbXV0ZVwiXG4gICAgICAgICAgdmFsdWU9XCI8Yj5NdXRlPC9iPlwiXG4gICAgICAgICAgZm9udFNpemU9ezE4ICogc2NhbGVGYWN0b3J9XG4gICAgICAgICAgbGFiZWxUcmFuc2Zvcm09e3sgbWFyZ2luOiAnMCAyMCcgfX1cbiAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgbWFyZ2luOiB7IHRvcDogMCwgcmlnaHQ6IDE2ICogc2NhbGVGYWN0b3IsIGJvdHRvbTogMCwgbGVmdDogMCB9LFxuICAgICAgICAgICAgbWluV2lkdGg6IDY5ICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4gY29udHJvbHMuc2V0Vm9sdW1lKDApfVxuICAgICAgICAgIGRpc2FibGVkPXshc2VsZWN0ZWRWaWRlb1BsYXllcn1cbiAgICAgICAgLz5cbiAgICAgIDwvVWlFbnRpdHk+XG4gICAgPC9VaUVudGl0eT5cbiAgKSA6IG51bGxcbn1cblxuLy8gTWFpbiBjb21wb25lbnRcbmV4cG9ydCBmdW5jdGlvbiBWaWRlb0NvbnRyb2woe1xuICBlbmdpbmUsXG4gIHN0YXRlLFxufToge1xuICBlbmdpbmU6IElFbmdpbmVcbiAgc3RhdGU6IFN0YXRlXG59KSB7XG4gIGNvbnN0IGNvbnRyb2xzID0gY3JlYXRlVmlkZW9QbGF5ZXJDb250cm9scyhlbmdpbmUsIHN0YXRlKVxuICBjb25zdCBzZWxlY3RlZFZpZGVvUGxheWVyID0gdXNlU2VsZWN0ZWRWaWRlb1BsYXllcihlbmdpbmUsIHN0YXRlKVxuICBjb25zdCBzY2FsZUZhY3RvciA9IGdldFNjYWxlVUlGYWN0b3IoZW5naW5lKVxuXG4gIHJldHVybiAoXG4gICAgPFVpRW50aXR5XG4gICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICA8VWlFbnRpdHlcbiAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICAgICAgICBtYXJnaW46IHsgYm90dG9tOiAxMCAqIHNjYWxlRmFjdG9yIH0sXG4gICAgICAgICAgaGVpZ2h0OiAzMCAqIHNjYWxlRmFjdG9yLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICB1aVRyYW5zZm9ybT17eyB3aWR0aDogMzAgKiBzY2FsZUZhY3RvciwgaGVpZ2h0OiAzMCAqIHNjYWxlRmFjdG9yIH19XG4gICAgICAgICAgdWlCYWNrZ3JvdW5kPXt7XG4gICAgICAgICAgICB0ZXh0dXJlTW9kZTogJ3N0cmV0Y2gnLFxuICAgICAgICAgICAgdGV4dHVyZToge1xuICAgICAgICAgICAgICBzcmM6IElDT05TLlZJREVPX0NPTlRST0wsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH19XG4gICAgICAgIC8+XG4gICAgICAgIDxMYWJlbFxuICAgICAgICAgIHZhbHVlPVwiPGI+VmlkZW8gQ29udHJvbDwvYj5cIlxuICAgICAgICAgIHVpVHJhbnNmb3JtPXt7IG1hcmdpbjogeyBib3R0b206IDgsIGxlZnQ6IDIwIH0gfX1cbiAgICAgICAgICBmb250U2l6ZT17MjQgKiBzY2FsZUZhY3Rvcn1cbiAgICAgICAgICBjb2xvcj17Q29sb3I0LldoaXRlKCl9XG4gICAgICAgIC8+XG4gICAgICA8L1VpRW50aXR5PlxuXG4gICAgICA8TGFiZWxcbiAgICAgICAgdmFsdWU9XCI8Yj5DdXJyZW50IFNjcmVlbjwvYj5cIlxuICAgICAgICBmb250U2l6ZT17MTYgKiBzY2FsZUZhY3Rvcn1cbiAgICAgICAgY29sb3I9e0NvbG9yNC5XaGl0ZSgpfVxuICAgICAgICB1aVRyYW5zZm9ybT17eyBtYXJnaW46IHsgYm90dG9tOiAxNiAqIHNjYWxlRmFjdG9yIH0gfX1cbiAgICAgIC8+XG5cbiAgICAgIDxWaWRlb1BsYXllclNlbGVjdG9yIGVuZ2luZT17ZW5naW5lfSBzdGF0ZT17c3RhdGV9IC8+XG5cbiAgICAgIDxJbnB1dFxuICAgICAgICBvblN1Ym1pdD17KHZhbHVlKSA9PiB7XG4gICAgICAgICAgc3RhdGUudmlkZW9Db250cm9sLnNoYXJlU2NyZWVuVXJsID0gdmFsdWVcbiAgICAgICAgICBoYW5kbGVTaGFyZVNjcmVlblVybChlbmdpbmUsIHN0YXRlLCB2YWx1ZSlcbiAgICAgICAgfX1cbiAgICAgICAgb25DaGFuZ2U9eygkKSA9PiAoc3RhdGUudmlkZW9Db250cm9sLnNoYXJlU2NyZWVuVXJsID0gJCl9XG4gICAgICAgIGZvbnRTaXplPXsxNiAqIHNjYWxlRmFjdG9yfVxuICAgICAgICBwbGFjZWhvbGRlcj1cIlBhc3RlIHlvdXIgdmlkZW8gVVJMXCJcbiAgICAgICAgcGxhY2Vob2xkZXJDb2xvcj17Q29sb3I0LmNyZWF0ZSgxNjAgLyAyNTUsIDE1NSAvIDI1NSwgMTY4IC8gMjU1LCAxKX1cbiAgICAgICAgY29sb3I9e0NvbG9yNC5CbGFjaygpfVxuICAgICAgICB1aUJhY2tncm91bmQ9e3sgY29sb3I6IENvbG9yNC5XaGl0ZSgpIH19XG4gICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICBoZWlnaHQ6IDgwICogc2NhbGVGYWN0b3IsXG4gICAgICAgIH19XG4gICAgICAvPlxuXG4gICAgICA8VWlFbnRpdHlcbiAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgIGhlaWdodDogNDAgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2ZsZXgtZW5kJyxcbiAgICAgICAgICBtYXJnaW46IHsgdG9wOiAxMCAqIHNjYWxlRmFjdG9yIH0sXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxCdXR0b25cbiAgICAgICAgICBpZD1cInZpZGVvX2NvbnRyb2xfc2hhcmVfc2NyZWVuX2NsZWFyXCJcbiAgICAgICAgICB2YWx1ZT1cIjxiPkNsZWFyIFNjcmVlbjwvYj5cIlxuICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICBmb250U2l6ZT17MTYgKiBzY2FsZUZhY3Rvcn1cbiAgICAgICAgICBjb2xvcj17Q29sb3I0LldoaXRlKCl9XG4gICAgICAgICAgdWlUcmFuc2Zvcm09e3sgbWFyZ2luOiB7IHJpZ2h0OiA4ICogc2NhbGVGYWN0b3IgfSB9fVxuICAgICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiB7XG4gICAgICAgICAgICBzdGF0ZS52aWRlb0NvbnRyb2wuc2hhcmVTY3JlZW5VcmwgPSB1bmRlZmluZWRcbiAgICAgICAgICB9fVxuICAgICAgICAvPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgaWQ9XCJ2aWRlb19jb250cm9sX3NoYXJlX3NjcmVlbl9zaGFyZVwiXG4gICAgICAgICAgdmFsdWU9XCI8Yj5TaGFyZTwvYj5cIlxuICAgICAgICAgIGxhYmVsVHJhbnNmb3JtPXt7IG1hcmdpbjogJzAgMjAnIH19XG4gICAgICAgICAgZm9udFNpemU9ezE2ICogc2NhbGVGYWN0b3J9XG4gICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgIGhhbmRsZVNoYXJlU2NyZWVuVXJsKFxuICAgICAgICAgICAgICBlbmdpbmUsXG4gICAgICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgICAgICBzdGF0ZS52aWRlb0NvbnRyb2wuc2hhcmVTY3JlZW5VcmwsXG4gICAgICAgICAgICApXG4gICAgICAgICAgfX1cbiAgICAgICAgICBkaXNhYmxlZD17IXNlbGVjdGVkVmlkZW9QbGF5ZXJ9XG4gICAgICAgIC8+XG4gICAgICA8L1VpRW50aXR5PlxuXG4gICAgICA8TGFiZWxcbiAgICAgICAgdmFsdWU9XCJWaWRlbyBQbGF5YmFja1wiXG4gICAgICAgIGZvbnRTaXplPXsxNiAqIHNjYWxlRmFjdG9yfVxuICAgICAgICBjb2xvcj17Q29sb3I0LldoaXRlKCl9XG4gICAgICAgIHVpVHJhbnNmb3JtPXt7IG1hcmdpbjogeyBib3R0b206IDEwICogc2NhbGVGYWN0b3IgfSB9fVxuICAgICAgLz5cblxuICAgICAgPFVpRW50aXR5XG4gICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICBtYXJnaW46IHsgYm90dG9tOiAxMCAqIHNjYWxlRmFjdG9yIH0sXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHsvKiA8QnV0dG9uXG4gICAgICAgICAgaWQ9XCJ2aWRlb19jb250cm9sX3ByZXZpb3VzXCJcbiAgICAgICAgICB2YWx1ZT1cIlByZXZpb3VzXCJcbiAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgbWFyZ2luOiB7IHRvcDogMCwgcmlnaHQ6IDE2ICogc2NhbGVGYWN0b3IsIGJvdHRvbTogMCwgbGVmdDogMCB9LFxuICAgICAgICAgICAgbWluV2lkdGg6IDY5ICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBpY29uPXtJQ09OUy5QUkVWSU9VU19CVVRUT059XG4gICAgICAgICAgb25seUljb249e3RydWV9XG4gICAgICAgICAgaWNvblRyYW5zZm9ybT17e1xuICAgICAgICAgICAgd2lkdGg6IDM1ICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICBoZWlnaHQ6IDM1ICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgY29udHJvbHMucHJldmlvdXMoKVxuICAgICAgICAgIH19XG4gICAgICAgICAgZGlzYWJsZWQ9e3RydWV9XG4gICAgICAgIC8+ICovfVxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgaWQ9XCJ2aWRlb19jb250cm9sX3BsYXlcIlxuICAgICAgICAgIHZhbHVlPVwiPGI+UGxheTwvYj5cIlxuICAgICAgICAgIGZvbnRTaXplPXsxOCAqIHNjYWxlRmFjdG9yfVxuICAgICAgICAgIGxhYmVsVHJhbnNmb3JtPXt7IG1hcmdpbjogeyByaWdodDogMjAgfSB9fVxuICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICBtYXJnaW46IHsgdG9wOiAwLCByaWdodDogMTYgKiBzY2FsZUZhY3RvciwgYm90dG9tOiAwLCBsZWZ0OiAwIH0sXG4gICAgICAgICAgICBtaW5XaWR0aDogNjkgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICB9fVxuICAgICAgICAgIGljb249e0lDT05TLlBMQVlfQlVUVE9OfVxuICAgICAgICAgIGljb25UcmFuc2Zvcm09e3tcbiAgICAgICAgICAgIHdpZHRoOiAzNSAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgaGVpZ2h0OiAzNSAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgIH19XG4gICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgIGNvbnRyb2xzLnBsYXkoKVxuICAgICAgICAgIH19XG4gICAgICAgICAgZGlzYWJsZWQ9eyFzZWxlY3RlZFZpZGVvUGxheWVyfVxuICAgICAgICAvPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgaWQ9XCJ2aWRlb19jb250cm9sX3BhdXNlXCJcbiAgICAgICAgICB2YWx1ZT1cIjxiPlBhdXNlPC9iPlwiXG4gICAgICAgICAgZm9udFNpemU9ezE4ICogc2NhbGVGYWN0b3J9XG4gICAgICAgICAgbGFiZWxUcmFuc2Zvcm09e3sgbWFyZ2luOiAnMCAyMCcgfX1cbiAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgbWFyZ2luOiB7IHRvcDogMCwgcmlnaHQ6IDE2ICogc2NhbGVGYWN0b3IsIGJvdHRvbTogMCwgbGVmdDogMCB9LFxuICAgICAgICAgICAgbWluV2lkdGg6IDY5ICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgY29udHJvbHMucGF1c2UoKVxuICAgICAgICAgIH19XG4gICAgICAgICAgZGlzYWJsZWQ9eyFzZWxlY3RlZFZpZGVvUGxheWVyfVxuICAgICAgICAvPlxuICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgaWQ9XCJ2aWRlb19jb250cm9sX3Jlc3RhcnRcIlxuICAgICAgICAgIHZhbHVlPVwiPGI+UmVzdGFydDwvYj5cIlxuICAgICAgICAgIGxhYmVsVHJhbnNmb3JtPXt7IG1hcmdpbjogJzAgMjAnIH19XG4gICAgICAgICAgZm9udFNpemU9ezE4ICogc2NhbGVGYWN0b3J9XG4gICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgIG1hcmdpbjogeyB0b3A6IDAsIHJpZ2h0OiAxNiAqIHNjYWxlRmFjdG9yLCBib3R0b206IDAsIGxlZnQ6IDAgfSxcbiAgICAgICAgICAgIG1pbldpZHRoOiA2OSAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgIH19XG4gICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgIGNvbnRyb2xzLnJlc3RhcnQoKVxuICAgICAgICAgIH19XG4gICAgICAgICAgZGlzYWJsZWQ9eyFzZWxlY3RlZFZpZGVvUGxheWVyfVxuICAgICAgICAvPlxuICAgICAgICB7LyogPEJ1dHRvblxuICAgICAgICAgIGlkPVwidmlkZW9fY29udHJvbF9uZXh0XCJcbiAgICAgICAgICB2YWx1ZT1cIk5leHRcIlxuICAgICAgICAgIGZvbnRTaXplPXsxOCAqIHNjYWxlRmFjdG9yfVxuICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICBtYXJnaW46IHsgdG9wOiAwLCByaWdodDogMCwgYm90dG9tOiAwLCBsZWZ0OiAwIH0sXG4gICAgICAgICAgICBtaW5XaWR0aDogNjkgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICB9fVxuICAgICAgICAgIGljb249e0lDT05TLkZPUldBUkRfQlVUVE9OfVxuICAgICAgICAgIG9ubHlJY29uPXt0cnVlfVxuICAgICAgICAgIGljb25UcmFuc2Zvcm09e3tcbiAgICAgICAgICAgIHdpZHRoOiAzNSAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgaGVpZ2h0OiAzNSAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgIH19XG4gICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgIGNvbnRyb2xzLm5leHQoKVxuICAgICAgICAgIH19XG4gICAgICAgICAgZGlzYWJsZWQ9e3RydWV9XG4gICAgICAgIC8+ICovfVxuICAgICAgPC9VaUVudGl0eT5cblxuICAgICAgPFZpZGVvQ29udHJvbFZvbHVtZSBlbmdpbmU9e2VuZ2luZX0gc3RhdGU9e3N0YXRlfSAvPlxuICAgIDwvVWlFbnRpdHk+XG4gIClcbn1cblxuZnVuY3Rpb24gaGFuZGxlU2hhcmVTY3JlZW5VcmwoZW5naW5lOiBJRW5naW5lLCBzdGF0ZTogU3RhdGUsIHVybD86IHN0cmluZykge1xuICBpZiAoIXVybCkgcmV0dXJuXG5cbiAgY29uc3QgY29udHJvbHMgPSBjcmVhdGVWaWRlb1BsYXllckNvbnRyb2xzKGVuZ2luZSwgc3RhdGUpXG4gIGNvbnRyb2xzLnNldFNvdXJjZSh1cmwpXG4gIG5leHRUaWNrRnVuY3Rpb25zLnB1c2goKCkgPT4ge1xuICAgIGNvbnRyb2xzLnBsYXkoKVxuICB9KVxufVxuIl19
|