@dcl/asset-packs 2.3.1 → 2.4.0
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 +3722 -1596
- 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 +3722 -1596
- 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/package.json +6 -6
- package/dist/admin-toolkit-ui/VideoControl.js +0 -297
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Color4 } from '@dcl/sdk/math';
|
|
2
2
|
import ReactEcs, { Label, Button as DCLButton, UiEntity, } from '@dcl/react-ecs';
|
|
3
|
-
import {
|
|
3
|
+
import { getComponents, } from '../definitions';
|
|
4
4
|
import { getScaleUIFactor } from '../ui';
|
|
5
5
|
import { VideoControl } from './VideoControl';
|
|
6
6
|
import { TextAnnouncementsControl } from './TextAnnouncementsControl';
|
|
@@ -8,18 +8,19 @@ import { SmartItemsControl } from './SmartItemsControl';
|
|
|
8
8
|
import { Button } from './Button';
|
|
9
9
|
import { TextAnnouncements } from './TextAnnouncements';
|
|
10
10
|
import { CONTENT_URL } from './constants';
|
|
11
|
-
import { getSceneDeployment, getSceneOwners } from './utils';
|
|
12
11
|
import { TabType } from './types';
|
|
13
|
-
import {
|
|
12
|
+
import { BTN_MODERATION_CONTROL, ModerationControl, moderationControlState } from './ModerationControl';
|
|
13
|
+
import { getSceneAdmins } from './ModerationControl/api';
|
|
14
|
+
import { ModalAdminList } from './ModerationControl/AdminList';
|
|
15
|
+
import { isPreview } from './fetch-utils';
|
|
14
16
|
export const nextTickFunctions = [];
|
|
15
|
-
let
|
|
17
|
+
export let scaleFactor;
|
|
18
|
+
export let state = {
|
|
16
19
|
adminToolkitUiEntity: 0,
|
|
17
20
|
panelOpen: false,
|
|
18
21
|
activeTab: TabType.NONE,
|
|
19
22
|
videoControl: {
|
|
20
|
-
shareScreenUrl: undefined,
|
|
21
23
|
selectedVideoPlayer: undefined,
|
|
22
|
-
linkAllVideoPlayers: undefined,
|
|
23
24
|
},
|
|
24
25
|
smartItemsControl: {
|
|
25
26
|
selectedSmartItem: undefined,
|
|
@@ -36,17 +37,13 @@ let state = {
|
|
|
36
37
|
selectedRewardItem: undefined,
|
|
37
38
|
},
|
|
38
39
|
};
|
|
39
|
-
let
|
|
40
|
-
let sceneOwnersCache = null;
|
|
40
|
+
let sceneAdminsCache = [];
|
|
41
41
|
const BTN_VIDEO_CONTROL = `${CONTENT_URL}/admin_toolkit/assets/icons/admin-panel-video-control-button.png`;
|
|
42
|
-
const BTN_VIDEO_CONTROL_ACTIVE = `${CONTENT_URL}/admin_toolkit/assets/icons/admin-panel-video-control-active-button.png`;
|
|
43
42
|
const BTN_SMART_ITEM_CONTROL = `${CONTENT_URL}/admin_toolkit/assets/icons/admin-panel-smart-item-control-button.png`;
|
|
44
|
-
const BTN_SMART_ITEM_CONTROL_ACTIVE = `${CONTENT_URL}/admin_toolkit/assets/icons/admin-panel-smart-item-control-active-button.png`;
|
|
45
43
|
const BTN_TEXT_ANNOUNCEMENT_CONTROL = `${CONTENT_URL}/admin_toolkit/assets/icons/admin-panel-text-announcement-control-button.png`;
|
|
46
|
-
const BTN_TEXT_ANNOUNCEMENT_CONTROL_ACTIVE = `${CONTENT_URL}/admin_toolkit/assets/icons/admin-panel-text-announcement-control-active-button.png`;
|
|
47
44
|
const BTN_ADMIN_TOOLKIT_CONTROL = `${CONTENT_URL}/admin_toolkit/assets/icons/admin-panel-control-button.png`;
|
|
48
45
|
const BTN_ADMIN_TOOLKIT_BACKGROUND = `${CONTENT_URL}/admin_toolkit/assets/backgrounds/admin-tool-background.png`;
|
|
49
|
-
const containerBackgroundColor = Color4.create(0, 0, 0, 0.75);
|
|
46
|
+
export const containerBackgroundColor = Color4.create(0, 0, 0, 0.75);
|
|
50
47
|
const ADMIN_TOOLS_ENTITY = 8000;
|
|
51
48
|
function getAdminToolkitEntity(engine) {
|
|
52
49
|
const { AdminTools } = getComponents(engine);
|
|
@@ -56,108 +53,30 @@ function getAdminToolkitComponent(engine) {
|
|
|
56
53
|
const { AdminTools } = getComponents(engine);
|
|
57
54
|
return Array.from(engine.getEntitiesWith(AdminTools))[0][1];
|
|
58
55
|
}
|
|
59
|
-
async function
|
|
60
|
-
|
|
56
|
+
export async function fetchSceneAdmins() {
|
|
57
|
+
const [error, response] = await getSceneAdmins();
|
|
58
|
+
if (error) {
|
|
59
|
+
console.log(JSON.stringify({ error }));
|
|
60
|
+
sceneAdminsCache = [];
|
|
61
61
|
return;
|
|
62
|
-
const deployment = await getSceneDeployment();
|
|
63
|
-
if (deployment) {
|
|
64
|
-
deploymentCache = {
|
|
65
|
-
data: deployment,
|
|
66
|
-
deployedBy: deployment.deployedBy.toLowerCase(),
|
|
67
|
-
sceneBasePosition: deployment.metadata.scene.base.split(','),
|
|
68
|
-
};
|
|
69
62
|
}
|
|
63
|
+
sceneAdminsCache = (response ?? [])
|
|
64
|
+
.map(($) => ({
|
|
65
|
+
name: $.name,
|
|
66
|
+
address: $.admin,
|
|
67
|
+
role: 'admin',
|
|
68
|
+
verified: !$.name.includes('#'),
|
|
69
|
+
canBeRemoved: !!$.canBeRemoved
|
|
70
|
+
}))
|
|
71
|
+
.sort((a) => a.canBeRemoved ? 1 : -1);
|
|
70
72
|
}
|
|
71
|
-
|
|
72
|
-
if (sceneOwnersCache !== null)
|
|
73
|
-
return;
|
|
74
|
-
const owners = await getSceneOwners();
|
|
75
|
-
if (owners.length > 0) {
|
|
76
|
-
sceneOwnersCache = owners;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
function getVideoPlayers(engine) {
|
|
73
|
+
export function getSmartItems(engine) {
|
|
80
74
|
const adminToolkitComponent = getAdminToolkitComponent(engine);
|
|
81
|
-
|
|
82
|
-
!adminToolkitComponent.videoControl ||
|
|
83
|
-
!adminToolkitComponent.videoControl.videoPlayers ||
|
|
84
|
-
adminToolkitComponent.videoControl.videoPlayers.length === 0)
|
|
85
|
-
return [];
|
|
86
|
-
return Array.from(adminToolkitComponent.videoControl.videoPlayers);
|
|
87
|
-
}
|
|
88
|
-
function getSmartItems(engine) {
|
|
89
|
-
const adminToolkitComponent = getAdminToolkitComponent(engine);
|
|
90
|
-
if (!adminToolkitComponent ||
|
|
91
|
-
!adminToolkitComponent.smartItemsControl ||
|
|
92
|
-
!adminToolkitComponent.smartItemsControl.smartItems ||
|
|
93
|
-
adminToolkitComponent.smartItemsControl.smartItems.length === 0)
|
|
94
|
-
return [];
|
|
95
|
-
return Array.from(adminToolkitComponent.smartItemsControl.smartItems);
|
|
75
|
+
return Array.from(adminToolkitComponent.smartItemsControl.smartItems ?? []);
|
|
96
76
|
}
|
|
97
77
|
function getRewards(engine) {
|
|
98
78
|
const adminToolkitComponent = getAdminToolkitComponent(engine);
|
|
99
|
-
|
|
100
|
-
!adminToolkitComponent.rewardsControl ||
|
|
101
|
-
!adminToolkitComponent.rewardsControl.rewardItems ||
|
|
102
|
-
adminToolkitComponent.rewardsControl.rewardItems.length === 0)
|
|
103
|
-
return [];
|
|
104
|
-
return Array.from(adminToolkitComponent.rewardsControl.rewardItems);
|
|
105
|
-
}
|
|
106
|
-
function syncVideoPlayersState(engine) {
|
|
107
|
-
const { VideoControlState } = getComponents(engine);
|
|
108
|
-
const { VideoPlayer } = getExplorerComponents(engine);
|
|
109
|
-
const videoControlState = VideoControlState.getOrNull(state.adminToolkitUiEntity);
|
|
110
|
-
if (!videoControlState?.videoPlayers)
|
|
111
|
-
return;
|
|
112
|
-
videoControlState.videoPlayers.forEach((controlPlayer) => {
|
|
113
|
-
const videoPlayer = VideoPlayer.getMutableOrNull(controlPlayer.entity);
|
|
114
|
-
if (!videoPlayer)
|
|
115
|
-
return;
|
|
116
|
-
if (controlPlayer.src !== undefined &&
|
|
117
|
-
videoPlayer.src !== controlPlayer.src) {
|
|
118
|
-
videoPlayer.src = controlPlayer.src;
|
|
119
|
-
}
|
|
120
|
-
if (videoPlayer.playing !== controlPlayer.playing) {
|
|
121
|
-
videoPlayer.playing = !!controlPlayer.playing;
|
|
122
|
-
}
|
|
123
|
-
if (videoPlayer.volume !== controlPlayer.volume) {
|
|
124
|
-
videoPlayer.volume = controlPlayer.volume ?? 0;
|
|
125
|
-
}
|
|
126
|
-
if (controlPlayer.position === -1 && videoPlayer.position === undefined) {
|
|
127
|
-
videoPlayer.position = -1;
|
|
128
|
-
}
|
|
129
|
-
if (videoPlayer.position === -1 && controlPlayer.position === undefined) {
|
|
130
|
-
videoPlayer.position = undefined;
|
|
131
|
-
}
|
|
132
|
-
if (videoPlayer.loop !== controlPlayer.loop) {
|
|
133
|
-
videoPlayer.loop = !!controlPlayer.loop;
|
|
134
|
-
}
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
function initVideoControlSync(engine) {
|
|
138
|
-
const { VideoControlState } = getComponents(engine);
|
|
139
|
-
const { VideoPlayer } = getExplorerComponents(engine);
|
|
140
|
-
const videoPlayers = getVideoPlayers(engine);
|
|
141
|
-
let syncVideoPlayers = [];
|
|
142
|
-
videoPlayers.forEach((player) => {
|
|
143
|
-
const vp = VideoPlayer.getOrNull(player.entity);
|
|
144
|
-
if (vp) {
|
|
145
|
-
syncVideoPlayers.push({
|
|
146
|
-
entity: player.entity,
|
|
147
|
-
src: vp.src,
|
|
148
|
-
playing: vp.playing,
|
|
149
|
-
volume: vp.volume,
|
|
150
|
-
position: vp.position,
|
|
151
|
-
loop: vp.loop,
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
VideoControlState.createOrReplace(state.adminToolkitUiEntity, {
|
|
156
|
-
videoPlayers: syncVideoPlayers,
|
|
157
|
-
});
|
|
158
|
-
engine.addSystem(() => {
|
|
159
|
-
syncVideoPlayersState(engine);
|
|
160
|
-
});
|
|
79
|
+
return Array.from(adminToolkitComponent?.rewardsControl?.rewardItems ?? []);
|
|
161
80
|
}
|
|
162
81
|
function initTextAnnouncementSync(engine) {
|
|
163
82
|
const { TextAnnouncements } = getComponents(engine);
|
|
@@ -172,11 +91,12 @@ export async function initializeAdminData(engine, sdkHelpers) {
|
|
|
172
91
|
console.log('initializeAdminData');
|
|
173
92
|
if (!adminDataInitialized) {
|
|
174
93
|
console.log('initializeAdminData - not initialized');
|
|
175
|
-
const {
|
|
176
|
-
|
|
177
|
-
state.adminToolkitUiEntity = engine.addEntity();
|
|
178
|
-
initVideoControlSync(engine);
|
|
94
|
+
const { TextAnnouncements, VideoControlState } = getComponents(engine);
|
|
95
|
+
state.adminToolkitUiEntity = getAdminToolkitEntity(engine) ?? engine.addEntity();
|
|
179
96
|
initTextAnnouncementSync(engine);
|
|
97
|
+
if (!VideoControlState.getOrNull(state.adminToolkitUiEntity)) {
|
|
98
|
+
VideoControlState.create(state.adminToolkitUiEntity);
|
|
99
|
+
}
|
|
180
100
|
sdkHelpers?.syncEntity?.(state.adminToolkitUiEntity, [VideoControlState.componentId, TextAnnouncements.componentId], ADMIN_TOOLS_ENTITY);
|
|
181
101
|
engine.addSystem(() => {
|
|
182
102
|
if (nextTickFunctions.length > 0) {
|
|
@@ -186,6 +106,9 @@ export async function initializeAdminData(engine, sdkHelpers) {
|
|
|
186
106
|
}
|
|
187
107
|
}
|
|
188
108
|
}, Number.POSITIVE_INFINITY);
|
|
109
|
+
await Promise.all([
|
|
110
|
+
fetchSceneAdmins(),
|
|
111
|
+
]);
|
|
189
112
|
adminDataInitialized = true;
|
|
190
113
|
console.log('initializeAdminData - initialized');
|
|
191
114
|
}
|
|
@@ -196,188 +119,193 @@ export function createAdminToolkitUI(engine, pointerEventsSystem, reactBasedUiSy
|
|
|
196
119
|
reactBasedUiSystem.setUiRenderer(() => uiComponent(engine, pointerEventsSystem, sdkHelpers, playersHelper));
|
|
197
120
|
});
|
|
198
121
|
}
|
|
199
|
-
function isSceneDeployer(playerAddress) {
|
|
200
|
-
return deploymentCache?.deployedBy === playerAddress.toLowerCase();
|
|
201
|
-
}
|
|
202
|
-
function isSceneOwner(playerAddress) {
|
|
203
|
-
return (sceneOwnersCache || []).includes(playerAddress.toLowerCase());
|
|
204
|
-
}
|
|
205
122
|
function isAllowedAdmin(_engine, adminToolkitEntitie, player) {
|
|
206
|
-
const { adminPermissions, authorizedAdminUsers } = adminToolkitEntitie;
|
|
207
|
-
if (adminPermissions === AdminPermissions.PUBLIC) {
|
|
208
|
-
return true;
|
|
209
|
-
}
|
|
210
123
|
if (!player)
|
|
211
124
|
return false;
|
|
212
125
|
const playerAddress = player.userId.toLowerCase();
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
}
|
|
216
|
-
if (authorizedAdminUsers.sceneOwners && isSceneOwner(playerAddress)) {
|
|
217
|
-
return true;
|
|
218
|
-
}
|
|
219
|
-
if (authorizedAdminUsers.allowList &&
|
|
220
|
-
authorizedAdminUsers.adminAllowList.some((wallet) => wallet.toLowerCase() === playerAddress)) {
|
|
221
|
-
return true;
|
|
222
|
-
}
|
|
223
|
-
return false;
|
|
126
|
+
const isAdmin = sceneAdminsCache.find($ => $.address === playerAddress);
|
|
127
|
+
return isAdmin || isPreview();
|
|
224
128
|
}
|
|
225
129
|
const uiComponent = (engine, pointerEventsSystem, sdkHelpers, playersHelper) => {
|
|
226
|
-
const
|
|
130
|
+
const adminToolkitEntity = getAdminToolkitComponent(engine);
|
|
227
131
|
const player = playersHelper?.getPlayer();
|
|
228
|
-
const isPlayerAdmin = isAllowedAdmin(engine,
|
|
229
|
-
|
|
230
|
-
return
|
|
231
|
-
|
|
232
|
-
height: '100%',
|
|
233
|
-
width: '100%',
|
|
234
|
-
} },
|
|
235
|
-
isPlayerAdmin ? (ReactEcs.createElement(UiEntity, { uiTransform: {
|
|
132
|
+
const isPlayerAdmin = isAllowedAdmin(engine, adminToolkitEntity, player);
|
|
133
|
+
scaleFactor = getScaleUIFactor(engine);
|
|
134
|
+
return [
|
|
135
|
+
ReactEcs.createElement(UiEntity, { uiTransform: {
|
|
236
136
|
positionType: 'absolute',
|
|
237
|
-
|
|
238
|
-
|
|
137
|
+
height: '100%',
|
|
138
|
+
width: '100%',
|
|
239
139
|
} },
|
|
240
|
-
ReactEcs.createElement(UiEntity, { uiTransform: {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
flexDirection: 'column',
|
|
245
|
-
margin: { right: 8 * scaleFactor },
|
|
140
|
+
isPlayerAdmin ? (ReactEcs.createElement(UiEntity, { uiTransform: {
|
|
141
|
+
positionType: 'absolute',
|
|
142
|
+
flexDirection: 'row',
|
|
143
|
+
position: { top: 80 * scaleFactor, right: 10 * scaleFactor },
|
|
246
144
|
} },
|
|
247
145
|
ReactEcs.createElement(UiEntity, { uiTransform: {
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
},
|
|
256
|
-
}, uiBackground: { color: containerBackgroundColor } },
|
|
257
|
-
ReactEcs.createElement(Label, { value: "Admin Tools", fontSize: 20 * scaleFactor, color: Color4.create(160, 155, 168, 1), uiTransform: { flexGrow: 1 } }),
|
|
258
|
-
ReactEcs.createElement(Button, { id: "admin_toolkit_panel_video_control", variant: "text", icon: state.activeTab === TabType.VIDEO_CONTROL
|
|
259
|
-
? BTN_VIDEO_CONTROL_ACTIVE
|
|
260
|
-
: BTN_VIDEO_CONTROL, onlyIcon: true, uiTransform: {
|
|
261
|
-
display: adminToolkitEntitie.videoControl.isEnabled
|
|
262
|
-
? 'flex'
|
|
263
|
-
: 'none',
|
|
264
|
-
width: 49 * scaleFactor,
|
|
265
|
-
height: 42 * scaleFactor,
|
|
266
|
-
margin: { right: 8 * scaleFactor },
|
|
267
|
-
alignItems: 'center',
|
|
268
|
-
justifyContent: 'center',
|
|
269
|
-
}, iconTransform: {
|
|
270
|
-
height: '100%',
|
|
271
|
-
width: '100%',
|
|
272
|
-
}, onMouseDown: () => {
|
|
273
|
-
if (state.activeTab !== TabType.VIDEO_CONTROL) {
|
|
274
|
-
state.activeTab = TabType.NONE;
|
|
275
|
-
nextTickFunctions.push(() => {
|
|
276
|
-
state.activeTab = TabType.VIDEO_CONTROL;
|
|
277
|
-
});
|
|
278
|
-
}
|
|
279
|
-
else {
|
|
280
|
-
state.activeTab = TabType.NONE;
|
|
281
|
-
}
|
|
282
|
-
} }),
|
|
283
|
-
ReactEcs.createElement(Button, { id: "admin_toolkit_panel_smart_items_control", variant: "text", icon: state.activeTab === TabType.SMART_ITEMS_CONTROL
|
|
284
|
-
? BTN_SMART_ITEM_CONTROL_ACTIVE
|
|
285
|
-
: BTN_SMART_ITEM_CONTROL, onlyIcon: true, uiTransform: {
|
|
286
|
-
display: adminToolkitEntitie.smartItemsControl.isEnabled
|
|
287
|
-
? 'flex'
|
|
288
|
-
: 'none',
|
|
289
|
-
width: 49 * scaleFactor,
|
|
290
|
-
height: 42 * scaleFactor,
|
|
291
|
-
margin: { right: 8 * scaleFactor },
|
|
292
|
-
alignItems: 'center',
|
|
293
|
-
justifyContent: 'center',
|
|
294
|
-
}, iconTransform: {
|
|
295
|
-
height: '100%',
|
|
146
|
+
display: state.panelOpen ? 'flex' : 'none',
|
|
147
|
+
width: 500 * scaleFactor,
|
|
148
|
+
pointerFilter: 'block',
|
|
149
|
+
flexDirection: 'column',
|
|
150
|
+
margin: { right: 8 * scaleFactor },
|
|
151
|
+
} },
|
|
152
|
+
ReactEcs.createElement(UiEntity, { uiTransform: {
|
|
296
153
|
width: '100%',
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
state.activeTab = TabType.NONE;
|
|
300
|
-
nextTickFunctions.push(() => {
|
|
301
|
-
state.activeTab = TabType.SMART_ITEMS_CONTROL;
|
|
302
|
-
});
|
|
303
|
-
}
|
|
304
|
-
else {
|
|
305
|
-
state.activeTab = TabType.NONE;
|
|
306
|
-
}
|
|
307
|
-
} }),
|
|
308
|
-
ReactEcs.createElement(Button, { id: "admin_toolkit_panel_text_announcement_control", variant: "text", icon: state.activeTab === TabType.TEXT_ANNOUNCEMENT_CONTROL
|
|
309
|
-
? BTN_TEXT_ANNOUNCEMENT_CONTROL_ACTIVE
|
|
310
|
-
: BTN_TEXT_ANNOUNCEMENT_CONTROL, onlyIcon: true, uiTransform: {
|
|
311
|
-
display: adminToolkitEntitie.textAnnouncementControl.isEnabled
|
|
312
|
-
? 'flex'
|
|
313
|
-
: 'none',
|
|
314
|
-
width: 49 * scaleFactor,
|
|
315
|
-
height: 42 * scaleFactor,
|
|
316
|
-
margin: { right: 8 * scaleFactor },
|
|
154
|
+
height: 50 * scaleFactor,
|
|
155
|
+
flexDirection: 'row',
|
|
317
156
|
alignItems: 'center',
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
157
|
+
borderRadius: 12 * scaleFactor,
|
|
158
|
+
padding: {
|
|
159
|
+
left: 12 * scaleFactor,
|
|
160
|
+
right: 12 * scaleFactor,
|
|
161
|
+
},
|
|
162
|
+
}, uiBackground: { color: containerBackgroundColor } },
|
|
163
|
+
ReactEcs.createElement(Label, { value: "ADMIN TOOLS", fontSize: 20 * scaleFactor, color: Color4.create(160, 155, 168, 1), uiTransform: { flexGrow: 1 } }),
|
|
164
|
+
ReactEcs.createElement(Button, { id: "admin_toolkit_moderation_control", variant: state.activeTab === TabType.MODERATION_CONTROL
|
|
165
|
+
? 'primary'
|
|
166
|
+
: 'text', icon: BTN_MODERATION_CONTROL, onlyIcon: true, uiTransform: {
|
|
167
|
+
display: adminToolkitEntity.moderationControl.isEnabled && !isPreview()
|
|
168
|
+
? 'flex'
|
|
169
|
+
: 'none',
|
|
170
|
+
width: 49 * scaleFactor,
|
|
171
|
+
height: 42 * scaleFactor,
|
|
172
|
+
margin: { right: 8 * scaleFactor },
|
|
173
|
+
alignItems: 'center',
|
|
174
|
+
justifyContent: 'center',
|
|
175
|
+
}, iconBackground: {
|
|
176
|
+
color: state.activeTab === TabType.MODERATION_CONTROL
|
|
177
|
+
? Color4.Black()
|
|
178
|
+
: Color4.White(),
|
|
179
|
+
}, iconTransform: { height: '100%', width: '100%' }, onMouseDown: () => {
|
|
180
|
+
if (state.activeTab !== TabType.MODERATION_CONTROL) {
|
|
181
|
+
state.activeTab = TabType.NONE;
|
|
182
|
+
nextTickFunctions.push(() => {
|
|
183
|
+
state.activeTab = TabType.MODERATION_CONTROL;
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
state.activeTab = TabType.NONE;
|
|
188
|
+
}
|
|
189
|
+
} }),
|
|
190
|
+
ReactEcs.createElement(Button, { id: "admin_toolkit_panel_video_control", variant: state.activeTab === TabType.VIDEO_CONTROL ? 'primary' : 'text', icon: BTN_VIDEO_CONTROL, iconBackground: {
|
|
191
|
+
color: state.activeTab === TabType.VIDEO_CONTROL
|
|
192
|
+
? Color4.Black()
|
|
193
|
+
: Color4.White(),
|
|
194
|
+
}, onlyIcon: true, uiTransform: {
|
|
195
|
+
display: adminToolkitEntity.videoControl.isEnabled
|
|
196
|
+
? 'flex'
|
|
197
|
+
: 'none',
|
|
198
|
+
width: 49 * scaleFactor,
|
|
199
|
+
height: 42 * scaleFactor,
|
|
200
|
+
margin: { right: 8 * scaleFactor },
|
|
201
|
+
alignItems: 'center',
|
|
202
|
+
justifyContent: 'center',
|
|
203
|
+
}, iconTransform: {
|
|
204
|
+
height: '100%',
|
|
205
|
+
width: '100%',
|
|
206
|
+
}, onMouseDown: () => {
|
|
207
|
+
if (state.activeTab !== TabType.VIDEO_CONTROL) {
|
|
208
|
+
state.activeTab = TabType.NONE;
|
|
209
|
+
nextTickFunctions.push(() => {
|
|
210
|
+
state.activeTab = TabType.VIDEO_CONTROL;
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
state.activeTab = TabType.NONE;
|
|
215
|
+
}
|
|
216
|
+
} }),
|
|
217
|
+
ReactEcs.createElement(Button, { id: "admin_toolkit_panel_smart_items_control", variant: state.activeTab === TabType.SMART_ITEMS_CONTROL
|
|
218
|
+
? 'primary'
|
|
219
|
+
: 'text', icon: BTN_SMART_ITEM_CONTROL, iconBackground: {
|
|
220
|
+
color: state.activeTab === TabType.SMART_ITEMS_CONTROL
|
|
221
|
+
? Color4.Black()
|
|
222
|
+
: Color4.White(),
|
|
223
|
+
}, onlyIcon: true, uiTransform: {
|
|
224
|
+
display: adminToolkitEntity.smartItemsControl.isEnabled
|
|
225
|
+
? 'flex'
|
|
226
|
+
: 'none',
|
|
227
|
+
width: 49 * scaleFactor,
|
|
228
|
+
height: 42 * scaleFactor,
|
|
229
|
+
margin: { right: 8 * scaleFactor },
|
|
230
|
+
alignItems: 'center',
|
|
231
|
+
justifyContent: 'center',
|
|
232
|
+
}, iconTransform: {
|
|
233
|
+
height: '100%',
|
|
234
|
+
width: '100%',
|
|
235
|
+
}, onMouseDown: () => {
|
|
236
|
+
if (state.activeTab !== TabType.SMART_ITEMS_CONTROL) {
|
|
237
|
+
state.activeTab = TabType.NONE;
|
|
238
|
+
nextTickFunctions.push(() => {
|
|
239
|
+
state.activeTab = TabType.SMART_ITEMS_CONTROL;
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
state.activeTab = TabType.NONE;
|
|
244
|
+
}
|
|
245
|
+
} }),
|
|
246
|
+
ReactEcs.createElement(Button, { id: "admin_toolkit_panel_text_announcement_control", variant: state.activeTab === TabType.TEXT_ANNOUNCEMENT_CONTROL ? 'primary' : 'text', icon: BTN_TEXT_ANNOUNCEMENT_CONTROL, iconBackground: {
|
|
247
|
+
color: state.activeTab === TabType.TEXT_ANNOUNCEMENT_CONTROL
|
|
248
|
+
? Color4.Black()
|
|
249
|
+
: Color4.White(),
|
|
250
|
+
}, onlyIcon: true, uiTransform: {
|
|
251
|
+
display: adminToolkitEntity.textAnnouncementControl.isEnabled
|
|
252
|
+
? 'flex'
|
|
253
|
+
: 'none',
|
|
254
|
+
width: 49 * scaleFactor,
|
|
255
|
+
height: 42 * scaleFactor,
|
|
256
|
+
margin: { right: 8 * scaleFactor },
|
|
257
|
+
alignItems: 'center',
|
|
258
|
+
justifyContent: 'center',
|
|
259
|
+
}, iconTransform: {
|
|
260
|
+
height: '100%',
|
|
261
|
+
width: '100%',
|
|
262
|
+
}, onMouseDown: () => {
|
|
263
|
+
if (state.activeTab !== TabType.TEXT_ANNOUNCEMENT_CONTROL) {
|
|
264
|
+
state.activeTab = TabType.NONE;
|
|
265
|
+
nextTickFunctions.push(() => {
|
|
266
|
+
state.activeTab = TabType.TEXT_ANNOUNCEMENT_CONTROL;
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
state.activeTab = TabType.NONE;
|
|
271
|
+
}
|
|
272
|
+
} })),
|
|
348
273
|
state.activeTab === TabType.TEXT_ANNOUNCEMENT_CONTROL ? (ReactEcs.createElement(TextAnnouncementsControl, { engine: engine, state: state, player: player })) : null,
|
|
349
274
|
state.activeTab === TabType.VIDEO_CONTROL ? (ReactEcs.createElement(VideoControl, { engine: engine, state: state })) : null,
|
|
350
|
-
state.activeTab === TabType.SMART_ITEMS_CONTROL ? (ReactEcs.createElement(SmartItemsControl, { engine: engine, state: state })) : null
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
alignContent: 'center',
|
|
357
|
-
justifyContent: 'center',
|
|
358
|
-
pointerFilter: 'block',
|
|
359
|
-
}, uiBackground: {
|
|
360
|
-
texture: {
|
|
361
|
-
src: BTN_ADMIN_TOOLKIT_BACKGROUND,
|
|
362
|
-
},
|
|
363
|
-
textureMode: 'stretch',
|
|
364
|
-
color: Color4.create(1, 1, 1, 1),
|
|
365
|
-
} },
|
|
366
|
-
ReactEcs.createElement(DCLButton, { value: "", uiTransform: {
|
|
367
|
-
height: 40 * scaleFactor,
|
|
368
|
-
width: 40 * scaleFactor,
|
|
275
|
+
state.activeTab === TabType.SMART_ITEMS_CONTROL ? (ReactEcs.createElement(SmartItemsControl, { engine: engine, state: state })) : null,
|
|
276
|
+
state.activeTab === TabType.MODERATION_CONTROL && (ReactEcs.createElement(ModerationControl, { engine: engine, player: player }))),
|
|
277
|
+
ReactEcs.createElement(UiEntity, { uiTransform: {
|
|
278
|
+
display: 'flex',
|
|
279
|
+
height: 42 * scaleFactor,
|
|
280
|
+
width: 42 * scaleFactor,
|
|
369
281
|
alignItems: 'center',
|
|
370
282
|
alignContent: 'center',
|
|
371
283
|
justifyContent: 'center',
|
|
284
|
+
pointerFilter: 'block',
|
|
372
285
|
}, uiBackground: {
|
|
373
286
|
texture: {
|
|
374
|
-
src:
|
|
287
|
+
src: BTN_ADMIN_TOOLKIT_BACKGROUND,
|
|
375
288
|
},
|
|
376
289
|
textureMode: 'stretch',
|
|
377
290
|
color: Color4.create(1, 1, 1, 1),
|
|
378
|
-
},
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
291
|
+
} },
|
|
292
|
+
ReactEcs.createElement(DCLButton, { value: "", uiTransform: {
|
|
293
|
+
height: 40 * scaleFactor,
|
|
294
|
+
width: 40 * scaleFactor,
|
|
295
|
+
alignItems: 'center',
|
|
296
|
+
alignContent: 'center',
|
|
297
|
+
justifyContent: 'center',
|
|
298
|
+
}, uiBackground: {
|
|
299
|
+
texture: {
|
|
300
|
+
src: BTN_ADMIN_TOOLKIT_CONTROL,
|
|
301
|
+
},
|
|
302
|
+
textureMode: 'stretch',
|
|
303
|
+
color: Color4.create(1, 1, 1, 1),
|
|
304
|
+
}, onMouseDown: () => {
|
|
305
|
+
state.panelOpen = !state.panelOpen;
|
|
306
|
+
} })))) : null,
|
|
307
|
+
ReactEcs.createElement(TextAnnouncements, { engine: engine, state: state })),
|
|
308
|
+
moderationControlState.showModalAdminList && (ReactEcs.createElement(ModalAdminList, { scaleFactor: scaleFactor, sceneAdmins: sceneAdminsCache ?? [], engine: engine })),
|
|
309
|
+
];
|
|
382
310
|
};
|
|
383
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRtaW4tdG9vbGtpdC11aS9pbmRleC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN0QyxPQUFPLFFBQVEsRUFBRSxFQUNmLEtBQUssRUFDTCxNQUFNLElBQUksU0FBUyxFQUNuQixRQUFRLEdBRVQsTUFBTSxnQkFBZ0IsQ0FBQTtBQUd2QixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGFBQWEsR0FJZCxNQUFNLGdCQUFnQixDQUFBO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLE9BQU8sQ0FBQTtBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDN0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFFckUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDNUQsT0FBTyxFQUFTLE9BQU8sRUFBcUIsTUFBTSxTQUFTLENBQUE7QUFDM0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRXJELE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFtQixFQUFFLENBQUE7QUFFbkQsSUFBSSxLQUFLLEdBQVU7SUFDakIsb0JBQW9CLEVBQUUsQ0FBVztJQUNqQyxTQUFTLEVBQUUsS0FBSztJQUNoQixTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUk7SUFDdkIsWUFBWSxFQUFFO1FB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QUFHLEVBQUU7d0JBQ2hCLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFBO29CQUNwQyxDQUFDLEdBQ0QsQ0FDTyxDQUNGLENBQ1osQ0FBQyxDQUFDLENBQUMsSUFBSTtRQUNSLHVCQUFDLGlCQUFpQixJQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBSSxDQUMxQyxDQUNaLENBQUE7QUFDSCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xvcjQgfSBmcm9tICdAZGNsL3Nkay9tYXRoJ1xuaW1wb3J0IFJlYWN0RWNzLCB7XG4gIExhYmVsLFxuICBCdXR0b24gYXMgRENMQnV0dG9uLFxuICBVaUVudGl0eSxcbiAgUmVhY3RCYXNlZFVpU3lzdGVtLFxufSBmcm9tICdAZGNsL3JlYWN0LWVjcydcbmltcG9ydCB7IEVudGl0eSwgSUVuZ2luZSwgUG9pbnRlckV2ZW50c1N5c3RlbSB9IGZyb20gJ0BkY2wvZWNzJ1xuXG5pbXBvcnQge1xuICBBZG1pblBlcm1pc3Npb25zLFxuICBnZXRDb21wb25lbnRzLFxuICBHZXRQbGF5ZXJEYXRhUmVzLFxuICBJUGxheWVyc0hlbHBlcixcbiAgSVNES0hlbHBlcnMsXG59IGZyb20gJy4uL2RlZmluaXRpb25zJ1xuaW1wb3J0IHsgZ2V0U2NhbGVVSUZhY3RvciB9IGZyb20gJy4uL3VpJ1xuaW1wb3J0IHsgVmlkZW9Db250cm9sIH0gZnJvbSAnLi9WaWRlb0NvbnRyb2wnXG5pbXBvcnQgeyBUZXh0QW5ub3VuY2VtZW50c0NvbnRyb2wgfSBmcm9tICcuL1RleHRBbm5vdW5jZW1lbnRzQ29udHJvbCdcbi8vIGltcG9ydCB7IFJld2FyZHNDb250cm9sIH0gZnJvbSAnLi9SZXdhcmRzQ29udHJvbCdcbmltcG9ydCB7IFNtYXJ0SXRlbXNDb250cm9sIH0gZnJvbSAnLi9TbWFydEl0ZW1zQ29udHJvbCdcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4vQnV0dG9uJ1xuaW1wb3J0IHsgVGV4dEFubm91bmNlbWVudHMgfSBmcm9tICcuL1RleHRBbm5vdW5jZW1lbnRzJ1xuaW1wb3J0IHsgQ09OVEVOVF9VUkwgfSBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB7IGdldFNjZW5lRGVwbG95bWVudCwgZ2V0U2NlbmVPd25lcnMgfSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHsgU3RhdGUsIFRhYlR5cGUsIFNlbGVjdGVkU21hcnRJdGVtIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7IGdldEV4cGxvcmVyQ29tcG9uZW50cyB9IGZyb20gJy4uL2NvbXBvbmVudHMnXG5cbmV4cG9ydCBjb25zdCBuZXh0VGlja0Z1bmN0aW9uczogKCgpID0+IHZvaWQpW10gPSBbXVxuXG5sZXQgc3RhdGU6IFN0YXRlID0ge1xuICBhZG1pblRvb2xraXRVaUVudGl0eTogMCBhcyBFbnRpdHksXG4gIHBhbmVsT3BlbjogZmFsc2UsXG4gIGFjdGl2ZVRhYjogVGFiVHlwZS5OT05FLFxuICB2aWRlb0NvbnRyb2w6IHtcbiAgICBzaGFyZVNjcmVlblVybDogdW5kZWZpbmVkLFxuICAgIHNlbGVjdGVkVmlkZW9QbGF5ZXI6IHVuZGVmaW5lZCxcbiAgICBsaW5rQWxsVmlkZW9QbGF5ZXJzOiB1bmRlZmluZWQsXG4gIH0sXG4gIHNtYXJ0SXRlbXNDb250cm9sOiB7XG4gICAgc2VsZWN0ZWRTbWFydEl0ZW06IHVuZGVmaW5lZCxcbiAgICBzbWFydEl0ZW1zOiBuZXcgTWFwPEVudGl0eSwgU2VsZWN0ZWRTbWFydEl0ZW0+KCksXG4gIH0sXG4gIHRleHRBbm5vdW5jZW1lbnRDb250cm9sOiB7XG4gICAgZW50aXR5OiB1bmRlZmluZWQsXG4gICAgdGV4dDogdW5kZWZpbmVkLFxuICAgIG1lc3NhZ2VSYXRlVHJhY2tlcjogbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKSxcbiAgICBhbm5vdW5jZW1lbnRzOiBbXSxcbiAgICBtYXhBbm5vdW5jZW1lbnRzOiA0LFxuICB9LFxuICByZXdhcmRzQ29udHJvbDoge1xuICAgIHNlbGVjdGVkUmV3YXJkSXRlbTogdW5kZWZpbmVkLFxuICB9LFxufVxuXG4vLyBBZGQgY2FjaGUgb2JqZWN0cyBhdCB0aGUgdG9wIGxldmVsXG5sZXQgZGVwbG95bWVudENhY2hlOiB7XG4gIGRhdGE6IGFueVxuICBkZXBsb3llZEJ5Pzogc3RyaW5nXG4gIHNjZW5lQmFzZVBvc2l0aW9uPzogc3RyaW5nW11cbn0gfCBudWxsID0gbnVsbFxuXG5sZXQgc2NlbmVPd25lcnNDYWNoZTogc3RyaW5nW10gfCBudWxsID0gbnVsbFxuXG4vLyBjb25zdCBCVE5fUkVXQVJEU19DT05UUk9MID0gYCR7Q09OVEVOVF9VUkx9L2FkbWluX3Rvb2xraXQvYXNzZXRzL2ljb25zL2FkbWluLXBhbmVsLXJld2FyZHMtY29udHJvbC1idXR0b24ucG5nYFxuLy8gY29uc3QgQlROX1JFV0FSRFNfQ09OVFJPTF9BQ1RJVkUgPSBgJHtDT05URU5UX1VSTH0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtcmV3YXJkcy1jb250cm9sLWFjdGl2ZS1idXR0b24ucG5nYFxuXG5jb25zdCBCVE5fVklERU9fQ09OVFJPTCA9IGAke0NPTlRFTlRfVVJMfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy9hZG1pbi1wYW5lbC12aWRlby1jb250cm9sLWJ1dHRvbi5wbmdgXG5jb25zdCBCVE5fVklERU9fQ09OVFJPTF9BQ1RJVkUgPSBgJHtDT05URU5UX1VSTH0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtdmlkZW8tY29udHJvbC1hY3RpdmUtYnV0dG9uLnBuZ2BcblxuY29uc3QgQlROX1NNQVJUX0lURU1fQ09OVFJPTCA9IGAke0NPTlRFTlRfVVJMfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy9hZG1pbi1wYW5lbC1zbWFydC1pdGVtLWNvbnRyb2wtYnV0dG9uLnBuZ2BcbmNvbnN0IEJUTl9TTUFSVF9JVEVNX0NPTlRST0xfQUNUSVZFID0gYCR7Q09OVEVOVF9VUkx9L2FkbWluX3Rvb2xraXQvYXNzZXRzL2ljb25zL2FkbWluLXBhbmVsLXNtYXJ0LWl0ZW0tY29udHJvbC1hY3RpdmUtYnV0dG9uLnBuZ2BcblxuY29uc3QgQlROX1RFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0wgPSBgJHtDT05URU5UX1VSTH0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtdGV4dC1hbm5vdW5jZW1lbnQtY29udHJvbC1idXR0b24ucG5nYFxuY29uc3QgQlROX1RFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0xfQUNUSVZFID0gYCR7Q09OVEVOVF9VUkx9L2FkbWluX3Rvb2xraXQvYXNzZXRzL2ljb25zL2FkbWluLXBhbmVsLXRleHQtYW5ub3VuY2VtZW50LWNvbnRyb2wtYWN0aXZlLWJ1dHRvbi5wbmdgXG5cbmNvbnN0IEJUTl9BRE1JTl9UT09MS0lUX0NPTlRST0wgPSBgJHtDT05URU5UX1VSTH0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtY29udHJvbC1idXR0b24ucG5nYFxuY29uc3QgQlROX0FETUlOX1RPT0xLSVRfQkFDS0dST1VORCA9IGAke0NPTlRFTlRfVVJMfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9iYWNrZ3JvdW5kcy9hZG1pbi10b29sLWJhY2tncm91bmQucG5nYFxuXG5jb25zdCBjb250YWluZXJCYWNrZ3JvdW5kQ29sb3IgPSBDb2xvcjQuY3JlYXRlKDAsIDAsIDAsIDAuNzUpXG5cbi8vIFRoZSBlZGl0b3Igc3RhcnRzIHVzaW5nIGVudGl0aWVzIGZyb20gWzgwMDFdLlxuY29uc3QgQURNSU5fVE9PTFNfRU5USVRZID0gODAwMCBhcyBFbnRpdHlcblxuZnVuY3Rpb24gZ2V0QWRtaW5Ub29sa2l0RW50aXR5KGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCB7IEFkbWluVG9vbHMgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKVxuICByZXR1cm4gQXJyYXkuZnJvbShlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKEFkbWluVG9vbHMpKVswXVswXVxufVxuXG5mdW5jdGlvbiBnZXRBZG1pblRvb2xraXRDb21wb25lbnQoZW5naW5lOiBJRW5naW5lKSB7XG4gIGNvbnN0IHsgQWRtaW5Ub29scyB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpXG4gIHJldHVybiBBcnJheS5mcm9tKGVuZ2luZS5nZXRFbnRpdGllc1dpdGgoQWRtaW5Ub29scykpWzBdWzFdXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGluaXRTY2VuZURlcGxveW1lbnQoKSB7XG4gIGlmIChkZXBsb3ltZW50Q2FjaGUgIT09IG51bGwpIHJldHVyblxuXG4gIGNvbnN0IGRlcGxveW1lbnQgPSBhd2FpdCBnZXRTY2VuZURlcGxveW1lbnQoKVxuXG4gIGlmIChkZXBsb3ltZW50KSB7XG4gICAgZGVwbG95bWVudENhY2hlID0ge1xuICAgICAgZGF0YTogZGVwbG95bWVudCxcbiAgICAgIGRlcGxveWVkQnk6IGRlcGxveW1lbnQuZGVwbG95ZWRCeS50b0xvd2VyQ2FzZSgpLFxuICAgICAgc2NlbmVCYXNlUG9zaXRpb246IGRlcGxveW1lbnQubWV0YWRhdGEuc2NlbmUuYmFzZS5zcGxpdCgnLCcpLFxuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBpbml0U2NlbmVPd25lcnMoKSB7XG4gIGlmIChzY2VuZU93bmVyc0NhY2hlICE9PSBudWxsKSByZXR1cm5cblxuICBjb25zdCBvd25lcnMgPSBhd2FpdCBnZXRTY2VuZU93bmVycygpXG5cbiAgaWYgKG93bmVycy5sZW5ndGggPiAwKSB7XG4gICAgc2NlbmVPd25lcnNDYWNoZSA9IG93bmVyc1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFZpZGVvUGxheWVycyhlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgYWRtaW5Ub29sa2l0Q29tcG9uZW50ID0gZ2V0QWRtaW5Ub29sa2l0Q29tcG9uZW50KGVuZ2luZSlcblxuICBpZiAoXG4gICAgIWFkbWluVG9vbGtpdENvbXBvbmVudCB8fFxuICAgICFhZG1pblRvb2xraXRDb21wb25lbnQudmlkZW9Db250cm9sIHx8XG4gICAgIWFkbWluVG9vbGtpdENvbXBvbmVudC52aWRlb0NvbnRyb2wudmlkZW9QbGF5ZXJzIHx8XG4gICAgYWRtaW5Ub29sa2l0Q29tcG9uZW50LnZpZGVvQ29udHJvbC52aWRlb1BsYXllcnMubGVuZ3RoID09PSAwXG4gIClcbiAgICByZXR1cm4gW11cblxuICByZXR1cm4gQXJyYXkuZnJvbShhZG1pblRvb2xraXRDb21wb25lbnQudmlkZW9Db250cm9sLnZpZGVvUGxheWVycylcbn1cblxuZnVuY3Rpb24gZ2V0U21hcnRJdGVtcyhlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgYWRtaW5Ub29sa2l0Q29tcG9uZW50ID0gZ2V0QWRtaW5Ub29sa2l0Q29tcG9uZW50KGVuZ2luZSlcblxuICBpZiAoXG4gICAgIWFkbWluVG9vbGtpdENvbXBvbmVudCB8fFxuICAgICFhZG1pblRvb2xraXRDb21wb25lbnQuc21hcnRJdGVtc0NvbnRyb2wgfHxcbiAgICAhYWRtaW5Ub29sa2l0Q29tcG9uZW50LnNtYXJ0SXRlbXNDb250cm9sLnNtYXJ0SXRlbXMgfHxcbiAgICBhZG1pblRvb2xraXRDb21wb25lbnQuc21hcnRJdGVtc0NvbnRyb2wuc21hcnRJdGVtcy5sZW5ndGggPT09IDBcbiAgKVxuICAgIHJldHVybiBbXVxuXG4gIHJldHVybiBBcnJheS5mcm9tKGFkbWluVG9vbGtpdENvbXBvbmVudC5zbWFydEl0ZW1zQ29udHJvbC5zbWFydEl0ZW1zKVxufVxuXG5mdW5jdGlvbiBnZXRSZXdhcmRzKGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCBhZG1pblRvb2xraXRDb21wb25lbnQgPSBnZXRBZG1pblRvb2xraXRDb21wb25lbnQoZW5naW5lKVxuXG4gIGlmIChcbiAgICAhYWRtaW5Ub29sa2l0Q29tcG9uZW50IHx8XG4gICAgIWFkbWluVG9vbGtpdENvbXBvbmVudC5yZXdhcmRzQ29udHJvbCB8fFxuICAgICFhZG1pblRvb2xraXRDb21wb25lbnQucmV3YXJkc0NvbnRyb2wucmV3YXJkSXRlbXMgfHxcbiAgICBhZG1pblRvb2xraXRDb21wb25lbnQucmV3YXJkc0NvbnRyb2wucmV3YXJkSXRlbXMubGVuZ3RoID09PSAwXG4gIClcbiAgICByZXR1cm4gW11cblxuICByZXR1cm4gQXJyYXkuZnJvbShhZG1pblRvb2xraXRDb21wb25lbnQucmV3YXJkc0NvbnRyb2wucmV3YXJkSXRlbXMpXG59XG5cbmZ1bmN0aW9uIHN5bmNWaWRlb1BsYXllcnNTdGF0ZShlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgeyBWaWRlb0NvbnRyb2xTdGF0ZSB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpXG4gIGNvbnN0IHsgVmlkZW9QbGF5ZXIgfSA9IGdldEV4cGxvcmVyQ29tcG9uZW50cyhlbmdpbmUpXG5cbiAgY29uc3QgdmlkZW9Db250cm9sU3RhdGUgPSBWaWRlb0NvbnRyb2xTdGF0ZS5nZXRPck51bGwoXG4gICAgc3RhdGUuYWRtaW5Ub29sa2l0VWlFbnRpdHksXG4gIClcbiAgaWYgKCF2aWRlb0NvbnRyb2xTdGF0ZT8udmlkZW9QbGF5ZXJzKSByZXR1cm5cblxuICAvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBwbGF5ZXIgaW4gdGhlIGNvbnRyb2wgc3RhdGVcbiAgdmlkZW9Db250cm9sU3RhdGUudmlkZW9QbGF5ZXJzLmZvckVhY2goKGNvbnRyb2xQbGF5ZXIpID0+IHtcbiAgICBjb25zdCB2aWRlb1BsYXllciA9IFZpZGVvUGxheWVyLmdldE11dGFibGVPck51bGwoXG4gICAgICBjb250cm9sUGxheWVyLmVudGl0eSBhcyBFbnRpdHksXG4gICAgKVxuICAgIGlmICghdmlkZW9QbGF5ZXIpIHJldHVyblxuXG4gICAgLy8gQ2hlY2sgYW5kIHN5bmMgZWFjaCBwcm9wZXJ0eVxuICAgIGlmIChcbiAgICAgIGNvbnRyb2xQbGF5ZXIuc3JjICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHZpZGVvUGxheWVyLnNyYyAhPT0gY29udHJvbFBsYXllci5zcmNcbiAgICApIHtcbiAgICAgIHZpZGVvUGxheWVyLnNyYyA9IGNvbnRyb2xQbGF5ZXIuc3JjXG4gICAgfVxuICAgIGlmICh2aWRlb1BsYXllci5wbGF5aW5nICE9PSBjb250cm9sUGxheWVyLnBsYXlpbmcpIHtcbiAgICAgIHZpZGVvUGxheWVyLnBsYXlpbmcgPSAhIWNvbnRyb2xQbGF5ZXIucGxheWluZ1xuICAgIH1cbiAgICBpZiAodmlkZW9QbGF5ZXIudm9sdW1lICE9PSBjb250cm9sUGxheWVyLnZvbHVtZSkge1xuICAgICAgdmlkZW9QbGF5ZXIudm9sdW1lID0gY29udHJvbFBsYXllci52b2x1bWUgPz8gMFxuICAgIH1cbiAgICBpZiAoY29udHJvbFBsYXllci5wb3NpdGlvbiA9PT0gLTEgJiYgdmlkZW9QbGF5ZXIucG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmlkZW9QbGF5ZXIucG9zaXRpb24gPSAtMVxuICAgIH1cbiAgICBpZiAodmlkZW9QbGF5ZXIucG9zaXRpb24gPT09IC0xICYmIGNvbnRyb2xQbGF5ZXIucG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmlkZW9QbGF5ZXIucG9zaXRpb24gPSB1bmRlZmluZWRcbiAgICB9XG4gICAgaWYgKHZpZGVvUGxheWVyLmxvb3AgIT09IGNvbnRyb2xQbGF5ZXIubG9vcCkge1xuICAgICAgdmlkZW9QbGF5ZXIubG9vcCA9ICEhY29udHJvbFBsYXllci5sb29wXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBpbml0VmlkZW9Db250cm9sU3luYyhlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgeyBWaWRlb0NvbnRyb2xTdGF0ZSB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpXG4gIGNvbnN0IHsgVmlkZW9QbGF5ZXIgfSA9IGdldEV4cGxvcmVyQ29tcG9uZW50cyhlbmdpbmUpXG5cbiAgY29uc3QgdmlkZW9QbGF5ZXJzID0gZ2V0VmlkZW9QbGF5ZXJzKGVuZ2luZSlcblxuICBsZXQgc3luY1ZpZGVvUGxheWVyczogYW55ID0gW11cblxuICB2aWRlb1BsYXllcnMuZm9yRWFjaCgocGxheWVyKSA9PiB7XG4gICAgY29uc3QgdnAgPSBWaWRlb1BsYXllci5nZXRPck51bGwocGxheWVyLmVudGl0eSBhcyBFbnRpdHkpXG4gICAgaWYgKHZwKSB7XG4gICAgICBzeW5jVmlkZW9QbGF5ZXJzLnB1c2goe1xuICAgICAgICBlbnRpdHk6IHBsYXllci5lbnRpdHkgYXMgRW50aXR5LFxuICAgICAgICBzcmM6IHZwLnNyYyxcbiAgICAgICAgcGxheWluZzogdnAucGxheWluZyxcbiAgICAgICAgdm9sdW1lOiB2cC52b2x1bWUsXG4gICAgICAgIHBvc2l0aW9uOiB2cC5wb3NpdGlvbixcbiAgICAgICAgbG9vcDogdnAubG9vcCxcbiAgICAgIH0pXG4gICAgfVxuICB9KVxuXG4gIFZpZGVvQ29udHJvbFN0YXRlLmNyZWF0ZU9yUmVwbGFjZShzdGF0ZS5hZG1pblRvb2xraXRVaUVudGl0eSwge1xuICAgIHZpZGVvUGxheWVyczogc3luY1ZpZGVvUGxheWVycyxcbiAgfSlcblxuICAvLyBTZXQgdXAgdGhlIHN5bmMgc3lzdGVtXG4gIGVuZ2luZS5hZGRTeXN0ZW0oKCkgPT4ge1xuICAgIHN5bmNWaWRlb1BsYXllcnNTdGF0ZShlbmdpbmUpXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGluaXRUZXh0QW5ub3VuY2VtZW50U3luYyhlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgeyBUZXh0QW5ub3VuY2VtZW50cyB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpXG5cbiAgVGV4dEFubm91bmNlbWVudHMuY3JlYXRlT3JSZXBsYWNlKHN0YXRlLmFkbWluVG9vbGtpdFVpRW50aXR5LCB7XG4gICAgdGV4dDogJycsXG4gICAgYXV0aG9yOiAnJyxcbiAgICBpZDogJydcbiAgfSlcbn1cblxuLy8gSW5pdGlhbGl6ZSBhZG1pbiBkYXRhIGJlZm9yZSBVSSByZW5kZXJpbmdcbmxldCBhZG1pbkRhdGFJbml0aWFsaXplZCA9IGZhbHNlXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5pdGlhbGl6ZUFkbWluRGF0YShcbiAgZW5naW5lOiBJRW5naW5lLFxuICBzZGtIZWxwZXJzPzogSVNES0hlbHBlcnMsXG4pIHtcbiAgY29uc29sZS5sb2coJ2luaXRpYWxpemVBZG1pbkRhdGEnKVxuICBpZiAoIWFkbWluRGF0YUluaXRpYWxpemVkKSB7XG4gICAgY29uc29sZS5sb2coJ2luaXRpYWxpemVBZG1pbkRhdGEgLSBub3QgaW5pdGlhbGl6ZWQnKVxuICAgIGNvbnN0IHsgVmlkZW9Db250cm9sU3RhdGUsIFRleHRBbm5vdW5jZW1lbnRzIH0gPSBnZXRDb21wb25lbnRzKGVuZ2luZSlcblxuICAgIC8vIEluaXRpYWxpemUgc2NlbmUgZGF0YVxuICAgIGF3YWl0IFByb21pc2UuYWxsKFtpbml0U2NlbmVEZXBsb3ltZW50KCksIGluaXRTY2VuZU93bmVycygpXSlcblxuICAgIC8vIEluaXRpYWxpemUgQWRtaW5Ub29sa2l0VWlFbnRpdHlcbiAgICBzdGF0ZS5hZG1pblRvb2xraXRVaUVudGl0eSA9IGVuZ2luZS5hZGRFbnRpdHkoKVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBWaWRlb0NvbnRyb2wgc3luYyBjb21wb25lbnRcbiAgICBpbml0VmlkZW9Db250cm9sU3luYyhlbmdpbmUpXG5cbiAgICAvLyBJbml0aWFsaXplIFRleHRBbm5vdW5jZW1lbnRzIHN5bmMgY29tcG9uZW50XG4gICAgaW5pdFRleHRBbm5vdW5jZW1lbnRTeW5jKGVuZ2luZSlcblxuICAgIHNka0hlbHBlcnM/LnN5bmNFbnRpdHk/LihcbiAgICAgIHN0YXRlLmFkbWluVG9vbGtpdFVpRW50aXR5LFxuICAgICAgW1ZpZGVvQ29udHJvbFN0YXRlLmNvbXBvbmVudElkLCBUZXh0QW5ub3VuY2VtZW50cy5jb21wb25lbnRJZF0sXG4gICAgICBBRE1JTl9UT09MU19FTlRJVFksXG4gICAgKVxuXG4gICAgZW5naW5lLmFkZFN5c3RlbSgoKSA9PiB7XG4gICAgICBpZiAobmV4dFRpY2tGdW5jdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zdCBuZXh0VGljayA9IG5leHRUaWNrRnVuY3Rpb25zLnNoaWZ0KClcbiAgICAgICAgaWYgKG5leHRUaWNrKSB7XG4gICAgICAgICAgbmV4dFRpY2soKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKVxuXG4gICAgYWRtaW5EYXRhSW5pdGlhbGl6ZWQgPSB0cnVlXG5cbiAgICBjb25zb2xlLmxvZygnaW5pdGlhbGl6ZUFkbWluRGF0YSAtIGluaXRpYWxpemVkJylcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWRtaW5Ub29sa2l0VUkoXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgcG9pbnRlckV2ZW50c1N5c3RlbTogUG9pbnRlckV2ZW50c1N5c3RlbSxcbiAgcmVhY3RCYXNlZFVpU3lzdGVtOiBSZWFjdEJhc2VkVWlTeXN0ZW0sXG4gIHNka0hlbHBlcnM/OiBJU0RLSGVscGVycyxcbiAgcGxheWVyc0hlbHBlcj86IElQbGF5ZXJzSGVscGVyLFxuKSB7XG4gIC8vIEluaXRpYWxpemUgYWRtaW4gZGF0YSBiZWZvcmUgc2V0dGluZyB1cCB0aGUgVUlcbiAgaW5pdGlhbGl6ZUFkbWluRGF0YShlbmdpbmUsIHNka0hlbHBlcnMpLnRoZW4oKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCdjcmVhdGVBZG1pblRvb2xraXRVSSAtIGluaXRpYWxpemVkJylcbiAgICByZWFjdEJhc2VkVWlTeXN0ZW0uc2V0VWlSZW5kZXJlcigoKSA9PlxuICAgICAgdWlDb21wb25lbnQoZW5naW5lLCBwb2ludGVyRXZlbnRzU3lzdGVtLCBzZGtIZWxwZXJzLCBwbGF5ZXJzSGVscGVyKSxcbiAgICApXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGlzU2NlbmVEZXBsb3llcihwbGF5ZXJBZGRyZXNzOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGRlcGxveW1lbnRDYWNoZT8uZGVwbG95ZWRCeSA9PT0gcGxheWVyQWRkcmVzcy50b0xvd2VyQ2FzZSgpXG59XG5cbmZ1bmN0aW9uIGlzU2NlbmVPd25lcihwbGF5ZXJBZGRyZXNzOiBzdHJpbmcpIHtcbiAgcmV0dXJuIChzY2VuZU93bmVyc0NhY2hlIHx8IFtdKS5pbmNsdWRlcyhwbGF5ZXJBZGRyZXNzLnRvTG93ZXJDYXNlKCkpXG59XG5cbmZ1bmN0aW9uIGlzQWxsb3dlZEFkbWluKFxuICBfZW5naW5lOiBJRW5naW5lLFxuICBhZG1pblRvb2xraXRFbnRpdGllOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRBZG1pblRvb2xraXRDb21wb25lbnQ+LFxuICBwbGF5ZXI/OiBHZXRQbGF5ZXJEYXRhUmVzIHwgbnVsbCxcbikge1xuICBjb25zdCB7IGFkbWluUGVybWlzc2lvbnMsIGF1dGhvcml6ZWRBZG1pblVzZXJzIH0gPSBhZG1pblRvb2xraXRFbnRpdGllXG5cbiAgaWYgKGFkbWluUGVybWlzc2lvbnMgPT09IEFkbWluUGVybWlzc2lvbnMuUFVCTElDKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmICghcGxheWVyKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCBwbGF5ZXJBZGRyZXNzID0gcGxheWVyLnVzZXJJZC50b0xvd2VyQ2FzZSgpXG5cbiAgLy8gQ2hlY2sgaWYgcGxheWVyIGlzIHRoZSBkZXBsb3llclxuICBpZiAoYXV0aG9yaXplZEFkbWluVXNlcnMubWUgJiYgaXNTY2VuZURlcGxveWVyKHBsYXllckFkZHJlc3MpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIENoZWNrIGlmIHBsYXllciBpcyBhIHNjZW5lIG93bmVyXG4gIGlmIChhdXRob3JpemVkQWRtaW5Vc2Vycy5zY2VuZU93bmVycyAmJiBpc1NjZW5lT3duZXIocGxheWVyQWRkcmVzcykpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgcGxheWVyIGlzIGluIHRoZSBhbGxvdyBsaXN0XG4gIGlmIChcbiAgICBhdXRob3JpemVkQWRtaW5Vc2Vycy5hbGxvd0xpc3QgJiZcbiAgICBhdXRob3JpemVkQWRtaW5Vc2Vycy5hZG1pbkFsbG93TGlzdC5zb21lKFxuICAgICAgKHdhbGxldCkgPT4gd2FsbGV0LnRvTG93ZXJDYXNlKCkgPT09IHBsYXllckFkZHJlc3MsXG4gICAgKVxuICApIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmNvbnN0IHVpQ29tcG9uZW50ID0gKFxuICBlbmdpbmU6IElFbmdpbmUsXG4gIHBvaW50ZXJFdmVudHNTeXN0ZW06IFBvaW50ZXJFdmVudHNTeXN0ZW0sXG4gIHNka0hlbHBlcnM/OiBJU0RLSGVscGVycyxcbiAgcGxheWVyc0hlbHBlcj86IElQbGF5ZXJzSGVscGVyLFxuKSA9PiB7XG4gIGNvbnN0IGFkbWluVG9vbGtpdEVudGl0aWUgPSBnZXRBZG1pblRvb2xraXRDb21wb25lbnQoZW5naW5lKVxuICBjb25zdCBwbGF5ZXIgPSBwbGF5ZXJzSGVscGVyPy5nZXRQbGF5ZXIoKVxuICBjb25zdCBpc1BsYXllckFkbWluID0gaXNBbGxvd2VkQWRtaW4oZW5naW5lLCBhZG1pblRvb2xraXRFbnRpdGllLCBwbGF5ZXIpXG4gIGNvbnN0IHNjYWxlRmFjdG9yID0gZ2V0U2NhbGVVSUZhY3RvcihlbmdpbmUpXG5cbiAgcmV0dXJuIChcbiAgICA8VWlFbnRpdHlcbiAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgIHBvc2l0aW9uVHlwZTogJ2Fic29sdXRlJyxcbiAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtpc1BsYXllckFkbWluID8gKFxuICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgcG9zaXRpb25UeXBlOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgICAgICAgICBwb3NpdGlvbjogeyB0b3A6IDgwICogc2NhbGVGYWN0b3IsIHJpZ2h0OiAxMCAqIHNjYWxlRmFjdG9yIH0sXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgZGlzcGxheTogc3RhdGUucGFuZWxPcGVuID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgICAgICAgICAgICB3aWR0aDogNTAwICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgIHBvaW50ZXJGaWx0ZXI6ICdibG9jaycsXG4gICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggKiBzY2FsZUZhY3RvciB9LFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIGhlaWdodDogNTAgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAncm93JyxcbiAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiB7XG4gICAgICAgICAgICAgICAgICBsZWZ0OiAxMiAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICAgICAgcmlnaHQ6IDEyICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgdWlCYWNrZ3JvdW5kPXt7IGNvbG9yOiBjb250YWluZXJCYWNrZ3JvdW5kQ29sb3IgfX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPExhYmVsXG4gICAgICAgICAgICAgICAgdmFsdWU9XCJBZG1pbiBUb29sc1wiXG4gICAgICAgICAgICAgICAgZm9udFNpemU9ezIwICogc2NhbGVGYWN0b3J9XG4gICAgICAgICAgICAgICAgY29sb3I9e0NvbG9yNC5jcmVhdGUoMTYwLCAxNTUsIDE2OCwgMSl9XG4gICAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3sgZmxleEdyb3c6IDEgfX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIGlkPVwiYWRtaW5fdG9vbGtpdF9wYW5lbF92aWRlb19jb250cm9sXCJcbiAgICAgICAgICAgICAgICB2YXJpYW50PVwidGV4dFwiXG4gICAgICAgICAgICAgICAgaWNvbj17XG4gICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVklERU9fQ09OVFJPTFxuICAgICAgICAgICAgICAgICAgICA/IEJUTl9WSURFT19DT05UUk9MX0FDVElWRVxuICAgICAgICAgICAgICAgICAgICA6IEJUTl9WSURFT19DT05UUk9MXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9ubHlJY29uXG4gICAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGFkbWluVG9vbGtpdEVudGl0aWUudmlkZW9Db250cm9sLmlzRW5hYmxlZFxuICAgICAgICAgICAgICAgICAgICA/ICdmbGV4J1xuICAgICAgICAgICAgICAgICAgICA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiA0OSAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MiAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICAgICAgbWFyZ2luOiB7IHJpZ2h0OiA4ICogc2NhbGVGYWN0b3IgfSxcbiAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgaWNvblRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5hY3RpdmVUYWIgIT09IFRhYlR5cGUuVklERU9fQ09OVFJPTCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkVcbiAgICAgICAgICAgICAgICAgICAgbmV4dFRpY2tGdW5jdGlvbnMucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5WSURFT19DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgaWQ9XCJhZG1pbl90b29sa2l0X3BhbmVsX3NtYXJ0X2l0ZW1zX2NvbnRyb2xcIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBpY29uPXtcbiAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5TTUFSVF9JVEVNU19DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgID8gQlROX1NNQVJUX0lURU1fQ09OVFJPTF9BQ1RJVkVcbiAgICAgICAgICAgICAgICAgICAgOiBCVE5fU01BUlRfSVRFTV9DT05UUk9MXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9ubHlJY29uXG4gICAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGFkbWluVG9vbGtpdEVudGl0aWUuc21hcnRJdGVtc0NvbnRyb2wuaXNFbmFibGVkXG4gICAgICAgICAgICAgICAgICAgID8gJ2ZsZXgnXG4gICAgICAgICAgICAgICAgICAgIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDQ5ICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQyICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggKiBzY2FsZUZhY3RvciB9LFxuICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBpY29uVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmFjdGl2ZVRhYiAhPT0gVGFiVHlwZS5TTUFSVF9JVEVNU19DT05UUk9MKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORVxuICAgICAgICAgICAgICAgICAgICBuZXh0VGlja0Z1bmN0aW9ucy5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLlNNQVJUX0lURU1TX0NPTlRST0xcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImFkbWluX3Rvb2xraXRfcGFuZWxfdGV4dF9hbm5vdW5jZW1lbnRfY29udHJvbFwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cInRleHRcIlxuICAgICAgICAgICAgICAgIGljb249e1xuICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlRFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0xcbiAgICAgICAgICAgICAgICAgICAgPyBCVE5fVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTF9BQ1RJVkVcbiAgICAgICAgICAgICAgICAgICAgOiBCVE5fVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvbmx5SWNvblxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBkaXNwbGF5OiBhZG1pblRvb2xraXRFbnRpdGllLnRleHRBbm5vdW5jZW1lbnRDb250cm9sLmlzRW5hYmxlZFxuICAgICAgICAgICAgICAgICAgICA/ICdmbGV4J1xuICAgICAgICAgICAgICAgICAgICA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiA0OSAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MiAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICAgICAgbWFyZ2luOiB7IHJpZ2h0OiA4ICogc2NhbGVGYWN0b3IgfSxcbiAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgaWNvblRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5hY3RpdmVUYWIgIT09IFRhYlR5cGUuVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkVcbiAgICAgICAgICAgICAgICAgICAgbmV4dFRpY2tGdW5jdGlvbnMucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5URVhUX0FOTk9VTkNFTUVOVF9DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB7LyogPEJ1dHRvblxuICAgICAgICAgICAgICAgIGlkPVwiYWRtaW5fdG9vbGtpdF9wYW5lbF9yZXdhcmRzX2NvbnRyb2xcIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBpY29uPXtcbiAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5SRVdBUkRTX0NPTlRST0xcbiAgICAgICAgICAgICAgICAgICAgPyBCVE5fUkVXQVJEU19DT05UUk9MX0FDVElWRVxuICAgICAgICAgICAgICAgICAgICA6IEJUTl9SRVdBUkRTX0NPTlRST0xcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb25seUljb25cbiAgICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgZGlzcGxheTogYWRtaW5Ub29sa2l0RW50aXRpZS5yZXdhcmRzQ29udHJvbC5pc0VuYWJsZWRcbiAgICAgICAgICAgICAgICAgICAgPyAnZmxleCdcbiAgICAgICAgICAgICAgICAgICAgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogNDkgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogNDIgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICAgIG1hcmdpbjogJzAnLFxuICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBpY29uVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmFjdGl2ZVRhYiAhPT0gVGFiVHlwZS5SRVdBUkRTX0NPTlRST0wpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5OT05FXG4gICAgICAgICAgICAgICAgICAgIG5leHRUaWNrRnVuY3Rpb25zLnB1c2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuUkVXQVJEU19DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPiAqL31cbiAgICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgICAgICB7c3RhdGUuYWN0aXZlVGFiICE9PSBUYWJUeXBlLk5PTkUgPyAoXG4gICAgICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgbWFyZ2luOiB7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogMTAgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMCxcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBwYWRkaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIHRvcDogMzIgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDMyICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbTogMzIgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogMzIgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICB1aUJhY2tncm91bmQ9e3sgY29sb3I6IGNvbnRhaW5lckJhY2tncm91bmRDb2xvciB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3N0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5URVhUX0FOTk9VTkNFTUVOVF9DT05UUk9MID8gKFxuICAgICAgICAgICAgICAgICAgPFRleHRBbm5vdW5jZW1lbnRzQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgICAgICAgICAgICAgc3RhdGU9e3N0YXRlfVxuICAgICAgICAgICAgICAgICAgICBwbGF5ZXI9e3BsYXllcn1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAge3N0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5WSURFT19DT05UUk9MID8gKFxuICAgICAgICAgICAgICAgICAgPFZpZGVvQ29udHJvbCBlbmdpbmU9e2VuZ2luZX0gc3RhdGU9e3N0YXRlfSAvPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIHtzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuU01BUlRfSVRFTVNfQ09OVFJPTCA/IChcbiAgICAgICAgICAgICAgICAgIDxTbWFydEl0ZW1zQ29udHJvbCBlbmdpbmU9e2VuZ2luZX0gc3RhdGU9e3N0YXRlfSAvPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIHsvKiB7c3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlJFV0FSRFNfQ09OVFJPTCA/IChcbiAgICAgICAgICAgICAgICAgIDxSZXdhcmRzQ29udHJvbCBlbmdpbmU9e2VuZ2luZX0gc3RhdGU9e3N0YXRlfSAvPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfSAqL31cbiAgICAgICAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgIGhlaWdodDogNDIgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgd2lkdGg6IDQyICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBhbGlnbkNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIHBvaW50ZXJGaWx0ZXI6ICdibG9jaycsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgdWlCYWNrZ3JvdW5kPXt7XG4gICAgICAgICAgICAgIHRleHR1cmU6IHtcbiAgICAgICAgICAgICAgICBzcmM6IEJUTl9BRE1JTl9UT09MS0lUX0JBQ0tHUk9VTkQsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRleHR1cmVNb2RlOiAnc3RyZXRjaCcsXG4gICAgICAgICAgICAgIGNvbG9yOiBDb2xvcjQuY3JlYXRlKDEsIDEsIDEsIDEpLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8RENMQnV0dG9uXG4gICAgICAgICAgICAgIHZhbHVlPVwiXCJcbiAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDQwICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgYWxpZ25Db250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIHVpQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICAgIHRleHR1cmU6IHtcbiAgICAgICAgICAgICAgICAgIHNyYzogQlROX0FETUlOX1RPT0xLSVRfQ09OVFJPTCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRleHR1cmVNb2RlOiAnc3RyZXRjaCcsXG4gICAgICAgICAgICAgICAgY29sb3I6IENvbG9yNC5jcmVhdGUoMSwgMSwgMSwgMSksXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGUucGFuZWxPcGVuID0gIXN0YXRlLnBhbmVsT3BlblxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgKSA6IG51bGx9XG4gICAgICA8VGV4dEFubm91bmNlbWVudHMgZW5naW5lPXtlbmdpbmV9IHN0YXRlPXtzdGF0ZX0gLz5cbiAgICA8L1VpRW50aXR5PlxuICApXG59XG4iXX0=
|
|
311
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRtaW4tdG9vbGtpdC11aS9pbmRleC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN0QyxPQUFPLFFBQVEsRUFBRSxFQUNmLEtBQUssRUFDTCxNQUFNLElBQUksU0FBUyxFQUNuQixRQUFRLEdBRVQsTUFBTSxnQkFBZ0IsQ0FBQTtBQUV2QixPQUFPLEVBQ0wsYUFBYSxHQUlkLE1BQU0sZ0JBQWdCLENBQUE7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sT0FBTyxDQUFBO0FBQ3hDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ2pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDekMsT0FBTyxFQUFTLE9BQU8sRUFBcUIsTUFBTSxTQUFTLENBQUE7QUFFM0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGlCQUFpQixFQUFFLHNCQUFzQixFQUFjLE1BQU0scUJBQXFCLENBQUE7QUFDbkgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRXpDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFtQixFQUFFLENBQUE7QUFDbkQsTUFBTSxDQUFDLElBQUksV0FBbUIs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LGlCQUFpQixJQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssR0FBSSxDQUMxQztRQUNYLHNCQUFzQixDQUFDLGtCQUFrQixJQUFJLENBQzNDLHVCQUFDLGNBQWMsSUFDYixXQUFXLEVBQUUsV0FBVyxFQUN4QixXQUFXLEVBQUUsZ0JBQWdCLElBQUksRUFBRSxFQUNuQyxNQUFNLEVBQUUsTUFBTSxHQUNkLENBQ0g7S0FDRixDQUFBO0FBQ0gsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sb3I0IH0gZnJvbSAnQGRjbC9zZGsvbWF0aCdcbmltcG9ydCBSZWFjdEVjcywge1xuICBMYWJlbCxcbiAgQnV0dG9uIGFzIERDTEJ1dHRvbixcbiAgVWlFbnRpdHksXG4gIFJlYWN0QmFzZWRVaVN5c3RlbSxcbn0gZnJvbSAnQGRjbC9yZWFjdC1lY3MnXG5pbXBvcnQgeyBFbnRpdHksIElFbmdpbmUsIFBvaW50ZXJFdmVudHNTeXN0ZW0gfSBmcm9tICdAZGNsL2VjcydcbmltcG9ydCB7XG4gIGdldENvbXBvbmVudHMsXG4gIEdldFBsYXllckRhdGFSZXMsXG4gIElQbGF5ZXJzSGVscGVyLFxuICBJU0RLSGVscGVycyxcbn0gZnJvbSAnLi4vZGVmaW5pdGlvbnMnXG5pbXBvcnQgeyBnZXRTY2FsZVVJRmFjdG9yIH0gZnJvbSAnLi4vdWknXG5pbXBvcnQgeyBWaWRlb0NvbnRyb2wgfSBmcm9tICcuL1ZpZGVvQ29udHJvbCdcbmltcG9ydCB7IFRleHRBbm5vdW5jZW1lbnRzQ29udHJvbCB9IGZyb20gJy4vVGV4dEFubm91bmNlbWVudHNDb250cm9sJ1xuaW1wb3J0IHsgU21hcnRJdGVtc0NvbnRyb2wgfSBmcm9tICcuL1NtYXJ0SXRlbXNDb250cm9sJ1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnLi9CdXR0b24nXG5pbXBvcnQgeyBUZXh0QW5ub3VuY2VtZW50cyB9IGZyb20gJy4vVGV4dEFubm91bmNlbWVudHMnXG5pbXBvcnQgeyBDT05URU5UX1VSTCB9IGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgU3RhdGUsIFRhYlR5cGUsIFNlbGVjdGVkU21hcnRJdGVtIH0gZnJvbSAnLi90eXBlcydcbmltcG9ydCB7IGdldEV4cGxvcmVyQ29tcG9uZW50cyB9IGZyb20gJy4uL2NvbXBvbmVudHMnXG5pbXBvcnQgeyBCVE5fTU9ERVJBVElPTl9DT05UUk9MLCBNb2RlcmF0aW9uQ29udHJvbCwgbW9kZXJhdGlvbkNvbnRyb2xTdGF0ZSwgU2NlbmVBZG1pbiB9IGZyb20gJy4vTW9kZXJhdGlvbkNvbnRyb2wnXG5pbXBvcnQgeyBnZXRTY2VuZUFkbWlucyB9IGZyb20gJy4vTW9kZXJhdGlvbkNvbnRyb2wvYXBpJ1xuaW1wb3J0IHsgTW9kYWxBZG1pbkxpc3QgfSBmcm9tICcuL01vZGVyYXRpb25Db250cm9sL0FkbWluTGlzdCdcbmltcG9ydCB7IGlzUHJldmlldyB9IGZyb20gJy4vZmV0Y2gtdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBuZXh0VGlja0Z1bmN0aW9uczogKCgpID0+IHZvaWQpW10gPSBbXVxuZXhwb3J0IGxldCBzY2FsZUZhY3RvcjogbnVtYmVyXG5cbmV4cG9ydCBsZXQgc3RhdGU6IFN0YXRlID0ge1xuICBhZG1pblRvb2xraXRVaUVudGl0eTogMCBhcyBFbnRpdHksXG4gIHBhbmVsT3BlbjogZmFsc2UsXG4gIGFjdGl2ZVRhYjogVGFiVHlwZS5OT05FLFxuICB2aWRlb0NvbnRyb2w6IHtcbiAgICBzZWxlY3RlZFZpZGVvUGxheWVyOiB1bmRlZmluZWQsXG4gIH0sXG4gIHNtYXJ0SXRlbXNDb250cm9sOiB7XG4gICAgc2VsZWN0ZWRTbWFydEl0ZW06IHVuZGVmaW5lZCxcbiAgICBzbWFydEl0ZW1zOiBuZXcgTWFwPEVudGl0eSwgU2VsZWN0ZWRTbWFydEl0ZW0+KCksXG4gIH0sXG4gIHRleHRBbm5vdW5jZW1lbnRDb250cm9sOiB7XG4gICAgZW50aXR5OiB1bmRlZmluZWQsXG4gICAgdGV4dDogdW5kZWZpbmVkLFxuICAgIG1lc3NhZ2VSYXRlVHJhY2tlcjogbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKSxcbiAgICBhbm5vdW5jZW1lbnRzOiBbXSxcbiAgICBtYXhBbm5vdW5jZW1lbnRzOiA0LFxuICB9LFxuICByZXdhcmRzQ29udHJvbDoge1xuICAgIHNlbGVjdGVkUmV3YXJkSXRlbTogdW5kZWZpbmVkLFxuICB9LFxufVxuXG5sZXQgc2NlbmVBZG1pbnNDYWNoZTogU2NlbmVBZG1pbltdID0gW11cblxuLy8gY29uc3QgQlROX1JFV0FSRFNfQ09OVFJPTCA9IGAke0NPTlRFTlRfVVJMfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy9hZG1pbi1wYW5lbC1yZXdhcmRzLWNvbnRyb2wtYnV0dG9uLnBuZ2Bcbi8vIGNvbnN0IEJUTl9SRVdBUkRTX0NPTlRST0xfQUNUSVZFID0gYCR7Q09OVEVOVF9VUkx9L2FkbWluX3Rvb2xraXQvYXNzZXRzL2ljb25zL2FkbWluLXBhbmVsLXJld2FyZHMtY29udHJvbC1hY3RpdmUtYnV0dG9uLnBuZ2BcblxuY29uc3QgQlROX1ZJREVPX0NPTlRST0wgPSBgJHtDT05URU5UX1VSTH0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtdmlkZW8tY29udHJvbC1idXR0b24ucG5nYFxuXG5jb25zdCBCVE5fU01BUlRfSVRFTV9DT05UUk9MID0gYCR7Q09OVEVOVF9VUkx9L2FkbWluX3Rvb2xraXQvYXNzZXRzL2ljb25zL2FkbWluLXBhbmVsLXNtYXJ0LWl0ZW0tY29udHJvbC1idXR0b24ucG5nYFxuXG5jb25zdCBCVE5fVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTCA9IGAke0NPTlRFTlRfVVJMfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy9hZG1pbi1wYW5lbC10ZXh0LWFubm91bmNlbWVudC1jb250cm9sLWJ1dHRvbi5wbmdgXG5cbmNvbnN0IEJUTl9BRE1JTl9UT09MS0lUX0NPTlRST0wgPSBgJHtDT05URU5UX1VSTH0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvYWRtaW4tcGFuZWwtY29udHJvbC1idXR0b24ucG5nYFxuY29uc3QgQlROX0FETUlOX1RPT0xLSVRfQkFDS0dST1VORCA9IGAke0NPTlRFTlRfVVJMfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9iYWNrZ3JvdW5kcy9hZG1pbi10b29sLWJhY2tncm91bmQucG5nYFxuXG5leHBvcnQgY29uc3QgY29udGFpbmVyQmFja2dyb3VuZENvbG9yID0gQ29sb3I0LmNyZWF0ZSgwLCAwLCAwLCAwLjc1KVxuXG4vLyBUaGUgZWRpdG9yIHN0YXJ0cyB1c2luZyBlbnRpdGllcyBmcm9tIFs4MDAxXS5cbmNvbnN0IEFETUlOX1RPT0xTX0VOVElUWSA9IDgwMDAgYXMgRW50aXR5XG5cbmZ1bmN0aW9uIGdldEFkbWluVG9vbGtpdEVudGl0eShlbmdpbmU6IElFbmdpbmUpIHtcbiAgY29uc3QgeyBBZG1pblRvb2xzIH0gPSBnZXRDb21wb25lbnRzKGVuZ2luZSlcbiAgcmV0dXJuIEFycmF5LmZyb20oZW5naW5lLmdldEVudGl0aWVzV2l0aChBZG1pblRvb2xzKSlbMF1bMF1cbn1cblxuZnVuY3Rpb24gZ2V0QWRtaW5Ub29sa2l0Q29tcG9uZW50KGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCB7IEFkbWluVG9vbHMgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKVxuICByZXR1cm4gQXJyYXkuZnJvbShlbmdpbmUuZ2V0RW50aXRpZXNXaXRoKEFkbWluVG9vbHMpKVswXVsxXVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hTY2VuZUFkbWlucygpIHtcbiAgY29uc3QgW2Vycm9yLCByZXNwb25zZV0gPSBhd2FpdCBnZXRTY2VuZUFkbWlucygpXG5cblxuICBpZiAoZXJyb3IpIHtcbiAgICAvLyB1c2VyIGRvZXNudCBoYXZlIHBlcm1pc3Npb25zXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoeyBlcnJvciB9KSlcbiAgICBzY2VuZUFkbWluc0NhY2hlID0gW11cbiAgICByZXR1cm5cbiAgfVxuICBzY2VuZUFkbWluc0NhY2hlID0gKHJlc3BvbnNlID8/IFtdKVxuICAgIC5tYXAoKCQpID0+ICh7XG4gICAgICBuYW1lOiAkLm5hbWUsXG4gICAgICBhZGRyZXNzOiAkLmFkbWluLFxuICAgICAgcm9sZTogJ2FkbWluJyBhcyBjb25zdCxcbiAgICAgIHZlcmlmaWVkOiAhJC5uYW1lLmluY2x1ZGVzKCcjJyksXG4gICAgICBjYW5CZVJlbW92ZWQ6ICEhJC5jYW5CZVJlbW92ZWRcbiAgICB9KSlcbiAgICAuc29ydCgoYSkgPT4gYS5jYW5CZVJlbW92ZWQgPyAxIDogLTEpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTbWFydEl0ZW1zKGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCBhZG1pblRvb2xraXRDb21wb25lbnQgPSBnZXRBZG1pblRvb2xraXRDb21wb25lbnQoZW5naW5lKVxuXG4gIHJldHVybiBBcnJheS5mcm9tKGFkbWluVG9vbGtpdENvbXBvbmVudC5zbWFydEl0ZW1zQ29udHJvbC5zbWFydEl0ZW1zID8/IFtdKVxufVxuXG5mdW5jdGlvbiBnZXRSZXdhcmRzKGVuZ2luZTogSUVuZ2luZSkge1xuICBjb25zdCBhZG1pblRvb2xraXRDb21wb25lbnQgPSBnZXRBZG1pblRvb2xraXRDb21wb25lbnQoZW5naW5lKVxuXG4gIHJldHVybiBBcnJheS5mcm9tKGFkbWluVG9vbGtpdENvbXBvbmVudD8ucmV3YXJkc0NvbnRyb2w/LnJld2FyZEl0ZW1zID8/IFtdKVxufVxuXG5mdW5jdGlvbiBpbml0VGV4dEFubm91bmNlbWVudFN5bmMoZW5naW5lOiBJRW5naW5lKSB7XG4gIGNvbnN0IHsgVGV4dEFubm91bmNlbWVudHMgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKVxuXG4gIFRleHRBbm5vdW5jZW1lbnRzLmNyZWF0ZU9yUmVwbGFjZShzdGF0ZS5hZG1pblRvb2xraXRVaUVudGl0eSwge1xuICAgIHRleHQ6ICcnLFxuICAgIGF1dGhvcjogJycsXG4gICAgaWQ6ICcnXG4gIH0pXG59XG5cbi8vIEluaXRpYWxpemUgYWRtaW4gZGF0YSBiZWZvcmUgVUkgcmVuZGVyaW5nXG5sZXQgYWRtaW5EYXRhSW5pdGlhbGl6ZWQgPSBmYWxzZVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRpYWxpemVBZG1pbkRhdGEoXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgc2RrSGVscGVycz86IElTREtIZWxwZXJzLFxuKSB7XG4gIGNvbnNvbGUubG9nKCdpbml0aWFsaXplQWRtaW5EYXRhJylcbiAgaWYgKCFhZG1pbkRhdGFJbml0aWFsaXplZCkge1xuICAgIGNvbnNvbGUubG9nKCdpbml0aWFsaXplQWRtaW5EYXRhIC0gbm90IGluaXRpYWxpemVkJylcbiAgICBjb25zdCB7IFRleHRBbm5vdW5jZW1lbnRzLCBWaWRlb0NvbnRyb2xTdGF0ZSB9ID0gZ2V0Q29tcG9uZW50cyhlbmdpbmUpXG5cbiAgICAvLyBJbml0aWFsaXplIEFkbWluVG9vbGtpdFVpRW50aXR5XG4gICAgc3RhdGUuYWRtaW5Ub29sa2l0VWlFbnRpdHkgPSBnZXRBZG1pblRvb2xraXRFbnRpdHkoZW5naW5lKSA/PyBlbmdpbmUuYWRkRW50aXR5KClcblxuICAgIC8vIEluaXRpYWxpemUgVGV4dEFubm91bmNlbWVudHMgc3luYyBjb21wb25lbnRcbiAgICBpbml0VGV4dEFubm91bmNlbWVudFN5bmMoZW5naW5lKVxuXG4gICAgLy8gLy8gSW5pdGlhbGl6ZSBSZXdhcmRzIHN5bmNcbiAgICAvLyBpbml0UmV3YXJkc1N5bmMoZW5naW5lLCBzZGtIZWxwZXJzKVxuXG4gICAgaWYgKCFWaWRlb0NvbnRyb2xTdGF0ZS5nZXRPck51bGwoc3RhdGUuYWRtaW5Ub29sa2l0VWlFbnRpdHkpKSB7XG4gICAgICBWaWRlb0NvbnRyb2xTdGF0ZS5jcmVhdGUoc3RhdGUuYWRtaW5Ub29sa2l0VWlFbnRpdHkpXG4gICAgfVxuXG4gICAgc2RrSGVscGVycz8uc3luY0VudGl0eT8uKFxuICAgICAgc3RhdGUuYWRtaW5Ub29sa2l0VWlFbnRpdHksXG4gICAgICBbVmlkZW9Db250cm9sU3RhdGUuY29tcG9uZW50SWQsIFRleHRBbm5vdW5jZW1lbnRzLmNvbXBvbmVudElkXSxcbiAgICAgIEFETUlOX1RPT0xTX0VOVElUWSxcbiAgICApXG5cbiAgICBlbmdpbmUuYWRkU3lzdGVtKCgpID0+IHtcbiAgICAgIGlmIChuZXh0VGlja0Z1bmN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHRUaWNrID0gbmV4dFRpY2tGdW5jdGlvbnMuc2hpZnQoKVxuICAgICAgICBpZiAobmV4dFRpY2spIHtcbiAgICAgICAgICBuZXh0VGljaygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpXG5cbiAgICAvLyBJbml0aWFsaXplIHNjZW5lIGRhdGFcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBmZXRjaFNjZW5lQWRtaW5zKCksXG4gICAgXSlcblxuICAgIGFkbWluRGF0YUluaXRpYWxpemVkID0gdHJ1ZVxuXG4gICAgY29uc29sZS5sb2coJ2luaXRpYWxpemVBZG1pbkRhdGEgLSBpbml0aWFsaXplZCcpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFkbWluVG9vbGtpdFVJKFxuICBlbmdpbmU6IElFbmdpbmUsXG4gIHBvaW50ZXJFdmVudHNTeXN0ZW06IFBvaW50ZXJFdmVudHNTeXN0ZW0sXG4gIHJlYWN0QmFzZWRVaVN5c3RlbTogUmVhY3RCYXNlZFVpU3lzdGVtLFxuICBzZGtIZWxwZXJzPzogSVNES0hlbHBlcnMsXG4gIHBsYXllcnNIZWxwZXI/OiBJUGxheWVyc0hlbHBlcixcbikge1xuICAvLyBJbml0aWFsaXplIGFkbWluIGRhdGEgYmVmb3JlIHNldHRpbmcgdXAgdGhlIFVJXG4gIGluaXRpYWxpemVBZG1pbkRhdGEoZW5naW5lLCBzZGtIZWxwZXJzKS50aGVuKCgpID0+IHtcbiAgICBjb25zb2xlLmxvZygnY3JlYXRlQWRtaW5Ub29sa2l0VUkgLSBpbml0aWFsaXplZCcpXG4gICAgcmVhY3RCYXNlZFVpU3lzdGVtLnNldFVpUmVuZGVyZXIoKCkgPT5cbiAgICAgIHVpQ29tcG9uZW50KGVuZ2luZSwgcG9pbnRlckV2ZW50c1N5c3RlbSwgc2RrSGVscGVycywgcGxheWVyc0hlbHBlciksXG4gICAgKVxuICB9KVxufVxuXG5mdW5jdGlvbiBpc0FsbG93ZWRBZG1pbihcbiAgX2VuZ2luZTogSUVuZ2luZSxcbiAgYWRtaW5Ub29sa2l0RW50aXRpZTogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0QWRtaW5Ub29sa2l0Q29tcG9uZW50PixcbiAgcGxheWVyOiBHZXRQbGF5ZXJEYXRhUmVzIHwgbnVsbCB8IHVuZGVmaW5lZCxcbikge1xuICBpZiAoIXBsYXllcikgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3QgcGxheWVyQWRkcmVzcyA9IHBsYXllci51c2VySWQudG9Mb3dlckNhc2UoKVxuICBjb25zdCBpc0FkbWluID0gc2NlbmVBZG1pbnNDYWNoZS5maW5kKCQgPT4gJC5hZGRyZXNzID09PSBwbGF5ZXJBZGRyZXNzKVxuXG4gIHJldHVybiBpc0FkbWluIHx8IGlzUHJldmlldygpXG59XG5cbmNvbnN0IHVpQ29tcG9uZW50ID0gKFxuICBlbmdpbmU6IElFbmdpbmUsXG4gIHBvaW50ZXJFdmVudHNTeXN0ZW06IFBvaW50ZXJFdmVudHNTeXN0ZW0sXG4gIHNka0hlbHBlcnM/OiBJU0RLSGVscGVycyxcbiAgcGxheWVyc0hlbHBlcj86IElQbGF5ZXJzSGVscGVyLFxuKSA9PiB7XG4gIGNvbnN0IGFkbWluVG9vbGtpdEVudGl0eSA9IGdldEFkbWluVG9vbGtpdENvbXBvbmVudChlbmdpbmUpXG4gIGNvbnN0IHBsYXllciA9IHBsYXllcnNIZWxwZXI/LmdldFBsYXllcigpXG4gIGNvbnN0IGlzUGxheWVyQWRtaW4gPSBpc0FsbG93ZWRBZG1pbihlbmdpbmUsIGFkbWluVG9vbGtpdEVudGl0eSwgcGxheWVyKVxuICBzY2FsZUZhY3RvciA9IGdldFNjYWxlVUlGYWN0b3IoZW5naW5lKVxuXG4gIHJldHVybiBbXG4gICAgPFVpRW50aXR5XG4gICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICBwb3NpdGlvblR5cGU6ICdhYnNvbHV0ZScsXG4gICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgfX1cbiAgICA+XG4gICAgICB7aXNQbGF5ZXJBZG1pbiA/IChcbiAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgIHBvc2l0aW9uVHlwZTogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuICAgICAgICAgICAgcG9zaXRpb246IHsgdG9wOiA4MCAqIHNjYWxlRmFjdG9yLCByaWdodDogMTAgKiBzY2FsZUZhY3RvciB9LFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgIGRpc3BsYXk6IHN0YXRlLnBhbmVsT3BlbiA/ICdmbGV4JyA6ICdub25lJyxcbiAgICAgICAgICAgICAgd2lkdGg6IDUwMCAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICBwb2ludGVyRmlsdGVyOiAnYmxvY2snLFxuICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgICAgICAgbWFyZ2luOiB7IHJpZ2h0OiA4ICogc2NhbGVGYWN0b3IgfSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDUwICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ3JvdycsXG4gICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAxMiAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IHtcbiAgICAgICAgICAgICAgICAgIGxlZnQ6IDEyICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgICByaWdodDogMTIgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB1aUJhY2tncm91bmQ9e3sgY29sb3I6IGNvbnRhaW5lckJhY2tncm91bmRDb2xvciB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8TGFiZWxcbiAgICAgICAgICAgICAgICB2YWx1ZT1cIkFETUlOIFRPT0xTXCJcbiAgICAgICAgICAgICAgICBmb250U2l6ZT17MjAgKiBzY2FsZUZhY3Rvcn1cbiAgICAgICAgICAgICAgICBjb2xvcj17Q29sb3I0LmNyZWF0ZSgxNjAsIDE1NSwgMTY4LCAxKX1cbiAgICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17eyBmbGV4R3JvdzogMSB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgaWQ9XCJhZG1pbl90b29sa2l0X21vZGVyYXRpb25fY29udHJvbFwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD17XG4gICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuTU9ERVJBVElPTl9DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgID8gJ3ByaW1hcnknXG4gICAgICAgICAgICAgICAgICAgIDogJ3RleHQnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGljb249e0JUTl9NT0RFUkFUSU9OX0NPTlRST0x9XG4gICAgICAgICAgICAgICAgb25seUljb25cbiAgICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgZGlzcGxheTogYWRtaW5Ub29sa2l0RW50aXR5Lm1vZGVyYXRpb25Db250cm9sLmlzRW5hYmxlZCAmJiAhaXNQcmV2aWV3KClcbiAgICAgICAgICAgICAgICAgICAgPyAnZmxleCdcbiAgICAgICAgICAgICAgICAgICAgOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogNDkgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogNDIgKiBzY2FsZUZhY3RvcixcbiAgICAgICAgICAgICAgICAgIG1hcmdpbjogeyByaWdodDogOCAqIHNjYWxlRmFjdG9yIH0sXG4gICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIGljb25CYWNrZ3JvdW5kPXt7XG4gICAgICAgICAgICAgICAgICBjb2xvcjpcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLk1PREVSQVRJT05fQ09OVFJPTFxuICAgICAgICAgICAgICAgICAgICAgID8gQ29sb3I0LkJsYWNrKClcbiAgICAgICAgICAgICAgICAgICAgICA6IENvbG9yNC5XaGl0ZSgpLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgaWNvblRyYW5zZm9ybT17eyBoZWlnaHQ6ICcxMDAlJywgd2lkdGg6ICcxMDAlJyB9fVxuICAgICAgICAgICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuYWN0aXZlVGFiICE9PSBUYWJUeXBlLk1PREVSQVRJT05fQ09OVFJPTCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkVcbiAgICAgICAgICAgICAgICAgICAgbmV4dFRpY2tGdW5jdGlvbnMucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5NT0RFUkFUSU9OX0NPTlRST0xcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImFkbWluX3Rvb2xraXRfcGFuZWxfdmlkZW9fY29udHJvbFwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD17XG4gICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVklERU9fQ09OVFJPTCA/ICdwcmltYXJ5JyA6ICd0ZXh0J1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpY29uPXtCVE5fVklERU9fQ09OVFJPTH1cbiAgICAgICAgICAgICAgICBpY29uQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5WSURFT19DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgICAgPyBDb2xvcjQuQmxhY2soKVxuICAgICAgICAgICAgICAgICAgICAgIDogQ29sb3I0LldoaXRlKCksXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbmx5SWNvblxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBkaXNwbGF5OiBhZG1pblRvb2xraXRFbnRpdHkudmlkZW9Db250cm9sLmlzRW5hYmxlZFxuICAgICAgICAgICAgICAgICAgICA/ICdmbGV4J1xuICAgICAgICAgICAgICAgICAgICA6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiA0OSAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA0MiAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICAgICAgbWFyZ2luOiB7IHJpZ2h0OiA4ICogc2NhbGVGYWN0b3IgfSxcbiAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgaWNvblRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5hY3RpdmVUYWIgIT09IFRhYlR5cGUuVklERU9fQ09OVFJPTCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkVcbiAgICAgICAgICAgICAgICAgICAgbmV4dFRpY2tGdW5jdGlvbnMucHVzaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID0gVGFiVHlwZS5WSURFT19DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLk5PTkVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgaWQ9XCJhZG1pbl90b29sa2l0X3BhbmVsX3NtYXJ0X2l0ZW1zX2NvbnRyb2xcIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9e1xuICAgICAgICAgICAgICAgICAgc3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlNNQVJUX0lURU1TX0NPTlRST0xcbiAgICAgICAgICAgICAgICAgICAgPyAncHJpbWFyeSdcbiAgICAgICAgICAgICAgICAgICAgOiAndGV4dCdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWNvbj17QlROX1NNQVJUX0lURU1fQ09OVFJPTH1cbiAgICAgICAgICAgICAgICBpY29uQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5TTUFSVF9JVEVNU19DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgICAgPyBDb2xvcjQuQmxhY2soKVxuICAgICAgICAgICAgICAgICAgICAgIDogQ29sb3I0LldoaXRlKCksXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbmx5SWNvblxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBkaXNwbGF5OiBhZG1pblRvb2xraXRFbnRpdHkuc21hcnRJdGVtc0NvbnRyb2wuaXNFbmFibGVkXG4gICAgICAgICAgICAgICAgICAgID8gJ2ZsZXgnXG4gICAgICAgICAgICAgICAgICAgIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDQ5ICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQyICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggKiBzY2FsZUZhY3RvciB9LFxuICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBpY29uVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmFjdGl2ZVRhYiAhPT0gVGFiVHlwZS5TTUFSVF9JVEVNU19DT05UUk9MKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORVxuICAgICAgICAgICAgICAgICAgICBuZXh0VGlja0Z1bmN0aW9ucy5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLlNNQVJUX0lURU1TX0NPTlRST0xcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBpZD1cImFkbWluX3Rvb2xraXRfcGFuZWxfdGV4dF9hbm5vdW5jZW1lbnRfY29udHJvbFwiXG4gICAgICAgICAgICAgICAgdmFyaWFudD17XG4gICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPT09IFRhYlR5cGUuVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTCA/ICdwcmltYXJ5JyA6ICd0ZXh0J1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpY29uPXtCVE5fVEVYVF9BTk5PVU5DRU1FTlRfQ09OVFJPTH1cbiAgICAgICAgICAgICAgICBpY29uQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICAgICAgY29sb3I6XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5URVhUX0FOTk9VTkNFTUVOVF9DT05UUk9MXG4gICAgICAgICAgICAgICAgICAgICAgPyBDb2xvcjQuQmxhY2soKVxuICAgICAgICAgICAgICAgICAgICAgIDogQ29sb3I0LldoaXRlKCksXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbmx5SWNvblxuICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBkaXNwbGF5OiBhZG1pblRvb2xraXRFbnRpdHkudGV4dEFubm91bmNlbWVudENvbnRyb2wuaXNFbmFibGVkXG4gICAgICAgICAgICAgICAgICAgID8gJ2ZsZXgnXG4gICAgICAgICAgICAgICAgICAgIDogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgd2lkdGg6IDQ5ICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IDQyICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgICAgICBtYXJnaW46IHsgcmlnaHQ6IDggKiBzY2FsZUZhY3RvciB9LFxuICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBpY29uVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAlJyxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLmFjdGl2ZVRhYiAhPT0gVGFiVHlwZS5URVhUX0FOTk9VTkNFTUVOVF9DT05UUk9MKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORVxuICAgICAgICAgICAgICAgICAgICBuZXh0VGlja0Z1bmN0aW9ucy5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5hY3RpdmVUYWIgPSBUYWJUeXBlLlRFWFRfQU5OT1VOQ0VNRU5UX0NPTlRST0xcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLmFjdGl2ZVRhYiA9IFRhYlR5cGUuTk9ORVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgICAgICAge3N0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5URVhUX0FOTk9VTkNFTUVOVF9DT05UUk9MID8gKFxuICAgICAgICAgICAgICA8VGV4dEFubm91bmNlbWVudHNDb250cm9sXG4gICAgICAgICAgICAgICAgZW5naW5lPXtlbmdpbmV9XG4gICAgICAgICAgICAgICAgc3RhdGU9e3N0YXRlfVxuICAgICAgICAgICAgICAgIHBsYXllcj17cGxheWVyfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICB7c3RhdGUuYWN0aXZlVGFiID09PSBUYWJUeXBlLlZJREVPX0NPTlRST0wgPyAoXG4gICAgICAgICAgICAgIDxWaWRlb0NvbnRyb2wgZW5naW5lPXtlbmdpbmV9IHN0YXRlPXtzdGF0ZX0gLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAge3N0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5TTUFSVF9JVEVNU19DT05UUk9MID8gKFxuICAgICAgICAgICAgICA8U21hcnRJdGVtc0NvbnRyb2wgZW5naW5lPXtlbmdpbmV9IHN0YXRlPXtzdGF0ZX0gLz5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAge3N0YXRlLmFjdGl2ZVRhYiA9PT0gVGFiVHlwZS5NT0RFUkFUSU9OX0NPTlRST0wgJiYgKFxuICAgICAgICAgICAgICA8TW9kZXJhdGlvbkNvbnRyb2wgZW5naW5lPXtlbmdpbmV9IHBsYXllcj17cGxheWVyfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3tcbiAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICBoZWlnaHQ6IDQyICogc2NhbGVGYWN0b3IsXG4gICAgICAgICAgICAgIHdpZHRoOiA0MiAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgYWxpZ25Db250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICBwb2ludGVyRmlsdGVyOiAnYmxvY2snLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHVpQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICB0ZXh0dXJlOiB7XG4gICAgICAgICAgICAgICAgc3JjOiBCVE5fQURNSU5fVE9PTEtJVF9CQUNLR1JPVU5ELFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0ZXh0dXJlTW9kZTogJ3N0cmV0Y2gnLFxuICAgICAgICAgICAgICBjb2xvcjogQ29sb3I0LmNyZWF0ZSgxLCAxLCAxLCAxKSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPERDTEJ1dHRvblxuICAgICAgICAgICAgICB2YWx1ZT1cIlwiXG4gICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXt7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA0MCAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICAgIHdpZHRoOiA0MCAqIHNjYWxlRmFjdG9yLFxuICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgIGFsaWduQ29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB1aUJhY2tncm91bmQ9e3tcbiAgICAgICAgICAgICAgICB0ZXh0dXJlOiB7XG4gICAgICAgICAgICAgICAgICBzcmM6IEJUTl9BRE1JTl9UT09MS0lUX0NPTlRST0wsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0ZXh0dXJlTW9kZTogJ3N0cmV0Y2gnLFxuICAgICAgICAgICAgICAgIGNvbG9yOiBDb2xvcjQuY3JlYXRlKDEsIDEsIDEsIDEpLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0YXRlLnBhbmVsT3BlbiA9ICFzdGF0ZS5wYW5lbE9wZW5cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICkgOiBudWxsfVxuICAgICAgPFRleHRBbm5vdW5jZW1lbnRzIGVuZ2luZT17ZW5naW5lfSBzdGF0ZT17c3RhdGV9IC8+XG4gICAgPC9VaUVudGl0eT4sXG4gICAgbW9kZXJhdGlvbkNvbnRyb2xTdGF0ZS5zaG93TW9kYWxBZG1pbkxpc3QgJiYgKFxuICAgICAgPE1vZGFsQWRtaW5MaXN0XG4gICAgICAgIHNjYWxlRmFjdG9yPXtzY2FsZUZhY3Rvcn1cbiAgICAgICAgc2NlbmVBZG1pbnM9e3NjZW5lQWRtaW5zQ2FjaGUgPz8gW119XG4gICAgICAgIGVuZ2luZT17ZW5naW5lfVxuICAgICAgLz5cbiAgICApLFxuICBdXG59XG4iXX0=
|